From 0c97c40db2dfdb9e6f33f9bc5d311a207480610c Mon Sep 17 00:00:00 2001 From: Caleb Stauffer Date: Mon, 13 Apr 2020 16:50:50 -0400 Subject: [PATCH] init --- .editorconfig | 9 + .gitignore | 1 + .phpcs.xml.dist | 49 ++ .travis.yml | 58 ++ Image_Tag.php | 805 +++++++++++++++++++++++++ bin/install-wp-tests.sh | 155 +++++ class-get-image-most-common-colors.php | 341 +++++++++++ image_tags/Image_Tag_JoeSchmoe.php | 90 +++ image_tags/Image_Tag_Picsum.php | 309 ++++++++++ image_tags/Image_Tag_Placeholder.php | 190 ++++++ image_tags/Image_Tag_Unsplash.php | 166 +++++ image_tags/Image_Tag_WP.php | 90 +++ image_tags/Image_Tag_WP_Attachment.php | 650 ++++++++++++++++++++ image_tags/Image_Tag_WP_Theme.php | 167 +++++ image_tags/index.php | 4 + phpunit.xml.dist | 28 + samples.php | 65 ++ tests/bootstrap.php | 32 + tests/img.jpg | Bin 0 -> 313427 bytes tests/test-arrayaccess.php | 33 + tests/test-attributes.php | 57 ++ tests/test-external.php | 114 ++++ tests/test-features.php | 25 + tests/test-joeschmoe.php | 67 ++ tests/test-picsum.php | 402 ++++++++++++ tests/test-placeholder.php | 190 ++++++ tests/test-plugin.php | 29 + tests/test-unsplash.php | 147 +++++ tests/test-wp-attachment.php | 437 ++++++++++++++ tests/test-wp-theme.php | 223 +++++++ 30 files changed, 4933 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .phpcs.xml.dist create mode 100644 .travis.yml create mode 100644 Image_Tag.php create mode 100755 bin/install-wp-tests.sh create mode 100644 class-get-image-most-common-colors.php create mode 100644 image_tags/Image_Tag_JoeSchmoe.php create mode 100644 image_tags/Image_Tag_Picsum.php create mode 100644 image_tags/Image_Tag_Placeholder.php create mode 100644 image_tags/Image_Tag_Unsplash.php create mode 100644 image_tags/Image_Tag_WP.php create mode 100644 image_tags/Image_Tag_WP_Attachment.php create mode 100644 image_tags/Image_Tag_WP_Theme.php create mode 100644 image_tags/index.php create mode 100644 phpunit.xml.dist create mode 100644 samples.php create mode 100644 tests/bootstrap.php create mode 100644 tests/img.jpg create mode 100644 tests/test-arrayaccess.php create mode 100644 tests/test-attributes.php create mode 100644 tests/test-external.php create mode 100644 tests/test-features.php create mode 100644 tests/test-joeschmoe.php create mode 100644 tests/test-picsum.php create mode 100644 tests/test-placeholder.php create mode 100644 tests/test-plugin.php create mode 100644 tests/test-unsplash.php create mode 100644 tests/test-wp-attachment.php create mode 100644 tests/test-wp-theme.php diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3456797 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +[*] +charset = utf-8 +end_of_line = lf +indent_style = tab +trim_trailing_whitespace = true + +[*.yml] +indent_size = 2 +indent_style = space \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a5719ae --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/report diff --git a/.phpcs.xml.dist b/.phpcs.xml.dist new file mode 100644 index 0000000..067d574 --- /dev/null +++ b/.phpcs.xml.dist @@ -0,0 +1,49 @@ + + + Generally-applicable sniffs for WordPress plugins. + + + . + /vendor/ + /node_modules/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..0909c8c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,58 @@ +dist: trusty + +language: php + +os: linux + +notifications: + email: + on_success: never + on_failure: change + +branches: + only: + - master + +cache: + directories: + - $HOME/.composer/cache + +php: + - 7.1.18 + - 7.2.29 + - 7.3.16 + +env: + - WP_VERSION=5.4 WP_MULTISITE=0 + - WP_VERSION=5.4 WP_MULTISITE=1 + - WP_VERSION=5.3 WP_MULTISITE=0 + - WP_VERSION=5.3 WP_MULTISITE=1 + - WP_VERSION=5.2 WP_MULTISITE=0 + - WP_VERSION=5.2 WP_MULTISITE=1 + - WP_VERSION=5.1 WP_MULTISITE=0 + - WP_VERSION=5.1 WP_MULTISITE=1 + +before_script: + - export PATH="$HOME/.composer/vendor/bin:$PATH" + - | + if [ -f ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini ]; then + phpenv config-rm xdebug.ini + else + echo "xdebug.ini does not exist" + fi + - | + if [[ ! -z "$WP_VERSION" ]] ; then + bash bin/install-wp-tests.sh wordpress_test root '' localhost $WP_VERSION + composer global require "phpunit/phpunit=7.5.*" + fi + - | + if [[ "$WP_TRAVISCI" == "phpcs" ]] ; then + composer global require wp-coding-standards/wpcs + phpcs --config-set installed_paths $HOME/.composer/vendor/wp-coding-standards/wpcs + fi + +script: + - | + if [[ ! -z "$WP_VERSION" ]] ; then + phpunit + fi diff --git a/Image_Tag.php b/Image_Tag.php new file mode 100644 index 0000000..6c9a85f --- /dev/null +++ b/Image_Tag.php @@ -0,0 +1,805 @@ +img tags. + * Author: Caleb Stauffer + * Author URI: https://develop.calebstauffer.com + * Version: 1.0 + */ + +defined( 'ABSPATH' ) || die(); + +/** + * Class: Image_Tag + */ +class Image_Tag implements ArrayAccess { + + /** + * @var string Encoded transparent gif. + */ + const BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; + + /** + * @var array $attributes Internal attributes of img tag. + */ + protected $attributes = array( + + # Strings. + 'id' => null, + 'alt' => null, + 'src' => null, + 'width' => null, + 'height' => null, + + # Arrays. + 'class' => array(), + 'style' => array(), + 'sizes' => array(), + 'srcset' => array(), + + ); + + /** + * @var array $settings Settings of img tag. + */ + protected $settings = array(); + + /** + * @param $source + * @param array $attributes + * @param array $settings + * @return Image_Tag + */ + static function create( $source, $attributes = array(), array $settings = array() ) { + $attributes = ( array ) $attributes; + + # If integer, create WordPress attachment image. + if ( is_int( $source ) ) + return new Image_Tag_WP_Attachment( $source, $attributes, $settings ); + + # If source is "picsum", create picsum.photos image. + if ( 'picsum' === $source ) + return new Image_Tag_Picsum( $attributes, $settings ); + + # If source is "placeholder", create Placeholder image. + if ( 'placeholder' === $source ) + return new Image_Tag_Placeholder( $attributes, $settings ); + + # If source is "joeschmoe", create JoeSchmoe image. + if ( 'joeschmoe' === $source ) + return new Image_Tag_JoeSchmoe( $attributes, $settings ); + + # If source is "unsplash", create Unsplash image. + if ( 'unsplash' === $source ) + return new Image_Tag_Unsplash( $attributes, $settings ); + + # If URL, create external image. + if ( ( bool ) wp_http_validate_url( $source ) ) { + $attributes['src'] = $source; + return new Image_Tag( $attributes, $settings ); + } + + # If string, create WordPress theme image. + if ( is_string( $source ) ) + return new Image_Tag_WP_Theme( $source, $attributes, $settings ); + + trigger_error( sprintf( 'Unable to determine image type from source: %s.', $source ), E_USER_WARNING ); + } + + /** + * Construct. + * + * @param $source + * @param array $attributes + * @param array $settings + * @uses $this->set_attributes() + * @uses $this->set_settings() + */ + function __construct( array $attributes = array(), array $settings = array() ) { + $this->set_attributes( $attributes ); + $this->set_settings( $settings ); + } + + /** + * Getter. + * + * @param string $key + * @return mixed + */ + function __get( $key ) { + return $this->attributes[$key]; + } + + /** + * To string. + * + * @uses $this->get_attributes() + * @return string + */ + function __toString() { + $array = array( 'get_attributes() as $key => $value ) + $array[$key] = $key . '="' . esc_attr( $value ) . '"'; + + $array[] = '/>'; + + $array = apply_filters( 'image_tag/_output/array', $array ); + + $string = $this->get_setting( 'before_output' ); + $string .= apply_filters( 'image_tag/_output/string', implode( ' ', $array ) ); + $string .= $this->get_setting( 'after_output' ); + + return apply_filters( 'image_tag/output', $string ); + } + + /** + * Check if the image is valid. + * + * @uses $this->get_attribute() + * @return bool + */ + function is_valid() { + return !empty( $this->get_attribute( 'src' ) ); + } + + /** + * Check type of image. + * + * @param string $type + * @return bool + */ + function is_type( string $type ) { + switch ( strtolower( $type ) ) { + + case 'remote': + case 'external': + return ( + Image_Tag::class === get_class( $this ) + || $this->is_type( '__placeholder' ) + ); + + case '__placeholder': + return ( + $this->is_type( 'picsum' ) + || $this->is_type( 'joeschmoe' ) + || $this->is_type( 'placeholder' ) + ); + + case 'attachment': + case 'wp-attachment': + case 'wordpress-attachment': + return is_a( $this, 'Image_Tag_WP_Attachment' ); + + case 'theme': + case 'wp-theme': + case 'wordpress-theme': + return is_a( $this, 'Image_Tag_WP_Theme' ); + + case 'wp': + case 'local': + case 'internal': + case 'wordpress': + return is_a( $this, 'Image_Tag_WP' ); + + case 'picsum': + return is_a( $this, 'Image_Tag_Picsum' ); + + case 'joeschmoe': + return is_a( $this, 'Image_Tag_JoeSchmoe' ); + + case 'placeholder': + return is_a( $this, 'Image_Tag_Placeholder' ); + + } + + return false; + } + + /** + * Set an array of settings. + * + * @param array + * @uses $this->set_setting() + */ + function set_settings( array $settings ) { + foreach ( $settings as $key => $value ) + $this->set_setting( $key, $value ); + } + + /** + * Public acccess to set setting. + * + * @param string $key + * @param mixed $value + * @uses $this->_set_setting() + */ + function set_setting( string $key, $value ) { + $method_name = 'set_' . $key . '_setting'; + $method_name = str_replace( '-', '_', $method_name ); + + method_exists( $this, $method_name ) + ? $this->$method_name( $value ) + : $this->_set_setting( $key, $value ); + } + + /** + * Internal access to set setting. + * + * @param string $key + * @param mixed $value + */ + protected function _set_setting( string $key, $value ) { + $this->settings[$key] = $value; + } + + /** + * Public access to get setting. + * + * @param string $key + * @uses $this->_get_setting() + * @return mixed + */ + function get_setting( string $key ) { + $method_name = 'get_' . $key . '_setting'; + $method_name = str_replace( '-', '_', $method_name ); + + return method_exists( $this, $method_name ) + ? $this->$method_name() + : $this->_get_setting( $key ); + } + + protected function get_before_output_setting() { + return array_key_exists( 'before_output', $this->settings ) + ? $this->_get_setting( 'before_output' ) + : ''; + } + + protected function get_after_output_setting() { + return array_key_exists( 'after_output', $this->settings ) + ? $this->_get_setting( 'after_output' ) + : ''; + } + + /** + * Internal access to get setting. + * + * @param string $key + * @return mixed + */ + protected function _get_setting( string $key ) { + return $this->settings[$key]; + } + + /** + * Set an array of attributes. + * + * @param array $attributes + * @uses $this->set_attribute() + */ + function set_attributes( array $attributes ) { + foreach ( $attributes as $key => $value ) + $this->set_attribute( $key, $value ); + } + + /** + * Public access to set attribute. + * + * @param string $key + * @param mixed $value + * @uses $this->_set_attribute() + */ + function set_attribute( string $key, $value ) { + $method_name = 'set_' . $key . '_attribute'; + $method_name = str_replace( '-', '_', $method_name ); + + method_exists( $this, $method_name ) + ? $this->$method_name( $value ) + : $this->_set_attribute( $key, $value ); + } + + /** + * Internal setter for "class" attribute. + * + * @param array|string $classes + * @uses $this->_set_attribute() + */ + protected function set_class_attribute( $classes ) { + if ( is_string( $classes ) ) + $classes = explode( ' ', $classes ); + + if ( !is_array( $classes ) ) { + trigger_error( sprintf( 'Value of type %s is not valid for class attribute.', gettype( $classes ) ), E_USER_NOTICE ); + return; + } + + $classes = array_map( 'trim', $classes ); + $this->_set_attribute( 'class', $classes ); + } + + /** + * Internal setter for "sizes" attribute. + * + * @param array|string $sizes + * @uses $this->_set_attribute() + */ + protected function set_sizes_attribute( $sizes ) { + if ( is_string( $sizes ) ) + $sizes = explode( ', ', $sizes ); + + if ( !is_array( $sizes ) ) { + trigger_error( sprintf( 'Value of type %s is not valid for sizes attribute.', gettype( $sizes ) ), E_USER_NOTICE ); + return; + } + + $sizes = array_map( 'trim', $sizes ); + $this->_set_attribute( 'sizes', $sizes ); + } + + /** + * Internal setter for "srcset" attribute. + * + * @param array|string $srcset + * @uses $this->_set_attribute() + */ + protected function set_srcset_attribute( $srcset ) { + if ( is_string( $srcset ) ) + $srcset = explode( ', ', $srcset ); + + if ( !is_array( $srcset ) ) { + trigger_error( sprintf( 'Value of type %s is not valid for srcset attribute.', gettype( $srcset ) ), E_USER_NOTICE ); + return; + } + + $srcset = array_map( 'trim', $srcset ); + $this->_set_attribute( 'srcset', $srcset ); + } + + /** + * Internal setter for "style" attribute. + * + * @param array|string $styles + * @uses $this->_set_attribute() + */ + protected function set_style_attribute( $styles ) { + if ( is_string( $styles ) ) + $styles = explode( ';', $styles ); + + if ( !is_array( $styles ) ) { + trigger_error( sprintf( 'Value of type %s is not valid for style attribute.', gettype( $styles ) ), E_USER_NOTICE ); + return; + } + + $styles = array_map( 'trim', $styles ); + $this->_set_attribute( 'style', $styles ); + } + + /** + * Internal setter for attribute. + * + * @param string $key + * @param mixed $value + */ + protected function _set_attribute( string $key, $value ) { + $this->attributes[$key] = $value; + } + + /** + * Public access to get attributes. + * + * @uses $this->get_attribute() + * @return array + */ + function get_attributes() { + $attributes = array(); + + foreach ( array_keys( $this->attributes ) as $key ) + $attributes[$key] = $this->get_attribute( $key ); + + return array_filter( $attributes ); + } + + /** + * Public access to get attribute. + * + * @param string $key + * @uses $this->_get_attribute() + * @return mixed + */ + function get_attribute( string $key ) { + $method_name = 'get_' . $key . '_attribute'; + $method_name = str_replace( '-', '_', $method_name ); + + return method_exists( $this, $method_name ) + ? $this->$method_name() + : $this->_get_attribute( $key ); + } + + /** + * Internal getter for "class" attribute. + * + * @return string + */ + protected function get_class_attribute() { + return implode( ' ', array_unique( $this->attributes['class'] ) ); + } + + /** + * Internal getter for "sizes" attribute. + * + * @return string + */ + protected function get_sizes_attribute() { + return implode( ', ', $this->attributes['sizes'] ); + } + + /** + * Internal getter for "srcset" attribute. + * + * @return string + */ + protected function get_srcset_attribute() { + return implode( ', ', $this->attributes['srcset'] ); + } + + /** + * Internal getter for "style" attribute. + * + * @return string + */ + protected function get_style_attribute() { + return trim( implode( '; ', $this->attributes['style'] ) ); + } + + /** + * Internal access to get attribute. + * + * @param string $key + * @return mixed + */ + protected function _get_attribute( string $key ) { + return $this->attributes[$key]; + } + + /** + * Helper to add class name. + * + * @param string $class + */ + function add_class( string $class ) { + $this->attributes['class'][] = $class; + } + + /** + * Helper to remove class name. + * + * @param string $class + */ + function remove_class( string $class ) { + foreach ( $this->attributes['class'] as $i => $_class ) + if ( $class === $_class ) + unset( $this->attributes['class'][$i] ); + } + + /** + * Helper to add size to "sizes" attribute. + * + * @param string $size + */ + function add_size( string $size ) { + $this->attributes['sizes'][] = $size; + } + + /** + * Helper to add source to "srcset" attribute. + * + * @param string $srcset + */ + function add_srcset( string $srcset ) { + $this->attributes['srcset'][] = $srcset; + } + + /** + * Helper to add style to "style" attribute. + * + * @param string $style + */ + function add_style( string $style ) { + $this->attributes['style'][] = $style; + } + + /** + * Get primary width of image. + * + * @uses $this->get_attribute() + * @return null|int + */ + function get_width() { + return $this->get_attribute( 'width' ); + } + + /** + * Get primary height of image. + * + * @uses $this->get_attribute() + * @return null|int + */ + function get_height() { + return $this->get_attribute( 'height' ); + } + + /** + * Get image ratio. + * + * @uses $this->get_height() + * @uses $this->get_width() + * @return float + */ + function get_ratio() { + $height = $this->get_height(); + $width = $this->get_width(); + + if ( + !is_numeric( $width ) + || !is_numeric( $height ) + || empty( $width ) + || empty( $height ) + ) + return null; + + return $height / $width; + } + + /** + * Request image with GET method. + * + * @param bool $force Flag to use cached value or make new request. + * @uses $this->get_attribute() + * @uses wp_remote_get() + * @return WP_Error|array + */ + function http( bool $force = false ) { + static $_cache = array(); + + $src = $this->get_attribute( 'src' ); + + if ( + !$force + && isset( $_cache[$src] ) + ) + return $_cache[$src]; + + return ( $_cache[$src] = wp_remote_get( $src ) ); + } + + /** + * Transpose attributes and settings into Picsum image. + * + * @param array $attributes + * @param array $settings + * @uses $this->get_width() + * @uses $this->get_height() + * @uses Image_Tag::create() + * @return Image_Tag_Picsum + */ + function picsum( $attributes = array(), array $settings = array() ) { + $attributes = wp_parse_args( ( array ) $attributes, $this->attributes ); + $settings = wp_parse_args( $settings, $this->settings ); + $settings = wp_parse_args( $settings, array( + 'width' => $this->get_width(), + 'height' => $this->get_height(), + ) ); + + return Image_Tag::create( 'picsum', $attributes, $settings ); + } + + /** + * Transpose attributes and settings into Placeholder image. + * + * @param array $attributes + * @param array $settings + * @uses $this->get_width() + * @uses $this->get_height() + * @uses Image_Tag::create() + * @return Image_Tag_Placeholder + */ + function placeholder( $attributes = array(), array $settings = array() ) { + $attributes = wp_parse_args( ( array ) $attributes, $this->attributes ); + $settings = wp_parse_args( $settings, $this->settings ); + $settings = wp_parse_args( $settings, array( + 'width' => $this->get_width(), + 'height' => $this->get_height(), + ) ); + + return Image_Tag::create( 'placeholder', $attributes, $settings ); + } + + /** + * Transpose attributes and settings into Joe Schmoe image. + * + * @param array $attributes + * @param array $settings + * @uses Image_Tag::create() + * @return Image_Tag_JoeSchmoe + */ + function joeschmoe( $attributes = array(), array $settings = array() ) { + $settings = wp_parse_args( $settings, $this->settings ); + $settings = wp_parse_args( $settings, array( + 'width' => $this->get_width(), + 'height' => $this->get_height(), + ) ); + + $_attributes = $this->attributes; + + unset( + $_attributes['srcset'] + ); + + $attributes = wp_parse_args( ( array ) $attributes, $_attributes ); + + return Image_Tag::create( 'joeschmoe', $attributes, $settings ); + } + + /** + * Transpose attributes and settings into Unsplash image. + * + * @param array $attributes + * @param array $settings + * @uses Image_Tag::create() + * @return Image_Tag_Unsplash + */ + function unsplash( $attributes = array(), array $settings = array() ) { + $attributes = wp_parse_args( ( array ) $attributes, $this->attributes ); + $settings = wp_parse_args( $settings, $this->settings ); + $settings = wp_parse_args( $settings, array( + 'width' => $this->get_width(), + 'height' => $this->get_height(), + ) ); + + return Image_Tag::create( 'unsplash', $attributes, $settings ); + } + + /** + * Create noscript version of image tag. + * + * @param array $attributes + * @param array $settings + * + * @uses $this->set_attributes() + * @uses $this->set_settings() + * @uses $this->set_setting() + * @uses $this->get_setting() + * @uses $this->add_class() + * + * @return $this + */ + function noscript( array $attributes = array(), array $settings = array() ) { + $nojs = clone $this; + + $nojs->set_attributes( $attributes ); + $nojs->set_settings( $settings ); + + $nojs->set_setting( 'before_output', '' . $this->get_setting( 'after_output' ) ); + + $nojs->add_class( 'no-js' ); + + return $nojs; + } + + /** + * Create lazyloaded version of image tag. + * + * @param array $attributes + * @param array $settings + * + * @uses $this->set_attributes() + * @uses $this->set_settings() + * @uses $this->add_class() + * @uses $this->get_attribute() + * @uses $this->set_attribute() + * @uses $this->noscript() + * + * @return $this + */ + function lazyload( array $attributes = array(), array $settings = array() ) { + $attributes = wp_parse_args( $attributes, array( + 'data-src' => null, + 'data-sizes' => null, + 'data-srcset' => null, + ) ); + + $lazyload = clone $this; + + $lazyload->set_attributes( $attributes ); + $lazyload->set_settings( $settings ); + + $lazyload->add_class( 'lazyload hide-if-no-js' ); + + if ( !empty( $lazyload->get_attribute( 'src' ) ) ) { + $lazyload->set_attribute( 'data-src', $lazyload->get_attribute( 'src' ) ); + $lazyload->set_attribute( 'src', static::BLANK ); + } + + if ( !empty( $lazyload->get_attribute( 'srcset' ) ) ) { + $lazyload->set_attribute( 'data-srcset', $lazyload->get_attribute( 'srcset' ) ); + $lazyload->set_attribute( 'srcset', array() ); + } + + if ( !empty( $lazyload->get_attribute( 'sizes' ) ) ) { + $lazyload->set_attribute( 'data-sizes', $lazyload->get_attribute( 'sizes' ) ); + $lazyload->set_attribute( 'sizes', array() ); + } else if ( !empty( $lazyload->get_attribute( 'data-srcset' ) ) ) + $lazyload->set_attribute( 'data-sizes', 'auto' ); + + $lazyload->set_setting( 'after_output', $this->noscript() ); + + do_action( 'created_lazyload_image', $lazyload ); + + return $lazyload; + } + + /** + * ArrayAccess: exists + * + * @param $offset + * @return bool + */ + function offsetExists( $offset ) { + return ( + isset( $this->attributes[$offset] ) + || isset( $this->settings[$offset] ) + ); + } + + /** + * ArrayAccess: get + * + * @param $offset + * @return mixed + */ + function offsetGet( $offset ) { + if ( isset( $this->attributes[$offset] ) ) + return $this->attributes[$offset]; + + if ( isset( $this->settings[$offset] ) ) + return $this->settings[$offset]; + + return null; + } + + /** + * ArrayAccess: set + * + * @param $offset + * @param $value + * @uses $this->set_attribute() + */ + function offsetSet( $offset, $value ) { + $this->set_attribute( $offset, $value ); + } + + /** + * ArrayAccess: unset + * + * @param $offset + * @uses $this->set_attribute() + */ + function offsetUnset( $offset ) { + $this->set_attribute( $offset, null ); + } + +} + +require_once 'image_tags/Image_Tag_WP.php'; +require_once 'image_tags/Image_Tag_WP_Attachment.php'; +require_once 'image_tags/Image_Tag_WP_Theme.php'; +require_once 'image_tags/Image_Tag_Picsum.php'; +require_once 'image_tags/Image_Tag_Placeholder.php'; +require_once 'image_tags/Image_Tag_JoeSchmoe.php'; +require_once 'image_tags/Image_Tag_Unsplash.php'; + +?> diff --git a/bin/install-wp-tests.sh b/bin/install-wp-tests.sh new file mode 100755 index 0000000..5ceac4b --- /dev/null +++ b/bin/install-wp-tests.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash + +if [ $# -lt 3 ]; then + echo "usage: $0 [db-host] [wp-version] [skip-database-creation]" + exit 1 +fi + +DB_NAME=$1 +DB_USER=$2 +DB_PASS=$3 +DB_HOST=${4-localhost} +WP_VERSION=${5-latest} +SKIP_DB_CREATE=${6-false} + +TMPDIR=${TMPDIR-/tmp} +TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//") +WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib} +WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress/} + +download() { + if [ `which curl` ]; then + curl -s "$1" > "$2"; + elif [ `which wget` ]; then + wget -nv -O "$2" "$1" + fi +} + +if [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+\-(beta|RC)[0-9]+$ ]]; then + WP_BRANCH=${WP_VERSION%\-*} + WP_TESTS_TAG="branches/$WP_BRANCH" + +elif [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+$ ]]; then + WP_TESTS_TAG="branches/$WP_VERSION" +elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then + if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then + # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x + WP_TESTS_TAG="tags/${WP_VERSION%??}" + else + WP_TESTS_TAG="tags/$WP_VERSION" + fi +elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + WP_TESTS_TAG="trunk" +else + # http serves a single offer, whereas https serves multiple. we only want one + download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json + grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json + LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') + if [[ -z "$LATEST_VERSION" ]]; then + echo "Latest WordPress version could not be found" + exit 1 + fi + WP_TESTS_TAG="tags/$LATEST_VERSION" +fi +set -ex + +install_wp() { + + if [ -d $WP_CORE_DIR ]; then + return; + fi + + mkdir -p $WP_CORE_DIR + + if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + mkdir -p $TMPDIR/wordpress-nightly + download https://wordpress.org/nightly-builds/wordpress-latest.zip $TMPDIR/wordpress-nightly/wordpress-nightly.zip + unzip -q $TMPDIR/wordpress-nightly/wordpress-nightly.zip -d $TMPDIR/wordpress-nightly/ + mv $TMPDIR/wordpress-nightly/wordpress/* $WP_CORE_DIR + else + if [ $WP_VERSION == 'latest' ]; then + local ARCHIVE_NAME='latest' + elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+ ]]; then + # https serves multiple offers, whereas http serves single. + download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json + if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then + # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x + LATEST_VERSION=${WP_VERSION%??} + else + # otherwise, scan the releases and get the most up to date minor version of the major release + local VERSION_ESCAPED=`echo $WP_VERSION | sed 's/\./\\\\./g'` + LATEST_VERSION=$(grep -o '"version":"'$VERSION_ESCAPED'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1) + fi + if [[ -z "$LATEST_VERSION" ]]; then + local ARCHIVE_NAME="wordpress-$WP_VERSION" + else + local ARCHIVE_NAME="wordpress-$LATEST_VERSION" + fi + else + local ARCHIVE_NAME="wordpress-$WP_VERSION" + fi + download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz + tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WP_CORE_DIR + fi + + download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php +} + +install_test_suite() { + # portable in-place argument for both GNU sed and Mac OSX sed + if [[ $(uname -s) == 'Darwin' ]]; then + local ioption='-i.bak' + else + local ioption='-i' + fi + + # set up testing suite if it doesn't yet exist + if [ ! -d $WP_TESTS_DIR ]; then + # set up testing suite + mkdir -p $WP_TESTS_DIR + svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes + svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data + fi + + if [ ! -f wp-tests-config.php ]; then + download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php + # remove all forward slashes in the end + WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::") + sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php + fi + +} + +install_db() { + + if [ ${SKIP_DB_CREATE} = "true" ]; then + return 0 + fi + + # parse DB_HOST for port or socket references + local PARTS=(${DB_HOST//\:/ }) + local DB_HOSTNAME=${PARTS[0]}; + local DB_SOCK_OR_PORT=${PARTS[1]}; + local EXTRA="" + + if ! [ -z $DB_HOSTNAME ] ; then + if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then + EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" + elif ! [ -z $DB_SOCK_OR_PORT ] ; then + EXTRA=" --socket=$DB_SOCK_OR_PORT" + elif ! [ -z $DB_HOSTNAME ] ; then + EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" + fi + fi + + # create database + mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA +} + +install_wp +install_test_suite +install_db diff --git a/class-get-image-most-common-colors.php b/class-get-image-most-common-colors.php new file mode 100644 index 0000000..f98a9f6 --- /dev/null +++ b/class-get-image-most-common-colors.php @@ -0,0 +1,341 @@ + 2 ) + { + $half_delta = $delta / 2 - 1; + } + else + { + $half_delta = 0; + } + // WE HAVE TO RESIZE THE IMAGE, BECAUSE WE ONLY NEED THE MOST SIGNIFICANT COLORS. + $size = GetImageSize($img); + $scale = 1; + if ($size[0]>0) + $scale = min($this->PREVIEW_WIDTH/$size[0], $this->PREVIEW_HEIGHT/$size[1]); + if ($scale < 1) + { + $width = floor($scale*$size[0]); + $height = floor($scale*$size[1]); + } + else + { + $width = $size[0]; + $height = $size[1]; + } + $image_resized = imagecreatetruecolor($width, $height); + if ($size[2] == 1) + $image_orig = imagecreatefromgif($img); + if ($size[2] == 2) + $image_orig = imagecreatefromjpeg($img); + if ($size[2] == 3) + $image_orig = imagecreatefrompng($img); + // WE NEED NEAREST NEIGHBOR RESIZING, BECAUSE IT DOESN'T ALTER THE COLORS + imagecopyresampled($image_resized, $image_orig, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); + $im = $image_resized; + $imgWidth = imagesx($im); + $imgHeight = imagesy($im); + $total_pixel_count = 0; + for ($y=0; $y < $imgHeight; $y++) + { + for ($x=0; $x < $imgWidth; $x++) + { + $total_pixel_count++; + $index = imagecolorat($im,$x,$y); + $colors = imagecolorsforindex($im,$index); + // ROUND THE COLORS, TO REDUCE THE NUMBER OF DUPLICATE COLORS + if ( $delta > 1 ) + { + $colors['red'] = intval((($colors['red'])+$half_delta)/$delta)*$delta; + $colors['green'] = intval((($colors['green'])+$half_delta)/$delta)*$delta; + $colors['blue'] = intval((($colors['blue'])+$half_delta)/$delta)*$delta; + if ($colors['red'] >= 256) + { + $colors['red'] = 255; + } + if ($colors['green'] >= 256) + { + $colors['green'] = 255; + } + if ($colors['blue'] >= 256) + { + $colors['blue'] = 255; + } + + } + + $hex = substr("0".dechex($colors['red']),-2).substr("0".dechex($colors['green']),-2).substr("0".dechex($colors['blue']),-2); + + if ( ! isset( $hexarray[$hex] ) ) + { + $hexarray[$hex] = 1; + } + else + { + $hexarray[$hex]++; + } + } + } + + // Reduce gradient colors + if ( $reduce_gradients ) + { + // if you want to *eliminate* gradient variations use: + // ksort( &$hexarray ); + arsort( $hexarray, SORT_NUMERIC ); + + $gradients = array(); + foreach ($hexarray as $hex => $num) + { + if ( ! isset($gradients[$hex]) ) + { + $new_hex = $this->_find_adjacent( $hex, $gradients, $delta ); + $gradients[$hex] = $new_hex; + } + else + { + $new_hex = $gradients[$hex]; + } + + if ($hex != $new_hex) + { + $hexarray[$hex] = 0; + $hexarray[$new_hex] += $num; + } + } + } + + // Reduce brightness variations + if ( $reduce_brightness ) + { + // if you want to *eliminate* brightness variations use: + // ksort( &$hexarray ); + arsort( $hexarray, SORT_NUMERIC ); + + $brightness = array(); + foreach ($hexarray as $hex => $num) + { + if ( ! isset($brightness[$hex]) ) + { + $new_hex = $this->_normalize( $hex, $brightness, $delta ); + $brightness[$hex] = $new_hex; + } + else + { + $new_hex = $brightness[$hex]; + } + + if ($hex != $new_hex) + { + $hexarray[$hex] = 0; + $hexarray[$new_hex] += $num; + } + } + } + + arsort( $hexarray, SORT_NUMERIC ); + + // convert counts to percentages + foreach ($hexarray as $key => $value) + { + $hexarray[$key] = (float)$value / $total_pixel_count; + } + + if ( $count > 0 ) + { + // only works in PHP5 + // return array_slice( $hexarray, 0, $count, true ); + + $arr = array(); + foreach ($hexarray as $key => $value) + { + if ($count == 0) + { + break; + } + $count--; + $arr[$key] = $value; + } + return $arr; + } + else + { + return $hexarray; + } + + } + else + { + $this->error = "Image ".$img." does not exist or is unreadable"; + return false; + } + } + + function _normalize( $hex, $hexarray, $delta ) + { + $lowest = 255; + $highest = 0; + $colors['red'] = hexdec( substr( $hex, 0, 2 ) ); + $colors['green'] = hexdec( substr( $hex, 2, 2 ) ); + $colors['blue'] = hexdec( substr( $hex, 4, 2 ) ); + + if ($colors['red'] < $lowest) + { + $lowest = $colors['red']; + } + if ($colors['green'] < $lowest ) + { + $lowest = $colors['green']; + } + if ($colors['blue'] < $lowest ) + { + $lowest = $colors['blue']; + } + + if ($colors['red'] > $highest) + { + $highest = $colors['red']; + } + if ($colors['green'] > $highest ) + { + $highest = $colors['green']; + } + if ($colors['blue'] > $highest ) + { + $highest = $colors['blue']; + } + + // Do not normalize white, black, or shades of grey unless low delta + if ( $lowest == $highest ) + { + if ($delta <= 32) + { + if ( $lowest == 0 || $highest >= (255 - $delta) ) + { + return $hex; + } + } + else + { + return $hex; + } + } + + for (; $highest < 256; $lowest += $delta, $highest += $delta) + { + $new_hex = substr("0".dechex($colors['red'] - $lowest),-2).substr("0".dechex($colors['green'] - $lowest),-2).substr("0".dechex($colors['blue'] - $lowest),-2); + + if ( isset( $hexarray[$new_hex] ) ) + { + // same color, different brightness - use it instead + return $new_hex; + } + } + + return $hex; + } + + function _find_adjacent( $hex, $gradients, $delta ) + { + $red = hexdec( substr( $hex, 0, 2 ) ); + $green = hexdec( substr( $hex, 2, 2 ) ); + $blue = hexdec( substr( $hex, 4, 2 ) ); + + if ($red > $delta) + { + $new_hex = substr("0".dechex($red - $delta),-2).substr("0".dechex($green),-2).substr("0".dechex($blue),-2); + if ( isset($gradients[$new_hex]) ) + { + return $gradients[$new_hex]; + } + } + if ($green > $delta) + { + $new_hex = substr("0".dechex($red),-2).substr("0".dechex($green - $delta),-2).substr("0".dechex($blue),-2); + if ( isset($gradients[$new_hex]) ) + { + return $gradients[$new_hex]; + } + } + if ($blue > $delta) + { + $new_hex = substr("0".dechex($red),-2).substr("0".dechex($green),-2).substr("0".dechex($blue - $delta),-2); + if ( isset($gradients[$new_hex]) ) + { + return $gradients[$new_hex]; + } + } + + if ($red < (255 - $delta)) + { + $new_hex = substr("0".dechex($red + $delta),-2).substr("0".dechex($green),-2).substr("0".dechex($blue),-2); + if ( isset($gradients[$new_hex]) ) + { + return $gradients[$new_hex]; + } + } + if ($green < (255 - $delta)) + { + $new_hex = substr("0".dechex($red),-2).substr("0".dechex($green + $delta),-2).substr("0".dechex($blue),-2); + if ( isset($gradients[$new_hex]) ) + { + return $gradients[$new_hex]; + } + } + if ($blue < (255 - $delta)) + { + $new_hex = substr("0".dechex($red),-2).substr("0".dechex($green),-2).substr("0".dechex($blue + $delta),-2); + if ( isset($gradients[$new_hex]) ) + { + return $gradients[$new_hex]; + } + } + + return $hex; + } +} + +?> \ No newline at end of file diff --git a/image_tags/Image_Tag_JoeSchmoe.php b/image_tags/Image_Tag_JoeSchmoe.php new file mode 100644 index 0000000..ddf5473 --- /dev/null +++ b/image_tags/Image_Tag_JoeSchmoe.php @@ -0,0 +1,90 @@ + null, + 'seed' => null, + ); + + /** + * Get "gender" setting. + * + * @uses $this->_get_setting() + * @return null|string + */ + function get_gender_setting() { + $setting = $this->_get_setting( 'gender' ); + + if ( !in_array( $setting, array( + 'male', + 'female', + ) ) ) + return null; + + return $setting; + } + + /** + * Generate "src" attribute. + * + * @uses $this->get_setting() + * @return string + */ + protected function get_src_attribute() { + $src = static::BASE_URL; + + # Add gender. + if ( !empty( $this->get_setting( 'gender' ) ) ) + $src .= $this->get_setting( 'gender' ) . '/'; + + # Add seed, or random. + if ( !empty( $this->get_setting( 'seed' ) ) ) + $src .= $this->get_setting( 'seed' ) . '/'; + else + $src .= 'random/'; + + return $src; + } + + /** + * Get ratio. + * + * @return int + */ + function get_ratio() { + return 1; + } + + /** + * Prevent transposing into a JoeSchmoe image. + * + * @param array $attributes + * @param array $settings + * @return $this + */ + function joeschmoe( $attributes = array(), array $settings = array() ) { + return $this; + } + +} + +?> \ No newline at end of file diff --git a/image_tags/Image_Tag_Picsum.php b/image_tags/Image_Tag_Picsum.php new file mode 100644 index 0000000..0209ffa --- /dev/null +++ b/image_tags/Image_Tag_Picsum.php @@ -0,0 +1,309 @@ + false, + 'seed' => null, + 'width' => null, + 'height' => null, + 'random' => false, + 'image_id' => null, + 'grayscale' => false, + ); + + /** + * @var array $details + */ + protected $details = null; + + /** + * To string. + * + * @uses $this->get_setting() + * @uses Image_Tag::__toString() + * @return string + */ + function __toString() { + if ( empty( $this->get_setting( 'width' ) ) ) { + trigger_error( 'Picsum image requires width.', E_USER_WARNING ); + return ''; + } + + return parent::__toString(); + } + + /** + * Generate source URL. + * + * @uses $this->get_setting() + * @return string + */ + function get_src_attribute() { + $src = self::BASE_URL; + + # Add ID. + if ( !empty( $this->get_setting( 'image_id' ) ) ) + $src .= 'id/' . $this->get_setting( 'image_id' ) . '/'; + + # Add seed. + else if ( !empty( $this->get_setting( 'seed' ) ) ) + $src .= 'seed/' . $this->get_setting( 'seed' ) . '/'; + + # Add width. + if ( !empty( $this->get_setting( 'width' ) ) ) + $src .= ( int ) $this->get_setting( 'width' ) . '/'; + + # Add height. + if ( !empty( $this->get_setting( 'height' ) ) ) + $src .= ( int ) $this->get_setting( 'height' ) . '/'; + + # Add query params. + # Add blur. + if ( false !== $this->get_setting( 'blur' ) ) + $src = add_query_arg( 'blur', $this->get_setting( 'blur' ), $src ); + + # Add random. + if ( + !empty( $this->get_setting( 'random' ) ) + && empty( $this->get_setting( 'image_id' ) ) + && empty( $this->get_setting( 'seed' ) ) + ) + $src = add_query_arg( 'random', $this->get_setting( 'random' ), $src ); + + # Add grayscale. + if ( !empty( $this->get_setting( 'grayscale' ) ) ) + $src = add_query_arg( 'grayscale', 1, $src ); + + # If there's a trailing slash, an extra redirect is made. + return untrailingslashit( $src ); + } + + /** + * Magical getter for "width" attribute. + * + * @uses $this->_get_attribute() + * @uses $this->_get_setting() + * @return int + */ + function get_width_attribute() { + if ( !empty( $this->_get_attribute( 'width' ) ) ) + return ( int ) $this->_get_attribute( 'width' ); + + if ( !empty( $this->_get_setting( 'width' ) ) ) + return ( int ) $this->_get_setting( 'width' ); + + return 1024; + } + + /** + * Magical getter for "height" attribute. + * + * If specified, returns the height value. + * Otherwise, returns the width value. + * + * @uses $this->_get_attribute() + * @uses $this->_get_setting() + * @uses $this->get_width_attribute() + * @return int + */ + function get_height_attribute() { + if ( !empty( $this->_get_attribute( 'height' ) ) ) + return ( int ) $this->_get_attribute( 'height' ); + + if ( !empty( $this->_get_setting( 'height' ) ) ) + return ( int ) $this->_get_setting( 'height' ); + + return ( int ) $this->get_width_attribute(); + } + + /** + * Get "blur" setting. + * + * @uses $this->_get_setting() + * @return mixed + */ + function get_blur_setting() { + $blur = $this->_get_setting( 'blur' ); + + if ( true === $blur ) + return 10; + + return $blur; + } + + /** + * Get "seed" setting. + * + * @uses $this->_get_setting() + * @return string + */ + function get_seed_setting() { + $seed = $this->_get_setting( 'seed' ); + + if ( is_null( $seed ) ) + return null; + + return urlencode( sanitize_title_with_dashes( $seed ) ); + } + + /** + * Get "width" setting. + * + * @uses $this->_get_setting() + * @uses $this->_get_attribute() + * @return null|int + */ + function get_width_setting() { + if ( !empty( $this->_get_setting( 'width' ) ) ) + return ( int ) $this->_get_setting( 'width' ); + + if ( !empty( $this->_get_attribute( 'width' ) ) ) + return ( int ) $this->_get_attribute( 'width' ); + + return null; + } + + /** + * Get "height" setting. + * + * @uses $this->_get_setting() + * @uses $this->_get_attribute() + * @return null|int + */ + function get_height_setting() { + if ( !empty( $this->_get_setting( 'height' ) ) ) + return ( int ) $this->_get_setting( 'height' ); + + if ( !empty( $this->_get_attribute( 'height' ) ) ) + return ( int ) $this->_get_attribute( 'height' ); + + return null; + } + + /** + * Get "random" setting. + * + * @uses $this->_get_setting() + * @return mixed + */ + function get_random_setting() { + static $_random = 0; + $random = $this->_get_setting( 'random' ); + + if ( false === $random ) + return false; + + if ( true === $random ) + return ++$_random; + + return $random; + } + + /** + * Get image details from API (cached locally). + * + * @uses $this->get_setting() + * @uses $this->http() + * @uses wp_remote_get() + * @return object + */ + function details() { + if ( !is_null( $this->details ) ) + return $this->details; + + $image_id = $this->get_setting( 'image_id' ); + + if ( empty( $image_id ) ) { + $image_id = ( int ) wp_remote_retrieve_header( $this->http(), 'picsum-id' ); + } + + $this->set_setting( 'image_id', $image_id ); + $this->set_setting( 'random', false ); + $this->set_setting( 'seed', false ); + + $response = wp_remote_get( sprintf( '%sid/%d/info', self::BASE_URL, $image_id ) ); + + if ( is_wp_error( $response ) ) + return ( object ) array(); + + return ( $this->details = json_decode( wp_remote_retrieve_body( $response ) ) ); + } + + /** + * Prevent transposing into Picsum image. + * + * @param array $attributes + * @param array $settings + * @return $this + */ + function picsum( $attributes = array(), array $settings = array() ) { + return $this; + } + + /** + * Get an LQIP. + * + * Note: depending on the order of things, the LQIP may not be the same + * as the original image. Storing the objects or calling `Image_Tag_Picsum->details()` + * before printing the tags can resolve this. + * + * @param array $attributes + * @param array $settings + * @return Image_Tag_Picsum + */ + function lqip( array $attributes = array(), array $settings = array() ) { + + # Call this so that the image's ID is determined and stored. + if ( empty( $this->get_setting( 'image_id' ) ) ) + $this->details(); + + $_attributes = $this->attributes; + $_settings = $this->settings; + + unset( + $_attributes['srcset'], + $_attributes['sizes'], + $_settings['width'], + $_settings['height'] + ); + + $ratio = $this->get_ratio(); + $lqip_width = 100; + + $defaults = apply_filters( 'image_tag/lqip_defaults', array( + 'width' => $lqip_width, + 'height' => round( $lqip_width * $ratio ), + ), $this ); + + $attributes = wp_parse_args( $attributes, $_attributes ); + $settings = wp_parse_args( $settings, $_settings ); + $settings = wp_parse_args( $settings, $defaults ); + + $lqip = new Image_Tag_Picsum( $attributes, $settings ); + $lqip->add_class( 'lqip' ); + + return $lqip; + } + +} + +?> \ No newline at end of file diff --git a/image_tags/Image_Tag_Placeholder.php b/image_tags/Image_Tag_Placeholder.php new file mode 100644 index 0000000..4a92fd3 --- /dev/null +++ b/image_tags/Image_Tag_Placeholder.php @@ -0,0 +1,190 @@ + null, + 'width' => null, + 'height' => null, + 'bg-color' => null, + 'text-color' => null, + ); + + /** + * To string. + * + * @uses $this->get_setting() + * @uses Image_Tag::__toString() + * @return string + */ + function __toString() { + if ( empty( $this->get_setting( 'width' ) ) ) { + trigger_error( 'Placeholder image requires width.', E_USER_WARNING ); + return ''; + } + + return parent::__toString(); + } + + /** + * Get "bg-color" setting. + * + * @return string + */ + function get_bg_color_setting() { + return urlencode( str_replace( '#', '', $this->settings['bg-color'] ) ); + } + + /** + * Get "text-color" setting. + * + * @return string + */ + function get_text_color_setting() { + return urlencode( str_replace( '#', '', $this->settings['text-color'] ) ); + } + + /** + * Generate source URL. + * + * @uses $this->get_setting() + * @return string + */ + function get_src_attribute() { + $src = self::BASE_URL; + + $dimensions = ''; + + # Add width. + if ( !empty( $this->get_setting( 'width' ) ) ) + $dimensions .= ( int ) $this->get_setting( 'width' ); + + # Add height. + if ( !empty( $this->get_setting( 'height' ) ) ) + $dimensions .= 'x' . ( int ) $this->get_setting( 'height' ); + + # Add dimensions. + $src .= !empty( $dimensions ) + ? trailingslashit( $dimensions ) + : ''; + + # Add background color. + if ( !empty( $this->get_setting( 'bg-color' ) ) ) { + $src .= $this->get_setting( 'bg-color' ) . '/'; + + # Add text color. + if ( !empty( $this->get_setting( 'text-color' ) ) ) + $src .= $this->get_setting( 'text-color' ) . '/'; + } + + # Add text. + if ( !empty( $this->get_setting( 'text' ) ) ) + $src = add_query_arg( 'text', urlencode( $this->get_setting( 'text' ) ), $src ); + + return $src; + } + + /** + * Magical getter for "width" attribute. + * + * @uses $this->_get_attribute() + * @uses $this->_get_setting() + * @return null|int + */ + function get_width_attribute() { + if ( !empty( $this->_get_attribute( 'width' ) ) ) + return ( int ) $this->_get_attribute( 'width' ); + + if ( !empty( $this->_get_setting( 'width' ) ) ) + return ( int ) $this->_get_setting( 'width' ); + + return null; + } + + /** + * Magical getter for "height" attribute. + * + * @uses $this->_get_attribute() + * @uses $this->_get_setting() + * @return null|int + */ + function get_height_attribute() { + if ( !empty( $this->_get_attribute( 'height' ) ) ) + return ( int ) $this->_get_attribute( 'height' ); + + if ( !empty( $this->_get_setting( 'height' ) ) ) + return ( int ) $this->_get_setting( 'height' ); + + if ( !empty( $this->_get_attribute( 'width' ) ) ) + return ( int ) $this->_get_attribute( 'width' ); + + if ( !empty( $this->_get_setting( 'width' ) ) ) + return ( int ) $this->_get_setting( 'width' ); + + return null; + } + + /** + * Magical getter for "width" setting. + * + * @uses $this->_get_setting() + * @uses $this->_get_attribute() + * @return null|int + */ + function get_width_setting() { + if ( !empty( $this->_get_setting( 'width' ) ) ) + return ( int ) $this->_get_setting( 'width' ); + + if ( !empty( $this->_get_attribute( 'width' ) ) ) + return ( int ) $this->_get_attribute( 'width' ); + + return null; + } + + /** + * Magical getter for "height" setting. + * + * @uses $this->_get_setting() + * @uses $this->_get_attribute() + * @return null|int + */ + function get_height_setting() { + if ( !empty( $this->_get_setting( 'height' ) ) ) + return ( int ) $this->_get_setting( 'height' ); + + if ( !empty( $this->_get_attribute( 'height' ) ) ) + return ( int ) $this->_get_attribute( 'height' ); + + return null; + } + + /** + * Prevent transposing into a Placeholder image. + * + * @param array $attributes + * @param array $settings + * @return $this + */ + function placeholder( $attributes = array(), array $settings = array() ) { + return $this; + } + +} \ No newline at end of file diff --git a/image_tags/Image_Tag_Unsplash.php b/image_tags/Image_Tag_Unsplash.php new file mode 100644 index 0000000..d7856ba --- /dev/null +++ b/image_tags/Image_Tag_Unsplash.php @@ -0,0 +1,166 @@ + null, + 'user' => null, + 'user_likes' => null, + 'collection' => null, + 'update' => null, + 'featured' => false, + 'width' => null, + 'height' => null, + 'search' => array(), + ); + + function is_valid() { + return ( + !empty( $this->get_setting( 'width' ) ) + && !empty( $this->get_setting( 'height' ) ) + ); + } + + function get_src_attribute() { + $src = self::BASE_URL; + + # Add ID. + if ( !empty( $this->get_setting( 'image_id' ) ) ) + $src .= urlencode( $this->get_setting( 'image_id' ) ) . '/'; + + else if ( !empty( $this->get_setting( 'user' ) ) ) + $src .= sprintf( 'user/%s/', urlencode( $this->get_setting( 'user' ) ) ); + + else if ( !empty( $this->get_setting( 'user_likes' ) ) ) + $src .= sprintf( 'user/%s/likes/', urlencode( $this->get_setting( 'user_likes' ) ) ); + + else if ( !empty( $this->get_setting( 'collection' ) ) ) + $src .= sprintf( 'collection/%d/', urlencode( $this->get_setting( 'collection' ) ) ); + + if ( ( bool ) $this->get_setting( 'featured' ) ) + $src .= 'featured/'; + + if ( + !empty( $this->get_setting( 'width' ) ) + && !empty( $this->get_setting( 'height' ) ) + ) + $src .= sprintf( '%dx%d/', $this->get_setting( 'width' ), $this->get_setting( 'height' ) ); + + if ( !empty( $this->get_setting( 'update' ) ) ) + $src .= $this->get_setting( 'update' ) . '/'; + + if ( !empty( $this->get_setting( 'search' ) ) ) { + $search = array_map( 'urlencode', $this->get_setting( 'search' ) ); + $src .= sprintf( '?%s', implode( ',', $search ) ); + } + + return $src; + } + + function set_update_setting( $value ) { + if ( !in_array( $value, array( null, 'daily', 'weekly' ) ) ) { + trigger_error( 'Unsplash Source frequency can only be daily or weekly (default: null).' ); + $value = null; + } + + $this->_set_setting( 'update', $value ); + } + + function set_search_setting( $value ) { + $value = ( array ) $value; + $this->_set_setting( 'search', $value ); + } + + /** + * Magical getter for "width" attribute. + * + * @uses $this->_get_attribute() + * @uses $this->_get_setting() + * @return int + */ + function get_width_attribute() { + if ( !empty( $this->_get_attribute( 'width' ) ) ) + return ( int ) $this->_get_attribute( 'width' ); + + if ( !empty( $this->_get_setting( 'width' ) ) ) + return ( int ) $this->_get_setting( 'width' ); + + return 1024; + } + + /** + * Magical getter for "height" attribute. + * + * If specified, returns the height value. + * Otherwise, returns the width value. + * + * @uses $this->_get_attribute() + * @uses $this->_get_setting() + * @uses $this->get_width_attribute() + * @return int + */ + function get_height_attribute() { + if ( !empty( $this->_get_attribute( 'height' ) ) ) + return ( int ) $this->_get_attribute( 'height' ); + + if ( !empty( $this->_get_setting( 'height' ) ) ) + return ( int ) $this->_get_setting( 'height' ); + + return ( int ) $this->get_width_attribute(); + } + + /** + * Get "width" setting. + * + * @uses $this->_get_setting() + * @uses $this->_get_attribute() + * @return null|int + */ + function get_width_setting() { + if ( !empty( $this->_get_setting( 'width' ) ) ) + return ( int ) $this->_get_setting( 'width' ); + + if ( !empty( $this->_get_attribute( 'width' ) ) ) + return ( int ) $this->_get_attribute( 'width' ); + + return null; + } + + /** + * Get "height" setting. + * + * @uses $this->_get_setting() + * @uses $this->_get_attribute() + * @return null|int + */ + function get_height_setting() { + if ( !empty( $this->_get_setting( 'height' ) ) ) + return ( int ) $this->_get_setting( 'height' ); + + if ( !empty( $this->_get_attribute( 'height' ) ) ) + return ( int ) $this->_get_attribute( 'height' ); + + return null; + } + +} + +?> \ No newline at end of file diff --git a/image_tags/Image_Tag_WP.php b/image_tags/Image_Tag_WP.php new file mode 100644 index 0000000..9c94fc3 --- /dev/null +++ b/image_tags/Image_Tag_WP.php @@ -0,0 +1,90 @@ +get_ratio() + * @uses $this->add_class() + */ + function set_orientation() { + $ratio = $this->get_ratio(); + + if ( $ratio > 1 ) + $this->orientation = 'portrait'; + + else if ( $ratio < 1 ) + $this->orientation = 'landscape'; + + else if ( 1 === $ratio ) + $this->orientation = 'square'; + + else + $this->orientation = 'unknown'; + + $this->add_class( 'orientation-' . $this->orientation ); + } + + /** + * Get common colors. + * + * @param string $path Path to image. + * @param int $count Number of colors to determine. + * @uses GetImageMostCommonColors->Get_Colors() + * @return array + */ + protected function _get_colors( string $path, int $count = 3 ) { + static $util = null; + require_once trailingslashit( dirname( __DIR__ ) ) . 'class-get-image-most-common-colors.php'; + + if ( is_null( $util ) ) + $util = new GetImageMostCommonColors; + + $_colors = $util->Get_Colors( $path, $count ); + $colors = array(); + + foreach ( $_colors as $color => $percentage ) + $colors['#' . $color] = $percentage; + + return $colors; + } + + /** + * Public access to get common colors. + * + * Abstract to pass proper image path, and + * opportunity to implement caching. + * + * @param int $count + * @uses $this->_get_colors() + * @return array + */ + abstract function get_colors( int $count = 3 ); + + /** + * Get most common color. + * + * @uses $this->get_colors() + * @return string + */ + function get_mode_color() { + return array_keys( $this->get_colors() )[0]; + } + +} + +?> \ No newline at end of file diff --git a/image_tags/Image_Tag_WP_Attachment.php b/image_tags/Image_Tag_WP_Attachment.php new file mode 100644 index 0000000..3e10526 --- /dev/null +++ b/image_tags/Image_Tag_WP_Attachment.php @@ -0,0 +1,650 @@ + array( 'full' ), + ); + + /** + * @var array $versions + */ + protected $versions = array( + '__largest' => null, + '__smallest' => null, + ); + + /** + * Construct. + * + * @param int $attachment_id + * @param array $attributes + * @param array $settings + * @uses Image_Tag::__construct() + * @uses $this->set_source() + */ + function __construct( int $attachment_id, array $attributes = array(), array $settings = array() ) { + $this->attachment_id = $attachment_id; + + parent::__construct( $attributes, $settings ); + + if ( !$this->is_valid() ) + return; + + $this->set_source(); + $this->set_srcset(); + $this->set_orientation(); + } + + /** + * Getter. + * + * @param string $key + * @uses Image_Tag_WP::__get() + * @return mixed + */ + function __get( $key ) { + if ( 'attachment_id' === $key ) + return $this->attachment_id; + + return parent::__get( $key ); + } + + /** + * To string. + * + * @uses $this->is_valid() + * @uses Image_Tag::__toString() + * @return string + */ + function __toString() { + if ( !$this->is_valid() ) { + trigger_error( sprintf( 'Attachment %d does not exist.', $this->attachment_id ) ); + return ''; + } + + return parent::__toString(); + } + + /** + * Check if the image is valid. + * + * @uses get_post_type() + * @uses wp_attachment_is_image() + * @return bool + */ + function is_valid() { + return ( + !empty( $this->attachment_id ) + && 'attachment' === get_post_type( $this->attachment_id ) + && wp_attachment_is_image( $this->attachment_id ) + ); + } + + /** + * Set attachment image source. + * + * @uses $this->get_setting() + * @uses $this->_set_attribute() + */ + protected function set_source() { + $image_sizes = $this->get_setting( 'image-sizes' ); + + for ( $i = 0; $i < count( $image_sizes ); $i++ ) { + $attachment = wp_get_attachment_image_src( $this->attachment_id, $image_sizes[$i] ); + + if ( !empty( $attachment ) ) + break; + } + + if ( empty( $attachment ) ) { + $this->_set_attribute( 'src', self::BLANK ); + return; + } + + $this->_set_attribute( 'src', $attachment[0] ); + } + + /** + * Set "srcset" attribute from image versions. + * + * @uses $this->get_attribute() + * @uses $this->get_versions() + * @uses $this->add_srcset() + */ + protected function set_srcset() { + if ( !empty( $this->get_attribute( 'srcset' ) ) ) + return; + + $versions = $this->get_versions(); + unset( + $versions['__largest'], + $versions['__smallest'] + ); + + if ( 1 === count( $versions ) ) + return; + + foreach ( $versions as $version ) + if ( + !empty( $version->url ) + && !empty( $version->width ) + ) + $this->add_srcset( $version->url . ' ' . $version->width . 'w' ); + + $this->set_attribute( 'src', $this->get_version( '__smallest' )->url ); + } + + /** + * Set "image_sizes" setting. + * + * @param array|string + * @uses $this->_set_setting() + */ + protected function set_image_sizes_setting( $image_sizes ) { + if ( is_string( $image_sizes ) ) + $image_sizes = explode( ' ', $image_sizes ); + + if ( !is_array( $image_sizes ) ) { + trigger_error( 'Image sizes must be a string or array.' ); + return array( 'full' ); + } + + $wp_image_sizes = get_intermediate_image_sizes(); + $wp_image_sizes[] = 'full'; + + $image_sizes = array_values( array_intersect( $image_sizes, $wp_image_sizes ) ); + + $this->_set_setting( 'image-sizes', $image_sizes ); + } + + /** + * Get width of largest image version. + * + * @uses Image_Tag::get_width() + * @uses $this->is_valid() + * @uses $this->get_versions() + * @uses $this->get_setting() + * @return int + */ + function get_width() { + if ( !empty( parent::get_width() ) ) + return parent::get_width(); + + if ( $this->is_valid() ) + return ( int ) $this->get_versions()['__largest']->width; + + if ( !function_exists( 'wp_get_registered_image_subsizes' ) ) + return 0; + + $image_sizes = $this->get_setting( 'image-sizes' ); + $sizes = wp_get_registered_image_subsizes(); + + while ( !empty( $image_sizes ) ) { + $image_size = array_pop( $image_sizes ); + + if ( isset( $sizes[$image_size] ) ) + return ( int ) $sizes[$image_size]['width']; + } + + return 0; + } + + /** + * Get height of largest image version. + * + * @uses Image_Tag::get_height() + * @uses $this->is_valid() + * @uses $this->get_versions() + * @uses $this->get_setting() + * @return int + */ + function get_height() { + if ( !empty( parent::get_height() ) ) + return parent::get_height(); + + if ( $this->is_valid() ) + return ( int ) $this->get_versions()['__largest']->height; + + if ( !function_exists( 'wp_get_registered_image_subsizes' ) ) + return 0; + + $image_sizes = $this->get_setting( 'image-sizes' ); + $sizes = wp_get_registered_image_subsizes(); + + while ( !empty( $image_sizes ) ) { + $image_size = array_pop( $image_sizes ); + + if ( isset( $sizes[$image_size] ) ) + return ( int ) $sizes[$image_size]['height']; + } + + return 0; + } + + /** + * Magical getter for "class" attribute. + * + * @uses $this->_get_attribute() + * @uses $this->get_setting() + */ + protected function get_class_attribute() { + $classes = $this->_get_attribute( 'class' ); + + $image_sizes = $this->get_setting( 'image-sizes' ); + $classes[] = 'size-' . $image_sizes[0]; + + $classes = get_post_class( $classes, $this->attachment_id ); + + return implode( ' ', array_unique( $classes ) ); + } + + /** + * Get data for versions of image from specified image sizes. + * + * @uses $this->get_setting() + * @uses $this->get_version() + * @return array + * + * @todo add test for empty version info + */ + function get_versions() { + if ( !empty( array_filter( $this->versions ) ) ) + return $this->versions; + + if ( !$this->is_valid() ) + return array(); + + $image_sizes = $this->get_setting( 'image-sizes' ); + $largest = null; + $smallest = null; + + foreach ( $image_sizes as $i => $image_size ) { + $version = $this->get_version( $image_size ); + + if ( empty( ( array ) $version ) ) { + unset( $image_sizes[$i] ); + $this->set_setting( 'image-sizes', $image_sizes ); + continue; + } + + # Determine if largest. + if ( + is_null( $largest ) + || ( $version->width * $version->height ) > ( $largest->width * $largest->height ) + ) + $largest = $this->versions['__largest'] = &$this->versions[$image_size]; + + # Determine if smallest. + if ( + is_null( $smallest ) + || ( $version->width * $version->height ) < ( $smallest->width * $smallest->height ) + ) + $smallest = $this->versions['__smallest'] = &$this->versions[$image_size]; + } + + # If no versions, use "full" image size. + if ( empty( array_filter( $this->versions ) ) ) { + trigger_error( sprintf( 'Attachment %d does not have the following sizes: %s; using full image size.', $this->attachment_id, implode( ', ', $image_sizes ) ), E_USER_WARNING ); + + $this->set_setting( 'image-sizes', array( 'full' ) ); + + return $this->get_versions(); + } + + return $this->versions; + } + + /** + * Get data for specified version of image from image sizes. + * + * @param string $image_size + * @uses $this->get_versions() + * @return object + */ + function get_version( string $image_size ) { + if ( !empty( $this->versions[$image_size] ) ) + return $this->versions[$image_size]; + + if ( in_array( $image_size, array( '__largest', '__smallest' ) ) ) + return $this->get_versions()[$image_size]; + + $upload_dir = trailingslashit( wp_get_upload_dir()['basedir'] ); + + # If full size. + if ( 'full' === $image_size ) { + $version = wp_get_attachment_metadata( $this->attachment_id ); + $version['path'] = $upload_dir . $version['file']; + $version['file'] = basename( $version['file'] ); + $version['url'] = wp_get_attachment_image_src( $this->attachment_id, 'full' )[0]; + + # If intermediate image size. + } else { + $version = image_get_intermediate_size( $this->attachment_id, $image_size ); + + if ( empty( $version ) ) + return ( object ) array(); + + $version['path'] = $upload_dir . $version['path']; + } + + unset( + $version['sizes'], + $version['mime-type'], + $version['image_meta'] + ); + + $version = ( object ) $version; + $this->versions[$image_size] = $version; + + return $version; + } + + /** + * Get transient key for attachment common colors. + * + * @param int $attachment_id + * @return string + */ + static function colors_transient_key( int $attachment_id ) { + return sprintf( 'attachment_%d_common_colors', $attachment_id ); + } + + /** + * Get common colors (cached to attachment's meta data). + * + * @param int $count + * @param bool $force + * @uses static::colors_transient_key() + * @uses $this->_get_colors() + * @uses $this->get_version() + * @return array + */ + function get_colors( int $count = 3, bool $force = false ) { + $transient_key = static::colors_transient_key( $this->attachment_id ); + + if ( !$force ) + $transient = get_transient( $transient_key ); + + if ( + !empty( $transient ) + && count( $transient ) >= $count + ) + return $transient; + + $colors = $this->_get_colors( $this->get_version( '__largest' )->path, $count ); + set_transient( $transient_key, $colors, DAY_IN_SECONDS ); + + return $colors; + } + + /** + * Transpose WP attachment image to Picsum image. + * + * @param array $attributes + * @param array $settings + * @uses Image_Tag->picsum() + * @uses Image_Tag_Picsum->get_attribute() + * @uses Image_Tag_Picsum->set_attribute() + * @uses $this->get_versions() + * @uses Image_Tag::create() + * @uses Image_Tag_Picsum->add_srcset() + * @return Image_Tag_Picsum + */ + function picsum( $attributes = array(), array $settings = array() ) { + $picsum = parent::picsum( $attributes, $settings ); + + if ( + empty( $attributes['srcset'] ) + && !empty( $picsum->get_attribute( 'srcset' ) ) + ) { + $picsum->set_attribute( 'srcset', array() ); + + foreach ( $this->get_setting( 'image-sizes' ) as $image_size ) { + $version = $this->get_version( $image_size ); + + $tmp = Image_Tag::create( 'picsum', array(), array( + 'width' => $version->width, + 'height' => $version->height, + 'random' => true, + ) ); + + $picsum->add_srcset( $tmp->get_attribute( 'src' ) . ' ' . $version->width . 'w' ); + } + } + + return $picsum; + } + + /** + * Transpose WP attachment image to Placeholder image. + * + * @param array $attributes + * @param array $settings + * @uses Image_Tag->placeholder() + * @uses Image_Tag_Placeholder->get_attribute() + * @uses Image_Tag_Placeholder->set_attribute() + * @uses $this->get_versions() + * @uses Image_Tag::create() + * @uses Image_Tag_Placeholder->add_srcset() + * @return Image_Tag_Placeholder + */ + function placeholder( $attributes = array(), array $settings = array() ) { + $placeholder = parent::placeholder( $attributes, $settings ); + + if ( + empty( $attributes['srcset'] ) + && !empty( $placeholder->get_attribute( 'srcset' ) ) + ) { + $placeholder->set_attribute( 'srcset', array() ); + + foreach ( $this->get_setting( 'image-sizes' ) as $image_size ) { + $version = $this->get_version( $image_size ); + + $tmp = Image_Tag::create( 'placeholder', array(), array( + 'width' => $version->width, + 'height' => $version->height, + ) ); + + $placeholder->add_srcset( $tmp->get_attribute( 'src' ) . ' ' . $version->width . 'w' ); + } + } + + return $placeholder; + } + + /** + * Get transient key for base64 encoded LQIP. + * + * @param int $attachment_id + * @return string + */ + static function lqip_transient_key( int $attachment_id ) { + return sprintf( 'attachment_%d_lqip_base64', $attachment_id ); + } + + /** + * Get low-quality image placeholder. + * + * @param array $attributes + * @param array $settings + * @uses $this->generate_lqip() + * @uses static::lqip_transient_key() + * @return self + * + * @todo check if LQIP file already exists + */ + function lqip( $attributes = array(), array $settings = array() ) { + $attributes = ( array ) $attributes; + $_attributes = $this->attributes; + + unset( + $_attributes['srcset'], + $_attributes['sizes'] + ); + + $defaults = apply_filters( 'image_tag/lqip_defaults', array( + 'lqip-width' => 100, // width of generated LQIP + 'lqip-height' => null, // height of generated LQIP + 'lqip-crop' => false, // crop or maintain aspect ratio of LQIP + 'lqip-force' => false, // force regenerate LQIP + 'lqip-life' => DAY_IN_SECONDS, + ), $this ); + + $attributes = wp_parse_args( $attributes, $_attributes ); + $settings = wp_parse_args( $settings, $this->settings ); + $settings = wp_parse_args( $settings, $defaults ); + + # Check if skipping cache. + if ( !$settings['lqip-force'] ) { + + # Get transient value. + $transient = get_transient( static::lqip_transient_key( $this->attachment_id ) ); + + # Check transient exists. + if ( !empty( $transient ) ) { + $this->versions['__lqip'] = ( object ) array( + 'url' => $transient, + ); + $lqip = clone $this; + + $this->set_attributes( $attributes ); + $this->set_settings( $settings ); + + $lqip->set_attribute( 'src', $transient ); + $lqip->add_class( 'lqip' ); + + return $lqip; + } + + } + + # Generate the LQIP. + $lqip_meta = $this->generate_lqip( $settings ); + + # Get base64 encoded LQIP. + $base64 = $this->base64_encode_lqip( $lqip_meta['path'] ); + + # Save to transient. + set_transient( static::lqip_transient_key( $this->attachment_id ), $base64, $settings['lqip-life'] ); + + # Start creating the object. + $lqip = clone $this; + + $lqip->set_attributes( $attributes ); + $lqip->set_settings( $settings ); + + $lqip->add_class( 'lqip' ); + $lqip->set_attribute( 'src', $base64 ); + + return $lqip; + } + + /** + * Generate LQIP image. + * + * @link https://stackoverflow.com/questions/3967515/how-to-convert-an-image-to-base64-encoding + * @param array $settings + * @uses $this->get_version() + * @uses Image_Tag_WP_Attachment->set_setting() + * @return array + */ + protected function generate_lqip( array $settings ) { + $editor = wp_get_image_editor( $this->get_version( 'full' )->path ); + + if ( + is_wp_error( $editor ) + || is_wp_error( $editor->resize( $settings['lqip-width'], $settings['lqip-height'], $settings['lqip-crop'] ) ) + ) { + $lqip = clone $this; + $lqip->set_setting( 'image-sizes', 'medium' ); + return $lqip; + } + + $lqip_meta = $editor->save(); + + $this->versions['__lqip'] = ( object ) array( + 'path' => $lqip_meta['path'], + ); + + return $lqip_meta; + } + + /** + * Base64 encode LQIP image. + * + * @param string $path + * @return string + */ + function base64_encode_lqip( string $path ) { + $type = pathinfo( $path, PATHINFO_EXTENSION ); + $data = file_get_contents( $path ); + $base64 = 'data:image/' . $type . ';base64,' . base64_encode( $data ); + + if ( !isset( $this->versions['__lqip'] ) ) + $this->versions['__lqip'] = ( object ) array(); + + $this->versions['__lqip']->url = $base64; + + return $base64; + } + + /** + * Transpose WP attachment image to Unsplash image. + * + * @param array $attributes + * @param array $settings + * @uses Image_Tag->unsplash() + * @uses Image_Tag_Unsplash->get_attribute() + * @uses Image_Tag_Unspalsh->set_attribute() + * @uses $this->get_versions() + * @uses Image_Tag::create() + * @uses Image_Tag_Unsplash->add_srcset() + * @return Image_Tag_Unsplash + */ + function unsplash( $attributes = array(), array $settings = array() ) { + $unsplash = parent::unsplash( $attributes, $settings ); + + if ( + empty( $attributes['srcset'] ) + && !empty( $unsplash->get_attribute( 'srcset' ) ) + ) { + $unsplash->set_attribute( 'srcset', array() ); + + foreach ( $this->get_setting( 'image-sizes' ) as $image_size ) { + $version = $this->get_version( $image_size ); + + $tmp = Image_Tag::create( 'unsplash', array(), array( + 'width' => $version->width, + 'height' => $version->height, + 'random' => true, + ) ); + + $unsplash->add_srcset( $tmp->get_attribute( 'src' ) . ' ' . $version->width . 'w' ); + } + } + + return $unsplash; + } + +} + +?> \ No newline at end of file diff --git a/image_tags/Image_Tag_WP_Theme.php b/image_tags/Image_Tag_WP_Theme.php new file mode 100644 index 0000000..f478448 --- /dev/null +++ b/image_tags/Image_Tag_WP_Theme.php @@ -0,0 +1,167 @@ +path = locate_template( $source ); + + parent::__construct( $attributes, $settings ); + + if ( !$this->is_valid() ) + return; + + $this->set_source( $source ); + $this->set_orientation(); + } + + /** + * To string. + * + * @uses $this->is_valid() + * @uses Image_Tag->__toString() + * @return string + */ + function __toString() { + if ( !$this->is_valid() ) { + trigger_error( sprintf( 'Unable to find %s in theme.', $source ), E_USER_WARNING ); + return ''; + } + + return parent::__toString(); + } + + /** + * Getter. + * + * @param string $key + * @uses Image_Tag_WP::__get() + * @return mixed + */ + function __get( $key ) { + if ( 'path' === $key ) + return $this->path; + + return parent::__get( $key ); + } + + /** + * Check if the image is valid. + * + * @return bool + */ + function is_valid() { + return ( + !empty( $this->path ) + && file_exists( $this->path ) + ); + } + + /** + * Set theme image source. + * + * @param string $source + * @uses $this->_set_attribute() + */ + protected function set_source( string $source ) { + foreach ( array( + STYLESHEETPATH => get_stylesheet_directory_uri(), + TEMPLATEPATH => get_template_directory_uri(), + ) as $themepath => $themeurl ) + if ( false !== strpos( $this->path, $themepath ) ) + $this->_set_attribute( 'src', trailingslashit( $themeurl ) . $source ); + } + + /** + * Get image width. + * + * @uses Image_Tag->get_width() + * @uses $this->is_valid() + * @return int + */ + function get_width() { + if ( !empty( parent::get_width() ) ) + return parent::get_width(); + + if ( !$this->is_valid() ) + return 0; + + return ( int ) getimagesize( $this->path )[0]; + } + + /** + * Get image height. + * + * @uses Image_Tag->get_height() + * @uses $this->is_valid() + * @return int + */ + function get_height() { + if ( !empty( parent::get_height() ) ) + return parent::get_height(); + + if ( !$this->is_valid() ) + return 0; + + return ( int ) getimagesize( $this->path )[1]; + } + + /** + * Transient key for common colors. + * + * @param string $path + * @return string + */ + static function colors_transient_key( string $path ) { + return sprintf( 'theme_img_colors_%s', md5( $path ) ); + } + + /** + * Get common colors (cached to transient). + * + * @param int $count + * @uses static::colors_transient_key() + * @uses $this->_get_colors() + * @return array + */ + function get_colors( int $count = 3 ) { + $transient_key = static::colors_transient_key( $this->path ); + $transient = get_transient( $transient_key ); + + if ( + !empty( $transient ) + && count( $transient ) >= $count + ) + return $transient; + + $colors = $this->_get_colors( $this->path, $count ); + set_transient( $transient_key, $colors, DAY_IN_SECONDS ); + + return $colors; + } + +} + +?> \ No newline at end of file diff --git a/image_tags/index.php b/image_tags/index.php new file mode 100644 index 0000000..a361168 --- /dev/null +++ b/image_tags/index.php @@ -0,0 +1,4 @@ + + + + + ./tests/ + + + + + image_tags/Image_Tag_JoeSchmoe.php + image_tags/Image_Tag_Picsum.php + image_tags/Image_Tag_Placeholder.php + image_tags/Image_Tag_WP_Attachment.php + image_tags/Image_Tag_Theme.php + image_tags/Image_Tag_WP.php + Image_Tag.php + + + diff --git a/samples.php b/samples.php new file mode 100644 index 0000000..b687716 --- /dev/null +++ b/samples.php @@ -0,0 +1,65 @@ + array( + 'rosalie', + ), + 'style' => array( + 'width: 300px', + 'height: auto', + ), + ) ); + + $attachment = new WP_Query( array( + 'post_type' => 'attachment', + 'post_status' => 'inherit', + 'posts_per_page' => 1, + 'fields' => 'ids', + ) ); + + if ( !empty( $attachment->posts ) ) { + echo $img = Image_Tag::create( $attachment->posts[0], array(), array( + 'image_sizes' => array( 'thumbnail', 'medium', 'medium_large', 'large', 'full' ), + ) ); + echo $img->picsum(); + echo $img->placeholder(); + echo $img->get_mode_color(); + } + + echo $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 500, + 'height' => 200, + 'random' => true, + 'grayscale' => true, + // 'seed' => 237, + ) ); + + echo $img = Image_Tag::create( 'placeholder', array( + 'width' => 1600, + 'height' => 800, + 'srcset' => array( + 'https://via.placeholder.com/1600x800 1600w', + 'https://via.placeholder.com/1200x600 1200w', + 'https://via.placeholder.com/1000x500 1000w', + 'https://via.placeholder.com/800x400 800w', + 'https://via.placeholder.com/600x300 600w', + 'https://via.placeholder.com/400x200 400w', + 'https://via.placeholder.com/200x100 200w', + ), + ) ); + + echo $img = Image_Tag::create( 'assets/images/2020-landscape-1.png' ); + echo $img->lazyload(); + + echo $img = Image_Tag::create( 'joeschmoe', array(), array( + 'gender' => 'male', + ) ); + +} ); + +?> diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..5659c3a --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,32 @@ +c_`--pu<4-Z}UFbZ7S6GxwZ**IsL#f3yF-0vM4x2ps?r2mrt@C*a>a zAPPW5O-)ThO>^Z64ekF19o^NdbaeEfYnPKAe1qY} zSLs0i<^Xj6_sKa-JI_9y>e+cizaiz=$RxPg*KWGTV)^cr7k621pvjAk>E`0$n4=y+ zy({E(qV%~6|4EFuQQy&8>c#6?mE>*utf1IY_eS%PI~UVGRLvicnN<9#UmI+Bq4vcP zzEDe?FLAlo@wjGlJ_^>C*hK*A6Orcz1+J{jO}B#pd^8KkdJsGiIWfNc+Ald6CF8{>%T3^7Q8V-4cxBYvudt!B5w2KKNFX+w7t1tM>q3v>mIAW>t;}J zOiN;1?(l-}dGAz+@#)ChpmJ+}hFFrV-_rf5cZysL)QWit=FYar7_HDPEtv^uOk^7)~`iwJ!`?M4L0kiHe=Hu}p z;U1x(rNvxR^pRlv0D@Yb&P^Hs!53510X#@8a}8bM zSBAs zK`1B}tk=Hk_+IpH1E=rpgzp#6caxLp?f7fa-OrqrozGJo zGLGr@&G~zS?i2kMC8bMu&KHK;?}IT*eyNEjK7vS@#JC=TEKVCndwV){Iw!P-ryG+! z-ZsHYy_e%b|L%Ob3ux53vAuTA*YYl376mtdYWH;9@9(DBhUrH}JUbN%k_U~N%uv#? zMNv|_yED79oNTREI!ozc0AcOEtAS>(x#*K8caNI5#WzCb-fg@`b{#mcjZOq79F#oY zQPLl?D04X?U%zE%>^D_9-TSz@;E*ttoZ#sxvTQzA`fiA~mno0g8iKsRne+_`Bc<{r zCQZgAVC!mfsN`qr%T`>L%y!PjVoLSh=6+=D2Od0}EbY#MMuqFxW59SU9he3t#U~Vr zl7oiBostSroux>cR9I(zR2p>NXj@w!f;nQ#{k-W{fyg+P|5oMr@g`!U<#w#bN^?p} zo*Rb?cD(%BX%pt`XQ_(^U02sq{RU>4nlm-dVhTb>jt3+%c83A!0aQ)~+)w6EO4?P| z&Q<&{hq(f0_f7)8>}m2hO?R%Gsfs@3q$NSSzcS$k!mtne66xxYd^9WMEUv^vtqE>( zlr%hUZG|+}_XH&^#ZHsmx}&rt88`G~z@+auS!7v!JYa?=xnejqvA#K1pDU>nlQV@R zY^xYGXskl8S#duSx7uM0SXQq;d+(vinNY; z=87P+lP7_TGp?6q917}55px2{hbwSE$%3pmz`9ppumw!ICKy=P`_!Xtx=MYv*Z5-K z%j>g85D(wfoQz_0a$De;&-XHOm8_fw1xS#NM6NPKq_#vaI$8O-ak+;_N}kl^=3AlG zMd*kVvP zENUJopDE1ahDg&>NAjs>d5LT~hPQMi7*+~TCUb4~%&tj@iyE2EP3@Q5V?8G5l-tGh zqPa2F0_mDpS@71>eA3A}>RGM`vYzlj@uL@ktbEV;qz2g+gJ% z&^atMS`$T2PlYXk3cx<0Qp9x=xsnQ@E95b7Jaht=8J^*wZ4&MLn7F8YFQbgi=IgX% z^&!9?^id}x@cl}RMD9IuA5ABW!rLjx$O!nv4v3<-GuvwBe#zLH$BbTm3w6VOA9ku6Nz-yxo(^pXoUkjw{ zzZT3=;#P%e9`w}Fr514jr~yt+&IYcC6!Gd}qKuE;N55eA z%XN}dq8#+f<|t>SQhC%(LFM=J4c6bcD)@MQ2481-H^vh0`||0ZUu3>#ZRBqX;*z4d z6ptc1<2aU7`nYtkCKyHEjmK8ez{r9e!ab49&IYtP*svm|raB5*BUL-X{*akGP7_0i zRxhHBMXL8z#}`Y}11QWmyuEiYSUP50wvCU2e6}}}wa2mNsGODmaz?U&V`rxM*|(Gu zUq$p(?Qhn`)Xv=(qos#K6KQF zWp>{8POF>doS5+bYFXa`19Lxf>o~IcK3fnkP%@5UN#|!&m(t~mT3H8?K&5nAW7iP* zJz?FeLXE5f6S%k)3YeKo!%I}x81S|AP4>E5kgQ6>U2v6cT_b<$DQo`v zMS$*-#38=X=tK24u_;%oQsbo30hu@&`z-dDRTwFp1e4ORWg%MVL`^uMm?Jg$gqrQ~ zsgy)M9$+yf4+W#}aeV>SAxQPg_~CLxp6WC~d~m zr_QY&CDzA#g=Q4g9L4#Q(fA?DPyC*l%ZS3RBu7!TnU%$&`HDB^X}Nch{@88vzIzQl zugDg*hpZ>OkDD4kx4q?Z^N%U@chfS&!xI^4Qpcb)`9eu77^f>xI&9QqP$VK!U06V1 zWei4&VMb{;gqH}_Nh1`lvWZkDmLpBTy=yMBGYw6>yQj~uNX!o?S5$7PvJKSDKf-Qj zX)lFl?>ElrJym_TJ?3sX|Ka&eb8q^tX`8mk6ZdN6XE~Kr!+)s{CGJnEq2^)Y=EC(R z0DuCF42OPlvSpXy<2IcX6snO8i-JuS z^iy!ON@N6*q#K>loE|jee#G{^aNPyo*LT34&KE!V;6xJnT{U~eLID!jz1C>q+umRP z{jscCYsb-9smj~eX<{0WQr>yp>^dJj&)F>|i}aR!3$2oM^{5gwJ+b+D ziJXb<($?7qsRCJ8gn$%FT(Q6nCur(qx+d@uq|sWs(a+zK4LO~IG2rCn$~`BUBd$sC z+B)^SW+h(*;9c>02w`3sr$l#g*eooYHnkTrnXEYIbP@`f@c^``K$>G(|ZjUnQ7T!8`r4 zeYtqFkRD&Qx?n)f_lEvbUi%Dq^K@0l#uu#rLxUm{Nt}>zdQQ*_W1ae;cU>m3($6h& zmZ-T{#;9noK~uHKCulpurKZVedFf`k1jMf?kfL&tvRjSD_8i{R#kMK=ok}po&MWX(;u!TRX$c%wpu+h zJ)F>e5ABza2bzc>{e!YOY-z{09hIzNsGTPL5{IweF{yOiMx71b`EocT5O>(}T0ZG? z@Pov&uA|#HdJmiK*-!T2WDQ38I6LlGqsbCSe}A;!+P;L1OI%Y<6mJ$b0*s}?<|70- zcp=bPq8Sf3(TUT^iJvty^PU$pb+g4MQ4dw+!}+4{-HMM@_UJvxL!= zL-FU7_1mI3$E?S}9VYWWgTixNA#Zm={7-M@{QSGq9a8n}YXirj|~Y+6U3 zGd{O)w*H0AYnGl%jJwJ~om42Sp+TEU=1CQbV+I4Ig_)oQyzoR$M(IdRusZ}Q5R(~Z zoms@1P8&XWfBa-8=Y221eZDx`#Dlz}8j2Y6Y4Ce#>K+Pfi=0+**-;o!_P<~AID+my-X)z#qGtHWmuF9b-Z$Sm?y?&k0MrR)h$ z%zrZ_uI7?zZIsl>zvg3qemDIzmwXuDJrz`}U~$yZ@F%j=c-m?+6q`|+w{q`}q5dv+ z$3uH_Bpk1+RnQOZrOl!x$JKN6bZObAtJ6zU>9UxHS(CcwxX@bZyr1;+q|+0i=?PwO z0z4ol_ROqT`bzI0H-Ob@y~9dpV@JiIx6Mr|r%ORAO9!KZS#|RqW#e-=H-SL-Yl*))Fh6)71BMq?C^i+)0sqvRc zCvM)ZMD?vzqbA&j0~RGH$3aEQAZ@=g0k|SmO?3sD1>nZ;j&+j~D#Q^9x|&!7QjD>a zhk!}ytA^0I$y`*3msHP88KUGb^Q$qlrI9ayb+TDyuc@pUI9)N6s%HC9+i!PBs6M~O zI&(^>6t5JTDA$N%E`QbYG_$FSw!(RC(cEG@P3YdMA3m#4VQ7y~Ll}DzBbGS{kL^K< z=P~NwG@Y=32}Z!RYGG;=HI6GOl?(#VOA9|piX)_|lprkr0emrUO@O}sQsP_HssXR9~_<;i+qGfM0(;@hJC z&GM(aobHQu1*f_9C#AEdr;1&m`%bY=~U7KB@Qot^wjwh-%Yp>U@$v^2!%$fR}u1$JBP>4UYlApWCRbIJeW ze?CmF4_*ju&j|IaWcXLVbuj zVL{e8RK8RKr<)=SL8q%>ogInoDd1Vauv7p*0`X9|t}ZQ z`={e}pRc5x?+4v`mTHn;o?G2o`@2nP1?E!k{0O(nKR zs&l}1%X}7*uW!|wvsDE>O|2jGKMy>sB`Qo@oQ)*$wq0C_IIOG_Ip?ZByL^VfU-VNUgL z937EAD~$Wj|5i@$`)yob=yuyA`D9U+Xb1-Ogwfy7u!SHhDkUtQCAa%dLYPA!a{muQm{4qNf*qi@7aG;T*!mRmO_!@46^E3 zSh!nHH}9B|4*V*#uLc^+!;MMCK86G3(}8eZb%2h#P@Ef`E;{i6>kX848UX{0OKiu= zcUE`fymUcO1&~m`4$c!5ANB^M#ez@d^t3B?AESo}tO|u?hpk0XG~BhI@f2GxC!iJq z!Ox==HHVb~-C!&Nb<;5Lfwb(+_4stTMYMq|>r`488Y-X^FDZ(mK0)we5HEtwVe3|5 zpIA~MFd{8Dn*1|<IUY z=ZI`%qMi(`b{^6oHQT@og%A+P?9$+5#)EO(_5uiP={!_e1P>(rLK%+ zj@fHbY+d;TU~*6a<|GFu(v|&_lnDi^!uJ*@`&>i6_58!9TBSI2UtODdmeTUNmF(LZ zllb8?--iX)tdrc$$>(>CD0Mj%M+UQpfsHORu$)G#iAg)ySd6rGKXVlElE+E<3g||_ z#>ipVWRet)U9prol1Y$-f*9a|#jK>;qT`BK#>tx#rp4{WOn6oZ)8oA)ZQTH? zLTPRw9{mG6UBdloahm;MkzV0SEUC8Hbvev}1p}ie zq=V!}%BpsWT&1?h5`#%y$0IJj=4_+ozZudC$ucZvFsTQEEU;NB=5#*AI@l*&0Bs2? zGY$PUxGqQ?tS*JK1>jgx$5|AUAyM{4Z0y5~)>$-5+KA#6Y3V9#J?$smMBcus@2U~= zBkUsw!J9$<0NPuBOv(>h*_w@dTrc@E)vgPM)saB9x2HKR@NG`N-Xx;1jP7X$Dv@8Pjz?YRh)YpurKVq zjs;3OFB;Kb|1xL9YBzq`b~LG`$S++j^WB?xPMdP)w|68*O@wo_Iyym zD)dVo(x=W;nnoQ@tY|}{%v54DpdKK1(Z+Vo zk3rY+VQ$NTLM=@&6%ScEEej%qVvtImxC+v-Lx({~GKd>Ml6*X`2I>ZruzJ!bY<@DV zM2HToCj-XOOycQ2g1Y%xAxNkx4cZV6gu(>EP#h5kP->tQ7zkvg5zvm;(*COphtX4C zW&wavC+hK87xMCux?zNZELUhM9VZ@)lGm<>X3|UHxM*XtHK3%g2!U|wL|Q>6>hwss zwFWLJDjd{(iFdkJAb9}U8_*SLDOCPtgzgDW1H$$AFO2xG6>`ZfAp~HIifHJGr-7}M zuokiRKZ(c!(?rN5#jFD~!5p{bgh~O_Gziis+VDtpQ~`4w4;SMKAVx;^Fy<>Edp_k_T;_HG~0b z;S3@_*&u0`Qf%#Lh}^LpiXi$p-9&r)aaM&}uwEh9>>9OUsSa~Tayq_!VCVe1&t_~~ z*`|vo(3qU7w~}Kvvbbne@{~WwrE;T{#BC+T0>cuQ z#MYRbH{Acc3L|Cct}E*r+ga6q*&gJhGylwoj{aa5+3h3w zz!h_QzvWFAHpqQDE#D1aH}zb+7=6Kr&RZ8Xzv0$ho%vk@cL|dxWIs{k>`*Xj4cQzQ z$LYO$3~xG>Sx<0b(|)^F>BYYEj|{ezS*!E*F(J?^XyN#tct{f3-ZZXm1)-#!&sYj0 zmI|e(3tl_-P!Rp+h1;y}mX)mUAhBLXXs18IT5OgUU|J1hVOWHnkisL6gQI(Fa}Xi79THXXze zzR4E~_20ldG23fH;lP4hj4bg_G8EX$YXXV6U+ND1Yj&Ux^*$CJ{Kt-*-?LJpXDZGg zKAH)@1}}M=s@|;l;X>4VdTY`|pbVSRcDnqo-RZX`+01Hq&4ct-^|yS+46?iuL8zgRqM$8y!-}<}dFi_Fe=P?3k*IYJ6+L_)Obv zZ!&#*`ryAHH^Z;bMcZ4{Tq+8Jxu!#y&OB}moq6yCi=5Y&n0|9_mUp>QZtkOc2{G7L ztr(Iy$4XsHuGnOLB$Z?Njrpg@yq`pRYN!w?(lpeGyqT#25fD~r_js-?ON=x<10OF{ zF@TDlUs_v9U=+T82VOV(w{m?q<<0wGj-$Id6Z&Jye)r$_=vH#>G#i^JeQvwHIb74o z8LhAP`)=lQyCubc0C12d@!Wq)Vsy3A+-q4WFtJ;Sq2FUO%U}=lpR)ee7uC0@&8AGU znMcT<G>@N@SeN5V>OQ9W7m1rP>+kUV*s{h@Cn+$(}|a` zLSe>&NsvBf#w@H*BU4=5*U7v�>;eh$9DYO(64dTc~4sqRe$42(90vt$k0?=TDvS zQ$EPcW*fQ@`{D2Q>OTO==|73nJqgiot!*34mEs3&S2bgf%XXt1YCi^`XQLdq-fCEj z2Nk_dJXwBluD>;1{_OzelqFd7=WZym*G1~>lOmrgldyJvK9!rmB;r9g zQII{sfUX)!N#s=k0$IAd)2eQ$!_hQ=RaW5x)n_p!&F+~uZo9o?iX1iH^1bKBMsQ+1 zQ4Kw2(_CzQTM~40eRTXEK=z_+@OCKXy#Iuca1x@l;TtybO)Y=+=Zk-U!pCDWT)CB> zCLP$CeS*z_4bMI@1Tj_rzW?UCl{2Xjk{8!cr5?*FpaXYuN=>KItg6J8wZHIB8LazdcYCjcZw)rI6uew zTVHK06SNodcNBxOdOi7~r@IaG&NJs>g9|5rd3_sAEU1w+i!RL;pO{MeO6)6;K!F7L zSt&H>_@vZKBro39`s-{wa~MK^k`yKUAX5Det71c(bQH!gY$g60pL#k%0adIGc*8PY z6<^Fu_ffGYkMX^0ux)#X)eGzIEk?PKLG|B0mIrrzepsJ9g3%ay421C{MP(68vo(_P zVGuooNK_*`b1LDI07G*!l7zL?v(ZTf2zp@#83Y_mGbSISWy^V~;@F~~aGyECg92!3 zG>4Wt1cnE&VCbXCa6vt%OD%bY3fwv?wl{t2Nk@qTYt%JaDsg!tI~9PD$u%jKWwMZi ztbw%FLc2?|#L~h&ZJ;rN0PA=L5gb;EV9q;7&>^gH^hAP_3SilZG~FP?Wpl^UJ*Hik zx+=tj1+vhg$+^q#D< z*PwL7>wr9owm6(Ek;`3*$Ub``l3>~=V}Q1|k2g%sqD_TC@>m?MMbU=qI5|JYX`7dt z%@+$4WQOyK>8nxjHvDY-pdtu_j{oYlG;Z~)jF(`rU@bkKCr+_nfCtr74U5;%0^y5E zq*dBEb?Nw0ZDuERK}a(?(G3!*fkx=!IB}_hpl+_mcvrYCiVBI;@o2yk5&4R)x*!-cjY``RRjPJrkDT#800$F{POBgb$b`4mV9#V(Ly9Zb$w9Te zqn^YgVFM{5%;}HO+#qInDk*M229@Uy#n|zF!nuoKiy3&qx~MdMRz+b*v6iF}=}G^> zQ;Wr^9Ly89sYeMviZrh$HR9Z%jP#084sY>VV+4cY41m#;-ii@E0vkKqL3Yob! zEWDql!|RDLc1LAKf#Q{**}U0$(1Ni~3GW|JyECQZqOvk%5Y^01mnCRRHVcqw1g zkhQDgK55`NSmZ&d(T#DY7J}}G!Hgu&!d@$x`EW-gDUo4 zBXMsF!;{R3*7AfWq(W#958*)^BZZb%MjZ%+)CgBI6X5-H?h>*|T1UR3<5d}E^M-v6 zH4VS8oBWE8tJ|C2(9Mq-Rc53#+E-6L1XAG*Y?BIH4cyU*X^p-v3pWL~Rd2H8`&zW8 zYs$T@9$ee?k z`NUA*uK1*=ZVDj$DNGpbGaM7eK836USLKo=gzL|3J=Us*QX4hWGQZHWoZw*Gy`1sFHH+r-J$ zAPesGLw(j+lXqgqBbwzPLIcz&VXZ41bXs}wI-WL)!o>x}OEcd`!N(zmhVhskgorm? zGTFdQ03fejJaM@wi8@lev!osJc#6@z{n0M-p|AW+_Li-VM&qX0K?6TK`upd;*w(OJ zzx%S>7whY*f5j2K#Des3YAJiq{+?b3bq&JO9i}tP+F9aH3FJS0Q{iKtLeJ3FX69X1 zUUt)EQv8GO@Ew(!L=6pREu>p#SPX% z24eJeq=K)oEgxuZX`#hP^A@JQt)8^1bHsn+N;pbKHVM>6(w3jZXc)N0$<>5Su54y) zncunh51^2IbZQ>5@WY~d@7{l_Q>&PR}n`|BIXSAFk{(nZJ*sRH|%_9^Y_Z57HZ9JChIm zJFJK?DAOT`Z@qhu6f5&aM#Dr>g@@%pyyEm!THl*t_$##y;Yp&qCg;Te>WA;>$P>b5 z1J%r#M&y1rK*Mz7gqrr%5}Utq4=Y+)u1Yk%H9o&ywL|19^A9oW%vX8&;rV{`^7DsQ zbFEYJO}%hD%O4|6IMWeo@^)F-pfR!hHEGJmMPYSAZ+Am--yA4p6qsQf>YLhH--_nA;CXhF+`= z{R4=$UD?vZZjQR`hd7q+TY0azdE@F<{hI!C)HhhF4Z3b9JsK4YbQx^C^ZI9ORbBh= z*Tk~xFKwL{V&5%!E}VwfI(_*NT$sdfpdsrSnH~3?%$MULBR-gaQQKwYY-!ib)^;K( z9QgLt8K;^<-AsViU+Rd4)w92YKoa&Whj|0N`8@cw?X)cWqBFjX&>+4_cg+9*NQ&Ue zy25&CHD$Kt-9Rez)VUuxT-QcloNl>)D0i#Q{LQ7MnonP)m0=N`qncP`wPjv^28p?M zCRt{7tIclb;?9$er3 ze2+Cw-=+koPgMO`9kFUZVrytO^to-9rC;gbv+r+G^7QbJ!|6=ULN&4!q^Z8(S-p^}fafZwMa=PN|JmjXjt-gE%*84xU>hf3wN+ z$MlO{OX+I-b!*kx#N1i?!T8-{j6v-XkwDKbcN|vg0NETXI9jR$54>&$-UH2n~ zWCw5J_#7`DZH(MK_U~+;UAvHXzf~1twoA-?C6iN^DyLY=YXAmb%9O%_jI>!Sas2`y zl3Z%O3!%@X>G=f**S3|#ds7vwpOY8+jRQ(C#@^AKo;8it+;G%x$-{kSLTbb**V2?0l+`Bko|CI*cE$?sTu&iba|``o$` zlwLqfk3L0qXsp|9@%~F+V#mFWakYr^vv|9fTrR|!2!X!Xit`UTjZQoZpei$TDyi*8*4rZlGXe(TYVJbYL(r?3%A2dZTM3 z;P2j+!p9fU4pCJdeUqh+8)l?b`O1zh4GD+Y3(1dyoTVD7^JSui#^bc<9@JL>1ao%G zdn!altF<=GjR!~SZm&uYD1G+YQhPJ{!}6);r7CATc z7%mPqOA;>o(U6_DQ?Nbs{>l^KiD*t7UA~-9e8Eju+E3S$OY$A0&y-qU-9*kw)}{Cc z1iznf)*?J0JM%`R^GQ_u_S&`mmL#{CynMLhF}wt^&pvTi(BJ+e+3u7Ria83w$Cdt$ z)jPQCj+5c^Uwo#|^UJw2*gJ5oNJy!R z8E5F3w9$$=~ug@4`*7N3@D z5B_|@`DG}%C?gCVeGi7cW`IM(4G2II4>K)3Ws!%4=-@5-Tsj#;CqVAJ49BzWh0hY#80SFM3gCwo1g)%eu!X zFsyo5nccORJy*ER`J<5YXOg{k6JGe^C6ERXCx9@(Ctw}D(yi|ndWR;jvnu$+UoHIA z?r;4ENNX+&js4hZxZsEJd-Y03R=;cacBL)Fr(B@BO$Z&~#LUkM9n&ySFF*?6H6tIV zHRicpv4|$iM-U(63-pM;7XIMi{j1dC+gWo^`(VZS5tHw6ZGAuq43;xq}Ug%fC=DR(5{>I6*Tq5i2yTZ6x$QB~3_}kOS{>(;(4? z!vF|rIwv<6wV{!R7wv{vQ2W0%o$6$_?AI! zr=~)!#n&8VWrW!*9hWZB0L|N{*hDHp)n(B{@pMB605IPC%=&3f)$oHthZ3&eRl+bEzkKwt|1~r##bf zZ2hk#|DlDKSCZ%bbd9f#)bZ;i3yn;h)4E9d>b;W4sb7)>zO*GkQ@gWKT8JJx8Xg0@ zMi5Ro|H&QO)m!%QJ#Z9FgW6`@k)=ZI-aYxWv4d)PRY9hqCN2JL$x^l^kK2K4eusBu zzFVvgWlE$KS__jUm=pDQaU7_odJdKa!ZU)1h#pCJ;4vC8@J6U1oH-6D#!h0=dh5RQ zqVb{XoZQ@D&ssnTm*ZaG>04aXyt{mb%V?>^soqJY$uq^+@)|^yBgSp;lo=>t1rr%dQ^k&Q} z7cTz_XU_oSq{GW{6TXDrnf5JJWt+hE%6ea}6px;tMztT`o1$z-PIKBtCd7C?;W$w+ zLf%R&s}@`XuwdVXLabL-XOabkq0);7ixL>s%?CX{TJ}Ca`o5^Zp*ecN$H$XECENoM z1o1fY62Rc76)gh9U|h6|u&$>Cc^rjzzX9sOCnQ@%)GhTC`C9pR>=I3^yS=8iBsF%` z6i!Pbng#D|p4_wA89Gxnmwvzb^EtQMy0T1;a$?ydS90L8lCQYOlkLBnRlCzM)YdJf zMP3!RBh2q0UnyU8RCZ>0%*2T!Vz>U8jcy^wV$wYv-r@am;c_#J?FF{1oNaj<=VLDO(~&*vXN%iH~dR-$3Fk{;me z1P(>PClbIp%pb6biBb`CTJzlZYnC0pD~q<9Q4gyF4l~Y3V&dO4@n;Ms^FOSfH{4pL z=yUZ39i`O4)7XdUw!d(ixrbs{%|sVX*v94O%v8CE^A4)lXMEgE%28`#QorUcbgyzi zCu}%+6quycGb2PEGp;aQVa@hc0MNn?6~?=Iia+sAMggF(XsDZ9eKMuhg}bE4#`mU% z8e8-JLSgED?weI^wafDsbTuMKX5rxnlSQ2P#!_^=kVslo-(D!{PxN~K^z4pH?wf%C zbCS*Z(6(jZ{U=2#@;w!pH6>l9S=FGU9WYaTfv>UqjK`3_NK3^}viyJ21x|CxOQFiO zt5|CvXPE^*Rg;^xE01YFH<(@3!==ec2^lSWf+1482PT3SS?=G^K;*Y96p8TwU@$5> zI9LOnyE9+6>xiB`vGD8k9SppEQ_jmiCRpW)FL zEqgCM*IH_hwv4R)&m2+w=L*S2`rIvM?tsZoV<;*W5>L;-jN&1fLgnMC5C9sBtE?*( zBJUP7R(`w22)yB;Rc<9!F>!JN5mYpj1>HL4CIxnz5`n+gce172LUq>_I z-AUVLx3?uP$hPi~7d`#Eh!4R&f*>t(Y~tOzHZ#BvnVMT4WqCB0-1q*<>_-sk_Ok8MX1K z!Y@?y^ret*@PX6xuVt4b|Gd_Doe%Ai%RfSvtN#33T;Vk|qf@=gg!;q;4F|+SGfNl~Y4O%Pv<06Y zb7nZ`mIenHEG|FE5et#nbXq8f-2({1ls~iudu4vQJmHna2~NZrj`(gC9upn!Pd2C+ zUt>zbqm!V0BQzH95#qG|jG9H$kek8e+20b~vA@?Z^%#SI(D4kPa>}S$_|ePviYE7C zJnB8qSGO4fQLEm*F16_I4Hu&iRxKOD=G-w$AMfi2nQT_JytumWF1ht6M0o`h5o$7iwxqM^?= z+znSD-G{e(Q`{|f3QsI0heP^)oW1|3cDKrVh&8chTkaM|YSyKZ4CuT44tM7tpzLYD zj@x!?VvDniA^Q}HvixUWG-&ATuW0Eng(oG(mejXN!xo?ALUF`?lV0PAgA(6z=PmYd zm;fC>6K;#T^zmoFC(AH~r2&LygQT)4gLj1~)nq%d1CMuh3IekN$Oh+CpzC{`$K09x z9C0kGmwq1u00-6Ms967{=C}BhrGtodRW|?4H+O0cM-~N1o|o31bN_eyRvyRncU5=P z-UhRcm`~qN->lnp;50&_qa0~hC3Ux2BlvaOP8)-7M}o(K8if~p#P64RR($L9B#_T? z&o&q6PidA8K9bC6YLrhZo^qwmyLnXNEOw~%9lG}v=|$+J0f6kV@H`Z=hW#baf3Uw_ zQRIEEuFPH%Yd%kj7P(g5cEc^FsOVY>(f@c}*THpaQEj?Ma7<7@?*9Wx2G#Xl~RkH2VYZYrAZrf@Ef5G0(sJ{T6P zQz1R~LSldP*2|}e@3!8(1h?kHjtj~PH|JYVvKP*8!Z)YG2&4yHYYj%I9oeDMjf*>6 zayKdl{Xbxqw}{J1xibepGV2srA;p9OUh$p;PcF?IjCV&zvWS9jjhRcKzOv~(`{#?tj@9*%mWI*I zmru_R$}o?oe*X36>ZyGZv$SFS(ivY`5%xJa!xm zu{*Uge6{F$$7;ch4aNd8JXE%#BqL5V}#!AzxX>ga=*s#;enfrg(dhcks zzV{7uh$KiNTJ(r+5JVq65p^&aEqbCvFGCQ7NP;Lslo^CU7^98RdyPaF-DsmEL~n^2 zEuVYx{jGKXxa*!j&N+*B?{nte?d-ju=XsCzlT(!U=2A8EQId-pU7Ljk(pC3+%mn(^j`gib%Eu2eSxze6D_=j;WLo34uo$T?C8A5Y zs3_Gp`>RpMjWx1779!`?kAdOh3qv%HRqb&M6=XakE{3&3XGLh{OEhCaGB=-=V9F#1 zvfvXuM{Ye);)t?r5P zUV(G1Ucz`tExdEtL)d*bL7dF#{nxRkc7nwtBEcc1Dwnb$VYL)I(cI9CNqusygezN% z*E@m@00sNT{v+5Uohc&5-V$J0(5Dz<9RV#~SB^-r#qoxP<|$u@hu6`nvI^lpP-&~w zLGz3?ds@gl?Sr+l7W3Zu>%zu{7(u4+NISjf7aJSY!5;)Fj|8u+>%QMAZu`AQBe6ni zQ*GF=uy*>S$-`lt5f`nAaL|Klzk%c28gItCHP{f>L20gt| zF=aH*GAp={RY8XC<6%xl>kX}_L;bC9wzc~?g%16Sw=<618t*+{dBxk{9E20GMH7`e z4V@HFq&YbiIlgi!ww0Z3SdZZ5{9_yIl=h&)YTrRvMiQca>*YGQPoS3uGcP3jC$cAn%nVAI~V7* z=e94+PUR^TuOkC~A#9X#XG%qtN_{8q{#h1gt(0%W*0Rzl=SypG7 z+F_vb*Ms}2R!dfz>>Nuv8buE%sEWZ6j(k+b{NSnlgKB&x@kdTuuZ^{nlY`pqu+_x& z{zs8NEG?co%z^u+qC~5Kt;~>D8d*(ZC8Uw!*Fgvylj^Ffy1YjdBG#)B6P@z5PK9M$ z(VeR(RNlziM+{#*vC&sJ|dYp$3@wXi7ri*Ze`@34q z2q$cbgtGaUd2Np4beZFN3`>?RTdmGcv>6if%cU5m7>pb|7@pB}J)q^g8J@_e=EG*P zX)FlM7xCZWZM*KFRW#+J2?Opxzr64*fSQS z1KeD`scA)?&a);{KZf!hN3uGVIvi=O`H8+Dx}hKQL)bU^y-q)BUSVQ=?u%AUHRrR< z%bY`^GZSWhH|sSEJ{!?#A-aUj^r5qPr4Z*y!W9 z1nJa#5L^Jzx|q>eSPiz2-|E^JlsSvh8sa=UJvp>&M+b;MaPSI?IauTh*cB-^hDz{^ zjM+cT$2f*lME7&0-02^5bX#3;`>PNoXY=KZooI1mK`>!GODg8H9#+@6L{A8$oZGfQ zVw|a&-__Pd-nc={^zz)g&Ossq2jH%rHZ+uhEvzh;cS<+rl|nsMJ3Pxt3#R2TG`p2e z1P3Y+TJU_&Hm{JC786~|%`crF3GPJZX&PN;>4H>&0TQyNHZ0S$x$tIggGbBSICD!i z^2^?aSNTLOr z|AFpMxwfp1h1wBjNb9nssLTFF8nJ9B`bO!3rD02BA9S|EnBeL30SE10m^BrX4AERp zC%)MB-__+7mKMG5Vrl5_vFpv9(6@7bjX|%%bkmA7Gm_g*4X00B!!&)K?RJ9~tcJ6} zV5lf8KjRnrSc-^VR2P`s$6Y9GDsa;x2kOgdJX70J|9IaSr{rgAHH`O%F>I+SZN9t| z+{pPh5Ue4u!6Q1J!WB*-aV1)#QsP!g>+MICvSOKU`e6sE#>`0_KlXmLd>ON_x_BX4 zWb?DccDZO4#&)&su&tHGPvCy>d?B4k!*z0nrhQ>fK?5Omh89YZa1*ABTLj8Q|l=`&xY}eih zgrjs@KfvdL=Z@OV{1&C=pFKEcpZtmzB~;c_$kwq)zxS_vV!b5lH-m3{ULrgcSu4!+ z5@{;!YxxnzDyq?MnR756O1@L%+w|xEiwQ zRk|ijUsp6Vu7}>ukRPn=3PC<*v|yz(@-3L)XG)^$;*kMQ9Y%i0mRlICKD|!77|sbi z_m(_=-G|vH2&23R%Vua@*O(E4ZrMRx*g#Lk4mTuRNK*53R>1TwLjzKP&o5s^|)_DBT8UsXlQJq)m<@eD=xDs zprJJNWOAQ=YFp;gn5t}f6CZaJYR3Fxp7MU^4Jc$bP_nlEE!%aPf{D+FB36$mIhOn- z(!=hEah@(X<1~4kE3J-Bq7gsL5FW}r!l8R*c3Wu>GgCwT!Vasn$d;7rQ$&m!Ee@6& zHW4&Htg{IQkGxEE9?iDy`J~3i=qS)P=j0urTpqJ5JC_4p58dkz{p$m4Haow+ad3%K z_*k?gG>S12{s_%vdaP&_*6;jhN}<#JbTE67nVQMO!xcYQ2S3Ja{S?u)o~k&Rxolfl zWOn!1aM<+~Ufs+J3D(Fbi1L4^iB$B7i0;UfG$_83>?PV#W_<5Gf+ON{VhYr?NM6l| zqB8=+@Ro{kjuGW%W!65tB~6&n&XbDp5_MNFcT zX(=i~8d@?}8bI^jAYkQ5@Z6VymU9EaWdrBa*JGBP16psrV-Mi3;=(r!@a zV8@9ptRa8w7t=K2b!&8oZQ~BK3Z$*?8GdK~iyM0xHabL)pr98*E5`4sY_iKXdgkP? zuQC1*D?Fn95OpcPwecbUzssA!&4FC~#;I|I>lu^cR{1~7 z<&s;1o{*-R`-B}mf13sTxsVa|my*P$H&tfq@`j@=116;jJH@1j`H!fjbfl9JYN4jF zI)h1pGr^Fn+zil1Ou*_@JY5nK#^NfN9&0r2NRbQY<0mu03O|mA8Z{otQFb2QIaab=z3h=BK>H&K--WLCX@tqIU zo#aO9$gga?pb5FZdKB5S6D(Hy;R9lQR@GtoNt}{^2!oSbxw{o}ri!~DEK4CsSo*=? z&a)2{SdkmZE>;iv+CJN*on2e<12Dy>6kw{m_J)Z%63{IXjvENSXxRxX zxQ;eRr&1HjLs_im6Bm)U%nC38Ubs!o)vDCC5cY;HX;M>ShP|2rs$kdR@1YOHzA>X& ztyV#WRF9-5yg~|!2g(+8Hd(X6jq)( zCic5uW(I%HTp%i+3|gtW?$;CKZ?#|B27sTv=vroXv-rW5jlmtOvZJ+c6v1_cTZ>ZL zvz*aYD&arHYkYU>2c+>k&m(x$AI_w-3~V!H@n$@~FMG!LTb|w4uXNnYBx|U{>BI0^ z#gv5}?x*nl%n|~kOKrrf8Blv{vFz9A@u*_v8NO78dU8@&w(d6@Wdao>LDC4NPU~o& zWA3Hx;bzX7kukwH?y6JAP48y%Gw)3ej*4%BB}-Z%`|WD$yH9^Y@&f(?J@6O1^z2qx zXf2wW&AS*c^{4s$$=5pITD-rzr3^uMq#?>-)OxLP=HOL#eU}7UIjzpiR{EP?Jby7T ztzj-{f{~*=Q><%D_k5el50NeI|xD1;DQudzC=DyUOLK>t84P@V`Rjdxtx_{ z!A~KLMjCpaIqSS}H3VFzi$2zs^;VkJ%%#>(kNWZpx#lyw{!jy<_oSxlnMcEh?q^K7 z!NHN zx+9nGi1W;ewV-$1b4ESX$$;)sr$zzFIC_cJoQaYUs7EC{|?f-RIPxvFSSmjz@U(fOGirQrDb$(dBtF4noZnp-9rg#d2VaKueDWc98}xZsf3{>Hi71#`xQp1-OO=Xl$!PWun}1zR zZB$zt>PAH5jYtbbf~5iCBoCY`Gdk%yxeX#;cKojO%4D;bj(Vc(0~hrrO?WJ0E+5AJ zif}Mc{rw9If(nJ#ZJQ1Xm`AJ+BDBcVUM#^06pSS%H4S!Zhr@S9Qir!(wA5zGUQRhr zNu1c~8X1g}?tS>av^f$}bxC%*GA+kR*5uX{+GdXTesW)gfOXHf>~tZsd!FjGIuJ0n zf_rwXYP{&#k{RwkeU2n>go3SC!Ak)))i>VGOP$3RjK2QRz4Qx$M?cf(c&C30(BhzT zjd=*;N&>6^x^EE&%;5+BL9}26rY(8wsS~`^*>^*5R zCmVLo7k|%GJr9C8oGU}p|qWIay|1k&IjPh8jKULa^`Xz zG_PM)j~#n%nNI|K>n0$3(_2E(xa*7~9kMAX&FCr~d&*8mONvCH2}F6&2!k;kPHutU z7L7=c?pN1oh}VQijEvsl!$RmI`t@W7hrZ^XmeKO?(LwJUq7^Q&&Hlrj&+Bu*?v;dw zjl?6(td0|X$%(gdSpL9@t%bK^zvgehKSZjk)F(J>I=>0UW}o)ulZqBggXmhZ);M#S zTDPDZ(3h8so>Ft}dQ8U80lJfM!w~%I^ZFtecA6vPh!iQHuxMrXw;5fbJDaePJ-v&I z2ULyX4V|NUVnn2oaD6Ra69=${3x19m2qktcyMdFuKFQH(N8jNQ;OD_$cokef#YMp& z`!tb3{XL@YuEGa13eQh}%ENmv4aUO4{FMc>XXi;pFr)fpG&2<(B?yQorG~T>R#5|}KNpRe+A^to%agt=?8|6*Rgh_EPWv6B`slTXP=B|%Ig^GaOesosO&~^K zVnLVxLs#WPx6-9;Fu&E%RHPP}u=B%B4SaSZFb-nLcqwIs3 zux$6RN8e3~`fD-)m zGaLJ}-Rn=!_~=4oAnU=gz*yOU``ZXzd9;4b<)Mjv+K~z@B_?uxIyf0YR;6s{)a^UqTi+sezVIS4 zTpz@}#cXsV3eAu!I?=NC^xfKgj#SAenqhW{XYW%Gd(StStcN{-#SZ6bNhLSo85=9Q zEXcT{+m5Q9QV*~pooh?GewITc?BA{tsg1}ZUMXK}^zR|KEVgG3odn5zIzzZWN4G!g6QM5R`) zF(LPtw5C{Y9i)r)-}yRpclAB%k?n2fURf0*ezn~gg@*IqFK8FzO{L?=czu9_<36mc z*3*6Gg|$M}7K@ZS$2RVYgQ4XI<+H8BU$T+Eor@Y&;=;!Xt{Oil z#p)l=oet%U1zLNl9EcEn2jcN}O5qK-NBJObfNvH9VC2;`pyvZlqRbo+k;)K%~q>lY{E7yp40+&gvFhjPh6aTZ7!6r?zZa29mU@-hc_d4S7dA9IW}0vrkKG!} zyjC!lwdy!&#EoQ`NQ4xmaHNjAmlqqeUS}a<+k(r#VHR_P#k(?J7aXXVY@G#)f35+W z)nVLht-g+7w&+Iwco8RFmiu)rZTcyjEdW&Pk-O}jb{cKZW;7mBL@Lhx2O=6MA{Nc} zFke3ePeJ!>0oWu%>*@KEE{E@U<2Ow&Zm~a{R|xIl=secTMn?t3hefe7=3yakDS;0) zbthVW+Q<5WbigL#7{jB`*S57Gz^aPSc)X%wuym1O0p*8h0yh&sHx3U!i53C~mO781 zJQ)<)R*qo_5Uo{KEb&Q#gI|!@oZ|e%WLW+bre=;VayN znQ;(jsrjb=KvZkLP`T?Dg4ZL8^ZC@mVh-2PDjzO-kIeawZA6)Svi<`NUc@Y6jFFO| zP*MtU>s$rb6WEsXcBR29E@?~@;aeB+@G$`AK|IailE?*tP{l|XL!5eVc zrUlcH{yuZSxx6VD^n(4AKeYuBy-g5bDPBK^(JalB^jd(Ztx~McQS*jN7TNX$~ob~j# zW$uf0tbY(XELt~Xz#+UT`ZaY&{9ESd<>el&WRdy}|51X0TxbcI%pExv1DT`=$GkUR zq)a8BL{b@*YZ7WLeIw4h5}G#`zidcD%oA>I*>C`GoeXjn z(zyAMyDK*lRbuNXzAIMltXMTSnKz&S7$_Xl@rh_#ZE z4<}#q7jdEZ@;7u=4lJJu!+jhztb9hDSqiV^F`f6MF*M1P*W*g>PpKd7#G?=K_RP#mR)Xmuic!|Nb?;H0;4HP$SnJ2nU zDXQF~0e5vYH@H{znin0k-_O(Egqgl##=OiJaMKQ0Nj7B@bIJbTZ>m^)jCCu zVA;6AG{d;JUgYZaHf%$0j)Z(WyG563v?Ouz2`(i)@Pr;xd-C8{vMNB zQD!aU9#@%ZBbJqif`;8sQ>u?zv5BXdVO#BTJ8%wONJGu1g5+okN}k?$at|oicWKJU zWPo7!URl+tRh*8a@azvn!7)+{ZR{D>SG5j4v>Uf#OrwC`Nhwt8*x=d9!V^a@d>_exz^H}}E zzy~v@PA85XKEqbO&SXv(+S%0AAB}Trxok~lmrnmhoR9Z&wyj^V4foXph)Gi}6v~Mi z^w5|w`mJ6ZARbDWn85?m_(YMBt?4b1(a_vl|8=_C3^H&d*yx4*=Nl~vYPeP_3=$F0 zux?n3qxR8qX7{AgzF7wEp`FXa=%k2OKVhfNd+YxcRTgm9Z4SjNWbEj+Jn zYs3w`E3k%c%Em1RUt5_!7L|($e%#&aUF;KS-{5hNu+O?_po6@`OD0 z{`G$3Hb$BB{x^%mcXgwO8u?4NG!0=iG*D4WeJ4jWx|GG1W%;cFsrr;YK%Yeo8@;B!rpbl{9}uXEbJ!o z4O-SFtQSyKrVkMlxd(gUHj<@K)9>$6-xPdhU}_<8EsHdu-2N`Gbt-u{_f)RTPnnaU z9^-->Q@JbsUEP5Rt2A2m++l$e;TrW4ae4vcRuMu55>8AzIkD_nTq z)~vOmrLCps$y8fa_q3(MPA=mTH9e*<LVYfhxv6{ zVYu5Pa6==stRvxTJ(Z47zRAqdIa9hI)#sVtPx@unP4lr3lRCmZ4Fqgv`eJeVf#NmN z(!x$sL(_o(AeFv%zjz9(;ESVr9_%f-C>MWiX)XTjeKz7{mN{?F=8VP{vTKP+%#595 z+O!w|{YM3gNY7xU;))YcGe5mZ=`+iy>3p_6QCE?x9*dypua{%o6PNU@K{ znS75fDx^C;yO|MJ%qplb^YJMITQU8EOhSd_Gi{xET3E>Q8+Qcti_G&!G1Xl#J`Um0 zVzs=TKx?hiLqL5fB;>8bhJUnOi}d4EGmx3uF7-H)OTs2)~)i^e9au ziY(>i)T^U-n2Fm+F|5E~dait!-8ru%DSh*TWELMBFeBowoBrjaWxdNcuWYZG;IxnD zIha<#)!yS)t4B3hNKpZux^@zRVu_B2f+a;?1Cos612+7@(e^Ic_Uny}EofXp@G`rr zlY_Ijr#_dDtB!T|mQ;wG-!qpo&uxi`jgdlH9v;fLSeu2B>yUoQ6twlAXAq@_zL0^c z0Yw+n(sX>n;uUZol&S>fcQ9r6Fk-``;M@D>Yizi`oP<^)`djJla`JA5xKuN#*1!}_ zEV0;PZN>L8VUG1cbS#{q!9CwXy z0#6LJ21T|ItH|AAP?{t!6Bba=GXCQd=1;<+TAp-?Xj4(uxv6UgLLI;P=UGjUM}hP2?{k# ze6xK@=;FRrrz?jjmHlqQ%M54Ta4*r(h$!wqk-&fP!E2gqT3OFdL@FFQA>7Tfb!QeF z$6IgIo>uiVx-uQDzpxYY4pwH9wx*}->QZ|#%QI%=qXT)XO&`8A5|RFvi;s`%kug`v z_PJSbU2EPCryN2|&+J5FTi?(1r!GZL96VPnnS(45rF(@iv}FHed~FH6PEs^EPqGo^ z*_AuoeUzASDYO68;(ctBpIotJ5f5d%9|DfHelj=2ujJeXWbTZfJiufL?8*A%p@Wt>6QmIqY zFvRNXkBJ|gPi%fHCEmK7xwIU}#<-T==OM3%yjJa4Gz-UtBozjJtg3T#9k0UP2&Oez zq2=j}&?t)K(=LBx&nNkqy48c^#3)S*kEn`Fk4O#hFfWQ2T~9Uch4HSt3zvvt z`o1w?)I4)!;C4Cy2p2bt8FV)V=E=ZB#tu21q0+8>#)c8ac_4778a*6IPR58biAbUs zdO*jjL1F!jTana46tzA7v@PEs*#?@bRSuo3%l2)BEIRwXkRkZKt8Z(n>vP)P74!Jb zXj-da0`5?I7_A)#<>eZs;HL;?xcO5EGNflJ$trTwIxz+(&8k#TBS>#V)%CO568T9x z0>xJrkR_TIuT8Pun2lPI{|{vH@*p2jLV+I^#DDR%oRnnRFSn0a)}a-8tENu*>7BYY z4;S+33?08h4Hp+ZJ%idu)VJqigi3`1yUNvH{Uqy&(rst|5Uty(b3e+TxjK3Sy9M=( zF59d(L|P)FRAm43Ll@A}(vblF`xC~2pY~l03w9JDFtWm`(}wS9=ch{XYP>K|M0o1b3aK zlZWnIjJ`l(avTqqk*bT~+m51v5|&^@k+05kb#m>oTxLtnTE=CR9nNG53UOx;{n%JF z^?T;BY{0O~a;iM=wQU>EqJ7^F7uWz>(KJtnzCc7qA}UWKDTWMEbX8UJ8COR#6@6f% zh=*Q`raj*~?vGPDg_L@}?_v^XYH;8@6E}DzDJX#%yS&U|ji`0f}Px!#r?T7o?UR3~SdPn%-Rq{W|}` zM#So|hVD5vGij`6c1bep3UBme4d&%X%hka8OtE4Aa#zbi>Jzg=-y_6n>y*6b`^g8W z&6y|tD2mQEkV@_(7jn@~DCP;4_V771GQ$gwf@gI-sXL#9syoawku5VX8iE?WAOHDKpf$21m7)m<=hi3)9z1&R~{mI+m+K zZt00#VGj&JI6bSdp0)ExYrw!5n7!5?UT4Z9PmVZx&a&Px^7(l{Y46;@EJkV;H>Hc+2;O zd$|%ybXH^KH-fq`PLFi>=y)_3=hUcZ5&Ty2ocO?JqEqmOiZ8zI6j@&fc9==9OytDx zEJf^Zk2?ek*xz%h$EHp5Rp;3^a-K@u5gTwXEin7b_V>C&pMBAM`j&{|OFCM}Pe=B4eLYOg3~hI;f;`uhFVQ>(jrq zc5ftZzEm@i;g78Q9a2ao_>Z` zA8T?>->xV4F?g~7UG7A{FTX;{hEL%s?+l^x-mqnWPyN}MARBT^@`Nm=YjdJl*jGa@ zVNLf{|FkV)UPu$C>+e@T*}ql>KF|*vmuPfkBH%Ss?Sx{Yj_L>K-c44BwboKQTH8x6 zMT9f(WajH|x$t3lmgUT9EzDxEB#+<5Fpne!xM?+W#u22~lSVBy48r;diI&ybezNU| z)f1Y+n$ZtVFK?I^W(;oq&0W1%8{_nyI4jpY5X3dMLyqngiq(wnfKBl3Y8$g^RXBYG z*N6JX8Agt-5xTqag~80?gK}-oanp@qymz6=KH^m$=kjag4W!1sezDB+veJF(-ImY7 zN_mH`KG6`_8fdT+mS>xeQ%(_gi0*bkO!PMN(;Ho9d{34u$q*aOOi zP*>O$s8L3?&u2|QCK48}&48ahl}RhP7@t*WPk3;7ycZWtQw}1!k`}&9?kAgi+PJ;= zH0MGdZTyB#000l+&;A4Tt9+ho3o3Ih&t$SQsD$OVtr6t4)MXB>qT`^))V=!`K zK$?_HG!QHssb2_>VqVhpDLLmdxRh|;9-$af+kEvsbQUQx$yW@lPgr9yEUE#w#>NEDKq-T|8v+R6z%t5uRrQ@GLEXNk&}g zX-|lE`m5UKd3+^y7RNTmRSpnz0)5o$X^yryNmj5w1Aas}dR&u`C$vc)q3l5+VU%TU7{)XY(yzV4x;w?}HJP46$z2 z#=EYfJnOKs%>m6s)rA^s$A_NWH9(BGxgP@xdoE_P3%Q=AqKUSCyiRTSoO-~oPQ>Tzo3wv+; zsBPZejb&`%3yPkVmClV`pAW3m&@vt>=?QO)RG7H2 zB@(hJ?MDAe{FPsr(C)qKF8_gy|5}kkolX~fmd*B9f#Gv(mi0B%-4@mL=lto~Suh@+ zB@7iaJ=@V$YSl&hvx~x))oP0qYwHFNt>$mvXmFHKkjjmz|AexBLaDw{NUO&~MsG+@ zF2?gTSAkgOZVseplRf_BYFZrRZ$xs~@krP}#8qLUw2iriXI8>_)|e(nMKF_`ofvIm zxM}>t47RI5j#bU47;4TuT?44zYPrJD?!n1*4KKWeG-*zLf z1rZGguNRVUR|Fc z%+7g?a=Wzhr`OQ5a~yWc+|HSuVM_ylE)r2)$T-ArcKMd3OFaqET~o}O^SBUvDuQlYdbk-vE z`OM;P-0R8@TDY&-?OB@E3yFTRbN?5MaO4VYAN`%T*Fa=KUh!M;+yEN5B*?q!K@~jy zTQv3=RLVT&H>6Ry=1b7=f8S@@a28$hmJEM72lwPNU3ZwbJxa?C1H;-FED& zv~?B$hstk0EV$Kh*3kA^>Zkut8@A6N5MPv#K6-koJJ}x!22qkUi+5HnV7p!!juV>U z{~iV$l*!fOrw00(;;%)N?uFzM%h#03Gkz;yX`T#KEdMgl-;?)J1iJnZuEtG{*Jtv z_EPx2M}RdrqaCzo zvnjJtef>(>J=OK5U&46d5)#0L^eq0rHvrwVH%9S%W?*Py$b&Hv!SmMQC1+bzcLvLO z!)|+tzp$yxXbbi^Fy6d>6gK#3FSF-&M(F#Bqswx|Z>J~O-$M+Fq0NQwhk_)-nwj+J zd&AkI|K%%Z4~HV6Gm&|77##{hmIR*1`oLf3W4GT+1~t?C2QqiYtSlc`gnm6~)eSQ@ z|CTeNz_~|!A^B&Ied(gyVJqih?{B|T#hPd0Yp19GGSvS@Rsf=8U~|C@sC=6=LKxh; z2M^9ID)UD)e|Ot}=Z0B|5lTuJd1WMFCd7`dMU|DZZ*yYeyyfdE?_b$w-}cLWhwC|A zl>L_(S;)T}K_L36*frg1c>*gakR!f|_$n8m z1V}k-UD|F+T#VtvK_Fk$e2DRs9gpO{X2AvmUE^{Afp`iqUIjj1SI(_3Ac5yff4z14 zO03T8&oo%irp4>FRhWf-@NNWQZrXfsDkp_xwCMw2$$xM0fc9r5a2b2>v{Q%<;er6F z4n0}N3T6xhVu{MsrqxVOoiD6ZmCx$^XAJ^501v%Z@f5fV*LIV5tnMropJBCA_zGd! zvRA-(c=i{THhFL+y_SVKmB~TpjNK0j4#k}DdMGUjg#(E|pj-Ok5^Q=81?Nbci@ZOZjO4@aue@4BD z{iyo9|4Z_}6l~iP71vU9 zK*ojF=28}WHrI&#q`MphBm67L9vjpC#!fnNM-Ho^|4%9!5>QE~xy=13wwtq|XM26O zq=`;-OO+E;pD4!FTpw}$vxolg{O|6%4{)O7GHIv*u3Ys0YC1@r@cG|`(eU5--*NY| zCpnu-nFQ(wAdab?2Le$^aIrlE`VHUk@8Q7z|7XaTxZSJ-0@18X=m;cP-HnxRdNrRe zPM|LZ3}E-QfesEtrUp3SEtD>aSu8bMoK1q{BrkUsZ))YOrlNQ&9CUZ}Gi8L^?&)P? zvtbU?Me7G;V!w<9Bhar=x{`w)f}k)9#7JI%@`n#$)q+;{*oI9%f2GNRC-2`=Iqhx^ zSn934lvF(qOblOT$xLL%I(k3a{mpHLrk2DZ1m#@g2! zrP@A>gj~P3)~+(stfCsYdFgEsr{ysEI46_sU_POpM>l2pWsBYcDZtp=xI#VX0pPGt zfM>|BM1!s=)crc+*e(0IF5k?7uY0!ssxY!^w~g67{)V#nV;pg}Y>Icy^U!C9eqv9<7mk>woDv z!&8iTLA<#xD*;uyN*m?x2WFn*J<(N9$yge?Dj`6E$FUEAVmHM6EAdAUfO`-qm|o3~ zz{QgY;-aMjdVLrbeH=Yd*vW7n5a`b2KMQp)2?xZ#_f#emYAEUor&NCkqK_T{fiyIY zT*(nG|5xj|wxR)By?51N^ACESF9?DGdp1d{z`7k08#3M=$y2|v1ixMy; zCkKHjgst>N*-Eao>$j2*9WU5P;nLO`3PEIXBST(t9zPF%2cEK*?7ZBq7vclG1%aY# z1VBy6TS1h)Y$6E2XY>^GMqs=~*gK*l|6pj?P$|dI@O878(;l-|Y))$;2oV3336Mbm zdsW~c^Wo+-R}MJW5>!b3NTE$#OHHv!=2*TUM^Q|M*+ilU%0m&3^2R9NY#DBAQgP@E z+O8O!KEC(xXu+>})u;7F&bOD(lv`r+DDtRi)QvX6UHEBvL!DK{U7$s}&ZLXy99cIM zn*aJAs$#xQ5wTZN#l<%-E?ylbJ5YSK_DUz5l?~?vtCSD_?HT^FI38*+aAAI**V@_OZfMbEAu~tCw7j?cXK2*=K+{U;61A8!mRi!Aj&U*n+uhW zW~Q1=KOXv94X*^npCwW*+Ice@4|zt}kqw@xDvl3stZjT{s;^TIkh^iMJSaAa{f6aj0=$I<+YkLTf1GF#~;{UuS~PaHqLDg zZhSlvu=Sg=f6wENBT$_oTp-`J!DF9Br9F#7&OIb?hPb3;@NscV@lPjJ7>?1!@^i8U&&imOcu-`E_pU zb^Nad*0XZ=^%kN8J}p)>90cMldH4ch2BL!-1#e(G)EHLQrmE8pz1lpp7t_RPg*~WG zvrOs2DM4g1meDevp)?5#eVxB9^i)X1<3IDa^#|5YZSTnyW7#AAH7O8h1yx{B5I;Cc z?&r?Ftn=3I-xtkE>pbp6yf<_NN=rr!23i3Z2!u!oZnAsSt~Kx%^DB5!d4E?cX)D;K zHB95dlbYZ~XH_7M+`sHVoRu@+fM3gry>~e>OYqkVe;!mae|wlm=c-vpah0yqSWSn)ii*D0y@*}&k95&?Y(S!F-8#$YH z?wK9fsyY|pKXTYQ`JTZw^@z()q}-1(TA6jdNV`1a?!t|;W(RtaieEh@ouOPpKtc>8l41zp!(kHL#ZkYwlTQ=n< z|8KOzT7uG#*GYBRw{zOpAF})Zo^=6H{GfsecXD^}W0lGZOoy5&+o?F4-X%m zW;?Tg8@+F(tR;6nY@jZ{|LHzGNQWHgBCjes2R5L^g zSliU1P~gI>pV@S9{$^P{^>oCPh^h6Wg>%R{hC``cBBIX^+An(47FRrL>$j5b2qNbR z2k|82gypt<(1wtdS(!92%717C2AwLp!IHH}$)9%?- znk{?~QF5xM@Y}EUSo?mQ7ToSIxZ-a(zUeppbh3S;8N&z&zG_pV>0H9`KCNq0Fn#Htzvl@pe*)GZ z-NkvfIk>%+zc(*(IDJKla^P?>Mzip#@%e>KtM4u4vh&DGbNSsPdEjHOP5ENPGV49O%b)XB)?R zJj#flKyl$9Flc+ePQ@;<`l(G@k5+(|=dX?9`vp0oU6CZ27YZTF3MKNGJ)q!Q&%3ot5jEp@3D>&<5JcY{;VDfvW!mO!~83d9#uiwZ+VQu2M9&nLu&EkU!_RPw< zK%yQQ8%T!kmKWgV?s3!`JkK_`@m`-)=RH+$q%VJZT8u>DKa4)P{v3G)qdnBfry;=? zO~GiR77L?=S2fi;j+?mfyg6$P%_gcs4i;3H2XNR&C1t7QqMwVko-d?~SKBue+N|5W zvwObF0#bl7rVx!B{plXqT7O7kNObva831d9<>vLw4QvouUQKp;B1$5gP8!{43V zloa3dFgEt+fYLO)0IT^fY1_x3kT~3nm1#^}AZBOc`^Ni!`a*PU z=9)(qi32&kh#&s7fyGlWg+}69Sp^pt2y{lVBH%&lX7Hsb1nHRGbGAAz`z=2w{KX5V&vYeFKVt+@ z0P|v%n5Va$bt8aKE^wYDe!9mn*Oj^|I<7o?nwtFfkwTD9;kPd(XNqOteF$mK%U#D- zd|zEW4Ysj;uljB+Xsg+`ZMHcmlvxosINtSBn37-N^S=-H`M(!@Y>FJTplhY2anUFT z%etalW^=*^Hzv&WXWb*AblZo)$3eRS;!5rt#T}1t`uZORhRhj&Q*j#&3(LJ{?RVSX zEBSv0#jtRJC_C?udR3k^-by`D`o%!+Vy|w3W$DlhdNII>nGlz&&ietjxZb%qA$fT% zTQE(y=IyG>ibZB7wmomvV&l;L_usva!2gG-uYihU3ECYX1VV6kx1hmU9D=*M1b25Q z5ZpaD!F_|fB)Ge~ySwIX?*DA|oS8k){Y}qQZ*^H$@f9v4y#t_0j{tyzG2=;jIFzI% z?$7v_y@kF&2IE>jE!;o*VydpqH+tDh-`*AMX9NX%JrTD#MCz+AZY=A%kG-nh#e{l~ zdw0Mw4_fbYf0qmZfS>53`>t~qZJrLM<%h~ZPQmr0><8gMFODn4u;$&UOnNEWpkeC> zaM}l#66lId&r2Tsx}%Q4`zAr@OTYfaAonaVu~)!9#sR>K3|bsmw8CPU<~23m&E@tId_ki5k1$5#pRjx^pbSmE9j_vaoH_~g(9DnjbGl`N zGyq{^3wVbLV5F=PmDgTc4yRC(@jfd@uZ*xOr_LN3$Itj&d|A05D_q%}=PtSPh=DbA z4ls>RS*i@eilDr_c5a`B1<=W%qmCe|HoR%O_5Jz~%hzF48oOv~JAGTc+*}g%0;Z_D z^^tdlwGyAn=bZ!o&=`cxpa=g5-!mc9YpHE9)IAW=&_oM^5K09VAl1tkJFZV9Cgcz& z-JhB{s?8GjGC~XUwf@99Eq*2mRc!t_Qo=lxb_ng{GD-3e0ww&konG2WRWIRzl8{KQ zWEdoDN+b>lubr{pbzHeN6qQ={%NouZt18O_@?xvDC@Yd*1wKz$99&6;-#x^e7|-v} z($Yq#?RhpD&L@0PqJ#bfs|d{kNReV$NQdqCGF}gtPbdt3b?&s$Eh*>!EJh9l3iOXy zLbg(^SfXW`&ukA6dh=;U6ZwfDiHUgTn|aXcsBTS1I|}8#vl7bV4kU${ohlC>&7Cdw z)y(mjnp=CZ-Ih3G`z-Dw9};*gH!Ydx_GWPok)Lt7nUwpvQfGjb??k{julgbna(IrGy`p03d>fFka`lqdn;M z;EcL%9Tq}xy|1KTtA#KXMFszdg)Wn@Jn5arJ8{z7^OI+~H~R>xj4=VZC0;y`*3hlX zv#uTg?2YN+XU`+H0#S$>MyHs%_%J8F!JFv;`f%6e1kD>IiIx7Dwq?^4qpFsD)%K5) z5-dVj4FT_KJ7EjN7zJI`DA5`_@O8Ax>&dfe!P$i-?_5HV%NKP}R0v%X0x0kFbdPNs z#p|jqGpcCa+~R+;UcA=XP+UMV_l4PaJJV=ODG%W_SX;W;x9Lu#L8stIjI{E$JTLiBnb2J}XY<;h zU~|Fnkd6!1AHR$%*#U7<=pZ3!JEdR~`e#AbkjnUWV}hs_t*gNFBPZ>6{A~g< z+P=>&$$btqW35~ijR_HU2WYMqtqX#m2C9a6_-$Ms|L`MbCx#w!Mdw z@X@U<=n=Ho^1xplcjQ<$s)n2fnLV<@}z=(>cy2Y>U7*$s!(*LA3MM|L<_G<} z_;tJYr!|kImyX_{V#ikwKT_RNMLav4Zr_4%T+^_4yu=mu&RE#enRMIP8bP<4)&>J; zRZ37oP_O_LCV(acg=rB%M=yRUj@|`ejm?_Bdc!2w-znf!KnxP%Z9bt|tZPgC<1Kn~ zje?AeSG-vzYW>x{vqH8;_^dsJgIP%HJ^GN6K-!YL zGP->6GGJG|>A%kZbBbQvfI{X%B%Z2gb@0~Q=lXGg4oTum@TECvHK_#hDp-!fA|{0u z#hlyWW?ZxJ3NGbsMUm91kn&rqbN@dW0Lh7CV9jxkflq!Y56>_q^gNLcVlIS<6NVDP zs=6mBe-nA??rF%#+~&)-j95Pv@Jx;Cxb7^f_7_-HtXdw`l*^JrKrGeeaZ_{nf3R@G ze>mDc)%j{d)^_-a0Qj;z;LdVue$X0`%=(?*&OY?SK z8u=eA1KFEwJm&lk-ASdM>u?-()n1>7D+S`l#W*tMQL$(NT|B<0yEFO_AV~jtC`Pu> z*kh=*rC~e$>Oc>>(;&6D>F2a}a^Jt7!v7iFc~e{e+6(U@ONw@sMz7n_14ruWku}dv z7C~mm#ofdC=d0{Q?xmseq4<2iZVCEgtGqw0DEk~3Hhy`b0YVU29XE@Dy#LUyIsgI+ z`gelp(K*FSrmkuPf^rwkL>UDoITQtiI~faSX#_>Cr_sBK-inJ(w!YxJVZ9()2KK8% zmrDVsYvPX6Ti5Y1t%on)jGf3R&D*_k^nA_Q8RJ!-xmPAib_fG$LHKm!d4UkbFaKbn^d=!Z zg54#)3wb3Dz!ZbHH6Ri@05u;6(C!6&Q;L8NiwFP!)Go*$fz-x=Cpfihg?67|&KezT zv(~u|&&{RsgApbW{jQfj4!c4s9UZ6D~1aSbuUk-~iYkDORoYKoYU;k;7<8v#&A znD5ZK0GN)b8#$EWb@8p&(4ogOHecRHjcnhKGS}{tN%tODIZ|p<0#+qZiU6#tM9IIA zK<8(|&qL$`pjRD2b73+3l9F99MZk5x$m2E^CI}zlU!#8qLeR{=3)BD*tN2c-3M~L) zVAueF(us-Yk+HG6PKttLTz3xQs(+2d{+(bwIJzJgn0O`aTQuSK?YMJN`a=Kpk$zGc zZGQ@#zP?d?yWgO4N6CB)O40zKs{QK*IS3;*AU7(@h3*P=_PQ6|U9v~qLF`VJY>|cP`dZ*$pppvx+76f@Yo#n`u+4^djAh2Rk5>;ibtyzH{j@(b-}Xw z!LLti()Gu!BW5lyJeG|O_g6y;*ChB=Kl2Kf<@vDC6#tDLIk8YBfDVd3(>8Ai9O7Zy z$EyL2Rme4w>XuBOTb9g&q*35ura;6D@;@bF&b4SK=;c!fuSCvw7942{;?G^i8nT!c zTRM~9#6|Bio+*j}@6blYEJ|QK;AsJ!HA)?;EU}y>pUSkU)-Q>(1Cm)BUa|4CZ^koM z#|Ok4x>m;t{uU=cgL#S)aSt2tugf@!-wy)BLFpyj5L0R3zXcY)5(}U1r#6f#mWch* zV~*p1jq~g}yRY*Fr~TCGP^>W81@&wv$(IeC9k*%u_T4_Og+if-7<>rX0L=gRD@-Qv zj{?vf+Ly_rSY?52)UW2_rdR%R9&%jYpCn=*D+@xHiRJbO!yq#xJ0hZl;ZeeOq9 zDBG6NSB~v0kE(g=SpQMN06@{{Uk8L3R9I0s8sQB{C!or@3r%Pnr|f6O`B=ezT*>6Y zCz@xKvhP^hmD;(yzAFB^`innqp7b(f))~Fddy|eJZxd?(831rF{Dbd~XgC0MI%c)S+b1`x1%E!a)RfYu60q_-e*WG58c^LdQ4q7uPM!?w3dgrM3b# zm%04hXu&%HeEKK6VWY?j%o3|B6MqQ$CD@-+B1?ZxqY)FIJ9Sd1n;B3 zpC3kL=^Z=>R`Gb8WfTRvTgHe%k&2v4#om_cF_jkIOw0^6-Y{ng$lXh8uUlMkJ?;6) z70jX%|66M*w3e%t@M%899fCUgeaWGu=OW9V5NMiqT-LY_-Z-w$j@suK^_k-Fsrbz^ zOzV_6F!t^hVb2GSN7|~|z~Q@#FA8~QX9Z*X%wX5ZDI#+oovLUEXGh?NNXVYTv2-<6 z3ER%qHJ6Z55%Gq(=g5Ebg1eh4Q9qt_%9`<$jMnSpovc$n7Owu`Y_Fb<1Obv8#1h{7 z>B|a~_eg$MHRgzOSA_1GD!Z4SX@0pxF>;EkB$IHEaYL63tXP8%7}=8qh=OiC7PZGU zR*$@lSg$EZPryowv|Wt+)`fc%9mG^@!ip++0&|S5>+Y%3@{iK3BU&v_RDBJ<>tD`j z>AkzGfLw^*z!V}DiD{`W3K)6JTfEgC5)9MjkaV9F5>=Ys7z+WaN(i4tFslM-BMn)t z1i!RguV5FZaNy(D*OjjIUqV7nVdp#NGF`>97|I_?{$up{+2P}rYK;17u4~b@WucoO zIX$jSgLN;g*Fp(i4@t;95fCP5<3zHDf5liWyqd<}owMF@^MK>q3?`QQVEc@wlNrnc zb9Yr0RS97NAWsaFzxmKf2XUlbBsE_%HcqhJDOs{5xvyr{W`$q9f9?nGUv)v60q=dF zvt4qbw~u9UicHMH*yR}D)cr8yJ553@x^&*Spy zyJ+{Cga^vzVWRdFKKxRUeJq*zGWcrpifDJMbftmKU*NWP^dfqWlzM}luc0+wfU892 znnd~^u6Z!R&W{pg;>iu>UxI6;;7ya;HTok1(2mm44we|KGi)k#W7@KLPOne-(OQne zej+=OZKJil>O?$!U8q)Jgy)zbTg750m{Q35pCk%EQ|K`_FrZy{j01{T<0@b78k4+w zB2aMhTZ{9$VEX9d&*t z6HSzONs2~))+Hd%}wui+hQ`~|4JdZb^1&EH3WOq^X-=QBMG z0#3kn`WZ$tF`@GOkDg;(pzntV{?cdD|7ISFq6PzEmOY*#_K@nQ3RN4PFEYeHq-{CuyevO)g()S989k|kSe z=U!V6CExvfz`q4T3!BLFZp>58w<^S6iYSwoZdW^^%^KpfRK;}43v6B@kutL*HiD$} zT>l;|4`Mp6kI1m25-WtQtxIlLS~ ziQzstQQzkU!n@`0NF?Wm^5|?p1Ro_;nEXtHT6b*=uRhC+>oXlk1s%b53PtDd@@xKa z7bH^2_6;|AixZjke?qK~1N#5%|p9x31#MakG)K-MbP*6e_w*@eIu^8F>!Chb$L+V`V}( z{PvVkSZJz%2W{DghTE-9W=?|{)rv<4^d5@j6d7o!3;?MDa4xpBFXvd>j&=B>8fEQ6 z)itU&s*XtFZ=0)mvaLBw$|~k`$vt-RwNqo?kn~>y0cDw-5&1mlW#~)HE7Q*HwE|zNVg4^$ zd!B{VB{{?&ak+E9Lw|cory4T<0*rr0)S)xXhEGPURoL6<#Sc_DK&a@t>klh7)mzeV zdZOl%zD&4Bw>}o%75Zb=u$q%Z)UIwS>rV~4N%&GizVFXdn(rQJFJ!+fB_Ef>51Hy~ z^TZ>uxwzy~**f*hb`@cWGbgJmZ4=`GEbWs0X5j;5tRZgStdM(K`TCCH@FBIix#

g>ysY*(D(rMt6R zEbU7nM1M|r4TmO(Ko7M&c>o$NpK@CA4E@EBG3bYMY#wxAVaW|fsJOM$S+0C~MoBlj zd`w$vmAWWqRF~qbC2K03KH^B9Tw!IYc3`XBeTvB`aB~}y1jidP%@<^6L3k23(B~{f z`lr>n$0`EIi=56;Ta&n3N4kyl$*xt|amQsaprKTk8FK!8wXbudGkoNt!O`QNxnXt5 zk)5^bmWo!VrhDVofbD0xtH*Ggin0rxF~;mZ^AxHn30XHFK{)}2UFcY*Pav$aS?_mF zB_Jt5!IwB#mO5bCnnbq+NK&YcTH(!-kN!RJvSEuj;vm{8~;9fQ!W>P6<%2>qXmuCFKTSdm(R!g zx-&%IjLThyp>1}EHu5hLrYJKP9-lK?n+V$@Z`vdHMKbR->4oN%Z~l;zh<(aQeX8W_ zk9v!N(*GwxLA7yrIm!oNZVMN{8tX&U+;2ns;GgO?6;{6fWX*jKXF3`(`k;}6xuNLR zyq_0iI$#Nx5b^{a+rHsyx%c>ld{_JmWgekTTd(9C>3jf`#xDryLUP^8zLwl53t;9h zUa4lWE3D+%SeuOHq91$e|4*w2v1n+Q`shJpi=}te+-{bG#Af{^v`?!WN|%30dsx8NurGQ%2FLw673|5BC?kAOSTKvJ z@lSE6QgsfgVKfn7+r3R)&I=C%K)W}-LO2}xPM~t)np-jC`J_>$RU7{4ajr*Zh2O4M zr@DMO5YwmkL9E#2!!?%i@BQV`EB~7iMelCEWHEhHQnLgTqPVwgwAZwx2&P?>?A#pxDw`a+Ghps8qkn&E zoS2ne40S#87jU|^*V(4Xg+THPL1K93g@fP@p;?|u@`_s&|N?)^uP&qRgdBFcl(0}frRxe2iZkEiLr7hF@3hc9NKop!V03!)s zZA^AzFqN%!wk>a3Ktc+=)$li(wEP_W?d~+MrQzrRc=Yhy!TdgZ*sYp(1p&qqYr1qL z7lH++*2;-k_2Ce+T}uQgGhZSKtPy~a9{>Ovv=jseIBW>&>9T{dCzUqR)GpD^yqyxv zIc@l?r450%R;mK)3FTQ?lX)P6jLE#_F}Lx>i>EhbX1=)$P>#8XT2;)FVBX6iSEtn* z0?@7tAZ#iL0kA4rShhBL=$cDX4j+aXFssrWmsDm@_|6Cu3w?BiG*HP`ubn3sE9vUn ziGEC%#}A*l>VMmBz)Y&M96kPZ{}+H?a5~OtEbR#Zb-`pqq&=qqz%d+~#HXO#I+7^@ znzITYl;T9`?g4nV%@7Py%>!n*Sg# zZIu-i@zR%e809b^A~WuCryEGvo092XIxJTkXph<8D)aE%;=M|tJ#UnVX)A`SK%xvk0s zDi0@#%MidGw7XCvXJr7=H&JV*LQYEjs)m%s72Q#LZTLwO`K)ya&4^}&_-a;m&McDL z1Ea^z#R{f5EAMek=-YtGrNK?GvV==-9zZP(qElT|}gUAtTsv z%0x_}(>NyPN`#0ISy8_VN(YW?YpNr0Rq4yNO23Mubx8M$Wh+B?Qxs&QF1DBkvp~zz zP~1Ph1-Ppz(6ocd`O`*W;t4~XB_jgoD|QdUF{0C5G^A&*_w(B9?K#J5^V-h|V=;Nq zo~J#}b0#fMeMvl*K@uUU$MdWZvwB{9MME-n6@#n<Q<jl)e66WBt?!!q zD64+>fzXIS*6p1&Ui=}q#BSuwu?fEfHvq?*>-;rf^7qaY`_5*m3Xf0_N$PZrn2Dx4 z?S1{&U!RT6?LJY2@k>w zc0bo`y>>Q>GbLJDnxR$xSqw*>3hd4-$lQf2#Q6cpS?}!Gp}Hk*ue_z;KfBPn4UZ~W z^NgwU$K-aZ87HrL-Z%a{iHLY3O3Cxr)0KQVvGnF?NQs;(kf}dTH%`GeAfo0>xLb3x zn;&eKPZXoJ*QoD;@NrClm;=s5og;s>dt`sq;vKw3rb-JH$a0B3Q*o_%R5kvlIAq0p ze{`|VTcyIUjg=P!NjCLfnw3}(XJ${KIzw*&gJM@~Joo5HJnwk7qj~==Th74+VrGI! zkQ9VxU~9rReoyfVhy#raVxD~m4Fv-Y`wj{Q77BoD%Yp38fyDQrzegp*AjKsA%p#1% zDx^rkCh`>yo05v%frIml=zp%Y|6FfRI(MhGDrq=aM+5Cz*msqq+mM=ohC^e0t;|gM z!+f8d&d3{7BJ++UafxOo+O&qn)oj{+PVR0_KSh1Br+h@z&>uWB4N8AZ-;?rn#JLD!nh9^G)@?fbzyvhxSl4s@~Is_bC{-LY;d)yUrBr#hYcW+Mw@ zH}T(J378V_O;1cCx_s_PgOdv?KU(E@2AVal?!Q?MREd2+^)iV}cL}d0V`T*^eenPO z;XSXH$c@Z4nX)bwcj67#>ALM5ii3Vz$-ve3tM9s7T2^M^)bW1-;RH+8ZfH&)DT>U4 zA`x{f%Qww6VUrAbXOVP$`FkVzq7*Y81b-$OGJ2x$E)(L})YimX#+{muq$10`E~PrE zBc9q9Mzbc(eqnvD&qj1JdJ?wa+Gzi`8l&@>^B7I-oY%C`R_rn-(ZQO1D}CK(mbNUz zKXhw?()N&){q3FygQ$It$r;QpwZ=xqYVqah3)aU{mNEJD9h2(W;_>;tOZICvl{6dP zo_EG9e*prM8?_oIj|_H_*U;Dpdfnz?emG1@o?End=QnFjX{-j~e)eZkJ6%G7l(%1w zx+}3Acrt`eLDMn6ZLW9I4`_ExD>>|b<{EaU^bOI=p!95Cv41rkt~;4)Cp4O4sX_GK zuBUfy;`&qVmXG^v@E4%rt8gQ$+BD-?FWENlS`CAf`S`|TdU-|D)^=Aircf{L35oc6 z_+aQ`ZfYFnl0;AulpoU)(lfO@@X)&Ac1S-KGbfEfG$6}yfm;zwH>DedW{&Fj5XEN0 zs*4RZIosEw|i z3zT=(CMC9Q#AVhDo|4|eDO+)}QW8?jd^OFJhPmpi$Uc}Vj*|8_pU02(YdU|bPbOYe zD0i();8D!xG#K;Eu_ZtbT=VAXDpV^0?&Y;@A-tF>+kC)&04qe;zqnv!8df8P- z*q((_V^Xc`9%wsL{<$P$KS>sY9Suy!X$#LMgPlme;G->PHu(*$YJ+?VJ7V&z?@AEC z^#ZJ5PICVC7nlo>4gn_Hp;apuO>7aU^8t0Zu)L2!2tL41yuIIBxP)7G7cS?rRr?fj zhnM_i+znZ(sCy}Y0ZD|y%=9vTJ>KM(@{?EFDlyxSkgCR4gG=>`<&ii!pU?A8dRhu@ zoSnm+xGOl?BEX?T>OBVCI~I+EM|ZzgoGx)jZKoH|8%~Xm<$cdgM{I(xsCEE!aW?ggio)2D0Tm17ajNB)SUP`87l>iz;< zjY}XCLo@Mb)yI#u{mLt|rbMQha}qTC$JlIR86;t&zvbJ#ZEcs+n3CE#6_~Y>FYvIt zHiP~|dM=+f@>}G0Z(X<%B!K;*BNDH@*d!&a#->l(he*&`&&ppJ+d!ip>O_-WW#A_eL z9N)^vZ@zu``fffjLeT$1s6?Ctf)rfw$CqrXno9)pOQq%&Ewu1eg)43gu--@}qJGL_U=0N6 zFD=_tFbL!douUS*r=m6$i*p_3<1;8Vj$`6B6>~V!%SbFiZ(yXI&)-ju?BVWN2i4*5 zlij_`+u1M5^~shN$`fQtuDupnM@xOjC>Rv>sRvIx{AOnEE}RmQ2m#b=-$XxiF$l>2 zumoRGB50f{J+Hn73qkope7bUepY+s6WR>;89gX)MB;SZCt%=Pb4Bh2?@=wU_nu(ngd;y`!$8eLOy+0={thH(lvTU1=oY z^1z#Utltjw;o9^Dzpoek#R)|o(x6>ps8TX#FN1xQeX1N|{OGrh#ZSCa?5sWoDK!#9 zstJ7gY=zMkbx~>)K%PX#ZfkS*ar{zH@bV#JaApHxhLItipE`>q+%L`aw~zBg+b-4> z%5l!N>nk|=Vpynzi6ef8F_c;DaEco|j1v6-OJdHP%>4*c+p%epH`P>0j*;F}RPA`O zfe{+lgPYm=8=G_-V4~%4(8YPD*+f3u-w|iUsQotFe@pCN{o=3LkE-QS=a(y;Zm0iR znOr}({1A?jt#@L5(=OC5NBSD0&DRh}g+t1@CGwngaths?w?l}LlIXXAyoUBMY*_?R zUf2?~la`6f@vZ)l*FiW^Mru^lpW!bc2i`h<+FT#MeZGJ5>zJEx`~VhLfPK>; z->n~oBY!0$-)pY2j?)c<8>gzTuYZK=a-5{aM4NiK+kvDjmOL#i?0p~HYl*fKi!AX- z^F+2TuUKmuW#z-5BBH6P)r6kRUv{hU zxm}J)7%ul_pBfX5-l7>Adv5O87P^`7;pNcMX^Kgd#@|FB4gvq*7b9R~=;XqLaO{Hr zfdTG|)%w%782X@jIQJ<*;rLW+H7gGCncD|n)DPlZF)Ip}oq|{X^w#mZ5ypwSnLGQW z7tO(gPVgWn(JGk)WT8hfe&}%dx9-cEfTajvZAH4_6+b~x&O4&BU1S|Kama{+*PR}( z@GuMeL;*PqlR`fOvwlf?4t-A}R=ylR9ld9Ovja__6uOp=B^SmBmM_}HFJtH?I}4-V z4pJcaFhK0bEv7arC%W-3AY%<*n&RNX{o?io>NV|6l72>9tkZ4?nLd4|8LY%{0OBsj zsvop}ZW)FBErB5eDd)kRVELM_5z@nYskR%=J5AUBG|7%BDuRPsPr*qR8}I7IA%%ya ze(6JDAU-RxZ3YmzO@Dk-oru zsRAg#FuF}CHGQw@pPL%8dy-|o7&{6g-dGLbz&YjPAvfdQ6859`;h<10n)g78c?xA( z+1-APQKOQ~u-kQn4d5*3mmE4mxEd2J%tY8iu(n$7%}xiF}< zpw?g+N5u2e$)Mtdm}sH{Y z3Qr)Xccu_qZF0Ih+n2`1YS=IiEUv0~s+uWURMT(b#KvjuQf%r5gV*=-4-boO5<|VA z{^qUaT%nOp;x?(rfO;cGiN!a}Z_nuqU%9^9n%74$xe*j;@j9vLXzzbTt=J~%<_)lq zS9@~)s7vbC1mXE3c4FVXn=pk*6vi+7Nv^S__kNffe^Z!5qun925lmpj|F$F-|5I-F zl=PFq+j~rXSH#{j9rS?$?-}#GK)33sY`JkVXL24c0W-Ss1&Ty1t&zA!r7j=+*F1?j zbwk?2_}QAS<6?UXn{tfi5tIUffAxN<-*i0@uFIdQ7pi*MM^k#&Zw~xkenBmquP5QB zE=CL}C=VMJn=zcp-9dI<@E%5XzPg&%;q+-E^oEn5)FAs8qO7_nR*!_xl8=CDxLA4? z%RkZ+pocN`8o_Zck2nMhr_9uRsOS)03^Jz)45_5!KuW7pGGnF*8Eo0pDb*G?7qhsF zK7CLkeUP5K_CA#yq>eS7nYy{9$VQyHR2L$;QBQ&-CO4{HN6Gjjfhmtq$9d{SCwY^G z6HYD{`8(RndQ!oxy?Wkz`bcte0a^pPP6J~({Im)}>$uolzaU+0vD_Tfo|=R}g zxG}wzxFtCm48rUt7On&Q?lP*??V-ujO&~@Y{}QX2L056Y&;}5~q1zzDxwiu;9v>NU za!Hob^e&A6UE-ty?y%Dc5f07BvqF&Ns%12!FV8WhPa>TC$HKNPd;x~U@3+1R@8}aa zDfQK;LU35?RH#Nv0aQjIuQ3UZf!l8I!=&cvwodY0h93I3n) z%|^!IeP=w(@+W+hN?iR=`6SuI+@44m#=_;(x;U_h-w!6?k&0%QO@l{dqnde|;d5sX zF?GOp5%VwGerNK!nc=kD!AJbgZt3^+URU6-WSgReAIy#ke0%5PQUCwk2mr6HwQX5hP>_*KNGQP!8$l68YFC+C~hqip+@ zj8$=uE=R4#tDeLfv|!<8-N(&Fo15Ui@KtvB51$@-8`0k#Ws0*6y34{vzG~0=wd=1; zFwZfR<3M6sO87o74tb(r9ZS@ZM<4YV7BA{cu*#}r7-jpNBx-jnx<(Rxv7$?|O7PZO zXR=fB9Tre;;s{hoJEKJ3IM)-9yUWkJ-(Gmgh?+={=r;=YJ~pLzZy$_LLbt~;J|2y> zo8OO#AE2uQPxDF8Ro(WqY>ab@E=xpNSj+1YyygA!9|RR zoC`^so~nkUiY!@|-a-3jg>vn<)qoTH+ff(Q3W}SFKEfHzKBZPBVxx)aF|e?kp!uy`W)#_<@E@zTmD8) zPsG@>>AXReLU_qE^5kuaR=-#7Efl38962vCvj-{IA}>)LFQ3BKd@GpWLJ!FF7P)-Q z9hCN7UDp+V4tBm@_FGo#rP|f#9F3{yOW7wMHtLFODW0f^Ofiaj&Iimw1d+mCN65tO zweEtCMK=0ZD-3%6ax1JYq5|6Eiwe1SYPWP2#!_xn8vZ!8Az2Ss(FeBw++(^Id6-(HeRBV(d>vK@VVWaP|O z#O-pZJNwk_PRiN0?B&uE{mW)Q8@d>^7plK{#im*bwo0R84LY6HNq@9R@;g9na})I2 zMBDb#eF^%tQScXt>P7R6`8?a>ShJVfO&nU}N{c|Us*jzb_4Rh&tk(mMMAWL+wxNxF zQ^Zvr%?KH;oyR`w!X>qAd6oZw3n$#Ql-}i7P^NQAebs7LioPR-csBR!#~{1R$8B%N zxy;|+2e8MLJy0ClKhznp%E0WIrk1wC3nT_8@63HF!C`hShxFp$>Bq$7_^aXf9;f z$_^21GgQ^L#{Xm+pH?$(rw&dS)sJtg7(VPI$?|!4el@$(y3LAf;YTzRB$-29sGh|w z>E>~&lwv6^`}Etq)UwwsVe&MjFQeg1uXoehq$LB*h>x0O{!GEUxVoY_CjUnv1$S$% z)aw^cj`)7X?A>t3S1MuM?yb}5KD8K|$QGj{R{h_Gt7^$b-q9bwz7Qqr8;HAWS=PG^ z(_}YroR`~Uu?(16%G0zDAvAqssgDnus-V^wu4)XON5@dfc@A&?x#Y%!8WAuBA4H-luuKYisL7AFn&KCvr>p zJ*+KBMIWMCs2#x`k=~AvbBsEP4I~jZC%5N3G^w4ia60Hv>VAhL3e=i{LNjz(QLWrI zfDL^3$gKcJO<(j3FFp`hr-t6E*6b?G4-(TU^J3&wYOZSre8y z+egIYV@USCL=p~zTidz#Ghg?5jx#HCZgTep*y*OG%(VE!V>T0qn27_QWq~N z*vb)@kaMID_$bGiC_FhZb04TMO3Ct#U>hZ&m-T)9t3h&2<6lS!XE!8mu(OS)Vxt8t zWi(Rqb3)~}p3V$20DrnJ78!ktUTcU%!j+NxuAHPbcQv9QeSHew^ z`uqO4-^O-w$wfohEbd48#c;C5<-@ZeH^)Oy3Q&*&`1}iXAc^r?_c29m2lI(Tng2tei+3}{uLb7Yho)Q zsJLs#`hG3>PTR`#VE31@svjF6Nm#!zfu4a!EOTZxuVZ!_IDvVQc}ZS)BdZH1q(h4{ z-;>U)sY>38HCZXMAb!ONY^21BJ@xHkJm3vH&L_o}Afr?6 z?7BVRimiO3IP_33u*bMVbe?Znf1*@Jucdk#X3A9-0vdCybV4IIQ@18_@vFdLxfC#; zaHiLEQFhL)kUunlvAq2CqzsNvVd9UuN9mN^+4^d)u>G@o1|%4nQ^X*FJ{V`KM5-{O zU|iOX!!>hQ{;m1&mCz6Sy0}n)9+Kf7&rXxTAIlw!LwUKTo}dO*e&D(5lm>XA`>i&{6!S?dI$eOIKdMKkA};`D00M%HUh;(_(TVUCv{5b(^r;W#t7Ci;zG#v*YS=aAHyC2fdKsv*xde-w-EtBA_*Mczg`BMx zonmUMBjO*845_~wj#%q0X}rBO=+stB(<9nH?JIq)Va?#?i*~bKG$672i@@Pf7m&Uy2vyVEe)!rI>w zv1Ma|IQI8<09bAyngN!~Y)yep{AVpagHApXgC8$PO0nh7D%xM)q3EX_l*Dx(9mcVU z2tqxy>K@n;{kcPToc#y-K2dy#`Y>7aCkH$3tA6S*FC6|aXO+1r7T!0F$2VP;YZs0e zhmGZiW_;U6V-vrmaVxeM7lz)xmD3y3=8wTAEd6{=kyuSXG$$38gKLJy9L6RV zd5tO1H7m%=Mb6cnEQk2k4($p}ic7qbR6+VbALeeV=%{CF=j6avD{3`OV{zX(_nf(O zusC!s_EEgV3e3%X!BPaPpr@A>lfM965Y0Pr8r+6nT|m0F4;oM4^iRd9MF~AlZ3>F$d%tN ztOPHeGR36|_uouDpFutO=#%`g*w;@qHEr+K!58esL{71WEy{v_=_d0IeVYG-r&|5= znN_6U>wKRwxWC~eww-2*U0RHO?jKIPC;MWPu)QaJt>T`W=aYrbZwaz?639;pTMjpA z66_9dDJa;>$f-Dy@yUl`24s}%$b!u8+21Q8Bmdk4Z^$KRlwLQ;^@DTv5I9djg;nNB zgivYQ;(8=HyXkUeN|q_voCE1vR@H`(sjOWE%rLG_nPFSEaH-{di}0s(>n}aSSXRi=fzgnqws# zb^6U8)2m~gAt-hA%7u7G_!rP@)bJwok1g>I|pm3&zVE@9}hrQiBrU~*|2vrLZ3ONX|4%%+;? z$|($|gQbt&34?>NIpqg;=Q+fYH-8=SCvYeFvwVM~VU;x*)a7UFz)7NeWK5Ik3`)BQ zuS+|)`l{`ZTQS_}mD=yMCqsp-MM?Nh!xMNDpH+fuMq>{%O~Yu7Ew(jOcZ{pei@*() z&$G0qrF%SPg&tlC>{!$|iomPR*9R1VfOMSlM;+@Nyq*}dk5xtyo$(7O*5i8_QN+P8 zv!LH)xiIiLzc8xHq|3DeW9@lD;3KysS#9jl#v*V_X?VLMnz+PCtG&i*!C$rP-V@H5 zb^p>}cKPG`c{^@1k9`95%d}Wg!)_tOB245?GAYKpE#EZCIf#r${rx12PD}S{N;u}x z%1>qm(ODZ+b>9&9sK2AfBj z>jsd1zaKb3MXQ?iptd4bYoVSnVJX|d+SFU4XDplwt__AE(mErRi?OouZrv^Z21-Zg zvZfgmhlYGBa8G^kLE^PB<*)Lnasnd~E>h8p_Ffkm5tn)4j#2XaDlY zr;nQi+4BET;&J!CJz{&iZQZ{p-0F&c7T;yO1Bu>0Cq;5NmUYvWy~>4RXqYXKi--to zm%%Ztc>+UXxuuk2;ci<&_HQm7 zos~cpni2KE8aW4sRnj#^R^jCHXak&Y6?mD(cj!GytUj&kcbpwRNe|PD<=!d)5HK70 zl_9BD+u}t!8r`=EBp|aPRf_#>+n0=DigCJOO#B2p zj;Qb(cC!k_L)XHpnu?-J=fpUF%%MjIBe&lp~xisEEworZEsdsyW(}o+;~c)^j@$wf@tyN-Gjn zUkK1S<;8UH4puXqNQe04JJn02kdQn)=M;a&l^jzWl&ewozpg3X8+#u2oQsS~KV~1- zGHr9!O$~6G^S`g7ZbEl+;aFA8kD78*tnTL6q2{`YUi0>p@KhBRZTN?>`|4EVb6(sp zW$A!pF@{KQZ`$*Ogz#53m1dKI==Q2Fcg{}MgwmMjVlW%jO68tJO76J)YnQ)Qg5bBs zu9?NIt+{_w{31Cr`H?K_*S_g?F}IkUf$;N5rmxX_aa-pS6Ib+4=WS|3ifassewAr7 zwjOu&2#8j^F2he51iw<8I+UPN3Itw=7P{o_W3=ox`)f~jKD?MqXzcCBNH3xm-4QB9 zyECLfdHVh89Htfa7uspI*Ok5I`z(C>4<$4Q;o~oEH1#@IZv%$_jsIH!tMqD9cL%4y zP}SGxxZb$vFE;l7?l{x^J; zC8y`+GcL~N(I#N|dcTq#_LTNV*Gvq$l1im_w+~E9sYM;f;s6t`i(h-M&IvfRq!pNe zV;OODH%k}oPn=Z9M>N{{Bcsu5V_$l3Rx16Sp>3l;o4ra6t9lF2h=`lRNz&TwP%&an zYwBF?jPLmT_>ohz{o&F7uAIT;OTzHR6T@?840OZe^!CQ{A4+)4ZE{DpR!6Tu5<)&g z{&@k44gpQEj$T4V+mR#z-#-)3E9 zcoy`J9I2Cq3cunpEM4!wb|rxBwmuuPpj0VgQA(x8fWL0TrN{zhgZ?E_$IJA={R%nS zRw5}(i3>@d&P6BCdZA^%itP?;Vgd%mI6fCo*}0$92b`}U5Btf`4$>8~b$Cxb)&5#9 zQ2XW2qhX3|2qC1+w8jX#;S4bc3u%MYt5;Fcg~oCr8f^YR_9qZP zsMnm=ufH*&_gp0yG2zuN5y^`ELHQd4Fq`D%a95<8$!EDsfg64M4O?+xmgZ1xM=ciK z3Zs)(gKAH*k~0Tq0n2=f^@2>rZ1I(Gw8|fjJCsx}aQ($+A&qSwH=ZEx+taP(y?e8D zBPk^#sW6E`Cvi6g^}{a_9_9*X`@kQn6G9~X!C!1j zHbB`huG+3F z79LadUmRJ3J+X>iQxMw!j{hXHq*x$5Lf~5bjRdQ`I0&i?r~y) zG<@zABrwhzqoz3@vm1f|3QX8!KP3mYrYJ4e5UT;`1-2Zy^}`2@6bGq`)9l%HY5x@T zX+-y@iDib6T_9%@;WbI2c%{Faz463ilGV=p0>Y(^SAUkp#d(!TbjPp5>x;`kNHgOq zT_ls=H<&OKB49qWDG#H$m@j@!5@a=~?hw%3{HB|OdEyiM9jEMJKxWT6CKjBZch(U zf;oXArZJMh9?A7J=$kGp2RscoHcBtxzTO91Rq={(7`1p@wS)6g1crp?y@QS4ezvS` zjWsfeY1RHM&Q+Wk)3)q`H|a&IpYpdF(F)sM|5zH*Ne1q6rr@zz%%cLAd@Ut)Eq}TN zY$34GLl$59pzs~vg&sSuq~Gc8DppX?TP>TCyRu6%6n}h8zN?056-?k~IfxSL5&5Rz z4<8BU&gNc|%rnOMhKoS}2S{DRH^#P)_`(ZE$=} zMgpCSrb8^H?~c&e==O2rY$Y`Sh?Jm?N7iB4&%VEi@6TF%a=STx{>gI>v+6G;xITY7U)@hcY0K9Dfq3m2c92GyeeR`to zWS8AN@2Eoaj`+(nrq?&zrZ^Dl1R2X*Skc=(P`hb*lBcsW+aWj4^~wiJ6p!pcFF&BQ zQ5K6y49W$K$S&Cnw~e zVy_Pn81MmWa$zIFsGvK66`+ej3QY@#%zyHB__o%RUH(&|%lA(9U!psc&ss4J4aJV^ zE^3V|7xJC>_8MQ(!lF1_JtA-kOpBwcUJF(6T^9c-gjhrl-hasgepBtIcF*|ZE|kxh zyvE+z3`b?>_ z_=eQ^n6Tk~1XTUjYNGn}N;qRqXn3>?6~OTti3 z7^=WaWbE?I;D}4*)b$!3ju_=8Iv_eoI%x3<#=tO0j9#y^@YH9uu&vCwo$Sm8pf6($ zUmanG$P$Zc1kPo%@d)nKtfRSSzn-9yqqukOe-R(TypB6JtFQMDr3rmu#jcUxoaaRp zG~@>~fzkJxGN$oR-JnWbqwzE-KXOhz5?5T0t;_^1ctk_q?1wzsGAh!RBZ+)mv%2!nmZf) z+HCbMIoe*tk-e_UJy0(0{@iU|VP3YqDkjVsTF2HQcGx&NFl9!G7yz$w2$EXQa)7lKi+RDJgM0V!l^m+?CqWD=thKBTZ&l+4u4 zk-U1HL-5fEkA*IKI*XWi;(Lb!A?$PAw zIc6?|=I`6l3GD`_Z?!BJqu_iSh7x8q?kE0*lo#Q(EIY5t=j%_jn5UD+YDB4!vJC9c zTJZq?qXuhLmc0m+dOV^%FeFmTqTnM|u{6+vcE_dA_=IV|xZr?S1skkj~iGD(jH5kOO;&-x#a~eNf1vVu8 zLn$G}RHnohi4M{-IaJL<|t6lDWy94zm(qR;hN~&FsdG4P-gLgwj?Cp=5xOFjoSWNA7 z?QD*RYOPo90?Umm_9RqW#C+qrB5IN2$vvJb#5Hw>jEfdw6 zAeN2u|4;%j(A#qmF^{y0Wc{HMh4ikYg#*pUj9cwuXbrz-76{E|>(zrde$NOI>AX4| zEFGK|-$At_DGV!ATorD786&95IA3)nQ^&zcCmN$W zuc`zBg$aBq08XyQGp9Mv*Y4ieRT zC`$qo_w_5hbwOik=mv!>-QG6LrEXAKGR!UbenUBkatfy=K$Iz%y{$NM4V9i^vklj; zL7Z%#tkR0jvaM)waYeWr+p-#Ow2t*r3?PPdaR-w+7$UD$E`DUlrKS2Y*?D!%>wu?f<0F4kTtdT%;Z zY>$Sky4IpM8|P-uph)@QM>sx2uKgLGf4kN1x2rbGRwZ@3VC(t$2(^MaDMIBezAt_V z#@4fK640b)5bh!5z%p;v+WF`*a02=Had#&g=#rd0PN#hP`Mk8Q!f@% zi`~gTXw{h?*s9jvwR=xc998Q%=uF#cwNAhU=#%0%p{DXwlU2htjrS3>CN-c2yzKGI zR$!s2%i7kJz@sQs^pO*@_Yo=@of7@5opZZ@d?Ew|7QPu8G-;>9O|Tl~AAucN$LFL2 zF%7Y+cN+~$d5aRcw7Uv8xRh)t)dXm{_=eSG!YdkPW|LlRe5nZiz52vS}6ZFL*Hc##5+1o>| zDQT}Mc&l+#81!v<$Y1;%D!zV*bf#eECzq%H9V{~NAEj-IvCLi*zI(>$+88?g9;j}* z^(gh9xp>CgaODHdfDE>C4uiZsK*D#&$dkVDEWTm#AE5lE2YuRfV++aHd?2%hgwMFB zJ6v9$nvnMH{mxkOw{X@YVojyk9;5*14@C2!^J5a0npPjuky?RP#m2r{? zMhX0Ev)PP9cGzXg1CYE9Q-d{7koJ*UycXce)s+0(2SjMZ-TLtwW8|W08 zxsEE};fg3rdm-c8Xj5O*@2uya2j4b)dUw0h2R&%_e>LRKI^}@=VIg?S?;S`xQ9F2R zdFz?9FfUL+rg*(zuxK!XU@5(y78H+{H!w6r{r)|1a+~$LpJy*Af6CzV?$N}|z-OtY z-@I|w&M(-%VgzR?il@~C>7XRF?}Rrdr2WzZ6mCnR6W+EOO=P(% zryu|$m&e=vUyTK@M&2`fKJM(p*{O$R64H9CvKuRPe#gdK|yAJ zyG_i0CR@~WEZ-N&04PK=P|%e zWM58zks908%;6{NyBw_+t4|1n&iPV0PVr^rx@$_>(a5f6q;w#)SHJ0_ne1{G#3~Gf)5YP}eo&8Z( zaX72R0JF-`OA>DU{F$Gn?77C>@fx&x)y@Vfcs=O(AFGer^3f3&~a>&GkDLF^) z+K4v%ggu^9WZng0$f8A`%Z&I41Y+z^h++Aeg__EL$HxXDrRao}3`v!tkhpu*2n? zUFn##-@i`Qn>Ka+D`nh(8K}9$`6Z`dL~~D=JHB#szGkL9hw*laH8A}B6ESuxo1ia* z%S&U^hTANANJf7jo)32XNQz$!rQ^sAOrI9z*IWLY^Lp+qGJ}#5>z%t1*;4Hm=Vpgb zqbgbD@SYfR7Q-Lz6nm-YkY7)dp-Q#H8JaB@rbpz0p*6?;3K!RG*lM{8@2g$Ow&F&3 z`#bHRm_rU?Q{v;BT5UrwoZSRaHu7>~z(QM^@VDpzvDFxS!@hrPes7x46TgEuhsv4t z?Wzg8*}3%3hkttXc`;i)SP74TWs9m17<_eneM3oZiWV<~H4Mq=ugAm>W%4_6cA0;4 zzO3)t0IpG;zOMp-u1Ao)93$rbDs5F>X^U8+?={6udrG=(>h3Lkp{xZl(igzwIA$!TWJM!}9>_ z?CuaM?Y@ahrY-Mrorqv9C@u3s#9Wgc9*?XkxnWHzQU;mcbPBK?WUj$ElQ#Fu9hm*5 zVUAw5x73oFuu=NE?PJrd(|wW?foLl62AbjQj&Ivwwkh^#Tq*!WXE}18m>Hs zKwXTFY|^@cfeEOqm{NLtw01nIUnRY>0WWVFaS6INvwPvV?Kl{fubo~LAG1n&eprdI z`mq-vgzH@X-nz-66{cLdNeFAGQ}eAd*ZwX?PfZbAr8MWvLH}{TQQAV%;mzTkN+RbM zX8QB-BYACJP((63X9pLG-hV)#14^8-3yr4UC0mL@Ct>p+IocZhlc*tnu-qtQNt& zid6>PMDOQ!$RUk1I#nk&Q|?p|uHQ3WPJLU3fpsVN-6+-H z#cYMI8{zSehoaVB#cFtkl$+7vZw8zsItBCa94!4w zf5k5?t5tk5W0y zmbM`S#Qg4}Lz($3tI~W(VS0sqt`ao}!}%0?=CRO2YM7z(-d7~`rLqLF%xj`P-K2}3 zto)5W;6ioS0ACyj;|*+Fo92r%u`sn)rzGd^^C*kkvibCEP=1+0Vo&vURfZM|*bo$% z&;pxCYGVJwzJTot{pKLrZf$#drX74oZWMz#2v52_Umk_m$)K-jHJtQnhxp`ZZ8#-y z$@3=a{R!emt~RKbuBD=vQNB!LuT9s7lz%AoXO74sC*`*)LmQ5N&z^*T1Qd8$TP=<> zc8ai0R3a{&twm}kPyvdx*_R^@yVR?stL}h6yR|QNbUg&=^cjkPfNZ^D_m$iaq$oHU zySC5tY1CcDt{vZ?Uk~TJc6VxtXul6hpk2PJ7AC?vpVRW>b{+#4xu25Flm+6HBG0Jm21N}10(%2;;BHeSYa!xk&) z{(Ph=DOHcH9m_arl)xQtA2Q0l&s!N%YJK>>g(+HLGTlL@xj}Iu^gAQBl8#=PS1N` zDc{HcZwe;6|6>}1~0sH(_VO-J)L=jf_l`(+1rkW~$FQH_`C zdLJdp+pGHKUjqoJilc!KswY=5m!m{!C8j*CnfiYr*f+CBRNfXT?V-HcTlf6(UG%F! zGPxq&QvzuT{2v2H|4?|4yXWMB^sn;IBbTEk{&HkFVdXkno^;#yn2;z(N z8V|iv*DXRfRLO-Xz}9Kj4wAq)KnHGAT=m#&0W&1jE$4AItIfG)P-|R^biIK!fc~NA zm-^W!Aey)Q%z#p_m~t}^A~Jr7)ysHa-U$%RV&AG}q>8D=?pL_R>F1|Hk?nPMg=FU{ zn$!&fqRBDdyd{awK9J85|H?ys-ifT*k=^>~Jr-kpf#)4_bC29jZ`ql!e+~R+R!Jkh zzjqDWToPzGfi8(jt`>nRTibk22HNi${=C+Fs7G@863&<79FTY?>6`U4veooCO;c6V z&6nmf{CqdkrCso_eCapFAyYWb)wT*$30Z@}&Mp~EYQVfp3O*4Ay_9=17RC%xdwN(i zX>kK6hoqL5CYgmK1YQ%v6?;guR8+fWs6~_9h|`yEGW^&AiIXEz!p@;pzc{Z;xY|1K zS;$s%L~41v*InDNfwjhEqT&FRZ|BRoPOco{IsGV^nvb=LPagYev|4J6dk*wo$5=OpPrBpNmc0)m zEIg^UJLNJ7mLUD4MH`Z~%eD_cyIhKGH!pOQ{G!E6oDy8Y#3c7>^lH=zV{Sy>z(UZ{ zQghbL`-Lz0Nr$?}aEmZ<*48?<{Yt~^{v1+q)Q$-b?@a&p|B8J7)Tj5;AXB(}GM9Ju zu{Ky|WPvYdHh*fo#!b~7(W>HKNGGhY)+QqhjCIsMQrvE#+1`6IHpD3c=bHc^4Wiu^ z8g=pBDv_QWVZ~5zv?+-oYSM3)8etL3)XE# zqNY~(ee15M2pWY*cINeoV4v6WxXZeQCs*1nMd5fa9J#}x#oodPWt8fw?Jn2Nj>CKG z2A}n_@gJYR_Uiwo(--fbnR#WdS^Fia_$Q0bot0Lri6t>5UHE-Vi9-;{DT}yMp z_E*xk3#A=5b^Lim9lsDJ_bv4`f9-@O(kXS53N=7=Q}R{jcFW#uioX#%tPqI*npM>s zFAFcL-Uz;BMH1M1q4=gyNvZEDnBmyy4WcDQLBAW8d(SezRO#RSVyTaqe+$7{9SKa~ z{ID^N^x0aaAEXPQ}Jk-Wx8!p0n{? z0gOv`TM%{Lwm{5@I`&SZU*bOJ^K^Ji?^ge%!3ZpmF@*eTyF%ZY)`&VXN5J#Md+o0Y z=X@x&CaV@j6=++_;t230d{L|I)LdsH)MBfqU|PO7dd;a}Ff{pI79&agPN{{Mf-s zff^xcb%fmYw24Ms#VA*s#dQdTGBgn>Ou&C_8)R=Q;u^q90^wzmVN+X8{sURGt$(eRKQsrko_|G;#coB%eluYH zngx>TX&Bw2)8}q@O|7vM`*mPBDf#|K4cX8tGIpkV^W17eEQBxnoTkaNVsEpu3QR1g z6-Qh#RF-|*UWTXclL|b^RvU&T?g<5!pIR_;WTo(lp0swnPVqUMj7|x@bQe0lbSIPW zJl^npURMgcfme?Br8O>=?GHcn{@-Y4!p#6NsNbo-p2rdKc}K7my6{x+Ab(0f@Ku~o z4cqKH@$PS*XLeQ49*}DUDrtoJ1r*VKA#s@gU+S7Pc7M$7i|uRY-H)HhqMD_rl_&h7 zAqs&cxFSBl21z!4jF}E7N6!+8VjnRto1K7l zk(XX;tBb`o%@UtXM5OuvH1-&w-lWV)S#spGHRO$J#%%eU>`3U`xDc$s$}J=aa~z9{ zCxM#nUo9Vs^TpkUiOzCsSu1(d+HY;P*f1PrKNG`~^v36QBA}uyjp7G5dXj%TPC$UY z(X)0WAN1k)@+l^%XTZxr5{=N3x|hK z#K{TIhekRt^D6de)x*x3Nf5xXtJ;EJlHtEJe%~2Go5G`DR`o(mt{IqL)3>xxcJrSW z_+=P449qpA3un&nD@$lnD%pgHUBO=ZPCFq7TU!oK!^6wuE(r_YG-bwObn3JnId-BB zm!Ma=gi(GZr_}RNbK{s@ee==Yi~?+oYRu9J%Z4Qr6wbn>);|(P#TLI_@EhBv`2_Y{ zct4B9ByHGvg0zEgFB-P3{Y3HrQBc+)2c~~0>Q(m=1yGs&0AblRnWT2IZl*kp-wk~E zv5`cS?xkDU21}R)WLZ5tf6e~jiz$BrGrwm~FQ~dY8J$E^bSWG!JN!AD4yXU1{GP)Y z_baL7wPqnGkB3n)`}o%!xxC5}9b&@$7C#b#tjBz<`{dX8T}49Sp)>3Tp;cyJ_T!fr zCk2@iA+6faAMfAy|K6mbAUEJTGSiHqnUC$gz;5yHKjk={;qNP-i|WGOmmzH-;kwRr zRu%#PVyo=G`oyaIY%&s%)KYnq$pKvC-rowWj8N`iO#3;X>_KnuR-O8B@wOAUjQeak zfpiY9kJyFt9OlnDIK4D;)}HtFEF^YGSkAB=irIV7{uh})UkRQ3RgH<>%czLIjQT?N|4?#D??A4fjACOJ&KDl;kV)(4MLRo^F8g-=I6>`Bj`iR$arL)n zP%cT|VB^X|$JHhwqiyNy*PmgU{kuupr!VfO2)vDL58(H{HF_5MIOWN%e!kp^b10X$ax%+pEls7oVr;-=eS*UIl?Z&6r|D zsanbP#;tiW_>Pb{``;W($cuGo78=}gp1a2;qHjkl4w*#RXA?D{j%j_8D_H}W!>k3i zZ3m*Rsjk^xj6PCjW|gbnng^Ek(KgI#6~#Six^~;^a8nE_^xRa4qzEEAgKc%T`79&z z!1X9fPS(-$hT_q22c{zpyk2jaSKDe( zRxH7mF(K#2cU4s)rL{QrB-dis&_*w8d@t1zSm94HO-}E&f~=9{SU~c-T?1 znaMRG9Z&%z|DeM0@RVTrfgBgq9x;~~I1W`o55E!-O+T8)??7X5quAsc5Fjr&a`^`S zVPk<-Qq%UeM0S3{u(i3TSH-qX0jk0bJwxiP;-~d91O=?=p3kdY#)U{ew|;)uTF#_O zEyL7##+cF0FQ`$Es2o*pzHY$BUO3V18>dFHMo6w-@1dVVc`GF?YZGq!97pi>TK6rG-dQn*V~75xgS_?vniWqh?8 z47F?NcJ;*hIOUyb*`$0gd#b*vf3RfkR_&2y;7qCZ59Pe!CoYf7;C7Vg_b+)`rf({$ zfZxd&5}j=;{~*45vw0+UgId%Qtm6?vrrO*si3&#~idTv*d`nC>k$&XFzk@iH-~1|i z@uKN#WdqemB27wi{hrbj`z8HS+TH!KXq+GEBIFeF`8F-qF_870Q)Mp*@&W#HICH0A z1VFQO#rG8WPU9a6Dl3lZ?Hqjyko#~6N76ZmH|FMz*802U8pIvb%bNIY%rJ3PvXj`M z5Nl$tN@H5NIz0nJ4R8}OL!5G;y1Wv(IbS&SMyIWJtM<8@2EALG4>*gS1_6*HQ?|D? zY75?O5&vo-2hNp~W+_E27MMPKS1f{6SpW0$!#rJhVq=k4-@wRUU9hgSgLw$*l*S~} z;OMs;3?wOoom#k4ca+N&ZR6vhdC(SIi8!)_Elrq-`nWAn>luNh4b;H5A9Xeho6&D$ zI2!&m$J05}Rc0?S1-wHKJbH`z2GOKh|6ZhbiUKw8vqKn8XhlJSP4n{k(VOQ$DP2}Q zc72F>{KKn^SW|%?${iOIzTXw%z(q|XYGQrcO!4WiK|hB(zL+o3+c`WGy)S&~8e9MU z3f#a|eidZaOs=z!Vv&K@N0}Mx5e`t?KPxCbm*k&^frG0%S#OK^ChcQ>KUzZ${6w<> zNqL=L-XU+FofZYW!i26}V%~QkA_`T>gSMy^mA%fl=yZfM!A+-i|4=N%SzJFRGbZVO zBj-!Mvlttm*AmTpS|^fJgnh2$^LhVb#=OsVht@35u0=ARcDro&8<>Nvh1?g2va_18 zGvj=oJKOlAzc3Cvz@#*?kw0E^ow~2L!5~`t5RlAaom9a#T|eVRn4P22gU%Z|8hN1W zo+@VL*VDx+Vz-*TSoaf&#!DRF&mUNp`fCbqSA{xVfx>o@?~u5OO}tMl&I>HmMK0KQ9*{Dn*QPh-rgO7c_)ceE zzt{3!rNv%jMvWz<&?LA$Bc+(+ub*$*y+6`YU1veMtG$m@`ey;iKy|&BvYpKhXt&za zM5=hISC3g9#yXP_#X6&9RH}Qu&brPaq{~oxb{>ACvpW{}W3nbCXSTYztg(dzF#+;t=huLU;|J>{i*@H@0 zrL7vc78^IZ0%!B=kFNl$S~PRHjpSV&W0~H8w`|Zo3jDsEq z(a5e?T)ffUmPOA9aN3k(-Fw`)Nqy0#V{@pf&y4tTUc*`?27_w1D!JSnws?V}t-0|} zKW@G76sV-INnMGSK@`cKyqbl*Q$(Mmar$~D$*GdxTKdTB;Y!h(-)DD)cKPNx@BA6< zaKKISDg-1v>D*iHqgHaT2Fx($a%JmdsD^%OLe#uIU4A@>y>#>H=HH6M>$Fr7<;NlA z)+ZLuNHg~jDWw2=m?R%c*-e_KkUwWj`)@%egr-}h6p2Z<&2-sv=MPuRXxr>y;``b6 z_hNwTHRRUo;tEOGslGa#7Wd-cZ+g3CfUaC@GN=dZwb`^&(-X@HHs`9UVpR$;*KJEG z*BjoUYu(wvu8N-YJYcM&4tL`CCM_QA@caw)QAMeCUUg#oZTdBG6mS+9@a6FuG_E^Vj?6<)$_vtwclsmVsvaPxatevR8!PQFFRxY|x*P zV<8K2i|UVOGr<6^M`~HMWGmXVBon-d3!dq6W1^900@U-iZUxofHZ8tIJbwfBilR+> zlaDUkx3{j`t`KHL_4=?t?R}xT2cjL+=Dgn7!4x5!tl<{REvtb|h*?oOn=JkH3U77& zGHWfRlxGXMdXGOf?8JCzq0M+@6#qFVG^TPc=P9E1B2dAQOOnD};7!ic*SqHwH{shz z99n>w>7LvYP)Y{w+opd5X-rN5Fv#u^Pgn1-Gt+*pk(FPMsTdp}P(H~g&{AX&=wOMd zVH2h5AsvDRoX{s`#7r6FADUSA53_>br+e%p@5G&2^0pRa3`1s}=t7=WVOD&#)5VgC zb%VR2@I$WBMfrsf_x&WumM8((1|p7n(li8#Hh}kk3LQ81eEEIhfBvBekA}b&j631{5Q+?my3E7e?DXKFhtyeld(;LdL-Hy5!yg8&IzIFT{y|(GrSo zP8gynVf5ks*pPFQ-nrk~a+B*L&>_}D+1WxeV8W(Y&BUei<);TX zQMBnHI3GBJYJRI(Y*%&fmqjze&~RyJOr$+8vEg(W*bAZGYLahlvj?BM=z}$)THU>@ zPZI!1xTI{fqPD8yu;;9sWvRH@jH<{nwT2H@rFOIpMJ78$J`MDP9 zfDz>qDX7HF{1Lw z%xK~Y1-Tda9SCvqK(0)lL*+wl$P_UZQxU|2h$Uoqlma15Y(ur5rP* z;zd{H)X18f8ag!^1nCv_US89}ITca2Dv%}N%K5KrRqwf54dyUjg#JU>%pSoQ@Tf`5 zrR2@v@Tl`fSTEH5#R3`5l`c5gmU|Ky$UOC3p z;~z@ZCbGoC$>8l3yeROU4Mdx$#|sj$weWXoi9=?%1voNbhsI$&rTPtKgL(E3rOWII zoPahVG5%s&@@CC}G*CgXNrl`+GmX%8_x2pe#jN*}tQ>{0&ZxuyY&KX;RhS*}nx8r@ zD<26{L`F#2x7w53I^z$4JN4)5X7R+d2HeNlTP{tVRFNb8%+a2myO(0F?!5el23OKk z5DT_BeM(|VSXFMc3^C+!b+WoVi`v|fWCj(wxDHBp;e{D;Ii%cz{2ZaBXJKb%i|naQ zgnx6yQ2$c%p(duqFt?xxo-}ech6g0=q*zLo@PkYf5EF)#!&mWc~_U;$9IDKuukzA1*OW^66ICW?igD7d5XimL&{GEc!&u9b z(2W(ec3_8d#N|0pV9$)=?-vAxh?~)j2c-Eqz7Y5Dt|Cf=mB&7Y8TN(25jsVu^)*?l z&E&Xu#G-R|ZNk8NFBb|!HsjO?iZWmH#v3LC;(Y8_{#O4@w2x}r%*D69q|?O#*Yy4V z3an=oH*rYtrNZFhaN)%-`$Ti+#3=dC&hLqJjbWjwa-p_3AYV27k-8@;B&2~7hye;9 znhsT(x$HqL;&VJl7A1N6Y15DOc)7&=*9(Z(0NH;sol|DazxT2JR>SXf=fxv~EXe9J z8-Q&Hi$@VbwZ1Af4s<^lMO;2BFZ-XD=Ujdi{GFd0*Ojk{X6*Hi>t@HL+NHv-E1>RU zzB&IBI8umkWCsFr{S&%k=P~mh`j#Jf8v4t* ziZnZ;JgR)gSL6@|Yn$!@%oz%wMfb;ZQ(t2QP9xBzTTbtTO^vjlvsJe^=qoJ^-0r>& zJ=#HKu?kB}{1jmc+ujebL^<9?{tWlxYp}(lJ}F&RY(%DCq0MR9`Bgz@0^(p${Dp23 z4>iW95YKQyDVt3QmC{?)w6sb@q|b-Dg);7rkU<2wVY}@|KCftlFuuV0Gs)l{Ar;|y z4TXmBH;0dPO4Vu;M51q3_ykIwI`yKjeA@N}63=xYB#Fv$I3O21C7o;V!Kn z2l9V6YbL7>lgyG?UAL-kIR?(6YH6FySl|+%+3JL>L<|?=?bpq1vtEo-4pVJ|?Kfxb zr@dryUimYsH8HPt?;0qD@k^^01&#Yn?aWWK_scdCu0nV>_kzzAes$Visq%M3_-ZHI zMkbGj;07S5g%1Rr5eDwTCta_%?oIn3mO|xk9Ozbv0LD(KY?-PDRZR^V-qc26dXnv7 z*V*&g$R~gc1wdhb&$6^)A!yTjq0ae6NDW3QsTL7PyufTIR+uRU45$eBxTMv`el6W7 zMp@e~sCO>1(k6>~*leRqmLZ672@Sij^>8ip3I=Z9EO9X2^#ps#@Y5p@Zy!)wjBqqr z?c~1vz;?_pic+Ede8AHA#yyA@e8l^LAw2bNH|VFR*AF3Sb5NcOoW2%mCm@NL%BrRN zsE0T2pTQli_aJX>IliwWA|#aqwA@aTM$v5OMgd$7>@QHae2w4~WJd#eMcE440^c6} z{3+{^wCK%Q^n3`y^%=ZOIjuXd)%#~-SS>1FvQd1~3%{&fL-@{i-tJZ}Rb(7E5Lh%y zsXgB!tZWDn-W}XFDgB4yc(yOpCmi3chV~>F{4?w&y{XB4u_og*d0mZJ?O zqxH5L#{DQ4k@-j8cdj1M#YA$&&=S-e-0a%-Yj;^ATa}rQ!Pqu6_WYC zGO75k-MJr$c2bjQWYbS#YhiWK0aW?zTELsSR@S6N8#pRQxiYUABD%=W4-TuOj0`be8{A+snp})A&yEwhcXynhm{v8jzlNbtxe{tT z*Sr~=nD21X(q;eir#z%@n{5nyGT2+{JfVwgG)Syne(~*~$Hwb4`M6XwjETC4WHSR~ ziNl!E-8Rz{gC`MEiWQZ7EI*u9t2;byTF%}=RYP~L^`t324)-y;?d)3-c6DXrZ>_b? zh%Ni;_X9>u^9^_qs_OZi%Sg(=`J5o* z$Rw+2Ci$AifFPY9W4FLW=H2q)Erj>4q$ce-;(L(o#z^U@6{s0=>!oi`DaWl_e$&Fm z1C=3=d5U?!=@a4aK*i1aW;;h@C*{!B>h~z@>>NyQ3SPc&GSKQQuwwRGpM%^g2UzBz ze<*DzcK$d_8PUIp9Hacg>8}&t`%r>t-_qT-h>F8R2q-jvxsN@m^L<3IUFY%zJI#E+ zdMbS~Gm~2#>&&3JEQCC>n8*MsCDeA#edXunjbA%R%^sUmeBo9&Wpdu!nVQ&D(i&3& zHQgL@Bi5!9v9!LU+A}ENIG((4!bO|FOEhW;!Al)F{gVNod(%s#X15(n> zNHcWT3_S1k{lJgUbMHOp?6dcOt@VNb-z1!l>_rGfeJTu*X4Mw7&50KcDPW7gajEVU z5Ji60r=v9WR+AYHb3T$WG5tqvDoz07K2>@ECVr)_KEEk+c8e9f8txrhr0QzSHKw)*0Eg z&K_iQ=uATXhvP}L=0-`<9(si%>?FA9x9G7732d=tiaagRCo)QwA-a(~HyyW9rA&XvJZI|Y(d=1-O=S9XO>E*pK8jbwaB$5#+h7r%6dPYl$#EP5 zfXGA^zL-&?lxpz5A0rI0=*WOe=6d*RKhe*`*A=%x`m8n>`fj~89%((V)ek%bp9?;B zE=!MhZO0QZ+RJkO!n7(W z%yskaL87P##ol~)ZK-f-S;kCG@#?l{r(IW`xyX}L+)0@o)5?}w75<_k9CEHQ3)>R~ zI(Nk1`%e8R#jOL_!>g^Lm;LTgHAxaZO4r}ipzMn>%{Y&7dFN5S=}bD}SA5rt+eaZG zcF=+uu1q9*RWQ?>T0?498!s%;fXT6q-Gn7@(zK#^$jDNx?@-h`#L0G%k9Eh1Xmv*f z82zYHC~z{gD=l2;7xgxfD7AKS#5jbeTpeEOk`yn}yvKpdSDp3zI8oU7J4g`2zzQwp zE$RT76Q=d}1NWKS0LvOcb`M}n6+gokw+co*L)vpMhZ~cLX91^r;9mYWZKjHjSjA60 z%t3mkK7>6CPZSTLYP4}lrYd`g*7q^KkexVbIdyHQY%1C4-y)t#UlK>w;Dl*xsaBl6KAU4i zqB%PYMs@A)CGtfs@%A+xI~e%NoiBfsDXkxcM%%(*ErZTLxWvU_bA^i?l)VL3*QESO z>(YGw(FfiD7UgKUHz$rNa7Fl9X5$woDHUZ~U;N@yV{hpfx&;>4)=sY<#eBO|oCcJb z+Q)dYq8j_eNFdXMJr=6<`|L!M_EY;Xgfr=aOOvP{7*^L@SMc1G}T^Fs_S-tb(fiN&Q zdVJ%2>2wKLC@;qCsnHH}OBC}o!ij%oIHcY9CR5v^^aT8qi663&zt3mj-4nA>_E-+d zyh0lVdWE8KE9K+5-2?qE!v+`2%=4>V=#c9FVKndG#gSiVNp6u1oo9k#U1b@>VVT{3 zzulBg@Ci&#pDv6vsVHg@%`8y4SZ7*i)WXI4$AG zDVSha`nNmJ9a?!po{kLgL^vy5iVN8`glgoPQ^tMsZkmI8&)V87BwLQ_Neb)^Mg%&t zn+k+aeIN{g`Y<6GK(U0@uZ-4qdN3`BAwWqi`tiC*1fN~n<3J1xAOSxx(ti;6MLUzP zz(kt62?Yvei>&T%GW@##R5tbP*1+0}HtVR6ssSYNq;ft=USQBKw7Z@GP=+T~*>8-Y zxmkZyN8Q8-P2LMVO#(Aa5YHUs6Pn&xm-41Unlv}7q+RQn8m!BF6x^|?OIiCsb;d z&xHjuHF)v3Ka%WzPp7ak6wmwICA&@>XN%v-w5U3WP!M6@a-R6XKS~(-!akdvRe_r_w()S@ApMc%17?lEu;ZZ(qdp76j3|~_yk{n zGBVLKc(L{e>FEgpHt(5VTu&M&SX&&iJ4kbnDcSmfb;$IT_+!pvZ(U_-zs1Exz&5~h z=koFYI}7z!bJKu^zuilLI@-qzEP?1j`zU$XJ!gns*NU9&U#VX3grVrexYXN<%HChq zVe4fL2qun;zEeeAH0oBQ@m|=`%eMwUH3m85;QCg%lu<3I{Wgj{ogDjn=at8e*3vK| zcbtirTmf^dUCfBaD>7ESOAg#o^clAYPY;YqH@uT*jChMDkF8qc$@Zu4Ez3uKMoEh z+}8E1zKb3D<*kI44qQpU+&F8u+HJLB?Lae}Afn2mCUHR-5=GBL^#vkPh zSq+UL;7Vp>qyX4-j_kHN#>pGM4x$H}3 zI-~LblSmFgGAv@9NnyrXB=A8Cy@TWCHzNEU((D8I|2I$o9$zwd`D1%au-i1Kck;=~ z?Om3bbqfucXJDs|S~78CX!UZlcg8w9vB|FPP^W`IYMBH-9UmNeXAJFx@m447)VUQO zNi#*%bElJr0pq}hh;p|_x=f>V>U$$w3a;n3UeD4qd?_iuInYKnd5TWud-*r|odqQ) zXeD@ob{QhthoiFu-;mtPB6?HSbNrGlw)%!JZ$5dMRK*~x&XhjFX-n3%?*;aWq4E{O z%9hiZY@i~~p|dIo!&l3xst{4{CE3LRo3K?pr>-DJZ!XNYh3@Ywm`YVDkE%wvtQ z5DS~-XYt+S_{<<^>`I$naKQPVF!m}@o&w{BxdkVt9P9Png^JUgFu9SPA*;UFHS>{8 zW;c`q1tN=Ul5*?jw13HfYXBgGa)AfL-=0?x3YRo$j}e=(cHu@QnwAK7(7Tz#X~VABx`Q?Y16mlNyl76WzcY<3M_Qcu<}$uO z<_l6S(TNE|3)7gbCIL_?zRDww1eB4*(P2l=aWGz{wz)v(}m6=pgTd zasE5czG!~|O$T4%?b`a+snk(9)gZdq!8orc`9n8F^IVWHF7bMwG}gy*m1pTXD3bQ) zmI*KO%JmqOrixG;q`s$<;ih`)#V&Y6|-T6oaGXJuP^! zZmbDtXw(t;kd#ZRMb73-2TD`QmomL!mpG8d==q<(%!IjV2!oS*h?RJUOEJy~aQx2L z0^rr#*n7WJ{H^^xkZT*v%R{zl4F+Z(Tg#G*xFs(zHt~|m_t1m7AmBzsupQ5nPTTKd zFui=K=9rb<@!361f9g*@OK(PTPfD*&;|U@zzvzT zcV~XS=B8oPQEXp@b&=9ee$pN$e8Ha|Fi}X8u3Xm-@hxJjoaBBzu$b)g7VVda&SHa#kuh}4w|1vr}8Yx)@_^DW!s=sB7@~DXKL=cVq zj5Bkz{?AGij=n+Nk&j_iJZpEx6sZbtvn5L@jKfQ-9=47{oG&b@o&ATwZ6I}eOdWC^-HOPD@0{MA<^WRfgZnO?0VK^> z#*b=~lZl>o?%p&vvdvvlYfg4v;Sx&@n8fIid0Rk%weW-XwqC;vo+Iu8V_$-hsJfG{ z7Z;qrP0JR;@;2`!VxKTggZGT81k01k);hdon)>7umO+Y&vdxtIHPvLM@l^9AlKa|O zYkrC@_g1jfuq?W$OYZp#lc1@5)A>TDc7MbR?iYA9WMvXEEoGRO12W@k>b831v>d+6 zjpAY+Z01U_zfw2Z%{!xAg-p8FMkj1chu4;K-YFK^ldnDpd4GA|_Q~dLE5EMr=v#au zc>mR7+u29rv%!kqMB=rbbc$TvtEeCKgL8!ePX)OplA}MdytS>VdrBjl$7Y7*x( zXzrzYzA_`wD6&>H;`qQnK;Pe2`9_c)E8`ih79&s#0!`96;D6HW?Ce8VwrfYH&w->O z$~VRf<^!)ju7vOIFI2ryJg+iqyE(i%%v+L8!Xh)wi)%y?r6&m+p1xg-Y~Gu{Yq4@) z;&-qw9tIP{Wf++H`}b*DzZuveNuTH^33=%vUp8Xetsi;`mddYvyFnktQO+}GGb!jL zxKn-Eu!F3&>Gu!+y91Y`e&#a;cG1p{r$K8}FEe1Ld3N2>>-P+%S;CEh076>Dt-^tt z#(8nEC!gK?j43m-YIdpe`@BD<3o@~0TUfHrx#pUWo%K8=jwU+O5{+k`BDHO-5xcAZjv*5qS6Zzl5_6>j`8*`w`Q1w5^P$nfSx z6bfM7;z4AVRay6K|0sV`j_*z+2dc#4-;9`%Vd9{)fT&&~|=sesI!W;e++@I_2b+G;}SFjrHr(uqTuu*6DRy9>G0GNw^`ZyHg?#d9ohQW|dbnZI(wy zEe#dY9p5|{n95g7Uar6tIs{7xE0cd`l~3|2^BD~L5MggvlI%^eUi-3!Unz%(`jv3@ij&O@;e-?tBKrxNa+!Y3@=RwY<8&J0)|`5 zDoug?!3DRr6Q?kw)siZE2+xsHN>}XT({uYX!FJl`llQ#Gy?=hSj#_nqzjS-l2#(vx zJbqAuF$CHisQkH7rF2gsx2)%ZE)3KwyoSa8867<-**5&EziJNyQ%!ot zx$aWMe{Gv?hU!Gs)i2Il`C^he5*usT-8~>iZ8EBBy(WJ*?ZoO`B@8ZavMPLxO=_|H z=9>BcZfkU6QIj7biFfcF`6zCQy<=Kij zxpGJMX))2=w*0)f&fTO5pUU_*R?-7Q{=<-&ejSUtr}mY)5zh@hBd>}7*ss8QyKEd4 z8GN1x`DqADUBZlZ<> z`=4`+mTxKN+a(lv!lPOA^7gv-DK!xZT|_F%LQDZkk>QCe(7wtv13QVSeZ2}Q5sDR4 z+bPq|Hp-z1;}@yMG_%qlil?ui5H<0~s@WChVwf;YRQ6M1#4WECiaq+RNh&jMVv|@v z#mI>$r^t5NzG*m3`_xdo4`!@dYQu^H4B`bAu^hiux_4F%^Yn$X#soSxJ3uSrnHa0x zUHvv&Zn<$L1CW3!DA)K`t|bG@mNHDs@MW$CJv zMw6Da(sSKd(?)CCMY%-dX}^4aWmvsRG%~$pLb|x<+?VUxG*8W)kvmDOb_Ra2&iahy z{jY_^XI9y*SUeLF)%ayZ*0dN8D2Mt&(_8EI{q>s9r z#E!>99n=J3x6PQp3YMrgBK36DKU|Sc371~dQ2LVVXpaG*z#9wVWmDSkW8@bX=Zszs zB#*S)*vl%OKOkNVePd95X~4~KzQU~}F$zY>oy`poI%>BtMAIcUP4U%21W8$>a+a@q z9j%&E?qvER@+PYSMyJ)5Mc8$7rfzh5lE6suK*XXMF@D=l|MAYFIz!o|kzkts@ z>{@r8Yk8AH@w^3fFc}c?yM?5-F>R%=FOzU?lt?waZ$t^i|45{h(LxEQO8SACR_5a^ z(Q=CizVvR^5_tafE=LHMEw}AHI-Z-Es{@j-UITQT=75fo81B$IhDPqzS1h>l@a;I! zO$r}RALAZQNKITFFJ|CiUMC`&5=|S1zMY^^qj`oHKcLo3k!gu= zK(YSNv0!pxSZ4f_{O6#RBA+|yxY}UZr7(_Jy`svMboN~%2jPRnu+K^}!aK4_!%DEe zmKTl#R3A|H1Y4hbAoWW(a~iHJM8qeW1=>>9&@Q|5vhX;_04eBBhT8v<>T=uo)O|^% z?Z+*-?bTO{HZg-Gg@kX!22dXH@$5^Y9&2S!LSY7m=*g;zzAGSrP{RYq;VduWJhmvZ zBG^%U&qAUiNRT~QSF+uODYB@|e17&&ka5>JWCB>>H*q{gLfZkf&&V%=S4kP@V}~lw z_ZWEp-SU64plDwwlk{W#M3`^vVj>!Q;;(%HS&5#8ojhg!?}iCuaUrFo%<@u|Y{0x0 zjLlt*et4NY+L_+BVLv=gO-bUJDHK%|2GG>+1n2|@VM;4ab zU!ElQ0a=tJt2!)NZ_LJ^p4sFYB-^NP#D(MljK;p~s|Z6AY5(#@)33$C=Z7+;ky)De zt&67Qkh$u5q=REvMwLPSaQ`KAPB7QmOyCsr37tb3!Nk*C(x}fJ`FgZ%ZJ>NE3yC4t zj((dfYgfJJ&a9EFX}KX*a%cra7FOYXfeM(P$>~%qnVTb)Ts^CW%c6snSOE?6)nQpl zF;;jGt*6~s_jq1@=9aLH8)KltFvu?JJpFye#_XLLhPHH{+x&RVGH?az)7Vaw5FwL0 zODB#}36l|{j!HVXJP}x8%6R?m!&<*Z6=jqTgPXEh&XDBX%ik1VY^0zg_bR4615PY_ zx57p4plqr%<*fFDY&sbDSy%Qqec?eoT<@8Cdc%8J>V&Phz3%@oQYRa9=xPi|FmE$V zIQ*CVkw{0ZcK%YMTE`7*$heEpz+_oQ6BNgU7rfi6Kgm`)L{UWYz%;r zk-%c!^UsC%e_Ed5eL5xtad=)v<;N2GC-bY+8ORz;A~BjPS!Fu-0c`1MCF*WO_cMOE zcyG&f*4=>@Ow4+z>MKNE2Iuj4X|wU$x<`Q*KFp(}-6RmGAvj(Jy zbnD%{?OEiL%U+y0uhpm&LdkuLkH(nt(xcj4nVhTs%&!(t`;;7O3%_IeWD2;q70vKF z%oMsEnO(^Syx;7D^|8RV52?9DT^rl!8Um2u=o|)Nx#qTN<1inO`FZa7ATU(pwkOj> zw4=3Qvd+>(+&8+@eN6?ipv7j?oXleN5lM5LLn$I5k>P|KCBIut#7=wE_vL&ZaML&4)BYDUC4{V9LjDbw}KmPKu zkEso|!?<6QpJlJ;mkQ8V!z`#$)=HKI*v=_q(tB4kTqPkBEH}Cj(TZVsN>;#(GDMfU zi!oPo_MuKp5zTtpH~WA#!n`2&HP&PROZM}rQj-yu~nEBRi`=lX5%zk zUfuci;9WTyJfkern>TG%R4n4%7?axpyX#>{CR$1akk=nsqPoH>Esz6KHE`kc9{CHUnu&`t@C2n^h3kR7PV<0;K7_F$@o|##m2#rFWvR$n-Bw z4AOL&dj0vnE3=zx{YY*-tg37vt|fG4o}YQjpg^t zGV4`U4N<>?efnaOx)k+UCk=WE4*w71$V(~8dvqZ_Lw*w$pq5H=lwLz&uDG%H>)J`%>9dvboKTB1uu#6ipVm(7^$K<7Hn;Q5rVZ@b&(F-~%BwV}vfy&LiP0S$WVI zLnv!OL23n*s`HBqzmA77;KnQWsZvj3;MaQgi}Zy&GwkF-;Uz#(u%Z*XKHBS_3@Xp!Y5Q4tylWAZzTD&u0@&#P_XZI9gbp9}+*j&}j$=%dg) zyG}|rx?rL3tV)GwjRih4mDylwJ2R0eON{u?0ll~ZPYD6fM%gCHi6&F$+jr_LBjcPY z96LHV@bw+jWp!OvRWGJG`@)ir1ny~5ubJ~N5`@QUALbbwVYEBUJo1)D%p=7e{r1(E zRnm8y4E4C1MvbrcMmPBUSqd6TcG*p+r*PqA(P&ykGGKDTr4OU`#+Y5 zRlq^_y(>B{6ap09z#I?)cnH3x&3XsZ>`EXuu!ILzneRZSuC?!Sb;vbpx|3Yuxp!V) zd#1`9Wv>^IbAZXCZOsfSqT+P)b=j5n$Tmz?q)mH9OUlIt8ogl7ULNc{XF*Np7Ls&Q zamFvkkttyfwX;0<+E$}AzQwD%P#;+^(Fb-{TyY+#Sabzv2&Vg;uoyY1iPL4qz*qM> z5y8_=i3cLr>K5?S@n)?)izA!pH3-v9m^TaeA96 z7S>c}2-35Y9&8~uO!r973uYo$S#rO6)Scqq+lx6K2=d5jMxpzd0%VI12ICFAb!0_p8KD!(TD@ohY}pCis5Z23=X* z;e0FD*mR$I9rSaW!r%K;vP|xN+_oZD4FEoX&M%Yw9=;cBP1qfMuTL+2r+XC$TJ&9- zzZM6EU({s)6rja3s_=U@w@YPhGxuc3&g7?ncQKbJF}k5Ccp-Il)XSTj9jXT6dlFiu z*(nB!8l7&j77Di&GGcOe6YUhyPjpd?6{7r+)ppKf*vZZ=$ae00aUuo+D+}`3MO@m= z*Z-anD{*{C3_Tcha1$qiMNuf~a8G^gweCR^Ej^m9-eBMHEPT+&ygWQVK-!RZ*{w=F zit;Hx&vYwvjEBN^Y{wj_F@CKjmb_~@*fdQUDFm;dy6C;6@UNSK58BX{OBs97*rh0~S zjTdWN}Ax?n&`Al+rf1 z90!XdBI318ryJMD3U2ro%omgm&o*PA;!xyorch}!5-Imo@g&<{{G}CUegDy2@k^{d z|Ga4)?mXGXxam#~Y+GigaH596_A&;@bK~Yc4$WsbF&vzw6aDt)vhpito7UE0 z7Z&+!G=Zh*j~83Qa6kPpzKPf54KOy!%wo73MqjfI6KFnMK1W=6UhMW4? zziK=VETI);5b0qpuiU3&!=Q)*;&6%ZSvaDY#4)@$t>@7(N3`L73g(`P;Ox@+4a#$_3-Va8E}$z;zFpP3U6RAmcp08V^ZkT_(CckZ;MW?{a+aLyoD z{SQO*ji_eU;seX@=Nc1irlM%EXE-QFpqI^#x1C|*(2#C<^T{p4=|2oN&uf++^01MR zI9M`adk)d>$g$9|K^mSBs3JxM_$2Z#EUN%EXesb*cdrtaq<-^(653LD5+#Tn{ho~ZNbQ1XSBJ7L~ z*=$Vhe)o=!KW)2hwrpEiQuYU$Ca8A0;c$P=47u5XOEB`!lw*~$*Gqe)-*Y;7OkOm>Kn^98B9EIS4uW2LYfTMQ53_%28|yAOIUgqzCs*kvg3!~Mr5@_vN-3*lj}Z_ zkz-QS77Y!nrX^F=wT++O;F>BNuuoW!%8ry#OVIFYIZ0{2&tiGD@*&>{$Mo+Xl1Xv_ zW7ZG+3?BsGbqfFX4sIZEfQhi_!u{XmLo;3%$UZ3o=mbO@@GNMEvwh1zOBVMJF^8Zd zv^B6)7OKn|+qnS*=mz}&7O)%ER~>UCS0G`L?e5vKp3<_x*?uF`QnIwM10%R^wJ&~A ze`vkUZD{qb*@EHP?ANzjg(w_G@9D!ivONtZ%l`ETyp8P=!x7UrA}}A>s*q%JQa_-q z8o@^&M6w-D8-qWUK`kWSZtwRkoNMM&t<we|m;UwGH<)%Ww%lp@><2%(Q+T zium<)o?2>+r6vvDt;i;3xdPu2b(Lf9Hj!Z(WHaGrr6%J_!Z{{oAyff`i57)5*mL>K z%z(Qp+3Q%=7N>u_1z@J?__5;t6_GAL9ImHLzgJRze~a+boN!!Z*~c8O{u~Yd=*0ku zZx{BF@fn!gsWym0L?Hr*Jvl`ePaAFlNc)){8m300m5DZ4)*L`r4WYOP@AENN4tC!j z8*mqkoW4_A@P>V&W{ZuZ3KDIwI3+udXowwK4)P-9(3WsfJ8)s^n(67;n_<`OaE0Yj zSZ@c`vo6|NYgKxGoHRXZmgk5TZ#bgeo$KP*&mrkMn_#>DFn(BCT4K==5){JMYO0h(irwD_4v7qn zOAmH9LXsJQGUgaq3#34lxsny<(Qz|dzbz@f8c?xuHxLK=&JeB-FdE&^Z^C$QtO`pHJf|d*~+0xSnZvKCu3@^vd{R zyMn~v&z)VpAg_q7&}Q6&#EjPZnI@Zxxmcj!`E(wMQ3d}|*@x*bXJmV-(vc%~kH=M& zI9%=KtL4F(*o1cHRNb#7~k9!?r&2RJ3q^;GXm{4#;&F8l6HTQ{A*8?f|5)!K z1X}>`TweEA#VP40Y@r9HevP4rUFJIgbILt~hF_l)fP`#OzU)5pe!jbZh_me`kJx}IJl3JL`DiYDG)4Uz`vM1N& ztqo{56&vH)QESKfF=gcJtJ$IK->vLPw89YEN3O%H7w8wS|t#@K#?UnT9fOp3x{peSX$vZ{g{=M)q8vVa6=n{z+U-D)`asH)Uml=H|tH zwIcGzI+lOH##iX<=Ec*x`D<3XYq;7Vk12g>t+Bp-?Lt4Cu|(2-)l-f4rj#Jj-JU3KS6)@N8VxbJOV3(K361hm4pcrKWeSza^68ogQYtMl|k z$8VXJj_3=%AZGT{eoZPxIaL=@8`WnV5%2O;csI0pp)UKkwu946n|%LjzCqhS)W!Qn zD_jpu`mhqRIPU?@SnagL6iP+B{TUPCL6hMrlC3;gU+vBZyIXZ;iUm(upOf3vnsc+( zpjG+qG3>$f|1h3R&beZe`IF+)g@-)p+03}Orr!c^*$%+D%~w$x>t}!e>z_0ISh*AP zm5OQHDvnIHj(T@hsC&(ynJ8G$eW1|M^Yo=E!vg|rpM|Ro%VEV6Rd(o&{7PiHuG(_kV;_BZ~`)Qc`D6-2VFGC)X%UFO0B8AwDlA zcGg7{jQ>@;KLFYqu2N+k`ic}S`=;+Tjx!=-663QNajs$yg6rT2>lPk-{R_t1%D0&PbGy~ zgFx03&0mn%Z!#ZEWj+EUR-hm(%BKMMV8t*_B^qBbWp4+(suFIy;&?Bd+W+Blt!e33c?yv6Q4EtLg^KHbv_}bY9B|i>B&%?kD6-_+2pR)Pv-XozqHdSCbPG4st zvJQb==Dud;n%68f0s;>rMd0z`OnUB*m2&Zy{NHtfMXW{A`^$<>?66_T2~c?wHiqgw z5NA6}{FH>@Bai_^DxolhrU3Ylc+)EIgDgD^GTqS+&k*yn(c^1zB2@($PV`+yYz4;Q z2Aru|_K}gh`yUCncc1we!j5}?Y-~(dKy?bLzQaTA{1OE0{SN2K_)7;!8AvS1=2XlH zWD+xA?@ctw=pzl6C1^5ZZr5{}hgXITNSPuL`8C~@uIeBo%4;imDz|d@vo2`w1sJ3b zxAlGI+dKK!3(3!1+(VE5J3) z9s14x8xca9Hg4j)1TOquSoV%jps#ScECt|uedSLo5wSZ9H&>EB_YIm_4qV&0CB|8+ z#sef->0d24%(fSvE^G~SP-+4eWsST_0X2u1FW(c7KmI{KuECF6@f<;5_8@uj#+cXM zeN5w(nP=q(1FFDa!1H}rEF_swZ?BF1?v`BCug*ZwXlecM_FrD%Q$QwoVqFz1(-kFp zNEr_yaE)ID5HxzH2`0Rs(_~u2A0{U!>BLrm<@OrrRX=i&eB8n!@~<7HkMM=Z?>7Oi z8E*An|6%alXQRaZSAglbPtkox7sb)*w!qu)Yn}fvlxPqEvOlipqOZA!0A(yx&^xfZ zABKJVVE6XJ0?4)3p;~ivIZ9Do!d#=z=x0#AF#EU7J&MUMbA6ZJfgKy^CTw~a#LLn% zby@U#(dL$`#1Ic`B?1l%G8Z}X`x_K(51*d9l)b^Q#m*b_r&|1W^Kl^n3HDm03a<_oq(UovY2ZH$P_~%%r!UIj z%8j)kb4Q2;^c zl(x52kOnT(nyv4*-fCCO!si&~F^L}IDj9uy{&9!1B3JV&1XxBu9)mS0@peuD&`$$iQVYP+1AvtQ3Rd^( zv(H0PTXhv!m%Ba7_z)OXM=i=8FJyaM?gDk;@ePVIaidz7y=N|Zh=x9N+^5{+a?NfU z&-i2niH^@L`7~rt7vn+_=mIyc8MX1qxFGVDGjufOnrg}zkpDK_CkE2JES&FLeh|dr zaKTd0UcD9(yS`n5!F65#pbqFdFuh=E56dX$0Iv^(sn{wZm}>$=bZd3e^_1imH2I_9WJjaak-K;xl#UAV1vyH4Zzg0J^O6~q#+qE1 zM*Q;;`$hOwSl}X$%2}uLZTsEO6iajBufjfcW2I0}%U-zzl@xERw!UZz?~oSTXSD08 zl#(Gb;Y5Cqr1RC2nZ|oFfVBuzCVCGq0joe5d>7_Zamcc?H_*-oc5C<2xz;_rJ-nrv zSSZ>=!{qdi*F5HrZ#8Q9=Clt+9GlpqDv%GXJ5O~9yAmRSV|b|%vG^ZG^(vfNzLVj) zN$w0do)1@p>Mu8AE8(89N5K~{{e$BMAyq`-9e6TB{vd&0S`|&bTTNsWm-TrksVv`J zbD}MpLjI^{6S+ObA=g=W=`%5B zSU~2K)_#qB^T^giPgklDeKzS5y4p@3d<3pPe7q_POSwmwdoSZ7?ne>NEJ4fT)w2Lh z1=v9DcZjB;6t5cBSm`+47~D>cwvVfT~Fy&E_H~ z&R?lDJo?+rlE?rMZ*g3QL-w~~50t>(K4bMb@tz8zFaPzwDEVLcwJ1$8EU> zV$=vJ+<@?|4TJ2feW12L+%SyC0Zve$=G72NR27xV5mmjrH zB43TUxQa`mV&%A*N^ep;lKsZ1v2&LPI~jAkYFLX{FSie##}X_DoOSVGz-zqp)Ya8n z^hL}|+`}76N_us(50(N3*9MsqZKrZr9=L`jz3P`oXydq_)FIG+0e^30moc1uxmWhio7Ii{x-ZHtJgWgU5eEKK&DK3m|XsR36D?qJBVt4*@_K$4@TN6@Zlh zkf-rnCD&(E8dOU3rK@RCytm%G579PHy0LJB{#6b-hxyV7-Ta5)aNm_Ab6s4$@GQ6* zkX|Zz{A?fK9dT^s3$5d?bs^G2P73(fERf}k*z~V4s(4>*7AUTP1Rv))-o|@=dh`s( zvTNJ^cmPqR(PT3ug6hc7LQ!wIZ>OUaT;aY0a~m}XLo_xy;HdHI&E|r(Mw!}_Jk6Wt z&r`M@$1~O`ljH^zQmK5~)&cODHg;^=QQ6ZX$0a7x%ri$s6Ob}68Zazs5g%XHmo>fO zlsWo%s^fd5Y#Y|JL%?p(0tLZO;@0US>HVWzSUmFw6J)}qt;6D4K_6giadK7c_nof7 z2{0WT%-Y;VAj=2#s3w5<9-=0g6{&^O@*Fp%oZ_8mB`E-mnRm ztc?DnxS{NG-jjL*t?dpnCP@hdb46|?^MZ#|g~) z#9o2^TE0yZ-ZHr`usqflwe_~UpigJAj1vtdoEsFI`eJuyHu`6aDVjSYaijvMKvdZO zZf@wtzEOavRtktcQFBo3Qh0%fGpn0vVyDO$YS85xhEe#Kh$_uB*FyKtNugtU^9Sj@ ztYz19LY^umo{$>xlJCr7a*AtHED8W4EZ%gfat1V}fY!97^+LUhr3B(VcUMDZmV~`) z+i|m6HvWAU0$%MFsoX{5^=PAMqZumD#eQDd{dK?2qXdGiITNv^#9g5XfiB%cJ|r!^mlq%kow~-`5-Vmuv=P%*_mV}ql0(%Vfn=K?=`@pvZd`$?S#?T|8he0pddb))W5*EZB z%vgC2O1W3%=-Kue z<&E2NVc-qxeHYlbB;PnT56{y#Y(EC?W!gaFXxmXMd~?Hm*JUe+k6HeQPPM7{&-$C` zRB{N2&aIk1fx-AU{jFy>m)or zUpZFpB;((W(buq`pdkO54}fmW-sgZyUjaEl*LO7uu+@p<=k$ehAlKxLh3a~@@LYkU zE@actm#_GBu}=HyTub|z@2IE1RJR=WoH`dUeVn9NwHZr_)&MR7;daQ=8R0 zEW&XbvX7W3dC012xtxvuI==22IB#-Y*GzCYl*dYh(RPf?M7rkp-RSp#2_@g+wV3yf zo#`LiSTvB3sS0&RSWaNPc>N19kvv>@f{aZh&E4wS2VyY(?bfbBa z#>W9}j=qHesIhUZF=XudReDz#gvu*#ba3~!UEnmUIcSkSla1)$)+L=AG-s~6AQRlH zr+4OqKe3j4yJ1C)*(v z)e)CV^h;Niy8DYcdmPB4*Y$<95a?k7phy=_5i|~!Cv=|(KE^mv@ao}Zk?Syc8B0#! zh`6GFsM1KOTFv=XR8*h@mK62j#@AQbKl=m=P(C2)U^7>@qbuuO8SmjPML@r#dEb>t zHD*{9@9xD*FibuB%RGl5sA3_LGy26CeEuHw0AAS%fePjI-mj8oe}Y}^Or4lK+dfD7 z%nk41FYScV$lt=hgDs_fVo-tp$j~!~`Q36C8=VuY9mlu5?x~(%?|bEW49`BpC%w$v zDhs?E%A5FYcPVjQJgP6P|Hsl-hQ-k|UE{97-Q5Z9?ko^?(O|(Hf(Hoh5+LZ}4vTAW zmteu&CAhoi+xvOH-!oTrclAv7DLZA^R$9h0J6kjVX|cw+j0=!Um*aH{qmE@8L4VJ4 zzw!4+^#kMlPtUx#`t<%SzhI%$?w@ZPh3)>cralTp{2)4A{xYoW_c5yWj!&*ogmmM> z#Xxayvl7qsVX$a>A9tU+gp#rc3>R<21OfU%Ss|)X+%3rrqwQy}eDY6BGg^ zp5j2;qjb+Zudzt1N6eZTi2Qu;$7x#m_;>YoagU2)(z*BkJMx;6tnB*u-rlXz-_0Kn z0l&U$1hCy)A71aRGucvHlg_3kueHQ)?pE;65{*sFv|g?9pC_UMbVtiD<9E076AT(O z;?^3;zj)lTz6aVz@o^xT*Y?@`Eu^ZV5bEosOwW8M_Lf`N>uYrpKI@XTZuy+$UlrRb z!iz`Csa~ROdsxqnUl;rvDXwginCwRAs3A9VWx9!+<&sHIIoJF9tbf*e>PHo#z~Tg^ zR^&< zp8}A7h5BzosY3n>zpaQ$dz&O=Dg1+3eUfw*x$3^JA^&lD(|qD2$@Dk$t5E-6Hqi#=3F7aMKJ;`!xN4*YA4$bn)meV+e^YZ>ebqm*2O)W1o}l{`LNV z`E399F8obW?7Ok!!s}%O(RXiK_rg*R`o@6L$ME8q54UG*AlFZ3&pHJMeSpxE^Za?o z-AtJ4qjZKhc$yh1R4l>^_4!h_8VAC?uZx`Rs|6rG&~nNeu*qU5Nk|P5a2{kccSk3zf;|TgT2mPUj!n|R*kXE9_%tN9_6vyUhyRkx&HhV4QP2Z z*4=xgh%mcl<82J8s}m3f^@0 z8_d@hUD7!-Y^!*et=7(vGhLqH{C>AmQDl*j$9bZrnVEbSNk<=Yz%aM({q(4pHQ4dx zNGv7u@ic>pdZ!H`5zDaHR=;63gZOYH;Y4j9zQJ>R*dN-fve24N7aniBM>lSn{O+kj z)o!l7oyya0-?u?Tx21Kxjqblx3Rmu>22KIAW53Y2g0;B7qkZ@Ihrm!eP`)jDTqZY< z@|Lr!RKSQwEC)7+jKru6-=T*1jbko$n(EuO!gSy8ipl2Z$GA=Qze?Aw_~cpv zak*yiT)WNhQP0-PMR1r<{mm>krZk+Q8$~ly2UB^`YIg>5{TqN$$AN)`hl58zhDSw0 zghzydL578a!-c2$z$1--qZNclP0MTMn#e7)jZY_~`N{N4ejVaRm#@9k^n9|xm*z=V z1ajJL1tI)E_rUs@e=9I3u&^*llCbwr=W*+Q-P#04LtH9pJVUF0hjD#~FbA+=lw0I; z)&Dd&Cf(BF{5H%|uu;(^R_xW3!n-Gzzrre}b)#Q7sbA>oaA`p8UA~p&2gD+akZAXt zj-Zlzc^MQ+;)swtfr}~bga69LBJ`O)2fg;f-J-UwAyR(G$^e|H)uLvjo&L;s4Ftdn ztutu<+Rs*=GZH$+2F=#zkoYRnlYt&TJ0_QqrjU|xj&p&_l`<@@Cqyvo2*49Y+74?3 z!E!rfIlFnu!`tzjRG6!r$Ye8k5{SYjG(E8`=lBx>pmrk(bNc7lk_A)z73U0*^W`49?4ggt_^vrQrEj8sdA@5E9&zL8^Oo+jzUkRYsJax zO}=e^0*!r;*({7rjDcco=;DkeFL$%wH1_gpwJKZ9dh$i4KwqW+@G5wVPVRZhU8=rzAWg*Okaw3Z5%Z88Ba{dId zZN`~*IZp;P3#@ATK7&Q7dZi)OLf?)%Y=7ZJd5 z9&x(*tq29B^HKIA3wez(`s20Fn-jvti}7fsH>DWriD7uXgIcDz)iy1^8iuoI*QE_O z4?lT@e#QuPh!gr4SA-&qqhHEDfn0k!8Em?W@ebC@wvNF97x7c{!fJ>o-2x%e+_($-{TM zd}N$P(eUGx=D>SRd!E}sr9e~2CevF9<$Z*igOxk^Y+36YF7n2&;3`=hFNMQIh^2th zA8Ksg@)-zsYYG^%?lVCXw04N?l^;lc|B*^&jZ=JgrF&4{vYoTMrQRzzjOP`71Q5Nt zI{&jvah{}d)Rt);Sh8s97T6-eY__t#;W8OEb>u2ErZ(zrf5z~I@dPoi+-O{R-186b zk7K9})A((<`UwOO{DS2`B8yjyjP(2C6RlkqRs?!H4gVB7v>~WtS+mrx2;}?)V=#-1 zfr*eshYdbD|6b9m%gu-TA<*L2iTBok{Qv;{*> zLH^Ts?)wF2<>eWGYRR&vmh!1DsdIKUM0bVw8xA=`>kgdu&=^DTj$7C_3%15kzn|A# zTMOxWv6Gr`1YHs6lAXP9nrr7pPGc@82<%$Oa>!W4i;g}+( zOvO%W2v%Jse6xeO@aRr6jPf>pX(&!!kZ!A&d-E2BklQ;~&}}%*Z^OBSA)SPj{jMb3 z6{nN-SEki8wflP^6;tepg9YAUQ=&GOBFWFz0_z3loc2(z!KHVz0yD@#8r;TJXUDvM zHKk<#Tu7`43d{{!>e7wY;5wb^Wn}75bVZSIg_Ggmf|dG@1^;TYZfl~Sl8mKSE%XQC=VgTNwRz5E`L|1f zpc!2Fb`VNE+H@=ihca+bU@Ww`YS+n-P z?yHao)$~xJ&MXhhp@cK_$+gmTc;KTezngx_VeWDDdW|J}BGqGa*up?PRzcK2e;qrX zT%&DIt?LazygAs_-Aa+V#Sx2oDZ6?(|2?v3RzW!@vcUfK)CZqxn|x$BGZO~KwXVa1 zHXiC@XAUv>K+>H6{6- z_jq5&o{wxRmH_RfBPz3U{?GQ}56iSG11}@PWvlkle=z@G;#!@4vxmP_Fu!A3KN!EX z=99HLGyAZo%3Gc}dnEm;tJNi|e`opZ9N3`C_6B9*dpyTlw`A~=X|^Ni8~biAKBE9( z5D_DQ_LihrX8)DT?{5Ic#^1GPf<0vyPc`Y^ZcpMa4PZc~M{6vh4qZ7Ovj~eo?rN> zTIAlv@lGLc`Nh%Rasv>0m1c8C74>Ku05VR1(5Aa$y=dmD0qrk`Z7eJR=V^H6g+(tE ztV@1gIK4b?YD`30E`6+cf7SXs1w9P_KByx`p`)2QD z`fKGj>T)cg&y%O|%~GCk3DNB}DE2rxsO9rk4U}PN8b>5(Z+T(a7--e5Pbi@BwkNV| z*qH}Y3-*fm!4bq!^4igE>`%=O_a^6g&W?p+`jcS`| zgpSxCtN+cBQL-kw7{l?1Z|P(K#!Bl+J6p!Q@bsYuQKyK4<_AYEX9+`;;wSNVlU^nt znilHdc{gcM*XvJct&4too5B0p%=vp>iKKLhqGN7;qjlPqEF2;<%glJf2)M~ae7X!1 zc#(>hUSPl3$hlFk1jQsz<8#%wk%fmzP>p%P!@TyYl&dFciOb;Z%coV_?RE#ebJ6uJ zkjcJUubjw&dUmpJ-5C9rr^~AKWJS|PkzY<~2)0#87dg(2A@wAt%KM&`wRk{*kG~rK zmqH5Vi5A3q>|8{x-NK)m`oZE8Vv-Qp;Ou3k*A1h&(ZRV*#Lk36@!A0Sx;Z>5rXm25 z3GK(JN53Z|Wl3!S6 zfPFR(xe}2kshMra5sOjBw8q{Wi^-EKZ-IwT*lqY4)CB?&h?kboTsaciaSO21g9Ra{#mR&5Sm-O*w6|7}@ z6Pf`Hm04OHRZqw0`1yoYfl6K223wbx{-D=rMq4m2>}x19P9)Eq2V<>KSi^pty2_Jq z9yvV;Q!wPFp}B-E@h18H$MQJr(mwWzrld7b1pe=Ly_4?ZGX3>_+sw^tP~MTKMcI0(7Ml|#U`Hj~}*F)B>3sb_{{s=8 zQR_~v_qwDNbPo?)H3$%INvrUAQ|CYYQ_6%AWvzdhRt^?U)Agc~LU__q_?s}8IbRdK zno#nJ`T}Kg^WqjY8#W}KKeLd7g3l|$lETa&U8kMZ!u8bq5+N84Dend)IY*j`i;Ggf z$Gj|3yfmi57VJA36fc^U)=f#1VNh1(Ck&&JkfcQ?zDirRGYEkqbYP@*L#QnWKTy%b zJO5Qb3m*v!?R9msYY53Cj;N%bElX&JRsPbq?P7+El!TTjKT0_x(mB&!>M3s#rs7H$ z?a#W7gR^vciB@ydes>Qf-WTq@BSmrY;;~dnH{Y7?+pY<~{JAu>9d<`5+l`*b2Du$# zXJ@3B-iOROq&BYNgrw#Zfjp76-9^|xBWx=ctjMb#^7Vgw6O^VYco62g!Jm{w)zJ$g zJ?R15I3zQp9m7EvZkcA>>jgMJZh0n1W_d@#Tom$QMp4O-q2uVGSpf)4ph^`ikyNxW zF=l${MA|Qls{|A{HG>Z)^r zEbSIBwkum@ju>!uM0jX1xyrvXClQ!m!IlGfVrYd%m6%+ji`kuX_55lmvwDQ#q`Y9E8~ zB?xRT6}iGE853QqCQ@kd&9j9_EefrZb+U?p_&%2O3tG)cmVt}O80cm8#aWz(M@GSw2`tA$Hnw}ir@t3I1X$>a$j->UU}H6m+J_nbPV zzmm=KW){9j0Rxh7>?3hJ)Da?$(%{>^C6rc;5YRo6WTzGj<)E#`CTm1bdhvg)pSMOr zODf-Y@FE-^)~fG0$-DTu3B$9?GLBGdl;>KXgI-W}O<$_hbHZOZ!E;+AyCzP+%5Q8$ z6o^}`TG)8F?Y^Fqd4PVvNrUEH_^VI*gfyH-cq+3&+b_dDtWnVyJu(W9HQOjuPN!XP4zYV~2Pb5fBM@}DPR&(G=9kXmpY@VGT-tX z!&ZMt&$L?+?VkMY;{_wR<>zze3vsh{FoV)Nl3rhHiZ$nzuIPXMu9PqBqkrAhg5^is z+vr4#q``9Q{1f)QxL1lOo?HYp z$X`6U7#QFVdQCdwRfc{`pUmY0@9iSHq)9hfOAIgu$|x4@6&bW~qijJaqng0HGBuZS z)Z`7zkz3iV!z_7ON*nV(+ERj{%35uJr<1?iU6LUJ&Qs()v!01y51Eh83f(GoMt?ob z+khX6s1bFs>>GE0jeQ}Sl`5ovS0rYW;uhXT`*OFwt8!K*75T&0GRQ_uN$r65Q%zzz z7~DM?0v&fx^Wlyylx)WoEssO8`e1EnSIFb{$IJ$J=s>$h&9QbRCyM5-%_c~-$*Hl}93&!Yrgc;J z(aBv>A)C3StxgEb#mJyKr1ezEfj0LKhHoRWHOeTwdV*GmH93+imx`j)(?OmKu|5Boo*ctROAyQs9~x8xS`4LC3cDvNv-;~^qPuKf1aMphIXu? zCGiGav39}Gi3Q}7D14}@+m%AAHN&)^^$!wtDy9L0(}PHWz0KAD%w%vmXvsprsZHQ? z!lmi2Ld+ln-d>A>2PrdAk8>$Hb7mmKg7;L8+tG$Jz(VvEVLWJr zI}wFw`b~V03D@`Z7^8{RmCU!-wC^1&3W^r%`U!t+LD0GN+Z9D zesy5{6bPrTYS=jpb6`~#ZJ)I^a3w^0@@A{A4)=p#mo zQT_wv%(wO^q5MaZ!+Dwx;e#tM@hu{_Z1bm9D@0V{oR0bj2W|{}0mVr4$|lznSy?(& zhi4ZG?TOKvwY)f+f=|f|5p|oA0B`dTG>iQ#<*POh_!c@zg4jL0i|YN12bnmPl$bKI z<2F3ira|P{Aocx`rn;CP^Acs=cXG(_BkIL5)Pb%O?(>5MT8HWjOkOhVmTMt)dMd5N zE``%AfJgm11{06BaFu|-wW$m(VazEYYFqkNk*hR3(x1;$>Njhv(#ii|{_eIyxio%o zZ1?iV<1gcW)$a0$AB;2{1j5r$f#H@59EpQbVD=}aw1d#Pm}5o43{i3P?O6jx13)HE zSka1}aB%GgCZWDLEPW|Fycb?FWq7Il4XsIr(;|+2f(`?d7o^SB#?Vsrd6b+--~lD| z%VdnsB;L!=-~HwfuJ5}WH$e55T?YB#qTX5J!JVFF2gIIT602swKWHJ8{{=RKl;15y zO6w4r5NB%47$q-T$;xNr&quC+ewCWeh-a=fotTqt=Lx?hYN^eecyI3y<8&LDOwm6o zDHj(ey6z$$tBRXgK}YbpUzWOX46oKHs_(ScvsT-30=h)L6Id9EgsjI79am0iyN-ga zetzjMI5fmr?l3;Oc9MaO%ldNE6XpuBe4EO`#%lWVF&=gJiWN&ZDmZ=Sh8%B&RYYv6 z@0vl|rOXO(ip!PR;ZDi1K;_65I5c*pX=+`^^YWLs>uW}BcQ1mDBjW&KNN zsm3McId>C-i2Syw#{nm+5I$U=f_;0r)*ye$N1f&hn9!s6o%HRe3f!_|q^wlh#bEAt zn_G*AY%gyn*}5J!%(DX!o;|1tgDh6kvuFyzhf5kAzxATr z6UxQr-M(Z!C+jWZAv8Yzmf!nx-(rR4IsP;_ofx%D_b%pD$c3tQc>JZ-g~r|4#Zp=W z#drKTTYnYAQ2@W)CH=)-mDpt|MWOtySjmebVjM#4IA?nc+@NpA57Z%Cbo|UkyYZ=f znzOi}1qdU4p5!Zuu%5r_G}#C{eQzatNKWj+*USTu*X(3BVG4LoOV}>0TZurnIW<1~ zecT)wyW+dlIbB_W#n?RjvG1gi%Zy>~cll6OrBxx6-Pk)yI%op9cz!d?{5w%R>|#p_ z?^lwH5e=0|6IA)umSBcb8T>*}aTPhLO!`EFpeCgmiH}hsYX%m@RNVQueq14djjp37 zQrnf-tfzthf_DiKahoev^4!o4UPSypkiccsgZ5Q%LL|c--r}ISCBy^Ey;tF9v|Esz z%J_@WrfBPVU_cN__1QGNRptDeTne+Nr5CU=e4F_`!o6DMP0GNjwz(C)S9*oKDB}|j zX7v_abV}BCQffNe>)4w&S5}$Pe&#`bm@KAlqi2MV=dtjHb%ixfxA(c>9 zlg*2sW&2If&`PHMY{G1H!rcB^xKU8OuHE^?hav%7$_<*&w#>s3`!W83s3n*WYIwFf zTi7+Vr%{?`E56#@CfmiyiEIsyvt)r+`jvftu4JuD@V=!_cQl3`bBLB6q~+`G3}!e^ zTX{X|FeBMBc@<7=f#9w3-@dxK z&G{);D@nrZnGsniXBLPIP3*Aw;>tSc&XBYlij0>s+jJ($g;f$GUwV1!Q-N@xV3XGf z5=#^fSN;bxN|5j&ckc&1epEZb2x~^<8Iz}?hcY>CZ3_)HJ-xmKt^^I`)cK|QHJa;T zg9g3f2N?MEP*X*l?@>?hrv;W~7VCQGe<0ulF52OnAek*Zr^c?d)wu5T4ciVTnq556=!umTZsnLLaN?JhWFUqxc!35bM zUK(v+J)FYVydj&hzAS^$OU=*i40@wcY-8T1qtMK=zG68nyzY8kpU>rpUZWQTA3ZkN zIzUi|i+^>De91qU;76|TH=XW&hg5q$zX!eQ>kGD&4Ym%Q0HEzW^bzzUgcbx+R>x>; zH%%^ptGxWafjJ0ck-HK_W2YT5O2HlMvr_W;i^JXTK0s##B|{BBsp-Xw#A z+g1wBUYJwiEw;i1(8=BzcdA2Yc~bDm6$}++LU3h5P%wL*b%&U0kir;HyUt3 zl@>g2f2Uxi))kgCc0{Rk_jOIsqJz+|ex9nvAUKT9_ci(agNNb-75&^3TStDen=Ie% zmLMwHI7)`%1T5On-x8>TkLI9LoA%QkwE3S%4u7bsHVLi_{HZvgL7Yu*SmXifMJ6Ge zTJQ4ot$hAsqNd;R`HJO;DpcB*^Ajkd(QN#=i@h*KDel-5(}SIA4=^f!v_wn2{iQ`ybYif zE%m$8_s7H)#U4o58G22TI-KWqlW}SYEQTf?t;d zYg(fLTNhSSun2-UGK!FYrH43rSOEuyTFgYCDzIzQnR2zji^0s}5GU%jYXYw96Txc* zMn$E`SPD#0qum*7nG~A9e6z|Kbq7zaG|6WR%+7i;kuogVM+z?~J+dZ-b0jpYWCq$Y zRw=A^7!Hbz6PK8E$T=O_5(!{+kmE~yzBImox^|!`Ni0*+c*EW{^QfkHyAvXXF(@!U zk%KFO3k^e}Ma7h{XtXP!Jr0E6Lk!C?Bw|{$khz1h64+1y+H)TwloW*3kG|@a?ZuGu zqLqS6_cQh)z|fyu!p0xw1>-#q9A)%(H9LoEdqo`E5O+c5uEA7LGrK zspq*&<~is%Dx;zMwMyS!IWxTy@u1Dac_inCDe8fg?R#a`{1el?GLz|d~yMEmnr08x-K>AqEjUzuzg$R zu_U2(w`$gZgdY`jKT;}Ru$#MzwUJUA2_dy442x{QI%1SOv}Kg+h*Fc)s(5-~3SO(5 zYrJpmpLpTl#?Bhk0);T*zpJvDIq6P|#263Xe|A;GO{zO?m>_ajcZ-V3Dvoiqn%Bbs z8k0poT*}|Ba}dz8QZ?4ow8RQ5ml{vd3#u{>Dg;qYldO;(=SIzVUkrSd6Q-;{I3{2i z6w#9leX_F;4@1Vpp=5&B4s)e2aL3N+wGQ{`7&Tt%M*9n+2ex`?P0S< zVnd)Kc-D%uh;z#BQs4I=+!J9q;U0*?J*(kKIa}ThoTa}HuPEYxX^wi+{tN)9`%?TQ z6(_)1PHmcXKJ533Gmj0Wx@^rY##9tbL8YyJna4 zj#`SfPHPI?>y2Uc;xwpL+r#yqyAF;hJR(2ip75`ukZ$bTIzV>`#N@Y_g% zw|&s$`v>jVPz@mdP*4)$NR=alohdUWN;4s~4vB)B#HM6-2D@|xXQ^d<@ogkoI}Os7 zQDvmeVhZreRdcNcqH#1#tVSFbIE|qZo*JgqG~5POcIj2KtSlvU7EhlHn%5$#mA}(d zf-Tr!js{-#(h!O)vOy2ZfNcQFW0f|=y&M7=VTSBDjc;52M@qDOGbRGzF=jU047U_Q zKFWETT(CXF(}>f_N8kL1XHFMuh#}E%O)z%V2W}xBg2r((%<_maKJzNYr(j3I#Ob+G zUze?l8CM~x5ibwh31o`)0xP6@p;D-aWRCQGtkTq?0_NuD=Tlt`JxA&vyp!JcdH@;u6rkOT%`7kTzfG6 zdxd-frX#D-tFHBSPgz4fVtZw`Wf&xz-6(hz&@x{@$f)Rzo<8AzXBdNOOKjxr9!kMD zO1`h{a=1!=sW}>3wu`(7s1?IwcBfV#`B)+6*bvxYvtDEL@UWJ4()9g zw4ke_MOLqaMyT3CV>mx8q6M zT%k5)!7vG30cmFrCL!YGEwXQ$_@|N<-{`uovsNr3kQ<-FK4o5s=%X`#SpBM25o!=b z`yAYE(56v zgky$+Ahu8biu}E49`TxiRkI?olM2J~kLAv%0zVyg9=aiA`;Gj?f2aX6Ix$;a=pe{E z+$?fzK4&^PD64(5??bB-G`&oMwHI&{(?=+WmuR%dSpt&TO=j~zw+=4fE6;-4QgO!w z(PDTenn8B>KIHD_NFFoBQ8U&xgbxv*BDXYKe_%o$0<3u?EiQy zfXxb=cTX|?{9^3Q{A8pGBf3U#ACdKT1Ic@Cl7d|WZ^dH#y4?#+f{0{{ha7c!l`z53KUFw8QsQiO*cY@y5BO+pg z*nFH7iini7ut<5G2-pX{VNxP;(J+kfEdo z3%>1)1jp_2{_DFZr%js$(|$y~_67F(%|ILCFLdj*nrHQuatfSC?f|#gB()I(nlX7O zveq5+(}7}cgQ|c~Y0O2bPy&rT=E_@L5xO)VIcBNS^l|p&cxEOllr?i-iXAWyC9{D4 zI7`G$^6^*BC;7=0J&xh%uDJ;UnU$6++$W|kB`o){zH8+ibR^{Mj0rvk!e8{{GlBN{ z&WKnpaJ0Q2MnhG=KRAuj68C^DNq*l`N-m&i7xGxe2StsG&}ke(0rd$4s#X-M|Dd%& z0LtL}D0ldQk5e*No3%Sz2j_MDctw=aJX1MlnM|5k%BDnn!*d}BDuOUZa>S3Yt;%1w z1bPNNa+r_U{bw7jU#{0&{^0j;obDRy(Dgm>_xisDA2uoGRL~qZPTL-Kp&RLRRqQnW zx0_H&|6oY|L(TITi%|GH4;5(xok}U>L33={kFWx2IjBEFUy=ClRp_9L@{mO+c>llY z=jX>r4!^MX%vUe)F@^lZpRE+v?;qsPdTi(*bjc;~o^u+aEX1f}k^mqVk=_yZ?r= zerJf(EcjFJ`@Sw?2J6@ zy2jDXkb3zoP1Y@%?j%m|zxjn5*fkorL4~(*MbCmtq3^o??^E?7?1}+FHH!FklS29G zgqV~%mO9(f3xUBR>&K$VITW`yyrx!w(l9kK9e$D+!Pw%c1uYAPpxI6PiUJ&0iAcG8 zFmC6eMv4i7+pWPc__2zpKVbMItLtnuuHW4wSi-PRv>K=RkfdDl^DA`GP1AN2q>UnK zz_kUFwp|F8)nNUUeRFgz)k@IR(zm^EZAZe%RX2@MW(C5LCaL_%8q5`eyfw|uJ05~Y zWVDc1^Kpq1wzhN;CjR-O8Q7nk!jJ65**Oao0O&s3H7!Dy0#%${muMG-x?u_c1njVAt^V{jh5v>|s%-x_f5aUJj>(4L11z4R8SS}VoP`x6#f zr$~?dKrquyI(Gc}H>>4*xgc?#Tsw_k5AfYJ#q~COYzSF?A;ua8dbpuaRtNxg8UI_-xVUq-#6N^pQyeAFDZj)RCg1xC%7Sa!-cogyuOJZ7Bm|zsy0r z_mFQ}T_Jxd%YS9S0sS%WJdJy#w8F4P&(Fh>2*Z+^?a*@DGVairzWW0n^a=wC_v-JZ zfu2|=JhYqiU&lb7xR?l{@|^+yQ^4QDf@Wi zZe^-oNsx5|Qr=1s@HZ28N}#5s~6@vbiY_^jr-&13IR>S>u)= zI`$`xX_Kqwr{(Rowvba%?Y|cf4Jj%O8Pd~@TQmn}-0w>9go`qeDK5#6FQRsVqXCg* zDF`AUi4mUWPyb+aksN72gbiySw{+Vfk6gZTA7_D{X`rHM`Ow*ZQYw?njUIJ-uXES||#Nt4$w$#tYi-~I!$T1A^rB_M`Y1nXS zy_7zMe~=y$3G`uXLt=7|lZagJy7&i;+sjU_yq<$ezL1Ys6=1nV?U&8jTmXfAn1ov+ ze%*aiA5>)Jlzi=;)*9olqk8X6i=KCAmh5t>g+!juK}2UEv7R?ZSj>aX)6{6*QH`uK z6r10_V=1(!@2so}EUVXj;#`{Sb!7sdX`B9o!L3h>&+v#T7<2HoX@@rgE!Fn)Eq;FD z@&(mEX4OFgy45RulRj5MAo1)U=H<=l4o!(d6g0joP%BzpCnv^49(uwM^&cfgt&`p{ z;CmsOh88Z0YoR!0=$AT;GpB%AhQ2+$P1ko%1)2!;o!c(i6o%S5bs1K+BaErxx7q8a*&8%Cj}+*<=ED{T}l^EWC_Nz7Av4Q z(L9w3)w>j`@vU)Jpb&rd*CvBQo2FL9>5(Twy*l}1M|-hIl4ogOk!ny^*Ht+RQA`X_YxyefYJ zrZ3+1cKrJol+e`HCnu3~*0D7x1Lx!b#gT=fs-@MRKiQM^24Aso!?adx&A3V|R4pvz z-$2}KW<4t$4j=!)ge_%0LE=1TKT)zGqkjf^GGSTT9!Ge|9~B4}=CoCbLzO=JKc)BD zw`=6V4r)W*isP_sBtFHIoyimi{$}Fo+x@Q6YvM;cX9VH>7Bc3#!Q^w2Q>LSz@4?&t z`@ZXPugI4TnzXjNhyR-W9{I(VNPjQeY&}%Xw^|cy*E)e5OeJ!|45rUi!7t!~z|Ik0 zm+mDGGtdMTiK70X(9U_oK-l;}11m(f?M_D$9WIuT%DH7UfKsRD3Jrd5b#ClHm~?VS zJ~_NxpjCCxI3Jg*XU~L(?Bf~HKXkvAMu{Ig-GM?pki_xC^az9-e`#jy1pq&))%}Cv zJoEDsU(euEhT}&grT#E$ww12BW)&ulo6LfCA<TZ{N#|TIbi<-Zf-uXcishIzr zx!jpqI_3960BuPM)r!cp*qm(oM}%RK40&Dn?4jQ6-aE zu_FrvcI~QUwin(^TdBxS z#HF}9<$=x+m&P5`31_P-=IHwE=s!DPZq7q}YLAWi^z%~hx~S&SR=I4O+!3D2sG*rG z9*j}O!YiqtDC3spK!|&Wc852s`!irJQUX!Xcs61`Bu-qRLt8(r*;1Om)ZN>P1a}x{ za3IxVcw7W84y8k9^$ziK;XCtiP%^rhT>0FWsT`8PdtQ+z{MruvDT>je#v(U!f)> zUg_>0=xJnIe|T8iIi&{MqpZg|U2SCkzR0_oyBAcb0q@d0FtKy2%0lEV~o%uFUU^64YEw^=RNLO*~#mCm}_ z^V6Gu+Wbd!1`3BnMTl3eH^kIM?x$7Q%bL!#7`OgrK|uhH`iR?mph-g%;P2q`ofJ_w14Avp6lah=-; z&S+S@wfMJ`L-Dr|`6=`~WtLML8|*UPE_knw0DLf z%W88WfF%&#Fdd{X)1>?5a<3WkO_HGW5|YW&FJ58qQue7MO%!044wGd2W1jTRm&2LN z3UZ$rHnR+e{gEzky>ohiaM4e~Hq0g_SB{DW!WhD;ajFZ5n;D~<8dS${XRtkgIJt4bvT z7JQ?x*jhSx(M8QhbN&!ac+ER~ZDwnHagK_X1n_O%!z8bvHTab7TW5k^Sv=f9$d z9+LcY$Q1~pTXWlBF$Zz)q}EirPJgXNlNC#Ee2evhE5%8HIk4#8cIQD&*ggz$MqmVPT8rG0wb!-9q_p#{817K11n~i1pnTM76Zh{r$Mm z^V8O@MpMG+jV$HHLa=S-T>OhEl`12+yGh@3R(!`)6pC&DFu|~b@S=q|6+4wu`7K_U}Inr^_P(FE>Vc=On)(}5i1;<3UOA!}aK_E? zI1BL;8D|jGii%hM^R zPhKI-Gz2Y#ST-!Xmu5IscAinzTcP)NWB45V zTOtbXdLp*eVa(SD5NgmWAv)bHLp(?CT4(0_r{T#B+eiX7c|`<4-NV|`n-UXIHx@nUQ(VM}7?A2nW#n7Lj9n1PN}(dnt0=NAK*!7HbdKep zvE=EA?UdnNV?-Uy=Q?ey^fJgqY7@Ucj{f!~jBsNyOBQb_$rmo>m}*t@ArI#ZmfE77#kjUM)KF|TA{+4 z89v_}nbsvHs*x2=9gsddCeYBXWjjFtoAzujaq*_Hm-Y2SA08QFb2^ zTpARJzlwR?n)fBoS#Xp{5Zwl0Q#!w(Jta96S+kE+-Kk$t3Bg-XdGMf-C|kAarmX;A z*cJa|5Kqw$wO`0J$@rDg)Df@lIJct_OnFj6TAhLc!z9y!T3(Q8S+^3qPe?Mr4**0OFdiL zrY9!1ey?+ME9FLZR3wONM7*R+WmiEEEW6ZXum&@-(WZ{gKc@@gkawyv0odtoX<6Q0 zsikn}`*^kOFOE{~wavM}YqkBdOZMV|Rj<@h>-0|%LZOrp;}Wa=Q{7fH)cNOjIA4O8 zcv<)fcBac@_}~d}ur6OINX2^@Ipe>h$BR(|RnjL1eLT_5+F&+hAmR6ndyb zCwR|YP~Bj>0;6HOiY}@|sWg?Oz-&2lP5W!CdCOA4CKx~4S-eF*JnfK-oK|+EEA^`1 zs{xLhrf)U@L^{!G9yO1T4*I~%@tiB*vlEMaju5zE2QAF-X9kY(UD+UsYZ z3E}GR*>0UooN{ivzC@7|a>iO+Rro)0Qe5pl_fJ&21U=bhPKKHPJh6>rd|lU<070ni z-yiLx!535GaB^XN} za*KwFw!{p_O2Q0frwJV7uv~vQc#{80)y_$8_t|SV{JlvY;uMYBYW(4#XCM4SuCj}s zH|v+ftHw4Ax-@t}lIb~1hMJ4C?&SIrs-j*mg3{ZP%7jZOpo$?>y;LSoCOs%k&(E?e zyL?5PWM=7~Xo-?i%yMS|F_|xgI0HG{JDO(BtsgMc>pP!4=j)tk|9;q2%9V0B6I_#( zqwy`F3$WN`AiCch()plLyN(FlGl`zJ0A@q}fXLE=!ouzR z*Ey5EY_3nSp9dDWmZU$~C>$kBz7&elD6dchu#(m6Fzr--9~Wn^U?nCiR2c~4c?f-h zT1}K>i6YbRS`^MzZ77%g0UHad7nvjc!;8}HpnW{@<1XdbQ}rk*4E9e}{eGi|bo<)C zU_X690pMj(h0I(q75!E^>=sws4e(L-^~2C;$-(p}a62I3#~7EbIE%XHi7Z)1U(eQm z;^b(`-4QBeu+N?FiGq=ZP?BmN{PONG(~z0KN{y`8=f@Zb*>~ufs{5PuPYp$)){PQ% z3_wAAzLwn$0ag@Kw*SOZNz~T(-+E)gZcwXAhhkg}i|EU{kN~7rEh@Fd9Pn|XnPW|J z+-@;m?VDfB9hGyLJ$&C5-~9;3NahYHJrn4o8HYoDkf#{i{`P&D7Iqqgewc84^}RA` z39fA7B_wiUFZ=B%0Hi3wQo4Z6eVzAIFGH6D6bT3G! zK4#mZf%hQ5@FXiB6jJ~HzZ2XYSU2^=UHHi4SIEMoCNl@ z+C;q&!sQZ09HNhzWf%s-;^@SDWTk)vG!1-APW`@O&KaP_^@f`@z=uftuPtKj24_L( zBgG<158qd>#|B8>58kEmlK~S?vufx5wu_4BioS_AZr3SPH+K{O8@#=@5u)_= zJf*`^n(<}{ndl*cyb2R3^Fj4;Tyf#J`h{7qcN?QT<59Yyu-PMhUo44q&!i}%8DanY z-Qz0yxR$yJRVJ|cQpo2c>J^yTOw+H?utK3tG4W}7gm-P0X#M*`|zZiH6v74%n3th zalJBWszfJ>;iubc6lfPq=T`p+~+~2$&ci zu_;-bK+su_enM|;jk!lcJe%!K7vX}ZelTVbu9dabJ+$yXV9pQuKlMMTUUbd{LcRmL z^Sc85Bmj#l_hjCTy$ZI%5}Pq-MZJcwr2idBE7cGGZj;?sqiREIpW-7TMp*IJmPEw+ z!H2Tx)J3H#Q(r;u7;f-AtK;Y28Fme{aZ9 zqx#@R^VaU(mE^<_Kbu%CR{ZCeBk6{zFgtZ%FIRY@zUR2)=-OVh8E>wiZE}s0exn{q z`x)uU;pZEyWfwWSSgE#3wZS7<2HX z8@7@!uJ{+U-LCT)*J`62J*^8uEsUtWY!>uUx;wBoteEodbBH2&3ye%fs_A@#z zEIc|*<+{$}zO}sCh{#-6a)QR&*EDvDlZUew!ePLQwm;>iHm}{p#3fBxeZ#=d{&UkgL!$R006##Z<+?H>_K&cY@S|kKD?g***J8z_ ziC?+4C8{)`6O?&6-4S!=G1YR#sP91I;Vq_7a7KfPdQ*rDz(4Y@}ZqS!uL+N!uUOYqai0jnjEe!3aaa zMQ}Pr*);(t^-AbnGXcNkN6$G98HgtJ>g{H5Q#r+_vOLJR&+c(K6sZX1%A=C)P~V5S zc;yhOJl}g)w(jTdPG`%{QYlwUyGGRmFN$Bc?+H0V& z+U@*CpeSyw9=3=Ay%wzX)-AiDifnf@(>&}-C5t=teTubyvSk0(P)RuPGEK)?_tV~c z^I_!^G6`M7a=0r-1*Do&WHN%BhepUwEHzy1cZpqQ=gHtJye}PW0In~3w)U|S1mxbv zxUWqo2Kg(oFnQ{-7Yb|xnKXS#;v!T6xy&l=h0NOPC!6VpjL{jw?6_&K*8{<*bh?zFDZ)pYGW z7$4Th8k73SVh$}QHetuwM;iyWzVr9gs!Q!vMxG-e>Q$Qm0Cq;F^)HieFxNK@BMpBlxwG|>U_Czg*08B8rm-;< zH1tY21p2?S!UTw_5kL=)UwBq{oGdn)}3B`Q_P&Xi%N3r^ERb?PSGUD`EU0Y@f0u1dv9vawmVY&?IJ9D)+J>05301^fGgojeWG;mO zrKX66MqlTQfys+81aiKbQ}Un!sf1W)45;ImDMv5DnPD`;2yf~h$N47u@IdAPVS zP?dO8V}P0Z(6tW${;&x9>`m!&8_^OF!i01jKpCOKC8h{(TjGe#_v*Y%UI1}*kkW9g zRx}@yz*(< zokHORHH+o*2VpSLjg_bb_VVSLU=fYh(-yP2LyC^m_4-15_os4EBgaLTCWD&RrmxTO zc!wa%;-nJZnJ|$i1mq*VoX6iv&GnPsN)c&CFSa>*sgnllXd@@PO}BXa6wQ)WY_b!D zMBW9gv8!xCJBLNyPu_1aWcw^AfUlw4j_y>-0}5fepN?1-H^Ro;8n=?XeOE8)_+vFUjg%TcO25eL zlwy*|7PiaJH>8Y-ANeqcT__xuie~~Web*gDyaHe zBjgY56mzF_QhHmx%e8AQ@U8h+$FoX*Np}Jja&S>VXyaH3hsy33d0pGeHP1*3&Vuh1t?Sp zIp#cUi2PkIOW9NZ!1QyZsmer31}L^zJxWC+aso0ED@YtRNP@^Hjhn>~YBS@TCVQIN zkD^U%BHUf*^Pd{spo>zdA9<38sRg<#UB4}FMc;)?zFa>Otg zRN4#N!SxgrQ;9ty7edI)bPc@yx_V6UhWPMCd$RZIfX#c>*uU|~psP!j~?L^~}qq0H%>99>Hltv@*Q?KI9rmw!f|c({AfC&Dh7B=;Wb zjoGE~eyMafv1T>UFT2lKjS986I}8VJohRi~4O4$@NW3c#REyW$L5u}>??_c_-L=L{ z9T*ozmu)Q!pd1)`l-@v}ie z?K*_WQlPl>x&S(4ER88iqq({eqWgSPMx3%d6sq}TiXkfTY$ZSR8=4k+YAku7j^q2% zRI{SdzmBcv?C)a?<&hudi(u{G(c|4H+k?gV(R5tjZ^Qnu6jJJxE3DM2^@414mS=}N z`GC{Z#NPq>8`PeGxqt|}zTnapaMc=TzdHC3UH9Q3hPzEr#Mia& zJsi@8({JbK$x3~8L^Xc=cZNFp_Jow7B=KIA>YYoE4v~jl%Wk#9H`AHrVQlpYueENpw*UTXc5|=`0__!#7eYj@(DVLy_hwk<40|#E__D(JZAFCZK ze6Hc3XSQM3;neS6rLwC*Yho&hWou=?R+uK+ae;Za_ab;e*g0%Xv%umonO);FK}nui z+w#_A!N^nZ)rBoVMvb9;^+aH~r|S1%u^4geyy1lNZ~$J~y1cXN^~P!m-Y=l@De&Y> z_h`TgfUV(c4-?!yA(Rzmwno8_L6!adGPbS$T%-RE1nX24>l*?6 zbXW6VVsy565hU_D6T1+-;?It&pzQKvQ~4UV9DrCdZ;CGmKC$(2+riTd$a7}2wSpsx z%q5Ix)?eo~BC=;$e~&6Z#i^P#Bx>Ujmncm7Yw8*xOmNATB2t)?D3>Ucs8u9RqN3O* zd+^|wa}xYxORr6SINVsi;k)PUUNLj$d|Gdg%l2^`e}_hZwdMZ0(C57&r5?2ia$Tqe zHJ!KopevX!0EH^ysB`4ldlo|RT~;^JrTR3Dr3r`7;Q(eFj6pl0^FH@zzCCAgy=L|~ zJ_b`RfuTqBvV zVr}TFPS_!XYrik zl!|hUdaNg9(^NDp;dOuOCu?&4Ug&us9B#rN`X=_xCQ&20`?Y0bDU%usUG4gTUMG$7 z_OF|e z4t4^l6N;#0>9%{|v1i&;HPPS*AVZSG@5hOLXDEO24v|}YzA%qty8ExKkjIKh3Ms)T zjDoZZe)1Qv)gY@RJ*SXm-~;N zMEL~u`-)%|&q~gR&+actwut{MyT~HX)=+Z5`Ed_eJjneToI~LWjH5sml&lABkD@j) zDb@o${3H_R6*%U^mWxp1uEjjtL*4TY(t^0V0h9PPmJ3^xh)?*w`>8&1D{J0$+)|#i z>mD?@0R8DRhsXt>yA z+(Gy*ET*(MaS&B-J^QplfhJ3}=36JNZD2|e?^Xc0 z`(X6a_fq*G+hdH+xTK*2=Eg)s5%!Xlh}?I1h&@h<8OVtD^pTaFCPre=JHS@6!#JOP zJ|DREn%+cJ<144>tQ@{E+0Oubcvv&t#7vkAD*8}Uf;_jJ0YB_@RnO6tyeB8+8j9e< zET_}uRJ<%e4R#SKo;y zhvZ^wVJYZ~>fiu#jRfD-(?=i01@Udif?RkWv7RR8TprwiyWb}ge@IvBbt`O&N;p}o ztOJubUZpHMnHCPB`+&56sog_!qPUtkUjPj$P77y8;tdM$*`$u|R_dA6UVa+=LD-va zf-L@X=Wv%)(ze%z@Ya)vwjw^SlN6CD4WXoxIu!X1$RqblXvYSM49phU9sdVmO~X5 z+(D=pDWliZJgZjyAD~C5ck`OO{I2&K7F1nWs$zz{b~m3UZ;tq)XSZ!K+Bx|z?`G>B zRd3$q9PxQEkEP-VZVZcyOxJfh?kObakA0j0t(QwQ zDL&r5fvBY@hKeZnR3*|JQ^q_^$e=VZ6NKw|Sb!s&RM}b*fXp@`{o}fu6KlFeDYD_V z%HtG`{69bu)r6Qp5WDGjao<3u0*S|}@LBfv6*^f8XR7%$;rjidF|mJ)r?vsPA8h$Q z1b$E`UiY(@-N7by+6!KTKb%S2aHTbq7#oB&|pc(nFTy>Fr;P2H|HtTQV}R3*Bwtn8`$!6f6uYt zPh*p$eb{Xsv`2af`=k{-14tKCSo~>JecA@YA^tKnU|j;^t8JHQJ>W>oY-qhbM02rj zm!|;VSh2y=bXmUxSL168_NeGT8xB7n-dLW0)`@@qheRv#73(d!pIdo~8enwzGr6Zk zPRp5B^m2Qf&>tm4*ZH&hgs(k(yJOS}YJcXUPK6(mUiF|_Mlgt}G3c|Z%*rSVk0d*s;(a9EH z7}<26-9LfRerxB-1^jk-srBr<-BocxQipEvShsSc+ih&#N`_3Zz%zul6ZN! zG;HatAGuy1r>1wce#wh=S|S-_{KHHADpr^~$-K2I#SdR6!l+=synK3Na+A*5XMNXr zMl)AKJHt4GxaRzjB+u;|CAu-o{NLLMazf`i9lWC>y3XFUdPtj?Omk9?U8yNbtWG&PopW`$Dr)gn-f==8u_dzOhd+X|^UXS7pWe%S4;Y00=Q0tsa`N9q8$tKqzG~KLj+1buM=8pQ-ER=;UcP{e98+pzB zvo4SQm4z^f`!(uP2|ACh@m2jOqIs_NhP;sIlmCgD!<=OEp$H{e@$ww``i)9c`n)%z zW&x)}IDa_2>u224Ma8QKAyfP4DOK>HB78J@^VK zwIVZwj{e4|#M~xq$+(DV6Ue0Q3?{1)N*&d8a1&qh70{5#R&%{69{K!@InPSEebIOH zvuV3)up_uRSSVk zTIHT*%F(Dm!R~BnOs?gmXi4j&zm*=|NkQG*gWLxnQ6$18bI!S|UQ}6T@EM=mz*PCj z9z#{mX~ZvOl3a5YyDrgT3BqW;@;tvuI(O%~fH!AiT3BDzy|vs-05sb7_F5?aG%+~s zMc@nHHXO-8mB2mYu@k$6C>QG;AI@A81j1LRDb{Vf{;NW>ApcZDfY=^eFmjI8IW1so zYNAQY3wv_FF%NKo)wvSK*Q4 z3N#$gl{o4=u5lmuEf>M|73X*IZbxlPPUSb2i6Y&EUTi~2N+Z*!G~kXwtR?nMeK#C` zxbU22&IIcs`md+wxf(Hb@9RabKtHzILrcofnwIRf%XSEkHX|kXe7IMAcBEbfBQGt_ z)y3J{Of=?~-XEzd zMx^r}O;uqGuc0t@AhQkB&Iy{C)JTG9ZzDo*JHeC}o4Sx(m_^sxwwoiI$m{u=uhjJ# z12iYwVX?KjaNL|li}q4k-zQ}}d+id;ryxl3nDvoE%%0fhsNIZfQ=hJslaF&cUL>J6 zE1m|+i&M0Mbs?10*-Lm!O{aQXO)e^P-0t+*g0R`s$wC11%opU`D`K&n&+n|5L~ES!jBneHPMlUis~tB7o-0_IcWog=&G^$JQcD zg)1G`C{%A5{5B_q_-iLWEfx}2XnXOfS~^;9^>APsLLWB!YhJ(dklcEGTY~$754ubD zI^6D1w553Ihtt}%c3$yjp=s_JE^%?RtqiK??=R%M5${)=&w>0YDMUn%QcoCc_zEWY z7V+**^KeQEh`3=_u~R1bHiybxj^#<58Gc?`8Y_U=iWQeLHe2{K&e#)vlKGrBJF**L zn>bTna!CM$K2g^4QHjFeXsxgzye(GvQN|#6K0heior5WFPMmLQ&`q-kEVf&fD0-m| zD=Ip#p7O)yjTjVGdiUE$sLS!&bK4g|`{SMO>>2@u3*fn&*7l@N(@94Dl*M*{DXQ7RBQ&h`@Jtjr?gM(II@X|y%E|@ZTwATa(wbPXh`ek0X~q3A!%wO} za`4BP7Z4Xy8Fr^ad|fBYVeieqOTu0Of8dMlIP0beDzF?o+_ejf&b4*wW2fL=q@G}2 zs#OMUs$rmEj2rqdPQV@Be${zCmvSB(8?i3CU_FlAl}&5ja%PPf2-o2?`?%hu-OHiL zwj_MttDq%x;hEA5HN*1Yjn^a0SsDw&hO5Qg zQqH+KV=mr{&^{_hYa? zJdVHfr05oSzXaKGLk!jdyMw_}sL0+w;)8-KLM_|9CgnFL$~5sC!(^NpHs!p*Z=*7} zp>s(+kzaHJ2OV@6Ee@8NI-I(&5>jk1cmxZ5Tww!cD{KA^{^kQH7yGZ2w>Hk7a|E2{1sJw1=2OT~O$o!qFX-D!sqM-n=(bcK>35X;nc>u)u z_e{t945EIEUq}4>a>}SEB=>jbR*rw;&xhhGciy-^+^L9Iy5#;Q-B$a2cUX$^M^nc{ zUxvs}T3?Z9k{`b*R#gP@K{r+YoHgvYCNe%kVlGDdyHRtrupo^N4@vQyG+85-0UdF6o%HSDT%jwu!s^eLt zRk%=+prQ0^HqIjS@P+2#ndBos7;FMNU64z(nC8*SQhgljuW(m3uZl>2PhgRqr@aW# ziQldm#xQ`>L@QfZoQkQYejlbqc)p^3tLE6Y>_lAhviMfCqJ1@$quOAHyopWqnrcuy4gzN?nI80La0 zd439Q=T3uj61$t(TVQmoDwf?M;fsSK(N)ebRk`hXSq1e7v*oM9poF(Pv7 zPLWI3X9_5yzUqb50|Twrh@6UdiDphKJq7mNcC z9sB+V$gz3}ogX=!shhqY^ZDdv1d~ZN;ub9>0tf%*D}xsEXBKSuz}EcjH^^x+=4ub=HMV<123u@U9$*@|kqIM)dp}I~7*@_rsjj-e*(KlH z!zR%4=?dI{Z^WkX4(_~BoyUZvABcItdSA)yywAV?oD?;g;!t1nSCl&JlUId?xgd_G zD^K%~`r+Sw%57?KRFapB+YpXN!G;G_`{E;tJDCZ&l!i3>F(%OEsCmJu$&`JnblZ$N zKA~Thw+;gsYp8uKx#vv^6Q=1A=2VpI=w9SFJ-K+kE&sx=woUd7OdH5P6r3-ne_?B{ z<(zDN*G%?LjG*B5U8ldx0pK`hLe9gRI!zV5h?>G^Zh%(i?rUGy5v7SXtrjP*zQz?N zR&XV?Wiy7(#dN_Ix&BVBZ5?cqof_A?HqYq32Lrwv`-9AUU3=x1h{_If5pK^_WT;;I zMt{}X3Fh9ZLTBl)ORa`JEVe6$s18vs{mDJObEB}DKRpej6l@|Mq33V!ts<9_y1p%r zX`_Dwv3+6m5Vs{|UawQDMcGNxZ-0g@jn?ozMB{9(C&-e#tG1RAZLeK#sc|u2@v06`WXu&O~gFVMN z9axu%W=`CrmA`>5!0mTy6`%+gX&iHUk^V*SFLu&o$^ET4V|h9A*)W7}o{bN)C=@!4a=sti)no2fTTGO| zWRK4NQiMnzZq14Jp8w{{xZp)=tH}h16!!%?hT7=v$D}}~h;of`erkt}(KL5dt>X^A zss@d`cEZnN;JEKtD@9u`8-hKL{rcJ@RJORWCXLiFiUsmi21N2x8m}>We)$hzI2^W4 zJg^QM#F(0y@mw-?so8Ou;1Me%Wa;jAQCWU&)#!WXZMXj^X~GMGD<-1Y0u zVpckJi|-3^z8n;^xCYx42U(aY#0fnERkW|$b_V!$yU#Sw^Frs3`r>rj!D{a&l-%hV zm_0;eKI=6f3*#ndPqaTWMG|M@j+@o`2|ob7K{&r{*xhM8y_xwSSE{7TMl2SM8jN`m zE~77G3n$=;9AWndvREzgtXn#46fBKba?t1@eV% zB5{Xoy~&!r&giEc3-}TUW#?TR5(PH25>FQjdYHiFgWH#<+8sVB%W_RjhS1sh-5o+P zlC)rsDMA(zT?gU(;qs~|drv1nX8u^>)#e(@z6AwRwSo;@N)DPZYBlyRdn`uBEGW(i z-R1d^UpGiQyLE#%Ri9KDZ2snXq0T8XTEiTpU4LG9uSX)d0z=U!9+iJ@z9u{tt1lr^ z$Ip89$zU(~m-Z0O2#-DO>FZqAm!E7FCQqa(PG~R#V+_h{OzD4~@{wT1|BV-1vH%h8 zuzQg5SUDu5bWjj`X6v6b%mQ8T(4^nrYio&hK>R>5!XI%Gj0#8aJYST<4n4hLcq@J# zx7pbrdH<$TOtj>D_+lAq2@cilb0JT)-Ae*#uhk$?j(aLtf8-75sC6mm74WzpSiYh< zY0$Ew(D23HxcFAdxa-75#k}>*tpYm_VE^Mc%zgDM;)jh75(5`38{pdPJodiNb+-n% zUemL8y*{#2wRVd0!Dy%D?-Vgxc69L^LzmMY>2oo$ITsi(-q9m8muegR{!XM9QF+Wk zQ9fx-ppcyCDR^;U=Te-KLQZ>DbBV=c^GHdhjg^pmryf z=KOZY)`RCuPJp4nNXSSEIkg{{fp`p^XvIl}ND=Qcc&z9wGWsz3Z|&2tYoGQLg`!8O zQ50;Zw#3q!B*3;aQaUlc8Z7{eBt)9Qq9I-+VO#Ub_4Y_ zlc?#%V(EGBob!_|$6g+uVc%d>P=4yP-@*ltAo5&o4WY7skh`T88t3gISIWk5 zwc}l#lSg|CJ{wkC*~(D-PM$hKt)2k0rO@JZE!a0jKW}CD!G# zeRJHab#1n?L1Fm>iSE0p-a$S6$#ZZQ=ikCK+<^o#-^yQ^AtO=xnFVDddrAb6V#rWm~HB=cKovVvb9@x zFX}|Jig)5@L!&fYC87>qOe}05e5o}t`GfP{d4S#gd(qf8wC( zbZ3vrZh+DIGI%az0SiCZPH6_Y(YknhRz$bOtkwdulcmY`k{9QYS=Tg^jbss{5NanRc2#mkH~cKN#<%3709vhRn}+9 zqN@k4Ul!6f@+1)2{{TL!>t5oE6$t|!9?n8KKE;-H>+sYfW-?q(hrG)rAaRnh|7WEY zt;qh}sah|ZXINwQAwc)o0s@#Q;(V_!^o!v!?I}6>J1X19a?g%o8qB{x1*ItBFNl9Q zsIYrGyx-#7&w8vc3apTKyepz*CKcNH@u8c1psQzCiiN{ee3)kU{MToS&g8gA^4~t* zFJ@6+OcF{C+@maRj`i}ulwv5lkuLvIxKOiPc|dMRLQ2WwTzyt5Anxdcp*o&a5?Qar zuofI%3|N!sP9fJj{q-@EXd%U4@_hKM1oNz`;CFl%%J7#+O&vE55_-bX#An0+JVZbb zd}bU!^;5zFd@SO$`DB%eD63ORcv#GgYqT7rImtmpJ{xl>cpi=^N0!Ij1@A$FlHO zgSU=`%gN;q++#jPjJLo-X8QBf#zE|%%fFfB6=Na^$I28$+wI+^* zRbzH^O%r_*=w}+G^`2=xg{y7jJ;pB}{cThSQZF!|k&Tnj(V!~POe$yu4DNqeJyo+0R3emnUyXXc}DiLf^o6XZ06D8w`r zwAT|SN3Rr)d)hepnPfGY%9F3WDb?jJF0)H!qSc!KEG*DM`@12C zV?4M^TtodI687G@>}*aV9a}7 z{u+&$W5!LsvkbtClei$Z{6Z-n>oHqF=j7e-`@AK}IeTILb8*Ue$?HpG@7-vRR3P`e zHp_%O#UUDw{{UP_0?X|cVbV}77Rpzru=dzV)uwp@F~9teCv95!lD~gr3QyUxs0g7% zB6JTmD1xBt8`+c-Qsr6Lq?YtX@FcM@_G7Lp6!h zDnY0lZYM9>fy|vs-9x^g_X*MW+LA5d>)ZR{e%Ssp`6$p)Hi{&b>D{E(vV+Qo^H~TL zA4M|W61ofVu^8S++3+vOJ(C$}G&Hs~6IVWSPbs&v0R9HD-vdTjYgXjhpvuE87lC}j zjNA*zpG)L(C+GZ@S7ZnQXj?sIMsDB%e+*0|S_Pz)52Z`AxyR`uO`72gyb6NGa-zl{3ENxx}^40d_ zjpwDhI1%R`TWtxJgd2Y^y;RPzLx~^uvovYA0rr7wuG8y3aID`-m=Yy)>3nKAwQW>z z^r^>q!`;~oAIgmLv#S&L5`5Thr- zph8PbA&S5us4|4a*OZ2nnBV}y6s^2v6Z-~B{i{WzVaNn=yE7dc6}fkdiL6%kQ|TtE z?ZC3!VyKeLol~w!@rCwg$6k0I74E7nzn?nZ>8|0u4UmM+_g@oC6Lv2R;yhiohnm<#ZN905o$|V39!WKUh z8qo7mRt76Y?Mx4U)AB69A&>b?PYml(rdL?ELK~%eAHGK}Xc(+`^t8#Hx?tQ!c`K!c ze$Oga3Y=ch|B0%d3Ka+>Fp-XnxVCx%Oub}wS*>>tQYW0HE9(s%2wlwMdJGK_K+*PY zUQ{v!v^MlTVvf;qAxs*`hdoumVvvK-sg0dwB6H3YDL<}vGx&n?@pyQyX{(cYX4Evw zaksG~CqeThf1f=*AfbYd_0*56NWqH;8#ux^xYh5PFYso&31rGLor zV#-I$PK(b*D|{o^I9JRmj_~z79rG)X=iCd9wsv^u?>p0LlP#}+o0% zHJEo)=)cw4d3LROs5?;|lAlrrGfs6c-;@|nmKf_X;_K3YoLi*$M9nTOCibXA$N25M z3H~AIOa>P4+z-67=Yk}b(pH(TpqqTm?Pz9|2Ti{GM1@~NWPp^5j!fNoXN>&O6AJM* zwH?h8k_H?yZir2#)yZknpA6}fG+#y>+gb@=*TF_z=ShzxIo3u;G+HGeMdGV&Yt$S> zbw7n{f6}NRor_(@OC9>oz#5Lkx&dmuc&rLQ%AUO4BS}`jdr!#ID6RJnkJV~G@`*wV z02D?xQXzmu*4D?B-zAX##Q53xzq<*wgQEaWUSk^CbmFJ$3T^d0J!+uiKg-;aOhz5P z784RS!s$gM#Vo=*+tFe4k^KiD#@+v~n=aI34i2z$WU?)(TvF+H5Y0yTyvD-W-D@o9 zl0b9Y&vvC(cZp2D?Yh{GB|h#BWpD?AQqD6qL#1LtZ^`=fn3sgpyT!zC7>tS22PF!F z?%gx%D#Fau8abby2yzWeta9~Gun@(?QJ+-Vjy}890Ja28yPb_oP1lT@KB?C(Wc}>ELXT`MVl$>$vJ>Es?wN4DsC%KV z3lgM87{p%~o+p^&`U^{A)8)Mo`#la|5x+B+Y$H@1QkytmC%*>Q+p>e2FN!61EY@b;vJZWz-w_G86B``m*qS0sEq^BIev-cK=Zn+&TV20C&fVR= zzxqp+I6h04%YJ*lA+{Bwbat`17zo zFUq`c<9O3d76SPD^8b&fuZ(J|>$=6=-HQ|{4#Bl}OOaCC-K}VFcXxM+yIXO0C>q?M zxH~-e^!>)o$Vf)=bDy=B&N&zUIGFaR(^)UQM)jyI8Mw|KY$~*^!M|~(uvq&!ydwCD z%}%70It!P5)TE8h?CJwE6xuX7BO|qLR0pRWcIM}lEu3DsCQ!}nkHR1;u%=I&qa3$c z4v1XMiv+=#HHPw4;koOX7+=>&Lz870V?dYS1l?KdDa9y zcXi%qiNYk&y1-^E{(n%eru>a*y14Ar*!U-NhQyoLVzJhK@o+2SWE`zRACqT)qw&et zf1iPB7W={C{Dq{1W64r@Z)@IbE^Eb+iiEYXgHx%L(a6ynYTMZ|(DI(&g&FVG6hYip ztM;RnUx{N!1?w-_=`!30T(;J==U}IM{)@xz4AfK&eK0Wpj$E*e1B{KuNy`KP0%fE~ zf2n(jlh#qrmW5w+m;9L|FP#9aU#Bv%XvU7)>U3g+jdC?dQs45Ny3!iR0;&Ltb2Byb z_SYb*n$XU4z6K<4eMzdRXI?*`SU2hU;P6U)CQpNQ&q)*kifngcXWl#IxQH1Ud@AEN zB0u!`07nx@k7}%s?=}iaA1TBo{~ZL6ZZdl1J_;%-J}~OVg=id~$rVGxKn+}QtIk7| z1}i_do%ac@z#YA6!fRGq4!odNdXxHn{Oa=CMJ4w7B&_7{8E%^9SN|&AlL$9ztaR1 z1M83i$GA=!OxguGoo}8Lz{O~&ce$%Lt`X1 zpBQIUhLWb{!gp5*QoHd&QM{|@XuSR$hb%Q{VC7PMrk2KbaGKymw6eTbS`_bw*fA7PWt?r31Tk+0A`+x{Q_adidl|zqP7?{6DsET*x~@$*^uAe}h#lJxzvp_~}$Q zja)SPjYcrymSqag_;Rfwzb?4YrTdC}-B^;|@#Xjwto&gmMU&pkDBJIi_ZR`=ytp9U9;c>rVIPJ;IT`>f(x2PO`>LIi;JrxOLL z-0#J<4iFN>bVpor;3vzDD72;Nvk6Pg@;{5==gq#{b2bgLEqm8i0<_bY3W4YCKU@5F z!q5g+T*4C_dgus$l+Jj7*86ias+1NiYdNaY&vITFE8(ZC^);)6XS|g4R#ddkb5Lt< zV<`XRF4#=g$WPn+XviY1E>HV~y6S&58z5trPn;y>y6wOXav5wz2h1PZ^XC*=VDL!t z9LNZtks`9`#|$Cl?ZvVZ&4b>QBl8p2|UT^gIpUpot$$;$@MrnG7Lx}2QB5`9dXQ;iR&Na&&ZLS!*t`~%YL z+Lnjv7i=`b3kV3MvE)9fa-K7pyYLthNN25a9#=7j)+<;Jb{4UqB5+pw29&Jk3a|a^ z#el0{=eje&1#_xEPtXxnZfuFN5kT}Ds8a%=V@|bFcJA(Tb9|o}#9Q0brLfOXpXU2-@Iw{d-48D5ChEFQYf9VM%XxSU7JkhX)H%YDU!-0Z;-~s< z@+V!k^D}!4(*e1GlbnUMgddKQy{w^JMaQEoFTW*VxYjA>)+uMoZEUIqE%>8OnwI6j zmv+QnTeViT^-k3;kQ^i}=8m`(D;0l1FWm+^pj^=POA%u%g5_=Hs}@8Y{I;)b#)>ps zpFM->9#hs=q_)E6&mRD#58y`e8+2K$ltDP^6V32>7z`>up~QH> z@DWX}4Tq#=F;wi|KX$-n$!ID|A`0Y{0t?i6nmnRPRth)3E42#6JaLE4m^K{UhEKAP zPlA{iOhbUc|DojUO?*IReNXeu&u|D&*yNBz=s|NhKI*sfNUYwKl1r6}Gg5B>@94O= zDG2nt7rqtzf)$4Ud>JYi)L4S(#|LGCzaOw57Z|j#%9c?I#tpB0j`jhB?x(SR%zN7q zU=nkM?|xzR^QEjV*NDC4rQ(t}7thGiCk~`At`9VLIA}m5R20PU>zSDNHAk_c_-|vz z3R3+a7f)})KRn=}OA}1vG4AXU%FK@MZpeGuhOGwl9nw8j(Cso6S?~&rDTQo%?N;S! zR{jU&hj@f|1dUO95mFDW1$af^joJd9s>dO!k5dtFy?u^sEPM#yxgoUi2mI)#YQV;bbX7>ij7us^b<& zy2#DOx%1FFYtBkpz<<5PvabBsO@niCdV|f`zzwHmN26$cnL;*|9G@*ZRaMNS1pg!T zlO6RzZlfK6-FbLo5IC`R;Potn{^p0{kl^{w1~d{Kb=J0x^-k3GC?rdU%X60PmFA;h zTMJd#UZxOn`js>vStu}3pdm1mT@u|VrmJmjVLfrcv+N}g$(ilm%UYDN%)2LjlXd!> z$cmkjFoE8=VF=4NR8-KPktaZXJaC_N8eoTNL`DVkpa`c3<07@UjuAhH%7V)t98lrc z?@ZJWAq0f{63gCkZ%&-fGtHvU((sI_Wg( z%$YNpv{T_6@c&92QXH&F)kW! zE9=(~3$E3Dao@LE%u(f|Wz-B34Akjx21MUq6T&490#K3JH0UyJpNdyv?U+#8N7orb z^#&e){);J$GD0QF3GHPEU|ne0Fapi8#8;-ng~LI*SL0dB^og;D!Uh30 zFuhyyg)~*Jxg@n<)rdmr^xJ2S4@W_!QDE)uouGkjGjjqd!A>aESZA}shRq4r$(1sY zI?8vwQ%YT4iWQ0nWp})z=C4#&IORXAzw|u^Hvi?vAj!{lZ$qQ`xDk^=%?=iG*(XW1 zOo?I>E|FG<3P5kgaPse2M^Y^(ajsQ%Mp*En2h$nygqJ`sn`J_oiGx%>GoQ{Az+!7# zxMgv(0I>Q;mS4~YM?{E63XvAAry|CkpXM#IU_QU_KQa2v4{fKz>T_WtU434%2h*XV zGUHhw=$X*S*MuZ;ykd|m_=-^s*a_?Djdppqv3j=Ikv%xA|LsUHPX{QCfFmoen6)fl z0={$!G61*MG(BpWa99>>j~1UxHr9e2r)2^HmGi%>h$GgcHC*9efHBOG>SXeZ!p1wI zv-y($s9IQL@OZv&s3Ao@p!FNmyOo$`-tfhI0q^39Lba;(uM?xm{PuSqP>WLRe`frp zLvq;4S8Jup=s2T0n=agNRLW~!dC)muwsX1#3%j_?*jeM5{+)YB?)IpVjgQ$){TZGIP%%5VY9fNMsnR?FwHE zE#f@-ISkwmM+Ctv?e&W4cAgHlck$zOuO)wPwSIOk77ApkNx` z60RBqHco9IN39@pD75v;w<6FBVj(F1J)$)g1i zRvB(Prj#N>Gm|4MZ#j{(l8DBWYtubBFu^?L zp2Tps+uaE!!A5;*woYgk@-tnru0AD|9X7u%E(=WBE6!$r?zsjky<2_ft zKhgEdNvXx@aAfhZ_Z~XW92XT97Jy>cGflEgho)Pxd3Th5H9H7+-z3;f*-ik?`w7%8 zq?S%@uHy9Y8^4=s%l~>}?6M`~X1f3JqetLMY@XBRc-3^d)4zC=3cN*1XeR}qz(5Uj zQr-fcaNwj9@-2PR5j9;WGyp)fSLdJzy?(FK%L<<#imWpWiNu7Hx1yRp1ILst{N;sH zDMGjQ!j~qgrJ9^FLo1m``1V_PzHc%-*~~P zOLXEvVR*kfD=r|V^>BBV*~Ht4{Ux1GDYo7mY3uyc+<#EtU8CM3b@;lIbj#`}4#Z_~ z`<7#2djdolY{j0isXOC2S@7F7J0AL|Q}*N2BTLR z^KEHR|G2}O4IsH*XaW^4%i3E`TaD_dlU_&LoiJhfUfWSkuM?_V!~sD@m9t)jPT$?A zV%VhP3^kFl+)R-Q8P0^-R=bvI6?p@3LQ^;eN+-b_+`PeW)1VT*;|DXhM=D&bQGZmq z+#M&aA+~)&BuSI0qpS!{(I=<@-va-S#^kfaO&F(xq60QcSxWfu6V|=1K9F{-!_Gw=Kj(D@~D+rHvuA$CfDBSYZh4dYzybyTA9<-W5} zh^gcC0)-F5&7^Nncgy?(x$-MKX`B7w>5a}3?ce!>HoH5W7DsV5m;ax_Pilt)NhoNm zam1}gH5dN4YQUtVUzI33y|zBna;NFxH(m@4l>pOQeEOAI)&?^b#_6~(w)&u%wV_cA z`L_Wsg)CXP;b-$ka|M*;j?@RKtZZyiK1$aJ+!VTp?7`nK*!=8iM2-ym$%+F`>S+U> z!x*+(xJFLJ3fLrWHLeCeG)7Sqt~&sn2TYU&uvCB{NBGjD z)2L-p`47qG!Pq$wH)y8A^*}m_jZ^wpcsGkJi={vqX+V7=mAB&qy zeTau!{wQY2GILTkgkjy(8GLxkc8k_^fj)c$3udz%6`Tf|r9ing2c`x3Feh&Gz8sT| zvpUx0`vr6CO(Rtx3Z{QeESii1PMwrGCb`gvF7->jbXFP8s*egOvzCd#Q%VaRNK<=} zXcr=MA~Y~x8F{3pn!O1;4dU@v`C28Prm<$108!D@H)kzB=2Dz$??0qkYo)ivJ4AM! zhcf=zh>)qTgd#?MKi%c1EsV0+PHz@Zm14Xl_o+y=)o%p>MSRhx2y2I)xZ7*JEO_oc z$4pepzFx3^6O5C^VwZSDHk&?iV5|Vm!`DJZ;+CJ}w>elYA_Lk1h$oe?@BiAssBXZH zq|m=9nhXpk{?Md$SggO!!|&5wqG!9;XK!b_Q?8Z{Td#GNfLr*lWqb~d+7jltyb`Z3 z*i?%nm$?5X+)Y{+++At?-ReG9-p}CJO*jBCp|aV3M3+4y6pnXFAaal<$XRGmyBeWO zRklp!?J}1jU?>#E+PC1?Z324BE=Z?vcy z+LLOQGcfl@Se9@L8aHKmHTd`QqQk<{C@fqHt}j%FvJq!VTv~fK;t);m8uk?J&U$=8 z3-)?fmaNT?+{D-t8;cUqU6yz*AkWGr$A5gX2xYDeefI%023s{!e$)qBOd@?w+OnzY z+UQg91l{63lw<$}K}V{73een4Ek5I1Kk3N%4@%`+lTEc+46uHkbt7z*&As&-6d2aX{a)!;-fUl5IEJrqDC2QWnxWaATP>nWS7a+o+CdVcTFv zl-$gtL1{Crp7TV^*fW`}ch2WB<0}Q3COSu&{4HzTr7%2Cj@>rMewt4xvYs(_9&@`F z<=tQw+doiDG4Z;&%XqUs52Q<%z*4*O*kiTqiv!_#de&jL;iIbF1{lsy5YG*P!uM^b zH^QKQM--Qf2{h$l?qqUjVXQ|a&=|hU&upa~L{IHRC(p^1YF56Lw#RmbE|b4Lz>iXt zu$c+9{B!aD%nGP0)r$ci>jR9^%MThy5n>yKu=oa79FZ^wK#D$0Azwl+KW)kQ-l33Y zxx;C_?WBz>u=caW6NSZrgCS%7J<~-V<^wZuQ@= z?3^urmAsX=CS9{Pg(O`y+E!WOGX^Z`+)EA=x0rRGdn$s`I+Lwb22hfAj09tocD^J$ z2c<+w>(FzpdEA=m_~z-|rI(m!j_zz8n{fD85Lz8POcMYh;KA}8+bBCZ@ESLMCpVJc z*X{8qas%}lP^;5if@LE3wVXiZAQ4~>FQ41ry%1%ZVM%&FAS}dkxxeAE^fs8{)KQxv zF`>3n&xAIN%F$4nE=(WEoVT!9d55x=aPi`Kr-~H1|6lAc{^x4f|1qd&Cs<`@|7P5c z0<*sU>^W^7qQOd#II-|LtwD!rY)2HeZsXU}y{gB8W1X*w`vrFT9XBHt`yyXtLd1SR z*Bj;Gn8MuiVN3_K5i2OiOBZQ*gW6@YcZnl4c?$~t^BZ3ZIH%qjwLbIdKSm_z$b7vZ znyhHJ*IXyV#EEq^sy4@#;9T>_qCOMnQ>I7ta!Ya?D>lcTBp#3k0{4KSHznDk#VcL_DZjd zY2m{wlO4qvE~84NpbX`AW*Y`10jeUS39F(hHJg0MW>D5#cDSbbsj(ZaxF7y1iU8yV z`K3=J$*X;>Gt%q9alr|2Plp}VFYbq~$>!E29YK&h&N!c2_rs-QV>+;C;g!T- z)F(i@8XFsU*+7})3lVo#f1&y9MuBvAu@6DQh8pK2ijh@ZeuzcEeP##$`}a!p_(2-`DNh?WygO>Wtl{4BAvP8&8+W~oojnroo6)x{W)8B}e2z@P zA?GcuDXPTtJ*60o5w|Ou$qibk#TBX#p-faM62qz|xfw#Qgyq009sQNBmSo91Q)NZp zg8E9N1HWmlt4}@D23@)pl7GX`)xw_-_Fe>(57=={VKBm8gxZ5*JB^Qo+JCqAgE=}9 zfL0hV4O9n4&P=mFhCONQ<|;wi&LiL{sRPje`oq_wJ1`dQc?PH)G6c+r@u$Avic&8@_ATT2;ru4fkJ6>t71%5y~()x!^iPe8oEN?qq2_P#4EUY_Yuanmi zHDfO*j_shfZn#NNn_iS7%mn|DY=+v&PEF2y`)B7hlRmf?!<}-Pc?^(tH6GM+6hY1L z*W+BU2IP@*&eheoPRABGEC2-5dCR{@9kYyMsC~wDFKIbYB^Y=`if8_*49A#@hFMNH zo;ZdUCGtd)zzBlWhZZ_atT_C z2gqC~J`rYS#XhrrW&WH0z{zfve09YFcwtl@-m75K78V+rselHb5A6_dlq3 z<#(lLI{wBe%9WTt_Dy-LBStwZKW00&#<0Xwn8aQ_^jXx5_Hjv%r;Tn<^L)_ zU%*wIUug|CsBHm5o4fWUs;#QWdYrbF-)fz!N6hMG^tkn1VTx}eSMMW3th)!y0J$p5 ztiREYFHaFgcULq{Axd|6x}9062X4nDgM+jsTrLeTr{4}fVxF@BHxL3xS8@-%quhy_ z2ULpL4&|@g-#{dfG-TxLlo}=b7w@#gO^My9e)3a-a4-2tTbvXOfELWKiusk8D>;ao1;{PjtXDo!9t11>bnM#ZdKwV2bac>%)P1+AZVu252LQ+W$I zp(uB?p6sSIfO~J6cm&RrX^FFHJ5Gn?u>8QOIbt)k9Xl<}2dwoFx=o0(Y1%ovJIF_r zn?=~Bj@Y#}h3%S8!reLByC&<#Aiq^G6Fo=7-Bcg9`DJ&lh%_=6=#>Nmk`0K0JuQWD8h9NjK$?)zE}Ki;_o zqwjxE_8+Pb2yF_AG}=B*6fe$MZV^m85Irr99+cLqSZ7BV5U)pMjw=SITJD>lQo=_T zvPW*@k+L3-S5Qg5@W0Ia_<6^E1m8$FT(3_98eiiM&xSoG(VxBy zIfCI%FJF%+j&_1f!*mP(6`@gO?=%^|AM|mIH@0FNRtc~;m9vL*3)gp)=>tLS-Kg^Q z|BR4{u|tW)Dfdr3wb7c3Vu^H}sURke1@CtOf`PZiQW}FF?6~nxfgcVD6 z39TEF<4*Pepn6M%K#DhvW08oSg+IlMykK;(IlUf6bPI*;MkKL+b6M4?2_<^4GY6u{ z(IYgEw2f_SvgQj;>$7zpuG~mWgVTt+6nB_0*5)&P7M@Q}cCN|RhA!dxyO z7B^#0h#)-)(QneIJr*{ce#1`p`Txo#5R*nO?YNW=J!cb51HdK}q!Orjs{v9e zae6u*>YGv<@ASk-1!0kjo1ZLzWpVWlcK>_t?EJZn8nGac31+@^nV zn5a}OC;WiBM8wbrbInhW7=BunUyKOIP`sd+1xsPXP0@73R|4j4%>);(_O0>@JCbdbk;O#oJ zUCw@Kip$)L#VVSFl3-q?=MF%ik70@qxKknnwcl9&U|D$&(-zCV6aOmw9~2xp#|kke z&HBWqs-yhoR$%=Zh}O&>4fu)hb>M0{VUPnMJJS~5536_gf}U4!q3wtLP4sxfd7fiT zEY(hM^&dO?i|X*XAJ(>23C27MV#+IIJ)2iaFL*Do4;m^l69(gxrb%m?szc|hR^R)` zZbF%>c*LvBzqM=7Plv+m0~&q{;wwUnkjDAaCnu|Zsk|mz)+Z*$M7!BJeU+^x6ywY1 z!kBzl%_OYjgUCtceI%HVx(Ld({R}&d8qQL4jy0W|V`|h#?bexTx+(r9cHw~XuVBn+ za%b9_N9g(Ve*;h)*ibMqFwn3t2+(k_(7+1{fXBeXVdG%oQc-f?QL}S?7W)oQ0}}tp zWq>as`SZUOC?seYXlQuoXQ8P5`2|hkjQht0E*-5D9u`|%oF<-Kn&3VdG)Z`e&)zNr zBWEoGbB)so2Od9+_E8D?l8keG(yjl4qM`Kls))QiX8bCa{wDc4ALNx`q3)sF5gi;= z8SrV&_ts`VATY(6poRG$i%(JAoQ z#+lhb7&%i^@h7?Xgg08m*D~Z5f(jI4>YD$c_<1veNT%(^93GoR_$$>FR26uullEpf zZam3EHg1AOJ;uUu&Lk^_I=wUP3>vF{i6TGFYien>U zsUmSWhADzoHSs^ePepACl};q;W=r_T43EeCTT@+F{SpcYERr#!!Cx|t@zSKbx}NPX zn}jCQZ=B~J0ymRxMzVozfXL)hi!cxZjt1InWk`^Xd}09DOn7FuE#=2bz9Re;LxZgC z(~sryVyyy(87VXcy6t{}7NSxuWbWPZlX*N`5%Lm)Ub#p2%L8sn@sd0QY(U(okv`xRm9de8+^e)2gy^WDk3cw)~3=&}n&3tk9LB7Bp*c#7VQbyExvWaNH<*=B6| z+Lo$Tw|V&CV<}YseaWVc%CgCf%13r4U>$fW>)fCoW%HIg<*7VR3yd3u+}d&`u1_Sh zijG&zg`}F9ji-1K47!hfWq|6UN6Ey=yT8ILFts$|dcsU#NPhiH{qUe-K zJ@U0oGz*mUt3VBVy#?F2QOy<_;uP+P%EeMEip{Vz=OvQ{e8K2YP0TkDIzoPL-3kF# zQ_~$Ky)^a1sc#B389^5W3#n#Hgj6v2YVSB=mw>`=}M#pJ`l8zsHs)mC!xq&%5upWDE27^ zVhJmYHD(yDh1e3P;}YDf z6faQ`HOyHltX^qV8m@XL8y+o#jF%cp`v)~%brwUQppy6MF(cSbi8y10h zSngu|tr&&&VFW+G7utLLwb4jHT4Fx`6!DkM06pgGhoSk;Y!}*(E|k}H>jKO~XI>bR zm80T!i|b`s;rUuDeDg&~I9i!ZS{V~D2&=2xmV=drY@TdnNo}I%-AtSk8g&R_)f(3mX%ZfgIX!i_%fKEQK??Hc8k8^q)DWs-Vjl- zBE4-XF}8)3uLipb-Q9ZnxxW5ZP#{rA4A60nT$=Hi%_I2`+HlK7Sp{b`(-$FLP#U&R zTz|@Lrdccq(tq>?IsK$bZ)+QozvEX4^pP!4PKY5nUIZ)0`c&QWs3Ds|u^Uu*?BT${ z5!cNUCPIR>A{-Wu8*tV4cB+(WEioGBi7)SL(=2ca(bkv-#B*Wa#xGw~Z|nMK2{o=b zbx)7(8E=aVjWvV*G7mT-B0oma(`?zy^f|F8Ao@N^UEjMUCF2ZQYG<=eoDT?;o-^SX z2PlbE)o87LASi!v8);q{h&U}n;C1gq&93M#ZYjS*kKd`R5Ir~Xf>24hYb+n1Xw@oO zjutaC)a6{PP5cK%p!d$iFyCeY-5#^T{pAk8JrYN`aWAq5f$i6;qGdOi2eggIb!{tc z8bK^yRMd@WvO0*C-5F+bEzcd5lTFP|_?z?I)%CTN9bB4igP*=G-WPv*|GPWuPgTci zxlEo>$0Gh{-sZ|zffJ={Wra&vbC+M4w9ib)DD-SlV;zvo&w6?Aq%bz*? zA-k>&+Rt${TN=tbQC;Fd8XX~E`^GWq5ChL$Lh`qynUrM6Y{<@aW-6&FqP`&ibgaaG zQh|mWWhtY;RD*oF`jFz|9pVYQ>IFEWF#w8n_`-Cd)b`bb^#$ChoPxZ_F*-*^Z1 zXx&$3^X@b*q*Zu&Y4@cPW&Nijp>LK2(hp@`D+qsK<)G@OCrA%0wJii;_1?d@5x14? zN=2!ms8}>dEe8%z2#|m1S$bFU@;wVbQv6|nezbHYaBKaj`$3@u7U?w_m%B93^nJft zqa7NJ5nO-=qZx!Z1-@-s?~4Qh_m!vl8v99kek2n07bDQQ>04IG9e9q^{zLP481p_x!-YI;>U3 z1#$hxVouMQT5iJ2RL{HO&BMx;W%I#dht)J%gqTXpTFz-?QD~dEt~h1s;d9>PyurhKE2?5n6=aEie%fr0=07ITq-x8-&m`nAyg0-uvt=@^>FdLMTwNt3@yZK=>v0&n)M?ABeN}|YggO6%I;ma6oT!RP ze$bldPp5ww9}bg#lqs8{2H}p}mcKCOQoKc63|1~=jX64Y6c$p~nW!N&9#@VNL%OOD z6JKLGRhQb#{H4fz#D6qx9sjbAAP5=awlDs$x z7E`_JN;Y0OVGm_7%TRNWrtYHB_b@+7{V^&?87fUKXk^jC?d8sY1=^OcKVb|%JiW>L zAi?!v>d~Pb8lg}XyXF;;+%Fa%|uJ}@;MBVeZZsunBnqDto)#oc(;$Xy#y zZ|W>lt}cCO-bSa2J<5BDVgiHKwsy+F2+Q2rKWnALs z?=MYw(QD?RGN#uv;=+YYF=n+)T!S&}ua5>m+WSr<5lIn4-AE=L#xdU;m9V0&T5z!k z9kwFi*IW%5ik!N=7-}aq(l5O~|In+pqxmESYfrca*?JqCDx)MYOz)LE<+^JCBHDu(zn{SS|tghwZsD6E^EcaFXxD+(y zAX)~pe$IUY9edgeh|V#zE^Z%HKd;0+DSqo-ddz6)%5%pva{XJ-D7O-z`z9=+Gp{U7 z1K;Fqx=>LSIe2-ta-$4#88azkT6Sx_fJYZ0QJ29jjZp(3wBfldmUe426qw2ZbX0qwe>S?`jvnGFYSE$uU+7cfZWNJch zrR4TfZE$Bl384;;P}w^rD3nQjeBh=>P|$Yew|#mPni0?OwC(zv$UZFRK7Mf<*)Q35 zem6l!lTpS(x?YOD;o}b_Wdl>_b3fe!I;TU~mCGR6rA=ZQS#UEk(v=U-LUKzPbAv14 z_tuA2uRKkl@C|N@Z+Kcjl5@DH=Rk%>;mW#?&kG(o2~UKWy%*0m*s^ZUbE3&b#&I`u zF%KU(>fScbYSCP4+7{XIsF&A^1s;%a+$4ve^L+Yj*Fdi8dGDt%IXcy7x4R+Zc)`=o zMC-gdp=$GJuJ&l$%YgKTOTF-8AkGDu{_^fbl@3MAmEL}&oEB8aB9BS~IjG=qxT|7~ z$u}&J#GrSUaK4ak`1yu?E_>fIE3z1i&#+LaP|er!yDMf(#}oRrD}?4^o4^Z4F;t#~ z0oc8UsboqK)LU0!Lr94Ecfl@;dfL4orY;mRb><}rHW|~YwR(*7>&{e5;WfbeF>oWx z(19tAX(S_CPOHt1nzQCyQN9?l-hL2T`OXJ7wW=^1Nb0oR6VuMT0~Y$zuaakAsmJPv z2lGi|v4%89G;M*r$RoK;^9pNIaAw&Y#82FC=V}N_&yhou{Fqyn=m3zM__}7wq$SEK zK0TzoM)PM#J(VCpgVHSv*>Zjq*DFGytLR40$3Eo~Cv=gt#AVcR`0Z*f+9+udkTB9~ zy<`3q0Hl#<@DzFwR(f=_0>xr7xR~*)>&cLf?f3=1biwml@F<2hICThK?n!&!&b)rF z3yGbby+s*~`sK`T*KA^%NXAhe$yH7~2_>Ai!eb7PGpNTm{6*WFN!7g6=)2XVq4EAA z!^t2xf8Ou&aH$WN;3%nMaKLC2v7i-(OhtNBw#RIS&?)&;*cG2!@0*ZQUCdbR-Y=Uv z43+lDK8!B1wALY#CLYPXIrHm9%?FP^ox}50>d~2-P-8<50<}-+Un^vJ>CBL|xK39& z>U1@0r$J%F7~H0+pD7YwaXCw6)bVTRY#95-9s(|L>$_a0jx&`-lQT(CDQBVaO%f<+Dm+*!`5u;X6$738EsVNl z7kTyi%C24b%T1HcPJ_hbcjR1TpR&RFUNu6x3Y?JoQ&}eE%YX)obDj_9#UCJ@3U?tY zL_0(#*|yu;enW)~yD${g#9y<35pWCGk@&F`QB#xSZz%EuK= z5!g)zT`T;@@-)@unl2-xxYSNM6PP9_`I=#?{$1k&pm7)kEMIS6f+b@#kV@9R=M ze;N~{L$bpf{qbGq(t|ULJ4s$M_PhO{KgKfs2piGr)k@b8GhO3V(j#C(R@)`d?OV!r zHdhUqk*y(J0K;-E)!Y$WEZKUO^;WMdU9TvYk44DW~7e1m1- zkLD{|9HD4bU5&8U+}wP`J-s^k3KRIq1M*1R#6hkxhFF-Yj?)eQ9svb?v>7k35e$Wm z`Zt*x5pDa-2i~SGx3`;>8zBeVvEtsQ-$wd!UTgDA0}V4QR(RLfP8G6|9~d(93kgosC9Z6_xOu`QSJre?Av;l%r# zu$JjvNsTp8-|!xcuf63ZZmqvhn%(ERKU9%^#`lQD`DGa(VVEg+*HMmKM{)dzslu7{ zU{y0&JK0tAX;U8uk$(8Y3goYLlBeTYoz}2rR|crTu3gab$1sz&P1P!kr~SA_7s5o} z%j8kzQy$@D%08%O>)b{@Ob={W?-cQ;INTt+hpL&oq1~{t?2kd1 zR#6{fX4!Dt+9FMfQq??~R@47#aaTG-;b^71Tvj@6v~r|N&@f)#aaQaHTME~&9e$~P zWKb$+W2IpnLGhZ|WPDhHY-rYSz@%%iARg@?6s$m83Q@|3#YV-wyEUlF%g--GdZ%(9 zbIk7Nk=rr)h2K-FU#?={O+L3pfo&8&x9CMd)@)wuywL^a8_n1%Lv9q zV27T`$}2}KG@dQwV3ke3s6HWjZTqCH8azM;T6A=>r+wD^Y9{Na`W*^N9<$W@OIBV1 zD}NvkD?85EJj(>nyO?sP`?jDF$^d@YcX^LHZWx6%d;U>aZK=cxK@mvi=4G!LUpA&yd&JUm{*o=)|?ILFZCJq6iw=;9}|3WjX?f_ z1vKY0&`jO~rci4EJYP~wPBmQ3i9Tf~!m}$8S#b%waPtjTPR-->1UTRhIFVTNgrMxq zooIOf2gQ5${7fK^S>#B0>uiqH3~3-}7@-f=1e$A!%N!00f5KKWN%v}3 z;CP9aBy3m>*&EUE#_kYGIM5474IK^FpoU`%IMCFyw(CiSUB&@m&g4=sY@~wuw|&u> z0F{?vZ7mkc@5%7OjVY>=|3MMeBDQvDhf*CVC-xYvXl-sfNZJI!UoUDWk1EO|?-p6{ zt|F*QJ{lO!6i_S&91k>KQS9<(KcKA=K}XRDohz8Rb4X(AOqtpAAZHo1KB`n@ifGAs?iK`T|<_c;6xgDMu;2^;dZn`GgebNwXX4HooT?s_U`T zHP_0nejQCu_HC8P=o*#!jk;gQ;)F9bWOKJi&)gWXPl*G)Q`ouqfeC7Wb$+%X@laLB2b=<1Oh=`KGZ9lnj zEKWNDXE+)27_6ZfC<-G?;3X2ISw>3Yhw+7J8n#Mz^mBleTW|`|m2k(a^F;WO^hl}P zryMh1QTDr4-YF4${)3X~yP6|-3MCpICfDFbV`+Q7+i`VCxog|$b1b;ZOTNMB`|U#) z$4vQ~u^1k9R+^2gxF|e=xO`X=ksQ^OQsv_isgl0GS_w1^@{j|&ae@fZ*j29L zTC4xbc+JoWVPa>l1;+i%O^UQZNk_V2+LiFyCaZXQ?_e9I1zQ#ck|^S}&f%6=V#js=vNh z*nQQ$)@nv%cJL|z?NG2x7ZBAB+d>p6{9hv#dczG@R`R@bY#K-@r)&(-nG}?c=L>2L zi;UrCY2sUk9k~;;=9y4`qhL|@Jk7n0-Np{yJ2ue6x7+gCG z+yPl(HlJD_jz+Ir!`f0jT7@f)?3`Dhm2X*&^^0o7Lq=v3Ln{*LIySo zS7D(Z^gf;P@@^oi>Z+rvFqYk+|Dg1Ymhl7|6lCUNztnEZGci}e<5NC*5=?+Sb)QY} zDbF^_$GYWn#k)qE;H-CedK~H4;d3rSUSq81qPA9~AOO{c#rmexim68D-1MyQZ)Jyp zNTDV_aremlHoUa!w$d%(+FN&Ap+l319$7@D&+YE&gO8p}EeX!bY5mI4C-aksxx0D& z3g+66DhQ4Yu5z&N?At37Z92C*9k*J0;?L-oCcikOE;oNw6`(VtNj_!Z88RtI?pmPu zr>OrbxoBEyBvp7KRnU_Ux`n(}5#ca?uI)4CVmYDMJ$vr4slO7b0eyytBG|>t!4T3A z%7^;Un){uUzBnfJHB>vr>me9n#r579fmG+&SNw%II4Z?UqTf2+$}fdyvGJo?49p+s zo!U>rpYnhb2N$PHhOP-Yf@@0BTs6hS*4;9?MApF3pDb=bFa-(z>DNcAldWr9sTg{h zf{tX$xtDFdiT*}YW7eh`2XU)Y0)fyCpM`!p^Gzd$QU$XQUA)#47SOW$!6wZ^dqU*? zW~Ugd0?sqUCUS-6DZi+m&G&k%P(k%4-G9*6tb!u%T8*YlJ;6MWm^C#w^7)>908T5l z_XB5BdWYWCQk9e3;bPcm*%a0w0CmU3?gYa?*>osOKn*_VOQ_*K;hg!qae) ze>Z`GxGS7Ga-89KT5r**#s!-C75hKm>Z{p@&96xJyY2Nl0avL&Fq1Y)j|7hd>>c&} z{-^8219M(}S^ER$_B#;$4&v+q7S~ycX6wweTmkqtwO|)N9fPr>riV=?oPlSA3>D(<*s#|tSO;+Y z*Br&GP%4k8e-lP=F>8XqDuQ?soM^o67+!DDsiPHQq$|^xg41(zeOuqvT({R>y`$#! zd(-M)Gre6esQY~fp@YQNLqB@xzj;19a|SQo2?t^mxyiNkb@(UhDV6I@#0GJq z&=WYAeL9+)U|1FnLc%jb(|=OWe?aKI@Ai6^?ziprQ|;=mPNz`8%4^5(_4yhO z0Q2=#?`PlXsOrmq$>}pg)IMSU->=`{YHBTPNW^HBs9rjjAD^gFV4sY7V4N8zOwL z>`k=sy_5JlCKV!Rn3TIR;s6qqKtk)h5;j`tvRHz8RZlpS4t=!}Nd1tgWd>t5lM?k(N7LMhJ~j&%ki}}HPHROw2k+Algj$5`>!8ArG4!nw?pE11Aa_d z=aC)*e6#iY*N@-p_w{J8Q9)Z=cEKe=wdz#mcx#-(#QFxJ*j7_ujdDwE-=KT0h*S~& z*FI+$D>Jp>EAq=L@eQB`wlSOh-`7FuNdEwLs;^r8*L(W^07u=mH}brA2%6max_1|S^8;#kj+(c+A+{GYf0M6Xx+#tC>aJPu>Z)1y`bWLLXQ+t0fE_=5KS$7g{{Vll-|M5= zh^^06JFv=C5t~uVHF&^wJ5SAMK%rDm+|=0KfStyb+@V_`CAM=v+ngj_|LCU{T)x&PTNAHPudh~GFrp{ z>{QCFcPj$&*F{EXv>sN|Qml7wcLEZFzfeXnV?s2W0N=lxBn9?wa8GmnTi^Y^Q}_O( z?*9PuBj<1MpSi#(hzD~o{3y)TrD&_xluq7++1V$jwoRU31JbHDTrmBtOa>U9_Ne1P z`Je4iy~*I-I1O@>F0{{R30RRFKAu$6G5+FfQVSyqr zGEi}mKwzP<6GC#qQeuM9;qU|_fRgbuqQd{$00;pB0R}$-?|du5sueablxLbYl)S12bE(N^h471m<^0FLe; zebFq{q6eaOBn?Esq^4r&4K$FkBTs^!waU3N8!~IlVjSoyL6P$Hb}A4tWmG^VPNJ~e zyNYIq>XhR?B;a?HLtwU0&+y*YUvXGoDbv|a)Cg|*vc`cWkC1_RtDpA&0N!p3{yTY@ z{*=cFlIqm(O@~C7lv>EGTL0)RG|_Z9SHd5FpUx&sB)fJxV^RrT{ApjtC=JoyfHK zVFrOhiV7l%06>iIlx$n(c|>UvMe;3uK|@HOK&Lo9XL1;ttSo_*MN?GL!hvvtoE373 zS4<}84C*rxMx&1rpYi3IM9BNLKS3`B=&qOrZoaaNda1nC&O0 z)edW_xQ+`GD5hl0hgl6~P1Zl^{>tGs!n#N)?b16&e&5+>(f|$r0Q43k{{S;>^+m5e zshZY?6L8z$7m5(2qG}9)7y=nZ>WZ>iZW-@-Q!C^J0#1YWx zEj3MtdZ$CIVQJ4y9Ha#hq7{|1zsNVr{nTeF+0-X<$mU&%ZNV0ngBGfLjvtGjz;TE) zxb<2M3+-L?i!4V!#9}9U!O>RfZ1h;T$HFMyY3_>1?Qxvvdu!~UiO?hZb8MB2#`7ej zY21rtNhp9}25Ru%n!{s7XDEc{??PfwqM|1t{Z~O(f+&rt&dT2^+^Cu;E+lZA;jEcK ztHGEfaxlmy<#>BBWKKjj>4m1hnK|8)IhK?wZHPg;f}*-8CA8x0^IgPLM|~!Y3hLyQwu~@4MOTeD50&Aw8d9xq$$#2 zQKYDaQL#d=-4_zAowJ>wud-{gWlt|Nlq;*FlaZ5=0Ra3ysjdR$YG|w{xZPon1z?u% zUI!HSfI&?rr53pMS}dQ1G6j|==?Jq?4Fht=WSTZwci9X;;!N8q2Fbw1U8>vGA7GFA zoP8EKV@&Ca`z;01T1QDJ55yF08@&uT<0}~NZm0?W0ElJRjtdfy1%iHwom-ZyNhyE} zWJ6e87b=IuiEEak?$Uq{s?wSTl!e+uN}`!lKLd4je>#zqvw%?4=~`7^BZ799z$*w3 z;tLJ$e88qfr+R^iAqTO*9qH~Q7nENtn1mk4n5?WvIQE>H({ZtfIMuA*g2fJf90&zy zYr}~$Poi!&;xtmCc_(6OXcBICsV@-uwN^CZ2N#$L?bO*es>X*w1xt*a@q>qo%A%^m z%1GjX!+e5lp4UH3Ru2KaOLD3pE21amdW1eV!WCK+5U4VdlqvZx+1q9{DjK0tDy{)e zp$avReBit(kc<$T$2<^646d(}M-s7nPV8yj#bP>7Wqun>^Gt_Mq#5|9QMD7Bi1N}o zN@H4NI>kRj^%mSG8Hi4Ep8yz48mQ|Pt5*2Tl_iiA22yXBo%uotb5oT3kqFL3Hc=T7 zkpUfSm8=UyAn2;aFSuCD+zJjCE=`6PCzFO-0cv+>lCW^khliqTTW1M{gV*e^ntU}e z^g*qlEw`kn9pTjInhi*8SNT^)tf_2U>aHVnUc6WQb%PuNCC$}KO2K^5!T{j0aK&96 zqOh0-;z?Ng+GACg3)o;q6c=RhNdcidwc(-WykgW&?NV%xw>TN61nQbuVH3SX%8-Pt zIZ=^>K~wTIRa9jmNfpSz$g1K|XkYx4Ma_1ZSe24@rjqlfO*3|kLeNutU7`7radxM1 zO>xFDIVQ{dP2P)(i;6XwB>U_}ne7AYwK;^25`%vT&{ChvK=zUxQ(Dmt8R~2F&Cz7t2J%j=${L?ZQpZ99Y8PnERYDDyHC(Ck zZ1)gU0rR8<8$A&E?96=08_+-_m{ALovMNw9l}dLcXQH7^=A(2W8_IvG9iRkRJ~#yF z-3isJ!5vNuWT5Q=41} z?K%-`%qG0L`;ga-6I&;_&LNH7uzN>C)5w_)jH+Q1s)@C}P~aw3A!rLwjht+SZ)XM6ZTl*NpTz@5e9V={{Y!A0Z`FSh=Ryh$muaDz>}!&B{h%3)uza}^cj#v3eyzefYKEJRtPz<;fngLZX=X`y#87vD9Wme zHZHENtfU1{tQEiQo}VmR6&awG$3-_VS7=Wo2xKlumc}C{5M9 zYt$_ZWKOWo%^Ct2j(H#ZSWaOu>AxvX!qQ|InM3-= z(5zTLoU5uM9DWvxp+Hi#6O~a_U7Vw@Z!tH5oxgAoLcFG z+()_=33at2qG3aX@?zpM8s88ESNHO*ZJJh;u`5p!lsi8JsQ*a%w5qfE*mB2@1}Rn#IBMpVibyy8lr zM6Y#4GOn(S=SAWv{;S*Uhx@rW3>PM~yp|Xr#0TAJBq9sJo$6hWHBN$JP&^P0!qo}R zV?YP;?pk00$v07$vKpLBD3jct$)c9EY136)M$IUib=)U6fmJZ7Q+sF84dky5^dpLR zjrUqw=l~ZJ_(PDZLzeGpR{(|u5- zV=LxNN-)F^1#lDxl~)q4+(g$sL@DNenJ`TX@dR~H>V+X$VnaM%=liS=!|H*wVJt_r z`iM0^Yc#e_3k-0&!>;t#O%t@qDTWh-P?QT!3-s#Gg0 zZPe@s>JWn_WK5zz5~C!_5dzsffi)jcoZ>twrNBn`MeTJo%tCXx zYE32bOPL{Hf-ciNNLbB};ZGmT@4714PvU?$N~Kx`pH+z5IXaK9*dz*-;T~syCJ?Hf zTEcdt#Y?Q3LI8^@WErIgJ_R5rVrv!Lu}iFOi-UAV$G6z8`Aq`5zN$+cYEi>(9U|)! zP=TbG7eU>a)&3R}-9j2ZuzzIdZ#P7de=s{&^25muHbLCey$W$W)F1YW4Zp%#tZHc_>Ojl>a#QXepvZ8{kl~po5<+d;Jr?{0F&jbPyn~@7n z<5ljW5F~%FiD|k3lm|5f$|R`>1u~^jBanpAkUJIGy1Ks6@_18}W)RAuSzF2HLYoBX zeUt}C2$j0oX-?#iu2CzZI*k!1jHhDXA;OL7imHAl`3B5NomJHcFoQ95_4A|Vh_rBM?FRLY&- z4kXIo8>B* z&UNzP@D#cdf!!GxG*XFGY_3W>stuZoLHkPS_gz=?sl8zX%>CgH(lP+=A{Lhjat;zi za9lGTkvvnO-Yex(mt~}_I%=8;6;5`mWm1GGjDaOYCucCB5L9`H_$&7_vtp=;kxQnu z4a4hH#*uXq#;TO&Rvi9e_fz`M(KFSmVNt@(QT)XYzjbZ{DJ>grI-(O8B+b*IwcMH; zhAI>E-9KI7YS%STU6!dpp#sZM7C`P9N}bBegJPWND>ILG9b+mE_AB6lqqFRinO9( z2R-pA<<$XpTR@{l0YnDw%S^&`Y^4=NWDay!^E2_|j|DC4^h&wH-*`3Q8}@kf}@I$ zmTIfNdL5lZiZHxexF{lu5&r;h-Q58G8WZ*Zc3Qv(+ z)kE)524R$ejXLk zoUNVnj`p7*w4y;y(&$36VydHxrcLxee7%>xT@-8pc&bXR`?>|;Qz(T9gyba@Q17ed zL&-gtMb&#Qr8|y+_fSUj^ay$tTnL`2oAkUC zJry{hIR)1_Q@J{63FXK1rW2(UNLXQ}3BF*c+@xL+TBTIwL71jOZdFtSOroJ5lW2>* zvcvRD^~>ArjM#v;t=x(dZTn~Ly_EqsRS{VBT@&P55E^16`l1{urarKPCR!W>^q<`@ zH29uV2BjIF<&oS8Mj;ImD7oUR!i5xWO*3U5D8;e?RYY22DxJSV+Bq(Zs^}M0 z(_<4+fG7~(C2v%wO=+RhR+8u-iRgeEv$n{Ck%e^Ninh&inA(q#d8b!$qB3`ky}rn_ z?=qT3<>4DX>)CWGs_0N3%mVja5Mi_ev6?x;Wd2ZgFSG>2q6v_!5gX+WDX^TPRI4j( zS1aW{eh~EAs+8|T_Q=3TZnM2W@DHjE{&`pYxd%xF64uE) z(}}x|)Rjgasnvu*vqB!J#39&Pl~uExhn=4ICj11BC+Li-Zi!CkKU6>4Q8)Cn?49~g z+%BOCZa-Ch;d|`F)kJ18sf7W=h(w60ne|rKCRY`xA(8c0^RwI?w(Ygu$&UYu?KoRWkaZ{>0 zB2?a}P+4EN0w`1KK$t|PRR=U9t9rbvdD-p(&hV#}dj zSF-m}=)KjqCY{8Os-tBHq6d&eD}1Up&!*ldq3#W7pSrU4Ug&4>b;k`>KDFV`E~9nVQO(rpo5vp zGa9U^kx{c>kWSlswvSD(W$wDJfpsgOT~|$-xMWFGVU8;ha1=&SY}F3H_1Th9DadDi zh*RcAxE;aUZ*y+v*&eIebStP`GUTM&lI+J+{YK7AAbw;hPojLbD4Rs`4IHBCgJLHu zsM)fzu0zhpem#B!^+VJypLNu)Wj4Bw3#xg3>kFv_M1f=v6^aRt(gCeBJJn)ypk1Q~ z!Kja}T3gjls-wqh%Krc$4*Yue9>^i+GYI-4>Y33y(GOGyAdghh%zc(I-ygY6^$5>3 zh(F!v{-B%*poAf#Vq&S@hhX|9`t1s4QP{Vb{{a8Q05TB(0s;a70s{vG0s{d70RR93 z0|5j81rZVx5ELK=6(KM&GC(3DK~OVb79=!6B}4z(00;pC0RaU8`4p|4XQSGB#t!zL zs>1cQTCtthXLRswG;pmjuxy+`yvrA0gC^!plH{y&9L{q-7i)KdY1+o?N-K)2G_F&X z8U>bYc&xZer}kGog~B4k26m~8^uMSSPm#$o2ide^nypm}6*qd?m51HRfxdGwt{4>2 z_k6Czcdk)y4*|Uqf&^2>ELS7qy6s?)$j|p2XBozH=T3C|(AU`@C7cyKDG+Qa&085> zyB^Q@*}|TZQT(`wk4IT?3@C+KU}0DyKR#Jh`Nz*ICvztLN?TaLcde={UbgYaRI@g9 z{$?Anu~_RlXXa~wd&9!Jdv1@~6upwV!vsuObdqKcMN$U2H!(`>`B|0)8*CkjT2hkt zjD@=qIcDEztGrwUP%yiQVR?mhOF}36&u8@OXW=I0=+cYqu!f+jA~Gq9efrA-wjN*@z(5Cec$-GL(V*)|uQ zN-XZK4}nMwaJoAc)eV)vwA-;WSisJ({jV|`+R-69Q4)n8BxF6ZF=SF?nl3k?Lg)Ea z69Eah&ZV0OA~U9QiNLHz6XPT?oX7RCnhTZ4c2=S4)~HZ(GbJ(|`!hW?cIlhm(Oy(* z{hhT9J-u?Uk7t`@cJ}q_l|~Oq{{T_Mc+7JHuTZlsRWmBJ^7iC zr(ma+Q{;h=QI$iMeF8C1B#=@_6+JSV%OM(pGL1uQ7S^4Vye*o_b^*_w92)^S1~Y`n ziSEWk^XTXLFfsxi=@RR2U}yeNs9102T-~Kp1Z-Bjdu_ViTTb+bS@wYI zu`@r~aUL?Dm>TO5RYk0(J`p%J<{~e|Lad`a!tpL1YwhN%FIw|0xSpbl->tQxafV}v zBEz0#hafSq<0D`^qU0Qt;9-_=4CV>r85RdS!;-9nF%bB9gO=f{xTO>g(Kb@=Ec|$wuw2D;g zuV=H0<*(CILa+NkgtDMnRBNeRL{(kHGNsGC=OIW=STXme{{UlQ8#?y=a4kVy^WwE-CrnP%G$}B zo5vpUv(XpqLhJ3Vq+PVK!jEV#L{8e&w$-*+Wi5@0l77=%m9uK|ty;qn@A*}ZRll+p z+wC(=THj~_m|WZoY##Ss=tkj5uC1sJqg}SBG;Yl~c6pHiDM7KPSd_h$^^5G-d1lR> zS$B&S;#T`9?N=G=>`<`TcY+J0t>i@c^0an!*H>ocI?l*{>NFT&@v5sq*?52m2p37T zQY)(+E2E{YVH;gq{ME4)ObbpaD2;Wgv22LuW~B2}#IxP*IlC5C=Gb6kt@Mw)BaeA! zn=TO9F-p4gwaXfr9Ao-O8YLXYO9nCyC;P4^@_3BmITfx8!F{fyWSM!JJ|+-iy>tn) zThzMA?JELC3(Sc@Sg31V`)YZ{j9e`dOp8ns2;pR?$iYtyxsZF@OkOR1x^VRv-as)hi`5mYf0)%~|u zV)80JVia>EhKTrf*^v`CF&#}(dtQdJ7PZ||4D75KHdP5lr8^mVuran2p(7X+*+X-> zzO%59m}=x;#(fhL8N~Ydj|lp<&syNlGG=GNwSkl6M~SLAH3mgB;eH8p21U<_+&p0s z1%mSlQ=tBCTLsVQzMu#i@+&ig{s9dFEV%7hCFY$c+nTD+BsEs|}d7h=dRHVzy{!NyT; z$9qezi-luY*!lcMbdGe6Omm&E&d_IUbFeuIh`}x}j%WJRy@_M@gyhxUsROdxw&c|I zh}B(tvQ?LRQbfHqu?=R!c*n04eI!>uN}nK2wFLukVi0`6+4ysdITG(8VQv@(Ic9SD z(6Ms3iz5y)>NqoqBO>s#uYx;NW3sim)}(BWZHICyxDL%F!9DhDf8THmuB||^@a@aj z-4eUZ_iT}Om=a17j+9KCYVR(QZgv&zme6KUm4uRA3$zd=8qfN=Z)V8J8z@v<{{Tx1 zZvged%tz$$9*H8HgE+_{i6SDLFoF=Ik;$T&A&7{(wo^61v9cBa0I}!s7PDcNf>&O) zrpw{_s|h80G1p1j>ndSrufQgSmrHe5R308l{V1y?EUd_YuG5K2I=r*Gd?LH%1!prW zFqnifA|z5kL!AfUUjbgh#gDK{a_;k1mD6~J!qF(6@&#XsuB+|tUccq$#nyvD{K_j| z?zg}ONSvhvvbw>30HQd{FNCcd1-BD{666m8M%8F%e-!5W<)!uh-pams8GQ zN_Zui8H&_LBC&0kG6^LuG|< zl2-_hgDIJa}?&yVEU+74(YB}kG#1<11-`zQd=*sP zx)*4@q^FuY#bvj*s#Fn45YGkX$E03D(y$T%Y9kWaV~)&3O!F~3Oj;aU`f-+e@NJ0T zS?MOfuO8WBJX>3>>#l35UWJu5HIIQh?to1J6{lRtI~w}zTeasoQlzSU6!;LAl(^5R z+Sz2ql?a7_=u_crV@Ifr%NqqCiWUXYtv=-I4h`C}ET)oDwT?nHTHTuJmD`Q9{{Zxw z*I!-?$jj6uLqF7Y7a!h$5fSQbf~i-R*}11uk*?NNeLam%&BSTbUJ;cP!+4#+}E*IiY^6rQ%AlvcPu{E zmeYf4vsh2GcAS*m*11yE8y%tV*e_>9-fq}*MyvgPGf%x0X5MRAMv}BwskgHhb~+fY zn)}4nb)92ss*0alw#Ig7jkNFUd5wj%GBtaefmdg|r8V~3L|LhdguV?!R+H^wq zX0*w3F=g=t))seJlQTX%{{XjErpM))Y(`b4Z_8B}iNz?GaqRTMtfRDCWGLn`Kh^r9 zA~TQ103#||E|qO-0*l%DK@|5Dh1T_&y2(b{RSzllbrKr=BqL*dU}@3Q#fEKlia=Ss|gM*uS}LX=*ie zRTuYrbggAPm&u>c<}yfPI>U%+=5Q8gkhXUgqcZImaj7NAPXile%b>@JU`AWKN@MMC zw_fcozR5&BbvRbTquxBqZ2pB>6UNwq!neTA%sCB!&K=>53(!PGC5cJSBzVE&jxrxYz5p zB~`!jRdDZUSuH*Cj2&~SuiCY$t9X$u-Pkcz=dT#UGW;m?cG=UAGcsU6P$fPu*ey+~ zWL}EfF@2D~b)|0Wfr;3-)l*?{ufbajJ1y%KnPgG9IkBgBty>!jtFKu$DQjG(Viz!) z{XO8B8y0``Gz8AxmYCH&as-O=c@nhtU5NpCex0;Tg`eJ?}?C(Z*qYatdoQG$BCDVm7IVl;=%x7jZvl-cp5s1#b zlKh3V!dqpnkCdeoC4tc*JyOd3I7u;uCJ0y^CE;Uu<=d~fBG=B>YY4fuXKfoBXuald z++|z#Eo%|)S!88z@-;l-lh=lxgE-|0KoZGn8E65u61hMM+W!D`SH{&zHt7vYbyl=& z-CpfQvdfP4y%N2j5#W-TK#`PK=0-P_`WkR;-1T*8;ym|)h+!3bV?Xub?keQRSV;+5 zuuxIVGf={9ZG0rIYvttnQwd#YVy9lIk9Vg$m~j-95fvAJfC(TH&cgB(5uGEQBb@=A zp~#LusX`diX1$>c*4sFB8!E+Wtr)tC)hW{0F{`JNv3J?z`D;}rJ`r9z2CU*1052Gp z0+zhyC5JQAnTd(ygH^4p@w=#|y6mA)opBWtLKkXj*|ITW)oTG~T)Pj?XT)Ki6~D-+ zj_S%J98KU9P_&N~+PUk71UkC}CO>N?)tT^pR6jk?p}As}+Y@J43<^}DzmHKs!4S+$ z$B6)x0>D4f6dh-&)}$-nl!e4sQq%tcRn7{Pfn{E)7QmqtYwa24ZndRG)1GC4F)8Yv zE6n#CKd1ZgVkdv4 zE9`8oA+w8gi1+Yc#GBx-UQi_BEEcjNOs0CL{isStX5;22%erzHagt>@&-(8_ixrzO zF~s^|XEFY>%wac-n;AB;EN6Qr#AG*;Sn~utegY6}BGzypA{}iX$blkipL2fy3{*XqR2=w$ryj%Q6xT^nSLbm>*xv9Nq5uAJgx^3-u&1Fpir3cQJ( zzUL_e_l?`iU3)BsH}kGvI{4O*AzLRKe4URi@}t5(2bj)d#71UKWF8$QmSun?en9=? z98LU@j%lm*^eG7OZaKRj9Tdr#%y!TcD>~xZ4Ht zxsOcG5mRMa%L{OkyXbA|YbM>SwO85Fux#Jc8Mn0V>$Mi|m1`S218z4B8tk#KNNwgO zf zvB^;J2>8Inend>fjn_siWf7LF6PhMtl4m|OwoXhQ>GKR>u(4{A#w(^gc$^S9!UG)Q za{M+bcW)5X*#%vBdrwa+dqG)frR@N<_cvBb&W2s)iI)?#+Z)ELT4j4zHnnP$Y{As@ zbgS8~wh@i4#1-jH z<6JTYRlQ?fvTdx@#wk*BDO6>Cp1TA3Ypi-q24DaHOj$X^2ts*fRMqV77LL>*5uVh? z1~C#*Gs0>2tkZl^*=e7~$6;`6U)dF_)P3K1vCuP;BO@9%t&Y^G=&Pu!U8<#7OigsA zAu5UW&Ue$)>y^?`Wip!A`{e!EED~&KoJSCX zlIpG}-**#={R$%ZEaMJi7F+=z8Sfi$4Y1~TZFPQk1KG5}4vLf^8afImQK-{hYU{`V zkC7r#;t|w;&Jus>!kN_CykhFvWL%?U6rE`S3skGUbMDZ+VNddvrf?6YPoy%e6g_kB z>oI3_a0JBlcYue?$5(!3ehjHx$VMV2G9n}LreZQ&8RiE&vB5ixWsWj!#wC+7tXlcP zP{7^zVHxs0Q-TH65j+y6bFnxz^RXBq#KuhgjVVN97_P-Z=*ARu?1Ts__PcIiD(Gxg zDcsucSj4-gJ{Tn+;T_amah(27Uavhwe#}8`cOu>l-m`@e?yY zF+mfI?@V zDEhdq+f&70PwN9WOp3*lD~k+(nVFyH|on7Y}?dpfBu zW&n7=80m?K$2ey#A`U`?btyeD+0QK*6{7?od^)E&{7Ec{<~?djvRPH3fv>c26fAX3 z2g4&xW0iY4B^w=om67_fQPL~v6wh-cI;?;Fm|YIB*8~J}RV5_4yK$`-cYXBZ%z;h~ zp2YSVe&E&CSo5ATQ!&i(;3Y97Wu=5fMfqIkIo2_p<7};Xdj&v7%uE@&;{#&n1r|84 zW0{o5V#H1^QD17sP!LZMDjo{z$(TCk%!aOTbFMV4qa>dC3kxFt9$~ zQkN_}eymoTCXY6%)yV{|)8e9-vLNa|(jL&bjrkKDnfp`1q^3msk&iA*%ml}o;6VCv zXP@c>W@Lnfnq4ba-od}#HaznzAD&#qhU}&pQdc!A))=fo9BJ7dVj~#8yo@Ip$cQ(Y zLqn`Wq(s8wJ2}~i&X~bm&Pt0cNd!9kF%}HUn9SmaI$sgT<(@C?^;U0fls2j*Us6f5 zE(|Ymu~Y>u;^7o-1MalPt9~f#;IxJ&!*jaKk}3Y1-gIS`HYlw&w(_8}w6>bncDC%2 z{p~g|RWiOIN6-gq-AaI-!iH@yBWbe*9#<<0M#7ujHT9g^6n#~~4%3`bDqz!Qhi>MFGQGQa5=cfi>*`G<=8ePF{0D~~Mm zmUtr~oUdhwDc;!P#iqV|DpNZJW~&g))zR}W*wxoo6zlA}CX*KHS~d!QpU3$4Ubhu% z)!W1DH*bDdVOE;01h}idIZX>ltA}CJvmkECDX}eHy62aCeKMr}q9K>Liz$;S$@t-G ztIIsPvw_cs2=g+sf{`f50-Umj_UkRMSI$L#d7V1{0NirYBZ>O;#9=!-*)PdZ=Q$G-o!+spNlhJ<1ja>r$%#oCZ`&!rx675@NOO2xA=4=5w6KfR8yL;m?OY2aBJdOQXIpxvQ#EQ*vvcotuhXn@yO_Wx+-L<)uE= z9fcGxXSef3Yijo=#yv>YU2r`OOEZa_=`LvNh-qn2XmXW9vt@d!jRLQ%tx@2*dkxK} zjf_l3bccf#6hiM@1)B`#CqY_Gl&c?rh>mQ7B#UY+=3?`RQPcpoz6+dcVi9t-@#qs4uGUpdc* zIZtN#`0cYvg}$}JExm?UER=KTg*Ia*jhIJ-49-B8F{#){($(3uf$Z}{_a|)aYxT^r zbmK}xuk&F~$=5xuwCp&2nuGI{AgXMvGT^fHq_U0sz~i%hPw@Eh$E#(s@{?O^O{-gU z)3Zf0ar+2NZTAIN%TaP(rBJH5#1|sI0?bEkks!HyATykYoJV>)T~m`dO#z9xt{J#M z;O%>ZN$p_@L!s4rNAfzOI^!jgg#Q4Kn8|$Sa&xG#xtstg#fA)I7a1q&KcfEc#u1X2 zYa3l!TPv~-NY29DVhv7{U0TRk*Xx@?wNA|~rFAj2;NsmM(PpmR(hp#nvd=wLTSm-F zLvL8C+1|C5OM7}mE?NLK8P7hobQ!>u;E78iQ6!CGj5ZWe-`gw#hOKNXn%XO|a_wHd zzSe;;C=P{q3k+kK=b6Z!B#KINq`2a9W>&{6HsGO`St#!^3#XjakoRk-dfHrLtVe6{ zIGo~e;$sY7FQ9$@0E5q`+4=}9_JOu$&$ArE zwpE|!t5$EhwBPljt=geQJ9g`1KdkC-wd{YmY%&+^)rRZ)FR!wy@(Zt>S`Vl==in$kfG_3e1b$TMnK) zBorB5R!UimTLyjWQqI$dj4qN8g~C9jS_RU+z6uPZ(K8W()fD^ApK+U$^E(Zd#h$^J z(?eZSdnnR8U5e?1{+MC1VYUdm&SRsxxdpqY2)Udg8ORZjpUh;iVPkVBzO!sEXSwf9y{fDZyHiY7j|DaaP2@&JGE*}@hG)~0XBlu~3uZXYfy}1M z2Q!#m6`? zgT{465yz^2llOjav-3!EXq$_gbiVy^$;xns^m&SL;CGnGM0J)ULaTx^>o?+iFW;a$;s?d?2PKN@jdgp5YJ}tsPmT`ve zVS&|=S~-LaWb{UNgFL|JnT{E2;>#0|)13Wtf}_N*j1uEJxJ;ZU@sn#AZZNFQOHO7w zrvzs^c?yga#tQO&7)_YMX-;!F5k9lQ`+qvl+-rN827Nto*#18hMoI`u2eZg7vrje}&f#9B0a(ArHP~1h z=bR^2d{)+W*&j^ibBWF;87I@-A(z|ZJp9Ho>6Qy$GA42&X8>oBo-?_VJm*ey#&Pl)^;G_!4u306 zVwzvOrpIQi_G4e#7uGX9mc8{V?YzEP*){pP*!35nR>BIjY+1>UGmKuk>CUF06{{<( zqJ-4Eq8SqTGQb#{)nXgGtPBE!503(}$H!9w7C7UWO8&vQ+s3w7R;%}gI>ihws>TIj z8N_(>&OjD%8N_2CIv%Lts!0@3j0yu7HO4cxIWhy1_{p^xR(Q`bGb@Rl7{Dx+#&@F$ z*)8V@v69^GPIXMr6P+`VycOgIM0~mNZ`D6cqC#w1w5k^?T$=yA7kkr@4D-8!UGs{)%Slk&a8SInXg2ModOb#}a=IsqmhW z!mtsAWO6LwTf%(K6tZwZvyoJ=EBruWGnmfoVYVY7*v5PS`N@fy=$wUQDa@1w=0%5 z^@hQjnP)zoz}_s>SG19q1k8o{7;QTjJ0;SAl6Si9lTtD&$eE1heHXTIUAC;B4%v2> zZ(_!f?3ydp*fz2TBLnU>eyMhMXC&u3xz4D=X zn``!QJkZmq2K5@HLb7bD0t7cqy=gY=nlI8lokZEV;dO;>Ev*l|W#&djIsEe&>q=C! zYN!?Lobq(-Sk%EnLIkB?IF(Wr+?A8edWOEPx=!6o)`_}GrwOB7X<8Jx!+L^ZVq#`7 zmQ)ZsnzJE%*iPC!oo2zfg3nqlkrX3UB{Qf3n$(t`LC+E93MKbHNbLBQZ02T3%%3S_ zp*q%eDx^dTqB39r2SND0V>*L7v66qM%zmbkbgE01E@oD#>Fne#G8dgW#C}6QiTl4B zTdylj*(SQIYRAj!X|iVj0JPEZ_G-gUXo)X-Ea>)zHWgu(n^0iAq8Z0+tsRmgBj?17 z2LYgE{8)QD!-5}dJIjMRt;D=Lg_abqB4qo5@-UFvx2txCPn zp67(bOvy~k>?JVmrEo^SY37@YS@fVglB6%pT2(+#5t}%NLiE;$14_AFeN}Z}1PpN= zH|(`>CgZMG84A??<|??aBPZ!C_)7|MbD(k>9GSp~+=)93m|bU)owz9q!ci?xUM`G8 zg>EoLA~=u9=On#n_J{dD5>g<%&Eo3a2RSgAZkb*M#48T4!}6=l-dS!~vQso2}HGqSJcFV{_ECnFLi(^@-t z(uvM|ItQNC&3NdQ<)9){{S8mQ5ewSqt!Ty0>QscKu{n#Wvh*$ z1DA78QHV!}S#g~Bta_vZPGL|6(*d5YwHH@ca5yHHRLss031?CSLIu4aq*D<&#C}&fCx*--oQ`q_1ab%0KS}$(bk7ha1siB9?;mKZv(BZJEotgoM!LnFhPFyJ79y{qRovNXn6kxIu*lO= zTdXxTmKh`4#}^Mc0T91zRz^iL5im5X4sjlc z`ee#usADWgLKL?+a%w(2JbGedJ z;nU7`=LJ~-oP3g>kFTFwKHA@Bt3_s*FLgz$Zl=n;*;Z@!S-YeuR?W$q7wtYGeGwBl z8fc6P42%08+ced1YA91vFTFN8Z80@pR^l1DwLsOAg5Cv&OfRH*VkTx+F^3CIB^XsdR+t-P_L8%sS5X_@EqkTWwHNAsz#O2Yz)zU6vQ z%DtU!Wm)Za)I|o+{l2A=q45zfXEIYhI}M~&CvHrWsJzxcXvqqL)MU7x!>GT_(N}FY zX#-^l6~_^g5g(f;87+*K=W{vdI&uRcc>|n!dC5HL`3(B6?DaqE{CZ36ulIVC-lqDs z8t#!h=2v!B+B(furM8uu7m^LXt7BbpthH*>Y`f#ePlp`k+CElOPSawxsqU9iTI-yq zHo9?@?I?cU-~n}LUbd$rB4#t5eGpMO31!=Ll|y|$+7X4&jr;ou$jSDcB3J2kU7VX zIn{)DEco?j@FS2p)0}*U;%D^poce6yKgH@-`Mps;_dY_9)?-q|97at_l<6EQ<&^1= z$iGc0p|K?-n!1-ttlje0j+-_XwrFajXK+B+!!CRjrZn7^C4jachesg*Fe~JaupBj9 zK$~N@Oo@pypG1CVF_KY)=*e%u+EYA{V5qqjd^-`4xQye`&U1uZVKQ@Jx}@~d0b@rN8w}CUkje7jDEeTRXVN>O>JWxZfn(=yQqk4)UJ50itRhp zn^N}7UdCUrYv&`w`2dqQRC-vQJ*EX(%SG$o_4b!h3ZsiYnKnmv%uHmk=lUt1fjf*R zxXL52%XC!&R41mZC=-5;j6`2AD=0Hf5| zn78WER6`GOHlpokwc2e~$I7zPb+Sp?*abH2mf;l49P*Z>y(>lwzlQpH=o5K<2%EW=+5`XPDn}*m`va!AsGY5ubd`lb0E3Nj&cVe zGomx6IQa_uJxBCc-Rf`KTj}a&`FtlM!ZOT${{W~?M=WhDKD;%MJ^%!A%FkHlx@nW| z*8c#$8meAuwQ#FfSFwv0HTyD`15g$Aw@~I-+Bwi|VaJC#&&`j+;~-{nikz|41irZ- zNpb;_F`ZG0_~Zr<@#yC|vQG%-Cz-(s!3=?n2uYTCB9-RIpHvXzJAKR@lERt&@aNxV9v%!-lH%GqmbedksT6rhlgBoPfxT_(mDV zF;G}3h|ZY9nTTWl3ppu7d^(~a=O%Nn4Vl%P=M#`Q+sGW_=O^jvFQ9*u)L&{R_4=&( z?#C;SSH}*55kpB_K~-wdb;jIPdq63_LKHMa_LSnxY@HbEb{#**^Zb4{F&`_OCjjKz zjzEfLFh)4ZpNDe^nJtVG=LR{*Sn%cZhg+OdU~ozzB=DQ@Blrx?bWGp|bmvZS_$m7O zzmNX?Q}kE)y;fuN57X0nWNXLMIrM8=S#~zHX3%MEB`k)L+}*>^C5I>B{Qm$S&*K%9 zLoMEg6vd-$Bm)-J_RrK@@KSM(d2)_O)DhE=e-5lN_#32QwtgxpED^z;GFdq#g~trA zBar@NXPA(lMR^O(oa68#(677G#!gS&>i!4(zNg3O53|#7daJ5`Z_^kpWJjZqjOwjI zKbiV-pU3kbEZv$!%RnRyG3Hdk}Q*fg0>tY%(7xRkx24DxE3xa zCWy?gsE$Vw;v+L8nBnQ?CZzI(bmu&0baShilEW@U)^jRE@&WMa&OaT0e}wu^>+Amj z`ud&rC;VQUAK|S$qxtjz8Ifx)3aC(Jvvms#%G#MYqpe(AErkhIpUi|@dfd$ZIQYlc zKcABsB@uwoIFcBLTS~#(kJo2mVdO1;B~h;>>KH_=Vt}GJj&jAQRyOYmn`S{rlO?1> z2ktWX^-gmbZvn}-6CousImUC6+??QXhXaha@fOUI{*oC1@a;xGN6q6n`H}bdPojLzvLlxE&gymIWjZ3dCc=Ihva*j!g9tS$`nHk@XP0_#}Kaz;7Q!B5=2=SbL7auSG0Iypk1MKxb z@AWb{3cus@PlQCw*rN0=+4}uXM6SlibjqOLXY4c0Y-_e}q|}Xa>@Ka#TShxOhtc8u zc>e$y{PXKjsL02mgIlT+6xO>$1naeX;Zl(=2D;$>82c(rPQ*!6Y}je%OfLtfVl7NT zoRrK&=ja>;gw9Bo0Siu~PpR>d^z_Vrn*RV#R+nBSn^w5(R{sF0sY^Ovyt!J*)!4GS-*Us}pG5sR`0?W& zG4$}3ctlLhR64KgC)5^?Iq~O+EwOiY_ef^RktAtaWOjGb)ObgXdOwfn`2K!8e?4Oo3t_>4K|rg?^UXLCC`k0M zjh*hamP^a5jElxdV-^fNItL1hi5a;??Qm+^K}w%z$EbNXtZ|oyF|Y2bw8xgFKdL+= zz8&!DnfP}LxMlh{KIp{s`FNQXL}wBBvFPXJao~6#Z=;Ok8T3zt`d{={+3HU{&s+gd zfQ*#BorLG}>HcCq9ur|vk@1g&WP<{-MQn$_ixbT20C-#vPm3O<;oc6#EAM;oKyh6X z$vI0Kb&QPSJY~xqEr@akXJep_!)dfwH0EF{bb^-y27MwoB2C4@#e_~=&qS!CgeQnr zaUYY;bLiv8jN`^LoRY?USN8gw^hehx(*FRpKjV!4Jq!N;KaBW)1BN0M>wuf@s1#IZ zyGrHMK=lP5;fPeNsXYzAB0})pa~gak$CMaydTWX!T{|lU?Y}) z@*oBxW@bGNVf0y<=01V&Vxl^@j|Th&1X5P#_Ur!umEYp71Ktm}`TY3xPlV*;=l{e2 zL=gZ10|NmC1_K2K1p@;G000310ucieAu$jWB0*6EATnWbfiO^!KtiFh!4xAiU}Dh) zQgY$&LxO`OlJPV|bE2~U+5iXv0|5p<0r(B5-bhVN*+eMgnVyz}L9k^jRwb0d8=hgW+8=fG(0%Fgm7rm{HXS)MZPjP?@^Fie})L z0X#3cGK+jw58%5)N8PC4nAe8yEDWEI zb>7zW1p!vGo(El<)>LT3K@zLUZM(yFs(53ApU5{^RBv$&sKD1pl68Pu%68-HwT_$z z3G@b4Q!s7ExR2FT1=tLCMEn9nNdWynRdeYyTN-FlF~hu%Wl$FehP=ed{FOH3Ho>1Q zWfxO{u%& z;Lh!{))lX8j*1xA9mci>C-E|f-AN#V>yyhF0EmKT&+}Xjcs_BWanFJ@=Q65|;B3C( zGv=Dmcz0!`-k_)Pwbx)ll-f6OK2O&~So(FO9a&hj@J(}fxNLs$_mxx8Q+u7v2DJ}G z!X%c!Re?OyP&{s(@&TD5JXy-iIn2qvfEq z!9Y|Q9Mn2(;dMZvjO3Y+Tt_Us}lnsr~RN9uno+v=>Tc$drN-%Pq2h~(@ zXf9((^+x&-(g=_fYTQ6E_@+US;}WiINydKsvo%36uarw+_2WD(*1=#c4b zXr3`~X$kb}P=edDGNpzHV}CV9f!C=`VW>~;^pd-4o8siVNv!7_jeS$;7n?0OPY%;~ zb=+GVafNr?m`t_5dMBCK%Lc9hs_uA;3GS>^{tm+e(DZnZP2`QDS(zW5!DrX@w zz9m2q5HUVU&bP;>lB-e25ectz+zIkdZQc@@O!!lSW&&_7Qe7x4BTn5prxpw-0X9ac z9h}xS6&oRHwf?x_TecY;QE+w8CLvthE1j108z3o`{ZTFgeN>T; zRW_{@mJl}hPtj<&rWNeF-@50W08D5OmkA2fGi~0;R40UtBWXD5Az0_<(M#O{Tuv7Q z!@U)^3Fx8E0I9e_!T8~zKv;3xow3}}VHw+|z=AsMIayixbV$=hzLMrn2SnCIxK!%0 zq45MANyNG{9*U`{fD7?s*hE<~rgzFp_*vnb_M&O&H*fyusQA0*=Ls!dCM zkZjxnEu2DOW)5XB$5R>gUti27xByGP=jf=u23-Vw5pM0Fw(A_?RokA_{vs}9TdEBd z>oht+-U$4Y90pn-Wmf(0F-hFHPK&V$l>uWxI2|Dhmf9aoS7g2(_|3gfQ^WRYx*NGF3g~TW>XGBG5dQM@|fEX>~x`ydh=26O;qQ^z>HS!O2`+ z-%e`mdM6%yk!x9WbY21qad<{lLbSCy?HUzFFiTo~!J^Y%lz*^mshyfYQ>aYaN=)5`fPba8WhJZFo%{e_) zt{6jx8aX1+$3}Vo0M3fnf?LT_fI}EZ{QMO856NN0WRtVBme6i#LohW|%_?oWnVVx( zynQmj*1!cnvu<2uz<($!a@tREv}92#t5xRZ zTY2C;RbAhPf0HZ@$G{`6+q_5Wu;LVgL0L1h3cx_Z0aEPj5gMaOu7;oFVAhExT=HcS z-8!f+P&_vlf(i{HNyZh{52_)o$mFhdJZ+dCRO^NUE{rJ+Q5jQVjj}1aJro9#P`QLB z5l#s6@>mkG(iep6B~g~QjrOWd0C7*?C2w3gkptCLxq+pIAsU;e*c?HFoF+bl8uqwO zOe&9fg2F)xn5jrKRPdQh0kTS_#!|SrPO7VmA+LE|Wd8tV zSN?s{oc8OV)BB)Zt4PmXN&#!A;1L~cO8NveC zXyma;tHM1wCV(1$Es~6RD#yU(46nu0l4uCbx&vQ91b!>eyNS4 zR8tKdB~=e~&Z*)mo%L>GJS~JkV_Hu*R81#_8e^h+oa>zJPTO3|#K_KwJn}js?x+}u z5V&bWq9#yl*>q@$w+E7%V6|n$qY1?5QRuL6hICL>S6#$GPH}9Ki{0(~l;FdvE;^q6 z56WVGd;k(kxQ}GYeNItvU;uMcX}8M>)Y`6fFS|0F)(L`C?p+Gjw3E?G>9{Z5(=PNt zKACF87Zqc{Xm5#bZEe7G{ZqG0E@}p)BG7uPsnK(XP^>LCbXCu2?ENB9H7FObPbE-O zZLORIe&N={%5{{Bt<^UAE*BUHuMB?p{oi%_JIJR00P01R1QGngDmyMJ+j!hCpH%Yw zRXQV{Q^%US{%W{pEI*R%K)1s4A5>`D#S)(I(Unjb<`c+o2sli2qXvHkNbbRyMAM7y z%Iz(vc@Z(kfDN>2Ww+~#d)aSUDG30`a_l~#|nf{=G4sm%nJkuN7TsQv!ay0|b z`Giw=^eZMzV5sJvXNGW{i1ST%mc3J15s#{@@r%jA-hWIhZj2`pPzm!}vfv}C3~PZr z;ZtDL0E5Py*80(WYYVjS`1Dr}vZ)HRrOb{>l~%F?XC6gV4D7&Psf7B6vt07>;Cd^^ zXAOQhlXu;fl^g^~U82e@0;@=llB-Y+5m1>vsr0RD*m*cg9ig8Tze%oK3m}Cz>#X>60#84C%LbGRh6gP}jOc76Q zQ8`yR@TUA~fs^Kiq{z`hs9_XL;R1o36F}sEaM5TMgSjDPXtY`_7N0AIjglFTtBHzY z6c(vGDS^)sDaPo5j4fwio?$vhiTF)~IApAjYe1@L?2d`W;$!-uIn8L8{{S?nJk#P; zMX<%Z5@-hw71(OApY(;J&30$jaW!7xW1_1;uCamA{<^N&Z-)GLDr5eezcfH>!;U_v z0?3>NX^GE2RcQlKezvB%0BA9Srti5^^;JW(agYB1X-u-Dk<4NtX0!hQ_Z@?H$%HBf zw!q&Hnk{{HibVK8%zCO;J9g@R7X9P7~3xIchwS z1^7E3O!G&x3wLv>qfL&7Q_!Z??KMNoM+_%aqhED*iyEND2606ENe@YDR~4I2YI*Pu@$Nl_(0)p55dNY#G~O0x*mrXci0 z9Y^wxz1>!;Uw}Ts70J~Kc|gRVcW4CHa#9hFiPaoqDaGb6oZ-*yGl_~lPz0|49FAf-68eZ2<0eLbx;~~D%y2q{S$y~M;4L@1EO>2Q+c_E zh<(WFsE^sp+a_ukr%P{U844lOU1uMy&`y0uZLr zbvKc`2S}CsgNVrm*a%0*qF64zelH+Q$qfz#}J;FWI+I%{vwV++EtSU536397m zTc)wLaOQd_sb&N=HdLa}1^y>aw`DO4SbLz1aCK0?|ooWDFERrx;EEXjQi5NgF(uG#Zb(n3B99V^x!cAq>hKZTcf= zpJZa2bL6Nj^dFL8`YKOt-htw%Y``~24M7roIE<0_-t$aPN_nj)J6K{JImHhn$_7q(8B zKt1qE-e1ELC`A{Bkv9>ATnazKa2oYZJx0f4O;_;2!80h1f=N+!B0)xEVnS)VHsC9Z zLy2@CEyKd3(gm}bPYrb`j!i{Y4_O+N$23eW;cP-Moa&k>o)iKEp@jqOI`{Sa3=I(B zK*9nQDC(ohR2>Qx08Il^uq-xHNe~yh17m^m{FXYbiBqD0_zR8X>}M2Ofi*dFTeBz4 z2SbS+O1bo!;3?a;m%J!i-MEg=p`1^rdfC( zN}x;s0ES)5s_h%$k_;H-DeV&*!T73F>e6c(=(ZDyq~0xYuE|dzl3eUN*NHy{EJmHY zTIEx?05TJ!R*OfPYwnWKq9NexI8$dR3eqRfZO&jNW8_->pdvZK$&@&gGtDzebv?Kw$eN? zmD?KARs_Hvyp=8O*Ymqwlye*m{FXEtql1Z*S*eo_^iKZ(Qgcok(TsHSS97?Jt)V^V z4i1cYLIfR8>Q#K%d=iCF3 zUL*DS9y_OCJ4B(~)9g~xxV2EZm7;*foG82ExREfhAp%Aa6NykDBkEDf)T}w77n*?k zDz7gv`Nv6Hs#5D+cdDgD)JsDniFO-Z4m6o*_f+ZBtZKFK`1d<8>cRb%Pfyir`JnRP zV3aK~PQJlCwz%;*8b8z>KSbv8ai7ckAkc9TiRx$Mv#{)yuFX)LgK5H;*{8_ip=2ox zQECk>)diQ8srT6cazyh_0Qgfu^ZgSW$e2wZ)E5BgpFLGcU9!`lR@&Q?v6xL|Oi4neBX%-A*6M|~L}S%Hp6&prbjp2ZSShvf9M=2xr&DE< zXiszA=S#6E{)I(e%x3e%Lah39!{B07I;u{*r^AIOlB~uQ4Zj-n1Rq8jdn53HURK}jz;Z2 z6;@zL1ZUIxD;rtuXq*D2&LsKlao#@C>9>-na{=A>e70Z#vyP)jst+|VdMb`+bTlR~ zQ}JxTM&$v>TImy%;08jQf?xw1VpO0)A2B~*iI9Vvh**HGF3N*d-P|z!Hg9a<>$d?! zWlrG2b&xGEWm7JAb8Y~_Z)czkHMel5x3)FJhR71D(zUI$2!Az3#?oMuE`Q!soLid- z{D9uKSG>i1(7_p3Yn}6C9jF|1S+xGs8ej>2$DH2#KyW@%dY%CvY_SyEMOVx zoL$+*@U#N^k0H}!a?j)6rZ;z9S7@l_hS*37mGwACGOL=E-NO6{RE1N)Xw^_OqR{S2 z(Mr(>7Sj?oT3UTkYBF_AYfQ;R4Nk~jdo@x@*I~3QpspXtfB}+)N1tT&8h#Y^69VMm z+LF-U(NuLo;Z>hWfEsh3MMrej$%!RUG=q1y1X}LVbD&E)FYy36u>pLt`5{v6J(jQ+ zHXX$XIn|pRs3*-nG`OzL+O$iZNa8e9s?%kbObMBk;4Nr6z(I|w;L*qxE^#N%;8koM z7K8Pl?64&UX*wd%`8^X(@#aR2rb@Nc$*{<{WmFBLGpv4Uj4)|A=(|DYCp zcB*w80fYH2*-g*MFOPKERjviS6Cc^yWxUF{lo}jHN~rMYFV|#A?>WF>qdPQHZZM)f z`s})Vzvt0J8(c@6a#dYuk>%u7Z#sXYlWjUU&!i>;sXs*j0QD3bzI+V?td!I5xHSN3q&PlNFQ(0>?7>pvB%K{xtvHfwEqAU z9RMiak?4soB%bIE5>F*-+FE)YmbIjwh@HXHp4fEUHHBCP#57KI%qk?Yph(2V3Uf&? zY0tTA{%Nz$yMYnN7eegr#5Jx3zW)I1qR=$_GNR%*r}IJBFhmp@KBW>G2eL4A?qs76 z1~pA+e3uwcqe_8sYN1Vy4RgZdtHe&BUA``J+tmj;rjDJ3<+GH|9}rRIfLu_A5+hx? zT7ADyvJba4trAM4H(O?N+e6$}Wc#m=pWcv{iwXVa4iksc5G*ICo05l(F)4Qh3p6-< z5yEz<|&sd2C@WGBX}%xEMe1 zF9Sr9aIKRHtuy!e`w{y6oW~_FfeQfuPS8Lo7+ET3;A^uRGPC@Hbz$hgX{PJh1054# z%-#P0Ql=Rf0hm;qU9P#DhtXAQY28i74R<9>7KSya4GNf}T*Nx-PgC6_Fu)lwox1~v zT*lE9U6aornj713cLTN3R|QMRc15re-8XktjFLGR!XWAld?HBzDc%HI1i}vL6vAob zniIo$YJmYY5eif-7M}|XD@CV!U!S>xp|t80Tw}UR86awOR@7``8#pPs+HzZx(j7lV z{vgfcUO*QC%l<-pL+XcGOSqsI9!juqn;Kwy!mirRqjdi4Gck`P{u+620sMd265|2} zf7HcM2p+bi+FMMm|@Czx?bKt>3l@Y}fP+>6g=p{OfY8OfZqksVy+o}L^ zL?(gNG|q|9%|v%Iu-bCCkRKl(BR?VFrssMD<}tiOS;vxh8zs7cRSwNaa?hLvNxiMN zf(@XV(N*m4r3?&!VOQ-8>9|@Z zdM8w+FAh9XBNI4Iv$C*dTPkUwzCez^|x)LQd@2F*>2Ppa} zE+<`{>Lo!rfrQe|B6)OsBSl?246Uz>UIl-D`5NBW#y z_ypp@2=WjS9aZBlRypxbQ#o1|>^BM;&^AMy2GcIlLUp32k zD^yk&J()ut=ttxy?Ee7JH7d$yO;uXF$R$#DT9T+AU&tz~bEF30I$IoXO_Pg%MP8HY z+tJ?2M{0dn4F@F0e$ETq&Q|zCU2VANi;2lHdzo+u!O?prQ)!E#IGVCfijisKwok61 zRC#QSq-fH@_ZM4Wxc*xOO$|8EE zzC%cuk2Q0gOS=3F3H(sxMhbDAR;2m~LC2D)Ck@Z&ni>hH;}hxTnp(i)mh7Eh5hRG_ab1)fj04heI za4vD-oJ4d*&tY>}A+7XZ!;4Ox5wU=5ehx+zQ0|JH6M?p4xD4v16q1ang$)SE?rOE! zY^g+SB!wR;A89X}S~;e*l`mA>z;42262S+Wb6#z459Fwqw)$X*g!hUzh5-ZBR2`tw zf^Y{!OH2?Q{{Zxu$GSsw#>^00c@zm8VCpfApH=kR@3SQ`$uh}5hxbh|Lv?XHlS%Cj z6UYMReF6+EaS=RikHKI7nNS&PTqKP0PO8dxwxA?`+?{?4jK5yU+OeV>hPR3JA zAbCR77&|kw1xkrpt#%U%70NzXKEXZk#)VFkd}o^7mq;x#bmW@qCg|$7krDy?LZoA! zQ|gBBK+oWtMfF1qPvniR-nHH&;?Bz?{{Wd90xUh)WissY2(j(7#-6L)a8hx{Ac3gX zxw96|ev1|FesCL)$75=0UPFB~KcejJiNlY$wFo4amr3R5n#R;E1Ev&`N+EbVph|fn z>tj?L(FS22BZM3@g#L;0ndGJv0HRh-)3YUE6CBV4DTND9pPyd+q=53BTI-tc!9A~j zSMPi)bjn4|0y3&@+Sc4uKA|J0b^>c^R}FibNNT6q>R`FxVN|70votidrt5Q@>Z&p~ zbqmQP;{c6T?xj|^Lv;Jo$uJ(s+Em>AK+dY0O;Xm=V*sYs>mp43Q)&j-9OrA)r;_$W zPPsGXve=xa>CYUT!kyJJ0_BgvRij zPYEpq{wTf1NzAXJ_t*k^H?;SFO`OoC_Bgot;Z>zh1QV}C+A5cS4luhjpHAaY0%tI) zZu~M~aEbC)SQzO*ImaCoTQQ>67EaLHWRxI5Da>({;u8q!hoW~52|z4`kDL#HJHvE%TTi8Z@dk8Nyv};tG8tL8~*x%?B6KXk&p49!i~eQ+Dt~w^4*^ z6U88fynIUfFRJ=4s`@5_QLZGNIYO3FaS(GDRb+;4^_0r=s@~n;X^|OEYfHsif&q*S zpwp<3oL|BnAQR1Yrqrt2>S)kqc2>4#n_&0#QeZ2Kmk^jtwYWv_i%OlEeC&J%`gh;o zf2Vv2xu4}JuBA+{pBI{C6Be=~*dhXRBdT6CmRc{@an0!ab1+) zOHYvGs+&$kCpE+b(%wn~Kv_RK9{~IT@tf#=1vfm2evRgw*0##0o`+O-uMZ7v&LGdS zu1{wa?UKXHz*H)^m$D3vH6(@D+|~wO3!r%o6?^won%Bd6kTWWkI+sl%Vg%jwREuba zwws9n=a9$XizEh?j5I*}7rOReO^s;Om>%iPb9^948VNzfwT&?a$Eq~yz2V`|+Y_K) z2k&N8N|b5X>Xw&|fb7nPR0tSuh}zI4c#qG=z&``uzTW*TYv0~I!dh_DO+gvp^a{Cq z$vk@cCkGA};Q1$z`n5HTpw1Tnadu)5x}nCAg(UUWN22<#aK5RGEtbYtXyFiE3w(r? zbyqx_$hE(kqG_}c_P4|)6-q(o$ZroV7huWo{y;7DYVm0YIVEpe*EroKa1}>~Mf|^! z2f#l8-o5tv_voKK_#na*p9VSeMYkB~w}eU#dkaD4QB-Nvp>cIkChSL|-P35xSpa#2 zC_A(r;hsVP1N*Mf=hJJR!HMYTg-wp9#v>!ic1kf8UnX@KjNlgu`+J~HSQYktBofh`qI;4UA>Xipp zacO_5r`gA6WH>X6oa%sRhPJCn{1YlUrpB6K&gq1EL%T&cH;vIUXO@e#wav{^0P+D} zOvAFhzmm_u9rB&u9rpPjfGSlddj9|j=$?12H-^XuMNXRw&ZWfjj!E0fvIhvH2OzgW z@a8&W-2VV{+NP)PL$J_!d7)fWbDskSAV5zr+nx7_1h3vybGV6K!F#V|^j`k}Ak|}R z{FwX!-#-L*i3oSDtRzM;IYYEjse40mIzp;yIspUlD7}U=f`Q$zIy_LE;&M)QeOI_% z#eEd|ucG(+AYnN`1C$KmLDm#cz&ipTFdqPX2KslLndm#@2N*r!Rs(?pLpraj_6yvv zW$uFZ`wYq>La(_r%5S1QRGpbvT5QkQ$I6@Q@Ehsga;N^0-VJDyQK;raLM>~6fjLzT zq_u~{sTb7@-Z~mNsq7|t0Jx9tyF))`4U%nuw}zo@7C2oz<0;NOyrD#r0ar93aptBr=!t~n0oo(EgYa?k0q{qBdiTm5 z;uAp;umB{K80N!|B{i#LjRJd(0_G5HkgD1&A@254Oqh4%w_CP>Zn2V!UgB6BG0GJ> zv?)`5FyqPgx5YZ%bI;dqe3+uQrLC^X{%1>7UQOwnOLR@@3KHdXXJoji77T^PF|bamR0St)Hp$yCwC|6Zj`2?Q?~2aM zXb}$t0iaKQh5rDmV~_cPDv73M(FIz@HhRJrzI?mm*-xsEMfG06d#`P$g~Sa^V_*YS zt3l*7RE~JYLL9s(xUkxJqxFC{l57B!sb?m*@{j1$aJmEUgkTW<>Yl*>*A0~cNG?rF16ln;P@1AFiI7zFG9YEZqAKLhB#tLU(2#9$%pv(%wxT^i|wD>qIgP7~t+ zc6bEDoGOibn+_a|l@}KdMC-SS;3D=5vk{^a&>BJfHeFC-?vALmFhS&)ZQ=xjme-;L*;0PQ)me7hG-P^($=2Ovp%VaO=7zj#V z@{0#EcQR;eYs@sn)xYjhI++a-LS(C8y=>v?4G7L6@V9L}%a!%R^p(_Fl{$KiXp7U2 zxOUw*tNl#PI6cbS;0>-?jGoifEmHZpaaUtZZ6=?&eh>tu&Z9(Wa>`5w^YJK^gi#56 zAvberTuu$#%>^9>TGV&X5G9M40Tt00+xeaR%ghYDOu@vXJMf0uz+7+LhI7m}O3I3J zQEjDlW=Ts~^95>%up5ZTvF;U`kw@V$Py&Ex++~S7XJi3&WWMlSS%kLl~%)^AYf|1vq8*A7~(aULsG;;yeL? zR|LC;+gsIfQKGJaS)x3`K`H39s3I*nv^KJU0{}OISgk%6PT#otuCmlBd6U`tLfks( z4UtGazyOz;e=w@SS}Na$)LYH#;j4{k=;GP^1#V~jA2bN+r;}h;)aX#bo*NdM0O9J8U zcP{f3zZWjCFB5b4hw45rP=)LJn!G{p#q~I9TM73uP-`~|%*@w+xRek5aK?r@Q?4@? zNq5!72;;dzE&l-QwcNFDd$^e{{{ZTi)X9l`Li&a34J^239J3=cFJE%;{6)#17p(ou zW#g`6;1v0sm?~X3{lZ))aeG)*W@6Zj#9Z^4n5{v?v>J<#xoI&i+`n?&&L;If=l=j& zZ&%zpsY}9^P}qCoFTdg~%&f~DF{e0}p1d`3#4S~VWf$+Te8CJ{Ke#OcpvS0& z^K2>x#@1y`@JFdpF07X`+;zfxM>d8i5%WVoQY!~MqE^>%^$2*+m+z&6XPb^~^t zAQY`@zS(#tvo`05DCye=%m@mW!xp1)0RaJo<_TW!+F|*>@i>9IeB2yVzTyC8;>;); zAgpFL$#8$iQDgHgh-WOdhB)|#(HR4I8G=mBaJL2OH*ChHm8oVh>mg{@qnJl52(2Kh zy+iXA$Y3bqre9tyssIiwW?LP96mr79Iu z5%k-b)wCS*4QZzNiAQ|Q=lx82hrucgU5O*p{U3LPa+Lc%ax;vXx$mRH&D{4np)gBS zj@+9wWo%JIG)EMvO>&Nv4IPWrN+$C>)3aKBn!Dfrgzx9O&v&o)`*kJB;*Ek1+}DVr z4fO}uZ9~2R8}aZw591@va?~^jymm(C+Tlb!)pPaU2$lHZYRbBG%{m%sp+vPo%feu) zM)vC*`a>G2lxYF@DFNQL0D)JEPtQq?nQ#*v&x|q{a1laf*+>lC@I}2R zg8qa;q0Omwyk$n{N^Q$6ae$F7zW8NX$k9XUPV<9hrgd$WeLJB5x%0I%Dt=42lINut z%#@jRB6=Uhx4yI2yoc>)p3Ksx?UI!ri<((Q&Y6rI;Exgm_KI5sb%)vMCI$Xa{9dfk zVip)tI%1xeJw2st!m&pq(TvEZ8-IDA5Pa^O6|z1mC4e}`0LC*T$3q^9kthiC4i+;- zo%V`?B`z@X&RjaxqFA|7MSe|GndQ*maR;s+kTIlU$H7cRDYiwKm7wc@B`x4B6I9MN zy!GhR{2v*1x&aU&F~qlEa;8<4_sVUTl0obHq9+6w$LPm~V*bIL=A14Kn)&Fv^aBKZ zIpirvggyW~nJj#>Fza`lDf`R(9$Gc_$F$;lJu`H92b zCw|=RUSY|sXYE4de+1@7jG8VHwW69<{QHFyB0DB&@*c6%G_CvT{~LeGU3rcSm)EgQ z0&YiCVp4gV-)rZR!hRPfo8`j=J;dCvEYl{&GVC4bd8xGLY~TIAJeZmEXDRUQG5;aI z)YGHRBAQYBF2QBxtT1|MZ)vWMLgqcP#zUZ}19tHGCN-!qkn-SvskHdZe^8LiY5cJw zz}GjKeIJYCo)45QP?Yr+AL*gJFT|ZJ&Mdn1liwh_Hg`&r2g!r^9{Yq2efj6&mH)t1{l1H*4L&IRK0BgQ4ps(!OPcH3S@m<2VKpv|w2 zfI~`MJe?C0*Jdn#T_ZlF9v!4I67wGPlCC$h5`Kw?H|k*t3tg0-+YXHIT0hl?ui17h zwfnxCBuO?au^80XLBI^eGmp&!^PC=K8>X+*Z6)6lkQN8_aUbnF+zt+Bd%33$w0co^ z*JE3%qOjWe6t3_sQ58qg6o^(+_KW};g2?tAJ2R~t{%cXjawy72(oEvDYKax<3NyNh zB{si7CDVFUjj@#)XYq;E{E}OS0F?!b(a}F@&A*ARri{q-iYiC3nk_Z>X91PoYYhjs zeqUxjJ;}leDL7FtKYOuT<_m9Ik~+@q6#vU}VFIw&ac{M&`Cyi~%r=ye6KLHpa&WqN ztsGY=fD|70A+wb`>PLDDu&E(@cq;s)OONm$mZow_O-3H()s-^ZM(((A0b6K=d5R=i z<;XQ*(=QyKE*BIQ7&xBsKdaZ`RaPHM+u$n0jJ(rZg8yW3wpI4<7axreD=9ow?NA6N z$cd{ENQ?-(r&lhB>hHt&kB7(`T|0_x#a=87X7+>314vb`NavpLe>{1AWt<~5)Et+k z@)lQUEWrQ2SNlJ4g-Q`W5F#JC>tzo$dPb7&23%oi=)-u=*K{B6yethoq8rs^$E9Wr znS8ZwSPS-w(2F`50|{E&5{Ti3V`jz(h|ohXSO#qyt@pzVf#KUH-ZW+j&Jx0y;Ceau z2QBJ4@}H*ojHF{8Ww2~%C%j3IgJf|QQNRxAsQ+TB)Fk38Fb zHycEmqrBasAMOnHCE>K^(k|TDDaklS;iuy5OgDdupAYeG#qZr{u|a+ZoBT4!xU?Ac z&E3;}3L-dlukD7>wuKX0njYFHE2}j6QTxk<1-#UWEer911MOb_z(&jm--#|}+z>D_ zr-#@@%vHJzyF`y0vca5DlfaV~me_0g^sj1i4l6bBXAx?IsF73G3DLAziP!R8@0y1& z8ChL@f8tnt>Nk?1YLw}mw?KuOtD0Mia}=j`hUQ-$3EC$f-yzY*`{*?>VU;n{-J!F$ zi?~|ZTQ`D3a+ElHP`9s>&yUWg!qRupX=C}F7aqmMY@=q53PA7siORz-5V(^Mk2}^_ zy4;H)oIf84^@()jA1sUQwj;&4jrwM?2K(__PxWs;og%8v$@hhvio{ciMMtIJ?I{cX zJ7?645b|{AUwRM!@|;uZd-W>(AMAe=CCM!hi(6)U=%T>{1tISiKT+*o(P0h^IBpmx zxbhUo+DN-&R%Gre)_SorR-vZ&ozC&;=D9`ZFVNd8gPM+C&sxahrEQD9!ceTRocEE$ zai^YhywY-?(s!G)uwezXDLYXqTfDY+1pX9VvF;c#BIHTK6BVx@SA#I5r?ZPxW`I^- ztl;c95tO$++a%hq-QUu!4uQb2`#Gl$O9n4Cb-I!jrvQEw{dh(CH@3|AA0&kAu{XB0z$|K*bkpCT;v|jvlU!vZc8Oiq~<3oWEVX*lq)pF(;#AJ*mgcgI|E}NP&nl;&+9z$wiNuuU!GT?wakJxF%>3!w>k+Z2r!UY zvAfoArGUuu;Li_em+PWMb&GLGA*2vc7W6eWZ%e<+Kzr?2p35bkAi=8!dJ>k}d1ipk zN?gb2oSD#4r2FIpJ8iER;wxWebM$|-`PR?U_t8Dll@xH%w`Huw6`0cZ{o&qPma62m zqtK;u`gihibMI#Z4JOZkd0X zT@<%q%5)Vii`3SI#Mrm-67@dCehpYZ($*vUuRFt9GJ99+zqX%AG#dCw^m6V&o$=O* z4VKgDN;<|>FN}%n+%|ng*=s~a%jiFvB@z5z=5JVG?hue9j%ED>CS8&RMdlv5e<58% z-*rlXD%`2eb-_CtD7&*O$Dk6JcvRKG!-+uoydztjzM?|Ds1))Gk+^>k z-?TP8Z!lR`Y&_j)I(O3nFE&fGBheoJ#FV@^_r=|+fvUYmr2u8eh*<_}SR&V>!RmCm zr%RdfiM(EE^3?|Y>yS)xXn~#&K41&}*(Q!MmFS4#zQj?M8hoir)y?YOPev5$Gb{YH z(KLr&{T*)q^rZ76K(*{IxX3QMmwdhAgpl-oH}QQ^-t^G*+ z&ocDn@P*+wD)})(e8{e8%FAe^oz9OQ^)B9C*Or>oBd7iSu5pgFjGuJAW*BU`8p5#Vk z3Y?ZjAEOO&fNQrRVPeyMp#H9N9}PWvN$2-&5a!&KaMs^+0QCV%lRpaMC=>UjA5wW5 zC*w?T3a+6%v6~lXBi@k=JN2B&j*}iK@NhaMZU=3A9IiMf zM&o`4GJ9&}8*01q4~)Q7pd9q!0?{p=sYWx}Kv5VL+lH)o66nyQIVJyof->1fP$zC9 z|2V_Ke+-nSd*eMo4NB|ersLqYxU>RHESUOjNn+=abhzbUOFW|g<*~a~6fNGr+sxIU zH;WJO{^gNUA}Z<>P=OYx&hTON7EZ<^XQpNSClZwcUrSKq<3g|giE`SKhEfC6fsi;e z{HcC2qNl#&T$vx1;Arw#p{XI;u=FtC1G&N=%2LxX9rJHQ0m^j2vMF~~NdKIL!JEH4 zIcVo@tB6NO$^G5nmY(3tvjfMB z5{hWa11id{DeX^j_u6T?sCPAThO+HOKDf(n@;-!0e{9QsRC>&YX|;TfT}~MC>ndC6 z#-s1(vUmb+jXIy$slgqHP8!qIq`1;q4;I{NspjGKO0}w@&gclDO=HU+xh;R`u6L5E zm`fMZgE(^8=h5^8ayE$;jR^Vmqpb4`4C2d75??7-lhQne@|st7hjR?KA$al$N5RU= z2#K3$rm_eGBo4M#Rfh zkub#GVbq-lopWk_XFj5|a6$A@F^{y+?qVV} zRfaw!D<9Gj_k|`uKE31g=XWOQwEuGA+W<>;qz{G5vU&5cRj5T*mXP=hqC0z0Cw(HbPfF|AkmB7U=;0(QX`&`q zb~ZlpY(5+G8f-V0>sH8=+&bl_*VH1RV=!@I%Bl>HrY!g|1D-7qgSxY8rDbY5;&zFg zy9MyDh%E=sbOMzGjmT&CESWqX+pRs^W!FNFXxaP>t42^mN1R{qal?^p5GHW;SH%6s zS~;f8Z+nML^imNzyGb@KNzPpI42*Z1PIhvBVn3jV^pyh`H5f8Svv0B=Lz!1$WEOAEZ0u> zMT}pjxX^7?rel~1GI&k@KgTr-P+tyDFWxtNDPJ<#1M=@Y(*8Pn`m;%jK&T&1A%EQ{ zzzmS#`jew_|9l10ydL5gsJ~Os9rS?4)`iq%0%ksOwh{3Y3#Ext<)1L&0Js&VUp*ZTk8z853_1>NfdWLm(|1U%nG{njRo%Ijk8um!NC?%cg~GSn?Y4p%Gtz z2(MSt74NjJXI-Go03%sZgT|nfBXarn2a4<^4k(NrHIqBFTknxf+rY5W;zAE*4-P0) zJ40q)FZ$5a1GI8P6#2_TXpyK&LL5<#4&A=yW??b8NwjAp(SB9T@U^UOK%MoegvW$P z4>0f(%DxkJoz3aW*lhu`q@NZ6y*y166&KH3?AVYb~i0}EcOi?3~F1Wih zBaZ!kKAl0x7E}h!Gv(o_%G89}oTtCQSrGe!Qy?O-ZOve}W!r01j~m65D`V4Web>9S z5D24FcM1(L1de^5-1U+p7!zYSM~{cI=p22P#bqzAG)3B)+u$TL8DnVYgO^qLkt0HSDw#p*c$rS2{QTSvi7l-5x}-Sfx$RC$W)gL`E>dbIGbk z$2Mc{?%MQ;G5#|fS`4GxYM9$C#BVyOet&roYHX13w!R3lbBx7MAz4`VFd)o$+!qIy zCW63L#Gs8Z-Zq+Ee7ukQU)wQPZ+2-h)O=RD8sHAwW0m@Q-;VAQddJ$LGNHcfD31c-J7^F8;) zXH4edOs>FV^Q-xq)Mp6AD(=}1R#u0K-p1S-1S-KooCQFF*Rh3{oT^(lQd;Lz#N1A> zG;4;fVM97!1uLdVYtkPZRbYTW=efN5;+{*o)eOL17CuvA7g|E7~dUtyxiEBoR08&Y>I*0Kwyqz3Aj9g8@Ax3d$L#2?vfB=dVAQ3`n_zFY?q6r+N2Ddy=0) z6lmj7iT2`xk_~Qd`pLkNtv#&LFIK>q3{f<=g-SqRmNJt3KhoxMh$A~85%j#B&6(O? z95I%0*=puHIi6-#)QEh^L$(ABb`A4#JWVj^RKkop?u*;w6Un*XDntN7xM;sqyba&b z5kjAhYWFd)%Chl(9B=$~m-n(T$@h}`XhE44B}g}EA}tqTHyE4Ehs+z zv^;P7ht#y2BcA*8xUt{xY}y7YkP@Wm>f0K6UaQ4MM{o0)mX-4DR{KPzWVy`m? z5SJEQxe4~8^+rsemC(6{u9`-A!%_3HBi6BR|)704iL!CCMv zrTUrm4WxG>Ccr4~r+|KeD*6ZcQ814sYC zr;3`^D?gW3fru&xoVo9*Vlzgy89EnR*XvQU;8%1()@M?@UDMKCzpBx9{tF}B=ToT2 zUPWqC;*hk13R#aba8hL4nEDuRQ%wIMB(gbUG$sLbCGM5V4@XZsxnEq#b-FKcqLgng z<@ixMl>xW9-q_P<08WEYojT*}GbWPN@p6j56(q~5d9wFzJV)Ztw5eeqYjEhXLyzh1 zdO@}CNZR6JC+uzwch0+S--7Cm^J8YIQQoUGRjLuE92olFl;Q)irN7MRkYUOd4loqc z58Vc@$r&rMqb!l$4^>sTomj5fHVaEtR0q^gNoG>!s_U3<5{P<810rzb*Pv*sS>2cX zkpf&2l;xijTh4Hh$XwZ>jmeT1D6|o8*^4dtK&BjgQ7851r1IlD*EIcT8DwNycv`M= zKSryoGW##j;}=a0yV?ij1%&Xj72D?a&Y5i)cIK0{uI<%Pjd}aT{bo8{l+iXu+}{dp zkz2ih4r5=%+;t&=3EsL(wLhnKf2xA1q}$9auGQbxz2#3_Iiar2#+RHO=>O5e&Fy?3 z@+C+0Y7bg=F(WiV{dHiDc9TT>iRZgb#i+}7U}F;3X9_YWO!(|dW$-MX2Tu&)AvJEw za1+I(=lGp3fCQLxhSvtQPfB3aLO@~=TWko$9qC99@Nrbnn+3>-1@_9mcHXOz_`HNL zdz;Qsydf3s+uK=C){YeP=*MV0jIVZ`2*2GfEyiL-snAD50|qq2wh6P3`sso~WGZfc z)3WH;k_2YzYV~#!U2LXLblcqd{JH?kdb)QgWW?3u_!a_Ev+kG(-YLAnTNj&QnRnxo zq#a%144(>2mojgk!Zt4>&?IYN0)U;%96DQj>fkuW9b%YfoKUu7R3_% zXgc(P?;8J~DYG``LW8?z^3~6OH2is5XCjOL#^56`XH6TUA(-ycy;^laoVFM=v-`<@ zgVGtGPrqETRil0(3p&2foeiP(07fUOqMz-P586d~-%l9v*}cn>|0REyOLIigJpchu ziJ8uQR(E2zwt*Me!N3S0ho8YuTR0+8zTw=PcOdrP)-pb;o-gYd$8HM~+cvtQ{h1@7 zwE|Q+BpXa2Wq?IUl>HVsA#klW;~A{Inlz)1f4bn`4L7E(;q)m^#R**}pS-9!5w#9A zxQb;*?hw;5lk6RE5&Q_ZJa2`BIogx@MV&N=uTEmpg1vo*58-NauKUJx8vL7jpguG2 z3?q1{q8v}njo9ZF^nz*qe!9NSpZeb)d#VfSh0Ls0v!2U|7#?^Ze#YD#!ts5mkHxz} zj|=|Gr8;71X8l`wy$_Of%0e3paKIl^z3!co_Q(Dg&orr)E_>zGP*{MC$|M*1xjEH2 z19^7Aiu^Sy@9{;1{YEv>Bm!bnUWD%k!*Vv$O-D|==>CapaY;tir1k32IRXCax)}l6 zs8*epbgQP&9O3#Gdad!2Em8yKymff@GF6Dh{&B%C<_g`8mdxkJ9SxP@cuNZYJ9F{P zZz*PPwIOejgPY|0^|jn1RLo6Ln0wWeXphiW!d-SG*BV{c^VUQv2bpx=OJo zjhFUq?hoo0FzH&y{?oIE)iM`HLF~+aKmXpqOnglT<+7;E#WDV1eBXsi|E8j26t^y1 z>L8ymSs;X_t3?maH!$1~f1Xa9)au{>+OL zxid>*f!tmj3HX!j+e@p1eS@z&3pC6Jo(ioya7QQEdfa^hln~;%>SV?n@KoT(2wP>IK;aX~3N4AU;I1 z$=q1)P^+@?&lR+nr~PU4F;sMrfn3rb7fjoX2{*S7x19bgx_|HfjH=Gn(bLYK92HJH zn~TBXu1&;~vcdA^5Lge`Yrg9)7igL(y-KR(kn%%-5{oIl`hW6up4m`os-jR?fd_iA*( z^||S^YglI7T3NpK1YfWL;r-jb)Fn{6VTOcxhIrW~k#Difba?^8Z($me=(X)UhLDwsS;42-MSKFkbvwoI3l?>3_i3 zr8$?&a|jvNAf^qZt|#|;gOJswueZk>vk9#kchm22PrsjL}Z@X4Bd?C7)_Q4|AF zeXipulf>n7pt2iz(_wxB^8XWB7q$X^(o6oQA4v=^=26JM*HKUC;d}I9>C!9@pp2%< zEq<4EeWIpy&?a^Hnc2`krnAua*vCg_sU1Z@ki^h`8(R*mxqG2ywp6@wplToaD9_PV zg&|nGj~ovU@f%N38-5&_<$0{f{qbD3RaNdcCC}`x9LRU!NWjsVR;M?CKR$D)xSrV3 z2U$gIHRMYYc6gf>66$7vS6G&7Kz`e4K~xmS+)z!&DLm-rx6<#%S%PjvOIAD$ho$5^ zFc_{Dyw~a;?>DQe2U^UN%V1~ZkUx0@wadoa-Xgpm<^OB7@gV`*Lsh->*_8(xU zr*siTr;ao%FoszQduWRKi96VZDwUl%snxqPYNo%)6pfu7O!vLMyb0p8$JMgGJb&5= z9F@s~D5FMH5>#t$O!br;GboM@qwg>x>sEGP2e&g9R7dizlHldgpCnbwUvWv2ot7>8 z`WTi_dU0hfQFP{D%P@~Jv&sg-qM2bFV4g=z#MA58b`vV8ioC5^ZGRhzc(-gQD{pC^f|L0qOJVI&l zq6_IgXBiGL!j&%XX+d|s7G&OizuS07+3!DS__|885j9DGJP)j+@nOlqMeG=d6DTF8 z?iz2Yz-iaQ&thWn-?`oM)$R>na-Q;NMR*x0C10aUKyS{Q3rT-f)vU0N5meLILErmb zmh!@$zT{j|WKwgAVXk8lAw9Z$l_4>F&ZD~EgVk>1V(Y-bei<}!Ro20$4zoDOL6LdjRD#q5&dirVi<4PQ-Oa`VFLDs z-uHW~D|$}E8f7bfc?^KcP)+!{5-vl;X&>V;0t52jzahii9Kq*iP$|SYvWhFqfT&c# za0tUN4LaLl^a)B|ZUBXD3yY`23H$6S={#4;OApxGY$M@PE+`FVA$Inb1$}+z1;Zj= zY9=>4a|=sA5f?Q`gjAy{m`%MWjgdcGx}mi(e~mq_32qUar4S*2c#^{(?U`)I25lch z>?cr{s^Ik1ie?f6Zh;^`A;2hyiACFR+A0y!jSgwtoF=jO=|@Riwhzrpoq1F6+vJd% zIQwtC4f^)RxE0aO!o2E(vtPs<+n5c4a`$tQE^r^rP-Xc-27+ZwaL#idB{VTE@1J%N z9ZhBk6ByySOGln7ru#?gFz!*hbIImQrxx&j=YF`!uga{4zli1GX;r8kw%?Ks|DY6j zDf(hqVlJ5ugUTueh=j?ICXVm>l_uu5^HHarnfmaFogTZ%&oi2E5$S)CNjHY5)VwJZ z?h08Gs97zAHw^XMtH4`P1UiR*y_j&`*=Oy5I^~N05^X_qR0I;3R7Xzupw$yK@z0bCu-M&#^9wrMYSmZ_+sRg z;f7vunc79q$(nZDP5f-fb8Os@O#UDM6jIWQy{nWZUwoR;ZHk$^HH#UWfJ&Ige`gJ4VB;QpP` z;2iWoHtqF7Repy7w95H4c79!k5K`})4aj}txk6iPO+t>irm*=sL;aK~KKoL)XU_We zeT(B7L%Fbo!5@t}yJf#$dXoEYalw7s={g$e5%cEG&2M+_Ugro;?=kqnKaXI=2urdB z;@GI>FwsJf5wDeE9u==*{6@Gze!+Cpru0%@>(6|FbK`^&@=qyN_{o1Su|oK0CtTCy z=J@S92yct-5N-Ft7k5x{UEa`g5Wdd9hiL^$-vUp8s67;1Oty%x>EoYpGUzi$gf8c& zDf#O$KgR^m{cHEM+Zm;w8pSbfXtE2?%W=Vy4`Q5w{uK?)vl|l76MN2nR!D5K`!H2_ zdLrgmTq+TKM+vIs6H4v|_j;sO$n z9Xq)pvBIsKm`bYR9BFvarol3@*Q!VrltHbNFu`yD$HaNR(Z83SFdYXCr`mX1h?L-W zl!$pw#O(|a9W`*Rv9kEY^+p5#=X~huDOpRJgI!Fm=y(3icgM*QF3b0?SCzyfs%crz zW=@_ckvaAjoQtXHmM27{1V?&)?bK&((6VgM6k3K@Z~J2x;agbRl0tb`)EWZ#jk1#l zg@$8BW}o|wCYtnwzHRVd_`|obAo;BX47aLZBp~~%HZv?wrYZ6~AommfliCDs z?|isUrOQg^^yBjdj9ZzisMeOf<9}Nxrv2-!U)H0_!O~d^H&(+s_D3 zNj_+v3=rYfFtW%a>I>(&JAPU$0G$^#AMJd&RQWhx=Z}|a*jZ5K0ajbnPdIKl!w|kG z+)rt}qcr}=zu15LUBpW{#-PeKnb-5}vZ7}-&R*fs8sq&42O2$f{Z7xLY)Fa99!zk1 zr@MwpBUxbTbV0YxxxLc&A3RJ0ES!0=Z=P<2@^`;qLms;RqZxu`OJzr6YF;q-`+rjV zz$E+oIV&>aPcn|1h4X#Y(T>|qo&GPxj-yamNz>{Ip7|KeWsYBHgS0 z`k{4A=XR5`(DUtMGBbP?g1|n-ik{Wd>XMkpk8%j4Ny>N@%T+btXUVtD65SrW zCfd3lNR`L>5}1kF*Re0%VQo&s8WE1^P}vSQ`}REd5EZDl6-Nnr@ueqy&A96t(SvH7 zxgY|0ZO~AzpQZCL#ea&_a|eh z^T1fW{;neC(ogs$y&VoHb`GZTCMfG#p?d6r*EvIKd{N0{nvlHOhkxu& zJIUKyB3{1H!4jL{w{#o!?}*&s@s-CK8VuYeL=jAG-)f#g-%0=k2%yFt@f>{B0r{m?t#K+I1XrK9*1h}do4>&|q z;O@J+Xa6zQ+_TSFo`&c*=1$2XF0{SQ_CQ7S=m6s17AqB?QXjIF#p_(ZUTpwBUCFBK zE{kutL~aY(3bDlEK8m5Fb3e&!3GrMFbtVPZ;%o@j3S4P0t6*lC#jyo z46*=e$HB)#lA2Yv1m8(}50ne8SZV1@7Wz2a0%hsgeO zjdJ{TgKT(r5lgNJU)}oSUyg*fK=M~$TydU8$b-VyiQ?mz8mbS+PZ=CgCNke!pdHF_ zt|F!5JxDXa`?<%S$IK0%9KFUqogn1ejf+4(zBAhbYU_OY@uJu5_8XDMmU8;$;W}sF zdS%HfWs>-gisv^Ww9~%wB7*6;6pame8rMP8HR{4&^3e2Ivdr!5=Us`iJY+)DyYAs# zSa0seHX!O&{SE0pC=*g=VXq_0)+5V^E?<%@QkW1jDunGsStk~4l%t;2_PUKoCL6wm zc;}Sdi|ywXE3V2>_UF{6hOHhSJju5;IaG$vVnL=dR@d%s@6|Ir*_ePa-Lj;GRV zV5^^Ls`$^W@kBqa$K-z9WApu@(wXsmQP{x8D;Gjg37)_6EH&~w89?woK>mx}N(=Pk zvQPOs$6d!BUPnG^F7T7)@D8ZnG{G<}OE-2aODpbz$cg=286r>q46l~}oBlds-2 zQUKy8QhIZ&3A?|te}ce%YlxO8(WwcciGDH9nXTp>I^yW0F4*)fbwm73e_F@z`?k}3 zPk0N@zAb}>0@r`UEM4q})b~kScqV+#BFvcQBSSp4Ww!__rjiEXRTemyhJ(XbaekZBN>*GLGkL({O|gE!B*+;8#0x6x-{k-p!m?W^;2R2 z+_dDe>%|eHfhdh*g8zk^oSWj04JqsS?~a0tz@y=>>d4cvwqnrt!izcxytEC*#6TRV zKAlU{Uc$9Tm{EWVlVOEHVd~Xl@WGuK~ny(dhWVj0wj+9+X6$@C`T zr20}7?F5nB)q=S5t!Obj@j8%TkqGJVC7LvOv#i8A|s%m5}$2sg=L@F*iu9_ zPt}@v#?RdHHO1%3tm?|F>tPrH#J7y30=!|FLh@xl}8z& z`Ke=2xo?a3CPR0Rd|zu9l7M>&AX>ik79Uy@Pz(fYTkHb@X+hk6c1aDZiZ3fWs!kut zf3|#g-B?+|>Mw699%l5$2eAMKvNC?%m;G&2JYHygAWL7UH*{c$5mhckON6C-`sJ;2 z;?IN+_G-%OGa1u96&;p-rWe!FX|g#ykMgvsccef1N#1r%Jue(6YnGgjLr>?5KUf@Q znnq1p8|;<+k~?l(d&ml^jJT9}V0vq@s>{^l!RKl>kxeyB##az=cmj`)*e$nZ9d=DNz_a7kmPQn+uwUw{zOAi9?jn87atdkL5>N3yYjcR{y ztopi~`GfDi$c`n`ct-Wub+CZ@rk3u?-#_$-T#TC?YkXL710hy&_La1Mx<*1sg$lBSbd zY`v4Hy3}584RoLto47&Pc90x>NVRZ4d`Er=87^{;f407Jlq6ZZaxYhuo*CRV)7FSH zTSNX)xK)^YFdJaF@xf!JJrWjeGJO_K8+UIgplr_I8AdJppe0tp=lYGG*pRWGRMW+D z<+*0I!NyTy?v_4>GPkwBw)_{Ipo(aL-aYC}pPrb1NKZo;qXv@F%Q^-=gRKsy)Bp11 zE^2e*@@WO9$)MznXiS!$apgr*a}VqGFB7P`qDeDhb?hISUVRFtrmrWH8u( a)r$ za(ST=kj4!*CyvfGaBQUBltAG6=`2+v4@v3d_mNXd*PCu~S1q(JJlIHzs*Vc~F1%$`GkCIdT}F|%O~I`jHl?EOJ(MvJaQA04-@Xe2 zta~nC!gJ7eQ+|j*N_R_?n0vn*o|Uh?Ip3OdFbAf2TQnTY9l;=5**vpcUjKgqxXE9p8f2eZ*xr*wd3w`s_DSzSV#suE0YEH?4l4Wen?cjrNzPin2jHwRZqC+nLwK+}>JKnAf(jWK&4? zdYd!0N>c#CIVM*(OKb}!WHj7no>Dh{9lW-QN~JKw+*08$G#;dgE6XV9Z0w;~upoti z0w^|W-9uvoA?~1h9K-fxr1~?#b`xxjE0#*>CC$mF1t_~4mUN*S1_e8oyAsw|QCX%? zMfRwzW#wC?{qAF>K20 zPFLtTF;F^|V}OU9!f}Z9an#kCzIcW5^h`Doy5^d{zHEub-=T5zurv!^2FzS?*}szN zpLaIIs-!bTRoMr}k~Qs?gTn8aGs2Zcd!Gf6Oh6o-cB}Hca|CO2hRMc6G|MtpvQct4 zP6&+LY!OsXI7{%j7E^KQ;Xb;0W1_2o#whqyzk=9je_fBTJUsIgx}`*%Th5r84QBnL zhqxu!O6qBkrswCK)mpIiPURx6+ws{I^?!LzwtoG~Q=8dvv{S3iAqF4Wxk%<;h8GU$}#_2lo#et$GODbgA9ez;(07whm-q}6%|3+$keKp=8tzapar)r@F=I3Y|VDQRv1$rAmu6L=~nYl002MvxG9~(L-dgm%9gm&YzO_c1tpd{zLNhSc6kGRS-|OktWjb*YWUEHNdPHam&DdU2 zlIz%G`|USJ(B+PTo9D9_pSAZ&ce)aCEw%yBoLG#E@@zfFx)B_m$*_%S6o6S_`Vvh< zZUhthbU+TO4p@o-7+=T5mBiki<&A!R3uLsa{fPZTe~w+wS8YkUL@A8lkIe=^Y3Yl$ zR>*<6eN6LsZaDZCgh*ISN1g5ToGnPAD)3oE!_`O7+xmZQnj1*UDXuRyV6>k9Lb6 z={=LZa3XKGXmAsAH*|Ry*;%~GGLh2$GSIYWpXZ*pvVbF8H`@Ril}#adPo8Yj))Cu2 zC+;=ID{?xM-+mPka!IgJg^#g&V?n32h`mI{CI*NnH{xnE-f{4*r$OtRB&#Z`;Nk=xn_fzrcwr6fQ(Rwcyr*y}9Ma8? zOZ`)08aU;;9@4B1mg@?6bJwXtI2(t?Cvm?sl0{N2yr65pB3kctrrTR#8;hl?<~MBE z12(&u_$11DVywFV5cc3KlquVoxn)V6%f>EIx>4Jv&J95d5zc*aV_>dxG*XO`_cKw7a)V>*j2*|JxMFtg|zUBlO$rT_qGf2^DbGb|LLVQN=olVY_xAG z9}p3kqeAl4IGp&=AFH*V360_=f0GH?yR)E|(#gvsGBPpKk6J!|GI}39-5Bz;XRk0Q zt<@E#$aNSTr?PPr*?i?0b`!fSR91EEj_5}d!-v0+UO@dX`eMQFZoN*e{w7P)>JO86 zWR%;8zZ;hjCjKP$et`eN;cVr7XGdp2RPD{yveBY1Z|{9OfHx4&8EAdaqOA=SFPzV) znO;Ta&k*C~;-7cRGLMhH&x`*Dbl)AQAr zsr@v&ySW{Pg^pw7rF}k}WAPHs?Asyo_895s-7)U#N$Wr{?*QJ|9%E@hitFzj-|`0IG$!1Wtum%oNJa|FL@ zxkR)ut6p=!ySNptJ^7gUF5>eP>va74d;9j-O<8aWqW!$c_d+{l&h2Z1_a4=cyZNM= zrwCWgZ=mRz3s|S|{!SO`{{(o3x(>%wa-C@AG%0?Ib7G2De+Wbnj}~?K&CSv2ijj@_ z{{_Cu{_7u4(r*^OX$Lcrx&rFn97$!eY;QqZ<_xF*Lk#q&yozj7KP_@k z(BW`n75#r4AUJAaFLUqJMN;pmohL5WDnFR2h&to*>@a~EMFX-6)d`1y0k|dOnNGe@&p+uPd@kbP&QZKC%UR+BxW; zoNCK?|yo?+z9LhZ;-9ND!j$C)5$=Qs;K*aOHToCDkVp z?$mAg{0ux%uVwAHIavyx8LYME!N7cV-Jq$t6 z-yOz}`p(fgGo5cPQ3BiX*JQpVHQ<-HzBJJM`E|CdQV_Gc{3qNuyaaA?D?}T=QV;sH ze%di>!K!0*94L3~*)>mJ=_#lhy;~!iN2K&BOP=G)ogW3a1#f0L4F$TNu&_hGd#56t z?5dL{-Fk1not%{L@kVW7miBs@Jg;G_H}L|@m+E&lRknvb)b-!*Nx9Mr&yq7&nc^AF zGtk~tY>dlr)4O)djPWM6Y&7WWjmf_n_xdR7d39qUx8KC^c)a_Bdj-9Q|E|0d(KflaTXT8LVWow0F({PeT33O3ze7fQw%Jg6`!5+ z7apYBhPw@-fw!KlkcT@!fq-wNx+Y;>)cbcLS*i%Rh|6ze1!NwNpI0rq;5CXB{m7>j z-NUdGM56RaLtq`#8KZE%=PoBa0fq(XL`WvzNtT6u6pUm5f_-JQ>XA% z2H1=}j90&`twPa_{Ye=7j1iwG!Rzlypki|MA*gXNH zbU&6B`PM};nll&})Q`JXSu^DjUtHIV!2l#)YWbmSMrOOB;v-CYZCJ+2tL)p`WB1dL z=^KrAT70I&JwytD#Z>W#K-b5ot6cyTwX0088oR#|Z}=)vhg0tQ@`g{j)THFYbe1)) zU-Do-nWHJpsi%XNN|%&!WQxJ%u>bxHZJfl%LeQbY)kp&;F@dsn1yr)xpw!5{E_Vo{ zHj(E_e(O5B?kPP;^R6j%x~4SDlzxM{A=XkZZsZ1bOHgSvTyo_3B}LaC(BC?@f*sSb z6xkk5a~YcKzQ+bb;5KDWX8ry@a_sXy$2NW;o%_eZA}NP=Mjo9vUPsz73A={}m5jYA zKkfw6s^se{UJpEzgpyD;gG}83Nv#{Su;(5kel(Mb1Dam77FT=J)=p8PmUMbYHy~^6 zedn^3Vow*rJW;8+kY-qS`&)zu`p|9{6EJl*6l7pJS9)XG!T0l6@DRhmz??_SOfY-A{6d zQ7gn)8%c; zQlA+%w$@|O6h@UzCO%K*1g~LvexauhQ%xtzQA`DlU)&*3Ka;3aQaB$ut!it*1X^T8 zLymR4le&TV0i@p6Zod%k3Z08sNWcN2;7f(({rolOYu9u(sR7oj-}5@C6{k*Uc11_E z7PSB8A@Oj=qj}PqxDL0Ke5@!TEwSq~FTf_QqVyO^JF0v9OV z_*1+L`Mps+=AU1h_^hVb{$2NRxktCxUq^E1v+hU+)=S|}8$+g_b$o&{7>SFw;+V_L zlO7no+FOrB#_sZH%r9X;c z8fRyumkg&asTm2fVv= zT;E@qHDH6Ik+SRPh=?uxWA-r{n3MQ!n*ZiRXTK5V1y{b!{$ho*ujWPbE%(|BjuxGhhWi*>-1OM912sZ9~zQQNGUP#Ll}&u7WAbZtVjYdILHb`^!c0IW?85T@Gb|H3b24 zSz6w>>D7p1UZg~yey_rj+aSR1U|kxBRFyQ)w)5&h&g_?M=oJC&Z;azAJam#u`K5@X z-k_b;nY$Nz$eY1)WTRci%Mm42ebP;_)W4O7t{G1MI2t(ja~Fu#3l#HT3}dCmn4p*J zK)8oZOa0of{DU7!>CA${3AH8B!*0VF`}yk`p_!1y-2y=B3KdYxY=CX1)DnF|jw6H2 z_n4gNJq=zp<})Dk9&(##)*5RM#ctvRXTxnbKY||k?^u=DxVL0!IH^h^aMwVd^vrVx zxDrOgnWxA+qay3l*<=bOsUY$zHDf-KjWCA5K&>!Tin5X|xC@d*!uX%Gabe7*VHYqC z*rkW)xmje_#U818qfLXMr54V$@=v!f}ZIvPw&kl;|}fIN6Df+v@zDoo>T5 za*&!DdnhoTQM5eELk*1n78#}j#!l~}@=5v|6l2eTQzL2PWc>V@>@WFKb#(byON_U8 z^hx{&7o!vU>Po3vN<>`#_W3b7bi)oUJMkj*(AB>r(D;-hlHgA3s z#UQ=9R|(q*RrNMy@E)eUi;^_Qb>ta+%5Y{kd{?V2iA*CsRN3KWD$IB#H}cTXg>`zH zZJHp(CuK}p)r8q?7qGnS+udq|xkR#8O?J8T-SKST9)gE4 z62ws=6zB%oLq>C=_U=rx(@3}PAU+L2VOi8={z0_idD)9?lj6e!$eqMdn9`>)t%Ge^ ze4Mv0?xH*uE@4HQq4S8tQkRJBLrZ-k^HO#3vAjF0Y(5}V@y}%CzsDo49-Ghl5Ji46GFlE>T#l3YZAxcI(_h-Ku|)Erdd2W- zVHUo1;GyjX!?lyHvY+>YNC~yfF@ghCJsF3SMTKRVL^)hiw-qw2ys8t)m>vlp6;%Ny zRu|XJ5?`bJ+9YTZ36ij=q+W9i_7508v%HZ;q>M!Ma5gAW&30p7ETAEyQc)OUeA~x* zK`+Et*XeF)b{cium{d}80ac4nosN-s1P5GqF%CUp!=7RhiOcH#!l*-67q;KZ5@8II z!DBA2?3(=JP{rJ511dyJwT)eaCjok?q*g-~3$^NL# z0m92)*#DU{=p-n+XQ-Z;hstBFCs1r4^9-|!9MjcQs?-EIMg+2l)uq$9g$$?H&l+4t zKN-;b#+`Zo?U5IfcT)4s;kk&*I{SB?VSG8g~q0zI@)KB)75_hBQpuTDl8RqUdK z+;v3G>Z5ORFf+zD@Crh&$m)Y)hYWs4MgsyH-jyQB`a&A?)uwq^&3IPQ?hTS}f-!Ej zv5^0LO=w49Th|8cxcWG<3=i_JIo(xIFPUfzx9a^9&q#H|uDoE@c5rJ>EmiSW+YV511U|U*W(x7!mf7 z9nr0$+EkIgjN?_s89UD&k9JBpO|?hy0-k1!@oIwWRX}|oe7;73F)gEGBQV5+T1M$^ zYl=04^lL^EQ6D4002TSQCcx$L$*z(z7c+<{r(s6vEDHUg;3E2@=SwZ8c7L2F=FzmD z8f1pW6$Hb#dRtu>oJ(8q#!Qi8=%Ki6MNQNNU)u|5Y`&4(Z<ODH5M1Qvk*^ z-*Xb(ep*m)9T6XU=rxT)Vs=olgNg?)ARm=n4F+1^*2rIn0IE@j4F3XNUS@{MMYD+1 zZa#utD)=aIkNpQl`R5MoS4ifvt1;>>`1ucilZ`Ic9f&P~4 z9^hgHd>?9f{p0ZAym~fFj7wm`?t<>^<`wULzJ1&U`*yfEAOt|RP*8nfs9&Q(oWKSG zHW4KP9ebrC-%<>vqh%=iv&!$W8CR7)bWy@8{p>7wWb+AikVgCpQrzck^#;O4C%?Zw3X| zO{I$m9@(^pYzq|ogjAu%HQWzkrL+kEV` z0wbt@X==}ze;oBjVq|^kb*IfEguC_u!V(u4IX9m)aqH3DudY5+Pg60VUVUr)JlJT% zn`>hqrSGQ}lZw1Mm!P76!b}2GHc9v?0`VwyMg<_=v5!L2{5##IdnQ5NVk~{0&uAyS+aFY?DRy>t#wS z=nrg6Yc#%3X+t}$yZEQqbN>DS74r2vE%wraDgo{&`!tt4B>0E!PhuxCw4%J#^ zzt||aPCCQdxVk8$cEr!dBYQ;!zD-P} zX(=#f%5i~@g0;@U?7N$Ud}orw|!oC-4;BrgGQoqOm>?N88*AdsKeQ4(=9|6$o!e& z3`5XGCDI4YSWl>PKLaNJnqGAc!#GoXY&XT)S)#7--lm=U{%CJ*%W`(v*6W?}ZVJd_ z1?LnCWGh2albr5a4}n8u%p;eV6wdObPyJDruhwCoB71dZ{b0z~m+@^U*U|Rv4?|{E zfri-*XFBGi1P_%R0*;}AJJXNLtx^|TEN)f;n=U7#g%rOeh4SNbR7i>nbOJ zl0nAK`zY(Y*jRl*7&uSzq)_&fdVbBtZVkFABeY579|whi)=T4!x8=0AeC@&U!oPKo zy>k)2&GO9#^q~j|p$ZZAj{G z`(xvUB{E+<9DsZM zK50qF{*SjH$G6Yz@sxiYa!=*6uM^!&=GGt56}b#gMzIZ#OxL@BJ@=^l!}xxMAK9py z5Q{_ntJWQ2Lin#yucs?gWd1HyLS*+aRU07d8t}z=YCm5uxn`p(>|M0qch{R)DjU+N z3z*Obgb(h>J&f84I&R6b)nv!h4~B6Uao(r}v~#F!%RZv~%4o;}m zXnI&Sr~tYM9nhC*cZlena@EkZ6_eL7HDvr~ zs4!wCS4FXY2!&Q8e#W6=Lz96!`Y<+-wcsx^aStYOP z9HA_7z2(tN&7&bi@C-h2bA}7c@U~3pgZHi@X204RHpL zVy_gyv#)4Z`j(eEtqChwLBkhbMl79#C5>*(mcZwr!EeZu->b*~Gou7xNDnzIyC&Yn z*>FtGnJmA$hvGMVkGkgj5kLA~GCn?f1PpT8#kgf908cL(`vcBEag{Hmf2ASaly-Dq z{9YhEJHDs)haD?eu~d?vzr;H_HWnsS?Y5EHm+-PqK~s@X9IHI3{w;g_Og|_U=)>z3Jm;xins7^tZot{Nl&rZWqc)+|C+3*#2aH+yi|`5sUrzYV+7rzBxwhn zqDP1B*oY02_o|I$cMAs1iHq1OpAm6P0I9j^R1A-MlpMpb4VBfFtlS_`1;g$xrWhsL zt|3B2UE%A#23_;fF9@^@C;5oN!#LZk7D$>mD#2@`yV0u;KyKX6!GxwUg)7%(c9mTx z_81>cmynnyRY`veRgFlD2jjfg7>k<31gvjJ1JHhwj22K$tQW%KhnL?Qo4hH5FhXH2 zj#v)qj48XX9J7aGW+Yz*OSo#cbK$|JifU1+8Z3#yo?c5^lF1`Gwvs!>;wjP=U?AIa zGK4ygWcq@Lej67TOdH^VyX8lyggxYJ8Bn+D*z;sC@fO)4s!X#B2`r_?6j~N9(hPfz z7y+oRtNweH-BOFgWo{cN_umb+ZLZ6fg>o=|r8rjSOmJ2T@}u*agVHdi9bla^LE+Y+ ztKDIB?Q!$yA!9%PfPrs8$@QXZ7%8gdR=Apqcs^00v%v-u_bBxM|6V^5##8Dkio}c} zpQ5mzfufNTy%@MHz(mtugz#t#48PFs_LGrCL&g@&=ol%j^}{Zaf{X16ef?FK*A!0@(@O zRNu4~43vgCAhMeVF1OT`W|WVW%w8$AU}pgn7j&-or)YyO5}6oP%TgeGh>-;*f4Rw&ZJoA#9PpxD z+Ig}(v737z>bOwn7274(K7+nRCocbn?loq2dFT;g5#EqR7#-tk$VgX zs{&Ms@%%W71ckUc;1j%UCE!H{o2Cuc+Ax5)bzQ1n>BsU8WDgc*fdF%hza`J(elLg* z;cE8}?TvihVM^yRQX99^XqJUy7Y~r6X3HG#I;L!6#`Br1H^?CV8gbSD%`di1P=`s# zSK6%~0!;f98BBqdQYZf%{k0E}>vg+=fxq3U0Jx;YawArLA6cR_Zu;=@{@PTT%wZ;& zusgnj6*~YfcWtt2s4MRN7413$%9| zRP?R4T`Ea0hy>gb@nX_&MKDQ_+)n00)XwaRq3~2*(?O7jI`O}Obfl3u9>$xrBF(Xy zb3{xXx-%bR%gr|svHr5&=4qAgDLV>%(k$THy>c6) zs1xelAg{cKHTeFO(+rwu|MjRpc?Ci3PGvTuz^3iu!MI-} zq0My`r3_yM{)+FeTBzcOj5GkMP&`bxm^8n)I_(L=e9cTEc-Q*J^b@)wmgQ zQ$G+tN{tMIy=)^+UCf&rn+Msv(!4w!dDc~2cX>l5R9`#Vmucin6OzfLX}1b|ME0{a zZVZ+(REsc(b)7o%DLX%vwy^>h{4&(oFF^2a|+T;`>dp}J38 zQKlcHdVXFo;L^IUl2}ae_^PKt#N8NF$@XPCbb)1MgFoMJzCUQFf>~s9wx~x^X}W-4 zrKREWkboXQRyJT83|!SC6SXrZsG0ad*TbwBkTm{0Xn4eCOIM%C z_T4fOJB#X@o}zY2NpX)Jm_5Mn-gZ{FJ=)Y)$t?oiX~GaBnSB zw+({V``vAfTy$CNSb~n4D`BA$M=x#cr!l5(U!@-i``1iS{g0tnj^PF`?M&|^my;(+ z^S!%lHRxRSx26p!G{D_cp_1s5HdCyKf>~g8EbGQljM^QRHR9J484ZA{dO-4mohhDr zB(8o7JpLKgNIN1K9A;erOv?4ki0P3QbwSk~RJzV(666Dpsc?ss2bNLJ&yS(rqX-Y; zk>nW~SekOZ2&-|n9CIEmi+Lo|a@U-*+M>3`wIVDnM;Fc^7p%Tb8pgNMP?ar&|M|vV z7WwkHScoLO18}SuH#S7c!wu91B@0?oJgU#QOY_TBwNb6+m<+o;$aMz8)J|3xq?qsQ zbq_ZXo(Spc!v*3^b}5;u$D2U>$6Pp^>Vpm|u7K#sZD*~KvUJGuh(IQgs|`z&=9cwX zo_Gt3&I6TQvrBwvBT?0MDmnB>QZ>k$CS1QLZKjwzd`hrL(X&D;;QNQ*l_8n9B4MfO zq6ZTtV4huBzV-6|RdIwou_)-HMeA}F4=7JbO^n}G6{|BmZ&F;rPu1XuZi3h&0il;V z_&K`8+`K-+%o)LM#lM)#fK;M_Q}G8!4qfEUn%fWRBBQ!D_<7D-k*JvqERsGBX?|l2 zKu=y}c@@t^1~o8^zXZIM{#ntZO^3aE?QRv@r@FdB2fv*+@~)0z3$%ahU;Vj7K5uCS zoUQ9Fzwk)bFIXW1pt6w-9e%XU?vsTo&PNQ&jjnMFHQT+5_%m&!qf-FYXY3-GyQGm! zCOu|l^*wa2p!LS#Y%59o^D^ec8I93?WZ| z=$`3y_+zcmRTh|NL=UVuiD3#qf(-cfeHe!!A74WhT|<_VXGDSt2@Qy=$znT_+TA{H zF&BMxW2Ly<)Q!AyW06~(GFZ?W@c1Zjd@Jr!nWdRVpK5$!>- zdRqn-HNe1TW`$3t-F3)J5d=@GE9e8GeGjVE@`|u~$p%mPtjd=JdGKox6YJld9i(&u|fw@REbZ=XK- z;FB>~k>{i_+j-wXMX`p_o{g6G_$4+~F`kSn>o1XAs&gR*$?srpN~wJ6EmxY+-fl$x z9P|BObliK7vshY4bU@>{h6=0Z@VoF^P$yO#D~JmzzrD_r%sF9f{uE{1F!>GJu_MIUBR1R*HXeS+q?8 zd9v6xKF(q)a`TDT;JGa^_{~t*Hu9Go_CFQm3@&!7pQgbG-r-cMiZiDv43U6$<$>=_ z?=DyWCSHjHOvA+9ykjwWz=cO@atmQkWJ+t${~doqb#BZkEewu4=zM7#X&y%Iw6p`s zKJ)x6a>jjwz5Yl|hXn|XPR#3quMi(Te@#>114PjXrfE?y;?SbSi58`;GUbr=n9I5v zj?zka7mU+}QKPI!xd$f-TEzG2J!Zi5>_CN?|as_g9zY z{g1qb-p$gZJ1T|MeZ+CGcGOeKqu98|+&dh7HV5UE*S0(gIz{Xoo%)DeH|8}ywImGE zIJ4jCuP%7%%7lZ8iVt%7*k3dAJD8%#l|!cxutx;%+WLo&Qf(q5YBPw$ zmqvD=U*p8Cy^-1KUx&Dlcj_RI((rGAmW;ABTW$Fsiq@-fuZ=6&^Nauv&U{&D{Ao7#ovNrM2EbYG&HC2Wcygvlfz zm)+8jAXuK4tGidO)Ra9ubigVJ0=67~JaYZY*Xn19!tw`S#K$lN>)B-by<=}rMO2T- zTQ*&7i>t{s7*imb^vT({jlykrD|d+NA&?X1Nsp2hsVyVg8>iNHygo^=hdsOynzN+#I`-{&C5F<{yV=+w7OSWBN-~{<0sOI#PEl zq2>$#75eq>>|Vu43^l7B7(>+bb{&WjAFd*#m-^pXOT27ebQx1E^-{O!?Ibd+HN?xH zgVIz)7@s`RNuD_OZTI%)oXRemspkFNoPb_wq=qQ6a*++1d{Cea<@~SZJRw&3R>g^^ zNTBSL+Or97jj1Em8`vJ5MKm=r}`wB<%QJ?0wNMbj2K1PD?DF z?{iv2kqBv1u0pGl2fSZNJIV7TJYQGtZ*>wrAUms3dyAZ&VAemNE?fIyOz{#gUjE)D zxrbdVk&=EOpxqrT8wSI-z1Lfe)OY#%pia?>Bp72kR4H(>E0dU1{p+JQP`qM1cGXid zFbCOh+D`~p>$Oe9Ahjd#KVcjRa8Y6R|9;&e#e|wldS8RXd*lN{TSqXmbJ+#asrU{| zyiryZXdO|moL#WN6i3JM+>Vl&?5)0?+s3tOat+iwzE>19pkUca6;%{sFBj_Y zPp2ptu(7?wZ|wV?+IFYJ4`ouT`=G&e_nI2pD|55j>8s0okLX5(YlrYA_KxVg4T3e^ z@F^usqM)nnj5W#j%$Zru9`BtK*03 z?%7FG9Ey33@7cu0l|rt6G#O&D1MEIj(A~~EXHzTVwN%3-`nIFQHw`z7v~FNS#tjA%ltcqNgA=9Fj=BckdcJ|K85hij~rUF!d^NZ2P5vfK>YzlSF+3 zku&zIzG7FfmmZdBHnv6uj}afYUuGFQ4Y&&k#<(1d{o`;%S)goXe^zV1RjqLL4Yq9O z&5C-`|M2K(|E`a3C5$B2JzSb2c+R&fKEI9c21g|BC617LaGvg-g=D5R#iG#v$bvCf>ak7h#Az zit0ypW&iI*>NK2F#-Bk9mO)nI;u++SIxoTJD@3%^!1EoYl3lX57exI2Y3Jdr$og{f zXjhfbAkluhqrKLy z!iJWSyTBK}zewQNqcyao{wm_C%$)n9>5fvn=VR4$ETc8Ysw7h)r^_-+EOe*HP=7bn zX7WhRx?-v7p4kaKr^3?7faY4!oY<$qxVokXPm4xf!%W9JLPF@lx7#s}S>eBv^5jKD z0(WOU4F2A-$XU+U?isYSRSMmRGI9w5Bds|Hj&!oBe8jw@pseB*o>6eZ4m%)Cf z4qsg6$Jr3Nz@X@qxl)%K|TDtyaY&UpY7R zm6c zDf6B&_bY}9HNAx#0k@M>aVaG%!T>B?9U^)5^hEnDOi>`+2M1T0AE_8^e^l||$Ae5DZ~>8TZoePmCbwTzP09~uDeh|0_zKW@JEWM5#P>>t9N zab?Pt$IC(}bkOQtj$h^8w8#xhYviRT=va@5hF952_ENXAWj%X4PJWn}_ECo4DcJ@D zR0dNObl&S-)NR>j;TpuE;=RGGo>gTjy6=7-oqhVYy-iG**{n+?q1`Vi}V$SM+ z5ne@{FRUrNApc6?4+I>YAJ|7RXmNUIQ;Qy#CisB|42xQtJVZkk$rk|yy(I~Vvnyr_ z&o=8Ck{+ME>Z}b?bW0Iu?^60slH?z}PUV_VWiuPdcxdbo>H3;h-tIU<{XM>N_LS#-f2QZlxLf|>?@ zij+ZBRNe}4*w=mKFYfmNJHMz&HYLULUFFtv+G<1UUKV{OWVqnfvHdgmL_3u0T#zlx zxP;`yd!>Mwe@X5=Q`bBvI91Ig<&w)C<}!Z@$M^EU- zV>F^CIVkI}50U(*MdC9YJvyiEaAIyQ$GlJyAS&Yihk^+)0>UB2Q!!f;;B|zDxqeEh zF?JP;Z-Sjf&ERK&GIo-#J>|xuI>e?R+cS;u(d|xxn&gN13{{jzDREcZ3ROm#1+BgZ zxyG<7ne1X#z&{SnP&@deb2nW4dI4G7V<)DZOgdw zgZ}RSqCZ22i^A_ZsZB=7UI&jwmj?c_6Cc(nD7h&e_ke5f;cQ;@DebxVxQK|>+j3oU zNh$XtQr9sV8n-L#}v9B z6VQUP4ZBs6d5@3TK=Ex^{$EvH5OG3&%jDE2%U?Am-wZ51^s$|$y)PWi{L~}GCloUY z`hVo(1A#b4B57gZUd+2A=_ZaR#;qJuo{~Aa6@(8wX8VM}zB!1qp4iSyZdIPWku)Y-5#G%=A@wbrOSR zPE2orXZ+(Rl)UT0cE0ywN@~hBe2IG$Qv@9hW9j=GM;#y$$9xfs$68QZ5NUAg{0ylL z!xZ2YZL0Zj{@RE4Mfpn%2atYQPj0#xqMXBWeq$mZvbCeDt0(p6tW~4=_IatL!)F8j z`T<$miX|p7O7`kUTK6HZ!fF1epGp}5HA{Bj$36$00r^CNSD;PR-&@^09lH?G1ptMB@>rOF(cM_ zZ`Bvnvk%0tn7?3R=sa)TEY0O1?e^;?7Vl;57%7V;>r$yGznsq_Hs_SnOm~vNKXb56 z^vvp>`iPp-xw!f|CRn34*?ui<1xJ5qTHXEVUVBbk1nK$b=SH8V4rg+2b8zJ!h}N&g zx_GT_CX5_XH8_2T`#Wc{jnU(yYczkk%f0>0Yl?fsl;|r1()>3Qc9bd$1U{Snkz*M~ z-w5t*z)SJwnf>E9l?>(>cw=U74WZ`h{Xl%EUW91=p$0d=Dv8-1Sg9|;{il5VzS&aW zO>!81*Evc0mfs;Cy=O0NW;V}~My%x7ihx3A>zV+9p^ndVf3kgPpNP)~XnHB_KKZR=(q}pRcSSc~&d0|(jJ9SFyij#t&EaW7ZBXBF(S{#jUVJQx*zN2YP z1FIb0;%WmKVyjRdzuHb`zAm2JS6)N(2=Pj_sEuszNA|Bd``RBDJ#>q!rTY-V8f(o& z!-yD*laXhRTy6dG?sbhxystMlDSVs5;9M;Bt)oUIt6xnJdND!u5Uh>#_4@?vHS*!e zzpA%{S71A?FKp-6eix7uPBPXJBgYgPmBN(U)(-k)^OatDBd!ef|M`B0GOUVxS!Q|5 zqKfk?5qTzpN1*Y;xZ$0}@^6(Nf@7p%O|cPOe-XU@LBH|N`f`lHqBZ)%Gpghbd9A^F zCFD!`12ZJ4wM!2QWmUbmaL?&F4BV9Kin--@@G>>*f#14JKR$eSHVH4)c{|2VFWk;l zPCl$NSyE2^s%PAQX6I5d#AR61%R#6&vKJQ$^e*J)?haj}JYwid9Rm4)6~>Nz*?U|~ zf4a4w_K3n1zB^iB9{&$-_cG_){g>o(wBN6t_(dG2xh_dreTd}c3{aZz4>ZPkR_X5u z(f#?3K-$k0X8Ei%2WREO>AtvKm$1=4xgTGxlX^dlN|4i2r1ZW?{r3#d^)oNmtHR() zNQ0O`+wbwty8ZkBY&qO+$Drq^)E6d+3Z;hcUNS66Ejxs-BYcgeEwx;0%Kvew7jU>> zE$?j3T*Duaa0f$JTwxd#@ihxDn$Nuv6FksXa0A|=CP!PydvvXbx)PQkC zyB|%%#fXzN4b}}baZ-DM78H8DVg_!T%#E81UJ!fq5WxZ)Pl0tcZP*)EkTUT;>th%3 zi-+y7~ z6YvJy9$x(Wnu9K2K1d$7{S$6lk}hmVru~J3BOMM>nC}wZk-URt50#sGcjasVr7x{tkK(fWh@K8Sr%I*Bw z|9MLWy>3pEx^EFW@%0q`$>Xm;#joMIApi<@VNFz>d>t4!9-Q@NjSr>gyjo)?E`*ZH zoVTp+=$sSJ6*WxedJ!5IXQj>ux z0W&{DPJ9^fD$DtWEDi#t{4Msb4DywYsYB1><=^W&|RtE9m)nYt%<`md?`fMH5M_(RKW$#+rn%`za8Eolh z8WKM$ZO|;4W!ZqU*QnLTO zN01W1*6i8FmPAdr-ZCY^!RUdO;dCSZ)rZ8R>Cgh#A@RfWu3a_3WTWjc;$w5C7Uu`o z3~pgv1J>qZWM;;K^=eD#`9F-05QuBARFa3I<1!y0@)0SprO#dLHK~HVxUE1?zXbBU z&+C)dvAv~sw5JJ^-0mWNvq|`mYj7XP91aEncJnJQ5>=|2Mmn@!SKKi*af}gyX^?Lqr@((V}VyqTJ*g^*Uh^5#o8<1CBN->+?9S~qQY~0gE zQS2MQSJyE1D#p(2Z|qI(m;`fcI~;qNMm&!_!Zj$3v2}pTp_?|}-A$`Rgj$!9DZb|L zQ*%z6aNuW3{Rj+TQko33%EJu=dY~%iTnQIO$iPkVU)LOMKNy$u_xzY}p z*a-vaRRgT<%y^vGw5V_;7NC6qEn;iI}lLfuq`wIKZj6dJbEu^qh0gNvY)RFKdj zC$j+Lg)CRGPM5RorKZ;l***?d7*QKZ6bw^32VrsioVv;kB(4&ww*7e)@FrmLA~Xku$oQE1?W(sjY6iQe+3RWm&U#2oHY*G0?W_ zDZ90F@N1P;mS^t@Eh{o(F_tg$aDkmEg+1rmlFq!9+h;lD6Oz(;g(W^eT~qPNJ7wXC z*-T^M$*4j3QedVa*GAgH7VmUizY@ue3Gk|a1U+iyZML{k)R|6QTzwSQ{!;z%NFX~l z&%vLlkww*PemH>4$FU8iNn@(44j?}6b){c6lb7%6xoksIzt}MeU0KZ4)Dkb)ln6DtQ7-1K!p(9g{y0{ zzRrX;K9HX&GiCxo%WAH8nj%U^@;CyKaO}zkY}(@+E3{A2pwcD~hBsS-$+A2zjFP2D z<7bh+eTn*_Fl^cWXNUvREv<}TBs&Y%a3r)Y?`^2mwds+*#C zm7muA`8w0{a_#>Vorfcv@7u-gz4snfYLkT8TWRgY-m5}UgetX15xYZ3j4Eox9z|kS z1ua2GP;C@Z(Q46DeNp50=KUX@`+n~0I_G@OmHARUBZ12xm(!SRBoOuK&|=VNrn|uE zI&*yFt^DsHM~s=iZ3+9DVNx3{HJt$*4Hu;)@;~GOYaHRt{m4max57ATn}RoS5tCy3 zRx@$BGidNwTACk~SObN+#dC%yw73guT()S8;}(Ufv)pRcR_dHIak69a$i$#{8MUW; zj1jr8hV^%bP(h~21tIkU!ThBKB=0YGDQaW2r&>mA_~yT#&+J4W=wf0<@dt1>P0}z_ z$H6apPyATpBmABpeiKLf$z-k6)W_wHd}$Yc=oow47HQ6SCULG1zbGkT{x7^RV=33X zTqR1v@6gyPq1bV}pu~F&CVtTd(mNn)zdtRzAH44tEuHW0?|dzRNY7tx}v`B`K&HNGiYML8>vN8Jy10l-4i0uOcZ^`Y=~N9Srw zIe}5zis}jtL8Z2bqYEP@0OFJn33yiR*b**QoES2Z)@TJCsqaHQK%<-!z-Lf4Qc&<4 z<7i;PZ<$2(hSnSm+7#;KJQcO=wgt9N#2#(&8_o0dN;Dp+Hw4!U7|qwkK36O?Ithc= zbkkm+m7R+@Ef_gzPqmB_i3$&@W8GK9rk#Uo>?>>c!=aK6gMRALD+LrBZl)Ojcaap@ zMO6HWIw3&^i94x|52`O_l^fZW7jgPjK$FUic+RwtoweT<`#p)MhHbFg{0_?M`>L48 z+&b3gt8gVzW2Ce6rmmZKkgmu_QGwp0#+y{Az%m56q4Pn@v|S2ungZ}i1ZEwY||s3y@7P3WxK=iG&&mTYc05k+0;DC}JrEZ)dc`A$9`v@t;s zSv}VW>2aD6!;rW8u0B7jthRP`qVYy(^VB-QF1J`)gYDYM0U-lZNJ?aXRcSV{jqK)` znB#K<(64?f48jGcPWS2k7DVkr#EM<IV@Yl^r7vQ?yXcU~uOC3QnB4r6mE3r0Xnhj09Cb^zgXR()Y}r)~?GXKjd=zI$ORvDSl|*BYXpw1tRhsrpz?hluRIii3X7|4)<+^@ad7*o^sk1>>s=opC zXtOV2Pa}yeIer9ddtXIzpHH!W=FjiDf!Cy|`uPini+)$#Ovi>JuHJwSH~hf4$I zB-{iWMSfG3oV)IX^Q&{G%_3UKs*RtQ%?7IwS(@q`wr7{92zlN~4Fc;T7C*2q+Oqa) znhaIvw1LWpVo((|vvPo>45XYb(dwKl zHI6ST4*P&=vK?EO=0{54kLY6vefgfhn|7Q|kfiu6hb_pqDDmsoaM{;u_%BqKhOE!b z-FOKg#h4nhwDXDDSHn~L`}FgDW)-5Y5}4f4o(O}Yrfuum{KJ*faf#FiO;_9YqqU7@ ziMX?hg#;Fx>cq3$C@4(yviT$C97g;?^*}#sQmajgSCUGgmw45wm*M_i^+^9;wYA#h zDW&WfeuvmKb*yP2t)r9@aJhXRS5UFnZk29Ba(2-3gQ|b;9OGw{LY2GM75M|d+*z2= z2`xU_6=4`C=90NRMt6{c>)HLY1yHYew=LKob#hcbrP@pJY>{yLc$MS!lJ6cW^K!)# z=@&C5w4?hqo;5FLgnuvnn)9y8NAiWufBv|wmHNQ71(W{_-kxPrbUIS()Bgk$p(b&{ zQUFc$9lj7L$OM_R6 z!W-f>fK_FHg%Al_d|i}3u$co}v|c0*$Cc@Y*u5VY!B`85o&6rQo60A)Tf;bKBlx{b zVd`O?)#S*`_}jSN#!$%Em3HIbu5?4Bq$d;M?oxLshz?uT6_!LyhfCO8VwF@#5}pK# zts9SRve|p(j>Oe;(4NU<`fCu^4JWtC*~bd1G%e{Sk_MrfCPL) zPP>c*>7+v%-tyIJ;H{W1@t6v*A-`qsmA3}9{+sTbI(#r?!wc)^6Uqkbxy?xpS&W)J zx@;gdQYV@5Nq-=w;#sH|V%M$PWu~PTx2Q71J4AL%TYxU2Gf5;W2P|}*U+=8;6b^Nn zmv%DwSxsTn({AqHu(IovoKL5`&mu&iNZJo;}FSKGr-D;NpY`j zHudkTr9lE*|BZCt8R2lnmgm|xHt20d``Yw8@T`5P6~U1gcBQN9F4Xg=*Ynb+43=I7NPYyBb$+_;K!+UtDZse{&;$VRs;pGY^)HB^*>s`z1Qj!1QTw- z=Mz-wng2bjivx^ZQ(ZK+MJUGs=Z>~&IjElEJ_AIp2o_0fuiacM-FHoO>@o-m=J#0u z0QRAS9D{rbTKK3q^>qG7waRNEWdw4ZvY-k-3Jb=1U<*n5@E0$?2DKsc&22nN$zrTk zo)v+*Wpm;M%d%ZDrOP@&x@BVJN9_H~UOCPZiBgW5f>aA?@Ugni8LAh?`VW!Tj6+i+ zM7!I^&e&(y#Eau30UE$X;zB(%s8KJ|v&utc%0?RHgU5AO`>+RApi^2_F}FN0wCP}C zTH~82*AL!v6ClWZ+YGM?KuxC-qb9`Mf9@EiSVw&6mTxI^TD7fvS_GDEE~rh@MQEDG zDb+d)>z@>jlEJtxzlcSG-LCuL=0kbjXU+VqTf(?A)cE z^1zWepK5zTT>L7Z9wYJ{Z$VgJq`sYYo!=}!K-hy*yU@=!UH3gJ?e&dj=gK=S6yoQ8 zD3|;ePK=UuQ2g_-+ixKO=T@9uoMh`J$=((ANoT4(52TWNmfj8yKN*Efb1M%O4%|bl zyPmyE5aXWhv#WaK31$lwg9}~{+B9W?kDkxW z0DI`p zd&Tx7|rc2d^Y%2X+2xJ*pAe%fPorSfstD zZ(}-$oVu}-+9&7+ejpS1XSc@u`(}|p+DhZD>$Kv`Hpc1uJd9m&;8HG)s+DV8KwUBC zulrio0xm4}p+UjZ0jjW>LIfXpqqWlhL}NN7cv1;vp*~?2d((H~utj)&?Jx?53wA82- zF{n}Wz$r259I3lCN!o<75X3!5_*W!`IVH~wks<}%D1Dno5l++0K7O{UBCoVM<4-=W z_KsQMZlT7^rwD1(%hKtPnb+-$gpre1uYQNq0b8B!Q2S)M1S{KL*~Bpw$B96YVM8|= zIJKpA$sV81t@J*f(A?XJ{o*a#CKZG@Mw<$(rJCNW6@m z!FtvD+9(*;9jZv|ipD8+q>!D0;7c%ca{}_t*JhoX1>?qa%~ScEXV7%G_({=E%(nzZ z(8XLQCd+N!g35ekKMC57l+=#KR2%h9uMnsG+J7 zl3yFDMGE>O{N)F;bO~@m%Uzg>(Vw=YDY|wMQ+v1v_<0G{zpzQYRDg_wqA&3-=MQFz zj*|-#Rp=T@3heptA(>tr3&3zcoIHQz9lRx_TC)FZn`Pn}6 zJIrYRX_yjuZPs@UH4bTiUoc$ItZKX~7$21M7g3U=h_DmexfaKgEv01Ky%F9PZ(%wf zw&czXZ2v^L&&mF6Yt;5!mr3CJ5;iFwAgIW2Wmx9V$c#hQH?#Cmcpb(yQgQs{vOR~} zX%;-R>Qx-?oXZ|<*!ySBxDiFHMW`=`^L-|aTiv!8xa_i5CmN6(*`>z7GpHtV}O zmxqA2XH+}Qzk>1e^0VB*EkRu@Y7s}puI!*^PUJ3`M%KDAS`PX+oC>`+-m4G7{%zmErCkVqg4m4#`>9gE2P# zEm!$;MRa?a!pG{0mffJf$ffMp9hd`2+(Q*p=%?qYHn|G%0D)asNMXQ4(dg)8xWe-6 zgM32r^H-DC^PX(Gvg(nqB^bx;h=0ow&rS~DZQh7DQ z5J%^{A9KBFJKyzKQY9wLWtklEI5VcnTeZ$)pjD@nN>+1%(Uz@X z9(SRg2CL_`2oWIEm>kwV1$RV$no*%Giagf+C=rCsXyz~N5}3v5=%*%5SrgHyV_Ikh zp{J)z8!}pLEwMwoevDi6#Z3>@mV|_cipd*|P}F)iN^x{ws*DKS`^mMpeEiqUS?!pB zW>(SHmDqYjLAzIOhtbt~JXDE`?6>&yn!+}zWbv*1;<1_@&kLJ2RpG5?^-3eFO$Uv? zj;_ZJ3Z__mwYoC=jS4`>^x@IEQ{bVcm?a+zVAO)dw*EK#prSvZr7hPRz#IcJYjE+% zoa0~?C3aaWFxD(rtulUTygg9hd2W7EF6K4*tb49Pu%2nq#rKusg5Q3hv47SfC_F9g z{m=yfJd}QaU&G??{|9%&bpDbMV=CpaL`REql4pQW%+Msx&oBBZ#~Bg1@eTPMRPgmj zQD^iG8x-oW@HbB?hea?TkYVV`l_!1hvc&wyXnV6Q#)Z0ojv1sn9gkBSU3Yt<%_o=0 zcy-$kKl77AbWM2S(76>z@8*1M%)@p%MbF)ar=~&(>0B$89O8WoOW*GDI)K=V>86@j zY(5T;Bnqn(DWV*3L3Rdi3* z{CpA*F1PLN-E$WVAoK&Gbe#G~Y_5*+Q+f}%iD+C4-e_(tCC;FP)iIXz4^@GlZa9>d zbWlitjeJGK2R_KEEUD$W;h`-&J8!dJM35^CMweWXap{rl&3q;|lv{jS3VO63>;=zy zz5N&djzp%1=4V`(YB=HhWJ57c${sCkahRagS*)9bkA0Ll+N(&;ms&W^ZxW-@f;law zCcfpyet%*!y+v&V&1Xg=fb$K4sKXVI0gAID8nU54*mnt~;HqsT}-Ql@^ zzYB~mJt_OC+U1j=IA*+c#C^tBn~NBvHB{rf{_Svum+Mthzdyt5zgg@o zK*_&EskLU0zygx96(3E7~Gi=qiLjW>hI0v9(7|hhQ=QgJV+lg99CJe}X>$ zkH(r`S&=e+Yf?<2`}(G<`PYEp+Vnf=OcAp9sI{+ATjKwbceS>pdi0_$6(Udz&WE}r zcOFdf>qg>V)69J5IBL~9+ESt3g?x38LhhkWL>}DiOo?h#4f`ngkZ@L(>YxL+?U)U! zAmYG{)*zW=1e4t37;(KL;r%NSe2r}t>#-96rn-Rm1X{jpM?zFJbt`hfvBt>DnXT$*-gizxNQae-~ZsB3eS&zdk;T(mxVzIdw3-UG# z*9b{uDIp;fNNbR19AQz@mKi>~e+M-#f<++>s%J$#5iohl|Irj912g=t3?`DRle2?r z^^p43nr}oLBxX%2qxt{L^PTg*m#3#E#^tW2BJvAoo{{y+{!ZEKUVTt;jwiwB5>RiA z8g0ClE@o9vC|_k|Ilz=yRPU4b!!AnfO1&`L&F3zep01~eA62OnhN-y1au8uQ@n3;J zXJFkRIA{vSZ^g6jX{8~a5D&k`8^(oSA-TPNsUnnps7L0LS8%mZrw{urg!NZr8=4P3 zEBP-PeLUlAe9S-=(Az7}EN7!&Qjiu*IDR!JrV$LWZeFP;96W`&Ls z_@NzzoAO$Ha@BteX=uimQO{+vTSk2|!5Wcn4k04!MW3saa;oRAHa>4NIDpUp$Ywy@ zlSm@GA(v}1^VJk8jo)2EhJSB^bcX%W&ec?$22 z`qcVT6J+P>jQl~IE(!Rxw07orvSuUR+PFn@wLSm zO{*uBOA~HOJ5>*V(fPD2#vJL6MoCu*o|J`*m_U|in0b3Lpl-nGxh!OkuqL0Bu=2ik z5KI;&C zR`48E0H9=|I6@~OJpep9fy!166)8z1Nj%Wr82@eZYPify z!9e4S>TD|hkkqGt=qLIsWH^OyG_f;S_Ff(1XAf_4KEZbfc`g6?pLtNn@^~sAqA_&e zEvPui_r-;2%s$A>BfivIAndwVPptCaSwGSH)ej_uv}YtWJ6#=$(ffRE@kUQ}d5`4+ zgU?M3HuGZMr+yp9%Lq32`o^*~fWrimlEf-jJ$N5PQ&EuOABrD6Uro=_W23BSr%r94 zJHFxS@1=M$u$!t0^XQK@g}Iex!`CCQBMkZm5kfx*52}#PjE*B;oNfHBpb)ZtApGe z_pP$tn*HH;sQybcJVvCxllG-(2h4{A_@pS?oE&{+5jNQgQ&Z4>TyPtuzK8p;htS}s zt=#nc^TXcix5Vqcy!4UC=Bg?~+kQmkt7o!_jUBBKTw!h&D2K@9gRj>%lOq7F^;m*j z8j%OM78*H4O_ZZ^ddJySn0^kSI-@CU7A9Cz$|3g|k6hvb*&Sz-GE4Pl+Q{gko`#oO zwI_xmkAWXUa(?CG!f$ePL3;PVc6&CPw?YU#O4NwH?k*i5N)`eXTWBnD!oP#@^l<5@ zBiPwbF??rLX`6KsE$p_q3H{s%q*DU7@?vZgGx$(PlG9>%mDqA($=8S4=XFQ=KFX~p zwtPRIR@6*jIQ5va^!U{1Lsq0+8O{LWX%m2IFe#Ztnl|))!C84V$#q85i>!ad$3za% z$Q8ddRM%R7#!4Bboy(J4rSy*&02&|>`2X{z;Jv?R<=|19KDJzP#90f2aa-N&S}E4miQE)z5f~p|qd6Ok>F`(x zW~k6yTjcuKwv4htDPJ4PNnzURGjy4redY^J_e!p|*b9VseA-(?1f*FiRZ8 z5U<*Ob^#(=QO#uUNJg!2nFgvJo?nB=v%m4K=T6estpKWXIA&U&Q`L}RE|f*;0(Zlm z@wUiow&#XlZk-@9zzN|>zX4N>UmNvXxLB<+-Mua*y+c+hdNT3KLvKf>&CB19y^Wy_ zI0w*Kje%00+iEu~guH)homlA9!qoP}8(=r4l@2TlWp0Zgvy0e^eS0+*{_L!5H}|@z zsOfL7U7m)(3HaabFCW(P1NeGvjo&Zd&%^f*PgaP_(QA~cmIq4c2+w^bc$Qy!SI`Y6 z=EPXsd_H7c=i!olhbwwHh?hz5;OQY8k-MW5pC+>m2UlKFhepQ22edH-KDT$Dn&=`; zGIN!&Tkxj{dDUN?Yqbzjz3IG%Pa`w`NWAF>G6u=_?<6(jUc zGs<*Q@tv+9LuPe(Ca!DO^0O?DNEavV{-szagnF!nGrHOa-=t)Qmx_eP+os3Cb7vQw zsEtv4xL+U#9^pg+Go#JnhPQw>8awFt%%z&xSlrM*3fJ!3Jx8G7~Khl6zTt~-{qyLr>j~&TgUo(BE z%`o~yT5)V+*QbtGc*S>+#=o@)q5=nZsuHVH9sS6wlw-hj)9A$3*%CT)fvU1BnC2^oed6<^JqSgbo{unE$F z^vJu}zmZ&A%Lrt=axK(dG15KTU35c1wA|&on`Fu6Bof+oBUSxoSUjq>Wv>>w=|*d( z!k%7=aRRyPQqc|4(!7#z85;E6cCM}YTyaejiqD?-7TjdTjV{WfZz-qutpCW0 zbp@}z6NE=#uDW{5xCU{mI(QvvSlFU7&gYcCZ~AG2|CsJd!3Wx(Yj%ETxr)%CrzOcM zqda^J5S8vRQq?|ZnfJsJ?b|4vWYLzw=wcAV=V;&;;;x{M;?EhJdhFtEoH|E+*G!tm z>qj+-?I#PKC})oPZ9CQWqEL{8gMJ14Dc!4U#1`K~jmg;7x8ZMDYMcf%G%dh4^BEX* z;0o2IRGZL%&xGIeP|=!8av*HESvw*>zKJtsk{cVI1*6G{-n}X$7$i^v()1aDs)B^Z z<5ZL!r8aK(Ea;Woa<2W|B@iTKe4emrCxM?D2-l7T=?TZ+vo?ns$anY*a!T-)BIpsw~ z7xvU2?INJ!^HI(8CF8CruX_@;?3iz}JH-@O=H3=TptXsl^~$IhEs9W5D%kzlo(18& zw;}a>;jU!ARu0{%%tIE=-x>r7&?3x%PE(Z|{JPv_YggRf3i2k2Ak3HZd;jW<6@}Sm zBa5r@LiZ<_F?gn!$qD0kA8yF-M&+(!I#2>rIGOH$RNG8&2(~cfqCPy`;9ud|pka>} zRXeMVD~1uBe#TPzAQyv#MPan(vIge%mgUYKvaPd6?R<`DbP-uz66#fzD;cMyJ zq&oSNuI}^2?8$XS{ye>A3|m-RCLWJbn`yfJVqVYiMgu4-FsaF`!D(ZxLEUY;1-BI% zg|v~(_;&m9+55IH+aZ62->VPw-=JY;x}xnGd)d@;f(}Q_UlEb;PB`Lod#xf6U|b|= zr9h*{4dT*3XSpsmJ!i_vVF*YIsb9joUz%V1E6nX3pt}q(4a0{=*G#6jt$rBL&rr#Y zQE~5!uJ?KMT=h&pt7%3?DZwtrV{X2gJ@fkef<}WIF@VoRHrx=8eDDH02MnzqbaZoOz{K=liHj9G(}wY6Bodh^Xf%%# zy}f0C*u8z49aMM2<+^E#HRLH|)SP;YuTId4i4_INgJWjv_C2acXX!+f;HV3VVmsl> zq2_DEu@bm}qG)ZmMe9%O9Vhlqd%E*_oSSANGm%ddzcn!*is9P;#-z%ELRgHQ?Hny) z1B))H18f~kx`;j$ex~jgU>EKo1l27$1lK-9V**kfxMb8AT-$G;IDpq+T9SmL(qqBr zlQEDjK>G;8wCNB&2uvfEIp*(XgEEELHWoU8Jol-NB;Xf&k_zMWuCJGKE|Ak!L{o*> zPvg1JsX+7XZ0a%)#5r=l^ol;?N36%7AIz=r7c4xJO=!Mt7m;^bTY#mGevpoxNV|xvh#lY@|4LD1w{j`| zb~n@0l1urjHu6SN_-Tls$2^oQQB7`2^d6IKcViiFrT>g%f?&D&m4B?Oj@UgOiflc~ zTJiNO2{!uBzFvt}e zB}ia{i7bNe>ON}JjLDq5nkqAC_>bkjcZ<7Ssk+53gu1kbOHH%Z-drrXWdtWKP$NvUB}URxsKw6w zlS?S9Jw&F+Z6hLxBJ?}~rjo0)5i##%(2zeGAwx5K!*4rbFWa4TmKg_Y;+e~=>DAvS z1&y-abB!8?79of{;dIGizrp{?|3~v;4B?UvI9K$TA8alAkA2M|MxTAH$iqo7Cf>(} zZ$U5}-xo&m;zec;?eXe zhxo<2yqG~=LbW9zkW+FVFhp|RZ-)u4$HlYUZRga__Pdo=a-~{Dz11xb^gHjBbf2VX zn$pKZq?!dShoDZLtNkm^n_mh-j$+=s5$RaE#W|YdC{mY8)Q>?8zNEp#R-*>yu*~ch z`oh#N!Tm_;r3HF5H1-vJoiuJw?lBSEKfu?g@=%wK6l8$xG^|=OMTjAH4 z;UV-NV!Gdc-IigDU<%et^uUA-xHM|71Cdtm_Ts=UFAeXi?3-R~Z2u;d4$5`V%DA== zLMjaQetTi+ko$nqnO|prwRjmoAMc5^oCpr~@Y1xf5TO6v%r~tb8@exg)l}5&xs&76 zvp}6uzl9yqO#iz9bfh|(s9nF4EaV+VGxLf(SoxJQCN+GVL+{4qqI%u5Kt^2|?dFr9 zL;aV$trIRuS%|$zNQqkg7%7s@(@b)0jrXeZK)dxSLq89#IAvlx1uE zf|ZERXyS1b`X;lBc)-Z35%6|`9;v{h>4+>BPVMI1uN;fOdGq}8dDcYd^_qqBkL4%e zy3lu2xF6Wx_pim;lq-ZWEv-P{u z0!{~16h@MI{3K^dDSC!5&-|gLhG{p-V|(E1wq!|uL}bdu+WNltzL%6}B0{VYSvr2$ zRw|WLajE8hG6pa}5;RX5aU}6tqOu&J3(|nD%v6rUdamTbXJUI)_>o97WS+-QrrS{z z9*Wy;(J3rwxIw&+JSiGlNe8iDn%bQ~FT7eSXK`$>ba%ZZB2q$#$^3CILCKToBc_a(8Ca#PlkkU$ANG^AI#z7@6$7JOLG#DD#g?0z*`b5boVrs>Z`*%Z9cCW6GV^TC@3L4FY%%?0k zVw1Bsv{mAY!Z{8);EX}~V~w^8HFrpQa?T+>OfQCQU)Q#Xqf@xpJ3n1B zSPaYW50>#kmhb7X-#Nyo(IKFc2ko<~*_hD=$0@Pux@eJA6L7TDInxF1XpD%?gTKf^ z_f(EiVX5u+wEJag!%aOCN>nfcG@sOE4I@M94=xfKxdT;iGR8_nF2A zQ!Q+C%Y+;>N=9uWn&e+*_pF1NAg^LspAvAYwB~m6dr|R2F_Ks(bx}?;5#wZi`;zf08V(dwJy{bf1(qA`WjxqEWw260m=!Q>Rn= zwx%qcF#*I|c&bBG-O0)&B~DqLy(G(2fx*KqWd1BWGKv-QRMSTxxJ&bjeDcHRK{!EN zp9t#^CQJErxZuNbY9iS;PJ=f+zk>H)1#aV5+MTprcD{%Oj}r!buU^B&I3&OLwwp$Et0$7_9AWUo2LtZeF5EVysIDdV%nt-_*Xbu7cn%q!_KEQk zP*Dp5wA!0uEIAN4`=5>o2Kc;#+I(2yUO^)zo}pXOx0V|+VdvGmTWfiKs51kh_Hr_w zVuF4|&uDlSsxamM-aP)Sl^4=LAaK7 zwPTT&7I_ZF0W7cK=3IBW(w#<&JzMXaD@J8JbxlD9Iw=hOc$eDva5+H*ysxss?)RK< zr5j*5I3y{0-14oJI<7V;J2(GpoUQ(;Y3afUot_jvwe{+PsH_bRTvI_5<$=V9`s7Dv zfD#m2oOIyN6(R?7$8Fte?LVKL=uUju(b0eFvE@5Wdj>~hDPN3!htTHjCV-T^V9fFS`T;CQAE zT=}fRkzjUlpAnAL(!0#DOM+-kx=ztWlEBBx?k9#f5W9vjBL~?n;Ewap1?3Tuvd5c3 zO?2;>2F7DZe~5~7P8f?Hdofawjk!a$onztkO3d)@q8S{CDZt03aNpOFILg;ZN)T#l z2DBEnSR2lDsx!$LJ)Hiup!g2tnepoD&}mVQiPJk+F`<2ac6l)rNc;sDyv_fnTec6= zGFy@j#TLHKHvb+s|A_JX`4)v44{7l$o?uXAqj^r@d26{v5Bc#lpaXCI`O~+eRnxBI zN}Eu~qPjzU!@?GmDQl($Mo$3N|7ozvC13To|KFlIH5TW*5_PFTp*P}U7mj$EcBS&$ zoGbYkQFlFwi=(!SUo@oQlw;Ljm2K|YFVHYaJ=o*H0|Gln#MfX0QIn{v527z=c++E# z#dQ>s5EX1A8^=6;zW2H9=mZ}Idca=U_KHq52{MbH7JB@KFclp;9TW4zzY8=;M@9`Q zLiGZK;`c=niQu}PzhfJZ7g{pnB+5P1(k|M0rb$u1?2h?RBJyiPd zM}%hqgwgzu)c{Zh@!2P7ku$;FCymMv&HtVc-kMT>4!W@Y>`&61f{IH6yotjC=0!HuJS^9NO-}iz zd0A|q$~Ni3UASXsJdz!u4f!R+Xr#^OEQYdIrUrS~dJ==$Y9%!vBzBR- zxstQz_%Ok_js4(%B;;pX9N8~4P5K|1)$+1_F|JmeKt=AK{UJ8+RKQ&lw)VO6c)W-P z6u+iW;^MRVFB{s2?DkjOap{=jeJyL2>0)c$T9)eMG9RU&F3lVVWya}-xEr(Sv3=ko zzZBh|@Zwo(zAh(rGv6Cu?oPZU%X|bKfgc~y^H&rGc~n38C221CO>Awto^J2Wq)TtC ze;ZPcN)*ed6M5gMn17j-tnjA;s8mYUcXs8=yOEq7*k|uWQmyzxo!Y!hW`+aZkiJp)q>G@oYkEqwc|L}c`Aa-d~TV{#O7nnQu+%Y z@7HsRsKriDc*IXLtd3^Non>UAjbHQDKk8rn9&j?hN8 zC=40ZZr(K=)-qlp*6VW9d|9sj4l>Y(q4!CEigOk*=H~Z~>pOtsLU6%9qzBy*1TjI~ zsKzIz8_oTael3*k4^#CcamgzLU$t_p*!L!K%q`*pPPqyYg)6(kvwltTuzdrB9f_e0 zCRTFu2PG7X^1$I1C=Frc{?($b&^c)|njqa8Ar?o;y$vW66Itmksz1 zf+KkT@j#s4HjgUdIU+uGJiiVEU%|zjS#wd!^}*dL)xm1+!D3i#w$I zT|U9|&q>axz^M5}1!n{Xt&6F5y|L2raJQiyn-(a-kQ+^udQ+IZdYUVr$r-1VA`m-F z*0rN=wpKJ_lh%E!qA0tRvqRxgr5pHj*O(&SQ)BE83i@_=sAfBi+GT2t)7-wWaPSY*=@X)Lc9n|s! zQd6Cv5}36zdcis)W;9vv+3-z9F86I)qjWY{aeEGS5p?B}8k_&GC2gM_-t3PJTB^;j z1b$U^t~OljX&Z@lPgY=CFsoNN(Y_IF38?{0EVkkZ;{f*V&jeC7k<9wCm zOZorN%&Cw<(hn!y0TcgFr66b&JJ;X=L2-ajRSpz>Y7CJ(k5-JX?Q zy(8u2AUWNtYX7WGR+U~6=<}w~Lk3yLtQ~&TjR1;0IjEGN3=Y)&LoKLo@>B=DeI^G^ z%+L3uuE)G#XnXs%DIH~(7G&TYYuqiHmO$5*Z#A>PMGQm3lWXyZ2GtG7a~o7vn2aTi zhYhJt9?Su2i3zH`(M{mXp8m`0-cj9j+NhojP4mNXPCxCt=} zES+0KHb%>b?Ed>qxKEu;&%4>%G!Bun)xB+2-1GfI_d(JDc1!g6_E!~FhpY_4?%M4B zY*W^wYtuj`^ZMU{rt@uTXm$JDR86LF`t+aKOBE+Y)#0R^+wWw=nt1h|3=s=|-uXA}3?II@pt7}A4EhJ|w(VH<$Fxe zT=firO}XCr(M9Rm#8ZR{55yg)Qa$rL0uz~bd+JF9m2m%+H9WN z(gZ(OSJjWIw|!ckW!qT@9!Yvt{VNY&eo)3NaW~Iqz~nsd?qyRfHYaFGTQrfw^3`Bs zIb?rBYEZ50i89n6u|c;i7J;_g?0U;tUKL$Q&GzyQVTXp?cOi<-WBgYfpT40x%M31H zy!R>Xh|vtP^!(?q%B+16@hldu*WS}IAx^TVLVD&OtodM8)S>w9mz}`k@J#fN_@rW^=O>HC~2O*_qLAb6h)vj_P>@KSFxz|SbTAXz=#>lUjIhqW}yWt@TGxr0E#7Y;_eed zNZDt4q#k>LZv;qY4>8QE)$#rBSR5jK{{E0j7+m2hZl~$Y%!|zaF3l^r7^Ci$;{cPqL+G9Xalw&n44n%Bw}!(d(>4qh z*$aMp;aTb^v8M{_grFYkyC}$WuVcoMlR8VfY+d;jlq(1&X>|^fX>$KZvmlqsIMtXh zZ4!B9H6=>6pU;KjPp$BCp`MID-5dm!m>baI6r2qo^o(e|Oe%2KHnOb%;iw&>#MZ9g zq>!CyS;}TLl7iWVK2HmASI&#Fxu z&_r1&Zn)|&2}<48`vpWeZIObUE$K#FcaD-^opQtacz-bSsZ zLtL|fcIpZrqM^7?(4!$!@V>t*jw!b~B>jhkaN7a0@f~S>lCC7d)*?UG)XDeEM!k(- zH%v7p56eatc77wl60211;a&Olm`7}X2-{28%xfo%+nIgz;bRlMA@zU;G?DNs`bE=}V&x(Ht4ikM>9|4!GdK@P9)?YF@JoTk}i)XlpSG;36#r zbF}-B(-+)&fJ~ynSf2>(-?)@RC7@n;r=T$N7d6GM?>OSD&4>l|1df|=dF+wKLwqvB z3l+JQUy8@;K2Z>RJ{*+YORZzgD=s zrf=v)%AAc;l-uP-Z#2P4*~k_-Jd=*^ejZcD)v{<@&%Vd?s3uO+$3hOC?+&p0k6JMe zrELbjRSgG`f|@vOa0;7orMbSnJ3MIIr{GD<$?3V?5T(wlTA*lVmRJdZ_!a z;_1~vVtd?av7v;W|D^gn1z0R;eQKJx8$8x9?!LJa+n}Mj0!l|c%clxC&MJ$VfKDuO zOa=HoZUQ%p+*Xmc2K^Wa*~x~NAL1Q%ouaVl`4k6f=Zo113hGNq0E4hjTD{KvPUHlj zrx?F11(f=*@@^cwrroFUf&&<))K30)P#w|uuG%m5V{&GaXS;2~uu-G--dnBM(wMc^Q>#|&8MSAqQni)F?hq2yT19NN z_Y8`l+Mq~{sA$uQs;XJ#yc#gO{WG}FQUFo*pn4Wujdkuy);XY3dj#;YhvIr5WA}yi1KK{!~%9y zV^r3*@%Gu_xQ3goeYmTLq)}E-dJHf-H>-7$SIBDj&Qv!nR0eBAEJS+IVC85NEq^Mt z#L)bkdjx5yBQew6(9NTSy>gBK>O9x0mhvY+_T&9S#67Ihk@nA5f?pB!1~TjYFm)#Y zGe#vIaBM@aMTI#pS=gcyq^u$tW>y>^72!NBvU^Onz{q!y_kSVY2iQSRklkkAUTGM1 zKk}&k&&E_Jn`_=DoLyDlu7J5@VL&kkj<$o#sjmpHTB$(z7PEO`6`!%pf0X zt5I-Bnbrwg{f5Gzxv9TDP5de2Ai&=Tp$1)lgz&MTZQR0<9fmN*POXUu@&8d&Mo0(G zai`*)7x{c{04KT=yjMFLhyD!{SXlRw_jX-Q1(m!W&dL`O82(4GB$y@-Wst#Q1SzYX z)3sGt<`z+riZ$_QpUOYF-p8=Os$Ug&ii~c^?$wK5RcrT56a~wR-HW<~j2cXvdozsm z_LBH?1FE(iViQgF6AK_KubN+sx~A9chG7VzTot(H4RG>%-k(prCC`0#h$Xm%g&n3T?Ys9K-*aB$n4LOQx`lpZ#}1_Y3|LN@BmN<@$hBYQ^l$Oww$-7x znQ@R$>^Mh9Kn584EBA4hTh2m&e>_=I%+aCn1aPDT;%_p(g_}@TJ7PtS0UU4*1abR* zJQ?YY#moqug?K^nzwQy^6tn!0F4z$-`+$H@4SW~=nD)wXAMePQ>|ZgaQ%(YA|FuX$ zW17ixWjK2WRz}yNL^vYM-^yz+mO05Hkg3+^YJ!s4G`SjhnMu}r9Z}Tx0tLeQaS{fm zGNN{aB&TRILp2^7x+s;|V502{%m&t@$jxomQ74xtD;e+7xr%pG{g9B#wr@_TQUMgT z7V;0Z430^?--(e~8klbNqX81(z2h!!@)z$3SiT>Xj zjkL7fYR@sVt%{aU^&^N#7T=<_$F!2vL>BnuXw`5T=ApTgaF%fk4 z+b0bhi2GVjTQ22i?_iR^+b(A@oPmak@cQ>0)@pN(pEU=gVWv0d#N*%cDoyc)BNT7{ z?r+uGtGDChp;szseDz&zr>E5=c$zl|O40texshQ~OICh8=-N#SZUa2TJqXAM4qNW+ z&#xMDvTQ_8l;f&b@jDB6V?d8f3CPRPK*(2I76o|qBip9wm3e?za~X~q7i#iR&%aZB z1@G_AeFXBqpQjf@g*9@NwGh5|l3}uH+qSz5*|}ma2uD~fk22O6;{8}ra%K!cu&b|> z@t420wDI1{x8|WVQ_uA3;;B&wlK_Bacq1TmJjw8J@yZ^XbO6MRc%x;&+qOdOqMpp; zC&0mD$G+_&Xx>}l4ua08+Zb4$ygQMV-nYPCKs;1wmr=Fb`JFvxd9;btLot?xc~>5WPc2@J~9EB~$i5@i)ywlxxk*KXS9RIvYK)h506gIKQ-gJ)` zK&>oLwrs89M~Eka z>3@cIzkf5PX%DJ@0mdJ|?plU;KM$zPtDAv=)>$$00?`G0x1mauVb$2T3fz(P!68m- zu_|4(?OYaS-##w35JHL0Esqf=3R*u*9v}(euhB6gYF>d`9tO~%_Ck*s0i}u8*1$yT zawPo6t=&YGq|MkJ^7H2lsHE>9d2A7*)zm=@7YOAIGurSYbZF1HVySBO9=Sken|%WQ zVkSE`(t_00W<4oO;W_H||M2%+s`Aw_GY8x>a@I5|OY zvHO|Nx$2ZTdg~OvH>rH%8>?m!1a@6c<+^TCjCK-=zX?hJ5;eY4O~y92&x2P$)_QxO z=O+*Lu?^0w1DMu{RGwz=1;1(Z9lNG2{JY!Ly(aw%Lo)2{v}GO?KTWEid{L%6M3h@m@twEKt?kVMKUAdc}Ev+$PZv zd3_ZqbVha@J0->*0n4V#>#uj@ad`VY8Yphumz8Ur`^HkMt?WXC3z-_gTXm`>)Sa`Y zi5LzL_;y)FKJlVI*eQ}Z)-?00KzPIcZq$DtI?;O8K2nOVyJ0op$XA6wXD{G zUZCLJ>vVnjs~<5Qms1Zcw<=j}&I|PE6%RJhwJp6Cf5HiV0!wJ8F9*fT&Nc*n#FxW* zmn)3xiRQFxs^?M6VSSzUG{?w550>LJ^WofthhSCh7m4#w7)7F*d%ceoLZCG`FnmZ* z>P9G|KGXP=11JPD`f)yp-AOLYi(LzK+fjB}9RqY-F?yG9*E6gf4J{1}Sr@L@_kN0F zc$XGx&1V=(2C%438r7}>CTGXk!)iil%Lr6c-5L?nV#3W%IK2RQa~1is8(oTL=~Lf8 zvE5arYx4-X`8oOoL5>ey#`Xn0_j|B^PTn%zaoX{m5Tb$fwd>O4^50oI$I`5(Mwj<~ z+1u}%(zm4|zNdVm;_RFtrD9g5G+;cSIB8VIMRme0Vt!2Z=ak=L&3Xgn-m9xgI?-P9 z#nqIN+`z;Zcap#7_7ouRl-oVfw(K5WJQgVQlLXR{3aG1+mHWjojZu0}-0Cwbm$>n{ z6_x~iq>I@D^*?oW8Ymf^^3q2}r9&#;)t==WXzrztZJ78Q_^scssoPbFdpBwE>1A%d z-Bn#AJEj_mLJI=!rweA?#7IW}j>jn!uaIA@M`!|}HjodFAVR69Wb|UmuQax~Z1Ol; z8mMleJmoJ3yfH_|j+{~2;?_6N`tMHXgEW=1&fBBEIau18mmc3D-6pk0X&y}mci*&}k*g56FO);to85wQT zH9!9h?}+}URTqtwe@bV+$!2|tbQ(Ui(n0-?!e`d+XNab|^t*f`2nrtNIgS~YeDE`A zIYXpa3ylGTc`=i}ndzC)}E zz9DAV&t(&~lDvC_-4b4i#MP*PU_WFY`v*TxobUeDAff*GZ#PdEi&Z4dc6^!FYpK%X zL8lar@Fzh0lLjgs$Dq|d`%e}2AtPs_^f~WbqfJ9hLi;!WIL9P>Zl!!q0Qh@8?)+n8 zQb@%g+ZsjtLH?zZ?;n9Qw;yzTxb|m*iU{F4$@+zL54G@#i)=%VO$R?Q&%a|cN$aY& zBi4qGlpO%tms{q9fZR{wG?@6g4XY_3uiI~yrtHGQa1(Ky`QbXx;&`aQZe7!1W^2vn zNKE%$7%gdjv-ZJx$vQmYRQ2gct(2gyw#HkHBl~KN|D%vDJZ1B+G+3cp?WDb|Q(Q}7 z2UX3@F%&_$1ADtw+eHHYTeWj1ClVtW{k0qNYP%?7X@k78CpeC_m6FWGBDfPku4uE= z=hL>oBQCO6I=%XHGujVvLwg8ZYHhD#qA;O{ZR^NBT&APTGYzZ+16oWU2PhE*Hg%8U_Z zjz({GK5vm>o!vK{*3#r0JkFK_-|rkj_TU81zq#o}zWH?P3YSgH z*Qb^QYHVSdISd3tKI;?geBifpn#Mn;J>U`0C+$w(s(y=D4oC<`{wpz!VPhDu<+I-y z%YE6nj}sZ4VDxizWHHd0n)Ie4*H7@YPqeo5+5G{a1Ewr<2|pTGztHen2ARLA=dTfe z)<-Tx%#__8i#t)6J5ej}xHv!Q_R6}L9r**?#miQOPKm&D;Cvk4tUhG;M`R{SEGkC%X_#ff z&#*3+AJ056sjO`M(flyLMnQyUXy5dV+)%8RUO--~vOcUdMEe}>jUe|tt&deN2zsMM zUdQ)1TpQCC2AV)YwrRSghX(4X<8grxopHPVjyU5jPgmm%H=_4Q{J)Sd>XoQ~E}C3}o04hp7vEqB zzc~qBENE*U&qd6~9-qhQd8!_QBxTm`{E-sCX>8Mvs$=duFE#|}pH~a4+EP>D-oEpo zi|*)j;8mYPw&|DZEBRx2cjGO$L;QkZlD+4bg(cG>dq&rT zT&2?miTCkdcf1k<)nKZAT)>CZ6U_hV>kmQ^iqW4@gEglvNw46KP zIHAnD_szFf0)?g>uJFsFXP?o@XPVtps<2R9Vn`$uV&4fP{9E$^sO2Y(=&~R(_n-4lt$sgN~z>b-& z{ZoJ>?ZL^Y0dzIMauw~=z1Z@&kQSt~NXHIbz(0%=PO?en_XtGh?Pf3HhNT6|NfG|9 zEf_;c)m$)Qg)_@;+S@lD=b!tw%vc{U#LE8Q+mOE#j@NE{0JU%a)WgUoltz*%k*1Jx zJE0U*IKWI6eb8AY_|>>TvC;F+@ow-#ZonOl(C%Z|2w7&Q6qq5!`pJR%kY&UK>)MXGJD_?Q)2FJMF4|~@0T^KzVHM_C7{ML%aVqyz-FI;Yb zPOsYT%Bfy4qPU~=Z+`Lbq0U|GPT?Bf*NMSz4<4E@8&Dz^ly!_To zJ=pCE*PK#cevUYT4&!SDyUkRtRw)QxY&91W!W2wwEJa)&_Ena${SJiQxeI92Bdpi{ zRo8z?$f32*@{Ts0G|1{vEJkZE7s#<7Rc4|dKiN=4c{j-JrUUP~x&WQZ z-ACH><}d9#1PrO5RQHK*_Lu%mGnVUPTYuHt0e1@$r9+%Fc7IHB9BUrsTjZQ(V{n)% z!X6ojxG60ak(~0LK9J<1wn{HFnP_->Me55-$!rU5S@HadkLrDfMfIkcR^;W|~C|%CRi))&mv*!xP_Y z{}6&|FMZpMo=#US#s*a`y}XVmqaK>wybHrZR&qXZ8;+wgiH3_ozo~Bi_Ak}s(QtWR z2Bs}Rj2ErbV}b@k+EkC_+6xbgQpGwO5vu*7#;BwU7dNtQo8|tw-?iV&W7DJlk|^g} z-U=OUk#6R@y%kdOf$cse{<@6W+9Lq@@?SbIlaR1(Cs81M=7t-e=AeqPA}De9v&SU1 zPtN#?*JfwuC&!3_#Q;LsB*Su|9MM^CDnQLYK7ttQjSC%JaeWM->iEyFfdFW=KXpj1 zk@OH*Vin73);KSglo3}?C{uXK5T0#lHpsP)V_9v@dIL+p_~lXkS}nSQy~XCiMM6o4 z%1MNn_L&pRxkaUipVpFG+6u10-{f+esAA`lUD>$a`JTd2vY!hP{Ru`%_>~$@(@cj&*T$+&+`Ud*I>=)yk2C59*k;=Ws z>XILdg~q*Eqf0wvkGkBG_evD%vrREZvaD}Ie3o9qa4(L5IZ2}p#XW+~p}G8Cy9Gj7 z%rDBJV_K*zNC5bYW%1x_L4^h?z6J%J1hU02Z$Kl>YMk4toBl^($r;G;@$&>b@AGVj zh>_mP2!&zg2_?VzM;G~9c~HHPE0AmnS)9RkUKFbtNcLRsAc~2SZbev(#?9I~3GIg{ z9xH?c@RwDYwH0-gtc7tc-7WhH2f3zE60MlfypWZWpU`4p!3;(~M@i%%JV~ zuCB?onX;tO5%k+WSO47|#6OeCUEA}r7~X3?uL^RbX$S~vp+{~38~baW1U03c-Sc*j zC}gyJsoHs?-%z2oGZ=*>{dKhFXrQljzQdY?v z@tTIrZmG3AGYM{Q;Ps1eacrb#Zqux_EjZ3!OJeuvw)nGFj!~PGa$~R7<~FtDqg>FA z5HopYy(+Vhe6sfBgV1FO4Kr9*p-DDDgq{19r>rQ(Ds088{H`@BK0RHC;hW%NgINEu zr89V%iGULdTK$>2NUFi_PjUq_-&zmE^T-KhmeV#GnRtPyeXY{oL87=51)_9W>H)-O z_FpCF&O(2^GqNju8m9R)-=2DXK9^)CqQTP_pykvo0A#d8P{+?~UN(nmpP4#}>pZABQ<%L~VtkwFWIj9oFHWMgJ>17r7>gB= zwUWZWDI(gvFZ0bN^Pu*lKPv|lITk*aV>VCo(CYOwf~L;6U}e59!#nfp3si(p`6Z@M zKweqQfx5L8&G?(h2Njy|ET1j)as|O!JiG;d%s4`ybTue0dYmrD&$F zS&57f>vdD*{Lkhc*iL09Asn+#0!lkM%SU{yOB`P&ag>fG)Z4irjuwA?6-HH#HuxKS z7@s+&$sJ{pr&<&(Q5d8k_6>A1jfUv{KMHbv5G*PPN1Qj5Sv<`%s#Ug&03QiiqGK7- zb~VW=gjt=VC@HHG5KtIvZ6R=qP14(S;|cIC;W(z*Bx)u94Dp%%kLebl2^EcIv6~o_ zs-69276+y#+dYG%94`^a?oQ@=VLo?0QO3M4%+M;c>CjEdfk;{SEzjov20f_NX~jSehx^(=$7QcXe*ETB#Tm_*B^_rqzPq*T`({b{csyz7RMr9 z_SXb`j{w%up#3uE>Cx)l8(8I8;AsMUnq`-Q(A253>n8rOip4CE8KQC6tL51=5qUf) z_3s5dDkJAqKw`c$!!(B8(YIamt@=c}D}SK8LLQ1@S4Qm|@GQ0*V8<5*u`N; zP-ua#VTVm&)PUu^ZLBdf_d1<9o#_fBaO#VYg=*|;yzN)odToeqW_*TylM-uawtvJVfu`a-njqk!qyUWpH=8L(5` zsQRw0g8Z>;(1Sd{YqQaq_aYpo zJ7Zt19cM|htaw4PFa1~g+k~pJ(){c0C zy=ScEarUF5RdjNf;zB^3Xw*L=RITqkRHYDI8*qV9M3!R@%Kpv2?bz(gKGHjfACp7k zWfO@J{0(0Io`)V7WgIOT;&)+nCx*SpGU~#XH5*5NY08CCTJI~q+5ICHq+?I^;HL2< zi^u)e81~nY9l1Y3qlP%;=o$ZwiFE*(1q99gX@U5^JJ+jr3HQE(3Az@3{wH~J*LaE? zByDZcRXy0Cbp67Sw;HBt6(Td2wdXMTnEdtTvkQeec$g@gZmwe6yCGe{&+sSV?2Y}m zC&HhN)>$iJ&_5|bvmu{~!B0ItP$%7!Ijc`%DG3?GnMN z=t8l`8`TW53uR+@qOiMnR+zb8G|3Vj0H}5B(!5T345QIr^|NNfXY1`NjUtTQ9zWkE zIEI%^-l^qc?C=E`p(>gggEy%BYTpO>v^*SZdT1CF6^SUVc;@KQRlAKD;No=-2BTNT z&RlZdEaP;!X`3q%i~6>S^K6D=OGNPWce}5pihMsy0&^XKZJT_Hnrial&I+|3Tx4S0 zmDp~4s5i?wiBE5`yE1R@xh(%%m68=+P-B7N@Oedjq++2QW5TMs9tMIwe7W3a@zeTY zGiv24HA-wf;?Hb^7e7TwjA4Xe)_bxM1@2CHW};#$>teZ01^?Z4XlW(9i)d_GR26Ef zL%9k~M@HGwK8d^eu90A;P_tRfaHnMiTj@9~xsE){Cb{Igxm?#i&JFi1){r|Db`}vB z(R?yAhN*wSjT+X)SjUIx>D7tUMzF(KJuUAT_U7b3*#dyQ=kPeKOsE>s^*N)N+v7(- zwwnFH*#thktE>Ny`XW9&h2~I~TE+-jZC!v5^Bhb_cTNIZJ>=h5WcxTv3eauya~4p> zMfC-(3_}b$?{H>Scv^o<7paUT>KH5MkvmaynA*_#(1l7HpyIIjcWOD?eIWl?5$4M1 zGRxq#1r~5}Gr<5a<-5HLd=n>+ZL;wX;g|8|OqMlrw4TJM9?7@H=wkYYr6Qd4c3b=pabMezx8wMSVco#@%ZmzjB?Dmo!GJ9$y zC%w8z^b8QO`o-MR^A;CjLCjyw&+e-rL4TR#*&Ru6cNu(b@o0#!mWppCG2b7!?Z`L3 z{V1R8C%vU+ds?ND@GzlF^Y)h7>1!GG;Wbf$PZWgw!>Pb2X{TmNHQj-nh#$Nd;ER?s zu`HTRnHyi0D{shaX$~ig|B~Of|E$H84J-vG!LdPQv}r#$|E}LgGpqzR0;C6C-fv5Z z=|@jUE0KD$9Amqh(kP?|H$OHUtsU^Bu{#C}M?S{ixGm*r7@TBMpgn4#NX?e`u&Fri zd$`4WL0OAGQ9G#b4&J%6CwGhQ=T}g(M6;5_LV(A=>w-k zh7`3e#?;u}sEG-xb?F|@{S#KL2kZS^9tWo)0S!@l_>ZN}x{^DfrcN6h+VaFr$sp1Q zTkCl***q>deOU-p{zoQ%;%axC)B$Ya*{)f8k9a~{TZ~T_!zGNtPFpUiX-*-UF75$nJ+&XzdoxEQDr-x|J_?r| zTvhuWn1A!`=I4KWYe+23SIO<0PMWYCk(a))H53(-kSfn&nt>3XJ0&)pd}7=@*X1$H zx1Fd>M>YF=*6!^Hk8gwp$)N9>gK~|tbNS?Ek3wUw<|rS1djHBl-IHbzmi?dGOr#a( zOZDksl7EfCw38uKtYY=sP-e&G_gpAR$`?Iud8o#|_uX$G4V+zIs)ABXs4r4ji_O`? z>R4R&C8R0r&m?5pA+6GBpHA?}k&jO(#UJwl;zOz80Z%igh+Y~%=hn9;QO-03R0P=Q zpv|c&a?~~|^G25Zi(?|+JgEF7u3~||F%&_2C~=G!Cmw2;n(Du9BmZf8MYc-ukh6bn z;Ke22;<2jy{uvy2`n9OwU9acs$)HMEi2MD90vnaD%_6&$1E4@|`pzi)c~Sbtbg#Dq ztamQq+bP@I&|X6=20V@8hTU&t@|5>gQ8Dc`NNXpP@f=YAX;Gz2{P|~2Cf;cGelxz4 z=<=wSnSnFPaEjo$um@$py~UYiA8{NDkXOX)q_A$KN2$sMcVYy}EPuzh-k7=r@yjl# z5;ia1vval|1Y;hFVW-pbEm#pbzKzIg?d0cTm#}}cFGfg}1#-;>>br3djXr7(Z~w>w z0bfmx?3ue4y$es`d{#9A%US`#DvfWP(6rQST_Th^5(@h<0?T?wDkb)HrvIZ*5agq_ zRm90PV?+myEYhHiN#?LzrKxAejU~n_fd!ml(A)328|Ye53^OOx9(d-`R#fJXW4#|g z#$1oEdNLdZIz`EQ5nk7Rju$1xLMmVIOa&IO`!2}UJkB#@L6=TWyf|PDlZ=;gnA*oR zW;g0bA2yrY>^`_!2*nMVd;I_&!bWBs{*C{-_ojxIq$sGN%dT7?6_`Kv184b#NHG{~ zpnQyavnFx)^`cyN`pdZ3)r-~y%w!V8$>uQIBcT*u8=G__^mWh~rRJm2EwDC~4L=u0 zSJ&pZRp0F~SzA~CHoifmr%ns<4DbeUh6N$M7<$_YJ;(p?Ohk({W_lV))v(S_JQL>m ziYn($=XOG)A|q{2Sj>L&_1W+U3lW%spwa{cT$l`G@nZvBGJ zTnAG^&LMPUSx4&%qbQaVjn-K%py~Gr!&#-ulQt-nFe7+|6$9mn+|6N%58% zJYgfFTB+Uksr@TvTB=FV0?)@A`njoA(R@91kEzKTw3hyvaxr?nFY@jaw*j7p9fmR7 zn!^#Z?*r!e)6RP(DFi3VT)C76?jhO0I8zA$LTs&8^J9Ewyq z+lq|X31T$7vG&6h*~2b8~^qd7mR?S!9Y5o##e!_*ilO} z%YT%d84ZFnMJ4a?BD7~SrK_ar2%LzHb9iTHe^$v{PDXI_lL84H;i-d^pOX+$a#d{a z=X|?QxX~#h_uRt(#>-R`1sr5+xp_o|kM=EUviO1Q;o8bVdB97@d%ISH}vfKC80B1;EqVn$ey({EJ zd346HEP)M|qRQ%>ECBz3gh}g3{y>T1A6}O3BcP|uNhXsWhX}4i~CbP=jygCP0Tdx&n(n9!2seR_fd9QmYeR> zH&bT27i@Fx{)cRBv-Mw6{@$vrF&5b!-DjlWO>KTQ_mOY(6Nmww#$5QOrgSIBi!#8E z#5nFGt94nFTDDEoxif-RmAq&hr|vo7kbMJgR-1F@`Zk+@$oo2=7{Z)kg!;4&HeJ~I zE=6Tm%Nx{LGuxd-WIRkzG<{H15!Qd@IcO5E@LnguJSJu>qWs@$5h69ajS{VS5+@C9 zG2vRr-$hUf%}w>-9=8K}+KfwyS#NtP!T70O#cZ>OBFExfm0w~j&!B;E=}-B>nEl^v z!2DhEIiwP9UuMa_`R9l^QJPXH$i0|hSRVG?B{3s`Off3`lYS@U6uyJ3Q@khU{E_js z!?S+gu6}VFXq()_Qq+Cfq|Nd}y9Cxez8+3XC*#tQQ>tCWPn1x}q`^j-fqc#r=ZEfO z?!CqG|0sAAc2j=BtPOzGWU4VW_pnb#41yuvg`_$niVl#9hw2<<2|Nir(#nQUvz-7= zv;^RV41|P|!W&HVr=4cuElSeXM+n_KAXm8qMmoI7eOcS-!oBJi;amw$V{qt-RK96Q@EIQkY?x6USgJL;9E)u- z>PVUjdBKPU*b~Kt&5*7$2rw^BQz>A$%Fn~*^KOApib6Fv*-Q467_e{Kid~!IJk%W> zYXJy38D?F}_T{855a-8!#dMjUi+G#qWBInJ~Z~;BQG4 zk#cb@^%c6Y@S{2%pB59 zqQBVno+XAm*t*Q4^M(+mMdS-Mfd=n8vmc7xC_58&aSa??ZBCC`8Z>-_n7@agKka_= zK)qCg&fuMSR#j{8+bi6I&t0E3{hJ$|RnM|wDOLniL*C)+aTG~LOSeplhj}!vnXQcN z*V8a~yFN@HI%Pt%zMPxrIV@L(=M%&Iml2b4oEUVNgGx8*{W(L z`z}Kim@u@T{grb_QlGMsZ{-eQrZGp?)xD3Z;;P>E1|vVfr6KZ>D)!wsn+1;@^!7># zpa`(#fATPy%nv2LiP$C1s)~P-P8Bb^W}QyudE(f-Ak3-*|D*7KjPrEpGa`AS9qFP^ zc%DD;QDp+I_(h*kC&1ET_$p?-cHDb?X@>XgfXGl91xr036W1gvT(7nSs5@2v^aOZ; zI4UHHo??4AZ$U$}Q`je1IJVs&b~lG+V*%6-9#;2YYjnUSiz%{?3;KyS{8;wigjHO0 zUZT~;5n$w|YjS|^k-VsV+129IF8FCS7`IPisV@&V8Gxdv9}UyXH}?B^#*Wy}4M(^= zMbEqDn=B3lQr0x{nnf9i} zokW~DHr-Durn1#wEnrf+6XDp(^N_GDMd`Y390Hf(8&jB*B%6AzEtQ629E{^kq3mVU zuX>^yJLEqkAe$Iz2z@1Gr-~9qcWuEA506!fmMpDR(H?OaSNg5={KxRj(vEUnQ$~M7 zi;=#=;Pr5dk{Tr7CHxj(x&`CS!jcr}QR|W*AlGrnGH8frG|o;?Fb~!8l0t|}l;mR? z;k^C_wgPAuZl1I#c-t$TTMYcp2U&J*ltMDo2=|?`M-P#`_a5;PpYU&j5j9#-{aV(o zNxrGxp6o!2T3#4|>WW^fvzICYKr>%yRDr5+>1{&38#39YaCh5NiZck92YyG7vWRBS za%vRY3f0yi-HyXn9_1VwP8j^agSdKpqP?9j3w&GY<9Kc;dBnEz9$kxig{lqK9RmnF zpzz81(rir2pkp%R9(hT7q6`$Cibyi-vtu7XTg6ev!|>vtXhQPG8AEI-=9o!9&c@gq zllTvU{smiZ`L!6slBn`1$DAgwt=!Ao8=HG{%9~RECcuo{QYjDi zPCFxxJ4-5T(!y_7Mc4wUPLizm`fs^iomWLF(`->S{2T{WxURWGPOP3V-k_vVdlDLK z-6F{};*c03T^YTXc(%i|idiNG<$5DTgL5=kO>L}R3}EWmKy)aEdnd9Z%qBK_)~c-7 zD$)p)ao4W(+GI*6trZzBwzg1RhiCD<*EC_ye%-_Fg1pT9vQNHRTwC>fqWe2eW$Qew zPy2qxb?ejEDW6N-$tOThls$1L-*f&)aiei=pfobOBwwY~+2-@{JvXVIH-6yweq|u< z(-M>Sp~j`Dx{8M|Z=FB7=w{*Hf6YcNq%sxHL~43_(t2=pOySqk9I*I{5)SFnkqEgtt<|@6!X^DyR?!dh#y8Kn)TQ_;BUoOY zD9ttl7HdJ=r7IcE)XXg04uN*^j&4OiI=DWF3H2oCXTRY1ZwBU;`Py`!mk*rkM(sc` zRGg;_UwBZ#E&!Jp1EoC^aZV(%Vn;b=1~MB%l%5nHtlF1OTO~12MA4W(X#D!K>#xKjQIpZnUmkPslU-BS;h5uv_{QRzTdlblt>quV(_WF6=KC?;B? zZobvfwzGOMTbXA>#isy++d5}I-E`HN^myO=E0WzlEe6mHG!eX^fi zZErw6S~9#!4)DD8$=Y^4)qTD@I65}XHZ`>~h{1L9;Jt{_3P=#`4L1YLBBDs;+x}x( zHe_~*Ys8U`i(&-LSx!UtjM^x+Sx@{!X&i6yO{gIm*ZN6Kv}? zO!BwEwf}umRboiWT~6s!dD=eYVFs+Q2bk4|Xg=b36QDZf6`(T6wih>Pp{(0ci0ZpC zYd%kjF2wey9iuK!Fx`K>Vs*AeYIv(7f!szxOTZN6Y^R`e4LW_=LI-8Vq2K~H_3&QX zm|U`9x`)AJ9Mq$Mak@4uv|ZKTP;Dtm!O}K;EB0`YBSznb^udi^+Q395t~K*13j`y$ z!@h-ng^d>fTxC<|c-jHw`;@Sf^$(Mq3EfP9O|~nCAk%*;Fk17c&pZYXf_qu&Yc>yJ z)#S?yA1|8KvyhwX!=B)=UxpM{dM{m7`JSt9uS5I|8byg`u=#V{r*+^8by*Vz!MNIpygPm`7JfyBVs*q;35iiyE=v3{zTKq(SZLHjZ4)f5#9Z}=C zY)H-8$6in*FgeAWJc0|z4R9L%J^%YuxK=6Ie<4n>q*<%bW3oP|@0G)yv8353JiWC% zkn%sDFNP5sDD(Qy@V4Z47ms=50S{W2n_`&cGp2}=VPlaB zT(xDpd;dQi;JQUL`g3D6w(Fnaqf+3jSH(tErlyQmbbC*nh`%0;>CUe4#85|`aC@ts zYOp^-M2{AH&?i;!_CjG`A}vU+-X$wVHEMVlV?D?8k&I``Hu^6xhM16j1}8F2y`yh= z^g58^AQLKIAOn;f_A5BOP5XPiX{O$K3-#g3tfLgGajM@5Xe5ZAI`E6y?Gs|Z3>4*P zmuq3&CS&B?5G%20uHGRFui0T~uk&)2zD%$A1?FS!{?8F$C7&TE5MRqDUcF^d+l_LuGpzm- z%d*S=&VI+Fj3&=hJq=b*54ZGVzhv3ng%az^G0kpn?^PLcdMIk@A5i&&{QthXev(zX zg7K>dM|-FDDYix}P4EMLisx}GQ{x16&EHKmEZYv)xGcL?I|q)ttQ5)`7`u+(98`Qp zo>2D2|5+6S37nk(>=cEltzRF(VVqFKYUza~xA7(G{f9{AoPhi{mCsH48PROQOzj+F zjPKP4YhM1T>cl8Hyzapatq!qir0Dox#Z=i244l^ogp6>UEgtde9|M&+%Y{@xSM3)n@4iRNAE)hK_i#49243fp{k5F2 z+_e4v>_$IMge4}?pf&mbShlBf%jT}7uU;Z4xG{6g8bTdvJGmvQ6YQ2SyL7H~HIkTv zs2zjD2}VHEs})u0*y>@G=WJhmeeI)QU=doM(2J1D(1#90E%?9j1fsYwx)OFok#KR&jWT5%2hnatT?_^ z_TjSv=jEiyg}!2+IAmf%c5jouef?!=ii(zv#Aa`4!^0!_RZ({JT@wxGMTg*Fzi%Od z`W^<#McsCv{+2vlw^*!bIlOzrY5JH}~Uk$1B(R;>!Oh)2?t;&z7A^ zsZ+Dxmr;Ew2@6t`W(Hq9IA)n$F_o^c?@9yj{7rWQDB%a4+0tHYHK1qn@k+ZdAtAMgt=^_-cs53;+y1ach_A-tBKJuSX`>&&n*h@16IMlN9twD-eT0>^7Z zatbvLBQIdyHV>>1z1GZECo%ger6t8O^X6(~9+wv4ml>p*m77)$$l(A|o=XPGYa=fT z#FSuZ&(oVY@;3lVEXk5@Ljr2<%o!QKHdPs)fHF6TQ5-W&u*t%7;E%I2wbMr&IB8r# zd`;-UK9g)gzj8f^r@($lgy)psytq61ju;sGVCja3*}A-%*~WvIxz8(?ofXs>0yp3XY4=7 zjWEP<$W6{^jZkzA&7P+t>i$O&lmqWXU00YXzW5v~*An6(T3XbUOXiS4(cao*#Z?;*Fj;0qKe9bunK$GL3?WlG6@}CR+tp zfhzPec$K9k>?T*EzTiNQ zKFKP3glEa?e#>8ZqmH$VQY7pP+UHb-`JSs*s9tJiwroH>%+x@c!+U@A=urF(SGUo{ zjV!ChHSZh#@W^FD#Iu61vKKe0#>omh`y#)n9ES1I)c&vhajqG+DBlkI7t7UXhV$vb zLilNFa%dWEr22qx;D;c7IuAd#V<*ta4oX(XO05EP6-#gEF}qPr$3Ly&<4y%C+z_Jd zBsAS=u=8iDHMZ*e__kEZJNk{WQV!3gRU2r-gsRK^DHpgfr=OkUwqXBpUWb%rh~OV7 zRi_`B0c?;_M`~D|q%%amQoe+lhdS-UwN!C<@MD{7aC_FQ;x0}=NNGjP#|d0n8$dn% zbnpKZorPZ$-rvRP?oK5Hff1v-O9`dBadZtty1ND{u>neb!O;yH9Rmagh)!}M3>i8U zL_|P=-?Qg$xc7DMC(b!<$*>SlRdkEy$S02E1KF)ZMnqcI&~MA$>%TcSMnq6B`tM(D zvm~OWEwqeVEB0?045fDJ1k18;YrB#Pvt2I&R^#mrF%Mr&3`1E+KX~~#T#%r~=9|15 z&Z%kmYy=H@IVrQ5jIlxXlv!b(MLT`d%P(fdKuqG3WNJx1lx`8O_KKcyUee(#ueQY5 zDEFs>`07prjA}7QuYw-Haa9i|5+Q=FMBh!G@qdBr8wAlCGt0!BiK(=Q&ZFhQB&T z^ui*MX65A=|2x3Tu+JP(>Qy~fFAJj;Q*3VxDZZw?j#g5JC%yy@HXB3B?8$BNJXta4 zil=OLbH`6Gfac!FjzKv7_C6TRY_nbgv$Wsg&G3_oNwT;-)Qu3(RY0Dre_FmV82^qY zy5~&Ahp;iTyNC20!htJzF9dLLa``9gPz1r}cHUVNZ4uRQE z64Sx#KF3BVeOvmC3&z0BB>QLXmGPW*)v$DG9UAXbQhqD?)(z#m# z5+V-rvsH{Q9a$izvEC%J*%AazZC#0Y#|{^FQ+D>qy4w1(YS3FQMuCY5j1@`uk2rX_ z6(@?;csd>}6p6hMWRlYg$fK`n_K-So1>X%Q@+87|x)wa)tiUlIDYU1IdC|Iso#|uf1aEhrvS;vV4MTeV5 zD=6<$&&cVj(#gf=r}}&0Waq$hx_O&@f_DsD9ZQex*oG0~gp7!NfV`!Z2SeQ7g6O*# z*I$?Whl@=yeCK!kHE@*C%@&Ptz6`8j0<1^C5xfVqWNx-2?9J90kz;$f(GAm>W-ub` zZiGC+%KQQq_n9T;<6=iRaJ8tHBWZa@N(+e-xLz9D0RKe)LA%~e5(X7rpQ57L*}2z1 zYQrN7m-6TlUiL8i|Sy4Fdxf3;TUr7S1@incy1K&{_ASwjnha#Hj6n`Po;^hnb$iF^moo` zB3-#7EZT>>-=LIFKBAnr2`tgq3po2>kh7M%}H>mND1 z`zctB^EZA)%!kBthJ(yVIvr;TH9V=xmd}8G z=9>VmMAIXb{=?Zjrm2Cvgt!IEStf%|c`JfiDLJEBDIJO@ErQuT!`}Z(b3Eqd7n{|TqRE8B7t&@O zi*5fzukw!xzjDONb4Br2G>QF81M~VfiAJB2@IcLAjnQ-p*@LmA!~(?+i^A9XU0GsH zW2>UMX~UagwyeA`q>1+v3s1HdWtB@JW*qKwUpLQb&MH(RYyVgV({wB5b(Q7`HRL}| z;(fgWeX)qSQbuf)I$ezRCc)}4f7PH%|U zzY)F9n{+|v(48M(zR{=%KH0w6;ZJssqrIe+7|!iinHKh7huNHOZfN9Fs8HMZOFFm4 z?RtMpW=pehq42WF`8!HqXTN_K*qP72lzRo-9TfGbow1Uw{#)<>pdJj~jSkHF$_kxa z2w5_Y*9gune@~v^41zK6Wq&(x7^s8dHXJ;JnzMF?08kUFR$)-GP@O?r)akL;DxsEB zz)34DV$`{{R%t>%&|#zW8-FXmd6{+0fcQcOM|hpQvjwqrS0ST=Q^rqJs;juH-#{yQ zTWhzf7hjXVlHrq|MF=7CjnqjO5Luz$P=coZcbws^^CMw9B0??pk;87B7tQ?~MKc=> zl7rYMFSMQv{$em4%q06(`LXJpLCBeI)m7mm7z21UlI8Ft&U@-9Bm?9wxR7tJB_|?k zpP=M;2K<;exjZFU@D(!!*#1{~_Y+(9?WR*9jyfmmWI2&scBD?ok7pt-tD`I{BQ|4z zN{Czv4B1y?K~3e48k%pXyL~aa$~}cHMwM%#hDNCt@bV5~+pk!8_vStjgh)EIq(OCl zJ!jyzJNZ2_h}I->jZ9|Fot?o z`cuKDovU0Ds!cxk1P?oNjj8Jex|Erk$KeN&MG|+K)Kb&0Qk&T1GC5vfk_a2g-c#PD zWKfp8h15O@h_EKEiq`)kJqE<{JL-FvAdJYTj zLcs1Z(*5y;F18addLH@WAVpzNHR}Q$9&&6?q#Z8x>LQ*0<)9fRCe=_+&Cs{r1+w;e z$Bt*x?7-o+>xrA^>wK?n%#Jd%lJ{mjWT}*U#LrOeht0-2F~DHtZ2YT}T-Yko4vdaU zXn}AxBrdN1tqDyu4>L&30d3B^WR@7 z4~{CVHGY26oNxAYIB7NuT$c3_gjt(@;3}WKR4JMy?F#_`fQxZR=u$^&y)6ZW!}liZ z$cj1-?a8{2?*;`7P9=G%s(;2p8R2k}I)d26kN#-_w~LFQ&$^#|nEN+yyn3l{pm?Rj zX5qWspXP8|!D`-R5$$oyu3M?6njfiF zG&5Vj`onX|E+;1PFN+kpWWaB(;0lFi1?s@Y{ddDv#qWC%Uw6-?3NjM8K2*vjc8^Ms zRT}n#u{;|ZpKQ}sQ0TyqAD<5lu!cPc1*ck_pTH(MEUhAI zYR{$oljFG+?Yv1VN)`i_K|re3PS6@<>X5L$V4TPZpCe{8;wf6|J^X=Dg-PM9AHDI- zV%D^4_D--MjW^GL8X9qF*liB>iP+BF2<6W)qUAnhCC?%A-}q>)k8+H>^a>I&zRG@I zzg{t?xC)peLl~@`3*}}WsciDTd53;3q?F{L6XJu+F*XP^7GkUSGN~s zb;ll(Irj!x*N;^IeRSON5=ME&G`XDc_yxZFRVmv{DVKbnTpYuD?;gq^cABq#q!Hl^ z{0irY=h(5gO=7sWi+uGIzZKGb^2EhXY@cIQWeoI-&Y4rN=EJa#-40v=#>DltALBwl zwJYp;#;tFfTZeH04d;iBm}#UbMh;b7rrVi6^3#nX_!d(U#nZ>!o>82~dpTH8c=IQN zI=pp!Rh?w@DTY^NsKy4FckHlVkb}Jye~j+s#k)61RHG6gF`5-8Fv~M02D_C+y+h3C zjk)9%j<(oBFln;#9D4Ti@ekE2XtN`>v*=~zKt~c7=nhs)u=$(O%W>@B9#B>h!ej5N zS*`R_`u8!}{o!Ke)rh*;_T1BTMarYx_%X2BI@M-}*%-}Ul1?Mf+8yUmkKnpva<3xW zkT)`dT3h$5!ks@1>jS7y_&KZ-GUYv^= z#Wv0FM!u}=e#Z{#%U+H9yUit%NKw{SzK@a5p_?TOryA}0<3&tq$V6$6ucm{ zA@uK#l|GZ1$xcHM4paZ*r<^;Yh)$NI<24eA8^RWGpC;Qu5Z=I33WtZ7LqcT_BTWTA)K+jhkOGYaa zNQf8ubq|j`SwEV-P$;wHgb?yL2Um-kHb?R19p5a$$~_XrcZAKYdHS0zO%P9gyunB_ zG~9zYuQrP&u%syLF-Lw2?YJi-E6SZ@@#<2+koF0z#)GcRmS7G3WMZ3(thVr7F!1Ro zL3~!U7&z1k=EE~SN%KXmiOxR6_6H~{UY`Xf}_si{Y7$W>^?zP@KN%vzbbn6D9>aL zUa<{pdoTAhptMsnt&Ja~oU@e+1J9%HrdMD$Kp2xPpdB%mUO4oay)t4sym}?Ozuwj& zYSET6=i#zklHH7x->aUp%*}dx#&M}!=G&K&{lCS0-Nd)bf@XiqKGEd-#uEKKj7c}O ztd(0N%HeKlwDaV2WZ8w^XIsH6Pej2})fAQdyGO5gn*lWR{?w z$-$bbeBZ#&U8>%l_{Ci7(M?FFLMJFBBvcHfh< zbb4w{P+_GN7XSFTg#?2KAsPNwi{wH@%JH^ZJg}EsDyYjn&WAxi9&ESAKP5+c(N#H)F=Uw1sqVm? z6pfJI>y{Z%kG16gX2fa2q;f#o)42nH<#aBs`RLqOyG;=NQ=5)hi=kV8Y=ib?vn!fP zd0vM{HHi~m@q9EM{w3&`Kl3yE?cqF2R2p1jrCy%T+wt^z=BabAI0!2;0Sfv7aW1i3 zZ_d)wLI>7)|5|dmkn@m@&vUy<#LUFv-(V);`cXcGERvkiMn^cs8-+S!AI;slUqWw4 zp9m?_2GvL$vUKP3-pqn_#8nm|$I-qFgBE@cVX8DkldOCN1>9s=W*^sC1*B+ELa*>T(A(dui-+v<8cs1z#G5mXV?_6{x*1Nj#Fb z_w(jo#Y%#j^Zphj-{mlq4avFmEW~tra8DvV6rnzHaQkRoSQY#b=2}*OSOTLtLl~Dg zs{R(=Z;ty5J1Q2qG0fHf!|slLP7sf;xVG4Ph4&ehQp93u1Sc+tWD$%fP8Ie49YJ{F zDa9Xr#Ec^6m`FTM$wLE%n72Rn8H1f*-pZk7Zt#xvKG;*$6LmyL%eG9LD@4S5&K2}+ z=65#H1YInv6y`n{H)^-U|3P9YJ1-UtgFNETy%paY3N3Y1`(aCM7?n9D$U0!XAM%e{ z=fI;HfZ+qW6b_QLvdrfkOL|vxVE6atGOl|Ia=q?|KOJIa8oGHbA! zo7A-uJsDd#W0aox4uAeeqQH-SPM$;XKPl#AM?`+ zkghdyX!lz_{Mxbd2EdH9fGE`&zDr4N%=c;GiwG5K6|Qmyl(3o3c|l_!gpZ@9_6efJQSpIixPhBQ`C zjK+}unQnEd1Qf$03blo`nU$L1SUiU;9ko&sp>XfVFfcW`0yV{idOzCD? zS&|`|Jzkly^o%_}`Jk)|wK9z0IQjwFPmD17wB79d-<6@~W43=|s#HVRN1w2d=8WoZ zH#_WYL!;5NGUULk_B9Z$$^BeOeLtP2S$>h=G96*L2eafVb>KOoEn0@z@i9*vb4^Kg zxReHDcR0e8ZEfhL1Dv$35@@rW)lF$8x>WOKd4*hqL%a^!Z8LiIY#jh05U(yfZ+lJH zHv>_5;f@2Van!Q{FA08Z<5%T(gSxrV%FmUfzL=pjjidDQi&P|jyE0II`ljp%BoWUG z>4BW{J@YEDXBmC*i#?BWNX3DR<&dV+(LhS5J_B?%0DS*;K6Fj+g@o0U!RnC<1w#fs z-)6vr{_0}<|46dK16QrKkLa5Un`5>AR_rr0n;{#*9vm!l*kr{d6lh`tZInEs(xoYS z`5>|@dlDICb>%ARy(^01t?8hBZI9`sP1FjbC{j$jM%ek`P&wn z_^kX~N!HEF$5@~*|DK{x@?6p?v;Cy%$H?)dd5>uPM)hkFr~j4SUWctDOWsT$YsfY# zx0DH9D4u{-$r^5!Zb5BwGsWzCWffXRV`A&JIv29Pa1s8eN(=<$YKQxAUrO&HmopUB zdYSiBQ)~(@{XHYw#NN$P{R=_uNQ5)x ziP{vb=B--{VRu;Lq1%40drM2Yyf1xN-UB^*zf7!*I{1`Ymb604%r(5((PA3z5Xs+62NAq-Y#I!ixd}n<_qGKPS`f``WB5Q1AIU@{kaoT z>vxiKPXtj1l??kIi99}JYuC>nEPY1C zFr6kf?(+>d+;(;Hp3D(vj0M;v_)eY6blWlL&go_LG_aqCXY3Fg+3Fk@D6m-E z{JQB3=?sN`40Ev1dqiKJ`>ffXtU)J{R4(FHOgZGjf?4o&@)}sS(JY)VQuUOD zu3sjV{~D!A&F*x{TYzdr6NMt?MW1HkV4DRAxqeR(goEt5jNI1>8My++)NmTL(%TY& z61Ov8m|KcM8eN@Tu#VV;=4J>h$INLBXRc!rOO373O5~}cq;J%*?_4q~(iZ0S;%Lb) zX773~3JAqJ=Q-zG2=10cOKUtH8WTA4kDVil{}?eO+3`#&;Oj|#^`gj>KXsrzge)^gClLC0YTL1vO38u6gB^Q z;?rj!gQvwIK|Sm9G+T?$*bt<((1J4~Vtz$l{^gkz^2;jep93i4-M+ZLs}iF=+d1=n zmU}qxoo&TxJ>`;f|KEaRfmXp+!$I+O`xEjPw>IeQ*C??s#3*`-e) zeRX0aI~e@iy<6~*C7RkmU8JCW33qXW5(~pCRtBU_h&^l6RLFI8AUP%! zFMjKG`V_F(iF0<0#ia@`=SGI7PAJJC?Of*VT42%c!Fnmuu5>T-%90%LRQ7g!U+@XJ zTHf_$i|TM1o}Wy}OvQ=8T@S z{rQsmfx3g&Ia=r$eReOI3`M)etkN{Y=f&CNN2k_JEr<(Arr=Y+{uL~Hw-Pj4B*EUk z7`7V*7ZR@kb@wUqm%lPW)AeiPbs#){@EjBgI& zl(Wzqv7Oz$sdX|C6;6w6k!9tmo@{wN<$|nGfkvR-D6G-Nju*>85_NS9<)J<9EEwB6 z^46n<1TbLc*mr`Mtb|Ct5b*K5#B|PF;=ycqVS@Vtmkk>xwY4hK;mtm{SXX{#&hj$u zvRE5KG>xU?IpbP9E>I4FxcF%5d#2}dNv7QF^`g*<$VnJ3L39MDU>7~xm`Kn79|NkN zHw;FOv+VD^KFW272vV-;5c9te)Ge=bQg8B5$FvO+8iTdEhK>VvF~oVvl#9Q@r&3?M z?1Le-Qjpu4_iPc)uRC6hI~JJ3Ir6pmcXGq<%r~_Q=s@7=-|8EjMsHrSVd}sM()gLT zN#sIbmCc%U8kt;Vs>@E%`6FpGBow z@J07ht97IzANxxOLo>2$KeG&h)+w5PIgRwA8hMohh6-d#-}=?_KWU0V$;?mXt13$K zFRb9`K~+P0w|;u7{l7k}l4)ibd*<}g&(YoZ<(0_pI7uE$n_*Jj<9Rajj-?w}`B`th#F8{2;I!m70fYd9-QTmS{Rj9gSgvTNTneOw+ z5!=)tMMvWAtja~+rl-f^2}mOPrsT$bdB4+?HtM2>|nOkNw!;eaxlCg{pel zr$tkq(}!d&^;lQ4fRAU=>u>p6i}d@8t*Hxl+^5r8agNv1>}+g{&jkIfvgql3E^H3k zlHueaNNX?(O{m$oR(`lh>XiLXS6=uz!-s#R^*;Pn+!WoI30m>~swP)!Z2Q$rnEyQQ z6azPf(5)zS0rXLQgizL5#D*@bFF1@p?@20Ywn8*hQQ$hV?A0QdLX!zjUf@LBPvqSk z@%?mDCNo$D-Fxagkxn80qbgUc5e)MxH&-vh+9F!9VS7;>P2tlk5Uo35cVbUp6UFC7 z#B9FnrbO!E3ifKt6&Pg1cTR`R6?V?1V>t5?-kYC-Ec}99PJv=$P8I25Gil-pDa}K< zy|^H$J9#zlh5yzNMJJ8b=X}1A$ckfIFq4==G!?SBrw1plU|2)2-`RDXnL7P7;W8Tq z5a5BxYNCH%kei}+35^Z}RcuQQXLH#M>Nd_B@(64#gFnIv$2Kr|B|KXQc8i?hk5GfF zABF@CL81svAKj4El$AxBKh(0ie&Y`yg`CbAS@h-*iZ+1(pC`txO!Ju=!6sgEV$F7L zX13Gso#Pr3JE+RXvdmPNoc+Qw?_@5yPCu*npi|MT-bqrHzu*svp2%I3v)rZ_2KcF> zDCB*5=j0pOUk#EwS@&~Zquy3|zHCmfblFykk!<8PH`S@FrF0qOnA(3IGmR1JHkRNChO#y)J2l#T3n}bYap?&AxTtW)X$xNcb5KvgEHE~*-2m;c z{JYt`EEb|(-*HM#6;3!{Bn}C4<~A%5kb5E@)3@aCR8LDQ{>x_0MsqPPT=Dz;;8Du` zptj`J04Fc2Glv{Bx3#^Ad$j;aHQnfj9^|gz-DqE03|2e{x&fI&P7rqQ9VzvU`-uoc z;SmI$N35S3HQ3J`kuvdsJo4piE%>4IsrGzX>O4C)Jd2(3SgosR+@>)BBG43Tckpa6 z3yO`no^A4$gLOu+O^5h~<0TQV>sjTLc?3-CGX=05% z8JG74iow%IkjHRW&y*8qDtMj7qy+>qNEw=T&?&Q0BN)4X4Im<+g4~Ze!Q(vRfZ}6o zCG4B)P9Sj!6;0Y4=;tgb-Xsp4^(}3lCm~qN+x7%Q#E*coZ)m{O8Xu6i{YQ_8}_6rR)vHRBgt>wfPF$?)5K&@)&wVh&;-@ zIF7nd_KeEGIoNTLPK4=h=arwh;jG^(U2wZ@!|na0o-HcQ_L-bpSQkYdhkT}HmHh9@ z4ComzGWOdfd%&$T79CTC^NMYaQu>Rt4bwsQ4A`sDyco$CYIe8nl|iqqU2;;YlZ;lC z2b|VnVx7MSl&Lrj04e;cS zt(9_t*lw@DA4L2fx*#Fn1xd)0$-S(TGWtPqdZ16LlDKUvLGMNYE zD7;WfQnb(VHiIElFTt(d@NG2ZrgwALe_K4OirLLV7jC;2O7D8p=@$roe_zcc>U~8P zMM!O!nOn71yON?+#>1Z{U7Bne2SET0c^MzlTm}Y6YH6H@j_R1~TtJK1(a7xUfja%)@wbav_fF|;c+0UGONvkB`e1C1s3xFn-Z(Va1C$W*JA z^k?$H#+PFt;f*e^zkDxrxO}Men7@2d-J#|#uwFoDYtyQ>yU)6!CEwdR?7PnaL1%hc z%C9bp|6ge|uEScYhV%7^s@3vi6txVnXJB!agFRSafoH)|&yv!#n$-AT9*MP6aas;= z=T1G1X)rB4mh!2a(3k3hY+!5A^DB>-G1m?e4V0~h;=I0646P*<~c2)1>sBl91602jwW~W(^b#?{-oH15B7&9O)=68n{ zmB^Wkj`auP{lGH$OBMvC#H83{@wYE2#v1l@Xa@E=to%R}BE{?maS~oSfXSHCn*Wj?0Y#p2@Le}jUYBh44T#-!TM|=41|7PinfbMs z<+qJ3$TNz%{RJB-C^P%E$)udCG{s~ePg^ht965ZP%M10Un^~|+_fHV}D!`|-0U_tf z;dz?VW}g=C#Zt6r@c9HKRmd@DpXX(vWS??QQ#Yc^C6sMVpUsR@3i)S64zs@ho~)*N z{>^_Zu}EX*7yY+yB`7!O!h|sDrNuhW!+Tzlj_o!mylBv``-oL}c+kST+#4oD|KHmH zI<-g-ZV25|_%S>jR`ckmVq@#@6*?d zKk&BPu!-L_C=#(o`-!u`T$xm^qkogK?j2tpXF^K@da#49a|1l8ru8>r6oLkGiBa_5 zO`3g{XB-0}+YKtWx*;$`M zoct-Kfx0}Y+hMT={d6Z*eu_?E>{H$IT3h8-n6XOdlMs$pur(<6KkmGz<`q$@-myik zrCZo%+dpKUT{c^xPNrWj(g|hlE#Gf($@NQ`o=JB|4gCR~H%YF0Q1YUTb*@>jqXO&a zOvBdQ;dhrt7fS85`WY{ry3g8BqtGH_&U;Y6wXY+kD5x|Ok7XsbjG~}SiJ)j;zuPBH zS`EI;Z7G+7>OHR050&1MU{yE2_I>e@bMG`U76Dx;I#u`cj%=`LFZJU`_rbF;w7>Kp zgelwf*6?@!Op1*L#wsj`N>AKi9@@i*fL5C^qABer z>h#9ZQCC&Rd+uN+;ST3o6k#~$LTX&$ebAj?ol)9 zLO*&7gxAYp`or%)*zRR`L_M*yW<&Upjac6pLm7X5lqSn@ z;wRCTKEQ6!G14nvK}}w(&L|Lw23(-(U6PGq8>YszN2QZ15du~QE5BcsSemBz3HdpM zUbxfXHro3(AYz7AAVL>N9?Z?yUg-GDtPQ6g7baxtVL<@da1-FgFLh&*Hyt{>EHJS@WOu@1??<8 z85um$o247f0EgFkj`NiPQlm4QW#7y_>H=;0TNz_$OI;ZSDc_A4-CsaK>8^`=Lf?oU zEPS;@`tmnWz7^h7z;nQ@WR*c93RytAR$k8-_^u3~f_D+y@M7xKJ_V6RD379(aM~ev z)}v2uyme~R*01FQMr>KnDr=44f>XPg!Ha^P$dtVc05B{!Ex40YqMS?2(PEJMw%Pq; z>8mf*8#(mI&t$RfgG@!;W81(gNQd$eK&wQA(gBNOTLpa0 zGdtYbgSlJ=T|4GO^fw@Q%C1zD7fNUqVbCk}WohO&Y}!{M1=y^<;mavwMmb3ZGL`4z z#0VANp;*aGGKhE_ae8A0yEa3cG`O4CE7ov^XfFuiHHkY+NF&Sd87TgcZQqgqXi`0s zVF9PjiZQ*otA18h1|w>dX#gmI@Kl79O`?U`jTuMUXKX|(b~+jz2>4kS2Z@4j7P z-ItSj^&ERd+#elAGpgkUD~7b@4ie?-y3Isxj5n4JnQJk9D4%KmG)Jblb8A8mI8)6-}X z`8kw7G?(CASo~hnO;d<0V8O_ioBE9?-M<06XC`Uz&WlrnooJQdj3}k~7%7Iz%Oazg zLbv5EtU))U#J-Aa!N+$Q;2%N#^8PI|LHm>qw&rbJ927cxeN&^HvehM^(TVvjZ(ER| zxccTX%ejS0=mVTGbvD_GDL?_w`to^}TflncOuc)YgtzZL&b>tGw~9&bGu$VI3#Qjf zzsH(No_Y2nwg%+dT~?_|_DoFf;K_Pa{IzM^CTF+4q0IscsQ|U*K`gFbf4ua09lDyG z;Ut@G0}1Xx`>b@>poZ=fqXMC=wu>0*7+!1oN5ZBLr;w6Mapfuw^T!@FC{aHyN=VFL zE`6{y%(`Wj9@NY1)qjL^o?K(lP_OKN?k@PVXv6*F`8TqUpgp~HA_ihY@1P5iu^ldszK3VGK$gOxTeUtL+eBT?o* zgj2UFl@+vo|Bf{4OF4=rpyfZ7gDfc0OHYi_-ZV>3B$%i4S^bAxc6O=7anwkkr?x9q zs?r#HM3+T0T}Hr^(6ZAu8s7-W^{91tK8J4Co&vCL6`+Ju4WT&O zPcI=pN)`1{)=drzpYbjtMd&7+gwuqUDALLW+ZVSdbe7I~i;^>kkix;z;9_n2Sj z;51_UQY1%UvV9mv8BHFhWTN8wS{(i9ga~h)vspUvhg+QvVw;e7;SvXG>ASm=O89U2 z+#N!r9b08j?=yMYEQYV;S$;@FTeq8qY==`Q>yd?`#essnEvaUc29pG?cLZLd2Ca{( zfi~T5;8d(^6i>HFV_&`ff#AbLYuM#)6jm0ZQ!gj_wF0h6PPbeOz*1Q=6b_})Gq@|# zJ(uZ6LQJD(lpK$R!u%8KOTPm(h4ax*12g=6=jXsfqlyv2W}mr9_VFB`QLB1RfM+RRCWn8)qyAb}Qj$o9jpH;zL`mVi^>~&Z z?dHC*N6Zm6S5#@CYMFP;kByVt)F^C7%)X|uD`tj7zuwVaPBTVpSVQrs?DGlQ zK5qP)Q;&7Ur5<|tX+LMQA?99qAE$Y&SWCL}?PPk%W{ewiZYPNdNtf$raH3fkV`zs| zJJ8o=xbJC+!tas0;7H0DcL~Aat5P<*psvBR9a#R$uJnBFyzSW)c7;eL0fxZGH&szIZbU*Q zrTI(xWA?6bj#w1lf4Ujj;}dpYG1P2XY*QUYkF>dMN>u;(U)%oTOBN9~Wx*MAD^7@A z^_cg#Dd;_=jtRfL1BXvXMdRt;Z-X^KAKL*C{*NGv-969-8`2hLjka2ao&kWb(tiw zr;t|*&-0Hq={i@NA-JwJ(N~Qwryzz!{3uAE!9^1i|37MXN{cTTLBy9Gz4mLRIEwe1 z!+9jC(7ETcd1-0IAXlk_Z$fwuS-26jcoK8_ec=FkKfp;GY zn$mrr!zC5YI5h8lZgM zfBl|Fun~Jhrx9;viePgj`>}@cXSUY*CQ4b>kQXCWtklw9_T;Ib1bU-l2b3&-6q&z& z7D8}5JX2sTwUZZIienPpJI&-izE|2zIUymc!6#D&KI2r^cU+)r3lG|Q5LxLmKMu9v8s0|32iMZ}p_%wv6KifX$qbI6&JUjfP*ME>R!1FM* z@;|VX?XD>P+gUX?+*|t3YOp0B5*guiXBz5Lc^LX1ommMfRFeM0vR2sF028R7T<22Q z5$rEbLaWE%Bh~il7qsO^WQ3i|;9>b84FIF8osE?45)AM{6ptY7NVIdd5k)Y)>kuf( zPlZ9_1s^V@`g*-O`zk%#8a``;V756-qe9~0U&b!u!VQYRzs){nl^;c#0!3FHW_&I; z^K*?2Xp3>y@%M^6t>kWv`Q>Uu8|1#>nJ7XFOQ}^eGmV|?KZe;6Gi=rjON~4S8(7)G z%#1kA>WdbhkT4^!FHfYWW_IfwCf}|zvzo0XT$4l|GKoAM&zGY6)e(a=Hl^q2vP~mM z8EW*D|BvJn6O}()p5P-kJDh)rB@)1p{-=HT4x zicgf|3pa3yW_t!%spe>kCaHHzG5n@1>Dw@Pj6|87qPD3^jr-_O?xEEtP9L+*_>^94d>jtSaKS& zQByJ{u~l2D!84_u#Eh!l$iD^LaGag9<2YKr6k%0Hh#C_QxvXBM@#fXHZCh4Gx3onm zugDL*N<`a!5UifFdUlY1PSJpm4l&2-T8&5BO5?SbZ~evRy-{~Jhe)iQNSDXSwL@PI4)m|HhPjei}iTGwBFn6 zT;YA1WfQZCxhNiA*3*NVFgU{(Yg0enM(11gVK<-`e0D33a3p#4ffvc|-eIK5x zlIr|Zv#$Guo_wM6G~Cqv*w=Q`xx5fejz@zr;L3EbB(GF+V6DnVo4U#4Gqb+E?HLahOJSg}L zO}{tdaiGg(-^t5e|V3H9dW7%_-Age}wIQ5S_fA6B5``Xn>sB9kYQoDDHpW7B+go?_Bb#re% z(Duj+?mei7^Lmz1EwrDJS#m^MVrdPm1PF8#)?5)8ALKKvm9l2q`}v3QPN4+>%f7B~ z+F76e*phofG(}u<9)+!`A6!$-Y3_RF0)tD(QIb7*QOHt~>ly1jiN!$#PquNa6aYd^hhL*HEmL!q$uHwx=)0 zlb9hk<{}ntpnxnTqbNC?^$boDnd2F8V$*16|GQLjJhH!NPTDwSoN?SbT;aDd*6q?6 zea^U~ms}gN0r@XD;^s(j@FAbo;&@Ps*Dl_75$32MP?Z_WV6_R+{! z=t~-ELey-1h-j172u?Y^2hRy{a-m0ePxsaD9OYI`qYjG}!(%wx%;zwRzn&isBh)Yb z8FwCxQ%;-RSU8`dQRY&J3UL=Muz-i*y-)W2$@LC7TL;Il`%F$Dt_kH1>>+lSL({7o z(a*8QI_sKqwrw9?h%0FDdQa_*2S3CF{SMgyA!J6r!l7@kfXU8JQ(=M%z3GczJ>Ej5 z{wbq-hVC?;0`4{51VYsqlfGvasU;(eI1e5tT7KV8bDL3`_>*KZ8$?2N#zG_YMoN{N z?oK8td+D2>mAa8G-+yFX!*^8)+}wdfFdb7t)T7l8Dx`nh#y>94aBah1VAJV;G+Y)o z9!A5LqNwvZAHHeuzo2>1^LAT3My5?ZI zZchpPD_!U8>j(2|ThNa|Gk335C#7k*eterM*XSeD}(I!f*C&AEl`b3P`*PIeG^vkgFwu*nts2>U;Z&cmPW z_HDyPjas$$R%-99_UeyNdv6ju_NYCI*d0bpIWlC~TDmkl*U5P%2KGNC|mQ+^e{FPQCjga5V*Y66RV{DI{rWC=fO|T#X}4 zP9u!T?sDK|=Yi(VvKs81SFjagYc#|bs=aQ~7$APqXZHCcX9(MS7AU&c(LUXB3>qe$ zYiqF{7h9;bM~j-+{U|;ZT@M1sKZjW=QG(r@1>cHG>}=?%jmksnXf2RV51^=?P%KrP zem?yfv#Ui1ycqdG-GBtvdxlmy?cyufX}N=rbB+(-NHunNdXwXDLiZkA5pr)hXE)S( zal0>uCd%ek=EC6RoYP@~|8hZ2w&%h}X16$b^tUUBW@aqv%1QDn<^8Y+iT5L!pbBK8 zce8!NF{hC}M*1wBbQp(dev)vsKKs|`<2l6`3G5ilvFBym{;CxrQC#bCj;0wA0%e8o z$qE1T8CGCW(q{8vF@>Z!lXAr5ZR?tIY5Z>gx?aUG|8;iCuK^4Sj1?iL6iIS)nywzR zG72gdZ!#v%jXNg}keUch+AZ#Nv1!Hj(CV5_U6AyEv&2F~A^wrOLtQbi3F`MET^wIT z()}G^!BB6f!xSp6>ojqM5}CY7Jrf*|CRFA zM0!FX;E`OI9gVvFq_A@m-tH1~D7y0h>@4d@wMgRcaw4w-nr!Nu@~Cb#$f^jRv9o`> zmdzTFo4J2jXcfa)pCqQc`Zb00_j)7RCg}lpe!#-%)>eh3F|VCPLt(1FzX)744q8 z5YrH~9U;r|P^l%F1YF@_Y|&sa@6C(U)8rtuiH3dII1u-E$K_utk)N~r;s~SA$~6So zE5$Ivq_h{t-a_S9&m#6QanB;hsN(T1>`8)*82gz^*!`n0g$mLgfC11GNfe^-RFi(R z%#?M<6GEth8pMM5wdEeqQPB0n{={iz-|1xF#K_nd_=;@!DRr4a*-eIn2TZa~Bb>8{ zk~6?FAy=3u5s1ZejrPLw=qj&Fs}cXLUt*e7fkF79s6LH7#z~XmPHW(*;>c6xzB)#= zXy}ae5yZXPQUODCr+?26wsE&*KZeS7iP@cNCS z_rkn|<_!~r_t;P(8Xb`D|B7!>o3Vw*d3H9wM~XKX@kHV<`TZq$^3vM?GCbU{(XVZe z;l=!S!oe-fCfF=^cS8dFE7ShLe$tvm8J$>OlvEvCsiY${wu&w(BMxv-mg9#H8(zj4 zk2lTHl8g;FhVj*Wsv?o72$#yWA7kMQ{*7i2aY-SS=n)G9JhcAI!fmypct+jdfROq( z=V+YXl@8YKRpsBc2Z?agY(&vNdmL${@XWGQ!Hm^Ei8UyI%*I4?_PSlnrqa^1EN5&l z@9WzeD+2wOke*?YLT(6FcBNxI}Hn6C2Z*hA(8Qn)Bqg>mO-4tH! zuZ{jyEaEmu+bDqDkEArF?tJV+;86MY2iOzYNT{{{OZci#FE-s3M^|Yu-o6dZA+b!h zKfg8hDJG`?mwJ9Qb9$dGAHqJfyIY}iCqwRBW-04k#ZAzqWQYA|eE}8$4 zhZ&gPX*XVS;hXxriotBiitT3>P3l`~2Wf3SZ5xhy$|J5MvptpgQK;qS1?LbYfb|+G z{cDthj&;Lq-9hS3?}@kIH%vo&&r!9-fE{xO!V+?TJ&-om4w1GpV1EfNj0Z$}!oTQ7 zaGSN(!B@z=(cJg1Cm{yc?@m~q+&nE-KDoFHMk(Qm>aelv?7p)mz#P&(_X;dA4VV&o z#3Vgch3d$?-n*4!p|6>R=BFkk;%u*aLH`kqaf@LVfS%(ZpJatBV`$Y=!*&+< zp2f=%$gA`ca>42Adm-mNh(P2kXja4Cm_Ln+SlJ@Hm>vpyvi&l}S$ooy^`kXh_bwbvtOkrJR!XoI;LHcepawYTeA)~ zeX4aL@UO5)FhNKJIkETjQcSk10!{bJ>}QkqfLsHVzaJC4x05z}^l8!`>ZMdG#L32= zB~{B8hb2lCVsns6XK^)eziBJD-|6>hyeYRn&OH3KA#6siD&RNe-@DQ;t&9RMOWX=c z^SWO$)&3%^s*ZZK9ALJ=CT-Y$R9fOUJIt%R1znL;?u~KoNB`Ljg92E+4dHJ7rdzdA ztg~YxCh8K1O}<=8_ZhWy_>Y3<4vvVZiQHH8Yd7Juu^m(0S_;*d%S<6WP3%d*R4PMq z(JogMlSU5Y^cyo%?diHEt!L;tWd9KnX=1E zDQm4rE$e|Gb?9t$wvq>eAosbg$Y+TAE!26A z_N`kauBKCiL10zB3y33M&bxBEiTAJsI~nF#tc#i#EvOZcg;){(p0eaGsJ8WqVE1W% zy@J@M5OoB0t<2qpux2|>bv)w8s`mvv#{yY42a0~~Bq5AtZq!cj9aWpu`s=Jtig3$t zecrZL+b?pjbn;yp9!m^>tJiJh;1!p_4LFIC;v_eZb6M$E5!uP^y;eO>H)5bg9PMJH zcJ|J_pU}D9Y6ve;D;GfqA9hgf2x&qXF+hhY$5&9Nq1UF{m_n1S>?#;+JBznpzAXav z{bmGQ`G=l~s+AgYKR;c}nD@L@`Hw&nXtbDdFdh8#&ImaM8{uIHpR!G7kb}&M3pTbZ z>@m;r3)Md3MfQZ_%~^oxLvj=xO1DL1Y3=bUFRK}?jP z#>iMW4C&kB$5x{=;Ab#XAXpU?c8)f=oqq%~VFgU*LmVB^KrcBQtp5fABFhN<+yKF~HPLtas+S%XmijONR1Ca`i#R)Bbu*max?60m7{N4 zl9VZBA_U>l;Csk*CaaJqL7tcUK|OplmgD~Zy$-u{qFH(poOMkl>vyBA4rJg5&k=F- zc9rX06y3#DVJ?sPtk#z2FNShV=O-gbCD`17yFfohttr86<|ymhlmAH5qK|U-h`D`o zlsM^4D{bFw#sg+e{oaJtQ5quIdT}zAGg4EtsqvoPo;>@-5){fIE=2jJFtapSE>U)0 z_fm|BwpUQE@LpoB0Ewzj9X|n1UL^pd_ZAW-lw5e&hi@6=ubyDmMQ4*<4-^2bsIJ2l z2wsP->3N+sNXw{*D)PdvGWO5q7tt5)JZOI?W-)xLW%6$>CS)K@AR!pFwU6KYHuFYV z`jxld@5+Cu{0K=O%Od6X$n@pBcT0v|s(Q4|ig5?QYiY*BR`m^9Gi;8;oy?Oi(q+H2tm;&-jw@xQ?KXFjDTRR4Yxh zG!ci}_ZyGaJ_-c}L$PYW}RE(f!))KYb0|kQW zY5_V|&cpfzLWsEFB1@0iQXV;6F__rM2S0y*%_znU438U66qjZ1=eWYj920wTwnW2Q zd?*mP+U*_)QY)F_VvNQIn6td~QI3&Gvs6$#9j@)r%5T$oc&}=z30KE+n9ex@^}4w# zI_phD23!@F>vxNdiOY`CtO{0tXkB>Ytutr$qsE$r?5Gqb>le$sGZe;f^dEtI8&^Iu z4BqxmJg=8vjjdogaL%b6O4Z=Di)1*mX-l!;r4d8dGKDK3BKg&OM7&3M(A;r0AaB_= zjkq4Wmk|hi!5*;+YnNXTe~}`QzVW*ylHNo{#95$qD8Oo7L5CONKrej-L;%b z`>7Sf^ptwVDxvE0GABn0RwGOVv}2ixH2hxy`{P||=^>xhSLTYmkk7?*99?4+kMIxfe{NojK4%{|ecr+f(VA$ieLq zJ`bKShS+%WaSdS2E8fLVNSs^bcn-}GTwzt?UydazJ=&MK-4OYQ4H|k&JawidyP}#; zX~^L&eJ|T}*Pah>Qnyk zMQHmS0lOUeMuPR=JST}zbL6bUksH}xz%O5yH_4)~9vPO>w^an1KLcQruIB0PzvKI! z7`^mo2T~m;Z`1mA{jt*7s2?gVVC|e8uOZgR4!ko4H5p_f9(b+~t3jh7XR8`VEA-m$@gXQV#cr1qzW2h#~Uidg-{wbxbJ0jhQApOhe z>ZYMe?L&O#oA;m>s*{D>{0m+l>?F0#0`qp$U>V=p28r-iti$v}R<(rRfpMIo1 z`{T+GcafIdbFYgaX>yd@5h+nX>zKch#G|YTOqwU)Rp-=Lb)w`v1MW09Yy%!L`Z4Q0 zZ)MLZ#!N8QgS&&+h4gg{LD%UGtPH!%^=?OjQ^KYbEuCcP?^0F2xij`Jx3Vee^JB}P zoE2?YnW?~mTnHK^_+s%DRu-Nn9;ca*n6J8>B?!RuTI2f?>^=BrDJFz0%pm+D_Zpu0BI<5+8ZNUspBUJt;-l?7vEx0@b}LN@a!Ypx}m+!WuAPW9n| zqAVF+0GSP#c37NY1>|=Kdx8M_0x#toniv1l@1`WNz(hIvd`yU#ePPQ9Yc!hS&*W5_ z+1x6B!*#JUm_+onKPSC!gN6*TrHq-1Kn5wq=F=!nM*Mx=^lIh^eqDBKDs-G>=X;8r z$cdX*o1gP(-?k*GZ)nKS|KTDeGJEeH2>yOSyFg6pRws6-CtW#FSe&6;t+xyO3*3wd zq*dC2ntyi0v;=*2b7FddlmFq3_OJ#XNIv66PdunxP2WiSZQV-uM{*ztuw;BD=H;In z-|se9a`+>uR;#Y3)-lmEZ^n^rm<3~Nm`>bIDY_c@J+)}SO-+!8g7XHDXYZuB&OvCp zePwKCYT{g&W&)mFOzpGQ6t*;Biz$*2_6ONk!y1#=#ps+|c<=?Sk;6jL%;)^GL`lv5 zdwM3C9a<_qOgWRGS;-*z$s~+~zCdM%*mX(eebYSW1}mC$+yKM~9gxb(?gv_V;-zR7 zvn?W|gpVXBD*~oD!|cr+gO(nyNNYW;oD#cKfTM-@TWqM*Q4ZgP!Rbjv)%I`NJbqXV zPEnK@GjW*$w?uO(winTU(;(dukUgsNq-yA4%7^f3iNH*QMw);R59Ze2r!$4eQ%=uG zmDWWBHD^{t9M--!6|3tp^ScYYpfQT5z8kF!V#UzIEef!*PAmr1^{<_XF^#p~-H72p z_j)A{KNXZzXhn4h-!8Q`lbi5*0Sok&G>$b)(#?>-+&Z|>0ra!7K7G`B!ZD{HC=j(S z<9rpR)^|JC9&e1_3_Lv-vp`_(=I9?s(48Uw754qe-Qan~R`@0?GxAyqHg)St2lCvJ zn&P|XJf6R*mR+~RdZ@T##1N<}=vfr~%uRin25`rUSRq)+qS9#lh9dEYNa(QVtZU*4 zacvM@=wYZ52CGm5for^(cr41b*V3K!M@U|h%Oug4zWV}0O(-_xcXky4xS1!xf~dC^ zi_~X(Ou2Ho=PDua+gVK0EkKMrK`1Deum3`$ZrW1Gr8d#rf)aY=)bze|!Os@)B?K0d z2(^tjn#NEdtQ~PdXJm<71}j%3s#x);z8`#xei4sW0GHF|R47+EQw=)`c3kk9xq5^+ z&j>W&SbB}gp~M;Yewy?;o3nqXjQg*2<3W0+srZWxOWi5<3#J9GQa{4p|e5omW{x1ez_z7eUXX6w%lx9|E z3JBB8oN;af1%&P~#XG#(QM0wFFSWA%7?m>)*GUW-ejr-1`#db@ugFgPruiKdBtTv2 zD?G1FbF9nz&=-(zuCw&0b!o1+7rO-4Ps5oRR0lK@{!4I&J*2Zgt@upvp7XQxhR$*d z)tj2O6vlq_Gr2M}Q?4XN<#y^@uezi~j_(;A`T;d5=5CxyFHC}?-{lV37}>6?PF`qV z$gCbzQ0Ze2jy3&27`3ibwGsN3Nb-YhcF*lpQz!*#yx>>gfrg(+W06b*fAnNONp>oc zKjA>#f0EcR={XHI-ly_mHI)RZH~1QSMez?;DVScg{o@e+Xi4`>tEw#ou_X>W7hN>wuwrOV&>tCyJ|oVv0IRE&Ef^s#8+`Pqtz}Q}3oocfnQ#ChcG%U)t zSxDQ)A#^&G@4asCUN}G2KrC@*%Fzku{z%xs=kNIN) z%Gk6lCLa3#nKiSSv;ajR3%_cU4IuBm;PF z@Indka{duPp7RcSXTux2&R_z4ViIHRKO-o&aNBPu4+XGiX zU+0J(Whi3_ztwy>@3WF%R%2i(Q2pH7l3Fu#^A~Z#F)= zq`ig=hU@aUc}UQSKipRZpZs;y2K3M=zylU(Ss*o99k7U)JiOvI4IJ#j8PeyUy^f?V zcEDLF9Ggpe{w^x~UvEg>e(F?3@W;7K-MqfOj};%Ph8(3xyAZ}(`Q}R1(%ULSrUiSj zt{7=Lx4NgTJ=+3g0KZj9>JEXI%l2itB5x&(fDEeE$T{1N5?*GX#ZKe#{|NpEETewq z1l&bewXiDAb~z3|oHDhycU5vwH(>XXh{trhE-}bMhhVi_hk_((ioeiYX|;LKve`wk zb_bWWwQAbS`w!ZAF=@UhBm>r)Ka$hDn#*N~165$L{LE#6M$0E=ZNaMXf~Up=_EPak ze{60y1o@yZoe_@#Vn zcBR#WQHefR96{Re`g?l!9*3osk=`Gw8OP&*_v~)DpHr3rIas3a3bGbA&`&w;|Ov>VGt1nH^0#K2p z)rx0ad2Cpg*dVm1hmytcNfEZi$K_w!qieO?k3yp@t*I)ncFfz?E;XsOnmVy;X_PV2 zlTI5EC*A(UN7mu${V3t@EAG>CVlfR;n>g#coW^_Q1;iqX(X*VpjkVSVTY8HsUm(v$ zE6{d}cl(cXGeRS{oEn~n5OY%*ymtl|GGIf*WS%++J@u4s#UE z46_ifs3wzp0q5s^v1xFM0*uG(J7_}ijwDdBlF3x)&@MeX^SQ;cT!|>gv?^YI(!;3y z3N*-`9l{kY2Echwfp@CUlw4{3X(P%&Ob{t-f}1Tau{Yx+vCqT1FZ-tA#N`q-ES@{! zht}*|0nya&B8TF1Dhi7Jq5TmCv3(1Si)Ks<&0bAf3O%7!o|$feOPTt6P18Y(mTyqg zwkIArDr}8=dQK`%ujGzs#4s)MVT|2(Mz*Fm2z$xCOOj^4e2ch)FO7Dp|?*t)%!v5YfEvlMWi#1f6^O*M+X8>34|in_mETaF*}l!EgJqn zc?7p<9krGgaX*ad4d0u(>ms7XV73dG&XEfKaD@W?0LV(0E6f9$jcu;l++B`}w8wdn z&%E#l;jjg9S34s&?eOyx``IcwH;IrFH`D_{kACNTv%kVU*Obz-dvuZ@IH}+H>tfZy zKqs}}SUw3KLf-oIqK4kRFZ3{`*n3Y2zIJ8W!T$(;iwe9-lkTbrh$A7~H;pHIF8vH* z_Bo6r-pI*HkA7SCGq-Kn$Bk^fPd4lqMHu|%YG{3Y^kdWDD z*KVjld+_Mq&tZSnI}yF7R%q)5#zEf_MNsAkd!sK^FgQnP+A3S_hp6t5J#)+?D%yRI z$P>}CSPXr@wHSJy&toR!jW(zO(W2}6ie>0+(?8mknF@jNc5jck>8V>Gw{pE`$Sdxe z{`_8H!7hX^axR4&FQ8D)NW_pTx~0Czz9blOV#3fx!8JTo?-sqaDw%f)l{viyTObCxIOK`l6s2?sy=RMNFxOPjEt{@f4$3wg_zFZL zxOXC?gsK5)a=^-w+bB@8(zZKn>O*PxF6`hnGz46y`mJ$1 zORCsRO}yEz(f8Q$G5gQ62iV+W8ODBash_Lc`zo^bgJ@_|Iyd%o<1N~uR_Q0xj{<`{ zYW2}+`Fth@$<7Wa_}m6tZ>8KH*xN)nRn=`&b=JKO+zpmDhv~ET%VLbWz~Q2Vam)oh z;+*~Aj9T5P-V$TLO~fA~iKUSjC5u6NI-e&lL4mmYIy3fGT|ldZy`PHj8*1qXI}Sap z^SQn3knwB^i~k4$K7Vaq`S*m6xvE*s?dtzWpzVu&KM|WM>u}l0&487fPF|>~SkAP0W zqq<=X4engNK()WRvHDWNuffMhG!RoNg6YgQ?3)FL-*b!V9Nj)XSAbM9*laM_yzAoTDWA-F$}Tj2$6QtK;Gc30i6`Bf z5lky8;lXr7K5cSeNe}0jG-Oj}RiP>3t|k8a4(9(0{o};9e=TwuJ({iZ&1NQzf_7oejtNJCH_? zS6g)9ZLAzrgE~sU!oyVkX){YLpj2k)Y@Mf_ng%G+;!U%ZHe^fq6ZwAxp3+og|8pE> zF}}v=$wbRDzCX_Mj6AdMQpPRZjemHr2%>hQ*h{e^| z0eI;sC#J-qQgqHOy1!nettT4J=TzF4JdJf5#%Cson$7$)5^*wRS|dym(hqLmw!5Q- ztN}w>^++DbCl9a(HgGz#yG{Mgm&QeeXCDMV4awWvJBquit(n4OO8RnV5ex5SHTKP> zq38Go%LsA=tMva~lo)LAG;Mtb5A8LU<6lV!l29N(D2%)E?YU&7$vBmY| z?q_$xj5;Em9bI5CTZw~<|tXoSV^Ig;A8FDpUd z7n=C>F#nXHK(`E-!iK!K@E4Y~n)HuT;Ea<}iiBu=HAdMt>c~v|i@)@MncurQE7Ap= z`BuI~md`V)upW5jsn;dRX53c~kg%YAk6Hm7SS~}mBmH+;9R80@&=&i9x8RONf{oAc z;}V#)6n?bd^rm&I;}qR=IctIv<)oTemU?S zVrG#GPf{KDl7olI97dV_kfDE2HBJJsQ0KbP(!;eDlq_D+$BgmHiMuSJ|a3>daZ}!p`ZDVGV&H;UTyBjNw-e zg>&cl_(!^Z51OwKK}z-MFv*$ux7kf=hrj%<7`S8UD08YtEiv&Qn|EJoBY+3MJ~ytP zfeD$wxe=$>BIl*EVgADVdtSz{v&=z*Gooti#&Ov`lS|P}T@ln0kpkMVee#1KIFB(tYPeCciz8@6^6YqNa<#%YF8a*N=ctt;?Ud(8dY3p^V<#>z#`P>vxaKIkw){{;@RtMW zBXkcFEh)8{XW&{RiPpy{$Jlfqm#?ajr<{Rl5*$5xI(|d%s(yZ~vNkLKnPMZ^W~H^p z+7oc)Q4o%7O#RjyVUt0)%w$gy$rmG*tZm--O13mGC7!09JZNJ8DA^QoSim7X2e)*R z3D*8%(oYFf$IY1!q_ImvDY5pic3o)Pg1ecjx!TLp1fAzt1)EiXMz(Y0W^&=Gx(}?rrhROYI%uFrYQo{5x@;-5`rilF8 zS0>-#ZMH_3US-|rA{%GC^(dH;bY(JrfTC7JK*zq=g%%l(R=&Z6Nos~XTbMai)>t42m_z5wxZgVbM-x*>CQ=#)+~_WAI9n6_H;jac}UU*xWNE#M=mJlMXs)AuQ<0QM{proh%?=ozqWnNtKJ;Dev~EUF=R&e_m~%V3w4E!1o~w5E%x zzujGv7LMe!hU+rw2vtkb{R+vDon*p_c1}vs9YJMn1U@o|Hfgikr99OQ97O$3RvVT0 zW3Ka|JES@@wy+n2KvxkcPW`TCpRfKUt1mNqq6E^GaK5tHrSR5ZwlY?5!fohn7GV8r%mE}b zdg8dw(J=pKIhd$`qp;Gc<2ymJt}aQ@4n~m1CXK#Mn{l(D+d_a4$2x71P5gkVy@l$F zbQ+(XE=S5VA_~mnP*kkdD!8#^XsKt|_%gS_P$4r!ZY)a9HcBR4@j{g7+vOytvSf!m zH8Jpy7KxDcONZVFiam1nSw&<3K!SEBl;#K8T)k7NOE*7$ii1y^!%Cr|SLb`&q#DaP zffn+t^AlOKh0TZ^Hol`W~`&UXdNIrO)@gH4+s3g;5I@)|B?`6gQ@pU@Q0U ztgtAnN*-8_H6y!3I`6=?_b`OPQI*x^y2y(y=ugQ!_BvK@d2J8EShmxjxxUsbrde(T zW~_N`OYJAy>I7s_zd<$Ecw_mzuu6_MdCl>rPN=H@)<<%XmyO!ky&_AEomte02gn=B zT*yNDNr>OW69Gf+P0RMk>7npt`j_jHRlPS^-?GQOI*W@fdQvEg#DJ(Swc=6_Bi;W9 z5-Ll$-I~`?-21xk_8a^+LTl> z<0b0-u;~fLz+oBz;2!+p+TSwhi=?AAlnv%WSoAoyAg)k~(+Bfh-1UKjaK8i)k+H*I zwDjApA)_d(z{Y1T5Y^N3SrBMoA3w1*=aVNnV6^yVUq)Ja26sXC`D}tCErvaEt4`;a zP8G`&t_=g=w?iL9mK}$!%*e|>?rDsb+Z%7x1T|{e?7qbmBTXh}3#+NP;=_l^k>kJO zn%}**3;({3@u}hp9FpnXC#&k#BA`@Z{tShb2cV5R>{gE3ZL|rPN%tv;9Xmf_JogU{ zXPtSFp)2y*!&?IXTc-bB3qhHQ5{vDC$e)R|Y2W@lmy_mhrQt4{L&-A^Sl<^Cc&D50j2{?2agF@pQg`1SR^ZJy+?^jIEz9_WTC>$GJ4wtE>9D0 zBwSU*&Y`j^WiPrM7`}FAF*+DcGWzl{^Kr8E2ir2^)4noqge*Jo_l?Fr;E>^SRCudprlAWk z2Im=ts%`7*Wk+$v0amZ_x{xpCkO=KEux;~;w8A&G8~IpP9~qi~TD+Y2Wx-y6Cp*r$ zm~+q$Ea~uFg(ukdsloY=;^*sBC4QR|?8i8=x6z=pWcxI>&tkczoF(#3@$!LH>?9f_ zNPiRaIrI0{YMye&wF9!(3d`hZm!s8|@&TV09v^T;|HK{8#kZtJ|FOT9|frLh3Lg|eoEO2Rx7XN`Tg zoKSVGDJjuY-xDfcYX=9wPQDL}K-*ib`1zPG8Ow>csI#mwZh?y~By-%~~T;}%X;E@U1wC2bSohY5KhErQ)6=;|EN z+~U!_c194y^@iTTTcQc-Z}R3tH*Hs<{40)}{lNC$y_f9k%m+i|72hCzDADv~$@_iQ zmnPN2Yk&=dH&@Fj&xyPka#bcF@fF6B0y3`0ql9zOVAt{2c`z z5V~@4PO})hraud{K1+NaB2y4CICaQl9q32wdhK+RCUtwRQai0ynDG~2)sIz9exr=F z5zoZe1Lm(#^?Q>nA_JMw;aXr6{h&>ls1lVPQpcWwzV>4g-=Ms-jrq{q7gO&|)N(n` z3B*vJG)5+v7K=c(E*z6aeQ1uVFe}SwjWyxi+p(R68VO7@SEK)w&)AW=*(Bx`GQnO@ z5A{4fvWEPxU=!6CL}4KamObxH7tIy=L#3T;^sK*u=bVc&6PBqTcz2%$crleHQ zGK2Z#B6zrO;{a$<8_#o|V3*r4d>we36iO03GaDz{;i6Jth_yare#&q}&JhFLJF(%e zdja+MdaT!U^CT?xIL!Y?VKJxCz#L~NNCT8grtgDf*{0#`@a`w1z5_kza6G@1h>MKHOTli`4CFjOLxBj~OjLSf}3 z-u17bmD}V&t@CZoTG=m${xCQG=kFIXLt3dG4bIe z=T<{rQ{&E<6kl_FLf)(i{U3-R(c~?WaG2Y?~9azk-oalt?Q+rp4YK)xwvHD->y%q!n<0nvU*XmwiThr zu#|xMZQ>KEY_adouSUNzN*6wi8-Zy}1o|mAJyOI9#4JYkz#9#5j^|x@ z%)druhwgf!h6ZZc0i{qqSld!NO2#qCN(r1fH;-(UU?$ef*h;Vog{ykU(l{0lXGH=; zWoMiw2-=NVXj<`UTXz_%bzVExrS`QYw}PCdjE54<-q2KB^t|ao^yz*zH?8_iINKP~Mz}a|MMYNn^a3Qx>RQQoH*^lxCR|x(^pz|wN*ZqhlMBMKk zpHZCAfwMU4;6E}~evIoIqZ^e=Ljyi&OFebt zWk#IRrXw%cCH(tIr04p&6#Gzk^`pLz)$u*;Zi{5KY}x?!0RAt)6ZoB>VD^!s>CnaFUZC>yL!T{7O+n2)Z{C^ltG1~F^ zT|ZUX-3AxE<46R{}M+kF*0b@81l7gsS#;OK; zexXqL9aXQ?DSB$3EhfP6Xq}jtgPlT+^MfZ;VvT;a#n%4P&yqL73D#h7c$)_D&DYIz81t zxf|a1>ntcfXq(@rb50cLdsf_1u|ca0UX z7JsA;{7|{%7`^>7DO4HoHHP0)3)_(JIi)Z{#=Qi#POxJd@zC+1f3XzEHK$-*dpwaG z*set^lc;d?6h0N;zaR(C#mR8mnY{HiL0F6m#y!}{_)Tf7-K36;XtGdj%B9((WH7G* zZcM#{$fajFr*~aqn7)xkj4{~9&lQ-koBd6EydawGQ2n}*s@uo0MCJ8Bcykz|^K=x! z*GUbHO5>Kdq`etubY^J|1x-K8C+h-$M_KEHLXYhZ{ ze^&i6?Qf4|xT8*7G_jBLjSivLSz#?CpYIQ7ht9e1le0EC2J_fcB(eEbK{Td?DLFtU zU=N-zN*DH$mHk~==~)8`VV3DZwkKP13P|B3@(=x3VQ~zwRth#oR6gP2F{Cep)LZq^ z)>HRoFN8f{f``kt{HuyTtio6gd{0;f+H50 zaUcnt*S#m+EdfV+keM|&0ptu+3W>4A5y-ZP(2TIyOh~d5> z&EC{Zn6Q1<%SnAv%LpaxzA5OBv7Fiw)t;Q95l#VR;Vwjs-n>*i7@cg6i`N=qctXqI ztg{teRM*S))Vf ztB~lFvYYA{rKWe{RaXpJ|SsiG`CA?88bCCY?nQX=PEt4r}h!6D?^fVV3X=jd}mrFDb#ke zJ!mc{^sQC}J7UwH5I>i#tC3OUaJic9?be1_Lk=&=WoeYRB1a$;UzS)lo+O5`zG`|+ z@%_agBi0#-S`#isY~(XuX7ipWmrB-+HZhUkFNC$QA0yqujy$%_b-q14I1&vGERa%Y zIm}udq{(sPKl@bYlyIJvF;rYSd+%nHTWVeLY|Y($4)6y;E_zm@inoKF*>wPnNE)am z&zIy%Iv!OuKdn8KJ_5NncqV#@@;isP>;P}F?Q_?1*3uN@Ldc<+ zR|Ts(S#Ua0ph^)u?SW)y1fg$qTKRXR6GUj5_60kK)tF>*&0DNFQ+bTJXyrlug6KZTn1FgY{5FR8V1z+wn8g z5^KkPay9#l+|T>d^r@<=>plMreyO3PWvnzEL460AwpYPz;PNv1_MI>L*$yt@y1B`D z8?Yd;*T{Np#aPU|bIY!*%LvFT&%v_Fqp*kQOS;oaDY9x*`^KnkD??`6HjRbqTky{# zSFllapP8OQ2f9x;>itnAtHMyJx01jPKZ%p%SI9<$bEkXe4BL*B7f;Oi;lW?F)V7qG2#{()Cne#ODb~T%G+$4r7dr9Qi)%ZUEpg>>0<>aNx;AE{ujoSqemHuWJ85RQN zTYP-Nm(`Z*LDN%{evES_=nty+s24`VEHtIF;5 z(I_|laXprOdX#_E{{XWJulSXZQt|f;L|6EXqMD7svlA7Vk64u&y+#lc4x2$%T3Z34 z0Hzg{n#{sVwAqd)8RGef?8;R{lN5gH6qN6XQFD1_bTJD$1eiU^i%rG3mXE}(_@-N_ zrX%@gDR?70?l3M;gyEgTRzeJ?h$_@~zYSbtn5QxM@oHD%Y0X0&LQQHIg+>t&Sj=t- zN(8t8xGA|wJwc^nwjhq8^(e(w%OAP3ScFAJO{ckj*ov%q&xyIe3ubY1pBzfRElcrr zIh7JF<@@o}xL#)y9nKnu%}W`p@chrHKH}mncwS+8<}21wR zq#G~a5{}|g{{XSRCE^7Hr9Cji_a1&@9kW-P=2c(BT3-a%k5d->Mziq{7B2HU#v!(I zOKSH%2mZ0lIH(VpcYNt(I>t&r+;t{G(SW{2^YG zE28%Xp4MAd@`1STiF+k&i+Q?WsioIN86`BMd%U<~@|TgovL_W*>UT5WHGM4(owYpJM@bJ#Mz<-pCyT*9dT0Mt8RXN${o_#xF5jVIdfAj`FI7m_fV z4O%#^h^7LI=F2O8F|Da;?y9s+TALP9uJsJew^BAM-O=t;MHX`$k4FT|afIVWmo;u; zSge%UF5X}jrdf>%Pzzj)2s@?PdxgxlRhp&k{L2~)tG5(q`5+Y6NM=i2{ly`Rmd^0n z=cXbR71>)$&@i(=Ex}!WVJVD-GOLE&GK;8=MNMe_AyfqzC`+cR`h&DsRB#gwc3m z1Y+f?&C52+d6~5S;dN|sW4Q$V&fjBT#>6`DKbhU zg{RB|r~-E-77w}YjNWC@<_lE?+~Qot?mh@$@!y`NlJoT{YtKG@Sr+L+`Q`(+%*g!A5m}OV~9AOs}i#TaN!5;8o=D7yj@F*a~chJ1)E~;67b8l_?4Xy z4}425{X-xSkWAF}%GRm6Z-n!iNt$Krw#zETd*Pjoa#`2ksj^ zPBGPDCjPmLd{+WBfh!K>=bdm$f}yi47QS%7Qm}FRO35wFxR|~Sj^Z@W=wdr^4XkB= z-fwPPMvOlKX6-Kq*SVk!m4HN{`r9pdTDAhEWWe@r92fAxl4x=bz4I3Bm)S;O0jj)| zw-Me)Zzvn9OlqjBddtc9hE#?Hl?}`l2)TC=B87k{y+8$SCmAnt(_1K&czPv+_cYO7 z%v4rXGklQ+toF3Y(HKdr-VR(6u<)oH=_eBvZGb~21r-C%4(|mALdkhR$LW*7$4MB zN{(3gQzPnd`(jk3e4e99BU~**Wg0#sfGVZ*ygFy;mf23RbRWSix}_cFtz(a21jAnM`Y?B8HOZ6Ebt|lt+%QZk=DqL7%6(L4G;TG!g4n+Et!jWRT zh+-t(I*qKQf;gEXDO-tnsr@A|8CU?Vu6U_MR(Pl&nR?vqfqzg{iJ|>P8}OvpF&5E^ zys_Ie@fm4E-3-PUjU9fqC^?rEA7pGn4e{JS7X;Kq=3Mc?PC*qNEOaI(%mDtPYZ-)_ zhc^MNOUB^9K~m>)-51F{-0Lht|j=bR}NHaAvOzvM^FY*3PtMTIA z=4H!$P0Y?B2{Ur;adQ{14b;obHmF_(wE}TJ2}}BzihB8sS#ka`C9TIySBjKZ#Kpf8 zPm*HKWYv5_HJ;&(Jw)T~UZAvn!z3$kVEdNGP~uXHCPEzkCi%Qh{-Qpna@RAThEe;6 z9cERA`GJjWiH>z1ehBh=Jwq98$yx^7u&Rz;=5x0n5dc$kN^_n@bHSJnFWlI`UfoPv z=HPwuOmYlI?}i*0-^?;qDNmv@oQ4c;3l?z9`z0|=U6dC#HgIy6m*b*f0Xk*5!@V?D zFb4qTy~=3XQglJ3aanf8)Wf#sG@+&9^*#D+t4dKbw9i|`weNXitfUV+9~CcXgW#eyj-AiZPUIyEXwjrL*zrE?e3 zKZ#Dg(?FpwZfa87F=k3_kI*yc=-Kft!6Qtf+jdKY(Fm7LarH9GSs2HN+3^tvnkYm| zGm?K%GsX}Oq05F~VWe~2GaC=t1(P}e0KDZtaE`Dfp}nhrFa-+IthZa_Ams8^q5QAR zH?r=1X03lP7PP2>?k|iFxoa-zE_BaQFlG$UR@>#~6jicdv07(OsPJ7l1+B+IT(aw1 zq4aJW7iS>#+Zs*MyzQvwxmlIJ(I~Lhg>XX^kHp9RZ6xNmM^&4&Gf*;P_&tDsu3l;eZe&9 z5oiAZkbum-y>S5y%Ujb0zqyj`D!di$UGMxKHv=(AbBs%1uOw-A54B5tSwt~V#cCXUz^cFc;JC%+1#$bB!R}rzxr0aFP{m_2huqR=UJHXp zVfJp-=@Sb2 za~ySd#IH`>$BXols^$LRe&=rM$o?O?wSmmHf)h%PrdEgKXjyR4p@E`;Ae3 zrp>uu%%W_P+YI2}GYA%f>#e{c*2DUYiE z=2f&yTms#9IV#)bZn_{>b!HZesX#G}Ow z%r%R1*%9{=adXr$_?co%3+@igA`i6SgDU)CnQ)gzBLbhO>7ICsZI&hosl*&Cl>3aJ zy#C^S{{X4*0l8wti3HHaj!0F+abW-ixXf!&D~4EihHo*;qY$mOVpcFhLYB<6?T-47 zzZOAQ$Sf0xGYZMlj@B@1a)$8?kLF-PAgM_#Be$7GP;rW+Wj%By^8?Sc<`JA);&OYZK za-X;=zGZKQ=L8)X%*r1V{Z7uv)?)m#CA!QX=BGzCnTCIQpIl7RdNn!ck<6j{XpISB zw4HN?AyIg9)ONt#ZVLlPN$@XDX z7mkEzOI1fXiry{5Seh6HlR1@T+oRON@HWotovEv$izTH0Aw3Evj&S<6eqztqaNQt!bFZRhiP_MP)AgiqR=t z;1LQp1P+b2wn&uHl@`+sRf~%KhiqEKqbky#iA_^%8pmD6V?P01ZW_UO3|e|1bovuL znLyWdF=0@}ET$yA-5d~$kVhh;Gw&Z#6ae{{T?zx>40?)B(zYR96+=-R< zw$;`#G6$EOanV14RfeWCn>ZKiY|Wayd*%am{JYF5ZEGx{dnj#yY|%7(Zqdxd9lqH9 ze{!*%MFk2_yEpwsOzMrQ$X&FMxO#~roc97b49=G@^{tRQA=+9ITp7ElV?xPFP%RoJF{XfsbO_C>(-4i~L3Ia(jTK_Y33V20>7i%yqvXh@X6Bx47yK zNaE>-9jLYJ^EC9SxXwe&2$Xn>1Nw>@tVg5xhO+JxZ|-BuaK&B-RQ$m1DatHj;=Ic| z%bD(7GX%ECRj@8H^K*#Rczs7RiJ55%mc?cSK0OX%&5*De*B)UbH{w>EO+wx%ytvjKaR>ohXUvu$9n+$eOyt$$M{N`a;^ znOcCEH+Yso$$nbV6xE=Vcb&@xr(w%-vS6d8NXle7*5U2|$i*eQI)(7HO9dq!xOS9b zMQ4=|TLS+8Q1-<(<=c_e&yW%0h9R(*jact&a4rif&6T1Gg5cU>{)u+LXi#2zF{<#w za$g$Z7d1wJDlfNW$n6Lh8*MLRNSV#ou!>Cq0Yw7*r|w-)L?Vx{fU@PQ4V8R{?lk%e zIyy3wrWh+pFFOx#U8wID!*pU;yg{0Sk*$w#HWhU$xmSNA(l={BqZhyKU3UcJw%xz7 zUn2#Cv9ssy3T%tqRb1Dfa<;Iw?JM+`*~kT)=R{O($y{^!PD5C_c6PyeSH~$vEm@SZ z3|csYXY7GX&`unXT3)YM=eRQ&EEF&Y91L{2sta9ce=+ws&}W)vy0?rExZxn)mTf}=TR8PBNUgUq-n+~69D zu5$rY5YrJnj4-$pLDYJE#k{5tyNeuL%v4q(p;kJnj6}CMmX4t&d@h+kx8%rhh%atk?;%^T~ z^QaQ>9&->eewZ{l<_i4LcNDg|=5qXT8tW48@eKYYZ;U|xJBJ~vhw?`2>INBRal~WW zQrX3P!G9JNUvkhv<_hDOHcHeuJxu*YL^f)S>EATa|2t^%){sE zAUQtFq4+Kdy2lJ$IpB?78zGt-bHoE0s%LxDaJm~H&F5*>CY%_3%ENb9-XjM$>6yJx za|%Y6MS&U?E7^fUuOR9uylD2yZ#Vi!Monp%X6(Fd)CzH&v`Vj+CJS1;CJ9Gir?hRn zKcO!nVPwH50+~I*0?KfiVU?BH&jI)$n{sMUWbKw7knYtf0X>(v z9Q2x%NLS?Tm;eA3U2gPqEGt{wlvBoHrCBS>X~{wq4nmup=+he_6>$pa(VWH_`DQ%w za!Lpc)Y-l;Fi_Z5zz&ln3hAbzY^}VW`UQrRz;L+%@FGFn3?$sLens1?&IoA&`g zVDmc*11VHMwc9ePFf!tz@~UBU*Th!>T9~<}`9LpaDW&mExIQ8Udkf^(5dJ0%X?w!A zLH$m63Mdt`x^ZS=0VRuGC3!g_9pPXW0O6x(^9LOZ7Pu8$OsE$HSQ5WQ#JfW zx2RiU3d8XnE56%*a@OznbE&c`sEo%FpgdFrg>^&($Gt!jsJdX*A=EDgdtkB}CFPb4 z$_3?@ZAzCzna7Wr$=pR&T(V=B6n)ETiRvYSBCa)pC>0)Kh>9J{xci*Jjf*_^&NCb{ zl3S^2SQJXk97K8UATfxoz+A2(tYHM=Ff|ILOmo{EHyLG$)ZE8%qjiXQtQ9KwhZ46l z#N#X``HPqsnl5TuPxs(1aW4Edb3|_!P~1s!{ycrke&MD$W2tkPe8HKVc-O=#7u*am zzI+~;PN5Z=$AeF(;Fl9oc$=BOa)@1O37m^HY6)`zS)SM#&L##SMrzefjKZn6>T>)_ z!SM#Y;v8p*&jum0<5J9iA+hySrehGrW*^kh`is<8^hUD8wpRXN*F470%r75vL%hQ$ zI{qV$48{9si?`UzEv^`8-)Qz8F6^|LEr zIAl}#N)452p_CM=;L5*Jmc6kQbqq8OIkkp2o_&oo>H@KbtS=+mHXv)Y?C6Tvr&_Eq z!meQ1MYTE&(i%NzflD>Oru$)z^SMm32-2=aH57CvcP)j`Y`w5I$SGtcOlql4vo4$X zfr8B}1a9p7YoFp$gJFPcCO?6V)nm$rDV1v{qFgOi+!D#BJQV`Wh%R>4Ih8CCH!*b8oL_MhY+j<9xJ5E^ zH|-`}=2Y%Cdw}s4MN@UerUG#jo0nCHTdIQv!%ca%A?>b_3?2%xj0!Hbo?;nx#{~oC z5Q}%zb94HI7-v2EjOB{f=jLqt@)c;@Iwe9T#}d;4CEE#rgsout;uHW6?qpx;V1QI2 zu_`3K_W)Uryvoc(R0C6Lyjxh825=JLlrSO#h@(GH!IELjRF2}~)+^l1t~s6f=4fR# zh_baGnd_-u>T~XIh=i$(TyIgXcMZ$LynB@$zA+iExpU$XF{y0fhrjc@M0ewyPy4St zGTcKy315l*FgxM}9ZeM!FUI))0A%J?BfEfR1#Y33GYLxhfFJ#sf8=QE6Zs>xV0w-H zK@;j0zYwOe#48unwk(BNI^DoA^AGm|tNp>cea^4q3y2#1!-QtT9t~@Im+e$5xahwfsA^g1g@SSQyKUp{ThvqOxc;qojgLm zvnt3-9ac9hJm28}GOm5i_S7cz$GMMbeb(TBSjhWg_T`o>S9%FWf^@aax;xWY)F{rf zJ+QzLa5I89A45gPuIn9`WW&h83oi~im4ThUr?5XRV|S7E*2%{eZ64x<{My)9V)QUk zC}d7uumBSv97WV1pGV9fMKtAqsH=SAP8fnUu)0ffM*~*2=%MJ0b`pRTX=Me#xkTV? zFfF7uXP1Ze%2Rc3*gAmam?un-U299FxO-;oDw8J8iE1k%^^9y;F>DpuVXlUI9qAKH z0yr>JdyOlYft_9DarXoQgJLgA6V4XNsc)aSn4~GC^bME%kwwQe8-~&R#s-p5OHCV% zxZDLnbFlXj0hp?qY`2fOSR^cOu|0&Paj2Ld$UEG$ZyUf|MIB}m#bDmhx)!G_w@R5S zTYSqIDQE!uUH!ueOKk;;w%_IwaHLEE(@&T{$e0B%Q)})Dyj3S6WxSSxQ`l@-R`&@S z#V;1PmEr2PJ(gBUUp6D8RCt z9O)}@I^w02TW{_QLvrnc;$|>K1^SsV9#W6BmSMars2V|I^SD8fWc<`2*Gjs$YT(Q_ zvrEgt9bk(=h>vMjQZ%K{5H;%W3Li54A^mj~wlypFI+_0f5H2d%Fvx_A!!Ey2_63ps zQry;6tb7N!^v=19rTj{Um@B)eyyEv1M>DBw1qweRvmUxZT`r#?GPK`Qm2}o7B;Xa`!8!>s~XdQoJ?E zi0c}e>T8HT0~?P%T==P0L0nc4I42Vhr4<&kL=o{DUSo1y@g3LP*>gf5RHLc6lK%ix zBs%Kl97pC@L}M!wvoC)J8bg!f0G}5M#MAK%hs>%EnW(z_#M|us!-w4e0CO{?EpVKL7AaxnmfqoZRVFda zbhx>TbucpFFk!wTah6;imlYE%+B z1hUMhhPgT>c`Jn0%G+{`f?i8kyy^kbPFAwu5%iIP%jYe?U$d2EHn-+jf~r!?@&yDI zRbW!4dXZ73b->-rw&hMlwrmLJ1ZG@bqOVmU@d^!t5?h72+wKk^87Xe%+j9$94nq0F zq*YU#1@sekB~s89w!Oruc}?9G{{W*>vUZuyk@$ioF2&1?H&q74tfBy!O7?n|1qBgC zo64T0Uj=NyaB$ucGK8}ZX`R{JQo3v+W)HO{j6&-z!t(;e+Q+Gc!|GsctUDLGhuAes zx+M=+L5;N#QMKmdnoCQGr)8+s#|~1nS2X-wcZyetx1#Ri))c(@l{6?=^&U;{E18;> z;&Uvw6Kv)j`kC*EdY075+ZJAG0+g)4U}T&>nP+-M(h&j<3cZIJs6#!*O8SsQ&<7Tdm8) zC0TOW?rw4ukJKZlxR{*O+N;N2=HaP+4fsgZwxWj+%;HvGsJ zNluP^3oQCp_vvHYwUV_ev2___RGXYi%;HsaNtRTxf?RX}o(MMyetHjEf->ThadH&) zn*#f{=p5uD<1HWrB63O^5;StI?jn^5bk(s1LDNNZ7mFNw)I%&s?+H}fG36A|b>1rP zphmJ(i|q<>x)`nV9l~B64VlEVn*!v{F1}(2yn}fMP*;mqdzm9iN4@ed?nDSs(4ld4 z#M4Jzg)j92m?9BXI~?3MWX@-TUuw;#nt5UyG)1&m12$?E$x_4Y7~RGUmR&m~G+1`j zA=!>^n6U?8*Th6pAY{34OVMMeyb2bw#%c>LyTB|}5gJGfJP{L)l*CWtY7u^Avondt zCdrN~EaC-GsZfe_sZA?AZXh21jhQ_#G0xcwUO zk20jk=r2~9*NCG?wko3)q^0q=66&i}`t%JEKn{yr3gbCT(^b3k3^NcYx}xs;!t30D zZ{(Vl0Mcl8W8H(o_?J#8FOOZyfrYo2OSw{0)ej#)~N;(Cn5t}_L`QmKvUbH zQ^1RV{ACJ4yFe%a>~uC7MhXgocAXFBve^h|DkG0WnMsPfLMXsPR-D9kx|E?jrUt9V z;X)w@LWegyiVP%vag{R?rlrF$)HR48+)`ZPYpbb;I)+6|E@4*@J|)7U97ZaoyLBQW zr`KIBT)vkFGLc)9gA|IeWy+1;(m^G=$`va$a<;#Tn%sFsL3}`kx{0dX0cIz&x2t#m z0M51zgnK;&7-uDSibkt~VT$N6XLv6B5mHzq1VB;

ss#W*3~V7ZCQUV%0cI3GEVg zZWR>}(~L~!vjKsaVX0K8851(qa|pp3s!-Nt=A!FS?P4ia1;nN+h^MCBm+8EJCc4~Z zfAqjr5#6$&N|=glC3ZRr12zSb42)a}`$teyEcS-7lqR68wmW9-_ z*GLj9!yIvluL)hG7gFk0(Pb)HPyPeiTnQ5CPA^i*1f&J#SC&(8=s6{s>6g0>;XO8g zHHV`81i8ex%a_xMa{64keQ;Iu^D$DE3UfT^wK|;`%rSA^K`I%LzdRRYlWXK10V7f$Hw2iub zr2t|V!VhB8hBMkO3EB}>z?N0$hgcFjwXb7(1iN<}dQcT}jpA~(@34ihBEyub>1 zBVb$3E;%->Kw`*QF2sR|fetNmdcXL~wr~ijNHi5NjbpLiTGIqIIeJ)Owsijh#7ny+ z9v#d}&HP2X9y2Ie3A(Ykv7u9L7u^iN2OGC$ec%KXcC@0?@@!04887t6)=AZNcw7#$p|TD=(UWQPWu>0@9}!(v=z^I`b|-f#GMEP$^%J{ZLR3 z#B$$8O1E`(X!}O0avned$;@yWLQWP|ybM8x(SuipesDzq7qf+QSHTV>4968Jhq=|z z?62h!!8PziZ!`X3?25{3+E^P3E&vLGedj0zEn~YZw6@sh^WH6#m`JLjz7f-FTtv~G zbT|kpMV@494LfBd1645wh$_4{P$h>6ad%Soi-A~}gi4nlCYOi`jZ8`d3yBGgq{-aH zl}{=Kb-s~Ls25R2{{V_axl9UWL_~U5X;_IVm7U6WfU>ayQ7M%~H5O-~(;cPaJ?aTL z>84pL_*TU{!Kfp{IVM+Ei-e0bl651s33dVZhNo=&&cGhx{{XNk=$&O*0Y;8(!nWy9 zLnNWmA9$!zFu^Nbo^Bj$TU^w=EX{N*RdA=C%(WF{T)-%KA!)MXBqc;RaH^Cc5y-Jv zBt&G6p$NiTqN1fhJj6cIid*Pq!iWHBR4Q6xXI<1z5y6RMb&;sjmX|8x#GvLE4%f7C^L#WxK-jd7z)mg% zDF;o;(w@WD#{0z%VzC3l^$J~PPj~t0rweYr3yf`9XNCU&lMBju49CDE&PwmOqZG1{ z{YzGRy`!`S!^EbOYN$z^)s;UwDp&~a7Zb_8)dUnesAd|2?JR1S*N70imiJ?ft#*{e zSZ<=)%M!G#00kW?1)*xD{J=RHf;mch&o4wU$7w6K0iBovp|_ae%%he$+-plRv8XeM zqqm5Jiy)5)XnzF$SOyaJT{?ulS$fJ0TX}(ZIK*vLPDxt)Tr%>tJ4K^1=u|z|f&!R@ zu@zk}#Y=%&=Jc75Mbmy2KdEj;UpTnH7^XaIBHUhMqVC^k z{{UsYw&hB-S&rXahW<}^b{tFMg1@P4qUh~#xvxxrv13EL46pr#5LctPQ0qjx)*Y_Z zvS7tByCPer7(N(G6kOH<*xe;BxkF!xSxXObm}^00IsX6?NKhULY^fC#O(`;FB0)|0 zzJTO7xPeEpia6#tK}uZi6i}N|_?YclVTpNO_r!eTlmV&l3k8T6tT!>718_EpZVTco z1H24h)wTi4Jg>a-;^it>2p1$@n0H_}gK8^!AN<4;A}M07t~Ja_P8ms|5j8x|{{WFh z0HQjN=sn|f!Nz~NpQ$o1CpmdlLD})W=MUCB*-i+frl|!m6>VrscO6VMa|xJ6rPo-x z{mTm^w^hVCTEj=}4uIHWK!6e15Y0FKK}|7NZ$$!8sdQBj%q7~+S`H;iJPLrWxa}#l z4Y^rN6MEl3J8>JL*`k-Llx7PE6Ye9E>L&nwXCScU|wGP5K zEoP=cGV7?LHqkc}T4)#YJxpL+8CET`O)~=N* zRH;(E6iVw+^i;2_OMJ@orXf`U3#qaJ0|7xDeM@C^x23bmE$`?-;!)aBPy(o^m4NrC zy`k=q_*1m05Og@1l()y2CbNEGD&_-m3xCZ%y?+Qg)UK7$K(-gnQ46#S6m1hUd`7z} z2`<$VYjZ(FI;BSap`?{mZpI9^YZ35s%LP91c!KPEMrBH1y_N_>Jgy~?yp6{sw-l;? zT7l+i1MNI-zd}L44S9+Bi%isixPb*24cNcbb4PM2sjGVt=Em8e{XvBlgj2@uJ)xqq zMy5#Ujux7#swpZTm|t#+Tt#x7z?O%LrJdpjL2y>ySl;4Arj6yD;+^8*Rj~&7l^kQr zFr);Dai-!}njtGpM;HhBchLIvj+GzbS5OF;jX=Q^11pKJ>fp;5{{SXCE?~1mPzgTK zQ>uoD>Qb11+gsH_6p`!^S&$j_23q2j9_#)>Wws9#!77lyEi(S1XT?TDSHEb%X`y1% z1Ohl&(aQjn5OPcUOS<#X@n`|8u?ebdG$Ms&8fslYs=nqY3Kt?ahrmV+96g}4?aMDj z^El=^xg;zn;vkLU2qTDIImByFy-Q?x{&oE(Qz}%gT&^W%Rw7E3oXV6!5>%+w{Uk6| zP(`Bx)ONLo0C1x&e3WdSNP~fwpb*lSW9gXc)@552SM38*Ep_Zvetuh6g3bc|QiEc9 z?f@ttA|@rch0tH_G1e`V&gJ)^LN)&YQ5HnDG~`G35vfKhTk);IL?BvK2e-U29>K+z z`-e^imSwA|T%c!T_ld%b1w*1($d?_|)cKT)-TDA^h%mURM+sqB?GtXZ z7qr~UksB%p^DnK-m(u0*8FQIZrF{zPT`DB2>5r#UrAot*HpKNU8y%Ab2X9tWQzY-u z_UThn;P{WkYF;J(01^KH;@|R>W@PFrAQN!QY{-ug8_6gFvhHFCK?4YRrJ=EoQCGPu z%Pf{$vaaQY-Ca1$F!GnDX^U#=@p6@UuJpta2E_LuLuFZ5-SZT2pE!fDDLCo0;v;hi z+_vCiHxBaNp?}3s{z2)lO?0l6(LGO>ToCC-1A;6-V(t?s;xrB2(!t+H5`*(e_~y5;+erhx{` zAcw+7V!9&pR?2O#*E%y1O2)+*ygaz)(NQA|XQH<+#5bZ>6OZFp{{SRDy?RpWvMQ0! zcy`5Y0cp(4E(`L)rD$^~4O{tyv7jLZ;^kXJUl$3CUoax7!rY-FVkX90vKUdr0>2T$ zp`V{d7_<}VC`T$!Iok~Wf z;$jh9QLn4J>tDs%Q&AzlivA1yF*Hi+P;4s65c-t~Qo2;B%&xZ#h@qHDu;3hKWVmWQ z1N>RfwkC1^;+|)c}CVt6IVuq$G2k8>NhNII*X^~;B_W}q*G@7i#S3~kvIg3Oz zO|ytgKya0Vf+q^uSb^5BqO<%8nd!vGT7ICK7&}6~(I6_=u~15b4R8f!<^yaxgKb0S zjA0$K*(f$s1k#CEv%D~I1fUd3&m^hH{i6XIxYpOSRDO^g545>PAyQryTsXp`{UTpb zSkxt3#JG~nJi`dYjx4mfg&8AZedr(_(C#G;$%|w=@FQ?RJV!_v{vLXu!vk>(If%EJ zNQnewxOZ&I3P?^65J)MwlW?o_0Gvxo=225gQ9M8@I7)q9INn+NN|ZJQUcn!`9%(;v zx`RBk5P)=1yWC-vsjlz{TBe%KMhhW8zAmPrzzxa`7Kcnj(1pF@DXX@wcF5Ay0A1qfnyNd|dXbCh* z@Mka#w{cv^mT*N!Tb5a6R2A-Fsf(z}*#s)6b`iu<$X-aybIhj9wwEplO~S4TWz@^b z1uA$*p3x0QVImr5k&khLmWljp=uFJY`dmSdo8yKnS_nlduQ%E&x*)rtPAZz}@Ftdf z*ZTo6$v)}*LX8FNK#Lt!i($2wyoy;266Lnpt|E4V7gT2c@J|3SOV!8BcP;jRag6vb z11LbPPRAGdh~;NDEq43HGrn%sg{rR*c&*z&2I2vkcXrwK#IaFtnl!WJsCN`2S+(9{ zz~Zeb<_8kyutO3Ilwd?`nJUE@&3iRESK&6KE+02HX)+m>73JsMcba6h;zQvd)C$oL|binOSQeO()g!Ut&d zzf!D}Vi9yh_&TXrAgt7cE-n;?xQuSk}%rxU`_K7u%Ma2=+tsS49;487e z{fn7h9=`*hXxgd)K<0^{f+4yTMJTUf&oD&pEp@F-R2u9ZqLREzQw1l9#oYep;>bYJ z+B;(QJHhC^f-7Mb$}o8Ll@BH;Oad48OnoO%l{59!zpqlGDkoI_NjTiB%}OGATND2P zM96dA2be`{hQv4CA}&3q2bXz6NNTkZsuHc{7mJbq0PJf5F`Rr$P`mza0$vblkMIS54La1P_@?JDS#-*71RI>>^&rfjLcKKo zY9@LoW@dbJaXH`cA8Ev{l{NJf_;n7iN|ef#5@{lzTXMVfsd1Ki@hViWrBOb+Qi)jW z{{X!{Cmx33g>>)q>*_g`8CjKy$??*sd4-h9t|ekq{It15OmwB52~4+W ziPc1ca4>ElmXWFmfs%1l>>*YhjZ0N4TTmX;1|wI9U9lC_Eqx7r2dEugK+P*#o7BLW z6C8`o7?pd)Cx>siB;Xi4aSxO>#mjbYaJ?7uU{I9Rzj#%G9jtzstz5^ z1Y1GCAI#zLN8VO?d`>Y5N3^bq^{P~oD4%{bvu|Q8Rwj4XHdL^Eog43rU^Mf zWM!D{@Xf)M4nhxD-_*3s5frX9;31A7Q*mRtX}RQ@7btF3Wpp<$rA86gt(6NZ7X`Fe zM6qsSVANR%s>3&o?l9)!5Gc%S7WG2`1Wr07J$wwRzLhE=jja(vm3ptdEOJrdkN2Wa zj(}Uv;)|KOnyTH*OIw70Q3PAdNCvoE1?YxTnw!4cT~)V$Gse)IeDYnhgH{ z>

c2E3;2v-?SWw4rRmu#X61y#J+QI^13)}n7^Wq4Z5y;fumimszWTOS9h`0duGfVaW#`*=d+_610SGB5_Z& zqc~+cr4hgqSHRy9Rm=tpnCb{Gc=fzM1wgVHO(b2orx4(l>*+0dmj3_(nNLA9MLL$5 zcL@$-xpL)nNnKuvYjjqMn-(O^L(7yW#0zShaeWJlb35SH^8*;v!m9rO{EjM>7V2YR z1qI-i_j-Tqedix|f0LiQ?GFMAjT_7+gj5|Cd%%ktT^Yq)%Z8*?bC|g20C>1J*I|Cl zxd8692__3fX9AkRrIbo^0$ycc5p{4tVzhiu0N=6&KshDRLjC2hO)6b5OEy@SYPc>I z2I#0Ni_~FY&C-bITkkH&(jpwjVjWxDvvg6~QP`Ar`VGy#ox4GKOd5_NNX0mZL$;bi zZ&20&k7fXn5RD_bUbgs$F&F`v2x%5R(V$+GDj#S8bI(jK1hdhBJhsE2RWh0_f2B-2 zRDmgXY*&~o`7U@cFYo^VlKVkL`_!*^vHK$gC{o_{(4Jwfc!($$=ZJTrm0kVe$wBOY zvYLm9SBz}8nXqrW=nQM6bhVRBmzZBh$ZLWIC19t@zpjh$U3cRj+!JwtY}(=rhQI;f zxWNS~_1+=07&R{g3Nm8?25_a|)hBtdWjJYC{9JN-ewUiB!~}%B2CCvBw!3G2Qy%lg zdk=Uw1{L^)4P2`@mxB?s?F5BNFTa`P_kJP)@NQfkRlg{)sI5hpn5lu+cRU~0XdX;VW`5!NUzzBg<--A%?Wu{`1zDeMOQN5yn>-&YZbuMO3b49O29M+ zsnUbB%sJeqrApAMUf{!d(Ys{+qO9sTqrDdo2v+xsWN2R$KKaBOtW+-VS-JgBH(nq_ zLh~Ld{-t+mXnUvi1hkqQFrImoGgdhhJkDfQeTArkMI*%vzr4A|5b_`HDJ%^KHMbWm zF-_U`5dh~kRM)-6IHr5tAQiT7yRCP`ICEDZ=k7)Nnyg^;pk~$M#uq4N7AOo}VQz#eb5LefU>w8CiVK&Fv5bsona)jNow4(daIo%0 z`HOQc`T^FU9Ne>r4-rvVH4|adx>NKkrzaSr3k{y~t~sdYTnAz8RWCtStJ>n*g05KP;G{- zUioFgZC7T$Qj!a$9A@Qth14V1i+PY!mkZAS0Q`xip#yebXf3F?J_%@)H=ghUj8i$B zOw0aaL{2&&En_q}nE0m>s$U|N-V073_<+(N(HhkaS9ljP;VLbHlI82TR<0@Dc_QDZ zf>HJB(`>OjdaI*2)DuO-OfhOA1|i03D@=65CB>SETIHCDY!QCUW}JR1{{UjCR4n*N zgSdrxOe5Aze4)5#Kcq0qQhw%rhl&xRfMj12>DTd4gq}D_lmR9$lQ* zTAWi%{{Y_dg+Ld5D=`3qCYX|$UgzBw-1vw4EBc@8Bm4x3D;|n^3}Hk^Fv}1kRq80k zxa_G42&teoGjIUy7s-|a9|B!2^h?~sMdDM##MvdHF5q6Gup*tIs}Y9bsP&b<$u~72 zu9Y&SM6RlExP~7wx4g=Yn7zi8{{X9idE1HDWrTP?_Au}^e#oF0b?H zeBBbEw7u7vRH{$de{dx$gT&GqTzQC6={MzW0}LLEj-tO$GNvc`PmUw~&OSeLpOSy? zNB9-cE-^|8d2sfUtlQB{2gM z#Tuj+lt*x9cPnB6F`D97DiAI$ukvbX0#>Gp_#_0WUWJ6IhFN4cDh@7EM=`}ZnHN#i zaa>H@+5WmbH&oS*BKtpR7J&LMN{JI#>U8FDJ_*OcJN(MO#OLLe`kcKg9comjRH%Rj ztjkCO^BoEfT|+2V>6p1B%vX(Kg_l3PL%EY@>nQsv2-66-)D} zXIlupL@7XBAUA*QOb);5U3R(l0@FxY_6=LD0 zm4x~$9)4v@%|piKM9N+}#>G2yB-QWnqnkUGD{f`G!xqicL>mGR zrdS}38iJN`M$*1x^B^e-LLFCe$WrKT=|(p6rRyE{{T!v>wqvhVWk(*3WgNG0M$S$zfeT#t@(>@ zN;J{L0085ou9XDbcCOeG3zlNccUTkQj4Ntpt<<=Hv~)@sQJ7A19Iy@`d`dfgO6W87 zL0N7g%t{SPWzR~LnO!v8$o&^mqDPLmsbx{wFeiC^w0__LBCg?e z+@>|a4}htNB?Kr^QFl{*lV*l-xatKTWz3COa+jRssM8JF_nWiL94jqF#%QN!MWk-D z%r~YX5-w;04%;V+HOA5ma5oU61Td2mHwN3H*}qas=}*;Ta7-P+IG1rBm}#l(f`ReU zq7oKnN`kVFNI{ry=PNPXq^!z`o{Fi@O7z!GI&&FBU9-TE?%`DCV~3aS3(5vsc_1j# ztMbgLL~i$Nx}ycsxnQ!*LMynzE%=RRh!w+;_l^pC{IY=1A_c0TUVWvPqDajV3vfn2 zHY;F%Q3iE@j8IIr#{lteT{~>&x4f);Kbg1Wn6JD_KGRwA2~`p(2n&O;8ws~SFX{>d zVN_FzsZ>qNLvVIR(OCw$=fqePLmP*L@-XQo)QXoT=2THha-%JlFf0XjfM_CtF)Kkw zL@aYM>M(HmfdF?ep@^ZP0BTl;BncKDN&0A&lvpmI1|W8T%3#WiHxP!KZefb^5sI&> zpjSfaRIgo5WlF^50D3ABuB}BuGsK`;?Oou(H(6HlcbU~G^5!rw$Ns>u=?{n$#?~hE z{{XQ716yt&u(0yPQ#O0_YV{v(pW`|C{{XcU9|!NuEl9L;!GEF$=={vVW!sDG5~3Qz zKF_^J?A2UWi)CsmK+22Ds)ce2g;mjtg-}5meEw$7{KF_^uJ>I30I`DFDrVTYT3WNr z!9!8puM5&3V$IPB4$_O3s=Rd3h8Hl85~Dde2tliYJB~9^D_~1HadTwlV4#3$j1(K? z#I;ot@XJA#ue_@Il`1mjI?;m>dzKsMbbvXOi1VS`>@l-*x{K0fc&q6xC7=?zmU~?* z(^92%cH!*t_FJy&w7u z?F6MmMSBtXn-fr`kyfNib)lTs7E}T*0lHME{KbvkqE<`m;$F7`>Y5n)F>F|JckooA zHf>aw-`)lh1r60f*#Uqn=3Qzft95?U0F=`6`+`sdvDFLiMaq7V+9EiL z+%wF=%&}J&aY&2a7sThGT*M$mvMMoeqM|YM>(vF9j+==qt#zqVy)~HNWlELR<~r$D zxQQs5CDC%V>?22G6>Us&7e5b(7Y=eO+q8VL`v$2_V=C-2>g{GgIu*Ju_2L{IUZM&t zwVSirQ)SrU2Ew~$Uxb!kY0PSah;XfLJ;2dx51WdLakq>)9#}{K4i7AU!YObYl`?`Y z(Q=-mXpM(}l%NYW67ON$%US?e+fuSLugNedT2R#v`jDu_>pYk|Y6*ZL*dt#>Ab5iw zq*D#tc8JN6Y_}~PpcHUK4hy-LIv@>47LXiDMyC;1(P?Puk`J`9Bti_^s4rTCsfhQ3 zKWOjjb1S3KE(UcI5}vHAbg4wCVb>Mf0@Z(#<40QxM-X;vYqV%85EW-6Fk%}it=h&k z6a@zBoyJ*BmvnYJjh}b*D<5zB61QEMS*~m*kB9!uto(#K`?9g{NBfQ)_lmkL8P2X7 zv{SPr4=lwk%w#Z-HKgYu^)YuxOkr*#BzWbro-PQkpj@Xi&~RO%i>Nx(4oO;4Y9N9v zR`ig?twaJ>q}d(_XuQ6vl`1D*{VG11rdB;zgln0TE0x#82BoxUxRub2Ffbm`agQ+B z@A^DLS?qb+0w_brj+YWCEo(u9BpB=`VK; zun@Rd2N4IT+|m!f(xr5-L)N8rsoqrQtGP_BwYkK4X)Emm2fy_M>H~sr@ic%|H(B79&N9h*0JvK4C_t6d(o$(!pq%njzNbZ5AwqX)Vzk z^)tf~<57belxax7TJ1IN0I&w4qW6xmT+EqaOw!<#ZY|;*%(CNCOhcuG1rf`Nvjhx8 zhpVfhDNxs}eI5D+C3R&^{TW>Y5j7GdViy873smQOVghM`x4MXPUxk0DlOcQ!PcEs#ay>j{cB|hTz4vWfZbf7C49&IG8@js!^QE5g!*USq~VB z)*#Bbo*fsFQ68nnih?sYwW#*g22#o)a~9fpVvGzCm_(vE?kLNH%Ygt9uW)m0QYnHY zH9!SING=&mgaSRtsc%~JYJ+~^)}N_al`H5up3}7CiqNo2CQ+)atwC@y2GXy5!_EUC z%P0uaifeWLMQAC!Iq}DaDwNiZ0s5E*a0vNtJ|l-Nm;TJBANZU;Px*=R+4wv_Tdd^w z=1>Q>nDOqj0{nj9mx9x6ZWyIeykmNR@*tx?Z-ym$Xt`3Ol(cLSUMeXT6TB3Od_+fv zqr5M)J!Wbfju~QGhJyF$m+1}D9A%Q`!D8I>QY8|NM#ej6k~Rub%9n`6u|4C%aTusO zx`OcyB(R3vML|4E-lv8Xm~}G55txEDM3HYX*sP*b1rffD+za*UL7T(_F(w!U;vvye z(zl3#D^j=9Jvof2UY0THQC&R5UZ)$C8PCiB(WY86o?xS8DHBb#DxdkI#2W^W$*vY)k7+`U(Mr{o-)T{4RD4;k@GIMIzYzd3C|4EzW^DT`_yQza&tuKZ#0}=X=CRFR zO7w-HGfWpz4QSBfI3<${yr7zRgg~Pe9E4PMoUt)%jnKBDxrt)H7`*iY;!sd@wFJ_v z%CX`S7VK6Wi1#6EV=E6quAMAf7ikl6fKmyE6Hxu2bWF;ZFiTK%br9-M%p#!D5lEEF zE{iQ&j4ApR61_E+SBRmz`^t#}=rXl5jY{-!Gw7l{H9N*IHzT@mV25HlF4!PF7X`Y_wgr>T2(}`Ux z5ldqf)`Pj8W?INDebf4ZB|8MiFPNDP*X97aITf5Rh@ztu%fCHRe^Y19zyYV!9 ze&rXQ=i&{4qVpJv1s1iq;wX7*e%D>2h-&Sw=1%u3L1u3}9p;Nx)Br^*bC#1xGii0& zD_Mg^s;$kAHOl8~& z4sHU=m?LjSR6LOwVrJtJf~pac6xK`6coQ5&D{`Vt#A_uaay4U1oRGK?urs2& zFrv#Jwm=N_wox&KF}AE9h{JjN>!U2&4O-N+2(;KJ@CKweC zTZA0t3OHFbj8?NTg3TGVi35pOag?a))Iym+E+z-K(5og!VpX;+#HW@dP}E=`4MXb< z0gb~b$+$(b-$}V&z*k6T@hViQT`RA|tn{f}S;P(?W&~pHUM9_E6Q0&fPU*MYKlWs$ zs+|(7)|M@759%SHH%(hCGHwLD^tnv@&TG%;^8*#^um1pJuZQ#R1Q@^YMJ-{0rqKIn zl`_`_Y6i8$6cnIXHpeqfEdB)kYSC z09rxi)UcBs8LQxp0BNlIY5m3pv`RSd1W$wV#h|*jl-Wy;YUK=3#()&7KJn$@`Fuwf zu20*^G-I*<08|{`llJzN!~QJi=5Tz<{Ynt5!Qa|1i$DYS3S7O9?ke4}-YzX((d>i} zam~yPKr;;Om(Ral%3pb16Q&eh<{7nYs8oC|OJ$J3}ZS&{+7p#*__8udC8BzTo8arIwL^138y zBY^T>LUS7E%1s6Mlp<|w3bGWnz!xk`{$s|3vFC4ywyyT?`idcz!TXp4W0J=A-(8GYB2;(Ix$zB%=E`{I8SH=$fl+h z#wJ4Qdu};gp^osVfC^N&3K-d8#IT!SO@iRqOhjfu8i`ki9gN2ez{2*G%ScL@Of}0O ziK4|;<-7VHt#KeR-=d)4o`w*~0H_4YK5->Cg5yrL-%Lx4Zs?eMPrEYSwzv?mV3ukRx7|UFhZ@q{&gKc1P}_voQJ$s zMqA0f?mLc#jtj(3N>reg`%Ang7iT=gg|Qea;Mxip3^2`xIbsE|$rG^x092~tFb3F{ zdaf9cFm@b8AYp=sn1Z`U+n8>uZ4n0G*_Qn$>!hYpmYv?1NYH>RM}C85E-Lh?Pp_Du z{nyt(P9UY}!RY*mYmObSq@>%4VYTXYtL;Z?dQn36N z{Xm-|O`cnSsFfXs`*Q=9sWH7?QvkjS<42!(gWkL-xfcZ<4>1T~n|HDPK`t0*9?@1; zg)0@{A{X;JH7r6jEmpCKwFcZuQFg#n8c^q$tuc{P8SN^7_H_elJE1yansW>ctGoh& zj;7^lh}EYMxB@{Y6n3b?aTRDRCPE8CQ5>*FrqT2=zKhnc>4m`}cAgo8pd|?H5?L)4 zGMQ*$FzN=n_kk)`OoTP=bOLiLtHMwnmT4ZL9S?bLnf|&|sPzyfsy!I)P$fXm{n}Uc zF6^*%-%wr5|ngaXiVJJngqWgWIpzt?!&-oP(mmqJUZ_i+6`j} zqzQlsgbRzPx47dKdX2;t%(8AbrQ={h+J) z{{UXmFdpK)iOYc%v9 zh-k4v(PvN0v9+%j2g8^VHT{d{-d(1PVAm-GGAP>7d}cNmca3v$kfN976u^yOaVm;C zz>F+~?jVUzMQh0B<$n>!iCF^OuH#i2TddSo^Bl(w7Orz#DPa17R8OH%K97P8#9Foo z2r!A$3f8BZBNX*qR1?ylSr2%12+EaK$MF9Eajd~^ zB*#;ws(&X=C2OE-;s^E8h;FTD{@{T@i!Y4S$0+zP($g{JtASN_zB!FRy5PFPjT)ZS z7%Pb4;8Z-a#yEnR78=U~-%~>IMDaidcd2ETw=(xiv{wV{Lsz}9P6F^s&&&*mym13m zH}3|8!POTEQh|NuqZ!0?KJJWMiy;xDZHgqOr3nT1^gf#DUaWJ`uHROfOm&ycxgofi zm}V3zBYBL)K9Rk0Y7qcKi+vR@N1s8jbJ18LWR*6bkoqnMMd_vVX(nSFMAY|{iCqZg z<5G*f979@wF`~T1Wz5&2qO3H8n1B##qke_HfX}F0UOJ?L zqvzJ-VfbS!QRwOgM`K*SQ3;7r=c5xv@AX8TlEX|5|;M; zmZR^OlwBq_n8ctNy{r69s(K^emP_2wqU| zW{{cUbu7yb40_ZQ8pO;nuQ37&TX7=d#lNIz`*j|xn&$4Oqg34T#=RBOFKPWoc9@uz z6A)TEuhjCGu9pFo7hcgtoVL}!VkM|tCTfjA4{+oz-^?f@fM&6yA9hrgR!a6OQBs$3 zZ@b=LbYka$#-K4AXBn%F0SiXCwy)k4Q;#yTIQvZ5dT5Vm77vAv)7m?isD*k{(lhCO zPfGOEv}rBcRMe~r=#s&4c}H_Duv8#kp)dvMOjU}QW-&r0G>xMQdJ!ctK8f4X71Kl) z>_S(fqrwKQ@^m%Qx;l?F=4{6AT{wj1DmTo@ONQWE_UT{u#G?naKgcDvY%Ase0Lb4f zMRCGV0tYtQ!I&b6;C1olcA+E1tv)97My_K>(B@E-EMuRrK@Hf3p6CW`_vf)QkNvh$ ze-Fg-%`Ce61n1^%Rw6emK8Mp;kD(FgwEn4~ja)1mFX1I(X ztL+@btgI!76+94x&lzPzwM&|cE+B#=fg^~?QBhVmQTk~Ty+ZxH15)!2x+eM0qPiO* zFSFG((xa&RXXPbgca^Zl{U=l3n2nBAT(6@D!7qB;ug zh}}23e=puGT0G_KcZQF1{mg+|XA0W2FXVow-XEv#v-`gXXmkGnGZS^(hxX1sI&%6G z(E68L7Z-?ntWIhHs;W}JRBx6&QlN}W)DsbCSk8lx0hr-0aThX}fy}d|Qa}esWro>{ z3zE3rB_x(NHHxpL`iUL&sZp!wY?bNOWP8hpr}Gn-dM;>y`#-6~tCe*tqBrveXXp0~ z!2ZA3Y4J4sf3vs5QnL1xju+v*vi?zH!4zE3Jf{a~LYLUb9Lrj?D*WnH|7Cb+16m3m>E(ID-H!c!()UyMS9S zjX^YB=GZ%6USou?ikYcQxXP~Hn~OxHHcO@@+u1j;+9Q`|PZZFQs?rdGa*KTeCh-wE zPQn2IK?F;St;I2I^{3TIX=n*h53$je>C$8Fy$+P-S3sfRmFcNaO`hZRDjhB{gL#hJ zia!J=G1lIHRTj!SW7vY?5xRRqS|PmrPCpOT{{T}$)ogpiuu_@($}Iv_<2cB)+?Ah! z7Uh?J;a~t2tm*JeanbytSzrDHqYC5sdr$cGAYgni-d6r2zn+A|PK-=MdfFJZ&H^0w zl-Mg&YCaVC?oF66gqJIFjatiq#SOsufMKa@R%J{uiX9SEI7&jH0gN(4Uq&u!3xrZJ zvZ`Q``E0yZ>t8|ofh(fLfuFQY%Jm*PV{@5sW#Td5iIkX?(5{XS-~MHbsl;4)=~|T+ z3;{OX;$&Kl4H`?2EV6)a3-Z_X05oU)LzjI1@MfIA!ad&R~0a+|LQ*tj&V)5CGfyoAR6(e2=gzxjw4`IOg8`YFOj?6`@ccKb?M zHNbAWzzV;y7T6BP5)u?=n6^wp*e)kQ^2P!!$iN)>X9@_5Y%<_HMh8$;0Q*sYCYv08zC(5rqtZe(Mne(8c}W1KjjL6FdI^uuW;N=$dM~ zehI35p{JURsyjcHJA7VyPD9D~KGO|Z$K>{zCD!l?9!I?w8n@)~{wMT4#NqCB-gEXM zQECBIaDHKyR8Zx)Wsq@^c=nl*P{Bq!R0M%?Wi^?KjAZRa+Y#-RxMr&5`l!lg<*E~A62z80OBBF5g>?*wXo~z}{37!gQHiin z#4_HFI#wkzzJhw6MM{Axx?EX(Dpy>|iiYLt9C|mO-{|etKyQ9JbJq1Psv+o_CunXP z8H~mYG+yT~nRtF;G^R%X0Lb&6@!OvN0I8C^e?-NHdj9}plj9#OT(5omVi^wwdlxtG z=gN-9$@V7!;CL^C1a{h^o7nc86{9EK*wq=M_kv9=2XC}i zH+tYp1xG5^=1{;41XCmCU;tIAP9b_At#){HNqTD32$dW##$D`H+(ru(dMpCZh`3z4 zKw^zT>bRNX#HGe&S&WF4O^Iz_AlXnVKoUeqx6+X_J>`}3T*ud49>@r!xW0p<6tO0x zKaWG7Xn#@HUAodd!%^APC)h(@5Qg12ou}YGOz-U-PSYy(lt=oUFl8x^$$)HxuCeFA1@vVH4gSFK@=nILaC$4Dcge5$)Ut8v}mCP%6!SKe!b^Ex(As+bvD_iu@oz z{E!u8J#Oy3qtl`6Hp~G7dqIrblA9G~UBK#I391K8?7 zDR?CY;s--!cjg>HXAq*E6}~E=k8FEYL~5;LBlC%3tONFpM(KP@LTd7rivA;e+Qf(2 zCcscvSJL#ttT4iRLSl-6v&31O2(Ue~3v!8JyS02>z=!Ly!fs&G0ZAgjh9YmxbWNFcQr0)OpA$`&P6tPxWMhzrv8yDt$H82AqltWQFt@IFfc%5pkff- zHr6F-T(o)gE&$$b=6#Q}uRBl|Z)#0qG@v5os-@#%0@#Es*X(a`7F51DSXzPAq(YVy z2u181=28L`lo_%LiuI-=8_waE$_^$5uevlz^B5{U z)bk^h)Ci-;RVf4;N&f&ArAn32=~2>q%E7YI3q@)_8xVZd6D5qlxtszG>2#K=m`g1J zQNtYts~$!O1q!5+TMy~>YGOQ6oGY-da2F1+bi}!;W+|V~DS2NY>7_wuk4Z#y1tbHRM zC^jU-+N#?9u3)%bw&#`$B8n0#;xfH_HIGK_>-I~*o)rr9n2pw7+<12NyYmPf5K(V} z1(h-%WQfRG?y(l!vi(P+pZO|mKIcTTW1xFXc^S!Q_B+mQ&~Lt#2{n}|0uY2N30>t| zTkZb<*y?2O2k{(6SbRWpvr>Uk2%xn$D`z4N#J1++-eFam<~t`5HMJTlOyW4^X09Wa zEWAsLArA2Za|q!AyMuEv5OV~6vFT;Z^|oBLT)BNOpe#vIE7mZ2AM@KcSIi+->DO27 zCYubv9MoOL^B)Uj3eI9rdrlyXF#*>zAbiwd$^((+B92H@x#as_UgQJqKZi+Qbv0{{ZV!^mL=NEYzd4@Dsv|@QQIz zJ#II(5~+xTM+_PbH5j)1%1|KGRril*-dJid0}@|SpQhKShppjXZNakfhQ^_SDg#*E zMjN+3z9mpb6xGBaz)|jhakn}y&dfzX3NwJtU~2$0E&IWMpba_g?J%BlCRIBFP`wJm z6j`e{xD|jEgcg3$zM?QPR7??7&$0&FfpCz`mR--xdqX2k6)25Bvsr60%z#&u6{w14 zo08lS4O+(zC7`>k9LB=vR${Wt&DLoCW8@=ZQ`KS%+UPs6&{TG>Jrks==v}pxSj}zse1~S5-HErqpRs* zFRf3Gq+4yqwo6EoxcjC~8&1XIR&lg%BtSOE-Bh-~jrp=;=&kP;43&s)?G)^Qm7Pn+ zD6&>{9$6KmTtS@`7R|%6Kmo>w`I*2RJkk- z6EnWyRxu@_`i79$nA8r8qWj&%w^CGVTiig~G&Mpu#Lpi<4KS3NtsBCJv>*Xylyt&Y zJR8gk6a@u*rIP;uBw%&R@Fd)>QJ^N+4`$<%1Px?X=-wlt+m{ps6lxRXvzlOAuQ1># zp#d@)`G^!n5Uao~(QsRArWEfRynW-3orZ$HEyl)73UIA^^c=LUiVk}m%64f@=RP;Y zHb@0;lP`>7co@(QKwcR^L41*EFrmLC#I;NbhoQLOR$C zE)!#hNBfB1x6Wq#OV1H3fS0Kt+81^C=w+f| zh!=$1O<=&R#o~>|{ykEKsZa2TB96?Ep-wG?Ww3XfY&3JIF%Sq2Ff@4Qsep2Z0>yt2 zuSMkEQ;)k2i-Y-tCdxGnR|#yYTBj>-gXVlt1rX?nh9(TzTH^2hT*Of zS$6i=xK*iHj)R3tVCG+FLHEnzDng@G2x~Ynflxfu;EPcuZlz}M$3@GjE>kq*%AX%dA1dfxGx`jO)`Cm5kbnZ z%6dk28>YJ+ljT&kyh9RIhJ(Cl^gIhFgZsz$3Bj~{ZUvO3h_m5{s8ncAO*=kJsFfRW9FmJWd);eBIas~3zfqV!0?wG3oQHQznEce=W~|+(OD~B?e~?DJfPLzc(f2z0LNjC zu&dZ;T`EHJh&8hTXb@HARA%8MD^I&I*b7T(fK1_LHVrA>Hx^+};Mp_3kG54=cj)jPeTNZp?vW2Pp@OFg5|q64)Z7CN#Q ze`qUMRhK+WF$#(~c#LA0ijDisfB;+a@hDVc#O0T@am)9Yptjl-2lz^lNO-(N#TC?T zou*Z!K4LBfSIo0l3p)`j>e1SG3F5$;1OZ7FfI1Sft|DtTZT|qxc^u({l&*D4t9gY- za*0=W4%=0OzxHKOK<++a6`hXb2_Uqr`$i_pFDf0MD$|~TXJ!6z7V6+iHKS8G{exGV-^8_65H~@L`?A2G zgT1b59>W|&5H7RdF*Slsu1kI35EWye0RAAr0l=i9#%kM)WeTVZcXjxbvH<`VEcvL* z9XV?4#p5tna4>T%_P*09Q3rOEeeeaaaZ$87*jvNA1XFGCk+aP zQ+ER@Suci)i6nk^<~0LwFBb)v^>5h{`xebUAS|oW39bxQU?TFNFwUIRM17Lakx5N< zz(0a(=LEnO;w*G{V>#iP!o}2n^xfBwajJ#;L zSO8MjO+qZr>C^%5XdSzTH8i#6S@c%6`$v?jJh8k-tfuL>z*i7lAy<$wlL6kXxCp5S zXKR+kjJfa|baN|<;`j&2VOsL%^R zNrW5ra39QZf!$n|e+YDeNSAbiuW_*fLf#b5+F2gpS}MA!oyZth@WN7YHdxV2aHg`g z;`7=K>2h9<^P6|6sO{31U*1Ga5<0GOQ)<-ao6j)7RJhQ$Gu z+TbBz<|_u_$X%5xZtZ*;kFmuUj}siB0owln_9E8tuNQ2)7ijy(N)-WZKIDHXWz(HX zDT+EfDF_adqjV~L$e%e3_YgmpJ0EY%T7h(X0wU=&0?UJb#3G^aEuuez9`N}U+nSf* zxrjS~R-3(QXyR=#)CH^WvI(R6|+*cvp9ndoB)Rh9UWRq&^VOiAwjD_o#Z^phsk2t4$*`U zBclk`8SZ>TfE6D8B|6PjOzIq$a;wW2W;8LlGkIk>S&B@n%rlG^Gfjl~VX?p(;KXn_ z!?&jWcMbHY%7;h(4fP*AFF5G4GTdTcLFmwt;luA10?4t3#K(A=IVe@t_=jT)vi{C{KJao=4ccEg@iFGy($aM%aDu-w7_03?;-9c$>;1l-T@7@JF9T84!y;f`OYar#H-xdnFm zB)G8YeJi8sB}(gG@R>3w2~g%Qx(bGe;moUb){L-fh^c=t2wrd=>HJH8?`U0z-Y?ps zjs_;(4YfRMk(om;bc-byWMET(NkN({qF}TT;r5SJ>Mr`fl%PoAGgq3&X{#h74Dmor zO8s0eXEBioT1_da8+c;C#xrKpt1_7FhZ~;3tkiWR6|Am|KrJJ8C<=bl2)|3YVT;Qf zZ{>MDi7V7g&+2LtrsZ_0UY1vmi7Ty2m*}t7iv*%-Nqj&Vu?D^0YL!CkQL2g`wn~nY z;|XpSQonq*ECXd^f{dSMRS<#9#vs^K#cKpP&z?-&whq0MD`2LzL(Cx! z4Jzvasf}^N2Ye7{kb+sw6fHM@>Vqu}c%`HLSveCp_Kl0#U3#|xV=^jul?c0GcnLzhkI^OigQdgt z)egMJ^bD?#=`ZQ3N3_P3;@lF>THk!&mx3u(J440*TY|FFd5e}>)mJj6Sqx%|`^{v=`78RCOspQ{uVX`H<+!n3 zUE7=f=2>=!-r^}GHUzBxBDf?yz!c}i9wapZSC*Xa2SpB?l`8vO3<9GY#wHkKA$NS9 zV_VrcJB4AseIYnb|%F$nrE zt@OX3G{V6_!yKE4mm`(7Q^as7Pm1oDd073?Yf|@FY_j?+ulVEoYnJ+reH;C7GNV*? z7?#sUEoBDSEtu)(U)oVD{0l%5CYb4#lu{kT5wa%Y%a_E<0yqBv81!H0^%ew39S*nX zti>VG=%F6uM8sM8XAFu6bg;U3fk6sjtC=-+B`E{&2lW}Cw>euddBx@^7FDDnMHQUZ zVSj|UQM^o4agH=9Bwe6eCFAC=XKo{fE75Y(l=E=cMF~k{HTwGKeR_9-KDP*idWE<# z42jHSH!3-}3c7?w5psg&Sg5ej!4q=zTtk^iHHbY*(dGqSA(9GzNNxy0X;&()hOq*Y z)OJ_*E;WRH#l$;z_AQ#I%HS3kb17XpYclc>e1lKKTa^H}xn!`?McWe45$`HB8)29@mkANg#qn`dOvquBoH0?2ETy|7 zpqLZHLZwUn8P}o24A@}d0x6N?-ZS`$^%xI!nDW;GX4{Qs7k67)shtzS{{Y!ZTWr0{ zZo%BKg1jw9x5BJeBDq}OBt|<6^{tFsgEqjpsEE>a#8x!c9+e{8{xcpOCFvbB>&Y_# zqS`KxJwUf(WmN_8%T}cn;jSVn1((BW{KD>YgsW8nUMVme)FLq0%B)%Th7$U_IvS)K zLs2E7>O9t9jQ1Faio~*(V>OYhRXv$Og%!$R4i;wRuRw_%Ms*0${Gm4)0AyfVU&}G0 z3T+(R0DfZH()))jR-W**1t>-$Z@j)3tie|JLbFr@6^t8U72#6`vKV1nglUo<=!86y zzcV2W^C$(3acx66tBJNE6F_@PU;|_;**hr0;g#~wbgPIJw&D@vA=^5>wg@p1WzIiM zdtnSCLFz=`rAdVuV~P$V2_=9Q43Z0=rFK=a03vqrDy$~)6w7k?1%K=>Hv@|ud zD}2zrO#nE+#bnRCPy<4_s=V>CH$3}IfmfqAL1x}cRz|+-e1ypy6s78+R@@CvQhxQ&G zCwIoGmfP%EUU?w~iMT*@wqo|tfL4cnK}6xXM8)j@588^+ue7KId_a`v;#Ca7C|n@Z zKwKi*6UB{~DgdLQG4%c?ezyqzlv5t;xEXs?wI}RK+bQJC6a|Ye1y*n&0X-7(OUfWn zhE_pGWOo&Gx?1cX%*{0_l!9!hx+3@Jyv$<^cR{?ST{bsfK?vW!X=(aNK+(yV1_fcStwI#Mx>{_$-}sJN>J{L7l2 z7y+X`VwNj)@`yff5a?_K;0>P?OwBDdHd2w^ZxeR+zE7B{+na^}Hms)ope@K)R=1q| zLzxR$xfyc^9)$~|dX79cN?#OpD>F*B#JDxwi6D@fZu|AC80?n%1SvpjyQl6wGdM~2SnR4a&9{&Jrs#aN~*X})w<_e)jEZt>%#6eEckd)wj zOJ%}<_P^q0W{r))g2((Q&m4{jH#YN>9zYt-onc`69k1Q~S@WjQ{(H=489bdLu<_OEL zoK()0wT8MNZqX=>qySddvkWS)d$?JE3N95*f8^4SYPoE+_{7V0zVTJJ>f2JvoRZkG z$$E<{i>PW}>8=mxFQW7wx0u7}@1yH}iRc)CIVHvN<{@86nQ*!z!jto8+_bh_xqqm& zBQqI}(~ZlQn70Lim{tCmm)8FPLvi$6zL=LTAcJvd5cD3m(M$$cTwX6)@DQfR085qZQ!5 zj*^qhV?O_ zcbHHNEtu4XKG7sV93z{cQQn{+Rw?HbNr`^>>2m&|E?g!36QL|>Wl$w9xt4+nw=(UH z?rxQ1%o!ReAr!mVWH8K1$I;qee?nS`86S8ik?L$m4(U&6=1Yi)mpn_27`nJ&?UWlr zkT@r`<4y#$1}0ccX=ena(X|rSET*T3GS!ZNlB)Uu)E%jwsd6*~VCi0(==x}0&`JTK z705Ij+!R#WrVl97!!*j>aV^AhfcmeF(QSlP4rXMhys6o07Lo9%B`9lw=^li>s2NYZ z5j_Blptz{zSezXGVT-mL28Z+1mo}utZ1|cvQ<3(l#DZNT_E<|7rnKg{)L?Gwg}aA7 z()@u9dv6W6)N+oAw6|?507?g{+^UAI+Np}NQUIi}9Wae8?@WE-5D92b_`g<9!tOkTF!s>=F~QiZIwb;+Vx@$6Kg0w?e)LmX5DYJA8h9)$vni+C+PlNED!^DJT}A-{!JvjHvjMu}^ANK~yoyif zF*C@Ah^y2%tFLHvrpV#@LtjJ#-TScs10%#c7FLe(>qW?TjuVt6#Sv7SnkBV}MFM+D zyVjtuK~drmZ!qCF@ha_f6qfh&aR>AkMEFlUGpHm1smzCpGlUJ*i~??@1|u~rcLp4? zqjH2&qbgZZdYgbl2P`(=c8r3gPMSN*AqaZ`Y~8~0_spOSfXvS~;#qS5GUb@6Ip<7e zWOKnTpp{SFUj((8VO&OJ(9`UJt`z<5RTr;tS~!2dXna!wQ~Zn2#RBfv;#^Ue;?rYlO8>*4AD8$L7gtFM*EbeWQsLLh{p0F{Tyy zz&*Uh$*fu%8n^%eP-ux*ydrCOh)NN`O~X3HL=4K^b8wd&=o-CZR^A~_hOXj8n**is z6LJj!%6W$xugT$y?~MLOS#Q8t|b^Qj)O%dQ@S7p)`L;VmbEYt!^8kF z2jn}xmb7IWwvo+8tu5o= zXe-zNifW7ZaIg>}Qai@}&}y;L(Q4p-n7+`h%U1j1Aqd8sG=)Zj19Prt+{*3Jp`FT3zK9w%00&*y5dx*&Bb~Rk zODfa0p~~l$U8p=tDb-X#R@dk|fn-Q(TnHK=2GE**Ke)m{7SuTNC~&IZ2>$?5y+Ewj z6_^3Bz^AlKrK=dmSRMPV{{RxO0dyma+z&heRkm&~GXdS4%B+E6U0|!Muw!tIcR@WH zE^S&?svS%tR6ffW8tfN!nkB*>2E;|img%hsiSfXu(BBhNrqiE>O!3QNT*6fH`WKr)qxmF|vZ zp^EZqSmuK~b#Vkj5<;2Z zc}y7tLwmvA9aBp%w-Xpr8ZQL5yto|^93wL!wcyRR#0-T_)!Wm&$5LbT1h_t9f^8U4 zKtA%7b5|cRPyl8aI`RF=*lm18Dh)<3cgZO2xl)%t!{Z?aqOF%-#J{*eNU@KM2k|d4SYtJN}RuTFTQ&6tdBCxD{ev zQBIWxcm;Gux)r!IFL+P8I6{k=L`Xzn)XIREHR=WmK>Lo;&`Iwt6uqGiO1p=6K(!iZ z2;wwna@f@{;Ju|2Q7K`Q`puZE`o+@12M=}e16`2$fQ$UB0A?fyv=^qNWvSAMtObxt zn{Xa_S5%#tqO{{0fM~vE(R;AB5wU}qH}tm#9-?Y4r+Li2nCNrT<&x#a0ak(x1;AUF zBj_`+g$>ZCQoAhN4S}_WC6fay)m$!%?GejHqcvJfz9%z+<6YG6aC8FYY8JE`qFC0> z$z#g_4l@qj)}=|+W>jf!ys5L=Ahn_~v4V*kOGE=ewop=SQ)XqXEk~$IUgOJ;c+?+=H63G^YAfDijnv^F)}pWKFVZ6g z?=6=tmo1ibSr|Pawl1Z}<`$q18IF@twQ!QMP<@~PQB46RT0QYddX zRo_tOYdAEDd<(C5Ayoz)g#K!wmsZ1->{elJkQVLmUa`2{dK5B-rT&y#8FDaq1LL!d zPVSKA>ex~@er{ddfW{*xL-D1(Ax>5iUas^xVzhCH09Q*uEeTcc=sw1h;861t+!4ep z9Kw$3gglV!?aW;vm{bdw8WA!qZspH>c%U4>q6#)mgA~hs2kDklG8^eCGX{=}mV>zS zF7@xN;tc1gd=o6lD;za54uo9!CT?v|A2Rt*zlnfS>CV|{psV*K!HO^JM3P-)HHJ5> zWUEj8mc0%4eF`aXrZS;B9KaX%isqG``RHp~^Dr#70<)P~WHTlh$U1R40{zU_9ae7R;YcJ zp~~5GQd=thqCf>#dgzm!Hr*1DN(!syR)CvRiDl9I*xLzj^46$81!oy|5C9wd3 zz}(}uU6QI&9lBOE0?{b#^oY(O^_E;g%odpUARN&jJCqD|l8|ip_1D_^mgpLXWVEsP zSSPD%=fp_@RbJ)C_E!@42WzOOD{}hU5_c038cJc7vAm^9%)z7VT&BL-D>D+bywLro z1^}>>v716ht*Axf0<0%K3WP7Wrj=T@>QLLUI_V2Jw~>txYdr@HE}zV-oF*7_ z`qwjPN9}ToVa&I9Bylw@pDYlzDdM408?8$c@^*~HvQke!yamS*cuwC;Wx`+4P?mRy za}(wm#6xNBomgBPXj<9)8}NKA5)$)pbOmfpF5Z&v{!)26J{x;M;b^ z%=N=Hkhc=&*46m98&eTkEBruP?==kC%r-3w$;!vmh)Mzt;%lH7`63koc2=AIC3q3E z2YQLD*e?qHqZ+h>+`LOeit1DWe{8{`^9q1r)-f47+8%FvxX$rP0e;g2D+;&s6@M_- z#Qw-R-!q6LvgIjh3Y-@a_nnZhzqC>o7MzLUgN$nfyi~jvk$hW3rw|mtYiL8n73inB zTU8$*_j}4CuLW1{Ffyg9DDwsqc)mJJYsxoEBj$#I(x zbTaO~A`+W-$Mpn-Y#kYB{E#UuJY4(ec0a9mDw~wGvX%f`Y)Mh2_FUS$MW){}pe|Kq%49f# zp3zt9R1_Cz3&d-Z4K)_bO2Bb0K^m+YVh}LIqR1Enhy(+PM5ED6w@a5UTya;q^?O0+ zdIqK7mSPJKJh1!AnTmDE=4XZ#Z3xI%-ZT6AL5Q7ze$#D0S1eY}oJ(WHbpW-Dz;+bC zS}NFG7eH6-2BLyo2CDSM3OGzut$)90`*=j@b;H`@liBT-X8T;sG8Y94JiVo?xAZ2G zyTY`pzzPDpY7JuOF={wC$}l5kVVhZB#8I3mZkyX27YTr32-VwOXv7dpLuqSecI^a( zw`tw)ed0+>E}FXbimj@>-lJFtm?GAp6!(`~1ksBlT)i#h@c^}!^Gn3LVB>;^+5o)* z+OA_8Lb-!PCIx|U76AQ-^ad#eXB0m%2}!I#14f{fD9hBq@fBv3aLNGyGn>H%sQ7QIL0f@V{Gg$QOVE{MPzmyVB9l>D!+dxPu1 zmxIttiji~^T|%7~GNK|8%mOd~FyD9+Q>4{ehuS>yWLQ;T`@=B7^Gg0ISeBsBV!t-Z zZyHsqxPa&_qW=JCXGgIj<_F3KH&Jkb#Ld-94Vx-Ww723LL6)m(?7^CY(OV&HS0&yh0GYcnD^RN++b*8 zSmryJCw)07V;gCR%!c7A#LnssxXnw}3z#?rEP^27P|Q=f^=^yqPCYl$;VuuP>2mSu zF!T|93IovWdrR4_hD0<!dx6Zp)Op%K>BaePJJVYFw}YqQYMp$ zh#ID|jb;aQiUF)^h@ncmUG%se0ysvJHbQxFy&O!Rh}y_1Zt8s0L9j42g)Kheao{*q zx-X6K1eoy}TP`l*lvt+Pp~u=%5|%3)Zl*8@qKkyAM7hSX;;9?rqA62Gki5-y!pukz zsLq^yqQ;Tr7G5}j41uCm_C27GC50~P57W7F{b~iQ0#S*)Bj#IRu^52h(!SwE5OPA?AOdj)@XF>vkA4H>rdZ+o7DK-WDqbG1U zU9}umA~vZhPV{dI)AKXXcOtZZXju#MfpPhwB;hk1CjS86 z)K=EHECXihSPD^Q8n59DA`B{N-Vpr?Cd7_9Z3|gX zXrZ>IV5@+ZrXzBrde_8gfyARmzn2<0y5D5)2243nqL`)Ecg#>lS7)*(YG?yY61Od|h zTcyY5I)cK4w)!kwFx=d_xq0b%^bCDOSahh$)m7@j?;khVaRViOWfM|WtphlyI@VsC zaWU<^mW;333q8g6mLfKm!6mg8fNUdl@ z#r`5BOqX)hzR*yVf-9YHg1G2z5>VA^Fi5IhMx9;TDP-`Qg2~?CO-e_Te@5XG8&(;% zEfm~1AytsYpih_ySw}MSppuyDV$L82&*YmxRmA*cW_HYA=4W*gh`%z734sCyqo>5j zs073?Vqq+n*dx+26Ski%5*kLXh#wI9#2bcD-9ggKM?B1otssyW9`y3g;$Gax2Iz_~ zk|Y8dDt?-S(6)>7juS|g)Ud9XSR!Mk=3Zdj8#*`8^zqY(T<-<~ZaZ+?8{ihyT+4^s zrTT~>0Z%Y}!)37^&+i-k{{Y#RIK(KBT@Spcvcf01TD%5XySk2MQL|(mEI2O|9KK@1 zEo!AkcXzns3hFEs4J#K{33j*u;yQr~x@yEV<&I=j3KEDosJM?7D`-$^{{U#qSE9(E zFKDkt#nB4Uy)LnH7(_V4rwHj**eT~|yGd*n%ftXE6nsl#hceRvq)A1>L@nA2Eu|%1 zC5^87R~BM6vZCy%73DmE956ExuS5Vt-r%T<^N8njaUdn3aMTPvLR1(xd7HIfqNd{; zSy^76isnkVVVP%WBW^Hd;t3jwR0&@Y6ApyGps->(5awVWdJRRtTHj0PH3!q$EFsq6 z3#pk{oI?Kq5L`EOPq_@I31OYSSYIf?Xyp$b<@&DVqXBOFHp7$!hG5s`VKjslv{xP? z(R3TzEi~^Pp$%=G;CHMn3h+jXrI)+BKWsL?eBL2}Te^oCR0s#?hRzLY0aIa6^ zawJOTRxcrKo2V1-T`%odxUSPJ>1TOBZubiEsKK^cnVCHm9u2&hP^`JCDj;TDgNVr$ zDpJb|ArnbmSS6yO;BK)f+_exM(C!GUFoxi!q8cFKbTy#Cv0%HvWIlGqLRG{KY7xY& zqtNT=yn1vP@_oHleG(aDItMtR>LlGn z3OKhJib1+AdHctp71piNvEnGz%8Z97-*_m6KJp#?qHqGUcdLD>6FepW6FvLNB&Y_J zm3~w>1}*plh$%-fxsRU!~x*YRf;7&qv)hryoPfCt3aE+Au1FKVk&DMQagz)T>XMuV&VI70d|2< zJ%Mzw@G~%QK_FNbJE#mVG0n;eI|QKZEW~)c!${b`Z6ax$vodlW>M{>J7cO74w9wnp zz$H7ns1VUiM3m8(X;}teMOxey;Q+8Nv;itgGqMe9A|cy~lnv{k0E#s>5V@p{^#o6d zCpK?U6J=CF9eV}K%&~U?FcSbaO?48AMtyDGsp~%dyi?S z_q}0;*cwar3Kgx~M!anlADaL``F0ImBZ}Qb0^Xc*Hq~!mh>%Ss^t8y;X8U=J6<`$X zP5vU+K;J|*hgO{mrSu&q1xyRy6j((Gy38yc^UVP=4R?WB9&@rNbFMH9wVv_C8LA{{ zLma?Vlt874EwnG9Qlr7~4)L0aT$zFGLfk=Y8CiP4LWMw!3L@G9ZNUxljE8BmZVAho zl5Qr9+zX_%RC^G@Q}hPDqQ-sb%jtN7*8LTUeJ)?3=MdcR3oqJUm%_Fwzq~evfyU0} z1QG~g0+`^W0wHM1(1o}qG#kfg1B=sozkEhw6-Uc)V@A`Mr)|qi#4mG?_whN|zxJio zXFPw1$~wz}*!IlHZph@w`|%H!ZO3J=-VfjzMtp={oF4c1NCvxWf`zs_kjZgO(O@W3 z{L0Up1Hj_j{w2)C+dsfEIap9-m?G-Fcn=EKr6OK-dq~v1_H5y2_5uhUtoay zunKI;ziC`yChgs4rgu;l+EmX_iw(CDyHw}1%q9&nO|pxjE!S*Lmdw|fWRA!QMSHn{ z!ik>g)OKvk#t@aM%4ZuDn3fP)LIt=*2U8JnSrE!h70U)CSrvxrB^iO23XzUMhL+G! z;FO8tfK;MCq8W1KlAYlmi|TDkpC{C=w=W$D%)CVx1YiZ*nO#@d2QkDd0er9XE?ze( zEMEo6LJuNTK!za=KRqeC$fmyVaV#ysP}AmA?n;*J{{XV_Gtid2)jW10R7q1o7NdN) zgT&BtFMOsGCSPNDah~wVpXK;r$`qV-CwdMFWp{*w6turSKluuvMUcrbpA6&Ro#n%R z#L9t1@$Cn?{F?6t^K#ZHBm|KABDz5uw||VpF{e4jtAy__44^gQX&Z_tP6dpb4Fa1S zaUVojc-=)iSEmWS_0)4Rj_`_5Yu+hRULxbyd5r{_cOBGZuHjl>=rtB92d2{TltH`i z9|vgt(6Xc2DGFAguHqGyD^Un`pd5NdItL%2K@pq=A|fT|vi%$5PkYgEdJoZI9)Lz( zh;&tV;dfo8P_s2y`&=oe*>67g3hP^WOswKi(MfN-W>%f+ybxTmwN<16KrRY$8_c3` zEZtK70C*jTKo>`Ov_IdOYOEBN+tYoEmELG2fE14P43*$N!xay@zxEeY_*4G?+2;G> z{{Ud=W&r;H6G;$qeaXR4x5%sDjR4pPV%@E+QP2c1cOYhqx&Mw!^HqE zbOo?1Qr6j|Tr4mV#084ftM`i&4)Mq>m~dVrT)}Y49|(*Mw|-?1xR&6QRX{X-G0)dQ z0wpnW$jos13AHe9B)M>9$|KO}+Fzj2Wo6OSy-f5tnYBB65W2Sl*InNknt==4u3sN} zwVpEwQkJeDNRkS{gA+6qlT~8}P)evaFqa0*)QnYWBDP)H#rtL;ffXw`M!ypL{{X&V z=U?xc+vCUY5f6p&`Ic2sqH`J4)Z$qnaYxq)rXjnAZM4 z25T)i@iR|qsf9Ey@dU3bA*pb|#pGX`mgaEggIRXV2brLL@@_X--EEG-#H5u7TGi&h z@E`!AUWCz0L(B@05H9c>GXbe_S9ZNZ&@EHUQF6D$;fH~U7Amxq1=nnLkR`CHID&k@ zCLp8%%r49y^vhahjFWxL$;*OXU(Pw71d#6$>@`0Z*i4Bm!i|6%|;q2`%OU z#0k><9Q19uSI!#r-#}ePcZ9g^UM6l(_r9BhP=4dC*fg`dy!d-SfCb&WEThl9ulR&$ zKmaPv_u45C%~jTTi&h)ZH{xK6Gum22Kvh8VacZ9)Y{foosB||jRxMfFmuBn|DtD^2 z9ae#AnI7o}fhJ8P2vo>Cc9-RW6QIi41Z6ZLwi1JzW4sd>$0SkrRzF7&SHU*L<_-IV zb3|P)j3Q&b%OxmfHF;LD-A@!{F73*>^7ZZ1@LIywat*2y>VP(`Hq@fnE9~q?Fsf*V zN~{jh?bXmfnR}9narzNd+Szvy3OC+K?Ny@G4g*Bva zNR5(@Pj9cpqr7psw;k{ay?7Fv0z2}Ns^H%MD?6q6xXjoLo&%hMU60KWH#rG;3&Ch00xjHV!6 z{{UFT%Q5XR?MpB|ge35aI&dI*Shscs!BRxp?W`5rR6S?{eWdgI6~O1tgZrqV@Ym0#y#c zFbN!UCq>YNF8fOyOENCqytPvxxD8c|Z<#<9NU_5=#Tb@k9MB_XJ7OqRS}33m7?*TjU{}Vq&t6Zo?lD zZWKh;8HE*;K{bJyrb-L}tzPbPgegViUuecGQSL>ot1P;{iUq7ni!#UpxpKgv1mKK; zZwf?OW11nZf}m|;M^;ktd_VxuR9&2)20uVQR>%Rl$`RbfBx#Jh=2X=0LG1%5>XblC zJDI^TX47-4=^01puRT_EE*>2QUqP}aUeH!;gzXPOEE{wCU;fLCULnllTs>67n5{q$ zOLq&oJa(fySMM7XUCc!szkU8==Q-E@%DOkN_F&liKcCDu*X5#J3Nnw&+>6ri4OdyK zU{GL%%XI8EKWJ49gxyYG;V9b@o@l;!g8-_aq{wq){6w)p%UChLiMlvWcSC)-g}4#H zn@4L)m9#R#=h9Cn3qB(IKeXIj&Il?nvMw0t{J(g!h%)gGI#67kS7hmSLBt+r;ly<~mSSeot}F~6*`GT|NJWWP$YU?uM zhK1dIqoLG5x(;50Dw_nwd&7e7mTR#n80~&cXb>Sv7co@v`};xLAVhSGtQPMC-;YCa z4aVW>pM9N!Bf>+47YQpdipG+`Go0Pj@5*;_#z6BKjHX zfLO*mBWSRbBYCEBb1!vmJiHM!e7^BG_5|O_{6dz+la)ka3X&}mE%}-zN^X`=Udd?( z6bA8X>Jj@Ldo14AV*nP(Xm&55)7g6^6f_hn`HMS*)>sfUd&AXiHS~^`^zKQlT&xST`K4@EnS2fQ2`l+_R-k4?k`rH!vK z_(V}|UA}-0AU>l@B|QbgY4PjIQAcQcw+0Si2fi4E$0tCSgP?HMyY+aN1~Z9J)?-Ma zu`yDGWp^^F=i&hgN1PL66A+WA}H4 z(y53HYuXv74FSLoR{JJPtO40s9vg-9Tp%eLJo8f$P#b{97F9sWZskHMmx>6#i3Zk! zyY_(QB{D%GS2-Bv=^@sm+X+y5U5!=l?DY`ia~gwxMxEn`!w`#u+jkm;%Fa5{WvFI|yG{APLBN2zWqRPG&n`0Kt|+*b zm{tM+`a@7pqIrXIx+SSVo@LAG^vJwJPaHEHF&1$-j)=v(gjgAd`UWDv3EYgkxd#zf z2I0)+CZj4ea2kQrY}E$`e&juMH^@A57MdCu=HRs@T#J0?5%}Lxi(InQb8Q}f`b%kV zzW)IFe=!o3!AFn8_M57&Z)nyAaz5XfYfO%8alp^@45zvpJ(hn#(*(awdQV6(9*9$w z!7cjq!+6Hg(b~E7=G0v)%zMqZIhNrpGb&L@eqzRW#Rg-8cw&ShG>LPTAeJ#h9O8^) zVj*yb1_1i@#eRpMw?2b|P_7Q`qLzwVfq|tTE zy6^N%&S6IoarT202hD)c`^(4qgOQeK=8t=R(Ky!k{Y!DWe$+y;D9xo@dwa&ulKU0x zz_jq!yW9GRyTGxZE{78E%Z6EOWwj9rSNjt_66u$T{`^B;(a4|xGRoY`%ku<7akt`JjF(CtEa#a{ zv_RXR<{hMF&~UE2Wg90}GVCw4H5nMlwGyDl%D82x+#S1It8n61v3g+cXZatz!IeTE z?(sagZ2tgK@oq4h_cb~BVCr$}P$d94Vn8ESt}*}{Sgqm`U1EXG*bGn>4i~&}sup&D zkQ8n;Vg@`)dDM5SX}kLZ0!m%F8l^`hXxq=>}yZPJWHD-j2P_ygeo}Ug7D!h)QsmE*(~7it!cu z@9!*_m6=V!#A1x2F0cx%z}!;EpgD^70Qpn|<5JD`<~+hK&z!~tpa-6hXo>lSZNiJt zmaRR5j!;;#~7%A!F>j~2AFqB zNo1y%sQIHq*xmh)JRLkSuMpXMbFw+zM$ zqBaG~aRhlZIN;!p(w1)%c(01?A-a%$MT+)~ke;qBsYX0R(zMRs>^_kzsQ--i1kajIgmhEhlx#yE#HH!U&U@*^1%yaF`O3firzJ+um@dbUDi!=q- zJYVe)R1ao@_an^AT>HmtKwl7Kn-%QK#%R;+e+lGcaiyW)*Hmv1Q;p zM77|RD%rGDI%ZLQq7*mU6o_M`l#v5t;vm(CCZgoHj^bZ)v<1aDs({wvhMCB%ro%1w>+@DRfp}#G{3C zkh4|hUO^Q=H0Hd)M#!q#+Y9)$%j`p@VJLHb$PrnfHZ1p5LBEDG!% z(WZ-G(M|{f$3mOIz{>$^ya=flP_=U$qYIh4iH=}*89_+M5`URi_q9Uce1VA~Tkw0}GTc5+zhqO1*3Spz8`Ooh-Mjnsx4fK~!ysb_? zCeyq~BHxkw%tRI_=9zsVa%=X9VwA^nGBXu9cYPF3%{0RY^*SYOa^zV)yy#AsJ&4u_pyn6=GWne5BDSxqZce-!;DMh z>}dQ)szGh6Gwx45b45o7Kr6_I>y(U{IbFY)^hi4NI-3u0bgb?R_#i1_ zTWGmv$w8>ptVJS{AgSSredq_yOr18sQxORadJTOyaOdf|=ycPkFk6nFew#4S(wdF$ GKmXb0$rF75 literal 0 HcmV?d00001 diff --git a/tests/test-arrayaccess.php b/tests/test-arrayaccess.php new file mode 100644 index 0000000..d95c597 --- /dev/null +++ b/tests/test-arrayaccess.php @@ -0,0 +1,33 @@ + __FUNCTION__ ), array( 'test' => __FUNCTION__ ) ); + $this->assertEquals( __FUNCTION__, $image_tag['id'] ); + $this->assertEquals( __FUNCTION__, $image_tag['test'] ); + $this->assertNull( $image_tag['tester'] ); + } + + function test_isset() { + $image_tag = new Image_Tag( array( 'id' => __FUNCTION__ ) ); + $this->assertTrue( isset( $image_tag['id'] ) ); + $this->assertFalse( isset( $image_tag['ids'] ) ); + } + + function test_set() { + $img = new Image_Tag( array( 'id' => __FUNCTION__ ) ); + $img['id'] = uniqid(); + + $this->assertNotEquals( __FUNCTION__, $img['id'] ); + } + + function test_unset() { + $img = new Image_Tag( array( 'id' => __FUNCTION__ ) ); + unset( $img['id'] ); + + $this->assertNotEquals( __FUNCTION__, $img['id'] ); + $this->assertEmpty( $img['id'] ); + } + +} diff --git a/tests/test-attributes.php b/tests/test-attributes.php new file mode 100644 index 0000000..0da8611 --- /dev/null +++ b/tests/test-attributes.php @@ -0,0 +1,57 @@ + __FUNCTION__, + 'class' => __FUNCTION__, + 'srcset' => 'https://picsum.photos/400/300 400w', + 'sizes' => '100vw', + 'style' => $styles, + ) ); + + $this->assertEquals( __FUNCTION__, $image_tag['id'] ); + $this->assertEquals( __FUNCTION__, $image_tag->get_attribute( 'class' ) ); + $this->assertEquals( $styles, $image_tag->get_attribute( 'style' ) ); + } + + function test_get_attributes() { + $attributes = array( 'id' => __FUNCTION__ ); + $image_tag = new Image_Tag( $attributes ); + $this->assertEquals( $attributes, $image_tag->get_attributes() ); + $this->assertEquals( __FUNCTION__, $image_tag->id ); + } + + function test_add_to_attribute_array() { + $attributes = array( 'id' => __FUNCTION__ ); + $image_tag = new Image_Tag( $attributes ); + + $image_tag->add_class( __FUNCTION__ ); + $attributes['class'] = implode( ' ', array( __FUNCTION__ ) ); + $this->assertEquals( $attributes, $image_tag->get_attributes() ); + + $image_tag->add_size( '100vw' ); + $attributes['sizes'] = implode( ', ', array( '100vw' ) ); + $this->assertEquals( $attributes, $image_tag->get_attributes() ); + + $image_tag->add_srcset( 'https://picsum.photos/400/300 400w' ); + $attributes['srcset'] = implode( ', ', array( 'https://picsum.photos/400/300 400w' ) ); + $this->assertEquals( $attributes, $image_tag->get_attributes() ); + + $image_tag->add_style( 'width: auto' ); + $attributes['style'] = implode( '; ', array( 'width: auto' ) ); + $this->assertEquals( $attributes, $image_tag->get_attributes() ); + } + + function test_remove_from_attribute_array() { + $img = new Image_Tag( array( 'class' => 'remove' ) ); + $this->assertEquals( 'remove', $img->get_attribute( 'class' ) ); + + $img->remove_class( 'remove' ); + $this->assertEmpty( $img->get_attribute( 'class' ) ); + } + +} diff --git a/tests/test-external.php b/tests/test-external.php new file mode 100644 index 0000000..b8b4e51 --- /dev/null +++ b/tests/test-external.php @@ -0,0 +1,114 @@ +assertEquals( $src, $img->get_attribute( 'src' ) ); + } + + /** + * @group http + */ + function test_http_cache() { + $src = 'https://picsum.photos/400/300'; + $img = Image_Tag::create( $src ); + + $this->assertEquals( $img->http(), $img->http() ); + } + + /** + * @group _placeholder + * @group picsum + */ + function test_picsum() { + $src = 'https://picsum.photos/400/300'; + $img = Image_Tag::create( $src ); + + $this->assertInstanceOf( 'Image_Tag_Picsum', $img->picsum() ); + } + + /** + * @group _placeholder + * @group placeholder + */ + function test_placeholder() { + $src = 'https://picsum.photos/400/300'; + $img = Image_Tag::create( $src ); + + $this->assertInstanceOf( 'Image_Tag_Placeholder', $img->placeholder() ); + } + + /** + * @group _placeholder + * @group joeschmoe + */ + function test_joeschmoe() { + $src = 'https://picsum.photos/400/300'; + $img = Image_Tag::create( $src ); + + $this->assertInstanceOf( 'Image_Tag_JoeSchmoe', $img->joeschmoe() ); + } + + /** + * @group _placeholder + * @group unsplash + */ + function test_unsplash() { + $src = 'https://picsum.photos/400/300'; + $img = Image_Tag::create( $src ); + + $this->assertInstanceOf( 'Image_Tag_Unsplash', $img->unsplash() ); + } + + function test_lazyload() { + $src = 'https://picsum.photos/400/300'; + + $img = Image_Tag::create( $src, array( + 'id' => 'tester', + 'width' => 400, + 'height' => 300, + ) ); + + $lazyload = $img->lazyload( array( + 'id' => 'tester-lazyload', + ) ); + + $this->assertEquals( $img->get_attribute( 'width' ), $lazyload->get_attribute( 'width' ) ); + $this->assertNotEquals( $img->get_attribute( 'id' ), $lazyload->get_attribute( 'id' ) ); + $this->assertEquals( $img->get_attribute( 'src' ), $lazyload->get_attribute( 'data-src' ) ); + } + + function test_ratio() { + $src = 'https://picsum.photos/400/300'; + + $img = Image_Tag::create( $src ); + + $this->assertNull( $img->get_ratio() ); + + $img->set_attribute( 'width', '100' ); + $img->set_attribute( 'height', '200' ); + + $this->assertEquals( 2, $img->get_ratio() ); + } + + function test_type() { + $src = 'https://picsum.photos/400/300'; + $img = Image_Tag::create( $src ); + + $this->assertTrue( $img->is_type( 'remote' ) ); + $this->assertTrue( $img->is_type( 'external' ) ); + + $this->assertFalse( $img->is_type( '__placeholder' ) ); + $this->assertFalse( $img->is_type( 'unrecognized type' ) ); + } + + function test_valid() { + $src = 'https://picsum.photos/400/300'; + $img = Image_Tag::create( $src ); + + $this->assertTrue( $img->is_valid() ); + } + +} diff --git a/tests/test-features.php b/tests/test-features.php new file mode 100644 index 0000000..320119a --- /dev/null +++ b/tests/test-features.php @@ -0,0 +1,25 @@ + 200 ) ); + + $nojs = $img->noscript(); + $nojs_string = $nojs->__toString(); + + $this->assertEquals( $img->get_attribute( 'src' ), $nojs->get_attribute( 'src' ) ); + + $this->assertEquals( '', $nojs->get_setting( 'after_output' ) ); + $this->assertContains( '', $nojs_string ); + + $this->assertContains( 'no-js', $nojs->get_attribute( 'class' ) ); + $this->assertContains( 'no-js', $nojs_string ); + } + +} diff --git a/tests/test-joeschmoe.php b/tests/test-joeschmoe.php new file mode 100644 index 0000000..9cb8295 --- /dev/null +++ b/tests/test-joeschmoe.php @@ -0,0 +1,67 @@ +assertEquals( 'https://joeschmoe.io/api/v1/', Image_Tag_JoeSchmoe::BASE_URL ); + $this->assertContains( Image_Tag_JoeSchmoe::BASE_URL, $img->get_attribute( 'src' ) ); + } + + function test_gender_setting() { + $img = Image_Tag::create( 'joeschmoe' ); + $this->assertNull( $img->get_setting( 'gender' ) ); + + $img->set_setting( 'gender', 'non-binary' ); + $this->assertNull( $img->get_setting( 'gender' ) ); + + $possible = array( + 'male', + 'female', + ); + $test = $possible[ array_rand( $possible ) ]; + + $img->set_setting( 'gender', $test ); + + $this->assertEquals( $test, $img->get_setting( 'gender' ) ); + $this->assertContains( '/' . $test . '/', $img->get_attribute( 'src' ) ); + } + + function test_seed_setting() { + $img = Image_Tag::create( 'joeschmoe', array(), array( 'seed' => __FUNCTION__ ) ); + + $this->assertEquals( __FUNCTION__, $img->get_setting( 'seed' ) ); + $this->assertContains( __FUNCTION__, $img->get_attribute( 'src' ) ); + } + + function test_type() { + $img = Image_Tag::create( 'joeschmoe' ); + + $this->assertTrue( $img->is_type( 'joeschmoe' ) ); + } + + function test_valid() { + $img = Image_Tag::create( 'joeschmoe' ); + + $this->assertTrue( $img->is_valid() ); + } + + function test_ratio() { + $img = Image_Tag::create( 'joeschmoe' ); + + $this->assertEquals( 1, $img->get_ratio() ); + } + + function test_joeschmoe() { + $img = Image_Tag::create( 'joeschmoe' ); + + $this->assertEquals( $img, $img->joeschmoe() ); + } + +} \ No newline at end of file diff --git a/tests/test-picsum.php b/tests/test-picsum.php new file mode 100644 index 0000000..7237984 --- /dev/null +++ b/tests/test-picsum.php @@ -0,0 +1,402 @@ +assertEquals( 'https://picsum.photos/', Image_Tag_Picsum::BASE_URL ); + $this->assertEquals( untrailingslashit( Image_Tag_Picsum::BASE_URL ), $img->get_attribute( 'src' ) ); + } + + function test_src_attribute() { + $img = Image_Tag::create( 'picsum' ); + $this->assertEquals( untrailingslashit( Image_Tag_Picsum::BASE_URL ), $img->get_attribute( 'src' ) ); + } + + function test_blur_setting() { + $img = Image_Tag::create( 'picsum', array(), array( + 'blur' => true, + ) ); + + $this->assertEquals( 10, $img->get_setting( 'blur' ) ); + $this->assertContains( 'blur=10', $img->get_attribute( 'src' ) ); + $this->assertNotContains( 'blur=10', remove_query_arg( 'blur', $img->get_attribute( 'src' ) ) ); + + $img = Image_Tag::create( 'picsum', array(), array( + 'blur' => 5, + ) ); + + $this->assertEquals( 5, $img->get_setting( 'blur' ) ); + $this->assertContains( 'blur=5', $img->get_attribute( 'src' ) ); + $this->assertNotContains( 'blur=5', remove_query_arg( 'blur', $img->get_attribute( 'src' ) ) ); + } + + /** + * @group http + */ + function test_blur_http() { + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 200, + 'blur' => true, + ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $img->http(), 'content-type' ) ); + } + + function test_seed_setting() { + $img = Image_Tag::create( 'picsum' ); + $this->assertNull( $img->get_setting( 'seed' ) ); + + $seed = 'a?b/c&d'; + $img = Image_Tag::create( 'picsum', array(), array( + 'seed' => $seed, + ) ); + + $seed = urlencode( sanitize_title_with_dashes( $seed ) ); + + $this->assertEquals( $seed, $img->get_setting( 'seed' ) ); + $this->assertContains( 'seed/' . $seed, $img->get_attribute( 'src' ) ); + } + + /** + * @group http + */ + function test_seed_http() { + $seed = 'c&d/a?b'; + + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 200, + 'seed' => $seed, + ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $img->http(), 'content-type' ) ); + } + + function test_width() { + $width = 200; + + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => $width, + ) ); + + $this->assertEquals( $width, $img->get_setting( 'width' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertContains( '/' . $width, $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'picsum', array( + 'width' => $width, + ) ); + + $this->assertEquals( $width, $img->get_setting( 'width' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertContains( '/' . $width, $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'picsum', array( + 'width' => $width, + ), array( + 'width' => $width * 2, + ) ); + + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertEquals( $width * 2, $img->get_setting( 'width' ) ); + $this->assertContains( '/' . ( $width * 2 ), $img->get_attribute( 'src' ) ); + $this->assertContains( 'width="' . $width . '"', $img->__toString() ); + + $img = Image_Tag::create( 'picsum' ); + $this->assertEquals( 1024, $img->get_attribute( 'width' ) ); + $this->assertEmpty( @$img->__toString() ); + } + + /** + * @group http + */ + function test_width_http() { + $width = 200; + + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => $width, + ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $img->http(), 'content-type' ) ); + } + + function test_height() { + $width = 200; + $height = 300; + + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => $width, + 'height' => $height, + ) ); + + $this->assertEquals( $width, $img->get_setting( 'width' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertEquals( $height, $img->get_setting( 'height' ) ); + $this->assertEquals( $height, $img->get_attribute( 'height' ) ); + $this->assertContains( '/' . $width . '/' . $height, $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'picsum', array( + 'width' => $width, + 'height' => $height, + ) ); + + $this->assertEquals( $width, $img->get_setting( 'width' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertEquals( $height, $img->get_setting( 'height' ) ); + $this->assertEquals( $height, $img->get_attribute( 'height' ) ); + $this->assertContains( '/' . $width . '/' . $height, $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'picsum', array( + 'width' => $width, + 'height' => $height, + ), array( + 'width' => 2 * $width, + 'height' => 2 * $height, + ) ); + + $this->assertEquals( 2 * $width, $img->get_setting( 'width' ) ); + $this->assertEquals( 2 * $height, $img->get_setting( 'height' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertEquals( $height, $img->get_attribute( 'height' ) ); + $this->assertContains( '/' . ( 2 * $width ) . '/' . ( 2 * $height ), $img->get_attribute( 'src' ) ); + $this->assertContains( 'width="' . $width . '" height="' . $height . '"', $img->__toString() ); + } + + /** + * @group http + */ + function test_height_http() { + $width = 200; + $height = 300; + + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => $width, + 'height' => $height, + ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $img->http(), 'content-type' ) ); + } + + function test_random_setting() { + $img = Image_Tag::create( 'picsum' ); + $this->assertFalse( $img->get_setting( 'random' ) ); + + $img = Image_Tag::create( 'picsum', array(), array( + 'random' => true, + 'width' => 200, + ) ); + + $img2 = Image_Tag::create( 'picsum', array(), array( + 'random' => true, + 'width' => 200, + ) ); + + $this->assertNotFalse( $img->get_setting( 'random' ) ); + $this->assertContains( 'random=', $img->get_attribute( 'src' ) ); + $this->assertNotEquals( $img->get_setting( 'random' ), $img2->get_setting( 'random' ) ); + + $img = Image_Tag::create( 'picsum', array(), array( + 'random' => 'random', + ) ); + $this->assertEquals( 'random', $img->get_setting( 'random' ) ); + } + + /** + * @group http + */ + function test_random_http() { + $img = Image_Tag::create( 'picsum', null, array( + 'random' => true, + 'width' => 200, + ) ); + + $img_id = wp_remote_retrieve_header( $img->http(), 'picsum-id' ); + + # Try a few times, because randomly generated numbers may be equal. + for ( $i = 0; $i < 3; $i++ ) { + $img2 = Image_Tag::create( 'picsum', array(), array( + 'random' => true, + 'width' => 200, + ) ); + + $img2_id = wp_remote_retrieve_header( $img2->http(), 'picsum-id' ); + + if ( $img_id !== $img2_id ) + break; + } + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $img->http(), 'content-type' ) ); + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $img2->http(), 'content-type' ) ); + $this->assertNotEquals( $img_id, $img2_id ); + } + + function test_image_id_setting() { + $img = Image_Tag::create( 'picsum' ); + $this->assertNull( $img->get_setting( 'image_id' ) ); + + $image_id = 500; + $img = Image_Tag::create( 'picsum', array(), array( + 'image_id' => $image_id, + ) ); + + $this->assertEquals( $image_id, $img->get_setting( 'image_id' ) ); + $this->assertContains( '/id/' . $image_id, $img->get_attribute( 'src' ) ); + } + + /** + * @group http + */ + function test_image_id_http() { + $image_id = 500; + + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 200, + 'image_id' => $image_id, + ) ); + + $type = wp_remote_retrieve_header( $img->http(), 'content-type' ); + $message = sprintf( '%s is a %s.', $img->get_attribute( 'src' ), $type ); + $this->assertEquals( 'image/jpeg', $type, $message ); + } + + function test_grayscale_setting() { + $img = Image_Tag::create( 'picsum' ); + $this->assertFalse( $img->get_setting( 'grayscale' ) ); + + $img = Image_Tag::create( 'picsum', array(), array( + 'grayscale' => true, + ) ); + + $this->assertTrue( $img->get_setting( 'grayscale' ) ); + $this->assertContains( 'grayscale=1', $img->get_attribute( 'src' ) ); + } + + /** + * @group http + */ + function test_grayscale_http() { + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 200, + 'grayscale' => true, + ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $img->http(), 'content-type' ) ); + } + + function test_multiple() { + $img = Image_Tag::create( 'picsum', array(), array( + 'blur' => 5, + 'seed' => __FUNCTION__, + 'width' => 400, + 'grayscale' => true, + ) ); + $this->assertEquals( '', $img->__toString() ); + + $img = Image_Tag::create( 'picsum', array(), array( + 'blur' => 2, + 'width' => 1920, + 'height' => 1080, + 'image_id' => 333, + ) ); + $this->assertEquals( '', $img->__toString() ); + } + + /** + * @group http + */ + function test_details() { + $seed = 'seed'; # Seed returns image 1081. + $image_id = 1081; + + $img = Image_Tag::create( 'picsum', array(), array( + 'image_id' => $image_id, + ) ); + + $details = ( object ) array( + 'id' => $image_id, + 'author' => 'Julien Moreau', + 'width' => 5512, + 'height' => 3708, + 'url' => 'https://unsplash.com/photos/688Fna1pwOQ', + 'download_url' => 'https://picsum.photos/id/1081/5512/3708', + ); + + $this->assertEquals( $details, $img->details() ); + $this->assertEquals( $details, $img->details() ); # Check cached value. + + # Test getting details without `image_id` setting. + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 200, + 'seed' => $seed, + ) ); + + $this->assertEquals( $details, $img->details() ); + } + + function test_picsum() { + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 200, + ) ); + + $this->assertEquals( $img, $img->picsum() ); + } + + function test_placeholder() { + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 200, + ) ); + + $this->assertInstanceOf( 'Image_Tag_Placeholder', $img->placeholder() ); + } + + function test_ratio() { + $img = Image_Tag::create( 'picsum' ); + $ratio = $img->get_height() / $img->get_width(); + + $this->assertEquals( $ratio, $img->get_ratio() ); + + $img->set_setting( 'width', 100 ); + $img->set_setting( 'height', 200 ); + + $this->assertEquals( 2, $img->get_ratio() ); + } + + function test_type() { + $img = Image_Tag::create( 'picsum' ); + + $this->assertTrue( $img->is_type( 'remote' ) ); + $this->assertTrue( $img->is_type( 'picsum' ) ); + $this->assertTrue( $img->is_type( 'external' ) ); + $this->assertTrue( $img->is_type( '__placeholder' ) ); + + $this->assertFalse( $img->is_type( 'wp' ) ); + } + + function test_valid() { + $img = Image_Tag::create( 'picsum' ); + + $this->assertTrue( $img->is_valid() ); + } + + /** + * @group http + */ + function test_lqip() { + $img = Image_Tag::create( 'picsum', array( + 'width' => 1000, + ) ); + $lqip = $img->lqip(); + + $this->assertInstanceOf( 'Image_Tag_Picsum', $lqip ); + $this->assertNotEmpty( $img->get_setting( 'image_id' ) ); + $this->assertEquals( $img->get_setting( 'image_id' ), $lqip->get_setting( 'image_id' ) ); + $this->assertEquals( 100, $lqip->get_setting( 'width' ) ); + } + +} diff --git a/tests/test-placeholder.php b/tests/test-placeholder.php new file mode 100644 index 0000000..fa84d6a --- /dev/null +++ b/tests/test-placeholder.php @@ -0,0 +1,190 @@ +assertEquals( 'https://via.placeholder.com/', Image_Tag_Placeholder::BASE_URL ); + $this->assertEquals( Image_Tag_Placeholder::BASE_URL, $img->get_attribute( 'src' ) ); + } + + function test_text_setting() { + $text = 'Test text setting'; + + $img = Image_Tag::create( 'placeholder', array(), array( + 'text' => $text, + ) ); + + $this->assertEquals( $text, $img->get_setting( 'text' ) ); + $this->assertContains( urlencode( $text ), $img->get_attribute( 'src' ) ); + } + + function test_width() { + $width = 200; + + $img = Image_Tag::create( 'placeholder', array(), array( + 'width' => $width, + ) ); + + $this->assertEquals( $width, $img->get_setting( 'width' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertContains( '/' . $width . '/', $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'placeholder', array( + 'width' => $width, + ) ); + + $this->assertEquals( $width, $img->get_setting( 'width' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertContains( '/' . $width . '/', $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'placeholder', array( + 'width' => $width, + ), array( + 'width' => $width * 2, + ) ); + + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertEquals( $width * 2, $img->get_setting( 'width' ) ); + $this->assertContains( '/' . ( $width * 2 ) . '/', $img->get_attribute( 'src' ) ); + $this->assertContains( 'width="' . $width . '"', $img->__toString() ); + + $img = Image_Tag::create( 'placeholder' ); + $this->assertNull( $img->get_attribute( 'width' ) ); + $this->assertEmpty( @$img->__toString() ); + } + + function test_height() { + $width = 200; + $height = 300; + + $img = Image_Tag::create( 'placeholder', array(), array( + 'width' => $width, + ) ); + + $this->assertEquals( $width, $img->get_attribute( 'height' ) ); + + $img = Image_Tag::create( 'placeholder', array(), array( + 'width' => $width, + 'height' => $height, + ) ); + + $this->assertEquals( $width, $img->get_setting( 'width' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertEquals( $height, $img->get_setting( 'height' ) ); + $this->assertEquals( $height, $img->get_attribute( 'height' ) ); + $this->assertContains( '/' . $width . 'x' . $height . '/', $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'placeholder', array( + 'width' => $width, + 'height' => $height, + ) ); + + $this->assertEquals( $width, $img->get_setting( 'width' ) ); + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertEquals( $height, $img->get_setting( 'height' ) ); + $this->assertEquals( $height, $img->get_attribute( 'height' ) ); + $this->assertContains( '/' . $width . 'x' . $height . '/', $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'placeholder', array( + 'width' => $width, + 'height' => $height, + ), array( + 'width' => 2 * $width, + 'height' => 2 * $height, + ) ); + + $this->assertEquals( $width, $img->get_attribute( 'width' ) ); + $this->assertEquals( $width * 2, $img->get_setting( 'width' ) ); + $this->assertEquals( $height, $img->get_attribute( 'height' ) ); + $this->assertEquals( $height * 2, $img->get_setting( 'height' ) ); + $this->assertContains( '/' . ( 2 * $width ) . 'x' . ( 2 * $height ) . '/', $img->get_attribute( 'src' ) ); + $this->assertContains( 'width="' . $width . '" height="' . $height . '"', $img->__toString() ); + + $img = Image_Tag::create( 'placeholder' ); + $this->assertNull( $img->get_attribute( 'height' ) ); + } + + function test_bg_color() { + $color = '#FF0000'; + + $img = Image_Tag::create( 'placeholder', array(), array( + 'bg-color' => $color, + ) ); + + $color = str_replace( '#', '', $color ); + + $this->assertEquals( $color, $img->get_setting( 'bg-color' ) ); + $this->assertContains( '/' . urlencode( $color ) . '/', $img->get_attribute( 'src' ) ); + } + + function test_text_color() { + $bg_color = '#FF0000'; + $text_color = '#FFF'; + + $img = Image_Tag::create( 'placeholder', array(), array( + 'bg-color' => $bg_color, + 'text-color' => $text_color, + ) ); + + $text_color = str_replace( '#', '', $text_color ); + $bg_color = str_replace( '#', '', $bg_color ); + + $this->assertEquals( $bg_color, $img->get_setting( 'bg-color' ) ); + $this->assertEquals( $text_color, $img->get_setting( 'text-color' ) ); + $this->assertContains( '/' . urlencode( $bg_color ) . '/' . urlencode( $text_color ) . '/', $img->get_attribute( 'src' ) ); + } + + function test_placeholder() { + $img = Image_Tag::create( 'placeholder', array(), array( + 'width' => 200, + ) ); + + $this->assertEquals( $img, $img->placeholder() ); + } + + function test_picsum() { + $img = Image_Tag::create( 'picsum', array(), array( + 'width' => 200, + ) ); + + $this->assertInstanceOf( 'Image_Tag_Picsum', $img->picsum() ); + } + + function test_ratio() { + $img = Image_Tag::create( 'picsum' ); + + $this->assertEquals( 1, $img->get_ratio() ); + + $img->set_setting( 'width', 100 ); + $img->set_setting( 'height', 200 ); + + $this->assertEquals( 2, $img->get_ratio() ); + } + + function test_type() { + $img = Image_Tag::create( 'placeholder' ); + + $this->assertTrue( $img->is_type( 'remote' ) ); + $this->assertTrue( $img->is_type( 'external' ) ); + $this->assertTrue( $img->is_type( 'placeholder' ) ); + $this->assertTrue( $img->is_type( '__placeholder' ) ); + + $this->assertFalse( $img->is_type( 'local' ) ); + } + + function test_valid() { + $img = Image_Tag::create( 'placeholder' ); + + $this->assertTrue( $img->is_valid() ); + } + +} + +?> diff --git a/tests/test-plugin.php b/tests/test-plugin.php new file mode 100644 index 0000000..b916bc0 --- /dev/null +++ b/tests/test-plugin.php @@ -0,0 +1,29 @@ +assertEquals( $info['Name'], 'Image Tag Generator' ); + $this->assertEquals( $info['Version'], '1.0' ); + } + + function test_constants() { + $this->assertEquals( 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', Image_Tag::BLANK ); + } + + function test_wp_version() { + global $wp_version; + + $this->assertEquals( 1, version_compare( $wp_version, '5.1', '>=' ), sprintf( 'WordPress version %s has not been tested.', $wp_version ) ); + $this->assertEquals( -1, version_compare( $wp_version, '5.5', '<' ), sprintf( 'WordPress version %s has not been tested.', $wp_version ) ); + } + + function test_php_version() { + $this->assertTrue( version_compare( phpversion(), '7.4', '<' ), sprintf( 'PHP version %s has not been tested.', phpversion() ) ); + $this->assertTrue( version_compare( phpversion(), '7.1', '>=' ), sprintf( 'PHP version %s has not been tested.', phpversion() ) ); + } + +} diff --git a/tests/test-unsplash.php b/tests/test-unsplash.php new file mode 100644 index 0000000..5c2c36e --- /dev/null +++ b/tests/test-unsplash.php @@ -0,0 +1,147 @@ + 'WLUHO9A_xik', + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . 'WLUHO9A_xik/', $img->get_attribute( 'src' ) ); + } + + function test_user() { + $img = Image_Tag::create( 'unsplash', null, array( + 'user' => 'erondu', + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . 'user/erondu/', $img->get_attribute( 'src' ) ); + } + + function test_user_likes() { + $img = Image_Tag::create( 'unsplash', null, array( + 'user_likes' => 'erondu', + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . 'user/erondu/likes/', $img->get_attribute( 'src' ) ); + } + + function test_collection() { + $img = Image_Tag::create( 'unsplash', null, array( + 'collection' => '190727', + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . 'collection/190727/', $img->get_attribute( 'src' ) ); + } + + function test_update() { + $img = Image_Tag::create( 'unsplash', null, array( + 'user' => 'erondu', + 'update' => 'daily', + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . 'user/erondu/daily/', $img->get_attribute( 'src' ) ); + } + + function test_featured() { + $img = Image_Tag::create( 'unsplash', null, array( + 'user' => 'erondu', + 'featured' => true, + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . 'user/erondu/featured/', $img->get_attribute( 'src' ) ); + } + + function test_width_height() { + $img = Image_Tag::create( 'unsplash', null, array( + 'width' => 1600, + 'height' => 900, + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . '1600x900/', $img->get_attribute( 'src' ) ); + + $img = Image_Tag::create( 'unsplash', array( + 'width' => 1600, + 'height' => 900, + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . '1600x900/', $img->get_attribute( 'src' ) ); + } + + function test_search() { + $img = Image_Tag::create( 'unsplash', null, array( + 'search' => 'forest', + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . '?forest', $img->get_attribute( 'src' ) ); + $this->assertEquals( array( 'forest' ), $img->get_setting( 'search' ) ); + + $img = Image_Tag::create( 'unsplash', null, array( + 'search' => array( 'forest', 'river' ), + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . '?forest,river', $img->get_attribute( 'src' ) ); + } + + function test_multiple() { + $img = Image_Tag::create( 'unsplash', array( + 'width' => 1600, + 'height' => 900, + ), array( + 'user' => 'erondu', + 'search' => 'water', + ) ); + + $this->assertEquals( Image_Tag_Unsplash::BASE_URL . 'user/erondu/1600x900/?water', $img->get_attribute( 'src' ) ); + } + + function test_valid() { + $img = Image_Tag::create( 'unsplash', array( + 'width' => 1600, + 'height' => 900, + ) ); + + $this->assertTrue( $img->is_valid() ); + + $img = Image_Tag::create( 'unsplash', null, array( + 'width' => 1600, + 'height' => 900, + ) ); + + $this->assertTrue( $img->is_valid() ); + } + + function test_invalid() { + $img = Image_Tag::create( 'unsplash', array( + 'width' => 1600, + ) ); + + $this->assertFalse( $img->is_valid() ); + + $img = Image_Tag::create( 'unsplash', null, array( + 'width' => 1600, + ) ); + + $this->assertFalse( $img->is_valid() ); + + $img = Image_Tag::create( 'unsplash', array( + 'height' => 1600, + ) ); + + $this->assertFalse( $img->is_valid() ); + + $img = Image_Tag::create( 'unsplash', null, array( + 'height' => 1600, + ) ); + + $this->assertFalse( $img->is_valid() ); + } + +} + +?> \ No newline at end of file diff --git a/tests/test-wp-attachment.php b/tests/test-wp-attachment.php new file mode 100644 index 0000000..1c78019 --- /dev/null +++ b/tests/test-wp-attachment.php @@ -0,0 +1,437 @@ + $wp_filetype['type'], + 'post_title' => sanitize_file_name( $filename ), + 'post_content' => '', + 'post_status' => 'inherit' + ); + + static::$attachment_id = wp_insert_attachment( $attachment, $file ); + require_once( ABSPATH . 'wp-admin/includes/image.php' ); + $attach_data = wp_generate_attachment_metadata( static::$attachment_id, $file ); + wp_update_attachment_metadata( static::$attachment_id, $attach_data ); + } + + function test_image_sizes() { + $image_sizes = array( 'small', 'medium' ); + + $img = Image_Tag::create( static::$attachment_id, array(), array( + 'image_sizes' => $image_sizes, + ) ); + + $this->assertNotContains( 'small', $img->get_setting( 'image-sizes' ) ); + + $wp_image_sizes = get_intermediate_image_sizes(); + $wp_images_sizes[] = 'full'; + + $image_sizes = array_intersect( $image_sizes, $wp_image_sizes ); + + foreach ( $image_sizes as $image_size ) { + $attachment = wp_get_attachment_image_src( static::$attachment_id, $image_size ); + + if ( !empty( $attachment ) ) + break; + } + + $this->assertEquals( esc_attr( $attachment[0] ), esc_attr( $img->get_attribute( 'src' ) ) ); + } + + function test_srcset() { + $image_sizes = array( 'medium', 'medium_large', 'large' ); + $img = Image_Tag::create( static::$attachment_id, array(), array( + 'image_sizes' => $image_sizes, + ) ); + + $this->assertEquals( count( $image_sizes ), count( $img['srcset'] ) ); + $this->assertEquals( $img->get_version( '__smallest' )->url, $img->get_attribute( 'src' ) ); + } + + function test_getter() { + $img = Image_Tag::create( static::$attachment_id ); + + $this->assertEquals( static::$attachment_id, $img->attachment_id ); + $this->assertContains( 'img.jpg', $img->src ); + } + + function test_attribute_defaults() { + $image_size = 'medium'; + + $img = Image_Tag::create( static::$attachment_id, array(), array( + 'image_sizes' => $image_size, + ) ); + + # Attribute: class. + $this->assertContains( 'post-' . static::$attachment_id, $img->get_attribute( 'class' ) ); + $this->assertContains( 'size-' . $image_size, $img->get_attribute( 'class' ) ); + } + + function test_image_versions() { + $img = Image_Tag::create( static::$attachment_id, array(), array( + 'image_sizes' => array( 'thumbnail', 'medium', 'medium_large', 'large', 'full' ), + ) ); + + $upload_dir = trailingslashit( wp_get_upload_dir()['path'] ); + $upload_url = trailingslashit( wp_get_upload_dir()['url'] ); + + $versions = array( + '__largest' => null, + '__smallest' => null, + + 'thumbnail' => ( object ) array( + 'file' => 'img-150x150.jpg', + 'width' => 150, + 'height' => 150, + 'path' => $upload_dir . 'img-150x150.jpg', + 'url' => $upload_url . 'img-150x150.jpg', + ), + + 'medium' => ( object ) array( + 'file' => 'img-300x200.jpg', + 'width' => 300, + 'height' => 200, + 'path' => $upload_dir . 'img-300x200.jpg', + 'url' => $upload_url . 'img-300x200.jpg', + ), + + 'medium_large' => ( object ) array( + 'file' => 'img-768x512.jpg', + 'width' => 768, + 'height' => 512, + 'path' => $upload_dir . 'img-768x512.jpg', + 'url' => $upload_url . 'img-768x512.jpg', + ), + + 'large' => ( object ) array( + 'file' => 'img-1024x682.jpg', + 'width' => 1024, + 'height' => 682, + 'path' => $upload_dir . 'img-1024x682.jpg', + 'url' => $upload_url . 'img-1024x682.jpg', + ), + + 'full' => ( object ) array( + 'file' => 'img.jpg', + 'width' => 2000, + 'height' => 1333, + 'path' => $upload_dir . 'img.jpg', + 'url' => $upload_url . 'img.jpg', + ), + + ); + + $versions['__largest'] = &$versions['full']; + $versions['__smallest'] = &$versions['thumbnail']; + + $_versions = $img->get_versions(); + $this->assertEquals( $versions, $_versions ); + $this->assertEquals( $_versions, $img->get_versions() ); + } + + function test_width() { + $img = Image_Tag::create( static::$attachment_id ); + $this->assertEquals( 2000, $img->get_width() ); + } + + function test_height() { + $img = Image_Tag::create( static::$attachment_id ); + $this->assertEquals( 1333, $img->get_height() ); + } + + function test_ratio() { + $img = Image_Tag::create( static::$attachment_id ); + $this->assertEquals( 0.6665, $img->get_ratio() ); + } + + /** + * @group _placeholder + * @group picsum + */ + function test_picsum() { + $image_sizes = array( 'medium', 'large', 'full' ); + $img = Image_Tag::create( static::$attachment_id, array(), array( 'image-sizes' => $image_sizes ) ); + $picsum = $img->picsum(); + + $this->assertInstanceOf( 'Image_Tag_Picsum', $picsum ); + $this->assertEquals( count( $image_sizes ), count( $picsum['srcset'] ) ); + } + + /** + * @group _placeholder + * @group picsum + * @group http + */ + function test_picsum_from_invalid() { + $image_sizes = array( 'medium', 'large', 'full' ); + $img = Image_Tag::create( 0, array(), array( 'image-sizes' => $image_sizes ) ); + $picsum = $img->picsum(); + + $this->assertInstanceOf( 'Image_Tag_Picsum', $picsum ); + $this->assertEquals( 1024, $picsum->get_attribute( 'width' ) ); + $this->assertEquals( 1024, $picsum->get_attribute( 'height' ) ); + $this->assertNotEmpty( $picsum->get_attribute( 'src' ) ); + $this->assertEmpty( $picsum['srcset'] ); + + $picsum = $img->picsum( array( + 'width' => 160, + 'height' => 90, + ) ); + $this->assertEquals( 160, $picsum->get_attribute( 'width' ) ); + $this->assertEquals( 90, $picsum->get_attribute( 'height' ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $picsum->http(), 'content-type' ) ); + + $img = Image_Tag::create( 0, null, array( + 'image-sizes' => array( 'full' ), + 'width' => 1600, + 'height' => 900, + ) ); + $this->assertEquals( 1600, $img->get_setting( 'width' ) ); + $this->assertEquals( 900, $img->get_setting( 'height' ) ); + + $picsum = $img->picsum(); + $this->assertEquals( 1600, $picsum->get_setting( 'width' ) ); + $this->assertEquals( 900, $picsum->get_setting( 'height' ) ); + } + + /** + * @group _placeholder + * @group placeholder + */ + function test_placeholder() { + $image_sizes = array( 'medium', 'large', 'full' ); + $img = Image_Tag::create( static::$attachment_id, array(), array( 'image-sizes' => $image_sizes ) ); + $placeholder = $img->placeholder(); + + $this->assertInstanceOf( 'Image_Tag_Placeholder', $placeholder ); + $this->assertEquals( count( $image_sizes ), count( $placeholder['srcset'] ) ); + } + + /** + * @group _placeholder + * @group placeholder + * @group http + */ + function test_placeholder_from_invalid() { + $image_sizes = array( 'medium', 'large', 'full' ); + $img = Image_Tag::create( 0, array(), array( 'image-sizes' => $image_sizes ) ); + $placeholder = $img->placeholder(); + + $this->assertInstanceOf( 'Image_Tag_Placeholder', $placeholder ); + $this->assertEquals( 1024, $placeholder->get_attribute( 'width' ) ); + $this->assertEquals( 1024, $placeholder->get_attribute( 'height' ) ); + $this->assertNotEmpty( $placeholder->get_attribute( 'src' ) ); + $this->assertEmpty( $placeholder['srcset'] ); + + $this->assertEquals( 'image/png', wp_remote_retrieve_header( $placeholder->http(), 'content-type' ) ); + + $img = Image_Tag::create( 0, null, array( + 'image-sizes' => array( 'full' ), + 'width' => 1600, + 'height' => 900, + ) ); + $this->assertEquals( 1600, $img->get_setting( 'width' ) ); + $this->assertEquals( 900, $img->get_setting( 'height' ) ); + + $placeholder = $img->picsum(); + $this->assertEquals( 1600, $placeholder->get_setting( 'width' ) ); + $this->assertEquals( 900, $placeholder->get_setting( 'height' ) ); + } + + /** + * @group _placeholder + * @group joeschmoe + */ + function test_joeschmoe() { + $img = Image_Tag::create( static::$attachment_id, array(), array( 'image-sizes' => array( 'medium', 'large', 'full' ) ) ); + $joeschmoe = $img->joeschmoe(); + + $this->assertInstanceOf( 'Image_Tag_JoeSchmoe', $joeschmoe ); + $this->assertEmpty( $joeschmoe->get_attribute( 'srcset' ) ); + } + + /** + * @group _placeholder + * @group joeschmoe + * @group http + */ + function test_joeschmoe_from_invalid() { + $img = Image_Tag::create( 0, array(), array( 'image-sizes' => array( 'medium', 'large', 'full' ) ) ); + $joeschmoe = $img->joeschmoe(); + + $this->assertInstanceOf( 'Image_Tag_JoeSchmoe', $joeschmoe ); + $this->assertNotEmpty( $joeschmoe->get_attribute( 'src' ) ); + $this->assertEquals( 'image/svg+xml; charset=utf-8', wp_remote_retrieve_header( $joeschmoe->http(), 'content-type' ) ); + } + + function test_colors() { + $img = Image_Tag::create( static::$attachment_id ); + $colors = array( + '#202020' => 0.51737373737374, + '#304060' => 0.19494949494949, + '#303040' => 0.12673400673401, + ); + + $this->assertEquals( $colors, $img->get_colors() ); + $this->assertEquals( array_keys( $colors )[0], $img->get_mode_color() ); + + $transient_key = Image_Tag_WP_Attachment::colors_transient_key( static::$attachment_id ); + $this->assertEquals( $colors, get_transient( $transient_key ) ); + + $transient_timeout = get_option( '_transient_timeout_' . $transient_key ); + $life = $transient_timeout - time(); + $this->assertGreaterThanOrEqual( DAY_IN_SECONDS, $life ); + $this->assertLessThanOrEqual( DAY_IN_SECONDS + 1, $life ); + + # Test retrieval from transient. + $this->assertEquals( $colors, $img->get_colors() ); + } + + function test_lqip() { + $img = Image_Tag::create( static::$attachment_id, array(), array( 'image-sizes' => 'medium' ) ); + $lqip = $img->lqip(); + + $this->assertContains( 'base64', $lqip->get_attribute( 'src' ) ); + $this->assertContains( 'lqip', $lqip->get_attribute( 'class' ) ); + + $transient_key = Image_Tag_WP_Attachment::lqip_transient_key( static::$attachment_id ); + $this->assertEquals( $lqip->get_attribute( 'src' ), get_transient( $transient_key ) ); + + $transient_timeout = get_option( '_transient_timeout_' . $transient_key ); + $life = $transient_timeout - time(); + $this->assertGreaterThanOrEqual( DAY_IN_SECONDS, $life ); + $this->assertLessThanOrEqual( DAY_IN_SECONDS + 1, $life ); + + # Test retrieval from transient. + $this->assertEquals( $lqip->get_attribute( 'src' ), $img->lqip()->get_attribute( 'src' ) ); + + $decoded = base64_decode( explode( ',', $lqip->get_attribute( 'src' ) )[1] ); + $size = getimagesizefromstring( $decoded ); + $this->assertEquals( 100, $lqip->get_setting( 'lqip-width' ) ); + $this->assertEquals( $lqip->get_setting( 'lqip-width' ), $size[0] ); + + $this->assertEquals( $lqip->get_attribute( 'src' ), $img->get_version( '__lqip' )->url ); + $this->assertEquals( $lqip->get_attribute( 'src' ), $lqip->get_version( '__lqip' )->url ); + } + + function test_lazyload() { + $img = Image_Tag::create( static::$attachment_id, array(), array( + 'image-sizes' => array( 'medium', 'large' ), + ) ); + + $lazyload = $img->lazyload(); + + $this->assertEquals( $img->get_attribute( 'srcset' ), $lazyload->get_attribute( 'data-srcset' ) ); + $this->assertEquals( 'auto', $lazyload->get_attribute( 'data-sizes' ) ); + + $img->set_attribute( 'sizes', '100vw' ); + + $this->assertEquals( '100vw', $img->lazyload()->get_attribute( 'data-sizes' ) ); + } + + function test_type() { + $img = Image_Tag::create( static::$attachment_id ); + + $this->assertTrue( $img->is_type( 'wp' ) ); + $this->assertTrue( $img->is_type( 'local' ) ); + $this->assertTrue( $img->is_type( 'internal' ) ); + $this->assertTrue( $img->is_type( 'wordpress' ) ); + $this->assertTrue( $img->is_type( 'attachment' ) ); + $this->assertTrue( $img->is_type( 'wp-attachment' ) ); + $this->assertTrue( $img->is_type( 'wordpress-attachment' ) ); + + $this->assertFalse( $img->is_type( 'theme' ) ); + $this->assertFalse( $img->is_type( 'wp-theme' ) ); + $this->assertFalse( $img->is_type( 'wordpress-theme' ) ); + + $this->assertFalse( $img->is_type( 'remote' ) ); + } + + function test_valid() { + $img = Image_Tag::create( static::$attachment_id ); + $this->assertTrue( $img->is_valid() ); + } + + function test_invalid() { + $img = Image_Tag::create( 0 ); + $this->assertFalse( $img->is_valid() ); + } + + /** + * @group _placeholder + * @group unsplash + */ + function test_unsplash() { + $image_sizes = array( 'medium', 'medium_large', 'large', 'full' ); + + $img = Image_Tag::create( static::$attachment_id, null, array( + 'image-sizes' => $image_sizes, + ) ); + $unsplash = $img->unsplash(); + + $this->assertInstanceOf( Image_Tag_Unsplash::class, $unsplash ); + $this->assertEquals( count( $image_sizes ), count( $unsplash['srcset'] ) ); + } + + /** + * @group _placeholder + * @group unsplash + */ + function test_unsplash_from_invalid() { + $image_sizes = array( 'medium', 'large', 'full' ); + $img = Image_Tag::create( 0, array(), array( 'image-sizes' => $image_sizes ) ); + $unsplash = $img->unsplash(); + + $this->assertInstanceOf( 'Image_Tag_unsplash', $unsplash ); + $this->assertEquals( 1024, $unsplash->get_attribute( 'width' ) ); + $this->assertEquals( 1024, $unsplash->get_attribute( 'height' ) ); + $this->assertNotEmpty( $unsplash->get_attribute( 'src' ) ); + $this->assertEmpty( $unsplash['srcset'] ); + + $unsplash = $img->unsplash( array( + 'width' => 160, + 'height' => 90, + ) ); + $this->assertEquals( 160, $unsplash->get_attribute( 'width' ) ); + $this->assertEquals( 90, $unsplash->get_attribute( 'height' ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $unsplash->http(), 'content-type' ) ); + + $img = Image_Tag::create( 0, null, array( + 'image-sizes' => array( 'full' ), + 'width' => 1600, + 'height' => 900, + ) ); + $this->assertEquals( 1600, $img->get_setting( 'width' ) ); + $this->assertEquals( 900, $img->get_setting( 'height' ) ); + + $unsplash = $img->unsplash(); + $this->assertEquals( 1600, $unsplash->get_setting( 'width' ) ); + $this->assertEquals( 900, $unsplash->get_setting( 'height' ) ); + } + +} diff --git a/tests/test-wp-theme.php b/tests/test-wp-theme.php new file mode 100644 index 0000000..388d815 --- /dev/null +++ b/tests/test-wp-theme.php @@ -0,0 +1,223 @@ +assertEquals( trailingslashit( get_stylesheet_directory_uri() ) . static::SRC, $img->get_attribute( 'src' ) ); + } + + function test_width() { + $img = Image_Tag::create( static::SRC ); + $this->assertEquals( 1200, $img->get_width() ); + } + + function test_height() { + $img = Image_Tag::create( static::SRC ); + $this->assertEquals( 900, $img->get_height() ); + } + + function test_ratio() { + $img = Image_Tag::create( static::SRC ); + $this->assertEquals( 0.75, $img->get_ratio() ); + } + + /** + * @group _placeholder + * @group picsum + */ + function test_picsum() { + $img = Image_Tag::create( static::SRC ); + $this->assertInstanceOf( 'Image_Tag_Picsum', $img->picsum() ); + } + + /** + * @group _placeholder + * @group picsum + * @group http + */ + function test_picsum_from_invalid() { + $img = Image_Tag::create( 'image-does-not-exist.jpg' ); + $this->assertInstanceOf( 'Image_Tag_Picsum', $img->picsum() ); + + $picsum = $img->picsum( array( + 'width' => 160, + 'height' => 90, + ) ); + $this->assertEquals( 160, $picsum->get_attribute( 'width' ) ); + $this->assertEquals( 90, $picsum->get_attribute( 'height' ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $picsum->http(), 'content-type' ) ); + + $img = Image_Tag::create( 0, null, array( + 'image-sizes' => array( 'full' ), + 'width' => 1600, + 'height' => 900, + ) ); + $this->assertEquals( 1600, $img->get_setting( 'width' ) ); + $this->assertEquals( 900, $img->get_setting( 'height' ) ); + + $picsum = $img->picsum(); + $this->assertEquals( 1600, $picsum->get_setting( 'width' ) ); + $this->assertEquals( 900, $picsum->get_setting( 'height' ) ); + } + + /** + * @group _placeholder + * @group placeholder + */ + function test_placeholder() { + $img = Image_Tag::create( static::SRC ); + $this->assertInstanceOf( 'Image_Tag_Placeholder', $img->placeholder() ); + } + + /** + * @group _placeholder + * @group placeholder + * @group http + */ + function test_placeholder_from_invalid() { + $img = Image_Tag::create( 'image-does-not-exist.jpg' ); + $this->assertInstanceOf( 'Image_Tag_Placeholder', $img->placeholder() ); + + $placeholder = $img->placeholder( array( + 'width' => 160, + 'height' => 90, + ) ); + $this->assertEquals( 160, $placeholder->get_attribute( 'width' ) ); + $this->assertEquals( 90, $placeholder->get_attribute( 'height' ) ); + + $this->assertEquals( 'image/png', wp_remote_retrieve_header( $placeholder->http(), 'content-type' ) ); + + $img = Image_Tag::create( 0, null, array( + 'image-sizes' => array( 'full' ), + 'width' => 1600, + 'height' => 900, + ) ); + $this->assertEquals( 1600, $img->get_setting( 'width' ) ); + $this->assertEquals( 900, $img->get_setting( 'height' ) ); + + $placeholder = $img->placeholder(); + $this->assertEquals( 1600, $placeholder->get_setting( 'width' ) ); + $this->assertEquals( 900, $placeholder->get_setting( 'height' ) ); + } + + /** + * @group _placeholder + * @group joeschmoe + */ + function test_joeschmoe() { + $img = Image_Tag::create( static::SRC ); + $this->assertInstanceOf( 'Image_Tag_JoeSchmoe', $img->joeschmoe() ); + } + + /** + * @group _placeholder + * @group joeschmoe + * @group http + */ + function test_joeschmoe_from_invalid() { + $img = Image_Tag::create( 'image-does-not-exist.jpg' ); + + $this->assertInstanceOf( 'Image_Tag_JoeSchmoe', $img->joeschmoe() ); + $this->assertEquals( 'image/svg+xml; charset=utf-8', wp_remote_retrieve_header( $img->joeschmoe()->http(), 'content-type' ) ); + } + + function test_colors() { + $img = Image_Tag::create( static::SRC ); + $colors = array( + '#ffffff' => 0.41791666666666666, + '#606060' => 0.38815476190476189, + '#000000' => 0.17232142857142857, + ); + + $this->assertEquals( $colors, $img->get_colors() ); + $this->assertEquals( array_keys( $colors )[0], $img->get_mode_color() ); + + $transient_key = Image_Tag_WP_Theme::colors_transient_key( $img->path ); + $this->assertEquals( $colors, get_transient( $transient_key ) ); + + $transient_timeout = get_option( '_transient_timeout_' . $transient_key ); + $life = $transient_timeout - time(); + $this->assertGreaterThanOrEqual( DAY_IN_SECONDS, $life ); + $this->assertLessThanOrEqual( DAY_IN_SECONDS + 1, $life ); + + # Test retrieval from transient. + $this->assertEquals( $colors, $img->get_colors() ); + } + + function test_type() { + $img = Image_Tag::create( static::SRC ); + + $this->assertTrue( $img->is_type( 'wp' ) ); + $this->assertTrue( $img->is_type( 'local' ) ); + $this->assertTrue( $img->is_type( 'theme' ) ); + $this->assertTrue( $img->is_type( 'internal' ) ); + $this->assertTrue( $img->is_type( 'wp-theme' ) ); + $this->assertTrue( $img->is_type( 'wordpress' ) ); + $this->assertTrue( $img->is_type( 'wordpress-theme' ) ); + + $this->assertFalse( $img->is_type( 'attachment' ) ); + $this->assertFalse( $img->is_type( 'wp-attachment' ) ); + $this->assertFalse( $img->is_type( 'wordpress-attachment' ) ); + + $this->assertFalse( $img->is_type( 'external' ) ); + } + + function test_valid() { + $img = Image_Tag::create( static::SRC ); + $this->assertTrue( $img->is_valid() ); + } + + function test_invalid() { + $img = Image_Tag::create( 'does-not-exist.jpg' ); + $this->assertFalse( $img->is_valid() ); + } + + /** + * @group _placeholder + * @group unsplash + */ + function test_unsplash() { + $img = Image_Tag::create( static::SRC ); + $this->assertInstanceOf( 'Image_Tag_Unsplash', $img->unsplash() ); + } + + /** + * @group _placeholder + * @group unsplash + * @group http + */ + function test_unsplash_from_invalid() { + $img = Image_Tag::create( 'image-does-not-exist.jpg' ); + $this->assertInstanceOf( 'Image_Tag_Unsplash', $img->unsplash() ); + + $unsplash = $img->unsplash( array( + 'width' => 160, + 'height' => 90, + ) ); + $this->assertEquals( 160, $unsplash->get_attribute( 'width' ) ); + $this->assertEquals( 90, $unsplash->get_attribute( 'height' ) ); + + $this->assertEquals( 'image/jpeg', wp_remote_retrieve_header( $unsplash->http(), 'content-type' ) ); + + $img = Image_Tag::create( 0, null, array( + 'image-sizes' => array( 'full' ), + 'width' => 1600, + 'height' => 900, + ) ); + $this->assertEquals( 1600, $img->get_setting( 'width' ) ); + $this->assertEquals( 900, $img->get_setting( 'height' ) ); + + $unsplash = $img->unsplash(); + $this->assertEquals( 1600, $unsplash->get_setting( 'width' ) ); + $this->assertEquals( 900, $unsplash->get_setting( 'height' ) ); + } + +}