From a63ad0fec4b6c4130b449f3baa608f26f86a276d Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 14 May 2017 18:30:21 +0200 Subject: [PATCH] Remove OculusSDK library Just waiting for a better future alternative (multiplatform)... OpenXR ? --- .../LibOVR/Include/Extras/OVR_CAPI_Util.h | 196 - .../LibOVR/Include/Extras/OVR_Math.h | 3804 ----------------- .../Include/Extras/OVR_StereoProjection.h | 70 - .../OculusSDK/LibOVR/Include/OVR_CAPI.h | 2234 ---------- .../OculusSDK/LibOVR/Include/OVR_CAPI_Audio.h | 84 - .../OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h | 158 - .../OculusSDK/LibOVR/Include/OVR_CAPI_GL.h | 102 - .../OculusSDK/LibOVR/Include/OVR_CAPI_Keys.h | 53 - .../OculusSDK/LibOVR/Include/OVR_ErrorCode.h | 156 - .../OculusSDK/LibOVR/Include/OVR_Version.h | 60 - .../OculusSDK/LibOVR/LibOVRRT32_1.dll | Bin 1044944 -> 0 bytes 11 files changed, 6917 deletions(-) delete mode 100644 src/external/OculusSDK/LibOVR/Include/Extras/OVR_CAPI_Util.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/Extras/OVR_Math.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/Extras/OVR_StereoProjection.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/OVR_CAPI.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/OVR_CAPI_Audio.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/OVR_CAPI_GL.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/OVR_CAPI_Keys.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/OVR_ErrorCode.h delete mode 100644 src/external/OculusSDK/LibOVR/Include/OVR_Version.h delete mode 100644 src/external/OculusSDK/LibOVR/LibOVRRT32_1.dll diff --git a/src/external/OculusSDK/LibOVR/Include/Extras/OVR_CAPI_Util.h b/src/external/OculusSDK/LibOVR/Include/Extras/OVR_CAPI_Util.h deleted file mode 100644 index 552f3b125..000000000 --- a/src/external/OculusSDK/LibOVR/Include/Extras/OVR_CAPI_Util.h +++ /dev/null @@ -1,196 +0,0 @@ -/********************************************************************************//** -\file OVR_CAPI_Util.h -\brief This header provides LibOVR utility function declarations -\copyright Copyright 2015-2016 Oculus VR, LLC All Rights reserved. -*************************************************************************************/ - -#ifndef OVR_CAPI_Util_h -#define OVR_CAPI_Util_h - - -#include "../OVR_CAPI.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -/// Enumerates modifications to the projection matrix based on the application's needs. -/// -/// \see ovrMatrix4f_Projection -/// -typedef enum ovrProjectionModifier_ -{ - /// Use for generating a default projection matrix that is: - /// * Right-handed. - /// * Near depth values stored in the depth buffer are smaller than far depth values. - /// * Both near and far are explicitly defined. - /// * With a clipping range that is (0 to w). - ovrProjection_None = 0x00, - - /// Enable if using left-handed transformations in your application. - ovrProjection_LeftHanded = 0x01, - - /// After the projection transform is applied, far values stored in the depth buffer will be less than closer depth values. - /// NOTE: Enable only if the application is using a floating-point depth buffer for proper precision. - ovrProjection_FarLessThanNear = 0x02, - - /// When this flag is used, the zfar value pushed into ovrMatrix4f_Projection() will be ignored - /// NOTE: Enable only if ovrProjection_FarLessThanNear is also enabled where the far clipping plane will be pushed to infinity. - ovrProjection_FarClipAtInfinity = 0x04, - - /// Enable if the application is rendering with OpenGL and expects a projection matrix with a clipping range of (-w to w). - /// Ignore this flag if your application already handles the conversion from D3D range (0 to w) to OpenGL. - ovrProjection_ClipRangeOpenGL = 0x08, -} ovrProjectionModifier; - - -/// Return values for ovr_Detect. -/// -/// \see ovr_Detect -/// -typedef struct OVR_ALIGNAS(8) ovrDetectResult_ -{ - /// Is ovrFalse when the Oculus Service is not running. - /// This means that the Oculus Service is either uninstalled or stopped. - /// IsOculusHMDConnected will be ovrFalse in this case. - /// Is ovrTrue when the Oculus Service is running. - /// This means that the Oculus Service is installed and running. - /// IsOculusHMDConnected will reflect the state of the HMD. - ovrBool IsOculusServiceRunning; - - /// Is ovrFalse when an Oculus HMD is not detected. - /// If the Oculus Service is not running, this will be ovrFalse. - /// Is ovrTrue when an Oculus HMD is detected. - /// This implies that the Oculus Service is also installed and running. - ovrBool IsOculusHMDConnected; - - OVR_UNUSED_STRUCT_PAD(pad0, 6) ///< \internal struct padding - -} ovrDetectResult; - -OVR_STATIC_ASSERT(sizeof(ovrDetectResult) == 8, "ovrDetectResult size mismatch"); - - -/// Detects Oculus Runtime and Device Status -/// -/// Checks for Oculus Runtime and Oculus HMD device status without loading the LibOVRRT -/// shared library. This may be called before ovr_Initialize() to help decide whether or -/// not to initialize LibOVR. -/// -/// \param[in] timeoutMilliseconds Specifies a timeout to wait for HMD to be attached or 0 to poll. -/// -/// \return Returns an ovrDetectResult object indicating the result of detection. -/// -/// \see ovrDetectResult -/// -OVR_PUBLIC_FUNCTION(ovrDetectResult) ovr_Detect(int timeoutMilliseconds); - -// On the Windows platform, -#ifdef _WIN32 - /// This is the Windows Named Event name that is used to check for HMD connected state. - #define OVR_HMD_CONNECTED_EVENT_NAME L"OculusHMDConnected" -#endif // _WIN32 - - -/// Used to generate projection from ovrEyeDesc::Fov. -/// -/// \param[in] fov Specifies the ovrFovPort to use. -/// \param[in] znear Distance to near Z limit. -/// \param[in] zfar Distance to far Z limit. -/// \param[in] projectionModFlags A combination of the ovrProjectionModifier flags. -/// -/// \return Returns the calculated projection matrix. -/// -/// \see ovrProjectionModifier -/// -OVR_PUBLIC_FUNCTION(ovrMatrix4f) ovrMatrix4f_Projection(ovrFovPort fov, float znear, float zfar, unsigned int projectionModFlags); - - -/// Extracts the required data from the result of ovrMatrix4f_Projection. -/// -/// \param[in] projection Specifies the project matrix from which to extract ovrTimewarpProjectionDesc. -/// \param[in] projectionModFlags A combination of the ovrProjectionModifier flags. -/// \return Returns the extracted ovrTimewarpProjectionDesc. -/// \see ovrTimewarpProjectionDesc -/// -OVR_PUBLIC_FUNCTION(ovrTimewarpProjectionDesc) ovrTimewarpProjectionDesc_FromProjection(ovrMatrix4f projection, unsigned int projectionModFlags); - - -/// Generates an orthographic sub-projection. -/// -/// Used for 2D rendering, Y is down. -/// -/// \param[in] projection The perspective matrix that the orthographic matrix is derived from. -/// \param[in] orthoScale Equal to 1.0f / pixelsPerTanAngleAtCenter. -/// \param[in] orthoDistance Equal to the distance from the camera in meters, such as 0.8m. -/// \param[in] HmdToEyeOffsetX Specifies the offset of the eye from the center. -/// -/// \return Returns the calculated projection matrix. -/// -OVR_PUBLIC_FUNCTION(ovrMatrix4f) ovrMatrix4f_OrthoSubProjection(ovrMatrix4f projection, ovrVector2f orthoScale, - float orthoDistance, float HmdToEyeOffsetX); - - - -/// Computes offset eye poses based on headPose returned by ovrTrackingState. -/// -/// \param[in] headPose Indicates the HMD position and orientation to use for the calculation. -/// \param[in] hmdToEyeOffset Can be ovrEyeRenderDesc.HmdToEyeOffset returned from -/// ovr_GetRenderDesc. For monoscopic rendering, use a vector that is the average -/// of the two vectors for both eyes. -/// \param[out] outEyePoses If outEyePoses are used for rendering, they should be passed to -/// ovr_SubmitFrame in ovrLayerEyeFov::RenderPose or ovrLayerEyeFovDepth::RenderPose. -/// -OVR_PUBLIC_FUNCTION(void) ovr_CalcEyePoses(ovrPosef headPose, - const ovrVector3f hmdToEyeOffset[2], - ovrPosef outEyePoses[2]); - - -/// Returns the predicted head pose in outHmdTrackingState and offset eye poses in outEyePoses. -/// -/// This is a thread-safe function where caller should increment frameIndex with every frame -/// and pass that index where applicable to functions called on the rendering thread. -/// Assuming outEyePoses are used for rendering, it should be passed as a part of ovrLayerEyeFov. -/// The caller does not need to worry about applying HmdToEyeOffset to the returned outEyePoses variables. -/// -/// \param[in] hmd Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] frameIndex Specifies the targeted frame index, or 0 to refer to one frame after -/// the last time ovr_SubmitFrame was called. -/// \param[in] latencyMarker Specifies that this call is the point in time where -/// the "App-to-Mid-Photon" latency timer starts from. If a given ovrLayer -/// provides "SensorSampleTimestamp", that will override the value stored here. -/// \param[in] hmdToEyeOffset Can be ovrEyeRenderDesc.HmdToEyeOffset returned from -/// ovr_GetRenderDesc. For monoscopic rendering, use a vector that is the average -/// of the two vectors for both eyes. -/// \param[out] outEyePoses The predicted eye poses. -/// \param[out] outSensorSampleTime The time when this function was called. May be NULL, in which case it is ignored. -/// -OVR_PUBLIC_FUNCTION(void) ovr_GetEyePoses(ovrSession session, long long frameIndex, ovrBool latencyMarker, - const ovrVector3f hmdToEyeOffset[2], - ovrPosef outEyePoses[2], - double* outSensorSampleTime); - - - -/// Tracking poses provided by the SDK come in a right-handed coordinate system. If an application -/// is passing in ovrProjection_LeftHanded into ovrMatrix4f_Projection, then it should also use -/// this function to flip the HMD tracking poses to be left-handed. -/// -/// While this utility function is intended to convert a left-handed ovrPosef into a right-handed -/// coordinate system, it will also work for converting right-handed to left-handed since the -/// flip operation is the same for both cases. -/// -/// \param[in] inPose that is right-handed -/// \param[out] outPose that is requested to be left-handed (can be the same pointer to inPose) -/// -OVR_PUBLIC_FUNCTION(void) ovrPosef_FlipHandedness(const ovrPosef* inPose, ovrPosef* outPose); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - - -#endif // Header include guard diff --git a/src/external/OculusSDK/LibOVR/Include/Extras/OVR_Math.h b/src/external/OculusSDK/LibOVR/Include/Extras/OVR_Math.h deleted file mode 100644 index 89293ff8f..000000000 --- a/src/external/OculusSDK/LibOVR/Include/Extras/OVR_Math.h +++ /dev/null @@ -1,3804 +0,0 @@ -/********************************************************************************//** -\file OVR_Math.h -\brief Implementation of 3D primitives such as vectors, matrices. -\copyright Copyright 2014-2016 Oculus VR, LLC All Rights reserved. -*************************************************************************************/ - -#ifndef OVR_Math_h -#define OVR_Math_h - - -// This file is intended to be independent of the rest of LibOVR and LibOVRKernel and thus -// has no #include dependencies on either. - -#include -#include -#include -#include -#include -#include -#include "../OVR_CAPI.h" // Currently required due to a dependence on the ovrFovPort_ declaration. - -#if defined(_MSC_VER) - #pragma warning(push) - #pragma warning(disable: 4127) // conditional expression is constant -#endif - - -#if defined(_MSC_VER) - #define OVRMath_sprintf sprintf_s -#else - #define OVRMath_sprintf snprintf -#endif - - -//------------------------------------------------------------------------------------- -// ***** OVR_MATH_ASSERT -// -// Independent debug break implementation for OVR_Math.h. - -#if !defined(OVR_MATH_DEBUG_BREAK) - #if defined(_DEBUG) - #if defined(_MSC_VER) - #define OVR_MATH_DEBUG_BREAK __debugbreak() - #else - #define OVR_MATH_DEBUG_BREAK __builtin_trap() - #endif - #else - #define OVR_MATH_DEBUG_BREAK ((void)0) - #endif -#endif - - -//------------------------------------------------------------------------------------- -// ***** OVR_MATH_ASSERT -// -// Independent OVR_MATH_ASSERT implementation for OVR_Math.h. - -#if !defined(OVR_MATH_ASSERT) - #if defined(_DEBUG) - #define OVR_MATH_ASSERT(p) if (!(p)) { OVR_MATH_DEBUG_BREAK; } - #else - #define OVR_MATH_ASSERT(p) ((void)0) - #endif -#endif - - -//------------------------------------------------------------------------------------- -// ***** OVR_MATH_STATIC_ASSERT -// -// Independent OVR_MATH_ASSERT implementation for OVR_Math.h. - -#if !defined(OVR_MATH_STATIC_ASSERT) - #if defined(__cplusplus) && ((defined(_MSC_VER) && (defined(_MSC_VER) >= 1600)) || defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)) - #define OVR_MATH_STATIC_ASSERT static_assert - #else - #if !defined(OVR_SA_UNUSED) - #if defined(__GNUC__) || defined(__clang__) - #define OVR_SA_UNUSED __attribute__((unused)) - #else - #define OVR_SA_UNUSED - #endif - #define OVR_SA_PASTE(a,b) a##b - #define OVR_SA_HELP(a,b) OVR_SA_PASTE(a,b) - #endif - - #define OVR_MATH_STATIC_ASSERT(expression, msg) typedef char OVR_SA_HELP(compileTimeAssert, __LINE__) [((expression) != 0) ? 1 : -1] OVR_SA_UNUSED - #endif -#endif - - - -namespace OVR { - -template -const T OVRMath_Min(const T a, const T b) -{ return (a < b) ? a : b; } - -template -const T OVRMath_Max(const T a, const T b) -{ return (b < a) ? a : b; } - -template -void OVRMath_Swap(T& a, T& b) -{ T temp(a); a = b; b = temp; } - - -//------------------------------------------------------------------------------------- -// ***** Constants for 3D world/axis definitions. - -// Definitions of axes for coordinate and rotation conversions. -enum Axis -{ - Axis_X = 0, Axis_Y = 1, Axis_Z = 2 -}; - -// RotateDirection describes the rotation direction around an axis, interpreted as follows: -// CW - Clockwise while looking "down" from positive axis towards the origin. -// CCW - Counter-clockwise while looking from the positive axis towards the origin, -// which is in the negative axis direction. -// CCW is the default for the RHS coordinate system. Oculus standard RHS coordinate -// system defines Y up, X right, and Z back (pointing out from the screen). In this -// system Rotate_CCW around Z will specifies counter-clockwise rotation in XY plane. -enum RotateDirection -{ - Rotate_CCW = 1, - Rotate_CW = -1 -}; - -// Constants for right handed and left handed coordinate systems -enum HandedSystem -{ - Handed_R = 1, Handed_L = -1 -}; - -// AxisDirection describes which way the coordinate axis points. Used by WorldAxes. -enum AxisDirection -{ - Axis_Up = 2, - Axis_Down = -2, - Axis_Right = 1, - Axis_Left = -1, - Axis_In = 3, - Axis_Out = -3 -}; - -struct WorldAxes -{ - AxisDirection XAxis, YAxis, ZAxis; - - WorldAxes(AxisDirection x, AxisDirection y, AxisDirection z) - : XAxis(x), YAxis(y), ZAxis(z) - { OVR_MATH_ASSERT(abs(x) != abs(y) && abs(y) != abs(z) && abs(z) != abs(x));} -}; - -} // namespace OVR - - -//------------------------------------------------------------------------------------// -// ***** C Compatibility Types - -// These declarations are used to support conversion between C types used in -// LibOVR C interfaces and their C++ versions. As an example, they allow passing -// Vector3f into a function that expects ovrVector3f. - -typedef struct ovrQuatf_ ovrQuatf; -typedef struct ovrQuatd_ ovrQuatd; -typedef struct ovrSizei_ ovrSizei; -typedef struct ovrSizef_ ovrSizef; -typedef struct ovrSized_ ovrSized; -typedef struct ovrRecti_ ovrRecti; -typedef struct ovrVector2i_ ovrVector2i; -typedef struct ovrVector2f_ ovrVector2f; -typedef struct ovrVector2d_ ovrVector2d; -typedef struct ovrVector3f_ ovrVector3f; -typedef struct ovrVector3d_ ovrVector3d; -typedef struct ovrVector4f_ ovrVector4f; -typedef struct ovrVector4d_ ovrVector4d; -typedef struct ovrMatrix2f_ ovrMatrix2f; -typedef struct ovrMatrix2d_ ovrMatrix2d; -typedef struct ovrMatrix3f_ ovrMatrix3f; -typedef struct ovrMatrix3d_ ovrMatrix3d; -typedef struct ovrMatrix4f_ ovrMatrix4f; -typedef struct ovrMatrix4d_ ovrMatrix4d; -typedef struct ovrPosef_ ovrPosef; -typedef struct ovrPosed_ ovrPosed; -typedef struct ovrPoseStatef_ ovrPoseStatef; -typedef struct ovrPoseStated_ ovrPoseStated; - -namespace OVR { - -// Forward-declare our templates. -template class Quat; -template class Size; -template class Rect; -template class Vector2; -template class Vector3; -template class Vector4; -template class Matrix2; -template class Matrix3; -template class Matrix4; -template class Pose; -template class PoseState; - -// CompatibleTypes::Type is used to lookup a compatible C-version of a C++ class. -template -struct CompatibleTypes -{ - // Declaration here seems necessary for MSVC; specializations are - // used instead. - typedef struct {} Type; -}; - -// Specializations providing CompatibleTypes::Type value. -template<> struct CompatibleTypes > { typedef ovrQuatf Type; }; -template<> struct CompatibleTypes > { typedef ovrQuatd Type; }; -template<> struct CompatibleTypes > { typedef ovrMatrix2f Type; }; -template<> struct CompatibleTypes > { typedef ovrMatrix2d Type; }; -template<> struct CompatibleTypes > { typedef ovrMatrix3f Type; }; -template<> struct CompatibleTypes > { typedef ovrMatrix3d Type; }; -template<> struct CompatibleTypes > { typedef ovrMatrix4f Type; }; -template<> struct CompatibleTypes > { typedef ovrMatrix4d Type; }; -template<> struct CompatibleTypes > { typedef ovrSizei Type; }; -template<> struct CompatibleTypes > { typedef ovrSizef Type; }; -template<> struct CompatibleTypes > { typedef ovrSized Type; }; -template<> struct CompatibleTypes > { typedef ovrRecti Type; }; -template<> struct CompatibleTypes > { typedef ovrVector2i Type; }; -template<> struct CompatibleTypes > { typedef ovrVector2f Type; }; -template<> struct CompatibleTypes > { typedef ovrVector2d Type; }; -template<> struct CompatibleTypes > { typedef ovrVector3f Type; }; -template<> struct CompatibleTypes > { typedef ovrVector3d Type; }; -template<> struct CompatibleTypes > { typedef ovrVector4f Type; }; -template<> struct CompatibleTypes > { typedef ovrVector4d Type; }; -template<> struct CompatibleTypes > { typedef ovrPosef Type; }; -template<> struct CompatibleTypes > { typedef ovrPosed Type; }; - -//------------------------------------------------------------------------------------// -// ***** Math -// -// Math class contains constants and functions. This class is a template specialized -// per type, with Math and Math being distinct. -template -class Math -{ -public: - // By default, support explicit conversion to float. This allows Vector2 to - // compile, for example. - typedef float OtherFloatType; - - static int Tolerance() { return 0; } // Default value so integer types compile -}; - - -//------------------------------------------------------------------------------------// -// ***** double constants -#define MATH_DOUBLE_PI 3.14159265358979323846 -#define MATH_DOUBLE_TWOPI (2*MATH_DOUBLE_PI) -#define MATH_DOUBLE_PIOVER2 (0.5*MATH_DOUBLE_PI) -#define MATH_DOUBLE_PIOVER4 (0.25*MATH_DOUBLE_PI) -#define MATH_FLOAT_MAXVALUE (FLT_MAX) - -#define MATH_DOUBLE_RADTODEGREEFACTOR (360.0 / MATH_DOUBLE_TWOPI) -#define MATH_DOUBLE_DEGREETORADFACTOR (MATH_DOUBLE_TWOPI / 360.0) - -#define MATH_DOUBLE_E 2.71828182845904523536 -#define MATH_DOUBLE_LOG2E 1.44269504088896340736 -#define MATH_DOUBLE_LOG10E 0.434294481903251827651 -#define MATH_DOUBLE_LN2 0.693147180559945309417 -#define MATH_DOUBLE_LN10 2.30258509299404568402 - -#define MATH_DOUBLE_SQRT2 1.41421356237309504880 -#define MATH_DOUBLE_SQRT1_2 0.707106781186547524401 - -#define MATH_DOUBLE_TOLERANCE 1e-12 // a default number for value equality tolerance: about 4500*Epsilon; -#define MATH_DOUBLE_SINGULARITYRADIUS 1e-12 // about 1-cos(.0001 degree), for gimbal lock numerical problems - -//------------------------------------------------------------------------------------// -// ***** float constants -#define MATH_FLOAT_PI float(MATH_DOUBLE_PI) -#define MATH_FLOAT_TWOPI float(MATH_DOUBLE_TWOPI) -#define MATH_FLOAT_PIOVER2 float(MATH_DOUBLE_PIOVER2) -#define MATH_FLOAT_PIOVER4 float(MATH_DOUBLE_PIOVER4) - -#define MATH_FLOAT_RADTODEGREEFACTOR float(MATH_DOUBLE_RADTODEGREEFACTOR) -#define MATH_FLOAT_DEGREETORADFACTOR float(MATH_DOUBLE_DEGREETORADFACTOR) - -#define MATH_FLOAT_E float(MATH_DOUBLE_E) -#define MATH_FLOAT_LOG2E float(MATH_DOUBLE_LOG2E) -#define MATH_FLOAT_LOG10E float(MATH_DOUBLE_LOG10E) -#define MATH_FLOAT_LN2 float(MATH_DOUBLE_LN2) -#define MATH_FLOAT_LN10 float(MATH_DOUBLE_LN10) - -#define MATH_FLOAT_SQRT2 float(MATH_DOUBLE_SQRT2) -#define MATH_FLOAT_SQRT1_2 float(MATH_DOUBLE_SQRT1_2) - -#define MATH_FLOAT_TOLERANCE 1e-5f // a default number for value equality tolerance: 1e-5, about 84*EPSILON; -#define MATH_FLOAT_SINGULARITYRADIUS 1e-7f // about 1-cos(.025 degree), for gimbal lock numerical problems - - - -// Single-precision Math constants class. -template<> -class Math -{ -public: - typedef double OtherFloatType; - - static inline float Tolerance() { return MATH_FLOAT_TOLERANCE; }; // a default number for value equality tolerance - static inline float SingularityRadius() { return MATH_FLOAT_SINGULARITYRADIUS; }; // for gimbal lock numerical problems -}; - -// Double-precision Math constants class -template<> -class Math -{ -public: - typedef float OtherFloatType; - - static inline double Tolerance() { return MATH_DOUBLE_TOLERANCE; }; // a default number for value equality tolerance - static inline double SingularityRadius() { return MATH_DOUBLE_SINGULARITYRADIUS; }; // for gimbal lock numerical problems -}; - -typedef Math Mathf; -typedef Math Mathd; - -// Conversion functions between degrees and radians -// (non-templated to ensure passing int arguments causes warning) -inline float RadToDegree(float rad) { return rad * MATH_FLOAT_RADTODEGREEFACTOR; } -inline double RadToDegree(double rad) { return rad * MATH_DOUBLE_RADTODEGREEFACTOR; } - -inline float DegreeToRad(float deg) { return deg * MATH_FLOAT_DEGREETORADFACTOR; } -inline double DegreeToRad(double deg) { return deg * MATH_DOUBLE_DEGREETORADFACTOR; } - -// Square function -template -inline T Sqr(T x) { return x*x; } - -// Sign: returns 0 if x == 0, -1 if x < 0, and 1 if x > 0 -template -inline T Sign(T x) { return (x != T(0)) ? (x < T(0) ? T(-1) : T(1)) : T(0); } - -// Numerically stable acos function -inline float Acos(float x) { return (x > 1.0f) ? 0.0f : (x < -1.0f) ? MATH_FLOAT_PI : acosf(x); } -inline double Acos(double x) { return (x > 1.0) ? 0.0 : (x < -1.0) ? MATH_DOUBLE_PI : acos(x); } - -// Numerically stable asin function -inline float Asin(float x) { return (x > 1.0f) ? MATH_FLOAT_PIOVER2 : (x < -1.0f) ? -MATH_FLOAT_PIOVER2 : asinf(x); } -inline double Asin(double x) { return (x > 1.0) ? MATH_DOUBLE_PIOVER2 : (x < -1.0) ? -MATH_DOUBLE_PIOVER2 : asin(x); } - -#if defined(_MSC_VER) - inline int isnan(double x) { return ::_isnan(x); } -#elif !defined(isnan) // Some libraries #define isnan. - inline int isnan(double x) { return ::isnan(x); } -#endif - -template -class Quat; - - -//------------------------------------------------------------------------------------- -// ***** Vector2<> - -// Vector2f (Vector2d) represents a 2-dimensional vector or point in space, -// consisting of coordinates x and y - -template -class Vector2 -{ -public: - typedef T ElementType; - static const size_t ElementCount = 2; - - T x, y; - - Vector2() : x(0), y(0) { } - Vector2(T x_, T y_) : x(x_), y(y_) { } - explicit Vector2(T s) : x(s), y(s) { } - explicit Vector2(const Vector2::OtherFloatType> &src) - : x((T)src.x), y((T)src.y) { } - - static Vector2 Zero() { return Vector2(0, 0); } - - // C-interop support. - typedef typename CompatibleTypes >::Type CompatibleType; - - Vector2(const CompatibleType& s) : x(s.x), y(s.y) { } - - operator const CompatibleType& () const - { - OVR_MATH_STATIC_ASSERT(sizeof(Vector2) == sizeof(CompatibleType), "sizeof(Vector2) failure"); - return reinterpret_cast(*this); - } - - - bool operator== (const Vector2& b) const { return x == b.x && y == b.y; } - bool operator!= (const Vector2& b) const { return x != b.x || y != b.y; } - - Vector2 operator+ (const Vector2& b) const { return Vector2(x + b.x, y + b.y); } - Vector2& operator+= (const Vector2& b) { x += b.x; y += b.y; return *this; } - Vector2 operator- (const Vector2& b) const { return Vector2(x - b.x, y - b.y); } - Vector2& operator-= (const Vector2& b) { x -= b.x; y -= b.y; return *this; } - Vector2 operator- () const { return Vector2(-x, -y); } - - // Scalar multiplication/division scales vector. - Vector2 operator* (T s) const { return Vector2(x*s, y*s); } - Vector2& operator*= (T s) { x *= s; y *= s; return *this; } - - Vector2 operator/ (T s) const { T rcp = T(1)/s; - return Vector2(x*rcp, y*rcp); } - Vector2& operator/= (T s) { T rcp = T(1)/s; - x *= rcp; y *= rcp; - return *this; } - - static Vector2 Min(const Vector2& a, const Vector2& b) { return Vector2((a.x < b.x) ? a.x : b.x, - (a.y < b.y) ? a.y : b.y); } - static Vector2 Max(const Vector2& a, const Vector2& b) { return Vector2((a.x > b.x) ? a.x : b.x, - (a.y > b.y) ? a.y : b.y); } - - Vector2 Clamped(T maxMag) const - { - T magSquared = LengthSq(); - if (magSquared <= Sqr(maxMag)) - return *this; - else - return *this * (maxMag / sqrt(magSquared)); - } - - // Compare two vectors for equality with tolerance. Returns true if vectors match withing tolerance. - bool IsEqual(const Vector2& b, T tolerance =Math::Tolerance()) const - { - return (fabs(b.x-x) <= tolerance) && - (fabs(b.y-y) <= tolerance); - } - bool Compare(const Vector2& b, T tolerance = Math::Tolerance()) const - { - return IsEqual(b, tolerance); - } - - // Access element by index - T& operator[] (int idx) - { - OVR_MATH_ASSERT(0 <= idx && idx < 2); - return *(&x + idx); - } - const T& operator[] (int idx) const - { - OVR_MATH_ASSERT(0 <= idx && idx < 2); - return *(&x + idx); - } - - // Entry-wise product of two vectors - Vector2 EntrywiseMultiply(const Vector2& b) const { return Vector2(x * b.x, y * b.y);} - - - // Multiply and divide operators do entry-wise math. Used Dot() for dot product. - Vector2 operator* (const Vector2& b) const { return Vector2(x * b.x, y * b.y); } - Vector2 operator/ (const Vector2& b) const { return Vector2(x / b.x, y / b.y); } - - // Dot product - // Used to calculate angle q between two vectors among other things, - // as (A dot B) = |a||b|cos(q). - T Dot(const Vector2& b) const { return x*b.x + y*b.y; } - - // Returns the angle from this vector to b, in radians. - T Angle(const Vector2& b) const - { - T div = LengthSq()*b.LengthSq(); - OVR_MATH_ASSERT(div != T(0)); - T result = Acos((this->Dot(b))/sqrt(div)); - return result; - } - - // Return Length of the vector squared. - T LengthSq() const { return (x * x + y * y); } - - // Return vector length. - T Length() const { return sqrt(LengthSq()); } - - // Returns squared distance between two points represented by vectors. - T DistanceSq(const Vector2& b) const { return (*this - b).LengthSq(); } - - // Returns distance between two points represented by vectors. - T Distance(const Vector2& b) const { return (*this - b).Length(); } - - // Determine if this a unit vector. - bool IsNormalized() const { return fabs(LengthSq() - T(1)) < Math::Tolerance(); } - - // Normalize, convention vector length to 1. - void Normalize() - { - T s = Length(); - if (s != T(0)) - s = T(1) / s; - *this *= s; - } - - // Returns normalized (unit) version of the vector without modifying itself. - Vector2 Normalized() const - { - T s = Length(); - if (s != T(0)) - s = T(1) / s; - return *this * s; - } - - // Linearly interpolates from this vector to another. - // Factor should be between 0.0 and 1.0, with 0 giving full value to this. - Vector2 Lerp(const Vector2& b, T f) const { return *this*(T(1) - f) + b*f; } - - // Projects this vector onto the argument; in other words, - // A.Project(B) returns projection of vector A onto B. - Vector2 ProjectTo(const Vector2& b) const - { - T l2 = b.LengthSq(); - OVR_MATH_ASSERT(l2 != T(0)); - return b * ( Dot(b) / l2 ); - } - - // returns true if vector b is clockwise from this vector - bool IsClockwise(const Vector2& b) const - { - return (x * b.y - y * b.x) < 0; - } -}; - - -typedef Vector2 Vector2f; -typedef Vector2 Vector2d; -typedef Vector2 Vector2i; - -typedef Vector2 Point2f; -typedef Vector2 Point2d; -typedef Vector2 Point2i; - -//------------------------------------------------------------------------------------- -// ***** Vector3<> - 3D vector of {x, y, z} - -// -// Vector3f (Vector3d) represents a 3-dimensional vector or point in space, -// consisting of coordinates x, y and z. - -template -class Vector3 -{ -public: - typedef T ElementType; - static const size_t ElementCount = 3; - - T x, y, z; - - // FIXME: default initialization of a vector class can be very expensive in a full-blown - // application. A few hundred thousand vector constructions is not unlikely and can add - // up to milliseconds of time on processors like the PS3 PPU. - Vector3() : x(0), y(0), z(0) { } - Vector3(T x_, T y_, T z_ = 0) : x(x_), y(y_), z(z_) { } - explicit Vector3(T s) : x(s), y(s), z(s) { } - explicit Vector3(const Vector3::OtherFloatType> &src) - : x((T)src.x), y((T)src.y), z((T)src.z) { } - - static Vector3 Zero() { return Vector3(0, 0, 0); } - - // C-interop support. - typedef typename CompatibleTypes >::Type CompatibleType; - - Vector3(const CompatibleType& s) : x(s.x), y(s.y), z(s.z) { } - - operator const CompatibleType& () const - { - OVR_MATH_STATIC_ASSERT(sizeof(Vector3) == sizeof(CompatibleType), "sizeof(Vector3) failure"); - return reinterpret_cast(*this); - } - - bool operator== (const Vector3& b) const { return x == b.x && y == b.y && z == b.z; } - bool operator!= (const Vector3& b) const { return x != b.x || y != b.y || z != b.z; } - - Vector3 operator+ (const Vector3& b) const { return Vector3(x + b.x, y + b.y, z + b.z); } - Vector3& operator+= (const Vector3& b) { x += b.x; y += b.y; z += b.z; return *this; } - Vector3 operator- (const Vector3& b) const { return Vector3(x - b.x, y - b.y, z - b.z); } - Vector3& operator-= (const Vector3& b) { x -= b.x; y -= b.y; z -= b.z; return *this; } - Vector3 operator- () const { return Vector3(-x, -y, -z); } - - // Scalar multiplication/division scales vector. - Vector3 operator* (T s) const { return Vector3(x*s, y*s, z*s); } - Vector3& operator*= (T s) { x *= s; y *= s; z *= s; return *this; } - - Vector3 operator/ (T s) const { T rcp = T(1)/s; - return Vector3(x*rcp, y*rcp, z*rcp); } - Vector3& operator/= (T s) { T rcp = T(1)/s; - x *= rcp; y *= rcp; z *= rcp; - return *this; } - - static Vector3 Min(const Vector3& a, const Vector3& b) - { - return Vector3((a.x < b.x) ? a.x : b.x, - (a.y < b.y) ? a.y : b.y, - (a.z < b.z) ? a.z : b.z); - } - static Vector3 Max(const Vector3& a, const Vector3& b) - { - return Vector3((a.x > b.x) ? a.x : b.x, - (a.y > b.y) ? a.y : b.y, - (a.z > b.z) ? a.z : b.z); - } - - Vector3 Clamped(T maxMag) const - { - T magSquared = LengthSq(); - if (magSquared <= Sqr(maxMag)) - return *this; - else - return *this * (maxMag / sqrt(magSquared)); - } - - // Compare two vectors for equality with tolerance. Returns true if vectors match withing tolerance. - bool IsEqual(const Vector3& b, T tolerance = Math::Tolerance()) const - { - return (fabs(b.x-x) <= tolerance) && - (fabs(b.y-y) <= tolerance) && - (fabs(b.z-z) <= tolerance); - } - bool Compare(const Vector3& b, T tolerance = Math::Tolerance()) const - { - return IsEqual(b, tolerance); - } - - T& operator[] (int idx) - { - OVR_MATH_ASSERT(0 <= idx && idx < 3); - return *(&x + idx); - } - - const T& operator[] (int idx) const - { - OVR_MATH_ASSERT(0 <= idx && idx < 3); - return *(&x + idx); - } - - // Entrywise product of two vectors - Vector3 EntrywiseMultiply(const Vector3& b) const { return Vector3(x * b.x, - y * b.y, - z * b.z);} - - // Multiply and divide operators do entry-wise math - Vector3 operator* (const Vector3& b) const { return Vector3(x * b.x, - y * b.y, - z * b.z); } - - Vector3 operator/ (const Vector3& b) const { return Vector3(x / b.x, - y / b.y, - z / b.z); } - - - // Dot product - // Used to calculate angle q between two vectors among other things, - // as (A dot B) = |a||b|cos(q). - T Dot(const Vector3& b) const { return x*b.x + y*b.y + z*b.z; } - - // Compute cross product, which generates a normal vector. - // Direction vector can be determined by right-hand rule: Pointing index finder in - // direction a and middle finger in direction b, thumb will point in a.Cross(b). - Vector3 Cross(const Vector3& b) const { return Vector3(y*b.z - z*b.y, - z*b.x - x*b.z, - x*b.y - y*b.x); } - - // Returns the angle from this vector to b, in radians. - T Angle(const Vector3& b) const - { - T div = LengthSq()*b.LengthSq(); - OVR_MATH_ASSERT(div != T(0)); - T result = Acos((this->Dot(b))/sqrt(div)); - return result; - } - - // Return Length of the vector squared. - T LengthSq() const { return (x * x + y * y + z * z); } - - // Return vector length. - T Length() const { return (T)sqrt(LengthSq()); } - - // Returns squared distance between two points represented by vectors. - T DistanceSq(Vector3 const& b) const { return (*this - b).LengthSq(); } - - // Returns distance between two points represented by vectors. - T Distance(Vector3 const& b) const { return (*this - b).Length(); } - - bool IsNormalized() const { return fabs(LengthSq() - T(1)) < Math::Tolerance(); } - - // Normalize, convention vector length to 1. - void Normalize() - { - T s = Length(); - if (s != T(0)) - s = T(1) / s; - *this *= s; - } - - // Returns normalized (unit) version of the vector without modifying itself. - Vector3 Normalized() const - { - T s = Length(); - if (s != T(0)) - s = T(1) / s; - return *this * s; - } - - // Linearly interpolates from this vector to another. - // Factor should be between 0.0 and 1.0, with 0 giving full value to this. - Vector3 Lerp(const Vector3& b, T f) const { return *this*(T(1) - f) + b*f; } - - // Projects this vector onto the argument; in other words, - // A.Project(B) returns projection of vector A onto B. - Vector3 ProjectTo(const Vector3& b) const - { - T l2 = b.LengthSq(); - OVR_MATH_ASSERT(l2 != T(0)); - return b * ( Dot(b) / l2 ); - } - - // Projects this vector onto a plane defined by a normal vector - Vector3 ProjectToPlane(const Vector3& normal) const { return *this - this->ProjectTo(normal); } -}; - -typedef Vector3 Vector3f; -typedef Vector3 Vector3d; -typedef Vector3 Vector3i; - -OVR_MATH_STATIC_ASSERT((sizeof(Vector3f) == 3*sizeof(float)), "sizeof(Vector3f) failure"); -OVR_MATH_STATIC_ASSERT((sizeof(Vector3d) == 3*sizeof(double)), "sizeof(Vector3d) failure"); -OVR_MATH_STATIC_ASSERT((sizeof(Vector3i) == 3*sizeof(int32_t)), "sizeof(Vector3i) failure"); - -typedef Vector3 Point3f; -typedef Vector3 Point3d; -typedef Vector3 Point3i; - - -//------------------------------------------------------------------------------------- -// ***** Vector4<> - 4D vector of {x, y, z, w} - -// -// Vector4f (Vector4d) represents a 3-dimensional vector or point in space, -// consisting of coordinates x, y, z and w. - -template -class Vector4 -{ -public: - typedef T ElementType; - static const size_t ElementCount = 4; - - T x, y, z, w; - - // FIXME: default initialization of a vector class can be very expensive in a full-blown - // application. A few hundred thousand vector constructions is not unlikely and can add - // up to milliseconds of time on processors like the PS3 PPU. - Vector4() : x(0), y(0), z(0), w(0) { } - Vector4(T x_, T y_, T z_, T w_) : x(x_), y(y_), z(z_), w(w_) { } - explicit Vector4(T s) : x(s), y(s), z(s), w(s) { } - explicit Vector4(const Vector3& v, const T w_=T(1)) : x(v.x), y(v.y), z(v.z), w(w_) { } - explicit Vector4(const Vector4::OtherFloatType> &src) - : x((T)src.x), y((T)src.y), z((T)src.z), w((T)src.w) { } - - static Vector4 Zero() { return Vector4(0, 0, 0, 0); } - - // C-interop support. - typedef typename CompatibleTypes< Vector4 >::Type CompatibleType; - - Vector4(const CompatibleType& s) : x(s.x), y(s.y), z(s.z), w(s.w) { } - - operator const CompatibleType& () const - { - OVR_MATH_STATIC_ASSERT(sizeof(Vector4) == sizeof(CompatibleType), "sizeof(Vector4) failure"); - return reinterpret_cast(*this); - } - - Vector4& operator= (const Vector3& other) { x=other.x; y=other.y; z=other.z; w=1; return *this; } - bool operator== (const Vector4& b) const { return x == b.x && y == b.y && z == b.z && w == b.w; } - bool operator!= (const Vector4& b) const { return x != b.x || y != b.y || z != b.z || w != b.w; } - - Vector4 operator+ (const Vector4& b) const { return Vector4(x + b.x, y + b.y, z + b.z, w + b.w); } - Vector4& operator+= (const Vector4& b) { x += b.x; y += b.y; z += b.z; w += b.w; return *this; } - Vector4 operator- (const Vector4& b) const { return Vector4(x - b.x, y - b.y, z - b.z, w - b.w); } - Vector4& operator-= (const Vector4& b) { x -= b.x; y -= b.y; z -= b.z; w -= b.w; return *this; } - Vector4 operator- () const { return Vector4(-x, -y, -z, -w); } - - // Scalar multiplication/division scales vector. - Vector4 operator* (T s) const { return Vector4(x*s, y*s, z*s, w*s); } - Vector4& operator*= (T s) { x *= s; y *= s; z *= s; w *= s;return *this; } - - Vector4 operator/ (T s) const { T rcp = T(1)/s; - return Vector4(x*rcp, y*rcp, z*rcp, w*rcp); } - Vector4& operator/= (T s) { T rcp = T(1)/s; - x *= rcp; y *= rcp; z *= rcp; w *= rcp; - return *this; } - - static Vector4 Min(const Vector4& a, const Vector4& b) - { - return Vector4((a.x < b.x) ? a.x : b.x, - (a.y < b.y) ? a.y : b.y, - (a.z < b.z) ? a.z : b.z, - (a.w < b.w) ? a.w : b.w); - } - static Vector4 Max(const Vector4& a, const Vector4& b) - { - return Vector4((a.x > b.x) ? a.x : b.x, - (a.y > b.y) ? a.y : b.y, - (a.z > b.z) ? a.z : b.z, - (a.w > b.w) ? a.w : b.w); - } - - Vector4 Clamped(T maxMag) const - { - T magSquared = LengthSq(); - if (magSquared <= Sqr(maxMag)) - return *this; - else - return *this * (maxMag / sqrt(magSquared)); - } - - // Compare two vectors for equality with tolerance. Returns true if vectors match withing tolerance. - bool IsEqual(const Vector4& b, T tolerance = Math::Tolerance()) const - { - return (fabs(b.x-x) <= tolerance) && - (fabs(b.y-y) <= tolerance) && - (fabs(b.z-z) <= tolerance) && - (fabs(b.w-w) <= tolerance); - } - bool Compare(const Vector4& b, T tolerance = Math::Tolerance()) const - { - return IsEqual(b, tolerance); - } - - T& operator[] (int idx) - { - OVR_MATH_ASSERT(0 <= idx && idx < 4); - return *(&x + idx); - } - - const T& operator[] (int idx) const - { - OVR_MATH_ASSERT(0 <= idx && idx < 4); - return *(&x + idx); - } - - // Entry wise product of two vectors - Vector4 EntrywiseMultiply(const Vector4& b) const { return Vector4(x * b.x, - y * b.y, - z * b.z, - w * b.w);} - - // Multiply and divide operators do entry-wise math - Vector4 operator* (const Vector4& b) const { return Vector4(x * b.x, - y * b.y, - z * b.z, - w * b.w); } - - Vector4 operator/ (const Vector4& b) const { return Vector4(x / b.x, - y / b.y, - z / b.z, - w / b.w); } - - - // Dot product - T Dot(const Vector4& b) const { return x*b.x + y*b.y + z*b.z + w*b.w; } - - // Return Length of the vector squared. - T LengthSq() const { return (x * x + y * y + z * z + w * w); } - - // Return vector length. - T Length() const { return sqrt(LengthSq()); } - - bool IsNormalized() const { return fabs(LengthSq() - T(1)) < Math::Tolerance(); } - - // Normalize, convention vector length to 1. - void Normalize() - { - T s = Length(); - if (s != T(0)) - s = T(1) / s; - *this *= s; - } - - // Returns normalized (unit) version of the vector without modifying itself. - Vector4 Normalized() const - { - T s = Length(); - if (s != T(0)) - s = T(1) / s; - return *this * s; - } - - // Linearly interpolates from this vector to another. - // Factor should be between 0.0 and 1.0, with 0 giving full value to this. - Vector4 Lerp(const Vector4& b, T f) const { return *this*(T(1) - f) + b*f; } -}; - -typedef Vector4 Vector4f; -typedef Vector4 Vector4d; -typedef Vector4 Vector4i; - - -//------------------------------------------------------------------------------------- -// ***** Bounds3 - -// Bounds class used to describe a 3D axis aligned bounding box. - -template -class Bounds3 -{ -public: - Vector3 b[2]; - - Bounds3() - { - } - - Bounds3( const Vector3 & mins, const Vector3 & maxs ) -{ - b[0] = mins; - b[1] = maxs; - } - - void Clear() - { - b[0].x = b[0].y = b[0].z = Math::MaxValue; - b[1].x = b[1].y = b[1].z = -Math::MaxValue; - } - - void AddPoint( const Vector3 & v ) - { - b[0].x = (b[0].x < v.x ? b[0].x : v.x); - b[0].y = (b[0].y < v.y ? b[0].y : v.y); - b[0].z = (b[0].z < v.z ? b[0].z : v.z); - b[1].x = (v.x < b[1].x ? b[1].x : v.x); - b[1].y = (v.y < b[1].y ? b[1].y : v.y); - b[1].z = (v.z < b[1].z ? b[1].z : v.z); - } - - const Vector3 & GetMins() const { return b[0]; } - const Vector3 & GetMaxs() const { return b[1]; } - - Vector3 & GetMins() { return b[0]; } - Vector3 & GetMaxs() { return b[1]; } -}; - -typedef Bounds3 Bounds3f; -typedef Bounds3 Bounds3d; - - -//------------------------------------------------------------------------------------- -// ***** Size - -// Size class represents 2D size with Width, Height components. -// Used to describe distentions of render targets, etc. - -template -class Size -{ -public: - T w, h; - - Size() : w(0), h(0) { } - Size(T w_, T h_) : w(w_), h(h_) { } - explicit Size(T s) : w(s), h(s) { } - explicit Size(const Size::OtherFloatType> &src) - : w((T)src.w), h((T)src.h) { } - - // C-interop support. - typedef typename CompatibleTypes >::Type CompatibleType; - - Size(const CompatibleType& s) : w(s.w), h(s.h) { } - - operator const CompatibleType& () const - { - OVR_MATH_STATIC_ASSERT(sizeof(Size) == sizeof(CompatibleType), "sizeof(Size) failure"); - return reinterpret_cast(*this); - } - - bool operator== (const Size& b) const { return w == b.w && h == b.h; } - bool operator!= (const Size& b) const { return w != b.w || h != b.h; } - - Size operator+ (const Size& b) const { return Size(w + b.w, h + b.h); } - Size& operator+= (const Size& b) { w += b.w; h += b.h; return *this; } - Size operator- (const Size& b) const { return Size(w - b.w, h - b.h); } - Size& operator-= (const Size& b) { w -= b.w; h -= b.h; return *this; } - Size operator- () const { return Size(-w, -h); } - Size operator* (const Size& b) const { return Size(w * b.w, h * b.h); } - Size& operator*= (const Size& b) { w *= b.w; h *= b.h; return *this; } - Size operator/ (const Size& b) const { return Size(w / b.w, h / b.h); } - Size& operator/= (const Size& b) { w /= b.w; h /= b.h; return *this; } - - // Scalar multiplication/division scales both components. - Size operator* (T s) const { return Size(w*s, h*s); } - Size& operator*= (T s) { w *= s; h *= s; return *this; } - Size operator/ (T s) const { return Size(w/s, h/s); } - Size& operator/= (T s) { w /= s; h /= s; return *this; } - - static Size Min(const Size& a, const Size& b) { return Size((a.w < b.w) ? a.w : b.w, - (a.h < b.h) ? a.h : b.h); } - static Size Max(const Size& a, const Size& b) { return Size((a.w > b.w) ? a.w : b.w, - (a.h > b.h) ? a.h : b.h); } - - T Area() const { return w * h; } - - inline Vector2 ToVector() const { return Vector2(w, h); } -}; - - -typedef Size Sizei; -typedef Size Sizeu; -typedef Size Sizef; -typedef Size Sized; - - - -//----------------------------------------------------------------------------------- -// ***** Rect - -// Rect describes a rectangular area for rendering, that includes position and size. -template -class Rect -{ -public: - T x, y; - T w, h; - - Rect() { } - Rect(T x1, T y1, T w1, T h1) : x(x1), y(y1), w(w1), h(h1) { } - Rect(const Vector2& pos, const Size& sz) : x(pos.x), y(pos.y), w(sz.w), h(sz.h) { } - Rect(const Size& sz) : x(0), y(0), w(sz.w), h(sz.h) { } - - // C-interop support. - typedef typename CompatibleTypes >::Type CompatibleType; - - Rect(const CompatibleType& s) : x(s.Pos.x), y(s.Pos.y), w(s.Size.w), h(s.Size.h) { } - - operator const CompatibleType& () const - { - OVR_MATH_STATIC_ASSERT(sizeof(Rect) == sizeof(CompatibleType), "sizeof(Rect) failure"); - return reinterpret_cast(*this); - } - - Vector2 GetPos() const { return Vector2(x, y); } - Size GetSize() const { return Size(w, h); } - void SetPos(const Vector2& pos) { x = pos.x; y = pos.y; } - void SetSize(const Size& sz) { w = sz.w; h = sz.h; } - - bool operator == (const Rect& vp) const - { return (x == vp.x) && (y == vp.y) && (w == vp.w) && (h == vp.h); } - bool operator != (const Rect& vp) const - { return !operator == (vp); } -}; - -typedef Rect Recti; - - -//-------------------------------------------------------------------------------------// -// ***** Quat -// -// Quatf represents a quaternion class used for rotations. -// -// Quaternion multiplications are done in right-to-left order, to match the -// behavior of matrices. - - -template -class Quat -{ -public: - typedef T ElementType; - static const size_t ElementCount = 4; - - // x,y,z = axis*sin(angle), w = cos(angle) - T x, y, z, w; - - Quat() : x(0), y(0), z(0), w(1) { } - Quat(T x_, T y_, T z_, T w_) : x(x_), y(y_), z(z_), w(w_) { } - explicit Quat(const Quat::OtherFloatType> &src) - : x((T)src.x), y((T)src.y), z((T)src.z), w((T)src.w) - { - // NOTE: Converting a normalized Quat to Quat - // will generally result in an un-normalized quaternion. - // But we don't normalize here in case the quaternion - // being converted is not a normalized rotation quaternion. - } - - typedef typename CompatibleTypes >::Type CompatibleType; - - // C-interop support. - Quat(const CompatibleType& s) : x(s.x), y(s.y), z(s.z), w(s.w) { } - - operator CompatibleType () const - { - CompatibleType result; - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - } - - // Constructs quaternion for rotation around the axis by an angle. - Quat(const Vector3& axis, T angle) - { - // Make sure we don't divide by zero. - if (axis.LengthSq() == T(0)) - { - // Assert if the axis is zero, but the angle isn't - OVR_MATH_ASSERT(angle == T(0)); - x = y = z = T(0); w = T(1); - return; - } - - Vector3 unitAxis = axis.Normalized(); - T sinHalfAngle = sin(angle * T(0.5)); - - w = cos(angle * T(0.5)); - x = unitAxis.x * sinHalfAngle; - y = unitAxis.y * sinHalfAngle; - z = unitAxis.z * sinHalfAngle; - } - - // Constructs quaternion for rotation around one of the coordinate axis by an angle. - Quat(Axis A, T angle, RotateDirection d = Rotate_CCW, HandedSystem s = Handed_R) - { - T sinHalfAngle = s * d *sin(angle * T(0.5)); - T v[3]; - v[0] = v[1] = v[2] = T(0); - v[A] = sinHalfAngle; - - w = cos(angle * T(0.5)); - x = v[0]; - y = v[1]; - z = v[2]; - } - - Quat operator-() { return Quat(-x, -y, -z, -w); } // unary minus - - static Quat Identity() { return Quat(0, 0, 0, 1); } - - // Compute axis and angle from quaternion - void GetAxisAngle(Vector3* axis, T* angle) const - { - if ( x*x + y*y + z*z > Math::Tolerance() * Math::Tolerance() ) { - *axis = Vector3(x, y, z).Normalized(); - *angle = 2 * Acos(w); - if (*angle > ((T)MATH_DOUBLE_PI)) // Reduce the magnitude of the angle, if necessary - { - *angle = ((T)MATH_DOUBLE_TWOPI) - *angle; - *axis = *axis * (-1); - } - } - else - { - *axis = Vector3(1, 0, 0); - *angle= T(0); - } - } - - // Convert a quaternion to a rotation vector, also known as - // Rodrigues vector, AxisAngle vector, SORA vector, exponential map. - // A rotation vector describes a rotation about an axis: - // the axis of rotation is the vector normalized, - // the angle of rotation is the magnitude of the vector. - Vector3 ToRotationVector() const - { - OVR_MATH_ASSERT(IsNormalized() || LengthSq() == 0); - T s = T(0); - T sinHalfAngle = sqrt(x*x + y*y + z*z); - if (sinHalfAngle > T(0)) - { - T cosHalfAngle = w; - T halfAngle = atan2(sinHalfAngle, cosHalfAngle); - - // Ensure minimum rotation magnitude - if (cosHalfAngle < 0) - halfAngle -= T(MATH_DOUBLE_PI); - - s = T(2) * halfAngle / sinHalfAngle; - } - return Vector3(x*s, y*s, z*s); - } - - // Faster version of the above, optimized for use with small rotations, where rotation angle ~= sin(angle) - inline OVR::Vector3 FastToRotationVector() const - { - OVR_MATH_ASSERT(IsNormalized()); - T s; - T sinHalfSquared = x*x + y*y + z*z; - if (sinHalfSquared < T(.0037)) // =~ sin(7/2 degrees)^2 - { - // Max rotation magnitude error is about .062% at 7 degrees rotation, or about .0043 degrees - s = T(2) * Sign(w); - } - else - { - T sinHalfAngle = sqrt(sinHalfSquared); - T cosHalfAngle = w; - T halfAngle = atan2(sinHalfAngle, cosHalfAngle); - - // Ensure minimum rotation magnitude - if (cosHalfAngle < 0) - halfAngle -= T(MATH_DOUBLE_PI); - - s = T(2) * halfAngle / sinHalfAngle; - } - return Vector3(x*s, y*s, z*s); - } - - // Given a rotation vector of form unitRotationAxis * angle, - // returns the equivalent quaternion (unitRotationAxis * sin(angle), cos(Angle)). - static Quat FromRotationVector(const Vector3& v) - { - T angleSquared = v.LengthSq(); - T s = T(0); - T c = T(1); - if (angleSquared > T(0)) - { - T angle = sqrt(angleSquared); - s = sin(angle * T(0.5)) / angle; // normalize - c = cos(angle * T(0.5)); - } - return Quat(s*v.x, s*v.y, s*v.z, c); - } - - // Faster version of above, optimized for use with small rotation magnitudes, where rotation angle =~ sin(angle). - // If normalize is false, small-angle quaternions are returned un-normalized. - inline static Quat FastFromRotationVector(const OVR::Vector3& v, bool normalize = true) - { - T s, c; - T angleSquared = v.LengthSq(); - if (angleSquared < T(0.0076)) // =~ (5 degrees*pi/180)^2 - { - s = T(0.5); - c = T(1.0); - // Max rotation magnitude error (after normalization) is about .064% at 5 degrees rotation, or .0032 degrees - if (normalize && angleSquared > 0) - { - // sin(angle/2)^2 ~= (angle/2)^2 and cos(angle/2)^2 ~= 1 - T invLen = T(1) / sqrt(angleSquared * T(0.25) + T(1)); // normalize - s = s * invLen; - c = c * invLen; - } - } - else - { - T angle = sqrt(angleSquared); - s = sin(angle * T(0.5)) / angle; - c = cos(angle * T(0.5)); - } - return Quat(s*v.x, s*v.y, s*v.z, c); - } - - // Constructs the quaternion from a rotation matrix - explicit Quat(const Matrix4& m) - { - T trace = m.M[0][0] + m.M[1][1] + m.M[2][2]; - - // In almost all cases, the first part is executed. - // However, if the trace is not positive, the other - // cases arise. - if (trace > T(0)) - { - T s = sqrt(trace + T(1)) * T(2); // s=4*qw - w = T(0.25) * s; - x = (m.M[2][1] - m.M[1][2]) / s; - y = (m.M[0][2] - m.M[2][0]) / s; - z = (m.M[1][0] - m.M[0][1]) / s; - } - else if ((m.M[0][0] > m.M[1][1])&&(m.M[0][0] > m.M[2][2])) - { - T s = sqrt(T(1) + m.M[0][0] - m.M[1][1] - m.M[2][2]) * T(2); - w = (m.M[2][1] - m.M[1][2]) / s; - x = T(0.25) * s; - y = (m.M[0][1] + m.M[1][0]) / s; - z = (m.M[2][0] + m.M[0][2]) / s; - } - else if (m.M[1][1] > m.M[2][2]) - { - T s = sqrt(T(1) + m.M[1][1] - m.M[0][0] - m.M[2][2]) * T(2); // S=4*qy - w = (m.M[0][2] - m.M[2][0]) / s; - x = (m.M[0][1] + m.M[1][0]) / s; - y = T(0.25) * s; - z = (m.M[1][2] + m.M[2][1]) / s; - } - else - { - T s = sqrt(T(1) + m.M[2][2] - m.M[0][0] - m.M[1][1]) * T(2); // S=4*qz - w = (m.M[1][0] - m.M[0][1]) / s; - x = (m.M[0][2] + m.M[2][0]) / s; - y = (m.M[1][2] + m.M[2][1]) / s; - z = T(0.25) * s; - } - OVR_MATH_ASSERT(IsNormalized()); // Ensure input matrix is orthogonal - } - - // Constructs the quaternion from a rotation matrix - explicit Quat(const Matrix3& m) - { - T trace = m.M[0][0] + m.M[1][1] + m.M[2][2]; - - // In almost all cases, the first part is executed. - // However, if the trace is not positive, the other - // cases arise. - if (trace > T(0)) - { - T s = sqrt(trace + T(1)) * T(2); // s=4*qw - w = T(0.25) * s; - x = (m.M[2][1] - m.M[1][2]) / s; - y = (m.M[0][2] - m.M[2][0]) / s; - z = (m.M[1][0] - m.M[0][1]) / s; - } - else if ((m.M[0][0] > m.M[1][1])&&(m.M[0][0] > m.M[2][2])) - { - T s = sqrt(T(1) + m.M[0][0] - m.M[1][1] - m.M[2][2]) * T(2); - w = (m.M[2][1] - m.M[1][2]) / s; - x = T(0.25) * s; - y = (m.M[0][1] + m.M[1][0]) / s; - z = (m.M[2][0] + m.M[0][2]) / s; - } - else if (m.M[1][1] > m.M[2][2]) - { - T s = sqrt(T(1) + m.M[1][1] - m.M[0][0] - m.M[2][2]) * T(2); // S=4*qy - w = (m.M[0][2] - m.M[2][0]) / s; - x = (m.M[0][1] + m.M[1][0]) / s; - y = T(0.25) * s; - z = (m.M[1][2] + m.M[2][1]) / s; - } - else - { - T s = sqrt(T(1) + m.M[2][2] - m.M[0][0] - m.M[1][1]) * T(2); // S=4*qz - w = (m.M[1][0] - m.M[0][1]) / s; - x = (m.M[0][2] + m.M[2][0]) / s; - y = (m.M[1][2] + m.M[2][1]) / s; - z = T(0.25) * s; - } - OVR_MATH_ASSERT(IsNormalized()); // Ensure input matrix is orthogonal - } - - bool operator== (const Quat& b) const { return x == b.x && y == b.y && z == b.z && w == b.w; } - bool operator!= (const Quat& b) const { return x != b.x || y != b.y || z != b.z || w != b.w; } - - Quat operator+ (const Quat& b) const { return Quat(x + b.x, y + b.y, z + b.z, w + b.w); } - Quat& operator+= (const Quat& b) { w += b.w; x += b.x; y += b.y; z += b.z; return *this; } - Quat operator- (const Quat& b) const { return Quat(x - b.x, y - b.y, z - b.z, w - b.w); } - Quat& operator-= (const Quat& b) { w -= b.w; x -= b.x; y -= b.y; z -= b.z; return *this; } - - Quat operator* (T s) const { return Quat(x * s, y * s, z * s, w * s); } - Quat& operator*= (T s) { w *= s; x *= s; y *= s; z *= s; return *this; } - Quat operator/ (T s) const { T rcp = T(1)/s; return Quat(x * rcp, y * rcp, z * rcp, w *rcp); } - Quat& operator/= (T s) { T rcp = T(1)/s; w *= rcp; x *= rcp; y *= rcp; z *= rcp; return *this; } - - // Compare two quats for equality within tolerance. Returns true if quats match withing tolerance. - bool IsEqual(const Quat& b, T tolerance = Math::Tolerance()) const - { - return Abs(Dot(b)) >= T(1) - tolerance; - } - - static T Abs(const T v) { return (v >= 0) ? v : -v; } - - // Get Imaginary part vector - Vector3 Imag() const { return Vector3(x,y,z); } - - // Get quaternion length. - T Length() const { return sqrt(LengthSq()); } - - // Get quaternion length squared. - T LengthSq() const { return (x * x + y * y + z * z + w * w); } - - // Simple Euclidean distance in R^4 (not SLERP distance, but at least respects Haar measure) - T Distance(const Quat& q) const - { - T d1 = (*this - q).Length(); - T d2 = (*this + q).Length(); // Antipodal point check - return (d1 < d2) ? d1 : d2; - } - - T DistanceSq(const Quat& q) const - { - T d1 = (*this - q).LengthSq(); - T d2 = (*this + q).LengthSq(); // Antipodal point check - return (d1 < d2) ? d1 : d2; - } - - T Dot(const Quat& q) const - { - return x * q.x + y * q.y + z * q.z + w * q.w; - } - - // Angle between two quaternions in radians - T Angle(const Quat& q) const - { - return T(2) * Acos(Abs(Dot(q))); - } - - // Angle of quaternion - T Angle() const - { - return T(2) * Acos(Abs(w)); - } - - // Normalize - bool IsNormalized() const { return fabs(LengthSq() - T(1)) < Math::Tolerance(); } - - void Normalize() - { - T s = Length(); - if (s != T(0)) - s = T(1) / s; - *this *= s; - } - - Quat Normalized() const - { - T s = Length(); - if (s != T(0)) - s = T(1) / s; - return *this * s; - } - - inline void EnsureSameHemisphere(const Quat& o) - { - if (Dot(o) < T(0)) - { - x = -x; - y = -y; - z = -z; - w = -w; - } - } - - // Returns conjugate of the quaternion. Produces inverse rotation if quaternion is normalized. - Quat Conj() const { return Quat(-x, -y, -z, w); } - - // Quaternion multiplication. Combines quaternion rotations, performing the one on the - // right hand side first. - Quat operator* (const Quat& b) const { return Quat(w * b.x + x * b.w + y * b.z - z * b.y, - w * b.y - x * b.z + y * b.w + z * b.x, - w * b.z + x * b.y - y * b.x + z * b.w, - w * b.w - x * b.x - y * b.y - z * b.z); } - const Quat& operator*= (const Quat& b) { *this = *this * b; return *this; } - - // - // this^p normalized; same as rotating by this p times. - Quat PowNormalized(T p) const - { - Vector3 v; - T a; - GetAxisAngle(&v, &a); - return Quat(v, a * p); - } - - // Compute quaternion that rotates v into alignTo: alignTo = Quat::Align(alignTo, v).Rotate(v). - // NOTE: alignTo and v must be normalized. - static Quat Align(const Vector3& alignTo, const Vector3& v) - { - OVR_MATH_ASSERT(alignTo.IsNormalized() && v.IsNormalized()); - Vector3 bisector = (v + alignTo); - bisector.Normalize(); - T cosHalfAngle = v.Dot(bisector); // 0..1 - if (cosHalfAngle > T(0)) - { - Vector3 imag = v.Cross(bisector); - return Quat(imag.x, imag.y, imag.z, cosHalfAngle); - } - else - { - // cosHalfAngle == 0: a 180 degree rotation. - // sinHalfAngle == 1, rotation axis is any axis perpendicular - // to alignTo. Choose axis to include largest magnitude components - if (fabs(v.x) > fabs(v.y)) - { - // x or z is max magnitude component - // = Cross(v, (0,1,0)).Normalized(); - T invLen = sqrt(v.x*v.x + v.z*v.z); - if (invLen > T(0)) - invLen = T(1) / invLen; - return Quat(-v.z*invLen, 0, v.x*invLen, 0); - } - else - { - // y or z is max magnitude component - // = Cross(v, (1,0,0)).Normalized(); - T invLen = sqrt(v.y*v.y + v.z*v.z); - if (invLen > T(0)) - invLen = T(1) / invLen; - return Quat(0, v.z*invLen, -v.y*invLen, 0); - } - } - } - - // Decompose a quat into quat = swing * twist, where twist is a rotation about axis, - // and swing is a rotation perpendicular to axis. - Quat GetSwingTwist(const Vector3& axis, Quat* twist) const - { - OVR_MATH_ASSERT(twist); - OVR_MATH_ASSERT(axis.IsNormalized()); - - // Create a normalized quaternion from projection of (x,y,z) onto axis - T d = axis.Dot(Vector3(x, y, z)); - *twist = Quat(axis.x*d, axis.y*d, axis.z*d, w); - T len = twist->Length(); - if (len == 0) - twist->w = T(1); // identity - else - *twist /= len; // normalize - - return *this * twist->Inverted(); - } - - // Normalized linear interpolation of quaternions - // NOTE: This function is a bad approximation of Slerp() - // when the angle between the *this and b is large. - // Use FastSlerp() or Slerp() instead. - Quat Lerp(const Quat& b, T s) const - { - return (*this * (T(1) - s) + b * (Dot(b) < 0 ? -s : s)).Normalized(); - } - - // Spherical linear interpolation between rotations - Quat Slerp(const Quat& b, T s) const - { - Vector3 delta = (b * this->Inverted()).ToRotationVector(); - return (FromRotationVector(delta * s) * *this).Normalized(); // normalize so errors don't accumulate - } - - // Spherical linear interpolation: much faster for small rotations, accurate for large rotations. See FastTo/FromRotationVector - Quat FastSlerp(const Quat& b, T s) const - { - Vector3 delta = (b * this->Inverted()).FastToRotationVector(); - return (FastFromRotationVector(delta * s, false) * *this).Normalized(); - } - - // Rotate transforms vector in a manner that matches Matrix rotations (counter-clockwise, - // assuming negative direction of the axis). Standard formula: q(t) * V * q(t)^-1. - Vector3 Rotate(const Vector3& v) const - { - OVR_MATH_ASSERT(isnan(w) || IsNormalized()); - - // rv = q * (v,0) * q' - // Same as rv = v + real * cross(imag,v)*2 + cross(imag, cross(imag,v)*2); - - // uv = 2 * Imag().Cross(v); - T uvx = T(2) * (y*v.z - z*v.y); - T uvy = T(2) * (z*v.x - x*v.z); - T uvz = T(2) * (x*v.y - y*v.x); - - // return v + Real()*uv + Imag().Cross(uv); - return Vector3(v.x + w*uvx + y*uvz - z*uvy, - v.y + w*uvy + z*uvx - x*uvz, - v.z + w*uvz + x*uvy - y*uvx); - } - - // Rotation by inverse of *this - Vector3 InverseRotate(const Vector3& v) const - { - OVR_MATH_ASSERT(IsNormalized()); - - // rv = q' * (v,0) * q - // Same as rv = v + real * cross(-imag,v)*2 + cross(-imag, cross(-imag,v)*2); - // or rv = v - real * cross(imag,v)*2 + cross(imag, cross(imag,v)*2); - - // uv = 2 * Imag().Cross(v); - T uvx = T(2) * (y*v.z - z*v.y); - T uvy = T(2) * (z*v.x - x*v.z); - T uvz = T(2) * (x*v.y - y*v.x); - - // return v - Real()*uv + Imag().Cross(uv); - return Vector3(v.x - w*uvx + y*uvz - z*uvy, - v.y - w*uvy + z*uvx - x*uvz, - v.z - w*uvz + x*uvy - y*uvx); - } - - // Inversed quaternion rotates in the opposite direction. - Quat Inverted() const - { - return Quat(-x, -y, -z, w); - } - - Quat Inverse() const - { - return Quat(-x, -y, -z, w); - } - - // Sets this quaternion to the one rotates in the opposite direction. - void Invert() - { - *this = Quat(-x, -y, -z, w); - } - - // Time integration of constant angular velocity over dt - Quat TimeIntegrate(Vector3 angularVelocity, T dt) const - { - // solution is: this * exp( omega*dt/2 ); FromRotationVector(v) gives exp(v*.5). - return (*this * FastFromRotationVector(angularVelocity * dt, false)).Normalized(); - } - - // Time integration of constant angular acceleration and velocity over dt - // These are the first two terms of the "Magnus expansion" of the solution - // - // o = o * exp( W=(W1 + W2 + W3+...) * 0.5 ); - // - // omega1 = (omega + omegaDot*dt) - // W1 = (omega + omega1)*dt/2 - // W2 = cross(omega, omega1)/12*dt^2 % (= -cross(omega_dot, omega)/12*dt^3) - // Terms 3 and beyond are vanishingly small: - // W3 = cross(omega_dot, cross(omega_dot, omega))/240*dt^5 - // - Quat TimeIntegrate(Vector3 angularVelocity, Vector3 angularAcceleration, T dt) const - { - const Vector3& omega = angularVelocity; - const Vector3& omegaDot = angularAcceleration; - - Vector3 omega1 = (omega + omegaDot * dt); - Vector3 W = ( (omega + omega1) + omega.Cross(omega1) * (dt/T(6)) ) * (dt/T(2)); - - // FromRotationVector(v) is exp(v*.5) - return (*this * FastFromRotationVector(W, false)).Normalized(); - } - - // Decompose rotation into three rotations: - // roll radians about Z axis, then pitch radians about X axis, then yaw radians about Y axis. - // Call with nullptr if a return value is not needed. - void GetYawPitchRoll(T* yaw, T* pitch, T* roll) const - { - return GetEulerAngles(yaw, pitch, roll); - } - - // GetEulerAngles extracts Euler angles from the quaternion, in the specified order of - // axis rotations and the specified coordinate system. Right-handed coordinate system - // is the default, with CCW rotations while looking in the negative axis direction. - // Here a,b,c, are the Yaw/Pitch/Roll angles to be returned. - // Rotation order is c, b, a: - // rotation c around axis A3 - // is followed by rotation b around axis A2 - // is followed by rotation a around axis A1 - // rotations are CCW or CW (D) in LH or RH coordinate system (S) - // - template - void GetEulerAngles(T *a, T *b, T *c) const - { - OVR_MATH_ASSERT(IsNormalized()); - OVR_MATH_STATIC_ASSERT((A1 != A2) && (A2 != A3) && (A1 != A3), "(A1 != A2) && (A2 != A3) && (A1 != A3)"); - - T Q[3] = { x, y, z }; //Quaternion components x,y,z - - T ww = w*w; - T Q11 = Q[A1]*Q[A1]; - T Q22 = Q[A2]*Q[A2]; - T Q33 = Q[A3]*Q[A3]; - - T psign = T(-1); - // Determine whether even permutation - if (((A1 + 1) % 3 == A2) && ((A2 + 1) % 3 == A3)) - psign = T(1); - - T s2 = psign * T(2) * (psign*w*Q[A2] + Q[A1]*Q[A3]); - - T singularityRadius = Math::SingularityRadius(); - if (s2 < T(-1) + singularityRadius) - { // South pole singularity - if (a) *a = T(0); - if (b) *b = -S*D*((T)MATH_DOUBLE_PIOVER2); - if (c) *c = S*D*atan2(T(2)*(psign*Q[A1] * Q[A2] + w*Q[A3]), ww + Q22 - Q11 - Q33 ); - } - else if (s2 > T(1) - singularityRadius) - { // North pole singularity - if (a) *a = T(0); - if (b) *b = S*D*((T)MATH_DOUBLE_PIOVER2); - if (c) *c = S*D*atan2(T(2)*(psign*Q[A1] * Q[A2] + w*Q[A3]), ww + Q22 - Q11 - Q33); - } - else - { - if (a) *a = -S*D*atan2(T(-2)*(w*Q[A1] - psign*Q[A2] * Q[A3]), ww + Q33 - Q11 - Q22); - if (b) *b = S*D*asin(s2); - if (c) *c = S*D*atan2(T(2)*(w*Q[A3] - psign*Q[A1] * Q[A2]), ww + Q11 - Q22 - Q33); - } - } - - template - void GetEulerAngles(T *a, T *b, T *c) const - { GetEulerAngles(a, b, c); } - - template - void GetEulerAngles(T *a, T *b, T *c) const - { GetEulerAngles(a, b, c); } - - // GetEulerAnglesABA extracts Euler angles from the quaternion, in the specified order of - // axis rotations and the specified coordinate system. Right-handed coordinate system - // is the default, with CCW rotations while looking in the negative axis direction. - // Here a,b,c, are the Yaw/Pitch/Roll angles to be returned. - // rotation a around axis A1 - // is followed by rotation b around axis A2 - // is followed by rotation c around axis A1 - // Rotations are CCW or CW (D) in LH or RH coordinate system (S) - template - void GetEulerAnglesABA(T *a, T *b, T *c) const - { - OVR_MATH_ASSERT(IsNormalized()); - OVR_MATH_STATIC_ASSERT(A1 != A2, "A1 != A2"); - - T Q[3] = {x, y, z}; // Quaternion components - - // Determine the missing axis that was not supplied - int m = 3 - A1 - A2; - - T ww = w*w; - T Q11 = Q[A1]*Q[A1]; - T Q22 = Q[A2]*Q[A2]; - T Qmm = Q[m]*Q[m]; - - T psign = T(-1); - if ((A1 + 1) % 3 == A2) // Determine whether even permutation - { - psign = T(1); - } - - T c2 = ww + Q11 - Q22 - Qmm; - T singularityRadius = Math::SingularityRadius(); - if (c2 < T(-1) + singularityRadius) - { // South pole singularity - if (a) *a = T(0); - if (b) *b = S*D*((T)MATH_DOUBLE_PI); - if (c) *c = S*D*atan2(T(2)*(w*Q[A1] - psign*Q[A2] * Q[m]), - ww + Q22 - Q11 - Qmm); - } - else if (c2 > T(1) - singularityRadius) - { // North pole singularity - if (a) *a = T(0); - if (b) *b = T(0); - if (c) *c = S*D*atan2(T(2)*(w*Q[A1] - psign*Q[A2] * Q[m]), - ww + Q22 - Q11 - Qmm); - } - else - { - if (a) *a = S*D*atan2(psign*w*Q[m] + Q[A1] * Q[A2], - w*Q[A2] -psign*Q[A1]*Q[m]); - if (b) *b = S*D*acos(c2); - if (c) *c = S*D*atan2(-psign*w*Q[m] + Q[A1] * Q[A2], - w*Q[A2] + psign*Q[A1]*Q[m]); - } - } -}; - -typedef Quat Quatf; -typedef Quat Quatd; - -OVR_MATH_STATIC_ASSERT((sizeof(Quatf) == 4*sizeof(float)), "sizeof(Quatf) failure"); -OVR_MATH_STATIC_ASSERT((sizeof(Quatd) == 4*sizeof(double)), "sizeof(Quatd) failure"); - -//------------------------------------------------------------------------------------- -// ***** Pose -// -// Position and orientation combined. -// -// This structure needs to be the same size and layout on 32-bit and 64-bit arch. -// Update OVR_PadCheck.cpp when updating this object. -template -class Pose -{ -public: - typedef typename CompatibleTypes >::Type CompatibleType; - - Pose() { } - Pose(const Quat& orientation, const Vector3& pos) - : Rotation(orientation), Translation(pos) { } - Pose(const Pose& s) - : Rotation(s.Rotation), Translation(s.Translation) { } - Pose(const Matrix3& R, const Vector3& t) - : Rotation((Quat)R), Translation(t) { } - Pose(const CompatibleType& s) - : Rotation(s.Orientation), Translation(s.Position) { } - - explicit Pose(const Pose::OtherFloatType> &s) - : Rotation(s.Rotation), Translation(s.Translation) - { - // Ensure normalized rotation if converting from float to double - if (sizeof(T) > sizeof(typename Math::OtherFloatType)) - Rotation.Normalize(); - } - - static Pose Identity() { return Pose(Quat(0, 0, 0, 1), Vector3(0, 0, 0)); } - - void SetIdentity() { Rotation = Quat(0, 0, 0, 1); Translation = Vector3(0, 0, 0); } - - // used to make things obviously broken if someone tries to use the value - void SetInvalid() { Rotation = Quat(NAN, NAN, NAN, NAN); Translation = Vector3(NAN, NAN, NAN); } - - bool IsEqual(const Pose&b, T tolerance = Math::Tolerance()) const - { - return Translation.IsEqual(b.Translation, tolerance) && Rotation.IsEqual(b.Rotation, tolerance); - } - - operator typename CompatibleTypes >::Type () const - { - typename CompatibleTypes >::Type result; - result.Orientation = Rotation; - result.Position = Translation; - return result; - } - - Quat Rotation; - Vector3 Translation; - - OVR_MATH_STATIC_ASSERT((sizeof(T) == sizeof(double) || sizeof(T) == sizeof(float)), "(sizeof(T) == sizeof(double) || sizeof(T) == sizeof(float))"); - - void ToArray(T* arr) const - { - T temp[7] = { Rotation.x, Rotation.y, Rotation.z, Rotation.w, Translation.x, Translation.y, Translation.z }; - for (int i = 0; i < 7; i++) arr[i] = temp[i]; - } - - static Pose FromArray(const T* v) - { - Quat rotation(v[0], v[1], v[2], v[3]); - Vector3 translation(v[4], v[5], v[6]); - // Ensure rotation is normalized, in case it was originally a float, stored in a .json file, etc. - return Pose(rotation.Normalized(), translation); - } - - Vector3 Rotate(const Vector3& v) const - { - return Rotation.Rotate(v); - } - - Vector3 InverseRotate(const Vector3& v) const - { - return Rotation.InverseRotate(v); - } - - Vector3 Translate(const Vector3& v) const - { - return v + Translation; - } - - Vector3 Transform(const Vector3& v) const - { - return Rotate(v) + Translation; - } - - Vector3 InverseTransform(const Vector3& v) const - { - return InverseRotate(v - Translation); - } - - - Vector3 Apply(const Vector3& v) const - { - return Transform(v); - } - - Pose operator*(const Pose& other) const - { - return Pose(Rotation * other.Rotation, Apply(other.Translation)); - } - - Pose Inverted() const - { - Quat inv = Rotation.Inverted(); - return Pose(inv, inv.Rotate(-Translation)); - } - - // Interpolation between two poses: translation is interpolated with Lerp(), - // and rotations are interpolated with Slerp(). - Pose Lerp(const Pose& b, T s) - { - return Pose(Rotation.Slerp(b.Rotation, s), Translation.Lerp(b.Translation, s)); - } - - // Similar to Lerp above, except faster in case of small rotation differences. See Quat::FastSlerp. - Pose FastLerp(const Pose& b, T s) - { - return Pose(Rotation.FastSlerp(b.Rotation, s), Translation.Lerp(b.Translation, s)); - } - - Pose TimeIntegrate(const Vector3& linearVelocity, const Vector3& angularVelocity, T dt) const - { - return Pose( - (Rotation * Quat::FastFromRotationVector(angularVelocity * dt, false)).Normalized(), - Translation + linearVelocity * dt); - } - - Pose TimeIntegrate(const Vector3& linearVelocity, const Vector3& linearAcceleration, - const Vector3& angularVelocity, const Vector3& angularAcceleration, - T dt) const - { - return Pose(Rotation.TimeIntegrate(angularVelocity, angularAcceleration, dt), - Translation + linearVelocity*dt + linearAcceleration*dt*dt * T(0.5)); - } -}; - -typedef Pose Posef; -typedef Pose Posed; - -OVR_MATH_STATIC_ASSERT((sizeof(Posed) == sizeof(Quatd) + sizeof(Vector3d)), "sizeof(Posed) failure"); -OVR_MATH_STATIC_ASSERT((sizeof(Posef) == sizeof(Quatf) + sizeof(Vector3f)), "sizeof(Posef) failure"); - - -//------------------------------------------------------------------------------------- -// ***** Matrix4 -// -// Matrix4 is a 4x4 matrix used for 3d transformations and projections. -// Translation stored in the last column. -// The matrix is stored in row-major order in memory, meaning that values -// of the first row are stored before the next one. -// -// The arrangement of the matrix is chosen to be in Right-Handed -// coordinate system and counterclockwise rotations when looking down -// the axis -// -// Transformation Order: -// - Transformations are applied from right to left, so the expression -// M1 * M2 * M3 * V means that the vector V is transformed by M3 first, -// followed by M2 and M1. -// -// Coordinate system: Right Handed -// -// Rotations: Counterclockwise when looking down the axis. All angles are in radians. -// -// | sx 01 02 tx | // First column (sx, 10, 20): Axis X basis vector. -// | 10 sy 12 ty | // Second column (01, sy, 21): Axis Y basis vector. -// | 20 21 sz tz | // Third columnt (02, 12, sz): Axis Z basis vector. -// | 30 31 32 33 | -// -// The basis vectors are first three columns. - -template -class Matrix4 -{ -public: - typedef T ElementType; - static const size_t Dimension = 4; - - T M[4][4]; - - enum NoInitType { NoInit }; - - // Construct with no memory initialization. - Matrix4(NoInitType) { } - - // By default, we construct identity matrix. - Matrix4() - { - M[0][0] = M[1][1] = M[2][2] = M[3][3] = T(1); - M[0][1] = M[1][0] = M[2][3] = M[3][1] = T(0); - M[0][2] = M[1][2] = M[2][0] = M[3][2] = T(0); - M[0][3] = M[1][3] = M[2][1] = M[3][0] = T(0); - } - - Matrix4(T m11, T m12, T m13, T m14, - T m21, T m22, T m23, T m24, - T m31, T m32, T m33, T m34, - T m41, T m42, T m43, T m44) - { - M[0][0] = m11; M[0][1] = m12; M[0][2] = m13; M[0][3] = m14; - M[1][0] = m21; M[1][1] = m22; M[1][2] = m23; M[1][3] = m24; - M[2][0] = m31; M[2][1] = m32; M[2][2] = m33; M[2][3] = m34; - M[3][0] = m41; M[3][1] = m42; M[3][2] = m43; M[3][3] = m44; - } - - Matrix4(T m11, T m12, T m13, - T m21, T m22, T m23, - T m31, T m32, T m33) - { - M[0][0] = m11; M[0][1] = m12; M[0][2] = m13; M[0][3] = T(0); - M[1][0] = m21; M[1][1] = m22; M[1][2] = m23; M[1][3] = T(0); - M[2][0] = m31; M[2][1] = m32; M[2][2] = m33; M[2][3] = T(0); - M[3][0] = T(0); M[3][1] = T(0); M[3][2] = T(0); M[3][3] = T(1); - } - - explicit Matrix4(const Matrix3& m) - { - M[0][0] = m.M[0][0]; M[0][1] = m.M[0][1]; M[0][2] = m.M[0][2]; M[0][3] = T(0); - M[1][0] = m.M[1][0]; M[1][1] = m.M[1][1]; M[1][2] = m.M[1][2]; M[1][3] = T(0); - M[2][0] = m.M[2][0]; M[2][1] = m.M[2][1]; M[2][2] = m.M[2][2]; M[2][3] = T(0); - M[3][0] = T(0); M[3][1] = T(0); M[3][2] = T(0); M[3][3] = T(1); - } - - explicit Matrix4(const Quat& q) - { - OVR_MATH_ASSERT(q.IsNormalized()); - T ww = q.w*q.w; - T xx = q.x*q.x; - T yy = q.y*q.y; - T zz = q.z*q.z; - - M[0][0] = ww + xx - yy - zz; M[0][1] = 2 * (q.x*q.y - q.w*q.z); M[0][2] = 2 * (q.x*q.z + q.w*q.y); M[0][3] = T(0); - M[1][0] = 2 * (q.x*q.y + q.w*q.z); M[1][1] = ww - xx + yy - zz; M[1][2] = 2 * (q.y*q.z - q.w*q.x); M[1][3] = T(0); - M[2][0] = 2 * (q.x*q.z - q.w*q.y); M[2][1] = 2 * (q.y*q.z + q.w*q.x); M[2][2] = ww - xx - yy + zz; M[2][3] = T(0); - M[3][0] = T(0); M[3][1] = T(0); M[3][2] = T(0); M[3][3] = T(1); - } - - explicit Matrix4(const Pose& p) - { - Matrix4 result(p.Rotation); - result.SetTranslation(p.Translation); - *this = result; - } - - - // C-interop support - explicit Matrix4(const Matrix4::OtherFloatType> &src) - { - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - M[i][j] = (T)src.M[i][j]; - } - - // C-interop support. - Matrix4(const typename CompatibleTypes >::Type& s) - { - OVR_MATH_STATIC_ASSERT(sizeof(s) == sizeof(Matrix4), "sizeof(s) == sizeof(Matrix4)"); - memcpy(M, s.M, sizeof(M)); - } - - operator typename CompatibleTypes >::Type () const - { - typename CompatibleTypes >::Type result; - OVR_MATH_STATIC_ASSERT(sizeof(result) == sizeof(Matrix4), "sizeof(result) == sizeof(Matrix4)"); - memcpy(result.M, M, sizeof(M)); - return result; - } - - void ToString(char* dest, size_t destsize) const - { - size_t pos = 0; - for (int r=0; r<4; r++) - { - for (int c=0; c<4; c++) - { - pos += OVRMath_sprintf(dest+pos, destsize-pos, "%g ", M[r][c]); - } - } - } - - static Matrix4 FromString(const char* src) - { - Matrix4 result; - if (src) - { - for (int r = 0; r < 4; r++) - { - for (int c = 0; c < 4; c++) - { - result.M[r][c] = (T)atof(src); - while (*src && *src != ' ') - { - src++; - } - while (*src && *src == ' ') - { - src++; - } - } - } - } - return result; - } - - static Matrix4 Identity() { return Matrix4(); } - - void SetIdentity() - { - M[0][0] = M[1][1] = M[2][2] = M[3][3] = T(1); - M[0][1] = M[1][0] = M[2][3] = M[3][1] = T(0); - M[0][2] = M[1][2] = M[2][0] = M[3][2] = T(0); - M[0][3] = M[1][3] = M[2][1] = M[3][0] = T(0); - } - - void SetXBasis(const Vector3& v) - { - M[0][0] = v.x; - M[1][0] = v.y; - M[2][0] = v.z; - } - Vector3 GetXBasis() const - { - return Vector3(M[0][0], M[1][0], M[2][0]); - } - - void SetYBasis(const Vector3 & v) - { - M[0][1] = v.x; - M[1][1] = v.y; - M[2][1] = v.z; - } - Vector3 GetYBasis() const - { - return Vector3(M[0][1], M[1][1], M[2][1]); - } - - void SetZBasis(const Vector3 & v) - { - M[0][2] = v.x; - M[1][2] = v.y; - M[2][2] = v.z; - } - Vector3 GetZBasis() const - { - return Vector3(M[0][2], M[1][2], M[2][2]); - } - - bool operator== (const Matrix4& b) const - { - bool isEqual = true; - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - isEqual &= (M[i][j] == b.M[i][j]); - - return isEqual; - } - - Matrix4 operator+ (const Matrix4& b) const - { - Matrix4 result(*this); - result += b; - return result; - } - - Matrix4& operator+= (const Matrix4& b) - { - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - M[i][j] += b.M[i][j]; - return *this; - } - - Matrix4 operator- (const Matrix4& b) const - { - Matrix4 result(*this); - result -= b; - return result; - } - - Matrix4& operator-= (const Matrix4& b) - { - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - M[i][j] -= b.M[i][j]; - return *this; - } - - // Multiplies two matrices into destination with minimum copying. - static Matrix4& Multiply(Matrix4* d, const Matrix4& a, const Matrix4& b) - { - OVR_MATH_ASSERT((d != &a) && (d != &b)); - int i = 0; - do { - d->M[i][0] = a.M[i][0] * b.M[0][0] + a.M[i][1] * b.M[1][0] + a.M[i][2] * b.M[2][0] + a.M[i][3] * b.M[3][0]; - d->M[i][1] = a.M[i][0] * b.M[0][1] + a.M[i][1] * b.M[1][1] + a.M[i][2] * b.M[2][1] + a.M[i][3] * b.M[3][1]; - d->M[i][2] = a.M[i][0] * b.M[0][2] + a.M[i][1] * b.M[1][2] + a.M[i][2] * b.M[2][2] + a.M[i][3] * b.M[3][2]; - d->M[i][3] = a.M[i][0] * b.M[0][3] + a.M[i][1] * b.M[1][3] + a.M[i][2] * b.M[2][3] + a.M[i][3] * b.M[3][3]; - } while((++i) < 4); - - return *d; - } - - Matrix4 operator* (const Matrix4& b) const - { - Matrix4 result(Matrix4::NoInit); - Multiply(&result, *this, b); - return result; - } - - Matrix4& operator*= (const Matrix4& b) - { - return Multiply(this, Matrix4(*this), b); - } - - Matrix4 operator* (T s) const - { - Matrix4 result(*this); - result *= s; - return result; - } - - Matrix4& operator*= (T s) - { - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - M[i][j] *= s; - return *this; - } - - - Matrix4 operator/ (T s) const - { - Matrix4 result(*this); - result /= s; - return result; - } - - Matrix4& operator/= (T s) - { - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - M[i][j] /= s; - return *this; - } - - Vector3 Transform(const Vector3& v) const - { - const T rcpW = T(1) / (M[3][0] * v.x + M[3][1] * v.y + M[3][2] * v.z + M[3][3]); - return Vector3((M[0][0] * v.x + M[0][1] * v.y + M[0][2] * v.z + M[0][3]) * rcpW, - (M[1][0] * v.x + M[1][1] * v.y + M[1][2] * v.z + M[1][3]) * rcpW, - (M[2][0] * v.x + M[2][1] * v.y + M[2][2] * v.z + M[2][3]) * rcpW); - } - - Vector4 Transform(const Vector4& v) const - { - return Vector4(M[0][0] * v.x + M[0][1] * v.y + M[0][2] * v.z + M[0][3] * v.w, - M[1][0] * v.x + M[1][1] * v.y + M[1][2] * v.z + M[1][3] * v.w, - M[2][0] * v.x + M[2][1] * v.y + M[2][2] * v.z + M[2][3] * v.w, - M[3][0] * v.x + M[3][1] * v.y + M[3][2] * v.z + M[3][3] * v.w); - } - - Matrix4 Transposed() const - { - return Matrix4(M[0][0], M[1][0], M[2][0], M[3][0], - M[0][1], M[1][1], M[2][1], M[3][1], - M[0][2], M[1][2], M[2][2], M[3][2], - M[0][3], M[1][3], M[2][3], M[3][3]); - } - - void Transpose() - { - *this = Transposed(); - } - - - T SubDet (const size_t* rows, const size_t* cols) const - { - return M[rows[0]][cols[0]] * (M[rows[1]][cols[1]] * M[rows[2]][cols[2]] - M[rows[1]][cols[2]] * M[rows[2]][cols[1]]) - - M[rows[0]][cols[1]] * (M[rows[1]][cols[0]] * M[rows[2]][cols[2]] - M[rows[1]][cols[2]] * M[rows[2]][cols[0]]) - + M[rows[0]][cols[2]] * (M[rows[1]][cols[0]] * M[rows[2]][cols[1]] - M[rows[1]][cols[1]] * M[rows[2]][cols[0]]); - } - - T Cofactor(size_t I, size_t J) const - { - const size_t indices[4][3] = {{1,2,3},{0,2,3},{0,1,3},{0,1,2}}; - return ((I+J)&1) ? -SubDet(indices[I],indices[J]) : SubDet(indices[I],indices[J]); - } - - T Determinant() const - { - return M[0][0] * Cofactor(0,0) + M[0][1] * Cofactor(0,1) + M[0][2] * Cofactor(0,2) + M[0][3] * Cofactor(0,3); - } - - Matrix4 Adjugated() const - { - return Matrix4(Cofactor(0,0), Cofactor(1,0), Cofactor(2,0), Cofactor(3,0), - Cofactor(0,1), Cofactor(1,1), Cofactor(2,1), Cofactor(3,1), - Cofactor(0,2), Cofactor(1,2), Cofactor(2,2), Cofactor(3,2), - Cofactor(0,3), Cofactor(1,3), Cofactor(2,3), Cofactor(3,3)); - } - - Matrix4 Inverted() const - { - T det = Determinant(); - OVR_MATH_ASSERT(det != 0); - return Adjugated() * (T(1)/det); - } - - void Invert() - { - *this = Inverted(); - } - - // This is more efficient than general inverse, but ONLY works - // correctly if it is a homogeneous transform matrix (rot + trans) - Matrix4 InvertedHomogeneousTransform() const - { - // Make the inverse rotation matrix - Matrix4 rinv = this->Transposed(); - rinv.M[3][0] = rinv.M[3][1] = rinv.M[3][2] = T(0); - // Make the inverse translation matrix - Vector3 tvinv(-M[0][3],-M[1][3],-M[2][3]); - Matrix4 tinv = Matrix4::Translation(tvinv); - return rinv * tinv; // "untranslate", then "unrotate" - } - - // This is more efficient than general inverse, but ONLY works - // correctly if it is a homogeneous transform matrix (rot + trans) - void InvertHomogeneousTransform() - { - *this = InvertedHomogeneousTransform(); - } - - // Matrix to Euler Angles conversion - // a,b,c, are the YawPitchRoll angles to be returned - // rotation a around axis A1 - // is followed by rotation b around axis A2 - // is followed by rotation c around axis A3 - // rotations are CCW or CW (D) in LH or RH coordinate system (S) - template - void ToEulerAngles(T *a, T *b, T *c) const - { - OVR_MATH_STATIC_ASSERT((A1 != A2) && (A2 != A3) && (A1 != A3), "(A1 != A2) && (A2 != A3) && (A1 != A3)"); - - T psign = T(-1); - if (((A1 + 1) % 3 == A2) && ((A2 + 1) % 3 == A3)) // Determine whether even permutation - psign = T(1); - - T pm = psign*M[A1][A3]; - T singularityRadius = Math::SingularityRadius(); - if (pm < T(-1) + singularityRadius) - { // South pole singularity - *a = T(0); - *b = -S*D*((T)MATH_DOUBLE_PIOVER2); - *c = S*D*atan2( psign*M[A2][A1], M[A2][A2] ); - } - else if (pm > T(1) - singularityRadius) - { // North pole singularity - *a = T(0); - *b = S*D*((T)MATH_DOUBLE_PIOVER2); - *c = S*D*atan2( psign*M[A2][A1], M[A2][A2] ); - } - else - { // Normal case (nonsingular) - *a = S*D*atan2( -psign*M[A2][A3], M[A3][A3] ); - *b = S*D*asin(pm); - *c = S*D*atan2( -psign*M[A1][A2], M[A1][A1] ); - } - } - - // Matrix to Euler Angles conversion - // a,b,c, are the YawPitchRoll angles to be returned - // rotation a around axis A1 - // is followed by rotation b around axis A2 - // is followed by rotation c around axis A1 - // rotations are CCW or CW (D) in LH or RH coordinate system (S) - template - void ToEulerAnglesABA(T *a, T *b, T *c) const - { - OVR_MATH_STATIC_ASSERT(A1 != A2, "A1 != A2"); - - // Determine the axis that was not supplied - int m = 3 - A1 - A2; - - T psign = T(-1); - if ((A1 + 1) % 3 == A2) // Determine whether even permutation - psign = T(1); - - T c2 = M[A1][A1]; - T singularityRadius = Math::SingularityRadius(); - if (c2 < T(-1) + singularityRadius) - { // South pole singularity - *a = T(0); - *b = S*D*((T)MATH_DOUBLE_PI); - *c = S*D*atan2( -psign*M[A2][m],M[A2][A2]); - } - else if (c2 > T(1) - singularityRadius) - { // North pole singularity - *a = T(0); - *b = T(0); - *c = S*D*atan2( -psign*M[A2][m],M[A2][A2]); - } - else - { // Normal case (nonsingular) - *a = S*D*atan2( M[A2][A1],-psign*M[m][A1]); - *b = S*D*acos(c2); - *c = S*D*atan2( M[A1][A2],psign*M[A1][m]); - } - } - - // Creates a matrix that converts the vertices from one coordinate system - // to another. - static Matrix4 AxisConversion(const WorldAxes& to, const WorldAxes& from) - { - // Holds axis values from the 'to' structure - int toArray[3] = { to.XAxis, to.YAxis, to.ZAxis }; - - // The inverse of the toArray - int inv[4]; - inv[0] = inv[abs(to.XAxis)] = 0; - inv[abs(to.YAxis)] = 1; - inv[abs(to.ZAxis)] = 2; - - Matrix4 m(0, 0, 0, - 0, 0, 0, - 0, 0, 0); - - // Only three values in the matrix need to be changed to 1 or -1. - m.M[inv[abs(from.XAxis)]][0] = T(from.XAxis/toArray[inv[abs(from.XAxis)]]); - m.M[inv[abs(from.YAxis)]][1] = T(from.YAxis/toArray[inv[abs(from.YAxis)]]); - m.M[inv[abs(from.ZAxis)]][2] = T(from.ZAxis/toArray[inv[abs(from.ZAxis)]]); - return m; - } - - - // Creates a matrix for translation by vector - static Matrix4 Translation(const Vector3& v) - { - Matrix4 t; - t.M[0][3] = v.x; - t.M[1][3] = v.y; - t.M[2][3] = v.z; - return t; - } - - // Creates a matrix for translation by vector - static Matrix4 Translation(T x, T y, T z = T(0)) - { - Matrix4 t; - t.M[0][3] = x; - t.M[1][3] = y; - t.M[2][3] = z; - return t; - } - - // Sets the translation part - void SetTranslation(const Vector3& v) - { - M[0][3] = v.x; - M[1][3] = v.y; - M[2][3] = v.z; - } - - Vector3 GetTranslation() const - { - return Vector3( M[0][3], M[1][3], M[2][3] ); - } - - // Creates a matrix for scaling by vector - static Matrix4 Scaling(const Vector3& v) - { - Matrix4 t; - t.M[0][0] = v.x; - t.M[1][1] = v.y; - t.M[2][2] = v.z; - return t; - } - - // Creates a matrix for scaling by vector - static Matrix4 Scaling(T x, T y, T z) - { - Matrix4 t; - t.M[0][0] = x; - t.M[1][1] = y; - t.M[2][2] = z; - return t; - } - - // Creates a matrix for scaling by constant - static Matrix4 Scaling(T s) - { - Matrix4 t; - t.M[0][0] = s; - t.M[1][1] = s; - t.M[2][2] = s; - return t; - } - - // Simple L1 distance in R^12 - T Distance(const Matrix4& m2) const - { - T d = fabs(M[0][0] - m2.M[0][0]) + fabs(M[0][1] - m2.M[0][1]); - d += fabs(M[0][2] - m2.M[0][2]) + fabs(M[0][3] - m2.M[0][3]); - d += fabs(M[1][0] - m2.M[1][0]) + fabs(M[1][1] - m2.M[1][1]); - d += fabs(M[1][2] - m2.M[1][2]) + fabs(M[1][3] - m2.M[1][3]); - d += fabs(M[2][0] - m2.M[2][0]) + fabs(M[2][1] - m2.M[2][1]); - d += fabs(M[2][2] - m2.M[2][2]) + fabs(M[2][3] - m2.M[2][3]); - d += fabs(M[3][0] - m2.M[3][0]) + fabs(M[3][1] - m2.M[3][1]); - d += fabs(M[3][2] - m2.M[3][2]) + fabs(M[3][3] - m2.M[3][3]); - return d; - } - - // Creates a rotation matrix rotating around the X axis by 'angle' radians. - // Just for quick testing. Not for final API. Need to remove case. - static Matrix4 RotationAxis(Axis A, T angle, RotateDirection d, HandedSystem s) - { - T sina = s * d *sin(angle); - T cosa = cos(angle); - - switch(A) - { - case Axis_X: - return Matrix4(1, 0, 0, - 0, cosa, -sina, - 0, sina, cosa); - case Axis_Y: - return Matrix4(cosa, 0, sina, - 0, 1, 0, - -sina, 0, cosa); - case Axis_Z: - return Matrix4(cosa, -sina, 0, - sina, cosa, 0, - 0, 0, 1); - default: - return Matrix4(); - } - } - - - // Creates a rotation matrix rotating around the X axis by 'angle' radians. - // Rotation direction is depends on the coordinate system: - // RHS (Oculus default): Positive angle values rotate Counter-clockwise (CCW), - // while looking in the negative axis direction. This is the - // same as looking down from positive axis values towards origin. - // LHS: Positive angle values rotate clock-wise (CW), while looking in the - // negative axis direction. - static Matrix4 RotationX(T angle) - { - T sina = sin(angle); - T cosa = cos(angle); - return Matrix4(1, 0, 0, - 0, cosa, -sina, - 0, sina, cosa); - } - - // Creates a rotation matrix rotating around the Y axis by 'angle' radians. - // Rotation direction is depends on the coordinate system: - // RHS (Oculus default): Positive angle values rotate Counter-clockwise (CCW), - // while looking in the negative axis direction. This is the - // same as looking down from positive axis values towards origin. - // LHS: Positive angle values rotate clock-wise (CW), while looking in the - // negative axis direction. - static Matrix4 RotationY(T angle) - { - T sina = (T)sin(angle); - T cosa = (T)cos(angle); - return Matrix4(cosa, 0, sina, - 0, 1, 0, - -sina, 0, cosa); - } - - // Creates a rotation matrix rotating around the Z axis by 'angle' radians. - // Rotation direction is depends on the coordinate system: - // RHS (Oculus default): Positive angle values rotate Counter-clockwise (CCW), - // while looking in the negative axis direction. This is the - // same as looking down from positive axis values towards origin. - // LHS: Positive angle values rotate clock-wise (CW), while looking in the - // negative axis direction. - static Matrix4 RotationZ(T angle) - { - T sina = sin(angle); - T cosa = cos(angle); - return Matrix4(cosa, -sina, 0, - sina, cosa, 0, - 0, 0, 1); - } - - // LookAtRH creates a View transformation matrix for right-handed coordinate system. - // The resulting matrix points camera from 'eye' towards 'at' direction, with 'up' - // specifying the up vector. The resulting matrix should be used with PerspectiveRH - // projection. - static Matrix4 LookAtRH(const Vector3& eye, const Vector3& at, const Vector3& up) - { - Vector3 z = (eye - at).Normalized(); // Forward - Vector3 x = up.Cross(z).Normalized(); // Right - Vector3 y = z.Cross(x); - - Matrix4 m(x.x, x.y, x.z, -(x.Dot(eye)), - y.x, y.y, y.z, -(y.Dot(eye)), - z.x, z.y, z.z, -(z.Dot(eye)), - 0, 0, 0, 1 ); - return m; - } - - // LookAtLH creates a View transformation matrix for left-handed coordinate system. - // The resulting matrix points camera from 'eye' towards 'at' direction, with 'up' - // specifying the up vector. - static Matrix4 LookAtLH(const Vector3& eye, const Vector3& at, const Vector3& up) - { - Vector3 z = (at - eye).Normalized(); // Forward - Vector3 x = up.Cross(z).Normalized(); // Right - Vector3 y = z.Cross(x); - - Matrix4 m(x.x, x.y, x.z, -(x.Dot(eye)), - y.x, y.y, y.z, -(y.Dot(eye)), - z.x, z.y, z.z, -(z.Dot(eye)), - 0, 0, 0, 1 ); - return m; - } - - // PerspectiveRH creates a right-handed perspective projection matrix that can be - // used with the Oculus sample renderer. - // yfov - Specifies vertical field of view in radians. - // aspect - Screen aspect ration, which is usually width/height for square pixels. - // Note that xfov = yfov * aspect. - // znear - Absolute value of near Z clipping clipping range. - // zfar - Absolute value of far Z clipping clipping range (larger then near). - // Even though RHS usually looks in the direction of negative Z, positive values - // are expected for znear and zfar. - static Matrix4 PerspectiveRH(T yfov, T aspect, T znear, T zfar) - { - Matrix4 m; - T tanHalfFov = tan(yfov * T(0.5)); - - m.M[0][0] = T(1) / (aspect * tanHalfFov); - m.M[1][1] = T(1) / tanHalfFov; - m.M[2][2] = zfar / (znear - zfar); - m.M[3][2] = T(-1); - m.M[2][3] = (zfar * znear) / (znear - zfar); - m.M[3][3] = T(0); - - // Note: Post-projection matrix result assumes Left-Handed coordinate system, - // with Y up, X right and Z forward. This supports positive z-buffer values. - // This is the case even for RHS coordinate input. - return m; - } - - // PerspectiveLH creates a left-handed perspective projection matrix that can be - // used with the Oculus sample renderer. - // yfov - Specifies vertical field of view in radians. - // aspect - Screen aspect ration, which is usually width/height for square pixels. - // Note that xfov = yfov * aspect. - // znear - Absolute value of near Z clipping clipping range. - // zfar - Absolute value of far Z clipping clipping range (larger then near). - static Matrix4 PerspectiveLH(T yfov, T aspect, T znear, T zfar) - { - Matrix4 m; - T tanHalfFov = tan(yfov * T(0.5)); - - m.M[0][0] = T(1) / (aspect * tanHalfFov); - m.M[1][1] = T(1) / tanHalfFov; - //m.M[2][2] = zfar / (znear - zfar); - m.M[2][2] = zfar / (zfar - znear); - m.M[3][2] = T(-1); - m.M[2][3] = (zfar * znear) / (znear - zfar); - m.M[3][3] = T(0); - - // Note: Post-projection matrix result assumes Left-Handed coordinate system, - // with Y up, X right and Z forward. This supports positive z-buffer values. - // This is the case even for RHS coordinate input. - return m; - } - - static Matrix4 Ortho2D(T w, T h) - { - Matrix4 m; - m.M[0][0] = T(2.0)/w; - m.M[1][1] = T(-2.0)/h; - m.M[0][3] = T(-1.0); - m.M[1][3] = T(1.0); - m.M[2][2] = T(0); - return m; - } -}; - -typedef Matrix4 Matrix4f; -typedef Matrix4 Matrix4d; - -//------------------------------------------------------------------------------------- -// ***** Matrix3 -// -// Matrix3 is a 3x3 matrix used for representing a rotation matrix. -// The matrix is stored in row-major order in memory, meaning that values -// of the first row are stored before the next one. -// -// The arrangement of the matrix is chosen to be in Right-Handed -// coordinate system and counterclockwise rotations when looking down -// the axis -// -// Transformation Order: -// - Transformations are applied from right to left, so the expression -// M1 * M2 * M3 * V means that the vector V is transformed by M3 first, -// followed by M2 and M1. -// -// Coordinate system: Right Handed -// -// Rotations: Counterclockwise when looking down the axis. All angles are in radians. - -template -class Matrix3 -{ -public: - typedef T ElementType; - static const size_t Dimension = 3; - - T M[3][3]; - - enum NoInitType { NoInit }; - - // Construct with no memory initialization. - Matrix3(NoInitType) { } - - // By default, we construct identity matrix. - Matrix3() - { - M[0][0] = M[1][1] = M[2][2] = T(1); - M[0][1] = M[1][0] = M[2][0] = T(0); - M[0][2] = M[1][2] = M[2][1] = T(0); - } - - Matrix3(T m11, T m12, T m13, - T m21, T m22, T m23, - T m31, T m32, T m33) - { - M[0][0] = m11; M[0][1] = m12; M[0][2] = m13; - M[1][0] = m21; M[1][1] = m22; M[1][2] = m23; - M[2][0] = m31; M[2][1] = m32; M[2][2] = m33; - } - - // Construction from X, Y, Z basis vectors - Matrix3(const Vector3& xBasis, const Vector3& yBasis, const Vector3& zBasis) - { - M[0][0] = xBasis.x; M[0][1] = yBasis.x; M[0][2] = zBasis.x; - M[1][0] = xBasis.y; M[1][1] = yBasis.y; M[1][2] = zBasis.y; - M[2][0] = xBasis.z; M[2][1] = yBasis.z; M[2][2] = zBasis.z; - } - - explicit Matrix3(const Quat& q) - { - OVR_MATH_ASSERT(q.IsNormalized()); - const T tx = q.x+q.x, ty = q.y+q.y, tz = q.z+q.z; - const T twx = q.w*tx, twy = q.w*ty, twz = q.w*tz; - const T txx = q.x*tx, txy = q.x*ty, txz = q.x*tz; - const T tyy = q.y*ty, tyz = q.y*tz, tzz = q.z*tz; - M[0][0] = T(1) - (tyy + tzz); M[0][1] = txy - twz; M[0][2] = txz + twy; - M[1][0] = txy + twz; M[1][1] = T(1) - (txx + tzz); M[1][2] = tyz - twx; - M[2][0] = txz - twy; M[2][1] = tyz + twx; M[2][2] = T(1) - (txx + tyy); - } - - inline explicit Matrix3(T s) - { - M[0][0] = M[1][1] = M[2][2] = s; - M[0][1] = M[0][2] = M[1][0] = M[1][2] = M[2][0] = M[2][1] = T(0); - } - - Matrix3(T m11, T m22, T m33) - { - M[0][0] = m11; M[0][1] = T(0); M[0][2] = T(0); - M[1][0] = T(0); M[1][1] = m22; M[1][2] = T(0); - M[2][0] = T(0); M[2][1] = T(0); M[2][2] = m33; - } - - explicit Matrix3(const Matrix3::OtherFloatType> &src) - { - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - M[i][j] = (T)src.M[i][j]; - } - - // C-interop support. - Matrix3(const typename CompatibleTypes >::Type& s) - { - OVR_MATH_STATIC_ASSERT(sizeof(s) == sizeof(Matrix3), "sizeof(s) == sizeof(Matrix3)"); - memcpy(M, s.M, sizeof(M)); - } - - operator const typename CompatibleTypes >::Type () const - { - typename CompatibleTypes >::Type result; - OVR_MATH_STATIC_ASSERT(sizeof(result) == sizeof(Matrix3), "sizeof(result) == sizeof(Matrix3)"); - memcpy(result.M, M, sizeof(M)); - return result; - } - - T operator()(int i, int j) const { return M[i][j]; } - T& operator()(int i, int j) { return M[i][j]; } - - void ToString(char* dest, size_t destsize) const - { - size_t pos = 0; - for (int r=0; r<3; r++) - { - for (int c=0; c<3; c++) - pos += OVRMath_sprintf(dest+pos, destsize-pos, "%g ", M[r][c]); - } - } - - static Matrix3 FromString(const char* src) - { - Matrix3 result; - if (src) - { - for (int r=0; r<3; r++) - { - for (int c=0; c<3; c++) - { - result.M[r][c] = (T)atof(src); - while (*src && *src != ' ') - src++; - while (*src && *src == ' ') - src++; - } - } - } - return result; - } - - static Matrix3 Identity() { return Matrix3(); } - - void SetIdentity() - { - M[0][0] = M[1][1] = M[2][2] = T(1); - M[0][1] = M[1][0] = M[2][0] = T(0); - M[0][2] = M[1][2] = M[2][1] = T(0); - } - - static Matrix3 Diagonal(T m00, T m11, T m22) - { - return Matrix3(m00, 0, 0, - 0, m11, 0, - 0, 0, m22); - } - static Matrix3 Diagonal(const Vector3& v) { return Diagonal(v.x, v.y, v.z); } - - T Trace() const { return M[0][0] + M[1][1] + M[2][2]; } - - bool operator== (const Matrix3& b) const - { - bool isEqual = true; - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - isEqual &= (M[i][j] == b.M[i][j]); - } - - return isEqual; - } - - Matrix3 operator+ (const Matrix3& b) const - { - Matrix3 result(*this); - result += b; - return result; - } - - Matrix3& operator+= (const Matrix3& b) - { - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - M[i][j] += b.M[i][j]; - return *this; - } - - void operator= (const Matrix3& b) - { - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - M[i][j] = b.M[i][j]; - } - - Matrix3 operator- (const Matrix3& b) const - { - Matrix3 result(*this); - result -= b; - return result; - } - - Matrix3& operator-= (const Matrix3& b) - { - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - M[i][j] -= b.M[i][j]; - } - - return *this; - } - - // Multiplies two matrices into destination with minimum copying. - static Matrix3& Multiply(Matrix3* d, const Matrix3& a, const Matrix3& b) - { - OVR_MATH_ASSERT((d != &a) && (d != &b)); - int i = 0; - do { - d->M[i][0] = a.M[i][0] * b.M[0][0] + a.M[i][1] * b.M[1][0] + a.M[i][2] * b.M[2][0]; - d->M[i][1] = a.M[i][0] * b.M[0][1] + a.M[i][1] * b.M[1][1] + a.M[i][2] * b.M[2][1]; - d->M[i][2] = a.M[i][0] * b.M[0][2] + a.M[i][1] * b.M[1][2] + a.M[i][2] * b.M[2][2]; - } while((++i) < 3); - - return *d; - } - - Matrix3 operator* (const Matrix3& b) const - { - Matrix3 result(Matrix3::NoInit); - Multiply(&result, *this, b); - return result; - } - - Matrix3& operator*= (const Matrix3& b) - { - return Multiply(this, Matrix3(*this), b); - } - - Matrix3 operator* (T s) const - { - Matrix3 result(*this); - result *= s; - return result; - } - - Matrix3& operator*= (T s) - { - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - M[i][j] *= s; - } - - return *this; - } - - Vector3 operator* (const Vector3 &b) const - { - Vector3 result; - result.x = M[0][0]*b.x + M[0][1]*b.y + M[0][2]*b.z; - result.y = M[1][0]*b.x + M[1][1]*b.y + M[1][2]*b.z; - result.z = M[2][0]*b.x + M[2][1]*b.y + M[2][2]*b.z; - - return result; - } - - Matrix3 operator/ (T s) const - { - Matrix3 result(*this); - result /= s; - return result; - } - - Matrix3& operator/= (T s) - { - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - M[i][j] /= s; - } - - return *this; - } - - Vector2 Transform(const Vector2& v) const - { - const T rcpZ = T(1) / (M[2][0] * v.x + M[2][1] * v.y + M[2][2]); - return Vector2((M[0][0] * v.x + M[0][1] * v.y + M[0][2]) * rcpZ, - (M[1][0] * v.x + M[1][1] * v.y + M[1][2]) * rcpZ); - } - - Vector3 Transform(const Vector3& v) const - { - return Vector3(M[0][0] * v.x + M[0][1] * v.y + M[0][2] * v.z, - M[1][0] * v.x + M[1][1] * v.y + M[1][2] * v.z, - M[2][0] * v.x + M[2][1] * v.y + M[2][2] * v.z); - } - - Matrix3 Transposed() const - { - return Matrix3(M[0][0], M[1][0], M[2][0], - M[0][1], M[1][1], M[2][1], - M[0][2], M[1][2], M[2][2]); - } - - void Transpose() - { - *this = Transposed(); - } - - - T SubDet (const size_t* rows, const size_t* cols) const - { - return M[rows[0]][cols[0]] * (M[rows[1]][cols[1]] * M[rows[2]][cols[2]] - M[rows[1]][cols[2]] * M[rows[2]][cols[1]]) - - M[rows[0]][cols[1]] * (M[rows[1]][cols[0]] * M[rows[2]][cols[2]] - M[rows[1]][cols[2]] * M[rows[2]][cols[0]]) - + M[rows[0]][cols[2]] * (M[rows[1]][cols[0]] * M[rows[2]][cols[1]] - M[rows[1]][cols[1]] * M[rows[2]][cols[0]]); - } - - - // M += a*b.t() - inline void Rank1Add(const Vector3 &a, const Vector3 &b) - { - M[0][0] += a.x*b.x; M[0][1] += a.x*b.y; M[0][2] += a.x*b.z; - M[1][0] += a.y*b.x; M[1][1] += a.y*b.y; M[1][2] += a.y*b.z; - M[2][0] += a.z*b.x; M[2][1] += a.z*b.y; M[2][2] += a.z*b.z; - } - - // M -= a*b.t() - inline void Rank1Sub(const Vector3 &a, const Vector3 &b) - { - M[0][0] -= a.x*b.x; M[0][1] -= a.x*b.y; M[0][2] -= a.x*b.z; - M[1][0] -= a.y*b.x; M[1][1] -= a.y*b.y; M[1][2] -= a.y*b.z; - M[2][0] -= a.z*b.x; M[2][1] -= a.z*b.y; M[2][2] -= a.z*b.z; - } - - inline Vector3 Col(int c) const - { - return Vector3(M[0][c], M[1][c], M[2][c]); - } - - inline Vector3 Row(int r) const - { - return Vector3(M[r][0], M[r][1], M[r][2]); - } - - inline Vector3 GetColumn(int c) const - { - return Vector3(M[0][c], M[1][c], M[2][c]); - } - - inline Vector3 GetRow(int r) const - { - return Vector3(M[r][0], M[r][1], M[r][2]); - } - - inline void SetColumn(int c, const Vector3& v) - { - M[0][c] = v.x; - M[1][c] = v.y; - M[2][c] = v.z; - } - - inline void SetRow(int r, const Vector3& v) - { - M[r][0] = v.x; - M[r][1] = v.y; - M[r][2] = v.z; - } - - inline T Determinant() const - { - const Matrix3& m = *this; - T d; - - d = m.M[0][0] * (m.M[1][1]*m.M[2][2] - m.M[1][2] * m.M[2][1]); - d -= m.M[0][1] * (m.M[1][0]*m.M[2][2] - m.M[1][2] * m.M[2][0]); - d += m.M[0][2] * (m.M[1][0]*m.M[2][1] - m.M[1][1] * m.M[2][0]); - - return d; - } - - inline Matrix3 Inverse() const - { - Matrix3 a; - const Matrix3& m = *this; - T d = Determinant(); - - OVR_MATH_ASSERT(d != 0); - T s = T(1)/d; - - a.M[0][0] = s * (m.M[1][1] * m.M[2][2] - m.M[1][2] * m.M[2][1]); - a.M[1][0] = s * (m.M[1][2] * m.M[2][0] - m.M[1][0] * m.M[2][2]); - a.M[2][0] = s * (m.M[1][0] * m.M[2][1] - m.M[1][1] * m.M[2][0]); - - a.M[0][1] = s * (m.M[0][2] * m.M[2][1] - m.M[0][1] * m.M[2][2]); - a.M[1][1] = s * (m.M[0][0] * m.M[2][2] - m.M[0][2] * m.M[2][0]); - a.M[2][1] = s * (m.M[0][1] * m.M[2][0] - m.M[0][0] * m.M[2][1]); - - a.M[0][2] = s * (m.M[0][1] * m.M[1][2] - m.M[0][2] * m.M[1][1]); - a.M[1][2] = s * (m.M[0][2] * m.M[1][0] - m.M[0][0] * m.M[1][2]); - a.M[2][2] = s * (m.M[0][0] * m.M[1][1] - m.M[0][1] * m.M[1][0]); - - return a; - } - - // Outer Product of two column vectors: a * b.Transpose() - static Matrix3 OuterProduct(const Vector3& a, const Vector3& b) - { - return Matrix3(a.x*b.x, a.x*b.y, a.x*b.z, - a.y*b.x, a.y*b.y, a.y*b.z, - a.z*b.x, a.z*b.y, a.z*b.z); - } - - // Vector cross product as a premultiply matrix: - // L.Cross(R) = LeftCrossAsMatrix(L) * R - static Matrix3 LeftCrossAsMatrix(const Vector3& L) - { - return Matrix3( - T(0), -L.z, +L.y, - +L.z, T(0), -L.x, - -L.y, +L.x, T(0)); - } - - // Vector cross product as a premultiply matrix: - // L.Cross(R) = RightCrossAsMatrix(R) * L - static Matrix3 RightCrossAsMatrix(const Vector3& R) - { - return Matrix3( - T(0), +R.z, -R.y, - -R.z, T(0), +R.x, - +R.y, -R.x, T(0)); - } - - // Angle in radians of a rotation matrix - // Uses identity trace(a) = 2*cos(theta) + 1 - T Angle() const - { - return Acos((Trace() - T(1)) * T(0.5)); - } - - // Angle in radians between two rotation matrices - T Angle(const Matrix3& b) const - { - // Compute trace of (this->Transposed() * b) - // This works out to sum of products of elements. - T trace = T(0); - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - trace += M[i][j] * b.M[i][j]; - } - } - return Acos((trace - T(1)) * T(0.5)); - } -}; - -typedef Matrix3 Matrix3f; -typedef Matrix3 Matrix3d; - -//------------------------------------------------------------------------------------- -// ***** Matrix2 - -template -class Matrix2 -{ -public: - typedef T ElementType; - static const size_t Dimension = 2; - - T M[2][2]; - - enum NoInitType { NoInit }; - - // Construct with no memory initialization. - Matrix2(NoInitType) { } - - // By default, we construct identity matrix. - Matrix2() - { - M[0][0] = M[1][1] = T(1); - M[0][1] = M[1][0] = T(0); - } - - Matrix2(T m11, T m12, - T m21, T m22) - { - M[0][0] = m11; M[0][1] = m12; - M[1][0] = m21; M[1][1] = m22; - } - - // Construction from X, Y basis vectors - Matrix2(const Vector2& xBasis, const Vector2& yBasis) - { - M[0][0] = xBasis.x; M[0][1] = yBasis.x; - M[1][0] = xBasis.y; M[1][1] = yBasis.y; - } - - explicit Matrix2(T s) - { - M[0][0] = M[1][1] = s; - M[0][1] = M[1][0] = T(0); - } - - Matrix2(T m11, T m22) - { - M[0][0] = m11; M[0][1] = T(0); - M[1][0] = T(0); M[1][1] = m22; - } - - explicit Matrix2(const Matrix2::OtherFloatType> &src) - { - M[0][0] = T(src.M[0][0]); M[0][1] = T(src.M[0][1]); - M[1][0] = T(src.M[1][0]); M[1][1] = T(src.M[1][1]); - } - - // C-interop support - Matrix2(const typename CompatibleTypes >::Type& s) - { - OVR_MATH_STATIC_ASSERT(sizeof(s) == sizeof(Matrix2), "sizeof(s) == sizeof(Matrix2)"); - memcpy(M, s.M, sizeof(M)); - } - - operator const typename CompatibleTypes >::Type() const - { - typename CompatibleTypes >::Type result; - OVR_MATH_STATIC_ASSERT(sizeof(result) == sizeof(Matrix2), "sizeof(result) == sizeof(Matrix2)"); - memcpy(result.M, M, sizeof(M)); - return result; - } - - T operator()(int i, int j) const { return M[i][j]; } - T& operator()(int i, int j) { return M[i][j]; } - const T* operator[](int i) const { return M[i]; } - T* operator[](int i) { return M[i]; } - - static Matrix2 Identity() { return Matrix2(); } - - void SetIdentity() - { - M[0][0] = M[1][1] = T(1); - M[0][1] = M[1][0] = T(0); - } - - static Matrix2 Diagonal(T m00, T m11) - { - return Matrix2(m00, m11); - } - static Matrix2 Diagonal(const Vector2& v) { return Matrix2(v.x, v.y); } - - T Trace() const { return M[0][0] + M[1][1]; } - - bool operator== (const Matrix2& b) const - { - return M[0][0] == b.M[0][0] && M[0][1] == b.M[0][1] && - M[1][0] == b.M[1][0] && M[1][1] == b.M[1][1]; - } - - Matrix2 operator+ (const Matrix2& b) const - { - return Matrix2(M[0][0] + b.M[0][0], M[0][1] + b.M[0][1], - M[1][0] + b.M[1][0], M[1][1] + b.M[1][1]); - } - - Matrix2& operator+= (const Matrix2& b) - { - M[0][0] += b.M[0][0]; M[0][1] += b.M[0][1]; - M[1][0] += b.M[1][0]; M[1][1] += b.M[1][1]; - return *this; - } - - void operator= (const Matrix2& b) - { - M[0][0] = b.M[0][0]; M[0][1] = b.M[0][1]; - M[1][0] = b.M[1][0]; M[1][1] = b.M[1][1]; - } - - Matrix2 operator- (const Matrix2& b) const - { - return Matrix2(M[0][0] - b.M[0][0], M[0][1] - b.M[0][1], - M[1][0] - b.M[1][0], M[1][1] - b.M[1][1]); - } - - Matrix2& operator-= (const Matrix2& b) - { - M[0][0] -= b.M[0][0]; M[0][1] -= b.M[0][1]; - M[1][0] -= b.M[1][0]; M[1][1] -= b.M[1][1]; - return *this; - } - - Matrix2 operator* (const Matrix2& b) const - { - return Matrix2(M[0][0] * b.M[0][0] + M[0][1] * b.M[1][0], M[0][0] * b.M[0][1] + M[0][1] * b.M[1][1], - M[1][0] * b.M[0][0] + M[1][1] * b.M[1][0], M[1][0] * b.M[0][1] + M[1][1] * b.M[1][1]); - } - - Matrix2& operator*= (const Matrix2& b) - { - *this = *this * b; - return *this; - } - - Matrix2 operator* (T s) const - { - return Matrix2(M[0][0] * s, M[0][1] * s, - M[1][0] * s, M[1][1] * s); - } - - Matrix2& operator*= (T s) - { - M[0][0] *= s; M[0][1] *= s; - M[1][0] *= s; M[1][1] *= s; - return *this; - } - - Matrix2 operator/ (T s) const - { - return *this * (T(1) / s); - } - - Matrix2& operator/= (T s) - { - return *this *= (T(1) / s); - } - - Vector2 operator* (const Vector2 &b) const - { - return Vector2(M[0][0] * b.x + M[0][1] * b.y, - M[1][0] * b.x + M[1][1] * b.y); - } - - Vector2 Transform(const Vector2& v) const - { - return Vector2(M[0][0] * v.x + M[0][1] * v.y, - M[1][0] * v.x + M[1][1] * v.y); - } - - Matrix2 Transposed() const - { - return Matrix2(M[0][0], M[1][0], - M[0][1], M[1][1]); - } - - void Transpose() - { - OVRMath_Swap(M[1][0], M[0][1]); - } - - Vector2 GetColumn(int c) const - { - return Vector2(M[0][c], M[1][c]); - } - - Vector2 GetRow(int r) const - { - return Vector2(M[r][0], M[r][1]); - } - - void SetColumn(int c, const Vector2& v) - { - M[0][c] = v.x; - M[1][c] = v.y; - } - - void SetRow(int r, const Vector2& v) - { - M[r][0] = v.x; - M[r][1] = v.y; - } - - T Determinant() const - { - return M[0][0] * M[1][1] - M[0][1] * M[1][0]; - } - - Matrix2 Inverse() const - { - T rcpDet = T(1) / Determinant(); - return Matrix2( M[1][1] * rcpDet, -M[0][1] * rcpDet, - -M[1][0] * rcpDet, M[0][0] * rcpDet); - } - - // Outer Product of two column vectors: a * b.Transpose() - static Matrix2 OuterProduct(const Vector2& a, const Vector2& b) - { - return Matrix2(a.x*b.x, a.x*b.y, - a.y*b.x, a.y*b.y); - } - - // Angle in radians between two rotation matrices - T Angle(const Matrix2& b) const - { - const Matrix2& a = *this; - return Acos(a(0, 0)*b(0, 0) + a(1, 0)*b(1, 0)); - } -}; - -typedef Matrix2 Matrix2f; -typedef Matrix2 Matrix2d; - -//------------------------------------------------------------------------------------- - -template -class SymMat3 -{ -private: - typedef SymMat3 this_type; - -public: - typedef T Value_t; - // Upper symmetric - T v[6]; // _00 _01 _02 _11 _12 _22 - - inline SymMat3() {} - - inline explicit SymMat3(T s) - { - v[0] = v[3] = v[5] = s; - v[1] = v[2] = v[4] = T(0); - } - - inline explicit SymMat3(T a00, T a01, T a02, T a11, T a12, T a22) - { - v[0] = a00; v[1] = a01; v[2] = a02; - v[3] = a11; v[4] = a12; - v[5] = a22; - } - - // Cast to symmetric Matrix3 - operator Matrix3() const - { - return Matrix3(v[0], v[1], v[2], - v[1], v[3], v[4], - v[2], v[4], v[5]); - } - - static inline int Index(unsigned int i, unsigned int j) - { - return (i <= j) ? (3*i - i*(i+1)/2 + j) : (3*j - j*(j+1)/2 + i); - } - - inline T operator()(int i, int j) const { return v[Index(i,j)]; } - - inline T &operator()(int i, int j) { return v[Index(i,j)]; } - - inline this_type& operator+=(const this_type& b) - { - v[0]+=b.v[0]; - v[1]+=b.v[1]; - v[2]+=b.v[2]; - v[3]+=b.v[3]; - v[4]+=b.v[4]; - v[5]+=b.v[5]; - return *this; - } - - inline this_type& operator-=(const this_type& b) - { - v[0]-=b.v[0]; - v[1]-=b.v[1]; - v[2]-=b.v[2]; - v[3]-=b.v[3]; - v[4]-=b.v[4]; - v[5]-=b.v[5]; - - return *this; - } - - inline this_type& operator*=(T s) - { - v[0]*=s; - v[1]*=s; - v[2]*=s; - v[3]*=s; - v[4]*=s; - v[5]*=s; - - return *this; - } - - inline SymMat3 operator*(T s) const - { - SymMat3 d; - d.v[0] = v[0]*s; - d.v[1] = v[1]*s; - d.v[2] = v[2]*s; - d.v[3] = v[3]*s; - d.v[4] = v[4]*s; - d.v[5] = v[5]*s; - - return d; - } - - // Multiplies two matrices into destination with minimum copying. - static SymMat3& Multiply(SymMat3* d, const SymMat3& a, const SymMat3& b) - { - // _00 _01 _02 _11 _12 _22 - - d->v[0] = a.v[0] * b.v[0]; - d->v[1] = a.v[0] * b.v[1] + a.v[1] * b.v[3]; - d->v[2] = a.v[0] * b.v[2] + a.v[1] * b.v[4]; - - d->v[3] = a.v[3] * b.v[3]; - d->v[4] = a.v[3] * b.v[4] + a.v[4] * b.v[5]; - - d->v[5] = a.v[5] * b.v[5]; - - return *d; - } - - inline T Determinant() const - { - const this_type& m = *this; - T d; - - d = m(0,0) * (m(1,1)*m(2,2) - m(1,2) * m(2,1)); - d -= m(0,1) * (m(1,0)*m(2,2) - m(1,2) * m(2,0)); - d += m(0,2) * (m(1,0)*m(2,1) - m(1,1) * m(2,0)); - - return d; - } - - inline this_type Inverse() const - { - this_type a; - const this_type& m = *this; - T d = Determinant(); - - OVR_MATH_ASSERT(d != 0); - T s = T(1)/d; - - a(0,0) = s * (m(1,1) * m(2,2) - m(1,2) * m(2,1)); - - a(0,1) = s * (m(0,2) * m(2,1) - m(0,1) * m(2,2)); - a(1,1) = s * (m(0,0) * m(2,2) - m(0,2) * m(2,0)); - - a(0,2) = s * (m(0,1) * m(1,2) - m(0,2) * m(1,1)); - a(1,2) = s * (m(0,2) * m(1,0) - m(0,0) * m(1,2)); - a(2,2) = s * (m(0,0) * m(1,1) - m(0,1) * m(1,0)); - - return a; - } - - inline T Trace() const { return v[0] + v[3] + v[5]; } - - // M = a*a.t() - inline void Rank1(const Vector3 &a) - { - v[0] = a.x*a.x; v[1] = a.x*a.y; v[2] = a.x*a.z; - v[3] = a.y*a.y; v[4] = a.y*a.z; - v[5] = a.z*a.z; - } - - // M += a*a.t() - inline void Rank1Add(const Vector3 &a) - { - v[0] += a.x*a.x; v[1] += a.x*a.y; v[2] += a.x*a.z; - v[3] += a.y*a.y; v[4] += a.y*a.z; - v[5] += a.z*a.z; - } - - // M -= a*a.t() - inline void Rank1Sub(const Vector3 &a) - { - v[0] -= a.x*a.x; v[1] -= a.x*a.y; v[2] -= a.x*a.z; - v[3] -= a.y*a.y; v[4] -= a.y*a.z; - v[5] -= a.z*a.z; - } -}; - -typedef SymMat3 SymMat3f; -typedef SymMat3 SymMat3d; - -template -inline Matrix3 operator*(const SymMat3& a, const SymMat3& b) -{ - #define AJB_ARBC(r,c) (a(r,0)*b(0,c)+a(r,1)*b(1,c)+a(r,2)*b(2,c)) - return Matrix3( - AJB_ARBC(0,0), AJB_ARBC(0,1), AJB_ARBC(0,2), - AJB_ARBC(1,0), AJB_ARBC(1,1), AJB_ARBC(1,2), - AJB_ARBC(2,0), AJB_ARBC(2,1), AJB_ARBC(2,2)); - #undef AJB_ARBC -} - -template -inline Matrix3 operator*(const Matrix3& a, const SymMat3& b) -{ - #define AJB_ARBC(r,c) (a(r,0)*b(0,c)+a(r,1)*b(1,c)+a(r,2)*b(2,c)) - return Matrix3( - AJB_ARBC(0,0), AJB_ARBC(0,1), AJB_ARBC(0,2), - AJB_ARBC(1,0), AJB_ARBC(1,1), AJB_ARBC(1,2), - AJB_ARBC(2,0), AJB_ARBC(2,1), AJB_ARBC(2,2)); - #undef AJB_ARBC -} - -//------------------------------------------------------------------------------------- -// ***** Angle - -// Cleanly representing the algebra of 2D rotations. -// The operations maintain the angle between -Pi and Pi, the same range as atan2. - -template -class Angle -{ -public: - enum AngularUnits - { - Radians = 0, - Degrees = 1 - }; - - Angle() : a(0) {} - - // Fix the range to be between -Pi and Pi - Angle(T a_, AngularUnits u = Radians) : a((u == Radians) ? a_ : a_*((T)MATH_DOUBLE_DEGREETORADFACTOR)) { FixRange(); } - - T Get(AngularUnits u = Radians) const { return (u == Radians) ? a : a*((T)MATH_DOUBLE_RADTODEGREEFACTOR); } - void Set(const T& x, AngularUnits u = Radians) { a = (u == Radians) ? x : x*((T)MATH_DOUBLE_DEGREETORADFACTOR); FixRange(); } - int Sign() const { if (a == 0) return 0; else return (a > 0) ? 1 : -1; } - T Abs() const { return (a >= 0) ? a : -a; } - - bool operator== (const Angle& b) const { return a == b.a; } - bool operator!= (const Angle& b) const { return a != b.a; } -// bool operator< (const Angle& b) const { return a < a.b; } -// bool operator> (const Angle& b) const { return a > a.b; } -// bool operator<= (const Angle& b) const { return a <= a.b; } -// bool operator>= (const Angle& b) const { return a >= a.b; } -// bool operator= (const T& x) { a = x; FixRange(); } - - // These operations assume a is already between -Pi and Pi. - Angle& operator+= (const Angle& b) { a = a + b.a; FastFixRange(); return *this; } - Angle& operator+= (const T& x) { a = a + x; FixRange(); return *this; } - Angle operator+ (const Angle& b) const { Angle res = *this; res += b; return res; } - Angle operator+ (const T& x) const { Angle res = *this; res += x; return res; } - Angle& operator-= (const Angle& b) { a = a - b.a; FastFixRange(); return *this; } - Angle& operator-= (const T& x) { a = a - x; FixRange(); return *this; } - Angle operator- (const Angle& b) const { Angle res = *this; res -= b; return res; } - Angle operator- (const T& x) const { Angle res = *this; res -= x; return res; } - - T Distance(const Angle& b) { T c = fabs(a - b.a); return (c <= ((T)MATH_DOUBLE_PI)) ? c : ((T)MATH_DOUBLE_TWOPI) - c; } - -private: - - // The stored angle, which should be maintained between -Pi and Pi - T a; - - // Fixes the angle range to [-Pi,Pi], but assumes no more than 2Pi away on either side - inline void FastFixRange() - { - if (a < -((T)MATH_DOUBLE_PI)) - a += ((T)MATH_DOUBLE_TWOPI); - else if (a > ((T)MATH_DOUBLE_PI)) - a -= ((T)MATH_DOUBLE_TWOPI); - } - - // Fixes the angle range to [-Pi,Pi] for any given range, but slower then the fast method - inline void FixRange() - { - // do nothing if the value is already in the correct range, since fmod call is expensive - if (a >= -((T)MATH_DOUBLE_PI) && a <= ((T)MATH_DOUBLE_PI)) - return; - a = fmod(a,((T)MATH_DOUBLE_TWOPI)); - if (a < -((T)MATH_DOUBLE_PI)) - a += ((T)MATH_DOUBLE_TWOPI); - else if (a > ((T)MATH_DOUBLE_PI)) - a -= ((T)MATH_DOUBLE_TWOPI); - } -}; - - -typedef Angle Anglef; -typedef Angle Angled; - - -//------------------------------------------------------------------------------------- -// ***** Plane - -// Consists of a normal vector and distance from the origin where the plane is located. - -template -class Plane -{ -public: - Vector3 N; - T D; - - Plane() : D(0) {} - - // Normals must already be normalized - Plane(const Vector3& n, T d) : N(n), D(d) {} - Plane(T x, T y, T z, T d) : N(x,y,z), D(d) {} - - // construct from a point on the plane and the normal - Plane(const Vector3& p, const Vector3& n) : N(n), D(-(p * n)) {} - - // Find the point to plane distance. The sign indicates what side of the plane the point is on (0 = point on plane). - T TestSide(const Vector3& p) const - { - return (N.Dot(p)) + D; - } - - Plane Flipped() const - { - return Plane(-N, -D); - } - - void Flip() - { - N = -N; - D = -D; - } - - bool operator==(const Plane& rhs) const - { - return (this->D == rhs.D && this->N == rhs.N); - } -}; - -typedef Plane Planef; -typedef Plane Planed; - - - - -//----------------------------------------------------------------------------------- -// ***** ScaleAndOffset2D - -struct ScaleAndOffset2D -{ - Vector2f Scale; - Vector2f Offset; - - ScaleAndOffset2D(float sx = 0.0f, float sy = 0.0f, float ox = 0.0f, float oy = 0.0f) - : Scale(sx, sy), Offset(ox, oy) - { } -}; - - -//----------------------------------------------------------------------------------- -// ***** FovPort - -// FovPort describes Field Of View (FOV) of a viewport. -// This class has values for up, down, left and right, stored in -// tangent of the angle units to simplify calculations. -// -// As an example, for a standard 90 degree vertical FOV, we would -// have: { UpTan = tan(90 degrees / 2), DownTan = tan(90 degrees / 2) }. -// -// CreateFromRadians/Degrees helper functions can be used to -// access FOV in different units. - - -// ***** FovPort - -struct FovPort -{ - float UpTan; - float DownTan; - float LeftTan; - float RightTan; - - FovPort ( float sideTan = 0.0f ) : - UpTan(sideTan), DownTan(sideTan), LeftTan(sideTan), RightTan(sideTan) { } - FovPort ( float u, float d, float l, float r ) : - UpTan(u), DownTan(d), LeftTan(l), RightTan(r) { } - - // C-interop support: FovPort <-> ovrFovPort (implementation in OVR_CAPI.cpp). - FovPort(const ovrFovPort &src) - : UpTan(src.UpTan), DownTan(src.DownTan), LeftTan(src.LeftTan), RightTan(src.RightTan) - { } - - operator ovrFovPort () const - { - ovrFovPort result; - result.LeftTan = LeftTan; - result.RightTan = RightTan; - result.UpTan = UpTan; - result.DownTan = DownTan; - return result; - } - - static FovPort CreateFromRadians(float horizontalFov, float verticalFov) - { - FovPort result; - result.UpTan = tanf ( verticalFov * 0.5f ); - result.DownTan = tanf ( verticalFov * 0.5f ); - result.LeftTan = tanf ( horizontalFov * 0.5f ); - result.RightTan = tanf ( horizontalFov * 0.5f ); - return result; - } - - static FovPort CreateFromDegrees(float horizontalFovDegrees, - float verticalFovDegrees) - { - return CreateFromRadians(DegreeToRad(horizontalFovDegrees), - DegreeToRad(verticalFovDegrees)); - } - - // Get Horizontal/Vertical components of Fov in radians. - float GetVerticalFovRadians() const { return atanf(UpTan) + atanf(DownTan); } - float GetHorizontalFovRadians() const { return atanf(LeftTan) + atanf(RightTan); } - // Get Horizontal/Vertical components of Fov in degrees. - float GetVerticalFovDegrees() const { return RadToDegree(GetVerticalFovRadians()); } - float GetHorizontalFovDegrees() const { return RadToDegree(GetHorizontalFovRadians()); } - - // Compute maximum tangent value among all four sides. - float GetMaxSideTan() const - { - return OVRMath_Max(OVRMath_Max(UpTan, DownTan), OVRMath_Max(LeftTan, RightTan)); - } - - static ScaleAndOffset2D CreateNDCScaleAndOffsetFromFov ( FovPort tanHalfFov ) - { - float projXScale = 2.0f / ( tanHalfFov.LeftTan + tanHalfFov.RightTan ); - float projXOffset = ( tanHalfFov.LeftTan - tanHalfFov.RightTan ) * projXScale * 0.5f; - float projYScale = 2.0f / ( tanHalfFov.UpTan + tanHalfFov.DownTan ); - float projYOffset = ( tanHalfFov.UpTan - tanHalfFov.DownTan ) * projYScale * 0.5f; - - ScaleAndOffset2D result; - result.Scale = Vector2f(projXScale, projYScale); - result.Offset = Vector2f(projXOffset, projYOffset); - // Hey - why is that Y.Offset negated? - // It's because a projection matrix transforms from world coords with Y=up, - // whereas this is from NDC which is Y=down. - - return result; - } - - // Converts Fov Tan angle units to [-1,1] render target NDC space - Vector2f TanAngleToRendertargetNDC(Vector2f const &tanEyeAngle) - { - ScaleAndOffset2D eyeToSourceNDC = CreateNDCScaleAndOffsetFromFov(*this); - return tanEyeAngle * eyeToSourceNDC.Scale + eyeToSourceNDC.Offset; - } - - // Compute per-channel minimum and maximum of Fov. - static FovPort Min(const FovPort& a, const FovPort& b) - { - FovPort fov( OVRMath_Min( a.UpTan , b.UpTan ), - OVRMath_Min( a.DownTan , b.DownTan ), - OVRMath_Min( a.LeftTan , b.LeftTan ), - OVRMath_Min( a.RightTan, b.RightTan ) ); - return fov; - } - - static FovPort Max(const FovPort& a, const FovPort& b) - { - FovPort fov( OVRMath_Max( a.UpTan , b.UpTan ), - OVRMath_Max( a.DownTan , b.DownTan ), - OVRMath_Max( a.LeftTan , b.LeftTan ), - OVRMath_Max( a.RightTan, b.RightTan ) ); - return fov; - } -}; - - -} // Namespace OVR - - -#if defined(_MSC_VER) - #pragma warning(pop) -#endif - - -#endif diff --git a/src/external/OculusSDK/LibOVR/Include/Extras/OVR_StereoProjection.h b/src/external/OculusSDK/LibOVR/Include/Extras/OVR_StereoProjection.h deleted file mode 100644 index b4bc3bc77..000000000 --- a/src/external/OculusSDK/LibOVR/Include/Extras/OVR_StereoProjection.h +++ /dev/null @@ -1,70 +0,0 @@ -/************************************************************************************ - -Filename : OVR_StereoProjection.h -Content : Stereo projection functions -Created : November 30, 2013 -Authors : Tom Fosyth - -Copyright : Copyright 2014-2016 Oculus VR, LLC All Rights reserved. - -Licensed under the Oculus VR Rift SDK License Version 3.3 (the "License"); -you may not use the Oculus VR Rift SDK except in compliance with the License, -which is provided at the time of installation or download, or which -otherwise accompanies this software in either electronic or hard copy form. - -You may obtain a copy of the License at - -http://www.oculusvr.com/licenses/LICENSE-3.3 - -Unless required by applicable law or agreed to in writing, the Oculus VR SDK -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -*************************************************************************************/ - -#ifndef OVR_StereoProjection_h -#define OVR_StereoProjection_h - - -#include "Extras/OVR_Math.h" - - -namespace OVR { - - -//----------------------------------------------------------------------------------- -// ***** Stereo Enumerations - -// StereoEye specifies which eye we are rendering for; it is used to -// retrieve StereoEyeParams. -enum StereoEye -{ - StereoEye_Left, - StereoEye_Right, - StereoEye_Center -}; - - - -//----------------------------------------------------------------------------------- -// ***** Propjection functions - -Matrix4f CreateProjection ( bool rightHanded, bool isOpenGL, FovPort fov, StereoEye eye, - float zNear = 0.01f, float zFar = 10000.0f, - bool flipZ = false, bool farAtInfinity = false); - -Matrix4f CreateOrthoSubProjection ( bool rightHanded, StereoEye eyeType, - float tanHalfFovX, float tanHalfFovY, - float unitsX, float unitsY, float distanceFromCamera, - float interpupillaryDistance, Matrix4f const &projection, - float zNear = 0.0f, float zFar = 0.0f, - bool flipZ = false, bool farAtInfinity = false); - -ScaleAndOffset2D CreateNDCScaleAndOffsetFromFov ( FovPort fov ); - - -} //namespace OVR - -#endif // OVR_StereoProjection_h diff --git a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI.h b/src/external/OculusSDK/LibOVR/Include/OVR_CAPI.h deleted file mode 100644 index eaabcf592..000000000 --- a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI.h +++ /dev/null @@ -1,2234 +0,0 @@ -/********************************************************************************//** -\file OVR_CAPI.h -\brief C Interface to the Oculus PC SDK tracking and rendering library. -\copyright Copyright 2014 Oculus VR, LLC All Rights reserved. -************************************************************************************/ - -#ifndef OVR_CAPI_h // We don't use version numbers within this name, as all versioned variations of this file are currently mutually exclusive. -#define OVR_CAPI_h ///< Header include guard - - -#include "OVR_CAPI_Keys.h" -#include "OVR_Version.h" -#include "OVR_ErrorCode.h" - - -#include - -#if defined(_MSC_VER) - #pragma warning(push) - #pragma warning(disable: 4324) // structure was padded due to __declspec(align()) - #pragma warning(disable: 4359) // The alignment specified for a type is less than the alignment of the type of one of its data members -#endif - - - -//----------------------------------------------------------------------------------- -// ***** OVR_OS -// -#if !defined(OVR_OS_WIN32) && defined(_WIN32) - #define OVR_OS_WIN32 -#endif - -#if !defined(OVR_OS_MAC) && defined(__APPLE__) - #define OVR_OS_MAC -#endif - -#if !defined(OVR_OS_LINUX) && defined(__linux__) - #define OVR_OS_LINUX -#endif - - - -//----------------------------------------------------------------------------------- -// ***** OVR_CPP -// -#if !defined(OVR_CPP) - #if defined(__cplusplus) - #define OVR_CPP(x) x - #else - #define OVR_CPP(x) /* Not C++ */ - #endif -#endif - - - -//----------------------------------------------------------------------------------- -// ***** OVR_CDECL -// -/// LibOVR calling convention for 32-bit Windows builds. -// -#if !defined(OVR_CDECL) - #if defined(_WIN32) - #define OVR_CDECL __cdecl - #else - #define OVR_CDECL - #endif -#endif - - - -//----------------------------------------------------------------------------------- -// ***** OVR_EXTERN_C -// -/// Defined as extern "C" when built from C++ code. -// -#if !defined(OVR_EXTERN_C) - #ifdef __cplusplus - #define OVR_EXTERN_C extern "C" - #else - #define OVR_EXTERN_C - #endif -#endif - - - -//----------------------------------------------------------------------------------- -// ***** OVR_PUBLIC_FUNCTION / OVR_PRIVATE_FUNCTION -// -// OVR_PUBLIC_FUNCTION - Functions that externally visible from a shared library. Corresponds to Microsoft __dllexport. -// OVR_PUBLIC_CLASS - C++ structs and classes that are externally visible from a shared library. Corresponds to Microsoft __dllexport. -// OVR_PRIVATE_FUNCTION - Functions that are not visible outside of a shared library. They are private to the shared library. -// OVR_PRIVATE_CLASS - C++ structs and classes that are not visible outside of a shared library. They are private to the shared library. -// -// OVR_DLL_BUILD - Used to indicate that the current compilation unit is of a shared library. -// OVR_DLL_IMPORT - Used to indicate that the current compilation unit is a user of the corresponding shared library. -// OVR_STATIC_BUILD - used to indicate that the current compilation unit is not a shared library but rather statically linked code. -// -#if !defined(OVR_PUBLIC_FUNCTION) - #if defined(OVR_DLL_BUILD) - #if defined(_WIN32) - #define OVR_PUBLIC_FUNCTION(rval) OVR_EXTERN_C __declspec(dllexport) rval OVR_CDECL - #define OVR_PUBLIC_CLASS __declspec(dllexport) - #define OVR_PRIVATE_FUNCTION(rval) rval OVR_CDECL - #define OVR_PRIVATE_CLASS - #else - #define OVR_PUBLIC_FUNCTION(rval) OVR_EXTERN_C __attribute__((visibility("default"))) rval OVR_CDECL /* Requires GCC 4.0+ */ - #define OVR_PUBLIC_CLASS __attribute__((visibility("default"))) /* Requires GCC 4.0+ */ - #define OVR_PRIVATE_FUNCTION(rval) __attribute__((visibility("hidden"))) rval OVR_CDECL - #define OVR_PRIVATE_CLASS __attribute__((visibility("hidden"))) - #endif - #elif defined(OVR_DLL_IMPORT) - #if defined(_WIN32) - #define OVR_PUBLIC_FUNCTION(rval) OVR_EXTERN_C __declspec(dllimport) rval OVR_CDECL - #define OVR_PUBLIC_CLASS __declspec(dllimport) - #else - #define OVR_PUBLIC_FUNCTION(rval) OVR_EXTERN_C rval OVR_CDECL - #define OVR_PUBLIC_CLASS - #endif - #define OVR_PRIVATE_FUNCTION(rval) rval OVR_CDECL - #define OVR_PRIVATE_CLASS - #else // OVR_STATIC_BUILD - #define OVR_PUBLIC_FUNCTION(rval) OVR_EXTERN_C rval OVR_CDECL - #define OVR_PUBLIC_CLASS - #define OVR_PRIVATE_FUNCTION(rval) rval OVR_CDECL - #define OVR_PRIVATE_CLASS - #endif -#endif - - -//----------------------------------------------------------------------------------- -// ***** OVR_EXPORT -// -/// Provided for backward compatibility with older versions of this library. -// -#if !defined(OVR_EXPORT) - #ifdef OVR_OS_WIN32 - #define OVR_EXPORT __declspec(dllexport) - #else - #define OVR_EXPORT - #endif -#endif - - - -//----------------------------------------------------------------------------------- -// ***** OVR_ALIGNAS -// -#if !defined(OVR_ALIGNAS) - #if defined(__GNUC__) || defined(__clang__) - #define OVR_ALIGNAS(n) __attribute__((aligned(n))) - #elif defined(_MSC_VER) || defined(__INTEL_COMPILER) - #define OVR_ALIGNAS(n) __declspec(align(n)) - #elif defined(__CC_ARM) - #define OVR_ALIGNAS(n) __align(n) - #else - #error Need to define OVR_ALIGNAS - #endif -#endif - - -//----------------------------------------------------------------------------------- -// ***** OVR_CC_HAS_FEATURE -// -// This is a portable way to use compile-time feature identification available -// with some compilers in a clean way. Direct usage of __has_feature in preprocessing -// statements of non-supporting compilers results in a preprocessing error. -// -// Example usage: -// #if OVR_CC_HAS_FEATURE(is_pod) -// if(__is_pod(T)) // If the type is plain data then we can safely memcpy it. -// memcpy(&destObject, &srcObject, sizeof(object)); -// #endif -// -#if !defined(OVR_CC_HAS_FEATURE) - #if defined(__clang__) // http://clang.llvm.org/docs/LanguageExtensions.html#id2 - #define OVR_CC_HAS_FEATURE(x) __has_feature(x) - #else - #define OVR_CC_HAS_FEATURE(x) 0 - #endif -#endif - - -// ------------------------------------------------------------------------ -// ***** OVR_STATIC_ASSERT -// -// Portable support for C++11 static_assert(). -// Acts as if the following were declared: -// void OVR_STATIC_ASSERT(bool const_expression, const char* msg); -// -// Example usage: -// OVR_STATIC_ASSERT(sizeof(int32_t) == 4, "int32_t expected to be 4 bytes."); - -#if !defined(OVR_STATIC_ASSERT) - #if !(defined(__cplusplus) && (__cplusplus >= 201103L)) /* Other */ && \ - !(defined(__GXX_EXPERIMENTAL_CXX0X__)) /* GCC */ && \ - !(defined(__clang__) && defined(__cplusplus) && OVR_CC_HAS_FEATURE(cxx_static_assert)) /* clang */ && \ - !(defined(_MSC_VER) && (_MSC_VER >= 1600) && defined(__cplusplus)) /* VS2010+ */ - - #if !defined(OVR_SA_UNUSED) - #if defined(OVR_CC_GNU) || defined(OVR_CC_CLANG) - #define OVR_SA_UNUSED __attribute__((unused)) - #else - #define OVR_SA_UNUSED - #endif - #define OVR_SA_PASTE(a,b) a##b - #define OVR_SA_HELP(a,b) OVR_SA_PASTE(a,b) - #endif - - #if defined(__COUNTER__) - #define OVR_STATIC_ASSERT(expression, msg) typedef char OVR_SA_HELP(compileTimeAssert, __COUNTER__) [((expression) != 0) ? 1 : -1] OVR_SA_UNUSED - #else - #define OVR_STATIC_ASSERT(expression, msg) typedef char OVR_SA_HELP(compileTimeAssert, __LINE__) [((expression) != 0) ? 1 : -1] OVR_SA_UNUSED - #endif - - #else - #define OVR_STATIC_ASSERT(expression, msg) static_assert(expression, msg) - #endif -#endif - - -//----------------------------------------------------------------------------------- -// ***** Padding -// -/// Defines explicitly unused space for a struct. -/// When used correcly, usage of this macro should not change the size of the struct. -/// Compile-time and runtime behavior with and without this defined should be identical. -/// -#if !defined(OVR_UNUSED_STRUCT_PAD) - #define OVR_UNUSED_STRUCT_PAD(padName, size) char padName[size]; -#endif - - -//----------------------------------------------------------------------------------- -// ***** Word Size -// -/// Specifies the size of a pointer on the given platform. -/// -#if !defined(OVR_PTR_SIZE) - #if defined(__WORDSIZE) - #define OVR_PTR_SIZE ((__WORDSIZE) / 8) - #elif defined(_WIN64) || defined(__LP64__) || defined(_LP64) || defined(_M_IA64) || defined(__ia64__) || defined(__arch64__) || defined(__64BIT__) || defined(__Ptr_Is_64) - #define OVR_PTR_SIZE 8 - #elif defined(__CC_ARM) && (__sizeof_ptr == 8) - #define OVR_PTR_SIZE 8 - #else - #define OVR_PTR_SIZE 4 - #endif -#endif - - -//----------------------------------------------------------------------------------- -// ***** OVR_ON32 / OVR_ON64 -// -#if OVR_PTR_SIZE == 8 - #define OVR_ON32(x) - #define OVR_ON64(x) x -#else - #define OVR_ON32(x) x - #define OVR_ON64(x) -#endif - - -//----------------------------------------------------------------------------------- -// ***** ovrBool - -typedef char ovrBool; ///< Boolean type -#define ovrFalse 0 ///< ovrBool value of false. -#define ovrTrue 1 ///< ovrBool value of true. - - -//----------------------------------------------------------------------------------- -// ***** Simple Math Structures - -/// A RGBA color with normalized float components. -typedef struct OVR_ALIGNAS(4) ovrColorf_ -{ - float r, g, b, a; -} ovrColorf; - -/// A 2D vector with integer components. -typedef struct OVR_ALIGNAS(4) ovrVector2i_ -{ - int x, y; -} ovrVector2i; - -/// A 2D size with integer components. -typedef struct OVR_ALIGNAS(4) ovrSizei_ -{ - int w, h; -} ovrSizei; - -/// A 2D rectangle with a position and size. -/// All components are integers. -typedef struct OVR_ALIGNAS(4) ovrRecti_ -{ - ovrVector2i Pos; - ovrSizei Size; -} ovrRecti; - -/// A quaternion rotation. -typedef struct OVR_ALIGNAS(4) ovrQuatf_ -{ - float x, y, z, w; -} ovrQuatf; - -/// A 2D vector with float components. -typedef struct OVR_ALIGNAS(4) ovrVector2f_ -{ - float x, y; -} ovrVector2f; - -/// A 3D vector with float components. -typedef struct OVR_ALIGNAS(4) ovrVector3f_ -{ - float x, y, z; -} ovrVector3f; - -/// A 4x4 matrix with float elements. -typedef struct OVR_ALIGNAS(4) ovrMatrix4f_ -{ - float M[4][4]; -} ovrMatrix4f; - - -/// Position and orientation together. -typedef struct OVR_ALIGNAS(4) ovrPosef_ -{ - ovrQuatf Orientation; - ovrVector3f Position; -} ovrPosef; - -/// A full pose (rigid body) configuration with first and second derivatives. -/// -/// Body refers to any object for which ovrPoseStatef is providing data. -/// It can be the HMD, Touch controller, sensor or something else. The context -/// depends on the usage of the struct. -typedef struct OVR_ALIGNAS(8) ovrPoseStatef_ -{ - ovrPosef ThePose; ///< Position and orientation. - ovrVector3f AngularVelocity; ///< Angular velocity in radians per second. - ovrVector3f LinearVelocity; ///< Velocity in meters per second. - ovrVector3f AngularAcceleration; ///< Angular acceleration in radians per second per second. - ovrVector3f LinearAcceleration; ///< Acceleration in meters per second per second. - OVR_UNUSED_STRUCT_PAD(pad0, 4) ///< \internal struct pad. - double TimeInSeconds; ///< Absolute time that this pose refers to. \see ovr_GetTimeInSeconds -} ovrPoseStatef; - -/// Describes the up, down, left, and right angles of the field of view. -/// -/// Field Of View (FOV) tangent of the angle units. -/// \note For a standard 90 degree vertical FOV, we would -/// have: { UpTan = tan(90 degrees / 2), DownTan = tan(90 degrees / 2) }. -typedef struct OVR_ALIGNAS(4) ovrFovPort_ -{ - float UpTan; ///< The tangent of the angle between the viewing vector and the top edge of the field of view. - float DownTan; ///< The tangent of the angle between the viewing vector and the bottom edge of the field of view. - float LeftTan; ///< The tangent of the angle between the viewing vector and the left edge of the field of view. - float RightTan; ///< The tangent of the angle between the viewing vector and the right edge of the field of view. -} ovrFovPort; - - -//----------------------------------------------------------------------------------- -// ***** HMD Types - -/// Enumerates all HMD types that we support. -/// -/// The currently released developer kits are ovrHmd_DK1 and ovrHmd_DK2. The other enumerations are for internal use only. -typedef enum ovrHmdType_ -{ - ovrHmd_None = 0, - ovrHmd_DK1 = 3, - ovrHmd_DKHD = 4, - ovrHmd_DK2 = 6, - ovrHmd_CB = 8, - ovrHmd_Other = 9, - ovrHmd_E3_2015 = 10, - ovrHmd_ES06 = 11, - ovrHmd_ES09 = 12, - ovrHmd_ES11 = 13, - ovrHmd_CV1 = 14, - - ovrHmd_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrHmdType; - - -/// HMD capability bits reported by device. -/// -typedef enum ovrHmdCaps_ -{ - // Read-only flags - ovrHmdCap_DebugDevice = 0x0010, ///< (read only) Specifies that the HMD is a virtual debug device. - - - ovrHmdCap_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrHmdCaps; - - -/// Tracking capability bits reported by the device. -/// Used with ovr_GetTrackingCaps. -typedef enum ovrTrackingCaps_ -{ - ovrTrackingCap_Orientation = 0x0010, ///< Supports orientation tracking (IMU). - ovrTrackingCap_MagYawCorrection = 0x0020, ///< Supports yaw drift correction via a magnetometer or other means. - ovrTrackingCap_Position = 0x0040, ///< Supports positional tracking. - ovrTrackingCap_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrTrackingCaps; - - -/// Specifies which eye is being used for rendering. -/// This type explicitly does not include a third "NoStereo" monoscopic option, as such is -/// not required for an HMD-centered API. -typedef enum ovrEyeType_ -{ - ovrEye_Left = 0, ///< The left eye, from the viewer's perspective. - ovrEye_Right = 1, ///< The right eye, from the viewer's perspective. - ovrEye_Count = 2, ///< \internal Count of enumerated elements. - ovrEye_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrEyeType; - -/// Specifies the coordinate system ovrTrackingState returns tracking poses in. -/// Used with ovr_SetTrackingOriginType() -typedef enum ovrTrackingOrigin_ -{ - /// \brief Tracking system origin reported at eye (HMD) height - /// \details Prefer using this origin when your application requires - /// matching user's current physical head pose to a virtual head pose - /// without any regards to a the height of the floor. Cockpit-based, - /// or 3rd-person experiences are ideal candidates. - /// When used, all poses in ovrTrackingState are reported as an offset - /// transform from the profile calibrated or recentered HMD pose. - /// It is recommended that apps using this origin type call ovr_RecenterTrackingOrigin - /// prior to starting the VR experience, but notify the user before doing so - /// to make sure the user is in a comfortable pose, facing a comfortable - /// direction. - ovrTrackingOrigin_EyeLevel = 0, - /// \brief Tracking system origin reported at floor height - /// \details Prefer using this origin when your application requires the - /// physical floor height to match the virtual floor height, such as - /// standing experiences. - /// When used, all poses in ovrTrackingState are reported as an offset - /// transform from the profile calibrated floor pose. Calling ovr_RecenterTrackingOrigin - /// will recenter the X & Z axes as well as yaw, but the Y-axis (i.e. height) will continue - /// to be reported using the floor height as the origin for all poses. - ovrTrackingOrigin_FloorLevel = 1, - ovrTrackingOrigin_Count = 2, ///< \internal Count of enumerated elements. - ovrTrackingOrigin_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrTrackingOrigin; - -/// Identifies a graphics device in a platform-specific way. -/// For Windows this is a LUID type. -typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrGraphicsLuid_ -{ - // Public definition reserves space for graphics API-specific implementation - char Reserved[8]; -} ovrGraphicsLuid; - - -/// This is a complete descriptor of the HMD. -typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrHmdDesc_ -{ - ovrHmdType Type; ///< The type of HMD. - OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad0, 4)) ///< \internal struct paddding. - char ProductName[64]; ///< UTF8-encoded product identification string (e.g. "Oculus Rift DK1"). - char Manufacturer[64]; ///< UTF8-encoded HMD manufacturer identification string. - short VendorId; ///< HID (USB) vendor identifier of the device. - short ProductId; ///< HID (USB) product identifier of the device. - char SerialNumber[24]; ///< HMD serial number. - short FirmwareMajor; ///< HMD firmware major version. - short FirmwareMinor; ///< HMD firmware minor version. - unsigned int AvailableHmdCaps; ///< Capability bits described by ovrHmdCaps which the HMD currently supports. - unsigned int DefaultHmdCaps; ///< Capability bits described by ovrHmdCaps which are default for the current Hmd. - unsigned int AvailableTrackingCaps; ///< Capability bits described by ovrTrackingCaps which the system currently supports. - unsigned int DefaultTrackingCaps; ///< Capability bits described by ovrTrackingCaps which are default for the current system. - ovrFovPort DefaultEyeFov[ovrEye_Count]; ///< Defines the recommended FOVs for the HMD. - ovrFovPort MaxEyeFov[ovrEye_Count]; ///< Defines the maximum FOVs for the HMD. - ovrSizei Resolution; ///< Resolution of the full HMD screen (both eyes) in pixels. - float DisplayRefreshRate; ///< Nominal refresh rate of the display in cycles per second at the time of HMD creation. - OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad1, 4)) ///< \internal struct paddding. -} ovrHmdDesc; - - -/// Used as an opaque pointer to an OVR session. -typedef struct ovrHmdStruct* ovrSession; - - - -/// Bit flags describing the current status of sensor tracking. -/// The values must be the same as in enum StatusBits -/// -/// \see ovrTrackingState -/// -typedef enum ovrStatusBits_ -{ - ovrStatus_OrientationTracked = 0x0001, ///< Orientation is currently tracked (connected and in use). - ovrStatus_PositionTracked = 0x0002, ///< Position is currently tracked (false if out of range). - ovrStatus_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrStatusBits; - - -/// Specifies the description of a single sensor. -/// -/// \see ovr_GetTrackerDesc -/// -typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrTrackerDesc_ -{ - float FrustumHFovInRadians; ///< Sensor frustum horizontal field-of-view (if present). - float FrustumVFovInRadians; ///< Sensor frustum vertical field-of-view (if present). - float FrustumNearZInMeters; ///< Sensor frustum near Z (if present). - float FrustumFarZInMeters; ///< Sensor frustum far Z (if present). -} ovrTrackerDesc; - - -/// Specifies sensor flags. -/// -/// /see ovrTrackerPose -/// -typedef enum ovrTrackerFlags_ -{ - ovrTracker_Connected = 0x0020, ///< The sensor is present, else the sensor is absent or offline. - ovrTracker_PoseTracked = 0x0004 ///< The sensor has a valid pose, else the pose is unavailable. This will only be set if ovrTracker_Connected is set. -} ovrTrackerFlags; - - -/// Specifies the pose for a single sensor. -/// -typedef struct OVR_ALIGNAS(8) _ovrTrackerPose -{ - unsigned int TrackerFlags; ///< ovrTrackerFlags. - ovrPosef Pose; ///< The sensor's pose. This pose includes sensor tilt (roll and pitch). For a leveled coordinate system use LeveledPose. - ovrPosef LeveledPose; ///< The sensor's leveled pose, aligned with gravity. This value includes position and yaw of the sensor, but not roll and pitch. It can be used as a reference point to render real-world objects in the correct location. - OVR_UNUSED_STRUCT_PAD(pad0, 4) ///< \internal struct pad. -} ovrTrackerPose; - - -/// Tracking state at a given absolute time (describes predicted HMD pose, etc.). -/// Returned by ovr_GetTrackingState. -/// -/// \see ovr_GetTrackingState -/// -typedef struct OVR_ALIGNAS(8) ovrTrackingState_ -{ - /// Predicted head pose (and derivatives) at the requested absolute time. - ovrPoseStatef HeadPose; - - /// HeadPose tracking status described by ovrStatusBits. - unsigned int StatusFlags; - - /// The most recent calculated pose for each hand when hand controller tracking is present. - /// HandPoses[ovrHand_Left] refers to the left hand and HandPoses[ovrHand_Right] to the right hand. - /// These values can be combined with ovrInputState for complete hand controller information. - ovrPoseStatef HandPoses[2]; - - /// HandPoses status flags described by ovrStatusBits. - /// Only ovrStatus_OrientationTracked and ovrStatus_PositionTracked are reported. - unsigned int HandStatusFlags[2]; - - /// The pose of the origin captured during calibration. - /// Like all other poses here, this is expressed in the space set by ovr_RecenterTrackingOrigin, - /// and so will change every time that is called. This pose can be used to calculate - /// where the calibrated origin lands in the new recentered space. - /// If an application never calls ovr_RecenterTrackingOrigin, expect this value to be the identity - /// pose and as such will point respective origin based on ovrTrackingOrigin requested when - /// calling ovr_GetTrackingState. - ovrPosef CalibratedOrigin; - -} ovrTrackingState; - - -/// Rendering information for each eye. Computed by ovr_GetRenderDesc() based on the -/// specified FOV. Note that the rendering viewport is not included -/// here as it can be specified separately and modified per frame by -/// passing different Viewport values in the layer structure. -/// -/// \see ovr_GetRenderDesc -/// -typedef struct OVR_ALIGNAS(4) ovrEyeRenderDesc_ -{ - ovrEyeType Eye; ///< The eye index to which this instance corresponds. - ovrFovPort Fov; ///< The field of view. - ovrRecti DistortedViewport; ///< Distortion viewport. - ovrVector2f PixelsPerTanAngleAtCenter; ///< How many display pixels will fit in tan(angle) = 1. - ovrVector3f HmdToEyeOffset; ///< Translation of each eye, in meters. -} ovrEyeRenderDesc; - - -/// Projection information for ovrLayerEyeFovDepth. -/// -/// Use the utility function ovrTimewarpProjectionDesc_FromProjection to -/// generate this structure from the application's projection matrix. -/// -/// \see ovrLayerEyeFovDepth, ovrTimewarpProjectionDesc_FromProjection -/// -typedef struct OVR_ALIGNAS(4) ovrTimewarpProjectionDesc_ -{ - float Projection22; ///< Projection matrix element [2][2]. - float Projection23; ///< Projection matrix element [2][3]. - float Projection32; ///< Projection matrix element [3][2]. -} ovrTimewarpProjectionDesc; - - -/// Contains the data necessary to properly calculate position info for various layer types. -/// - HmdToEyeOffset is the same value pair provided in ovrEyeRenderDesc. -/// - HmdSpaceToWorldScaleInMeters is used to scale player motion into in-application units. -/// In other words, it is how big an in-application unit is in the player's physical meters. -/// For example, if the application uses inches as its units then HmdSpaceToWorldScaleInMeters would be 0.0254. -/// Note that if you are scaling the player in size, this must also scale. So if your application -/// units are inches, but you're shrinking the player to half their normal size, then -/// HmdSpaceToWorldScaleInMeters would be 0.0254*2.0. -/// -/// \see ovrEyeRenderDesc, ovr_SubmitFrame -/// -typedef struct OVR_ALIGNAS(4) ovrViewScaleDesc_ -{ - ovrVector3f HmdToEyeOffset[ovrEye_Count]; ///< Translation of each eye. - float HmdSpaceToWorldScaleInMeters; ///< Ratio of viewer units to meter units. -} ovrViewScaleDesc; - - -//----------------------------------------------------------------------------------- -// ***** Platform-independent Rendering Configuration - -/// The type of texture resource. -/// -/// \see ovrTextureSwapChainDesc -/// -typedef enum ovrTextureType_ -{ - ovrTexture_2D, ///< 2D textures. - ovrTexture_2D_External, ///< External 2D texture. Not used on PC - ovrTexture_Cube, ///< Cube maps. Not currently supported on PC. - ovrTexture_Count, - ovrTexture_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrTextureType; - -/// The bindings required for texture swap chain. -/// -/// All texture swap chains are automatically bindable as shader -/// input resources since the Oculus runtime needs this to read them. -/// -/// \see ovrTextureSwapChainDesc -/// -typedef enum ovrTextureBindFlags_ -{ - ovrTextureBind_None, - ovrTextureBind_DX_RenderTarget = 0x0001, ///< The application can write into the chain with pixel shader - ovrTextureBind_DX_UnorderedAccess = 0x0002, ///< The application can write to the chain with compute shader - ovrTextureBind_DX_DepthStencil = 0x0004, ///< The chain buffers can be bound as depth and/or stencil buffers - - ovrTextureBind_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrTextureBindFlags; - -/// The format of a texture. -/// -/// \see ovrTextureSwapChainDesc -/// -typedef enum ovrTextureFormat_ -{ - OVR_FORMAT_UNKNOWN, - OVR_FORMAT_B5G6R5_UNORM, ///< Not currently supported on PC. Would require a DirectX 11.1 device. - OVR_FORMAT_B5G5R5A1_UNORM, ///< Not currently supported on PC. Would require a DirectX 11.1 device. - OVR_FORMAT_B4G4R4A4_UNORM, ///< Not currently supported on PC. Would require a DirectX 11.1 device. - OVR_FORMAT_R8G8B8A8_UNORM, - OVR_FORMAT_R8G8B8A8_UNORM_SRGB, - OVR_FORMAT_B8G8R8A8_UNORM, - OVR_FORMAT_B8G8R8A8_UNORM_SRGB, ///< Not supported for OpenGL applications - OVR_FORMAT_B8G8R8X8_UNORM, ///< Not supported for OpenGL applications - OVR_FORMAT_B8G8R8X8_UNORM_SRGB, ///< Not supported for OpenGL applications - OVR_FORMAT_R16G16B16A16_FLOAT, - OVR_FORMAT_D16_UNORM, - OVR_FORMAT_D24_UNORM_S8_UINT, - OVR_FORMAT_D32_FLOAT, - OVR_FORMAT_D32_FLOAT_S8X24_UINT, - - // Added in 1.5 compressed formats can be used for static layers - OVR_FORMAT_BC1_UNORM, - OVR_FORMAT_BC1_UNORM_SRGB, - OVR_FORMAT_BC2_UNORM, - OVR_FORMAT_BC2_UNORM_SRGB, - OVR_FORMAT_BC3_UNORM, - OVR_FORMAT_BC3_UNORM_SRGB, - OVR_FORMAT_BC6H_UF16, - OVR_FORMAT_BC6H_SF16, - OVR_FORMAT_BC7_UNORM, - OVR_FORMAT_BC7_UNORM_SRGB, - - OVR_FORMAT_ENUMSIZE = 0x7fffffff ///< \internal Force type int32_t. -} ovrTextureFormat; - -/// Misc flags overriding particular -/// behaviors of a texture swap chain -/// -/// \see ovrTextureSwapChainDesc -/// -typedef enum ovrTextureMiscFlags_ -{ - ovrTextureMisc_None, - - /// DX only: The underlying texture is created with a TYPELESS equivalent of the - /// format specified in the texture desc. The SDK will still access the - /// texture using the format specified in the texture desc, but the app can - /// create views with different formats if this is specified. - ovrTextureMisc_DX_Typeless = 0x0001, - - /// DX only: Allow generation of the mip chain on the GPU via the GenerateMips - /// call. This flag requires that RenderTarget binding also be specified. - ovrTextureMisc_AllowGenerateMips = 0x0002, - - /// Texture swap chain contains protected content, and requires - /// HDCP connection in order to display to HMD. Also prevents - /// mirroring or other redirection of any frame containing this contents - ovrTextureMisc_ProtectedContent = 0x0004, - - ovrTextureMisc_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrTextureFlags; - -/// Description used to create a texture swap chain. -/// -/// \see ovr_CreateTextureSwapChainDX -/// \see ovr_CreateTextureSwapChainGL -/// -typedef struct ovrTextureSwapChainDesc_ -{ - ovrTextureType Type; - ovrTextureFormat Format; - int ArraySize; ///< Only supported with ovrTexture_2D. Not supported on PC at this time. - int Width; - int Height; - int MipLevels; - int SampleCount; ///< Current only supported on depth textures - ovrBool StaticImage; ///< Not buffered in a chain. For images that don't change - unsigned int MiscFlags; ///< ovrTextureFlags - unsigned int BindFlags; ///< ovrTextureBindFlags. Not used for GL. -} ovrTextureSwapChainDesc; - -/// Description used to create a mirror texture. -/// -/// \see ovr_CreateMirrorTextureDX -/// \see ovr_CreateMirrorTextureGL -/// -typedef struct ovrMirrorTextureDesc_ -{ - ovrTextureFormat Format; - int Width; - int Height; - unsigned int MiscFlags; ///< ovrTextureFlags -} ovrMirrorTextureDesc; - -typedef struct ovrTextureSwapChainData* ovrTextureSwapChain; -typedef struct ovrMirrorTextureData* ovrMirrorTexture; - -//----------------------------------------------------------------------------------- - -/// Describes button input types. -/// Button inputs are combined; that is they will be reported as pressed if they are -/// pressed on either one of the two devices. -/// The ovrButton_Up/Down/Left/Right map to both XBox D-Pad and directional buttons. -/// The ovrButton_Enter and ovrButton_Return map to Start and Back controller buttons, respectively. -typedef enum ovrButton_ -{ - ovrButton_A = 0x00000001, - ovrButton_B = 0x00000002, - ovrButton_RThumb = 0x00000004, - ovrButton_RShoulder = 0x00000008, - - ovrButton_X = 0x00000100, - ovrButton_Y = 0x00000200, - ovrButton_LThumb = 0x00000400, - ovrButton_LShoulder = 0x00000800, - - // Navigation through DPad. - ovrButton_Up = 0x00010000, - ovrButton_Down = 0x00020000, - ovrButton_Left = 0x00040000, - ovrButton_Right = 0x00080000, - ovrButton_Enter = 0x00100000, // Start on XBox controller. - ovrButton_Back = 0x00200000, // Back on Xbox controller. - ovrButton_VolUp = 0x00400000, // only supported by Remote. - ovrButton_VolDown = 0x00800000, // only supported by Remote. - ovrButton_Home = 0x01000000, - ovrButton_Private = ovrButton_VolUp | ovrButton_VolDown | ovrButton_Home, - - // Bit mask of all buttons on the right Touch controller - ovrButton_RMask = ovrButton_A | ovrButton_B | ovrButton_RThumb | ovrButton_RShoulder, - - // Bit mask of all buttons on the left Touch controller - ovrButton_LMask = ovrButton_X | ovrButton_Y | ovrButton_LThumb | ovrButton_LShoulder | - ovrButton_Enter, - - - ovrButton_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrButton; - -/// Describes touch input types. -/// These values map to capacitive touch values reported ovrInputState::Touch. -/// Some of these values are mapped to button bits for consistency. -typedef enum ovrTouch_ -{ - ovrTouch_A = ovrButton_A, - ovrTouch_B = ovrButton_B, - ovrTouch_RThumb = ovrButton_RThumb, - ovrTouch_RThumbRest = 0x00000008, - ovrTouch_RIndexTrigger = 0x00000010, - - // Bit mask of all the button touches on the right controller - ovrTouch_RButtonMask = ovrTouch_A | ovrTouch_B | ovrTouch_RThumb | ovrTouch_RThumbRest | ovrTouch_RIndexTrigger, - - ovrTouch_X = ovrButton_X, - ovrTouch_Y = ovrButton_Y, - ovrTouch_LThumb = ovrButton_LThumb, - ovrTouch_LThumbRest = 0x00000800, - ovrTouch_LIndexTrigger = 0x00001000, - - // Bit mask of all the button touches on the left controller - ovrTouch_LButtonMask = ovrTouch_X | ovrTouch_Y | ovrTouch_LThumb | ovrTouch_LThumbRest | ovrTouch_LIndexTrigger, - - // Finger pose state - // Derived internally based on distance, proximity to sensors and filtering. - ovrTouch_RIndexPointing = 0x00000020, - ovrTouch_RThumbUp = 0x00000040, - - // Bit mask of all right controller poses - ovrTouch_RPoseMask = ovrTouch_RIndexPointing | ovrTouch_RThumbUp, - - ovrTouch_LIndexPointing = 0x00002000, - ovrTouch_LThumbUp = 0x00004000, - - // Bit mask of all left controller poses - ovrTouch_LPoseMask = ovrTouch_LIndexPointing | ovrTouch_LThumbUp, - - ovrTouch_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrTouch; - -/// Describes the Touch Haptics engine. -/// Currently, those values will NOT change during a session. -typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrTouchHapticsDesc_ -{ - // Haptics engine frequency/sample-rate, sample time in seconds equals 1.0/sampleRateHz - int SampleRateHz; - // Size of each Haptics sample, sample value range is [0, 2^(Bytes*8)-1] - int SampleSizeInBytes; - - // Queue size that would guarantee Haptics engine would not starve for data - // Make sure size doesn't drop below it for best results - int QueueMinSizeToAvoidStarvation; - - // Minimum, Maximum and Optimal number of samples that can be sent to Haptics through ovr_SubmitControllerVibration - int SubmitMinSamples; - int SubmitMaxSamples; - int SubmitOptimalSamples; -} ovrTouchHapticsDesc; - -/// Specifies which controller is connected; multiple can be connected at once. -typedef enum ovrControllerType_ -{ - ovrControllerType_None = 0x00, - ovrControllerType_LTouch = 0x01, - ovrControllerType_RTouch = 0x02, - ovrControllerType_Touch = 0x03, - ovrControllerType_Remote = 0x04, - ovrControllerType_XBox = 0x10, - - ovrControllerType_Active = 0xff, ///< Operate on or query whichever controller is active. - - ovrControllerType_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrControllerType; - -/// Haptics buffer submit mode -typedef enum ovrHapticsBufferSubmitMode_ -{ - // Enqueue buffer for later playback - ovrHapticsBufferSubmit_Enqueue -} ovrHapticsBufferSubmitMode; - -/// Haptics buffer descriptor, contains amplitude samples used for Touch vibration -typedef struct ovrHapticsBuffer_ -{ - const void* Samples; - int SamplesCount; - ovrHapticsBufferSubmitMode SubmitMode; -} ovrHapticsBuffer; - -/// State of the Haptics playback for Touch vibration -typedef struct ovrHapticsPlaybackState_ -{ - // Remaining space available to queue more samples - int RemainingQueueSpace; - - // Number of samples currently queued - int SamplesQueued; -} ovrHapticsPlaybackState; - -/// Position tracked devices -typedef enum ovrTrackedDeviceType_ -{ - ovrTrackedDevice_HMD = 0x0001, - ovrTrackedDevice_LTouch = 0x0002, - ovrTrackedDevice_RTouch = 0x0004, - ovrTrackedDevice_Touch = 0x0006, - ovrTrackedDevice_All = 0xFFFF, -} ovrTrackedDeviceType; - -/// Provides names for the left and right hand array indexes. -/// -/// \see ovrInputState, ovrTrackingState -/// -typedef enum ovrHandType_ -{ - ovrHand_Left = 0, - ovrHand_Right = 1, - ovrHand_Count = 2, - ovrHand_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrHandType; - - - -/// ovrInputState describes the complete controller input state, including Oculus Touch, -/// and XBox gamepad. If multiple inputs are connected and used at the same time, -/// their inputs are combined. -typedef struct ovrInputState_ -{ - /// System type when the controller state was last updated. - double TimeInSeconds; - - /// Values for buttons described by ovrButton. - unsigned int Buttons; - - /// Touch values for buttons and sensors as described by ovrTouch. - unsigned int Touches; - - /// Left and right finger trigger values (ovrHand_Left and ovrHand_Right), in the range 0.0 to 1.0f. - /// Returns 0 if the value would otherwise be less than 0.1176, for ovrControllerType_XBox - float IndexTrigger[ovrHand_Count]; - - /// Left and right hand trigger values (ovrHand_Left and ovrHand_Right), in the range 0.0 to 1.0f. - float HandTrigger[ovrHand_Count]; - - /// Horizontal and vertical thumbstick axis values (ovrHand_Left and ovrHand_Right), in the range -1.0f to 1.0f. - /// Returns a deadzone (value 0) per each axis if the value on that axis would otherwise have been between -.2746 to +.2746, for ovrControllerType_XBox - ovrVector2f Thumbstick[ovrHand_Count]; - - /// The type of the controller this state is for. - ovrControllerType ControllerType; - - /// Left and right finger trigger values (ovrHand_Left and ovrHand_Right), in the range 0.0 to 1.0f. - /// Does not apply a deadzone - /// Added in 1.7 - float IndexTriggerNoDeadzone[ovrHand_Count]; - - /// Left and right hand trigger values (ovrHand_Left and ovrHand_Right), in the range 0.0 to 1.0f. - /// Does not apply a deadzone - /// Added in 1.7 - float HandTriggerNoDeadzone[ovrHand_Count]; - - /// Horizontal and vertical thumbstick axis values (ovrHand_Left and ovrHand_Right), in the range -1.0f to 1.0f - /// Does not apply a deadzone - /// Added in 1.7 - ovrVector2f ThumbstickNoDeadzone[ovrHand_Count]; -} ovrInputState; - - - -//----------------------------------------------------------------------------------- -// ***** Initialize structures - -/// Initialization flags. -/// -/// \see ovrInitParams, ovr_Initialize -/// -typedef enum ovrInitFlags_ -{ - /// When a debug library is requested, a slower debugging version of the library will - /// run which can be used to help solve problems in the library and debug application code. - ovrInit_Debug = 0x00000001, - - /// When a version is requested, the LibOVR runtime respects the RequestedMinorVersion - /// field and verifies that the RequestedMinorVersion is supported. - ovrInit_RequestVersion = 0x00000004, - - // These bits are writable by user code. - ovrinit_WritableBits = 0x00ffffff, - - ovrInit_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrInitFlags; - - -/// Logging levels -/// -/// \see ovrInitParams, ovrLogCallback -/// -typedef enum ovrLogLevel_ -{ - ovrLogLevel_Debug = 0, ///< Debug-level log event. - ovrLogLevel_Info = 1, ///< Info-level log event. - ovrLogLevel_Error = 2, ///< Error-level log event. - - ovrLogLevel_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrLogLevel; - - -/// Signature of the logging callback function pointer type. -/// -/// \param[in] userData is an arbitrary value specified by the user of ovrInitParams. -/// \param[in] level is one of the ovrLogLevel constants. -/// \param[in] message is a UTF8-encoded null-terminated string. -/// \see ovrInitParams, ovrLogLevel, ovr_Initialize -/// -typedef void (OVR_CDECL* ovrLogCallback)(uintptr_t userData, int level, const char* message); - - -/// Parameters for ovr_Initialize. -/// -/// \see ovr_Initialize -/// -typedef struct OVR_ALIGNAS(8) ovrInitParams_ -{ - /// Flags from ovrInitFlags to override default behavior. - /// Use 0 for the defaults. - uint32_t Flags; - - /// Requests a specific minimum minor version of the LibOVR runtime. - /// Flags must include ovrInit_RequestVersion or this will be ignored - /// and OVR_MINOR_VERSION will be used. - uint32_t RequestedMinorVersion; - - /// User-supplied log callback function, which may be called at any time - /// asynchronously from multiple threads until ovr_Shutdown completes. - /// Use NULL to specify no log callback. - ovrLogCallback LogCallback; - - /// User-supplied data which is passed as-is to LogCallback. Typically this - /// is used to store an application-specific pointer which is read in the - /// callback function. - uintptr_t UserData; - - /// Relative number of milliseconds to wait for a connection to the server - /// before failing. Use 0 for the default timeout. - uint32_t ConnectionTimeoutMS; - - OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad0, 4)) ///< \internal - -} ovrInitParams; - - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(OVR_EXPORTING_CAPI) - -// ----------------------------------------------------------------------------------- -// ***** API Interfaces - -/// Initializes LibOVR -/// -/// Initialize LibOVR for application usage. This includes finding and loading the LibOVRRT -/// shared library. No LibOVR API functions, other than ovr_GetLastErrorInfo and ovr_Detect, can -/// be called unless ovr_Initialize succeeds. A successful call to ovr_Initialize must be eventually -/// followed by a call to ovr_Shutdown. ovr_Initialize calls are idempotent. -/// Calling ovr_Initialize twice does not require two matching calls to ovr_Shutdown. -/// If already initialized, the return value is ovr_Success. -/// -/// LibOVRRT shared library search order: -/// -# Current working directory (often the same as the application directory). -/// -# Module directory (usually the same as the application directory, -/// but not if the module is a separate shared library). -/// -# Application directory -/// -# Development directory (only if OVR_ENABLE_DEVELOPER_SEARCH is enabled, -/// which is off by default). -/// -# Standard OS shared library search location(s) (OS-specific). -/// -/// \param params Specifies custom initialization options. May be NULL to indicate default options. -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. Example failed results include: -/// - ovrError_Initialize: Generic initialization error. -/// - ovrError_LibLoad: Couldn't load LibOVRRT. -/// - ovrError_LibVersion: LibOVRRT version incompatibility. -/// - ovrError_ServiceConnection: Couldn't connect to the OVR Service. -/// - ovrError_ServiceVersion: OVR Service version incompatibility. -/// - ovrError_IncompatibleOS: The operating system version is incompatible. -/// - ovrError_DisplayInit: Unable to initialize the HMD display. -/// - ovrError_ServerStart: Unable to start the server. Is it already running? -/// - ovrError_Reinitialization: Attempted to re-initialize with a different version. -/// -/// Example code -/// \code{.cpp} -/// ovrResult result = ovr_Initialize(NULL); -/// if(OVR_FAILURE(result)) { -/// ovrErrorInfo errorInfo; -/// ovr_GetLastErrorInfo(&errorInfo); -/// DebugLog("ovr_Initialize failed: %s", errorInfo.ErrorString); -/// return false; -/// } -/// [...] -/// \endcode -/// -/// \see ovr_Shutdown -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_Initialize(const ovrInitParams* params); - - -/// Shuts down LibOVR -/// -/// A successful call to ovr_Initialize must be eventually matched by a call to ovr_Shutdown. -/// After calling ovr_Shutdown, no LibOVR functions can be called except ovr_GetLastErrorInfo -/// or another ovr_Initialize. ovr_Shutdown invalidates all pointers, references, and created objects -/// previously returned by LibOVR functions. The LibOVRRT shared library can be unloaded by -/// ovr_Shutdown. -/// -/// \see ovr_Initialize -/// -OVR_PUBLIC_FUNCTION(void) ovr_Shutdown(); - -/// Returns information about the most recent failed return value by the -/// current thread for this library. -/// -/// This function itself can never generate an error. -/// The last error is never cleared by LibOVR, but will be overwritten by new errors. -/// Do not use this call to determine if there was an error in the last API -/// call as successful API calls don't clear the last ovrErrorInfo. -/// To avoid any inconsistency, ovr_GetLastErrorInfo should be called immediately -/// after an API function that returned a failed ovrResult, with no other API -/// functions called in the interim. -/// -/// \param[out] errorInfo The last ovrErrorInfo for the current thread. -/// -/// \see ovrErrorInfo -/// -OVR_PUBLIC_FUNCTION(void) ovr_GetLastErrorInfo(ovrErrorInfo* errorInfo); - - -/// Returns the version string representing the LibOVRRT version. -/// -/// The returned string pointer is valid until the next call to ovr_Shutdown. -/// -/// Note that the returned version string doesn't necessarily match the current -/// OVR_MAJOR_VERSION, etc., as the returned string refers to the LibOVRRT shared -/// library version and not the locally compiled interface version. -/// -/// The format of this string is subject to change in future versions and its contents -/// should not be interpreted. -/// -/// \return Returns a UTF8-encoded null-terminated version string. -/// -OVR_PUBLIC_FUNCTION(const char*) ovr_GetVersionString(); - - -/// Writes a message string to the LibOVR tracing mechanism (if enabled). -/// -/// This message will be passed back to the application via the ovrLogCallback if -/// it was registered. -/// -/// \param[in] level One of the ovrLogLevel constants. -/// \param[in] message A UTF8-encoded null-terminated string. -/// \return returns the strlen of the message or a negative value if the message is too large. -/// -/// \see ovrLogLevel, ovrLogCallback -/// -OVR_PUBLIC_FUNCTION(int) ovr_TraceMessage(int level, const char* message); - - -/// Identify client application info. -/// -/// The string is one or more newline-delimited lines of optional info -/// indicating engine name, engine version, engine plugin name, engine plugin -/// version, engine editor. The order of the lines is not relevant. Individual -/// lines are optional. A newline is not necessary at the end of the last line. -/// Call after ovr_Initialize and before the first call to ovr_Create. -/// Each value is limited to 20 characters. Key names such as 'EngineName:' -/// 'EngineVersion:' do not count towards this limit. -/// -/// \param[in] identity Specifies one or more newline-delimited lines of optional info: -/// EngineName: %s\n -/// EngineVersion: %s\n -/// EnginePluginName: %s\n -/// EnginePluginVersion: %s\n -/// EngineEditor: ('true' or 'false')\n -/// -/// Example code -/// \code{.cpp} -/// ovr_IdentifyClient("EngineName: Unity\n" -/// "EngineVersion: 5.3.3\n" -/// "EnginePluginName: OVRPlugin\n" -/// "EnginePluginVersion: 1.2.0\n" -/// "EngineEditor: true"); -/// \endcode -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_IdentifyClient(const char* identity); - - -//------------------------------------------------------------------------------------- -/// @name HMD Management -/// -/// Handles the enumeration, creation, destruction, and properties of an HMD (head-mounted display). -///@{ - - -/// Returns information about the current HMD. -/// -/// ovr_Initialize must have first been called in order for this to succeed, otherwise ovrHmdDesc::Type -/// will be reported as ovrHmd_None. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create, else NULL in which -/// case this function detects whether an HMD is present and returns its info if so. -/// -/// \return Returns an ovrHmdDesc. If the hmd is NULL and ovrHmdDesc::Type is ovrHmd_None then -/// no HMD is present. -/// -OVR_PUBLIC_FUNCTION(ovrHmdDesc) ovr_GetHmdDesc(ovrSession session); - - -/// Returns the number of sensors. -/// -/// The number of sensors may change at any time, so this function should be called before use -/// as opposed to once on startup. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// -/// \return Returns unsigned int count. -/// -OVR_PUBLIC_FUNCTION(unsigned int) ovr_GetTrackerCount(ovrSession session); - - -/// Returns a given sensor description. -/// -/// It's possible that sensor desc [0] may indicate a unconnnected or non-pose tracked sensor, but -/// sensor desc [1] may be connected. -/// -/// ovr_Initialize must have first been called in order for this to succeed, otherwise the returned -/// trackerDescArray will be zero-initialized. The data returned by this function can change at runtime. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// -/// \param[in] trackerDescIndex Specifies a sensor index. The valid indexes are in the range of 0 to -/// the sensor count returned by ovr_GetTrackerCount. -/// -/// \return Returns ovrTrackerDesc. An empty ovrTrackerDesc will be returned if trackerDescIndex is out of range. -/// -/// \see ovrTrackerDesc, ovr_GetTrackerCount -/// -OVR_PUBLIC_FUNCTION(ovrTrackerDesc) ovr_GetTrackerDesc(ovrSession session, unsigned int trackerDescIndex); - - -/// Creates a handle to a VR session. -/// -/// Upon success the returned ovrSession must be eventually freed with ovr_Destroy when it is no longer needed. -/// A second call to ovr_Create will result in an error return value if the previous session has not been destroyed. -/// -/// \param[out] pSession Provides a pointer to an ovrSession which will be written to upon success. -/// \param[out] luid Provides a system specific graphics adapter identifier that locates which -/// graphics adapter has the HMD attached. This must match the adapter used by the application -/// or no rendering output will be possible. This is important for stability on multi-adapter systems. An -/// application that simply chooses the default adapter will not run reliably on multi-adapter systems. -/// \return Returns an ovrResult indicating success or failure. Upon failure -/// the returned ovrSession will be NULL. -/// -/// Example code -/// \code{.cpp} -/// ovrSession session; -/// ovrGraphicsLuid luid; -/// ovrResult result = ovr_Create(&session, &luid); -/// if(OVR_FAILURE(result)) -/// ... -/// \endcode -/// -/// \see ovr_Destroy -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_Create(ovrSession* pSession, ovrGraphicsLuid* pLuid); - - -/// Destroys the session. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \see ovr_Create -/// -OVR_PUBLIC_FUNCTION(void) ovr_Destroy(ovrSession session); - -#endif // !defined(OVR_EXPORTING_CAPI) - -/// Specifies status information for the current session. -/// -/// \see ovr_GetSessionStatus -/// -typedef struct ovrSessionStatus_ -{ - ovrBool IsVisible; ///< True if the process has VR focus and thus is visible in the HMD. - ovrBool HmdPresent; ///< True if an HMD is present. - ovrBool HmdMounted; ///< True if the HMD is on the user's head. - ovrBool DisplayLost; ///< True if the session is in a display-lost state. See ovr_SubmitFrame. - ovrBool ShouldQuit; ///< True if the application should initiate shutdown. - ovrBool ShouldRecenter; ///< True if UX has requested re-centering. Must call ovr_ClearShouldRecenterFlag or ovr_RecenterTrackingOrigin. -}ovrSessionStatus; - -#if !defined(OVR_EXPORTING_CAPI) - -/// Returns status information for the application. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[out] sessionStatus Provides an ovrSessionStatus that is filled in. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of -/// failure, use ovr_GetLastErrorInfo to get more information. -// Return values include but aren't limited to: -/// - ovrSuccess: Completed successfully. -/// - ovrError_ServiceConnection: The service connection was lost and the application -// must destroy the session. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetSessionStatus(ovrSession session, ovrSessionStatus* sessionStatus); - - -//@} - - - -//------------------------------------------------------------------------------------- -/// @name Tracking -/// -/// Tracking functions handle the position, orientation, and movement of the HMD in space. -/// -/// All tracking interface functions are thread-safe, allowing tracking state to be sampled -/// from different threads. -/// -///@{ - - - -/// Sets the tracking origin type -/// -/// When the tracking origin is changed, all of the calls that either provide -/// or accept ovrPosef will use the new tracking origin provided. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] origin Specifies an ovrTrackingOrigin to be used for all ovrPosef -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -/// \see ovrTrackingOrigin, ovr_GetTrackingOriginType -OVR_PUBLIC_FUNCTION(ovrResult) ovr_SetTrackingOriginType(ovrSession session, ovrTrackingOrigin origin); - - -/// Gets the tracking origin state -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// -/// \return Returns the ovrTrackingOrigin that was either set by default, or previous set by the application. -/// -/// \see ovrTrackingOrigin, ovr_SetTrackingOriginType -OVR_PUBLIC_FUNCTION(ovrTrackingOrigin) ovr_GetTrackingOriginType(ovrSession session); - - -/// Re-centers the sensor position and orientation. -/// -/// This resets the (x,y,z) positional components and the yaw orientation component. -/// The Roll and pitch orientation components are always determined by gravity and cannot -/// be redefined. All future tracking will report values relative to this new reference position. -/// If you are using ovrTrackerPoses then you will need to call ovr_GetTrackerPose after -/// this, because the sensor position(s) will change as a result of this. -/// -/// The headset cannot be facing vertically upward or downward but rather must be roughly -/// level otherwise this function will fail with ovrError_InvalidHeadsetOrientation. -/// -/// For more info, see the notes on each ovrTrackingOrigin enumeration to understand how -/// recenter will vary slightly in its behavior based on the current ovrTrackingOrigin setting. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. Return values include but aren't limited to: -/// - ovrSuccess: Completed successfully. -/// - ovrError_InvalidHeadsetOrientation: The headset was facing an invalid direction when -/// attempting recentering, such as facing vertically. -/// -/// \see ovrTrackingOrigin, ovr_GetTrackerPose -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_RecenterTrackingOrigin(ovrSession session); - - -/// Clears the ShouldRecenter status bit in ovrSessionStatus. -/// -/// Clears the ShouldRecenter status bit in ovrSessionStatus, allowing further recenter -/// requests to be detected. Since this is automatically done by ovr_RecenterTrackingOrigin, -/// this is only needs to be called when application is doing its own re-centering. -OVR_PUBLIC_FUNCTION(void) ovr_ClearShouldRecenterFlag(ovrSession session); - - -/// Returns tracking state reading based on the specified absolute system time. -/// -/// Pass an absTime value of 0.0 to request the most recent sensor reading. In this case -/// both PredictedPose and SamplePose will have the same value. -/// -/// This may also be used for more refined timing of front buffer rendering logic, and so on. -/// This may be called by multiple threads. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] absTime Specifies the absolute future time to predict the return -/// ovrTrackingState value. Use 0 to request the most recent tracking state. -/// \param[in] latencyMarker Specifies that this call is the point in time where -/// the "App-to-Mid-Photon" latency timer starts from. If a given ovrLayer -/// provides "SensorSampleTime", that will override the value stored here. -/// \return Returns the ovrTrackingState that is predicted for the given absTime. -/// -/// \see ovrTrackingState, ovr_GetEyePoses, ovr_GetTimeInSeconds -/// -OVR_PUBLIC_FUNCTION(ovrTrackingState) ovr_GetTrackingState(ovrSession session, double absTime, ovrBool latencyMarker); - - - -/// Returns the ovrTrackerPose for the given sensor. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] trackerPoseIndex Index of the sensor being requested. -/// -/// \return Returns the requested ovrTrackerPose. An empty ovrTrackerPose will be returned if trackerPoseIndex is out of range. -/// -/// \see ovr_GetTrackerCount -/// -OVR_PUBLIC_FUNCTION(ovrTrackerPose) ovr_GetTrackerPose(ovrSession session, unsigned int trackerPoseIndex); - - - -/// Returns the most recent input state for controllers, without positional tracking info. -/// -/// \param[out] inputState Input state that will be filled in. -/// \param[in] ovrControllerType Specifies which controller the input will be returned for. -/// \return Returns ovrSuccess if the new state was successfully obtained. -/// -/// \see ovrControllerType -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetInputState(ovrSession session, ovrControllerType controllerType, ovrInputState* inputState); - - -/// Returns controller types connected to the system OR'ed together. -/// -/// \return A bitmask of ovrControllerTypes connected to the system. -/// -/// \see ovrControllerType -/// -OVR_PUBLIC_FUNCTION(unsigned int) ovr_GetConnectedControllerTypes(ovrSession session); - -/// Gets information about Haptics engine for the specified Touch controller. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] controllerType The controller to retrieve the information from. -/// -/// \return Returns an ovrTouchHapticsDesc. -/// -OVR_PUBLIC_FUNCTION(ovrTouchHapticsDesc) ovr_GetTouchHapticsDesc(ovrSession session, ovrControllerType controllerType); - -/// Sets constant vibration (with specified frequency and amplitude) to a controller. -/// Note: ovr_SetControllerVibration cannot be used interchangeably with ovr_SubmitControllerVibration. -/// -/// This method should be called periodically, vibration lasts for a maximum of 2.5 seconds. -/// It's recommended to call this method once a second, calls will be rejected if called too frequently (over 30hz). -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] controllerType The controller to set the vibration to. -/// \param[in] frequency Vibration frequency. Supported values are: 0.0 (disabled), 0.5 and 1.0. Non valid values will be clamped. -/// \param[in] amplitude Vibration amplitude in the [0.0, 1.0] range. -/// \return Returns ovrSuccess upon success. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_SetControllerVibration(ovrSession session, ovrControllerType controllerType, float frequency, float amplitude); - -/// Submits a Haptics buffer (used for vibration) to Touch (only) controllers. -/// Note: ovr_SubmitControllerVibration cannot be used interchangeably with ovr_SetControllerVibration. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] controllerType Controller where the Haptics buffer will be played. -/// \param[in] buffer Haptics buffer containing amplitude samples to be played. -/// \return Returns ovrSuccess upon success. -/// \see ovrHapticsBuffer -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_SubmitControllerVibration(ovrSession session, ovrControllerType controllerType, const ovrHapticsBuffer* buffer); - -/// Gets the Haptics engine playback state of a specific Touch controller. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] controllerType Controller where the Haptics buffer wil be played. -/// \param[in] outState State of the haptics engine. -/// \return Returns ovrSuccess upon success. -/// \see ovrHapticsPlaybackState -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetControllerVibrationState(ovrSession session, ovrControllerType controllerType, ovrHapticsPlaybackState* outState); - - -#endif // !defined(OVR_EXPORTING_CAPI) - -//------------------------------------------------------------------------------------- -// @name Layers -// -///@{ - - -/// Specifies the maximum number of layers supported by ovr_SubmitFrame. -/// -/// /see ovr_SubmitFrame -/// -enum { - ovrMaxLayerCount = 16 -}; - -/// Describes layer types that can be passed to ovr_SubmitFrame. -/// Each layer type has an associated struct, such as ovrLayerEyeFov. -/// -/// \see ovrLayerHeader -/// -typedef enum ovrLayerType_ -{ - ovrLayerType_Disabled = 0, ///< Layer is disabled. - ovrLayerType_EyeFov = 1, ///< Described by ovrLayerEyeFov. - ovrLayerType_Quad = 3, ///< Described by ovrLayerQuad. Previously called ovrLayerType_QuadInWorld. - /// enum 4 used to be ovrLayerType_QuadHeadLocked. Instead, use ovrLayerType_Quad with ovrLayerFlag_HeadLocked. - ovrLayerType_EyeMatrix = 5, ///< Described by ovrLayerEyeMatrix. - ovrLayerType_EnumSize = 0x7fffffff ///< Force type int32_t. -} ovrLayerType; - - -/// Identifies flags used by ovrLayerHeader and which are passed to ovr_SubmitFrame. -/// -/// \see ovrLayerHeader -/// -typedef enum ovrLayerFlags_ -{ - /// ovrLayerFlag_HighQuality enables 4x anisotropic sampling during the composition of the layer. - /// The benefits are mostly visible at the periphery for high-frequency & high-contrast visuals. - /// For best results consider combining this flag with an ovrTextureSwapChain that has mipmaps and - /// instead of using arbitrary sized textures, prefer texture sizes that are powers-of-two. - /// Actual rendered viewport and doesn't necessarily have to fill the whole texture. - ovrLayerFlag_HighQuality = 0x01, - - /// ovrLayerFlag_TextureOriginAtBottomLeft: the opposite is TopLeft. - /// Generally this is false for D3D, true for OpenGL. - ovrLayerFlag_TextureOriginAtBottomLeft = 0x02, - - /// Mark this surface as "headlocked", which means it is specified - /// relative to the HMD and moves with it, rather than being specified - /// relative to sensor/torso space and remaining still while the head moves. - /// What used to be ovrLayerType_QuadHeadLocked is now ovrLayerType_Quad plus this flag. - /// However the flag can be applied to any layer type to achieve a similar effect. - ovrLayerFlag_HeadLocked = 0x04 - -} ovrLayerFlags; - - -/// Defines properties shared by all ovrLayer structs, such as ovrLayerEyeFov. -/// -/// ovrLayerHeader is used as a base member in these larger structs. -/// This struct cannot be used by itself except for the case that Type is ovrLayerType_Disabled. -/// -/// \see ovrLayerType, ovrLayerFlags -/// -typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrLayerHeader_ -{ - ovrLayerType Type; ///< Described by ovrLayerType. - unsigned Flags; ///< Described by ovrLayerFlags. -} ovrLayerHeader; - - -/// Describes a layer that specifies a monoscopic or stereoscopic view. -/// This is the kind of layer that's typically used as layer 0 to ovr_SubmitFrame, -/// as it is the kind of layer used to render a 3D stereoscopic view. -/// -/// Three options exist with respect to mono/stereo texture usage: -/// - ColorTexture[0] and ColorTexture[1] contain the left and right stereo renderings, respectively. -/// Viewport[0] and Viewport[1] refer to ColorTexture[0] and ColorTexture[1], respectively. -/// - ColorTexture[0] contains both the left and right renderings, ColorTexture[1] is NULL, -/// and Viewport[0] and Viewport[1] refer to sub-rects with ColorTexture[0]. -/// - ColorTexture[0] contains a single monoscopic rendering, and Viewport[0] and -/// Viewport[1] both refer to that rendering. -/// -/// \see ovrTextureSwapChain, ovr_SubmitFrame -/// -typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrLayerEyeFov_ -{ - /// Header.Type must be ovrLayerType_EyeFov. - ovrLayerHeader Header; - - /// ovrTextureSwapChains for the left and right eye respectively. - /// The second one of which can be NULL for cases described above. - ovrTextureSwapChain ColorTexture[ovrEye_Count]; - - /// Specifies the ColorTexture sub-rect UV coordinates. - /// Both Viewport[0] and Viewport[1] must be valid. - ovrRecti Viewport[ovrEye_Count]; - - /// The viewport field of view. - ovrFovPort Fov[ovrEye_Count]; - - /// Specifies the position and orientation of each eye view, with the position specified in meters. - /// RenderPose will typically be the value returned from ovr_CalcEyePoses, - /// but can be different in special cases if a different head pose is used for rendering. - ovrPosef RenderPose[ovrEye_Count]; - - /// Specifies the timestamp when the source ovrPosef (used in calculating RenderPose) - /// was sampled from the SDK. Typically retrieved by calling ovr_GetTimeInSeconds - /// around the instant the application calls ovr_GetTrackingState - /// The main purpose for this is to accurately track app tracking latency. - double SensorSampleTime; - -} ovrLayerEyeFov; - - - - -/// Describes a layer that specifies a monoscopic or stereoscopic view. -/// This uses a direct 3x4 matrix to map from view space to the UV coordinates. -/// It is essentially the same thing as ovrLayerEyeFov but using a much -/// lower level. This is mainly to provide compatibility with specific apps. -/// Unless the application really requires this flexibility, it is usually better -/// to use ovrLayerEyeFov. -/// -/// Three options exist with respect to mono/stereo texture usage: -/// - ColorTexture[0] and ColorTexture[1] contain the left and right stereo renderings, respectively. -/// Viewport[0] and Viewport[1] refer to ColorTexture[0] and ColorTexture[1], respectively. -/// - ColorTexture[0] contains both the left and right renderings, ColorTexture[1] is NULL, -/// and Viewport[0] and Viewport[1] refer to sub-rects with ColorTexture[0]. -/// - ColorTexture[0] contains a single monoscopic rendering, and Viewport[0] and -/// Viewport[1] both refer to that rendering. -/// -/// \see ovrTextureSwapChain, ovr_SubmitFrame -/// -typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrLayerEyeMatrix_ -{ - /// Header.Type must be ovrLayerType_EyeMatrix. - ovrLayerHeader Header; - - /// ovrTextureSwapChains for the left and right eye respectively. - /// The second one of which can be NULL for cases described above. - ovrTextureSwapChain ColorTexture[ovrEye_Count]; - - /// Specifies the ColorTexture sub-rect UV coordinates. - /// Both Viewport[0] and Viewport[1] must be valid. - ovrRecti Viewport[ovrEye_Count]; - - /// Specifies the position and orientation of each eye view, with the position specified in meters. - /// RenderPose will typically be the value returned from ovr_CalcEyePoses, - /// but can be different in special cases if a different head pose is used for rendering. - ovrPosef RenderPose[ovrEye_Count]; - - /// Specifies the mapping from a view-space vector - /// to a UV coordinate on the textures given above. - /// P = (x,y,z,1)*Matrix - /// TexU = P.x/P.z - /// TexV = P.y/P.z - ovrMatrix4f Matrix[ovrEye_Count]; - - /// Specifies the timestamp when the source ovrPosef (used in calculating RenderPose) - /// was sampled from the SDK. Typically retrieved by calling ovr_GetTimeInSeconds - /// around the instant the application calls ovr_GetTrackingState - /// The main purpose for this is to accurately track app tracking latency. - double SensorSampleTime; - -} ovrLayerEyeMatrix; - - - - - -/// Describes a layer of Quad type, which is a single quad in world or viewer space. -/// It is used for ovrLayerType_Quad. This type of layer represents a single -/// object placed in the world and not a stereo view of the world itself. -/// -/// A typical use of ovrLayerType_Quad is to draw a television screen in a room -/// that for some reason is more convenient to draw as a layer than as part of the main -/// view in layer 0. For example, it could implement a 3D popup GUI that is drawn at a -/// higher resolution than layer 0 to improve fidelity of the GUI. -/// -/// Quad layers are visible from both sides; they are not back-face culled. -/// -/// \see ovrTextureSwapChain, ovr_SubmitFrame -/// -typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrLayerQuad_ -{ - /// Header.Type must be ovrLayerType_Quad. - ovrLayerHeader Header; - - /// Contains a single image, never with any stereo view. - ovrTextureSwapChain ColorTexture; - - /// Specifies the ColorTexture sub-rect UV coordinates. - ovrRecti Viewport; - - /// Specifies the orientation and position of the center point of a Quad layer type. - /// The supplied direction is the vector perpendicular to the quad. - /// The position is in real-world meters (not the application's virtual world, - /// the physical world the user is in) and is relative to the "zero" position - /// set by ovr_RecenterTrackingOrigin unless the ovrLayerFlag_HeadLocked flag is used. - ovrPosef QuadPoseCenter; - - /// Width and height (respectively) of the quad in meters. - ovrVector2f QuadSize; - -} ovrLayerQuad; - - - - -/// Union that combines ovrLayer types in a way that allows them -/// to be used in a polymorphic way. -typedef union ovrLayer_Union_ -{ - ovrLayerHeader Header; - ovrLayerEyeFov EyeFov; - ovrLayerQuad Quad; -} ovrLayer_Union; - - -//@} - -#if !defined(OVR_EXPORTING_CAPI) - -/// @name SDK Distortion Rendering -/// -/// All of rendering functions including the configure and frame functions -/// are not thread safe. It is OK to use ConfigureRendering on one thread and handle -/// frames on another thread, but explicit synchronization must be done since -/// functions that depend on configured state are not reentrant. -/// -/// These functions support rendering of distortion by the SDK. -/// -//@{ - -/// TextureSwapChain creation is rendering API-specific. -/// ovr_CreateTextureSwapChainDX and ovr_CreateTextureSwapChainGL can be found in the -/// rendering API-specific headers, such as OVR_CAPI_D3D.h and OVR_CAPI_GL.h - -/// Gets the number of buffers in an ovrTextureSwapChain. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] chain Specifies the ovrTextureSwapChain for which the length should be retrieved. -/// \param[out] out_Length Returns the number of buffers in the specified chain. -/// -/// \return Returns an ovrResult for which OVR_SUCCESS(result) is false upon error. -/// -/// \see ovr_CreateTextureSwapChainDX, ovr_CreateTextureSwapChainGL -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetTextureSwapChainLength(ovrSession session, ovrTextureSwapChain chain, int* out_Length); - -/// Gets the current index in an ovrTextureSwapChain. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] chain Specifies the ovrTextureSwapChain for which the index should be retrieved. -/// \param[out] out_Index Returns the current (free) index in specified chain. -/// -/// \return Returns an ovrResult for which OVR_SUCCESS(result) is false upon error. -/// -/// \see ovr_CreateTextureSwapChainDX, ovr_CreateTextureSwapChainGL -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetTextureSwapChainCurrentIndex(ovrSession session, ovrTextureSwapChain chain, int* out_Index); - -/// Gets the description of the buffers in an ovrTextureSwapChain -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] chain Specifies the ovrTextureSwapChain for which the description should be retrieved. -/// \param[out] out_Desc Returns the description of the specified chain. -/// -/// \return Returns an ovrResult for which OVR_SUCCESS(result) is false upon error. -/// -/// \see ovr_CreateTextureSwapChainDX, ovr_CreateTextureSwapChainGL -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetTextureSwapChainDesc(ovrSession session, ovrTextureSwapChain chain, ovrTextureSwapChainDesc* out_Desc); - -/// Commits any pending changes to an ovrTextureSwapChain, and advances its current index -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] chain Specifies the ovrTextureSwapChain to commit. -/// -/// \note When Commit is called, the texture at the current index is considered ready for use by the -/// runtime, and further writes to it should be avoided. The swap chain's current index is advanced, -/// providing there's room in the chain. The next time the SDK dereferences this texture swap chain, -/// it will synchronize with the app's graphics context and pick up the submitted index, opening up -/// room in the swap chain for further commits. -/// -/// \return Returns an ovrResult for which OVR_SUCCESS(result) is false upon error. -/// Failures include but aren't limited to: -/// - ovrError_TextureSwapChainFull: ovr_CommitTextureSwapChain was called too many times on a texture swapchain without calling submit to use the chain. -/// -/// \see ovr_CreateTextureSwapChainDX, ovr_CreateTextureSwapChainGL -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_CommitTextureSwapChain(ovrSession session, ovrTextureSwapChain chain); - -/// Destroys an ovrTextureSwapChain and frees all the resources associated with it. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] chain Specifies the ovrTextureSwapChain to destroy. If it is NULL then this function has no effect. -/// -/// \see ovr_CreateTextureSwapChainDX, ovr_CreateTextureSwapChainGL -/// -OVR_PUBLIC_FUNCTION(void) ovr_DestroyTextureSwapChain(ovrSession session, ovrTextureSwapChain chain); - - -/// MirrorTexture creation is rendering API-specific. -/// ovr_CreateMirrorTextureDX and ovr_CreateMirrorTextureGL can be found in the -/// rendering API-specific headers, such as OVR_CAPI_D3D.h and OVR_CAPI_GL.h - -/// Destroys a mirror texture previously created by one of the mirror texture creation functions. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] mirrorTexture Specifies the ovrTexture to destroy. If it is NULL then this function has no effect. -/// -/// \see ovr_CreateMirrorTextureDX, ovr_CreateMirrorTextureGL -/// -OVR_PUBLIC_FUNCTION(void) ovr_DestroyMirrorTexture(ovrSession session, ovrMirrorTexture mirrorTexture); - - -/// Calculates the recommended viewport size for rendering a given eye within the HMD -/// with a given FOV cone. -/// -/// Higher FOV will generally require larger textures to maintain quality. -/// Apps packing multiple eye views together on the same texture should ensure there are -/// at least 8 pixels of padding between them to prevent texture filtering and chromatic -/// aberration causing images to leak between the two eye views. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] eye Specifies which eye (left or right) to calculate for. -/// \param[in] fov Specifies the ovrFovPort to use. -/// \param[in] pixelsPerDisplayPixel Specifies the ratio of the number of render target pixels -/// to display pixels at the center of distortion. 1.0 is the default value. Lower -/// values can improve performance, higher values give improved quality. -/// -/// Example code -/// \code{.cpp} -/// ovrHmdDesc hmdDesc = ovr_GetHmdDesc(session); -/// ovrSizei eyeSizeLeft = ovr_GetFovTextureSize(session, ovrEye_Left, hmdDesc.DefaultEyeFov[ovrEye_Left], 1.0f); -/// ovrSizei eyeSizeRight = ovr_GetFovTextureSize(session, ovrEye_Right, hmdDesc.DefaultEyeFov[ovrEye_Right], 1.0f); -/// \endcode -/// -/// \return Returns the texture width and height size. -/// -OVR_PUBLIC_FUNCTION(ovrSizei) ovr_GetFovTextureSize(ovrSession session, ovrEyeType eye, ovrFovPort fov, - float pixelsPerDisplayPixel); - -/// Computes the distortion viewport, view adjust, and other rendering parameters for -/// the specified eye. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] eyeType Specifies which eye (left or right) for which to perform calculations. -/// \param[in] fov Specifies the ovrFovPort to use. -/// -/// \return Returns the computed ovrEyeRenderDesc for the given eyeType and field of view. -/// -/// \see ovrEyeRenderDesc -/// -OVR_PUBLIC_FUNCTION(ovrEyeRenderDesc) ovr_GetRenderDesc(ovrSession session, - ovrEyeType eyeType, ovrFovPort fov); - -/// Submits layers for distortion and display. -/// -/// ovr_SubmitFrame triggers distortion and processing which might happen asynchronously. -/// The function will return when there is room in the submission queue and surfaces -/// are available. Distortion might or might not have completed. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// -/// \param[in] frameIndex Specifies the targeted application frame index, or 0 to refer to one frame -/// after the last time ovr_SubmitFrame was called. -/// -/// \param[in] viewScaleDesc Provides additional information needed only if layerPtrList contains -/// an ovrLayerType_Quad. If NULL, a default version is used based on the current configuration and a 1.0 world scale. -/// -/// \param[in] layerPtrList Specifies a list of ovrLayer pointers, which can include NULL entries to -/// indicate that any previously shown layer at that index is to not be displayed. -/// Each layer header must be a part of a layer structure such as ovrLayerEyeFov or ovrLayerQuad, -/// with Header.Type identifying its type. A NULL layerPtrList entry in the array indicates the -// absence of the given layer. -/// -/// \param[in] layerCount Indicates the number of valid elements in layerPtrList. The maximum -/// supported layerCount is not currently specified, but may be specified in a future version. -/// -/// - Layers are drawn in the order they are specified in the array, regardless of the layer type. -/// -/// - Layers are not remembered between successive calls to ovr_SubmitFrame. A layer must be -/// specified in every call to ovr_SubmitFrame or it won't be displayed. -/// -/// - If a layerPtrList entry that was specified in a previous call to ovr_SubmitFrame is -/// passed as NULL or is of type ovrLayerType_Disabled, that layer is no longer displayed. -/// -/// - A layerPtrList entry can be of any layer type and multiple entries of the same layer type -/// are allowed. No layerPtrList entry may be duplicated (i.e. the same pointer as an earlier entry). -/// -/// Example code -/// \code{.cpp} -/// ovrLayerEyeFov layer0; -/// ovrLayerQuad layer1; -/// ... -/// ovrLayerHeader* layers[2] = { &layer0.Header, &layer1.Header }; -/// ovrResult result = ovr_SubmitFrame(session, frameIndex, nullptr, layers, 2); -/// \endcode -/// -/// \return Returns an ovrResult for which OVR_SUCCESS(result) is false upon error and true -/// upon success. Return values include but aren't limited to: -/// - ovrSuccess: rendering completed successfully. -/// - ovrSuccess_NotVisible: rendering completed successfully but was not displayed on the HMD, -/// usually because another application currently has ownership of the HMD. Applications receiving -/// this result should stop rendering new content, but continue to call ovr_SubmitFrame periodically -/// until it returns a value other than ovrSuccess_NotVisible. -/// - ovrError_DisplayLost: The session has become invalid (such as due to a device removal) -/// and the shared resources need to be released (ovr_DestroyTextureSwapChain), the session needs to -/// destroyed (ovr_Destroy) and recreated (ovr_Create), and new resources need to be created -/// (ovr_CreateTextureSwapChainXXX). The application's existing private graphics resources do not -/// need to be recreated unless the new ovr_Create call returns a different GraphicsLuid. -/// - ovrError_TextureSwapChainInvalid: The ovrTextureSwapChain is in an incomplete or inconsistent state. -/// Ensure ovr_CommitTextureSwapChain was called at least once first. -/// -/// \see ovr_GetPredictedDisplayTime, ovrViewScaleDesc, ovrLayerHeader -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_SubmitFrame(ovrSession session, long long frameIndex, - const ovrViewScaleDesc* viewScaleDesc, - ovrLayerHeader const * const * layerPtrList, unsigned int layerCount); -///@} - -#endif // !defined(OVR_EXPORTING_CAPI) - -//------------------------------------------------------------------------------------- -/// @name Frame Timing -/// -//@{ - - -#if !defined(OVR_EXPORTING_CAPI) - -/// Gets the time of the specified frame midpoint. -/// -/// Predicts the time at which the given frame will be displayed. The predicted time -/// is the middle of the time period during which the corresponding eye images will -/// be displayed. -/// -/// The application should increment frameIndex for each successively targeted frame, -/// and pass that index to any relevant OVR functions that need to apply to the frame -/// identified by that index. -/// -/// This function is thread-safe and allows for multiple application threads to target -/// their processing to the same displayed frame. -/// -/// In the even that prediction fails due to various reasons (e.g. the display being off -/// or app has yet to present any frames), the return value will be current CPU time. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] frameIndex Identifies the frame the caller wishes to target. -/// A value of zero returns the next frame index. -/// \return Returns the absolute frame midpoint time for the given frameIndex. -/// \see ovr_GetTimeInSeconds -/// -OVR_PUBLIC_FUNCTION(double) ovr_GetPredictedDisplayTime(ovrSession session, long long frameIndex); - - -/// Returns global, absolute high-resolution time in seconds. -/// -/// The time frame of reference for this function is not specified and should not be -/// depended upon. -/// -/// \return Returns seconds as a floating point value. -/// \see ovrPoseStatef, ovrFrameTiming -/// -OVR_PUBLIC_FUNCTION(double) ovr_GetTimeInSeconds(); - -#endif // !defined(OVR_EXPORTING_CAPI) - -/// Performance HUD enables the HMD user to see information critical to -/// the real-time operation of the VR application such as latency timing, -/// and CPU & GPU performance metrics -/// -/// App can toggle performance HUD modes as such: -/// \code{.cpp} -/// ovrPerfHudMode PerfHudMode = ovrPerfHud_LatencyTiming; -/// ovr_SetInt(session, OVR_PERF_HUD_MODE, (int)PerfHudMode); -/// \endcode -/// -typedef enum ovrPerfHudMode_ -{ - ovrPerfHud_Off = 0, ///< Turns off the performance HUD - ovrPerfHud_PerfSummary = 1, ///< Shows performance summary and headroom - ovrPerfHud_LatencyTiming = 2, ///< Shows latency related timing info - ovrPerfHud_AppRenderTiming = 3, ///< Shows render timing info for application - ovrPerfHud_CompRenderTiming = 4, ///< Shows render timing info for OVR compositor - ovrPerfHud_VersionInfo = 5, ///< Shows SDK & HMD version Info - ovrPerfHud_Count = 6, ///< \internal Count of enumerated elements. - ovrPerfHud_EnumSize = 0x7fffffff ///< \internal Force type int32_t. -} ovrPerfHudMode; - -/// Layer HUD enables the HMD user to see information about a layer -/// -/// App can toggle layer HUD modes as such: -/// \code{.cpp} -/// ovrLayerHudMode LayerHudMode = ovrLayerHud_Info; -/// ovr_SetInt(session, OVR_LAYER_HUD_MODE, (int)LayerHudMode); -/// \endcode -/// -typedef enum ovrLayerHudMode_ -{ - ovrLayerHud_Off = 0, ///< Turns off the layer HUD - ovrLayerHud_Info = 1, ///< Shows info about a specific layer - ovrLayerHud_EnumSize = 0x7fffffff -} ovrLayerHudMode; - -///@} - -/// Debug HUD is provided to help developers gauge and debug the fidelity of their app's -/// stereo rendering characteristics. Using the provided quad and crosshair guides, -/// the developer can verify various aspects such as VR tracking units (e.g. meters), -/// stereo camera-parallax properties (e.g. making sure objects at infinity are rendered -/// with the proper separation), measuring VR geometry sizes and distances and more. -/// -/// App can toggle the debug HUD modes as such: -/// \code{.cpp} -/// ovrDebugHudStereoMode DebugHudMode = ovrDebugHudStereo_QuadWithCrosshair; -/// ovr_SetInt(session, OVR_DEBUG_HUD_STEREO_MODE, (int)DebugHudMode); -/// \endcode -/// -/// The app can modify the visual properties of the stereo guide (i.e. quad, crosshair) -/// using the ovr_SetFloatArray function. For a list of tweakable properties, -/// see the OVR_DEBUG_HUD_STEREO_GUIDE_* keys in the OVR_CAPI_Keys.h header file. -typedef enum ovrDebugHudStereoMode_ -{ - ovrDebugHudStereo_Off = 0, ///< Turns off the Stereo Debug HUD - ovrDebugHudStereo_Quad = 1, ///< Renders Quad in world for Stereo Debugging - ovrDebugHudStereo_QuadWithCrosshair = 2, ///< Renders Quad+crosshair in world for Stereo Debugging - ovrDebugHudStereo_CrosshairAtInfinity = 3, ///< Renders screen-space crosshair at infinity for Stereo Debugging - ovrDebugHudStereo_Count, ///< \internal Count of enumerated elements - - ovrDebugHudStereo_EnumSize = 0x7fffffff ///< \internal Force type int32_t -} ovrDebugHudStereoMode; - - -#if !defined(OVR_EXPORTING_CAPI) - -// ----------------------------------------------------------------------------------- -/// @name Property Access -/// -/// These functions read and write OVR properties. Supported properties -/// are defined in OVR_CAPI_Keys.h -/// -//@{ - -/// Reads a boolean property. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid for only the call. -/// \param[in] defaultVal specifes the value to return if the property couldn't be read. -/// \return Returns the property interpreted as a boolean value. Returns defaultVal if -/// the property doesn't exist. -OVR_PUBLIC_FUNCTION(ovrBool) ovr_GetBool(ovrSession session, const char* propertyName, ovrBool defaultVal); - -/// Writes or creates a boolean property. -/// If the property wasn't previously a boolean property, it is changed to a boolean property. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] value The value to write. -/// \return Returns true if successful, otherwise false. A false result should only occur if the property -/// name is empty or if the property is read-only. -OVR_PUBLIC_FUNCTION(ovrBool) ovr_SetBool(ovrSession session, const char* propertyName, ovrBool value); - - -/// Reads an integer property. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] defaultVal Specifes the value to return if the property couldn't be read. -/// \return Returns the property interpreted as an integer value. Returns defaultVal if -/// the property doesn't exist. -OVR_PUBLIC_FUNCTION(int) ovr_GetInt(ovrSession session, const char* propertyName, int defaultVal); - -/// Writes or creates an integer property. -/// -/// If the property wasn't previously a boolean property, it is changed to an integer property. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] value The value to write. -/// \return Returns true if successful, otherwise false. A false result should only occur if the property -/// name is empty or if the property is read-only. -OVR_PUBLIC_FUNCTION(ovrBool) ovr_SetInt(ovrSession session, const char* propertyName, int value); - - -/// Reads a float property. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] defaultVal specifes the value to return if the property couldn't be read. -/// \return Returns the property interpreted as an float value. Returns defaultVal if -/// the property doesn't exist. -OVR_PUBLIC_FUNCTION(float) ovr_GetFloat(ovrSession session, const char* propertyName, float defaultVal); - -/// Writes or creates a float property. -/// If the property wasn't previously a float property, it's changed to a float property. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] value The value to write. -/// \return Returns true if successful, otherwise false. A false result should only occur if the property -/// name is empty or if the property is read-only. -OVR_PUBLIC_FUNCTION(ovrBool) ovr_SetFloat(ovrSession session, const char* propertyName, float value); - - -/// Reads a float array property. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] values An array of float to write to. -/// \param[in] valuesCapacity Specifies the maximum number of elements to write to the values array. -/// \return Returns the number of elements read, or 0 if property doesn't exist or is empty. -OVR_PUBLIC_FUNCTION(unsigned int) ovr_GetFloatArray(ovrSession session, const char* propertyName, - float values[], unsigned int valuesCapacity); - -/// Writes or creates a float array property. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] values An array of float to write from. -/// \param[in] valuesSize Specifies the number of elements to write. -/// \return Returns true if successful, otherwise false. A false result should only occur if the property -/// name is empty or if the property is read-only. -OVR_PUBLIC_FUNCTION(ovrBool) ovr_SetFloatArray(ovrSession session, const char* propertyName, - const float values[], unsigned int valuesSize); - - -/// Reads a string property. -/// Strings are UTF8-encoded and null-terminated. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] defaultVal Specifes the value to return if the property couldn't be read. -/// \return Returns the string property if it exists. Otherwise returns defaultVal, which can be specified as NULL. -/// The return memory is guaranteed to be valid until next call to ovr_GetString or -/// until the session is destroyed, whichever occurs first. -OVR_PUBLIC_FUNCTION(const char*) ovr_GetString(ovrSession session, const char* propertyName, - const char* defaultVal); - -/// Writes or creates a string property. -/// Strings are UTF8-encoded and null-terminated. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] propertyName The name of the property, which needs to be valid only for the call. -/// \param[in] value The string property, which only needs to be valid for the duration of the call. -/// \return Returns true if successful, otherwise false. A false result should only occur if the property -/// name is empty or if the property is read-only. -OVR_PUBLIC_FUNCTION(ovrBool) ovr_SetString(ovrSession session, const char* propertyName, - const char* value); - -///@} - -#endif // !defined(OVR_EXPORTING_CAPI) - -#ifdef __cplusplus -} // extern "C" -#endif - - -#if defined(_MSC_VER) - #pragma warning(pop) -#endif - -/// @cond DoxygenIgnore -//----------------------------------------------------------------------------- -// ***** Compiler packing validation -// -// These checks ensure that the compiler settings being used will be compatible -// with with pre-built dynamic library provided with the runtime. - -OVR_STATIC_ASSERT(sizeof(ovrBool) == 1, "ovrBool size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrVector2i) == 4 * 2, "ovrVector2i size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrSizei) == 4 * 2, "ovrSizei size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrRecti) == sizeof(ovrVector2i) + sizeof(ovrSizei), "ovrRecti size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrQuatf) == 4 * 4, "ovrQuatf size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrVector2f) == 4 * 2, "ovrVector2f size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrVector3f) == 4 * 3, "ovrVector3f size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrMatrix4f) == 4 * 16, "ovrMatrix4f size mismatch"); - -OVR_STATIC_ASSERT(sizeof(ovrPosef) == (7 * 4), "ovrPosef size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrPoseStatef) == (22 * 4), "ovrPoseStatef size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrFovPort) == (4 * 4), "ovrFovPort size mismatch"); - -OVR_STATIC_ASSERT(sizeof(ovrHmdCaps) == 4, "ovrHmdCaps size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrTrackingCaps) == 4, "ovrTrackingCaps size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrEyeType) == 4, "ovrEyeType size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrHmdType) == 4, "ovrHmdType size mismatch"); - -OVR_STATIC_ASSERT(sizeof(ovrTrackerDesc) == 4 + 4 + 4 + 4, "ovrTrackerDesc size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrTrackerPose) == 4 + 4 + sizeof(ovrPosef) + sizeof(ovrPosef), "ovrTrackerPose size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrTrackingState) == sizeof(ovrPoseStatef) + 4 + 4 + (sizeof(ovrPoseStatef) * 2) + (sizeof(unsigned int) * 2) + sizeof(ovrPosef) + 4, "ovrTrackingState size mismatch"); - - -//OVR_STATIC_ASSERT(sizeof(ovrTextureHeader) == sizeof(ovrRenderAPIType) + sizeof(ovrSizei), -// "ovrTextureHeader size mismatch"); -//OVR_STATIC_ASSERT(sizeof(ovrTexture) == sizeof(ovrTextureHeader) OVR_ON64(+4) + sizeof(uintptr_t) * 8, -// "ovrTexture size mismatch"); -// -OVR_STATIC_ASSERT(sizeof(ovrStatusBits) == 4, "ovrStatusBits size mismatch"); - -OVR_STATIC_ASSERT(sizeof(ovrSessionStatus) == 6, "ovrSessionStatus size mismatch"); - -OVR_STATIC_ASSERT(sizeof(ovrEyeRenderDesc) == sizeof(ovrEyeType) + sizeof(ovrFovPort) + sizeof(ovrRecti) + - sizeof(ovrVector2f) + sizeof(ovrVector3f), - "ovrEyeRenderDesc size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrTimewarpProjectionDesc) == 4 * 3, "ovrTimewarpProjectionDesc size mismatch"); - -OVR_STATIC_ASSERT(sizeof(ovrInitFlags) == 4, "ovrInitFlags size mismatch"); -OVR_STATIC_ASSERT(sizeof(ovrLogLevel) == 4, "ovrLogLevel size mismatch"); - -OVR_STATIC_ASSERT(sizeof(ovrInitParams) == 4 + 4 + sizeof(ovrLogCallback) + sizeof(uintptr_t) + 4 + 4, - "ovrInitParams size mismatch"); - -OVR_STATIC_ASSERT(sizeof(ovrHmdDesc) == - + sizeof(ovrHmdType) // Type - OVR_ON64(+ 4) // pad0 - + 64 // ProductName - + 64 // Manufacturer - + 2 // VendorId - + 2 // ProductId - + 24 // SerialNumber - + 2 // FirmwareMajor - + 2 // FirmwareMinor - + 4 * 4 // AvailableHmdCaps - DefaultTrackingCaps - + sizeof(ovrFovPort) * 2 // DefaultEyeFov - + sizeof(ovrFovPort) * 2 // MaxEyeFov - + sizeof(ovrSizei) // Resolution - + 4 // DisplayRefreshRate - OVR_ON64(+ 4) // pad1 - , "ovrHmdDesc size mismatch"); - - -// ----------------------------------------------------------------------------------- -// ***** Backward compatibility #includes -// -// This is at the bottom of this file because the following is dependent on the -// declarations above. - -#if !defined(OVR_CAPI_NO_UTILS) - #include "Extras/OVR_CAPI_Util.h" -#endif - -/// @endcond - -#endif // OVR_CAPI_h diff --git a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_Audio.h b/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_Audio.h deleted file mode 100644 index dc61e19e6..000000000 --- a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_Audio.h +++ /dev/null @@ -1,84 +0,0 @@ -/********************************************************************************//** -\file OVR_CAPI_Audio.h -\brief CAPI audio functions. -\copyright Copyright 2015 Oculus VR, LLC. All Rights reserved. -************************************************************************************/ - - -#ifndef OVR_CAPI_Audio_h -#define OVR_CAPI_Audio_h - -#ifdef _WIN32 -// Prevents from defining min() and max() macro symbols. -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#include "OVR_CAPI.h" -#define OVR_AUDIO_MAX_DEVICE_STR_SIZE 128 - -#if !defined(OVR_EXPORTING_CAPI) - -/// Gets the ID of the preferred VR audio output device. -/// -/// \param[out] deviceOutId The ID of the user's preferred VR audio device to use, which will be valid upon a successful return value, else it will be WAVE_MAPPER. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetAudioDeviceOutWaveId(UINT* deviceOutId); - -/// Gets the ID of the preferred VR audio input device. -/// -/// \param[out] deviceInId The ID of the user's preferred VR audio device to use, which will be valid upon a successful return value, else it will be WAVE_MAPPER. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetAudioDeviceInWaveId(UINT* deviceInId); - - -/// Gets the GUID of the preferred VR audio device as a string. -/// -/// \param[out] deviceOutStrBuffer A buffer where the GUID string for the device will copied to. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetAudioDeviceOutGuidStr(WCHAR deviceOutStrBuffer[OVR_AUDIO_MAX_DEVICE_STR_SIZE]); - - -/// Gets the GUID of the preferred VR audio device. -/// -/// \param[out] deviceOutGuid The GUID of the user's preferred VR audio device to use, which will be valid upon a successful return value, else it will be NULL. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetAudioDeviceOutGuid(GUID* deviceOutGuid); - - -/// Gets the GUID of the preferred VR microphone device as a string. -/// -/// \param[out] deviceInStrBuffer A buffer where the GUID string for the device will copied to. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetAudioDeviceInGuidStr(WCHAR deviceInStrBuffer[OVR_AUDIO_MAX_DEVICE_STR_SIZE]); - - -/// Gets the GUID of the preferred VR microphone device. -/// -/// \param[out] deviceInGuid The GUID of the user's preferred VR audio device to use, which will be valid upon a successful return value, else it will be NULL. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetAudioDeviceInGuid(GUID* deviceInGuid); - -#endif // !defined(OVR_EXPORTING_CAPI) - -#endif //OVR_OS_MS - -#endif // OVR_CAPI_Audio_h diff --git a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h b/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h deleted file mode 100644 index 374dab84f..000000000 --- a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h +++ /dev/null @@ -1,158 +0,0 @@ -/********************************************************************************//** -\file OVR_CAPI_D3D.h -\brief D3D specific structures used by the CAPI interface. -\copyright Copyright 2014-2016 Oculus VR, LLC All Rights reserved. -************************************************************************************/ - -#ifndef OVR_CAPI_D3D_h -#define OVR_CAPI_D3D_h - -#include "OVR_CAPI.h" -#include "OVR_Version.h" - - -#if defined (_WIN32) -#include - -#if !defined(OVR_EXPORTING_CAPI) - -//----------------------------------------------------------------------------------- -// ***** Direct3D Specific - -/// Create Texture Swap Chain suitable for use with Direct3D 11 and 12. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] d3dPtr Specifies the application's D3D11Device to create resources with or the D3D12CommandQueue -/// which must be the same one the application renders to the eye textures with. -/// \param[in] desc Specifies requested texture properties. See notes for more info about texture format. -/// \param[in] bindFlags Specifies what ovrTextureBindFlags the application requires for this texture chain. -/// \param[out] out_TextureSwapChain Returns the created ovrTextureSwapChain, which will be valid upon a successful return value, else it will be NULL. -/// This texture chain must be eventually destroyed via ovr_DestroyTextureSwapChain before destroying the session with ovr_Destroy. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -/// \note The texture format provided in \a desc should be thought of as the format the distortion-compositor will use for the -/// ShaderResourceView when reading the contents of the texture. To that end, it is highly recommended that the application -/// requests texture swapchain formats that are in sRGB-space (e.g. OVR_FORMAT_R8G8B8A8_UNORM_SRGB) as the compositor -/// does sRGB-correct rendering. As such, the compositor relies on the GPU's hardware sampler to do the sRGB-to-linear -/// conversion. If the application still prefers to render to a linear format (e.g. OVR_FORMAT_R8G8B8A8_UNORM) while handling the -/// linear-to-gamma conversion via HLSL code, then the application must still request the corresponding sRGB format and also use -/// the \a ovrTextureMisc_DX_Typeless flag in the ovrTextureSwapChainDesc's Flag field. This will allow the application to create -/// a RenderTargetView that is the desired linear format while the compositor continues to treat it as sRGB. Failure to do so -/// will cause the compositor to apply unexpected gamma conversions leading to gamma-curve artifacts. The \a ovrTextureMisc_DX_Typeless -/// flag for depth buffer formats (e.g. OVR_FORMAT_D32_FLOAT) is ignored as they are always converted to be typeless. -/// -/// \see ovr_GetTextureSwapChainLength -/// \see ovr_GetTextureSwapChainCurrentIndex -/// \see ovr_GetTextureSwapChainDesc -/// \see ovr_GetTextureSwapChainBufferDX -/// \see ovr_DestroyTextureSwapChain -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_CreateTextureSwapChainDX(ovrSession session, - IUnknown* d3dPtr, - const ovrTextureSwapChainDesc* desc, - ovrTextureSwapChain* out_TextureSwapChain); - - -/// Get a specific buffer within the chain as any compatible COM interface (similar to QueryInterface) -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] chain Specifies an ovrTextureSwapChain previously returned by ovr_CreateTextureSwapChainDX -/// \param[in] index Specifies the index within the chain to retrieve. Must be between 0 and length (see ovr_GetTextureSwapChainLength), -/// or may pass -1 to get the buffer at the CurrentIndex location. (Saving a call to GetTextureSwapChainCurrentIndex) -/// \param[in] iid Specifies the interface ID of the interface pointer to query the buffer for. -/// \param[out] out_Buffer Returns the COM interface pointer retrieved. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -/// Example code -/// \code{.cpp} -/// ovr_GetTextureSwapChainBufferDX(session, chain, 0, IID_ID3D11Texture2D, &d3d11Texture); -/// ovr_GetTextureSwapChainBufferDX(session, chain, 1, IID_PPV_ARGS(&dxgiResource)); -/// \endcode -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetTextureSwapChainBufferDX(ovrSession session, - ovrTextureSwapChain chain, - int index, - IID iid, - void** out_Buffer); - - -/// Create Mirror Texture which is auto-refreshed to mirror Rift contents produced by this application. -/// -/// A second call to ovr_CreateMirrorTextureDX for a given ovrSession before destroying the first one -/// is not supported and will result in an error return. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] d3dPtr Specifies the application's D3D11Device to create resources with or the D3D12CommandQueue -/// which must be the same one the application renders to the textures with. -/// \param[in] desc Specifies requested texture properties. See notes for more info about texture format. -/// \param[out] out_MirrorTexture Returns the created ovrMirrorTexture, which will be valid upon a successful return value, else it will be NULL. -/// This texture must be eventually destroyed via ovr_DestroyMirrorTexture before destroying the session with ovr_Destroy. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -/// \note The texture format provided in \a desc should be thought of as the format the compositor will use for the RenderTargetView when -/// writing into mirror texture. To that end, it is highly recommended that the application requests a mirror texture format that is -/// in sRGB-space (e.g. OVR_FORMAT_R8G8B8A8_UNORM_SRGB) as the compositor does sRGB-correct rendering. If however the application wants -/// to still read the mirror texture as a linear format (e.g. OVR_FORMAT_R8G8B8A8_UNORM) and handle the sRGB-to-linear conversion in -/// HLSL code, then it is recommended the application still requests an sRGB format and also use the \a ovrTextureMisc_DX_Typeless flag in the -/// ovrMirrorTextureDesc's Flags field. This will allow the application to bind a ShaderResourceView that is a linear format while the -/// compositor continues to treat is as sRGB. Failure to do so will cause the compositor to apply unexpected gamma conversions leading to -/// gamma-curve artifacts. -/// -/// -/// Example code -/// \code{.cpp} -/// ovrMirrorTexture mirrorTexture = nullptr; -/// ovrMirrorTextureDesc mirrorDesc = {}; -/// mirrorDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB; -/// mirrorDesc.Width = mirrorWindowWidth; -/// mirrorDesc.Height = mirrorWindowHeight; -/// ovrResult result = ovr_CreateMirrorTextureDX(session, d3d11Device, &mirrorDesc, &mirrorTexture); -/// [...] -/// // Destroy the texture when done with it. -/// ovr_DestroyMirrorTexture(session, mirrorTexture); -/// mirrorTexture = nullptr; -/// \endcode -/// -/// \see ovr_GetMirrorTextureBufferDX -/// \see ovr_DestroyMirrorTexture -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_CreateMirrorTextureDX(ovrSession session, - IUnknown* d3dPtr, - const ovrMirrorTextureDesc* desc, - ovrMirrorTexture* out_MirrorTexture); - -/// Get a the underlying buffer as any compatible COM interface (similar to QueryInterface) -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] mirrorTexture Specifies an ovrMirrorTexture previously returned by ovr_CreateMirrorTextureDX -/// \param[in] iid Specifies the interface ID of the interface pointer to query the buffer for. -/// \param[out] out_Buffer Returns the COM interface pointer retrieved. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -/// Example code -/// \code{.cpp} -/// ID3D11Texture2D* d3d11Texture = nullptr; -/// ovr_GetMirrorTextureBufferDX(session, mirrorTexture, IID_PPV_ARGS(&d3d11Texture)); -/// d3d11DeviceContext->CopyResource(d3d11TextureBackBuffer, d3d11Texture); -/// d3d11Texture->Release(); -/// dxgiSwapChain->Present(0, 0); -/// \endcode -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetMirrorTextureBufferDX(ovrSession session, - ovrMirrorTexture mirrorTexture, - IID iid, - void** out_Buffer); - -#endif // !defined(OVR_EXPORTING_CAPI) - -#endif // _WIN32 - -#endif // OVR_CAPI_D3D_h diff --git a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_GL.h b/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_GL.h deleted file mode 100644 index 1c073f467..000000000 --- a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_GL.h +++ /dev/null @@ -1,102 +0,0 @@ -/********************************************************************************//** -\file OVR_CAPI_GL.h -\brief OpenGL-specific structures used by the CAPI interface. -\copyright Copyright 2015 Oculus VR, LLC. All Rights reserved. -************************************************************************************/ - -#ifndef OVR_CAPI_GL_h -#define OVR_CAPI_GL_h - -#include "OVR_CAPI.h" - -#if !defined(OVR_EXPORTING_CAPI) - -/// Creates a TextureSwapChain suitable for use with OpenGL. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] desc Specifies the requested texture properties. See notes for more info about texture format. -/// \param[out] out_TextureSwapChain Returns the created ovrTextureSwapChain, which will be valid upon -/// a successful return value, else it will be NULL. This texture swap chain must be eventually -/// destroyed via ovr_DestroyTextureSwapChain before destroying the session with ovr_Destroy. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -/// \note The \a format provided should be thought of as the format the distortion compositor will use when reading -/// the contents of the texture. To that end, it is highly recommended that the application requests texture swap chain -/// formats that are in sRGB-space (e.g. OVR_FORMAT_R8G8B8A8_UNORM_SRGB) as the distortion compositor does sRGB-correct -/// rendering. Furthermore, the app should then make sure "glEnable(GL_FRAMEBUFFER_SRGB);" is called before rendering -/// into these textures. Even though it is not recommended, if the application would like to treat the texture as a linear -/// format and do linear-to-gamma conversion in GLSL, then the application can avoid calling "glEnable(GL_FRAMEBUFFER_SRGB);", -/// but should still pass in an sRGB variant for the \a format. Failure to do so will cause the distortion compositor -/// to apply incorrect gamma conversions leading to gamma-curve artifacts. -/// -/// \see ovr_GetTextureSwapChainLength -/// \see ovr_GetTextureSwapChainCurrentIndex -/// \see ovr_GetTextureSwapChainDesc -/// \see ovr_GetTextureSwapChainBufferGL -/// \see ovr_DestroyTextureSwapChain -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_CreateTextureSwapChainGL(ovrSession session, - const ovrTextureSwapChainDesc* desc, - ovrTextureSwapChain* out_TextureSwapChain); - -/// Get a specific buffer within the chain as a GL texture name -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] chain Specifies an ovrTextureSwapChain previously returned by ovr_CreateTextureSwapChainGL -/// \param[in] index Specifies the index within the chain to retrieve. Must be between 0 and length (see ovr_GetTextureSwapChainLength) -/// or may pass -1 to get the buffer at the CurrentIndex location. (Saving a call to GetTextureSwapChainCurrentIndex) -/// \param[out] out_TexId Returns the GL texture object name associated with the specific index requested -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetTextureSwapChainBufferGL(ovrSession session, - ovrTextureSwapChain chain, - int index, - unsigned int* out_TexId); - - -/// Creates a Mirror Texture which is auto-refreshed to mirror Rift contents produced by this application. -/// -/// A second call to ovr_CreateMirrorTextureGL for a given ovrSession before destroying the first one -/// is not supported and will result in an error return. -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] desc Specifies the requested mirror texture description. -/// \param[out] out_MirrorTexture Specifies the created ovrMirrorTexture, which will be valid upon a successful return value, else it will be NULL. -/// This texture must be eventually destroyed via ovr_DestroyMirrorTexture before destroying the session with ovr_Destroy. -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -/// \note The \a format provided should be thought of as the format the distortion compositor will use when writing into the mirror -/// texture. It is highly recommended that mirror textures are requested as sRGB formats because the distortion compositor -/// does sRGB-correct rendering. If the application requests a non-sRGB format (e.g. R8G8B8A8_UNORM) as the mirror texture, -/// then the application might have to apply a manual linear-to-gamma conversion when reading from the mirror texture. -/// Failure to do so can result in incorrect gamma conversions leading to gamma-curve artifacts and color banding. -/// -/// \see ovr_GetMirrorTextureBufferGL -/// \see ovr_DestroyMirrorTexture -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_CreateMirrorTextureGL(ovrSession session, - const ovrMirrorTextureDesc* desc, - ovrMirrorTexture* out_MirrorTexture); - -/// Get a the underlying buffer as a GL texture name -/// -/// \param[in] session Specifies an ovrSession previously returned by ovr_Create. -/// \param[in] mirrorTexture Specifies an ovrMirrorTexture previously returned by ovr_CreateMirrorTextureGL -/// \param[out] out_TexId Specifies the GL texture object name associated with the mirror texture -/// -/// \return Returns an ovrResult indicating success or failure. In the case of failure, use -/// ovr_GetLastErrorInfo to get more information. -/// -OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetMirrorTextureBufferGL(ovrSession session, - ovrMirrorTexture mirrorTexture, - unsigned int* out_TexId); - -#endif // !defined(OVR_EXPORTING_CAPI) - -#endif // OVR_CAPI_GL_h diff --git a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_Keys.h b/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_Keys.h deleted file mode 100644 index e3e9d689c..000000000 --- a/src/external/OculusSDK/LibOVR/Include/OVR_CAPI_Keys.h +++ /dev/null @@ -1,53 +0,0 @@ -/********************************************************************************//** -\file OVR_CAPI.h -\brief Keys for CAPI proprty function calls -\copyright Copyright 2015 Oculus VR, LLC All Rights reserved. -************************************************************************************/ - -#ifndef OVR_CAPI_Keys_h -#define OVR_CAPI_Keys_h - -#include "OVR_Version.h" - - - -#define OVR_KEY_USER "User" // string - -#define OVR_KEY_NAME "Name" // string - -#define OVR_KEY_GENDER "Gender" // string "Male", "Female", or "Unknown" -#define OVR_DEFAULT_GENDER "Unknown" - -#define OVR_KEY_PLAYER_HEIGHT "PlayerHeight" // float meters -#define OVR_DEFAULT_PLAYER_HEIGHT 1.778f - -#define OVR_KEY_EYE_HEIGHT "EyeHeight" // float meters -#define OVR_DEFAULT_EYE_HEIGHT 1.675f - -#define OVR_KEY_NECK_TO_EYE_DISTANCE "NeckEyeDistance" // float[2] meters -#define OVR_DEFAULT_NECK_TO_EYE_HORIZONTAL 0.0805f -#define OVR_DEFAULT_NECK_TO_EYE_VERTICAL 0.075f - - -#define OVR_KEY_EYE_TO_NOSE_DISTANCE "EyeToNoseDist" // float[2] meters - - - - - -#define OVR_PERF_HUD_MODE "PerfHudMode" // int, allowed values are defined in enum ovrPerfHudMode - -#define OVR_LAYER_HUD_MODE "LayerHudMode" // int, allowed values are defined in enum ovrLayerHudMode -#define OVR_LAYER_HUD_CURRENT_LAYER "LayerHudCurrentLayer" // int, The layer to show -#define OVR_LAYER_HUD_SHOW_ALL_LAYERS "LayerHudShowAll" // bool, Hide other layers when the hud is enabled - -#define OVR_DEBUG_HUD_STEREO_MODE "DebugHudStereoMode" // int, allowed values are defined in enum ovrDebugHudStereoMode -#define OVR_DEBUG_HUD_STEREO_GUIDE_INFO_ENABLE "DebugHudStereoGuideInfoEnable" // bool -#define OVR_DEBUG_HUD_STEREO_GUIDE_SIZE "DebugHudStereoGuideSize2f" // float[2] -#define OVR_DEBUG_HUD_STEREO_GUIDE_POSITION "DebugHudStereoGuidePosition3f" // float[3] -#define OVR_DEBUG_HUD_STEREO_GUIDE_YAWPITCHROLL "DebugHudStereoGuideYawPitchRoll3f" // float[3] -#define OVR_DEBUG_HUD_STEREO_GUIDE_COLOR "DebugHudStereoGuideColor4f" // float[4] - - - -#endif // OVR_CAPI_Keys_h diff --git a/src/external/OculusSDK/LibOVR/Include/OVR_ErrorCode.h b/src/external/OculusSDK/LibOVR/Include/OVR_ErrorCode.h deleted file mode 100644 index a8b810ead..000000000 --- a/src/external/OculusSDK/LibOVR/Include/OVR_ErrorCode.h +++ /dev/null @@ -1,156 +0,0 @@ -/********************************************************************************//** -\file OVR_ErrorCode.h -\brief This header provides LibOVR error code declarations. -\copyright Copyright 2015-2016 Oculus VR, LLC All Rights reserved. -*************************************************************************************/ - -#ifndef OVR_ErrorCode_h -#define OVR_ErrorCode_h - - -#include "OVR_Version.h" -#include - - - - -#ifndef OVR_RESULT_DEFINED -#define OVR_RESULT_DEFINED ///< Allows ovrResult to be independently defined. -/// API call results are represented at the highest level by a single ovrResult. -typedef int32_t ovrResult; -#endif - - -/// \brief Indicates if an ovrResult indicates success. -/// -/// Some functions return additional successful values other than ovrSucces and -/// require usage of this macro to indicate successs. -/// -#if !defined(OVR_SUCCESS) - #define OVR_SUCCESS(result) (result >= 0) -#endif - - -/// \brief Indicates if an ovrResult indicates an unqualified success. -/// -/// This is useful for indicating that the code intentionally wants to -/// check for result == ovrSuccess as opposed to OVR_SUCCESS(), which -/// checks for result >= ovrSuccess. -/// -#if !defined(OVR_UNQUALIFIED_SUCCESS) - #define OVR_UNQUALIFIED_SUCCESS(result) (result == ovrSuccess) -#endif - - -/// \brief Indicates if an ovrResult indicates failure. -/// -#if !defined(OVR_FAILURE) - #define OVR_FAILURE(result) (!OVR_SUCCESS(result)) -#endif - - -// Success is a value greater or equal to 0, while all error types are negative values. -#ifndef OVR_SUCCESS_DEFINED -#define OVR_SUCCESS_DEFINED ///< Allows ovrResult to be independently defined. -typedef enum ovrSuccessType_ -{ - /// This is a general success result. Use OVR_SUCCESS to test for success. - ovrSuccess = 0, -} ovrSuccessType; -#endif - -// Public success types -// Success is a value greater or equal to 0, while all error types are negative values. -typedef enum ovrSuccessTypes_ -{ - /// Returned from a call to SubmitFrame. The call succeeded, but what the app - /// rendered will not be visible on the HMD. Ideally the app should continue - /// calling SubmitFrame, but not do any rendering. When the result becomes - /// ovrSuccess, rendering should continue as usual. - ovrSuccess_NotVisible = 1000, - -} ovrSuccessTypes; - -// Public error types -typedef enum ovrErrorType_ -{ - /* General errors */ - ovrError_MemoryAllocationFailure = -1000, ///< Failure to allocate memory. - ovrError_InvalidSession = -1002, ///< Invalid ovrSession parameter provided. - ovrError_Timeout = -1003, ///< The operation timed out. - ovrError_NotInitialized = -1004, ///< The system or component has not been initialized. - ovrError_InvalidParameter = -1005, ///< Invalid parameter provided. See error info or log for details. - ovrError_ServiceError = -1006, ///< Generic service error. See error info or log for details. - ovrError_NoHmd = -1007, ///< The given HMD doesn't exist. - ovrError_Unsupported = -1009, ///< Function call is not supported on this hardware/software - ovrError_DeviceUnavailable = -1010, ///< Specified device type isn't available. - ovrError_InvalidHeadsetOrientation = -1011, ///< The headset was in an invalid orientation for the requested operation (e.g. vertically oriented during ovr_RecenterPose). - ovrError_ClientSkippedDestroy = -1012, ///< The client failed to call ovr_Destroy on an active session before calling ovr_Shutdown. Or the client crashed. - ovrError_ClientSkippedShutdown = -1013, ///< The client failed to call ovr_Shutdown or the client crashed. - ovrError_ServiceDeadlockDetected = -1014, ///< The service watchdog discovered a deadlock. - ovrError_InvalidOperation = -1015, ///< Function call is invalid for object's current state - - /* Audio error range, reserved for Audio errors. */ - ovrError_AudioDeviceNotFound = -2001, ///< Failure to find the specified audio device. - ovrError_AudioComError = -2002, ///< Generic COM error. - - /* Initialization errors. */ - ovrError_Initialize = -3000, ///< Generic initialization error. - ovrError_LibLoad = -3001, ///< Couldn't load LibOVRRT. - ovrError_LibVersion = -3002, ///< LibOVRRT version incompatibility. - ovrError_ServiceConnection = -3003, ///< Couldn't connect to the OVR Service. - ovrError_ServiceVersion = -3004, ///< OVR Service version incompatibility. - ovrError_IncompatibleOS = -3005, ///< The operating system version is incompatible. - ovrError_DisplayInit = -3006, ///< Unable to initialize the HMD display. - ovrError_ServerStart = -3007, ///< Unable to start the server. Is it already running? - ovrError_Reinitialization = -3008, ///< Attempting to re-initialize with a different version. - ovrError_MismatchedAdapters = -3009, ///< Chosen rendering adapters between client and service do not match - ovrError_LeakingResources = -3010, ///< Calling application has leaked resources - ovrError_ClientVersion = -3011, ///< Client version too old to connect to service - ovrError_OutOfDateOS = -3012, ///< The operating system is out of date. - ovrError_OutOfDateGfxDriver = -3013, ///< The graphics driver is out of date. - ovrError_IncompatibleGPU = -3014, ///< The graphics hardware is not supported - ovrError_NoValidVRDisplaySystem = -3015, ///< No valid VR display system found. - ovrError_Obsolete = -3016, ///< Feature or API is obsolete and no longer supported. - ovrError_DisabledOrDefaultAdapter = -3017, ///< No supported VR display system found, but disabled or driverless adapter found. - ovrError_HybridGraphicsNotSupported = -3018, ///< The system is using hybrid graphics (Optimus, etc...), which is not support. - ovrError_DisplayManagerInit = -3019, ///< Initialization of the DisplayManager failed. - ovrError_TrackerDriverInit = -3020, ///< Failed to get the interface for an attached tracker - ovrError_LibSignCheck = -3021, ///< LibOVRRT signature check failure. - ovrError_LibPath = -3022, ///< LibOVRRT path failure. - ovrError_LibSymbols = -3023, ///< LibOVRRT symbol resolution failure. - - /* Rendering errors */ - ovrError_DisplayLost = -6000, ///< In the event of a system-wide graphics reset or cable unplug this is returned to the app. - ovrError_TextureSwapChainFull = -6001, ///< ovr_CommitTextureSwapChain was called too many times on a texture swapchain without calling submit to use the chain. - ovrError_TextureSwapChainInvalid = -6002, ///< The ovrTextureSwapChain is in an incomplete or inconsistent state. Ensure ovr_CommitTextureSwapChain was called at least once first. - ovrError_GraphicsDeviceReset = -6003, ///< Graphics device has been reset (TDR, etc...) - ovrError_DisplayRemoved = -6004, ///< HMD removed from the display adapter - ovrError_ContentProtectionNotAvailable = -6005,///=gv(s z{OEr7_4(r)<<7b1InVj=oaa2xbDs0#)_i`GVpSByhJUe`qIBSw{z}F3;t#h)Q8FjL zo~i5@_s;blmYMHd|8U^(<#|h&edUYGzVJleqhI*)m%kFs`-jK!mW95Y_xP9dDre2f zd*UmL9=mP)`1E`|>)h3!YnyxR-ACj92G&K6dhtH6Ztu~P;`diapTh5>6;qFtiQhYq zED^uON1n!S`yYly`nlKMb@ZX!yN|wIap#e8#J^o}-;oyad-svgiQn#{^gH+3E#mj> zifJN#_T!HRsO)%4{a!_xX-QMscXl?$ZkuBrgf#aLTxq0D+ zRONGf4&bkz4b;_X-r=Zsm#;a|6+&a-MF#$qr1(Jte@RmOfB|2a6rOM7pPMxQtpFO{EnpfFB4zvex?=w*u8nbYHP^AiP%(wr8^&&Y6#h^V~~(IkJP_9+Na%7~qkDtr}; zg`GtR>OzSBh>)#;LP8et_DTb})IcVP!aamsjbOw(Y~fE3W_qBAFex%>e*{li>|9DO ziY17`ErhucL13ovV#3S_%pgpPjM{^EO3bB{USJYL;n5p_xe7sGTKU<}0@D$wCQOQq z+MmNyVs4=H0+S#L*9dbHg21%#w(a|m-Qg21%%c8R%= zFex%>--V~d?4a}llOPJeiZDA71ZFCK2$)g(VIy^qo*FG!Lb-{Ac6uuOcb|bS@Ix1% zV`BK@r`Ji9P;+{bDs=AWMrsG4Prx5XTo>VwKIF~!-U6bf1$vw)k|Lt^0X$^`I2A4$ zKoEt`MKyK~QX;9O__Ks;4fGMRh_~B%3 zKPEAqgh`Q6`)WKT<|;}rFbSgYvw6U5MG%;&ya1R{`}0QXO?qmyAct}j3GMV$_*=jX zEH&}R;kB2?A1fwYgg-VTZ~n^7AR6Qc6-g0M`!+mf1GZA(q5%X^cnLLNJ0;Tjt!Wr5Cj&h{E5y z4w$6~0yC9o05fWT*huZyQHJYe$kxCCLKgA%HUqiUKqiR7Ke!gi8xTb6 zEqpv-rUy?{0ON6-vL13ovUqjn~Kl%uhBBS;lcuLIelwM#G zMB!f~%nk&BY2_~vrXw&+m=qbcAHY*$c2jzRNf3qKN|-$e0@KD9NX$XPq{yiK1fCM} zIHebu1X1|MxxnNI0@KcKl$co)fk}~3`!JpobBNLlOoAwUCt)hT7MQ8LAKE5r&%&!r z?M8@FqXiDiO(e9_Q{iiY8R#_e$Ma8Lia$>FuTD|qR7B24f;1o5BJ3dwZXRt933%Rb zX+A>19E3*9M+CgXz~7z}Kg+;(CdGFca3v{xo00!3N%Noan|S@EA~d#s&l~v9CB@%r z;BQHaf53q6O$uLSz?UY4zi7apPYTaB;JHcRIR@OF6y9mTJCec&4LDBLC<5jmo>IgWkuVbiksu1+3P0Y?5=x}&o1;)b&^H}~EaL4m z4diMAnIH=P5+VB$gdDc;?-FKuU>jjlBrHHYWw8q>y(pF-3crIe0|){$g+EG|8G&xX zq)1qRcuLGwlwM#GMB$%I1ZFFOz_jvP2-6YRMVJ%`YYT441N@Xo=a1J2*&29+kVU+Gk%7F>KqiR7A0p%cf@r;k zuOZCzz;lF2k?3VSWwEO$y`URG6h474TM-0i3a=o{j6f@4QY3mAPl>sS(hE$2DEw#^ zFgGIzOe-Hpn2x|Jgh`R;WjrP3R!T2038L`t66SUUfobE1t`V4<36mnx%Xmu6PD(E@ z38L^v39}nPVA}b&B<3!{q)7BQo)WW<(hE$2DEt<}JdPkRQ~5k#!WK7D59+DWg6))> zNNA_0!v6|ie!%_B#C+Gb{8Ic87^F-%*o%MTYj$`}fz97p7I&{62v{s=GvW^;#n*pA z**VSnUGmq8M=ru&L#P{n{%T~C7EqR>G>X6^;YgeS4um8D2%_*QXvR)ABIEqkNXXVe z9wCc(d%l63XCM!(uOB{f5&k+($fu!Pz+Z38fc3MiA&f_&Rr%A_z?AKf-hbh6s})A=&Vh zn0`txFbM+vN0@UF1Sa$!G!rmw>wrm-kZgEL%mAeqm;{0TBg~};0u%aAVjib5DH4(m zPl?$|=>;Z1p#KPS1A@SW{sShYnUQ+4o*MNSpxi`4J3XQQuznlpG4Ype$tC&AO^x9| z=ihi1{4+@W^UjwN{FO!UEd+m(;L1M&{;vtR&R<`-2!9nF2lDgKY2dFDlp94v?Ui^+ z0+b>o2|y6&KQv=!H6_ydtC5hc0oyY`7V-8+4CJ{6GC`pKGJw1gK~N9+k1*2%4#K2J zI1%ua#V)1vg6;%?{v*s)2m%xO5BdfCH9!@nNURFrDKR%tdVxt0=s&{Tgdi}X{|FQO zMVJ%`QH`g>+(PLECPAS82y-ifz=Zyjn0ZuNio~h_o)WWz(hE$2K>rbDCxXC){*#!6 zgh`Q*(|AhE9!f7T2?G6>4$M9TfeHNwod(%#q~>~Rv>=Oe6AA6~g#H6&zzq&S$B6ZW zS02A4f7!ywWDw~5j&|@*5%JFxK-1+H_$Pc~$Tekr>&qE#SL3^`#t&SLovsPvtACIB z>(LXk=Zd%N9!fO9UV^v9t|Qk5D0YHA)@c9lg47;6R|1Dlia;S0GUG zFXO=9*NzAOx1oMZ3H*)$KCsh$9Y8;vkP5*~p#PHq2?f4$;g>Vrd_BRp6a1T_;LR5P z-p$CjlYk)r!+RZO`!SI7-zb0KTcFPbDu4U)NLQ1{B(UnHbO^Xkz)yuKAA;X1;5&~~ zY;h%u{*YoPiP*qt3TMdhc?!qANR4f_z=~b9+l9>V;D`S+MF}{*1@LhJZfHbJ&we>g z`P^HShz+ts{P;2pOy34}C~BuTr8eEoSJt7pD+q5Z;Vo#|v-5huPA-|13Ux|3|DXaX zaw)}nk#pcC3V&6EcjoOuidITdM6ruRtjQfn`xzQo$l1uwwVw&4E-3D7n!l%gU+60S z-My(wRDrUE!*WlmvY>;40M23a9qk_kCwk5=yP{!E9WU5SG*C(>7Y}NeSH?KL5AiXE&Bv?kTr~t`46+AG~&BS;{@-DWUP<^Rb|N zW101ya%<3WO=q~HD^)i{ga{Uqe}bg!`UH+H8gu79s_uRBZo zf|lLJypFAtgLeKh;#u{ur+b;5e;eU~uJDj;xt%kF!$UW$aPW1MqQ+6zY>5ln+itXr zEhF9B_8B{1W0whOybd^s=nakR6nom;9$PiN^*$wd1Bi&GaS>oa)193^Cj5&tjO@=h6a5M5HH=wvXQ$NAVALnXbkqlp51H)CBJmw= z$#Uy}Wj2=DpTZ)|nSo6xJ_05^Z=-~TLeBfJ@JHzj-OKFEm(y?6d^t#iuEh*i(P}HB zz9LEy^-YyOB_zV5z8Ulr@s%ok5b@3Sz;O!i0_ zrct0@8T=>olP7<$(n4>7`q8pN`6ek{CMjK3A|q$WpHlf#DSxWv&rJE_mp>27pSkkq z5&5%F{w$I|0r|5;{w$>*l2USfLWDXR*;#h5kv{}lX;nGwpr4l_*xKS&f;Jj^7(?t} zFppIg>BBZI1kR2VLw7PI>c2{i*+0vuR1uZRyhCbLk%2#T6#mY!_&*$rKULyi%c@Gu za%1&aSUiu=oN&y(tajy0R_~bJP!y_UzNsFsGc+UIQeq9=wXOwBXj4MB zwzi-VlOYxOcbbKey=GktSP`Hr!qcsx@zWb-h8zpFLoe+{v+jf%#_ve}YG7x%hVg3< zKrqyu?AZ=f4m`o0-6aCUf`wj|)Vx!$-bhjjcv!%L$BDT_4$M2OiX4b##}YO{U!jcH zDHs8btTror)*Tm=p1x&X`8pAD^9b{~t-C#YR@^~x6JsGKOJxTO`sOt7Paq+i=FQ*j zP$)K{$Nt`kZDebl;n?|=Yo@nkEx#(Z!c7C~3ag^D$ASw**A_rD-_jlneME0+3j`cX zT|km3BJ*Vt=pnpQ87u;{jK(>BzV_?FFp1;1AiQiPfFrF;NUsaxc?1G5rTI@vQscZu zB#`pg{i$IuBvUS<#OLNuE+js)M~lxS(sQI1ko*m$s|#aYS3%&mP6sa)zdO4QioD@G zWNZXHWK&pgqxMzH#*}if&DnyZ3k3YG1YGae_z&`LUE@$-Y^-szQ^8vVwQrciu9Gxu z;GVAu8ls7$9Om#h&WOg%Gbsn^4|KL5ChFi&BDVWr1yG3Sr}Gbtszz4f_H?g}+r6{~D1%`#}DW}4YBmiGB z1HeSCXTOg;h>`MjM%qWE)i}|hFU2hxk$(Z3D0u3_IDd@bDU@RH6qN|{%tpct(M;fn_Pq*r;uQ^`w@!wL;RQc&4N)93pu#|zXhoU9nJ7qpeVtQ z;Q{BIBsPKi*dQ4_17z9_g%7zvnH4rR)PFN;%If&(Pk!=~PyWL8_nz$i(DU|+D?7j* zF>S_G=#ah@_P4}aRorMLL-B_gs;nCdjC6Q^5oKC4086qI#rQGJP2p`wp?Y~o{k@8N z4@0?Y9C~tA!`XaTmK*})8bNs7&cb`f9Df~ukHtAmST4E^GUxP#29b_Vqu|umHJ-D}T3Ef4 zMM1dTD{oM1CF2S{vXLMXV}ST5f>-Lt_IHDoW*QWno1^7AD1%_8U$b3_0d@|~9~fUc zQ_dqv7nfR;LxQ{LO|sO)sYWePKlDyJbS4P{bOxp@H)z#2U@B8k$A3GVf_@}rxG#9U zR(3=9_;Iy*m{R)rZoq_^4E?G>OqP8J1?YSTu}%2*T^)8Ipx9 z)L~Enf`1`(m_~Y7x4n^H9dgsWF=Xhc9CKUmCle;d$&y80pE2hZ@y4(ofB}Q1{-t$I zOqej{{8(3FZc7!H{4<(<;ZBE%ggOP+eN#|y#%K!O6j2eyqj~_PB<5ovzn<*zT@BxS<>z8M}K= ze*Dub_bvYTrwh>cpa8t zMzgblhZ^DqQx+q8L*Qe6bqW1$%Kl&E4y;7>6XV&NCP1bpqJGHVpODvMW^Y=VEou>T z;?kM=4ZbO=uW*BpGy!=zA#d*2yvL*7W1=CN zmq)#PGirzGM!W+SVgc`QZvU$23M5+yzR1|`a!uHPKI6vS2Gb+J`DLu6bP-rd4uY3vp*Elp^hr+Y~G*?2u9*5@Y zP}rw{W=ZIiaj2jcawcj*GD_&2I8+c8P?}#rCQ9fu31tWMKH!x_Bj(d_*+c}8?Y~@p z1^J2e#&Bv|B|9LM=s(8yKqCzK6K`WEM^m3eB8(wh1HWUA-ZSxGDEdOL56R2$eM%_5 zShy&?n3CY%@IdJW#wP@@>a&SqHB8iicpRvMi}(!;6L^a??+(9fg3rO-(?sVW3a>dJ zIehlMDIdF9O7qb7z7kf7!CE@Dw_%;f`DvB8J|)TQ$>I;x`GaUR9J61XeqHF%=1TsJ z(=aB6Fr3si4t4%84CEOwvjw?BX@Y?L>8vaV#Ib5+xqhu?7jODB7K34harXv|JU=^x zT!sE5@~Nq3_E>@rN|+5xvqKC&vs;O5xkT4fcM-p8Wez_qW`6z-L5IcdP)6VC)U9R% z?$(X!VUfx`f45UuHGt0{hd6r=O3v;1BzTSMwN$pBU5P9mtlS;zfyz${M^ZeWg#Khq zKt$2;@-K-Wyg0tBKitK#{<@;mi=g_!d@g>MSgzo=6}|n9#W7FF>8g4k_A_iahw63u zQD;9d1O8$)wF-O#DN0rT)TpxPYs%7~hl9T?#qIyNyhnk5Iptx7vQgLv8@vv!EQd}) zkvcf-Z?Q<{UhcX6^-s5OLvuO20H0eN2vtxcINsnq9S>zAcJP+DJE~a==L*wL} z0vTW)qj#>XKdM9g3j|NOErjVE`47{CD^MgJQK+Q%M+tg|2c{U@G0;HWD~}Z-$Edf5 z8W^YkntUbbYEB7kgDTT%viK>u&^7O22x2Gy6Q(T95XE@OB5}-ZpM~v*i9Dv%Gz)i$ z^@Gr1e&B?dB?Dv~>47rOVreRVQ1fQ_`7e2HR87aqtr+B;}&FT5LvS-l(fEjth`6YCrLdP4XqID>7>0;gmb zHF7rU$Cv*nrf(t0fj)GbpT7bE&`daAB!<)1u<OgbL#o?6A zmdo~Do_*60P3-^)d0#$>+_(%bY2Yc4?iX-mAb;JyfWNNJ5wT!t+etz(g0*l=Psg{v z+cK`TMEDWQCX6rz1VLo|o=EV+x`D&MHmOLn2tTW?*##jO^@`~<7*I-bPTU;v_K_Ix z?9XPqwWSb-trWY_QQEc-3r7(@q^-kJM0TH6dJ&07VAErGJGR-}B*Xldo@5Exf}Jdy zwv;k@m4fXQBum5}6+uD#c^E$+KBD1JJ{%r$knNHJz0=9v$An&i56gQPtDhi)u#Xn2 zUc^WjOwE8v6ZP@mejqhbbR=^KmHq7*hLK_#AeX@}+LN?|@-bXLIwj+Lv*k0Q>ZYfrz=$3NqZ3XoZxIy0+GLln6WLZvF-kXm7~a9VHW48X1D7 z3A>oDW0%R8xC8-Z`~J(+zN7+<6O+eVI4c0Jj1Ns@jZ5nIMrz^8fM_9`wY1>is75w$ z2eq*(KuyCmFIu&PLeZ+F^rOux<(o~WNmU7(_S{S3+#q7QKXxQqRU#5g4alm<7bxRL zcmb>6<G>4eLn~3CB(( zx_%dBg+CKfPG(>TCfGyg|DPu4vu@xt3ci56`$&D2l(VWW!V_{#KA&_VsMcadTr=1?b`AnnYwf5DB@soCLUrPA+)7k?F!7dQLkY`H-zy@>zP)6#j zl$gKquvo!Le~VnkCw~soMcP*(KTEXTFL0>HhmFu&BSiU7QSrPf6fZtNU7%@{0m)N- z7c$r52#w!__r=lnQjtZpy;9Fg2-#N&OMP`Jp3(Laf`~d5A%r^3pdXY9ZcUH0mk}67 zu+~mszoaPd03)zpQbBEXl&k%p@Isav{TIvLOiVhczM6xiDBF%Ls}60I z{p9^9L2J)NY_z=)Pim%LYhQ?<`YJ{EMPnLcuTpgc;R!~`Vxs!42?9IzD)C7yyA(VO zH|5i@?B`M9y?;i!Q2JZcjFTjH?)?+`Bh(-U6Gk8nCa}p(vIhQmCL0jl9Mj=%Q4gN{ zHXd+_i;AIsRAD1|tH>pkCQ|k-eRs48N2W8i?E?KHq5?QTFVZ-JWVW&!^BQNkCwb|Y6{PShm|@j4S^ zLFA;^tJK>tZJ#-3BgM+P`P@%zls<=P)Mt>rSxj(JK^Ha|*6|-778(I5u0oDkOq(k* zC^%Txz%>ceJN|amfhE(e9=NbEP1pnLK~^{Rsu-eTH1izr3vtS==qvWEB6{v-+En~z zbOk>fK4%Fzv4z>8ebsu>g~;$ZtE-(BYq3Vyein5BMNgi=@5c5HJns?1$JO>bgt2Oy z7ayd%@b2d`=a`3EC*q1@CwJmUj=%R2GD)YnejZN9r|>{^LO8*bo|wg{_1kFWJVyzZ z1vaOWPo|U4hnB#vE`0d;`!Gs%wL8j~sra?jyHXtK-WRd&itMyMVXFubslVB^#Kf-2 zZ3si*tpQ2Bea(ui!rKQG=q_!x(%>R(*a<=gqR zyLO3`n5+sT&SZNCEi3b%p3{0UqKf^w$5G=M-sSJzNVvkis4-Xj^&PH<6@ zof{!aN^v`nA;7;vC*{dnA+Eui+cXjTl+3_XGaC9j1!Vn9^S!!c<}OQv045{1F}4y$ z?kBf{#wz(`Nxy(Gs&?mvpGdc3&BrtwmYIomhw&9VsY^ z^08C3nD%DCLq+-Nc>!VZ^c3tMl?L>ak#qfmz2c^EP97U>WvD(R|z}#jlrAZPUtz z)XM4GOtdraUXRQ7w-WWoYF5%FsA~qI-a+EAXxcGkAFc9N(~sO;p{=yBG{9*fP)luT zq6%qnZ`C!(It(*Nuge*^!i3L>%tcJK&2D(fi#*}g)4rRk7O>K!reI=r7 z-wfjJ(alLLW1v599;^<_N;z;|W?69*=*szSY-MlEV=3Tj$MmX_9V-m7=^2HnW9$a(-w!P+CNzR#9CYXnPp#O@GybWB?Vo*LoayV zU)!+S<{4b+FPNF{WL1T|XRQZS1aEP$S-A|z)=rD%j5j~U)ka&jSXCZ#KyA0R>IHxo zikPA~%K#~OyZ5Y05vrsAQFblWufJYY^GsJt@Bx-i8G{GzM`ezS%Dg|iGW$ej_Q=W< znJbeQuS~y#^)borQTL-DNai0de2Me%d*4 zf>sbgD@s^Rj-VZ7>4;qI z@C>@1RS+t`+Fyn2q?#=B(L=eYne3t*bdlJ%TcLN+F})pbR-t!MMZAkD&_yRn@1xGH zwtuFCSE%(l?eDtUzIMsh7E@~{QbTwD9SvPwDSG_AQ4L&stLX8Y3uWdjFXu=}${b^ig@i?07_F1wrNDhtGdaud$beZG)o zXwF*CspV;lSt^ds?Kx9E!xp-omFF>X``zS;th7&GRE*;O2pVy5iDaXOmDG{v>0kWZ{Ex1sSZif2WThF(_Y^c1bQZ!zTlV$ZptbFru4d@%J) z*^HFXEv&3CrT`(VoF|wALFBBui}$%++r8LxbOE;9h&9y3EIP_EkqVmRhuCikU%}Rt zpi|a|T>Lg=&SD%}+esB!?AaempNBm!641ESf%9uEdCZ03c{OV&@w~nKN`~EIiaLqL zwy#KxZ8)d}Zv}5-4Mpr8&GwY1d--+Rtk`0xWPYPNMZ5)Hk*k+jXPMZM`Q$r+}Wh zV4k@V*op4fYD=+^kuQYOWmw7UV-s-X4qFSdHRt_xv*+-e7r=t6$7ThLu#guHb!-$+ zn@ZFiG=Lspe^liRWHG(v2Cs;s4#>+_*!!uPa}xVH6#^7SY0N1npAoPUR_iX<-8-b& zDpYLR0Vx#mnpMFp1>Ru^uuy!>kab_d+p62TA4NeXI;f=JBy#UlalM}!#i=>{QwRg( zK|jk}oUqfK1-;?jDZS@Jda7)p>P9A(AWV?P7<@JV5s|j9uP9tQ!?Ivr3VvjuxfIFeagkh(T|G(U@!y3%dO%Bki7g(qr3BR=9kbYVWo15A znc6>aJ@*^xyERTo*qE!Whh84eC&iYdKAi7_c69TN@PXsF?{2(6P_J$vITiGK`qnxj zn$9mzWuK^z0CFaH6`Pr#rP=QCgS>uLmKQ7HZ$3hXi_;R!cWYU9QMMDHGYigB%4_;q zScg-*cv~2iu)Hp;38V?5T1q$?3;#N1smH-y*VpG^ zM69Ojx7Q(r>N`=6TR+x`(+qlhjEIpPekuC=(M+EsN$CUEzKK3_1$|~Gp-+xMpR(Lo z5v?hIf8NE(Q%K~=wP4M{(LYU42%7+NU9WYE0l(PO6}-zt9W1gYh(ks;$YtG)Qw~I> zdV@+2{asXo-OW;C{+xJ!glw#I{nq@H2Wz=7Layx$&hcz^xU(eegRYcwkWZq)`P-b8=xC{FqrpVflK3J>MOqO?v z`N%1~9BEwhxsWrgWok545HY6DH)dUEzR}22WE~Rwnoiw3wo+oAVd_aUeJ{TL*vra? zv}IDxx}}^=#oRzlBPN{I>pnZ0B534s2>R=F!Ty8ClGH_4rl^9X&qRyiA4oRYIc27X z!BQ6?$f=t|`}Im-h4i?L80A|@qERk`KQObEldSl(uB`HmBGL6qs-jw&= zx}Z0uiTnd_>S4ZwZ9WSeY!6#$D~Ncymfy}MvE2ocYERd)f`a!8KC+%-dwO~CyR6%~ z=aXK~ew?JQ=>VG#do|Z4TQw7mU+wk8WQ|dH%34}8pDLdWVjDL zBBs1dKe(?>_Z&s-$Mq0jI$2R(rug`9yr|2GoB(xEJLLw4)Ok8`!R25-q!(W%l2ypQCk9rQPIFT0q*) zI7y55rg?}VQn7ks4cdf}SE50nXD$7LlxL0hvXhV~zvJFR8 z(45rxMo^TOp!fgu{PJHw(y`~4dyQDu;KpRN#`#GPPPeWnJ=CbpNGCr=7-4ZJmAo6& zD_75Mgy-finAh@1>SG{-ds+M_>PMifh!}Acl@9%(OR%^uy5tDvGBD`fb=KWD4o~m&+B%g@@Qj07mkK`x?NS>Z1*QUD#B>( zzX7H;u1|#^NHA;IicBZ<98f&e6sjjW9Jj8yoMed+PjXJ2o%y zm+CIkazamX40qsMyyd%%PzOQ=4My;%dwI6bpVts~E`-k?a^Mo&Nn32F598dKfs^V@ zqVH_V0<49`Ia3x1K_Dhx(`cGTv($8&$&$ybe>|*2IBRI;ra7xIX=_fw9Im_fY@MG^ zgFPukk~2Qn%Z&#xtE4|vJRZo42a04Mym-cW-Ct<(B*^-p{jev$myqA#fs({}mU;he zFMDu?*rz8Jc*r}|9QS5?fjw9PJ}K{JQ*??sa)y7juiXD?QfE5eIjR>iCUaiG#a0jXJnH4lr2Q$YWQ(i*NtL zj!P!#k%H59{BKVgriJKWOc%o?N-zy`N2a`hJCR-(X%CQZNWwwVByh*i{3?k<>xKNY4~%R+**juA3l@l6;Svj5*vP$nLfuYU z(c&LsAx(l_BHM$`bl`*veFSVs9ZxG=ewpqw;N+-%5D|i0 zzA73s!UREmNFS~{Ps)4cyy;J7Ex$7Mq`QF^gR$DrH0dXq#BSfo;q#8=SF6{{J=!J8%TbA1m+Wq}_Bs zLvj3mhF_zBi7_F}l;T(&RN7*7Mmdk6&c+$3xIOX{pqQ^?_&kP})O{3R?ZQ*@4fimi5CypE^}M(TAz7a@cS6S*cPnS zIY8@V@gYZ`3xRW0{#;6ATYQ)DU>ioNyIMD2W2;-b8 zh{ba;z_Fiu#9>Tb3}DGVtvN5|FT!m)P!GP+5DXn0AZS*?-B{;6gmv5zLqDlK5B=p& z)W0sNbgCI-7OcQ1I69BjxH1yrisz2tv`wtVDegYW#{GN?v0Wvw3ZAn@UIej?6~tzD zvjy|FpHa&PN&kNA$q5}8Q6-W_CXtHqWtQ)_cq4t~{hF<`>$r8aj4ylR!ZQ9wz@&`t zfQ&zI3gSIVkL$2|pI?QCMCsA{ zvA>8oW7HKP6Oe+g2wAmm%oQQ^;);-Zx+3H{Aq=14fKd%zQTU_Fi zSSr7DyAY{KCI$K}A#%AqaZiXtmG^{**%?lk7+xt|kHFT}Zwg5i(*5rjDg-x$6nFal zFjIJEx#$ET&riWSAnylpJwwy6#2q0w%R53GV&3&GCMsFgV%42Y{Ni^PU=EX2O~M-Y zggmGdLQMO_Jt5VM?g?>Ys-)TGU>@2dJUMhz2uZwoaxO;_jx1*}Re->ZOFW?hgqY)h zjSDv^|7nCYyV)sT1Xd>vJ%kng;X0Pt$PdB}W0~Q-ZlRjHK25>k%^Kl%*!FLNHdevAtI=!RPsM<@49uOD_*;I!rtjLnKJKdsp;0S2_o>tsL{ zxS)8u&f;L>ur`$@V6dZ8#aXmJlTW^$j>#egwU)W~A7HpMFD>ezg5l0mYlL9P%g>_( zauFHe?K#zTUXr28jXH4UjIQG;qlMd|UtCzYRRbo4+ZzyWe;t5a`;Z=G z*eJzk;1L&Yl3yX;UrfliG47>BFBPJv+4${Ic$b_TURnsd%(HF^;##T$^ulk?BvE1u z-%D??(47!k#2kTA`tpT+5h6F?SVzNLo08Z?#l{Zk8PCvW9;C=cEs$s^<$D>&Q<6+ zc5n_Y%smH%DoiZu44g$qd7#I!1U+zGGO5OUjFzCh$Jl%7e7+baeiX+)@Fx!PUB$Y! zI_&tV#GK5u-v|3Gm=!0Bv7pCR=j5|sPF{O#^`y0#Sge|W(D=1Bt@1*gKlQ~EQp zIEIBWZx35@nBm~y%$yQ+eh=h@oo-%;?+#*CWENhX<5WTukYonn<2?Iun`#@3XaK7L zyvnKIn!gR=3?bPJI9-^&lQi_n&*K$tz7$q@Ro0E2BpZfGgHNI+kBLR21tNDU+4b7P zIi+g-aecOPy_oH^cedoPx}s_8fzUo|;r$hA^bev&kNj`eD6M#3 zc%Q95U9Zk}iuZ}!qm?;%sFZ@=eENm%#f@7Qth=(xbf>i!mQ(nvB}&MO02qzE%{N4G zxx)Dkq=n~mMzeBhn_1aXoAqOK$u+FOnbFG*vfYFXQw-Zjz3{lq0wNMqU+{U*BIswj z9RZW!c1)VkGj?402WFXBR1)uaa*>Z#vL^FL=igkb$=4A22jN4^$#T39(@b*znk8u;H-_v7smoZS9{{ z+y4Vxv3wh=?+brb%$u%&v8*%VY%0#ghF<_1&Zqqj|J(Jkhxgn19ku;G67>=-#kRdX zVm$m_CIhCyBiON)5d)$-=bwl(pxgilqwgwK=gj!EWWT2j_UqZ3V83Hf5DE56MUPy7 z{YGv#A7!1#?d57S|K%i;pLDkk=X1E7JQmbicJE$XY{RZy0!@HROfYf1y-}+f;6+F> zUBE(a(+xN;Q)+?-0M~J`goGOdp3<+8nc9K*`$}S0ag7YVH*wOgcvd-=r_(hu0{S_S z#>PJGhbG6S?m<7l?{zXea0EGi?DQC21{D~@txC9EiH@Bf$5iY%-4n$pmq5XX1~Ffo zMs;Qraiq3^--kk=3#oAj|ALy0oDz;97mZgef1NAtEI3LshK0{8ehSb`Cokf z^c4TzhjvmcX)KfP$1sj}X(o*zj9iCFd?kdJSm2WRuS)Ps((_snQ*>F5diNN4XedGw zl;PDyQuY){*>e!G=V{_C14xPxmfA=rCe~ADbsOHOTtISNPQi;_E-cfu+;2bEH;`>`hP01XdX+&87%B^J&55Qe%ltt z&~|x6a5n$AQ{baF6duDELHE!Mk{2LC=zQ2AW7}b7S5yD=Br;H)%PV7NO({)FIGJ%M}YyR2Uaozqw*D(FN7>-ryo()j~s%>sbsB{`!utri-Kg@i($ zKp@>LQtLJ>8ihSg#%+S;1_^5yGjg#EiK*(`_{t&q`poarFE{@8aSxppp@cj+lj!ec z&MI)y8Yk{{strf7;$uA(Q!o9RlNAH}Pv4hQ{8UW5aC;dRZ-kJio8AZLruTtxM8E7E zGaT$h8Nf|Bua4+=eH_X0bBX$#^BfA!(Voo0{Y0kf#7{1xIt}sakZU=7ANK!`tqw4$ zE}}bRg?^r-LZ}aX30ISkS=jerF7%3uP5rj;hnCRbXbIiy<~z6Q(=qs7u;W|-3O4=0 zDZ#gYVZ>Z4LH|6P$$q=wdH|*#xEB`p<Mfa%UAFlhMSn(NBVednQk)JLW zyt1GV`*H2eX;mFQ+(8LF_E*e)=kF5R&T6i1VzrK!#1Y|rL04U@M}+kns4es<2y}Tm0QylP@?78|x-jilh4UW{ z3%df&Q=6PGg#WPCx_e&NP@3w?qHjTvgJ53#I`jCi5QO^U{~f(dY#_I$h#LIAD_`%g zq6Yr4<>LKC-}|_B?iL(T7U#%Lk;{8SEAc@?KKz|(ZJwuhO!FLTv&q2!)3CXT-2Fbm5X>!%Y_Fqt%9nC`|#_BsZzD>M%-{q zwYmxyY_L)%-J1h%bg2!S2DCCFKcyL)F);xqKVFD9kCUT_+k2d zHh)<4O|kxtGMqo`nd@A0jqt|sawt_gZ~GwVq`UPTiEp38cNw9*q@P8{`tn(mo7&Oo z2H_Oz9#54m2nUq2QQXHxQU+3%t#z^n+4$FqnElt{x(0LO$Lo!^_H>;~D@UEF)%#Vf zn&zV6F)Z`Qk8G$6Z{G0r0ux+04r_a-#jnsAUx@D!&oNQ=NlvL2XZEx-@%0PI^_CTv{cAjogXn4 zvH3Gk1sS8Rwg&V_*I&}CEp9eB{HewDj296Ydmdk|t9?3!8*#G9>FITa3-Cr;fNsDq zz8$0}rLJcuA>8%Hv~a(>wPmUjT;!=OakbOE44#G=IIE0A*z^}FKhmyf{nhKrM=tr1&M1mNQa@U4Hh z(czUZKp2S{0-0x^dMF0fLuD*#(+sK&&NHN0u)ziYH)MHsuO7D++At55Qo_>}*q<0m zAV0j4SgbbnzCNsM3Ve$fy;7+HTb2#}fIsvS^FKoclRzA$W=+ML)P~MY2M%B?-`Tl7 zRch!AXz$f8jdNr0(3i0AA3g%6Ut549ze7-?nRW8iv93zh7F&C40WHbv6Jt5vE;fHd z2BR(!F;Cef{w3zqjLxf$M`h`<4t-1AsCjL?fyhs6Z>0ma1_oK7@Ey?QujBM9NYuMY z+1r%AuY58(E?Iu~#9(+}25n?Ow>Ly8^E2RD!l?!P;WtzOd1y6u$7IOs9Zntqm`&S;svrS2RZ+*`s+aix*@2PCX=ou~F3xV_ zCl5dP&(@q83+7LWWls@_gU}ar>b`$D&Q4_Eq{j>-b^DPd7lA3L9M&J)(8(4Ar((QQ zODge0zt!{}%g!B{(=FhnV1AaVwES3h{>U_TB8~+`(izP7wIz7XWz&|THi)#MRdk#~ z4{k*Ikz9@bqx)I(5kV*Hhe366x}@qBq1abrdXJm2snjE}>_Sn8rpvT^sIYrE^7-JwYfI%wEq`fZL5p4^~+lkrPHF#mf7@AMDl(Rh`g zy6`&i`3!FcKDOoOkG?3(_0Q1vpY$7N>4Si{(&PaF3H}*cd80SB!2)e1M<=xamq*=8 z^Sag7+)EN_Z5G!5hAgYchli|d9pR@Oq>=aBnK-0}^2s9zWgxzPM)kla&Tt8}_%fkB zqWHw`ipoqDU;C1uIJ3$q^C!+6z{V%iaz}o$<9*qX>jZ9&_*h3&MoC;dOno&?qT=gj zHuL8`z9$o!%VlQVRKl&Y(dRcpw*pr-{RY`|)PtIyO-*-)*E*D7y8dAh=s9AZ1l1Be z0D7z&XhToxBxz9BoaRTx)Bxvyb(A^9A55R@`Wj8X!%??U^lk6CL{J=fVeQKw~a!6-p{WYh5Wo)m17_m0(r0I-3#Pye(F0TTl}1# z|5ipBEq+d|Dm0LbfV_*Yk5TJ8`HoS@ZP*V!3b{>y&#^VqJZH;~3heh^LdAkOG&{PUtGfdip@~693vyA*{3Kt60`@88zVsZpi_H%GW(Q$wk-Zemd5d5O_e=THd^4R=bL&xEMRsS3qlOt8! zJ=hEd+p5?|hR@E8PBU@4#bm(fbDCUS3!W@i(*K)w!=G9=)|#Q~^adA`9j%)Z^wE|G zOeNhRik4A>u>XV_h`asdkF=cSv?~IKM^t{%G(K}5{q<6r#SFp?AtgpLIin>DiudYllq;{n8(+WI_5Kw788l|9%#FdAw@R|1Mp z8N5fE3&3HRFGiy4Idw7qqU#5Y(4Y~@6|;4Mo<UP!gAnZ?3V)5Dmgsr{(VwXcld1>ZUVG!x{VAtK=up{Na=IhWL7*e4Ed7$k zs4rJ0ad7xwBIr-udv&q?)O;m6SHQXt5J6oN6teP5-LdRP$le*Vk|qU%t1+Dlk zB3w;TY`0;U>vApJ0)J3ffx8wH3klXfOX`v=Mxa zHag-<2l*-lrZP)d=qLU#)KR!G#vc=Fa7#JNsJ)q28yJSC&r@~bhvwe zM5GVf0e^}Zz1x|uL?^JEf|O9JG1zdS#8l(HPZ8Cp{&^s%QE71;akf2TD^5OY(B35RgMFWY!CeY& ze-dnk%OXWWSy32-up-H8!p1+3crpu{vRdxe-Xysw{f(NCV*bWJ-cHP`dSODKfGU|D zmc&d?Q`YJaWLb?3f!2Q&iG+kix*OwB*_8df_D)quOyO^$Vx@M}*Jq@o6jppIOx@6| zmtK@Lic~o)(-&m5Om5I#3!qwXL#*h={H;eM&{oW>@GQt$eXUkwlL5&`V+L zHIgf_Y|3cf0(~HY{^G_gx*+dVBY$FqWsJF4m17Pjg|U^GCx#U_ zRxCx~K3c(kYEu!+hzX{KkWr4M$zmj=DyiCC2W%@8AQfberXUBx$hoxaKtAU`p$dzfoH^ zgdEp(4dO{BkH4&^y#h(GH<|pZogI{)^(=NK4>i)KgOIFBPu5Q+rkdN^KQS$-4XT<&9t7C^#`-Lp1X(2p6|qP@MU2zSZSG|0@LCg^b-R3 z*82k3A{IHR96ddz@kf`Z(Ci4eV(}+nb74^_J@H-oNQDJb!=YB#m~Sa~_)i+Xbt|Xv zbr{$B6dqcN{A&p`Bt{3}vZ}_B(yKyrJJ}8ugBWmNnA<>XyuCoym%5I0HuG^R=s$s=)eP$PY@(5_ws!zwz7v$F zTO`7ja@2E*Inh=?u>T8u(->QEVqF(qv>sc*c?!OwLDl>kWm0n*GhHh@K%X0inGT1C zt8K*vbEHKL<{PF&bs|x+y4?YYQS30b58x7jum4^ac@1TNt?#nP7o4KSZqecn%Jow; z0egg!H0A?9m~RIqqRU~DljRqHh@ywl;vMU{gju_ygS++OU!+Wo;zf&nJ(OiwWI486 z*!aE!;I+lc$_qYdly!ibxuS>v=s2}AcsCjtju7QbLE3QF%rFiHf*H``9`M6+bmuOP z`dZ;(5!(*p0@t+SO6vzKt~aiSG_rulH$h;=enH9vYXt~LMFP|vq$xx-<5zo!Tk`N> z^jLNq(%?EKtlEjK)lHD>hStM)BmYnY-z63LRI86co$`8UE-c9)v&+?`kgFuZFOZ-8 z@6Auvnm)Fk31#sMQi!qa4b%{!#hdhIwo;7w02Ru|e01QPaX)%e`-%CcAcKrZDH+34 z1m#)^;Sc;Qn>8g;m8VRfRTP}WaFIQ4#p>=#c$dXh=~YwUB8bm_ba$+{6P=7yu~s7Q zMTZRq4u>MdH?Vp0OYya_((mEE?znA^-XktFohK6QK>g7j8-4kZdcl&^;8I!%ZjY^6 z=xNDXGf%U<)peW>n_!EE(;9))33rzGwTE(e@XwGJ&@4Wue-3O|zDTfOXxu#c&3I@| zNWcAR#T2a~->*KMt1i#u$NOV3UAbc=db>@m+$Waa1&^RU_+k=f^g%|saBwy4Rv5tdQS{vkJeEznAU0-T$HGFn zW8rgf7uTaeDvb_Z-zo|WejUf}Kx?@2)L9OEU;yS8bx@>A|Axjs;~N@P6W{}7hy1+a zSsKHkNl0V)d20WI^lRGx0MFYIZlk#E^g`1rt^P%pHe0LTF`HHA;gVuV zYWIfu!?DnIh>)AV8}Ed_y?{=TSVq3WWf2SEBc=TOi}8eqk?>>>stvC-yL(+EfS~4V z?fSjV3UAPW@o5MGyCU8LsAdn<1!EdtKcNtYw)Tw@pjmtLvp;IR6ZJku^*&B1v@)k~ z&cH~0>;s|k?xT~7<@xNvLhL}XmeZ!6NO_JWe9|56#0M4+tKJ@2Rv!^Gg1my0K+-EC z-rpz@+`_ZwfD!^3k6HS!*SsG`ydPUY-~;?M+&7MoAs%b%6pJ9P%I*z#`M}k_5xKB5 zt^U9W$}!9^HuklB5d1P_7_8E~AL%Wi+#=qOto*StIZ{&O8oXBXp4u?~lqmOpq=F2< zeZf>CdXg-o8r>-H>k~EV*??mkX|!>-)9EL7H^1|kxNkodenj-lB8(n6j_%n^U3eTd z$B&>nh?s^6Eq$#+C=u_l13=lMg$7;<@W94$$&G9{l5aJ?p&Gi{r(sR*a%4){#!}KO zq*GVAV=JrW>?_&8(JchX7c>esaB3Z23Qy|j9mP`q^qR+e((~V4_*!IC*@BfWT+R*# z)O-$hFFBHEt48V$#OuDvQO>5LT5X;#toU(|MOUrBf=G|1ZUZ6?DF~#f@;tqf8?aLI zRVN%)M>XF<&^TqRE9+>)w`TMi21qi~svX(~eavq}hlu?{nSoXW8~CjElW!rC^l+pZ z{+ndNkG-cYuZ~)&y7+_+wL$NG`dABl8WRm-0BS4!m{tn?MF(hdx zLE{X4a;Sl?YRT1WYY;9ejCW90ti+wqaBFxtMPf3U63^ue}1%yY4{2H7Y+*!CwIKGEjI zJsI7opOt@(KIn&SiV%InDVPECAuMgOIiP}rJ!n%OTD9>(%Z7(mR=qH4 z-k3Hd{6pA1K=Uko!5K#{amAHsx3=7G^{(byvmP^^$_CP+O?$#8Z6~L~kw79%w*M0Q zFG%K?WfDI^c8D*&4ISnNjj_aj!tx`!Ffi3xcklnt%3GYQyiu7;g2?>$n)`F1e*6X! z7b6wQDE`G)DE_UuOHQlV2D@vHI{$gqyE)?hE94Ap5mLw775)fV3A~pPsc>7ir<^2X zrTBy5m^y!py59wEfjs^VEHJT}tyur{l;sDn2zSoZYPR_K z+h_}0^9q~41sqI+J+9~4KR^WS7eINopIiGU;CSl(SZH%B^gP2+S*UQZ1xYZl+x6jt zF?JANdY@$rWkb&%in;N!(ou^uS@h<&joAkxu1~t+5Eh2a0$tK8$6?6l@W3M%pqEZ+ha4oKNlMJSMe}YYl7Yal z__bMiya;{6ysvnw@+O zQ0Wbah(`(^(F@PLWAp;(Psa;r_sgf2(70%oje590qqwuA%7N2sbk6`j3Xk@ufuKI< z-b+xlDo0(34+-xTXBFm+zYTt86WT(^{(4C33+gd`BR(?YRM3~ z1zYSBUpG1SC0a3cq7Brc@dZ^m$=7Oae1Me5!^nW-8|{O(@gM(R=H3T9s^aP&-%U0l zKwvi-YE-IGqsD?Y2r3xVgs=%Jf#qLvRL{|C{OXkATEi}x0Fyz4PNbR2@)Fh0Az@8ss*~WzW}W8 z8!qGHgT!ULx-^Z2zyanLI8XXCS6Mg zDl^8JvvBKW@DtDKOUjK;aQMe~^`CE=6E^7mm#?&4o}3ii=L!Cg8|PO;AFRc7?ZeF3 zZp6<>ZV!F%NS|%Fs{sf8^mzvAx8Vm178;cm@S5OHi?z^5T_p<-FD*1;w1IRsM8$vp z+O)M^`i0zp5f91cDA7H`lRP6myf(e^m4I2qi+7%cmsrqQ3ret524Wobvj=6Vw%u5R zYn*O=u!-e-hCV;rDmP=cDDs5!1FA~r?U;J82Zu470)#$k$W@BvbP;=Z@|j2IDDXTe zU2X`d%j^m?dgD36zyzy}wg zKB%sS%Js66ETcT#c*J8&*q7X9q^~Oo!;gt)9X4Q=Y|4KX9=9VsAYI(b-dA}Y6kTcR z4e%(i^kK&J!kbR@yvgOu!GPK;AAo)D)PM5Y2f?%G+QJhpqz%~Nu=-za{J<7hQ6?@R zD58%R+%S+)!)4tq58hmE-kz@BMH`{_LJ)xAnu>6dkB;Ta`&U4taT0sFs2lyTXkqyF z(KzW7F3PfcS^Ee+r#XdMUew3^Qna28`8<}1Z2ru2GxG)FF8QTNU-wjfcG5Vw*FZnH z@rBQ+86IAd;DNPHPZ~agx#L?^I=5vo<&~*j$V;~(u}dZCM%{mPQT~G@{q+@)?_pGnlI8A~8pYfoDr!_(GN zF+5gxhjm}m?kIc-`4=uoPDhh*JQePZQsDq(q((;nOy@lI+JJ~9pT@)p9#>)l-Y>sM z@Oah%bOir6@l&OUDMGJhxKjb!pXyb3Z?_#RrHO;3ufn6onH?f4lnfhhkdAfZok8K~&AR)L z(Dd9W3oYO2eL>Mdt@wiSsm0F#x#;*e#*D}60&bglHZHvd-V-v_arlym_W(6qb;B(M z;4nQm8&&iJg-oWWPP>3Qz;DChSqVc}q=jUj?#RSqHR^-A>0Ya=e8`4{q3PL+ZO!ob z6W>CEEQe3|5gebSCnm!Mc`tLtG;_jp_==W|45&q{_J>WMN(L9 zt5)mbM=FK}$gjYx&|=)&FXI3<@5o@_6vfEf8w{)EyoFxc@y73!pzzx<0bGQE9q*2kI~5 z_AGOb=d#Z5yyIZW?SB$?N0Z(8H)7VfwkOr7bbE~JaYp%Kdq3B}fh-`hI4z+53rqmB z$aI_#J^_*r<7D#?Ofi=jGs$>yByt?)@bDzcO=WV4J>n5dZ(Y5~xZWrue~zbW9unYA zCb-I5?e_F6C7Mc)oBs5Gy7Xg!hi=L1D1gDpAl3qZmZb^_kprtWk9zMTZG5S2cpq*< zj#Q!Mo(o~!4c}sgp8N=oX6RZGQ^0w^I0#gr8(eAB!#ha}N&4Z@k2L-84evDXaEIPn`>Q!>BJ7TE zCn;PS_gDU$XMt9F%GJ|wTnnBY*OWg7?WXLi_PB6hqs1Lwn;Bl1U?#S=$Vm@8j=MG; zTlkc_KU1z~p@D&%zKG&EF0B$#w%C)5vrKE#^)WYxqqP>pD$T*Z&=>C0lUP|{XndXN zJRc5Nywo4;J_WW3Nhrg-4foVmokQ0LKBqZNH2kv=eyqB?Ksuqt-lKsF^;sTBQQUN#YVHr zLZQ%KSY5+yjMN(uQ`&suYe-r#x^B3yVk~~RthN6keT5&W45&MCUup0_F0!Ejq<5*# zNjf)8PAc+Fm-`&B-+&q&n_Jjfqm}zT6jf1u=G=eq$JCAGvP(_3a#J9#=sa`orr6vZ zv1+8w-Sdr#<7dwL#n`OW#i-v*lt%a5QgJe2*3e>5X@zd|m9e>@rE{q*%xyA>`rZxb z;z8EDH~-e@n zzTtT`fcN*FFoILjE8%tgHGZF7ab90d3nIN4HLLjW)o|+;Zw>m5JEC~oiU$nTYP#`+?!KlOPd!NA z{71}SMVW7^_;*eJXK|kq1}#QzqG5Xn2CLo*yk_;FVXMnO79C%>A3DL{dIy?Bd;COF zyD(9xKT~I1xLsWoa|Uu%QW{BQyaKsQ$O z0WD?fLs?qm!jBlC!qRRFKZCuEYna0ig1yrd!`rOk45�XtTOR1A1p`91>!5VeC?k zkGawEYkG45)oE0=#+%g-WBHARbrm?jXtgWhmi9`BM!@(9cK6bWxNaH-Bx?2tDd0k_ zTq|{k{mtsBpL0O%v9PKh$E!CtB@Y6LwN2~I@V9kfZ`?wlS=!1a;!&;);U}{wJ!LGk zC;@fB4zver^wK>w9q?NT1g0V8J+BWgQA%6hV<~(|W9R@wFqO>kcQWK-=n!3a_`AHj zi?iU9fC);wq{mv4eLn0&rKr*`CIje}Spa61X)Zud&oUdD(=fvS z@>x;vB?q6o53#N_GtCe`(+=h2H5~kWQ;))JJe9qqR)5O?a`lFOf-%gQ=EopZO|q*W zf?dHT4t0ME?%YHU$lD!7Y0y%KXlGZ`&H)-wJir{#m7x3-l{0~LG6i0f)#a$yhU_Xc zbO>r0>QgR4Uen~8N=Aw($bNv_GqhaY4LJ{hSkV9RT6S5B`Vwdy7*JHT571y**KZGd zMr)vbv1<*|*9r7lY@DXIPq82S&>|9UN?^_L3h@@;>^v;_6+JaqVMu9&-M)(3{W4ME zyr9hw#+fsmY5Z0v?ZrqNGsqGdz-#y#qT?ah8%Q+Xs@JBW+FmryRh5m^QJK0FGBH6) zFpQ)0^sjqJPuoF6uA!Wta3MFO0qio^Enc(364oFJ_l3wSG54Tlu44L^_o-1L*cea1t;A>DWytH z&uPQYJb#cZEDEuxc`n=^C#2>yR}{@{VnFZe+S-tQgaij`9NZ74(AIs$Dvon6S2;KM2;ZUZs&g zDlx3MBiJ|weF2tCsBE6`6;F6sjz>&<=SN9qPEBt$2s_cv4;)np5A>G52)l)M;h($u zM=(L!*o^e=dNWG9y%}CSXZr9{l7&Dv->l0q;+NIXyIUlKGG!Pp9*y=Cr^EgCRtzk! zZ)>wWs$21ZblK3!*NpSL8H=DVD9MJPIWv#<1J}Hd59X5;Lc=9F^sA)1@eP@ig%%Nz~bF&WjRdfAh!AP48%RJrg2OeG{U8|HG~L1!p@?v@RtR0Y#w?K$J`~Zp{kM48$-JnJA6F+_f*q@-K5X z{HcaCVDqRKR@j{I`^yLMC}Dio55~(Z_^rj78rQLVeM#m97URuG4VR{QeNYNz6hkot zrBFt3HXxpo2Z)RF5Hk@mY{QgkjG1Ok351IS<~qskn=&_m&vTIs$SSVDa}}PeyuNir zmp7wM9=>%%3Eucnvo8Sk*^W~j5KlW^jJWaA3EFdHXlPua7PG8G!sY>pUu3w(3hYm% zhj+E%Jsj%9ZzQw_zo^_*HKrnv4whDlp9B;1ZmjS@UPi}>`%w|>?zD(kk&QRV-rkJR zaukF|wSH{Uk0v}o7NHhA)l=}fYurRh7a}^&Y7bG1aTSnpQWphrlSKsjcM&i%l*<=$ zV=MVg7C5~%RD;ju;e%^UwoYNZ5>OxIfaRD>uYQ<|zV0~j5*lQL*lcqbWlyh9%I>Id zr|#_8Y54JG6!^?l^YMiczxPD2bvc^CXsG`}8vFuubBIkqYyo;&nt{$P2&|n}-Kr$L zuVB76qq>Di@fD!2t7UoWD?oQwcOe$ps@d1bR?XE))kxUE<-P-{xtayI4YQ44>gK9z zqD?t`C7KfA$M|tk+B^PbmA*ryUyhIg(;4S;&JnL+AS@~?Hy@ZU%{5NG_r&-QCOySQ zuJuF0cg`mnja*lo1rx8D)>dpZuExt%(+(Jo)e`758aGSen9)e~cGa}*d?{qLeLFnr z1GmN}hx$&D*0`}qpDY;tkJh3Q5y3MM;i{Tgv5J(oEit7{$GSo&4Lkr>e7vl(e{M_q z6@=alHJ~`I_wIp{U@8P90$i`(H2EnKT903(bVZ~eS?7{SXfq;VU)d4*HUlb!#|8aZ zpZP)r52jVJBzs?E4X)aHWjVID921@tJFCoW@L_GCz*;dupTZR@<6mB=*8R+eF3L|J zPaKX8&R}nzgPOkBfe8%J>UAC*5gZ_p5A=wVPP0N z+3$lSEY~+=8ZVg-xwZX5qq|Uym0q1S+br!=HwDO(1Y}u@E-inYojzLb^6@<| za;du@fGz(o=xT7HMx5}*T%icdBv_Nj3kIu#P|Mbb_@WfvGo%E#g0}6N)%u$+8`O1#&?%=n0!$rLMk2 zukiH|yq_Qr+d=dSxD7!%LZJcC(Sy`K!}{HdGiPL~?Y|eD^l&IBXtzg2Dvv&tZd*!U zO*k^3$%AbJ{M%gWTkL5VPx*HmCFto^qa+*dQjC(Eu)hrkWn86WiE}`GzXT%%eoz?x z8r&$-p$fzIB3!-Zu&WY=sfXR#Hxn{p7qKPkDYGyBQZUOcLl(VsE%C&zBXN0 z7P>by7a?~fG~bGdgcdlV#a0L`?mh`dLKV)(Wlo55EB_*)N+)i$6RNgC9ideWndV7s zmDwb`6s;!CH3?59A!-t)dfpV+go@7rDoDknqtPVfw|*ytJhDUJBQ5hZsPRvo^VtP> zF`pw3e(wqBml#m3ZzsFFyG^#IwoQDX;*6Mg>Prn0Wtv1sK<&f6Io;dncl9{>xB5B3 zL8V<8h*MNsCL3*msy^yOcnezyODj)fXU|Hj1os;xsLGejPys8jVsA&eh}{_ISC&$%GDoW zo@LdWOv{i2zR+yKikolVjHR!g5aXj$4k#@u48mp#HZZV7x!V^GZ3E1l^<-|;(5Xh}Xf|1Zp=VPlAqFAZPt<8z+bV7%$P>0B9XfW|@liSA^ zTI2=~l-}ARw8bK~i3pkkTL9;&)Z-oO7jNjYXtX&qQ!P8n=qgYE;Ul>vAwmBxHWn2T z??c}wF|d&!YcNF}`}p74`&HLk8S%+ugcQ=-ONs}+WG^YE-KRkWd6A0K2k0MLyYE4rjdxn}Oku(bu z>q=eZ@N3_43VqrQK-1#eJ#&eTqRa2qC^EOOZ>@=<8pNc_R9k+dnfJ5!YKokOeqe3t ztr^mxEtf8nTmMeWB2 zO?j$92B6e#?nkzPdNUDpwl)or^z;DK{C&)b7%}k`ijrd#f0D9~Y<76>l9izpP48UQ? zas1$$bd`0Xd56CnfN~?w9+6iA^k|R00e)}w*dYWtrbPZnW7uO9bwnJe{QsKWV~5yd zKa@`}v1n$kJbS5kL#?yJkQepgG|Y_sH>mQVs0VJh{W}{=u-({-LIH#a-P5eb{9Xp! zSf1NOBxLPodxqPz*k<2L?$%&qhPx6qBOUx1I_WB$bT=cNE<6c~#(?^P)sj8{iQBN6 z6%LAE-QvUMDasfEtxs;_Cc9#HTy)UPgmSx-5+h!?pLaraB9-rCHVxI3*l z7vc>6fqbmWL+^7o8MIzt4FUCybE0(181>U*7Tqq!7i(uTg{%h^Uj5uay0tcD>_cyw z-`p}XW6T_yi4lkzHMjusx4lZ&mp|P!lb; z8yjfYsY5v)Tz@y6`2KIhyCqdBy8K<&mMIiRGr0L_&Vjoe9CbTV#iOx!>G zIxY)w_S!U^;X$;f=eCh>KWMK_8KZ8(>PqIe_r0VwiTm!kq_qR8{Z}kBc5SN9GuWgi zQ=F!^hhyoD`pU%QCX-qRyeGu7Noz_2w*;e%vPl$!Hw*@{!*2bi^h4&F4)9LXTqd8n zCdR#AXaupUmzqCCltpeoK+yEJ3Ag+inniNsG|V{8Zz~T8xnaiY0=Mj`G)lYqNsat9 zdxuqMd818@eo@#T#wMrXeNP$GGQC1CuI)P15$ zguL-nOc2s1i}6J_P^FL+ppvVf9n>e-HQi@hC))e5XSN@-`E@r)Qxoa#^3!c{=>9!p zd2oqk?H_M+3jE^f3e@E_N9pCX_uuKGY&Z~zesbY-Tcjk7A*?6O8s4C8fpLqkYQ(2mE17>MLPZdGgnKR;0uG*=q`h38Tt; zM!+KV0iZxzBq*w}ks3GT@Y;yV?D74ZaE@stj1`h!RZ~c2{+W1QII`hdH@D+dH5I#Jmzvxk2`pcM4V{%Z-Tb0wrNUG1AoCUa@2ApR#z-u=E zD5k#X%lio-+7S4%zmGv!V<*GQYxj$?>KwG*iX9NZm)PryvF-y^kRYxkcc{!Hm;NKD zR1bh%b7B8`^CAmoZNWPdw|fQOK4p6T#dbg?b5URxGX2cS)CXAsF7g+JQzZj774R9i zX>? zvOl1%2d5BkBG_sSFY>_eQzx>IhQAs#WtcGxXD{G60Ecw;!2wiS@E`7~w^=E4J@M_Y z9MJwU8`fQOPTT%33w=1v|GAUrox2h=f4%eh&$lLMKH&icNtb-YvyKBju#dh)cx|i) z_Mtk;ab!&o>>PcM?Mimh8Fi&Lyw(oZ_ggO4Z7WUGhy9eZx!;6d(!|{g4Psp}$~vpsLD%bPFdVN`)C`qk(7=1+q~X8|la z$5|@}kjFR}cdAn$Y)#^?&qBIb)r726aXSyr6I=ll;}WJspQEfmLK@yrX}>wcr|$i( ztYQS079N^52p%5dV;~;vYEb^HGCAL5-zlPQ#To$9@8={ zZ2U>Huv;yTwQ*gz@M9Xhjl+_NsL*@lmLBx9`{UO~S>Bvr@A8DkBrx9KUd-cYBn@s9 zR*B~)+L+>8=-5iTmv~3DA-W4kSzt!-w-?{_-qFbq3hX%@ zS4Ysa1EvwUfcy4zJc}_ez)EF)JEx9fOd7P3aPz}N#^R-rpZ(nop6;Ikl;;WUU%YwE#>~ zfD3O14M>0o2J(QJ0-C&J&9i{LmFn} zXof7j#b?MxOmJ@=eyt1zaTx-GGAx!1710bdF^JaCFen2}3xa!_q8VD^GPDiK(1n;! zB|4cx67vU)N}Ni32lFqFr#mwQn$GJM`#v&J|l3}0nLsWgz!mr^Ka5gs}&YB0d zGCTyrGLo&LbE7Y48!P3Idt11xX;*MWAo)+#z2XT0y4nnMX-KF-_{{}>{7>>$?h3rXq8uXq- z42c0=7+2QxE&$>*oCm_SIrH&`GuUF4WB&RmAS{F1v4V%$Umo*YF7zUVGIM)C> zOc_UU^|B1Qh%lCAIK)tr*;t%a-cXXII?yEJH%4F0zV}hqvj*B@d=#FWGZtndX!P`) ziRw2OB5rO@wz)cIq96lP=4_Ao6bvdbyZY{dWA*!QOG9X>&wJPF-n(AJLD0ka|MGiJ zAaYv{S)ey}|9jp$_Thb0>tn-tnqq2>Pe-O&zas_9Ku+*-?DcR#amXsIuMzoWy^c8c<)8Pnr4?fJ=EFR1vOc9Y#GTu5i6> z<-+<_ye;iVt@Ui5_nG?9Ak-z{`da;#t>5bOTaJEf(r>x??MHYs>eKO};R~4cq{*dO zIPrvg6@mwRk$Se4f06nf_+{4zpHD~4Lsk#dQOgl!$j3;1Gs64}*SFxe`gtD`;*Kf( z!H2N1k$KgJA7Rrq;>r2uu+&@3A98@rF`prAg@=@le;tEsg8Iy5$p9ct+eS>!84D@R z&QQM-CC%YT$ufUP^1y9`xtP#$vJmM~$1Y{gbd-WfR~ge~@@pnAbpSav{7F^0YRZ*N z>9JBuiB8JHNU1JCf}ShX=W;(K-B2VzT`cRFCh+a?ZWy`Sm?h@Z#PUH+Zx`xx_&nXUKwfw_&3uyG5jH1a;fC|7A?kOL z5IqAEX@F;H8zLA;d(@v{p=Hd01*8uL&Z{oLvyO#&%TwAk6ADd6ZblzMbPoqxT{YSZ znsvUcmiGnikr1`ytSR*Rvy<^)BIqZPeXS%msz&4+vl*UoVS(0| zI?fZ8#Fay-#F2uH5E}$rNY(=2GmVC$q@0;KM#C`#j7WH9E{q<<smg+{DY+)Jd#$W&7P&;NVeZd>tF5(zL+#ieaxGBU&JzQG^{(OwcAn+B^&*R z`3v^g@Q9O16)Mg~sGp$#(E1%({-McaJK9<3fi*w9Ge+EW+~`1{=j-LM^Y!#Zn}5)$ z-Q6dyxV^R2K+vR%t5z?~QqNt5qvw4fRcHut-7{qUd9;|}E_&6F*5=@FU(Yb3Fbh&s zvROD9dgC3cF|WU0ZmG5$o}ygSv8E41QnybZ=2Jr|$T2*cg45sw@`LaVAMAHm(s`fC z9oOIA3N`4!Ii4aP+QUm8yu1A{KpQKiqz%v)(;d?I*EzS3`9t~m{`{(RZ^`eVq`L?i zp`1cq=-S@-Qi`h~wFHd;E{pR&u2Pn=aPayuTHo7WCe;5|_3c2`v#bxEW1=lWd%47e zbCZ{5&1U!idKbuzP^XJ$NPL&{HrNBwXDTBmJ&wlUJM=xjtC!#@%9MN&D& z6Cx4i&q8V_Bq_62oeHPIFBWwd#U9o5AhxdSS~0NfgB7-Yz!~*l=GQBr?R$Ksv&1Zm zq_&n~5cl09ZI6+}iQYJL9s;j1-c(1bkhzHSmdkv)4Zo411$;sKB1MZCdY!CD>?8Fj5t@kqk@{24S02bCh9dPIgdkz`chsjLi`Mq%edt;uRDII_k5SDN;Y$DkV~%?SyiiP_7f=@E{P8 zdJY%<0f9PzP@5Av;DkD@koq$LW2NTCOq8cy$NS*T(gDMb;|(7BX!48Omu4ahcsVW@ z@u(tZFHRf(dKiwIu>V>l`>#c^&@alwEm&|sC|5m=Hj1;uMcGDiPPizCO6;OsTuT!! z!lDBQ;WCQy@GQU+L$o-6XMlrhF-C3CV#MG~R1wa<;p|&R(JDx|4QLK{4ZLE^aHg-0lxiBJS|sF)Q75NF zgZwq>NS5Isf4#fwNSO^m{^Erc*AV0{E)v3TILKe4j)WHu^4F*%>4k&*HR?!w;UIs_ zI#w4@(*S{4N1_gx1|RBri6L1bMyM+XF}9o0sPu5?P=uq#bs85{(OVRmD1!SF<)N8f zVYYtD(T`mH7^@$7`Z2+U=`fCjLBH@&Z@h+i)x6V#n|Gl;TZQ3jJ}?CNIv{q zS^(aNj)nQ;5b{^c*a7Tcm}|*&CW@43=ISU5RP&RwjA*WXw ze!kC)xTrYdKgm$I5Y8q~dNbR?h0q*J6yDLw!ff675iF_EEQrC98hV7}Xdyf~TUd$1 z!7+KUNcV*cG5U+LV-td{6s`sgMV#V`^UNnXV52ogYId*!{Do_(@f)eB z+aonQ@k>A=HLdvNU!=xis5Na8!?*)ZsM86Neef?*)1?D0<5lf*S?x-Lg42KM*|GRw zw#qX632o02N1Y-+(|=M~IcCeE%t%q1HP2#EQIsx)7x9`nplhyvn=cPX*izsBr4U2W zGJB>iTA=C?M|A+}HE)NKbiU{aAW~UahaN7)(ugLjp@0>;4g1CNgX0B<>wB}y%5`s< zPfkQBOCp6>$D0pL?to7@bJhauD7?4)^+-()F^RuOO|BCfYlUjsH}ebhLy`hoB|7Z4HFXH{2X#7jcv1tuJCux*6-B%B#hsT5f>1_Hxwc zHDa!atBxC4m|*GCd8B;j&Fe6FNp~vKDP&r;>Z41-HADzp`453-T;{ebc~Q6NA|Zz? zDR*})N?^i$GCahA(K8@>qfUET7?*0KXc#>MVFY~8pZp@a9>Q&|iS%i7uG(j9Ys^s{ zI2H|6glUjVtLAs%xsG$D8RX`e)hIYW3r@19%yh2;Ok73GfU8-jq)V5;9^0jl4 zZ^DX2KQ!kl7RJL%=hU0<<62RTip-~}CC6R7s#upRi)@GqCHPp=(FO>(Z28C1T7tQG1-tWx71aBg0vQ>l6iUWxoleHOl!pcllZ z>w8y6{Yo7%>M2Pk+!gG}vvbfN3~)&vV;q4cTEgUeoaEos$vJtS#&OjqC+!lXjZt&N z@Ko?qiWJV0@@yBBJDUeDD4P%$sk4PC&Tb;z13>6&A|l;091(e1hnz{i&YtAs-SJ!c ztkLH<>-RynCHFnXN!=LH67l+s^oGX@JU(B3O)lcr7FF;?d6$WvCwLRz`m3(4@Lh>5 zvZ;8nhvaTZ#}zIAHPok)mO}+1xxV)m=1Oa2x)|II&=4iwZ@>_%Ki2^n{%;CEvCj5G zoIela!|-z+%uV6vPVrCzyiCu;5l&85*rbS8JcOU)xrK1(BqzTiJ_9KTUoP@1!Kg$CVhUtd zN}xW=^MG~fM-UDO9)P!aoT=>S0BH5=t$dOCO-^XD6WWRpWd@W~zYSsNXq<0N2uUkr z;+STcIovl3&WjL4n={m+y~(bn)69D6E+Pff*iu5i>IuzFHx_`4sHNB*gej1;->hE@ zK3L)UBh(ey_q(aCNJmNM1c0FW06s-U`-K*e;@pnNB2agfU_d-MPGd%4nGmQ;gu>PGOs5 zglfQ521ch&*xxc834yt_Wsh1rq8;7#&xT7xj;^|6EvYG@Lw#^VbwK^_57S-R-z8q}X@i zifcR>O*0Mfsaekg)DVL_c$z!}*so(x@{if6hvHwP&e223l3&M7M&IfXl>u)2 zDIdJ`sWBg;Jb20%Q$SkmJyv@x9sclOeiQnDcUTptGs5WdPJPW7!C-in=W#yK&6zPK zgmLO~aCGq`v+s)_iof0+^(3R`yEE#?;eI$3)C{dVY*vdbn^l62-LeU^S)B%lWqMM( z=t}f!0-M!}YEWI7`da3vnysGrenFf+#}fy!=8sWGoE5wlyTit#QAbIGGo|+L7;Nv? z4jwmOWy8Gm3J7l-I9^phJ;a~R(p3YY>;GMpdDFjZB73YzsxaUMaCjNloiM7R`V9`* z;Ykelpu25WSgZvdZ8a3rk7x`?tl!u`J|?3l?Oq51bv9dzlCUcSBwV@!?%F1jab)0- z47VE}!eMS<8RQmb9XUuqRb#&nC6i0hB&jY7wI>uPzLIMrs_=3mN*KctTquv+Nyu$% zAm0pH?JrJsNr?_B{`Cb`$q7OI2*-2G4HXQ22SKDo&!hImh!OB!leC3RGNN9W;&C9O>Y+JcIN(gmqG8qG!)qKnRP@Ouz;K4Eer?m*LT{q(wzFlM!*Ce zDiVRO(})_rHcz7cOWol*PB&^hs9cZHkIt7{5HG1{!fv{0k`=1mUd)|`pG^0e!WskW z&)-UMg+s^it<2~IDp9;kZF*ZePN)&w-06f>i#@LKZQ;F)$Upfk0rF0bKN+L#*QS0! zxKDJoF8UO)U!!=ZkwE)3ihX4!6b!~Y0Tup-Hk;UiNT^0qs$m2KOAqE)IQ|e~T&icW zT`=&A@?=cVQWEC7ZJ43{HX<2_@z(wTc`%nYbY{vkB^S;FVW>*O?CCja4-P|kL;>Pf zj;+3_6;qw7YE*D9C$y2P(>qca<5rCiOWqNANT>7BP?wYMyWR!u-nl7FP-CE=lup38 z@)~b$yE!)pDep*W(>b8tP$_Gq5VWub=HVHVT{ai3QxOiwLwjm^Nqi24oRY@rmJLAglWrIINoh#tOMyJw`7No?sKw!38P;S9qf-bPTNw>}Zkg0~CCFX_+ zV1a7czrccevkcJHoo%>$LEJ7Cip&&zD3cxT?}U^H^L(RysjtE{65=bey#Nu%z^%BU zX&R8bJ26hHIq)u=O@V>Yst<==q2?>e1q%JW4CO?vgZ#$_ouovsL#<#BKM1a{E)56- z>bDa)7GNKbV~+q7hAD^np-t_vKHyG~?wAkV>T!IKh7E3%)1HiqOshTrn+%Nj55r-I z3y`BNN7?RpKY|WHtxKj!Vnj6uwGkCu_qcZ3}`+Tfa0WeDOP9zK@f?;9POjYkAs$ z={2~X(<>n?*9`>hxGbqtz04I?A6o*Z)&+4i)b`Lw$k}PUEe#jt`Nn^MYaa;pN|xmSVmd=16$vQ#~)Fq?(t z9JXslBde==B9!T{p{-u!mcS*|tCA#eY4xgP30zja3hEf7$*Eq2TNjW$z_+W^P1nJ` zw@sv5@R&ud+y;rWK|_DdGXINw4ECMj+i*wP%dB!tyYZ6OSG%toVQ_=N#5q8(TaXsw#D5*U(!9eSW8* zvT0Bes2(f~tZ^h(q`17|?ml%nZm2f;df=$7Z*L~ndzP(ev)TiHNpWM_zN6A=v4(G2 zEPVG3HhF}o5Z(-pjp;w?EgwO9WIZeSkK#+sR(z>xXCF~wpd8VS&k%qp7yFe`zesj9 z_}_~*?mJ0>$su4^hi*=WYoYgCmFK{ad%)7UA^>Tkq5(g#E{5R}zhVTM7*K&faMsI> zE-)@8Pb=MI^r;uR1~%L3lhewVtD-2t`Om~SxR+*?Xz`qMNJ4ntkB7Ywn~xhaCemmhDcFBAapq_3 zj6C^VGTOjKf&Vx@%cs2XOk4%)=*;x|Q`6h&;Fs&w16p>Ugi_RkezaTThs?X`LSdPxV7(NAa|;*G7F^)K9C(sXeIKsc)Dc(*g6sNz zzaR&vM#0F_bVmi$`lrOd$%U=lhmI}g=q$S!WT?#{>jcXO1*G1@g9TMr7_~Xo=uJR% zVe7~NnZNI3hI*#z{^~tBG)Hk&9$`^^2%;DUX`w=E4~A*>fN(a$**XkUvD%zG9WDTh zYjXsH<^(&PF_dth8F3-i9yPeq(dac0?I_ za+>gn6z2iq9CcGMnrm~K`6+Ta`rkDa9zOP6?s~+9P&!)7xfH7}-qeGHEqDtTXCr=( zgmU;Ps}{E+%jX@448H9hx;8EN=SPN?F@Kwt9|VK^J0({x;txn@Ec1`9SpuE#EuX|U z@793b9l?|Cs)vD5HqC{@2$1Pf0NddJFQC&oNv$+f;HQ@o4Sy8kfi1}y5AKE*03j?q zmKOs^`oT7fN=3?uYMt6IowFkQ&(RH)!;bObBtSA->V|Cr5Q8)THuI|#9 zx;<5sQMakbA9(n0b0T?ESP<$(IL0AOsk9uc@-7d{C?D3fi ziiqlye0<}|LaR+u)NenIABM#himdv$X4Tk*(f`b;IeFH#b&tbaEO@ny$t&UR3HJs9 z7#0jDzM`SnkFWF93HU8gIh$m}&W{UWqR#8FTb^4Ja{>5zfkSPhOyx%OQqqlx-??IZvSBZWVN53a6S}P^x8)@4uWlK8aci` z6H77Q(G@_flQy5rR?UF#3g9FGAM&7891_#eE{0v57ahXV|6*Wtx7-gJ1mw12wpcxPqn^gq@&pLV~J9GcAV_rVqkbX@AVN%yKf zA0}}e`up&M)Bg=Jlij+e_Qk3>6?tBe$bI;+$%9Yatz=P14WyU2**tKFv-x(2GatZ) zZqRHF%t9_S8tr3Xk<$f4!ENL1LV=_PAVq)Uq~ zrQbe@p6)X?L>qHkMFktPZD3>Mq?py7Cn1c)wWsrYVfv8C=Y?I`&-C$#b;cJ~UyK~An~(vn|||9?Y&ayj%TRu#)p#lNLI(c>BP zoctMQ{Q><6z#lB)M@6s?KR|EC5N<(56Z`t`puS#!p0xV<1+0AH`g$|`rfFY>J%wgz zFFd?}QnPX9UVRTc^1$(Sm9bB-N#+z>v%|G|Bu;VBU85V_h5aoinZZ(I1iXJB(Fl<9 zIkH~Ep*<|TYyRe%Ku?m-a(6xaVJk@@ziW=Sq|117d|U7% z&jSky4~#K!7v`y8hp+vAl1fa^b4W&MxVX<;nQh(*H9s#j&L~uj!%YtQjV?lpyY06= zzA5|deOe?vw`gJhz7^+TMZ5_gJviSe89l**{CyAnA6|&*uysvu>tp+WGcfLm_I)tU zigoo8-bLT%j~zv4n+tL2;11*9lE;qWZAsYQLZ>&TT!7Kx@4?v+e>1QJz1dT)@T1F- zO>J0N4Q&w9Z_b$Tm;$hn6;rzLgh$gQkM(Nk z;nj2?^mP6JY0|%=!~ZLndTosZeDTDpD^CYJ90*QOfBnWF=oRc`20?$fJ{3k9KMUwX zS!e@}srLb58_}V=5QhOXV?sne`%n~A!J`q|5gN;HDk~1~&zX`gA>sx0s|LfK*_Z(K z$EpPLm^1$!*gd{~3-$%*Xp3Ti^iPHTtI)L$pqj~v@c!3IfgR)jY+wh~WCLtcO%|S@ zn!&V!xx%KER+oC>;aITGOe@c>8U*txSS<~rm2nzoJ-eI*r8nhSFz4dgkO*d2H`*}o za;bN|arQ8$42F4eB0R5IA$SIdJv%%vd29lJ1uxmrbiF|Ri@}&?r*-&$=~4y%2EcQ{ zCI%43goXr2KJ(wd zRBPx4)FThYV*FEydlQ(&fHtT^EHO>D0ouSbw&B9~HUtK>0UlRe%78)^%7u>54T;|6;f-{nt zKZp5V^Zy4ekaD{S5(!UDL%|2Sk(i5Z2$F_vgv(h&ml#aQ@w#el{z=OA*k z8#5xVG5)r0PSmAs;i>}=Mvtov%RtwltJI~iH$4t;=(GOB1NO)b@2VvpXMs?NnHH=! z^mgyx79jomR{CcXr8j@D8L-pY*EgJ81$Wa{H$&GFOq7eY+~%ZjV)`sA{hZUKzracF zT8Q*HR{G0Mm;UeL?N%&i`iWNh_r89bR{zRL-^TRQtn~X&m%hpx3k^UqF3;1)%P^$%~PG zvsFj`@&s*09TOnmt9?$M2IkojU&jGtHB2s&Pz@>zsBb#y71JMxPrq5xb1kORo3~B~ zs6|ee>%M?2$KtbmL9%e(v#YqqNgrbRzWDUxBt1vIoxXpZ-R$2oz2_VuJsVB#fgpu9 z1GfS7qLb_5dys2%e6E9EW5Z(_65c7fzUAclGILFc&$R`)beHJ70W*9U+0@-muBVx6 zdVH=$PA=W=0d=*LKKWjxUmTzQnwa#N=)-{eSDuZ5IZR*4^m3o0jf7J$CnjKWi=^)P zfQmS|9!0Jgr5p7HVoA{mi(1)%#Cp7@Hw|?;EAUftc+3p(bc1yuDuC0VVta%pyVOss zkT=ydnE;ZSq?u(jtcRRjaT1e;s@RZ3hY_5NBJdr7KiIm$H1GOqIrHJFN*@o~B4(cz z=*iUunX}y9i>G39#Jc|xx0qQ8hQK6(ZUb4em zfGM~T27^bY<^-Tat@c37g^gx4FH_(%O`i5~*7?=6(uE2IyY4H!P=mmti@VM+jO?M4 zSL}3A4TD!6Q21kpY?2@?V~`q=$S^f$f@DcodyxR23TTl3lnzg0_{TboTAE^a(gLim)%gE{R;>$eq~;wDz3$!c2#`_^dlxiu>Z8gmJqG7m z0)B@7Sbpb<>y44-nq&E|K6v$*58L~b^NZ8qA&WLWs|$hJdDwr1hbi1Mk2d-|Cjq@1 zUYL4vm@Y%o%|$wV^B-g4Vh^angH$e9EfvAlP5$pz*DXTNE*$^zUFsj##q{ghv}YOH zbML1ANPBh^oLzfrk?t(pbJ4%sp4Dv6w>JJq+H>rdvun>zq&v&@%$N}0KeOPj$QWAF zE~kF9X|>@q3Or->(Ts1l`f?8>94NELQP75CBoQ~m8GAl*o1~d-~uV~ z2&M23>zrgN?oat02LGV@rI{avTe;NB6nR+(ZCa3FP(dGxsvu!sk(X%0p&f?0 zW(!ROV0|^j@|ny%`AFQw=c{q?`9&50Rzk7;D($s|$DZjJRC0%T8w1>z?*dnus_!uG zMk-Wc*Abu9!1Ce0cm!(9zJ~%vWX!%*w_&|d(>@fTC^>-TqeAvc&tx!Sy4Y$g0%akB%E7H3^~dV7ot01)LeWyZUD^~bKG zqd}uxyXy;wrla$XRCs5_sDDl6xEo4FAcT7ba@-vy>8^&7k=CKV4{(yMaya7LR)m3_ z{r>((ytU7xuHea3Z+$a(ZGTSaK!qD_USNNKvnMdj51W&bPS=O?TjMcNbhIJn24fd1 zujs<0iJdJs{>e6|TsdE+e)KEZA~>-erJMDW@e5xvp}ELm&VaAXX0#-{g~EAQ>|D)y z?o))t2G%So2#Zi3j4U>b^TK8T$&6hzj}3A%vi&e_B}G%kd|R61_fTQEVu9pq5sTGt;SH6HGD)wfQWHv08qV^%K`0;_LjWW3Oh&rkz5+u6;bKq` z8xk%)W#=SXJh~wfwhTp*l)M>34QXSrZFI05qkxgY=h%j%uzc{YABvX~!$~S|h=#GQ zuiOiVaEJ+(T2%dD3lXbgQhZp9$B_{JnbP&L+Mv%Re?u7e9P|Exx>{6Tj+m{u85lV* zPSFj;1>ntyY(_AEXDd)EPMdJsnXh;mVh%HAHQMSwu5Q2?L{OcsTuu5Zc6z@8Q;p!- zG?%c8@9aUrHf^m>%q~{I9t%5)Ckl~KbBBm@3vpv{h;pCM-9!|oV}(kDwM6vR2%_P%k|I^Ij_P^4v~k^n$g+^&JZ?etmYiW6UaG=Cx+KGAfZt_IV_%m zfLCMMWTT)UJj^hKl}w>YSh^nVqywY~PdTYsg!b+M>48Cb@wg%3(de&1}SYeNT*LHfu}^ zK4nDF&#(7l(j{=eSv%9!1GAnqZAhZ<#?=f1s1qY`#Jl1+x~t;QfWc(EW6i!fPwQTL z7q3il`q)sHa!Jq zb(RM`oE|g^J>k-{{Eij5`F*(NsF2qj^{vP%!!<`=Ps4px9lYkKBcS?kM2Etx`|FF0^{u8^wuy8SvIxz^A#RKGj2=gs?f;aF$YP?13FOOtF1_H6{PZ13y5D{VS(yzYthZ#NHpH{>}SiEUX(F zNp$ACt-Qksm&zG#P~BL3M6=P^TZ3zwTx*7^ul*REEs=ons#)X?iw6dkqZ6uA zIHi!NL*S}d{$#yg5VJCXbzbm!anhjA9WBi>{fFok;+}g&`;W^Pp{;Tu68B%#;;aiE zT|XM?gNEQPqv~krgQ|0ls>67s_m4V+csUAFIO!P{Sve^zPdGz?EhJrBt3%p%Lq|>f zR_H~(YkXw%!O`oFu|;IggW9|;yyk#Po5f+Sy@A(UF7l^ipJLRAnh3t8@iCvIqjb+}=h_icUL>X+?uVLK|XfQJjR^^jWO-*C*fHXW@gLw!v;(r^~W4yxgN3oAHi|i;F77%T1;#2IqMwO7ms;;wMTg~mxw;{w`NH5NC%Htvt@JDCzD+7@WK z|5{@E52kPyKZqK3foh=#L?<@mF4i4Dn#;NgI^w4~9{&D#+5Dhu$N?h`Om^z@U3}oW z<)paYYeJ;eds`4Bx=3^r2)FcJjTOs#S3fC}-ow4Ct?0d;FITT=c2&L$83Oxgkhy4v zi7q>=QlFHg=*P&TaT57Bu-;70eOxV@B!>F?jM6TQjY|!GXRtjDp3c$K=78FZ{cpKd zR?Pi9PrG|kZB#ZZ>7T)<=RbNkfOUj8af)a5FLRBBDIByD4 z#tKSNJ6k;-inAQ~HP|~hp?rd|(1fwD9qj_$H|vLt42%UJ#u^whE@WirvCyUyT0`Ox z-#YvUkXoj8&Ct@YnzV+*zoZA7WJp{BsKE_FBds|0;{O3_K-YksweZ^Z_fQ;6pUu*) za&^vFgn23ZG0LW9X;U?X2J0sDxbA)PpmgtbECWfCWoUS7>sXfmsAc#(;W?QEte)3> zx=aA+!rqm%lfui+;&bjMo%nUU%qqSW=g&F)uB3&zi0NvPTNU zw^ThAGoqD6oNsR2sGbp5=|2fpX`AV93aB3z3e8<^(;N@&#L(P}comvE@jODfAHGZd z>vJ|zOn(>Z9wNZMjaa-4#Wl`g3IIe|t-jd-WY{1eFV)|0+qayTW^@1e;sDZZQmbDg za&6LWQp@x^NVhrPzr!ZoD|VcLbT5jMZj)MY%K*}~1o4>rDZqcKW9fHt0)CDiue;#^ zB4b|Pe}WZt_>aXi^)}$!qTpQ!+B|3xfY(g@F)NldeAO(QhGj}7-NiE_c&1Q@L@~z$ zY7B4;guX6^Buv~=f&q<&_|w!S6NI(z;TKS0%$Fhh%a3&bg6SW1n0_nvpP@XkwDA~9 zaZJBe9fO`N!TjkkeQW-V#rMPn_$HS3fL*k)9r3rBgI$0PShG&_FoR|n$8`GR`XN~8 z@OQ_viza-Gn?d&oyLcDc_}CeAkFfncGX>e0K@Z6cDs$%^3|lUj{e7mtH=sJ{@Gjs_`!28wBT9Qg!h6&lNm=EHv#-aB8er@ zb@+FJP$A99tfe1qe1K37FfMlP0@-RpJ**R2^xDn04*yY?Df%>Pc2gTSX*U>pnoGy@ zVbQHyW|EzP=Nr)?PILc*B252I!E$P;%_0tPnqy_vYj$EKytDFhAzTsiEHfskgPq+aZHCWsOtcfxrM3`3=B_W zXU_uEt!}wh&RQSQ66Q{|QCHAmzdxeicN_ja`Tn-5U&QqxbU3EyX9Mad8*sB(R!d4_ zr>;XC!72sc1Iok~jYDu~@sqUPFZ_t{>A9jb5N0yL!{ERu@kzZ3TDwo7qg zG6gvF)Bm#${{g_q#G0f#JU`muJReHLa$wzx2C>60vf?ValLjP zR;XGEk`8|Zjj}s#wN-dK+?ES?Mu`^t>Tc zPm6r6{1Y~L!$Vr!Ha%2%o=oal#;&=hg!JI8rB>OdfrllNx0bYH$9>6)ql#VAhF7)+ zPe&hg1sX>myRi-u`uHloSoCoY1{Z<25r)|D^r4TDX#&yo@s(Km5Pp!*g`i&B{YO{s zruZhZ8NynCAEgg+0gEAgfbO!ThO5vZ(g!C&d-d|aP>bsx=j!DIB|Uo~(r6{8;32Yb ztM2jEM6ΠaUmhpvOC{9&dGe94nu_@|iuZbdPgKi$Vf=d@)xNH~HoGJKwRaoUXFEd7UVN*|fxgK9M;?!6&1XMEjy2QO4JC{c1 z(><~My$5<^N8vZ%{MLuCcEa^;k^kx72kxAI}+M#MMOedozONbv?LO0l3*mX z-TBz;gmxgrzeuRXiEDL2d#q4LXeUFaIS~(=K<-A%g+PWt>sxzalt6q4!mk#R2KpcL zs1%@sH1aV(wxZ3Mnd%j&RM1@`I|M#b%I`=OCgHG>sXMK#ZTJ#;t7^Pyw&AO~_uJ(7 z45I#I(_~fZlN;F)R%BA+QB}GfD_XDd8|(WY@V)V#BW52^FoW<^5gU9}Te{+LSG60O_2kClJP|EwfQR z%)LtSL1R?CYcMFyIBz_%#jbxHJHtz1f?`?X$aG@KV>K7V%qM$*sDw*msO-~0KjFJ; zBmQb6qL|7@hra<5#d;k>Zi5e;lqgX^!ixB}>9{8S07^*!oVM{zrYLJM-2v4TT7%D| z2~~i`v2zR|4k(gs?!lc>>gh-sJ=bc=*k#3$ES{MvWPw%lR?@`x@Cmy?UFy{fp!{Un zDW)GLC>+fY&c&`tOFdwPF7@4KJ^?3hMKZ1)8`QJE5FRoQ5m?q8qC-)yI25gFRsZ^L zYuP-o6ePxSlR7B)P{Se{rdLbTpr1XYGvIUbiAR9|EK^ZQx0(RZ&?LkUllPqkqN0MJ zvehjDHka5&2V<(6(^=yAtE%86|d<*|0&xHT; zcN70yz54_e=OY(h&P~+#H9KrA1CSEm_{X{1CqBQJ^m3@CFpc*9gn>fM5)Nj!@uIcY$1I`tZ*M1A~S;_64&cGHQ9?FR|mB z1256|h645O;|6C48MZOQ`#&l_(gqCJO;TS#JBeoA2=A@sK8|rKtX93XyU6<~JYsmK zqvd4$k6UpZ-bb-!*TR9U7P$387vrWMJ^@-dn$b(!EH!oqn2(A)O^Vuv%2M!Yr+WKm zGNLa*M5^I$i5bz`)EIojZU_PE$&b-5@6`I`^vhrqO^w%(ff?WZsguzjJ8Y`@JAT=% zKU&9bm8g^r~eHt2bi-m3w zGwPeHiFq;LvSrm@gWHjqna+;;i517OZ_BS^|3B8w1~97XO8k>#NCp_0i3Ut7YSd|s z4XY7QgF#IolSCyj;UhtdV0SH@QrktD09L@zNr35Nly+&QUE5+yTmCKE(k-^Q#Wn$& ziAWJDt5{KKOWT_!)}Sl~rOf|#?tSx>1XMII@7;Gl&pr3tbHC0#N8FjClOz#h?pz5m zU&e@w?fmjg2^-m3Dd~_ObQb65ZSA7a=a%RA5epiXd^wKMxf;7l2^YzCgW&w z9d1TbqaOu}CSt zX6a)agc1l;SDFxy_|Ka=w#^Q+mLDgZrpiX}dhmZwv)|nsU(tZMA2CKFSA%|v2nsBB zujM~wxxVZlzQ#GCy8NwWFE>BvMPZI-eIg^B@M0q`K-6a}he%u8XHq{bNmTzNne{VQ z68x@4ZX&2BZx$+Xl~+5PF63&HE3%w{j(P}byv%7CroiTL^(!S4pU6wzhChA$qU8L8 z%M*h&>B-3Q-slpiX%>+i#kPxSN?S{)n#9RZB-fsj*rqb=>khWHO!`Td_3Q%Ow#~Pw zuL#_k3L#VHo(UL%Z)J~6Mw2t@Q`D8Y14=o!qOU}RCp%T{Z?wWXG*qCjSUr_%&aiC_ z*uAiMwGF8#TLZRy2hN1_a7uRb?BhxCts>0cUj5hDg+J@JPTLx* z*}6<@gj`hs4J;5umtIH-x^SkS`J{E~dOLMASPuk3N5at3jPVTtpFEsZwT> zk9^fSqsUHHO;~T$Y&HOFuAPb{U%n&=OYIXjrBVfL*d$2lRH;1`y=LZ&+tA-b>GbCv zw91j?h>!Pbgyn7E;xDANAtJ9}1rRX$EGe|B-atGE#-X-epvO>gTX_PmGf$%{4`3rr zDq0D`CY+)(U&+11Sgs(;ip8o;Q&sDxO4|h*L|KgKKU%+uu$)2!_X~2+5_iE}UdHjp zA}d=kJE5j*QBI_$?C~uaJubg)GtVYh`5{lsZUL;$ccMKjwA4Z`o#^e9<;VQimzLf6 zkhAr~{WCdWvS^30lJ;+u|KTD3GG}@3l3T2rF(s&u%h`7oL8G%=C;Yzb&=;+mqGS%A zm+WYkQb}BtL*$Y@5&4d|y6dfr1(5E^8lDsF*`XW4H#$ONDfBP8&{s1H-LDJXLp~*B zR%%Ku%5tI1@{px#Lx-dT&5M*qW;^G`DoppOp!;ayj|#75pE4OT_^O|Q?b1eTMgl#P z1wE6?thz!l;c0nMurhhHRSN4Cfg`>5;KzdWWoI8qMW)yjrhqRUhk6v zrl)1KL_0q+tB@1B71mj*cCA#cKx(z~J=bbknQp|f8MS%n3f+ho16N61p{a#5VWDK( z0YZkyLhf`dnI?@ab<(P5Y|;Xnw86S>v^A>r_h{|ujL+TGXgx5-%FEeVzJF1!=NH-Y z=I%OCInmiP#;OEMG{qI=JC_WZP+zwAqZ2Bn*(=Me%CeH&NS;+Wnhu6?EXS^SIwwsn znm){3(77ZzP$A(V~DkD{DCCC^66_=?Dvj`9g>MXBY9I`cutM{l)uMLbqR(L8Hx zbZS;)*qTc|X=e-e5U}jVTu7-H4Jj*`kn^_n?18TE$)ZJhPZmKf-7Xfg7mA$icBXd^ zm9&?~7C8@eH6267%RTRtDWIdy32f*i4Bn@9vM`bC4p~F7nJfB;8|!Bvf5g}*)mV-%IqL<3GCcEFP z&_c#rMoQNaJ%;fmBPC%K5J5+4)ylwVT><(7|TCyO;RRE>0yj7dl<_7C>&Iv=_zI?)jbz7zi2~ zTVL|5-7maixf?EpX6Rk=G1E619ma)`nLf9S7wT)_a|k&B{-^i~8j$j&Gsa8RSgx%>23bw6tdLJEcNTIh(_L~}VqJ8|sw};# zl!#fS-Txv!vTvF1`9&_uoZR8Qc<2-2Ssey|tVok93@}LY$HULX0s0ZyU0o&+x6Z`{ z#BQ?pCPi8kRY-c+ecc`(&WewH>G)_L3?IYZA3k6_@lp|ey?or+@i9j5F&cc7XnZhl z8ZC&p241u#tI}Wswq#>M;@H?&ki>?p``#BegufoMa^rzQifVEWZ=1`lpfN)9a5qEr zaM^TvgcYQJ?&UjUk!0puXV-6c-}qRTJyraKJ*P6ln1jz2k2=h3F*UgpzGg$A>ARN; zg)HTVY(+6O?@tx;xQ{EwB12qXEJ)$(BX6Bt}O;@J;fb(L3CUn#$v-9v@h<&$vAcX{$lJ^4Y&H|EK&mD^AirD;4Y zfxlv|6lx96Tn!@ospRf$05tk6`Fg91wX@JbBLIw`G_ju{?x|9={y-rnPJXl7)qxp# z=%w60-*ffI*_g8V&WYVs4|<5LEpEKwnY#y#m3+E84!p2|p}vL{N6V8`Q^7i=T^GP$vD_y~gyHcUg~d(yKS(%^E^&&xK8| z7$3{kohWXvx2DOB@WFaeqx$YYH4GZA;R~u7)K`p022f`G(SO4O_!^@39bpmk-;Bz3 z4#5UBEs;a!bmzU`&pN=c7`;DZWXw$sjCNh8$Fem}fBbR^r^6Qn8r1)?vvg*J8hoC$ z{iJ*qy+334HRUsG=5wH|ah)i?B%}Ph8`P}#Q2wZ_v#zg?rMF&^1)ik=|M*UN1C}+Y z{l??n8_?k6uc`I^0MTGH7StD+sfd}wOgf?)gE>t8VQW&a3F zD_PW`1$hM*)2#+`?Y_Ky(G4Y|X8ei)_|o>bbC|B~EN{R66D2q296)^o%Y)bfRdOgN zR{pAIa%cG-&*THvzUgWjyN{oor+ZLvbPHQ4cO4w0|AC*4>H8P1!8Z3JpGFdpJu?;+ z8QW$F<2nyIOUi*{urQ|X)hhu!e(B<228`#QbD{#jJx?~=WXCkI>lStPiC*sqomNgs zpLI!NV1`=8R!-D;DHA=3n9k(v*_Rjw?oqAmiOH^>dYbzmrX|eN(B~IC$^If%*9H@2 zU{FR;@8jFJc!J_zSs^60Yy3xNb0~lmka%j%)JxoKwALL#9N8sCan@iy$Lh05MNT6^ zL)7tO+^d-?%bp>sPuzL3DQrve)*1gJ;*Z(Pwvcb-QkN96?4s~etQw5mnw3V(hH<(a zW7`Jtd@uaym|6uP=vy1qfSdF2>s8BF%t9n{&`9jxwS6e`Fc>j}#x*MSt%jrg1nKJeE6$^l~DkPvH#ySGkh?V^I5Ekvdd9v4hIJ z+6eSs3Hw6-^|hhub=J+%xuDq4)9pUM8foR1Ka-}Zd9qJ4xupxT*huFV3Wq0;u4RkC z-z!A+R(V;|uLjUfYK|V|YH_7ITJMTh7DVd3k;>6g)Ou7FMJs)g$}!Q(;z(twxoFSk zg541KNRbY!GSM`ZiKeM!w@Lnz1(^C@ot>=z8P2PYssEP!FXTA)MXJk0=r?9|^wn+n zCorI7lUE2+MjsiT&;|xd@~!;%^o&yx8xz*ER^9?8V@1dZttfM>sjg^}?J`WaIl`UJ zfI7{oZ?o{Dp$*Cd#Y)zx5h5`V^&4LSl2Oqq+meWs$1hznvHeKSO&C3M+5TsXZlW0_qT964KW6t8R~a=ozO&eNi3nrEh`0ZR`U4q@S6U`44I6_|avwcoS`BL|yVOE99 zgx=Bm65^q6c5ChQB02w$&kCz^$!3V*ABQ$f5&p4N_y_vgpZ6c8X%DYOJ(`M-W~Y-0 z*S^Sg0<$$LKHb@%E};-`C6)Wh-hRfc&5S5XY8q<>Uyr5ZYxH3FlKGv;KO7ZYVQ`Hd z-KV=pSe@u`OR8{V?iZ<37Up}M*0MsM6)G%hjW4_KAu#}$kL$dLoaM(B=an1_zv}27 z0e@s8(0|BUewcf|)|A4s$X$nM{ULH>=S*~A$t=9A(Cui-C(1;^hn7Dh^C#q)D5;jf zkGLHiJ+JZ0v|nhPGw)$f3P_uu~~V3oAYfRQ=%b7G<}hA7y!W(XgnmO|Xz0YoRmeOfh5$oCja>7Je6D0I&GJz>)(Wkl06?$o2N3|CzUR?;W2qzYC zld8%gi~pyG?zI;ucpIdO_^{if}!PfI1((+ z^xr?F`tQn~BZwm=r3rciNJ`xEJ!$#yO$&b`dZku>mYxtF8*LTiX2It3P}|`kNkEly z$uYd!i~f_9Cr=Z{v-%dE%{zv?PQ+nN1uIWVJWqHMz8x*+N%B;tqQ6o-e1X%kIos1J zvPO@GC@mT-A{JvfbTowI1TrWE@bB!3X5HKdODhPxTPSX?gq!$=Nem`v&4qNU`xJ1cdm=t-tno!@CPK zV`!E5A|iCYmbiREvQ}$a^mG!%n|#G|6fMKqs`wU6cIa#!>Y7&pq*cd4oQnX|0Lz!& zIJ%!9Dsy}^syO3EAz}89Rq1Oiw%>RAWqVeC1_TD%Xg9kFP3ztNZ-O58IkX;G>ekzz z|6W=T5^$)GQS-C3UiCEtTJJwj4$^wB6n^-vx93amvGwkI`7Eus?dic=ukz1!>)qe2 zw@S{X{T9)F@Rw}Ud~^=jjMEoXsh;?QPYJRLK0sSKz3;g#?*I>HY0EGE%Ye3wy){T% zp3lhkVfVz-&F`@-zyH!%+ET>^Z_B1X+HLuRuH?4Y`)<$v{Ipo?u$dltWS&9Ox%1PT zN4%F-)co{6z`$8raU1um`|;B(t-A;&lFm=3AS(1>w_@2t@39qMeeo=nBX<%5NLz`BOJ~%-TkH%db*0|VGiylOg4eYK zirW62o?rZadc1)%qRfR)T@QkJJ_8DKl*I6C^Y`}!PbWJ(neaS{(t3M%Ojs0qPw=eg zJSgp~O@K1={l4HSLI-^&JbC8`kMl!;XY&AfmYjEP_z7{g^1<nKs#V)tQR>ojgky9Hj&tBQdqu1^gC9RS^xW{V{>2XgABC`E8y}u? zgu|VJC*MQjd;o~HQyTo>+TZzDc7SRk5S%@XII z+!Ov_3)N3%y_Y49-gMZy@2pFl1D6a~;#|@-$U^nAaIp`2i8Jf|_qfD4wf8JboLkto z9&F2KFGnr3-!An}2G-=#LOV=*o?YH3A--izO`M1AOFIv%*4x2ptC=+E#^ib-bskzj z*lD%;=P#YI@1AFkP@i~K@BYd@8QZ*Bau_hhWj1={F3y<>va4n4vot5Ueybns^i^(a z$xZPa^!cVP(k|Ws5AwQk zj={3n!q?~PzW9FWOhz9D`#4&jQ0&R%=UYf4=GP;Qn13reAQAn{uSfc^zJec$1?%tT zx6qUSm1c0mYaOrH%8fkbFSc@%ap2mVbZtqxM4V6lVk@^92d?c&*N&vCE$P~Ay8!1a zow#Ew_b0;+CS8YY7m<$Ol*qm29qHrEr^v&Lw_H<;tt^!72L8-Bl4-Bm>Fe#%)Owqf zq}2YiTp9AwYUMA4&bO+4DaNGnUDm|08coH-gG0$xgFUv797r|z$hWrq`KB8YbJ){J zrj$!msmR&-gq<7NcMpp+`eLT1aAYw-Zw54d!pdrp%&H|b;ZSCAE=CE>WTJG{pkexQs49qpX1ayTO=z2HoFw&~tZU+z)m z&*&o^Or7@((%I7`4m4j8_?N2OCH9GK=u%Fhxa5&*bz1wob1-EcaYbw85I8%MF9uyy z&o%wecag{#c>fjIvO%uE-u&R1uE6?C$QiD{-YQpM@1v^vChMIXp>SHs4On`C|F{bN zMIY>RTK-dXe=ed*?{N0Yz1IKjf3H<%@DXClE!e2DH=sUYQh!;Z|E+&?bH3Dsbl*vC z3tRh3E<~EI{Q1QrO5Pwb0wU(PYS9f=M+qlw|9Am``$my_+f(9cKbeEph9fzF1&-{43$pS- zuvBCn@B6WgrKbL89Y3S@Erc2-|2Elw8e+NnglFB)`VZF`LuX=qmec)kd*b${VomK3 zxeYVOnDYOTj{mYG|Lo0Rp9ielCQ>h3Nv>Q7yvLekuAP0-x~+`e$w{5oB$m!4o%N_8 zIE0{)KDIK-4?EDNre0Z?9Gj6Rux&0``)oDNfey?r{rIQoGN?PGetsW117rj_(e7-z zo9kv)8G@RPTtnj~(PY?pI8<#f+OZ=r!zk5C={Hks!Nr_8hq z6<$%`y&rkd?rf{012pc#yiq{)p+JS`PL0@uX&3(6)Kft{FUt^DLrg{6#9Pb}PX=$5 z1~ctZbV+jl5$^GxsXx3Jxhpv`p=F`|Gy*xd7ozt6icYMoaY3>Dk2w+8;>4`-8=IWg z*zQ~_l;yOpM|HrZNqZ8Dk)Ux$tI^eVEL+%0)0FbJn!32M7+LPN^2&Qdms!)C-2LK8 z@3kCZM<(DxOfJG{Hvah1{p)&ixI>v=KEv5GiwNBFtm}y^%W`%vkZx0layxfG{obqT zE>hZ2LA?jUYG|rCduXDf|cCN$Ov)J40$3(Y)N{h-FP= z6EAe0h~U+$L-S1|r|OhyR^+uZ1YWiu>T-M2d}!}_>7Wclzz+pE)U5_lBI8dV?WYin z_|y#nx!jmTR%RKOEtB-~?(kQ!>6d`N@GS6e-`&$6-emc*GCkMww*Y&h{0*NzGyb** zUOQv?vNAu{^2 zy)`S1S(yHvghzHp&lR4wH2f5v4Ib~`GvIl7NGENWf+@YdWT*IC;n|CFhy;GteCjOt z+25A|kMPe-_IV?RDWFL9G1Au2!rSF99bVa4?+@?xd*XxSkHBqWVQ&gk$C*ayQu;CJ zWd4ZS>Vt$^WsppjvVG1!`{&R49+Q?XV^pNUD%EyHLSMifXQzc-kv=wkzrjU-=|AY- zSNhjSPEJxK>FVy?zWWUP1Nij8Pk;DY28>VPcIRDP+pKszqdd~w-!Ce3J6WyRiVOz`1_xGwtZU4T0{tw}w$<9*r2EOz`ZGU(-W%hUI zN8@|b>Vfsu2haV}dmS14OVZ1IcT_HzRop&SAyU!f@U?{1Uzl>0&#m@VY{DK<5+4rc90T$@dOQPulgiY+KfiIp-v*@Ll9@goUz-@?2E;!! zfWK1(`io`T>&B=wd&aeTkCi*=W}c%7=w*LjKV$)5dU-Pkt6%XyGU_Ms2Pv=0ln3kS zS5$ibYOwkrf9Fj3ucgJI(vJkoXcP8_mG{DI*(vh(*)QCRD1LmIz{3XkC*yWYJ&+<+U)}M}MXYf-Bdr{k5w>wFCdrTY* z-lGHh$BWH<(yIsd=K|m!P~SCgX0)d+zkosN&_*ZEUFqek!OHh#@+;!Y{3tblVWFu$ zBWDnUPm$8|-#Q4r5l&}8!<04IW!*k{zUK>VZ+iaP)~+r^=YjLL>lj3>cE09&?(8J6 zT>_IKcoKVVr{|jCi>r+^_o5+eQgjbnd6I4OOBZG5Jl$B2qQB=~XDj1D=Y(5Amsk%m zbT49gZ(ZLY+Z4j_)${*|$JwU%+uV7wr0>VS82Q|6*>ROk-Td0=_!U?#o#u`f{8kp% zIeRAD=WM!o!nIuIKpSEfA@Z)ucXo^ESoRURT?FP~K{|_UWDt!`W5bXAK70Fa;Ch_< z$tP0hMS~s}i5jTf2xiOK9L(iThujXJtoSr%bVcH>lr=4JI`(YpXu&>3Sde~O?6VE} z;+5PMt7E%5V=G05w+skPdvS#!=9kkHM?G4q(_-`rX2g1FZsC!=9iI~oCpml&y^A7FYl*3H88(qW*Q%VJ5z2NAE@+^gE!Uw zH>OLy(FPZ%Ib*H50&A$YlAVpsY!q@}N7-9h#Jh+$hi=$WuB?bms<1j@lkO#d2V1`= z^y-g~25XO?l-A($5RnfL$7ub zANrn?z8`s(`&r}SatCYqQ7hoJaw4-trxSOdxQX?VB2*_8=!-@pu;^6&#^O9)C2z>} zG;7L7-q+Qu2ROjsO3|6FUj2rNs-vrdy|Ew)>i? z-J7|uS4?*dKfnfYwl&mBUc9Q;*RHPn6AX)MS9fsjY8EgwXc#2u1Kze85`GqzHMRT4 z8XBGJ`@d=RL$=Gezxt|u(`xxqW{vu6QjnbU4BPG>;XrQq3+A2`hjR8ktA%ElUGS}z zZD3P3dC%$xY_5a-_ju2$RNXm)02!)-QQRC?50M^Ly$feh2NUU z@WlIT6}+Q!!9oW0_;m-lQ5nB(zbJcXttBS_a>QCi_pmTe zW3$`%%}$2SNrs9ZEE6i4!i?))T+&i8Z2{f*Elq~PeoUypSqJ&onAcjJ#J|pbZ7{FL zjORx4wb{J37|*TdYrA>v(9m+4!e7epj`7@YJcZd4cG!3xF<;8OdW>hUe8oo=VyxAw z>qE|c;#PffA|n^=xw5AWYE8D+smRw3p=|?V_*SQRe{DbSXsbLUt%tQ+LL#j_;--yS zPiaSCq}2@`qW+>t>uBvLj%YjT(rUU{qyEx}ZUt$8I~0Q-c4&$$Q^a^r zGBib&3zKQ3!b;Y?^E{VY`iI zr+h{Hdu{t=Q9skMgA&B>6!p&(dw`l`0t?O$E@i!7x@L^SO#bX1>OUeM+)XxFD)XhO zHs+Uo7sC3)GeN_mM0x3dC26=nf9n~YB4$*UL&>v_YQuy*C`AYsCmDpTpd$grao6A_ zjYu!ajORO3!vI8?U0H@DU&;2;Z5nHuZ z{P~MMypE>~0qV|=p^;*M97dwf2AK&1{~u^};% zO`XC@IM>RmM*<8#IVZHH*5Wrrz5OEqH;27eb(M9~+Q)~AlHg&1_zQ_z+h@Dg6-oaJ zGRQo{w8t1zpQ=mK&Tj`-;jZnqj*v~Wy3J}76-(4=RUh0e3C4K>hW3&YgMq(hc^6~{ zh5As#K@vI*S5x1BA@V^&ZYQIq(uTfJ(%`SFTV0U!M`5-0mjiB8ie{ij$Q8Aw8Gb;C zpHT|*%>Sb~QzxBze=ltbVd}poz5edO&abVLqI*R55!LyoR@uSX^JTJ767^I=)C?(S znklnU+_?x>bXTDPS|T)EVR5o7F-@a#7@Y>P#C4;5SDKrUviB<0h(K5Tr zuV&GlKlPA2`r;$or0@}zXeT(YK0Z=FH9|0vOHc>evVtOYop{=H;&fhOk4VI>mS%OJ zA$KlnEIch0qzFIcazq4~=WkDF3?t0f~kmLMU>+X%+-8+yYs27P=h_on}oB-pk=M zO*a})*L*|Z#^UZ&cYSaU{z!;D7211U9y`rS}?uH_2E>!p)R*FgL8 z$`0u*48@}2deJi7CS9!zsjTgT>jlbn8Bhj-wa4S}2K7d%P^I)S-6iUvFHehHNVoFq zQ5euQUYumHOtM%yXcj+BW+6ST`&VpB=S6FZ*#fC?LRYH~k;MW>Z1rK@@)uiu#CA0X zi~f(EPUxGSJJ>VHUwxF2*lMlgOUKkIz(j%mYORc2`yIDaW7u8@`w`7agkpi%P|a%b zl0T~>@=I}})WjX!B30PTqq|~(ClDXGMbEUb0-!#BDQ(W#RCli_h!^#2TPl{6(1kDN${b=hzw7CE|$VXjm;Pn{hkgBXA+)?ehjUQXcReYmE1)$ z(NIavh8{SqrZWkvea^PgkmxBt+(eHs`mQorsZo9fN$KQzP%1AjUrAI`hz{i07@gEuUEp~6F<&!*NaR%c?%{0c?!bcV_{iBH3Jcny zFNh`M8-j;~G7j?SPZ|$t~|_8bW`=@<|>0Z}j|15sjuz#VNPmD|mP-3$0wUGnrrERX_dUy#r$dFEFX(sx%&|FUxFja9xXf+~!DSP7@{M5yq3u4(tIdYi%}x^!mVk4X2H zWOr3SL2sfMS4X8|57~}h*f%}%I(25AJ4J=;?PNMnma-Lv)+P8)=6g<#z{h`GQZ30R zdta{d)h2!9Lp^gMSBjhA1@c-Ac`ce{P0ggt*;9N~W|d5AlN^1sfUZB(T9bS-0L{sJ zku1n-3T0f=zW6+yY_@=sKN)OAr}*w>moR|>r>`ELP<=q{<5ZkvnxTQjJ59x?m99{c zMtnt)RIZru&boxSw}Z3J#dD>m#TuH01L|vFl`Iml9{ImqmhOPJFjdziiZp&Fdo^-q z13~`n#in4%zXG+$=>>nDY-YI7(R+c`&#U1mH6;PZ&Sa((y%0DSCJ?AU)a(QtwZH-3 zP|Lz(l7VoPo*3eAdQpMW@*U|nx#6BFFz~THBq~U|-nR)~s0cW{waD*R`NreY_^R@a zL2V3hP4Tg}ox!NvhSbSmC^mu&*v!cj%2@MvE zq$Dqo6l)D={@AFlOBN)Pm#(nROsp#0YiD+sdx2wyRXfGXuAd$cl(n`!@Grqq$#2Y{ z`Td0j3X>t3DGuAq1&2C2o4^!+VoEk_29Wv4#T~4YTq<~UZztec^@$7h^ia>xG|Dwj zb!8JHUcdV<+&$=Jh1~FMy+Ynunw%UY>BC)=Twe{kxVSjLAQZiC>2G8dXS+40fiXHU z>dIXlJ?a*wx2vtbj#xCJq{(ZDkGz{~GRNW9vzmT7U^bMw{*eBv>(Wej)pT8t{f^V~EQRJ#kF)^E$x1v#t9);V#GZ(5NHl`?pFmqY8dbRe3Stb%&)e z^%@uKsM^eO*!l^$_)H!6>BH!*CrJ~JIi26ZRkvNVuU`ds)LQLl`zgtAcl9H(AVW!W zoanteov;pxQdM3-*fq@9|J_M}efU?E-)#as#V=6Vb6TVK=bNF1wIG>&C%`a2d>%TGV2Yz zr<9jTL|J$6B@JFDuxo(i%MS5smQRdb61bIIaOB&brX00W38L@NLOip8!TX5Jr$|GF ziT0i&8Q&ouP$jtl_Ut|UD9Q^c>Ytp!;nY>o(=nUY@x##Rolip(3^zhYddg9!tr~9e zwA@NbLZ=&qYCyKhUAKywu-OR|lD%A_D{i-XDNxh!UNrI(S?Vdc) zH#5jP1OO%j5>MumQUbIyM+gzpCpSV%C3_HubBs7?#I)R`%V^>-S!vK9T07?=p~Nk4 z7L1gLQ?O?29!Mv^=~C-yJRK{%JD^!mbji}3HzQ4(HJ=oAYxCFej`D3V7e@#y!Ll(N zeMArTInSs{m~r%x?S#qjoAXRSc}9xyM2RJ%s`3`Vt#*{RN%CcdCMxM}Wtsr{%eqN1 zXf`>86H=DV*%Mq^hCqDDDjpY0Wt%0F_{hxw*0t~Lcsw*Td>VTxyKs(c>&L+LXrmrI z^L}hCgN*v>i!xhrzdY;k%XjsF3g!n`e+3s9oOXpDtZ;Z*o})}bQURn!3(XmF1X5w< zG(_w_2-fKGa5T>F+E!!!HVA>0?V^ec-ewN8mhqN5sqvB9$S){}BE&3vfzo}G+;D6fqQpeKdiqd~ zS2K`{GO9 zT$lK#77$s75S>8(!6kpPXLw@I%8Z9+yPseUWqh``YSS7jwZB?#-6|IzslI)Wk;8G( z;F!46q~31IkT*p5K`-1{_NQ%~5#3e{oY;!iZv$V({q)12AT?e$q;7&3g@#Vg>ia=! z@NSyGTv500rhlqH2HSLnc()O6pgO~;_-3jzB+E zcE7u3!&wgtkY~_rxZ#Tf@4e|h?Bh&G=tRxph|)CcIko2sPz?$9SCF?sX0}G}Kkm{*~B z$;$dSvC1Ozy z6QOGxP?_F2OBQ#cX8qgKVf6ja>QE=QU?ThBw@CY*(U6bnZZ^K|OyO(L_1Q@q0&AKm zPDq{02@2>Qg_TnLtXU9;7_0{`+BG{rAClb^RyacHM1yL|$su zyVU>1ME%DB#??qVB4blv>=o}*FS3ayu&~rT79R&F#Ys?32L^*7t@yoPUb#OdY)Zh3 zD+@tPYJvLVN^FB6o`A7EFB+Ng)5K3+E)ln2mMJnZRlZ`mP{0bd z(LPmY>MCjN18qu{HYK&DeBKoj%Dc+;ua$56P<@JT;=H-z_Ntt~~Weo{YY>*rniDV5u`{RaI+A1Q9>tGl*Ky>@M{ z(NBS9*Y?}=^LG8L)6c2;IZr?D*3W;{&wrEWljBDrFn|3Qx$57xi}Qv%fw9e*?d{;V zm*4OC9pd*2zoY#A&aao>34W*eWfR}UZv?*rejnvm#P8$$#_$`- zG=9DXB;aRFF8C<|o?YAT(a&1_+@PP!^mD&{ZqrZqg%Yz@yQgUP82wzUpZDtLZvEV( zpMCmySU<-UN?Nae-mRZi`ngU&m+I$k{oE|iCwqA+?*q`)VfmiF?g;hxE59CoZ}98m zcbcD*It=6I(Yn>O*9DZOi@t4J4!tF@s515(LC|^aWWb4w| zDpJRCufuO^*4$mOT}=Qf#^&8*7Ey0zfOL4^1FxMQhs0Hw~^nE_-*6&YkrbCD=RxYC&xJ? zH_tV6=&)hKhr8Xwho=#o@E7FAL4z$5V{wc96e`u_Sh^0Jg;BNcX_<@*%cEjFdF+X5 zUsltYU=T2a2YIA+J2?)zfF<7yRegal>tbscdP|u9ks>d2A;)v!wqxPGp-bGsLy~ye zN7~qV#4Klasf{QECle$J zum*#~L9C|81quXS(J*6|zBmtm;THI3hw@fVD{3|$&X6-at*C;!W1hF#i*gMMb1OBj zSWU68)DzW3+5NI9mT?b%r({zs7A%nVm=WP1RCelFE8L7S6dB2P*&xOjdjr8SgX8Rc zU7axroY`$;<`ccC@k_Lw3?`HFcEa42Hp`%-_?VIBhzXRAm^@^mZeD^IL|t66^tbZr zgZDgwR<$^SHV@R?lwILy4pjtOKzpz`1NVuu`1$!7^(4+_8pHZCb;>V=bsgkkw|5KJ0{~QlkrW#O_K4(K{GxtnXxG6&&XKj4&5u*ik5(Iq<`Q%AH*GGnP1}T=)`2s5%9g!>*eOfmd6_fRAM)}e|Eq`yyFJoe6 zH?Te5@}~3^45o}HyaJOc#qp7AzB|;b_B_v~%er;+b-7MqA>tChKE9t~@?z$ATAyy5 zuf9vX_+nT5daHRok+I0q;S6KWU?@{Y7Sd#uHXBMR9$~Sqg1Q8K|88Ij!WPqP%0X}S zq|u^eNTMU=5zCc5oS2bViJ4P$)zm5{>OMi97L+NLIEdC`tW`&rv6=|N1$o^qFNA0i z!>_L3(pz;P37?_wEvJ+E9R}6!bu7HX=?L92E^e1ZsQkkF#@k?#3sk2F27H{gc8s^liKQLdRB>lfei;;@}NWzq8%GxB9G zz~<9v>1Uuh0Q%f&xrJ<*t)vZv3n$~-tWc^;4f@B+YreKLhQbu%Cz7Y>K$|8o_x$WRB8>nPP#qC1 zD<>@0$ZMpQ2Et1i22vT2NLn&Y&@59FCfN+h5svzWkM^$Y*-SFCQrsPB(FePTBFS|k zroCRvU&xeN=E0VKv{ffF;?c0t$TFWV67r2<+FZmex0Ecf$yJmD2T``P%4sXfRlXv0 ziKWL#TL2NG5W~=nDJf6#NJAPijIryQlqWIL7F(nr9i7JLRw@!Cg#wZ-9;dQChxF1g z0@Yg!z)?*R0w121r$C~195s&6CQl|+zPyp=^Z>m)nIr1D_%MZmm_M+)Y|VD#d!L16uVD-*D$ zK=52e-U|eTnPe-a1^CTm(Q^;R$nc&*Eo40tkl;i#^(6a#x;Eq4J;XQ2tV%-fwPP*I zGT(Pg6{ZJ6jHIy^-v$Zg59b==5@$0`iAM6J8_jzeF9}-DO9!?1)~1~6B$Pi3iM@J| zRvHh;v92e$SrD>`N7vs)cCLoGlM9t{kXTIP&k?IAln2~^Ztc4P7fRT* z??K!sh?jhEiCQO}FEDwvZy~OH+gBhxU;EC+C6jGyY|b&TPd_Yxz#4qhgB2i{nWoeL zgp@%=3#YRQKhrl`2=892+86Xe+yToKuji^E_VLC95~7OvkdLF@h$@bYi#%DC&u7(+ ziPq#rovQ-+D?jMaCB*4s@oidA0|CQQ-M>S>9vu%oS%4ei8KkSOZHTWEyoKXgO+I{) zY>^V;*Gde+?~|ydc0@s|m5Yi%E@1fzYQpjCWz7T^TJV{0dxf+ejkxk;GgbF|DM#2f z+^0eHwK3YP^=*}M7}MyJbjD6bMA#jjF*rp?p;kzt1fCjxsMrz84L{^_H0=%+O3-fR zM_pcm;EKWzd)(uG&y7*NL%?3bOki1)ebHHc*j4D$ zoy$J-cTGnq^zK0LdsH>Jjn-0senxt+8?lX+Ba-ZPU$n-F@P8jMv|0fz=1G#xlBD!v zl59;S`L9G0b0IYm_s0_VxMbgwin~(BEwE-3b7!{wkGa;^`1mYrINWR9p5cjZE_@ee zRts6#=n@$SAJPNidB4kXG^7SX_0PTbcNHOS8far{d>9F9r5p%uS#tD9>hFj1aoxN(C-#|0P}CLklX~f zDE};$%%iimf%NGbstRk?cB^iiif~D*>kkBqJUKg{(OG-p39jkPOtl1jh^2L_$Rz5p zgLW9U*Wg|{?3F~=QNp~_A)RE>gbJRCHbNz>H5tEwH znk>qf6nI*XaMH!KF__rzKB=-fIub6HJVJoJ*stArMRNYUvS%qkCkd_xf=g}nv*vxG zh2byq1creSE_X%e&StVt0-17juvo!vYOsiJq^lxNEF%(gXl@5rb2Hd1N2p45K>hD8 zk}h}Bd8VCp%Nl@;;pPy5%mrBhQ_BzjAf!g{YSxQJwvFbv3>ANq%w!frb zfMKD662F%ino@UUV&PJ~`jW!+2C`%kE=&4NOu8zPF1?|wA> zU0@7U9pQ^+ONJh|T~vKkEG+tBa!Ai*4)3C&3%s0DynPe}no+dnVmeNq8kW{|xTK)@ zu~uxoWn3=t#SD7#Th-+^w0NxzBM`Xd~3X%Z>bv-i}PRKF!=daP&9O4Qubr-dcC4Tkhl>falkj!Pv)+1GGF7XCFn5#xZdXJXXMJ7DASQ97 z9QAKHjxJK-NT~I7p>Y#O=w98TvS-&NhGx-(QUeQ1Znl^_4$ba zYn3n&)Fb!hEO4>m^ZoPL@X?5of@RM~<5@mpI;wX0Pw7>WZop*L(sK1`z0O*i(^@6m zE0y(aI%^4$Kb^HCk-wOZs$Fb2@;3C7%v#fwnxL~5!m?Hg+e~HsdcHs{A@ZlQmL&2Q z(^170eOMU3db30L$|=2oOEr1)K04s9y+Q%;&<)nS0?uF0N8!tL-SPMW?+n$qM8-vF zVOi~29ze6VXBHGTsy`${^$PG|8HrLcNF<9v>tPwHGQ9Q5@L?ItGQ4GxXgw^0U52+_ zF+MCLmhz6a$~9(6kR>E!8q3|^$}Im2zY<<6L2AZpDD2y()-F8z39aEDd(-)ckCKw} zjZ6{uNZl6pg{)bHa@%n^f@THC>{L)(q-kp)GHYYZ+|yUN6E$rEngIEI9+Q<6s_B#=5u<hj^hKHsd7;QByD|P>n3GFt}m$-Ol`M23aJog95CA`$d9l)TMtb%v* zNbx=U+L*pG)~G&j0FezztEsK^gs0{IXs+-xacftvr@h+gY5fb|Tq@WX_u?_vb-Sna zxr9%^*(IjXfi>oTOgKiwzxMHMqEo@YP8PQ@zp!pz8zhkZ{UPe6h)iME*2977+032F zwlfu>_#CuOH|?NC+;{u}O{{kbhp4B-?cc@~sA>cgPoWBVvySt9{B4Axo|vpZ7A%&! z-oqn#bWq3=xlw(Y6(`KSOQuj(g*zyaG3SrusI6NV3jI5*;S0uaThL_<=L5Aw_|&?% zh*^t{x7`8tWgTm4^lP%=8jXsU1FnjA@>}Iw-$}}EmF@C3Ju51TNWo&IwTy3U#ZKfU zRaf(m$`o^SAQ~0o0`MVfQFk`7nUb5-LxuhhlmkiYzy1no-ANuG$C_G|>M&N_mYBIS zF0I{GWksYz1!Pp)jjd=lI0{%96$gWYmBSenVD{M>)qQUn#Jr>1Xgg0qX>OENkAKJX zppT6_tD;JlLiuDhCb&bg>KinxkDIJWp4asq^0EBeqq8=dWt6PYt_mKJ#G@}wr^Eyt zT_-dgBzARw+8Ss1w?fJ^7N!aSz|D+5GLTwZrmn0uzx* z6$o$!qBI%EegJ_0t8SzCsQ-E#2BLekbkuneGsO%AywtIe^uJNx6+RWQOJN8JW>mq0Vv{ZKdQdPv5rS6;}hQnTy;QdUMT*m_1}wSKOtLj4u7T&^K+ zAWDupNuEim;B58w-#|Zwd)AHzjs;$I>qu?9A>uy*k}kEZV%j3&ikU$!Rw3gWn~yRS zI8ZOtX5H0eEvk)7u0_=5d^q$TXnldVK}GM=Lya}LHr(cnTFuHD*~PbVtRQMGUHY^ z0)Oz7kk`Zv^5Ukply?`mAZ06jhFW=C(;3JYe1i&S_gt%2eH1{VYm%pFOb^q}>m;Ui zp&Y?Za%s0A$w}_WZI~aZ71ijI3MfMwjbZlmpJY;%$bX2nyq974vhY5R(%_yo&Zd!8 zp7pF|rAu5>QG<3NU(=n^(u?TngBVHQY0S{{qqldvpToVa^i`Dg73mmOL}pFp2SPJs z%o{r)7n$vyuJQv-Z+2ITNrinhx3f2nJ)b2QP;o{)Hf7STm!(Dos*pAsh$c5_jQ%Ee z^c`kVlxF(JGwJ<9fz!eIN0O2ilp9b;fHF~i%mzX&0<}Wn)^gPv=Q6KsEQV90SRnK z!!vfi**F(%`3*?MaXFlFkfaVGXbv2oWLgpoNI_du1tmD=PmkFYt@CdHuskDzEk#|f zSqO`>Z?R_V&(O3QJCyWWl@;hdj#jz@(1f_OzNLWr?Ng_PVLV2bF4ZYHMP~|k{N10k z9a7FvQx2}|?&{zgf$uPn)HDM=r4pU7!OF_0|p%#;^?nRGDFWUa9 zFh5$}wA390f-^lOUEcGaI@Dkt$*Ao!^myIJ)A+TVNexDiT+dGMRzs1^%qOCC8xs`y zN5B;5ttQ39NhmV(No%$AG3!z3Z{_7 z515NaC4$DXmo5}uzS*(t6VX=jlp%4)&CD81e5ZPq2x;+;{E=2!?rKyuo3#{$uDfZI z-x35K^un#F=Uq6&C^*FQGjIsg9y`+8LuMj_wg=;9LXS}Muk^l7=q9Y|8VvBnI$Qg!VFQan-=9gl? z%+%xNnUc{FaigxtyoBBHbf9RfFw{gfD>L0pfyGt8mZNrEKy7pRV>iTnA9S@X#w{uqICz^dJ-n2eq1A*=!p6r zZ!*j6s>RzvrC`&MlGE++?C`Iog>#yQTFVcWEI){kuA%6?^MXo^|bS zy*RwHUR}za3GVTtX*244N@@fb>0yns(5YrVE~CFUk=r%nUTTf6xO4tG3yo~1;oVlm?gW zKb0+1?wev}!1H9dc7LGf?2CZ}s)Q-uE6E3?G zW8Ejxw2=iUM3B|I{eXpyvozj~IN8u#x#eNpPK1do7QQ`9WgveuG^Dskm$e z(urgR@83cG(kq>bvWBjFT2AZ5%22aR4R5U>P-!9l;R%CKtiId zRi-R*9>PK@wf4aSdAha?kG!s5%2tM7*s#Fj(hI^ivmi{Y2ImEPq%<{XX@$wsGFMt; zHmrZ~thqCbcXzScI{S*>Oo1krCg4VRP{{*cuIES*6dk!+)Y*eFk!9L2# z?_cow{R_UJf58P^*HbVU2yZv6_#&&>g->)At8x*R017z}{z@|qq#+W8Rg{Gpy0mqz z<==vz({icV96E5233J}0r+6+sz)t~6V(Wrz;GWF*d!JX;mp6F&u zvKawgz3_QG@wupfO^~t5Y|D$g?$yo4P5_6zqF14T?1K}f#WoDuVlT4_GA%YTqcVUr zs(*1T%QA~A?D{8gE+|y1bL|!ERw#Rv8Jjunu?1<+RN>SM*SgICHSrcuJ!>snsPC~WS7Si0Ce9P_A$5>7&t*jFM)Vvpptp_h-bVYYWG2P={C?Km^J7$;Gc359_U!GPKz6 zHNc3+NR9_3N9W~febMCh<&50Cj&i>{R4NI2BtanwQj8-B!mNIYEIOLpf0KTfZ|XZH z=pt=!d`1R_^PtbXU-|}>!!k@u`-q%oYLI7qKQq3I1>aX#6|*U^!E$zrx@U%Rm-+>V ze(9M>bw&#`Q!=1QR%aCpffPp5TU?jl51*mytl9#o@M^LZY`KF0$$KM@?ki~^PB67)8;p_pEcJDWeHm@V*)oEUP&1=8B;D4xNO>99|7m2XUHnnN5 zwqeRv{C1hS$Nbx1XpZhYzQuvk9iYc{qh5AI{p$nKRt~CJcicW!7K9pPJq|nr*wLtj zNttRdyZ?!b{;NqNXlP;uWn!rx5hD!)-OtMMqf?D5CkA#WOY|FiwVa*Xm{}?*2FDCD z_;F8LcOBNt5AZL*vw?vG)}$v z138j9nApr*g25Tt$!v&U8{f}$6G_8q4El`fdPJd2^w!zx`5P&ce6MC?CV!3DuUhQW zuras%UHop20e{ z@Fw*!lj&f~?92^J)87xK_xGdV{|xJy_6V~-MkBQIFL!fTXErC0_{3^-)8?3eBS{@9 zSd`WW<*-mMO!N*1%a#Sd13S;rZJAIEF>8`-Vaz696X+V+NiRHm=du?FOUSwe~CU`{Z zc{l@r1TlQxlustvUEd{Bp+x4H%qtML(>&Ik1Ie&QUN;3ReB?EeM~XEj^13XU7o$|> zB4bFGpUm;iI2F1n=#$*`4w~C@Y+HaC0AhubnOk1hTktSuvsN7{u=JGHt9jRNHtH#@ zz2W6j9?g9vOzNe)^po&YhCqt#Eiee=)@StWinU5+F~hpnQ4G_`vQrEfyJ?hnnNDtl z-;W2dx^3towU%$Q?CE4%{02Q?)RPB|#Vu0r-a+gA5}OpJ-f|q7u`+XaAy*_PG(Y6X zE(y@(V8M!Les-2a8c!hHUZAeN9`N$4ih>L-2CQw?!UE;}t}rrCnmm=Uk7Rx(xpO45 z&uZEhsdS+#x3WMV%S;aLmzo^Us7Zq3Y)%k{D_JF$VVPAL(R~faz*jya3zRJ!B{Xer z;MUd)|DmThG#ab2%mmC#(J5`#8t`p#-R6;FoJDw z{Vs7wn%wrRTD0&m|F9>XTo#edQ6@sg23-7QXtg7YYP0_HZYF*yNX)F(z*BY3@Fak# z@s-z%X)2Y|f<9@IDIZJkqBQ9v%w8JRa#_`BrMm)Z_vKt&8TWKWd5z0c*Um*3z1w@o zS2gy@S-8yEtCL|1M`~p1^SM-gR`wjFs1$!^X2+c4_&whvZ-;fV`8QflQnu;7#V#{4 zb(?rf7#k=PsYLMZ{xvCJkuXF3oOKN~v37M`2bheFJk`xVgOFyq$GtS}MD+G7k=LED z{)W4m0D0E8;krj$zi9JRweu0QKm471+^av@pA@VR%vS#8+;@z6fn`QLXLNxg^P%?c zfz)QXb;NLock;^9B8+(dhUhPMGv@zFFg9US(=@JN#+*K>Ml`yWOzKVYSnD>sc4UgE z;CB7h(Tdz&9Lo_BQ_{o(rFL<5nc~7+4McUq_v2$>TSSs6*X93-E%v)kP59Q`cq}ir zqJlmX%zUgvW^EExeN?h&mB6myfExadENz)LxIL{aD9fsxZPm{y-x&&7-;pC;>k%#V zbgcZD&}i9zbxjyyyf`iFaFxH=^jf!*=g@GQt9)nE3*9$%v~D492j-ySPl(HUu0buX zAfrbmJ2}wM-t`=6sGBRbPk6Ni^@-Nl)iS3kUoB!z7>>zbM|t_7^CWZa*YtY#&DNt5 z8m)ENC7JvJDqj~OVVQ-zh`&BKk)S^738}jEY=b)RF=-8rlia5VFbw;Uzp~D7j09mD zdj5GjJ+B9AgIxk_{kq2QLmD7Zl#`(H!B1N4EQH{8g0{rgXVTx;E) zW_?|zF42eONn@3f`Sd{Wp8h$TS;eC|=P?;9Q7=1PtX}HbxA}i;j4Dv>Fw6Y4g3&eo>n%K?L4Aj{3Ou1}6BG{Ko(zx*$*#{H z5=q&dZ_X4lde9lkdGq^Lop;;`;SaHvpH~q`&Ei}bvUdEel&{E+FA3A&sIf6x!_9fo zK|NBdysU8}kpGs6|4pB{&q_kv}3a<#~)@Np;s#0GkArc{Jn1F?sj{;spsyK-53qcztR-b zbgf{m;^Sm8kwv!^woXfbrm(y3csfW_Vrt**{F5!32I z1*bV}vDFFu##-JKtjb@^xl6xROKVEJ*lIz7cD1}IBaaSlc~gcO`2)fR_1c$hM3`$< znYQKZ`f-2aUF5T^QK*l}wX)GPo1C4bY&WD|sg*vNQbt1oGpxhtix87fyPdPF&p9La z`kea8Mr}!QiZo+oj|jmh$MBxaAw2R_A+@v?xva_VSgQ}WRL@o%8F``@kH`~6@@y4! zgf0pM8}ne%J+A)=(l}2l%zCP$+eJdoo7jUX2?nI`4)$+6bEx}E=Jhi6cXah2|7uSm zm@n*>G*hk|w86v4G}}pI{Zhsq>o+n)l)n|4Ip1?>i$LwLMn%5X$AA&N%^it~i6HjD zEmA;Ky3+B+B$)3p@RKdzBSKy`|9@JR}ut&ZuBwlKnkd+%U7# z4In^K6phBvFPWy+5g_fCu7r0mKweTvz1zey5EJ`+S*+AM(|wH@Cu--k9ubLhYCS}` zS?JnR3QubZ1&(VQcVZk3?ve(7$}La5vlMBSb(j?uT3OjHa}07C5{Zr$-%4jm7NXmf zd(BOJU%D8J2Q5&=f1xgy%_zxBeTiYqvNMrHCR^(Pr*$nYIL32nGqrUz*s()bL1D~S z-fDVnV4}DtN2}ghZw*yHDkEPF29t(Zt2Dl3#0@e`2WuhEAudWfwjd?QatwgzWWZCfj#oW)c_0}Z(6QH{&OopCKf+;pK47_+}!DUmUa zNJ}G9uu;jP)S%U%IDFFSSu3|&EKN)XSep7)8Ml-DHP=K|Gya3c>(``dY+=4hHfqLd z)SPGO(vVw}zF{b1mrVyI`xm5!-;xEg?%>qZ(oH@o+~zer!H|G;+K_elZLeqTYg~Q< z_7PP0N;|jbC7)T6kEZ*Q4s$1=LFNDHpRl+B!w5*^jOtrM0i{|}%Ux}4q?TJ_OFV`V zNbmg04uH0PDV+{Y(v*e#>poS`| zG`ppk+$u|RS3q>S%Ohklvr9lJj)+<;J?eu5gMka7!8y_s$9EE!@5ZbUUcIpilzC#xXhnhKTh;YvL9tQh~AGQ6Nd zS4PNo#wHRB{io#80=Ea_Ew!Bv5X-CSxb#_^enDzG+D@rCg^urBR|}5wmqC(A8Z!ih zcKCxQ$=u@CFL%M&Rbe>$0ce^!b%PiKZOx$W%U+W>8x{p;S4ZIN8scm{e%v*r>m6O_ z+UP`s^r=D@i5oEE>q_J>K`=Y;Y*%jOjuJ&K0;vtdZIy=E>?m zx70Z6rPs$8F#*deXma<7wbi2T&c=lJy@w;_)TMp3g!(cmtb$YKrX6a^Tviix%50vU z4(b1&Sj_eqT6ky;4g3#OS+rHv_zjA>nP3}53~4yq7&goL*82ZD5&A!;GSR%0VN3Re zp?@1Dj+mw2Z*vP0(fr|2HSx1pF#r-ltI3bYmXd*LI*)eY_$D9ODbqPXDoSg4HJ_gZZfdl?cL<*nsWMr1G+ zj>cRpjc}LJ7{ot+Fmj^X&C)E_VmG|f`=&f?0L|oKh9uo>n<9HaByXN zu$$EFdw(4Z9)E<j!aO^h!kx%SVPsAlZPktt*f)^|PExvj{`JsCd{mTKt8;OxS=SM^yl1w41?w^_w+1K2F}w83r_XD)#*#=;TL;M-a*#_|tmK!agx%<1^r z2IFhXUPM72BXPAwaQ=rmZ22F9S!(6g=}3?3Lj2`&ffxLBk3Jb&k?b7a6{z+EPSAkQ zH5`@nyQuC%vzK3`x{td?X0{p;QPl+~<= ze>K~nt(FT!tAh(f_SFT%%qv7yS4}Zo3pg#cfUO+8#Y2C9E@x0IkFYtnDoubFO03M3 zmIJjV4=B16?|^c7>CPWnQL;39bH#TfY0kJV?3%h@k7B5^v{a)^CYd6W;3u3+rHWK2 zPSysKurpdpndA}U9CCK&D`Y$ACLB7!`Q` zO^Fxi!n05VKAjJ4O%h?QoKeL_Hd=nq={~FQam)FENn`N5WOf$=gVvM-k!sG4^#?>B5 zv=47kDR7`D zVTwWh1*&;u;_wA|>21f*Ekfh*ukq+S~q(`_ONltCK*J#&S0H zy0A*?-?9rIg5Dyq`!R9s>JBuVw%H_-`HDzPZw1meZo1gTi4X?Q4{`o(x_Ex6oH@2M z0vdVRFEjA(tVYIIg7KX5@8)(BFcw4auP>pMy3P=-5&Kb$g~vH4?PB3`)JM5;6{|wV z?zZA{=@c;nx(ZJb?AuO^%gFm*kSbi9CO5M{)*)x1l;@h<#$tiDpjL7j$<}f`UPUDm zYO;2kte7To1G-2ItZqlsfg(%mCD5h~7R*`lpuEEsZn&*H+qqdrat13vNv zK5~n%Vl^$a(TaF)3!DyRqB`x`iprtg0p2M0;}aXj%--GhE*IK zX_H^Hb;c?9L@ADJM(APxYYbnt$A({Zqbk1pH`byy@@CZsrnu81y3pm$hGofg@g*lm z`)C`CH3?Qegh7N2MEMD_d`|3mRKBGJ)4PD$WCMse4t?W#q|-9u;ppWrw1NzyHRELf~fV*mi4AV z#s!+pAfn!w^mFqsA}lFN`vym}?;_Nur7zm2a@036k7@2yR%$0(hnC6xJFG>zWd+x> zf)!CK_!Q~P{S44 zHMq3}Ey+8vRbNrDbrtu)O*-rb^g|WWx{6a7u68v$2Y2AmDq1?7A78T`~z0Cb;yC+fa2#6H1Ta zX;R0>~D{=@=5>JWaa&HQrCs#E>GvdWRo`uoaM0|d= z=BV8v>VFjnUC09yXF?5tpwp{Qtt%lzR6QzLo-S(>@KNKkkQVeBykURl0=YkfMMYUV z87k`*Kq8V1X+h%^g29L~ie}J=r68Pcn7N`G__8r+W{P{th;UsiC~+#V)S_tS>L^&g zCIZXfL0wvwQA}=Oy|qilm!)yI$*`;(VHjAqu=alGbqdpqyWC??qPq+~=FCB!x|V~R z()Xten=GG5b@Ht1e-t!?_SQLcC(*!-!QbS^A(O%ov(1DqNFKM+cz#z zy^R=S6!9N0WJ@cuGwcXAa$uU~-VnYA<(|*J-Wrv}uHG4xy(6PwY*Yls=!U-~36%`m zzsOeKtZ$SACx=93y_fI+a#l*AvcNn4tTejXF0CSxON0xMig%R0zA z_b_so_=p@}MDnHPkJ6|CYs1aWG9hZx}P0z4j`7SPdMw0Qw zD3ys19b>!q-Kc8>J4r*J*c_}8+~sa!t5 z{2$V%RO?<|OXUrV__}Nx9+ObKOWd_sPOm0=cTWLqDV?Q0a2R>yDe^0$iBVu(9!$U0 zJeYo4lzQAAr5;mQk37^vUrRngxukuUzLpvxpbf;Su}iUXCEsO55X#0#oVQU+feCI(-~3fGLv;lLS5W7B#I*utf0(4gR(yn(=$aE znNc#&iXi@MWNQxYF!2vtwxoH4yn^hh??kiD`eFEdY!kAHw&bfjs|=qhu#fwZ!~|4q zM7DU>aC(O83$K!5U^ZxyCQ$95Je-ZM0v2M#-ly4#`~=V<_Q6`(Te=-yQ$9lmx{n`R zhS}DpGV&io#1=%;x_ZW1LvH4u*2N1}U=4X&eW7jwohIl!eT|$Q;Zyw@Y2gy)=Ix2A zu|jD2c{CE?2>yd+`Xr zvr?C*gZ-XO0qJ20`B+5j53u$QbNQp-%W*{cm%pUI4%)$ZcTYl~JP^RI+#|em3&y%c z${Oc-o}s})7;Y_>M`$u}*QYu{lj*|Q8gcpKNHX(8-M<#d%Lu+Ogo7(j z`5d9I?bFT^sU_*|&CDt3dgR0fSMeh>%H?iCAjX!^`T_^A79NrgIJY4!9-LC*!F>hl zB{4N5&a#y$7EgjEJ!677w!wXu_$MYvSbp$qK&;rZ*X1#3cxOTE&=?c$m43kN<-BGA{-SWvgSDz0p$zL*lM15#@fkhAWy^5>&;zHJliY&zh&C}FTV%DS_#mc<6DBqgI zqXmw*w+dXH)1dm;D>flZG$QikEll(?+3~<*2JpBZKKnW~vhgPEEiE$@&P#{IQ~+?U z?@WiuXs2gWr>ERiB(fICfjt=_KX_&p*<9R`iu9eHUG65(L5M5mUAr97e(?BJ6Rio^`F7@QQ3EXE#LjDyAO zmbeZpW|&b-6+W<-tr5ip8}sS!gN^Ba4nDG!0W77cYbkHMsTwoEC}mgFQYy?+;1MIT zErTOVxrn8FPSOKYnJAlOl+q-LW0%_MMO)$mDg<`V$8de9nAP*cx zw7<9VBa0qx6y18|`HKFt`r5VV2|n0#%3H{Ixy|%G;sm?PIV`U zpgwJnOH^V=(C)BmM{%LDR+rWXLsmgrqv(qb6P)?O`nwEDYp?qxHfEVsrB(gg%l%XG z`sI;uqvsMSSRf1btuZD(@p`Cl6MO4hV_>TbHWTHe^9r>aWdG5>-@i5}|9*eCLSj!6 zY>@hc^sp$T@5$TfilWhEp%q+`@ul7S7k2#R86Vl#?&sT7TiRFTmbYy{%;%sK z-Jg^8m)9{a46XYzPTQNdhe3vsXvJ4?mb8J{b!X$WI)6T#XQwsA)s5VrF~?@lX~;NW z&v{!rG)?4?mF8N3DhQuTATJHw-?&YUpAlh7hgGw7`15hg0e5&|iwPsp+pWkJP^$MZ zJgLE`G0W<~BfQGoeD01Zfv5{?fhy*m(3Q;#3wMQEakFx=z_MojkJe+`A&Hfj4 zhrdPHf;bAI2(p(Z@`~l8d{gv}`}7(^6#s>8t%lb?gW^Xkil52~7vYK%?Le9xewEUC3d{@U*kppc|YQ4@epa zfTF?(AR7bz-Sg%`bST^6g0s9>R<`GJbYzhhR!VF}-TkA}E|Nt|1W&UMGwPOnH*G@P z+wh3hQxP=5LlG3=s*HbkL|k5rb}4>-EW{rL(OeyX0BP9#5m*lhOKZ|jW_(mKQJz;Z ztbM}F`*Ao7)Bw8bgtar0wEJg4KR&g<&plDgoyN%mtHpn3)Zj2=oAs*=)h}B0FrYYX z#)W5Utk6*87=Nh^qzRq@9j)Y*yH_ZiU--Qof>R^#duhP50VYh2!7cGxy&sGjrN(A` zJ`dF=D!#O1xZ{@xD*UDG!jE3aIJ0ydZ@kGsozgt*CD#Y-I}pKOeAEwh5SKzZ@CGss z3?jPs(-_aO9%>`|Pf0Y&@Xy89--WIVLDo?K)fI}~xdLrqk@y`jk5J4)A&TEiI|jA} zLk>lf0+GSpuE@c+V<$Bq=w>$E8i4<1-TD#S9s4JkJr~wR|F`rC5fVYK<4;GYS4X-z zzI)po(MZC7PrLRx8YmvLndWa=2i1*w_^IvmwE0Vg#LZjS$1#vi{7ki??-J6Q;MM`U z{AF;v2DgVMf{YRDUF;Nb4VDO6D-rZ-iJ)k`R1D`d@S!NgZ&V_#pNf~@JYOME@!#n< zvpv!D6?AQBA}r0XT3BfiOZW|SUHC1WZt2=3cyiDzkLQ!9BWO8RTRt2(6w&G3HPk^#XBA;jUxk1SEOFFm}! za2ss*@z?CHw-O@zi=uT}L6N_-O;|?AoBSwQi2Z>WdPvK$pyec`JsSNp`lbK6f7(Q> zN+kQ|LP!x4UxxmSOCXor@9Xq@M`|~?K_2UuP1OEr;yM#29Kj#~b$z9jxY|H(AkO>G zb6TLTIRRC?+*N=iQ_Lifet;w^ZS(vIGCFr+W5oB&&t7-|@Fy@rghr$A`EiO#FRR*) zL%xL8uL@n}X=d;E#c$djR{PqYg0Bi-dX1eGH`ndp&-oWzZ%ouDcdk174Zhmf-iF_@ zUGbkGPCrl5sUw3yiqMc^CMPsG5?ILo$JyKewOw#6tr{Tht17Q3_k zsS*?p+2ogI`Tm_L+}D{i0PB^$MrH>Ce>@C&b}vU{msmLmE0waISm@?wmw4+ta`{Y` zmfora_~Xly%bqZ|r;WFFcN=~&H}BlZob5TvD!fw`*|}4m3K(4d25Pe}i3LTy?XXl7qot2(mu% zgqO=EvFfc$Y;muZSO3W-Tt0vrU0XbbS9kTf z9RrcN{{})dcqdfeB=%S!Z!#bAaFUk@Qtj1;qV^3H%!tWu!i)P(O3d8+K@|iT>5bDb|lXm2)04bJD0K7Q+M9F zvf8N6X{Rj)-55yN0dmnQ2YYImj~$TBgWDm;x8@~-~Vsorxc1C&KJM;^U{HY zBM<~e=W1(eKtCX5d0H(+9uuZ~|Keb*rL5EzR8|8C+aLo=9PS3h#@>X;epV?xA@Zgq z$JCF_H2?H0#kawLnjHxP9HH(c{tBS5>IFnR2^mvSkp~_Ep-|Q7nxpFf2SWUe5kJcK zRR=}V&;Q$lB#iEd^u~>=n7Fa^xZ}j%PoM07Uk)4W)`jI+ynad1NR;~LS&2(=3>M~EJ56NhNgRjIj{R8box}zPC3xHiPEc>E5~}Y0 znawz!8w=dJPAMp8ew4~0Mh zn+!qT3A{TJLV*LI1)~Tb-Z~r4jUMp4Pr4>2<0!rAkI%!~o7hu(-@_sy`-EO1m?6i9 zjIT4ew3%2x#;KB}XQ`xFWn1381^PvJ$3=|6 zs2?c=?CI=anXn2Lq<1tyj%%v^*WPH#6Pz9Gss2WPUHf8}{<^lfOMkJa;19+iv^;v? z&U5(ln}I=>xa7_*gl0^0ZQ-5uk7q)ib$V>Dv%o~r+QacKtUVF!Ez}OM$^XDH^TNaSB2v89-?&<265JS%Xm0&A0VaZykhQ!4xwhwvB8pVWe>b31Qm52 zbx-2+X+{Q+E`c%yERsOE0%l2|LIIm3uwDUW5~x(bK?!V7z%~hNQb5uTEN8O<+U1w6 z3YaawR4HJL1hy%lN&?#zutEaW3TT$V4h1wwphf|yH?o{v3b09_Rsv7&!^7=jNaxX~ zR}e68&B>H;Og|*p!xS_0H<%Cykt4AIM~w%O>Fu=!+|do2IPChn!4_3xI(JiCt&f&|&wh?kJ{oLGk0 z5GJ$D`EoAAn^DN(kPfK`y$$mejwB6YD^BUk`M?$Kt(ckU@<6w^3&%;^M>unlP5@kD z&CL)fK3RmJl_kuo#BizR+EMQgt1|S1|(Kiw{_+XlQ66&IC-szDr$2|(Y=-z-IwAZj^2yU-F zvR>{M8f>6E4e(_2W|ShYl(x0}g0HebeIu>nr|IfEfV9%3*q;V(&$Ce^Os(imaguux z%iA7Np1Es$xmlppf@QwgH!r7S4C5q3Dqf2-!E$({(s=hEd9cB+&LQvjOi(rtzS@;G z`zy6rNbFPQ-ozpsB8m()5pJu|yTj2$KBEaKiBfo?G=;M`ytZ z^%bi%^inchHV-GXnM)v^e8&=s&)Em@TnG$#94fwwtx2RBY2b{}0yc%C+)T$)Oxd}U zrTcx7t7KQHRBSnMRh-&+lN4AITkh^i@k)lYc+%YmiJems*fD9M-@0HAVb|Bv@=x+= zsyK008ld@o#4(glTx1Upy$+&41<@v$pV&OP_!uu<#3^cnS7f{V10}BoSxQESRu{%t z>HvF?y` z)?*V|p;gOs=!MX`lJulXX(40Cy;x0(r!19!hRlD-R!xd9kSWp|42M>SP7ZM(D-s`O zNvw3)fmaJUzw3lV>EgXe>I3Vr7h%lvW2B(UqCx)JvgBM} z>gq}!e-Ur$KT(uv=uS!-$mJnEIZgPFJP%8u`c|zxf5ve(QmP$7Dz-`-`x^b`v~9z! z@5bf16b{h#Zs6s)&zU)`LQWBioH3s$PAwFF{R8zOOsK+?+-TDcLm$0nq}iTTZH?jM zOXPjqp#erR!5pw2)m#d-|t*vG8n9C#pz7(ytT#Sj=~8AAwRm&k#4CI3$5 zX`s%S-)lkFH!*>P#gyYXm{u|XSo{-~4b(>{-?_G^_f*&8o@z5wi9+n;{)u>x@k<(C zmze^`jmg>}|J)>TKXUYsM)8!3EzjYncs?xsQ62u*4g>jf9V{#%SQrzvX1Pm7K^|lMxjC_TnE*EM%S$B*?;o zBsg52-X$@AgVTl4Xsj4>?rG0`8xmCY3A4v2h{{m1_r;qqwbG_0LSkKx)g;+{o+KR` znECA(qo@T2m5N-9y(LLyE0Zl@D^7~B4c?R*MZ8%5C0cMu+`~smfm3rGDq^aBOTzhs zCSoD|3zMJFioSNXb6Ha7;1wJrm)X|kg1&G=Do_{jrJ&=8M0ml$n?dHhVEMI^##;GC zM$vFM&^$$ZpyP26;ZVD&C$jp{RWOmAf)$G&uC-$NxBw~1Xim2qe zy{$iSQ<5mxJ>;SLMuUg)62U-z-*7}8xgVZ)@RXu37do0>dil|ElP3F(!+|S@X!tOx z!s;)V=TEaT^zBHoqDAG3PN#x@rs>k!%&^|$1W_7)S3x~ADPO78=ua*o(vk%GMV`q0 zqC4aXUlR7!IK0@yevxr?6^T&p7+qo}nh&wpZO7; zU=2X;zD)NRhS(YM3?sM*4kY+E!9@fI5Ue0rNidP%0|cuH_9s|Ou#sRtf_D=O!HEPPB{+s4FMStYf-?w? zCs;yo5y5c;?;%)DFoR$r!L0;uA(#h{MekzBSccrh2*(MIA$SeJc7me`4k4Jd0pQI9 zZ3M>FfliwU|2 z-c9gsfGoO%A$Kw4Rz}!B@J@oa5UeIRi(neTBLs^GrV#8PSV(XH!Q@QBZsp;0tLrZMCYBdjM_K#=2sdpkiF!D@mH1n(gD6hT37D#1qy+MWQI zPtZ$nIKe3dO9)OTcss#+0J7B!7;+m!rZYkr!CMJVBDj^{xz7OJM6j0NR|Kyic!J=U z1cwl`{Sx3=f;NI92zC%WyBeU2;2DDd0?48lGvqWwniydN!T%84Pq2pICW5aKY$EtL z!RH9J6MT%|W`d4i0o+JXCpd!OD1s{qP9Zpw;LiZcRx@OI8$#wV!g7Mk2u>xqp5WrG z-+=xJZX@_Jg6RYs2>z7d6$DQZ{0YGe2%aOjh+rJSq|E?-Oz_kyRrDx^6f@*wgt%uA z{1L&w5L`siO>iH<3WE0%+)1#S;6j4W5IjQg9)gb(Y$v#YUQ#6$nFDEzIQmwELFE{%=cZ%513)cwC%<%m*m|M2-mL-~8Mw0npW&AT(e2(^ zD?GsiUXM~+;q82!0yhKH^)Z-n_UDv>lVOPQ1Dn2^3L*k;gU3flaiab1cVwmK9yw{B`{$GPJNF=XaLrTw9cY+u z1L7hp1lQSz|5=kT;=P3}QhwefKkq}xUQH+9&p)Nfv-?PKKxH;aufzwuf6Nr?@vg~V zzf)*Feu6nI+Kvd{vp&sI9g|{Ewb|Jz$abH-=me5En`N-=)pRxq-%@d4Q06-KPiV?y zt8Bs`=LvZ4)`@HT@MGF;_O6zWjNe0Q>)4a_S+$6K6wl*mHL^L*8ZkP)``Cvl5zU`_ zj8XCLeZ+}BB~dZ^GW8tfqr(EE+k!(JFg+oJ1Lnl3u9x6f9NiFuDmr}Zf8AG(Ule*s zML{(|NV>iPp)M3urwR%dGDt>eVrI_DRp2SgRgN+hl6!YcqO=c3>e)V)i4@rzNt zWf!r+i|}T@zHV7x`}G6X<9+D>B7zmN4?oZf`f$klYWe5p5i`Wl$Ukcv4NU3m2+X_j zJ6CM_x10;WHBV^sM$PZw%o;bf;cj1=BOd&UJ7tOHtU<}Q-t6h~ZS@H;ZVRN9wCi^1 zxiK!W$|j{)m{f|g0;BR5;qud%TZYXlKgYhTyE0&LxN9wOj$-U;g5)jwnguAZ*yaiu zLoj%uoCDYA4z!4AC$R?QuPH&A;OtY}fC!j^KK@{rEw--n-`|Wf*N41qnW4#V z#N7AubqSbOmDlRdH(ezcl})tRH#*-G8bknGVO&|C>xgMhsdv6<5zAFjf(+_gR{ADl z)>iaE@r+^b~V%VhGg;mP|2ljp^#^d*hCg;G`$dSHJkWQ+L(|Q3`CHU5E1%YUsih!8BtlE{@5>UCp(vcfu@8WiC|a zO%~nRgveZU;$pyVr1h4zIdJn?F%0GMo8Ymzz+J|#!dt*?JMQAi3AeM2S=&|CP2%r< zxdU3Z5*v3LYQu;Qn^AHy{P@2l19aJ<2mPrV6?g*a^CGbs4)n?2jLP9Zcm{K@AqRHDyt(Lzu%i%i z0YdTn7vcOgswaLzHHw7x*w>wsHh*wl+H^?TTv*wKI=_CnD|OzD;Ukhd?+sFCVQD3uc1X&;D|W)*Di(-9Qi)&Dc1D?+Yi-l)(*#= zEEE$^Q$07Cr@lwxRr8d${0+I{cyt$$U|_I2!iss^KMqWd6)!!%GT^LIDYvqA_0CF* zc=nO6J7p{@#DQk-w zoBE_XEAbW1%nys7tzqwPV{;bB*Gf|T*y&&lRt@Vj&?N3+r|wPn{$xEIp8Xp`df7wW zMToJWHvJQ`qttR*(7r+*V1)Si8g($)H`(v((48F+A96cH)c#MT_`o^FKd2y6e02Ep zlFjrfUDB7S$QMglaUpXSKaoKt|JIyHnWE>VvVk=i@FfF+|GEyjps(rLoWvp=Jjn!q z!BTH*p>|UV*XvK0T)eQd2&dx2XbVSfnkx>{mf|vZPs`kSHC%wY8)iHSbNz86Yv_hK;` z?-9%Ph6#{1Gg+j40r80Q?-wG@$jEU-+8)9*>Qz=+e0&;vwB^soI`-CZ`6gn-kujw{ zLpAN{a?i-M(KAuTq#6oOMLd#Og!>|{`-`nB%Yrsy2DFV9eN8QtIpipzB!s<&a zP4W9Gu&k&#hxvV#@@2T+w_d)C@cWkI#qQ(K;M;HDT3?k8ZR)j5{MaY$(e(|8;u3I? z0rXLiMBQV=%|E3(bl*Pa`2;V7y^gnn? zeLbhXo>NdFOtTO-5sZg?QWV6sbfz2ukSRx~uQQlrkZ+2D7AR;oAly3bxhUXUj8{sK zfZUz>XmH&)IEL-$WB0vCrB8mQqM<(bJ-c<>$kV)MM?Z}~T&{)go(VR9GUoTKKqbKu zlQbXe87JF`Ig2ytr2P}lm@udKWWOe((VggGhmtNA=h3MUn}Q*vwi%AIU#;eVs-$xpM4mM=@e*b z8LOtTGG;C&PrmucLX%`*LhHN8e)$4FDdRYf29K-kG)dsJq1CnL4=AjjX zu>Hrx_yXUfbK;FJP56?GFgs(X%Gi#}9C#Y#Gb@?APcWg1G>`K!*-NU5@HR-=WI5ti z>?V$^ZJi5~jj`d|F}y~21R}}(0GIgqN93X5y3R1MU^e-k=oNjDzJ_}St(SK0EJ29k z*Bi0VR5R+2J@9KjcM40IrFh?~I5!oggZkqlICnd?8OgaaBU9d8f3rDWM?Y`J84N6^ zr;E*Rqn2R9jM-aJ8JBlg4{?b8&zsj%vY@7ZXA>0$>&rYXf+>*=cVjM)YW`y-mUocuja4jt&;Ej z)x6u}JAXCrcKOa<&08(s`HP%)@G)pLAIy0lp3Ip~%$L2ptdKbC=ugGJn(s)##UZ4S z4~LhlLV)I%`Dw{46u zID{t5#+Xo&)OBRyv>ua<*EXU3nDF~*^@<8&WYPhQN?20br3`+Y2k}e=jK!dpS?PNI zF7%YMP0YKU{$IjII&+!89K%%omWJ1FSg(T@O2I|WPPk98u^?RL-0YcZun1;n5EXDI zjTN;)Tts4}24!M33_g+hX4A9U&m6mS|5Xj*g|$+0BzJlm70*w=Ds|29m(R!ZWyiyL ze!k-Q*a)7lIiq-9W@NThy{Ps!gxb5RjW=oZ+GJ^#I2;n#?puK|DX932p8;yqQz@A{ zMD-!cv|#`!9>h}w<#ko0XB{D5?9iGtoi#o4;iad6>#N$m zZ&aho(3XFTmh#@tRU7|4(Orwo3dH6QES6(i7@Y#1Pe@BH8E(eNg1&?y0K&lY7*F`7 z9mJxuJqd&6(Z0MY7yc5khHH1MA&KhF&34Bd+wkVHJD%so?7Cis!435CWCQ7TkaR_k z2Se?Hq?cs-pg-&bgbcUPphi49nF2@EMVDrZSoVvrMRjy}KN%2toT-cULo&{eufzuo zL-G@!R#Z}sQFq2WFeD?$caGU!bsNfeC`(A+0!DI3ALum8TaO5EZ;4;j)Yrz`2T2fB zTmcAmlP-qEK-5jE(;waje7bP%_Q|=h=V}|H?XwTE*$277g3GZecyv~Jm?HeIHB^LG z)pcBeeY`*8o|*!n3EutO?dSlpd14HYQnErW_Ys7&tOl-oKzyw|3A)Tt+}uUP-&Y<& zyu1XBO&KMd!e8_WdjesT6vX}jGy@QtxrQCWhAjXrZps5?V7Qjm7p&TKbtrNXB15BqI=~x*lxVoB6`~>MweyLFdz!*ULn2y% z5)&ds!$j4>|NHVWI5a0>dVrCEPSQ~a3=UdfzpaOIReLWQZR$TbO>q9np63oj*oAzZ4Jijn zmsKWNEbAthj;wu+#tr5BF&zmTYK$qGIsN)!3;Hi^R}cM%aZV|54XW271^PcfSG^{a zM+$V+p4{;E3_pK+*f(<$wbCT)+1PzsDA}C0H{dcTDAX~HPSC2yVS-ic(47a}CzioF zTKq6r2eRik2_;u~zv)wQx%ZpCE9{U~11yj=HE?}kX}y481*DQ(?;lW(Hw=9TajeBY zD9#@_~laK+Ii7lb1{U!ly-LShiY;BE(tykL>wq$aJpQYjWah)GOcHbJ} zBp+jt)OpR}+LP@*h4S3(_`%Wh;+TR0h_Wg}y^ovAQipRYUg3(hNQFLH0~5ua9*+9a zz8N$1G5L?iDPd0Y4$jO3b5xW%8IyY{9h2DCJ6)!qD?z^3#6+lgr=i4U=0@ z9(9xmQMu$(g-My*WI9Dp31hHlP?~5!qNNm6C=|Zf!L*ChOiJ8OJl-UBb*4`*ylS0X&; z=(y4zCYG>LH{HFBnOET_MAVz4m7Ysn7s~vlDaHUEkvWa|x>q~kY$nbE&J%p-Gn>)g z_-RF0`D4YgpEVDuxbBxAwnJ9v`J1rdHw^{oxYMOLUb;=>N^%H4QRY~C-HqgxgWY&# zlOd7ryVJz^>D$l4k%q|K^D%g(YEN&xateq-&HG01N^Yy-6`9=R6}~8bnGnt|y~^J_ zsOcD!g8YK@|KmjCWO%)@m%oiy3}H~3vfU};fq(`036VvW!7(MXjK)`qv$yrkG3+0U z<~L{|+dYXnmg6Tx3qjFyWhlqrF~{hl2kX3v5LYg-_xna4$A|{7EXD=&@lTO3YFF+f z4Q8U;NLCFFF3%L1tx03qTrKKOcBZazrWsxNvwgjFWd+JZS4J)vJ=mhUQYH`f-%tOm z{)_F_e~$ypM*poR!e=JpM9D<&EtZm76!NF(GpnX?FMbpdg*wHE{{b^Aq>a6`2c)&J zvqTi6DamkOp^3E9lY1lqcMWsd5hWKQ8S62jT&kH%FQ{Mf5m5iHKlO(CaTB7T-Xaw0 zWpaay6#qQ=U*Z3bZuqAh^44O!d7s$Nhef`zBaTI}Vk7*;7+;2khk1*+ygf}d#| zhNexM78-qr&NMMvmDeK+Xt4$8xB~4!r)!LqaxtPF@<(;%BBYDT0Sj2{HvDwu0M(gQ zGt8o|Wzo^4x;v4%lt;-$b>`eqE`QJMy)$3<0G;_tptsK4j`F(k(a29!XUgOuk*NCf zczA!#>P>&Z!f_XQNEbu0KmWt7E`=)%dwCUKu|{^<{_qq0T$+r&eFSgtW>^0jCcBn1 zAKNSI&K&FCP#~Q5BgQ@~>#7kd|3ttk5ChAB@8i-0GN3l+1P%>eqP>;&6&8A}cKuc> zFCWS}M~4-kp-gOO6=R>QbMP#jAM|#h2ERiFB(-)To+a#YA-NEc`?g$Y$fjjdz+sAe)8FNoqSGQdueu>bsZf z9>v_!BXYyo9L(%ym6@?OXM+IJ^EYcv;`vEZ35e4?0-G&Y1pP(AN*Upw=Lc_=v&(*1s!Cm&p}kpu5$^93G zi4)ldYFqw+Y{Y+TxJYlyEPTPfkIpC7dFE<;ydtI~i9dF)i1Xy*<681bD|VY4Yb!|V zMei)MU%zMRjreU?Is#j018T6H1gLK5<=9KwBflnfzAUfJdzcQkVS_5}8H*dabvJAB z>@nIH@|A4oqTyZxwh_gR8?d%ULqiFTLVa;*Arst+dy9ZBA918_T%;1lDuuQH$g>W^ zNUCpSvT2>JbeBp-0VO_^x$q0XSn*L7P_jE2IT(4D=7~!o7gY-AD{mlzG)TkVfeq`9 zFt$TNSp3$#Wmu}I546H_iR}o~>RUDdEuuVX%6OMp8!hD$1a__=im>cek~oV#m$Pm zWk!ZR+lzf+2xZcI&m|r`5RNWs2Z+1O5f~5ex0t#m~a}%db!GoAmQ*v6h1aSc`ZZeP*MUe^503H4b~DjsazIA9QX5)`|x( znGQGiI20!%HfZ_##P1LhRvy?mmf2#gQ06ak@Thkl!IweK8pG!9P=w80p`L$4e5Y6% z$Ap_l99hg&VU#|zMt2@@t*Wa;=Zk?C%fSb8LlI^ycSOAW18GGA;=o=>t?Jzij-q#G z96n#~&e$8?yNgusMp`zk|4{X=%*dRtd=tX|sy6Ni_TB|EZCF*a`}T%JRx~T5X5u@^r$nP(L9MOuEdADc@~tlk}$wp3?Yw0uX% zehQ9lFJEIH!@!-au6Xud z7>3O_X$?jnD5FQjV}-7rL<*yr!3rr0b z+c+DUYU&Qtd*A7S(R?mM3i8^<88QWf#7#1VVmGyy!i}6s_=F`3yLjv;G2~nsKqI5t zRdoXVBiR{Cb~ z$GNi3f!rh#lXqnj4iBTv7RwUoUiBnx(? zE?PwCMZaFO@7ju;Etkkng;6#abz;Q36R0q9!e4qz^y!W{RiE-UP=3jg9#C#>3sfmY zM^4onk10gU0 z{iq1$;YQTHsi)e@5w>x+BAAH!JriEP<)~k8Q=k^a0lJNf!N;U_(0`AB?*}PZlqU%9 z14)i0RxPGAR;w$%(0!07!LFGnoSuplALTHO0q>^toYqM;1twY5= ztjw0bUoyp=m<3(LhM$OOhmX8!%sl!+W0JZE!-R%}Jxn_2ZBBQ7=7O1{{pDI$uodnF z$X$409!5zMMrGAMlGXHa6VRwB`%*MrP0_?qqq0MSl^w;(R&}c^_m_>z&W27cE6XtP z;piSKiv_qb&d-2=<;=6OTb|q(HuB_rOXkTiv99Mlqs{9&Jtq_`Wgh}94STmYPS}Q; z02z^^c>Phu2{O4sY3iZm&(UytRt={iFU%J}*wNyg*cP3*-Z-FmSj)Qj1eCdyu9nAnGe zl8jqZl-5Mxm5l>SP{2$Rpf?a$_S zm(NQV8uEEnU2T7GOv2zUhCt?iqp{`or?=3or;hc|EK>}3DB_E3%&pRYZK6u9=xsuH z{d*fWgYayNs~Jummz~_`+N9 z#(C@7OGYznRoyn)ni!u%>1D8tc;{8F{=rp;^MDq`gQ5`S24_W)OhSZh$6+Sb7XmOVI$cmKal0gQIkbr%*FiAA`apHZD`vZhpi$D zouTU-L>Wb7qexc8zWzQ0jrFvZ%y0|j?>>Q_h@O=Lq%jt)fa)cs7>7skO}cD=IE`ly zgEHIsEUYms?&yw9)Zl z_&$&RgX7t(3~>DHUER9B==+h~FZ&|J|3~<#C4P4Gh@Vc(cF26dPx<%01%3|CHSiN_;OCpi zd%@3T`+%QY|JECRQYJ-FI-WYH@FSB);%Ci&fuE8gU9FUj5hDsoDO)1J*)< z8pfJv%OBAr+RQ2A#e0E+{EvZymL(8!%5H3av=+bcmTK`nA}ku+1^0LNhT0ET3t*4# zvvhB1;)oRm?n;#7Uf-=L+l@u`uc3;70<;E0Sc!v>2zvf@3?WO>y2ubYOZS#KVpkNo z8<_3BuGvbnP$TE3!*a&ZVG&E1vrfZNWIi}*<`GQ}Utc{PYH#oMe^K_XT?x{nc#hmDsZkaXZ6+Wa54P?g&1eT&e;F*po`2f7`H zp-Rj*xsZskg#q6R85nSu$vDn(^{7B7mmd|xjS0->cs2xzPNlidl)xjVpCeG4j5{0c z<)7dct^$$N#nXkqhhvC!P37;~eTPFI^r=Z=@yGIf$mLeMZ!SZmgUf`%&PHr3!L?lMOYuf-@rTjI z?wggNa~zTKa$BhXylo52$#grq5z~`X3!VlZxG6BRQgxzp6E0Zco-lB}RXwWsz|z__ zhHY12Txkci164(@)hMWzk9y~>ScnudKCcV1m%qq2)m_ivm1b4!tFI3Q`|436lpPgl zmK_C8eB01Vtv@d--DD~G0`36ziImHjc%M{CVTUD-V}L<8;FxtyVgih=u?qASreVCD zx)QqTCQi&N#jw57i19@&zZM$MmAJ2$?&E6{(R>(qErr{XfU_1=u)z0#^`)5B1OweD z!p|P2$WSxeCvM>;yd36CBBP3lKAdl@7zJIxDlU<;g*x@ zrTIs??;eS~X*~CQ#OQ=7aqq1%{gnuSF`wKDs!`hmN5pfJe3 zklHkyP^cZMV6~D|=BNtuXLZD?Lbk$Q{w3B^j4Fzs7-63vOml9}a8}!W@9{kfXCjNA zzSV_Pg7<_4+0mF!WKA%~gH>(p$7u2t_?c5BuPDGyRY;)LOECcn8mg!wc?8EGA@NwMVe@IHeC4v5cB>S%14%Wq0Z;?@kv&{1+cvhxmXOR@cx;%8mWAIO19&2eGQXQ{y zUe_QR#n+v5GE#vL3ZLS8SMrtZ#r;&+kqY-0taOg<_tW9Nln2AYdG~Fo&ZcEv!Rpz$39rj;E0p zlpIebEjV{cxpEU4M?#SFfiOyynD>KJaFA4R61j)5|1QP;>vyvo)#dbMrMsYe?kd3+ zV`(aj3*pQ{tqc2VkqHwZFKps@EYv$Y}8q)S!<0@c6#D5BERHH z-PxbrGG@-MlD=bbYwkv8|5j_gv%f{WcZcjAbj(2x?)kw^S#9L!$q1sl-6ivSF9JrSr6j@P?H%b(68gw^U_Smt(NKJT{5fG4Gd4VhF#3PI_Xu|38H6TyIsgGmK1mp0=zkn~( z44Z7eO)=i;<%v1a6rBJB+4e7&7;GCy^@|3GMjxJ(BAj(|b>43k4+2}{+z&&+`t3<# z(z~*kpewU}dX=6B5ocdy$qLJsN5hw;g=o<{2O_UPnYlD zKScuRM&>uxwtlBf%_aYcBztJWa?JWAK2f{Wop6>}!@X;2 zic&Xc<*O`WTpm?n?(4+M;bQg#nE~(ig3ehJW)4#&wvG>4%EYzihYfba!UwyrZkHKI z@hD|l46?%ElE|!PhO#Pu-*eN8vHHeYU;vSinG?G<{v!6L40@K-iZSLL(1V_zC~k9p z-PzKIC^1IEz7h{5)^!c7ub#iLcjQWC8lI6NYZDkJ8>Z?&yvyD#wfgv* z(jAu-T?ZF7vOA=GiYHMFQnikzlckyzuIT%vaQfbgyv{@4Rrm~r%b@RCsAb{$m{iB4 zT84RBNFP&aj-xpc;LQq>`j~N?s~(2mVS6p7lfvoyC_7W>WN%4Yu9eF9Q)oKr`&A>1 z^!<~!gY?}WX+yL`rc;Hcdb~F5l-KcmSDBFgy_4Vth5$v za}ow|u9Az(N{3N5J1IT@yFlCxtamoXfVx5DCoQclFBvo*ncaP%?1D5t1Nad?!t8>* zeZ__BZ5dQga);^Nr@Ix6FU&S+ycyP3@HZrJ(S^pNHu%RmK^l*&&ELlwG|mDQjibDS z;WWM($g35%U}j0WS2V7|t}((CjW=Xqx)Y7YnKfxV?}9KIXCP?&{^P3EY4~Qex{>6L z5<7PFNaNpAweFe56@8~=hRN@(Aio~y+c_MYnto@Exj6LyLW&y*juj3xm6%pi9D9C2 zD!&@9K`H(^8c!+*F~~4d`C6nA9C5qo#-3x9_kP%Af|P; zS<-h^NoEOP9y+0!{lCclBWOTm;NnjGj$}P2*{~le4&J5aLYIrzs3zrF)4Q2O$!!Tv zc+hg(u|^fx!utf^j~i=Ebjal>fUA%1r(#v^KCHdM*^UcKvhx8CTAa@HC*1QoT{~8& zjl|)(JBqXit++*fAdtD1bXcFBamMq7Hd5kTyWN&{=uAs-dgx>WJV(8dE_*x>$D#u{ zvIc=18zC%yO1GZKUuIB<9JIH!`>kn5!`;hzJ7VrHOjBi?`LqbR*YK=__GR5?L*u?o z3*h^bjI{p7$%>Kt^H}~Db)OE6`{FejvHoq5))-fxanzpEka5_ab5?t+NDNUGK>OS& z<*+V3O(`D#v6mN`Jo*X@HS=9rdtcp3)l`h2ZyNzT7Q=)L{oqc)%20t;j}|A z_dL@QYP{ch4mi8nz*i9||6Abeq3b2S=Z&lC6wZh+t>2wYYHyd*7@_dA1{#@=9JXP&$>J{XrzB@Y}~rha;!`;d85pFl$97Wg*99di#_!O2&sYufX8Z95!Gbvg{#hGV3JT~`17R_e(kqp@VM z6_h0`8>9zZ)XpNF!4VC!$@qLlSZZg~nYq=?O4V;_m5<|%?k$2=7V#KVWs^9!j z{S>!#+aUGhK5{s4^ zba|231nXB^OqOfatq+l*@oKA%nI~f@0W@<_uq1__^&$L3AOGNYyInhGv@)Zqog8iy(loD^yuU(4M?P)om6wp@+hFh3cc2WA}cAs;W;f=g|yYmaQBCSv>=YEJ+d5 zJFu&>i{8C!J@I1jDNJE7dWpoZQ1e4#@EO?vBt$oNq8;OK73}wL|0_Z$@Wl?-eW+xVzS!oT1k1BR@#ITEN9u9<;yyU?TQX!_!no9u{`NO&>6L!qL$Q`z1bbSL zDHTz9*Hd&7`Qwyei!0zip$myaj4Lnfsy)w#+Ow)H33UtYpA}-~)G#Q55FG=rig%hB zzkrkQ5x3Qzz`R2I=qB^j8ex~%hyy8pdD%6(jMw%OE8$!`a!h|)esxaS_4Fhz{bvM>_5zulIr`@ME zaj>_{Kh>Y(a!h&E1ATt3V`O}YEy@pyF0q)P94_eEwGFP6Y=TG1FyFO~Jl%Q|R)x$e z$;0Mx`ebObylPBU8iBQ~ao$>+i&M0>V_@XS!6%k}I`Z4$p!09%^a8rwjHQE4xOfr+ zz>EqH^alepa%!Q<(dF%BWA!`C+sm3k$13v6h#WyRxU@yhZ(4BNC|rS3_*i2z@ey_W z#f7-?s^lfwEVML78|z&$+V)LJj?u5|%SodhXs4=F_?2q6o0YnPm6F(`3<^v_4tRR& z9p2U$&-Tt6(A>+-$ful$jGK6qyYy+0FOA{nV2uL~0Tio-_3wG*xqctlNpir&M)eB= z2{rls93r)t(k0yOqq4~jmc^&S*Xj`cMAbJx=X4!c!k)c<4yNjXWkqQnYRdLm-IuY( zWR4T)zQs^nLSEIc!PP2LI;EPAerDtEk zIbtY7ik=ic7FkUCi7M>1ylOb-2}~MOy#u2aA(vIpuJ%v5WxJ8Be#eeL-i{R-&*xO4 zfMo(;EqVom?03K;F=!mxGl)L8FnxoMTL&gPF`X9_+X}^RAPhOQnx#yh+E11;*{WxC z_$Q6s9zjK>a5ww&aHv1MZH}l-2pg~Z9LFR&kmt%oDZ%P5!&(U@4H(jhc{bMCN7kYb zcB)h*&SADR*&26PEQd8S(s6u3kc=wP!q0w>(6fM;vA9r39R39&CJ-rFAdrhGCzYge zoDy_xk7-q<`s0#GW`B6wdh)lb<{JqkJN>06{GQ{eh&CmC43HczFC8;l22VkmR_}`R zM2lw-zK_HAz8Qx~;>9~JqMH)fqC?&X5_w5fg|iun*nX~O)7uhVXNZfjbnl{=6BBWS zhYUvZ$2cv&Np|QUTtOY)p`bQ=w#uy6O}Zg7?ofqObb5pqhpEj$OXq!K^!$UJo`VJ2 zTb-_9Wu*r#bewFlJ3CsjCe)_IfVQ+r{SxEe_BL3(KObZ9#Nh?rxU~b~Ni1O2hzsHz zdo@nA;8n^nA(hR5@_n&Zkl6oSZ4Z+^Fa|1=-MPml?nN?0O+Yc?{(IukJWPELiLEQ- z^n%WmB5@a~AQ^UVYTl~)rx*EDEq)6+pVCRC>oSIsKg z54W@n3VTK0SpV|2O;H-lKL4a)lQm}w?yRvDYM!Jbm%9ucsZSb~texe}O9wGxy8sTu z=$2fl?t+VzmR{J_HbRqpTAGe zso*K3)}P-n@|`z1JtHm7Y_6Eu80?y?B<;TBt1am$|JD@0=b&%@Lqk?rv9>X2yd~9Q zDe3nHyJh5leDde-(hkW`Pazh7@>6hqp?MSF_3`b$!G(Y0xsQf1AIn0C!^DSQqXF>m zfeZRdPkhky#K=8qdw$gLxW{6t@$c+N;tJOQ?Lb}2(6|HI%w`aJ-HjOsmR;!WbojZ1 z-e}KpHr88hxI;7TKry|TG>Qx?_jyZCIP}s+)WMlz&naz0d02VYJk2Q8It;Yixj0F8 zisC6i@;S!lw*;Il!S=B02=|fhX_2F+h-% zAo(Yx6>)J)7NRzav=mM=61$H6QWrV_*Z7p%DIpEu|6l!e9rU07KHs*#EV92Y z#)%Z8zn*OQ7X5WGj=uNYUk_f=bAOF`Fj{{}ex4EHXBU|nEUOs0)03*5?ewH{E=_Wm zgSA~n!UpDLg~`_Pb~UKo-hD}gQzF^?r+vX@Q--bZ?n@2wc=gXC>HvEA_T^Wo@+&aC z4=>-{WBH$gdAgLJ{$H1$g7%~F>s8_XLxrcZ@vZ+<0&YZP%S%}D`eExM1>8#ysK$o` z+_z}IQGTT=UxQ+1G+vhfdV#$nB;AB*A;lG@0}ik}^XL`ZJTc3Z^4R zBo5?Zl!4xrH;fN48}Tp#qES)}>vC!4^A{;*j(U1#;j*s8q{e4+OGsXNH{E7#3dI_C z4rT-}jfhKY_dC_v@R?6*o_+S&ew<3Eu_>)CBd{bZ?yTCM!PZp1?M%za{fuDj4KcnJ zb#LfWv|$LMA351kd`;RQx+4rxu;9x9rSLlK>$#XsS`LL040 zzrzajb8jqEJ%2tohekoMD?-mYo0hIp^LxcbGwJf4_fy zWbQrpygqN|d7g95bNGYBHzcT1fgiENLU)aNamIqXQoVuG(yBjVSl2I4xbMQiVtWz$ z4CDpv?m=(B>={j=nHG(Z`&K(_Rp!LbU_uE$ttoxzHq*|YFQkH{!SOm9S&QOGoP_HNCmTLmGnipCrdgnEoz~+*=n6Gmlq~ZK>_0J@u!J+ zA~%mh3Q&<|9~g0uk?%lLLRjl z<&ib~@CG+EaFiAnH+T8D&u@sGznVLM4Mvn^JjG%_AQo_8gC&+5QDkOtBkHP7ZWl!F z$9j5#>GP`~|b>sO4WBi4VHF^5(^sRC!! z|0|58Bi7&Bm}B3*>a0EnZwtNKLf!%Id^sN2gM=i38JJ2u9P})Ne^2cCo!ce2c@YeI z)3oZ6M97YGIXlUlZo*y6lT*nNwLBr$2aiCK9IuQu`^;6C({{D?md^uEZrkMyOtrzZ zLC9Z^rQTsTd%rh(-n)fdpLzD#z6BPabyo0-P4oxt4T1Z_Q_e}M?p>8P zgc?nfi&Et%G&&&H7bRmEP&8WY7*Z95I9X_SfV8a+6DPI1EZFWi?{{X;8*0P8C6?JC z4XY%I_Q5~74uid}nra_n$tz?&ml22HcON1<#v>#%bej&Vq|M_eZ{D(yd{*Cx5AVase&TRk2V24 z?p&xDG+4x^hUx<4!^-05rI)&v$=0$20QH*w#3 zYHKOKIoZ*K+yEtA-%53g3NN7w8>u1LOx0uoll=QaOW-PA%UYlfdJNpw7oDM=zwum& zvYlfsZ@aI+&Q+>fUL9AXhJBPDy$c#9YDJ{fnyJodY%@ynwmq9kouVSn{K9D{(?yw* zL??hTXlREFyH5RVZXd2mMT$|{2~`QmMVK|?|BWT3DQzEqc5-4w`?kx8-i}TFJkGGkXH+<2A84Z zkSn_m-eg^Ld|sxCj_u%hl1Fl0jV?OmMm)yK2;3jA8%0NitHRlZxDZ&*L%6vnxq#}@ zqzBPE#D-$&OQK^t%`kZ&J@n(X%Qe{%0~+D-OO+hdg9Pq7HueCn1Q;JAJo2$rx)4Z3 zeI!3rIZ@@bc;s;hYh;6UT~#0g-XK%9bvTU$)60Z6G1sS4WU3n{}Bo46Q_v zDYaatYzmhtHA1G;oQ+J`Vvs3sc8~~A1xkn%;B4y*EVKY-sx&x(%#a3=WD4pOGUZcV zVVF$Wf{N5yGDR(sWr|);HP5BXlubR#lr1DvrlXXQDI3o$Q{FqthZ0Gq*w6WOGNsuX z$u*O3i(pN<%=p_c532fr(KAb>O4DS%81J$Q!4hjqpPf$^4{_ySSf@}vI~iJxVqQXDYiTZSS$1s$|3)}&_q$mt)Yo} zC3l2YBKi*{;}dK&^z`>W2umqS?gtGGy{@uF(GguO(Fya%?!>2Pc*wtbftx`52(J+w zs(sKyJn{^W)jb+23(WvpINjSZDZ;3V5Kb3M1F*j8$wJr(c@7Fr2>b1&k^!k&7C|0b~K@k^bFB@=?X-+PxP7P8ARuW&QMupDD- z9FV}~DOAgDQ!Bh#t#GQSa2BoKchQ#?@Y|=v_{hPpbh1R=^1&0|x0-_8O@wsyQl!n4?s=!Opbd z8ep=EOR_aPGfjWG3{OFlQuXC%gT9;yEm?Je1$R2&3}YT+Z{|d6i@fsaC0HqzFR
Q14g?=KHf?zsMt8*WcOeW1Hq7KBDQ88T|bGo zX4cTw%%ik5vl;Vf^J;>{iYL%8Zn@s?yN3EKpBI=4-^m|yiR3IaxDnJdqXjIyA|d9O zO8>cM2`?{Ttuli=dMSsOr3<{~Aj|dqTPVCJH^FN?zN=+>fR`CV=?Pv$(Ps&-DUa*$ zqCTtex(7f~;dR<^*6=cA8|Vx12g2zq?Ffhneka&pi?1KzSyY zBzuhxDth8-Hv^}wz2vM!?9Yl;vIfEZxt+~A_m=>-+0>1msB@aC>CmnjA&go81R^uv zbtiV2-3U>$oy8_#9g{mCgF(e3VV}!$*q2xKI35gz4+-PB9pjl@YGrjn`%4{9I<98o zfl;~}&m;Xp$I}pd2=v{h^Aj-WZaXjd+iC3Y+(_`J{j!IBC5-*>C9v8~t9sZy%MvDX zbgP^0%a+-&4Ih&o{I}!8AqOGp-EliOKBDEtV9Yg6cJwCHa+(Nbin%&22MfHXhMmeG z8}K;YVUKuJ*2+(@ukN-iyzK>$259m8W0eW!s;q#rnEM&pKZr$RzG+qz-LU|wHhVLq z{6)Ncc?*5w`@ySYQL<|MRRQu+{74RLl(tjpB~;oIQu-(-Pdj znb$DRHe$G8S`ySjPEA@Om$sRz#zBf%_(Pw_`4}663r+aW;N!p3WU#=`;vjw^A&302 z2;n1Oo$()c9!0AjQiie7o=G|-Mf-I{pnTP@25Zd39>wuGd^C9*620|_8UOKo5=p+1 zGe3;%hfU~g+1QM2Mdp0~PEZD-zqNbCEW`VIe zZeQkGuxlp=)3~?8a{rh>a^?E8XggH%G@L+NXbpUd8M0)j9hOYzlF+SSC26tZ(;tlMlEs;ZHESSJB>(EWICv5ys*5LYVySX)yzOV|B z6w8wkAhp9s+bQM!aIxiBa3YeI_Z4)qTSUeoJmWxKHrH4dmV1XU$D-sw8*{R})185` z<#v#hw@%uz~it?6-lCKud-#mk<(w5W7CIiHx7Glc-#5mZQJ$2 z3C6;gh8Io_?_^=FNPN$t`|-<7G4@& z_|EXcsiN@Za?VI&;V~lTB^s@R)U}P4oKc4G@9t*KA|oSkgEl`uH`1VQWCquBjr(Qz z;ejId5scF6Sb0BAeSlT1=nnVF_zG%S4L%v6_!jOX7D+l3-@-aturx)T(n~K2FFiZF zv`sAycEwsMFRX@7U{{4#FgUydyQn~Me8BlNf%x?Uwly}CUq3Lh=R}guuOA40O(5@z z`wnkI|8U=6*%%YwcYCgU0GB+8`PH1oC-c4e(Dwaow22Px(wa0)M&vU7!>LZ%+r=GK z!UuUrsW}tgOn>Y2aDTS&W7B#zm7R^Us`s=sQ+Tv<`a4;ZoA%+-{Kr+aE^EZq9VoQh zM$`a$37N@+xAMjrnB~RpN?pE-CC(!DF@U1eA|YSrzc&TAbXqjXT~3R?=igOYv__;w zbw0^g%8x-=QenhHcx7Y2A!ey=kU^d!e=-(;jrkF&z5D#oM-y{&dXKn&HsX0La{J|{fXO#~WvJ8a6Nc&Xnj5tV|O$SM-^i=gojB}nZp7ldU$)24m zH%Re0p{Gf8=xhAh_OsPK_gU0n!Y-{aTT}i)S+0k@&w&@ix~OkvX_ONy<4>R9$Zp8t z?HhX^C67t-&-2Bhr=0f4Do44}DA3-u><+bDwkWq8qgF2yN|a;M_Rv_3DiAu1_{sBp zv0yz_RDC#0VdWtO@JH5;#Rs5Ndje8CId4G5QAVzj|0>6NzZxRFd9byAgydHa`eJjWx3ezK z=vY)W>z3KncX~zV&^J?kR*H768RSVR4OxleXAu3&1A6x5K8XgRch+^pD3(f+CWx*d zSU8+{ppbJlQbc740`%E~I0Do=<`Dk6W77Ok_+6CZO8J|OZYYmN6zl5V_CSC8#&hiW zxKHjwpK(n^e=5>@r^mc&YJQ-90zQK*=1J$q(Dxw5h@Oshlp8Lc+wH4J-h!TCH<`sZ z9skBB!=|$1Cs6^8#wP<+iTFuZfFG8>#YWjFJ zJy(5qs=w0-@W@}RzRyvA=c@T#>iYuq7XqH=U&7xjlFR59|20%3SKx>DN(@I$T|>Y4 z4;ko)jhbOSPvfZ@gO8hn88!z~Yl4q&1vAvDskna+7{dlK!UT5a{yde>A-jZqkf3W6 zov;#MoSY}`EyP8BwEn5ikNdM`wZ^D&vf zQ-KeG2es|I&a{tbvvRFrl_Wtg4I2&U~Ts0xODwc~4pgCLEc4dQ1b+%tG1=;DXqgr6Fb zND#%_cJbpEiM#0y9N=g~I8jmKAuS23+07!?F;S*X{Ipx}+u-<#-VAVIrTIa8VDlUN zQ)c%xI7q{Cq#z5Vc40Da(%k$4Hb(Z-*T;ja^4n(0@0xKVwrSATcoSN>fly}TLbiq89ylCX-#fI^R^;MezPD*ke9U;g@*;Ca%PiH}7Y+||T?*q@;I_Gk5JF*c?ogdq~a(mEymrQ*h|mvUto92oO0DGNDufNWjr1<@nID@YhvtU zET18LH5>eAGlbY0`2g+xb0CoNQtBc*i424=Rsf@CyG6%&zy!;P3nTpjS9!NZ9C0OV)Hq7AI#;I06dv z6+!_}vJp(b5bpS+>?GKY@Y*3us8>GZyQ9t53w|`;SW5%h9oRig=pc+ovm1C7gnYJQ zA*TY1_oINktQlVAA@VMq{zRmW^F*W#@fr-YL8EK6vXl3Njy?)N&Hfg2#3>4!SXmNI z{<4e@aHAd_0snDFl<7pQ#a$q0Tf7}{i}On31k7`by288@2QgjQ9Og&CA%HnnCsw1e z7&Zw|R}{)XZL>U_9&CvP{1C_Ehu`zI(bz;+2SDli34cP7`4&|?j#upE6{n~b$Fk$7 zNl_>RulT1AQSqMuBkFSOJoLFWrj}qQZt0r$JkbxoVDJVy%HBAyq5NP1!Bmd@ge9AO zeGURqRXmLlS5^KAzOv=C`>an5lto@NfIFyhuV&?ZwCZF({Kib1&}p1;Y%cE(ec;`> z1KlC2`V#`Sff{_*VaR36V3<^1fu|F(ut~_mpe)tMB6m~owwrwRV{!JLY+EgsxMEAJ23L1DA36LEr#-kjJX3B1OyNP zF7Iy0Or}m_D~`Rv)B$IFL#Bnk_%f5(bcC%3VCrK?c$keX|3PheGvF#(P8TgxqwnuB zcXP3gdTZzEn{hGB=QrWRUpKcRiR+1)Q8@t7$7Q@I*nT?^xJ?uf&Y#@=Ays8sVW2FuJHCjyNShwzc5Qy-Gvjb>*r?YqPfxbtz>Ad~EAD1a9G{HsH)2La z5UZ4!%;#|$bb4|EN|B9~ge6A&z{aAt;iNyq3=$UCNV1FF$%!y*xY<-SGns6zbSZv( z@+c%u8hw$)#7cR~>fB1_068ns;h^bG#g~FPMoMX7?)jkhNy)fkccHM1)*|DO%>M6nkZsmx<$??OI<6ryF%F zvniDaX%?X!#L#_xxGrW<8HZy7{{ZSS>HPB@QI+s;tIC*E@j23fy~OhRRM4mLKGmiM z^k~_EZ{E?3B))K*w&p9z-a^+GA?Sc!H=7HASI4lq$KoqEO2@l>$N}vYJ8lj+*(Jo0 zSR(f?@n9n_^sX3XK|3w`m)Dbp8q%DTEy3J{idrYgC2cseDro!b>43J^Nzg87YaM|< zf}+<57>8cjwYWsU_)RsxvX#aokF)Y2$sNaE2*InIcMR6iKWOd!n-Z971||^n-+rww zpHw7ZTxwL8v_0v4NXvD{hulC$eoU_6!bRzC$IMx^8Os7}`2P^ehFtp^;_>X39_o$s zfD20__?Zm~caa~L!W@z+$-oIkwcBk_c>01A=pylE4Cg5R33LVSv$MA@Hk(ugs59kl z(|`cW)G!1zM?%2AZxIL>spiK?=R*KL0`Y|czAL!9=ZEYGItqv%LX6U`{Gd`gIWX?C z`Ih-{KtQUz4dB;rasgOO%wKCJNp6NCQ{@Apjl+hI^|)LkXFzPE;!mi~ngnCRmC#8V z;sF>`q?ABccd9p-jM`2L8|9&z*=X$EQNKJ4X(Arwc6Kq+<@%OCgD+GYf|P*;IDzh_ z*n}}Pc%r+t{rq>h-^rq}HxEoP%Ir>a&7q#n6g>kQssgQ&_pBf9*)@94qFZi7XUaOM z+y*MQK61HuUhWsD^I}Anmdj8MZY(-=uU?Hq@fAYDw_}j8xPDC233wNv6;#2TVGDmt zjwyb34zk6u3pp%Q(8RKf-bGXIli6=t`XF6p7XLN&AtEZFRQV{H6jkDC4P-!#=`?Gu zcoC~}9JuTlqPV;KG@kAFgFscK=EA~4k==D3AInu@EWs{V*&orSj-6Qc3@TBva}3vc zpc6n%De3LJ*K7s8152dRQ{*Lf??2#A*+vsMULJ;X1(09B2L2QMhJydVZ)g;BA&^=; zlZrRAkhs;<6K7zXaOkb%4!v#U(32l085r2c-Fn+px86$O)?2B%^;W8Gy_MwF;|{&w zGt#55g~zXC+l3f?o<#HqB%gg|A?O^9Bj)=vx>_J4M-sOW3FfI{KrbXw;+17eMHaL0H7L#4|*|fjur@6j9lxqf0i>U9M zN#1LU$zUPf2PnDiWUD!N4hl1GTX*`DK40^dFS>D~le&%B z)7C%_xXUUNe1-*Bw12x7H;&JOKWMCL&duP88vKC+1s1&%a($C}3F%;Rf`|)lpWg;| z3Ee|(=%~6y(8)gg5+of2l$!2Jq?#-6CqyEmcENCd7+Y%X4yv6}!)wv?r}#Y3SwS)A zCY)#tDr*(m1KEX6@aqZ$+415=6xJR^_Fp%D`_p6i{4E*!%4cs5*xm%#Sh;*HrjITe zs9lwQjri>8KGO?8I6+)Wf_|(x)5@-dfz4$gv~NHq=V`$g3E3$QDlkZ@CE+D`{) zT_f=)GVSm7>$E@N&7Nt$|4o2G{w+Px{*p-ed~&M5Coe9>f9EN7n&DgwE!I0qZ?BKDLCGJ77@HemmR65TlMgo4 zklC+fwVynE{+^*&dHD#hW$#lrXzlK4Y95x?eF#=ey4fcGQ%d!(oCFg z2HM!q_ZaXd#@mMIg!@7#kOf}Ff^bYbr$m6iI=S~)E zegW)p)a_)cfIYd8?YXGJiQ>hnt#~SFmh1%w5zov|?FcJdibtM!Z(IL0|1M z`tDc@14W9*6%39|QhXLh<#-Ff*szrSgwl8Xq1UuJo4BC~_?Z`*Lrc*~= z_i}e@A8mrS)?{JWpWTjON1W=p9yT8>g-P`RJnF2i_BASNASOI^%RkG5Ajt;3aq`9IJ)ydkuv*t*y? ziK<^4hJ`ZK650myhosrdB+Wdk1MR|0fZK6Lm?*QNmjH37m-ww*F>!j-{9uTE0uI=r z!jA%G8cj@Xqlv2DzZ(QLK;08RV=HC|KT8$R3QPblf^-thahP-$cDsy<_BdT@&{y zJ&`Z%gjDn?_PcpcM@e1^xL-MQ>oI*wqnjZQAzCCNi~cChwEUY|kcy6=$`TOimAmkO z@7Z{v*f zb{ruf`FGT5;|(zvq$p13qJQH%vRklVi4~`CP`c6yH6tUSMkv)6y`@Tq3idxQ_AC?c z8x3kb{@b2pqGdKGUQ38m=%hmsFE1V{AH;lf+DM;0$VaJiE)k(YMoJZQzdEPScA^v< zI#dO~3{3zyU8(4pYdHRNwbz89k^mzOgbHFXLv#EG7#}M>Ak@__L?%?MpJGOyPVs)G zlrOQ6G+2IxtBo3&K8H6Fbj0fJme*hciAJJZpF|+A6@0=A(>*s+Et|US>YaKmQ7uj& z-!+pEy*dohnj7YNk)Kwuc5Lby(bXA1^wB$eLiBKq63_}=IqW-LAet99=o8mYGUyXM z;`gF3{JyQ>_tkFkyB_^W-1LTLGw6V{2Lum!7`xXa=FLO0f#YwmIwofHz?bNAL zgU;H8dc{$#FW`hM!U+s_byEKE$geMX=p>(|=Z|h#M3V&fUpmQuIZ^h(h{Vns)R2q9 zt~L0BEq0~m{QP`sQLJYLpa%&Gk7-Fo4bDR94)#CpI8Do0u`TD5_(`S;=HgFR$tno^ zUA+=Z3&Ir#bo=|l>q!5(r$4x3V_J(p z;rRU*l$f9-*$$o+_`U6!v%&9fs@RV|;rM+_uh@WJM){B7PdI*W)$^Ybzawu)4XOAO zj^81A4WanG&Tqu8ohq>5Ph|Xl4ueX-qYHkst^s~8UeFVM=cDE@{C+rE;FlK<$L~Ex z{La<=Ds9kgvAUry#KUE+nGevoK>Y~fg;-s3K{7z-u5S6@?QS~M;`4Q zFd%OdRg{ZA;mB);)*vbp$eR&F-eiM7-9R<0$Dbg>X_$Leuffu?K*O9s+@EnDFGpN4 zA#MrP;l`iHh?}R^6Wx+xMBK+$0dY^>cP7M1LyU-PLK|U-%eg@yj#p&lKFyyoV)Cz% zue1aXzmCRhdoX|2()g0^Fv3V%ldOh~8AR7iT){5nYt&QS%U3i2-lO@`ggRZh_!Fc9 zt>UZnib=lGW^;Ewc?>4WHGDFp>2wkmUyDCM>}!+Zk1&!%zbq}c1LksU{#5h~H}i;1 zu`w-JzYMris0J7Qgknxp#<%FTM7LbPF{e6T&cy^lK8 zcqDu+|KH+k1C44u{sd`S1MBC|aDw>SvO&Yw)b(eBFF#eh9e={{RjyauJ-%%7P~3_? z;rJS>7Z1l5ZTna8#i#?v@Fz09I$<%1(RIPs?IVD%==*!ZS1$S%hOd8KEAYjON5a?s zUxlv`oWFGal=v%!;IamP!tr&vJ|fajJHb_gzn**iZ1A;!Dt-%p!twP9R3QN>9beOl zzor=YtCotJej5p2ztfBB_`(V-`Zkrbn2n98oqv9dp7tQ zP8Fx%PdL6V)GOBU6($dtQt>7D6V6{>K?~|m9uoXi{wk&#rsGd!WNpxE>B3*p!+@;Y zAM6QPwWv7^S*y|nvUqU=vhXPIHS1U5s{@lum-%ZwjmqSTgs;6&FoN=M!xI|5#{T|n z@YPHeC!^wUd@a-~*6}44KjpDjpE;t--hzr;PW*`s{2_Xc(cF`yn`SGq*RQtup`L)B zf|?1_AzELrs|E0RaTVUL{wjD!&=-nnAk*bxu{IL_7OLzQ{9ORFURKo`RiHxG9dM#b}iJ;On9_-QtUDb}6XMH6MS% zF;%2j2~V8R?5?Jn=L+2FotlQl8>}Oa&7^fiES8L=#xOtzn4PSi4B2RmDxxm z*$_68wW>LLsXh{#QcnGjP_P!}>@$yag933f^G}e2*r!kTem;js?+#(FUg2WY+_4DF z2{%$L3@sIKt&cv-PrmrwxpLWDM1jGvOL6$=dPkdQBzylBGZsu>;i;!{`8gS^q7)pZ zqx}v>JAdtD`L&?~CU#>QB=aNG4W(c$mXN1X$YyflTUv&arm&kj=8w=Z;hGwvcPy&q zICo8{OLHq>4c9i8^@P#kr5vNNq4MtvRsKTqbJ?Cw&A{9tp5(heKZKf zFi5jA-Th?qRHb0k)POSq{KJl|2I{)s>#`N#sC~U0Jqphx3=4}GOX#-B8;6UrtfrD& zP>A{S@&BLWNu=>4oOwLoT!itIKYWJqxFe0{o?&7FM%EovX6)bTu1 zlUzPYO$E*4#z7n?FB^l%{6&RR*(2Cm-a6Se9bsn z&Cd}uKLaZR*ugxYn{CM&D z=&jJ9)X^(dJ&%6I5RAUh%AQ8QKGNvFxKxau7bhwb^fS{q{)q9K4bI&nKc6wAN*?KY znZ9=hD^Y$>mKUcnD`){xew5gdoQU;U_!vX1X~oV*&Y8+HEu95*e{--(mD zzPHPe44j$O#5qXBtEsgY6_3F^MGoA}bAa`4`i1tiIgWneI2sOceY5k3!2nhIDuAl> zGa+^t2&jZ^_GrNQI9lDXQ_jQRg;&^>-&O|URo=D%L+W0H(e4Al0Q>haLE>I-TtSYo zG4YNjmY*Aqy<|K+xSLS2D=uV|>^vX`#8gQYGOv;1^EOKH1vL;}C4Q+=0+ci<2<^ax zS0%gs-dzP6<%gkZFB{d(W5+l)ig+)M z8Z?@jN>b8~hzAb&15z90YZ9M5#~%1Bqr;QNs-_90p)v58tSbzSK1UNjz~-Y9OX`6o zUr95&838XKZ2$+10s}@vVh>&o?ZHE14nG>pOl`%Uv_nE--aiOv`@V|M_Mt$VKN2z9 zFBWLqMmeboRIl#4LyaLD?`Y>6m$c>Q2uZ79RM7tyMtoud2;ws&-imz6JG$e~lHDS$ zx&a{HK|v$fQ*bVAM!bO(q--`TN+Qr#OA8B#QSodia$|d?uhNcG-_`{DWi8RV61dtwV^@uNM#zpgfxqEXb@^T1HXexRo*&gEs_GIRF~?)8dU__t zDOEP3l+IF~xU2mw2ay5}xEH}HbJQKW?%N6#WiElwjVp%@9~2(y2Kb?6AaC7toEN+i z+=p_1KR+0h?oa)(DMTOPB>b57av*c+7WI5%!tK%|Pz?4P5431~aA zW7s=yLK@VrITwE&n?XiOr4yZUvW3)T{+xjbCYRu2zK=^ERX*e^mDnMNQ90R(3E)}& zR<>l4$-SiFh@y}WJ|CULcHzXTO74;0=X+riQVUt^t314p*>JQq4ZWaP9<&*m(_ML8 zB1Xqp_rw^LFFP6}Y7en7UQ7~_hS#Nu z4*o0XZ>f>~FopL_e-y6CV*?d>t_xD#O|I2wU3YC%^0+Tzztk~>hMFuwy|8(hCa?B) znWy+*p0$XKK#326#6<>&+1*!OW4N-9__IqknOswT(uTcM0cG9VsSXil~ zzfMr`c>EF-r{)k9(;HE-R8fw>QRn%FdQh>^N3+7b5gaz) zR=)Hl(HMxU zn16qT{DVFmD*sGqHM0Cetp@q`P`C0g08)Vk2x5G|NR0C}VtntK$izs(qr8q{2}1r| z8$yrtDT7BBbYBdT^gT@k%7vf(??U)df-3xg#Q#S4C8JwG3O(@(QK&Oa_`OP zk1FjMgkRcNBZayj2qnvc7sJT%VYJyr;H5x~WiQV%kR=JcJwIu}4Fd1z16<%O1VtGI z-iIRjW+WH7767Rso)aG6OC`$QtBeBgA`~#v<=xOiYfr5ufoH=fL7KUdNHcn%D)4@< zk)~mOo^PbjIYxQMy4k`+8z5B;5j(=U){^z|?=+XBz+uNQ?I*n3wS z2~By42yFoug&Vl8n28pg%t5{83ZSYhZh)>xGpU$eX_igF8_lwN#}J{>o0w%0YY+QF z?Hpv@wj}9hzc$apU`PC_Li|*YM0R%Y`7k2ve@Le;EC(C0Y`Sm0Y3HAEmKAsN^uma#uOa zum@}We}r%eY)wT2VoLs~4=D5xPmtuS7v#A<5_!%&Pmt&BlrwBT-fpB%tjqMQKX#!{ zk^!NTH1QszB>gEk;HSK*B&9SqXmNLvwCHC|l1ddTfm0)OKcGp|yHmSRH|c(`I7lFt z*BwGJCp(2a1_I}^JC6YCz8a%YsOzA0>1LeXi03rMMeEkXLbMXmsiGC}p8gxrx(65M z21V;1UL=aQhl$o{G?K2OHB_%0MLh+@H;p2Sr#C_IUJNs2(m%N|jIfi@tW4Xg`FNGe zEdaiB^I^>W2ops{zKOlw#&6dV#7%;B&i6#zloNvXJ~tP%Q}HI!gl0KYBxfMG(A5@3 z=yQ>-68dv6kNE6QY2ADu363p4Taf4Pn|0$dHQ;yWHJAzOgGH` zxo4zb_?U4cn>ad4e*F@h!X*-rD&gS9HFli{=U6cWkCjKHiUIhgo1fuYMC?rLpOz}# zCt%mL`xL^BR6z$6xDEXE6~G@)guMU?mN{VbLl;dI4?_dbb&gY3vggXHi2L!W|v8y2I(_z4n!?l5n zH9X*nrV{Z)Ohr$^*2gHK$V?}}OJE9YB?z-Qf8=BtZD>wWnGg*!~M{{yz6_O+piU z3JHCg6{J1-X_C-;g@mpZbRD{Tb|<1hlWuzs<e!u9L;WB~0YPojAQAsG zx+$m5oOlrYdD6(AWK4JO{{?HjR~?HOt+*S~4;P%|XmXj75G>YJ^R;AW+cD1=R%0rk z0gg4!#Y)Q>ywYq0wb`f;Nfk7qKq(?pVa1n%q=HUkK|nzKaD4REB{#eb#pdYN_L0)m1t&u&!NT z=+`<-lqEEZ-(6xrkrn=zm?!~n zq&)p0jhKku1QS8wH%+5R$~&Lv3}D@Z#ELd|B_r1~_7XmT&F~?bCbT3Z7P7TSM2f{Q zm(^h*j#zCUD2>-rUgt;UYy##oyvOJsXX`&`M$@vffp>u`mNCS5IHW=PkP7KndvR(& z_gWr9t#C(&u~$Wq)-#u=>_us8XDK3P&%sk*>md9Qi7ZLfqd%Y3#(E-B}4&VL^xcTl_m@a23|PggQmq8|hy1N6I)oyonbHn14vRvb1DS zP4J^CZH3-eUiTJqI@t%5XDexPRLPO^j|^?fc(WFt+}8>>KhaG!Gzmb@EKe2-D@#8{ zkIYKJA+j1ML(AIE0KC#Sq8gd2dS^Qe<DVl59) z!m*cZuvS%6?H# z*)8r-B72n&*^fWbZSDGYhS|RWtZ|zGDS262q<#o_a#YBZ(0wmo#|S|4;=vhIz4RwL~F zKBdi2=xMluG`J-M@HPDN0A)pJN9HzfJwxsz+Z^+Lww6(Ex$^zue={u32L__ z?aePFjz9URDiVTr)uzXZO=xE$?kze5CRt+#ll<*QF;&P87L06(*v%`exJrfKoY=*<2tLst@KBFr{f8N4E0f9X|dkmsEkWX~vA1{7pN z@~hNsmF8BzOZr)l5jwtr}8i=NXV^A?4 zkUb2U<&s0*)7DapH0~qUa14g67zT!*Fw*XlhB#t6T#54>uEc3dI{~|7Tqy)0nZ-`T z-ETrVCRMAD_5eBbmqYnZHediL=Tt>JTJT-R4_)^8e;35(Y6yKlskY{BS@gk%AWHix$iM8E$$c5;EhwzSH^f@bLiT+Pw|hwd zUi%hD0$0F-GH~N#ykTyOI@udCr=@7`k_79bC>hsWB>);hPNU0ytN^Wwo7-W!aokWE z`)0Oo-am*jr1{Y*uD4|GzX^LpV>EIU3BGZFjYPxsuDX#*hbVwtQh2orC|`a2RQ;qZ3M(Ajs1Bh zL7e<2%q6aPx{ZjZW}G z`Tr%n?}Tll!u!=#A@E)Sfc+|X4;EFa@ScO(LgAf@afV7D1H8Y4al$E_!~6DIba;25 z9(1F7cwhP>;63KeGr{{#TFKXUj@Lwj_p?6>c=L)3@XnVfBx^Rt9(Mwc#bB?B#|rBc zW(DfRHLmQR@bmH_0zYMmIzM>ZMolYJ*&!H91FCVsG5LpjN3A({?InmA?68}D<~3jg zDPH!8w1eX35GV{AN}I%6GyT*%jz*z#n22x_7df1<%5Rc$E#wv6h)2ay>kKTmFiRAi zv`yF@Rk>PCRVF8}{pa#)zj1uK(fnpqtGjGjt;zi(E!&uJkVww5D0#I$M>}0Q%087l z17*t^>C$Z6RP_l|ZO1XiaSY~jEk@%w#;!U+mAT)R^P1soyhz5z(>klyk6YT%2j=~n z?)h#;<0d$GEpM7zW4S{)2Ibk~(d0rlSaaRoytJU8N-3Qy?Wfahio&$n=qxqxT6no96o-cN&PEy457 zvSphIo(}jaHe)w7StbD0A@-s-K%n9w^;95k7C>yntq1smn4AX%5F2$M!u5UQR|G`f z(XK$;%<>7v5rL=?Gkyg;KQYRWqZmM>5QgYb$y)got{p;z!Un!#fSjg!zNlbssB{5( zl+eJhjTBD{)U0C{W zk|m<)OF`-K1Ww+A@TjhE1n#%6ivpd1oKzVXOjf2OuvR-qN#AqRoP$LscWhDMAU0hqmDC0;WZXX$ZukK;F{1M7M)u;MUjj}X8JL9+>i+QP zLVBEw5-jDHPAp*>xKG59rR%9xdg)!P^Iv%z38?Pqr6x!(8n){lW#CB_)m4OJ^`2nx zBv7tj6HFdm6%|BIp7pP7&LQBDQ14yGjm(ej*2setu@6jlKIINB<~7 ze~p5;!N^XyuVJY_aNJ)c=WV3MSrS@S)=`In>D%e}*ofX5)+rTOpQ2X4+%RH+@_%UW zbH)2-vZE@)vD&l03#O?!VOnu&n5Gn9di!q#rrr1;fW-!afvEAU|8$RLT|%hx);NEq zN07HPb!`V){eT?s!{;nMWpPovkJ7l5YJf9`=V(IrfL4+<_;yVEF#4&-q+poAu&tS9 zFSiGaBV5wngl?0h_1r-zBxMu(aO`2$+DB40Pp0sp+nuaN%b7tF7A>C)uH;btTzl^; z-uEIHa)zT3{FBZ3r;ziHHXUte1Aa!6VUm=uO9}YQF!BQtr>^g|hwL}gxj|flUGLZk zm~9e+H5kTzQiZG^9Enp9Dsp1=VPQ*9`Q_6kAe6~SXD`r zujHVw#j$M9bWD^vEoA?ewXIe1!O9 z0o`Z59;K`!6tW)@1aZD}6A>p*nmm~vIn3_+H#(nZW33O+Z!-HDzb)Sr-{)=6?$v(g z1ZNXVbz|!*I_h|r1a8^@B2WmB@(oVuaMal~)B#dmN6J3Xa`giOIf4ONP6|dccoMlV znEqYI885~eUILlV>k95;3skgs?F2Fp=nC$)MP>mvf};wf528tQU^O4^Mun?P8lGcT zaFVZhH0(?3a`DB3FS4T|!%-zw-bv4)surPxM2c+!R)J^XJ84^#h&ebNRuySm?YTPQ z)=kn8_wI2Ho*3DYWFRmb`|)0N#7Tl<1_|WwFch(PmL2Ilzqm|1ne7z$BPnhpg)K^x zx|pxtG0LYcsH|K0B$t4@)u~CyC&z9GC*$O!PVEp*nA>%0^eA-~1|C3wdH$Gq;{*oQ zrMG&VycaSS7>Z)g12}ky7QzXeyEWm|7ms|!2$E?sU_~l`TR6p|(y*R^4P6(5%y+CNnX_Iyeo!X{Nxtx0sHyS>78^m zq-}z1rL=8^v^8qlb4ZgN`!aA#N9E)69Lib*5@M~_9bhdP--)#ZoY)tVz{NUzQ*m(v zIFMSrt(|P+P76p)V=cidHul7PKITZQk`!bWt^*5x8FsT_KBpP>4EzGJQ>S8;U;N;g z-9+)BYy*CQN*q*(MUJBwEV|t+-kA7N*Bfq=>{Sa*F(CAN*Kx1`>&(ZmkBiC;FNG2$0LJ9QW5 zmkW^qetFA47aQ4Ve1prLI@X#+7Eua0dr*ojqFOfi7_}{}a~wwwFh*!$lPFxa>^L8p z=Ne@l4HqnT0vbL^&{xM1nkkV@Bkn_Q9{P@04(sWdVp~QK81kAGhac-5-%~eK(yT-3{|cO!ep$Tr+;K6>izAb+($PvAb|fCf5LQqXoGkFcR8Xvem4CV z@@q*I2qzBUaS*VL5ImH2u_0}>nih{V+0mE*4?|@PJ%{oD4S{&zPh-IYSjFT#AjZWG z+XQeP!#5Q;*J7oZdNJ!;0}mt{rVBg!{hi(NK#G9}1pN=V#X$c=l-=7mj!|$B`MAf| zuwhx#ZRcPda21i8fs=Lwrx9F53;1WvWdtVa;xxi%@JJc20sbNUr@9d8;a5-;8$J^S zvMGQF9#n<5J*e=0!!=v#3}=&*Z7Q1tlZjLOr#Yd+RYV;kX2FV1Q0I*(nYTcx3DtT1 zU~w^ngWYLH@SE65k%PU1jdgszF(gd7X7aRe}!_xk=~cJsBu^G6ZSRdbb;TvYC~L%3+&bfX~o# zLqFdrKEG+Ex`TErHH_@gbVJ7_onc(|uH*V@p2lumEmqbMnjsrLhgm|h;df(*{3(%L z$HfF6%*=n0c(AcUm~=@k-iO~7+z1XaQKlZEV^ysLdXf}WIz%~+2(v~g3>?StnsOWo z$IofG&INqAats`BnlaAgOOXqpIZx&sgPqG`G^^Uds(6GAd>yEvW;tNMh0$-+;0!~w z;0(L(;LvI9t7V<0Wj$Zc+vGh3%OwlZ=L4QK>`9R|yfbKNP*)Vq*D`mdVPwX|nxW_) zBQoQYMZl6I;tWVDm9oZk2%(rsN&J9-*4s)5UlNU%gnhY7{bIuxnTv}I?(&o>f5uL; zE@G1KM`Cj2Xo$)0@tsr!fmHTJoS>6Zd{gN}%A!Y3CnH&8Eqwl5mG#b23m+x&hp86a zQ}EMn;VDQD3RuWj?073I!uDjvVJ&jXKd^V;w!#uY2DYaUz$SOAZyEG7L|vzW&bR`axUiNW3+4|#YZ72dl3BD zV+YYw3O(W6!Sd{pc)H2%8=EL+CsX1`O3d_)O_sA$ePdJQ>`|1OiK#x@=^Hyr-s!t3 z7jyksCv^{3t99+6m``pq&L=qUXqZp1I;6&z_l{ohfn<-8R$(2`G}YBu(A%z5w)5?U zD1rDEV}F6JVTT4@e(E%`NUI664`-v zGY{oLO9aol(HQQkMlK$}B@qt|mGG0}fHATr@4&|W%7at~_BhiwF{Qbdpcu|i_C@#; z-Z|`vqR&qDyC%`SO8kNWsABB@Kgsw1n-!kweIG}_0$2eJY^9o|aXi(D4a9g0Y^5$3 zBeF!vm6V?ZazD=ZTd8Wc=T=Ulic*EQ2A+k_H{?1T93y=NY&Bl<8Wm&0ERQ5@hkn|hfg;^9k^O$ z#@)cHi#W~6{*D+pp&a>NVKg1q%&)@eDnR257~R|}45R-(6ak}|SZn>i#^~@_XNl22 z*Pa2R=e^JkMxVnz0|?q(?9cTAqk=zQ3d&dPDUWEZelDN#Eo;Z-i$qnD;W~9S>Sv0V zHa<`sspU8=EFVO8*ktUtz-mouRxi7&{dF6>f=40u9nDUds&3lOd@IhLD2r?jV=bT! zQ^Qy*|A|WYV{b%dbe~H*Bdl_CL+tjad)s~47T;v6ugD@d_^u0EW(+y*qtfS{sk*$u zc*3_&AWobo@>pg*tc~Rj>|lp})#FH>_#Pw4wKZglkz|UInD|Jr-J`)wLukk%zk;bD z3-d8fv1VK3dS73|Q1q+rr2@(tEs_!6hL+NDYZgJWgRzjo-u$EB(5qFwX1veF`ftm zd~m{8+GfJmUn@4K(8`^aw&1905&urxk8uf92im}burJr5)uzp72aWvF-T4Fgu&<;| zWft6l$MWG^ktZe&ZNw#+bzesN@|ZlzobiwaVGHlGw8qMAvqio(<0KC7EylEJQ?jj2 z_RCM)%A1&R($j*wa(v5da$H6`qJ&Mc_{?zN_^y&CTYT5!NiGDFSSTH-V3moun}tR1 z#qKs7HJODh<7~dAQI=MZTwpK7ElN}6n=En^D(MCE_yCBBR`%Kqu1R8&^`+KlT43{Z zxeITn4PoHyh?K`jAEKRDY<*jlDWl$lPPG08@RUucE2F{PmpU*WXPq-GKKl6xfZ&Qz z29OHw_NAi%bL0kWXaJTH<_F~EjijLwfgs=q^Yb+MFfQAaCqe_g2S=*^;jd#uew2zW zAFg>GD67L8&RRF(V;z0ezla0avl^ufU`ZKt*e>as+7#47o2VdQVZl{1H1r zsCvk9{TTOPd4;7A_>n)7uPr2$D2@)qKZDKyl>Bqn>|02h8dPfZuMose5H18t+8pk zH(@{t97CwD6!8adh1$8>0yY`~(Svvmv2vq)ur*pPu=%VCU!RZi#q*tS!+#U4@g9K@ z<-Nx`ylqa|k*rKgMx%MQ&1UI|ow(f-b9{YWf%L@qWb0-N{a7|z>Br`6v&*{!?&JiV zuFtd}C!Pl(@5?ZiD9MTw(GG-?jJHbldjj}H4U`1i1&~7a@;* zi7@534VqtfjN72&F??(!mFw`7s-d0tw;lZza%#74eDb6dj!6h-SwQ!qqY)eK)EgzG z?8U+VWNK5Y-}|yu|7k#~Kk_m)j~M9j=uN!SfST7&e(|&y?k7niCpoSHuPMo-&H^* zoP3x?hiMdpc;5KTgoex{sxP`8ytFCXbg=_Tx)Gyi7{Ylv2LJ!`$Rt47CZ#^8wM623`X77au`#vjEljGXTfpzv1^2{4$;$&CJ-1x4)vAU#e2pIgM05*dM&rfbN+|#s z$A*A8Dknq~e@2zyABI`njO^$;-af?J0lY2cLte^<9Q-OkOMnt!M0o&*KzmU13dNVt z=MZf}MU6ZoAS&Qk3~Um*Q5cW|?m6>nkQ=W9Z=?02fblCdyq`eJ6X6+RZoxqv4D6DC|NmgGYC6P8o1 z1O)?^+uxZC-a7sQVwqFU1oUrsz>`S6ABYAsMhbwUCs~A0_WMq_$~;Lp^9%hvjwSzu zXi9_mwbsVzPnX}eLRS;ttnD(H?AShw`e6h1KZtnEGR2v=3^PtWz-`9ap-l)KENz>V zd`_kRUG&`~jo({XH7U7Ip#N%okwGEonpLRC7{6R#g?a=qb18-2C?QwOLXn}{SF)@~ z9*e6@K{4@Jlo!*Nc(Kc46MR_-^4LU-s$^HS`GzRZKzMWeRcD!R7;EmC6c$5| zrTKS32W~VQ2T1KZtT^6}6QwD1%0J+i>R6(*t*r5qUUsh^Rn{?#1~DYn6nn|8mrU@h zxck*HtMP*sing9lQzEE-Ge#%^`p#QZZM~tFXK2M9^e@+Z!%b$-0I#3-Zx8yn2deuX z?58I6^nAQ{_n7r}bw)say8SR7#ue-bYazP|(}uS@`=K=8Ivvz+%iBoR3$EV;-8In6 zQcKP3a(>d6tiLii-e5{x=-LPiPf_^E@KHEu;yOeYAU{3sWGDBC-Dc)vd-w2`tz|p?eU$t^0s2yR~ zlkmMvd>@1FV3fY{IN0cRd0c`oJE8Rs1&;?BO!xMS9$gxR8|jg^Av=Ly*?#C6-i|2u zCE&>ZYoX)F2V5?EXMe$=Q;1Pby~)Ph5ucq<8l_|>A}EAwKIM5#Eo?_8paduS@NL{6 zU-qEVXxBl}p;yr%Uv`pw03{uVu>N)B7n?>qUCq=5N7GYJJ~^6AL@j9DaY&h!noq4H z%QPQ2nx?rnA{(Wouz9_xpKPBnuAf#89jnQ+`$UaD?&5#)VEvZuIXe z@RR}f zxgsoq{8uL|p51ERAP@48=%3 zI2~xn;aaIWNbg5j!xn zR8F4Rqi3EdGLvm8=iqt^H~(Ise;K}8z|%s-?C;3B-0HVO!3GbuIiC#1@b1PsC6Fn-;!xs*75UHe!h?;u$CJV!G= zlOEnhBi-pM*e4Ac57ZpNM%+rj^hhO=r6JfQ)ef4rtS?jwa5N|3DfUo5?F?|Sj3eSp zzznE?1Z^RbH?AMBX2gMQ7u%30 z26;T+$R!75&rx|E!|DIapi@9h{Rzf8{8tcdSJvK;Zv9S?^lkm=&6X~%e>-j#&;7KK+KPn=LhqHtDBJWNlhpp;t2G)Q(4ROoq z_QepyAsbv!Vp=iD~zNa~$3K+F=YX)WS|g3sYN~d?siiy91j4z`@qan~^=BME!Z8HL zAN?!F4?-3wzXB>9#-I43G&~z;lEOv+l8un6Q>(_0&lvFwf2lg%1$9YGy9EqBZn2^e zisUD8`A_#qe(3W5a*&Ha&0>(b&3(d_ApSxSfiY)~z{f$hVr=v08F*Hzcoe*Wy)V~Z1c|xKp3xvp>hRXvuU~9& zr@)b%vEP%J_Wzjs8o;QEYyVBM35zW3MuWskYpSuPN^1m^&|pmnn;;U{@RgttXp6W- zZ4q__gkW%!HOplwuf^8B(iU4%SWyCJzBGK&zU(hbLPy~nKNge*Km2zY-s%|my?e6(t~^Zx>K?1cpe{Pams-C zqVT1fyx^Mbw7~h`UU6Qe*kO3N{K4eH3=H^JJN1;fRgsi%!gyz9XNZvE@1L#m<4z(! zSQPU*!aL&u?h$li363YsJQ#pAfAad7IJF16PPKpTl-@O0GRJ!x_Pk zS6p`?N+$uh`#c&b2jTc79w$PNf61f}m!Hwq=6dG@{;+Uh0*8iJP&!ahtV#H2Buq}> zZmk^a9w$OJk^g-NQ#tIBr6Ff+gUP*M@@(-p8MK!Tg!e(kFtnewU7Sf*Tz~ndQN_m>owQxh9_Y_l0z#efp6gm13$+UD zmuS==PkdE-ZL_vla(jkjatk2z8Drf0Vl3*xrU~?`MiOC92OH^g=MP*ZizIE7YgXVx zXuRsU$fW#plC1kBn1Uls40GwOdI%uidqJb_f{x6^qn>kKa9#8>&BRobWOgvOFkEXrV?nX zdE$qgPq!~S?@88|h1pDFm8aLSk3-w464hZ8B5%?CmU1!=%uO^rlFLH{dGIq zk8_;tuZU+88E`ZYy&n7PFR`RU_8R^5d_>gy>nH@-UtRc>{gp3r8~t^ND{=nS&_08MN^&iJ)w72j^^SnG}~!+R>#kicUFw(dT0I8Mz$RK zXS}nbo0?<#1h5!#eu}v^6J1oX_^I<{~g(W zI|t!kArzVEo*gdlgtp#QH-<#1v3J#d5kW+jSKuSd`=D&&QfU~VQlI79g?zDtvX8_L zsy(=t)S{G^1LE~8fG|?FxauDQWLzv<(~skr%{z$3nU$yK5~$t!&}X5mL;UCdiur+O zVap>k#@f%@?WT1|fto~~{_nu5Z(>Q{1>3iPtz$NV+$mRaif z;N^3lft8Y{v(SN=Lna z@Tu$D2>A9W-tNQ;64$AtMI#?`MW)7!Rg*2_g(K;35w0=D3VlQtw=_VgrN#$qGqk7e z103STZugImEO+>JAnSSJI1FBKsse7MMV1eNi&6imjTw`m-FH3NMCa7sK{qP}IM4;6 zT?5UUBLyHQyGmFCix3l4%ZSa*^xB>fJ+xlrfeu#hE#roQVSMn{P#k0JF?ug-Jh++wyD&)TMl zSe3z&xzh(9#br(&a1?iCGmqkq@Tf3FJ~ojmu0-J<gz{5nM|M!?MTg|$=v2>FZz2pIl3URsRlo^9R@2ck z@|HK3QX@0-o6E-7#K-jkXW*Zrn_qy1jj{|!Swv*4Uy-_UiL*leWR zU>pZ5j(ct0Fbs32H{ej9njiONAO2v8^7`K}rH)5x-z5A2pp}4J0>&u7QvjgUBUi)Wwsy!@1*rH* zuY&m$%tzRrI!vC}AM#BhY$aeUV$^e#NBdsiR7o@H>60h@{y18l!EZIt@)Uk9&=_DI z&19=J`G*CYdLg$B)6t3*^F$?veDv|bv!5}3|IjMW$@dE{YnM}qBWqza-HFbeRvCLy zm*{Yf&;gJzSk$Uv;QN@{qa|t>D3QXKY8eC6zzv~2Ag=CH*M*g6!knF>dDd{WN-xH{ zaG-~SG8T>XnC)!79jG@IA(3mwi3>F?xQTW|3J1=bU59KHtDW+xtg6?>< zm#K>M73*oO2e}e_5OlfXDKhk?;`q(2iOWg z@OkD*Ch+4kjRtMQ0tn)G7K(3?vO%Nzpb1>fcYRj*uQEroMB|ZgIs92ciLAF3RY_>8 zxE4q&(4PI^<;Y|QSNnyBaaOa!IGjgQzHiwINTl2cq+?$KWK61$F+6fd_7D7u{V$`- z!l~CTh@0Nc3;|Svr`{KEz-5TMIny>{}r)*gp|6T0(LZcYpXSga)E2Y4|bqhFYLraG}jX10<%Yy|0#A@?Ds2jvvJNl-k@EW(P z4i;X@*27izB7&$=xTcjg!7VrLEgy9tdnGrgyWeuvuOp?I+{d}K;VU=SCKh8KZ?0j_r7n`DaYBJ_oMof`9D~Mje%v;hJ{ARK$)ZmfoB%Q}e2W$LcSz+2yHJVwWTtlboxB#<2>zsh62lvrzq-M9a5QZ*oAU-eb*%|TdfSH+e_k0-B2Pk9kl^wE4t*BGM2+}Eb z<6fC0S_A=(n6?|v;7 zdu$uIQQjdQ|09g4;E0p6{|<8elNUcr`EuR{%zWR+*u0MHMDgrw~kANTy!FwN; zC8!*81Ea7DJRm;8qu1(t$kS+}C;%M$N*Hsw z>Ul*;eDE>c2fRw=DBC6upW|M|$1k?{dO!)n+y)xj)Eo}TulK_x?`cj*{;#+iu0{Ej z`BZk?e2Q6=VAB72S0T^{ca6iZuTAB)lmlmze-?6#EYHEcAeE^WJ>BulKdKUizG^l6 z9cIiH6UbXnPjk_jlm~I^Q!4(TnbI4I%k2bjm*%Mx_IaxPtK;oINMBJ2iPLZJYsX+y z3@an?;#6av95V^LhLSANs`$;z2B-?ogh6xoAzBsV@W#-hXa~JwQUK`>iIK;s^0Zhr zD80ZBf>K)by#cqSs=SZI%Ny)D!Fk`f_i>kX4&(u5c?I~PSze$Y4b0*7EslQ+ofRy? z%YFzRPC$yW+J<p?Ytivl_q%1WBMzT)|*(U+qD}gwA zqm+X}YWG+0H_f0EC&IA;@$s4iryi(nWpu0^9ax$m$H4|qOUn#?Pnx1e6bSE^eMP7i znAd=518sc{-Wc^~L0^$CzH}?NdV9W_s<>UWuX}7XQEl6q;Pw&}45eY|LQSL?*-EBt~JS6D){S zxhGy{hvnN!d*OTjT<|D|){f`S1BD;_S@qJifkuu!-9v#MkJY|p69!f}hN4n(pPGbC z7WKEzudja7GJYnPM~t7na{TN#(fFAq$Ir*{BDNeqaW094o9}M&>y`CRq4qYmQv!(2=Vv8x4Ll~BSzpyJx8pkSP|Li7HE6iJhYPFk>f68b=xmTJ`zKk^37|hIL!tMj(-Y2J1Ty?K-MMgVpSKVO* z$qDWoSZd?_*V8*6an;=dYO(@numY+*yZG)Y%6Uym|0~Q@90}WJi)W=(fKxk+MUr?8x{vy%M>nBQx;!mZ4Tj6z{>7N* zh<%&3@|fu=v2sV3#~_Lk6pJ>^ruv1Km(^C~iI>njfk{2d=}B9W>OC#uH&@EFCx)d2 z{hrmmw#8~NniAKV?xiOAF?m{$8cm@VS-wZk!$e$-jx0}s!3!*3Xw%TUa-_6;ajY0_ zSiXqYH(*W}5?*DWu_)qftj4|*9ta({;GUvPO{5kZ{GJVZ!K-ZkdDJEP(nq49GPKs< z8?r|=IkYo3ya8t3KFce<%f-lf+BNnIS}HhaaP?YU-?Vyk(cTVw+CG04PT{Cb;idVM zMU5%)p7x@#O^Nrlq0jx{rRID9`}V=7<>B&PEd}$y3a!eHwV^gKxNd^uxW7biUh;j) z1a5H$F9oi<%3%CuTzW~%B@{mvodOE@g}G?3I|W;a%dk%Ssu|hN$XIG*51REYiz~Ih zLVxo_&A*Tje47e8c@c`V{gyM@;yL#j@pbl80NK zWZM*DK6&BIsE0@hi9V2lz00WdllQ;AW(-_?U*T%j5t$LAWd@?dTogVh-uI6j_YA_3 zt8qUng-=4pf`5nq8!e5i4Lp-eMe?{SlWB~n2zC6cA5OG?eMh7qYs^$N&I?wv<3+Wz+3{); zI^L!9Qe((Ed1-XKd9be#f4*MIyx!}mo7Yy@wLh0!@TbH+w?Ykn;Xo(*Tr^OLgGQsz zz37c0#CPp7A;F&_N|9;u-4J0Jhi-^4-u zu7J-HdTh8BH`N!w`N0Al1!gW3t~_{5$gJrB;00G6eM$TscVt^++y!)PfFRseFhyp0 zpLA5QfKDBBFeoxedJHNL1`Ful0zo8~P$7fvg?)<7d;yiQ>#OZtqr0>x(DPhhZBZYM z@}pIK{8D}h_3=Y|KtfRgT$8D$&xFNx{Gr#9YB*}BhFb);7fwM?tNATds`dkriVqa4 z8txk0%TVw6bozjsxb)C4{|~JHQT(|c<)WK~%(<{{mTBM@;x$*^{~*%a_>Z-D6aOJo z>5YL@;jTi$qprN;NVEdQn137om=StimCC_M9(+V(4h80qt~@Z#eJzSTAE&lD+p16$ z_su9q6ru2Scnfi}rReg3UOZ%*qQX@l;6EsbrQ?Z!Kme{j zm>SisVrc`U_5u>H393AZky*iFutp1s>upSto-gROqG~cYRrMOs2k{?$S&$m?&zw)h zJFd#h>A3~px6pQI-`FPpjjt}`_<#{X5=1-TaNt^8E;nzL2WRuh4TH4*3~67DDBbBO z8+`G~c-XvndSAo;N9T$+R;Te+)bKW*G46M~wh;R{x2IQK|8d`pqPs^Pm1^*XEt1$G zux3mPO1d5G)Zj9R-VZFc3MJr^w5%=FVYI}oN&Tu8q+-E#n2 zpXbW^E1*krU3o`k_o@1zy99_^No75tOusZob%%J`97aJu`w+h~94gkA5OV~m4_EGX zAgA;HQVkdc3>}UwfQFHNS@fFBhrrMk2sw}c=*XlhT~(4{%CM9ZB$W;L^g#9>JdwXu z7VmOWlI~3AkGvm2w2u2q9|GDtXi*qA=N*y`Xfk29mxqSWy#A!SvTKuDtsYmc; zygfHIlHivY3c$(*W?=lX3#d}bvZz8cP0v&C@BxXSXfD_bd2!82-wt7fKp=hQ&Hd7T z5(QR`_N*Gl&{;FfdsU^MlWmqM`@q~zS(^?FEwVQEsX(AAp*GJBstrA%4y;XQVr@EE zn@&|5$#Q&4ab3tU1{N%mr(o0q2rTLyFB~d`;?C`i*Noqu4p~$jHmRcG&|WhBn@F9` z=8JQGaCz~vz`s`BxojLy4;TUBs>B_xOS=;I-{cAnN1+grlJh^((+-43wo2ER6s9y= z4bYVO(kzgZ0SqN70QsqI>Eb1QP??bpFc?%dgArwb5oN$B{U{@nK@csh2+9EC$$%ml zvJgc16+szbL>X{)eM3b$ErM^I4#D3elIv1&>nMn@D~}AMR2v-W9;E}68!miER>cJ$ zmfx=WaS*gckYQS>z;CfJ$Z~$C|FY@oP<}ryZcXKe7a9i#D1C1S`Ur=-+bPxc$MGeX zw~<9YWgm_>cQOu4f)2T^!x1EBO#W9bd#&r*z2cnT+imZnec{C;4+uCBa*JPKMU6NJ zmO`ZpU`cxy%^sm0wY7_^xPbjaQgTxX3l8%FLTQH@gi3ifEWr2V~)=aHrs>8-RlnF;#w{; z%VlwJe6S=kC$~Vn_dWz4hi&j&h0>v9L-dkaXRCt;=S7N_JVpl)x_&QOv=bk;NRd5S zBvn8%bZ&2=x~`E)(+vatN~{$)=38C z-_X+pBBoJDA6!tpqPnef^@$xpyjNM8 zg z+J-O4j@E%s$j9dU@vQ~7<8QdsuLapi;nLMwknI~TU8e;ZAsnj3UoFUIS;C<@8E%wt znYTMg=PAgFKP<(5{Gt>g{?Z*(h!-X_c!Ub!{KckmK%a$?X8{&;nLj)z6S=R2crT!X zx}U8>oJ%HW@j~5hB3;)tu_tg0N0e40%_Y;a#=VM2dlT{P1_}B(ah=D)BFnqT_4-$z zB5l`{zO>^NkqDLkD2Ypa9Wh|+5qXG^M=!=#3HpT0`@LUjvZ;a}rLKF7X7*+s|F zgd*rT?sNv&?Vf?|0y{ZW zySyJKw3i}r3KI@d#LxV8pp#KIG*_W^X>hrVsq~26~vNxJ`#!DAW zT2=&Wx@ZYXEv3ZM87+au8v0Yobb_KKUil-%g&`Q0h`e9&+};@}S;EarX2~2$L}UVt zJW8hnhu`l`$Df6q{O9(gRZ%Uv=c_{T-RXs)_9&@{gKp2c-4DEi7{N z^dzo!kOfxdang%uSyUjNm5i19H@%dZ!-D%@ z892NK7tg|< zKsoZ0#AR8)ZNy`I#p>VV)KssY|7^tc^jW$5TDz*%=P4+_&OKTZ{Ak#^Ad=5Ls+xK( zvvbwqEJH04GxR_`SBnF)hPTj!+{@y*W6D=oLkAV&Wo{tdsMdaamt7IXX<}X*C~+xQ z#-*AJpoB7z0wHPzC+7BceT>Bn5?5veg)L82B_qoKBQubxA|6o@xfDC7lNr2NM1R0q z@dC?A42(>&Ry?CCrpT2sUvxTjFGh3Qg%hlmb78J~? z!u2ZFR0gFfwoYn3u3BLem?;-tq8f`1IvnDl6(0-SGw0y5bdI+0hz1VHW@n!0#F^I+ zHM5F%{7FO+Iunzhn=@b{iqM&hiNc>m6rnS{MB&f;1B>wIX>2-GZr*|Zgp=q(nEX29+wZpc)H>MX0HJAxcE7tUsaP0aK&S3Xi%eJRl0chj`SBc%y;@ zfr@m_N-mJ4iy(ZNI!jRA-FTocwi2te46z<9i4-1o^7mW|Jxy2@FfOX(W`c#v(zA`9 zsK!DMiUh+?exei$Jt%>ElN{EDnHk2;CDOp9nf6>Th8>CC!5g?-L9$vdo8&3AzAR5J zkHH={B7cRwcU%+PWkZE~3}bebE<(5zRzFHE%cNWy>mww)E(?FIapKRnvcY<=a>2Kt zHTX`e>$>OFUVP+s)r?foya8q*O4YZJ*y01ov!zZVF^Z~UsmH|{qLBNXY_U;@+tOi5ov$oaXkqR)D zgpgrn=$sIy`Ez^av^oDs5x7oY(@Mb!QQC_|ocWb0_n>7+DMgF{_Yg)x!SU-ZgHSDE z4=uyodWLJ$BF?Qiv9xS)<$BYL15}5$cV4Bu7hn4nUT4-GWD{tQvq8cE)?Ep35A1qS zrWh3dz`%&Va(1*x$%Aq{9W9dbfVU;Yb~PJ#j^ZggIH^TBJlJ6g8@6ts0uo3p*6NXZ zBjt^VB>gwkKE=2q9%)`YQimDossWKMLnN?G<^=zbz$!=K2N@!3JdNyJ>;|4rjL?}y z_JO0bu1}pB=f_c$7W`f0pW0r%ViYL+t_2TlRcJOPh_K3Z*(xdXfoEyn6w6TS{p6-;+oDS ztfwQf)3WaL|8DOtMQAd+A6EjC!6Fr4_mdE0gY^hI=`_aT!ebg^$pB-?fD_fwn(@U$ zgZbrss6qz*n_*|4qRuG!c)IcFjkB|HrQ1IC{qD4lD@P-jk}>#mT^{~i-XK?*Rp_Yh z8=>buj^B|^srEN`wct9$u10R|l3e8bXA};bn*}%W2^imkpYxCCkCq_VBQ-08W=_O^^U0>qbKMXvc2kmFmDoyU-h%pPemgr_Jesg* zagO@QFaWHuP0nu3L7Q{U$7dPDIS7QK0>ddQkN}NK#ziQ6Q#bcty`7ENgH(ETN0RX>I z5G|f0feFe$w6BEMUd70$7i+&poK9h#vTj@pT~Kvr|H+xkR@lv!K? z#V*^s)O8lT2Om#El)52WA++R!l{4puvlxjtTJyMPmWF8z13ALNe+*-VXXFLfk8!L>hr+Ns4W5%_ zoC@C_@K)aTNE0)zz)O@i34!ZQaTPw%m|8QGc=;BVS!R4$e_C|VWb0+#@A*$;6~PlF zFx{ay!P={!#Ke`Il6=f;d>ln@M)5|9e7fem<}!B*UyH`GDTfs(LxS)Ya9_A2KT>g>l($;T0c4XB*}_Job_{&lxUt`k!TXV+z;e;*YEB8h3DQmSaV# zb}qVCPQ~oXSz^u=JY;n@g1Sz-auzPO{J-)2u|?G|`cwHO)GGd=`qR3&FySG|RBl`<|6=ru8wew|A1 zQz?4+V_NA`Chuuf9;@egeLh%3!lES=UUAr6T13?umY20UEN_H$@Je(iB&buq5q4!A zE_L8Mu7$RuVl1dWN~(1Iz+XLYc^f6E>j%!TC+v@FuebI`_X+!B#&o%<(RbC4F=K4B z9RS{$siuXXCHR(^$=_=A7Z(0=@tNkc6PaF9Rv7nQnihMGfQJppa}!oTKF zJAa~~Y{F$|G(w6@j*6RWqVn`mbBOk;NHxX;Y7#TA{d)3=hLuaub!W zhnhpH6l%N)pwbm_`N9VOMMJ#WsmRnS6y#DzHRz${&|!tzWCFG*K&uV__YqQL+7;@E ziR#cp&7q5E=Nt`nngF5V<`FJYV-Qkg@>SgNCaORWHHU6js7WTENC9efKr~c`kRsEd zP@7ED7CqD)dP$+Snt;0%pj`)m`v@sA9SYTHqJ$o54qa-OCGRl-y((@#;Sx0-Aw{M@ z#hqlLiu6!(=uU;2VgjZrK!Xm5hBhIj$ZS!lttRSjJ=7ffvqEh%0oxUzLkEES2q`i` zp?XYIuO4a+P2f$QXy~X3=u>eE2$!fy2q`i}D((~$HB}EahrXv!(@lU^0k-IXXlN@! zip<>#war9r*F(*rzbe!Y6R=YOgbs*?dJs}%dKK!ZiR#ls%^|+%fJ*h70Gk37@kgSj zAf(7lRVeywP$;h+Y7YHKq2`!?Dh0S(2Sh{L5K?5eE7T4XwNno@hu&7G`%OTj0`%$t za33K>rca^dH8fdJ8`nhm*BmNiC>pYx0EYrh)dA7abc7TcuR_f+QB``VIrMXdT3`Ye zE5LRg5Do1>NRip8Q1_dtMm^LV`aq#}nSk92(5C~yeS{Pl8<+biIe%oxp@*77GZo5d z0^ADV)dA7a9E22^Duhy^p#>&tu^ws;-OErkw8RAX6kw+gh=%S*NReq&s9h#%w;pN^ z#T06f320IP8$9*%AL@XRBI6(|8giN_w;pN^RVq}L3CLD}Djk42Af(7FR;VQ=%BP2# zL%&m~n@qrR1!&X((a7nM(5T1@>hBW~#Dz1ZYiE<*O$hcM9EEAQj zhnho+6l$~y$WegBIsn{9NRja=)J-O8xgKf`J)%&46R=tVcI$v>Xb(b)Op`+GH&HEm zs5#^sCQE+M1V}$N(U6;PiONDqk;ztZN1Lb|J=7e!L7{R@K%N5lbU-w86GDp2a)t7n zsMUH1iyMVnX98*!ph*XS`v@sAEedteM78Q6tZ%sW#SCi#+Ev_axg{oQG(w6@j*6RW zqVn_*);9_@#suUmz;Ydc^$kLb%xZ+tr`DOMT0MmI4MUh=O+bSJwCI3n=paIhOshh* znW%O>g!K)L?J>iefDRQmhj59?MM#m!Q*pVS|U z(~A&Fb5ut~HhbY_CmQP0zp=`p+bPVmCcvfuMf{PdDF`WIQx$5uiSp_pta21;jtQtz zfV*`7+5jO%X1hY|Fi|`85LP(~b-xK{RDfO`fSMqr$n+^xzlpNpc^>}5Du*G=vnIfy z08@1U+5jO%#;Z_sOjMN~!YW6h7MOs=3b0)VV3mWABC}JW?l)15dI+l=h1z8Tb}K-i z4gmKNQeN8D* zNm)4n9Z>h}W*7y0sd* zTsu$2&NgG?d#2-RGcwC0O}IjB$VEF8ufX-#kia(x92??k^pSVp12>;PBu{Y1|9OAr zEcH?(RzLvpUj&b0Kgkaq$%yv_S%SaDvmcbR=}U#ho4O#jnIv1qBB(xp;c4nexM7o`^KE*q@Sj%)v5j8jifdzGTF|z1o4pIi_&wZQjrbxoO#uhlhsF9lwnCVVUcRP(sC&&il$N3C4T6aMr=((}k_vn*a$IAI1T$9G zBel)zkP#SqxfZHJ=#stQ=rTKa+IIvz4H3(KWNWBa|G+vx4@EZn5fY>G(NW<81QE5( z3jk3Bmmm};c&{W#EdNP@i}erm7CjW%JO?3h;8IDDdw*^7BtR6wDG0?0&XWX*P@LemBtc^N zPZI3VKd=DNLy^sG2#GrtL2enf&3gb*CESltoZy*~AhG->2{!2;82I#1Wb-bB#1)Dl zw`#-R`BPay-~mV49M{_`vF{NxPGiK?M$! zCauODuqM3x01v8<;Yv#!Gu^=Wa9=h7vq{H%uL*VYieLhAn}MW;+AEeOAeS3R>Ycsf z>ICFE14(VNSByzOwirn2h`qvB_dlBklPF-b%kE>U;?tyKvDzf6+cWsE;o?W>*4$_ z0a<4tsjc&h1qn!DAgP1%;{Lm}w0#DWnl-OD--1l>?KhCrmw82c0Fr6~mRB4|KrS|r)L41NZxfJN29kOx_~%MMjyI6hE_sDN0lD8mQfK6azXNN5 zIt(N=L0<8-1Z1s&q<+UMKA(WxVIZls@d}#-Y4hc;)$2)Jj92`RFP^8(=QWVju;Bg2 z1msbJEcGT{@m~o@w~>klx7mxb+riB_Lakl-y5y z#rsRGOxR=~xj%+Ky9DHR1Ib;lSL{hZx@&ayarfvIKTkmB7)b63z2Xiam!0G51U=Z# z!LAP##8OS*FLo{MHc^b(5OYobYP)ep9f6wX z3D>CNkIyS35_NHGiJbfFG%^H=BTtW`W<~xJ38SYz>Je!p& zo7T0mHe5aq$Yz$xMy>+~WHV$?Hg2Ckc{Wa!O|Qy^Yrp~7-1sHQGz^ir!=K2s?avKl zn%h^9Jeyy&OQzY@$=YxsHz1q+DjN)ZgR+@8D4Q(b^yJxmU1j4|*>E*BAe)6M8@a3+ zP@Csl2iE3n-|pnuy!4W+%@)NpZq^25bA`$V1ID1*+&Czk;l9@7*(_Jtw5r-*m>8Ii zOJ&23FtBaxgR(it*N{A$p(>kRl@0p$z-&aW6an<#LD~HD@IaY;rq=&#Gn0nJe=^w`5V6M+M^z6WZ z7hj^oR4ZYP{v(c$Fo%lP`=O6w{Weak!DC4y;O^~!_{zPowY(lfSro2_fz$nHH+vev zh8BDtWC}cXpnlr;gQ2qzA^`hqeLFAiZTl#ucoXq7dYMoxxwfA^L&w0}=NYiW>st*z zLxW@f&*#DIwb^3KBiz{Jb-j#%R_z+X^{Y|P$nvRh*fU&zib9hxt!TAELQj;cW2FyG zi3KnveCICKR_;qqOlM=!x`z7OkqMHdS?FvufGLqjsH}74r7wn!D|R&vckae_q@EWU z@xV^K8^6(dAO4adxF{IC>ja@-am#=Xk%dV6xJN6J+Hoog8AQYMD6X%?ZE5mm-v49a4 zFyg88imkJuvQwP&+>QLxX|8rVfEvA;W(2R?`6u4iypzvei4X8T*UnT|eHJC@ejq>y zrvEUc3)g!Qh}O@+Um$H_`b8hdn(G~`N~GQgD5wqbH6o2yEMN6;OaXn02_NqHnybX6_+9kgaI8|6~HTATa4`Bcp9K!O%DVp_7L-Sm3Z2{v4>cy z*h4H~Y-Hn;xN5vV3z3Ho?Dp-?%5EQtG$Ce^8NcB|7L!P%KEoT8!QJI&xW%DNY55i@ zzgz6XoEs^xMGU)m1YuZ0dcly`BdXu7gPu#t1w7n~D}Kqwpp=MLe~n;yqey!jX$Cqi zl!L;EOXQ%SI=$-OcUk+l4PE0z{Tp7jY9o<;6kUwPqz5x&rFw*n9tC&35shm$@oS8R zD0xcoiGDzBHJLhEeE$ET|38F@RC|a-v?r*wF8sh%*ND2&{t~9AaAl*7fXyi!hQCcU zMX`1)Qki1-+Z<9>*AzH*$%nz%RqKa5brq6z+hKEgb|qYyH->BO_ljp0lZnpeDOWby zR0a{x{TQRRpmbiUF8UT@wdvVX7^EU2kOOQ**t03(+2jR{IwRH{H}kqiUH6c%r>@!4 zU<)>9Hy2G$L1F7FQD|*pttMqdd%~&L;lEIrPoexn6UtBGs{ET!vgIs)fh_-~!XPy} zM)|j}f_nL7tfw(JoUHs0Ww91=lwbqgkHVu)pF;VsUS#DzN1=H6x3K)H7m@!c|JDg6ArP=3;nm%o?gFEGk~^aSOXv7Y|+ zDaubr3EC5MPx0x>&(#a8{3rc*`Q4Z`#p(q*|EVrd)_-NJ)Kit;E6YFUQ!js5-cB&a zPtuQ zR`c(pRs8$o0{jho8ng|4=we~Hl-D-2%P<#E+J@aSyiSJiX4nHdt7Tw|wxLP}Ho5Nn z1J)A4;Z@7MCN3=0a*qzK<#KNl0@3;+{KfoZ6AM4j<=#<#M&u$8tB6#6xwqkFE}OUp z^LcBz+-se{&fv1+a%yJYl2E~M?67`B$ydbuuB4L)&%oJ1rvC-dLt1^if8vLEsG-_V^vCxTN&SUmMZf4Ked|DXxPA|A z8qbccw0p&kpU2=lZufn^`OU@JHI7RTebBWmd+&#-+S7Z*d1+7MU4z@6z%eS7p=gfL zy5}A^?I9qtXtAy$7(n#wQxU!JWJKqHD26WE0HS+GpQ5C#drnf)sUXT)3?O>bsfeyU z8PQ1~O1T<9bkwPce(7XH^FdT2ps}{pTJ(N%eC&_SOA?_+wb#KOpUUvtIA?r?+OSImOzZ3@X76>d1lvh+gp#sH=jb;weVO zp)DgZulQZLtay4{TNc=@tI9||_7JnO&d0cen|S2&-;e0EUXF-KRAmd#l(nXWcD;^2 zs+Q0r{*6Wdok!KO10N@@C0Jk+_JOqo(5PkJw=A_h7av?tQ75Qs`OI`#OFWHb=mbwu z%hZ9jj6QtwTCU2JwWKIUq$XGCbJ@1AZ^2`4yvG_}VpJ>Te(5Ns$HOaE@qg$~(jTak zkApzhe6H5~4g<_*73_*Uhi@n}A-?Ben;UgSxyf-xZuBAP>tYm;6A z$G~Z)1NM72;XFb^dEuwiAz~M$((ZJ4E$mL;h5HK_nhqx!#C0R?Iu$nyaoyqt8F#+S z2Jt{mRRZZz^~h!(Zi4|TExd!uwUzi7T_C}W0LqIL9tTKlpiS#Q1_6&@D7=9-torx` zPnKFL-h$Y`K@%Z7rm~@34X~toDB%*r0w9^z{ zk4U|7s+Peg63#}?g>f)m0IM5@AfBr9#^9i#YXUF9yXudD1YwaGS>mCq<>mij&7QWD z#?-Dq0i~695-X+^sOZm17%XH1rI857XR-V!x7Pcy(oge>v%bcsPXnVAj&#Pp%FU;^ z_#d%Y_r(UdKlQ;BF^Zs3lKPQ}GMPgq=ms`&7i(1aYQX+LYWLzu`F2@-r0@m8(UO9Vl7Qzrg&*Hg2*IxIdGUXEklRA?QiMxkRP#`}L_2&l z4XzE&j@p?<422Ydzzc9k@*bm~^CV|8J6P8w9~uW}DM0vcG`{Dl@9mnWsnD}OaCd?< zZ(R6ZcY`rwDfwF)=hudw?WkMw;b#Y{{V5MW)NktS6Hhf*ho6%8@KazJewKk-9DeA> z+!%hYfSnImWDGwXt?(LQqK(AhnB4 zYm8Yx)bn^+!mt?G@5Q)x@L-DbS z5OLV6k5wUHptd9Il8tJtntj=zv5LzR>)Vu+nP^I~n+VUzm)GP?1oP!JC1Faw9*)Zw zmcYqw9KgGFZ)BBSZLerGK;Jmrpu#_foj>CHbK%W81EL~<%B!I6U|aXWjp+iftS)nq zNbObPix7&Fc+R$#ujfODd&xZ{>`huYJy+aVaEI}DRT$pL)%LG&6yEz9yA1CU%@W_Z zU#>E>7Yio@x|ex%p@td91W~G^;uC?qmV#BA;?G6PEaQI;Ogi-QUkru%Q@LTd{Ns~K zFo@%TtQTk*hA_cmi>=RLaW1{ByoEVHzMz|nt2G$7EdEy7DERFtS-bSN@`ta(-%7xE z4GVlmw*k8y{E4i0Ml;s^oUe{|aDv9=jp2A|s{)sN^2LuZIfPf*wSD12%iN~i+n6g+ zlfPIGS741c4=oQ5J$N`Ui_Ze$on<%L7YAinYrQ|IKPFehZtGf_6u_Sorl)rRmHy#R zl%9A0Rr*^$QTkpp{S}`m{T7Fj|NDiXr2hF(V(9h%MCn`2^tXPZ^t`LC^1tF_>9M}~ z=5?lgZ|I?>Aa36f7xCbg%b$`qDmOp?eH}D8s_%ue*JnclulPknKc+orWNK`~F+5*u zbKQx@2yL}{(%(j$GXhx~jxnAqI2q99y5UTT?W#_amM+3JL2Xxu;Nu=Y@`^-q5KC^# zvk{2a^EDA5ZDOt+d(Qe+(umaO6Q{-<-)bcDid*M!$I2{VctNyR?E8Y+x7N4gQxW!x z5ntE0t`Zu2q6avspCDydiG)H$!E9p>u?W`9da72>_|%`DDYX<2k+k^mUVSs$fUl^G zB6St@0^caRtyz+_iF;C6NEu71I-ySImsF>B{(a!CR&8o;fiG=p&BZU=sqBkte0pQF zrTsci+J4Z0+yoZJR@fDTVq<*`I4IE@@wE^eG3ygFBIwFSEWG@58WBabi7jBjNgDBi zS%Vt!I9h_rhlEDFdeW!gh?oERG#l}V?IewO-rtfp;{7-)k&XD;2-%2gD3*VFX%n^vlVsy}@y z^?U9!t>1fC!hE*%+xwZ;@2tk%-0#g3-?7vFVUW*S%qQ4NVS5$a zn=gK?aJF%>^oy`iJsJKg_sQ|!g>CcT^w?jV zono#}lkA=8KcQedwiD}f^p%1(GZ!klky>WqVb@(vu7`0>ILjR^%jGHp+tCU4n%;t^ z&J#ydb9>zqaP@|1|Pnj;;LZ*FPcuqbZ+4{dfE``9Jcj zg!+FP`Mdua{!d8A|0wpAvgiFP?Z5b+$^VfZ3HARp^0)sp{GX7J|50p-|K<8G|Jgqw ze~tv4?l~2lX1$USJ`+?I{o^8P`jz~4V z0LyKJ(wapxa>3{NSN&N$_Bjy43-|drjE2h0&*RTkb}bq{FF}k3?h({@@-Nos&L@oe zyw-TS^=Y~|X?<>j-2SiE=Mfy!VBAOh3_tDq^nN*MeHu^DK6RgE`~3BBqdr&u?sVHH zCwYAeaFm~{eLmCrj56zU^KVbLK3=$JPSSrioj~3`)B2P>X0*>w|NC_7Qw#ftB=yJ!;hF5BHyLeHy=%v_9_t3-!5ow^5&u?>pW4bX=IUKK-9cecrUrKXc;B?ZnHu z@4^JI#xbr5=Q4awWBbH1JG5)znw|30yk9i_6b5bx^Bha8{Fyu?9Lr}39!%w-_ZNR6 zU2aje30>7S5zltMlyKvA>?_K5^8JpB_bRYcCcr3QvKY3%61x+ z#p_W0VNZM5b0qBPKyBM)ZAaoL1xKRGRc!%ERaOCC);t|?hfA?7QfoTM!iAGKCUx3x zfisI?en8Gt{G6QWA!jC$GlOc0y6L>yWbkU{bBb5(idS7Lpps8`0j2+EN!Vp!lA6D( zt^7%@zx)uw5Qq!Ik%@SVcSfS??32_{)o-)4eo5C`+JO4C z8TCW68})1askB=7ieA49u~I_qXh`D0vspsc@X5ofhMgysyeDsotXc-u+C(sI|95`-od80W>9tX6Jqg*B;tQu zTPXAnxC=v07;nt!9BcW5YITR+>OX>Ei_v;QtVZ$#7FbT6m3)r9$ud4!{Fx0HkHh5$ ztt{AMuwXw}pc}(N4jViiqi`RZJn=8r7Pe{o@U%>8#M9~x&utT3|0!8=gE@Ak4YWTk z+oX?M1AW|pe>85uptUOE*+c$q12L_9KlwMC{Ohh}HlkkU;oqh$M7Hgen;(ECinCc~ zU`Q)J7)Hr-2HuGmH8?P|&x*`#)5o%J%CW4~;A5-E2hl-%ltcfGJxDG`HO0^GSow+m zFxWmpJK1=zvo3q1XIO)0Sj007{;uwp#V_7iKCC+%kY>*?obgsG=q0r^!)&g*_Ud)Z zX@G&5KAHXYK%!)13=~9+dUEui{bRFVo!+Q-J`xP#hGk^8&VQ%r4|D{SOnIn8+{53M z8*zm|nzi64Teob{pPI333oRD0;6IFZ@uYizZ)|FZ!ZrQcBKsxh?fr;nZg}O0qIeW$ zA`rzsoqvIWuN)nPzc|U+fXg_AlXi%BP&}aXl<6gr6rGJb$#*i`t`vdbMJk z#(E9^g!MXOV7(IOug|KzsFh2oSC3w=%SU~(_8R-wr0sRYDu3fYHTjb*)Fvg5`ptxz z%+V$9#fh$$3VFo4Rr_Q?yixatXALu%Ya(_Tl>@C@nK+nrs(qa zdt89}B;&)=o&T%#;i*P~)OF}m_YZYjimK6nYP@^*fBskN!&9P!`W(c7PIIErt9G3%MJ0L=gU@hl}sZ=7;jQQDyfKE*7ww2Ef94~yMW z5GjX|=fMi-zr8uNH3w~YuN~_NPhWRFw&Plg=Cx~6&TytZ7i_TyZ!53`(hz{(M(tVg zTWr~Pw>R3|`?NrhR%4i^>eaw9`5djnIqW6vX(nA$05f5i=V`B4g=DB1*Ht1IO`#@X z2#)a@|MU^Bkq?n9vhoh6sFu~1+CA_v&s;BfKQirs^}#y6PN=PM*rF)~5On|WW!cM8 zDul0AF7GWQ^}|8X+dVaNxNd4C2T+VR+Fs4;(57akO?57ey&<9TKg7dUR(l72?!ORC zrTk$58J_IWW;nysoEvAj8>YFn8Cl_JS=!UarLcH%eZ6z)@(U0)%D?mWla#-2)S&WP z%E$ixZz*3vI9@)-$;#K8J*a$GeLg3xji+TnWnxR4=G0d3LK)s_e{mqo2JoBX@xP@$ z>n!{(Sbq|JSB*|yADks=)3Rdusy1dt29%%kMevF6QPo0AQ z!7h8(+1p|g(o&Jlw7)~zV2yAC8VhvdW_KG^L~G;q!x za~jGgbszJzVCKDGbc*v50oh_iA|O|M42vO4l6=vV2$&>ZO$1C8&n5!q zh({9viv^!@vJkyV@L?zeU{*toVoLrl`;NKZ+t9NOt()wA9oix4>7}G8zn;Qf8GmCX zBiI)UoTEIF`o?UazoLr2)0W=R#Rs}$x4L~rfW~fh_;Tg1-IvE$dWtPF#d#_P&e7{Z z8t);P-vRj@`(sW%9I|{-c zz7by^%kgJC^qa3>2$~&U*eRxch$FWWJ9XSwA*k}jd-G7T;bO6XxTuqe6)J0!-R)kn zNP$dtw}(qic9)Rdl0bNFkGOnr;`0Y5c1B9FSdN!0iB){I4 zUrqYg>+);A{`G?VYSF)bFTeQAG^td65SR0y9loBd#oCD7dIx4Jh&N706m*rZP$73?OmWU=nu>Cc#uDiQEAsW(_8B z)nF1#Ws=AnK*BYcM8B0Es%tY<k+YC%bF0h*OLDm2>|44evKoiyk+OcTc;m1AF>>q`{Hltar`7by)in-_ z+HqcYMEn*zJ=EiivcsJ#PkMg>5aI!`n>vY76_2 zU&$1&SOI9HWGY+n1_swok9y=|_1eNtrkbUvy7_2I;B6}6JblIK6wYut4($30HP*|u zsgS3{!6t-B>GP!Y_ zL?41Ks9lTg3df&C*zcg?UnV=aR=|EiKiZdLQISOZUpGdf61QAXR3n;cMyuA_&GGfN z^rw>Kyc+ih;ZOxzz5`T-UXLx8SYD3D5=P*ygtLE)gH|5tsaA4eKZ|0?eMfMu!{&<2 zK$pjB3b)VF6P$zCXa*0Su{i>c;v~CGRYj)3s)bJCi$NZ{I(=^_o`%Vjz61^)hCc_P z9S(N%N4$2thBG5CZi*#99;1ZSxr_!q=eyn*1r ze?3&WC>ppd>vAw@UGCXp@Mcwnyg6v$&0U~}Pill^i=IR6`62Xpvr)$(bE8oa6U>9l zka$KDBQs5=6_^=~kQsGYGCDX-X2kPx>ceRvf_;O|2wfUPbag^r()XaJ11d1tCNF=_ zsK@U%u^ugP^5bISMr1&jRD2lFpm%gHS*}L9-I@ z_d-=n+z&##ZOnk}4+?soW`8u1DPK?p&6VTP7ueVs1BNP~F|xvJ$kP(GKZ?AZl4*O4 zinz_YlQ2L0A#i+8$}ZL&8MVkhh+XWLW`nNIwGD9jE9}#XR9Qm%!Oc! zS7-_}6ferkQb9-40z3Xn2-o6k!8q9;v2(P+J&wRIci*j4f!J~Q5D?<{bzo?DuULu| zTEx?f5)DU@A!wrWZ}g$ks~v!71)Jc$X*P%<3M>_K84V(8@?CSwQ`@yFVMSzhsYJYO&J)nol7KsvpM zh4P`0O%7DYD-I#D9%G-3K{^l(H2CI?s2S!T)n;>%3*0EN=`Ws&Hs^`X2<;j>lvahu zRywhpdQKGftsGU^J-l$OV}(nL?iHzNQ4TAw9KyL#8pJ=m)*f*-$nz#NcnT=EG*6?^ z*cYHHkk2jRSXg@P86Lb@q-YC|xa2D&V6__s3O*~Vk!&b>10t&k>;?gSxKB`7nS*+K z`+u-@;>y59wQEwY4}7t9P3nrkxwUK3ZVimAU1PsK;Hq7dz9KNRc1_0DBE>`esoLIs z`gzD1-!=6w!JaXu{;xOD9t^k1TeW$1=>hbTvtjq99r)m_jcN3L`yp(r_P%{y+J{nX zDYJ5D49`6%-ttSC&227mr*zS^glzFP1sz7{*ru+x*;8s-Hl|^+sfW$7^f1RqoX5Ri zA9HPf29R)|4gFO&JJYYR^Bpuft4Q}!Y@KaOnVbJ=tO_&-P-*3DarbmHzbkc(atavW z=yCt`QZpFzv}KnX9rJ^A|Is}QADli6lQpHAY!_Qq{IN~l6IjIc7ms_@b>0-lYt_oz zG+Wv}*r&>}xavlubC(A9Wfy+1t^?L_aylQNebh~g&w@Y9_}-t*`u~Z07x<{EYw>@Q z3}J-9nP||cQKLqiHq=H#6>hL5kXPk30ZD@8;l0;OW3(;G4A6?0bO(xz@+9+HIHg$gAwf8ymNP>_4?*0GykU9J8z0ZEE zz4qE`t-bcztk(_m0ksA?p7c1QGh}g2=3wcW$Nwad-`#ci{G8nt&#o+H2-_AqeK zu7c>FvLb&>>j7gq(%(-~U)%c%3`4C~M&ma+=#$`X9rR1^866Bt@DUx%m*9_dut0*} z(ZNCqenkh1B)CxrizRrw4wgvpRvnxq!O!YonFJT<;A9Cl=-?Cy*6QFi304qny947i zQBJ4tJQhn@4r-|1r-K^Qwhn6eepv@KP*>@ohUCpU zSSgVFM}i|Dso@vW_KO(2@1;-SA}cDl`~s0d*#?L$7*anl-Abr*0325R`l{4&PR`mf|kYs=PxF=ROWIi^VC`oN&++<8{qI81q>E9ybb;iazi1qM` zNyPfD4r;`@M+Y@x#Rw+bD2UbTvQJA*p~((z#b0H5J+yJFK`f(07FBMNA--_f$6MGR z820g&82(V}(EWv!SGT7~f+r41gSGDOO&u(e*gxvvBnciO$fj>JKBW>1&k8+`fxE<= z^HN#%UHMI0U}$_{Kg!YXH>rx(m~u@p@9GvLAITrqLY09)kyTgZ;E_W&)peiCoLz$< zRcE4-vy1Jfq9g>1(^2Hyksps6`Ejvbr~CMqn{ja|vvfS&44>I{N14ph@#fv{|h)QKkvwjD2(G#=0`o4AknA)0^>C3I?+-89vPck={95snZ>``eXr$O9(U& zQ{-OgeYD^2+7Gk1Y7u1&HpG3|eNa)R>hkJG

~((OV9KfvQd?6#gvh)xOikM zgoq|F`?d+D?x$Kt)cvrD8eaE=jL%OspRXPH`AwsLeySZ6-4q+5!kr4D%)k(D5KR|n zGwd0wo9tiAg4jb(45T3hgPa_~_+NI_H6Aw@pd^8fFXB(7!wF#TOp^Qa@#<*&)5dFh z_2;LVyvcEXGNcmeZDpLFba%d~o$V^v|jNkyu@-_4E!| zaSz|`*WZ6-*!MpPskUL?|0Gt2A4T+k>I$4Z>sc4=M6XhkdczOz+2Q~?!i-d*Uke>3 zgnBQerl;Nze%-T0oZ_NGP)Ei|! z$D1(ZdsUB)r`=;V($$dKntVqjwOWB$jw>w;NHaYJaQI;_Q@$b^g(D{_=_A|(|oyso%Cu;R={#O)O#Zg-2g z-7Ny$%a>?hnjOd17MH)gY!l zY8_BnvsUhsSZ7*Tpx2|*^a?WB$dP~6<{J(lyLrDXZ ztb=8e;YJ;tBEdHazSnBx$a{^}iyGeh*zg@vAC>QCXxZRA9n}2j={l(SQJ(}?z>hYn zzwIMftMk6CgF5dU5}XkdCiG^V7uK{<{i6hp_|d3?`m>ojL$ze6OlA0FD#OQghHHNz zipXV~gi9_UCfe;a`u50BlRc+Jt%G}Eaq`OWG}(6xtx{V+MK^BvIJrwQHw@=<(rS9XKCNh;V)=0d4pdq<~TpB0#Uz}oK0 zrMi6sj?oS7XKQ`-oS>cmOUBDnx}S>-%0jmPfU0?72v?rf#W&k`w~?abE-Uf~bUe!f z*LCs?6&;al4Y&v)Sm|@(>PvK-n3+}r?CThp>z>n51rk-@MD5a1g%VXJQGxseI;JEL zq(G~>xFnFbUPu_j`c?6D9a~??Z`v_17kvyrwQcRc58rEM+71QNwG z7Ts)I$%oorV`HdwY)jEym^OX#`J5oX`{j3Hf!sYYd#LQJvoUym$}xZg{HZ4WTr(fGzX6ak#B z@+&P=AODXbOw2cX><$k&>(JX4AK##Fco+Jk<6H8hVz9NjN9&GfciOh(2E)};7l_X1 zP{`Dve#fpFde-!-PBuFix=59YN2U5qAF;#qe6KWUJ)beT8mUZFcl|^f)odCoib9;i z%A2;p+IOF}zzPJ%2J&*b=OV~87eSsyJi-38bztwo+Oj}!?iAjZ)(1+umIWqu1xofq z9QLzGw1pUg{59_nlcare=QTUaz;62-Sti$P`=n9Dlp`fZWYp z>H?E_K~JEhhg>z}Xx>eZ3C&zbvMlh4u9ZGrU0w~-?h_La-9J7USpV+~V4&nspowyV zHTxle(x8{VOI@>jj_s`e(%Hn1kqb=%CEQ7nXD%byfA}6iLFNNODQ^q7dARgsJH4Zc zQz+%!<@z3!h0>YD(%oLF;4*`S+okJ#Q&%r9x?A*KZ8}AIi~D)q6!oeXu0A+>OCY$Q zSE2!0P|_CCJAs}wB{*AN_@nLQk+4K*>&?G6H1#B|&M~BEm8n3>AA83#F!oi)qB7{U*CqCc~uj6E9(^SXd*ixg99x zzfB|qA!XN)Vd1|>secXRUBQER{UL=c8Y1m;eAUd~qQCLszChlbAg!GnvbuT5D4OwK zdOcamwUEyi9wN53h|g#^xF&BUya_BN5UefZjUI6AN}Bo+C+hmR@{>PHQUK^Z^S^$1 zQXkvi{}aeeYW`=c{F(d5HweQnQ-ON^^*)|rpuX788;3kQdf>xi-`>M7wcA^GM#gJ| zG%xhBE70^D2uL^bI<}H7Xu16`?qEQuPmHM-R9k-mZyH$_jhVs)I+AdoP8bAV4fV<4 z`w5a5*ubG7kDB+2p+a(hyhDWsu|v~TXn;Vx<0!wQ+e|ix9t4#_#i;@c!l}CX;3H=>-FlfS4qsRYu$n<`ea|L z1^TP}SO+Tk1ouV?E&VT=7E-0yfTl|DTZdxbmX@5XBrZLERLYpI{(ub=4Y50XygDTH z-9b2uN9B7Hjecu~n5+iz*esE@Kq#cX_6JQyvrQ~+w@K4(w*^GvcAE!ow*`KQM+KHi zk~+Ut_PKIY&8@CZ{hTjAp>6p>ZMl|BHT!xA*8EUzCm8}hp1#wZxXVl&!^LtSx#IfQ z+#(hJ3Mi`42vt2_QfCq@z(S7(l*YEV(j4mrHTeXOdjTK z*LA{1_GKu?6sjfOl<3%{v2l_NbXW$f1ko zskyw4=gG!PCZDI#Mq-)1n$r`uuHzLatIO*N``6LyL~4K$=nnvhv7^cwJB6(g`6JO0&#S%b26Q9SJO9WssWn{N>Xw3azC9L0!2MAx-QM zO6X?rN`z^K`NDT>j0Xyq6`l&5YM7NW7SIj539K1Gc;+)ohh(stAZqGDk@9zzj5wO7 zDf~-6awt6XoubVG-n1*)U&+yhZBv9t`)V7QV0Ssln5$MYH{Mc(uR0E?K(i#b1oG}4pc=w=%kC}D^*)}w z3YRI-MLgr0nI|71(M6b0Su!+PhuW@=uNP+Dq)tnQg!PwydcT#!-68eEpALaKH9O^n z=4>MTJkQNMU*ow2W~}BYxHP>}t#PtOyQbLlrjXd{nR?I#`raBIFL#fo6$ zH&RiL?f;cPRFyepS>1F~x^0SDFFiM#DKZ@t3cA|gVx7FaiVV>cIj zt$r>UBCl-s%6Wj6`{`cOF1fC!>A67D%Ypotg&EHqD|0Q72OA36;#tI#F{vx#S;@1K znuYcptP3F$2lD2wc2s|kM8R;>4A4*&->^kPR0is6LPr958)Tv9)9*gSGrr*wCq2Gl zs}oYsZH7~JZV=kgNvvtjhW#d3L>av%NSiho@JO>Z2zcC?0_}2{I6r;v_RcDXy8IE{;V7?qB-5p@leg0cXGELX1Zxx;?&}xNR7ud5%1& zFPE|Y_!%QV1N`>>>q!-OTikgX8Fx8$bqM3Kolsp|A5v%FxYu4+ENu}fI6q|1Dh{bK zjXX;~_;`WD^?Gg!1USS&<1$(z@jg zz=mG3qT;9+i1<*@C{fxX@cL_`?`E(0Pq!5kQ@#uB2d;Pn)m_{Z=1{@AP}VsrC>?cFPR{Hok- zaA4g}rHOj2-Gw|kW|BZNwj$*TJTGvSt^N^xAX}WAV(W< z$!WB1?EB=BZ0A108R_Ngt1sT1<1EcaA%J7tK zr?{>*U0nNsJa{#gwL6t{Z8oWHWnI!-s%jS~s%PI!BvR_6q~5^|xcU^oZg_Sh<2)hw zeOTP4gb?_U_0|pdPog|9b~=$rbi@|v>4~nzny@7vfW`(_3TLt;7$|w2XKtXR4;i4# z@^9qvm-~BILI}L72af_~6<3n$RHF95ZvPj5Do}zju~4L-weTv%TWX zsJf5kcyt!N9n&dU{U$3pD1~3H$8S&I+6kK(0c45^^69N2FJ7g` zqy%vp=+SR!i-6P9C+wmWW(4&>2_O})Ix_c9IeRDqZ_}=m3&SPbnQ3Kw257m~ba}|W zt60QmYN;*`YtSsbwwRe9z|Om;SO|wsTch?uXQ+S77TRmL*tG&rh)tm6F9a49HwT(} z2;3kz12lt;bi0@56{g!VX3z6?m;x6GU>5Bsbb~X-GVsA=#5RL>ixe+1t93K3Ee6>R z^789I2?M@RkC4V03eee_UksG&A>~)*bD&E>BF!)S12Kn8{cAMHsgG!Ir&$n^Btb^W z`QN-s^L4daSJ(`KFOm*u>6YdPzf~+tPoU(lYwoXwp50TtlULRH01D&Tz9o9) z%`&TQmBUh070Jq425HUVgQ~KT3hI;bFLJhq_4GEm(hMZXTY&4vA$2M;t1MBG3C;@3 zA}ot+$7)%*)z7d;wobJ>rXc=>+Pmse3aD>7am{QV5Vy%o+y*C3L{s7heZrCp|J4@gdkcw&>ggx&R5@-(t&l^=tt3w#t>6DS$e23eJ`UT=9`Zw2HPN&*#uDDYbu3m4a8 z-uD^&n4#mjRxX^Mdt;|GNND-IF^9mtoE~)piX{yrDOt1OQmpW)Qm!tQH&|7Qv?vld z6EYPYgQqMKJQ8lv+AVHP$)Oqm2`fi1cDb->Vf$YNpRfm{LcY!rz{y2aruYq8DsilH zN#Wa2%H%eS*?B3HTxF6A!8=egL4X3qkWH4lQ-Q900H>C{MhtDX_@2-hJ>Qr zAT5;F$$*W|&}kf`SL$3EyL1Ur!ZTZL)bxkw+PF1XaU}9vEAAZXksfG#Mm`aIbNKtnDGq+6gVubnwcTFfi}q$|ihE;cJ+Ndu(qpyD~2g$`x*1g>LP@*qa_V<8SBkFdr0ny9t32U z0kT^(NF}4m1xT?15RhT5a%#ow!HAI$%^FJDXf#pqr@z_-A*Wp+io0+|y1=;0oEHk@ z1pww;W?o($J)X;ynhV*QTge}ZbFb%bc_8m!+h_-mO+3_PCJlUaHP+_FG0%)n(lgUbVSS~i!gjw`C+}?2rTkC!^LwU& zAG)i7yziREEb67NKa^4e!Ra7>oos7PN4I^juAZ0{Vp=2y&Gf;#)pYX9_vua;?U6=D zLlreCap_6)wSj1V8S5(_d{GdiO340M{4Fm5Mgp+afEAn}Lcw*w`} z8w)GRvG8|{obcs}JXMsWrPntcd^qGpHor>X)07~RXfqo;&7fNFGTw!kXK0#xB`5W0 z_Fub~(y3LD_%-pTZ z`k=@vEW!EGXU!ti%Ys}fqJpf(X8nrxQ&jL8dJvo!bc~lNQqLH~@n$xin;R(#Kp>CP zQkmEc4Kgg>$RMG5ponIoMJD5q4e+8rzppS(g<*l^OMIlua?}OOq$!sY`L+S#JAsnt zc@x-z9j03JFH{3)B~~K>Due?oXX%K%CIJpbLVzrR{SCUMf*2z6LQiCDB;ifUgT!jx zM?c}ERGs&QpqU+dpnem$c8q8!0@qG-6ctXTJ60|+!zeO$mn!Q|^_PZFs96}DU3gwO zsvuQD#`5M$HFFCBO$*7UHdv-#<@fFeSk_8i$=)9Jahsxs-}QG0jf;8Cac?wH?pd*_Gn z?zn$8-W?yy9`hl+JAR$d*fE9E^r#0TN$-x&-Sr{7J0{6A^L0K4QF5@O`?Roq{wIWQ zetOJA)&M!*7I5`6JtGNr^7b}R> zdojK9iNU~U;uHh_U8&jd6r)ak#x726zmTB``LKoxTC?-5Q>;^Bbp1sao0g?fhR!^J5GA6*Ih%G1$NM)hQR5%A zZs$_?erqf##nxOeOg6XcUdFMx*i_;D^i{hOPk?h93;fnhf6i_zOA4+f3ugaog5JKx z)`H+XVP>-_V4OAG3y+?d=~FYW#Ag(TML5@5)(tc>%ssT%a=)jdJ3?iBXIrrK!rNEG zY2!@4Rh{RRqtfz_lkISE9%Ws?pfOleC@lT(ox_CtF)ZxIMJ)&KIPdZi*`mS7@aNBD zIRnD@F~3j0C23EhPg9H>59=-Lm8dBf%aMzky$J-Cn|3tYU-ad0!OKAO>USfT#u%#E zKD)^mAB&)$zzq>?6sW@#XWLc2kbR9$^@9+H|16OWUhBxRO|=)jeN%UHbdAsVZsZ6d zyTO;UpHFdIRk0&7hXV-|f;=Ktb{AkJiZjJ*(qh1KwwRX2vask4MZ0|J-zk~;$u6~1 zXPr-1Iyb1!JcXgZvhRyGbv6sD-o>$}sRiMQnxFT$ky8sIZ<7#PAg9a)wC`JEk<`eM z>SU#{vW#js`WVSRE`#_7FBY3_#@rGA>30vOJ6J&cpo$uKSF zgbl;A(j5^qOnKJ-!w}sr)eRq_^g4y?zTX(7xL+;LL$1V>_eCsu#VO?suRYUiP2t>b zlX??{rnP??YQ+HZTxn1AMAoezL*}i-Q5R?CAs66nkWVa62uut$s(!v$iZBYD4SHJ2 z*0EXAbE7*s4ZWOiodwI~w+_lg0eyEwr@R}UI(4}>GFjw$35>PseH8(m?gyjqB*LfP zwB2Ov`y*V+c1^;UF5!Hw4kZJ+Ti{=V_N^%=7o7R3Uigv>QV>&xQ@B=K_Ttjl7wAQ8 zI=w(t9&yN4&N&a*tGscB)X*Hgp`GRvVgxZ9nCYI||8m}`dow}fW5wFuKomNcR z#a>j3X}eloeJ<^aXUwGZwn>M~e7ZZ;zJ}3`E5{-OP9w@Y|zb61J8$WVHk# zkyuc>jmmw1H1*jHw5Ya38b)if)f-c>*1-QV)GfoDBLh+zyiR*wdH?oErMa7=wyy(y zdrrPP7B56aswpbo&IVq0TBwjnsq*Tg7A4B1T9CfacsP}R>sK;NJwjsqr zqE`|&mb*<;^e$}Dm8Od?jQ@w~&#o_K^ydlvI$D1=lQL?5ti8H3A+cy0-kBt38h9Tb zPcKX`t-Yb_ zEm5W+u8CesT*l$_AsmmemSbr3T%CY#AXboppTm7T#Ipq3?iXyU=!%?D-uZ+^yzF>Z zHRj>2KZpOclI5bR1 zIHA&<>kXe~UDlu;xzupcdn;CXBX2^?)c2g23@58;l)wPl%s2n7@6+BhVS`Sy&Wz2Y zVp+C46=R+Cw+#PWPEFkvS4RGlxKfq8N6n_bV9I~_XwzG^sKOUxq2Pdpx%vpCBZK-l z_ETwtrDv}xzy7`Z!+py#Q?1%5&Lnl6hP+wtV#CfFu%WgL&qr)ZkxN(@u06~2e)LQ- z`@K4QzV(91Eo=Em=SG{7*_Y|;L6e!4+R2>m)aRd*nWswTlZ_(%WkTq~VQ^FS%%H4P zb$*Vb3SXt3T1nY;*vrh!SO14Faui3TXQE`tn^7QVlV@-=usDWi#JZB$j1sGEQf$T~ zyN*GPlABY%_RJ}<8Iu#Mrm4$M=ltw*Q|C`xd74!>#hN+A@@|TG|8083{Astod1qbq z(v35!tsUuSeFVd3A8K<$qs^@8mRaMFYq?51o+~paJigW6s6M(;6x->Sh@0_Tvo?jF zBPKt^8$LB|sD11ovY@{ustZd%sIod?A)o0*Vq^p0yiNTSA#CSES>b69c_SZhl*@PZ zpsSZ^U7Xl51CR`-Uu=N2PHI%%%j8@`rsMum$gcwrwSXN-={()$2Jg!^4DYs?oG$z# zem2p#lWhTWe|`)jpu)0>L+;6}Ln|iE=VaDWIhnOXj_u+3EV64>@jx9ybjm$W6c+W&5ZE`6jU45ag=qfV*aB>5^DM ziV7QiSe=^Rqwxn3q=*4#6+UYiUI}DgWtF&Pnu9Xv3m`6ElYQh-1{U~RRlfA@$@n$c zRqo;rC(QZ6Tcn*nvuR_}UH(I-e|lIt_NGzpXo#G$)$<@k2$I~W{u?4-;mZLbtA>N8 zA;oz$CjDT=9BsYUF%Lh8$ZlNpk4;>_3J4|eQUhm-^@6porg><(RjFZFZZ z+{H3Ag3)Ia(K|R_zOIA%ZCef-smr7l`lyp|7jgt|m0x`eK$=L-Gr>z>%1mC?Tc`Yn z2B-L=y7;Sf@x@NAUz3Tlydz2XZ@@)^l|R1PFp(ngd;x|BJU`E>6H+eCcM8vEb>Vz5 zn~ZGJ8Jep*g$7IOu3AcThG%q!pl!>sDfN%brRfr+4P$^rabi`GvXFf(9h+Ij6kWpY zx`YCIZoc}%YPT`@nK`R<&iSS>R#SIGWE$#RAX|iyXWr;l@|K8{Y%AjF5I8mdZD!!+uOOE^-j?NQ(I3p!ANaOPzBJB4NRgpmlbx?a zc2!vjX++)o7N8fcm*0@N^z}(-Uqg}g>EaldV|a(zW?EJL;r(szuSQf%QlO!>+x={< zi$j&$gWVlZvTA$6m$Z5s`QH*|ma=KuiYe{%6GA_5VEv?=qn^yb_l?D1_hk^J)uRsw z*&RWtz&uI{)iT#|!WJQ}}bzjWu`3&Wke1Q%mLQkW5bF3a>=J1!8y7IMi z%E+^X+n8;Mpv!hc_A)Cg+LgVGa{jw?_kk1PnXR1g(Y5iQ#m;B{QK+evIhgbjr!$Q2 zI=Vqy_d&6iit&IP3{^k)qB%3r_LS-K3%X1Slm0zGR{5I~%2`Cz`WO;!~R z-nHEB`K^#T^A`eoFP;iH^2%h%+A8|!*zDJ|avGKN#J^l~W2aV0cZo_`%9Kw0zF*9w zzNJ2UlxM240#g}Ppc;CoIcJcj2}9vD_Ies?*JX-ff|?rV%zE~#RR7!id-*hpO~YK~ zMSOSGR=jLs_<+ z&w93%Wks%tYD#?a5k6D@^$tg^Iwp}K;Aq)OTu6C1>t*F6Nu{KQ)J)qP0K<`yU8rNe z&Jow>?HoF(IV8u%_c#Y=3ru0ziASZvpxnqq6Q%R$9%f0BzTof}Nl670y?n2wJX@eIYHgR>+H zc~@6&l|k$b{dQ@A`Z;-Ww(7B)*pqfmw+h3w6=0^;O!d);I$V?ZaysLOofMzKeITDaXFH4j3p&i%f$`WLi`ot&D&V_n%# z=y3HRUW<-(c>~pG&v&kSIk0Y;#@HU2M?Vxc4|5e^PVlSeb8r{H1vb3O_fKoQ?fRa< z+kM0c-U=t-;O#)8gSQ_a6ugzw-GWpO-qv^0!pMFTA5vexGlj9jzu`ZK^P6cHn||b5 z5N+78Z-cR8GBI}Dd2%+fnTkh2+OK`yJ@id+x#=gqe|w#Sx;+MUNq1K2bg#izPId8i z!WF=G!A`PeSrh!{O@Jj1pR?}eh;Q9<5$~3)zU<4nWlsFySb3o)E{+qdIQ(0d^h~X! zv!r{&X_#)7Jm?SW7t|_=;X|MtA~@?!+gI;nKKo&sk?v&Gyn_`NgQK@uBgESEDfwlc zIV3NScFK$DxQ>NJ$AntyHOst)Z(G_J!;t#kXYd}ev%o33u}S?-3PjVp*k3w8tSCFr zd1-#5I)ixUeO`#8v=puWlQ_wB&P%aJpC_Vq-2BGaw|gY%4XkOcLs%ho$gA~i;DNo_ z)?d3`&CWSt**dT1^n-y1-pOjcAtzC~@0{(S2KCPr7n;xER=%)1q>-VPMY_R5#Dvri zOy@0IdTw_}4DAl7yO$9;8xgMjSD#Uj-8urAj(&h1<$~Ro=VFSzBRsoa$n?C=F{p#% z!e_G?vNx5=X`m@OWkTd)C#98L2>m5#h42OGg++e8B&Gaj2pK>4l`*i8tD=LG0vmn? zpaYM!ZM|SjFj3sm%wy}#^lI^rt=}?_{pR8MfsWj49`!%eZ`I~4Y##mQai2*mG>=~M znDmhTpv62MFpuZW!}}wXW*!fj$AEcEb{_B#G-;E5ly@%PvFVkfF~LFp{>WcGt=`7- zKl$tAZvyXodH#mKIDdcQ?=Aik{N<8%4u2Q&_fh`J_`8z7Pw`j7-z@&-^XJLR&hd`P zJ@d@5zEjQ|`ET5K|AbS|3jCmDsCtpmEJRi#(e4Z3G*w;w8INab zWH54-NVLLv;Do7^IGp^jWvb=eeWS{`wXai{Yy-(9Y#DYJ$eI69H4Pja^@NWYxX1|$q?i5a_f7~yaevV z`dbuilRdjfJ&ukBkN+fdohR;z<=W{^j@pG1^N>#_x$(Zt_@g((CP-Bajr`U0`BBJ= zGv8xKVcd&dH7QNgm89olTOwk4Rl$fW_UbI(tVioPdOk zFrm2|hr5E=X$ZAWVv_ufsbMC`7-TKtFKF4!J()(?qq@$fs^|ZYKWJ-(50`m-2T7#k z6$-X`K#y#d_#?8u*~qg#DNj>3oC?F7m?(llhV1RQ*I0aWYUF`;Yfv>#)Vm=J*!ig7 zIPa2c^;rA+aUN({^k1ctKCZ1P49(Ob+>czVk@n_0BGJK1N#J zUv9!o%JaicL|B}S7hhx zYQi!}!KHYt+q_e+Mt5|Fw-Iv|>sjlHMm&cZqWINU5{ZiAkvEnsO=&(2V$na-KBM%X zk!{0TST@hcA*Dm9B^{P)b*)#p>d(^Hsw{c@RBvvgmf_BXiT+a&JSwVO&ls3%9 zXgM~s(5_0vW@s%dB%!5HcCoW(YPbkI6D>uNB!7=7;ix-s|1u!oC!j)IfI%uVJgtYTS$g>Jh)1`_?n#<+xs-`GGpb3`vifxgLrl?7bU7U z7#eNI)Avm;6n5dA9UEcI65LTCG>d6 zPpRwvnxLuJ;ya^^LB~ojHeZP=)HE7wohl=>#9R8JJ5qnm*5j1Ep{UPipzQW;h~Zkm z``uWrH}MI)zF?2D8*Yb0hud?D6UB%E*MF=tZC;(~tewmcw4T6M)5 zW9Af->xzoK@_7^YZ;LRj<4)(xy_sL4-s$ff7n=*yqd&$}>Jzf=?uVzwrF|oxvmV0~ zQREpTmgK&iSYvSpsLTrdn`N2~XJ|ly4_E=6xk{6!%es2Auks+e-+K13uJa=wv8skD zx>j5)mNwp7FN&VHXw^klPlI|rpy{_J(BJII@~E%M&%epfUGlSmpCmoh`=5U6MXU#X zndXJ3X!F8xH$JCL3dPiLylZNhW?tyn7HTuVsbBO)&Ye1ytIC_n8om-o6aSUnq(>4jyS z)fK~dE4B0M=x3qF-$}V|$tVb>@@l>&n|N8Z~aa@k!Qmf0+$u0*={mzfNOa0mBLL!(*a}tJ6l{wD}dn|lr z`L1P~c(Xs<9IwvW!ZM%G`;FSTbrp7)<%udW+&Cw?rUGM)YSc3NCia{o+eE#{mO-`1 zX4jS_>Tleom5aOS&6^F4av6d51q97GKIO-IEZ7&XrU)vq7WYTv&C$c`Kn_G6OqA2o zvy&|yfGLsIL7bAjV-gkyorGVrYl5fiSVFWL6IURjSEAK}@V-D74j?c;h4zpMY}h~C*1?}hMn@J3)mfcU7yU$1i9(ou~h#? zoeZoMxBDxObE@=Q0czTQRCH~=%M0InnwV&YwKGqry}ypv>Psecu3E?zgbVxgzHF|PxBrW|N$4M(9{y^P}9VltxwR1;vQVFI8btK@M#2=X9Fb{7ZHfQ+Kc@K&N-rSjwC(1ED*+32L363zk6BW z<(YUlYb4v#(uWefHC$=r36@ka{a|6`} z>NW-|EB+c$LIDH;X+QEp19KOOHUzCe4Aj$nhO`_uNzc?|ca6O2XPOrPK4vAFatuaJ z#b5;W1GlRTWUA8~`qGe&-=nTa!oM-5i~X1?i6N;`4=me6M?Mdc(X{1Q_{zAMWK27n zhkoT`vrp&)mj*He)x$NKL`V-~5qxkL^!-@(GGG7ptCx@nuprPQeA_0L){(R-ZHLkw zZ?V`de@+amN{>72^X&}!TdZrRmkt7yF_wR9%r_mdz(xOMsS6gqM|czq<4nuqaMH3k z>jPRAZ>QakWwFn(EdKmeBM_AO;0M-bz<(6-B1&U9mcu0hIp|gop2O)IXAIOA*)kHT zeNfg>vta_;muF=qI1SRtR$$QTY0XMt{%7rL9p|vr*1V#`b1)0C34h-#Cfi<>cQ@N# znZQkM+a(dqwD+<1ZSM!NKSl}nq3nUQP-qyff&bf;Vvu@OWnOW+q)G3 z3I;?(<#P3;)*A{BG7J^;(HJ={)32K0UG#M9zw0FUT$$d#ldhLe|MbOJqjiM)qO>El*Ba_RsLq0gF*2Gj2x$%;=Gw%rq- zu65nJk2VKnL_vmFv;!#w12(NHbdKb$T*NwqF-77}x- zUZSkp!WcLF)E3F6Z*578i*9Ns#p)(us~f8;vuY=^1&i7~hJ|YFv{>CVtF|&$S83H& z$LgxB+WJ^sy;VCaRyWJS&sQz2#Wi2Bme$r?pTWP$vZxK`4L$f>s{PUa{LxI7Ig!v> z3D2rZ?-iA+KVDlYz_sUumc`i@U^Bgz<*Z)fv=WwBsHXZ=qvW~S!Krv{i)2t-DVd0` zze~dWi?82g0)*~KhVDy-zLgAZc0%lSupElZp!E+CW#9b>zuoJ%NV578$ZC#B-2J>n zvw^E>X$I>(;W5GiV{X%^{t44OI&yyqBcbtQuH`p!4Hvw^y{!=g4Q|9VzWUjB^z8md z1qu?m(Q?`iS>BgH%=49`#DkNqS1@NGW z3~be8f}oznXvFKTnnh5UMIP77qr2(`f?)~9t5%zsHJ*5T67||$)a!27s26X4KyvXf z-Y%#m|GL|MB9D0clk(tSyuDLDC26OL5KJ?nLr$o>{S_0@??lA4J3x8qZa-?0yrPNV zU%cJtgu2`P5{kEDXr=$fwO2q1cDG~LBuU15sf5Jek^Jj!7h?({W+lHu$D;prw_j_L zKvn%O-rkZ-y4fVHNhYEAbiP_=l8|DZukK4Geaj^MB$>1&ne>QB+L=s3kL47&$0WUy zOzKT0y=Ib*CX)t}Nkb;d4?@Ymcze(Zb+_kBDBfP2Oe#qxO)^R1c}D)l+bfevV%k8& zwaKLBWYQv&baOIkc`_+%lGY`YHaa1ztGoR!llZM<;$|n*-Tr_{dL)^&HJS9JN!sH? zxGXw~l@>3ZZuQu;`SDy4zC+A;c{2aZ!*3oz>6`lIzp||*<7Tff%`v*CHp>1MTCk=5 z*ta(kHa?x|+ z%-#`7JYvh2nCrFNMP%!^ka~IFUya4K*af;fbq8;PuI-KPEUMVI<|)f`Np~i#J)!yP zXJivfHmWhrNGPB>GN#yN0Ue!5;R@aJ&A3zjC z?GdV|k+k}Mvpv0kcYEIFyp*V?ZaqV5uSRrn6d8J=m5bm!yzkw)Bcd231CQGGK7XSc zucSQpBTA4V6R4$pr`L@?o730v&%gPP=`&lnBLqY6P#n&bo+Id{xyKIb%{bL=p! z(HXWj0;Uf%KU6oIjIG&Abz38bf0_YRL1aT~{e6sv!?MwbOGnIRoq;?;jpf0=`1;NI z36g29IMtz1KEKP!IvU#ytF6wa6|m*%4-3%ikKonfS=Ylwx~q-b-%Y9UI*EUU82T-w z7=^rzO6xXjJR3*sgrW@XyNQdmtO4uH(zi-q>UuZ3>#x~t%~TvA=c>Zeu291~^;tF} z5mq6crQ@x!YzA{)t8X&r`AWC5)mt&Js)~(idvd$gZSr49ehyb4kIHq^2;PmVTDy(J z0M$E!`f8esM(>o+Jh7Lb3>4YX-KY1(xxfArj|Z>VyV6AZro@$6nD6@$8=vaoOJ%ji z>BOgQM{qUc|Ja9w$0b&|z+)g%o>Cm>reCQl6i6`^gg$B0tsZmZ`CjhEp6e|QXj=eG zFfawE@#&=W+pyW+pIYNvb+t8CHt!qNH@Ono0TlPs^8%nvdF8MvjmG02D3if(6a>iu`Qx9oPT;T@CR$^`^vja1sFzk; zsT)BxbiGu%rmy|puKR`bHMyK&O15-ZvbutuEUensJqz(lTxsodCWKMJoI=fq|AQ16 zy~2+>qu0jq6f=L#UdstBY0vd)VfzdtY-=g|Z27Xb@QEVk(f_-sU3wg0+eXTE{IlQb z&$TPFHr6LZnf$iMG?@lbA80*r$VXgDeCo#YAU1P~RNlP5>NAz`T$#e0ten!Q4$amx z8Ax-#``NJ8W#o4xO}92*qiP-b8T}DuuupdXD@CP>Z3;SMj`!&; zMr$8wjp}uPZFLJQhHV$ie6zAzWvVAa!Awx;Rf}}e)P1LmrSR~>H)gy^r>5pl1xRZkISb5BAzyL7ufyT75;8{#a>PC8+7$GtsN?}=CUz`?_}b2VgLu%gZvsfime z6n)dAs8(;dxW!ZC@yvHcc0B~2Y4ut=O6v++#2g{i*yq!M%sf}h#pdCH(p81@Fy~0= zz(tXPSnXhJ$xxy$zwaEYMnyZv;uo^UmywWNehg><2N7Nzh>b8_b9SDG4Y(dpy+M;( zCPRu{XGRV)-WlULJRN;oLux$R`+Km=K8bu1vnT6=T|wEE>6k>AyW{W?9iZLu4n>H7 zr@P~jgxI`shW6NwtnfT&V8;OQEvtWiO0dNPCWO>?cE~}YVB1rY;E8z4clDiV+wx*J zaJ^o&Cwaf#Zq8v!e2BY?c&JA{21R@Miw&GKHwlSVQ(D?mC0FZ`^V3V_UL&XEJF}{| z*YZT^@IseT=gY)3&D1T1o4UD$Fo)!ZGOBk<(?f$+PJ zNU6Djbw36NqfhAx6+W#stHp=3?O^^B#k%Qyvk6U?4HZ}XFb`%$>NEX3z_hZGxXY$=l78e(Cl!%F>mVIR&Xs9=j*!J}LJH)n_`tf&K*y9|bsgUy9n1=>7m|n;CHn5Wfel9pPkmHMS`ol5$&j)yVi47L zLC3Mk1(}sRnqG-M?KsWNpg-i4w{C@g>Gt}@nZ`MJVi})%b3NQzANcb1@PBS0y7kz( zI{jb}grKW$TxXOr15Q3@IEaJ+o~0{dt2fvn3uBtmQ3kst>y$qCckEL}fs^lPX%R5? zo|lvd?n-C8B(&2aEx<1*c_7tFU zhy6I!VaEy$0~)=f-V;7moz1O?uu&#X{cW=_kItLswp@Ae=`SVurBVG6Vf`hhcY$>; z3bL#%Vtb4Bj&nLsnl;DWKb8A}I>==;`q5QY9Eem{TmW3yqpjr58MX_NLq<=0hGBPb zHd-63sP#oob5vh_r`U!2?de&uTJie<4`1)t@8Qh)nnC!m9BcXz*1Ty73ZtEapVqY=KX6e`tEa*2ePt{YL$b-O z8ANkN`(&7$(L5~=IQ@0^Ck1}rEdC(yGyQd^h8_WdSEA*3s=w|1lUZF;{9@X9ll$vg zKEUdZPl5IkHD$XP}3kC*D?(qc}V@~T1_uo20->Sx+t;}j!tQ+!}h+KNc3fwcUnCpLz)xc7m%qJC`tn_ZN@lfSMC>AbnfAHGd~!Q zOH=d({2LAZ-m;&5o>DP-Pot_%n-UY(Nn^PoMeE%(GS>8mxUXHXvA<&dR=xxw>-`n= zLF{`fgVyq)K0h1qELvlp_5cP-5?Yf!*+*FR=nZm%KmV9&Z+m|mAC5X@-V&-G=n$r} zZEdY5a;abhgFi{QtY&`H=kE}hZ>+6VH=vPV9I=x3%GSB$x2}>gu+Ei*DzFZO@w9|! zWGj2?v$EnHVZdG1&WXp4)r2bBB(#Rmeu=ATEBdlLHg3^xclAng&8Et=^0>!5?rXb4 z-o9lXn|t-!1LpBir_TA4f!ig^mgTyXM>gqFwhrjGCquf1ou-B!Q^TG%{oVdv{dj(h zF7r^4e!LRYpZA9J+iRu0onrd0 zKVisGf2A<_`Oz5J+e+%EGepM_n0 zL3unIwHX3;T%=U5X2~`>R}?XZ6=7R_OV$$cN5XtqpTe)v*V`A{Zlm%uMky976>m%7 zx%O?Lw5ejPSZ>ayLa1lntR5_qlc@uNd(k-zfm!L8KRSDHdFO~8$b^vgf|AY(v=&s) zSbkFa9Fg%8p_0s0z5Y1g-f;d&<$w9sS;B^x66s|ac)dS=l4MF;jtq{W{AJcCxBt(D z|AB3eUExWXQDWqW_Q^Vg%Y!R~v#9Y`Odkx?O&<)+o3Flf6BLXc3E?^BNyfsyJieR2 zcNmH}UsCFD=3x}34U2W!ukALai|WD)1q3YM+LYa0uMB)L`k#>wzNi$wMEh5#7PDcS zvsm`B8!NVvi#fF~#DW_++u}8w1p^3fir4f=P|gfLBtKi_r_=FP(Ot7Yxsh=!Jk73Y zLvQ;eOM@7$-+m=uBelFz5?#aw0pdNoU>3^`zjoB)=N%51$+!5pJ{V z1Q>rm7_Km2c=VV7gWP`!7>Wc88UPm;YODqTm#Qx(!xsVo&P<>lEq1$}FI~r2S-KwQ z@SAk~89B!?YS*trIF_!boh;MnBKQQw5cj(;ihrTl;vtB@xmI`ibAg}5j~}n-4&2+d zj$_HVDCpECiUpp)&yI5%^LAg8x&u2bj<_K%;3T|qUXwJipzosSZ3qi_Sh6QRxrys* z6BC86>hrgHI52ms?i1Ksh~ES25JSiSavWaPGi#8#CsrI;nOAzm_EzAcD5Qq;AzQZ0 z9l50-xl{Rfwm(0u{m)?P)kN#Z(Ryine&2bz?XY4QP4}tKoGrt`Sx4ON=w?fs#Y4qt zZLS~I=3)58jI(PtGSymF(?jb;RX~3GHgETgEYCJXIFB9KD3|E?>|eC;)|9xSC1>f_ zpgQn6Nm1Dz46)VO;yaDFr*xcXJBahOd~XeLKhkkBF^TiH{8ZxZ)p5NhF4&TN8*%N# zMR(TQ(LocP-;yg?TXohTO3TF(_jBT+JIkV1d%~wJUD7>cP1csI?wl;gtX9Wx@2bGqi8A8{K2;0w$6*EL3XW)0LPcxgw1nD36vEbFVb-AhY#<-6K+dWg3Qha#pK?r;o;L%i6d zF2K{VIN|rl#&YTjhyFE_ZSR*u^VDg(kvmq&aSCV2lnr`Lpte5CtdSjhF&wTbmMydz z>{N>|y$_L-l>p~X#)R@Uc2aI;0e5xC5zb)ss}ootV@in?C2G1!6|M;-o?MLmBqpzT zFnNd(i8XQRKBRh3*JJ!D>q&rO_5l>)=Y{uVH#WShz5E~uC<8! zi4O^UGmq#B9W8Uokl`opPKQ_isLZ{X@J8=|zhC#H@b`DjMm;HE5(b48wbt zbz<2jips_AYj{!eNlX{u47OFb+$s}i%*(Yi<}m4=idD-4>%K$4%C(oUS=MjmU|otk z)iCxOYCgNOAvJ3kJ{(cvHZn1Y~)v(Y5(h1dB>KRhpOYam$jis;vetiw=|ckq?%J&xqMGG zOD!AZ195Ar*ody>V2YAzU>|xz>TA?uZ+M6d@eO;~IJ3JxU>hy^nL90xeAL7c;So2KY($k9bF-9bm(OB%p1 z|J(aFQ*4rH9D@4D`PNuRizq`LUCyr>^9oyght%CKA>eh~Mhrf;#_8<_^^M=tx-9h- zZJ;6zKEtjL#q1l%#K@eEf>FE^_Kk~oNR+hSs$E|Gaub5(x5LEX&!CLCzV1?%7tRxN zSbs^dD%Np5Niq9oDJ2m(H))t%Bn*XK6ohlZ^91Fw_-(s~tp#falm?e?cE=h%Ye=k^ zl6X{#Y57)a-{F-Xi1{O>m`vQN^U`!$B*r-$#jlv@i!`)6skbwv3}-jwha*0EP(J#$ zfCeQ-8*6rBqC+}kX`nR$g{wu3!P%Uzuc9?;tJGM!J%q=LP;2gd^CiwCF8u>_9HP1= zb!49CtK>k|7W&hdo0xbMuvu4F8U__BnB3x`#nLb{k*%`h-Ow^%n#;^@X#*M|HTWQw zPr4!c7;`w!wnad}0?2961UgRytCQ3L(|W3dV}Mq$*wRC_l(vX1fS^>{Q!?nD@EA3o z;T9fphxYlk{Sw2MCzY6HJ=v35PulxM-cDlIK!*A3Td?6WipR+!>V?3%KNCVmiPvl< zfc<`(md!%89i+ipL^HBWk0curPAG^L;W!kr-xGUEtc2CNJ*?id+Z<}H{^by$t3hKV zmc){uljc70hIDhk7}nah#5W)whYUw=SB-7OA>SaYRs+6orE+|hHL7m|1@<~(Pl*+A znz}(6FJu|y?~wY@UJf!^A=%d071!SQvYqS#PSYK=?*)oYpR8sh=5shLcI7++&-^uM z@*T5t6ov*iaF!>$KMX{U%oOa!lT`q( z4_v++3tM$wlj_msyGOy6Vj{-jFO*Z#3RA^za@;B?9}B_Of;4VMw3bYj3plHPGEYP@ znm&WqN6V_l1zQHhO;XKKPVnHWCtfosmg4HE1#T_L?udL#eR^X5Z&Z2B@G5nE|Lgvd z*tmI5|42XRd=LLftj}fX^WmiaiuCzGHd6+pI3r5DyOJZYeIK!wyn=v z{1<$DUw>GC5S)_Bp8h_6SZ}i|P%Z5Rzd|1fzfSHCs}BNdjqrz+MeND^VXdJ0zr!Ea zQ%Dpn>q&nesBTB~hc$)?HOwE@+e9Haz`u<2hjmcWPUa75q&dO+xWlT4zG_kNl@N2{ z1G&RmAPsnLcUYG{lSuqeyTke&WsY!%^&_@J|EJtxIr_>bp$t>3-^=A2dvma_jB~-0 zb?|gNuS9%^IHz(2b;V%h#frBhzro)7U`kFg__;hCKZ{1=2Ov0dYt(C0gi9va7zDng z%&7O-xED~d-WF>@_Iw&4dtM0HAqd$aO~^hnHw!C) z?6@_08wZ=R@em~koJy@T z`aTLq{wcOLs3T6ba+k`wrElNE-4F)UpW$7*9y*9@IT31?v!fw|nM}_1kU9W$K}V*S zx3$4r1Dt~LPBCBUPrBvR@wnkI~Q6vkJW#CAKe_a|e4C6{*0_8;Fb z5WEj)H8~)Rx*)V25T30;c#Q2A@&m$u$pGEkqk@k0JPA6&0y;4*YRK6>Kcv3N^gb!n zTK`SskOntm&JZ6R%?d) zEb9!oES$c0vpwqh9q+i_Q5gAysf1soCur>Yt^=Cl#7eYJP3lE`X^sHrrqS`s#gO;L zFQnoo+dCdj@M`GLNkJrdnFb;kv34NR8Wh_mAq}>FC6oay126cEucqkvXv7?Er8!y~ znIpy}cFTi$ouGrFeQc*u%!vFvib%x1v1Kdy;CCV55HM z+h~i7*(DeJ6ISv6H-CXCcY%&?tUn?CkLYWSZ*=#8dj6R9zje~vlvC~wbBwz~YzxbK z9FK={3b-rzBJNb)owLg-ywlFVv*LFgQ`?I-NiI7+rJ@T#RbNKRwO@U&S%HdrWE5YZ z1_~h_3AIN^sc^EqYo)wFDUPjjZQf_)iFar@Omn(0k6;U8#J)!L4HS*~ER9A; zw>|mq@%==$X!UNhE~8O3r^yVPyA*s9Gty?yNUH@9TzmJFl=_Ku=e6x}7ls|}0 z$!#I!vsbK@O0tzCj6;_CtW#Z&`uOh?iQ)TKiAa(D#5lNeKAD{SWE=)VsZUJ%&u~)> zoSd4}zTc&1)pJO3tHHNBZtr1dwIiz>oy z3F?}RFUZe)CBuBtg>ikzp}@~>$Mr0}ge#i_1a}5eKHKH{AI!9!gP>pJ{S-SM% z=0YS{Ue0@#cfJhSvw#6NV~wiLEpg6>5-HD&|3R8J4BxM3oYV1LY>i!f-||ih-|r14 z!%2L7Ma>q}%r}$*w4@dT!GE1O80Q>ddr10IREeF!zM|!uD zj)Ab?wBVrn_utA$^S#lKCXx9YZeF!q=SY%jx4o3N(#?~JpNZkv=GaFKpD$OspQ~RD z|3do1eYdIg6aPJN{A412pln7F}~0ch%j)RU@zQg(yq0ff=_=c5e>fE#J?&Y>H@mtg52u z6i@i$RzsQGy12Hu9u>%^i*UG$5qFl(kCFVwY>ZVN>*T(+K+W#HYq%%|big$}{^@iU zC*d+wN!-UxGpon>a}Gp%ywNXB@kDYY(0gWVy1!$3FtTRrSEHg>LaQ`eIc=lKtGzkz z(v5ShCja;Y+|aXKKDuKHgBz%UbAEi!JEHKC_B-cB@PWHm4UA_WA(xJf83w7$YcP#) zisU1Ms|K;CNJ9a}XSl!BJGr|u>2LL^7iDe~y67kKgVjf0hJy?1kXK9wJOhC)+=pw+ zaMBw@AmIke#wJ+uY1R>YPS%~dwT!@t(zn9coZ7Xx_{>t-zjldQbGOX3C#0lq?g-{` zAMb`dE;653eoPm?t$M#dNF7k>wNIV(Q47(4Z-)trX+i4_*=)^2xHobqkP}@ zv1AkOK)+?^>TiBIY7=lx?xVVpnn-O@RfV;K%F+z}=r6KYs+xGNv{4#s*dV=$f$;=f zsMegtvm{;Tf5Pb&pi6G|348^7n2ngLzn$xT(;Nh#M(gHyC9o}S%ml8izIUC%7W8~B z0sdz!QE2fJESu8rt1$kHtgeyX&ZJ!2n5CNH(gzvu1C17!C`4Z!vIe5PIpe#cuMfqt zqg~12&*B&}Zh7gq4`24^Ur*x(S9SgY7ry`fD)CVO?(oxaL- zyFiY(wRb7p{1a$kbym!{_wxR*`|h@oiJ!VZYnnU+w@O z1{{?96eu|dlx$7RN7EepRD;|Tpr#{9v(bhrftX}w30MYfuBX2&0}j{E0}f{<%l-2n zoJw+_M{6QdSflY}@ep?`>HEt@-VFAeeQwKsObL=HXM!M7EGJo-nbg1+dVALGN&bJ7 z`&pgKS#|Z+DY9z5IutvV(bUbD?SJBOAlo5^%D@RBWI$$Spyq(Jcb+N~(50IIYTseW z?M02ha^S~$5yo(l)y*LQXMCHiiqh@TH-%!oNnE2>vsPRdkFFM&||9En;|9kRt)g_aCTZ-P)c{ljR zV_|e93S3Gv~gtc#*iAJV18w?d_Y=;`P@sBD*cz_O^zF%V9LX>o>kT zK0~=axADzIx05`$8yZB>F@Wm>=O4TUhfQL-v{-|tjOo`Lv6zlL;3E&CA&wqh-^G?@ zM_)NSEGhXg<6aFj6roM!*bYz)7V@~218ppPhvl9UoH7T_=uL?yW{bc6hWI4qOs|5z znmG6boTyBVk+;wUa1SFv^Lum*No5UI@KVl1`zBQr=naq0G&<8t92+sYUSvE(xvG}y z8TW3vH;S;xg|LVhxhyPpMN<48 z*7ur_1hFVTHonk>$unIBopZy&y(RRB($dtClo-tY2uH;KLz|GA(tF(C&hpWS4uWdb zT+w@*LhfNSoym=4I0zY1O=}X`7;CSzi}IlHndJ!Ry&7`gho*=D5M!N-^qY7f4EzcMVNl&f1K~O( z%mX165;m&Q3PxZ+#hWVF4?x6XL`V!4TwT?v#fYomGUa}Z{pHFKHR&-! zC-aD?qH_2rK`LnU1p&9Q8u|)44;fC>{*(PhX@VQ|-ZCYFgjFJp^9+{)OO_Q3@y+Yo zt%oq2W`dfmQ%kP}=|K}+=TYWi9)fNHw;JAmr*Q-O%uNL?Ym&)85B#&2Kd!Db!OP4q zcH$kF92|RMw)zoJNuGLyCajO=;m5*l172&UzsC z=w!b$=X7n^mimlU&gYB_#;oMFF@qE)>elg`8QRrqtlOE>`#}A zpMCfVDGsp#@e|m_5F?Q)cBD<%x?eS3F~X^a&s@c8eh5DthrAwsi35$?ql<|VBt2+r z9&izG7|@4Ow1hY6Z+bVp_dFaSA~c}4ZXO(C|0;HlO(jvM7%)qOAhN=s3tA5ja&QQx zhkbDQ5tWZ71Q%ebWdW&*$z?}`2eN(qGTJ_>yWhen6`4@rI#$?)oOj~Nmn>FV$5=Mw zu!-)N1~Ec8>HeTY25y72tAjHAJPa5Jx4i4-Tl_mSF|}m z{!@n+!KQ$WPd{SPZ$1gBYCVFm(}I6BJ1q#I3}mN;LZSqovejCSC9iS9qbebG2CV#z zgkzjr8NS`0fh4H4ibpWdiBy-?pZ}Njg%QrO8Czw#(Eah1ws8Yhn)Uyo(%u?--AbEX zJ#eLc6ApO$Roe5z2dFfC?*C1t`F{OnD(y#?Kc~`Oe{bMQ`#Lm-xze^JX_fX*^)J+y zGS6z+j4RQ)&;$J|?dUqHw6y<+O1l%ra&{+JY6s|PJJ5{>>S_Cmuckk;S4-c~L z-*U)e-K^JaVn>EoV?N%Af5r3x?oUZZz{{!p$)O({rjpXxufL06|3$SNw`6ej`>#zIcSb=-(S@`#b~l+yBI5kQmUf;_+HGYFYn(jP}=obipqu z8=+pE6>j*ERtcx|<1nQlr}fjJlLsR;Xbefh1fsR8C3r-W7Jhu;V=ha;NHwYz5Cyv% z1sf#`hKZU^{1lB@HtUs*SXppAz7FZyzZh(4Hd2mo7yVN0S*!tfC0mP-`~BepU2@$| z+rSwS3O;z@I;_nr6H^DEi8mL+tYwn^|DdNHeMNF)(e>y-RsV64-rD*`#sSp)bBhE4a8KHG74@j$7N zsh~_hLCZ#ZT@Oxt0SUP?u@I#;!4dMC5aBM3s!Lt4uy7m}25`df1}RvW(5_B5NFa&q zy<%FGIt4p6?P_Ve*meeM`&g+=&HIR@Jkh{Bz53{IAz5 z$B4Lcgd3DB&!X7!4Cs#u<$#IS+z>Q>*WzS_6vuJ0wV@CD%;PtbEh5V{8ygrgc{jou z%Z;;n+IE8Wy`klRJz)1k*o?=X8eZ#NH+wgl_4opppoNS%2J2Uf3AIq{P}_pjDC*V3 z^?#t8j?spwR&Cc#Qf@@Ql70NcKOm9*&I#goXk>ZoqU9ZE{Nz3BJ5XfYM;xNHSRNAJ zp$cmugX=Wfdq32>&&CYY*BDa=laXIP5AV2NN&Ca5a$jvXu?Oy*bN%@?D>~zoe%hT(Wy1M~Z>1riBiXx1eDHz%Nb~I;MEc@yJFqb$eY+EO zh@rR01*zoc7v7h>f}8YM)Zol68D*ghp-TBUwpE0(>S|AIyhka{Ru^YOPL0oZrA+a{ z?cTBVJzY0o_tsD!DoOKJrRg@A$N~4=NhF)N3v0;@c;{7{X(&?+(aET+56lOvJ(2!f z-JOFzb)7B@tIq6$)mM9(SYC_^gvSventducw)fSx;$Ltw6+;sjiyteC$K_rMH=Hw; zACM-r^mjWO8$S3#M#Vef3E$b{xjet5;bn599$;#TXn+V}98 zQcEAp{y;0cYdeGakKrml_j?!;JxE{C%|x9$OJUON1s5$_)}ZxzHdt}r^827H_fqF5 zv^lB)X--r&7hG5l6{U$6(Wzwjvi=Gbpbp))XieihmE_n@BTa*_LtMI9uk$@e45I=T zW*~QioQ-1NGZ}h<^-#C+Z8RyxW?T&KBm)u1Fazy#RwS!m?V_xF&rxwv%RlrzcLbr( zbHsC1ZNtAvHCcS{Htm#Am5@Zow19rpT6z!eWATMeMOb1qX3~`CX+&0@BD&__;}kLU z$xlOAvZ8Fb4Tbd)eJk@(IE9GVp)-bSIsMDMVZKy7i-Z@CQ)gu>YYoLnJ5@Fg81VE$ zzZ_T6)x5^BXI*1R|8)r7TUeO<+xtkM#X#}BU3&N5Wc?^pOs|T9-qq%E(RKm)MzTFI zBVeCmtznj0*yuY*rSKi3g5z^ir5}XFSq>8PJuEAaQWc^93X?eR8RBQ{B}>f|`cl@; zLE^4*5>bcA`Vk*=#?%bI87|((GliQuSV|l9Xzk%^!2^$&&%VzB1O|-?)|xEex1r*c zK$A#Fgm3x2V7N@3_u#oUpApgih|}GH^tW*L{}L|TlgGmiW}JhLf7ntZK+O0`gXITj z5y-!357zjudw3;{Q8P(Qp)r4x3FAzY<@uv9{0jv~D6V{R733h9g~6^t<)W{bS%gC! z6zki|GsM+%PqH7z?lTJz6W3m8>aTF&)~ySGb|a*cKn%SG+rm7P8J5CJLaI| zPl#tRK*07941|MHO#obKPH3Qay(y`C;d@Xq*FU|RHl3X z_HPBym?(BYvBFuj4RtNLadt!T@Cr-`iM9N($;r{#7yyOju*0ohV>B8+PWSR4PeZ?p z^#5PbC>1Zbhd$X)a8JAug1eSPtkOzNU(AA_*0!UR2Wj6-<}D8$q+x(K382}$eD?3$ z|9RY%^Mk*C4*z0SEd3c+k1Qh$Bp~+vLt`MJ2m@CFgc&&hZzz?682IZhFp%Pf8JN!> zo17e-8Au_GfwZ9%Wnd+Ym4JbVej8?B+Rwq2YsS74KkCQAPe#z#M=aFVsI-4etMHe2 z!z$Ui2Vs&M+A{qWSUf|6K-W+Fs!q50VdX)JCn=N)nFFwyW_Ll%?rb>fiLOlKj2`@6 z*!jD+BS$>cUs!p>Z7qlFu_~{rkLnu|rm_yks}NMDNTjXRhmEM7R11d|e75>V%zLK5 zfU9}rY_WD!L{o{*^DjY-v}Nq!5(lC{%V(rRR3Jjj^jw_3Nqr{inL0v`obOuk;jPeQ z^R~c78nkBWQ>MZ$TQc>w3ta|GD$Feju>TR(r?Ht!piIs4=ZL1dcpb{3EdI=qQ&*I) zO#FB>7!kydDqKHe%?e49LfQ;L>=MLmB{D&XPx>ji$~Im(Ns3_5A<=oNQg!Y-%amNq z_Z?O^_lCl&smtP7n+l5;1s_?aw!(Qb$8w!rL{H%h)fV~i24#4G!@An2wBklZBEF>L zT%^Vd%~4;8AxXE z%FFZTYde>^hLqiQ_zSrO{`9%bkrNy)cN>7T_)L)XHBoG>L;Z87~K%kB~k&?th4PptN@%>S}+;GyP|^o-S?wqlw*ri#VX`w zhj@t=$vAc~`AjWEhHFi%;)F#lHH%&&Sc)%7tOb_U!#N4q9qW1#Gee!I7)}aKRKZQ; zW%Sw^L{t}%ItzS$#~LP&~ZHdK8Kdr9Df1FeatbeI!Ukb{(>OOszwUy9rk2p`Ges&J449^e$d& z(vRqd=`NoU+cvWbdCJuNAM|k%4e=t#VJE_H2D+4^zfF&R=s_4ylf)3DjcSGI;~Ap(rSpk01d@p`W1Kp ziunI|8D^7an#8By$9AMG&0@vkT%Jg`1nhZ~zGbLAE2e*I)BJeh6Olj1W9YwD`jANg zhgMyo9MV)4NjG9teMoGqmFIca%8_s*CM{G5sN2iEC$aKEU$9eOz{TwlU9#9{n&lou zXz`-Z5?o%C_9;WoFF3zO<2)c6CmOQ&%HO~P`#6n2Qu|3QQfFq6by87Ui<>ugI+O#$ z$6*(ORtq}#`m|>d%lpyYf~x8NEL@Pd{@54GuL1P)u81C(@YC8Iw;`Qa1u|vR6hFq` zuFi6bU!2FISw-T<{97nyQAvvP)LD7`*!>?P!0yUCF{Fn1jou@^&fgfseEi1H+<%W$ zc~u+Tr{Y#BO|4*9SI=Xoh5Z|0QpM19$(N!WZpKK?FNa}j!!wTr?TPCHT&+6Xd_0^U znY}mhBSj{ABQ{p}(}$3x47xs+X_go`<8;gDBAt>@pvQzJMR|lDx<1s%OW>&C@i3<* zMxH=9R@*+rDMimxsGXzcE|4KEt;(^li(9c%RePpGEe*mSI4ZlF&skx1OF8Zk#n9it z5@03zG-)ux78is93?`~G^TfAs;!a=9c@KPao6%NpiD{~E^%~PuX*~@C-SNw32!a?b zYRCiFLG$(+D(?=Bsa^77l6C*Si!jf3%l;$uGjjiF`We3eJpGvW_s~z$egnoL9#hn^ z@Lem+p~rqiBHgZs9Ry3+>~i6-@IoQ+v$5|erD<>qQ>NbO2L9f`Uu=_?@-2IFq&^1FUlEtF5WvbF zY{dHi->}TNSWL7(5}Mba-~81 zWSD%2GT=g_JrDQx@lTN{V9#e--t4%xSdl7_{C_UmAF8|0qqNce^w<+gupEv)X#Z`4 z6*`MY5TYDH>6sYhPy_S|`+v$2_StP2imlur9y!F{aYX?7)Yu3A!Cx?eBt75#I%G4p z75nKF1^zbOaD5z z&}S}$9C!tLgS8n5i%Wv^z$i612f@Dzhaq|bHA(ceWM+z0dsbplr}X-2QZqRkks_l} zs6v5850i)1q)zETG;<^xXrrCLXzb~rB_{TEEw(HPyf`o=urCcAA}-u|q#meUf&`Ha z-1{xnLe7=wT`*!ud_pG4c!^^pBHJO<_eu8;Ck-{>z&aU#S}P)`Dv|9FErXzihv^xn zBqo}o;jn|PQ`UClH69L%D6>-Z&~x;ycw!@|*b!I7f1DuxQ4j<`l}qQ4>}HMCH(#X6 z?I*N&gJbDw@B`v2YX1MYXJQ33b+O9zA{8v8CuX7PIO|bDsNlY#Jowg5OqW8h*ZTK6 zPA6HNyYK=I%a-e&*^9mwdPBY{dJV5yBd_+wyxL2zIwG%Vj;Vdsl0-S{_v?@@l3e@@ z4e`;72XW(XceFoTGc@$yP;qSKG0x#nHaW z(M*kV>3lyrQ_v=Uar9)?M&#oc(la+o&m<=SF*!^Rp^!U!e=AC^btUmL9LGC%f(@>`?>fazr@4H2mRf~V_ajhQi2pW}o-MyiUmW{k z5b6%ZLdy%Khv#6!8{S~3!8VSr?V9adxaab_-sYqhThF~s? zBIlL3dFtJ))*fqIV7Yn8(VzJ(y@DzOJ+;zA^UI1`|2loskg2CD)5M&sC>|<}c2D zWs$f;%OE1FDIn!_MYKI!=f1r1ruRh1Q-F@vh|<$!L=460@@#BBoYtxyGolh~1sRl= z<=%Oqi0V=&-XtBk4c&BEE#w-lw8#bK4RV1gVRU`TDc>24rc5IFdMR&`DIfgSxpYlwU|JB`D5c`n^ABt zq!west5O0Y2~^`LRW8v(is{Q4N`QovV=zAL zFnKm&)q$H+a(OTk8>B{FD2(OxfQDR`;0_qeUfL7U+}m`8B#Qn91yP>d8ui%yIh&lSJ1TDF}Brv#jxrT@0Hssrz@?q#p`RB z+c<=lE5S6Z1o06*BfFaUb0DCQqF!`DszI^`{QkgUG@jkxI= zwM!mMN4z2hTbwx1vi@w6}b?>Dg9Yy*L1KFM*)e-B%kdx zoodj+S=*aRY@eY8u5%tNphGdpsga}4`1P;YZTfi~|BOKxv>hH^YG zMQ*;qCIkNSuEpk?L4m7TrD=Hxdk;`lqubl-SA!cb3pb)b6HDvDG~2sZDQ%B!+B0O+ zw#lYFiJJC!YT8#<%Pp8SwAv!6040RlJMbGbF^II$)yI$xT~eyUwJv6%bp%IYX^(8H7O%6;r2R;?kdOo(aS`Kh6>kt1H9i1aPSQIB~9EB{VZP zWLn`%6X$5^ymn*AX7u?!9VQog|JS?7e#1nk3<; z80~Y!>8s{ zxuhDK)uGVyL{2Du7iiN+yAv-|JEklkWH7$x{d>L8X@kZg$KWJQb40IEIaA9 ztla6M8O8;1j+gg_<)4MpPxB%#eGh&b>X1H}U%CmDtSQte`#TZBGPK{PQM zLvt%-<^l`?NxmsLIP0`mgzQUv_62NZWxRcf<@qy~nNVdW8Ba}E+nLpCoAo=rH-KkI7L%uR&Vj3NY3dm(#5t4yGED*oXaAdZ?13T*M<=v-gmFt}6c zxbgO57jPP0E`CD#W`m_N zhqBHDp+8NkXc&|$81v_umG7AfUbED0MmF3WRvVyF0d+oDfk+r%VQ?q;stjF&$KMPs zgGuOl&|FOzpW(iZ;-U$k=;E_eZWn{MM$aptx%Qp%1Q&YshwAJ6I=p~V?4Kd9C(hNSS z4FRPP=xsDSYHpZjuAhoKzEdSCkyk&sYOWw6w|hhU^Xc{Z8#K6j7L-HQ`j zOD(PJl_3RJphYs1wMg7IutLYNvKDCCh<9j>JJW=OiM^Iu$bBpbpnRdnu^An*nDwp| zTELyI=x1vhA+Q235=fb0rm4YhuAgE?YI?*&Y04;ys71nErL0Ag9-HASlp*Sj^FxX< z4|k=O>30zq#X{?V5maSEFBDcRwRe$l*brS`BX*AmgtBrS^y)tG9;#CP}R^1W<~)zp8!SC_KN+0FF3#WHT3Y5pvb}9 zTCaADv9Ai8o*C|^kfnnm$g!-#M92YU)1bKRXx!i$qd%c-QMm6{Qu!RjW|AimM_m>i zFQENthY$;!14SlOs4jvRcB)WM42u^2MSlyY_h8(y#<1|QMsnoy*u#tq@-Smz^TN(I zW79->Vf&KUYGlKcvbZQp<(I|z;yo<47gNemGD94?8xV~hO7H$9-KFXsU!1unF;twT z%%jiel);;z7!*n47qn!bm6dyGFigc@Ip!>yYSGOuBR%MOJ>n0vSc0Y9j|R`0uHfQU zA55&+dX$&P9`nsA8r4E>0nraGj;$<${b*a?sKwKL^Lndoy`GwzbzV41vh@_SC%3=_*SczQr>lDvPfzn$IkVX))kmb$7NtX2+`!x+<{l2Oi~N z28m15gK<`F&!UFsei+9P7=iGP+$hS+63UaLUg?{e?JFB6o&tv~*{MrVQOhi8{$-X$ zt(KuPbDWvTL1h(BTEtdfp%!8e@B?}ksHLk4Mr5%(ae0EATjwD6#~sTPSbLh;(r05!y3PUkUQHMky0IkA&!3 z@B{sSsxPuX(BEE4jDE2+Z$c_L5J8sB3sI2%wj4ek-`@bo!-#dQ)f9N0>}NH_VA*WO z!$UN>i!#hO$)E$>Uf8XdMpGIwgT;NpV41X}A`VX+*s{Z4ldiGsaA%vOD$a(=st@t- z|G^i&^p_c0spX0+Jl;R?zu$UuoTBhcUBxC?JsnAX=W|Y+qJJl=|yOQFgE8h?6$fs zbco5RhSCf1TmrJ|)($mqG)mY5!mfXgMxxd(KbJmSD$Kxj3TOyAa7Xff5CS_OST{}3 zG7>-jDV^vW1|N2%FXn}YcDnL14h5+3FOHnI?AM+kMQkslTw0=qD6>p-RIYzKzgdhf zrKRK5z5?~Qt%_@Ci^NLpQIvi-$Dlw23XW>a(?^kox?57=b$yYD9hfH)2y*KRz(^ufO~-s05_-VMD58dLDdj7M+* zMuh~HI$!cB+>^!hd**LuT>Ue#Y`&+VGy`KI-B+;wnFuFqcn(Q+tpJZe9C}oNM{C$VCVAKXysUDWSgwDW4=xHh#nQe9aN#ib zmHA?y7DxQ;P*}5;O-a}#cCPpYTTy(I0=|R%q4aj*Jb4FS>fGBm$a)C-lKygePau>|N7k5LPQuX& z2BqjAH9OQsSKw&0!+zc9Z>cn9ElpJE_NOnEc%i6t`O}w5tb*&t5@PHn*GQFfb~sy+ zmH62e2nSAt4h~S2{@P26(X2>T7@p%gjXhtd`ueBFBN!NhwNcCFe*rI`8FP)5p|9uC z7?2TTW$2$8nGV4E{TGc)*$)pqG8KjBd7O1G_2>X2Q#-Uh{x3$RB@4gI$h7>~&l#DX z{mFGkrtyE$MyBPMmuRw6YtN|9RZ;z@>h8GFs^57dw9i;_VegkZE$Y(22kqo6gar*r zDW?v~gPP#=Jw@UwD#0+bMRP7Ib1wLln!IGUX3}lR{lx4v`Hb}0@53!mEghLU@`K4c z*8`IKn7@Pe6_n7+Vl}SfphL2Z13V8HmTP1%KxvNM5(uAp-S$Vxl_*1G`~H2DAG5WN z>xk;^+0Y%=uE7JSiyc4*V=K-Yow%0k!>*qV+pu)~1*&?^ED$J;U|mNRA7OCz^KYwv zYYjytUkg)KheB~4Gig|fbF~>W&V)ba8TGBwQ77qiO2<*~RIwef4-&x%$rq}l2Lhp_(x*-wA)0ET{Z?xpc=^O|Xv z(H_cMnSK%b(+9rfv7g(h7%sNx^!5U`dDRgtxs-sV_FJfV?SlJ!F=cOj4KsgY3W&vp zccWG3zD4};2E;rees?4IV7F3B(`+II>={deypwe98xY~Qqc|R#IHE7=>>37h;n4(1 z0xe zmLhbVLr#P`IJ5$x9uBQU$TXO8b0L(;p(=!OIJ6$2=@hE-fKdPy3~D4;!GO;N-f(&t zY>{uaG1w}>ZU);VIKW`L1Z@mJ$?2^E2CJJ^-ki}q+1bGb5IEc0q2Kyvf zzyPyMdb5(j0SRgt_$AoR;D`i!7_>^@XMm#?O5ikuHVFiS(-QPCXqUj6N`$^8!59V| z667&BFTr#MLV^kg-4d)|5R{;bL5~FW40G_M3W&VcUX0CX^* z#UDTq1L__CrXfT%U5p3FWRM|24g*?BK?wts1QiU-61W)96bs+f zFi4YNCxZ+L_A#J!Bcio3$daIg!59g87-UOe8cu|clOTgZjs)Wv|!uOf<^`o363+ED?tZ?3JJOyERdj=!4e5fX+-r>2{ITsCCFj0 zLV^+oD2k>|{_c!CnSiBsjoes|3dxY?Gj!!FCA* zgB=p|FxV-9A)U&zO9Cr{-4bLm*dxI>274taWUx;H2ZKflmNGaXK@|hP1oaG#NU(!J zs|0%)9GBn-gEk4;8Jw1&n?bt-x*Le=xKgYyy;G7u6t7<5apltEB}Dh53g zY+=wV!A=H!66|B3!-Aa}IRk?PZ!s`Q5M*GMz%YUcwMvk|AWedC3^F7rVvs4pTn1SZ zI2nwQU_FCu3AQpAC&4ZTITAE7$dlkWgM0}(7!*p-!=Ok4Qw9+_U4l#oB@*N?m?6P* z1`Y`-7|fMm1%nC+Y8Wh#UD%jwC{N zOE8AP9trXp?3JK|!9EEp7&J<-lEDE9JPiC2Y-eypg1rn{C1_)CT!Ib;Z4&e{I4yy7 z6w%f$K^B9zB*{K~REi405@az*lOT^lh6E)HG9_5RAWMRk48}-M!ysFN?F`0Au!lj8 z1bzm25}am`FM(iCC_x{CA_=TF5uwv17{j1Mf_w%uB$&a#A;A&`b0u&wsE}X_g9Q@o zVz5Ml0}Pf*aGHTrf(`~NBAC}OZ)f&~mb60BrUBSAfbdI`2O z*doCm23sX)Ww1?x4hGvL=w+}&0_$iZXQu>X80?auh{0|N7BJW&fs4Uj3AQlUC&3N| zjS}o(a6p1q27U=T7#xux$e>jMLl%*9T!IV+Z4!)Qa9V;A2JI3oVepm&RSY^L*v8aDc0B`GY^?ZDQs*u_ zLg5D+9W)fHxfs#z@f1AX@^{7$Rq!1Q`r+B*;A}rdY^5p&$eBy`xC>RYTZ5#>{jcZmvZOC&bjz%v{--f+P94=*IL)SF|hlNy0%SSkb z;e9@D?%af>F6s~_ArVk(Gx0jW|Dw{d_kYv(DUn@B1ePc`DNF4P#B8+Sb)Yr}(JA5s zr+l?}2-iQEg@1F;V6z;NbmO0*^ei<;5!Uv9d4F~e6Q_81s@6saV{)^3x!!5kr&!@- z1)quP4Nzd6EH5>XeTmtz_9f_EgN*i7M9aMt(eJPMxDX#JC$;>(>_&5nQu8tKhBlkM zpN&}c!n6WOeC?x@9G9+vONX*ydBY0vHib!usKp;9wfL8>V&j;u`9LlHC4~7x1k~dH zgfMPJKrQ|^6a!ZyI;LJ%Eq*!n-g)=GOnH#Do6DV6Fh;o&dfhn=0pI3*)OlZbmN00P zU|zj<-~fXj2~IQUl_1EVPXbdSk)uP`M6t&(Fi23uz$C!}24)Fd46G8= zGf0zQ2ZIa=_AVU3JEe8ERZ0N!4e577%Y{*#lR`SHU=vs z*vDX{1jiY;BbHvC5P^uy;} z7>}yEkD$LrMj+A`3)Ip8Q-jX~wKTl!;1CTi`#3~H%V~tXhp5f#)VhO6+s7hZtvkeF z66$K*OB^P#uGaZEOoCmlYvS+%4j<+)33p#D33j!vnV*noSL=>&cs+;zo5HplwGQ|7 z5ZI#Dk>ZHYwoR>T<-iWL?kER#sddLVut%+XnFIUOy5k%;pw_*@fg@_&2@V`r>rQgu zv|883fw$DUS2=KAtvkhmZnf?;1aSW!l=LzaXf#brCKl0Hn!_O)NoP>V=5g{*eHH&~ z-O4}P_wdioBmA>l@Xua@i9Tq|}&IF8i5Rg3LDL2uO1?>qk!b(RYIIgDS65Nstk*(EYQUW3!Aj=`6L+r&y zJC0;u41!7+4iNaUOg}ceOiZrD;H|^i8!iY!|JLymBsg24c+wW~ewN_6fs$~JqA~I{ zO3|6gK?N$Mr9HmnZ~2${W*HKja*z6o;fygj@m>sy>xa;}vhxm@Aql;vlm@+5V4&7t zU!2-t3)L5!N#7<`tI#{1%z{VHA5mWD&G2zA>mJJaT62Aj{vhqsM|w-FeNypVa2v`{ zq>I{;GzKTedO=bGkI00!_ns_zWT_pA?Fa9~e1HVY=5yehu=}Of1zq@Do)CJl5bsn~ zhiVdkPA7GR3c*lho3wBx2NF2t-GbF1un{{CPa6LmC%!>dvtu&FywAz zrvRbn40uTwVM5PQ22syxeC3UA)xv&KX}bg0S43(dsZ>z=zV=$5$l5|A$d|OGLRKdT zvDJyMS5ak#O}Q%%t_0O+8AGHA9TW7&p>*?6JR2szbX_*=OA8klY@j8g#)ji>g`Ydm zGaE+zx<4Df+46a8NE(n0M!Js|WrMNcbJ%dB62pe%er#A!8OsK-p`d@&KX&N4W%dsb zmknh$Ma$fNCj8uKx`V3z&j0LRX7_)8UYQ3CSmu=YG7p>ZIc2`RA*Rga(=)c}ooiyt ztfX?)A9W4m`^kD31PeLL$_c9eKoY&f=Q@#l8jAZmbS>E=^p?#R>G8OOl0AP1ASZ({ zJ>%(NVK#t0X1v#$#QwjApF77fdrZHQ>`|!~g&w3{D3%WS6jm$R9kQlDzt-w}9M&x@>#{E5`(cWh=+`P9zjD z((3{MBZ!;gc@=`SZ5#Av5+Kz1E4-r8iy!@vJ~lZix@MY}l9BRC7oX98a$Fcn87QNn zlu>CUqo4e!Uq*MwWyAt7Eb~U9n#JRPmNlCS5S4jF&<7F$SjACmD-Z{-~o zktj`D~Rd#CX< zjp}l$QtFSaHJWIxvG_xbdD>cI4#MHJMlr&2tuc{eV6EYLh}Rmbx)+J#maGL-2W)Nl z7h|GdCwl6LbosI`9Z%5!2(heucy(+85E*FmG1^v|ZuARV1{j_-{r0}-_@s?Y7=1NU zX>sidR@%L|4wVN(JF30=xOSHXn;k}aG+OjsmX3b>V%xzQLEzU7MhiqtC3-9Lqv-b-uo9Cklnu@Wez4yyO)Rto%vi?&FoLAuz>x&dP z|235wBl%xN|Dp=k+_P@_3q6lh;5_~d*~8+l7L0fa5C0FY7W^WYMCcb?E%*&Pm*rT} zQaZX4A?`}u-{rO((;&6(Q-w={)HcO$(1OFOpK$$oqxVAwwC{$ydQl6z#4yzk3nDb; zz?5ocz}S5^X5u=!#tD~MlBGU-hB&znE0~#CG}#i(2wTeiN((ML*|X#5!&SG)y;wQl zTu~L7Z({0wO_x^Q3?x#P>N;yze(urSQ|c6447N-^j7ffeLBN%#z_K&0n!%>@Y%}i8 z`4Tk6Mb=wHe_pd05@wd6;H0YwSKAJHn|ixmRA3e6gysl{3Z|UUT%;$SkRH;9;_ANC zto+9#_Q<6I9XDT zS*DZYZ(PZ~VbNkr8S%*BNoll zKf?|3Z-?Jd2 z{wr(ahEd7?e{G2Lx9aY+>+`>X)V7)R25ei(_Wjj~#QOeBPlLVrIHni9Kuo7n4$SfE z2o&Nt6liHjRCp?*Tz4U?aT+{lnLM!u4T=Y`}?uxc3f-u=UGDwPw@?C zeTN(5R}cmtaEosMS<6OIR(K;t{omC;Bty9VBZd5G!9ayf>tDzs+y(jP3rQG!!Q2_=FT*s@ie-b}I^RCTEvedke6?RB}sXB1B<3V-mH2)uS#vaC%6SYD=2g67{JV?n7`-6O~Et4_&<~bP7 z%EVvMJ25W>o5}Bp>@Rzw^58o5%*fK$&SLDrVMHtqY9dek95?fwV<2D2x9Cb& zFS)=?kEGC51j`9&^h_Ul_6DBiQo1N7i6d%eV%SFXRuu024ahRyc6`hhq~zz99e-el z35`z^LDkd3+<4<5WI>J$`m_)rY5%fECm-=9mDmO!)VR8jDz7X?v6R~!+lt? z#f^<^I@=I0UIla8YtOhJa^Nz%UZhM7vwg{fc!QDOH4N9NmZ0%1Pb?D$-=k(@rS3v= zPm``3&9Lw(qPrYlA4kKLP54%P4evN)=7+9!c;Go7S!EfkOl?>f^id}To{|& zxB~sT$Y;~+FQU2973Kd%4Uz?hR-gGrw7zfSFc&6AAYU}ULzoziJw|RY;V9Lg*aS-r zkkH^pX)nkhQsC~1%Lh3W7hGNc3@noq3zqAs6Ag<{?!<%=Ig!0WcPVm(6}2-P@09r| zhCiY+ro-EF zFKm6Pp>a9RSHKQz{EuycIm$9oj%{;gUJo%kMV+F@yRdxIPhr#%5Z)EMQ!y3)g6PETCVs z7YNej>G@VEcw(548;0a9dfSOi~z`v^q9jMI#-x+YK*nuA88RNhF0cHmiM zG;$_IPK|t<2DrSaOq^+^Vx%c8WJ2pE_^a|<8Rr`2xpJo~6_@06?hn8}Dr1Z8UM&<` z9aJCQ?rfT$KxAC;ErhMqZj>0Ca3P)e@G^C|j^!ka)>D&Ery2Is)C#j>YO(iC3fEvQ zrf<~g;m;9MZ;rZJ-;%h_QnL*L9xVb5A~mJN+me9(`vVU>YgIl|UTqwN|C%}zF8)qA z=6yHu;%^bPBr&KoQw!Px4CGSu2;3_p%U-MiWR@rJ4z+@3=OfQv#IqO?NABRbDdD20Y(;29imii%o^Qi> zYERT+m4&?}u(1d;k)>uty$u|y^>54^u$d)(god`^ykhHtpv+6eEDB=M)(ts%-`hyZ z#&Xh}h&tFB_Ct3p@j{Dnf*k{b3u1AQ9pB*F-0*joag|OP3~7aLVm>L@@D@eaMdz%d?XTgRJ%a$y}P!_@>5wY zYS!vRZ%Y#DhDPLujG8lUtZx!AlrP7aWD@V74at^~hn#p8ku;w&Ye~Ent$=JCZD>d? z9KB{p;jONe!UZm4z0qFWwY0^!z}}Etj5Z5r2j1SfmHC$EJzH)zT4Bp!1%Bv#*Q6HX zt@f_`7US3KT@SPvm)X0$=hqRY{vC+9g2Klw9)E3K>WYwqGV{0_s=j=PRU07r8$q#OKaRq=W%-0 z_fh-@)+yO?$T5r&o?d!qQeO#HU~8e|W`-%a?NiNEFe^WyJG{Dq5+_Q^}kg`p+c^b9M>@sAtW=hI-C+VskO zuQDuPwN2gt8sDu2hhaLs|0b_*t;x3*8V;R5#xhIO^g;TVoOZ{q*9P`Ke}O#celT8J zv4wZBMfcaSi1>F@!*b|VuumPV*o64o#K?-x^m*>G-^R*Bc7Q)&PK0FxR%~v}CYRGy zaVs{%s86_xl&e^&$@yw>G0)$wD5b&jIkb=)gZ!Wz@)}OgX|bwAQv4UB2-DZwn!6Gn zID_c1i?1hXodP<)jo*g;rVIM*w}<&ZhWIb}HBO1y56r-@5!LtTXFp!9$UKwgyN1(j z0n;g6Ah8vKq_dKO#Thh#CLxlp&Bxh)3kFnvN(vlg3$U_aU%stG2eh9g7oLZ|ky2L|SS(@LD>rC0alL^3{oh zuq~(bhRK1N>9csM?FN^d6!?oIUq=CbZ&(9fgKMBd`tP!vfNXcufc%BJ<1hqx0VJi*{^Dh zX|WB~yWysCFy^c|YKb0m;@f*6A}qF6<$`DY{p)i)ezJ)BfGAJ}%TW2R+`5it&;Av%NzUBq)JyiaHPQYyu>ZU(=x3fu>oEA!W)BRHV}cmaEkzA>-b+EbJuy&A z@=V&`9)TX#uSM|E935`OGTGrG=XR0ab`HvMN;`Vn8R}k-Y29m`S!?W=AE2922kX~3 zX+{2WnP{ed$(q+HLJi5-6d8g|krZzLnF5jQQ<3H6H{p+gj$?c&1F>A= zKocdx98eGnug{4QgTaVoW<=L&Oy|EF=D@7Q%z=_+%mMee5e1TgzL5J##5zvATo_Ph zmJJW|V?SiWXqF8|mJJ&$H6e`Va*q&B$o&I}2W|{9%6kFbE|LppXfVKk+~3I(FGk=? z*e>zp->O#Wl{Z{u(HBfal4H=X*-#rN!yYjOxZ^eZ?JM*pib3WY==En`dhIN z>wa$zHiYbYT5rCD6^fLy>9LjHcYFQZOmm3_y+fB5Yv4N5Z2R~R(S6|g(Q2=XSS3_r!eq9%}BD9tF@T+=t z7$zo$P$`x3J)86kEVak+*t03YZK*v>5sDL$u$dCRJ3e77hpKgBw2v*DpG4&9_b8$2 zcj@1z_fiJGS>3FIW*C;UyjZWk>OrK{$@@XDuInbyh4BoK){I?401>wlpX%UOTAhMT zAa8GC<#76{!74LqS264iRVuIEx?}xf3juDf6+cMBcTK6H_?-f za)T7Yl7{w=kS{#QxKNTZk^2o&!bOvH4_yp%pn+*Lt-*!_%~Y2sIoETfA(2RTIBW1k zeJl$RiLoLP#aoP{M%A9Q2$FnSw*1oI+`?a;UK&n*taDrZmq+LGc^vNvA?L+0pJQCP z6^_%(pdav~KAN*~qJ{UkrfFkeLE(Ju{nsx=->=i2y@Uz4_Kht34&=;hZ7LO|T8b&Y z79+whbY^ti8?^bD2|YCh2A8mB?AN=4FY5X*V=2-g_9$=#D8)7;1 zviIG|gI}%w!~@>Ww@htY4BPCSQn0YY{S743VDX-_G@ZlR-%@iQCDcR-S!(AZ%$>bs zvTssThjDOQ!)VHEaR1D5uFZ@(N?c~Wg|I;l#TcEIVRF;CVU*z^w2g3v?;#wMp&1$C z#*wAwr!jF}ijNZ^iY`6Hao}fo(2oPuUE_%AE9|w@(mYZlDzWKY24#3xOok-lVu%_R zCW>r1h6yJD7ZWE!_`66t9LE?RCqno^iW6IP=kVYf!n5KD|E#c2PNOx#^-bq)M(c8g zGb4LnF$85uqFr<4d-sNzcUpm5`P#dGiFv0L1fET}Nw{q>@3aEAli{L_+GtD}+_zps zzs?Y4JU3C^2Z$9fH2z^T)#|;vsnSZO+;OU&QlDuGCE(bk3_}5?=#_WCoexfN=b1e3 zO>XKmdS3Q;j`|g2y*VLd#80L*WTaCT#6~Zu%m~MB>NIcUvC%+)J%9-KWvV} zR1iT0i9U^%V<7%W5q#2Dij(202}%Gq>^6cerme8tHVOluuM}$9dr=1L=F#BLG;?gA zpn3hfIDr~_vf$;7Ib(6yOeaz#xi@B!?K?rGlF@04>Jg+p6LJfSwoM&lPhvD_qLVAs z52_{CPn86d{$)JI!Z4hOd_R{D4iMcMf!PM)cUxn;nF8_+w58sPSU+J znq0WpTAartaf+gG!sXTC+#89L*}tGVL%8m`aO`en35j{epjibMEn9x8%~z<)a(6v- zndg1fN70AZc2Rexlg;=U1@%|5%e$#Exe>h8Eo`31GBmjn?Tiu0$Yh?s(mRrf$&ECF zWCRhI+(=tWu&57#xT&BO4%|9E@%oKgHk>{@QJAn{2yei3c5?D}J|}nT$qvxoGpXW-i`zDI+S{11ZCsl=vHmqx(=e^H7 zSNq&^cvV#@#gW_A@Th)j5r)@7?Ll7n!C39VZQ%zawFkqd7I6|O8cvv6R9t`)@hx50 zJ;J#`U@^Q2*h~(QjJYPHG-`4vaIr&N!rm`GaDT|LqC)`q4G*7@?ZG~9UMaPbN$ND; zyzX*19dnO@{r!yz+WL2yV#ImRGD!4~$6kK*v)nT{)4$|;%<_U^Efz>vod>}rXolmq z8}Cn(Mhuj~%^A4gR#0kQeKWs;Tdl-qhnS2z7s|q5F><7(+Gnd8;pd=Wp?S5T#V}G= z@Y!nU8CzeZ_C@JO8(r6+g0@lq%k5CqDo$+2cOAF_h%-tyGCgYn5{+DuqxJ+}{>vdJDT-d|#)#TKtAF52&7qs12Qr*Y9X z$3}}S9(*vyWV!?>ws<;&<@+=6Y$7##IiyT$>YR)x^1Q1Q0|=aI!_~?V)YvuSMRhl= zz+*&=jZSbdty7;OF8EX`GP>bGa$ex8?Zv+$2~J9J`w2lD7&qhgt`12!aGdgl!P}bP zQ^}IOL!?6QQ|a{{$%G3p>_(RKR);9w`UPsSzKo7A`7VgaxGB7&@f|A?3@YzHWaVqg zb5eBGigFJ4kEZOIX-PrEmDW<_qo*C`RmUg0-~kSp=ubxu>Rt_tPMb*C&`h zbD09u@dFCIht1wjz55@bhd|2B5mI_GpzKB}aHRPVc38-YD6!Op>2X{&gHp2iYWxGQn*%HYk<*^(EV^6M;5lD>5}-xL5!YW?Z(aFey?J4gnY*N-XEj;=L20A zxuR5JO5(Z`yUQz30x((QhnP4j%;B$a&hp_gR#68JJn+F59YHRyG-6-##Wwn2}2KVl|$d=Qw%^D`lB)f@nL};wHB2ZWy%v7 zpkxHxEBmHo(9sJ!ocPzd+@GkSnbFj9BQ*NVs7z98ybrI?3SpYwP7_f4P`+pm+qt>+ z`HZ=*AUSc9mXdaS76b!CT0-RbjIcu#)iK{eA9O3B=8dj60h1*hWSik5mF7dzx8I{C zXi$>^Eu4YD8Js;+fd}-dfN2tiqbqX#*0(pC*;XHQF#Jwi2=Lp6?L&exwt$86A(~M zw*{$elrM4_giaAEg1;-$ho%;zBom{(us)Hh%mO`ggpCR$lp$dW6P1S}2atza=e>?d z40mnrG;@?U%gSHEOh~sZkO=3Qt4*wLuG%xC^oD8NdZv*Y;?Y23f2V+9u5zpy_Hze7|jy@6UdUBxhu-9ire4ju=F69a6e zsI}y4-cc@|x{nuRHFS2PaJ2oc{~vqrA0K6LE&lIjH^~AE&jJC1Mu`$E8d}ka5>_+> zHlQUT0ZB+LU~eH!Q(F;s0hI*eCT*67ZN0bpxq7d?l@IoQZ0l|9r;4bwCIpj!lpkU- z2(7VFow%ssMhKNsv9Y>wcw1zw-&^vLZgl$N%@l8+^o}t3cAetM!rJ@TrD9px^;b0NvKFg z#~g<HMF(Xci)TV~a^NPn=jF&+^S*sPb9k$p1F z%AT69Ss9`M_o3~K1%59PC_s(N6Exn%Rg~!A1}B z(PC$KZZ{i$ri;?oUcuFD`_V$KbU99%bKRrg$SriQx`q>L7guFaOn$OP^B*OTRlE9H z{rS2rG94hk#KxO@b7Fq{-0U;({Pr;>p2YcW`A|`6#q<)KAz#rz?ELmFK4Rlf{X0iD zD?7v=z^R3t_SLC2=~S-m0@r6E>RtNjCbIa!?Y;O7x<9Wl7r_oBR4rDTsSE~jfwE;g zIp@Vt*eV}EPJ93013J3$xm=vS=xckn?jS<8^v?=0PL<1gDt8fEj2o&00yR|twm!y# zkQ2QjPgo(g=?R#ptPoFc$kSFxW^c$dR>KuvqI+fhCHuBf-@wwZR-m> z{ddXaXpQ<}I3GdqxT#yDL|&X#W1|OtEn*hq-WF>VIa@x6F;a7MxHQg9M?ZdnY|_Mb0x;4pg8qg<#DT}N9#QdaFrWod!u9Y z`9N>~*Pal6stNAbRa(|7+J?foxrlCLcUsgSXuThQlxP3fB=+VT`U{ z$1i>PweaJT&4Tdb60pG3m5Ta5qtMT|LkfsH%zCc7i-uCT+=t)Fjl$x>`eFyG+IA)# zEkdbz*fy9tXJ(nucORoIB3HGFtpXF0Q+`@>I$NublYlKkZ(!G|+Y#KkP4;m8N(wSY z*5AtyPN{f`5DYF0!(sU<35TWKO04#ZHBt0MshUQ4vgY5>7w;n=T;PtQsh(RQ_*D|B z@$*oV$OyTMw)MO6F8H*3_X)7J&8cm9ngx-Uj(SAa{ig0q=npWFd=vDiJH8Kx5w0yK zaX+}z;@bV_jVmA_gLCboo{|-W=Fe`qn+`o|F{c`mA?sa$P}Nmvw~!0358c=@)0vDE zGBbHofwN)ekd3!@28NpjcC5)AEuoodk<{1)JG!gCwh^N__d%^?L@&AA2Sxe{6+70xupDrnFL$H zKPIUmo$k#W3D*f@lKAk&RS#uzJc zFsCc`$9fjKA-vWTU4wlgPZm{TmTW5lkc{a9OU9Yy)v&AHMqF!|V;7b+pac6|nbc3% zvie7Q2E^~A?XlF!4;Q+OZH*;Wd0MiKb=72J8&{BGJ3ydnsL_K_SPp9#9V23`fYQuz ze;kh(53<_xkG<_Vh<^t4Qn%H9vS^93L_Pb&xgpALQB2O&vrv8GhUx_4*4$rDF|Elm z#{gw(O_sUEdXqWDdK1oWz3Ev%!%1o@Om~(J6CPrP$+(p_>*l!DWSPix%;%c8&*+FR z1bgex;)dg&O|tUgzIXE^te{dct&|!gQ{V)2?wGIAbgaZI`4o7dLUME=m8nVCDsfhF z8BZlG@aHD1{bF}p^_%gn_WpbN6jmMyg~|xZ5dA=m!(F;6x<=$LhjTcaW2SnW{qsO_ z2+qu&)e=mr3?z(-{8Kl2G2b}tPkpq2V?cq=vQHP3sxu?C8@Z4yCWe(RWJ$SR)6r5? z^4N_yxxC8yjWwPAk;SI8#PB$lu&iEhynFXPZ~rbAV~eU^+G-wc6{kEa7w}~SlZ%*{ z1*UV97><)8%W!(d*NuZZ8C6NNW^~MAQg0f8x_k7DB*qX&RT`J#dye)+>a#eavoYszvy zSsBSJ6&+)vCM+-e9U`{~bGr+;KKO1waeM#ooBPM>_M4Ot7kcFWGZC~q(A8J{g##`S zuUT*fiJnqT;gX;b@?va?(!3<@1X#FuA$THoN@Jg*xJx z712RNvHIxG7iI1XR=3*&DL5ts0?FReLFUY|rYw&w9UR8HF8?f>20 z_OCth7T6>jpr5>CR?D4^c#8r8i9}ArJP{t|vHbo%5gJDSSRRFAy(B__Ppr}2Tbik7zImfT{7p#qH~L&DJyKQlhXyEy5W-v zHg(w+m|(Hk#Ddof6R-}z(1gaoKt>wB7kV~W^nrdN25q6veB?Wz9$#<)F=ZNgtS4*B zO(1ztY4P$YZEYp3(dNKauwO;VuX89*BR-rY(tV{E7y1=z6 z$z%aM=8W(>?ay#Xe2qi!^Btv;9_ z0bJR78ODkki&E%XIcjG^eDOUiz2543K|t^oYW?hxANCGnf~rQ(`d!363hCx zg{bV-85(v@b8(qC%~Q8f2rs~5)=6`&+0lcE?Fqh}{oDI@o#&&qt&&*sWtIF(6I{Rx zq^h6MXAlcFZ~ytves;YX*q*)LT=K%X&Q{-3Qm>}ZlFXe=YP@4-$oDiSD+n?%uz4={ zV47!@)6C@v`T4N#`B3%q-j>y0^0u$N-t5l4&=gJb26hBS<6wZs_yx^J#$;<2K1Z!4 zn$A~4DUqxCfS3b7l0vtezNdmM&b&}yd$1`z%jy}qYceb=mh#`KA|xa7gT#of4t z(qi7?Ch{Kl7B`M}%Uhfw5O|9#P(AP%?M^2$D(rh&_uK=$nD`#cK3&Ce7hBWCBst70 zOU=Nuaz*Z#DUdcOq=@x6%}V%V^gu~8u(?eAU3}eXZ-AE zKO2gJ?1rc5K4)H2hhv5fiDcE6&T4OW4-g#3e+BPx{L6W_@SiUb;Q!qZHU6=2%7neh z^zF!QZt6~&!SKCRK!Re&djPl4aHKJSUH2M)lYp{p;N+p2S~CiYH}3ipS!=p6@5-KYg12^DeYP zE4pMFRH8(0zky~eb(-Dgi0p$4O3FgjamA$?zKGIBFddjno!LjIFV%}ST}VO*7-<%` zvYV)KaS2-gyANNKgW_T5_hjAa{IR%-yL|xuVC|&8Fc6^F6Y6S`NYAQ?_a~MQGJlB3 zQiz09gWq6xb- zwR!g#vksd37N}2ImWfFp#a3q24fCjPXY`h2F)*t<*-d17z}vn0MsoxTuI%jdGLQ;f zfgx3PYR95AYKcDA4C7_%fjpzf?hh7Lme*Na>bMPQuv$l_hO`4^Kq1 z(2vgWqJF=Q+)vYwy&TZIkbQE~6*+HWc#^j9!qD&r`=;@hrM`IpQgvKpZ1A&jyiW!$GSvHy80IVwHZC_G z7lbN8;h_+Zxu+sj@8(4=A{P`l+S)d@);kGt*oN9FLO*ix8h((i*Acu_B+l#Z57&<( zpkzViMoKMK%l`;i_%ecWj)vVc&3ef_*mx}XUQY%4B&IF|cW+mbYp}74u%Q$=lQlfk zs~r@JSrTuw&6hiCzf6t*WCWY8j^*waL}#2p^M{X(-gDm$Kzd1Ikf~GPURrqOkB--CkC?vOLAJu$T>>M%+}hQ4O5gUZ%#AUJiT~ za?D~GjxbOO-=mi0YK9V%X`wHa1VQC7>SU7rqO7w0cLkL_aEI}d&%=vR2a~b|Rg!f+ zKB&GH$f{b-u#S$|PH8ftD}Mz9V#qGOEh{hB6*r^vEbRjt4WyY}s54#wta2sdkHzT+ zdHy9jW*U5-RSH{m#dx!`@=lZ$`(BzTOy&y^+R+yQIL*zo?Qum#Kl!DgmtSISK$R1t ztG~Q@((+(sU7F5<56JkgAh@{nzOoKWQB+60+asd1+{HYVO~B84sQDC8yPuP^E2_vZ z=9DINN*=Omk?i~>tJgX88G<49_grSp2>*6#pAMw|kjMVs`n4#2zEx*lN#-!Qnex-S z32&`;to+v3B<7RPt7Bo;{qsxL`Nbv+^%1&pSX3Y1h0;O@BR7h%!;TB_Ci*9Q)%L5O zW_|cBbeF0R{(N2&Zr|$1qWkbxdHqk-zcoeLRuv~OyX{$L;ER3C0X0{ZS-fA#$YNm~2X z4d3WDWrA<~yl|e>AXcB7KBZDLmVp>7Q9ON&R@TtQLDuPcw0gN_+%5P50DfG1{aEY16_t=?8z49|vn( zERuU93kv}{d9?I?0V+Am&&%utMwg$adyBMd15FKIK?A{TkRw0(RItzq+`A8t6uMGL zi5%KbU4lnWDpiv^{x;_pVZTUR3>Hr@516?AQg;7H5jR}frD;ozJ9jp-q1|j2q-PhT zId~Iz3ko3xUyBO22%;dce3JFSjSGs+0=PhuX`!WQqu+2G7=1qSHO}wOHH*?YWW)~W`Rtm^D+;n4 zpM_BLRl7&yx?}C-tCDjIJ!?m27iF3|DediLS$cw~%P1`~|9lsLi% zOUaRQo<*2CEs*A*#g{Q|7&TUMt9{LrQZ?GMAT8(3?1JV4lL9H!fVx>e&1oN+N3!r|25WG)bEi7ORxR`;ta!liEKOTzE=`xyr`hj#-(8<) z7P-qDd(cI=)HBHQvTSa(*Q71GhlL`(FpFf#CsPoeKgn#vg-_~}_JYijrCBD&C>OsHpqu7e5^F9MU8AXd66NIVu5Y9tjJZu@goopiMOoIE^R^oEy1|P!Dl1-~e)n}< zt+3PETdz22>EHhJRV(yW?G8rmfg2L^1>F>6W;c7^SnHO)hqCmkS4zl<;_0d;Jyeqx zS%mT09fDY+P}4ivOEn=K(Ij*kMkq(tj*L-IoPJ<={pn|v8qb;#`bp_mok1%F&X2I5Z~>_oGu8u(}5(W5?zn@92sR zdtn)7OCP48l>}m7eAX!H63-8!G)S~rjM#7uNt@8s1!*xtjTU1r!eJXtq7EG{i4ydg zgl{IH&-+xatnRb~ajy&ux0V|hL9xQ7`%~<8nVjIHLb7;XT>ziIfFV(gs%A;^#OO1t zAAK&16KG!&?hlfHa65|9B$pEP^w;`~0Zrg>`TTF$2XiBle+c%|(J_^J?;~MttoMSb zKlAn9ng2G@Fp2rEoe7xvZx-Vhja9-~k3Brs*=0114BwUT***n*ktOn^oM1-Vr*63J z@63T0KZ&P!ON69BmM2x2rE1cVOV5GSr^Mp%4vRJAm~UW)1>;_m!NyCVC(iB1#hI38 zS$0dz=*#Ka+*f@=M-BI1rp+$Z}F zsz?-sw+`-lwv4@>&uzEvjXvN}59R947NeBBgdhI@p*xGOC*@Cnrzmp}c z*huIS7(ZyZfeHoA2q0pRxrdEuA%xxQXKa8(SKUg)zJ+B{ECm#^Z@`iHz?PZJ^+9okv zWw18uL8Frc5Et>lPdE7-F)$Z{L;tYoT90~(yHr4i*VZ{1BFP|$aJ~XTV<(+!wzDwB zytDdlbxRySjh)#XnxAfY+*TP0{6;14b7}kpx#nKn;wdzKlHP3A6TEIA@I${S?%d3i z*{%MuBJU5?l6-hwQe?C^QeY#S*c3=3*XQzQ$Xp^U=ihFVD#!w6h!BV+Fwv91i6TBW ziIe|8e)^g4(>GYlAgZsq?a2jLR`%hmX>q1S;{-Rb zKa;Hf{BUZY{*-w>(VxRE>(`$Zy5OXM=X3ozFNWMCl^;XyDm5*E+<&1z;eR!~{4aQ7 zO0V*?Kl3|c&Psc^5ytea(?9ZA`)h5yZr{bj@O4MVKkL$g2PANBEO6+vNw2*n@3YUF zvto<|_eL1fUyeJW>47v^Xz$YWtfhsJuPuU2{Vo~=0iaEOtaLGH0LS`r+Uo6Qt!W6a zRKig_YrH_UHr3_bos-+8c=?C0g0=@3F}F{UU|cMkU@8kH6t_@uwTJW-h#Ry~|Z79%nY5B1_RRJ|)y*oGo1Em+N6UL(Y_X$G6p$zo9C5NCif^Bq6Z zzf5e%7gvUTPZXu8s)dx=h#H`*G4jeEG+eCrnH^?Hz*p{mE$cwxzg87}B zQX6L4gEdb3nn~go4eBjkSd~;#HAE~J=ds-afe$l%ZNW^WZD*uTGP~NQ-mPUo+O8LB zY>Res_91F)y9~_sRGKcsS>sw;rF)=0$eBUZJ@{b9?DtkXTqaGDwwDUVWavEXec`N{upE=<61jd#AR$-l3 zs{T9%6kF2EYcD?AWO&wpBF1&n{!AYtWME1cNLBSS?6wG3=DDhkZ#AYTOUh!klaz6S zp_1{eA53Jueqh$krd%#{q6iu6zqSGsaA~C_SO=e+t?NmAXQu z?og?x0X59Xh7zaxm$zX`*1mCEU6^?>aU63n?dF4QS979+1<#lpAdvmcj~rNGgWnM4 z7Qq+46btU%9n$*9=F&*I2vb{Mpsm!SG;0;xBF|i-ht5<9gwp=FR4T$G;psgTI@l&s zX={p9NR5C|1#8l61z81atl_ZqsiP%^uP@&vZi&^zfiV}UIs4nRtp$Q&-Xh1dvnvBio;yiwOchQ^lXiD|BKZT~q_n!1sS=bYsNk5Z-2 z63>uWdI9Cc>{2COMa=FpCC8Y`%PZUIq450l);XR#pmR0qFdE?*&yhe{*GV(J^hK)~ zw@BdD13WfXGtLt6{~U{_JoTQO4`@}J2oh}e2{v2#V8SXqp}r-tTtTy<$7Vk4j!a{c zn=fVwzAmbFy=k+0bB^R!*cCl&g^w~t0+RmxQapls?24{-sfAc1mrKS~WUR(Wq0(oR zrsjI>R1UIF-u`TGm`9AAi^D}(D(CkMOYui7J1f9t_QDCN0y9||z${%NSuuQq>$13K z(43patqG3s+({)Qir|#5yj(++RAs7nn-hJc^<-`8yl8OfAL$yh**N3(w3;n2s`9>d zc=bz`FS}|R1@@G%ReC30T$woy8otgc>IZggUZ8FJSPh$KHP$*n4~fG9H`o(%3+l}5SLV=d!SE}~HnW+UYt zHt!G_I2t&vFT%0zU!zOVYzSdrY>FnzoH;kvRuMm9JOkq_#lCN*?J+H^8jhUdl zoW3dL-VO7-3Q|pz`%BmzFsEqI<|>l4(D7#jp9H@#2^YJQW081f+SxC1vfQdJeO&0; zK4tDuPcDKSg4T?u?;7d}oZ5a2YQV8mp3`bzIanaK-*A}0j&U|KhVfcqkE|^xG{u@g z7FdPu>_XSU^P)?Q!?A9#vZ#=f#A>pFRbGX+joVOs?pMT80qqx*npWZ6v)TyHe61qb zJ#Ou!ieOV_p{}PJilZCRY1KU`RMz${Z3wcD$FhQ zLR>jtvL=#7!+8or%3Ve~8)~)yuXCv}{6><^8n>J*gOk9&@?Q;%JE}c zo-7`_Y0)YNzHM=}uiL3i{RA_n;4aP;2T+$pM#+JFu1 z5rbWGS=G>TtTnF+*EmoATwNj9T@0nFf8YfhGIb-rIlFTgyI3rRWM?~Y{X+G1W=!db zvF0J_^_e5sk!oz4H{EUgys3eoSyq#*Kg`@MUWjCvVs1@u<5xX*r3+uwLNE}Jt-`x= zZFU15Uh^V1g%|a}+82~!W~k}JjYv5qI>v(xOj*gffgb+|HTJWb6*q$rx~7k}CU=%D8D3seHu3eh^aO7N9t(s7sMb z!O#Juk~Dx+Qpx-O6;ffrTBaTv{+}k5k`m4t6sysr8Eag()9CPZm$PH@MO^&;zV@9z z{_00|;T%8d@U9N$2E_ z56nV<*(o;0UFB5ZYTV?W#s7VwTYXGbFrM9^o@qWGoz9&^2Z0u*dE2lUZ7A8T?8*Ap; zumjkq>iFPi#n=m`o2BnQw_d$wftYv zVT-s}*p8vPc@PWk)yd&S?QCa1JT2^dtC)*$96QZhi%Y_@*vHH)RzswK{n66Qpkgg3 zdb$yF<++rDx?gRXHNz(PkeklRAz209%0A`4T5@(!aCG%NG$1AFA*|#?z1S6Ku~JBF z{CMOr>H{=Ism4-027aB(`2ICI8R3lW%Kq|s?kIw85jS|%m{hR znUh0PmSSUY5FO(~?(nMHI3d=;>fo-7P=2wQKiRZ7?4kU-(ckYe^E0yd1)F9p3r!(n zX~@;wThK@7cgvea2^`!o&xY%YB1Z+9WB4&=($4^ z{9(Eeu zw$X(!VB;rBQw7?b7HST$%2Y#PJ499GYVf@k8y~9p32RJ*3-Fq@caV`$!^mjsGctU;%%Tiv z>i7J;#Www3bsRZb1_|1Bqk-Km7V`EDRi7If)ot0I`LB(S3^Q;5WVwr{L@mJ-Sq4Wp zmM3~RiRSP?c+p!e1vBiqi*^NW<(xx39`RXgsm#@r%dF8-0p|MVr(m~3gu?^TmGh#3 zw^W^U2KDzlM0kyjqnBS~mTOjbgDUE5dJYA-D336t$9D>NI;GO=mnp_UkcBX^jRCMI$L< z{ec;QlzxvoOhHs}f!R8&IglcW{ArjHbChk(JhdcCHz)$=O(HW$&`QJ@y@JgIk%w8o z$(~;!Gf;PQ&Ftu!Jk=n_kA1Gl1a|(nJS$2SS#b`3PTulep?o)&nTGOtPcwIlu9R(o zG~JFORnnF$iccb^GhfQSx?qW-!M{p<(L(f_aYXJ%X48n23F>~%=vX-abV3~G+vA`+ zZi#_THhmf9K6sMp!!BdCdKCg6h<}?L|NXDwpDFl*wr)~y5H$n`#(nN#K2IRI%DGsU z+|1Boi6Sj{D?&I_N~3y^``65)9q*@ZW{bcv=H0kFwAc+!pi&v@r3)<%`8o<{5sH>_ z)O9%QN8KP?u)c8}w@S#iP;=Gf?f*-7MUMcoKVT8$1askJ#=Ua{ynwqaqM;=7%NgcK zSwyp*Nb3Al2HL|gHUj(vQGJ31DKlN)8M6%@&|Ylb8uq=- z+X0J9a1^E}oe8v9y}`O$7(+Uhy&0xZGh2r0^^9WsswFx@Upv#JuN`}Kvf!!2fh?^I zo^OLheDq%U6{FX;S3ORKT;$UZaIUW{aHHg*=UGO7b`z|v7=6mc7a--;^VGvR@#^3@ zNAB{AMxN_U5Kxk)%W)D{%l`;?k?~t+O0n8zk>^?C`wx-;kjVQo+0Dr?qvNDMMBn8Y8PkYtopGJ*wdMNR!@{a(1@XC$Xa*$cP5gC5Bd$ zYW_@DGu>(ogsI*w1zC-!p@oQLv_yDjZ$`K|jpq8Y%E}}!r1-G&b*5F0cmy&nt-p9( zI8%?4`X3S=P8$;bipzWGipKh8|3dE}?q))}(>z0tC#}u!9u!rNnjoZcEVQDVU54vh z9eekphls@$tAF{T2q*B=a$?=Bjz2Iqg3T@@I@*in?z_Cn-5YXLgINTmL?02uMVe05 z_GRoGpFwq|YyNyP#j#&2a%Y`zjB`G>;N$-i3|3O?C(PSr{6NM&^-AxP)=yeec0NZ` zIPDgyBXy{6^3SpALV#7bak0A1p_k2LpuQ?ru~@Ja7J~c2nO9wwaFgQ;K zKQl0Ru?~KAV6a~YKQ}OVvkrcKVDK|K_=SPN+ja2vfx&G$c*nrtb{*U}Ab9I80uaCS zTFjg(4V*JoMkb7&E!cf(F6y%A;YbR{;25{;eDWd7cn?H=}ksOvtExx#zE z|C;eqoAJ`lW!X)ZA(?l$^vkJ0(y8WConJ~tZ!g;}TKK5U+r=)^7rvrfuOG{miE1;A zQmF@!#bYb=I568|UwW{Z-PRZL!BIcUMSl+Ux*<66t7ME^T)9{ZxNRiObEr(sBE!If-u>@sT54s{R)RlOULBQ|-Ji>HJ5Y5>YJ? z!`(C$(KAE(E#w;L|4-sWwUdBVPwM2@N$Ay#njz@}u86B@x!S~gd5|l#uMXZG^?!2d zOd^ip2=o@6g(Qe!F0x;94D~=3Lq>Yf+?O*|+A8?o_(S`2qcX()EaKzgrOi}NT<1im zN_{N{rSWDE(NU@$oS{3UG;m`)Kj=Sas&s{wr4T|q->}Zt@&XpgQon+NtrM-W0`jy> zspb(bWQ=0PB5c~N)SP>p1L~WZ7A{G5K(8}XzST9!amss`BP;lezstR9DE?#}`EGQ- z?%>Wz-ot^9^j$gT&d7Q7AY1^c+`$pMvQjvcGsX4WVoXw@~ABSki=p^N2Rm!^I^ z&o1w&%0^)1V}R8^6QoY!_nHqOkYmsu1*eM+FfdA(S792=z@?V3ZxUSuI}pC0y0EU2 zU1jy0hWEQGS5gJF`7VN+RRLRdBJhplSMZrfA?2MfQi}AFtb|irk{d{1SNqr`R5OSH zFRkEKihD}=7)rY3gqKG;W9n{ggsT03B?m9s1MAfktL*Dp?Obb>f1Q-iup*~OS><{` zX)HnK+RHC*yx16-tw&TiaHfn=^_pO;hZg)ZKD5}r6U$a#&rg2xlh-7@6+jZgp0^Wf zS!GlutCKXy-YQpR_y2Kw)OLDBbidmRVKWuEh<`RuV9A!-_^I74AH_aIzj-eYLz=G0 zZJ^gZ0i1xiUY5A*rs5K z7{E=9s+Pia=Z)uu+8bi?5Ezov__EN|_pHr=jWeXdZT=Lw;aYmurMA*E^843C!lq)a zteeP$(@66$YyddaCc8AL>WR5*gblM=x`+32+7%~y2PXJj@pYVf1)Qzm_PM=*TYI7q z3!R_Xps8DpVqcqqwUeTEgT`H%{w(cT30buGK4gQKZCsYB#xGl8I}RM!Sr!?s^EvNC zRnxLh69kQ_-wcB@?Sn!ie|p~D;QKJvJW38asbyrx_KP?}BEx`dlkY=FY#7s9*}_sq zpFpPRmD8l;Pv8q|?4ZA@c5!LFH{kK-XIH!BE>21*lT!9mNQVabQ6)V)hQ{>!D9 zuA!ttf3`^WitIkuEI=af^{W@uXH(yk?9ynZ4y#5;7U}WjST^k{O%7KZGYw`&M@Glo z#!KZ8r>!yJovxTULw8N>i7W@p`peWUbCQILlB<%+e|O#1M_*?U4BsrzF%9y(vQC~; zH_CIydY%=V$2_ZlhCii$u3V>olKuK;;!6GV#rybq>IcbB^JDsKTOZTE&aF@Ii>1QW zXXLy77^=h8_r#M_2Hwa^`@qwxge?HpyjY zdOvE*fZDWh`WsLdYJ*;7Gb=~7vDntKPMV6DWL{*7`aY_&2#2Bh!GEJjk~%Hi5H{}- z%Sxs!Vv5yejLCA*dQyWYqy}Yf`qid(kQ7y;zGbX~Wa<|vW*dC(|Ju$75(XTcQAsPX zQHUHhe~3_te9H(|?*odKa)p{jJu1KcGvuy0sCw0TvTk)|4UvFbB)~>I0dGCSSb2em z`pgHjV_pedr&e2;WL7>evF@$JZq%_>K|)419R-&-`LVPeuq-DtF~}X%QbW zTLcVelcMaKKX z9HXw6qSXv4j4hOUN@At(b}76~7*w@bNg25_q}UB|G0I!yrOS=ViGyeoP6?KHA~*67 zrHV_vLcBO3JuZUxzwu!Ozb>YB@!;Ai6o#H9~IRx{^irAzvpH_x3k+j;Zw zdnhuKcZs<>D^0=_s_mnl1AKspsC|4ySi)_bgq;v}K)`Ac>2NJ;T~~x^cxnJIi_QJ)#$$druedBI`7V zAmTdrp5xFxiIi4)^q>?PLtLYlK-?Weyv_V7NLy8RAM8AMR3p9{#7}F)(>3C03B)}y z#N9E(m-a2QBs?$6nawR`NGfgSu8Fp;Xw=(wYSl2asr)hKZfDl1<}b>b-+Ei*Lr{EK zxCQr~f3cmej%2(nV_H5t!OVtj39EZ?X>X~4h1I#(n&L> zn=}>14LjEieT4#$bOGS|bt8B+Z$L~vU_rDPj~F`c{NY{S3Zvq86~;g8Cee`!^+$<1)%*%fi_LN#@j3-hWJS|>T2?F62t3st3H|A(hk=x?evxOl{ee?hnau+`Sm0@ucn6E{E}zoAY!YBrc4W}h9G&Q5 zHtn-nv&`BEE;+@X9B%nesq|04vhy8Usd#x*bn>?F>@0Wo@+`TmDm2MddhL?)I--%7S(@MQ7BW&8@egSQ7J3De}=onUt^;lpM#?9u~6Ymr~a z!N?rmze>p6S#F?RgRnmi)Dh!Jus=8K&wy{c)(k1iCgKWMIsPLE;LROl;h3}>V*i(N zmiA}J!XI7PZNc{pN7EI%hc%UV?m^H$rUm%p3%~~fcEM=wO_Vy8xG2++qd*xmj zQE72#>I))`ymp;dyWyZ8S_*|5CYN@{zB=HNtmw``~;ZkN~KiAf7{j?Nl#%H&ROxDz_7N(Rkrfar3}m>?ZmD-qQ;EI6uZqoVaB~FNj87RjFs{;W=3&}gR@Ko z@{>xS!xk86&e#DS!Tt7-e!(!r3aIW*HN|r>8`~W;OUQR({Y_P=i*t5crG}TZha92R z&d`@#p@pD)?5A?g8-ogqFgz^mPqMOGw)CecJZ%1NTQzsKCQGel<|5qY@-LDfkH08q zw_!gZx|c=Re4H^0yMrAmV&9k&$iY7OhAq-;!8VtbTxR66zOKxz63SLvTc#B*j9iCt zMXKz^Ay4y{n|#3Oksa39@#(#ljR#XaF@|C?dP4VQdBXf6 zpO{=IbmHr>Zd}tmDt>2MFXIwH@I+d0#Toj$+wyqF)j>rcRR0OqvuJufr1Y2 z+Hc^obgnb#a&mr0H7v(6R=$$>YTmw=7HnQv`rEh84)eS!5AW&KSmxZ02tEW)O*g_R zqHhOVoZi!`K7xx2=rIA6M}N?ifuQ&cDmDGEzj;W2>tTUS=0Qh`_u?9tx7&C`F0%-p z&omx+lS#Yw{6>0s^=RXjiPH0Slp5aPB*?LPbvhmG(C*SQw9A8h^=#w#BE1!vcox$^-^`lQ4_tRpY z@EU5iffn;bl<~@YpKsmw25Vi6Kh8YIs;$H7DF5h9DGjN223zdGR=X7x_!xs(p%HP- z+|-$L`X|9ZIigvQ>ttDB=YOPl9+iiizjXd4^B1F$M^Fs{2k*jUgo9(N5dRPAKdhJf4nRhE398#&b7)= z@Edm)&6he^pMjIskXlt)`^iS4Yd@7I-Ic;$k%vcVCXc04cvR%^_)am8HTUwUS$W#n zkjmeDz&4ZtwqY4y8@>V9hWi2Auokcl8&=kKN}lJMHo_tTk5c_r6M~;)20tZ5qL^4l z9N{?E)FE(xIM*cNoPP{WLj!SUCzWw%1qLEwdd@v+Y!FISx| znaMvK=O4w()$%fgmuq+lEHLM0P|GiyB~I%21=0U3h^|amA(m~inKJUFoW^O~g3X+Z zZbc1kVZOF|{OM+1y0(tx;6RCWgz(&Hy7{pBC1_}Ui>Sp;s&^ih^YD{d;Kj~y^f?bd z(|I%Dt#*lRu9{YvDb=`6S0kOP9)c@&=}m-LNGxxm(vPl95Bs(kt53(uo`>8U@EB`% zGmnj)y(*+%({OR1YIqH;^QbivROkuKWft#2V#^Ep8f8|-L@2&Pj(rfD48dKb(^|LA zN9knozWpx4x?I>mivLVIz?JO78$g?;#)?q&6$=Mw$Y|p*R zy=MBij^M%nn0L0<33$ylrhXT{HXFu%s|l6KG+f7%go`YlO}s>g%p|4kJGK-rz|o8H z4iSVnjdNV<BYD;d?7Ii+UYU-AKpfs+zqkvv6-{ zu1BrXuWhtJ?H#hi5h%uOmm_dj?S?o_Y>3mu28$+cFqa$`p9q2L*f5_+o2!o{Q^<;q z#m2anw@lR|o|l)?1WS%LS2?%8Dt4;oDKw=~FBMpqVGCR-&8{BdQ$={7sg@(Np}84q z0lRbz=^?RB46k$#jP+;3$hYqJhckJMKOF_%2Y{;PGKmEmIAVuR%t zJy@n(da#Vql`_XNg2W@v6EXKmt^7{L>>F?Ggsi&>rC!X8o!ca7F=aBif-`q4_a z97x&x3A3Abj?)PLnHTo7YHydm;kqXgk!m~+qkbO=Yiq1N8q13wx5Ignack6z_zu7iiMGtd?Z^~; znT#0ioMB&6wvixNYGoF7P?P*%Q(9<|qC!%|N3Mm{Zmgz1hE~~2)n{7!zp*+BJ=99Y zQbpZ0eufaus@1^_j79g^IhjuXH-e0{z}MtG@a^c@j8Y}uVRWy}Q*)-#(fRV2!6O9y zOyxINokiE3DTRXsmMx6nEZHO7uqH!_4@{yCbO9IW1k$iHRbQcW)O6~?t^5iPNVOC} z&FbK5>{Wnkk;YX{-JRyGvImwQ_U$NEcZiKbAWLmV*NO`nIkBLoKtwPB5LN%e=8o9a zl$3}$QtcfO+eV}A0>x2kn9|H8>A`i_P5ETcRNDe~sQ}?}p!LSuI|}E|>hNDzd&h!V z{9bKg&Hh)+M5;`EpW<;&BcjGLQiq43w7M<4$$@OGKaeRSbD_#d_L4R2F5H3kaFF`J zFz3yD8Qy|3>%Zd4Wk{otqUdIzs`Ru*WfdFJ8x3W06!yflEex88d?|Y4~;X?pYPaW?WXrYAx$g z%gsuDYZJx91$KkJdaOT<#EC)QnmoYs|HrTmmQRfHt|Gx{#%6H>Bx>jmm8* z;^8s6DkFMhv0AM=KuDW2M`BzIEi)v5CKY?=8{Uc}{n`$G9FGg`^k5w(cj7*~Z0V+E zy=qrSe`DdsYMjb)y!h6diRK^8InK%*?_xAG+u;P6Vs+2uLWQtrqafJq@!q=r4>vVx zYdB0O&Mhwgo--@jLFZ$jBi<)Dk@x_Z)}LKBT>KTMjWyjv9s6*U$st!)1s1W zs2sz%HR)yQLEa!A}GDLLrhFOl^uf4B4W6E59il&xggA_ z8_KAgR_-$DINxM5i(U0^23)!6M)(xynB0u)uHU^bIoRTMoRV&NJ zQk|#zrUt>aQ?ivwTO@7a&I;(8=aPz2aOvf6E15hK7#zea6^Z}F8 zs2)N+Y;8g730aTQt7@m|Q9Cv^L0_$YlEcWnH{I4*_bOcKpXH1C)UcVzYjke9SVhw0 z-LlL1r;kM%_SCL(Zj?s#xnvq%DI(iSu?k|Zx(L=?+ssqPn6J++@l&DG*uT(`EgF%A?qg>xTA1zluC7eC~oU@F8 zS1D=yYa$8cuFMQvQ#)PTu3TO_{aUypE-LI3n!T;7hMt|7i4)`h1O8|8ofZCxxeqvv zx+nO|4P+SgKj5V*iU$dJpj*98SHfx|>vJD)2QHT!tl1+u_koPSP;&b^xjFqytg-^R z!G}DKRXMp2rLFlAr!8qy2qTNLIax9zBg9F*Vms?0^9AbIhhTh|i9zfJBpQBam2Abo zs&{WQAqqX}WvDNbd&N!edT;cv3D0$H#JkdW&L(XXIWd``5crz8%$akRgHuz&vs|0T zO-~P8UU$?#YE!v=`eGbki_vLg5*M``=fq4hm#wsk!v@)F&pw;V=Jwen7v?%X&sm#Y zKJ5PCXKgw-$?wQHTR}=x(h+?j3Fx2wHCH77BnMgn9 zv-d144VT+-!?1-O>%v8de_ZrdW~ud)QEhXqd>_M&J!)4=o|F0T9CK9p(t9Gqgt>7o z4tJHtgj0CAYhw*XxEPHG1T1*1t%ZwX;d42=UzyY>YZ1kyiI7Yz0k$)+Apw}MsxKkd!l|eFa7L4M)r{A2sdk!-J8aaqg=G&Xg0Q` z^H~*av`;@2*kK;vz^l%vet#f$!aK3dZXmOvv4Y7&3ir2>AsK5VTue{MVUgF#)p5x2 z23V7+XZqzvz1|MoX{QpA|1(z(VqxydQz-77dEUbLNURu9rr0Cb=nDmnZ8wqz(l^ujh5S*ZzLBDOGL4 z9eJ0P>W{Gkud_bm)x2D)8Eo-T8%bN#<$mCw9{gRWSg07=E|)VuGkKkUl~KQrU(u}X zv`7A9(@3+s?oI#wn;x*&o#isFbE2T#luGpUo&L+Ps~Ns2#rhZu1)rw&IgQO$P)ndQ zToc{&wWPY^{z(#)G<{d#x0_}R>$_E66w@E6Wa9oMp`0r%-GT7 z*eMj2vwJ%35}WA4P2|7OY^MOSbe-FYz{s}ArlB;*^f&zFb-Vo~R$w49ti23BDerqq zhqaqSUyEM6ScBsFT+SPgF30)c$!M@EnzKKrCAiaB`<~5iuMJ#1QGWb~{B${D1_4&F1 zLqLHyhCguIx|ui?3byJ|x!ZUtDJNRNEltkSJ71w4_e9oJkSTO27q(P0BF5^9Lzj-j$v{tjs?$=1S z7@o@v&rquX7*PPS3qo8uG8dYXqXnNn}cvpTrj&~zhEJMoo zkBFzp6G{8jJCq%ARMtTCgX zJv^C~F)^{+P*l0fe>)qsVz|0P95-U^=Fbob`Z9AE+UF9M5Gy(FZmvsLdGFG?hdD7B zs>X4h-+eaK<>yAtGq$`Z@x#TQUZ4vbI&>P*F>P$(S?gK+>FUzbEvxiG63z$z6Bz(vFr-_l(qASiV7*nqgvRuleJhZ817@8KMbCj zwy?I^#rb!vzPE2`VgI1eEly_gI=7Kka77zh+P&-BQamv<+Hz1SqOd@F`WB)Fm*TQy z)CSI(=xZ#Mq9WZ1TWH1c(6?0_r8XQnSSYpnx+zWMWnB^08fVm(CJ~TF0EEO=rkHw& z7a(9zS}f|p5fH@4`DvT~vgPKLQb`l7U|YzsJfy!OL(F*gtRnTokj4}D1}s*Qqs;kk z#?&&J3CBI_Zb3_me>6w4TtRUsX5T@Tc4zK7vFWZJ%BOc4Z#Bu{RVS5|XOT|z;F~n} zOk5UHb&t2qz1HL1v(`;c%a%G~OVQ$AT1!#fJ7DM9NaOS*u(j$=g+!nF?H=>%J<$%q z)9PmN#89@}oGLX71-e-iY^GDi@De2>YFBKtC&`HuWV<|Pu;Z`NNi&_x%^A8WAS`dJ zA^OrzX%DsMMuD7ts%MX!Unz~QN#n{1$<~8IXR(p&Mx&0<96P*H=oX1EG(!CwVm^)n zLq$&YLtaBGvqZHnPu)nOBS;7cbjuvIXGLIN;RYj zr41@@r{{CG=HYHa?7#9N_eHAkuIO{K=G4zL{j_SUUv-63tqKz$2PwqJUpyhHbucPX z9b5lJBU343LLJdcvJByH^xM}n%x`5zJ18wqV%imc8M_BK#nR{E=&YE=N1FFZwAC~( z++I2c{RX41pS1En``LZ=hW}?j`*YR;>}T(K0}F{bGNJw8dpV8SO%vMgobbjyaiG~dm+eLovB=Ffd2UW)%mQPKvCZH%<=JH8 z&zuvp!-%l<*hzk}&Y9Dd7oKNy8Tn0tkI7&=YSQS0R#}0ep0LI6eTBg2p+8Z0_k_>z z&T7TxvHL_GZ;LiZ$=EY4LEQ5weF{=<`46!NNFeg(UQ{<5+k79Y; zE02|y$wl0}1natJ;PpttHf;6ni896JBm-L%u~y+;y4FnWObALj^s-=tZM$H{szqNnz(4b6(IHb_Pw>1zphUif}2`y;s?6zp^(JM)5CD zQNs=GI62W40=EWdWU+F>_e-Vxs<}oITVtY#y_~bzgqZte!^)*n-lV|}BgO`IA$X(B z;SAK1e$ach%?#|V~@+%7~{zbA-z)a>las}6PUG!gFDOIJ; zuORA0i^=GlWQ10Ip?Z=KUBDSjd~S||nr{o-OyELG-QlGkw#~ZLw`5IQh|+{DFE)o% z7b_6i925LF-rXd=mAJa5DLL4fyvZ|tWFQ^I*ojTW_UR>dD$Mxqkim;9vmk~7F?4WBjg?oA(f)* zkKuX#@WG2~u^>hOF=B9tXEa2S0fcdBgld4|{!ec{_mf+M#M`zS&tO zY7J3z84#CU8lf_cP`WoiJ&sWNUn=RR&ynpT{(Dh)fU86KwLFA#61>5&qIgE^mHUU$nXg&+;m((350&a&QRQE(h^bK%5#J;vEf9bQ*}$mqzOapv;0Z-uyF` zEep^%<*zw2c%I+2O8pB^e;FKNxdm|+h_i!3;AtDoi_QUY?$UVSJs7;Yz4>fa)Fx=Y zd+;nj)c`f;$@2W*5Wlk^J_F*j!6AOGA&M>lapBTv)dOV~^my}o`~hpO?jgHT1I35H zy|m$9$?C6z#^w`yk=Toa#`gCx###)7Tfz~BB#TiU)LHuuUiZ?Yxk;N%4iPm#KnFXi4`KSA$b$W2L zHduwiDDp4CD3(|de}hqYEwn5~aY?ksXtd6G^Uo#N6O5zg+~9b9h;E2jg!=qTaEjM0 zh`+%paKrQeu=hUTQB~Le_e^GzOh{k`2oMA@3Md-1V6X-UH9<0h8cd8y2sXjK)s#kU z5oU;52*H!oOirhN<+k2i+ghu&wY~NJ`~$T@^M@t@Eb_;zC|J=_d&WaGASDAv=J#3q zoS6g!?Ctx!@B2LO^Yd}YIcNW0d+oK?UVH8DmR__Z#To0hnpk?^WB=Tbhmz~#(^sq1 zDs+HqiL^M)sJP6Ek&qatiIHVh%aR&rtk!#I50oMeKzewaU*rAcMMt!YPkP{8|J-+n z*8JVm*X!R@evN-2PZ2GrsaMd7kq|GZiE)dHvCtARXRP^jRjv2@bKe_UtuyE+ahx^j zXG=dhZMELAVw^?H{9eUaXo;CKR%;!x^uYW6x$h6H)*1AZrBt4$#n+(BvWPCXz3@XC0CS# zDpct#Vx~vMSZIlvGm`5uV%6z^6LtQ%7`ML5TeO&kh#q*yKlh!a7=DMM-Z{NYxZSGA zyU_Uza^)H;##!XbL=|J9C0EW^)uZ?`>Vd!d=l*pl1<$bV*+OJ0eU^34FRU16kt;1K z#zIT3oUvLWl>a;wm@tb2S`jI+p<5B{OXfhAYYSgl@S>4Crd=l*?Y zwa&2a`45$4<5|`{_ggW}B3G)cYFTpSjMbW{s&&Xe_fV3#kTZ>ESopZCQqQvRdFP1g z=d%cwKd2ZBEx~fedObocJ@60z+ z)|E5FPhL1h3;2W=1V&k$KJ)reI0RM{i>X^#Oy$(bA+=7s*Rso=HpVMf49hNi+8Do4 zF%~53vN*{Pwae-q(QnE!uR;z8cwfMJnKo30C#n*v_r7og)d)CG8+sF=R3VUJKKhwC z)&EC z{GBx4<-F(cp3D24y#L2v(|l|9r1>79jO~=+;@vXugJw}#6`9zw4<|_F7oDk(kxd0$ zlz~qa&_8IUr32c77vq8g zXoFz8TcGll#)PME^?%4^{?3YKzG3~Du~;*SMOyjCNp{6k6EEleDn^sS1Ok}FsXACG(P4a4rfwk=%VEEc?K=Tjo-I4TmBKS`g*r=`4`N8 zAM^lx(!*xTtPON4IA~q9HSwu;v*RKATT7=%B9&Y~?dwwwS#y$3Zcq@ve?ikezFtxa zn)ZDpv%Qg)PM4G_x!~T{rx|6RPT8JJxok+vS&~vE7ifF{0R=0`E>mtSu#44_iGxED z&ymC`2LaFrA@WUGuGvi$2cRUX_jOi!a+FLhRBtM;-05C);9*}$f94-mP_r9^vvzOK z-(um2`*%#(rM=s)b#j1rMx@Z~-x@lq(8d*l>qV8Dq@U$L4gYX)kX!&QU4jokJht|P zWER>_Sw=QSHKPsk8Q;W^hy%7u5P_>PH1V8nJj+K5@Ao;F6j8$g1ke<}Bpho2|EdB< z8H-6_v=E!n5ZNhISYsYviB@SW71^=O4dLXbjT>H&{xbZn$?Y-NX2jLf*H3C@ecwNaHCw&HMg>!Q*y?Yf20k4 zd_5W*RcXijQzG7|{JrJ&x8JF6rd$7W{?SU~al~eIEd?)yN7TJKON&3i-{!BZT_2Zf zsGAIh>Pw~lrN#q^EYoG{!eRau0w$?I>)#`xHe5AIx?sqbuG-Iamvi%x?P7?~tPqAP z@!?l!Tukq9sAmTrwr|z&twJ}~9s}{n5lU51b!A36F>0!B+XB3cVnWzYF<*Xr0_ON} zIrxz%Q_jd(PI_2*RFQd(BF^gDe?OdOR*{$@bbJa>er(iTA+n4vEc5WwmAfDCy!a$@e@I}|M1GoBC}RTzVNJ1&kWDc(!P#=;LA(ZF}3SF#&TFyA+X_cuI}

TB>!5Sz@6F$p ze>6WH-^u-{%t-HZc~=MQ(nS?i=oZ4`@%QK*2v+a7W$D~QX}&UJM4!`POX$0&cy1}9 z*lgpMO3(oG=%K6ruoPl5{w*~6D&tYi0o0hWGA5qdL>QN$YdtyIiJawtu9_CV$l1j% z;3g#;PR+fmJEtnLp_DgxP_EaB4_8S)%mMZyWG)eqaGQs$8div-<5Gh6Ba4aWgi;KSf?)nt4-v6{YnjmiAGIjh|%m zN-4l>ZrdSt-jr#=E5ar5;8ohHDbwS@G=Ff)^p%&wC3@DgVf;&kO;$Y%pNzBkWZttL zV*%Z$%fk{L%=J=j8)3<2l>GKPbj-x~p4{)2Ixs}avh-WBW|w)mN?TZ`tGw*@r3_9p z(|#b6EP<%H&KxQQ8fbvE{N|y2Z3;F4^D%7tXBLHpHINb<5k>}4hbhdhb*Zt zjkN4%cWJEZnl6h~daS`FGtO`S($g zUE$|<$iEw3=3h|IV(L%ip!)M@ulm!nS^asUUH$pZOZ@rKw_E!7qYL<%!Gl6U6Psy| zs*jC=7H&D9B4trH)#11rU(^H14)S23pK(PsmmCOAbVOAfWks-}QD;UA$g9x7BEy(x zAp<_#`F~nsJoIBS#Nkzu4jTQg8U8em{#~Gy)wi-iN>&+*(r#d!g=l`kJm|_<})Im`H?EEXFB!y1SY-*)uQrTo&MyJ259Cb@e z)rniOp(Z}(^Y@rSDbGQX%$i(R_>P^9SZT5M!PYW?sUlvL8@CqS_Di z=;RLE(IJZak3S;5O`S?3hZ>MkS=eLzg2>f+pZdflmCS!x$An&?v<-K_!ChK=c9(H1 zW`DZf`sC}14*LdK2$4oFgu`?vPDi+Cn`0j<*d`dkp;3>`-wpot_3p=R zQhz<>yh>vV8Ahsrv$`e1E$H)a;y%dv^Gop$|2~CR#;-Is@K^VW(zLdeUaNg7B{W>? zO$na-K{ek?O+fTpq^N0awz{9tTb=4x?Pe zB-hK$Bpk15z!(g;(wpA6puT2Bf< zV}Fb8;ibGv+a3oTIIBJ*z6@pTCdI_wmfsPU(0?BYEoN?&`?Lo1-5jTz)#khbpgE3J zT@)!f2>x_gsj(QsfJ)D40&X5Hl5>0)>J>3yRt7j{{R+v;tMYowIKOZZKc>NgLZgf- z8r9>tgz`8L6;3ycK^!i!+cA<=7e^1<(gNy~=OJ@iW##GW8yar-lG$+2%QAo(jsVo4 zb4cVd>4#7B?u0a#zSj==5`^biC<8W)W}RocQHHXOZn)UG{OvCc_vjOenxR(ExRme= z&eBFo`ivJuPIS$#$!TzL1mbEsV$I47Ll7J5$C}qgN{$FpMs}4Uh^H`w+zBv>J_ZSy zW*WCk>KW!$g?yUs?^=1jwmK&+i(Co3PBKv!#@$X8%rW()dRJ}!mb&mw*PnoCVc3+g zvuX8!YGR+=#3igelo!6@EjiP0@_jTZ)DSV75H*6WQ{t(ldxmoaY544ttkC%^XD%ai zfCpr{9YvVCb)*?((T21b-_6w*zob4Eak|Ay->vQ&FV6!9CbU`vWwzFE_{%dwCuet^pK>K+aBvnyXQIMjz#7#q_8p=@u9ppSsLy@5Y+ zQ2tT=>NVLiP`<~bv4adOhzh#b|MtpD^_0*Ipmjr8cOL_NSw&l~2o;U_XtMU> zh2q)O$8fljk(R$j+waWm2u@^3vVP(OV2c#SHLzS?a^J=Nk5*1KZ_}+xbp%Uj(wLT` z_q$uY=I}(!U`cCMdL(i{iWy5WO&eQzbl@(knmlCGsOkAO!}vF7!1OHVr;##dS0bm- z3-u>zTW>lqZa$;<@1LQ46B`yb?SF*1UU>6Nw7*BTO8!5f{mTeOoA$d{J^VjK`+ujH z&!qj`>;6gF3!jI^80SM%o4i-|EAnzbppsMQ%&W5`OGb@eR;AkO;drN)BQ%(P&=s1u_JO@fnn>L&Edg!&WAhd+XR6_vq?)eF`HQwER~~OtrHw=gGLYRa?$LG0-Sdjy5vYf% zA`1(3MF_%E^kc?*Olw%!=DT9y###EpX)RmUFnG2r3R^gVAm&1ymF7|6u zY(>_5iXKvOn%E1(O{4*41IPiN0`AcDN`f%zf%bx#6NI;i74E;i4JgqJq|~NrVgugLgLOEHQCX11PTh3eJ<6fK{4siaF3*)opC}Jn#UsV^Gt{*ye?uQa_?a5Ly zav1NiX~2#1$wW{&{(|cL4<4XdPs$^<8>{Oj@bkuh6M*F!J6g4#LOr^*3qZseWIk?2 z;o!eRZ<1+JceLf0sT{mdFKTn5xBWwbbOfiF8FTIoX3i;2d_Sb`T+lRoM(}vS_>gl! zTT0Q~R*8O8*|#BP8zQl2|D44QUhk$3?+ZmO#{XFd=_D;bW9B|Ap zH5wZsR*9S`2s^p&9E}1L%i;llz_&b|zC|pgT;8r-i{N2grG(G3rhi3s$@W{q7sku? zDw}1hh^j8c%E;W?C@<^5q-CxY{Q9H^tlH=ZhZ5xvjSASW3Dtg^G>im&@;BewXpPl3yV|CE9E{ z{e0PJ=!D317_S{l(&?~ZDnTb%{d_i^bhPwS>GY&q(P=LkoS9Bd5-N0>gjzC4C&5)v zbo!b+2%TPmU}vGzDTKKpNf=O0&!-}n@Vl1Ze12v8D)}wpx0IiEQ_)P#$PHeq8Lr?3 zT(=t>r)H2$-a`|$1-Tw`EdRQ>XJ|pL(;UXXxu%S*H;C}uO6KyhKu zB^bJ6A30=jOhjU()OJMzIiPtinlQb&}#+Z=Ni zg2&~o_bi^=slsIq9xj_`{E+f&0z3zx76j1lpY90#&AX{xi`9F-y@?FG&76Zrwk!zV zti^5$UZcfsh3>JX-WHSZdXcZGU}?x#*i!^r5xExmqL}b0eLCImP*=b6ES9^dFf7j= zd6qo&GGANDocvHu(*w@SL!%;dQwSYKfMoJ5{?7S)XbfSqLS8G3VI^T^XwDtM>^WZv z`sREsm^CMahHzidJ!esmIh6;Yl{ry0=kCyOX$}Kcm6pykLtZvT2IV49|G?I73e41EcdWUad%B6B#TKo( zCU~V5D@wdyC*+#fc&-+^-uta46{S4nWo$f61w>~2gm0I(NB;!r%Ike*m1Zmk_t;1e zRti6d4wMo1IE9mtuguMFuc|}U(_^j0Cpc4SxSP8GI^!XYhqUhEflJM?&AZi8p2?}pore8ASO1tX z(sb;;U~1E`MO-CBn$+g5P|D?dn~r@kn9+2sNZsWK_XES_77I=HysHOh5c%Z5_JlHa zU+cW9KfxfR*G|c+Ey#QOXlGVvtc`ie(XW0x;@Q%p>(4 zvrmqq>G59^_Fw#7;3v;7+CO=g-zNKSB24GrER<0#fb>A$x=&C`J`Wli6Z7ZdE2oQS z1GUhNs&o(96~qeH&Vo7Drw2248sR_zV$Ere6<1fOQGu@oQaFo?1}^6@uM6E+e@L`EtehNPRY)ReB&grCkHeGMdJ)(u zF}-L&e+4!*2GAaKwRU0qd@o7fj;};z3d~e3j<1|nT1MW_k#{M7w-Z~?JIhNA4|`a2 zv$lB}YoqDn>pC8C;Zz_xKrHh7=>Q@KF?&F6S*aGWta znw(xL44Gb{DbleJm99c^JcZ`SUQ|pk9WWPJpWTViTqjpJU|uUbRl7`(MkUQ)V4C+2 zgq|;rH79&Ja1)>1-WLi79?^TN^u}DhM`g=~@vb$aS8=L&#c)nT?{aYS+AD?O#$4&y zC98!=rQzmCtuD7;t(Rv9rZu{RNg# zNQYU@(HaXlE3A5dMlg$In!a#Ww{u23P=M;dLQz!ylSd_|{$y(cjlc=9>}mO2fDl=O z&l76z!2(n*Yvern=UgSN0lRUBwxdx#!pY+*w>gGK?9e0dd(07obZT25r!`&rTl%j{ zFUwV8ml|fQ-P%NB!)3W_9(s%^=*?aA&U#-@(KMN%ne=2THnQaVDH5cSO}+tygjfbs z|G*rv=4Af7P&CoaKA01PIT_ruHX}5u7&anGjJ`4%|8|Io6A3Y%Efpg?>u5zF6cNCR z$MbJ`aJ10}9-&Q;EFKez8tW`@fQEsr=`UhsnH9=zx1vQAM|1IJ>wHpkQmB0Ru`!v6eZ02zi~qwjlI-bCR|&2V~epw3P+c zY$OEWcrPm|E*|D?@IT#VjDxzelDD^8%F1M?C0hrtDaIZROEHIRX)JStSBwUAAMIwx zfHifN(`nwoVjBXO#d*tE+SX*TW0InOgdqt4CZqayWGsNhS-R6XgWocb?vxBj6m&at z%uN4BSh`7`;+%0CHL_N5Vz&2Mb{pHckhD0Tx?s;{+=G*2uOo-rvXa|>#xhglOgw9x z-h+0WL5B(L>OEXXgHrlN9Ks*;c>nVYKn}10J+*0#!*O-fdDy7DiM#T&{cGy9*qX>4 zQ#{_5r$}IOA44ON>%7y(^uc)i-NO&4wQ2kL^?`5K2NL6o9ar$rZtldpb*f{HL~CrX z^B&(J8_L{;2TI#V{2Jf9I*w|#YSPu0GaaqTf!1*I;K^Aa3o)yYmbZH)*BzJN_k^H(WdosH5%o-Mh$LF-LIib7Qrn?p3 zxysEien_cW474NSQi94HP=Gq`=y|wA$W3Ceg1E;6&~Z8Zacl2;!r4=dr=b9meUROn zuxp~@e#Wlo(EpUpNU)F8f7q(z9+Z?}?Of~B>GVGBo?;%t zCRNK;lh}<`7~eijd*h7mcaxIh-FM>gH$I5&WLT9~{vPAGqkQSLqY-J>G7G(hbqc>A z@A{Gv8~WA>K|`?+wk@yz#QKw`DY@D-b!uyStd?i2Yq`w z-ul864{__qp_yhmWuzD&(_pQ`idQ~z} zS&*yB#bNa0@=5QQlgOsZN;rvx<&|#%=g_LM7a(y^GLt*;*kIN!kflnK?oVyhSrz7avgFmG21}7k7yfE?@K>{4Lve_gVCU&7MKae$KmgK%Naa?0YvH{ zgTW=ej)r%csO2NATEoZPe2h2z$=XRk^f8e!p4fA-<|*Sisma#nq_qcqu*qOw5kg-~ z$GJst?#385{5jcWb#KW=WTAOMB+`fFhN~yoH8f-wx6=MnYTN|7v8An7OsNGVh{=0m zW=U=+rIjZfZj5nXA42EPD*6@5vlS$B-|32;c~a5up1tTFJuswb?cfxV7y9-pW8FMu z67z5sU=-A8G;Ur~)im7TeBlsb8 z&)-{66Zbycb))u|G_5NmT+`RqF@46Ij0V=39hx!2oXqEAewZa#Cs=`!a(U3}*zsTR)wEBdD%PLCt8B^JK z5`*yXS!9XWgl6sYwf!G!?dj1&e2a&Uk^Z?N8ZpRN!dIze3GcLRWB+9&c2y61F&T4~ zg|a{lGSk&HCJ%S8GuS+wT*%_T!9H*6g^lPW@59BPz)QkVmnw$ZpaKb@XN5Xr>~8&O z;yWLMAN~tHsKth@m~z+NVUnK<%<|G~w89ZoCy>b5{N?Y<`1mj8Em?hx$g}w1#irGt zID#qtd)tanU?3SQ1ePo3S#;GBaTgIGnMKks7DASgFH-689}nK%v?h-G@Xh|?p?~mN zW><9T+K-<>C0}(ZG_|)`=^Iy}_qWAI60K?U)MuC%)Tf)1tjMd~Xg;Izj)y0)b=c^p z2iCQlm(-^$GN*#X6p`W$Zex85?lgTvzsSl`Y!PZXVW|cvL#$LhkzyZvmdq$jgzWNh zgANQD4h^(rUe(&(hWDN4s@Bc?4SgBw#@|6$ZDYD0C~VEd)}zH-q1VNlbMLjZ_j;cg zfPDJ(TxFDPbP~1I)#keD8@*O8-`F9!TuSU;5EN*2X(v)c%4U*J>U!5A+lD93Qg>r` zrqu`K`F5W3x4^~^cSPI~hO5K;Z>1V(2f3LT-Ix|g-ShW`S5tAp@oh`HO50>k@Rb^|MA=qnjQ%}%cpK5xmDvd8EK8&hQ^S&@vf91AYjDQr|WzKK9=Hg&s zTN<%vdN=h(igswRjFsafML*GE<5!N16#YT|W@yKjcw4^47z+(9MUc?zl-_J<#!vuAip*I+W0-e?`6f734(mrB1ms; zk|4Fpf|(@9I$jk)AP^hYLXuKrys}{`T^cCfApyU|U~2xAiVpqwhJ4&{%10MAW%Kt$ zGj5XL|HTvMP1^ZdU7aAr&`h3GAqWvghoK>U(pOj4yUYW6+)X=1^ULKoo8LlyU*dNk zzX$n!pWkoz*+a7s1+22lcojQ}o(fdZVa zFM2C`C7{Hi(X<=Q#NapqyO$7}2RpU;ytF}Fn;?1S?oOs(-X5!tNW!!wy z*RImmngQeGISIYzt%Bkih)dwIn?4rvFmATRN6gfwkMlyqCG|*^nl!AHxqON0Qd3{( z>up^L)dDZ!9p(kR+o}cczcfejZmSl&<20j#A z6Iqv!=1Yi0m%sSH@~nnbf5rZlsoFNTnNtZI`aUj4Gj3fC+!WfS&iIG%g-`m3O%UQA3z8e{p+tpINA{j&VlBcp6qiKZRHFjTO6u zH7;QM9PM(dqjNe8U|x8%DK!iRnvD;Id7{C2UX5JXDz2s%DMV9@ z`w~YOP$FkYrv_#TXVw^?_0wGdcBXOL2(vOLeDJF2%OnuA{fZ;OVg8D~P^!P=AaIvt zyY*58AY)%vI0uYA-r$DWLe$VWR1QYfBs{eBiUX}9i{^(}?648kdYM7l4^Kr`Z zHp>}=Xf6K`kz8*v#-a?u zxV|hCE3pkYZ;QCIQTUlxk`#Vq-gx&r)dnF z=#il`J~EWX19;sJq48akaUB^aXlxkYNe#0maFkxH@%!rFeIlz~}+UQ3*d z@Xr^^v_@w7otM$sR>=yPaa z%ywW`BqMG*Lq{s2(&8G(FmQD{oLp?0a5=>0O9Z6~>u=z2m>nJ+`MMm!irkpl7Eq?Z%4;CRy*^A?@V^E%On7HZY&^=W-=byv^4Wc-O*d zS?nAZ{Kz?9RNU{KvHCrMtg)089YrF_Mb0|JpC~)Ooobb{oG#)@sO^+)d_rLyuWaJF zhM-G#asYVgPiXbhzE(~;FADR|bNpkNTLBoBNFh7Y6Uj(BB+_*1V{}U-OPMUmQaO$? z9;XH}a*Ze1>k+luc!4kI(tsW)McPtW!wK6NRwQ8wmPN86@PE`WmNDBf(z~&TyN`pZ zk@-$DTi<5-yc@guz$=^5+q8~cI3s^oTOr;ctzs|e%x}Lzd-q)SHS%_{+m*K!!HppS z2`;vTsZCHsYhQ!d_xCn3E+@i%##|~UYU85ldOA31c$nIRVNPp*(BJEgTtTau3+6+; zl0H{w{~I!8lyGaMH#~}<{ypTV#R|PzpLG0ue5TP{joa7bA)xNX)Y_R*_UoP64z!sA z+@E4axRwZ$d%BB1aZY}X{bN^a%_j(Oz2v~;p2^!YJN}DCwrvAYxu7N|$j;q(6m=b*sNy&Y+(FugL?DB?3@VEa>rNtF4&(J^C zKZ3d*TPr!^|rGcIhH&7`2s zcC1Y0(o?~E&}KV%Uf>Zo;wDZPh@8NXz~}|`!qt5X%1T*j^n7{|H;E5ZIY2Jh;0-4* z&f?b4@lL91s{nswzsSIK&0FtgY~VT}Inn17-C6fbR^0w-fL{EJF*#6^yB zW9{fpRpDYZyq47mgZP}a*2Jjxc|xoXH}r}uP&MDfcd7i}r3;IxI7cuz{N`i*fWkfF zW9bb!xt`qLz>;Ch#BXy9395RGzx>sfi9h4Z5Sf^ihHDQ_$BZ;&C!vH3+BjtmM?qu= z7~c2{%klZ)$W#2$_MeOMb^G{m%ddHB*?WHqSHp7PbDMt;+xop6HjPwyTs^Lx;g-!r z$a^ENGyLewlCa0aL0}$O-mH67{vPG@u>9Q;Zkf(74nKc@xA4Y&{EIzsxV|TP7j9a* ziliOO@U~njgPb|+`;2J)Q7di!(LXr0{<~jqetrgd^#9G(5w;#-i-5k>{}Fd+sw{O? z2xszc(qb!Cj17OYMG{zF3#}TMGqopP!Z*$lX=&$=_JmZ6!|bITrRHhr%amVg^fFmm z$*>ygR;5)P6E_#$}A zl#cve^~0+B4~1KL=?i^pII@AiLisf^r^PN@>8ihQk@tnHmdlvIy)Vpa`5b@sW8sz^ z#OwH5N>#)?Gu$Giv?wVj)IaxQvg+>GpHix;Xx{bimgyvmxLc;N0S%3X=B}Pnqxc8X zFOr&z>S1tyhxegprOTg}7#v|c2Nr5MNKsa|k+hGO=%Y+S{zIYkwvOoYJmOLK58zHH zwEyQDr6Ytj)B~(>J*@F@=m6|+v)z|NnIh2{(kCV^H&)%kk4l}&ZEmnS$>xdYP{8p@ z{T#(woq>*)C)Ihw`_Q+f>Z;t|3j0qx63r=53APqjM_w@fgu3B% zGW@vSV3fWiyiSIg>5C{f#?ZCfDw8xR`W_)|IPwK%2j<;oFJ(tsCLI~CEW6J-jU$v`j2^A|D0KCNTcl{%MB+!J(z<(X{}WP@t3@)Qlby{fdLoh};A^2(NWdzCbC5q} z$8#2Cc$*JW80CyiloJU!?Q%NvcO`ODZ63WVVD_ps8>D*`rF7Nq>;1>QEpZqJ@2H3{ zkk!>v?^4ArmM|$bnl2VM?o-At`qfNb4ZA!wN~|I1ZFxu3S)1PGmE~2VS}9 zpOF)zC@m?qEWvBuFPtqyC;X_4rs(;o3%0n8JA=0&#i}q%>^VC}S(!4BeuX^qYRllS zQ)R2Lku71RE)*?OpoF7MKtJ-xHV_(-K4I z(*mYG;!|c!#OE;Fl$F}S z?SvnP9~Jpzi%qb8!t0dS#3Gk2^1MaHLL?#*BCi9C6nS$$lN6p7Pa-@Ids}*;^7)oj zi&Q$Te4;Wpa?qS1CeyFJU8wXOzG=r+1j_;TLTswc5u4o!v8iINQ`5Wq!Tu+t3|Eg5 znJTI^MT@X3vU5GIt4bp-pTb%^i@d$f0~A93h)XMftPpnoJ^68Gvz3!dHacE}xRf-~ zf`mdQEe-hly)DC~uR6o)P7#+Usa<7L6yGEyracugR)sHhCGzvsYykQV`LYQ(L}Uhw zlj73b(nmsOmzfup*;Pu9lsMC5xOQ>W-gYX%{U_df}eWn6G5GoMFCtKxQF(zEY#=j7s}= zbYh+|Un!+MF<%W)+JyperDz_}hpcHxl=h$SXe;fO4lDFgI;=d<po;EPBZ_N*g=DBL0gjakM6wiiz* zZppc3wpt2W^Np>hGe2!0R>Zyj)R|_g%rrX~f1jFZ>UI^oDQMv*1&0wbvRnMh;rN%qwih8az0f}byoLJD?B|lq5mobr0 z(H~LsjT&@}$#*4ILPfVga**}j=B<2}3A&TNpVjX&w$1@t6OqMv zGPG>Qw*}iMnnPolh^7ynh$K3~$n>f#R72GuKAmiQW#SOoXwgGg%SCka2b6?N=A`xI(KjelBy$Sn|4Wocbh@&wTG|8T(0CfAs$mV2$3^q+NEk{wxmNN1h-!C4 zbyip@E|#uIm?s<&S)lhKb1|YEE29I73s#YVZNH z#WW%Tkt(!%$tC&*A0w*EOkI0IN999+*Np4w4B)x9MTz9hI zRZ|5$k4;0OTakD#3|O{VU6pN>!nKn>)s*((2o@@nhiv=!4=Xc?DomM4tiq&z%2Xl& z7)h+`04Y-$hT2v7c519EN?h;XC}i`tM5WJ=$b;M@8Q6Se_t4EbikDacsBW^DMI^Ee zp@c-BXN&p4h}O-KpW(gBe>5M8zRW`8keh zYQNwUDyPQ;gJVK|>Et0hDBjFlgjEJ>Nz*>v!Wg@_XIcvUf(;+F&(?>hjV(<$4xfM2 z%w=65(}nh_b-{{w$9t(RZfYgoE{SIis!zo$i+8-6>e``q=5_lI*T*Luoy_nM{#oMv z#&4vr6q6#z_n+7CL8`(LwmOzJDV-m2A*0E-^WWK!`KGGPeD6kf6GYbc@31;K=qi%E zruy7Pc^#4LNwd|&9bPAF;{8Fpc6>!^OP6}?;5p>M{w7{ZI40ph+`dF6mP^)l2uIWWT`N-c zxdZZTvemcmyDiI}{-_Mn$&X6)cN=;{R_D9_qN{Q;yTaDOW5GhZ;8%hptclPn+Wd~L z8f7ns07YksrgTJo`$tdXs?@Ym+UbZaX85QnL(v*b?wj`VXwDFpwzLSFS7bJ~hv3WE zG}Y>NOe90{(bxT&+?m_>HxJ9PykXSK(>wirE6=wUm==@OgYIuRbjF{T*wJ&CdG#H6 zule6-n7w=k%S!(%!5MIk6zjK)2%*#k{#QaK0pm^%Xh;uOJfk1xZs~UujIuSXOdEw3 zpXBed8D-87&&DXJm@lMP6sHNRs1EpNS>=GuDq`OL{|T$$(KZ)@j_`tcxuq1(p~-XjRiCQe%|=?S>KFja@im zEOVNpku_c}GPmAj2e~^}S9^~z)`Gk~E>_nk1)^3-%WlPDtkON}z|oY`OKUJvb3gk>eM-i#?U73`4}yvlyS-j!>Rs$AhW5ba`CI&3!{a7wsqKFw zf7g<5rphco-cuZt$UU4vgk?744Cg zc!F|dOFzcEi1+bMyc%NKJqMg}y1rx&*a|hAx3cOuSi9253b$1^RnJP}LTaevB!q~r z7@&f^;cLRzdGzAggf0DV)D|Ub>F;j1UVjbuCIog#ufE-Xc-7^4M8jBd^y?{ar2(8|0sG$vzC;#hY26Tr3_(C7YS{O7`u(bN}x5GW$q{ zPy9-+lvuJ^pSLNt+sG*1pMSKcSoYi;TBrCod0PeBiJp#ReHYjCi2JI@jT9S;WUURC zJm)Vy(vS)ygUEGl^*&IZ+K6hl?wo{?xYMhx+(^Ce@GRKk>6v8 zm+Z?toEg)*b#7F7efN9X>X=JXgbpsp>9*HZd_dJpqh6VPc;ONtu!%31-eNp>EB#p` zJ7;^sp*<+JHPp#qhrH&caB(|qor<&O%1cyqt;>n4R%y9$?#+mk*yzLBHnHG__DCX$ zkE;pGr-styINiq^7L=AV()%+@RAKw!4CBB;X3E!=UyL()@xaOpaO={#DE=j~b*+Ax z477?pw6#4nj0{%(fq_h(HFynkAqJ+1=b(gM(kt30Jy9XOSJS7pi*F6iDtLkx@6n6f z`|sR?%qxD0zpkBlZn^YVa7#Lof7IWxB30{gjy_6Xy0k7_I}egryXT0L3_`dl!MeRj zR=90>>g?4!Ruodo71FDmwd~_M5q(eO=NR{?#IVRpZn%%!;&v?@7~SsL7QSIX+aaE< zA38(tk`c|)0B?bl=ZpJIXagQl6$e~hddYLRH7RF%?VdjO4Ga@NU*?Bb?* zIqU-@0i1yQ^O3nICax6|Vg5*#Zl*>4L(1<#g1}1)+=YJE^26cL*ekqxrZz`+gwnN+ zcsMh3NF1qbiJ=wwoO+oD4>HctRqFR<;mGEjeQ);i%!bt2WxkbeoZGwf3}Xa&;uv!* zUW+fyiQWr3x|oA*@c3_V1LD#f@A7VP7KLx{bVURXh4W^49sZpYcJ=R?yd&s2Ih9NK?v?+o9nY16 zaLSn%H*|q&yKg)zkH$PLmez=KetK}Y;1lwcA*ktH@q2TPxnyE`47~gtAk3IYIW%|}q#1{? zif$6jnPH$?fk9(_z!L2+Pd@WNbOvG3M_I%H_HrK?H1TWY_dR|;;>`}F4#YWZ@#HpnoGyng6laV{p0&uVcivJ8wI@M8IcJf?`4Nxw1_pz^ zBf(Bw0w0)ui+=|Qe}tVtC%}3HN+k_XV%LI8ZtTDbxvj?YJ4cfo0Nh>Il2sa#1=FRK z0^`5k5ElaP3ssl;JA>n-=;z4Ey9te})c7TjFfN=Z*E%WZaOGJ&O<@NCoX9Z|`A1R5 zSOCG`kblGj!P>4`g;-u2olkYF69%h2P7;Sw4gBgAfiIxop;?&ch;WrEeFY+$S&6q} z_^aE1tCjJ4mqzaOR2t86SfjdHs+&q3Ei^?LZN)(O_>fb@S^lDI)l83Gl+!KEuxKg% z-ne0VUvPrF=l!+_Qg8E*_*aXSuPN|0e~yk+2z=Yrx9ft%AnWUo z!mm6^4aKWFk5};@-%ieO04~_k_b7ok=~mgS4S1rD@+c^N#o%Ot;x`o(KX0>aG$xV! z{3IYJhxsQS7)=gyGY{$V@cW)Xu6*Gg!a2;RLGKG*t@;yKC|B@r`Fm|IalFVc=g`LK z+~CdgNS;b^h44qcS5Q4ZNxP`NAXHh>PsWB`>1hLma!2AoJEzXh=U`~!{JI=E<9ulH zRStFa(v*yq!ldQp^~1p2%imji3)7zwoCcYCIUQRC-_VX~%)7+)TB-&Hu%}+VKU!Qti0FR35)II9)rw)Z5a>_eiO; z>8hn%ZPE_LWUlJIB2R4>&(i-<*&zV(F*lRH9B`=Zk{9Ve^}?E{ZEVx=e84F0OSxP! zaq*oP(hs#=O~(bM^1c*cDhc89utdV9<97tdHy!^&$K*&EJR{0fU!-z69>VCV7g11_ zDrlO@I9C;tLxEB*#bdAQAiS#HQ>`EW=xM6hRKV2Tfp0vH9qvLoPa)rGIA6hY)50rr z^+r$AwKc)Ia=SgjMRLIZYJX2~cH4cPR!Th4rM}|r8|o7jx2?uCe5K;nArL9?Cme{sjY5_*6*%M!qRoZT&oN-B zTsmo<=Pa=`Y?8}EcoRwZTF3j`&FCJs_C30;>HgG(+V)t$`*dHcdzd8`3l-pu9MZS0eaFgWfwm=9l;2L?g}e9HJDS~>FG5im3Tf@Z4m3(K z%usWmoZn@7O;Lc7mR2Ljq=zY_$;-ZQW~9lngiYX=%TJ!C*gtue-!%KLe77cvB40eA zpmB&tDQHWdp2+vyJq@`b}2# zGj9;|`JjulUKkV%DOsjmfRCNQ^OV#_5p{=N6Tf&)2WA1_1O}kI2nJxWr;dkIfxSy( z1SjF?PY=m<*Lu-v5|C^h;)08Y12jU_J$TI(nOVlXN?OJdpY`tflZ&(L)A}65VRbk~RB}>s2PC`aFe*u6YylrkuEohcb+Kd9i z)~W1V^<#l2ui>0nwCGcpkVHd5({N36A<^&cMqRn)!NYQsh z=3LI2zn@uvJBCt=Ft8rY+s+nW%j*mRJ?7e;cN|F5{paPy{&=Kni|d%_{o_A^&Od(g zx~yMW59N~L@8re}2WfT|y^_TrV-3-V$$~}3s*qg)Z@urIt^ju=slw~LA8wHfc=KWu zKFT`{D7qk^bBXeOl>h!|$~VuE6CztBq*D~yA$8ljMDIuty-d*w{!ygze)A=&4BjrM zIa&YijJWYS^)|0&cFvF2&A!Upyqrg^GX>}UzGxlK`XTK-Mc3~BKg-?)$##C=?}oB{ zk?ecf1gsd)clt{Pg2PE31pO|>UojB+C~xP^MkDE_5LaZfrBYqhw`ry6OyV0O>kO^56(nQ>%qL zXd&cUqIV9S5+|1-z*-XoSSw>KXj)8Z4e!I4^1|p|)9_XjNJ~37jnnm5Bj3jz4S^5h z0yqP~8A-&23yq22PYUt^T%I`6QsHCup9;~#!{pLUnM(z-GE%a~NGCEi#-T05K{7+k zDOqhf*!5Vk?E{>h=}qA)+^x>%WKpR<7Zm3(DyM3 z4+~x4zEjW@CZB??F!~g91<`bo5dyDpwZJPBV4!W~yiq6%aD@qgD~uz=0$1o0^nq4v zpcH3{3%TGcBx}KzTW`F-pVLm9Smv-{-;9X!8k|+P=~z6qtsd-2{;uU&>OebS30vK!$NSqJJe`Ve83;w-ZWWvQ~b@(zb^(1aUq`6f%qvknZDl(BbXWT zDFyI@KR2yD;HdRB=d!fai}%<72vNCJ%+ePQavPcONhig_CzF{a>r<9M)6e;Pz~+ce zX}r)l{GBAHjNtKXoN~Z;ix@ViK*%GCQ@rbExO(b6l{CrN`-~i8gh5y+aiGwzHQy#E-tFyf8uSEQZR||Jw124(OsEn_IqkhJsdf#Fu1CI#py{sMT@SJ$C zf`|I67V*3y)4RSK$gk+teA?iPTM@JzdAl85UPZrsAJKga@o(@&?piR<>E2NhW8RtHl7ki0-}$rTv(&1T-e7wITr$=O)8f} zl!jBHyeCoQ#OQ`P)=MgvTTh810nw{e6vTvzB3BNaR9yn1<0Q&^i70ZAbZ8U_h#rCL z8|sGJxtP2SjUoXG;d4VNHa}HR?982ETm-Mr`}@F zDP^cQn;Gu&Ed8x1Zo1)BB?`8Kkr!r)YiDl-^;TA3N+I&d33Uq~D1k?HM8!i_kcfa% z?Knv(+MHC1K(LG(w;r~ZN$sJ%XV!~GA_m&dyPo*1z&Q<0enY0bho~XChYfD25U7Ue zCJKRSh;E_~sBF2Eg?PECe%K0C`t_~Fpv8!qbOCD8q#;5n9y%cXRD-QU=3b(Y zvn7*C#llSR(iB8Y=+0oag}Vw z?*U@Ucf@IE>+*?kJ`M~w}OPQIxBi7dJ+fXrKKyF+u2Ba$|Gj)9q1_ZKDWr~ ztNUchd;Tv~&%rkNM)aWsUrKx@n-s6a<*vu6Poa_Lw{N0znoOX?;+sSZ(_?1V(c)N2 zFs=XX(I54rih)DrZGMuGz}{klOMf7*7MB)K8xElxpQl1f7pqaa*xumh{cpplA5Uq# z)TmQcP>lK@p0$cm_gGgKDn=avqwcnS50viSYurc@?19Cijww#v^C_h)@Qb8U1}>vE{p7wDd0<5X1iZ(uaZ%BOG#W$_9lr}B@lGe^&^x92)d(l#P4lgfB z#C%G=TFTDhG^oNWezLwk8JP<|L371V*0=8^zA1iE-)w%e<0^i# zzbk&Szbk&SzY9NYu=t7G6+hV_il6Khil6N7il6N7il6N7!cT*0w&Eu{MDdeK0YBN_ z6hA3Gf}a#$S^Sh#p-U1mg`bkj^OcFOik}o8!B3sSS2jPrXz9zawBjcuAcFK%eySMc zrxFp8?2tBVi~#@Y>=li8oLFmQe}`C%N@C0BVEzZWnzecApWo&epCGJ4VVfo3v6M{YZ z%Y+t!yhG*>AoE#l?@=<}oCk;^kS65_{ppVn3jHH%2ZjDXLg;Ucn-^L_-&%Kz&{s=u zg#PfO#RC@p;BH4h@XN2VHzs#5<3E!S`Zvm}2>o~lwqZR3X`fx-4El_RRAEZIKi(9N zC-KBI=LxYU>ltDa9aA@3;@&nGx518U+2Q972GkNT>nEu6CQ{m|~!22`D zyv4Uf>2-R^h!^Erh&sKaZgMBx9m?lQ2J1$KZ~sIlD>1<5$Uh_GAMQm5(v@qvtUVTW zcTi22cl{P_CukxY>_VwhZ>wes!BskZ zh~Ztp8qsez07Fe8cW*V z7pgoGw)aALQ?~aSE60TGy*_Jc!LPD>#+`R_L;AxF41#4@c$Q3(OGWkV@iCsqGko#a z%yh`vrQc~_c0oAAjlDN=O^ISy?9ANy9vsc&j~OOQX&#~R0#2A>Y^5w~1L1G0r5%`^ ztMub}hcW11gF&C$dj<{qOK3Tpd6Mk=lI#Mr2d~#{wkDJfnLO-Ij5by#^ZdTblTC?w z@x{?kRI>xHS~ea=8)eBzU$r7#DtDPKaj!{RHFoxS%SVBiKl^(3s&m(P)?OR`TH*Is zjy5JGlIYzw3byeBgaSyN;31U?<~6(JFAArLpXC9WKDctocs225m-;eLYJ8CR(#{ty zb;DtE@2WMFbgb!!%ds*<+5SCizPgGJYra0``z!81>^y?excFe{gg2SxD)D_ZZqBpx zFALmxb}@$~FCn{1<5p43*3NnkCiBgEEhg<|q zuB2E`OdB6}W=vmsS$xb*Kg-~T1aR&`qvB&8ek{XRYTQhU>gZ3YovWRh z==N*r_gJ+YfobL&F2+?>YAnZAdJ>OFBpyX#vsMI#agikKtENWt6@Xk0_-1nbbfuBY z#v5MPs@z~+IqO;3F07AN@y=z5E#xtWmUZ|@p<5Wf|G4-(=sjkR5u+MQX>2$t{Y>7f!)b}#I5kI%F&^ft-RfuVgGRk^fdn6toixrSn@y@ry37b% zO(&S@ZV(!tQDxl2IIrf$U1&AcxJKn_(W;hhQe!J86yVbLDvhmd2?^rnUPzU!vqh@l z9xghSX{sjrO>(mzA-L65(iJe&g!=vYyB75y^%wiNtNv9gZNdK1D|5w(y^1wqX1Os= z>VrOn_bCP;A10mx$&-T+gpcu`STQoMKjQXt+b>QC*5oGJPLL;>ERoSgO|!K91My`8 z#wv;e>hjcT(F$wF`wr3#?s3FS=`mDkN)=_}!~0dtgb zk4mAc9$qPfgGK(QD+M&61|qgXe}yZ?CWoLgAKF8kXgOmSHj;@GS?~i|T^*gnH|0bC zdHhF^0gwHT6s9~rO9H4yW95QZd@(K83Q z@weniBzuOdBD;TQ%g*2&Hk4dFQjbn9#pvG^x!3K&hG$GZ?CQ!pRLVtSmnd3ktNXZl zx7J-6*3&#tp+_ zq;-{Fxls%O=`NkMx=3yY&qQHRIezi!(bIFY6}byl=F>bO!vpw4x#qxKgT0_?qQj?)^ zf1He4{{G2vA1l~~M+fuJ^|OmXi#NUsnQbZAwu1F43D=m{$emKbzig71*&*M`Y~%XD zXkQ{4opnxaP4vq@#v(O@3fR}=v{r&vxXfud`B(>18PiZgZWb~HmR#5s69^h1Ku~O?jRsm`K!cEg7j#1)Au6C&({#1I2)lw7 zNa7}%<#E;bZEdyH)>~U!`?lIv1#C5&U=q-BuX5F>)XusTqhb;;&Hlb;p50BLw*UVA zpZ{M!WS?iAxty6fbLPyMb8)_8<8=+Mz%s}G9hcP`qaNN}1w9Sx2K4UQ6Wd*v!%tr) zHXVXz9()K38~+Iwe|P+-Abge4 zp{@n8b_3g8wkGncXQV=TIQtwP;v{?;GpDI}jNi{z_v+R(nR`l9i%_1gfOV@zh!9el z&sx33RqBE~;R^cI0o1&z)K@l$hsxiZpuj>VlQlxDV8WLYD>zqG^;1o4uBE0*jTaz9 zabAz$8X3XcIDs;LbU^I&%|XmomLVu|V^9zRHzTAnssO>E-a_HICZhbe9I>dc=khG) zrz&+J-Kmk$IC9!(TtzF42E*2^&XWA?9K;@x_K)TR9o4YJaH{1ycPxY&u+SSo>K$EsIX zBv!|P{~Asq<;?5tW?s45?8W@l8_QYk@0Iog2|qERO@sZO@Kk#gnABQ9La`XlUG{fJ9frT{PR?uttF z%6$|>Ld3z0M&u%Fv0PE?DhaJd!OXhYQE;*(v~sptW#oJ;UGSK*`#B2L=vy=SP?QD^g6GDl^u@XkT`J??SU^o(#6^qH1-8R1QmY+e;Wu%LXoLbkl4 z{kQ`5jaFAO&M|`Yt=lzSfKmiSw$c;ikWzL$DA!bk3gpN!Ai;B?bLw^3sB0p7X2EyAVXByBSq9Sj_W0cmnh%ZumXfN@}Vgp(jZyYFQuZ<%dlYTxD{0H z&?;_~1)muEu(J`foYAL>iZ1X+(EW@|J~cIsRMf>jvikmpla0k$B4VS%%bO2g=WK>> zN2MmG=pgO(xN8H8W)CijJgmV{Q*=+loFn6Bn+v`Ox z*yHVTzTCB(>y%{$A?8I8QZs1DkRz5_46RsLtVWSLxKxu2nPw7G^)bwMmZ}*7(dXe( zh`!WoJsOBdb(|Nu%rmrk( zoD6oSaXGJS`*Ij@zBIDjjB$ooKa}TuY0SLfWv>zPjMuh21{_OV?}38hx~%c}nqu;Y zSJVI4Yb6k+F})-!K3B|Bjv+*y-ZlW zuTekt{XLPX!#Taj-!aC+tm(fjtl;PDcJ!&xr4;0Qt)mujJ9<{mi)b*#EF zSf;R@m7|*03e0cdpu+jZXb>G_d{pN!+zCAhBNYCWWXU75a3mg0wmp21WLXzw14KHY zyjCCos?m;!E7UI=MuoVkSAV=o+F@OvNw47)a2Jt8Bn8UUL`JK>)UnlU?X)0nq%w3m zXQP=fYWcy%{VioDsg@JM3WvwGkRYrBS{wa&VUnc}>V4#p{w?`1t~oQxaDntKS&a$E z!%KKYrP?=IfG3V{Kh8B09f*v_Fr%N;6QTDV={x_ae{EWURnsiimK;+Y>d!m%1|c#0 z`u4@v7$56oSmk>YJM7Tvi_>Y0C*|XIbCSCvBcXr8u$9;=aqi2dIj-#6wA{&Cq&L~@ zwdUJoVG}~|8F*$Gi%P@OPe98V(Lm-SJOr{I<8NdXjK% zEJ^B%%EVnn#gHreD)m)H*N~6^V}N={s4p`pml665ArWquscCkGTaFVMbsL2lT@C{x z%qVBKGbb_W`c`0i{;mv{vEBdP_@e33?w;-c%-`NdLE&#HI8h2pjr*j=%%K`X6aQ_E zGQwL$Ed8`JavJ}fF;st>RMYs173UzG1MuFucvYiCZQUU$K^zBU`f<{cx}LKi3b=2PXxm$A{@Ijy(N<_iby zX_L7-vdkLb&*}q)J*_0kx5po`-`LF(C|;f#oc`@e7Rx3cEt~5HZ9s7Q zwp!;G=(exg>G;g~A!SEp*3mv~zf0oV=h9>+*%nO}=uU4sx4HCJlDFmp{UA**nbz$7 zjet`%S^Dv*b4d@S-=w}h)VF6m^|e#qsARL1>)(@}uh4bV9o;QvOILZrOS=s=TfBiZJVDcWn_0wT`|*Q zN#EIc(j430qJu_ps=9tJZA>=XShOFIC9SR2S-pGn4V0{PZrM%4u1E~%<9wA49N^zE zrZ2l;yYBjXpE{?ullBQ|nGfl-B}Z$WD?U61w8u8rN38&n9DUCU5L4yHf70T7paW=a zU0|C3y@tk61DVL(O>XwuAWQp$Y4LbYnTgkO3-@)Hbru>tsl-xR(>Snq5PTr4bem}pj zGt6L2O%FM{`Q>@ZAip4fO*@79q&ccs5s`<_`1gU7;vbW{WDEbqvo$%*2_AJ$p>BVD z7hMIgMQ_mhuDn|3`mKWeJ@roiKISPsiYO#t@9YapHcUnAoJU8m<_&<&lgMMNfS+;qAI;aW<_a;^CxR9 z4&9Vpo47NK)ww9s1a;LeT9dj*o%4`}eW-3-&n9cs##D0AZNW(Iq-*7MtlD&`^BkAX zZxV~}bbPRp2#s-0`5PUEP^@}8kB5GvOJBp!(*3{ZK>%{zcU%@4UB55FL-@O-X@bDK zwr=d1BQS1hwNc$E1c}k#LWS>B^IoaBn;N_e8RZz6T9h2?(lBy$I=T2al&by`yCr

yUEB{mHvTd7@ znOMToRh?gEyO|R`-KuVl;Y)1vs<#6FA!d^qcpE(cnYG3f=G^VjB_Ow^mVy5SIP)XY zhUVAz9h%gn<=@Y(;LU0Cs`10i!bp&&$(9BtrJwLqBqj?o#6V4M8G4S>v3O=@Q!z6* ztY80}LCopn8CWn!SQ=Y49|IA?x9cyA8I#FquG-B=uHS7AetMh62)$5lg>M3;%r)j1 zCqK_G$gp)YvMx(l%-Z>yPc5TZ^BOVwExz;PX!5?$#-2-^O`nllKfmVFU6d*NlG!*A zn~l)0asDQBx=j!=KVSE}k!$dt*V1=^6V9d|Q?HEMSTb#~#fbK$7R$;B@ot~?VHH3o z5FxoC1_ooZo3UxrV-r~{{TS+kMo6P89fTW|EP!u5E7mGo^ZM@1$eX|mkXA3V)no8% zbHcJZ-o0emo~5h)qd9E$bMsvR(AwDRZ<7Zs>Ey@m|Hu)@%2(gKOOGd+{9C59)3Nna zsMO9LG!cZZ!ox*(ePhT1S!n#IL4bI_q53u1lOpF5w`?HleBffOT%H9Eu>1W?y zpAcmF|9qc-I-Fqs`dDJO?*^q<=$~x^LcMv&*1$95th$$PNBH(WJ0M$yMNG9KYN(~%fB6@2-m^ZwFGwJ^;Q$}Hj60TDf=AzM*ff?PG1ut>r+{Hb-mC7kbD5G-~1c#Gw5ZvJP^_4a(JEABlh z>YugG?vlHk_aC88M;%|nT>G4-G1mAYb2yt{pg_bzjd0>@iP<~#piNx@{rrtSFrR+6l8R;`Xne#jq&3Rgd-cG)z~`D)t{^9^208;fs~I(+^}lr(47L z7Uu`uh&~S%wKlGEd~?-zx^cCnk8=HT@MTaG1BB+WG z+vxLM!>o-QkJ$bmW#Tv@@54>$3|wvT{2bpw{~GT| z+)-^*)I@yyRuhPdVW)NfE&ZZ%=B{&rWYR*nDJ+;&RX2qcZnvY^he*=r`AmQrI?pc? zoi3SFvdkB_$_JU%#d&BM|7X_+F>0(Vaw&fn2QBEy7(6fLFSY9=mie^REt{mDP_ zx5{H%hEyh1D^f;MN;=l18XZr|7mwYoZUlKemZw{JRejpsVTON}yjgq&9(z?_x@1%( z!*cC9HJ3QbTGr0Z_^Ue+E)W~_369ml@;tZ7evG($QkC&`=wwO&mwK4PUwUg-A#RM_ z;E*xbkt6pgIMx{SqGpCIUAc?NkNP`i%xfH6gBaiU+vS|U%|6~*=9rNzZHS1bO8u0z zs{X)ja8a*rBswiceV+>*{ZeDtMNSI_tYE}((&it`z=&kJ?xssRFj@DpChnO`t8Zqj zJ&O}EhmRMDfO`pzEzaOF3HPdYf&*(aq9i;}Xk`i#9RcofV?rb5$ZXV2qo=3cFqDS; zSqNNCE%Huh({Dg11XrSrb{oyhGH7^~GzMgXDV;)sFm`ojtv`f38Xb)OS_6r*JVeHC zmg9`aT3fu>v8qroeV$L&A7w{~k}+~yd>)peHqBL4Or&U+R4I%|a)3Mk-~va*Lbn>h zP@>dD$&6S@$z$hv;B@Vnq0ucqkV&(o3Ww_iAvw{0(tPiZ?m<9 z`jh;vAKOHaRIgq-W`rg~dGX{j-`_P*>Kj!>!O$`)SjKSU?}!Vp#@kXktVjco_MPZE zaMo^o<-{uBdNg*?JX)Qjr%LW3F0Nz%JHitMq|?x%C|5#l|j?FnOon-ZX^YT zb39F>hM2Xnp~5PWxce*Bwf`85;-6=er1XV1H5^KF73||m^K2q$M$v@n_a$$-ibSId zt;f>h3j4a0(&DVfwI}D}$j4(T$Z9kz3shx9SKFiCP$Q_&lZt;rl-p|<6Ay;b7~G-_ zDFMABX!vf@@8yoZFy;55{CScOyZPX+%>z37t*tW)_F+OaE~YB0XQM(?RyH;iy=N6Y zGW>`dC4^B`Kc?7bNe#|Nq`w*6$i9y%3i<;jXMY-4WmhL4Hm~WfeOzR8V zQc`~rdYi3cPdK1Uqab9%7wFYhfh+B5kU}-=U=yt+T2h~Kr zTBX)QoV4s!ijLD-1nHC=Ri#$YhFi6BI?;>oU8t5&Y6TN7BGlZv(&yO8w;`kzp{)Ow zL-^=ZccTRm6U+)V($qR=zZXM1rUNwwu9m#UC4qJOxW8dK9^trL6W`3|p}`tGvsOS8YC0iWb|jL^-C>R~FJqS?i?do4#J>7$BM2Rgf`jSSv1~7-G4e32q27U& zow{6_XpisEY`GSyM~d%7o%oQd0Q`0`1A3}}E~4Q)>DQ+=*``Iyo6&MgTaojnpH=F} zNdZf1RQ!VJLx(W1E}>BY<`O4Youo7pXNR%wNR{f80w#^{AI%b-1efR}oFf#Y$D1kzHBjOXP8+F0y#&Q_pY}2Ul3MF!7Z2H@##N8fo0hQA;xAP$$zoZk=Gz z^H!=A4Ty{ML_<4rz^18O`Z0Cvj^eyTJ;x2Nv^`a~trd$dUm&xuUZ!}viE%6Y;~1A{ zQ_B8Ib4FRG;2$D+@GlagF^zjyN>LN{wAN(-xChsK_PQ)W-L%dwF3YG-Uz^OP4T0Rx zb?ZK`%S>^RvWt|RB?r7kr{ptJ`!Qcg!7P#x!zH`C?8rHON7O&x9^E)PDHS_YrXX-( z;4ZsX1Z7pV$e284k-iC!p!LDB)pR-=yT7csilKlA&C|}GaCSB*_vnL3z61URNAwVT zIKY`Jk6TAZPzE81eUT&ADVj(zB`+V1nQBcAHAjlZ*5JCVq-tL(PUV6!SSSyc#_;~A z`SNTEu5Dohih7GzIM&t~ZWnjL+u-v;CsJ;0Ei^KM!s_+TwN7d9UD2@CdOl%dihWtW zxgKj()k5{$jJz|>VT$RM4E;n*Z-0s1X&w3o21U<2c(QF@?m5?tJZz4u)sa84@@ zqaYgPc4K5g=+TnJuKJIdthM%%&eiWp(PC2e@!G$7w`~Vb5#_4y{JR{H4s#FDUC}g@ zOWA{0#z&SxrQR|;kym^AYW%GkJrf{~S*S!oSafJ{hk9Sb;gZk__Xr{nT2ZlQc$-rY z#P6#)^JG!4yt+@w62cANe7pY!heh0$$?)m@hDWxcfmj2P38eeGXV0AN!!@&+NzO7{ z{W>~Jb1dv4IvKxMXdta-Ax~;!%pmtZdpbTzhied@g7q(GtdH}e3?qB)qYEJ%C<4Vl zfo{(Vx=kG%JQdwKu80qcdY|n@&~2)$F)5w#c?`ScfP`umwqIwdKPJAaee?B5 zr0)!Wo5iHblJ`dGJ`8OSJ(}%UCmt=aXt26bKYsoxAUYuU&BoW?e6W6`^ZuhWkBZnm zM+90u+s~rysh>djexvj31IC_kOh@~}OGEuBw{910 znP~P!qc@U@76vLYqUk#$7t7}z>2G+y2Cl=EoUyRVgl95vu&N_t1$JMi9Ay`x--#H& z=&|*kxd%PPn43~_QgU@KqRaJeCc}a|^nUte;gIQn@6ubh7K-;WJR%Il&Y9x8U_npA zTF3cTFB^J4^QOmrKGr@*5dfsKC~%k+)^=Ia@k;LY7xX+@#X05x8}6gF9#kLBJkUGW zF{Q!T)Io7iQZ-N>CZPn7v`<#& z#Rofup+uQuh-ReV-tyfDeIh9bw4e(ZW5e1EQDX6nDL{yg5XY1%^}8M@8mf{fF_1w9 zq1DvY<0KYzoc*?~EaS|@u4UH^*~x6oVWFwRpA1HabQQ#vhVm?nt%QBr!(@D5#ZEyZ zs+=w!WqRGJl*)}a0?qv&vz*?$lvv$77@ysGqA)a=!Vx6nMM3qbw>Y1Fd6lXT_9m9d zVhS`Lm+WoE!}3cQVg8mZD$a8@zsKa1%q`A0-2h6kfgZlO>x795HV?=%73M^wwUl1ba95Z=?NtwG>Sl7aV^spFH82-Do0e;8@C34y zgW8>+^1{v=NC_-+_&YK@f0MJ5AN7l~{n0^CeFwY0Dec)=Xv@+x22J24dr-`L>9Q&L z|7f{v%Fw}UKnho)dbQ?pO_^j{!^?mi(c&i&;TN@kWvzdHOm-4vK-I5xacnB;jR~Eq z)zcjDV8nBx$(C(S#6H*`<}?n@0R2`T#DQ`eVzYCospcY1c_x2zYndY_S!xksVN60( zWlWdioI3Ju?Z~MPZWLKswJA!9X6l+h&ha0!`Xb8{&bEiwV@i5FcJ(7U3AOWp6f@3H zRfry&FQ&CRq8wmqA{_3}yo%O?g2X;48>p^kft0f_gx3*Awxhj^{rwZYZV~bgsNcwP z>fxN(>;0Or)39~}91lk(N}$R-+B=C7K4&CXZ&6Q_NkcM^XKt0LLvLPCrds|}7hQ&p zBu7-ouR)IUdW95V42)xOm?BYy>*vUY4rn-^c2z+M;)b$A#{8=S3-%iG=i@9!km5+N zY_Gerx)Q+%CI?5@^|UMrvu;4a_uNEZnrV>v`fQ1;k$7woO@L?MPp+(pr9^=P8135lvwHQbTkGdQf-*!u5ivt{mB$gcf9wZ2N!lODR9|HX<5qfc zd0K_~pJK2=W@SLcdTy1*L~*`j{wxXVpv@GKm%!mJa3Hb`RwUKpY8F-2l1|^}1>1I= zs0`LvgZ8rtJn$>VQ;b!8_UquZq3$fu*F%Do;u2D9D*vW03fyk>$)#~4+X|I_8W{eI z<6x9J5^z+gBQs8g_WF3X>ZuML&!D=QPQa{oObyitKN5KlC zzcR3Hr}C5R-!ij!={{%E)ij2ojW7*I~NDdT0`;(pb{evu(d=-t}YplqXHb-T2%eogPH}c?KSYfJ5 zz9eH*sm8C9euMYUrgloQFg8hksX^zja90H9S=mf!A{r|bS(_;HAZ7gP_FC5$%vgHN zdv0*S#~Z9j`UuKYK~RO(h@-=Pao%M_8z|Yi{y0cCgBzK{&;eb)^oE-G3+K#0cd4;Y zNzJ(e&2)ig@sXmf!FvV)NIXC<=*Ex`2wQ6E{ow{_wq;3uU_ook*kDToc>)XGY#F=0 zR3IsdL-IA}OLqt)B|Y`IK`l8C&Ro6GLiTdgr-8uMv;OZf*xsOe&!siN-|6$$$>0zi#dzR;AV9)&IXg8J#OfRw_BZ|e-Eh<{1zRg?m1E4PW43_G{wn9Wv{m{&p2{WgImS1!@LoUPKa3|q zPf|7^u|+XvN_-7*&egwRK~~dMg<~;s*v&~DlRPmTLa%+rq%s$hls16?a~iF4{x4L{ zS(tJdWmo?`U8Elf235`=p5;Sx-G#a9ANvW^fPnOFlW9gsc6fnJQAt4Oitm8{TVh zHZNo%_kW@;B~t@|$ddMV`)65p=xgPzqy;lezmGzUuu)bkWwy;@2g8 zZoUitSIQ1hjr7>q$vLs7Ui6immRa)XOGzh#?*&e9t^T84K%P>YQy0)SJR)pjL$~Mp(Xqoh4&w8`m?j?DL~%e9sV&t(!22g$a_dj z9rkxiT+YXJJBRljoZ3w#COChP;;s7!_U(Vc!r=VGH|9|0Tt<2@B&qN0*J(+Eq4vZ3 zOwQG`ZOK-7#RsKA_TA zf1_WI4Ib1(c(QEOG4%0$^JC;}Ipuy&pMD^~lePt_BnB306NupAtQhyjdi*mH`Xd`# zC7id+fe36I(bz0x)XkS!*z}Qz!E}SBkT*xUhg!YOY&HC9VhSF9?_W$o&(;5bO+hO_ z#D?h5^i!wc3*4S1ra(H&eW5-u3=_$X1a|ItM$=Iwff-uP{sBG`PMwGAh8kH-BN~a3 z%CHAuhd?-pXrWY}8ClY#Pr^f`N9smLAV@^jhrREN+|Y(CkBY z1k2r;#jQ}}5)KlET=bt`sV+lWjNqe3-SLVHA{dw+P2R%Elfj6bQ&$Sns;r8n)-}k3 z+iWmZ5Mzr=qK74f+6%Iz*%5F^$eUe(**PK!!VkPipRxGouLz?PIt%P9Yagm+}u2#zsG~02^j))NbzROz&49CnV+nd9D>$(`jBKm z2}*lLu*^*l4sw|zsJa8key6PTY*h))<|-_jWJ5xvzvD3fD|lGL8Sq7D`>NYcw)&L`_!N578h|f z&X>A8slj{2CnT3Kj~1L*);DN+d@??@b>Ks)rtd^!6kli-{HvZ!@}AWg6>pOAV)JG; zaysKB4OcK`Xum8j%eW;TwBZE;T~E8u7Mx=p^25TwyWk>`gjA_2&0I$wL3^s+ zM$Gs)y~hd0;*3h?%WV>g<66@kgXm+<2a7miI-AbnufP8m=K~)|_tm$YP5-SQtiDvw zP1i1564|3e&s>3H8fWuneRy*j^YI|=YZaMGImtt$O zo*pmd#_-~S{EF)mo6ZPl z3DdST*I1B;{p4e5xT-zOU~@wQ*w%SqWX0rXS2rvPbmU8dXiH_ICqAh>8D#vyhClIFcLP_Srgtl zIN!+_nZ3D1e;{vUw|eHQ@$poxQ^h-F_{Dg+45ApXeaC-deEt3*%*{I$b1TAg z>2M78o0*C5T3-GAtDO(t#PnbYs8%?epjkS2p!Zt6Py~m3565A1wyc&SCsLdb-p&J? z*oa#HNgokGQfr3VJ$1!cBlpJIyiMA4P|ol%2zgbFgCm|}gqb`{n-pMB!j8ZHooh=?g+x{`m2XE95T)^bkqxg3fLl{Xh8U*RhuDf;I5WiaE zY!WAfvM!r`9(!n(P~mD(6^A`6gnQlGxvD+FU(!OegKxA~yduw=Cmt4k#OT@({}>Tq z77W-H^uthySLp%nE{fU;+8*`Hgj}QB*SvMp3Pw$Cn${$5nzB&zVg*wx)Qbp$hv-a| zdJLKW(0jGIpLhS3Y2gZf_3URgo-oOkk5(H`nAGaqJb&4|o2rB~H>+4YTcR`Y!yMzkh-A!5>2folW)p^%DZ~!8r`1vuURuu*uG*m-R!g zv*{jl2)z}W&>f|YQ$gKEN*vTzdH%Pca#QBH8M+!ihszsXkKPsTrJUXs*6~0W5(_vN zpu!iEsPnRLoh{euyey82)A9=F;gMz{15oFcl`yCWCJ%KOhKDFa;y%gc`HrC5D7e!Y z^1lQ$Rn@O7T9D?dR8a=VjDTilzFFfxyND)>;J?mXsop*<-(BGhL10zxZ2D7d%&r&ZoZ>qGSC0Z7YMd>Lq=FMva3v4J z3WdMJJJ}K&Ujgrljc*(;2?VqcZG4CNq<7}V7ruwC(*M(jOcV2Wbv{im&@PoB6Lhas zZ^94^A2L0@ztfr7Nt{g*>i}w^o;fYw&Efs=UZG^^Y+29H`cIUEMOJ}Ms9LzZq|xl;Y_Y56L{@AG8{rSAhCP4Cz9 z0Ijd~r9t(RJt;L2>*YqN$ctOP$){N++p~m63G%%*?a@9I3QBgZwU(PGkl->x!?~%d z@bkbl3`r7O79eQk8p4E+k84Z_ucO2%Bb^j}!Ne?_ipHtb4tfz^`t3Y_SrbE4${wCV zrD_L~714p|SI6f=_7=E`b~B0aIc!bEci`f}`EZ+If5;vE2DCU@rP^Apw!k+c`1|dL|1JnwQ-k&eGLcrIPQ&`jbxM`|r}E$_o_I6W^%4J~ z{JZVXsjh?kliy4*E02Hrz=;-it$$q(5hEEIh=pKSv#jSW8IiRd;E|NtCvAkoEyz8?A6@WlcSQ-16%P-gB-F7i}Jifj}$q;ULS2Ux7R4%Gu9o zr={!qz94k_Wi%r&TUBn~l54Gz1#6UC=8VvcI(%NL8+6&G>8+bBB2pOWN1-|AC|0{)|g zLswREL|@F2c_$}o;LDW@RvbJn-plP2)#Y$iUoFwnvxP)Dj90Fg{d}bH$`biaF<#Lz zqh8^(XJH!;vy8c9PTDA(IUZ1JZI@-?#N%kKaha>Ov}M5uyd2{tgWpg2C9Y-JaenRm z_R?d1zz_bO#5*zWQ&E1bs6dZ8`uiJbPSt&zHqVr_VTs?W13S6IbvE5f>%pwEgG7km zb#`lW$h#!=I4Q)#ED?aLo+O_ph14s1kwG30_>{N>6PB_w<;^z%zQYm8H?z1^fnxFF zIZYuEaW*}uGaZKMkL;IqK}qlWhIJpnsT}o=MmFQ-q6CT2^BUAY0aawQ2f4|q>6^X< zv^$N#E1Gw&pJZ@H=sV;uvD}$$jI1?utV%E4#Nz!+N7)fe(bm8^WxUJ5(BGakySCWo?cYR(BONv|5dOS&N2ReU-s$ z(gF)qiJIic^)NOn*13N4#dCA4@;c) zx+S`e%`e5;ND0nML3PTrBD{vLSZnatwAL6b4bHsA*({PM=gZDoHlwC)VG9=@qVvwC zI?_GoEs>y~5`?lwN`qAn3E4W*EZ}=9d>P3C$LY|E;jm|RSniWNH-`Vgn}+^o?fJ&9 z>YPoTGGZ#(+4L*@Kzwnz%aEmUo+LNFz}w|g^%?Tl+59B$o|^FQ#aQF-32V%e#dj86029_7VkHRavHDYiIxJ^)=gVojuR`FArP9|s*BLl9(tWe( zzDWk(hr~dq^;G$j5;<3cUm5xOu(VM+Z9!zBq>Yh3qm2cJ7%;yyK@msquSgWvDd)>$YMXaEo9~714PVC}<(d#blW`ool9U*s&WHYr z^86TeEH9ozrSXVn$71Qc_P;6QQWk%zT%D;cLpi(0>zrR9CtF=`!6Ee;AC1L1uwq>2 zbsG;o#;^ny!;WScJD~T_c?b!+@x8(wJ730*0Y6&NW^u~oY}z1WxUQ$xADzrQj=+fv zgrll}C@+f7zfcmIB~n3T3EsEOg-?c-rAKT1mrTNzu|3Q}lZ4Ty@?a7)4}b$JfM(<2m5P8!B&V;dt{9lS>lrUZp0uA-y37{j?xMoE|N zbK?!R&s5_snO;%U$&~4gCi{r68>n%V>P3XOf9xiJv{-0Q7--}iDha|JI7y0!~B%`e8$XFg| z&Jy8%*&(YAdkiA3^MFQzu><88GswZ)HK?IQT+uu1bl2DsPi3xaq?29I`wVJM%1cmt?{x~pO3g(8X9s^g-*HI_}n=<#pKV~J&` z8>P*R<$)QI3&oaQ#4T1pg2C}6Nx3WGB!KaQY)%O%n z+HZGaj4DiyggD-Kck@pY(W|M400OZ{9B?+R;8Vs$TZu2Z%AoLou|XO4(c%Fmv++*r899m>@RJM%7&C!4qJKTGo32jkLl6R5h(VDh#dx5%8FXhA;3T^sl2q|lIy)E z1jGxG_>a@=c%8wktqsK!QD^!jl1@_5Ze)qyFN^L{k@WerZSP3EejZS^`aao^0(d22 zx94-v_JuP?c&DORHi=v|y61c~#jR@JjdiSiSkI!i^6+XQGP*ho)rGm@LQawaFTujK z`6sX;0cm2;Ww0BCF~4-B7`M$5kGW*WcW7sy4CWWh)VhT$(cFJYrV|ajtbfa>udzJCkoyux9Nc=j@@Ne zF<1WGK1R-TJO3S2Q6meD9l?r3_H7N9&O#gxdV7gO;Z{wO+tidSM3w=Hdq>KO5?TIi z))V%cgcAaP2e2k5D+I&VkGl%rFC%AEs`Kd=u)oI_(R}6cEqO$B(hR5^SAY97Cw^%n z69-2+-bkr71|yL8pHU!KkCmy64`DtYHY<=RsWxWG3_!9)pLcnCWmVC^NQEd#qSN^e zLOJN@4O%nuDm0?h#**X+xu19j>93kfJ9N|EX)hk{drn-K zEk~DkjI=J-Og)+>7-qXJE`)>Y?U+O24m3tT7dvXO4lL>OMPPWBi;uaTFKX)9W{(AX z=hR{;NtT)Rrn=QhFgEVdUk)^U%87k?*ZdS-4+hqKaVXWLaYWr2<#qI7US%YdcnpkA z*NF2Q!T#w|T!{f%O-+0F4$6wDid?4M^TzOd-=e+JEs1)=y>A2*KE=K%Q|Lm6dYB@^ z?|sXqkX$5pNre}lQsMi1hE;gCl>ZXf&2vwy@N+3-;`M*(y7}Ma8%6&U^Z--wVP{1Q zzZHJ;jT~$|C0129ED&akQUt51#Q4;>&Q5IiqLTsNQDb}2fjv9+ydlbjT8lu0nlF-{ zorz#Ip1hiZ?b-oE8~*P~-d%YErb= z(MG`TZbH%56m;#`MhKE3oo-kO72wi;-FEZGu^dF!hp+2Y+3!!?$PGrNzY2&7AxwHy zxCFWP6^=_u+i>S0i}?|GwS(Ag~K&VtXhbA-@fQb`Z4pF4sx z3t5*oPu}v9!IkHD>}=tG1Y*bqlw#M9fgJ$_-ut)urVxH)y?lQx@%@G2-!&+5cnI2G zF!obCIBk;&)w+RruVn&^9Yx79gJRFpQPAmcwP8n7(x+`lcH&YRNy6geNNoaV1TVJ} zwiu?5J-k%34wf%w#p5K{CPT8c-$*w`1gr#SKri=qq@-8zKHIL2=og@tSMGL)8`U7T z(H=h3G9cC3Dw-wLuBLG>J%Hl5n#lS?nK;fonWWCVOGTHzq}<^fuRAupSFt{&z=aV8 zXh=n-0!3T#{H?uM(?Gv85FUs(P$wRoH_epQ|2_cWBiV!wx2sowtjuJbYF(6q{Ex(R&PB@roeQ`6rDa-;M+n6qL&l5UfrcRJ#^&kmML}0q4B}@o#Fk$S(dt;joW6ID+NhKjXo9>*{=FLQ?RBldu zkFR%`1d^+J=;1V1T@HWL=AX!vv59BMy+1b@?dm%8&}GnuGUc#wlSz|(kZ+ zDI)ey$sQYiI#BHOcPH7jGmc8*P(_9R2wb*(v2m+Ca2sAak2W4{0h=_U6ur(;tTI;R z1?S{c6JU0gLp{tllQTHie@pA2n=kz1wsloTa84dM;LRJ{>JH)FSLJb-ltRk{3khG4 z%p|}bo=?vvAD)v_1;s`U(Y61WC?g)8BWj7%Q>`kwyh6h|l2fh5@(41EE08MH4-Z8- z)>mw+y@ef+wPt(})9mpd)nP@djL)FH#9a1{?kyw8gbU4d;lFD9ANGYGlC7^D^;w1n z-!5v0`QeMOM4j(#=lu60`bas>-w*NR;li0L$hB)WSwM(MA@3qBp!0rXmiR{Uo<$tI zo7hzMA3HSm-R{H5t&gXaZ@gDEiLUd6AlT_80Abx4U=CY#(f9S??wr6vyA~^mn||6j^-nl*n2~0xX8PlvN1MK z>J6dKBMEY@CxIMxGeHjZBsh9Q4l@D#kOVvtX?ZrrTHQFsEt>7{ce^f}t(D7CY>+3N z;)tj0Qn3_!JSC)Tv7{tP!n211b4Q&tsht$nEEBi0w+(q2-~5+nxO&^{Jfo&IKf}@6 z=7>Mrd)r_$&Ge++wmdKT?~V~mP|=Db?{pJ+Cz{Bc0rH+N*&Q~_t5Jrt`nw1HT}c6J zWK`_+AL;F|!eq%KWX2{7l53Vg9)9(}eJL&$t^T|ZB4@?&|IOcJ$FkC_E8_2RAg&VS zx~$N9$wiLF_quU_ccIM3h$VS`)OEZUNCh|Ky@$R3e$dmge~C+fy@9`o`TaNCz$eFk z+x{hP>|?2SHv88H0_5yG${dz5hZAM^j_S+o8{%1{mczEgOWf+`7sy?`!!53%kWF-H z7gCPi*$x+{%X0^LaLB_KJlN%-kB20A_?QQ)JiKdIH%C8{VzameN))!jIw;OKZoh7E|3vMk~kle2XmW9tx}7H{1fbS zS>)_^DK(Xxvc(qj?Qj_zMMi>WlFK0o28S$hKaz&1RivyPNfvf&xJxa0T9XEMnFzPJ z!F~y{1$LHXAvm8%q|Nk}G zYKE2c6AXThIFOOUm0|`hs-8k}D$>DcilkgS^-Yob#wF_8(?PmEUm@BRu7Cb~z|Z06 zp>127jVFXd@}^d(mmVVLDGf+1i3WB{Mbf~0Y2Z(PiUYhd-T>D|rSp5DmQz47hSzhct|ulU7uxux0e2K5mYBtVb81`hALcvp zALh$tq7v<*XDBiFXY>bCe}sk$-#I9FB09-qH~ zzNq=Uozfo(8#*k(uDm3mGnD9wEOP()t1R9r(L1kF&L1)|9<09T2=V z80aF;$cH1W0gVFXSK&WTBpeTapA>xSHIYxdTB>rZSFfNFq+#AO*}|vG7iGOtSh^5x zi=0b@#S#wG=t-1AFm#_36T{le>u#nmuyOldXVA=;cq82Ewjd)MnNc09@;79MPqtM@ z{#qx%R;#dxLo8}8`Gg!ry|~E9t`niOh}UAz>KH-^g8d?9ivv+~a5xy2I2aXiFe-+D zQK|lVzkpE?2jjed0^=sYs8p|#O+$hICliWD{K0rv%gfs9J~*1{Qb*=nEKkRVPdi>z z%Rx4JMwd~%!pl}f&T{bq=E&u^9D18633AGdEmZUjbZDcQDS~LnoiDL9itX6^$(9CK zv~{P3TN^(8qS0+m_ZaruC&k*gxlxvnFI6=#;X@%k!4;iZ4tqGBIz99MY=~usoV5r! zJGN0|Ql=0JcIs4`GiFnqb_oGBLx+DXl<-+8`g@A9ULbpQA;vpi3zEE3YuQD<1O;rC ztnmT)my}D6o{9dW>yM@RMymB#jT5T2oo_uxsz^cA7aPne?Dc*{eBvF&z(6*}d3saC z+?maA9@{3Q<0z4&R1@{qh$vJO3B-ruhX+fIt0eZAx`F{U$_Z#@Mj?}=Z;T-6Y6l1I zfR$rv({F)-EMooOy>zo1t^ev;V+Q1{w&Y^pIMJQRt~J(hgM4?A&xwqdpbRAX4kGNf zpWT`sS}sd+qeK?G54KWTqJ4ksRc=+tD%DVY4ZfFT*?}!_3-4><7T)E+s+W?okpD?p zR5dlrjFuMQ3S@R6iZL94Oz}a9l;!FB`EA#g9^mRqKP1CMQzAA45+hvS>{WUe3x!;A zJ7bHS+W*C3EyEujv@c~#vsAlP4clzYvRYUj)Xurrb-1h5^dHI;h;&}8t3QZ~m%o?9 z8ZK(xBz-Nt&nj3`Cs?!YrNQW{Lb8gdYx?ySre(@&G5o1A`3FaNGs>MWk40q3QQLFDwQyAUC@6LM8{-Y__ul2M@|0FbE*5=&(R^H0 z=l^24_nVSxjzwgg|3s2+p}*g?YC)~s{MD8m@Xg`7%Y@6Vz8#0kH_3CslG+liyU{(5 zlG#+)HhjoUlA>h;;cAj&Qyt+b8jUGpRmy+rhnDzo2|3bN3pzwf4)Un1YR1LD=-7Wl z21dpGL3)|E?P)wJUjK(=9qePGSfsh!<{Y-Bz~fo`WzMq#e-e)gaH40L(wAl8ROGLZ zGZ(CFRdRxTW^r(ST_8AxY{B`r1%i3`7SVC6lm(6V5ZO?!}6w4W1ig1|CG8J+@wGWSFtxS zOvYf*?%*}JEYM0iTvC5taAH@qG3saPR^4ed3mC@sTEkUaa)!{5-9kg$(2$B44GBR* zcKZmM8A;Z`Tm&byrF*k<>HoTD3%ya7&Et;iU{hMUH&yjM2aYDIm!FEACcGXqm%C0n6Ma#-qHab$VLUFgBbzIjBT|xJ5Z{Nx zJvTJVQ2Ra+?+s!K5^R?5G8>g)C>xeucyo5U!&LxlLQtg+&(*TRCeg0JfTUTbNqa!Z z!+>XweB*SYQ(1)>_)3Pa2wkeqb~}6s4IrPT+bJYVmi)Suu1w}a$?m)@iI_V5q(i+MU9K+^=9iu5x$>XhMuva zt>OwmV={;W$TGm(8`zA;H7;n}LeU<)N~=%c6{d($qdn|`bumY`sMmO7m@AA9(-npc zrciSe;z#~F)HFY8iYTH#|~ zUSYE&qoq@xkDK5?xzuKqmqz|KzW4u-OH~uI8jtQ|s7@v5P;=33bp-x2gAM}g1a=5l z6|BT>Ae|sv*e}1W2*nM1XZTKDids9HOUX=KmVh?&F!lu=pDV>tHj+~}mJgZYUUy)j-o>J*jz!5^Y~cMv8z9z8*ny_;oVcR1jR>Z zQ##MapQPbe1SL9~XU1Ttt|HLuT|bCXL97nahb=@6pGnzDP7qI9m-4q~G=3qoxW3)c zt)pG3k*iX@2Lo^Du`nnsiE2h?%(Z*bZw$`+5r#t^-> z;*rkgcCt0MhCcul_!_yib+fTH&nMZW`mq+O)W!X>K14fB>$>3fq&m;|B=B&2ni?r< zq?y@anrlmn&0hP8YW*`T-t*#{UTxsvOQ_w@1>t1iqS*ocf09It?{yKCMN;)fShN-F zxgZWewYpte(8Y8gy~%U%&X6eu%-M~k&N1{fmrFPkGvi>g^MPfoD<~Y{&*5RIyjuMn zaiPA|&}_v6569Sw*WfSWNdCLNAtXNn1`Z)PEQ_d+n@Ik6E(BXW*TWpHAy=UJ0^Wno zrTjGqQXcf2#`~c@>5UEKDZI^y7!bi#NudwzX6C?)GbnCkU1DsjH46Pd6T>u1ZOMg( zPWMfZ59|uKi966!eDM;=Zhp)e8dxdidld}eA;DuX6m5~lU{GVxkjEvRDY0*}7%3C9 zm%%Z^%}sj+3g0}1B+a;9!nhh4m(WlkSV*FA|4*MFUm%z-FV{HW$)vPyf_+n}3N+8; zuUnn5CP8c~_459cz`^v%=YahZ-&in0oPH7N+z1Nb0kiVRSs2vrAA>a7I$*IZCYFd4~Rc8CUv`3z){`_P{vf zamf$}nsxX?j=(azq37GI->fMRl#2Z)lh^(sG708xykUO}lkB-~ak*?a^!NqrZ<&w; zNF}H5cGT`xJD6iix;^!EE{GRNFG@ev%Qdowu^2HY%v-!k=wj`J`^zLd!sGgtf3F*4 zoTJlQIA_IbQGq?+?pD1pP;?7iZ6~%g0MPRkQLdbq!|?#8-03k$=D8vx{a+;eM#SH< zZf(z~HlBAw!-hgYFupReEW=BTX2Hck#*FA6^kA#y-({SFf(%BpOn61WoCQ@bADZ(> zs;Ob*!((`AJRyf^?-kq>ZjIssZEoKbb})yp7$0U+R2C()GqZGgh}9pxTdI*p=~Qf< zGiJom0D`91h6ccPuv0u(;W%_g;Hr10gnuC{s>Wo^WvUNxgJN!2a$^}gv|z0w`jKa# zr>Fg#(#d4ax`|?vupS&cv&22nZJ?%6c03;LHXEr6J9CQjr4$r%xm^o4(X^;ZlHyh$ z|6Te`Wu?ZtD(la;(Gdk)&iI_T$*H zL5({m5|8GPG&yNQAxG(ZaDAS$`SaKmB6lMNqCYmALs!8W;8%gz1DDdUc{gx9K2alL z+8bPORF#sdSN$2#w`8c#Dew6TaS|FN z+z6`5N8_r>9m`OWWg;k*LaF5~_9#xsemK$6I0yi@4wp@7!FDJO%sw^1(Jypv7v<#3g0$-=uA5zJ$jvb^l%fd z$Cc_gMbRjPLEVl2jTLsIBc!q>g{qMa%qiLJyVMvo+8h6dijyV1(`PG<6dK!&HgSSv zX-E$t_Ck!E$w7TY32_%Z_9YS5q@MJ*v=+f<9$SQ4Sc zNEX^Bl?_bVg~nLp`_iQIwXLe|FkLOIskMobp1;5N&LkVY3wsztfv#-8`RgtQa)3in zC~WsD`!!TYrAUwN`XztXRR4>5UDQih6~~=l_Y~sP;kpfuh7+}DaGxmmCAZ|vk9>?- zP)V8cX32+QUur}9#Vt9J5rd%?N5nQ*iZbtdS2Z1QSE+1ffz@T}Lq)D(hG>BIh;82s z(*Tk?ejGM*+gG&UI)o0YM-DMKT}1~8KFEX@EI5Al!8Oi$>^WDC=qR@qz$->Z@-UT$ zzWx3^mcE0=AkDO-;B@xVjf#PsT}(jKRN%7c({h+#$r+o}E-ihZ)}u!Y=e z-(#{r!x?TjSIArm+j=(AZ z>M`oGzsKp0izm^JmQu3fWc&F$X&V;jVIbJF+e?gROvF)~{AsJ38j1yUTRTnTa?}o! zMn<_LE6Zi0oiWvy(qWq#TxF%r><#5sjhx4atpx&$H0_oeI&D1&`G5vphW3IEoGaHo zgFXy+wEsQ5|6a##b7%1Cq#0#dURy^>nXxz*8@+}Zg*eV$X!n0)y(^{ffS`!y=H(@C zuXPx07`9r*qHO0bLzY@OLCXx%T=?1kswS=v)FT9VZXcqGgNO@ z$qun!@?WfHD^%NQ&ndLo6b&!A0U;zv#u%!sdbNuUi=wWC+qz`NgP8-W^ZIAMCVTGFej$V|@xdC=I&8DjOq4ggszDCSYVCTv?)!1Ggyenai zutSSu?W4IRzVRn|-6h2H6>w6}JvPqKYB?UsO#W^ybt3AP`wQ4aVVN;dBJ2%XGC7vj zqt*08&V^>q&t$9h<@yK3YILv+|6GIR-Vq&T1H`15=d<&Gf>OS}8!cpu?;==R^?Odl z43u!q6EQ|IJ@BU?1jN6RxD@JFBGBQ=Cd}nH7)N0okXc}oY>^~S(h~pRjrCJ7AU!r4 zm6T)l$oQ!50*Vc2%YNZl%o^XKnaE=Qv0M1;{W`v~y<@*5*FTt>$k$FQ+Vq9ApBp*r zOA6e>Wdv-{@X%G7=frc_SVkn~Ol$hz7;GKJqf{90Owp@`CTz79XO?mi2KkBIcp<^8 zQZF&7oF#r`-Vy0gC!!oF0UT5lLSG^*URToNOMOlBeIqQ4|B^&fzWthL_nJQ1f>&o4 zRviz>w{YV<5RRS^RwETkUZ6eCt6QFv+j^9=zyBQ$38})g`CP%Pv#?v^{1_M+Se6sX zmP2G}AO#aQ@mAkio+CfFEl;{gl(l25XM-qXTp$N43^p>1)Q}qSETc>CEN)q9Hr8{9 z>zTmCS)e>ew60SUD2I<^yc^@@ypVGcM*AOGoK2$hN`M2wZMmr6yjB=oVh`Gjpeq|K zc?jcs*22!1Dd=S)YOI0*GaNX#@Rs^d40=m8oGE&I(@@&;rB_6= z-_$Ply%UU1V@E6?%+5lJ#2msS@VzW&gRKQu@MQz@pb>LuwPeuuzX>)2vRD)yR=TIq zHck7I_pi@E;eo${-js%`r!+*qYjk#$PiYjjGnc5HrFxF@6G`!W4%YTAq1V^TQDvVv zeamEBjljG{z!TNzePd^- z++{@P`J;I55>+q&*A^vmJNxbq-ML%UKGZr`xv5`J^LNj`l&v=v`3Ai9X7AXwe4^c@Fky@wa~Cp3ZY9_4(wLu-B1jwl;M6_0kfN`6+uh<UE&69I z0-Y^Y)m|u;DZT3A57u&qQ|19T&6ClRUCMSRW{UeIA-{DEB zDF}Jj{2$id1wN|kTKrEklQ87L1PmB4NEB2wV50#g3}_Gnv=Z)MU_z7tZ8gQQ_EMMu zT6rW+qM4jd>+P+*ZLO`=+G}sMwGR=nXdajVS_t6PL>>i2-P1vhNFhLE{@=CFnFmPi z{oVil@FC~SK6|hIT6^ua*IIim!8UI|rTaX*IU64(V`urHu_D{SC~6nO$A(5?iWqZd zAE-HU00GAS12snvWVjF19FN^qWjvjYa#LQp-w{G~IVHkh@>>T32!@Mq_{c-(Jjl{Ny!T>u#wlLIM{4uJfKy9;5wL`Qjl zT;7pU$oocl7uzY`rLAG^obkRN^gh4&|8zwCSt^a-7^cbSf%4-AFhw_SvSq9{xevWK zoG+9Q(kNt+Snv+aJ^a^0RVTJi|MtKGJtfhwn5%eXjeu^ymNnvEgB2$yypyeRR3+HQ z9-sGM&&y&`Zkm{J;`KZpgMt(}tBX7$Q%n&V9|t=zAt6&y7qqewW=Jy%xOWh6OYI7@2lM|OlCoGR-- zk^}l8rYAU2f@GQ3%VEc)qd>dTS;wT;^o4?wul2A!Yg=uwLKaV)C#}aB0Kx#K%P+gw z(6X9#Gb!rF4=B=;G%j4!8Wn>!_c0c=qjuD~cKC%yP@83N5ron6Pt-L<1C`bU*#*XoA#_1xEYPF|#foIb^v zJ#*igq`tzHNi2i3lmAs1^&ippZ3~bPwudT? zwDzIS-9J}YHWlt>gMfTU6rlZ02n1WaxJmf9sr*=V1P1_3HN7RTZejJJ1}4F+esim!7P4^vMHBI*!cpZ={BRh#n3f-BLh9BY)gpmIF_D1D%Wu5j zTuo}@FH=&kOaZCdm)0#Ka_a&}tQz?$yie+;h4Ow8?@N0>jz%{vk)L*ccBbFOYc4@> z*sL~6uJ(=cv3;YIZhu0)nmD4R!LWMQ9gMSjUpgSXGr0JK6hua>Z~s8+V|mjOc`u9S z74R3x`vw^-7V_Bs7+h&YQr@`)IO#9h=Vmw8_f<9BehG9at?73*e1jKQGYPFR)0mUz z%E_l&{%lvyXr88qv~$z2)RPkq?{*ioW;YC-` zX61NEp3#+gRgqzQPEMr~(%EQtYKk;A@-JM$@}}LvE$OUjivy?bU7L-76_G^A9&h@s zcM9Xdzcl%KyPKH9@F8*A6mOcF$T5H;IaRII02dfT3m7tE${6`Or@-~*+Tldxy~?#~ z{S~eq>#lI^T6-Dv)!N-%yVe|Y?O6YzYu7r5YsXqyqwn53!!g;W!`<34?&%f5SxF02 zDa$pXQ0C&XmPngx!dQ9zX-nh<(+uO9eX%ngm&fkz!vZ6lfVhYl{NJLh(;tF$ugPnD zCylsk62jJD{BaGzd(rs*aTd?28S4E9S&R4V63=7elD59}#-B!`__7tJRu%d8whkz2 zbImVUZws`XvXvLukP}8z027eFz<>!zEZ{o>r_%k`!e(C;_;5hva?IiY+Ry?&QtcaP zjBnIc4&X)VwD}9~EgwDERz8NfzP9qQ_q0e)ZRN#cv+ch)I6+47N$GKLir}ItO?guK zEyO7}LB>~!S3(fkKm8tTN+@sSNCw-spniU9P*)RJbI8U2J|6SAblFQHBm z11n?bQqYh^#SS~(*kN=u=TExCKODKikmd!cld4nUTU*j_7}Ky%?hnSbuFi((Qo5$^ zb~SPd@bD{;aL;Hxu>nO$8K#B`6dL5JTv_c-s7Lbt2ycM5-+Eex9i zS-rN!D2vK4V^{?J&;l)I<1Rj+?eb;J2z-?4|9jod;}#=sr_HG|JnG*T(42d==|IgD z{dlq{@;N3KuNg48bUofIKB~KUlK)n+;pa2TtcvoSslcCRIvEDcAb;^%AWrg+AXB-( zx?m0}OF!8|IovpBa4i)2kD?RL2*bQKY40+-dKN0D8|-sL3Ndr-V7zcpg7@ucu-L#K z#C`hBl={X5ANKCVq@v+dcan$5hx?dLh@#ABu;#dWl2ko~SLjK_NoZ*-B{w$Bm9Z34 z#j2;lw}`q&$SZdvSM!JtEnxS=+8(c~4C=i(k~rBI`Wg=*v%x7sPw6I5Q(Ezujj(WPsE0zK017bulo zTEpqz$Y@${OT^A2KbCi;oy=WHnHNhPl3Rk3O7?Vl=F5;4Be;+u?Nh_8x8rJNo4A>GRH?HI`FvHS`6;B0V-Q;18iU}oc_RC&R5!Vd zv(;uJjFUyZCl6kFV$?~|V&XHyH?T_O%EFDLs{=?OJnCukCrm&7eTB&+V7~15Ekx%f z1dLCN)-&TD=gm;}Vdkez-(!i{3f)<>H<~V)Vh3bxy}X^G?G$-HipYsu$%*?uQY9Dw zA1;r<5|P*RK50g>2M0N2;}YTl0fXN*3QW|H&JFkS8f*mGQ~2hr?Y;^K5CXdwrvCAc z4TYgErZiubd8B!O@9NAJ0<96cuQPSh`^z&Xy|XGU?Y&8zytVVzG3k&$OD=BhF4;cm zkZ&MdB+=zj>=>=MhT1MIA0tEY$0iI4Fnx9eZ|3}am&liJAfzLyt)Qty@Cs&tTh8EW zM{spPaAI(^JuoYmQ;|$-R9W2-D0IgGhP^FH6P8@PS(b4Z+*LUv$?OZ^l>N1-BRdQzrTd4ZrUU@hGt0E1CRQqz>oYP zCif_5L6++9V2;`Qn~=YkW4pKTH@`8?JoVI5Pq?{%k0dQP&Au4v|HrkZH~UUudyYej zzAxjLu5Y<-uy~_x+{a?YS#79YqFq+6MB0sP?vxo92Id!v{_C``enX_MV&E6!CAgr<*+^NhLblIJwU%>nb)?2DrUttHkV*@hcSPm| z)I6keYLKr)s^ThV7JX3}&PEYsRH|=NE^<|<{8M0vhxf>4^F1t;{I*iH$}^)<$)4Oi z|7>;hHmVReeRUQ?>w9MK)8%YmzWZtK`qQ@;NOfa)o!m(p>%dq4?+gK*u2YjHWtXW%yrY1?}G*=luJ+&LYRNJp5QV zR3IuR^jJhT{1ueV=mnRmt3e>KqgcF19}4H|z#JUln3t%(7sBIK+n$n!=RtxG!oFG2 zJX*M_eO%&ml;c=auf{yR^!Q6~jy#rX1&gvjI8{VY@pB^Q86)-SGN1hhPB?*WWx>?A z_Xa*~7D=&@+Sq1(&uTmOGotB~7UVFxa861cIGa?QV;x3=`Wv7+QutK=MZ4VawdeqH ztIy{6vRy9zUMRi901 zXRTS>iBjlDjDm8LUN(epQit5H!k2}<5c_qh#U!JjbLkTTmAGOxSB`&yvu8P``lu{W z$Q|2wrIE_U6RU4>O%Or)iZ9^C?F|u&pUybH&3TDSj2?YSlNh0ws?ip_FT~-g+jdgL zwrE22EvFUs^KXrn;proGBR7QSJRxFY{Qvm}p3sU+Ow$6#K3J85LwsaQk7{1Y>yb$*tmqu6G)&29J+8bYH#x3=Q1ecxRh?fo=otR*Uz(`}8 zsZyxCx4YP5g|U{S8Zi|mFzNJsG>6@+AX_JrlIYNUk?pdDSL{cHh<3zsN#i=@3``Lc z_XY9&D3`)tZ@TYYBTvVWX`VfNoQRArX`Vj(y1K(>nk1ynailBv{k@4#T-jH3-$DAf z!MR!1RBdD4EZ=C?+WpQzEBM5{igLwuuW*k(E@%#R59u=_`2>oTu#IYG(kF3}iJ@;f zjv&41NR7xa6Q8?&{H%zTRj~Xu(b9<93xXO~9GZ*V<|rDn?`^#u98NzD7A@-F&| z8mauX((*&gYwOm&o9Q3x%~{~(UX}i^Q$#vGUs+*lZ&Q8t<#&L456{APo{9{QWTHW8?lO$KgyBkAZ(juD9 z*nqRJWJda3eJgHpzA&;RQ{s z{MAIYi@7GB&_3&h=TTRG4{#7%$XR3oPS^s(PmgBYdjg`cMLKd~dhwV#-$-@WRu*m9 z?3ktD5bJZ@nqnf8N#WtLzgnqLUojD*^RyI?{m(o^>%C!PZXP20y(^O=VT%y6RpOcH zSmdI}wF0;61z^l}3nvjP)KlME_c2tSk$_^&uz52E0=~p#U|PG z56GdRQIUu9!E7jlp4_5#$b-fbF<5$D+7=(At8I@7vKhJ%Sn#URS%jhh4A~-0T;VL) z7oJ1@3oP#4cUvbo;swZ-+%IBZbGOS^4{kGeyMNqOVhc54Lfis)pw6axkj;!v9=|UoZjWl90YyUn>w58wef0Hwpnw; zvK#fNnbZM`Y2X+&zQboqy`2y>ImR791|t=;t1c`|Wsly+(`>am*`fDTbr-#h?fuEF z+A9z?;Au{#AF{T#iwmT3Pjx4|2<99k)mlJZK2ZfVMC}~-DHCG&H)N?~*O%@Kr_xm{ z@rli@5t}zSUo|hxy{7IA;XCWFA0LBdksO&usB5iOPDsF<3(W9b0J3A9n4UYP(C0M8 zs~)wWP`VFed_?3c$SF$^1zmCWRbV6oim&-wTqhlIyqK|ix+1jrb$VK+p*t>v|4ol>4kNZ>7@6 z6UOvZZi~(hRvZy>Oikr_O7;VYg9mK-#~Gi+8Ynv^RZ` ztHYnCMluxE+@{t+a-OdP}aH?^eOWVth;5nX4)@RZ)_pF9_ zxx80mlAxSx!)R*EEXmcLseR=8t7dhdPt3%6D#W==Ti&-|8J<#^27zk+A zj+Wa5V?+!t+2y=!e}#q0{%qbsKnW+TT!^$#UP>ZR!tI|8lrX{yl<<9#o$Z%Pc5>~k z(Fnz5^PY&c_du;beI(=j{~VL|h|DA*#kK$oaiCo;nHy%%mAPP0G4sWgAfiri35k zPblxkL?^%W*-lsQSem=O$G{hFSQP=u2BQh^rkh zoB25)ewAXTQB5W7>u%Ma2QjJ1@;V~7sJk0b`OohoPhhJL&#*@hbbqJ5UJpbLzmG zj+pg**4e1e`q`uX52?jE+E?U8uU9jrp4j&O551?LTuB`5\*zIU7H-n6ED>8yR+ zZ7!2P8|TXXGVR(Q8e~>LUS##5g2vVK!mycsZ((jwW*uX&a7Me+b<%eaM`v!dM81m2 zkjtOv8y>w;RZHjD^1h(`W9H#>SNq1*Hfz_g+}JJmKQ4no*^4|XmBFok$QIdTW{dQg zPovF?Te*?q6m?h0>4#kB-E$Em*)h^GCl`6L&~XV-9Mu}Bsx%53AAbW8+foq*;c+@T z^r#+s*3Z@E?i}c=^5=Lw@h_~(6MP-W#`h3h5&on*9>RdcHvqRlv!pCXw%E>*>={&T z62dFpxSHhz)@TF&^HviW6~m@T;d$RQzNtIXA+yn;YvizR;@gNjO?(?|x~xtn>z<`< znK38pjZDxIIubqP2&)s2GmTOg(v_zJE zUFy0^{w$p%x8&7fElD)%a#BHJsYEiOL%*Kr!W|Y=%ja_Q0>al^ahLo zBAv)S7wYN+RQu;ZT_aF6=rsa0T}}90sLK*ie+!jFX36q4chTe#Xb`9xbdx~MP=AFp zr2o=Z8R5@1*Ovf1-vSJSq|KR<0slY%e@Fhvn|Gj+2ze4=L8kF?NVrVn`OY=}2`1$t z>j#r^6D`=g!0cMV1zPZoRQ^l(vrX22jdirRkbxC2G3Is_8;# z^e3rAS0`^!=AURzMi1gSUHpgj-DuY5NYr<#%IsPG1$y?H)VEds$eVYtx|aH4V~bBX zL9nD{nJ0ZRmrDv2;4v8rW-Z03VWpnC4YV(xRIyYIVHrZ8OkD*YR*}P{4jqn z6ar{2_F}6BM7WMZmCQ-C$PYt7^}Z{{xO0VV34si zPyWc8_hNOHLwl?f|A?Fnj#C)58M9J3j+veLs#Vj4us~OmEj4uuz7119NUG`o7X{5{ zzUXmXqR0E@n>~(E(BzdjQJPRJf8@=ZudE7HETW!~PtbDA5f$LyG8pm`;t3e@>;8OQ}9$kVMOm#PW(}G&*z{ z3nQMdU<ufXW%Qf5RRi>W@$BkK|6rzN-+Q`bo|%wBQq$+J#9x$2?INl%=5^qIk= zsvIk|R`xlcTmg zAFC{K+y6p?(+F62>x+~>4oCglpR|-Ip}E0hxEvudZ6)IU{On2s-g~Og9&yUuf&h*=xhDB}$mi4h|-o$Go z*J1I7yq6BTj&UO|BXdUNGKg)|%PGpCeul)8U0d?VW#yb16JUcQ`blJB@ja?EItD zCOk-O>G1PMcDamfuQ{^f6()2mk;k$STLn(x8@kWgAXZKy$Ss|J94JI)<5N2l-9ad` z8Q1Vh#*%OtD@weXWFnSBHb?Qy>OecLlrUejlT8bXv@m#>h{ervf2JJeNl45CdZqs4 zc`)zp$XqxZ>c~%n;$71-vcNZ~)|lU4>+15S6U#F4H55WTt=@YxWoBZN`$0AZzisO%KLo?v<14EPs-KwIv+qE z7{$cwf)j_!CjiSx6%ktG?78!Ymq6M5YqEJb)E;5%wu$)wAqU0ZkSv+`vSc77vRa6g zVX3KD33Y2GqRbg!w1&?xES}Jcs2NOXb;gV^Mgc^I!hrf#oO7JEuNva|Wci>ux8hf# zZe#K5*@Qd_HxF`dXm!3+CqE%UoK$}=WZ+s#h9Bfl84l>|wqub>jOt9xpD?3o_QY!g zr_+|>;u*uf8CHkE&!WI-n@H07EqSU$!kSJs0;jZ=8>W|z8=Y3n-;jNX z<=a8?MCjl2%|qj4C~v0G={mh)5gzp_oiF4E&J6e66gZRPFLdo#QGn@gZD}bIZvS9! zCc;MW^fH_WF-Z~PhF&H(35K?&x!RVu;~$-Au=KG=wXI&)%^o}^?arc;)||2}?4g4xL>#NA-*e;r~s)a6O9x{lYS<_WKjy{^Pfr@+&)| z5ZjT)h>22F;LKTnzM5hcnH4V*et^RWg1n}$@N|t3>j7uL!@Ge4hoh{56xlP*h@KOb z!dj@YR&|O#VRqUW;;?a5!r5@86sX9pheN}yNWS`SX$J#;h^IL);h|CwE9(SDgcIe_ zG-u;c-gIEdE|1|$%Ws~Zb`8eQ?C2#Yh~y?JfJ^zq;Z>_De3!7bLls$jTBBe@xT@NXNlc1s1>)mWxKy=v8-(mlsvTgJq9H zI;0Dis<9eMw#?2T{fc}dCA<`x+ms#Ldg5yr^Y1HpPCQf6?vv(V@W&U217-h@0G z+>78Q?0%y_E1!ZjsFsG0nZ-Of8+HQCs5#WUaQL-NHD~M2Wa?D$n=7O99M9&Ov&Pz^ zP5EVf;pTaiO%n07C^9TXL&x;AYcrhlPsr>BZOy9qFp4sp%cGOZkNR&u2g+Cz$~8c_(t=|994KQmE7c(GV<1YxOn~Mj=|e=PQzPyG zi8C70ar4TA9DRE4_m7Mbp?jYZBD4#0&rLVL<`|ue!urgI zbCZhP(BzqsYY5fJj98H3a4a6;4sw-N99ng|ZS5gx+5Cj2CXJT;S{mZJcy}1(P_~xw zs&_$PjH_gDHdRe>qfkG!kWVDTedtrPPEZ#rSo31xcfH!=F6_VF5= z7@o;O2=v|OY`lpVu6Rw7M+=5FFY;YhMn|H^+yA8(t?4AkBBc28Z(+SYu5)Qc-=ED~ zVIA?dEE{K#uTP52-Rj32YO$J;QzUuZ*vvZ{o&g6@qc|I$6l6r%l;N+D zt!9f9k)y)|`Sm;V*ID1yqT2MRpYz-3^FUP84|o+Wy`{Li+Gf(0#g^u!xophn2PQv& z7=TM^g_hQf_xjcOav{|}TK71kq1|_}G)TJdXlN%GIqvJr^!;YuqQo$9G!LE{bT~J( zMJ~e^-5%#7tqedY`!BMv#aIr$_{$E_&BZT5*MxmA73?XF-?67G6S;D1PdWW-a{|+u z4{J}^0G$7&F8X(9KR$P__!-q%3dlOM=EPnh`Wl&y&(lSxBei6&m~OTDUlQQ%eOjX( zme+DPD_A;4y4uJOth@qI*)5z_q2cjDVNuZFwxmhs-8IGBEgt9H*ahoL2n_Sc#ZECF z&AVoR(Y)ts&HI`v)yf`F9T4ld*NuaOA2((3M=T1Kq=A2$wpqPymSz@e2Q8Mgt4jSB zH45Ry?)r7O=bG-=fm7Ss?TuVV7YKxH_+PKm?o=3nX(kvoCjr^}pFrLjHQvBFZ!eb^P-*Y~-u?U&xxFM*-DDqU*mO6Z6Q8p9y8L!Id>4w5#8gJIR z_7d*8mBZ6uam3sU8!1jQ9sakHbrSIWcu(<`saNh28bm1RwPsudyKyEm3lH0D{H{LV z&7RPzLN2juWAM<7L(De@EP*+F(copFmBqnDuanq0qdO%fGqYpH{>-}C1AR@44l=2) zq4Zo-sT^bVhLuFrW&Sw=URfFXnN))PnClbYAT*{TO9^xqW3qnCqq>SHr#&)2eU{3S zJch)!9vM(!N(wRCy4h};pW*`HKyh&PpTA_ecBr8Uu-mmTgiHPPUj~9mLe6TZ3cmxOnFPO&0Ok;RNVB%nl95q50S<_mQm`L#XLohQ)f)0RFgL%*x{N~1enwC>icb$ z)Y@#~@%XO@e2Bvx@$G>-kW~LgRo>$fM-?6yY*pS9(V@ph-4nCh=??;cIgSid%NP%f zZrsi*bVE=uVaWH7n!Q9f8zMMMM!XJDFWsHEgzlPrJZMtG4W!rW&(twKYb)Z0H5iNd zE7dPR;h@WREO9QCz%n+xzFfSv#7m2)Fe0}_Dj9u z$;`js^|5csi5X*vcZ9Y}Mp=IN2J=JO4(TMDtvB-DMgDH18}2ivsKReS=9tJ)B`rn0$usGenRLrcx)U?0Ap~Yq6eeky`t>j3 z(`fK&P9ysB7$IQ8J|$Mr-!MO_Z^iRRrZsL~eYGn`CSb)#qm^z8Ro)(>%BI~memx!e z_@BSdDqk8eujW5NecHc^sf-_+5J`hPVsMGG42*g4^kdp+9c9Mxji&9iCc>6ruaU15 zP)ri2>?Xi)0pB!ve_g#z5^S>Y`~M-V+WhX)KRnIk`^Sq##j_-B7VC-H(uhEDyoAj=me1jnj05VZ)f9A`6>MqUlI6)q1R%;e=2>Q&6{2w z!n1~FZm8lo_jlb%O~bwwv4k04Rs(%rpzLurJpI9}d|kx!Ro%{U@)S!pe^{ z?pcR72Gu-0{dkkTw1FY}j(jRVQZ|#XuC_Jr(g4N?cjm4$&Ii5;)<^DBC66=pJDE3; z!eGr;-d$>Xzr4cv!T|jJ`G%R(;%ZxU0|u5vdXQBAM?_;T785hvw(GGG&z>@_l*pvb z{`Ao5DE9+i|2g0jK0XiW%kHnoF1vRk)G^JRJ12u3aT5-94ZNgb)GYSrY#-M#-q-O= zYs!#wJ=30sNBYjvwfU=XtC??Z%7yA{ROTHPsV4Uxb%*{T`^73;MPUYTFT!;WOL-nO z%-no6rvp@c!lkGpvKuLp@-h-8xH?x}jfbeHZ#bV^eXA}~*#b?w*SyArR^W9Toz)Q= zJ?NMY&geI*VXevTl#rJuRudaJyML%csl5WG{AfwEiWDNEIN+~1uBwmUh8T4V%81}N zly~X>$kL~M4$zL%^gB8;&b9QJ@)h98twi4~of+EFrvpnL<0J{!iT#rBTxt!KGI1jq z%c?53wpJ+5b9*Jy5{FcCy%6eq;{>>+y0yn;63dn4%)saj-Mv3<<`bPnLt^t-fAnGc zkm$XrDJq1V3ZWDQuTz*Re#VtQC_f7C^jvf zAr2P$?v%I~Hue2c!Z2l*x=h0?BP5wZQ=?eyY7ld|Nt`DHN$zes8yze~%u9QzBWa`3 zdUb{Dik*>F;uUGKS)GbvD-`e89o*elBNH`jJHH0iMfS*3EWs~GoC!U0TjVcNg*-V4 z6uLd?8S+qhPP6{rWDDarLs3D`dqsi7$`c}11{)MC z$CqOXZWjx6H;|EnOEJ4VEXYN;3O)XB#<>w>vcnG^X-c@90K zpY!^TIdc!yI#+a!t#!WAl2YsRoaW^rX71*X*5lT6cOaabwWIzNwbeNT`>1sjuPK|?<8Y?d`Hda5&NHo2jpGyNdz2lL zGv+{ME_MHv#5b>^%1*M)yHZ+re$@qyW&b64tHvdMW)H z@b&_4??~Xa18+#WSRUnl>2KC`dYYar(ETmc*}t)!T=Pa}^S6^J|9BiFw@(M$lw7`(_iwe%>K>l2Fw9^~buT#& z@#KBMS)L$%HOpezNvRGH%Odjf3IE@bQk>0sFux17@}G5xu&f z>$cHvS~>4knzFmF*12xGtc2e6&cIttS{D8{Q=ARQK{*+^P&znx@~!$dSvVBR@*Oo>vFv++AD zym;#vo=sAz33XnM+1M4ksZXE}8R6DLnSib#ZA!&Kv~64cVYzf0IGwwE5sNrWppHnU z9pS5x8<4n0la;&V?>b1wiZ=^+=`*(B20FTaiXMaqmeVTdLkDH)(f^13o0sq+(lm)+ zrdu}lPLpPCZLtCI91_KRYz5%kKz>~y9|D5!c81y_T=UYcUL_H*^9ji3(6042+f%{| z5hEL2;())2;CbeDPdN^lP>t^XnRu^N*3R}@jTZZJAG<3+k(e`7` zMLRZMN{R5-=$9@abKWR?aL61xq!}xhnZkBh5-yB3lb2=2Vf>jye*Wm_ZDYEnC$xfWxuUQoj>Sr zS%co1G@SDp?lv2B16}u~{$oJBoVA;IH~9h?9aiHjTWuDpz6Ga?7wd62CvAm|v;*m7 zGJFif9)_V!4@0C{8k}gW#xfiwfJH;n1%WmXr`b|Xv1HslLQi;X?X0?VInKRPR^>sD z&ZR+gFmSX$r{xA27UOk^%QA1YBhZ%5!yfpXBbYZ@{T(xI$QB-<3fie;-58dnok%y6 zK~oQs(nITU^}~X%|683jIC18@a=83I`*Di>BTm_ zzef8`+7^>4DQ*0351dU|KWC9NmjAm*5%z*TO5nZHVj|mSG0iiXgN9tz$mUD<%_KS- z(u99MA0vRKp$Np!fz-j_G689$95v5}B&fMmFGju1w$OLkU_Gt6T)06XNZY_n;_Z=n zfw^MSm+%bV&1XrJA2g*UJWnSqJ3Jk%crUS*F38?Ia5+8(z|oYt<%RXzO;q}ZaE`s> zF4Rm-6<&GWX7Ww-e-qrLhE`iiTbw#Ij)Sm=Z{yFy9gT8yI-B`{-_^6d=i^9@m2krc zJ%2m6T@?u#QwLj5G$K=truyvSH}FJTnLn-P)65TiX+4L+e_-9H8RW}q@#Wp{0p}!N z+KK-L*x|_U!q4+Dd>gdyK=*;}edFpF0JDO$_MQ*ObL7zjTM%DHA2lnO>fh7zal4g6 z3N%xoJ#)Livc2bMBu$F&Z=HEvTtaK>99gN(Xcc9jBAS1BVClQ>}!xBQRJ?`bF?%RXX{ex?b z#}?9>x?O2?@1Ol6KAvh{yyc?W;A4xViOr_{3bL(j5o0vt^AC~w4##^@TKznX<)c-*>J=@KCdfv6FC*fIL@w;80cD>U43KcgW zN@_*dk**_|TR+O;v1xtIjUnuiHD|2Lk^>VQFfa5!$i#KJx1v@o! zyY=xnA5HAd-0tH>R0flGa67oF`xc*kUgUhd^^k;NDaTnvFQFX7G1$O(GA>d@U0ROl zK2OBS6$Dlk=bY}jx2wN>SJil4f0&hisHay5NzbPT zdfMS8?QoNjg}{#Wwd~CqJzpQ4(f(^4ohC!$cKiPHLK3^wAmoG%}sP+?LgPIE&x*VD{*JV@C(JW&#o{yw%=rOdst?f(T}F&iJiLFzWPS?~*vQIC zS<$&aXCVoZmk*>*KQH6>SVl%TW#!NI=ggCgKQu1{%;o-@=}Gs?1Cec2KmD-(OYx*z zE1+@Qq2qEKzNUNRf?U!5oMm{arU+N(aJD;AXX$$@ELkLjIKqt##1m!2exRH1xiMKH zaNuZr*Y_M|7JH+m6?uMFU~O)S-`}IUcgyX&^lv*4^nlLk&ppO2Da@**OSMx$M`xoP z6=i9Lck@zO9xFc~Q9et`li}IVl>M15Yk~eZ{iC!Z+kc%ng>*JPKmz`a%X7_!Om#M3 z@*VB&(XFEH`@aHM6qT*6RH-J;7Mm|z5~$ii@FVN&;@Yda z+Lz@mtHu^Y`^w)0-ztV7p&5C2W|yr%+@28ZTij`6h#Cqb^ruBr=y4%wyZcCr7@8ET z0oZt(_Y18%ivcd+O~}R%*xsE^F!BRSAwD%8h4L-nd#xa3vXNjHM zI9z-Yqyf*^1-Ridz0~8Vw5ENdRL;X;K61^6T|YF|-kamVCpNWZ+qSt{eNGHsOWim! z#y|###K+?Ui8o(D+}TtO)pI2+hKfk=HwiTLA2QASkcw2Z^+PIGYpowrw_3&z^lsDE zGxRNvcJJ7wO)`wp7097cvA%wJ&1-l#t9S=hx!1ASb#i^aZvqjNq>oqVo?b0~{j(tp zXS006181G+htKA%a|O;0TYsZRy$1>fw%Q}*>Mp7vglNs{sOE@J5e8awn=n0%%}hTs>x(Gp0PJu9 z%k$r^!+Xa`=}s2WFV5Qiql{_xV0l;ItM(MaFS%3)eZyH_`D^OWymh9CN{bIy+?$>) zQ)si@o0F?w5J+!jF0Yge`^;nHAKhj(D!PNIG0U0jfmXMcNFMhB^G5Z=T83#EZYV17 zZ{&D#U~Y8&{_02(lfu*(HLo|9zm2b>y0!1%VwT3wpDMWPIVblyof&GBci{;S*jcI^ z*ha-`T-7gWQ5DPKnk=KYY*)EsWxCeBilswL+l%jlqlID*H%vX;AZjhqWIc;JEy9^B zU{+}nb|F=GGB{=QVD5n93*v?m9o2&|do3Nj_7->a#-@t1suK;LxU6ELg7(5W%PxNyOyWP9l#|8vCcGS(iFdp$;bQ73*uIo7t=T2H6l z+N#oAe+|w*e(8ymZ;a~o6=Me4Llo7i1c2#pPMs=IaEdDWr(r!~>j|{k%g_hlU*do< z|2T#PfE5XS|Ly9Ir3?+13%M)cPe)G@`5Fe2A^U^EL39D$b;dWx=%8v;4^9oeFAlv= zJjh0GG7UY8+H4r|->$BH$Wr$BZ`3;1 zp3#X7iY)V(XIAe6F~!JS6j#aKZkaF9O-|JV;@Y+{-J882QeEjGkhiVJn_8*v1Ua;p zDC!%6T8S9Y>S30g)eOQz!-VdcIHCc>TYzm|#Y;4UK`4_!9 z^qfPGmdW?^&jCGFEb#@=Ak>y;1 z^A~yX`ma)N(VKaO`UwyWj$$}YCVl|;SHX@QXuS0q{g=`R0c8B)E;(s^&Tk-?p|vRTZ^llg3; z@t=+-3zB};iHXURd5IK=zZ*`aPPhM3>*U1@zw zzl2x5mc7Z>>9= zoW}hUuGvTE4!dwEIZ0f~6U$(uakKw*^Rd)?+@&9SYd{`@fdv!t^g5Q)m1F6Uuv~$@ zv;HBS>GG5IqQdS5jU!_NeV?A2T*yL-3?(v|*ft(d6hM3X4}E87;!(9!#;YV6T9J=h zHMjuN?)yQ(;Qe9*9eh#7TaRey{%nHRy)45~bf(#U6A}8vGwBg%I@Uh)^2w1k=Hr|f##%G zrG@lay#pPBZoi6Ga;$Uk$-SvbCTiuZPo6UR*z%4Cu1-;lr4P7vb$!B()6V;2Jg4zV zmD-mIe5~qBOT{|kqxjQR?P`E>r>krhOD_L5KP*&#{pwkI%@IC$mU>D`b&4-}%&+;# zK0a#}&l7cSR$7|>KTo6=|95t7s{d#3LHeTQaX0=J>L6iK1&5wSy^NonjhmzJN=Q!K zlww(0{vlkz`&50v#8+2$q)QrpTlLLbp?hDx&boQ4?uVVnwNj2$)A&896D{^iaETrXP)L)F=ii?^bDkGa?`mjs5;5aqa)wS|n zh)i8+ihrk3euU6#M3XrZh}xHLtfcG2pA&pl@9T>;R+9+_LyS9bM(E+$fI_U37P_7L zt*N0erb&c@kH86f$b>Cs4Qf}QPYyL#Y;@@B4E~d4bS^ryOJ1k*3a*+biun>OrM7gE z?{bf^BlOL*S|gRV)ncXn_oAJR_Nor*?|AMy;cUcJ0)b_+eP1XY zkw-?~)oRlsv6b?FLtT@o^3`aSnk?;IY_yx?2_zuOb40;`rKWm(pQ7Td&u%nR0s`fFn3ONXhY4oZFT@gGqz!yZ^ zlyf$6%ElE0utT$iuYKTBe(P(Cw>Se%-Zg-+7Jz9c05OmK1Y$_tMB|1*wSPCbkV#pDtAn^ZF6oY zH{DcpHC0DPwF+bYbx?y`gVYbjrt4M9IMt(meTK0Jf0=5{=nk*?Vh5qQ9L5|NA&cM0 zMy8mkuAQY$-@s6reQE#_a#A9Vz{0DoCGmFM9U#PlyV5vV^jD6RNs&yX7pe53U;U8W z$j$67bsbgH_P}Hpu_B{4Nqo-nF0~pNzS*M@oG(iU_%{%kN2N(K+1C~eGpn{tO@ufd z9&a#f$(SM-WSo>{T&wS6-zeMem2>5QA)}OIWHj4tlc)HGgMGs|TF4oor|4ws*|d`f z^~PD#u75?2>6Kp-ejXC9Uz1!K$;i04b&Q+vNR`JpS!rB`nd%_pRZGON7vPRShr{L1 zW|!iRWE_he{>Yu}$(pWuf?s-N8uggh`InV#Rl|N6U$7knE9hXKFG3DYsa)nxwSc(Hkwph2k2n zh1zN7da&^*=tY2vwngCEIPs*~%jc(BWlK{BY-i!sIpFPeS3oNv5 zO#OOukVZ&wSFTJ@oztyerW{tg8+p(eLNc#s;D#A9W!uS?JeWV{WLSzHwXa++*kc`G@%SBG30N(g*f1;TvjS1_NU~` zHy)HsLWw-e$MtiZVe1CPrszDtCR?Wg&pH<{d{ z_>Yh&^E_nA44jKhchE6GCeFf+=U`wTAH`H4wO22Sxb0m2b%3#IHp^lf(uIj*DJG}- z=!D6Tr_jvVZdFXvn14}GXnd2+0hnM+ zBpR)_0xHcBOB%QeKdh7`kDcE&Nf*c2AYK1gH`HX{qrHGvU9u)DTqlJMo-d(f5*2 zittUGOuU?LRTmS(jj9yRBB~aEvbzwZh;3_GNngNkQPMt z240kUH~~BeSRun*OdHbWOh;pFxX6)*i_Lw{fw)gejl z1!+l|>&+uLv|DwMoQ2xBKhVPUgJH4Uze^UV5{3IfU3FI?ahyUygyN< z(Cy_&Z&rL)B6+miJ2#eGkw_ln_72y{kh&Ysso@&8_mbF`f<%F9-QIbzw=$Oey+rav8Dt$O z!L3%G1AelbL6(ZSV6Z4rpe#1dB+pDFPmhf=$;FA}S+Suc`I2+M&yI~IU!s4Je&uC# z_^u&PQKc$lAy=vh!KXA{yscmGNzua#yF++6k_KabuQ4RzY)&I?TP|VQvd0!TrQKRL zDaC&@a>Znq|G06ic}8keMrdU!Vc`6qL{LifYee_vRU>f-$fgI|=kK3ttUWIAoy;V} zhoZ;SpAmf__sUV)LD}EAZu$uUg%2K`#41FtzJr^VRfaiv6lNbGsWRb zud`A%m?_1s^rx+qUz#c7UFpwQDc_fr^NBDe2FG{t}hI#y=;09fgV!i5}kIZ7u1|myvJFq`^GiYh({N6#D4!rbg zoIKe1HrMOa$^S{Rwc5E%nOmjBJDQ$^5?_kl0I~3VCCP~eHr@>!>&rs@MNsrgY5W4& ze=3egtL4Y7G>}uzTvaMBa@vge(OJdO^It*FdlTqs;2#DlPX%6|amlR_XaE5y=^K0g z1rZ3WIrt$pnuxTQ*JK2elII{0*#F4+*xyK%PY5CfGoBFa0mq*ZoB_X|5KIBLpAh^2 zuft!46R`MM)KKs^$Ollb8QY3>23l>c;WSsrrTb3q9o54nnH$w~nlm%B(q7Hg?B0ab zHgJ>}O4)(CdnKm*bAO_ZRbUOcbX3jeQaSvygHWZ{2kVzG;S0P2?tmLZ+eXAb;w+u? z4p>C3u1#(kIT`t(n0C z-R&Kzx1XbKb*fYP9C}c+)o!m@39WkDN?s_*iAwmgjW2<%le608fVX&2S%QN%si(6+ z=GHsFqpoAa2+b()LPSUD*NI-7Q{?N{rSh61uX<1g38L&j(G8DNSk*>YcN?VN>Q4PC zeN}E=Lk|jW3CJ$8haNQRa;r9e1-4EPJ$O_;1N-;-a{h}l#C2VIr9~&(-8$=yY^C@M?J_VWQJvtE4?Y5`uGBX6!ou?9DPBb!lr%#o!76B z>$s+5wS#TZRuci`D<}CG153$%hCT*=L@;w2W~Ik`1%R0*MYl!RI#i77+z$H6I$lNC`N<~uxM&4SB{8)`WYLGlEVS_e2EX>)EqJka_5mMgk=aq!a6<+mZbb>S!KI5^0v_ypE2Qxl4eX$SygfZC9t2qgX=AG8*}bD*>fpZa?*PdKDMSo zL*`bgv|nlI>%hxrEGP@FVU8+e_kLH-Q}vvy7^%n52??Xo;%q!bJzn&1Ye;b$GnNRY zxH1iZ>8ZeTSE)ZdrQta)U$h|n5t-xA+^R%QX<`R6seaA^I|m1 zrD~{{MiA&_&VtnQvxUD!zl<3RHi2mzeDsHLC=EF52edE>U1`W zCWwYr$A?B=BKCh=^s2d}s=V`WSNk~I>1E_>;N}+hsdc~$)3lP&S!2v`Ul@XG&O-mf zD&?UznTyfJB6rE2&}~#Ev8!tF0QvXmN_SDu?lbD^5bd?oX1~@PZOoWXa#JTY9-n3ss#*vF<_o5r`Kya!B%%K3ae8|`rr%R# zVtO|4ysN?VB_^iJG{t8r|4BVd8G`8%PpDBcqwYqIbC1-k+q zvfl~5#CiZh(*btAb>`d-{Guk-0U`6ADsjT`xSqD!QXCmR!s|;ZM>BJc-L=M~TG!3~ z%e04~TI1Wy$htKA*|y=R(oQ0AH@gT3z9+CF6&dE@mmJBZ3Zzs)yi`t7sdx}^{}pmN zB@kSB_EJP@h3P_=krg~4qvI=rb&A|HSN(85V-mS8k=33X&$>%z)iT^1vV%l;_ZMr2 zb6h_qIb9I$LD>F*Zf~_mJ#5yL=N(8I(Uj(BrChd964VlULzr}051%P>5*Jq4C3~uF z6|LCnIhAyKR>*$SkBiz2VOe*dx%X8(G@=e58c#0vu&;3rGP+oC_!Z?lAYu4y+xQrC zL^8jXj?>hLEp&gX>+HHe-AUYuJ;X7`1$InWiK`}0mAZI77$u?}q&cBw*7g;g;~=70 zXdMQU{ULq8AT-(laSS!2$~$bS`denM`XX2b9pWII;gK&h4V__tx|VK6($y9oZ2P4% z9R3@KS-!OUeG287g&6ekef@5#jrZ~He4!&rZM>ZnP=G4ah~kZt54`Egw$E^deqIPSNZ`UP zn_s`=U0kV(ZxhKTC^X1>U8TCh`sEwyEvxhnh!t357P!Ql>CMGgmH_dnMWsUUbA{E? zAvrbY6SEt6Z^Ei7;xHys~o{qb_on>5;-9e zTAMuoq)8*Jz!D(cFK(w%U04QuY2Nv2V~dsXiVygufB6X<#I1K(VPnc2CsOSGwBW=z zD=7%<5m>~q7uJcb;5^33WKoPc^E7X?FuJ^{OT#}E zK4ziS3g{2Bi7F61ab1itpCw3fLlZZ(HG33onnc zMb`wJY2c!9n>%SyH%e>ZEMUA`w=MLK6kx-Ri%+!S{LG_D0553lV6zEcEQJRoF-CG6 zGj4-1lFDF=^kPY7jNa{*|0!aaOdIyQTjX6IAoRV1f!0oQ*I+TsnwRc0}f| zKojPwf9F779T}U*C@fG?#?NPfgbuaTx|(v~&wM%J8LcmG`A1L%F>a3y1H|yRvq26N z;fT`U%8Z@v`or8-$9#)c)o+(8LHP2q_8ifg7rXrZn6qL@=expKwbiW{Jx#3e)SYu1( zmnuVdq#EsFgWr)>Oy*(DBZ>NIn;A*_V=?Z}5Uu^{A$7M*Sd$a6b)*!} zs+(BqJ9##xZqoJsbcyO+V7waoW@_xl%1)6=Roiyc|5Fkb#EjGaa&WFYFqvknp4 z8U@(W(GZfr61=(W9l~lMJn|zFj4eNvzq^8sO*~t}c?M2J1^|+qS{Z*xEjbYx zc*7nnJaeJl#$!^V{(Wh#t^1<0B`sVxdxRU~QlKpK``0l2wDks`{}Z{?{_8*-iTtSE zmNBhX_umW$)A$3vO_BEa25`wXrA~C?W@_-UVpb=ngVErY@w_=7X`dE+Y%Fh>AvApe z;RrnSFw_p=@1oAeAIKZ63O@fG-dqQrjlx=R7Hi0nOs<9;frf;Ifs)VIO_)AG_Y5g$0EcpC$yaz)M^H&)zsZmBJWtMXb1N1bnC%b};-{I-A zO$D8|dkYs7wT3)tr5Z@^k!Sei{EwEv=@m_lFY5PJ-u(_SX@q>H-O$po-P!mN9mi*6 zqa543%d1_xmphEz!H^U-b_7F@^VBZSWf>XALXFZB;}L0E(Xo*IIc@;)>e{jVKG!EJ z?8ZbIf`mTmYG09M_RuKnm$f!Zw{+ANX}6*Kv{xA+>FwV44P8rCXRsk8(7$LFoWtD- zvwpLVz$pSj8F~&P-!pXY3_U~$mWiDf+M;Ky<&)pkZIRxly!aZU4K=+rHP|Q<7byuo zqMt=2E&7|A(PMVZuc1bnDa6JCg^NQ+pVw#1z*Bl|8C?5>8pzVNG)7QV&_LMt^& zc%qU$M#E5Z;SUvbayA|&RfJ-vS@`kk?ewLG+^oZrJ+gA!jE`Ndp~i{iH;2Rc|9E>B zxT>l&Z2TaoC&dmL7L_I?7LA$YrBpPrB*_uQyrHQ%jTu8$rU$k10wM*RPC1R1m6c7} z&}GURO*FLw-q0-3tgtl6tk&*06PY0z$@e_(+IydUz`1?%|9|}S-RrFV-qyQr@4D=@ z>O4sXEtL4kyH~DOwjaG$Uxcmo&KFw-tF28l)svh_+Zm)HL}>?WTV4NK#kV(P z#G4_E%%y26Dq!J5W;SVHMho{2KIywqa$1c?djxA>k)#mcPPAiT`c>q**JgHby^3lIWs-~3i?n~#3yK; z^-%@afXp9Nkhri_jHzDaPTZGqDT@bFkiRX?>^DwF%z4PSnPmhM$QQ70-2_oOamI@r z@HW6{c$0z6Ofa^Myo4VI3rI+hj>)Uy1)jBq?k!3}TC6K@0b&GFz@;a8!oND>9 zqv){$qBIDtF~Q~;;dvAugUh#>Z+&GUn-*CuxY=}{c}wyQnqERprI8nAW+IKBS^25( zuMAiUb9LyyRhZN8r8ZrD-7L={x*_KldmM<#qN`s_$(2FWkbES{FNyLmlU7UG2Yl?- z!Y9bO3rAlct+gvEU|ZjFKhE=B#$2EdTp02f1n{eCUD4)wc>1H(`xZB6j5a<-cU_WC zcnZFRw96N-;|u@T2+hIZT&{l^%@@q$nXvFG#T)1=qCAV2;(h+AEUyK^qeU*#vY zD2u&_%e3E9LI6Jo_|L7^emk{g@mxXE{bw&X&%gCp= zXbF?QYxr%@be~kTuG-s@u&03g0DQXQ!M+z@KGxUYzYP@z#cC4scSWsL0WyO98b$aE zR^n|)T9%g9BM@AIMisBn_eeFt9Y9W0<0VvlDVcv3w}Uv41kG9dA4gozS~#PqMSi9O z8L(IaFzq1R#3$^k-ex01w13{n^t$L=jg03}@mj2gMyjv2GaG2wlV&w|Sf&{1A!!?=?e;9bSK1r? zV0%NGne7cbZfS2Au-Y5Ghoz9Uy=^+N)HeJ?3q;%o=`)O2TS~;7c|LJY!&@IyH!f7WYFEvBlV*VieO6nv+j{(Hrsc|ila^Md zGH3l(FHglYRPNK9h=c;k<(>i_`P3l3mVZu!?nrmEyv|e^t)5S;js-7_^`%Wcbu_yb zZ69i2&rC@EDCaA!FpNJ@bD{A)Fg_b(?Xv`LawyCu+_s+C`HaVPNa%cmm!MNVPdk8V z!3(02pjlx{t&)z_^D;$)aH>Ti42`b}Tj{$B=QQJbbceL$vYE|%WswEU20ho3Tw|6t zsqbvhw>wkD?BD3x{cJKa#Tup~QwI6YAZYlUK~^6=qO+3tXr7gb2hNHgrAn?tX_jyAuFBo)1*r>@&fYfug6Rlns7;r08IF4d z)J3106RCRRi%RKlt@vVwn)kG{Q3nyFujL8$!4zSFc|S{sruVbpwlFtt3&Y&JT4fWd zKr+V%)?7UgT02;e1N3k}o;{`Mcbw z$~lG4U=)IG9c+dm*25VaF?Ne<3Yw4d&O4HKOwMs*${+oA@DgC80E55LE(TlScRYSK zYrXdlUzw?rDSSXQUQEK0otM&U%cDeaZMj>d)|SWc*{rra-jWCW#_}#Rm9ylXkKfe0 z1>_?!jYW2Xj^5kJI$}^rkR=!=2j=gJ5ry)1#Up{hb_#_2AO(W4BoKmv6o`b1Kv?OV z0<$Tw`G#B8)Rs51SWrG=Vd$nROredDMNBX38YVu)%7D$f@{dR9b>Try&&Q{uk>z642I|cMx{HB0rwpmR95w4~JMvm+mxEyCXV$aIK`Stk&N_XO1g?Uk)Hz(D3 z)~D8E1Ib&zqIt-v!>7xM2#s&OV|*88aA@6#EO4nAH9d5z|8&k__%LjOS(B#ca zV_i3weQL2Ze z*NwH;Pdn#S%LeB0t!r>nMD@YDsx1RuRW!dIHp0gaWtIg9D38Z^=fzo?q-(5zi^QsVidP+OQeMaXCAq@O^a7E`9_khHi<0WAG<@)R@SR z8bA2{SNW(hyR}-#ug&DcMdv+xiKwmUEPc*z7qQ~XqX<6%?N)xe*jo8WYi{?FGjOn5 z_W~7ngSCXz`+AN{g16>(#<^=TSYnAr3I}1rc@UnFJ6iINE5)x~vGEK0!_u23aZpif zp!Y&bFVDUr)66x*yszE?Z+*Jk-rgeR=xwm$WnHbFh^wxc@s$0Q>L5_`#-d4v$m8KH zBVX!+FEz)Zw=Q^$Nz=QjIO;|djm5Bw)Nsf!Z|2Gdhf)-Pg~8d_nGJXA=%}&TgKp2B zFuChKd>|N%LzQm5g!v46vIXHjhDAncF zPC1vT7onr6?t55u5p|8Nk~A9r2(0Z-KdzS0Ua2*G^?g;Nu&mehNcNx!NPr_D$=FhQ zj)b&iba+B`HpAH>-c%+eMG_M1%SBSp`bca$I&v1n(Hi|5p9nmP-$;vReIWndm%Vqf|5PoOa}>kaohj&bK#4;+R1k%)_W&+x*-!cOLmd%S}#SI%en5Hhhc zpKxl2E2X6?rwh;NnN**lrb8L5CwdD0fyNb^AiBuwoAW+$rQr7t`8j}LZz@*lB5)1^ ze&NvtznZzcUGWQ#1pJD^jSKh{<;v-}qh&-eu60fD{S6Ux19oszbxzA2EqORnCurbm z>GJlkO^r_BQGqes${gri?)$*^6WF*?ysi1j_1=kX$rr-lXpuZPl6>}%{JN;w=jYco z_YUY8FfW78ZZ>KZi+R__SaV}qmwOg}0AlPQW^8-Jb}mOeuLr&dMYYW6gtPQ&Z{e7Y zv)$Q|rX7fV1H4(eW)*k3o#!8p?M;{N>ii?`Tup*u^3OE$w#`2inKN?05AVH?Qf=x(1vDK!u-#tBuSWbQ^*`moXM~en7)nyuB2k0W_nOJfB0S&uEkOrnYxG-)!cL zPshNQ+Bgpi|nXiv+T&sNm~cF zP#0KKTHtYUa=G_n)%7~tVnd(@zV^hY^UZ_%vB+V$;OH5meK_wEpRQC#%KZ$v7*ymd zmv;zFaydbJbrjU5>Cbi-M#0~dB7+0L&Zp3ZwRGVG*4nMC%U9s+lQLG{&O4!w3mZv& zJ4fL|KGhM{8ILddP$J<{cP;bYi2uFu{~G*H$X6*4^KeMa)20|qc;UD}Y+Ve-WJe;U zI7k`ip~(K!{AsZ`&Nq7JEit)}wD^k$BXiG>dEbQ}1xIo&gI=tO7a*@P)HiLV8sgB z*%J+m*{l?!St&`ABNBTq4m?QIS5#Q&&y{L7axp;(KAw6KKygvC* zHfK0o3hT5_`j$vMzBU}I-dkw(ycbQ&pI?7TP7H4s+XJh>C1LHwej0SfW7SO%U{&dy zchvV#78eM-MZ)L5Nabj>qMm92LOWe?NJbE6pt=1y2lDT#!A65Y zJ5!Hic;mumC>#u%8e67XBEQNY4cmcyNaAtSsFRF}Uk9-gT*dK^BZS*r4t z;ezGzoZhvmu@Sh_^>`d;xEG{hA%qmASAmtU-efY;!G!c(eXX00ZFN^67sqF)CEeg> z$$hIhNNSHhEC_VDEJCTxnw`e)CGb zmc^+DqEmvc^6MfI%4rtu9@o$lr$VVI$gAQpoJ44yyF0>HRyd{s9h$x*wQ$SV%+t^l7XA)12Kn0( z&>pq*)qv`)NvPA#Cjjb6YjKk7B{qEM3NI#P`eP0>)bodL?U@i*S>vqU1PVWVS3AZ0Yo?V zXL3X3+=%2~7955^%m`lR>#%(o-t&8k+NH=_9zRyQpndY$`4{qf&}h|JRwQ^HRWw%k zv5c=bVp?tVkgKgWS_XU_+0#FY?1v{eH)g;w=sfE@UzF&ex1PQ<8oda7#!pHHY@ZiDe2*DC4;@7K(IwF=ym56*c318q)m-mZFT9UThl zEtaX#{Js{{oi59=y+`%@x{N4IP!9ESfHn*C%PF=$>ABJ_F3`R%kL zkD=t4=puhTN(~ss7Olfsm~y&y(Pr+h$H%A%7*xlr!mDi0YSooz8%#abW83spECwrw zpiI@y0*;KS4jg6AqIQuk*HF(}pN)##SG3H{B2?aUf7h~8r~H`_`Mqz9mQ6sUM{d^5xm}dS|TR8?tTJvbW2Bm~3TJykxViFsU+}@O6 zQoI{Zfs-@cJZs+OtXYjxk83=id}{z#MmYPH(I!O&$MJGW@|Ux3h&)lW?j(L-A50gY zpQb~-)f|`cmnP6!f1Lc~oB<}k&3qYoBDrQxCv42N4`XwnYs3X#_%>6Rmg1AlLE|O) zt&zK)N&aQ_#TfS4r>TjwgIrwqi$J=#6Z66o|G6*J{GiAwsDenk0GetoE>%urj*R6)|%} zM`_t;54Fg-7y2F(Za#1`rPac1vp;nmQKl=8)J)FSV6f#@9FCx^H2Yw5pK@tQtZIS1 zU*_263fa9Byc;!^r%AO_-y_0&*8;&{bDa1$lap6B!{x+Id-WA!G2xp35atCtU{HH& z-*oq!R-ShwY6r($j5E_QTr9&^xLs?8H#whrhs^z{+e)}Rk6kZI%Y0>e+Ciqi(7?8s zWE_1H^Cph@CY=atw1`AN3319})mW+`2NbmIS!?)_S~P%|3u}pnNG8lWh7!{kTc5U| zsw@m<$s>8k>~`u`M4E}c7{OpVJNg$_fe~j8{W&McX52PXZGuKTcB? z;`Qa`!!Czmb_C=3^<|6vf8gVemY((Jo8cl4E`Uc3{@!!}v^MF{W6?ripuPvGp0;YK zne_LKi9x&lEjAgZ#^GRFjCfO$E3wf&K+G$G2hi60Z#kP^cg37?cz|PX8_A-Ft`#&QX>5OQtm1xfjMIx+sEr6=OpR$8%cC60 zt1LKC%#l3$S94K6hr=RDRalTQ`)lbGpr_ns13FkSmB=hbA=duJDfr7m7l?SM} z9lkk-+*h;b9fPl1>aqL^l%lrzyE|nRjj2;}H5zU$N`eQ6sXsWWX79LXPyT?asF)a+ zXYnFdz~gSun-k#`;by2VxeGD5liLa7R?ory333M%?v}(+3=92J6WlptjDz5|#H9E3 z_-|;N8wH@n;k&qnN?oxGT^h$!sQz31xLHemxU`|+w&x(!I}Dmco0nX*IM^)_N7cW| zZwI`S@xZS6K?jfHf~g<#2e{zjxjY5OLFvcNcih2=g;SSd;J3!SD0tvi%qL-fE`MHv z+m&-+7c%f}=hb(-ij0d@uHY4_4=93{YSir-b&GY8pWIew%gPOxrHcN<`?YL)_H6ZE z+0#?d3fPo4!ZK5jj3zXqwm6Sqw!*5S6qO5E|g0QWYIZeA%b&fu=hk9WT+PWi9_ z4On5AH=mbS4(Ng5_`=rHJf9BJ*Bj&3)N30aPS|)HUJ05c+*T$xi^d}0#{VeZDf&`B zaYJ|;@>WZOpK!x>V%0QHd0C4A{6K47mjOL65?Hu~I;?~axSSHo*3i3SuDDPe6^U$lEU?bS8ddu29gX&qUSF-!K+MC4;pL}(2fV=6SD+{Qkztf9p{ zl}Wx{n=`QVP(1j;#Nvq;UhR1o*Ba*{>v%~_dNc+pDHx<=;E70Y3Z9r9@+Rh-h8M9IGagk6>=iNBE3N1G$jiOZy z41yU{ImxUU@zMkj?>q12p5!m-qj$w&05O;1@}qiBVU-Ixp>J{#s-n7Z`~ zu#qE?alZAY4zxGtY7B1V$)f7x)H3)In5tpBfu>|$+lB7DUr0L>3Bm(I&#gFaN|lag z0g=h5Tc4redJ$X@SXebL3LVfko>ZmMz-+9_`7`^V=$^G0%$;n=sTrq=a~$(l3snzj zf_baC>Outa`!vU0MV&-BwgM^^!LhzR>RPbjZ6zar}x zzBNvzKZsOdES{-9Rewb7#hze2Q={HS5c452A5_$Wd%keb2-`r8C$l5*FAHK*vJ}dy zp6z{^BmS+{xF4s#)}6(PpL#Ax`vCdJuW^hfSVpm)f@`cepO$(+E+IT5pGD2b=EenA zz<|@?ZQ?vrU+SUpzDe-~Uo5y79r8Fvj`vjs+vcBbnExG4lJ0?VK>jZc^G^CwF_Dwg z8W&&j77?87o`8V{)~Y-O&qG_>ZQ#aas}U*a5j=%H#i&ISmVY*4K@_H9kNMLTCnxj) z`QFvgqB{usrmC4=$tn2h|L|57kBnHn-@C84Q@@L6y8C_Zd1Ng(L{{)j`D4M2(6P5k z@{&ce+?R7mQ$1dMnMK7@`%Egsi@t_e`XHyOv(IbDNoZ(4Oui1R;?5p^Gv|+W`G>lb z_gxw&DD#dtgPqF|7{G~!Iq`hexlH|jH{8T+SX?5Z2O@U5_UvJ0)9*9Xr-ykk`!SSS z&tiT`w9|F?Fbp8);A7MKPArJ?)d9R}$f@G-Zq--@f|10aV1bg&Y|q{%xElV z@y!c(6Q=3VrkY-CYPw+;G(CyznXWmf1 zn2s{7#FYfxQH4XH_!3IvJ<9t5^~VWlCF+8acsW+BUh^xyzGQfmdWK=&PXApMY-D7c zP|Z4rdyVD>-U?mePdP!BlK@AsAtzo|H$oF&8R{x{_3#WEdx5rl!>)RM{TD~gy#k)c zI5UI^uX^l0+sAbYx2t5J_v#Yaku#x$`(k#xOSm6rcT@?tv(}$+ zF9y!9%&*1*;z?{OKyj}NF&Hllc4-E?G=p85!7j~UZ|mK@vO9tUrZLTd+OmPzicu!Q zGi%Ezy#gm&QG7*IZ5icPG^;J60u>RpWzDb^gBpt;#EU|YyD=$*PxR39MJ33h@h)C9 zj?R!1)wq2)QBCv2^3LQ>&;@%q_2NuHx|(eYR?%dF-t z$*wLnSUm#u${1H`cJ8IFdU6?EGtDy**F=v$iRTIQt7j3$_0x%<%G`m;a7;sDr8w{O zuOQc7733MXvD+1iJF9>5Bb2Kx`>IuB8TXUm8XWxbPU*q>sAoXygN{70eWirQqt_mf z%j7fJ!MCqQ9PV_+@5F8?`u)!czm_54(cb_M+GN&)rUH22qv>iiZY6L}P4l$JMcLy& zKykxQB$+7f1N!#r%pG{*0`Ci8PkI69#7ye~w@t2yFRy@AwwF=uIceHpri~KOTX7T-o4PuGDv>R`eBf>L3^iuUuRtp2)L> z6G~&V2Evb3FZ2Ru%q~}rAMaV8etu~UT=UKq@>%J$#GLcTj#Bq& ze4HZsdw${CJQw$$jzZ>Cl^vd#z&n<+qqE(?fhx8Nd~qu(j=|g}cc$_>)OKSJ9~^bK zN?k2XFgY8%3=3#E1{vViVVeOi=4!@Pql4ZLw5OpA@IvS zo0Wx)3|WDFEn=p=#L}LDDhxMKy5#Fp>w0d-8gR|jm-(vbE`?clhS{7?+{naL2mLB6<7yQWDBkCpn=D#3&g!oV8|Z5#1A)ea<_s2E_VTULW{)*7ShL zB02_HO$c-{v^_SYPvFsKZmuF?kVwPy4CM9ANX2L?dSh$!cGLQfjKjLBW2C0(b5Ezt zYM*;LepU<5>hh1Px8n4iKrTLsI|_HE=l-pG9Pj^H`SJH#IrYf*%6zY_*3g?t!Qd(e zli)Fa{O?*FGGKkr?dVuDU^;G+OT|H@Vgq=IwpmZ$ScGFeKRluGu$S(HQIC0Bt=}jt zdXR7H!2H-DxF;E>T%GznzsiMMjdjHtoDhe17vNQF=v5r*P;Bc!&ZWL#39%%{e8P_$ z`vD>WBOV+c9EG#5_;PeY3}5UE?mM{e`+ZfdzsNZWq>58h6XN~|5F5E~=K0A$n&ZY3 zh_l^Y2Pec{IyxZ^&uBbjMm*T^)aR$F@;`UoaeH|Tyb9;vxUplfm;LV$0e$ATACgLe zAw@ZAqWlh4`r<T&t(mA;B+7$C#mqi$cvrkYYC81%0-+d$V$!itd zFtNG^cX@BHIzHZse8O{0RKhNdUAa{fcNyj%kHY9XbDBBc_kL`)P?-N0vUv2DxY8NP zJu)vL<_L-p62T<%*uwr_8d&(b>|lokUvxs=k0@ukd1a^*3-c>oOe=P82d^>T>i8-h z|G6v3?2SEDPVAi0gA)_t_5)wHjf$Rki)VfLG|zqLcV-08E6jjA ze8rExb3hHioc`DbI?eOLu4$ee^nf`)4dVG(8T{9uA3Y*M6>qyX`|?jJ~;D$0hQ6qPPIL8t)+dh+TQ*F|#|kPIzLf^N$Wh zx7%$BUizC?zS26T>}c~y7;QXwOxy~-ZI){uUxVLVH$5bf9m30_KvM8zfSlMnMKiBQ z{2?7b9(WT!$2%xD@dFTN#zCu(@#74*9sp7eo4Xf+r9Op90sm zi+h>aCS|p_g}vkTvwenscAO$lWHj;_CFzM2EHqShThiaYVZVcPNnFPxmg3GPF?zJ!-}K>}mH+=bjic19%}M01tDtsOGD zA~NqQx>9+k31|H#|1@^^Q7ujrxpHS-oOilw=SKo_;%2t?#U|vP`JwNbv$I+gVdMEg z2sYn{W(9s>9E70lL-Q{)Yo=dlPp%EV3Ws>n6NK1!Yy`vn<*e(_SVqZCzgZXHUGoaq zkT%wg-(Xaw6-6PzXP|+Q&PmKa``{W95pW^ZIpR`Yzng<$%f6+dI#(P=zKB|HpUC;tRX6s)dglmYuiSUeCGn(^G({7PeQ| zj*UQE4w~GN0bK@Bg!20*xN^*S*qk(y;XE)` z&W*u?*sxXY$w6I2l3>@escH^7jEsqUF41DZ;^PG&U1+xcSOP*h@_8*)0yWS%WZU(4U_Um2oZ-ro|g-3uw}a zoJ;EcnCsfij9I-p_u=RWFSaRS^W&n`s}D~q_Dh2N&odpPGBktYo6m{4Mt+<4O)i_Xs;hFqQw8)8N_;A5v=!ryB^mY zwB~x;lPpyn>cS#=J#GME^m^Q_;cIaR8<>d?b+p&SrUP>$j@xqi+XRqN#vkzei*CQc zvK?~&XF;w*8E6Q8s8`so(<^Mh30sA;xm^~{O=}RxB2%C8a6Zk_Onoi<==e7oIC%{ zHp;&@fVq)n-QTA29pvAu_TcB5Ci$lqfja^4@Gf|Tjy|EIgIz$H z>s@p1a`;p@bM+!tpR9Dqc=(^rAG0%SG&sA-9GoTn&Efn=*x~%hZ`1kFc;_CR#pC5a zbAB|Bf8+dU=KrJfqnT*u2gb(`03)sc&jx4c-{GKQe0IUq&;;_rt|8NMpavwkL2Yt% zqTx|uqSl^mHm*nQ#M}id=)cP^PV-}~d95CYRf8XXw~x`kJI2fNUys8Q|HU{gN$B-B zEJecq<2WoJ3hHrKrG)>}aoELh6U()2F%)!8&i@C4vNa;=|HYu}Dh|r74o)zKWN~^( zHgo8l_82lo=`q>N{=t^vBQnm^Hyx4DPZZbior^=RVFxKX&h*PLOGao|l0>thM`*do zE||<5p{+n^YhGwY$q2283JL9;%Q!^47!4O0pbf&p#0=nWJ=}aQ9~-|%4q3sb;*sF+io=0ejF@4(JrIj)f@NgYVIQqH z3jpd!Ilq9!N|OJkXy4HKo)zla<-azRR@b5zd*~x;THQk5quvty^cv%6-%|}XT@C1J zp9Wp@DbU>%qEicruO1AOauV1T#7-f0YzQ0cPnITiz*$8cFL7!*jAhW$ zv>KAmJOxb>>Y&LjmLzR5wGi7)k$!=*1l}v~Zh^lev^g=&Yse{=oa*-=%}~xLywxGC z6gZC&=Kyi4h~xar9*kwB4CPvZuf#d$l8O^nabga)-Qa_%v;Oo=M&BW)95TtTKl!;% zgI{4|e(L=|V-3$Ic7I||XpFsQk3T)uNE>jf!JmG>NWoJrB)xi2;H)rSm5^M%3|TRh z=`Ka6G>crLoLtqwFq#9vd|YUlzl%w;mNbGK`M0#@e!mk*=C_%Pl&~ zhHCHo)OVM_t%P>&PO(blr-;h_^eUq&nf4ACF;nsM$7B3xd@~Lvh>}E{-NFRb5n9ZOi35Iv z!B5xue&k$29UiebYm2D&g?xjPd?;(Xn-uk=811A`PY8aIz7KSlg`#6OB1FJ^|RPQ>&3`!Ll5C(r;H7!Vu1e#c-IgI7xs zACEQ|!#`#$x1tzZA;j;;J!lO^ABmmI;IHE$de3HBY=^*rz>S2K^2H>A1zJEKZN2&@ zq1hU0mKM@XE69AAdncIAAq(bKHh=xW$#7^1xRrv3=JqDJmDGdVnF>3dW^(ta?xN7u zVf3sEb4hiaRNI_Xs$mlobDGdfz)+T@G~&nq3jC!`e5=8bnPoH>{E)va!zj3qZ3e?` znaYSjoXt{!<2YKE%_uQ9gwY)b-6Nzs zNxJ~_k$SD)z;wM$ z7)I+NZDIsyhmqEPNBbXp9Pg&`U6RFD-5{T5qSwV?Tv_U~h?~+3xN9w368O`P8FkMhJ>Qi&Q^L}4Jt@4TSQMfleg*N@hvC!b zX+iuo#J?>Ze>w3VCBDidWS_j4akC`u-Y`z=nK${t=_EP1L!8X?>q@=)DYJfGW3*as z29u12r_Eq5<0SZJ#lP;tIRM!iY{UX78LBH<=&jD!=1G|SzzwbvU#+o+0lRrT2F)4j z7qp3?+-2TeLCw-4q1k;~#p2S)xQ%sBIEoMvPd^64RYXkHh+6$UYT;D06gXOjQS5P!1|*uKoPe3X&>o*7It-eRm( z5m^Dg_JKtOS#&p9sQX3Q9|Znh;G{6gtdDPyEUG!k>fj%nDbo)>I-Wv^QCE?QrSl>D z%8JK)D(>RQP%Y7N(eYI+g?B_4?*rhSLEdTPy@I@HlRo74**a(XS=+88<_coY3~Av{ zUujgm5B$FnU%eDYwFFc(#a1uzEkdQ0r0?ORcN@z=?@wQD1eSu&9l~e4z)=Fz!+0(Q z&lNV$C&@Fq1$cf5{}v`O`@i;OW+p@%{n$M_Ghs4mrjX_}P2)7EIueG51H>QN6yMf_Eye+29w%nJg}EWF(i3A`c-^Un4M_||GnB?qGlr%x zRF{O%T!#L^&=Q7@F;v3P=Lp$S*i+p{DRWyw%0@WA&cq_@PcJd*qUvG)5~Id^D)U)w zKC8@UC7=E&^end{XbCBvs=enHlyiV`ZVSm#PyCJLqKMEU7`g^pRTTm|$qnp;5Vm8y z`v!2<5=Z)Lmxbelo{76zUP_IX`}kaARD6i1p9@JwH|V80P?+Bz%ZLt6MJu$UItgsG z<1&f@rc#L);WpDW{`6IbiVP)Ae9>!&R!X$FCYo(U%RjURl=$k)C;`2=w%rd(naOTnD^kmZz5JG?=Zr1OAM2S3-A&46zbzF|1-7}Fj< zi;Y;um@4?E>H-nj#woIx3y@$ro-8Ml&0fu&_JV?c5xNc7mW1BsWD zI4g`8`luJ*rt#A&j75i0oBzmP7Neotz@_>T%lMxnRJx5^t_X4Qr*AV#chGFxj3uu! zU(=Y4W1tV4@NQ(hlsegwZ6`uP2$nV!4IQV079*E%c}84VGR zRGvf(^h+U!(d6(LIr#l6N#8~2C3vQUtWp^JKIjo7t7D%+v6t6SvF8cR=nonF7$Ynr z6!+J1stPPSe1uTx5=y*8>&$$${%D7i?b;r>BAFRzq&hYC>a;&XKCaf_vmd^($$<4F zOXy3D6rs-|eRC&0*KU#WTS(uZ^iMkJHyMdSzsYb3z0|YqE?5q(a zi^+e1ka5>BZV7+cY0uP>4lRbHxs;R`lB5-u{NJY2yW}slw4`?o=3?q#YIw+C`d{ z8Zy!9?~WFhEq*jH3yGN-!qn-3e_+go{VWp(pPJbnK08AzdHRJsG0gP{lswk>8+q zsbOdyL+*VD&15K^p)7{_Ff^H=42DKCl*Q0cgzVI_Kl*YJfW--P5?iK1^@w-fq} z3)8O>bgzI;H`^=7p@JL~d}oVPp4o9S-xq@x``q(=Zy2}sl(D zD=XswT=ZtyQFOXv5SyVMLE{<{#p3nXJc#mA)M+@qVaeUIVL5I5Z6d6_hM_|YRWP)l zp=yRI7^-7v3qvvc5n9VoB15ksWT%Yzb0ftCD6Y7PIHoVJ3?EUtjG3`@Av%tiT9B@T z2XwcE=+qOh(|$z)^99Z)v?bDW-;)co^CcGZ zyt0#wIOd3mrFlMfMD$`rxkPa1zR~grm|RrLE6e1&T1UikMyz&F&*19R=$}z1ZhnoH zGYP$n?uh=yig=6>*8tCoSiy+r&_Y`gDJ*sqz&guyM2a0w^{2U-Pr-*u87dkbz*hC; ztB&j`UW3=jq2DaD`u=!?N=s??>F~?3{y}v0s=${8J}>ZTfqxX}BeZjz9?j#X<6!fsuyKw;6>x{ajY!PgC? zp6&Y*BN6zvwK-mzPV^e0mo`Ed{JJ^^{u1E#Cw_-^z%Oiq@296_YzGNV?e76ozwsAX z$e;e0@fKp$3;bn?xBRm2=YeAyIbI*m(e&GMgx@OTUWY2h9BDwCH%Yscv}fSSIunbq z>P~U$YJr^vb`*G#z_tQg3v4d1;T7Va7Wfk(J%XoRMKZpTxFZ4&655HFs7qfLD56W> zrBtbcD&5^kCH11vKjWky8bB)4!yw7J03^MfBph$dJ;f3ye$~C9;GGQO?SxR&2n21V zOkZjV`K}<}LvV=qs7{p3(exD#*#5G+&5V9^(YR#Hd~w!k2MU6p=HCoMA~IU$s&54`7MG;y-i~G&=AQ@D~$5K7_y0 zC>8vb#u6?`U>-Fw3Ar<5wWO=sxP-s@@|WtV<0_37jO!wCod|6yDbt@iLkUZT>*E3o1uhDcz>zH^d^86VW?Tdbmrz3Z zpXo=oFMxUV)NeMHGA$*C9tZv7q*tW>96ob6`5vo330uF)GPaMh*017?XXcW(GG2N( zl!Zg-(Df$c4sl?dXEU}Xb6gTjgiIn#u@J)EpPY^NYxq9Jes3 zv!nbg*|;wTo6~T^!xLyDQlG^{97e=S3z0LT1(_&^7DJ9CCK7KI@k%T_iz`FvXlgmk)RqrwIo4x5=j>eyg*=^CLAW(9Bw0r zQgV1fbKv~1`ZLn~*^5l~K0-U)9E`-1qMj7fNnyXE{iFD<&!u>mVe9jR@F^0QFL1uV zIfOPfdxITb%MhCoDqTW8Zi|nVKQ;wNtV@Y^h z3iL;^zGC~E!S=V?Kj49Oa1s}@T?T!YEpswCts$q^oSZbv4VfGhKXoxi$1@mujG;n? z7BRGvp}7o|GISq9l?+W~NHH`4A=`Q!Pygcq$U9DX{hG={Av5BRnq|ptbhLsAMvpHX zWr?-@74k{z1U@I=$(j~W-B&Q@t`^u?U`K%$32ZB{HKDB&tvP|b7L(U2Azoyujy%^G z_gdms6ZfHTT;g+lQ}{Xa-)-dLsa_<#dPd-%1o{O&Dlkvr!vb>%ZLL_&w#|T~n0QEv zu_VzxiQp@hG0Ny@1>HtF2CY_|_2mm|8Ed|)bvKb+7C=iONME;2=ed1dt+U>`UL zYBK^yQMrt*j)*8myyJ*)GvXyjL^LCoI3i*gasO?nZKiRIc;Oq0&4mWsD6+)yE84hC zsP(%TW3b~_ta1HAA-XstQGPKUd1XmtdunS)`6Ny()nu zE0{so!AaNoqwar(<>e0oe=l&7z;Oac3jD3WRDlBp_7&JuU^jtR3A|k3r2^Xv^blI* zq?m&&XmUF>DY+b){AHD;iPi`6_H0MKG3du_GJgFtn#w)P!GaCV-mmd%i~RCevRG{q zv{K`d&rtGL^M!g*;4_4_)IHh~-`s08dtV?_nt27}U)5MXMs8W)>PuCQMID8GM{Xkn z@zCSAaW}Lw8@&FAQ(Z-7moS-Tv-bccRZ`Msc*Cr(%19(RoK%;{3EvP&IZ8o}`t)f@ z^)Y;Of>d*R>Q+@QaFe|8kEWqE0av}QBcd7cIwPKCgq?i1Hu|^Ip-N(BsM14J5rb2o zIDC)hZXpD6N-xByLp`BoJ@!{ut zpoTjEY7DZ~z#i_wi6gFu!TUEz%$Fp;UuBo&+IWyev5Q{EzySsekO3Azz+m&7x=!w z4Fdlr@UH^@BJd@F&k@?zFth)=Y^(GiMyNEGcDeecM%jb;I2lLX1$CGc^Iv4qs4{*| zXHHZYf9KO5MU8I~lw-yOpxClpc!L7)FeOxUfrOoKew_utEMLuqIADDEG3Y30@omgO`i0`}gbc1q<_%lxmi6X`&m}OE1Bh=SAdI_Vy{+fwQB2)JUHn(vc%-!3S z9WBqTHtt*oQEzLCct*Sp3bj%gJu7gjz{dp^3S1;`p1|3J<`{7{N$-;AI|PmwI7(o; zz##$$2}~B)TVQvAR}1Vcup^;m+v1vfDRY0g+vGAmi#Az0wMKT@6a zL&nAj@arIdsgDJIC~&91GJ)?Anlq9V5C-Zyu6mdeiE#wweKLq;le77(3BGg40VG=TGqbplTaJTCBCfz<*(7kGfs@83oStL{gs z*ecPR1+EwPwniCDl((y)=1PfvR^U>Bk86~rD2K-5M42zqa|Avh@E(D83A{t#c!8q? zrVAV*a1fzgqL%2g?VoD3r}+q#RLC_{Q=S_!`sN@hDGj*Hb3GY!2 zekygE&?1sO32DTu>IS@}#Iyd?-Y`tgH(o}}=xc$Q?Zng+HcyT+Pu>Yk*}s)yVRCgI z-du)?Y>2RHGgJVLrtBwxyZQ{gL%QdIXr$y=hU(kaOvyP! zZGOrr>HtJl{|=&3DC!!DYO;BYLm+ycM2ksu3jVICnmknZ$C#g23+zm2TZCic znIv38!Y!K6wts$%sWk+i8joJh$_Hj#GRcmU?9oQ@XbnmA%{KipW4)7}`u;Kn^zlic zAJT-L`45XmTJ)A&P5^8rT_Nc_CY>$sV~?fpF=I$$c|Ou9(tQU1)@h%tiQGSsgY=9? zC9N^~qn%X06g%z21P>*HjO)PQsc;5<{~@+*t9PMpZzGx7BCu58I|APj_zIzA#p30l z0^bvNSoKgLRJxQBdO0Qd3Jw4>Lmk5wChTzV^Ow<5x>`Rs^I992h2sjt9i} zL=4B+c@$GaF(1MSXZzKG9KWexuNcSR=Lo9PMNG<1gtp3i(AR*&KwIVBRUnxSR%gHaw$xjW`90JCPC~&yW;&%+cxb}a@e2#9YZBQ5R zt!fh{B^OdA+EQ+#6h$d7z%iEeWB+TF-CrI?Q0;ltk?dk~-8qhwQ+k1Ns;1P2^!u0A zp^%NKfpSa3=n@eR+0_%7LKf9e5h|@FhbuxHINz7Xb!feRYJd)!`=`2FzhwW^<@{x} z9_&2|$S|`v8191$to5-GwgF)(5mpdkjfJ3oc*K#op?iRJqpe{t;#Uzr*TOfyCtS^? zX+Osz#Civ$QKd}$+ zCp5+9_#$f?TAW8or}6|oOvokM7oK3LU2e?&6vgZ=d3Oh)ZIz|a=gkS=znuKfz=5?> zssr31(TCJmh0!q`vq_iI7j)$zI^w&De`>K)4)Jdxekt*v49Bnf1o%6f;9p4mq<+A^ z(}|DogC1w9Rv0Tu_XO!wQ5f}dNUItT>Jm~Xgs9nGXK^`w-BJ!)V;GzOE*SW5Khg*? zyipkT5!l1Yws@P~jkExqbq(`UMp80l1mHJ|!DN4w3nlhcKK1&M(6%;Pv=p2AdQw-A zdXYtq@%#IvV5@f1GZ;?4t$!^srjqB&`d5iD7Qf6Hg5QRMfiq~677|B2C~%g*dj;N2 zXlYW+NmwZJw@fQ3uOd{M)*s6J41YIN2qgaxz${le>4!@GlO%BfNXkPbwuCBOFGt!E zh7f%v(f<@e-@}FRLbRoP=CVzFf00wqxtdFB(z`uDXU1?%1Nm;QUk;Ana;I*%k9ss`A?&Ok5O@!vWwxQKz;WYf z@VRC%__PRD$nW}`-2puC~yme)t*Z89pK)afh9p#??Wy&`X=(Vp@~i;UrfTpo>#Cf?JD1!? zD7Viokh>oqubDumui~^$-xQG-F#3e#{raI!-)f+!WAm84FA16EKQgXT;&u}@PUnS` zS4w$zhUD4f>&_9@c(ukD0#5deR*o0f@`cldEg#7=3<1ycHBb93ht;e2b{^l>z_peX z(qC3}4lW$c&LiFd;#F99R({+3INTmhJXadUf!UeWd2Y;&*asAjTy8mZX-?m|t zrJ$SwN^Re<CGfb~ZORxp~QLbch@4 zhhAR~vzOaQ#Ya&gPPBAII_LwWk9E@X`_>Zr)15sxyD7 zj$vA|H=PdNI?Z=dN)4sF34a-OqyLgdPT$QjQ~Ip%f5Yg(*nK)SU@Rv8t^B1n6WUf- z0shf8|7PT$ISl-VYyRfWA6R)G#M*Bvv7@iY=^A0o%~$ z6U-^i{;3wTPz+6HD2t&x8OmiSlcD7d4QFT#LxUNrV5lELwpJYVfAm|(+eUepG?mA8 zG40Zj$0jpvD@YMP925%PZAdxhr`$+wH21SgRT&?iK(<9QiK>M&p~W3^Uws=m>5`E~ zp2Ns!{knPV$gZvyd$@_J`uB*5`n!U#_J!))PUm-n}8g>GY9al3)UZPYH(u z#+xRGSI8lU9Mt`UmOYBi`ONo*LYd`MrlnIErVq0QStge$`?HIP;fMY>Spq$2YzLnGZuPs2q%d+ot*NE zV|6y)0~NHszoRlKBcaS+;dGD{3*8qf5JKN zp9sUJGw@{^?LmBgRTjn_`rHwQ&+*-x#7`Lo{4;QG8{>Cxg1>e?T z@#9AW|Jifk?+wFedM_jX65?l{1OG)Qe(`ACsRxHx_Wuf@Qr8#|cN1c(na^#3amQ6?xdA(kk8x#!U_`J5-yYVuMqTn=9^ z59<9cd8Ca4k7gkrq)RjDQb^am3EcwHRg#Wwdn5bU_O6D6(Zm#cue319UzKV7s?BGW z`K&ab73MR5r+RCK!*0@!oJ|GSj7-QMYHm^EtzOW|_|^c&ZUi_`g8@ zHRS(2T;ULF32_Y|QRtT#@#Ztme8!khH=gR${Z75vJKh4mdfu=~KBt(^Ogz<)Cj6cvzru;&cNAW(BfW_x zUA*~>BYn#z^kYdMKMC}I4yRXJ%<^wOtITJm`K-WGt-rUiy;_i83HjX?&TqL%x5RuF zl73DT`W-icK4miK+d1i%8ks`3)W|TOY34J9e7cA6Vf(m%d@9IiH$34+^+PpGZ>;xl z;%D9g{AbUBzqbkgWx}8M+2_E2(TQ)hqrpK|(f&K!AhB=DkRk^CzU#KkHbFJ6jE0p>!#sylDX~# z*}X!BMG87C%X0M4&A$jP*$T3t_c=nr`+S_gRACs~Xzi99NFiJLz`GGDok6x2I6VKJM$j+ z8QIQMXK8-DZGK(JZ}9KIZ_c^--6i~F$Kh+__e>Z+ZgGQF-wd>@_yt0x+sN;#bMtE- z(r*I!-5SQv)Nh&1&qscPr-I*SaD>m1-tFHqy|R^|75Sb1gEPI{@Cf}KpDOg$H?+zs z#-7{&{$FR2|6zfj5nA3tag3JI*_LuKrA(OyDR)6i$l@};OtzTE$iUO57l~6PDE@sv z5xR#$7gFebVS;kCpp648)2%_M)O9xm)x*=p_y^~s93$WUtQUWmU>^pLBIx(8Am6LV z_rfr~8Jh2%Hs4J0T~5BM$k+N)NA7l{Tc&NUC1zq4FduSaY6|L;1CP0gMbdyO!qqsXAHw z+L2#d;nzBhUyU}!IGbNO`K=_sXPWZcJI&OuyfurE%u?Td3`?Ky@`YVMqI8Sa%w}4b zOsi#s>0l>Qwb0@>GsN#A@|$)pe(!*bZg@+`Zw>jKgvV4V^zf* zidOfdU8aM}HRQtaM}@2_J%&kiaPLnYWxu)-TgcvD>cR+M#UocTF+JDqH3|mj(A_)lo1_E74UnOZh zNq>ebYi2GU8|pZx`t4!NuEu@Br8QRZK3PTkPWiqsdp&1OVWvGy$*ATMIE57KB z6qWb@L=}gL5}~HQvi)_`fwfauBHkpl7!;>TZ-2pRJxel`jeYlC`1nmoaH2y z>BMqk2Z(*Xmd*96K3Jz#Lz>_|McjJg9)&k-nxt`l$@&-8b20xL#(+zDW5^(BCK$YA zGdLH0snGAZ!;wzen9`o~Q%V23e@Q=A=pPBAXL0zX7wDIh{&Jh1>so2RSL29I?fdc9 ztxbrRlXwq_kHIk284+@!cj(?=U;u-dE63!~@!a3<+vW`TZHIK46|Nb%WZQ~pN& z+Qna1CJ$wik0bqP(oYSiKV}q?;%STiA^s`~qpt*gRZk|K^a}AYDka_CGQ{_9w z$|~jl9*{JZk}lJdLf?ZPH&RG5f;8mNgTDsxmr4%f!=hA7J^}Li6mG9=4Xzg)Gtyq7 z4$4TuQ#DL9`5m3b*yF|-o&t%t`|(?S#kcAUfu9K6OK9gjEq@th#pgg)cDO8x<+(5= z!V%}w%JU6lIiBiK;g&~87hy5uW=Y(=VG@=@!lvu2oOlPJQbk#3;lm1l?7u==scs0P zq75D)Zsu&@?$@}~$7){}KNr@%awG_nQMRC4NxXu@%ROg#RiJpn%TuXzA;4HKyGX+m3L&g!R;dJn0WhNxxz zR)6on{#>tMnjb*i6c$mPp{}zctS*mA{n#CBW9EYG0AWi#+^@sgp3_8w9Yh^Q)OH~a zuzsw+m-ranxR!rRN0f&}K>piSgj4{-Bwvfk0^*^MR&3L!wa ziajkY@}Dk|P8D(bGa zN?Y4vYu)$zojK?1+0BC5{(tZPecw+vnKNf*p68io?%$bnX3o&WXn0tHScDf*P+1QI zy$n<=b#Chw`#+E#WB&&_z_zx-jMLE*=;)ZK@x(%VePC;vNMV;!*eXjHM2db-OFZSq z%%GGN`*P(FLo30|d z%1u`-T@y@K2VKKW*IK&fHi^FX{Kp@r>yHx**Dkv5dW~<@K+nD@|fVE{_@*00kFl-Xnd&Kp(;(DvN-XN~O5Z9~4^-6KQOk6J%*K>Kb zBI6VHts@ZG%CivJ(6q=9AD0maZAZz^A{Sl%conWmrt34hPBLA;r|THgwT-SJrt1m1 zRMT}YU4NNx$h?KFk4)D(y52BdtLb{ybe%)jL(2iPC@*6%yOSs6oBeCZd za83}Mqj@#sUR^1B^>eN0ql|txqkqgROVM~@fAe6(a>bXNAN=DM-cBJ>c&U*QT$T74 zBY1rtRolj^6~S&fWjNZ3;9y43aSkFlLq-t4Ua(y&u0IvmE5!8@aXnvL&lcBCaSe-W zfLAjbfed<2gyb!htQo4a`eA-EothR1P5Tmmd>NXK5F(D}6<;voL~eix-jR5b!3T)o zfwtgJ&X5^-7lS`Ggev7^r^fA&;Cw*Uvesf}>px>M*68ef2t-s!6Q<86*f_pr< zW8}WT zZDt!}l<$&TDlwFO{DwK$WuAiaSz;+xd90F}LnwU(BizLZ-vmrHW0E#-hHbp#IV!sn z!zdyCw>n#i3rJs1Im1>!&W|lQ)GGDCxLx3nC*oKyN!MV1axNw(VY^)eE?i7}8EOSTnNN;EE5UJNii0b$my-UCQ|;NqY(Ad!Q%E1N)9*?wB>k;v z^c+F|c0A}iNI%0)zaue>^j&H6Ou^Hnzlrn*+vy)p?0E_Fvq&%c{}<3`C(#ujn`H8)yua7l)5jriCOPuY2ggrR9PyV(7k@U5nr(5Yh-nY* z4kX_~^8GNyXGR#mQt)4v#@`379R<{s{4e6J_j2+d)t{f`w;_-H!8?gsyim#VS+@f@ zFhR&2Ev_e}N#6pQXHjM!Wj+m@Y$^kL(@tWr`?ms(?cv=WymP&WyBm2ojCbpJH=TDs z;@v{tt>Rq=@6N)V)yojS9mu$5U%>RI$Hi#*JY+UF;+NDgAJ6BNX(*;&lrBpa%kPPN zGgo?X*LxGCYIdo{sS{VPM^h@cvztddtt8)W@@)meM*Q)_9zSsZKpAs9@hM$jRSP|~ zCN4)`82^LmI*+b*rE6!RqXVv&=!!op{T@y%rr$%-wL9@E$YRT$N#C0V<@LN;X}SYx z`usR(H0(lXG?^Nu|KedOYe(YP=aC~`A>*_(8Ji*FcF2(RdOfA>ptR3`g>n9I8ZFD? zJW?FJ3KY+gBK^0iXeY|>{^wAdvw3$1@0RfHM&5PvZXNH|^6p2x+rYb3yzArLS-7*( zC(57kEo6K@>>r=;zH{dSIpUrI=J+{P%+lq&nu1mvFHk>mteMVU-1Xi|shVBt6<6%$ zrnmyiy8@e2abEYc5IJ0kJWgDXNfTTq&!P=jf*UD#4+Z}Qpr7q(wl3S(?i$&?CcXxV zZ&Xsrm&NsYUQJcS$;C%e$n1+Cqy<83S!_|U2mCS*R4Z45YPv}!=W~Ox{~g#v&gVYE zd=3X9{CS(*1GD4zO%D?SP~;61`7lNP5m43|kNwwKI~hckbX1iFU_RCLLU6~(PgMI@*JR_dwDA!EnkV-_^;+bb)(v! z2ah!uZ2{=BonS;KPB7XGD{(pqfd9!7_w#C|d3B#eig&xs25~FydKXfuzW~ab8PGO8 zbf7DKH5AVHK0-Iiw_XbJ%{FrMhxopiu|HKoxyQe#u*Euucw{O$Cz5luom0lhzI($G zrkKz362BBf(hhuI2TkTCii-bAT-VvfuI4);ki1Jb6Z01CdgDwCVY`_amPh$k8{XOq zyoLQ*sEHUfHYCEAvY~DPXr=;uMvyq#P+-?nP~bQb^)cdlM4AFd_tI=Bu!sswVP(D< z$Umh3*Jm!B%YI->VkK;|JOt3px7d#&`+DY4OB(yuwsprG;EFquh1UA(vzN0HaK)`Q z{;x~Kiq~1QZJBPazdn78nL7{TuD6fM4N8}e{4rbh4&>)mqqOiHu7@ja_+P*0wjWm8!!{~u1CAoHLp#UuBZ;KOsrVSpF? zo2f8YXg)j|EUT^p%P4~-9!`_H8$^$iXyQ*nl$(-kmXMV`c7|7x@;XxP1iBR@Ysy{d zPSL;q8pCP7_?yX)&-m{$7}y?Wzl6H;$xM6t*l&&}@nA~7z?3ffOU{1|!@enuyIg`UjxeeDk zx;{5u_tMp8y0+7GBSqM?d;KUxxt&oSn~D;VBsO3Zpoq+qXty(Q5^@8XCNgvX2+*5q z535(n{_=c;OQ6(6N>Qbs6qK?A;>j|0QeW|EX~PVdP4b1*<|-R`s=YBk^GOqAes-8N z@w?I_k?NZxL6uKQb4)6;^tt|%Mo;|oBI&m?Nk{dk=lt(dbbIkxX?$$m*N`tpz7K$H zjVJ(${*G?(ug~)R2RqB^VSf^R@Dgyz44O~=DL(@LjVb>4d!@{uH+fCVpJAjPMCw?I zn)n|3LC~qiZ%yN1?flzNaLm3E95YfJYcARh{c6`-)JH4+uV>O*>1u|8_d)PVEjLoi zM&{<%K)NEnZpJquEk3rpi%EGo<9mga@+a{Y`lFv_#?&Flq*`(nT>-A^$Q6HYhCSt! zTS$t*lzUc6u34gdz7W5d>F>w)wX?n0ehDgxHl6w#Yrs9Sj|DuHDoe^;lXWLqKLaXHwNH+Rs~9%%CkWfdF#fC*FxJa5_IzMZp_8hNQkI%jA}Vp=^Qk=t5vJ@+tS`m6Cs&d`ep#B7cOYfQ zVbq1X=G zS{5)pU>d={{s7Z6T$E=$h?u`*e3wHso0U;Ec}D;#$l=`nS|5G{|@dJU_aPm=Xzse&ng=ZBjt6Z9CS4(4(U{OVVh2LHqh4X2xyBU2icnZm2yjCXD>E$v-QNpSATGi~n-+E9Bn+)SH$c zY)^X{(4GdS@v~o;Pp&)2bz_Pv{@y9}oM4&?Nw{*^|b`p#IB2Iqr{P!FYa1mdIwM~%d{KlAQO@Xv0jmgsP3s4Wlyop=H zk41=aIOPNmkjFF1xW^Xp8X>qgzV2~jkTLY>meERmesLte&HCvS^6ui*tOVu+tmt5~ zl#a(;Z~o7a4-vq3BLkSfy%>+glD1n4W)sXAvdTED`d?gv>a6EH??MsHx%O!0a3tS) z5F~fAt_@8|mJ!5j1hseyj8W``KADvG#55rsZZDw_h3dTuNNtu++lEK+{rXO*Zp}v~ zt%SP9e54)kZDIr0rzhJ}ZoCgN9s*^<9zoHIS*yEkqD2&Kms0*=cKL5&Tc#=h03m;k zeDi$g;mGP0X;B&PAw2Igqk0^7y(5?v2Z*T5;t=_C69ePFMBr|qbrJtk7v5N^jeF21 z%ZCY{CBEWg6P(2;&S%6r%C(QBV+`?lX%R(rP}I$)C@Bx$kA%E!=*moaw`Ity$R=+; z$}6V4d1>hXnbcs|wb0-v z_y@SGJ{B3oRW_IH!SD_ zY4jYTdP%>9+Guuq&d=M#A*{O-YlqtMkWF9}dA9x>Jlg<$MR}sD!6KopbD(F`Lhd1 zSfrH~b~fFk`LX19qC?o&FAdvNQ6Ra+F!L%7v`e+EALH9`5BQHDfBc{{DI7JISW@Ow${tF&F(rj~ zexhAZ*2NK|EMk6jrzmBV?EeRWo_va(kIm!D{lVuW-*l6Y>t{O-`+E}kT)wR~-iDqv zZIxmx*d76!Oz1rnu#N(f0K$xs@vH;CRi12Hmy=9mUD#oeS^2T%qBvlht^U)A)yG|g zcJJW@oxZI{DE<{svvOI0Fuupd7VX$^Up|UY;B+R zI~2@$cE;7*Cx8?@mun`u4|lz*C}l9E7?X-|)3_wJBk`}hAz=z7#K%j)V$N~65&U}w zA0vW~um%5ps^or*!QT{ zB?4sIAlPo?)hrtGErQSYGt;&UcfA{!wj#_2L>b9AUPGcY`h#B5uDTwynn^3lU%ua6 zz_{i6-Jfnm^utB;$E8Jov@FlC6}_J#*WUn` z;cY_7BlbuP6!LgWd6Vq&jD_5vTk_TldCaGGfN(8&SJ~w~z%R-P(Ug~{NTt#Iu1rUK`C~u4Q1A~*bdZ0A z;O|M}CmP=}5d5pif2f_`%%9D8cM1 zZE<=^mt^Ntr(l{S0ga}Tc`=z+XE1|5{@7@desR5rS1T99{D-`*8^K#GdD%bixC^-N zk~CV5)~^o$?RLgV!5>O4e1loUAgRFD3o4DSEcY-kVd~mBjhTcaU;3)6QLGR@!;9rhL0?yopmjxUMZwrCaxEX>$&zA=B$GFt(qzR z3EcI@DgHp2Qd1ML6Y(a7uDl7MyMd}jJ{VJr*J5npoJ}M?-I_u>X7gTVMc}1~dnw|# zLWHp?_OCrCqFsedx^ci)Jx=&fRY9|f9cu|1NvgmXPBcAY_)e(F5Fz=c(*3MUvl$nyKf+c)xO6 z|7LUzOCd)V;1WvQMu~S&;uUyrZQ%~I&re3$%3XYCa=gVef;?A|ryD$Ma$`P9WwNOJ z`;p|!TR<{TkbIUHl1cJ$4oJ3;WQ;-b*)E$DE{Z)#lFC~_G6W<`2PHdq$IH>NE=rYz zI4I>8r1OyO6X0*wwOzN_rY6LB-5`-E4v}~pi61nGAFvbmfq1S(Tteb*5?^5uueK9! z2C;4tA4=kzNW28ZR#j!^^OcIA-rEpVjv!H0#bw@_&z2_JF8;?Lm+uD5!j#$@@?Re8 z8v9i373E+0eoddYJueM$JyZTQ?~{jhtl!VIrs_-IWe3o`Xw65bKbaDSyTn6ycxCfR z55@e!Ga2Wv4_Z33ZRj?1ti#cg67=<#(Bxn2L`ty2rmlcbA^t_2hqjKQq0X*6}T>@mBnsYUw`Sa;N0+#jE&j{p7{@ zPSxLzGxguJp6-t=cZ#1c?!*KA_;>T2ock^MH3tmV4{%-dZ0zVY2c7>_91o+1T-`V1 z{=V8|o$DDV!&r|}N!qj?B#Gq~|0Wkm5-oR{`LSsw!#^HmrPqV^4H7eZ{%Pd*rX_Tb zx9Da4{})JU&zFJYvm& zH7_PzaGW=&rgJ~K8qY{B(HhT4WtC`Uo3>Ei$H!XbwFL9?#Q2nZ81PHt_>?ziHSLxSKj?PjXW?@8J`tj}@_%UDp@Bi(5cCfM)=3$sSVSWX3Im~%5OJQnZroxPX`Etu(We;rr-oZV8 ze|vnelKaG9Rx@^Bl}> zm_eHdE5l%>z%;-FVOGLi1#>%0AIx@`&tV2VHCQ8nDe056v)2{_ZPq{hw;HQz!bv&a2O3{I^0Dt9++I1 zFX6Wf<`tOFwn854J7InWvkK-c7$3||ggpn-3v(UJc`!{db6}>zjDV?qez4L4(+#r< z<|>#CFugEaV0OUlg84Iy0{UE-qha{__&MkR^8`#W!gs^|2F8W^eA450INba_ioDzi za}&&Jn6qGfFm*6fVfY&l+Bq;wU^c*919K@%42Hil3)2C!7G@*NHkjQou0s$GQw!4pvleC}%r=Z zOJG*QtcU4?*$Ja~5DqgPW(mwnnDsDyFgszCJcPqcKMvsq2!~k@({}>GVU!aQ4l^BQ z$q0nQtcU3TrtpfA!b9$u(clS3t8yq>sFndySK+U}~5nC5W$tqW6*qGeKE`bd$PX&^ACz z-Z3BRg$%mqK&I4w@3N{vQw>QA!C8siuLlQHzPGqZ-+&lq!e&`9*Y`#{OXyjPQZ@Br zNtY?L;G^c0P-m1p^=uUJe|y}ef{(eylBrY{fwM&9b_HA|$_!j7Wp8?!wT7k2lBtAN zQWkTcIaexjh51s781_}S(q%D44d9(AN=KIIqP^;|0J^fYWXZ91Fn*Tp0%)=CcEG%^ zM{KqDW6d$O+*_JUkP^1BdJ$tKco^&6^N6}tfT9tmLZn8f?YqfmtF8v0%(=bsuoY6D z3X$9YUfwemY^^LO>RN-V)U;NVh1o)6jmX}oux(c3PuA>O$m5+Xd)5!O5W0EYTUyvR z$QH?V&RS7|vSiI<+mfx5y<$e6I@zNP>y#bu@V&~ehorfXL`|whd9!9xn?|@Pn|Wx~ zmzw!?9?>yR&Q&}fcI1;i=$S{3ME{+OI6R*Eo@mV9?(wtt7Gc8*x`$f?9#5G++8haV z!~)?Eg309ZKx#vvouXQV+i)O|afD+2?wCbe8E&l%gh-2FgHeKJW+3PvW%x!hD3EW4 zw|QAC;%x>cX$m?N*FjF81gDF5#5B`wZY4((W7urPuXvRX2og(HOx)JK`p0(CpQ zv9_t6({LN}M?BFEe{-NE04ih)$1`M8ix)$s$6{8LhDe~b)gOs^Vr_m;Fx=W22(@~` zEyC$D$h~GzL!Pk6aBt8fBP^s||6j_>ZGcWjVggZ**AtCJs9slF zpcx7P1$4xOw?9Ueo5SrL-bf%C4n;lw?v4mBg5T!}gghPLXsjgwP*7J}J-jftK88~C zh+>Q)Ey19t$?u8wv^Rx=fwRaVQ!jlOzaNoA{2og5hhist!pN&gS0L(VF7;R<+5^!j z)GHKfdz%8mK&;0T3(J^9)WY zyd52pa7QHIjrnsU{?-6;pvSWekv92T!q6!i^F{W} zC6$d;C8e_~s>>JG*UW5KP*PXExTd)?*cn|s8)eD5vkY;SOMOOo>dI#|mMy5MD`SQh zdBPFTXqg_NF}1SlMpI|2r^DOo7b*Kb3H#0(miZA!Eux^R`&QAY(WvMmyO}1`P@iz{ zUKDeice&rw&TK8tDW`Z^{o!^$dYX*r_fm{8FGdib#~ZcyzH9b2v_<@0U$qyR+y?gLfhZbq zD$>2g*AfZ0BZJAx{u^V_u_mXH^C3vYC|;#_F>VGiqBaBHaC{AjF|`@v>-QaZF|X|4 z_%=dRIsp_qrMn3O@v=1E5gwMIq~Vx7!gHL(V2it7~(raL~X$!q|44TOAr;cI<2&xJrs^vy}PF&Y}}7P zUn<6OThAf&ss;&{OY6S8g9G1U~CR-poYif(-*s zxC1?-lGZ6l#E>L|)AEthTaf=gA;-$!!t|U1i!v+}wiJz`PD+ZX1PU=DOCiOQkt!p< z1R{mmc}B2n^@f0c2$l*x4Q+&lK&M?%s1`{@z#)H_zp%B?R-&>uX>Ruo&z&tY%j0ip z!FVkO1)1t7vQMln85j_wAR<6&n%lggR)1lxKqNM(mO{wvje5|F0b!UaOx3h+9rO!x zOXXmX5mFApXmKXmGV7oPTIBEotPzg*1X1R|+V1rMI<{~UU@3!y2(XB%v2O^GUY?>W zFDxwd4D0d+SOL%gFgS=FZuocW=S9DfrL57IgTBxSF*_jkbqXK^l+0ok6Py(O!7$o_ zmJwqGOv&3@y(|kv*=@1d*@UyyOM{|c#Y96_vWI0TRA;8M?}eps5r8&V5NMZj6oOq3)JwNe z&v48j8Zhn~yse6aI2D}Q8~21eigL;+iZTU$Q(#YpJry=EkWw%~798s!%k*R@!u$y| zdrIrDn3FbL1fSJm;@&JwwvQ@5COYU$jM^{OD}0 z!gpTC=Z^$?*v)YAFXY(cWGz5+iZPACa3m%{03(7lO+S;izO6In!@|ALPA;V=oZ^X2 z#WO4v1tg(N;U|WCOl#pI++Nu)KtmCd#eaD?h%piY$S_Z=r$fXrgCmCJvbT%$dc1y) z({;q71HO|XZO2QhSoc{n*Xb&%a=Ml*fZu$q2hDT3Jg|#ShdIOP+6LO9#ZK48fYY@S zw6&mJ3EH)wnQoX`(AI*s$dJ3O4Pl^NPkPWU0o}F+r^^M~1=u;g0ah%D7hWaM{{ z2grqCLsV7N-41q9geO_6>|X0X`*>D;!H&5NxV=FM=KS4QZsR0mZ@N^3mV1K%A9~aX z`gEWz3~OOesnBZ}sze5#2oPF&o3U`)lNpXh>{ui$y4n_lLQ%F|hj#z-^!4Q>zf8Hg zzP$5Svd>x%x{hCRY}-@#bBR$Zz`EmEhewW?8tzq7SO?Eue8 z!MFB%bARV({!92jmILe4N)2xZ541;>Os+`YE`JU4ZWA}#haIHloS1j&vD543-FN%# z!#2RzVA+wo--Y?gpaV3!i0t?L!pI6m*x$~g4H{CvG z-n@h9`@Ir3{f%#u|K!J%@oNAp+m%_X8H1{bc;>Ah1iSn&L%(b-OUlT0r9`748PcRo zc|FYTr;4VRYJjG=AqxN8Ft(qmr_F0Gw|!QcNRXMgb|x?IV-w!5Xa@4ctRAbt<#@h2 z6Hi`eDQ$SqBLD=s6z`oZ!}IDOo`bhz)i{JF(_x_14j|Vvl~b{1T!&|`^;k7-z*E?H z%5uE9(SY*s!}o>D$mo>o3lo>Ah; z7A2uPt9+_Fr~E;AUinPfs{B!TLHS&HQTal7N!hJzQ~sp9to&JdMfr>Js`90>UHPl> zn({a0b!CsTL-|U1Q~8JTmhw;KZRKm_9pzujyUI7p?~%RTs;VlgL(Ng0s-_N92dMk0 zgVg=iT=f8TusTFNP(27^{2}VW>S5}k>JjSU>XGVD^#|%v>M`oks$137JRpGM)MM2G zHD5hJJzgEI4pUE3PgF;$Bh*o9p*mWvP{yib)NyLDIzb(;PF5$WQ`D2ysp=`f4b#*a zYKdB=mZ~$=a&@*kOP#CEQLEHSwMMO0PX(^1SL@VyYJ<8!ov$uZ7pkYJKU7aw7pslx z8LC%ZqBg5ds$cb~t!j%JP}|gH>Qc2`4XR-^q@D?k5mh5(yVYH>x+QH>n%cTh-sHcc>fH zyVQHtd(`{Y`_xTpulk7ku==#RS$$T0M%}7Dr@pAZpl(xNQeRPDR=2CKs;{fBsXNp+ z)VI_()pyjl)pyk&sqd-3SKn86svoK!s2{1j)KAop)r1;X|Db-V{!#r*{X+d*{fqi1 z^{?ue>Oa+gsQ*&GR+H*Cs+yzZIC64woH<&~z?=a&`{fME**_;Y=YX8SIYV*|%sD8> zm2*hW!8wQJ9GY`P&fz)rIp?blITx$*b1qXCK%@Y9lv#4>bTQ!nd2_U zYRBDm83fZg4!|__gCnn9Yux98WoJc0BF4#qo^eR>u~{2FJ6G z+Z@k1Zg)KI_>E($<8sFfjvqN*bX@89(D8xeBgZbsCytLD2}j)V2gj$5KRP~heBt=q zQKY%F(b_@U80}zftagZ2tR1S2(+<Dn~StxeZFT8WmY&Crh3O10y(GA&;#*9x?m+VR>f?F4PMHcYF~hHG=Q6ScY8 zNm`{gLaWk7YSmhyR-=v5YBfbWRa3P(Ek~=@99n~>Y4bFvHeVZ{EzkyP3$;PoB5gnI zhgz<7nzp~TSR1UJt{tGAp&h6-YC|-ywnS^znl!)W(^|C_Eugh&%e19hyB5^KT1Y!n z>(HWFMC;UIT9>w5>(RQkv$eCdbG37{720{)`PxeD$J$!$r`k`ntF^1NpJ~@<*J|su zUuZwqeyLrjU9bI0yFpv8{aU+GyIH$QyH&eIyG`4m{YJZ8`>l3|c9(XicDJ@syGQ$- zcAs{y_JDT3wn^*N9?~Av9?>4w9@8Gxp3olGHfv96TeN4it=jY2%i1>WRqYk+HEp~0 zhW5JlrnW?Al;=Oq93durXQ*wp&zavsSnkE zpdY0lqaUribzRTXJ^FF_v3h}?ub-eFuMgLU=_lzY>Lc|L`Y63nAFUVZWA!omIK5b( zppVxl=@a#n^~w4v`V@VdK2C5#Vy<0z9KTAJXKSy7opQoR%uhcKpFVHX2SLv7N7weblm+EWu z)%q3s<@%NSkMtkwYxSS%Khdw&uhMVO*XzI5Z`5zrZ_;noZ_#hlH|W37Z`XgT-=W{7 z->KiNZ`AM6f2ZH4->W~M->+}dd-aF(2lYqvhxNzwNA<_`KK)7k3H>R3v;K_!wEnEV zMSos@PJcn)s=uVasK2al(_htJ(O=WI>u>0<>u>5i^tbi5^mp}l^!N1N>+kD3^$+zA z^pEsi`X~CwdP0xuf6zbG|EPbaf1!V_|4HAi|3&|^{#X4={qOqU^sn?iy5b(>R^9u# zbKJRZhkJjw<{s>Jx({#EUlJ;6QAJ>5OqUE;2A&v4Iim%8V=%iNXja(9*cRQDoxz56uxJooAD1@1=o5_g;1 z>khb^+)Lff?qzPDJLvYi+ubehkh|3#c6YcRbf4*d$Q^NSaYx{-OJr? zxx3tNySv?c+&%8E+-JEzb)W72gZmu!KiucK|LNZ7?sebo-sIlq-r;`P{ib`TJMMnp zop68T{>wdQr_wdM8X1@g|yTbg%v z-m<)N@`8Ei=C$XYmlw)gkr&R}mVbZ#%lQxFzmngZ|7!lG{O$P<=D(KzQ2y)r59hy; z|49Ch{73WO%zrHZt^B_HxAPy*e<%Nm{CD%8%>RA<=KS~apUU5v|8)NQ`OoBkkiRAW z!~AFScjZ5q|55()`5)(R&Hp6-h5UH_i}{KCm-0)JdC3{cW0R%HTO4cTelBXs|C+m`9lJ&{4 z$%bTca$a&=a(;4razS!Ja$#~}a#30OtY$RsjLl00Eu~1XvFQI1dPL0TAFKAi&dr08a-3Yy<-I0s%Gy0s4Ue zTY&%rK!D4D0Na58!$5#%0s%&W06T#IyVPzqsq_E|o(&{;E|B2)YJJWH>V-go7pWHm zHC+NUco~q>Y9OaIK!ra7a=Q`;YAq1dkAV<>3KVq}P}DU*P(K5bS_i~<9gx&7fuybn zl3EY+cq7o`O+b&g0zKXaWOWA+ zk_Q1v9s(qJ7?9){H246}U@y?%CZNFwfd(G}8hjXN@DZTFM}Y<(0~+iD8hl)!!JB{vZw4B?1!(YA zpur75gSP<<-VQYQ8=%1tfB<&^0e%bw7zYCU6bSG$Ai&Ro02LrG6$mT`2+RQlrU8LD zfxrd;fei!#8w3Ql9}rkB5ZL}eV1t3c4gdl>5D07t5SU9V0(u+`^f(6SaV*edG0@{U zpvUn*j}w3%CjvcA0(zVb^msDR;}oFBQ-B_)0zFOxdYlgQSOWAo1L(07=&=mwu^i}e zCeY(7pvT!jj}<_VbATS_0zFm&JyrodRs%iO0R4G^{+faQ{6K%LKz{+Czhyvw?LdEF zpuaPL{-QvCoj`wGKz}_ze`f>zoeT800_g92puZmj{rwc^?`ojGp8@?{3-tF3pub-N z{ap|AcLUJhuYvw<2Ku`d=Rpubf>e-{D$UF=+sU0gS~UUuE+dd2l? z*Q>6ZT-#kYyIynM;(Fb6tLqKd2GkijDuHU-eb=~Ruz3VR5 zd)NoI({;D&eb?_?AGq#uedxN^waay%>m%3wu8&<0xIS_9y5g=)_!h~7u1{SLx&GjK z*!7v~5!WAGkGej0J?8qt)rTEqkGuZldcyT**ORWlxHh}KbUo$zEB0)uK&1|#QYTR9 zK%mn7fJ*lVDm?(GbO=!CK|rO40F@pFRC)wZ>5)LCKL9E{2B_2xRGJ4=dK^$`0Z{1) zK&8WhN>2hR9SKxA3aE56Q0Z8p(s4kg6M#x50hOK%RC)?f=`^6y5}?vjpwe=n(pf;I z6+oqPfl8}@N^5{hPX#Ki2P&NhRJs7DbP-VLX+Wi?1C=%cm3o0nn}JIGK&7ofr2(MQ zWk99vK&4@z(ldcdqd=vdK&4$kr9D8UX9Ja<3skxSsPufG(hGq~F9IsP1gP{fpwcx! zrB?uzUI|qCW1!NX0+n73RC)tY>92uGZw4y86{z$!pwiy}mHrl}^e&*%yMapY0V=%@ zsPqA#(oI064*``v0#y1KQ0e19rB4EtJ_S_z3{dH_K&8(EmA(K}`Vvs-%Rr^C0+qf7 zRQd)`>6<{MZv&OS3sm|ZQ0eS{Dm@mc^f;i>e4x?-pwi=kN>2bPEdnYX4OBV?sB|n)X)#dgIH1z;K&2CaN~Z&r zmH?H`04gm7DlG#lEe9$+6{xfxsB|7s=>nkAB|xQKpwcFw(q^DiA5f_usI&#Bv=!)b zBhcmDK&Kr*r)L74Mu1MEK&LUF(@vnyZ9ttb1EnqpO6>yr+zIsgK2YjeK&fW~g?auE@JTe;ZKg%Rr^C0F}N9RJt9g^fjQ;*MUmk04m)9RQe`R>03ahZv&OS z162AhQ0ec1O5X!2-3e6sK2YfgK&2l7mF@y6{RpV^W1!McfJ);)rHTB!WC>8|44~3d zpwcp+(sH2EnLwqpfJ$crl~w?i&H*Z&3shPOR9Xd8S`AcM15{cIRC+2Dd;awy#{bj*wplvv%*ciR8O?WR#L_>% zzugB#>~J|$#p5V)OgEk&B^_MDPOW1P&f&8+X_CpWlUyc;)BH_Kenm$2^i*sfd8yM;8&4?c{Cs*X~nzTgXexQ6DD0Q2rBpoC$e_y!2$xFJ0 zUhWi|3`H7^-{;cf!=zhHz69Z)U;kAy`LCy*y#C0Q8(+c$v|X3b-TveyM=EFZLEPte zLHmFG@x#Y{pem1B^e=pP<&k|GpM?9fXHI#2=rfN!`OGmZm6Z&C52v{O>x(DfJ7$R@ z!c*?)DR=V8mq0Jv$rZ?#e~wzQvJu?avo7@;i2M?HaZSPQZ|?jod9vG+9LppyB@9WD z5GCXoBJSKq@=~#gf z{KJD+-VRj0kx|ese{NHM(_`QE^((})5{oG9X|GI?6^4Y%6vP?su$wH1cz$nXjh3>g!QcYajWih>@IW4~#(6 z2ZL;3+cAD=c`|S(ech>06baK{ino`K!B1=2KEqR?S<>&eSjCM^sC8>kgYdKqOlMbC zD0|i?|Fxp=ZHt>X%#J;FA4o8rsNVd^*zHll2c1Lu589^so<32vMH#L5`s=Tc79##T zKK%!y;QuS*lYGXCR%G=UM&~4I)Bh>sQ>qP6EsjqL>M(BIsRqxGB$iOjpM88{W3i7< zL-3A>eSE@*n>IdCilmq06I-Qyd}18-@kxZ+#;259j!(k9*YSzc6eTr2;Uz@;%#?_x zyN~gS?VR-dF$exf#wRJ>>WPr?|D)rR5uJ$dzvB~2RsQV5iRowA=<)48%infmA2fuw zU7(#A_y6yRDK0c)sa*4)ZzRk$D6FHM&_pU%!%HAiEuP>RNAOESF^Ar2;`^vNPX6kBp_fJ-yiG1K9kOSwxv`yH1&5VnTSKog)1{lRiBZu5Tsi$MIi} z|7UW*>`{`A^N=Q*{=a>NVb7g!R8^G+d(&o5Zf~E=Q|Yi@P#&XW*`Bi->Pkw>&-Hjb zr!m}fc3Jt1d9!Tpit3p)beiEfr=_~08WaY7UU^+zO%}5Dh=ER zX`~0+yE-~!3&N3Q{)l3C$orYbAp|(J3;T2ft(_4bPgD~s#olQgy;td9?ho?5)n5vk zcA7eIu#G>G=|3+dkGx?>-)jz+YgLYG8|>OwaK517Ua3j9alW5%!jXdaHkRXUjS{@2 z5yKlC?RfhmhBrLIc%!2Zej)tH^OvBC_&xN<8*jdM&fD09$=_~)c>OQDP$JHy;9La{&$`@Og&GeMj5{CN|-VZSv5;z8}uq(98`$U=fF&*cj7j zA!i@)W=5%$B7?CFvlRyupp2;=6mALQ>?oTYD1K_EKhiVb8|>__w%F_H;UOH@?VctC zG75Z!=09Zmkgoyct{-+(oKMBm?dtJ%jXW!_5WYPyiU_lxT{Q!x5CtE9`#$H&16g&- z2*rbUaVqi7PUb0C{Lu6;m0y&iMJc^Ep7;hgVDt^1CjPFY=oSF za}0w1!lgJYO2Jz|JQt+hI&-TK@9_j6o4-Q*jlvs0Vf+Q5{V2ROlukWrpZwp4TE_K# zI86P%Kd0odU;q7h|6M6{$Vr}cX2x8JJoch~jX|FK@lF+Mid}a9dy~^VEp6XrVVoE0 zspNqz^3Wx*qjec#ilDyuQNm*pd#c>~$7uKYKC#>R_I>|-q<&le^pENLNM{T3Ay0xR z1!DM|kV@$QKQE0dPEr^8CDMtLU&PYg}=_HQ$S?t#UDXi*K(>i}7w>dP%3JE3+3#rR%%N#}FY8Dl8Lw;IYMXfu}{BwIcIv zv8c`8c1`s)`-*ij`df}*`=(hSXmFAM`Zo5}(#<-)SnP#qLO)c!;(=E3OzV-sAyt$t}=FvrzwC#8Op|% zS;rw6Rm$%ZrQn%eS6)A_vcV&F`C^ddfl3^Uc~BBmQcmO1lcyAPi+%2=V=RZC9EW+d zAkOncEseI}Y!#kC3654KZ3e~_zZZbO=kNCWmX|MVkp2}oVG;)`ru$b!%jE$#hBv7x zN1Q8DC1IPH3H|(WW@RKC>_=Y_ieg(eyk)$0Q2=h1e@)X;9ClObZSqruq?LZPv553; z4W<*BZi_(h)rLDn9J3gj$b&O4NC&@cbUqyU*k%wmwgkgoCfuMeuO94OV6Zz9Tz+A2o86!{QG$tv^}9_F`jHZwEVPS&O8s^!k-XAgUSTjBg@; z>pPpuyfLpx4E)O$mIl%2EmcWdwvd|0q1bE#WecUdL>!(Xb%Gy`?@O^tUUM-;(x>7< z%R|PAV;{v)K(leeRM4LapBLiERkm1V|G6-=2xCcHU<^F6Avbc7hSO-p^lug?pkOQ( zeb(Om8*#ER4{zCPcqH7^8I6T7n%HEc6Eu3?MtOpaEv(;QZG>?E+FKYpg~oPtu#L^~ z06wI~%QKG5v~MYqZtyfzAS$~*oHjf_Uh2KK z^fD}pb|i9H!a|`7fP%nM0rtj*e()<>*oZ;Xj}bSUA4YP<2Rh@7>&E5mhRyWBf3K<< zd_t90fe0;GLPle=Y>YNp(%-;;r=3wWa?bT5U9`y65%qaZKaR>y0FO#PP$EPm$!CmeQ;bbpl> zsHEFRSy}vB=wAg$n~gq;zeOKF)|G~F9OY<;He}fRmiPAqYd^Y{EOdb^bb%~%>?5S^ zsd%IP>BeNyZ;USsT^9YuWYKR-7X8L#(Qix^{l;X`Z)_I*#%9rPY!>~-X3=kK7X8L% z(Qj-P{l;d|uQ-c-#aZ+#&Z1v&7X6B|=vSOYzv3+V6-)i<#q6t;k2hqOhk7t0h_1CX z9F*VsG2G>6c8b*_Gn@}B>haA4!cO?j47Z9ZTnjjZo>J5&)6ZuMXKGp3%&->wy%EN? z5@1JE!by}(clz1-B@tIGG!Vy!$vn&O6LmA)Pv%*MpP;K3M~!O2kk63LF)d_Fj-)KOO+t9c^*0fn)rMpqVwxiPjACP*viwX{q@RdOLR*X1=GO^N z!7Kbo!FVg8W{P<)f`osSInx8pybz8RG|Aw`EY#cF2J8(iNEysGIWq;^mmQOkA^I+} zud?+|9NYny4FSLq0%c?2wH4h5-zVs7?DdZShSrM9ahQA!QkOsqT#b?g|tEL%gu!o7h6#RBS2o-VL z{UDh2DOF|_QK>3r;uPX#W(eKs343)C~{dfs2GUdr}AcGeIGw1{;$?zj&&ZH9{GJ`Hl zdB{qgK_@D6hF_Mv67V=PUV)l2c$u_*bp7+nL_nlXYae5}Guy1uzPdBpq|wH@Gy4Y9 zKRbQ#Ug(Qc@d`|W)m~qKpF#0r36v`A!sZT?V-M|{RIZ43JqyPI{u=0;|wxkc_W&xAPk!h~IL8{@6O%5prFcntU_OG*ST z%909+BjngDRy~C56egR2!`x+j7=Mgsm4Qa;2sf9x@r=@P_s$MeG70^ zi0UZm()?w@MLhlVo{uRCo~8<2AxQZ)SG+Y5t~s>zS&dUz!p|TS@a1j93%m znuxth7)lX?8VZfZWJ2hea?5_oaF59dhdV8NY(_ZTY2n2g;c(0Fw1ke9^&-O$gz4?L zLTKCHFSC!TFxD*63-BML!L-shM%#k3>AXcDs;c#8!|vz7U7qc~I zmRnf>U&s=RAsK5SCiXMxdD`5=?q^4pnf`{m3QvK=QVfBqXxyCJ;Zc9adkuI6Kn<(s|^&4bmTJw6kCmApQAhMP`gSu}ha>zE2?@|7FPM141mG%b<)fBW^r975SSP zx9}JJei`3MkaKNuE4pFnhRzbE*J5#BeBErO@#MgIOee#Q$sN}hqz8I%^pPw__T{!Z zA@YuXa*UG|MbP1UlbLkl?HZdWUwXr$hmrq$G;Rw_^S4W9Kw7=D2WEyDbylv6+oT)* zT*yw7W%zRuJDb0FKq}(E+}|cn>I6T#F7RYo@vAa1e^sCZ6L7E!KYP~5X(yizq?(d! zGbk^+y!2qmsfgNC5N#Y)x6|LlA1 z=nS`PQz^G>OGW`%JW@F!pM#3Uo83QEJ}J5BnzFv8!p5eh!U#)?$Cer^pVD(yka2U7)Y(N85n_!@uEMFZNuhk^nIvX8J;YAn-|h-;dn84`+a8q z8F=32Yp#>oyp&n^Ad|nP6Cb@YK7usaQxlROi89`~!FyQ!X=VoS##9?VG$l!+*=TA) z#@nazJ0f@&Qr_S-NIcw*0(Ic)a?NKVPsg2vY9@i~5G)-S(NO??RJ3J}eWYN2i>I_kOd}@>`iEv41Z#&3NP(`gg+c z5>QHZEYd0F>@D7)n7pSFFTU3)UYcPmDkv-xYeofy6U2MI1%=~e1`k1zuvhcQaGrnf8Oi6tRPNdlSRPWSWZUIbvYq&k^ z>%_-^>BoSAkz+bNxD?~7ll(sk@6#7VCl~l~h=Mb9+$BrrV z$+`$sAd3v2Rt&}9X#`YDu)t?P#vTDlMt!YxQ}0D13))A@v51-$EE-kNK1#anbe@9Q zg#}fG1@+)L%?gk&&qYr6SUwn7J6qdgc^=S#XL3Q+WWlol^@}Y#B0j6j?}M@VvTSp) zM=`Z$jr-mBF*`iNqJF=CCq^^zF6+XTR!=Y@|*1qv&WpI;K>d*wcz`1u{I+*?rXu*|0uq$99iy< z;M4P?$9o$5&21rku{r3$G+%r|QLrl%Evw;VkKCV=zU6^PtP^R-s=6{Wg5F{uB=&kT zAK!80%P6cLrk=Jq71G+n7S^I3VQ36`dpz>>YVHy8B9CaAcVlRF?&@@Mm7-ZGMGaVoiH zMtFUAkr(YMh|IL5YhkSiRk%fN`9W!QqXQ_HkKrtNlO}r5rtky}Z`Cqx);$hz0;Bni zj5g&P^?!s%!S@%u*8Xi%jS@qRYAli)S&Uu&K2UZbN0_!cxT_EY=Cy$t3aYwQmL_jq zNflTDTTnp!BG_`|RWs}gxcJMAOV)vkGBdt1#A5D%pD*H!!p&YV3vUGT?g&;8jONNZ zVdpP{=G2=%4@|$f1wWooVq~9JZwx0K&4bZVhGBNv%DYySG}9BsANR-eSJ2U4w%E^* z>VQOjP1Tz!@UjLmhoZ{0Q zOd@RoaM1-4C0qEM$@PuEnnf_?P4`sr0a+8x8eknKC_`V?hk$M0GBs}6C-OEt_0iJ{N&tYgs}(Kv64BP9?nI2UA{w!ye>}dL%(FRC zxVHr5)PWNKB1T*95;aylp2t^N*oOi83n}UQ^XJ<9?B`0fqwJT9+A6kZh<(pvltyb` zKf}2fnmgDTOA5~_$aVIv5sQ{|ZK(0hqAsBU;pamrb@CxKtya+HwxJ3roPYoU9=H{ z?>o-ZbN4mx&N}Db`+OVyasRov(1{oJOOx3}1cTk8W3n7_BxR;}*aJ=W@K*4d02})V^u|cNoB>X>Zgq}sHO{D+S6x<* zjZ&rM~XFwnN{8>4tzqq6_u6cvyc=!S#?cyX-#!QMfJRr8ORT& zzSiWII;CQ%sFrCdtEjK7sjm=Zv*wl5m5FE|-w2h5Lv0o0a?bnOQUUF?dO_LVgk+ZlfQ-(MULVs;sGXe!$-a zZ-F1v!tfYBic=UEW*=M3HI+2l^5vKn%7YQMjd8fvRu6FX!SH@P?2R>8a~$h%ZN&Zh zQwO++o;wBh;mF`Y{`kcjO_nuT!b4@{X#-rlPlt>%2Dm&hwMz!LI$*CnXn?B-_C|y) z$s6F>=^o&kj`wnt;LQWB7EmK@eURQzHr(goWK+Y37a+tmizWsvD{xRfCBAp|$a7?fxe4n)I#*Bz+P* zc+8bLQ-lxDP|tQfvcJn!uDFhPbbv66LGM`(o#3|?#yn0J`zWzI(}IZ);8r^}DPe30 zV3np7b0wYu2Gn(CCtloU<;5!>9RO0mV}$#Gu$X7!^%Oo9!5a-&`XLP_VUbQu#eBHO z7WIJ7HxQwa6XsDXz_YM9lv~S> zlo>XUt4s5?`3o9Ii-qxY1z92U0em7tF0A;(aRGu3ON)MQJF;5tbmqL?6YXqnGiW#u zHAWp7w=GQala?#3q_ky~CC5ybSVpx`NOu&;6Ilg%EVE+8pX$gwh_N_B*yGD8Aj18j zFxHGy53>lQEg?NP%yPUDQgZ4rN@T6Pp17yuq;4dlz zS4TmwC^5WFC)L5may;~50F-2q5(}dudP7p(C|ev4(eqe(X9-X7uy&&mEShLfds8?V zXcpDpBNp~pMrf@#hmll4G+B%z;@m4M2f65|I6-#+%mXk7!5j*62n;u49}jaoj0@&R zhFu4n^nY^#`y*>2bu8vY+cAMy`^p{&DT_J?6y2g9(#VcNZhejkE9 z0QZ3~q=!@Jq{AlNYntRg(r|lVQ$DtdSwU^C6zU{j|!?18YqhRt$2bZ)MTX&M2Wc`y-n8|+Hh z9@qYVTQ`}_U=|L3``=YL(#=F@9^)>?bbYwxwzUVGnE7QUbj7!FdI zszGY^8Lq~Pmf&fS>bn4>G8Wv76;#HiAl0`Lq&l|;seL(tRMy@gmGLl;$~Y3FGEN4m zj8j2lFb$+UZAXH$ zKs7iUOa-aGq=QzV2Bbb$1U3N$Ph-Utz#NnJ`P2)}&%qrEGHjER!(6*O+s-tFZv9NpKoj}S2=B0D|?5`yB!jK(EDCIZ)B9w)|I z%D^CgGp=kGNjJCgl!b~La3%LR?C*-Fo8{l^*bqtxjvIp~ifqKfMn&jP*r$cD9}R4@ z>BXHaHW4E=ghKA}b1;lZe%?Lh8`#hBiCoN~Q8C!bz~xl`qp7AtQ|L>zG0#$GSm4v4%XDtQKUia zVW)tkk{d(=$$+HaGg0I=)cxr{*GyNTGS^j<)W&?QuC7990Ya4ZK!^wVZ&~4=<_k)Q zrjf2903tw2Fc#0ATrn1pxuT;e>Ww)AWb_m!Gr<9n)<}OFNWw7_MMkfR@w~zt^8|=J zBop(3)IMw;VRN*?EWk|XD1G1$Qu&E>zE^~(@~UQ4nm?>i86uEJWK#{ zSD;*$qg<9Dy);jQq(W#;76b9hG*MhsS5-*Usw!-zS5^ED={FN|Bb+~ZPE|$WY|NMV z`T4M4J*%o>2<(1?tc2glizbS+SV3WX#zf&;q=RcW&1oyvRV%)RiThn-ylW)JXDAvn z)8jTG)+6QbU6C2 zMZ6Ub6b{+{Ee>w^k1%B0Zdkz#_hGBy@;WJdHGytJ@-s{C2<&ache5+bqqT|YFMs$H zK2W&s>?=e(fH84>5~G6TJo573152#ijviduKk|e}t=J2LFnl9|N6Y(PX+;-$H(d5A zJ+*Kf&vvh%a#+6pgS&h#d)iM0jVJARgCW#4p1hL=ikQ-Z-|?feWf;mNiwAg@0(zj^{@8-Y!~F6Uhu#MwE^-c15xy- z7vv(4)eLlRcYHhGrz`Hcl8M5;7y3S5Pblh+Z=OT&I6_-7!-_!+_3P7QKKWHqQ}I<#>FQjjvbdYo`yC!8rQB_y_%_s ziLtQ}9fs`q+csJF`k#mA+M=;#y}EU3o14|DRkLPIg+fsSM|E~olMjSP^9V&C8!uUa zG+t7IdY}zR<2gr=##buP0Q3TB9O(nnIMolN@ml~$SgES7!1?z+PAdO>-KpGbogESs3 z0creI2GY1m2x8-CLy*SX3XsNO7GP6Q30i?RU^CDjq;at$NaIlzNaJWPkjBG4U@OoM zv;_k|s`GG=?rAY#M=%NO1gb$tFa_)krh+cuDv&;Sp9ZSHbkG&d0Nue%&;!(f-N06Zi}01zLi>U;{7!YzRhzjld*O z3C;i;gQ;K>a2?nbOb4yNgJ3gI16qSQU~@1ZYymz7TY@EEEASg=3mS%^J%CEE4QLCt z106vJ&;#rM`hXq5VPGdP9CQQ|z|No=>;ldQyMn7g7jP>mf*GI+JO;Xg*`Pa^2YP_7 zKu@p?>;~$MMEe01U=Pp|>|odfepYI&=yPvyMoI=7cdQU2X}*`!PB4)E>wA-9#{k#fUiI!unaT?^}>-3PyyBl zEy1p!12`H~fjYRL`G9)hFwg)D2aP~%D^M7NYS0v%57q})fnC9^pbjp02SGhh0~&xi zpb?l48iS8PQ?LZA4}Jr?g60u89~VX|&^MDE}#a<@V{$Q?8s1$WRK>0l1&PAD(Z!N;VlP+p{i z--sSa=V;Ii=_Gn1okSn>Pf#xz{S&MYdVzE;bQ9P$97z;>U`J~=3fxlwVHos$FdV!C zCV=}vHJAp@2N!{>z$@TZ@CKLxUIUMTJHTx4Fqj9P28+M~@D)h+fHE)#)QdD$NT34D z1_N+yr+bnm^tGS^I2u&Kp6+qp(1Sq>q?hjXe$Y__LI_A}ATi(}Pzm=cUR9-D%x(CHo>4xPpx>!3%1UeIZb zk`6tb+>sw+@E~+=Fa_>3$JRiP2V>xF0_H$p2Ihm?z{lWTumtQ4egppm4acAl5K(V5 zRxyX30@B!{6R3nvV}>MzYYN&zr?E#W+-VHt2t5JJhdVAkf(P_{pbto64>jzofy1Ep z1^sZI4Hyo66sUmS2uy$;2&TY)bx;i*T~;1L)&S>2Uk&)p z$AM|k+k(fSCxJ9(>H=m%pGNLDzb2RmeE>*fB@rxwJ_k&P|8`&r^zonydNc4F^f1s7 zx)o>`W2_hnnu80$7}&Q0mC&O=TW~rkAbe-Q5&A5!1pc~$9?)litDxJ1KG4^L!@zN1 zIG6|~fCIsFq`MZVhQ0!v5Bh?uz?EPI+|9tP&=-K&2)85IL!S(0!rdG^27M5yfnFQT zhCUd~16P4X;C!$I+z1M>#)@UkLGKJEL!SzkAzVu^1^NhZ85j);@YeuHgYFM%pmzXwLr(@Rpew;l=s}<%^oHPR z=mBI8-2u#nz5y%-CxSk(Zw?CaY;D^V90Sz?)CFz8hoB>v3VMK>Kp*e`I1JnghJ)R} z1TY2+#0nN2w9}4`VA#+x0Xz5Xu&cxidl2aemY=$y{GJmuug$}kulAaxnmh~W>&iJ4CV(~@ta3Xp9BYAph?=v0Y z_{}al0#R~wgz|hw@o)p>CrR`yjOBAAPe1L^q=WWV(lMI*AI-y~-IjDD@^BM){4qS7 zFdk0=*R^}0Y4fRN0)Hdv}K;0c? zY9Drjr`#%78}Y@ydDcFtz5FVNL4G`hUa~npW2okOyq}t360DYFSRjB1NotLM&(0!q_$>^^y^%fT zm)e{iQsyO_>0Dp=Txxq1FP%&6kJ9e}Gqph~6ISMwcQ;`O?5QnMm{dNYaymWb@TpDO zAy&H1Q@bQHl>@a+3X{@F?b8lE`oK(Wl+xK7W@@Ko{uO_{p(XHkLG4ysztnc^;G5D( z?so7^X-ksx#mp0A|IAEnTlkHnHTCS+PVvp)6e3izN1Y8^&hR7`cQ?LwLMBF z^(C!+lw23u^iw@DGwqnynyHUb`sv(YInCWslk|L?>XG#w*6*}uP=2WYQ7u!hwf&Gn zq1vTq;4GJJaw$?frZQsX9wnD)AGwTJzwLpyU@ETRln%OHv+FsvAxa-h6J4(<7P{Bd zwVK)-l_~32bp6-%A7)R#{HU!b)@OWp{jt>hz_oIFV*P>j?aFP=UCwVLLZ`e_+E|}q zb?+vZUFCYM>|a|Jp7O3ob`PU+rFOxtNnUcBWqEd$)5r4cD)(cSXI2j^&+c-&j^{N% zd8iy8OCQUFHf|rel(cbs%eBVh9w4WK#qG`GqcUT0u(-SPeoAG=%9veS+;}>oa4pl8 zvNjG6xqew3z2#P*je}hmSiMj`VR5+2{h#HJr6WkLYl`Eab;ROhHK2{Jx11JMZaw7O zvT(6?7;&(0d&@Pz%I)8WOTB_!ZMEV0%5}@aW$l-R>mlcX+K`qU#f#LoTegwdb&2$NUN7XQ55L!t*+))4Yj@OE=?+8X6ep8i^Cuu( z+O!2CPg-*juJ>AVh&+N}>BRTqf7(aLBQ<6}3U>;v|IzZuhuKHsuC29?#Fay9rZ%B9 z)34NO&9Rm2>B_9Nr>m^i%0{;y zIc{biCD#EnM^_3bMoufUXCqi?g=|&)Ox`khY%$$?b#L2ctZ-_Q8L% zukcU5+^F?K?|fF6S-ey?VRD(WFvI0KW9BG~bF}{H*N(MjHu7eEVtC#uoR~`KjFH;} z^TTE!%$!)so_+zC!lW@uC^yqsgnVkpaP&*LWTr6_n^Cc`6q`M;YcQL!Ff*$!t(p2B zGt*zKIa01`W*;S&2^*KNc-eS}wOuy;j*!cljoY;Lbl;*jtsN7y*%!_2>`>Fxme^R6 z-sIAbaoJ3Z=6!a^59N`KF<3ihX8Nlg$B#mZ(%6goK$u)UY%DlhZdYtf#?r&a`lIDM zYR6T~MLT93Enjcg7@5uB*w~rP>e%>+wO2OgWwSOm)?*>Dy8@d%(VU9%K>eGISE$Ep z%~5h4v#~Ax)y_HCOqR_>Se-F5o9VJ~mDUfH5$g|ZtjgkI^A$D|W@E1)InT^Ye=Ej` ztfy4yto2vutmSIwI&3!0<~sD3uJ2UtEM7MLVeOBZSvr}S{*r$hr?c5No3GG2z3hHU zA!+CFbblqCoyFW~tW(*Y^vdpZKW4Er|5Q2^I?cTTbQ>;>z9wslmPc^sZ(WTD^#t5OEZ_GnNob%FExFF7ux6e^BpaC4UUg0;sMCP=;E(Ze`!5g!JmW#tg%B* zLxe{3ll7?tqXx7SFXHk0B+HZxF+ASaXJ0LF^%p z5EaB5;s;5eZlVYQBOwWpBuFwu4VeK+fy{@bLe@d@T=47-+zPSnkMqIZkPOH{NG9YM zL<2bu$%f=Wav^z;d`JPL2=W+G40#19fs{hZAm1QD5}uJk3?Zfv1;i3!1F?rVL3|+r zkOasw$U#URq!eO49(jfMLXse>AR0&kNP}$TElq@(N;@%*xOLw1s#c-z6JCuSW!I;4K;6QnD?T?@N z3xSywfB%H=2y%ep?>{myK0#|9i~WXU;rGzM>L*+$FY}2Jrs0z-ob8*2Myc2dw!R!o+#t`~e9D9$3 zy{LI^HnHD{pf2mE!*ydS&OI?kws5K9m6Mw_-vf z=)*3-@=pWejh`6GUuZZ!O+=afTMqsnM}?n?vQbuesT9V4l?)+(ex31e(Nq*vKw=2J z!i2A;(ii4Xcb;BCK!0D~9u;->v$lC%a{b>2NbQ)~C@c6-G714>qM{?%XSO1!#sew} zgSGZb756W0Lx)###kqK43cF52{=35ar@wz&fRwh1GX9rRswnBd`O}v5KgzVicRA^p`!upMpUiw$!w=D3+L4}JlFhOa9cV#Nv`14*1LS4`(YjH%bS{xbQWP!?gUF7ak=Nov_H=zF`wkG&UAayJ zD$;!*bWVQ=`5VAVYgrWj5D3MMTa4@;1u7vi5K9P+YbmXi5Av^uP@1Q5P6Nq(I)vP3 zKq#KYkQR^)T;BvzdbUC+zTY6^?+}F2cNs$Nw;<$hfkL73LA>+2(inKNgi0`2Y9KI#-yi%oM!pTTOJfk=FOQYaQ1b&48i z35X^Zp69K)c$a&Uc64|mb=b&BbB8P_~Gy_Y3s04f3*m1K)Mj}$9D())7NH? zT=Kbg*GLc9PEg!V4P9pI7IaI;v&ove*3J9UegjpN|Rw}qn{xx85KuPX=kIQqw_OQTGWjcnJbb8Foyp1(FL zyB0gB=gCudP>6~}t)j4*x|Gqc(LL%%*Q3%_ zwX;_3(esIG`1!`wWi5_g8ai@C>#m#cPWlqMd%*p1Yd0%127H#z?rOHISMNu9!c@Cc zUrTeF^!Kr;ap?U!v%zNOZUvKucfPs0-jFg&$0fo|^WSG39=B~m;EzMKMg^i5Jg(Vb zLD;E5%0|n&%(}x+*hR~DNU!Gi8A&ZqbIqa8g5tSWmxl#<&d;5HYKH(#BHtXrN!PnHrpd& zl1}tz#ri?@$0u%GBnS@<9Ck`fnYOf!cxiN(gLCfB-eB0xvv;`Z_PgH~FSRN(dlhcq z+~eTtH?C9vJawUp-(UU0Z*OikcG7~_K4?K9U!P9@^<9lUgO}C(LoJN_qlNOywKKOS zMTy%idmp-VKW6N*k0+L=DI=O@VraaBWcCiSDp>je0gxdL+5SAWTjPnv$(5M zKW9GPt6$qd71VV?-{D&?w|9NmH!7+|<9F=`JsD(nqS?w@FKuSLTycF|*B%Y`+BNE~ zblkJz>g6wU?_Rp!XO<>>;HKdb2j)1{vWoSbgv+z5W%HhOqX+K|dbM*-lehQ2ZvOM} z+Xr>u9Us|VopP{~i*2T~`2OyCh9RYSeMXgcs6J{?nEBzmsta9PCWWtUH~RLOeIJfR zgjgd#k4yd4U-w-d_&QzLb8Xq+mAj08?A4jL-L_}Ma;aep%hTs}Ub~S$_FTuSrUUOR zO2R5MCR|CFF;)a6@EuP1vJ1`km@ySTDA;+C~b+~b3@cBT$((z*S* zM1u*v7C-N9H|}%vnrAALI;YE)m?}#A-_?vf)y!?)=kx0qo5b%+F4v!F=bjOf*vig! z#^CLWw~cZI)r50Tf-;LorQ|D~th$taX5bvfz(0rN=4E~LYdbAdx1OiBZs+s8>+KfK zGj7co>INTr`qJO{`=f}? z#qB$!>8H;=-1eh;jYf^{y8oKL;=?byHrErw>GB!!V^UTdz4N^?UVnISr_ZKE@pp|L zuY1!stlGxfJ8u5*$H(d`9OD;L4#xOo?zZ5i6XjjnUwXY%(W1;xG6{zjg|AGjUd+uGsxEn~J^5~C;B9Q-uyM6cZJ zYhguY>3hSvp5OEPpzKJK_3M`lC%lF_&&}#t+VOV(-o z_t(@_#;0{c=sIiH`TVt~;GFFqXU9&x&&KD5MZKt+zP4Z4JKfWpAM{V_(o}J4NBm5W zBe!c^(Y2Tzv$jh?|Kk1!p7i-z*PzYz-dPWB?K1BBI%xjHSBEb*R*lRPrq|x|H1Sc+ zyB2L`Or_*Mt~)N|>xb*H&STS_w=thI(z~>M>%TJJFRWI>EMl2=e0mM*0F{}JlW|IH zPGh@mo!*|mGxuQIqi(L=pKnI$&&$r#(SMlydS(C9fv19Y=HHop|3&-E!0?h~$JgYT zjkLirg*H+$}~Hf-lv`S z`91A796R!3_t7i)F|^ELH&NBjld7q=$CcSS-+BcU#L=WW?{dlZPkNLEll@o4(|3a{U_PgTuaeyfJdD&x6B3G^h&92&-?bb4~L=Keuaqt-E6DjaweBKM?q^Ah_i* zJ?mv_Z^Q(yX!hvj;Y1Vj#nc*e~pd*S%KR`;t@C55=2Sd(&NwXOT@`p?vxTRVRo z?L5B6H1{3P#`k>sy~&!Gn?-N0T+qL@b;0pSA>`5T1%0+f8>VmC;JGLv+jrr&!Dkb4 z@=j&CMF-y=oHO)~4$ps>MF#deUH|Tp<$tX2^VcSyXP*mVrvw|c+Sum)`X&^gpqO)f zgwvo-;~qI~x#-+?!?mfl8$NAKIQRL~%4e3N93T7dUN`T(!IxJlH+G-+)#Y-|zL_y% zqxILL?21h-CepI52ywNfF#i)vj zWwR#tfB3vSYMORyBC94@5+ha84B%pQHZ2@%mF@!hc= zzBJdOX*oTA?&I1=hz`VWC%{1Sq1 zd+kq>e7O}$rckH|S4(oILoNRminw0H-7yT3k20-4u2-Z_JFn4_c_@(>?Rh@6;S1_= zHcjKZ}-_Q%NR;2xh%k2N? zpSBefr&an_Mfjin)1I&VzqQ(b=36~=+VmMSXU$HTGk4zn1q&CYE?%;9+42=DSFK*N zcHR078`Cyz-m-Pu_TSQX?A*0`&)$6*`w#qn@Q*(aWgb3q^w{w%Nps@lsnci9p36Re z;bP9E%U5!*Ub~)m$jy&23t= zY-MZLx=qFV_FcL=3FuvV&}bp<+BR5CAsnbz#-SXjx76|tZ8sg=xF6aQ(yq>_1Q zCG){56@LDxWTy37TI`}U(lO)#z40sv3po9p4Hfz>h6?)j56R^H28x>y+Y|$ZGlcwJ zfM2_}28tn&+6qI(Xo&SBc2431zS9E!=zQ{j9sbEY6CBOW_|ac^3K59k?;<~e!DHfO z!a>V+FvQ2k$s19~8+jq;;LwOj@-s4WjQjw3WMGhdZq%5Nkz^l<9|w*B{ezigrN zk5ER!1G$fkfrXU(!J;kPHy*LdXOgf*O#PsZWDSFdL+L$^ohE z?>+NNd*S=QmoI$x zm!Cf|`##uv-y8P*v6q=m1DL%pbh2m1|LX1JKVPo?N4FE~jgY75@?TmtrLC)#ujel)WULp89p4Sg)^v@P|TXLs=%AYpmi~01z z+X`KfrYQWS-*TZNV-@yXK{6r7AR5SNNH!z~k_Rb(Jcg7&zCrX><9ZD-hgd)?Axel9 z#0Fvuv4=Q793f5+6~qhT3mFC>{~?e_NCG4ok^)JEtb?ROc0)2C#~`^79XZ9g-oyMD z@(NN4`3BKjgL?zS9AX7=fOtUsAd!${NGfC%Bn^@d$$(@+G>~jaE+ijP1Sy7;K!mjj z6QYEWe_PNI;sNo6ghP@b^C4-FbVvr|G~^Y8z8R!lqtdQPfi~K8DJ)CbXxFC5p4O)* zn`EzDrwVPwf9#3pzhb>eUQ)uU(p$bhB&fL;HGLF=mzSEhI{M;8s9^k~S|5m>-wit; zX%nc{+!nv3;*Gn&K=c^8KlDY9(cTki-HXCiYu?HfrZK8L7&QjmKIe_>u3F4Fm{DlR zsCn|5g|nAYGmg`h)09z_|4R0!*~%Hqs1_N8>Wr#;FIjr_FsdhU_F+^hx&H12i}wtp zu$nW9QRB*4hf)3NIg9@!qk1)?5X?RBht=R7N3)QRBvSEAFn(sCxE`6*Wvop$E>_AaPDJNEoT%aa{Bmybk4;j_xxxSxK zSk3jR+&zNZ_vh@&X~kKMQT_2D3%7_-xWIXk+izghq;Nf+a|CA(P6tL!Bd(h;3ZEXx z;R}yAuP~~PGHQO~`ZDf5l{1=iD0lZ_)O6r_Q|?}qv%HAK^O{k0mr;G5+h=lpJ9l5s zIfFBvGl)^$k5O>tx;=MSa(e}*pe0=e{&`#rEd4%9{Pgj5w{IJ0H|m78&7Q6h@0t$^ zsV;g#U$Qc&{wDEe$Gls^mh^_+C{5?+b}{B|=Y$cf;a@#0`1d}$MWdS+jxU+o6MB2~ zycZeblV92_TUoac{O<@V+3~yR@oVkYZ)@5^FY6l~`lq;0+_B)@4AO_UKUVLsIOT`# z>uCX2&VovF>+sp5qMvoBTk#>puP%5H7ndat+uXkCj@AfYQ+?X4`5Limm4h|UxOafw zzRRM56QXxQ)UNqM;9s?``Gi)d#QjY|zi--QfbbK%2aP=~#w=QEweb|vACMa2r8y&p zcl4i}cg6;K(%Y>D=ftw74Tij!)fe%d`ZB~jTO8MOf4}R)+!6lnQ3DsA7Zq;?T}`oc za2ASM>DphpAciiM?zivM8t3mdYga8teEo3V{$sU!LBDzPbB{}63%gAx2me9&vzvQ< z`epH*MYXFRT6*C86^}fQT@gF^jw)^Hba~5J+jGiati(_wJn4hU%2j#KNugk)Gu`ssv;PRD9 zq&H&2)n9IlVP`)+b~%drP-N{Intofnc_7euO$zB3{jasZBi>wKdppq&^$~D>VVkTw z;`E${scpw0zqu~WL%r^b0gW~o_51_*QzTWNoO@SPUa4kzaxQj4E257C3@H$QOue|` z_(9a4{o;9b9u$ZV>kZf6vIje-6-||^!|sWCiNz~?UR$7k%d0(nbx+(m_qA>0L-;T0 zu;*p$eeuEag+)enbWlDX*MI+bU;JWT$8PBFD&#L=gTsVEQMvf`)R<^$kMlP~elHZ) zN6c#N8TQ3VC>cL_hgc-Onb-GOtr5+g1smT53F;#8uJPrhuJgO1ysr4vIZ-5T>tFL_ z|GKCT^?qwZod=@dHG{e5x1fBBd)~`YJrGY^n_TbCg+|VTSAuh}`hn;=p~#@_z$VVZ zs)f;R(gSgzzkX!-s7}s8+V8{Pet#gw=IhM7?}qlJP-cfaJrpNwYq2=N6!EKnO=~*g zp}5`rfc=XMZ{(+g<@!Z;qyek?_WhvO?YNNfXm8cpcO>=v19z8}dmI<+x6OUL=C<_V zyR&dBy83ZJSva_JDMFRjq`inh-7 zJT9b8(eILZOY-dGvGG%BhvP!pw@%w#Z%NfGN;Z}@QymvnJD;t-cvEUA{C4BlR<6f| z+yTWOd~Zs>#r2#ooJ0Jo>x;_^Z%E6Jq+ajiDuNeQnRVbSR?H^VLIpBK)JjzV3TLYIHV89la9iReL=2oOE8Qa%o^#uqDbr&C6)dj%;b* zukS*R%<)G0nrv0xI43!8GtBiEh5QIpPW-8NPI_~5P?Wk0>PPkGx`6g)CCd|&>o)tV zJ={l^?+HF5ooceopp#*5w2$&>+m@e}N;kxqEj^C*k=CNwpJz`=!=x3{GOoEHeb+`M zeLg8Q?dWwfrC-blmAHna*k)&hN$`iA78+1T> zQ+@n0@6{2>qxy?o7tN@ABYGSdaaihpYxRLI%~8MVG}onhhopf!KOHN3(+B4--Racl zPw9e7L)~jT+rs_DweDvRN{9Lmt9jb}CEC;GWv$$Pmn0L4;8{d7;8@EM!Q!grA7`;b2HhgS9rxs|RLinw$F*_xzTgi7vT2g&Z zJMlf~H>ur#eedRWa)A55CatGzl`ch{S=!AF?M>ZrTaRg*q+SCG{j2?g_9`gfbogbx z)cf5*yF-nrJxypk$!(>yG()%7UqW~2ifY$_7fa%!z9SD8qdyBJ-i>T$OYu)?_&M}I zd_q#xX`^wH)$>b(js#Qr{=0+C4^-uB9-#Wc`JM9{=U2`zoS!+%I6rZIe8u^a^9AQ~&SK7IoKHEQa6aaI#QBi(0cR0sA?JP0dz=NFcRBBH z-sa5byv2Ew^9E-g=XFN)HO{M?xtv!xFLPev%;CJqd4cmhXEx_K&a<3nI8Sq);ylTD zf)QVgmdB-<8hoC}sp1qkHPyL0r;1bH)Kuf{oGMO%Q)9~AIaQnjr^bZ4bE-H6PK_~l z=TvbDoEjtU&Z*)QI5mdcom0graB2*=JEw|M;M7#*?wl%4fm5T;-8og90;figyK|~I z1x}4Fcjr`b3Y?lM+?`X!DR63ZxI3qcQ{dES*8wLqI zMva}}r>IqX2eCnEyQ2C1jG$`*HfD)pr>>@hkDbSONC?={X`81wYhUv~p&7;U3#p6EL0?6d_fT2Z&j{cK9|g#P}Hl%KrX?#8>7) zE9aD8d?dt-IN~-$oSXOMN2#YZbWOF+*2BaprG>LE_UTOSMVF2I#lk(FLG6aSLN9xH z{9}MlfS!7DL;uJQVn&E%cJSS>B;yyR2za zmHrri3ad8F%Ni-Ver#WVfj`E>f=X|leYiOE*z|T0p?#red_S}~LcDL;HZDz{(wnxh z(0sHwL%n6jI}HVl|3CVQ&kYSWyvW`(eNjjOXyHECCN<#l_1eg*MWq^2*z> zZcUt+HfeH~k+(ge``o)fAYPQN7T&O4Na5!eT31UDZLLezOe>)HGxjH(O%R`iUOm`n zp^E$u$exlYj))P*I4q(0iQ$>XoyUrAY7Q>mAyRsr45q#tE4G@|G`0H>N{?6lr@O|9 zu?FtyIj89Slpj8!Nuqr%6YIN6Fg_Lh4xVT@UOZFfkJFAqZRqAsj``!o#&vBbI$!dF zu3T|&@dWWmh;8>qC)}Xto$T0aqIhlnyBD5D6#lZ4S$fIhxUBXmZJ$y5I=I|BD_NAv zMkxI3sQyXgrh3Kkd-?wv)x=Ca3p(?MLm&%AnrM$>Ndsqvwn?p!CgX zm9=$>xUTMzpy>mt{iQB(XrmTeF6iZd(WxbLr!_Yd)Z&e*ISZ0ZsC`s#xBseI95>|3 zpk}VEpnp5Ku=P|isZp!=PA92+9h;7sH&r|ldj0MCk))R-_b;9*_R^2PpE-wg-;<7> z)5LYo3iHEXFrO4s-#6YoO`Q9oh2hG=?$B>4s+Ug_n|7<7Kf4;WmqGQv51lSfd9X6i z-RvXgYh4s?GpCEAKM#6a`iau>=etL>XNX_k)h)X*gvzh%#ND_VqIs19Lb)Bza(3n|U>Y-fs{j+CYQr8R}_kd-%Qrs#g5VDzh#7uJ zB&_RxrQcX7)M{SjmtSbSQMB;dheRoN{D!q(-wNdf~~{jq^I8VPK}+~7y7Z9t90U|E!k^snZ(qGUTi&gTdd?R%xu!(E9Iv& zXF`uyY0R_h_nsM&|2*AMuVW;=^cr8&-;thtaqwd3)w1_$+R*s1sHsPX7^!dht}AWY zlU`D9#DOuA`83lWS$i8p52)7mOSGhCzS(2HJEhOCiH=*eG$*m1@rcHx=MKI+CrY~a zIm^!O62`;As=ceOMoKgK9DMmMhQ@n7)&cb*r6r%#HBYX__+BW^vI-n6?f5}v) zp*to$O&=v47+PJgnjOZwf@A+}B@xp2xqBz?Y)Ivs?H%YCAq`!0d-sHHG#<Pxljc4Dx! z`o7+$cF(Cjl%1V;JV<)F?A0!pEUKaO$QXS}i!w-1}N|!qJKC>YX z^Ccnomd~;P>90#&&u*(u=f^y{e8^wgF}C^(C$$~95B%6|gmk0y;EH*jDgKPA7B`1U z$LHy9$=NK|&xiJ*L#32^M}Hgbg88JNY}&JQh-7YUs9#`5>GN6m>vTUU>PNoA%pNqK zP<0BeHCVE|(D!@V<~9^wgHf9XN^1}HSRMJD!b^3Hu=kaw4vsb1nMmnL+Z-hIm!8#0 zjweEjWle?eH3ZeQ8=#+A#ujF{}vP1rRst@%@zkF|L^Mv{NZk?!p)2cW4 z*h7kOXwq!nXKMceZEl)%m#%mDV0>yYg&&YTy{(7T=CHomg2v>oy4|d=t91CV>$}cP z$X$IZ>9&)U*z!fkCLy`Upr2f5-bvC;GVK1iP|nZ31%2B}2iEnqxzZK$GeKSRrFnB{ zreptm`O7FjLf3k=>qmRuOo>BFVQB%V8w_JbC^;e9-OGfo`t`~Ft zDWmEMqvjFUA9B5jQC-L=+~;}$*Y9%uHlr$^QFD{)H@JSCQGJb3xXSe_T))hy$zfDo z+89`mQl5aQL~EcE4jX$QN4^& zSjzRqTuP_4}jkilq)kdbPH*oj$+?`Xkj@z&0_MECUOjobw?yI;v zr)nj4U%~A;Rm-{kGDgi(?#`)N!rd2h_f+oAsb0kG7jk<})dHrg=X3XY+?`W3m%Gp5 z_MEB|ZaAT^+^UBe^@L zYBYBr#qBv&5!^nUQ4_}9IaMRMdnk7g;qIL3U~V78?KxF}OjieRcYp5AsT#rEhjV*Q z)i7>9lu`35cjr_M;qHFieK2?DR1f0z1Gzn?%9rWt0o=Vmcjr{~o>SGA>FPe* zy*GE~RC#mvUfjJWql#1AgWG#C3Y^;e|3AkCT3v%3e=b9wuN6v~(0oTo(-E>=S{M8o zIru5fk4V4jGV1QU9YF>(pP_x4w_H}A8_~nNKFwEz3_anV%a%(v5i_i5{v(9zsvo$7 zJ-xTlr@4H7jGpk=<<8TVEv|m`AoqNI;hBr>ck2U|pJ~1-BpC=VTv~TMy?*{mn*Rx2 zM#5{Ce&e4XP25ZKeWAoy{nkZ)UGS#EQ|(BfUsd&&OaB@7Hf`-f^B*D8K=aPU=&MQ1 ztckrz7mQS;F0&MWuDSS?=1W3=vF3wIQ0k|`WesTlDy%XQKDlf*ObB_NDZ5)$Q2n*>L(J3k#cK+0VTNt27Wh^lcQ< zY_$>jUtys!5Fe$)m6U#cjrpu#Q(tW;w!GjK7MLc-clH;Rk+{qK$hw9(a{b0N5RApU zAL6H8f9Xo+w``;_7MIlT?i;aB);B8yOvE|8Hr|+*F4uQl6Q!y6)Fb9VK&%=0_qHlB z6~DckeE#Dtxx5^#)2fLFsvUix|5Wy$*IZRyyz(-y?u_+v`^jq|)DWBdl;}^n@PX2I zzm=wjIP!zT$^F4{{=U{xDa6>px>uto()?N|tedJ3--fv>H$>3-iSW^)L?K$#^t;__ zi5$LpeV>|Q_pbY^7x!;M?wx+gs41p7UY^?C$(!^*OGPcQ+K#wx*HU_sKB7TDE%B|t z{=oB%#HV+y@=WJ-3n4Ow3zT^X$8e&nbO18>`L4*j0mDHr18eW0NMi zX5yw%hmEHVll7RU_U2-8k50cf{V3PhDXUa-am3+Yo(6jKr0^P8mzawsCtYltx0TcD z)?8IvG@IIGL#sY=`~A%(t+uFcJ7LcemF(ZFrBFwlw`%`iKMu(KWoD~@I^wvc10BRU zIuzbFTTLC&DqA_7(Tb6P#|$F_P;Zy%QHGoedKJ+b@nn-9Owk?XIylTUpyXJXXR#Kv-Y zKXA^dFRG2l4!fd}!`mb(ei64lzy9=2w4NNkYs@d=w~3whHNGLI=c$|K7xDWqyPj_R zU`psvykSCOT7>%*9=@AKvQEbn38KZvU72`ZN@cA2vUJzJZ+n#C~ZF z#jQUanyL26*RQbyghpb^J;t%)zR2x+^1y&bVlSoHgM-KA{x@&1rjgj~noo4s1=JqY zS8NqZ@%ivgRli-Q{HyobIV#2TXBYO^v{ZJNT8AselHWRfj=Ct<@3l6ol;WK$%GHJs zhasG@H}5on>t`U_`QEE zqh}4NeW_b_P&XEb&nr!Q;z{eJ>Lwl28;g;1n>M_s(*e5Bvr~R!(RSzdhQ}7m{X5ao zu!)%Qsqy%xO&_8D)tfszHW5o3CFPFaPwRc^>s`W|h(YdVch+m<_M6u=wTYOh^Q6I} z{^Ty0IBS}S?dIMr7&nQo2Wk(Ok|tu69F@)2j`I0aMP*a5wE4P~57OoM=BvD#iVp4T z%#f;)uDd{;Pa_uH_YAC59)@Gd%4q*H>7NR4ehpi-H|}-cxx9 zQcsPQIMX3C&E%xq--~(`TZ!e5CeCo$PV3id=iV00#Ka-ne8yd%`=fe8AFpQO(Wz#3 zE$`CxM_t7yshK!^d{(1w?^=^?*DtM^IIOej>8`bHp$jYf=Qb1Do$UPUw-CAg==loP z;^ZN{k{eYsAph|L?XAVZr;i?gZX@S6eUP8E_`d(iS95yE>22tj0`~@*8b)Sv`&~IC z(^}M>5tiM&7Nt)x8(M5FRx|f_*JOm;{uS41)Ro?>Y1d-w1*_w5zkIE*j?}3jXlB%5 zTCWp&Uzh4gnbP{T56o;xH_BU7M>=DvGhpipdfq9V%JZ)y9W!z{UH_)+Klw(RI?|DJ z)6bVfdXu}u&GOn(*vb87x9ZV)lkno^mD*Cfj0UlH*0m*l!>x_ArP#pw=X`d!lin|X zOl|3~aQRKMuAND*a$Bq|)q3VX&wiKeKJIp-+LA+9vyRWU$?;j=d2259Ub3$1=oA(C zzkWwDmmGJtEq9&aM*5Vyi_E3ArxWYAT{I`XMS;J$wBYDolObQrjzPa#(8gSPzjWai z+eTf;J?UP#nRK=Fjp-v!+L7Mi{uMLn{nWI#f8L<=CSmUVeP)t@^e%6Geh<>^3a6M! z2hF++ckWB;F~a4-zGhO>asH!jFOuVrE^1^ZZA+bH)5=px?xqjk){^XA44Rzm-+=V= z2U0ERWdpZKr~O??cYnC3mei|pLHhh5a(W6L`qz@oYjn8vSFP^kp75wmE$M;#mxZ&f zE`OaT`)W%22d#d4FIq02rB9~Rl==-+ zjQE%!$7l7lZ%wJD*`cbZX1t^FIPkPlP3ctD>%xc}`Fz#0w+gA(PRBRNUE5LkInN}8 zq&i{qUC&i6&q2kD6w>nTH#^p^E4PRJ#bXrGrK&G>r}@hD)%m%okgOA*e%ZgjHJvX# zuc451CwKc6-$nL6D^IE+U8rvKTK~76$ z+4{d(Quu#9Lu*YcYS1R!v=ix$#ZwF<@Ac=#4!7_m{Y!Bp18Mc3RrgGf%I9Z3m#RuS zzq?h{jFr@?ZW{B$I&A`j4l|?Yq{yaviBz^SIwk-Q@Icf45ObGCJnF>~MWK|5e}n>qs?g zo&8d!yIkKZ-j@r~qoxfbq@1P{zOr`b%%Izn;MEa67aP{W1 z*{kIKG2^fD&shnnvvpO)a{PYp#Lrn4@0Tx6yCSzwtM^mNvSt;{3BLJW4*%7A=~LGD z!mHKVtdh%jcWL>@taAnlCbxX$`VIdee$0Aa&$Z#j7IOI%eULt6O?Z+Kd?mdPrDxg4 z^3tq{vp!$7n@!JK1gB48X;$}HP1RyeIekT+ro7MEKFMy}?dP(tE|cD6nU32(zA3*>d6Jd0G4^!si$)ZG z_Sf=9S$oDlcN-Zh_XqoLQYkE2-8&i1dZ{@eM5(~|Gr>G4`SA8$PnYDUv=f_(#a{Dj&UVc4G z=kk}MolkU>{r@P>%^F?T$@poKTpz-Z@{3vTrn|@b_Lr|m>L2CjvW}KLocSO`E)QjS z`H8IUwYukP!sPs^%F7RB`G@CLYo;%!M_pe2Tb60{g#!lsAzxpRgo>k1=I=pyQ%;L- z28XQJermi+@WFX4yZihh8MsDtb8mf9Vm{fv1TuGM|8<9Rof7fTrOY)g0@pePs>ivk zu`LmY8x9>XJvH{&%qh{uwcSg^==0<1S#C)^mN2vS^^74UV(7udtqs1h%#Kf7p8yfGDf=fBaQZ zai2`f%<8Q)(G&sKaP$R1ghWIZ#nfP62ALdYrkO!;snE=lKaAWurD~+c|xvpQbvsSxx>^GMjxU$sv=nn#Qpf5h7a!AZSRH?ZVf*rmosqVxH+vt`-h15kQm2>4Rn+u->bZwU z9MjefI`(j7zoix9?tgs8%A1a9t)BVkYq!MAGtM4&n{kWlm{xS}XRpPU&aL>z;zdJ# zyZ4wjt;34l*BTzIDEiRx)1=3aX@?7vW+zX&-?(pb$o!f&j%h7Vg%4bizN+Hs*9s!< z-githnjcl{P1YH&`26fOsXrgn?t681)0GDwtoU?M?!uuhj%&;2-#EAEy~W1m2X1>X z>8j(}&yO!#cKcKFj6-sZ?6Za(*Idotd*$}>RYvWJ7sq}y?zpz$hbs&v9*E?3Wp%nwA>J_Z$Ay^GAi`;X|$pyy9{mEyYSD(=4gmk(8hc)*a&s}1EG1PcMdwk-c`B(Q`YCN`n zN%r>fC$zAHl*#{`d|$Q|wiqq@A z8}Q|mC$w*VHGMkha8bo~8!vvR?>i^7cX~}3eCFJ`ifaaROn&0)6WSZ=YA}}bH$2{sh|HEc~VNbA8 z_p{pGkDb)UzqR{B?uV<4J$n!OSsGUe)v_J@_k9fZ%?c? zwmLBVwL{HMX`{X#zk0+sODpcmj4r>u`zdYt=9t^J-nq0weP`!@gt${$)IDp9jERdX zdR&t^Z%FPbt$(+Pcei?Fb%pz>Wv8@E^NSY`_-b`U zB&!r4`zg zug6+TPHTNGY1(>A{z~KBO@4BBdgQd$Z&k=YXLO!l5w$g<$^eN7XUG|?_lm;Y1#^~ET>Me;s(X5z(LRgnyzh$SwH434 zcWpw~QD?M2cEvt6|I>vPKQD=2{dvI|?e$apR-buyeZ{K$dq02g-ZNVC%X3b=y=;~7 z%d*}hzT0$0yKeM?@yC8#Zd?@q@+DCppV6NF_Q$B3KXFzJn$daHbH~nTwiVw#dhyP? zjPIU%u+5}SziHR@$O@nN>Dr3#w(lw*Joq>5joV+I`(F0ciVkTzK8(NVH|>Vn$Cu9; zJ-s3|crD~o%zZ2yPW{cuV0 zuV1gO_@ndKEsys9Lu>ij{D_-Nax0=Iez({)@el3W!q?w8caAMx3rwvH~na_1k~{B?b2RS%nIY<1;llioi5hvr%{ zP5a=_broyU?)qx=WoNao5>xN780H#hRiDd#Cg!Zx`rSKg29I2A9KCx&__3*HQN9w- zjaj(F`0@`emK8p5R*Ropl320nR-?7_mjmjnXSFYre%$?Gvm)c~?@Y;TbMUO@T01X& z=>EkObM9$*W8ap4YHMcAj2m3BrsDWL?LzPF_op`FuC=$$PF!1Y_l7?XbjkWtYcY7z zXH9>eXIy#b`;LrDMz4F0|yQ02q_We_TYEds2T9s?p7;`o^IdS#gKee~J z)D}+(_3ZvD&i<)Q8r@~=uE!s&==I32of5A5OIzM)*4&=2tf)Ap-SR;Le zJD)1KXWgB~JCoo0W8AF2v_p&AesIkvON?KXZg}+h4S#7%!`57S?V5EJ$EM!jH}T`Y zv_;QewE4u+H5EN?GX3-N-~ZCeU)iwW@Ru&)Mg+Rs&m9cYI@Q#s1QDbGJTuPP=mH<0sM+?=~L0^?~c( z-g{2_VWwrd=cim_?WZ_z`5Avdq8L~Xbp|SHKi)%tqBkXKfa>QsR|>Tf>IhWK7x;#% zfui>(=-r8kFX`=xU~ff`DcxJ)z^PgO8Wf!fw&Ogn6{ht5g#U{ZbiYL~I`ZZ$dZmi) zcca&gf>Su3e|qnNZhNDU>9vZ+zI8!2%h9Vx^y(G8Fhb$e>2DbWPV4;q*H4GeFuOsM zxZ^Ll1iq<3{j~GNk4|$Fr*vkV&P~&cNf!7rLnnEqI7c;t7QbJQ?)9U0S$!!*cQu@k z4|*GfUgojmRz7-_(-)UWipF{U^Os8K{y*uLxTcWL@3)x6oaYnrEz`Mvz9}4E9;5t8 zr_SkB6!~Tf-4sZ#@AylhK3>Rg9%#_{e-9)$3orCKj|m~s>s9o26}{|2p;DStEb8(boUVV2=^Z!9=?>7O_nnIWMLIkU zx#TGBbxVyeO{Ki$yESxu9^FwAB5U_zZ`i6E815Q@DUTcv0wnL%O$x?)sSsMK=TCJ|AT>)Ly9LP;`jDAJiBq z8Wei7orzP%dz#Rxj^U*E?lcDIID5|rps0H|KA5=g2o2jg3pqKdQu2Z^+qpq92 zLEZ3sI9#k|p!$Js6QOq}sa>DSY78>rAya$fb3-?NP)LMy9|}i)uL%_*e?7hIM=k4A z)M^~zq>dYETMAM8Q9P(k=QpnecSp3Sz2Y~{)^$Vo%yN!pjm+P9Govo0c7fiv3XCV! zuRbZ#%W(d3CZ6lMAsN;+=d`I`!K#!x{$y$f(j#+9?OetkPmw@3^s*yS4K$}W%nPA- zUa4!(Un#6>PCXQoN`a!nH@)sCDb#gKa-|*sy~s%NRnZ2j@Jl@%YOfqY_@ejc=oiQ@ zmt1gj6WkLgtUpOD@; zmAxmPF8=nEYl&0p56}zSge0jzI>Gtyr{&KFr8h6xbxSezMR*UEbE)@9?;^SoBYH7c zmfX5#R1O?SA&Mv64n%KG2Ku8n7U^9$GUx9!@{&h=Dth&kdZyG4q&!*Io{#5TNDul2+EeQBx`|3Te@imZ4fR_oHHp(; zG{~MfheG`CtIp*WU5hp6G(&P!1E=)|0>X)UeBeLir$u_mX6Dm z$_ce_JdaZQL$9k+jLa+yU(F!vEkg3^-%e2bNjZwjB`^Oxukw6OFEvx%pth5^p!Pv1b&Qz)>xAOYDp>{)WM;!8)5e?baP(9$^*68i@e(JV4*C8JMZ4S*q zkjyC!NhTDVsjT!Bf^&NJRBtawF8tkM&)2ODBXO5gCfqI5eQ(lzSBvjhxH*FF6x;wc z0^etZIo-Y2_F!wnO}IBK5#OD}cM`t4;hSDRPsev3otsphd9lv@8eyIR_uKF-!>Ylz zNAR5r4oF7I4?J$8@oB*KP2iH^*$3aFMLvkvndj)ti}9U- zd_d_+vXJpw19SOZfo~ail9Bwr6nH26hGR2h#nuHNbAbBfu+wwLqHJI0L*2s6fstAQX5t&;Yy!Nb7O)R62iO-_0PF{J0tW$$frEi1K)Snc zA@BxZDR4M&C6I>nWxyEVMj++)av+uUEkH`EDj=oh4j|>-Y9Qsq{XnWeYk-s&j{vD$ z)B-7godHr_QSw?Fs7!_eCjbpVD$`wnG=@`wcK|EawJ|h71_*<`DR2O=888MI0;IWs z=D;jq3!oX;66gem0_Ol*0T%+>0G9#V0?UByfSZ8rfm?tbfZKqS;i`cb0cqZ$Bk&0D zV&F+&C!k_RegL)wUIOd_>;mi#ybKrt>R|0LotANEo6*wPw zHLw(T4R8(cTHr=tci?7V4`3DWI^a%VPvCxFFW_NdZ(uF(df-`LA7H2j`2nZ``vLm^ zqkuzz1Ay_sfxuMYAmC)+U|<1o2+#w(0ayZz1}*{)1+D}R2W|k;o8RTY7+?i37Ptc# z2iymY2Ob5E1fBsV07LSTe}D#H60jTaMqn6lG;jbg85jdh0VV^-0<(arKr=86=md@j z&H+vUE(G2LTnV%QHv*>tw*YOx9l*K3eZVHDKx%*?z@tDsJgJ-kwgQGsMSTJ^05PAX zbOTa_69&8(H~`oQ7z4Znm<;R+%mQ8kbOQST=KzNSmjQos)0W<)+0=of+0tW!60b_u4Gk7X61UMN;H;WelTLC>lx@Ecq z*cP}5*cG@EI25=6h>1XDGcW{L1#Ai232X)24{QxQ3~URm1$G6V1r7yvvcf+q#_qsY zzzAS#pb^*>mz|dP@59|aS3RHnj!oUx(70^ibz(g|d1AfRHm_z138<|I-T#`9(KA8hc z$$S9HC7A;^k~wfQnGb=yNDtgedL!gTdf;Kw$3R}B2c9L22cOe`iQtnk8GI6^qI?2F z=Ae86y8;t|R2Nd8tQd7DSX5GBb}P_;HU*$ehJHV=0Qd#a1AGBk0xSbA0zLp-3H%ti z0r&~99JmKq0elL$1Na(nA8;G626zB?6i98r8Q@M}h^@7u5@-PK0Oo)%YLmJ_zZy6I zI1Q-6oZ7f#=<|SGz%RA+Srx98*mpe47dq60Qf#I2Dk*64167!1>6oa12+Smz)yj5fYrc-z|p{Ez$#!F za4#?i;k5#8f_^t}3-Bx8HsEK#YTyUJ1HhMoM}S*_CxQEbiXH3OfVRMAfn9(Hf!%>i zff2wOpb_{6FcJ6>Favl9m;?M0Xajx?ECzlKoDX~#7=d)W7FY^Bwb2F8Q{Q6^^fq83 z^wdY$2z>$BBR;Kxo1sqzE`)tJunKxN&8J;432N7bXmL;pN56-a%L z5}3CGPKJIgFbn>|fCbRs0yIE>70?5{3AhmM+XG9WN0DWH$PU0o&_4uR2^>cVcT_+( zK%WLI0iC|Ua_C*aGUy|L70?$0sm~M*+yVVOvWNeRfYe9QfHg3`2e=QI4%`U$QNUX0 zX98oO?*Tju{Z!x(=(__$ovjV|z)ryXflioT4^*Kq1oi>m2~-fyFu)M#7XWMFZYVGw z`uV_>&_@7Mp9QGFjH$cA_xC3+t zkva6Y1Gm7w6R-mM@xUtRI|Fw>KLNN8xDr?cTm-BIt_Lc&;tp-V4!FMrXn;NoSPlK9 zz;4h_1fD^7Mqn89cL4_gp9IDLrvsCLYk)QIcNs7X`boer_`3#ZhTaTx0^b6b0N(+Y z0?UDAz%9UX;D^8};CsL$pw|^x4gF*w)$QK`4?zDm@Feg}U|Uyf!xO;nz*WFn_`4iv zg#KY*B5(?@9Q^bLWap}!fp z3}^=`aCZfu4Ek(f74!pvo1mWq>;k;l0IQ*22Rs6t4NQf3 zPoUy%ZLk8`0v*6Ez-GWO;5Wb_z*1m5@DX4t@I~Nc;M2eYU;@wsbOPm1zOf&YzxO_;ufZZxMk6}s=7%9H%@wagA|9s1lkssZq;`jUz&Lj${F{eck@ zVTu)6wpz=vczx={@q4wbmpWb*`3v1=#ebZx@2@oH=!=iPxzt6(@h^$B=Y+pIny`;r zFaGw?ig!ERGcab@++OBZOGB$N=MTK48)(DatG+UZqYZeRb*B{2hEm~r6v ztmBoTvEh}rSvT?c$>99(aO;iD=4h9n9@lqBb2^Xt^($*9+^02<_~Wlu({P@wWck<6 zIhScy9D1;A@!1<-Km7jiFCNyqI_PHofj2721a% zhR^G@`zNDPX4|@X#9P{rV-}z2@Ldmtf6EKa7guUe&Up3F$M5ewOi_*7R~J@kBY!{i z&&6};JoDF^hPT_QJy(0@ha>O3a+p%>>8x$ps_i?s^w?!>nm|9c`CsGS)~aTN#kAV= zmrcCl%A-^+i|pfA1T(Z%m- z)vK1D?X!%|Ux(SU)c3Sq88NvV)nN#)+qs7}zo%{Q|6oC%CWv3zNBNIxJGAxJ-o0S! zyDIKG9^bb8&K=spvX39x{4L~F{lhN@C%&(JS95MwQ?)zz*)!^@AK%y1?#FHI`y+qE zG`nwu{R8ceN!P!&>8JkipSJx~ea=@io_;gS=wGU;nnn zPHoPcnY%iFNblqoBp_Hm)2(aa}Rzwpeyb#{_~lM>vw5x z+h-Nm&IW%ux2Fxe482Ef27@gY;NhVKf%6q+4QWdKGu}dOaJlH z^DPnnmsgdn`dBMie*E-p?rRXARwF01uGa48k$&x@X^{7kKL(d1R%`EeeC@TRw;(@m zyn1}(-PPK2Cn|6I!UX=d+;YXO?^bKrC%pK^9}(Y;dv<+(u39Tud+b#EfynR0Z@<+q zX18|V>(`7>jo_!$dfAFuyR}u5`(8csIP!nirifWD@78Xge=c|U$B@UC=+0l(?$!>r zZ+mTcR!`jLJYsD7>-K2BU9}<1aC>LayXcAB+&x;y%i4x_E$=u?*&kPR>&iXa%)#q6 zS#P)=`M1sVt)J}CDnmQG_4PlZkssc8@};(WwW$5CT()Wn%5$*#OIQD~s$ra{4+Yj9 z`GVCS5^GAhUSic%TraWgt162s1Y#_T2LJkRwK zS7vj)#Oe-QFR|pEPnmy-8)tF7#Og?{m*_nD33D&e@Fdqu46|^(#F%TjUSjp(eayea zoF}+mV!<@7mw2WR*Gnw^buaTTvE+5Gm#Eyy^%BpdaJ|IhOND=d&Tsed_z0|dk?SSy zzn$wPCZ=$`#4T5Fy~Hx)Ps%3}7rw*w5}nJrUSgJ&>m_c{xL#rz?yqO`1S&sPGrh$9 zZ*#rGA*;AvqQTAe5}iq0FR|)6u9vt{;d+TRn^7O&C$YrA^%B+ITraWe@JGzO#GLh9 zFHyOP>m`<6&h-)_KHbIqORQSK^%7Gja=pZwu3RrM=i8mkzr@-NTrbgC$n_GHeq1lH zYKIP(1|}HP2?X*gZU~G>hAbm%Oa@ zsa^`gr^{=j#9Q<8EiU+>osW8Vt|Ge~UR5v!PED#=I#i3`QZ?n}fnQG_bw+_TuRyZo zw73eb9*S*}9Z%iaO|}G+)mG%PM5~#20ME%Jp(4i2PR-|*lviT&@+@w**L56=hiZ0M z-1eRxwZJsp!s6$$+*)LHS&##_iqqX?Dj9yJ~T{*qeQ0^NMUm?xfVXh={0m z7=Q=r6D>9y^|vKX#vA3~P_!G}iIrj+lhE5&^ePsuz)T0j)j;T@pdZ4%C?x-1EL*w8xTHlJ!;$7~47E^>=`L$FZH~3N zoi@`gV)>KEPgU>5!e+H!MLNp^e;-p^S=`tk|oJo^5ZY-{~ixaUU4Q{Ub4mR z&Tx#JX-RdstsWFXMUk?M!~S5G3Fep-VrFT0bdK_OY@WwD-IC!l8)E9K`5nI?bS#Xfc^7m{Ar-p~ZtY`efKic4v_%%`_v? zYQ{cm6E{yU%0>cmSy3yx{OnM!nO%B;V+JZs zYrZuPH6n?fng;W@{F?BEiP*wgoVE#Bj{K>+-ZW%G}R}=k;NXD zNv2SeJ)i0Y5l2vg1maRtM;7Pdl|fzDBkd+s&1n{s&4WGUBd3Ftu|*yTMELcy!ApkI zbaLQ+6H#@gI%Zg0lqkqHJj^&$`;@yJu5=5YiMLn^ou0Az`ECpLv{0JEG{KRFlIrEr zUys_};u(S5Ha4FUPDTsPxqoIqrU+c;u`H`|AmZ#vKxXpe33Y|njPkR?o@uxG_!)0? zd5TQPn=JMsoRM~Opm`Cmqm_a}Gv*JA@(QwTmVC&If3uogaU-KST-h|WCckM~P<}`0 zzWdWRvW1!_+g8=%;H{rmhT-I<2ZYsFcaT9g&%y~V$VbgH*=%TLSi@RmcUkfrQ|;DS zFv%zDBs7Y}YFLk=Ug7E((=?0fMy6M-9u)@;@(L_&w3j+}(@nM_i|RDF-S7`qDJ+N< ziEOq~*Fe zmH$Lq{U>NrcZJe;QsS6+mS?A^nRr)rs%qw^H&iFDRaIny1bWXm*)rW?i(^%@#hl=B z6i#rsZ0M)N#;d68Oz4y#nXGsQ6vfCxgpg2z7P=A4U0#97K9wh7kMPL+!a`VZimZ-~ zM@2zX|4ND_Z`v4#*9IkQhn?^J8C#g;Cg2STjVTh-CyckcX|zCfC5eqOP^tK#ub>XcA24>Z*<7>?q>4;WCJ1AUshAl-jvi?iEdDY+yvxFx zsGK#929hShF+DgHzq&3Sy;f@CSo3URU1HP`cC%v!#&mWw>NI_&T5PjXU3)=%j4>fC zi-WS#cslVIQ|5Vs5&=I+ylGHbkybqrqF1`CPK$F{kV(@mg(hc#1N{IR*3y8Vn^Omu zx{TDkyG9m!ZAHDx{IY!OwIRN_-?-FFH1yv7uh#|li;Ns^VU?^5QBO00sv@rsAI*#c z1c`nOXOhg37rb35Di37li;d`@v#z5P!<5`xAS&jDmB)1JR1EVaIc7f6ek;{f$e(rN z72sTi#T|~dQzzJFq1r?e^p$zygUOI}WXvjSX7Vv8QX}!aZ=t(2c5~CNcUJu>eo|N6 zHnh!XaUH77VV~O1jb!quVb*Xy@J@xW3f_ZUq;of7;HZIV17joM0Uklm-)>Oa zKw+aZPa867$cQ1aLxTDlFls>BfY<>+?cgu19)JEcv(wW?jqvA%`OOL*rXSt9e$yfc zjfxyJB63h{Jv%A@6!Q#e=LApPzaEC>|XAWf2YX zs*_{9v=5*+B2FZSU`6l8Ygfll6z3tRA7NL=PyYt|2)jCd1|?>vCq&Zr0e`+=o*B%1 za06ioy8v1Z=G|cVIhdK~UtlV+5WOlCayOsYGuc&)Lrkh8UyTS?Cs@s%0`!K_73V!B z`ld0g@ID5$Rdy_9@n*2WK5E`ER;OFd$IxDOBHc8^63$1UwaJdp%I5u_43mpG-MKKN zw$Eg9JJehZ-!Lu+Zx6+IO2E;U!X0uwNJ^L5@h`1p*mk5uyoM6N? z6B8k{H$oS`I_?DDl%Fui#QU!2bI)eDF`wcnaM0Yi0kY1t^RAUy<&$1K=f|cdQJE(9 z;o+0{|8!U0A;rmr=Q$zFf7k!N8#dZJoS>Ah% z!w46Jg4Z!Ld&09Z8gEReunA8!m(6&(MZb-YL(s0ojYuEUgYuxrBPd@8jItUk9lzNZ zB1Y3pE>&hxma;iBThuJfR_v=`ZIPLHdPdYxd3&%*W{F5HEq zzld4eG)sP1FPdVf@uX`eTd2W=f<;Y=&l;5^vo&>aC|nvWF+LM{cU_2=+0B@0i_c24 zOhrDlxOl%XWxVXT3IE={Gu`H)T4=gd^!)jp#aPTkLC#cjF`Aj)$q^xhj7a?YS0|yrB`1Tli|e|@nUJ=SkzU26FNjR8Nm7$RG~GBn8>4zb6-#XY^cmMrarll za`ktVsq>bfAf+d;?9`XRDP2T?>pR>(1BGR07Zq8}j{LCRy~D0Ut;6~neuR7VQInG5 zvr|*YXUC?EO3%iMHkRM(b4>M&e-QrlJ=qgKjY$J?$I^i>`>QU8qfoY`B0j1clZcqw zp%xZR9(tx2e`A#a6B5+v<9QQP8}Nn&Rdfomw8Fvwk~6kUD_04nxB-HvfbrBDqcxL`MI~^x%yq??Y1DNTJ`$k|eNK z9v#hBEs>AB(}ZkBH(J$^nV|Cc{u^}anTjOd0{a~QY9Fpn**Z@e{)=+C(4_xY<&WwX zlc4_7qyI`e);FE{ukxkOD(a}zOm&9CHBFs?=~XtfN*yMi=lmRc?b*yL3mg4*zQk~i zxxYEpgLk52uazx>Q*U{?)ltN2R1`c)FQ4#lrO^kQONbJa6=)k!=JNPVf(rX03-jae zFOQ~DEGi9FusH!kc2+t2yP-ZEIbf@478fU+oS78Q>Tw?rf)?A5=5Y4qC5+MMBP}uR z;w6b2g_$k6MN@l;VNSS;O?udgf^j5fb7ne<_>9&B^wb0_&V~Uz8=Mldkd6lK)l5`MM?qv5bVUsV=_hm)6CZnbS9Ewav2i2Q)3f6t_rBgP78+9HC{x6`T&9`Qhj#@upregwcxXZa&4oqCYD{`;tm+^p zXk0%7aRW)Va9W2L>+}%MLHp5uwEa8J=Ay&W;)K2znOIC z4QHeqb0KU&jE9Se3ODK4rerRnX|Gh5)#1Wym<$ukcIR~?cu2=yhyrxZt+QC4Nh}Te z#WAQ8tc-DfcXD}pF_K}khPek>l=YU3;o1_P9a zg3m^V!7`^vL%yMq`=?uNg)!x2N0H6Us+OsuoszTlGQ5ENl#HPuc=7pj(f&r%p(^r{ ztjE365v)vzJ$SJ+*(j&vs2mA%NQ|a7rHv?KUcU0te(7oF@o@nB%erV1--04D4>l~g zJyX_(iryTk|9<5EPr7~5A7nC+YZnNdp_p!5ugV9zKf}#pb+`kgQQ;eEnaRzQt3m zys*-OaPV+MJe~P=o?imeAN7f(PqOmS&*Oa|H_D;v;0yDxr!)#44rX^D5sJ`xWuijP zh>S0+fNrP=hr+_#QoZ}irCl6G{eJtT;~LmkEjO{D9;$bLv~&~Oz&>kK4UOF=-Oyg^ z2KP!M4C?Fz+hZMcpL9cet9d?;)9;}kl`P~N#145SlIH1|j2qfx-O%3b`u13h>e7!H znbr;MwGOs78!{SM-(G8KZrEWD-QMi;?Xi{%zxD6W4!*}aO}}e9U~e|~@Y`SQ8)(BO zweEgw6r~3DTO-bX^hh7Lznal#U{5we4%|yE%afND<$tj+Tkc(9Zm_2?(64?U3+=_$ z@443RchT=(5#Rd#F8z_^FxO`9OI!EMCYM=_yZ(CBA~(vbjy%@W=4X}h{$WD7F%#vOZE(cywt998qwn6pUgE~`&=CE`()hpS&RgFH zug9WQxk!Rcm`>XfaB4&5*?{^mm|Gf(H9F1tSvl+%!&)k@g8g?J6R(Yx6S?)qt-iXp z9*$W!SbP91i!nkLeawj4Ext2c>cN&SvS^gW8Go?Ejl{aWX`53Da=GP z)}LSZXe>X})>yxk_P%tr@Le1jov>4KViyM{ma*?ET<6X^jz!VMDO8%Y^ZMbgsXYkB zmu`Qd*9YHS!u_e7B5O}rzHDTFh1~kb1w9}fkzxn=cswqsjcTm?SY8j-Pp+pzYAoHx zx}!Mjx~$m$?d`rYdFbSwPsb2x3lyg3{rogGEEd;#`p@-5x6ygHu{_9h_VE&=A6^eL zGOfIQ@OtW`#_|GsbRN)4jvr>{bNh{@;TIo0G2i&W7aJ^_&=O}6*4|~?Rwquu{JF6= z6doGOQ)AunGx{p+w_|;CsTbpJ)>W5%^H{O>?#A@7DOhgG!*Mk1C@b{epvpEB(|kT! z7JT!W5uRfyzI3M7LPujzN90XoQ+;R^sOB+`r(7M@D_n6Qb7QK|V=CsU5zW2#k;I5H zTQZPa`9T=n9R)jz*?g6XAsvYwoRJVEE-PV)14eH42rVn$| z6HdXdaB8;Xp#fs^uSCx`UxV$nI6~-gOv6D>>=>KM&n5=an!;%DsOU+-nBOvC!oEV{ z81d_2%U4EX&TgiPRV2(Sqt}f^Iyz+nc5uQQ^GXWcZI*1cTiE_>oCYf@wA1!&#bh?K zlk+qWXDy~h8k~%$y}uYZifbV-W5{_%zRbh%Ni5S~$J|s}>~or|U|SpKlu-a$K zr&h~Eg((QrjpeDpQfz|wtu#-`So4YnoY9=03f>6QEf#!1PrW9y#e=QiZ2t8Bl?(O% zm5ZPy^8erEg00G8E{~cCba9kCI;fn76)s`I?BlV~%V{yw*ahcJ^DG4p8xH@HbA_t4 zJWra#fz=>ibAkGdR(o-LlWv%YnGdZ`H@@Eo=2;`u?fYL z@4sg)7H`+Z)JTc24G2-CCL!AZuXh*GVHnC#Hj_2dxCr!#wa-ns^ z+hU@FkW7O{waXTtjY%(?J8U zR_`Y}ZYr5<$bY`gVIl!EHE{z`X6UxUo;xFC(&!8w)Rp`#d_4@8>*^ zov$tCdA<&P2lfxs8K_B9!q|40B-%f(&-S{|0(sNT#4O+{v571 zXeex-f11v9dm5lpS4KKMba4=LyyaIHksxw|oE^65xG{mj1K(WhHug{ znyNoN3X|-}ABE@V7G^MF;i}@BkTNbte>6_U{$q>_*o@Z1*fGgykJ$Zu>)m@#k$&A$zrGn{-4Zji-n04rb>FltLzzSjOi?*IIH`cWQLLHceFaP$d(<8?u2#r5xAPP;lVEYL+pJOy9 z9MN&-@E+!&Y8>CM7+~(>bwX@fN>a)wx>}L$m!NJ2+qdHv2Wm&?eLk0xjWYxMy*qmU zlFkIkcW5VZA5(OlB$qhVr;f~+AlI>6bm5f^CkJV+N$zkR%jLMKabxGgB%O4;zDV!y(p#Z3kZ$xNIR)@(#$`&Fr@&MRj@aM`&EGyZ z*I2$A>rTdjFE^rhkMbnDlfI(lJBLs4m2SnnU>dG0!UkNQFN_J;i5-+7vEi7{o$CE! zzcU@J!Hrrb+WAP?&MQwzpCg>5)5UyZZya0_9kHy}X!+J%2A9R?!uCZ-I&Qv}PMl%# z-FtN28;=W-e`DQ7h7YFYtVYMVv2=NPN1q0n7qS)G1pMVA<6WP9W5a@fc|{bzU{el> z*nsE4=h*))z8cFv$*Qq#8|&`>MjZZ|X)fy+EQ4gwb(4v7rCOdFMK~{-I^^QEIyPLF zeQI&FMKbe1jaVB0qAl`yysgLZg>9i{JM}TuhR(S>3DEd7BHkJ!3mFHoMZwGTczG?J zZ#73$4Zb=LYj<(MJOo5NAX+@WJ~wKZ5C(~WOQRQcgXp}*zaDq0OB;xjFZjPPbs8Z{ zv8w~=F1`>$+(d;tS+EL%VGZt8VEbem;+=az21ENK^9=2ZLpLvK;2_l0jV+%tkC3d8 zhl8XgYoLPU0G_vGd>i!pACWX~D;o?KGg7>H)k~K8d4Ch*E#S(D z`u3$UxBo-pDw9s$4a9o4tgCQ=d4L@Q3z8tB-}iqbO&W@uH$OEp&Hi2f|JHKyKe-G@ zp$Dl8yfXhU@c*~U`+s2GK41L2vi{$gzyBtAyBo1zp5)|}Rb%q*-^814?2R6bZ*TDV z()EJc)4z$=3zp;G6mGpTYUJL+#>(n^b$es!`1;!HPWwiUJ1&Ga`gwFmHFf8ZYa2JN zxe)qni=Zw9RxbW#SvQuSzuTSY+v9+tjV5sUBQ`iNfF(HWubO5N*YUHtCyeK~JFD2b z>~%-G$kc0kxUXUJKrFqbTRU}x{TzDTAl*vS_}GT_#a_7EV3P5Ul^8v?SlMurG(Pf4qxEYxUuH#Tf~KQ#sSFVU~jei~Wd33~D`ecbBOO0ti_5q1c@ zQOq<}HuZ(mm_X|KMSL%S$;R^7SaOz&C%yx@>>)8)S`^t;OPeWL%Mxy=~z=r%7*S1bY)A@O=yT^?OI6 zp|h5CUxQ)qbfj5yZ(RhwQ_+tXE_e7X*s+E~X=-%M02sTw<--zT{@<(YKm~IWdpCV*lN7!^wfFe{U z&4f#tX!ZH8&s-n>`rL>h6d5PUi{7ua3yd2(-~hfsgQa(%y_B1XS0Zk3ka0vt^T=;Z znew+(B%K7jNI|<&AX|CFnWY=aNb;9v&G*EQj+AM_Sdn~6zNA~d9wfXp^zJ2Xve(C5 z@0Z-jJgqBy+^>%t%(q7V#`M5s!9+BT8BBS~b7&vI~kQ-u0#Kn(H7?pVA=rJj& zVI#!twacoXqF0xAwF7AngzxBm&BF>8bVo=B)51n zhaQl@3xdW|jWanpT`ZE|st|11kTyO#{5A>oGDcwrqYQ z2)}oe^t{ZmtjY~RS05(wD6$2fRCM#A0&B(RkMgdM7IRC@AFV=5ci20KH*ErLF6A`f zUhIn?ev90a0Zt$LdU0qldX{OkjHVtf=AzCVNpK+{e17 z5o@>}YO0IIM_e%2hZY;3h&}%}%Z;uU+)d)KnL-a{Vae2vvm?x$_XDW)>>trTDvEey zV=s2ch3L#lGcFq0!^8UvDkn<2m2i-j_Z3wtr-D9hY7tK>NO=fqI|NJ z(d{+m@&yfE83dTaeJ~nz(uc}DYr}Q^=}JNLbtq9N+@L(_-k0?4l|(iIKY^J%tOwp% zqZhAuAEoYFtg>%Y;JYJ;jmz|X7xAs%Q_JoM!pqypcZ^q5<%MjFL^8*bS|uzK6(F{# zA{EhZr46yYa5EyzbBnAtvpNi7757+R-!<)M4Ri40D|n#O(u?Iwi+7u>8YVMW58OV= zw#>r2!b~|S1(%ZIs#x?1ycw1SfitqcyDjrrzsl<%C{Zbo`ucPvC%r6#$Vq>H5|btE zM<+%5=1I}sbkb8fjaFx~J@3)#B!;wKo%X}iKJ`gZ{w^R3&A@y5je-&>pdd;aX z8$UWRo=jw?YvlM0W}h6Jo&jr&JJ>_CbR^tL8z!dX5GuWuR)EJVQJ3Va?moDo6&qsM zu~=+`h6(wjcZLaNCn%cd*w^_rg3MJ#(Lh&%MQw?=x1Wqp@(fj2Xk3H0k9zMX{lA_BT4o3d{k<6eAf9lXA$)zQ^Mu1z69V*r4uuF|&;p^5v;T{zQJ^VhhPy;2y>b9?q!HKX*m+4zYy3tKY=+^ zDpU+q$w!?3{X3A4_BUaw1n7h+`=nAv#d0P%%(7A8^{CyHMT{4k-ny7IY=;WuMkB@A>do zjdUXAgvx=EGC27@_(i-)l|hy2WRMJh5uYM#C-_8?nQl%d`_wcsv1h> z`$Xi25~MLHCsYoUO!IQ&O+#Pg1N^QfdA0ME&%vxb`}BQ~cNEBmR4vL*jjsHZeAvcd zt7&2=sBU9Og*hn$l%jJ}z6W*>!*8r;8<&932O(>;YffPGa^#(dni$HL!R!I>dOz|m z%9LyyJ2HN#rD4CA66Cu;xk!CE%5w?$B;|z4fs$!@1iU(tM@i*Cr9w%05ar%X4xv00 zMTtQUx+tWLFCT3~JSHQqwYwn?-FFKdw>%b+Me6Q+!zH~Z<>DWvXxz4xnjcTw=%k1-GB96r&E+nB^m$dCnjgn=jHw1UVn@(`z7?#xD9Kb zdh^W>zhAI9I=fkTVrt6ftM0wyzWvMF9NmvR)TF85%ROL4~TlyQ!fDDh8?=$_78`{H6v2Dd?%s)S=xalP=$MSL}ToUwUrD;~O%Y{^Q-t z2mLZOp|b7OAKdWWCHEfs;iB%FI)0q|W~UV^kED;OV$9-?_(*tbgxMPY>3Aeu{c#bYAr{mo8A6|M|zbm?uj+CC=Y`>M3&reT_AUld~J*Is|bw0tYuW zIPqOIqN$;DB+L?;8X}UK8ggP`2j#pGYCPl-2D9s%8p@hAHIzeDK~+P|2mdjG|8l|q z%!`*tv`UD*an=19e~rJrX6tiV%iE3od0oO2SFC8i{mu_I|32er#*B-1bQ!Q;=!lb(x+MJW*6^t zdOh~O#RqQ~g8z7gfu6=R`H;OIkAjb}*t8|PB3}Qxofr^b0?je{`DON)A`t@e`tu3e z$1CRRk{x`k?R5t;(f9Yc6FiG~MAkR*x)*kJ{P2rI`Gm{ZbRR8Ip%6QMd=nju3zO1V zc*M_3Kh1X%x{fSx=@=WkSj^r>5WN19Ev9LhS3q}#J#j}93tl^(hLUBUIVM!c=3^b) z0*3YOz2>9xi{tUy42DTwTKah6(IY>9DGto#S|FwTb8``^wtZ~Jx{Ky=y?|b z^QJNlwY;y9^!oR6GXam}SiFt`-Ec00w4H*6h=4^bq560f_PmUH$=9(@NlWlrdc#h{ z<@=P4M)3E})t@1!xA84d@6nn_JTIzRU6Z=Z(ZEhFLOFM%(u@TWk$ z$>ED5~vzFLv7MqKj3He{&ryN7i zBjvfp8Ud*3;v?+5PlYkty7no2?Vhc3c*7EYMIQ9URhVP>!@rL$%+YkPRVKchC0JNs z0&Y!wYhN9@DGttLARl8*`Ch>X+KGOBEPsBSF7w5uTl%~qcoXiZp{>^qWem2Q4rv62 zBlZdiQS)62^|(Q<&quTEK^4v2DPLlo6Vi;0Crf}do}3S}l2*;U^Eyh?5JPGE5QF&u z=A=TK8RY$W-n*-iw#m4IDjDf-1KNO=k&5C>Rg^-LvmeF>e#VqxO@xT#(V~UP%4xGs_IkF!d%S;*j0VP<5Uf#IHhDJvq5?W zXqGD>-nh}+RRPQl-}vH7W-%~Rb?&4LjE5ncl_7?jWg&*6N9yPA$anSI6@!L4EQH0A z@4k$-%b)itH90s!J>5d+@g+#885;iW`twr*Glz zp%8-tcZ(2@n3oVIC*J1GUK_GN?(Me&UX&pG%e6$2FkRkNAfnZa94x{ns+;dt<_z@AhM;#3V) zLI_$LgQU|AWjlqdDSOJChR#L=-?w4>vlP|b$6{_L@#PpsZHH0y=|#>@LnG4}rU zpz)hQU5CBi=el9Lb|w$|>gQR*;1=IIhxHn|YuF9==PG<$f#gN4H}T{s-(!#@u_ zjBiC-(z=DV`->WTOzMT2%HTi+Je+^rsZMpKUpT=!jr}byQ$Ka2CPiY(9 z9XS9sOtKJ=|lUrXOH zWFvkt976?m5jb36oWK;0F%NJ|Tnem$V%r0h>W+D_3VxPdyMR@=vh5)0)$FpSBNSy; zywcs1bmYY@Z@{dwiz~7ca)F{>E$O%NZ~9x~{YDxheVPrEc1`d>O0Eph1Uczj2y?x? zbOS5#E78e-jF=pxCFx_uJ#%+R6qY4Aq;I_vRs^+`A^ErqPMS2mMDctdYH(Xa4Q-)b zF9JL0?AI=6K1mCb|I&l%8S@oV%s{ta=?4z zAOH4>_l9%x--qA1;CZP!YEK6>4R%*VCa zhlulo@JBzH4-CpLH!wOeit^c;QMsXQnYB`T2S@L^jKbsni!i5Zh8FnealW#O^S?5Nql`b@C&{|F-1xkIYqiM2!b`(nb657++^gb=OR2t6YP$3s zULojee^@&;Y4PmR$~I3}ja$y_Ap5Gz3Uj^oH(j%K=|9>$QQ2bsC*duY?IHWJ#e0gp z_8&hqZNVdRUaHJ{>bWPrxotnA|8t+IUi+CHe|Hx|zg0Q(REr@~uK$|s)qC3AY?R@9 zW^SJ}b;Jt$_j&FAeDs<0zuN7p{Pc=eJx(MaX7;zVEb!V#{c?8I z%y}PZyN2G8zpm_iWNQ~d0I)u5oUjA`#i7x-HX0|_$Buy z?XgGN_sU=W53;X`ICX=dU!$e0DZQi5jcY4kc(df#i$ji*eaQpOXGZFr^di+<4 z@U?ovuN3@O*290Lh`&}({40h0w0h)MDdb;SkNhh|`c>AGew8BqE9*)BN|ArGdh$=D z$bVWr`L9ysU#*_}TPgCtR!{z~6y-;&r~Fik@~72P{whWJ)#@p~mA;e?_Ej6`pWIXV z7x}9;FnqG7^6#||;GgWN{Cn*K;?L-#{Cn*K?E}(}*`xe> z?E})E*`xf6@M{9|53@)4_u2>KKeDItFX-0<=3la>^6&K@kpCHdlz*@PfbzrWqx=i| z>cH~H{GK_@t7EphYeT|NPEuj8m z{&n#WtUt+KFF!4y{$=!a@(--P8GT*)X#w>=v)84+7SMh$dtLs~0@@#Dugia0K>Nk) zb@^8dX#dE*MwkD!fcBH@_2nn9{Uv*S`3r2n8GT*()!^RmH>Rjr`^wqR8goi!41c(f zqFj7x>cF%;i;SMTI`1u?h<7k{d~ZrQonzdwx~R*@yD|SV`_3s(JiNl#;hx`YSuZQf z?lt|K!`>Qhe02BTsH5L1%KnPHEA8VRGp0`JSl#5}Cd%v~wbx~A-(Wo0_o?R|9??X3 zMN7*~ANQ1T*0|e@TUY{NmE%8LwetE=CC0Djd}A3ot*H|E zOsm2}r{@_DeSOuhYu7bZUTWReHE-~J#x~6kKXKQdrphbNl#eMIbEmQMtC6k$YSB!& z@yy;SH+=Pg@!Tcm7ekHBlwP-W*}16SBgPM&iXQyrt<9ACZobdmYtNI$Q|rGQ@a2=u zl)~iRPbRLv%XrOzj>%7a-Ark|WNnXxEgOx!!cSk_`jQZ(!(evd&qa4kZRvF#CIh0pw?3I!DRm*3Z zD+8;{*MA?i%$Rufvz;A3G*?k&J@woh z>;GDA?D$dgs(X5bDhHeF=+x<|hm1#;#IOFmAXM4>kJ_#MUR`YbvaI)r?>2=h@!2OP z-g#=aanOv;tDZX+su;ssta&}>G2`LwyUGU-Zlye(` zqjN%D@fc5O_x%u_+FrRXsnwF6jt7mOmu`6U`3>!rQ1$89ig)fe_PojT&&z*rul)0_ z-H}h3?={AZv`?Cz+Cf>n>%lQY@0nrTU%GDY)+akCZmZZ(DQW@tt$dwdRto<+#y{uo zko*cP@yGwKj9-=Wj$8kyrx&HmU9VM5Af%0Ri=kE?Z=b~JGB1Qm9ojS}{i zzg;_+FKebKM%Wnx?ApUl|C_AWT;O;2-E9r(KiU|s1f!vkwep{r(*KG|$Ucua`_)(k_q0fNYfpZ{aOm2uA{b*i-Fa}ERkIYKpZoZBdM4&8# zenS8~a!29NPft(pm+Z>nZeIYs!_c1$phxb4(bM}Sdev~({Z;?C4uC!eO2(Dk1dFTQ zAJIAqcTPcz+|z_i3G~aL)QUESf;TWfE#yaTNfz|e$2ZV_75wfC;=jwm;Qq_umQ&?_ zhrnIP7H&p7HHYd1eIKY`beVfWK+l(?A*>WL=uQ@N$&6%egT5GQ+50>^auZB$dVl1% z4DL4SXpx^S&{qjFvL|=+)AOYFLv~x>u2x5fr9aLmwS|&tNp6DiME<(G=`TB?sn)bL zBqQzUTmJTc)7G#JW;W2xfu8|LQ%S!Z?t`W4{2j;JZ2rF1T=YZccP-gf!0<}rxM;Si(Sp#$8A((&SD=^O85El8T z{H{-*?g6w_#9<}mb_OUXEA{R-ATBY2mYnq@cQHg8;ga0($$ol&lopgu!T1eKJ4%B< zc{|~E1L7=c6H+=-n$^}r_l!sj3X{sz0px{hxFx^z)AP3zcHESo8%x#6h4M&pGA<%BG8g%6vxT%C-o!)BlMIG!O~ElHe_FgI2?uy zWqBo81j|n(ADN#hEPdQ4Kdr1MKV^u#Kw%MY-9+3;PvOjgUN6V2dgP}suOzR{x-=nL zU34;lR-rOW<+BuV3sy#DIU~3FxCE9n%7>Kawt-%-x+oF+>+39{Cx0Xp8GkB+6kno4 zeuCu#iboj2qOvXX5YZxksZdnjH`K#NJmR`TmoLa4(MW{+_4M>{C3 zrZ(3`%a=x_`g@+4wUa%=oHKmx-@o~MR-V~wulK!X&&6iUNc^6h0{2M<$@c1!VluJ(*w6Q1vYe2c*+ z?;v;u;1N0Ip>55_Ip-`UzR*{*F(zNz+~=Vm#C$(up$zN6L)#AGoUu#&cVWSu16@!-J zx@1dSSkc<&V3?uy?UYE(4`Ifr>}{7j7SH`z{GBq_5&Z=9;qOu!N5W_D4_?FndiPW>exI-F zZ{Bk~@KgP7?{yt~$LS~SA9yD-V&Zx>W88<|X*`VI@nuLo(AjU)Lf`kce1U5SaTsA^ z(UJqD$dx?yE!VOQzrWY@D)u_&k2;yxjQYEG4$1hP#C@N7*Sf%nh4Ho_&aJ3bf2Zv? zFyds-es7X|pkf_uN3d^moq%3FSM8Dy{1d%|JaV8jR2$S!+cWz$@!jFNFvd*e-i$Tz z+8+w=JGa^fWxMb@lpROCWfLSvE#Hs+C^CAD`g;&#(a4jBY?^VU;&(7Nfpo3*i|;zD zcP-Y5cD>fA3+utT4&&|*$KGXoa! z>)8zd**XVctUfPFIN3AC6xVtt4&wbw)`9+c6ri6s7^#37q@@L8*g4VTQ$7*bfgbZZX~8vPj@u3U ztVhT-PKUq2QQqsCVaPJJJk+hH&-=P+aoy{<$8bN>5v^d)25VC>!W*U5W;JTEXFubwhv zqG&PGxb}A;ACs4X zwP-=lX&&pIj%%0q2Cp^c{lb*(K_2F~&e$JmYl|_a9PcB%XXs}fQ#X%%dd z%NO@r(oa>t9`vcz< z_>98mG9G4M@VO-y_kR7XXiM0Bn{Yh^uxIOgkvW%+wc@*suB&OY5iup>S(@?jFz51( znsAP_W?ggPNADN4c=zHQ4^y|pxW_QpI^;DGv737__jvw|%4xV3CSpCbO};l%hlgpC z@6vs+t8+Aa#gsF9g`cbBqR%a3@`dk}<~tAMvD9ECsqylm>TUaSq@rM%+g z`_(?kXdN@QEc6xcnO=IlkMc7BuQ`4$!1r9QIllYSS1O3>$j>$S83sT1@sf9c7Q|;Z zKA#nUyuQc4zDYCcgP~%6%!Th^UOxD4MmZjw?{)P<(6uJ)BlgT7?%Db?(tXCcWe8um zo>{*iw$0eGjL$+Smp&TLSKWA52GxU(`AmpHauh%|2$^({<`G%PgR~1@dTvjQckFz~ zdHD&B@!os$jrduct3EuU~fPOB>OD7q8FZ=z7$E$W(kk>JDeuvQ`T!+IL zry>q7-7SVLZBWk5qhGg=CYO&MjO%0Mx&b~8g4{J`PwWGK5A?j&alb1z%8{3x=qvs+QJehf&@?B#S?0Q{idC;RzubdbMOj$mx>kZ>P$dbpy^s$5afV^_HrR}e*A8VBW z@~TB&j5ThDZEc6^+H8y&Tb{%k!Z~wEOgcGm7`%c%;hxs+{P`+OTL<+TF;7{q{Hb3Z zLtocD4fA5ofdl)}(xC{SrR! zFl5M1g`I9!jz>?%-q?qlAb%?d$eB5Ix%_T1)|ocDPQ|?k`c3fF`j_Dtw5d0p4$7NxG$ZbH$kF}zD&-iv87FzAC*e8I@J-&pIOJ;7iSbNCPh?}w zIM2iMxeKulpeOAa=UgG?#+~Us*N+;x*wFBd?P*#4r(c(K@_cW_MevJe4C+9|9jv+1Q}f;Ez7wC z)P>i8mt9^LsmROg`-}z1HQ8gYq0K(jH5>C?a;>!d{n$N;a-EPfW2tjpTUp3E2fA8@ zxQBfpYpwZQbNBkPZ`q^ldC%O8HDN5h@RN#b#!I%q*aPU3`xy7E&a=IHvI(~OnX|;n zJiP2Ow=USyd6@k-XsjXUxd*%V+alx;K#tmvwnGe}x2jR!HpVG&u#ddrU~g$%&etI> zJ!WkJu4`uid5?3&$2`oKX{XCo<9b7fcBAkUG5V5wmREf4eT?hGHOYcKeeW+ot~$?r z*zFKsymxrnbl*>+=w+?L+UfkwHDNv3e_qd7W>3;z4st(=e%A5z#JE-t8#SU&?*H8D z-TMgVxLS-lW36e2docIg4Dj<2GkN+t=DK^?WG`%B zpS?WXH`L=%guV@+|5~{|u6g!AiqU%%J9Z-(80| zv^?XCzz?6_ylTK_x^DE4uC4hDqHXYbgU=RvOgrtU9iNfBY`UMDG7u+Y(*01!UY4A= zzFs!C<{Malqn_IT&tDs(>h_IM9dC_MjRRxUz(@F<%1;y3i=ci`;Il-P2?~LJ0ZKTU zs4_scplzU!K@+(5SIVY6GYfbncmu1=WLE zLA{_ksThM=LH__^bzR7DM{*9&`Y2RQPk>K=rK?aXzFE2sv7h;=*r8JR1s(!=pE3Q zE5HLS2R#ou0-BJG7(nYmzXBZrP51_6KrNt8K{KvIkAXTtv#vsYKoXgF>LyphKY4 zxk>64&=F8}E^-BJ2JHpSnFl%0HqbkuF;`md4}(ASEP z3uq8DsTjF}egXOfG-)Yf2mK24A!ybz^fc%Y=;9LO2)Z+j9tO27Pg2uXB&q)f9R=N0 ziuC{m%5cqr?gZ@yU2toXssKF&Is}@y5`w z?w}JZuoj?gpnrmLqe<#vPzUJr+pyN4ji4S-awX zL9C!6&|{#tKu17ntCQ5Vpu0i4K}SGow?h`R5_AA`dM)+Z(%D z#QU)Zpl3k`K*<}hFM)0Y?F1bFC4Lt?dK39G{QFyDYKS)rIXQiUeTCP_0BF7u?&}!?gDWRTfM*Z-@GN}yzFtRxP60-1n z+ScdUlQJ`xEyrIOPS)dDi}KS8X3d~X0K9R)Nj7g5c@x3o@0<%SkGw4KY7w{at|PB? ztJt@7t^Xmu%fXvx`Dg=g*vCA}$9|`rrQ7Y`j zGTHjO1HwaA_<0lXj6R!2UQS1{+J-+iAac{mQ(eg_N}l8zJ&>#d_zOGM7-gyd^2w_3 zZ>Z(cD*KP{1p;=?)%ZsZIPe!?t^f5o3FCB(@wWx6?^jsk8|}PQT0rf=+@uxD%Sx*3 zy!L>%1us*=!+$uilvNjbl~t9?(laNM)ioucqM2Mvi)ZCazIl9g^h0Nj03+ew!|zn) zJm>g6j_Wf(S-!(%`pC9ImO8r)ost+j{2mi!dqwAv=$J9M&#A*$&{nD)b{SKT%f61A zy0lLukB3I;k@y)1c?pBVHPE~i@Pe4rN8dN__nY+qcnQXgg@3y=*U&daEZdAB`dOm& z-dYQ!zk7l7zY$1(KL9ePtw84ZQy^{g=O(tsusu{i$kN9l!G6Jy1qTH`2ht|}55};` zIoe7)YRfXV^iPIsgW=GjWkZl9^A;d=iP}$53|$?2v&eG1A%?8>(44Ez31X_|zvq$kKj+=&&YPK01w}vsrM9=rWgTAKeZ^w%JE^KxEk`oj$U` z&+T=}1u~A1;7!6W1~ShTK-Q79N&C#ZHbd(tI@?5t{CppsF41{Mut)Gc!9Jk&-yFl1 z?uoz`cFd_j>YNS#-Enjslc5Ed+9XR{(iERtnV2tFv-1l0B11Y7jA)n!xrr*GOK>VtEnHs}O3 z6ZpoR_C1Po{Vsc2OxqnWVo3cWehtz_+WBMvb^ql-hiepZ>1zA*r{gA%heqm=*yH4F zGHhtxR`7zD)5mFRo%iE{dxmrEHuSYTQOD9KadY2HQ1;J4P6K+$c1W)KfI41{%%=-{ z_VhbIcOJR088nRUZ?I#e-#YQTBZgl!%C2!DQ2WzJzX9;+cP!BDx5MT4y8DM~bJ*oi zhezAA8-zWsDaUCeoHcRFMn#rul;y=!@2gl>}eTocfg1td88e~IG~mzYFVB$exg2f44KdgY9_GhAv*@TEOt9-R2gtg!mQ68qbSzQPp)JN#E4u85{XV+QE?sS-MQpG)Q%5;#Kp7s|f0x+k z7Caz$P_SR{V<2En+9@Gy(p63OE zMPg^Uj3YqSq*|~}_-ldGZvg6^>W|}(vaO=?0+2E66(4rHqm`ibeTiu z81Fjh90o*p5NNGqqK#vKw3!TK4yOTi4(ohu21WN8(V^Y87&^KS>kZk1F=Tbjts={H z4xC{BzDXvK@#;g%a?JR>(3GWof!N|YvF_xRf)@np%K=M+6^fewxe;GjLGzG}IWCK}q+8*?=9fd6OtQD*mY!GY|Y!Yk+>h;V|bk+{; ztV6F&m*~7BI_#^47&C*= zkcF6f9Z23=GXA~bpMlzMzK<<+k}b=4>wRQ1Axpn`f{R3#F|_;W)*F8Md}KQy%k|zX z_@?M`ZPHJSUmKNd>m~vjR{+ShIY;n3!3%+`5%aF~u^ECaqVx|p`E z&qmRIMD(`-8PhX@?Siie?h~Xw<^Bg_9c%hY@$(OyY{!}kWUOgGty|=y8xq|D(Jc~P z{(f0=99>M?d5V6M=r;oy|8~LW1YZz*S@1PM+M)b!F=ou%8&ZA)9crPrhHW<7W(+KC+o2 z%X$?0$QD7?%2jk&`$iv~M#w@;Jq%<#TY>bo6UghT4anNR0_48d31sal)9+(j1!P@; z)S;cUQ{vYq2w8}!g+RtrDmFOQeoJE5(D#Ezv9Vcn$Zv|FLm#YJhv@7BlJ`GA=J*#N z>+nw?{j;VAeQaf(YUgk{khXGww6y?8TLnPYVkwZZMS!$T+2EJr*QZ%zsUL|UtLxAO zS?2bRV2|K?VuSu#W7yyvbpxl_v7Lc&ZyZ@nTk=83^Lzo2HVT2v{Z^p0PXihIw}FiF zVIc1b+kvcYJCNU(`wftL^8vxX1NoP%KLzr0z>`i-3h;N2#tD8E_$7>|0vSLKkbei^ zI^b!*<-pT{_W<=e?g)6-TGy`?vaG>w!FIt{1osKPDYze~*D>)_Z`-=Ac(}4;S(|A- zvO&l)j$F}Ue5F1*QOH6}-3g@6^@86M{63Je(*G_WTV0T)|8CKty*?iub;fWlQcjCs zi=ZJJ^pTBfndJijeYO&59>4A#qO(_YSkn$4odL))w?V;C zXWIFlA~+VP{U@iy_a79UIfhQqM<*&ewT4c$k504bv=}-qJ~~~Z(=9sOdwS#OuqNy^ zm1@@`5y+kk2&Mvgt&JC)ApD7fQv_*;`{3m=4gz&O3(tsO&nRRWL#?6H=%dptIxV8Z zJ$jFiPM7F(1DRv5p{vHmk1=qT9b+nxx@kb>N59!Vx*^dm5Zxlt<^81AN4HUQ9}(Sc zK(5C#Vq+}MJL1^Dw6(qikmvcJpgP;OlL%z(?*uZJ(*@4~^8R+7;6=ip4CFdrDtML5 z&zAXX1g{mm0mwb4SP-YyX8=S7R3`iik*@)=u6*uqIy3f~P@i!(L!Rd?f~`Q-rwz#Y zKLMH7uLOTB_?94bIsY!kx?hu1WBaAez&We^HWXDF`eJ*=iM%xXIv)7EheOO{hKiip)maT^@>)!w* zkB3I`8^LEiHUpU-iM>RbEZ7VJ^>NM9!}W`}{An5Ow*&Ub`?cUZK>F(evVN3n^|2B7 zvMtN_dSb}x=fxmoX@8Djp5P*}!JN|0an=Yd>(DXRi%tWOyp5vEniN8pyok$&)}1ay&FLwh;Kt zX$jEXmtC$ne)i{KzX@M<=584l+q7E`d*t0Oem9H#$ARpT9YFg1Igq(^w6EBAMBUUU(MBwQdLMxFSBb2OtX-H3+2bQRmvajH@MvuI{Hy z$a3AL3uX(>6wDP|AeawiT=bKW=AE;)T@P7^S@$qLpJc_5r!5|gqg8a;1UrD_@0D?< zjNg`Vw~PWJV`!I9}U zKT+@$!4$!>1=9p42u>87BA6w3rC^TW)q)`)<7G|izv>;Y*+=z|XYBV2J_O|a4+I|< zd{XdP!Cwe=2<`>aul4*B$1iJ>c)smZ0qN^pAba3K8BY_u90;~`UGOum(0Ts(L`A1a zY?R9Q+d%qwK=Av*e^kal0h;P@_s_3Lbk+cA`yL=|ejCW^=X*fr@dKIPD*UH`lxr3KZXo@pgV%B#etRJg zQS}eOe~Fz>fb=`!0vnTnjO$B4%AWybJm(0W2c-OkK+0VV1gJ}7{tB6&A@g%(e!k2v zmiZfG{uY@J%lt-}-z4)7%Y3uUuN1ru$T;eNjAJd3aWn{joA7rC|5@R;3I9dm?*Zz* z=s!R9`mrzY4P(p4NkIBM9mq8~2gq2?6PyIZ(CT~cJGm2L+oc?B7m3bF!73nqtP#9N z_}`N8cV+w#kiLH){H?-&TE?w1-Yw&H8NVXqeKLL%$T~2e!*SxZ>Tsd#g+S`if5ru| zbEHnD=wu0ADZ0$D#7DPCWEoqdk8Cq!A*NakojpD}y^v*$heVe-T|grlv2)@ybpl_r z{Y??f5}XBOyz_v(e)565AKoJ4cV+%hK;94E2LjaJfs_jit`uAiq@6m!wLsnvzYC;d z6Og_3BN^`$+y$iEOF+i+Dv+NI{Tc{RZ^?Y-MfUu3Ab&9o5Tqh8q-Ud>?Tlg8mpCtTgK-#+;NQK#gA>l6p(q17Dpq2t@uM|i|Igt9* zK+4?#1gLr-<<NIzc#QZ7^Guax;5nZH`*LxMK}X{Q)SJ1c;+ zvr6WxWPXjze^ch~lll8){-UX!mOF+i+ zDiEN44W!&#z+8;q1yb%kAm#di0QDh|a))L9Q<+y1*BFT_8OXk7?{`j&eZA3ENOTJX zsmHw_@$0em7z=e9MduM9SM-TBZqSA6}tof2fGOu zJMI4EZrd(>W?@eIGf~GI%Cu|7ds>N)>x{L`oNTY_bir((?ukHV{Je@F3p46A(P4f$&|!=vE?r#<%JXQ34tdW2^_r5;Tp2g# zYGES?)W^ba+coF>4)L?c$4{@zKJC&6vD;;T{C8~o%p-ZSoySBVhC>JS%y^#l| zntU^lAZ!GOEa3g$@Kf!wuf?>Vkk~CW?9)#P##|?U&d}y#qfvAp5qwK<1t; zm?L~5dnyk|eUABDxCp58SO>qfwZr9~Jn8_fqaHfsHHa-T>GL6sdCoOp-H9Er#n0cm z-^2gEgpJ#Fj&xj)k6=vylux+C_MZ;KaOiOR?=bw*$FIdNoC@S>s%VZuQ-bkO{t{2hrN@_l;8J@%;AS{~=<590X9F)d{hi%D>@NaY=D+SZ{RKVz zH5vZ;;BWjdo&It$*7@~_zr)ArFY4hhG0U0XIWIc>&Bj>!%Y!WQD*>`b`XEoQn?~}Q zJ^a(M zO|W71Tj3t3-}M-4zdhpjsE^+wm)}wkzk$o0e&2o7>3785VZZs1Wz5w;#;*@|zKt%w zO&)$5Tz|)3f2a68>f^Tqei+L>@z-U_ zVazz#8>Nt?{d^!`=pc^=ZL&9Mw*@kK%`sH!GCQ`DfSex-B>P;!3xHalIe#5v-48{d z;+^d`&bYphG2^1oeu*n3``Ea&P5LSlU!{gG)}mbajEi+5X26#A-vJ{te(UsKgE9T{ zv%7l8vIY?k|6nVAX2xV`H}MBS=ynNUPW68pp ze9GzTydE~RU*1-@Hg|Mock&HTE=A7iCYQkUVc z5yC(3cKZ7V#@b)XRd&7;fwZ9yGhfr6y24&R%4vT==<58qej9)9^w);5?wfVuZ)+TX zw4Dh*+AsZNiC@O0`=-t1cl95few#7Yc^(zNDZ%5*v&bXQ4CtD9KJ`bZzyHCQ{;cOe z$THTgar|LgHHx1mAoFY%Yys;0*_Y3W9D8c$`Ok=lef5(+IpcX3W5z@MqY_X0jM(`@ zO!bPNKEprjJs^C>sQWq#wsbw{|HuKS|Fl03*S`+3tjDG}{&l{TOUpjC&sq$B?6a}G zPJcm+^?LVOK55xcpuIp3~nV zjOmYS(CP96mUS=&=G6-O#5SOgQO&YrOa+R#Lx%(E5NT(?BgTo)HEZ(W`_33s4-VHP zD*hUd(_h**j$QLDE`K{=Kga;(=oWvhNw3R~meDl{!9Mf538-t5lH;s}Tc=TUnt-&^ zEV{hLLq57)qT4OHy@Gv$9}3bZZ6C&1$F;-9cG{J8E*Al*I~}NX`+RhZM7LCQqoT{} zI(>HhdNhmfcG2ApWbI!D0){?ciN>)*IjhgEvUL =nJ1#PS&()( ze<{Yyo$pC~$Kf{$dFs{*)&uFc0Z6|;0n+Y6f{zG3E=XO@KZ!B@^4Y3rPVBl-o_2d7 z&+|UP0U-Sj0y%$v(Dpk@@Fc-g1akt=DDCZKD;srM&SFHaz!H$*B z78&!Lxr1dL+RuQ*I4FM9OnWU)0@D6iAY(rl$k@rN^RZa~Svm;`-X^;A+2*6$EV9h+ zppR@XWEtB(M2BmWdUgDK(`MPRWe8>hX=6H&`O$BokBuVHxlMHFx6wzZ8L|)?I@&R& zuh+x|-@p4{gEiXkvPB+!kof$^amF?Fd*%T28UG-Ve3fHkq99ooA4s`Vz-M2i0E0k% zym*@3GhE+7*w%a#X@@p~&?U|hTmWS47+aH%ZoTL<2yPVIB)A1gTl96%$5t0)86V|Y zztp_gaZ`>l2WH!`rwWb-avdfJP7<6Zm<^=fOrZ8te;j_IqE{<;H;{hT3vLwLB)A1g zKTiPZhiiQ>jvvZ)K^9`_&p_5|P;79lYnU-Vc1>s_ZH_I=*zzGuJ0&h1z3!NbxnI^o zCrAM~lBNvz(+-zCEo0gxFN# z9-yvG&Vu;03Cy)+sTcK;4MG-T>KY((ATo}{GQI&wzx=GI3$_?*yUQkdJopU4pRuNX zaG~?_q(<1GT$9*umT`;VPQm8|_Xz%0@DD&f^S>wK4}iMn{8``undj%jd=Gr>>QRn$ z{Rm^`!98RhVzX)v#Bk^!PunCjE!U1Y1ITeEP|tI1rVF3z#ac7(eXyzDP53$Wruoh| zp2wJRP(L|j$1xFz;n3lZqsZ_}AEn}#a`bK08#c6Gz9)`c==6I5#`H`1b>eqR9KSkG z`e+n?IJJDyU#sD-3&N{HPJay;Yk!BuU-GrF^ECZ+c=$_$uFj9^`{A`te@TmMf9%0p z$TIE{4}V}=f7hJP>CB@GGTJxi2H=~zp9zkcXOB-694GiyAbaU+f|mfb9mW~NSjQW| z#Qy7?@qUc4u20G$=>s5ChYrS}ZE7Sh3fo$UIauotUG0zSKeNE;FM_f5w@&46dH9RE z{C)6WPJbyk5Bu9C{yLA-U!#Y=UYEaTVLxaD|E}RL{W?3pY@i_$GrtZGe6{x-$&$2g+!15?&>4EK~;@you__n8*MFZbb#!%n|fV@$uiANGsi zlj+GhoZiyLW}t|B0oxf9}l@$TIdVKK^^f&wyZ`5eNMa z3ZF6Q`+Tb_j@Qeaar_HoU5CRG$GC#{bx6yz`ziyd*MUAWg>Tj&6SmActXS#v|2>T9 zpE3=QWgV(L{DWLX35M z88_JRr2y$uAB>p?*HXt9g^c#YxnA+#CpaLOINz@2po|s9T95GsFgD{mE$WOf8)L>t zzxyP#S2^SQ1;)BwgA&)l`H<=J2RFgD}*QLQts-(alk z)gf{1IF7i~e>vkC5dVXMfrWC<6ift~aiwBx#ud858P^>cGcM+k17BRTY9L_fAWz#Q zGbp}t1w)2U?&}4@H}~}h*fit#&7ICT{*AG&Pp`z$=@AG0o7Z33&CdGNi|+=(X2C|m zCZNuRIk#YJ#udHG8P~%Y>-vK5!Ze6l`$!Z+*F0-I(WpWW?@ z951XUxVSV6aJpQ*Xi#7#@b(}_&a!<{suh!4I2KK-_dnWe-rK- z_Lp63=a&!Un&`vqYqOqd*UFv)L9QLC6uM?TKZX4u`1(j+Z~J49?GS&Rar{v)1V7p@ zeJl~bjEj9oUa#So@2}^7%jx%WjCEbpm)dz|1ED%}#LBbYBhL_Yb)Ng-ucyK3?<0)q zkJr&Ammlp=`)d{ZF9`lh@O8nrfXx40AZ_wm?UNh=%VOt1KY>N|8l3~A4f0sC3BqUX zxE928*wQ)WLiXJ6I&-=SW9`2bvW&mc$A6LdS?Th>+Qa`=!+#$9fBb;c|H+NR{`Whem;b#U{?lPg=THCFJm~bl4CA5vA#3ID<6kYd>wgjuCWq=jR`_Q9x4Qhl zzsc$UbBwkBKJgz2$Im|`er|I4U+&>Q9kz7-nTYki?>qfJim~=z3Rx?EAOFqbXS>V) zZV&%k4gaiv-osA+D=Ym<$M3m$dGb`{2~4P}}nu601#(g*9sgZA|MRdJ|*D#T?otuEQR2X`2vJY1i4c$N(~isWQG2sO6Z$ zJmH(qGl`|cJw6S>4{vkE^D~SY4|B?cENfB%1PmSIX+Ijts~3M1WL%_L!yoTUho5x% z8{cC4W4!I+?_eB%5L2zHo(VGheP%cA1@T1c>3# zVdhKbfcQBg__+}W{U$82*M~7NFUC_3o4OBzh-1cfXB@Q{>p1pE9EW}42#TLMf(w9p zJs3y6M;wW_4#&ak_|%^`V_iK<4_GD~_i;;%GGD2qBKA zcRJ(v3&uK*{SrsQ%J^~gil0Lg$A_*sKJkbn6*l#{FpjHRopIcQG2>u83n6RO!zYf+ z>xb8Y^|%6K7LU5@3Gx~ZzXkC7{4-9!0~l++`^E2JAHPwT-#b10CPs$yrQZvmbNVg9 zn0~G6AF>Gbm_x6BtN42XNZwwc)@|_79T43?(NzV*&vtu!bTc7~(7(t6(r*yRnqDJ# zEs#MomQ-Nss@Qo@jrzYshDcKN#%UlPQrwU-f31Dz@SFN^>4fXtKM7gy!}c@{yQqNRdS zAZu3(WF4LZGT(az?-%@@;P(Y-gZcgtW8#y-{|S)s@cX2V#}Q929|F1VKNkFn;B!FAKM$n-OM77@@ForIDP^VXP4hi;) zE@MlpjGuqtzihv$K*ma)d>@^l=-goFH2CP$i_Q-Wopv9c4$=9&=&-f}K04}VJD)_s zQv}BX_4P2VDt=9ZqLVAQKyZm+qt?epz34OuZWP>X*l72$(IGnf1m6^V$FQNQyhJQBPcp~K=%FhG7gIk>wV0}Ml)ogiqAW38_xmRYcB$MeY_6j`tBF( z0WvGM5<1Ys? z{?&qa3t#IKDaV8Mi2s-II@qP|cYw6h2xK0-_XJk^=g}d0w83K^#$1Ok!EPY=2Lula z_5ehbm@mjpNs!5V@%uJqqq9lPFw1Xi+0U8Gcd1fKHy_31X=1A2o{O$ z8sQaVWN4H31xrWJW z;^);2S;qD>kiEAHXzf8j#<>s3Yxr#-*R2Pr>t5<(J5XZhFcwJL;|0@!+Qtqa8zHe# zD7qywUJZmv>-~oB3WIU%P>#LREIQl8*7HE-`WleA{tn1o-v=_+kAVD4DF*UqdMgBLfXtgREq8dY3;pu2;)OhMo8S(? zX9e2?UliOU_=aGY;5&jng6{zt2j2@b@AQs?>&1iq1Iz6=QU%8gP7s_ZI8E?!!I^@& zf+4{rf;S762u1`e1@9277iMNbH704(j&DiG#jcMW+qOx^@6r*I$bbo@d@2I~UqeWp><& zK>DRliH}aE=wyiw_m?Igog&dG1v1vC=+fVQAKhliLQHKJ9o8oCoAL8HjUvmM?C_E868qgiu0^ltGQU0_-M~sazf{3AAZ<(l z>UEr0AHPN+(J3%=ihOkHMW?~g+2o_sDmrb3&ORTVUeW0j9bWTCeRKj5sfplt!3jXt zW+G76CikBBwJ8#vQbVWCN2gJAHXAyvJ~~~Z^N#3nPZ)#_d+nf0mpt|ciS^((YpwnL ztH3Hd$5bHsX@VJoU|I4+)?yO)+`Fd%gJjCFvo*o05%>HEY-_%Wv`-sF&?Wy?@lg%r zb#*t8{oep&tPcVi?-n5I&+~mgw!0upAKiin1P==K1NB;_+#5g6v~t_lML@V7daeq^ z(W4ywheWqP@Mgi~f)T-L!8-)k3N{Ef3T_tMBDhuXX&|4go)!Fs@H>FalXW~ACtk)n zAUa0`6DsVyKNlNZli<4ewStIsWQr~a^v`~%^U*DW4&`qJvPY_cRzCo(egIni0JQo6 zsB`P~vE2n(+Ww>9`#|RWcd^%%W(%}7*AAe)dI<{7irod&M*Ddi_UOAANZxiJW8E$Ivfyii zhk=y)6lm2BNMGc&$MHoO)-3s3-ZATVnyc)1T7cv|C-{Q!Uk1|eYe1c2k&jJPZQDEx zNSo&Znd5~(_V_fxY~jxYQZ5%rUmb#-!hcuBe+4oI_EfV^3{mNcTIq>Llcm(GVekkoqFU2G1VaXQK!*ICsSf#-S+s%D(Rgu(mS+2 z5JQK(90cj(m9N>?7{^>2%_q_~DgE2YL%B}FIe9riz|cWnaA<_T9e&|x$F+PC#@c=? z)N8*5wwXh(hY#&S$F@OaDbMvIzYaY5$dn$rLVANTiQjR?4VHDdFAQWIc8PneQt=?yX%w%7^Y4_Mh=x@4RS-{+VBG92we+-f8<^ z4YcwXTnprUgJ1wio0MtxvDs_H*y$r%k9yM2dZ{aOAN0`)iq18L&cuzeYeD-#BmN>E z*;dFR4E2KGUeV=xZ1B-lb#^|9f~NpkH|p;5(XBV?mheFQd|IUjjFb7bNiFCn(?>TA zeyF2$HD-u^_FE*5jUW}|n77)0e`tj*)_`l-;<6 z_X25){k+A`R=sWOJs`wY8<4hsC1WCe_6SCi3&*P^C(3rl@S&f;aJFC}klzEo6$nr@K>EE?Fd%WH0+}0oWWXo4 zF6oVKsW)}fo8s4_Ue@(~!OcL%u|?LGy;0y}BP6jF7_n~g(Ww_%u1lAXY}&Vmul=KO zWLYP!P2LaU=N!1#uK77Y`kw$~ttJE61KB|4Jr~HnTmos%e+*sS-}UQMuD@aaPzcVWyt8i3S$2*^F^F~O&V|5L%P zwYJ)d1Z?3RiZoB&@G6gOMm>ma^fCA{5hd7UV3A6;9XFV6LRc$=Gf;* zJ;!>IcEOjvHum70y!|f!-ym2l{1t+$fc$xnTETkZ zuNT}P*d(|WcpBt?D)@8Z|59)OsC&QehwfWuIV|@ZSMat_MiH z_kck%lh-A|xTn zr-t{X8pGV^@?7h?jy1aV$pbIDKJ*IX)4Uvq7Lwr%P-xJNW0Uh3)h z6SMwLu0A2K9mIJrzvTb#+W7OI-Rqn;?Nk5ib@Au_xH10x6%W|+Uh&iZibw7Fg}_@t zIuCao^MCC0W4@=+&XKM5JkMXpc`Q4xKk2mN_Vad2{P_#EJLk=HrtfCgyxV^DGfsVX z9^-d8=iT<7{-tx?ZGZAh@#oup=D+nyeEnU2ia$U4fOFow{#c(E{}F%wjSu3_U*w~| z+GoDw+8;WxBhdNIOpB{_x6>}dAI%(S2^e1{!`|}pAY6a=iS%GmGk4z-?7L!@AkhjWY6pU zXqT%#o1;#BcYc3g6@UKRJDv0H^?kd>Iq$ar^ZVk@SH9?+cdyU7m!0#b|I6M>4CH}$ z9Tv^B{w=7=l4s0@zZ`q-iGJ6XY3+5+@%MAn7AxzSaZ{^(|Kf9X6t-G1&ZkX~zOQLt zotUHVqaOFU)*Rax|F;8W%zI${4BMBN&2F(-;L>A^&4`hxsEPOSYaHLO3U7Je#aa zpG#IPyOLEw`6(*+KciJENbMi3LLk*MN_G5Ul_@@79k%MAa~JI0 zfw@^2mq0g!IIo5MBG|nFSO`0}AO`phwcvaXZ2x4W3jP=5ufcg9`1c`>??NUF`_Sq7 zK72e1-h+_e3cLw2kPDW==33a?HcH)q+I|=GQ_!oRKY>00rS48v7lY=4qM&;~kAm7j zZ-Rag`WNWrpC_xYf#!l1gCd{?&_kddpnahCLH_}r-IlDTgJy!3g4Tlm8}wt)v!Feo zKY;!Y`V2JY`DAqtC<}BQXgO#tXcOou(9c2dg8mIU=NHN9QqXmvTS03O8;o>nT-#|H2rK+>k+3FlMPJLO8S6@+S z>Rk0zb)HIB=c@_o0+pdIR9{mUsfp_AYLdEGWva<)ikhmXsY}#!b*aiym#NFu6)IbO zLtUw^Qb9FC%~Z2gj+(9JsJSXv%~MyaYgC?^uNJ6T@>}La%A&c&g@^DoZ#q-Nn zg>Nsej1EiZgsYa_GN-a))i8^Kx6CSzEStS1OhcCDEwduw;>yLP6*ZBPMd4-PawIh; zQoOdJ~WmK8a7xHc!;CS3(qT` zTT@mNb7FCIrRUuB#jC^fywuPOF$~I#w?#}kP0p;Sh-lB~-Eu@9F2M=P5Q&5<^VdXW zfsxKIdr8?+bU2!DaW$?9tv|cGcxeRM#ZkK_pyKEejORouiigT$4Q5nU7TX2qbj502 z*0MW>?B=d2VIOKY^U85WI2_L_AF`QOTva`r%`&fid4<++tl`X><;%mB(hczGF)7`E z$xyg*Ib97U6sioDl(9xRWmVBg@fuz-+RdUcE~ZK|)Wx{4q)IhICa^NP(cwYot1k<8 zc;55F5xVDR)l^pE@|%ZHYIR_488bxpTwb_*MRn{r z(dx2gRSr|UhOwDd)C{kObzM7)A}sD5LvG~iH(N*V2n#FAR+N>q5#7>`9#|5tv`aly z+<7IaL)r2*vm#|Uv6SbPmsOV)M|5xHRaC63iCQyy({g&1sc1!IwQXgns}_YVX2q&# z87>opUFB|?#o_9qiwx%;7m?)!Q|{{rtl{fL4~DN7aCGD2)aWXVoM{XdZ*gf&bxFnT z_TG!T1-9jw@mRBSDvPDRX)!z>{am~vjPDC|@P2L|1vnpkB1vT%ywyDaQIe|r<*;1l zzGM|_PErFe4fDFd+XdZfL+%6cvLKgj@DksE4tRZr?$^NE0o@eCZyR{s;O#NwX8sz_ zE8uw@y{{*$PEb2&C+IQI2GHH0TR|bvm7s~B!-#7T$fF16JdV7atWJC-S&ai_g0eyR zpa^I^XeVeds2lVFXw0vY)p*b}P!8y3P&Mc~pdFw$Km(w}J;^Eqlnu%UML_kSO`xYi z9iaW74?&5q;&~C20m=f+0o@3?6;ua$5Yz%{2fYdU0HpRNt7OpGpb4NUpd3&>=vGiK z@@fP&gLZ-Tg1SNdppma32hcQ7F6d@ZHE1p9LC`kPi=b{$A7~6}l?J-{H;5T_cY~Th z)u6SY63`M*E@(Pv0%$BK5%ek6_8_Pmv z23-l72nwOkmV;_R>p+`8Euc2gK2SI4An0R|g8Ye~aUdRt(6?`cUI9(R`~dKCPypxY zl*cg^V;(P}maU+zpznb00F{6ifvyDcm=4*iK}Dbz&}L8rs2ap02leBzR4_s1OwE}* z*?z{gpIB7M)RM{egYZZt69seU%_&}nN82^3q;^G_^^~ka35&wTC3CP3;{Pv?#4T+B z_KcEHSv0&jT)8@2DK|kp#-xnK)-*KBXU|C3-o%rrC$}y0d@)Us+ZiwhV6{ zeSL8m9uF!PupT=j~?MUm^(hocro!{u6gx6I96jm;nL#vytbdOASnqw~X+ ztIEpp{E}aahs+Z7O*Jcmdy*ZNTB&9gmoE!P=2gtD#m|a$SjGWf%do=}zLGs;UAN6X6X=Yl6j<%RK3>k?7wzR}l} zuPTl%DGT4eaJjYSUm1~86OACOYP}|t60WTYSFYhh8AHPIpg_0Pgv*z$QKLuXgd^eV zV+_A!^vHZH5Bdjn=@^A`!`Ii3v1~;fu2kQ#yTV@hD4v%2E~ZW~*2JE|lBiZ)9jEjx zyhkp@qY4;_&a!MT#9lMIHoOc>o~p-2u&UA-YJ*6V#nmNpLsEy0dMsWB_vQAMZY`MV;jS*#;yc|? z66&AUe$RJe_`vF4Gkej3*?Ci^*mv(7TAh2{JlVzg)~von-VEFdR_nt5ZX~Q@Wx^}4 zQI(g-aQSs{*&t9aX!{>F@2S9W1iNy74Zq7WJxQ8F3;f5=(J-BbxaNptEXk}Rx z3z}bXEDyGq(zl+m3U`p1IXL&aY?qb5SXl|Qe@j{1Fe}T#RrAVcEQ^45-UxdK;iC$E z&%_=Le}bpdY>xh+u*4O$K!o+Quun9%aH zxT2NP6+We15wY*)Lo8Jcp7kuFR$0>ar#$$ef5h!n z)(=QIv(z%-m>YG4t%LXFFm~V7s?HwEOY_3e>;-dmVboirhIYLC3cU@gSM95jpDyrq z8r3WvF$ZmHEv5Rvy2i>&y^A_Nba8YmO?0X?N)uwHds>JMCWOkRuTYwFj>CRA<+W#yzEI$HT&j=RIp3j{2 z**UGkBRQUy$|3){i*voYfbz4;hiYrLB;$M3x|e!Q_1bTM!=YR6tpEQPX9W^>Bn47I zAy6}@VRuqsE9n1Y?@9n{s^0jWH)Ccn!?Op__tFIMT=fiiuUR=Ec@d3E5fTz88u?+ggC%L%H ztRYz2?VGEqYpSO)4$&kuY}-(ikY>n(imtE0%+HdMV=>c{_|%O4dFj}iveehK%QZLD z#I$Rt>D;DO>%=aa&MjasB(;cd$f$Dp;y%A{&wWz)%lHnz=vU=UXE7ol;&aFJ8k}bq zpV5_8O6c6R=%^s_S>FYy$89NnOFvR@xkx_&>0SB3crKP9UcEG8sAyLe@;TPi6AF}% z&Kh{)^pi@c8&4>~pG_bPn<7kQQoLBUcqMw$u#|qn9{YOV>Agr>is!o5N~ra3lu&as z;9a=MyYY_w_W|lS7th6LM|sKTN|Yd(ZeE?GNa&I%CcUj|Lj0ZOpA0;A!Atp+hHs0h z2Pl)*Eu6~1c?(Xgf_QFCy!TT1@ZB57KDgd540)l3@Zh~;Eb#6Eb{#eQ_zeo_N96NY zI$HA8yhHOe?6K3|Q8!tXUbuedVfq*${c@z=Irrq;D%{U=PtASKHT@Cq@;N#c!`%B& zuR|Ix`B1+@I_LCzzW?F)-*}ICgvgmwk|IW^T{=cc6e@ULt;|MSIW#JVF zCkpW!5x(lj;+G*jx;P6TK{&Sr3l~tl5Z;BbSqRTT__7TDt z5Uwkv$wxR#;9((!g*2lP4iM6uMR>jtUQF>N89z4=J}czig79S_%~gbV33MhSTp*-5 ziSQgDeg?uCAv})K3u#Uvd{&5Ghww&$=4ynS3h|c_?kDHT!P0X-sMO`7SUBOBN_{y} zh(DrIZxq6le^RNlgfzzws?>Xh_+5uUQwSGqRH^3(G%u`Isap$S4bo2#(x}1bbb$xW zw<>jj5TA8GrCun8kE_&CLRtEgD)kg0oV6Bw3N-UisMOts_}+WLn~-Wh^;HRa+=o?Qt0F3yC%0c=FqveT)kdCEvTT@ zDOedX=B4Q4yCOGsN|JN4vD=lSk7t?0tafWKqAslw~&f&NC>{*u5PsVWri+!`%uTbKKq`s$ zvMRQbP@3x&lHoCh;Bx2*lCn`h*8XU>BGFA|i;8v)Wlxu{70HRH2JG5NESCZ3R_+Q3 zNa;KF4bnu?=OTT=3@h}k7}quQNVYqJ5UreAvh{5e;&|0&S0+8@PpG(gj`jHT%nbSb z?97M!Gpw2CW|}h7#HW(FcID4~(8dp~kdycei6m)~k~`yow}}p7+NldW{+riABL0{| zEN$pR+?^eIC(Ox7%dw}SPePq&3nDWo6?>+Q#VFY5NNG5i zXJ3Z&c^tMNMJiGn?#sP3-_2{a=>ipQF|(6JdI$(cmHuhiBj}oCh6>BpcNHUIva+z! zkH#n1^tReTkBUhW3}!PD+&WJ!ZCp$Y-Y3vY0TL=GtzYw6QuYL?ysu2!x6uQIA8T$0 zIc0j!PCd97xb2ify!^O_af05%NQT{k9@8|^lEb2-LM+i?DdC|}MuSdgFhv={ zBBRYIDIp<-(9p1yW_l7V+o&pxG97BwN-ETPj=0K|W7dX+Tf)LDIYDvi2ufa6#{vKe^U5Gp1|Gu)VBF&e|oVbKOlv>_$b471h(@bEXqY>0A+ zb%@ar5g8F?u;@a~TCLWsjWUHBL$x7*+n|duxoq2TlOZf6%4ms*(BeIz6cEvcS|Xzi z5uxVDl#ocL@ntHgh)!r|G`g8C z%n}k}3<=@o$9cSx>rW{bU6e6QmlA5w8q7x6P`VUd3gkFa7abmg4t8(k!-G=o`dbH_ zjKqU)g*>;T}=%w3}|E@MUW*kb}&Q3nMi&nP1&MWLcA!f8f zM3^ZoDmp4WCB>)>HHMqCDIo@}5wGy@GV9#FQi*djJF}~=P3RoyiM;46=IE%%l!z!} zv?&6tglY|8PML`Z}Yf3zW?7=v_Cy2z-=2vfMlL>gKS=eyqCVa90K zV-{VAG0Geo866s7iZGch=8)*<=#+5ieiwY)v-XaNHX6f1Ox- zELx1QuK01&U&MBc3J=j~qcJ{1rKA{*MryefsLv>~IWi(#=VWup%VStbWK>9aM3f~I zV?InK7yz(oVMPHlgU%e`0(?z=%p}$JU zFHvSaK;KT5#C#s~BD;JNYZQxkZfpZL_O~wDWYmVFgoH&#nNy4*kttzeIx~W%FjESo zhkAxxnIf+qXn6U2x3(DU^2x3fbj6a45y$e(^cn%ZWG^mhB&E`kcwr_Znv)Ln@Y-!$*su}9RVeZv4W-}5dg=PoY?F=&&FvFW>9yiALQiGgHcNsBi>eV&I%g|wNppDi+@zX4W;J3>wwv)ZQdSLa);eUsAp*AJVVAL5xqM@3? zj7F#`ttBEV)MyS#(Q1us?a@R2Z@qdW%fI{@vnU51%qktQW&O>=X}Miqu}lv%w`@KS zR>1A@iE_aASBc*73~vucYdO3T#}K-ks#u#4+M8IIUElqZyi zR|cI+a_sx|b3vJQkhKlPe(3?4cDz2_KC#P?43ltT!*=XMEJTU}(z4g+_3qO-o@a5L zPb|ef2JU%uMZ+fl`h=M7qLfSPgH35Ve%RiSfp;;pUD08Ow%E(OxtSTU{1ja-Yasz? z84kI5dCM@Q$)**E%06?%)Gn=%Lt1V(IS!r18NBG4MF&F*x3}zML$oC9&x5&`<=FL6 z`@KNt{)lpu@%=%4JaP$^9F`K3@%BIe%}@6;DX}T-c%>6W?7JQbX?b{EUXMW*=W6-k zRf>xzX++(|+bIbVF=PVR?^?m8eb%nRg0iQSAv(RyB)A6$nJwhs-M4wkx zHsI{rS-OvNC-RQ6Ty;EGLT$g?caPdL`RSrFhCJdV*U7%PKN`VVK8if50Ea?hAaeHz z?|)T$J1fdNEM9DOxjw>d9Ghr3q`C9{Ds!x~wO)r67hA)*mdhf`g9oMYV&W(#cV17a zBuXmefahJ(=iO~;$(0_GPVVnnzaV8?R0Sz9x?S+aWb#ggo*9gy+*6C&w?mQT%5Kzg zrgyi-o7+(9wyrC!V^?MkIlMIEgo9)sv%9^(+#z0f-gq`^pWv3(jcmW$w_xS$7Z0pg zo{782$1Pi0DA2wgZol5Q?5MKk6}g{CjWeF21OL4KWBprJRlBq#9q8P-zLs+8T3_F` zoZVV8I?1#I8=I|m*XvEDW1-1ptGInRMQ(RHs?_jzNYCZe(B5)zEJv!(T#}HLF?)V* zzn>8h?ngv>p5077<@(Q^%e_lj?2)xe2G7RB_$U8iWLn|bJpvVv`f=Bf_;Fb~y}15A z`f+36DZEFx<_-1d@1Gd%&-GXPa~0s9Iq%0cfZv8R{~PDW)ra5zi61utp7N3}*36&l z{y%^2Rit?a{=`{7?yt%IT(j~1T;-SixiO#laryXGIQf_t{J8_K`f*po{JFWa{J5dB z{kY$={JBAY_;E|$@aJZ{>CgQ(!=H!0`Et&)}ECe+s`0{uB76@Jrwe;K#y`fnNdtGyE^`zrvq_ z{|){${2BPO@M7A_2>bbRoG*MacprFgc=34&ge$<8hc5?T7Jd%$%!V(6u$ZnA!e;o{ z@Sngx4qpqtCVX3@C0_^OOk5*`Yg1gM>00By75vk}^Uk>Tf*%e4BK!;Rqu}%5N5YSQ z9}YhZ{(1PJ@I&DH!uNq63qKWp3j7=Jufx9vFXo+$@FaN3I}!d>_zCdi;b*`vgg*gq zf}aIn0RJg`G}@&pd=z{W_(1r8GPuGQhc5x|3-1T-178f@8(syEpOfRf;8)=bCM)4f zBTV1vGs2gHkAQCl-xi+Y$vUX8 z;aY$zpy0OP8iea{Tyc>&FaA4?SDoU0`FQlbd=*mH#g*vmaYdKmy5kCQgT{7`h{wbOG;=~9&v~yk@#j9P!Yh1)@UBv5M#3#6j@9iQ! z%SC*?i}=Yd;^!cK*P$}p>9Mv-@6xF`{A^{Ri;7Tlrb>mk+?@7mt}Y3=;I?!v!_|!y z@9_H|)5>rQYuoOpufaVDjo`Gq%WzQTg--u%8BY2oyE(X@EGd7Tp)9^9T$mhvxEp?f zF^NlrhE7DNJ$|XQ9e$gU!sP10Q*j!2FZ>E5?2ARWHyd|(yZMg<(kxFs`J|h~c!UIn=}{a@jG_x83j>H`PYby!YI=|=5)QEV?*-RefL$#ia{@jsyh8Nr-gql zuf=M0uwT358*4<*nsMaYgP;EuH*{it{<}U04)yupmz7(-wEaSzI%f`AKf7|Mf61Mf znyO!WGvHt`^=nN7xSFqqaO1)@ahlyh-ubOfN(7Hb%C?4@aw|RtR>y}_>v5n(-SV&Z z?A)^L6K`k(ykq_SYxE9UJ>uw-zU$g&2m4Jt(IaHbyzlCEnAv#D^5qddR%DfF(4fJ% z%_qjSoQMBce|e{F)15D-z8y7WX|eaVHoE@V_sd_c*X7CHha*O-gCZ9Dw`k$r{EthQ zI(6za>brTZ3_GTWOm8|w*S2lj-6JF3YFAV3uTlHAzESDwqzg@VzR`2^wjKw@oLTu> z%=LqPX8*YBUEj0EzO4R!$Js4SrpH0$wW(9bB-9TFAfgw+O=!lMvXSF9&$eY;!|J;bz>x9?l^3R=%TDj`^ z5M)p6)@|O(p~atQH=R4aZReD=UvpPW1H`CO?e=W^ZO{7`e;RLHcjfoP-yJ(PY5n^3 zxpnlXpYHj$>64(PpMLs@@#_*zZ(gn5saLO3hnJV}_u2jKyG?%gUYB>&x@_jUO|R}W zo!C_6@|7!d3kuZB)8j5RnsmN+joxoRVf-X0J16IpjHAyke(tY6{uh7mvm`X#`sc(G z9QW<)=9Bh)*zNJ)Ql>rceHrIJ>d28E-QWEBtJz*?5z8}MzWHX1TJ=uEKUIIs3i`0y zl1+bK`qgXL^)+)I|Gjbk-W~-D78L7$;Nuo?8w}+uRobw${=o&`m985UF!$3>%YB;i zO?>YJ}#EO+7WU;C&_y%c@5_{0;M;8G_p?cCY>r;Tl{{&T+i zi|W{SCTiz-YxW&UJA5T#Z0YI~|M&crxhqyo_ny6W!+_xO6)L>Dc5Sr{FO}ZBJU!D} zziElL_rJHm*`-)~|-2HopA*=jXknCcfBPTX)s`!!=D! z^8Y$!<-Y#9cGRGA!G6t;hSl)-c4m{8e)_5GYU@qErQ5$q*DdmHee}Tav!7VMYI1({ zi;EZ6KUlkyZ|hoR2cLTPr3<^CwoV)Hyr1p~uKxBH3_;VI4fp-&VpQ7UH+z<~sP}}u zHhcD@d9B|0ab?D)cExoyx1}B4^!4~M6CN8>XXUC@(N|Nq99;hDxpNs5(XiJ9^Nzo! zpZ8w3JRRS>F&tW!>hGgEbY$(j)qC|b48d*Re*LzMQ(qX)ojv%e-}p++$7My$xcGTm z>t;JI0lQE7erG&;`16hfqd(tqz^fqd%$ci4&+penMs^!mZ~j}WS2tb!>}MsO`+RM~ zRa2h(X?qL(<^cu$yEUlx{Mit5pFWo&s<-)ZNVRL%uV38#bR)xWyZa?KYju1TS5UuX zt4YBZUe|7coz`0(N1uetuecC(uu9W=;qSOxA)%a3Q4e7Wi5)(Sxp zY17YUkK4WW?_VC9(RkkruRY%C+LJ!R%5fiTh&sQ*6ufll(iO*BwJj5?d9C&F50`v< z{d896W3a8;y``%FvXuv1AETR;`u3KsTff@+Mji7sUEj4|lq~4C@9|UT&;NS7jsdkw75gGRstZZ%ip@8^#Glx~GZt>ZmO-M|f zVA}k)W!fKA+qUcdC3K3UVRxh3F0UYVDBY(#|5_Rjrdp8KLy?@be)%+2j# zJbDUeLJSe$8T@d+sUZ3$RW0 zaDL>-O_6^kv@GGHy87LubDLJ3U;EUmDPgr$>n=6T9XQZt`|Oje0_GlGv}{@Vo&WnQ@}OmYz3;p@eQN46EvsIx zF*@H6^qW+ML&O@T_S!GoNT(HF)61WmrhAZuRuOFEKi^E=9@KxOFi}7wGXyj zYKla2)~u=eUg}RsGcNwnfS)!NANKdp)9OC?WNcLM*!06||LJwHY3W#h8ZL5v{dVfw zkk&)F>F>S#`45N2&X^IrAgPt#c5T4-%L5NDFGxGswtn*3fWM9oI#%J!I&Za8w_9iWHXnXLPkJ6_{X3jd>dGB;p z`SRtj{V`j_6#{_+0xS|H`uS$#Ne2L1DEg6Wjw15icd~%v^?$LgkOGnV#n;}&Hw2?N}vCt zH9{TRBV-p^ViMxh4lb=ceE6ERjbEjoVg_Lk<)@Z^HtUJZM$9F5VbXUOn`o+Cyy>({@(Wm=6$4(fa0 z?~DHY`pC%R4Yb1t|FQMU-kT>@<<>T7wV-;h)1lvgV)C0c?2kt1pqEbIa{ z^8Amy<|oB{x^!ts_Q}?jYX>~r@4|t-tMgk`d#3iP;FY63dMgy?um=ro?23O&APKI8&0g=yy0iQA3QdyUFf(@^IC4bb|$m$ zaqgwEVUdwr8;;5NYC`3yr%s(pxDuOl@uwEwFJEoiuppNMd5GtbA*ZWdOFbMBkv6#H zZ=pwj+f;x1`mupK>mDt3^5>u5U9+a=v-&p0xt*7G9Xhn=tZ$VXK52*7Lu{sg^xE2F zZO}#p4Ts-c+TZJ|-fAeP-4#^}ime+{veJ~QJ>E+-e*H@F)`l;R-SSF>FJHg8_voKK zFUG(Yi&?^D^{fPg42t!&iw8z7S-ZAb)62U$FLa3d5f7{lr zF;71|zE_w0y)RZ>lyUIvZ@+!DApjQH@Wz=;^%qH`(^9XixJExY}!U)v1NZ`U@t ze1PwOD`zWh^UXgI1wA{tr*EJalveldntwi6bq3w7&(0Aw(i_+Ry=*1_g+uZx#P&Y> zeaO=7b818kJR4-Gq_Rvb7T)UJ_*nl5l|z#TRu0>^X+q@>)3_}gd29Umle2z(_oI)x z(t|^XP9E*w?X6{8R&e;|DW%dn_j?0{eX@UlgvDF`OZUlTF%TKnkG{C=+pQ2<<0lO* ze@)tR{ELsrcVGPUwXIDKJU)8e=;9|9q(@I%UT)WbV2d{y8W(=__0{_VotH{~`24xi zYSqLOr#>sUOB;}wm{@mBlQT014Xn3n_!QrrVeMC6`nKVMK{JyQ6I&n7eImWi@l)T; zn>u{=x69Mhj@|5d(6UQ?aP2>{w`H7JUccnLR+ILhX}50FHxZ_(foM!gTOS`MuD?ue8tBfTrq`o93VM4r<=(XcI_d&9X1| z{_EV)re$}$^!nCX1JD2PYU^5a&mON7+xy1Vi=F#VuEPCwBxlm@jz`{l@8$6R`|FNe zS$}x9y5-lu9o~ORuPxyL-t_oL74tt|WBgjQsPk{!g{Gx{%&PWggXf-DReoig?Qb@S zi<I521aK#oi3)$8NSVO-F{@Fq?C`X9LY z^34485$T6czVlUPkngtb+r9MtKI+_R)`_U@E0;a{+nBefB>FeKem41&VSi_H32VRJ z8*@6e``TgAvxZ+;vNq_(x^=2cyBF-+-SNrSNBs8D#~-(BT5Vd-O>_KfXhyI5Zr*0? zu&Y^n4;=93B1^WJeC_Q62M(C7UidL;=;iL$E?sV>8#5`Dgv5rYk;vXT+i|L2|xZ7c4)wEOdOAOA4& zqT>+p!PzHfKNixy-1v$O)?06$Z*HDevpK1lQQm$RE^PR+)0GxAUc@k&`u3^cev1jK z@^#NaN5_27<^8#f7ngsdPDc!2bsIEj5fz-`-{YlUhftd5pKpRW1(K*=UUp*R%jK^A zvAt2J#Kh5AQ2~dSPhI<^bvTp@tYX8tBVX)3@a23zecRO3%CN$Q{qt3?4*svrDlz|D zcC9xm_UQJ_i4VFOg1kn@dRI~%$lLSL$R~y;*D70l+2^gy(^UH1&wG9R%aCgO7eDjj z=f_4gF;(2#`K4Js+W-07tUrcS9zN*nu=b04e9`&z8tZlp_=9J?^zFAD$fSK`{CLZ> zxZJ}q9)7yn((TCx80Nw2?NwzhBcIjyn$ zK7JG$VZqrDL;UB9mMkevH+zpZtohgQy8iZ-?Z3GM(;S9ZmCl&ig@^CluypSi*St$WHU+cltg7zgL1RbFooftkvcLYS zDd!Uwd2_z|Rm;<#FZW6JX=gi+8yjDL|Csc{KP2`$H+yamG7$dwBfI`Hf8_kOYW}#4 zsi|*wUwZOaOc%TTas8RC_4NIk4|cKz>s=2XmtB>+@cWt9dkucK<-mIJpPw94so#_l zfwNw(y6)#+cKltu=4<0#zf@=L8OVdhVu>1jq1?d*M<(y~I=-?Y%G6cxU++H(W=8zHP6vNh z_pDLn)wy4MQ9RcFSip#Nt-QE^9ZOnH41Rg|^=A6a%touY*T02DcIArk*xJ%s7y-v- z_W$ie?1;q9S-P}rqc3mhP|3=wTHmaD>cq8+5Zif6m+l_)V)Y9KH2mV4Eo>DDd+u~Pp*N=txo@18-OW~_r<|8 z-Wk)kH8k#x8^ePCcL+B4@Gp)JYOuD4&+0dOYyE5ZH2ddrRJFm!y=FbtI_?Qj8s%4Q z-TSkvy`-*b@@+mjrs}$VKRllqne=gwmw)=n*rE8TFUtn_es}QT%aK0}_AcFQMR!c# zT5R&g^cd5>71o=xf764Ss59$@!KKC<7$lA5N(!MY7sy?Fo>;Vm|`*hfE<{3_gI-*e0;@! z0%p#fx%TL?n9nQroStuonwFIB%8&Y6e(I{lL_`5!L$VN;ct;|qrV*$?L+?ctbN=jP?TyJ%5aU|t2&rYS>m&X=w+uSx#)1XlCq zymiHE@=rsm1#cdO6{+FZ!g>w6SpEC8!<$gQ>)ze}K;GXU$Iiwo*I0w5;`ka(nmqPY z(&BX|CRxk;{PWKR=}m^O2ngXm-a24LZj-@R&OWnu|Jw0~4m}&(cyIpd)jeRuc?bCi zj(wrWSi^k3oI!(vj~-n!{eRC_T=e0GoqDeEDfdJ>F6-w$ZI2nbVUzYwZT{!+&3$GM z9~<{ll>*qkGnx&r^6IOvZrQoBRZ>#L*mu>?)yG$63_U%0=r@(MyC&+i8EL&6U-|vO zQ{gMdsKMf`7O|?SpUzX|4iCtGXG-H4m;Y$r0zgLPoi2aq(4nj!*SA=RX#2wzT#03M-UiQ5{!Fz)2lk$-T#JN$Cx>lw5h-=;-}_>W_Izd&Jr zKP#UC*aP$8ceN0f?7z_?a@c^FqxeS}gKKDi#Xq_jJal`I3d0Hl3IYlO3IYlO3IYlO z3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO z3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO3IYlO z3Ig{Bfq(w_$9m(&4eRym*R9vCUE}@VfB$WLki5tj@kqQ9&x$KL0)!i3DRsa8`m1&O zwr$qspM7SXH*cPG?%cW7S0_xcPMSFJf$+o&@kG24kHjnSEOk^TMJA+(*upn&-sJlX z#Sm`qyz`E=SFc{yx=%b|E#~86RhKSptyrOg^|2~dtktVk<9)5iAGbb8UgV2-BwmSU z;+^V1b)hinoX!hzf$fBaz`J9ez~@ftO(rAw8v*3f8pPncG#TJ@p!R0pv> zR5z+4)s^Z@PQ-w}c|`t*dT{^#{nkzi3D%M&N?2x*6sOLtF8f7gN5b#L1yQ4gl z91tdi4LK33|B5ak+ZR8wVtuk+J*C~<*fS&tgb`uoI0t%|Wr5~Hr02*Ea+H1L-rl|? zj0h{j?7!d^eeeNaAElk`+xb>_kPIwbxbUGCftfRASSyq-Z^iHTDgEA!-j|aF!i=yZ z3?DW}_RD9>mMLvt#5Q-715pMD%ZJ4#B)jFvkt5c!YPHhu@38$z9!LfVOTzR)w+Y4h zYo&@6ABnXb$NqY+?rF`4FeN8q{Gg5rZCbasK3=n?GTz^XzAu$0!j!OmP#x)}B}i6Hmk&@kqShYdi?^`|W59I)L*FRCiG}@8(rgy*fYdr86@F z2M)9@{_sQVjvYI!-yb+&#qa7pP@Z@q-iSxym3Sswjp}eWF%fAI=7jzIv;$}@V%YP~ z-xIr!aMLzwRJadDWr=5Nsm^p>=0Wnr6M5oMT%(~qJgURJkO9&$guPhS{n7;u>es)k z^%He`ette*r3Ynxm-~X=awPB^xw&9(G z343Y-YKwo{(Hi7b$n@Q;kNN?c*WN2Usg8Hj=F+@`J+;C8S`W_5$hd3mPjwkSY}kML z95mUhRL8s3XNV59!ToZbI(52h>ptRq=D&Onp6Yft=gYJXL~U@toL;ZLYqr0?ukZb; z#=l-J)m5s;Z#PVH0BVE#<)Wja?n?WMYi0MV9{+Z^)ZSv9Z@29!AGJTV!ToYd``;e& z|CRPv^#AR(|9?gQEB0T}+W)_1|0(moqPPElW&WqE{}iq5#nk_m^&e&ZS8P$wum7d> zUvbYt+5hpZ{r_wGKVq$w{a+CY=j(rY|Cee@IzT!9!Oo%3cu4+HI{!iSy_@UVj%#7G zzC~xKl=ENCXNbl95^96{?UeJMrTH_E;u)Vu<@_hf9qBve{I_%ebkt>c^Zr3Q|4nkB zy#Mj<$-sm3{s*-^jX}!$U;j?~)7bJLzW+sXpuGQi?`7aYeE*Z$p4Nkv_rLFL`#z#ODSgZIVIF_) z2k(R#eLMHR;FRw_d#(rmYu|q+`6ZiB`TqN@Wq{u2`Y(R}on%1Vr&NCb!C4Nd-Ae@q z{%3#xf!bemG=Eio|Aol_wL6XT^!qPo&zvb-KM}F|uU^G>JeA*ndh~w(Nh;Ign4tXr zn-rBtFHB>CC=1H(KR$ZxFRd|+4K!bnI+6*RLn^=jDn;ed36o5aexS2vBpc)(q~Crf zUPQi#N8(kqaUPvkQfjIopdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?i zpdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?i zpdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdg?ipdfHN2ylv15Ks_M5Ks_M z5Ks_!P0Pmr5Q50R;gC0R;gC0R;gC z0R;gC0R;gC0R@3a6ao4!Hhm-eUVb0@-zcM~%|~@6N56gZ(MKOyM~)a_H5rZ8#4cU< z-}P;a-+;LjPrnUJw1_6rrZT83a$?#1&A{O+lW0>J^qWdlCY4Q2VHFdGqF3%i%YEsE+sJH<77KDw}v9UdV~O-76f# z-|~oyjkQ)oJKT@oPn0baybw?1L>})p2I9B>YeEKVJ^uKEQ}?RuH>Zdv>La8h?-d45 z)UM6><2q3?f_PZhEQhPi0Y=x8jR-BH34~TmVkK+D^hyh*2In|@K|0Tshio>I} z|LKSW=^c`Z+gWRIq~+@V-zdXX*-E^EfP#R6fP#R6fP#R6fP#R6fP#R6fP#R6fP%oo zi-7c70804LLx8>$p@r`aFMcN?zcy|h93*`IL+&5mPO5OOAfOx2mt ztUY`7wCbBTw>E0j$Xd5fo!j!1muL_zqDi#LNz3CS?!uq5csG{LDiN>r9uRqY7bN(x z$L`1z4UrzvrZT9kyWzw$73D$Rm+tNv(WWw}EGmS4 z+wzpx-TPyN3-Lg_5Kp2^yQ_m(&+gs2xqLTLl+R($KW|;Tb}g^>NcR=hQ(mGW_Afb{ zNH-BLIIp{rmUJwkx$K$>gk=Gx^-aFSY5Nco9>gNwld9X&pp4C7wKWYu2o>Rw!TI={+WT zuZhN(J$v?eO3LGOM3ZPczB@(t#0&A{se9P@f0*S*>?03r{}ubw!>T_Y_VJ7QIJLpU zYClMI)Wd4OQ5{5E<6*X+#X3BU^B1WcQTSn;KZp2q*|B2q*|B2q*|B2;3_K9F7AixBoH%bWTeHuZJ%@r=`Y? zgG2l0-zypLkgig`hd|w588c>BDW3<*&VGmM?zG?RLtP%ac7|fGZZ9$|rv1XxwQWwVjN! zEC1rfi`J)}eDa=@PyC-aal(-WyYk)PPO{*scU6b{kt5xfPwnK0Gtu%;mJ4YUj;&g? za-v0X4$iLra`Nt?-5kg`-@1|`hm;Rg`DT;J3A29_|NAX}_q+d*Y`Bse$9_@NdlzzS zCx4=Bx@(7`mP_f2qJKpm?&tU;@<7-7HU3I@xQAic_P>YaIg(b&cSPjhy;t!6ck#9> z&0#s6JA^p*Vmh_*pREgtMTz)>gtLyK@d2@QbaEIR}_TjX66^&9Z z#2aYEIE_ZQ12tdJAUD}N41bfjE?hGHw%|G=)Q0QGb-;Za{B4OaxivoLZ&GeQp?vY$ z9MAmWec)B_Qg;CnUZ9uDWpk-q2GEYYeET;o7;7GI5cOl5^m*xqABKg~g|Ow@>62vSADYvFYWF%+WtXT7+`Bzfa`>L$K6S*VMRhBRLTpp^#< z)9~B`o)W=t8!jGvgm9s#V>EmOk1&Vwii3UvC}x7&JfzRH!?+!27=Z+#+ZmL|vHDQ^ z9Y%4+$QN9 zSBvi@iFiu#oP*M+Y+E}P_bKq9zElFQkd}idUf>eQAIBebl?3t^5JrDXC1lTp?8jEBrVv0EyxZX?&wlxU(fUFB{?rwZL^V49Ut& z&7iKrr;D}pNhL|8blnW8xvdhq^5KMROO6G}h~E|&W4x0Y%nbfnk|o=inPcIf zwam*f@eh!e^2Mj-psZXz+&bM%S^03BA>EQ~V0sB<@p-%C8Pij9TV~@Cf1l9TkYnjG zB*P@o>SD>rAtuV>J}EUjH_wm;@>ywyA?$tLxXkpd%$!t|r^(LC(4=K%W@+kXTQba+ zY)x+8Y>UBMPh%MfL~=lWxBPQn)`bX?wZv?LsXx`FORgaoLmTzM*tAR|3MLYK z*{t5J5Nk-&v`IJgv1nojd6KdS9MZBiHA=lKGm_YR* zu&7*ZY7442(Y#ekChyeeGzsXdnz+7(4DiS^M$f350Z<#nacP;R{)`t}B%c*cpP7-9 zo1MpZbS4(m{5&rXX<3)mw9LyP7}1(j)K$(2Y0$%2hW7fYXX^j8f-TgcAm z=Q&9uOf+%m9fPt{sbyH-l{}-KLml6U7PR4-K{)27rqji2f&Sn*>y&57v&8g8YS1A* z2v&36NM;Ik7vGRfXBEbQFp}{7D2agAbg^U)Of^|F zof6^@Pi4nsWu>K>cpa-T+4NdUrYR2^nblL8CN480!(z&{5Md3x^cj>STCDIfZ&@Tl z(Npy^Gt!1M)O6{anU`kPWMt-Qax4}Nv{zPkrkOQxLtft!rqDI!R6)B_9owNdWSE9% z5_u#UPlOo*$&i&LV2q?Zjn;;2^B_Yu(Z?vj_!RWGMo{FM1T+)`qEIg5(o#tP+Nb8^ zi2a>^NHWX%NK9fkji~u)L}IuSAC6CmXW*j2GeIkb@G^_CX^bKXwIEw=Cc7~Cs2#%N zO?inXX?Zz(x1_=bWoGxM>@)zw5sy?J2_gT88Zym-Mrz3VimhGK zS^XGtb^D~HLa;4nj1Hu?fv<%pl9Ox5Ms7x|t|28CV?$Q9#gd*y%=2Rjl^fT&P5V=0 zIm|S?@Q>qeycF5>z@Aih%!Q8;igX1Q^Q@B1d!5rbv z4#Xe0`h$7VU|2+TL?Vq^TF&*Y01?3~R1)lULl}q=h;LAwv15kEZ z;a-EQ)Xr=K>&*gdHxDxfa#Rod=P`o4I)t~`$ZpU$rD*}%j;v`I5^#x$vF+C7aoiIW zZqYs=7v&SLy|zeN`8z|D<`ZQ$zfdzdLC3{28@2PSnVzc9Ngc zSlytNn@r5e^LXt}t25nDf*E&xQP1K`13v9Uk7V14o?4b(Ym_0bL#YBwfTE}qrG2)( zp!bTQ|B0@tOk5)3c)i9eG)fu7rOBk5AQQJ(h?ADPLniLHOdOVscqi4_wPfO2BaU>o z*rzEI&Cwitsu*v-nnV4M=`L4&it=gTUH24M&qe7M>_$6@W_esmDV0fffjij~)3}!? zHlLA8Bb5@OMRtP^WC80tyq|!D4{Gw9r5if#`CsDU9V2`~DpicTBdnvkD zVi~#^tz1dDDp1hHcTIcx-*xRt`j}}?sSZnobwy69JIyk2!w~1FJEzE`TP72?SBR6A zds!yVzZBy|sweBp#I-}*e^pP)={MV`S~MNF8VyE6BKa@?Mmlik0@IY%WBScrzV52V z`^jLPpaWmQGj}@BW1G-6pXdyWhxR+jGA&7#Tnvi0w@m9H#>o;WDVdYlTZClCgAQ%3 z+0%)Xqf-_;PBgP*`xR*zRZ}r;S$K=n1iOW7U$VzkTtJbyV-`~`te$L86RDED%G06E zJ$vrz$Z=N!Gv!R)8nYor-1wl5qK#9MCK7_1P67`n?L!4ZTmZ&5(e03lyDF2nJSO>M zTi8k$+l#G}*y5#az}6o*u>O zrtE+Ho!s|-3lL;?#4Ti(q{F^Nsw2ip?tFR6nk0l~;)V06yCAjvN`S{!I-4)Z<4@Ac zQ}dWB`L-&QR*&hpl6oIVy(q6z*=$`77{f_*c@LSm!9tu=hG)pctw0>DR}dd!8xehy zF?p<*-RTZZF~2-U?&X(cbT0%C^LXC-S70(aw#niW`!1e}i)!=2@;3D+hY2!D^6O5& zwg4G>8Et?VCm9XoXGsH~duZ-OJI~S?Gpt?GWFF5fZMf0CY#uZs+n=V@E1r_a)=WFJ z3h`s3XwR8#HLC;}<${X`X5^%CW+6^0OQR8|K{^^6*d08*jr-rHXH;j0d^GC(4F3uOc9(C_A3{OKzCU=nRvY7# z(}k6h2$|1?+|rqszP$AJ=j{Q(%J8^H+H%vpo5^Pe&OngmLvoKE>9O@>j;YhOH_a3_qbBF0Hu6_X%K>t3aVkwUtjJsomF zPAZ2BW#Tr<#GRChyCD--z6#qPDOH-4MR!`nky#{NAE&Xz)&e#RauBb9x5YTNG_$2_ zdBxUa@zQ*(MZ~d1lshTPj4xXrrk7TreDoRK?*i`>E_SW<&=vVdSG>_?+qHTlJ5?6? z*0XrzPA^5{xqaWNff%RO^TP@%jWRjtBeWV%7LlrOtXB~Of;$O*NN?DuXM7jHIG`ml z@_QjAd>v{vD(`2Q+j7*_=Nl|Z-uJ7hPoa0+@$GSs6m4=kM?@_pwf1oerbuHXtt}Za zQ%K;gbqm)Cnu6vvG)9gmN}W(Kdo&4OCp61(j+EG1g5#Mc(iyi$m-gEFfIB)NmCdgi zrh#WViaX13neV+hW5oNusV6_^F6b)_ zlDgAZB(wIKp*CWiq_{X23+c+lzL(8vEu4LNOoO!{^>ubOvOBM#CKSo~aHR1JXs9@z zhR61pIP#Icc}W;8q_Wwr1{>d`ea9>lH%y3=&L5{Bj@B%k@nZ3g{C7uMO79r|4B}|) z7kNdHUvmgTqZdb*ydJ{mh3kR8@`|@E-?;phN!3%TUwFQ&(Dr?AF;?A~?H_}J?Ip*B zjw1H$j^YO_4(1#V|&lGQc3O4uT*%91Zf-FUY`%k?Xmnj%S55I>M;#R zIiWt}%jEyIX;2^XyX`*YFWZMMLpI4t`-VU17C33YswKop)9Gd65`;KuKQ$wc`iMxc z7{bG3;-(03Vi}ZfG2-Ork?z)N=$X6}GCpjQ#b`^V1zGQ@UXZTyT)@F3(hFhm&z zAlRz4S+Y_?)Py;&$NGY}u~8H445lw=eu0;>}-?-Ax@MpN|B2=5^eW&x7h_Y z4(#hgv`C)hxn#PY&i50iZY@v=d#Q4cdZ$>GwjXQ|WTVGDl?{()>K)LEgY4#} zyw&FMSumF0W-}MseI9er5jLz@!hts%^E~E&<(G2c0}4!%q%t!H?LqS*QEyO+We#yP zFWTY|N9m3`#8JA-h?A2oinB+RjWLc$AsL_FzWyw&W1T21?Hhzibk8vKRFbcNn$NuX z()r>;HXe%nb?dpG>kIPL_@2twUC|rD*wG4=u-8E@PNBKmks-M&+WwZjj%WK@a(ZY7 zX+}7yOdS{EL>q=r(2)OIC}(t63vqI?qQNtF`lc41yQ?)G-*UWK0b%t+I`UI6=_Q#N zIyo@$TxVV9@&Q|4F*IyZR*;!$_jGP@H)SRUm9Uo?(*90kO-Z0fBc7vuPSO%sBrAx~ zVQ*8iBjPlMu^BVT3{TDD8Zv5hI?uM!mWn$XnSB_or=4m@Gij$9s_n*NdW(`QKMRhs zi)Z6$Hp9=w?r?neMgNlP7aFod;iUZ{Oo$5%WY6etqD)+tOxzS9PSn$scbO0;?Po_2 zcRPKG>^pg>VD_QAmL^^_h56;$kDarT+DCG2LUf1^ceX?rIx6}j?|0#?Eb6!OH%@;0 z`POAdUHG~7$Irc5>JOpc&c`EnbB8;#Gd-4S*P4vkn@oD7a&i^*A}5UtfSlh>yVCf0 zp_uI){f-ER*`JTS(e_=H`neCP&wRYWmun@=`Az0pp)`ev+l znZRKNbQOC?g`EPXU3=1eJav!P-Rb19d+Op|J843mb|)v!UF?&Hb*9}kcRUwkbUohB za7Wk1tuLeMac^O3$=N{Bd35qC;*LWLw2rvbWLwEq1^P2O9?ukQJc%p%bQ+)E{qfkI zXS~?*mq32GabqEAB{->0Unj(gdl&S4mrUGMnYj8ZvKa>eFD$H5nki{#g#9q9T`dUCvB z?6ogj_3_%bH)G*rg1*ndBX|0~J)Ya^N7CO;`mqepl?AI|7OXbW3LEY5I`0*iER=bv zEbj%6STgc}2CJVLf{G){yuaLx)o;z)r~0=V`{m}{)7Gq?QF6}Pw{4sdBCE^^q0%@EZ^4U{G=9)2SN4`!D;_bswI`3Y5_^3u0i zXnakReUFJwA|xQiV4n9Jd?#oSTBI18>)z9H=uIrL`LR}<>{K6`vpdzN3Xg3rxE%;? z<<6ta*T(OjmqK+B-izqwR2LU^5J_K~S-i7mWMkB=v>lb*6rRrF7hQ+le%`)9xpe-nsJcevx#)SRRA!eIMK2UR&k(*G z4gN~oRN99r0m*`6&!l*=0X^++l%D3y8W;}Z`rxT}W@AJi?y_N9wbVxs(DrQ?#3vSEw!|c!MSzjnozQ%#`jmLU_ zG(K6-5A?xIclyEOIhHt|q#aiJA|<`=M(Y~Vx8|_(MK%$&to^*L0b-nbQDEUa9Q5_g zA+Tgjg)>@Ob>nGyJj1b_o+68uz57DnHcZ2cZWq`{Dz+9xqq{wCE_NwMAEqOJ7G{*R zdPm=&AUeY88fJ|SbZW@e(GPj(d!H82Vflp>G+HgO=cBq@eqZFz0?rviZeg9w<60zu zdy*Y`Q<5RfxDZyxXwG2Ig^PW@SWsYJthC{r2)^j;Ejkm$x0T2CXCinKzX~JD6QLwp zqBhF@jB*jy8=Wc3Now&TN|%&lIcY5cdQ59d_eidyZ<3S7X=rW>C)II!nK-jdT)s@) z6q&e%LY%bRjWThkWa5I_G5(}^;}J(|B)8T9Y^_O5=ZqAyjcqa{*H_tklzjhV>rVE4 zN{qAh6RH92<;Y7vPs9&1x)YV6y- z^o1w(RvhEfkBzOgYGXf|)Ip5XxL-nct(8`T_`M~MWy{804(dl=L!xnxR!55$@jPV= zR>$bu+~QZ;L@8ypE5Z2k*iv#uP1+JA8BLGZrd-jKZ;t>*-D5k9QKz+i$5nJ%0peT5 zV>?W=GhCrriqZ2}qD6Z0+?8h3XdJVbJQpW3L~1tf9A!t%WXI#4D?i4l0?U9iaULZd zOQ(~S1SgGKEfaS{CJqCVQ(lb_C$%S{Wa1KK;s(pa%@^XNbH8;m>5j|9`Ouy-oRpXP zGI70S;__wU<_mFBUbe`jyMVY_DEC%lx&~=njYxRJ(-21nIeV1SXyC;(&Z7sLt2&Pe z%pS2xom9iHa-E;q^aYhm_JwmAx&F_}lIt%-M`K6FUi#@d;pj@+kUk_wwxFvtQm(_? zq?6~I@#k6}G5(x;u``}x8do?_9mF&?T%GZ7XGfBaHpk2M-H2My=eXt8oS8PfQsT=e zeB(BrZv1;Im0+Wt#3Oe$S}2~|Yq7@=<1~KyKn;j9FTo!3c;vO!lq_#E^gZpA2&X%{Gnf&ma{0+PfPWAZo1!HcXBQwwDd^PO#pGSW2jllo2w^$4I zc$8#kDs8_|;do*|h5hFVw9@0TCFw|!-COvT8ru#ONg_|zV_VDlbcHjo!ds7|y6k(G zi`_A2ny$DN&c!D?Q6}rgsoz#{ST$z5ccQG*-a;ByKn&1I_HVfha|w^FIgujua7S9g zxl>x@vB#p49LFl?8M3E+Irgmpe3Y`o#J>jK zb&CQ&Jf~J7NBV9Bz{Row@5ezhNniMV@Z#P^Q@tavRez=A7ro~<6!gW4Tj&dqZFD+U zz($j7*hVzpv{_=LEBLvv$D@lgH8#o=t_gdrhozL-V68F_vRu?J#EICmFA--6^`muQ zzE&R3iyZ0D8X0>7jLlhvUhXmGj`XDCapC#$7&N|pKd*-vC(Tq6nu%;#I`>E`-87G; zHFWCvd@VhuV>{z6#lCQb*kc`LqvKdlS|^aRF`D*9&ETZ^q<3#V$}TQnCT_Y++%lQC z?`7g{$ixL1INnKl2}4{h#7c2->?@Q>Bb$cx0D4Zgf|Lf6Yi1`oV#VmQavh)9%b$E2 zsZ3GX!SM2u!k*b$P0AswlkJ%!CrocmhTfv_g}esp%nR3xm!5ksxSHRx3Re!5ocPwk z#)95@^A>umIkMVIeI3L&Nqq@fyOQ)3|L&y6vMQ}BYYnl6g&NCa%S${XO!SvUaneVQ--9H( zAQpX;ep|2TT8ZjIzdOj@2)Cyt%=bOs!xrU$cEq!I8_Jhve;(&2J(dp5Am;bxik80v z^i_%^zYohFm~^}(y7KI9uv~3>>Fss7@ZI&I+f+x#~U;G7@PqktBB{{V>^_r zs!Xi3qyhzMPdY#9SHwEd8}S)HFb%UA`dt;GMSJhUFFklX=5^(*J36UG(!q2#?U)qx z-And$msr$H{LTw;$4--%VAMRGWyZs*Pz9D`xjb%F(&TB73+lxw;Dbu1Q^f&Aq?3T0 z*~rU&PlGI9_PxhI)ZuA;g9daK@1$#Tnl$G)y%6W?D`dc>w@h5FOx!q`xEV5WD`es}3UN~YjtFtm zbGTP!;>xEpUZv@xWa8q5IJ>&Z#0`^)nKpl<(Jnp?3tYIAf#)-w-%&dP9sp70C?)> zmV#e_BcehXRnw%>l@ztqL&8cj0Qd^z8i%;7(3zv#t>0r0KTE z#9c-lo1Z#kN;GL-fz77~DQ0_mR(mFQ?rX$kNcw*Gg)AmR+uK#s-h9pwwYs-&{kMi# z-xX}e`C#F$$dH^ZPu3zYLq)Vu?Ax5a8&18!e!n7U03T)do$oNjxtmwG+uzWjGokD8 zJ~*3U*8Z~bm6?AISUC6ao(7lOW{ba1_coHb!|b+tj4<23OGtqlEno;P9`zw7mEA*FGqj!yNuU>2q;`VrD?MS~JD$3#FJQf~T zN_VQF|KM*L%)fYbTh-y>?;(x`tM1y-gy;6{NNYq+*apL1aQ=-u+j@aG2XfVl3|%RX z>%h03n7d87$ja}roW)hdV&Om*p7r8}TD6XBUGnthMIY|>9zR8pX=+V(Sa`fE$=)Gq z#Y-4l2NCNpC&A8jUkyIBV8&BANXm6gi0i0FMN7~P{^F|58bo27Uqd*b4+oHKr=7xw z@xCC!i}`RVdPiEjnh%%eN+Z0B535Q4X;1RuGW7ej+6#QREd4gE)@Lx$FNc4eHV9$T zmGoUGnyr#64^Q?r`}$!9A4mG98`6*kmC0K%tP@dQo4l~Rl#b@$3`rJezw5zlRfaKp z&c64=-ZCTM6?vfXlG!-6IGf!MJF-PmyA?<;_HzUi`l3$4c$Y8^VR{CiFbCmc2*W3A zL0E(EAige*h4=YlfB@}64WVIx*SX?z+uAx?dlTcSXQTiT`Xx=GE_Cn51?WkiX$Jq)3X9Rqx!=;J==?CL3q{@dY@Jc$kL?| zgdE9+y?&9(kk}$Dj^vtFacDK39Qu*a)~tP`_NmRzV`V#^J7hFT8;D<=A)2+|>GyAG z7lDmZ_HUh18d|TVIjQu$9+H~QeEsNcQhMK-LZ#N$u`G}#ec8J`j) zExgm?Zvp-G@KxxY1jzFRc+o9H0FTP}l(eNsh)?eWT_Bep;;8naL5R70-1F(xGU=xy z4P>m04|aP6r^kK4V%!D`=>vv{k2sF_f!vkxDP>EKdp><#7wI8~WqeB8(&L^_ALb%G zEhqb^ZRv5(r`Nkk51B3FQ-*pG@ASAYIEmYKLi)N6{QGlWPU*8C*sjv!Q5m1I)Dszf z+!y3RVRskk$2-t3PV^npYoWYdrANO3{xmJj*%Y zN$Ka;aGf4{+D_hZU$DBiYk5P{*vSL#`Sh;j0Zn5^ANK{5>$s+0$$>uZ`Sh;n2RYEk zeZk^-uIX2HppW~4fcmcG8BJryKkf_k4PDcJ%ppDQ3$BK^PLK5hyZ(#&0+N4M{TGX0 zcKqO;Pwz@URO8dz^eyfS>WA9+an%11Ej#^;`-0xFHhdh@Yk2x(k?>BhLHgim8~tID z{zd%-q6qr7^tk8Ki|y-}z9yxY=zrW7+yH%7`uuU8AB-x@>2Y6>-_pj&2uQ-2JwabN;`0Qhx9JBx?h6)ov-L+ueS)rGmmc?S)7N!K zk9)W2(KYPo#NX<-qhKc$Z34P6!VF{(31UAJIwx{dxW2mTv5q{n?h5R5)?JaSC0{XcbY z9_MrY_y2w{X2y~%V+^6OG?pyyeP71XG$Fh`Mlq+=kxj4o-e__&n-BA z|9t*j&}hWJpU>rg{Crvg=l|dTK7TF<{@cIL|3CkI=^vlxPySz6hIvGchyxpKiV0 zBOV%@J>(A{&T14 z-_MOd{QVOC|NPJL5NKd)v`|*4AZS8+p^MN%=p_sjvW0O%jxbZ0E6f)b2&;tk!X}|m zI4B$uP6(%kE5dc*mJksui1A`|F;NsnO?1R$vAx(u>>>6Nhl$zZI59_@Db5w=iwne6 z;(BqDSSTJ8kBBG4)8ZBJx_C>BNEM`bsk)RXiIOHcQnJ)u>LT@!dP&2iY-ya7Bh8fN zO7o=!(kf}av`H$I4oXL)6VhqvigaDNB}L>4a=ct!PLxGilN~u(ZZCI{d&s@yVRE)S zPR@~M%5&xU@&b94yk6cU7s?0aBk~FPw0uRrF5i+PN(Ciesjeg{qM|8|lB{%5`Y0om z3Cbj8nlf8?Ls_P5Qno6)l!MA~<-BrT`CTcdmQgFKiK?Kgs;xetwo|*SPpCuGk?I8X zd3CnBSY4*Rr+%P*tnO34R?n#4t3Ru^)mW{HR!eK7iJGo8*Rr)|w3oFvwZ+;y+FEUk z_K9{v`$qdtyQ2NBMeFhUJ$fzueqGg*^)$V+{;1whAEJ-dr|C2FIr^LWGJUPSUH?Si zuYaYV(SOwc&`TJlj7mlgqrRaV&5Slid*czKk1^MH%UEN4WNbG+H4YnJ8{ZqZjACYt zS;4%=OfogoHk+BP&CX^obErAee9D|`&M@bh@0jnI>&%bLPt3#SS@V1IC-bIR!YXIg zwCY$5EZK6cRO=C|x0PuPvqo9ZSnI8A)*x_}X>M;f!_9Pux)a?g z?sPZTUFhb!E8GHitGm

mG2wanHM#-6FS`7wwhx%6qlEB(IStc+I>NuZ@@H_4YEn zOmC<+(VOB;_j0|3UcR@&EAX~@JH5T$0q+~{ym#3v@{0M>#QiL`_n$TOw5Hf|K!bD+;FkQ$M77F>o3ZX#QD(n>Y3I~L5g!95>p-3nu zMvG;|@?w%Gi7mu-Vkfb?m@W<$$B5IZxmU!6;&Li(r?`iTJ1(9Ri>S4dQW>eTbg$G< zvLs)6Kx!v-lhUOuX^b>MdR}^2dP90wS|fcReJp(@9hJVL#%@W)gntYN}_ydRRTCo>hNT zZ>nXr3Ss@+uW4F})>>x3*e) ztRvQW>ymZF`rRsNm$wt``|SH|)%NXHc6Ym{-OnCkkFh7&v+Y;yH|=Hi8heYq&pu>- zWuLKsuy5EgP6emBQ_HF6NKS7j!x>8TOmT9Zd}p=uv9sSf>>P8>IzKu$ow9BPw+a<> zzpGI_t=;zSqi#QHC&!)azTnPr-*n$`H@Y9WJKX*5SMFK&ntRjz(=Fvy@@jfbJlQk7 z7T&{NSFgV}%o|6=Jm<{{>*RpGNj?sbJAu`{}JiDlqNqakK(timp_)*D<3PzlwXzVY7ey! zXLG0extc%^pQ61>w@%Qz=?_}3Seo6!?n9T`Wam5UoHNc`cZplhYwA7j&Gi;}8@=mZ zNq>fqK@?fR@2(|ur^4q@&p!*l3pJUat;7z@%x9_DFU4-sLxWs>!^*=^0jr^6lO%6(TmeN$5>^2W*jlj8#jz* zX1=+>Ja67It5~nwCF!@a(~3Sj#wp>Zc%8jb-eKNcJ%6A-+JD{Oq2qy9Kpa)M!eD8e#b7bFWN=+PVbO+!PETaeh)h5%l-!cx*v$yQ~C8#!o5Oc z@W&!y8<--s0_nDfV%A~n%-{mAYHJql7>Lm01FFCi}7_S1eK=<0y{YQF}y?CC&5xO-WASV)f zF-L?8!U*w4NmkdZ+vrK(sy{K&%W4(1c&)nDkcqxiJF49@rcn1|?Pz|3?KE>9aUOTl zoq?RY1I`!DIp-HA+kMuZ=f3YAanHD#_W+aSbADUWo!^$r-&Me`>>@1V8}1Yji(Tl= zDRNgiMd_&YSDvMN-c(Ae+3K_EE9x4$<8`$JJyF)$Y0qobjN3-MS;utD_U0h-dEWC4 zbA`Ri-fADAJ4EwoI`LViIJ2B3&Q9kLT_Dj_sQr%aVCwrv>bsIx!%OyBdDFbv-n-rg zZ=ZM6Yv%Xzv;AlNdCagQ{&#+4K_s$?&loLK6lycCItoLCY2d=$oZuQ_BeAX6S$skq zCB7)06u$%A#c?`1N&Tg~5Wy{$mP#w6c)h;G!{F7W( z>BXeVRhH5_N~m#aM>QQ}H(s5=L|UufP^)P@L14X%EI#WZ<0zljpxft}d##?%TIZk> z@78lY_hGk-JHvh5P4ZNbMMvs?>|gaC>)+!y_PhJjzyoK4^Hmrj5sQZ<+|5a!EX-iW z9~FM(^R;G{?-UP-7sVKGaSN%tG>Q|yM2eLkq{Dq7_ff7W%heCnBjC#n>ONYptk2aK z>lsX-#a5E7**ig3mHc(QxubsMz~B9DjM!Ytly*vo=qRcjVBKi7s%oiy)dA{4zU3+A zZ4Irq)>V59e43|S&@O95Ow$|MEiKxpXk;)I=Wx=JOxMgdr7HN~0h9C0)^ z)g8!*^1NujqTdBXwAhcF#;@c%Mho$RE;yW+BOsW%;`8Dg;#M(BdYvwpKv!EWf1vDD zN~?E+09xr;`WX5|7o(q1WOOn6nn%n_W`^^Wvy)TF4=cia<{v5Gmn6khj;NQ^xyCz2 zv|ZJn3syYOsnFa9-1VG`^WF{qi(+BF4|>Nwct;5-Md}EDC?OA*zXH3oQx+*lz$3Sm zj?~u_^=@rRpdFBc8G>G_ud71BhjS55Wv!bk6t1Qz!&PuSV zGiy}qq_x!k$=<~T*b=0c$``{kj6`Y(Swb^$v-mOm=YrT+>LZ<(f0ipK?UgCY%gRT} zPToW%wIK*-ggT8+5L9Dl^JeWCt@G1iDS<3UL&W*c(|{9>>9t$D?~%c^9ZwtlfL z+M4sA)05M4-idM@caS?A%yH4J?hW=vct3cL1a*>JEbPM%^9+9gXI52ef*pTX&hwP2 zXpYv5{(Fp*T1qdcrx+c1U!NGqj9%>d&)PY+X^ z@A$s&yNBJ+JkxLO5Ax^w2ZP_=s~B0`NaS8&yl_pZBVLy}sF$>P#+$IX-Ns(y08H+v zae|rtJLf&Y9&CSS-vdM1$Bg;GiQyY{^p1Gnd6A*T!rkh*!rQ`m&U`+TG3XRW^zZZ} zQ#Z4%=dBE9tTV-%=S6bvoY8Dys<2+#BhA&8YZ+!1GxI_F7!$JwGvhGatDIYd-Zl(= zwcg$3o`X;Q?B46y-hA&Z?>^Yj(BSju77M-TDnbq62e6F`JE^7^%&@V_JS7P%o~pmD zYi3Jk)X!#u)x}D;CRi`hvw{wvY3K8fKDRI1Nj#y}AhvDJ*C5t7w<*85kNdRys@u)W z_NIELy)J%#KZluAEHa5-s|hW@Q+dKp>gzYLm=r73lX}uM^Q8@-lTjeW0(qUhLk>9n zdG%K{NjKotz4cN0)A}U+dHof=h<8@fs7%)xU<|e5o%)XJv}a;2cfNI6faQ+37u?&R z;52Wbw*Vg4mp8W5-|Qb}wiJu3om)=ujS>#CJvceaOz{r;+*;&gU~^R~XA1E#p0simFn7w%O~MOSZ-H_6-K zeeG3drZW=?i$!wz%<)1Ul%7fS>(h>a}b7i!7p5GN~ zH?ybnj#k^d?JIU!Ckd{R>I{RW2P|W^a|LdZ=fSS0z!R1- zn{R=7YWoJPU^*;$HGJR-Gpbl5kIz#a9-s-$g|0B*y`bYpVl(ul`RGS`#c#y2QZ1>C z)LWV^EtHN)4w!fxZ?=unTRFi*EUz|Fn^BQ7)yrxzEs@U9UK^*))K+L)wX0fnYI7X5 zxmLfd7lZBfFoqeksi<#^vSuxMQ*U#+xscv|uVq^Cc3u0r8|xioe%*Oa7lqzpe{qob zlr&Ger4(mQ`D%al8QAI^^q!q?)h=4P_N|tr>-s=_f}RAb*=KwO@~&c5H(Q{uOfugx zSDOv2CRRUdytUstY*nW~=WXYG&VFrA^fXk8 zC&8y}{YcTB&yx(}FC$fvbny2`skU5Cp3ajvA%7#+R_ZZR<|uC~KPsA<%IC{h|5OF7 ztu|0IP?WkEv-o5s%$n#v@0#(}Y-URn5JQ^%nEi^qzdFjv zlUu`^;H~#|bB1ntuK%Q;=ij8_i$@w2i$orUA(RmBg%vCklO#1f?-%6;N>?QV?!QTC zul52>4Nx|&p?X67M*U9x0sZVI z-=L&cCR71xP$>xmxlBwcuvHc^|ZP1ka@+2EJ?+5$ATrJR5Q zbhZuJCaqB0uI<+LY6rB#VD=N*Y1D!X;F~|S7(EUy*N#(vNWZ`tDS|uP&~NDxBg%+1 z${OWS2@;rQ6O8xi>Sv8LA<9m*9<_Q|3$3-*2iBh;)w%W}d$S!I*5F)sG1YgB>g&XO zZR|(LmjqZq5lr-)3-rfX;!W`n@n3foP*&QRozNwx zna`tm1lnLn=k@SZX3}Afx}Cgk^ppkO67NUvXYVMi?NadhlJ7j5A?Rl7gdIYLIFb(X z2~)77)Ce@43M1Kx!gUwQ)?BJLP@0-(=Q#zn^dxExt#~sFYVMsw;bY>a<{vun1+$G;$dHXM|@Armd48;qL2ku`Hb?M zlA?A|pW@udgRr01-q3b&4sU3GXqs;8t@Q!m_hr17`%!RvgR`G9rWzlhJMA?N8b2Ea z=00pj|++??%+sPeI*WKVod8NGf(H(gfz3x1V zp>+8P^!bu#_4hF!OG_i@7jL4PsEVf)DC^+rFHtWGwTgO`@RMX3lZ^m(tT0-b7r_hf zamKf!ay(=oaV|KE-DU0v?iTRNSM>M0y?UJSZcN5N1Ny@&fkJu?9$%bP8`)-N^B}Or zZy?H+I0MVYqhbZgV>&OEPD)X7Db)M!;K(}~j;6Fk*Vs<)YRQwT6LRY&=yd&1q|ckz zVH|Vl&q?+eILA^a!_5k(TQG~a1m8EOcqEE`beCXrHa`*WXBKCR8$jNlq4Ol*E%e4) zcm<8;JE^fO$<5`*LrtZNk`C*OQG<7sL~q#yo~*8?=pE4vU(>(gy=btJonWt8=6Z8C z&ts~!&l+y8w|Cel>D^cDh;tWbp}ymU3U(K#4+{2RXQVTp%AJM|_X;O>vGb0zimtu| z9KHv}cocMV4i(}mefCeMB+7P0x2k(@sBO#CTQVH|VOV;1x0l-=eLKq?gTB2kROZgR zH{AZ{Hgmn&sBF4F$A8Oz+rJt-gWTegAlnxuR2HhCEI%mp$Ip2gbo9DVn)lzB+0h^E zYmT@Sjrc=xv*hEJJPR)As=T9YR4yuWnP_`dO>4o^KTMsLp)NA?(J=PIbi`uDLq=O8 zg1ULYJO!$~ZI*?jG_)M6wbk7kXpOd>v*ub$P&EUDa+ZoIZdX9hlt2$@D4B!p@t}y; z?3L8d9wy)Sp?Vo0F5L+bOu93|c?O2R2u!gRj(-Zh;x@>lrrQ{X(3+<)&>ihQ2Nqlk zf({VQS&(RPFV3suNhtbhUQgJ=cyEUHhPTq&YQxzww2|6+bBB4vI%lQ0bKT``AxvW=vvZ;M4vxYW@c9KQg!fcXJfO#s z=g>CWiI0OBr;D>eIw!^Zq^8oN=s!d?#;F!|`@)Td}9my@Ka|&Hlqq zbQ++DxlR{O?07ihQMkz!r#AjdTlW$7G51L~+ntJ{vBmwE4%fhIO|5tL281~Lb-vHX zUZQ^=%Hask;2UuM)uHO}0~oV-EUD2bN*^P}uMlegJqRf|ouRmn9wPw-Hw^+OAr^jJr zH>^r_SMbjndyTUf9u@80=QgC`hViWfA8BLAmCw7shpJA%0EVG^&t~$x;}v>;dJp*R z{HOd$C_8x|+7138@NDr&0ySvT`95JPo)vG4rSLkNf{pT|x1@d2m-N0%p$aiY&XZT7 zot9B5qn#!zDM}|$(`a;o*Ob+qvqNYD_uw}^0cu*s6p!QWKd$xFR%`ETmGyh|W_l}p z!pB3#y-44LH+UG9_p^Rmuf&ueZHzZQgh5<^4@b;$Xg7xWu=$ud%bd@|-(`Mg9uJYs zT~>|IlgOvjud_bJjksXlw$eeUEA98egx}g1?CW;4bB`l9PjXJa<~ez83wM?Kp?flP z*M4)Oy#%kZ_XMuMZ(bD2W>a7FTc89D@W*p976q!;>EfZjP)(?dg4j;zEc9hEO{Ft! zLFJDUEha>UIE0D)ELd_Weft;qoX5=WO6Tqm)}0HoD3o?cRq%cPesWjwa%+Nn8!I+X zud6ah8PAj3M16i2Dh0vw+o^q_X~u&_7wbvT)blXkSG*(sg`f_Liii7gNwO_RYxigY zw@yOC%|?+9Qu2Z3a#{?2*BA0J`Jx=nsa&t@P`ZF;dxt)N2CLPKmc~HiI>>s8`7%g< z3oPvsE021s&)FJ)`?((0bl&;Zxz2N1h5CEQ`xQK;f(uK8`i3U7#Cd;Oco7}&x)8&h zZX~urPkk9J@ThnO9y@~1a7?}$GRQ+X(gAOL76@GM`N31heF>u8grqzqExed;7P{ps# zAE*?iaEpezBXNi3gehEOS*CtxzE9xJ2eUt0pR8wCBY9qR?ceM_?Yl#ExfP}15J>N&`z`$Y zs{0#yeMQdL%P75Xdms2;2JbJqMC1bhC@VA&n!>@m3$NjuzAHQ|_7l6yBjxe(JUq%9 za%Eh83ne0x+M0~Fze#xxo$nq^&|1PEhJ+f@6*QdkbPnBcjF*j9L12ds*KBTI-{s4>ZVY>ZlMeJxh&K7XHQ<-kv@w#)EZm-x2`4&-s_0*ZpJZA-yf4gHa z!=HBZ+_&)8cDwuB6K=pW>v|Ua?kO1hTJHm%WO;OA&390x22wejQHFjCzGqsAKmvp# zXK_kq3iHTiyc;?*@uBa#kc7n!>g7+dqI3^Txhc->i_+WDSM-@8sgwMe+#e5jvOJAm zvrSG=o>X2$voqD#)wf70Tu^^kqqNdmg4TuJavsJUMQ=&LH65fcqNmhpY}g(roP^pu&xE5Z`trcg?}KU7_Bi-|aV)0sBMQ2k5F zW#p=Il58+@CelfE;TsjnH|0O&yU>&aO<}3BQn?ByEURj2GHyWN{tbmqZ%{u|BU(xA z5p9q*7Ph%qTTg}~8jRG0=aoTL<28MOewJiLd84XvFY_nG=n9`$X1r^ZGb_Ppx}gR< zPv`xTY(;S6rM39*X_;|j(7Io)KFj5WBc_5GPi}$LWqfzbMQO#7O0tTXpdv9w3)9l@k?Ya4N|O@*^Z|rpdF>e?O7; z%O~;vVwD<9Fb5B1j-270FYicOCEn|$gaWW5~dVY%^5N#%yjm-z)WedzD;Lo#W;H-DD9)~4A zkG}dkiIm-_@V{EOtTcGi8!+;N_Hn$wXs4`Gjjm!i4?F#xOsCM<0qTwlGbBM(E`Za# z=WhN>>8s*ZXOaye{c(^9UkWct!OKqlYnsjVU-Kh5B?2oVQc@_5bNv8)rsZskGY zxNutt@)_00XBgtc;#=Yh_~++z@j#1>m1^KMkCR>n2P`Gmv{U+m`W#8NBJeNIqNe{W z7ej@suei$lbg7718f7a;8$AR&8Gs|T4o~$DGDQvX|4cNHK(8B5|N2R5fWn%rKZK6) zm_9|%(~s+^JinRv7Z;6Rng7vdoY}=3K()SSeq|1Y;|KGp1-keG6yEx1cfH*w==M*8 zT$h6PPPwPOUjE0S(i6!o5o&ZLgi5G%wMng{pwo?j`)?HQl{&z!2J*e`Al9Y$=%=KU za(h_SMdg|jrQU_VQHx4S#cfK_j%bQL9nWeJ%zw3Bh{||@Bt`?n;B(cmI$DoegRE?8 zoHZ@%9lNbB(Kb&zOA!D9Q}>*cKI-;^$eMnXeB|BaV}m{#_=?tg#9kpK13n<6m2Nb1MVVu zmCaLJqVEDz-Jk>3rJ7|Jdf-jvFdr6jGPk43ALC>;Mdh1dE;rYj8)1k?aEeNxrHr<6 z>3&64D*E=*_H*`&FrR#T1IdkxcB<10rLWLQaBKf3ti1@tDSJIY2_K^67m*!^^5fwy zEpQJH`L}{uP*5VU=OgWfM@dTL;*u{8o!B$5><4h?3()HeT(jKBf*LHTN=F-#R+M=Wxvms8a#g{L`q4o4(6FjmGkz^P9u(J6$5w`d<*< z6xIs+(9g!gn3j;?sE(u8RhkT+I4|9h?!()RQEK5jq=2JmDa*lvAECGZs#I1TwF4es z(8IsvdyhmZd`|yRKZW*Rni`2VD}#l9!8O`t^#ZT$!cTk~-+rnacq;2rsv|`uB0cyh z-NQQWA`g(G)r8PZSdTyRz17>^%=G$|Ilm4}e8Y{Siv&}vB^isJI9lVqXW^v<%&xQK z$*!Q4B*91@A^k9dCmI#m&CgB}WMPA_8DIS{)4e45%6ej2sI8rVN5o6@r3X<>>hUJi zd5;t1x5#0A&fJP3e^r_9odi2|l!ufwRF0vTs z`Q9_|-PfXQJYX)x-~5hwq@!t?b}~$TAanXTdj^wwmtBEegAi&ipE}o^itdAMPj@D{ zpb_D$IqqHZQv9y|5Znbe0ok#PL>?x)wn6xkUbrHhzokieZj(Nj&V#xVNKIs*y%yJF z^on{lKFM{^-)NBeR3~5&k;JGl15zKYYB=ZUs1!%SvnvRAv%H&0eIIYP9l40%oT#5U zOEus}1JIHe!H+&uPxC$7>b>B@$3b$fa70tgN6gYzCp*i2FZ8K9qo_;=PnH2yG{M7q z+M9z`u#cRd=Rf8T^Pl!Vz}dkO6r#fS{SnHEEZK0j82N6w3d&Juc|2#T73t4GDB1JX zQlv2sld!zotc}}w7JoQ`YAC}t;+Z*fQ8V6mUPTS4bMXgR#`I)X^{ zsU2)+s4xoe?|ET0xu;#iDd9Wvem8{%u;vcrYWt&RjVGKRNs9^t=MoiP2e_jaO7`^)ljS_q5@oyM7bSk zBEaeyoZ8QoBJx893ERDDgD^GwoVJ8y-$QhVo%&Jz!=MKZjS4elqR5I1xnjJ z=z~Y?hUA3OaEymJSHt{b7I8srrM+?MT6^&`1=-ftIFOifG; zt3FUjPS9`S)cT|pX5*GbYjIkA6rkC79MSj}^_lsz!Rpa?74=Dg&F1?Bcqz!!WSP0) zOloQ=R!cmKd}~AKSOnZ9+n!1u_b^&=1T5awc@w2_Ey`QGTi+c5W0?dt3c8t3AM1n< zwH_DfZa_>v`$RteS0c!{0>7 zElH+0gA8$?l>K3Oc01y1WP!7t$<7;S3_pcF=3w_-_)fdX<@~mO zPe1I*1yP~Sd`Rdb_CZBkD4ybZ)n@ATCfT~4o^zD6LOU@2EO_QY`EKSy2P$MHS=93& z{8&{aznxFAZ?}3yZAxDn4ys=Tno1&roo{}?L?}aE;U23V{B%63Cf~O(D%>%T=UpU` z(wqV}*1YCknb7;??@%^c(&?T-1>37!P*P!Qg=&C7W`gKSnjR{{BqqvXFC7hh zJ!sUP)OEfu-_cM{b4%97*6eC5~wLK+|NmreCu4qC5oaKtmQq` zK^vUp${wOXo+%c5_cr>1mR z_f_W+cbfYKSp^GK>X_HaKS>6=WSC=n8}_`0oX1us?S67eCxx>h$E$SPh!`W56Du=$ z>xd1>W*VTH6mWdkaJL~{900}{DrRxkf*prR;#6=*F4}Egxa+W(^S?qY0GGHt$#Zgz z(1%UO`y8V_N8K)AKj34g)FFCA1Qk=#EX~*2kX`+1@7~~#n@B|*hMCKhd;@o5g|!Cu zv=y$opC@_}pW_k{I0#cX4Lps`ujiOhMPEOky#c z#A(<;dzB1x!Kavv^O#vlWc1sT63d2fF9f-N0`j;*|F13!a!a{48!B^g_^ZIEQsCD! z!+FyL->Nn|x;>iBSn`z%>Hb0bx1?DHmp9k^6sM*xtZFKs{;<`8&5UR5kKo2jzWSnF<1{Yi3^wX~;6?(gQr-$rFh&}-<8!%v+V=0X?i z%k_^!6?-GxYM)VL{$^IPYoLjwz~?8xpBCDm@VT#(WA=Hf6G*n+&!>;%lnkQXktrzb zGvyuZ8I)AZQFX)d4CbrHwYNZn*Yzkg@vA7jeat7(Uq)Fk;mkdRZwl7Sy>q5Y3a_Gl ztOl6`Sli`9Ethsn4Mv&fs>A;N-kaKg&mV--H_>lUwcq=9CAnXVh~i5{Vzyq-7I5Cvx-Y;dal8OY)?d^jHNFe!9f%94_bA!(7XeL}u4 zKua%>92s~gM~-6>#|dv>>vl`tNl$wOOyOBjM1ft1Q*e<425#PC&J%Fl$sphb zV2Z%`{KWa0(^l7Q!2XWK_CXi7uNx^S8QIIbd!IghAxx}Uoc$@F!e}K5~3PWeHQ+$m}|1(cJ{6U{`kokGrKJ-yH6^G;!h zA{sW6;^dJQ-H+1Pm<@;*NNe0AyE;7F0m>y8_olbZTSsz#JFfN@-YNLnRqyvOyJV49 zZwF84$Mb$R%rJfGe~yRvLom_71|>s1KbrlX8Yn}Lkb0dYEN6diy|`OkfDWO_spQcP z!iifc0a6TbMms&j7)fHV3+(F&>jm;8(R7h?)Y7RT6D{rZMgJSeIXLII?n*b`UmN_c z10^FH_(zJ|iG14@PH0IbPPs?PBcZqf@8~4TOMP~04CaBwj2Qr0{8T#*wyD65Sv~5` z2sPfpVP>%`D&+yAv?-Age4MlSj`=nT(xc4#(&&*d+beJj>%#Jtd;Tz+;^DrwDLmuECK~!FIz|FVT%#8sA}jQ3Td&n>Z9<+ktDfh&?A;{ zu0B=|(4#JL`lHAj)r2n_Xq6pE7-ec>czQ3BDO$<4(Jq|vZ?qrT*o!57T^se%L3ax> zb3;)ur=ejkCeyNoEu*6(=&tI2>SbYLNvKE3I5pjk{wSLhjhD!~EH&2A9rmMdejoZr z<#BEs@&;OxJb9chHJSv>ED-YwkmyeH5G?%%I${i&<65N2Z1(XwTYcCm8pm{+Yb~-0 z(Aqz>zGNa@0auqHC3+v;yN~kT&CZ}wbI_pXkvm&UDtI5$>4N=>U7U@O>iEDK>4mhg zW=FyGW`e<&^KN&5@lLUScavJF#Db$fU_!;lfk3QjDpJB`HHkptr zxEdmOy*1gxepJ;2vbL{s0@k2?d1FHd9Nnms&>@M3=pq zM@Z8T6Q34e0G}0fb@8{z&2KeRxQ};Gn zO9ibrD>?WbOHSgWlBs_UQre+ zt6&;?NMW6WZTyK6Q&mk;O+1B%Q4ji)hnuLr1TtF6ggk-|^EE2i)gWsh= zwpxIIgUQ|#b!-p``KR<}$gRGN({N6|#1=)G(HGn@90hW^`6^v{jai7pa12G~8XIWk zU@!Gar#H9SSv|n<+19flnb*mAy-%v=p!GHACF7 zyvk@{NvJKeU$uWw%hv4gUPb&k!zvQ2dU^9 zDBx-O2o!nSXl}G&lkqTf^xr!Ve{VXpV4{w-f+Wcva-$I;I?SuTt(Fcm-0SUaaIa!0 zUJBh3GilZr;Hw8o?Xe4(936U_al-vLxY?)(E5Ryp z;ygBWrc3AP?xmHAq$3;S;I<~$*oU_|H*`lnQNCo#eT!D~i*lPpbu8K3%JlbOr?inO zQ)eDq+O5?z^%2zOfQ1a9;+~@BrciaW$(_DU=5((bY!gJ0%&V_?boo5(l9sLy1}$y@ zEmp>_3sPUdzz6QfYnoscQZIq;tJ)U2MK@|CgY%M(@&?Z4YSJ}3?Y&e?lG7YL z<5{L;8~Wu6QY3*V-;xZ?K=A)eazU%SUEUe?@8WoWZOOIg`Sbk+BxwRZzniCn`RdI^2(w|%2Zf91LIcHo-sVlQ0=tQcYF#FMqtIb_NUKK1-p7sI%sULWxJy}8;W1vQ zJZ*p_f6JC>u(3FWsUGzFN8s;G*a98t1}F6;(i-pI*@5d79cq*T*L)qO9CX#@Vz6^^ ziAJ)or@*u8rMBr}Y8 zJOjt3kYvX(^1IW?c9$pbQxiV-6zbQ9#+Pip3oyF(aHY3_31h5hoF;6qrg|@UucMg! z=rs-MBPTk{%LO^5BvN0^Nu@lB3Ok9L4~m4r;LsfQ3)joT@JU3nn&0Xj!RS-S5WPti zY-0cYOE%w2+GR+&C4hw&*-cT-o?;h$DyM!9JAVtp6wxZuYMaqY1K0L?S>vyF7G$YBgCNYR07G> zq-!_C7gR}K2D!sFLI--z<8<KxJ_(?e(eb)3?rC@^bLU_K(HyXUXFCB6-l z(LbZY1gx?&JMQu9AvF-2qC<2*ff)-s{zSaWE^w^WTG~Y>??>i93Ar@7d;$rwBz%$P zXiB}oiX-W8^Eg#&nbRME6a$PH^pSR;!@)`xr))AAh*wb7-Xj6~AvZnj;l!P0M*M_k z5RV3xLZW;pJLQ*A!eaHRq?J2`6JZ1x?>M@}-9{Bd0JqODN`aTpus`st`G;B4s!JYH zurxA}Ev!~nd#kI}liC{;>W7o9nPGlp2}!FDtWT`3tnX0{f^BaRKIKxCt?c$>hI-Od z2H{wYg9iqQlKJc~t$+)B0&4r(UI24Bh2|FHCa{;Ixi(uDbJ)1pBsDt@RA`+FL8dkOUOyZ8~$?>DIw&#e<_;Qb`fnxc)iRYroFpXXWpiE`By zj#XQ4gg5^X-@Omtduo_#sKuVlDC23oqs^p_zM#^sgxnzU7` zqHi=Ru|sjitZe^I3g|8>gYQ-t9ePcxg>q62buc*oEz$*1S}EA!C_d?Iw96e}=85R} zAKBZ%FnjF-bmS-5kI#aaj&shV*)n_hQJvA+PYb8SM^Lzi!90JFo{+~I{2xw7hkD^; z@b!zlyE$y_zfR_ViM7mH$@cy_-r{DIpdGx+&%jb&@J3Hs-=J!LZ~XuU{{>a(HtDKL zV5>*rQO__V*77M%*_Z5_MTNvTc`e1<1TlD{0P@5`LeoUc&h&V+pG9x!(rX_&{z z!;FGay$i}p165BT1GNs1_y|5?MZXD^-JH89p7h6|a{lCp8gEf_=(|+rrU^srjd%1q z`RmmrqECp;P-%AH(qACWQA{a=7v37j@I^Af>y*0c{mjk5Y=y1`DSeMFev*lpf@b!j zRVvU3xy?23bAmmml_2V0q-kKVS=_cVPksY#mXGS0&rf<6?{z(y;w_-BrRH{K=w4F8 z{~1{nna!yOq zA`1U_hI=dmoZgmh@fP}G8n>tPrvv1owXdh*&!Tt*+=xY3v4NaTWAsBT;p=|KPi{uaa}oMYOsD~yM>y!t%7vox4`vOUq6<5Xal z9Smr!W>Q|A=63kPQD?7e*6LazYga?Cx6_==)_)QIx1c^lX)6??PB9SxZ_7?&j)az zzcGHoGkhF3_>U6Z^`Yx2XL;gD0nc`Nz8@3RU0JswASr!u)k4{R_NuVWH9 zlH(+din}rF3pI4Rx#{dFOyRu*N!jeQc+N%!cPxnXq zzr(j-K~|O@93lY zOrzf}V%`>4KT?lsuaF`fZcH}!n4LhHAEQs)f|Zr$x%MV;oI_2&%$+EkIngKB*b?yK z_TgJMa8-7!I+Jl&>{ehN?uRqQz=;OKgEru%vqjhI&a=83ZulD6&Toas*-=;}){@e2 zuSIILJvT|LlP@U=u<*w0680oXcvSm^8wujrG5=mq!-E@R&P6MFl$!`L@k%Ch7g|1_ zB85E7-EI@G`$7^9pSllvZApstfa|?OAK4C{yWoXqduVKAK7FVW-0ETSy3=7zI-X4l z-p(B54eleV$2o4T_2(qdK%riOLj42D+TTf7RS)lyYfjhb5pF-n7*)w;_s16*h0ib- z40{s(5wT0z9+~6ixcX_FvgL4#U{1+oE+_JAKBd|W=4`M@zLE~S1JoI0*p`rkjSX{v zF(|LC+1*&gEgMB*W%|Cx-bN>Kp;<8en&g9f!YVc>HBn*)p}j;?do8#vqCY(T1$^1} zNCO|z&S}5$+){NBMePQ&pt{|}e!^}F!||9$ZG$^Ca$`fEuMDpD&r&+B$5L$^DN+kv z-9-WY*8IwQf=*buW#%1TrE)nNMGN>UB{cLnqp{_(YNh>22Bsw&k~`>^vd6drU6SMLnoNEGL& zk!P^`6dU5>AB4r+=TuvHlT)!@Kc@en|EgCu6457KVIQX=6Z{GGaMq)<#gW2lj`LRn z)R!IZgU2$5b)Nbg@cJ8GEBN^~_KIS|oJ}t{v@8`@o2x6;U2LC4pVxWEmb9JVnlQzO@DaN)Unig){D3Zh z7rSyM_ba@^HrIYo^`$_AIvpEk^3Ji#(IMO%{EVp@WK6F}<>aeMIc`VlO^Wse`t=R; z)4*SHIRE*)o7y-XbB#BQeEiR=@Hia@bfNhisBc$zdtfXqcPcw+i}56OQJ=*?%N=kF zcabeQ=w&cVpP?QXlP2Q@6vc*oY?ko3V2TfdN7M10=ZJ4J>;Di9a7G7dmUNS(URAlS z+=@xsAD`%Rxgy$dQ|_gjOvNmOk!%O0{-LxWU$zf-tfrQvHPHs61i!{ja(nP{8?Xa1 z00lM=-SrnLxB?hK0j&;3TmQ(ktTg<^JnH}mtTx-gePEXHApL3JyK-)GcPwY-D7zgJ zTFn-)sNjDZe0Kgeivs><0{5IfjpA`bs85_R;l|5%Q8b$1c}~O4`xaM0 zQXVJGSIF%+50jmKiaq(yc;CrX`5AP+Y#e~oy22;TLzBJ=2QNd4^0j9#9>gsuMRrTH*&9wWJnAAl)VZif7rkmQfE<4&x%MSY(*RF>7HkWYFBO^2 z=WPgbc^5UTD%khV9bnzWzGRiAk~IDe^xH)059hngW@KNUYY|DK?%ZQ@g1)pI+^>OE z=73zU>RrJk+sIiYles%?&ZWW)?sQtsq^k-;dV=X*41Ax3UbYPnNn(%luvebU{k(w9 zCYB2C5~|6}ni$>=_a=G2H6&$^3W;FPJT#$X=^Ob;<&x4F*4m02S-#g>Q<;gRgrq=oV@39>Dm`7DwRMQSsx59s_mx@~gF4k~1GLDNT zH#L5S>(Q3Ii*MjtL-`DUDCsbSirj|Khum6_VPD4y{)Aq7k~(b24JT#T*UiCYJZkg< zm24oHo`7pO8Vqud-P~Y5?Pd1s_mc8V<^GV}^!;g^jATB|Y4%5k;wMDXN`-hK0xukm zE^`h(XfU6bkdkQ4w*Mu`=03jT@`LQm#G@PJ@%$Um*Y{~PdG`xoe2Ji@R&22+gRdvz zCVk63i^!JU15P`q8(eP?z32%2Qvl7ZLceOlyMGrh(}X)Vr`^#qdfjb-$ZAMDPJg!eyB+TwLK>dUcrbd;=iklcF`1T_Jr^ksZX zoNV}esc<%zBWJgQo^&57p=?zhFyqnAvcp~zgF@JqPkSkJ75cCzy_D_f z`}wq6aoHL&onHbq{N`D_wY=c7<=i<(3)lRHsp5Ad3a%!bc;Jv3UQ-eWZU6eG`@0R+c~5wG!*bH^uE^g?d|lG zVr;*s;RF`4M^X(e8s*hSp?Vii8V8!12Zuf#e4gAp&#DAIPgfEttGO@dJej)^s0;1k zki*b-XNI40E9~eS{Jx;OR3kawjN7Mz-TjF?(}j2jTfr2^m^{UBXRGmyoAZ<(=ic9m zRO><#U_0sfXQ|mJ?)XjM#;D*d^ri2w;vF31+g`#i`V()V64~*3BtZFW3%HLRJv&w| zFUO&Y2KNfrC5zdJ%$0)s8{9A4k|aVKISswEYk1FaIvW6)D9u^&=nNr((8NW17sGCg5FN^2`_LmisWmY*5E$kC?!@YOO8K|&m7!KT$lW8 zBN7b?I6SzYxFtIjZAkWaV#~D$Iiz&DP$pd<3!ihGl0$Z9Dmmm_lE`_=d~W_&%of`U zFxMvL$9DYBy=-2bB}IB!$;GG2LsMSB%w3AETwq5EN`;x`UNDLQB)f;whex~Pm=cq4 zGJ;!mXS2CD|6e+70TXTmdUGMYYj=3d?qMe039{g4+0_hg+r36+_!j3f3U{Nd7bz?i z;;tg`ns|f05s{)$+RCzD7KeILom-&mlDBFk31|gIcpG#}@M9Y(QdBC;+TP%Xwul;q z!&g=(L51b6Xvf`|5C=PeyJn)#QH7Tm?VmTLXa-sn->s?%&G zUkLB!y++a?^fi)8M;x*#WdDWO@Rr^u3Hrl~__UjhYxmM88*OJ=Y^q&;TA~d!e;f>l+Vr+P` zZyc%4>fF{)7uCKINd|>}>(KRDk_K;s3fJi$Y1FCz$e=2qmwzh)nJ7Nvj7j8+X43-~ zlXqOpEjHV^UF0yile64Xc8%SIDDFFn!K$KirbH)n%a z7n4O<%l)?7QF9N2UC-isT;o2xDDJ|G;~u=aU`z$?qovgbx3mW-tV~$%IMD5Ma#-`N z+04E9&f*bVrl0)n5=6PN;qA|HcplZ!#Osnz z4{m{0n4k`~WweAxwLw?w!FI?0J7>5&I%)zrhD7*v{qP29#WOsI&C8a!ikz9W(vhqZ zk;nz^jr;G;`C&Go&q|kZu5OVpDNDbpPOoW1pK<6hZRjsO*zU=suZ-iy<>~a3`D{tA zz{%Rg{@Pyp#|e7JW%|Y~I$T-$MRj^bBl?6xk7z@G=s|DDq%Vx4Cj^@b^XUaEl(lq% z?R0^|+?aKiE^v*SilUz4@L21j*D7pCwN%@%!O(;InleE*WjiXpIDex0vqD>@%#*Cbt-7DE9_tZ$-~iP z=BJXi$+H%Kw+e8}3&{*0AXRso8y1Q{z!5tZl_J4T1c?dw=*i(Gc~>$813)IDQ7)$9 z0p!uCm(ry-kg(hhS~<#Q+y&)rZc{I&z|hcbnM&`^qwg=}M)eK! z``z5Aew03cfgXQ@{vM0AlR!<>M{_c$g;eff>FV|3j*y{X?Htl6xhRAS*lj65IVdCv za{x4T8f~K}xOLKxMX68l6G?&z=()+DtTcLfFZ%aTeCZtaVRAt;3qb4z^zcIP@d56z zJ5Ap%3esV{?)3f$-MT!TI*~3d(4hklBaP17i>^GBj+{d`&ZQGCpbHn!feZ0A4$y^9 z;|UefeIs<<$k5W^T>?2&T`;pt;vD8y}Dk_1RN~EglQ&$3&Wl&qmR97nXl}3eirN(+uWdo?Q zp;X#vYAuIqoBBVv|16SQIuiUv>49QZpSl;Qe1qB#zTZE;UC;w^{<^L0f4{m@xuc{L z+^7e9Af26rOmdQ0Y;uhwEjhaEeq1PWM9qLdE{zrGrUDiG& z_whNoxOD0wlgfykE*<74j?&4B=wq>Tu|#^9!Q4(mSslR4&S7HbF|P}l*1MV2rp7|tHu0% z4Qs)N+fjTEgA31s39sG3gGHqy!QV|81s0402i64xD&W7CV82e_zH~5O7I<$GSZ_8s zZ!s8eE%;N-esWCeWO5^UTFbv2zkowHCXCULjLY&6Wp+_Sxw zzb$1uKHK5{5zZI@gBi`=mNFIQl7~~Xlyv$AG>_ddm7}nf3ow)$u#;GrNdl~-K8(bG zjikavy23&Rz(7XBKBmGv@?afHxlwKdjAJ)!<0yHW3n)T2!0xf&_B$O%2tB`4`e;{r z=m2hr7)_6v$_8&9iM*w-;|*-N?WRv2rAJ<%Ki;4>#?luP=!x~|hX%bcl|I;&9yoyh zH=5oz6)v5JF1D2W9ygE++s!?XN4ewi0&dd{EuzPgs7=rl(P#v6@5!jlX>_Dsbfckk zq8z$VEA_4&bPtCg)Sc_J4$XAj^|4OJuiFph}b3sY+unq8F7q6m=s9 zPbimaU4SoCz|LnO6?*{9hi7{@wOD+ zm%|%t8M>co;k?KN73P5p7k~_xf(;8mha13$g&@S;V8jEU#G~NE)AZL1|K*LI)p?(F zd83VZrwVV?;k~xx&9>p)cH-^!;QglaezSPP<9NrDc+1my&$D^c^Lf{cdD|;^-)ni} zn|SBjdF%har};G8>HYRnToQ6i62Za;ia3)%ED%x-^ zI&m_3a5mC89R;wh4e+hP|BD1oc^Fp$oGXzoU!R`70*tv9l(~uCewf~V0-Sl44u2V} zc@4CAi%uT};w%g1H0broY{aCp8<0lN@5Z*&{8kLqz+ZxR$mboSqLM&UGOyk-v%jC26kuB4#P3Xg&wF#N; z!Pbq2xvD1c()9Bq$=#58f>3B?4Jf~AR~5AGqzB$S(RX^-p5cQa_!h9!8_0*nC8H= z20t_JZU37-?r+%2ZQX$5eJpsb={F1mrZ=G%twr`c2lze@2)_UrzYr+D7&yO_kiH&R zzw)7f714MJu)hrG-x2uV84SP$9Ka1Mzz00Q4@^J}E)ev9rlY~;PR8y|!}iXm`z_^J zWTqeEuZuxxN9RcY(^^jj(14+XB--QZKE}UM3PmM$qGr?!V-(HEN%K5{u?LOxyw&ne{4sF)LSun9_DQ8gssL@ZNXlY1Gy@|z}X~q z!}MfxGX__oWLq(pW+a=A71)Jr7V=Y2Mw8DE6VGzi#X)1r#s)0G#M5K{)mWTBXc{Fm z-)Vt^z7zzO9YQ=i84NoIn3hdHJ=isycr8d(u)8R^;A)p_&V|riV|O9bfkl@RkLD*A zy8{`|I~3p?z5>&*WEgBh<&j!dA*fSz;LR<5j$q9k`j79taB$^p@Z=&O+1B1OfF~PC z3FZ5X^_D-WMM2a}so=+~b6Cf)PGNI{CD#~cW&PlW9ta^Vv$f(2NYyL{6RrVLH8OXk z!cL^XZkGU|@+u`$C)tb$6VynSX4jGO$k$;57%#6hGJR1ksESc=Bh!FH3*cas0)ZNU zLF-Acl>&V#EfiWmI4^;?B3KlVXO34cP-hWvX9bWrmZkDYd^4Q#-sVZC`M0IpeL%KPZ$EJe0@<@c?5FUTLU>HJ2=%GYF3_Mcc@qwd&30Qyd zNI(mOmWp%5Jw4^5>xEq|Cob+MaBmayP6hKT0P8DE^Ww-s$Q8VULNL5a@(3EB8?laXAstl>%_tn4Sc|Qai!H*sf$h@@xLF2apSGYc z*p^^Bg2P@2C6%A=3e)^AC5^wjwJ)mdM6T2qQqu5!s4Jp`p2#I-p6T*s!gOu`S7T?{ z6;Ry$(G_9fW*WHM`Q~dnl!2L52%S+4X4V29Lrx9`*Uq;H20IHyha{sz@^B`dF|#7N zi)9sfSv^urqBc&G8LS%6o7S=3I0ws zv|V<^H7Rsm))TH!cLGV(2?fte1IJ=_sVoJ>oXWr)T~ESw9| z=FmV1$+7U)N};kE$V+R2zS_Dse9$GK&_2RR{m{_4KfYIZoK+9B$q*IW8w@`&U-uT+jL;R-Dx5S~XEln4zRk4*AF3yG~(L4BwPLlu#4 zC?~B`P1KHMwCs@ZAt+!7Yo3O;$niV_Tsam`MiCs3gq9 zBc?cL23n|otQ!iU7*q)7D(c9MV|ziyd{HBC0p8aJBn%wMT?r($gJ~R%!hUiy=Z53R zCCqN4U)18crGjFiCZ(}eqbMhpQ3_P%EVzB4q%IbMgH~BM91?6CH=wXkv!{`XZYoAU z)q*uPV#~AugZV+g*tc;mCy&9$131DxLGKI%xx&8 zD>fLxy4bE@jzTK@10B4Ba-b#V8Q|{%RfJuCKnlme6&260QaF5qG}OBe{y;gfdJU>v z0=15V+Zu{%uQ8Rb2q$OsKtx73*ly6^0&!+sgZW+n>{Et1Hll`|Eu6gIcFI~YD!4|_ z(i|<^y6_HMx++06lbLgV#(Rq)Evx`Y#sKxJ2`-yI)b}VT?rH7x zt=e`DnlC9@ac!L93eufrW^dS+H0MlmgLSC9O2Pk?wsFA11jjcY2t*H^xf)tTJ#>hc z(Ne+bQUia)ValdaHIyPn&u~XIs-h7Z0z>1jW=AVTP@8l8N`N?Ofj6W;8$Lka;qa-n z?KI>na;79^)i{v6s8rx=lTK`C=RUarX9t`8raWlD6_y&XTqX*7Bn>#XowwA8NvVK$ z?+>-NRp-q|9aUgLHlmIcn2u`9Mh%cc8m^m`i)v!(ZPnkn!x~a+3oZO$qc_uMUC03r zB}F!eJl~23yk0l>J^rM;YRTIz613KO!Oc|)>S~zTztug0ZyQFQZSn(NE%P^+a_S-^ z5}0CI0M(3f!X|PvIKsJMm}bnus3g_18TeKKbj$X4u-Qq?BiEu%@J{*3;zOP(L$Uc5 z{wSL)9A*l;_oW6(Q!ZSg5^Us3p?c(I&(qJskH~K0a@MwSAhFaL@6aWv!R{4#OMyle*uUIE(+6d3 z+yJ@7{0cLt4YL2oQU+CRRDah;NEOtO$}htf_Q4)zn@&r~fg)1!>;8w60{(xQi>Y~x zJWL^2T4}o}*@QW1s%}4Mv_ViX!i0I5N+*Kz;LNctYB@Jsx2X&+sxur^H@K&4vj#oH zwc|H!1MaWF_N>cexpZ~la8htMA1E5(V z9B{2N+#{kA`I=_jT~rALfsgw{Y6P(*d%7nP0demSrVN^j3zwz#DHRV1;{(Sw&1vger zNsnY9k`e8ZZ>zRrMi7OCwCkLTFi4Ky>w} zB1fTuSp9^7o9B~9T87PAj|^5b?xmmv3-Pf?U1g$fO2Eh~khN;0l$DftxG%PD@B^u; za%|tmc3CPPY~U!UwQUnrrBJ5oAIMGlz!@{Sm@F+-0q=|9I_6h0H8z}_$wF-0N-zo| zTqqeT$H$!T3m3e{0%%LDc8r)^&ZH{&Ak7qx9FrDG5}Q(G(30wb;rQv~OiGf!fa+5% z=8*v$xp_?c`4j#?TEJk=AjvR!e1YcJ)n;?Se;K}Sve>?^sFn~5$6p7Zq4FU{e|!hv6#h;4n%FIoClp*iGT>n#$Y63T@t>5Qwr&k5Xz~R4lBlt{&QAiu})fGxpDp|-E^K**l2qM~WthW52?!~~SX$DhjGEUfTMHV^9X1_^^6BO4jb!-53YK9KSCYb^? z7t|(WTupgm<8a4zDdKP-sC?8Kn`1_EhDQm6A4Fl#1ghYa0b8Jy%HAR+^G;X)=)`YD)r*j6rA`MZ$FBQCFx%mc10)v(lVmZ^k)AK2_!itvBs~99bo5&oVj2uJRk#VK&_$ zWW^-pg!`Ztnbx7DJz7Kw&L+}RIkjN0tM1H!`0&S0<97CRh?ui5(Y2tgQr`tyaiT%TNhEP`ko0 zYf>rASb{pJ#f)(zd>sdki@C*YpD}!G6to9NoPF?zJDg1C9IAkutlTIS&fT1e|3@xQe5`t7Rdq){|&U-+;sx_Z9 zkW%u`51Ftiq#LwIgXy4^mr^d5VQQ{}JRifX#VR0?lFVot;cnv?c90**FNw!Vd9IGWedqs%$iBAO7jLb6ps z{!kd@SaYd5^u)c`RB!=qjv*(AXI>?QoGamp%G>2pLxFO#!M%#WzD#qV*++pn;3jOG z7)qHI2o=Ft+ zaUHt84m@0m6g=y79X$6soZL{7{+&jSNFCG|B`Gm!aL_A|K@$PB`U9_~fdN&ZgMm*= zWOUC55p{1kol?st)ukAm*+5sysx@CHi%%`H>Fxs^#-CVFD5==l0*9`kga~8Nb-)sQ zPFYk1eUq@Tl_Z3Ck7vlQI`f zu5lD5H1mvEW-^;lWg{T*&QU?8cv5r%Iu-q%jTz5W>;lRnl~CTk0w}eTPR!NO957NcNkV6O*bY#F1-Vfs(x0;T!E}Bh ziq7_EDVvc^yCI*>bruspDyI{jRg}Z8qqCgMhZf-+r;JYeI8)v+jP?ebB2D8IaM_|z zWo1zKT3DUc$>_QPN+c9>z<#Q*9h^}?VL%6kaL`21?Lvv$Fzq=AnV=k;ZZlx&OEK{^ z@NTPt7G1$Wl1C_@<5uAc2XRQt)Iz(+#6+zbCC8>rgBGELR#l76$V5-*(GkJOU^U__ zy(<(+!#Fu!lgKEe>yt>ZuabdSa)Ed`uqq|;?iJpy*eUh6erhOk5r*L+=yqiz{LtAt zs3#h9u@u^x9ImDTJk=FbxoM0WW^X?F&jp(`4|rdKp3|e(qHv0!hP=hDbUzw7&L3$w zIn>JvRXDa@J)FT1cs9-6;ZPGLNM?kBW67cOq=Kn8;`j82JEsSNkYSD_12gF1{Yrro zO5wALkaWvItr|xwP-k+~ge%k$4tbfnakwgmyenNdPl3O6Aoi`&%MWR*I`2TtL0>$J zFEEWWetryc>}i-w;lRAjqry?`#?hfT-yuh>>2Vqi@7(|Y`#I(HDz*}fRo%F*HeJHA0>#nR5-Tw-+aG3QJIqEb5oe6F5=(T` zfdQQ?KGTisVlBq)px(Di6LG3`kCiCbswQWwk4e8i)y_{Ax9KEz=g6roU9Kdj&a$8S zS;UWS6LlFqe&aH%uj9WtI%_Mjm6d$uhHH0IznK2~)v23TRNJ(SVLwxNrQ%L_J?ZOI zc3c-5>t`i44pws~sCse^>;tKTY)*8NHaan084#g~RylG#*rz)?*r}H#E{KR<9vc@I zO}`yJYwKVW5)-jP8?EZc^=02?=itbHLKzU9sEu718yTUEO^8?Z=lZcPTRZd;z8n&} z1kVz&L=zjoNEtAJd%~%!3YRPJQh_t!-(07zUYyFyoAY9qq8>FD*N$p^vCqynJ)NzC z#ry;Gb@=`OEAHm9tIHI6FFVd2D2K5}sP=uAJn>Wrzn@ z{(er5iJL(N5$2fjhk#6kYRr|yG0eeo}x~okc z{L8H=eOK)~{+|23*ROu?%kIIwUX8ewzqEV#rQmH-f1Y>eXZxLQTX#n*zp2^SU`X9D zJy3nW_a$}b^>*iCGSlWQPL7&*I{cZHA)h;>o=Exi36vFTl7};vzPRe zIL_bvdwf`BrFL`mg;#Hk|GqIO&Eo>+Wg|tQck0wxES5Y4kUPNiF(=OI6{FQ^MtgcD zL?&rGv{X7CkqJwv#`-yk#rGvr&IbRp5{tO;cnkaWm-uocI3Jytj?3~89vqn%XYp81 zzM?D(Dqw;KzK80$-yn&Mvo*Z}Ybj^Xerh-NOcL~o4d==}?k;(f>tBc(R`o_#QlZM( z52Si=_u_nf-Ki%n`o}swU1Z(m-M3P1ta_f?eIw@3ou9h&J3J%9X5Ps8AI#d?>y4|< z>$|Aqe_wJfG?i<(9s9<>B)c97lXmSJ)xCM>fp< DnoL^BYBbzm`oqSf%Ncc_x7QCKhxxE`19!ScuCFT{JwpHEeo1;{C~QK_#Wm|zHNHgYm}*n7d%!E z`=F5Mof!6aJv=*hQG9eF>tmn4?c?_&?MA7~4iDU^o_yH;{x)NT?d%OD`QPt#>o(;? z{QWGy+0Sd}~ci>6`vDuD|B{ zN%s>2Z$^b0dwL~IpR;XWcA?d|p--Hi`s0PjZ=Ke9y-@PvrnyC1T!ZbMu5bK4V$8&u z{m%4w&TjprmOcCaSU7f4u_p2I`pffA%RkYtj>_wOWKi0V4gValqv}(um$$9h@Iv(Q z>rUG830XsHr9nCCbKZ7;Z-u&l%)g4XE55gX!E4=f>%5Pgk2Fl)GWx`ctKN41{B?WZ zrgfj4|8UN_F+WIlzC7Td%RY}UH77oszWOQYUArT@W^9uFD0fZVeVXs%4DlTNrDk(7 zR{YdCMCH?Mz}BX@`#L1n|COyS%D&o;r8SN3((O7mvm$ zc+@WUvKVg9d=b0dev0E0-v)g*E7EEFizCXr{=)TVFJquY!Szb(c>1;7vREQwQSzA5 zw}*;?jBhRAMka619NalUaqx#hwYus&>)lz?2W{Q#Z|!{H>z`7-dNRi5yN|p|mmFO;$Ip1te&RC|;=7hy_1%16^mkpB%3GXMO4D8`j%~VE z@R6+7uwPfb&}HnqFI?(%${~G;$iug5(U7;?emvMTcb9m7&jL5k$$h^caQOJ2$$2x6 zXC27Mo@X3eI&)i!_b`uFKB-l9aaek7aqkz-H04}j9(N}wA|Bb#G;QE8!m2G*R^`RafzW=_h>)#xZKC^k` z@rgcvcr2OWe<81KP1M95`lzj&8={{+bnAD;rc=)yPfywN^39@7#rsN*`wqRc@~c#v z9Yg=YzPyWPrDG@sW@d8=;k^2%#J z&X;YSF@3^a_b;NZh5oL5e@&mTA69Q)ugRZwaZHcImB-~5&&EV~?zW$E*~3YdQGV*$ z`2+hW4R)C){bWvK_}%l9`rY)J>*;kj;m()W(!bg=?8bMUOEy0H+j}p}yBt3~$7Vrc zd|Ic~n`2@#$W2=HvKqP|H&&uZMW~Zy41QN{I>fa(aY>ZE&6#{UQv&@ zyUV}qK3?6>r($HU&xg3hw}k_kZ43jq!wlBk3iiqV5)JObIb7$hQ)PL!A`$O4wda`> z6XE3^!55l)WRm+L6+w{)9_I5%4||$Du~IUI8^w*}*+ka8IBPNP7U61|qgLWx&g|7B z0adl{1kZrr*<5<2>02?blW`jq7t_ZW*9zemp;>L&MBH@qcUfgUZTfX1SdS&Oed(qi zV=X3h*km>9FQL5%jA`4g8jC53mZvHC^1U0YrL_q+JN>!1cFd0>_w{?bs&4BW{?CPY z*Isn!?PM+4x#Z7(eeb(5;N9b=79E>)U2|jSfDLl>^t3M9ubsR4&Gf$Bhw|=t51Ja` zXwzLaZ12gJ{xNV()1pM{+S$YAs0Q|aZ_l8xRVM;&&()2*ec1Et@ZsOdQqF09$hC91 zmh9?2;K}(r5`*uEKUy+srD%w^VbxF1MW*zhvf;|1LlgJED(mgkXJ*FXl;(eyZ`c>L zd(@JtZ%Fp6sSg-(DdnA@4Lx^^Ii$#(ar3G1y(S%gry`)=v}bMnx;LDf)}vd_l$Wm@ zt^f1MSKU9I7M8Q(BT%Ze_&EI_Jyvn}&{zWS~e`BYb-1|(`-HDqHjQ(Ez`>LOdwtVk(Zt2zK zTRM4s{MMcI0TnxLudN>0``kynjRjddY6cbCr?`$@dFAY)Z@#!YWbl{YyfQGa{_TMq zb5~^C-j+FVVUG~+VC@0drw+Ts9y>PcrsJa5*G{Z<-?sfqwwv;uea=(XNH5BMzceje z@!4+u!F?LlLhq&HiZ$==`Fhor)UVcW`+1DY`OMXuw)JxkPdRi&`^&IDcOnvkb4Ay0Nlt=f{Htd6H%ifIC1 zZY<$mdc?UAV0sj1l{NBF=7xD@u#yvoMS40vabJe=I9lhc8`ca8-?MA1mdLR5b zaSuMW-L(Fz$IjqqZy;`&=WAojlpM@nk(K1JhA)_>@JMTmP1NC{vP6~>uf4y&Y5i9j zD)*V|cJ6#~%Wq2zq$ip9r)g%6YwSAL<-^|wob73FOC2<1c~QT4&hDf8=x=Zl=T_Q< z-#b3Gn|}YgdpCw&R6aYh;(dE&-~=lfl`qm6p$;I)MT-+fq;^X-+c7yb|{zuu&Z94qak_%Qw58DDIW+q85} zzq9VU+ZmH@Er{PX`%aHM#cLkx-@Y0Xr}jFyaNA`?;pV8BH&hvt@tB!oti)n2J?npC z7+J|Xg0mL7pDvY?Tj+c;6=Pbx&9l6VwMu63WeMkO@sXX%9(%J@HtY#tYtrz#;QF=_ z<-Nd{=B!I!E#5L>#Iv^s-%gmn_3nbz%{!m|?DEl*4oA9ZEVl+UElGx0v|{g?J*Ru# ze0tSPiNmVZDZ8KFmbzi>x=%JvNw)6QN9VHDX4}N~*X%qvE$)ry&+qto@3E*Or&ixt zWLvX#f;@Kkl5<;1JZ7}~(PQ@DlweK$2k*Xm>E`8mpPb+Ki+KFcAL-s}?Bu>TcdqAz z3uP54=OVdu`){hPs=1$@&|O9E;gNp*;`xn z=_Jz4;}oqg%vxn<{-CoMrD1;aJE^)sFdf19;$rbCA5usMwtiKjf;K0TjSyGF$8_&8 zFY~S8^S=uj?AiTa9hAf3(rNpKEh!%pGUJ)GPDcuy?Z&+sSulD@_=$5bZd>-^8}CQs<84l^za4sXSIgFX&$!w<;`{f@uC6&cD|A-xU1b%$E~L48d9KL}vwhX}gAdju r&idx;8UKOFQ8$-lYDX>f8s~7+df;ULKlh#7*w_8Qo}Y2;TKxMjSF^}3