���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC PK!yC readme.txtnu[=== Ad Inserter - Ad Manager & AdSense Ads === Contributors: adinserter, spacetime Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=LHGZEMRTR7WB4 Tags: ads, adsense, ad rotation, ad manager, amp, amazon, ad blocking detection, header code, banners, in-feed ads, sticky fixed widgets, hooks Requires at least: 4.9 Tested up to: 6.2 Requires PHP: 5.6 Stable tag: 2.7.29 License: GPLv3 Manage Google AdSense, Media.net, Amazon banners, ads.txt, ad rotation, sticky widgets, AMP ads, DFP, tracking, AdSense header and footer code == Description == Ad management plugin with many advanced advertising features to insert ad codes at optimal positions. Supports all kinds of ads including **Google AdSense**, **Google Ad Manager** (DFP - DoubleClick for publishers), contextual **Amazon Native Shopping Ads**, **Media.net** , **Infolinks** and **rotating banners.** This plugin is more than AdSense plugin or plugin for ads. It provides many advanced options to insert opt-in forms, header scripts, Javascript, CSS, HTML, PHP, analytics, tracking or advert code anywhere on the page. **Insert ads where other plugins fail**. It's all about the [settings](https://adinserter.pro/documentation). [Plugin reviews](https://wordpress.org/support/topic/wow-684/): > I've been using another ad placement manager for a couple years and just recently started using Ad Inserter. > > I'm blown AWAY with the power and flexibility of it. > > I can HIGHLY recommend this plugin to anyone looking for an easy way to manage ads within WordPress. > > Difficult to choose, but certainly top 3 plugins I've ever used in WordPress, ever. **Features** - check [documentation](https://adinserter.pro/documentation/features) for the complete list * [AdSense integration](https://adinserter.pro/documentation/adsense-ads) * Support for [Google Ad Manager](https://adinserter.pro/documentation/ad-manager-ads) (DoubleClick for publishers) * Syntax highlighting [editor](https://adinserter.pro/documentation/code-editing) * Plain JavaScript code on front-end - no library dependencies * Code preview with visual CSS editor * Automatically inserts ads on posts and pages * Insert before or after post * Insert before or after content * Insert before or after paragraph * Insert before or after random paragraph * Insert before or after multiple paragraphs * Insert before or after image * Insert before or after comments * Insert before or after excerpt * Insert near any element on the page (using CSS selectors) * Insert above the header (after `` tag) * Insert in the footer (before `` tag) * Insert at relative positions in posts * Insert between posts on blog pages (in-feed AdSense) * Insert between excerpts on blog pages * Insert between comments * Insert at custom hook positions (`do_action ()` WP function) * Insert before or after any HTML element using CSS selectors * Visual HTML element selector (DOM explorer) * Avoid inserting ads near images or headers (AdSense TOS) * Disable ads on individual posts or pages * Insert header (`` section) and footer code * Insert raw HTTP response header lines * Insert Google Analytics, Matomo (Piwik) or any other tracking code * Insert images, HTML, CSS, Javascript or PHP code * Code generator for banners and placeholders * AdSense code generator * Support to detect, hide or replace blank AdSense blocks * Visual advert editor - create adverts from scratch * Manual insertion: widgets, shortcodes, PHP function call * Sticky (fixed) widgets (sticky sidebar - the sidebar does not move when the page is scrolled) * Custom alignments and styles * Insert different ad codes on AMP pages * Custom CSS class name for wrapping divs to avoid ad blockers * Use shortcodes from other plugins * Use custom fields as defined in posts * Use post title, tags or category names to create contextual adverts * PHP code processing * Ad labels - show customized label above adverts * ads.txt editor * Support for [GDPR consent checks](https://adinserter.pro/faq/gdpr-compliance-cookies-consent) * Support for IAB TCF 2.0 GDPR consent API (used by Quantcast Choice) * Ad rotation (server-side and client-side - works with caching) * Timed ad rotation - define times to rotate adverts in a single ad block * Create rich media ads with standard WordPress TinyMCE editor * Ad blocking detection - popup message, page redirection * Desktop/mobile device detection (server-side and client-side - works with caching) * [Blacklist/Whitelist](https://adinserter.pro/documentation/black-and-white-lists) categories, tags, taxonomies, post IDs, urls, url query parameters, cookies, referrers, browsers, operating systems * Easy copying and pasting ads or settings using internal clipboard * Use it with Google Site Kit or replace it to have more control over ad placement * Simple troubleshooting with many debugging functions * Function to visualize inserted blocks * Function to visualize AdSense ads with ad names and IDs * Function to visualize available insertion positions * Function to visualize HTML tags * You name it :) 👉 TEST the plugin on a [demo website](https://tastewp.com/template/AdInserterDemo?redirect=options-general.php%3Fpage%3Dad-inserter.php%26ai-demo%3D1&ni=true) [Review on WP Mayor](https://wpmayor.com/ad-inserter-review-the-best-wordpress-ad-management-plugin/) > The Best WordPress Ad Management Plugin? [Review on ShoutMeLoud](https://www.shoutmeloud.com/ad-inserter-review.html) > Both Google and Amazon recommend this plugin for inserting ads, which is a testament to its quality **Endorsed by Google** - [How to insert ad code in your WordPress site](https://support.google.com/adsense/answer/7527509) > If you're new to AdSense, one of your first tasks is to connect your site to AdSense. This requires you to copy the code on your AdSense homepage and paste it into the HTML of your page, between the `` and `` tags. **Endorsed by Amazon** - Wordpress Integration Guide for Native Shopping Ads. > Native Shopping Ads provide highly relevant and dynamic product recommendations in a stylishly designed and responsive ad unit that can be placed at the end or within your content to create a more compelling visitor experience and shopping opportunity. **Pro version** supports additional [advanced features](https://adinserter.pro/documentation/features): * Geolocation using internal or [MaxMind](http://www.maxmind.com/) databases (works also with caching) * Country, state, region and city level geotargeting * Blacklist/Whitelist IP addresses or countries/cities (works also with caching) * Ad impression and click statistics (works also with `' . "\n"; } else { if (is_array ($this->check_codes) && isset ($this->check_codes [$this->check_codes_index])) { $this->check_codes_index ++; $code = $this->check_codes [$this->check_codes_index]; } else { unset ($ai_wp_data [AI_SHORTCODES]['check']); unset ($ai_wp_data [AI_SHORTCODES]['count']); unset ($ai_wp_data [AI_SHORTCODES]['rotate']); unset ($ai_wp_data [AI_SHORTCODES]['head']); unset ($ai_wp_data [AI_SHORTCODES]['viewport']); $ai_wp_data [AI_CURRENT_BLOCK_NUMBER] = $this->number; $ai_wp_data [AI_CURRENT_BLOCK_NAME] = $this->get_ad_name (); $ai_code = $this->ai_getCode (); $replace_embed = false; if (stripos ($ai_code, 'embed]') !== false) { $replace_embed = true; $ai_code = str_ireplace (array ('[embed]', '[/embed]'), array ('[#embed#]', '[#/embed#]'), $ai_code); } $code = do_shortcode (replace_ai_tags ($ai_code, $this->get_ad_general_tag())); if ($replace_embed) { $code = str_ireplace (array ('[#embed#]', '[#/embed#]'), array ('[embed]', '[/embed]'), $code); $code = $GLOBALS[ 'wp_embed']->run_shortcode ($code); } unset ($ai_wp_data [AI_CURRENT_BLOCK_NUMBER]); unset ($ai_wp_data [AI_CURRENT_BLOCK_NAME]); if (isset ($ai_wp_data [AI_SHORTCODES])) { $this->shortcodes = $ai_wp_data [AI_SHORTCODES]; } } } $processed_code .= $code; // $this->needs_class = true; // ??? $this->wrapping_div_classes = array (); $dynamic_blocks = get_dynamic_blocks (); if ($ai_wp_data [AI_FORCE_SERVERSIDE_CODE] || ($dynamic_blocks == AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC && defined ('AI_NO_W3TC'))) $dynamic_blocks = AI_DYNAMIC_BLOCKS_SERVER_SIDE; if ($not_iframe_or_inside) { // [ADINSERTER CHECK] if (function_exists ('ai_check_separators')) { $processed_code = ai_check_separators ($this, $processed_code); if ($this->check_code_empty && $processed_code == '') { return ''; } } // [ADINSERTER COUNT] preg_match_all ('/\|count([0-9]+?)\|/', $processed_code, $matches); if (count ($matches [1]) != 0) { $count_parameters = array (); foreach ($matches [1] as $match) { // $count_parameters []= $ai_wp_data [AI_SHORTCODES]['count'][$match]; $count_parameters []= $this->shortcodes ['count'][$match]; } $processed_code = preg_replace ('/\|count([0-9]+?)\|/', AD_COUNT_SEPARATOR, $processed_code); // } else if (isset ($ai_wp_data [AI_SHORTCODES]['count'])) $count_parameters = $ai_wp_data [AI_SHORTCODES]['count']; } else if (isset ($this->shortcodes ['count'])) $count_parameters = $this->shortcodes ['count']; if (strpos ($processed_code, AD_COUNT_SEPARATOR) !== false) { $ads = explode (AD_COUNT_SEPARATOR, $processed_code); $allow_empty = false; if (isset ($count_parameters [0]['count'])) { if (strpos (strtolower ($count_parameters [0]['count']), 'empty') !== false) { $allow_empty = true; } } if (trim ($ads [0]) == '' && !$allow_empty) { unset ($ads [0]); $ads = array_values ($ads); // $count_parameters are shifted (the first $count_parameters is for the deleted empty option) } $this->count_names = null; if ($ai_wp_data [AI_FORCE_SERVERSIDE_CODE]) { // Code for preview $processed_code = $ads [$this->count_index]; foreach ($ads as $index => $ad) $this->count_names []= $index + 1; } else { if (isset ($ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number])) { $block_counter = $ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number]; $option_index = $block_counter - 1; if (isset ($count_parameters [$block_counter - 1]['count'])) { if (strpos (strtolower ($count_parameters [$block_counter - 1]['count']), 'shuffle') !== false) { $ai_wp_data [AI_COUNT_SHUFFLE][$this->number] = $ads; shuffle ($ai_wp_data [AI_COUNT_SHUFFLE][$this->number]); } if (strpos (strtolower ($count_parameters [$block_counter - 1]['count']), 'repeat') !== false) { $ai_wp_data [AI_COUNT_REPEAT][$this->number] = true; } } if (isset ($ai_wp_data [AI_COUNT_SHUFFLE][$this->number])) { $ads = $ai_wp_data [AI_COUNT_SHUFFLE][$this->number]; } if (isset ($ai_wp_data [AI_COUNT_REPEAT][$this->number])) { $option_index = $option_index % count ($ads); } if ($option_index >= 0 && $option_index < count ($ads)) { $processed_code = $ads [$option_index]; } else { $processed_code = ''; $additional_code = ''; } } else $processed_code = $ads [rand (0, count ($ads) - 1)]; } } // [ADINSERTER ROTATE] // (Re)set option index and name $check_options_for_statistics = $this->check_statistics; $check_option_always = isset ($this->check_codes_data [0]) && empty ($this->check_codes_data [0]); if ($check_options_for_statistics) { $option_index = isset ($this->check_codes_data [$this->check_codes_index]['name']) ? $this->check_codes_data [$this->check_codes_index]['name'] : $this->check_codes_index; if ($check_option_always) { // first option with index 0 is always inserted // first check option has index 1 $this->code_version = isset ($this->check_codes_data [$this->check_codes_index]['index']) && trim ($this->check_codes_data [$this->check_codes_index]['index']) != '' ? (int) $this->check_codes_data [$this->check_codes_index]['index'] : $this->check_codes_index; $this->tracking_index = $this->code_version; $this->version_name = isset ($this->check_codes_data [$this->check_codes_index]['name']) ? $this->check_codes_data [$this->check_codes_index]['name'] : ''; } else { // first check option has index 0 => 1 $this->code_version = isset ($this->check_codes_data [$this->check_codes_index]['index']) && trim ($this->check_codes_data [$this->check_codes_index]['index']) != '' ? (int) $this->check_codes_data [$this->check_codes_index]['index'] : $this->check_codes_index + 1; $this->tracking_index = $this->code_version; $this->version_name = isset ($this->check_codes_data [$this->check_codes_index]['name']) ? $this->check_codes_data [$this->check_codes_index]['name'] : ''; } } else { // Clear for ROTATE in case of multiple block insertions (CHECK separator) $this->code_version = 0; $this->tracking_index = 0; $this->version_name = ''; } preg_match_all ('/\|rotate([0-9]+?)\|/', $processed_code, $matches); if (count ($matches [1]) != 0) { $rotate_parameters = array (); foreach ($matches [1] as $match) { // $rotate_parameters []= $ai_wp_data [AI_SHORTCODES]['rotate'][$match]; $rotate_parameters []= $this->shortcodes ['rotate'][$match]; } $processed_code = preg_replace ('/\|rotate([0-9]+?)\|/', AD_ROTATE_SEPARATOR, $processed_code); // } else if (isset ($ai_wp_data [AI_SHORTCODES]['rotate'])) $rotate_parameters = $ai_wp_data [AI_SHORTCODES]['rotate']; } else if (isset ($this->shortcodes ['rotate'])) $rotate_parameters = $this->shortcodes ['rotate']; if (strpos ($processed_code, AD_ROTATE_SEPARATOR) !== false) { $ads = explode (AD_ROTATE_SEPARATOR, $processed_code); if (!isset ($rotate_parameters)) { // using old separator |rotate| $rotate_parameters = array (); foreach ($ads as $index => $ad) { // Skip parameters for first option (it will be added with array_unshift below) if ($index == 0) continue; $rotate_parameters []= array (); } } if (trim ($ads [0]) == '') { unset ($ads [0]); $ads = array_values ($ads); } else array_unshift ($rotate_parameters, array ('name' => '')); $prepend_code = ''; $append_code = ''; $shares = false; $ctr_shares = false; $ctr_min_impressions = 1000; $ctr_days = 30; $ctr_top_share = 75; $times = false; $scheduling = false; $groups = false; $unique = false; $version_names = array (); $tracking_indexes = array (); $version_shares = array (); $version_times = array (); $version_scheduling = array (); $version_groups = array (); foreach ($rotate_parameters as $index => $rotate_parameter) { if ((isset ($rotate_parameter ['code']) && trim ($rotate_parameter ['code']) != '')) { switch (strtolower ($rotate_parameter ['code'])) { case 'prepend': $prepend_code .= $ads [$index]; unset ($ads [$index]); unset ($rotate_parameters [$index]); break; case 'append': $append_code .= $ads [$index]; unset ($ads [$index]); unset ($rotate_parameters [$index]); break; } } } $ads = array_values ($ads); $rotate_parameters = array_values ($rotate_parameters); if ($prepend_code != '') { foreach ($ads as $index => $ad) { $ads [$index] = $prepend_code . $ads [$index]; } } if ($append_code != '') { foreach ($ads as $index => $ad) { $ads [$index] .= $append_code; } } foreach ($rotate_parameters as $index => $option) { $tracking_indexes []= isset ($option ['index']) && trim ($option ['index']) != '' ? (int) $option ['index'] : $index + 1; if ((isset ($option ['group']) && trim ($option ['group']) != '') || $groups) { $groups = true; $shares = false; $times = false; $version_groups []= mb_strtolower (trim ($option ['group'])); $version_names []= isset ($option ['group']) && trim ($option ['group']) != '' ? $option ['group'] : chr (ord ('A') + $index); $version_shares []= - 1; $version_times []= - 1; $version_scheduling []= - 1; } else { $version_names []= isset ($option ['name']) && trim ($option ['name']) != '' ? $option ['name'] : chr (ord ('A') + $index); // Just in case there will be a ROTATE group option $version_groups []= ''; if (isset ($option ['share']) && strpos ($share_option = strtolower ($option ['share']), 'ctr') === 0 && function_exists ('ai_get_impressions_and_clicks')) { $ctr_options = explode (':', $share_option); if (isset ($ctr_options [1]) && $ctr_options [1] > 0 && $ctr_options [1] < 366) { $ctr_days = (int) $ctr_options [1]; } if (isset ($ctr_options [2]) && $ctr_options [2] > 1 && $ctr_options [2] < 10000000) { $ctr_min_impressions = (int) $ctr_options [2]; } if (isset ($ctr_options [3]) && $ctr_options [3] > 1 && $ctr_options [3] < 100) { $ctr_top_share = (int) $ctr_options [3]; } $shares = true; $ctr_shares = true; $version_shares []= - 1; } else { $option_share = isset ($option ['share']) && is_numeric ($option ['share']); if ($option_share) $shares = true; $version_shares []= $option_share ? intval ($option ['share']) : - 1; } $option_time = isset ($option ['time']) && is_numeric ($option ['time']); if ($option_time) $times = true; $version_times []= $option_time ? intval ($option ['time']) : - 1; $option_scheduling = isset ($option ['scheduling']) && strpos ($option ['scheduling'], '=') !== false; if ($option_scheduling) $scheduling = true; $version_scheduling []= $option_scheduling ? trim ($option ['scheduling']) : - 1; } if (isset ($option ['rotate']) && strtolower ($option ['rotate']) == 'unique') $unique = true; } if ($unique && !isset ($ai_wp_data [AI_ROTATION_SEED])) { $ai_wp_data [AI_ROTATION_SEED] = mt_rand (1, time ()) % count ($ads); } $this->rotate_names = $version_names; if ($groups) { // Clear in case there were mixed rotate options foreach ($rotate_parameters as $index => $option) { $version_shares [$index] - 1; $version_times [$index] - 1; $version_scheduling [$index] - 1; } } if ($shares) { $total_share = 0; $no_share = 0; if ($ctr_shares) { $disabled_shares = 0; foreach ($version_shares as $index => $share) { if ($share == 0) { $disabled_shares ++; } } if ($disabled_shares < count ($rotate_parameters) - 1) { // Default state (no CTR data yet) is equal shares foreach ($version_shares as $index => $share) { if ($share != 0) { $version_shares [$index] = number_format (100 / (count ($rotate_parameters) - $disabled_shares), 2); } } if (count ($rotate_parameters) > 1 && $this->get_tracking () && get_internal_tracking ()) { $tracking_data = ai_get_impressions_and_clicks ($this->number, $ctr_days, false, true); if ($tracking_data [2] >= $ctr_min_impressions) { $max_ctr = 0; $max_ctr_option = 0; foreach ($tracking_data [4] as $option => $ctr) { if ($option == 0) continue; if ($ctr > $max_ctr) { $max_ctr = $ctr; $max_ctr_option = $option; } } // We have a winner if ($max_ctr_option != 0) { foreach ($version_shares as $index => $share) { if ($version_shares [$index] != 0) { if ($index + 1 == $max_ctr_option) $version_shares [$index] = $ctr_top_share; else $version_shares [$index] = number_format ((100 - $ctr_top_share) / (count ($rotate_parameters) - $disabled_shares - 1), 2); } } } } } else $ctr_shares = false; } } foreach ($version_shares as $index => $share) { if ($share < 0) $no_share ++; else $total_share += $share; } if ($total_share > 100 || $no_share == 0) { $scale = $total_share / 100; } else $scale = 1; foreach ($version_shares as $index => $share) { // Disable options with share 0 if ($share == 0) $version_shares [$index] = - 1; else if ($share < 0) $version_shares [$index] = (100 - $total_share / $scale) / $no_share; else $version_shares [$index] = $share / $scale; } $thresholds = array (); $total_share = 0; foreach ($version_shares as $index => $share) { if ($share >= 0) { $total_share += $share; $thresholds [] = round ($total_share); } else $thresholds [] = - 1; } } if ($times) { if ($dynamic_blocks != AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW && $dynamic_blocks != AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT) $dynamic_blocks = AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW; $ai_wp_data [AI_CLIENT_SIDE_ROTATION] = true; } $rotation_dynamic_blocks = $dynamic_blocks; if ($ai_wp_data [AI_FORCE_SERVERSIDE_CODE] || ($rotation_dynamic_blocks == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW || $rotation_dynamic_blocks == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT) && $ai_wp_data [AI_WP_AMP_PAGE]) $rotation_dynamic_blocks = AI_DYNAMIC_BLOCKS_SERVER_SIDE; $groups_marker = "##"; switch ($rotation_dynamic_blocks) { case AI_DYNAMIC_BLOCKS_SERVER_SIDE: if ($ai_wp_data [AI_FORCE_SERVERSIDE_CODE]) { // Code for preview if ($this->rotate_index >= count ($ads)) { $this->rotate_index = 0; } $this->code_version = $this->rotate_index + 1; } elseif ($shares) { $random_threshold = mt_rand (0, 100); foreach ($thresholds as $index => $threshold) { $this->code_version = $index + 1; if ($threshold < 0) continue; if ($random_threshold <= $threshold) break; } } elseif ($groups) { $this->code_version = 0; $processed_code = ''; $this->version_name = ''; if (count ($ai_wp_data [AI_ACTIVE_GROUP_NAMES]) != 0) { $this->check_code_empty = true; foreach ($ai_wp_data [AI_ACTIVE_GROUP_NAMES] as $group_name) { foreach ($version_groups as $index => $version_group) { if ($version_group == trim ($group_name)) { $this->code_version = $index + 1; if ($debug_processing) ai_log ('GROUP NAME FOUND: "' . trim ($group_name) . '"'); break 2; } } } if ($this->code_version == 0) { if ($debug_processing) { $this->no_insertion_text = 'GROUP NAMES NOT FOUND IN "' . $ai_wp_data [AI_ACTIVE_GROUP_NAMES] . '"'; ai_log ($this->no_insertion_text); } return ''; } $this->check_code_empty = false; } } elseif ($scheduling) { $this->code_version = 0; foreach ($version_scheduling as $index => $scheduling_data) { if (check_scheduled_rotation ($scheduling_data)) { $this->code_version = $index + 1; break; } } } else { if ($unique) { $block_counter = isset ($ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number]) ? $ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number] : 0; $this->code_version = $ai_wp_data [AI_ROTATION_SEED] + $block_counter; if ($this->code_version > count ($ads)) $this->code_version -= count ($ads); } else $this->code_version = mt_rand (1, count ($ads)); } if ($this->code_version != 0) { $processed_code = trim ($ads [$this->code_version - 1]); $this->tracking_index = $tracking_indexes [$this->code_version - 1]; $this->version_name = $version_names [$this->code_version - 1]; } if (preg_match ($groups_marker, $processed_code, $matches)) { $ai_wp_data [AI_ACTIVE_GROUP_NAMES] = array_merge ($ai_wp_data [AI_ACTIVE_GROUP_NAMES], json_decode (base64_decode ($matches [1]))); $processed_code = preg_replace ($groups_marker, '', $processed_code); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ('GROUP NAMES SET: "' . implode (', ', $ai_wp_data [AI_ACTIVE_GROUP_NAMES]) . '"'); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $debug_list = new ai_block_labels ('ai-debug-iframe'); $processed_code = $debug_list->bar (__('ACTIVE GROUPS', 'ad-inserter') . ': ' . implode (', ', json_decode (base64_decode ($matches [1]))), '', '') . $processed_code; } } if ($processed_code == '') { $additional_code = ''; } break; case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW: case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT: $this->code_version = '""'; $this->tracking_index = '""'; $rotation_data = ''; if ($shares) { $rotation_data = " data-shares='".base64_encode (json_encode ($thresholds))."'"; } // Additional class to identify rotation code block in case of timed rotation $rotation_class = ''; if ($groups) { $rotation_class = ' ai-rotation-groups ai-'.$this->number; } if ($times) { // Add block insertion counter fo rrotation id - block might be inserted more than once and each insertion has different starting option and time $block_counter = 0; if (isset ($ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number])) { $block_counter = $ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number]; } $rotation_class .= ' ai-timed-rotation'; $rotation_class .= ' ai-'.$this->number.'-'.$block_counter; $rotation_data .= " data-info='".base64_encode ('["'.$this->number.'-'.$block_counter.'",'.count ($ads).']')."'"; } if ($scheduling) { $rotation_class .= ' ai-rotation-scheduling'; $gmt = get_option ('gmt_offset') * 3600 * 1000; $rotation_data .= " data-gmt='$gmt'"; } $processed_code = ''; if (($times || $scheduling) && !isset ($ai_wp_data [AI_CLIENT_SIDE_CSS])) { $processed_code = "\n"; } if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX) { $block_id = 'ai-rotate-' . $this->number . '-' . rand (1000, 9999) . rand (1000, 9999); $rotation_class = ' ' . $block_id . $rotation_class; } if ($unique) { $rotation_class .= ' ai-unique'; $block_counter = isset ($ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number]) ? $ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number] : 0; $rotation_data .= " data-counter='".$block_counter."'"; } if (defined ('AI_NORMAL_HEADER_STYLES') && AI_NORMAL_HEADER_STYLES && !get_inline_styles ()) { $processed_code .= "\n
\n"; } else $processed_code .= "\n
\n"; foreach ($ads as $index => $ad) { // If AMP separator is present use only code for normal pages if (strpos ($ad, AD_AMP_SEPARATOR) !== false) { $codes = explode (AD_AMP_SEPARATOR, $ad); $ad = trim ($codes [0]); } if (strpos ($ad, AD_HEAD_SEPARATOR) !== false) { $head_body_code = explode (AD_HEAD_SEPARATOR, $ad ); $ad = trim ($head_body_code [1]); // Insert all HEAD codes for all options into section // if ($ai_wp_data [AI_SHORTCODES]['head'][0]['group'] != '') { if ($this->shortcodes ['head'][0]['group'] != '') { // $ai_wp_data [AI_HEAD_GROUPS][strtolower ($ai_wp_data [AI_SHORTCODES]['head'][0]['group'])] []= trim ($head_body_code [0]); $ai_wp_data [AI_HEAD_GROUPS][strtolower ($this->shortcodes ['head'][0]['group'])] []= trim ($head_body_code [0]); } else $ai_wp_data [AI_HEAD_CODES] []= trim ($head_body_code [0]); } $ad = $this->ai_processViewportSeparators ($ad); $ad = $this->ai_processFallbackSeparator ($ad); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $debug_list = new ai_block_labels ('ai-debug-iframe'); if (preg_match ($groups_marker, $ad, $matches)) { $current_group_name = implode (', ', json_decode (base64_decode ($matches [1]))); } else $current_group_name = ''; $ad = preg_replace ("#()#", '$1' . $debug_list->bar (__('ACTIVE GROUPS', 'ad-inserter') . ': ' . $current_group_name, '', ''), $ad); } $tracking_index_data = ' data-index="'.$tracking_indexes [$index].'"'; $version_name_data = ' data-name="' .base64_encode ($version_names [$index]).'"'; $version_time_data = $version_times [$index] >= 0 ? ' data-time="'.base64_encode ($version_times [$index]).'"' : ''; $version_scheduling_data = $version_scheduling [$index] != - 1 ? ' data-scheduling="'.base64_encode ($version_scheduling [$index]).'"' : ''; $version_group_data = $groups ? ' data-group="'.base64_encode ($version_groups [$index]).'"' : ''; switch ($rotation_dynamic_blocks) { case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW: switch ($index) { case 0: if (defined ('AI_NORMAL_HEADER_STYLES') && AI_NORMAL_HEADER_STYLES && !get_inline_styles ()) { $processed_code .= "
\n".trim ($ad, "\n\r")."
\n"; } else $processed_code .= "\n"; break; default: if (defined ('AI_NORMAL_HEADER_STYLES') && AI_NORMAL_HEADER_STYLES && !get_inline_styles ()) { $processed_code .= "
\n".trim ($ad, "\n\r")."
\n"; } else $processed_code .= "\n"; break; } break; case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT: $version_code_data = ' data-code="'.base64_encode (ai_strip_js_markers ($ad)).'"'; $processed_code .= '
\n
\n"; break; } } $processed_code .= "
\n"; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME] && !get_disable_js_code ()) { // $processed_code .= "\n"; $processed_code .= "\n"; } break; case AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC: if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS ROTATE'; } if ($groups) { $ad_index_code = ' global $ai_groups; $ai_index = 0; if (isset ($ai_groups) && count ($ai_groups) != 0) {foreach ($ai_groups as $group_name) {foreach (unserialize (base64_decode (\''. base64_encode (serialize ($version_groups)).'\')) as $index => $version_group) {if ($version_group == trim ($group_name)) {$ai_index = $index + 1; break 2;}}}}'; } elseif ($shares) { $ad_index_code = ' $ai_random_threshold = mt_rand (0, 100); $ai_thresholds = unserialize (\''. serialize ($thresholds).'\'); foreach ($ai_thresholds as $ai_option_index => $ai_threshold) {$ai_index = $ai_option_index + 1; if ($ai_random_threshold <= $ai_threshold) break;}'; } elseif ($scheduling) { $ad_index_code = ' $ai_index = 0; $ai_scheduling_data = unserialize (\''. serialize ($version_scheduling).'\'); foreach ($ai_scheduling_data as $ai_option_index => $ai_scheduling_data_item) {if (check_scheduled_rotation ($ai_scheduling_data_item)) {$ai_index = $ai_option_index + 1; break;}}'; } elseif ($unique) { $ad_index_code = ' if (!defined (\'AI_W3TC_ROTATION_SEED\')) define (\'AI_W3TC_ROTATION_SEED\', mt_rand (1, time ()) % '.count ($ads).');'; $ad_index_code .= ' $ai_block_counter = '.(isset ($ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number]) ? $ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $this->number] : 0).';'; $ad_index_code .= ' $ai_index = AI_W3TC_ROTATION_SEED + $ai_block_counter; if ($ai_index > '.count ($ads).') $ai_index -= '.count ($ads).';'; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $ad_index_code .= 'ai_w3tc_log_run (\'PROCESS UNIQUE, SEED: \' . AI_W3TC_ROTATION_SEED . \', \' . $ai_block_counter);'; } } else $ad_index_code = ' $ai_index = mt_rand (1, '.count ($ads).');'; $this->w3tc_code .= '$ai_code = unserialize (base64_decode (\''.base64_encode (serialize ($ads)).'\'));'.$ad_index_code; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= 'ai_w3tc_log_run (\'PROCESS ROTATE: \' . $ai_index);'; } $this->w3tc_code .= ' if ($ai_index != 0) {$ai_dummy1 = $ai_dummy2 = null; $ai_code = ai_w3tc_execute_php ($ai_code [$ai_index - 1], $ai_dummy1, $ai_dummy2); $ai_enabled = true;} else {$ai_code = \'\'; $ai_enabled = false;}'; // Set $ai_version_name according to $ai_index and and $ai_index to the index for tracking $this->w3tc_code .= ' if ($ai_index != 0) {$version_names = unserialize (base64_decode (\''.base64_encode (serialize ($this->rotate_names)).'\')); $ai_version_name = $version_names [$ai_index - 1]; $tracking_indexes = unserialize (base64_decode (\''.base64_encode (serialize ($tracking_indexes)).'\')); $ai_index = $tracking_indexes [$ai_index - 1];'; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' ai_w3tc_log_run (\'TRACKING INDEX: \' . $ai_index . (isset ($ai_version_name) ? \' [\'.$ai_version_name.\']\' : \'\'));'; } $this->w3tc_code .= '}'; $this->w3tc_code .= ' if ($ai_enabled) {$groups_marker = base64_decode (\'' . base64_encode ($groups_marker) . '\'); global $ai_groups; if (preg_match ($groups_marker, $ai_code, $matches)) {if (!isset ($ai_groups)) $ai_groups = array (); $ai_groups = array_merge ($ai_groups, json_decode (base64_decode ($matches [1]))); $ai_code = preg_replace ($groups_marker, \'\', $ai_code);}}'; $processed_code = $this->generate_html_from_w3tc_code (); break; } } // [ADINSERTER AMP] // [ADINSERTER HEAD] $this->labels->class = 'ai-debug-default'; // If previously inserted block with AMP separator (multiple CHECK insertions) $amp_head_dynamic_blocks = $dynamic_blocks; if ($ai_wp_data [AI_FORCE_SERVERSIDE_CODE]) $amp_head_dynamic_blocks = AI_DYNAMIC_BLOCKS_SERVER_SIDE; elseif ($amp_head_dynamic_blocks == AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC && $this->w3tc_code == '') $amp_head_dynamic_blocks = AI_DYNAMIC_BLOCKS_SERVER_SIDE; elseif ($amp_head_dynamic_blocks == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW) $amp_head_dynamic_blocks = AI_DYNAMIC_BLOCKS_SERVER_SIDE; elseif ($amp_head_dynamic_blocks == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT) $amp_head_dynamic_blocks = AI_DYNAMIC_BLOCKS_SERVER_SIDE; switch ($amp_head_dynamic_blocks) { case AI_DYNAMIC_BLOCKS_SERVER_SIDE: if (strpos ($processed_code, AD_AMP_SEPARATOR) !== false) { $codes = explode (AD_AMP_SEPARATOR, $processed_code); $code_index = $ai_wp_data [AI_WP_AMP_PAGE] ? 1 : 0; $this->labels->class = $code_index ? 'ai-debug-amp' : 'ai-debug-default'; if ($code_index == 1) { ai_log ('BLOCK ' . $this->number . ' AMP CODE USED'); } $processed_code = trim ($codes [$code_index]); if ($this->empty_code ($processed_code)) { ai_log ('AMP SEPARATOR ' . ($ai_wp_data [AI_WP_AMP_PAGE] ? '[AMP]' : '[NORMAL]') . ': EMPTY CODE FOR BLOCK ' . $this->number); $this->code_empty = true; } } else { // AMP page but No AMP separator - don't insert the code unless enabled if ($ai_wp_data [AI_WP_AMP_PAGE]) { if (!$this->get_enable_amp ()) { $processed_code = ''; $additional_code = ''; $this->hide_debug_labels = true; ai_log ('BLOCK ' . $this->number . ' NOT ENABLED FOR AMP PAGES - EMPTY CODE'); $this->code_empty = true; } } } if (strpos ($processed_code, AD_HEAD_SEPARATOR) !== false) { ai_log ('BLOCK ' . $this->number . ' HEAD CODE'); $head_body_code = explode (AD_HEAD_SEPARATOR, $processed_code); $processed_code = trim ($head_body_code [1]); // $once = isset ($ai_wp_data [AI_SHORTCODES]['head'][0]['head']) && strtolower ($ai_wp_data [AI_SHORTCODES]['head'][0]['head']) == 'once'; $once = isset ($this->shortcodes ['head'][0]['head']) && strtolower ($this->shortcodes ['head'][0]['head']) == 'once'; if (!$once || !$this->head_code_written) { // if ($ai_wp_data [AI_SHORTCODES]['head'][0]['group'] != '') { if ($this->shortcodes ['head'][0]['group'] != '') { // $ai_wp_data [AI_HEAD_GROUPS][strtolower ($ai_wp_data [AI_SHORTCODES]['head'][0]['group'])] []= trim ($head_body_code [0], "\n\r"); $ai_wp_data [AI_HEAD_GROUPS][strtolower ($this->shortcodes ['head'][0]['group'])] []= trim ($head_body_code [0], "\n\r"); } else $ai_wp_data [AI_HEAD_CODES] []= trim ($head_body_code [0]); $this->head_code_written = true; } } // $processed_code = $additional_code . $processed_code; break; case AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC: if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS AMP, HEAD'; } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $this->labels->class = $ai_wp_data [AI_WP_AMP_PAGE] ? 'ai-debug-amp' : 'ai-debug-default'; } $this->w3tc_code .= '$ai_amp_separator = base64_decode (\'' . base64_encode (AD_AMP_SEPARATOR) . '\'); $ai_amp_page = ' . ($ai_wp_data [AI_WP_AMP_PAGE] ? 'true' : 'false') . '; $ai_amp_enabled = ' . $this->get_enable_amp () . ';'; $this->w3tc_code .= '$ai_dummy1 = $ai_dummy2 = null; $ai_code = ai_w3tc_execute_php ($ai_code, $ai_dummy1, $ai_dummy2);'; // Fix to prevent converting && into && on AMP pages // $this->w3tc_code .= 'if (strpos ($ai_code, $ai_amp_separator) !== false) {$codes = explode ($ai_amp_separator, $ai_code); $ai_code = trim ($codes [$ai_amp_page ? 1 : 0]); } else {if ($ai_amp_page && !$ai_amp_enabled) $ai_code = \'\';} $ai_enabled = true;'; $this->w3tc_code .= 'if (strpos ($ai_code, $ai_amp_separator) !== false) {$codes = explode ($ai_amp_separator, $ai_code); $ai_code = trim ($codes [$ai_amp_page ? 1 : 0]); } else {if ($ai_amp_page + !$ai_amp_enabled == 2) $ai_code = \'\';} $ai_enabled = true;'; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' ai_w3tc_log_run (\'PROCESS AMP: \' . ($ai_amp_page ? \'AMP PAGE\' : \'NORMAL PAGE\'));'; } // Process HEAD separator $this->w3tc_code .= '$ai_head_separator = base64_decode (\'' . base64_encode (AD_HEAD_SEPARATOR) . '\');'; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' ai_w3tc_log_run (\'PROCESS HEAD: \' . (strpos ($ai_code, $ai_head_separator) !== false ? \'CODE\' : \'-\'));'; } $this->w3tc_code .= 'if (strpos ($ai_code, $ai_head_separator) !== false) {$codes = explode ($ai_head_separator, $ai_code); $ai_code = trim ($codes [1]);} $ai_enabled = true;'; $processed_code = $this->generate_html_from_w3tc_code (); break; } // [ADINSERTER VIEWPORT] if ($this->w3tc_code != '') { // if (isset ($ai_wp_data [AI_SHORTCODES]['viewport'])) { if (isset ($this->shortcodes ['viewport'])) { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS VIEWPORT SEPARATORS'; } // $this->w3tc_code .= 'if ($ai_enabled) $ai_code = ai_process_viewport_separators ($ai_code, unserialize (base64_decode (\''.base64_encode (serialize ($ai_wp_data [AI_SHORTCODES]['viewport'])).'\')));'; $this->w3tc_code .= 'if ($ai_enabled) $ai_code = ai_process_viewport_separators ($ai_code, unserialize (base64_decode (\''.base64_encode (serialize ($this->shortcodes)).'\')));'; $processed_code = $this->generate_html_from_w3tc_code (); } } else $processed_code = $this->ai_processViewportSeparators ($processed_code); // [ADINSERTER FALLBACK] if ($this->w3tc_code != '') { if (isset ($this->shortcodes ['fallback'])) { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS FALLBACK SEPARATOR'; } $this->w3tc_code .= 'if ($ai_enabled) $ai_code = ai_process_fallback_separator ($ai_code, unserialize (base64_decode (\''.base64_encode (serialize ($this->shortcodes)).'\')));'; $processed_code = $this->generate_html_from_w3tc_code (); } } else $processed_code = $this->ai_processFallbackSeparator ($processed_code); } if ($this->check_block) { $this->check_block_additional_code = $additional_code; $additional_code = ''; } // Additional code (Ad label, close button, parallax backgrounds) if ($dynamic_blocks == AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC && $this->w3tc_code != '' && !defined ('AI_NO_W3TC') && $additional_code != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS ADDITIONAL CODE'; } $this->w3tc_code .= 'if ($ai_code != \'\') $ai_code = base64_decode (\''.base64_encode ($additional_code).'\') . $ai_code;'; $processed_code = $this->generate_html_from_w3tc_code (); } else $processed_code = $additional_code . $processed_code; if (!$ai_wp_data [AI_CODE_FOR_IFRAME] && !$ai_wp_data [AI_FORCE_SERVERSIDE_CODE]) { // PROTECTED if (function_exists ('ai_process_protected_code')) $processed_code = ai_process_protected_code ($this, $processed_code); // LAZY LOADING if ($this->get_lazy_loading () && !$ai_wp_data [AI_WP_AMP_PAGE]) { if ($this->w3tc_code != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS LAZY LOADING'; } } $lazy_code = $this->base64_encode_w3tc ($processed_code); $wrapper_class = base64_encode (get_block_class_name (true)); $processed_code = '
'."\n"; // Recreate W3TC code if ($this->w3tc_code != '') { $processed_code = $this->regenerate_w3tc_code ($processed_code); } } // MANUAL LOADING ENABLED if ($this->get_manual_loading () == AI_MANUAL_LOADING_ENABLED && !$ai_wp_data [AI_WP_AMP_PAGE]) { if ($this->w3tc_code != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS MANUAL LOADING ALWAYS'; } } $manual_code = $this->base64_encode_w3tc ($processed_code); $wrapper_class = base64_encode (get_block_class_name (true)); $processed_code = '
'."\n"; // Recreate W3TC code if ($this->w3tc_code != '') { $processed_code = $this->regenerate_w3tc_code ($processed_code); } } } if ($not_iframe_or_inside) { if (function_exists ('ai_adb_check') && !$ai_wp_data [AI_FORCE_SERVERSIDE_CODE] && $not_iframe_or_inside) $processed_code = ai_adb_check ($this, $processed_code); // Reset if multiple block insertions $this->client_side_list_detection = false; $lists_dynamic_blocks = $dynamic_blocks; // replace with $this->server_side_check if ($ai_wp_data [AI_FORCE_SERVERSIDE_CODE] || ($lists_dynamic_blocks == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW || $lists_dynamic_blocks == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT) && $ai_wp_data [AI_WP_AMP_PAGE]) $lists_dynamic_blocks = AI_DYNAMIC_BLOCKS_SERVER_SIDE; // LISTS, COOKIE, SCHEDULING if ($lists_dynamic_blocks != AI_DYNAMIC_BLOCKS_SERVER_SIDE) { // Url parameters, cookies, referrers, clients do { $scheduling_start_time = ''; $scheduling_end_time = ''; $scheduling_days_in_week = ''; $scheduling_type = null; $scheduling_fallback_block = 0; $check_again = false; if (isset ($this->check_url_parameters) || isset ($this->check_cookies) || isset ($this->check_referers) || isset ($this->check_clients) || isset ($this->check_scheduling_start_time)) { $url_parameters_raw = ''; $url_parameter_list_type = ''; $cookies_raw = ''; $cookie_list_type = ''; $referers_raw = ''; $referer_list_type = ''; $clients_raw = ''; $client_list_type = ''; if (isset ($this->check_url_parameters)) { $url_parameters_raw = trim ($this->check_url_parameters); $url_parameter_list_type = $this->check_url_parameter_list_type; } if (isset ($this->check_cookies)) { $cookies_raw = trim ($this->check_cookies); $cookie_list_type = $this->check_cookie_list_type; } if (isset ($this->check_referers)) { $referers_raw = trim (str_replace (' ', '', strtolower ($this->check_referers))); $referer_list_type = $this->check_referers_list_type; } if (isset ($this->check_clients)) { // $clients_raw = trim (str_replace (' ', '', strtolower ($this->check_clients))); $clients_raw = trim ($this->check_clients); $client_list_type = $this->check_clients_list_type; } if (isset ($this->check_scheduling_start_time)) { $scheduling_start_time_raw = trim ($this->check_scheduling_start_time); $scheduling_start_time = base64_encode ($scheduling_start_time_raw); $scheduling_end_time_raw = trim ($this->check_scheduling_end_time); $scheduling_end_time = base64_encode ($scheduling_end_time_raw); $scheduling_days_in_week_raw = $this->check_scheduling_days_in_week; $scheduling_days_in_week = base64_encode ($scheduling_days_in_week_raw); $scheduling_type = $this->check_scheduling_type; $scheduling_fallback_block = $this->check_scheduling_fallback_block; } unset ($this->check_url_parameters); unset ($this->check_url_parameter_list_type); unset ($this->check_cookies); unset ($this->check_cookie_list_type); unset ($this->check_referers); unset ($this->check_referers_list_type); unset ($this->check_clients); unset ($this->check_clients_list_type); unset ($this->check_scheduling_start_time); unset ($this->check_scheduling_end_time); unset ($this->check_scheduling_days_in_week); unset ($this->check_scheduling_type); unset ($this->check_scheduling_fallback_block); $check_again = true; } else { $url_parameters_raw = trim ($this->get_url_parameter_list ()); $url_parameter_list_type = $this->get_url_parameter_list_type (); $cookies_raw = trim ($this->get_cookie_list ()); $cookie_list_type = $this->get_cookie_list_type (); $referers_raw = trim (str_replace (' ', '', strtolower ($this->get_ad_domain_list ()))); $referer_list_type = $this->get_ad_domain_list_type (); // $clients_raw = trim (str_replace (' ', '', strtolower ($this->get_client_list ()))); $clients_raw = trim ($this->get_client_list ()); $client_list_type = $this->get_client_list_type (); switch ($this->get_scheduling ()) { case AI_SCHEDULING_BETWEEN_DATES: case AI_SCHEDULING_OUTSIDE_DATES: $scheduling_start_time_raw = trim ($this->get_schedule_start_date () . ' ' . $this->get_schedule_start_time ()); $scheduling_start_time = base64_encode ($scheduling_start_time_raw); $scheduling_end_time_raw = trim ($this->get_schedule_end_date () . ' ' . $this->get_schedule_end_time ()); $scheduling_end_time = base64_encode ($scheduling_end_time_raw); $scheduling_days_in_week_raw = $this->get_schedule_weekdays (); $scheduling_days_in_week = base64_encode ($scheduling_days_in_week_raw); $scheduling_type = $this->get_scheduling(); $scheduling_fallback_block = intval ($this->get_scheduling_fallback()); break; } } $url_parameters = base64_encode (html_entity_decode ($url_parameters_raw)); $cookies = base64_encode (html_entity_decode ($cookies_raw)); $referers = base64_encode ($referers_raw); $clients = base64_encode (html_entity_decode ($clients_raw)); if (($this->client_side_cookie_check_url && $url_parameters != '') || ($this->client_side_cookie_check && $cookies != '') || $referers != '' || $clients != '' || $scheduling_type !== null) { switch ($dynamic_blocks) { case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW: case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT: if ($url_parameter_list_type == AI_BLACK_LIST) $url_parameter_list_type = 'B'; else $url_parameter_list_type = 'W'; if ($cookie_list_type == AI_BLACK_LIST) $cookie_list_type = 'B'; else $cookie_list_type = 'W'; if ($referer_list_type == AI_BLACK_LIST) $referer_list_type = 'B'; else $referer_list_type = 'W'; if ($client_list_type == AI_BLACK_LIST) $client_list_type = 'B'; else $client_list_type = 'W'; if ($scheduling_type == AI_SCHEDULING_OUTSIDE_DATES) { $scheduling_type_code = 'B'; $scheduling_type_text = 'OUT'; } else { $scheduling_type_code = 'W'; $scheduling_type_text = 'IN'; } $gmt = get_option ('gmt_offset') * 3600 * 1000; $fallback_code = ''; $fallback_code_data = ''; $fallback_block_data = 0; $fallback_level = ''; $fallback_tracking_data = ''; if ($scheduling_type !== null) { $fallback_block = $scheduling_fallback_block; if ($fallback_block != $this->number && $fallback_block >= 1 && $fallback_block <= 96) { $globals_name = AI_FALLBACK_DEPTH_NAME; if (!isset ($ad_inserter_globals [$globals_name])) { $ad_inserter_globals [$globals_name] = 0; } if ($ad_inserter_globals [$globals_name] < 3) { $ad_inserter_globals [$globals_name] ++; $fallback_level = $ad_inserter_globals [$globals_name]; $fallback_block_data = $fallback_block; $fallback_obj = $block_object [$fallback_block]; $fallback_code = $fallback_obj->ai_getProcessedCode (); $fallback_code_data = " data-fallback-code='" . base64_encode ($fallback_code) . "'"; $fallback_tracking_block = $fallback_obj->get_tracking () ? $fallback_obj->number : 0; // $fallback_tracking_data = base64_encode ("[{$fallback_tracking_block},{$fallback_obj->code_version},\"{$fallback_obj->get_ad_name ()}\",\"{$fallback_obj->version_name}\"]"); $fallback_tracking_data = base64_encode ("[{$fallback_tracking_block},{$fallback_obj->tracking_index},\"{$fallback_obj->get_ad_name ()}\",\"{$fallback_obj->version_name}\"]"); $ad_inserter_globals [$globals_name] --; } } } if ($this->client_side_cookie_check_url && $url_parameters != '') $url_parameter_attributes = " parameter-list='$url_parameters' parameter-list-type='$url_parameter_list_type'"; else $url_parameter_attributes = ''; if ($this->client_side_cookie_check && $cookies != '') $cookie_attributes = " cookie-list='$cookies' cookie-list-type='$cookie_list_type'"; else $cookie_attributes = ''; if ( $referers != '') $referer_attributes = " referer-list='$referers' referer-list-type='$referer_list_type'"; else $referer_attributes = ''; if ( $clients != '') $client_attributes = " client-list='$clients' client-list-type='$client_list_type'"; else $client_attributes = ''; if ($scheduling_type !== null ) $scheduling_attributes = " scheduling-start='$scheduling_start_time' scheduling-end='$scheduling_end_time' scheduling-days='$scheduling_days_in_week' scheduling-type='$scheduling_type_code' gmt='$gmt' scheduling-fallback='$fallback_block_data' fallback_level='$fallback_level' fallback-tracking='$fallback_tracking_data'"; else $scheduling_attributes = ''; // Deprecated $this->client_side_list_detection = true; // ??? If $ai_wp_data [AI_WP_AMP_PAGE] is set it will not get here if ($ai_wp_data [AI_WP_AMP_PAGE]) $this->needs_class = true; // Hide block only when no block height is defined - for check options don't hide the first one if (trim ($this->get_block_height ()) == '' || isset ($this->check_codes) && $this->check_codes_index != 0) { $this->wrapping_div_classes []= 'ai-list-block'; } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $debug_id = 'ai-debug-info-' . $this->number . '-' . rand (1000, 9999) . rand (1000, 9999); $debug_id_data = " data-debug-info='$debug_id'"; } else $debug_id_data = ''; switch ($dynamic_blocks) { case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW: if (($url_parameter_attributes != '' || $cookie_attributes != '') && $this->get_manual_loading () == AI_MANUAL_LOADING_AUTO) { $list_class = ' ai-list-manual'; } else $list_class = ''; $processed_code = "\n
{$processed_code}
\n"; if ($scheduling_type !== null) { $processed_code .= "
{$fallback_code}
\n"; } break; case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT: $code_data = " data-code='".base64_encode ($processed_code)."'"; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { $block_id = 'ai-list-' . $this->number . '-' . rand (1000, 9999) . rand (1000, 9999); $list_class = ' ' . $block_id ; } else $list_class = ''; if (($url_parameter_attributes != '' || $cookie_attributes != '') && $this->get_manual_loading () == AI_MANUAL_LOADING_AUTO) { $list_class .= ' ai-list-manual'; } $processed_code = "\n
\n"; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME] && !get_disable_js_code ()) { // $processed_code .= "\n"; $processed_code .= "\n"; } break; } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { if ($scheduling_type !== null) { $scheduling_attributes_dbg = sprintf (__ ("start='%s' end='%s' days='%s' type='%s'", 'ad-inserter'), $scheduling_start_time_raw, $scheduling_end_time_raw, $scheduling_days_in_week_raw, $scheduling_type_text); $debug_scheduling = new ai_block_labels ('ai-debug-scheduling'); $debug_processed_code = $debug_scheduling->bar ($scheduling_attributes_dbg, 'OUT = ' . AI_TEXT_INSERT_OUTSIDE_DATES .', IN = ' . AI_TEXT_INSERT_BETWEEN_DATES, '', ''); $processed_code = $debug_processed_code . $processed_code; } if ($this->client_side_cookie_check_url && ($url_parameters != '')) $url_parameter_attributes_dbg = sprintf (__ ("parameters='%s' type='%s'", 'ad-inserter'), $url_parameters_raw, $url_parameter_list_type); else $url_parameter_attributes_dbg = ''; if ($this->client_side_cookie_check && ($cookies != '')) $cookie_attributes_dbg = sprintf (__ ("cookies='%s' type='%s'", 'ad-inserter'), $cookies_raw, $cookie_list_type); else $cookie_attributes_dbg = ''; // translators: %s: list parameters and type if ( $referers != '') $referer_attributes_dbg = sprintf (__ ("referers='%s' type='%s'", 'ad-inserter'), $referers_raw, $referer_list_type); else $referer_attributes_dbg = ''; // translators: %s: list parameters and type if ( $clients != '') $client_attributes_dbg = sprintf (__ ("clients='%s' type='%s'", 'ad-inserter'), $clients_raw, $client_list_type); else $client_attributes_dbg = ''; if ($url_parameter_attributes_dbg != '' || $cookie_attributes_dbg != '' || $referer_attributes_dbg != '' || $client_attributes_dbg) { $debug_list = new ai_block_labels ('ai-debug-lists'); $debug_processed_code = $debug_list->bar ($url_parameter_attributes_dbg . ' ' . $cookie_attributes_dbg . ' ' . $referer_attributes_dbg . ' ' . $client_attributes_dbg, 'B = ' . AI_TEXT_BLACK_LIST .', W = ' . AI_TEXT_WHITE_LIST, '', ''); $processed_code = $debug_processed_code . $processed_code; } if ($url_parameter_attributes_dbg != '' && ($this->get_manual_loading () == AI_MANUAL_LOADING_AUTO || strpos ($url_parameters_raw, 'tcf-') !== false || strpos ($url_parameters_raw, 'euconsent-v2') !== false) || $cookie_attributes_dbg != '' && ($this->get_manual_loading () == AI_MANUAL_LOADING_AUTO || strpos ($cookies_raw, 'tcf-') !== false || strpos ($cookies_raw, 'euconsent-v2') !== false)) { $debug_manual_loading = new ai_block_labels ('ai-debug-lists'); $version_name = $this->version_name == '' ? '' : ' - ' . $this->version_name; $block_name = $this->number . '   ' . $this->get_ad_name () . '' . $version_name . ''; $status = $this->get_manual_loading () == AI_MANUAL_LOADING_AUTO ? 'MANUAL LOADING' : 'NOT ENABLED'; // Debugging label before the hidden block in case manual loading is set to Auto and the block has not been enabled yet $this->additional_code_before_block = $debug_manual_loading->bar ($block_name, '', 'NOT LOADED', $status, '', $debug_id); } } break; case AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC: if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS LISTS'; } $this->generate_w3tc_code_from_html ($processed_code); if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' ai_w3tc_log_run (\'PROCESS LISTS\' . ($ai_enabled ? \'\' : \', NOT ENABLED\'));'; } if ($referers != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_enabled) ai_w3tc_log_run (\' REFERRERS: \\\'\' . base64_decode (\'' . $referers . '\').\'\\\' ' . ($referer_list_type == AI_WHITE_LIST ? 'W':'B'). '\');'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (\' FAILED\', \'color: red;\');'; } else $w3tc_status = ''; $this->w3tc_code .= ' if ($ai_enabled) {$ai_enabled = check_referer_list (base64_decode (\''.$referers.'\'), '.($referer_list_type == AI_WHITE_LIST ? 'true':'false').');'.$w3tc_status.'};'; } if ($clients != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_enabled) ai_w3tc_log_run (\' CLIENTS: \\\'\' . base64_decode (\'' . $clients . '\').\'\\\' ' . ($client_list_type == AI_WHITE_LIST ? 'W':'B'). '\');'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (\' FAILED\', \'color: red;\');'; } else $w3tc_status = ''; $this->w3tc_code .= ' if ($ai_enabled) {$ai_enabled = check_client_list (base64_decode (\''.$clients.'\'), '.($client_list_type == AI_WHITE_LIST ? 'true':'false').');'.$w3tc_status.'};'; } if ($this->client_side_cookie_check_url) { if ($url_parameters != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_enabled) ai_w3tc_log_run (\' URL PARAMETERS: \\\'\' . base64_decode (\'' . $url_parameters . '\').\'\\\' ' . ($url_parameter_list_type == AI_WHITE_LIST ? 'W':'B'). '\');'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (" FAILED", "color: red;");'; } else $w3tc_status = ''; $this->w3tc_code .= ' if ($ai_enabled) {$ai_enabled = check_cookie_list (base64_decode (\''.$url_parameters.'\'), '.($url_parameter_list_type == AI_WHITE_LIST ? 'true':'false').');'.$w3tc_status.'};'; } } if ($this->client_side_cookie_check) { if ($cookies != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_enabled) ai_w3tc_log_run (\' COOKIES: \\\'\' . base64_decode (\'' . $cookies . '\').\'\\\' ' . ($cookie_list_type == AI_WHITE_LIST ? 'W':'B'). '\');'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (" FAILED", "color: red;");'; } else $w3tc_status = ''; $this->w3tc_code .= ' if ($ai_enabled) {$ai_enabled = check_cookie_list (base64_decode (\''.$cookies.'\'), '.($cookie_list_type == AI_WHITE_LIST ? 'true':'false').');'.$w3tc_status.'};'; } } if ($scheduling_type !== null) { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_enabled) ai_w3tc_log_run (\' SCHEDULING: \' . base64_decode (\'' . $scheduling_start_time . '\') . \', \' . base64_decode (\'' . $scheduling_end_time . '\'). \' [\' . base64_decode (\'' . $scheduling_days_in_week . '\') . \'] ' . ($scheduling_type == AI_SCHEDULING_BETWEEN_DATES ? 'IN':'OUT'). '\');'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (\' FAILED\', \'color: red;\');'; } else $w3tc_status = ''; $fallback_block = intval ($this->get_scheduling_fallback()); if ($fallback_block != $this->number && $fallback_block >= 1 && $fallback_block <= 96) { $fallback_obj = $block_object [$fallback_block]; $fallback_obj->hide_debug_labels = true; $fallback_block_code = base64_encode ($fallback_obj->ai_getProcessedCode ()); // Encode HTML + W3TC PHP $fallback_obj->hide_debug_labels = false; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $w3tc_fallback_status = ' ai_w3tc_log_run (\' FALLBACK BLOCK: ' . $fallback_block . '\');'; array_unshift ($fallback_obj->w3tc_debug, 'FALLBACK BLOCK ' . $fallback_block); $fallback_obj->w3tc_debug []= 'FALLBACK BLOCK END'; $this->w3tc_debug = array_merge ($this->w3tc_debug, $fallback_obj->w3tc_debug); } else $w3tc_fallback_status = ''; if ($fallback_obj->get_tracking ()) { $fallback_tracking_block = $fallback_block; } else $fallback_tracking_block = '0'; $fallback_code = ' if (!$ai_enabled) {'.$w3tc_fallback_status.' $ai_enabled = true; if (!isset ($ai_index)) $ai_index = 0; $ai_fallback = '.$fallback_tracking_block.'; $ai_code = ai_w3tc_execute_php (base64_decode (\''. $fallback_block_code . '\'), $ai_index, $ai_fallback);}'; } else $fallback_code = ''; $this->w3tc_code .= ' if ($ai_enabled) {$ai_enabled = check_scheduling_time (base64_decode (\''. $scheduling_start_time.'\'), base64_decode (\''.$scheduling_end_time.'\'), base64_decode (\''.$scheduling_days_in_week.'\'), '.($scheduling_type == AI_SCHEDULING_BETWEEN_DATES ? 'true':'false').');' . $w3tc_status . $fallback_code . '};'; } $processed_code = $this->generate_html_from_w3tc_code (); break; } } } while ($check_again); // Countries, IP addresses do { $check_again = false; if (isset ($this->check_countries) || isset ($this->check_ip_addresses)) { $countries = ''; $country_list_type = ''; $ip_addresses = ''; $ip_address_list_type = ''; if (isset ($this->check_countries)) { $countries = trim (strtoupper ($this->check_countries)); $country_list_type = $this->check_countries_list_type; } if (isset ($this->check_ip_addresses)) { $ip_addresses = trim (str_replace (' ', '', strtolower ($this->check_ip_addresses))); $ip_address_list_type = $this->check_ip_addresses_list_type; } unset ($this->check_countries); unset ($this->check_countries_list_type); unset ($this->check_ip_addresses); unset ($this->check_ip_addresses_list_type); $check_again = true; } else { $countries = trim (strtoupper ($this->get_ad_country_list (true))); $country_list_type = $this->get_ad_country_list_type (); $ip_addresses = trim (str_replace (' ', '', strtolower ($this->get_ad_ip_address_list ()))); $ip_address_list_type = $this->get_ad_ip_address_list_type (); } // $countries = trim (strtoupper (isset ($this->check_countries) ? $this->check_countries : $this->get_ad_country_list (true))); // $country_list_type = isset ($this->check_countries_list_type) ? $this->check_countries_list_type : $this->get_ad_country_list_type (); // $ip_addresses = trim (str_replace (' ', '', strtolower (isset ($this->check_ip_addresses) ? $this->check_ip_addresses : $this->get_ad_ip_address_list ()))); // $ip_address_list_type = isset ($this->check_ip_addresses_list_type) ? $this->check_ip_addresses_list_type : $this->get_ad_ip_address_list_type (); if ($countries != '' || $ip_addresses != '') { switch ($dynamic_blocks) { case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW: case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT: if ($country_list_type == AI_BLACK_LIST) $country_list_type = 'B'; else $country_list_type = 'W'; if ($ip_address_list_type == AI_BLACK_LIST) $ip_address_list_type = 'B'; else $ip_address_list_type = 'W'; if ($countries != '') $country_attributes = "countries='$countries' country-list='$country_list_type'"; else $country_attributes = ''; if ($ip_addresses != '') $ip_address_attributes = "ip-addresses='$ip_addresses' ip-address-list='$ip_address_list_type'"; else $ip_address_attributes = ''; // Deprecated $this->client_side_list_detection = true; // ??? If $ai_wp_data [AI_WP_AMP_PAGE] is set it will not get here if ($ai_wp_data [AI_WP_AMP_PAGE]) $this->needs_class = true; // Hide block only when no block height is defined - for check options don't hide the first one if (trim ($this->get_block_height ()) == '' || isset ($this->check_codes) && $this->check_codes_index != 0) { $this->wrapping_div_classes []= 'ai-list-block-ip'; } switch ($dynamic_blocks) { case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW: $processed_code = "\n
$processed_code
\n"; break; case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT: $code_data = "data-code='".base64_encode ($processed_code)."'"; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { $block_id = 'ai-ip-' . $this->number . '-' . rand (1000, 9999) . rand (1000, 9999); $ip_class = ' ' . $block_id ; } else $ip_class = ''; $processed_code = "\n
\n"; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME] && function_exists ('add_footer_inline_scripts_2') && !get_disable_js_code ()) { // $processed_code .= "\n"; $processed_code .= "\n"; } break; } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { // translators: %s: list parameters and type if ($countries != '' ) $country_attributes_dbg = sprintf (__("countries='%s' type='%s'", 'ad-inserter'), $countries, $country_list_type); else $country_attributes_dbg = ''; // translators: %s: list parameters and type if ($ip_addresses != '' ) $ip_address_attributes_dbg = sprintf (__("ip addresses='%s' type='%s'", 'ad-inserter'), $ip_addresses, $ip_address_list_type); else $ip_address_attributes_dbg = ''; $debug_ip = new ai_block_labels ('ai-debug-lists'); $processed_code = $debug_ip->bar ($country_attributes_dbg . ' ' . $ip_address_attributes_dbg, 'B = ' . AI_TEXT_BLACK_LIST .', W = ' . AI_TEXT_WHITE_LIST, '', '') . $processed_code; } break; case AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC: if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS IP ADDRESSES'; } $this->generate_w3tc_code_from_html ($processed_code); $this->w3tc_code .= ' require_once \''.AD_INSERTER_PLUGIN_DIR.'includes/geo/Ip2Country.php\';'; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_enabled) ai_w3tc_log_run (\'PROCESS IP ADDRESSES\' . ($ai_enabled ? \'\' : \', NOT ENABLED\'));'; } if ($ip_addresses != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_enabled) ai_w3tc_log_run (\' IP ADDRESSES: \\\'\' . base64_decode (\'' . base64_encode ($ip_addresses) . '\').\'\\\' ' . ($ip_address_list_type == AI_WHITE_LIST ? 'W':'B'). '\');'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (\' FAILED\', \'color: red;\');'; } else $w3tc_status = ''; $this->w3tc_code .= ' if ($ai_enabled) {$ai_enabled = check_ip_address_list (base64_decode (\''.base64_encode ($ip_addresses).'\'), '.($ip_address_list_type == AI_WHITE_LIST ? 'true':'false').');'.$w3tc_status.'};'; } if ($countries != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_enabled) ai_w3tc_log_run (\' COUNTRIES: \\\'\' . base64_decode (\'' . base64_encode ($countries) . '\').\'\\\' ' . ($country_list_type == AI_WHITE_LIST ? 'W':'B'). '\');'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (\' FAILED\', \'color: red;\');'; } else $w3tc_status = ''; $this->w3tc_code .= ' if ($ai_enabled) {$ai_enabled = check_country_list (base64_decode (\''.base64_encode ($countries).'\'), '.($country_list_type == AI_WHITE_LIST ? 'true':'false').');'.$w3tc_status.'};'; } $processed_code = $this->generate_html_from_w3tc_code (); break; } } } while ($check_again); } // Viewports if (!$ai_wp_data [AI_FORCE_SERVERSIDE_CODE] && !$ai_wp_data [AI_WP_AMP_PAGE]) { $viewports_code = false; do { $check_again = false; if (isset ($this->check_viewports)) { $viewports = $this->check_viewports; $viewport_list_type = $this->check_viewports_list_type; unset ($this->check_viewports); unset ($this->check_viewports_list_type); // Not needed as only check possible is from the CHECK separator // $check_again = true; } else { $viewports = ''; $viewport_list_type = ''; } if ($viewports != '') { $separator_viewports = explode (',', strtolower ($viewports)); foreach ($separator_viewports as $index => $separator_viewport) { $separator_viewports [$index] = trim ($separator_viewport); } $viewport_classes = ''; $invisible_viewport_classes = ''; for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = strtolower (get_viewport_name ($viewport)); $viewport_width = get_viewport_width ($viewport); if ($viewport_name != '') { $viewport_found = in_array ($viewport_name, $separator_viewports); if ($viewport_list_type == AI_BLACK_LIST) { $viewport_found = !$viewport_found; } if ($viewport_found) { $viewport_classes .= " ai-viewport-" . $viewport; } else { $invisible_viewport_classes .= " ai-viewport-" . $viewport; } } } if ($ai_wp_data [AI_CODE_FOR_IFRAME]) { $viewport_classes = ''; $invisible_viewport_classes = 'ai-viewport-0'; } elseif ($viewport_classes == '') { $viewport_classes = 'ai-viewport-0'; $invisible_viewport_classes = ''; } elseif ($invisible_viewport_classes == '') { $viewport_classes = ''; $invisible_viewport_classes = 'ai-viewport-0'; } $viewport_classes = trim ($viewport_classes); $invisible_viewport_classes = trim ($invisible_viewport_classes); if ($viewport_classes != '') { $viewport_class = " class='" . $viewport_classes . "'"; } else $viewport_class = ''; $invisible_label = ''; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { if ($viewport_list_type == AI_BLACK_LIST) $list_type = 'B'; else $list_type = 'W'; $invisible_label_classes = $dynamic_blocks == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT ? '' : $invisible_viewport_classes; $invisible_debug_viewport = new ai_block_labels ('ai-debug-viewport-invisible '. $invisible_label_classes); $invisible_label = $invisible_debug_viewport->bar (sprintf (__("viewport='%s' type='%s'", 'ad-inserter'), $viewports, $list_type), '', _x('HIDDEN', 'Block', 'ad-inserter'), ' '); $debug_viewport = new ai_block_labels ('ai-debug-lists'); $processed_code = $debug_viewport->bar (sprintf (__("viewport='%s' type='%s'", 'ad-inserter'), $viewports, $list_type), '', _x('VISIBLE', 'Block', 'ad-inserter'), ' ') . $processed_code; } $viewports_code = true; // All viewports selected if ($viewport_classes == '' && $invisible_viewport_classes == 'ai-viewport-0') { // $processed_code already contains code for isnertion } else // No viewport selected if ($viewport_classes == 'ai-viewport-0' && $invisible_viewport_classes == '') { $processed_code = $invisible_label; } else if ($dynamic_blocks == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT) { $class_id = 'ai-insert-' . $this->number . '-' . rand (1000, 9999) . rand (1000, 9999); if ($viewport_classes != '') { $viewport_classes = 'ai-viewports ' . $viewport_classes; } $ai_code = $this->base64_encode_w3tc (ai_strip_w3tc_markers ($processed_code), false); // Use W3TC code in case W3TC was used before and insert was specified for CHECK $processed_code = "
\n"; if (!get_disable_js_code ()) { $js_code = "ai_insert_list_code ('{$class_id}');"; $processed_code .= $this->ai_js_dom_ready ($js_code); if ($invisible_label != '') { if ($invisible_viewport_classes != '') { $invisible_viewport_classes = 'ai-viewports ' . $invisible_viewport_classes . ' '; } $ai_dbg_code = base64_encode ($invisible_label); $processed_code .= "
\n"; $js_code = "ai_insert_code_by_class ('{$class_id}-dbg');"; $processed_code .= $this->ai_js_dom_ready ($js_code); } } } else { if ($this->get_alignment_type () == AI_ALIGNMENT_NO_WRAPPING || $invisible_label != '') { if ($viewport_class != '') { $processed_code = $invisible_label . "\n" . $processed_code . "\n
\n"; } else $processed_code = $invisible_label . $processed_code; } else $this->wrapping_div_classes = array_merge ($this->wrapping_div_classes, explode (' ', $viewport_classes)); } } } while ($check_again); // Recreate W3TC code if ($viewports_code && $this->w3tc_code != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS VIEWPORT CHECKS'; } $processed_code = $this->regenerate_w3tc_code ($processed_code); } } // LIMITS + COOKIE if ($check_block_code && !$ai_wp_data [AI_FORCE_SERVERSIDE_CODE] && !$ai_wp_data [AI_WP_AMP_PAGE]) { // Check for cookie if (get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC && !defined ('AI_NO_W3TC')) { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS LIMITS AND COOKIE'; $this->generate_w3tc_code_from_html ($processed_code); $this->w3tc_code .= 'if ($ai_enabled) ai_w3tc_log_run (\'PROCESS LIMITS AND COOKIE\');'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (\' FAILED\', \'color: red;\');'; } else $w3tc_status = ''; $fallback_block = intval ($this->get_limits_fallback ()); if ($fallback_block != $this->number && $fallback_block >= 1 && $fallback_block <= 96) { $fallback_obj = $block_object [$fallback_block]; $fallback_obj->hide_debug_labels = true; $fallback_block_code = base64_encode ($fallback_obj->ai_getProcessedCode ()); // Encode HTML + W3TC PHP $fallback_obj->hide_debug_labels = false; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $w3tc_fallback_status = ' ai_w3tc_log_run (\' FALLBACK BLOCK: ' . $fallback_block . '\');'; array_unshift ($fallback_obj->w3tc_debug, 'FALLBACK BLOCK ' . $fallback_block); $fallback_obj->w3tc_debug []= 'FALLBACK BLOCK END'; $this->w3tc_debug = array_merge ($this->w3tc_debug, $fallback_obj->w3tc_debug); } else $w3tc_fallback_status = ''; if ($fallback_obj->get_tracking ()) { $fallback_tracking_block = $fallback_block; } else $fallback_tracking_block = '0'; $fallback_code = ' if (!$ai_enabled) {'.$w3tc_fallback_status.' $ai_enabled = true; if (!isset ($ai_index)) $ai_index = 0; $ai_fallback = '.$fallback_tracking_block.'; $ai_code = ai_w3tc_execute_php (base64_decode (\''. $fallback_block_code . '\'), $ai_index, $ai_fallback);}'; } else $fallback_code = ''; $this->generate_w3tc_code_from_html ($processed_code); $this->w3tc_code .= $ai_check_block_w3tc_code; $this->w3tc_code .= 'if ($ai_enabled) {$ai_enabled = ai_check_impression_and_click_limits (' . $this->number . ', false); if ($ai_enabled) {$ai_enabled = ai_check_block (' . $this->number . ');}; '. $w3tc_status . $fallback_code . '};'; $processed_code = $this->generate_html_from_w3tc_code (); } else { $debug_html_code = ''; $block_id = $this->number . '-' . rand (1000, 9999) . rand (1000, 9999); $fallback_data = ''; $fallback_block = $this->get_limits_fallback (); if ($fallback_block != $this->number && $fallback_block >= 1 && $fallback_block <= 96) { $globals_name = AI_FALLBACK_DEPTH_NAME; if (!isset ($ad_inserter_globals [$globals_name])) { $ad_inserter_globals [$globals_name] = 0; } if ($ad_inserter_globals [$globals_name] < 3) { $ad_inserter_globals [$globals_name] ++; $fallback_level = $ad_inserter_globals [$globals_name]; $fallback_obj = $block_object [$fallback_block]; $fallback_code = $fallback_obj->ai_getProcessedCode (); $fallback_tracking_block = $fallback_obj->get_tracking () ? $fallback_obj->number : 0; // $fallback_tracking_data = base64_encode ("[{$fallback_tracking_block},{$fallback_obj->code_version},\"{$fallback_obj->get_ad_name ()}\",\"{$fallback_obj->version_name}\"]"); $fallback_tracking_data = base64_encode ("[{$fallback_tracking_block},{$fallback_obj->tracking_index},\"{$fallback_obj->get_ad_name ()}\",\"{$fallback_obj->version_name}\"]"); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $debug_fallback = new ai_block_labels ('ai-debug-fallback'); $debug_fallback_code = $debug_fallback->bar ('', '', _x ('FALLBACK', 'alternative block', 'ad-inserter') . " = {$fallback_block}", ''); } else $debug_fallback_code = ''; $fallback_data = " data-fallback-code='" . base64_encode ($debug_fallback_code . $fallback_code) . "' limits-fallback='$fallback_block' fallback_level='$fallback_level' fallback-tracking='$fallback_tracking_data'"; $ad_inserter_globals [$globals_name] --; } } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $debug_label = new ai_block_labels ('ai-debug-cookie'); $debug_html_code = $debug_label->block_start () . $debug_label->bar ('COOKIE CHECK', '', '', '', '', 'ai-check-' . $block_id . '-dbg') . $debug_label->block_end (); } $processed_code = $debug_html_code . "
{$ai_check_block_html_code}
\n"; if (!get_disable_js_code ()) { $js_code = "{$ai_check_block_js_code}ai_check_and_insert_block ({$this->number}, 'ai-check-{$block_id}');"; $processed_code .= $this->ai_js_dom_ready ($js_code); } } } // FILTER HOOK if ($this->client_side_filter_hook_check && !$ai_wp_data [AI_FORCE_SERVERSIDE_CODE] && !$ai_wp_data [AI_WP_AMP_PAGE]) { // Check filter hook if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $debug_label = new ai_block_labels ('ai-debug-filter'); $debug_html_code = $debug_label->bar ('FILTER HOOK CHECK', '', '', 'ai_block_insertion_check'); } else $debug_html_code = ''; $dynamic_blocks_filetr_check = $dynamic_blocks; if ($dynamic_blocks_filetr_check == AI_DYNAMIC_BLOCKS_SERVER_SIDE && $this->client_side_filter_hook_check) { // if filter ai_block_insertion_check returns null on server-side check, it means it needs client-side check $dynamic_blocks_filetr_check = AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT; } switch ($dynamic_blocks_filetr_check) { case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW: // Hide block only when no block height is defined - for check options don't hide the first one if (trim ($this->get_block_height ()) == '' || isset ($this->check_codes) && $this->check_codes_index != 0) { $this->wrapping_div_classes []= 'ai-list-block-filter'; } $processed_code = $debug_html_code . "\n
$processed_code
\n"; break; case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT: // Hide block only when no block height is defined - for check options don't hide the first one if (trim ($this->get_block_height ()) == '' || isset ($this->check_codes) && $this->check_codes_index != 0) { $this->wrapping_div_classes []= 'ai-list-block-filter'; } $code_data = "data-code='".base64_encode ($processed_code)."'"; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { $block_id = 'ai-filter-' . $this->number . '-' . rand (1000, 9999) . rand (1000, 9999); $filter_class = ' ' . $block_id ; } else $filter_class = ''; $processed_code = $debug_html_code . "\n
\n"; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME] && !get_disable_js_code ()) { // $processed_code .= "\n"; $processed_code .= "\n"; } break; case AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC: if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS FILTER HOOK'; $this->generate_w3tc_code_from_html ($processed_code); $this->w3tc_code .= 'if ($ai_enabled) ai_w3tc_log_run (\'PROCESS FILTER HOOK: \' . (ai_check_filter_hook (' . $this->number . ') ? \'ENABLED\' : \'NOT ENABLED\'));'; $w3tc_status = ' if (!$ai_enabled) ai_w3tc_log_run (\' FAILED\', \'color: red;\');'; } else $w3tc_status = ''; $this->generate_w3tc_code_from_html ($processed_code); $this->w3tc_code .= $ai_check_block_w3tc_code; $this->w3tc_code .= 'if ($ai_enabled) {$ai_enabled = ai_check_filter_hook (' . $this->number . ');'.$w3tc_status.'};'; $processed_code = $this->generate_html_from_w3tc_code (); break; } } } if (!$ai_wp_data [AI_CODE_FOR_IFRAME] && !$ai_wp_data [AI_FORCE_SERVERSIDE_CODE]) { // DELAY if ((int) $this->get_delay_time () != 0 && !$ai_wp_data [AI_WP_AMP_PAGE]) { if ($this->w3tc_code != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS DELAY'; } } $manual_code = $this->base64_encode_w3tc ($processed_code); $wrapper_class = base64_encode (get_block_class_name (true)); $processed_code = '
'."\n"; // Recreate W3TC code if ($this->w3tc_code != '') { $processed_code = $this->regenerate_w3tc_code ($processed_code); } } // WAIT FOR INTERACTION if ($this->get_wait_for_interaction () && !$ai_wp_data [AI_WP_AMP_PAGE]) { if ($this->w3tc_code != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS WAIT FOR INTERACTION'; } } $manual_code = $this->base64_encode_w3tc ($processed_code); $wrapper_class = base64_encode (get_block_class_name (true)); $processed_code = '
'."\n"; // Recreate W3TC code if ($this->w3tc_code != '') { $processed_code = $this->regenerate_w3tc_code ($processed_code); } } // CHECK RECAPTCHA SCORE if (function_exists ('get_recaptcha_site_key')) { if ($this->get_check_recaptcha_score () && !$ai_wp_data [AI_WP_AMP_PAGE] && trim (get_recaptcha_site_key ()) != '' && trim (get_recaptcha_secret_key ()) != '' && is_numeric (get_recaptcha_threshold ())) { if ($this->w3tc_code != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_debug []= 'PROCESS CHECK FOR RECAPTCHA SCORE'; } } $manual_code = $this->base64_encode_w3tc ($processed_code); $wrapper_class = base64_encode (get_block_class_name (true)); $processed_code = '
'."\n"; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $debug_label = new ai_block_labels ('ai-debug-script'); $processed_code = $debug_label->bar ('reCAPTCHA score threshold = '.get_recaptcha_threshold (), '', '', 'reCAPTCHA score: ') . $processed_code; } // Recreate W3TC code if ($this->w3tc_code != '') { $processed_code = $this->regenerate_w3tc_code ($processed_code); } } } } // TODO single CHECK block // } while (is_array ($this->check_codes) && isset ($this->check_codes [$this->check_codes_index + 1])); if (defined ('AI_DEBUGGING_DEMO') && !$this->demo_debugging) { $this->hide_debug_labels = true; } if ($close_button && ($width = trim ($this->get_block_width ())) != '' && $this->get_alignment_type() != AI_ALIGNMENT_NO_WRAPPING) { if (is_numeric ($width)) { $width .= 'px'; } $style = 'width: ' . $width . ';'; $processed_code = "
\n" . $processed_code ."\n
\n"; } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $processed_code = "
\n" . $processed_code ."\n
\n"; } // Process W3TC filter hook if ($this->w3tc_code != '') { $processed_code = $this->regenerate_w3tc_code ($processed_code); $this->w3tc_code .= ' $ai_code_org = $ai_code; if (!isset ($ai_enabled) || $ai_enabled) {$ai_code = apply_filters ("ai_block_w3tc_code_after_processing", $ai_code_org, ' . $this->number . ');}'; if ($ai_wp_data [AI_W3TC_DEBUGGING]) { $this->w3tc_code .= ' if ($ai_code != $ai_code_org) {ai_w3tc_log_run ("PROCESS HOOK FILTER ai_block_w3tc_code_after_processing");}'; } $processed_code = $this->generate_html_from_w3tc_code (); } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && !$this->hide_debug_labels) { $this->ai_generateDebugLabel (); } $code = $this->additional_code_before . $processed_code . $this->additional_code_after; // $this->additional_code_after may contain W3TC code because of ai_adb_block_actions () if ($this->w3tc_code != '' || strpos ($this->additional_code_after, ''; } else { $serverside_insertion_code = str_replace ('[#AI_CODE#]', $block_code, $serverside_insertion_code); } $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; $serverside_insertion_code_org = $serverside_insertion_code; $hook_start_time = microtime (true); $serverside_insertion_code = apply_filters ("ai_block_code_serverside_html_js", $serverside_insertion_code_org, $this->number); if ($debug_processing && $serverside_insertion_code != $serverside_insertion_code_org) { $filter_hooks []= array ("ai_block_code_serverside_html_js", $this->number); } $ai_total_hook_php_time += microtime (true) - $hook_start_time; return $serverside_insertion_code; } public function get_code_for_serverside_insertion ($include_viewport_classes = true, $hidden_widgets = false, $code_only = false) { global $ai_wp_data, $ai_total_hook_php_time, $filter_hooks; if (!isset ($ai_wp_data [AI_NESTING_LEVEL])) $ai_wp_data [AI_NESTING_LEVEL] = 0; else $ai_wp_data [AI_NESTING_LEVEL] ++; $code = $this->get_html_js_code_for_serverside_insertion ($include_viewport_classes, $hidden_widgets, $code_only); if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX || $ai_wp_data [AI_NESTING_LEVEL] != 0) { // For Ajax pages and nested blocks do not extract JS code $code = ai_strip_js_markers ($code); } else { $code = ai_extract_js_code ($code); } $ai_wp_data [AI_NESTING_LEVEL] --; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; $code_org = $code; $hook_start_time = microtime (true); $code = apply_filters ("ai_block_code_serverside_insertion", $code_org, $this->number); if ($debug_processing && $code != $code_org) { $filter_hooks []= array ("ai_block_code_serverside_insertion", $this->number); } $ai_total_hook_php_time += microtime (true) - $hook_start_time; return $code; } public function get_iframe_page () { global $ai_wp_data, $wp_version, $wp_scripts; $adb_code = defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION && $ai_wp_data [AI_ADB_DETECTION] && !isset ($ai_wp_data [AI_ADB_SHORTCODE_DISABLED]); if (isset ($wp_scripts->registered ['jquery']->ver)) { $jquery_version = $wp_jquery_ver = $wp_scripts->registered ['jquery']->ver; } else $jquery_version = $wp_version; if (isset ($wp_scripts->registered ['jquery-migrate']->ver)) { $jquery_migrate_version = $wp_jquery_ver = $wp_scripts->registered ['jquery-migrate']->ver; } else $jquery_migrate_version = $wp_version; $ai_wp_data [AI_CODE_FOR_IFRAME] = true; ob_start (); echo ' '; if (!defined ('AI_NO_JQUERY')) { echo "\n"; echo "\n"; } ai_wp_head_hook (); echo ' Ad Inserter Pro - Advanced WordPress Ads Management Plugin '; $ai_wp_data [AI_NESTING_LEVEL] = 0; // $include_viewport_classes = true, $hidden_widgets = false, $code_only = false echo ai_extract_js_code ($this->get_code_for_insertion (false, false, false)); echo "\n"; ai_set_footer_inline_scripts (); ai_wp_footer_hook_end_buffering (); ai_wp_footer_hook (); echo ' '; $page = ob_get_clean (); $ai_wp_data [AI_CODE_FOR_IFRAME] = false; $page = ai_process_head_codes ($page); return $page; } public function get_close_button (){ $option = isset ($this->wp_options [AI_OPTION_CLOSE_BUTTON]) ? $this->wp_options [AI_OPTION_CLOSE_BUTTON] : DEFAULT_CLOSE_BUTTON; return $option; } public function get_auto_close_time () { $option = isset ($this->wp_options [AI_OPTION_AUTO_CLOSE_TIME]) ? $this->wp_options [AI_OPTION_AUTO_CLOSE_TIME] : DEFAULT_AUTO_CLOSE_TIME; if ($option == '0') $option = ''; return $option; } public function get_stay_closed_time () { $option = isset ($this->wp_options [AI_OPTION_STAY_CLOSED_TIME]) ? $this->wp_options [AI_OPTION_STAY_CLOSED_TIME] : DEFAULT_STAY_CLOSED_TIME; if ($option == '0') $option = ''; return $option; } public function get_delay_time () { $option = isset ($this->wp_options [AI_OPTION_DELAY_TIME]) ? $this->wp_options [AI_OPTION_DELAY_TIME] : DEFAULT_DELAY_TIME; if ($option == '0') $option = ''; return $option; } public function get_delay_showing () { $option = isset ($this->wp_options [AI_OPTION_DELAY_SHOWING]) ? $this->wp_options [AI_OPTION_DELAY_SHOWING] : DEFAULT_DELAY_SHOWING; if ($option == '0') $option = ''; return $option; } public function get_show_every () { $option = isset ($this->wp_options [AI_OPTION_SHOW_EVERY]) ? $this->wp_options [AI_OPTION_SHOW_EVERY] : DEFAULT_SHOW_EVERY; if ($option == '0') $option = ''; return $option; } public function get_background (){ $option = isset ($this->wp_options [AI_OPTION_BACKGROUND]) ? $this->wp_options [AI_OPTION_BACKGROUND] : DEFAULT_BACKGROUND; return $option; } public function get_background_image (){ $option = isset ($this->wp_options [AI_OPTION_BACKGROUND_IMAGE]) ? $this->wp_options [AI_OPTION_BACKGROUND_IMAGE] : AD_EMPTY_DATA; return $option; } public function get_background_color (){ $option = isset ($this->wp_options [AI_OPTION_BACKGROUND_COLOR]) ? $this->wp_options [AI_OPTION_BACKGROUND_COLOR] : AD_EMPTY_DATA; return $option; } public function get_background_repeat (){ $option = isset ($this->wp_options [AI_OPTION_BACKGROUND_REPEAT]) ? $this->wp_options [AI_OPTION_BACKGROUND_REPEAT] : DEFAULT_BACKGROUND_REPEAT; return $option; } public function get_background_size (){ $option = isset ($this->wp_options [AI_OPTION_BACKGROUND_SIZE]) ? $this->wp_options [AI_OPTION_BACKGROUND_SIZE] : DEFAULT_BACKGROUND_SIZE; return $option; } public function get_set_body_background (){ if (!get_output_buffering ()) { return false; } $option = isset ($this->wp_options [AI_OPTION_SET_BODY_BACKGROUND]) ? $this->wp_options [AI_OPTION_SET_BODY_BACKGROUND] : DEFAULT_SET_BODY_BACKGROUND; return $option; } public function get_parallax ($index) { $option_name = AI_OPTION_PARALLAX . '_' . $index; $option = isset ($this->wp_options [$option_name]) ? $this->wp_options [$option_name] : AI_DISABLED; return $option; } public function get_parallax_image ($index) { $option_name = AI_OPTION_PARALLAX_IMAGE . '_' . $index; $option = isset ($this->wp_options [$option_name]) ? $this->wp_options [$option_name] : AD_EMPTY_DATA; return $option; } public function get_parallax_shift ($index) { $option_name = AI_OPTION_PARALLAX_SHIFT . '_' . $index; $option = isset ($this->wp_options [$option_name]) ? $this->wp_options [$option_name] : AD_EMPTY_DATA; if ($option == '0') $option = ''; return $option; } public function get_parallax_link () { $option = isset ($this->wp_options [AI_OPTION_PARALLAX_LINK]) ? $this->wp_options [AI_OPTION_PARALLAX_LINK] : AD_EMPTY_DATA; return $option; } public function get_parallax_link_new_tab () { $option = isset ($this->wp_options [AI_OPTION_PARALLAX_LINK_NEW_TAB]) ? $this->wp_options [AI_OPTION_PARALLAX_LINK_NEW_TAB] : AD_EMPTY_DATA; return $option; } public function get_visitor_max_impressions () { $option = isset ($this->wp_options [AI_OPTION_VISITOR_MAX_IMPRESSIONS]) ? $this->wp_options [AI_OPTION_VISITOR_MAX_IMPRESSIONS] : DEFAULT_VISITOR_MAX_IMPRESSIONS; if ($option == '0') $option = ''; return $option; } public function get_visitor_limit_impressions_per_time_period () { $option = isset ($this->wp_options [AI_OPTION_VISITOR_LIMIT_IMPRESSIONS_PER_TIME_PERIOD]) ? $this->wp_options [AI_OPTION_VISITOR_LIMIT_IMPRESSIONS_PER_TIME_PERIOD] : DEFAULT_VISITOR_LIMIT_IMPRESSIONS_PER_TIME_PERIOD; if ($option == '0') $option = ''; return $option; } public function get_visitor_limit_impressions_time_period () { $option = isset ($this->wp_options [AI_OPTION_VISITOR_LIMIT_IMPRESSIONS_TIME_PERIOD]) ? $this->wp_options [AI_OPTION_VISITOR_LIMIT_IMPRESSIONS_TIME_PERIOD] : DEFAULT_VISITOR_LIMIT_IMPRESSIONS_TIME_PERIOD; if ($option == '0') $option = ''; return $option; } public function get_max_impressions () { $option = isset ($this->wp_options [AI_OPTION_MAX_IMPRESSIONS]) ? $this->wp_options [AI_OPTION_MAX_IMPRESSIONS] : DEFAULT_MAX_IMPRESSIONS; if ($option == '0') $option = ''; return $option; } public function get_limit_impressions_per_time_period () { $option = isset ($this->wp_options [AI_OPTION_LIMIT_IMPRESSIONS_PER_TIME_PERIOD]) ? $this->wp_options [AI_OPTION_LIMIT_IMPRESSIONS_PER_TIME_PERIOD] : DEFAULT_LIMIT_IMPRESSIONS_PER_TIME_PERIOD; if ($option == '0') $option = ''; return $option; } public function get_limit_impressions_time_period () { $option = isset ($this->wp_options [AI_OPTION_LIMIT_IMPRESSIONS_TIME_PERIOD]) ? $this->wp_options [AI_OPTION_LIMIT_IMPRESSIONS_TIME_PERIOD] : DEFAULT_LIMIT_IMPRESSIONS_TIME_PERIOD; if ($option == '0') $option = ''; return $option; } public function get_visitor_max_clicks () { $option = isset ($this->wp_options [AI_OPTION_VISITOR_MAX_CLICKS]) ? $this->wp_options [AI_OPTION_VISITOR_MAX_CLICKS] : DEFAULT_VISITOR_MAX_CLICKS; if ($option == '0') $option = ''; return $option; } public function get_visitor_limit_clicks_per_time_period () { $option = isset ($this->wp_options [AI_OPTION_VISITOR_LIMIT_CLICKS_PER_TIME_PERIOD]) ? $this->wp_options [AI_OPTION_VISITOR_LIMIT_CLICKS_PER_TIME_PERIOD] : DEFAULT_VISITOR_LIMIT_CLICKS_PER_TIME_PERIOD; if ($option == '0') $option = ''; return $option; } public function get_visitor_limit_clicks_time_period () { $option = isset ($this->wp_options [AI_OPTION_VISITOR_LIMIT_CLICKS_TIME_PERIOD]) ? $this->wp_options [AI_OPTION_VISITOR_LIMIT_CLICKS_TIME_PERIOD] : DEFAULT_VISITOR_LIMIT_CLICKS_TIME_PERIOD; if ($option == '0') $option = ''; return $option; } public function get_max_clicks () { $option = isset ($this->wp_options [AI_OPTION_MAX_CLICKS]) ? $this->wp_options [AI_OPTION_MAX_CLICKS] : DEFAULT_MAX_CLICKS; if ($option == '0') $option = ''; return $option; } public function get_limit_clicks_per_time_period () { $option = isset ($this->wp_options [AI_OPTION_LIMIT_CLICKS_PER_TIME_PERIOD]) ? $this->wp_options [AI_OPTION_LIMIT_CLICKS_PER_TIME_PERIOD] : DEFAULT_LIMIT_CLICKS_PER_TIME_PERIOD; if ($option == '0') $option = ''; return $option; } public function get_limit_clicks_time_period () { $option = isset ($this->wp_options [AI_OPTION_LIMIT_CLICKS_TIME_PERIOD]) ? $this->wp_options [AI_OPTION_LIMIT_CLICKS_TIME_PERIOD] : DEFAULT_LIMIT_CLICKS_TIME_PERIOD; if ($option == '0') $option = ''; return $option; } public function get_trigger_click_fraud_protection () { $option = isset ($this->wp_options [AI_OPTION_TRIGGER_CLICK_FRAUD_PROTECTION]) ? $this->wp_options [AI_OPTION_TRIGGER_CLICK_FRAUD_PROTECTION] : DEFAULT_TRIGGER_CLICK_FRAUD_PROTECTION; if ($option == '0') $option = ''; return $option; } public function get_limits_fallback () { $option = isset ($this->wp_options [AI_OPTION_LIMITS_FALLBACK]) ? $this->wp_options [AI_OPTION_LIMITS_FALLBACK] : ""; return $option; } public function get_horizontal_margin (){ $option = isset ($this->wp_options [AI_OPTION_HORIZONTAL_MARGIN]) ? $this->wp_options [AI_OPTION_HORIZONTAL_MARGIN] : DEFAULT_HORIZONTAL_MARGIN; return $option; } public function get_vertical_margin () { $option = isset ($this->wp_options [AI_OPTION_VERTICAL_MARGIN]) ? $this->wp_options [AI_OPTION_VERTICAL_MARGIN] : DEFAULT_VERTICAL_MARGIN; return $option; } public function get_animation () { $option = isset ($this->wp_options [AI_OPTION_ANIMATION]) ? $this->wp_options [AI_OPTION_ANIMATION] : DEFAULT_ANIMATION; return $option; } public function get_animation_trigger () { $option = isset ($this->wp_options [AI_OPTION_ANIMATION_TRIGGER]) ? $this->wp_options [AI_OPTION_ANIMATION_TRIGGER] : DEFAULT_ANIMATION_TRIGGER; return $option; } public function get_animation_trigger_value () { $option = isset ($this->wp_options [AI_OPTION_ANIMATION_TRIGGER_VALUE]) ? $this->wp_options [AI_OPTION_ANIMATION_TRIGGER_VALUE] : DEFAULT_ANIMATION_TRIGGER_VALUE; return $option; } public function get_animation_trigger_offset () { $option = isset ($this->wp_options [AI_OPTION_ANIMATION_TRIGGER_OFFSET]) ? $this->wp_options [AI_OPTION_ANIMATION_TRIGGER_OFFSET] : DEFAULT_ANIMATION_TRIGGER_OFFSET; return $option; } public function get_animation_trigger_delay () { $option = isset ($this->wp_options [AI_OPTION_ANIMATION_TRIGGER_DELAY]) ? $this->wp_options [AI_OPTION_ANIMATION_TRIGGER_DELAY] : DEFAULT_ANIMATION_TRIGGER_DELAY; return $option; } // Deprecated public function get_animation_trigger_once () { $option = isset ($this->wp_options [AI_OPTION_ANIMATION_TRIGGER_ONCE]) ? $this->wp_options [AI_OPTION_ANIMATION_TRIGGER_ONCE] : DEFAULT_ANIMATION_TRIGGER_ONCE; return $option; } public function get_animation_out_trigger () { if ($this->get_animation_trigger_once ()) { return AI_TRIGGER_DISABLED; } $option = isset ($this->wp_options [AI_OPTION_ANIMATION_OUT_TRIGGER]) ? $this->wp_options [AI_OPTION_ANIMATION_OUT_TRIGGER] : AI_TRIGGER_ENABLED; return $option; } public function get_animation_out_trigger_value () { $option = isset ($this->wp_options [AI_OPTION_ANIMATION_OUT_TRIGGER_VALUE]) ? $this->wp_options [AI_OPTION_ANIMATION_OUT_TRIGGER_VALUE] : DEFAULT_ANIMATION_TRIGGER_VALUE; return $option; } public function get_animation_out_trigger_offset () { $option = isset ($this->wp_options [AI_OPTION_ANIMATION_OUT_TRIGGER_OFFSET]) ? $this->wp_options [AI_OPTION_ANIMATION_OUT_TRIGGER_OFFSET] : DEFAULT_ANIMATION_TRIGGER_OFFSET; return $option; } public function get_ad_general_tag(){ $option = isset ($this->wp_options [AI_OPTION_GENERAL_TAG]) ? $this->wp_options [AI_OPTION_GENERAL_TAG] : DEFAULT_GENERAL_TAG; // if ($option == '') $option = DEFAULT_GENERAL_TAG; return $option; } public function get_adb_block_action (){ $option = isset ($this->wp_options [AI_OPTION_ADB_BLOCK_ACTION]) ? $this->wp_options [AI_OPTION_ADB_BLOCK_ACTION] : DEFAULT_ADB_BLOCK_ACTION; return $option; } public function get_adb_block_replacement (){ $option = isset ($this->wp_options [AI_OPTION_ADB_BLOCK_REPLACEMENT]) ? $this->wp_options [AI_OPTION_ADB_BLOCK_REPLACEMENT] : AD_EMPTY_DATA; return $option; } public function get_scheduling(){ $option = isset ($this->wp_options [AI_OPTION_SCHEDULING]) ? $this->wp_options [AI_OPTION_SCHEDULING] : ""; // Convert old option if ($option == '' && intval ($this->get_ad_after_day()) != 0) $option = AI_SCHEDULING_DELAY_FOR; if ($option == '') $option = AI_SCHEDULING_OFF; return $option; } public function get_ad_after_day(){ $option = isset ($this->wp_options [AI_OPTION_AFTER_DAYS]) ? $this->wp_options [AI_OPTION_AFTER_DAYS] : ""; // if ($option == '') $option = AD_ZERO; if ($option == '0') $option = ''; return $option; } public function get_schedule_start_date(){ $option = isset ($this->wp_options [AI_OPTION_START_DATE]) ? $this->wp_options [AI_OPTION_START_DATE] : ""; return $option; } public function get_schedule_end_date(){ $option = isset ($this->wp_options [AI_OPTION_END_DATE]) ? $this->wp_options [AI_OPTION_END_DATE] : ""; return $option; } public function get_schedule_start_time(){ $option = isset ($this->wp_options [AI_OPTION_START_TIME]) ? $this->wp_options [AI_OPTION_START_TIME] : ""; return $option; } public function get_schedule_end_time(){ $option = isset ($this->wp_options [AI_OPTION_END_TIME]) ? $this->wp_options [AI_OPTION_END_TIME] : ""; return $option; } public function get_schedule_weekdays (){ $option = isset ($this->wp_options [AI_OPTION_WEEKDAYS]) ? $this->wp_options [AI_OPTION_WEEKDAYS] : DEFAULT_WEEKDAYS; return $option; } public function get_scheduling_fallback(){ $option = isset ($this->wp_options [AI_OPTION_SCHEDULING_FALLBACK]) ? $this->wp_options [AI_OPTION_SCHEDULING_FALLBACK] : ""; return $option; } public function get_maximum_insertions (){ $option = isset ($this->wp_options [AI_OPTION_MAXIMUM_INSERTIONS]) ? $this->wp_options [AI_OPTION_MAXIMUM_INSERTIONS] : ""; if ($option == '0') $option = ''; return $option; } public function get_id_list(){ $option = isset ($this->wp_options [AI_OPTION_ID_LIST]) ? $this->wp_options [AI_OPTION_ID_LIST] : ""; return $option; } public function get_id_list_type (){ $option = isset ($this->wp_options [AI_OPTION_ID_LIST_TYPE]) ? $this->wp_options [AI_OPTION_ID_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_ad_url_list(){ $option = isset ($this->wp_options [AI_OPTION_URL_LIST]) ? $this->wp_options [AI_OPTION_URL_LIST] : ""; return $option; } public function get_ad_url_list_type (){ $option = isset ($this->wp_options [AI_OPTION_URL_LIST_TYPE]) ? $this->wp_options [AI_OPTION_URL_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_url_parameter_list(){ $option = isset ($this->wp_options [AI_OPTION_URL_PARAMETER_LIST]) ? $this->wp_options [AI_OPTION_URL_PARAMETER_LIST] : ""; return $option; } public function get_url_parameter_list_type (){ $option = isset ($this->wp_options [AI_OPTION_URL_PARAMETER_LIST_TYPE]) ? $this->wp_options [AI_OPTION_URL_PARAMETER_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_cookie_list(){ $option = isset ($this->wp_options [AI_OPTION_COOKIE_LIST]) ? $this->wp_options [AI_OPTION_COOKIE_LIST] : ""; return $option; } public function get_cookie_list_type (){ $option = isset ($this->wp_options [AI_OPTION_COOKIE_LIST_TYPE]) ? $this->wp_options [AI_OPTION_COOKIE_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; return $option; } public function get_ad_domain_list(){ $option = isset ($this->wp_options [AI_OPTION_DOMAIN_LIST]) ? $this->wp_options [AI_OPTION_DOMAIN_LIST] : ""; return $option; } public function get_ad_domain_list_type (){ $option = isset ($this->wp_options [AI_OPTION_DOMAIN_LIST_TYPE]) ? $this->wp_options [AI_OPTION_DOMAIN_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_client_list(){ $option = isset ($this->wp_options [AI_OPTION_CLIENT_LIST]) ? $this->wp_options [AI_OPTION_CLIENT_LIST] : ""; return $option; } public function get_client_list_type (){ $option = isset ($this->wp_options [AI_OPTION_CLIENT_LIST_TYPE]) ? $this->wp_options [AI_OPTION_CLIENT_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; return $option; } public function get_ad_ip_address_list (){ $option = isset ($this->wp_options [AI_OPTION_IP_ADDRESS_LIST]) ? $this->wp_options [AI_OPTION_IP_ADDRESS_LIST] : ""; return $option; } public function get_ad_ip_address_list_type (){ $option = isset ($this->wp_options [AI_OPTION_IP_ADDRESS_LIST_TYPE]) ? $this->wp_options [AI_OPTION_IP_ADDRESS_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_ad_country_list ($expand = false){ $option = isset ($this->wp_options [AI_OPTION_COUNTRY_LIST]) ? $this->wp_options [AI_OPTION_COUNTRY_LIST] : ""; if ($expand && function_exists ('expanded_country_list')) return expanded_country_list ($option); return $option; } public function get_ad_country_list_type (){ $option = isset ($this->wp_options [AI_OPTION_COUNTRY_LIST_TYPE]) ? $this->wp_options [AI_OPTION_COUNTRY_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_ad_name(){ $option = isset ($this->wp_options [AI_OPTION_BLOCK_NAME]) ? $this->wp_options [AI_OPTION_BLOCK_NAME] : ""; if ($option == '') $option = DEFAULT_AD_NAME. " " . $this->number; return $option; } public function get_ad_block_cat(){ $option = isset ($this->wp_options [AI_OPTION_CATEGORY_LIST]) ? $this->wp_options [AI_OPTION_CATEGORY_LIST] : ""; return $option; } public function get_ad_block_cat_type(){ $option = isset ($this->wp_options [AI_OPTION_CATEGORY_LIST_TYPE]) ? $this->wp_options [AI_OPTION_CATEGORY_LIST_TYPE] : AI_BLACK_LIST; // Update old data if ($option == ''){ $option = AI_BLACK_LIST; $this->wp_options [AI_OPTION_CATEGORY_LIST_TYPE] = AI_BLACK_LIST; } if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_ad_block_tag(){ $option = isset ($this->wp_options [AI_OPTION_TAG_LIST]) ? $this->wp_options [AI_OPTION_TAG_LIST] : ""; return $option; } public function get_ad_block_tag_type(){ $option = isset ($this->wp_options [AI_OPTION_TAG_LIST_TYPE]) ? $this->wp_options [AI_OPTION_TAG_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_ad_block_taxonomy(){ $option = isset ($this->wp_options [AI_OPTION_TAXONOMY_LIST]) ? $this->wp_options [AI_OPTION_TAXONOMY_LIST] : ""; return $option; } public function get_ad_block_taxonomy_type(){ $option = isset ($this->wp_options [AI_OPTION_TAXONOMY_LIST_TYPE]) ? $this->wp_options [AI_OPTION_TAXONOMY_LIST_TYPE] : AI_BLACK_LIST; if ($option == '') $option = AI_BLACK_LIST; elseif ($option == AD_BLACK_LIST) $option = AI_BLACK_LIST; elseif ($option == AD_WHITE_LIST) $option = AI_WHITE_LIST; return $option; } public function get_ad_enabled_on_which_pages (){ // Old option if (isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_PAGES])) { $option = isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_PAGES]) ? $this->wp_options [AI_OPTION_ENABLED_ON_WHICH_PAGES] : AI_IGNORE_EXCEPTIONS; if ($option == '') $option = AI_IGNORE_EXCEPTIONS; elseif ($option == AD_ENABLED_ON_ALL) $option = AI_IGNORE_EXCEPTIONS; elseif ($option == AD_ENABLED_ON_ALL_EXCEPT_ON_SELECTED) $option = AI_DEFAULT_INSERTION_ENABLED; elseif ($option == AD_ENABLED_ONLY_ON_SELECTED) $option = AI_DEFAULT_INSERTION_DISABLED; return $option; } if (!$this->get_exceptions_enabled ()) { return AI_IGNORE_EXCEPTIONS; } return $this->get_exceptions_function (); } public function get_ad_enabled_on_which_pages_text ($translated = true){ switch ($this->get_ad_enabled_on_which_pages ()) { case AI_IGNORE_EXCEPTIONS: if (!$translated) return AI_TEXT_ENG_NO_INDIVIDUAL_EXCEPTIONS; return AI_TEXT_PAGES_NO_INDIVIDUAL_EXCEPTIONS; break; case AI_DEFAULT_INSERTION_ENABLED: if (!$translated) return AI_TEXT_ENG_INDIVIDUALLY_DISABLED; return AI_TEXT_PAGES_INDIVIDUALLY_DISABLED; break; case AI_DEFAULT_INSERTION_DISABLED: if (!$translated) return AI_TEXT_ENG_INDIVIDUALLY_ENABLED; return AI_TEXT_PAGES_INDIVIDUALLY_ENABLED; break; default: return ''; break; } } public function get_ad_enabled_on_which_posts (){ // Old option if (isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_POSTS])) { $option = $this->wp_options [AI_OPTION_ENABLED_ON_WHICH_POSTS]; if ($option == '') $option = AI_IGNORE_EXCEPTIONS; elseif ($option == AD_ENABLED_ON_ALL) $option = AI_IGNORE_EXCEPTIONS; elseif ($option == AD_ENABLED_ON_ALL_EXCEPT_ON_SELECTED) $option = AI_DEFAULT_INSERTION_ENABLED; elseif ($option == AD_ENABLED_ONLY_ON_SELECTED) $option = AI_DEFAULT_INSERTION_DISABLED; return $option; } if (!$this->get_exceptions_enabled ()) { return AI_IGNORE_EXCEPTIONS; } return $this->get_exceptions_function (); } public function get_ad_enabled_on_which_posts_text ($translated = true){ switch ($this->get_ad_enabled_on_which_posts ()) { case AI_IGNORE_EXCEPTIONS: if (!$translated) return AI_TEXT_ENG_NO_INDIVIDUAL_EXCEPTIONS; return AI_TEXT_POSTS_NO_INDIVIDUAL_EXCEPTIONS; break; case AI_DEFAULT_INSERTION_ENABLED: if (!$translated) return AI_TEXT_ENG_INDIVIDUALLY_DISABLED; return AI_TEXT_POSTS_INDIVIDUALLY_DISABLED; break; case AI_DEFAULT_INSERTION_DISABLED: if (!$translated) return AI_TEXT_ENG_INDIVIDUALLY_ENABLED; return AI_TEXT_POSTS_INDIVIDUALLY_ENABLED; break; default: return ''; break; } } public function import_old_exception_settings (&$needs_check){ $needs_check = false; if (isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_POSTS]) || isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_PAGES])) { // Import old settings $posts = isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_POSTS]) ? $this->get_ad_enabled_on_which_posts () : AI_IGNORE_EXCEPTIONS; $pages = isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_PAGES]) ? $this->get_ad_enabled_on_which_pages () : AI_IGNORE_EXCEPTIONS; if ($posts == $pages) { return $posts; } if (!$this->get_display_settings_page ()) { return $posts; } if (!$this->get_display_settings_post ()) { return $pages; } $needs_check = true; // POSTS = AI_DEFAULT_INSERTION_DISABLED NO INSERTION ON PAGES // POSTS = AI_DEFAULT_INSERTION_ENABLED OK if ($pages == AI_IGNORE_EXCEPTIONS) { return $posts; } // PAGES = AI_DEFAULT_INSERTION_DISABLED NO INSERTION ON POSTS // PAGES = AI_DEFAULT_INSERTION_ENABLED OK if ($posts == AI_IGNORE_EXCEPTIONS) { return $pages; } // POSTS = AI_DEFAULT_INSERTION_DISABLED NO INSERTION ON PAGES // PAGES = AI_DEFAULT_INSERTION_ENABLED // POSTS = AI_DEFAULT_INSERTION_ENABLED INVERTED INSERTION ON PAGES // PAGES = AI_DEFAULT_INSERTION_DISABLED return $posts; } return - 1; } public function get_exceptions_enabled (){ $needs_check = false; $option = $this->import_old_exception_settings ($needs_check); if ($option >= 0) { return $option != AI_IGNORE_EXCEPTIONS; } $option = isset ($this->wp_options [AI_OPTION_EXCEPTIONS_ENABLED]) ? $this->wp_options [AI_OPTION_EXCEPTIONS_ENABLED] : AI_DISABLED; return $option; } public function get_exceptions_function (){ $needs_check = false; $option = $this->import_old_exception_settings ($needs_check); if ($option >= 0) { if ($option == AI_IGNORE_EXCEPTIONS) $option == AI_DEFAULT_INSERTION_ENABLED; return $option; } $option = isset ($this->wp_options [AI_OPTION_EXCEPTIONS_FUNCTION]) ? $this->wp_options [AI_OPTION_EXCEPTIONS_FUNCTION] : AI_DEFAULT_INSERTION_ENABLED; return $option; } public function get_exceptions_function_text ($translated = true){ switch ($this->get_exceptions_function ()) { case AI_DEFAULT_INSERTION_ENABLED: if (!$translated) return AI_TEXT_ENG_ENABLED; return AI_TEXT_ENABLED; break; case AI_DEFAULT_INSERTION_DISABLED: if (!$translated) return AI_TEXT_ENG_DISABLED; return AI_TEXT_DISABLED; break; default: return ''; break; } } public function get_name_class () { $name = $this->get_ad_name (); if ($name == '') return ''; return strtolower (str_replace ('--', '-', preg_replace ('/[^\-_a-zA-Z0-9]/', '', str_replace (' ', '-', html_entity_decode ($name))))); } public function get_viewport_classes () { global $ai_wp_data; // if ($ai_wp_data [AI_WP_AMP_PAGE]) return ''; $viewport_classes = ""; if ($this->get_detection_client_side ()) { $all_viewports = true; for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = get_viewport_name ($viewport); if ($viewport_name != '') { if ($this->get_detection_viewport ($viewport)) $viewport_classes .= " ai-viewport-" . $viewport; else $all_viewports = false; } } if ($viewport_classes == "") $viewport_classes = " ai-viewport-0"; elseif ($all_viewports) $viewport_classes = ""; } return ($viewport_classes); } public function get_viewport_names () { global $ai_wp_data; if ($ai_wp_data [AI_WP_AMP_PAGE]) return ''; $viewport_names = array (); if ($this->get_detection_client_side ()) { for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = get_viewport_name ($viewport); if ($viewport_name != '') { if ($this->get_detection_viewport ($viewport)) $viewport_names []= $viewport_name; } } } return (implode (', ', $viewport_names)); } public function get_alignment_class ($block_class_name = null){ global $ai_wp_data; if (defined ('AI_AMP_HEADER_STYLES') && AI_AMP_HEADER_STYLES && $ai_wp_data [AI_WP_AMP_PAGE] || defined ('AI_NORMAL_HEADER_STYLES') && AI_NORMAL_HEADER_STYLES && !$ai_wp_data [AI_WP_AMP_PAGE] && !get_inline_styles ()) { return $this->generate_alignment_class ($block_class_name); } return ''; } public function generate_alignment_class ($block_class_name = null){ if ($block_class_name == null) $block_class_name = get_block_class_name (true); $block_class_name .= '-'; switch ($this->get_alignment_type ()) { case AI_ALIGNMENT_DEFAULT: case AI_ALIGNMENT_LEFT: case AI_ALIGNMENT_RIGHT: case AI_ALIGNMENT_CENTER: case AI_ALIGNMENT_FLOAT_LEFT: case AI_ALIGNMENT_FLOAT_RIGHT: case AI_ALIGNMENT_STICKY_LEFT: case AI_ALIGNMENT_STICKY_RIGHT: case AI_ALIGNMENT_STICKY_TOP: case AI_ALIGNMENT_STICKY_BOTTOM: return $block_class_name . str_replace (' ', '-', strtolower ($this->get_alignment_type_text (false))); break; case AI_ALIGNMENT_STICKY: // return $block_class_name . str_replace (' ', '-', strtolower (md5 ($this->alignment_style ($this->get_alignment_type ())))); return $block_class_name . strtolower (md5 ($this->alignment_style ($this->get_alignment_type ()))); break; case AI_ALIGNMENT_CUSTOM_CSS: // return $block_class_name . str_replace (' ', '-', strtolower (md5 ($this->get_custom_css ()))); return $block_class_name . strtolower (md5 ($this->get_custom_css ())); break; } return ''; } public function get_size_class ($block_class_name = null){ global $ai_wp_data; if (defined ('AI_AMP_HEADER_STYLES') && AI_AMP_HEADER_STYLES && $ai_wp_data [AI_WP_AMP_PAGE] || defined ('AI_NORMAL_HEADER_STYLES') && AI_NORMAL_HEADER_STYLES && !$ai_wp_data [AI_WP_AMP_PAGE] && !get_inline_styles ()) { return $this->generate_size_class ($block_class_name); } return ''; } public function generate_size_class ($block_class_name = null) { $size_background_style = $this->size_background_style (); if ($this->get_alignment_type () != AI_ALIGNMENT_CUSTOM_CSS && $size_background_style != '') { if ($block_class_name == null) $block_class_name = get_block_class_name (true); $block_class_name .= '-'; return $block_class_name . ai_css_to_name ($size_background_style); } return ''; } public function before_image ($content, $position_preview = false) { return $this->before_paragraph ($content, $position_preview, true); } public function before_paragraph ($content, $position_preview = false, $before_image = false) { global $ai_wp_data, $ai_last_check, $special_element_tags, $ad_inserter_globals; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; $multibyte = $ai_wp_data [AI_MBSTRING_LOADED] && get_paragraph_counting_functions() == AI_MULTIBYTE_PARAGRAPH_COUNTING_FUNCTIONS; $paragraph_positions = array (); $active_paragraph_positions = array (); $dummy = array (); if ($before_image) { $paragraph_tags = 'figure,img,amp-img'; } else $paragraph_tags = trim ($this->get_paragraph_tags()); if ($paragraph_tags == '') return $content; $paragraph_start_strings = explode (",", $paragraph_tags); $ai_last_check = AI_CHECK_PARAGRAPH_TAGS; if (count ($paragraph_start_strings) == 0) return $content; get_paragraph_start_positions ($content, $multibyte, $dummy, $paragraph_start_strings, $paragraph_positions, $active_paragraph_positions); // Nothing to do $ai_last_check = AI_CHECK_PARAGRAPHS_WITH_TAGS; if (array_sum ($active_paragraph_positions) == 0) return $content; sort ($paragraph_positions); ksort ($active_paragraph_positions); $new_active_paragraph_positions = array (); foreach ($active_paragraph_positions as $active_paragraph_position) { $new_active_paragraph_positions [] = $active_paragraph_position; } $active_paragraph_positions = $new_active_paragraph_positions; if (!$this->get_count_inside_blockquote () || $before_image) { $special_element_offsets = array (); if ($before_image) { $special_element_tags_array = array_unique (array_merge ($special_element_tags, array ('figure', 'amp-img'))); } else $special_element_tags_array = $special_element_tags; foreach ($special_element_tags_array as $special_element_tag) { preg_match_all ("/<\/?$special_element_tag/i", $content, $special_elements, PREG_OFFSET_CAPTURE); $nesting = array (); $special_elements = $special_elements [0]; foreach ($special_elements as $index => $special_element) { if (isset ($special_elements [$index + 1][0])) { $tag1 = strtolower ($special_element [0]); $tag2 = strtolower ($special_elements [$index + 1][0]); $start_offset = $special_element [1]; $nesting_ended = false; $tag1_start = $tag1 == "<$special_element_tag"; $tag2_start = $tag2 == "<$special_element_tag"; $tag1_end = $tag1 == "= $special_element_offset [0] && $paragraph_position <= $special_element_offset [1]) $inside_special_element [] = $paragraph_position; } } foreach ($paragraph_positions as $index => $paragraph_position) { if (in_array ($paragraph_position, $inside_special_element)) $active_paragraph_positions [$index] = 0; } } $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_NO_COUNTING_INSIDE; if (array_sum ($active_paragraph_positions) == 0) return $content; } $element_tags = $this->get_count_inside_elements (); if ($element_tags != '') { $special_element_tags_array = explode (',', str_replace (' ', '', $element_tags)); $count_inside = $this->get_count_inside (); $element_text_type = $this->get_count_inside_elements_contain (); $check_only_tag_attributes = $this->get_check_only_tag_attributes (); $element_text = str_replace (' ', '', html_entity_decode ($this->get_count_inside_elements_text ())); if (strpos ($element_text, ",") !== false) { $element_texts = explode (',', $element_text); } elseif (trim ($element_text) != '') $element_texts = array (trim ($element_text)); else $element_texts = array (); $special_element_offsets = array (); foreach ($special_element_tags_array as $special_element_tag) { preg_match_all ("/<\/?$special_element_tag/i", $content, $special_elements, PREG_OFFSET_CAPTURE); $special_elements = $special_elements [0]; if (count ($special_elements) % 2 != 0) { if ($debug_processing) ai_log ('INVALID TAGS: ODD NUMBER OF ' . $special_element_tag . ' TAGS'); } $elements = array (); $nesting = array (); foreach ($special_elements as $index => $special_element) { $tag = strtolower ($special_element [0]); $tag_start = $tag == "<$special_element_tag"; $tag_end = $tag == "]+?)>#', $search_content, $search_content_tag); if (isset ($search_content_tag [1])) { $search_content = $search_content_tag [1]; } } if (stripos ($search_content, $element_text)) { $check = true; break; } } switch ($element_text_type) { case AI_CONTAIN: if ($check) { $special_element_offsets []= $element_offsets; } break; default: if (!$check) { $special_element_offsets []= $element_offsets; } break; } } else { $special_element_offsets []= $element_offsets; } } } $inside_special_element = array (); if (count ($special_element_offsets) != 0) { foreach ($special_element_offsets as $special_element_offset) { foreach ($paragraph_positions as $paragraph_position) { if ($paragraph_position >= $special_element_offset [0] + 1 && $paragraph_position <= $special_element_offset [1]) $inside_special_element [] = $paragraph_position; } } } foreach ($paragraph_positions as $index => $paragraph_position) { $paragraph_inside = in_array ($paragraph_position, $inside_special_element); switch ($count_inside) { case AI_COUNT_ONLY: if (!$paragraph_inside) $active_paragraph_positions [$index] = 0; break; default: if ($paragraph_inside) $active_paragraph_positions [$index] = 0; break; } } $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_NO_COUNTING_INSIDE_ELEMENTS; if (array_sum ($active_paragraph_positions) == 0) return $content; } if (!$before_image) { $paragraph_min_words = intval ($this->get_minimum_paragraph_words()); $paragraph_max_words = intval ($this->get_maximum_paragraph_words()); if ($paragraph_min_words != 0 || $paragraph_max_words != 0) { if (!isset ($paragraph_end_positions)) { $paragraph_end_positions = array (); get_paragraph_end_positions ($content, $multibyte, $paragraph_positions, $paragraph_start_strings, $paragraph_end_positions, $dummy); } foreach ($paragraph_positions as $index => $paragraph_position) { if ($active_paragraph_positions [$index] == 0) continue; if ($multibyte) { $paragraph_code = mb_substr ($content, $paragraph_position, $paragraph_end_positions [$index] - $paragraph_position + 1); } else { $paragraph_code = substr ($content, $paragraph_position, $paragraph_end_positions [$index] - $paragraph_position + 1); } if (!$this->check_number_of_words_in_paragraph ($paragraph_code, $paragraph_min_words, $paragraph_max_words)) $active_paragraph_positions [$index] = 0; } } // Nothing to do $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_MIN_MAX_WORDS; if (array_sum ($active_paragraph_positions) == 0) return $content; $paragraph_texts = explode (",", html_entity_decode ($this->get_paragraph_text())); if ($this->get_paragraph_text() != "" && count ($paragraph_texts) != 0) { if (!isset ($paragraph_end_positions)) { $paragraph_end_positions = array (); get_paragraph_end_positions ($content, $multibyte, $paragraph_positions, $paragraph_start_strings, $paragraph_end_positions, $dummy); } $paragraph_text_type = $this->get_paragraph_text_type (); foreach ($paragraph_positions as $index => $paragraph_position) { if ($active_paragraph_positions [$index] == 0) continue; if ($multibyte) { $paragraph_code = mb_substr ($content, $paragraph_position, $paragraph_end_positions [$index] - $paragraph_position + 1); } else { $paragraph_code = substr ($content, $paragraph_position, $paragraph_end_positions [$index] - $paragraph_position + 1); } if ($paragraph_text_type == AI_CONTAIN) { $found = true; foreach ($paragraph_texts as $paragraph_text) { if (trim ($paragraph_text) == '') continue; $paragraph_text = trim ($paragraph_text); $invert = false; if ($paragraph_text [0] == '^') { $paragraph_text = substr ($paragraph_text, 1); $invert = true; } if ($multibyte) { $paragraph_text_found = mb_stripos ($paragraph_code, $paragraph_text) !== false; if ($invert) { $paragraph_text_found = !$paragraph_text_found; } if (!$paragraph_text_found) { $found = false; break; } } else { $paragraph_text_found = stripos ($paragraph_code, $paragraph_text) !== false; if ($invert) { $paragraph_text_found = !$paragraph_text_found; } if (!$paragraph_text_found) { $found = false; break; } } } if (!$found) $active_paragraph_positions [$index] = 0; } elseif ($paragraph_text_type == AI_DO_NOT_CONTAIN) { $found = false; foreach ($paragraph_texts as $paragraph_text) { if (trim ($paragraph_text) == '') continue; $paragraph_text = trim ($paragraph_text); $invert = false; if ($paragraph_text [0] == '^') { $paragraph_text = substr ($paragraph_text, 1); $invert = true; } if ($multibyte) { $paragraph_text_found = mb_stripos ($paragraph_code, $paragraph_text) !== false; if ($invert) { $paragraph_text_found = !$paragraph_text_found; } if ($paragraph_text_found) { $found = true; break; } } else { $paragraph_text_found = stripos ($paragraph_code, $paragraph_text) !== false; if ($invert) { $paragraph_text_found = !$paragraph_text_found; } if ($paragraph_text_found) { $found = true; break; } } } if ($found) $active_paragraph_positions [$index] = 0; } } } // Nothing to do $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_TEXT; if (array_sum ($active_paragraph_positions) == 0) return $content; } // !$before_image $position_text = trim ($this->get_paragraph_number()); if ($before_image) { $direction_type = AI_DIRECTION_FROM_TOP; } else $direction_type = $this->get_direction_type(); // Prepare $paragraph_end_positions // if ($position_preview || $position_text == '') { // Prepare always if (!isset ($paragraph_end_positions)) { $paragraph_end_positions = array (); get_paragraph_end_positions ($content, $multibyte, $paragraph_positions, $paragraph_start_strings, $paragraph_end_positions, $dummy); } $filtered_paragraph_end_positions = array (); // Use $paragraph_positions for counting as it is checked for consistency foreach ($paragraph_positions as $index => $paragraph_position) { if ($active_paragraph_positions [$index]) $filtered_paragraph_end_positions [] = $paragraph_end_positions [$index]; } $paragraph_end_positions = $filtered_paragraph_end_positions; if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { $paragraph_end_positions = array_reverse ($paragraph_end_positions); } // } $filtered_paragraph_positions = array (); foreach ($paragraph_positions as $index => $paragraph_position) { if ($active_paragraph_positions [$index]) $filtered_paragraph_positions [] = $paragraph_position; } $paragraph_positions = $filtered_paragraph_positions; if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { $paragraph_positions = array_reverse ($paragraph_positions); } // $positions contains indexes in $paragraph_positions $positions = array (); if (!$position_preview) { if (strpos ($position_text, '[') !== false) { $random_range = false; for ($i = 0; $i < strlen ($position_text); $i ++) { switch ($position_text [$i]) { case '[': $random_range = true; break; case ']': $random_range = false; break; case ',': if ($random_range) { $position_text [$i] = '|'; } break; } } } $position = $position_text; if (is_numeric ($position)) { if ($position > 0 && $position < 1) { $position = intval ($position * (count ($paragraph_positions) - 1) + 0.5); } elseif ($position > - 1 && $position < 0) { $position = intval (count ($paragraph_positions) + $position * (count ($paragraph_positions) - 1) - 0.5); } elseif ($position <= - 1) { $position = count ($paragraph_positions) + $position; } elseif ($position == 0) { $position = mt_rand (0, count ($paragraph_positions) - 1); } else $position --; $positions = array ($position); } elseif (strpos ($position_text, '[') === 0 && strpos ($position_text, ']') === strlen ($position_text) - 1) { $wanted_paragraphs_text = trim (substr ($position_text, 1, strlen ($position_text) - 2)); $wanted_paragraph_ranges = array (); $wanted_paragraphs = array (); if (strpos ($position_text, '|') !== false) { $items = explode ('|', str_replace (' ', '', $wanted_paragraphs_text)); foreach ($items as $item) { $wanted_paragraph_ranges []= $item; } } else $wanted_paragraph_ranges []= $wanted_paragraphs_text; foreach ($wanted_paragraph_ranges as $wanted_paragraph_range) { if (strpos ($wanted_paragraph_range, '-') !== false) { $limits = explode ('-', $wanted_paragraph_range); $limit_min = (int) $limits [0]; $limit_max = (int) $limits [1]; } else { $limit_min = (int) $wanted_paragraph_range; $limit_max = (int) $wanted_paragraph_range; } if ($limit_min < 0) $limit_min = 0; else if ($limit_min > 9999) $limit_min = 9999; if ($limit_max < 0) $limit_max = 0; else if ($limit_max > 9999) $limit_max = 9999; if ($limit_min > $limit_max) $limit_max = $limit_min; while ($limit_max >= $limit_min) { $wanted_paragraphs [] = $limit_max; $limit_max --; } } $wanted_paragraphs = array_unique ($wanted_paragraphs); sort ($wanted_paragraphs); if (count ($wanted_paragraphs) == 0) $wanted_paragraphs = array (0); $random_paragraph = mt_rand (0, count ($wanted_paragraphs) - 1); $paragraph = $wanted_paragraphs [$random_paragraph]; if ($paragraph == 0) { $paragraph = mt_rand (0, count ($paragraph_positions) - 1); } else $paragraph --; $positions = array ($paragraph); if ($debug_processing) { ai_log ('BLOCK ' . $this->number . ' RANDOM PARAGRAPHS ' . str_replace ('|', ', ', $position_text) . ' => [' . implode (', ', $wanted_paragraphs) . '] of ' . count ($paragraph_positions) . ' => ' . ($paragraph + 1)); } } elseif (strpos ($position_text, ',') !== false) { if ($debug_processing) { ai_log ('BLOCK ' . $this->number . ' BEFORE PARAGRAPHS ' . str_replace ('|', ', ', $position_text) . ' of ' . count ($paragraph_positions) . ' available'); } $new_positions = array (); $positions = explode (',', str_replace (' ', '', $position_text)); foreach ($positions as $index => $position) { if (isset ($position [0]) && strpos ($position, '[') === 0 && strpos ($position, ']') === strlen ($position) - 1) { $wanted_paragraphs_text = trim (substr ($position, 1, strlen ($position) - 2)); $wanted_paragraph_ranges = array (); $wanted_paragraphs = array (); if (strpos ($position, '|') !== false) { $items = explode ('|', str_replace (' ', '', $wanted_paragraphs_text)); foreach ($items as $item) { $wanted_paragraph_ranges []= $item; } } else $wanted_paragraph_ranges []= $wanted_paragraphs_text; foreach ($wanted_paragraph_ranges as $wanted_paragraph_range) { if (strpos ($wanted_paragraph_range, '-') !== false) { $limits = explode ('-', $wanted_paragraph_range); $limit_min = (int) $limits [0]; $limit_max = (int) $limits [1]; } else { $limit_min = (int) $wanted_paragraph_range; $limit_max = (int) $wanted_paragraph_range; } if ($limit_min < 0) $limit_min = 0; else if ($limit_min > 9999) $limit_min = 9999; if ($limit_max < 0) $limit_max = 0; else if ($limit_max > 9999) $limit_max = 9999; if ($limit_min > $limit_max) $limit_max = $limit_min; while ($limit_max >= $limit_min) { $wanted_paragraphs [] = $limit_max; $limit_max --; } } $wanted_paragraphs = array_unique ($wanted_paragraphs); sort ($wanted_paragraphs); if (count ($wanted_paragraphs) == 0) $wanted_paragraphs = array (0); $random_paragraph = mt_rand (0, count ($wanted_paragraphs) - 1); $paragraph = $wanted_paragraphs [$random_paragraph]; if ($paragraph == 0) { $paragraph = mt_rand (0, count ($paragraph_positions) - 1); } else $paragraph --; $positions [$index] = $paragraph; if ($debug_processing) { ai_log ('BLOCK ' . $this->number . ' RANDOM PARAGRAPHS ' . str_replace ('|', ', ', $position) . ' => [' . implode (', ', $wanted_paragraphs) . '] of ' . count ($paragraph_positions) . ' => ' . ($paragraph + 1)); } } elseif (isset ($position [0]) && $position [0] == '%') { unset ($positions [$index]); $position = substr ($position, 1); $mod_value = $position; $offset_value = 0; if (strpos ($mod_value, '@') !== false) { $mod_value_array = explode ('@', $mod_value); $mod_value = $mod_value_array [0]; $offset_value = $mod_value_array [1]; } if (is_numeric ($mod_value) && $mod_value > 0 && is_numeric ($offset_value)) { foreach ($paragraph_positions as $index => $paragraph_position) { if ($index + 1 < $offset_value) continue; if (($index + 1 - $offset_value) % $mod_value == 0) $new_positions []= $index; } } } elseif (is_numeric ($position) && $position > 0 && $position < 1) { $positions [$index] = intval ($position * (count ($paragraph_positions) - 1) + 0.5); } elseif (is_numeric ($position) && $position > - 1 && $position < 0) { $positions [$index] = intval (count ($paragraph_positions) + $position * (count ($paragraph_positions) - 1) - 0.5); } elseif (is_numeric ($position) && $position <= - 1) { $positions [$index] = count ($paragraph_positions) + $position; } elseif ($position == 0) { $positions [$index] = mt_rand (0, count ($paragraph_positions) - 1); } else $positions [$index] = (int) $position - 1; } $positions = array_unique (array_merge ($positions, $new_positions)); sort ($positions); } elseif (isset ($position_text [0]) && $position_text [0] == '%') { $position_text = substr ($position_text, 1); $mod_value = $position_text; $offset_value = 0; if (strpos ($mod_value, '@') !== false) { $mod_value_array = explode ('@', $mod_value); $mod_value = $mod_value_array [0]; $offset_value = $mod_value_array [1]; } if (is_numeric ($mod_value) && $mod_value > 0 && is_numeric ($offset_value)) { foreach ($paragraph_positions as $index => $paragraph_position) { if ($index + 1 < $offset_value) continue; if (($index + 1 - $offset_value) % $mod_value == 0) $positions []= $index; } } } elseif ($position_text == '') { $positions = array (); $min_words_above = $this->get_minimum_words_above (); if (!empty ($min_words_above) && !$before_image) { $words_above = 0; foreach ($paragraph_positions as $index => $paragraph_position) { if ($direction_type != AI_DIRECTION_FROM_BOTTOM) { if ($words_above >= $min_words_above) { $positions []= $index; $words_above = 0; } } if ($multibyte) { $paragraph_code = mb_substr ($content, $paragraph_position, $paragraph_end_positions [$index] - $paragraph_position + 1); } else { $paragraph_code = substr ($content, $paragraph_position, $paragraph_end_positions [$index] - $paragraph_position + 1); } $words_above += number_of_words ($paragraph_code); if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { if ($words_above >= $min_words_above) { $positions []= $index; $words_above = 0; } } } } else foreach ($paragraph_positions as $index => $paragraph_position) { $positions []= $index; } $filter_settings = trim (str_replace (' ', '', $this->get_call_filter())); if (!empty ($filter_settings)) { $filter_counter = $before_image ? AI_FILTER_IMAGES : AI_FILTER_PARAGRAPHS; if ($this->get_filter_type() == $filter_counter) { $filter_values = array (); if (strpos ($filter_settings, ",") !== false) { $filter_values = explode (",", $filter_settings); } else $filter_values []= $filter_settings; $inverted_filter = $this->get_inverted_filter(); $filtered_positions = array (); foreach ($positions as $index => $position) { $insert = false; if (in_array ($index + 1, $filter_values)) { $insert = true; } else { foreach ($filter_values as $filter_value) { $filter_value = trim ($filter_value); if (isset ($filter_value [0]) && $filter_value [0] == '%') { $mod_value = substr ($filter_value, 1); $offset_value = 0; if (strpos ($mod_value, '@') !== false) { $mod_value_array = explode ('@', $mod_value); $mod_value = $mod_value_array [0]; $offset_value = $mod_value_array [1]; } if (is_numeric ($mod_value) && $mod_value > 0 && is_numeric ($offset_value)) { // if (($index + 1) % $mod_value == 0) { if ($index + 1 >= $offset_value && ($index + 1 - $offset_value) % $mod_value == 0) { $insert = true; break; } } } } } if ($insert xor $inverted_filter) $filtered_positions []= $position; } $positions = $filtered_positions; } } } } $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if (!empty ($positions) && !$before_image) { // if (!isset ($paragraph_end_positions)) { // $paragraph_end_positions = array (); // get_paragraph_end_positions ($content, $multibyte, $paragraph_positions, $paragraph_start_strings, $paragraph_end_positions, $dummy); // } $avoid_paragraphs_above = intval ($this->get_avoid_paragraphs_above()); $avoid_paragraphs_below = intval ($this->get_avoid_paragraphs_below()); $avoid_text_above = $this->get_avoid_text_above(); $avoid_text_below = $this->get_avoid_text_below(); $avoid_paragraph_texts_above = explode (",", html_entity_decode (trim ($avoid_text_above))); $avoid_paragraph_texts_below = explode (",", html_entity_decode (trim ($avoid_text_below))); $check_direction = $this->get_avoid_direction(); $max_checks = $this->get_avoid_try_limit(); $check_strictly_inside_paragraphs = false; $failed_clearance_positions = array (); foreach ($positions as $position_index => $position) { $direction = $check_direction; if (($avoid_paragraphs_above != 0 || $avoid_paragraphs_below != 0) && count ($paragraph_positions) > $position) { if ($debug_processing && $this->number != 0) { ai_log ('---------------------------------'); ai_log ('BLOCK ' . $this->number . ' CLEARANCE CHECK POSITION ' . ($position + 1)); } $checks = $max_checks; $saved_position = $position; do { $found_above = false; $paragraph_text_found_above = ''; if ($position != 0 && $avoid_paragraphs_above != 0 && $avoid_text_above != "" && is_array ($avoid_paragraph_texts_above) && count ($avoid_paragraph_texts_above) != 0) { for ($avoid_paragraph_above = $avoid_paragraphs_above; $avoid_paragraph_above > 0; $avoid_paragraph_above --) { $paragraph_position_above = $position - $avoid_paragraph_above; if (!$check_strictly_inside_paragraphs) { if ($paragraph_position_above < 0) { // If paragraph position is not the first one start with the first paragraph if ($position != 0) $paragraph_position_above = 0; // Othewise do not check anything } } if ($paragraph_position_above >= 0) { if ($check_strictly_inside_paragraphs) { $start_position_above = $paragraph_positions [$paragraph_position_above]; $end_position_above = $paragraph_end_positions [$paragraph_position_above]; } else { $start_position_above = $paragraph_positions [$paragraph_position_above]; $end_position_above = $paragraph_positions [$position]; } if ($multibyte) { $paragraph_code = mb_substr ($content, $start_position_above, $end_position_above - $start_position_above); } else { $paragraph_code = substr ($content, $start_position_above, $end_position_above - $start_position_above); } foreach ($avoid_paragraph_texts_above as $paragraph_text_above) { if (trim ($paragraph_text_above) == '') continue; if ($multibyte) { if (mb_stripos ($paragraph_code, trim ($paragraph_text_above)) !== false) { $found_above = true; $paragraph_text_found_above = $paragraph_text_above; break; } } else { if (stripos ($paragraph_code, trim ($paragraph_text_above)) !== false) { $found_above = true; $paragraph_text_found_above = $paragraph_text_above; break; } } } } if ($found_above || !$check_strictly_inside_paragraphs) break; } } $found_below = false; $paragraph_text_found_below = ''; if ($avoid_paragraphs_below != 0 && $avoid_text_below != "" && is_array ($avoid_paragraph_texts_below) && count ($avoid_paragraph_texts_below) != 0) { for ($avoid_paragraph_below = $avoid_paragraphs_below; $avoid_paragraph_below > 0; $avoid_paragraph_below --) { $paragraph_position_below = $position + $avoid_paragraph_below - 1; if (!$check_strictly_inside_paragraphs) { if ($paragraph_position_below >= count ($paragraph_positions)) $paragraph_position_below = count ($paragraph_positions) - 1; } if ($paragraph_position_below < count ($paragraph_positions)) { if ($check_strictly_inside_paragraphs) { $start_position_below = $paragraph_positions [$paragraph_position_below]; $end_position_below = $paragraph_end_positions [$paragraph_position_below]; } else { $start_position_below = $paragraph_positions [$position]; $end_position_below = $paragraph_end_positions [$paragraph_position_below]; } if ($multibyte) { $paragraph_code = mb_substr ($content, $start_position_below, $end_position_below - $start_position_below); } else { $paragraph_code = substr ($content, $start_position_below, $end_position_below - $start_position_below); } foreach ($avoid_paragraph_texts_below as $paragraph_text_below) { if (trim ($paragraph_text_below) == '') continue; if ($multibyte) { if (mb_stripos ($paragraph_code, trim ($paragraph_text_below)) !== false) { $found_below = true; $paragraph_text_found_below = $paragraph_text_below; break; } } else { if (stripos ($paragraph_code, trim ($paragraph_text_below)) !== false) { $found_below = true; $paragraph_text_found_below = $paragraph_text_below; break; } } } } if ($found_below || !$check_strictly_inside_paragraphs) break; } } // echo "position: $position = before #", $position + 1, "
\n"; // echo "checks: $checks
\n"; // echo "direction: $direction
\n"; // if ($found_above) // echo "found_above
\n"; // if ($found_below) // echo "found_below
\n"; // echo "=================
\n"; if ($found_above || $found_below) { if ($debug_processing && $this->number != 0) ai_log ('BLOCK ' . $this->number . ' CLEARANCE CHECK POSITION ' . ($position + 1) . ' FAILED (' . ($found_above ? 'ABOVE: ' . $paragraph_text_found_above .($found_below ? ', ' : '') : '') . ($found_below ? 'BELOW: ' . $paragraph_text_found_below : '') . ')'); $ai_last_check = AI_CHECK_DO_NOT_INSERT; if ($this->get_avoid_action() == AI_DO_NOT_INSERT) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break; } switch ($direction) { case AI_ABOVE: // Try above $ai_last_check = AI_CHECK_AD_ABOVE; // Already at the top - do not insert if ($position == 0) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break 2; } $position --; break; case AI_BELOW: // Try below $ai_last_check = AI_CHECK_AD_BELOW; // Already at the bottom - do not insert if ($position >= count ($paragraph_positions) - 1) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break 2; } $position ++; break; case AI_ABOVE_AND_THEN_BELOW: // Try first above and then below if ($position == 0 || $checks == 0) { // Try below $direction = AI_BELOW; $checks = $max_checks; $position = $saved_position; $ai_last_check = AI_CHECK_AD_BELOW; // Already at the bottom - do not insert if ($position >= count ($paragraph_positions) - 1) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break 2; } $position ++; } else $position --; break; case AI_BELOW_AND_THEN_ABOVE: // Try first below and then above if ($position >= count ($paragraph_positions) - 1 || $checks == 0) { // Try above $direction = AI_ABOVE; $checks = $max_checks; $position = $saved_position; $ai_last_check = AI_CHECK_AD_ABOVE; // Already at the top - do not insert if ($position == 0) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break 2; } $position --; } else $position ++; break; } } else { if ($debug_processing && $this->number != 0) ai_log ('BLOCK ' . $this->number . ' CLEARANCE CHECK POSITION ' . ($position + 1) . ' OK'); // Text not found - insert $positions [$position_index] = $position; break; } // Try next position if ($checks <= 0) { // Suitable position not found - do not insert $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break; } $checks --; } while (true); } // Nothing to do $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_CLEARANCE; if (count ($paragraph_positions) == 0) return $content; } if ($debug_processing && $this->number != 0) ai_log ('---------------------------------'); } if (!$before_image) { $no_insertion_first_paragraphs = intval ($this->get_skip_first_paragraphs ()); $no_insertion_last_paragraphs = intval ($this->get_skip_last_paragraphs ()); if ($no_insertion_first_paragraphs != 0 /*&& $no_insertion_first_paragraphs <= count ($paragraph_positions)*/) { foreach ($positions as $index => $position) { if ($position < $no_insertion_first_paragraphs) unset ($positions [$index]); } $positions = array_values ($positions); } if ($no_insertion_last_paragraphs != 0 /*&& $no_insertion_last_paragraphs <= count ($paragraph_positions)*/) { foreach ($positions as $index => $position) { if ($position >= count ($paragraph_positions) - $no_insertion_last_paragraphs) unset ($positions [$index]); } $positions = array_values ($positions); } } if ($position_preview || !empty ($positions)) { $offset = 0; if (!empty ($positions)) $ai_last_check = AI_CHECK_PARAGRAPH_NUMBER; $real_positions = array (); foreach ($positions as $position_index) $real_positions []= $position_index >= 0 ? $position_index + 1 : '*'; if ($debug_processing && $this->number != 0 && count ($real_positions) != 0) ai_log ('BLOCK ' . $this->number . ' INSERTION POSITIONS: ' . implode (', ', $real_positions)); $min_paragraphs = intval ($this->get_paragraph_number_minimum()); $max_paragraphs = intval ($this->get_paragraph_number_maximum()); $max_page_blocks_enabled = $this->get_max_page_blocks_enabled (); foreach ($paragraph_positions as $counter => $paragraph_position) { if ($position_preview) { if ($multibyte) { $paragraph_code = mb_substr ($content, $paragraph_position + $offset, $paragraph_end_positions [$counter] - $paragraph_position + 1); } else { $paragraph_code = substr ($content, $paragraph_position + $offset, $paragraph_end_positions [$counter] - $paragraph_position + 1); } $paragraph_words = number_of_words ($paragraph_code); $debug_label = $before_image ? 'BI' : 'BP'; $inserted_code = "[[AI_".$debug_label.($counter + 1)."=".$paragraph_words."]]"; } elseif (!empty ($positions) && in_array ($counter, $positions)) { $inserted = false; $ai_last_check = AI_CHECK_PARAGRAPHS_MIN_NUMBER; if (count ($paragraph_positions) >= $min_paragraphs) { $ai_last_check = AI_CHECK_PARAGRAPHS_MAX_NUMBER; if ($max_paragraphs <= 0 || count ($paragraph_positions) <= $max_paragraphs) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if (!$max_page_blocks_enabled || $ai_wp_data [AI_PAGE_BLOCKS] < get_max_page_blocks ()) { // Last check before insertion if ($this->check_and_increment_block_counter ()) { // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$this->get_debug_disable_insertion ()) { $inserted_code = $this->get_code_for_serverside_insertion (); $ai_last_check = AI_CHECK_INSERTED; $this->clear_code_cache (); $inserted = true; } } } } } if ($debug_processing) ai_log (ai_log_block_status ($this->number, $ai_last_check)); if (!$inserted) continue; } else { if ($debug_processing && isset ($failed_clearance_positions [$counter])) ai_log (ai_log_block_status ($this->number, $failed_clearance_positions [$counter])); continue; } if ($multibyte) { if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { $content = mb_substr ($content, 0, $paragraph_position) . $inserted_code . mb_substr ($content, $paragraph_position); } else { $content = mb_substr ($content, 0, $paragraph_position + $offset) . $inserted_code . mb_substr ($content, $paragraph_position + $offset); $offset += mb_strlen ($inserted_code); } } else { if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { $content = substr_replace ($content, $inserted_code, $paragraph_position, 0); } else { $content = substr_replace ($content, $inserted_code, $paragraph_position + $offset, 0); $offset += strlen ($inserted_code); } } } $ai_last_check = AI_CHECK_NONE; // Already logged on each insertion return $content; } // empty $positions $ai_last_check = AI_CHECK_NO_PARAGRAPHS; return $content; } public function after_image ($content, $position_preview = false) { return $this->after_paragraph ($content, $position_preview, true); } public function after_paragraph ($content, $position_preview = false, $after_image = false) { global $ai_wp_data, $ai_last_check, $special_element_tags; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; $multibyte = $ai_wp_data [AI_MBSTRING_LOADED] && get_paragraph_counting_functions() == AI_MULTIBYTE_PARAGRAPH_COUNTING_FUNCTIONS; $paragraph_positions = array (); $active_paragraph_positions = array (); $dummy = array (); if ($multibyte) { $last_content_position = mb_strlen ($content) - 1; } else { $last_content_position = strlen ($content) - 1; } if ($after_image) { $paragraph_tags = 'figure,img,amp-img'; } else $paragraph_tags = trim ($this->get_paragraph_tags()); if ($paragraph_tags == '') return $content; $paragraph_end_strings = explode (",", $paragraph_tags); $ai_last_check = AI_CHECK_PARAGRAPH_TAGS; if (count ($paragraph_end_strings) == 0) return $content; get_paragraph_end_positions ($content, $multibyte, $dummy, $paragraph_end_strings, $paragraph_positions, $active_paragraph_positions); // Nothing to do $ai_last_check = AI_CHECK_PARAGRAPHS_WITH_TAGS; if (array_sum ($active_paragraph_positions) == 0) return $content; sort ($paragraph_positions); ksort ($active_paragraph_positions); $new_active_paragraph_positions = array (); foreach ($active_paragraph_positions as $active_paragraph_position) { $new_active_paragraph_positions [] = $active_paragraph_position; } $active_paragraph_positions = $new_active_paragraph_positions; if (!$this->get_count_inside_blockquote () || $after_image) { $special_element_offsets = array (); if ($after_image) { $special_element_tags_array = array_unique (array_merge ($special_element_tags, array ('figure', 'amp-img'))); } else $special_element_tags_array = $special_element_tags; foreach ($special_element_tags_array as $special_element_tag) { preg_match_all ("/<\/?$special_element_tag/i", $content, $special_elements, PREG_OFFSET_CAPTURE); $nesting = array (); $special_elements = $special_elements [0]; foreach ($special_elements as $index => $special_element) { if (isset ($special_elements [$index + 1][0])) { $tag1 = strtolower ($special_element [0]); $tag2 = strtolower ($special_elements [$index + 1][0]); $start_offset = $special_element [1]; $nesting_ended = false; $tag1_start = $tag1 == "<$special_element_tag"; $tag2_start = $tag2 == "<$special_element_tag"; $tag1_end = $tag1 == "= $special_element_offset [0] && $paragraph_position <= $special_element_offset [1]) $inside_special_element [] = $paragraph_position; } } foreach ($paragraph_positions as $index => $paragraph_position) { if (in_array ($paragraph_position, $inside_special_element)) $active_paragraph_positions [$index] = 0; } } $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_NO_COUNTING_INSIDE; if (array_sum ($active_paragraph_positions) == 0) return $content; } $element_tags = $this->get_count_inside_elements (); if ($element_tags != '') { $special_element_tags_array = explode (',', str_replace (' ', '', $element_tags)); $count_inside = $this->get_count_inside (); $element_text_type = $this->get_count_inside_elements_contain (); $check_only_tag_attributes = $this->get_check_only_tag_attributes (); $element_text = str_replace (' ', '', html_entity_decode ($this->get_count_inside_elements_text ())); if (strpos ($element_text, ",") !== false) { $element_texts = explode (',', $element_text); } elseif (trim ($element_text) != '') $element_texts = array (trim ($element_text)); else $element_texts = array (); $special_element_offsets = array (); foreach ($special_element_tags_array as $special_element_tag) { preg_match_all ("/<\/?$special_element_tag/i", $content, $special_elements, PREG_OFFSET_CAPTURE); $special_elements = $special_elements [0]; if (count ($special_elements) % 2 != 0) { if ($debug_processing) ai_log ('INVALID TAGS: ODD NUMBER OF ' . $special_element_tag . ' TAGS'); } $elements = array (); $nesting = array (); foreach ($special_elements as $index => $special_element) { $tag = strtolower ($special_element [0]); $tag_start = $tag == "<$special_element_tag"; $tag_end = $tag == "]+?)>#', $search_content, $search_content_tag); if (isset ($search_content_tag [1])) { $search_content = $search_content_tag [1]; } } if (stripos ($search_content, $element_text)) { $check = true; break; } } switch ($element_text_type) { case AI_CONTAIN: if ($check) { $special_element_offsets []= $element_offsets; } break; default: if (!$check) { $special_element_offsets []= $element_offsets; } break; } } else { $special_element_offsets []= $element_offsets; } } } $inside_special_element = array (); if (count ($special_element_offsets) != 0) { foreach ($special_element_offsets as $special_element_offset) { foreach ($paragraph_positions as $paragraph_position) { if ($paragraph_position >= $special_element_offset [0] && $paragraph_position <= $special_element_offset [1]) $inside_special_element [] = $paragraph_position; } } } foreach ($paragraph_positions as $index => $paragraph_position) { $paragraph_inside = in_array ($paragraph_position, $inside_special_element); switch ($count_inside) { case AI_COUNT_ONLY: if (!$paragraph_inside) $active_paragraph_positions [$index] = 0; break; default: if ($paragraph_inside) $active_paragraph_positions [$index] = 0; break; } } $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_NO_COUNTING_INSIDE_ELEMENTS; if (array_sum ($active_paragraph_positions) == 0) return $content; } if (!$after_image) { $paragraph_min_words = intval ($this->get_minimum_paragraph_words()); $paragraph_max_words = intval ($this->get_maximum_paragraph_words()); if ($paragraph_min_words != 0 || $paragraph_max_words != 0) { if (!isset ($paragraph_start_positions)) { $paragraph_start_positions = array (); get_paragraph_start_positions ($content, $multibyte, $paragraph_positions, $paragraph_end_strings, $paragraph_start_positions, $dummy); } foreach ($paragraph_positions as $index => $paragraph_position) { if ($active_paragraph_positions [$index] == 0) continue; if ($multibyte) { $paragraph_code = mb_substr ($content, $paragraph_start_positions [$index], $paragraph_position - $paragraph_start_positions [$index] + 1); } else { $paragraph_code = substr ($content, $paragraph_start_positions [$index], $paragraph_position - $paragraph_start_positions [$index] + 1); } if (!$this->check_number_of_words_in_paragraph ($paragraph_code, $paragraph_min_words, $paragraph_max_words)) $active_paragraph_positions [$index] = 0; } } // Nothing to do $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_MIN_MAX_WORDS; if (array_sum ($active_paragraph_positions) == 0) return $content; $paragraph_texts = explode (",", html_entity_decode ($this->get_paragraph_text())); if ($this->get_paragraph_text() != "" && count ($paragraph_texts) != 0) { if (!isset ($paragraph_start_positions)) { $paragraph_start_positions = array (); get_paragraph_start_positions ($content, $multibyte, $paragraph_positions, $paragraph_end_strings, $paragraph_start_positions, $dummy); } $paragraph_text_type = $this->get_paragraph_text_type (); foreach ($paragraph_positions as $index => $paragraph_position) { if ($active_paragraph_positions [$index] == 0) continue; if ($multibyte) { $paragraph_code = mb_substr ($content, $paragraph_start_positions [$index], $paragraph_position - $paragraph_start_positions [$index] + 1); } else { $paragraph_code = substr ($content, $paragraph_start_positions [$index], $paragraph_position - $paragraph_start_positions [$index] + 1); } if ($paragraph_text_type == AI_CONTAIN) { $found = true; foreach ($paragraph_texts as $paragraph_text) { if (trim ($paragraph_text) == '') continue; $paragraph_text = trim ($paragraph_text); $invert = false; if ($paragraph_text [0] == '^') { $paragraph_text = substr ($paragraph_text, 1); $invert = true; } if ($multibyte) { $paragraph_text_found = mb_stripos ($paragraph_code, $paragraph_text) !== false; if ($invert) { $paragraph_text_found = !$paragraph_text_found; } if (!$paragraph_text_found) { $found = false; break; } } else { $paragraph_text_found = stripos ($paragraph_code, $paragraph_text) !== false; if ($invert) { $paragraph_text_found = !$paragraph_text_found; } if (!$paragraph_text_found) { $found = false; break; } } } if (!$found) $active_paragraph_positions [$index] = 0; } elseif ($paragraph_text_type == AI_DO_NOT_CONTAIN) { $found = false; foreach ($paragraph_texts as $paragraph_text) { if (trim ($paragraph_text) == '') continue; $paragraph_text = trim ($paragraph_text); $invert = false; if ($paragraph_text [0] == '^') { $paragraph_text = substr ($paragraph_text, 1); $invert = true; } if ($multibyte) { $paragraph_text_found = mb_stripos ($paragraph_code, $paragraph_text) !== false; if ($invert) { $paragraph_text_found = !$paragraph_text_found; } if ($paragraph_text_found) { $found = true; break; } } else { $paragraph_text_found = stripos ($paragraph_code, $paragraph_text) !== false; if ($invert) { $paragraph_text_found = !$paragraph_text_found; } if ($paragraph_text_found) { $found = true; break; } } } if ($found) $active_paragraph_positions [$index] = 0; } } } // Nothing to do $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_TEXT; if (array_sum ($active_paragraph_positions) == 0) return $content; } // !$after_image $position_text = trim ($this->get_paragraph_number()); if ($after_image) { $direction_type = AI_DIRECTION_FROM_TOP; } else $direction_type = $this->get_direction_type(); // Prepare $paragraph_start_positions // if ($position_preview || $position_text == '') { // Prepare always if (!isset ($paragraph_start_positions)) { $paragraph_start_positions = array (); get_paragraph_start_positions ($content, $multibyte, $paragraph_positions, $paragraph_end_strings, $paragraph_start_positions, $dummy); } $filtered_paragraph_positions = array (); // Use $paragraph_positions for counting as it is checked for consistency foreach ($paragraph_positions as $index => $paragraph_position) { if ($active_paragraph_positions [$index]) $filtered_paragraph_positions [] = $paragraph_start_positions [$index]; } $paragraph_start_positions = $filtered_paragraph_positions; if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { $paragraph_start_positions = array_reverse ($paragraph_start_positions); } // } $filtered_paragraph_positions = array (); foreach ($paragraph_positions as $index => $paragraph_position) { if ($active_paragraph_positions [$index]) $filtered_paragraph_positions [] = $paragraph_position; } $paragraph_positions = $filtered_paragraph_positions; if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { $paragraph_positions = array_reverse ($paragraph_positions); } // $positions contains indexes in $paragraph_positions $positions = array (); if (!$position_preview) { if (strpos ($position_text, '[') !== false) { $random_range = false; for ($i = 0; $i < strlen ($position_text); $i ++) { switch ($position_text [$i]) { case '[': $random_range = true; break; case ']': $random_range = false; break; case ',': if ($random_range) { $position_text [$i] = '|'; } break; } } } $position = $position_text; if (is_numeric ($position)) { if ($position > 0 && $position < 1) { $position = intval ($position * (count ($paragraph_positions) - 1) + 0.5); } elseif ($position > - 1 && $position < 0) { $position = intval (count ($paragraph_positions) + $position * (count ($paragraph_positions) - 1) - 0.5); } elseif ($position <= - 1) { $position = count ($paragraph_positions) + $position; } elseif ($position == 0) { $position = mt_rand (0, count ($paragraph_positions) - 1); } else $position --; $positions = array ($position); } elseif (strpos ($position_text, '[') === 0 && strpos ($position_text, ']') === strlen ($position_text) - 1) { $wanted_paragraphs_text = trim (substr ($position_text, 1, strlen ($position_text) - 2)); $wanted_paragraph_ranges = array (); $wanted_paragraphs = array (); if (strpos ($position_text, '|') !== false) { $items = explode ('|', str_replace (' ', '', $wanted_paragraphs_text)); foreach ($items as $item) { $wanted_paragraph_ranges []= $item; } } else $wanted_paragraph_ranges []= $wanted_paragraphs_text; foreach ($wanted_paragraph_ranges as $wanted_paragraph_range) { if (strpos ($wanted_paragraph_range, '-') !== false) { $limits = explode ('-', $wanted_paragraph_range); $limit_min = (int) $limits [0]; $limit_max = (int) $limits [1]; } else { $limit_min = (int) $wanted_paragraph_range; $limit_max = (int) $wanted_paragraph_range; } if ($limit_min < 0) $limit_min = 0; else if ($limit_min > 9999) $limit_min = 9999; if ($limit_max < 0) $limit_max = 0; else if ($limit_max > 9999) $limit_max = 9999; if ($limit_min > $limit_max) $limit_max = $limit_min; while ($limit_max >= $limit_min) { $wanted_paragraphs [] = $limit_max; $limit_max --; } } $wanted_paragraphs = array_unique ($wanted_paragraphs); sort ($wanted_paragraphs); if (count ($wanted_paragraphs) == 0) $wanted_paragraphs = array (0); $random_paragraph = mt_rand (0, count ($wanted_paragraphs) - 1); $paragraph = $wanted_paragraphs [$random_paragraph]; if ($paragraph == 0) { $paragraph = mt_rand (0, count ($paragraph_positions) - 1); } else $paragraph --; $positions = array ($paragraph); if ($debug_processing) { ai_log ('BLOCK ' . $this->number . ' RANDOM PARAGRAPHS ' . str_replace ('|', ', ', $position_text) . ' => [' . implode (',', $wanted_paragraphs) . '] of ' . count ($paragraph_positions) . ' => ' . ($paragraph + 1)); } } elseif (strpos ($position_text, ',') !== false) { if ($debug_processing) { ai_log ('BLOCK ' . $this->number . ' AFTER PARAGRAPHS ' . str_replace ('|', ', ', $position_text) . ' of ' . count ($paragraph_positions) . ' available'); } $new_positions = array (); $positions = explode (',', str_replace (' ', '', $position_text)); foreach ($positions as $index => $position) { if (isset ($position [0]) && strpos ($position, '[') === 0 && strpos ($position, ']') === strlen ($position) - 1) { $wanted_paragraphs_text = trim (substr ($position, 1, strlen ($position) - 2)); $wanted_paragraph_ranges = array (); $wanted_paragraphs = array (); if (strpos ($position, '|') !== false) { $items = explode ('|', str_replace (' ', '', $wanted_paragraphs_text)); foreach ($items as $item) { $wanted_paragraph_ranges []= $item; } } else $wanted_paragraph_ranges []= $wanted_paragraphs_text; foreach ($wanted_paragraph_ranges as $wanted_paragraph_range) { if (strpos ($wanted_paragraph_range, '-') !== false) { $limits = explode ('-', $wanted_paragraph_range); $limit_min = (int) $limits [0]; $limit_max = (int) $limits [1]; } else { $limit_min = (int) $wanted_paragraph_range; $limit_max = (int) $wanted_paragraph_range; } if ($limit_min < 0) $limit_min = 0; else if ($limit_min > 9999) $limit_min = 9999; if ($limit_max < 0) $limit_max = 0; else if ($limit_max > 9999) $limit_max = 9999; if ($limit_min > $limit_max) $limit_max = $limit_min; while ($limit_max >= $limit_min) { $wanted_paragraphs [] = $limit_max; $limit_max --; } } $wanted_paragraphs = array_unique ($wanted_paragraphs); sort ($wanted_paragraphs); if (count ($wanted_paragraphs) == 0) $wanted_paragraphs = array (0); $random_paragraph = mt_rand (0, count ($wanted_paragraphs) - 1); $paragraph = $wanted_paragraphs [$random_paragraph]; if ($paragraph == 0) { $paragraph = mt_rand (0, count ($paragraph_positions) - 1); } else $paragraph --; $positions [$index] = $paragraph; if ($debug_processing) { ai_log ('BLOCK ' . $this->number . ' RANDOM PARAGRAPHS ' . str_replace ('|', ', ', $position) . ' => [' . implode (', ', $wanted_paragraphs) . '] of ' . count ($paragraph_positions) . ' => ' . ($paragraph + 1)); } } elseif (isset ($position [0]) && $position [0] == '%') { unset ($positions [$index]); $position = substr ($position, 1); $mod_value = $position; $offset_value = 0; if (strpos ($mod_value, '@') !== false) { $mod_value_array = explode ('@', $mod_value); $mod_value = $mod_value_array [0]; $offset_value = $mod_value_array [1]; } if (is_numeric ($mod_value) && $mod_value > 0 && is_numeric ($offset_value)) { foreach ($paragraph_positions as $index => $paragraph_position) { if ($index + 1 < $offset_value) continue; if (($index + 1 - $offset_value) % $mod_value == 0) $new_positions []= $index; } } } elseif (is_numeric ($position) && $position > 0 && $position < 1) { $positions [$index] = intval ($position * (count ($paragraph_positions) - 1) + 0.5); } elseif (is_numeric ($position) && $position > - 1 && $position < 0) { $positions [$index] = intval (count ($paragraph_positions) + $position * (count ($paragraph_positions) - 1) - 0.5); } elseif (is_numeric ($position) && $position <= - 1) { $positions [$index] = count ($paragraph_positions) + $position; } elseif ($position == 0) { $positions [$index] = mt_rand (0, count ($paragraph_positions) - 1); } else $positions [$index] = (int) $position - 1; } $positions = array_unique (array_merge ($positions, $new_positions)); sort ($positions); } elseif (isset ($position_text [0]) && $position_text [0] == '%') { $position_text = substr ($position_text, 1); $mod_value = $position_text; $offset_value = 0; if (strpos ($mod_value, '@') !== false) { $mod_value_array = explode ('@', $mod_value); $mod_value = $mod_value_array [0]; $offset_value = $mod_value_array [1]; } if (is_numeric ($mod_value) && $mod_value > 0 && is_numeric ($offset_value)) { foreach ($paragraph_positions as $index => $paragraph_position) { if ($index + 1 < $offset_value) continue; if (($index + 1 - $offset_value) % $mod_value == 0) $positions []= $index; } } } elseif ($position_text == '') { $positions = array (); $min_words_above = $this->get_minimum_words_above (); if (!empty ($min_words_above) && !$after_image) { $words_above = 0; foreach ($paragraph_positions as $index => $paragraph_position) { if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { if ($words_above >= $min_words_above) { $positions []= $index; $words_above = 0; } } if ($multibyte) { $paragraph_code = mb_substr ($content, $paragraph_start_positions [$index], $paragraph_position - $paragraph_start_positions [$index] + 1); } else { $paragraph_code = substr ($content, $paragraph_start_positions [$index], $paragraph_position - $paragraph_start_positions [$index] + 1); } $words_above += number_of_words ($paragraph_code); if ($direction_type != AI_DIRECTION_FROM_BOTTOM) { if ($words_above >= $min_words_above) { $positions []= $index; $words_above = 0; } } } } else foreach ($paragraph_positions as $index => $paragraph_position) { $positions []= $index; } $filter_settings = trim (str_replace (' ', '', $this->get_call_filter())); if (!empty ($filter_settings)) { $filter_counter = $after_image ? AI_FILTER_IMAGES : AI_FILTER_PARAGRAPHS; if ($this->get_filter_type() == $filter_counter) { $filter_values = array (); if (strpos ($filter_settings, ",") !== false) { $filter_values = explode (",", $filter_settings); } else $filter_values []= $filter_settings; $inverted_filter = $this->get_inverted_filter(); $filtered_positions = array (); foreach ($positions as $index => $position) { $insert = false; if (in_array ($index + 1, $filter_values)) { $insert = true; } else { foreach ($filter_values as $filter_value) { $filter_value = trim ($filter_value); if (isset ($filter_value [0]) && $filter_value [0] == '%') { $mod_value = substr ($filter_value, 1); $offset_value = 0; if (strpos ($mod_value, '@') !== false) { $mod_value_array = explode ('@', $mod_value); $mod_value = $mod_value_array [0]; $offset_value = $mod_value_array [1]; } // if (is_numeric ($mod_value) && $mod_value > 0) { if (is_numeric ($mod_value) && $mod_value > 0 && is_numeric ($offset_value)) { // if (($index + 1) % $mod_value == 0) { if ($index + 1 >= $offset_value && ($index + 1 - $offset_value) % $mod_value == 0) { $insert = true; break; } } } } } if ($insert xor $inverted_filter) $filtered_positions []= $position; } $positions = $filtered_positions; } } } } $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if (!empty ($positions) && !$after_image) { // Not needed anymore // if (!isset ($paragraph_start_positions)) { // $paragraph_start_positions = array (); // get_paragraph_start_positions ($content, $multibyte, $paragraph_positions, $paragraph_end_strings, $paragraph_start_positions, $dummy); // } $avoid_paragraphs_above = intval ($this->get_avoid_paragraphs_above()); $avoid_paragraphs_below = intval ($this->get_avoid_paragraphs_below()); $avoid_text_above = $this->get_avoid_text_above(); $avoid_text_below = $this->get_avoid_text_below(); $avoid_paragraph_texts_above = explode (",", html_entity_decode (trim ($avoid_text_above))); $avoid_paragraph_texts_below = explode (",", html_entity_decode (trim ($avoid_text_below))); $check_direction = $this->get_avoid_direction(); $max_checks = $this->get_avoid_try_limit(); $check_strictly_inside_paragraphs = false; $failed_clearance_positions = array (); foreach ($positions as $position_index => $position) { $direction = $check_direction; if (($avoid_paragraphs_above != 0 || $avoid_paragraphs_below != 0) && count ($paragraph_positions) > $position) { if ($debug_processing && $this->number != 0) { ai_log ('---------------------------------'); ai_log ('BLOCK ' . $this->number . ' CLEARANCE CHECK POSITION ' . ($position + 1)); } $checks = $max_checks; $saved_position = $position; do { $found_above = false; $paragraph_text_found_above = ''; if ($avoid_paragraphs_above != 0 && $avoid_text_above != "" && is_array ($avoid_paragraph_texts_above) && count ($avoid_paragraph_texts_above) != 0) { for ($avoid_paragraph_above = $avoid_paragraphs_above; $avoid_paragraph_above > 0; $avoid_paragraph_above --) { $paragraph_position_above = $position - $avoid_paragraph_above + 1; if (!$check_strictly_inside_paragraphs) { if ($paragraph_position_above < 0) $paragraph_position_above = 0; } if ($paragraph_position_above >= 0) { if ($check_strictly_inside_paragraphs) { $start_position_above = $paragraph_start_positions [$paragraph_position_above]; $end_position_above = $paragraph_positions [$paragraph_position_above]; } else { $start_position_above = $paragraph_start_positions [$paragraph_position_above]; $end_position_above = $paragraph_positions [$position]; } if ($multibyte) { $paragraph_code = mb_substr ($content, $start_position_above, $end_position_above - $start_position_above); } else { $paragraph_code = substr ($content, $start_position_above, $end_position_above - $start_position_above); } foreach ($avoid_paragraph_texts_above as $paragraph_text_above) { if (trim ($paragraph_text_above) == '') continue; if ($multibyte) { if (mb_stripos ($paragraph_code, trim ($paragraph_text_above)) !== false) { $found_above = true; $paragraph_text_found_above = $paragraph_text_above; break; } } else { if (stripos ($paragraph_code, trim ($paragraph_text_above)) !== false) { $found_above = true; $paragraph_text_found_above = $paragraph_text_above; break; } } } } if ($found_above || !$check_strictly_inside_paragraphs) break; } } $found_below = false; $paragraph_text_found_below = ''; if ($avoid_paragraphs_below != 0 && $position != count ($paragraph_positions) - 1 && $avoid_text_below != "" && is_array ($avoid_paragraph_texts_below) && count ($avoid_paragraph_texts_below) != 0) { for ($avoid_paragraph_below = $avoid_paragraphs_below; $avoid_paragraph_below > 0; $avoid_paragraph_below --) { $paragraph_position_below = $position + $avoid_paragraph_below; if (!$check_strictly_inside_paragraphs) { if ($paragraph_position_below >= count ($paragraph_positions)) { // If paragraph position is not the last one end with the last paragraph if ($position != count ($paragraph_positions) - 1) $paragraph_position_below = count ($paragraph_positions) - 1; // Othewise do not check anything } } if ($paragraph_position_below < count ($paragraph_positions)) { if ($check_strictly_inside_paragraphs) { $start_position_below = $paragraph_start_positions [$paragraph_position_below]; $end_position_below = $paragraph_positions [$paragraph_position_below]; } else { $start_position_below = $paragraph_positions [$position]; $end_position_below = $paragraph_positions [$paragraph_position_below]; } if ($multibyte) { $paragraph_code = mb_substr ($content, $start_position_below, $end_position_below - $start_position_below); } else { $paragraph_code = substr ($content, $start_position_below, $end_position_below - $start_position_below); } foreach ($avoid_paragraph_texts_below as $paragraph_text_below) { if (trim ($paragraph_text_below) == '') continue; if ($multibyte) { if (mb_stripos ($paragraph_code, trim ($paragraph_text_below)) !== false) { $found_below = true; $paragraph_text_found_below = $paragraph_text_below; break; } } else { if (stripos ($paragraph_code, trim ($paragraph_text_below)) !== false) { $found_below = true; $paragraph_text_found_below = $paragraph_text_below; break; } } } } if ($found_below || !$check_strictly_inside_paragraphs) break; } } // echo "position: $position = after #", $position + 1, "
\n"; // echo "checks: $checks
\n"; // echo "direction: $direction
\n"; // if ($found_above) // echo "found_above
\n"; // if ($found_below) // echo "found_below
\n"; // echo "=================
\n"; if ($found_above || $found_below) { if ($debug_processing && $this->number != 0) ai_log ('BLOCK ' . $this->number . ' CLEARANCE CHECK POSITION ' . ($position + 1) . ' FAILED (' . ($found_above ? 'ABOVE: ' . $paragraph_text_found_above .($found_below ? ', ' : '') : '') . ($found_below ? 'BELOW: ' . $paragraph_text_found_below : '') . ')'); $ai_last_check = AI_CHECK_DO_NOT_INSERT; if ($this->get_avoid_action() == AI_DO_NOT_INSERT) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break; } switch ($direction) { case AI_ABOVE: // Try above $ai_last_check = AI_CHECK_AD_ABOVE; // Already at the top - do not insert if ($position == 0) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break 2; } $position --; break; case AI_BELOW: // Try below $ai_last_check = AI_CHECK_AD_BELOW; // Already at the bottom - do not insert if ($position >= count ($paragraph_positions) - 1) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break 2; } $position ++; break; case AI_ABOVE_AND_THEN_BELOW: // Try first above and then below if ($position == 0 || $checks == 0) { // Try below $direction = AI_BELOW; $checks = $max_checks; $position = $saved_position; $ai_last_check = AI_CHECK_AD_BELOW; // Already at the bottom - do not insert if ($position >= count ($paragraph_positions) - 1) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break 2; } $position ++; } else $position --; break; case AI_BELOW_AND_THEN_ABOVE: // Try first below and then above if ($position >= count ($paragraph_positions) - 1 || $checks == 0) { // Try above $direction = AI_ABOVE; $checks = $max_checks; $position = $saved_position; $ai_last_check = AI_CHECK_AD_ABOVE; // Already at the top - do not insert if ($position == 0) { $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break 2; } $position --; } else $position ++; break; } } else { if ($debug_processing && $this->number != 0) ai_log ('BLOCK ' . $this->number . ' CLEARANCE CHECK POSITION ' . ($position + 1) . ' OK'); // Text not found - insert $positions [$position_index] = $position; break; } // Try next position if ($checks <= 0) { // Suitable position not found - do not insert $failed_clearance_positions [$positions [$position_index]] = $ai_last_check; $positions [$position_index] = - 1; break; } $checks --; } while (true); } // Nothing to do $ai_last_check = AI_CHECK_PARAGRAPHS_AFTER_CLEARANCE; if (count ($paragraph_positions) == 0) return $content; } if ($debug_processing && $this->number != 0) ai_log ('---------------------------------'); } if (!$after_image) { $no_insertion_first_paragraphs = intval ($this->get_skip_first_paragraphs ()); $no_insertion_last_paragraphs = intval ($this->get_skip_last_paragraphs ()); if ($no_insertion_first_paragraphs != 0 /*&& $no_insertion_first_paragraphs <= count ($paragraph_positions)*/) { foreach ($positions as $index => $position) { if ($position < $no_insertion_first_paragraphs) unset ($positions [$index]); } $positions = array_values ($positions); } if ($no_insertion_last_paragraphs != 0 /*&& $no_insertion_last_paragraphs <= count ($paragraph_positions)*/) { foreach ($positions as $index => $position) { if ($position >= count ($paragraph_positions) - $no_insertion_last_paragraphs) unset ($positions [$index]); } $positions = array_values ($positions); } } if ($position_preview || !empty ($positions)) { $offset = 0; if (!empty ($positions)) $ai_last_check = AI_CHECK_PARAGRAPH_NUMBER; $real_positions = array (); foreach ($positions as $position_index) $real_positions []= $position_index >= 0 ? $position_index + 1 : '*'; if ($debug_processing && $this->number != 0 && count ($real_positions) != 0) ai_log ('BLOCK ' . $this->number . ' INSERTION POSITIONS: ' . implode (', ', $real_positions) . ' of ' . count ($paragraph_positions)); $min_paragraphs = intval ($this->get_paragraph_number_minimum()); $max_paragraphs = intval ($this->get_paragraph_number_maximum()); $max_page_blocks_enabled = $this->get_max_page_blocks_enabled (); foreach ($paragraph_positions as $counter => $paragraph_position) { $debug_label = $after_image ? 'AI' : 'AP'; if ($position_preview) $inserted_code = "[[AI_".$debug_label.($counter + 1)."]]"; elseif (!empty ($positions) && in_array ($counter, $positions)) { $inserted = false; $ai_last_check = AI_CHECK_PARAGRAPHS_MIN_NUMBER; if (count ($paragraph_positions) >= $min_paragraphs) { $ai_last_check = AI_CHECK_PARAGRAPHS_MAX_NUMBER; if ($max_paragraphs <= 0 || count ($paragraph_positions) <= $max_paragraphs) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if (!$max_page_blocks_enabled || $ai_wp_data [AI_PAGE_BLOCKS] < get_max_page_blocks ()) { // Last check before insertion if ($this->check_and_increment_block_counter ()) { // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$this->get_debug_disable_insertion ()) { $inserted_code = $this->get_code_for_serverside_insertion (); $ai_last_check = AI_CHECK_INSERTED; $this->clear_code_cache (); $inserted = true; } } } } } if ($debug_processing) ai_log (ai_log_block_status ($this->number, $ai_last_check)); if (!$inserted) continue; } else { if ($debug_processing && isset ($failed_clearance_positions [$counter])) ai_log (ai_log_block_status ($this->number, $failed_clearance_positions [$counter])); continue; } if ($multibyte) { if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { $content = mb_substr ($content, 0, $paragraph_position + 1) . $inserted_code . mb_substr ($content, $paragraph_position + 1); } else { $content = mb_substr ($content, 0, $paragraph_position + $offset + 1) . $inserted_code . mb_substr ($content, $paragraph_position + $offset + 1); $offset += mb_strlen ($inserted_code); } } else { if ($direction_type == AI_DIRECTION_FROM_BOTTOM) { $content = substr_replace ($content, $inserted_code, $paragraph_position + 1, 0); } else { $content = substr_replace ($content, $inserted_code, $paragraph_position + $offset + 1, 0); $offset += strlen ($inserted_code); } } } $ai_last_check = AI_CHECK_NONE; // Already logged on each insertion return $content; } // empty $positions $ai_last_check = AI_CHECK_NO_PARAGRAPHS; return $content; } // Deprecated function manual ($content){ if (preg_match_all("/{adinserter (.+?)}/", $content, $tags)){ $block_class_name = get_block_class_name (); $viewport_classes = $this->get_viewport_classes (); if ($block_class_name != '' || $viewport_classes != '') { if ($block_class_name =='') $viewport_classes = trim ($viewport_classes); $class = " class='" . ($block_class_name != '' ? $block_class_name . " " . $block_class_name . "-" . $this->number : '') . $viewport_classes ."'"; } else $class = ''; // $display_for_devices = $this->get_display_for_devices (); foreach ($tags [1] as $tag) { $ad_tag = strtolower (trim ($tag)); $ad_name = strtolower (trim ($this->get_ad_name())); if ($ad_tag == $ad_name || $ad_tag == $this->number) { if ($this->get_alignment_type() == AI_ALIGNMENT_NO_WRAPPING) $ad_code = $this->ai_getProcessedCode (); else $ad_code = "" . $this->ai_getProcessedCode () . ""; $content = preg_replace ("/{adinserter " . $tag . "}/", $ad_code, $content); } } } return $content; } // Deprecated function display_disabled ($content){ $ad_name = $this->get_ad_name(); if (preg_match ("//i", $content)) return true; if (preg_match ("//i", $content)) return true; if (preg_match ("//i", $content)) return true; if (strpos ($content, "") != false) return true; return false; } function check_disabled () { global $ai_wp_data; if (isset ($ai_wp_data [AI_DISABLED_BLOCKS])) { if (in_array ($this->number, $ai_wp_data [AI_DISABLED_BLOCKS])) { return false; } if (in_array ('#', $ai_wp_data [AI_DISABLED_BLOCKS])) { return false; } } return true; } function check_category ($categories = null, $cat_type = AI_WHITE_LIST) { global $ai_wp_data; if ($categories === null) { $categories = trim (strtolower ($this->get_ad_block_cat())); $cat_type = $this->get_ad_block_cat_type(); } if ($categories == AD_EMPTY_DATA) return true; switch ($ai_wp_data [AI_WP_PAGE_TYPE]) { case AI_PT_STATIC: case AI_PT_POST: $wp_categories = get_the_category (); break; default: $wp_categories = get_queried_object(); if ($wp_categories instanceof WP_Term) { $wp_categories = array ($wp_categories); } else $wp_categories = array (); break; } if ($cat_type == AI_BLACK_LIST) { // if ($categories == AD_EMPTY_DATA) return true; $cats_listed = explode (",", $categories); foreach ($wp_categories as $wp_category) { if (isset ($wp_category->cat_name) && isset ($wp_category->slug)) foreach ($cats_listed as $cat_disabled) { $check_parent = true; $check_childern = false; $cat_disabled = trim ($cat_disabled); if (substr ($cat_disabled, - 1) == '*') { $check_childern = true; $cat_disabled = rtrim ($cat_disabled, '*'); } elseif (substr ($cat_disabled, - 1) == '+') { $check_parent = false; $check_childern = true; $cat_disabled = rtrim ($cat_disabled, '+'); } $wp_category_name = strtolower ($wp_category->cat_name); $wp_category_slug = strtolower ($wp_category->slug); if ($check_parent) { if ($wp_category_name == $cat_disabled || $wp_category_slug == $cat_disabled) { return false; } } if ($check_childern) { if (ai_post_is_in_child_categories ($cat_disabled)) { return false; } } } } return true; } else { // if ($categories == AD_EMPTY_DATA) return false; $cats_listed = explode (",", $categories); foreach ($wp_categories as $wp_category) { if (isset ($wp_category->cat_name) && isset ($wp_category->slug)) foreach ($cats_listed as $cat_enabled) { $check_parent = true; $check_childern = false; $cat_enabled = trim ($cat_enabled); if (substr ($cat_enabled, - 1) == '*') { $check_childern = true; $cat_enabled = rtrim ($cat_enabled, '*'); } elseif (substr ($cat_enabled, - 1) == '+') { $check_parent = false; $check_childern = true; $cat_enabled = rtrim ($cat_enabled, '+'); } $wp_category_name = strtolower ($wp_category->cat_name); $wp_category_slug = strtolower ($wp_category->slug); if ($check_parent) { if ($wp_category_name == $cat_enabled || $wp_category_slug == $cat_enabled) { return true; } } if ($check_childern) { if (ai_post_is_in_child_categories ($cat_enabled)) { return true; } } } } return false; } } function check_tag ($tags = null, $tag_type = AI_WHITE_LIST) { if ($tags === null) { $tags = $this->get_ad_block_tag(); $tag_type = $this->get_ad_block_tag_type(); } $tags = trim ($tags); if ($tags == AD_EMPTY_DATA) return true; $tags_listed = explode (",", $tags); foreach ($tags_listed as $index => $tag_listed) { $tags_listed [$index] = trim ($tag_listed); } // $has_any_of_the_given_tags = has_tag ($tags_listed); $has_any_of_the_given_tags = has_tag ($tags_listed, ai_get_post_id ()); if ($tag_type == AI_BLACK_LIST) { // if ($tags == AD_EMPTY_DATA) return true; if (is_tag()) { foreach ($tags_listed as $tag_listed) { if (is_tag ($tag_listed)) return false; } return true; } return !$has_any_of_the_given_tags; } else { // if ($tags == AD_EMPTY_DATA) return false; if (is_tag()) { foreach ($tags_listed as $tag_listed) { if (is_tag ($tag_listed)) return true; } return false; } return $has_any_of_the_given_tags; } } function check_taxonomy ($taxonomies = null, $taxonomy_type = AI_WHITE_LIST) { global $ai_wp_data; if ($taxonomies === null) { $taxonomies = trim ($this->get_ad_block_taxonomy ()); $taxonomy_type = $this->get_ad_block_taxonomy_type(); } if ($taxonomies == AD_EMPTY_DATA) return true; if ($taxonomy_type == AI_BLACK_LIST) { $taxonomies_listed = explode (",", $taxonomies); foreach ($taxonomies_listed as $taxonomy_disabled) { $taxonomy_disabled_org = trim ($taxonomy_disabled); $taxonomy_disabled = strtolower ($taxonomy_disabled_org); if (strpos ($taxonomy_disabled, 'user:') === 0) { $current_user = wp_get_current_user(); $terms = explode (':', $taxonomy_disabled); if ($terms [1] == 'logged-in') { return !is_user_logged_in (); } elseif ($terms [1] == 'not-logged-in') { return is_user_logged_in (); } if ($terms [1] == $current_user->user_login) return false; } elseif (strpos ($taxonomy_disabled, 'author:') === 0) { if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) $current_author = strtolower (get_the_author_meta ('user_login')); else $current_author = ''; $terms = explode (':', $taxonomy_disabled); if ($terms [1] == $current_author) return false; } elseif (strpos ($taxonomy_disabled, 'user-role:') === 0) { $current_user = wp_get_current_user(); $terms = explode (':', $taxonomy_disabled); foreach (wp_get_current_user()->roles as $role) { if ($terms [1] == $role) return false; } } elseif (strpos ($taxonomy_disabled, 'post-type:') === 0) { $post_type = get_post_type (); $terms = explode (':', $taxonomy_disabled); if ($terms [1] == $post_type) return false; } elseif (strpos ($taxonomy_disabled, 'primary-category:') === 0) { $primary_category = explode (':', $taxonomy_disabled); if ($primary_category [1] == ai_primary_category ()) return false; } elseif (strpos ($taxonomy_disabled, 'yoast-primary-category:') === 0) { $primary_category = explode (':', $taxonomy_disabled); if ($primary_category [1] == ai_yoast_primary_category ()) return false; } elseif (strpos ($taxonomy_disabled, 'multisite:') === 0) { if (is_multisite () && function_exists ('ai_plugin_settings')) { $site_id = explode (':', $taxonomy_disabled); if ($site_id [1] == '#' && is_main_site ()) return false; if (get_current_blog_id () == $site_id [1]) return false; } else return true; } elseif (strpos ($taxonomy_disabled_org, 'meta:') === 0) { $meta_data = explode (':', str_replace ('meta:', '', $taxonomy_disabled_org)); if (count ($meta_data) == 2) { if (get_post_meta (get_the_id (), $meta_data [0], true) == $meta_data [1]) return false; } else { if (get_post_meta (get_the_id (), $meta_data [0], true) != '') return false; } } $taxonomy_names = get_post_taxonomies (); foreach ($taxonomy_names as $taxonomy_name) { $terms = get_the_terms (0, $taxonomy_name); if (is_array ($terms)) { foreach ($terms as $term) { $post_term_name = strtolower ($term->name); $post_term_slug = strtolower ($term->slug); $post_taxonomy = strtolower ($term->taxonomy); if ($post_term_name == $taxonomy_disabled || $post_term_slug == $taxonomy_disabled) return false; $post_taxonomy = strtolower ($term->taxonomy); if ($post_taxonomy == $taxonomy_disabled) return false; $check_parent = true; $check_childern = false; if (substr ($taxonomy_disabled, - 1) == '*') { $check_childern = true; $taxonomy_disabled = rtrim ($taxonomy_disabled, '*'); } elseif (substr ($taxonomy_disabled, - 1) == '+') { $check_parent = false; $check_childern = true; $taxonomy_disabled = rtrim ($taxonomy_disabled, '+'); } if ($check_parent) { if ($taxonomy_disabled == $post_taxonomy . ':' . $post_term_slug) { return false; } } if ($check_childern) { if (strpos ($taxonomy_disabled, ':') !== false) { $taxonomy_data = explode (':', $taxonomy_disabled); if (count ($taxonomy_data) == 2 && ai_post_is_in_child_taxonomies ($taxonomy_data [0], $taxonomy_data [1])) { return false; } } } } } } } return true; } else { $taxonomies_listed = explode (",", $taxonomies); foreach ($taxonomies_listed as $taxonomy_enabled) { $taxonomy_enabled_org = trim ($taxonomy_enabled); $taxonomy_enabled = strtolower ($taxonomy_enabled_org); if (strpos ($taxonomy_enabled, 'user:') === 0) { $current_user = wp_get_current_user(); $terms = explode (':', $taxonomy_enabled); if ($terms [1] == 'logged-in') { return is_user_logged_in (); } elseif ($terms [1] == 'not-logged-in') { return !is_user_logged_in (); } if ($terms [1] == $current_user->user_login) return true; } elseif (strpos ($taxonomy_enabled, 'author:') === 0) { if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) $current_author = strtolower (get_the_author_meta ('user_login')); else $current_author = ''; $terms = explode (':', $taxonomy_enabled); if ($terms [1] == $current_author) return true; } elseif (strpos ($taxonomy_enabled, 'user-role:') === 0) { $current_user = wp_get_current_user(); $terms = explode (':', $taxonomy_enabled); foreach (wp_get_current_user()->roles as $role) { if ($terms [1] == $role) return true; } } elseif (strpos ($taxonomy_enabled, 'post-type:') === 0) { $post_type = get_post_type (); $terms = explode (':', $taxonomy_enabled); if ($terms [1] == $post_type) return true; } elseif (strpos ($taxonomy_enabled, 'primary-category:') === 0) { $primary_category = explode (':', $taxonomy_enabled); if ($primary_category [1] == ai_primary_category ()) return true; } elseif (strpos ($taxonomy_enabled, 'yoast-primary-category:') === 0) { $primary_category = explode (':', $taxonomy_enabled); if ($primary_category [1] == ai_yoast_primary_category ()) return true; } elseif (strpos ($taxonomy_enabled, 'multisite:') === 0) { if (is_multisite () && function_exists ('ai_plugin_settings')) { $site_id = explode (':', $taxonomy_enabled); if ($site_id [1] == '#' && is_main_site ()) return true; if (get_current_blog_id () == $site_id [1]) return true; } else return false; } elseif (strpos ($taxonomy_enabled_org, 'meta:') === 0) { $meta_data = explode (':', str_replace ('meta:', '', $taxonomy_enabled_org)); if (count ($meta_data) == 2) { if (get_post_meta (get_the_id (), $meta_data [0], true) == $meta_data [1]) return true; } else { if (get_post_meta (get_the_id (), $meta_data [0], true) != '') return true; } } $taxonomy_names = get_post_taxonomies (); foreach ($taxonomy_names as $taxonomy_name) { $terms = get_the_terms (0, $taxonomy_name); if (is_array ($terms)) { foreach ($terms as $term) { $post_term_name = strtolower ($term->name); $post_term_slug = strtolower ($term->slug); $post_taxonomy = strtolower ($term->taxonomy); if ($post_term_name == $taxonomy_enabled || $post_term_slug == $taxonomy_enabled) return true; $post_taxonomy = strtolower ($term->taxonomy); if ($post_taxonomy == $taxonomy_enabled) return true; $check_parent = true; $check_childern = false; if (substr ($taxonomy_enabled, - 1) == '*') { $check_childern = true; $taxonomy_enabled = rtrim ($taxonomy_enabled, '*'); } elseif (substr ($taxonomy_enabled, - 1) == '+') { $check_parent = false; $check_childern = true; $taxonomy_enabled = rtrim ($taxonomy_enabled, '+'); } if ($check_parent) { if ($taxonomy_enabled == $post_taxonomy . ':' . $post_term_slug) { return true; } } if ($check_childern) { if (strpos ($taxonomy_enabled, ':') !== false) { $taxonomy_data = explode (':', $taxonomy_enabled); if (count ($taxonomy_data) == 2 && ai_post_is_in_child_taxonomies ($taxonomy_data [0], $taxonomy_data [1])) { return true; } } } } } } } return false; } } function check_id ($ids = null, $id_type = AI_WHITE_LIST) { global $ai_wp_data; // Check post IDs only on posts and static pages if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_POST && $ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_STATIC) return true; if ($ids === null) { $ids = trim ($this->get_id_list()); $id_type = $this->get_id_list_type(); } if ($ids == AD_EMPTY_DATA) return true; $page_id = get_the_ID(); if ($id_type == AI_BLACK_LIST) $return = false; else $return = true; if (/*$ids == AD_EMPTY_DATA ||*/ $page_id === false) { return !$return; } $ids_listed = explode (",", $ids); foreach ($ids_listed as $index => $id_listed) { if (trim ($id_listed) == "") unset ($ids_listed [$index]); else $ids_listed [$index] = trim ($id_listed); } foreach ($ids_listed as $index => $id_listed) { switch ($ai_wp_data [AI_WP_PAGE_TYPE]) { case AI_PT_POST: if ($ids_listed [$index] == 'posts') return $return; break; case AI_PT_STATIC: if ($ids_listed [$index] == 'pages') return $return; break; } if (strpos ($ids_listed [$index], '-') !== false) { $id_limits = explode ('-', str_replace (' ', '', $ids_listed [$index])); if ($page_id >= $id_limits [0] && $page_id <= $id_limits [1]) return $return; } } if (in_array ($page_id, $ids_listed)) return $return; return !$return; } function check_url ($urls = null, $url_type = AI_WHITE_LIST) { global $ai_wp_data; if ($urls === null) { $urls = trim ($this->get_ad_url_list()); $url_type = $this->get_ad_url_list_type(); } $page_url = $ai_wp_data [AI_WP_URL]; if ($url_type == AI_BLACK_LIST) $return = false; else $return = true; if ($urls == AD_EMPTY_DATA) return true; $list_separator = ','; if (strpos ($urls, ' ') !== false && strpos ($urls, ',') === false) $list_separator = ' '; $urls_listed = explode ($list_separator, $urls); foreach ($urls_listed as $index => $url_listed) { if (trim ($url_listed) == "") unset ($urls_listed [$index]); else $urls_listed [$index] = trim ($url_listed); } // print_r ($urls_listed); // echo "
\n"; // echo ' page url: ' . $page_url, "
\n"; // echo ' listed urls: ' . $urls, "\n"; // echo "
\n"; foreach ($urls_listed as $url_listed) { if ($url_listed == '*') return $return; if ($url_listed [0] == '*') { if ($url_listed [strlen ($url_listed) - 1] == '*') { $url_listed = substr ($url_listed, 1, strlen ($url_listed) - 2); if (strpos ($page_url, $url_listed) !== false) return $return; } else { $url_listed = substr ($url_listed, 1); if (substr ($page_url, - strlen ($url_listed)) == $url_listed) return $return; } } elseif ($url_listed [strlen ($url_listed) - 1] == '*') { $url_listed = substr ($url_listed, 0, strlen ($url_listed) - 1); if (strpos ($page_url, $url_listed) === 0) return $return; } elseif ($url_listed == $page_url) return $return; } return !$return; } function check_scheduling ($server_side_check) { global $block_object, $ai_wp_data; switch ($this->get_scheduling()) { case AI_SCHEDULING_OFF: return true; break; case AI_SCHEDULING_DELAY_FOR: $after_days = trim ($this->get_ad_after_day()); if ($after_days == '') return true; $after_days = $after_days; $post_date = get_the_date ('U'); if ($post_date === false) return true; return (date ('U', current_time ('timestamp')) >= $post_date + $after_days * 86400); break; case AI_SCHEDULING_INSERT_ONLY_FOR: $after_days = trim ($this->get_ad_after_day()); if ($after_days == '') return false; $after_days = $after_days; $post_date = get_the_date ('U'); if ($post_date === false) return false; return (date ('U', current_time ('timestamp')) < $post_date + $after_days * 86400); break; case AI_SCHEDULING_BETWEEN_DATES: if (!function_exists ('ai_scheduling_options')) return true; if (!$server_side_check) return true; $start_time = $this->get_schedule_start_date () . ' ' . $this->get_schedule_start_time (); $end_time = $this->get_schedule_end_date () . ' ' . $this->get_schedule_end_time (); $days_in_week = $this->get_schedule_weekdays (); $insertion_enabled = check_scheduling_time ($start_time, $end_time, $days_in_week, true); if (!$insertion_enabled) { if (!isset ($ai_wp_data [AI_FALLBACK_LEVEL])) $ai_wp_data [AI_FALLBACK_LEVEL] = 1; else $ai_wp_data [AI_FALLBACK_LEVEL] ++; $fallback = intval ($this->get_scheduling_fallback()); if ($fallback != $this->number && $fallback != 0 && $fallback <= 96 && $ai_wp_data [AI_FALLBACK_LEVEL] <= 2) { $fallback_obj = $block_object [$fallback]; if ($fallback_obj->check_scheduling ($server_side_check) && ai_check_impression_and_click_limits ($fallback, true)) { $this->fallback = $fallback_obj->fallback != 0 ? $fallback_obj->fallback : $fallback; $insertion_enabled = true; } } $ai_wp_data [AI_FALLBACK_LEVEL] --; } return ($insertion_enabled); break; case AI_SCHEDULING_OUTSIDE_DATES: if (!function_exists ('ai_scheduling_options')) return true; if (!$server_side_check) return true; $start_time = $this->get_schedule_start_date () . ' ' . $this->get_schedule_start_time (); $end_time = $this->get_schedule_end_date () . ' ' . $this->get_schedule_end_time (); $days_in_week = $this->get_schedule_weekdays (); $insertion_enabled = check_scheduling_time ($start_time, $end_time, $days_in_week, false); if (!$insertion_enabled) { if (!isset ($ai_wp_data [AI_FALLBACK_LEVEL])) $ai_wp_data [AI_FALLBACK_LEVEL] = 1; else $ai_wp_data [AI_FALLBACK_LEVEL] ++; $fallback = intval ($this->get_scheduling_fallback()); if ($fallback != $this->number && $fallback != 0 && $fallback <= 96 && $ai_wp_data [AI_FALLBACK_LEVEL] <= 2) { $fallback_obj = $block_object [$fallback]; if ($fallback_obj->check_scheduling ($server_side_check) && ai_check_impression_and_click_limits ($fallback, true)) { $this->fallback = $fallback_obj->fallback != 0 ? $fallback_obj->fallback : $fallback; $insertion_enabled = true; } } $ai_wp_data [AI_FALLBACK_LEVEL] --; } return ($insertion_enabled); break; case AI_SCHEDULING_PUBLISHED_BETWEEN_DATES: if (!function_exists ('ai_scheduling_options')) return true; $post_date = get_the_date ('U'); if ($post_date === false) return false; $post_weekday = date ('w', $post_date); if ($post_weekday == 0) $post_weekday = 6; else $post_weekday --; $current_time = current_time ('timestamp'); $current_weekday = date ('w', $current_time); if ($current_weekday == 0) $current_weekday = 6; else $current_weekday --; $start_date = strtotime ($this->get_schedule_start_date () . ' ' . $this->get_schedule_start_time (), $current_time); $end_date = strtotime ($this->get_schedule_end_date () . ' ' . $this->get_schedule_end_time (), $current_time); $weekdays = explode (',', $this->get_schedule_weekdays ()); if (isset ($weekdays [0]) and $weekdays [0] === '') $weekdays = array (); $insertion_enabled = $post_date >= $start_date && $post_date < $end_date && in_array ($post_weekday, $weekdays); if (!$insertion_enabled) { if (!isset ($ai_wp_data [AI_FALLBACK_LEVEL])) $ai_wp_data [AI_FALLBACK_LEVEL] = 1; else $ai_wp_data [AI_FALLBACK_LEVEL] ++; $fallback = intval ($this->get_scheduling_fallback()); if ($fallback != $this->number && $fallback != 0 && $fallback <= 96 && $ai_wp_data [AI_FALLBACK_LEVEL] <= 2) { $this->fallback = $fallback; return true; } $ai_wp_data [AI_FALLBACK_LEVEL] --; } return ($insertion_enabled); break; case AI_SCHEDULING_PUBLISHED_OUTSIDE_DATES: if (!function_exists ('ai_scheduling_options')) return true; $post_date = get_the_date ('U'); if ($post_date === false) return true; $post_weekday = date ('w', $post_date); if ($post_weekday == 0) $post_weekday = 6; else $post_weekday --; $current_time = current_time ('timestamp'); $current_weekday = date ('w', $current_time); if ($current_weekday == 0) $current_weekday = 6; else $current_weekday --; $start_date = strtotime ($this->get_schedule_start_date () . ' ' . $this->get_schedule_start_time (), $current_time); $end_date = strtotime ($this->get_schedule_end_date () . ' ' . $this->get_schedule_end_time (), $current_time); $weekdays = explode (',', $this->get_schedule_weekdays ()); if (isset ($weekdays [0]) and $weekdays [0] === '') $weekdays = array (); // echo "
";
//        echo "current_time ", $current_time, " ", date ("Y-m-d H:i:s", $current_time), "
"; // echo "start_date ", $start_date, " ", date ("Y-m-d H:i:s", $start_date), "
"; // echo "end_date ", $end_date, " ", date ("Y-m-d H:i:s", $end_date), "
"; // echo "post_date ", $post_date, " ", date ("Y-m-d H:i:s", $post_date), "
"; // echo "
"; $insertion_enabled = $post_date < $start_date || $post_date >= $end_date || !in_array ($post_weekday, $weekdays); if (!$insertion_enabled) { if (!isset ($ai_wp_data [AI_FALLBACK_LEVEL])) $ai_wp_data [AI_FALLBACK_LEVEL] = 1; else $ai_wp_data [AI_FALLBACK_LEVEL] ++; $fallback = intval ($this->get_scheduling_fallback()); if ($fallback != $this->number && $fallback != 0 && $fallback <= 96 && $ai_wp_data [AI_FALLBACK_LEVEL] <= 2) { $this->fallback = $fallback; return true; } $ai_wp_data [AI_FALLBACK_LEVEL] --; } return ($insertion_enabled); break; default: return true; break; } } function check_referer () { return check_referer_list ($this->get_ad_domain_list(), $this->get_ad_domain_list_type() == AI_WHITE_LIST); } function check_client () { return check_client_list ($this->get_client_list(), $this->get_client_list_type() == AI_WHITE_LIST); } function check_number_of_words (&$content = null, $number_of_words = 0) { global $ai_last_check, $ai_wp_data; $minimum_words = intval ($this->get_minimum_words()); $maximum_words = intval ($this->get_maximum_words()); if ($minimum_words == 0 && $maximum_words == 0) return true; // if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { if ($number_of_words == 0) { if (!isset ($ai_wp_data [AI_WORD_COUNT])) { if ($content === null) { $content = ''; $content_post = get_post (); if (isset ($content_post->post_content)) $content = $content_post->post_content; } $number_of_words = number_of_words ($content); } else $number_of_words = $ai_wp_data [AI_WORD_COUNT]; } // } else $number_of_words = 0; // Cache word count only on single pages if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) $ai_wp_data [AI_WORD_COUNT] = $number_of_words; $ai_last_check = AI_CHECK_MIN_NUMBER_OF_WORDS; if ($number_of_words < $minimum_words) return false; if ($maximum_words <= 0) $maximum_words = 1000000; $ai_last_check = AI_CHECK_MAX_NUMBER_OF_WORDS; if ($number_of_words > $maximum_words) return false; return true; } function check_number_of_words_in_paragraph ($content, $min, $max) { $number_of_words = number_of_words ($content); if ($max <= 0) $max = 1000000; if ($number_of_words < $min || $number_of_words > $max) return false; return true; } function server_side_check () { global $ai_wp_data; return get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_SERVER_SIDE || ((get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW || get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT) && $ai_wp_data [AI_WP_AMP_PAGE]); } function check_page_types_lists_users ($ignore_page_types = false) { global $ai_last_check, $ai_wp_data; if (!$ignore_page_types) { if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_HOMEPAGE){ $ai_last_check = AI_CHECK_PAGE_TYPE_FRONT_PAGE; if (!$this->get_display_settings_home()) return false; } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC){ $ai_last_check = AI_CHECK_PAGE_TYPE_STATIC_PAGE; if (!$this->get_display_settings_page()) return false; } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST){ $ai_last_check = AI_CHECK_PAGE_TYPE_POST; if (!$this->get_display_settings_post()) return false; } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_CATEGORY){ $ai_last_check = AI_CHECK_PAGE_TYPE_CATEGORY; if (!$this->get_display_settings_category()) return false; } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_SEARCH){ $ai_last_check = AI_CHECK_PAGE_TYPE_SEARCH; if (!$this->get_display_settings_search()) return false; } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_ARCHIVE){ $ai_last_check = AI_CHECK_PAGE_TYPE_ARCHIVE; if (!$this->get_display_settings_archive()) return false; } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_FEED){ $ai_last_check = AI_CHECK_PAGE_TYPE_FEED; if (!$this->get_enable_feed()) return false; } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_404){ $ai_last_check = AI_CHECK_PAGE_TYPE_404; if (!$this->get_enable_404()) return false; } } $ai_last_check = AI_CHECK_CATEGORY; if (!$this->check_category ()) return false; $ai_last_check = AI_CHECK_TAG; if (!$this->check_tag ()) return false; $ai_last_check = AI_CHECK_TAXONOMY; if (!$this->check_taxonomy ()) return false; $ai_last_check = AI_CHECK_ID; if (!$this->check_id ()) return false; $ai_last_check = AI_CHECK_URL; if (!$this->check_url ()) return false; $server_side_check = $this->server_side_check (); $ai_last_check = AI_CHECK_URL_PARAMETER; switch ($server_side_check) { case true: if (!check_url_parameter_and_cookie_list ($this->get_url_parameter_list(), $this->get_url_parameter_list_type() == AI_WHITE_LIST)) return false; break; default: $url_parameter_found = false; $url_parameter_list_pass = check_url_parameter_list ($this->get_url_parameter_list(), $this->get_url_parameter_list_type() == AI_WHITE_LIST, $url_parameter_found); if ($url_parameter_found && !$url_parameter_list_pass) return false; if (!$url_parameter_found) $this->client_side_cookie_check_url = true; break; } $ai_last_check = AI_CHECK_COOKIE; switch ($server_side_check) { case true: if (!check_cookie_list ($this->get_cookie_list(), $this->get_cookie_list_type() == AI_WHITE_LIST)) return false; break; default: $this->client_side_cookie_check = true; break; } if ($server_side_check) { $ai_last_check = AI_CHECK_REFERER; if (!$this->check_referer ()) return false; } if ($server_side_check) { $ai_last_check = AI_CHECK_CLIENT; if (!$this->check_client ()) return false; } if (function_exists ('ai_check_lists')) { if (!ai_check_lists ($this, $server_side_check)) return false; } $ai_last_check = AI_CHECK_SCHEDULING; if (!$this->check_scheduling ($server_side_check)) return false; $display_for_users = $this->get_display_for_users (); $ai_last_check = AI_CHECK_LOGGED_IN_USER; if ($display_for_users == AI_DISPLAY_LOGGED_IN_USERS && ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != AI_USER_LOGGED_IN) return false; $ai_last_check = AI_CHECK_NOT_LOGGED_IN_USER; if ($display_for_users == AI_DISPLAY_NOT_LOGGED_IN_USERS && ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) == AI_USER_LOGGED_IN) return false; $ai_last_check = AI_CHECK_ADMINISTRATOR; if ($display_for_users == AI_DISPLAY_ADMINISTRATORS && ($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != AI_USER_ADMINISTRATOR) return false; if (function_exists ('ai_check_impression_and_click_limits')) { if ($server_side_check && !ai_check_impression_and_click_limits ($this->number)) return false; } return true; } function check_post_page_exceptions ($selected_blocks) { global $ai_last_check, $ai_wp_data; if (isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_POSTS]) || isset ($this->wp_options [AI_OPTION_ENABLED_ON_WHICH_PAGES])) { // Use old settings if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST) { $enabled_on = $this->get_ad_enabled_on_which_posts (); if ($enabled_on == AI_DEFAULT_INSERTION_ENABLED) { $ai_last_check = AI_CHECK_INDIVIDUALLY_DISABLED; if (in_array ($this->number, $selected_blocks)) return false; } elseif ($enabled_on == AI_DEFAULT_INSERTION_DISABLED) { $ai_last_check = AI_CHECK_INDIVIDUALLY_ENABLED; if (!in_array ($this->number, $selected_blocks)) return false; } } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { $enabled_on = $this->get_ad_enabled_on_which_pages (); if ($enabled_on == AI_DEFAULT_INSERTION_ENABLED) { $ai_last_check = AI_CHECK_INDIVIDUALLY_DISABLED; if (in_array ($this->number, $selected_blocks)) return false; } elseif ($enabled_on == AI_DEFAULT_INSERTION_DISABLED) { $ai_last_check = AI_CHECK_INDIVIDUALLY_ENABLED; if (!in_array ($this->number, $selected_blocks)) return false; } } return true; } if (!$this->get_exceptions_enabled ()) return true; switch ($this->get_exceptions_function ()) { case AI_DEFAULT_INSERTION_ENABLED: $ai_last_check = AI_CHECK_INDIVIDUALLY_DISABLED; if (in_array ($this->number, $selected_blocks)) return false; break; case AI_DEFAULT_INSERTION_DISABLED: $ai_last_check = AI_CHECK_INDIVIDUALLY_ENABLED; if (!in_array ($this->number, $selected_blocks)) return false; break; } return true; } function check_filter ($counter_for_filter) { global $ai_last_check, $ad_inserter_globals, $page; $filter_ok = $this->get_inverted_filter() ? false : true; $ai_last_check = AI_CHECK_FILTER; $filter_settings = trim (str_replace (' ', '', $this->get_call_filter())); if (empty ($filter_settings)) return $filter_ok; switch ($this->get_filter_type ()) { case AI_FILTER_PHP_FUNCTION_CALLS: if (isset ($ad_inserter_globals [AI_PHP_FUNCTION_CALL_COUNTER_NAME . $this->number])) $counter_for_filter = $ad_inserter_globals [AI_PHP_FUNCTION_CALL_COUNTER_NAME . $this->number]; else return !$filter_ok; break; case AI_FILTER_CONTENT_PROCESSING: if (isset ($ad_inserter_globals [AI_CONTENT_COUNTER_NAME])) $counter_for_filter = $ad_inserter_globals [AI_CONTENT_COUNTER_NAME]; else return !$filter_ok; break; case AI_FILTER_EXCERPT_PROCESSING: if (isset ($ad_inserter_globals [AI_EXCERPT_COUNTER_NAME])) $counter_for_filter = $ad_inserter_globals [AI_EXCERPT_COUNTER_NAME]; else return !$filter_ok; break; case AI_FILTER_BEFORE_POST_PROCESSING: if (isset ($ad_inserter_globals [AI_LOOP_BEFORE_COUNTER_NAME])) $counter_for_filter = $ad_inserter_globals [AI_LOOP_BEFORE_COUNTER_NAME]; else return !$filter_ok; break; case AI_FILTER_AFTER_POST_PROCESSING: if (isset ($ad_inserter_globals [AI_LOOP_AFTER_COUNTER_NAME])) $counter_for_filter = $ad_inserter_globals [AI_LOOP_AFTER_COUNTER_NAME]; else return !$filter_ok; break; case AI_FILTER_WIDGET_DRAWING: if (isset ($ad_inserter_globals [AI_WIDGET_COUNTER_NAME . $this->number])) $counter_for_filter = $ad_inserter_globals [AI_WIDGET_COUNTER_NAME . $this->number]; else return !$filter_ok; break; case AI_FILTER_SUBPAGES: if (isset ($page)) $counter_for_filter = $page; else return !$filter_ok; break; case AI_FILTER_POSTS: if (isset ($ad_inserter_globals [AI_POST_COUNTER_NAME])) $counter_for_filter = $ad_inserter_globals [AI_POST_COUNTER_NAME]; else return !$filter_ok; break; case AI_FILTER_PARAGRAPHS: case AI_FILTER_IMAGES: return true; break; case AI_FILTER_COMMENTS: if (isset ($ad_inserter_globals [AI_COMMENT_COUNTER_NAME])) $counter_for_filter = $ad_inserter_globals [AI_COMMENT_COUNTER_NAME]; else return !$filter_ok; break; } $filter_values = array (); if (strpos ($filter_settings, ",") !== false) { $filter_values = explode (",", $filter_settings); } else $filter_values []= $filter_settings; foreach ($filter_values as $filter_value) { $filter_value = trim ($filter_value); if (isset ($filter_value [0]) && $filter_value [0] == '%') { $mod_value = substr ($filter_value, 1); $offset_value = 0; if (strpos ($mod_value, '@') !== false) { $mod_value_array = explode ('@', $mod_value); $mod_value = $mod_value_array [0]; $offset_value = $mod_value_array [1]; } // if (is_numeric ($mod_value) && $mod_value > 0) { if (is_numeric ($mod_value) && $mod_value > 0 && is_numeric ($offset_value)) { // if ($counter_for_filter % $mod_value == 0) return $filter_ok; if ($counter_for_filter >= $offset_value && ($counter_for_filter - $offset_value) % $mod_value == 0) return $filter_ok; } } } return in_array ($counter_for_filter, $filter_values) xor !$filter_ok; } function check_and_increment_block_counter () { global $ad_inserter_globals, $ai_last_check; $global_name = AI_BLOCK_COUNTER_NAME . $this->number; $max_insertions = intval ($this->get_maximum_insertions ()); if (!isset ($ad_inserter_globals [$global_name])) { $ad_inserter_globals [$global_name] = 0; } $ai_last_check = AI_CHECK_MAX_INSERTIONS; if ($max_insertions != 0 && $ad_inserter_globals [$global_name] >= $max_insertions) return false; $ad_inserter_globals [$global_name] ++; return true; } function check_block_counter () { global $ad_inserter_globals, $ai_last_check; $global_name = AI_BLOCK_COUNTER_NAME . $this->number; $max_insertions = intval ($this->get_maximum_insertions ()); if (!isset ($ad_inserter_globals [$global_name])) { $ad_inserter_globals [$global_name] = 0; } $ai_last_check = AI_CHECK_MAX_INSERTIONS; if ($max_insertions != 0 && $ad_inserter_globals [$global_name] >= $max_insertions) return false; return true; } function increment_block_counter () { global $ad_inserter_globals; if ($this->number == 0) return; $global_name = AI_BLOCK_COUNTER_NAME . $this->number; if (!isset ($ad_inserter_globals [$global_name])) { $ad_inserter_globals [$global_name] = 0; } $ad_inserter_globals [$global_name] ++; return; } function extract_features (){ global $ai_wp_data; // AI_SERVER_SIDE_DETECTION // AI_CLIENT_SIDE_DETECTION // AI_CLIENT_SIDE_INSERTION // AI_STICK_TO_THE_CONTENT // AI_TRACKING // AI_CLOSE_BUTTONS // AI_IFRAMES // AI_ANIMATION // AI_LAZY_LOADING // AI_GEOLOCATION // if ($this->get_detection_server_side()) echo "#", $this->number; // echo "#", $this->number; // return; if ($this->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true; if (trim ($this->get_client_list ()) != '') $ai_wp_data [AI_MOBILE_DETECT_JS] = true; if ($this->get_detection_client_side ()) { $ai_wp_data [AI_CLIENT_SIDE_DETECTION] = true; if ($this->get_client_side_action () == AI_CLIENT_SIDE_ACTION_INSERT) { $ai_wp_data [AI_CLIENT_SIDE_INSERTION] = true; } } else { $code = $this->get_ad_data(); if (stripos ($code, '[adinserter') !== false) { if (stripos ($code, 'viewport=') !== false) { $ai_wp_data [AI_CLIENT_SIDE_DETECTION] = true; $ai_wp_data [AI_CLIENT_SIDE_INSERTION] = true; } if (stripos ($code, 'fallback=') !== false) { $ai_wp_data [AI_CLIENT_SIDE_INSERTION] = true; } } } if (function_exists ('ai_extract_features_2')) ai_extract_features_2 ($this); if ($this->stick_to_the_content_class () != '' || $this->get_background ()) $ai_wp_data [AI_STICK_TO_THE_CONTENT] = true; switch ($this->get_automatic_insertion()) { case AI_AUTOMATIC_INSERTION_BEFORE_HTML_ELEMENT: case AI_AUTOMATIC_INSERTION_INSIDE_HTML_ELEMENT: case AI_AUTOMATIC_INSERTION_AFTER_HTML_ELEMENT: if ($this->get_html_element_insertion () != AI_HTML_INSERTION_SEREVR_SIDE) $ai_wp_data [AI_CLIENT_SIDE_INSERTION] = true; break; } } } class ai_Block extends ai_CodeBlock { public function __construct ($number) { parent::__construct(); $this->number = $number; } } class ai_AdH extends ai_BaseCodeBlock { public function __construct () { parent::__construct(); $this->number = 'H'; $this->wp_options [AI_OPTION_BLOCK_NAME] = 'HEADER'; } } class ai_AdF extends ai_BaseCodeBlock { public function __construct () { parent::__construct(); $this->number = 'F'; $this->wp_options [AI_OPTION_BLOCK_NAME] = 'FOOTER'; } } class ai_AdA extends ai_BaseCodeBlock { public function __construct () { parent::__construct(); $this->number = 'A'; $this->wp_options [AI_OPTION_BLOCK_NAME] = 'AD BLOCKING MESSAGE'; } public function get_ad_data (){ $option = isset ($this->wp_options [AI_OPTION_CODE]) ? $this->wp_options [AI_OPTION_CODE] : AI_DEFAULT_ADB_MESSAGE; if ($option == AD_EMPTY_DATA) $option = AI_DEFAULT_ADB_MESSAGE; return $option; } } class ai_Walker_Comment extends Walker_Comment { public function comment_callback ($comment, $args, $depth) { if (($comment->comment_type == 'pingback' || $comment->comment_type == 'trackback') && $args ['short_ping']) { $this->ping ($comment, $depth, $args); } elseif ($args['format'] === 'html5') { $this->html5_comment ($comment, $depth, $args); } else { $this->comment ($comment, $depth, $args); } } } class ai_code_generator { public function __construct () { } public function generate ($data){ $code = ''; switch ($data ['generate-code']) { case AI_CODE_BANNER: $code = ''; if (isset ($data ['image']) && $data ['image'] != '') { $attributes = ''; if (isset ($data ['loading']) && $data ['loading'] != '') { $attributes .= ' loading="'.esc_html ($data ['loading']).'"'; } if (isset ($data ['alt']) && $data ['alt'] != '') { $attributes .= ' alt="'.esc_html ($data ['alt']).'"'; } $code = ''; } if (isset ($data ['link']) && $data ['link'] != '') { $code = '' . $code . ''; } break; case AI_CODE_ADSENSE: $adsense_size = ($data ['adsense-width'] != '' ? ' width: '. esc_html ($data ['adsense-width']). 'px;' : '') . ($data ['adsense-height'] != '' ? ' height: '.esc_html ($data ['adsense-height']).'px;' : ''); switch ($data ['adsense-type']) { case AI_ADSENSE_AMP_ONLY: $code = ''; break; default: $code = ''; if ($data ['adsense-comment']) $code .= "\n"; $adsense_full_width_responsive = $data ['adsense-full-width-responsive'] != '' ? "\n".' data-full-width-responsive="' . esc_html ($data ['adsense-full-width-responsive']) . '"' : ''; break; } switch ($data ['adsense-type']) { case AI_ADSENSE_STANDARD: switch ($data ['adsense-size']) { case AI_ADSENSE_SIZE_FIXED: // Normal $code .= ' '; break; case AI_ADSENSE_SIZE_FIXED_BY_VIEWPORT: $code = $this->adsense_size_styles ($data) . $code; // Normal $code .= ' '; break; case AI_ADSENSE_SIZE_RESPONSIVE: // Responsive $code .= ' '; break; } break; case AI_ADSENSE_LINK: switch ($data ['adsense-size']) { case AI_ADSENSE_SIZE_FIXED: // Normal $code .= ' '; break; case AI_ADSENSE_SIZE_FIXED_BY_VIEWPORT: $code = $this->adsense_size_styles ($data) . $code; // Normal $code .= ' '; break; case AI_ADSENSE_SIZE_RESPONSIVE: // Responsive $code .= ' '; break; } break; case AI_ADSENSE_IN_ARTICLE: $code .= ' '; break; case AI_ADSENSE_IN_FEED: $code .= ' '; break; case AI_ADSENSE_MATCHED_CONTENT: $code .= ' '; break; case AI_ADSENSE_AUTO: $code .= ' '; break; } if ($data ['adsense-amp'] != AI_ADSENSE_AMP_DISABLED) { if ($code != '') { $code .= ' '; } switch ($data ['adsense-amp']) { case AI_ADSENSE_AMP_AUTO: $code .= '[ADINSERTER AMP] '; break; case AI_ADSENSE_AMP_ABOVE_THE_FOLD: $code .= '[ADINSERTER AMP] '; break; case AI_ADSENSE_AMP_FIXED: $code .= '[ADINSERTER AMP] '; break; case AI_ADSENSE_AMP_BELOW_THE_FOLD: $code .= '[ADINSERTER AMP]
'; break; case AI_ADSENSE_AMP_STICKY: if ($data ['adsense-width'] == '') { $data ['adsense-width'] = 320; } if ($data ['adsense-height'] == '') { $data ['adsense-height'] = 50; } $code .= '[ADINSERTER AMP] '; break; } } break; case AI_CODE_AMAZON: $code_lines = explode ("\n", stripslashes ($data ['amazon-data'])); $clean_code = ''; $regionurl = ''; $amp_lines = array (); foreach ($code_lines as $index => $code_line) { if (strpos ($code_line, 'regionurl') !== false) { unset ($code_lines [$index]); $regionurl = trim (str_replace ('regionurl', '', $code_line)); $regionurl = trim (ltrim ($regionurl, '=')); } else { $amp_lines [] = ' data-' . $code_lines [$index]; $code_lines [$index] = ' ' . $code_lines [$index] . ';'; } } $amazon_data = implode ("\n", $code_lines); $code .= ' '; if ($data ['amazon-amp']) { $code .= ' [ADINSERTER AMP] '; } break; } return $code; } public function adsense_size_styles ($data){ $code = ' '; return $code; } public function import ($code){ if (trim ($code) == '') { return array ('type' => AI_CODE_UNKNOWN); } $code_expanded_shortodes = do_shortcode ($code); $amp = false; $adsense_amp = AI_ADSENSE_AMP_DISABLED; if (strpos ($code_expanded_shortodes, AD_AMP_SEPARATOR) !== false) { $amp = true; $adsense_amp = AI_ADSENSE_AMP_ABOVE_THE_FOLD; } if (!class_exists ('DOMDocument')) { echo __('ERROR: class DOMDocument not found. Your webhost needs to install the DOM extension for PHP.', 'ad-inserter'); wp_die (); } try { $dom = new DOMDocument (); libxml_use_internal_errors (true); $dom->loadHTML ($code); libxml_clear_errors (); } catch (Exception $e) { echo 'ERROR: ', $e->getMessage(); wp_die (); } // AdSense if (strpos ($code, 'data-ad-client') !== false) { $adsense_code = $dom->getElementsByTagName ('ins'); $adsense_code_amp = $dom->getElementsByTagName ('amp-ad'); $adsense_code_amp_sticky = $dom->getElementsByTagName ('amp-sticky-ad'); $adsense_code_amp_auto = $dom->getElementsByTagName ('amp-auto-ads'); if ($adsense_code_amp_sticky->length != 0) { $adsense_amp = AI_ADSENSE_AMP_STICKY; } elseif ($adsense_code_amp_auto->length != 0) { $adsense_amp = AI_ADSENSE_AMP_AUTO; } if ($adsense_code_amp->length == 0) { if ($adsense_code_amp_auto->length != 0) { $adsense_code_amp = $adsense_code_amp_auto; } } if ($adsense_code_amp->length != 0) { // $layout = $adsense_code_amp [0]->getAttribute ('layout'); // PHP 5.6.3 $layout = $adsense_code_amp->item (0)->getAttribute ('layout'); if ($adsense_amp != AI_ADSENSE_AMP_DISABLED) { switch ($layout) { case 'fixed-height': $adsense_amp = AI_ADSENSE_AMP_ABOVE_THE_FOLD; break; case 'fixed': $adsense_amp = AI_ADSENSE_AMP_FIXED; break; case 'nodisplay': $adsense_amp = AI_ADSENSE_AMP_STICKY; break; default: $auto_format = $adsense_code_amp->item (0)->getAttribute ('data-auto-format'); if ($auto_format == "rspv") { $adsense_amp = AI_ADSENSE_AMP_BELOW_THE_FOLD; } break; } } if ($adsense_code->length == 0) $adsense_code = $adsense_code_amp; } if ($adsense_code->length != 0) { $data = array ( 'type' => AI_CODE_ADSENSE, 'adsense-publisher-id' => '', 'adsense-ad-slot-id' => '', 'adsense-type' => AI_ADSENSE_STANDARD, 'adsense-size' => AI_ADSENSE_SIZE_FIXED, 'adsense-width' => '', 'adsense-height' => '', 'adsense-layout' => '', 'adsense-layout-key' => '', 'adsense-full-width-responsive' => '', 'adsense-comment' => '', 'adsense-amp' => $adsense_amp, 'adsense-amp-block-on-consent' => '#', ); // $data ['adsense-publisher-id'] = str_replace ('ca-', '', $adsense_code [0]->getAttribute ('data-ad-client')); $data ['adsense-publisher-id'] = str_replace ('ca-', '', $adsense_code->item (0)->getAttribute ('data-ad-client')); // $data ['adsense-ad-slot-id'] = $adsense_code [0]->getAttribute ('data-ad-slot'); $data ['adsense-ad-slot-id'] = $adsense_code->item (0)->getAttribute ('data-ad-slot'); if ($data ['adsense-ad-slot-id'] == '') { $data ['adsense-ad-slot-id'] = $adsense_code->item (0)->getAttribute ('data-slot'); } // $adsense_style = $adsense_code [0]->getAttribute ('style'); $adsense_style = $adsense_code->item (0)->getAttribute ('style'); $style_width = preg_match ("/width\s*:\s*(\d+)px/", $adsense_style, $width_match); if ($style_width) $data ['adsense-width'] = $width_match [1]; if ($data ['adsense-width'] == '') { $data ['adsense-width'] = $adsense_code->item (0)->getAttribute ('width'); } $style_height = preg_match ("/height\s*:\s*(\d+)px/", $adsense_style, $height_match); if ($style_height) $data ['adsense-height'] = $height_match [1]; if ($data ['adsense-height'] == '') { $data ['adsense-height'] = $adsense_code->item (0)->getAttribute ('height'); } $display = ''; $style_display = preg_match ("/display\s*:\s*([a-z\-]+)/", $adsense_style, $display_match); if ($style_display) $display = $display_match [1]; $adsense_class = trim ($adsense_code->item (0)->getAttribute ('class')); $adsense_classes = explode (' ', $adsense_class); $adsense_size = !$style_width && !$style_height && $display == 'block' ? AI_ADSENSE_SIZE_RESPONSIVE : AI_ADSENSE_SIZE_FIXED; if (count ($adsense_classes) == 2 && !$style_width && !$style_height) { $adsense_size = AI_ADSENSE_SIZE_FIXED_BY_VIEWPORT; $viewport_class = $adsense_classes [1]; $style = preg_match ("##s", $code, $style_match); $style_lines = explode ("\n", trim ($style_match [1])); $viewport_data = array (); for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = get_viewport_name ($viewport); $viewport_width = get_viewport_width ($viewport); if ($viewport_name != '') { $viewport_data []= array ('index' => $viewport, 'name' => $viewport_name, 'width' => $viewport_width); } } usort ($viewport_data, 'ai_compare_viewport'); $viewport_data = array_reverse ($viewport_data); $sizes = array (); $viewport_widths = array (); $viewport_indexes = array (); foreach ($viewport_data as $index => $viewport) { $viewport_name = $viewport ['name']; $viewport_width = $viewport ['width']; $viewport_index = $viewport ['index']; if ($viewport_name != '') { $viewport_widths [] = $viewport_width; $viewport_indexes [] = $viewport_index; $sizes []= array (0 => '', 1 => ''); } } if (count ($style_lines) == count ($sizes)) { foreach ($style_lines as $index => $style_line) { $viewport_index = $viewport_indexes [$index] - 1; if (strpos ($style_line, $viewport_class) !== false) { $min_width = preg_match ("/min-width\s*:\s*(\d+)px/", $style_line, $min_width_match); $viewport_width = $min_width ? $min_width_match [1] : 0; if ($viewport_width == $viewport_widths [$index]) { $styles = explode ($viewport_class, $style_line); $style_line = $styles [1]; $style_width = preg_match ("/width\s*:\s*(\d+)px/", $style_line, $width_match); $adsense_width = $style_width ? $width_match [1] : ''; $style_height = preg_match ("/height\s*:\s*(\d+)px/", $style_line, $height_match); $adsense_height = $style_height ? $height_match [1] : ''; $sizes [$viewport_index] = array (0 => $adsense_width, 1 => $adsense_height); } } else $sizes [$viewport_index] = array ('', ''); } } $data ['adsense-sizes'] = $sizes; } $data ['adsense-size'] = $adsense_size; $comment = preg_match ("##", $code, $comment_match); if ($comment) $data ['adsense-comment'] = trim ($comment_match [1]); // $adsense_ad_format = $adsense_code [0]->getAttribute ('data-ad-format'); $adsense_ad_format = $adsense_code->item (0)->getAttribute ('data-ad-format'); if ($adsense_amp == AI_ADSENSE_AMP_STICKY) { $data ['adsense-type'] = AI_ADSENSE_AMP_ONLY; } elseif ($adsense_amp == AI_ADSENSE_AMP_AUTO) { $data ['adsense-type'] = AI_ADSENSE_AMP_ONLY; } else switch ($adsense_ad_format) { case '': break; case 'auto': break; case 'autorelaxed': $data ['adsense-type'] = AI_ADSENSE_MATCHED_CONTENT; break; // case 'link': // $data ['adsense-type'] = AI_ADSENSE_LINK; // break; case 'fluid': // $adsense_ad_layout = $adsense_code [0]->getAttribute ('data-ad-layout'); $adsense_ad_layout = $adsense_code->item (0)->getAttribute ('data-ad-layout'); switch ($adsense_ad_layout) { case 'in-article': $data ['adsense-type'] = AI_ADSENSE_IN_ARTICLE; break 2; } $data ['adsense-type'] = AI_ADSENSE_IN_FEED; $data ['adsense-layout'] = $adsense_ad_layout; // $data ['adsense-layout-key'] = urlencode ($adsense_code [0]->getAttribute ('data-ad-layout-key')); $data ['adsense-layout-key'] = urlencode ($adsense_code->item (0)->getAttribute ('data-ad-layout-key')); break; } $data ['adsense-full-width-responsive'] = $adsense_code->item (0)->getAttribute ('data-full-width-responsive'); if ($adsense_code_amp->item (0) != null) { if ($adsense_code_amp->item (0)->hasAttribute ('data-block-on-consent')) { $data ['adsense-amp-block-on-consent'] = $adsense_code->item (0)->getAttribute ('data-block-on-consent'); } } return $data; } } // Old AdSense / AdSense Auto ads if (strpos ($code, 'google_ad_client') !== false) { $data = array ( 'type' => AI_CODE_ADSENSE, 'adsense-publisher-id' => '', 'adsense-ad-slot-id' => '', 'adsense-type' => AI_ADSENSE_STANDARD, 'adsense-size' => AI_ADSENSE_SIZE_FIXED, 'adsense-width' => '', 'adsense-height' => '', 'adsense-layout' => '', 'adsense-layout-key' => '', 'adsense-amp' => $adsense_amp, 'adsense-amp-block-on-consent' => '#', ); $comment = preg_match ("##", $code, $comment_match); if ($comment) $data ['adsense-comment'] = trim ($comment_match [1]); if (preg_match ("/google_ad_client.+[\"\'](.+?)[\"\']/", $code, $match)) { $data ['adsense-publisher-id'] = str_replace ('ca-', '', $match [1]); } if (preg_match ("/google_ad_slot.+[\"\'](.+?)[\"\']/", $code, $match)) { $data ['adsense-ad-slot-id'] = $match [1]; } if (preg_match ("/google_ad_width[^\d]+(\d+)/", $code, $match)) { $data ['adsense-width'] = $match [1]; } if (preg_match ("/google_ad_height[^\d]+(\d+)/", $code, $match)) { $data ['adsense-height'] = $match [1]; } if (preg_match ("/enable_page_level_ads[^\d]+true/", $code, $match)) { $data ['adsense-type'] = AI_ADSENSE_AUTO; } return $data; } // Amazon if (strpos ($code, 'amzn_assoc_') !== false) { $data = array ( 'type' => AI_CODE_AMAZON, 'amazon-amp' => AI_AMAZON_AMP_DISABLED, 'amazon-width' => '', 'amazon-height' => '200', 'amazon-amp-block-on-consent' => '#', ); if (strpos ($code, 'data-amzn_assoc_') !== false) { $data ['amazon-amp'] = AI_AMAZON_AMP_ENABLED; $amazon_amp_ad = $dom->getElementsByTagName ('amp-ad'); if ($amazon_amp_ad->item (0)->getAttribute ('width') != '') { $data ['amazon-width'] = $amazon_amp_ad->item (0)->getAttribute ('width'); } if ($amazon_amp_ad->item (0)->getAttribute ('height') != '') { $data ['amazon-height'] = $amazon_amp_ad->item (0)->getAttribute ('height'); } if ($amazon_amp_ad->item (0)->hasAttribute ('data-block-on-consent')) { $data ['amazon-amp-block-on-consent'] = $amazon_amp_ad->item (0)->getAttribute ('data-block-on-consent'); } } if (preg_match_all ("/(amzn_assoc_[^\s=]+?)\s*=\s*[\"](.+?)[\"]/", $code, $matches)) { $unique_matches = array (); $unique_matches_values = array (); foreach ($matches [1] as $index => $match) { $found = false; foreach ($unique_matches as $unique_match) { if ($match == $unique_match) { $found = true; break; } } if (!$found) { $unique_matches [] = $match; $unique_matches_values [] = $matches [2][$index]; } } $amazon_data = ''; foreach ($unique_matches as $index => $unique_match) { if ($amazon_data != '') $amazon_data .= "\n"; $amazon_data .= $unique_match . ' = "' . $unique_matches_values [$index] . '"'; } $amazon_script = $dom->getElementsByTagName ('script'); if ($amazon_script-> length >= 2) { $amazon_data .= "\n".'regionurl' . ' = "' . $amazon_script->item (1)->getAttribute ('src') . '"'; } $data ['amazon-data'] = $amazon_data; } return $data; } // Banner $links = $dom->getElementsByTagName ('a'); $images = $dom->getElementsByTagName ('img'); if ($links->length != 0 || $images->length != 0) { $data = array ('type' => AI_CODE_BANNER, 'image' => '', 'link' => '', 'target' => ''); if ($images->length != 0) { // $data ['image'] = $images [0]->getAttribute ('src'); $data ['image'] = $images->item (0)->getAttribute ('src'); $data ['alt'] = $images->item (0)->getAttribute ('alt'); $data ['loading'] = $images->item (0)->getAttribute ('loading'); } if ($links->length != 0) { // $data ['link'] = $links [0]->getAttribute ('href'); $data ['link'] = $links->item (0)->getAttribute ('href'); // $data ['target'] = $links [0]->getAttribute ('target'); $data ['target'] = $links->item (0)->getAttribute ('target'); } return $data; } return array ('type' => AI_CODE_UNKNOWN); } public function import_rotation ($code, $extract_check_names = false){ global $ai_expand_only_rotate_count_check, $ai_wp_data; $data = array ( 'options' => array ( array ( 'code' => $code, 'name' => '', 'share' => '', 'time' => '', ), ), ); $ai_expand_only_rotate_count_check = true; unset ($ai_wp_data [AI_SHORTCODES]['rotate']); $code = do_shortcode ($code); $ai_expand_only_rotate_count_check = false; if (strpos ($code, AD_CHECK_SEPARATOR) !== false) { if (!$extract_check_names) { return $data; } if (function_exists ('ai_check_separators') && isset ($ai_wp_data [AI_SHORTCODES]['check'][0]['check']) && $ai_wp_data [AI_SHORTCODES]['check'][0]['check'] == 'statistics') { $check_parameters = $ai_wp_data [AI_SHORTCODES]['check']; $options = explode (AD_CHECK_SEPARATOR, $code); $data ['options'] = array (); foreach ($options as $index => $option) { $option_code = trim ($option, "\n"); $option_name = isset ($check_parameters [$index - 1]['name']) ? $check_parameters [$index - 1]['name'] : ''; $option_index = isset ($check_parameters [$index - 1]['index']) && $check_parameters [$index - 1]['index'] != '' ? (int) $check_parameters [$index - 1]['index'] : $index; // Skip option before first CHECK shortcode (always inserted) if ($option_index == 0) continue; $data ['options'][$option_index - 1] = array ('name' => $option_name); } } return $data; } preg_match_all ('/\|count([0-9]+?)\|/', $code, $matches); if (count ($matches [1]) != 0) { return $data; } preg_match_all ('/\|rotate([0-9]+?)\|/', $code, $matches); if (count ($matches [1]) != 0) { $rotate_parameters = array (); foreach ($matches [1] as $match) { $rotate_parameters []= $ai_wp_data [AI_SHORTCODES]['rotate'][$match]; } $code = preg_replace ('/\|rotate([0-9]+?)\|/', AD_ROTATE_SEPARATOR, $code); } else if (isset ($ai_wp_data [AI_SHORTCODES]['rotate'])) $rotate_parameters = $ai_wp_data [AI_SHORTCODES]['rotate']; if (strpos ($code, AD_ROTATE_SEPARATOR) !== false) { $options = explode (AD_ROTATE_SEPARATOR, $code); $data ['options'] = array (); foreach ($options as $index => $option) { $option_code = trim ($option, "\n"); $rotation_groups = 0; if (isset ($rotate_parameters [$index - 1]['group']) && $rotate_parameters [$index - 1]['group'] != '') { $rotation_groups = 1; $option_name = $rotate_parameters [$index - 1]['group']; $option_share = ''; $option_time = ''; $option_scheduling = ''; } else { $option_name = isset ($rotate_parameters [$index - 1]['name']) ? $rotate_parameters [$index - 1]['name'] : ''; if (isset ($rotate_parameters [$index - 1]['share'])) { if (is_numeric ($rotate_parameters [$index - 1]['share'])) { $option_share = intval ($rotate_parameters [$index - 1]['share']); } elseif (strpos (strtolower ($rotate_parameters [$index - 1]['share']), 'ctr') === 0) { $option_share = $rotate_parameters [$index - 1]['share']; } else $option_share = ''; } // $option_share = isset ($rotate_parameters [$index - 1]['share']) && is_numeric ($rotate_parameters [$index - 1]['share']) ? intval ($rotate_parameters [$index - 1]['share']) : ''; $option_time = isset ($rotate_parameters [$index - 1]['time']) && is_numeric ($rotate_parameters [$index - 1]['time']) ? intval ($rotate_parameters [$index - 1]['time']) : ''; $option_scheduling = isset ($rotate_parameters [$index - 1]['scheduling']) && strpos ($rotate_parameters [$index - 1]['scheduling'], '%') !== false && strpos ($rotate_parameters [$index - 1]['scheduling'], '=') !== false ? $rotate_parameters [$index - 1]['scheduling'] : ''; } if ($index == 0 && $option_code == '') continue; $data ['options'] []= array ('code' => $option_code, 'name' => $option_name, 'share' => $option_share, 'time' => $option_time, 'scheduling' => $option_scheduling, 'groups' => $rotation_groups); } } return $data; } public function generate_rotation ($rotation_data){ if (count ($rotation_data) == 1) { $rotation_code = trim ($rotation_data [0]['code']); } else { $rotation_code = ''; $rotation_groups = $rotation_data [0]['groups']; foreach ($rotation_data as $index => $rotation_data_row) { $name = trim ($rotation_data_row ['name']); $share = trim ($rotation_data_row ['share']); $scheduling = trim ($rotation_data_row ['scheduling']); $time = trim ($rotation_data_row ['time']); $code = trim ($rotation_data_row ['code'], "\n"); if ($index != 0 || $name != '' || $share != '' || $scheduling != ''|| $time != '') { $shortcode = "" ; if ($index != 0) $shortcode .= "\n\n"; $shortcode .= '[ADINSERTER ROTATE'; if ($rotation_groups) { if ($name != '') $shortcode .= ' group="'.str_replace ('"', '\'', $name).'"'; } else { if ($name != '') $shortcode .= ' name="'.str_replace ('"', '\'', $name).'"'; if ($share != '') $shortcode .= ' share="'.str_replace ('"', '\'', $share).'"'; if ($scheduling != '') $shortcode .= ' scheduling="'.str_replace ('"', '\'', $scheduling).'"'; if ($time != '') $shortcode .= ' time="'.str_replace ('"', '\'', $time).'"'; } $shortcode .= "]\n\n"; } else $shortcode = ''; $rotation_code .= $shortcode . $code; } } return $rotation_code; } } class ai_block_labels { var $class; var $text_color; var $left_text; var $right_text; public function __construct ($class = '') { $this->class = $class == '' ? 'ai-debug-default' : $class; $this->text_color = ''; $this->left_text = ''; $this->right_text = ''; } public function block_start () { return "
\n"; } public function block_end () { return "
\n"; } public function bar ($left_text, $left_title = '', $center_text = '', $right_text = '', $right_title = '', $additional_class = '') { return "
" . $this->invisible_start () . $this->bar_text_left ($left_text, $left_title) . $this->bar_text_center ($center_text) . $this->bar_text_right ($right_text, $right_title) . $this->invisible_end () . "
\n"; } public function bar_hidden_viewport ($left_text, $left_title = '', $center_text = '', $right_text = '', $right_title = '') { return "
" . $this->invisible_start () . $this->bar_text_left ($left_text, $left_title) . $this->bar_text_center ($center_text) . $this->bar_text_right ($right_text, $right_title) . $this->invisible_end () . "
\n"; } public function center_bar ($center_text) { return "
" . $this->left_text . $this->invisible_start () . // "".$this->left_text."" . $this->bar_text_center ($center_text) . // "".$this->right_text."" . $this->invisible_end () . "
\n"; } public function bar_text_left ($text, $title) { // $this->left_text = $text; return "$text"; } public function bar_text_center ($text) { return " $text "; } public function bar_text_right ($text, $title) { // $this->right_text = $text; return "$text"; } public function invisible_start () { return '[AI]'; } public function invisible_end () { return '[/AI]'; } public function message ($text, $attr = '') { return "
" . $this->invisible_start () . $text . $this->invisible_end () . "
\n"; } public function adb_hidden_section_start () { return "
"; } public function adb_hidden_section_end () { return "
\n"; } public function adb_visible_section_start () { return "
"; } public function adb_visible_section_end () { return "
\n"; } } PK!I}?R** settings.phpnu[ $article) { $title = ''; if (preg_match ('##', $article, $match)) { $title = trim ($match [1]); } if ($title != '' && strlen ($article) > 100) { $postarr = array ( 'ID' => 0, 'post_content' => $article, 'post_title' => $title, 'post_status' => 'publish', ); $post_id = wp_insert_post ($postarr); } } } } @unlink ($ai_articles); update_option ('ai-notice-review', 'no'); } $save_url = $_SERVER ['REQUEST_URI']; if (isset ($_GET ['tab'])) { $save_url = preg_replace ("/&tab=\d+/", "", $save_url); } $generate_all = false; if (isset ($_GET ['generate-all']) && $_GET ['generate-all'] == 1) { $generate_all = true; } $subpage = 'main'; $start = 1; $end = 16; if (isset ($_GET ['start']) && is_numeric ($start) && $start >= 1 && $start <= 96) $start = (int) $_GET ['start']; else $start = 1; $end = min ($start + 15, 96); if (isset ($_POST ['ai-active-tab'])) { $active_tabs = json_decode ($_POST ['ai-active-tab']); if ($active_tabs == null) $active_tabs = array ($start, 0); } if (isset ($_GET ['settings']) && is_numeric ($_GET ['settings'])) { $active_tab = (int) $_GET ['settings']; if ($active_tab < 1 || $active_tab > 96) $active_tab = 1; if (isset ($_GET ['single'])) { $start = $active_tab; $end = $active_tab; } else { $start = intval (($active_tab - 1) / 16) * 16 + 1; $end = $start + 15; } } elseif (isset ($_GET ['tab']) && is_numeric ($_GET ['tab'])) { $active_tab = (int) $_GET ['tab']; $start = intval (($active_tab - 1) / 16) * 16 + 1; $end = $start + 15; } else $active_tab = isset ($active_tabs [0]) ? (int) $active_tabs [0] : $start; if (!is_numeric ($active_tab)) $active_tab = 1; if ($active_tab != 0) { if ($active_tab < $start || $active_tab > $end) $active_tab = $start; } $active_tab_0 = isset ($active_tabs [1]) ? (int) $active_tabs [1] : 0; $disable_block_insertions = get_disable_block_insertions (); $disable_php_processing = get_disable_php_processing (); $disable_html_code = get_disable_html_code (); $disable_css_code = get_disable_css_code (); $disable_js_code = get_disable_js_code (); $disable_footer_code = get_disable_footer_code (); $disable_header_code = get_disable_header_code (); $insertion_disabled = $disable_block_insertions || $disable_php_processing || $disable_html_code || $disable_css_code || $disable_js_code || $disable_footer_code || $disable_header_code; if ($insertion_disabled) { $insertion_statuses = 'H   '; $insertion_statuses .= 'F   '; $insertion_statuses .= 'JS   '; $insertion_statuses .= 'CSS   '; $insertion_statuses .= 'HTML   '; $insertion_statuses .= 'PHP   '; $insertion_statuses .= 'BLOCKS'; } else $insertion_statuses = ''; $adH = $block_object [AI_HEADER_OPTION_NAME]; $adF = $block_object [AI_FOOTER_OPTION_NAME]; if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { $adA = $block_object [AI_ADB_MESSAGE_OPTION_NAME]; } $syntax_highlighter_theme = defined ('AI_SAFE_MODE') ? 'disabled' : get_syntax_highlighter_theme (); $block_class_name = get_block_class_name (); $block_class = get_block_class (); $block_number_class = get_block_number_class (); $block_name_class = get_block_name_class (); $inline_styles = get_inline_styles (); $default = $block_object [0]; $exceptions_array = ai_get_exceptions (ai_current_user_role_ok () && (!is_multisite() || is_main_site () || multisite_exceptions_enabled ())); $exceptions = $exceptions_array [0]; $block_exceptions = $exceptions_array [1]; if (get_wait_for_jquery ()) { echo '

', __('Information', 'ad-inserter'), ': ', __('Legacy JavaScript code used', 'ad-inserter'), ', ', __('disable ', 'ad-inserter'), '', __ ('Wait for jQuery', 'ad-inserter'), '

'; } if (ai_current_user_role_ok () && (!is_multisite() || is_main_site () || multisite_exceptions_enabled ())) { if (isset ($_POST [AI_FORM_CLEAR_EXCEPTIONS])) { if ($_POST [AI_FORM_CLEAR_EXCEPTIONS] == "\xe2\x9d\x8c" && !empty ($exceptions)) { echo '

' . sprintf (__('Warning: only exceptions for %d posts cleared, %d posts still have exceptions', 'ad-inserter'), AI_LIST_EXCEPTIONS_LIMIT, count ($exceptions)) . '

'; } elseif (is_numeric ($_POST [AI_FORM_CLEAR_EXCEPTIONS]) && !empty ($block_exceptions [$_POST [AI_FORM_CLEAR_EXCEPTIONS]])) { echo '

' . sprintf (__('Warning: only exceptions for %d posts cleared, %d posts still have exceptions', 'ad-inserter'), AI_LIST_EXCEPTIONS_LIMIT, count ($block_exceptions [$_POST [AI_FORM_CLEAR_EXCEPTIONS]])) . '

'; } } } if (!$ai_wp_data [AI_UNFILTERED_HTML]) { // translators: %s: HTML link code echo '

' . sprintf (__('Warning: %s Unfiltered HTML %s is disabled for this website - most ad codes can\'t be used', 'ad-inserter'), '', '') . '

'; } $rating_string = ''; if ($rating_string = get_transient (AI_TRANSIENT_RATING)) { if ($rating_string < 1 && $rating_string > 5) $rating_string = ''; } $rating_css = $rating_string == '' ? 'width: 100%;' : 'width: '.number_format ($rating_string * 20, 4).'%;'; $rating_value = $rating_string == '' ? '' : number_format ($rating_string, 1); if (isset ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) && is_string ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) && strlen ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) != 0) { $used_blocks = unserialize ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]); } else $used_blocks = array (); if (!isset ($_GET ['settings'])): // start of code only for normal settings $default_sidebar = isset ($ai_wp_data [AI_DAYS_SINCE_INSTAL]) && $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 19 && count ($used_blocks) >= 4 && function_exists ('ai_settings_side') && function_exists ('ai_admin_settings_notices') ? '1' : '0'; // Not needed anymore // if (is_multisite () && multisite_main_for_all_blogs () && defined ('BLOG_ID_CURRENT_SITE')) { // $saved_options = get_blog_option (BLOG_ID_CURRENT_SITE, AI_OPTION_NAME); // if (is_string ($saved_options) && substr ($saved_options, 0, 4) === ':AI:') { // $saved_options = unserialize (base64_decode (substr ($saved_options, 4), true)); // } // } else $saved_options = ai_get_option (AI_OPTION_NAME); // $warning = false; // if (!empty ($saved_options)) // foreach ($saved_options as $block => $block_settings) { // if ($block >= $start && $block <= $end) { // if (isset ($saved_options [$block]) && strpos (serialize ($saved_options [$block]), '_on_which_') !== false) { // $warning = true; // break; // } // } // } // if ($warning) { // echo '

' . __('Settings for individual exceptions have been updated. Please check all blocks that have exceptions and and then save settings.', 'ad-inserter') . '

'; // } if (function_exists ('ai_admin_settings_notices')) ai_admin_settings_notices (); $hide_settings_enabled = defined ('AI_HIDE_SETTINGS_ENABLED') && AI_HIDE_SETTINGS_ENABLED; $settings_hidden = function_exists ('ai_block_list_buttons') && $hide_settings_enabled ? get_settings_hidden () : false; $settings_page = get_menu_position () == AI_SETTINGS_SUBMENU ? 'options-general.php?page=ad-inserter.php' : 'admin.php?page=ad-inserter.php'; ?>
">

', ''); ?>

', ''); ?>

', $insertion_statuses, ''; ?>
number = $block; $default->wp_options [AI_OPTION_BLOCK_NAME] = DEFAULT_AD_NAME." ".$block; $tab_visible = $block == $active_tab || $generate_all; $obj = $block_object [$block]; } else { $block = 999; $sidebars [$block] = ""; $manual_widget [$block] = $obj->get_enable_widget() == AI_ENABLED; $manual_shortcode [$block] = $obj->get_enable_manual() == AI_ENABLED; $manual_php_function [$block] = $obj->get_enable_php_call() == AI_ENABLED; $manual [$block] = ($manual_widget [$block] && !empty ($sidebars_with_widget [$block])) || $manual_shortcode [$block] || $manual_php_function [$block]; $default->number = 0; $default->wp_options [AI_OPTION_BLOCK_NAME] = DEFAULT_AD_NAME." 0"; $tab_visible = false; $obj = $default; } $client_side_devices = $obj->get_detection_client_side () == AI_ENABLED; $server_side_devices = $obj->get_detection_server_side () == AI_ENABLED; if ($client_side_devices) $client_side_style = "font-weight: bold; color: #66f;"; else $client_side_style = ""; if ($server_side_devices) $server_side_style = "font-weight: bold; color: #66f;"; else $server_side_style = ""; $show_devices = $client_side_devices || $server_side_devices == AI_ENABLED; if ($show_devices) $devices_style = "font-weight: bold; color: #66f;"; else $devices_style = ""; $cat_list = $obj->get_ad_block_cat(); $tag_list = $obj->get_ad_block_tag(); $taxonomy_list = $obj->get_ad_block_taxonomy(); $id_list = $obj->get_id_list(); $url_list = $obj->get_ad_url_list(); $url_parameter_list = $obj->get_url_parameter_list(); $cookie_list = $obj->get_cookie_list(); $domain_list = $obj->get_ad_domain_list(); $client_list = $obj->get_client_list(); if (function_exists ('ai_lists')) $lists = ai_lists ($obj); else $lists = false; $show_cat_list = $cat_list != ''; $show_tag_list = $tag_list != ''; $show_taxonomy_list = $taxonomy_list != ''; $show_id_list = $id_list != ''; $show_url_list = $url_list != ''; $show_url_parameter_list = $url_parameter_list != ''; $show_cookie_list = $cookie_list != ''; $show_domain_list = $domain_list != ''; $show_client_list = $client_list != ''; $show_lists = $show_cat_list || $show_tag_list || $show_taxonomy_list || $show_id_list || $show_url_list || $show_url_parameter_list || $show_cookie_list || $show_domain_list || $show_client_list || $lists; if ($show_lists) $lists_style = "font-weight: bold; color: #66f;"; else $lists_style = ""; $show_manual = $manual [$block] ||!empty ($sidebars_with_widget [$block]); if ($show_manual) $manual_style = "font-weight: bold; color: " . ($manual_widget [$block] || empty ($sidebars_with_widget [$block]) ? "#66f;" : "#e44;"); else $manual_style = ""; $insertion_options = $obj->get_maximum_insertions () || $obj->get_display_for_users() != AI_DISPLAY_ALL_USERS || $obj->get_enable_amp () == AI_ENABLED || $obj->get_enable_ajax () != AI_ENABLED || $obj->get_enable_404 () == AI_ENABLED || $obj->get_enable_feed () == AI_ENABLED || $obj->get_max_page_blocks_enabled () || $obj->get_only_in_the_loop () || $obj->get_embed_js_code () || $obj->get_disable_caching (); $word_count_options = intval ($obj->get_minimum_words()) != 0 || intval ($obj->get_maximum_words()) != 0; $automatic_insertion = $obj->get_automatic_insertion(); $paragraph_settings = $automatic_insertion == AI_AUTOMATIC_INSERTION_BEFORE_PARAGRAPH || $automatic_insertion == AI_AUTOMATIC_INSERTION_AFTER_PARAGRAPH; $image_settings = $automatic_insertion == AI_AUTOMATIC_INSERTION_BEFORE_IMAGE || $automatic_insertion == AI_AUTOMATIC_INSERTION_AFTER_IMAGE; $filter_insertions_settings = $automatic_insertion == AI_AUTOMATIC_INSERTION_BEFORE_EXCERPT || $automatic_insertion == AI_AUTOMATIC_INSERTION_AFTER_EXCERPT || $automatic_insertion == AI_AUTOMATIC_INSERTION_BETWEEN_POSTS || $automatic_insertion == AI_AUTOMATIC_INSERTION_BETWEEN_COMMENTS; if ($filter_insertions_settings) { $filter_active = $obj->get_filter_type() != AI_FILTER_AUTO || $obj->get_inverted_filter() != 0; } else $filter_active = $obj->get_call_filter() || $obj->get_inverted_filter() != 0; $adb_block_action_active = $obj->get_adb_block_action () != AI_ADB_BLOCK_ACTION_DO_NOTHING; $parallax_options = false; for ($index = 1; $index <= 3; $index ++) { $parallax_options |= $obj->get_parallax ($index) && $obj->get_parallax_image ($index) != ''; if ($parallax_options) break; } $display_options = $obj->get_block_width () != '' || $obj->get_block_height () != '' || $obj->get_block_background_color () != '' || $obj->get_show_label () || $obj->get_lazy_loading () || $obj->get_wait_for_interaction () || $obj->get_protected () || $obj->get_sticky () || $obj->get_check_recaptcha_score () ||$obj->get_manual_loading () != AI_MANUAL_LOADING_DISABLED || $obj->get_close_button () || $obj->get_auto_close_time () || $obj->get_stay_closed_time () || $obj->get_delay_time () || $obj->get_delay_showing () || $obj->get_show_every () || $obj->get_iframe () || $parallax_options; $limits_options = $obj->get_max_impressions () || ($obj->get_limit_impressions_per_time_period () && $obj->get_limit_impressions_time_period ()) || $obj->get_max_clicks () || ($obj->get_limit_clicks_per_time_period () && $obj->get_limit_clicks_time_period ()) || $obj->get_visitor_max_impressions () || ($obj->get_visitor_limit_impressions_per_time_period () && $obj->get_visitor_limit_impressions_time_period ()) || $obj->get_visitor_max_clicks () || ($obj->get_visitor_limit_clicks_per_time_period () && $obj->get_visitor_limit_clicks_time_period ()) || $obj->get_trigger_click_fraud_protection (); $scheduling_active = $obj->get_scheduling () != AI_SCHEDULING_OFF; $show_misc = $insertion_options || $word_count_options || $scheduling_active || $filter_active || $adb_block_action_active || $display_options || $limits_options; if ($show_misc) $misc_style = "font-weight: bold; color: #66f;"; else $misc_style = ""; if ($insertion_options) $insertion_style = "font-weight: bold; color: #66f;"; else $insertion_style = ""; if ($word_count_options) $word_count_style = "font-weight: bold; color: #66f;"; else $word_count_style = ""; if ($scheduling_active) $scheduling_style = ($scheduling_period_inactive [$block] ? 'font-weight: bold; color: #e44;' : "font-weight: bold; color: #66f;"); else $scheduling_style = ""; if ($filter_active) $filter_style = "font-weight: bold; color: #66f;"; else $filter_style = ""; if ($adb_block_action_active) $adb_style = "font-weight: bold; color: #66f;"; else $adb_style = ""; if ($display_options) $display_style = "font-weight: bold; color: #66f;"; else $display_style = ""; if ($limits_options) $limits_style = "font-weight: bold; color: #66f;"; else $limits_style = ""; $general_style = ''; $paragraph_counting = $paragraph_settings && ( $obj->get_direction_type() != $default->get_direction_type() || $obj->get_paragraph_tags() != $default->get_paragraph_tags() || $obj->get_minimum_paragraph_words() != $default->get_minimum_paragraph_words() || $obj->get_maximum_paragraph_words() != $default->get_maximum_paragraph_words() || $obj->get_paragraph_text_type() != $default->get_paragraph_text_type() || $obj->get_paragraph_text() != $default->get_paragraph_text() || $obj->get_count_inside_blockquote() != $default->get_count_inside_blockquote() || $obj->get_count_inside() != $default->get_count_inside() || $obj->get_count_inside_elements() != $default->get_count_inside_elements() || $obj->get_count_inside_elements_contain() != $default->get_count_inside_elements_contain() || $obj->get_count_inside_elements_text() != $default->get_count_inside_elements_text() || $obj->get_paragraph_number_minimum() != $default->get_paragraph_number_minimum() || $obj->get_paragraph_number_maximum() != $default->get_paragraph_number_maximum() || $obj->get_skip_first_paragraphs() != $default->get_skip_first_paragraphs() || $obj->get_skip_last_paragraphs() != $default->get_skip_last_paragraphs() || $obj->get_minimum_words_above() != $default->get_minimum_words_above() ); $paragraph_clearance = $paragraph_settings && ( ($obj->get_avoid_text_above() != $default->get_avoid_text_above() && intval ($obj->get_avoid_paragraphs_above()) != 0) || ($obj->get_avoid_text_below() != $default->get_avoid_text_below() && intval ($obj->get_avoid_paragraphs_below()) != 0) ); $html_settings = $automatic_insertion == AI_AUTOMATIC_INSERTION_BEFORE_HTML_ELEMENT || $automatic_insertion == AI_AUTOMATIC_INSERTION_AFTER_HTML_ELEMENT || $automatic_insertion == AI_AUTOMATIC_INSERTION_INSIDE_HTML_ELEMENT; $html_element_insertion = $obj->get_html_element_insertion (); $server_side_insertion = $obj->get_server_side_insertion (); $inside_element = $obj->get_inside_element (); $filter_type = $obj->get_filter_type(); $page_exceptions = array (); $post_exceptions = array (); if (!empty ($block_exceptions [$block])) { $page_index = 0; $post_index = 0; foreach ($block_exceptions [$block] as $id => $exception) { if ($exception ['type'] == 'page') { $row_class = $page_index % 2 == 0 ? 'even' : 'odd'; } else { $row_class = $post_index % 2 == 0 ? 'even' : 'odd'; } $exception_line = ' ' . $id .' ' . $exception ['name'] . ' ' . $exception ['title'] . ' ' . "\n"; if (defined ('AI_CONNECTED_WEBSITE')) { $connected_website = get_transient (AI_CONNECTED_WEBSITE); if ($connected_website !== false) { // No links to the local site $exception_line = preg_replace ('#(.*?)#i', '\1', $exception_line); $exception_line = preg_replace ('#title="(.*?)"#i', '', $exception_line); } } if ($exception ['type'] == 'page') { $page_exceptions []= $exception_line; $page_index ++; } else { $post_exceptions []= $exception_line; $post_index ++; } } } $exceptions_needs_check = false; $option = $obj->import_old_exception_settings ($exceptions_needs_check); $exceptions_error = $obj->get_exceptions_enabled () && $obj->get_exceptions_function () == AI_DEFAULT_INSERTION_DISABLED && empty ($block_exceptions [$block]); $exceptions_shown = $exceptions_needs_check || $exceptions_error; $exception_button_on = $obj->get_exceptions_enabled () && !empty ($block_exceptions [$block]) || $exceptions_shown; ?>
">
get_ad_name() ?> get_process_php () == AI_ENABLED) echo 'checked '; ?> style="display: none;" /> get_disable_insertion () == AI_ENABLED) echo 'checked '; ?> style="display: none;" />
' class="ai-rotation-warning" style='float: left; font-size: 18px; font-weight: bold; margin: 5px 5px 0 0; display: none;'>⚠
get_display_settings_post()==AI_ENABLED) echo 'checked '; ?> /> get_display_settings_home()==AI_ENABLED) echo 'checked '; ?> /> get_display_settings_category()==AI_ENABLED) echo 'checked '; ?> />
get_display_settings_page()==AI_ENABLED) echo 'checked '; ?> /> get_display_settings_search()==AI_ENABLED) echo 'checked '; ?> /> get_display_settings_archive()==AI_ENABLED) echo 'checked '; ?> />
get_exceptions_enabled () == AI_ENABLED) echo 'checked '; ?> />  
' style='display: table-cell; font-size: 20px; vertical-align: middle; padding: 0;'>⚠ ' style='display: table-cell; font-size: 20px; vertical-align: middle; padding: 0;'>⚠
ID
"> ">
">
    
ms
">
    " type="text" name="" default="get_paragraph_tags(); ?>" value="get_paragraph_tags(); ?>" size="12" maxlength="500"/>  

" type="text" name="" default="get_count_inside_elements (); ?>" value="get_count_inside_elements (); ?>" size="4" maxlength="500"/>
get_check_only_tag_attributes ()==AI_ENABLED) echo 'checked '; ?> /> get_count_inside_blockquote()==AI_ENABLED) echo 'checked '; ?> />

get_skip_first_paragraphs(),'ad-inserter'); ?> get_skip_last_paragraphs(),'ad-inserter'); ?> get_skip_last_paragraphs(), 'ad-inserter'); ?>

get_paragraph_number_maximum(), 'ad-inserter'); ?>

">
 
 
get_ad_block_cat_type() == AI_WHITE_LIST) echo 'checked '; ?> style="display: none;" />
get_ad_block_tag_type() == AI_WHITE_LIST) echo 'checked '; ?> style="display: none;" />
get_ad_block_taxonomy_type() == AI_WHITE_LIST) echo 'checked '; ?> style="display: none;" />
get_id_list_type() == AI_WHITE_LIST) echo 'checked '; ?> style="display: none;" />
get_ad_url_list_type() == AI_WHITE_LIST) echo 'checked '; ?> style="display: none;" />
  " type="text" name="" default="get_url_parameter_list(); ?>" value="" size="54" maxlength="1500"/> get_url_parameter_list_type() == AI_WHITE_LIST) echo 'checked '; ?> style="display: none;" />
get_ad_domain_list_type() == AI_WHITE_LIST) echo 'checked '; ?> style="display: none;" />
get_client_list_type() == AI_WHITE_LIST) echo 'checked '; ?> style="display: none;" />
get_enable_widget () == AI_ENABLED) echo 'checked '; ?> />
get_enable_manual () == AI_ENABLED) echo 'checked '; ?> />
[adinserter block=""]
or
[adinserter name="get_ad_name(); ?>"]
/>
<?php if (function_exists ('adinserter')) echo adinserter (); ?>
get_detection_client_side ()==AI_ENABLED) echo 'checked '; ?> />
$viewport_name) { if ($column % $columns == 0) { ?>
" value="1" default="get_detection_viewport ($viewport); ?>" get_detection_viewport ($viewport)==AI_ENABLED) echo 'checked '; ?> />
get_detection_server_side ()==AI_ENABLED) echo 'checked '; ?> />
get_enable_amp (true) == AI_ENABLED) echo 'checked '; ?> /> get_enable_ajax () == AI_ENABLED) echo 'checked '; ?> /> get_enable_feed () == AI_ENABLED) echo 'checked '; ?> /> get_enable_404 () == AI_ENABLED) echo 'checked '; ?> />
get_max_page_blocks_enabled () == AI_ENABLED) echo 'checked '; ?> />
get_only_in_the_loop () == AI_ENABLED) echo 'checked '; ?> /> get_embed_js_code () == AI_ENABLED) echo 'checked '; ?> /> get_disable_caching () == AI_ENABLED) echo 'checked '; ?> />
get_inverted_filter () == AI_ENABLED) echo 'checked '; ?> />
get_maximum_words(), 'ad-inserter'); ?>
get_show_label () == AI_ENABLED) echo 'checked '; ?> />
  " />
get_call_filter() != '' || $obj->get_maximum_insertions () != ''); ?>
', '', '', '', '', '' ); ?>
">

' class="ai-rotation-warning" style='float: left; font-size: 18px; font-weight: bold; margin: 5px 5px 0 0; display: none;'>⚠
get_plugin_tracking () !== null) { $plugin_tracking = $ai_dst->get_tracking (); ?>
px
/> /> /> />

  
</div>
    : [[
[adinserter data=""]
]]'/>   
[adinserter data=""]
    " size="15" maxlength="40" /> ' ?>    " size="4" maxlength="4" /> px ' ?>
/>
get_enable_manual () == AI_ENABLED) echo 'checked '; ?> style="display: none;" /> get_process_php () == AI_ENABLED) echo 'checked '; ?> style="display: none;" />

<head></head>'); ?> ', _x ('NOT ENABLED', 'code in the header', 'ad-inserter'), ''; ?>
get_detection_server_side ()==AI_ENABLED) echo 'checked '; ?> />
get_enable_404 () == AI_ENABLED) echo 'checked '; ?> />
get_enable_manual () == AI_ENABLED): ?> ' style='display: inline-block; font-size: 20px; vertical-align: bottom; padding: 0;'> get_enable_manual () == AI_ENABLED) echo 'checked '; ?> style="display: none;" />

  ', _x ('NOT ENABLED', 'ad blocking detection', 'ad-inserter'), ''; ?>
/>
0, 'child_of' => 0, 'selected' => get_redirection_page (true), 'echo' => 0, 'name' => AI_OPTION_ADB_REDIRECTION_PAGE, 'id' => 'redirection-page', 'class' => null, 'show_option_none' => __('Custom Url', 'ad-inserter'), 'show_option_no_change' => null, 'option_none_value' => '0', ); $dropdown_pages = wp_dropdown_pages ($args); $dropdown_title = __ ('Static page for redirection when ad blocking is detected. For other pages select Custom url and set it below.', 'ad-inserter'); $dropdown_pages = str_replace ('
get_process_php () == AI_ENABLED) echo 'checked '; ?> style="display: none;" />
/>
get_tracking (); } if (function_exists ('ai_remote_plugin_data')) { $install_timestamp = ai_remote_plugin_data ('install', $install_timestamp); $install_time = ai_remote_plugin_data ('install-time', $install_time); $since_install = ai_remote_plugin_data ('since-install', $since_install); $review = ai_remote_plugin_data ('review', $review); if (defined ('AI_PLUGIN_TRACKING') && AI_PLUGIN_TRACKING) { $tracking = ai_remote_plugin_data ('tracking', $tracking); } } $d1 = __ ("Force showing admin toolbar for administrators when viewing site. Enable this option when you are logged in as admin and you don't see admin toolbar.", 'ad-inserter'); // Preview of client-side dynamic blocks ?>
style="display: none;" /> style="display: none;" /> style="display: none;" /> style="display: none;" /> style="display: none;" /> style="display: none;" /> style="display: none;" />

<html>
<head>
  ...
  ><style>
    

  </style>
  >
</head>
<body>
  ...
  >

    ><?php  ?>
    

  </div>
  ...
  ><span></span>
  ><script>
    

  </script>
  >
</body>
</html>
/>
/>
/>
/>
/>
2) $sidebar = 1; if ($number_of_used_blocks >= 4 && $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 5 || $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 10) $sidebar = 2; if ($number_of_used_blocks >= 12 && $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 7 || $number_of_used_blocks >= 8 && $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 10 || $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 15) $sidebar = 3; if ($ai_wp_data [AI_DAYS_SINCE_INSTAL] > 20) $sidebar = 4; } else { if ($number_of_used_blocks >= 1) $sidebar = 4; } // $sidebar = 0; if (!function_exists ('ai_settings_side')) { switch ($sidebar) { case 0: break; case 1: break; case 2: sidebar_addense_alternative (); break; case 3: sidebar_support_review (); sidebar_addense_alternative (); break; case 4: sidebar_addense_alternative (); break; } } ?>
$sidebar_widget) { if (is_array ($sidebar_widget) && isset ($GLOBALS ['wp_registered_sidebars'][$sidebar_index]['name'])) { $sidebar_name = $GLOBALS ['wp_registered_sidebars'][$sidebar_index]['name']; if ($sidebar_name != "") { foreach ($sidebar_widget as $widget) { if (preg_match ("/ai_widget-([\d]+)/", $widget, $widget_id)) { if (isset ($widget_id [1]) && is_numeric ($widget_id [1])) { $widget_option = $widget_options [$widget_id [1]]; $widget_block = $widget_option ['block']; // if ($widget_block >= $start && $widget_block <= $end && !in_array ($sidebar_name, $sidebars_with_widget [$widget_block])) { if ($widget_block >= 1 && $widget_block <= 96 && !in_array ($sidebar_name, $sidebars_with_widget [$widget_block])) { $sidebars_with_widget [$widget_block] []= $sidebar_name; } } } } } } } return $sidebars_with_widget; } function page_checker_container () { global $ai_custom_hooks; if (function_exists ('ai_settings_theme')) { $current_theme = ai_settings_theme (); } else $current_theme = wp_get_theme (); ?>
>
get_ad_data (); // data-ad-client="ca-pub-3118622027477755" if (preg_match_all ('#data-ad-client\s*=\s*"(.+?)"#', $block_code, $adsense_matches)) { foreach ($adsense_matches [1] as $adsense_match) { if (preg_match ('#(pub-[0-9]+)#', $adsense_match, $adsense_pub_id)) { $found = false; foreach ($block_ads as $block_ad) { if ($block_ad ['ads_data'][1] == $adsense_pub_id [1]) { $found = true; break; } } if (!$found) { $block_ads [] = array ('ads_data' => array ('google.com', $adsense_pub_id [1], 'DIRECT', 'f08c47fec0942fa0'), 'found' => false); } } } } // google_ad_client = "ca-pub-3118622027477755"; if (preg_match_all ('#google_ad_client\s*=\s*"(.+?)"#', $block_code, $adsense_matches)) { foreach ($adsense_matches [1] as $adsense_match) { if (preg_match ('#(pub-[0-9]+)#', $adsense_match, $adsense_pub_id)) { $found = false; foreach ($block_ads as $block_ad) { if ($block_ad ['ads_data'][1] == $adsense_pub_id [1]) { $found = true; break; } } if (!$found) { $block_ads [] = array ('ads_data' => array ('google.com', $adsense_pub_id [1], 'DIRECT', 'f08c47fec0942fa0'), 'found' => false); } } } } } $site_url = site_url (); $home_url = home_url (); $url_parts = explode (DIRECTORY_SEPARATOR, str_replace (array ('https', 'http', '://'), '', $site_url)); $ads_txt_home = 'http' . (is_ssl() ? 's' : '') . '://'. $url_parts [0]; $ads_txt_url = $ads_txt_home . DIRECTORY_SEPARATOR . 'ads.txt'; $wp_content_dir_array = explode ('/', WP_CONTENT_DIR); $wp_content_dir = $wp_content_dir_array [count ($wp_content_dir_array) - 1]; $root_path = str_replace ($wp_content_dir, '', WP_CONTENT_DIR); $ads_txt_file = $root_path . 'ads.txt'; $wp_folder = ''; if (count ($url_parts) > 1) { $wp_folder = str_replace ($ads_txt_home, '', $site_url); $wp_folder = str_replace ('/', DIRECTORY_SEPARATOR, $wp_folder); } echo ''; $virtual = isset ($_GET ["virtual"]) && $_GET ["virtual"]; $virtual_file_missing = false; if ($virtual) { $ads = get_option (AI_ADS_TXT_NAME); if ($ads === false) { $virtual_file_missing = true; $ads = ''; if ($action == 'table') { $action = 'text'; } } } else { if (file_exists ($ads_txt_file)) { $ads = file_get_contents ($ads_txt_file); } else { $ads = ''; if ($action == 'table') { $action = 'text'; } } } $ads_lines = explode ("\n", $ads); $rows = array (); foreach ($ads_lines as $ads_line) { if (trim ($ads_line) == '') continue; $ads_data = explode ('#', str_replace (array ("\r", ' '), '', $ads_line)); $ads_elements = explode (',', $ads_data [0]); if (count ($ads_elements) == 0) continue; $found = false; foreach ($block_ads as $index => $block_ad) { if (!isset ($ads_elements [1])) continue; if ($block_ad ['ads_data'][1] == $ads_elements [1]) { $found = true; $block_ads [$index]['found'] = true; break; } } $rows []= array ('ads_elements' => $ads_elements, 'status' => $found ? 'F' : ''); } $missing_lines = array (); foreach ($block_ads as $block_ad) { if (!$block_ad ['found']) { array_unshift ($rows, array ('ads_elements' => $block_ad ['ads_data'], 'status' => 'M')); $missing_lines []= implode (', ', $block_ad ['ads_data']); } } $search_text = isset ($_GET ["search"]) ? trim (esc_html ($_GET ["search"])) : ''; if ($search_text != '') $search_array = explode (' ', $search_text); else $search_array = array (); foreach ($rows as $index => $row) { $ads_line = implode (' ', $row ['ads_elements']); foreach ($search_array as $search_item) { if (stripos ($ads_line, trim ($search_item)) === false) { unset ($rows [$index]); continue 2; } } } switch ($virtual) { case true: echo '
'; // translators: %s: Ad Inserter echo '
', sprintf (__('ads.txt file: %s virtual ads.txt file', 'ad-inserter'), AD_INSERTER_NAME), '
'; echo '
'; if ($virtual_file_missing) { echo '
'; echo '
', __('Warning', 'ad-inserter'), ': ', /* translators: %s: Ad Inserter */ sprintf (__('%s virtual file ads.txt not found', 'ad-inserter'), AD_INSERTER_NAME), '
'; echo '
'; } break; default: echo '
'; if ($wp_folder != '') { echo '
', __('IMPORTANT', 'ad-inserter'), ': ', __('ads.txt file must be placed on the root domain', 'ad-inserter'), ' ', $ads_txt_url, '
'; echo '
'; } echo ''; echo ''; echo ''; echo '
WordPress', ABSPATH, '
', __('ads.txt file', 'ad-inserter'), '', $ads_txt_file, is_writable ($ads_txt_file) ? '' : ''.__('NOT WRITABLE', 'ad-inserter').'', '
'; echo '
'; if (!file_exists ($ads_txt_file)) { echo '
'; echo '
', __('Warning', 'ad-inserter'), ': ', sprintf (__('file %s not found', 'ad-inserter'), $ads_txt_file), '
'; echo '
'; } break; } // $missing_lines = array (); switch ($action) { case 'text': if (count ($missing_lines)) { echo '
', __('Account IDs found in blocks but not present in the ads.txt file', 'ad-inserter'), '
'; echo ''; if ($virtual) { // translators: %s: Ad Inserter echo '
', sprintf (__('%s virtual ads.txt file', 'ad-inserter'), AD_INSERTER_NAME), '
'; } else { echo '
', $ads_txt_file, '
'; } } echo ''; if (!$virtual) { delete_option (AI_ADS_TXT_NAME); } ai_add_rewrite_rules (); flush_rewrite_rules(); break; case 'table': ?> '.$ads_elements [3] .''; } else $element3 = $ads_elements [3]; } else $element3 = ''; ?>
>
96 || $command === null) { return; } $ai_options = false; if (function_exists ('ai_raw_remote_options')) { $ai_options = ai_raw_remote_options (); } if ($ai_options === false) $ai_options = ai_get_option (AI_OPTION_NAME, array ()); $update_settings = false; switch ($command) { case 'pause': $value = $block_object [$block]->get_disable_insertion () == AI_DISABLED ? AI_ENABLED : AI_DISABLED; $ai_options [$block][AI_OPTION_DISABLE_INSERTION] = $value; $update_settings = true; break; } if ($update_settings) { ai_save_options ($ai_options); } } } function ai_update_block_numbers ($blocks_org, $blocks_new) { global $wpdb; $ai_widgets = get_option ('widget_ai_widget'); if (is_array ($ai_widgets)) foreach ($ai_widgets as $widget_index => $ai_widget) { if (isset ($ai_widget ['block'])) { $widget_block = $ai_widget ['block']; if ($widget_block >= 1 && $widget_block <= 96) { foreach ($blocks_new as $index => $org_block) { if ($widget_block == $org_block) { $ai_widgets [$widget_index]['block'] = $blocks_org [$index]; break; } } } } } update_option ('widget_ai_widget', $ai_widgets); if (defined ('AI_STATISTICS') && AI_STATISTICS) { // Update statistics - two passes to avoid duplicate entries $offset = 1000; // Lock table to prevent updates of old blocks $query = 'LOCK TABLES ' . AI_STATISTICS_DB_TABLE . ' WRITE;'; $update = $wpdb->query ($query); // Pass 1 - new blocks with offset $query = 'UPDATE ' . AI_STATISTICS_DB_TABLE . ' SET block= CASE '; foreach ($blocks_new as $index => $org_block) { $new_block = $blocks_org [$index] + $offset; $query .= "WHEN block= $org_block THEN $new_block "; } $query .= 'ELSE block END;'; $update = $wpdb->query ($query); // Pass 2 - remove offset $query = 'UPDATE ' . AI_STATISTICS_DB_TABLE . " SET block = block - $offset WHERE block >= $offset;"; $update = $wpdb->query ($query); // Unlock table $query = 'UNLOCK TABLES;'; $update = $wpdb->query ($query); } } function code_block_list ($start, $end, $search_text, $show_all_blocks, $active_block) { global $block_object, $ai_db_options_extract; if (defined ('AI_SAFE_MODE') || isset ($_GET ['safe-mode'])) { $url_safe_mode = '&ai-safe-mode'; } else $url_safe_mode = ''; if (isset ($_GET ["cmd"])) { ai_change_settings (); } if (isset ($_GET ["blocks-org"]) && isset ($_GET ["blocks-new"])) { $blocks_org = json_decode ($_GET ["blocks-org"]); $blocks_new = json_decode ($_GET ["blocks-new"]); if (!empty ($blocks_org) && count ($blocks_org) == count ($blocks_new)) { // Update widgets $current_options = false; if (function_exists ('ai_raw_remote_options')) { $current_options = ai_raw_remote_options (); } if ($current_options === false) $current_options = ai_get_option (AI_OPTION_NAME, array ()); $new_options = $current_options; $error = false; foreach ($blocks_org as $index => $block) { $new_block = $blocks_new [$index]; if ($block >= 1 && $block <= 96 && $new_block >= 1 && $new_block <= 96) { if (isset ($current_options [$new_block])) { $new_options [$block] = $current_options [$new_block]; } else { unset ($new_options [$block]); } } else $error = true; } if (!$error) { // Update AI_OPTION_SCHEDULING_FALLBACK, AI_OPTION_LIMITS_FALLBACK and AI_OPTION_ADB_BLOCK_REPLACEMENT for ($block = 1; $block <= 96; $block ++) { if (isset ($new_options [$block][AI_OPTION_SCHEDULING_FALLBACK])) { $ai_option_fallback = $new_options [$block][AI_OPTION_SCHEDULING_FALLBACK]; if ($ai_option_fallback != '') foreach ($blocks_new as $index => $org_block) { if ($ai_option_fallback == $org_block) { $new_options [$block][AI_OPTION_SCHEDULING_FALLBACK] = $blocks_org [$index]; } } } if (isset ($new_options [$block][AI_OPTION_LIMITS_FALLBACK])) { $ai_option_fallback = $new_options [$block][AI_OPTION_LIMITS_FALLBACK]; if ($ai_option_fallback != '') foreach ($blocks_new as $index => $org_block) { if ($ai_option_fallback == $org_block) { $new_options [$block][AI_OPTION_LIMITS_FALLBACK] = $blocks_org [$index]; } } } if (isset ($new_options [$block][AI_OPTION_ADB_BLOCK_REPLACEMENT])) { $ai_option_adb_block_replacement = $new_options [$block][AI_OPTION_ADB_BLOCK_REPLACEMENT]; if ($ai_option_adb_block_replacement != '') foreach ($blocks_new as $index => $org_block) { if ($ai_option_adb_block_replacement == $org_block) { $new_options [$block][AI_OPTION_ADB_BLOCK_REPLACEMENT] = $blocks_org [$index]; } } } } ai_save_options ($new_options, null, $blocks_org, $blocks_new); } } } $sidebars_with_widget = get_sidebar_widgets (); ob_start (); if ($search_text != '') $search_array = explode (' ', $search_text); else $search_array = array (); $blocks = array (); $row_counter = 0; for ($block = 1; $block <= 96; $block ++) { $obj = $block_object [$block]; $automatic_insertion = $obj->get_automatic_insertion () != AI_AUTOMATIC_INSERTION_DISABLED; $manual_widget = $obj->get_enable_widget() == AI_ENABLED; $manual_shortcode = $obj->get_enable_manual() == AI_ENABLED; $manual_php_function = $obj->get_enable_php_call() == AI_ENABLED; $disabled = $obj->get_disable_insertion (); $block_used = /*!$disabled &&*/ ($automatic_insertion || $manual_php_function || $manual_shortcode || $manual_widget && !empty ($sidebars_with_widget [$block])); if (!$show_all_blocks && !$block_used) continue; $process_php = $obj->get_process_php (); $exceptions = $obj->get_exceptions_enabled (); $devices = $obj->get_detection_server_side () || $obj->get_detection_client_side (); $scheduling = $obj->get_scheduling() != AI_SCHEDULING_OFF; $scheduling_period = ''; switch ($obj->get_scheduling ()) { case AI_SCHEDULING_BETWEEN_DATES: case AI_SCHEDULING_OUTSIDE_DATES: $scheduling_period_inactive = !check_scheduling_time ( $obj->get_schedule_start_date () . ' ' . $obj->get_schedule_start_time (), $obj->get_schedule_end_date () . ' ' . $obj->get_schedule_end_time (), $obj->get_schedule_weekdays (), $obj->get_scheduling () == AI_SCHEDULING_BETWEEN_DATES ); $scheduling_period = $obj->get_schedule_start_date () . ($obj->get_schedule_start_time () != '' ? ' ' . $obj->get_schedule_start_time () : ''). '[BR]' . $obj->get_schedule_end_date () . ($obj->get_schedule_end_time () != '' ? ' ' . $obj->get_schedule_end_time () : ''); break; default: $scheduling_period_inactive = false; break; } $tracking = $obj->get_tracking (true); if (ai_pro ()) { $limits = $tracking && ( $obj->get_max_impressions () || ($obj->get_limit_impressions_per_time_period () && $obj->get_limit_impressions_time_period ()) || $obj->get_max_clicks () || ($obj->get_limit_clicks_per_time_period () && $obj->get_limit_clicks_time_period ()) || $obj->get_visitor_max_impressions () || ($obj->get_visitor_limit_impressions_per_time_period () && $obj->get_visitor_limit_impressions_time_period ()) || $obj->get_visitor_max_clicks () || ($obj->get_visitor_limit_clicks_per_time_period () && $obj->get_visitor_limit_clicks_time_period ()) || $obj->get_trigger_click_fraud_protection () && get_click_fraud_protection () ); } $block_text = $block . ' '. $obj->get_ad_name () . ' ' . $obj->get_automatic_insertion_text() . ' ' . implode (', ', $sidebars_with_widget [$block]); if ($process_php) $block_text .= ' php'; if ($exceptions) $block_text .= ' exceptions'; if ($devices) $block_text .= ' device'; if ($scheduling) $block_text .= ' scheduling'; if (ai_pro ()) { if ($limits) $block_text .= ' limits'; } if ($tracking) $block_text .= ' tracking'; if (!empty ($sidebars_with_widget [$block])) $block_text .= ' widget'; if ($manual_shortcode) $block_text .= ' shortcode'; if ($manual_php_function) $block_text .= ' function'; foreach ($search_array as $search_item) { if (stripos ($block_text, trim ($search_item)) === false) continue 2; } $blocks []= $block; $row_counter ++; $row_class = $row_counter % 2 == 0 ? 'even' : 'odd'; if ($block == $active_block) { $row_class .= ' ai-block-active'; } $settings_page = get_menu_position () == AI_SETTINGS_SUBMENU ? 'options-general.php?page=ad-inserter.php' : 'admin.php?page=ad-inserter.php'; $edit_url = admin_url ($settings_page) . '&start=' . (intval (($block - 1) / 16) * 16 + 1) . '&tab=' . $block . $url_safe_mode; $visible_tab = $block >= $start && $block <= $end; $insertion_parameter = ''; $insertion_title = ''; switch ($obj->get_automatic_insertion()) { case AI_AUTOMATIC_INSERTION_BEFORE_PARAGRAPH: case AI_AUTOMATIC_INSERTION_AFTER_PARAGRAPH: case AI_AUTOMATIC_INSERTION_BEFORE_IMAGE: case AI_AUTOMATIC_INSERTION_AFTER_IMAGE: $insertion_parameter = ' ' . $obj->get_paragraph_number (); $insertion_title = $obj->get_paragraph_number (); break; case AI_AUTOMATIC_INSERTION_BEFORE_EXCERPT: case AI_AUTOMATIC_INSERTION_AFTER_EXCERPT: case AI_AUTOMATIC_INSERTION_BETWEEN_POSTS: case AI_AUTOMATIC_INSERTION_BETWEEN_COMMENTS: $insertion_parameter = ' ' . $obj->get_call_filter (); $insertion_title = $obj->get_call_filter (); break; case AI_AUTOMATIC_INSERTION_BEFORE_HTML_ELEMENT: case AI_AUTOMATIC_INSERTION_AFTER_HTML_ELEMENT: case AI_AUTOMATIC_INSERTION_INSIDE_HTML_ELEMENT: $insertion_title = $obj->get_html_selector (); break; } ?> get_ad_name(); ?> get_ad_name(); ?> get_automatic_insertion_text(), $insertion_parameter; ?> fn [s] w
fn [s] W
", __ ('No active block', 'ad-inserter'), ""; else echo "
", __ ('No block matches search keywords', 'ad-inserter'), "
"; } } if (defined ('AI_ADSENSE_API')) { function ai_adsense_data (&$error) { require_once AD_INSERTER_PLUGIN_DIR.'includes/adsense-api.php'; $error = 'AdSense not authorized'; $ad_data = false; if (defined ('AI_ADSENSE_AUTHORIZATION_CODE')) { $error = ''; $update_ad_units = isset ($_GET ["update_ad_units"]) ? $_GET ["update_ad_units"] == 1 : false; $adsense = new adsense_api (); $ad_data = get_transient (AI_TRANSIENT_ADSENSE_ADS); if ($ad_data === false || $update_ad_units) { $ad_units = $adsense->getAdUnits(); $error = $adsense->getError (); if ($error == '' && is_array ($ad_units)) { $ad_data = array ($adsense->getAdSensePublisherID (), $ad_units); set_transient (AI_TRANSIENT_ADSENSE_ADS, $ad_data, AI_TRANSIENT_ADSENSE_ADS_EXPIRATION); } } } return $ad_data; } function adsense_list () { require_once AD_INSERTER_PLUGIN_DIR.'includes/adsense-api.php'; if (defined ('AI_ADSENSE_AUTHORIZATION_CODE')) { if (get_transient (AI_TRANSIENT_ADSENSE_TOKEN_1) !== false) { // Old token for API version 1 $error = 'unauthorized_client_2'; } else { $publisher_id = ''; $ad_units = array (); $error = ''; $ad_data = ai_adsense_data ($error); } if ($error == '') { $publisher_id = $ad_data [0]; $ad_units = $ad_data [1]; $show_all_ad_units = isset ($_GET ["all"]) && $_GET ["all"]; ?>
$error"; if (strpos ($error, 'unauthorized_client') !== false) { echo '
', // translators: %s: HTML tags sprintf (__('Please %s clear authorization %s with the button %s above and once again authorize access to your AdSense account.', 'ad-inserter'), '', '', '' ), '
'; } } } elseif (defined ('AI_ADSENSE_CLIENT_ID')) { $adsense = new adsense_api(); $adsense_ids = defined ('AI_CI_STRING') && get_option (AI_ADSENSE_OWN_IDS) === false; ?>

', '', '', '' ); ?>

'.AD_INSERTER_NAME.'', AD_INSERTER_NAME ); ?>

  1. ', ''); ?>
  2. Ad Inserter', '', ''); ?>
  3. ', ''); ?>
  4. Ad Inserter', '', ''); ?>
  5. Ad Inserter'); ?>
  6. ', ''); ?>
  7. AdSense Management API'); ?>
  8. ', ''); ?>
  9. ', '', '', ''); ?>
  10. ', '', '', ''); ?>
  11. ', '', '', ''); ?>
  12. ', ''); ?>
  13. ', '', '', ''); ?>
  14. ', '', '', '', '', ''); ?>
  15. ', '', 'Ad Inserter', '', ''); ?>
  16. ', '', '', ''); ?>
  17. ', '', '', ''); ?>
  18. ', '', '', ''); ?>
  19. ', '', '', '', '', ''); ?>
  20. ', '', '', ''); ?>
  21. ', '', '', '', '', ''); ?>
   
getAdCode ($ad_slot_id); echo json_encode (array ('code' => $code, 'error-message' => $adsense->getError ())); } } } function adsense_ad_name () { if (defined ('AI_ADSENSE_API')) { $publisher_id = ''; $ad_units = array (); $error = ''; $ad_data = ai_adsense_data ($error); if ($error == '') { $publisher_id = $ad_data [0]; $ad_units = $ad_data [1]; $ad_slot_names = array ('publisher_id' => $publisher_id); foreach ($ad_units as $ad_unit) { if ($ad_unit ['active']) $ad_slot_names [$ad_unit ['code']] = $ad_unit ['name']; } echo json_encode ($ad_slot_names); } } } function generate_list_options ($options) { switch ($options) { case 'category': $category_data = ai_get_category_list (); foreach ($category_data as $category) { echo " \n"; $category_to_check = get_term_by ('slug', $category->slug, 'category'); if ($category_to_check) { $descendants = get_term_children ($category_to_check->term_id, 'category'); if ($descendants) { // Translators: %s: category name echo " \n"; // Translators: %s: category name echo " \n"; } } } break; case 'tag': $tag_data = ai_get_tag_list (); foreach ($tag_data as $tag) { echo " \n"; } break; case 'taxonomy': $taxonomies = ai_get_taxonomy_list (); foreach ($taxonomies as $taxonomy => $taxonomy_name) { if ($taxonomy_name != '') echo " \n"; else echo " \n"; } break; case 'id': $posts_pages = ai_get_post_id_list (); $counter = 0; foreach ($posts_pages as $post_page) { if ($post_page->post_title == '') continue; echo " \n"; $counter ++; if ($counter >= AI_MAX_LIST_ITEMS) break; } echo " \n"; echo " \n"; break; case 'client': $languages = array ( 'af' => 'Afrikaans', 'sq' => 'Albanian', 'an' => 'Aragonese', 'ar*' => 'Arabic (Standard)', 'ar-dz' => 'Arabic (Algeria)', 'ar-bh' => 'Arabic (Bahrain)', 'ar-eg' => 'Arabic (Egypt)', 'ar-iq' => 'Arabic (Iraq)', 'ar-jo' => 'Arabic (Jordan)', 'ar-kw' => 'Arabic (Kuwait)', 'ar-lb' => 'Arabic (Lebanon)', 'ar-ly' => 'Arabic (Libya)', 'ar-ma' => 'Arabic (Morocco)', 'ar-om' => 'Arabic (Oman)', 'ar-qa' => 'Arabic (Qatar)', 'ar-sa' => 'Arabic (Saudi Arabia)', 'ar-sy' => 'Arabic (Syria)', 'ar-tn' => 'Arabic (Tunisia)', 'ar-ae' => 'Arabic (U.A.E.)', 'ar-ye' => 'Arabic (Yemen)', 'hy' => 'Armenian', 'as' => 'Assamese', 'ast' => 'Asturian', 'az' => 'Azerbaijani', 'eu' => 'Basque', 'bg' => 'Bulgarian', 'be' => 'Belarusian', 'bn' => 'Bengali', 'bs' => 'Bosnian', 'br' => 'Breton', 'my' => 'Burmese', 'ca' => 'Catalan', 'ch' => 'Chamorro', 'ce' => 'Chechen', 'zh*' => 'Chinese', 'zh-hk' => 'Chinese (Hong Kong)', 'zh-cn' => 'Chinese (PRC)', 'zh-sg' => 'Chinese (Singapore)', 'zh-tw' => 'Chinese (Taiwan)', 'cv' => 'Chuvash', 'co' => 'Corsican', 'cr' => 'Cree', 'hr' => 'Croatian', 'cs' => 'Czech', 'da' => 'Danish', 'nl*' => 'Dutch (Standard)', 'nl-be' => 'Dutch (Belgian)', 'en*' => 'English', 'en-au' => 'English (Australia)', 'en-bz' => 'English (Belize)', 'en-ca' => 'English (Canada)', 'en-ie' => 'English (Ireland)', 'en-jm' => 'English (Jamaica)', 'en-nz' => 'English (New Zealand)', 'en-ph' => 'English (Philippines)', 'en-za' => 'English (South Africa)', 'en-tt' => 'English (Trinidad & Tobago)', 'en-gb' => 'English (United Kingdom)', 'en-us' => 'English (United States)', 'en-zw' => 'English (Zimbabwe)', 'eo' => 'Esperanto', 'et' => 'Estonian', 'fo' => 'Faeroese', 'fa' => 'Persian', 'fj' => 'Fijian', 'fi' => 'Finnish', 'fr*' => 'French (Standard)', 'fr-be' => 'French (Belgium)', 'fr-ca' => 'French (Canada)', 'fr-fr' => 'French (France)', 'fr-lu' => 'French (Luxembourg)', 'fr-mc' => 'French (Monaco)', 'fr-ch' => 'French (Switzerland)', 'fy' => 'Frisian', 'fur' => 'Friulian', 'gd*' => 'Scots Gaelic', 'gd-ie' => 'Gaelic (Irish)', 'gl' => 'Galacian', 'ka' => 'Georgian', 'de*' => 'German (Standard)', 'de-at' => 'German (Austria)', 'de-de' => 'German (Germany)', 'de-li' => 'German (Liechtenstein)', 'de-lu' => 'German (Luxembourg)', 'de-ch' => 'German (Switzerland)', 'el' => 'Greek', 'gu' => 'Gujurati', 'ht' => 'Haitian', 'he' => 'Hebrew', 'hi' => 'Hindi', 'hu' => 'Hungarian', 'is' => 'Icelandic', 'id' => 'Indonesian', 'iu' => 'Inuktitut', 'ga' => 'Irish', 'it*' => 'Italian (Standard)', 'it-ch' => 'Italian (Switzerland)', 'ja' => 'Japanese', 'kn' => 'Kannada', 'ks' => 'Kashmiri', 'kk' => 'Kazakh', 'km' => 'Khmer', 'ky' => 'Kirghiz', 'tlh' => 'Klingon', 'ko*' => 'Korean', 'ko-kp' => 'Korean (North Korea)', 'ko-kr' => 'Korean (South Korea)', 'la' => 'Latin', 'lv' => 'Latvian', 'lt' => 'Lithuanian', 'lb' => 'Luxembourgish', 'mk' => 'FYRO Macedonian', 'ms' => 'Malay', 'ml' => 'Malayalam', 'mt' => 'Maltese', 'mi' => 'Maori', 'mr' => 'Marathi', 'mo' => 'Moldavian', 'nv' => 'Navajo', 'ng' => 'Ndonga', 'ne' => 'Nepali', 'no' => 'Norwegian', 'nb' => 'Norwegian (Bokmal)', 'nn' => 'Norwegian (Nynorsk)', 'oc' => 'Occitan', 'or' => 'Oriya', 'om' => 'Oromo', 'fa-ir' => 'Persian/Iran', 'pl' => 'Polish', 'pt*' => 'Portuguese', 'pt-br' => 'Portuguese (Brazil)', 'pa*' => 'Punjabi', 'pa-in' => 'Punjabi (India)', 'pa-pk' => 'Punjabi (Pakistan)', 'qu' => 'Quechua', 'rm' => 'Rhaeto-Romanic', 'ro*' => 'Romanian', 'ro-mo' => 'Romanian (Moldavia)', 'ru*' => 'Russian', 'ru-mo' => 'Russian (Moldavia)', 'sz' => 'Sami (Lappish)', 'sg' => 'Sango', 'sa' => 'Sanskrit', 'sc' => 'Sardinian', 'sd' => 'Sindhi', 'si' => 'Singhalese', 'sr' => 'Serbian', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'so' => 'Somani', 'sb' => 'Sorbian', 'es*' => 'Spanish', 'es-ar' => 'Spanish (Argentina)', 'es-bo' => 'Spanish (Bolivia)', 'es-cl' => 'Spanish (Chile)', 'es-co' => 'Spanish (Colombia)', 'es-cr' => 'Spanish (Costa Rica)', 'es-do' => 'Spanish (Dominican Republic)', 'es-ec' => 'Spanish (Ecuador)', 'es-sv' => 'Spanish (El Salvador)', 'es-gt' => 'Spanish (Guatemala)', 'es-hn' => 'Spanish (Honduras)', 'es-mx' => 'Spanish (Mexico)', 'es-ni' => 'Spanish (Nicaragua)', 'es-pa' => 'Spanish (Panama)', 'es-py' => 'Spanish (Paraguay)', 'es-pe' => 'Spanish (Peru)', 'es-pr' => 'Spanish (Puerto Rico)', 'es-es' => 'Spanish (Spain)', 'es-uy' => 'Spanish (Uruguay)', 'es-ve' => 'Spanish (Venezuela)', 'sx' => 'Sutu', 'sw' => 'Swahili', 'sv*' => 'Swedish', 'sv-fi' => 'Swedish (Finland)', 'sv-sv' => 'Swedish (Sweden)', 'ta' => 'Tamil', 'tt' => 'Tatar', 'te' => 'Teluga', 'th' => 'Thai', 'tig' => 'Tigre', 'ts' => 'Tsonga', 'tn' => 'Tswana', 'tr' => 'Turkish', 'tk' => 'Turkmen', 'uk' => 'Ukrainian', 'hsb' => 'Upper Sorbian', 'ur' => 'Urdu', 've' => 'Venda', 'vi' => 'Vietnamese', 'vo' => 'Volapuk', 'wa' => 'Walloon', 'cy' => 'Welsh', 'xh' => 'Xhosa', 'ji' => 'Yiddish', 'zu' => 'Zulu', ); $clients = array (); if (version_compare (phpversion (), "5.6", ">=")) { require_once AD_INSERTER_PLUGIN_DIR.'includes/agent/Agent.php'; $agent = new Agent(); $clients = array_merge ( array_keys ($agent->getOperatingSystems ()), array_keys ($agent->getBrowsers ()), array_keys ($agent->getPhoneDevices ()), array_keys ($agent->getTabletDevices ()), array_keys ($agent->getUtilities ()) ); foreach ($clients as $client) { echo " \n"; } } else { } foreach ($languages as $language_id => $language) { echo " \n"; } $clients = array_merge ( $clients, $languages ); break; default: if (function_exists ('ai_generate_list_options')) ai_generate_list_options ($options); break; } } function ai_get_posts_pages_with_exceptions () { $args = array ( 'public' => true, '_builtin' => false ); $custom_post_types = get_post_types ($args, 'names', 'and'); $screens = array_values (array_merge (array ('post', 'page'), $custom_post_types)); $args = array ( 'posts_per_page' => AI_LIST_EXCEPTIONS_LIMIT, 'offset' => 0, 'category' => '', 'category_name' => '', 'orderby' => 'type', 'order' => 'ASC', 'include' => '', 'exclude' => '', 'meta_query' => array ( array ( 'key' => '_adinserter_block_exceptions', 'value' => '', 'compare' => '!=' ) ), 'post_type' => $screens, 'post_mime_type' => '', 'post_parent' => '', 'author' => '', 'author_name' => '', 'post_status' => '', 'suppress_filters' => true ); return (get_posts ($args)); } function ai_get_exceptions ($conditions) { if (function_exists ('ai_get_exceptions_2')) { $exceptions = ai_get_exceptions_2 (); if (is_array ($exceptions)) return $exceptions; } $exceptions = false; $block_exceptions = array (); if ($conditions) { $posts_pages = ai_get_posts_pages_with_exceptions (); $exceptions = array (); foreach ($posts_pages as $page) { $post_meta = get_post_meta ($page->ID, '_adinserter_block_exceptions', true); if ($post_meta == '') continue; $post_type_object = get_post_type_object ($page->post_type); $exceptions [$page->ID] = array ('type' => $page->post_type, 'name' => $post_type_object->labels->singular_name, 'title' => $page->post_title, 'blocks' => $post_meta); $selected_blocks = explode (",", $post_meta); foreach ($selected_blocks as $selected_block) { $block_exceptions [$selected_block][$page->ID] = array ('type' => $page->post_type, 'name' => $post_type_object->labels->singular_name, 'title' => $page->post_title); } } } return array ($exceptions, $block_exceptions); } function ai_clear_exceptions () { $clear = $_POST [AI_FORM_CLEAR_EXCEPTIONS]; $posts_pages = ai_get_posts_pages_with_exceptions (); // All exceptions if ($clear == "\xe2\x9d\x8c") { foreach ($posts_pages as $page) { delete_post_meta ($page->ID, '_adinserter_block_exceptions'); } } // Exceptions for post id elseif (strpos ($clear, 'id=') === 0) { $id = str_replace ('id=', '', $clear); if (is_numeric ($id)) { delete_post_meta ($id, '_adinserter_block_exceptions'); } } // Block exceptions elseif (is_numeric ($clear)) { foreach ($posts_pages as $page) { $post_meta = get_post_meta ($page->ID, '_adinserter_block_exceptions', true); $selected_blocks = explode (",", $post_meta); if (($key = array_search ($clear, $selected_blocks)) !== false) { unset ($selected_blocks [$key]); update_post_meta ($page->ID, '_adinserter_block_exceptions', implode (",", $selected_blocks)); } } } } function ai_clear_settings () { global $ai_db_options, $block_object, $wpdb, $ai_db_options_extract; if (defined ('AI_CONNECTED_MANAGER')) { $connected_manager = get_transient (AI_CONNECTED_MANAGER); } else $connected_manager = false; for ($block = 1; $block <= 96; $block ++) { delete_option (str_replace ("#", $block, AD_ADx_OPTIONS)); } $saved_management_key = isset ($ai_db_options [AI_OPTION_GLOBAL]['MANAGEMENT_KEY']) ? $ai_db_options [AI_OPTION_GLOBAL]['MANAGEMENT_KEY'] : ''; delete_option (str_replace ("#", "Header", AD_ADx_OPTIONS)); delete_option (str_replace ("#", "Footer", AD_ADx_OPTIONS)); delete_option (AD_OPTIONS); delete_option (AI_OPTION_NAME); delete_option (AI_EXTRACT_NAME); delete_option (AI_FLAGS_NAME); if (is_multisite () && is_main_site ()) { delete_site_option (AI_OPTION_NAME); } delete_option (AI_ADSENSE_CLIENT_IDS); delete_option (AI_ADSENSE_AUTH_CODE); delete_option (AI_ADSENSE_OWN_IDS); delete_option (AI_ADS_TXT_NAME); delete_transient (AI_TRANSIENT_ADSENSE_TOKEN_1); delete_transient (AI_TRANSIENT_ADSENSE_TOKEN); delete_transient (AI_TRANSIENT_ADSENSE_ADS); delete_transient ('ai-close'); if (function_exists ('ai_load_globals')) { delete_option (WP_AD_INSERTER_PRO_LICENSE); if ($connected_manager === false) { delete_option (WP_AD_INSERTER_PRO_KEY); } delete_option (WP_AD_INSERTER_PRO_CLIENT); $wpdb->query ("DROP TABLE IF EXISTS " . AI_STATISTICS_DB_TABLE); if (defined ('AI_CONNECTED_WEBSITE')) { delete_transient (AI_CONNECTED_WEBSITE); delete_option (AI_WEBSITES); } delete_transient (AI_TRANSIENT_ADB_CLASS_1); delete_transient (AI_TRANSIENT_ADB_CLASS_2); delete_transient (AI_TRANSIENT_ADB_CLASS_3); delete_transient (AI_TRANSIENT_ADB_CLASS_4); delete_transient (AI_TRANSIENT_ADB_CLASS_5); delete_transient (AI_TRANSIENT_ADB_CLASS_6); delete_transient (AI_TRANSIENT_ADB_FILES_VERSION); } // if (/*ai_current_user_role_ok () && */(!is_multisite() || is_main_site () || multisite_exceptions_enabled ())) { $posts_pages = ai_get_posts_pages_with_exceptions (); foreach ($posts_pages as $page) { delete_post_meta ($page->ID, '_adinserter_block_exceptions'); } // } ai_load_settings (); $options = $ai_db_options; $options [AI_OPTION_EXTRACT] = ai_generate_extract ($options); $ai_db_options_extract = $options [AI_OPTION_EXTRACT]; $options [AI_OPTION_GLOBAL]['VIEWPORT_CSS'] = generate_viewport_css (); $options [AI_OPTION_GLOBAL]['ALIGNMENT_CSS'] = generate_alignment_css (); $options [AI_OPTION_GLOBAL]['TIMESTAMP'] = time (); if ($connected_manager !== false) { $options [AI_OPTION_GLOBAL]['REMOTE_DEBUGGING'] = AI_ENABLED; $options [AI_OPTION_GLOBAL]['REMOTE_MANAGEMENT'] = AI_ENABLED; $options [AI_OPTION_GLOBAL]['MANAGEMENT_KEY'] = $saved_management_key; } ai_update_option (AI_OPTION_NAME, $options); update_option (AI_EXTRACT_NAME, $ai_db_options_extract); ai_load_settings (); if (function_exists ('ai_load_globals')) ai_load_globals (); } function ai_clear_statistics () { global $wpdb; if (isset ($_POST [AI_FORM_CLEAR_STATISTICS]) &&is_numeric ($_POST [AI_FORM_CLEAR_STATISTICS])) { if ($_POST [AI_FORM_CLEAR_STATISTICS] != 0) { $wpdb->query ("DELETE FROM " . AI_STATISTICS_DB_TABLE . " WHERE block = " . ((int) $_POST [AI_FORM_CLEAR_STATISTICS])); } else $wpdb->query ("DROP TABLE IF EXISTS " . AI_STATISTICS_DB_TABLE); } } function ai_check_page () { $download_urls = array (); // echo '["1","2","3","4"]'; // return; switch ($_GET ["check-page"]) { case 'po': case 'pa': $args = array ( 'public' => true, '_builtin' => false ); $custom_post_types = get_post_types ($args, 'names', 'and'); $screens = array_values (array_merge (array ($_GET ["check-page"] == 'po' ? 'post' : 'page'), $custom_post_types)); $args = array ( 'posts_per_page' => 1, 'offset' => 0, 'category' => '', 'category_name' => '', 'orderby' => 'ID', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' => '', 'post_type' => $screens, 'post_mime_type' => '', 'post_parent' => '', 'author' => '', 'author_name' => '', 'post_status' => '', 'suppress_filters' => true, ); $posts_pages = get_posts ($args); if (isset ($posts_pages [0])) { $download_urls []= get_permalink ($posts_pages [0]->ID); } // Check also post/page with comments $args = array ('post_type' => $_GET ["check-page"] == 'po' ? 'post' : 'page', 'number' => 1); $comment_data = get_comments ($args); if (isset ($comment_data [0])) { $download_urls []= get_permalink ($comment_data [0]->comment_post_ID); } break; case 'hp': $download_urls []= home_url () . '/'; break; case 'cp': $args = array ('hide_empty' => 0, 'orderby' => 'count', 'order' => 'DESC', 'number' => 1); $category_data = get_categories ($args); if (isset ($category_data [0])) { $download_urls []= get_category_link ($category_data [0]->cat_ID) . '/'; } break; case 'ap': $args = array ('hide_empty' => 0, 'orderby' => 'count', 'order' => 'DESC', 'number' => 1); $tag_data = get_tags ($args); if (isset ($tag_data [0])) { $download_urls []= get_tag_link ($tag_data [0]->term_taxonomy_id) . '/'; } break; case 'sp': $download_urls []= home_url () . '/?s=a'; break; } if (!empty ($download_urls)) { $positions = array (); $secret_key = ai_secret_key (); foreach ($download_urls as $download_url) { $tmp_file = download_url (add_query_arg (array (AI_URL_DEBUG_POSITIONS => '0', 'ai-secret' => $secret_key), $download_url)); if (!is_wp_error ($tmp_file) && file_exists ($tmp_file)) { $page = file_get_contents ($tmp_file); preg_match_all ('#data-ai-position=[\'\"](.+?)[\'\"]#', $page, $matches); foreach (array_unique ($matches [1]) as $position) { $positions [] = (int) $position; } } else { // @unlink ($tmp_file); $error_string = $tmp_file->get_error_message(); echo $error_string; return; } @unlink ($tmp_file); } switch ($_GET ["check-page"]) { case 'po': case 'pa': if (in_array (AI_AUTOMATIC_INSERTION_BEFORE_CONTENT, $positions) && in_array (AI_AUTOMATIC_INSERTION_AFTER_CONTENT, $positions)) { $positions [] = AI_AUTOMATIC_INSERTION_BEFORE_PARAGRAPH; $positions [] = AI_AUTOMATIC_INSERTION_AFTER_PARAGRAPH; $positions [] = AI_AUTOMATIC_INSERTION_BEFORE_IMAGE; $positions [] = AI_AUTOMATIC_INSERTION_AFTER_IMAGE; } if (in_array (AI_AUTOMATIC_INSERTION_BEFORE_COMMENTS, $positions) && in_array (AI_AUTOMATIC_INSERTION_AFTER_COMMENTS, $positions)) { $positions [] = AI_AUTOMATIC_INSERTION_BETWEEN_COMMENTS; } break; } $positions = array_unique ($positions); sort ($positions); foreach ($download_urls as $index => $download_url) { $download_urls [$index] = add_query_arg (array (AI_URL_DEBUG_POSITIONS => '0', 'no-cookie' => '1'), $download_url); } echo json_encode (array ('positions' => $positions, 'urls' => $download_urls)); } } function sidebar_addense_alternative () { ?>


Ad Inserter', '', '', ' ' ); ?>

<?php _e ('Ad Inserter on Twitter', 'ad-inserter'); ?> <?php _e ('Ad Inserter on Facebook', 'ad-inserter'); ?>

', '', '', '', '', '', '', '' ); ?>
', '', '', '', '', '', '', '', '', '', '', '' ); ?>

', '' ); ?> happy

', '' ); ?>
', '' ); ?>

20 EUR'); ?>

  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', '', '', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', '', '<body>', '</body>'); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>

one year of free updates and support via email. If you find Ad Inserter useful and need ad statistics for impressions and clicks, A/B testing, sticky ads, slider ads, pop-up ads, geotargeting or geolocation to serve country-specific ads, to protect content or to serve different ads for users using ad blockers, multisite options to limit settings for ads, to block some IP addresses, to schedule ads, then you can simply upgrade to %s Ad Inserter Pro %s (existing settings will be preserved).', 'ad-inserter'), '', ''); ?>

', ''); ?>


  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
  • ', ''); ?>
generate_alignment_class ($block_class_name); if ($block_class_name != '' && $block_number_class) $classes []= $block_class_name . '-n'; if ($block_class_name != '' && $block_name_class) $classes []= $block_class_name . '-name'; $class = count ($classes) ? ' class="' . implode (' ', $classes) . '"' : ''; $style = $inline_styles || !defined ('AI_NORMAL_HEADER_STYLES') ? ' style="' . AI_ALIGNMENT_CSS_DEFAULT . '"' : ''; echo "<div$class$style>"; } PK!SQqQq changelog.txtnu[= Changelog archive = This is an archive of older changelog entries. Most recent entries are maintained in readme.txt = 2.6.27 = - Added support for scheduled rotation - Few minor bug fixes, cosmetic changes and code improvements = 2.6.26 = - Few bug fixes (Pro only) = 2.6.25 = - Added support for block names in adinserter shortcode block attributes - Added support for default custom field values - Added support to list post ID range - Improved ad blocking detection - Reduced layout shift when using CHECK shortcodes - Fix for expanded shortcodes in the rotate code generator - Few minor bug fixes, cosmetic changes and code improvements = 2.6.24 = - Added support for consent attribute for code generator for AdSense and Amazon AMP ads - Added support for random number shortcode - Added support for && and !! operators in client-side client list checks - Added scheduling time on blocks list (Pro only) - Improved undismissible message when ad blocking is detected - Few minor bug fixes, cosmetic changes and code improvements = 2.6.23 = - Reduced layout shift when using lists and client-side dynamic blocks - Few minor bug fixes, cosmetic changes and code improvements = 2.6.22 = - Various security fixes - Updated AdSense API authorization process - Reduced layout shift when using client-side device detection - Added option to block IP addresses for click fraud protection (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.6.21 = - Improved compatibility with PHP 8 - Few minor bug fixes, cosmetic changes and code improvements = 2.6.20 = - Added support for alt text and lazy loading for banner code generator - Few minor bug fixes, cosmetic changes and code improvements = 2.6.19 = - Improved code to reduce layout shift when using client-side device detection - Added translation for es_ES - Added translation for fr_FR - Added translation for it_IT - Improved compatibility with PHP 8 - Few minor bug fixes, cosmetic changes and code improvements = 2.6.18 = - Added support to change Dynamic blocks setting for adinserter PHP function call - Few minor bug fixes, cosmetic changes and code improvements = 2.6.17 = - Fix for double client-side insertions when using geolocation (Pro only) = 2.6.16 = - Added support for ad blocking detection action every n pageviews - Added support to individually disable pageview or click tracking (Pro only) - Changed IAB TCF v2 cookie check name from euconsent-v2 to tcf-v2 (euconsent-v2 will still work) - Fix for category check on category pages - Fix for issues with Safari browser - Few minor bug fixes, cosmetic changes and code improvements = 2.6.15 = - No ad blocking detection actions for crawlers and bots - Fix for processing Ad Inserter shortcodes inside HTML tags - Few minor bug fixes, cosmetic changes and code improvements = 2.6.14 = - Added support to insert [embed] shortcodes - Few minor bug fixes, cosmetic changes and code improvements = 2.6.13 = - Few minor bug fixes = 2.6.12 = - Improved ad blocking detection - Added options to delay client-side insertions at HTML element - Added support to check for multiple cookie values (needed for IAB TCF 2.0) - Added filter hooks for block processing - Few minor bug fixes, cosmetic changes and code improvements = 2.6.11 = - Added support for IAB Transparency & Consent Framework 2.0 - Added support for taxonomy for primary category - Added support for taxonomy for post meta data - Added support to invert contain/do not contain text condition for paragraph counting - Few minor bug fixes, cosmetic changes and code improvements = 2.6.10 = - Added user taxonomy items for logged-in and not logged-in users - Added option to define tab setup delay (for the plugin settings page) - Added option to insert unique ad rotation options when block is inserted more than once - Added support for client-side device detection for AMP pages (for method Show) - Added support for code generator for Amazon AMP ads - Added support for custom tracking events (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.6.9 = - Added option for paragraph counting to search only tag attributes for text - Added option to embed block Javascript code (to be loaded with Ajax calls) - Added support to prevent duplicate insertions when the_content filter is called more than once (experimental) - Added support for the client list to check for partial user agent strings - Added support for check of cookie object properties - Improved ad blocking detection - Viewports no longer need to be in descending width order - Added option to protect inserted block content (Pro only) - Added support for adb scripts path filter hook (Pro only) - Added support to export statistics data to CSV file (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.6.8 = - Added support to disable PHP processing by PHP constant - Added support to repeat COUNT options - Added support for offset for %n paragraph number (%n@o) - Added support for options to skip insertion for first and last paragraphs - Added support for hook filter 'ai_block_insertion_check' - Added support for background ads (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.6.7 = - Added support for various shortcodes for post categories - Added support for various shortcodes for post tags - Added support for user action on click (Pro only) - Added support for manual loading (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.6.6 = - Fix for exceptions list not showing all exceptions - Improved ad blocking detection - Fix for close button in preview window (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.6.5 = - Added support for url data shortcode - Added warning if not all exceptions were cleared - Added support for MaxMind country only database (Pro only) - Added support for ip to country lookup filter hook (Pro only) - Fix for country groups in CHECK separators (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.6.4 = - Fix for use of undefined constant warning (Pro only) = 2.6.3 = - Added support for shortcodes to disable block insertion - Added support for child taxonomy list items - Added random parameter to Ajax requests for geolocation (Pro only) - Added options to define external tracking event category, action and label (Pro only) - Number of custom hooks increased to 20 - Fix to prevent insertion into head section when using Rank Math plugin - Few minor bug fixes, cosmetic changes and code improvements = 2.6.2 = - Added support to disable caching of block PHP code - Added support to pause blocks on the blocks list - Added support for no url parameters list item - Added support for client-side scheduling (Pro only) - Added support for server-side scheduling using W3TC (Pro only) - Added support for multisite:site-id taxonomy list item (Pro only) - Updated MaxMind GeoLite2 database download using license key (Pro only) - Changed settings format in the database to prevent export/import issues with MySQL/PhpMyAdmin - Fix for [ADINSERTER counter] shortcode not expanding inside HTML tags - Few minor bug fixes, cosmetic changes and code improvements = 2.6.1 = - Fix for errors on the settings page - Fix for non English characters in ads - Fix for sticky widgets - Few minor bug fixes = 2.6.0 = - Added support for VIEWPORT separator - Added support for viewport check in CHECK separators (Pro only) - Added support to show processing log on front-end - Added support to show link to the Ad Inserter Pro settings page on multisite Sites page (Pro only) - Added support to detect and prevent document.write after DOM is ready - Added support for scheduling hours (Pro only) - Added support for scheduling days in week (Pro only) - Added support for W3TC insertion debugging info - Improved Javascript code for client-side functions - Improved ad blocking detection - Default value for Wait for jQuery set to Enabled - Few minor bug fixes, cosmetic changes and code improvements = 2.5.10 = - Optimized Javascript code to allow advanced optimizations - Added support to wait for jQuery so it can be deferred - Added support for children categories in lists - Added support to load settings page in safe mode - Added warning notice if PHP version is below 5.6 - Improved user interface for lists - Modified Javascript code that was wrongly replaced by CDN url - Fix for updates server access warning message (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.5.9 = - Added support for block name class - Added support for code generator for AdSense sticky AMP ads - Fix for paragraph clearance issues - Few minor bug fixes, cosmetic changes and code improvements = 2.5.8 = - Added support to call function adinserter () with block name - Added support to insert header code with HEAD separator only once - Additional info for errors when saving settings - Improved support for insertion between posts on AMP pages - Implemented compatibility with other plugins using phpQuery library - Added support for shortcode to disable tracking on specific pages (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.5.7 = - Fix for error when saving settings = 2.5.6 = - Added support for PenCi Soledad AMP plugin - Fix for php processing on multisite installations - Fix for client-side referrer check - Fix for header and footer code on AMP pages using AMP plugin - Few minor bug fixes, cosmetic changes and code improvements = 2.5.5 = - Added support for client list (black/whitelist operating systems, browsers, device names) - Fix for replaced tags with default value {name:default-value} - Few minor bug fixes, cosmetic changes and code improvements = 2.5.4 = - Minor bug fix regarding update checks (Pro only) = 2.5.3 = - Added support for warning when Ad Inserter is disabled by AMPforWP Plugin Manager - Added support for block shortcode attributes - Added support for post ID list to include all posts or static pages - Added option for maximum number of paragraphs - Added support to check for update server accessibility (Pro only) - Added ids to ad blocking popup message and overlay elements - Few minor bug fixes, cosmetic changes and code improvements = 2.5.2 = - Added options to define paragraph counting inside container elements - Added support to pin block list (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.5.1 = - Few minor bug fixes (Pro only) = 2.5.0 = - Improved user interface - Simplified user interface for individual post/page exceptions - Added support for virtual ads.txt file - Added support for frequency capping (Pro only) - Added support for click fraud detection (Pro only) - Changed url prefix for public reports to avoid possible url collisions (Pro only) - Fix for shortcode processing when blocks were used before init hook - Many minor bug fixes, cosmetic changes and code improvements = 2.4.23 = - Added support to define custom fields with shortocdes - Added support to delay showing ads for specified number of pageviews (Pro only) - Added support to remember closed ad for specified time period (Pro only) - Added support to automatically close ad after specified time period (Pro only) - Fix for false positive ad blocking detection (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.4.22 = - Fix for remote code execution vulnerability - credit to Wordfence = 2.4.21 = - Fix for possible error Class not found (Pro only) = 2.4.20 = - Fix for path traversal vulnerability - credit to Wilfried Becard of Synacktiv (https://synacktiv.com) - Fix for block rearrangement issues - Few minor bug fixes, cosmetic changes and code improvements = 2.4.19 = - Added support for taxonomy for Yoast primary category - Layout changes to accomodate longer translated texts - Fix for escape character not saved in header, footer and ad blocking message code - Few minor bug fixes, cosmetic changes and code improvements = 2.4.18 = - Added support for full width responsive AdSense code option - Few minor bug fixes, cosmetic changes and code improvements = 2.4.17 = - Few minor bug fixes, cosmetic changes and code improvements = 2.4.16 = - Fix for compatibility with AMP for WP - Accelerated Mobile Pages for WordPress - Few minor bug fixes = 2.4.15 = - Fix for improved compatibility with other plugins - Few minor bug fixes and cosmetic changes = 2.4.14 = - Fix for ROTATE shortcodes with option name identical to block name - Fix for possible conflict with output buffering in other plugins - Few minor bug fixes, cosmetic changes and code improvements = 2.4.13 = - Added shortcode to disable ad blocking detection code - Added options to disable ad blocking actions for administrators or logged in users - Added option to change PDF report footer (Pro only) - Added support for public ad impression and click reports (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.4.12 = - Added ads.txt editor - Added option to prevent disabling caching for logged in administrators - Improved compatibility with PHP 7.2 - Few minor bug fixes, cosmetic changes and code improvements = 2.4.11 = - Fix for saving code with slashes - Fix for rotation editor code import - Few minor bug fixes, cosmetic changes and code improvements = 2.4.10 = - Added support for counter shortcodes - Added support for code separator selection for code preview - Added support for group rotations - Added support for CHECK separator (Pro only) - Added links to test pages for check for available positions - Few minor bug fixes, cosmetic changes and code improvements = 2.4.9 = - Added support for HEAD separator - Added support for DoubleClick for Publishers (DFP) ads - Added support to generate statistics reports in PDF format (Pro only) - Fix for ad label when using AMP separator - Fix for AdSense code fixed by viewport - Fix for error when checking for available positions - Few minor bug fixes, cosmetic changes and code improvements = 2.4.8 = - Added support for automatic insertion before/after image - Added support for theme checker for available positions for automatic insertion = 2.4.7 = - Fix for lazy loading in Ajax calls (Pro only) - Fix for country list editor (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.4.6 = - Improved ad blocking detection (detects Firefox content blocking) - Added support for wildcards for referrers (domains) - Added debugging notice when JavaScript errors are detected - Added support to load blocks in iframes (Pro only) - Added geolocation support for country subdivisions and cities (Pro only) - Added option to hide license key on client websites (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.4.5 = - Added support for AMP WP - Google AMP For WordPress - Added support to individually disable insertions for debugging purposes - Improved HTML element selection tool - Fix for Call to undefined function wp_get_current_user() - Few minor bug fixes, cosmetic changes and code improvements = 2.4.4 = - Fix for Fatal error: Call to undefined function mb_strtoupper() = 2.4.3 = - Added support for insertion before/after every N paragraphs (%N) - Added support for i18n - Fix for insertion on admin pages - Fix for client-side cookie check - Fix for loaded styles from other plugins/themes on the settings page - Fix for client-side insertion near HTML elements using :eq selector - Fix for deactivation feedback form not closing - Few minor bug fixes, cosmetic changes and code improvements = 2.4.2 = - Added support for visual HTML element selection - Fix for client-side insertion inside HTML elements - Few minor bug fixes, cosmetic changes and code improvements = 2.4.1 = - Added option to insert into HTML element (prepend, append, replace content) - Added option to remove HTML element - Added option to not show deactivation feedback form - Added support for negative relative positions for paragraph counting - Few minor bug fixes, cosmetic changes and code improvements = 2.4.0 = - Improved code for client-side insertion - Added support for usage tracking - Fix for compatibility with older PHP versions (below 5.4) - Few minor bug fixes, cosmetic changes and code improvements = 2.3.21 = - Added option to force showing admin toolbar when viewing site - Added additional debugging info for blocks in Ajax requests - Fix for viewport visibility detection - Fix for rotation with non-ASCII characters - Few minor bug fixes, cosmetic changes and code improvements = 2.3.20 = - Improved loading of settings - Fix for content processing in some ajax calls - Few minor bug fixes, cosmetic changes and code improvements = 2.3.19 = - Improved code for client-side insertion - Fix for rotation with shortcodes - Few minor bug fixes, cosmetic changes and code improvements = 2.3.18 = - Added support to schedule insertion for N days after publishing - Added support to schedule insertion only for posts published inside/outside time period (Pro only) - Added support to prevent activation of free Ad Inserter while Pro is active - Added url parameter to show block code - Improved Header/Footer code debugging - Few minor bug fixes, cosmetic changes and code improvements = 2.3.17 = - Added shortcode for ad blocking detection action - Few minor bug fixes, cosmetic changes and code improvements = 2.3.16 = - Added option to insert block only when WP loop is currently active - Added support for Better AMP plugin - Code generator for placeholders on https sites now generates https urls - Optimized loading of plugin settings - Few minor bug fixes, cosmetic changes and code improvements = 2.3.15 = - Fix for insertion on AMP pages = 2.3.14 = - Simplified AdSense integration - Added setting to define maximum number of blocks (ads) per page - Optimized the_content filter processing - Added setting for lazy loading offset (Pro only) - Fix for url parameter list when using client-side dynamic blocks - Few minor bug fixes, cosmetic changes and code improvements = 2.3.13 = - Added support for lazy loading (Pro only) - Fix for unwanted insertions with some paragraph settings - Few minor bug fixes, cosmetic changes and code improvements = 2.3.12 = - Fix for urlencode error - Few other minor bug fixes = 2.3.11 = - Added support for W3TC/client-side check for cookies (in url parameter list) to support showing ads based on visitor's cookie consent - Added support for W3TC/client-side check for referers - Improved paragraph processing - Few minor bug fixes, cosmetic changes and code improvements = 2.3.10 = - Added support for timed rotation - Added support for client-side insertion of dynamic blocks - Improved word count function - Few minor bug fixes, cosmetic changes and code improvements = 2.3.9 = - Added option to easily disable insertion of individual code block - Changes for compatibility with PHP 7.2 - Added non-interaction parameter to external tracking (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.3.8 = - Added support for rotation option shares - Added support for sticky ad settings and animations (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.3.7 = - Added support for ad labels - Blocked search indexing while debugging - Close button setting moved to tab Display (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.3.6 = - Added widget for debugging tools - Fix for AdSense ad overlays not displayed with some themes - Few minor bug fixes, cosmetic changes and code improvements = 2.3.5 = - Added display of header and footer code in Label blocks debugging function - Added AdSense ad overlays in Label blocks debugging function (experimental) - Fixed bug for removed square brackets in HTML element selectors - Fixed preview of AdSense ad units - Few minor bug fixes = 2.3.4 = - Added support for author:author-username items in taxonomy list - Fixed errors when downgrading from Pro - Few minor bug fixes = 2.3.3 = - Added list editors - Added Label blocks debugging function for AdSense Auto ads = 2.3.2 = - Added AdSense code generator for ad sizes using CSS media queries - Fix for slow updates caused by changed user agent (Pro only, credits Olivier Langlois) - Fix for client-side insertion of non-English characters before/after HTML element = 2.3.1 = - Added support for server-side insertion before/after any HTML element - Few minor bug fixes = 2.3.0 = - Added support for client-side insertion before/after any HTML element - Inplemented AdSense integration - Added option to define close button position - Fix for code generator import and code preview error with non ASCII characters - Fix for post/page exceptions and page types not processed in the header - Fix for close button in preview window - Fix for errors when rearranging blocks - Fix for errors when importing code - Few minor bug fixes, cosmetic changes and code improvements = 2.2.16 = - Fix for error when saving settings on multisite installation = 2.2.15 = - Fix for responsive AMP ads using center alignment = 2.2.14 = - Added code generator for placeholders - Added option to disable caching (works with WP Super Cache, W3 Total Cache and WP Rocket) - Added options to configure classes for wrapping div - Added support for external tracking via Google Analytics and Piwik (Pro only) - Added support for MaxMind geolocation databases (Pro only) - Added option for close button on sticky ads (Pro only) - Fix for no paragraph counting inside nested elements - Few minor bug fixes, cosmetic changes and code improvements = 2.2.13 = - Added option to disable inline alignment styles for code blocks (using alignment classes) - Fix for custom CSS codes with single quotation marks = 2.2.12 = - Fix for code block styles when block class name was not set = 2.2.11 = - Code block styles moved to classes - Code block list moved to the sidebar - Added preview buttons in code block list - Fix for ad blocking detection when using https (Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.2.10 = - Fix for rotation editor code import/export - Fix for errors when using old |rotate| separator - Few minor bug fixes, cosmetic changes and code improvements = 2.2.9 = - Output buffering is now disabled by default (for position Above header you need to enable it) - Fix for min. paragraph number not processed = 2.2.8 = - Added position for automatic insertion Above header (after `` tag) - Added rotation code editor - Added support to name rotation options - Added code generator for banners - Added code generator for AdSense - Added support to rearrange code blocks - Added support to copy any block settings - Added support for clipboard to copy/paste block settings - Added option to select ad blocking detection mode (Pro only) - Delayed insertion on posts now available for all insertion positions - Few minor bug fixes, cosmetic changes and code improvements = 2.2.7 = - Fix for duplicate amp-custom tag on AMP pages = 2.2.6 = - Fix for posts filter counter not counting - Added list with short overview of all code blocks - Added support for word count on blog pages - Added support for client code preview (no need to save it for preview) - Improved compatibility on AMP pages - Few minor bug fixes, cosmetic changes and code improvements = 2.2.5 = - Fix for issue with Ajax requests = 2.2.4 = - Added support to insert raw HTTP response header lines - Added support to check for individual exceptions for shortcodes - Added support to trigger ad blocking detection action only on individual pages - Added support for automatic insertion position Footer - Added support for custom hooks - Url parameter list now checks url parameters ($_GET) and cookies ($_COOKIE) - Fix for |count| separator not processed = 2.2.3 = - Added support to insert custom fields via shortcode [adinserter custom-field='CUSTOM_FIELD_NAME'] - Added support for user:USERNAME and user-role:USER_ROLE taxonomy list items - Added support for post-type:POST_TYPE taxonomy list items - Added support for JavaScript based sticky widgets - Added support for ad blocking statistics (Pro only) - Added support for WP AMP and WP AMP Ninja plugins - Post/Page Word Count moved to Misc section (now works also on widgets) - Few minor bug fixes, cosmetic changes and code improvements = 2.2.2 = - Fix for mobile admin layout - Few other minor bug fixes = 2.2.1 = - Fix for header/footer scripts on AMP pages = 2.2.0 = - Added support for ad blocking detection (experimental) - Added support for [ADINSERTER AMP] shortcode to separate code for AMP pages - Added support for [ADINSERTER ROTATE] and [ADINSERTER COUNT] shortcodes - Added syntax highlighting for shortcodes and separators - Added option to define minimum number of words in paragraphs above - Added support for %N filter item to filter every N-th insertion - Added filter support when inserting for all paragraphs - Added style `clear: both;` to Default, Left, Right and Center alignments - Bug fix for errors when loading tracking charts (Pro only) - Many minor bug fixes, cosmetic changes and code improvements = 2.1.14 = - Fix for error when using older PHP versions (prior to 5.5) = 2.1.13 = - Fix for Fatal error: Can't use method return value in write context = 2.1.12 = - Added option to define tags inside which paragraphs are not counted - Added max insertions check when inserting for all paragraphs - Added support for inverted filter - Increased nonce lifespan to 48 hours when using tracking (Pro only) - Fixed wrong urls in debug menu when behind proxy - Few other bug fixes, cosmetic changes and code improvements = 2.1.11 = - Improved support for sticky widgets (works with most themes) - Added support for ad counting (|count| separator) - Added support to black/white-list arbitrary taxonomies (taxonomy, term or taxonomy:term) - Added support for automatic insertion before, between and after comments - Added processing of shortcodes in the header and footer code - Debugging function Show positions shows also page type - Fixed page type detection when Post page was set to static page and it was not homepage - Few minor bug fixes, cosmetic changes and code improvements = 2.1.10 = - Fix for shifted sidebars in some themes = 2.1.9 = - Added support for sticky widgets - Added support to insert code after images (Automatic Insertion: After Paragraph, Paragraphs with tags: img) - Impression and click tracking (beta, Pro only) - Few minor bug fixes, cosmetic changes and code improvements = 2.1.8 = - Fixed error when using server-side device detection = 2.1.7 = - Fixed error when using PHP 5.4 or earlier = 2.1.6 = - Added support for insertion before/after multiple paragraphs - Added initial support for impression and click tracking (Pro only) - Few bug fixes and cosmetic changes = 2.1.5 = - Added support to avoid insertion inside `
` and `
  • ` elements (image captions, lists) - Added support for exceptions for custom post types - Few minor bug fixes and code improvements = 2.1.4 = - Paragraph counting restored to standard functions - Added option to select paragraph counting functions with multibyte support (unicode characters) - Fixed bug for wrong paragraph counting in posts with blockquote sections in some cases - Fixed bug for wrong measuring of plugin processing time in some cases - Fixed bug for "Empty delimiter" warning = 2.1.3 = - Added support for counting paragraphs with multibyte (unicode) characters - Fixed bug for class name not saved - Few minor bug fixes and cosmetic changes = 2.1.2 = - Fixed bug for disabled settings page on multisite blogs = 2.1.1 = - Changes for compatibility with PHP 7.1 - Automatic rename of old pro plugin slug (Pro only) - Added support for additional Pro features (Pro only) - Few bug fixes and cosmetic changes = 2.1.0 = - Added support to insert ads in Ajax requests (e.g. in infinite scroll) - Added support to not include block classes when class name is empty - Added sticky positions (Pro only) - Bug fix for minimum user role not taken into account for exceptions list - Bug fix for IP database update cron event (Pro only) PK!#o,, index.htmlnu[PK!B@S@S strings.phpnu[Blocked because of Ad Blocker

    \n

    It seems that you are using some ad blocking software which is preventing the page from fully loading. Please whitelist this website or disable ad blocking software.

    ", 'ad-inserter')); define ('DEFAULT_VIEWPORT_NAME_1', _x('Desktop', 'Viewport name', 'ad-inserter')); define ('DEFAULT_VIEWPORT_NAME_2', _x('Tablet', 'Viewport name', 'ad-inserter')); define ('DEFAULT_VIEWPORT_NAME_3', _x('Phone', 'Viewport name', 'ad-inserter')); define ('DEFAULT_COUNTRY_GROUP_NAME', _x('Group', 'ad-inserter')); define ('AI_TEXT_INSERT', __('Insert', 'ad-inserter')); // translators: Menu items define ('AI_TEXT_DISABLED', __('Disabled', 'ad-inserter')); define ('AI_TEXT_BEFORE_POST', __('Before post', 'ad-inserter')); define ('AI_TEXT_AFTER_POST', __('After post', 'ad-inserter')); define ('AI_TEXT_BEFORE_CONTENT', __('Before content', 'ad-inserter')); define ('AI_TEXT_AFTER_CONTENT', __('After content', 'ad-inserter')); define ('AI_TEXT_BEFORE_PARAGRAPH', __('Before paragraph', 'ad-inserter')); define ('AI_TEXT_AFTER_PARAGRAPH', __('After paragraph', 'ad-inserter')); define ('AI_TEXT_BEFORE_EXCERPT', __('Before excerpt', 'ad-inserter')); define ('AI_TEXT_AFTER_EXCERPT', __('After excerpt', 'ad-inserter')); define ('AI_TEXT_BETWEEN_POSTS', __('Between posts', 'ad-inserter')); define ('AI_TEXT_BEFORE_COMMENTS', __('Before comments', 'ad-inserter')); define ('AI_TEXT_BETWEEN_COMMENTS', __('Between comments', 'ad-inserter')); define ('AI_TEXT_AFTER_COMMENTS', __('After comments', 'ad-inserter')); define ('AI_TEXT_ABOVE_HEADER', __('Above header', 'ad-inserter')); define ('AI_TEXT_FOOTER', __('Footer', 'ad-inserter')); define ('AI_TEXT_BEFORE_HTML_ELEMENT', __('Before HTML element', 'ad-inserter')); define ('AI_TEXT_AFTER_HTML_ELEMENT', __('After HTML element', 'ad-inserter')); define ('AI_TEXT_INSIDE_HTML_ELEMENT', __('Inside HTML element', 'ad-inserter')); define ('AI_TEXT_BEFORE_IMAGE', __('Before image', 'ad-inserter')); define ('AI_TEXT_AFTER_IMAGE', __('After image', 'ad-inserter')); define ('AI_TEXT_INLINE', __('Inline', 'ad-inserter')); define ('AI_TEXT_FILE', __('File', 'ad-inserter')); define('AI_TEXT_DO_NOT_INSERT', __('do not insert', 'ad-inserter')); define('AI_TEXT_TRY_TO_SHIFT_POSITION', __('try to shift position', 'ad-inserter')); define ('AI_TEXT_ABOVE', __('above', 'ad-inserter')); define ('AI_TEXT_BELOW', __('below', 'ad-inserter')); define ('AI_TEXT_ABOVE_AND_THEN_BELOW', __('above and then below', 'ad-inserter')); define ('AI_TEXT_BELOW_AND_THEN_ABOVE', __('below and then above', 'ad-inserter')); define ('AI_TEXT_DIRECTION_FROM_TOP', __('from top', 'ad-inserter')); define ('AI_TEXT_DIRECTION_FROM_BOTTOM',__('from bottom', 'ad-inserter')); define ('AI_TEXT_CONTAIN', _x('contain', 'paragraphs', 'ad-inserter')); define ('AI_TEXT_DO_NOT_CONTAIN', _x('do not contain', 'paragraphs', 'ad-inserter')); define ('AI_TEXT_DO_NOT_COUNT', __('Do not count', 'ad-inserter')); define ('AI_TEXT_COUNT_ONLY', __('Count only', 'ad-inserter')); define('AI_TEXT_DISPLAY_ALL_USERS', _x('all users', 'insert for', 'ad-inserter')); define('AI_TEXT_DISPLAY_LOGGED_IN_USERS', _x('logged in users', 'insert for', 'ad-inserter')); define('AI_TEXT_DISPLAY_NOT_LOGGED_IN_USERS', _x('not logged in users', 'insert for', 'ad-inserter')); define('AI_TEXT_DISPLAY_ADMINISTRATORS', _x('administrators', 'insert for', 'ad-inserter')); define('AI_TEXT_BLACK_LIST', __('Black list', 'ad-inserter')); define('AI_TEXT_WHITE_LIST', __('White list', 'ad-inserter')); define('AI_TEXT_DEFAULT', _x('Default', 'alignment', 'ad-inserter')); define('AI_TEXT_LEFT', _x('Left', 'alignment', 'ad-inserter')); define('AI_TEXT_RIGHT', _x('Right', 'alignment', 'ad-inserter')); define('AI_TEXT_CENTER', _x('Center', 'alignment', 'ad-inserter')); define('AI_TEXT_POSITION_CENTER', _x('Center', 'position', 'ad-inserter')); define('AI_TEXT_FLOAT_LEFT', _x('Float left', 'alignment', 'ad-inserter')); define('AI_TEXT_FLOAT_RIGHT', _x('Float right', 'alignment', 'ad-inserter')); define('AI_TEXT_NO_WRAPPING', _x('No wrapping', 'alignment', 'ad-inserter')); define('AI_TEXT_CUSTOM_CSS', __('Custom CSS', 'ad-inserter')); define('AI_TEXT_STICKY_LEFT', __('Sticky left', 'ad-inserter')); define('AI_TEXT_STICKY_RIGHT', __('Sticky right', 'ad-inserter')); define('AI_TEXT_STICKY_TOP', __('Sticky top', 'ad-inserter')); define('AI_TEXT_STICKY_BOTTOM', __('Sticky bottom', 'ad-inserter')); define('AI_TEXT_STICKY', _x('Sticky', 'alignment', 'ad-inserter')); define ('AI_TEXT_AUTO_COUNTER', _x('auto counter', 'using', 'ad-inserter')); define ('AI_TEXT_PHP_FUNCTION_CALLS_COUNTER', _x('PHP function calls counter', 'using', 'ad-inserter')); define ('AI_TEXT_CONTENT_PROCESSING_COUNTER', _x('content processing counter', 'using', 'ad-inserter')); define ('AI_TEXT_EXCERPT_PROCESSING_COUNTER', _x('excerpt processing counter', 'using', 'ad-inserter')); define ('AI_TEXT_BEFORE_POST_PROCESSING_COUNTER', _x('before post processing counter', 'using', 'ad-inserter')); define ('AI_TEXT_AFTER_POST_PROCESSING_COUNTER', _x('after post processing counter', 'using', 'ad-inserter')); define ('AI_TEXT_WIDGET_DRAWING_COUNTER', _x('widget drawing counter', 'using', 'ad-inserter')); define ('AI_TEXT_SUBPAGES_COUNTER', _x('subpages counter', 'using', 'ad-inserter')); define ('AI_TEXT_POSTS_COUNTER', _x('posts counter', 'using', 'ad-inserter')); define ('AI_TEXT_PARAGRAPHS_COUNTER', _x('paragraphs counter', 'using', 'ad-inserter')); define ('AI_TEXT_COMMENTS_COUNTER', _x('comments counter', 'using', 'ad-inserter')); define ('AI_TEXT_IMAGES_COUNTER', _x('images counter', 'using', 'ad-inserter')); define ('AI_TEXT_POSTS_NO_INDIVIDUALL_EXCEPTIONS', ''); define ('AI_TEXT_POSTS_INDIVIDUALLY_DISABLED', _x('Individually disabled', 'posts', 'ad-inserter')); define ('AI_TEXT_POSTS_INDIVIDUALLY_ENABLED', _x('Individually enabled', 'posts', 'ad-inserter')); define ('AI_TEXT_PAGES_NO_INDIVIDUAL_EXCEPTIONS', ''); define ('AI_TEXT_PAGES_INDIVIDUALLY_DISABLED', _x('Individually disabled', 'static pages', 'ad-inserter')); define ('AI_TEXT_PAGES_INDIVIDUALLY_ENABLED', _x('Individually enabled', 'static pages', 'ad-inserter')); define ('AI_TEXT_SERVER_SIDE', __('Server-side', 'ad-inserter')); define ('AI_TEXT_CLIENT_SIDE', _x('Client-side', 'Insertion', 'ad-inserter')); define ('AI_TEXT_CLIENT_SIDE_SHOW', _x('Client-side show', 'Dynamic blocks', 'ad-inserter')); define ('AI_TEXT_CLIENT_SIDE_INSERT', _x('Client-side insert', 'Dynamic blocks', 'ad-inserter')); define ('AI_TEXT_SERVER_SIDE_W3TC', _x('Server-side using W3 Total Cache', 'Insertion', 'ad-inserter')); //define ('AI_TEXT_CLIENT_SIDE_DOM_READY', _x('Client-side when DOM ready', 'Insertion', 'ad-inserter')); define ('AI_TEXT_PREPEND_CONTENT', __('Prepend content', 'ad-inserter')); define ('AI_TEXT_APPEND_CONTENT', __('Append content', 'ad-inserter')); define ('AI_TEXT_REPLACE_CONTENT', __('Replace content', 'ad-inserter')); define ('AI_TEXT_REPLACE_ELEMENT', __('Replace element', 'ad-inserter')); define ('AI_TEXT_DESKTOP_DEVICES', __('desktop devices', 'ad-inserter')); define ('AI_TEXT_MOBILE_DEVICES', __('mobile devices', 'ad-inserter')); define ('AI_TEXT_TABLET_DEVICES', __('tablet devices', 'ad-inserter')); define ('AI_TEXT_PHONE_DEVICES', __('phone devices', 'ad-inserter')); define ('AI_TEXT_DESKTOP_TABLET_DEVICES', __('desktop and tablet devices', 'ad-inserter')); define ('AI_TEXT_DESKTOP_PHONE_DEVICES', __('desktop and phone devices', 'ad-inserter')); define ('AI_TEXT_ALL_DEVICES', __('all devices', 'ad-inserter')); define ('AI_TEXT_STICK_TO_THE_LEFT', __('Stick to the left', 'ad-inserter')); define ('AI_TEXT_STICK_TO_THE_CONTENT_LEFT', __('Stick to the content left', 'ad-inserter')); define ('AI_TEXT_STICK_TO_THE_CONTENT_RIGHT', __('Stick to the content right', 'ad-inserter')); define ('AI_TEXT_STICK_TO_THE_RIGHT', __('Stick to the right', 'ad-inserter')); define ('AI_TEXT_STICK_TO_THE_TOP', __('Stick to the top', 'ad-inserter')); define ('AI_TEXT_SCROLL_WITH_THE_CONTENT', __('Scroll with the content', 'ad-inserter')); define ('AI_TEXT_STICK_TO_THE_BOTTOM', __('Stick to the bottom', 'ad-inserter')); define ('AI_TEXT_FADE', __('Fade', 'ad-inserter')); define ('AI_TEXT_SLIDE', __('Slide', 'ad-inserter')); define ('AI_TEXT_SLIDE_FADE', __('Slide and Fade', 'ad-inserter')); define ('AI_TEXT_FLIP', __('Flip', 'ad-inserter')); define ('AI_TEXT_ZOOM_IN', __('Zoom In', 'ad-inserter')); define ('AI_TEXT_ZOOM_OUT', __('Zoom Out', 'ad-inserter')); define ('AI_TEXT_TURN', __('Turn', 'ad-inserter')); define ('AI_TEXT_PAGE_LOADED', __('Page loaded', 'ad-inserter')); define ('AI_TEXT_PAGE_SCROLLED_PC', __('Page scrolled (%)', 'ad-inserter')); define ('AI_TEXT_PAGE_SCROLLED_PX', __('Page scrolled (px)', 'ad-inserter')); define ('AI_TEXT_ELEMENT_SCROLLS_IN', __('Element scrolls in', 'ad-inserter')); define ('AI_TEXT_ELEMENT_SCROLLS_OUT', __('Element scrolls out', 'ad-inserter')); define('AI_TEXT_DEFAULT_BKG_REPEAT', _x('Default', 'image repeat', 'ad-inserter')); define('AI_TEXT_NO', __('No', 'ad-inserter')); define('AI_TEXT_YES', __('Yes', 'ad-inserter')); define('AI_TEXT_HORIZONTALY', __('Horizontally', 'ad-inserter')); define('AI_TEXT_VERTICALLY', __('Vertically', 'ad-inserter')); define('AI_TEXT_SPACE', __('Space', 'ad-inserter')); define('AI_TEXT_ROUND', __('Round', 'ad-inserter')); define('AI_TEXT_DEFAULT_BKG_SIZE', _x('Default', 'image size', 'ad-inserter')); define('AI_TEXT_COVER', __('Cover', 'ad-inserter')); define('AI_TEXT_FIT_BKG_SIZE', _x('Fit', 'image size', 'ad-inserter')); define('AI_TEXT_FILL', __('Fill', 'ad-inserter')); define ('AI_TEXT_INSERT_IMMEDIATELY', __('Insert immediately', 'ad-inserter')); define ('AI_TEXT_DELAY_INSERTION', __('Delay insertion', 'ad-inserter')); define ('AI_TEXT_INSERT_BETWEEN_DATES', __('Insert between dates', 'ad-inserter')); define ('AI_TEXT_INSERT_OUTSIDE_DATES', __('Insert outside dates', 'ad-inserter')); define ('AI_TEXT_INSERT_ONLY', __('Insert only', 'ad-inserter')); define ('AI_TEXT_INSERT_PUBLISHED_BETWEEN_DATES', __('Insert for posts published between dates', 'ad-inserter')); define ('AI_TEXT_INSERT_PUBLISHED_OUTSIDE_DATES', __('Insert for posts published outside dates', 'ad-inserter')); define ('AI_TEXT_FUNCTIONS_STANDARD', _x('Standard', 'functions', 'ad-inserter')); define ('AI_TEXT_STANDARD', _x('Standard', 'detection', 'ad-inserter')); define ('AI_TEXT_MULTIBYTE', _x('Multibyte', 'functions', 'ad-inserter')); define ('AI_TEXT_NONE', _x('None', 'action', 'ad-inserter')); define ('AI_TEXT_BUTTON_NONE', _x('None', 'button', 'ad-inserter')); define ('AI_TEXT_POPUP_MESSAGE', __('Popup Message', 'ad-inserter')); define ('AI_TEXT_REDIRECTION', __('Redirection', 'ad-inserter')); define ('AI_TEXT_DO_NOTHING', __('Do nothing', 'ad-inserter')); define ('AI_TEXT_REPLACE', __('Replace', 'ad-inserter')); define ('AI_TEXT_SHOW', _x('Show', 'Action when ad blocking detected', 'ad-inserter')); define ('AI_TEXT_HIDE', _x('Hide', 'Action when ad blocking detected', 'ad-inserter')); define ('AI_TEXT_INTERNAL', _x('Internal', 'tracking', 'ad-inserter')); define ('AI_TEXT_ADVANCED', _x('Advanced', 'detection', 'ad-inserter')); define ('AI_TEXT_ENABLED', __('Enabled', 'ad-inserter')); define ('AI_TEXT_AUTO', _x('Auto', 'Manual loading', 'ad-inserter')); define ('AI_TEXT_ALWAYS', _x('Always', 'Manual loading', 'ad-inserter')); define ('AI_TEXT_TOP_RIGHT', __('Top right', 'ad-inserter')); define ('AI_TEXT_TOP_LEFT', __('Top left', 'ad-inserter')); define ('AI_TEXT_BOTTOM_RIGHT', __('Bottom right', 'ad-inserter')); define ('AI_TEXT_BOTTOM_LEFT', __('Bottom left', 'ad-inserter')); define ('AI_TEXT_ADSENSE_STANDARD', _x('Standard', 'AdSense Ad Type', 'ad-inserter')); define ('AI_TEXT_LINK', _x('Link', 'AdSense Ad Type', 'ad-inserter')); define ('AI_TEXT_IN_ARTICLE', _x('In-article', 'AdSense Ad Type', 'ad-inserter')); define ('AI_TEXT_IN_FEED', _x('In-feed', 'AdSense Ad Type', 'ad-inserter')); define ('AI_TEXT_MATCHED_CONTENT', _x('Matched content', 'AdSense Ad Type', 'ad-inserter')); define ('AI_TEXT_ADSENSE_AUTO', _x('Auto Ads', 'AdSense Ad Type', 'ad-inserter')); define ('AI_TEXT_ADSENSE_AMP_ONLY', _x('AMP Only', 'AdSense Ad Type', 'ad-inserter')); define ('AI_TEXT_ADSENSE_DISABLED', _x('Disabled', 'AMP ad', 'ad-inserter')); define ('AI_TEXT_ABOVE_THE_FOLD', __('Above the fold', 'ad-inserter')); define ('AI_TEXT_BELOW_THE_FOLD', __('Below the fold', 'ad-inserter')); define ('AI_TEXT_STICKY_AMP', _x('Sticky', 'AMP ad', 'ad-inserter')); define ('AI_TEXT_FIXED', _x('Fixed', 'size', 'ad-inserter')); define ('AI_TEXT_RESPONSIVE', _x('Responsive', 'size', 'ad-inserter')); define ('AI_TEXT_FIXED_BY_VIEWPORT', _x('Fixed by viewport', 'size', 'ad-inserter')); define ('AI_TEXT_SETTINGS_SUBMENU', __('Settings submenu', 'ad-inserter')); define ('AI_TEXT_TOP_MENU', __('Top menu', 'ad-inserter')); // Translators: %s: Ad Inserter Pro define ('DEFAULT_REPORT_HEADER_TITLE', sprintf (__('%s Report', 'ad-inserter'), 'Ad Inserter Pro')); define ('DEFAULT_REPORT_HEADER_DESCRIPTION', __('Impressions and clicks', 'ad-inserter')); define ('DEFAULT_REPORT_FOOTER', AD_INSERTER_NAME . ' '. __('Advanced WordPress Ad Management Plugin', 'ad-inserter') . ' https://adinserter.pro/'); global $ai_admin_translations, $ai_front_translations, $wp_version; $ai_admin_translations = array ( 'hide' => _x('Hide', 'Button', 'ad-inserter'), 'show' => _x('Show', 'Button', 'ad-inserter'), 'insertion_expired' => __('Insertion expired', 'ad-inserter'), 'duration' => __('Duration', 'ad-inserter'), 'invalid_end_date' => __('Invalid end date - must be after start date', 'ad-inserter'), 'invalid_start_date' => __('Invalid start date - only data for 1 year back is available', 'ad-inserter'), 'invalid_date_range' => __('Invalid date range - only data for 1 year can be displayed', 'ad-inserter'), 'days_0' => _n('day', 'days', 0, 'ad-inserter'), 'days_1' => _n('day', 'days', 1, 'ad-inserter'), 'days_2' => _n('day', 'days', 2, 'ad-inserter'), 'days_3' => _n('day', 'days', 3, 'ad-inserter'), 'days_4' => _n('day', 'days', 4, 'ad-inserter'), 'days_5' => _n('day', 'days', 5, 'ad-inserter'), 'warning' => __('Warning', 'ad-inserter'), 'delete' => __('Delete', 'ad-inserter'), 'delete_all' => __('Delete all', 'ad-inserter'), 'switch' => __('Switch', 'ad-inserter'), 'cancel' => __('Cancel', 'ad-inserter'), 'ok' => __('OK', 'ad-inserter'), 'delete_all_statistics' => __('Delete all statistics data?', 'ad-inserter'), 'rotation_active' => __('Rotation code editor active. Click on the rotation button to generate code.', 'ad-inserter'), // translators: %s: dates 'delete_statistics_between' => sprintf (__('Delete statistics data between %s and %s?', 'ad-inserter'), '{start_date}', '{end_date}'), 'delete_website' => __('Delete website?', 'ad-inserter'), 'cancel_rearrangement' => __('Cancel block order rearrangement', 'ad-inserter'), 'rearrange_block_order' => __('Rearrange block order', 'ad-inserter'), 'downloading' => __('downloading...', 'ad-inserter'), 'download_error' => __('download error', 'ad-inserter'), 'update_error' => __('update error', 'ad-inserter'), 'updating' => __('Updating...', 'ad-inserter'), 'loading' => __('Loading...', 'ad-inserter'), 'error' => __('ERROR', 'ad-inserter'), 'error_reloading_settings' => __('Error reloading settings', 'ad-inserter'), 'google_adsense_homepage' => __('Google AdSense Homepage', 'ad-inserter'), 'search' => _x('Search...', 'Search field placeholder', 'ad-inserter'), 'filter' => _x('Filter...', 'Search field placeholder', 'ad-inserter'), 'filter_title' => __('Use filter to limit names in the list', 'ad-inserter'), 'button_filter' => _x('Filter', 'Button', 'ad-inserter'), 'position_not_checked' => __('Position not checked yet', 'ad-inserter'), 'position_not_available' => __('Position not available', 'ad-inserter'), 'position_might_not_available'=> __('Theme check | Selected position for automatic insertion might not be not available on this page type', 'ad-inserter'), 'position_available' => __('Position available', 'ad-inserter'), 'select_header_image' => __('Select or upload header image', 'ad-inserter'), 'select_banner_image' => __('Select or upload banner image', 'ad-inserter'), 'select_background_image' => __('Select or upload background image', 'ad-inserter'), 'use_this_image' => __('Use this image', 'ad-inserter'), 'switch_to_physical_ads_txt' => __('Switching to physical ads.txt file will delete virtual ads.txt file.', 'ad-inserter'), 'day_mo' => _x('MO', 'Monday', 'ad-inserter'), 'day_tu' => _x('TU', 'Tuesday', 'ad-inserter'), 'day_we' => _x('WE', 'Wednesday', 'ad-inserter'), 'day_th' => _x('TH', 'Thursday', 'ad-inserter'), 'day_fr' => _x('FR', 'Friday', 'ad-inserter'), 'day_sa' => _x('SA', 'Saturday', 'ad-inserter'), 'day_su' => _x('SU', 'Sunday', 'ad-inserter'), ); $ai_front_translations = array ( // 'wp_ai' => $wp_version . '+' . AD_INSERTER_VERSION, // Debugging 'insertion_before' => __('BEFORE', 'ad-inserter'), 'insertion_after' => __('AFTER', 'ad-inserter'), 'insertion_prepend' => __('PREPEND CONTENT', 'ad-inserter'), 'insertion_append' => __('APPEND CONTENT', 'ad-inserter'), 'insertion_replace_content' => __('REPLACE CONTENT', 'ad-inserter'), 'insertion_replace_element' => __('REPLACE ELEMENT', 'ad-inserter'), 'visible' => _x('VISIBLE', 'Block', 'ad-inserter'), 'hidden' => _x('HIDDEN', 'Block', 'ad-inserter'), 'fallback' => _x('FALLBACK', 'alternative block', 'ad-inserter'), 'automatically_placed' => __('Automatically placed by AdSense Auto ads code', 'ad-inserter'), // Element selection 'cancel' => __('Cancel', 'ad-inserter'), 'use' => __('Use', 'ad-inserter'), 'add' => __('Add', 'ad-inserter'), 'parent' => _x('Parent', 'Element', 'ad-inserter'), 'cancel_element_selection' => __('Cancel element selection', 'ad-inserter'), 'select_parent_element' => __('Select parent element', 'ad-inserter'), 'css_selector' => __('CSS selector', 'ad-inserter'), 'use_current_selector' => __('Use current selector', 'ad-inserter'), 'element' => __('ELEMENT', 'ad-inserter'), 'path' => __('PATH', 'ad-inserter'), 'selector' => __('SELECTOR', 'ad-inserter'), ); PK!2]G]Gad-inserter.phpnu[H   '; $statuses .= 'F   '; $statuses .= 'JS   '; $statuses .= 'CSS   '; $statuses .= 'HTML   '; $statuses .= 'PHP   '; $statuses .= 'BLOCKS'; $insertion_disabled = $disable_block_insertions || $disable_php_processing || $disable_html_code || $disable_css_code || $disable_js_code || $disable_footer_code || $disable_header_code; $ai_wp_data [AI_DEBUG_MENU_ITEMS] = array (); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) == 0) $debug_blocks = 1; else $debug_blocks = 0; $debug_blocks_class = $debug_blocks == 0 ? ' on' : ''; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) == 0) $debug_positions = 0; else $debug_positions = ''; $debug_positions_class = $debug_positions === '' ? ' on' : ''; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_TAGS) == 0) $debug_tags = 1; else $debug_tags = 0; $debug_tags_class = $debug_tags == 0 ? ' on' : ''; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) == 0) $debug_processing = 1; else $debug_processing = 0; $debug_processing_class = $debug_processing == 0 ? ' on' : ''; if (!isset ($_GET [AI_URL_DEBUG_PROCESSING_FE_]) || $_GET [AI_URL_DEBUG_PROCESSING_FE_] == 0) $debug_processing_fe = 1; else $debug_processing_fe = 0; $debug_processing__fe_class = $debug_processing_fe == 0 ? ' on' : ''; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_NO_INSERTION) == 0) $debug_no_insertion = 1; else $debug_no_insertion = 0; $debug_no_insertion_class = $debug_no_insertion == 0 ? ' on' : ''; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_AD_BLOCKING) == 0) $debug_ad_blocking = 1; else $debug_ad_blocking = 0; $debug_ad_blocking_class = $debug_ad_blocking == 0 ? ' on' : ''; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_AD_BLOCKING_STATUS) == 0) $debug_ad_blocking_status = 1; else $debug_ad_blocking_status = 0; $debug_ad_blocking_status_class = $debug_ad_blocking_status == 0 ? ' on' : ''; $debug_settings_on = $debug_blocks == 0 || $debug_positions === '' || $debug_tags == 0 || $debug_processing == 0 || $debug_no_insertion == 0 || $debug_ad_blocking == 0 || $debug_ad_blocking_status == 0; $debug_settings_class = $debug_settings_on ? ' on' : ''; if ($insertion_disabled) $debug_settings_class .= ' red'; $top_menu_url = $debug_settings_on ? (defined ('AI_DEBUGGING_DEMO') ? get_permalink () : add_query_arg (AI_URL_DEBUG, '0', remove_debug_parameters_from_url ())) : add_query_arg (array (AI_URL_DEBUG_BLOCKS => '1', AI_URL_DEBUG_POSITIONS => '0'), remove_debug_parameters_from_url ()); $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar', 'group' => true ); $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-settings', // 'parent' => 'ai-toolbar', // 'title' => ''.AD_INSERTER_NAME . (defined ('AI_DEBUGGING_DEMO') ? ' Debugging DEMO' : ($debug_settings_on ? ' Debugging' : '')), 'title' => ''.AD_INSERTER_NAME . (defined ('AI_DEBUGGING_DEMO') ? ' ' . _x('Debugging DEMO', 'Menu item', 'ad-inserter') : ($debug_settings_on ? '' : '')), 'href' => $top_menu_url, // 'meta' => $debug_settings_on ? array ('title' => 'Turn Debugging Off') : array (), ); if ($insertion_disabled) { $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-status', 'parent' => 'ai-toolbar-settings', 'title' => ' '.$statuses, ); } $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-blocks', 'parent' => 'ai-toolbar-settings', 'title' => '' . _x('Label Blocks', 'Menu item, to label blocks', 'ad-inserter'), 'href' => set_url_parameter (AI_URL_DEBUG_BLOCKS, $debug_blocks), ); $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-positions', 'parent' => 'ai-toolbar-settings', 'title' => '' . _x('Show Positions', 'Menu item', 'ad-inserter'), 'href' => set_url_parameter (AI_URL_DEBUG_POSITIONS, $debug_positions), ); $paragraph_blocks = array (); for ($block = 0; $block <= 96; $block ++) { $obj = $block_object [$block]; $automatic_insertion = $obj->get_automatic_insertion(); if ($block == 0 || !$obj->get_disable_insertion () && ($automatic_insertion == AI_AUTOMATIC_INSERTION_BEFORE_PARAGRAPH || $automatic_insertion == AI_AUTOMATIC_INSERTION_AFTER_PARAGRAPH)) { $block_tags = trim ($block_object [$block]->get_paragraph_tags ()); $direction = $block_object [$block]->get_direction_type() == AI_DIRECTION_FROM_TOP ? 't' : 'b'; $paragraph_min_words = intval ($obj->get_minimum_paragraph_words()); $paragraph_max_words = intval ($obj->get_maximum_paragraph_words()); $paragraph_text_type = $obj->get_paragraph_text_type (); $paragraph_text = trim (html_entity_decode ($obj->get_paragraph_text())); $inside_blockquote = $obj->get_count_inside_blockquote (); $count_inside_type = $obj->get_count_inside (); $count_inside_elements = $obj->get_count_inside_elements (); $that_contain_type = $obj->get_count_inside_elements_contain (); $that_contain_text = trim (html_entity_decode ($obj->get_count_inside_elements_text ())); if ($block_tags != '') { $found = false; foreach ($paragraph_blocks as $index => $paragraph_block) { if ($paragraph_block ['tags'] == $block_tags && $paragraph_block ['direction'] == $direction && $paragraph_block ['min'] == $paragraph_min_words && $paragraph_block ['max'] == $paragraph_max_words && $paragraph_block ['text_type'] == $paragraph_text_type && $paragraph_block ['text'] == $paragraph_text && $paragraph_block ['blockquote'] == $inside_blockquote && $paragraph_block ['inside_type'] == $count_inside_type && $paragraph_block ['inside_elemets'] == $count_inside_elements && $paragraph_block ['contain_type'] == $that_contain_type && $paragraph_block ['contain_text'] == $that_contain_text ) { $found = true; break; } } if ($found) array_push ($paragraph_blocks [$index]['blocks'], $block); else $paragraph_blocks []= array ('blocks' => array ($block), 'tags' => $block_tags, 'direction' => $direction, 'min' => $paragraph_min_words, 'max' => $paragraph_max_words, 'text_type' => $paragraph_text_type, 'text' => $paragraph_text, 'blockquote' => $inside_blockquote, 'inside_type' => $count_inside_type, 'inside_elemets' => $count_inside_elements, 'contain_type' => $that_contain_type, 'contain_text' => $that_contain_text, ); } } } $no_paragraph_counting_inside = get_no_paragraph_counting_inside (); foreach ($paragraph_blocks as $index => $paragraph_block) { $debug_block_active = $debug_positions === '' && in_array ($ai_wp_data [AI_WP_DEBUG_BLOCK], $paragraph_block ['blocks']); $block_class = $debug_block_active ? ' on' : ''; // $block_class = $debug_positions === '' && in_array ($ai_wp_data [AI_WP_DEBUG_BLOCK], $paragraph_block ['blocks']) ? ' on' : ''; $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-positions-'.$index, 'parent' => 'ai-toolbar-positions', 'title' => ''. $paragraph_block ['tags']. ($paragraph_block ['direction'] == 'b' ? ' ' : ''). ($paragraph_block ['min'] != 0 ? ' min '.$paragraph_block ['min']. ' ' : ''). ($paragraph_block ['max'] != 0 ? ' max '.$paragraph_block ['max']. ' ' : ''). ($paragraph_block ['blockquote'] ? ' +[' . $no_paragraph_counting_inside . '] ' : ''). ($paragraph_block ['text'] != '' ? ($paragraph_block ['text_type'] == AI_DO_NOT_CONTAIN ? ' !has ' : ' has ').' ['.htmlentities ($paragraph_block ['text']).']' : ''). ($paragraph_block ['inside_elemets'] != '' ? ($paragraph_block ['inside_type'] == AI_COUNT_ONLY ? ' insEL' : ' !insEL ').' ['.$paragraph_block ['inside_elemets'].']' : ''). ($paragraph_block ['contain_text'] != '' ? ($paragraph_block ['contain_type'] == AI_CONTAIN ? ' elHAS' : ' !elHAS ').' ['.htmlentities ($paragraph_block ['contain_text']).']' : ''), // 'href' => set_url_parameter (AI_URL_DEBUG_POSITIONS, $paragraph_block ['blocks'][0]), 'href' => set_url_parameter (AI_URL_DEBUG_POSITIONS, $debug_block_active ? '' : $paragraph_block ['blocks'][0]), ); } $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-tags', 'parent' => 'ai-toolbar-settings', 'title' => '' . _x('Show HTML Tags', 'Menu item', 'ad-inserter'), 'href' => set_url_parameter (AI_URL_DEBUG_TAGS, $debug_tags), ); $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-no-insertion', 'parent' => 'ai-toolbar-settings', 'title' => '' . _x('Disable Insertion', 'Menu item', 'ad-inserter'), 'href' => set_url_parameter (AI_URL_DEBUG_NO_INSERTION, $debug_no_insertion), ); if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { if ($ai_wp_data [AI_ADB_DETECTION]) { $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-adb-status', 'parent' => 'ai-toolbar-settings', 'title' => '' . _x('Ad Blocking Status', 'Menu item', 'ad-inserter'), 'href' => set_url_parameter (AI_URL_DEBUG_AD_BLOCKING_STATUS, $debug_ad_blocking_status), ); $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-adb', 'parent' => 'ai-toolbar-settings', 'title' => '' . _x('Simulate Ad Blocking', 'Menu item', 'ad-inserter'), 'href' => set_url_parameter (AI_URL_DEBUG_AD_BLOCKING, $debug_ad_blocking), ); } } if (!defined ('AI_DEBUGGING_DEMO')) { $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-processing', 'parent' => 'ai-toolbar-settings', 'title' => '' . _x('Log Processing', 'Menu item', 'ad-inserter'), 'href' => set_url_parameter (AI_URL_DEBUG_PROCESSING, $debug_processing), ); $ai_wp_data [AI_DEBUG_MENU_ITEMS][] = array ( 'id' => 'ai-toolbar-processing-fe', 'parent' => 'ai-toolbar-processing', 'title' => '' . _x('Show Log', 'Menu item', 'ad-inserter'), 'href' => set_url_parameter (AI_URL_DEBUG_PROCESSING_FE, $debug_processing_fe), ); } } function ai_toolbar ($wp_admin_bar) { global $ai_wp_data; ai_toolbar_menu_items (); foreach ($ai_wp_data [AI_DEBUG_MENU_ITEMS] as $menu_item) { $wp_admin_bar->add_node ($menu_item); } } function set_user () { global $ai_wp_data; if ($ai_wp_data [AI_WP_USER_SET]) return; if (is_user_logged_in ()) $ai_wp_data [AI_WP_USER] |= AI_USER_LOGGED_IN; if (current_user_role () >= 5) $ai_wp_data [AI_WP_USER] |= AI_USER_ADMINISTRATOR; // if (isset ($_GET [AI_URL_DEBUG_USER]) && $_GET [AI_URL_DEBUG_USER] != 0) $ai_wp_data [AI_WP_USER] = $_GET [AI_URL_DEBUG_USER]; $ai_wp_data [AI_WP_USER_SET] = true; } function set_page_type () { global $ai_wp_data, $wp_query; if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_NONE) return; if (is_front_page ()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_HOMEPAGE; elseif (is_single()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_POST; elseif (is_page()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_STATIC; elseif (is_feed()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_FEED; elseif (is_category()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_CATEGORY; elseif (is_archive() || (is_home () && !is_front_page ())) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_ARCHIVE; elseif (is_admin()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_ADMIN; // Admin pages may also be search pages or ajax requests elseif (is_search()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_SEARCH; elseif (is_404()) $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_404; if ( // AMP, AMP WP function_exists ('is_amp_endpoint') && is_amp_endpoint () || // AMP WP function_exists ('is_amp_wp') && is_amp_wp ($wp_query) || // AMP for WP - Accelerated Mobile Pages for WordPress function_exists ('ampforwp_is_amp_endpoint') && ampforwp_is_amp_endpoint () || // WP AMP Ninja isset ($_GET ['wpamp']) || // WP AMP - Accelerated Mobile Pages for WordPress function_exists ('is_wp_amp') && is_wp_amp () || // Better AMP - WordPress Complete AMP function_exists ('is_better_amp') && is_better_amp ($wp_query) || // PenCi Soledad AMP - WordPress Complete AMP function_exists ('is_penci_amp') && is_penci_amp ($wp_query) ) { $ai_wp_data [AI_WP_AMP_PAGE] = true; define ('AI_AMP_PAGE', true); } } function ai_log_message ($message) { global $ai_last_time, $ai_processing_log; $ai_processing_log []= rtrim (sprintf ("%4d %-50s", (microtime (true) - $ai_last_time) * 1000, $message)); } function ai_log_filter_content ($content_string) { $content_string = preg_replace ("/\[\[AI_[A|B]P([\d].?)\]\]/", "", $content_string); return str_replace (array ("", "\n", "\r"), array ("", "*n", "*r"), $content_string); } function ai_log_content (&$content) { if (strlen ($content) < 100) ai_log (ai_log_filter_content ($content) . ' ['.number_of_words ($content).' words]'); else ai_log (ai_log_filter_content (html_entity_decode (substr ($content, 0, 60))) . ' ... ' . ai_log_filter_content (html_entity_decode (substr ($content, - 60))) . ' ['.number_of_words ($content).' words]'); } function ai_filter_code ($code) { $code = preg_replace ("/\[\[AI_[A|B]P([\d].?)\]\]/", "", $code); return str_replace (array (""), array (""), $code); } function ai_dump_code ($code, $max_size = 0) { if ($max_size == 0) return ai_filter_code ($code); else if ($max_size != 0 && strlen ($code) < $max_size) return ai_filter_code ($code); else return ai_filter_code (html_entity_decode (substr ($code, 0, 120))) . ' ... ' . ai_filter_code (html_entity_decode (substr ($code, - 120))); } function ai_block_insertion_status ($block, $ai_last_check) { global $block_object; if ($block < 1 || $block > 96) $block = 0; if ($ai_last_check == AI_CHECK_INSERTED) return "INSERTED"; $status = "FAILED CHECK: "; $obj = $block_object [$block]; switch ($ai_last_check) { case AI_CHECK_PAGE_TYPE_FRONT_PAGE: $status .= "ENABLED ON HOMEPAGE"; break; case AI_CHECK_PAGE_TYPE_STATIC_PAGE: $status .= "ENABLED ON STATIC PAGE"; break; case AI_CHECK_PAGE_TYPE_POST: $status .= "ENABLED ON POST"; break; case AI_CHECK_PAGE_TYPE_CATEGORY: $status .= "ENABLED ON CATEGORY"; break; case AI_CHECK_PAGE_TYPE_SEARCH: $status .= "ENABLED ON SEARCH"; break; case AI_CHECK_PAGE_TYPE_ARCHIVE: $status .= "ENABLED ON ARCHIVE"; break; case AI_CHECK_PAGE_TYPE_FEED: $status .= "ENABLED ON FEED"; break; case AI_CHECK_PAGE_TYPE_404: $status .= "ENABLED ON 404"; break; case AI_CHECK_DESKTOP_DEVICES: $status .= "DESKTOP DEVICES"; break; case AI_CHECK_MOBILE_DEVICES: $status .= "MOBILE DEVICES"; break; case AI_CHECK_TABLET_DEVICES: $status .= "TABLET DEVICES"; break; case AI_CHECK_PHONE_DEVICES: $status .= "PHONE DEVICES"; break; case AI_CHECK_DESKTOP_TABLET_DEVICES: $status .= "DESKTOP TABLET DEVICES"; break; case AI_CHECK_DESKTOP_PHONE_DEVICES: $status .= "DESKTOP PHONE DEVICES"; break; case AI_CHECK_CATEGORY: $status .= "CATEGORY"; break; case AI_CHECK_TAG: $status .= "TAG"; break; case AI_CHECK_TAXONOMY: $status .= "TAXONOMY"; break; case AI_CHECK_ID: $status .= "ID"; break; case AI_CHECK_URL: $status .= "URL"; break; case AI_CHECK_URL_PARAMETER: $status .= "URL PARAMETER"; break; case AI_CHECK_COOKIE: $status .= "COOKIE"; break; case AI_CHECK_REFERER: $status .= "REFERRER ". $obj->get_ad_domain_list(); break; case AI_CHECK_CLIENT: $status .= "CLIENT ". $obj->get_client_list(); break; case AI_CHECK_IP_ADDRESS: $status .= "IP ADDRESS ". $obj->get_ad_ip_address_list(); break; case AI_CHECK_COUNTRY: $status .= "COUNTRY ". $obj->get_ad_country_list (true); break; case AI_CHECK_SCHEDULING: $status .= "SCHEDULING"; break; case AI_CHECK_CODE: $status .= "CODE EMPTY"; break; case AI_CHECK_LOGGED_IN_USER: $status .= "LOGGED-IN USER"; break; case AI_CHECK_NOT_LOGGED_IN_USER: $status .= "NOT LOGGED-IN USER"; break; case AI_CHECK_ADMINISTRATOR: $status .= "ADMINISTRATOR"; break; case AI_CHECK_INDIVIDUALLY_DISABLED: $status .= "INDIVIDUALLY DISABLED"; break; case AI_CHECK_INDIVIDUALLY_ENABLED: $status .= "INDIVIDUALLY ENABLED"; break; case AI_CHECK_DISABLED_MANUALLY: $status .= "DISABLED BY SHORTCODE"; break; case AI_CHECK_MAX_INSERTIONS: $status .= "MAX INSERTIONS " . $obj->get_maximum_insertions (); break; case AI_CHECK_MAX_PAGE_BLOCKS: $status .= "MAX PAGE BLOCKS " . get_max_page_blocks (); break; case AI_CHECK_FILTER: $status .= ($obj->get_inverted_filter() ? 'INVERTED ' : '') . "FILTER " . $obj->get_call_filter(); break; case AI_CHECK_PARAGRAPH_COUNTING: $status .= "PARAGRAPH COUNTING"; break; case AI_CHECK_IMAGE_COUNTING: $status .= "IMAGE COUNTING"; break; case AI_CHECK_MIN_NUMBER_OF_WORDS: $status .= "MIN NUMBER OF WORDS " . intval ($obj->get_minimum_words()); break; case AI_CHECK_MAX_NUMBER_OF_WORDS: $status .= "MAX NUMBER OF WORDS " . (intval ($obj->get_maximum_words()) == 0 ? 1000000 : intval ($obj->get_maximum_words())); break; case AI_CHECK_DEBUG_NO_INSERTION: $status .= "DEBUG NO INSERTION"; break; case AI_CHECK_MAX_IMPRESSIONS: $status .= "MAX IMPRESSIONS"; break; case AI_CHECK_LIMIT_IMPRESSIONS_PER_TIME_PERIOD: $status .= "LIMIT IMPRESSIONS PER TIME PERIOD"; break; case AI_CHECK_MAX_CLICKS: $status .= "MAX CLICKS"; break; case AI_CHECK_LIMIT_CLICKS_PER_TIME_PERIOD: $status .= "LIMIT CLICKS PER TIME PERIOD"; break; case AI_CHECK_CFP_IP_ADDRESS: $status .= "CLICK FRAUD PROTECTION IP ADDRESS"; break; case AI_CHECK_INSERTION_NOT_DISABLED: $status .= "INSERTION PAUSED"; break; case AI_CHECK_PARAGRAPH_TAGS: $status .= "PARAGRAPH TAGS"; break; case AI_CHECK_PARAGRAPHS_WITH_TAGS: $status .= "PARAGRAPHS WITH TAGS"; break; case AI_CHECK_PARAGRAPHS_AFTER_NO_COUNTING_INSIDE: $status .= "PARAGRAPHS AFTER NO COUNTING INSIDE"; break; case AI_CHECK_PARAGRAPHS_AFTER_NO_COUNTING_INSIDE_ELEMENTS: $status .= "PARAGRAPHS AFTER NO COUNTING INSIDE ELEMENTS"; break; case AI_CHECK_PARAGRAPHS_AFTER_MIN_MAX_WORDS: $status .= "PARAGRAPHS AFTER MIN MAX WORDS"; break; case AI_CHECK_PARAGRAPHS_AFTER_TEXT: $status .= "PARAGRAPHS AFTER TEXT"; break; case AI_CHECK_PARAGRAPHS_AFTER_CLEARANCE: $status .= "PARAGRAPHS AFTER CLEARANCE"; break; case AI_CHECK_PARAGRAPHS_MIN_NUMBER: $status .= "PARAGRAPHS MIN NUMBER"; break; case AI_CHECK_PARAGRAPHS_MAX_NUMBER: $status .= "PARAGRAPHS MAX NUMBER"; break; case AI_CHECK_PARAGRAPH_NUMBER: $status .= "PARAGRAPH NUMBER " . $obj->get_paragraph_number(); break; case AI_CHECK_NO_PARAGRAPHS: $status .= "NO PARAGRAPHS"; break; case AI_CHECK_DO_NOT_INSERT: $status .= "PARAGRAPH CLEARANCE"; break; case AI_CHECK_AD_ABOVE: $status .= "PARAGRAPH CLEARANCE ABOVE"; break; case AI_CHECK_AD_BELOW: $status .= "PARAGRAPH CLEARANCE BELOW"; break; case AI_CHECK_SHORTCODE_ATTRIBUTES: $status .= "SHORTCODE ATTRIBUTES"; break; case AI_CHECK_ENABLED_PHP: $status .= "PHP FUNCTION ENABLED"; break; case AI_CHECK_ENABLED_SHORTCODE: $status .= "SHORTCODE ENABLED"; break; case AI_CHECK_ENABLED_WIDGET: $status .= "WIDGET ENABLED"; break; case AI_CUSTOM_FILTER_CHECK: $status .= "CUSTOM FILTER HOOK CHECK"; break; case AI_CHECK_NONE: $status = "BLOCK $block"; break; default: $status .= "?"; break; } $ai_last_check = AI_CHECK_NONE; return $status; } function ai_log_block_status ($block, $ai_last_check) { global $block_object, $block_insertion_log, $ad_inserter_globals, $ai_wp_data; if ($block >= 1 && $ai_last_check == AI_CHECK_INSERTED) { $obj = $block_object [$block]; $global_name = AI_BLOCK_COUNTER_NAME . $block; if ($obj->check_code_insertions !== null) { $block_insertion_log [] = sprintf ("% 2d BLOCK % 2d %s %s%s", $block, $block, 'CHECK', '('.$obj->check_code_insertions . ')', $ad_inserter_globals [$global_name] != 1 ? '['.$ad_inserter_globals [$global_name] . ']' : ''); return ''; } elseif ($obj->no_insertion_text != '') { $block_insertion_log [] = sprintf ("% 2d BLOCK % 2d %s %s", $block, $block, $obj->no_insertion_text, $ad_inserter_globals [$global_name] != 1 ? '['.$ad_inserter_globals [$global_name] . ']' : ''); return ''; } } return ai_log_block_insertion_status ($block, $ai_last_check); } function ai_log_block_insertion_status ($block, $ai_last_check) { global $block_insertion_log, $ad_inserter_globals; if ($block < 1) return 'NO BLOCK SHORTCODE'; $global_name = AI_BLOCK_COUNTER_NAME . $block; $block_status = ai_block_insertion_status ($block, $ai_last_check); $block_insertion_log [] = sprintf ("% 2d BLOCK % 2d %s %s", $block, $block, $block_status, $ai_last_check == AI_CHECK_INSERTED && $ad_inserter_globals [$global_name] != 1 ? '['.$ad_inserter_globals [$global_name] . ']' : ''); return "BLOCK $block " . $block_status; } function ai_log ($message = "") { global $ai_last_time, $ai_processing_log; if ($message != "") { if ($message [strlen ($message) - 1] == "\n") { ai_log_message (str_replace ("\n", "", $message)); $ai_processing_log []= ""; } else ai_log_message ($message); } else $ai_processing_log []= ""; $ai_last_time = microtime (true); } function remove_debug_parameters_from_url ($url = false) { if (defined ('AI_DEBUGGING_DEMO')) { $parameters = array (AI_URL_DEBUG, AI_URL_DEBUG_PROCESSING, AI_URL_DEBUG_PROCESSING_FE); } else { $parameters = array ( AI_URL_DEBUG, AI_URL_DEBUG_PROCESSING, AI_URL_DEBUG_PROCESSING_FE, AI_URL_DEBUG_PHP, AI_URL_DEBUG_BLOCKS, AI_URL_DEBUG_CODE, AI_URL_DEBUG_USER, AI_URL_DEBUG_TAGS, AI_URL_DEBUG_POSITIONS, AI_URL_DEBUG_NO_INSERTION, AI_URL_DEBUG_JAVASCRIPT, AI_URL_DEBUG_AD_BLOCKING, AI_URL_DEBUG_AD_BLOCKING_STATUS, AI_URL_DEBUG_COUNTRY, AI_URL_DEBUG_IP_ADDRESS, AI_URL_DEBUG_DISABLE_CSS_CODE, AI_URL_DEBUG_DISABLE_JS_CODE, AI_URL_DEBUG_DISABLE_PHP_PROCESSING, AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS, AI_URL_DEBUG_DISABLE_HEADER_CODE, AI_URL_DEBUG_DISABLE_FOOTER_CODE, ); if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { $parameters = array_merge ($parameters, array (AI_URL_DEBUG_AD_BLOCKING, AI_URL_DEBUG_AD_BLOCKING_STATUS)); } } return remove_query_arg ($parameters, $url); } function set_url_parameter ($parameter, $value) { return add_query_arg ($parameter, $value, remove_debug_parameters_from_url ()); } function number_of_words (&$content) { $text = str_replace ("\r", "", $content); $text = str_replace (array ("\n", " "), " ", $text); $text = preg_replace('#(.*?)#i', '', $text); $text = preg_replace('#(.*?)#i', '', $text); $text = htmlspecialchars_decode ($text); $text = trim (strip_tags ($text)); $text = preg_replace ('#\s+#', ' ', $text); if ($text == '') return 0; return count (explode (' ', $text)); } function ai_loop_check ($query, $action) { global $ai_wp_data; $ai_wp_data [AI_CONTEXT] = $action == 'loop_start' ? AI_CONTEXT_BEFORE_POST : AI_CONTEXT_AFTER_POST; if ($ai_wp_data [AI_WP_AMP_PAGE]) return true; if ($action == 'loop_end' && !method_exists ($query, 'is_main_query') && method_exists ($wp_query, 'is_main_query')) { $query = $wp_query; } if (isset ($query) && method_exists ($query, 'is_main_query')) { if ($query->is_main_query()) { if (isset ($ai_wp_data [AI_HEAD]) && !$ai_wp_data [AI_HEAD]) { return true; } } } return false; } function ai_process_head_codes ($head) { global $ai_wp_data; if (!get_disable_header_code ()) { if (!empty ($ai_wp_data [AI_HEAD_CODES])) { $head = str_replace ("", implode ("\n", $ai_wp_data [AI_HEAD_CODES]) . "\n", $head); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0) { $head = str_replace ("<!--[AI_HEAD_CODES]-->", '' . str_replace (array ('<', '>'), array ('<', '>'), implode ("\\n", $ai_wp_data [AI_HEAD_CODES])) . '', $head); } } foreach ($ai_wp_data [AI_HEAD_GROUPS] as $group_name => $group_codes) { $group_code = implode ("\n", $group_codes); $head = str_replace ("", $group_code, $head); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0) { $head = str_replace ("<!--[AI_HEAD_GROUPS $group_name]-->", str_replace (array ('<', '>'), array ('<', '>'), implode ("\\n", $group_codes)), $head); } } } $head = preg_replace ("##", '', $head); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0) { $head = preg_replace ("#<!--\[AI(.+?)\]-->#", '', $head); } $head = preg_replace ("#\n#", '', $head); return ($head); } // Not used function ai_buffering_start_hook () { global $ai_wp_data; if (defined ('AI_BUFFERING')) { if (get_output_buffering ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { ai_buffering_start (); } } } } function ai_buffering_start () { global $ai_wp_data; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("BUFFERING START: level " . ob_get_level () ); } ob_start (); if (!defined ('AI_BUFFERING_START')) define ('AI_BUFFERING_START', true); } function ai_buffering_end () { global $ai_wp_data, $ai_total_plugin_time, $ai_db_options_extract, $block_object, $ad_inserter_globals; if (!defined ('AI_BUFFERING_START')) return; $page = ob_get_clean(); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("BUFFERING END: level " . ob_get_level ()); $start_time = microtime (true); } $matches = preg_split ('/()/i', $page, - 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("BUFFER body tag matches: " . (count ($matches) - 1) / 2); ai_log ("PHP VERSION COMPARE to 5.4: " . (version_compare (phpversion (), "5.4", ">=") ? 'YES' : 'NO')); if (count ($matches) > 3) { ai_log ("NO BUFFER PROCESSING - more than one body tag found"); } if (version_compare (phpversion (), "5.4", "<")) { ai_log ("NO BUFFER PROCESSING - PHP version below 5.4"); } } if (version_compare (phpversion (), "5.4", ">=") && count ($matches) == 3) { if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("BUFFER PROCESSING"); } $head = $matches [0]; $body_tag = $matches [1]; $body = $matches [2]; if (isset ($ai_wp_data [AI_BODY_STYLE])) { if (preg_match ('#style=[\'"](.*?)[\'"]#i', $body_tag, $body_style)) { $old_style = $body_style [1]; if ($old_style != '') { $old_style = trim ($old_style, ' ;'); if ($old_style != '') { $old_style .= '; '; } } $new_style = $old_style . $ai_wp_data [AI_BODY_STYLE]; $body_tag = str_ireplace ($body_style [0], 'style="'.$new_style.'"', $body_tag); } else { $body_tag = str_replace ('>', ' style="' . $ai_wp_data [AI_BODY_STYLE] . '">', $body_tag); } } $body = preg_replace ('/\n/", '', $body); if (isset ($ai_db_options_extract [HTML_ELEMENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && class_exists ('DOMDocument')) { $php_version = explode ('.', PHP_VERSION); if ($php_version [0] >= 8) { // phpQuery for PHP 8 require_once ('includes/phpQuery_8.php'); } else // phpQuery for PHP 5.6 to PHP 7 require_once ('includes/phpQuery.php'); $no_closing_tag = array ('img', 'hr', 'br'); $multibyte = $ai_wp_data [AI_MBSTRING_LOADED] && get_paragraph_counting_functions() == AI_MULTIBYTE_PARAGRAPH_COUNTING_FUNCTIONS; foreach ($ai_db_options_extract [HTML_ELEMENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { $obj = $block_object [$block]; $obj->clear_code_cache (); switch ($obj->get_automatic_insertion ()) { case AI_AUTOMATIC_INSERTION_BEFORE_HTML_ELEMENT: $insertion_position = 'before'; break; case AI_AUTOMATIC_INSERTION_AFTER_HTML_ELEMENT: $insertion_position = 'after'; break; case AI_AUTOMATIC_INSERTION_INSIDE_HTML_ELEMENT: switch ($obj->get_inside_element ()) { case AI_HTML_PREPEND_CONTENT: $insertion_position = 'prepend'; break; case AI_HTML_APPEND_CONTENT: $insertion_position = 'append'; break; case AI_HTML_REPLACE_CONTENT: $insertion_position = 'replace-content'; break; case AI_HTML_REPLACE_ELEMENT: $insertion_position = 'replace-element'; break; } break; } $selector = $obj->get_html_selector (); libxml_use_internal_errors (true); $content = phpQuery::newDocumentHTML ($body); libxml_use_internal_errors (false); foreach (pq ($selector) as $element) { if (in_array ($element->tagName, $no_closing_tag)) { switch ($insertion_position) { case 'replace-content': case 'prepend': case 'append': $insertion_position = 'after'; break; } } switch ($insertion_position) { case 'before': pq ($element)->before (AI_MARKER_START.$element->tagName.AI_MARKER_END); break; case 'after': pq ($element)->after (AI_MARKER_START.$element->tagName.AI_MARKER_END); break; case 'prepend': pq ($element)->prepend (AI_MARKER_START.$element->tagName.AI_MARKER_END); break; case 'append': pq ($element)->append (AI_MARKER_START.$element->tagName.AI_MARKER_END); break; case 'replace-content': pq ($element)->prepend (AI_MARKER_START.'-'.$element->tagName.'-'.AI_MARKER_END); pq ($element)->append (AI_MARKER_START.'='.$element->tagName.'='.AI_MARKER_END); break; case 'replace-element': pq ($element)->before (AI_MARKER_START.'-'.$element->tagName.'-'.AI_MARKER_END); pq ($element)->after (AI_MARKER_START.'='.$element->tagName.'='.AI_MARKER_END); break; } } switch ($insertion_position) { case 'replace-content': case 'replace-element': $markers = preg_split ('/('.AI_MARKER_START.'-.*?-'.AI_MARKER_END.')/', $content->htmlOuter (), - 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $markers2 = preg_split ('/('.AI_MARKER_START.'=.*?='.AI_MARKER_END.')/', $content->htmlOuter (), - 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); break; default: $markers = preg_split ('/('.AI_MARKER_START.'.*?'.AI_MARKER_END.')/', $content->htmlOuter (), - 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); break; } $content_before = ''; $insertions = array (); foreach ($markers as $marker) { switch ($insertion_position) { case 'replace-content': case 'replace-element': $marker_start_string = AI_MARKER_START.'-'; break; default: $marker_start_string = AI_MARKER_START; break; } if (strpos ($marker, $marker_start_string) === 0) { switch ($insertion_position) { case 'replace-content': case 'replace-element': $tag = str_replace (array (AI_MARKER_START.'-', '-'.AI_MARKER_END), '', $marker); break; default: $tag = str_replace (array (AI_MARKER_START, AI_MARKER_END), '', $marker); break; } switch ($insertion_position) { case 'before': case 'replace-element': $tag_string = "<{$tag}"; break; case 'after': if (in_array ($tag, $no_closing_tag)) $tag_string = '>'; else $tag_string = ""; break; case 'prepend': case 'replace-content': $tag_string = "<{$tag}[^>]*>"; break; case 'append': $tag_string = ""; break; } preg_match_all ("#{$tag_string}#i", $content_before, $tag_matches); switch ($insertion_position) { case 'before': case 'replace-element': $insertions []= array ($tag_string, count ($tag_matches [0]) + 1); break; case 'after': $insertions []= array ($tag_string, count ($tag_matches [0])); break; case 'replace-content': case 'prepend': $insertions []= array ($tag_string, count ($tag_matches [0])); break; case 'append': $insertions []= array ($tag_string, count ($tag_matches [0]) + 1); break; } continue; } $content_before .= $marker; } switch ($insertion_position) { case 'replace-content': case 'replace-element': $content_before = ''; $insertions2 = array (); foreach ($markers2 as $marker) { if (strpos ($marker, AI_MARKER_START.'=') === 0) { $tag = str_replace (array (AI_MARKER_START.'=', '='.AI_MARKER_END), '', $marker); $tag_string = ""; preg_match_all ("#{$tag_string}#i", $content_before, $tag_matches); switch ($insertion_position) { case 'replace-content': $insertions2 []= array ($tag_string, count ($tag_matches [0]) + 1); break; case 'replace-element': $insertions2 []= array ($tag_string, count ($tag_matches [0])); break; } continue; } $content_before .= $marker; } break; } $insertion_offsets = array (); foreach ($insertions as $insertion) { $tag = $insertion [0]; $tag_counter = $insertion [1]; preg_match_all ("#$tag#i", $body, $org_tag_matches, PREG_OFFSET_CAPTURE); if (isset ($org_tag_matches [0][$tag_counter - 1])) { switch ($insertion_position) { case 'before': case 'replace-element': $insertion_offsets []= $org_tag_matches [0][$tag_counter - 1][1]; break; case 'after': $insertion_offsets []= $org_tag_matches [0][$tag_counter - 1][1] + strlen ($tag); break; case 'prepend': case 'replace-content': $insertion_offsets []= $org_tag_matches [0][$tag_counter - 1][1] + strlen ($org_tag_matches [0][$tag_counter - 1][0]); break; case 'append': $insertion_offsets []= $org_tag_matches [0][$tag_counter - 1][1]; break; } } } sort ($insertion_offsets); switch ($insertion_position) { case 'replace-content': case 'replace-element': $insertion_offsets2 = array (); foreach ($insertions2 as $insertion) { $tag = $insertion [0]; $tag_counter = $insertion [1]; preg_match_all ("#$tag#i", $body, $org_tag_matches, PREG_OFFSET_CAPTURE); if (isset ($org_tag_matches [0][$tag_counter - 1])) { switch ($insertion_position) { case 'replace-content': $insertion_offsets2 []= $org_tag_matches [0][$tag_counter - 1][1]; break; case 'replace-element': $insertion_offsets2 []= $org_tag_matches [0][$tag_counter - 1][1] + strlen ($tag); break; } } } sort ($insertion_offsets2); break; } $new_content = ''; $current_offset = 0; switch ($insertion_position) { case 'before': $action = 'before_html_element'; // translators: Debugging position name Before HTML element $action_name = __('Before', 'ad-inserter') . ' ' . $selector; break; case 'after': $action = 'after_html_element'; // translators: Debugging position name After HTML element $action_name = __('After', 'ad-inserter') . ' ' . $selector; break; case 'prepend': $action = 'prepend_html_element'; // translators: Debugging position name Prepend content of HTML element (before the content of the HTML element) $action_name = __('Prepend content', 'ad-inserter') . ' ' . $selector; break; case 'append': $action = 'append_html_element'; // translators: Debugging position name Append content of HTML element (after the content of the HTML element) $action_name = __('Append content', 'ad-inserter') . ' ' . $selector; break; case 'replace-content': $action = 'replace_content_html_element'; // translators: Debugging position name Replace content of HTML element $action_name = __('Replace content', 'ad-inserter') . ' ' . $selector; break; case 'replace-element': // translators: Debugging position name Replace HTML element $action = 'replace_html_element'; $action_name = __('Replace', 'ad-inserter') . ' ' . $selector; break; } $globals_name = 'AI_' . strtoupper ($action) . '_COUNTER'; unset ($ad_inserter_globals [$globals_name]); $ai_db_options_extract [$action . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] = array ($block); foreach ($insertion_offsets as $index => $insertion_offset) { if ($multibyte) $new_content .= mb_substr ($body, $current_offset, $insertion_offset - $current_offset); $new_content .= substr ($body, $current_offset, $insertion_offset - $current_offset); switch ($insertion_position) { case 'replace-content': case 'replace-element': if (isset ($insertion_offsets2 [$index])) { $current_offset = $insertion_offsets2 [$index]; } else $current_offset = $insertion_offset; break; default: $current_offset = $insertion_offset; break; } ob_start (); // Dummy ai_custom_hook ($action, AI_AUTOMATIC_INSERTION_DISABLED, $action_name); $new_content .= ob_get_clean(); } unset ($ai_db_options_extract [$action . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]); $new_content .= substr ($body, $current_offset); $body = $new_content; } } $head = ai_process_head_codes ($head); echo $head, $body_tag; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) != 0) { $class = AI_DEBUG_STATUS_CLASS.' status-ok'; // translators: Debugging message when output buffering is enabled echo "
    " . __('OUTPUT BUFFERING', 'ad-inserter') . '
    '; } // translators: Debugging position ai_custom_hook ('above_header', AI_AUTOMATIC_INSERTION_ABOVE_HEADER, 'Above Header', __('Above Header', 'ad-inserter')); echo $body; } else echo $page; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("BUFFER PROCESSING END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); // $ai_wp_data [AI_PROCESSING_TIME] = false; } } function ai_post_check ($post, $action) { global $ai_wp_data, $ad_inserter_globals; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST) return false; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) return false; // Don't use the hook before the wp_head hook ends if (!isset ($ai_wp_data [AI_HEAD]) || $ai_wp_data [AI_HEAD]) { return false; } // in_the_loop () is not used on AMP pages (however, AMP plugin uses it) switch ($ai_wp_data [AI_WP_AMP_PAGE]) { case true: if ($ai_wp_data [AI_POST_POSITION] != AI_POST_POSITION_IN_POST) return false; // include_once (ABSPATH . 'wp-admin/includes/plugin.php'); // if (is_plugin_active ('amp/amp.php')) { // if (!in_the_loop()) return false; // } else { // // For other AMP plugins // if ($ai_wp_data [AI_POST_POSITION] != AI_POST_POSITION_IN_POST) return false; // } break; default: if (!in_the_loop()) return false; break; } // Skip insertion before the first post if (!defined ('AI_POST_CHECK')) { define ('AI_POST_CHECK', true); return false; } $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_BETWEEN_POSTS; return true; } function ai_content_marker () { global $ai_wp_data; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_AJAX || get_disable_html_code ()) return; echo '', "\n"; } function ai_mark_loop_start () { global $ai_wp_data; $ai_wp_data [AI_POST_POSITION] = AI_POST_POSITION_IN_POST; } function ai_mark_loop_end () { global $ai_wp_data; $ai_wp_data [AI_POST_POSITION] = AI_POST_POSITION_AFTER_POST; } function ai_hook_function_loop_start ($hook_parameter) { ai_custom_hook ('loop_start', AI_AUTOMATIC_INSERTION_BEFORE_POST, AI_TEXT_ENG_BEFORE_POST, AI_TEXT_BEFORE_POST, $hook_parameter, 'ai_loop_check'); } function ai_hook_function_loop_end ($hook_parameter) { ai_custom_hook ('loop_end', AI_AUTOMATIC_INSERTION_AFTER_POST, AI_TEXT_ENG_AFTER_POST, AI_TEXT_AFTER_POST, $hook_parameter, 'ai_loop_check'); } function ai_hook_function_post ($hook_parameter) { ai_custom_hook ('the_post', AI_AUTOMATIC_INSERTION_BETWEEN_POSTS, AI_TEXT_ENG_BETWEEN_POSTS, AI_TEXT_BETWEEN_POSTS, $hook_parameter, 'ai_post_check'); } function ai_hook_function_footer () { ai_custom_hook ('wp_footer', AI_AUTOMATIC_INSERTION_FOOTER, AI_TEXT_ENG_FOOTER, AI_TEXT_FOOTER); } // Code for PHP VERSION >= 5.3.0 //function ai_get_custom_hook_function ($action, $insertion_type, $name) { // return function () use ($action, $insertion_type, $name) { // ai_custom_hook ($action, $insertion_type, $name); // }; //} // Code for PHP VERSION < 5.3.0 function ai_custom_hook_function_0 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [0]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [0]['index'] - 1, $ai_custom_hooks [0]['name']); } function ai_custom_hook_function_1 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [1]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [1]['index'] - 1, $ai_custom_hooks [1]['name']); } function ai_custom_hook_function_2 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [2]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [2]['index'] - 1, $ai_custom_hooks [2]['name']); } function ai_custom_hook_function_3 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [3]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [3]['index'] - 1, $ai_custom_hooks [3]['name']); } function ai_custom_hook_function_4 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [4]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [4]['index'] - 1, $ai_custom_hooks [4]['name']); } function ai_custom_hook_function_5 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [5]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [5]['index'] - 1, $ai_custom_hooks [5]['name']); } function ai_custom_hook_function_6 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [6]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [6]['index'] - 1, $ai_custom_hooks [6]['name']); } function ai_custom_hook_function_7 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [7]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [7]['index'] - 1, $ai_custom_hooks [7]['name']); } function ai_custom_hook_function_8 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [8]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [8]['index'] - 1, $ai_custom_hooks [8]['name']); } function ai_custom_hook_function_9 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [9]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [9]['index'] - 1, $ai_custom_hooks [9]['name']); } function ai_custom_hook_function_10 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [10]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [10]['index'] - 1, $ai_custom_hooks [10]['name']); } function ai_custom_hook_function_11 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [11]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [11]['index'] - 1, $ai_custom_hooks [11]['name']); } function ai_custom_hook_function_12 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [12]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [12]['index'] - 1, $ai_custom_hooks [12]['name']); } function ai_custom_hook_function_13 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [13]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [13]['index'] - 1, $ai_custom_hooks [13]['name']); } function ai_custom_hook_function_14 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [14]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [14]['index'] - 1, $ai_custom_hooks [14]['name']); } function ai_custom_hook_function_15 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [15]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [15]['index'] - 1, $ai_custom_hooks [15]['name']); } function ai_custom_hook_function_16 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [16]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [16]['index'] - 1, $ai_custom_hooks [16]['name']); } function ai_custom_hook_function_17 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [17]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [17]['index'] - 1, $ai_custom_hooks [17]['name']); } function ai_custom_hook_function_18 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [18]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [18]['index'] - 1, $ai_custom_hooks [18]['name']); } function ai_custom_hook_function_19 () { global $ai_custom_hooks; ai_custom_hook ($ai_custom_hooks [19]['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $ai_custom_hooks [19]['index'] - 1, $ai_custom_hooks [19]['name']); } function ai_wp_hook () { global $ai_wp_data, $ai_db_options_extract, $ad_inserter_globals, $ai_total_plugin_time, $ai_walker, $ai_custom_hooks, $block_object; if (defined ('AI_WP_HOOK')) return; define ('AI_WP_HOOK', true); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("WP HOOK START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } set_page_type (); set_user (); ai_http_header (); if (defined ('AI_NO_JQUERY')) { // Check again if the constant is defined in the wp_head hook $ai_wp_data [AI_NO_JQUERY_CODE] = true; } if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 && get_disable_caching ()) ai_disable_caching (); if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0) { $ai_wp_data [AI_HTML_ELEMENT_SELECTION] = isset ($_POST ['html_element_selection']) ? (bool) $_POST ['html_element_selection'] : false; } if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_ADMIN && ($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 && get_admin_toolbar_debugging () && (!is_multisite() || is_main_site () || multisite_settings_page_enabled ())) add_action ('admin_bar_menu', 'ai_toolbar', 9920); $url_debugging = get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 || defined ('AI_DEBUGGING_DEMO'); if (!is_admin() || defined ('DOING_AJAX') || defined ('AI_DEBUGGING_DEMO')) { if (isset ($_GET [AI_URL_DEBUG]) && $_GET [AI_URL_DEBUG] == 0) { if (isset ($_COOKIE ['AI_WP_DEBUGGING'])) { unset ($_COOKIE ['AI_WP_DEBUGGING']); ai_setcookie ('AI_WP_DEBUGGING', '', time() - (15 * 60), COOKIEPATH); } if (isset ($_COOKIE ['AI_WP_DEBUG_BLOCK'])) { unset ($_COOKIE ['AI_WP_DEBUG_BLOCK']); ai_setcookie ('AI_WP_DEBUG_BLOCK', '', time() - (15 * 60), COOKIEPATH); } } else { $ai_wp_data [AI_WP_DEBUGGING] = isset ($_COOKIE ['AI_WP_DEBUGGING']) ? $ai_wp_data [AI_WP_DEBUGGING] | ($_COOKIE ['AI_WP_DEBUGGING'] & ~AI_DEBUG_PROCESSING) : $ai_wp_data [AI_WP_DEBUGGING]; $ai_wp_data [AI_WP_DEBUG_BLOCK] = isset ($_COOKIE ['AI_WP_DEBUG_BLOCK']) ? $_COOKIE ['AI_WP_DEBUG_BLOCK'] : 0; if (isset ($_GET [AI_URL_DEBUG_BLOCKS])) if ($_GET [AI_URL_DEBUG_BLOCKS] && $url_debugging) $ai_wp_data [AI_WP_DEBUGGING] |= AI_DEBUG_BLOCKS; else $ai_wp_data [AI_WP_DEBUGGING] &= ~AI_DEBUG_BLOCKS; if (isset ($_GET [AI_URL_DEBUG_TAGS])) if ($_GET [AI_URL_DEBUG_TAGS] && $url_debugging) $ai_wp_data [AI_WP_DEBUGGING] |= AI_DEBUG_TAGS; else $ai_wp_data [AI_WP_DEBUGGING] &= ~AI_DEBUG_TAGS; if (isset ($_GET [AI_URL_DEBUG_NO_INSERTION])) if ($_GET [AI_URL_DEBUG_NO_INSERTION] && $url_debugging) $ai_wp_data [AI_WP_DEBUGGING] |= AI_DEBUG_NO_INSERTION; else $ai_wp_data [AI_WP_DEBUGGING] &= ~AI_DEBUG_NO_INSERTION; if (isset ($_GET [AI_URL_DEBUG_AD_BLOCKING_STATUS])) if ($_GET [AI_URL_DEBUG_AD_BLOCKING_STATUS] && $url_debugging) $ai_wp_data [AI_WP_DEBUGGING] |= AI_DEBUG_AD_BLOCKING_STATUS; else $ai_wp_data [AI_WP_DEBUGGING] &= ~AI_DEBUG_AD_BLOCKING_STATUS; if (isset ($_GET [AI_URL_DEBUG_AD_BLOCKING])) if ($_GET [AI_URL_DEBUG_AD_BLOCKING] && $url_debugging) $ai_wp_data [AI_WP_DEBUGGING] |= AI_DEBUG_AD_BLOCKING; else $ai_wp_data [AI_WP_DEBUGGING] &= ~AI_DEBUG_AD_BLOCKING; if (isset ($_GET [AI_URL_DEBUG_POSITIONS])) { $secret = isset ($_GET ['ai-secret']) && $_GET ['ai-secret'] == ai_secret_key (); if ($secret) { ai_disable_caching (); } if ($_GET [AI_URL_DEBUG_POSITIONS] !== '' && ($url_debugging || $secret)) $ai_wp_data [AI_WP_DEBUGGING] |= AI_DEBUG_POSITIONS; else $ai_wp_data [AI_WP_DEBUGGING] &= ~AI_DEBUG_POSITIONS; if (is_numeric ($_GET [AI_URL_DEBUG_POSITIONS])) $ai_wp_data [AI_WP_DEBUG_BLOCK] = intval ($_GET [AI_URL_DEBUG_POSITIONS]); if ($ai_wp_data [AI_WP_DEBUG_BLOCK] < 0 || $ai_wp_data [AI_WP_DEBUG_BLOCK] > 96) $ai_wp_data [AI_WP_DEBUG_BLOCK] = 0; } if (!defined ('AI_DEBUGGING_DEMO')) { if ($ai_wp_data [AI_WP_DEBUGGING] != 0) { if (!isset ($_GET ['no-cookie'])) { ai_setcookie ('AI_WP_DEBUGGING', $ai_wp_data [AI_WP_DEBUGGING], time() + AI_COOKIE_TIME, COOKIEPATH); } } else if (isset ($_COOKIE ['AI_WP_DEBUGGING'])) ai_setcookie ('AI_WP_DEBUGGING', '', time() - (15 * 60), COOKIEPATH); if ($ai_wp_data [AI_WP_DEBUG_BLOCK] != 0) { if (!isset ($_GET ['no-cookie'])) { ai_setcookie ('AI_WP_DEBUG_BLOCK', $ai_wp_data [AI_WP_DEBUG_BLOCK], time() + AI_COOKIE_TIME, COOKIEPATH); } } else if (isset ($_COOKIE ['AI_WP_DEBUG_BLOCK'])) ai_setcookie ('AI_WP_DEBUG_BLOCK', '', time() - (15 * 60), COOKIEPATH); if ($ai_wp_data [AI_WP_DEBUGGING] != 0 || isset ($_GET [AI_URL_DEBUG]) || isset ($_GET [AI_URL_DEBUG_BLOCKS]) || isset ($_GET [AI_URL_DEBUG_POSITIONS]) || isset ($_GET [AI_URL_DEBUG_TAGS]) || isset ($_GET [AI_URL_DEBUG_PROCESSING_FE])) { ai_disable_caching (); } if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING] && ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC && !defined ('AI_NO_W3TC')) { $ai_wp_data [AI_W3TC_DEBUGGING] = true; } } else { if ($ai_wp_data [AI_WP_DEBUGGING] != 0) { ai_disable_caching (); } } } } if ($ai_wp_data [AI_HTML_ELEMENT_SELECTION]) { add_filter ('show_admin_bar', '__return_false', 999999); $ai_wp_data [AI_WP_DEBUGGING] = 0; } elseif (($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) == 0 && ((get_remote_debugging () && ($ai_wp_data [AI_WP_DEBUGGING] != 0 || (isset ($_GET [AI_URL_DEBUG]) && $_GET [AI_URL_DEBUG] == 1))) || defined ('AI_DEBUGGING_DEMO'))) { function ai_login_adminbar ($wp_admin_bar) { $wp_admin_bar->add_menu (array ('id' => 'ai-toolbar-login', 'title' => _x('Log In', 'Menu item', 'ad-inserter'), 'href' => wp_login_url())); } add_filter ('show_admin_bar', '__return_true', 999999); add_action ('admin_bar_menu', 'ai_toolbar', 9920); if (!defined ('AI_DEBUGGING_DEMO')) { add_action ('admin_bar_menu', 'ai_login_adminbar' ); } } if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 && get_force_admin_toolbar ()) { add_filter ('show_admin_bar', '__return_true', 999999); } $debug_positions = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) != 0; $debug_tags_positions = ($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_POSITIONS | AI_DEBUG_TAGS)) != 0; $debug_tags_positions_blocks = ($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_POSITIONS | AI_DEBUG_TAGS | AI_DEBUG_BLOCKS)) != 0; $plugin_priority = get_plugin_priority (); if (isset ($ai_db_options_extract [CONTENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [CONTENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_tags_positions) add_filter ('the_content', 'ai_content_hook', $plugin_priority); if (isset ($ai_db_options_extract [EXCERPT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [EXCERPT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_tags_positions_blocks) add_filter ('the_excerpt', 'ai_excerpt_hook', $plugin_priority); add_action ('loop_start', 'ai_mark_loop_start'); if (isset ($ai_db_options_extract [LOOP_START_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [LOOP_START_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_positions) add_action ('loop_start', 'ai_hook_function_loop_start'); add_action ('loop_end', 'ai_mark_loop_end'); if (isset ($ai_db_options_extract [LOOP_END_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [LOOP_END_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_positions) add_action ('loop_end', 'ai_hook_function_loop_end'); if (isset ($ai_db_options_extract [POST_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [POST_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_positions) add_action ('the_post', 'ai_hook_function_post'); if ((isset ($ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0) || (isset ($ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0) || (isset ($ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0) || $debug_positions) { $ai_wp_data [AI_NUMBER_OF_COMMENTS] = 0; add_filter ('comments_array' , 'ai_comments_array', 10, 2); add_filter ('wp_list_comments_args' , 'ai_wp_list_comments_args'); $ai_walker = new ai_Walker_Comment; } // Code for PHP VERSION >= 5.3.0 // foreach ($ai_custom_hooks as $index => $custom_hook) { // if (isset ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_positions) // add_action ($custom_hook ['action'], ai_get_custom_hook_function ($custom_hook ['action'], AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $custom_hook ['index'] - 1, $custom_hook ['name']), $custom_hook ['priority']); // } // Code for PHP VERSION < 5.3.0 foreach ($ai_custom_hooks as $index => $custom_hook) { if ($index >= 20) break; // Skip custom hooks on standard WP hooks - they will be processed anyway switch ($custom_hook ['action']) { case 'wp_footer': // case 'wp_head': // no block processing on wp_head case 'the_content': case 'the_excerpt': case 'loop_start': case 'loop_end': // case 'the_post': // ai_custom_hook distinguishes between custom hooks and Between posts continue 2; } $hook_number = $custom_hook ['index']; // if (isset ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_positions) { if (get_hook_enabled ($hook_number) && isset ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_positions) { // There might be more than one hook with the same action - block can use only one hook $hook_used = false; foreach ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { $obj = $block_object [$block]; if ($obj->get_automatic_insertion () == AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $hook_number - 1) { $hook_used = true; break; } } if ($hook_used) { add_action ($custom_hook ['action'], 'ai_custom_hook_function_' . $index, $custom_hook ['priority']); } } } if ($ai_wp_data [AI_STICK_TO_THE_CONTENT]) { if (trim (get_main_content_element () == '')) { if (!defined ('AI_CONTENT_MARKER_NO_LOOP_START')) { add_action ('loop_start', 'ai_content_marker'); } if (!defined ('AI_CONTENT_MARKER_NO_LOOP_END')) { add_action ('loop_end', 'ai_content_marker'); } if (!defined ('AI_CONTENT_MARKER_NO_GET_SIDEBAR')) { add_action ('get_sidebar', 'ai_content_marker'); } } } if ($ai_wp_data [AI_WP_AMP_PAGE] ) { // AMP, Accelerated Mobile Pages add_action ('amp_post_template_head', 'ai_amp_head_hook', 99999); add_action ('amp_post_template_css', 'ai_amp_css_hook', 99999); add_action ('wp_head', 'ai_amp_head_hook', 99999); add_action ('wp_head', 'ai_amp_css_hook_style', 99999); // WP AMP Ninja add_action ('wpamp_custom_script', 'ai_amp_head_hook', 99999); // No usable hook for custom CSS // add_action ('wpamp_custom_style', 'ai_amp_css_hook', 99999); // WP AMP - Accelerated Mobile Pages for WordPress add_action ('amphtml_template_head', 'ai_amp_head_hook', 99999); add_action ('amphtml_template_css', 'ai_amp_css_hook', 99999); // Better AMP - WordPress Complete AMP add_action ('better-amp/template/head', 'ai_amp_head_hook', 99999); // No usable hook for custom CSS // add_action ('better-amp/template/css', 'ai_amp_css_hook', 99999); // AMP WP - Google AMP For WordPress add_action ('amp_wp_template_head', 'ai_amp_head_hook', 99999); // No usable hook for custom CSS // add_action ('amp_wp_template_head', 'ai_amp_css_hook', 99999); } else // WP add_action ('wp_head', 'ai_wp_head_hook', 99999); $automatic_insertion_footer_hook = isset ($ai_db_options_extract [FOOTER_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [FOOTER_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) != 0 || $debug_positions; if ($ai_wp_data [AI_WP_AMP_PAGE]) { // AMP, Accelerated Mobile Pages if ($automatic_insertion_footer_hook) { add_action ('amp_post_template_footer', 'ai_hook_function_footer', 5); add_action ('wp_footer', 'ai_hook_function_footer', 5); } add_action ('amp_post_template_footer', 'ai_amp_footer_hook', 5); add_action ('wp_footer', 'ai_amp_footer_hook', 5); // WP AMP Ninja if ($automatic_insertion_footer_hook) add_action ('wpamp_google_analytics_code', 'ai_hook_function_footer', 5); add_action ('wpamp_google_analytics_code', 'ai_amp_footer_hook', 5); // WP AMP - Accelerated Mobile Pages for WordPress if ($automatic_insertion_footer_hook) add_action ('amphtml_after_footer', 'ai_hook_function_footer', 5); add_action ('amphtml_after_footer', 'ai_amp_footer_hook', 5); // Better AMP - WordPress Complete AMP if ($automatic_insertion_footer_hook) add_action ('better-amp/template/footer', 'ai_hook_function_footer', 5); add_action ('better-amp/template/footer', 'ai_amp_footer_hook', 5); // AMP WP - Google AMP For WordPress if ($automatic_insertion_footer_hook) add_action ('amp_wp_template_footer', 'ai_hook_function_footer', 5); add_action ('amp_wp_template_footer', 'ai_amp_footer_hook', 5); } else { // WP if ($automatic_insertion_footer_hook) add_action ('wp_footer', 'ai_hook_function_footer', 5); add_action ('wp_footer', 'ai_wp_footer_hook_end_buffering', 5); add_action ('wp_footer', 'ai_wp_footer_hook', 9999999); } if ($ai_wp_data [AI_WP_AMP_PAGE]) { // No scripts on AMP pages if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { $ai_wp_data [AI_ADB_DETECTION] = false; $ai_wp_data [AI_TRACKING] = false; } } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("WP HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } }; function ai_load_plugin_textdomain_hook () { unload_textdomain ('ad-inserter'); load_plugin_textdomain ('ad-inserter', false, basename (dirname (__FILE__)) . '/languages/'); } function ai_load_textdomain_mofile ($mo_file, $domain) { global $ai_wp_data; if (strpos ($mo_file, 'ad-inserter') !== false) { if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { switch (file_exists ($mo_file)) { case true: ai_log ("TRANSLATION FILE: " . $mo_file); break; default: ai_log ("FILE NOT FOUND: " . $mo_file); break; } } $path = explode ('/', $mo_file); $new_mo_file = dirname (__FILE__) . '/languages/' . end ($path); if (file_exists ($new_mo_file)) { if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("USING FILE: " . $new_mo_file); } return ($new_mo_file); } } return ($mo_file); } function ai_plugins_loaded () { global $ai_wp_data, $ai_total_plugin_time; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("PLUGINS LOADED START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } add_shortcode ('adinserter', 'ai_process_shortcodes'); add_shortcode ('ADINSERTER', 'ai_process_shortcodes'); // TO DO: check referrer add_filter ('pre_do_shortcode_tag', 'ai_pre_do_shortcode_tag', 10, 4); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("PLUGINS LOADED END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } function ai_init_hook () { global $block_object, $ai_wp_data, $ai_db_options_extract, $ai_total_plugin_time; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("INIT HOOK START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } if ($ai_wp_data [AI_DISABLE_TRANSLATION]) { unload_textdomain ('ad-inserter'); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("TRANSLATION UNLOADED"); } } require_once AD_INSERTER_PLUGIN_DIR.'strings.php'; if (defined ('DOING_AJAX') && DOING_AJAX) { $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_AJAX; ai_load_extract (); ai_wp_hook (); } if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { if ($ai_wp_data [AI_ADB_DETECTION]) { if (function_exists ('ai_check_files')) ai_check_files (); } } // add_shortcode ('adinserter', 'ai_process_shortcodes'); // add_shortcode ('ADINSERTER', 'ai_process_shortcodes'); // // TO DO: check referrer // add_filter ('pre_do_shortcode_tag', 'ai_pre_do_shortcode_tag', 10, 4); // if (defined ('AI_BUFFERING')) { // if (get_output_buffering ()) { // if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { // ai_buffering_start (); // } // } // } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("INIT HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } //function ai_upgrader_process_complete_hook ($upgrader_object, $options) { // global $ai_db_options, $ai_db_options_extract; // if (is_array ($options) && array_key_exists ('action', $options) && $options ['action'] == 'update' && array_key_exists ('type', $options)) { // if ($options ['type'] == 'plugin' && array_key_exists ('plugins', $options) && is_array ($options ['plugins']) && !empty ($options ['plugins'])) { // $this_plugin = plugin_basename (__FILE__); // foreach ($options ['plugins'] as $plugin) { // if ($plugin == $this_plugin) { // if (defined ('AI_EXTRACT_GENERATED') && isset ($ai_db_options [AI_OPTION_GLOBAL]['VERSION'])) { // $ai_db_options [AI_OPTION_EXTRACT] = $ai_db_options_extract; // ai_update_option (AI_OPTION_NAME, $ai_db_options); // } // break; // } // } // } // } //} function ai_load_extract ($recreate = true) { global $ai_db_options, $ai_db_options_extract, $version_string, $subversion_string; if (isset ($ai_db_options_extract)) return true; $expected_extract_version = $version_string . $subversion_string . '-' . '96'; if (function_exists ('ai_system_output_check')) { $expected_extract_version .= 'P'; } if (isset ($ai_db_options [AI_OPTION_EXTRACT]['VERSION']) && $ai_db_options [AI_OPTION_EXTRACT]['VERSION'] == $expected_extract_version) { $ai_db_options_extract = $ai_db_options [AI_OPTION_EXTRACT]; return true; } else { if (($saved_extract = get_option (AI_EXTRACT_NAME)) === false || $saved_extract ['VERSION'] != $expected_extract_version) { if ($recreate) { $ai_db_options_extract = ai_generate_extract ($ai_db_options); $ai_db_options [AI_OPTION_EXTRACT] = $ai_db_options_extract; if (get_option (AI_OPTION_NAME) !== false && !defined ('AI_LOADED_REMOTE_SETTINGS')) { update_option (AI_EXTRACT_NAME, $ai_db_options_extract); } return true; } } else { $ai_db_options_extract = $saved_extract; $ai_db_options [AI_OPTION_EXTRACT] = $ai_db_options_extract; return true; } } return false; } function ai_wp_loaded_hook () { global $ai_total_plugin_time, $ai_wp_data; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("WP LOADED HOOK START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } ai_load_extract (); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } if (defined ('AI_EXTRACT_GENERATED')) ai_log ("EXTRACT GENERATED"); ai_log ("WP LOADED HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } function ai_admin_menu_hook () { global $ai_settings_page; if (is_multisite() && !is_main_site () && !multisite_settings_page_enabled ()) return; $menu_position = get_menu_position (); if (isset ($_POST [AI_FORM_SAVE])) { if (isset ($_POST ['menu-for-link'])) { $menu_position = $_POST ['menu-for-link']; } else $menu_position = DEFAULT_MENU_FOR_LINK; } if ($menu_position == AI_SETTINGS_SUBMENU) { // translators: %s: Ad Inserter $ai_settings_page = add_submenu_page ('options-general.php', sprintf (__('%s Settings', 'ad-inserter'), AD_INSERTER_NAME), AD_INSERTER_NAME, 'manage_options', basename (__FILE__), 'ai_settings', defined ('AI_SETTINGS_MENU_PRIORITY') ? AI_SETTINGS_MENU_PRIORITY : DEFAULT_SETTINGS_SUBMENU_PRIORITY); } else { // translators: %s: Ad Inserter $ai_settings_page = add_menu_page (sprintf (__('%s Settings', 'ad-inserter'), AD_INSERTER_NAME), AD_INSERTER_NAME, 'manage_options', basename (__FILE__), 'ai_settings', 'dashicons-layout', defined ('AI_SETTINGS_MENU_PRIORITY') ? AI_SETTINGS_MENU_PRIORITY : DEFAULT_SETTINGS_MENU_PRIORITY); } add_action ('admin_enqueue_scripts', 'ai_admin_enqueue_scripts'); add_action ('admin_enqueue_scripts', 'ai_admin_enqueue_scripts_late', 99999); add_action ('admin_enqueue_scripts', 'ai_admin_remove_scripts', 99999); add_action ('admin_head', 'ai_admin_head'); add_filter ('clean_url', 'ai_clean_url', 999999, 2); } function ai_admin_head () { global $ai_settings_page, $hook_suffix; if ($hook_suffix == $ai_settings_page && wp_is_mobile()) { echo '', PHP_EOL; } } function ai_admin_enqueue_scripts ($hook_suffix) { global $ai_settings_page, $ai_admin_translations; if ($hook_suffix == $ai_settings_page) { wp_enqueue_style ('ai-admin-jquery-ui', plugins_url ('css/jquery-ui-1.10.3.custom.min.css', __FILE__), array (), null); wp_enqueue_style ('ai-colorpicker-css', plugins_url ('includes/colorpicker/css/bootstrap-colorpicker.min.css', AD_INSERTER_FILE), array (), AD_INSERTER_VERSION); if (function_exists ('ai_admin_enqueue_scripts_1')) ai_admin_enqueue_scripts_1 (); wp_enqueue_style ('ai-admin-multi-select', plugins_url ('css/multi-select.css', AD_INSERTER_FILE), array (), AD_INSERTER_VERSION); wp_enqueue_style ('ai-image-picker', plugins_url ('css/image-picker.css', __FILE__), array (), AD_INSERTER_VERSION); wp_add_inline_style ('ai-image-picker', '.thumbnail {border-radius: 6px;}'); wp_enqueue_style ('ai-combobox-css', plugins_url ('css/jquery.scombobox.min.css', __FILE__), array (), AD_INSERTER_VERSION); if (function_exists ('ai_admin_enqueue_scripts_2')) ai_admin_enqueue_scripts_2 (); wp_enqueue_script ('ai-colorpicker-js', plugins_url ('includes/colorpicker/js/bootstrap-colorpicker.min.js', AD_INSERTER_FILE ), array (), AD_INSERTER_VERSION, true); wp_enqueue_script ('ai-multi-select', plugins_url ('includes/js/jquery.multi-select.js', AD_INSERTER_FILE ), array (), AD_INSERTER_VERSION, true); wp_enqueue_script ('ai-quicksearch', plugins_url ('includes/js/jquery.quicksearch.js', AD_INSERTER_FILE ), array (), AD_INSERTER_VERSION, true); // Located in the header to load datepicker js file to prevent error when async tags used wp_enqueue_script ('ai-image-picker-js', plugins_url ('includes/js/image-picker.min.js', __FILE__ ), array ( 'jquery', 'jquery-ui-datepicker', ), AD_INSERTER_VERSION, false); if (AI_SYNTAX_HIGHLIGHTING && !defined ('AI_SAFE_MODE')) { wp_enqueue_script ('ai-ace', plugins_url ('includes/ace/ace.js', __FILE__ ), array (), AD_INSERTER_VERSION, true); // wp_enqueue_script ('ai-ace-ext-modelist', plugins_url ('includes/ace/ext-modelist.js', __FILE__ ), array (), AD_INSERTER_VERSION, true); wp_enqueue_script ('ai-ace-html', plugins_url ('includes/ace/mode-html.js', __FILE__ ), array (), AD_INSERTER_VERSION, true); wp_enqueue_script ('ai-ace-php', plugins_url ('includes/ace/mode-php.js', __FILE__ ), array (), AD_INSERTER_VERSION, true); if (get_syntax_highlighter_theme () == AI_SYNTAX_HIGHLIGHTER_THEME || isset ($_POST ["syntax-highlighter-theme"]) && $_POST ["syntax-highlighter-theme"] == AI_SYNTAX_HIGHLIGHTER_THEME) wp_enqueue_script ('ai-ace-theme', plugins_url ('includes/ace/theme-ad_inserter.js', __FILE__ ), array (), AD_INSERTER_VERSION, true); } wp_enqueue_script ('ai-combobox', plugins_url ('includes/js/jquery.scombobox.min.js', __FILE__), array ( 'jquery', ), AD_INSERTER_VERSION , true); $admin_script = get_backend_javascript_debugging () ? 'js/ad-inserter.js' : 'js/ad-inserter.min.js'; wp_enqueue_script ('ai-admin', plugins_url ($admin_script, __FILE__), array ( 'jquery', 'jquery-ui-tabs', 'jquery-ui-button', 'jquery-ui-tooltip', 'jquery-ui-datepicker', 'jquery-ui-dialog', ), AD_INSERTER_VERSION, true); wp_localize_script ('ai-admin', 'ai_admin', $ai_admin_translations); wp_enqueue_script ('ai-missed', plugins_url ('includes/js/missed.js', __FILE__), array (), AD_INSERTER_VERSION , true); } wp_enqueue_style ('ai-admin-gen', plugins_url ('css/ai-admin.css', __FILE__), array (), AD_INSERTER_VERSION); wp_enqueue_script ('ai-admin-gen', plugins_url ('includes/js/ai-admin.js', __FILE__ ), array (), AD_INSERTER_VERSION, true); } function ai_admin_enqueue_scripts_late ($hook_suffix) { global $ai_settings_page; if ($hook_suffix == $ai_settings_page) { // wp_enqueue_style ('ai-admin', plugins_url ('css/ad-inserter.css', __FILE__), array (), AD_INSERTER_VERSION); wp_enqueue_style ('ai-admin', plugins_url ('css/ai-settings.css', __FILE__), array (), AD_INSERTER_VERSION); wp_add_inline_style ('ai-admin', '.notice {margin: 5px 15px 15px 0;}'); } } function ai_admin_remove_scripts ($hook_suffix) { global $ai_settings_page; if ($hook_suffix == $ai_settings_page) { // Prevent converting emojis to images remove_action ('admin_print_scripts', 'print_emoji_detection_script'); // Fix for Publisher theme: remove scripts loaded on Ad Inserter admin page wp_deregister_script ('ace-editor-script'); wp_dequeue_script ('publisher-admin'); // Fix for Shell ClubSmart theme (titan framework) wp_dequeue_script ('tf-ace'); // Default settings wp_dequeue_script ('tf-ace-theme-chrome'); wp_dequeue_script ('tf-ace-mode-css'); // Fix for JNews theme wp_dequeue_style ('global-admin'); wp_dequeue_style ('selectize'); wp_dequeue_style ('select2'); wp_dequeue_style ('tooltipster'); wp_dequeue_style ('jnews-admin'); wp_dequeue_style ('vex'); // Fix for OptimizePress plugin: remove styles loaded on Ad Inserter admin page wp_dequeue_style ('optimizepress-admin-assets'); wp_dequeue_style ('optimizepress-admin-common'); wp_dequeue_style ('optimizepress-tiny-mce-css'); wp_dequeue_style ('optimizepress-dashicons'); // Fix for WP Nav Manager plugin: remove styles loaded on Ad Inserter admin page wp_dequeue_style ('wp-nav-manager-admin-style'); // Fix for Booking.com Product Helper plugin: remove styles loaded on Ad Inserter admin page wp_dequeue_style ('bookingcom-product-helper-css'); // Fix for WP BotWatch plugin: remove styles loaded on Ad Inserter admin page wp_dequeue_style ('wp-botwatch'); // Fix for All in One Schema.org Rich Snippets plugin: remove styles loaded on Ad Inserter admin page wp_dequeue_style ('admin_style'); wp_deregister_style ('admin_style'); // Fix for ACF for AMP plugin: remove styles loaded on Ad Inserter admin page wp_dequeue_style ('amp-acf-admin'); wp_deregister_style ('amp-acf-admin'); wp_dequeue_script ('ace_code_highlighter_js'); wp_dequeue_script ('ace_mode_js'); wp_dequeue_script ('custom_css_js'); wp_dequeue_script ('field-creator'); wp_dequeue_script ('amp_acf_field'); // Fix for WP Lightbox 2 plugin: remove styles loaded on Ad Inserter admin page wp_dequeue_style ('jquery-ui-style'); wp_deregister_style ('jquery-ui-style'); // Fix for Widget Options plugin: remove styles loaded on Ad Inserter admin page wp_dequeue_style ('widgetopts-jquery-ui'); wp_deregister_style ('widgetopts-jquery-ui'); } } function ai_set_footer_inline_scripts () { global $ai_wp_data; $adb_code = defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION && $ai_wp_data [AI_ADB_DETECTION] && !isset ($ai_wp_data [AI_ADB_SHORTCODE_DISABLED]); // Check again later in the footer $ai_wp_data [AI_FOOTER_INLINE_SCRIPTS] = get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW || get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT || // alerady in $ai_wp_data [AI_CLIENT_SIDE_INSERTION] isset ($ai_wp_data [AI_CLIENT_SIDE_ROTATION]) || ($ai_wp_data [AI_TRACKING] && !isset ($ai_wp_data [AI_TRACKING_SHORTCODE_DISABLED])) || $ai_wp_data [AI_STICKY_WIDGETS] || $ai_wp_data [AI_STICK_TO_THE_CONTENT] || $ai_wp_data [AI_ANIMATION] || $ai_wp_data [AI_CLOSE_BUTTONS] || $ai_wp_data [AI_HTML_ELEMENT_SELECTION] || $ai_wp_data [AI_LAZY_LOADING] || $ai_wp_data [AI_CLIENT_SIDE_INSERTION] || $adb_code || ($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_BLOCKS | AI_DEBUG_POSITIONS)) != 0 || $ai_wp_data [AI_FRONTEND_JS_DEBUGGING] || $ai_wp_data [AI_CHECK_BLOCK] || $ai_wp_data [AI_CLIENT_SIDE_FILTER_CHECKS] || $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] != ''; } function ai_wp_enqueue_scripts_hook () { global $ai_wp_data, $wp_version, $wp_scripts, $ai_front_translations; // TEST // wp_deregister_script ('jquery'); ai_set_footer_inline_scripts (); if (!wp_script_is ('jquery', 'registered') && !wp_script_is ('jquery', 'printed')) { $ai_wp_data [AI_NO_JQUERY_CODE] = true; } if ($ai_wp_data [AI_FOOTER_INLINE_SCRIPTS] || ($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0 || !empty ($_GET) || get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 || $ai_wp_data [AI_ANIMATION]) { // Need jQuery: // $ai_wp_data [AI_HTML_ELEMENT_SELECTION] if (!$ai_wp_data [AI_NO_JQUERY_CODE]) { // Load jQuery on frontend when needed if (!get_wait_for_jquery () && isset ($wp_scripts->registered ['jquery'])) { wp_enqueue_script ('jquery'); } } if ($ai_wp_data [AI_HTML_ELEMENT_SELECTION] && !$ai_wp_data [AI_NO_JQUERY_CODE]) { wp_enqueue_script ('ai-jquery-js', plugins_url ('includes/js/ai-jquery.js', __FILE__), array ('jquery', 'jquery-ui-button'), $wp_version . '+' . AD_INSERTER_VERSION); wp_enqueue_style ('ai-html-jquery-ui', plugins_url ('css/jquery-ui-1.10.3.custom.min.css', __FILE__), array (), null); } if (!get_disable_css_code () && (get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0)) { wp_enqueue_style ('dashicons'); if (get_remote_debugging () && isset ($_GET [AI_URL_DEBUG]) && $_GET [AI_URL_DEBUG]) { wp_enqueue_style ('ai-dashicons', includes_url ('css/dashicons.min.css'), array (), $wp_version); wp_enqueue_style ('ai-admin-bar', includes_url ('css/admin-bar.min.css'), array (), $wp_version); } } if (!get_disable_js_code () && $ai_wp_data [AI_ANIMATION]) { if (defined ('AI_STICKY_SETTINGS') && AI_STICKY_SETTINGS) { wp_enqueue_style ('ai-aos', plugins_url ('includes/aos/ai-aos.css', __FILE__), array (), AD_INSERTER_VERSION); wp_enqueue_script ('ai-aos-js', plugins_url ('includes/aos/aos.js', AD_INSERTER_FILE ), array (), AD_INSERTER_VERSION, true); } } } } function ai_clean_url ( $url, $original_url){ if (strpos ($url, 'async=') !== false && strpos ($url, '/plugins/ad-inserter') !== false) { // $url = $original_url; $url = str_replace ("' async='async", '', $url); } return $url; } function ai_get_client_side_styles () { return ".ai-rotate {position: relative;}\n" . ".ai-rotate-hidden {visibility: hidden;}\n" . ".ai-rotate-hidden-2 {position: absolute; top: 0; left: 0; width: 100%; height: 100%;}\n" . ".ai-list-data, .ai-ip-data, .ai-filter-check, .ai-fallback, .ai-list-block, .ai-list-block-ip, .ai-list-block-filter {".AI_ALIGNMENT_CSS_HIDDEN_LIST."}\n" . ".ai-list-data, .ai-ip-data, .ai-filter-check, .ai-fallback {min-width: 1px;}\n" . ""; } function ai_get_admin_toolbar_debugging_styles () { global $ai_wp_data; $css = ''; if (((get_admin_toolbar_debugging () && ((get_remote_debugging () && $ai_wp_data [AI_WP_DEBUGGING] != 0) || ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0)) || defined ('AI_DEBUGGING_DEMO')) && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { $css .= "#wp-admin-bar-ai-toolbar-settings .ab-icon:before { content: '\\f538'; top: 2px; color: rgba(240,245,250,.6)!important; } #wp-admin-bar-ai-toolbar-settings-default .ab-icon:before { top: 0px; } #wp-admin-bar-ai-toolbar-settings .ab-icon.on:before { color: #00f200!important; } #wp-admin-bar-ai-toolbar-settings .ab-icon.red:before { color: #f22!important; } #wp-admin-bar-ai-toolbar-settings-default li, #wp-admin-bar-ai-toolbar-settings-default a, #wp-admin-bar-ai-toolbar-settings-default li:hover, #wp-admin-bar-ai-toolbar-settings-default a:hover { border: 1px solid transparent; } ul li#wp-admin-bar-ai-toolbar-status { margin: 0 0 5px 0; } #wp-admin-bar-ai-toolbar-blocks .ab-icon:before { content: '\\f135'; } #wp-admin-bar-ai-toolbar-positions .ab-icon:before { content: '\\f207'; } #wp-admin-bar-ai-toolbar-positions-default .ab-icon:before { content: '\\f522'; } #wp-admin-bar-ai-toolbar-tags .ab-icon:before { content: '\\f475'; } #wp-admin-bar-ai-toolbar-no-insertion .ab-icon:before { content: '\\f214'; } #wp-admin-bar-ai-toolbar-adb-status .ab-icon:before { content: '\\f223'; } #wp-admin-bar-ai-toolbar-adb .ab-icon:before { content: '\\f160'; } #wp-admin-bar-ai-toolbar-processing .ab-icon:before { content: '\\f464'; } #wp-admin-bar-ai-toolbar-processing-fe .ab-icon:before { content: '\\f464'; } #wp-admin-bar-ai-toolbar-positions span.up-icon { padding-top: 2px; } #wp-admin-bar-ai-toolbar-positions .up-icon:before { font: 400 20px/1 dashicons; } .ai-insertion-status { line-height: 26px!important; height: 26px!important; white-space: nowrap; min-width: 140px; } #wp-admin-bar-ai-toolbar-settings .ab-sub-wrapper { width: max-content; width: -moz-max-content; } "; } if (get_admin_toolbar_mobile () && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { $css .= "@media screen and (max-width: 782px) { #wpadminbar #wp-admin-bar-ai-toolbar-settings { display: block; position: static; } #wpadminbar #wp-admin-bar-ai-toolbar-settings > .ab-item { white-space: nowrap; overflow: hidden; width: 52px; padding: 0; color: #a0a5aa; position: relative; } #wpadminbar .quicklinks .menupop ul li .ab-item, #wpadminbar .quicklinks .menupop.hover ul li .ab-item { min-height: 28px; } } "; } return $css; } function add_head_inline_styles () { global $ai_wp_data; if (get_disable_css_code ()) return; // Needed for iframes? $ai_wp_data [AI_CODE_FOR_IFRAME] $debugging = $ai_wp_data [AI_WP_DEBUGGING] != 0 || (get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0) && (isset ($_GET [AI_URL_DEBUG_PROCESSING_FE]) && $_GET [AI_URL_DEBUG_PROCESSING_FE] != 0 || isset ($_GET [AI_URL_DEBUG_CODE])); if ($ai_wp_data [AI_CLIENT_SIDE_DETECTION] || get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW || isset ($ai_wp_data [AI_CLIENT_SIDE_ROTATION]) || $ai_wp_data [AI_CLOSE_BUTTONS] || $ai_wp_data [AI_PARALLAX] || $ai_wp_data [AI_HTML_ELEMENT_SELECTION] || !get_inline_styles () || get_admin_toolbar_debugging () && (get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0) || $debugging) { echo "\n"; } } function ai_get_js ($js_name, $replace_js_data = true) { global $ai_wp_data; $jq_js_name = $js_name . '.q'; if (!$ai_wp_data [AI_NO_JQUERY_CODE] && file_exists (AD_INSERTER_PLUGIN_DIR."includes/js/{$jq_js_name}.js")) { $js_name = $jq_js_name; } if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING] || !file_exists (AD_INSERTER_PLUGIN_DIR."includes/js/$js_name.min.js")) { $script = @file_get_contents (AD_INSERTER_PLUGIN_DIR."includes/js/$js_name.js"); } else $script = @file_get_contents (AD_INSERTER_PLUGIN_DIR."includes/js/$js_name.min.js"); $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if ($debug_processing) ai_log ('LOADING JS CODE: '. $js_name); if (!$replace_js_data) return $script; return ai_replace_js_data ($script); } function ai_randomize_properties ($style, $z_index_min = null, $z_index_max = null) { $style = str_replace (''', '\'', $style); $style_array = explode (';', trim ($style, ';')); foreach ($style_array as $index => $property) { $property = trim ($property); if ($z_index_min != null && $z_index_max != null && strpos ($property, 'z-index') === 0) { $style_array [$index] = 'z-index: ' . rand ($z_index_min, $z_index_max); } if (strpos ($property, 'opacity') === 0) { $value = str_replace (array ('opacity', ':', ' ', ';'), '', $property); if (is_numeric ($value)) { $value = 100 * $value - 5 + rand (0, 10); if ($value > 100) $value = 100; $style_array [$index] = 'opacity: ' . ($value / 100); } } elseif (strpos ($property, '50%') !== false) { $style_array [$index] = str_replace ('50%', (47 + rand (0, 6)) . '.' . rand (1, 99) . '%', $style_array [$index]); } elseif (strpos ($property, '100%') !== false) { $style_array [$index] = str_replace ('100%', '100.' . rand (1, 99) . '%', $style_array [$index]); } elseif (strpos ($property, '#000') !== false) { $color = rand (0, 2) . rand (0, 9); $style_array [$index] = str_replace ('#000', '#' . $color . $color . $color, $style_array [$index]); } } shuffle ($style_array); return trim (implode ('; ', $style_array)) . ';'; } function ai_replace_js_data ($js) { global $block_object, $ai_wp_data; if (preg_match_all ('/AI_CONST_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $constant) { if (defined ($constant)) $js = str_replace ($match [0][$index], constant ($constant), $js); } } if (preg_match_all ('/AI_DATA_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $constant) { if (defined ($constant) && isset ($ai_wp_data [constant ($constant)])) $js = str_replace ($match [0][$index], $ai_wp_data [constant ($constant)], $js); } } if (preg_match_all ('/AI_DATAB_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $constant) { if (defined ($constant) && isset ($ai_wp_data [constant ($constant)])) $js = str_replace ($match [0][$index], $ai_wp_data [constant ($constant)] ? 1 : 0, $js); } } if (preg_match_all ('/AI_DBG_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $constant) { if (defined ($constant)) $js = str_replace ($match [0][$index], ($ai_wp_data [AI_WP_DEBUGGING] & constant ($constant)) != 0 ? 1 : 0, $js); } } if (preg_match_all ('/AI_FUNC_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $function) { $function = strtolower ($function); if (function_exists ($function)) $js = str_replace ($match [0][$index], call_user_func ($function), $js); } } if (preg_match_all ('/AI_FUNCH_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $function) { $function = strtolower ($function); if (function_exists ($function)) $js = str_replace ($match [0][$index], html_entity_decode (call_user_func ($function)), $js); } } if (preg_match_all ('/AI_FUNCB_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $function) { $function = strtolower ($function); if (function_exists ($function)) $js = str_replace ($match [0][$index], call_user_func ($function) ? 1 : 0, $js); } } if (preg_match_all ('/AI_FUNCT_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $function) { $function = strtolower ($function); if (function_exists ($function)) $js = str_replace ($match [0][$index], call_user_func ($function, true), $js); } } if (preg_match_all ('/AI_POST_([_A-Z0-9]+)/', $js, $match)) { foreach ($match [1] as $index => $post) { $post_name = strtolower ($post); $js = str_replace ($match [0][$index], isset ($_POST [$post_name]) ? sanitize_text_field (urldecode ($_POST [$post_name])) : '', $js); } } if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { if (strpos ($js, 'AI_ADB_OVERLAY_WINDOW') !== false || strpos ($js, 'AI_ADB_MSG_HTML') !== false) { $adb = $block_object [AI_ADB_MESSAGE_OPTION_NAME]; $tags = array ('div', 'span', 'ins', 'section', 'kbd'); $message_tag = $tags [rand (0, count ($tags) - 1)]; $overlay_tag = $tags [rand (0, count ($tags) - 1)]; $basic_adb_overlay_css = AI_BASIC_ADB_OVERLAY_CSS; $basic_adb_message_css = AI_BASIC_ADB_MESSAGE_CSS; if (strpos ($js, 'AI_ADB_STATUS_MESSAGE') === false) { $basic_adb_overlay_css = str_replace ('pointer', 'no-drop', $basic_adb_overlay_css); $basic_adb_message_css = str_replace ('pointer', 'no-drop', $basic_adb_message_css); } // $overlay_code = "jQuery ('<".$overlay_tag.">', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 1110002, 9914998)) . ai_randomize_properties (get_overlay_css ())) . "')}})"; $overlay_code = "var e = document.createElement ('".$overlay_tag."'); e.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 1110002, 9914998)) . ai_randomize_properties (get_overlay_css ())) . "');"; for ($level = 1; $level <= 5; $level ++) { switch (rand (1, 10)) { case 1: case 2: case 3: case 4: $tag = 'div'; break; case 5: case 6: case 7: $tag = $tags [rand (0, count ($tags) - 1)]; break; default: continue 2; } // $overlay_code .= ".append (jQuery ('
    ')).append (jQuery ('
    ', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "')}}))"; $overlay_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "');"; $overlay_code .= "e.append (f); e.append (document.createElement ('div'));"; // $overlay_code = "jQuery ('<".$tag.">').append (" . $overlay_code . ')'; $overlay_code .= "f = document.createElement ('".$tag."'); f.append (e); e = f;"; // if (rand (1, 10) > 5) $overlay_code .= ".append (jQuery ('
    ', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "')}}))"; if (rand (1, 10) > 5) $overlay_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "'); e.append (f);"; // if (rand (1, 10) > 5) $overlay_code .= ".append (jQuery ('
    '))"; if (rand (1, 10) > 5) $overlay_code .= "e.append (document.createElement ('div'));"; // if (rand (1, 10) > 5) $overlay_code .= ".prepend (jQuery ('
    ', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "')}}))"; if (rand (1, 10) > 5) $overlay_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_overlay_css, 100, 99999))) . "'); e.prepend (f);"; // if (rand (1, 10) > 5) $overlay_code .= ".prepend (jQuery ('
    '))"; if (rand (1, 10) > 5) $overlay_code .= "e.prepend (document.createElement ('div'));"; } $overlay_code = '(function () {' . $overlay_code . ' return e;})()'; $js = str_replace ('AI_ADB_OVERLAY_WINDOW', $overlay_code, $js); $message_code = "jQuery ('<".$message_tag.">', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 96610999, 99919998)) . ai_randomize_properties (get_message_css ())) . "')}, 'html': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), do_shortcode ($adb->ai_getCode ()))) . "')})"; $message_code = "var e = document.createElement ('".$message_tag."'); e.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 96610999, 99919998)) . ai_randomize_properties (get_message_css ())) . "');"; $message_code .= "e.innerHTML = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), do_shortcode ($adb->ai_getCode ()))) . "');"; for ($level = 1; $level <= 5; $level ++) { switch (rand (1, 10)) { case 1: case 2: case 3: $tag = 'div'; break; case 4: case 5: $tag = 'p'; break; case 6: case 7: $tag = $tags [rand (0, count ($tags) - 1)]; break; default: continue 2; } // $message_code .= ".append (jQuery ('

    ')).append (jQuery ('

    ', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "')}}))"; $message_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "');"; $message_code .= "e.append (document.createElement ('p')); e.append (f);"; // $message_code = "jQuery ('<".$tag.">').append (" . $message_code . ')'; $message_code .= "f = document.createElement ('".$tag."'); f.append (e); e = f;"; // if (rand (1, 10) > 7) $message_code .= ".append (jQuery ('
    ', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "')}}))"; if (rand (1, 10) > 7) $message_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "'); e.append (f);"; // if (rand (1, 10) > 7) $message_code .= ".append (jQuery ('

    '))"; if (rand (1, 10) > 7) $message_code .= "e.append (document.createElement ('p'));"; // if (rand (1, 10) > 7) $message_code .= ".prepend (jQuery ('

    ', {attr: {'style': b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "')}}))"; if (rand (1, 10) > 7) $message_code .= "var f = document.createElement ('div'); f.style = b64d ('" . base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 10000, 999999))) . "'); e.prepend (f);"; // if (rand (1, 10) > 7) $message_code .= ".prepend (jQuery ('

    '))"; if (rand (1, 10) > 7) $message_code .= "e.prepend (document.createElement ('p'));"; // if (rand (1, 10) > 3) $message_code .= ".prepend (jQuery ('

    '))"; if (rand (1, 10) > 3) $message_code .= "e.prepend (document.createElement ('p'));"; } $message_code = '(function () {' . $message_code . ' return e;})()'; $js = str_replace ('AI_ADB_MESSAGE_WINDOW', $message_code, $js); // $js = str_replace ('AI_ADB_MSG_HTML', base64_encode (str_replace (array ("\r", "\n"), array ('', ''), do_shortcode ($adb->ai_getCode ()))), $js); $js = str_replace ('AI_ADB_MSG_HTML', str_replace (array ("\r", "\n", '"'), array ('', '', '"'), preg_replace ( '@<(script|style)[^>]*?'.'>.*?@si', '', do_shortcode ($adb->ai_getCode ()))), $js); // $js = str_replace ('AI_ADB_MSG_STYLE', base64_encode (str_replace (array ("\r", "\n"), array ('', ''), ai_randomize_properties ($basic_adb_message_css, 100000, 9999999) . ai_randomize_properties (get_message_css ()))), $js); $js = str_replace ('AI_ADB_MSG_STYLE', str_replace (array ("\r", "\n", '"'), array ('', '', '"'), ai_randomize_properties ($basic_adb_message_css, 100000, 9999999) . ai_randomize_properties (get_message_css ())), $js); switch (rand (1, 20)) { case 1: $message_tag = 'section'; break; case 2: $message_tag = 'article'; break; case 3: $message_tag = 'span'; break; case 4: $message_tag = 'header'; break; case 5: $message_tag = 'footer'; break; case 6: $message_tag = 'nav'; break; case 7: $message_tag = 'aside'; break; case 8: $message_tag = 'h5'; break; case 9: $message_tag = 'h6'; break; default: $message_tag = 'div'; break; } $js = str_replace ('AI_ADB_MSG_TAG', $message_tag, $js); $js_name_node = 'n'.rand (10000, 10000000); $js_name_index = 'i'.rand (10000, 10000000); $html_tags = array (); if (rand (1, 10) > 3) $html_tags []= 'DIV'; if (rand (1, 10) > 4) $html_tags []= 'P'; if (rand (1, 10) > 5) $html_tags []= 'SPAN'; if (rand (1, 10) > 5) $html_tags []= 'A'; if (rand (1, 10) > 5) $html_tags []= 'ARTICLE'; if (rand (1, 10) > 5) $html_tags []= 'H1'; if (rand (1, 10) > 5) $html_tags []= 'H2'; if (rand (1, 10) > 5) $html_tags []= 'H3'; if (rand (1, 10) > 5) $html_tags []= 'H4'; if (rand (1, 10) > 5) $html_tags []= 'H5'; if (rand (1, 10) > 5) $html_tags []= 'H6'; if (rand (1, 10) > 5) $html_tags []= 'BUTTON'; if (rand (1, 10) > 6) $html_tags []= 'IFRAME'; if (rand (1, 10) > 6) $html_tags []= 'HEADER'; if (rand (1, 10) > 5) $html_tags []= 'FOOTER'; if (rand (1, 10) > 7) $html_tags []= 'UL'; if (rand (1, 10) > 7) $html_tags []= 'OL'; if (rand (1, 10) > 5) $html_tags []= 'LI'; if (rand (1, 10) > 5) $html_tags []= 'NAV'; if (rand (1, 10) > 5) $html_tags []= 'SECTION'; if (rand (1, 10) > 5) $html_tags []= 'ASIDE'; if (empty ($html_tags)) $html_tags = array ('DIV, P, LI'); shuffle ($html_tags); switch (rand (1, 10)) { case 1: $js_code_1 = 'var '.$js_name_node.' = document.getElementsByTagName ("'. ($html_tags [0]) .'"); for (var '.$js_name_index.'=0; '.$js_name_index.' < '.$js_name_node.'.length; '.$js_name_index.'++) {'; break; default: $js_code_1 = 'var '.$js_name_node.' = document.body.querySelectorAll ("'.(implode (', ', $html_tags)).'"); for (var '.$js_name_index.'=0; '.$js_name_index.' < '.$js_name_node.'.length; '.$js_name_index.'++) {'; break; } $js_code_3 = '}'; $js_code_css = array (); if (rand (1, 10) > 2) $js_code_css []= 'style.filter = "blur('.rand (1, 4).'px) brightness('.rand (60, 80).'%)"'; if (rand (1, 10) > 4) $js_code_css []= 'style.cursor = "no-drop"'; if (rand (1, 10) > 3) $js_code_css []= 'style.cursor = "grab"'; if (rand (1, 10) > 5) $js_code_css []= 'style.cursor = "grabbing"'; if (rand (1, 10) > 6) $js_code_css []= 'style.cursor = "wait"'; if (rand (1, 10) > 7) $js_code_css []= 'style.cursor = "not-allowed"'; if (rand (1, 10) > 8) $js_code_css []= 'style.cursor = "cell"'; if (rand (1, 10) > 9) $js_code_css []= 'style.cursor = "all-scroll"'; if (rand (1, 10) > 2) $js_code_css []= 'style.background = "rgba('.rand (31, 55).', '.rand (31, 55).', '.rand (31, 55).', '.(rand (50, 80)/100).')"'; if (rand (1, 10) > 6) $js_code_css []= 'style.opacity = "0.'.rand (55, 84).'"'; if (rand (1, 10) > 6) $js_code_css []= 'style.zIndex = "'.rand (1, 12345).'"'; if (rand (1, 10) > 7) $js_code_css []= 'style.textTransform = "uppercase"'; if (rand (1, 10) > 8) $js_code_css []= 'style.letterSpacing = "'.rand (0, 5).'px"'; if (rand (1, 10) > 8) $js_code_css []= 'style.border = "'.rand (2, 25).'px solid"'; if (rand (1, 10) > 8) $js_code_css []= 'style.color = "rgba('.rand (1, 255).', '.rand (1, 255).', '.rand (1, 255).', '.(rand (20, 50)/100).')"'; if (rand (1, 10) > 6) $js_code_css []= 'style.fontFamily = "sans-serif"'; if (rand (1, 10) > 7) $js_code_css []= 'style.fontFamily = "serif"'; if (rand (1, 10) > 8) $js_code_css []= 'style.fontFamily = "sans-serif"'; if (rand (1, 10) > 6) $js_code_css []= 'style.fontFamily = "arial"'; if (rand (1, 10) > 6) $js_code_css []= 'style.fontFamily = "monospace"'; if (rand (1, 10) > 8) $js_code_css []= 'style.visibility = "hidden"'; if (rand (1, 10) > 8) $js_code_css []= 'style.visibility = "collapse"'; if (rand (1, 10) > 9) $js_code_css []= 'style.display = "list-item"'; if (rand (1, 10) > 9) $js_code_css []= 'style.display = "inline"'; if (rand (1, 10) > 3) $js_code_css []= 'style.margin = "'.rand (500, 2345).'px"'; if (rand (1, 10) > 4) $js_code_css []= 'style.padding = "'.rand (500, 2345).'px"'; if (rand (1, 10) > 7) $js_code_css []= 'remove ()'; else if (rand (1, 10) > 7) $js_code_css []= 'parentNode.removeChild (@@)'; $js_code_2 = ''; foreach ($js_code_css as $js_code_css_line) { $js_code_css_line = str_replace ('@@', $js_name_node.'['.$js_name_index.']', $js_code_css_line); $js_code_2 .= $js_name_node.'['.$js_name_index.'].'.$js_code_css_line.';'; } // $js = str_replace ('AI_ADB_HTML', base64_encode ($js_code_1.$js_code_2.$js_code_3), $js); // $js = str_replace ('var AI_ADB_HTML=1;', $js_code_1.$js_code_2.$js_code_3, $js); $js = str_replace ('AI_ADB_HTML=1;', $js_code_1.$js_code_2.$js_code_3, $js); $body_js_code = ''; if (rand (1, 10) > 5) $body_js_code .= 'document.body.style.background = "rgba('.rand (11, 35).', '.rand (11, 35).', '.rand (11, 35).', '.(rand (60, 90)/100).')";'; if (rand (1, 10) > 6) $body_js_code .= 'document.body.style.backgroundColor = "rgba('.rand (21, 45).', '.rand (21, 45).', '.rand (21, 45).', '.(rand (60, 90)/100).')";'; if (rand (1, 10) > 6) $body_js_code .= 'document.body.style.margin = "'.rand (400, 4345).'px";'; // $js = str_replace ('var AI_ADB_HTML=2;', $body_js_code, $js); $js = str_replace ('AI_ADB_HTML=2', $body_js_code, $js); $js = str_replace ('AI_ADB_SELECTORS', get_adb_selectors (true), $js); $redirection_page = get_redirection_page (); if ($redirection_page != 0) $url = get_permalink ($redirection_page); else $url = trim (get_custom_redirection_url ()); $js = str_replace ('AI_ADB_REDIRECTION_PAGE', $url, $js); if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0) { // translators: AD BLOCKING DETECTED, PAGE VIEWS: n - NO ACTION // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED, PAGE VIEWS', 'ad-inserter') . '" + ": " + window.ai_d1 + " - " + "' . __('NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED, COOKIE DETECTED - NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED - ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING NOT DETECTED', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-off"))', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTION COOKIES DELETED', 'ad-inserter') . '"))', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', '(jQuery("#ai-adb-status").text ("' . __('AD BLOCKING DETECTED - NO ACTION', 'ad-inserter') . '"),jQuery("#ai-adb-bar").addClass ("adb-on"))', $js); // translators: AD BLOCKING DETECTED, PAGE VIEWS: n - NO ACTION $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTED, PAGE VIEWS', 'ad-inserter') . '" + ": " + window.ai_d1 + " - " + "' . __('NO ACTION', 'ad-inserter') . '";if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-on");', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTED, COOKIE DETECTED - NO ACTION', 'ad-inserter') . '"; if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-on");', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTED - ACTION', 'ad-inserter') . '"; if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-on");', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING NOT DETECTED', 'ad-inserter') . '"; if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-off");', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTION COOKIES DELETED', 'ad-inserter') . '";', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', 'if (document.querySelector("#ai-adb-status") != null) document.querySelector("#ai-adb-status").innerText = "' . __('AD BLOCKING DETECTED - NO ACTION', 'ad-inserter') . '"; if (document.querySelector("#ai-adb-bar") != null) document.querySelector("#ai-adb-bar").classList.add ("adb-on");', $js); } else { // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', '(0)', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', '(0)', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', '(0)', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', '(0)', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', '(0)', $js); // $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', '(0)', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=1', '', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=2', '', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=3', '', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=4', '', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=5', '', $js); $js = str_replace ('window.AI_ADB_STATUS_MESSAGE=6', '', $js); } } } // $js = str_replace ('AI_ADB_ATTR_NAME', "b64d ('" . base64_encode ('data-'.(defined ('AI_ADB_ATTR') ? AI_ADB_ATTR : 'data-mask')) . "')", $js); $js = str_replace ('AI_ADB_ATTR_NAME', "'" . base64_encode ('data-'.(defined ('AI_ADB_ATTR') ? AI_ADB_ATTR : 'data-mask')) . "'", $js); $js = str_replace ('AI_NONCE', wp_create_nonce ("adinserter_data"), $js); $js = str_replace ('AI_AJAXURL', admin_url ('admin-ajax.php'), $js); $js = str_replace ('AI_SITE_URL', wp_make_link_relative (get_site_url()), $js); $js = str_replace ('AI_HOME_URL', home_url (), $js); if (defined ('AI_STATISTICS') && AI_STATISTICS) { $js = str_replace ('AI_INTERNAL_TRACKING', get_internal_tracking () == AI_ENABLED ? 1 : 0, $js); $js = str_replace ('AI_EXTERNAL_TRACKING', get_external_tracking () == AI_ENABLED ? 1 : 0, $js); $js = str_replace ('AI_DEBUG_TRACKING', isset ($_GET [AI_URL_DEBUG_TRACKING]) && $_GET [AI_URL_DEBUG_TRACKING] ? 1 : 0, $js); $js = str_replace ('AI_EXT_CATEGORY', get_external_tracking_category (), $js); $js = str_replace ('AI_EXT_ACTION', get_external_tracking_action (), $js); $js = str_replace ('AI_EXT_LABEL', get_external_tracking_label (), $js); $current_user = wp_get_current_user (); $wp_username = $current_user->user_login; $js = str_replace ('WP_USERNAME', $wp_username, $js); $js = str_replace ('AI_TRACK_PAGEVIEWS', get_track_pageviews () == AI_TRACKING_ENABLED && $ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME] ? 1 : 0, $js); $js = str_replace ('AI_ADVANCED_CLICK_DETECTION', get_click_detection () == AI_CLICK_DETECTION_ADVANCED ? 1 : 0, $js); if (!isset ($ai_wp_data [AI_VIEWPORT_WIDTHS])) { $viewport_data = array (); for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = get_viewport_name ($viewport); $viewport_width = get_viewport_width ($viewport); if ($viewport_name != '') { $viewport_data []= array ('index' => $viewport, 'name' => $viewport_name, 'width' => $viewport_width); } } usort ($viewport_data, 'ai_compare_viewport'); $viewport_widthss = array (); $viewport_indexes = array (); $viewport_names = array (); foreach ($viewport_data as $viewport) { $viewport_widthss []= $viewport ['width']; $viewport_indexes []= $viewport ['index']; $viewport_names []= $viewport ['name']; } $ai_wp_data [AI_VIEWPORT_WIDTHS] = $viewport_widthss; $ai_wp_data [AI_VIEWPORT_INDEXES] = $viewport_indexes; $ai_wp_data [AI_VIEWPORT_NAMES] = $viewport_names; } $js = str_replace ('AI_VIEWPORT_WIDTHS', '[' . implode (',', $ai_wp_data [AI_VIEWPORT_WIDTHS]) . ']', $js); $js = str_replace ('AI_VIEWPORT_INDEXES', '[' . implode (',', $ai_wp_data [AI_VIEWPORT_INDEXES]) . ']', $js); $js = str_replace ('AI_VIEWPORT_NAMES', base64_encode ('["' . implode ('","', $ai_wp_data [AI_VIEWPORT_NAMES]) . '"]'), $js); } // Deprecated $js = str_replace ('AI_BLOCK_CLASS_NAME', get_block_class_name (true), $js); if (function_exists ('ai_replace_js_data_2')) ai_replace_js_data_2 ($js); else { $js = str_replace ('AI_ADB_CONTENT_CSS_BEGIN_CLASS', 'wp-slider0-pre90', $js); $js = str_replace ('AI_ADB_CONTENT_CSS_END_CLASS', 'wp-slider1-pre91', $js); $js = str_replace ('AI_ADB_CONTENT_DELETE_BEGIN_CLASS', 'wp-slider2-pre92', $js); $js = str_replace ('AI_ADB_CONTENT_DELETE_END_CLASS', 'wp-slider3-pre93', $js); $js = str_replace ('AI_ADB_CONTENT_REPLACE_BEGIN_CLASS', 'wp-slider4-pre94', $js); $js = str_replace ('AI_ADB_CONTENT_REPLACE_END_CLASS', 'wp-slider5-pre95', $js); $js = str_replace ('ai-adb-url', AD_INSERTER_PLUGIN_URL . 'js/', $js); } return $js; } function ai_adb_code () { return ai_get_js ('ai-adb', false); } //function ai_ao_override_js_replacetag ($replacetag) { // return array ("","replace"); //} function ai_adb_external_scripts () { $code = ''; // if (!defined ('AI_ADB_NO_DOUBLECLICK_NET')) { // $code .= '' . "\n"; // } if (!defined ('AI_ADB_NO_GOOGLE_ANALYTICS')) { $code .= '' . "\n"; } if (!defined ('AI_ADB_NO_MEDIA_NET')) { $code .= '' . "\n"; } if (!defined ('AI_ADB_NO_AMAZON-ADSYSTEM')) { $code .= '' . "\n"; } if (!defined ('AI_ADB_NO_QUANT')) { $code .= '' . "\n"; } return $code; } //function ai_replace_prefix ($js_code) { // if (!defined ('AI_ADB_PREFIX')) { // $seed = date ('Y-m-d H'); // $key = $seed.'AI_'; // if (defined ('NONCE_KEY')) { // $key .= NONCE_KEY; // } // if (defined ('AUTH_KEY')) { // $key .= AUTH_KEY; // $auth_key = $seed.AUTH_KEY; // } else $auth_key = $seed.'#AI_'; // define ('AI_ADB_PREFIX', substr (substr (preg_replace ("/[^A-Za-z]+/", '', strtolower (md5 ($seed.$auth_key))), 0, 4) . preg_replace ("/[^A-Za-z0-9]+/", '', strtolower (md5 ($seed.$key))), 0, 8) . '_'); // } //// return preg_replace ("/ai_/", AI_ADB_PREFIX, $js_code); // return preg_replace ("/ai_adb/", AI_ADB_PREFIX, $js_code); //} function add_footer_inline_scripts () { global $ai_wp_data, $wp_version; if (get_disable_js_code ()) return; $adb_code = defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION && $ai_wp_data [AI_ADB_DETECTION] && !isset ($ai_wp_data [AI_ADB_SHORTCODE_DISABLED]) && !$ai_wp_data [AI_WP_AMP_PAGE]; if ($adb_code) { if (function_exists ('add_footer_inline_scripts_1')) add_footer_inline_scripts_1 (); else { echo '', "\n"; echo '', "\n"; if (get_adb_external_scripts ()) { echo ai_adb_external_scripts (); } if (!defined ('AI_ADB_NO_BANNER_AD')) { echo '

    ', "\n"; } if (!defined ('AI_ADB_NO_ADS_JS')) { echo '', "\n"; } if (!defined ('AI_ADB_NO_SPONSORS_JS')) { echo '', "\n"; } if (!defined ('AI_ADB_NO_BANNER_JS')) { echo '', "\n"; } if (!defined ('AI_ADB_NO_300x250_JS')) { echo '', "\n"; } echo '', "\n"; echo '', "\n"; } } // Use updated flags ai_set_footer_inline_scripts (); $inline_js = ai_inline_js (); if ($ai_wp_data [AI_FOOTER_INLINE_SCRIPTS]) { if (!$inline_js) { echo '', "\n"; } echo "\n"; if (!$inline_js) { echo '', "\n"; } } if (!$inline_js) { if ($ai_wp_data [AI_FRONTEND_JS_DEBUGGING] || !file_exists (AD_INSERTER_PLUGIN_DIR."js/ai-functions.min.js")) { $script = 'ai-functions.js'; } else $script = 'ai-functions.min.js'; echo '', "\n"; } } function ai_admin_notice_hook () { global $current_screen, $ai_db_options, $ai_wp_data, $ai_db_options_extract; global $ai_settings_page, $hook_suffix; // $sidebar_widgets = wp_get_sidebars_widgets(); // $sidebars_with_deprecated_widgets = array (); // foreach ($sidebar_widgets as $sidebar_widget_index => $sidebar_widget) { // if (is_array ($sidebar_widget)) // foreach ($sidebar_widget as $widget) { // if (preg_match ("/ai_widget([\d]+)/", $widget, $widget_number)) { // if (isset ($widget_number [1]) && is_numeric ($widget_number [1])) { // $is_widget = $ai_db_options [$widget_number [1]][AI_OPTION_AUTOMATIC_INSERTION] == AD_SELECT_WIDGET; // } else $is_widget = false; // $sidebar_name = $GLOBALS ['wp_registered_sidebars'][$sidebar_widget_index]['name']; // if ($is_widget && $sidebar_name != "") // $sidebars_with_deprecated_widgets [$sidebar_widget_index] = $sidebar_name; // } // } // } // if (!empty ($sidebars_with_deprecated_widgets)) { // echo "

    Warning: You are using deprecated Ad Inserter widgets in the following sidebars: ", // implode (", ", $sidebars_with_deprecated_widgets), // ". Please replace them with the new 'Ad Inserter' code block widget. See FAQ for details.

    "; // } if (function_exists ('ai_admin_notices')) ai_admin_notices (); else { if (/*$hook_suffix == $ai_settings_page &&*/ is_super_admin () && !wp_is_mobile () && isset ($ai_wp_data [AI_DAYS_SINCE_INSTAL])) { if (isset ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) && is_string ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) && strlen ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) != 0) { $used_blocks = count (unserialize ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS])); } else $used_blocks = 0; $notice_option = get_option ('ai-notice-review'); if ($notice_option === false && $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 20) $notice_option = 'later'; if (($notice_option === false && $used_blocks >= 2 && $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 2) || ($notice_option == 'later' && $used_blocks >= 2 && $ai_wp_data [AI_DAYS_SINCE_INSTAL] > 20)) { if ($notice_option == 'later') { // Translators: 1: number of blocks, 2: Ad Inserter $message = sprintf (_n('Hey, you are now using %1$s %2$s block.', 'Hey, you are now using %1$s %2$s blocks.', $used_blocks, 'ad-inserter'), "{$used_blocks}", "Ad Inserter"); $option = '
    '; } else { // Translators: %s: Ad Inserter $message = sprintf (__("Hey, you are using %s and I hope you're happy with it.", 'ad-inserter'), 'Ad Inserter'); $option = ''; } ?>

    ', /* translators: 1: AMPforWP Plugin Manager, 2: Ad Inserter */ sprintf (__('Warning: %1$s %3$s disabled %4$s %2$s on AMP pages.', 'ad-inserter'), 'AMPforWP Plugin Manager', AD_INSERTER_NAME, '', ''), '

    '; } if (version_compare (phpversion (), "5.6", "<")) { echo '

    ', /* translators: 1: Ad Inserter, 2, 3: HTML tags */ sprintf (__('Warning: %1$s requires PHP 5.6 or newer. %2$s Please update! %3$s', 'ad-inserter'), AD_INSERTER_NAME, '', ''), '

    '; } if (defined ('AI_SETTINGS_ERROR')) { echo '

    ', /* translators: 1: Ad Inserter, 2, 3: HTML tags */ _e ('Error: plugin settings corrupt', 'ad-inserter'), '

    '; } } } function ai_plugin_action_links ($links) { if (is_multisite() && !is_main_site () && !multisite_settings_page_enabled ()) return $links; $settings_page = get_menu_position () == AI_SETTINGS_SUBMENU ? 'options-general.php?page=ad-inserter.php' : 'admin.php?page=ad-inserter.php'; $settings_link = ''._x('Settings', 'Menu item', 'ad-inserter') . ''; array_unshift ($links, $settings_link); return $links; } function ai_after_plugin_row_1 ($plugin_file, $plugin_data, $status) { global $ad_inserter_globals; if (ai_ampforwp_check_disabled ()) { $plugins_css = "\n" . ''."\n"; echo $plugins_css; echo '

    ', /* translators: 1: AMPforWP Plugin Manager, 2: Ad Inserter, 3, 4: HTML tags */ sprintf (__('Warning: %1$s %3$s disabled %4$s %2$s on AMP pages.', 'ad-inserter'), 'AMPforWP Plugin Manager', AD_INSERTER_NAME, '', ''), '

    '; } } function ai_set_plugin_meta ($links, $file) { if ($file == plugin_basename (__FILE__)) { if (is_multisite() && !is_main_site ()) { foreach ($links as $index => $link) { if (stripos ($link, "update") !== false) unset ($links [$index]); } } if (!is_multisite () || is_main_site ()) { $settings_page = get_menu_position () == AI_SETTINGS_SUBMENU ? 'options-general.php?page=ad-inserter.php' : 'admin.php?page=ad-inserter.php'; $inserted = '' . __('Safe mode', 'ad-inserter') . ''; array_splice ($links, 4, 0, $inserted); if (function_exists ('ai_set_plugin_meta_2')) { ai_set_plugin_meta_2 ($links); } elseif (file_exists (AD_INSERTER_PLUGIN_DIR.'includes/js/ai-load.js')) { $inserted = 'WP'; array_splice ($links, 1, 0, $inserted); } } } return $links; } function current_user_role ($user_role_name = "") { $role_values = array ("super-admin" => 6, "administrator" => 5, "editor" => 4, "author" => 3, "contributor" => 2, "subscriber" => 1); global $wp_roles; if ($user_role_name != "") { return isset ($role_values [$user_role_name]) ? $role_values [$user_role_name] : 0; } $user_role = 0; $current_user = wp_get_current_user(); $roles = $current_user->roles; // Fix for empty roles if (isset ($current_user->caps) && count ($current_user->caps) != 0) { $caps = $current_user->caps; foreach ($role_values as $role_name => $role_value) { if (isset ($caps [$role_name]) && $caps [$role_name]) $roles []= $role_name; } } foreach ($roles as $role) { $current_user_role = isset ($role_values [$role]) ? $role_values [$role] : 0; if ($current_user_role > $user_role) $user_role = $current_user_role; } return $user_role; } function ai_current_user_role_ok () { return current_user_role () >= current_user_role (get_minimum_user_role ()); } function ai_add_meta_box_hook() { global $ai_wp_data, $block_object; if (!ai_current_user_role_ok ()) return; if (is_multisite() && !is_main_site () && !multisite_exceptions_enabled ()) return; $exceptions_posts = false; $exceptions_pages = false; for ($block = 1; $block <= 96; $block ++) { $obj = $block_object [$block]; if ($obj->get_exceptions_enabled ()) { if ($obj->get_display_settings_post ()) { $exceptions_posts = true; } if ($obj->get_display_settings_page ()) { $exceptions_pages = true; } if ($exceptions_posts && $exceptions_pages) { break; } } } $screens = array (); if ($exceptions_posts) { $screens []= 'post'; } if ($exceptions_pages) { $screens []= 'page'; } if (empty ($screens)) return; $args = array ( 'public' => true, '_builtin' => false ); $custom_post_types = get_post_types ($args, 'names', 'and'); $screens = array_values (array_merge ($screens, $custom_post_types)); foreach ($screens as $screen) { add_meta_box ( 'adinserter_sectionid', // translators: %s: Ad Inserter sprintf (_x('%s Individual Exceptions', 'Meta box name', 'ad-inserter'), AD_INSERTER_NAME), 'ai_meta_box_callback', $screen ); } } function ai_meta_box_callback ($post) { global $block_object; // Add an nonce field so we can check for it later. wp_nonce_field ('adinserter_meta_box', 'adinserter_meta_box_nonce'); $post_type = get_post_type ($post); $post_type_object = get_post_type_object ($post_type); $page_type_name = $post_type_object->labels->name; $page_type_name1 = $post_type_object->labels->singular_name; /* * Use get_post_meta() to retrieve an existing value * from the database and use the value for the form. */ $post_meta = get_post_meta ($post->ID, '_adinserter_block_exceptions', true); $selected_blocks = explode (",", $post_meta); ob_start (); echo ''; echo ''; echo ' '; echo ' '; // echo ' '; echo ' '; // translators: For this post or page if ($post_type == 'page') echo ' '; else echo ' '; echo ''; echo ''; $rows = 0; for ($block = 1; $block <= 96; $block ++) { $obj = $block_object [$block]; $exceptions_enabled = $obj->get_exceptions_enabled (); $exceptions_function = $obj->get_exceptions_function (); if ($post_type == 'page') { $page_name1 = _x('pages', 'Enabled/disabled on all', 'ad-inserter'); $general_enabled = $obj->get_display_settings_page(); } else { $page_name1 = _x('posts', 'Enabled/disabled on all', 'ad-inserter'); $general_enabled = $obj->get_display_settings_post(); } if (!$general_enabled || !$exceptions_enabled) continue; $individual_option_enabled = $general_enabled && $exceptions_enabled; $individual_text_enabled = $exceptions_function == AI_DEFAULT_INSERTION_ENABLED; if ($rows % 2 != 0) $background = "#F0F0F0"; else $background = "#FFF"; echo ''; echo ' '; $settings_page = get_menu_position () == AI_SETTINGS_SUBMENU ? 'options-general.php?page=ad-inserter.php' : 'admin.php?page=ad-inserter.php'; echo ' '; // echo ' '; echo ' '; echo ' '; echo ''; $rows ++; } echo ''; echo '
    ', __('Block', 'ad-inserter') . '', __('Name', 'ad-inserter') . '', __('Automatic insertion', 'ad-inserter') . '', __('Default insertion', 'ad-inserter') . '', _x('For this', 'Page', 'ad-inserter'), ' ', $page_type_name1, '', _x('For this', 'Post', 'ad-inserter'), ' ', $page_type_name1, '
    ', $obj->number, '', $obj->get_ad_name(), '', $obj->get_automatic_insertion_text(), ''; if ($individual_option_enabled) { if ($individual_text_enabled) echo __('Enabled', 'ad-inserter'); else echo __('Disabled', 'ad-inserter'); } else { if ($general_enabled) echo __('No individual exceptions', 'ad-inserter'); else // translators: Not enabled for pages or posts echo __('Not enabled for', 'ad-inserter') . ' ', $page_name1; } echo ' '; if ($individual_option_enabled) { echo ''; echo ''; } else { if (in_array ($block, $selected_blocks)) { echo ''; } } echo '
    '; $exceptions_table = ob_get_clean (); if ($rows == 0) { // translators: No individual exceptions enabled for pages or posts echo '

    ', __('No block has individual exceptions enabled', 'ad-inserter'), '

    '; } else echo $exceptions_table; $settings_page = get_menu_position () == AI_SETTINGS_SUBMENU ? 'options-general.php?page=ad-inserter.php' : 'admin.php?page=ad-inserter.php'; // translators: 1: Ad Inserter Settings (page), 2: Tag / Archive pages echo '

    ', //; sprintf (__('Default insertion can be configured for each block on %1$s page - button next to %2$s checkbox.', 'ad-inserter'), // translators: %s: Ad Inserter '' . sprintf (__('%s Settings', 'ad-inserter'), AD_INSERTER_NAME) . '', ''.__('Tag / Archive pages', 'ad-inserter').''), '
    ', __('When individual exceptions for a block are enabled, a checkbox will be listed here to change default insertion for this post or page.', 'ad-inserter'), '
    ', __('This way you can individually enable or disable blocks on specific posts or pages.', 'ad-inserter'), '
    '; printf (__('For more information check page %s', 'ad-inserter'), // translators: Ad Inserter Exceptions documentation page 'Ad Inserter ' . __('Individual Exceptions', 'ad-inserter') . '.

    '); } function ai_save_meta_box_data_hook ($post_id) { // Check if our nonce is set. if (!isset ($_POST ['adinserter_meta_box_nonce'])) return; // Verify that the nonce is valid. if (!wp_verify_nonce ($_POST ['adinserter_meta_box_nonce'], 'adinserter_meta_box')) return; // If this is an autosave, our form has not been submitted, so we don't want to do anything. if (defined ('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; // Check the user's permissions. if (isset ($_POST ['post_type'])) { if ($_POST ['post_type'] == 'page') { if (!current_user_can ('edit_page', $post_id)) return; } else { if (!current_user_can ('edit_post', $post_id)) return; } } /* OK, it's safe for us to save the data now. */ $selected = array (); for ($block = 1; $block <= 96; $block ++) { $option_name = 'adinserter_selected_block_' . $block; if (isset ($_POST [$option_name]) && $_POST [$option_name]) $selected []= $block; } if (!empty ($selected)) { // Update the meta field in the database. update_post_meta ($post_id, '_adinserter_block_exceptions', implode (",", $selected)); } else delete_post_meta ($post_id, '_adinserter_block_exceptions'); } function ai_widgets_init_hook () { if (is_multisite() && !is_main_site () && !multisite_widgets_enabled ()) return; register_widget ('ai_widget'); } function get_page_type_debug_info ($text = '') { global $ai_wp_data; switch ($ai_wp_data [AI_WP_PAGE_TYPE]) { case AI_PT_STATIC: $page_type = __('STATIC PAGE', 'ad-inserter'); break; case AI_PT_POST: $page_type = __('POST', 'ad-inserter'); break; case AI_PT_HOMEPAGE: $page_type = __('HOMEPAGE', 'ad-inserter'); break; case AI_PT_CATEGORY: $page_type = __('CATEGORY PAGE', 'ad-inserter'); break; case AI_PT_SEARCH: $page_type = __('SEARCH PAGE', 'ad-inserter'); break; case AI_PT_ARCHIVE: $page_type = __('ARCHIVE PAGE', 'ad-inserter'); break; case AI_PT_404: $page_type = __('ERROR 404 PAGE', 'ad-inserter'); break; case AI_PT_AJAX: $page_type = __('AJAX CALL', 'ad-inserter'); break; default: $page_type = __('UNKNOWN PAGE TYPE', 'ad-inserter'); break; } $class = AI_DEBUG_PAGE_TYPE_CLASS; $page_type = "
    ".$text.$page_type."
    "; return $page_type; } function get_adb_status_debug_info () { global $ai_wp_data; $page_type = ''; if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { if ($ai_wp_data [AI_ADB_DETECTION]) { $title = __('Click to delete ad blocking detection cokies', 'ad-inserter'); $status = __('AD BLOCKING STATUS UNKNOWN', 'ad-inserter'); $events = ''; if (isset ($_GET ['ai-debug-adb-events']) && $_GET ['ai-debug-adb-events']) { $events = ""; } $page_type = "
    $status$events
    "; } } return $page_type; } function ai_header_noindex () { global $ai_wp_data; if ($ai_wp_data [AI_WP_DEBUGGING] != 0 || $ai_wp_data [AI_CODE_FOR_IFRAME]) { echo ''; if ($ai_wp_data [AI_WP_DEBUGGING] != 0) { echo ' '; } echo "\n"; } } function get_code_debug_block ($name, $message, $right_text, $code, $inserted_code, $javascript = false) { if (strpos ($code, 'enable_page_level_ads') !== false) // translators: %s: AdSense Auto Ads $message = sprintf (__('Code for %s detected - Code will automatically insert AdSense ads at optimal positions', 'ad-inserter') . ' ', 'AdSense Auto Ads'); $debug_script = new ai_block_labels ('ai-debug-script'); $debug_block_start = $debug_script->block_start (); $debug_block_start .= $debug_script->bar ($name, '', $message, $right_text); if ($javascript) $debug_block_start = str_replace (array ('"', "\n", "\r"), array ("'", "\\n", ''), $debug_block_start); $debug_block_end = $debug_script->block_end (); if ($javascript) $debug_block_end = str_replace (array ('"', "\n", "\r"), array ("'", "\\n", ''), $debug_block_end); $html_code = htmlspecialchars ($code); if ($javascript) $html_code = str_replace (array ("\n", "\r"), array ("\\n", ''), $html_code); $html_inserted_code = htmlspecialchars ($inserted_code); if ($javascript) $html_inserted_code = str_replace (array ("\n", "\r"), array ("\\n", ''), $html_inserted_code); return $debug_block_start . "
    " . $html_code . "
    " . $html_inserted_code . "
    " . $debug_block_end; } function ai_http_header () { global $block_object, $ai_wp_data; $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_HTTP_HEADER; $obj = $block_object [AI_HEADER_OPTION_NAME]; $obj->clear_code_cache (); if ($obj->get_enable_manual ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_404 || $obj->get_enable_404()) { // Prevent group activation when processing code for HTTP headers $ai_wp_data [AI_NO_GROUP_ACTIVATION] = true; $processed_code = do_shortcode ($obj->ai_getCode ()); unset ($ai_wp_data [AI_NO_GROUP_ACTIVATION]); if (strpos ($processed_code, AD_HTTP_SEPARATOR) !== false) { $codes = explode (AD_HTTP_SEPARATOR, $processed_code); $processed_code = $codes [0]; } else $processed_code = ''; $header_lines = explode ("\n", $processed_code); foreach ($header_lines as $header_line) { if (trim ($header_line) != '' && strpos ($header_line, ':') !== false) { header (trim ($header_line)); } } } } } function ai_wp_head_hook () { global $block_object, $ai_wp_data, $ai_total_plugin_time/*, $ai_front_translations*/; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("HEAD HOOK START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } $ai_wp_data [AI_HEAD] = true; // $adb_code = defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION && $ai_wp_data [AI_ADB_DETECTION] && !isset ($ai_wp_data [AI_ADB_SHORTCODE_DISABLED]); if (defined ('AI_BUFFERING')) { if (get_output_buffering ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { ai_buffering_start (); } } } if (!get_disable_js_code () && (get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0) && (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0 || (isset ($_GET [AI_URL_DEBUG_PROCESSING_FE]) && $_GET [AI_URL_DEBUG_PROCESSING_FE] != 0))) { echo '', "\n"; // if ($adb_code) { // echo "\n"; // } else { echo "\n"; // } echo '', "\n"; } $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_NONE; ai_header_noindex (); add_head_inline_styles (); $header_code = ''; $header = $block_object [AI_HEADER_OPTION_NAME]; if ($header->get_enable_manual ()) { if (!$header->get_debug_disable_insertion () && !get_disable_header_code ()) { if ($header->check_server_side_detection ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_404 || $header->get_enable_404()) { $processed_code = do_shortcode ($header->ai_getCode ()); if (strpos ($processed_code, AD_HTTP_SEPARATOR) !== false) { $codes = explode (AD_HTTP_SEPARATOR, $processed_code); $processed_code = ltrim ($codes [1]); } if (strpos ($processed_code, AD_AMP_SEPARATOR) !== false) { $codes = explode (AD_AMP_SEPARATOR, $processed_code); $processed_code = $codes [0]; } elseif ($ai_wp_data [AI_WP_AMP_PAGE]) $processed_code = ''; $header_code = $processed_code; echo $processed_code; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (strlen ($processed_code) != 0) ai_log ("HEAD CODE: " . strlen ($processed_code) . ' characters'); } } } } else { if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ('HEAD CODE DEBUG NO INSERTION'); } } } if (defined ('AI_BUFFERING')) { if (get_output_buffering () && !get_disable_header_code ()) { $ai_head_codes = ""; echo $ai_head_codes; // $header_code .= $ai_head_codes; // Don't count this code } } if (!$ai_wp_data [AI_CODE_FOR_IFRAME]) { if ($ai_wp_data [AI_WP_DEBUGGING] != 0 && isset ($_GET ['ai-debug-code']) && !defined ('AI_DEBUGGING_DEMO')) { if (is_numeric ($_GET ['ai-debug-code']) && $_GET ['ai-debug-code'] >= 1 && $_GET ['ai-debug-code'] <= 96) { $obj = $block_object [(int) $_GET ['ai-debug-code']]; $block_name = $obj->number . '   ' . $obj->get_ad_name (); if (!$header->get_debug_disable_insertion ()) { $ai_wp_debugging = $ai_wp_data [AI_WP_DEBUGGING]; $ai_wp_data [AI_WP_DEBUGGING] = 0; $code_for_insertion = $obj->get_code_for_insertion (); $ai_wp_data [AI_WP_DEBUGGING] = $ai_wp_debugging; } else $code_for_insertion = ''; // $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_code_debug_block (' ' . $block_name, '', __('Code for insertion', 'ad-inserter') . ' ' . strlen ($code_for_insertion) . ' ' . _n('character', 'characters', strlen ($code_for_insertion), 'ad-inserter') . ' ', $obj->ai_getCode (), $code_for_insertion, true) . "\"); $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"" . get_code_debug_block (' ' . $block_name, '', __('Code for insertion', 'ad-inserter') . ' ' . strlen ($code_for_insertion) . ' ' . _n('character', 'characters', strlen ($code_for_insertion), 'ad-inserter') . ' ', $obj->ai_getCode (), $code_for_insertion, true) . "\"); "; } } if (!get_disable_js_code () && $ai_wp_data [AI_IFRAMES]) { echo "\n"; } if (!ai_inline_js () /*&& $ai_wp_data [AI_IFRAMES]*/) { echo "\n"; } if (!get_disable_js_code () && ($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0) { // $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= ' setTimeout (function(){jQuery(\'body\').prepend ("' . get_page_type_debug_info () . '");}, 1); $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= 'setTimeout (function(){document.querySelector (\'body\').insertAdjacentHTML (\'afterbegin\', "' . get_page_type_debug_info () . '");}, 1); '; } if (!get_disable_header_code () && isset ($_GET ['ai-debug-code']) && !defined ('AI_DEBUGGING_DEMO')) { // $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_code_debug_block (' ' . __('Header code', 'ad-inserter') . ' ' . ($header->get_enable_manual () ? '' : ' ' . _x('DISABLED', 'Header code', 'ad-inserter')), '<head>...</head>', strlen ($header_code) . ' ' . _n('character inserted', 'characters inserted', strlen ($header_code), 'ad-inserter') . ' ', $header->ai_getCode (), $header_code, true) . "\"); $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"" . get_code_debug_block (' ' . __('Header code', 'ad-inserter') . ' ' . ($header->get_enable_manual () ? '' : ' ' . _x('DISABLED', 'Header code', 'ad-inserter')), '<head>...</head>', strlen ($header_code) . ' ' . _n('character inserted', 'characters inserted', strlen ($header_code), 'ad-inserter') . ' ', $header->ai_getCode (), $header_code, true) . "\"); "; } } // After Header code info if (!$ai_wp_data [AI_CODE_FOR_IFRAME]) { if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { // No scripts on AMP pages if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0 && $ai_wp_data [AI_ADB_DETECTION]) { // $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"" . get_adb_status_debug_info () . "\"); $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"" . get_adb_status_debug_info () . "\"); "; } } if (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_AD_BLOCKING_STATUS | AI_DEBUG_BLOCKS)) != 0) { // $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"\"); $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"\"); "; if (!$ai_wp_data [AI_UNFILTERED_HTML]) { // $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= " jQuery('body').prepend (\"
    ".__('UNFILTERED HTML DISABLED', 'ad-inserter')."
    \"); $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= "document.querySelector ('body').insertAdjacentHTML ('afterbegin', \"
    ".__('UNFILTERED HTML DISABLED', 'ad-inserter')."
    \"); "; } } } // if (!get_disable_js_code () && $ai_wp_data [AI_CODE_FOR_IFRAME]) { // echo '', "\n"; // } $ai_wp_data [AI_HEAD] = false; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("HEAD HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } function ai_amp_head_hook () { global $block_object, $ai_wp_data, $ai_total_plugin_time; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("AMP HEAD HOOK START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } $ai_wp_data [AI_HEAD] = true; if (defined ('AI_BUFFERING')) { if (get_output_buffering ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_AJAX) { ai_buffering_start (); } } } $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_NONE; ai_header_noindex (); $header = $block_object [AI_HEADER_OPTION_NAME]; if ($header->get_enable_manual ()) { if (!$header->get_debug_disable_insertion () && !get_disable_header_code ()) { if ($header->check_server_side_detection ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_404 || $header->get_enable_404()) { $processed_code = do_shortcode ($header->ai_getCode ()); if (strpos ($processed_code, AD_HTTP_SEPARATOR) !== false) { $codes = explode (AD_HTTP_SEPARATOR, $processed_code); $processed_code = ltrim ($codes [1]); } // ai_log ("ai_amp_head_hook "); if (strpos ($processed_code, AD_AMP_SEPARATOR) !== false) { $codes = explode (AD_AMP_SEPARATOR, $processed_code); $processed_code = ltrim ($codes [1]); echo $processed_code; // ai_log ("ai_amp_head_hook " . $processed_code); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (strlen ($processed_code) != 0) ai_log ("HEAD CODE: " . strlen ($processed_code) . ' bytes'); } } } } } } if (defined ('AI_BUFFERING')) { if (get_output_buffering () && !get_disable_header_code ()) { $ai_head_codes = ""; echo $ai_head_codes; } } $ai_wp_data [AI_HEAD] = false; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("AMP HEAD HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } function ai_front_translations_code () { global $ai_front_translations, $ai_wp_data; // if (get_disable_js_code () || (!$ai_wp_data [AI_HTML_ELEMENT_SELECTION] && $ai_wp_data [AI_WP_DEBUGGING] == 0)) return ''; // if (!$ai_wp_data [AI_HTML_ELEMENT_SELECTION] /*&& $ai_wp_data [AI_WP_DEBUGGING] == 0*/) return ''; $object_name = 'ai_front'; $l10n = $ai_front_translations; $code = '/* $value) { if (!is_scalar ($value)) continue; $l10n [$key] = html_entity_decode ((string) $value, ENT_QUOTES, 'UTF-8'); } // $code .= "var $object_name = " . wp_json_encode ($l10n) . ";\n"; $code .= "$object_name = " . wp_json_encode ($l10n) . ";\n"; $code .= '/* ]]> */ '; return ($code); } function ai_amp_css_hook () { global $ai_wp_data; if (get_disable_css_code ()) return; $ai_wp_data [AI_AMP_CSS] = 'AMP CSS HOOK'; if ($ai_wp_data [AI_CLIENT_SIDE_DETECTION] && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { $viewport_css = get_viewport_css (); $viewport_css = str_replace ('!important', '', $viewport_css); echo $viewport_css; } if (defined ('AI_AMP_HEADER_STYLES') && AI_AMP_HEADER_STYLES || $ai_wp_data [AI_WP_DEBUGGING] != 0) { if (defined ('AI_AMP_HEADER_STYLES') && AI_AMP_HEADER_STYLES) { if ($ai_wp_data [AI_WP_DEBUGGING] != 0) generate_debug_css_base (); echo get_alignment_css (); echo str_replace ('!important', '', ai_get_admin_toolbar_debugging_styles ()); echo ".ai-align-left * {margin: 0 auto 0 0; text-align: left;}\n"; echo ".ai-align-right * {margin: 0 0 0 auto; text-align: right;}\n"; echo ".ai-center * {margin: 0 auto; text-align: center; }\n"; } if ($ai_wp_data [AI_WP_DEBUGGING] != 0) generate_debug_css (); } } function ai_amp_css_hook_style () { echo "\n"; } function ai_wp_footer_hook_end_buffering () { global $ai_wp_data, $ai_total_plugin_time; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("FOOTER HOOK TO END BUFFERING START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } if (defined ('AI_BUFFERING')) { if (get_output_buffering ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { ai_buffering_end (); } } } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("FOOTER HOOK TO END BUFFERING END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } function ai_wp_footer_hook () { global $block_object, $ai_wp_data, $ad_inserter_globals, $ai_total_plugin_time; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("FOOTER HOOK START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } // if (defined ('AI_BUFFERING')) { // if (get_output_buffering ()) { // if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_AJAX && !$ai_wp_data [AI_CODE_FOR_IFRAME]) { // ai_buffering_end (); // } // } // } if ($ai_wp_data [AI_DISABLE_CACHING]) ai_disable_caching (); $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_FOOTER; $footer_code = ''; if (function_exists ('add_footer_scripts')) { add_footer_scripts (); } $footer = $block_object [AI_FOOTER_OPTION_NAME]; $footer->clear_code_cache (); if ($footer->get_enable_manual ()) { if (!$footer->get_debug_disable_insertion () && !get_disable_footer_code ()) { if ($footer->check_server_side_detection ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_404 || $footer->get_enable_404()) { $processed_code = do_shortcode ($footer->ai_getCode ()); if (strpos ($processed_code, AD_AMP_SEPARATOR) !== false) { $codes = explode (AD_AMP_SEPARATOR, $processed_code); $processed_code = $codes [0]; } elseif ($ai_wp_data [AI_WP_AMP_PAGE]) $processed_code = ''; $footer_code = $processed_code; echo $processed_code; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (strlen ($processed_code) != 0) ai_log ("FOOTER CODE: " . strlen ($processed_code) . ' characters'); } } } } else { if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ('FOOTER CODE DEBUG NO INSERTION'); } } } if (!$ai_wp_data [AI_CODE_FOR_IFRAME]) { if (!get_disable_footer_code () && isset ($_GET ['ai-debug-code']) && !defined ('AI_DEBUGGING_DEMO')) { echo get_code_debug_block (' ' . __('Footer code', 'ad-inserter') . ' ' . ($footer->get_enable_manual () ? '' : ' ' . _x('DISABLED', 'Footer code', 'ad-inserter')), '...</body>', strlen ($footer_code).' ' . _n('character inserted', 'characters inserted', strlen ($footer_code), 'ad-inserter'), $footer->ai_getCode (), $footer_code); } if (!get_disable_js_code () && (get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0) && (($ai_wp_data [AI_WP_DEBUGGING] & (AI_DEBUG_POSITIONS | AI_DEBUG_BLOCKS)) != 0 || (isset ($_GET [AI_URL_DEBUG_PROCESSING_FE]) && $_GET [AI_URL_DEBUG_PROCESSING_FE] != 0))) { if (!$ai_wp_data [AI_UNFILTERED_HTML]) { echo "
    ".__('UNFILTERED HTML DISABLED', 'ad-inserter')."
    \n"; } $class_0 = AI_DEBUG_STATUS_CLASS.' status-error'; $class_1 = AI_DEBUG_STATUS_CLASS.' status-ok'; $javascript_text = "
    " . __('JAVASCRIPT NOT WORKING', 'ad-inserter') . "
    "; $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] .= str_replace ('AI_HTML_CODE', $javascript_text, ai_get_js ('ai-errors-footer', false)); echo $javascript_text, "\n"; echo get_page_type_debug_info () , "\n"; // if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0 && isset ($_GET [AI_URL_DEBUG_PROCESSING_FE]) && $_GET [AI_URL_DEBUG_PROCESSING_FE] != 0) { // echo "\n
    \n\n";
    //        ai_write_debug_info (true);
    //        echo "\n
    \n"; // } } } if (!(defined ('DOING_AJAX') && DOING_AJAX) || $ai_wp_data [AI_CODE_FOR_IFRAME]) { add_footer_inline_scripts (); if (function_exists ('ai_add_footer_html')) { ai_add_footer_html (); } } if (function_exists ('ai_debug_footer')) { ai_debug_footer (); } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("FOOTER HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } if (!$ai_wp_data [AI_CODE_FOR_IFRAME]) { if ((get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0)) { if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0 && isset ($_GET [AI_URL_DEBUG_PROCESSING_FE]) && $_GET [AI_URL_DEBUG_PROCESSING_FE] != 0) { echo "\n
    \n\n";
            ai_write_debug_info (true);
            echo "\n
    \n"; } } } } function ai_amp_footer_hook () { global $block_object, $ai_wp_data, $ai_total_plugin_time; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("AMP FOOTER HOOK START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } if (defined ('AI_BUFFERING')) { if (get_output_buffering ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_AJAX) { ai_buffering_end (); } } } $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_FOOTER; $footer = $block_object [AI_FOOTER_OPTION_NAME]; $footer->clear_code_cache (); if ($footer->get_enable_manual ()) { if (!$footer->get_debug_disable_insertion () && !get_disable_footer_code ()) { if ($footer->check_server_side_detection ()) { if ($ai_wp_data [AI_WP_PAGE_TYPE] != AI_PT_404 || $footer->get_enable_404()) { $processed_code = do_shortcode ($footer->ai_getCode ()); if (strpos ($processed_code, AD_AMP_SEPARATOR) !== false) { $codes = explode (AD_AMP_SEPARATOR, $processed_code); $processed_code = ltrim ($codes [1]); echo $processed_code; } } } } } if (!isset ($ai_wp_data [AI_AMP_CSS])) { if (ai_amp_plugin_custom_css ()) { ai_amp_css_hook_style (); $ai_wp_data [AI_AMP_CSS] = 'AMP FOOTER STYLE'; } } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) != 0) { echo get_page_type_debug_info ('AMP ') , "\n"; } if ((get_remote_debugging () || ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0) && ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0 && isset ($_GET [AI_URL_DEBUG_PROCESSING_FE]) && $_GET [AI_URL_DEBUG_PROCESSING_FE] != 0) { echo "\n
    \n\n";
        ai_write_debug_info (true);
        echo "\n
    \n"; } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("AMP FOOTER HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } function ai_write_debug_info ($write_processing_log = false) { global $block_object, $ai_last_time, $ai_total_plugin_time, $ai_total_block_php_time, $ai_total_hook_php_time, $ai_processing_log, $ai_db_options_extract, $ai_wp_data, $ai_db_options, $block_insertion_log, $ai_custom_hooks, $version_string, $subversion_string, $filter_hooks, $wpdb; ob_start (); echo sprintf ("%-25s%s", AD_INSERTER_NAME, AD_INSERTER_VERSION); if (function_exists ('ai_debug_log')) { ai_debug_log (); } echo "\n\n"; if (($install_timestamp = get_option (AI_INSTALL_NAME)) !== false) { echo "INSTALLED: ", date ("Y-m-d H:i:s", $install_timestamp + get_option ('gmt_offset') * 3600); if (isset ($ai_wp_data [AI_INSTALL_TIME_DIFFERENCE])) { printf (' (%04d-%02d-%02d %02d:%02d:%02d, %d days ago)', $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE]->y, $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE]->m, $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE]->d, $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE]->h, $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE]->i, $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE]->s, isset ($ai_wp_data [AI_DAYS_SINCE_INSTAL]) ? $ai_wp_data [AI_DAYS_SINCE_INSTAL] : null); } echo "\n"; } echo "GENERATED (WP time): ", date ("Y-m-d H:i:s", time() + get_option ('gmt_offset') * 3600), "\n"; echo "GENERATED (Server time): ", date ("Y-m-d H:i:s", time()), "\n"; echo "PLUGIN CODE PROCESSING: ", number_format (($ai_total_plugin_time - $ai_total_block_php_time - $ai_total_hook_php_time) * 1000, 2, '.' , ''), " ms\n"; echo "PLUGIN HOOKS PROCESSING: ", number_format ($ai_total_hook_php_time * 1000, 2, '.' , ''), " ms\n"; echo "BLOCK CODE PROCESSING: ", number_format ($ai_total_block_php_time * 1000, 2, '.' , ''), " ms\n"; echo "TOTAL PROCESSING TIME: ", number_format ($ai_total_plugin_time * 1000, 2, '.' , ''), " ms\n"; // echo "MEMORY USED: ", number_format (memory_get_usage (true) / 1024 / 1024, 2, '.' , ''), " MB\n"; // echo "PEAK MEMORY USED: ", number_format (memory_get_peak_usage (true) / 1024 / 1024, 2, '.' , ''), " MB\n"; echo "SETTINGS: "; if (isset ($ai_db_options [AI_OPTION_GLOBAL]['VERSION'])) echo (int) ($ai_db_options [AI_OPTION_GLOBAL]['VERSION'][0].$ai_db_options [AI_OPTION_GLOBAL]['VERSION'][1]), '.', (int) ($ai_db_options [AI_OPTION_GLOBAL]['VERSION'][2].$ai_db_options [AI_OPTION_GLOBAL]['VERSION'][3]), '.', (int) ($ai_db_options [AI_OPTION_GLOBAL]['VERSION'][4].$ai_db_options [AI_OPTION_GLOBAL]['VERSION'][5]); echo "\n"; echo "SETTINGS SIZE: ", strlen (serialize (ai_get_option (AI_OPTION_NAME))), "\n"; echo "SETTINGS TIMESTAMP: "; echo isset ($ai_db_options [AI_OPTION_GLOBAL]['TIMESTAMP']) ? date ("Y-m-d H:i:s", $ai_db_options [AI_OPTION_GLOBAL]['TIMESTAMP'] + get_option ('gmt_offset') * 3600) : "", "\n"; $expected_extract_version = $version_string . $subversion_string . '-' . '96'; if (function_exists ('ai_system_output_check')) { $expected_extract_version .= 'P'; } $extract_source = ''; $saved_settings = ai_get_option (AI_OPTION_NAME); if (isset ($saved_settings [AI_OPTION_EXTRACT]['VERSION']) && $saved_settings [AI_OPTION_EXTRACT]['VERSION'] == $expected_extract_version) { $saved_extract = $saved_settings [AI_OPTION_EXTRACT]; $extract_source = 'SAVED SETTINGS'; } else { $saved_extract = get_option (AI_EXTRACT_NAME); $extract_source = defined ('AI_EXTRACT_GENERATED') ? "REGENERATED" : 'SAVED EXTRACT'; } echo "SETTINGS EXTRACT: "; if (isset ($saved_extract ['VERSION'])) { $extract_subversion_blocks = explode ('-', $saved_extract ['VERSION']); array_shift ($extract_subversion_blocks); echo (int) ($saved_extract ['VERSION'][0].$saved_extract ['VERSION'][1]), '.', (int) ($saved_extract ['VERSION'][2].$saved_extract ['VERSION'][3]), '.', (int) ($saved_extract ['VERSION'][4].$saved_extract ['VERSION'][5]), '-', implode ('-', $extract_subversion_blocks); } echo"\n"; echo "EXTRACT TIMESTAMP: "; echo isset ($saved_extract ['TIMESTAMP']) ? date ("Y-m-d H:i:s", $saved_extract ['TIMESTAMP'] + get_option ('gmt_offset') * 3600) : "", "\n"; echo "EXTRACT SOURCE: ", $extract_source, "\n"; echo "USER: "; if (($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) == AI_USER_LOGGED_IN) echo "LOGGED-IN "; else echo "NOT LOGGED-IN "; if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) == AI_USER_ADMINISTRATOR) echo "ADMINISTRATOR"; $current_user = wp_get_current_user(); echo "\n"; echo "USERNAME: ", $current_user->user_login, "\n"; echo 'USER ROLES: ', implode (', ', $current_user->roles), "\n"; echo 'MIN.USER FOR EXCEPTIONS: ', get_minimum_user_role (), "\n"; echo "PAGE TYPE: "; switch ($ai_wp_data [AI_WP_PAGE_TYPE]) { case AI_PT_STATIC: echo "STATIC PAGE"; break; case AI_PT_POST: echo "POST"; break; case AI_PT_HOMEPAGE: echo "HOMEPAGE"; break; case AI_PT_CATEGORY: echo "CATEGORY PAGE"; break; case AI_PT_ARCHIVE: echo "ARCHIVE PAGE"; break; case AI_PT_SEARCH: echo "SEARCH PAGE"; break; case AI_PT_404: echo "404 PAGE"; break; case AI_PT_ADMIN: echo "ADMIN"; break; case AI_PT_FEED: echo "FEED"; break; case AI_PT_AJAX: echo "AJAX"; break; case AI_PT_ANY: echo "ANY ?"; break; case AI_PT_NONE: echo "NONE ?"; break; default: echo "?"; break; } echo "\n"; switch ($ai_wp_data [AI_WP_PAGE_TYPE]) { case AI_PT_STATIC: case AI_PT_POST: $queried_object_id = ''; $queried_object = get_queried_object (); if ($queried_object) { $queried_object_id = $queried_object->ID; } echo 'PUBLISHED: ', date ("Y-m-d H:i:s", get_the_date ('U')), "\n"; echo 'ID: ', ai_get_post_id (); echo " (get_the_ID: ", get_the_ID (), ", get_queried_object: ", $queried_object_id, defined ('AI_USE_GET_QUERIED_OBJECT') && AI_USE_GET_QUERIED_OBJECT ? ', AI_USE_GET_QUERIED_OBJECT SET' : "", ")"; echo "\n"; echo 'POST TYPE: ', get_post_type (), "\n"; echo 'AUTHOR: ', strtolower (get_the_author_meta ('user_login')), ' (', get_the_author_meta ('display_name'), ")\n"; // $author = get_the_author_meta ('display_name'); // $author_login = get_the_author_meta ('user_login'); // $author_name = get_the_author_meta ('first_name') . " " . get_the_author_meta ('last_name'); $category_data = get_the_category(); $categories = array (); foreach ($category_data as $category) { $categories []= $category->name . ' ('.$category->slug.')'; } echo 'CATEGORIES: ', implode (', ', $categories), "\n"; $category_data = get_categories (); $categories = array (); foreach ($category_data as $category) { if (ai_post_is_in_child_categories ($category->slug)) { $categories []= $category->name . ' ('.$category->slug.')'; } } echo 'PARENT CATEGORIES: ', implode (', ', $categories), "\n"; echo 'PRIMARY CATEGORY: ', ai_primary_category (), "\n"; $tag_data = wp_get_post_tags (get_the_ID()); $tags = array (); foreach ($tag_data as $tag) { $tags []= $tag->name . ' ('.$tag->slug.')'; } echo 'TAGS: ', implode (', ', $tags), "\n"; $taxonomies = array (); $taxonomy_names = get_post_taxonomies (); foreach ($taxonomy_names as $taxonomy_name) { $terms = get_the_terms (0, $taxonomy_name); if (is_array ($terms)) { foreach ($terms as $term) { $taxonomies [] = strtolower ($term->taxonomy) . ':' . strtolower ($term->slug); } } } echo 'TAXONOMIES: ', implode (', ', $taxonomies), "\n"; $taxonomy_data = get_taxonomies (); $taxonomies = array (); foreach ($taxonomy_data as $taxonomy) { $terms = get_terms ($taxonomy); foreach ($terms as $term) { if (ai_post_is_in_child_taxonomies ($taxonomy, $term->slug)) { $taxonomies []= $term->name . ' ('.$taxonomy.':'.$term->slug.')'; } } } echo 'PARENT TAXONOMIES: ', implode (', ', $taxonomies), "\n"; if (isset ($_GET [AI_URL_DEBUG_META])) { $post_meta = get_post_meta (get_the_ID()); $meta_string = array (); foreach ($post_meta as $key => $post_meta_field) { foreach ($post_meta_field as $post_meta_field_item) { $meta_string []= $key . ':' . $post_meta_field_item; } } echo 'POST META: ', str_replace (array ("", "\n", "\r"), array ("[!--", "--]", "*n", "*r"), implode (', ', $meta_string)), "\n"; } break; case AI_PT_CATEGORY: $category_data = get_queried_object(); $categories = array (); if ($category_data instanceof WP_Term) { $categories []= $category_data->slug; } echo 'CATEGORY: ', implode (', ', $categories), "\n"; break; case AI_PT_ARCHIVE: $tag_data = wp_get_post_tags (get_the_ID()); $tags = array (); foreach ($tag_data as $tag) { $tags []= $tag->slug; } echo 'TAG: ', implode (', ', $tags), "\n"; break; } echo 'AMP PAGE: ', ($ai_wp_data [AI_WP_AMP_PAGE] ? 'YES' : 'NO'), "\n"; if ($ai_wp_data [AI_WP_AMP_PAGE]) { echo 'AMP CSS: ', (isset ($ai_wp_data [AI_AMP_CSS]) ? $ai_wp_data [AI_AMP_CSS] : ''), "\n"; } echo 'URL: ', esc_attr ($ai_wp_data [AI_WP_URL]), "\n"; echo 'REFERRER: ', isset ($_SERVER['HTTP_REFERER']) ? strtolower (parse_url ($_SERVER['HTTP_REFERER'], PHP_URL_HOST)) . ' ('. remove_debug_parameters_from_url ($_SERVER['HTTP_REFERER']).')' : "", "\n"; if (function_exists ('ai_debug')) ai_debug (); if ($ai_wp_data [AI_CLIENT_SIDE_DETECTION] || 1) { for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = get_viewport_name ($viewport); $viewport_width = get_viewport_width ($viewport); if ($viewport_name != '') { echo 'VIEWPORT ', $viewport, ': ', sprintf ("%-16s min width %s", $viewport_name.' ', $viewport_width), " px\n"; } } } echo 'SERVER-SIDE DETECTION: ', $ai_wp_data [AI_SERVER_SIDE_DETECTION] ? 'USED' : "NOT USED", "\n"; if ($ai_wp_data [AI_SERVER_SIDE_DETECTION]) { echo 'SERVER-SIDE DEVICE: '; if (AI_DESKTOP) echo "DESKTOP\n"; elseif (AI_TABLET) echo "TABLET\n"; elseif (AI_PHONE) echo "PHONE\n"; else echo "?\n"; } echo 'CLIENT-SIDE DETECTION: ', $ai_wp_data [AI_CLIENT_SIDE_DETECTION] ? 'USED' : "NOT USED", "\n"; echo 'DISABLE CACHING: ', $ai_wp_data [AI_DISABLE_CACHING] ? 'USED' : "NOT USED", "\n"; echo 'STICKY WIDGETS: ', $ai_wp_data [AI_STICKY_WIDGETS] ? 'USED' : "NOT USED", "\n"; if (function_exists ('ai_debug_features')) ai_debug_features (); $enabled_custom_hooks = array (); foreach ($ai_custom_hooks as $ai_custom_hook) { $hook = $ai_custom_hook ['index']; $enabled_custom_hooks [] = $ai_custom_hook ['action']; } for ($hook = 1; $hook <= 20; $hook ++) { $name = str_replace (array ('<', '>'), array ('<', '>'), get_hook_name ($hook)); $action = get_hook_action ($hook); if (get_hook_enabled ($hook) /*&& $name != '' && $action != ''*/) { $priority = get_hook_priority ($hook); echo 'CUSTOM HOOK ', sprintf ("%2d", $hook), ': ', sprintf ("%-30s %-35s %d %s", $name, $action, $priority, !in_array ($action, $enabled_custom_hooks) ? 'INVALID' : ''), "\n"; } } echo 'BLOCK CLASS NAME: ', get_block_class_name (), "\n"; echo 'INLINE STYLES: ', get_inline_styles () ? 'ENABLED' : 'DISABLED', "\n"; echo 'DYNAMIC BLOCKS: '; switch (get_dynamic_blocks()) { case AI_DYNAMIC_BLOCKS_SERVER_SIDE: echo AI_TEXT_ENG_SERVER_SIDE; break; case AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC: echo AI_TEXT_ENG_SERVER_SIDE_W3TC; break; case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW: echo AI_TEXT_ENG_CLIENT_SIDE_SHOW; break; case AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT: echo AI_TEXT_ENG_CLIENT_SIDE_INSERT; break; } echo "\n"; echo 'STICKY WIDGET MODE: '; switch (get_sticky_widget_mode ()) { case AI_STICKY_WIDGET_MODE_CSS: echo AI_TEXT_CSS; break; case AI_STICKY_WIDGET_MODE_CSS_PUSH: echo AI_TEXT_CSS_PUSH; break; case AI_STICKY_WIDGET_MODE_JS: echo AI_TEXT_JS; break; } echo "\n"; echo 'PARAGRAPH COUNTING: '; switch (get_paragraph_counting_functions()) { case AI_STANDARD_PARAGRAPH_COUNTING_FUNCTIONS: echo AI_TEXT_ENG_STANDARD; break; case AI_MULTIBYTE_PARAGRAPH_COUNTING_FUNCTIONS: echo AI_TEXT_ENG_MULTIBYTE; break; } echo "\n"; echo 'NO PAR. COUNTING INSIDE: ', get_no_paragraph_counting_inside (), "\n"; if (defined ('AI_BUFFERING')) { echo 'OUTPUT BUFFERING: '; switch (get_output_buffering()) { case AI_OUTPUT_BUFFERING_DISABLED: echo AI_TEXT_ENG_DISABLED; break; case AI_OUTPUT_BUFFERING_ENABLED: echo AI_TEXT_ENG_ENABLED; break; } echo "\n"; } echo 'AD LABEL: ', get_ad_label (), "\n"; echo 'AD LABEL HTML CODE: ', trim (ai_ad_label_code (), "\n"), "\n"; if (defined ('AI_STICKY_SETTINGS') && AI_STICKY_SETTINGS) { echo 'MAIN CONTENT: ', get_main_content_element (), "\n"; } echo 'PLUGIN PRIORITY: ', get_plugin_priority (), "\n"; echo 'TAB SETUP DELAY: ', get_tab_setup_delay (), "\n"; echo 'ADMIN DISABLE CACHING: ', get_disable_caching () ? 'ENABLED' : 'DISABLED', "\n"; echo 'DON\'T USE jQuery CODE: ', defined ('AI_NO_JQUERY') ? 'PHP CONSTANT' : (isset ($_GET [AI_URL_DEBUG_NO_JQUERY]) && !empty ($_GET [AI_URL_DEBUG_NO_JQUERY]) ? 'URL PARAMETER' : 'NOT SET'), "\n"; echo 'WAIT FOR JQUERY: ', get_wait_for_jquery () ? 'ENABLED' : 'DISABLED', "\n"; echo 'jQuery LOADED: ', wp_script_is ('jquery', 'registered') || wp_script_is ('jquery', 'printed') ? 'YES' : 'NO', "\n"; echo 'PLAIN JS CODE: ', $ai_wp_data [AI_NO_JQUERY_CODE] ? 'YES' : 'NO', "\n"; echo 'JAVASCRIPT CODE: ', get_javascript_code_mode () == AI_JAVASCRIPT_CODE_INLINE ? AI_TEXT_ENG_INLINE : AI_TEXT_ENG_FILE, "\n"; echo 'DO NOT CACHE CONSTANTS: ', defined ('DONOTCACHEPAGE') ? 'DONOTCACHEPAGE ' : '', defined ('DONOTCACHEOBJECT') ? 'DONOTCACHEOBJECT ' : '', defined ('DONOTCACHEDB') ? 'DONOTCACHEDB ' : '', "\n"; $virtual_ads_txt = get_option (AI_ADS_TXT_NAME); $virtual_ads_txt_lines = explode ("\n", $virtual_ads_txt); echo 'VIRTUAL ADS.TXT: ', $virtual_ads_txt !== false ? count ($virtual_ads_txt_lines). ' LINES' : 'NOT USED', "\n"; echo 'HEADER: ', $block_object [AI_HEADER_OPTION_NAME]->get_enable_manual () ? 'ENABLED' : 'DISABLED', "\n"; echo 'FOOTER: ', $block_object [AI_FOOTER_OPTION_NAME]->get_enable_manual () ? 'ENABLED' : 'DISABLED', "\n"; if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { echo 'AD BLOCKING DETECTION: ', $ai_wp_data [AI_ADB_DETECTION] ? 'ENABLED' : 'DISABLED', "\n"; echo 'DISABLED BY SHORTCODE: ', isset ($ai_wp_data [AI_ADB_SHORTCODE_DISABLED]) ? 'YES' : "NO", "\n"; if ($ai_wp_data [AI_ADB_DETECTION]) { echo 'ADB ACTION: '; switch (get_adb_action (true)) { case AI_ADB_ACTION_NONE: echo AI_TEXT_ENG_NONE; break; case AI_ADB_ACTION_MESSAGE: echo AI_TEXT_ENG_POPUP_MESSAGE; break; case AI_ADB_ACTION_REDIRECTION: echo AI_TEXT_ENG_REDIRECTION; break; } echo "\n"; echo 'ADB NO ACTION: '; switch (get_adb_no_action (true)) { case AI_ADB_NO_ACTION_NONE: echo AI_TEXT_ENG_NONE; break; case AI_ADB_NO_ACTION_LOGGED_IN: echo AI_TEXT_ENG_DISPLAY_LOGGED_IN_USERS; break; case AI_ADB_NO_ACTION_ADMINISTRATORS: echo AI_TEXT_ENG_DISPLAY_ADMINISTRATORS; break; } echo "\n"; echo 'ADB DELAY ACTION: ', get_delay_action (), "\n"; echo 'ADB NO ACTION PERIOD: ', get_no_action_period (), "\n"; echo 'ADB SELECTORS: ', get_adb_selectors (true), "\n"; if (function_exists ('ai_debug')) { echo 'ADB DETECTION: ', get_adb_detection () == AI_ADB_DETECTION_ADVANCED ? 'ADVANCED' : 'STANDARD', "\n"; } echo 'ADB EXTERNAL SCRIPTS: ', get_adb_external_scripts () ? 'ON' : 'OFF', "\n"; $redirection_page = get_redirection_page (); echo 'ADB REDIRECTION PAGE: ', $redirection_page != 0 ? get_the_title ($redirection_page) . ' (' . get_permalink ($redirection_page) . ')' : 'Custom Url', "\n"; echo 'ADB REDIRECTION URL: ', get_custom_redirection_url (), "\n"; echo 'ADB MESSAGE: ', str_replace (array (""), array (""), $block_object [AI_ADB_MESSAGE_OPTION_NAME]->ai_getCode ()), "\n"; echo 'ADB MESSAGE CSS: ', get_message_css (), "\n"; echo 'ADB OVERLAY CSS: ', get_overlay_css (), "\n"; echo 'ADB UNDISMISSIBLE: ', get_undismissible_message (true) ? 'ON' : 'OFF', "\n"; } } if (isset ($_SERVER ['HTTP_USER_AGENT'])) { echo 'USER AGENT: ', $_SERVER ['HTTP_USER_AGENT'], "\n"; } if (isset ($_SERVER ['HTTP_ACCEPT_LANGUAGE'])) { echo 'LANGUAGE: ', $_SERVER ['HTTP_ACCEPT_LANGUAGE'], "\n"; } if (isset ($ai_wp_data [AI_CLIENTS]) && isset ($ai_wp_data [AI_AGENT])) { $agent = $ai_wp_data [AI_AGENT]; if (!empty ($ai_wp_data [AI_CLIENTS])) { $ai_wp_data [AI_CLIENTS] = array_unique ($ai_wp_data [AI_CLIENTS]); foreach ($ai_wp_data [AI_CLIENTS] as $client) { echo sprintf (" %-23s", $client.':'), check_client_list ($client, true) ? 'YES' : 'NO', "\n"; } } } if (!empty ($filter_hooks)) { echo "\n"; foreach ($filter_hooks as $filter_hook) { echo "ACTIVE FILTER HOOK: "; foreach ($filter_hook as $index => $filter_hook_data) { if ($index != 0) echo ", "; echo $filter_hook_data; } echo "\n"; } } if (isset ($_GET [AI_URL_DEBUG_TRACKING]) && $_GET [AI_URL_DEBUG_TRACKING]) { if ($log = get_transient ('ai_debug_tracking')) { echo 'TRACKING LOG: ', "\n"; echo $log; echo "\n"; } } echo "\n"; // if ($block_object [AI_HEADER_OPTION_NAME]->get_enable_manual ()) { // echo "HEADER CODE ========================================================\n"; // echo ai_dump_code ($block_object [AI_HEADER_OPTION_NAME]->ai_getCode ()); // echo "\n====================================================================\n\n"; // } // if ($block_object [AI_FOOTER_OPTION_NAME]->get_enable_manual ()) { // echo "FOOTER CODE ========================================================\n"; // echo ai_dump_code ($block_object [AI_FOOTER_OPTION_NAME]->ai_getCode ()); // echo "\n====================================================================\n\n"; // } $default = new ai_Block (1); echo "BLOCK SETTINGS Po Pa Hp Cp Ap Sp AM Aj Fe 404 Wi Sh PHP\n"; for ($block = 1; $block <= 96; $block ++) { $obj = $block_object [$block]; $settings = ""; $insertion_settings = ''; $alignment_settings = ''; $default_settings = true; // $display_type = ''; foreach (array_keys ($default->wp_options) as $key){ switch ($key) { case AI_OPTION_CODE: case AI_OPTION_BLOCK_NAME: continue 2; case AI_OPTION_DISPLAY_ON_PAGES: case AI_OPTION_DISPLAY_ON_POSTS: case AI_OPTION_DISPLAY_ON_HOMEPAGE: case AI_OPTION_DISPLAY_ON_CATEGORY_PAGES: case AI_OPTION_DISPLAY_ON_SEARCH_PAGES: case AI_OPTION_DISPLAY_ON_ARCHIVE_PAGES: case AI_OPTION_ENABLE_AMP: case AI_OPTION_ENABLE_AJAX: case AI_OPTION_ENABLE_FEED: case AI_OPTION_ENABLE_404: case AI_OPTION_ENABLE_MANUAL: case AI_OPTION_ENABLE_WIDGET: case AI_OPTION_ENABLE_PHP_CALL: if ($obj->wp_options [$key] != $default->wp_options [$key]) $default_settings = false; continue 2; } // if (gettype ($obj->wp_options [$key]) == 'string' && gettype ($default->wp_options [$key]) == 'integer') { // $default->wp_options [$key] = strval ($default->wp_options [$key]); // } // elseif (gettype ($obj->wp_options [$key]) == 'integer' && gettype ($default->wp_options [$key]) == 'string') { // $default->wp_options [$key] = intval ($default->wp_options [$key]); // } // if ($obj->wp_options [$key] !== $default->wp_options [$key]) { if ($obj->wp_options [$key] != $default->wp_options [$key]) { $default_settings = false; switch ($key) { case AI_OPTION_AUTOMATIC_INSERTION: $insertion_settings = $obj->get_automatic_insertion_text (false, false); break; case AI_OPTION_SERVER_SIDE_INSERTION: $settings .= "[" . $key . ": " . $obj->get_automatic_insertion_text (true, false) . ']'; break; case AI_OPTION_ALIGNMENT_TYPE: $alignment_settings = $obj->get_alignment_type_text (false); break; case AI_OPTION_ENABLED_ON_WHICH_PAGES: $settings .= "[" . $key . ": " . $obj->get_ad_enabled_on_which_pages_text (false) . ']'; break; case AI_OPTION_ENABLED_ON_WHICH_POSTS: $settings .= "[" . $key . ": " . $obj->get_ad_enabled_on_which_posts_text (false) . ']'; break; case AI_OPTION_EXCEPTIONS_FUNCTION: $settings .= "[" . $key . ": " . $obj->get_exceptions_function_text (false) . ']'; break; case AI_OPTION_FILTER_TYPE: $settings .= "[" . $key . ": " . $obj->get_filter_type_text (false) . ']'; break; case AI_OPTION_AVOID_ACTION: $settings .= "[" . $key . ": " . $obj->get_avoid_action_text (false) . ']'; break; case AI_OPTION_AVOID_DIRECTION: $settings .= "[" . $key . ": " . $obj->get_avoid_direction_text (false) . ']'; break; case AI_OPTION_DIRECTION_TYPE: $settings .= "[" . $key . ": " . $obj->get_direction_type_text (false) . ']'; break; case AI_OPTION_PARAGRAPH_TEXT_TYPE: $settings .= "[" . $key . ": " . $obj->get_paragraph_text_type_text (false) . ']'; break; case AI_OPTION_COUNT_INSIDE: $settings .= "[" . $key . ": " . $obj->get_count_inside_text (false) . ']'; break; case AI_OPTION_COUNT_INSIDE_ELEMENTS_CONTAIN: $settings .= "[" . $key . ": " . $obj->get_count_inside_elements_contain_text (false) . ']'; break; case AI_OPTION_DISPLAY_FOR_USERS: $settings .= "[" . $key . ": " . $obj->get_display_for_users_text (false) . ']'; break; case AI_OPTION_DISPLAY_FOR_DEVICES: $settings .= "[" . $key . ": " . $obj->get_display_for_devices_text (false) . ']'; break; case AI_OPTION_PARAGRAPH_TEXT: case AI_OPTION_COUNT_INSIDE_ELEMENTS_TEXT: case AI_OPTION_AVOID_TEXT_ABOVE: case AI_OPTION_AVOID_TEXT_BELOW: case AI_OPTION_HTML_SELECTOR: if ($write_processing_log) $settings .= "[" . $key . ": " . ai_log_filter_content (html_entity_decode ($obj->wp_options [$key])) . ']'; else $settings .= "[" . $key . ": " . $obj->wp_options [$key] . ']'; break; default: $settings .= "[" . $key . ": " . $obj->wp_options [$key] . ']'; break; } // $settings .= ' ['.gettype ($obj->wp_options [$key]).':'.$obj->wp_options [$key].'#'.gettype ($default->wp_options [$key]).':'.$default->wp_options [$key].'] '; } else switch ($key) { case AI_OPTION_AUTOMATIC_INSERTION: $insertion_settings = $obj->get_automatic_insertion_text (false, false); break; case AI_OPTION_ALIGNMENT_TYPE: $alignment_settings = $obj->get_alignment_type_text (false); break; } } if ($default_settings && $settings == '') continue; $settings = ' [' . $insertion_settings . '][' . $alignment_settings . ']' . $settings; echo sprintf ("%2d %-21s ", $block, $ai_wp_data [AI_MBSTRING_LOADED] ? mb_substr ($obj->get_ad_name(), 0, 21) : substr ($obj->get_ad_name(), 0, 21)); echo $obj->get_display_settings_post() ? "o" : ".", " "; echo $obj->get_display_settings_page() ? "o" : ".", " "; echo $obj->get_display_settings_home() ? "o" : ".", " "; echo $obj->get_display_settings_category() ? "o" : ".", " "; echo $obj->get_display_settings_archive() ? "o" : ".", " "; echo $obj->get_display_settings_search() ? "o" : ".", " "; echo $obj->get_enable_amp() ? "o" : ".", " "; echo $obj->get_enable_ajax() ? "o" : ".", " "; echo $obj->get_enable_feed() ? "o" : ".", " "; echo $obj->get_enable_404() ? "o" : ".", " "; echo $obj->get_enable_widget() ? "x" : ".", " "; echo $obj->get_enable_manual() ? "x" : ".", " "; echo $obj->get_enable_php_call() ? "x" : ".", " "; echo $settings, "\n"; } echo "\n"; $args = array ( 'public' => true, '_builtin' => false ); $custom_post_types = get_post_types ($args, 'names', 'and'); $screens = array_values (array_merge (array ('post', 'page'), $custom_post_types)); $args = array ( 'posts_per_page' => AI_LIST_EXCEPTIONS_LIMIT, 'offset' => 0, 'category' => '', 'category_name' => '', 'orderby' => 'type', 'order' => 'ASC', 'include' => '', 'exclude' => '', 'meta_query' => array ( array ( 'key' => '_adinserter_block_exceptions', 'value' => '', 'compare' => '!=' ) ), 'post_type' => $screens, 'post_mime_type' => '', 'post_parent' => '', 'author' => '', 'author_name' => '', 'post_status' => '', 'suppress_filters' => true ); $posts_pages = get_posts ($args); if (count ($posts_pages) != 0) { echo "EXCEPTIONS FOR BLOCKS ID TYPE TITLE URL\n"; foreach ($posts_pages as $page) { $post_meta = get_post_meta ($page->ID, '_adinserter_block_exceptions', true); if ($post_meta == '') continue; $post_type_object = get_post_type_object ($page->post_type); echo sprintf ("%-24s %-6s %-24s %-64s %s", $post_meta, $page->ID, $post_type_object->labels->singular_name, mb_substr ($page->post_title, 0, 64), get_permalink ($page->ID)), "\n"; } echo "\n"; } echo "TOTAL BLOCKS\n"; if (count ($ai_db_options_extract [ABOVE_HEADER_HOOK_BLOCKS][AI_PT_ANY])) echo "ABOVE HEADER: ", implode (", ", $ai_db_options_extract [ABOVE_HEADER_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [CONTENT_HOOK_BLOCKS][AI_PT_ANY])) echo "CONTENT HOOK: ", implode (", ", $ai_db_options_extract [CONTENT_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [EXCERPT_HOOK_BLOCKS][AI_PT_ANY])) echo "EXCERPT HOOK: ", implode (", ", $ai_db_options_extract [EXCERPT_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [LOOP_START_HOOK_BLOCKS][AI_PT_ANY])) echo "LOOP START HOOK: ", implode (", ", $ai_db_options_extract [LOOP_START_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [LOOP_END_HOOK_BLOCKS][AI_PT_ANY])) echo "LOOP END HOOK: ", implode (", ", $ai_db_options_extract [LOOP_END_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [POST_HOOK_BLOCKS][AI_PT_ANY])) echo "POST HOOK: ", implode (", ", $ai_db_options_extract [POST_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][AI_PT_ANY])) echo "BEFORE COMMENTS HOOK: ", implode (", ", $ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][AI_PT_ANY])) echo "BETWEEN COMMENTS HOOK ", implode (", ", $ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][AI_PT_ANY])) echo "AFTER COMMENTS HOOK: ", implode (", ", $ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][AI_PT_ANY]), "\n"; if (count ($ai_db_options_extract [FOOTER_HOOK_BLOCKS][AI_PT_ANY])) echo "FOOTER HOOK: ", implode (", ", $ai_db_options_extract [FOOTER_HOOK_BLOCKS][AI_PT_ANY]), "\n"; foreach ($ai_custom_hooks as $index => $custom_hook) { switch ($custom_hook ['action']) { case 'wp_footer': // case 'wp_head': case 'the_content': case 'the_excerpt': case 'loop_start': case 'loop_end': // case 'the_post': continue 2; } if (count ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][AI_PT_ANY])) { $blocks_using_hook = array (); foreach ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { $obj = $block_object [$block]; if ($obj->get_automatic_insertion () == AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $custom_hook ['index'] - 1) { $blocks_using_hook [] = $block; } } if (!empty ($blocks_using_hook)) { echo substr (strtoupper (str_replace (array ('<', '>'), array ('<', '>'), get_hook_name ($custom_hook ['index']))) . " HOOK: ", 0, 25), implode (", ", $blocks_using_hook), "\n"; } } } if (count ($ai_db_options_extract [HTML_ELEMENT_HOOK_BLOCKS][AI_PT_ANY])) echo "HTML ELEMENT: ", implode (", ", $ai_db_options_extract [HTML_ELEMENT_HOOK_BLOCKS][AI_PT_ANY]), "\n"; echo "\nBLOCKS FOR THIS PAGE TYPE\n"; if (isset ($ai_db_options_extract [ABOVE_HEADER_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [ABOVE_HEADER_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "ABOVE HEADER: ", implode (", ", $ai_db_options_extract [ABOVE_HEADER_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [CONTENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [CONTENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "CONTENT HOOK: ", implode (", ", $ai_db_options_extract [CONTENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [EXCERPT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [EXCERPT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "EXCERPT HOOK: ", implode (", ", $ai_db_options_extract [EXCERPT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [LOOP_START_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [LOOP_START_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "LOOP START HOOK: ", implode (", ", $ai_db_options_extract [LOOP_START_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [LOOP_END_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [LOOP_END_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "LOOP END HOOK: ", implode (", ", $ai_db_options_extract [LOOP_END_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [POST_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [POST_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "POST HOOK: ", implode (", ", $ai_db_options_extract [POST_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "AFTER COMMENTS HOOK: ", implode (", ", $ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "BETWEEN COMMENTS HOOK: ", implode (", ", $ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "AFTER COMMENTS HOOK: ", implode (", ", $ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; if (isset ($ai_db_options_extract [FOOTER_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [FOOTER_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "FOOTER HOOK ", implode (", ", $ai_db_options_extract [FOOTER_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; foreach ($ai_custom_hooks as $index => $custom_hook) { switch ($custom_hook ['action']) { case 'wp_footer': // case 'wp_head': case 'the_content': case 'the_excerpt': case 'loop_start': case 'loop_end': // case 'the_post': continue 2; } if (isset ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) { $blocks_using_hook = array (); foreach ($ai_db_options_extract [$custom_hook ['action'] . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { $obj = $block_object [$block]; if ($obj->get_automatic_insertion () == AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + $custom_hook ['index'] - 1) { $blocks_using_hook [] = $block; } } if (!empty ($blocks_using_hook)) { echo substr (strtoupper (str_replace (array ('<', '>'), array ('<', '>'), get_hook_name ($custom_hook ['index']))) . " HOOK: ", 0, 25), implode (", ", $blocks_using_hook), "\n"; } } } if (isset ($ai_db_options_extract [HTML_ELEMENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && count ($ai_db_options_extract [HTML_ELEMENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) echo "HTML ELEMENT: ", implode (", ", $ai_db_options_extract [HTML_ELEMENT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]), "\n"; echo "\nDISABLED BLOCKS: ", isset ($ai_wp_data [AI_DISABLED_BLOCKS]) ? implode (', ', $ai_wp_data [AI_DISABLED_BLOCKS]) : '', "\n"; if ($write_processing_log) { echo "\nTIME EVENT\n"; echo "======================================\n"; foreach ($ai_processing_log as $log_line) { echo $log_line, "\n"; } sort ($block_insertion_log); echo "\nINSERTION SUMMARY\n"; echo "======================================\n"; foreach ($block_insertion_log as $log_line) { echo substr ($log_line, 3), "\n"; } echo "\n\n"; echo "SERVER_ADDR: ", isset ($_SERVER ['SERVER_ADDR']) ? $_SERVER ['SERVER_ADDR'] : '', "\n"; echo "HTTP_CF_CONNECTING_IP: ", isset ($_SERVER ['HTTP_CF_CONNECTING_IP']) ? $_SERVER ['HTTP_CF_CONNECTING_IP'] : '', "\n"; echo "HTTP_CLIENT_IP: ", isset ($_SERVER ['HTTP_CLIENT_IP']) ? $_SERVER ['HTTP_CLIENT_IP'] : '', "\n"; echo "HTTP_INCAP_CLIENT_IP: ", isset ($_SERVER ['HTTP_INCAP_CLIENT_IP']) ? $_SERVER ['HTTP_INCAP_CLIENT_IP'] : '', "\n"; echo "HTTP_X_FORWARDED_FOR: ", isset ($_SERVER ['HTTP_X_FORWARDED_FOR']) ? $_SERVER ['HTTP_X_FORWARDED_FOR'] : '', "\n"; echo "HTTP_X_FORWARDED: ", isset ($_SERVER ['HTTP_X_FORWARDED']) ? $_SERVER ['HTTP_X_FORWARDED'] : '', "\n"; echo "HTTP_X_CLUSTER_CLIENT_IP:", isset ($_SERVER ['HTTP_X_CLUSTER_CLIENT_IP']) ? $_SERVER ['HTTP_X_CLUSTER_CLIENT_IP'] : '', "\n"; echo "HTTP_FORWARDED_FOR: ", isset ($_SERVER ['HTTP_FORWARDED_FOR']) ? $_SERVER ['HTTP_FORWARDED_FOR'] : '', "\n"; echo "HTTP_FORWARDED: ", isset ($_SERVER ['HTTP_FORWARDED']) ? $_SERVER ['HTTP_FORWARDED'] : '', "\n"; echo "REMOTE_ADDR: ", isset ($_SERVER ['REMOTE_ADDR']) ? $_SERVER ['REMOTE_ADDR'] : '', "\n"; echo "\n"; echo 'AI_NO_PHP_PROCESSING: ', defined ('AI_NO_PHP_PROCESSING') ? 'SET' : "NO", "\n"; echo 'DISALLOW_FILE_EDIT: ', defined ('DISALLOW_FILE_EDIT') && DISALLOW_FILE_EDIT ? 'SET' : "NO", "\n"; echo 'DISALLOW_FILE_MODS: ', defined ('DISALLOW_FILE_MODS') && DISALLOW_FILE_MODS ? 'SET' : "NO", "\n"; echo 'DISALLOW_UNFILTERED_HTML:', defined ('DISALLOW_UNFILTERED_HTML') && DISALLOW_UNFILTERED_HTML ? 'SET' : "NO", "\n"; echo 'AI_NO_ADSENSE_API: ', defined ('AI_NO_ADSENSE_API') ? 'SET' : "NO", "\n"; echo "\n"; echo 'W3TC_DYNAMIC_SECURITY: ', defined ('W3TC_DYNAMIC_SECURITY') ? 'SET' : "NO", "\n"; echo "\n"; echo "MULTISITE: ", is_multisite() ? "YES" : "NO", "\n"; if (is_multisite()) { echo "MAIN SITE: ", is_main_site () ? "YES" : "NO", "\n"; echo "SITE COUNT: ", get_blog_count(), "\n"; } echo "OPTIONS DATABASE TABLE: ", $wpdb->prefix, "options\n"; echo "site_url: ", site_url (), "\n"; echo "home_url: ", home_url (), "\n"; if (is_multisite()) { echo "network_home_url: ", network_home_url (), "\n"; } echo "ABSPATH: ", ABSPATH, "\n"; echo "WP_CONTENT_DIR: ", WP_CONTENT_DIR, "\n"; echo "\n"; echo "PHP: ", phpversion(), "\n"; echo "mbstring: ", $ai_wp_data [AI_MBSTRING_LOADED] ? 'LOADED' : 'NO', "\n"; echo "Default charset: ", ini_get ("default_charset"), "\n"; echo "Memory Limit: ", ini_get ('memory_limit'), "\n"; echo "Upload Max Filesize: ", ini_get ('upload_max_filesize'), "\n"; echo "Post Max Size: ", ini_get ('post_max_size'), "\n"; echo "Max Execution Time: ", ini_get ('max_execution_time'), "\n"; echo "Max Input Vars: ", ini_get ('max_input_vars'), "\n"; echo "Display Errors: ", ini_get ('display_errors'), "\n"; echo "cURL: ", function_exists ('curl_version') ? 'ENABLED' : 'DISABLED', "\n"; echo "fsockopen: ", function_exists ('fsockopen') ? 'ENABLED' : 'DISABLED', "\n"; echo "DOMDocument: ", class_exists ('DOMDocument') ? 'YES' : 'NO', "\n"; echo "\n\n"; global $wp_version; echo "Wordpress: ", $wp_version, "\n"; $current_theme = wp_get_theme(); echo "Current Theme: ", $current_theme->get ('Name') . " " . $current_theme->get ('Version'), "\n"; echo "\n"; echo "A INSTALLED PLUGINS\n"; echo "======================================\n"; if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $all_plugins = get_plugins(); $active_plugins = get_option ('active_plugins'); $active_sitewide_plugins = is_multisite () ? get_site_option ('active_sitewide_plugins') : false; foreach ($all_plugins as $plugin_path => $plugin) { $multisite_status = ' '; if ($active_sitewide_plugins !== false) { $multisite_status = array_key_exists ($plugin_path, $active_sitewide_plugins) ? '# ' : ' '; } echo in_array ($plugin_path, $active_plugins) ? '* ' : $multisite_status, html_entity_decode ($plugin ["Name"]), ' ', $plugin ["Version"], "\n"; } } $log = ob_get_clean (); $log = str_replace (array ('<', '>'), array ('<', '>'), $log); echo $log; } function ai_shutdown_hook () { global $ai_wp_data, $ad_inserter_globals; $global_name = implode ('_', array ( 'AI', 'STATUS') ); if (function_exists ('ai_system_output')) ai_system_output (); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0 && (get_remote_debugging () || (isset ($ad_inserter_globals [$global_name]) && $ad_inserter_globals [$global_name] == 1) || ($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0)) { if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_HOMEPAGE || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_CATEGORY || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_SEARCH || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_ARCHIVE || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_404 || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_NONE || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_ANY) { echo "\n\n"; } } } function ai_activation_hook () { ai_add_rewrite_rules (); flush_rewrite_rules(); } function ai_deactivation_hook () { flush_rewrite_rules(); } function ai_check_multisite_options (&$multisite_options) { if (!isset ($multisite_options ['MULTISITE_SETTINGS_PAGE'])) $multisite_options ['MULTISITE_SETTINGS_PAGE'] = DEFAULT_MULTISITE_SETTINGS_PAGE; if (!isset ($multisite_options ['MULTISITE_WIDGETS'])) $multisite_options ['MULTISITE_WIDGETS'] = DEFAULT_MULTISITE_WIDGETS; if (!isset ($multisite_options ['MULTISITE_PHP_PROCESSING'])) $multisite_options ['MULTISITE_PHP_PROCESSING'] = DEFAULT_MULTISITE_PHP_PROCESSING; if (!isset ($multisite_options ['MULTISITE_EXCEPTIONS'])) $multisite_options ['MULTISITE_EXCEPTIONS'] = DEFAULT_MULTISITE_EXCEPTIONS; if (!isset ($multisite_options ['MULTISITE_MAIN_FOR_ALL_BLOGS'])) $multisite_options ['MULTISITE_MAIN_FOR_ALL_BLOGS'] = DEFAULT_MULTISITE_MAIN_FOR_ALL_BLOGS; if (!isset ($multisite_options ['MULTISITE_SITE_ADMIN_PAGE'])) $multisite_options ['MULTISITE_SITE_ADMIN_PAGE'] = DEFAULT_MULTISITE_SITE_ADMIN_PAGE; if (function_exists ('ai_check_multisite_options_2')) ai_check_multisite_options_2 ($multisite_options); } function ai_check_limits ($value, $min, $max, $default) { if (!is_numeric ($value)) { $value = $default; } $value = intval ($value); if ($value < $min) { $value = $min; } if ($value > $max) { $value = $max; } return $value; } function ai_check_plugin_options ($plugin_options = array ()) { global $version_string; $plugin_options ['VERSION'] = $version_string; if (!isset ($plugin_options ['SYNTAX_HIGHLIGHTER_THEME'])) $plugin_options ['SYNTAX_HIGHLIGHTER_THEME'] = DEFAULT_SYNTAX_HIGHLIGHTER_THEME; if (!isset ($plugin_options ['BLOCK_CLASS_NAME'])) $plugin_options ['BLOCK_CLASS_NAME'] = DEFAULT_BLOCK_CLASS_NAME; if (!isset ($plugin_options ['BLOCK_CLASS'])) $plugin_options ['BLOCK_CLASS'] = DEFAULT_BLOCK_CLASS; if (!isset ($plugin_options ['BLOCK_NUMBER_CLASS'])) $plugin_options ['BLOCK_NUMBER_CLASS'] = DEFAULT_BLOCK_NUMBER_CLASS; if (!isset ($plugin_options ['BLOCK_NAME_CLASS'])) $plugin_options ['BLOCK_NAME_CLASS'] = DEFAULT_BLOCK_NAME_CLASS; if (!isset ($plugin_options ['INLINE_STYLES'])) $plugin_options ['INLINE_STYLES'] = DEFAULT_INLINE_STYLES; if (!isset ($plugin_options ['MINIMUM_USER_ROLE'])) $plugin_options ['MINIMUM_USER_ROLE'] = DEFAULT_MINIMUM_USER_ROLE; if (!isset ($plugin_options ['STICKY_WIDGET_MODE'])) $plugin_options ['STICKY_WIDGET_MODE'] = DEFAULT_STICKY_WIDGET_MODE; if (!isset ($plugin_options ['STICKY_WIDGET_MARGIN'])) $plugin_options ['STICKY_WIDGET_MARGIN'] = DEFAULT_STICKY_WIDGET_MARGIN; $plugin_options ['STICKY_WIDGET_MARGIN'] = ai_check_limits ($plugin_options ['STICKY_WIDGET_MARGIN'], 0, 999, DEFAULT_STICKY_WIDGET_MARGIN); if (!isset ($plugin_options ['LAZY_LOADING_OFFSET'])) $plugin_options ['LAZY_LOADING_OFFSET'] = DEFAULT_LAZY_LOADING_OFFSET; $plugin_options ['LAZY_LOADING_OFFSET'] = ai_check_limits ($plugin_options ['LAZY_LOADING_OFFSET'], 0, 9999, DEFAULT_LAZY_LOADING_OFFSET); if (!isset ($plugin_options ['MAX_PAGE_BLOCKS'])) $plugin_options ['MAX_PAGE_BLOCKS'] = DEFAULT_MAX_PAGE_BLOCKS; $plugin_options ['MAX_PAGE_BLOCKS'] = ai_check_limits ($plugin_options ['MAX_PAGE_BLOCKS'], 0, 9999, DEFAULT_MAX_PAGE_BLOCKS); if (!isset ($plugin_options ['PLUGIN_PRIORITY'])) $plugin_options ['PLUGIN_PRIORITY'] = DEFAULT_PLUGIN_PRIORITY; $plugin_options ['PLUGIN_PRIORITY'] = ai_check_limits ($plugin_options ['PLUGIN_PRIORITY'], 0, 999999, DEFAULT_PLUGIN_PRIORITY); if (!isset ($plugin_options ['TAB_SETUP_DELAY'])) $plugin_options ['TAB_SETUP_DELAY'] = DEFAULT_TAB_SETUP_DELAY; $plugin_options ['TAB_SETUP_DELAY'] = ai_check_limits ($plugin_options ['TAB_SETUP_DELAY'], 0, 9999, DEFAULT_TAB_SETUP_DELAY); if (!isset ($plugin_options ['CLICK_FRAUD_PROTECTION'])) $plugin_options ['CLICK_FRAUD_PROTECTION'] = DEFAULT_CLICK_FRAUD_PROTECTION; if (!isset ($plugin_options ['CLICK_FRAUD_PROTECTION_TIME'])) $plugin_options ['CLICK_FRAUD_PROTECTION_TIME'] = DEFAULT_CLICK_FRAUD_PROTECTION_TIME; if (!isset ($plugin_options ['GLOBAL_VISITOR_LIMIT_CPT'])) $plugin_options ['GLOBAL_VISITOR_LIMIT_CPT'] = DEFAULT_GLOBAL_VISITOR_LIMIT_CPT; if (!isset ($plugin_options ['GLOBAL_VISITOR_LIMIT_TIME'])) $plugin_options ['GLOBAL_VISITOR_LIMIT_TIME'] = DEFAULT_GLOBAL_VISITOR_LIMIT_TIME; if (!isset ($plugin_options ['CFP_BLOCK_IP_ADDRESS'])) $plugin_options ['CFP_BLOCK_IP_ADDRESS'] = DEFAULT_CFP_BLOCK_IP_ADDRESS; if (!isset ($plugin_options ['DYNAMIC_BLOCKS'])) $plugin_options ['DYNAMIC_BLOCKS'] = DEFAULT_DYNAMIC_BLOCKS; if (!isset ($plugin_options ['PARAGRAPH_COUNTING_FUNCTIONS'])) $plugin_options ['PARAGRAPH_COUNTING_FUNCTIONS'] = DEFAULT_PARAGRAPH_COUNTING_FUNCTIONS; if (!isset ($plugin_options ['OUTPUT_BUFFERING'])) $plugin_options ['OUTPUT_BUFFERING'] = DEFAULT_OUTPUT_BUFFERING; if (!isset ($plugin_options ['DISABLE_CACHING'])) $plugin_options ['DISABLE_CACHING'] = DEFAULT_DISABLE_CACHING; if (!isset ($plugin_options ['MENU_FOR_LINK'])) $plugin_options ['MENU_FOR_LINK'] = DEFAULT_MENU_FOR_LINK; if (!isset ($plugin_options ['WAIT_FOR_JQUERY'])) $plugin_options ['WAIT_FOR_JQUERY'] = DEFAULT_WAIT_FOR_JQUERY; if (!isset ($plugin_options ['JAVASCRIPT_CODE_MODE'])) $plugin_options ['JAVASCRIPT_CODE_MODE'] = DEFAULT_JAVASCRIPT_CODE_MODE; if (!isset ($plugin_options ['NO_PARAGRAPH_COUNTING_INSIDE'])) $plugin_options ['NO_PARAGRAPH_COUNTING_INSIDE'] = DEFAULT_NO_PARAGRAPH_COUNTING_INSIDE; if (!isset ($plugin_options ['AD_LABEL'])) $plugin_options ['AD_LABEL'] = DEFAULT_AD_TITLE; if (!isset ($plugin_options ['MAIN_CONTENT_ELEMENT'])) $plugin_options ['MAIN_CONTENT_ELEMENT'] = DEFAULT_MAIN_CONTENT_ELEMENT; if (!isset ($plugin_options ['ADB_DEVICES'])) $plugin_options ['ADB_DEVICES'] = AI_DEFAULT_ADB_DEVICES; if (!isset ($plugin_options ['ADB_ACTION'])) $plugin_options ['ADB_ACTION'] = AI_DEFAULT_ADB_ACTION; if (!isset ($plugin_options ['ADB_NO_ACTION'])) $plugin_options ['ADB_NO_ACTION'] = AI_DEFAULT_ADB_NO_ACTION; if (!isset ($plugin_options ['ADB_DELAY_ACTION'])) $plugin_options ['ADB_DELAY_ACTION'] = ''; if (!isset ($plugin_options ['ADB_NO_ACTION_PERIOD'])) $plugin_options ['ADB_NO_ACTION_PERIOD'] = AI_DEFAULT_ADB_NO_ACTION_PERIOD; if (!isset ($plugin_options ['ADB_SELECTORS'])) $plugin_options ['ADB_SELECTORS'] = ''; if (!isset ($plugin_options ['ADB_REDIRECTION_PAGE'])) $plugin_options ['ADB_REDIRECTION_PAGE'] = AI_DEFAULT_ADB_REDIRECTION_PAGE; if (!isset ($plugin_options ['ADB_CUSTOM_REDIRECTION_URL'])) $plugin_options ['ADB_CUSTOM_REDIRECTION_URL'] = ''; if (!isset ($plugin_options ['ADB_OVERLAY_CSS'])) $plugin_options ['ADB_OVERLAY_CSS'] = AI_DEFAULT_ADB_OVERLAY_CSS; if (!isset ($plugin_options ['ADB_MESSAGE_CSS'])) $plugin_options ['ADB_MESSAGE_CSS'] = AI_DEFAULT_ADB_MESSAGE_CSS; if (!isset ($plugin_options ['ADB_UNDISMISSIBLE_MESSAGE'])) $plugin_options ['ADB_UNDISMISSIBLE_MESSAGE'] = AI_DEFAULT_ADB_UNDISMISSIBLE_MESSAGE; if (!isset ($plugin_options ['ADB_EXTERNAL_SCRIPTS'])) $plugin_options ['ADB_EXTERNAL_SCRIPTS'] = AI_DEFAULT_ADB_EXTERNAL_SCRIPTS; if (!isset ($plugin_options ['ADB_NO_UNDISMISSIBLE_MESSAGE'])) $plugin_options ['ADB_NO_UNDISMISSIBLE_MESSAGE'] = AI_DEFAULT_ADB_NO_UNDISMISSIBLE_MESSAGE; if (!isset ($plugin_options ['ADMIN_TOOLBAR_DEBUGGING'])) $plugin_options ['ADMIN_TOOLBAR_DEBUGGING'] = DEFAULT_ADMIN_TOOLBAR_DEBUGGING; if (!isset ($plugin_options ['ADMIN_TOOLBAR_MOBILE'])) $plugin_options ['ADMIN_TOOLBAR_MOBILE'] = DEFAULT_ADMIN_TOOLBAR_MOBILE; if (!isset ($plugin_options ['FORCE_ADMIN_TOOLBAR'])) $plugin_options ['FORCE_ADMIN_TOOLBAR'] = DEFAULT_FORCE_ADMIN_TOOLBAR; if (!isset ($plugin_options ['REMOTE_DEBUGGING'])) $plugin_options ['REMOTE_DEBUGGING'] = DEFAULT_REMOTE_DEBUGGING; if (!isset ($plugin_options ['DISABLE_TRANSLATION'])) $plugin_options ['DISABLE_TRANSLATION'] = DEFAULT_DISABLE_TRANSLATION; if (!isset ($plugin_options ['BACKEND_JS_DEBUGGING'])) $plugin_options ['BACKEND_JS_DEBUGGING'] = DEFAULT_BACKEND_JS_DEBUGGING; if (!isset ($plugin_options ['FRONTEND_JS_DEBUGGING'])) $plugin_options ['FRONTEND_JS_DEBUGGING'] = DEFAULT_FRONTEND_JS_DEBUGGING; if (!isset ($plugin_options ['DISABLE_BLOCK_INSERTIONS'])) $plugin_options ['DISABLE_BLOCK_INSERTIONS'] = DEFAULT_DISABLE_BLOCK_INSERTIONS; if (!isset ($plugin_options ['DISABLE_PHP_PROCESSING'])) $plugin_options ['DISABLE_PHP_PROCESSING'] = DEFAULT_DISABLE_PHP_PROCESSING; if (!isset ($plugin_options ['DISABLE_HTML_CODE'])) $plugin_options ['DISABLE_HTML_CODE'] = DEFAULT_DISABLE_HTML_CODE; if (!isset ($plugin_options ['DISABLE_CSS_CODE'])) $plugin_options ['DISABLE_CSS_CODE'] = DEFAULT_DISABLE_CSS_CODE; if (!isset ($plugin_options ['DISABLE_JS_CODE'])) $plugin_options ['DISABLE_JS_CODE'] = DEFAULT_DISABLE_JS_CODE; if (!isset ($plugin_options ['DISABLE_HEADER_CODE'])) $plugin_options ['DISABLE_HEADER_CODE'] = DEFAULT_DISABLE_HEADER_CODE; if (!isset ($plugin_options ['DISABLE_FOOTER_CODE'])) $plugin_options ['DISABLE_FOOTER_CODE'] = DEFAULT_DISABLE_FOOTER_CODE; $min_width_0_defined = false; for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name_option_name = 'VIEWPORT_NAME_' . $viewport; $viewport_width_option_name = 'VIEWPORT_WIDTH_' . $viewport; if (!isset ($plugin_options [$viewport_name_option_name])) $plugin_options [$viewport_name_option_name] = defined ("DEFAULT_VIEWPORT_NAME_" . $viewport) ? constant ("DEFAULT_VIEWPORT_NAME_" . $viewport) : ""; if ($viewport == 1 && $plugin_options [$viewport_name_option_name] == '') $plugin_options [$viewport_name_option_name] = constant ("DEFAULT_VIEWPORT_NAME_1"); if ($plugin_options [$viewport_name_option_name] != '') { $last_viewport_width_option_name = $viewport_width_option_name; if (!isset ($plugin_options [$viewport_width_option_name])) $plugin_options [$viewport_width_option_name] = defined ("DEFAULT_VIEWPORT_WIDTH_" . $viewport) ? constant ("DEFAULT_VIEWPORT_WIDTH_" . $viewport) : 0; $viewport_width = $plugin_options [$viewport_width_option_name]; if ($viewport > 1) { $previous_viewport_option_width = $plugin_options ['VIEWPORT_WIDTH_' . ($viewport - 1)]; } if (!is_numeric ($viewport_width)) { if ($viewport == 1) $viewport_width = constant ("DEFAULT_VIEWPORT_WIDTH_1"); else $viewport_width = $previous_viewport_option_width - 1; } if ($viewport_width > 9999) { $viewport_width = 9999; } // if ($viewport > 1) { // if ($viewport_width >= $previous_viewport_option_width) // $viewport_width = $previous_viewport_option_width - 1; // } $viewport_width = intval ($viewport_width); if ($viewport_width < 0) { $viewport_width = 0; } if ($viewport_width == 0) { $min_width_0_defined = true; } $plugin_options [$viewport_width_option_name] = $viewport_width; } else $plugin_options [$viewport_width_option_name] = ''; } if (!$min_width_0_defined) { $plugin_options [$last_viewport_width_option_name] = 0; } for ($constant = 1; $constant <= 6; $constant ++) { $constant_name_option_name = 'CONSTANT_NAME_' . $constant; $constant_value_option_name = 'CONSTANT_VALUE_' . $constant; if (!isset ($plugin_options [$constant_name_option_name])) $plugin_options [$constant_name_option_name] = ""; if (!isset ($plugin_options [$constant_value_option_name])) $plugin_options [$constant_value_option_name] = ""; } for ($hook = 1; $hook <= 20; $hook ++) { $hook_enabled_settins_name = 'HOOK_ENABLED_' . $hook; $hook_name_settins_name = 'HOOK_NAME_' . $hook; $hook_action_settins_name = 'HOOK_ACTION_' . $hook; $hook_priority_settins_name = 'HOOK_PRIORITY_' . $hook; if (!isset ($plugin_options [$hook_enabled_settins_name])) $plugin_options [$hook_enabled_settins_name] = AI_DISABLED; if (!isset ($plugin_options [$hook_name_settins_name])) $plugin_options [$hook_name_settins_name] = ''; if (!isset ($plugin_options [$hook_action_settins_name])) $plugin_options [$hook_action_settins_name] = ''; if (!isset ($plugin_options [$hook_priority_settins_name]) || !is_numeric ($plugin_options [$hook_priority_settins_name])) $plugin_options [$hook_priority_settins_name] = DEFAULT_CUSTOM_HOOK_PRIORITY; } if (function_exists ('ai_check_options')) ai_check_options ($plugin_options); return ($plugin_options); } function option_stripslashes (&$options) { $options = wp_unslash ($options); } // Deprecated function ai_get_old_option ($option_name) { $options = get_option ($option_name); option_stripslashes ($options); return ($options); } function ai_get_option ($option_name, $default = false) { $ai_db_options = get_option ($option_name, $default); if ($ai_db_options === false) { return $ai_db_options; } if (is_string ($ai_db_options) && substr ($ai_db_options, 0, 4) === ':AI:') { $ai_db_options = unserialize (base64_decode (substr ($ai_db_options, 4), true)); } return $ai_db_options; } function ai_update_option ($option_name, $value) { update_option ($option_name, ':AI:'. base64_encode (serialize ($value))); } function ai_save_options ($options, $multisite_options = null, $blocks_org = null, $blocks_new = null) { if (function_exists ('ai_save_remote_settings')) { if (ai_save_remote_settings ($options, $multisite_options, $blocks_org, $blocks_new)) return; } $options = apply_filters ('ai_save_options', $options); $multisite_options = apply_filters ('ai_save_multisite_options', $multisite_options); // Generate and save extract ai_update_option (AI_OPTION_NAME, $options); ai_load_settings (); $options [AI_OPTION_EXTRACT] = ai_generate_extract ($options); $ai_db_options_extract = $options [AI_OPTION_EXTRACT]; $options [AI_OPTION_GLOBAL]['VIEWPORT_CSS'] = generate_viewport_css (); $options [AI_OPTION_GLOBAL]['ALIGNMENT_CSS'] = generate_alignment_css (); $options [AI_OPTION_GLOBAL]['TIMESTAMP'] = time (); if (!get_option (AI_INSTALL_NAME)) { update_option (AI_INSTALL_NAME, time ()); } if (is_multisite () && !is_main_site ()) { unset ($options [AI_OPTION_GLOBAL]['PLUGIN_TYPE']); unset ($options [AI_OPTION_GLOBAL]['PLUGIN_STATUS']); unset ($options [AI_OPTION_GLOBAL]['PLUGIN_STATUS_COUNTER']); } ai_update_option (AI_OPTION_NAME, $options); update_option (AI_EXTRACT_NAME, $ai_db_options_extract); // Multisite if (is_array ($multisite_options) && is_multisite () && is_main_site ()) { update_site_option (AI_OPTION_NAME, $multisite_options); } ai_load_settings (); if (is_array ($blocks_org) && is_array ($blocks_new)) { ai_update_block_numbers ($blocks_org, $blocks_new); } } function ai_load_options () { global $ai_db_options, $ai_db_options_multisite, $ai_wp_data; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("LOAD OPTIONS START"); if (function_exists ('ai_load_remote_settings')) { if (ai_load_remote_settings ()) { if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("LOAD OPTIONS END"); return; } } if (is_multisite ()) { $ai_db_options_multisite = get_site_option (AI_OPTION_NAME, array ()); option_stripslashes ($ai_db_options_multisite); } if (is_multisite () && multisite_main_for_all_blogs () && defined ('BLOG_ID_CURRENT_SITE')) { $ai_db_options = get_blog_option (BLOG_ID_CURRENT_SITE, AI_OPTION_NAME, array ()); if (is_string ($ai_db_options) && substr ($ai_db_options, 0, 4) === ':AI:') { $ai_db_options = unserialize (base64_decode (substr ($ai_db_options, 4), true)); } option_stripslashes ($ai_db_options); } else { $ai_db_options = ai_get_option (AI_OPTION_NAME, array ()); option_stripslashes ($ai_db_options); } if (is_multisite () && !is_main_site () && defined ('BLOG_ID_CURRENT_SITE')) { $ai_db_options_main = get_blog_option (BLOG_ID_CURRENT_SITE, AI_OPTION_NAME, array ()); if (is_string ($ai_db_options_main) && substr ($ai_db_options_main, 0, 4) === ':AI:') { $ai_db_options_main = unserialize (base64_decode (substr ($ai_db_options_main, 4), true)); } if (isset ($ai_db_options_main [AI_OPTION_GLOBAL]['PLUGIN_TYPE'])) $ai_db_options [AI_OPTION_GLOBAL]['PLUGIN_TYPE'] = $ai_db_options_main [AI_OPTION_GLOBAL]['PLUGIN_TYPE']; if (isset ($ai_db_options_main [AI_OPTION_GLOBAL]['PLUGIN_STATUS'])) $ai_db_options [AI_OPTION_GLOBAL]['PLUGIN_STATUS'] = $ai_db_options_main [AI_OPTION_GLOBAL]['PLUGIN_STATUS']; if (isset ($ai_db_options_main [AI_OPTION_GLOBAL]['PLUGIN_STATUS_COUNTER'])) $ai_db_options [AI_OPTION_GLOBAL]['PLUGIN_STATUS_COUNTER'] = $ai_db_options_main [AI_OPTION_GLOBAL]['PLUGIN_STATUS_COUNTER']; } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("LOAD OPTIONS END"); } function get_viewport_css () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['VIEWPORT_CSS'])) $ai_db_options [AI_OPTION_GLOBAL]['VIEWPORT_CSS'] = generate_viewport_css (); return ($ai_db_options [AI_OPTION_GLOBAL]['VIEWPORT_CSS']); } function get_alignment_css () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ALIGNMENT_CSS']) || isset ($ai_db_options [AI_OPTION_GLOBAL]['VERSION']) && $ai_db_options [AI_OPTION_GLOBAL]['VERSION'] < '020211' ) $ai_db_options [AI_OPTION_GLOBAL]['ALIGNMENT_CSS'] = generate_alignment_css (); return (str_replace (''', "'", $ai_db_options [AI_OPTION_GLOBAL]['ALIGNMENT_CSS'])); } function get_syntax_highlighter_theme () { global $ai_db_options; // return 'ad-inserter'; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['SYNTAX_HIGHLIGHTER_THEME'])) $ai_db_options [AI_OPTION_GLOBAL]['SYNTAX_HIGHLIGHTER_THEME'] = DEFAULT_SYNTAX_HIGHLIGHTER_THEME; return ($ai_db_options [AI_OPTION_GLOBAL]['SYNTAX_HIGHLIGHTER_THEME']); } function get_block_class_name ($default_if_empty = false) { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['BLOCK_CLASS_NAME'])) $ai_db_options [AI_OPTION_GLOBAL]['BLOCK_CLASS_NAME'] = DEFAULT_BLOCK_CLASS_NAME; if ($default_if_empty && $ai_db_options [AI_OPTION_GLOBAL]['BLOCK_CLASS_NAME'] == '') return (DEFAULT_BLOCK_CLASS_NAME); return ($ai_db_options [AI_OPTION_GLOBAL]['BLOCK_CLASS_NAME']); } function get_block_class () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['BLOCK_CLASS'])) $ai_db_options [AI_OPTION_GLOBAL]['BLOCK_CLASS'] = DEFAULT_BLOCK_CLASS; return ($ai_db_options [AI_OPTION_GLOBAL]['BLOCK_CLASS']); } function get_block_number_class () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['BLOCK_NUMBER_CLASS'])) $ai_db_options [AI_OPTION_GLOBAL]['BLOCK_NUMBER_CLASS'] = DEFAULT_BLOCK_NUMBER_CLASS; return ($ai_db_options [AI_OPTION_GLOBAL]['BLOCK_NUMBER_CLASS']); } function get_block_name_class () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['BLOCK_NAME_CLASS'])) $ai_db_options [AI_OPTION_GLOBAL]['BLOCK_NAME_CLASS'] = DEFAULT_BLOCK_NAME_CLASS; return ($ai_db_options [AI_OPTION_GLOBAL]['BLOCK_NAME_CLASS']); } function get_inline_styles () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['INLINE_STYLES'])) $ai_db_options [AI_OPTION_GLOBAL]['INLINE_STYLES'] = DEFAULT_INLINE_STYLES; return ($ai_db_options [AI_OPTION_GLOBAL]['INLINE_STYLES']); } function get_minimum_user_role () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['MINIMUM_USER_ROLE'])) $ai_db_options [AI_OPTION_GLOBAL]['MINIMUM_USER_ROLE'] = DEFAULT_MINIMUM_USER_ROLE; return ($ai_db_options [AI_OPTION_GLOBAL]['MINIMUM_USER_ROLE']); } function get_sticky_widget_mode () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['STICKY_WIDGET_MODE'])) $ai_db_options [AI_OPTION_GLOBAL]['STICKY_WIDGET_MODE'] = DEFAULT_STICKY_WIDGET_MODE; return ($ai_db_options [AI_OPTION_GLOBAL]['STICKY_WIDGET_MODE']); } function get_sticky_widget_margin () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['STICKY_WIDGET_MARGIN'])) $ai_db_options [AI_OPTION_GLOBAL]['STICKY_WIDGET_MARGIN'] = DEFAULT_STICKY_WIDGET_MARGIN; return ($ai_db_options [AI_OPTION_GLOBAL]['STICKY_WIDGET_MARGIN']); } function get_lazy_loading_offset () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['LAZY_LOADING_OFFSET'])) $ai_db_options [AI_OPTION_GLOBAL]['LAZY_LOADING_OFFSET'] = DEFAULT_LAZY_LOADING_OFFSET; return ($ai_db_options [AI_OPTION_GLOBAL]['LAZY_LOADING_OFFSET']); } function get_click_fraud_protection () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['CLICK_FRAUD_PROTECTION'])) $ai_db_options [AI_OPTION_GLOBAL]['CLICK_FRAUD_PROTECTION'] = DEFAULT_CLICK_FRAUD_PROTECTION; return ($ai_db_options [AI_OPTION_GLOBAL]['CLICK_FRAUD_PROTECTION']); } function get_click_fraud_protection_time () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['CLICK_FRAUD_PROTECTION_TIME'])) $ai_db_options [AI_OPTION_GLOBAL]['CLICK_FRAUD_PROTECTION_TIME'] = DEFAULT_CLICK_FRAUD_PROTECTION_TIME; return ($ai_db_options [AI_OPTION_GLOBAL]['CLICK_FRAUD_PROTECTION_TIME']); } function get_global_visitor_limit_clicks_per_time_period () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['GLOBAL_VISITOR_LIMIT_CPT'])) $ai_db_options [AI_OPTION_GLOBAL]['GLOBAL_VISITOR_LIMIT_CPT'] = DEFAULT_GLOBAL_VISITOR_LIMIT_CPT; $option = $ai_db_options [AI_OPTION_GLOBAL]['GLOBAL_VISITOR_LIMIT_CPT']; if ($option == '0') $option = ''; return ($option); } function get_global_visitor_limit_clicks_time_period () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['GLOBAL_VISITOR_LIMIT_TIME'])) $ai_db_options [AI_OPTION_GLOBAL]['GLOBAL_VISITOR_LIMIT_TIME'] = DEFAULT_GLOBAL_VISITOR_LIMIT_TIME; $option = $ai_db_options [AI_OPTION_GLOBAL]['GLOBAL_VISITOR_LIMIT_TIME']; if ($option == '0') $option = ''; return ($option); } function get_cfp_block_ip_address () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['CFP_BLOCK_IP_ADDRESS'])) $ai_db_options [AI_OPTION_GLOBAL]['CFP_BLOCK_IP_ADDRESS'] = DEFAULT_CFP_BLOCK_IP_ADDRESS; return ($ai_db_options [AI_OPTION_GLOBAL]['CFP_BLOCK_IP_ADDRESS']); } function get_max_page_blocks () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['MAX_PAGE_BLOCKS'])) $ai_db_options [AI_OPTION_GLOBAL]['MAX_PAGE_BLOCKS'] = DEFAULT_MAX_PAGE_BLOCKS; return ($ai_db_options [AI_OPTION_GLOBAL]['MAX_PAGE_BLOCKS']); } function get_plugin_priority () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['PLUGIN_PRIORITY'])) $ai_db_options [AI_OPTION_GLOBAL]['PLUGIN_PRIORITY'] = DEFAULT_PLUGIN_PRIORITY; return ($ai_db_options [AI_OPTION_GLOBAL]['PLUGIN_PRIORITY']); } function get_tab_setup_delay () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['TAB_SETUP_DELAY'])) $ai_db_options [AI_OPTION_GLOBAL]['TAB_SETUP_DELAY'] = DEFAULT_TAB_SETUP_DELAY; return ($ai_db_options [AI_OPTION_GLOBAL]['TAB_SETUP_DELAY']); } function get_dynamic_blocks(){ global $ai_db_options, $ai_wp_data; if (isset ($ai_wp_data [AI_DYNAMIC_BLOCKS])) { return ($ai_wp_data [AI_DYNAMIC_BLOCKS]); } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DYNAMIC_BLOCKS'])) $ai_db_options [AI_OPTION_GLOBAL]['DYNAMIC_BLOCKS'] = DEFAULT_DYNAMIC_BLOCKS; return ($ai_db_options [AI_OPTION_GLOBAL]['DYNAMIC_BLOCKS']); } function get_paragraph_counting_functions(){ global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['PARAGRAPH_COUNTING_FUNCTIONS'])) $ai_db_options [AI_OPTION_GLOBAL]['PARAGRAPH_COUNTING_FUNCTIONS'] = DEFAULT_PARAGRAPH_COUNTING_FUNCTIONS; return ($ai_db_options [AI_OPTION_GLOBAL]['PARAGRAPH_COUNTING_FUNCTIONS']); } function get_output_buffering(){ global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['OUTPUT_BUFFERING'])) $ai_db_options [AI_OPTION_GLOBAL]['OUTPUT_BUFFERING'] = DEFAULT_OUTPUT_BUFFERING; return ($ai_db_options [AI_OPTION_GLOBAL]['OUTPUT_BUFFERING']); } function get_menu_position (){ global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['MENU_FOR_LINK'])) $ai_db_options [AI_OPTION_GLOBAL]['MENU_FOR_LINK'] = DEFAULT_MENU_FOR_LINK; return ($ai_db_options [AI_OPTION_GLOBAL]['MENU_FOR_LINK']); } function get_disable_caching (){ global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_CACHING'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_CACHING'] = DEFAULT_DISABLE_CACHING; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_CACHING']); } function get_wait_for_jquery (){ global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['WAIT_FOR_JQUERY'])) $ai_db_options [AI_OPTION_GLOBAL]['WAIT_FOR_JQUERY'] = DEFAULT_WAIT_FOR_JQUERY; return ($ai_db_options [AI_OPTION_GLOBAL]['WAIT_FOR_JQUERY']); } function get_javascript_code_mode (){ global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['JAVASCRIPT_CODE_MODE'])) $ai_db_options [AI_OPTION_GLOBAL]['JAVASCRIPT_CODE_MODE'] = DEFAULT_JAVASCRIPT_CODE_MODE; return ($ai_db_options [AI_OPTION_GLOBAL]['JAVASCRIPT_CODE_MODE']); } function get_no_paragraph_counting_inside () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['NO_PARAGRAPH_COUNTING_INSIDE'])) $ai_db_options [AI_OPTION_GLOBAL]['NO_PARAGRAPH_COUNTING_INSIDE'] = DEFAULT_NO_PARAGRAPH_COUNTING_INSIDE; return (str_replace (array ('<', '>'), '', $ai_db_options [AI_OPTION_GLOBAL]['NO_PARAGRAPH_COUNTING_INSIDE'])); } function get_ad_label ($decode = false) { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['AD_LABEL'])) $ai_db_options [AI_OPTION_GLOBAL]['AD_LABEL'] = DEFAULT_AD_TITLE; if ($decode) return (html_entity_decode ($ai_db_options [AI_OPTION_GLOBAL]['AD_LABEL'])); return ($ai_db_options [AI_OPTION_GLOBAL]['AD_LABEL']); } function get_main_content_element () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['MAIN_CONTENT_ELEMENT'])) $ai_db_options [AI_OPTION_GLOBAL]['MAIN_CONTENT_ELEMENT'] = DEFAULT_MAIN_CONTENT_ELEMENT; return ($ai_db_options [AI_OPTION_GLOBAL]['MAIN_CONTENT_ELEMENT']); } function get_force_admin_toolbar () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['FORCE_ADMIN_TOOLBAR'])) $ai_db_options [AI_OPTION_GLOBAL]['FORCE_ADMIN_TOOLBAR'] = DEFAULT_FORCE_ADMIN_TOOLBAR; return ($ai_db_options [AI_OPTION_GLOBAL]['FORCE_ADMIN_TOOLBAR']); } function get_admin_toolbar_debugging () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADMIN_TOOLBAR_DEBUGGING'])) $ai_db_options [AI_OPTION_GLOBAL]['ADMIN_TOOLBAR_DEBUGGING'] = DEFAULT_ADMIN_TOOLBAR_DEBUGGING; return ($ai_db_options [AI_OPTION_GLOBAL]['ADMIN_TOOLBAR_DEBUGGING']); } function get_admin_toolbar_mobile () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADMIN_TOOLBAR_MOBILE'])) $ai_db_options [AI_OPTION_GLOBAL]['ADMIN_TOOLBAR_MOBILE'] = DEFAULT_ADMIN_TOOLBAR_MOBILE; return ($ai_db_options [AI_OPTION_GLOBAL]['ADMIN_TOOLBAR_MOBILE']); } function get_remote_debugging () { global $ai_db_options; if (function_exists ('ai_remote_debugging')) return ai_remote_debugging (); if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['REMOTE_DEBUGGING'])) $ai_db_options [AI_OPTION_GLOBAL]['REMOTE_DEBUGGING'] = DEFAULT_REMOTE_DEBUGGING; return ($ai_db_options [AI_OPTION_GLOBAL]['REMOTE_DEBUGGING']); } function get_disable_translation () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_TRANSLATION'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_TRANSLATION'] = DEFAULT_DISABLE_TRANSLATION; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_TRANSLATION']); } function get_backend_javascript_debugging () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['BACKEND_JS_DEBUGGING'])) $ai_db_options [AI_OPTION_GLOBAL]['BACKEND_JS_DEBUGGING'] = DEFAULT_BACKEND_JS_DEBUGGING; return ($ai_db_options [AI_OPTION_GLOBAL]['BACKEND_JS_DEBUGGING']); } function get_frontend_javascript_debugging () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['FRONTEND_JS_DEBUGGING'])) $ai_db_options [AI_OPTION_GLOBAL]['FRONTEND_JS_DEBUGGING'] = DEFAULT_FRONTEND_JS_DEBUGGING; return ($ai_db_options [AI_OPTION_GLOBAL]['FRONTEND_JS_DEBUGGING']); } function get_disable_block_insertions () { global $ai_db_options; if (isset ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]) && $_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS] == 'all' && get_remote_debugging ()) return true; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_BLOCK_INSERTIONS'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_BLOCK_INSERTIONS'] = DEFAULT_DISABLE_BLOCK_INSERTIONS; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_BLOCK_INSERTIONS']); } function get_disable_php_processing () { global $ai_db_options; if (isset ($_GET [AI_URL_DEBUG_DISABLE_PHP_PROCESSING]) && $_GET [AI_URL_DEBUG_DISABLE_PHP_PROCESSING] && get_remote_debugging ()) return true; if (isset ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]) && get_remote_debugging ()) { if ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS] == 'php') return true; if (strpos ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS], '-') !== false) { $blocks = explode ('-', $_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]); if (in_array ('php', $blocks)) return true; } } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_PHP_PROCESSING'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_PHP_PROCESSING'] = DEFAULT_DISABLE_PHP_PROCESSING; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_PHP_PROCESSING']); } function get_disable_html_code () { global $ai_db_options; if (isset ($_GET [AI_URL_DEBUG_DISABLE_HTML_CODE]) && $_GET [AI_URL_DEBUG_DISABLE_HTML_CODE] && get_remote_debugging ()) return true; if (isset ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]) && get_remote_debugging ()) { if ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS] == 'html') return true; if (strpos ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS], '-') !== false) { $blocks = explode ('-', $_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]); if (in_array ('html', $blocks)) return true; } } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_HTML_CODE'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_HTML_CODE'] = DEFAULT_DISABLE_CSS_CODE; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_HTML_CODE']); } function get_disable_css_code () { global $ai_db_options; if (isset ($_GET [AI_URL_DEBUG_DISABLE_CSS_CODE]) && $_GET [AI_URL_DEBUG_DISABLE_CSS_CODE] && get_remote_debugging ()) return true; if (isset ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]) && get_remote_debugging ()) { if ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS] == 'css') return true; if (strpos ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS], '-') !== false) { $blocks = explode ('-', $_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]); if (in_array ('css', $blocks)) return true; } } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_CSS_CODE'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_CSS_CODE'] = DEFAULT_DISABLE_CSS_CODE; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_CSS_CODE']); } function get_disable_js_code () { global $ai_db_options; if (isset ($_GET [AI_URL_DEBUG_DISABLE_JS_CODE]) && $_GET [AI_URL_DEBUG_DISABLE_JS_CODE] && get_remote_debugging ()) return true; if (isset ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]) && get_remote_debugging ()) { if ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS] == 'js') return true; if (strpos ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS], '-') !== false) { $blocks = explode ('-', $_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]); if (in_array ('js', $blocks)) return true; } } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_JS_CODE'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_JS_CODE'] = DEFAULT_DISABLE_JS_CODE; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_JS_CODE']); } function get_disable_header_code () { global $ai_db_options; if (isset ($_GET [AI_URL_DEBUG_DISABLE_HEADER_CODE]) && $_GET [AI_URL_DEBUG_DISABLE_HEADER_CODE] && get_remote_debugging ()) return true; if (isset ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]) && get_remote_debugging ()) { if ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS] == 'h') return true; if (strpos ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS], '-') !== false) { $blocks = explode ('-', $_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]); if (in_array ('h', $blocks)) return true; } } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_HEADER_CODE'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_HEADER_CODE'] = DEFAULT_DISABLE_HEADER_CODE; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_HEADER_CODE']); } function get_disable_footer_code () { global $ai_db_options; if (isset ($_GET [AI_URL_DEBUG_DISABLE_FOOTER_CODE]) && $_GET [AI_URL_DEBUG_DISABLE_FOOTER_CODE] && get_remote_debugging ()) return true; if (isset ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]) && get_remote_debugging ()) { if ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS] == 'f') return true; if (strpos ($_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS], '-') !== false) { $blocks = explode ('-', $_GET [AI_URL_DEBUG_DISABLE_BLOCK_INSERTIONS]); if (in_array ('f', $blocks)) return true; } } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_FOOTER_CODE'])) $ai_db_options [AI_OPTION_GLOBAL]['DISABLE_FOOTER_CODE'] = DEFAULT_DISABLE_FOOTER_CODE; return ($ai_db_options [AI_OPTION_GLOBAL]['DISABLE_FOOTER_CODE']); } function get_blocks_sticky () { if (!function_exists ('ai_block_list_buttons')) return false; $current_flags = get_option (AI_FLAGS_NAME, 0); return (($current_flags & AD_FLAGS_BLOCKS_STICKY) != 0); } function get_settings_hidden () { if (!function_exists ('ai_block_list_buttons')) return false; $current_flags = get_option (AI_FLAGS_NAME, 0); return (($current_flags & AD_FLAGS_SETTINGS_HIDDEN) != 0); } function get_viewport_name ($viewport_number) { global $ai_db_options; $viewport_settins_name = 'VIEWPORT_NAME_' . $viewport_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$viewport_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$viewport_settins_name] = defined ("DEFAULT_VIEWPORT_NAME_" . $viewport_number) ? constant ("DEFAULT_VIEWPORT_NAME_" . $viewport_number) : ""; return ($ai_db_options [AI_OPTION_GLOBAL][$viewport_settins_name]); } function get_viewport_width ($viewport_number) { global $ai_db_options; $viewport_settins_name = 'VIEWPORT_WIDTH_' . $viewport_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$viewport_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$viewport_settins_name] = defined ("DEFAULT_VIEWPORT_WIDTH_" . $viewport_number) ? constant ("DEFAULT_VIEWPORT_WIDTH_" . $viewport_number) : ""; return ($ai_db_options [AI_OPTION_GLOBAL][$viewport_settins_name]); } function get_constant_name ($constant_number) { global $ai_db_options; $constant_settins_name = 'CONSTANT_NAME_' . $constant_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$constant_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$constant_settins_name] = ""; return ($ai_db_options [AI_OPTION_GLOBAL][$constant_settins_name]); } function get_constant_value ($constant_number) { global $ai_db_options; $constant_settins_name = 'CONSTANT_VALUE_' . $constant_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$constant_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$constant_settins_name] = ""; return ($ai_db_options [AI_OPTION_GLOBAL][$constant_settins_name]); } function get_hook_enabled ($hook_number) { global $ai_db_options; $hook_settins_name = 'HOOK_ENABLED_' . $hook_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name] = AI_DISABLED; return ($ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name]); } function get_hook_name ($hook_number) { global $ai_db_options; $hook_settins_name = 'HOOK_NAME_' . $hook_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name] = ""; return ($ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name]); } function get_hook_action ($hook_number) { global $ai_db_options; $hook_settins_name = 'HOOK_ACTION_' . $hook_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name] = ""; return ($ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name]); } function get_hook_priority ($hook_number) { global $ai_db_options; $hook_settins_name = 'HOOK_PRIORITY_' . $hook_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name] = DEFAULT_CUSTOM_HOOK_PRIORITY; return ($ai_db_options [AI_OPTION_GLOBAL][$hook_settins_name]); } function get_country_group_name ($group_number) { global $ai_db_options; $country_group_settins_name = 'COUNTRY_GROUP_NAME_' . $group_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$country_group_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$country_group_settins_name] = DEFAULT_COUNTRY_GROUP_NAME . ' ' . $group_number; return ($ai_db_options [AI_OPTION_GLOBAL][$country_group_settins_name]); } function get_group_country_list ($group_number) { global $ai_db_options; $group_countries_settins_name = 'GROUP_COUNTRIES_' . $group_number; if (!isset ($ai_db_options [AI_OPTION_GLOBAL][$group_countries_settins_name])) $ai_db_options [AI_OPTION_GLOBAL][$group_countries_settins_name] = ''; return ($ai_db_options [AI_OPTION_GLOBAL][$group_countries_settins_name]); } function multisite_settings_page_enabled () { global $ai_db_options_multisite; if (ai_remote ('multisite', is_multisite ())) { if (!isset ($ai_db_options_multisite ['MULTISITE_SETTINGS_PAGE'])) $ai_db_options_multisite ['MULTISITE_SETTINGS_PAGE'] = DEFAULT_MULTISITE_SETTINGS_PAGE; if ($ai_db_options_multisite ['MULTISITE_SETTINGS_PAGE'] == '') $ai_db_options_multisite ['MULTISITE_SETTINGS_PAGE'] = DEFAULT_MULTISITE_SETTINGS_PAGE; if (multisite_main_for_all_blogs ()) $ai_db_options_multisite ['MULTISITE_SETTINGS_PAGE'] = AI_DISABLED; elseif (current_user_can ('manage_network_plugins')) $ai_db_options_multisite ['MULTISITE_SETTINGS_PAGE'] = AI_ENABLED; return ($ai_db_options_multisite ['MULTISITE_SETTINGS_PAGE']); } return DEFAULT_MULTISITE_SETTINGS_PAGE; } function multisite_widgets_enabled () { global $ai_db_options_multisite; if (ai_remote ('multisite', is_multisite ())) { if (!isset ($ai_db_options_multisite ['MULTISITE_WIDGETS'])) $ai_db_options_multisite ['MULTISITE_WIDGETS'] = DEFAULT_MULTISITE_WIDGETS; if ($ai_db_options_multisite ['MULTISITE_WIDGETS'] == '') $ai_db_options_multisite ['MULTISITE_WIDGETS'] = DEFAULT_MULTISITE_WIDGETS; return ($ai_db_options_multisite ['MULTISITE_WIDGETS']); } return DEFAULT_MULTISITE_WIDGETS; } function multisite_php_processing () { global $ai_db_options_multisite; if (ai_remote ('multisite', is_multisite ())) { if (function_exists ('ai_filter_multisite_settings')) { if (!isset ($ai_db_options_multisite ['MULTISITE_PHP_PROCESSING'])) $ai_db_options_multisite ['MULTISITE_PHP_PROCESSING'] = DEFAULT_MULTISITE_PHP_PROCESSING; if ($ai_db_options_multisite ['MULTISITE_PHP_PROCESSING'] == '') $ai_db_options_multisite ['MULTISITE_PHP_PROCESSING'] = DEFAULT_MULTISITE_PHP_PROCESSING; return ($ai_db_options_multisite ['MULTISITE_PHP_PROCESSING']); } return AI_ENABLED; } return DEFAULT_MULTISITE_PHP_PROCESSING; } function multisite_exceptions_enabled () { global $ai_db_options_multisite; if (ai_remote ('multisite', is_multisite ())) { if (!isset ($ai_db_options_multisite ['MULTISITE_EXCEPTIONS'])) $ai_db_options_multisite ['MULTISITE_EXCEPTIONS'] = DEFAULT_MULTISITE_EXCEPTIONS; if ($ai_db_options_multisite ['MULTISITE_EXCEPTIONS'] == '') $ai_db_options_multisite ['MULTISITE_EXCEPTIONS'] = DEFAULT_MULTISITE_EXCEPTIONS; return ($ai_db_options_multisite ['MULTISITE_EXCEPTIONS']); } return DEFAULT_MULTISITE_EXCEPTIONS; } function multisite_main_for_all_blogs () { global $ai_db_options_multisite; if (ai_remote ('multisite', is_multisite ())) { if (!isset ($ai_db_options_multisite ['MULTISITE_MAIN_FOR_ALL_BLOGS'])) $ai_db_options_multisite ['MULTISITE_MAIN_FOR_ALL_BLOGS'] = DEFAULT_MULTISITE_MAIN_FOR_ALL_BLOGS; if ($ai_db_options_multisite ['MULTISITE_MAIN_FOR_ALL_BLOGS'] == '') $ai_db_options_multisite ['MULTISITE_MAIN_FOR_ALL_BLOGS'] = DEFAULT_MULTISITE_MAIN_FOR_ALL_BLOGS; return ($ai_db_options_multisite ['MULTISITE_MAIN_FOR_ALL_BLOGS']); } return DEFAULT_MULTISITE_MAIN_FOR_ALL_BLOGS; } function multisite_site_admin_page () { global $ai_db_options_multisite; if (ai_remote ('multisite', is_multisite ())) { if (!isset ($ai_db_options_multisite ['MULTISITE_SITE_ADMIN_PAGE'])) $ai_db_options_multisite ['MULTISITE_SITE_ADMIN_PAGE'] = DEFAULT_MULTISITE_SITE_ADMIN_PAGE; if (multisite_main_for_all_blogs ()) $ai_db_options_multisite ['MULTISITE_SITE_ADMIN_PAGE'] = AI_DISABLED; return ($ai_db_options_multisite ['MULTISITE_SITE_ADMIN_PAGE']); } return DEFAULT_MULTISITE_SITE_ADMIN_PAGE; } function get_adb_devices () { global $ai_db_options, $ai_wp_data; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_DEVICES'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_DEVICES'] = AI_DEFAULT_ADB_DEVICES; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_DEVICES']); } function get_adb_action ($saved_value = false) { global $ai_db_options, $ai_wp_data; if (!$saved_value) { if ($ai_wp_data [AI_CODE_FOR_IFRAME]) return AI_ADB_ACTION_NONE; switch (get_adb_no_action ()) { case AI_ADB_NO_ACTION_LOGGED_IN: if (($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0) return AI_ADB_ACTION_NONE; break; case AI_ADB_NO_ACTION_ADMINISTRATORS: if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0) return AI_ADB_ACTION_NONE; break; } if (isset ($ai_wp_data [AI_ADB_SHORTCODE_ACTION])) return ($ai_wp_data [AI_ADB_SHORTCODE_ACTION]); } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_ACTION'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_ACTION'] = AI_DEFAULT_ADB_ACTION; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_ACTION']); } function get_adb_no_action ($saved_value = false) { global $ai_db_options, $ai_wp_data; if (!$saved_value) { if ($ai_wp_data [AI_CODE_FOR_IFRAME]) return AI_ADB_NO_ACTION_NONE; } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_ACTION'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_ACTION'] = AI_DEFAULT_ADB_NO_ACTION; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_ACTION']); } function get_delay_action ($return_number = false) { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_DELAY_ACTION'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_DELAY_ACTION'] = ''; if ($return_number) { $value = trim ($ai_db_options [AI_OPTION_GLOBAL]['ADB_DELAY_ACTION']); if ($value == '') $value = 0; // if (is_numeric ($value)) return $value; else return 0; } return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_DELAY_ACTION']); } function get_no_action_period ($return_number = false) { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_ACTION_PERIOD'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_ACTION_PERIOD'] = AI_DEFAULT_ADB_NO_ACTION_PERIOD; if ($return_number) { $value = trim ($ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_ACTION_PERIOD']); if ($value == '') $value = 0; if (is_numeric ($value)) return $value; else return AI_DEFAULT_ADB_NO_ACTION_PERIOD; } return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_ACTION_PERIOD']); } function get_adb_selectors ($decode = false) { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_SELECTORS'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_SELECTORS'] = ''; if ($decode) return (html_entity_decode ($ai_db_options [AI_OPTION_GLOBAL]['ADB_SELECTORS'])); else return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_SELECTORS']); } function get_redirection_page ($return_number = false) { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_REDIRECTION_PAGE'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_REDIRECTION_PAGE'] = AI_DEFAULT_ADB_REDIRECTION_PAGE; if ($return_number) { $value = trim ($ai_db_options [AI_OPTION_GLOBAL]['ADB_REDIRECTION_PAGE']); if ($value == '') $value = 0; if (is_numeric ($value)) return $value; else return AI_DEFAULT_ADB_REDIRECTION_PAGE; } return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_REDIRECTION_PAGE']); } function get_custom_redirection_url () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_CUSTOM_REDIRECTION_URL'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_CUSTOM_REDIRECTION_URL'] = ''; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_CUSTOM_REDIRECTION_URL']); } function get_adb_external_scripts () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_EXTERNAL_SCRIPTS'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_EXTERNAL_SCRIPTS'] = AI_DEFAULT_ADB_EXTERNAL_SCRIPTS; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_EXTERNAL_SCRIPTS']); } function get_message_css () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_MESSAGE_CSS'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_MESSAGE_CSS'] = AI_DEFAULT_ADB_MESSAGE_CSS; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_MESSAGE_CSS']); } function get_overlay_css () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_OVERLAY_CSS'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_OVERLAY_CSS'] = AI_DEFAULT_ADB_OVERLAY_CSS; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_OVERLAY_CSS']); } function get_undismissible_message ($saved_value = false) { global $ai_db_options, $ai_wp_data; if (!$saved_value) { switch (get_no_undismissible_message ()) { case AI_ADB_NO_ACTION_LOGGED_IN: if (($ai_wp_data [AI_WP_USER] & AI_USER_LOGGED_IN) != 0) return AI_DISABLED; break; case AI_ADB_NO_ACTION_ADMINISTRATORS: if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0) return AI_DISABLED; break; } } if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_UNDISMISSIBLE_MESSAGE'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_UNDISMISSIBLE_MESSAGE'] = AI_DEFAULT_ADB_UNDISMISSIBLE_MESSAGE; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_UNDISMISSIBLE_MESSAGE']); } function get_no_undismissible_message () { global $ai_db_options; if (!isset ($ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_UNDISMISSIBLE_MESSAGE'])) $ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_UNDISMISSIBLE_MESSAGE'] = AI_DEFAULT_ADB_NO_UNDISMISSIBLE_MESSAGE; return ($ai_db_options [AI_OPTION_GLOBAL]['ADB_NO_UNDISMISSIBLE_MESSAGE']); } function filter_html_class ($str){ $str = str_replace (array ("\\\""), array ("\""), $str); $str = sanitize_html_class ($str); return $str; } function filter_string ($str){ $str = str_replace (array ("\\\""), array ("\""), $str); $str = str_replace (array ("\"", "<", ">"), "", $str); $str = trim (esc_html ($str)); return $str; } function filter_string_tags ($str){ $str = str_replace (array ("\\\""), array ("\""), $str); $str = str_replace (array ("\""), "", $str); $str = str_replace (array ("<", ">"), array ("<", ">"), $str); $str = trim (esc_html ($str)); return $str; } function filter_option ($option, $value, $delete_escaped_backslashes = true){ if ($delete_escaped_backslashes) $value = str_replace (array ("\\\""), array ("\""), $value); if ($option == 'ADB_SELECTORS' || $option == AI_OPTION_HTML_SELECTOR || $option == AI_OPTION_ANIMATION_TRIGGER_VALUE || $option == 'MAIN_CONTENT_ELEMENT') { $value = str_replace (array ("\\", "/", "?", "\"", "'", "'", '"'), "", $value); $value = esc_html ($value); } elseif ($option == AI_OPTION_DOMAIN_LIST || $option == 'NO_PARAGRAPH_COUNTING_INSIDE' || $option == AI_OPTION_BACKGROUND_COLOR || $option == AI_OPTION_BLOCK_BACKGROUND_COLOR || $option == AI_OPTION_PARAGRAPH_TAGS || $option == AI_OPTION_COUNT_INSIDE_ELEMENTS || $option == AI_OPTION_IP_ADDRESS_LIST || $option == AI_OPTION_COUNTRY_LIST) { $value = str_replace (array ("\\", "/", "?", "\"", "'", "<", ">", "[", "]", "'", '"'), "", $value); $value = esc_html ($value); } elseif ($option == AI_OPTION_BLOCK_WIDTH || $option == AI_OPTION_BLOCK_HEIGHT) { $value = str_replace (array ("\"", "'", "<", ">", "[", "]", "'", '"'), "", $value); $value = esc_html ($value); } elseif ( $option == AI_OPTION_PARAGRAPH_TEXT || $option == AI_OPTION_COUNT_INSIDE_ELEMENTS_TEXT || $option == AI_OPTION_AVOID_TEXT_ABOVE || $option == AI_OPTION_AVOID_TEXT_BELOW || $option == AI_OPTION_CLIENT_LIST ) { $value = esc_html ($value); } elseif ($option == AI_OPTION_BLOCK_NAME || $option == AI_OPTION_GENERAL_TAG || $option == AI_OPTION_DOMAIN_LIST || $option == AI_OPTION_CATEGORY_LIST || $option == AI_OPTION_TAG_LIST || $option == AI_OPTION_TAXONOMY_LIST || $option == AI_OPTION_ID_LIST || $option == AI_OPTION_URL_LIST || $option == AI_OPTION_MIN_PARAGRAPHS || $option == AI_OPTION_MAX_PARAGRAPHS || $option == AI_OPTION_SKIP_FIRST_PARAGRAPHS || $option == AI_OPTION_SKIP_LAST_PARAGRAPHS || $option == AI_OPTION_MIN_WORDS_ABOVE || $option == AI_OPTION_AVOID_PARAGRAPHS_ABOVE || $option == AI_OPTION_AVOID_PARAGRAPHS_BELOW || $option == AI_OPTION_AVOID_TRY_LIMIT || $option == AI_OPTION_MIN_WORDS || $option == AI_OPTION_MAX_WORDS || $option == AI_OPTION_MIN_PARAGRAPH_WORDS || $option == AI_OPTION_MAX_PARAGRAPH_WORDS || $option == AI_OPTION_MAXIMUM_INSERTIONS || $option == AI_OPTION_AFTER_DAYS || $option == AI_OPTION_START_DATE || $option == AI_OPTION_END_DATE || $option == AI_OPTION_SCHEDULING_FALLBACK || $option == AI_OPTION_LIMITS_FALLBACK || $option == AI_OPTION_EXCERPT_NUMBER || $option == AI_OPTION_WAIT_FOR_DELAY || $option == AI_OPTION_HORIZONTAL_MARGIN || $option == AI_OPTION_VERTICAL_MARGIN || $option == AI_OPTION_ANIMATION_TRIGGER_OFFSET || $option == AI_OPTION_ANIMATION_TRIGGER_DELAY || $option == AI_OPTION_IFRAME_WIDTH || $option == AI_OPTION_IFRAME_HEIGHT || $option == AI_OPTION_STICKY_HEIGHT || $option == AI_OPTION_AUTO_CLOSE_TIME || $option == AI_OPTION_STAY_CLOSED_TIME || $option == AI_OPTION_DELAY_SHOWING || $option == AI_OPTION_SHOW_EVERY || $option == AI_OPTION_VISITOR_MAX_IMPRESSIONS || $option == AI_OPTION_VISITOR_LIMIT_IMPRESSIONS_PER_TIME_PERIOD || $option == AI_OPTION_VISITOR_LIMIT_IMPRESSIONS_TIME_PERIOD || $option == AI_OPTION_MAX_IMPRESSIONS || $option == AI_OPTION_LIMIT_IMPRESSIONS_PER_TIME_PERIOD || $option == AI_OPTION_LIMIT_IMPRESSIONS_TIME_PERIOD || $option == AI_OPTION_VISITOR_MAX_CLICKS || $option == AI_OPTION_VISITOR_LIMIT_CLICKS_PER_TIME_PERIOD || $option == AI_OPTION_VISITOR_LIMIT_CLICKS_TIME_PERIOD || $option == AI_OPTION_MAX_CLICKS || $option == AI_OPTION_LIMIT_CLICKS_PER_TIME_PERIOD || $option == AI_OPTION_LIMIT_CLICKS_TIME_PERIOD || $option == AI_OPTION_BACKGROUND_IMAGE || $option == AI_OPTION_PARALLAX . '_1' || $option == AI_OPTION_PARALLAX . '_2' || $option == AI_OPTION_PARALLAX . '_3' || $option == AI_OPTION_PARALLAX_IMAGE . '_1' || $option == AI_OPTION_PARALLAX_IMAGE . '_2' || $option == AI_OPTION_PARALLAX_IMAGE . '_3' || $option == AI_OPTION_PARALLAX_SHIFT . '_1' || $option == AI_OPTION_PARALLAX_SHIFT . '_2' || $option == AI_OPTION_PARALLAX_SHIFT . '_3' || $option == AI_OPTION_PARALLAX_LINK || $option == 'CLICK_FRAUD_PROTECTION_TIME' || $option == 'GLOBAL_VISITOR_LIMIT_CPT' || $option == 'GLOBAL_VISITOR_LIMIT_TIME' || $option == 'ADB_DELAY_ACTION' || $option == 'ADB_NO_ACTION_PERIOD' || $option == 'ADB_REDIRECTION_PAGE' || $option == 'ADB_CUSTOM_REDIRECTION_URL' || $option == AI_OPTION_CUSTOM_CSS || $option == 'HOOK_PRIORITY' || $option == 'ADB_OVERLAY_CSS' || $option == 'ADB_MESSAGE_CSS') { $value = str_replace (array ("\"", "<", ">", "[", "]"), "", $value); $value = esc_html ($value); } elseif ($option == AI_OPTION_PARAGRAPH_NUMBER) { $value = str_replace (array ("\"", "<", ">"), "", $value); $value = esc_html ($value); } elseif ($option == AI_OPTION_URL_PARAMETER_LIST || $option == AI_OPTION_COOKIE_LIST) { $value = str_replace (array ("\"", "<", ">"), "", $value); $value = esc_html ($value); } elseif ($option == 'AD_LABEL') { $value = str_replace (array ("\\"), "", $value); $value = esc_html ($value); } elseif ($option == 'REPORT_HEADER_TITLE' || $option == 'REPORT_HEADER_DESCRIPTION' || $option == 'EXTERNAL_TRACKING_CATEGORY' || $option == 'EXTERNAL_TRACKING_ACTION' || $option == 'EXTERNAL_TRACKING_LABEL' || $option == 'REPORT_FOOTER') { $value = str_replace (array ("\\", "?"), "", $value); $value = esc_html ($value); } elseif ( $option == 'REPORT_HEADER_IMAGE') { $value = str_replace (home_url () . '/', '', $value); $value = str_replace (array ("http://", "https://", ":". "\"", "<", ">", "[", "]"), "", $value); $value = esc_html ($value); } elseif ( $option == 'RECAPTCHA_THRESHOLD' ) { $value = str_replace (array (":". "\"", "<", ">", "[", "]"), "", $value); $value = esc_html ($value); } elseif ( $option == 'MAXMIND_LICENSE_KEY' || $option == 'GEO_DB' ) { $value = str_replace (array (":". "\"", "<", ">", "[", "]"), "", $value); } return $value; } function filter_option_hf ($option, $value){ $value = str_replace (array ("\\\""), array ("\""), $value); // if ($option == AI_OPTION_CODE ) { // } elseif ($option == AI_OPTION_ENABLE_MANUAL) { // } elseif ($option == AI_OPTION_PROCESS_PHP) { // } elseif ($option == AI_OPTION_ENABLE_404) { // } elseif ($option == AI_OPTION_DETECT_SERVER_SIDE) { // } elseif ($option == AI_OPTION_DISPLAY_FOR_DEVICES) { // } return $value; } function ai_ajax () { global $ai_wp_data; // check_ajax_referer ("adinserter_data", "ai_check"); // check_admin_referer ("adinserter_data", "ai_check"); if (isset ($_POST ["adsense-ad-units"])) { if (defined ('AI_ADSENSE_API')) { adsense_ad_name (); } } elseif (isset ($_GET ["block"])) { $block = sanitize_text_field ((int) $_GET ["block"]); if (is_numeric ($block) && $block >= 1 && $block <= 96) { global $block_object; $block = $block_object [$block]; if (isset ($_GET ["cookie_check"]) && $_GET ["cookie_check"] == 1) { $block->client_side_cookie_check = true; } if (isset ($_GET ["cookie_check_url"]) && $_GET ["cookie_check_url"] == 1) { $block->client_side_cookie_check_url = true; } if (isset ($_GET ["hide-debug-labels"]) && $_GET ["hide-debug-labels"] == 1) { $block->hide_debug_labels = true; } if ($block->get_iframe ()) echo $block->get_iframe_page (); } } elseif (isset ($_GET ["ads-txt"])) { $ads_txt = get_option (AI_ADS_TXT_NAME); if ($ads_txt === false) { wp_die ('Page not found', 404); } header ('Content-Type: text/plain'); echo esc_html ($ads_txt); wp_die (); } elseif (isset ($_GET ["remote-ads-txt"]) && !function_exists ('ai_ajax_processing_2')) { if (get_remote_debugging ()) { // Read-only access if ($_GET ["remote-ads-txt"] == 'save') { wp_die (); } $_GET ["virtual"] = get_option (AI_ADS_TXT_NAME) !== false ? '1' : '0'; ads_txt (sanitize_text_field ($_GET ["remote-ads-txt"])); } } elseif (isset ($_GET ["ai-get-settings"])) { if (get_remote_debugging ()) { global $ai_db_options, $ai_db_options_multisite; if (isset ($_GET ["ai-show-errors"])) { ini_set ('display_errors', 1); error_reporting (E_ALL); } if (function_exists ('ai_check_remote_settings')) { ai_check_remote_settings (); } $tracking = false; if (defined ('AI_PLUGIN_TRACKING') && AI_PLUGIN_TRACKING) { global $ai_dst; if (isset ($ai_dst) && is_object ($ai_dst) && $ai_dst->get_plugin_tracking () !== null) { $tracking = $ai_dst->get_tracking (); } } $plugin_data = array ( 'version' => AD_INSERTER_NAME . ' ' . AD_INSERTER_VERSION, 'install' => get_option (AI_INSTALL_NAME), 'install-time' => isset ($ai_wp_data [AI_INSTALL_TIME_DIFFERENCE]) ? $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE] : '', 'since-install' => isset ($ai_wp_data [AI_DAYS_SINCE_INSTAL]) ? $ai_wp_data [AI_DAYS_SINCE_INSTAL] : null, 'tracking' => $tracking, 'review' => get_option ('ai-notice-review', ''), 'pro' => false, 'write' => false, 'sidebar-widgets' => get_sidebar_widgets (), 'exceptions' => ai_get_exceptions (/*ai_current_user_role_ok () && */(!is_multisite() || is_main_site () || multisite_exceptions_enabled ())), 'current-theme' => wp_get_theme (), 'virtual-ads-txt' => get_option (AI_ADS_TXT_NAME) !== false, 'categories' => ai_get_category_list (), 'tags' => ai_get_tag_list (), 'taxonomies' => ai_get_taxonomy_list (), 'post-ids' => ai_get_post_id_list (), 'license-key' => '', 'type' => '', 'status' => '', 'last-update' => '', 'client' => false, 'counter' => '', ); if (function_exists ('ai_plugin_data')) { ai_plugin_data ($plugin_data); } echo '#', base64_encode (serialize ($plugin_data)), '#'; if (is_multisite()) { echo base64_encode (serialize ($ai_db_options_multisite)); } echo "#"; if (is_multisite() && multisite_main_for_all_blogs () && defined ('BLOG_ID_CURRENT_SITE')) { echo BLOG_ID_CURRENT_SITE; } echo "#"; if (function_exists ('ai_filter_remote_settings')) { ai_filter_remote_settings ($ai_db_options); } echo base64_encode (serialize ($ai_db_options)); } } elseif (isset ($_GET ["check-page"])) { if (get_remote_debugging ()) { ai_check_page (); } } elseif (function_exists ('ai_ajax_processing_2')) { ai_ajax_processing_2 (); } wp_die (); } function ai_ajax_backend () { global $preview_name, $preview_alignment, $preview_css; // check_ajax_referer ("adinserter_data", "ai_check"); check_admin_referer ("adinserter_data", "ai_check"); if (is_multisite() && !is_main_site () && !multisite_settings_page_enabled ()) { wp_die (); } if (!current_user_can ('manage_options')) { wp_die (); } if (isset ($_POST ["preview"])) { $block = urldecode ((int) $_POST ["preview"]); if (is_numeric ($block) && $block >= 1 && $block <= 96) { $preview_parameters = array (); if (isset ($_POST ['name'])) $preview_parameters ['name'] = base64_decode ($_POST ['name']); if (isset ($_POST ['code'])) $preview_parameters ['code'] = base64_decode ($_POST ['code']); if (isset ($_POST ['alignment'])) $preview_parameters ['alignment'] = base64_decode ($_POST ['alignment']); if (isset ($_POST ['horizontal'])) $preview_parameters ['horizontal'] = base64_decode ($_POST ['horizontal']); if (isset ($_POST ['vertical'])) $preview_parameters ['vertical'] = base64_decode ($_POST ['vertical']); if (isset ($_POST ['horizontal_margin'])) $preview_parameters ['horizontal_margin'] = base64_decode ($_POST ['horizontal_margin']); if (isset ($_POST ['vertical_margin'])) $preview_parameters ['vertical_margin'] = base64_decode ($_POST ['vertical_margin']); if (isset ($_POST ['animation'])) $preview_parameters ['animation'] = base64_decode ($_POST ['animation']); if (isset ($_POST ['alignment_css'])) $preview_parameters ['alignment_css'] = base64_decode ($_POST ['alignment_css']); if (isset ($_POST ['custom_css'])) $preview_parameters ['custom_css'] = base64_decode ($_POST ['custom_css']); if (isset ($_POST ['php'])) $preview_parameters ['php'] = $_POST ['php']; if (isset ($_POST ['close'])) $preview_parameters ['close'] = $_POST ['close']; if (isset ($_POST ['background'])) $preview_parameters ['background'] = $_POST ['background']; if (isset ($_POST ['body_background'])) $preview_parameters ['body_background'] = $_POST ['body_background']; if (isset ($_POST ['background_image'])) $preview_parameters ['background_image'] = base64_decode ($_POST ['background_image']); if (isset ($_POST ['background_color'])) $preview_parameters ['background_color'] = base64_decode ($_POST ['background_color']); if (isset ($_POST ['background_size'])) $preview_parameters ['background_size'] = base64_decode ($_POST ['background_size']); if (isset ($_POST ['background_repeat'])) $preview_parameters ['background_repeat'] = base64_decode ($_POST ['background_repeat']); if (isset ($_POST ['label'])) $preview_parameters ['label'] = $_POST ['label']; if (isset ($_POST ['sticky_block'])) $preview_parameters ['sticky_block'] = $_POST ['sticky_block']; if (isset ($_POST ['sticky_height'])) $preview_parameters ['sticky_height'] = $_POST ['sticky_height']; if (isset ($_POST ['read_only'])) $preview_parameters ['read_only'] = $_POST ['read_only']; if (isset ($_POST ['iframe'])) $preview_parameters ['iframe'] = $_POST ['iframe']; if (isset ($_POST ['check'])) $preview_parameters ['check'] = $_POST ['check']; if (isset ($_POST ['count'])) $preview_parameters ['count'] = $_POST ['count']; if (isset ($_POST ['rotate'])) $preview_parameters ['rotate'] = $_POST ['rotate']; if (isset ($_POST ['viewport'])) $preview_parameters ['viewport'] = $_POST ['viewport']; if (isset ($_POST ['fallback'])) $preview_parameters ['fallback'] = $_POST ['fallback']; if (function_exists ('ai_remote_preview')) { ai_remote_preview ($block, $preview_parameters); } require_once AD_INSERTER_PLUGIN_DIR.'includes/preview.php'; generate_code_preview ( $block, $preview_parameters ); } elseif ($_POST ["preview"] == 'adb') { require_once AD_INSERTER_PLUGIN_DIR.'includes/preview-adb.php'; $message = base64_decode ($_POST ["code"]); $process_php = isset ($_POST ["php"]) && $_POST ["php"] == 1; $head = null; $processed_message = null; $footer = null; if (function_exists ('ai_remote_preview_adb')) { ai_remote_preview_adb ($message, $process_php, $head, $processed_message, $footer); } generate_code_preview_adb ($message, $process_php, false, $head, $processed_message, $footer); } elseif ($_POST ["preview"] == 'adsense') { if (defined ('AI_ADSENSE_API')) { require_once AD_INSERTER_PLUGIN_DIR.'includes/preview.php'; require_once AD_INSERTER_PLUGIN_DIR.'includes/adsense-api.php'; if (defined ('AI_ADSENSE_AUTHORIZATION_CODE')) { $adsense = new adsense_api(); $adsense_code = $adsense->getAdCode (base64_decode ($_POST ["slot_id"])); $adsense_error = $adsense->getError (); $preview_parameters = array ( "name" => isset ($_POST ["name"]) ? base64_decode ($_POST ["name"]) : 'ADSENSE CODE', "alignment" => '', "horizontal" => '', "vertical" => '', "alignment_css" => '', "custom_css" => '', "code" => $adsense_error == '' ? $adsense_code : '
    '.$adsense_error.'
    ', "php" => false, "label" => false, "close" => AI_CLOSE_NONE, "read_only" => true, ); generate_code_preview ( 0, // Default settings $preview_parameters ); } } } } elseif (isset ($_POST ["edit"])) { if (is_numeric ($_POST ["edit"]) && $_POST ["edit"] >= 1 && $_POST ["edit"] <= 96) { require_once AD_INSERTER_PLUGIN_DIR.'includes/editor.php'; $process_php = isset ($_POST ["php"]) && $_POST ["php"] == 1; generate_code_editor ((int) $_POST ["edit"], base64_decode ($_POST ["code"]), $process_php); } } if (isset ($_POST ["placeholder"])) { $block = urldecode ((int) $_POST ["block"]); if (is_numeric ($block) && $block >= 1 && $block <= 96) { require_once AD_INSERTER_PLUGIN_DIR.'includes/placeholders.php'; generate_placeholder_editor (str_replace (array ('"', "\\'"), array ('"', '''), urldecode ($_POST ["placeholder"])), $block); } } elseif (isset ($_POST ["generate-code"])) { $code_generator = new ai_code_generator (); echo json_encode ($code_generator->generate ($_POST)); } elseif (isset ($_POST ["import-code"])) { $code_generator = new ai_code_generator (); echo json_encode ($code_generator->import (base64_decode ($_POST ["import-code"]))); } elseif (isset ($_POST ["import-rotation-code"])) { $code_generator = new ai_code_generator (); echo json_encode ($code_generator->import_rotation (base64_decode ($_POST ["import-rotation-code"]))); } elseif (isset ($_POST ["generate-rotation-code"])) { $code_generator = new ai_code_generator (); echo json_encode ($code_generator->generate_rotation (json_decode (base64_decode ($_POST ['generate-rotation-code']), true))); } elseif (isset ($_GET ["image"])) { $filename = sanitize_file_name ($_GET ["image"]); header ("Content-Type: image/png"); header ("Content-Length: " . filesize (AD_INSERTER_PLUGIN_DIR.'images/'.$filename)); readfile (AD_INSERTER_PLUGIN_DIR.'images/'.$filename); } elseif (isset ($_GET ["css"])) { $filename = sanitize_file_name ($_GET ["css"]); header ("Content-Type: text/css"); header ("Content-Length: " . filesize (AD_INSERTER_PLUGIN_DIR.'css/'.$filename)); readfile (AD_INSERTER_PLUGIN_DIR.'css/'.$filename); } elseif (isset ($_GET ["js"])) { $filename = sanitize_file_name ($_GET ["js"]); header ("Content-Type: application/javascript"); header ("Content-Length: " . filesize (AD_INSERTER_PLUGIN_DIR.'js/'.$filename)); readfile (AD_INSERTER_PLUGIN_DIR.'js/'.$filename); } elseif (isset ($_GET ["rating"])) { $cache_time = $_GET ["rating"] == 'update' ? 0 * 60 : AI_TRANSIENT_RATING_EXPIRATION; if (!get_transient (AI_TRANSIENT_RATING) || !($transient_timeout = get_option ('_transient_timeout_' . AI_TRANSIENT_RATING)) || AI_TRANSIENT_RATING_EXPIRATION - ($transient_timeout - time ()) > $cache_time) { $args = (object) array ('slug' => 'ad-inserter'); $request = array ('action' => 'plugin_information', 'timeout' => 5, 'request' => serialize ($args)); $url = 'http://api.wordpress.org/plugins/info/1.0/'; $response = wp_remote_post ($url, array ('body' => $request)); $plugin_info = @unserialize ($response ['body']); if (isset ($plugin_info->ratings)) { $total_rating = 0; $total_count = 0; foreach ($plugin_info->ratings as $rating => $count) { $total_rating += $rating * $count; $total_count += $count; } $rating = number_format ($total_rating / $total_count, 4); set_transient (AI_TRANSIENT_RATING, $rating, AI_TRANSIENT_RATING_EXPIRATION); } } if ($rating = get_transient (AI_TRANSIENT_RATING)) { if ($rating > 1 && $rating <= 5) echo $rating; } } elseif (isset ($_POST ["notice"])) { update_option ('ai-notice-' . esc_html ($_POST ["notice"]), esc_html ($_POST ["click"])); } elseif (isset ($_POST ["notice-check"])) { echo esc_html ($_POST ["notice-check"]); } elseif (isset ($_GET ["list"])) { $search_text = esc_html (trim ($_GET ["list"])); $show_all_blocks = isset ($_GET ["all"]) && $_GET ["all"]; $start = (int) $_GET ["start"]; if ($start < 1 || $start > 96) $start = 1; $end = (int) $_GET ["end"]; if ($end < 1 || $end > 96 || $end < $start) $end = 16; $active = (int) $_GET ["active"]; if ($active < 1 || $active > 96) $active = 1; code_block_list ($start, $end, $search_text, $show_all_blocks, $active); } elseif (isset ($_GET ["adsense-list"])) { if (defined ('AI_ADSENSE_API')) { adsense_list (); } } elseif (isset ($_GET ["adsense-code"])) { if (defined ('AI_ADSENSE_API')) { ai_adsense_code (esc_html ($_GET ["adsense-code"])); } } elseif (isset ($_GET ["adsense-authorization-code"])) { if (defined ('AI_ADSENSE_API')) { if ($_GET ['adsense-authorization-code'] == '') { delete_option (AI_ADSENSE_CLIENT_IDS); delete_option (AI_ADSENSE_AUTH_CODE); delete_option (AI_ADSENSE_OWN_IDS); delete_transient (AI_TRANSIENT_ADSENSE_TOKEN_1); delete_transient (AI_TRANSIENT_ADSENSE_TOKEN); delete_transient (AI_TRANSIENT_ADSENSE_ADS); } elseif (base64_decode ($_GET ['adsense-authorization-code']) == 'own-ids') { update_option (AI_ADSENSE_OWN_IDS, '1'); delete_option (AI_ADSENSE_CLIENT_IDS); delete_option (AI_ADSENSE_AUTH_CODE); delete_transient (AI_TRANSIENT_ADSENSE_TOKEN_1); delete_transient (AI_TRANSIENT_ADSENSE_TOKEN); delete_transient (AI_TRANSIENT_ADSENSE_ADS); } // else update_option (AI_ADSENSE_AUTH_CODE, base64_decode ($_GET ['adsense-authorization-code'])); } } elseif (isset ($_GET ["adsense-client-id"])) { if (defined ('AI_ADSENSE_API')) { if ($_GET ['adsense-client-id'] == '') { delete_option (AI_ADSENSE_CLIENT_IDS); delete_option (AI_ADSENSE_AUTH_CODE); delete_transient (AI_TRANSIENT_ADSENSE_TOKEN_1); delete_transient (AI_TRANSIENT_ADSENSE_TOKEN); delete_transient (AI_TRANSIENT_ADSENSE_ADS); } else update_option (AI_ADSENSE_CLIENT_IDS, array ('ID' => base64_decode ($_GET ['adsense-client-id']), 'SECRET' => base64_decode ($_GET ['adsense-client-secret']))); } } elseif (isset ($_GET ["ads-txt"])) { if (!is_multisite() || is_main_site ()) { if (function_exists ('ai_remote_ads_txt') && ai_remote_ads_txt ()) { wp_die (); } ads_txt (esc_html ($_GET ["ads-txt"])); } } elseif (isset ($_GET ["settings"])) { generate_settings_form (); } elseif (isset ($_GET ["list-options"])) { generate_list_options (esc_html ($_GET ["list-options"])); } elseif (isset ($_GET ["update"])) { if ($_GET ["update"] == 'block-code-demo') { ai_block_code_demo (urldecode ($_GET ["block_class_name"]), esc_html ($_GET ["block_class"]), esc_html ($_GET ["block_number_class"]), esc_html ($_GET ["block_name_class"]), esc_html ($_GET ["inline_styles"])); } elseif (function_exists ('ai_ajax_backend_2')) { ai_ajax_backend_2 (); } } elseif (isset ($_GET ["check-page"])) { if (function_exists ('ai_check_remote_page') && ai_check_remote_page ()) { wp_die (); } ai_check_page (); } elseif (function_exists ('ai_ajax_backend_2')) { ai_ajax_backend_2 (); } wp_die (); } function ai_generate_extract (&$settings) { global $ai_custom_hooks, $ai_wp_data, $version_string, $subversion_string; if (!defined ('AI_EXTRACT_GENERATED')) define ('AI_EXTRACT_GENERATED', true); $obj = new ai_Block (1); $extract = array (); if (defined ('AI_BUFFERING')) { $above_header_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $html_element_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); } $content_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $excerpt_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $loop_start_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $loop_end_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $post_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $before_comments_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $between_comments_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $after_comments_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $footer_hook_blocks = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); $custom_hook_blocks = array (); for ($custom_hook = 1; $custom_hook <= 20; $custom_hook ++) { $custom_hook_blocks [] = array (AI_PT_ANY => array (), AI_PT_HOMEPAGE => array(), AI_PT_CATEGORY => array(), AI_PT_SEARCH => array(), AI_PT_ARCHIVE => array(), AI_PT_STATIC => array(), AI_PT_POST => array(), AI_PT_404 => array(), AI_PT_FEED => array(), AI_PT_AJAX => array()); } // Get blocks used in sidebar widgets $sidebar_widgets = wp_get_sidebars_widgets(); $widget_options = get_option ('widget_ai_widget'); $widget_blocks = array (); foreach ($sidebar_widgets as $sidebar_index => $sidebar_widget) { if (is_array ($sidebar_widget) && isset ($GLOBALS ['wp_registered_sidebars'][$sidebar_index]['name'])) { $sidebar_name = $GLOBALS ['wp_registered_sidebars'][$sidebar_index]['name']; if ($sidebar_name != "") { foreach ($sidebar_widget as $widget) { if (preg_match ("/ai_widget-([\d]+)/", $widget, $widget_id)) { if (isset ($widget_id [1]) && is_numeric ($widget_id [1])) { $widget_option = $widget_options [$widget_id [1]]; $widget_block = $widget_option ['block']; if ($widget_block >= 1 && $widget_block <= 96) { $widget_blocks [] = $widget_block; } } } } } } } $widget_blocks = array_unique ($widget_blocks); // Generate extracted data $active_blocks = array (); $temp_ai_wp_data = $ai_wp_data; $ai_wp_data [AI_MOBILE_DETECT_JS] = false; $ai_wp_data [AI_SERVER_SIDE_DETECTION] = false; $ai_wp_data [AI_CLIENT_SIDE_DETECTION] = false; $ai_wp_data [AI_CLIENT_SIDE_INSERTION] = get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT; $ai_wp_data [AI_STICK_TO_THE_CONTENT] = false; $ai_wp_data [AI_TRACKING] = false; $ai_wp_data [AI_CLOSE_BUTTONS] = false; $ai_wp_data [AI_PARALLAX] = false; $ai_wp_data [AI_CHECK_BLOCK] = false; $ai_wp_data [AI_IFRAMES] = false; $ai_wp_data [AI_ANIMATION] = false; $ai_wp_data [AI_LAZY_LOADING] = false; $ai_wp_data [AI_GEOLOCATION] = false; for ($block = 1; $block <= 96; $block ++) { if (!isset ($settings [$block])) continue; $obj->number = $block; $obj->wp_options = $settings [$block]; $page_types = array (); if ($obj->get_display_settings_home()) $page_types []= AI_PT_HOMEPAGE; if ($obj->get_display_settings_page()) $page_types []= AI_PT_STATIC; if ($obj->get_display_settings_post()) $page_types []= AI_PT_POST; if ($obj->get_display_settings_category()) $page_types []= AI_PT_CATEGORY; if ($obj->get_display_settings_search()) $page_types []= AI_PT_SEARCH; if ($obj->get_display_settings_archive()) $page_types []= AI_PT_ARCHIVE; if ($obj->get_enable_ajax()) $page_types []= AI_PT_AJAX; if ($obj->get_enable_feed()) $page_types []= AI_PT_FEED; if ($obj->get_enable_404()) $page_types []= AI_PT_404; $automatic_insertion = $obj->get_automatic_insertion(); $enabled_insertion = $obj->get_disable_insertion() == AI_DISABLED; if ($page_types && $enabled_insertion) { // Change insertion position to actual server-side insertion position switch ($automatic_insertion) { case AI_AUTOMATIC_INSERTION_BEFORE_HTML_ELEMENT: case AI_AUTOMATIC_INSERTION_INSIDE_HTML_ELEMENT: case AI_AUTOMATIC_INSERTION_AFTER_HTML_ELEMENT: switch ($obj->get_html_element_insertion ()) { case AI_HTML_INSERTION_SEREVR_SIDE: $automatic_insertion = AI_AUTOMATIC_INSERTION_OUTPUT_BUFFERING; break; default: $automatic_insertion = $obj->get_server_side_insertion (); break; } break; } switch ($automatic_insertion) { case AI_AUTOMATIC_INSERTION_ABOVE_HEADER: if (defined ('AI_BUFFERING')) { foreach ($page_types as $block_page_type) $above_header_hook_blocks [$block_page_type][]= $block; $above_header_hook_blocks [AI_PT_ANY][]= $block; } break; case AI_AUTOMATIC_INSERTION_OUTPUT_BUFFERING: if (defined ('AI_BUFFERING')) { foreach ($page_types as $block_page_type) $html_element_hook_blocks [$block_page_type][]= $block; $html_element_hook_blocks [AI_PT_ANY][]= $block; } break; case AI_AUTOMATIC_INSERTION_BEFORE_PARAGRAPH: case AI_AUTOMATIC_INSERTION_AFTER_PARAGRAPH: case AI_AUTOMATIC_INSERTION_BEFORE_IMAGE: case AI_AUTOMATIC_INSERTION_AFTER_IMAGE: case AI_AUTOMATIC_INSERTION_BEFORE_CONTENT: case AI_AUTOMATIC_INSERTION_AFTER_CONTENT: foreach ($page_types as $block_page_type) $content_hook_blocks [$block_page_type][]= $block; $content_hook_blocks [AI_PT_ANY][]= $block; break; case AI_AUTOMATIC_INSERTION_BEFORE_EXCERPT: case AI_AUTOMATIC_INSERTION_AFTER_EXCERPT: foreach ($page_types as $block_page_type) $excerpt_hook_blocks [$block_page_type][]= $block; $excerpt_hook_blocks [AI_PT_ANY][]= $block; break; case AI_AUTOMATIC_INSERTION_BEFORE_POST: foreach ($page_types as $block_page_type) $loop_start_hook_blocks [$block_page_type][]= $block; $loop_start_hook_blocks [AI_PT_ANY][]= $block; break; case AI_AUTOMATIC_INSERTION_AFTER_POST: foreach ($page_types as $block_page_type) $loop_end_hook_blocks [$block_page_type][]= $block; $loop_end_hook_blocks [AI_PT_ANY][]= $block; break; case AI_AUTOMATIC_INSERTION_BETWEEN_POSTS: foreach ($page_types as $block_page_type) $post_hook_blocks [$block_page_type][]= $block; $post_hook_blocks [AI_PT_ANY][]= $block; break; case AI_AUTOMATIC_INSERTION_BEFORE_COMMENTS: foreach ($page_types as $block_page_type) $before_comments_hook_blocks [$block_page_type][]= $block; $before_comments_hook_blocks [AI_PT_ANY][]= $block; break; case AI_AUTOMATIC_INSERTION_BETWEEN_COMMENTS: foreach ($page_types as $block_page_type) $between_comments_hook_blocks [$block_page_type][]= $block; $between_comments_hook_blocks [AI_PT_ANY][]= $block; break; case AI_AUTOMATIC_INSERTION_AFTER_COMMENTS: foreach ($page_types as $block_page_type) $after_comments_hook_blocks [$block_page_type][]= $block; $after_comments_hook_blocks [AI_PT_ANY][]= $block; break; case AI_AUTOMATIC_INSERTION_FOOTER: foreach ($page_types as $block_page_type) $footer_hook_blocks [$block_page_type][]= $block; $footer_hook_blocks [AI_PT_ANY][]= $block; break; default: if ($automatic_insertion >= AI_AUTOMATIC_INSERTION_CUSTOM_HOOK && $automatic_insertion < AI_AUTOMATIC_INSERTION_CUSTOM_HOOK + 20) { $hook_index = $automatic_insertion - AI_AUTOMATIC_INSERTION_CUSTOM_HOOK; foreach ($page_types as $block_page_type) $custom_hook_blocks [$hook_index][$block_page_type][]= $block; $custom_hook_blocks [$hook_index][AI_PT_ANY][]= $block; } break; } } $automatic = $automatic_insertion != AI_AUTOMATIC_INSERTION_DISABLED; $manual_widget = $obj->get_enable_widget() == AI_ENABLED; $manual_shortcode = $obj->get_enable_manual() == AI_ENABLED; $manual_php_function = $obj->get_enable_php_call() == AI_ENABLED; if ($enabled_insertion && ($automatic || ($manual_widget && in_array ($block, $widget_blocks)) || $manual_shortcode || $manual_php_function)) { $active_blocks []= $block; $obj->extract_features (); } } $extract [AI_EXTRACT_USED_BLOCKS] = serialize ($active_blocks); if (isset ($settings [AI_HEADER_OPTION_NAME])) { $obj->wp_options = $settings [AI_HEADER_OPTION_NAME]; if ($obj->get_enable_manual () && $obj->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true; } if (isset ($settings [AI_FOOTER_OPTION_NAME])) { $obj->wp_options = $settings [AI_FOOTER_OPTION_NAME]; if ($obj->get_enable_manual () && $obj->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true; } if (function_exists ('ai_global_extract_features')) { ai_global_extract_features (); } $extract [AI_EXTRACT_FEATURES] = array ( AI_MOBILE_DETECT_JS => $ai_wp_data [AI_MOBILE_DETECT_JS], AI_SERVER_SIDE_DETECTION => $ai_wp_data [AI_SERVER_SIDE_DETECTION], AI_CLIENT_SIDE_DETECTION => $ai_wp_data [AI_CLIENT_SIDE_DETECTION], AI_CLIENT_SIDE_INSERTION => $ai_wp_data [AI_CLIENT_SIDE_INSERTION], AI_STICK_TO_THE_CONTENT => $ai_wp_data [AI_STICK_TO_THE_CONTENT], AI_TRACKING => $ai_wp_data [AI_TRACKING], AI_CLOSE_BUTTONS => $ai_wp_data [AI_CLOSE_BUTTONS], AI_PARALLAX => $ai_wp_data [AI_PARALLAX], AI_CHECK_BLOCK => $ai_wp_data [AI_CHECK_BLOCK], AI_IFRAMES => $ai_wp_data [AI_IFRAMES], AI_ANIMATION => $ai_wp_data [AI_ANIMATION], AI_LAZY_LOADING => $ai_wp_data [AI_LAZY_LOADING], AI_GEOLOCATION => $ai_wp_data [AI_GEOLOCATION] ); $ai_wp_data = $temp_ai_wp_data; if (defined ('AI_BUFFERING')) { $extract [ABOVE_HEADER_HOOK_BLOCKS] = $above_header_hook_blocks; $extract [HTML_ELEMENT_HOOK_BLOCKS] = $html_element_hook_blocks; } $extract [CONTENT_HOOK_BLOCKS] = $content_hook_blocks; $extract [EXCERPT_HOOK_BLOCKS] = $excerpt_hook_blocks; $extract [LOOP_START_HOOK_BLOCKS] = $loop_start_hook_blocks; $extract [LOOP_END_HOOK_BLOCKS] = $loop_end_hook_blocks; $extract [POST_HOOK_BLOCKS] = $post_hook_blocks; $extract [BEFORE_COMMENTS_HOOK_BLOCKS] = $before_comments_hook_blocks; $extract [BETWEEN_COMMENTS_HOOK_BLOCKS] = $between_comments_hook_blocks; $extract [AFTER_COMMENTS_HOOK_BLOCKS] = $after_comments_hook_blocks; $extract [FOOTER_HOOK_BLOCKS] = $footer_hook_blocks; for ($custom_hook = 1; $custom_hook <= 20; $custom_hook ++) { $action = get_hook_action ($custom_hook); if (get_hook_enabled ($custom_hook) && get_hook_name ($custom_hook) != '' && $action != '') { $custom_hook_extract_index = $action . CUSTOM_HOOK_BLOCKS; if (isset ($extract [$custom_hook_extract_index])) { // Custom hook on WP hook used by the plugin - merge blocks foreach ($extract [$custom_hook_extract_index] as $page_type => $blocks) { $extract [$custom_hook_extract_index][$page_type] = array_merge ($blocks, $custom_hook_blocks [$custom_hook - 1][$page_type]); } } else $extract [$custom_hook_extract_index] = $custom_hook_blocks [$custom_hook - 1]; } } $extract_version = $version_string . $subversion_string . '-' . '96'; if (function_exists ('ai_system_output_check')) { $extract_version .= 'P'; } $extract ['VERSION'] = $extract_version; $extract ['TIMESTAMP'] = time (); return ($extract); } function ai_load_settings () { global $ai_db_options, $block_object, $ai_wp_data, $version_string, $ai_custom_hooks; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("LOAD SETTINGS START"); if (get_option (AI_OPTION_NAME) === false) { $initial_settings = ''; $initial_settings = apply_filters ('ai_initial_settings', $initial_settings); if (is_string ($initial_settings) && substr ($initial_settings, 0, 4) === ':AI:') { update_option (AI_OPTION_NAME, $initial_settings); } elseif (is_array ($initial_settings)) { $ai_db_options = $initial_settings; ai_save_options ($ai_db_options); } } ai_load_options (); if (!is_array ($ai_db_options)) { $ai_db_options = array (); define ('AI_SETTINGS_ERROR', true); } $extract_ok = ai_load_extract (false); $ai_custom_hooks = array (); for ($hook = 1; $hook <= 20; $hook ++) { $name = get_hook_name ($hook); $action = get_hook_action ($hook); if (get_hook_enabled ($hook) && $name != '' && $action != '') { $ai_custom_hooks [] = array ('index' => $hook, 'name' => $name, 'action' => $action, 'priority' => get_hook_priority ($hook)); } } $features_in_extract = $extract_ok && isset ($ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES]); if (isset ($ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_USED_BLOCKS]) && is_string ($ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_USED_BLOCKS]) && strlen ($ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_USED_BLOCKS]) != 0) { $used_blocks = @unserialize ($ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_USED_BLOCKS]); } else $used_blocks = false; $obj = new ai_Block (0); // translators: block name (block with default settings) $obj->wp_options [AI_OPTION_BLOCK_NAME] = _x('Default', 'Block name', 'ad-inserter'); $block_object [0] = $obj; for ($block = 1; $block <= 96; $block ++) { $obj = new ai_Block ($block); $obj->load_options ($block); $block_object [$block] = $obj; if (!$features_in_extract && (!is_array ($used_blocks) || in_array ($block, $used_blocks))) $obj->extract_features (); } $adH = new ai_AdH(); $adF = new ai_AdF(); $adH->load_options (AI_HEADER_OPTION_NAME); $adF->load_options (AI_FOOTER_OPTION_NAME); $block_object [AI_HEADER_OPTION_NAME] = $adH; $block_object [AI_FOOTER_OPTION_NAME] = $adF; if ($features_in_extract) { $ai_wp_data [AI_MOBILE_DETECT_JS] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_MOBILE_DETECT_JS]; $ai_wp_data [AI_SERVER_SIDE_DETECTION] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_SERVER_SIDE_DETECTION]; $ai_wp_data [AI_CLIENT_SIDE_DETECTION] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_CLIENT_SIDE_DETECTION]; $ai_wp_data [AI_CLIENT_SIDE_INSERTION] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_CLIENT_SIDE_INSERTION]; $ai_wp_data [AI_STICK_TO_THE_CONTENT] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_STICK_TO_THE_CONTENT]; $ai_wp_data [AI_TRACKING] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_TRACKING]; $ai_wp_data [AI_CLOSE_BUTTONS] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_CLOSE_BUTTONS]; $ai_wp_data [AI_PARALLAX] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_PARALLAX]; $ai_wp_data [AI_CHECK_BLOCK] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_CHECK_BLOCK]; $ai_wp_data [AI_IFRAMES] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_IFRAMES]; $ai_wp_data [AI_ANIMATION] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_ANIMATION]; $ai_wp_data [AI_LAZY_LOADING] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_LAZY_LOADING]; $ai_wp_data [AI_GEOLOCATION] = $ai_db_options [AI_OPTION_EXTRACT][AI_EXTRACT_FEATURES][AI_GEOLOCATION]; } else { if ($adH->get_enable_manual () && $adH->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true; if ($adF->get_enable_manual () && $adF->get_detection_server_side()) $ai_wp_data [AI_SERVER_SIDE_DETECTION] = true; } if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { $adA = new ai_AdA(); $adA->load_options (AI_ADB_MESSAGE_OPTION_NAME); $block_object [AI_ADB_MESSAGE_OPTION_NAME] = $adA; $ai_wp_data [AI_ADB_DETECTION] = $adA->get_enable_manual (); } if (($install_timestamp = get_option (AI_INSTALL_NAME)) !== false) { $install = new DateTime (date('Y-m-d H:i:s', $install_timestamp)); $now = new DateTime (date('Y-m-d H:i:s', time())); if (method_exists ($install, 'diff')) { $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE] = $install->diff ($now); $ai_wp_data [AI_DAYS_SINCE_INSTAL] = $ai_wp_data [AI_INSTALL_TIME_DIFFERENCE]->days; } } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("LOAD SETTINGS END"); } function ai_compare_viewport ($a, $b) { if ($a ['width'] == $b ['width']) return 0; return ($a ['width'] > $b ['width']) ? - 1 : 1; } function generate_viewport_css () { $viewports = array (); for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = get_viewport_name ($viewport); $viewport_width = get_viewport_width ($viewport); if ($viewport_name != '') { $viewports []= array ('index' => $viewport, 'name' => $viewport_name, 'width' => $viewport_width); } } usort ($viewports, 'ai_compare_viewport'); $viewport_styles = ''; $number_of_viewports = count ($viewports); if ($number_of_viewports != 0) { $viewport_styles = ".ai-viewports {--ai: 1;}\n"; // Mark unprocessed block for viewports, also dummy style to prevent not loading viewport rules when optimizers join them with other (broken) styles on the page foreach ($viewports as $index => $viewport) { if ($index == 0) { foreach (array_reverse ($viewports) as $index2 => $viewport2) { if ($index2 != $number_of_viewports - 1) { $viewport_styles .= ".ai-viewport-" . $viewport2 ['index'] . " { display: none !important;}\n"; } } $viewport_styles .= ".ai-viewport-".$viewports [0]['index']." { display: inherit !important;}\n"; $viewport_styles .= ".ai-viewport-0 { display: none !important;}\n"; } else { $viewport_styles .= "@media "; if ($viewport ['width'] != 0) $viewport_styles .= "(min-width: " . $viewport ['width'] . "px) and "; $viewport_styles .= "(max-width: " . ($viewports [$index - 1]['width'] - 1) . "px) {\n"; foreach ($viewports as $index2 => $viewport2) { if ($index2 == 0) $viewport_styles .= ".ai-viewport-" . $viewport2 ['index'] . " { display: none !important;}\n"; elseif ($index == $index2) $viewport_styles .= ".ai-viewport-" . $viewport2 ['index'] . " { display: inherit !important;}\n"; } $viewport_styles .= "}\n"; } } } return ($viewport_styles); } function get_main_alignment_css ($alt_styles_text) { if (strpos ($alt_styles_text, "||") !== false) { $styles = explode ("||", $alt_styles_text); return $styles [0]; } return $alt_styles_text; } function ai_change_css ($css, $property, $value) { $styles = explode (';', $css); $replaced = false; foreach ($styles as $index => $style) { if (strpos (trim ($style), $property) === 0) { $styles [$index] = preg_replace ('/\:\s*(.+)/', ': ' . $value, $styles [$index]); $replaced = true; break; } } $new_style = implode (';', $styles); if (!$replaced) { $new_style = rtrim ($new_style, '; '); return $new_style . '; ' . $property . ': ' . $value . ';'; } return $new_style; } function generate_alignment_css () { global $ai_db_options_extract, $block_object; $block_class_name = get_block_class_name (true) . '-'; $styles = array (); $styles [AI_ALIGNMENT_DEFAULT] = array (AI_TEXT_ENG_DEFAULT, get_main_alignment_css (AI_ALIGNMENT_CSS_DEFAULT)); $styles [AI_ALIGNMENT_LEFT] = array (AI_TEXT_ENG_LEFT, get_main_alignment_css (AI_ALIGNMENT_CSS_LEFT)); $styles [AI_ALIGNMENT_RIGHT] = array (AI_TEXT_ENG_RIGHT, get_main_alignment_css (AI_ALIGNMENT_CSS_RIGHT)); $styles [AI_ALIGNMENT_CENTER] = array (AI_TEXT_ENG_CENTER, get_main_alignment_css (AI_ALIGNMENT_CSS_CENTER)); $styles [AI_ALIGNMENT_FLOAT_LEFT] = array (AI_TEXT_ENG_FLOAT_LEFT, get_main_alignment_css (AI_ALIGNMENT_CSS_FLOAT_LEFT)); $styles [AI_ALIGNMENT_FLOAT_RIGHT] = array (AI_TEXT_ENG_FLOAT_RIGHT, get_main_alignment_css (AI_ALIGNMENT_CSS_FLOAT_RIGHT)); if (function_exists ('generate_alignment_css_2')) $styles = array_replace ($styles, generate_alignment_css_2 ()); $alignment_css = ''; $alignments = array (); $used_blocks = unserialize ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]); foreach ($used_blocks as $used_block) { $obj = $block_object [$used_block]; $alignment_type = $obj->get_alignment_type (); switch ($alignment_type) { case AI_ALIGNMENT_DEFAULT: case AI_ALIGNMENT_LEFT: case AI_ALIGNMENT_RIGHT: case AI_ALIGNMENT_CENTER: case AI_ALIGNMENT_FLOAT_LEFT: case AI_ALIGNMENT_FLOAT_RIGHT: // case AI_ALIGNMENT_STICKY_LEFT: // case AI_ALIGNMENT_STICKY_RIGHT: // case AI_ALIGNMENT_STICKY_TOP: // case AI_ALIGNMENT_STICKY_BOTTOM: $alignment_name = strtolower ($styles [$alignment_type][0]); if (!in_array ($alignment_name, $alignments)) { $alignments []= $alignment_name; $alignment_css .= '.' . $block_class_name . str_replace (' ', '-', $alignment_name) .' {' . $styles [$alignment_type][1] . "}\n"; } break; case AI_ALIGNMENT_STICKY: $sticky_css = $obj->alignment_style ($alignment_type); $alignment_name = strtolower (md5 ($sticky_css)); if (!in_array ($alignment_name, $alignments)) { $alignments []= $alignment_name; // $alignment_css .= '.' . $block_class_name . str_replace (' ', '-', $alignment_name) .' {' . $sticky_css . "}\n"; $alignment_css .= '.' . $block_class_name . $alignment_name .' {' . $sticky_css . "}\n"; } break; case AI_ALIGNMENT_CUSTOM_CSS: $custom_css = $obj->get_custom_css (); $alignment_name = strtolower (md5 ($custom_css)); if (!in_array ($alignment_name, $alignments)) { $alignments []= $alignment_name; // $alignment_css .= '.' . $block_class_name . str_replace (' ', '-', $alignment_name) .' {' . str_replace (''', "'", $custom_css) . "}\n"; $alignment_css .= '.' . $block_class_name . $alignment_name .' {' . str_replace (''', "'", $custom_css) . "}\n"; } break; } if ($alignment_type != AI_ALIGNMENT_CUSTOM_CSS) { $size_css = $obj->size_background_style (); // $size_name = strtolower (md5 ($size_css)); $size_name = ai_css_to_name ($size_css); if (!in_array ($size_name, $alignments)) { $alignments []= $size_name; $alignment_css .= '.' . $block_class_name . $size_name .' {' . str_replace (''', "'", $size_css) . "}\n"; } } } return $alignment_css; } function generate_debug_css_base () { ?> .ai-debug-block {padding: 0; margin: 0;} .ai-debug-tags {font-weight: bold; color: white; padding: 2px;} .ai-debug-positions {clear: both; text-align: center; padding: 10px 0; font-family: arial; font-weight: bold; line-height: 20px; border: 1px solid blue; color: blue; background: #eef;} .ai-debug-positions.ai-images {border: 1px solid #444; color: #444; background: #fff9ab;} .ai-debug-page-type {text-align: center; padding: 10px 0; font-family: arial; font-weight: bold; line-height: 20px; border: 1px solid #000; color: #000; background: #fff;} .ai-debug-status {clear: both; text-align: center; padding: 10px 0; font-family: arial; font-weight: bold; line-height: 20px; border: 1px solid #eee; color: #666; background: #eee;} .ai-debug-status.status-ok, .ai-debug-status.adb-off {border: 1px solid green; color: green; background: #efe;} .ai-debug-status.status-error, .ai-debug-status.adb-on {border: 1px solid red; color: red; background: #fee;} .ai-debug-adb {opacity: 0.85; cursor: pointer;} .ai-debug-widget {margin: 0; padding: 0 5px; font-size: 10px; white-space: pre; overflow-x: auto; overflow-y: hidden;} a.ai-debug-left {float: left; cursor: default; font-size: 10px; text-decoration: none; color: transparent; padding: 0px 10px 0 0; border: 0; box-shadow: none;} a.ai-debug-right {float: right; cursor: default; font-size: 10px; text-decoration: none; color: #88f; padding: 0px 10px 0 0; border: 0; box-shadow: none;} a.ai-debug-center {text-align: center; cursor: default; font-size: 10px; text-decoration: none; color: white; padding: 0px 10px 0 0; border: 0; box-shadow: none;} .ai-debug-invisible {display: none;} .ai-debug-content-hook-positions {color: blue;} .ai-debug-removed-html-tags {color: red;} .ai-debug-rnrn {background: #0ff; color: #000;} .ai-debug-p {background: #0a0;} .ai-debug-div {background: #46f;} .ai-debug-h {background: #d4e;} .ai-debug-img {background: #ee0; color: #000;} .ai-debug-pre {background: #222;} .ai-debug-span {background: #cff; color: #000;} .ai-debug-special {background: #fb0; color: #000;} .ai-debug-ad-overlay {position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #8f8; opacity: 0.6; z-index: 999999990} .ai-debug-block ins.adsbygoogle[data-ad-status="unfilled"] .ai-debug-ad-overlay {display: none;} .ai-debug-block ins.adsbygoogle[data-ad-status="unfilled"] {background: url(https://via.placeholder.com/800x800/aaffaa/000000.png?text=NO%20AD%20SERVED); background-size: cover; background-repeat: no-repeat; background-position: center;} .ai-auto-ads {background-color: #84f;} .ai-no-slot {background-color: #48f;} .ai-debug-ad-info {position: absolute; top: 0; left: 0; overflow: hidden; width: auto; height: auto; font-family: arial; font-size: 11px; line-height: 11px; text-align: left; z-index: 999999991;} .ai-info {display: inline-block; padding: 2px 4px;} .ai-info-1 {background: #000; color: #fff;} .ai-info-2 {background: #fff; color: #000;} .ai-debug-block {outline: 1px solid;} .ai-debug-bar {background: #666;} .ai-debug-block kbd kbd {font-weight: normal;} .ai-debug-code {margin: 0; padding: 0; border: 0; font-family: monospace, sans-serif; font-size: 12px; line-height: 13px; background: #fff; color: #000;} .ai-debug-code.ai-code-org {float: left; max-width: 47%;} .ai-debug-code.ai-code-inserted {float: right; max-width: 47%;} .ai-debug-block.ai-debug-default {border-color: #e00; outline-color: #e00;} .ai-debug-bar.ai-debug-default {background: #e00;} .ai-debug-bar.ai-debug-no-wrapping kbd {color: #ff0;} .ai-debug-block.ai-debug-viewport-invisible {border-color: #00f; outline-color: #00f;} .ai-debug-bar.ai-debug-viewport-invisible {background: #00f;} .ai-debug-block.ai-debug-amp {border-color: #0c0; outline-color: #0c0;} .ai-debug-bar.ai-debug-amp {background: #0c0;} .ai-debug-block.ai-debug-fallback {border-color: #a0f; outline-color: #a0f;} .ai-debug-bar.ai-debug-fallback {background: #a0f;} .ai-debug-block.ai-debug-script {border-color: #00bae6; outline-color: #00bae6; background: #eee;} .ai-debug-bar.ai-debug-script {background: #00bae6;} .ai-debug-block.ai-debug-cookie {border-color: #9be3ff; outline-color: #9be3ff; background: #eee;} .ai-debug-bar.ai-debug-cookie {background: #9be3ff;} .ai-debug-bar.ai-debug-cookie kbd {color: #000;} .ai-debug-block.ai-debug-filter {border-color: #9be3ff; outline-color: #9be3ff; background: #eee;} .ai-debug-bar.ai-debug-filter {background: #9be3ff;} .ai-debug-bar.ai-debug-filter kbd {color: #000;} .ai-debug-block.ai-debug-adb-status {border-color: #000; outline-color: #000;} .ai-debug-bar.ai-debug-adb-status {background: #000;} .ai-debug-block.ai-debug-adsense {border-color: #e0a; outline-color: #e0a;} .ai-debug-bar.ai-debug-adsense {background: #e0a;} .ai-debug-block.ai-debug-adsense.ai-adsense-auto-ads {position: absolute; top: -20px; width: 100%;} .ai-debug-block.ai-debug-ajax {border-color: #ffd600; outline-color: #ffd600;} .ai-debug-bar.ai-debug-ajax {background: #ffd600;} .ai-debug-bar.ai-debug-ajax kbd {color: #000;} .ai-debug-block.ai-debug-iframe {border-color: #ff9e38; outline-color: #ff9e38; line-height: 1px;} .ai-debug-bar.ai-debug-iframe {background: #ff9e38;} .ai-debug-bar.ai-debug-iframe kbd {color: #000;} .ai-debug-block.ai-debug-iframe .ai-attributes {line-height: initial;} .ai-debug-adb-status.on kbd {color: #f00;} .ai-debug-adb-status.off kbd {color: #0f0;} .ai-debug-block.ai-debug-lists {border-color: #00c5be; outline-color: #00c5be;} .ai-debug-bar.ai-debug-lists {background: #00c5be;} .ai-debug-block.ai-debug-scheduling {border-color: #00c5be; outline-color: #00c5be;} .ai-debug-bar.ai-debug-scheduling {background: #00c5be;} .ai-debug-adb-hidden {visibility: hidden; display: none;} .ai-debug-adb-center {text-align: center; font-weight: bold; margin: 0; padding: 4px 0;} .ai-debug-bar {margin: 0; padding: 1px 0 1px 5px; color: white; font-size: 12px; font-family: arial; font-weight: normal; line-height: 20px; text-align: center; overflow: hidden; word-break: break-word;} .ai-debug-bar .ai-debug-text-left {float: left; text-align: left; margin-top: 3px;} .ai-debug-bar .ai-debug-text-right {float: right; text-align: right; padding-right: 3px; margin-top: 3px;} .ai-debug-bar .ai-debug-text-center {text-align: center;} .ai-debug-lists .ai-debug-text-left, .ai-debug-viewport-invisible .ai-debug-text-left, .ai-debug-filter .ai-debug-text-left {min-width: 40%;} .ai-debug-lists .ai-debug-text-right, .ai-debug-viewport-invisible .ai-debug-text-right, .ai-debug-filter .ai-debug-text-right {min-width: 40%;} .ai-debug-message {text-align: center; font-weight: bold;} .ai-debug-bar kbd {margin: 0; padding: 0; color: #fff; font-size: inherit; font-family: arial; background-color: transparent; text-shadow: none; border: 0; box-shadow: none;} .ai-debug-visibility-hidden {visibility: hidden} .ai-debug-display-none {display: none} .ai-debug-block pre {direction: ltr; text-align: left; margin: 0; padding: 2px 5px 2px; line-height: 14px; background: #fff; color: #000; font-family: monospace; font-size: 12px;} pre.ai-w3tc-debug {font-size: 12px;} pre.ai-w3tc-debug.ai-w3tc-run {color: #00f;} pre.ai-processing-log {direction: ltr; text-align: left; padding: 10px; background: #eee; color: #000; font-family: monospace; font-size: 12px; line-height: 18px; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;} .ai-debug-bar.ai-debug-lists.ai-debug-iab-tcf-2 kbd.ai-debug-text-left, .ai-debug-bar.ai-debug-lists.ai-debug-iab-tcf-2 kbd.ai-debug-text-right { min-width: 10%; } #ai-selector-data { position: fixed; top: 0; z-index: 999999; background: #fff; width: 100%; border: 1px solid #000; } #ai-selector-data kbd { background-color: #fff; box-shadow: none; } #ai-selector-data table { width: 100%; margin: 5px; } #ai-selector-data td { padding: 5px 10px; vertical-align: middle; } #ai-selector-data td button { margin: 0 15px; } #ai-selector-data .ui-button-text-only .ui-button-text { padding: 3px 10px; } #ai-selector-data td.data-name { width: 100px; } #ai-selector-element, #ai-selector-path { user-select: text; } #ai-selector { width: 100%; display: inline-block; border-radius: 4px; font-size: 12px; font-family: Courier, 'Courier New', monospace; font-weight: bold; } .ai-highlighted { outline: 3px dashed #00f; background: rgba(50, 140, 220, 0.2); cursor: default; } .ai-selected { outline: 3px dashed #f00; background: rgba(255, 0, 0, 0.2); } .ai-highlighted.ai-selected { } .ai-html-element { color: #00a; cursor: pointer; } .ai-html-element:hover { color: #00f; } #ai-selector-data .ui-button.ui-corner-all.ui-widget { border: 1px solid #d3d3d3; background: #e6e6e6 url() 50% 50% repeat-x; color: rgb(85, 85, 85); }

    ' . sprintf (__('Invalid data received - %s settings not saved.', 'ad-inserter'), AD_INSERTER_NAME) . '

    '; } $settings_data_valid = false; } } if (isset ($_POST [AI_FORM_SAVE]) && $settings_data_valid) { check_admin_referer ('save_adinserter_settings'); $subpage = 'main'; $start = 1; $end = 16; $button_keys = array (AI_FORM_SAVE, AI_FORM_CLEAR_EXCEPTIONS); $settings_ok = true; $settings_errors = array (); if (isset ($_GET ['start']) && is_numeric ($start) && $start >= 1 && $start <= 96) $start = (int) $_GET ['start']; else $start = 1; $end = min ($start + 15, 96); $invalid_blocks = array (); $import_switch_name = AI_OPTION_IMPORT . WP_FORM_FIELD_POSTFIX . '0'; if (isset ($_POST [$import_switch_name]) && $_POST [$import_switch_name] == "1") { // Import Ad Inserter settings $settings = str_replace (array ("\\\""), array ("\""), $_POST ["export_settings_0"]); if (substr ($settings, 0, 4) === ':AI:') { $settings = substr ($settings, 4); } $ai_options = ai_unserialize (base64_decode ($settings)); if ($ai_options === false) { // Use saved settings $ai_options = wp_slash ($ai_db_options); $invalid_blocks []= 0; $settings_ok = false; $settings_errors []= 'Import plugin settings: unserialize failed'; } else $ai_options = wp_slash ($ai_options); } else { // Try to import individual settings $ai_options = array (); $default_block = new ai_Block (1); for ($block = 1; $block <= 96; $block ++) { if (isset ($ai_db_options [$block])) $saved_settings = wp_slash ($ai_db_options [$block]); else $saved_settings = array (); if ($block < $start || $block > $end) { // Block not on the settings page $ai_options [$block] = $saved_settings; continue; } $import_switch_name = AI_OPTION_IMPORT . WP_FORM_FIELD_POSTFIX . $block; $import_name_switch_name = AI_OPTION_IMPORT_NAME . WP_FORM_FIELD_POSTFIX . $block; if (isset ($_POST [$import_switch_name]) && $_POST [$import_switch_name] == "1") { // Try to import block settings $exported_settings = ai_unserialize (base64_decode (str_replace (array ("\\\""), array ("\""), $_POST ["export_settings_" . $block]))); if ($exported_settings !== false) { $exported_settings = wp_slash ($exported_settings); foreach (array_keys ($default_block->wp_options) as $key){ if ($key == AI_OPTION_BLOCK_NAME && isset ($_POST [$import_name_switch_name]) && $_POST [$import_name_switch_name] != "1") { $form_field_name = $key . WP_FORM_FIELD_POSTFIX . $block; if (isset ($_POST [$form_field_name])){ $ai_options [$block][$key] = filter_option ($key, $_POST [$form_field_name]); } } else { if (isset ($exported_settings [$key])) { $ai_options [$block][$key] = filter_option ($key, $exported_settings [$key], false); } } } } else { // Block import failed - use existing settings $ai_options [$block] = $saved_settings; $invalid_blocks []= $block; } } else { // Process block settings foreach (array_keys ($default_block->wp_options) as $key){ $form_field_name = $key . WP_FORM_FIELD_POSTFIX . $block; if (isset ($_POST [$form_field_name])){ $field_value = $_POST [$form_field_name]; // if ($key == AI_OPTION_CODE && strpos ($field_value, ':AI:') === 0) { if ($key == AI_OPTION_CODE && substr ($field_value, 0, 4) === ':AI:') { $code = base64_decode (substr ($field_value, 4), true); if ($code !== false) { $field_value = wp_slash ($code); } else { $field_value = ''; $settings_ok = false; $settings_errors []= "Block $block code: base64_decode failed"; } } $ai_options [$block][$key] = filter_option ($key, $field_value); } } if (!isset ($ai_options [$block]) || count ($ai_options [$block]) == 0) { if (isset ($_POST ['block-parameters-' . $block])) { $block_options = json_decode (base64_decode ($_POST ['block-parameters-' . $block])); if (is_array ($block_options)) { foreach ($button_keys as $button_key) { $button_index = array_search ($button_key, $block_options); if ($button_index !== false) { unset ($block_options [$button_index]); } } if (count ($block_options) != 0) { $settings_ok = false; $settings_errors []= "Missing settings for block $block: " . implode (', ', $block_options); } } else { $settings_ok = false; $settings_errors []= "Invalid parameter names for block $block"; } } else { $settings_ok = false; $settings_errors []= "Missing parameter names for block $block"; } } } delete_option (str_replace ("#", $block, AD_ADx_OPTIONS)); } $default_block_H = new ai_AdH(); $wp_options = array (); foreach(array_keys ($default_block_H->wp_options) as $key){ $form_field_name = $key . WP_FORM_FIELD_POSTFIX . AI_HEADER_OPTION_NAME; if(isset ($_POST [$form_field_name])){ $field_value = $_POST [$form_field_name]; if ($key == AI_OPTION_CODE && strpos ($field_value, ':AI:') === 0) { $code = base64_decode (substr ($field_value, 4), true); if ($code !== false) { $field_value = wp_slash ($code); } else { $field_value = ''; $settings_ok = false; $settings_errors []= "Header code: base64_decode failed"; } } $wp_options [$key] = filter_option_hf ($key, $field_value); } } $ai_options [AI_HEADER_OPTION_NAME] = $wp_options; $default_block_F = new ai_AdF(); $wp_options = array (); foreach(array_keys($default_block_F->wp_options) as $key){ $form_field_name = $key . WP_FORM_FIELD_POSTFIX . AI_FOOTER_OPTION_NAME; if(isset ($_POST [$form_field_name])){ $field_value = $_POST [$form_field_name]; if ($key == AI_OPTION_CODE && strpos ($field_value, ':AI:') === 0) { $code = base64_decode (substr ($field_value, 4), true); if ($code !== false) { $field_value = wp_slash ($code); } else { $field_value = ''; $settings_ok = false; $settings_errors []= "Footer code: base64_decode failed"; } } $wp_options [$key] = filter_option_hf ($key, $field_value); } } $ai_options [AI_FOOTER_OPTION_NAME] = $wp_options; if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { $default_block_A = new ai_AdA(); $wp_options = array (); foreach(array_keys($default_block_A->wp_options) as $key){ $form_field_name = $key . WP_FORM_FIELD_POSTFIX . AI_ADB_MESSAGE_OPTION_NAME; if(isset ($_POST [$form_field_name])){ $field_value = $_POST [$form_field_name]; if ($key == AI_OPTION_CODE && strpos ($field_value, ':AI:') === 0) { $code = base64_decode (substr ($field_value, 4), true); if ($code !== false) { $field_value = wp_slash ($code); } else { $field_value = ''; $settings_ok = false; $settings_errors []= "Ad blocking message code: base64_decode failed"; } } $wp_options [$key] = filter_option_hf ($key, $field_value); } } $ai_options [AI_ADB_MESSAGE_OPTION_NAME] = $wp_options; } $options = array (); $ai_options = apply_filters ('ai_save_settings', $ai_options); if (function_exists ('ai_filter_global_settings')) ai_filter_global_settings ($options); if (isset ($_POST ['syntax-highlighter-theme'])) $options ['SYNTAX_HIGHLIGHTER_THEME'] = filter_string ($_POST ['syntax-highlighter-theme']); if (isset ($_POST ['block-class-name'])) $options ['BLOCK_CLASS_NAME'] = filter_html_class ($_POST ['block-class-name']); if (isset ($_POST ['block-class'])) $options ['BLOCK_CLASS'] = filter_option ('BLOCK_CLASS', $_POST ['block-class']); if (isset ($_POST ['block-number-class'])) $options ['BLOCK_NUMBER_CLASS'] = filter_option ('BLOCK_NUMBER_CLASS', $_POST ['block-number-class']); if (isset ($_POST ['block-name-class'])) $options ['BLOCK_NAME_CLASS'] = filter_option ('BLOCK_NAME_CLASS', $_POST ['block-name-class']); if (isset ($_POST ['inline-styles'])) $options ['INLINE_STYLES'] = filter_option ('INLINE_STYLES', $_POST ['inline-styles']); if (isset ($_POST ['minimum-user-role'])) $options ['MINIMUM_USER_ROLE'] = filter_string ($_POST ['minimum-user-role']); if (isset ($_POST ['sticky-widget-mode'])) $options ['STICKY_WIDGET_MODE'] = filter_option ('STICKY_WIDGET_MODE', $_POST ['sticky-widget-mode']); if (isset ($_POST ['sticky-widget-margin'])) $options ['STICKY_WIDGET_MARGIN'] = filter_option ('STICKY_WIDGET_MARGIN', $_POST ['sticky-widget-margin']); if (isset ($_POST ['lazy-loading-offset'])) $options ['LAZY_LOADING_OFFSET'] = filter_option ('LAZY_LOADING_OFFSET', $_POST ['lazy-loading-offset']); if (isset ($_POST ['cfp'])) $options ['CLICK_FRAUD_PROTECTION'] = filter_option ('CLICK_FRAUD_PROTECTION', $_POST ['cfp']); if (isset ($_POST ['cfp-time'])) $options ['CLICK_FRAUD_PROTECTION_TIME'] = filter_option ('CLICK_FRAUD_PROTECTION_TIME', $_POST ['cfp-time']); if (isset ($_POST ['global-visitor-limit-cpt'])) $options ['GLOBAL_VISITOR_LIMIT_CPT'] = filter_option ('GLOBAL_VISITOR_LIMIT_CPT', $_POST ['global-visitor-limit-cpt']); if (isset ($_POST ['global-visitor-limit-time'])) $options ['GLOBAL_VISITOR_LIMIT_TIME'] = filter_option ('GLOBAL_VISITOR_LIMIT_TIME', $_POST ['global-visitor-limit-time']); if (isset ($_POST ['cfp-block-ip-address'])) $options ['CFP_BLOCK_IP_ADDRESS'] = filter_option ('CFP_BLOCK_IP_ADDRESS', $_POST ['cfp-block-ip-address']); if (isset ($_POST ['max-page-blocks'])) $options ['MAX_PAGE_BLOCKS'] = filter_option ('MAX_PAGE_BLOCKS', $_POST ['max-page-blocks']); if (isset ($_POST ['plugin_priority'])) $options ['PLUGIN_PRIORITY'] = filter_option ('PLUGIN_PRIORITY', $_POST ['plugin_priority']); if (isset ($_POST ['tab-setup-delay'])) $options ['TAB_SETUP_DELAY'] = filter_option ('TAB_SETUP_DELAY', $_POST ['tab-setup-delay']); if (isset ($_POST ['dynamic_blocks'])) $options ['DYNAMIC_BLOCKS'] = filter_option ('DYNAMIC_BLOCKS', $_POST ['dynamic_blocks']); if (isset ($_POST ['paragraph_counting_functions'])) $options ['PARAGRAPH_COUNTING_FUNCTIONS'] = filter_option ('PARAGRAPH_COUNTING_FUNCTIONS', $_POST ['paragraph_counting_functions']); if (isset ($_POST ['output-buffering'])) $options ['OUTPUT_BUFFERING'] = filter_option ('OUTPUT_BUFFERING', $_POST ['output-buffering']); if (isset ($_POST ['disable-caching-admin'])) $options ['DISABLE_CACHING'] = filter_option ('DISABLE_CACHING', $_POST ['disable-caching-admin']); if (isset ($_POST ['menu-for-link'])) $options ['MENU_FOR_LINK'] = filter_option ('MENU_FOR_LINK', $_POST ['menu-for-link']); if (isset ($_POST ['wait-for-jquery'])) $options ['WAIT_FOR_JQUERY'] = filter_option ('WAIT_FOR_JQUERY', $_POST ['wait-for-jquery']); if (isset ($_POST ['javascript-code'])) $options ['JAVASCRIPT_CODE_MODE'] = filter_option ('JAVASCRIPT_CODE_MODE', $_POST ['javascript-code']); if (isset ($_POST ['no-paragraph-counting-inside'])) $options ['NO_PARAGRAPH_COUNTING_INSIDE'] = filter_option ('NO_PARAGRAPH_COUNTING_INSIDE', $_POST ['no-paragraph-counting-inside']); if (isset ($_POST ['ad-label'])) $options ['AD_LABEL'] = filter_option ('AD_LABEL', $_POST ['ad-label']); if (isset ($_POST ['main-content-element'])) $options ['MAIN_CONTENT_ELEMENT'] = filter_option ('MAIN_CONTENT_ELEMENT', $_POST ['main-content-element']); if (isset ($_POST [AI_OPTION_ADB_DEVICES])) $options ['ADB_DEVICES'] = filter_option ('ADB_DEVICES', $_POST [AI_OPTION_ADB_DEVICES]); if (isset ($_POST [AI_OPTION_ADB_ACTION])) $options ['ADB_ACTION'] = filter_option ('ADB_ACTION', $_POST [AI_OPTION_ADB_ACTION]); if (isset ($_POST [AI_OPTION_ADB_NO_ACTION])) $options ['ADB_NO_ACTION'] = filter_option ('ADB_NO_ACTION', $_POST [AI_OPTION_ADB_NO_ACTION]); if (isset ($_POST [AI_OPTION_ADB_DELAY_ACTION])) $options ['ADB_DELAY_ACTION'] = filter_option ('ADB_DELAY_ACTION', $_POST [AI_OPTION_ADB_DELAY_ACTION]); if (isset ($_POST [AI_OPTION_ADB_NO_ACTION_PERIOD])) $options ['ADB_NO_ACTION_PERIOD'] = filter_option ('ADB_NO_ACTION_PERIOD', $_POST [AI_OPTION_ADB_NO_ACTION_PERIOD]); if (isset ($_POST [AI_OPTION_ADB_SELECTORS])) $options ['ADB_SELECTORS'] = filter_option ('ADB_SELECTORS', $_POST [AI_OPTION_ADB_SELECTORS]); if (isset ($_POST [AI_OPTION_ADB_REDIRECTION_PAGE])) $options ['ADB_REDIRECTION_PAGE'] = filter_option ('ADB_REDIRECTION_PAGE', $_POST [AI_OPTION_ADB_REDIRECTION_PAGE]); if (isset ($_POST [AI_OPTION_ADB_CUSTOM_REDIRECTION_URL])) $options ['ADB_CUSTOM_REDIRECTION_URL'] = filter_option ('ADB_CUSTOM_REDIRECTION_URL', $_POST [AI_OPTION_ADB_CUSTOM_REDIRECTION_URL]); if (isset ($_POST [AI_OPTION_ADB_MESSAGE_CSS])) $options ['ADB_MESSAGE_CSS'] = filter_option ('ADB_MESSAGE_CSS', $_POST [AI_OPTION_ADB_MESSAGE_CSS]); if (isset ($_POST [AI_OPTION_ADB_OVERLAY_CSS])) $options ['ADB_OVERLAY_CSS'] = filter_option ('ADB_OVERLAY_CSS', $_POST [AI_OPTION_ADB_OVERLAY_CSS]); if (isset ($_POST [AI_OPTION_ADB_UNDISMISSIBLE_MESSAGE])) $options ['ADB_UNDISMISSIBLE_MESSAGE'] = filter_option ('ADB_UNDISMISSIBLE_MESSAGE', $_POST [AI_OPTION_ADB_UNDISMISSIBLE_MESSAGE]); if (isset ($_POST [AI_OPTION_ADB_EXTERNAL_SCRIPTS])) $options ['ADB_EXTERNAL_SCRIPTS'] = filter_option ('ADB_EXTERNAL_SCRIPTS', $_POST [AI_OPTION_ADB_EXTERNAL_SCRIPTS]); if (isset ($_POST [AI_OPTION_ADB_NO_UNDISMISSIBLE_MESSAGE]))$options ['ADB_NO_UNDISMISSIBLE_MESSAGE'] = filter_option ('ADB_NO_UNDISMISSIBLE_MESSAGE', $_POST [AI_OPTION_ADB_NO_UNDISMISSIBLE_MESSAGE]); if (isset ($_POST ['force_admin_toolbar'])) $options ['FORCE_ADMIN_TOOLBAR'] = filter_option ('FORCE_ADMIN_TOOLBAR', $_POST ['force_admin_toolbar']); if (isset ($_POST ['admin_toolbar_debugging'])) $options ['ADMIN_TOOLBAR_DEBUGGING'] = filter_option ('ADMIN_TOOLBAR_DEBUGGING', $_POST ['admin_toolbar_debugging']); if (isset ($_POST ['admin_toolbar_mobile'])) $options ['ADMIN_TOOLBAR_MOBILE'] = filter_option ('ADMIN_TOOLBAR_MOBILE', $_POST ['admin_toolbar_mobile']); if (isset ($_POST ['remote_debugging'])) $options ['REMOTE_DEBUGGING'] = filter_option ('REMOTE_DEBUGGING', $_POST ['remote_debugging']); if (isset ($_POST ['disable_translation'])) $options ['DISABLE_TRANSLATION'] = filter_option ('DISABLE_TRANSLATION', $_POST ['disable_translation']); if (isset ($_POST ['backend_js_debugging'])) $options ['BACKEND_JS_DEBUGGING'] = filter_option ('BACKEND_JS_DEBUGGING', $_POST ['backend_js_debugging']); if (isset ($_POST ['frontend_js_debugging'])) $options ['FRONTEND_JS_DEBUGGING'] = filter_option ('FRONTEND_JS_DEBUGGING', $_POST ['frontend_js_debugging']); if (isset ($_POST ['disable-blocks'])) $options ['DISABLE_BLOCK_INSERTIONS'] = filter_option ('DISABLE_BLOCK_INSERTIONS', $_POST ['disable-blocks']); if (isset ($_POST ['disable-php-processing'])) $options ['DISABLE_PHP_PROCESSING'] = filter_option ('DISABLE_PHP_PROCESSING', $_POST ['disable-php-processing']); if (isset ($_POST ['disable-html-code'])) $options ['DISABLE_HTML_CODE'] = filter_option ('DISABLE_HTML_CODE', $_POST ['disable-html-code']); if (isset ($_POST ['disable-css-code'])) $options ['DISABLE_CSS_CODE'] = filter_option ('DISABLE_CSS_CODE', $_POST ['disable-css-code']); if (isset ($_POST ['disable-js-code'])) $options ['DISABLE_JS_CODE'] = filter_option ('DISABLE_JS_CODE', $_POST ['disable-js-code']); if (isset ($_POST ['disable-footer-code'])) $options ['DISABLE_FOOTER_CODE'] = filter_option ('DISABLE_FOOTER_CODE', $_POST ['disable-footer-code']); if (isset ($_POST ['disable-header-code'])) $options ['DISABLE_HEADER_CODE'] = filter_option ('DISABLE_HEADER_CODE', $_POST ['disable-header-code']); for ($viewport = 1; $viewport <= 6; $viewport ++) { if (isset ($_POST ['viewport-name-'.$viewport])) $options ['VIEWPORT_NAME_'.$viewport] = filter_string ($_POST ['viewport-name-'.$viewport]); if (isset ($_POST ['viewport-width-'.$viewport])) $options ['VIEWPORT_WIDTH_'.$viewport] = filter_option ('viewport_width', $_POST ['viewport-width-'.$viewport]); } for ($constant = 1; $constant <= 6; $constant ++) { if (isset ($_POST ['constant-name-'.$constant])) $options ['CONSTANT_NAME_'.$constant] = filter_string ($_POST ['constant-name-'.$constant]); if (isset ($_POST ['constant-value-'.$constant])) $options ['CONSTANT_VALUE_'.$constant] = filter_string ($_POST ['constant-value-'.$constant]); } for ($hook = 1; $hook <= 20; $hook ++) { if (isset ($_POST ['hook-enabled-'.$hook])) $options ['HOOK_ENABLED_'.$hook] = filter_option ('HOOK_ENABLED', $_POST ['hook-enabled-'.$hook]); if (isset ($_POST ['hook-name-'.$hook])) $options ['HOOK_NAME_'.$hook] = filter_string_tags ($_POST ['hook-name-'.$hook]); if (isset ($_POST ['hook-action-'.$hook])) $options ['HOOK_ACTION_'.$hook] = filter_string ($_POST ['hook-action-'.$hook]); if (isset ($_POST ['hook-priority-'.$hook])) $options ['HOOK_PRIORITY_'.$hook] = filter_option ('HOOK_PRIORITY', $_POST ['hook-priority-'.$hook]); } $ai_options [AI_OPTION_GLOBAL] = ai_check_plugin_options ($options); } if (!empty ($invalid_blocks)) { if ($invalid_blocks [0] == 0) { // translators: %s: Ad Inserter echo '

    '. sprintf (__('Error importing %s settings.', 'ad-inserter'), AD_INSERTER_NAME) . '

    '; } else echo '

    '. _n('Error importing settings for block', 'Error importing settings for blocks:', count ($invalid_blocks), 'ad-inserter') , ' ', implode (', ', $invalid_blocks) . '

    '; } if ($settings_ok) { // Multisite $multisite_options = array (); if (function_exists ('ai_filter_multisite_settings')) ai_filter_multisite_settings ($multisite_options); ai_check_multisite_options ($multisite_options); ai_save_options ($ai_options, $multisite_options); if (function_exists ('ai_load_globals')) ai_load_globals (); if (defined ('AI_PLUGIN_TRACKING') && AI_PLUGIN_TRACKING) { if (isset ($_POST ['plugin-usage-tracking'])) { global $ai_dst; if (isset ($ai_dst) && is_object ($ai_dst)) { $ai_dst->set_tracking ((bool) $_POST ['plugin-usage-tracking']); } } } echo '

    ' . __('Settings saved.', 'ad-inserter') . '

    '; } else { // translators: %s: Ad Inserter echo '

    ' . sprintf (__('Invalid data received - %s settings not saved.', 'ad-inserter'), AD_INSERTER_NAME) . '

    '; if (!empty ($settings_errors)) { foreach ($settings_errors as $settings_error) { echo '
    ', $settings_error, '
    '; } } echo '
    '; } } elseif (isset ($_POST [AI_FORM_CLEAR]) && $settings_data_valid) { check_admin_referer ('save_adinserter_settings'); if (function_exists ('ai_clear_settings_2')) { $remote_cleared = ai_clear_settings_2 (); } else $remote_cleared = false; if (!$remote_cleared) { ai_clear_settings (); } echo '

    ' . __('Settings cleared.', 'ad-inserter') . '

    '; } elseif (isset ($_POST [AI_FORM_CLEAR_EXCEPTIONS]) && $settings_data_valid) { check_admin_referer ('save_adinserter_settings'); if (ai_current_user_role_ok () && (!is_multisite() || is_main_site () || multisite_exceptions_enabled ())) { if (function_exists ('ai_clear_exceptions_2')) { $remote_cleared = ai_clear_exceptions_2 (); } else $remote_cleared = false; if (!$remote_cleared) { ai_clear_exceptions (); } } } elseif (isset ($_POST [AI_FORM_CLEAR_STATISTICS]) && is_numeric ($_POST [AI_FORM_CLEAR_STATISTICS]) && $settings_data_valid) { check_admin_referer ('save_adinserter_settings'); if (function_exists ('ai_clear_statistics_2')) { $remote_cleared = ai_clear_statistics_2 (); } else $remote_cleared = false; if (!$remote_cleared) { ai_clear_statistics (); } } generate_settings_form (); } function ai_adinserter ($block_parameter, $options, &$block) { global $block_object, $ad_inserter_globals, $ai_wp_data, $ai_last_check; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if ($block_parameter == "") return ""; $block_number = $block_parameter; if (!is_numeric ($block_parameter)) { $function_block_parameter = strtolower ($block_parameter); for ($counter = 1; $counter <= 96; $counter ++) { $obj = $block_object [$counter]; $ad_name = strtolower (trim ($obj->get_ad_name())); if ($function_block_parameter == $ad_name) { $block_number = $counter; break; } } } if (!is_numeric ($block_number)) return ""; $block = (int) $block_number; if ($block < 1 || $block > 96) return ""; $globals_name = AI_PHP_FUNCTION_CALL_COUNTER_NAME . $block; if (!isset ($ad_inserter_globals [$globals_name])) { $ad_inserter_globals [$globals_name] = 1; } else $ad_inserter_globals [$globals_name] ++; if ($debug_processing) ai_log ("PHP FUNCTION CALL adinserter ($block_parameter".($options == '' ? '' : (', \''.$options.'\''))."), block $block [" . $ad_inserter_globals [$globals_name] . ']'); $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_PHP_FUNCTION; $options_array = array (); if (trim ($options) != '') { $options_array = explode (",", str_replace (" ", "", $options)); if (in_array ("server-side", $options_array)) { $ai_wp_data [AI_DYNAMIC_BLOCKS] = AI_DYNAMIC_BLOCKS_SERVER_SIDE; } elseif (in_array ("client-side-show", $options_array)) { $ai_wp_data [AI_DYNAMIC_BLOCKS] = AI_DYNAMIC_BLOCKS_CLIENT_SIDE_SHOW; } elseif (in_array ("client-side-insert", $options_array)) { $ai_wp_data [AI_DYNAMIC_BLOCKS] = AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT; } elseif (in_array ("server-side-w3c", $options_array)) { $ai_wp_data [AI_DYNAMIC_BLOCKS] = AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC; } } $obj = $block_object [$block]; $obj->clear_code_cache (); $ai_last_check = AI_CHECK_ENABLED_PHP; if (!$obj->get_enable_php_call ()) return ""; if (!$obj->check_server_side_detection ()) return ""; /* Deprecated */ if (!$obj->check_page_types_lists_users (in_array ("page-type", $options_array) || in_array ("ignore-page-type", $options_array))) return ""; if (!$obj->check_filter ($ad_inserter_globals [$globals_name])) return ""; if (!$obj->check_number_of_words ()) return ""; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { // $meta_value = get_post_meta (get_the_ID (), '_adinserter_block_exceptions', true); $meta_value = ai_get_post_meta (); $selected_blocks = explode (",", $meta_value); if (!$obj->check_post_page_exceptions ($selected_blocks)) return ""; } $ai_last_check = AI_CHECK_DISABLED_MANUALLY; if (!$obj->check_disabled ()) return ""; $ai_last_check = AI_CHECK_INSERTION_NOT_DISABLED; if ($obj->get_disable_insertion () || get_disable_block_insertions ()) return ""; // Last check before counter check before insertion // $ai_last_check = AI_CHECK_CODE; // if ($obj->ai_getCode () == '') return ""; if ($obj->empty_code ()) return ""; $max_page_blocks_enabled = $obj->get_max_page_blocks_enabled (); if ($max_page_blocks_enabled) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if ($ai_wp_data [AI_PAGE_BLOCKS] >= get_max_page_blocks ()) return ""; } if (!$obj->check_filter_hook ($debug_processing)) return ""; // Last check before insertion if (!$obj->check_and_increment_block_counter ()) return ""; // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if ($obj->get_debug_disable_insertion ()) return ""; $code = $obj->get_code_for_serverside_insertion (); // Must be after get_code_for_serverside_insertion () $ai_last_check = AI_CHECK_INSERTED; unset ($ai_wp_data [AI_DYNAMIC_BLOCKS]); return $code; } function adinserter ($block = '', $options = '') { global $ai_last_check, $ai_wp_data, $ai_total_plugin_time; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if ($debug_processing) { $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } $ai_last_check = AI_CHECK_NONE; $block_number = 0; $code = ai_adinserter ($block, $options, $block_number); if ($debug_processing) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } if ($ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($block_number, $ai_last_check)); ai_log ("PHP FUNCTION CALL END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } return $code; } function ai_content_hook ($content = '') { global $block_object, $ad_inserter_globals, $ai_db_options_extract, $ai_wp_data, $ai_last_check, $ai_total_plugin_time, $special_element_tags; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_ADMIN) return $content; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; $globals_name = AI_CONTENT_COUNTER_NAME; if (!isset ($ad_inserter_globals [$globals_name])) { $ad_inserter_globals [$globals_name] = 1; } else $ad_inserter_globals [$globals_name] ++; if (!is_string ($content)) { if ($debug_processing) { ai_log ("CONTENT HOOK START [" . $ad_inserter_globals [$globals_name] . (in_the_loop () ? ', IN THE LOOP' : ', NOT IN THE LOOP') . '] - CONTENT NOT STRING - NO PROCESING'); ai_log (""); } return $content; } // TEMP CHECK if (get_plugin_priority () % 2 == 1) { if (strpos ($content, '\n"; if ($debug_processing) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("CONTENT HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } return $content; } // Process Before/After Excerpt postion function ai_excerpt_hook ($content = '') { global $ad_inserter_globals, $block_object, $ai_db_options_extract, $ai_wp_data, $ai_last_check, $ai_total_plugin_time; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_ADMIN) return; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; $globals_name = AI_EXCERPT_COUNTER_NAME; if (!isset ($ad_inserter_globals [$globals_name])) { $ad_inserter_globals [$globals_name] = 1; } else $ad_inserter_globals [$globals_name] ++; if ($debug_processing) { ai_log ("EXCERPT HOOK START [" . $ad_inserter_globals [$globals_name] . ']'); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_EXCERPT; $ai_last_check = AI_CHECK_NONE; $current_block = 0; if (isset ($ai_db_options_extract [EXCERPT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) foreach ($ai_db_options_extract [EXCERPT_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); if (!isset ($block_object [$block])) continue; $current_block = $block; $obj = $block_object [$block]; $obj->clear_code_cache (); if (!$obj->check_server_side_detection ()) continue; if (!$obj->check_page_types_lists_users ()) continue; if (!$obj->check_filter ($ad_inserter_globals [$globals_name])) continue; $ai_last_check = AI_CHECK_DISABLED_MANUALLY; if (!$obj->check_disabled ()) continue; // Deprecated if ($obj->display_disabled ($content)) continue; $ai_last_check = AI_CHECK_INSERTION_NOT_DISABLED; if ($obj->get_disable_insertion () || get_disable_block_insertions ()) continue; // Last check before counter check before insertion // $ai_last_check = AI_CHECK_CODE; // if ($obj->ai_getCode () == '') continue; if ($obj->empty_code ()) continue; $max_page_blocks_enabled = $obj->get_max_page_blocks_enabled (); if ($max_page_blocks_enabled) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if ($ai_wp_data [AI_PAGE_BLOCKS] >= get_max_page_blocks ()) continue; } if (!$obj->check_filter_hook ($debug_processing)) continue; // Last check before insertion if (!$obj->check_and_increment_block_counter ()) continue; // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$obj->get_debug_disable_insertion ()) { $automatic_insertion = $obj->get_automatic_insertion (); if ($automatic_insertion == AI_AUTOMATIC_INSERTION_BEFORE_EXCERPT) $content = $obj->get_code_for_serverside_insertion () . $content; else $content = $content . $obj->get_code_for_serverside_insertion (); $ai_last_check = AI_CHECK_INSERTED; } } if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) != 0) { $class = AI_DEBUG_POSITIONS_CLASS; $content = "
    " . ($ai_wp_data [AI_MBSTRING_LOADED] ? mb_strtoupper (AI_TEXT_BEFORE_EXCERPT) : strtoupper (AI_TEXT_BEFORE_EXCERPT)) . ' ' . $ad_inserter_globals [$globals_name]."
    ". $content . "
    " . ($ai_wp_data [AI_MBSTRING_LOADED] ? mb_strtoupper (AI_TEXT_AFTER_EXCERPT) : strtoupper (AI_TEXT_AFTER_EXCERPT)) . ' ' .$ad_inserter_globals [$globals_name]."
    "; // Remove word counts $content = preg_replace ("/\[\(\](.+?)\[\)\]/", "", $content); $content = preg_replace ("/\[\(\].*/", "", $content); // Color positions from the content hook // $content = preg_replace ("/((BEFORE|AFTER) (CONTENT|PARAGRAPH) ?[\d]*)/", " [$1] ", $content); $content = preg_replace ("/(" . ($ai_wp_data [AI_MBSTRING_LOADED] ? mb_strtoupper (AI_TEXT_BEFORE_CONTENT) : strtoupper (AI_TEXT_BEFORE_CONTENT)) . " ?[\d]*)/", " [$1] ", $content); $content = preg_replace ("/(" . ($ai_wp_data [AI_MBSTRING_LOADED] ? mb_strtoupper (AI_TEXT_AFTER_CONTENT) : strtoupper (AI_TEXT_AFTER_CONTENT)) . " ?[\d]*)/", " [$1] ", $content); $content = preg_replace ("/(" . ($ai_wp_data [AI_MBSTRING_LOADED] ? mb_strtoupper (AI_TEXT_BEFORE_PARAGRAPH) : strtoupper (AI_TEXT_BEFORE_PARAGRAPH)) . " ?[\d]*)/", " [$1] ", $content); $content = preg_replace ("/(" . ($ai_wp_data [AI_MBSTRING_LOADED] ? mb_strtoupper (AI_TEXT_AFTER_PARAGRAPH) : strtoupper (AI_TEXT_AFTER_PARAGRAPH)) . " ?[\d]*)/", " [$1] ", $content); } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_TAGS) != 0) { // Remove marked tags from the content hook $content = preg_replace ("/<(.+?)>/", "", $content); // Color text to mark removed HTML tags $content = str_replace ('[' . __('HTML TAGS REMOVED', 'ad-inserter') . ']', '[' . __('HTML TAGS REMOVED', 'ad-inserter') . ']', $content); } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0) { // Remove block labels from the content hook if (strpos ($content, '>[AI]<') === false) $content = preg_replace ("/\[AI\](.+?)\[\/AI\]/", "", $content); } if ($debug_processing) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("EXCERPT HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } return $content; } function ai_comments_array ($comments , $post_id ){ global $ai_wp_data; $thread_comments = get_option ('thread_comments'); $comment_counter = 0; foreach ($comments as $comment) { if (!$thread_comments || empty ($comment->comment_parent)) $comment_counter ++; } $ai_wp_data [AI_NUMBER_OF_COMMENTS] = $comment_counter; return $comments; } function ai_wp_list_comments_args ($args) { global $ai_wp_data; // print_r ($args); // $args['per_page'] = 3; // $args['page'] = 2; $ai_wp_data ['AI_COMMENTS_SAVED_CALLBACK'] = $args ['callback']; $args ['callback'] = 'ai_comment_callback'; $ai_wp_data ['AI_COMMENTS_SAVED_END_CALLBACK'] = $args ['end-callback']; $args ['end-callback'] = 'ai_comment_end_callback'; return $args; } // Process comments counter + Before Comments postion function ai_comment_callback ($comment, $args, $depth) { global $block_object, $ad_inserter_globals, $ai_db_options_extract, $ai_wp_data, $ai_last_check, $ai_total_plugin_time, $ai_walker; if ($depth == 1) { if (!isset ($ad_inserter_globals [AI_COMMENT_COUNTER_NAME])) { $ad_inserter_globals [AI_COMMENT_COUNTER_NAME] = 1; } else $ad_inserter_globals [AI_COMMENT_COUNTER_NAME] ++; } $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if ($debug_processing) { ai_log ('COMMENT START HOOK START [' . $ad_inserter_globals [AI_COMMENT_COUNTER_NAME] . ':'. $depth . ']'); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } if ($depth == 1 && $ad_inserter_globals [AI_COMMENT_COUNTER_NAME] == 1) { $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_BEFORE_COMMENTS; if ($args ['style'] == 'div') $tag = 'div'; else $tag = 'li'; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) != 0) { $class = AI_DEBUG_POSITIONS_CLASS; echo "<$tag>\n"; echo "
    " . __('BEFORE COMMENTS', 'ad-inserter') . '
    '; echo "\n"; } $ad_code = ""; $ai_last_check = AI_CHECK_NONE; $current_block = 0; if (isset ($ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) foreach ($ai_db_options_extract [BEFORE_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); if (!isset ($block_object [$block])) continue; $current_block = $block; $obj = $block_object [$block]; $obj->clear_code_cache (); if (!$obj->check_server_side_detection ()) continue; if (!$obj->check_page_types_lists_users ()) continue; // No filter check if (!$obj->check_number_of_words ()) continue; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { $meta_value = ai_get_post_meta (); $selected_blocks = explode (",", $meta_value); if (!$obj->check_post_page_exceptions ($selected_blocks)) continue; } $ai_last_check = AI_CHECK_DISABLED_MANUALLY; if (!$obj->check_disabled ()) continue; $ai_last_check = AI_CHECK_INSERTION_NOT_DISABLED; if ($obj->get_disable_insertion () || get_disable_block_insertions ()) continue; // Last check before counter check before insertion // $ai_last_check = AI_CHECK_CODE; // if ($obj->ai_getCode () == '') continue; if ($obj->empty_code ()) continue; $max_page_blocks_enabled = $obj->get_max_page_blocks_enabled (); if ($max_page_blocks_enabled) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if ($ai_wp_data [AI_PAGE_BLOCKS] >= get_max_page_blocks ()) continue; } if (!$obj->check_filter_hook ($debug_processing)) continue; // Last check before insertion if (!$obj->check_and_increment_block_counter ()) continue; // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$obj->get_debug_disable_insertion ()) { $ad_code .= $obj->get_code_for_serverside_insertion (); $ai_last_check = AI_CHECK_INSERTED; } } if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); if ($ad_code != '') { echo "<$tag>\n"; echo $ad_code; echo "\n"; } } if ($debug_processing) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("COMMENT START HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } if (!empty ($ai_wp_data ['AI_COMMENTS_SAVED_CALLBACK'])) { echo call_user_func ($ai_wp_data ['AI_COMMENTS_SAVED_CALLBACK'], $comment, $args, $depth ); } else { $ai_walker->comment_callback ($comment, $args, $depth); } } // Process Between Comments postion function ai_comment_end_callback ($comment, $args, $depth) { global $block_object, $ad_inserter_globals, $ai_db_options_extract, $ai_wp_data, $ai_last_check, $ai_total_plugin_time; if ($args ['style'] == 'div') $tag = 'div'; else $tag = 'li'; if (!empty ($ai_wp_data ['AI_COMMENTS_SAVED_END_CALLBACK'])) { echo call_user_func ($ai_wp_data ['AI_COMMENTS_SAVED_END_CALLBACK'], $comment, $args, $depth); } else echo "\n"; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if ($debug_processing) { ai_log ('COMMENT END HOOK START [' . $ad_inserter_globals [AI_COMMENT_COUNTER_NAME] . ':'. ($depth + 1) . ']'); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } if ($depth == 0) { if (isset ($ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]]) && $ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] != 0 && !empty ($args ['per_page']) && !empty ($args ['page'])) { $number_of_comments_mod_per_page = $ai_wp_data [AI_NUMBER_OF_COMMENTS] % $args ['per_page']; if ($number_of_comments_mod_per_page != 0) { $last_page = (int) ($ai_wp_data [AI_NUMBER_OF_COMMENTS] / $args ['per_page']) + 1; $last_comment_number = $args ['page'] == $last_page ? $number_of_comments_mod_per_page : $args ['per_page']; } else $last_comment_number = $args ['per_page']; } else $last_comment_number = $ai_wp_data [AI_NUMBER_OF_COMMENTS]; if ($ad_inserter_globals [AI_COMMENT_COUNTER_NAME] == $last_comment_number) { $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_AFTER_COMMENTS; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) != 0) { $class = AI_DEBUG_POSITIONS_CLASS; echo "<$tag>\n"; echo "
    " . __('AFTER COMMENTS', 'ad-inserter') . '
    '; echo "\n"; } $ad_code = ""; $ai_last_check = AI_CHECK_NONE; $current_block = 0; if (isset ($ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) foreach ($ai_db_options_extract [AFTER_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); if (!isset ($block_object [$block])) continue; $current_block = $block; $obj = $block_object [$block]; $obj->clear_code_cache (); if (!$obj->check_server_side_detection ()) continue; if (!$obj->check_page_types_lists_users ()) continue; // No filter check if (!$obj->check_number_of_words ()) continue; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { $meta_value = ai_get_post_meta (); $selected_blocks = explode (",", $meta_value); if (!$obj->check_post_page_exceptions ($selected_blocks)) continue; } $ai_last_check = AI_CHECK_DISABLED_MANUALLY; if (!$obj->check_disabled ()) continue; $ai_last_check = AI_CHECK_INSERTION_NOT_DISABLED; if ($obj->get_disable_insertion () || get_disable_block_insertions ()) continue; // Last check before counter check before insertion // $ai_last_check = AI_CHECK_CODE; // if ($obj->ai_getCode () == '') continue; if ($obj->empty_code ()) continue; $max_page_blocks_enabled = $obj->get_max_page_blocks_enabled (); if ($max_page_blocks_enabled) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if ($ai_wp_data [AI_PAGE_BLOCKS] >= get_max_page_blocks ()) continue; } if (!$obj->check_filter_hook ($debug_processing)) continue; // Last check before insertion if (!$obj->check_and_increment_block_counter ()) continue; // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$obj->get_debug_disable_insertion ()) { $ad_code .= $obj->get_code_for_serverside_insertion (); $ai_last_check = AI_CHECK_INSERTED; } } if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); if ($ad_code != '') { echo "<$tag>\n"; echo $ad_code; echo "\n"; } } else { $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_BETWEEN_COMMENTS; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) != 0) { $class = AI_DEBUG_POSITIONS_CLASS; echo "<$tag>\n"; echo "
    " . __('BETWEEN COMMENTS', 'ad-inserter') . ' ' . $ad_inserter_globals [AI_COMMENT_COUNTER_NAME]."
    "; echo "\n"; } $ad_code = ""; $ai_last_check = AI_CHECK_NONE; $current_block = 0; if (isset ($ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) foreach ($ai_db_options_extract [BETWEEN_COMMENTS_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); if (!isset ($block_object [$block])) continue; $current_block = $block; $obj = $block_object [$block]; $obj->clear_code_cache (); if (!$obj->check_server_side_detection ()) continue; if (!$obj->check_page_types_lists_users ()) continue; if (!$obj->check_filter ($ad_inserter_globals [AI_COMMENT_COUNTER_NAME])) continue; if (!$obj->check_number_of_words ()) continue; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { $meta_value = ai_get_post_meta (); $selected_blocks = explode (",", $meta_value); if (!$obj->check_post_page_exceptions ($selected_blocks)) continue; } $ai_last_check = AI_CHECK_DISABLED_MANUALLY; if (!$obj->check_disabled ()) continue; $ai_last_check = AI_CHECK_INSERTION_NOT_DISABLED; if ($obj->get_disable_insertion () || get_disable_block_insertions ()) continue; // Last check before counter check before insertion // $ai_last_check = AI_CHECK_CODE; // if ($obj->ai_getCode () == '') continue; if ($obj->empty_code ()) continue; $max_page_blocks_enabled = $obj->get_max_page_blocks_enabled (); if ($max_page_blocks_enabled) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if ($ai_wp_data [AI_PAGE_BLOCKS] >= get_max_page_blocks ()) continue; } if (!$obj->check_filter_hook ($debug_processing)) continue; // Last check before insertion if (!$obj->check_and_increment_block_counter ()) continue; // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$obj->get_debug_disable_insertion ()) { $ad_code .= $obj->get_code_for_serverside_insertion (); $ai_last_check = AI_CHECK_INSERTED; } } if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); if ($ad_code != '') { echo "<$tag>\n"; echo $ad_code; echo "\n"; } } } if ($debug_processing) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("COMMENT END HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } function ai_custom_hook ($action, $insertion_type, $name, $translated_name = '', $hook_parameter = null, $hook_check = null) { global $block_object, $ad_inserter_globals, $ai_db_options_extract, $ai_wp_data, $ai_last_check, $ai_total_plugin_time; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_ADMIN) return; if (is_admin()) return; if ($insertion_type < AI_AUTOMATIC_INSERTION_CUSTOM_HOOK) { $globals_name = 'AI_' . strtoupper ($action) .'_COUNTER'; $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_NONE; } else { $globals_name = 'AI_' . strtoupper ($action) . '_' . $insertion_type . '_COUNTER'; $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_CUSTOM_HOOK + $insertion_type - AI_AUTOMATIC_INSERTION_CUSTOM_HOOK; } if (isset ($hook_check) && $insertion_type < AI_AUTOMATIC_INSERTION_CUSTOM_HOOK) { if (!call_user_func ($hook_check, $hook_parameter, $action)) return; } if ($debug_processing) { $hook_name = $ai_wp_data [AI_MBSTRING_LOADED] ? mb_strtoupper ($name) : strtoupper ($name); ai_log (str_replace (array ('<', '>'), array ('<', '>'), $hook_name) . " HOOK START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } if (!isset ($ad_inserter_globals [$globals_name])) { $ad_inserter_globals [$globals_name] = 1; } else $ad_inserter_globals [$globals_name] ++; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_POSITIONS) != 0) { $counter = $ad_inserter_globals [$globals_name]; if ($counter == 1) $counter = ''; $class = AI_DEBUG_POSITIONS_CLASS; if ($translated_name == '') $translated_name = $name; $translated_hook_name = $ai_wp_data [AI_MBSTRING_LOADED] ? mb_strtoupper ($translated_name) : strtoupper ($translated_name); echo "
    ".$translated_hook_name." ".$counter."
    "; } if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { // $meta_value = get_post_meta (get_the_ID (), '_adinserter_block_exceptions', true); $meta_value = ai_get_post_meta (); $selected_blocks = explode (",", $meta_value); } else $selected_blocks = array (); $ad_code = ""; $ai_last_check = AI_CHECK_NONE; $current_block = 0; if (isset ($ai_db_options_extract [$action . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]])) foreach ($ai_db_options_extract [$action . CUSTOM_HOOK_BLOCKS][$ai_wp_data [AI_WP_PAGE_TYPE]] as $block) { if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); $ai_last_check = AI_CHECK_NONE; if (!isset ($block_object [$block])) continue; $current_block = $block; $obj = $block_object [$block]; if ($insertion_type >= AI_AUTOMATIC_INSERTION_CUSTOM_HOOK) { if ($obj->get_automatic_insertion () != $insertion_type) continue; } if (!in_the_loop () && $obj->get_only_in_the_loop ()) continue; $obj->clear_code_cache (); // Action can be called as insertion Between posts or as custom hook - uses the same $ai_db_options_extract index if ($action == 'the_post' && $insertion_type != $obj->get_automatic_insertion ()) continue; if (!$obj->check_server_side_detection ()) continue; if (!$obj->check_page_types_lists_users ()) continue; if (!$obj->check_post_page_exceptions ($selected_blocks)) continue; if (!$obj->check_filter ($ad_inserter_globals [$globals_name])) continue; if (!$obj->check_number_of_words ()) continue; $ai_last_check = AI_CHECK_DISABLED_MANUALLY; if (!$obj->check_disabled ()) continue; $ai_last_check = AI_CHECK_INSERTION_NOT_DISABLED; if ($obj->get_disable_insertion () || get_disable_block_insertions ()) continue; // Last check before counter check before insertion if ($obj->empty_code ()) continue; $max_page_blocks_enabled = $obj->get_max_page_blocks_enabled (); if ($max_page_blocks_enabled) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if ($ai_wp_data [AI_PAGE_BLOCKS] >= get_max_page_blocks ()) continue; } if (!$obj->check_filter_hook ($debug_processing)) continue; // Last check before insertion if (!$obj->check_and_increment_block_counter ()) continue; // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$obj->get_debug_disable_insertion ()) { $block_code = $obj->get_code_for_serverside_insertion (); if ($action == 'wp_head') { // Replace div tag in the head with meta tag $block_code = preg_replace ("#
    ", $block_code); } $ad_code .= $block_code; $ai_last_check = AI_CHECK_INSERTED; } } if ($debug_processing && $ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($current_block, $ai_last_check)); echo $ad_code; if ($debug_processing) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log (str_replace (array ('<', '>'), array ('<', '>'), $hook_name) . " HOOK END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } function ai_pre_do_shortcode_tag ($return, $tag, $attr, $m) { global $ai_expand_only_rotate_count_check, $ai_wp_data; // Array //( // [0] => [ADINSERTER ROTATE='1'] // [1] => // [2] => ADINSERTER // [3] => ROTATE='1' // [4] => // [5] => // [6] => if ($ai_expand_only_rotate_count_check) { if (strtolower ($tag) == 'adinserter') { // Expand only ROTATE / COUNT / CHECK if (isset ($attr ['rotate']) || in_array ('ROTATE', $attr) || in_array ('rotate', $attr)) { return false; } elseif (isset ($attr ['count']) || in_array ('COUNT', $attr) || in_array ('count', $attr)) { return false; } elseif (isset ($attr ['check']) || in_array ('CHECK', $attr) || in_array ('check', $attr)) { return false; } else return $m [0]; } else return $m [0]; } return $return; } function ai_process_shortcode (&$block, $atts) { global $block_object, $ai_last_check, $ai_wp_data, $ad_inserter_globals; if ($atts == '') return ''; $parameters = shortcode_atts (array ( "block" => "", "code" => "", "name" => "", "group" => "", "ignore" => "", "disable" => "", "index" => "", "check" => "", "viewport" => "", "fallback" => "", "adb" => "", "tracking" => "", "css" => "", "text" => "", "selectors" => "", "amp" => "", "head" => "", "rotate" => "", "count" => "", "counter" => "", "http" => "", "custom-field" => "", "random" => "", "data" => "", "share" => "", "time" => "", "category" => "", "categories" => "", "tag" => "", "tags" => "", "taxonomy" => "", "taxonomies" => "", "id" => "", "ids" => "", "url" => "", "urls" => "", "url-parameter" => "", "url-parameters" => "", "cookie" => "", "cookies" => "", "referrer" => "", "referrers" => "", "client" => "", "clients" => "", "scheduling" => "", "ip-address" => "", "ip-addresses" => "", "country" => "", "countries" => "", ), $atts); $output = ""; if (function_exists ('ai_shortcode')) { $output = ai_shortcode ($parameters); if ($output != '') return $output; } if (($adb = trim ($parameters ['adb'])) != '') { // message html // message css // overlay css // undismissible // redirection page // redirection url switch (strtolower ($adb)) { case 'message': $ai_wp_data [AI_ADB_SHORTCODE_ACTION] = AI_ADB_ACTION_MESSAGE; break; case 'redirection': $ai_wp_data [AI_ADB_SHORTCODE_ACTION] = AI_ADB_ACTION_REDIRECTION; break; case 'no-action': $ai_wp_data [AI_ADB_SHORTCODE_ACTION] = AI_ADB_ACTION_NONE; break; case 'disabled': $ai_wp_data [AI_ADB_SHORTCODE_DISABLED] = true; break; case 'external-scripts': if (!get_adb_external_scripts ()) { return ai_adb_external_scripts (); } } return ""; } if (($tracking = trim ($parameters ['tracking'])) != '') { switch (strtolower ($tracking)) { case 'disabled': $ai_wp_data [AI_TRACKING_SHORTCODE_DISABLED] = true; break; } return ""; } $block = - 1; $code_only = false; $name_only = false; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if ($parameters ['block'] == '' && $parameters ['code'] != '' && !($parameters ['viewport'] != '' || in_array ('VIEWPORT', $atts) || in_array ('viewport', $atts))) { $parameters ['block'] = $parameters ['code']; $code_only = true; } // To convert name attribute to block elseif ($parameters ['block'] == '' && $parameters ['name'] != '' && !($parameters ['rotate'] != '' || in_array ('ROTATE', $atts) || in_array ('rotate', $atts))) { $parameters ['block'] = $parameters ['name']; $name_only = true; } if (is_numeric ($parameters ['block']) && !$name_only) { $block = intval ($parameters ['block']); // } elseif ($parameters ['name'] != '' && !($parameters ['rotate'] != '' || in_array ('ROTATE', $atts) || in_array ('rotate', $atts))) { // $shortcode_name = strtolower ($parameters ['name']); } elseif ($parameters ['block'] != '' && !($parameters ['rotate'] != '' || in_array ('ROTATE', $atts) || in_array ('rotate', $atts))) { $shortcode_name = strtolower ($parameters ['block']); for ($counter = 1; $counter <= 96; $counter ++) { $obj = $block_object [$counter]; $ad_name = strtolower (trim ($obj->get_ad_name())); if ($shortcode_name == $ad_name && $obj->get_enable_manual ()) { $block = $counter; break; } } if ($block == - 1) { // Check if it is a reusable block with this name $query = new WP_Query ( array ( 'post_type' => 'wp_block', // reusable block 'title' => $parameters ['block'], 'post_status' => 'published', 'posts_per_page' => 1, ) ); if (!empty ($query->post)) { // Return reusable block return $query->post->post_content; } } } if ($block == - 1) { if (function_exists ('ai_check_separators')) { if ($parameters ['check'] != '' || in_array ('CHECK', $atts) || in_array ('check', $atts)) { if (!isset ($ai_wp_data [AI_SHORTCODES]['check'])) $ai_wp_data [AI_SHORTCODES]['check'] = array (); $ai_wp_data [AI_SHORTCODES]['check'] []= $parameters; return AD_CHECK_SEPARATOR; } } if ($parameters ['viewport'] != '' || in_array ('VIEWPORT', $atts) || in_array ('viewport', $atts)) { if (!isset ($ai_wp_data [AI_SHORTCODES]['viewport'])) $ai_wp_data [AI_SHORTCODES]['viewport'] = array (); $ai_wp_data [AI_SHORTCODES]['viewport'] []= $parameters; return '|viewport'. (count ($ai_wp_data [AI_SHORTCODES]['viewport']) - 1). '|'; } if ($parameters ['count'] != '' || in_array ('COUNT', $atts) || in_array ('count', $atts)) { if (!isset ($ai_wp_data [AI_SHORTCODES]['count'])) $ai_wp_data [AI_SHORTCODES]['count'] = array (); $ai_wp_data [AI_SHORTCODES]['count'] []= $parameters; // return AD_COUNT_SEPARATOR; return '|count'. (count ($ai_wp_data [AI_SHORTCODES]['count']) - 1). '|'; } if ($parameters ['rotate'] != '' || in_array ('ROTATE', $atts) || in_array ('rotate', $atts)) { if (!isset ($ai_wp_data [AI_SHORTCODES]['rotate'])) $ai_wp_data [AI_SHORTCODES]['rotate'] = array (); $ai_wp_data [AI_SHORTCODES]['rotate'] []= $parameters; // return AD_ROTATE_SEPARATOR; return '|rotate'. (count ($ai_wp_data [AI_SHORTCODES]['rotate']) - 1). '|'; } if ($parameters ['amp'] != '' || in_array ('AMP', $atts) || in_array ('amp', $atts)) { return AD_AMP_SEPARATOR; } if ($parameters ['head'] != '' || in_array ('HEAD', $atts) || in_array ('head', $atts)) { if (!isset ($ai_wp_data [AI_SHORTCODES]['head'])) $ai_wp_data [AI_SHORTCODES]['head'] = array (); $ai_wp_data [AI_SHORTCODES]['head'] []= $parameters; return AD_HEAD_SEPARATOR; } if ($parameters ['http'] != '' || in_array ('HTTP', $atts) || in_array ('http', $atts)) { return AD_HTTP_SEPARATOR; } if ($parameters ['fallback'] != '' || in_array ('FALLBACK', $atts) || in_array ('fallback', $atts)) { if (!isset ($ai_wp_data [AI_SHORTCODES]['fallback'])) $ai_wp_data [AI_SHORTCODES]['fallback'] = array (); $ai_wp_data [AI_SHORTCODES]['fallback'] []= $parameters; return AD_FALLBACK_SEPARATOR; } if ($parameters ['group'] != '' || in_array ('GROUP', $atts) || in_array ('group', $atts)) { // Prevent group activation if (isset ($ai_wp_data [AI_NO_GROUP_ACTIVATION]) && $ai_wp_data [AI_NO_GROUP_ACTIVATION]) { return ''; } if ($parameters ['group'] != '') { $parameters ['group'] = mb_strtolower ($parameters ['group']); if (strpos ($parameters ['group'], ',') !== false) { $group_names = explode (',', $parameters ['group']); foreach ($group_names as $index => $group_name) { $group_names [$index] = trim ($group_names [$index]); } } else $group_names = array (trim ($parameters ['group'])); } else $group_names = array (); return ''; } if ($parameters ['disable'] != '' || in_array ('DISABLE', $atts) || in_array ('disable', $atts)) { if (!isset ($ai_wp_data [AI_DISABLED_BLOCKS])) $ai_wp_data [AI_DISABLED_BLOCKS] = array (); $shortcode_disabled = explode (',', strtolower (str_replace (' ', '', $parameters ['disable']))); $ai_wp_data [AI_DISABLED_BLOCKS] = array_unique (array_merge ($ai_wp_data [AI_DISABLED_BLOCKS], $shortcode_disabled)); if ($debug_processing) { ai_log ('DISABLED BLOCKS: ' . implode (', ', $ai_wp_data [AI_DISABLED_BLOCKS])); } return ''; } if ($parameters ['custom-field'] != '') { $custom_field_name = trim ($parameters ['custom-field']); $default_value = null; if (trim ($parameters ['data']) != '') { $custom_field_value = trim ($parameters ['data']); if ($parameters ['data'][0] == ':') { $default_value = substr ($parameters ['data'], 1); } else { $ai_wp_data [AI_CUSTOM_FIELDS][$custom_field_name] = $custom_field_value; return ''; } } if (isset ($ai_wp_data [AI_CUSTOM_FIELDS][$custom_field_name])) { return $ai_wp_data [AI_CUSTOM_FIELDS][$custom_field_name]; } $post_meta = get_post_meta (get_the_ID (), $parameters ['custom-field']); if (is_array ($post_meta)) { $post_meta = implode (', ', $post_meta); } return empty ($post_meta) && $default_value !== null ? $default_value : $post_meta; } if ($parameters ['random'] != '' || isset ($atts ['RANDOM']) || isset ($atts ['random'])) { $random_value_limits = trim ($parameters ['random']); $random_value = ''; if ($random_value_limits == '') { // Not used $random_value = rand (); } else { if (strpos ($random_value_limits, ',') !== false) { $limits = explode (',', $random_value_limits); $random_value = rand ((int) $limits [0], (int) $limits [1]); } else $random_value = rand (0, (int) $random_value_limits); } return ($random_value); } if ($parameters ['data'] != '') { for ($constant = 1; $constant <= 6; $constant ++) { $constant_name = trim (get_constant_name ($constant)); if ($constant_name != '' && $parameters ['data'] == $constant_name) { return get_constant_value ($constant); } } if (strpos ($parameters ['data'], ',') !== false) { $data_tags = explode (',', $parameters ['data']); $data = array (); foreach ($data_tags as $data_tag) { $constant_found = false; for ($constant = 1; $constant <= 6; $constant ++) { $constant_name = trim (get_constant_name ($constant)); if ($constant_name != '' && $data_tag == $constant_name) { $data []= get_constant_value ($constant); $constant_found = true; break; } } if (!$constant_found) { $data []= replace_ai_tags ('{'.trim ($data_tag).'}'); } } return implode (', ', $data); } return replace_ai_tags ('{'.$parameters ['data'].'}'); } if ($parameters ['counter'] != '') { $counter_name = strtolower ($parameters ['counter']); switch ($counter_name) { case 'block': if (isset ($ai_wp_data [AI_CURRENT_BLOCK_NUMBER]) && isset ($ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $ai_wp_data [AI_CURRENT_BLOCK_NUMBER]])) { return $ad_inserter_globals [AI_BLOCK_COUNTER_NAME . $ai_wp_data [AI_CURRENT_BLOCK_NUMBER]]; } break; case 'content': if (isset ($ad_inserter_globals [AI_CONTENT_COUNTER_NAME])) { return $ad_inserter_globals [AI_CONTENT_COUNTER_NAME]; } break; case 'excerpt': if (isset ($ad_inserter_globals [AI_EXCERPT_COUNTER_NAME])) { return $ad_inserter_globals [AI_EXCERPT_COUNTER_NAME]; } break; case 'before-post': if (isset ($ad_inserter_globals [AI_LOOP_BEFORE_COUNTER_NAME])) { return $ad_inserter_globals [AI_LOOP_BEFORE_COUNTER_NAME]; } break; case 'after-post': if (isset ($ad_inserter_globals [AI_LOOP_AFTER_COUNTER_NAME])) { return $ad_inserter_globals [AI_LOOP_AFTER_COUNTER_NAME]; } break; case 'widget': if (isset ($ai_wp_data [AI_CURRENT_BLOCK_NUMBER]) && isset ($ad_inserter_globals [AI_WIDGET_COUNTER_NAME . $ai_wp_data [AI_CURRENT_BLOCK_NUMBER]])) { return $ad_inserter_globals [AI_WIDGET_COUNTER_NAME . $ai_wp_data [AI_CURRENT_BLOCK_NUMBER]]; } break; case 'php': if (isset ($ai_wp_data [AI_CURRENT_BLOCK_NUMBER]) && isset ($ad_inserter_globals [AI_PHP_FUNCTION_CALL_COUNTER_NAME . $ai_wp_data [AI_CURRENT_BLOCK_NUMBER]])) { return $ad_inserter_globals [AI_PHP_FUNCTION_CALL_COUNTER_NAME . $ai_wp_data [AI_CURRENT_BLOCK_NUMBER]]; } break; } return ''; } if ($parameters ['name'] != '') { $shortcode_name = strtolower ($parameters ['name']); switch ($shortcode_name) { case 'processing-log': if (/*get_remote_debugging () ||*/ ($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0) { ob_start (); echo "
    \n";
                ai_write_debug_info ();
                echo "
    "; return ob_get_clean (); } return ""; case 'debugging-tools': if (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 || defined ('AI_DEBUGGING_DEMO')) { ob_start (); ai_write_debugging_tools (); return ob_get_clean (); } default: if (defined ('AI_BUFFERING')) { if (get_output_buffering () && !get_disable_header_code ()) { return ""; } } return ""; } } } $ai_last_check = AI_CHECK_SHORTCODE_ATTRIBUTES; if ($block < 1 || $block > 96) return ""; // if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("SHORTCODE $block (".($parameters ['block'] != '' ? 'block="'.$parameters ['block'].'"' : '').($parameters ['name'] != '' ? 'name="'.$parameters ['name'].'"' : '').")"); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("SHORTCODE ADINSERTER ".($parameters ['block'] != '' ? 'block="'.$block.'" ' : '').($parameters ['name'] != '' ? 'name="'.$parameters ['name'].'"' : '').""); // IGNORE SETTINGS // page-type // *block-counter // CHECK SETTINGS // exceptions $ignore_array = array (); if (trim ($parameters ['ignore']) != '') { $ignore_array = explode (",", str_replace (" ", "", $parameters ['ignore'])); } $check_array = array (); if (trim ($parameters ['check']) != '') { $check_array = explode (",", str_replace (" ", "", $parameters ['check'])); } $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_SHORTCODE; $obj = $block_object [$block]; $obj->clear_code_cache (); $ai_last_check = AI_CHECK_ENABLED_SHORTCODE; if (!$obj->get_enable_manual ()) return ""; if (!$obj->check_server_side_detection ()) return ""; if (!$obj->check_page_types_lists_users (in_array ("page-type", $ignore_array))) return ""; if (in_array ("exceptions", $check_array)) { if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { // $meta_value = get_post_meta (get_the_ID (), '_adinserter_block_exceptions', true); $meta_value = ai_get_post_meta (); $selected_blocks = explode (",", $meta_value); if (!$obj->check_post_page_exceptions ($selected_blocks)) return ""; } } $ai_last_check = AI_CHECK_DISABLED_MANUALLY; if (!$obj->check_disabled ()) return ""; $ai_last_check = AI_CHECK_INSERTION_NOT_DISABLED; if ($obj->get_disable_insertion () || get_disable_block_insertions ()) return ""; // Last check before counter check before insertion // $ai_last_check = AI_CHECK_CODE; // if ($obj->ai_getCode () == '') return ""; if ($obj->empty_code ()) return ""; $max_page_blocks_enabled = $obj->get_max_page_blocks_enabled (); if ($max_page_blocks_enabled) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if ($ai_wp_data [AI_PAGE_BLOCKS] >= get_max_page_blocks ()) return ""; } if (!$obj->check_filter_hook ($debug_processing)) return ""; // Last check before insertion if (!$obj->check_and_increment_block_counter ()) return ""; // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$obj->get_debug_disable_insertion ()) { if (isset ($ai_wp_data [AI_SHORTCODES]['force_serverside'])) { $saved_force_serverside = $ai_wp_data [AI_SHORTCODES]['force_serverside']; } if (isset ($ai_wp_data [AI_SHORTCODES]['viewport'])) { $saved_viewport = $ai_wp_data [AI_SHORTCODES]['viewport']; } if (isset ($ai_wp_data [AI_SHORTCODES]['check'])) { $saved_check = $ai_wp_data [AI_SHORTCODES]['check']; } if (isset ($ai_wp_data [AI_SHORTCODES]['count'])) { $saved_count = $ai_wp_data [AI_SHORTCODES]['count']; } if (isset ($ai_wp_data [AI_SHORTCODES]['rotate'])) { $saved_rotate = $ai_wp_data [AI_SHORTCODES]['rotate']; } if (isset ($ai_wp_data [AI_SHORTCODES]['head'])) { $saved_head = $ai_wp_data [AI_SHORTCODES]['head']; } if (isset ($ai_wp_data [AI_SHORTCODES]['fallback'])) { $saved_fallback = $ai_wp_data [AI_SHORTCODES]['fallback']; } if (isset ($ai_wp_data [AI_SHORTCODES]['atts'])) { $saved_atts = $ai_wp_data [AI_SHORTCODES]['atts']; } $ai_wp_data [AI_SHORTCODES]['atts'] = $atts; if (isset ($ai_wp_data [AI_CURRENT_BLOCK_NUMBER])) { $saved_block_number = $ai_wp_data [AI_CURRENT_BLOCK_NUMBER]; } if (isset ($ai_wp_data [AI_CURRENT_BLOCK_NAME])) { $saved_block_name = $ai_wp_data [AI_CURRENT_BLOCK_NAME]; } $code = $obj->get_code_for_serverside_insertion (true, false, $code_only); if (isset ($saved_force_serverside)) { $ai_wp_data [AI_SHORTCODES]['force_serverside'] = $saved_force_serverside; } else unset ($ai_wp_data [AI_SHORTCODES]['force_serverside']); if (isset ($saved_viewport)) { $ai_wp_data [AI_SHORTCODES]['viewport'] = $saved_viewport; } else unset ($ai_wp_data [AI_SHORTCODES]['viewport']); if (isset ($saved_check)) { $ai_wp_data [AI_SHORTCODES]['check'] = $saved_check; } else unset ($ai_wp_data [AI_SHORTCODES]['check']); if (isset ($saved_count)) { $ai_wp_data [AI_SHORTCODES]['count'] = $saved_count; } else unset ($ai_wp_data [AI_SHORTCODES]['count']); if (isset ($saved_rotate)) { $ai_wp_data [AI_SHORTCODES]['rotate'] = $saved_rotate; } else unset ($ai_wp_data [AI_SHORTCODES]['rotate']); if (isset ($saved_fallback)) { $ai_wp_data [AI_SHORTCODES]['fallback'] = $saved_fallback; } else unset ($ai_wp_data [AI_SHORTCODES]['fallback']); if (isset ($saved_head)) { $ai_wp_data [AI_SHORTCODES]['head'] = $saved_head; } else unset ($ai_wp_data [AI_SHORTCODES]['head']); if (isset ($saved_atts)) { $ai_wp_data [AI_SHORTCODES]['atts'] = $saved_atts; } else unset ($ai_wp_data [AI_SHORTCODES]['atts']); if (isset ($saved_block_number)) { $ai_wp_data [AI_CURRENT_BLOCK_NUMBER] = $saved_block_number; } else unset ($ai_wp_data [AI_CURRENT_BLOCK_NUMBER]); if (isset ($saved_block_number)) { $ai_wp_data [AI_CURRENT_BLOCK_NAME] = $saved_block_name; } else unset ($ai_wp_data [AI_CURRENT_BLOCK_NAME]); // Must be after get_code_for_serverside_insertion () $ai_last_check = AI_CHECK_INSERTED; return $code; } } function ai_process_shortcodes ($atts, $content, $tag) { global $ai_last_check, $ai_wp_data, $ai_total_plugin_time; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; if ($debug_processing) { $atts_string = ''; if (is_array ($atts)) foreach ($atts as $index => $att) { if (is_numeric ($index)) $atts_string .= $att.' '; else $atts_string .= $index.("='".$att."'").' '; } ai_log ("PROCESS SHORTCODES [$tag ".trim ($atts_string).']'); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } $ai_last_check = AI_CHECK_NONE; $block = - 1; $shortcode = ai_process_shortcode ($block, $atts); if ($debug_processing) { if ($block == - 1) { if (strlen ($shortcode) < 100) ai_log ('SHORTCODE TEXT: "' . ai_log_filter_content ($shortcode) . '"'); else ai_log ('SHORTCODE TEXT: "' . ai_log_filter_content (html_entity_decode (substr ($shortcode, 0, 60))) . ' ... ' . ai_log_filter_content (html_entity_decode (substr ($shortcode, - 60))) . '"'); } elseif ($ai_last_check != AI_CHECK_NONE) ai_log (ai_log_block_status ($block, $ai_last_check)); if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("SHORTCODE END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } return $shortcode; } function ai_add_attr_data (&$tag, $attr, $new_data) { if (trim ($tag) != '' && strpos ($tag, '"; } function ai_widget_draw ($args, $instance, &$block) { global $block_object, $ad_inserter_globals, $ai_wp_data, $ai_last_check; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; $block = isset ($instance ['block']) ? $instance ['block'] : 1; $sticky = isset ($instance ['sticky']) ? $instance ['sticky'] : 0; if ($block == 0 || $block == - 2) { if (!get_disable_block_insertions () && (($ai_wp_data [AI_WP_USER] & AI_USER_ADMINISTRATOR) != 0 || defined ('AI_DEBUGGING_DEMO'))) { ai_special_widget ($args, $instance, $block); } return; } if ($sticky) { $ai_wp_data [AI_STICKY_WIDGETS] = true; if ($block == - 1 && !get_disable_block_insertions ()) { // Dummy widget $before_widget = $args ['before_widget']; ai_add_attr_data ($before_widget, 'style', 'padding: 0; border: 0; margin: 0; color: transparent; background: transparent;'); ai_add_attr_data ($before_widget, 'class', 'ai-sticky-widget'); if ($debug_processing) echo ai_debug_widget_comment ('before_widget'); echo $before_widget; if ($debug_processing) echo ai_debug_widget_comment ('before_widget', true); if ($debug_processing) echo ai_debug_widget_comment ('after_widget'); // No sense for empty dummy widgets // if (get_sticky_widget_mode() == AI_STICKY_WIDGET_MODE_CSS_PUSH) { // echo '
    '; // } echo $args ['after_widget']; if ($debug_processing) echo ai_debug_widget_comment ('after_widget', true); return; } } if ($block < 1 || $block > 96) return; $title = !empty ($instance ['widget-title']) ? $instance ['widget-title'] : ''; $obj = $block_object [$block]; $obj->clear_code_cache (); $globals_name = AI_WIDGET_COUNTER_NAME . $block; if (!isset ($ad_inserter_globals [$globals_name])) { $ad_inserter_globals [$globals_name] = 1; } else $ad_inserter_globals [$globals_name] ++; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("WIDGET (". $obj->number . ') ['.$ad_inserter_globals [$globals_name] . ']'); $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_WIDGET; $ai_last_check = AI_CHECK_ENABLED_WIDGET; if (!$obj->get_enable_widget ()) return; if (!$obj->check_server_side_detection ()) return; if (!$obj->check_page_types_lists_users ()) return; if (!$obj->check_filter ($ad_inserter_globals [$globals_name])) return; if (!$obj->check_number_of_words ()) return; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC) { // $meta_value = get_post_meta (get_the_ID (), '_adinserter_block_exceptions', true); $meta_value = ai_get_post_meta (); $selected_blocks = explode (",", $meta_value); if (!$obj->check_post_page_exceptions ($selected_blocks)) return; } $ai_last_check = AI_CHECK_DISABLED_MANUALLY; if (!$obj->check_disabled ()) return; $ai_last_check = AI_CHECK_INSERTION_NOT_DISABLED; if ($obj->get_disable_insertion () || get_disable_block_insertions ()) return; // Last check before counter check before insertion $ai_last_check = AI_CHECK_CODE; if ($obj->ai_getCode () == '') { if ($sticky) { $before_widget = $args ['before_widget']; ai_add_attr_data ($before_widget, 'style', 'padding: 0; border: 0; margin: 0; color: transparent; background: transparent;'); ai_add_attr_data ($before_widget, 'class', 'ai-sticky-widget'); if ($debug_processing) echo ai_debug_widget_comment ('before_widget'); echo $before_widget; if ($debug_processing) echo ai_debug_widget_comment ('before_widget', true); if ($debug_processing) echo ai_debug_widget_comment ('after_widget'); // No sense for empty widgets // if (get_sticky_widget_mode() == AI_STICKY_WIDGET_MODE_CSS_PUSH) { // echo '
    '; // } echo $args ['after_widget']; if ($debug_processing) echo ai_debug_widget_comment ('after_widget', true); } return; } $max_page_blocks_enabled = $obj->get_max_page_blocks_enabled (); if ($max_page_blocks_enabled) { $ai_last_check = AI_CHECK_MAX_PAGE_BLOCKS; if ($ai_wp_data [AI_PAGE_BLOCKS] >= get_max_page_blocks ()) return; } if (!$obj->check_filter_hook ($debug_processing)) return; // Last check before insertion if (!$obj->check_and_increment_block_counter ()) return; // Increment page block counter if ($max_page_blocks_enabled) $ai_wp_data [AI_PAGE_BLOCKS] ++; $ai_last_check = AI_CHECK_DEBUG_NO_INSERTION; if (!$obj->get_debug_disable_insertion ()) { $viewport_classes = $obj->get_client_side_action () == AI_CLIENT_SIDE_ACTION_INSERT ? '' : trim ($obj->get_viewport_classes ()); $sticky_class = $sticky ? ' ai-sticky-widget' : ''; $widget_classes = trim ($viewport_classes . $sticky_class); $before_widget = $args ['before_widget']; if ($widget_classes != "") { ai_add_attr_data ($before_widget, 'class', $widget_classes); } if ($debug_processing) echo ai_debug_widget_comment ('before_widget'); echo $before_widget; if ($debug_processing) echo ai_debug_widget_comment ('before_widget', true); if (!empty ($title)) { if ($debug_processing) echo ai_debug_widget_comment ('before_title'); echo $args ['before_title']; if ($debug_processing) echo ai_debug_widget_comment ('before_title', true); echo apply_filters ('widget_title', $title); if ($debug_processing) echo ai_debug_widget_comment ('after_title'); echo $args ['after_title']; if ($debug_processing) echo ai_debug_widget_comment ('after_title', true); } $obj->needs_class = true; echo $obj->get_code_for_serverside_insertion (false); if ($debug_processing) echo ai_debug_widget_comment ('after_widget'); if ($sticky && get_sticky_widget_mode() == AI_STICKY_WIDGET_MODE_CSS_PUSH) { echo '
    '; } echo $args ['after_widget']; if ($debug_processing) echo ai_debug_widget_comment ('after_widget', true); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_BLOCKS) != 0 && $obj->get_detection_client_side () && $obj->get_client_side_action () == AI_CLIENT_SIDE_ACTION_SHOW) echo $obj->get_code_for_serverside_insertion (false, true); $ai_last_check = AI_CHECK_INSERTED; } } function ai_write_debugging_tools () { global $ai_wp_data; ai_toolbar_menu_items (); echo " "; echo '
      '; foreach ($ai_wp_data [AI_DEBUG_MENU_ITEMS] as $menu_item) { if (isset ($menu_item ['parent'])) { if ($menu_item ['parent'] == 'ai-toolbar-settings') { if ($menu_item ['id'] == 'ai-toolbar-status') { echo '
    • '; echo $menu_item ['title']; echo "
    • \n"; } else { echo '
    • '; echo '', $menu_item ['title'], ''; echo "
    • \n"; } } elseif ($menu_item ['parent'] == 'ai-toolbar-positions') { echo '
    • '; echo '', $menu_item ['title'], ''; echo "
    • \n"; } } else if ($menu_item ['id'] == 'ai-toolbar-settings') { echo '
    • '; echo '', $menu_item ['title'], ''; echo "
    • \n"; } } echo '
    '; } function ai_special_widget ($args, $instance, $block) { global $ai_wp_data, $ai_db_options, $block_object; $debug_processing = ($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0; $sticky = isset ($instance ['sticky']) ? $instance ['sticky'] : 0; if ($sticky) { $ai_wp_data [AI_STICKY_WIDGETS] = true; ai_add_attr_data ($args ['before_widget'], 'class', 'ai-sticky-widget'); } if ($debug_processing) echo ai_debug_widget_comment ('before_widget'); echo $args ['before_widget']; if ($debug_processing) echo ai_debug_widget_comment ('before_widget', true); $title = !empty ($instance ['widget-title']) ? $instance ['widget-title'] : ''; if (!empty ($title)) { if ($debug_processing) echo ai_debug_widget_comment ('before_title'); echo $args ['before_title']; if ($debug_processing) echo ai_debug_widget_comment ('before_title', true); echo apply_filters ('widget_title', $title); if ($debug_processing) echo ai_debug_widget_comment ('after_title'); echo $args ['after_title']; if ($debug_processing) echo ai_debug_widget_comment ('after_title', true); } switch ($block) { case 0: // Processing log echo "\n"; ai_write_debug_info (); echo ""; if ($ai_wp_data [AI_CLIENT_SIDE_DETECTION]) { for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = get_viewport_name ($viewport); if ($viewport_name != '') { echo "
    \n";
                echo "CLIENT-SIDE DEVICE:      ", $viewport_name;
                echo "
    "; } } } break; case - 2: // Debugging tools if ($sticky && get_sticky_widget_mode() == AI_STICKY_WIDGET_MODE_CSS_PUSH) { echo "
    \n"; } ai_write_debugging_tools (); if ($sticky && get_sticky_widget_mode() == AI_STICKY_WIDGET_MODE_CSS_PUSH) { echo "
    \n"; } break; } if ($debug_processing) echo ai_debug_widget_comment ('after_widget'); if ($sticky && get_sticky_widget_mode() == AI_STICKY_WIDGET_MODE_CSS_PUSH) { echo '
    '; } echo $args ['after_widget']; if ($debug_processing) echo ai_debug_widget_comment ('after_widget', true); } function ai_pro () { if (!function_exists ('ai_remote_plugin_data')) return false; return ai_remote_plugin_data ('pro', true); } function ai_remote ($name, $default_data = false) { if (!function_exists ('ai_remote_plugin_data')) return $default_data; return ai_remote_plugin_data ($name, $default_data); } function ai_is_json ($string, $return_data = false) { $data = json_decode ($string); return (json_last_error () == JSON_ERROR_NONE) ? ($return_data ? $data : true) : false; } function ai_structured_data_item ($indexes, $data, $value = '!@!') { if (is_object ($data)) $data = (array) $data; if (empty ($indexes)) { if ($value == '!@!') return true; return $data == $value; } if (!is_array ($data)) return false; // Workaround because after json decode array indexes are strings and can't be accessed $data = array_combine (array_keys ($data), array_values ($data)); $index = array_shift ($indexes); if ($index == '*') { foreach ($data as $data_index => $data_item) { if (ai_structured_data_item ($indexes, $data_item, $value)) return true; } } elseif (isset ($data [$index])) { return ai_structured_data_item ($indexes, $data [$index], $value); } return false; } function ai_structured_data ($data, $selector, $value = '') { if (!is_array ($data)) return false; if (strpos ($selector, '[') === false) return false; $indexes = explode ('[', str_replace (array (']', ' '), '', $selector)); return ai_structured_data_item ($indexes, $data, $value); } function check_url_parameter_cookie_list ($list, $white_list, $parameters, &$found) { $parameter_list = trim ($list); $return = $white_list; $found = false; $query_string = isset ($_SERVER ['QUERY_STRING']) ? trim ($_SERVER ['QUERY_STRING']) != '' : false; if ($parameter_list == AD_EMPTY_DATA) return true; if (count ($parameters) == 0 && strpos ($list, '#') === false) { return !$return; } $found = true; $parameter_data = array (); foreach ($parameters as $index => $parameter) { $parameter_data [$index] = false; if (is_string ($parameter)) { $data = trim (stripslashes ($parameter)); if (strpos ($data, '{') === 0) { $parameter_data [$index] = ai_is_json ($data, true); } $parameters [$index] = urlencode ($parameter); } } $parameters_listed = explode (",", $parameter_list); foreach ($parameters_listed as $index => $parameter_listed) { if (trim ($parameter_listed) == "") unset ($parameters_listed [$index]); else $parameters_listed [$index] = trim ($parameter_listed); } foreach ($parameters_listed as $parameter) { if ($parameter == '#') { if (!$query_string) return $return; } elseif (strpos ($parameter, "=") !== false) { $parameter_value = explode ("=", $parameter); if (array_key_exists ($parameter_value [0], $parameters) && $parameters [$parameter_value [0]] == $parameter_value [1]) return $return; if (ai_structured_data ($parameter_data, $parameter_value [0], $parameter_value [1])) return $return; } else { if (array_key_exists ($parameter, $parameters)) return $return; if (ai_structured_data ($parameter_data, $parameter)) return $return; } } $found = false; return !$return; } function check_url_parameter_list ($url_parameters, $white_list, &$found) { return check_url_parameter_cookie_list ($url_parameters, $white_list, $_GET, $found); } function check_cookie_list ($url_parameters, $white_list) { $dummy = false; return check_url_parameter_cookie_list ($url_parameters, $white_list, $_COOKIE, $dummy); } function check_url_parameter_and_cookie_list ($url_parameters, $white_list) { $dummy = false; return check_url_parameter_cookie_list ($url_parameters, $white_list, array_merge ($_COOKIE, $_GET), $dummy); } function check_scheduled_rotation ($scheduling) { If (strpos ($scheduling, '=') === false) return false; $result = true; if (strpos ($scheduling, '^') !== false) { $result = false; $scheduling = substr ($scheduling, 1); } $scheduling_data_array = explode ('=', $scheduling); if (strpos ($scheduling_data_array [0], '%') !== false) { $scheduling_data_time = explode ('%', $scheduling_data_array [0]); } else $scheduling_data_time = array ($scheduling_data_array [0]); $time_unit = strtolower (trim ($scheduling_data_time [0])); $time_division = isset ($scheduling_data_time [1]) ? trim ($scheduling_data_time [1]) : 0; $scheduling_time_option = str_replace (' ', '', ($scheduling_data_array [1])); $current_time = current_time ('timestamp'); $time_value = 0; switch ($time_unit) { case 's': $time_value = ltrim (date ('s', $current_time), '0'); break; case 'i': $time_value = ltrim (date ('i', $current_time), '0'); break; case 'h': $time_value = date ('G', $current_time); break; case 'd': $time_value = date ('j', $current_time); break; case 'm': $time_value = date ('n', $current_time); break; case 'y': $time_value = date ('Y', $current_time); break; case 'w': $time_value = date ('w', $current_time); if ($time_value == 0) $time_value = 6; else $time_value = $time_value - 1; } $time_modulo = $time_division != 0 ? $time_value % $time_division : $time_value; $scheduling_time_options = explode (',', $scheduling_time_option); foreach ($scheduling_time_options as $time_option) { if (strpos ($time_option, '-') !== false) { $time_limits = explode ('-', $time_option); if ($time_modulo >= $time_limits [0] && $time_modulo <= $time_limits [1]) return $result; } else if ($time_modulo == $time_option) return $result; } return !$result; } function check_scheduling_time ($start_time, $end_time, $days_in_week, $between) { if (!function_exists ('ai_scheduling_options')) return true; $current_time = current_time ('timestamp'); if (strpos ($start_time, '-') === false && strpos ($end_time, '-') === false) { $current_time -= (strtotime (current_time ('Y-m-d'))); if ($current_time < 0) { $current_time += 24 * 3600; } } $start_time = strtotime ($start_time, $current_time); $end_time = strtotime ($end_time, $current_time); $current_weekday = date ('w', $current_time); if ($current_weekday == 0) $current_weekday = 6; else $current_weekday --; $weekdays = explode (',', $days_in_week); if (isset ($weekdays [0]) and $weekdays [0] === '') $weekdays = array (); $insertion_enabled = $current_time >= $start_time && $current_time < $end_time && in_array ($current_weekday, $weekdays); return ($between ? $insertion_enabled : !$insertion_enabled); } function check_referer_list ($referers, $white_list) { if (isset ($_GET ['referrer'])) { $referer_host = esc_html ($_GET ['referrer']); } elseif (isset ($_SERVER['HTTP_REFERER'])) { $referer_host = strtolower (parse_url ($_SERVER['HTTP_REFERER'], PHP_URL_HOST)); } else $referer_host = ''; // echo " referers='$referers' referer_host='$referer_host' "; $return = $white_list; $domains = strtolower (trim ($referers)); if ($domains == AD_EMPTY_DATA) return true; $domains = explode (",", $domains); foreach ($domains as $domain) { $domain = trim ($domain); if ($domain == "") continue; if ($domain [0] == '*') { if ($domain [strlen ($domain) - 1] == '*') { $domain = substr ($domain, 1, strlen ($domain) - 2); if (strpos ($referer_host, $domain) !== false) return $return; } else { $domain = substr ($domain, 1); if (substr ($referer_host, - strlen ($domain)) == $domain) return $return; } } elseif ($domain [strlen ($domain) - 1] == '*') { $domain = substr ($domain, 0, strlen ($domain) - 1); if (strpos ($referer_host, $domain) === 0) return $return; } if ($domain == "#") { if ($referer_host == "") return $return; } elseif ($domain == $referer_host) return $return; } return !$return; } function check_client_list ($clients, $white_list) { global $ai_wp_data; $languages = array ( 'af' => 'Afrikaans', 'sq' => 'Albanian', 'an' => 'Aragonese', 'ar*' => 'Arabic (Standard)', 'ar-dz' => 'Arabic (Algeria)', 'ar-bh' => 'Arabic (Bahrain)', 'ar-eg' => 'Arabic (Egypt)', 'ar-iq' => 'Arabic (Iraq)', 'ar-jo' => 'Arabic (Jordan)', 'ar-kw' => 'Arabic (Kuwait)', 'ar-lb' => 'Arabic (Lebanon)', 'ar-ly' => 'Arabic (Libya)', 'ar-ma' => 'Arabic (Morocco)', 'ar-om' => 'Arabic (Oman)', 'ar-qa' => 'Arabic (Qatar)', 'ar-sa' => 'Arabic (Saudi Arabia)', 'ar-sy' => 'Arabic (Syria)', 'ar-tn' => 'Arabic (Tunisia)', 'ar-ae' => 'Arabic (U.A.E.)', 'ar-ye' => 'Arabic (Yemen)', 'hy' => 'Armenian', 'as' => 'Assamese', 'ast' => 'Asturian', 'az' => 'Azerbaijani', 'eu' => 'Basque', 'bg' => 'Bulgarian', 'be' => 'Belarusian', 'bn' => 'Bengali', 'bs' => 'Bosnian', 'br' => 'Breton', 'my' => 'Burmese', 'ca' => 'Catalan', 'ch' => 'Chamorro', 'ce' => 'Chechen', 'zh*' => 'Chinese', 'zh-hk' => 'Chinese (Hong Kong)', 'zh-cn' => 'Chinese (PRC)', 'zh-sg' => 'Chinese (Singapore)', 'zh-tw' => 'Chinese (Taiwan)', 'cv' => 'Chuvash', 'co' => 'Corsican', 'cr' => 'Cree', 'hr' => 'Croatian', 'cs' => 'Czech', 'da' => 'Danish', 'nl*' => 'Dutch (Standard)', 'nl-be' => 'Dutch (Belgian)', 'en*' => 'English', 'en-au' => 'English (Australia)', 'en-bz' => 'English (Belize)', 'en-ca' => 'English (Canada)', 'en-ie' => 'English (Ireland)', 'en-jm' => 'English (Jamaica)', 'en-nz' => 'English (New Zealand)', 'en-ph' => 'English (Philippines)', 'en-za' => 'English (South Africa)', 'en-tt' => 'English (Trinidad & Tobago)', 'en-gb' => 'English (United Kingdom)', 'en-us' => 'English (United States)', 'en-zw' => 'English (Zimbabwe)', 'eo' => 'Esperanto', 'et' => 'Estonian', 'fo' => 'Faeroese', 'fa' => 'Persian', 'fj' => 'Fijian', 'fi' => 'Finnish', 'fr*' => 'French (Standard)', 'fr-be' => 'French (Belgium)', 'fr-ca' => 'French (Canada)', 'fr-fr' => 'French (France)', 'fr-lu' => 'French (Luxembourg)', 'fr-mc' => 'French (Monaco)', 'fr-ch' => 'French (Switzerland)', 'fy' => 'Frisian', 'fur' => 'Friulian', 'gd*' => 'Scots Gaelic', 'gd-ie' => 'Gaelic (Irish)', 'gl' => 'Galacian', 'ka' => 'Georgian', 'de*' => 'German (Standard)', 'de-at' => 'German (Austria)', 'de-de' => 'German (Germany)', 'de-li' => 'German (Liechtenstein)', 'de-lu' => 'German (Luxembourg)', 'de-ch' => 'German (Switzerland)', 'el' => 'Greek', 'gu' => 'Gujurati', 'ht' => 'Haitian', 'he' => 'Hebrew', 'hi' => 'Hindi', 'hu' => 'Hungarian', 'is' => 'Icelandic', 'id' => 'Indonesian', 'iu' => 'Inuktitut', 'ga' => 'Irish', 'it*' => 'Italian (Standard)', 'it-ch' => 'Italian (Switzerland)', 'ja' => 'Japanese', 'kn' => 'Kannada', 'ks' => 'Kashmiri', 'kk' => 'Kazakh', 'km' => 'Khmer', 'ky' => 'Kirghiz', 'tlh' => 'Klingon', 'ko*' => 'Korean', 'ko-kp' => 'Korean (North Korea)', 'ko-kr' => 'Korean (South Korea)', 'la' => 'Latin', 'lv' => 'Latvian', 'lt' => 'Lithuanian', 'lb' => 'Luxembourgish', 'mk' => 'Macedonian', 'ms' => 'Malay', 'ml' => 'Malayalam', 'mt' => 'Maltese', 'mi' => 'Maori', 'mr' => 'Marathi', 'mo' => 'Moldavian', 'nv' => 'Navajo', 'ng' => 'Ndonga', 'ne' => 'Nepali', 'no' => 'Norwegian', 'nb' => 'Norwegian (Bokmal)', 'nn' => 'Norwegian (Nynorsk)', 'oc' => 'Occitan', 'or' => 'Oriya', 'om' => 'Oromo', 'fa-ir' => 'Persian/Iran', 'pl' => 'Polish', 'pt*' => 'Portuguese', 'pt-br' => 'Portuguese (Brazil)', 'pa*' => 'Punjabi', 'pa-in' => 'Punjabi (India)', 'pa-pk' => 'Punjabi (Pakistan)', 'qu' => 'Quechua', 'rm' => 'Rhaeto-Romanic', 'ro*' => 'Romanian', 'ro-mo' => 'Romanian (Moldavia)', 'ru*' => 'Russian', 'ru-mo' => 'Russian (Moldavia)', 'sz' => 'Sami (Lappish)', 'sg' => 'Sango', 'sa' => 'Sanskrit', 'sc' => 'Sardinian', 'sd' => 'Sindhi', 'si' => 'Singhalese', 'sr' => 'Serbian', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'so' => 'Somani', 'sb' => 'Sorbian', 'es*' => 'Spanish', 'es-ar' => 'Spanish (Argentina)', 'es-bo' => 'Spanish (Bolivia)', 'es-cl' => 'Spanish (Chile)', 'es-co' => 'Spanish (Colombia)', 'es-cr' => 'Spanish (Costa Rica)', 'es-do' => 'Spanish (Dominican Republic)', 'es-ec' => 'Spanish (Ecuador)', 'es-sv' => 'Spanish (El Salvador)', 'es-gt' => 'Spanish (Guatemala)', 'es-hn' => 'Spanish (Honduras)', 'es-mx' => 'Spanish (Mexico)', 'es-ni' => 'Spanish (Nicaragua)', 'es-pa' => 'Spanish (Panama)', 'es-py' => 'Spanish (Paraguay)', 'es-pe' => 'Spanish (Peru)', 'es-pr' => 'Spanish (Puerto Rico)', 'es-es' => 'Spanish (Spain)', 'es-uy' => 'Spanish (Uruguay)', 'es-ve' => 'Spanish (Venezuela)', 'sx' => 'Sutu', 'sw' => 'Swahili', 'sv*' => 'Swedish', 'sv-fi' => 'Swedish (Finland)', 'sv-sv' => 'Swedish (Sweden)', 'ta' => 'Tamil', 'tt' => 'Tatar', 'te' => 'Teluga', 'th' => 'Thai', 'tig' => 'Tigre', 'ts' => 'Tsonga', 'tn' => 'Tswana', 'tr' => 'Turkish', 'tk' => 'Turkmen', 'uk' => 'Ukrainian', 'hsb' => 'Upper Sorbian', 'ur' => 'Urdu', 've' => 'Venda', 'vi' => 'Vietnamese', 'vo' => 'Volapuk', 'wa' => 'Walloon', 'cy' => 'Welsh', 'xh' => 'Xhosa', 'ji' => 'Yiddish', 'zu' => 'Zulu', ); if (version_compare (phpversion (), "5.6", ">=")) { if (!isset ($ai_wp_data [AI_AGENT])) { require_once AD_INSERTER_PLUGIN_DIR.'includes/agent/Agent.php'; $agent = new Agent(); $ai_wp_data [AI_AGENT] = $agent; } else $agent = $ai_wp_data [AI_AGENT]; $language = isset ($_SERVER ['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER ['HTTP_ACCEPT_LANGUAGE'] : ''; $return = $white_list; if ($clients == AD_EMPTY_DATA) return true; $clients = explode (",", $clients); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!isset ($ai_wp_data [AI_CLIENTS])) $ai_wp_data [AI_CLIENTS] = array (); foreach ($clients as $client) { $client = trim ($client); if ($client == "") continue; $ai_wp_data [AI_CLIENTS][] = $client; } } foreach ($clients as $client) { $client = trim ($client); if ($client == "") continue; $check_language = false; if (strpos ($client, 'language:') === 0) { $check_language = true; $client = substr ($client, 9); } if ($check_language) { if ($client [0] == '*') { if ($client [strlen ($client) - 1] == '*') { $client = substr ($client, 1, strlen ($client) - 2); if (stripos ($language, $client) !== false) return $return; } else { $client = substr ($client, 1); if (strtolower (substr ($language, - strlen ($client))) == strtolower ($client)) return $return; } } elseif ($client [strlen ($client) - 1] == '*') { $client = substr ($client, 0, strlen ($client) - 1); if (stripos ($language, $client) === 0) return $return; } elseif (strtolower ($client) == strtolower ($language)) return $return; } else { if ($client [0] == '*') { if ($client [strlen ($client) - 1] == '*') { $client = substr ($client, 1, strlen ($client) - 2); if (stripos ($agent->getUserAgent (), $client) !== false) return $return; } else { $client = substr ($client, 1); if (strtolower (substr ($agent->getUserAgent (), - strlen ($client))) == strtolower ($client)) return $return; } } elseif ($client [strlen ($client) - 1] == '*') { $client = substr ($client, 0, strlen ($client) - 1); if (stripos ($agent->getUserAgent (), $client) === 0) return $return; } elseif ($agent->is ($client)) return $return; } } return !$return; } else { return true; } } function ai_check_block ($block) { global $ai_delay_showing_pageviews; $ai_cookie_name = 'aiBLOCKS'; if (isset ($_COOKIE [$ai_cookie_name])) { $ai_cookie = json_decode (stripslashes ($_COOKIE [$ai_cookie_name])); } else $ai_cookie = new stdClass(); if (isset ($ai_delay_showing_pageviews)) { if (!isset ($ai_cookie->$block)) { $ai_cookie->$block = new stdClass(); } if (!isset ($ai_cookie->$block->d)) { $ai_cookie->$block->d = $ai_delay_showing_pageviews; } unset ($ai_delay_showing_pageviews); } if (isset ($ai_cookie)) { if (isset ($ai_cookie->$block) && is_object ($ai_cookie->$block)) { foreach ($ai_cookie->$block as $property => $value) { switch ($property) { case 'x': $closed_for = $value - time (); if ($closed_for > 0) { return false; } else { ai_set_cookie ($block, 'x', ''); } break; case 'd': if ($value != 0) { return false; } break; case 'i': if ($value == 0) { return false; } elseif ($value < 0) { $closed_for = - $value - time (); if ($closed_for > 0) { return false; } else { ai_set_cookie ($block, 'i', ''); if (!isset ($ai_cookie->$block->c) && !isset ($ai_cookie->$block->x)) { ai_set_cookie ($block, 'h', ''); } } } break; case 'ipt': if ($value == 0 && isset ($ai_cookie->$block->it)) { $closed_for = $ai_cookie->$block->it - time (); if ($closed_for > 0) { return false; } } break; case 'c': if ($value == 0) { return false; } elseif ($value < 0) { $closed_for = - $value - time (); if ($closed_for > 0) { return false; } else { ai_set_cookie ($block, 'c', ''); if (!isset ($ai_cookie->$block->i) && !isset ($ai_cookie->$block->x)) { ai_set_cookie ($block, 'h', ''); } } } break; case 'cpt': if ($value == 0 && isset ($ai_cookie->$block->ct)) { $closed_for = $ai_cookie->$block->ct - time (); if ($closed_for > 0) { return false; } } break; } } if (isset ($ai_cookie->G) && is_object ($ai_cookie->G) && isset ($ai_cookie->G->cpt)) { if ($ai_cookie->G->cpt == 0 && isset ($ai_cookie->$block->ct)) { $closed_for = $ai_cookie->$block->ct - time (); if ($closed_for > 0) { return false; } } } } } return true; } function ai_get_category_list () { if (function_exists ('ai_remote_plugin_data')) { $data = ai_remote_plugin_data ('categories'); if (is_array ($data)) return $data; } $args = array ("hide_empty" => 0, 'number' => AI_MAX_LIST_ITEMS); return (get_categories ($args)); } function ai_get_tag_list () { if (function_exists ('ai_remote_plugin_data')) { $data = ai_remote_plugin_data ('tags'); if (is_array ($data)) return $data; } $args = array ('number' => AI_MAX_LIST_ITEMS); return (get_tags ($args)); } function ai_get_taxonomy_list () { if (function_exists ('ai_remote_plugin_data')) { $data = ai_remote_plugin_data ('taxonomies'); if (is_array ($data)) return $data; } $term_data = get_terms (); $taxonomies = array (); foreach ($term_data as $term) { if ($term->taxonomy == 'category') continue; if ($term->taxonomy == 'post_tag') continue; $taxonomies [strtolower ($term->taxonomy) . ':' . strtolower ($term->slug)] = $term->name; if (count ($taxonomies) >= AI_MAX_LIST_ITEMS) break; } $args = array ( 'public' => true, ); $custom_post_types = get_post_types ($args, 'objects', 'and'); foreach ($custom_post_types as $custom_post_type => $custom_post_data) { $taxonomies ['post-type:' . strtolower ($custom_post_type)] = $custom_post_data->labels->singular_name; } $editable_roles = get_editable_roles (); foreach ($editable_roles as $editable_role_slug => $editable_role) { $taxonomies ['user-role:' . strtolower ($editable_role_slug)] = $editable_role ['name']; } $taxonomies ['user:logged-in'] = 'User logged in'; $taxonomies ['user:not-logged-in'] = 'User not logged in'; $users = get_users (); foreach ($users as $user) { $taxonomies ['user:' . strtolower ($user->data->user_login)] = $user->data->display_name; $taxonomies ['author:' . strtolower ($user->data->user_login)] = $user->data->display_name; if (count ($taxonomies) >= AI_MAX_LIST_ITEMS) break; } ksort ($taxonomies); return $taxonomies; } function ai_get_post_id_list () { if (function_exists ('ai_remote_plugin_data')) { $data = ai_remote_plugin_data ('post-ids'); if (is_array ($data)) return $data; } $args = array ( 'public' => true, '_builtin' => false ); $custom_post_types = get_post_types ($args, 'names', 'and'); $screens = array_values (array_merge (array ('post', 'page'), $custom_post_types)); $args = array ( 'posts_per_page' => 3 * AI_MAX_LIST_ITEMS, 'offset' => 0, 'category' => '', 'category_name' => '', 'orderby' => 'ID', 'order' => 'ASC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' => '', 'post_type' => $screens, 'post_mime_type' => '', 'post_parent' => '', 'author' => '', 'author_name' => '', 'post_status' => '', 'suppress_filters' => true, ); $posts_pages = get_posts ($args); $posts_pages = array_slice ($posts_pages, 0, AI_MAX_LIST_ITEMS); foreach ($posts_pages as $index => $post_page) { unset ($posts_pages [$index]->post_content); } return $posts_pages; } function ai_check_filter_hook ($block) { // Called by W3TC code and Ajax requests $check = apply_filters ("ai_block_insertion_check", true, $block, false); // Called with false as $server_side_check = client-side check or W3TC check so null should not be returned from the filter hook - return false if ($check === null) { return false; } return $check; } function ai_set_cookie ($block, $property, $value) { $ai_cookie_name = 'aiBLOCKS'; if (isset ($_COOKIE [$ai_cookie_name])) { $ai_cookie = json_decode (stripslashes ($_COOKIE [$ai_cookie_name])); } else $ai_cookie = new stdClass(); // print_r ($ai_cookie); if ($value == '') { if (isset ($ai_cookie->$block) && is_object ($ai_cookie->$block)) { unset ($ai_cookie->$block->$property); $ai_cookie_array = (array) $ai_cookie->$block; if (empty ($ai_cookie_array)) { unset ($ai_cookie->$block); } } } else { if (!isset ($ai_cookie->$block)) { $ai_cookie->$block = new stdClass(); } $ai_cookie->$block->$property = $value; } $ai_cookie_array = (array) $ai_cookie; if (empty ($ai_cookie_array)) { unset ($_COOKIE [$ai_cookie_name]); ai_setcookie ($ai_cookie_name, null, - 1, '/'); } else { // $_COOKIE [$ai_cookie_name] = addslashes (json_encode ($ai_cookie)); $_COOKIE [$ai_cookie_name] = json_encode ($ai_cookie); ai_setcookie ($ai_cookie_name, $_COOKIE [$ai_cookie_name], time () + 365 * 24 * 3600, '/'); } // if (isset ($_COOKIE [$ai_cookie_name])) { // print_r ($_COOKIE [$ai_cookie_name]); // } else echo "NO COOKIE
    "; } function get_paragraph_start_positions ($content, $multibyte, $paragraph_end_positions, $paragraph_start_strings, &$paragraph_positions, &$active_paragraph_positions) { foreach ($paragraph_start_strings as $paragraph_start_string) { if (trim ($paragraph_start_string) == '') continue; $last_position = - 1; $paragraph_start_string = trim ($paragraph_start_string); if ($paragraph_start_string == "#") { $paragraph_start = "\r\n\r\n"; if (!in_array (0, $paragraph_positions)) { $paragraph_positions [] = 0; $active_paragraph_positions [0] = 1; } } else $paragraph_start = '<' . $paragraph_start_string; if ($multibyte) { $paragraph_start_len = mb_strlen ($paragraph_start); while (mb_stripos ($content, $paragraph_start, $last_position + 1) !== false) { $last_position = mb_stripos ($content, $paragraph_start, $last_position + 1); if ($paragraph_start_string == "#") { $paragraph_positions [] = $last_position + 4; $active_paragraph_positions [$last_position + 4] = 1; } elseif (mb_substr ($content, $last_position + $paragraph_start_len, 1) == ">" || mb_substr ($content, $last_position + $paragraph_start_len, 1) == " ") { $paragraph_positions [] = $last_position; $active_paragraph_positions [$last_position] = 1; } } } else { $paragraph_start_len = strlen ($paragraph_start); while (stripos ($content, $paragraph_start, $last_position + 1) !== false) { $last_position = stripos ($content, $paragraph_start, $last_position + 1); if ($paragraph_start_string == "#") { $paragraph_positions [] = $last_position + 4; $active_paragraph_positions [$last_position + 4] = 1; } elseif ($content [$last_position + $paragraph_start_len] == ">" || $content [$last_position + $paragraph_start_len] == " ") { $paragraph_positions [] = $last_position; $active_paragraph_positions [$last_position] = 1; } } } } // Consistency check if (count ($paragraph_end_positions) != 0) { foreach ($paragraph_end_positions as $index => $paragraph_end_position) { if ($index == 0) { if (!isset ($paragraph_positions [$index]) || $paragraph_positions [$index] >= $paragraph_end_position) { $paragraph_positions [$index] = 0; } } else { if (!isset ($paragraph_positions [$index]) || $paragraph_positions [$index] >= $paragraph_end_position || $paragraph_positions [$index] <= $paragraph_end_positions [$index - 1]) { $paragraph_positions [$index] = $paragraph_end_positions [$index - 1] + 1; } } } } } function get_paragraph_end_positions ($content, $multibyte, $paragraph_start_positions, $paragraph_end_strings, &$paragraph_positions, &$active_paragraph_positions) { $no_closing_tag = array ('img', 'hr', 'br'); foreach ($paragraph_end_strings as $paragraph_end_string) { $last_position = - 1; $paragraph_end_string = trim ($paragraph_end_string); if ($paragraph_end_string == '') continue; if (in_array ($paragraph_end_string, $no_closing_tag)) { if (preg_match_all ("/<$paragraph_end_string([^>]*?)>/", $content, $images)) { foreach ($images [0] as $paragraph_end) { if ($multibyte) { $last_position = mb_stripos ($content, $paragraph_end, $last_position + 1) + mb_strlen ($paragraph_end) - 1; $paragraph_positions [] = $last_position; $active_paragraph_positions [$last_position] = 1; } else { $last_position = stripos ($content, $paragraph_end, $last_position + 1) + strlen ($paragraph_end) - 1; $paragraph_positions [] = $last_position; $active_paragraph_positions [$last_position] = 1; } } } continue; } elseif ($paragraph_end_string == "#") { $paragraph_end = "\r\n\r\n"; if (!in_array ($last_content_position, $paragraph_positions)) { $paragraph_positions [] = $last_content_position; $active_paragraph_positions [$last_content_position] = 1; } } else $paragraph_end = ''; if ($multibyte) { while (mb_stripos ($content, $paragraph_end, $last_position + 1) !== false) { $last_position = mb_stripos ($content, $paragraph_end, $last_position + 1) + mb_strlen ($paragraph_end) - 1; if ($paragraph_end_string == "#") { $paragraph_positions [] = $last_position - 4; $active_paragraph_positions [$last_position - 4] = 1; } else { $paragraph_positions [] = $last_position; $active_paragraph_positions [$last_position] = 1; } } } else { while (stripos ($content, $paragraph_end, $last_position + 1) !== false) { $last_position = stripos ($content, $paragraph_end, $last_position + 1) + strlen ($paragraph_end) - 1; if ($paragraph_end_string == "#") { $paragraph_positions [] = $last_position - 4; $active_paragraph_positions [$last_position - 4] = 1; } else { $paragraph_positions [] = $last_position; $active_paragraph_positions [$last_position] = 1; } } } } // Consistency check if (count ($paragraph_start_positions) != 0) { foreach ($paragraph_start_positions as $index => $paragraph_start_position) { if ($index == count ($paragraph_start_positions) - 1) { if (!isset ($paragraph_positions [$index]) || $paragraph_positions [$index] <= $paragraph_start_position) { $paragraph_positions [$index] = strlen ($content) - 1; } } else { if (!isset ($paragraph_positions [$index]) || $paragraph_positions [$index] <= $paragraph_start_position || $paragraph_positions [$index] >= $paragraph_start_positions [$index + 1]) { $paragraph_positions [$index] = $paragraph_start_positions [$index + 1] - 1; } } } } } function ai_secret_key () { $key = ''; if (defined ('NONCE_KEY')) { $key = NONCE_KEY; } $key .= AD_INSERTER_VERSION; return (substr (preg_replace ("/[^A-Za-z]+/", '', base64_encode ($key)), 0, 16)); } //function ai_the_generator ($generator) { //// return preg_replace ('/content="(.*?)"/', 'content="$1, '.AD_INSERTER_NAME.' '. AD_INSERTER_VERSION.'"', $generator); // return $generator . PHP_EOL . ''; //} function ai_ampforwp_check_disabled () { if (is_multisite()) { $option_active_plugins = array_merge (array_flip (get_site_option ('active_sitewide_plugins', array ())), get_option ('active_plugins', array ())); } else $option_active_plugins = get_option ('active_plugins'); $present = false; foreach ($option_active_plugins as $option_active_plugin) { if ($option_active_plugin == AD_INSERTER_SLUG . '/ad-inserter.php') { $present = true; break; } } if (!$present) return false; if (function_exists ('ampforwp_api_request_disable_plugin')) { $option_active_plugins = ampforwp_api_request_disable_plugin ($option_active_plugins); } $disabled = true; foreach ($option_active_plugins as $option_active_plugin) { if ($option_active_plugin == AD_INSERTER_SLUG . '/ad-inserter.php') { $disabled = false; break; } } return $disabled; } function ai_amp_plugin_custom_css () { if (is_multisite()) { $option_active_plugins = array_merge (array_flip (get_site_option ('active_sitewide_plugins', array ())), get_option ('active_plugins', array ())); } else $option_active_plugins = get_option ('active_plugins'); // echo "
    ";
    //  print_r ($option_active_plugins);
    //  echo "
    "; foreach ($option_active_plugins as $option_active_plugin) { if ($option_active_plugin == 'amp-wp/amp-wp.php') { return true; } if ($option_active_plugin == 'better-amp/better-amp.php') { return true; } } return false; } function ai_primary_category () { $primary_category = ai_rank_math_primary_category (); if ($primary_category != '') { return $primary_category; } // Returns the first category if primary category is not defined $primary_category = ai_yoast_primary_category (); return $primary_category; } function ai_yoast_primary_category () { $primary_category = ''; $category = get_the_category (); // If post has a category assigned. if ($category) { if (class_exists ('WPSEO_Primary_Term')) { // Show the post's 'Primary' category, if this Yoast feature is available, & one is set $wpseo_primary_term = new WPSEO_Primary_Term ('category', get_the_id ()); $wpseo_primary_term = $wpseo_primary_term->get_primary_term (); $term = get_term ($wpseo_primary_term); if (is_wp_error ($term)) { // Default to first category (not Yoast) if an error is returned $primary_category = $category [0]->slug; } else { // Yoast Primary category $primary_category = $term->slug; } } else { // Default, display the first category in WP's list of assigned categories $primary_category = $category [0]->slug; } } return $primary_category; } function ai_rank_math_primary_category () { $primary_category = ''; if (class_exists ('RankMath')) { $primary_cat_id = get_post_meta (get_the_id (), 'rank_math_primary_category', true); if ($primary_cat_id) { $category = get_term ($primary_cat_id, 'category'); $primary_category = $category->slug; } } return $primary_category; } function ai_is_page_builder () { // echo $_SERVER ['HTTP_HOST'], ' ', $_SERVER ['REQUEST_URI'], "
    \n"; // global $ai_wp_data; // echo $ai_wp_data [AI_WP_PAGE_TYPE], "
    \n"; // Elemetor if (class_exists ('Elementor\Plugin') && (\Elementor\Plugin::$instance->editor->is_edit_mode () || \Elementor\Plugin::$instance->preview->is_preview_mode ())) { return true; } return false; } function ai_add_rewrite_rules () { if (get_option (AI_ADS_TXT_NAME) !== false) { add_rewrite_rule ('ads\.txt', str_replace (home_url () .'/', '', admin_url ('admin-ajax.php?action=ai_ajax&ads-txt=')), 'top'); } if (function_exists ('ai_add_rewrite_rules_2')) ai_add_rewrite_rules_2 (); } function ai_js_dom_ready ($js_code, $script_tag = true, $script_class = '') { $id = rand (100000, 999999) . rand (100000, 999999); $id_fn = ''; $code = ''; $inline_js = ai_inline_js (); if (!$inline_js) { $id_fn = '_fn'; } if ($script_class != '') { $script_class = ' class="' . $script_class . '"'; } if ($script_tag) { $code .= " "; $js_code = '/* AI_JS */' . $js_code . '/* AI_JS */'; } $code .= "ai_run_{$id} = function(){{$js_code}};"; if (!$inline_js) { $code .= "ai_run_{$id}{$id_fn} = function(){ai_wait_for_functions ().then (ai_run_{$id})}"; } $code .= " "; if ($script_tag) { $code .= " "; } $code .= "if (document.readyState === 'complete' || (document.readyState !== 'loading' && !document.documentElement.doScroll)) ai_run_{$id}{$id_fn} (); else document.addEventListener ('DOMContentLoaded', ai_run_{$id}{$id_fn});"; if ($script_tag) { $code .= " "; } return ($code); } function ai_extract_js_code ($code) { global $ai_wp_data; if (strpos ($code, '') !== false) { if (preg_match_all ('#/\* AI_JS \*/(.+?)/\* AI_JS \*/#s', $code, $js_matches)) { $js_code_dom_ready = ''; foreach ($js_matches [1] as $js_code) { $js_code_dom_ready .= $js_code."\n"; } $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] = $js_code_dom_ready . $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY]; } $code = preg_replace ('#(.+?)#s', '', $code); } return $code; } function ai_strip_js_markers ($code) { $code = preg_replace ('##s', '', $code); $code = preg_replace ('#/\* AI_JS \*/#s', '', $code); return ($code); } function ai_strip_w3tc_markers ($code) { if (defined ('W3TC_DYNAMIC_SECURITY')) { // $code = preg_replace ('#(.+?)#s', '', $code); $code = preg_replace ('##s', '', $code); } return ($code); } function ai_extract_debug_bar ($ai_code) { if (preg_match ('#
    #s', $ai_code, $match)) { $debug_bar = str_replace (array ('ai-debug-default', 'debug-viewport-invisible'), '', $match [0]); $debug_bar = preg_replace ('#(.*?)#s', $ai_code, $match)) { $w3tc_debug = $match [0]; } else $w3tc_debug = ''; return '
    ' . $debug_bar . $w3tc_debug . '
    '; } } function ai_w3tc_debug_info ($w3tc_debug, $class = '') { return '
    ' . implode ("\n", $w3tc_debug) . "
    \n"; } function ai_w3tc_block_start ($block) { global $ai_w3tc_nesting_level; if (!isset ($ai_w3tc_nesting_level)) { $ai_w3tc_nesting_level = 0; } $ai_w3tc_nesting_level ++; if ($ai_w3tc_nesting_level > 1) { ai_w3tc_log_run (''); } ai_w3tc_log_run ("BLOCK $block W3TC START"); } function ai_w3tc_block_end ($block, $ai_code, $ai_enabled, $ai_fallback, $ai_index) { global $ai_w3tc_debugging, $ai_w3tc_nesting_level; if (!isset ($ai_w3tc_nesting_level)) { $ai_w3tc_nesting_level = 0; } ai_w3tc_log_run ("BLOCK $block W3TC END" . ($ai_enabled ? '' : ': NOT ENABLED') . ' [' . (isset ($ai_fallback) ? $ai_fallback : '') . ',' . (isset ($ai_index) ? $ai_index : '') . ']'); $ai_w3tc_nesting_level --; if ($ai_w3tc_nesting_level != 0) { ai_w3tc_log_run (''); return $ai_code = str_replace ("", '', $ai_code); } // Placeholder for additional messages $ai_w3tc_debugging []= ""; $new_code = str_replace ("", ai_w3tc_debug_info ($ai_w3tc_debugging, "ai-w3tc-run"), $ai_code); $ai_w3tc_debugging = array (); return $new_code; } function ai_w3tc_block_end_message ($message, $ai_code) { return str_replace ("", $message . "\n", $ai_code); } function ai_w3tc_log_run ($w3tc_debug_text, $css = '') { global $ai_w3tc_debugging, $ai_w3tc_nesting_level; if (!isset ($ai_w3tc_debugging)) { $ai_w3tc_debugging = array (); } if (!isset ($ai_w3tc_nesting_level)) { $ai_w3tc_nesting_level = 0; } if ($css != '') { if (is_array ($w3tc_debug_text)) { foreach ($w3tc_debug_text as $index => $w3tc_debug_line) { $w3tc_debug_text [$index] = "" . $w3tc_debug_text [$index] . ''; } array_unshift ($w3tc_debug_text, "\n"); } else $w3tc_debug_text = "" . $w3tc_debug_text . ''; } if (isset ($ai_w3tc_nesting_level) && $ai_w3tc_nesting_level > 1) { if (is_array ($w3tc_debug_text)) { foreach ($w3tc_debug_text as $index => $w3tc_debug_line) { $w3tc_debug_text [$index] = str_repeat (' ', $ai_w3tc_nesting_level - 1) . $w3tc_debug_text [$index]; } array_unshift ($w3tc_debug_text, "\n"); } else $w3tc_debug_text = str_repeat (' ', $ai_w3tc_nesting_level - 1) . $w3tc_debug_text; } if (is_array ($w3tc_debug_text)) { $ai_w3tc_debugging = array_merge ($ai_w3tc_debugging, $w3tc_debug_text); } else $ai_w3tc_debugging []= $w3tc_debug_text; } function ai_w3tc_execute_php ($code, &$ai_index, &$ai_fallback) { global $ai_wp_data; if (strpos ($code, '(.*?)#', $code, $php_codes); // $html_codes = explode ('[?#?]', preg_replace ('#(.*?)#', '[?#?]', $code)); preg_match_all ('##', $code, $php_codes); $html_codes = explode ('[?#?]', preg_replace ('##', '[?#?]', $code)); ob_start (); if ($ai_wp_data [AI_W3TC_DEBUGGING]) { ai_w3tc_log_run (' EXECUTE PHP' . ' ['.(isset ($ai_fallback) ? $ai_fallback : '') . ',' . (isset ($ai_index) ? $ai_index : '').']'); } foreach ($html_codes as $index => $html_code) { if ($html_code != '') { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { ai_w3tc_log_run (' HTML: ' . strlen ($html_code) . ' bytes'); } echo $html_code; } if ($index < count ($html_codes) - 1) { if ($ai_wp_data [AI_W3TC_DEBUGGING]) { ai_w3tc_log_run ($w3tc_info []= ' PHP: ' . strlen ($php_codes [1][$index]) . ' bytes'); } eval ($php_codes [1][$index]); } } $html = ob_get_clean(); if ($ai_wp_data [AI_W3TC_DEBUGGING]) { ai_w3tc_log_run (' EXECUTE END' . ' ['.(isset ($ai_fallback) ? $ai_fallback : '') . ',' . (isset ($ai_index) ? $ai_index : '').']'); } return ($html); } function ai_get_post_id () { $queried_object = get_queried_object (); $post_id = get_the_ID (); if (defined ('AI_USE_GET_QUERIED_OBJECT') && AI_USE_GET_QUERIED_OBJECT && $queried_object && isset ($queried_object->ID)) { return $queried_object->ID; } if ($queried_object && $post_id) { return $post_id; } if ($queried_object && isset ($queried_object->ID)) { return $queried_object->ID; } return $post_id; } function ai_get_post_meta () { $meta_value = get_post_meta (ai_get_post_id (), '_adinserter_block_exceptions', true); return $meta_value; } function ai_post_is_in_child_categories ($category) { $category_to_check = get_term_by ('slug', $category, 'category'); if ($category_to_check) { $post_id = ai_get_post_id (); $children = get_term_children ($category_to_check->term_id, 'category'); if ($children && in_category ($children, $post_id)) return true; } return false; } function ai_post_is_in_child_taxonomies ($taxonomy, $term) { $taxonomy_to_check = get_term_by ('slug', $term, $taxonomy); if ($taxonomy_to_check) { $post_id = ai_get_post_id (); $children = get_term_children ($taxonomy_to_check->term_id, $taxonomy); if ($children && has_term ($children, $taxonomy, $post_id)) return true; } return false; } function ai_get_permalink ($id) { if (defined ('AI_CONNECTED_WEBSITE')) { $connected_website = get_transient (AI_CONNECTED_WEBSITE); if ($connected_website !== false) return ''; } return (get_permalink ($id)); } function ai_get_edit_post_link ($id) { if (defined ('AI_CONNECTED_WEBSITE')) { $connected_website = get_transient (AI_CONNECTED_WEBSITE); if ($connected_website !== false) return ''; } return (get_edit_post_link ($id)); } function ai_setcookie ($name, $value, $expire, $path, $samesite = 'Lax') { if (PHP_VERSION_ID < 70300) { setcookie ($name, $value, $expire, $path . '; samesite=' . $samesite); return; } setcookie ($name, $value, [ 'expires' => $expire, 'path' => $path, 'samesite' => $samesite, ]); } function ai_process_viewport_separators ($code, $shortcode_data) { global $ai_wp_data; $viewport_shortcode_data = $shortcode_data ['viewport']; preg_match_all ('/\|viewport([0-9]+?)\|/', $code, $matches); if (count ($matches [1]) != 0) { $viewport_parameters = array (); foreach ($matches [1] as $match) { $viewport_parameters []= $viewport_shortcode_data [$match]; } if ($ai_wp_data [AI_WP_AMP_PAGE]) { $code = preg_replace ('/\|viewport([0-9]+?)\|/', '', $code); } else $code = preg_replace ('/\|viewport([0-9]+?)\|/', AD_VIEWPORT_SEPARATOR, $code); } $processed_code = $code; if (strpos ($code, AD_VIEWPORT_SEPARATOR) !== false) { $processed_code = ''; $codes = explode (AD_VIEWPORT_SEPARATOR, $code); if (trim ($codes [0]) == '') { unset ($codes [0]); $codes = array_values ($codes); } else array_unshift ($viewport_parameters, array ('viewport' => '', 'code' => '')); foreach ($codes as $viewport_code_index => $viewport_code) { $viewport_code = ai_process_fallback_separator ($viewport_code, $shortcode_data); $separator_viewports = explode (',', strtolower ($viewport_parameters [$viewport_code_index]['viewport'])); foreach ($separator_viewports as $index => $separator_viewport) { $separator_viewports [$index] = trim ($separator_viewport); } $viewport_classes = ''; for ($viewport = 1; $viewport <= 6; $viewport ++) { $viewport_name = strtolower (get_viewport_name ($viewport)); if ($viewport_name != '') { $viewport_found = in_array ($viewport_name, $separator_viewports); if ($viewport_found) { $viewport_classes .= " ai-viewport-" . $viewport; } } } if ($viewport_classes == '') { if ($viewport_parameters [$viewport_code_index]['viewport'] != '') { // Invalid viewport - Code will never be inserted continue; } } $viewport_classes = trim ($viewport_classes); if ($viewport_classes != '') { $viewport_class = " class='" . $viewport_classes . "'"; } else $viewport_class = ''; $insert_code = get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT; switch (strtolower ($viewport_parameters [$viewport_code_index]['code'])) { case 'insert': $insert_code = true; break; case 'show': $insert_code = false; break; } if ($insert_code) { $code_id = 'ai-viewport-code-' . rand (1000, 9999) . rand (1000, 9999); if ($viewport_classes != '') { $viewport_classes = 'ai-viewports ' . $viewport_classes . ' '; } $ai_code = base64_encode (ai_strip_js_markers ($viewport_code)); $processed_code .= "
    \n"; if (!get_disable_js_code ()) { // $js_code = "ai_insert_code (document.getElementsByClassName ('$code_id') [0]);"; $js_code = "ai_insert_code_by_class ('$code_id');"; $processed_code .= ai_strip_js_markers (ai_js_dom_ready ($js_code)); } } else { if ($viewport_class != '') { $processed_code .= "\n" . $viewport_code . "\n
    \n"; } else $processed_code .= $viewport_code; } } } return $processed_code; } function ai_process_fallback_separator ($code, $shortcode_data) { global $ai_wp_data; $fallback_shortcode_data = $shortcode_data ['fallback']; $processed_code = $code; if (strpos ($code, AD_FALLBACK_SEPARATOR) !== false) { $codes = explode (AD_FALLBACK_SEPARATOR, $code); $processed_code = $codes [0]; // AdSense unfilled if (strtolower ($fallback_shortcode_data [0]['fallback']) == 'adsense') { $insert_code = get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_CLIENT_SIDE_INSERT; switch (strtolower ($fallback_shortcode_data [0]['code'])) { case 'insert': $insert_code = true; break; case 'show': $insert_code = false; break; } $empty_fallback_code_class = trim ($codes [1]) == '' ? " ai-empty-code" : ''; $processed_code = "
    " . $processed_code . "
    \n"; if ($insert_code) { $ai_code = base64_encode (ai_strip_js_markers (trim ($codes [1]))); $processed_code .= "
    \n"; } else { $processed_code .= "
    \n" . trim ($codes [1]) . "\n
    \n"; } } } return $processed_code; } function replace_ai_tags ($content, $general_tag = '') { global $ai_wp_data; if (preg_match_all ('#\[ADINSERTER (.+)\]#i', $content, $matches)) { if (count ($matches [0])) { foreach ($matches [0] as $match) { $content = str_replace ($match, do_shortcode ($match), $content); } } } if (strpos ($content, '{') === false) return $content; if (isset ($ai_wp_data [AI_SHORTCODES]['atts']) && is_array ($ai_wp_data [AI_SHORTCODES]['atts']) && !empty ($ai_wp_data [AI_SHORTCODES]['atts'])) { foreach ($ai_wp_data [AI_SHORTCODES]['atts'] as $name => $value) { $content = preg_replace ("/\{\#$name(\:[^{}]*?)?\#\}/i", $value, $content); } } if (!isset ($ai_wp_data [AI_TAGS])) { $general_tag = str_replace ("&", " and ", $general_tag); $title = $general_tag; $short_title = $general_tag; $category = $general_tag; $categories = $general_tag; $categories_array = array (); $category_slugs_array = array (); $categories_spaces = $general_tag; $short_category = $general_tag; $tag = $general_tag; $tags = $general_tag; $tags_array = array (); $tag_slugs_array = array (); $tags_spaces = $general_tag; $categories_single_quotes = $general_tag; $categories_double_quotes = $general_tag; $smart_tag = $general_tag; if ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_CATEGORY) { $wp_categories = get_queried_object (); if (!empty ($wp_categories) && $wp_categories instanceof WP_Term) { $first_category = $wp_categories; $category = str_replace ("&", "and", $first_category->name); if ($category == _x('Uncategorized', 'category name', 'ad-inserter')) $category = $general_tag; } else { $category = $general_tag; } if (strpos ($category, ",") !== false) { $short_category = trim (substr ($category, 0, strpos ($category, ","))); } else $short_category = $category; if (strpos ($short_category, "and") !== false) { $short_category = trim (substr ($short_category, 0, strpos ($short_category, "and"))); } $title = $category; $title = str_replace ("&", "and", $title); $short_title = implode (" ", array_slice (explode (" ", $title), 0, 3)); $tag = $short_title; $smart_tag = $short_title; // $wp_categories = get_the_category(); // if (!empty ($wp_categories)) { // foreach ($wp_categories as $single_category) { // $categories_array [] = str_replace (array ("&", "#"), array ("and", ""), isset ($single_category->name) ? $single_category->name : ''); // $category_slugs_array [] = $single_category->slug; // } $wp_categories = get_queried_object(); if ($wp_categories instanceof WP_Term) { $categories_array [] = str_replace (array ("&", "#"), array ("and", ""), isset ($wp_categories->name) ? $wp_categories->name : ''); $category_slugs_array [] = $wp_categories->slug; $categories = implode (',', $categories_array); $categories_spaces = implode (' ', $categories_array); $categories_single_quotes = implode ("','", $categories_array); if ($categories_single_quotes != '') $categories_single_quotes = "'".$categories_single_quotes."'"; $categories_double_quotes = implode ('","', $categories_array); if ($categories_double_quotes != '') $categories_double_quotes = '"'.$categories_double_quotes.'"'; } } elseif (is_tag ()) { $title = single_tag_title('', false); $title = str_replace (array ("&", "#", '"', "'"), array ("and", "", '', ''), $title); $short_title = implode (" ", array_slice (explode (" ", $title), 0, 3)); $category = $short_title; if (strpos ($category, ",") !== false) { $short_category = trim (substr ($category, 0, strpos ($category, ","))); } else $short_category = $category; if (strpos ($short_category, "and") !== false) { $short_category = trim (substr ($short_category, 0, strpos ($short_category, "and"))); } $tag = $short_title; $smart_tag = $short_title; $wp_tags = get_the_tags (); if (!empty ($wp_tags)) { foreach ($wp_tags as $single_tag) { $tags_array [] = str_replace (array ("&", "#"), array ("and", ""), isset ($single_tag->name) ? $single_tag->name : ''); $tag_slugs_array [] = $single_tag->slug; } $tags = implode (',', $tags_array); $tags_spaces = implode (' ', $tags_array); } } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_SEARCH) { $title = get_search_query(); $title = str_replace ("&", "and", $title); $short_title = implode (" ", array_slice (explode (" ", $title), 0, 3)); $category = $short_title; if (strpos ($category, ",") !== false) { $short_category = trim (substr ($category, 0, strpos ($category, ","))); } else $short_category = $category; if (strpos ($short_category, "and") !== false) { $short_category = trim (substr ($short_category, 0, strpos ($short_category, "and"))); } $tag = $short_title; $smart_tag = $short_title; } elseif ($ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_STATIC || $ai_wp_data [AI_WP_PAGE_TYPE] == AI_PT_POST) { $title = get_the_title(); $title = str_replace (array ("&", '"', "'"), array ("and", '', ''), $title); $short_title = implode (" ", array_slice (explode (" ", $title), 0, 3)); $wp_categories = get_the_category(); if (!empty ($wp_categories)) { foreach ($wp_categories as $single_category) { if (isset ($single_category->slug)) { $categories_array [] = str_replace (array ("&", "#"), array ("and", ""), isset ($single_category->name) ? $single_category->name : ''); $category_slugs_array [] = $single_category->slug; } } $categories = implode (',', $categories_array); $categories_spaces = implode (' ', $categories_array); $categories_single_quotes = implode ("','", $categories_array); if ($categories_single_quotes != '') $categories_single_quotes = "'".$categories_single_quotes."'"; $categories_double_quotes = implode ('","', $categories_array); if ($categories_double_quotes != '') $categories_double_quotes = '"'.$categories_double_quotes.'"'; $first_category = $categories_array [0]; $category = $first_category; if ($category == _x('Uncategorized', 'category name', 'ad-inserter')) $category = $general_tag; } else { $category = $short_title; } if (strpos ($category, ",") !== false) { $short_category = trim (substr ($category, 0, strpos ($category, ","))); } else $short_category = $category; if (strpos ($short_category, "and") !== false) { $short_category = trim (substr ($short_category, 0, strpos ($short_category, "and"))); } $wp_tags = get_the_tags(); if (!empty ($wp_tags)) { foreach ($wp_tags as $single_tag) { $tags_array [] = str_replace (array ("&", "#"), array ("and", ""), isset ($single_tag->name) ? $single_tag->name : ''); $tag_slugs_array [] = $single_tag->slug; } $tags = implode (',', $tags_array); $tags_spaces = implode (' ', $tags_array); $first_tag = $tags_array [0]; $tag = $first_tag; $tag_array = array (); foreach ($wp_tags as $tag_data) { if (isset ($tag_data->name)) $tag_array [] = explode (" ", $tag_data->name); } $selected_tag = ''; if (count ($tag_array [0]) == 2) $selected_tag = $tag_array [0]; elseif (count ($tag_array) > 1 && count ($tag_array [1]) == 2) $selected_tag = $tag_array [1]; elseif (count ($tag_array) > 2 && count ($tag_array [2]) == 2) $selected_tag = $tag_array [2]; elseif (count ($tag_array) > 3 && count ($tag_array [3]) == 2) $selected_tag = $tag_array [3]; elseif (count ($tag_array) > 4 && count ($tag_array [4]) == 2) $selected_tag = $tag_array [4]; if ($selected_tag == '' && count ($tag_array) >= 2 && count ($tag_array [0]) == 1 && count ($tag_array [1]) == 1) { if (isset ($tag_array [0][0]) && isset ($tag_array [1][0])) { if (strpos ($tag_array [0][0], $tag_array [1][0]) !== false) $tag_array = array_slice ($tag_array, 1, count ($tag_array) - 1); } if (isset ($tag_array [0][0]) && isset ($tag_array [1][0])) { if (strpos ($tag_array [1][0], $tag_array [0][0]) !== false) $tag_array = array_slice ($tag_array, 1, count ($tag_array) - 1); } if (isset ($tag_array [0][0]) && isset ($tag_array [1][0])) { if (count ($tag_array) >= 2 && count ($tag_array [0]) == 1 && count ($tag_array [1]) == 1) { $selected_tag = array ($tag_array [0][0], $tag_array [1][0]); } } } if ($selected_tag == '') { $first_tag = $tags_array [0]; $smart_tag = implode (" ", array_slice (explode (" ", $first_tag), 0, 3)); } else $smart_tag = implode (" ", $selected_tag); $smart_tag = str_replace (array ("&", "#"), array ("and", ""), $smart_tag); } else { $tag = $category; $smart_tag = $category; } } $title = str_replace (array ("'", '"'), array ("’", "”"), $title); $title = html_entity_decode ($title, ENT_QUOTES, "utf-8"); $short_title = str_replace (array ("'", '"'), array ("’", "”"), $short_title); $short_title = html_entity_decode ($short_title, ENT_QUOTES, "utf-8"); $search_query = ""; if (isset ($_SERVER['HTTP_REFERER'])) { $referrer = $_SERVER['HTTP_REFERER']; } else $referrer = ''; if (preg_match ("/[\.\/](google|yahoo|bing|ask)\.[a-z\.]{2,5}[\/]/i", $referrer, $search_engine)){ $referrer_query = parse_url ($referrer); $referrer_query = isset ($referrer_query ["query"]) ? $referrer_query ["query"] : ""; parse_str ($referrer_query, $value); $search_query = isset ($value ["q"]) ? $value ["q"] : ""; if ($search_query == "") { $search_query = isset ($value ["p"]) ? $value ["p"] : ""; } } if ($search_query == "") $search_query = $smart_tag; // $author = get_the_author_meta ('display_name'); // $author_name = get_the_author_meta ('first_name') . " " . get_the_author_meta ('last_name'); // if ($author_name == ' ') $author_name = $author; $url = remove_debug_parameters_from_url ((isset ($_SERVER ['HTTPS']) && $_SERVER ['HTTPS'] === 'on' ? "https" : "http") . '://'. $_SERVER ['HTTP_HOST'] . $_SERVER ['REQUEST_URI']); $post_id = ai_get_post_id (); $ai_wp_data [AI_TAGS]['TITLE'] = $title; $ai_wp_data [AI_TAGS]['SHORT_TITLE'] = $short_title; $ai_wp_data [AI_TAGS]['CATEGORY'] = $category; $ai_wp_data [AI_TAGS]['CATEGORIES'] = $categories; $ai_wp_data [AI_TAGS]['CATEGORIES_ARRAY'] = $categories_array; $ai_wp_data [AI_TAGS]['CATEGORY_SLUGS_ARRAY'] = $category_slugs_array; $ai_wp_data [AI_TAGS]['CATEGORIES_SPACES'] = $categories_spaces; $ai_wp_data [AI_TAGS]['CATEGORIES_SINGLE_QUOTES'] = $categories_single_quotes; $ai_wp_data [AI_TAGS]['CATEGORIES_DOUBLE_QUOTES'] = $categories_double_quotes; $ai_wp_data [AI_TAGS]['SHORT_CATEGORY'] = $short_category; $ai_wp_data [AI_TAGS]['TAG'] = $tag; $ai_wp_data [AI_TAGS]['TAGS'] = $tags; $ai_wp_data [AI_TAGS]['TAGS_ARRAY'] = $tags_array; $ai_wp_data [AI_TAGS]['TAG_SLUGS_ARRAY'] = $tag_slugs_array; $ai_wp_data [AI_TAGS]['TAGS_SPACES'] = $tags_spaces; $ai_wp_data [AI_TAGS]['SMART_TAG'] = $smart_tag; $ai_wp_data [AI_TAGS]['SEARCH_QUERY'] = $search_query; // $ai_wp_data [AI_TAGS]['AUTHOR'] = $author; // $ai_wp_data [AI_TAGS]['AUTHOR_NAME'] = $author_name; $ai_wp_data [AI_TAGS]['POST_ID'] = $post_id; $ai_wp_data [AI_TAGS]['URL'] = $url; } // Author should not be cached $author = get_the_author_meta ('display_name'); $author_login = get_the_author_meta ('user_login'); $author_name = get_the_author_meta ('first_name') . " " . get_the_author_meta ('last_name'); if ($author_name == ' ') $author_name = $author; $ai_wp_data [AI_TAGS]['AUTHOR'] = $author; $ai_wp_data [AI_TAGS]['AUTHOR_NAME'] = $author_name; $ai_wp_data [AI_TAGS]['AUTHOR_LOGIN'] = $author_login; $ad_data = preg_replace ("/{title}/i", $ai_wp_data [AI_TAGS]['TITLE'], $content); $ad_data = preg_replace ("/{short-title}/i", $ai_wp_data [AI_TAGS]['SHORT_TITLE'], $ad_data); $ad_data = preg_replace ("/{category}/i", $ai_wp_data [AI_TAGS]['CATEGORY'], $ad_data); $ad_data = preg_replace ("/{categories}/i", $ai_wp_data [AI_TAGS]['CATEGORIES'], $ad_data); $ad_data = preg_replace ("/{categories-spaces}/i", $ai_wp_data [AI_TAGS]['CATEGORIES_SPACES'], $ad_data); $ad_data = preg_replace ("/{categories-single-quotes}/i", $ai_wp_data [AI_TAGS]['CATEGORIES_SINGLE_QUOTES'], $ad_data); $ad_data = preg_replace ("/{categories-double-quotes}/i", $ai_wp_data [AI_TAGS]['CATEGORIES_DOUBLE_QUOTES'], $ad_data); $ad_data = preg_replace ("/{short-category}/i", $ai_wp_data [AI_TAGS]['SHORT_CATEGORY'], $ad_data); $ad_data = preg_replace ("/{tag}/i", $ai_wp_data [AI_TAGS]['TAG'], $ad_data); $ad_data = preg_replace ("/{tags}/i", $ai_wp_data [AI_TAGS]['TAGS'], $ad_data); $ad_data = preg_replace ("/{tags-spaces}/i", $ai_wp_data [AI_TAGS]['TAGS_SPACES'], $ad_data); $ad_data = preg_replace ("/{smart-tag}/i", $ai_wp_data [AI_TAGS]['SMART_TAG'], $ad_data); $ad_data = preg_replace ("/{search-query}/i", $ai_wp_data [AI_TAGS]['SEARCH_QUERY'], $ad_data); $ad_data = preg_replace ("/{author}/i", $ai_wp_data [AI_TAGS]['AUTHOR'], $ad_data); $ad_data = preg_replace ("/{author-name}/i", $ai_wp_data [AI_TAGS]['AUTHOR_NAME'], $ad_data); $ad_data = preg_replace ("/{author-login}/i", $ai_wp_data [AI_TAGS]['AUTHOR_LOGIN'], $ad_data); $ad_data = preg_replace ("/{post-id}/i", $ai_wp_data [AI_TAGS]['POST_ID'], $ad_data); $ad_data = preg_replace ("/{short_title}/i", $ai_wp_data [AI_TAGS]['SHORT_TITLE'], $ad_data); $ad_data = preg_replace ("/{short_category}/i", $ai_wp_data [AI_TAGS]['SHORT_CATEGORY'], $ad_data); $ad_data = preg_replace ("/{smart_tag}/i", $ai_wp_data [AI_TAGS]['SMART_TAG'], $ad_data); $ad_data = preg_replace ("/{search_query}/i", $ai_wp_data [AI_TAGS]['SEARCH_QUERY'], $ad_data); $ad_data = preg_replace ("/{author_name}/i", $ai_wp_data [AI_TAGS]['AUTHOR_NAME'], $ad_data); $ad_data = preg_replace ("/{block-number}/i", isset ($ai_wp_data [AI_CURRENT_BLOCK_NUMBER]) ? $ai_wp_data [AI_CURRENT_BLOCK_NUMBER] : '', $ad_data); $ad_data = preg_replace ("/{block-name}/i", isset ($ai_wp_data [AI_CURRENT_BLOCK_NAME]) ? $ai_wp_data [AI_CURRENT_BLOCK_NAME] : '', $ad_data); $ad_data = preg_replace ("/{block-name-encoded}/i", isset ($ai_wp_data [AI_CURRENT_BLOCK_NAME]) ? urlencode ($ai_wp_data [AI_CURRENT_BLOCK_NAME]) : '', $ad_data); $ad_data = preg_replace ("/{url}/i", $ai_wp_data [AI_TAGS]['URL'], $ad_data); if (preg_match ("/{reusable-block-([\d]+)}/i", $ad_data, $block_match)) { $block_id = $block_match [1]; $reusable_block = ''; if (!empty ($block_id) && (int) $block_id == $block_id) { $reusable_block = get_post_field ('post_content', $block_id); } $ad_data = preg_replace ("/".$block_match [0]."/i", $reusable_block, $ad_data); } if (preg_match_all ("/{tag-([\d+])}/i", $ad_data, $tag_matches)) { foreach ($tag_matches [1] as $tag_index) { $tag_to_replace = isset ($ai_wp_data [AI_TAGS]['TAGS_ARRAY'][$tag_index - 1]) ? $ai_wp_data [AI_TAGS]['TAGS_ARRAY'][$tag_index - 1] : ''; $ad_data = preg_replace ("/{tag-$tag_index}/i", $tag_to_replace, $ad_data); } } if (preg_match_all ("/{tag-slug-([\d+])}/i", $ad_data, $tag_matches)) { foreach ($tag_matches [1] as $tag_index) { $tag_to_replace = isset ($ai_wp_data [AI_TAGS]['TAG_SLUGS_ARRAY'][$tag_index - 1]) ? $ai_wp_data [AI_TAGS]['TAG_SLUGS_ARRAY'][$tag_index - 1] : ''; $ad_data = preg_replace ("/{tag-slug-$tag_index}/i", $tag_to_replace, $ad_data); } } if (preg_match_all ("/{category-([\d+])}/i", $ad_data, $category_matches)) { foreach ($category_matches [1] as $category_index) { $category_to_replace = isset ($ai_wp_data [AI_TAGS]['CATEGORIES_ARRAY'][$category_index - 1]) ? $ai_wp_data [AI_TAGS]['CATEGORIES_ARRAY'][$category_index - 1] : ''; $ad_data = preg_replace ("/{category-$category_index}/i", $category_to_replace, $ad_data); } } if (preg_match_all ("/{category-slug-([\d+])}/i", $ad_data, $category_matches)) { foreach ($category_matches [1] as $category_index) { $category_to_replace = isset ($ai_wp_data [AI_TAGS]['CATEGORY_SLUGS_ARRAY'][$category_index - 1]) ? $ai_wp_data [AI_TAGS]['CATEGORY_SLUGS_ARRAY'][$category_index - 1] : ''; $ad_data = preg_replace ("/{category-slug-$category_index}/i", $category_to_replace, $ad_data); } } if (function_exists ('ai_tags')) ai_tags ($ad_data); // Replace default values {tag:default} $default_value_tags = preg_match_all ("/\{\#[a-zA-Z\-_][a-zA-Z0-9\-_]*?\:(.*?)\#\}/", $ad_data, $matches); if ($default_value_tags) { foreach ($matches [0] as $index => $match) { $ad_data = str_replace ($match, $matches [1][$index], $ad_data); } } return $ad_data; } function ai_ad_label_code () { global $ai_wp_data; $ad_label = get_ad_label (true); $ad_label = apply_filters ("ai_ad_label", $ad_label); if (strpos ($ad_label, '<') === false && strpos ($ad_label, '>') === false) { $ad_label = '
    ' . $ad_label . '
    '; } $unfiltered_html = $ai_wp_data [AI_UNFILTERED_HTML]; if (defined ('DISALLOW_UNFILTERED_HTML') && DISALLOW_UNFILTERED_HTML) { $unfiltered_html = false; } if (!$unfiltered_html) { $ad_label = wp_kses ($ad_label, 'post'); } return $ad_label .= "\n"; } function ai_php_enabled () { $php_enabled = !(defined ('DISALLOW_FILE_EDIT') && DISALLOW_FILE_EDIT) && !(defined ('DISALLOW_FILE_MODS') && DISALLOW_FILE_MODS); return apply_filters ('ai_php_enabled', $php_enabled); } function ai_inline_js () { // return (get_wait_for_jquery () || !defined ('AI_EXTERNAL_JS')); return (get_wait_for_jquery () == AI_WAIT_FOR_JQUERY_ENABLED || (get_javascript_code_mode () == AI_JAVASCRIPT_CODE_INLINE && !defined ('AI_EXTERNAL_JS'))); } function ai_unserialize ($string) { // Clear objects - O:5:"Class":0:{} // $string = preg_replace ('#o:\d+:"[a-z0-9_]+":\d+:{.*?}#i', '', $string); return @unserialize ($string, ['allowed_classes' => false]); } // =========================================================================================== global $block_object, $ai_wp_data, $ad_inserter_globals, $ai_last_check, $ai_last_time, $ai_total_plugin_time, $ai_total_block_php_time, $ai_total_hook_php_time, $ai_processing_log, $ai_db_options_extract, $ai_db_options, $block_insertion_log; if (!defined ('AD_INSERTER_PLUGIN_DIR')) define ('AD_INSERTER_PLUGIN_DIR', plugin_dir_path (__FILE__)); define ('AI_WP_DEBUGGING_', 0); define ('AI_DEBUG_PROCESSING_', 0x01); define ('AI_URL_DEBUG_', 'ai-debug'); define ('AI_URL_DEBUG_PROCESSING_', 'ai-debug-processing'); define ('AI_URL_DEBUG_PROCESSING_FE_', 'ai-debug-processing-fe'); define ('AI_URL_DEBUG_PHP_', 'ai-debug-php'); if (isset ($_GET [AI_URL_DEBUG_PHP_]) && $_GET [AI_URL_DEBUG_PHP_] != '') { if (isset ($_COOKIE ['AI_WP_DEBUGGING'])) { ini_set ('display_errors', 1); error_reporting (E_ALL); } } $ai_wp_data [AI_WP_DEBUGGING_] = 0; $start_time = 0; if (!is_admin()) { if (!isset ($_GET [AI_URL_DEBUG_]) || $_GET [AI_URL_DEBUG_] != 0) if (isset ($_GET [AI_URL_DEBUG_PROCESSING_]) || isset ($_GET [AI_URL_DEBUG_PROCESSING_FE_]) || (isset ($_COOKIE ['AI_WP_DEBUGGING']) && ($_COOKIE ['AI_WP_DEBUGGING'] & AI_DEBUG_PROCESSING_) != 0)) { if ((isset ($_GET [AI_URL_DEBUG_PROCESSING_]) && $_GET [AI_URL_DEBUG_PROCESSING_] == 1) || (isset ($_GET [AI_URL_DEBUG_PROCESSING_FE_]) && $_GET [AI_URL_DEBUG_PROCESSING_FE_] == 1)) { $ai_wp_data [AI_WP_DEBUGGING_] |= AI_DEBUG_PROCESSING_; $ai_total_plugin_time = 0; $start_time = microtime (true); $ai_total_block_php_time = 0; $ai_total_hook_php_time = 0; $ai_last_time = microtime (true); $ai_processing_log = array (); ai_log ('INITIALIZATION START'); } } } // Version check global $wp_version, $version_string, $subversion_string, $filter_hooks; if (version_compare ($wp_version, "4.6", "<")) { exit ('Ad Inserter ' . __('requires WordPress 4.6 or newer', 'ad-inserter') . '. '. __('Please update!', 'ad-inserter') . ''); } //if (version_compare (phpversion (), "5.6", "<")) { // exit ('Ad Inserter ' . __('requires PHP 5.6 or newer', 'ad-inserter') . '. '. __('Please update!', 'ad-inserter') . ''); //} $filter_hooks = array (); if (isset ($_GET ['ai-safe-mode'])) { define ('AI_SAFE_MODE', 1); } //include required files require_once AD_INSERTER_PLUGIN_DIR.'class.php'; require_once AD_INSERTER_PLUGIN_DIR.'constants.php'; require_once AD_INSERTER_PLUGIN_DIR.'settings.php'; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("AFTER REQUIRE: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms"); $subversion_array = explode ("-", AD_INSERTER_VERSION); $subversion_string = isset ($subversion_array [1]) ? '-'.$subversion_array [1] : ''; $version_array = explode (".", $subversion_array [0]); $version_string = ""; foreach ($version_array as $number) { $version_string .= sprintf ("%02d", $number); } $ai_wp_data [AI_WP_URL] = remove_debug_parameters_from_url (); $ad_inserter_globals = array (); $block_object = array (); $block_insertion_log = array (); $ai_wp_data [AI_WP_PAGE_TYPE] = AI_PT_NONE; $ai_wp_data [AI_WP_AMP_PAGE] = false; $ai_wp_data [AI_WP_USER_SET] = false; $ai_wp_data [AI_WP_USER] = AI_USER_NOT_LOGGED_IN; $ai_wp_data [AI_CONTEXT] = AI_CONTEXT_NONE; $ai_wp_data [AI_SERVER_SIDE_DETECTION] = false; $ai_wp_data [AI_CLIENT_SIDE_DETECTION] = false; $ai_wp_data [AI_MOBILE_DETECT_JS] = false; $ai_wp_data [AI_TRACKING] = false; $ai_wp_data [AI_STICKY_WIDGETS] = false; $ai_wp_data [AI_STICK_TO_THE_CONTENT] = false; $ai_wp_data [AI_ANIMATION] = false; $ai_wp_data [AI_CLOSE_BUTTONS] = false; $ai_wp_data [AI_IFRAMES] = false; $ai_wp_data [AI_DISABLE_CACHING] = false; $ai_wp_data [AI_CLIENT_SIDE_INSERTION] = false; $ai_wp_data [AI_LAZY_LOADING] = false; $ai_wp_data [AI_PAGE_BLOCKS] = 0; $ai_wp_data [AI_GEOLOCATION] = false; //$ai_wp_data [AI_HTML_ELEMENT_SELECTION] = isset ($_POST ['html_element_selection']) ? (bool) $_POST ['html_element_selection'] : false; $ai_wp_data [AI_HTML_ELEMENT_SELECTION] = false; $ai_wp_data [AI_MBSTRING_LOADED] = extension_loaded ('mbstring'); $ai_wp_data [AI_PROCESSING_TIME] = false; $ai_wp_data [AI_FORCE_SERVERSIDE_CODE] = false; $ai_wp_data [AI_CODE_FOR_IFRAME] = false; $ai_wp_data [AI_HEAD_CODES] = array (); $ai_wp_data [AI_HEAD_GROUPS] = array (); $ai_wp_data [AI_ACTIVE_GROUP_NAMES] = array (); $ai_wp_data [AI_CHECK_BLOCK] = false; $ai_wp_data [AI_POST_POSITION] = AI_POST_POSITION_BEFORE_POST; $ai_wp_data [AI_FOOTER_JS_CODE_DOM_READY] = ''; $ai_wp_data [AI_FOOTER_INLINE_SCRIPTS] = false; $ai_wp_data [AI_W3TC_DEBUGGING] = false; $ai_wp_data [AI_CLIENT_SIDE_FILTER_CHECKS] = false; $ai_wp_data [AI_PARALLAX] = false; $ai_wp_data [AI_PHP_PROCESSING] = ai_php_enabled (); $ai_wp_data [AI_UNFILTERED_HTML] = !(defined ('DISALLOW_UNFILTERED_HTML') && DISALLOW_UNFILTERED_HTML); ai_load_settings (); $ai_wp_data [AI_NO_JQUERY_CODE] = defined ('AI_NO_JQUERY') || !get_wait_for_jquery () || (isset ($_GET [AI_URL_DEBUG_NO_JQUERY]) && !empty ($_GET [AI_URL_DEBUG_NO_JQUERY])); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("AFTER LOAD SETTINGS: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms"); $ai_wp_data [AI_BACKEND_JS_DEBUGGING] = get_backend_javascript_debugging (); $ai_wp_data [AI_FRONTEND_JS_DEBUGGING] = get_frontend_javascript_debugging (); if (isset ($_GET [AI_URL_DEBUG_PHP]) && $_GET [AI_URL_DEBUG_PHP] == '1') { if (get_remote_debugging ()) { ini_set ('display_errors', 1); error_reporting (E_ALL); } } if (isset ($_GET [AI_URL_DEBUG_JAVASCRIPT]) && $_GET [AI_URL_DEBUG_JAVASCRIPT] == '1' || isset ($_GET [AI_URL_DEBUG_TRACKING]) && $_GET [AI_URL_DEBUG_TRACKING] == '1') { if (get_remote_debugging ()) { $ai_wp_data [AI_FRONTEND_JS_DEBUGGING] = true; } } if (defined ('AI_ADBLOCKING_DETECTION') && AI_ADBLOCKING_DETECTION) { $ai_wp_data [AI_ADB_DETECTION] = $block_object [AI_ADB_MESSAGE_OPTION_NAME]->get_enable_manual (); $logged_in_key = defined ('LOGGED_IN_KEY') ? LOGGED_IN_KEY : 'key'; if ($ai_wp_data [AI_ADB_DETECTION]) { $key = '#AI'; if (defined ('AUTH_KEY')) { $key .= AUTH_KEY; } if (defined ('NONCE_KEY')) { $key .= NONCE_KEY; } $adb_2_name = AI_ADB_2_DEFAULT_NAME; define ('AI_ADB_COOKIE_VALUE', substr (preg_replace ("/[^A-Za-z]+/", '', strtolower (md5 ($logged_in_key.md5 ($key)))), 0, 8)); $script_path = AD_INSERTER_PLUGIN_DIR.'js'; $script = $script_path.'/sponsors.js'; if (is_writable ($script_path) && is_writable ($script)) { $adb_2_name = substr (preg_replace ("/[^A-Za-z]+/", '', strtolower (md5 ($logged_in_key).md5 ($key))), 0, 8); $js_ok = false; if (file_exists ($script)) { if (strpos (file_get_contents ($script), $adb_2_name) !== false) $js_ok = true; } if (!$js_ok) { file_put_contents ($script, 'window.' . $adb_2_name . '=true;'); define ('AI_ADB_2_FILE_RECREATED', true); } } define ('AI_ADB_2_NAME', $adb_2_name); } } if (function_exists ('ai_load_globals')) ai_load_globals ($start_time); if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) ai_log ("AFTER LOAD GLOBALS: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms"); if (get_dynamic_blocks () == AI_DYNAMIC_BLOCKS_SERVER_SIDE_W3TC) { if (!in_array ('w3-total-cache/w3-total-cache.php', get_option ('active_plugins'))) { define ('AI_NO_W3TC', true); if (!defined ('W3TC_DYNAMIC_SECURITY')) define ('W3TC_DYNAMIC_SECURITY', 'W3 Total Cache plugin not active'); } if (!defined ('W3TC_DYNAMIC_SECURITY')) { $string = AD_INSERTER_PLUGIN_DIR; if (defined ('AUTH_KEY')) $string .= AUTH_KEY; if (defined ('LOGGED_IN_KEY')) $string .= LOGGED_IN_KEY; define ('W3TC_DYNAMIC_SECURITY', md5 ($string)); } } if ($ai_wp_data [AI_SERVER_SIDE_DETECTION] && !is_admin ()) { require_once AD_INSERTER_PLUGIN_DIR.'includes/mobiledetect/Mobile_Detect.php'; $detect = new ai_Mobile_Detect; define ('AI_MOBILE', $detect->isMobile ()); define ('AI_TABLET', $detect->isTablet ()); define ('AI_PHONE', AI_MOBILE && !AI_TABLET); define ('AI_DESKTOP', !AI_MOBILE); } else { define ('AI_MOBILE', true); define ('AI_TABLET', true); define ('AI_PHONE', true); define ('AI_DESKTOP', true); } if (isset ($_POST [AI_FORM_SAVE])) define ('AI_SYNTAX_HIGHLIGHTING', isset ($_POST ["syntax-highlighter-theme"]) && $_POST ["syntax-highlighter-theme"] != AI_OPTION_DISABLED); else define ('AI_SYNTAX_HIGHLIGHTING', get_syntax_highlighter_theme () != AI_OPTION_DISABLED); if (isset ($_POST [AI_FORM_SAVE])) { $ai_wp_data [AI_DISABLE_TRANSLATION] = isset ($_POST ['disable_translation']) ? $_POST ['disable_translation'] : DEFAULT_DISABLE_TRANSLATION; } else $ai_wp_data [AI_DISABLE_TRANSLATION] = get_disable_translation () || (isset ($_GET [AI_URL_DEBUG_TRANSLATION]) && get_remote_debugging ()); if (!$ai_wp_data [AI_DISABLE_TRANSLATION]) { add_action ('plugins_loaded', 'ai_load_plugin_textdomain_hook'); add_filter ('load_textdomain_mofile', 'ai_load_textdomain_mofile', 10, 2); } add_action ('plugins_loaded', 'ai_plugins_loaded'); add_action ('init', 'ai_init_hook'); add_action ('wp_loaded', 'ai_wp_loaded_hook'); add_action ('admin_menu', 'ai_admin_menu_hook'); add_action ('admin_notices', 'ai_admin_notice_hook'); add_action ('wp', 'ai_wp_hook'); add_action ('wp_enqueue_scripts', 'ai_wp_enqueue_scripts_hook' ); //add_action ('upgrader_process_complete', 'ai_upgrader_process_complete_hook', 10, 2); if (function_exists ('ai_system_output_check')) $ai_system_output = ai_system_output_check (); else $ai_system_output = false; //if (defined ('AI_BUFFERING')) { // add_action ('get_header', 'ai_buffering_start_hook', 99999); //} if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0 || $ai_system_output) { add_action ('shutdown', 'ai_shutdown_hook', 0); } register_activation_hook (AD_INSERTER_PLUGIN_DIR.'ad-inserter.php', 'ai_activation_hook'); register_deactivation_hook (AD_INSERTER_PLUGIN_DIR.'ad-inserter.php', 'ai_deactivation_hook' ); add_action ('widgets_init', 'ai_widgets_init_hook'); add_action ('add_meta_boxes', 'ai_add_meta_box_hook'); add_action ('save_post', 'ai_save_meta_box_data_hook'); if (function_exists ('ai_hooks')) ai_hooks (); add_filter ('plugin_action_links_'.plugin_basename (__FILE__), 'ai_plugin_action_links'); add_action ('after_plugin_row_' . AD_INSERTER_SLUG . '/ad-inserter.php', 'ai_after_plugin_row_1', 10, 3); add_filter ('plugin_row_meta', 'ai_set_plugin_meta', 99999, 2); //add_filter ('the_generator', 'ai_the_generator'); // If using Autoptimize plugin //add_filter ('autoptimize_filter_js_replacetag','ai_ao_override_js_replacetag', 10, 1); if (is_admin () === true) { add_action ('wp_ajax_ai_ajax_backend', 'ai_ajax_backend'); add_action ('wp_ajax_ai_ajax', 'ai_ajax'); add_action ('wp_ajax_nopriv_ai_ajax', 'ai_ajax'); } if (!get_option (AI_INSTALL_NAME)) { update_option (AI_INSTALL_NAME, time ()); } if (defined ('AI_PLUGIN_TRACKING') && AI_PLUGIN_TRACKING) { add_action ('plugins_loaded', 'ai_install_dst'); function ai_install_dst () { global $ai_wp_data, $ai_total_plugin_time; if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { ai_log ("PLUGINS LOADED INSTALL DST START"); $ai_processing_time_active = $ai_wp_data [AI_PROCESSING_TIME]; $ai_wp_data [AI_PROCESSING_TIME] = true; $start_time = microtime (true); } if (!class_exists ('DST_Client')) { require_once dirname (__FILE__) . '/includes/dst/dst.php'; } if (!function_exists ('ai_start_dst') && defined ('DST_Client::DST_FILTER_OPTIONS')) { function ai_start_dst () { global $ai_dst; $dst_settings = array ( 'main_file' => __FILE__, 'tracking_url' => 'https://analytics.adinserter.pro/', 'track_local' => true, 'tracking' => DST_Client::DST_TRACKING_OPTIN, 'use_email' => DST_Client::DST_USE_EMAIL_OFF, 'multisite_tracking' => DST_Client::DST_MULTISITE_SITES_TRACKING_WAIT_FOR_MAIN, 'deactivation_form' => true, 'admin_ip_tracking' => true, 'notice_icon' => AD_INSERTER_PLUGIN_IMAGES_URL.'icon-50x50.jpg', ); if (function_exists ('ai_dst_settings')) ai_dst_settings ($dst_settings); $ai_dst = new DST_Client ($dst_settings); } function ai_notice_text ($text) { $text = // translators: Opt-in message: Thank you for installing Ad Inserter (plugin name with HTML tags will be added) __("Thank you for installing", 'ad-inserter') . ' [STRONG][NAME][/STRONG]. ' . // translators: Opt-in message: %s: HTML tags sprintf (__("We would like to %s track its usage %s on your site. This is completely optional and can be disabled at any time.", 'ad-inserter'), '', '') . '[P]' . __("We don't record any sensitive data, only information regarding the WordPress environment and plugin usage, which will help us to make improvements to the plugin.", 'ad-inserter'); return $text; } function ai_dst_options ($options) { global $ai_db_options, $ai_db_options_extract; if (isset ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) && is_string ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) && strlen ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS]) != 0) { $used_blocks = count (unserialize ($ai_db_options_extract [AI_EXTRACT_USED_BLOCKS])); } else $used_blocks = ''; $install_timestamp = get_option (AI_INSTALL_NAME); if ($install_timestamp) { $install_date = $install_timestamp; } else $install_date = ''; if (isset ($ai_db_options [AI_OPTION_GLOBAL]['TIMESTAMP'])) { $settings_date = $ai_db_options [AI_OPTION_GLOBAL]['TIMESTAMP']; } else $settings_date = ''; $count_posts = wp_count_posts (); $options ['posts'] = is_numeric ($count_posts->publish) ? $count_posts->publish : 0; $options ['blocks'] = $used_blocks; $options ['installation'] = $install_date; $options ['settings'] = $settings_date; $options ['notice_review'] = ($review = get_option ('ai-notice-review')) ? $review : ''; $options ['remote_debugging'] = get_remote_debugging (); $options ['block_class'] = get_block_class_name (); if (function_exists ('ai_dst_options_2')) ai_dst_options_2 ($options); return ($options); } function ai_dst_form_text ($form) { $form ['body'] = '

    ' . // translators: Deactivation message: %s: HTML tags sprintf (__("Looking for %s Documentation, %s %s Common Settings, %s %s Quick Start %s or help for %s AdSense ads? %s The plugin doesn't work with your theme? %s Let us know %s and we'll try to help you.", 'ad-inserter'), '', '', '', '', '', '', '', '', '', '') . '

    ' . $form ['body']; return ($form); } add_filter (DST_Client::DST_FILTER_OPTIN_NOTICE_TEXT . AD_INSERTER_SLUG, 'ai_notice_text'); add_filter (DST_Client::DST_FILTER_OPTIONS . AD_INSERTER_SLUG, 'ai_dst_options'); add_filter (DST_Client::DST_FILTER_FORM_TEXT . AD_INSERTER_SLUG, 'ai_dst_form_text'); ai_start_dst (); } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { if (!$ai_processing_time_active) { $ai_total_plugin_time += microtime (true) - $start_time; $ai_wp_data [AI_PROCESSING_TIME] = false; } ai_log ("PLUGINS LOADED INSTALL DST END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } } } if (($ai_wp_data [AI_WP_DEBUGGING] & AI_DEBUG_PROCESSING) != 0) { $ai_total_plugin_time += microtime (true) - $start_time; ai_log ("INITIALIZATION END: ". number_format (1000 * (microtime (true) - $start_time), 2)." ms\n"); } // =========================================================================================== if (!class_exists ('ai_widget')) { class ai_widget extends WP_Widget { function __construct () { parent::__construct ( false, // Base ID AD_INSERTER_NAME, // Name array ( // Args 'classname' => 'ai_widget', // translators: %s: Ad Inserter 'description' => sprintf (__('%s block.', 'ad-inserter'), AD_INSERTER_NAME) ) ); } function form ($instance) { global $block_object; // Output admin widget options form $widget_title = !empty ($instance ['widget-title']) ? $instance ['widget-title'] : ''; $block = isset ($instance ['block']) ? $instance ['block'] : 1; if ($block > 96) $block = 1; $sticky = isset ($instance ['sticky']) ? $instance ['sticky'] : 0; // translators: widget title if ($block == 0) $title = __('Processing log', 'ad-inserter'); // translators: widget title elseif ($block == - 1) $title = __('Dummy widget', 'ad-inserter'); // translators: widget title elseif ($block == - 2) $title = __('Debugging tools', 'ad-inserter'); elseif ($block >= 1) { $obj = $block_object [$block]; $title = '[' . $block . '] ' . $obj->get_ad_name(); if (!empty ($widget_title)) $title .= ' - ' . $widget_title; // translators: block status (widget title) if ($obj->get_disable_insertion ()) $title .= ' - ' . _x('PAUSED', 'block', 'ad-inserter') . ' '; if (!$obj->get_enable_widget ()) $title .= ' - ' . __('WIDGET DISABLED', 'ad-inserter'); } else $title = __('Unknown block', 'ad-inserter'); $url_parameters = '&start=' . (intval (($block - 1) / 16) * 16 + 1); $settings_page = get_menu_position () == AI_SETTINGS_SUBMENU ? 'options-general.php?page=ad-inserter.php' : 'admin.php?page=ad-inserter.php'; ?>

    ' value="0" /> ' name='get_field_name ('sticky'); ?>' value='1' >

    WARNING: Please note that saving settings in Ad Inserter will clear all settings that are available only in the Pro version (additional block and plugin settings)!", 'ad-inserter'); ?>

    ЮVh=2qAB ! (D⛖飵M 't?5c)J{sU;}ڢ]-7iww\G3qP3J<ճ€S|_eyP_%&ec׵m] m ZaVjce RNM|bv.0 ‡0{ndq3R]-eI/ZW|S-Ͷ={aQu4~jpO |6I 0*"aA1 )T x;VGFv}[kg>" wzAſ]T';Bd[BsԫF>zqPZ񽤓4f![ k}i^n~/[͸jd2R0㠄$Q&\1JYu픒HqQ]WڽDi=CiS/d#q Vty2C,j JR7$RT&Ǜ9ZQ1c$o'z9R^BOx/"qeMysٔaiC(BЂ;WBHR(0Su6k^r#拄xz*:KZ.CEm9HHP9wEӌ=7H]kv(u>)P :>8{i}BTƚ-e jժˏJQuRJA#XZ8=alRP2lzY'zjy&Mݪ 4GCH!G *Xh 䓺=%e+oPئ7ow|JgK̓oצB.B0d2JjK<%;lqVWz1?䫿ŢġB BUw/<=iyHٵ}tm)OܡC?"OŔωP$[o* x{l?OdJ55rOrBxՁ{ VRb `6ב6HD,^պjkhT!#uF~zr=8kMҧY^{^#g= %9O{LÅ7'rK.45[Bވr'd]A33-5Cf+ .OKi v:XZt 먕qZ>'hdxG#TiG#)Ԍ |VҶ!lm-ǖzj4Vb||f7q,UʲtI>9YiWA~wܟXH}W=9=YB[2tNb!xPw-[Ar+PXDwJ֟*)N FFt#$q-^u(aO0Ǯ MsJih҈CM%[@U}/Bw;@IZFT-Ny:*E9rw[T'S}0#T"!ی2 KG*Z A]jgU\jz}˜5[-0{'P0UvI$3,n޵=Ժ&&$[>"-t)[>z"zcGy<(a ie8~zm|CLy4Gq\Ayq<Ȟ*ʤ[\^* ;6O$y^Y4:cnISsbx(\iY>y E winr!%JV8u;UÆnpi͋e/!>(.4EJ9oKkS=;T,d'qᱦ)r=VصR,[d`RggQ.>uLv$ɈYKov2}=zFrcqeFcv%1樒ߗ}^P e ( B B % *ZR:p+gofܹ r\9FZХBK!4FC?H(ydo3dbB^! )Ϸ_Vʵ_}J!5ǖFC?H(ydo3b™ Ij1:+rcw/z mMUT.q8pU>RhOWFC?H( qI &(ýWR@Kuo zLkFAȯ>n: LO)0=F2k ]丞ѦT<#)޶&=?LVZ*ZTy56r8͙omX(PF (Q(PD$+ߋ?So_O8vATpAuz`q,%`$mw 2m=C<##^ib?}zs/=&/~_qP>̾ iGݦE!\}T #ǐ7 ˎ;0Nĕcn1]ZVtdl>@u5jM5 mEuein ;ҚjOJU#6{Ko_e"K#2⃂Gfm̺]mx'#bETA]:Ԫ߻`mIԊJ**)$SvP3Р#54=ݾT>VʇУ=} ''1G7󴆲fSm+M\;4+U>(h{O4;Ӱf3he."n!X褩`B -v?w+ cw9UTQi7^J{_j&`Xz-2Ւs1U^{ï+7סã~ҿ#}zmD8A'VP36XOf=xu>F߇Xϻ+^eƾ2p;3Jia щP dl<({jA)aR#CJpN39&IVA8~7⫗=wfu<׭ ̀p2RdHaycR2oR6y0K*ۺ 4-0羔p[6@miByy VA󕜓ڧF4 Omھv@yyN. R)_˔"Uia_?ԡItEws!Ь%6;` [4UVʺYȚR{dVw-ʶ3ffz\\!HgMVٍL>gH&` ۘOp{ >(!Z[8s%G|E=b?лiCȇG}4p-jʤ~]:ԯ[HQ/9L?%+.C[nVm CrSᶃDKct$ mp5N5K-u8eZ.A_)\ʵ LuILQm* ~jL3ookrL;JA]+\PFI5t׹>Lnv{bКu6@BZEIí{ꆧT[ `>B7qŷ]^#[Xiq!2> )~/'^RH 5n}uxP&FT`bl8=_N) @wJA;SE Rx EJʂK#`H8`w=?,c*H?ѩqEHrN7=̒5DXry;lkK#72}izh ~ҳ:2oW|Okӧ/e3Gة>pVyU1MBlz駭vYg!mD03}4Z?]bM]~ Z51rTJ-;ߥBu r: JSt@ŏSo Ggz5 r̺(c1݇Q$Q3?RA'S]^J!<뇪(ԓV"nenjw۩+eaJxTGGG*&`3G=)ѽ[pV XVw¥W1;y,,IqZ ZFFG[IQx)eY w|+.E-,8w {o`ⶨ6BڒUطGTs()T;eIiI <I7?UD}cU3 t k]It$zQRF][^P/e }zXp۔&ĻS$GLxGLD q^$Re!)Fw1\Ǎzv *5t)Ѭwit?'חTmNSDuR*R8/~56:z딇KHq AR_5 JGN*.Z#8$Hj.u! hnE??0OH\>Y  S ;d2yyAL=w-6%M=T0;sRQEw Ü3p\4,!ԤvE5h備H *API;M.gGrs,v *m[䁹)zJ5jǮ QL_'ShQNJZ |:hOQϥczl7[r8RWfIE'wZ a SB {D3}4ޫ.;JJ-e9K#vT3&s!>‚r`/fM <$r>;%Ɛ5P\tR PrseԪR\TVe( `ޜ- L2aiJm+$E}-dm֚m 9<8K=raۯAKNbr; _9p<3]JKrP6ps$Zܒ"RUBWiQn"kBl B`kII7`FJtuvmftI#bB\S@z =RB#\[sț9V"5%)R#Sqx{m*=A Hr7P}sռ%GWlzU2XY >ـ7IQQt ]^.)63nfrsE 9@D $TN7"Gufy,;:nqӑ&2ND$9zҦ!&Gc]}N{& q\;o KnsR}--2݂Ũus~5i%˲h%C?p2j 1~S;ݴkOD żTKs )<#{) 1WWx:Gk&3P&\>̄}ǖГФcIН.3^-#YN(z( f@Z[V=[tPI$1*7zI#B3΢1*!p\ qx BRIVz`u>X N@w8!!YK!˝j>jSᑂ}u)W 2ޅ=0iH+uGG0#9 mZWPXӮ԰Գ6${}TN'9w'hF.lN+OvŨrŚZ@Kr]SXPGY#^Z:gjI!GVfJNHJ7t{IZ̰tV*W߫J"vGMvmjDHFbb\ Iyo]2=sLK!L\X)AlrMWNsv ~RoҴ9b _vYm&uJvЎ~b#/&k8ʘ%)%YQXIiM{2,oYGc."9ԤV{:xӻb&PKDf־U''mUv˫)i H#A6HP#9fJ"%` 7>4*Jj0,u$ќ2A:m>Pv6H (iNd ]A쌤<2T + nl8X砺>i(>kP#ԩ&j$t|ָ{7]L-\=t"ʋW!Lxf;E3ʥ+#R$&mn*LD[SME%$gm.#z 4r8T4e>(emS.H=ZР>0a{܋6(X 1Rh8Èگ7LhmRAOq8GN#L>D8&d *q棈Є%*Ivj4G<{N~؇vioJ>dIxT~LOzSVLBUU P,i|:1tTE%<q;ГetRre> | V3:fKd}~QLqoi `zVEmak  'n4RٍQ4XRWfdfl'8http://ns.adobe.com/xap/1.0/ 00599DEC88AFD379FB54D654052E077F 0533C6BB00C1DD6BE56630A08913300F 07B4A1C9A59F8A04ECD73B3CC65A3E5A 07C8D728849BB47DEDF47438AE70AC1A 07F797FD521C8DD086F0F358BCEE08EF 09338BC404BDADE129FA37EDED29BCFC 0A330ACF220D4EA0E1B1D1F3D2B75F41 0B232A9B543705AA6EBF28E2479EABF7 0C9D68DDECC11E309687458D26AE60F5 0E6A1F25F98CE4A295DAC86053184324 109C18F45EDD7A4A86F9BFFB29824D5E 10DD06585D77085BD5E50308FDA1E660 10FCDF3C0415B3BBB02CF44B90F8D6E3 15F5C1BC21D293A7E1606C8DEFA424A5 1C9B415BFE697A56AB15E9C5C54E66EF 1CD4715CE9F41C5226F72B06F2ED7A89 1E0D3A3664AF6C5118872A59BDBC8146 1E6DE62646E2E91A454FEE6E97019D45 1F906B9F3C6E9A171CFE065E311FF885 20F6CFA26CD259B52265DE5B3F2E0294 2A44994DBD012765BEAEEA8ABD86DCC9 2FA5E8F5326F31708F60CB8D600AC074 313C2BF86E68069C185A84BB4E6BA7CF 358793FB4E86B0250B5FA08309D41DAD 36A014AA999BED8A09BB533F4EC43A85 3799F4C7163D76C3DA6324A8FAA04600 41263266829E1239566974AB88D9F4EF 42B0B69FB747D73067ACFC5132936734 48DEBBDD8B33C2DD9A7A25ADBFC50680 496B88CE2DC1C02762A77BB29C5AE453 4C7F435012CEEFB47CF19EC51CE7BED6 51233FFC6B2DAD4925E7FDBD07FED17B 51E03AC9BB65DC1F81A921D46482BB9D 577825DFA9197C8AEEF425722E495160 5EA1625A59B681F8E073D3F857E692DC 633FA9BB7B1F38DD873ED7C726A1AE28 649A4B13862B00A4789791074EE35296 6622C1A46D811FCED9F2620FF55C5F9D 6F1C221EA45BB4B346560CD15B7E1C80 709B5863F703E74111CFE54C52CD999A 7271CE9E8BEF69D0E5CDD7C2DB2C7254 728266F8AEC2A5EE8F918D6C03B2E432 745908E89650661C6138EAAFD0352848 78BF03119D5981F65C7F86E5E4305874 7D00860DFA9D54E5EF76EA1393D19C9E 7DC7AC4900452A9D7F4F0EA671BB3C35 7F16352B7E51B6DD5CD845EFF625B774 821FB0C3C924EC1C20E6FB6B47CCF606 8B04A49A7246492C48E85C89421D1FCD 8B53BE27011F52B057145F409E5B2C08 8BC366704BE94D81770B780F6AC29C51 925443CDF0CB03A899D27BE493F7182F 9348A901E872E5AC7DC185E802C35ECC 94ABA1AD1AE5E9A3F941A9A92B2CAEED 9D821C050C851698D9809EFF53D41E5C A03F12CD155FAF177B16AE4A0D4F15BF A087F9BBFD4C5EBE646E5634A3C6A3DA A22C3C8E891C10162A4680CA76AAB20A A2715B60BBE9F657AE46AA13ED08CCFA A8173C13C8E4D90243766A5844D7638D A8AFACA68A8EB1B40C371E6DA55F6772 A8B8C7B75218C53F5B4646049328E604 A98D464C47BB8934BFCDC28A8A7B21EB AA13888C4B5642B2D390056898CD2A00 AD22F88623C86E8B60AA7D5C984F4495 B32311BC4735EEF2E24CDFFA26F69180 BB33B0F2103351BAD5C6FAE22D1FBE1A BE5BB085026CF96C471E5E45F8B7E0E1 BF20B595D2A13030D8B481BED6DB2DA3 BFC3BFF7799991D4D8BA1A379EF711A3 C044FDC16D26D2DB4B102D605650CB04 C48913A34CF0640C82E1A82A5E3606C5 C4D4746514D893F63ED7EA36056DE22D C5448739577CCEA0112756CFEC751C71 D1A187FC7CFFD8FE5F4213E9DA264FC7 D7AD019A48F23DBE01573C7A2535774F D9F2109FC65DB475968C2F3EEB43C173 DA45DE7D66FC34330EE2B3E3CB627AF9 EE0408E4BAE6E24F576267507289BD2F F4CD26396B32CE850AF735B5F4DF0BA0 F7121E962388DB88F30161D58D3060B4 F90FA269629778AFA723AE0E7375845D FD633D490470BF4D2621D477680439EC adobe:docid:photoshop:268e54d8-ad96-11e6-9875-c3ae9fe9b346 adobe:docid:photoshop:2a59b17c-dcc7-11e6-837e-9c42691083e8 adobe:docid:photoshop:2d0698d5-abdc-11e6-b149-85202e9dcfc7 adobe:docid:photoshop:4158b484-dcc7-11e6-837e-9c42691083e8 adobe:docid:photoshop:5558be49-dbce-1177-ab74-a19abbfe5183 adobe:docid:photoshop:5c2ada9e-c82a-4c42-a001-2938ef771d3c adobe:docid:photoshop:5dc8381b-9a4d-1842-beda-d4cdd957b27f adobe:docid:photoshop:6f08e69c-6f30-6345-a3b9-8ffcc31546ef adobe:docid:photoshop:73c10a4b-248b-f940-9f1f-dfe6ba72c230 adobe:docid:photoshop:86d125b8-f60e-8d45-843f-497b7a35c557 adobe:docid:photoshop:9175e5d5-82f4-9744-b09f-89bed622cc69 adobe:docid:photoshop:a1289762-4b71-fd4d-8a14-735ec142fc9f adobe:docid:photoshop:ac5278a4-e963-d744-bfaf-a0706f313565 adobe:docid:photoshop:c6f6e563-0a9d-f646-afc7-e48dc5531f11 adobe:docid:photoshop:d1283862-1d24-bb4c-bf20-bf6c6c671880 adobe:docid:photoshop:d7a30376-750f-a141-ae2c-7810495ce369 adobe:docid:photoshop:ec58a44f-900c-e34c-bb1f-fc2b0bdc11e9 uuid:18317BB61454DD11B072AAB0678C6EC0 uuid:33F867AF77B0DD118BB88B63F587CB88 uuid:AEB72E0F065BE21190E6A53B8DEAD2D4 uuid:BAF36C8477B0DD118BB88B63F587CB88 xmp.did:018011740720681183D1B7155E0063D6 xmp.did:0280117407206811822A8DD347035589 xmp.did:0280117407206811822AE41C914C1686 xmp.did:04157CAC262D11E58547B515CFE93C26 xmp.did:058011740720681183D18FFDC0EE7A2A xmp.did:07D64A4A80BEE511850C97A9C358DB5D xmp.did:0880117407206811822A9D48829E614E xmp.did:09F9F4BF4EABE211B304C27C3A7348DE xmp.did:1ABC1A91C930E3119FEDA52BE0ECF468 xmp.did:210df20c-2bdc-a245-8468-bb2373d445e4 xmp.did:271790e7-c17b-2045-8d0f-fcc48173fd2f xmp.did:291f6c60-43a0-aa47-aac8-9ee6d6689e03 xmp.did:2F4B4B4CE929E011A014897789896DBE xmp.did:33EBFD7C072068118083DCA71E68BBCE xmp.did:38ccb7d3-baa2-4d45-9022-17c1c8456f96 xmp.did:3B665E6D422EE21198B2FAEE9FB93FAD xmp.did:4B41B34A08206811822ACF19180E81B2 xmp.did:4c0383bf-ceee-2548-9da5-931b192dcbbd xmp.did:50dabc4a-2411-7f4f-9959-2a44c05ce311 xmp.did:59c0351a-61f6-8f49-a6e8-90e15e8b3e9b xmp.did:5B5B472C08206811822ACB6E691C24FF xmp.did:5C81318856FD11E680B1BE05A91D299F xmp.did:5FA7C617ADCE11E49E7AF0F29752DE80 xmp.did:5FA7C61FADCE11E49E7AF0F29752DE80 xmp.did:5FD1E3FAADCE11E49E7AF0F29752DE80 xmp.did:60AC9636392911E396C9D7FB51F41FBF xmp.did:6588AB2708206811822AAE066D9BD385 xmp.did:67310723ADCF11E49BE6F9F1B1E4BE86 xmp.did:6B18ED2B09206811822AA56E3BF141E6 xmp.did:6fecbf38-97ef-49dc-9236-d7f74d6fd234 xmp.did:71CD42FF07206811822AECF9DD639D3E xmp.did:730c5884-6066-fe42-8417-0289b26a87af xmp.did:7623F5E469EF11E693D49CDFE8DC4142 xmp.did:7D04D006CF5EE211AAC2972AE1B78D81 xmp.did:7a34502e-468a-c741-b916-0a5833b37a15 xmp.did:847678728B30E011A851E97219B738EB xmp.did:879429ca-b04b-144a-88b5-dc4b560dc849 xmp.did:8CF1E12208206811822A846271F1967B xmp.did:8E73F883665DE511A04D991EFD9AD566 xmp.did:90EF34C5C84111E3B553CF8512AFA90D xmp.did:93F0067308206811822A8ACFDFF16C2A xmp.did:956ACC61C84111E3B553CF8512AFA90D xmp.did:95ED3A62C84111E3B553CF8512AFA90D xmp.did:983bac09-bf39-8045-bf6e-6254de390d83 xmp.did:98a7ecab-ff62-f04d-97f1-d09506489261 xmp.did:A35C883921A8E211B1F1F4EE24B0D37A xmp.did:C073799A07206811808382444E3CD50D xmp.did:C0F85CE7AB39E21195FEBBF63031080C xmp.did:C473799A07206811808382444E3CD50D xmp.did:C92518F2EAF011E2A1B0C590D1E4749B xmp.did:D9D4CE3908206811822AA56E3BF141E6 xmp.did:E3D8EF35646F11E2B4C5B0E48626874B xmp.did:EBD9C7450A206811822ABB58BDE15284 xmp.did:F2DF51DC072068118083B3CB38A72423 xmp.did:ac392b14-21a5-3244-9067-cf8102e47a14 xmp.did:aceb1982-7525-a94b-916e-d19cb60bbbb0 xmp.did:b0e9bea9-1df3-f94b-bda9-dbe6e16b97dc xmp.did:c0018f82-4194-cf42-aec7-e9281d5f8c7d xmp.did:c7210d8a-526e-f841-9325-7305615e29cc xmp.did:d337ca5a-de17-ce40-9f65-47f9a3332a50 xmp.did:d829aad8-4e14-3d47-af9a-65103f51b1b5 xmp.did:f154d5ed-58a6-4231-a61e-0d7f3718c019 xmp.did:f4e274f8-93cc-874b-8407-5432174b5893 xmp.did:f8230346-b777-4575-a8c1-44248ca36c28 xmp.did:fc7a3868-622f-d841-aa8f-b946306700e0 xmp.did:fe943ebe-7e53-4c41-912f-141b4c594374 (2Photoshop 3.08BIMZ%G8BIM%}Ǿ pvN8BIM: printOutputPstSboolInteenumInteImg printSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oGrn doub@oBl doub@oBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMHH8BIM&?8BIM Z8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM 8BIM8BIM08BIM- 8BIM@@`9@p8BIM8BIM_Ad type 3 (B) 250x250nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIMY8BIM , Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?I%)$,l֍@8hUi4ܛ}1 c$`?uEZNXѥm;mҊ֟Lu!lY=N/F!]ֿL!l@ QsSөw[.Ϣ۬ƭò~KG}Sn!VnU˫˭ӧrrlV4z~7}?-EHU_Odt'u݈f\s0RbfU=7O%~Y{ᆰ_WGDzzͮvPi[ղk^:In!ud്v_?[6]v7Qã?m;.׷轩)S:v%N2us.mfsY];"P31ef[_.ztk_۬dߪXyw̜kse )^w˰ѳm7ӭ2.ǿoq_Wm?:=#O%2OB wPWP|I;)*5t~Ε/da"]e6㾦dcu?2j}~~X}O uɆĒI%?I%f59-zfk~G*qw]NV.6f5Ul}s1):NfSkyU4p^+×PA r?%O2C oO#,pܫv;~vN^?Zjrz_=*k?6Fգk1^fGռwqĭnD}YE87bH#o鏨c#|\y%/ތaRgz]Ot<@>̌ZLFص/n?u^n3Q%{[s>(ueѳNOa;mFO,#B!2Rϒ_hcM='xuV<Um֏Wr}?izU[=Sm6>2_v^c*}ΦΗ0Vq+:ȹ_ܚvSgw[=u,f֝evW&qh}ks2oׯ_JCK87g驕RMm ֵX11 \vGA=6^lòUCEؖXK?XZ:ٛk|; 幾%xou2lߩ׳k_camP`ˠ:OC/wfUceHJWO F)Y_N5s##:ҳO\?8;[C)pic13kٻٽ%ud`Sp/ϫ̿?/,_Co}A /vN%_}t9&곞(SIdB15gmev?fܒaZ𸞉$II%)$IJ\os6}!n.7rJ{=Kc,>Wk۔v8~/؆2J}#k)mW_L6eNhnvFkS??:0 |  24ŵ mzOdPU&}Zϣ˃c#OW;3'_Sj4yV1ӓ]bdVeonjW3{S^S{J&N;&&g1Wck:O׌ o}L5W2ap;,!-f&v"@:=QUG.e2Zր=k~k>3} Ŵ2_cA@{?yNZ9}v1Smoc&Dg|ʨu@-ꦶ;s;+S.,~uAy< kkw殇'[Xr(Z6;6QC3=qapMzo[OֶoHkXl.:}~C^- }X2F"r!8H{^d_kPCsX͕]kbJ$ Շ[Cxkeo]F/z?kͺקdP7:?vU,sXSYxz4Id)lb@x}辶rq?Qn^e\ёgA.if^_A-Yٹg?*MX\,k{15\r> &-~3ĭ ?7+dSXc]U=HJHC%4ח&D]7ծ:XU./*;?9qeΌX5#N7-.:u |g}'qk?ԽjDhj4_y/r?`8uj ۪PFtq?=0}=~%/x%]S.' kJ$Yèw=|~{?Y @c:u n[XpmcC\Njq7"Yw~ZYUKjy{\IsճߺfM@f㞬Ki5$K} 't׫1njpԮ|R / $= S?8>>%۪3ح7⚍VC1=:]iкGghgEZ,e?,aremzGUzva׵ƗCZαm{܋_LMu:Xem i?Gn?J_`uql]eXm{kW _e5Z뭰@G~;tUOеX@=_՗zmX+fwpѐݭvx;O9k300 o?s+{vgVM OʚX1omi Lgrb8/|sV`?%:Hc sf5V0z\LƳ ף!v1)fV鋭ۙgos}a2SoR}dV&[߹u~Y&OP1e:EvUmKuVz=OJ+VXT>U`e,s#ǿvѹT՝+ƚ 쯱h'تK'-M}+ݍEAU73ʽ'T(mfO߻췢d`.wIь[s,nELv=/.Նȧ!oi =:'^taL۾C\-,wjk%`oNuyb^(}ޝ鹞߽̱?HF.:P;n&p-E̺ۻ:,}t7IYZ:7Qzy]?:]ۯyŵˢU,gsߏF+7]_?AW!p`-n#gor,g+6]w5_dO?l{/Wc]MNmy.nϳ2}G4>c}' 痷ْY[ kq/hiU1VO^?WNy&Lcf7vUs}OK_m}YP%Ǿ1ʳ+6>Ac\j{ίmͯث:DΞP~u~:wSEi !]uʺ e6ǿGzX.Ith': ൽj@+K0Om$AH8JN  =XDv uT]8:S+$Y^=kX(f`n[auuz^:{ڐGMKd1c<&D^ tl)7u^93װ.s/vEN럃77&5gen8Lǫ*eT\/coSթ\VGwYdo[jxo}S?/)꤂0[)"W[C{ߕZZz?'Uov*MwhjfevCns+XlKwPS(༽8}E-8yyqi_KCAlY&'mjXڍ7}D56-kfK(z~!F?ns.bYbF:hvf"rB12Ye[Ci%}ǵǟU<4xO#ڍ- ?m'oq~uN#SƟcbUA4)Wqh<@ K ӟҔųߎdp ^K`?P*{vPNYsSRBJR\ _TzY}6V &u}&cge"3]~ZˍViw.+_מcslŖ0^ _o_`C&;~ޞ2 6s|:g$ 1?WgMnmyEVʨݕo}}v׊7jmV7=g?1q#u:[?#r^{tL녹Lm[KZ5z7}{?FMW"ƌ5P{?ES[],inK2Yel޹/۝kۅ?s?—1g1C,G]qm*QM0kW̱=DX󙏄Y+-[Y"C>?wk?~bmukHUWX缽$Os9adHK.A(>IbY4^{t ?ԯuLS3ó< YM|ﴹr$%M;l|}8Ӭ#)=C İgۭq BTUuGJQҕlnAngM:J4MinIgn_Ar77[tYOf~=)Y(J:R(J:R(J:R(J:R(J:R(J:R}G)jI@X>V0 Ft!ՔJJoVw`wXÇ'J?P~ Uòl-`$D 39H TDtޮwuU7 bN-:dkgcA&Sdфy$SEO;LUؖ.* C)RRU$t_FvoOqW' d85TʝK0㊕3zad@[a={ G*˄H[}]{ʒ Nu̿_'^{V+F"G$iȩ*_fko`7GW^+=|Ǫ?fY)P>wOc 3ߓk;wfxz- ,R53GFZ.u!^nn"بS!msž#E{UQW(+퓀5wh;3"tݨz)'JɝzfjT}凮-LV._UJ|O9VOJ4T t5E}ooCoh}`'>n~{T*q5QNRQhX6f)Z rh/z?hi,~)GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔt)Q~1^մP,Uĭ;Y,baFOvaOk F[ڈK!RYmvmnnt]gM XhU*$!H04̨LɮkRk^I{|WO K~-m+tϿoOn)UD3FaG꣹:m l  g'u%J- ^nJL*Ռӂv_O,';rѢTV|%1VT{Q9? ]aF,Q}%YI2*;aɁvΤI$zVi}I;Nǻ< j^PDn%ZT3zM(:ϧ?,_bIq'YcB'ԡה:(z p:뗧K=艒ft{m*A#c[&߆VVRO((+Vū}S=J`S*H굥CZLj޻rQZ,HqE5dC-=[b3 zn_=t.q<"3FtjJJkmJ% Ypt˪za!k,dsUR(%K*\wXb9::ٵrvvWH`0H ΋O&ZOQMGOK>3MJs>5J}ʩHdvZ@%bIuJI$rCk,}~];\+C n9#PehO@)U%rOjGkfBb~OOM$鱜}jWU]̖zk-(]22O@)S]2=m,о+E7킃W2fQ2$F)H=z\2dz KG!Ǧɀ2U Pqff;G*kS/}hY}n={|-=~zuXU22$. M @mڻav;/kB+C& oP"!Y%Cwhgu+Z7ר(oK;JShfYaI H Y#-ȬSۭ;fz&>2@ͧܕcݞ2eZAHQ Kʫȅ*myC{iv|5FstZSrZm"h.xs_COzAڝE^wC\%KX0ʮ# w^諡R]=M]b~E;U3;U3cf,FCǥ*ѻuNiw}eVZ-|VO3Ǐ\ӽ(1Xҕ1.}Dn=cZsj7~W~oUɌ֋SII)gIP-LqWPm (J:R(J:R-~!cY<;MUU=R AȿMᨳ#(LzZ[x.0iOxS: >v{]۸LzolzYkCGnxT8G(KKYqfIT޼QS|J:(dyLx쏸~=AS¿T{yfc䡋G̈WM7VZ8H5>[ˉbn[ >viJs@(e0cXR},О}O,j>ok=T'醒i47K];`Z[\RS-:*OL XvwR_=czv?Žv rpLbB5~ KSB嶀sAI;jV4Ru*QW(%Q- SL|-c~NKRr6*g>c|;ms` )OP,Чi{7ryx #sZ+\w*g38(*GnD`,f3hY86vyҨ0{[.wWkJҷ`A%h܌R'ҷ<[)M`nה²/MA΢ *O'J*:,R;~o7%ٶIk,>(Y> RҎA C RRP*9]lN}S;[Qmw*i_T)qqZ{o\Ie_n=}7n<ҘSH%m\ˠUEh'EވM<$oVloۥ(J쁻h֏NP Ji1;w۾TC`L)]-@mXhwzjY]JZGݶ?v }_hғ;JwAZX۠'[r ?rcRg;'8Ȼ';޽o[k~qtCkp&ʂOE++ޔ=T #z-)]t)Z4ף;Rhmn]~?1T^,B*GʺzF|o(JJmi엻qZ+pޕ~]}nG;zJRGߥ+(J:R(J&O^.$6M_s[m]}OG_[ps|1[!qGϩM<=3Q4I܄GcUe^?aZqٽʙrݥ{ pY-NmT[l#JVug*2)2m]692.؍V[ކE; fb$v VR+Uտc\KgJW@})GJVHǚ-;u+~)GJV-?OyWsN)GJQҔt)GJV\n!gs2o$L< 'ۮX~ W ȟQ_\|UoŜ)ܬ%˖O{+Ew ץnG:1>K+pe:E% *-k=u9;o獷Bs-v \Bv5Ngb*lBp!^\idzۖzrf_wKަu'Ao K_ *{W v e4aE_CHէJ:xyV5Xὺb跼ZD$_ZFKKZOT 1 #9y 2]6 cU͕RdVH[pD r䆮1 I@)N!#*JT5(,Tln*qMܕ v 27 ]PH'rWmbt{k569)oWZzMV=Xԣ>vkmo bmB<]âwB[K5Q==hܻޟN)>gJ.u/5P+LR!kJS;'* #ȴS47%? =0 9ZeL **6HF3› R.-}:^彟iv՜Sjvtm6ZA+lvKU@,,񩊩J雥+jw?K5Nm*;'=v dGdϭ>zjsIYjUijd#dkRD>Yk&MSi~CϷM^g{yO%?W(Nt$Կzdcs _Du7;?Xn ŊhZMjyNvTuڠ &J1*)R9/֜V=t{;QϦԔQ%E0ʡ"5(d-n JPG%N!_dN!YȬ1]R]#K;%/\}X}EgܥT(; =7qr'qǦ W HA?J" vwݿ|76݅nGQvۓof0R8)hF7&5wX)I7L>͸!Uּ?w~+Zn$=>蓩R wCmڈw=i_a+i0m31tcJm |<p 11Q"jܚI#m ud^eWc,;۵dRyc`=s(@JU3{TʴZ_vKmOkR%V/se*)$u <{>!E F2b+I 9umY?{UI1Ƕ=4E|[ÉRV)5JfEp$rڙj>4ڶ>Vnx#Tgջxs^9Z}$+H) WFh*eFt>pg-,PXmڰQODIF[eyt"0y7/,pL_í6 uII0:oIh33j]~c=$IMTJjV0ҏ`cs,rѦTڇUVƊqJ 4VHV51/v I M/1!&b$9 D=Ԗ\* H$HLduwi3oBNsf%Yifd!i5+d ~ tvzu_}82@ofR3Hd˘ruI5PO>At okW]U!o|ZcfO5TrX)lc`2T{={V[rlB̻FG._TSzޔbF-8!M-z'US\O[=B DYI[AHȲ|gjƑJA|c8%S0f9KܵkӾ˟GKQN"'ƲX-A\ NVYb]qJYSO&bDǪ9Nc.ip->Nts;K4/>vi>\a5oMA- ֗,j+u-5lNgz"ZvHkR;c) L2It_+7ap[SA9SEJRR$[z}{GlPj[}²m:8?.;_lΗ{X0|k[ٺ-wu}?loU僷Z]+^10eլVmkhďJ|Q[ =ee^5$]8|:{+ɘ}umxh 5Xr-Ab8vd-P2;5]5dh$c(ѩ Q#Wax p)\pųE`[q]$+:B2FOϵ᫝Zsͬ5M:U#S!ƒku*sZrUM2+ȻJ8oaA6:{mJR4%&;?qc]jk]tTZwN酊i֪C Q*jMr} 0 ~vŸB_+%]R($keޥiO+Wg[n] 3Ϣ ΃iޠH#+0ێ8vJ֕/FO{(N;α 񞛉嬷%<z{)e[E-:B1jIV緒b]o?!% h]Q.O{u;;t)GJQҔt)GJQҕ F=( yij\ @svm^* Lqij7IR]NF_h[Mpy!J)VqmݷiTDkK|Da d] Ν[kad^{R}&m[>=nX-6=;e+eQGu3ny<^VKQRR'i˥bҔtFnW‡%lPe6܂dd4muTgo d}mXNFU<εSs-I Rgi XPvYwMtOts i֖,axl;D6OqY\<$ZIٝ&']q2εטo.:ԣ$~'ԚYh&%r.W-]bW8*hĈHg)?'gmRm6*:Y3* 7JD'I 0 IvuYQ jF Mm;q֬5S4Γ%R02,O,JE%\HQ$f;ܝ' :V+`e3چb*У$+#ZkLSWI.uU[n¨\i^Y²y.WaI;Ę8ohq.($$')OgZmٟm:CX=98j{t] rOI5 S @![s8Kpnˤ@TN` ^sIUa γK9ަEm2Ohm0FHu ۰c(=6Ve@ *$y~ ǁcYk_TUMt\fڒFXceyL_l]a0 JZnr"@ɂ>5,ve?8ͯ'fM]rm)=,qA!>qwq 9XU*SE$zm.+.g h 0&~ks'jLp9j .=r*Ҭ ' ;*I%\X gya\ںGvHTF`A$fRդscԼXlص%Qk-.?duUKRkYL$y$cTI3*) qXow7V,)KmBQnRH d^(J:R(J:R(J:R+O:KK֡w=z3]etx+E uj6FO< Vп~fJl_in#؇sR'l6L7~X#t.mvS-%jNLJbeDֶ]ܷjZD* I=+ECc\3^&*+-ڝX@QH*)I HYޟݧS?sqI/~G z~_vNOۈէ|1Oѭk+?7ϧm?k?WA;KWMGzWE F U`o!d+A?uAٷsS_ժI'i) Ow|W&-2ܻQƩ\ji\c2eV!w!X ;WoSyIQLz=oO !b"fJVE҈Ne%D KZԛԋl}i-UZ֢]I!R꼜+fEr -_JQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔtB/S_}BՏJ31~{fj2%h.4NwPTaG6'+~߷n ?YҕۗC42/V˷j;Rl0w B- <*odBIл(f YmvxnT- 1%@ۧZH-L0\6VH@qwAYD$)c1 Q N#8?;qW\;״9x&~1Fo_?\nW0?5?OC ":?oީ`_;OS5{HX$n?t{K6ݽa\_'A1I{9xnj^ѭEu4'Elpѫ=5knkS%(ZjQ-8ҕY#NNF01^p[2ɖkH%I O{0Gm|_q-} l\6TL@֡s$^wےP<^3_ܿJQҔt)GJQҔt)GJQҔtAUEvUOQ^Bq-uv'Uʮ^SMJ&7 a:(LSfau<1m9Qw݀.錆yhuT}P3@;|5?ͻ yJ(?Lb~^7:?uT+@` v.ǏvoUοW\iZzzoJ ÕvK_cO5^S"JOb'`\¿_U6 e qq uD b>ms1ݫ~괥@#Zg]87{fyVEٖgS Ȳ mf{O݌>k?R ;`4?u3*|TM 8*Z>5H>lJU9(O}SMM~oc\.;JXoW7:.W柺(JjgGv-~|p1jJUd @_sָ+>kt5-~0sW@#ؾG7Ez|{W$NJEfE=ə;Yb^Jɕw?vz?Wr/Ku;7ϑ>mqڽ+.>?GV/hr| TyWEcI[CqR9v,+ 2>܇\mBj=?FW7 uNaA_K8ES ɼ^ΞeP7 b9SeR͕6ƽg쏶VTO!)jC/T4)4I&a(?mbsX4c9: A$sFSc?ޏ᫮pQ_mѥCnDtGc"OE!fYZ/ }@ uOƆtQǗJ m!* iUs ';JF3mq:}t;HnBOobA 7۔( myuƧ+(H+3_T~4I\ Bu1V{E*X(d 8w + %~2[>F~=+j*:Αnv bbU12ȱ<' 9ٛ}i?2Ƨa G2}fےE\:[5TWR Җ+GG6!~qsK(dgZA0dU#`xG)&F Vra9Uj:Yp{e-ّ8#2Ȥp_y QLZăϖT8 JHyP] 6H[hCޔֺJQҔt)GJQҔt)GJV^_B$Eqܜ&oPR ùKAϮs#m`nU=*7T+-)(R8HrXI"W3R $ *6RZPrz #<5KCl2oALJ+DIiС@rP9ޥ+qDzTRk3۬{J/1vԢeƉ1xIVA"uX"SuAmd<#*O*R왑wޏ4ېyf .xDfHt}fVCis!.oH+l7 ē?_,گ ٕ*,<+rwgoE6RXSEPB8x!_iw NR t?M:SY,WtYOyn7҅Ѩs5c"qV$)<Dp'II Asw:)P):}ͪH=jH{`?i%D*G8 )| EʞH0ΜwA\*yoV-,?ti)cZf%FHyI.}٧m%J:iI PN]>NQ{hicH@S6(HY" =•~ҴeoM-@$f  o r?iI2FӤR~1>~u";z @K*{ aYٕ8;% 4ߖh)AJwwۧb9l]9 e=iΧ旟݃n oaJ`8RD>duX Ƃu~-N͛Cu7!P!GvmJoktAiuk, $up m>Ԍ #Yw~W_**:bX%a]%6NE 󙞕15_ S]Sav1_-xDZߏi|!"͒%,B(wc M|w'=ϸzzpm2Zg_Pn9(w H m}aB.`tMdY˴mÖ -ILHV-IZ.UѾ3*3le4+U]++/W h~*dZɥ c@5_)J)GJQҔtGໞҾ٨qJL,LڶaإFUt6CT%ܻLÊUJ߾7Sҕ~igj^cw %Ϭ=:z秷iXQZBUfP[`X=)ZԼ[W%L]50J COo$h(H*b$rʁcoSbq`4[tL4!-6ߞ#`z!!֠&9_~1Pی;\i>~c.2No]LPbRLK\*VM/5(]؀Z%% JHjD:5ۥ8MΑ+cVPRXSSޱ%zɈvR7܋lLk-T`}%-#_K-j];}PTƐ'1r)Q;W;FxmA2>u:(4ʰN$THeyP*(vTga2JӱSJ:ґJS":$fB$UwRq|!QգAFFiݽ֜ )̨̪1UMۃ,t3sΨc0_gIIlF/J~O(H*L$n}e("#!B|xذAK$MXFEf$sP_'}ԃқ лHY)!Ynk o %pj R4*$uIBUQ's'?ԭ-P9N–ӵ1yF_~:xi|HېV#uq*|̴b}hD_mPYbc`rHԭLԉ& I'."Uy#X>p~mY$<թ&i_0*02GRF̭󤎅N$>?#'yr% R|TAʤ7n>ydJgZB4RRxpqVJAG'hP Fk[/pۄi/k5; ГoY*m=DHW#miW/Qj{sZnBn ›2x7m2HW`x&.e]i*b&)gܛI]3^յ#*`qq;\n>>{{|WT 3?YچAZ߆ev=pzj+w3SOUPOݑq!ؾǎ5tj?{W?6̗I=*_o7G$ɘQQPSWW9Qb8ʠf|{g{EMpY.`-&*C~δ 籧䘍Ƴ)χ]ɠ)媤Pe,Ŋl WυooS1T0wf{y+TI>`U$>+n, Lm$~OPR}4'DS,2p)#12w: C M1MLijSXI sʭA#s1om@&09NË|y=jJS@GS2+o\r 4;bAۈ}vm TyҤ/lШb&ظF? }rN -K0<&4o:浑1Ь4Q*?:3THHlUe1>[U?ӋVۨ-SCOQN1)L)eX{\v>n] SҢ9RjLvƬw% >͵0[lzLO򜞮sSS 0iS2#@u#lzuqYQt>#tj(Fo:o!ԭ6x_*pܒ| |k5i$: GIе!ovR[AZgXm*N$Yӛ(o۳K$T$Rݑn,{ph`u{ҳhO5.YnK`WV!;fhÑ\wރQ"jZo0 wV VE6dzgyYd՞u Ħe Ie99T^[ ? ulRKQ=P$ÖvbOxlٽ,lgMͳ9Yy CkTihj{\5^IGzXi'ؑٶ.'m;y_*R+T IIVWR__ MW GA_uZQx?W)A?Zjs_t J>¿J> s+Oq(#GG6!$\4ðG+WfbA⥃l8STuӥ^@(q}s^ZqUMK%=b5;Hi*aEXfyHmPL K,+;PA(JG[tۉaR@^@ ZRۗ?gƩ$VG=$TU<~װ"e19Z4= -ijA&)[`&}2RB?"hen $(fFbw#J#Rkƣj-l7%PzjOƊyaMS$DH$d=~{=JO=kYs %٪5dUm_ .NjܱnY$zu>q0wq{U]K,\c9IIʁNշ]*53kFShIjv`y"W97"aɸu:DI&L#j+ 6,Ց!9yQ*<4]4'Fu> U-)-mr?I7hÏ6ۢ8P,J9o% Da[un$ u4YƜVNv3W.WZ+m}:K-E= TQ%Iݗfے#aîZ@B2 v7#N= 1;׮CJSmM( Q"5J(5T#r|o}q}W(}wBw& Kҭ\TmZ҆7}W,t!2R?7UIS1Pt_uXjSQy]/?GQJxZ/uMSJT}J A}sXomP~t׽)GJQҔt)GJV=Xrw|?n? Fcm${x m`KVu#5fw16ש"SU2߶d0bUG'?.:E'2&#xM"*{d@1}r"19J(0Hb +0Ɍ nf;<.%((iWYG3|+YH:55LJM$GٸG]JΥyb>HUYU*)~W CNʎs\뱬0]>=%lVFi $Yd"1 ϖHh#~`G. 30#C>lsв?~pSV*)ERzˉZ:W1>w+!NZ{-R38J*̑Dwd|&zGjX<"_rX2_ȋe;! Irz7;了}yNծ'9ua6 AoFO.f,8@Ikqm>}.r!#K0]/ž_K`:qqsd(@ |cMkc~/Nؠ7۵Od۠:}ʈYKLUP +xӍxb !$ s LD=spkW"{\H= EZn5pn:3cp]lr#Ic),$Gnn=f5/:ͺԓQȁOK0kl-m$!n%I$DcMGMJ\B<HpX^}W]b]mkUګނkNmTGqh $rFX ew OCpAsFgc8>;`wm\ڹ9e:Y\l ʠ&:*7Uj2Oa[H'ܘؿ{PbwJhvcAƚ4/+]RDfR<90a1}fx0̥#56j⥣ZXեI<AK|$O%=liԟT#\MG^7s?"fFn[AO>c^Zkof2  _*mdYg3(0% 66`eN(ﯯQ9hmR<)J<9QMWx@I-R<ʨvrB1=J!dU%LjCnG&QqpJ>BͯX<%ԓQ"ymIGbن)j8j A ;X#oh5>#\|HT)ت'/ܟ$~q? )"O?nva/i@+9+ȝPѶ_sӔ][ڔ3(G#I-:Ώ a2(#|aٯWƵ7>\F!;B#koػ.JNPz:0yWU#j;vZ=c|{OZ?XK?U8;֍6ZXn%ee[sݑR{-{iE3H)b$y p#J)̔=uCzcyo`I+$ 7cG;$ ]ݫ|ަx]°##A;>N_Roøz8+bYf1$G[6'cǧpNCF DesW-}Q̧9h{ގ?mT?uW^켗n?Xv`F PS]-Uʵ&],P/eqtVƁ3'䍄ysx'7amaʶ+(NhI o_ݷ|qN׻RŻFc[MꐠѵSm+*rLaO$R߸Y?!5c>1o%~[ҟXI=1ҌMr&Ipk}jW.NG6OqiqWq$&|3> v0݅/? (w/3tzH^{]i5 .>ַVI=+QtUjuN,yN{EҢӈmݩ)kUY x/V9%i>mA?Zb $p4%SkL@<ܫ D} QT0)6%)']`iLvTԑD9D,hѸ6 (v̤]GJ[.Ǎ C_u AܻʞIYx3I@zZBR+a_ kY%*,\H,YgS#;HQ(JA O6UNOե1TZXo$nSO U#pQ"A|Jʚ/XAQN,9;UFX+{MQ(NҨJh +/#~(Y[`,H% ߬5vt8D@V>l{J+l܏"$bIcTVgoxU VBVd0 jAfF m\w>3mP@ڜH^6f!'b8ourb@HHԝgO-#szQ$||yŘT>*V%~@*d}xLsMA:*Pvv{'l-Ӝm\*qeeieR{P'),BMZW$%/wU-d|_eB9,#2ĔtU*ؖ9kZmNtOA-@LdA_]q_dyꫫ*ifzg,+wf|\ -DBPV6v:W#U_ :ƲEDy#}B9iKD'>9z9NbiU=@|n"z4X_ѵ@`X"D`Ĥb)0G'MǾ*TwNuֳ?wiz{u-l*8/rdQQ7 JP@NlIjv 'Df`I}\O6OMU(G$1-5eʹJ$1UF }|Pvtrs42:tPd*[RǶjlmAg_ud+!K;T*E(fd+ܿ`iiJP&2 F3Y) U]}V7 u7u5s{4S$o @ Np\<Q5VdάE3-kY1?g\]] -kՒI %<\bvr".UM{3D&7N5b ,ˈj6Hy!KMeU=;HGtw'cIL(bN>5oV) gY:6IOUm?=hcszrfa"sR[CŔUKZJ&;=y_-~ [WM[ers<仐#] A_fS*q:iO2'E=UyTTשUT m}92]RrR!q6 Yji 9Rs@$IYy' [s&]|~+9=C-e]5(J lR*ЩU\2tRTPۅA;ilI#5n r%/ĕ=D^J N>ʩGX'LU*HGb/J*(pXr$ >Z@zQ)pL1$TԭK"m~R$ ~AYd7,Mh>O>~I,\OQ[qR;>]?=H>:Nz]O.μ̛XI-G]64K]P&$$~<)0d,>gq^Q2TFݫ%`=cQ#ꬅOlYWj`Ju,SR$O-"DVSJ7XBK/5+B; &T?>:Tc"A$L::(*Zuӑ-lph IXN#.ʂDZԕ >|ĝU>>UQܭz yigT<+5$93 8x깺l-M*2cy3icp%g4;~Cn}iIq$uzjꊃ-" (."نxė]c(IS;}u3wH)LoL}jR ۥA\5K%<I*4 1 $mڿu% t?_iP>J.өRA )^F#65qNQOlƬtK=s!AqƪL" mJ0%DFI^] @3tZj5ҾyAt)0)C4C\]gd=OpNYP!I)#$DPu PdDjSr;Ā5A"[9KYZ9"J 25.Kդ1RC5-r v)@k#zaQ0:AQ~5ֹ _0.RY 0#iK<:zڒ}r|ҚjJ*fi"0>HJ벝eefN:Z{Ƴ N=jr%Gx#FOطݷa4=HFʱB=me[t[-XC__phf:fvhԾ"rq$QdLg \Q`X'EZsS4OmDU~BK $`~QԒw5dž_R66 G_lu:YZ' d M8?mȸl9(NYH%Jh=zA;( o|9%eH5CGC:?p+qU񷞮a~>jg=,S! ,c6Ñn(F;HQ7Y$vq,[;6o'?)T.( {_PtPB8בU95rꪊqA$l6'uK1TJ:uf=3\o-⟉ PjKoha܍x3?86tm ,l;R%h)Iԁes;*ް`qW>]b-wyI#U LKPq=t-n DJT@u^ھc:Ea)H|$,%!5-m܋ oz0RNjQ^IEr42D+&Y\!^IS @ H;9WY؏l7baOHCj·g3 FS%CZ:.%X!Y y!^,Gȫ b(#JY4ڪ L޹ݡI?%Z@IXQic=CI[ieTd ,BD^ ֽF03z LN@FO[.`ecJPOT锭I 65n]w_ȴZ[ YrP2 ^q1 r |WevaXerV]^ 8)b%E Me+?[@KnluCh^S߯u o%0J$%‡[5//i D> w6 Bu/CݠNvTА`ƨh=T.H^et:h2O,@#|jd+]@ֹe*|?wQv]3U9øpݾB *J{!(! YQO:yaf|F٪vUh+~&p-5b%8Q#)=Z)xI  o-plͽr/6-s+߽nPڛq>p*UW-:iUϋτ =xᱻ 4N$53)aCvYrYd k>:mSp#imkuuݡ6̧D>u%K1dS^S&AZog߲,*;ZX0*[]nIC DѥJQU%20BȔ'h$ONn?{\a]բmH Hp! %9W*HIYQp*]ƛϣ6\JX7M.w>QBCm41⡣%b`4 =㖛^Ƽ5w|hh8U]wUfXhݶ)=K+[r*Wv@m-*=ed  uN'u"gE8``C(~:Ѷ[T#ndu_y#N]$տE|M'EOocbgUbxoO%7F&%FfSf1}u-JS!Iښ6_H=nmIR5*ۑfZ*˴;=Ahh]`]p۴ݡzIe>[~STSMPA5 H:1؍dTH)dc;jBZ](w>Z޼znའmi/{WiVv{*Ye=푦IU#Z*`=(E_nHJʖ Hly4RXXxr#JqS{<~'DzX#BrxtQ+ R@Rn.axa,̈PGO' ~pF{J9YQR]QJ>4@1]R~vY|e~v ǏjUpG9ΖNҤߌ4A)".12*!) r~9vbћgGf.xuN;Vao)ò/0|1w\y䠗J PD@'}@ν4+Q ša^Vֽ{LJtF`t5j;Ձ]b-F#QP[쿁BI1Xu8˭UMQhJkU >lp66Pa 3K++(+C%Bp]I$sݜ,L>Gz4dso*(CU WӰ,S_v1]q9qdV 5ߑ[Gq ;0N!m<T%+2f E3^hMCjR%*^ B+G)r[ΧZFROUo폁8tpb\fk6PHrrR\2;u[JQz}>>?m+UkAHN)[ n_`;T;Qw¸r f37 !+ҔD) &TD]k۽BKX5n;.w4i@F`/g"l{"k~Gb CRH :6b ZBәP iYD{r{U>5z̾rp>ב 5J[@Q_UUqӄ>KѺG^E{h@JnK05>F<|ܫqnPO>ӞzƏgMoo{%YW^ժ6hC7 K.U鷘J<ծaZ;z N{] D2Q xiwJ ]k}uPvڲ! QiE噅2 )u5(\\!IVU x}`~;Ӿ{(t< A8Mpz^Jjg4}0,ey ZTѕ l͓˹eyo;EI{cBՎ{=m1MTEd1RcT%Vj~R ]+ZV{¨)uԍ:T5Z[u)"d1YF{̛]m0S2ɻѫnsje†kS$KO%$wBJFcU&v|%(o8{e*JœJ~cSqM(ێjf}W+`;E t$1$'Jђ0:|aէז e)" julޢ]g&|֯JKҫdtTwjj,ռ NXe v ԽlբWHsuEslaakh)2t|5wO{N~˷G7ësgf.pVdl _5ΤGM,n]l[qŽx3#Ar2s,wX42,C(.Vzo[-LhJ&oI/(iwh H5'}E6ha(Έzhi~ݶj'h5eIBs5l5Whf8Hj%,T=!r>_5,/K˽t%n) u9OCszcy}2}U^^4ȠGES:[d"MrI:*aQ 6ou?>ʠ-0Fp7>ϭ}]V=55/ Y MުZvtTE=%|t@VB#'_I:O1f_H9kZ(k^Y"05CNk7 ¶cf QI)2r$!~el]qel hbhL!5%LOMR9sld]ԅmAY;Pn gFTFY'ti)dd!-@oۅMjUh$&WV=bvwVo^HSH">s]Ǝ)9?,r"P`l[`mφ~|~ܩ)QЦ9,fP6_*lv;yo xARNd5 q.R9nѩ݀*o::Kiu54K h=ruߋC O+*~H F뺞pGRR$ҘVJ榞y5Z BCRS mOy)tnd#E%R}p'nmsJmP׼~ը:~VX#nٮMJ븨4UO;e%֝tv;iC?l+wm EC/# (n,'E!e%@lDP5yGRap1 Q=F9 1|8r&XZߖj p7 w*#̋;_dMOk"iEgF22XC;O` g_?Vqs]VF^$<ס;&"EfbNJ-"T6tW ةA]?U.iseU7?^vaَr~+b腺?WjYse-ߵ[T $bX QV1F;;Ļ K_´VueS^E92",kʬ@~<}}{=Z?.~֒F픭= {imq,I,$r}?^GZjtv]ue,hsmmc,~VU%>7w]TIOSq nlh=)x"Du,P'#,P(66N#mjZ j[NnMe瞜FdH?؎UO\TXm$$W鬼ᗠ O ^WxXwihiDslT"NeynJZfG|K3ۯr#]^ni&ŬcF+"7IS!v☐ EbXf-`)HZ%hP+J'H"fۆ)j:zX#E=J讕I&x$zdIFtH;}ErBGܴLNѾ=nDuhEE%KHcIeMDg* $NBD~ʤB#}"~qi0%dI|`G%wsfVw荷} O=4ǝb6(:|Y"Xu·䠂XИstcyVV[u4ƑZ[>YRYL I#@Dym_+k0RL{ʰ-m ʍJ,FV2,y9ENⲲ['$%&FRH2&F{H̓S$=dؐ7 dgr7`C~>V`^Gҍ}N6ijJ(VI`Q4$TQE%`,vV5*K :'^~@{T:ZnV_RP.G4cU7 ۺۓ_wnRI :ĎzuYH미T&)iVJ*+x O#<{ܐl儴2R ~Ҳw֭kIdc$ddt0HI=s+˷R" N([m#S&{̲ ?z *$&W IJ ~n-x Sn ҫ2)kIr6$$ ƉH q87zNU:NB~Cͱm7#?Ob*kd = YQo ]؀l:H UJRg^>Aoorʃ%8S?udhRp?* ~ P]N ޜ#h|_"[#QuTAs~$)(NᢒA߭d/D6Hc^λ'1%y/_)ict)镤y(],jQqU}z~.I*Qjiwzo'k6+e Hh\xZÔKF^)hk-EdVܒ7:q&_rG>Gi"uO Ė/U;aAe+)1OS~Kg5*S}MGSaI2CaIpĵjžT4W!iZR!L*øܪF–}^#jP\~-ve)m#wܝ D10GK=|j9d4jumX8ԪxvsfdzAS E2®$.<,R*+Ł_ł@ZtWzj܅A6XFlYQHZuHPzS6˨dT9jj@gmFH?Ub$םoK*erCv?RFlRxSg+P`6$,vcΙR+-wҾſA!9~ܟΥmROOꁮ_*F+ L(DP<1M7 XJ^G 2))70y[o| ReB҈BQBۍm0ubSDz*%9n R8?y'DԢ3z[5}8\#v>bA+Q)֮:ҸwhG Bb*Ȋy;- [@GهwGj;F{sJxD*7EHiXn} b+2JG?,\i˛@OYXIa=cNkܲwb-M_XeǍ5FAY<Ф2ƍ<vUS&#R |+mo] 2+pBT@&$5쫻NɛZuNq;[Pj29˫]44lĥdQ~b-Ҍ1*L H:ƕُXq'۶{U[4K8`[!!LAX** Df}=)Ku}.Oe?hSHlWo5,5+b:G$;YX~7*')W2`ҹ>;kr/Cl--eWhh,.^X Q%9N#~YMR-ʭ^VdY)$1e;Hcoexح0hHPqm+ o>m# ]鵆<p@R9k5utz K}byeX5_*'XJ"-7V )Zֻe\<\CnŖ2w%e)ŔTsUZ.fD;7>i֌Q! S9;$j55z'*KHSw $$*UujWV6qhh* >ٗa:qʙ(2Ƿ+dQIUL;P(^tH11oU]v v:qbg[mvlklr92a5_hv!OΡX?Q\V8MQAK_OE]KU%_7,[uVp-h*ԧXFs^eڧ e0.ͳ`l[%04)h, -ӵ>1\eKC AS:L :iM<L$%M"L`Ï C-8κс.kE=KVUX架q 6 l FO]_*¯xAQ]Jh!!!%)Bg+`**5 }Ss;UCnY4u"B -?.ԄPqM6U@G÷q9ũIVEo@JSo'P*u~O3|2W|:GR:-B@aEk>'-JB)=uzW,Tq+FM䱝U'rO㟝R6@;B_>=O.QDL~S[#OM̳>PBѩ. QnWb @Yڏ9!}ßE0jv5RO5 [RUC!I0M/2Y2 [mpډG"G=gh:}!dU{ B'I *|jAZa}qD?p1i* DfIJʥTnRQkQ! 5bBB:h3I0C;hh~ E$OP)|yoC>&5[ V y;ymNۨyJҪ juhXN*X#gv,y?(NUAT M7:5Y^!(#Ҹdd));좟X)5WMPTSg6 G] o$:}KlZ{J#UcK?^+wՃJ5'}L-ۍ[>nW7®w+[KjNwmۼuQ{fS0"FsC_l ?S_#O0 !ԯm2j.|o-OYo'Ul&R:b`'-~Oc|~p?7_;~kPo-^?>~Mzu;M<~}UG@?8} .XEG}g}I>ugrxdp;9֪$uD">fu nUON T) ;Lh=~^ɏoi);2F{)%RDQ$ }LJ߭c;=:IPSMU!( I,9)#mwHJ3OM#Mpe8㢝nYji)s*iӼښvxNbx4sL9W!))$C2O-BIeEx@X !ݘn'/œWl7#զu _Q!^ʥ[;n>lf`Iax:_J ~*$Nj5|aN ӾE3uaAP)*ͺ >:pSUVoU7,c7'cooڈjNToVx".)C!Հ*V(H2*7'gbFa?x Us %R6.Qn.'ZV4rB`0z V I '%~;oTHycZU'M8G";[t)y:| eҔ$' ؐw^uJ,(󥴲SԬ# 87I !nWI dMLf czhۤjidWwey'b4F5:PڳAHddzJU ),C bOwֽF4R NJŤ;pomy99yV{hRPdtޜ!3/a!$GTRJ;mN '7fuffݖ:uT*NF*}1)Ĕ<6Ќ $OtFVrr#^E>RAbm+yuW*B֧JM>PIo!O'O7uThIҲPdFYH!!3&}`!2sToQiD4o再[mI)^+%q $*eNTцfI)nȩ6 ! 91V:˘ %g}و*u^.C0-|v'ԭEZI'~*$ Ms2TS$CPG"n[nlR+(0#rH) Sbֽ,?ًF!971,VDĴT\@PRTƔL5"M™TAI xū" ڔMK~O7*!1ӣLPc!@$ >mD!M)1a'ʑ$Gn>4֥SBH}߾j۪BB"R(B=ʂGrPJʛةFKvu8鎾m.z(9EJTK WHwOC7rNBN}:HXE^ʲ4aݎZFvf}uNmëԥ)!*%bSNn]j@cJUG?W (kֵﺠ4jB#ܐ& Q8wv+ğ$e QXv3=0L6@@/oR溚C\E)GJQҔ:lHO7wF_ѧAַ}*;@UfU3P~nYP>ݠy}pE?ѽUXjn@}~IXv##:Żs>>vNy}d@eb)u1~V sO8m4JI7$~DF^JSʥ]?aeb(PK!W<ցYYimages/icon-256x256.jpgnu[JFIF      }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?VΣ} u P"U'-Wdq9mVsqN[ʞϩb?r8i}w&ֹ7UR,~\4ZT}K}s k? kqQ,_A/Ka 5MGԱ0/&ֹ7UR,~\4ZT}K}s k? kqQ,_A/Ka 5MGԱ0/&ֹ7UR,~\4ZT}K}s k? kqQ,_A/Ka 5MGԱ0/&ֹ7UR,~\4t|;tm'T[oq8ƹu_tЕMlQŵ'(^NyƝy%%șT/kW\T#c!{l?Ka_ k?qQ4U{l?Ka_ k?qQ4U{l?Ka_ k?qQ4U{l?Ka_ k?qQ4U{l?Ka_ k?qQ4U{l?Ka_ k?qQ4U{l?Ka_ k?qQ4oX/Ik}~qtȓ"!UOX)HMI-dwg883<|a]kMt%T Ov>Lֵ&\@@P@P@Gzz3w&/|֏k^ͭ € ( ( (=ğ~&* OjTF{_")gkU$ZNҦe7wgʿxIYGZ?"eu ÿd >Cރտӱ_н$G֨:}Z?#%{SI?PusFCރ?/ ڟI}jի#1_?(_zWG0cĿ/j 'QξValj^OT?}>_ntKMƣڙ-hv7faQÒIrsΚ'U:m\H AcⴥV]LҨIC?XUo=?_ymcWmOƧ?^߆ =?_x{?y~(}j+XUoSemcWmOƧ?^߆ =?_x{?y~(}j+XUoSemcWmOƧ?^߆ =?_x{?y~(}j+XUoSemcWmOƧ59k4RjnGW/ݼ_ܕ")#䉃S<4/?&/g_\м??Ca'?sABHhCM@$~2?_د#_5cl|?~n% ?0Q%a Kww/Qϵ/j_ L7?l} RKjag_K?_S :k_Կ7yژn_3k ^6|=jRyPr -y$`tP5_͌BXJ1Wz_#z(?D*?oo/|=_|w_^|P@Kk3SpzP2OPP@P@P@/$l#鲯uς?ຮ@x-ъ GK4$}3m!g7^iڣz8/v{ fuP@런dj*6#??V_#zJ?O?jtyZ֯3%T}ya@P2e8# ;I8^ƀ.P@P@P@/$l#鲯uρ_^sfď菆>\ W>4  jظLMկ_o&ҏS?tOZ?oo/|=_|w_^|P@P@Km3Cq2  ( (>_1_-D}6UY?kK߃?sfď菆>j?k׳M6~|ȑ$OE%,75FM̰V8M/~-ingɯ_\_hs$ Oib7\o8<3N oboioNNu.x\|/s+O K mb## 9<ҫs얟z+j JjOd}֝IAƗsÖU'K8Gqn냺lʭ[c.BVZPݽ<]g)bQZNmZ]eo^e}5<`tx*Jixw~{ڳoV yR~Jϒ12\dݵ^6i36]j&%ƻ{i:]ťT]ǒ]?p1z*ЌdWm%uxFÊMկ_o&ҏS?tOZ?oo/|=_|w_^|P@P@X2Њұƀ.@P@/$l#鲯uρ_^`sK3$}ظίD|5^igmx3Gqx5F,Hs>*NRNPVQ巖zhImbU6lh"YJpA5M6;p 5EljaVJ[4(*sTPc'9frRY)PPeo[񖻪VK^:F"OQcA*r&oCэoVOF<_#WF_&G׋`O_iG'_r'z]׿f#_>p?0vCwG٘߈®hw3U/8?ژnfb;~! _S Go?Wx|4ja*ϜƏL7?1]f#_>p?0vCwG٘߉nnjc=&?ژnfb;~&? <_$aܩ.S/\7w^'|e>pBCOZ?px߈© G/U>28?!hwpe{~! _-ڸnOoOZ&iڔjBWr ^>1ᵏoFt(O{?]/~ 9_/> W>4 (bvIъ9E!Ӻ;/ kq셟@zpRggY런dj*6#??V_#zJ?O?jtBTRqkIO ׯ?vZ=; KQGd}ij?q[hpO-G?{Iaoòi>K?bi^I<=k%GnTdfW= <Rf i]>ij?q[kp+O-G?{Iaoòi>?4{8vA'ݒk/.qyvlYkWӯ˨\V=?2-G?ƏeAg?\=?0!s[hPTKQoCP{Y3-G?ƏeAg?K?i^I<5cR[%Mʕ~tv3G=|gH/_j ( >G}N`/_h\>WϴƏQSZ}֙X/,و MHԩS:|KM<0-l4j <-Hҩ.ӕZ|y!zGWk:}4}rp^^>>G}N`/_h\>WϴƏQSTgU-ƏQS/>[xo5pZ>G}JcGϴƏ?Vx}4}vpnG?GhVx}4}vpnǦ-Ӯ H@`x5bFNhzXZrO[;~ߟ}Ư:&k46)m l8y8I;h}AĐhʔ^W-_`_U W/[o_+Wge|>?Ⴕ)V,o9G[o?_+Wge|>?Ⴕ)V,o9G[o?_+Wge|>?Ⴕ)V,o9G[o?_+Wge|>{I־d?m`6󎾕trJͱ͘q*5Iuko0xWIrS?tOjtVk*K幼 1jWR˒ʈwog!_)⫧P9 /QT{jak7Pc_~?KE _UڇX{A_)?߂oHG>?ƿx2CHoě-S#rVe;a΃,VZu ,>y'FQ(.V2-r_)⫳P9= /QT{jak7Pc_~?KE _UڇX{A_)?߂oHG>?ƿcx@(=5}"ڏ+1הYևX{F:G$:|MOqeSϏŏ)cb?_KG>?ƿH=C\՜X\yKсI>^PrluЌN|yo;h-EedaAS,SF痙bPNVV<G8?&//~/;GOhY5ߘ?pOA #ƿGn?a?dx~ch'?q?,qMٸ__' _?7 0?i(?D?欆nJ A8^u7Q}//_>o ?U"X(i/9E@}OG;i}ȿ?x}/9KEQFQ_pr/w~b"7M渫AZx5s#AlCsTկp_b7*K8E@}OG;i}ȿ?x}/9KEQFQ_pr/b7*w,~_ѿ4Tscآ>4_>o ?U"X֐nM#FpoN=G;i}ȿ?yc(qM/|c>t_ scX e[[Xx^Iڸ.MvՠIk/7G+?vo&C?O ( (4|!#f_1B9z3J?ď>i(?Dڿ?欀7^%)l8_}})3b_ I/<_Ƌ˴~b_ A9y}e?y>0Eַ# Q6!WYO GHKbE⏇qz^ y=ЈL C7?qG~§D#Ŧ b|m^ %i٫z _ taǾGsE(*J i}i?4>_]? 3H&biD?7 ?sGH=! i}=AgMCOc?o~/.m{$C1t{h4"9GW>V *|biD#xxolŃyD;ᝦ,Se,X_qגzu;(E6i-z9[|CM6[xzxihHj))jx)ά\U<Oߡ*_dyWM<C~>G}^?4o  aAz[/N;{oh#mH㿅4EWqqАA J( ٥^ҏ#ꏰ|_#z ?O>O_k9(!|D$Ǘ7n鍫-V7I5\؟?Ď\?ft?ƎlO/|>z5f[i)9C"[?ƂP![Gj]vlO\g^~ɿLʟ 5P}A|2WDTt%~_K5O@2WDTt%~_K5O@2WDTt%~_K5O@2WDTt%~_K5O@2WDTt%~_K5O@2WDTt%~_K5O@2WDTt%~_K5O@2WDTt$GSC E,?]?WOC'Tt+u_Gl.,5L3!HO 4yn~vw/<}f1$_amcqG$r4BoњQ$}Q`O_!G'mg5d#k^#y d9W"*";38/ПuWo~ >>i  ~YX۷iR\U/j~'~jy|%A_I#?{~9k~#|Qm4la!:{@_%9_&KSH?>ʝG{SH?>ʝG{/oٿa}26\3@ (ׂkr.zmSsI:HqẄ́ruCl'?p?Q̈́r×?]>/]rկO\Y00r>Jm?RG:ki ?O7sN #Wrod5uo[Q4~C} =/oQ*ϵ?fBJ[I7sZ)_? `(IzWwߌmgԣy+{wIXy<bbާ"m ?o*#0vA?ƏiS}^?΅]:fI4Oah{[?b?>?>?>?>?>?>?>?>CxR7?_zY辧x^t>x^t>x^t>x^t>tg$$#h:έ~x֎Ϛ[R=#Sr-Ot*Bto{vF+ѥ&3>|;G@]*ӝ4>EQEʎw,~74_'iZTd>wwn泫63)A)ʾi떏S?tN?oo/|=_|w_^|Pmk@ɿ?Bk~cҾS ]%Gb+ r|M~Ҿ ץq_kGGROxHZh&,"~d s_M9t]ίA[_mz?Ⱦ|_ƏE Vz?Ⱦگ??u >G܃UgίA[G"{j+yh_rmW:o?WA3gWo}=_y_ssu?]\I4@W,q姭~qŐ3(+{gSrw޼`u,'" K#aU@$P-]?z/?zWßj~Kh O%~S>#ޣ՟:W6B#3 h>oc/:>=ie'd$R1>4 ¤k.GY]lPt=m'\ܿ?լ_G;>$tY_/f?,e/k3oE?_hDn/Y}Z4~A "O7G,ab?{ m'r_r0V6t_e/X?Kk%Է:Gf]u s 2c#Zi(g ,joOBsxFybOrA#$Jw)#Ш|qGto Iq'>V?YLmq!Rs/T׊OlF.߲7w(nE˿9@3wB-]?᛿don?2P #Ћqrf[ #\aٚ_ a`Ӯ:w9Q&K++pA=W3/+40a~<~ ۢaW/h^Ǐ?-kW_*z0 #QS~ש#G|9'KV`ђW|?#8?Y}a@>K!X??֏cꏸ?m_xoiK kkYeV@c+jpr?h 4\rJ|e _o>._ 0/Gx| 0/Gx| 0/Gx| 0/|uxPk3\[$R\;uQǙ>K 1 I'v:mWwƵ>|?_ ?_ O77? uI.gW #8=jkԊ+תx@'`3P$}OuhmpKn $۲=Uw!?;fp#GvxOWhN] jMW>K? ^;iwB<'A4}^`.G5y|&YO+Fc.qiI5݃0rn#aY.55m/IZ*n_}{>0赭_O~fK#€+k_MEOO^ 'kڟR-Z?FI__菈ogΕͅhGF/#Ѕc #Z?ŏ>/ ~?w?a?0? (HwBK ??GI@{w$U-]?zW~kHu4^\>5{u}k'ks`54sǸrK}xI|99%>q<$Mf&xIv\ ?G<{$ٮ?焟ɣ=Ò]JU~c[\K g? d_4KRQG%Umg@>)jx-q}s4x,n3UW=R&]σ~oŝ_.Mg")+ XFzk:,QI*strfg9PSJ]6a7ںP8#|ϸr]| iumtk{YR;o }*Fv^/ ~?w?a?0? (HwBK ??GI@{w$U-]?zW~k@[3;өY˻[RoC@j€'zu;a+jQCnڀ?0o:L; d91]B͏RrO5\#E ~GK=\tA@>K!X??֏cꏰ_K?o_OG_:@ <!e]Ы:#?5| P@>, WO^UO(ࣟcҦ*ďLtIZ??=oOïۏˏW^o 4 l*[RWk>Bj,+-/|9u5/~A|>$(pelU5Z R٨ɧH G@Md? L_O^y~"M7f2kr}o }.i}/U_ }*3 ϴpU M C4հ${yNvrUbqUu=ysKF<<=%dqn_2-+Sw5}ycNfpGZF..b%5g]}c]w_/h`rK[s7cp3I6q?(o}3Qzc=b[F]-w"1U+ErKV J' Qm-On}^2~Kϋϩ}?]xoe ? gc?Ծ_]:I<k:33X=+*Th4HJ[7u NK=k.H_Ӻ<[?SƿXa~B=?տZCrǰ}b󿽇! W?ŽXVwX|/Fc/U}ـU[h)MN#~!PH7;w@;Oo[ +T*mjdTMo}~z~'TV74{XweSYR+a 1%LA)ŸϚd뤟JՎ[GGGv7ڧ_aN#( 7zK>Å>)kj^/ȃ ϫ>xكݟx0}]@TDRi~%贠 8OL:o>x ᆍo=A'ŕgB2cXUU.Jgax ,Uz-Oy'g5B&Rx#?_r0?C?*Z?A/-Sw'lj, qs)#sօWn5$P*ˢ>MI>_շ]ga@TDRi~%贠 8OL:㯇~wÿZf? YDOxmp'9&Ys6}vAX Zrnv9OR? &{E,}~߉MSpϸ}/z}^%72 s:&敩ʜ5>J7,%?۷ڶo۲}յ9s`õmյ/ G@;V-][_*rtõmյ/ G@Mo~1| ux&L@50y>vh  <|xc([Zp!2dz_[_*rtõmյ/ G@;V-]p_ >xư|D{lbH7n8G&AI]oj_U:?F\&/je|!a@PGQ!?r?n_2-(w5wR)mb@Z5g]W[rHր?R (>U7 }m*?@ݯ;!5:(U7 }m*?@ݯ;!5:(}A% /C;ř$?~hVTQOa@|z|$wxoK|Iwn6D1\P3iXx΍k0 ̳vPPOWqگl<4yb?4jύ>j>gg=:|1 r~迳Wo#!&4>D-sL8=jCg藿hw}Eks4 GnUMPxl&K_r+~Y x_>. TBA =>ɇ|Y@?| ޵໫vwufK{2WpFN }h!P!B/+9@<tƋ<#UR Tu8=s_"W~)Ћ_P!B/+9@m:h6z'rQ?f*K Yٙ(/ K/_E}cf|(~3ռ %Yky8GpM~SOZբfxĩSMCm/bԴW[,x CVЦC5 @`Pw?@_.c˯=3-|Jmmb'ONP@ 8h/o=fUiHYRP|>rs3J߈:_C~*<]m$o߈l<'\Lh╖Ě:1y? MG@ ||oSv Fh>UyO%cw#O h$ω3Z*?ʀ=W K@VMO[9uPwD𯄬/iXi =EGÚgcgҵkI,NR@7)?Mnß5GW~@_ &w?@;=5k.$d\E> i+{w|˼`I+u vPK!^<(Oimages/info-2.jpgnu[JFIF``ExifII*JR(iZ`` http://ns.adobe.com/xap/1.0/ Rebecca Paddon Canva CC }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?~6{7L+/򿁼%#JOGy[Fg,]b#1fff$ Mg_/OB6uO$^I?؃q8n{dM7փOm~=+gGP(:B cVPJoI;'ek '&'K{חK9_|aj|0ֳXAC6zfaa_g%Eo%l -=Z8P3}{n^[hwQs+֗&[V]jT,[?7Rqw[Ƒ=Id5Uj:^U*IM_34)RsGwdn3|HTƵ{M{P&Py"`>rowqH"T\Yh䒿E:}\qwY౟|G^vjf9A:ݴ2YaF *mb9JrӲ춽:-4\WIf촽kf~Rn:e[#ɢTϥFVbc 3HB֋R-*6I~6ߡÈ*F.Td,ztouֽ# 5+{'? 5 Y<੠C#E4z;YGQ.eIognx)ԥII>Iog/] ˏ ]|;h<r;y򺺵-JV&j/uxKa?#taGz9_▍_n/>[$>{>\<?\Ҁ8AWIu^#x ( A>ݸ:WR\ҾimfR޺ktc<0'^#?%xT?]:wyJޒ{?oy]=Lmƅx so @}=py淄NwN]N)ɷ%}Tlo/KO3k'??ADq3n9I9;۽\zէ]/~1޳iPu7g^!bttBp/N)Τ)Ǜ~^+).Rwi|Or{Z>AXy?zk]šWMXZi^3[YZ[|G$0Co$A,Qˆ EU ZtL2@?J'=dm^=ߕG9jܨɶ}~~0>l/^&;V>🆬fR{7MӠ ^jWΆKHyes]ݤ[EtN.r{6ns?R,Glj7ox ^(l-;Nh FqJRFG%\pP |c'Ihǥ֛_V:"_*vs~&m]|EpV8G24)L6q)ܻbm#ҵ_;te,CNדwN,tIWeӶOkQ&SP4s Cdd=2N og}׭Uo GݪuIM/~~ǿS/Η bo|5S~gškK@5ӹʱ0 BNtdvOF-LqT(`^u\l(Iu6C$@xY|N uTyeo>fh@JEW})J:I=^]>?I;Im{wsGLr`g;_~R^Zиhc[UV|490NN^_]&i]5_7WQ]]3@<v[i6vd4`>8imwm;Ym(ɽ[[|X0z;~=tN+F^nnOݗ}spc'$u#r+ZP[_EfWm:% zmt=C᲋]ST[ Fݾ,z猱1^VϤ!)/]ۿmM()O!)/[Y~/>m/2.ɮ-N1o_R"xy1=N1dzε5W?z^Pz>#y3ր#~tRH @##=2;gހ@qz @ܩzGy(Ojl?xڀ?_9#?2:^=}u࿊[|_%^Sie=Ĥ,PHF"3l$24JiZ}o[_*e|uS{X[oV29QMPqָÙ*}/ץQ15%{)ִvv]ni d ֒6+Y$b(f,z)\q\.XTחUk' 10eIJrݦӻ_}{[ d꿳{Z/V1O(ڮQZ1T vԩuKV.7Kz#;-[^Wi3v,~_4֬56Ưi&]kw|)4=^:uB94qRhE++- U~*}ja&t?eo:&Тѵ?#| .IҴo:Z>Quɤ_?K!> vVe|(hwmtxcI'6,<GmZ^?ݮ=F|?nSOIO||< ᅜ^_lY'ïx?Vz.mNA6Wៈ|}|l|!DiO~=Ҽ-?j6 ~)j\/ Z6E=k_t&[[\i6ٹ!/O/߁|Co1GYwMx|Eu{t^\<9xV-/zP??!~vOY^&#|9u{32Wե/7{H>/:o~пn5#j&~m-|i{@\^ BX잶t\jm}]4ڜ%U 0bdnQBIjn_ul],Y/ rU+.+{MmwW 2;H!mA$goˑ\p~w̪Rܛnw+8 i3L-%)ڄJƬTl0\zU+N)i$}3{uǷK"R) *v{}Ej"l1{0b033^F3^RM$wNkkAʰ9K[k٥O2KXvRHˍ 9 ry ̱vJ5jZY.ۮR0RrAmmSIl_'pQ<,E8ٙUT7 =Hm׫1'e$W~wѵmfY;(kmߖY}|b[[q%xYw)b@z}UuI:sܮߪm/߅BTUkFϫoi1-֏6p,*MtC}޾`$*=~PaUjR5KqVkOϕdo̚'~,9>#7c{dYӠH ZkQ bt|KZ:ɦouu媾7ΕdӚ.O^M{se3F+c::Yx<cP{a62z#qЕ85vZ^ߋ;[(n8rqڽ5JZ)+%w]~l~}mę9c<00y>'c+w{p}/SP:ÝSG|[~ܯ5ІH\MtӏF?QuSFQMdQ{`|#V^ψI5__izo|WxO}.Y56}OA7axXt.Ӵ%gw㖛ߴW[oīW_7ć~xk0H7ŷ-+N| vm/̚ËvºaxJmh"qzC{[;++%J\|7 |C/^>h~x3Ꮚ V/7=_oú(Γ_"Ei-U %[Þ~6]{w">#hwWupH '[:WxwT楥^3Hbo~z.~x|=>v 隥ީXYiEKx|gS| 'n`m??CO4o n6.+ݤ s[QԬ Km#]W|nv&ҵ?|/;u>x__~Mr=6캔Gr<Z$i@>?!~vOY^&czŸrx=9%0u^l.y3xm:2jZ94fmFPWcTZyᶘ/vR;+uOozYmܶ.fw1L $F96U+UKZqN۫[ߙKBͩot@B. *I#8gdy} M#gעnu>4Y5g@윌c 7sqx3M˲Z.Y6_%~O%մm IILp[ 8$#:Zi;Mg-˭Z۫_UU# 'r;d䎧5 Y;߻Zn\(FNOK_WϹ*_1*`9xo(" ΢N/I-vIZFMf*rI;(޿=zn>π=GKthe{=rb eqE}[b)ͧ{ZKUk??1\=ZIQ 6^w?)t}Z~2EwxheVhbܤdmȯ'W :IJN)Qީk|e XQŨSZui-GkN?E~(fMM6Zfm,ŬgQq=(Y!GXVr[c"%FM]ەhi^GGUe-SqKVz_uH<'3Q B+3ҠGNLSL-YŴ(8:qMM~W|ғ7^A㷸p}k'umt>&}caB?#p_$glfrqv%E9J1_7oD?ѭ|7 XP)ml猒ۏ$סJu$MAzEzzZԒu*l{Z+Ukt~SM^DFZ֑B %uRi$1oJ!| \K۝'O*_h/>={D&0W%fa웠| MZS6;F54ȅıiH=QwǾ+{tU']zT|᧕֓W)!e)fğs7#Dᧀ~|Q࿹"_ |>A|8f h<[\eL$Yⵌ;|my'xT~ ~J7EY#|D>xUuWN{ fچƘ:vmo059y&]x^1cľ*c-sWKi5/мd4`еyo m2H.woن/% %բ֭o A-F'4`]OhQ}&;uf@`*A𿆼M?hzW,SꖚÿxI]F OWҴK hxQ❵-3FmEN ݀ Rψ>>~3_2OI/^47 7O[_Z 'zުǬx#Sl5/xĖK:SOgK _>!ms(5/~$/X4?ēx_w N5[K8KE~ϿgT>W 7ºGױ]ztiz[Y6-M솛YG%֓ww R:} @ (Bj8M@GÏD9=W-߫si$]x7↩rҵ.DayHćRk*jZkEs̛wZۭZo¾DzyL/#q0!nv][_圮InE~KEx*Eun # 89ےxƶԝ-:k菵|I-٫Ϸ]O[ll*( prW3knZm%vn}/}]).^5zuFc s,| ~ezaz.Z&)+=k]RWusܴ-0 9(vvد zdQiY5{-?ץP\]^+XN#,G.XeIs=q~W^޻[|8Zo׷E۟B3Ef?-pWH>^zIg Yhn${-/cZI}vwѣ7zеT8*H@{˱-nVw\i5.F&n|n#Oo|e\,aRJ]L"&8֖vvo[}Z]nτnZғZ׻ꏝ?~m[EҴM?žti-O՛UҠs۸h獝GJQ(UIuWW쮗PKR(N xk16W 1[ GN=+CFpOSǸ=sZSZ:[硕fuzR[/ڝ=`A#z8Ϧ^ӾBkUwC'Tdchh{ŸPsU)?OZ~&t7HFS%d}5Ok/˟?SUrs)Xݲ2Š&?^*~'M$zCU8889GLzZ/ĿV^x/O> 7)|;4K]>N-$:5 G.{kɑ"oUY|^ƛ^!x&=~'&Yu3L𶑦;J4Axx uq|b'}q'S4~_=xSB> _gúz'uZ߆l}CJӥu[O]?f?jٝ>;_e?W^7:yGMƍ+)Z=6D0>,xּ{oF' aexKķox2\:vW_Γj |o]']$鯭T. 3f~Ǿ5~6x{Ufgy/|?񝎱/K<'>,4'oiŤ%尝@9o%ο>E/? xğVcxӾ4|Vឯ~'7 x>_dw jn>8 q[|0 g3ψcwxgGޱ(=.zq6xh+VWrn%~u~'ß <sMCK|/ӵkE.{@ u{ hOWPgj~G׌{N AS~y>P_?q??ex?hÏ\~x 9=1צ88"[WKU|:J͝67g`Piz $vrpؖ4tO=l\EQ?Oeg7[j\59?zjZ-YуRO]l}t>m.7\ ;`H=~Ĺh{z.g^XrvJ׵VO] mCKrrUϭ|)J鮽ݯK^yDi5e[[^Ծi.d $T=xV+9$5NZ[-9Ww;s#-_5V%$\ѥ^](6Z䭦#fĉ[v 8V wuۂ˷8D윥{Y&z/XֲM7:IIm}tm>.#Dpn).bIZ Sw}ӵWqr$ BSvRwu~;_x`s'[~Cop`WŧYoy+Ki쯻N׽]|Ip 9ϡ[ZMzãtX׿FL)ٻEtZ~;]z3ӯPO==>_P-4x^ȏCJu+QԂ#rEtR,f~U'gZ_[Q>O]d yǾܒy$=[$ݡ~P@P@ң.H90 îx^ghAY?{N'g)^&4[3-ÃG+t3#⼉n_s]9Sv:K7~UrcSJv袓DoN7Kz%:G^}Q[{qn]Drۻ$NZ5 %t¼ǃʣUTfwm9+[l(U'f3N7zyS#@7,Yu]/!7n63iPzPƔ73NOu{u嵼mG_R8\^ ?Ka\]B =>(d[T4K=H58-ree!_%=_YQSoܫV*i^M?eb^+=jXl-(w^ؽoYb+H"Yr8Q E*uIJXFpwN2W_5]h[ ^~ڐnP♣@ Y1K C/BQ#UN;=5 *)ʛZx5I*?į:γ+hX,[P9Gݎ c9̱xU ?kt.m^k\+Dk~oXo 1ZLWE{H+8东CʀHrj ӺI薝W{w7F?Sryv|꯵hws}[붶G6}Iqu)m,5e0mxm"90op^XPWVyjJ4c٧Wѥ]K|qpJn)ʬyx鲍>,kbE^EΜ7?iT(,lmΟE3ڒV;v~0E\NMwM<]Zh9>k+FozQzZ9u'Z-\FmQ7C2$`sFr+׶]O8~ÚF\]};WVhd[Ӳe`K8$N1X~´bWkw}s7W U)Sj5wwS~#h^F"ռCd$As5͍՟ < (r|N1:ҔTIFԍU̥4G{4w%zَCK(pu1у/gVOݔ\go3\Gg!0s$(Npsdg$q)`%+<&m죿k+v?3kr1r/SfkznQFONx^ݤ/*O[?ucïkWe7" 2tS5Q%%~^~-Pw Ik ԛ}vZE\' js>7oMGۿcZ)sŽw[SS뺝+e0)=x/>lCkm_qׇ_r{NO=V( ( ( k1@}'gPlՕj> Sx~ߏNǑӡ"[WWڇn͜NOHK]BSܪA?``6˺?0)Rmj-޽6ia4VR7vi4f7(Ղ.יۉ!*'xdqנ"@82+ƍ7OFW]]o~V-$A*R^wۡ7eou"mm .RG$@#uP ZUTWZ=U޻UGNPm$sI&W'>X[Ms& d7A)QeT~ r3xybqړڮWץ!X85x(_xMt,sxUE(URؐ1\[b:8RҒR}nI7}tN(ՕxBUG'tTotu>#jDhMj{x?2@@Ƥy`K xgRE˪KJ=*4ܣVߡSP圝T۽kfoT~[O_[-x U+4oY pC`z )tpk S=]S(4ڜ5Rokvw{żzo=N%KeIl GJl**jSwWKϷDgخiPRXJPm-ui{#~^RM7d2zӆi:h]NǬ؏zZ$$z\{E/ۦPP@P@P@b?/N+O|1+c#C|Ҽn_sWo~2~ƞ(}._4cڿMƫsA]JJP\ZI4YB Kڍ*ԜgNpGw 96qJtэiBJ\Dgo2s !5R=.v5+[VK[kY!L|¾jjgQRHN"nK[zc*Q֯[ZXN4]TD^z}^t<"F໬b$pu}3S<7?($Xtܒr'ֽս,fkUZRiGͮiI'y=u[hx_Ʒp//. P$#d$h2k KrE{)40Vu)h&ҵxrq3u*Wݒc%}ݾg5״MOLʇQѴȮ~aƲmUGU$zѭ M­X2Nm^^8)֥VtҩV_Km>Wm]xCLN8+/]ڴtcXʹv0L 8ǗfYugE:k)|ɻ;'nNT̲״nbWWUk[|Yu5mc+*,84$rrWMMJ8\<(Tʒ{4ᤓDiN' I]'mR=t?)4Zuu .%]2ǓDw/]F7UYk5SJ|J2M,{y-Z7F˫Oaߒ23IIbx-xZ(I*[\#aCo' O(a)松j23Tr e g_GArEB*ӄHƬl;YQGyfk fOlvW&ȤC44 bG`cJg}i֕qm5}VIZ}ny3\e RTPS[&vMپTO 77~j~-xƫ]\Y]j־\3F<{_q`77qRH8B.Ӎ6*--6ZegR_N')?eYU ڗ%5x&S5Vݥ/eqw-~xOӵ1ubg,6o*<2s( JJX6KKݮK6pY9]i,;9Ҍ>6\#N^*I6ijqW'_˯xctOգ'SZV5v&hPIgegau}ڌ$bcF"*Ԡսvm&ZL6mfT%%<ijN\m6-Ŀ|2,m'x/慂Iq &i<Įܯۏk_VNɶީ%c B#0'aӒVJI^WdM7.ϐ>nDaQ7?6O?.`&9(S\T]:iBz۳k^WW֍fIgP<*)O͜`F>X,=9hk[KYm\Ϋk4֍]iF\|_n}H$wڻMO/{ϷoKn8p@'qLWddۥoUo#M>fmVߥ~ +Y#0ZYY"G$!9$(o}]m ;:|rG"?t 2"%GlERI'»&}8T'nWc>9J~(cQY~;?/-ׯ+nG=j$U^VH<5YXcFMCT:aꖷq#.i[ 0x*ghZMEu!/uizƯ}N<&ƥνn;~"x^,4ŞV} ?|Qih_6t|0e][i [O%Q־#kVY|f K>3~ j~%7dԼ!qik Qv}Z-M:,[#~[|_oU^"oM?xWI)֭ty~'g]G85o.w:}vZ//C~<ZS>âޭe޴zlŮ x@>%yGm?wLfj^-Kw'tZ|F5VRGXkM=@?nsx_4 xn0/|-}eο-xѴxz5.7 Ҵ=?t7:|%uw6oj|:ƫ{|9ִ z~ZǍu{mBB> GS{:ù-ࡿ/MA*'RР4 |qZ' Wwh74sP݇:=.@:[7־s?z~h;OÏp~_9<Pr0#~(槆 ۊrY$ڻRqm9=nḦim3eo \7ǗdaO^J Y4ѥmkdnrz'OK>8|G.7}^3wo]B@$Ƭˎ :SRikR ^m>VvLEU:mQ8(%fOѦ~2\(̸Q`qۥ~$Mk]vI.^||Ͷ]U}:nCpp'Ӧ1T7}Fe۷$u‘ONX|qMۜ OMm۶[X= .q[+/KQm4he&.ʇ$rz;h&+[Ew/kI^o|7oKsk~$ xٲwOP.&s6m_هMSw޽3C>({)5 xDc֟5ޗA판ڻHYXȳ_oڜ|Ou$>2u׷ zsQms@6e676i:͎??f?ĺ7+k4/i [Zk+qԼ9{[^+k >>x_Ht=f, #(gM⟄Ww k3q{-Oo+]7$:m|'x>i4k1vڔƸ?(uؿNl-|E>OwO^ 4j/ u%α}x_AFմ{=RM-lVӯ=?R'survkI4=*$M, ҳK)̒3;Nrqr[۫Niy8wM*3z4ovV׶]O~vְ*/BGUn`x+S(7Nֲ{+tk3p̲2N*s\ˑ')'{_T~0Yd?DX/19խ-v{$z22ggO.+5OMmnUm>GӞXKVĿiY2a T6\ rsmZYhJ*:ۢ\Wij{٦yT/p7HXckc7vcFU*$E)5{[{0*n0MmjߵsWu ? ^im_?߈8WC 7~$XZ\cG?S]Q%\],i o?&}M/+ҭzmSwp:uQvEZ)=;G#*W/wռ#oOE,A)5 xSBxo6>ye w)_x%|=~5fC?Z?h|Q7>Sï xI#>>&ox^U5h<3hcϢA}^Z]9pfs}JOTյ3iľf>i{xoiK}j4aGt}"x7ëM_tU jkk%lxҼ|k|:f-yz_O -tBk.ӵIo|%hA52W:S1NON7>66Ĵ}+Ɨ%5m'zV-Piv7mkz~*:ý Q>xG'j)Gt[Xm3E׼K.VpX{_;P~ W?~;h|&ڧIҵ/]cмgxN.<:֭ii x5? Xx?$g?MOῇ??k+?w|NWӵOwhzs\z޽_CᏄ >2~wĿE4"@|$׮#:)o[~@-UH'PO(F{iKCy/~,?֛x{vnvRtzG7u ~;2}㎝߄zNic>}#|3x^K :~ڟ5oᧁ~ ]xIJ/w1C׬;uKjm?Tme/Ǐ~SG"Y#_.$wx䄣'R68;^|7Ǖ6]ݮO 9IӔQn_Wk7K?moWLqkc3y懎B>w)!Jf#%-/kI%ֲ] JyRʕK%eu{=Wmo/Imm0&r[%&9Pj IR~֣ߢt;;]B-ެ}5d{6[g3j?iGy|pAh$q<:kK.noeJ %ʝufw]:z}Y-V+T6x!-v'@3AsYa+4ޚo鿙و)Btޟz#3Jٞ8Isǚ5.׮.&A%@m&z_؜ʲ~ӗ&{{h .1znS,6/2 Aʹ^v^nm_N.%gxٓvc`Ofzs^XL^"Vsi5{J-vWU: vn;5$Gt5Y::{~=ik}({.4n\c>V2纳Hily6ݺE;_ekit:#”?G'­k>@6G@+O x_ ^inn|Iy䷷>%"i,WP{?u}F;E<4a[: xx)I&@-]sAҭ[-#Cԥ{FSLtǗ:>v^[F>y-GRoi?.൚&|~m.qjtt @h{X}[E:.α|@u⟉li5aoxNѬtVM*hgKmkVz_G ͧOx7P]ؽh?|Gzmwo֯-& _R2;b~~(I_߈Pxzƃmx!5׏tBϴZ6k+}OŚ\i ՖM_TP #r|1VRzu]RX}bk]KKnZ{>In#("q{g.|Q]|[Ϣ,2FLW096+qJ>gk 7O쵛k+X{WQ>7v| í?%h mLJ'_p ETvj)C]`յo?|Cֽ>E𾭧Et'V\~f5hzE9&[{>mĩ?g?恮xkQe7ETk6^\k5q'9xCErGɵ)j'^?*+I,i4H,#W,*,-}.EL$6fl5+m: Zχ4|[ٞ;9෼亏OS2Dу^[Rt 5%kZtqu-⭙aSH~^1wd??>+]˫_TėNMqwM,7+}q02OF-¼/ԥM<<*. 9^DկZ?zRFvf[D|??ok ΧJ]>FJBCO+9"H$-p@Z\Ec0rQQ945)>zu5R=(g6RNwiZ>H鳌Ӌ[VFnӋBs$y`F>lb0y䛼]mDt2HI:Jk꺾 j^$`)ܮrAR (f2 1hrlJߢ[[OnWki5oL{p^)< e<oSkɻֺlmOziH譭ݥsঋ4y Ǽ(gp>Ơst_/ǼD97EZ`X;uyk_Y7vhSiڽI^\]nKwO3lړCswo\Vz,T #)Xj|]iRm5pfب`uquRM/uݝ֊/c ߇Kv/7xUs8qtSXd2IՈzX[FҫN)TqWZ}oc!JYɧu*dROrKt ǚXZOyQulDy`x-k|%hba{MUl*qFu앵S+ĹPN74MZקnƻT?:c9%+)˯[5z)}-?M wGپ ҃Nt|8xo]/uk][b|]s|]<1kx2|;ӬEgCN>?Oᦣw חO|O|EK_xoM;SW_Y=?7vzݖ躕A7_?O>>('-ŗ^𗄿g N `?t>}KT&{S/|'Vܤ@< Ex^8]Z?ߊ@%?t7[ЖxrX^i>&u)s*Qр2oQy|YN\׆+J%Aj,oH+c&#4vM{E t~%/F7~+߀1.qGֵ]O⦻x]j_m<v{ _ |Q~*_<≴$~_x|k-‰5{SSĴX> ,sƷs7 p*:owtox"I߆%>6^¾$3h4Z4]v7:/t7įatI|<_Y7,gs/R?~~>A#:Mox O/^t_WⴸҎotc1@}'gPlՕj{;W_^ Ӵk߉~"Ӽ*cK U'8BTxSԔQ^VoGF][3Q$g;)y>KE7>6W_𥝅<3}muVy59m66Z.e<}M 2aF?ὥg9Z;FPU$TM<@״c-*3B0mFW:k{ N?iE%[}ӳ}a]J.PjI>k=RNkTLuPIu C<84*IUs=.wo3ʫCP 鷓tזmHi~Py.%v`t u9IVo}lkt>ꬢJ.WZ&ҵn׿A鱼IHٙf`8WEs >:qQn|>-6}MI/;-mx ރy^%[<|9UT2I8U3R4\J795U&w{YV^տmϋѮ=̟ 4iB=[ssXڏ7TZ]g!22Cm357 ٯiRMY9[dtg~#0xjSj5*8/vVMբv92? <k8,ak4KXah`X( QدхqOtTiE-W-4oV&֭:^n^!ԗ^G5joDmrR/eɝcmiY[t "] EsE]&J)uk cΜb@lCk${F./ ͨi%tk1aRhc]At,ֵ76[ZK  bGP _B7t}$G,+n:G$ y-@l{Չo&( :x/RS_,uim[0k7ڇōU_xLi#edkE_#Hhlm.^D =ܲ]OnGgi}O~ӵZ65RLr]o& GIٽd ψ<;OuC(:hY4ߖ18;gC,=zqSyǴ[j#QO)eK7W|FQ&ܜSRMk8j&|c_jmւ]G>J Þ5_St12c8[m;|ۧ EZTl6:++.gԟ ?iâ>ӵTXfYQX@B)2"o2ʕ:+S Brn_{[Y7m{<|Yo=rǃϫ$v =ы,-VRvˉNG)QOܧʤm#[#,jfj!h%);F][ZmfZ~%9h0|$|K^N#>'nuCv0%ܭV\,B -УMKwRn)Fs?s^R??eYͿM6I:Tjef&Gg4Pګ[Xv]p@ʀGgß2>[Zk-oޚlxK}xr/(P@s,-K'jV^pwߣ}KXou=]m~;&~.>3zؒxD~ݱSĿ{/NZ=tthh&;?1fp|B>ko4^8w~ O< W? jZ潡xW-[R5Ҿ xWចo:wb]v0Agwƿ%/>5x ?#6^ ԯ<1[% OMZ?Mqz>~G C~ 6ƺj>-WP.|UN6K@8/>oJj%^7Ũtom?㦻>h:Ë ?~,wz6X~|l>>۶>Kl[['DBDy!T:k9> `=0:P@P@5? ~65|kw>L0Ú<9R2Hv<H'GI);KMM(W׷M:1oWkm괵˺LhƠ !FL$OQ ,}7OiI}ӵ;[uoxkIK V9yer6<oL $ԨZrvj^mmTsd๴{mVM +m=V|32w7q샶mOjZ;Iʁd,\EXҤ+ekovݒVf,5eY5|^" - PI++ݒ<8bP՚c9ID{+{W2xK}'ưmsBK6oi0@Y|>e5q vqӚW?8b^'^ IFQJnsZIGVwGBTj NJ\Ѧ⒌y`j:W9NqymΞ-[ҷqa~~ ko&e\x֑]}=eyBu ̲kkΕj;GUvkW{^Ƒ&}%~x(? [F,Qe2wW= өO$Rm~׵pS捵qoUm\du;hI%]n"Y!;nr/zrrzy>=P@P@5? ~65g|CL fy⿧𼵰um A;iѯ?g؆MRw]~m40/'gob9mn@SڹAbSuq^*q^mxnD}c[Kk`νfe4Hu%YX-},1o6 ،BF7F ).k+ӾUFQ7'U{5m?/5wž8 Ėef6~=EBɩa6Kmh`e7QM6r$tImת9UQM;-7iZo5wω?gV4mZ͆%<xOM0TaUC߲KWWxXjR]e}z#ۭ"[72!?x`B8#W˩oFP3WwT0ٓwUcy;ߚmfs]cx,Ći Z} wnRpGΜjRVR֜(OtU+{XlZNbN3h?g8N2Mki--ck&OѼA?A5u/hz@rhrӯ%uVx fEr p8c8[ WVSMsѿ*qo/Gxj'7*Rbڎ%SMV匿lI{|+o|o/}[h-,-qk vSLꗓ4sjú (mI'v# 2pcJSaZE>X.d)?L/(`Ԏ[:9c1/PVJ7n;~%mCNF`3Rȵi#(mT0,ō~K+]ir*jZ=ԗeKV˒q7G$o=O-./.6cHw*"H$08jZ1 QJj;Z' %QCVޝ^W篦]|cߍ? /mfUotm^=KE[jVRţ)fXy Jރݥz4֭RNeNjͭtZA߱տCo㮙doт=RKh\ \2f=9_Ȼ?p505*-ܯwKz;4R^SޣVOFWooEo饶s:oٿ5A \x\NaF-FRY e8;7.jWRNɳIFW{@!Tu'9$xĺ犼3?_n Ohڮ뛔Kki67zkWXed #r)(oNNSj1QriF)j&ZMJJ1ڊSJɽRroDt6=SBմoM-CHԬdh;)Z)U$fE(7.2 vS`3LIT_POlץJ2-ӓ+˹($W4VۭjWZnx>EҼ9o+D7XZ I'(7 [G<n&28Ӵ(ջJ+肋{ag]Snmšnz(k&oDyelR& FpN *1oM]//uR%F\7_FA?UZK3Y2Ђ98d=qx:25%n}zJcQ)/+_RkzC=6ofHc~BI sz bh97 vV]zkݩFXU=Evo5i%7/qҎTfRiJjv;}1[dY5t s[-2WWqqs<Ƞ+r~ ZSRJjN2~4ixBu[*t=ANM.)(^<-[[z]宼9| $drI[osbNM+i{+&蕯Dτ~|;Og ]8ta"~X{n K9/c/zWn}o>ynb#>_޺]-W?Ci?>ִ[OQP p189xViZRrMjk~{ޞ7JH7dՖtֿvl|syol 4^7WѮdԴlkmKTlɳI0I2E ;O)kUJb%8:nU޺Ԕ4r|~'Z "f%ȥR[N2[7}z`Y#vhү@qt*ܖ}_8/m/ecsKFRӥ?`֩h~\[X]z ۍ>C?e+,Ji>q͍P18,L\=|-x)ʛ M)Э88TJ*P[RM#l>"aQfZHե' Ԅe8i|exT'OĿO.|u_xQ&5w_haci/t (4{X I-~W2xQžp#FaO/f⼳,kbjb4aB6p(J^UkNuqEuCx 7 Qʨ`aVOUկ^jG)R:P )𧌯<~_ ~&y&osC3fCR 5=%KIt$+gWQv省~s[|(^7~~& E<]j;Z7ÏxoQմvj2exm"F_A$ yIp1O]SikVY5JrӾ+w? e^3xž(Ow^52ּ-w|VuKxm:mOM]j1C-j:u%ͷN'Ϲ͆x{EU{vn[{??7߆ioSǚYE+i|UsI̖5KcRj J!i\.g/cuASIߙ?m8~]:|^]G[>MWA䵃^oayJ2j:m e4SMnWKrRp[ۡХsbX|=qG9 p[EXd+ú2m7˰WqЕ\i2e8T)! ڝ)NY5 ڔ]+,2Ζcin8Bi0uhNT)BcVe(I8'Oc;YV2+wݏ_ 6xJ.,aNX-K)y0|! C fṞ]}9TSaJ4ңN VU*Kx, qLjxl'tnuj9:U:''*1pj_Y&6 y_|6۷KڇR%hXXxzY$UHuYt_ޛ ?N۟ \ൺ։$QTҼCwt}gHմmcJ[ KM-d,/m;Kif'I"E/yJN%BM4iSM؋j''~?eھkWVi:w?\j:y,z~eoKsuq,P[ĥ*__biŷd_D9߅QωII}>)zEKxC4]r" RMPۉuKI7Z6ujJNJMI8k-T/kw?]%mβ~o2H BHvF &D’*9_evRkO5O~8"mDžsAjFỸf[h#2 u I ENN+SFޖW>&Axm[e-4z 㑘#B>;azӱmF|k[KRVjl+` ڟ|!񖩤OWh F!ׯ'CH}^6v2E.Z1_=teټn38޷UzoQf~~<!K\k5܅KziK D,zp ⾵bp6Q~Fn|D$GO?SŞ"OkڽϏ\:[c?|?޵ 3,&Fu7Y;62 nS^rOL$5yo~~_OWz;|,~8P/x?Li|g=xN )J~[4mJ19M8OM6_N9Rx۶~:~:?NUԴ~7oq%ĚO53.jW Jqtb.*XiCVetջX~'{ t_A~JkR|%[[i1k7W[TkדQY%[HᲓ[vmYtӌU(E]S^U^g?Akz|>_ߊz{CzBN񖡧ZxS:}hgnI__^<J~ӕh-+XXFT)JRmͥkߧ}[׵S_ >xse:ş: K> oiӋhZ66WƣIpJIi+i_lv1IFRZ'd_-_^tE h~?bl?ƍ_Zޓ^x>i m; ,N$:w{]`d9UZIfqm`gm.?m9bGgSjV>1%Ю<xScrXRiOV댧%)K6ֶB7J+k~_}/?]KKu{N26oeiJc_;,u}FK[d s#E--\_E玘)l]ݔ|+?K%o-G_/ᮧ>kD@Ѵ?ˮHXA;;%4tmV$ :LJ+UTJediJ*OY,-oV-;fdl?>|9OG#SxU"FB6VpM&DELբ\lӒj7uouQc(4j[CgVW(ulj/ 6*B2P<tC/F2^t릚ݥ,EgTvuOe$6* ?.G,t8U|n85Д;'KEyY+kZI̯鯕rqՃS 37=2r3Ciwٚ-$('vv]{7mRݾfd-!yc `O'~hc $p߽R zNmGWފtVJ^{~շKDžR-f|5㻻yZr_#  +)59`srN#rܳ]w*JyGy&7ZQXˉxVWY>Br@ YrZM.]4dvt=ڳ~u:B+nx|BD@D%ʳ`EEk(Uiݭ߷ud vWM=;\~,kIgiOF*fMI;2r$Xy>nךDM?eZ)Yy[dvzi}ko[}-xdxடyqRQr\1 ͐rǻ98VVoDukh`Q^+EnxQ:w&0vm-yQϽzQVQ][8էQ٫?v>[M,K'kٷUlkmXF.4hP1Ii0\mV2iN,,VPGFB6Ss t ֖*NϳV+Q^-|+xf(VT*}&<(镀yV"jUVWjӨҍ4N:(hWvLyksh3"A$dY *n`9o_Q߲_aG~/ߴlF<k^[Ե9,bvxvS.h:$:OХQZ1ݴmߣKKrU PT\ښl{~m{sZ.Of% : J*]XM5U  r^vu}ju;c_r?o/"7S6G⦑K?>;j^ s_V{sY&jKex[KصgMr6VR|U+Vխ,/!;/扭xgW7@lҼA]DִOl msouTVRRMlݚzTQYic]|"OOϋ xŚ.gW5YuV9Oߛ%]*KRTY(Ujjq?}W\W7JSmP߫V'Hi\~?Q 7 1Je/?>|&ھ"SU׼Al֚]ݵ빯o";L,o-uVY$aȥ&ӓW_}:J3WN.\a4׮OIǍ^_Z=OM4۝#گu; &yG ~W}'E<1?!p^t17Ⱇ}}A+E%ht7'| ay /< ޟsOᾣm{RK%/n,4&&25R+MZ-JxJqjMvڻ>o S ;|Ï? ~)>OW??jj]ޡaM+6_4i&ڳNNOM6{%RSVb[-.c¿şR+'G՚W:f=z=惭GZ>"ulp+i-}6~ҩQS$M5\ѿ?5{*s~/&Vu?w[Ŕ>7gZs|MjmE-d[dkժAYOtm8uӌhO.g{{"?e/?7`$nj yfESYlFqgquiu2%)6oCl<%Nc+'ilen/CgVW $x_WGx1]ŤA< =ʓ40+M>jKZ}I[u>񱘡ca"`m,גFs׎5/gnTKe}|A*_/[_}-m4ӧwЊ /9g  1t=@}}ֵ}~ers5t~2M;"#>$h8Py3S IEXm8]-5ntVU?, E$rhs0@I'p8wߵM_KnuӞ.MgHY`c g684)MZOt춵-? nJ|BӠ #QKj]]WNG?sdc9lጧ+wm-Somz{_K%MYK<Ʒ2]hעdi!$!c2Nvh’p8Jwkoi~odԙ{wf#柊bUӡ6/w/qβ]g>RF0Ǡ(F>fNfծIvw)\nZ;]kIخիRJmk~;h? \iOK|m=A z=ܑ^^z6]mÑo+jYYs=_?V;e/(0|?_E pxwWs&Nߘd80ztmmew&WmtOGo7ek-ip|2h<GSr)ҭiEi%d}](k>+)Gl gn ,#$'ں#SJ[k%׶*RUwnd3|?-m 0e<u |sL҅kKKžM]kfkq6W}6X[ !q<>)hTlvUF`Č@8V]UG{[MߢdbSH;ZWd޿5Mu薚svlwRHH^fd$4!q )ǥENRm(wM$޷__-L泿,_,5{TҲ(Pg5ɶ>3ͱUfH. WbNY2W,ek:ZRTZhO^XŹ;]R}^ֳn?f1E?P5'].#UB X003כMSҢ4W}ۥRZY&ݵ?G_Q?ff[oyq{C4%+7moIIvY/7~B>: Ei|C DԵ( ~Xm^yڨ#Xl.'+ڍ ՖHQ_9(jb(Z{ZSmyYzo-ǿ_Dm7O(غml3$zGt( GJ5y'|~u^yG\n"WRW<]$&v_ME[цY;y{ȟJP@bxz'=[%,O:}֫mciq47w39"4f=YMӧ::qs]M$?5r܏-g7eyf7TL.jI0oF۴bG殣,oc75%[7Ὲ.,nB1u4,.cp qphoN[W5u&Oӣ Qqxҩ(,F(^z2*U%NV愥Ni_|?iA?lu?OYOw_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_ci-0OAH]~;X(j'ş|sW.UmJO1W6p542[=3,."fቍZt)SOkpsIJKڳPQEӛns Jn ܗ4`lM֚Z$6:IR!udq|T@dtw8b9 ('8g1׃NK۪3 i+-)|]}QzkM#)YJI#F9&5V{i׷ ]?t{Xo9"H#ko~pBkǥÑįV[Aar¦Աؼ>9JuS$zRPWk}C^|"6~~ƞ@371{cT'dM&Ѥ<5AA`N%eS28㇥N)4I.Q](<jI{؊ッj7_S: (?>W6߰GKy%-lPį[ux$)P)^|%jVɟ_L(?)xE7HiZX>O 'S{;PĈ`mCP1&u4k*ci$照)4JM|+It?ٟ(bqkR˼@px*u&6Y/%B7b+/iZy6_qO_CgVW?fKz|MѰm-"H(A큁J8W uSmfџRwkMzK)][}Tnە 䍼g+̓oItw՛6Iuu{wL"9TN[ ;vIie{꯮rN\Up*@~GV)+7k_ͽ<˯Wy1T> 59@d9ڹ~_EYyyÿx6Gvߒ7^]F r>aVy%zvo۸#uvߡH[Yi\l WKOowFŕIۊʯ:աxYFi]Ŧ^Kh]^8EkWϚ|gEux~!3!o.~El`6v* {Rk]hj4ۏ3}m}vG#>|"ϫpAmkE ym䑙f :+Yr˕=nRz݉j{r%&{[ϻ? ©ܘFRII'=Gb*{\LG7iI٭mc֌)5yYX61 #9'9nڦjQ+vq_w~;|n>#B8eM#0O-qaP&erʙUe_3Ӕq9T5EhYkwWGB*]V'G4ۙ;Oxz/ x?>5tM KәT -Ü n2FVb}+Ug׬jMzJMVG*z4ogJ~mE]Y]p ( @~7߇<:;5pLU?"p\<ă90y^܃8?~k~+SՏ-|-xU/QjZ}Q:ZiZea znlجD!M9WJI{ssVh(R~[pԲTqv#sx',,*c',{E4xƟjRiƿACo^MZϊ5 .LG^4Wږ*jBY f-TS8'(C}fG>kÑ5Y5qJ̸&kf_N!ZJuT:،dt8Hk{JWM{XQH~\>gk:Jƞ-].7>t=义kإ0Is [xr:+}JpeJ3j9J\j6-;5xWeù.IJ888NIGʄAxsƮ]){ DeV5=^~+x=,e+AQH=?/w{\?F?!~vOY^&_|KRTt4O9,x۔e?)R:Wn a^%j螺٦~WJ6OtowQٯ-]<3y-+LvPyo<aA ذPN 89PzrJVy_=v9Eֿ硋+(V0T=c9ԒR M:.uvzuJ)`aFp<){ixY{_~r-b{=bۋ[ Xx TmׯA^M$>ŧj]5ػ'4(5$5mS>rıp1>* F)=r^O}{=lΰmꓵwU۠4˸Q)bC:\~ `9'9s6ʚ뵓i'+$オK|ryd5Ŀ>HM#1X1fihm;==Mݶ4+>4|,l*cmJ!B CWu^vOOߝ5:[MzZj8>I5?B(K3\뺽oCn8 q׈(ҫ^vJVޞ8Go;N4yIFӽPl,uO5cƅ[5^A! F`хG%b+\nO'\*Fܫ뤪u{_c*xh,=>˗l4w}8zW˟FP@Aim#x!v=Y≘ՙ >tNN q{C~i>7@/Oح?CcK}S#A+OT}}?n4??bk=/Oح?CcK}S#A+OT崶F BC,1+ `ځt5PzD@}^)8@:~_S|[lRM@#4i>6׆t͋)=U{yYAInc]* + ng/I{\+Z4jX?X%%gVoi2n.x7%na5GC uhQZI+)&~o GPAw 0 3.&iɺ=&״R-+Jz{="fX̧Fz8?W%N7oNZwG~>nr0Ukn\v:(A=O5|䞎]w߷n\|RFyR2IUR# x3~8VfI>^z\E8IYI}[߿mMҷ-﷥{X~ޣ}%\0$F]ot+R2(]m2hҍ|ʿ9C3&UKGѤ7_ST{{)+-{k;kh\_kH4 _z%COV{!Ao,N h”G()>z\48B WE)J_ 9 ^S[,Ք,~oVPxXOiq$][x{m!q!rEs֔:ܯzpIIjIk>CGM-dm^ӽG>xPGXʎ/czW\4]ջTæ_oOSh<'6X/g;wq YH{8y6G1.}B\|-{Q$w\r}mUN8jUqS`{|n7c.xj(7>O)lMJmJBq1=I=U,|hFz1RܭkyQSk R^V߯}y}Cg?@P}Co__?@P}Co__?@P}Co__?@P}Coy'דx>J20}}9h;-k_ڍxhjUĿ(6B$u$@|z[IdvF;-!D$E_,-s|ܯ3wwn[:#JmEFR⒊QJ)U%KeBNwr&d޷SNAapZJ&ZRLZx2g4NlyR iUK~ztV'[7cIKɮb)pJ$xTtKI%(Y|{k^ lu {W5;X[>W.+}M4ֳ`t|p+b1qsVjbrթVsMӔYiSJ)T!跊J/揤_V[|KTA/D#OX>hOelc5~XDX_Wόu][U񏉵-OSԼM_j:}_]^^sy{ys,WW=I,<@?PK!Wyyyimages/ai-adb.pngnu[PNG  IHDRjtPLTEלs֞sqqss־ssセᄑ׽>>sqsֽq֞ssssלワ֞sֽqsq5 kIDATx윉0 @P-r}0@`!Ґ&IVVhQ}k'"׮~Āq~Ġj>h/O LV     ''OQp/5jl}J4ۛ&$Q.m_AШ:kt;_&x:Hj)*(K.ʌսc 4kف5>t>SHe1N8v݈FQP@gBIjg@TLB x)C[Y̏ ^WMrO$p"Ľ>%iӀ?z+z=ͮΟnڠbzoA]?rf&6F 7pW$կ fUVvutGwtG8;z8;z8;z8;z8;z8;z8WY-IRv#h ]F-%bH Zzjtk7t7CGWpTMTS{D[zL`Kt[MJt:K>\<(?õMҕeN=kQqn=n,iH{Y邇 g}}! :tj>^ϒ6t~[vR%z>qg>w)l/v_B7buѿ9;;;;)#z@Qe|OtzGf7~3tC_BmA{iMc*[weLeؽ2׳:K%q%pi%88/)CoFf4}z2El4dTD09|"tK:Z8y%ղ|IKI :^^,YBa/; QOn;Z1݋Yce_:`}~0?M.ZFa}wLԭ1+5s(uhg(EOz0Rdi7?tĭ /+1 m'L)G x˕F53oUЗ}{g6 Ea*#x4iM{Uսu\%YҒ:N?r'RϺ:Y?Bg9z'v?нuÃ.OqdaW]4PEǖ3Vq Wy詞];Ύ9\RC7 ގޟFn/wylmb:]ݞ\wQ{OZZV˝*xu4=_wu}I*vlet2k8ŅAr {4|/xv+:8rw1letb/2k|9F辸p #Y@k RV k"`E'$ƏR Ӝ"aWAkMj_ua:ƖȤ)[cD1+h Qn%2i1Foǜ[BG>:2z 4Y0et{"ǧLQC:n1&onck86~1 KkN:ʖ9/t<}|(G #;ͭ7Y'%OK?}RQ@7NNYffcW1žI#O#/eo ngأ$ n,g}!;\rC>bfsd* ½t J\?? '2Mn7YtҰ9(@'G$LZ.`+Ug#:z >\T(總=ft:5Zb~~a:]ס12qQ9N, Gvo:Et/1]:]@R| Rebecca Paddon Canva CC }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?+ _\xO $~k)wݜ],NI%^5b+(b1Q"S"}VSJv#jVnu9UYj4[5-yWmxM|<&9"SoKut׾[w裎 rOm~I~O,W? | v2|H빎UF}zp.u5K/E=MoU<{q);/ʺo{|=G Uf|7qSx,}f+o"/!I6V:ʥj3Wk6#)ʣiIqWZ_Z"5ׅ|7f/tߞ5mt1%L4 滕׫Vm":p9՝z*+h+I-uיpM^j[ RTRF7QS bgUɸ($/>'Ge _}#A$UВ;r]`Yrp׀1YICZMT1xHo (vӳzYypc8:[7XKԥJδiw\(i(*QܓiR!՜ kl+sF84hѝBj2ꅗh0ѽ \1J1bRӚ+sV֓wNbpjOT YR)T ..Ia'_е׾f(&aլU[oYj+!h[%>zڎyYU ފVSq${Ɣi)N6}~ qeUbҥ*1PjJ4|%-7ѝfZyu52]Ko(?f#*nL)u`+,~s+Um QTҾo֏2Z?U% :ܮH6VK #SGZkb39U4x\w>IbNJQ*[JJ mjK,>.Vi)JKFoG7^W;Qς|3qZG+yABgc1bH7qe':+OZ馾gŧن/:Ԛ7{ާ+{Dڭi,L"$Ţ¡!7q[: Wik}kkmv,eYN5jFi:Zٻ6^3[OGk. Mm=oGIPIO 33Vuqة)׫j#tWӿ[{Vղ߭N[j~|-YPޙZ{4Y<)fH̓Hyp,7q__L5;TmžyJRvn{>^YMF>4m+T׳׀ƞׇBl7hn.T|qmِ^p+]Ib0' N)MSR7^֭ͧPZVw~R]zYڬ"6m'+_mU~|0I{xgF<[莞+$ˣYۢ>d7`X;rsU;?bVtvm'mi:]MBB~Vw=?% ):C% )+_ %z?JW? ~ |W߾9xw')oJc#h4~9 WAK•?D~=~+oO@~ `C|*lA$A:6  x|`~7ֺ74گҼ5gkeAgMѭഷHa;tH"4XR$@ _^ U1'|&71SxsJTwR~ G'qC^-ݼF&zfZic;S/ykw)Y{FO>+owt\"IX * xKgfԢ$w !cxq// =Tג[EV xkKYk;ćiF⬏YO5JiF>(F)Ŵ%mmˮtGZUUjI=׻8n׿{UKѤ]iYխb*bN[TrrƤspnXiRt-9fHqY*[rYVI+r:r_ĥՠ ا T b$S îӕ4jҧ7(:n ˚՝ٴSĺ(ʝ(J.2Eꚺ^?ZWiwd2Y6`r0N5S|TR\^뫿o&x)rT[7edC3Io Ŵl)A+2F+(l+`FzZ*<׋W]+wX`$Ihuu{;] pxᎤJm G$yL | 08<6zbﻷ[[[ve''*vmtN׾ߌ~4i,z.,*$QMbKN쎂C Ԗ0y7%}bWnbZUIFSe{mu/w)pYJ|ȬX )=y1toOk45ycKJWm/g[[?6ԼeK+ /%7 hZ  5橫!X$1~#)2uyU*1V]T[ew>Z*TsN"Rݻ7~+ïhR'=t{ۨ@SM I9< +}S/,=5+%Q]JW> OP Y[s5y͞?:6 (Oo\P22@*H$A@ ^}=sG^zz2*A^: k}1@|k?ڇ*q?;)^&ozfOxE [8昸$_78s*ެZiCOk)8I[䬵k{lK --oM[EYum3Ux4ҋK"4pg H2VaQgNSh{.yv}\!W>ҤTwVbhӍJ0B*)i9ɷir6_ 8u]]\wmuuiY|Vk 'i *eBYx)>*b RSP9ӣ89GjG&[x,Ǝ!GqX)PZBÕN%:%SX&Yi4[P"dXF$vV@2 ʸy`Yܡ\5QC9҄kTRƤ,+(JQ'䚔m&#ByN8xYcc$k>*x!ǁx(Io5|$̫fRS[+М JQtfU)J#3:)e*,~^*x'Qu9e:\֧N%zuc=E9E{c$-U&h]nI5{k!FX,->o2 DU*4CBR^nZmBJ07R#*jJ'ITvU̧t׽|G k޳ii~".X0%oc!.^2Hx*ѭ *7N1NV/tˈ3 TB-I4J9M%R6^9Sh5LeߵN#'- H*8;پVWIw"RʹVO[zuvo ŷuIlޘf@XI*@߽Np|` rWe)P&tӵnp':Q/FwMmMZGc4I#&/gPдZAG~]WN2Ρ1D\##C?8U|gÿioj9X| ]6.[ε(mO-t7t⎫]ri.,vFŏ,"g_?g>_ů=[]7^| ;ú Z2E=k_<?=;׊|j3iu+w-䱔Sk2H|+e|S?><~1x;Pu=[߆3|95$񗊼oͽmht~ѿ/ gmM~~(4 A#/ b}aMGZBmuBgO)ğ_ÿV|d첿wOx|Gut^\<9xV-/!lu T_I[?-~?g|J~uό-xS%W~#񦱦k.si 4 ׈UIt- i?P3jGb?/N+KԴdVLJ9%1$XDD6iXc?Ԍ⠢h'5iEY-)Qxc]|Lw5SLD,F+rάS|k^/w{[o ]PCI, HXz!႟3WBFሔb.[KrM*r8Jx9rPI'('h%ֻVn5i+?ڑegJQ\MN+rWGo,.Qb`Q1xjT3BRnV*IIÑ^M1M%C~}B5.fSkFj<et)n]'%ŴS *)F?me,'M9Q^U2sӥZHO 8Bjx)\،;R(3E<3<&;8qPQJV\R%.Wl6#2)y5+JIOiV3k>m4%֣/Z&;}^ay}0MƗ*4++Rt,ԧ:g~2 Jw)+}7 UjGQ̲M֕^2ʂN~kjeWrJ Ҋ^L1ssT rԍJS/r ҧT,V "So<:bOj()jnq+*)$5CyUJ0 xQR7*NMѡ{'*iƥ)T/f>%éMdm[:{[xfrza.׺t-ͽ$,K9:U!Nqⰾ,%Q[\jm;pJ4U:ЮSeJkubsCԦNPS-?"oiK.tK}\ZskZ|7MͣRuXu(E"_uJ&3$&.JNJ5U)Τ9b?֝\ ԩ*#b0o*A<"W^Rg+\mI%MNT!yFB4)MI5';8%I]vW[d`JU58IEªvSݤI7WikYX ZܨpVG%\SͩOuyNPݬZ]替cm[um;]o< nA;T઀pz |~\QZީu{kRBh%k]j^;Zi׈ ʫP@8 9aZNI{g& yBzrj.6Mt_u-☢M⮽*xbu^{S`Xs/NMAeN#V*/6hsyC $ahI8)bj%zSOGsjٟ?5o^ ]cUEcz',Kt{MS,7:M{G8rO|߳Lj|;M+-U/qC??<5 xwMo$(jcYOyip&|{?\ A~~7ԡύ>ɪ >óiU_R;,Z߆ԵmBwk$ cjn'x}ӿfԵ [OA ZT>$~'յY5/ \\[Y o(Z?ew+?< ߆:N_3Ծº4m'ݏJ%/5i}]F>;x^MSo]KGԼU|6״_XxW_=^x@ӡ=mi{b%.>\>!t j?? <^+Tq /~CgI_DYs6}<:|ne\w~~6]{w#~$|hwWuC;3VexzׇOZ^ZY <)!؟x~=|-ӿgW(ƍ᛿4 [UID3+XAt2Aj7ط8Mj~6A_w!}ǁ//mK/ XdǮ[GMJ}O_-md [GRN+TϿ!vOY^&/wjΣ4vz 60xsNVT (-Ԓe o4xKKRgԭ'KFܯi85nϽF{A2B)'J'8ŮXУT朽Ϭה*6E~4\Xi_Gu76v;yFDs\p]/,1v_ʰXn'8,N*JaFrzԩ;GHIk6։s>ex`XjJ4ZQSU%N<*\iF 0jJ?o>X4| U&47Lխ`;_VhQ1(QƕLfqYkUF\fMEZn-]^W٫XoNʞ5ovnVӾci5tS/$sܼR%6FC򌏮r*% EB-4KT;%cɪؚҌ{+V};{_ï|Ꮛ3TWkluF'ɡQHnKm`d s<&XU/wF嵪ӝ:qU!;YMǖIŶ2NO/Q;Zy<g^{Jt?Zk!AO㇋2࿈6yYK;uofcOMZGCc1Yd3,HŒCFUi)Ӯ9^~ν()9N.`SLژCZ..ያ ]Gkl*ca^-l.;)BS_e7)~6r')|a:їaF*Pn4SjTڋwM8K{6֩ΪiRt ORtڌ$F\g%U^ 9ֱ}L麵̡[ #Uwms,*pYEF\ImgIs'v1s|>#CZxxx*ЏpT,E%Rdl[GN t8e5Y?{%ŽDa*l">a ;ǔ+VPOIm{Ix'`=՛tB0KIPJ޽9Y5O|7}}h#K ]NW\oR}5jԱ4Һ)/u-vZO_#JxjUOҌ.f֖[zG:hMV/}j=u8[!H]%cqxܯURyI=m۶ײ(quĖ=mW}}_>$?ᯆݧԾ" $&iTY#M>#:SI”W]$D`S(_zq^y(zߧdK-s /\ |&c_ݯ>־Ҿf}J=b2͐/IrFU,LmS5>J4cg/>.eW^6!a>J6}dj&5fJn i#Z-ONshԮ/ ٙıIl잡 _ τ3^5 >5U|YA&|SqֿQe}.(!kk9Aq,ZR3v~,|J1^G|IW^/|xixa=|:Hl|GYj:-c('+x>o$i|x/u.jh_?S=.7_IY3 #|/;^?zxZH`m+Ju)Q4k鰽0|{7_o,e?|>>$EE$$ӣU HGU_F߳ P|+i>${ދyٍCK:Y麥aB3\[&uv?˒0Nhװ9sk#WM}c/Ͷ_ܾcx=M4I4o E$S %Mnp)X140קAi({Yҫ[ITN֕Ԟ\ÑW(̳\*(C U]i-w+ No9I޷{lN>5Żuj1K{v@YR`v@9PJje,=xsRRjP9YMrj:ucQBp|"(KiFQ~M+ߥkF>;<'~?PiWZ~ u.=I-xED1^Y!-VF_a*^/ƴdܣ״'O%xRc^RJUNo(ICC?O5(p4aNK}5~u+ =9%z> ?MuC}12x?ŶqnUYJ\7VB~%(ff(Un>읯WVQ9rޝtՄE;^znJ8'jsM9Fԯe+7m}yv3L _x)4oh_-ԳYGo RQbMz-F-S^+'NIFϙӌvuh՗,1<ʔ&G2G2TቒRxԧZ?H.ia(ԋ9sϕ7ڮ6~3~Z_K-3%Ԗ궧McsGg*,Pg.VFH)<0&3"5<~]: XxN2\0Ôʕ1Y&' > ,&qFT*rsԿ߈tM;>'Hjhqi0x@Ⱥ]GI?jkW[TMSMbӭn[󌂽\ͲE<.qMcR4}m5ǘ c)d|[Cpgq2o SRpfV*gOč?TdLJ#мW 旧Wgjɺ{y4F43_۱7V?m*TcK WXXvu)֤ R _S<TRG\ӫ 9R) u~W)/uD?7KO᷊/5y"M{-SO AX1^XX|QE L~PΞ&bRTi'h.Sjz6rIyΰТ%oNkGT:irGބex|O-kSPMOTľG1Dru]>գA?f93έRaUz,iMԤBl<~m2էp*TlSZ*|~MNRSJ5 Fw#N𶩨iIt4I,nM?Ku>ue`,Fa47:ox$٨֓qRikWǼyS4߶*rz)nq!9M6hj#:yLi'l@@A!ǡfJ2kߔ7ze믖~qi^z/+Q] L?=R#{m;| Ko y[yNRG,[I?c_;:oٯY[T{M+5ahO/%% <Լ)ҵ?i1,HOnsws+ph?TZJ՛wS^B {Wߞu%>i>pJ8^k?_&5lj'T_4 m׊|o|S Twi,ĺ}Ν[ZiIuj>]Awvד"D:?6?C;:lM/'o+^3<9{M _OkgMC[zfm#M[wim ON6h>ƺNIG__[=Վ\-@g6.k߲+,|kHloZό%^3;cz^x+JOB|YijO=MHKa:sVKSQ~<|_~|2??fG|hk=_W /Oo|@,5}gG=7I}p~-9h>?x ,>B|moL&$|3_h^7x /Kޣ\Mj6+%Ȇ++g@{rg{: ?i58ѪJ<$Gbp8WP[JkjV8Snqu]:uMZxvmۏ\{ o<60֣F_4&WwW;:mr6yF?1y%Z愚tM%gNc6xIyRX嚺< gc WF+ RXҭNQZ+ۭ<W^j*Mik]'?`VPwxk^yamGh>$M!<&W>,jX]c4 < _ IUቍHʥ/ih)EM{JNpfB/gYQT#5 U)NK*VbT:J&RoC>:jG/u_ӭWT[MWF$UQ6imZՂZvb_p)ifyPJ\DP),L\]X:U%yIӵ&I(ȱ0)ٔ֎ќ**8{Z^NW<_l|i>*tVOH4KFgIdA>9֡[V.ZU!)œaN+ʤir)}0>%,ךxZ*G}d䊩-ͅ%fhCak)T)ƝDjJJZ2;ԕIYCgR faNtۦ U):FUS5.>-|#ׄR{Kyis})NOݧ^X?*qu#h4f|!53-D~̿/#ag[--|'z1[E$܌M/? 18\ ;vZbӡ^Օ͉ ?SQoG^Egmcgv֖PCgio6F8QG`vI%eZ%-,Je.S ( ( k1@}'gPlՕj~5ޘk.MӠ!3$J@30@ZdI;uj6ݾ_c ʲ3}p8QWM)5鸖0>oT&v(mdbqwn&M/uu(֫;]F-nY]ݥ3MXh@ †brI$H)+o\t[wVuX٢XV)@#\'=k7*Nz[jS>Wm{~O5> `AP亀q 7>6﫷ܴ^};vzxnX;E{k&mwVn鯜]a8ó|˂ cԜiqeϯW<ފ۽lz($I;+{%/_үa w,O䑷fCfyV$wzkw`>Wo{O/mkd+}<R坭lI\ZɈ%sWxn4)SaQeNpVn*MrGT%=l>2y>%W, E+EFW ikAg7>,,e+ fۥ\f"2ʖ 4֒2b兖ICj)݅F4֜A)MUQYjx9P {J5 ͸)6Բg .Met1iY_W)Ub%6inܷ+^Z9?_OH~-K&խ䰞{kvD |wk4V SKs $RMϛ5+&Jte*pEG3yIʪ=/1|~&4M*ܴ(ZRToֽ1<ov:αo-΋{ZuYNP{ӦYaAx!h{RA"5Uj~΅Z5(ҕ?kIG:ѝߴx&Rϝ&gi18J+pЫV.񋩆ETrP|WO=*k>s.4)ޭyoa$rk:֋q p8R}tko m$F.Լ9ͪU_ٵaU4qVrQӔe(r76g3`pXqؼ8iENh֍TҫKJ_7 VG[DU,.4VxwW+[8"'/;gk){hJM,NQmɄ"zh5̶~V| rJ6[odr^*/ZW ־!h ( ( k1@}'gPlՕjRT<< e-9s:VkTOTn}vA`b4[5$fw)8VLJ )Yx8fe'x0io̗-oEv{Y:j*jFNͤ}[-Wg9$ipbNq1894DSi릟?Ϫ>O5u I>kidm}=XHwy d`g=##\v]kOM90RIv[~.KKym*@nsWRm7oM-ONǹFД,nomm'+㆙#H0 prNz|O5z7}_+Zy:vKt{u{lyt:帑I%F>RIb OHBrSz-;gpՓ.lwMWkm&uߢJW!QYC:HG 򹯪ckBU$oOGwk4bFb%g8Fsnvի=lvӳ?+qռv.섓O$lr7l`/_?&*HF56uW]#%tzUWu/˪I{꒾m&}BheQی1s$VK刅^nɭw{|G*q֒ޯ}cƭsi3wu/su8OoF3U*I8VWvRN7wQe؉4jŤ:}s[[-UھS'HA|.k@ 5llm%A+ϣT5F* "u+fV(*)B G>uS\?ϸ'VtNSTҭrmkmG>`C&y5jɧ6k"9GUY#`?r472SS `(-Z$7i/9<&.ZhI;ZN'h~׶lP@P@P@5? ~65~2xeӕ[M-/6N1uhZY֪ziW碹p -cKђi-/Ws%W6ߵ޹* xVcv!jŀ?-TJ8iQS8֔a)ɯulQ񲣂W+*թBV)I$vv]]oWsr>؅Dv֐V#sd>:ehK+Z$Τ\[Mk%.9R24 E;1M]̯wZx H/-u[ˍ>{ew-$Iᑋ |9Y.6ʱINTkeFk Vn5^<ד(]+A7ޖGؿ OK}VTḂHpt90.kSa97eRu{Һ_URNW*vK[%dK}4Xؑ9d?t.2YFc 95WEV֯t9pЕG9+*IiIGvյY`A(;Өx4}&u=Z6𭾻 %Ι{-լzƟrVsH0X  #yeio:O6WwzFsh~\4WmgifHK,kk)Ӧ\0j_ޜ*Q,SQY*nn#Pa0RQ`gFrn''A(j^Ѕ?^+.'o >ż'$Hd\7R׀pp\>j $"eXYf8z^FN{g& 'Wczg<%XW}iJ7S;:x+_%&uO|OMu@oufy isgNXc۵6*Vpl5o*XvM$AuRvo^Qx5Se)IaQ^MUh>>l( ( ( k1@}'gPlՕj4$#نݾk`apFGTix&gs]4i=?cY,]f4}UzIM&߉"b,F{k х\40\3H8ԫ[FZm8ʥWoK'ַeKh˞vIwnm7o~ Wkþ-e~i+5D}Gm!c)kXi.$, UIeX<1WW撄/jnWznhdc%>YBN}GQn'?<3{ėK}Ozvy,n^:η$#xjSM,ZHkSZJ$Q !9aQ:pRjSQ5Ӎ˙$z/5gO7 Ѩ*J1ʕ斷e?6TԐxTH~]3V:ˍu >=J1$3 Q1~S?K :.J{$⪥)ZpJ~\Ӧ;ԬqV(U<\y|\a95xz^T6!\Jd,Ug5˘etyG8sJm㦿:fC^ln"uޯ>"ڍh^{{{r:-U]dF.QlLj 3,l(Mq&vOIk'2%N)&du^kާv<=_sEGsȗYk1O#M? m0}đF~eTP:i8rjtZm{+^ܼӧbއ8e8TqjrZn -M8FRw>Y5GSn|5}ȼ9VӚ[ R$)洹kx.[x~I;(#rM7fzg?^]C>#h<;b^UΛ(K}fX]|im73Kirw9WP(ѧ)rTRP:jw8<=LDcjNQQ.r"vW|_om#4&k #("9kfI"^V6x:s)ӓwQi٨&ٵ$Q-mJIu8$'kvI]w~t#oo68*clG+;4i@_yU5%5{.맪]a6tmtzWT6ch^6խSF7vPIl1Y3rL9z5diVj벻sթNMI$wRQ|o^M-%5K6ʻV .Hؗ71Gwy%tW*ul$JKrSM[hmWnQIMNͣ&u"ei*j-=Tdڶ+4ݺKOIho29K-HkĮH̥# N}){EҝjTMYlKMֈ:̲.{^1{ʹpk]Z~Ś Kk~ Ͽ|gP+ŸwN,#GyPߓdMJYc#>\VixW9+:NcV8pjRX, v淽F? *(|w(2<,51Jj?#N?ICcp6ʑDG5 xl= 5%KF k:08-;F)~&LV"&kTUT9TMJ1 ( ( (tP_?q??ex?}Bjtf_#NmG*-=jH?,̪X]q+TvgP,moxUg=I+c!] b-_5},f8$>rN.;~iK6Ûkv޵E]/wn͢&ӓ맼Zu{i}[l+R,MlDvV;[v,4tcTrK4{HVI9#5(֚ĥ)k'~k[&mK =dJ-txcVk=YB"$V֧{Ǖ ;KXј'n4SNu/G+>Td}Zu>uFwmvn??5>;'0ؽm-f`x/m #HzU#Q(Ru*66Vf]7^5.Tc))ݥ.^ӫǖqIH*cIzA1gt&F?I==^84ӌwgikhzwYRGhcfg% rÑ^VY/gMFI?y$k՟?EaA9+E5议߶14[IVm9$Asm˃Gᕈ99kׯ&60i4If[|a$IE^IsI%z|HDp*i$lS,3! ;FnrZn*qn8k׺wONk*.QݶQ=HY[pJW9pM%G-ŸRI+NK_%[rXjuut}v[" EvMK͝1Yxp0UĠm sx]onvGe5P4$M-WW-<ϒ?֙9oEx VG.0de<ܲVgX*JjJ=WZ=BAF$5w˧OZWsiYCY#-fBnf|v,R~ǖjbhPV)Tz +s[tKW4 UƜ[JNvoV՛De~t;̓f\E< H#٘`$̇R ۴ cKo+-..u]/9ۚ-%vJk [QM.Kִkl'IXoIlH0 T˳+jQѩ;I4ޚZ *>TfOkͦlxsQ/'Ou-_cǿgKin>#Y$#D{Hf[fW+ e̸kkR-Wi(iJ/d*M1iGQNoyc),Rm{ENjfm)Tr}suP@P@P@5? ~65<7v'{9 iv9rN&j]kZ#2[`TUxkaw~> [7_<چY=8!|t*.o_ 3+ksԥ)njUwjw] ڸЯ s>hNMl-]kmRԕ=< mkE-XG"6wNph ǃ5؉fxَaVR_c9jMۮ4gң#:ԗ+} UT+d'>Ч^NXdJvKo7 6gӧ^ WJ-Vڕ7km]+mu{ʳxJ-Y/yە^U\435SNa"1;JpmzםPUr[UgѬ6Rn׍SLYI˭uiUvle*V9^A)e$*_e'h%8g{mjm7L}^NQI;=ug4~!ܻdF;z*'-梆*F'9kڋ߿|ls'xӼS&ݛ}4]wtVijw귐i5ǜfN+7QZOH[6(mFSW Jhwmnޗ?-c?e??7_O~&5U3E>eN-oa6]:yvYd={*Mwws?&?,$ԣ1Nz8J2(_hR0ϭ9Ji~(cQY~;?/-ׯ+(<?P/gQwhO}5^ _ mumsPҼ=+oY[]BῊ;vMo_ <xm3Z~ m=1od5KhVk{ ?ovռ!?z֎- WW/"\֗\j)Ot[3oymjZ<؀.''|J|YOi>#{Ɩk@q= ?ZI{IչFNbX5k?ooڏڝĺn8W>96S}MKgկDӬ 7o}.i[|5/]t⛍jGvumy.>VNgsexb,< ?: :+QK?G\ fZ@.~^O|_ FOo<]ti:OᄷrxgK>,jUk Qn-0izō8Sy7CA7^;"w|1-J]Qq +CLngCshP]mh>Ff'ïjÝkImឧ(_ xW$+izu= >\< Ꮜ>$x;u- c@n9Ю|Eq)>6{?V=|-o_h<e5 k~#n+?]70'u˭ Gm=-Gw|W5_Iu]S^u]-l-5H4>Rg)dV'|@meuiznwS4&E4@vOY^&QQV?goQ,͟\WtMn畷ouv_U¥{?1r'*{}F8YGC<.mcxdPd+6x|osS0z21vj5;RkJRUq*t;4d]UզyrNܸ* x9n#Riޤݾ};kWƄ8^U]t(YEWWĒx'$ &:eRm+n򿕻4vOSy)*iqI9t|k]ȏB׼?zli"WqQQw١QҦiS[J1۵g/O懷VR\қk>׳];^:<Zav6n&Clmă\A.FS\ӓN2vj~b)jUB!JII**2QpNoTwmx52Ζ֗#dڸSVi)v^FGyQqZQro{)s8c/{9La]5gB(FWf۫%eCe40w{|ˋf{kf8 HYi?;6Igk.X.U&gYQx/Tm+\XBp2W#~@̓_I3Vm^NY}.awQmID\4-^/qW'o4/\-u 7WԠIo,$=ݾd ۷ s O0gҕJ2Vd\-^֖&3$2,=\B"1tzգ 988K|ԭ%-N] E.6ntV2"!qWeIOPVwVM_ի_?u*TJ2jrIVznymx\-_~4x+ĶoW_5R8VF_5ehȬ+U M֪N4S{U 01Nb-B:K9jy}')&?$>~ZG?'?jiOK4{ne;ȋ,½܆&kf'7mN~t6>.'apKp)8H4MԟW4?D~!x ?<⏇1QtK0^]i]z^M ݫdX只02u׷ zsQms@6e676i:͎??f?ĺ7+k4/i [Zk+qԼ9{[^+k >>x_Ht=f, #(gM⟄Ww k3q{-Oo+]7$:m|'x>i4k1vڔƸ?(uؿNl-|E>OwO^ 4j/ u%α}x_AFմ{=RM-lVӯ=?R'survkI4=*$M, ҳK)̒31H0I Υ#`zy5}}Ng[<K4x sY^v=ֵ`iЖ7IY@¼2<_ f1F.6ZaQ9[.Oeҍ, )+)MroUȓ]6~gH2}_(hr[iYAbdM0MMTӵ]Oh!Rܔ\fEf㊽Gl=_z6)k}7 vU7h\PZPUZRt(I>I4禛TxTapqmP(6ItVSǶEJ}HA%Cm 0^r&7FJQwz7ݕЃ jJ6n1I]ӲdICB\xCJ5൑@w Kz%X5NnJIw|#8 UJOMڥ:jѾWNymMͲ;j th:If@NIRp YY{q)'t)FK]ץצ6yWJW}~g9Ks+|Þvz2N+hI/_C(?h+h}{yo)oiBqvaѬ/-Ơ$Hwlqls'b[R湖H+_zuǐX2`/rMqSUZ)wW+[{{ qr)=-[ޖMZ~><k'.|Swuq?ڳzw5l" DdZç >>0ҵ&e|Q^rb8|;&.vAkQI5e(]]FH@__t.ң-7πF:I䊋~6$g\2_0b=H)(}Ih.~ڶ)[V>8|#xT׼1O u\喧x+i}Qz@՚s3wx|?? :ߎt2?|Afw]sV:F:$-ӗlno77 4uM[^?|Kk^8ޣᏆO7{ោ6M63~ 񝷈/.COѼkN]k %{ S_5U|+|{z𗂼M}OO-|@止xZZadZXZY?]h~ ^-_xwO-G||:L,/< J__Va ֺ62YPnj?n+ ƺíFk8<1Zk u0tm2D/8;T`'V4Zk*5|~~|_*/?xt_Mxޑyok~h>,KGҼi}Yjگ[f|Wk2.cy~Gּ£|;е#ᗄ|B~(H<x:<3♾xJ[յ4]{ľegxn <%s'㿎V(_[Wm|>ĝ+Qb= Qzáj֖_x'os]?Շ=O|#ݟq^agqx ;Ty7zh:%ߵ>O.|K?[ 'O-Mz3</OIZ ݮTyejΟ+O |ƞ,Դ?Y~g߉oS i1犧Wk~k#ͮ#v~д{ŷįj(sAeǠx+_ߏ~Oo|75|A\ |Yj+꺆\[hS8wm_xSL--7G|!=sxWX/^>8-GfF37 n?>;买\x׉|K/g}oO=z÷_ԺVM<-XxľI_Q17. ?,j~6vjDZ(i, MrFp8V~vVuwl<<_MOE~OĴ/j 1UJ(F\5iehJ񶒷WpM=w֌cuBHV$:} fq2oJrJJ+s&[t롙`RBTIӴ̮Jo'%O^վ vWZm}_xD=v<'u;k"[hm4طq J8Z5V*jqA(Ri.>/x c8+1Ace brڵpZp}pj6cpqPW]ReT/4u.47N[{ṏi᥎Ao$x ;|]~JoiQ~٨ .++dI0ONxaq'18͸)ԥB-M66U ߀|M6zTw w_'Ӓ6wۖ MB;R\դ׋ߵ|^i97u}UMsQUݵo"HR'L]e<өS,$)biש0BbjR׾/x N$R[۟ xP\4+j~ :0zmmm<<|[C_ _JncxM.VڭRq=ΏiީhcJ}/LOHW{[|? 4 pZcqL}>]?@O{Zi:]:o4eӬo>o-@S gX> i:_cOĶ^47aY:g[a &3jzT]յ+=KPrӧ<የ.^4#]6[|7kWwO^_^{1lfZ~?[$/(+HO}qCōcZ>wys5V=ԟf{ $mjs8 _kw>(ޏ>-gbMsLVmx+FeaxQSZ嵕pz=|+ K>agI{}THCޯ,ձfp@<;/ş~ӴO# umcѯ8~ ߊǪmf CTKK5 աӮc0ڷŸ>!V^g~Oˢ_VӢt:_x.kkk3dԴ="I-Οo6Ts@<52"|Vӎqs/[.5Grj~-bPt[ {+y@#OT~8#faF~ oJkshCUSt{ 2Ÿ<-7 jBao.uc/uNl<+mL=s>ZXI$ WF~xnZ] >=1\5w*dt]S/o|= +];a@}'gPlՕjM:ZsZߕ5ݟ7CMg>&[}~{|6TɨxWQ=%s:%f6Pq nyFp&fԣ^Z_W'}Zo[ '[)8wUiII-cJP1Cr!܄>98Qӄ[z%gdZZIU+ti_}4y'OռjxU%w5KxӦgF6Ϝrcl'gCU#dETʴo>߄8)EeCrvfx Ξ2SvUFIWRNIEQGeVqX,ǥkZevP5DdbfeQSć7_'ӕ״:)ZG~[o\yүx܎QcJ+9T¹ Z֝۵ ~?/^r fFZV@&Eم@ܶn(BGkƹqEЫ(a;^rFj/GS[/O_G8hWR_9MG[R2mr΢vIIA4)4}߆/=@9QB2@F$wxjUM,Z}tƏjvgi ,ïw'|KJ]g)=vo* r٦V_w_;#_ 0K#@ awH\u'p9-**q7䵊OK_E鯵^z]'9Wm.Ha%Kqk0[Kȃ9V%` 8ZTaiť{v]]ۺWq\(TrZɽ죢Hxgi5pҵmq3(i\ssn=UM]bx~)QyuxmP<ɯY gq 3WDvOE&뽏(])4IXj?'Cÿq@<-~e&'&K8>(|c)J ^Rkp&(}]1v /vUFmmL2<5E7"^Mlfp"I]#_D~>~Q?~&?7c¾7oڋ3G-|Ex(5|/_]l!O?MRK{PkOY8_ߌ4 %[/4kk!k"PR|7X} Z~_i Q9κgm_?nFEOV_/#?7٥h'o X|F t 5]3^}ƾ`C?ɾ!?¶^_%wVw|ds{_|I/h^!H_ ޣm/|i/$>!-B=I3x{xRὟ<M'⇊t'xxwVޏsךcþ]cL_JJZM<4!@>@|ZA|Aᯁ5ώt/ ZFXû{\E_G Z^3/jY:nmn>PӿkϏi躿u}ǟ_tĞ,/_[Nzr+O};O ݞ.wez.bPF7>4|Mud?3 Geׅ<%/~g»ĝ+OR4nITŦ @խ;w)-~^+-}izV⹼'|GzG]'M%%ܖOJa}qxJt` u<|Si~2 ҵ k~ZK?{ɭ9>.}#]^`A3]}~% ѼM_w> / K|?uWS{^%|!i[O$ݿB_h5?=c͗g]5_}W|MKKԼ!_ߏ?xcHw6["F>*׵]3W.4a.t>k&3}tP_?q??ex?>'/y/xTGBҩXh԰gC 2UyZ*uӷԹFeOPU# N~T)uZR|5`g+ 2l)+.1ϡTҳߩ{nXԄ+qzۙ|Qq٥ge^?׏|[W7'?Ԧ&ZkSNV%9-$d4in!~^ >>gDWH^Ek xկбK)]֏xT`Lʫdx1r; _(סeRFgg'C eeZ-ՊW[ߒkާ-v.J; W$ ypg=N;ᩅnZ=ZiQ۳KD2zۧI/VS@9<r3?z ӕY~'Bt)YƴIs;Ѥݴ{iвd>Dv"Hh9 #U x[+;&{K}bnmNѻzuFˑ:ʹC @?{< `WG#%kR.<޺ӮYuMv}nnVA~y`ÝĞ/q?vKK%}=>#;MrcUԒFyal "\2kĩ7v)}o]%%5)NvܛM47𭏊~4RpO2f0[wr 2  >bMzy|%-,m]ڴ9\"QW&bk[vMk[GJnY<-],2I;I#$?МKM#j?8Zwo+t'#S#7 &:lWm6J//kE;_MO:ǿoE6!xYe"ռ3}QdpċGi8Q~zvJ ]Տ7s'yOKY#xƝb# t6I _O=ƷKr\H<)|)/oS뺏4G65ACƪn`l)|/ t]rD;$: ^dl%&) 6%)c]l6-ZNoU+Qv9u~愭$}v uiIm'a+>h>Qz>eWWZBa  +\\z qK4w[FI/7N+[xIFRqnIk[}յ7 K|ZG @8@UAeIi]"sZmvoOg* r|=I(Ag5&쬝K]52i++{KUk-6p9\ A .3|̠tםZh$M9?W]ֹs:Jm5hߛ;!HX@#n<`V)7˦Ww׿{SPw;%V{K[v>T$| Rc';s^U!-ےVk{*NҲO{wH6d< yHcw*3wg=ܠDWzj_&ݬ,iAŷ7owm7׮? ZśctTwqe Z5Q!x`ѥfNF0vog^iY3[ u|+w3I+;s.S[e/iB]$呭a' a^FQ?gH>+U~̥GRxEB._K)r?cw=%{7xWwwdlL/O9YbRO*(JܔZMev:c,=ͳ9>o5ԪQW򤠾Glp|lxϏ]niwfq2 |+}rT]^M=+w~'|cIO|ף߁~&i_q׼ x;U>i~Ե{B[ 5Pxki|= ׁ߳ntm׍u6|+Z\KV{mm+—3Gq_7}wޕo/FմKX?oP7?߈Mw/''?g?x8|?uO~~)YghmM4V /|}msQ|/{5}n>xƶO ։v:m[C67ts}$ z`t ( k1@}'gPlՕj[>^Mh:M>1M?Ö [-ԯ#ky,إQ?8IXb1!&oi^PҌWQw?B|e9>XΎ [ܪ:ZS;6ݣg{%T:?u|4ϮXTSL.<-fPvy3Qorz\%MԥJ䥺J;_~O̷ V̱)Bpt)ZNr{eͭߝڗ剝g.ݬ8hۜ||Gd]ɫE;{w\u-ao%Yoi7P*3j_Duk?-N:}[;}T0~?<5|,UޅoM^MW75MKGMM CrJ#<2:UAJT:'%nzUciExVާnb0 N|`ҝ:}=MSRW|ů 啭qmG\F$I;?O,[%7%$nֻ]/ 5eN1U֍)J;??Ck "$*̻ALa=Zs6ޚKm7IǪ]suImò t̒mPXcr91K잉ӕ՗Kt*4WM[['uWm,ATݐp>lg?h>ߕzg(M8KTۧZ]7YF6@+s|7d՗[WzԠf[fֽMzXLjn[6bJ䁌xǹJVV^j_wڤi]vOS ት asC x#ܸ>xwmz-/}>cL)JWk_M5?,+i"I3*2]хn/YWqGm{;kgu}>I3j>m=տ5U)=ϨͤzM-vx:Jo 8}6ƚψՒ=<55*4 )J]($f}ET,.^gfYfJi'7Q8} >sdNx =9;`q@ 9~1mY<8 ( (O_CgVW(g?]5|Qo|3ӣb;_ hWtaK=>5XQҕx8"kV*ID ^#v #l@cVSZwowiwQ®zu, m+]5{/ŭ'I}!hlb9T`s1F3O0J*+䔢yBE}Gԡ^.mWI-uz:5]+0(T1-`;}Ty>5>ڽ.>轢7MssEIiwۭ_] i]0!K`V\ 02y<I{Kw]]qm﫶ݳuHbU0TuEH9iŽ4]o[+4K]ǛtZ]p1@d,Nݻ9=yx㞊M՗W~3Y%}~[ouxIJDDd}sڽs8^vRrﮍkbj?vndRccGkVfB&NR22#!xQ~5?iѵv6V讻#j^赺OWW/SFOCrGxrGW=$>M~%ѫ^tIEvjqgXnVIh }M/JI"'eu4Vm?|IOIGNm]qspWiaqN6W|w;6{l*?o1Ʃ+G4.Ⱈwm)ּ =zo @K: d灌:fij]_DmI&vZ~KϲoE۫2oh!~z݈{-\so)Ϸysÿ̉IN peYa/(p UCyn3 zu|-Jj3NissӒz;-\.:Vak*W)өߧ>^YXz m '88 _MώXA7v9{9/Dvqm"+]\ uiꮖ֢Wi5~ۿg?:Q[ p3Oh<]s^|Z'4mW\uK%=5pLǫh2Yb7')]ɹ4rI-[KQ&%mEF)NME%vފ)97W: ]Ccjf_V2ISGݔJ3G"pǗfnq;)0 B3.aYʔ:# RʕHu"&dV:v[1c2U5 O !S)PӥV1 J N J-sZSg<+?^,񿉼= h$lj|Ui4$;hԵZNK"Y'($D+7WmV_=M/Tӵ7O4}BV5k+MKJ4˨/KN.l/dH-n &6W"wocB5? ~65r_GoxIMO ShIxm4lh22?S[K.Uuk_sͮZNջwkgZ"{Yn.}F<47ά bE$1ݓQo;}=̪J]FM^n-w)?.^H;K[hAKy.!U#Ʌ+*C %UV,3ڿg}5v`9ӌ*uڧtYٮoHWLK浭XX&umcVBGpM8Ivt+Bc8]蛋IgЯؗxgx9-,%Uoj"¤q2yY<*HKRjO*WVI;OD!^tBrMQ9F)n%ǂ~+x'U:cB$lVa.Km!8[pM&J-IotsCߦӺWSVoӷV=VŸmn; T+$3IN-[Y4ڿI][IyHМW5Jey^m-Zi]]5׺)14|E*TFOw߽Dݺr6v}-^ rՑU7$Đ>#۽vﻵﶝ>5tT[+^j35{:;.T%  9Uh'qz?}.XB)FWoWʿe%DnH8RF=YJ: s_m Y[N޺xu|֓emo$];G싪|Y?g p_ $*CixYj6Ue2W&*:Xl,5Xkz߅s27 LWc-I12DmI$/&,^"P=*bJуO]ݾzXeᬂ 5 w_^ֱmoٹ'G{#f3 jKOi<-]bTͳL7Dێln? bbkNTbiNh)prRQRڔZia>+?g_ ^"c5 *F)8M8O#.YVM3/;>~%|qs㯅rvz5ۺDK sO|ChWAaL m4K?Ž{54 y~34gc^;SCT(ӄ)FRTZZsˏG/3CĵpU1\UE`0Rgz~ҬVzU8Oi҄`YO&g$RC˥ވU_~__nv_P/ ִO%j.:E宭kUďXjZnk%Ŗa{n]K5:I)+W_/rq-:iMjG؟ot_W/|sZҴmIӾzQԵ `+x[b%,̠R&m>?kN-%$.|L/MOcO[м]-w_[hW:nKXGpdMYѷ7WbUZrRjI+Yj}_c+m^u3yEoDD;0a2&e0Q?eR c/۲Zy=O xCDž9? _h:7=ƓxNմA!OX!hġ&$V:)NSej8M@Wecu&4B ӵohmwqne9g0iP`5gRiӌʅy{я4\\~W8"RͫcxdUN<U%卣[֖F4_2dTԤ[xekWqiUQ>*VqjVWn}{]]ףХ,EWJS&&JI;zږO-i~q#6dEyD< Yb+ymHU*7HOnKCgt^+hZp%٤MU(MCDd$ЅӴ7\YM,i03}u4}7m+H Wow}ROMM;iMS(MJI4U%8j$sk:~*($S(geGRw^s\hvj/cJ*rm}ҺZ߉W/>+ZֽD4V{ZM7q%3_X*Isi֜odGE:֨7Zur;noi6kчt7Ӭg}> ^5,vw6NX濞e)s^MvշN׽o2R樕W*wOI}4MV;;xHL+u Dd|^M[ߪ~ZiyrWO]׶wjJU]d%̡qqq[?cUz6R5vMuz.߇wѡ?(b19`iEN[;RumZ~iEo'{纕$Ri9g$]aGK/-:7kW$ܚMu}_u}w|Oּ?8C<U%iMO gaDl?Bs.[W8L2i9ՓOF4՟rE|=TJXSqKx(aWNj|![kgke6 ;V`?&>2yw6 2r`6JSrw|󂜮?x0i6 F\Ƽ(:EQyV.(&}y]a@:? #Tg~"{pƗa ([EijN|mvN+MtSNTxE*vo-#៍=Iq&M{:d lv˩Z1_Dp)w?U4Y]5n?qb߅ ?>3?/⮗ xgĶt߇ԟ VĖLZ%VIV8l.Vݛ}tVk4J2QWTWwיZ(~6,c7➻P{PӼeiֶ^(ΟhZR_ײO#"ҬZ$KD繖.yEJRm'iZVhW~Ϟ/oiGNg~Av|xOzr[Ztgm pq\.kҒzqJW= RQT7{htAQo5u>>EO|/wž!oW֩wW&φ罳H.D?ƿz]aX,`?,NvhV[X9YiK-O_NoدQ~<gڕg k>#5+'G4TXܖ-{OjMGOԠSkmEmem)JRwMMҊZkd߼K?%u6G^S?c ZvҼ-|nyXp;+_Qog8HuNjKWz9 k[&we58Jn|R`Qg, k7?k4m#O2&6xnt%c{U44Ji9*R{F-z$:JSV_K+FեNY#[OφeSQ?|`y|kcqc'Z bnNtV,ubRy/O(l:nm}4ӫ.tb)ڔT#Qn*i;>g??F3IlG^ 5|7pEo,ڄS5ݶG٥HeX&:{:I۴_;^ZMj[^F>&|,~ 7|5ѤЭ }!I'n.m-h4䚳Mo[pg 8-}'gPlՕj hR.o_7M URyd 툫NN8ХUrƒ8R|W?!.;;FRM2Om7>cF%,.8ל[ BUk)-d:jڦvJimw8<,Ës|~*1,ROR:u14R5&}Z )+5{j^1ۨXjhTy^Q p8` NOZMs?{noۭGˬu]|VߧiM=s- G<0O$ g!Tw#%is4^;rrQRmk^޻wGsBҬouko7-_ڞՑ' <)|k^rF󒃢%҄%?ݭ^}xji84{'=4jZ>+9E`й 8N@_Tqm[tIt}ݝqy=z-u[ԯ̻?y8<p3֔j̚vwf}7iIIqc՛{ۥ&mb>T>dA$=<޺hPI^Tծ}uzQmA'o5kmowj]J m~mv8Z6i%Ye},֝MRV+jZob-3Q NF@=9AՒ[?=G8tCs\ =# g$d)[58bHD(b#PF#DQªP TI+Y+$Il?$mɷ&ۓnmn욘(6ewdȗ62-@]AfEs?5-%_HqN:τc>-o5KS'gl2sC4l] PnaI4%ZE˚MW;g׿>|E_[꺏~_vi"Zj7𞓠^$Մ[ \@,jWWVS 1h#f B#E>k~*isc㶥χ:OxNo]75jWa=݋Yq._j,Skee/8 5XMmZ}j~h׆uq3|=Ot V}+%lMkL.4Vq 1QEe e-$ٯ^סM?e%? ?e߉+$|AZ/Ͷ^Foi>4Qml-K˒m44gΉRU)5iF+;7?l ~+W|YN~ɾ"mzz_YxzchGh:ߍqū>;+Y,aZ-VL'9.Y^2b޷kyw{*9)Nt[%٭W>?<iEoںSu YC}6{u:lg֯_h|BK5/FpMZ4NM|ߣZm8Ƅz]#R~ ^~"Ox~$Z.o6࿷kKt[An59,ek7vwPFS*RiiZ_6TF2z__?q??exᖻ>_K#ı4kum,HV0;Ze@@XYviѧ:KB^4iVmQO[n)̿}O$^TړV,&C?xJ-*7[Z EPI,;&} 4r>bR[Tn/Wc][JϥOJxfR:mT96'g:~%xX--oi *{Wy5Β",(7R2Vtb 0jiK}k+ZVܜRWEt{\!f˫?OޣH$du,F~OF8XыOk']w>,®X9i-lqVodJ|f(BlbQrri&,ӽzlE+V_6CŲ'Hؖ]ġRp2AnA!IW.qRZ+Y=5}tڶ5)ԍ:wq4nv]_] x% r9'ӥqOVӿYrE++oMKY7x]j+\2`0G}9 )+ԣJ6۷gn |JKrfjlNY˾>[*pA 9vQ`kwQEjsKI$NZnd֍uƀ\o *ldhgUXc w`rWZ-eڵ{UZ0]=uK[ﭶFzI.HLq,rq9$eL"WmmW_C(ڕkݫY]{?7Zw!8?|K-qRɾu[a(m'^<ˇ)SJ%ͪ95R U7Q'jYf i(yO-(ƚm9ץVg;ͥa_@gFc9y#q9#'^}}>p=34`nΤpOR2 $O ~èEZ GV; XZh]z3,QO*XiJ3:)%yFRT]>Ưp42NSW0cqx҄(Х'g$TeΚLX'?|Yj2jM{H3i@"#jc,2I5.<V7J,={}^+ fWOp gcXGF%lK^q\7&։F-$_څxk+^x_3`H6wۋgˊ>114;U[E'RZ*MڟSNn iap0XhqN݋S__MIU?VBe 5bFBV|KS_ .y)}Q_ўba5 N)ݶJk[ |+-|;iZZE- HnŁcEpHkv'URRm;-WK۶8:0qvԗ庾몿WOCpOـQsn!p7)V1tkkKz\JUn7Me=ml:{ [8u-$/8 Aen[u~oM Q+f|] bT dlG =b2Krݽo׺jcJSoMދZ6,Fk$O%9IMz蟟[߷gQPmNMZ ixedw0Δ>d  B@`͕n($) 0U:qV_K=^w[5^G6һiY͢KVCʉ b ɍ8R7Cdһb! v鷫Wݽ5h.T[Z]5jvN½GǾ:Oc%>-м>JCj4ʬVr\xEH;AEEjޕ*F-饔n{Yݣsdrܷ1apXOįzT(GTwij~~^]kWC=~&Z?{ڶ W/Գ|'X?8gύe?( Rqi֖?x5ZWQnO#A|ҝ< ;΄1c&䟽̗.P@bxz'=[%,O:}֫mciq47w39"4f=YMӧ::qs]M$?5r܏-g7eyf7TL.jI0oF۴bG殣,oc75%[7Ὲ.,nB1u4,.cp qphoN[W5u&Oӣ Qqxҩ(,F(^z2*U%NV愥Ni_|?iA?lu?OYOw_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_chcO |Ic?՜(Ow_ci-0OAH]~;XW6߰GKy%-lPį[ux$)P)^|%jVɟ_L(ڦ(D7HiZX>_ 'S{;PĈ`mCP1&i,?qTcƛI'<-9InfUoI_Kv/qCZ]sS7(ᰲxw*S)V+]Y{J%kɷ[9_\u>{c?4s#sԐx |xg+zZtTmV# T sU)Ҍ\Ich>82ԅZj}k(ԧ'%My~Wŏ |qž7;}:٣B{=G*LKID 3́E|7X6IaQ,=~jЧVRqrskn?<7, (4o[v.XӅhjk6^U- _Fo,UѶ1{t>WFN__EF)'$)_xt{69%i9e`,g !NTHb+&մۢӮ]\\8x;Mm[G#O|\ފV~#x7esiJUiA_О吡[U&2\n^'Jh,ܧ&g"2a'9q؈KVX\3q~>׼HW.Z[i_xHԴ-O֢tҴM;S-vٗYڈx[dJqͭ?g(IG)9Gi[Zn8S! /(aq'_j3^-N'y;φ#:ށ_lLtL 7D_ εo$@ ]AFU^|Br#4$uQ8e%W.dF#NX<>YUNXiwǍ?\ԤuZ/۟j]明 h-*TծZC*pNP*|ח"j2kE$㢕{qL<>0̿CЕ5L20u8CqX*0<='|1=Xt5wt]-,-Pmftb)cu)[e`sz26㲾l-:y盧RXX\O"P gp=zuPD7s1>lI>QH=i$u_Npذ:~@Ԍ tP_?q??ex?*L߇~f=[7S[,D%xNʨX]=%XF$qds_ōu.X<(nz<{i?9\0| paUtp~I]5ޔMvcKH"-ى:q1Nek̛iMtgٮՔ1ڎݥWzJ``!`6؂9A7>Mnmuiӱާ캻Y[U7nш4M|`0 Rwnas㈽%[ZYtHpNkܥhKLˈ+qw1fQ |2)δeZk}עk}SkvFj]W_=oPK:Wh !IF@\@y8u]&ծiuOU7\/{Uv#[ جa`6~bXק7ʷ_7{vKT(5\nZv3#XŸqrH'ZG螚mo3ÑJUxɽUwoDjR٫F̚W9`?/X@9@PN0IJ5}OºUVdԭe%uwr;^y#S摮n\G :0vcQ?w 3 6 NU*+SNsZ-ZqwQxa~+VPpzr7wE''{?/z.2;fm{ReM;&$ m& i%w[ ӖΫETTK[Vd}'uα^!x2XߎZ5<Ҵ miQR9$(_ךCh (?'9o[>4VU_&e+N-[+F#u<+#3:9N&< uNJHN?C.kO\q/˩Tq5g2<ӓU*F-OBO隯xx 6pg8".8M}YB2sjPD.P:57 :kř>Z*u_ӄZ~8'M}.|HxxOחb0_۲QRb1`U#LUj:v ς:]Ŀ>*%{|5B4|%cRI-m%!'xg^M5 BwWgJKwJmJ6ᬽX,MI+rѥ7'&TWP@!Pzt[HŞ]Vxf8fBO'(!ӧ'yS}b߱Zϵ/cK}S#A+OT}}?n4??!o!ڀ4??4uq_݌}9$T +S.:cϟ]t[߈iϪr[#H!F! }0x@:qwT٨E?"pt>z tP_?q??ex?/H Ĝ|= mA'hQ<+0QqAEҷVzjގ94k}ʼﮯ~>yoxU~q+Zsqf(J}ھ|Og ? Ҧ^ӵj7[٫qm o.YqFck)KYKoH֔$NVn_ [&nsh+(M-8x'Uϙߧ߅ڛmdZ[ĺXfO䑜GI4k$oKwi*Md^OeVNRWsZ2\0 gǴ⮥uOMe:G~fZ^tIݑo2 FݥQl;Knr`dgdңfK-׿wԺe&zogo[^5]JsZI"[\ 2C`r9C<յ_=;Kg?l*oI8mRڽբـv(p:T+#r +m]磶>#c{m]t}[鶬 e$`ޞWHx3\O"ISזҫRvU"&vL*c2̸o^*MF#W<% iܧCS NUP#s$hAnu/_3ծݡv$nb֑[N1+ᳺcV1(FxR^JNH ,7 `TTVr.$aN_y?^I!}Co__?@P}Co__?@P}Cosw̏z~Cr@ ??~Ԁ;z(޾ 7€ r(=8fj6]6W?Lp1 : qԓx>H~hz]4CmAo/G6io)Hc4DEUP jUjVekYnWr2ܾ|қ> +&|z6|e%I8YAzgz֋&VZ08_T\ş.7ſׇ8|jY|_fMm~ x˲')ud/򻳴0k8VQļ cu'Q"΢Is$JWĪpqΡ 8z5凎iF+JTV-VTJN^=3Ah{-3q|ziފ֗ikGui%ݣŮn fEb#b3FSWY.UIJ2JQnM%kT^Ky0N[B^ʬh0VӔT)ENPqim[~ӟ-e AD0 vqC~%T(HUU@ WYU)7):mmݶml8RaiR)ӧ tBiFRcbIY+?_4ՙ_4_֟t_WωP Z~_{>%M@5iGEE5_4_֟t_WωP Z~_{>%M@5iGEE5_4_?h=|K暀k/j?kO:/+gĿi?h=|K暀+^~?R~jW~6KfDx# $P_֙?_WS5_c' cu}_>1umW>&Ե=OR6}Z}u{{u{-̲]]\K$$;1PK!R8E8Eimages/ez-5.pngnu[PNG  IHDR2PLTE^E[B`HY@cK EEEV>a LJ(3~UݭpU ӄps:K`Qcf[d&~ ʂw4e¶1&TW C3 TAn|՚_{3r$VBf qjSM!2m@iʁ1tQGީ I/@<zh{|k% ŘNank&{}ߚ3B_wfn'F~]aoΤv 9 g M5㾠=.apz11B1t%~`k7HKa@)k~CVsg2>a,yrx蓖?t OЩn'~7K]xFC;2ЩzS߿U)lz P{ rI9םŚ%ܯހهVZEdS&vP*ٺ*-t@@ۗr51`{{frxHLG[_V"W; -סjOڊ^/ҮE30.mL&TRZ;q8?N`"Lzg83RS9Tث-+{mty\1wG4(|),b<XhQ&՞/K)xA73 t.7fn K1YM`yħp ii~NOj/2aεԍi4FZ.P"j^X' w#8bt,YhsZF]lYK<f" >zcǭ߱ &NvᵙuBL}S7Gg-t$Z]ZkԵ;KrސbfKgcL~s›~e0塡rfs6B3k> ['fї4WGùU뚪 t̢5 .6&%39i-0B1}ݣB\*ėP39r.6a#Sz ݕv B3ѷ 6Vu+~i!ޠFjF }VΑo7ݹPε͈do.t We:Bؕv@k؅?b4DHF'[8a,\]wןgEMdj#DL`im7DupG]]c2@5~hK:}wTX@jVlu +s 1}Kt.ˎ?XSy_V|ֈ//.:Xu\y%V_1ϙiGHMa 1+XPUO7/\Yu[ ֬Mkp,xNgtVg]'Id*&@zm t|f7ӊЇ7Ӵ50|鵎r1Ytݾm_@ڇF7HoBE7Κx|L:0@* {FbjZѸ5EFDD>̭1?5IYAЀ;cל_I6ے޵o{c= =hԙiК]`ήc"q :/\PZq9d]jyMݠs+ڨs3=gioN役Xt,Ӊc wk}?{*h :e[E!#6uCACVFuC/tsnn}A747V_yDۋ. mAxrg?ɜՑvk)9 b_ֺYVŅkݡtMIu<]'bK۽AggQsw?~x<ʟMrwWZv>fFd7^?8v -iXnۼD o?심E ݦttۓx_*HnG2@*.K"sy+e_RnuVrÈEc|},]~e9%sMBgsn1и*h/H}ɓ`_ȰpkaHf2c[ {^N{uO\w ~=F{ݓRKz}\ŌҺ4<&Nf' 6-_{Lk[$%8Ect}d1[o\q$]܉'IF՟B yYk˲u{/R7a"u$(.=KKcSM|p}]qމ$b_#Ydcs۱L=e"=E,rPV % 7)SaY%gQpλ%' r Ai㢭`ivrkBfp)ވ'#?\E δჲme~o0.BBLt 8;Q)]{M:Qy)"8bYt*KZT Bas/4lYFLrY.l5Ӻ1c#6pKg_S)vښKq[ Y1 ǩqfXrCcҭNfw?o:" <QYBXՁصƒ3}{x1 Da hp w* JEC:hv3-ŭ(ԋd6 5;f4,M8ഄ&RBl޹L 6{';]i$Cj$@i`b-F:#u_Ҫ e!ɬ.+ܙ{k  -][{Gy.^n2vIsc4mrBl I"rUFz+l01;j';6Ö́716Ly_&ھFZC[bs}ֆ5!I) G˕)àd6lI$ 8ATHYL:G6Em6m?^E9a DZ-}Y*X[JNqܻu"bly=9H6%rCgegL[ڊHC*vjw-uJ`.qcazA*QJ/o1Jȹvs&`#sYB؅@ jЄ\gB@o \64XvANwny'>SC'3ՇȊs˺|\w"`Wٸ>>]9T{˞X hƯ][a|P7 s_} }?1ͭ 񴴹O sq^Z`#;>|K/'ΝMڨ}C߾͎ MI,2LOMRk rg$?T 'Ó4ݰ6t9_zvhH-ɭb,rt[8v]Sphdb%'N_X_/rE7{{|?7#uvvnla6i霹IC.Mڞ={ 4WۈVyVLI#~ 0d%VWOvs+8?1>FQ 5ۧi˝;s%>hf[V/XvB +h*iox}0"̰n=d6gf$bB H'it~ŗ J 5zA7ӂLC͝J{~K}*}bb]dU\U >RPi1;sşE{m.#C)?mg:m6fS,rkg>K-Dsgc%^0:!kdr8^mՙW@S!xbaU %Q z*niw:F#wq(_bOԆZn;mQjK-bj+o0Sxnkqmv @IIaIF:5 fǒ\]¹dހ7_֣GrѾW6. r7{ woN5t|e>__v;:s vϵَ!.M}Q۞g3B8u`Pe\ˣ(DzrA x9ZpDHyϐd F&7;mci|m A({SN)XR0-9NQ]~xcX\.IrcǪw͇Ep322ۯ=3o32}ţq̼v1R; gnc@9*d /f79q8/\HLMVf&Gu5DkɸʲtޒNp961 ϵ!9o eR⢹wsBl y9QlF3~ QRN"hy$y>~tnHN_s@^?æq Zޅ<-ό.U1AUؽ_ !D&:HIz/ P<kh]QYYYW-r-Fr'T{W-j~:)۩rw /̶ϗ.g!ՠ{Y]SCU<&x52 OtWݫދvE==;ʂcf}*y[ эn;{6FM*bwzZ4T:Fq ߕ/|&VЈ⍀rea=:>hf4y|yqA\@ꄾԢwY/W O=,;]u~Q߃gvws .9'N3҉p,xn/6r9AWJtŮ s358u%!J]YjZ2&!sѽ0ovOc9kW+݀+{]OvkQWO!76yA,:^|{Qt"b,fw"^>O (nvJ:m"xa\!jgRC:ШެՕֈ͉nu ѮZD/ r׾SB_@i M翈-Ê\<<:HrM%͡++c0GN^:#O-Y7'A]TjM:ڠ\P\i,|"Op:;tXZ'FNvL߲WTR_> ĺRk_\.I+WB:kl\>G 9#J;G<|u*=Zw^[mʭ싃$(,iC*Aݨij0Kx".W_Zn qSց}RB!Eiћq%' Vi\Z:R儜XͪTzGiq?۬A7c gh${zG؝&}hSIv)yՈ> *sY?%*`xweaW22Gcmgn])]/Jr9mM_U5a"B7r8nׁ{)s}}3Z rRgۣC x"YbSj37#͑p~VGڏ{d\A/9~ANGVi4ީuk?!\2%;; 8J奮9 :;YO}8CsX1Ne ƙXؗ՗e>G8vs6vM2o~Iy9[|vU5p@_9kbq '`rOem'aO1Y@v$^B3wz虮w̸W_lZ*)sO@ι- ;JUN8-ַd +klHmvO:{ G绑(~kӧΟPc}G'6[g/V= <^y)) ;^_Sߋ+1fuu~Z9ټ ~?QCN S]N=&69(7)gM}rY ^hwAVn YfiF,x?(ۅ Yw O [vZ``%DeAUfҾ/t:Zo%:XꀾO؞mb9>Ϻf.6^OQ8k9wY}I*<ۻc˘.=hܷϪl gVSWt ~3ۉǐvb9 / ydD,bK_DZ@gj#Fv2[I(a!e]6ĖP3,@ͬnsgXM =|=7fd00oxrY։3XmǤ^s+~8/Eٽv~;W!s۷N_M:Xy9?/LB8qXo۰3Fby:rn4[7⮧jzܷ3^!y0@z KX(wGulU:Y{ǰoT㡟` r93vI*a&x/H4, &8JݖC9a~zBG!+..V1>Cl#85lGcKqkbxŹ+e;KK#MgVh?"'~Mjorizss$+rՒq=*Nn^Џ.樚2Օ{BL \b6']V@Fh.gss_9LWQԺV6$}nvʇx[s^uW9N,;Tz>]crY;4W4@, +n6=Maͧ|*ԿuMOB7Ix(sV]yTGrKҦCҺ㋕(ԃ^o8ΡƵ-ázI6Sh{ܺp*(& ]30޽q7n.{{mS29[\¥NEEI9은cŦ)oE"A/7I>x_܋IL^mrS{E[w܏ZyYcrRk;^mX>&gDXA ACZ#eFxW; S}> '@>s*ZW* F}^cqrl =]e|n͓^Lvμ6`FdEbzqS!@S9?oh8K_AB]Z@or 7~R{~Ai4)֯C<^eqr;˾C8 /:M4JV,}M^,6Z,bL2&h>oIy%]W@WZqfq]7Ca JUU^F#|t~av 9p&8pN]T7(E8ihY9nxxdH}}׼\nSoSxfyÜYhsݚJtmI|뗽ޓ&(Z4%IX4-:J] 1NZd,pGADZCدxX`Y *dbsO8NA2CLérQW=xKjk5[&BQr)UvJmxUo" 桿'ḛdx.ƽI:܉]ݵ`=7\^r- ݻT i9SBwyʕK'hkj̙=F9Ryah桔ר@JaMQ.GmQi0j &Ec@qpkaww=F(~ *;q eNGː8~{o8|3"ёIYM, jE HAd >.vYF6~Gsmֵ]lox#97Dr?nd6w"g/ =YxC5#J( HWMGBnQW(A*7QpJᡏu&M_߲3Y+p(TFe•(vvna._NnLL@>y\ЕA^ $P3怙YY$ya&o@4{ulB?MxA*?"Mr:8MxݵUzJ^PCM.ޠ<\j՗ *FwWx4"(Fi4o1l,j=CdGY_exۺkɔE΍X/ ‡2W&oFEdL?ְ)]8}MT|nh׻Wf5T\FW hqzp>[CsĶE$&te3YVg\,yT.{i# jcp X'}E&&[Co6-w h ֝z=62Xز`I߫_ok*22#54 esTVTg ha70?Zb^…yesAWc ZNVTݹP|tv< "id%;t{)n݆%Moz5AwU{v^`}eC ͐&rιx:I9-oҀ+װok$tZnI?e֝ε".'"^x2z5;[l8H}DTe쪑57뱎noVVZqhmT6`1M$7J.hFx2%mY Ә=76ݔ&C`?a{Xo9”zsG.c")JޅgD}[kG"RK:M *}u{pR.lCm`yhs^ՎƢT9eFe{FhYMV/D)Mlv'58d K$+Gi 7$gf~jK_@ۑcڸV6 .%h87͖Z֘._@x: r, ^^Ӈ護|]xSKؚ}1"WWPht)m 5i6&$H _NNbO;uŬҏ)h_8[{=Vj U3xk<@7W5LDeHizwQ5lO3NVFF)ՄѺ-<7A$n֣ LY- vldJ⽬Ir}J~{=[p Ff֔aMד m7|#1&r [>~=ٝU-Ƭ*8d" >:i4E 3[sN>-\L4~->u>@r G]&\ֶ&!zE3by <{AY"XcBd"Uu"R!럿뿤,nKh6!sWUm_S(M_$nh+ t$Ʉ^U3J#N'VuJ֝nBm&%7m`_!;6zx-.2qI@E=C`:?:vz4fB= (9[61QښlҔA~ ՗:.34o%4~:Ot?9Ek}q\~tG'S3&/ Fixduu봐_'%=: =6 * "腞5MˆIИu7*([ٯq"wPBQSXZȅB.!r sqv+(fN2rIcNE[|%+5k73L)9 _?M($"R. n2j7rźZ}8>VR/۬T\%E']>j /AړZ-P"A^ {@g+nS9 U#L^)&c.1[yTB;M?O+O-M݂ q=o pwl9uxϝ+ 8΢ msIENDB`PK!#HHimages/ez-6.pngnu[PNG  IHDRZPLTE^E[BaIEEEY@c^ݱ&W?p,l(eL @f =cHe5ckkk9__h8b3٬# [!$u TC{4I#,Nylذ֌ը7ݺ=jY"<0wuF-a^,[WY!D-LeƊ\y|~W|QS)arϗ@CQ u ҖUvC$DxoТpq_=hK; Ib\k*FyadB12വ.d(yIfN7(DGXQGlC\7o8\ܹFGdS*lVLEIDATxOhP[C5b+MC8DtRsBECT3у /xEa6d~tnm'5Ѭ|}4P9YUJvy#bc`.<9(rF ,"[DX#qU&}t*,Uə)RWC=]6 -ꜟ:U[z82V͎5ju_/\iIm\r&LDcc`$0t(1!:n1 ] 2pO$){U}!02F VE# ɱ٣TWnCCxUŔg !a_GUk%f~[e LOe =@;bƚ_u*/4zhMɤvvW+UE?L6o h777/o(\Id&`OO*%*Ϙ5GBM)h Sߗ21~ [7! "y=y%GΙ{5._C5󈰒j!-haOv*%NHukU"[w6kMt7@{<_ټ hg𑍕#ma@iWۢϜq;f箫`sFD'Nanon_߷2 [і~X(;̱'8g-p|a0 )~ $؇ ^e8Y]F%Ğz=L۠#y v.͏ڵ,3Q^%>` 8 ~N&m4׵+'-|n X1m &eթoScWbwPaM7`ܨ- 3~gP6t̔M7u3#L;\>{n5^%> o$U+58~Ry446dd@ȅ~ `ӱ V`v6{ā;1t?dD5Dh%ӁԣvE(ۏ^\z! w"s$?jװ‚G q !h oR[p(rKS5ᘢ ^#FƟ `M%k*,|)|, ²Љjp >MkG/vgkbSU$]GAȚ!C-$OI`klH @0`{ۂ-3d: Q{$v`n~Yܥݍ"c7ixthHԘm;3vڑh']3޹4uq %tt0)%xLt LؖPca3C3EL0s`Ll̹@!AD7|Fo,ٲ_~i{[lydK%z{{no{{~,SnL.>V{ZEtIPW NaTϙ}hGluB?(5[ ώm' g=11'ŠPI5fnt֓l }Fw|[Nwz6n[?\?~QJ$"yhq?8&ZZ-/=Lnb-Ge/:]"c$dgLچw43x h?ik'n>s6їMd?)n0mj,4{){:tDX'*fes p&ScI*ZfG}?ӂ^tɖ3uFK.uyk`go\]>5&X4$ ol$-gY1ҏ4HYlH6p6+>#]>9*""@~[Y:^i,~^ReG$?QG]{R X%~(Be';(4&9e|xȈvv"5gdd,u"#`ȹqH@w&^. Z_ٯ ☥)XM 5}D[զdÅjbcIߠy\k:tБkG2&uGz^ۭ,o`CYwvr ǀ5aFb/I5A>%8xg;%]Αy~DݭgiG^yK]waat-l6&t3O xrZ_0 (TOon}HH֟|bCY_JSVh>QddP{IiqVؐZЭqE o~cWF`TWT(4#4](#]oDs-+htDQvfe}C7-O\8lvLjN.ȋt{Aݍl*I'5"Y!o8ޖ*B>#RoLg&qB1O$;{v_tIf"}GS7FbG#"D0|,(vPXVVÑEjkȲHh'n]a-ni; my a 83zՉlܘßׂk-q1Q@ Tc铂}\?*gb)X!ݣbepnT]M! CZ |}#~"nH/XgE)U={W9MM-!_+uxTDȏ}٪X')t?359)+rsH5*́mUs;T}sW{20Jyؑ{S2r$SD>r^_r幗`A6|H""",a豳w PFȷL/%0҉eb\gz(]Xx7D˨JM)z9?W7VWF1%&cyMp ;"Jn5)+6x;DVsX| Z5RGF+렋suxD?H6=+CtOڵ]%"h8d=g ZC.fU [<_,|T-z'Zy"'V sV%WD&y"GD/dGW‚‚N 5nk1ވ5q!Kss]`QQwj;>$WD{9>ۅgl6SSScbbrDWY1LFsaS0,Ckþ・wQF"_ĐE7>ŊDZUHDQ>f~{ pm{6"9&d.pm7OrBVd5nhrb^c/~7Glll(VƏwwޤpl 6l@]oMը6*[ieg^'u.mx=aד֨mUj)况 C|\ 8GI%-!jm@K`wS>؇)؍ W+`6q(.]c ~5t>`oGs.12 O(CNP-v'OV:f_S3s|"y ĺye1HcGҢa)+];,+8, A|1$2#tz2lm?+Q%捚l_UǸcgUdXXv͉Ft!fh3DV3`sQ6=":}Ŋs E%M vkd-4v/1 uZ}d̴}=l'DwN}96Z#{LRK^floeZ sZv29Bdv$!,NŖ5 ] xƍȱcrH/`l׋g`.K3_s=U!B Dݽ0 D(6UTT@cRļVl"Fp#&'osB_6"&JWܓO WlxwZF=u-o`i`o#¦(-I_`|zvڨxIv>X{ae:r|$?B !샬a@ԟ3ޫTL훝wEx8On5=6՛U@Mɦf;Ұ@FVB<  PmGFH5SEX ][\fL(mvҫ6:Τp݁6{\o벊me:5[.gD6h6x ")p!=k6mߔB-zsԪe mU^&5 .[ <=vl``U L#[ñ O-a/=<Σٺq*{"1':.q;Mugzy{s!b*)҅+l($PKIL9zLNi iTh)n`bn)H1~e #ˀ΃ٸeZter<(l fB? @!qu&;4WD:W/f0JNZw[t)cs$n$LNaߙ{.h} 6]VLVn=G을0P%;/^o&M^Kw_\˸5W9@CܠcX?rS Bm}vm&HDbqR#pv"Fq>;gӦMk`E635{XnA/; }]*-[n#@Ҳ}Pt ܩ+!^R_[e"sl5"oxeA~MlVis W-,xE9G:QG'cLYq#PkTH4-vZ4]G7ņZ3Hl?0~u`}qx- rW\ &0#ŠĊg̴O* Wa XwkZd"TjLaƒQ&ك҅T+F f _~gNȖX2-9Ԅߎssij`qYl<4mVI7W xle3 t}{RY:o''XB/0+C@' r`^g9RU|9+)喎C~2.N.4fҰeJ?299u襢 E lJWf'5nhOŋ yp!#k5n!5$7x۵l#U,>JvvSl8jf7uX_g5coUf"5c.k*/F: E Cu~6RY>K$VWl/sEf5fEwKlxu۝A( ]X7!jW$U!memVVʦ>lc%h"DDB|HHAo~yZE̝3oYoJ?|ntOIj `߰,lYV؊G6g6ē=n,A.zEMQQgRp`ue E5h@%ըبkIkx;k} `I7(l4Jdr礘FX#aO^T!$ "()}5"K]i`I|l$2" < 3D#my$ؾ'Iu璯90E4(Bֶ B@mmd%E,QDry%Su9c#'ond[jxd  '֔J-b G"$l[UGGJ ;-2a_ýi@-h&Ll[71;T ޮ.?\G}]\ һ)~b[`)%}j'1Pd`K@HpՇ̦7B&פ>d'##C)h/ `uӷXvEġ~kg 3N$KEd^]NV:lIh_\ M()vӲl6PM(om2yRhl,4>SZL(!\v>XGL<?6]_&aOIa_j0}}ጭn,^qZRs~X#%fIP gRH>q,f-h+42~P̤ۤm1(ǚ ~ &EuMkTr6\oI4&WPxhVn 60ؖzTX,~_Vބ7i}G)B&cM?ƌSyO#`/ul,=Y[^Um+;OX成U7eAf/M Q]g+.mNVH,Q P@$6׭T[>F&c$oJLlul-!lbҚwU6Jmd#DsRЕu+@bdDmZ)xD7]iE%kםw\lao$k{)d4q~萓 H4C6>v4cñ b\vDb;Crnn.تգrH\LJl)l”o%Y u&h O8" <|> Il^,9ۨ>HX,nԷXĭlIl@2s#Ԁel<Qldö:m&EkBLlrv!K \5"<(6Jq`kwIEHB'n8$'7qd@?t, qjl;VQ%k^&9ݗ54t>`bsLE\.NP4+$>W&`S26`4#Uk3RJtYzgyz3DZ8.k FZNyom%\lt kՎ$lE3ٺWLW!c"-lbUV`[^xLU0Z=A5DZ|>y}俒ڐ;*@X]Ƕ NPMz9 8׉ݔ%D;KV-m EIo9l1 [Wl45RaAp-4~>sؼX(IS͒^TúS"=E69-<;RFy%L/X"ذ]"[`7=w<؆G3^ r o1a^ښT 1tP(+-I'DƆhmLT}#ל nrxVas}-4[h ~-CIZ umՏ3%JRԎlGH\gk gL0&2NwkX #;'HlnPwT!8n{$]ْ-\{ 6CtNH(VCr_.tRh<1vK܈C+$DO#@t'.ZK9|hTUc>Y[t-wH_CV2)ܪ Rh3u )K9WjdNtHT;Bׇ9գlPCs}[S"r2vlO8\Goվ(Y0`r~\PJXW7p##j>׷Vu-bUzQfKvFe얛mL/Vh%RY[F̪ ks6ha3tgc= Q4tJGc`]5{u7tWĶp_2GL`W*ЦA8ݽ@Rd5XQqΩ#f^lJ壸,>mMG5Vz#)"Gdl$ rHHLo?5S<[NM_٬uDMxnv6[h6MәXA^k#RD&xOƖU_\3[\ֽKK=#؞ p>n` <*"s7P! S++g݅,΢kxWs[ɚC 'D;8e˛..C`+aELz+Jѭ& &F%!a7}7It3ܚ0 SIxeѬv:D4`J4h`ٚ~N،@-}x{]nw!soR^eDDl cFv~29Xذ`g8fv4ڳ*8fɽ3t̎٠axfgt83c&f쾶X"V h*$sgewuDNt}8":9{E1cXG33OΙB!DZŶ^zs+9H4Pi^8lz``wy;cK 0EVz:Y;]il61=VT(am}-3-ac۔/Wxt6Gg= j´iT ӛ7}[:(6/Ԏwvy8 ^66]b12vײQ٦D\5UO({x87nQl#$,yQb%LCpGÙ=12<пwtԃ##-{ƆnKZ, *+gotիA[<>ǫ77U3J\5?>O$me]nO"֜}lY66*rן_7bꚚ#G0֐)5'rED80Doy̿PĚ.N5j{}M~ +-udZʚy\vK=U(amm$6";1n$ \_yAĸ6q|ΩNr !ÂDH,$JH $j A Zh%ƐatB2[+V,l+6~92vn۞9ۥGsU__ `‰OupxݳQ)*.uucЇ`ںؙzꢚxB־fK/(oz$I8+nž6S(r1)[XV47BGeNz Y"%apy3Z3]Rnl6w[&vU}1E}~m`{֡᮲K[*xxkW϶ilӮCG֘{v/ey vu8F2tx1yhiAo4 ͹/.X+!!ek1>B{ K)f'{5N1uU]"bZ)z3ܤ[R]c|%/3a"Dt-i}rlZYλ t @I9V~M!g)dr"iMȇA^WR+ľmDLc\Zx>{~k2L|݉C? 쁚;υA4wfz ~qsAo`BRX[tj]kI imФ1t7V;^MY%N"c߈۶#r8EvڄB$L9%VXm^5'}V:Zy)7]2zJ,MդlՒtI=+[)%K\=A9 AxsQoZUU~nEt/]kp z8c&21""ER ؚ=[-Zxv 4 n  r0A"&AشZapok~%}ύ{OKxOR )BH6mȇ5;'BklpF`4v`&CrӍ i1d#txI?r4}6HQ;ac*` 2컕x}1tC|St`r>*--Bô=QF<lYJ5Τw^hɹqhӡ`(RAsף~0"KEYVj_kt$x!i[KvkyfXB|ujxS/LS$FN-X"ضQSsM. |ȁ<DbB@d~РQHΖ٨?d>5 c~uM%f`vq{u{A ];iZzTB dH|AV۱"2ET+]!R^AY3K aT"klH:0mu2"ZF,wK3eOxnڸ}š`OrLݴ6q?T)k懯ƛo{+9zD{y4 : ?x/T{Ľ`2OR26*;MX^b5g!۶G|X o>3o}OLrS}}^Bj黎^cc29|d8A:t#DlvY; Kc4[*u ~uX[\Qf;@78S>M'~ nBЂbC6`cdR^E3DP1(n8 7 )o. w*8ϏCejQ U.=X9vM`K`_ Q9d#$Q4qp:v 9(%ƓP ٶKP"& <7"f\W~,7$%jr!MjKt6ZD [X9(R+Q4`: Uƍ܅m`#ľB8!Xd{mQmq>Ѵcu<ᶶfg x^^HwFW8FI/FV2ɸDAܛD6"[*dᯉoDa4AƧL)ryVUp&(y}JٰM]ޅ~rLl!h}Q7>i7š\T!(Ceee`Eаݖ%aln0CΫX|X'Sӣ{q?#ep[4 9@P$liW!墥(͖bt?ԌBky[2rű_-"{֐|=\&S*gkrTsHbBEBBtR(y;];l}*+]`$ +#M^Ff4 rFZk2yU<@ȫrt` i&};elgX:5i7~zc68i:0D[4U9@{`AeOz+~2d糷 UOeD@dE+X59"[:Qk~q2i2y|?V>\0V$kŇa%#w%cF|a2 tGZvoL>ze8/##'_k <,Zdme(T4Ҹ;~X_-_K*U4LgH*[J3:!WY|a1!$>ӈ%{\꓄Qv'# ٮk^6n-{9û;ܔjb(hfaĤ+ [);ȶD뭻PwH۝kOVp}) n*cDE\"Q1OV! ӚJ]5"SC. ?MCMG)8ࢬF>Tlz]B_ow:oJπQ. heu'%dZ$#Jxmb7so5t6" ܨ5-jںVMe9If K= ^5J%qU'ɔw%!_P|2sߞa|"ubZo_'t,G5Ć͐&R"iOՀ!KVדJy:Sm.v{]n/@)PaЏ͝@EY!Bb,tLI@A )"@A~{$1l@+eV7ysߛp.jTyPgZRͅ*8Ye(V9ƴن3%WU+ ҂4L3>:snA$d7`yt㴓&s}|C.P-#!Z g}d22Upj j R7Ȝ7ݻ;or!LmQ[.V\E>,&"*tet?uμDH gH^ɇoF 1 >[wz(B!KMi~uoql= #fm]Tz71괵kev_,usE~Gqs&`onW]M BQKՍ(9{ sLm]zUxvIBݡ_0"G>#Z|*N;d9'+9z4*J·4dmTZ0:Y}C,r;l c&ƪ4pq`½7_ԭ^eT'!1Q"a02b?`*#.T- o(q@Cd-WCG"eˡ*W1FX89׾wM$!'@?TyW:/hi;>6 !"134Qaq2ABs#Cb?qe쮔u[δ)|Qe5Rum+o -kw6n&w{L?/&W?~R,1>WDh™vQ_뛏zQ#^oҧ]y+FuF PGUMDif? wvVAR5︧B--#J# /k)T3v[|Qk$N2_#NC,/\C㯪in=X+".k5&-s5(r ^p9Qg6bR<_@T%!1QAaq?!tA? J-3ҽ{; e |^s ?Ɛ 9>1,h(Db,a-顿[]#ڦHGcKg$^i&q +OvuDR]vR;yq Z=G&?y[MEe Muü_UL2AGn< Qq^w>gl#G#*S~;@K,q!@V ld&E9Y) #!1QAaq0?( Øi+Qp# 0.&4*V}|؂Q +G,~Fj2a62M41Ea 4%;UU `"!ASTPa7rziA@-$!1AQaq0?4{Jp 2>'+ )9N)8wH &STp7=12s.7*ks|Oi@y}!xdy"E*}MY$D؎Rʿ *s%!1AQaq?rգ:)WuuIXW4}HpvhADZ@}Oiܚ-^\ϦZŪS׸TQE"F" qUYtr9DqT t7STSB(а 6)R+b{doلFg#-DcBDe$ &6w%Զ^j [f"sVxwuf\k<̩btAn Ďd`%/n3tԋ >#22S+6U[|_H T=)m.>!,cV-G- WA! TPK!}](](images/info-1.jpgnu[JFIF$" + &%)((-1-&0"'(& &"&&*('---'&')--(0'---0--&&&''-'&-/0-'(&'''''-&-/-2&Z"K!1R"AQ2aq#Br3S$45bstD6CT- !1AQRSq"2a ?@¾UxORasKQ^}/J^%zWM\<(Kϔ\"[mIdDr e) 먹> ^&4s9k3;f Ab/#:xLG|;f .<~R Xh,z|V6VidF;Ƕ@BFPT'ؽQ/[}M+,sE*"zs|ƕzy-M{["bĜٔ4dkq@QL/stS6n/\gI .[`\tZ౩q(H)}ݔ@G<ą6mDB!S*#OEj6&Ռ꠮RC[(l[o/g^\ޢ/KSR܈ӥ^ ҿŻ5YҺVvƘ^^H֧QV7+ҽERe^cjw!vl#Y2t/h#?YUa )'Bpн2t/hj,F!cFTEgf6Nᓡ{EkO0&2G89NHQ.w"נNᓡ{Ea}-HKY$RW٥ K6P|ᓡ{E8d^X8- 7hc 7gP@[:d^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJd^N:TNᓡ{EKJ L^7o_q4qߔ҂}ORnUD-XٙR=}K< m Y(2œ8-[F75%w]TPYܴ*}*ϓI1 8$݀B+5NckԮqXmD׷!TGoAWoѼ'IY$bnNVю}1PjPy֛ y $ix]XHyVLK^k{s[vc_eG3i/«qOޗPD$rnW(`w7ZmȧI1,K R[(:|i]ql6(ärG++2]Ą0 =*UUH(YtRs %:~AvܘLZɒt q.\\zj( ! *3+ un˿Gݒ:hp1B|[%iٚO:QcQ]-R4o~&^*Xƀz2|?M_`)@_/SVҔ[)ݧن9.HFc0KZ(>Ԟ$Ϋ. )1qDRdaeT+Za;f3qdy*fekg6"D)flb1 xgi`_::eg`5KPqXRd,,ib289ȁ?ʅ#k6 e݄+ba\MZXI $Wp٨a 2MX,r;K*Scǘ'bKrI|Wuy/mʺ Cu'd,aI|QV"11IDw,|-AņfŃPd@إwbВ~5cOy[ G,$bOЇErsֺi,H^\B )1Y$Y{+zmjs V՛vyk^-_mAvnΒp,Ҫ5ޤ(6/%UejiN{Em ͠:μ1UiLVɠ0N`-aF-shH'rn@/*ffLդS~V?ipb0a6 cWU$Sk7}̼1G#$| @#sɨ67WE#E7SuCE#XooZ [ ԉ C էi;Y V9|E Cb"l\ WUHѹ՗.+F ϛ+%yV?dhg}2ݣ'cV~ ~¶ԍ)Jw BbOȭ.R$db,Dwqo* ʰ :9𨰸fZ-W|rsEa~0{y徕XYa̸`Ew5-UM:wB㍈y '}+4mxܙœP[)T:DaF,J{'{e} {q+pZQi\*@MLsf U Iؘd¸̸2ɼ}EX2wd<_}Sr.V6IF$oaȆɉEdF`BRKG#b ęR|a8pQ,0rX[S'Wv.Y!xZLG\G* AĠqa/U ԵNv731FAq-8*HID4$G$Hxpv%Ҷ, ayU ?7Z4M6y$\.Ee Uk+31k^f"'æ+.#k\kGh0cL6 #-`, ܟA|&;W IF͕{>b<6QqG+j!VQ003ƫق^2JAivqc K$X80+5\ zOj=eAe9`t$3Y)R>A" ˣ|͇!![}w1K[<̨m}C*ώV]E@ \fl'V$1FcD4k> 4ÇTof VWl^%fۈfv,lX\Uzqqdl> pXTώ =(:/ingM 3OW$ޚP۠!eА {W\GW!؞lI634"*" EƵ͇  1" l%ϙҔJR; b$4 @Vw>_kVR Mqn-*O&:ry 9)n"]tUkݯƘl*!h$O ቸ[ EFykMJ݌49v .Y\_!VD"Vu"\eykSg n?:V߄B$®"xPl各 HÅe{6ȧңi{xi[lv 2"gS?aCX(D_:l60~.Rxɺ/Ϋ~_?r~DLO.JR>3oS M(4q>QXH}|da EE RE :,jK [kA I$cPAy<ϝm1 &\.V;uW4a]T%a 9 &ަdNkLʨn_\DFlT$5"TͱgJI6ܞ?!\^Y^g>'a{_EV_mDɼ*%a[UChX8kã9<,l9c)oo[ kVc-2>m\u ,u֫`lYSx ZIvyk^ b2h0W@FS W+Gu{-~#i -@lMy]䢛#>rf{^G-oP*"YI:yx/W:$ t*Bߏe Jx3eHry.PY((Xp>JɋtF3![bC`FX|`V6:f&ڽfYĜCbpeVT{l}A\"]ʀ6sG̒{VR4PlG Spbt^"O8V30)(ء&R{*X%0TY#Bn#7lJ&@wA!G J 8|$4DrGy>zUe$qiy odoeA.[dXDBS$#$v73 z XXYehT /y;ˡ-ea `5Q/0v> @ldQeVeKX3[@2U DpEPsb%hon2"_sֲXBqY;7v oOt>^ xUk`IV9#Ҫ#[wA@ψɈ"C""#GI>`8bNI4 R]lBF&:5"-@br66F|J&\;[g 㡪*q @o Xb"e܋v5BPb )&gF)Ohm-AoEMPllx4]U1GP?cś02eiPJ!K5xM#YѦ%qs1Y2Adu Ud_AAo&|>"Q1.gS#Tߗ K8+) R66[wb=kn`@#jP3KbpgGQ]:k[>"py9y ,E7h /AtbYXep`r68WyD]]b&quN*H|N"̲rn,$1LJp $nDt̲̀˘ C+j2#KT4`,ۭ,[P,[+)yIFr̓**3I`26 t Dc]]'2@#UU&%I(((((9u124I,HLm{}>c6&bA|kUd1HSٰcHʊ_ۙj;ُa-\ِ$s b6<j**9 Nje²2ƂY@Y$t*rd4I;0duakS>Uj'v$<`ˍ]&WҠx#Vaæ$[* ֣}3 I=D[74=bĶM*~ V]q/{V/>x|2F( %)D(8fjϗ?l;*H_!=@H5^KZ>7_-]+53h.I_Zf6%ȒI/JVa{-?l0^ U #sqʭ_ն?^OL/t=Q+]d`A9H#|dksƭն?^OL/t=Of_6͆y~$wX|Zl0ն?^Nz U+?_?ֲ/Ѯ30.-ELtM"ycTZGfxɒ5FƔq}2g743oPh0}ksO/? L8ᑎ$eCߘr>Y8ioN4h\>A&{;1dT(H{{9ShNʶ`!kaV M'YIj剉TFwsn~>SYUybE6U & 􏸌9f{_uQ̻IS7iӫ~L27mnO;֭[G $mj<ٲEF*@ků*G}W ubLΞw7%y lko~%H1ܵ3s snG؝P4"_M5gI vlTǀ>rN59V9"Umr֪[H1sZ2b7M˗/J),!-`R-P~beHv.ńoK WF`u7oL*Be* QP@^uJ)_(cPPQ ʄs5JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JPC[~~SJ OWZH$2ҍOXF#A$x]j >xcpn1*o~`UQgb4%֯ڦ;op|E+&LsɽbrLipqC:+CV#֟v^־Xf߅H_&75q2uq6)ai-1v'VX\Tz*N4jUg8:߸ԋ5*IƜToh,Ԫ'[qRuq^^\ToiIƂJqRuq'[ 5*IƜToh,Ԫ'[qRuqR755images/ez-7.jpgnu[JFIF``ExifII*JR(iZ``'http://ns.adobe.com/xap/1.0/ 2021-04-14 92da24fc-72ac-404f-a741-bae7787d5def 525265914179580 2 Copy of Colorful Asymmetrical Bars Digital Marketing Leaderboard (IAB) Tyler Bishop Canva C   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((((((((+?:5.&2sǰN)IE]j^ysJs^yyE{HfccATu>xc\ӓKntbg݀$ﳖ=~~ӹtV_<=^#!Pp\Q$ƾz?7!G"F,;\B%d##q`ǷQL^UsoxGoI1K!6`3".@`_ȑ)f]W^:E6>/֡..Q)ۘ 8'M~3= i/.KUy}+<=S><~פrR\o2qԅmB!SIݔ` EǰW\RE|Cuq7eӃL+GVU1?Rs\׉4OuX34X@;[ӥvsI- 5G ۚL{mi}cmC JGL@Mw.uIƧ2-vi&$ql'2&4ȡ cxR:oo1Ȋ ;܋]%Fn @{=~񏊼c.c#H?&:1⺭Gz6g%׋4mLh%Ҫw>S^1yfe8 9aW8 t>/=ΥO5dž ;"PdXV*sumKL2|45FmVCq*+Ƨ2K)Q\AIl*do2+ 8+SI4b?V`JD[twbppøL ( ( ( ( ( ( ( ( ({zz& ZYg+BĕUpB@vw5Joqi^]hP1AԎjm:]>+űXW&0A2leWh葦f8VxfCw1i ^YXB#ZI]8]3[ յ=oZ힧mk:GMIv q3M:uTtY.nf9-ʶ` &m}|X^=rgP ±'3{e֑C B)eSʛ4.|%>Ox3@ʢ $I?ʁ:Vuc̫ =ͫwA`M?mkd2OX 0Q9/ Q5[6k;nX'F#TtW^ i-#EVjxikm--X\łv"Yp1,rWk#lFmŽM%, J]ݏ dTtF^[a??H9>䎀S.Cu٤ 7fq/jп,[8Q/D{PmBZկmay ?ʱ -j׊.u 4.v ̓?׼agk,FaӘ \~3ZzDH Դ%dEIU{{gyM/FaK=D =p3>ᨴ;FQ..2\2 ¬BS w.xjXZu#|hx<LYɨx@]+ZՌRǞ{))\J~'m mc#rD{g8 \麞w{x/=gdH`zcgmPG~wvJxCc޺-V;xBZ-oPGoQrnTk<;.YjID.bbnPhE((((((+gqZxQռ=%t ]ni.2)8'`2G3i-fs&yk,} p*} @ `(OY.1;2:֮eͬq8*I!E'݀$~FUt-F0JF퀹xG@>B:=iɪZkYavpR˹Y@PBgP(_9֒q4Qpw2w]6֞iO8ڗB?H{O ^>Gj.{X]E,9Ig[*!ʗ J0;jY[5o:yʡLǏ]Y kz6dDjWyzuWi6٦nt^uLqĀz;u^cVfFm}MK;?$pň@=;wI^xnUy$Yo|U;7=CC[ڍvMm!5M3DM6H\9Iq;NNLD8YV_Q@~(vHǨ&&Q>paV-d:9ryӵg_&Y'<5>&xch7iDLO}gq4IF1 y}GtgQEQEQEQEQEQEQE?hԮ44o-nWU=xsbzn5hwuHcu caonu]ơ[}7W9~N"|ƂC@A2!{h }]ip.}v]Sֹ1k ү^Ab#I˯ `U@\Ep+>&ݓ[_E BO&`*8H&5_Kl-& {LF5hiڔrE!O,Tn_bF"Nеݺ̣&3 5Y|%ū2 _ʾcչ<mRAN\r\@$R碖|yz대l-4&Yӣ1)c@8<:S|=p'ޫoe&lW, GU'$v5[Gm5--56u슬MT-&R{ɮFq7UYT./oޫԑu%uiT$r#vQvف[u D׬>ZAN{tq֮}ItKQs02@\kUfk) H=Eީt7ZWկ/u!2(srs15V=[T'->Vt`˿y- gQqqzmg5k--re@ S ?R톧]C]Gqd]r{ڤz5 +|[ike-촺,Gr1U&Suĉ{ 㲖Z0j^$w&hŝqVw Vk $ZimcQ&<.A'{)Xxr>3P#2Ďt^i߿㴳iR?V&$ w{IA|N E73i6})QEQEQEQEQEQEQEQEQE#ܵV&5j\j6֨gΩFbuTPni"e`Pԁhl_3~ߍ=3N ( Kkxnmx@Px55EK-54ۓgӘH#+3P𞶰E?R"Ys/!F}]nn B<,]-A&pN{H4a Cs;I$SZPEPEPEPEPEPEPUu;y.r{n ~jt/&x[ڼb)Ye0:r{1zW'xw?+E S\mwuq8C$J2q2 @Iɤsʰ$~DRkx^yuGoˤnm3`՝*B|Eæi[D}X2*$JeGz`wZ>6w O񃵀##WI<\Y[][FZVX$u!k.75wO>+Uu;XA]Yk6 =#Ax +S"=|]Lsj~0JmM:"8d"L{6Ҝ'=iHduI8> jk=7; ݶF lm!i6~">l&t) ]^Yz1\3ixG}&eK s’ U5+87|ۆEq^W5XEz\1[䕅TE&0qqT|?=2gȐD7E2v,Oi4v4$pƥUG$W.6/h֟^Cge!{9QT"&{h/}>gO3>ήǧ2jw\tݠ6z :\Z7$<yה׆gKn&ğ.Y 𴇐9O5|Nm {G@i!G$K^YC6k}-/Z3n[Ybŋc*k}#^ xLҬHM7XCN^xHM4dgÖE,G֡,! wFJ/Pxl—JҴ&Ns \()1ʱl•+ Q@qҊ(((((Ѵ4~mVep8YrL%ԺVQeQъ1Tz]- 5K=6Z 9~oq ^s&q;;qKr++ۛ˽N!nlD !QU@'Os[P5a5dҭalƐ,jʇ!cp@-Erv k Cie=r-kp{`ՏfƒEMVffvrw;[4P-zbյWTة(`pĎ9l[A^j򛛨"ԑ,e c9y(>I\Q7C H{c9y=~j֗r6P;*)`pXtEEsoռ1J7VR0AsQ8kt!@>lWUEcܚtB%cNwnW_ESf%躺!X~d.8c\((((((Q@dz2=i]QFG]QFG#֋ (dztEZ.(#QEdz2=hQFG@QE0 ( ( ( ( ( (WWZ.eVp>Z5W7'((x4k??%ƏH5 YW38}k??%ƃ geii56̬[e2:qU %%f8MEcP?!?/Kuycǁɧ+5k"W`0?C Ɣڥ޸ޡ@Rp?xs8)e6l'[c??%Ɓ` 4?24IYX۔d:Jhd~gvj#w7E_X/4?%ƺ+[7Ú|\PJF7O}8QI w).N:]-6JF$~cX/4k??%ƺN_[$2[sK` !yǵcx 8Y(5W~N")FQW2 /Kk??%Ƴ(?oSsO g A}C_k2=Oa%ΫIovK3-ԟv_j?޽6 ۥ?Q[QEQEQEQEQE#o5kI}ì^ W7+QƊχFχF_}K i?? i??S>zJ0=+_B?>O*B?>O*g?3筣Q_BTTc?=9JχFχF8}OӥWпx|?4Ux|?4U~gtWПx|?4Ux|?4Uؿy=_BTTbx>rj?޽6tŅNLgR}MiWJ =ث$(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEPK!닼images/1GAdXFP728x90.jpgnu[JFIFHH ExifMM*bj(1r2iHHAdobe Photoshop 23.3 (Windows)2022:08:16 20:49:51ؠZ"*(2 HHJFIFHHC     C "? !1"AQ#a2CRUbq&34BS.Q1A!S"2CRa ?q\MzklMk­TP%kzCIum*WrJ SC [z*;O}nבIu´o1 ݵ;R2CS^!iL&[-ؗ!{;$qdo*9l - \8g-lPP=n%֖MkS|BԥpۜqRZ @h,=]2Aş&P\ZK{w%czZQZ_wU1-*RS$+@ '(p%SzY3HRԈ?S\4Ӆ(%XWb`*M~:XA0 W+R׼fWHۀ3$Q lדlˆ습 % e Kv.ѷpRj}Rކf\2+H?NwH9.ܵ+a6>8FUIךz{!n%*RQȲy!ԓ@U`JC {ҞW=<} -`; D(([-+m idJ.I>sD6tqbB)->- #Wi}jՌZ)Pf"7LL2۵EiFVVW Ot;TP!\p)Rݖ@GTQ5]TߠmUJe2WOBu%dn> >TqQ4 CCZ   l    ! "1WgA#2QaG$%39BRy&'478Sbqr6CFTduvwxEUXcs Y  !1AQSUdf"a2q#BDFRCb$%3cr4s5 ?m+/_)O]oz}/HmzxJSyWJbS0O$ݯۯXWn_ޭ*gҞ}cX~u}*l{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧNO :2)6ӺS¯iίL{MzpS"l^;=*Ɯ,TȧXφDŊŸh2f͎ RFbmヂM#٧.*tC4H9`X__ʙbk;YP0ѐqs$nA9Q|IjDEɲsjDGDb__ʙbksJ{U8YOi/VҞ}cNu}*dSmէt_XӅ__ʙbi)W4gWE=ؽZwJ{U8YOi/VҞ}cNu}*dSmէt_XӅ__ʙbi)W4gWE=ؽZwJ{U8YOi/VҞ}cNu}*dSmէt_XӅ__ʙbi)W4gWE=ؽZwJ{U8YOi/VҞ}cNu}*dSmէt_XӅ__ʙbi)W4gWE=ؽZwJ{U8YOi/VҞ}cNu}*dSmէt_XӅ__ʙbi)W4gWE=ؽZwJ{U8YOi/VҞ}cNu}*dSmէt_XӅ__ʙbi)W4gWE=ؽZwJ{U8YOi/VҞ}cNu}*dSmէt_XӅ__ʙbi)W4gWE=ؽZwJ{U8YOi/VҞ}cNu}*dSmէt_XӅ__ʙbi)W4gWE=ؽZW[߯Sf}8{_?t?uz9&Mwnӎ~xN:)77,[׷_sLSI>~O{O7_ͫ=obh/w 7pۄZjrRݺd1P"aveN//p썿=-AF刻dj"MX( <ʱJ?DZ'IZqۚ.MIkyXGqӔA0Eb2 [Nr7LNӌ.`)AG.z""h&>72$-V{xSXID̮W^qG[>7*urCDRDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDMG1@9s`S  Կˢ,b-[D \$bG@Wf/%eMȤ! "=,4ep02)&"+$% Ȣ?OY2ukʸ[dl*d*[ɨCnJrndyյr&n1UK瑇ޡaڌʌZZTSlnb_h01Ĥv&sD "RKL7M䷑%RS,.)fEg H@R͛#*D-$S"I%(ie&K5@)C96"h&"h&"h&"h&"h&"h&"h&"h*o:z`ck~lp_M0)Sj5[ؚ"1y†4b5omd *vMkM(@8dz7إ3M4"w3qG]5 {qvQc/cLM≵t)@T7&"l7u1L\FURs`ٲz%yzGby nAL!D[vN(- ]ȔJW:dH×2I8:hw||ًov&m#[JGTAtY/[YbtEγ^8i9~F6īDʦlF݁M5u #%vp.b"b' LG-/9V*ܶp*r(A}"h8ρKE~"h&"h&"h&"h&"h&"h&"h&"h&#<늤2b6wx3 IV+KT䁿QLE9bsW(-/Z"`*s@芍._9pܰw: =FTdl'w!5d;|Ή[v'oYrVNʘl9:Rr1WyfB6, tlج~ԥZ|իf9=:!;FXu![bee-cqrPn[ k9rH/Jh.IɏY%o- XW+GLx&AAβl:|bL5V-9 h qiXGJ"|yGkdM`"rAӇkEШDP:DJe#*u=!Ed /kDZ" |o8 w%cA^dIϮi$<?5yMɺ" \ EDDM4DDZ/t9͸l!Uq8U ST !Q֛#;Ge)ARPS쇫PzEqo 2)(L!tuMRˊkhMZv ֍Yk邮Œ"iMYQP @"WRnöU[9}В_47IԱ Dn@a ^Ǘ_h`,}vwQkL3*+% ox[4+l.kzwRcc,]ZE.ĆQN"ɷp?&c#[^+[fc&&,+YcdIhfH@&"Zpڒ[rB 62O.yf }%/KD4tJQ랞Pl۴H8pY9C⽾ E罍n9l\t:ͅ D<2[͎^97@$$S|6̥g|k)v%fbO ŀ1THL9r)La+/>W=9#7<#[J3tuv::N]cs/H$z$Q"򗸰bԶ jfUrF0$s0:9k̅ng! z"_ɹWc6ò11;1uԩV-NNY(鵑 "7*&ԭȦ3}`ީ׽-Xv+@sk4?#&_~?!pHb'D9|bQ<3*50dKIN&E&3"DtI!^|&7Qaq LAE]"j ZFw8.6`VA$vQSrgMCZ"h&"h&"h)#o[k4z:eVZpkZEPc'0?~{]Z_RZmYj-tWND02s#!ZY8ƊHIIH#( ˬq&S0JR7:_%yU@ ő`4EC:t/ 㴘H+7@DNYHlDT a#XEEdu#ccZ Т܈@(JR4EE3rfb0(0| W-;%+/jyGSvf5d$XcIc c;"-Tj>BJFkYu^4aH )b*S DZ <[9d4[EȤ(RJUO^1)WGY)T j&BKjSq9C91 H0!aDtEhީ {-Rl`MII$ J q zS'3`; Eoؘ5 Rߛ/./^A].QTg=㍱G~XUHߞud41"o)6\/H@H*|[r\vdqKf܍%#b-ՆJ^BtU%!n0ɳVlTzvw7 eK,s+[ !h(tW$78/VpnqDxsHȫqM ? f_a٬ 4dNBpv @)Dds.fgRmJpNv<{ lܙs+tUu`GOHKpJxhX ^ٮ =Yrm.̥ͨfR|/p >;]b~X*/\xׁ"B,$LܮsѲiRXR7~ Mo>V/U*qM Z."٥#$&WȢM>O9oD]艢&"h οަ'G%~ߛ?(%?L, {s~ڹ C.^0~S'eV[P}^EXB4^ĪʵFBU\>\*E)nmՉr7'bGP$ Afvh^`H#Qvn?fMHpfhMn+clw22p<v "k x)n4qȮ_❛3eVehwQA/pX;BFUnhGfl@_\EeʄZCڤl+n'hr$4 FYn_X5(#N7LFMB"6y@d*%N9cG3IGע))*->/ >艢,VGdMߠ#tka2X@Xbڪ')$ *͝UMdg~GhU)Ie|EzMaW U%}DIP,d }ɽlg: m-_;mD4rGY:NRL'б.DDTi[}Zu][NII(SMlP7CnDJٱEy&$!IX߷DWQ1r'(zrH*UV P'B. F6̤.Q3k4ا#/0Z"4DDM4DDM4E[[L^7 +6!6&j /|oA{׫K%;J-CtM9[*E$v9n,6ɑ qLa*!Iʋ Ĥʹ]C@DE4vy6c(5 *-R@p`E*Jb A@:"TIDN$P!S!Y92Sq&%jGѦbBAuD/i^Quw1%1+ h]*Y\a`bb͋Ǽz+=~p ۺS\i[c$I囬XvA4E7)ނ.(Epgj-ݒ5ihEf\bڨe6zI.E(>'j0X$THY{5*W(岥X>C@f0%;ə)ᬟbƸ5ײYq7 8Y1rrHa),̟xnDCLsQ I4Eζedwf8ziu\؄|!@@:| >*(K!ڼNz}CX֜g4< :%*cHi{_wtPUGڞ߾U5zX)N6au`hs]A2|JZ#ZS!O5߄'>aM.OeP`$5W. sk)g_xysg^2$j??jf>2\A%PL,] }(PN(kI*#mxpڒG%8-F#lT[fNčal6?1Kzݺ-m$ˍbK xiifapEZ:^)uJwmId!"0(tE^n!d)N%g2 ɱ"oBxB@މI2Ǚ艢&"h,3#f\wOOc] 4xF #Rg+c&rASy? ec'"v+JH#++-UfẅYJ(!̇!LCբ)kS9~ŀL.9ץrfd3*ud2Q%/SDQ[NAOp۶Io{~SOX(OKALRq1(ZOD[>kvyY  ZB$(rѭūٹEj$Dɦq:d1HL_Ml͚ TC3n1WLUsALVW`a>z"љ7 GfMh,[Uoǵrq?>yQYg,ʝw (v]> CDZg<(xx7pVXa"Ďj뭢ԙ].~2 E"DDM4EMZ_oS ?mo͟NSI~O=9Rm\{"Q_%gSpƹT@ʢX">=%-z8"_"~WQҒXEOf2E͛8ux\cPLg9j` *nfm∜zFmD)tq&چ {vVt]꭪hfQ4Kg)KۼvtíwVT&8f4A#H4ʙܨ :d<ǥ2D\Dq2e?*cf1awPrfص>R)oy-Uyt%vn*U2(զd,9fJ=-=RtLrjj=F* d& &+qUhD9pV1F}NG)u.5FUU$>#*s"'R,mMK͟77hG騙"SEЙCmblb'3ANdZb&* | KDވJ&68DMROomMktEm8S&'lM4EtEE>R7hP*1\,tEh8/nϢ+DM4DDMc6k|AG^_#& إ(shRu9^f8#/j99h˃FIH1p2`+&UR8D_fhf3@ȵ]Jy4! 'JMGmLY7 nȨ"xqxplF%YPzz~q D^ߴEC(eݾ0\I:TNE*ky FȠ)pժ)& SnP] ; H=U&FRy.1M1솋S39",[Ay(EU8 Q"`<ƒm9 ŘWG _V>(6sOInn kۅIJy-hp2C܋,_5;) ĪtՖH_ZT8D?\10m)F@3R{kћQx/qKMP; b6|Ȇ^oͺ_z1kA.i>cx]e &"^R[$oyɒL`R ˘=! NQ48 m(XKm 3ZE h݀rVX(bX҆sHl?9XpKU¶4](G b 6$DʠK6i[-`=ڬA-~(WY:lnU2/o)IE%ȗb EP$Q9>󎈰Ȍm C¡@#߽A,~ (x VU!QTI4E[[&eoGΚdLi3tʋuW2nS"iɕP1 ]@'nBG~nj; ,+iKF.y <ʋʣ.#ueTp走F=5a&RD(P,:(5}#k14x#UF. -<WWRYȪ6nE]@I1@?x0@ !%cu"w nU[II6**KD=|z3紅VjZ)WjК"Sg➥&'edy8)1GO>BU\KM9h `vWMJ,Tt'=U^*5@lv@JSuSYi#We&_ѤRUItMtLEdN %1L<5J Cz"h&"h&"h( Ǚ+}̸- 8KS7*, y`GCs 0OxË,8/g嗷X "Hv`បϘR)E~F 42NL5^ED90j!w738vIfJb9lv^j%1R$A.Z"sǓn/>_xSVCWʔYe ^uZzN{, !=BE{)G8eB̓781܆&ʱBjCr:O;SuHRK/U+Z*nRo@vֽܽ#n߬G[?DQ%c&nř Z_s.K*S6 #]0o:bHpKDZ!GK4:f0v?ǕvUN6F5IM=))PP">:"n%5@ؓ<`LlԢ-n6->j|if7HNȜ=TIgD=mt~&/w?gsRͺ-zJMF 5d//H)O!i08_kӲvqws\+rBP^f7.Z"6 xƛ#:6;l#nd+f4S݁$92hB,Q:A"<(z,gJd[͊^o_+Om֜*FqQ"H2JDa+DĘ=g !/kDTƟdAʜ?H.\p~j\1ûl{uؼLQ3w- $M3bBJYd_D5r;fwiE;h\4za+NS8 !f[lp:Q*?0s"tEUys%盅?%aisbM*m.})"~e:=EeAC2#@$ $zI ׌i-D?h!0lL(߽{ִDcaFkRւ0wJ*n^f~ƭפ|"P ؾ|r*H_Mbr/1㬈lV{jH4J²kJFN,Iy(O39᭽ -/4l,=zMYa;~E= 7Qe$ojPB)csp,>8'OppkM̈!$g Z]SDUH yrNnEc}HK%sMߒ/[*L|k'HYL@hET"[@}G=(Zs 3-z^ Ɋ1qLc5f7ʪ""͵`ܡ,(#TX C,P@@tVq#.4,eƶY{*\\^A~S.Ev=Ƴ6 cQWIiizPTkhC. $?QHBUR)[ ae^i$ثfְ_e%49'9>@3dᷓxaEҷ3Z"ѷ!Vw(ѱWz ̫wI5TL 25HZPW:VjCEm6].pH\+Pjx Ow#mS7!\1K*Ƞ7EmG(I""t@O B"3fZ}Ұ}z/\)bI7sIMҫ۷Ev8:n,ͫˊ)M:wJa@U8 UP!n"J%,1CO?rK8NĄ":)y 5,`4R}ھ/FڳhđOEjM6Id9VEűd?B9J9ȢVj vnQ?XRlkvMS5pNj"śri1c9,͆fgvQ!q~y$At_;n&AP)V3v՜($.Cr(62p> Ü%cVA~]|T7g[ڙc;92*C{#㤛NߐADcXo7U Aڋv.!/-)3btg8-dY yκb6chCNbi95ZYp+GkyH-E|v rgKރ?ꑄՉC sOVM۱$ի~9iKq/1[nfnq#mFcGnSc4YcXJbϗ,-0`H<N|zx'dX k(Sߺ48TG^6L05C-X4cM( !PRA>$h?ǚ%3v,CG DQV;d(r3!3 t%LKz&:iȬ?'w{$ՓKy?jCڽ2ݓmd6u^@aeGc~vg˯]ZDyk2c ݄bWcrqknRPRf3⭠JR^{p6"jtN1Fa`~)&ȳS(T ؟f<2qX,tcɺrC^?#pz̮U)Wq#nSNNfA^̝5X$P(r\eoض/2ȍd*pAA 8l-u02CgyhPu\7 +*eۨ#M V>/xgJYCSHq~u\qqD {c-.;jQ9 W@#\:V]8c+"<)r"! WTb4-6<͖+p) qX.5z>!F$1O#tQm"dYتI yr{]7i6fik $g g]{Sj}QQiM6CB7h"eay|ܴ)fяkZq Isq$thN-7 Q?h/' O$ ?'ž?ߩ6CP)nYklyh|pu.gBs R83Qi%II|X :䂂=FJV1 yHNOݨ7bK:3i&""fy־~rS9dbP1 ;9ܮnr[yuV8@c^hʃx <,RG>YDj\I=imnZɠ{F8'#78zy P+ u#C b$NAu ȧ]C Eny[2#t Vz39b7ॊڶ \ XJb SaT37j6"ˮRݨTs!vEџ ,s7A+Y7C{)-_Dziu 8~吗pS3EE.ENO+>e6olI5rW?rvdt D+1˼*E4EDL\L\ ${HXHb! VcZHnE)L! P@V BӾU&wș:3l bW4];]n+C (,1*&\ywp浵3ҼjOeॡjYȰaYX:h/f9tJ8o,JvKq"4 2;&fSƹTA0"nnp?ڰ2hDǐ7?ᚼjkX-w2;򽝥6V_쏛8v7Ϟk֚ ]H:|gV.:h3OԲ2XHcC@>;d{e٫sTS'0n|9/Vk\ '2Y94}$h}bͰ+*G!A}QhpNq A/2)xұ53KRl B 0u)ݼS?&p@!G@ew͘ݦ^b?IotǢ`#tQNbt !Ϗ$57Iq%Uړ({(0#|]pl"V&JK&  "%PUp^̽*</!9gBi754>\n(+\qj.`&41XW-8RVi*"ElXZy:l&9lOYXڥ\`р:. ^Ue(SrALI?/!n`Ԟ Y<.~sKS5缹ƀ @WAF%J%1?5Ф 杰U7oڧk[bJ#ϖ-WNKL&ǘCձ~+@Q(TȔ+5Jq"a[&&0&EssQC1c DPѼd<'b!,$M5YLEU?WH,!*EwCÔOD Gzz(?GnItMB`~|S FNF/:aRlϗZ*XL{2AfV6-,knѶ%!Y4HDb<=zс}u,a!"PTD|Øѭl\RxSB}730dZK\ƆC5kV9ST#HB!JRRj> y.V'wBc̍xLѐݬ|ry3:ʤl6=0

    ?㨜I 2s+nw me=CW֙?"(/kOYG *mR:+LJva̰^߿/I8v1 N_C16>Ygb?vVʱ~%ﶢԨhuça#?N?Ph#dm1`6EvH*"skRtDKDysR+^5-f"=Po08:j @β9r3]cRqqKbhÑZ!9~CVu3ʕ\RaժۻA%}n9CJ_7L^sb Lg9 PB"ACU7aoDݢ0/9WH7Ry/+uQ[ݭI6%C%$&9MתEv./L^.Mn1a\syËdxGK'DI92wn +=]%SHT:ar0cwcR6',k6 XB4P(A֖Ԓ52X»ɼ]caY{KJ)A~s:K' s)@=@(y5εsڷm:9xmt\LA4p0[Aq 5JյMZ_oS ?mo͟NSI~O=9Rm\{1c)X:ȵ۵B}X$;g'D9y@(\[(;S7CiX׹5mwY ET#$HbDYټ+E%"hŏ ˥/X2Vձcb؞@crv+ظXtH aaIŴ &z0݌Q\ Pҩ,H@J7L="@HT/$eZ{Y`%@"xuy^VpNT MIW!5t5Ƴ.urH/"*jlWuq*EǏ4q +n4d@2^7`Lc#EŸ&CD p^ 8JԶ[i;LՙF}?BCS#rQupB&e$W&3'g.6{wkGb.&%%!%x\)m±>g!Y3LIiWŲ`/nc;Ik)\_>]vϛBឲu#0i;v@WI99KVl>lի:KШRAEF2[}dEV 5$ r̹\9kN{ @3 1H{X 뜥Bb[{+jɤ* +B O-PSIRvFLK٠@0KAO]?Fu(%eTyK b2 ]~cva jJ64p]8lR9 \;}wIKY!"04[Z1VJLWW,RQ*\m.ZZx6jG%*}zS|'™C+ZǺc3 đVCjXxUvV"9ok$$.QU e8`<#B+4"F9+ 'm/.4 8Uv:G+:i;6;vi|uu`PQt@@*8mfbB-COk/Dv6vcxip]%FnUBcXKiÛycS`=4ڨhvItd:c""K20MAqeZ?*M!}ײ-O kJ8]5sJ|S<4 l`L= ^*74W2ea bų`8/ 7uchX^ϝ-_b,$m)NU&73]efȪrDPcyꃣ5Ka@1a6Ҟ.h8i- aEg(fM:}aCRM`=DE]у@SY`P(u) TŽmXsɑ.& 'tC  כ溬a q%t"hMu^/$flFѲiCI&fg DSd[pvb$7ZeET7H@JD<||4\ A 4R WIq*l<6hyNCmҐ\7,RL/lMU1Jm/0f6{%_ ÷0.>Fo |Y7-.-X0!4"3Լq {APH6)P(#?3U::YCF?#dِNnZn3&&Gh/3(yx,!k@4'9hhnPeYy-F.64J1\.GZDc, %RFAS* YfJՐndE)}cч&F@ITYeUW!U^%`*8AрVzLt%.'$_=́eI4՝d!r)&$9`AR 19&)@@Hg]havĹy] ^ϐ<1 ^ZִԚ I555'cN.rvN/rC!U7+L]rR v10 P|B:G* eŢ "(tx}\e]3$ne\TJL;tvuܸYw P2@@Y"hWd R:'b9HɸFn"-#A"ct_)CB,MVɩazM?$7M-tY;Y8›~̪G kQtR"T<ٓv #ȋ }^xtEI̺"OM/vVISTQ$5:@^J- HhnVP ؙ.+(tl2"d6lC@(D99U%r>\q ˦U#GAU4(*YeDHUjݢk[DM4E `il:*qwn9RdSjIIAi6ё >D91 6a惟"kBRҘ4ׂ~K ŻbqYԱluKubkIHh[-.̛͙6BEt&S5\;vB,ɩaxB&G/!VI%W,z;tN 88ŗѝڊDS]*RR0yͳlq(OE?F{~Ɩ_ 3-pn\k*PyBv7AAzq1d׍UЀzxY7h)D@e,l7ʸXHZρ3\[۫`@k- 9 xM"ٞ6JS3d?NCWY4Ȕ1R[DJ1N&l*\ p"r"fBjZ;&+C(. r+lyX Ak:KHoS8ιCtY}%ۃ풔,U JM#7 I4H P)T^PŅ'v>gg9bȶlpV ; .$F +zHsg!=wмيn`Lß|;I{, z5R[m;^tRVrQeP Y#!52ȎPxņ[X+"ʋ^#ZG ?+;f2K$[.~ʿrd(2"0V/-mx7g:ַlȰe@/p@3.]ruE-t˴V7Tn8DtET@@)DGzIܨD:̈́bLE{Xsp|I]&s6UEKU$~Z٪b/55_"U7u>rk@XC, \}^ (e_kzl MsU]M? 3+k"˛YkE#!r os,ٷGpjQmx-XSgRS,ڬ؇XWp(8sE(p`%2γmgGe {i<}*Onw>qesʰ3s BEۆvd^&/۟G x)E/h\_[O+MHNKZ%uSy4f> |z?^[Aoj~kb`~UtP vg5$jsDWh {7qV/;t8o 6c,{cE/u$>pb 9T+ĜMB{S14M#!0Z81(j/͌vرM.[ǑUV(5| ˿pZ9AdiHL+ѽbL\,!t#ĊG9h-$@[x;m'o6|-fH}fvQH2af@4Z\.KD"ox Hkx\٧߻g,`T tl-;$˧E/;dbb0n4 t1UeY8t0 FKp43pa26պa FxnL8SmnH9G)?zW 0ea1 7᥉* p ]|jETJp:j̦)@@@@C@u־mZ Nj_a}Z%SjI4O7_ͫ=obhŲV*J_lBX6X'k윦d4zrT11LSK?y\7_ ٿ4LUY,dD";'Ms77DEe"ڲdcm U#ðu9j[eܦ_;;tll0u`>u 2ZnBsaDS)jEވ7rA̍`->L!ob[LLsK L{DJ7k ~F8!Bo?\kmCWq;I[My%0;LJ:DSC9PIF^"hCc1dBPC˘Tq?>Ȯ?J˟WX{ܭiЮEb:o){efmp֝fCHn jDA^:LC*T bv$q!DAS2ZJ-bm2A⎺i^C:Es/ζ'Ab }KSC+>Iyvrd*}QHJNeEN͈(o@~v -Mßdf00: ?>ZmSq50[m4fI =`u ߡCuNeI%rdsQ# %AuGEyeVӈq+eyI:*EQ׫~c:"}f1 P&THňj㤫)ɫBi/R㤕lSgRY$u;OU@pEy܊ΐ*zbnKW~uy*¼$#̞ җotݦjV̳Ѷmsv&dc vӘ#8'QļPl'caj1 t&P:G4uNq2a TыG8ra3Zrq/_mO HdkPH".L3J\>#jUMO?;Y{kO(o .և+yYdJiczn4T2MrYUN`C:YVb d:n<']AUdM&m#Z'C&+$`!S acaE+cqkAA F@|Z#xQmr TE%0*TƎ0%K^4Xoa9uZdZE(Iq̰ m'?$원XtF,nڅ^9@XI8]hbH-q!N*,a9^8푗{tel21x3=HqkY[IoX?F8o9t 'NW!^̜%JHc 7gȐFא]:ZӞig+Ȼhr[3Q*F ? SES.J+&QB&2#¶p 0v̏cXvX}y(Hi KH$ ;-ٱCOal;>]]eaQUNvgve~F@ԮLaa3RvVN b p ĤPDMcj;Y >j,mk|eI,fk܁ C?[Y2`;W&~.61JhԢ[ASdK6Ajn@H(xDg:"h,vRScz_?DXΈ^e!`2|CD: (:$y!CHGU2I܌rsW]M!b^|9@v.R1NS [YvC /e$9 t%c^(o?D_=cn0,~pcnbY)KZvM'U?%"VR(|揣8p9*?cL5iZ9Ikrèb QLBHSu([~Ј(ٸf'C^60ϡYVUlEVW1$l%~D,CtÑl"4_({I+#G3.{I$O)'9*!nYlǏL,Q=^enH"07Tف#y)h{V[6 ;27r ̯(A-"uPؕu3TEpD$ O0`"C$7.F(D%hDmo y*M;-aB0W5@W88Z*\`T$ "P"-6LM4PA+縹Ƥ6,WGԒjI:I'9%j)J9ckkHg-H1[(A1DJn{c :#AY &ڵ,)YQ8 4A#ASOkZ;~)~, O,@>B#S2!vhk);7J~uUͶњ#AT,.gU>pbLՎw.(s Dy17HԼֶ-;rlZH5N9 [ SSTۭzTqVa*u2Uk@Q* )G:H}Cq_jf<9ZitgPԼv._U$z#Q%zS}`۷[>LX& {n+K*od @MCr~*?7`ykl0VPh#\22uب@(RD B!Y,> X?eD%41Ё4k]H7zYOmm1KYvu6.SFnX/VX=y$R 0ld(0ϥdUs4k R2N:x2fpnp)@DPQ)r:hV3V ۲EdL\H-o %\wxfeߧLX͞u*( SO܈??\N$ff2cKFˆvƋo $n~@V!.[-.Ȳ5|y$+Oۨ"!tP gYV REc{b1܎c~Qlmӗ\:-c f] rQn Ht Р2îKGüp1lV^N K!8:nts2 ˼-v[9M?4zUV>֪$~(a1Q$u s1M. `?[,i X"dB4x{$2FTRޙcqwɝs2+Yہ:ΠzJPCW6GF4옳1c>;`uQQmh zT79\)j#k6`[ХTDT'Yy0s7>#B4 G-/sᇸ֍A8SWq6.RY"Ż&~ʮWQˇ\UUT'7:JR8ңU6۱߉~f-*@5kt9*:nKwWwșZ>{kկ dUT<(S+R>GIDD(AhS\F}w<Ļ\@'04Me^5Db ONH@RB8JjdۇCdVt`(H`БDD9+ϭbg-nqlh/xcn󳸆4RiETZ_oS M#m_9>n@ *48*'YE0M൹f)|It7ףIʨ*bUI{5TKl@*U_J(%,d3MtU:ksZ&R齚oìhֿ!پ]Zֳ{ɔ$ofok_.x-nkY_]7Mt7voi5e/.٦:wm;7˴ [oy2ėM~;6kok7KKiF7浛L%{4߇N {ZfvksZ&R齚oçxѽ~C|M൹f)|It7Ӽhֿ!پ]Zֳ{ɔ$ofok_.x-nkY_]7Mt7voi5e/.٦:wm;7˴ [oy2ėM~;6kok7KKiF7浛L%{4߇N {ZfvksZ&R齚oçxѽ~C|M൹f)|It7Ӽhֿ!پ]Zֳ{ɔ$ofok_.x-nkY_]7Mt7voi5e/.٦:wm;7˴ [oy2ėM~;6kok7KKiF7浛L%{4߇N {ZfvksZ&R齚oçxѽ~C|M൹f)|It7Ӽhֿ!پ]Zֳ{ɔ$ofok_.x-nkY_]7Mt7voi5e/.٦:wm;7˴ [oy2ėM~;6kok7KKiF7浛L%{4߇N {ZfvksZ&R齚oçxѽ~C|M൹f)|It7Ӽhֿ!پ]Zֳ{ɔ$ofnO+ '؞kl__\&wo2O(ZA.:w'N8'+[3Ң"DM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DDM4DD_PK!'yyimages/1GAdXFP200x250.jpgnu[JFIFHH#/ExifMM*bj(1r2iHHAdobe Photoshop 23.3 (Windows)2022:08:16 20:38:49"*(2!HHJFIFHHC    C   "L!1AQ"6aqtST#2Rb$%47B5Crcde3!1A35QqSa"BR ?}pFQUKȔmhJOf=gW/#v_Nn)'W#|ueDH/5;?/}SPiy57%/}7eZ`iuѢl֍o[Wy) EIĥ ; 7uO&ny<5;?ͺۄBڬ[iy57%/}7eZ`kDڜ-ԅ MSɮAP5;?/}P<:]ރ~_jw-O#v_NN6kJIβ҄-A) 7uO&@7eZF쿚W)+HRa :odMwz ny<5;?odMwz nyM}oZ֫3H\zǷ $cէ(U#%f]+W&=}SN}SN7}a즦ZinǺnJbU)7xEFSTB%Y8Y0E r`_W}_r4E?;\s".0sj}Y +AIW?b5 ÛjgmԳ&5H65(]ZG Sn!xJsbi[g$/E$Á_kC>ˣDKփJܗMZL)ÓKcKJQuN2F[B [O~1WVW۫_+jukE(UQ-zQߓVC &vY ~_2t ~_2tRSSSSUe dtxM QT,#jZeRaR#dH[\;:͡iڢ:jղiR@WthpN[5u6jZ !ե@v iԃj 8lcq&ʡ!k\Z30-=Qpސպŵ6M⊖TNVQ֣(O2tfUJJVۑڌ򔙅- wV 4^ R>6qNme [Jϳef,'{ {\n\hccuZ[J29y3ȍU \m8P(њ|JZvd%6#B2ϗqCqia%$ YۄdQFөǮS #8 hn H~3'#aMBuǷqpΠZi>rԹ3*%qC]Qʎ0 kplS*3Jg8I vi6QÛS};Y6PRդJ icCizb Һ[e55-`}g](NZˏS]FAouTmP-u554E5554E5b{5QC㠸8HIL-6mfVTnU?wVBsr8:VV*M͏ 6]Cs!l @$22FԦ ֙len+CE@u485W;%=ڵ'ߪ8n&3̖¼+p!8?VVH"C!Jr#J)NH*j^|R~xAC LRr!G"rJ~~F*b_uiOҏ(Z Y7-E@d{jqXYעjrÐӗMvӴi7aHKiڝmֲ̃ >BXl̩G j' fJii܌pGyE-Jւ9JՅÃdhҟ2,艕 i<A q'c_Q*=z0E>vSrrZI)\ԕ+yS1[mCR01;U:sk|8KA~^vѥWjTI݅?c'Wo 2Dףfr(³I=ëTnJDɍE*fK{B{u"JCni] K^v "Wյ' qK)d{Ie&ée[.,pܑ~uˬHρ Oʝ|Cc>rvG)ʀOhDT)2WPaq!3que  *#\ I^mOe2aYqڒPYu+KGhQZh=c2 f&8  ݝۂ9m#m: )-GlSڧ7|iz6!R{:!Ltr9s=@G뒃Um-8C?¡tDe&*vyoV-ĩ'`N\κmQ>hu aN4Cq=?u/[Bй%ƕ%HfRu47HJ{[Y զ ADjzYn; ږ)@wj<Ʊgp :hOZ t'r[-##<9gfuBQڊ[! f+\ta'p6TydU%:s>)> Ker#.]&C :ʿuPЊ )9)=A7W#J\m)Q[ eHWz;O2Iȃ:OqřVo<(I +'BPbmN!"LuTө I}zjB^6Gڠtlyi (j)ݭLnԘҠTBFcIGBu8 Gky%-B$-gQk#G3˰qqde-ԒIԜj\j]Kb-M%APm/bħ )!i(&R 6[cGA9)H~j0Pር-N8T2'Z 7'V/%f:'R} 4q q!i J# +:)sZu4EY4ȃ:""SSDUD2T05!/C(ZGVJ Q`㷖$Q2&{ʏgD4E[T].J\WzԧkJhDko}R (Hhλ4E4Go~O­2Go~O­Y,g2= tۢ2= tn!KM}W+ &p*4@ornRbOz"_R7S=kY*SUozțC%"-[H4W N @pE\:8zJt NPyiNoVn=Σ&;ՇH1HP.TVVRҝ$«х]^ 6fJȃ[OuO_78B0G-rB%jk2w;you6dY' +|<@B+jmTNiG|C!@zs٪<ގn}^ .ޕtţ1k1>JmP%=j0st{\*_5.YaSVTI{;R4EUQɨX|TV-v%BDjLVTV.6n4{:~1A8EěOY]=I~Ox> wzWM Y3eԑq)LG[aN@ YǜUuVm2I h ޣ96jE]cpߍ6=\XO̧2:~A>G~ ! #ma'{g'i?Ӯ+ UV Kcj,G3^{(t&$Z^f:[ Vpy~QcN:.T60N:wE g Gj 9#' ճcP b娢$}*q~9O<,כe-iVJЕ%d{q@s ªei"L9ac([ܥnJc]C21.<>WV) N8P$ AmƏl$O+l0;N83Hk*/72!:[ ,(xq Y"2\ ҒH'׍sdavFH%q++k6:NwPJZRpA:ik~ܓ6q 6tɫ<$;KCdsv@4fS<@_v&RcUc=uiVd׭2TbI/\s{'UGQ>õ8d\^gAncm Zf3X8i^w-[ʀڕ+iRqƮ:6ã?»Sq Lj<>jN\un,lTo~cO3`6ygEkjt٨u~?*W;PxƖ6?\%y8ێ߮CvwTmjR}QIh.h=0(.Z֡2n`=4[k*J'XUZ688?7egiʂ v=t {Q4ܗćxk"%OL妀2@:QߓB[c؎Dݔw)VOrOx Go~O­Y/l0d(u#?rY ~_UfޖⵇKEhIcR6|@Iu"ѭ;auB4\: (I <5nkhZHH l6[l|4 I?ifXjX}ǧʝckP 9X3W/+cqZåER-nRO <[Su٣j;2 _MVE1UC/ZGmKf IuN=%Y``cry ŇuF 6ԩmuXOIs+ROGfynS4~-O-ֿjfŦ̺5?tfVƔ9pKV[֕Zd~cۜtF0 R˴ZzUZ۽,&rkn()9H1 khZ[MpPxk[+@c{0O&((nj$?6dդ*N2 00599DEC88AFD379FB54D654052E077F 0533C6BB00C1DD6BE56630A08913300F 07B4A1C9A59F8A04ECD73B3CC65A3E5A 07C8D728849BB47DEDF47438AE70AC1A 07F797FD521C8DD086F0F358BCEE08EF 09338BC404BDADE129FA37EDED29BCFC 0A330ACF220D4EA0E1B1D1F3D2B75F41 0B232A9B543705AA6EBF28E2479EABF7 0C9D68DDECC11E309687458D26AE60F5 0E6A1F25F98CE4A295DAC86053184324 109C18F45EDD7A4A86F9BFFB29824D5E 10DD06585D77085BD5E50308FDA1E660 10FCDF3C0415B3BBB02CF44B90F8D6E3 15F5C1BC21D293A7E1606C8DEFA424A5 1C9B415BFE697A56AB15E9C5C54E66EF 1CD4715CE9F41C5226F72B06F2ED7A89 1E0D3A3664AF6C5118872A59BDBC8146 1E6DE62646E2E91A454FEE6E97019D45 1F906B9F3C6E9A171CFE065E311FF885 20F6CFA26CD259B52265DE5B3F2E0294 2A44994DBD012765BEAEEA8ABD86DCC9 2FA5E8F5326F31708F60CB8D600AC074 313C2BF86E68069C185A84BB4E6BA7CF 358793FB4E86B0250B5FA08309D41DAD 36A014AA999BED8A09BB533F4EC43A85 3799F4C7163D76C3DA6324A8FAA04600 41263266829E1239566974AB88D9F4EF 42B0B69FB747D73067ACFC5132936734 48DEBBDD8B33C2DD9A7A25ADBFC50680 496B88CE2DC1C02762A77BB29C5AE453 4C7F435012CEEFB47CF19EC51CE7BED6 51233FFC6B2DAD4925E7FDBD07FED17B 51E03AC9BB65DC1F81A921D46482BB9D 577825DFA9197C8AEEF425722E495160 5EA1625A59B681F8E073D3F857E692DC 633FA9BB7B1F38DD873ED7C726A1AE28 649A4B13862B00A4789791074EE35296 6622C1A46D811FCED9F2620FF55C5F9D 6F1C221EA45BB4B346560CD15B7E1C80 709B5863F703E74111CFE54C52CD999A 7271CE9E8BEF69D0E5CDD7C2DB2C7254 728266F8AEC2A5EE8F918D6C03B2E432 745908E89650661C6138EAAFD0352848 78BF03119D5981F65C7F86E5E4305874 7D00860DFA9D54E5EF76EA1393D19C9E 7DC7AC4900452A9D7F4F0EA671BB3C35 7F16352B7E51B6DD5CD845EFF625B774 821FB0C3C924EC1C20E6FB6B47CCF606 8B04A49A7246492C48E85C89421D1FCD 8B53BE27011F52B057145F409E5B2C08 8BC366704BE94D81770B780F6AC29C51 925443CDF0CB03A899D27BE493F7182F 9348A901E872E5AC7DC185E802C35ECC 94ABA1AD1AE5E9A3F941A9A92B2CAEED 9D821C050C851698D9809EFF53D41E5C A03F12CD155FAF177B16AE4A0D4F15BF A087F9BBFD4C5EBE646E5634A3C6A3DA A22C3C8E891C10162A4680CA76AAB20A A2715B60BBE9F657AE46AA13ED08CCFA A8173C13C8E4D90243766A5844D7638D A8AFACA68A8EB1B40C371E6DA55F6772 A8B8C7B75218C53F5B4646049328E604 A98D464C47BB8934BFCDC28A8A7B21EB AA13888C4B5642B2D390056898CD2A00 AD22F88623C86E8B60AA7D5C984F4495 B32311BC4735EEF2E24CDFFA26F69180 BB33B0F2103351BAD5C6FAE22D1FBE1A BE5BB085026CF96C471E5E45F8B7E0E1 BF20B595D2A13030D8B481BED6DB2DA3 BFC3BFF7799991D4D8BA1A379EF711A3 C044FDC16D26D2DB4B102D605650CB04 C48913A34CF0640C82E1A82A5E3606C5 C4D4746514D893F63ED7EA36056DE22D C5448739577CCEA0112756CFEC751C71 D1A187FC7CFFD8FE5F4213E9DA264FC7 D7AD019A48F23DBE01573C7A2535774F D9F2109FC65DB475968C2F3EEB43C173 DA45DE7D66FC34330EE2B3E3CB627AF9 EE0408E4BAE6E24F576267507289BD2F F4CD26396B32CE850AF735B5F4DF0BA0 F7121E962388DB88F30161D58D3060B4 F90FA269629778AFA723AE0E7375845D FD633D490470BF4D2621D477680439EC adobe:docid:photoshop:268e54d8-ad96-11e6-9875-c3ae9fe9b346 adobe:docid:photoshop:2a59b17c-dcc7-11e6-837e-9c42691083e8 adobe:docid:photoshop:2d0698d5-abdc-11e6-b149-85202e9dcfc7 adobe:docid:photoshop:4158b484-dcc7-11e6-837e-9c42691083e8 adobe:docid:photoshop:5558be49-dbce-1177-ab74-a19abbfe5183 adobe:docid:photoshop:5c2ada9e-c82a-4c42-a001-2938ef771d3c adobe:docid:photoshop:5dc8381b-9a4d-1842-beda-d4cdd957b27f adobe:docid:photoshop:6f08e69c-6f30-6345-a3b9-8ffcc31546ef adobe:docid:photoshop:73c10a4b-248b-f940-9f1f-dfe6ba72c230 adobe:docid:photoshop:86d125b8-f60e-8d45-843f-497b7a35c557 adobe:docid:photoshop:9175e5d5-82f4-9744-b09f-89bed622cc69 adobe:docid:photoshop:a1289762-4b71-fd4d-8a14-735ec142fc9f adobe:docid:photoshop:ac5278a4-e963-d744-bfaf-a0706f313565 adobe:docid:photoshop:c6f6e563-0a9d-f646-afc7-e48dc5531f11 adobe:docid:photoshop:d1283862-1d24-bb4c-bf20-bf6c6c671880 adobe:docid:photoshop:d7a30376-750f-a141-ae2c-7810495ce369 adobe:docid:photoshop:ec58a44f-900c-e34c-bb1f-fc2b0bdc11e9 uuid:18317BB61454DD11B072AAB0678C6EC0 uuid:33F867AF77B0DD118BB88B63F587CB88 uuid:AEB72E0F065BE21190E6A53B8DEAD2D4 uuid:BAF36C8477B0DD118BB88B63F587CB88 xmp.did:018011740720681183D1B7155E0063D6 xmp.did:0280117407206811822A8DD347035589 xmp.did:0280117407206811822AE41C914C1686 xmp.did:04157CAC262D11E58547B515CFE93C26 xmp.did:058011740720681183D18FFDC0EE7A2A xmp.did:07D64A4A80BEE511850C97A9C358DB5D xmp.did:0880117407206811822A9D48829E614E xmp.did:09F9F4BF4EABE211B304C27C3A7348DE xmp.did:1ABC1A91C930E3119FEDA52BE0ECF468 xmp.did:210df20c-2bdc-a245-8468-bb2373d445e4 xmp.did:271790e7-c17b-2045-8d0f-fcc48173fd2f xmp.did:291f6c60-43a0-aa47-aac8-9ee6d6689e03 xmp.did:2F4B4B4CE929E011A014897789896DBE xmp.did:33EBFD7C072068118083DCA71E68BBCE xmp.did:38ccb7d3-baa2-4d45-9022-17c1c8456f96 xmp.did:3B665E6D422EE21198B2FAEE9FB93FAD xmp.did:4B41B34A08206811822ACF19180E81B2 xmp.did:4c0383bf-ceee-2548-9da5-931b192dcbbd xmp.did:50dabc4a-2411-7f4f-9959-2a44c05ce311 xmp.did:5B5B472C08206811822ACB6E691C24FF xmp.did:5FA7C617ADCE11E49E7AF0F29752DE80 xmp.did:5FA7C61FADCE11E49E7AF0F29752DE80 xmp.did:5FD1E3FAADCE11E49E7AF0F29752DE80 xmp.did:60AC9636392911E396C9D7FB51F41FBF xmp.did:6588AB2708206811822AAE066D9BD385 xmp.did:67310723ADCF11E49BE6F9F1B1E4BE86 xmp.did:6B18ED2B09206811822AA56E3BF141E6 xmp.did:6fecbf38-97ef-49dc-9236-d7f74d6fd234 xmp.did:71CD42FF07206811822AECF9DD639D3E xmp.did:730c5884-6066-fe42-8417-0289b26a87af xmp.did:7623F5E469EF11E693D49CDFE8DC4142 xmp.did:7D04D006CF5EE211AAC2972AE1B78D81 xmp.did:7a34502e-468a-c741-b916-0a5833b37a15 xmp.did:847678728B30E011A851E97219B738EB xmp.did:879429ca-b04b-144a-88b5-dc4b560dc849 xmp.did:8CF1E12208206811822A846271F1967B xmp.did:8E73F883665DE511A04D991EFD9AD566 xmp.did:90EF34C5C84111E3B553CF8512AFA90D xmp.did:93F0067308206811822A8ACFDFF16C2A xmp.did:956ACC61C84111E3B553CF8512AFA90D xmp.did:95ED3A62C84111E3B553CF8512AFA90D xmp.did:983bac09-bf39-8045-bf6e-6254de390d83 xmp.did:98a7ecab-ff62-f04d-97f1-d09506489261 xmp.did:A35C883921A8E211B1F1F4EE24B0D37A xmp.did:C073799A07206811808382444E3CD50D xmp.did:C0F85CE7AB39E21195FEBBF63031080C xmp.did:C473799A07206811808382444E3CD50D xmp.did:C92518F2EAF011E2A1B0C590D1E4749B xmp.did:D9D4CE3908206811822AA56E3BF141E6 xmp.did:E3D8EF35646F11E2B4C5B0E48626874B xmp.did:EBD9C7450A206811822ABB58BDE15284 xmp.did:F2DF51DC072068118083B3CB38A72423 xmp.did:ac392b14-21a5-3244-9067-cf8102e47a14 xmp.did:aceb1982-7525-a94b-916e-d19cb60bbbb0 xmp.did:b0e9bea9-1df3-f94b-bda9-dbe6e16b97dc xmp.did:c0018f82-4194-cf42-aec7-e9281d5f8c7d xmp.did:c7210d8a-526e-f841-9325-7305615e29cc xmp.did:d337ca5a-de17-ce40-9f65-47f9a3332a50 xmp.did:d829aad8-4e14-3d47-af9a-65103f51b1b5 xmp.did:f154d5ed-58a6-4231-a61e-0d7f3718c019 xmp.did:f4e274f8-93cc-874b-8407-5432174b5893 xmp.did:f8230346-b777-4575-a8c1-44248ca36c28 xmp.did:fc7a3868-622f-d841-aa8f-b946306700e0 xmp.did:fe943ebe-7e53-4c41-912f-141b4c594374 CC  \  !"1v 78ATWa#2Q49qw$3BSr6:Rbcxy%&(Ds R !1AQ"Raqrt24567SU#3B$bCdsDT ?dg\:*r fĜLpc᫝bLcli76ܴmbYj::Ąp 6O>?+ߡ_~:ON woΠr|Q?+ߡ_~:vON c:G S~}U?;'qfW'J,MmT9=\y(7WߎSwoΠr|Q?+ߡ_~:vON c:G S~}U?;'qfW'J,MmT9=\y(7WߎSwoΠr|Q?+ߡ_~:vON c:G S~}U?;'qfW'J,MmT9=\y(7WߎSwoΠr|Q?+ߡ_~:vON c:G S~}U?;'qfW'J,MmT9=\y(7WߎSwoΠr|Q?+ߡ_~:vON c:G S~}U?;'qfW'J,MmT9=\y(7WߎSwoΠr|Q?+ߡ_~:vON c:G S~}U?;'qfW'J,MmT9=\y(7WߎSwoΠr|Q?+ߡ_~:vON c:G S~}U?;'qfW'J,MmT9=\y(7WߎSwoΠr|T][6 o 2͵25W"w@gE쇘z|uq 2 G2{P,_E<}cwaeD]X蚗 ou ?xj4^q,gfS!lE"4Dh#DP.;7+YnF#[ӯKU"ǮyupVRMAG5_F>Řbjyڄ-DF"4DhgW;3""4Dh#DF"4Dh#DF"4Dh%Ч?eޫo1rNVta=s˫ ou ?xj4^q,gfS!lE"4Dh#D\Dp/[w;VH1Ͷ\>m;XZ0)e#VbDY$\*@D䃇_k*qϹ*e:u&a8rUI= "m8lŒ]\vY w:ʱL:mXBhrt*="ASH$LWw+kX2ӎ2n.no91oP24Svg;g=X,Sr+ȷEg.VIvwPE9# P',TEf`k/aq7 ]7h- &b4DsxWP۷dLqvM{] q =1 B9#DF"_YBP/*U|c8w FY2@V;,??Oʱ?t<9m$cݶ~b匜>鏤zWk 5.9?~CQlhY/֧B؊4Dh#DFise}޷+-!J[JS!/v6Lt <;^%/cW%MPU@*i>*Oy7Ɍ(< `68JrUҫψn>0{mX/SRnPYf͖"N'P!Dޟ(;a;N<(@[~nʪ 2Q 7$II"@ð"Ud.vVtޡ!$ 9 !aː芻V38&2%_m/8t,0P1ʠ7n+Hɑ'1 $N'iUශYSrM`DRjFd_,q-ESnE[v (J3|yTa" Þ{O sIe8(ʞ((r.O ɧ5mþ&M3̥rD]&";O ɧD^G1 V d显j dT:GF!L"^L} z]꿖i,diL}&c<+XIpQfEb~Fl1FoGb*E##ԏ,)"fQi(Mu2E'Q8|\ID./UV#T*&fq&Zv[uKmq+]YhMC6M AC&oH\>̲CGf(L.؅ mwX\9Sݯk䁥\L &"lR&滄q:kZ:18Zn D$a@ b5yPVHJ٣beȿ9Dnc`"Sx"״@<lO$-kH 8tE+edyqP(%I+]C_WQG]^=n[N~OmZzom8,ۉ nȔEvI[kqq9:TSt*PM" RM:&mI.xDLr p6!o& sg djǛqYI.ylrg G9~Ă9*JG !5e<}hon e\ŅS|{"wn _:GH[aw]#_e6v>㴬E2pW,P&Id NTK_J#:HW*(_OZH sq.}|[H(evfv vp&%1L'=QsXb8Rq#[<{ű6GRL8;@n%xVH;3,k !\Fli2R,gF[Ep.;^AMWEW(g-*&rr@0 ux7p6 7`ܵdѳϗn؈S@<Myhע/EE5UB$DUCLf1>""?EfHԦ QW%k2JϠDT1UUۈ3cG)0}U%]C+trs;@#u-"4Dh0PGDKO_~˽Wc>匜>鏤zWk 5.9?~CQlhY/֧B؊4Dh#DK/w{5R*eTyŹ/t5,Q1o[J. rj%.){{S,QUW)"sX]0e3Z{+p:Sa3M=C ncc~X,/s/n9@dfݾH-Рi88!5YW1cPL)$ M=;':2 $8*e8T(5)@|8y9Ͻx/n^qT,mj[R8\lFVQgꌒr4:8#c*^->6D;H<@= _`U`Pp9Dt5`7Z,GO5Sʎ?_,ey*q9h녅uGRxYr$#-$+$d*V)9/N)(}0 ho 9+; ˸3b%96&)HKY,R(GX"2vàKâW 1ጵW]-dPh(4k['u+1R!hpĐWfcZ$c ggiD=ȉ|^jR7ݿv٩ih6˯][ZoLl1vir^BzREv9ZDAd̑d19 u#E_|̕m =%"ݪbT3 Kv5%xZ4-}k#DFٟD?٢%Ч?eޫo1rNVta=s˫ ou ?xj4^q,gfS!lE"4Dh(7N1U dt$]Rol74T"H=dǘ>v<6xp^'UbTD c7+9an5vxrNPgfޮZłT*&D SG)8W(ʺ`n!N35gpz8ʘn{eŶ[y-j2wnJR5Fhv$lEUJV*^tT{k;{jM[1zYq߆7լb^M}hnub2*%>rԖ Ee^*Ȳ*@icK5J>wjid\oF+kitj"m\Qw!P t%,F& 1tJ؉ɭ #wґHWPYq,%\S-o NJ S<8%NE hovo9p{G{}O^`UԢmp}r=PKU;% JFDDEMW5(sciЮX>aİF !k㑡u\\t!v3'k:c"O=\!Uf%ܨg .ɂ*&P9M]U4ſ6y}+5cbm݈06;٭Ł-+pۮ0S/Onq̦(no TqadSAFX")*b()d1D!L kgl'Bb@yFٿtP7߹yĭ} O%ϗ!2mG$ޱs$N6JoutS?YʙyDzL"/.Q)n,7omw7QSCJ l(Zt):l^CIqpHf1ɈT'Ic)W<.C5 wtNege9] i2B烡whj>Yd?NqAdZY%VFXAGZ@r EA@d}QWiĢ at-sX .6- ySiW/j&.HBb/jΪW tSb3bMM Q1HA(8+]͗qrfZbvGjx7~\GNM.Vg~YarA%]T"eQITDR&L`'R %U*js%hOF4Ӳ(ba9 :\ %q6 ؾ FDh1NHr7Y.-̨DSD&: 11K4fl% X*3+g !kdk\540 j%ܸ}Bۖ1j\N:N}i5-2+;H81a9ΠQ21c\U#9g|o>bـFjZF%Ik atQh#DZlchS蟲UOc'+Oc0ZMK7OP[5}/8c3a3uj""4Dh#DF"4Dh#D_D:'*Jb0*8 dtDh#DF|\lɳ ѣDӧ*͓Lc R0wTEm c?+[gSɭ ޫ2:KwHlW|t1j 34D'-fǮyupVRMAG5_F>Řbjyڄ-DF.ܒ/" l)A(~(oz4E4##~|Ey` b _ aDh#DF"4Dh蒧DQ3 LQ"?M9,P󆈲:"B֢$l9 ;3K%"]˕LTL&9匜>鏤zWk 5.9?~CQlhY/֧B؊4EbGrL n tʒE󎈾"4Dz}:"e"z7/Q0#DF"4Ed Bt-::r b`0FQFU0M!@*::HGj E쬮5q+3rdI9&lpTQ0PT8&s s!-DKgwOrUpm׶kܵ΁+;tlt-ZDEF.夗d (u":G9"6vC3biKt'[1ڳWњ]g2Leb#[EdgwK0"sw+-n3(XtJGϝnգFʸtuQnݪ:ˮ$!rH$(w̬TNĺ$^qqHp2WBFx}aZXH{˳WȸA!֓tN١JTl4\".u<yYJIs3z*iwsX\wBtD[WQS vʔrr Њ ȑTS2$nb>^s?@zLԑ7J>"Rwq41[vtbR')* * UECEoids{)),k4„q?k~MG)JA7BI$I7APA$PE$Eq 7Wg)\1 aϞ6w9yO@7=qEpaJ,+I!'6jQxhE4;7D_l1lYq 4s s;%ȮUKזvے"h2,K$Il,Ly%'s#՜,tT^ԩzG!";dzܑEcP醈x%ec _Hh)I'DcE@!J"cx5{.OJ15h.so$۾*W۞OsVEl4F9"dǧ .!H#p6$&:rctṈjW:I`t1F=;~pNy65aE,Jͽ" &;eUP`UC9DD5F+C.˓qWgoihI1EhT$HKsxs *ꊲ RqѮpٍ,yqs=hqx'=tsKԼ{vg8(1("LM 0_= <$uA^1ʵ|ݲ< [9)B9*&`"qFhnMgvOl6b~6 XFfǴ+5)VUS)t:rhAVYO141JE^vy3`H pUühhX""[*&̝*jC.̊n̯]L@?q4$D{#gFTٮA)Y7rUDT|$[D]hՃ(K5#ٶnPE@M2B(D[&few p^䫼fG_ѵsȶN=]×u匜>鏤zWk 5+yLs~ EWѢ1"&2@/u[_]"4Ew+(&QQ:Xy"؇*Eӛ_~l o5C"fZ #kV7 LqEHT +7IAC 7#%p+94w+3إUi` # _ DDhPH`{x0#,Q:+!LS|@ĪUpg F$ogE iATuFrL:2._95(TI0Yk6,<`SeKn8okx$7xW!􅒹ar!4&̣GʡޤpIp1G)3s.d0Iqn=+\{t 03:zY`0=ts-A[cu۹NHܩ/5$]^Ĭ @y2QEB$:iDf騆ǔ]¶]c&Kh;D9лvgp{isZMAJ0e&bc"7̜ K&p0Ůǩ!׍izw/#3QR&hcvC(5ĆCHx.c/r\{hW1e&cVQRM&'ɐD'-fǮyupVp~oi$^wgfSַIWvh:وz#͕]@@89L P5[Uo7eigtwxj^B8  瑋*oܬRJr*T^5T=)ȥ8 d}2LG= z*-ǟB&b("BbȢ˶ (gViǵ Y&TUuRF\1 qYQx1LOplVQ4M/{> <=\A@ڠ[fFrbqfE)lsU95laQrX+KSm4uF5Ák"*PtY'ȁaqՆD?4H1q,4WDEN}"UwDFSJ9Cb((yTH(:I(7(_N?DQ\LYGHUY6v6W9EՉ&-sG#_ :n*Px>Jis]7xb 쑎oVĹW=JS*ޔq!(gDEV='I3|ΡSL;sX}8{_`>Iyr M6#Rcas˾N>76Abw9VsdY1NeL<2s6x᝭3à4lxmrR\tA`(NP2,BZnA7"\+18ϸ+a{ 1ŜNV2F[ݠ$i+ٛURv$nC/08芓{rUʍjsnC+1c֛D](J=@rTEPD{r)J591n۫`T-M516'5[o$)}o*1sd|L8Zg}([2,_3:yeوr+ 4iopwXC-e\0oA8λ9[df|ٗn M?ZUZIcQ䀃Lb=WD TW]bZ !79>Na󪜸NKf c"wc nvGi]CZT\kHx Lb!7P $#)Jm@;[.*:qhkZ/v/B[C-`Ko0neӱAoGcJ4lbK'K;895E˒qCH8܆jNXg66$JTh (Lү@!&S3Ч?eޫo1rNVta=s˫u}EO"f?#?7ZƠb*߱D rY2ZJmr'wW=Lg*K W]8k<;NG<Ć"DVP:\0!CB4!ClF$+F ցH@{J JQ(wԫ/2Ϭ_W,,3&d[Ue&ؾ]5e6/Uj6X$oAw%r "!9ؼLr6wY4pBhЧ2ZLyꙋUi؁mBn6W{a1eQk!s!I 0 c6N)@Weܲk#u2JQV,oQ4}Wy&4r֏nkdzAD1AE}Ṽ_ȻAĔFBSPvZs6BZ%eo]Ve %Pee_AIKҡDHވU Wljz LB`y(5lM:N~i2)A3SĜRMVP=L8 P9DX<Չ s5 4L5$JyYHf1LCE12g(U GJ笛gU1Yd n蝥#Piƒ^v@ۭ.?9d dL)"gX|1^̠S9L&.j е6ۀX-mm,f\S&,RoBuw?H@$iiX?lO\΁%rR ?d¡P@LsHRG1,RlEZlcX&ʩ&wUb5.6s6hTxwBݽӰ4 5IHareB'%'*p("KEN`Y|m튽%UX^ megckQ!^J.eU(AwFQ@/W/ N:"4E꼲.rJ)QkMMI_:&kn EFBIfL7nL s81 rj"pCLQ"Z%֑(s]/EUn;XMB?F甛 ̄>ߣ_WWQ|:XdFq5}G|Jdػ.[seqi k+_i g"w}պhvQz>r˘uMGIn$up* ׫Zڴ46{\ۤ\A'9!P!Q9sH@"">ߢ*J\َ.ʢX-^$v7B((Ĭ@/hܛvML"Wv<ȣhvq1)Ow[yܱ1}\a&g*ghQ|HqY/֧:؊4cճ=`wR6n!r$"ݲ!/ " @R,F1f,%ts$Ni&lE8x)HD<4E\w_܄$&/L;]gqܝnI{jnH' Ҥ]2ûu=Gp#O6_Յ^IOKHtRӺ-]G"䓥mOq-d'p nyBzB!x8*X(&S81p&(rTgC+_CYKNo&yBضqQY4*vacG8<annE OUfTS`IUݼL;jcr257!#Gb{jcl^{n6cXHd_l(jՋFc a ݲypV"4DhKR]PhwLľ,^",*\&Cy.]?EZѕ,A#[Jg\GWUK#tLu@C邌]""p.$ƖX-*, *o$`@#s9h ?Z"e/]zX\rG ҈Z"rqt.EUX3tTv+rhER,%*K%jtNB=򦔓f-vn L(s F-{Ɵ?ml_T߆NLSI }< XZo݅bg|cڪs9?Je1|"\W-y@mz^.0 !"Ԁ=@[s*Q.`HbB)NNн "|1)Ow[yܱ1}\a&g*ghQ|HqY/֧:؊4E\2%px96YUhv.NBDϘ v9 VȰ(^2~=7ehV5:AD P^:"$AҔ#چ2YV .eP9WL^qy0E$A֖g zD'˴ȕ-Lr(v:&MELcI.SE"(U0`!-̓'bO󆈲"4E^zh3R +U Bd-0i‘h0uz:(hFjMPawh9gGAwPYmOdWHRF2An$xgB:L:"T" }ڠA9ue#+4riQj!PD m9 a)ɋ]jݒ,GlR4-5gȜlJ%M%C+U A#7%PE7, $n?DZ~h6kø|}PjzքdDknbɛDbk*%6 "VpЏ$TrXfh-3v}>@Tb# 2G DQ.\u匜>鏤zWk 79W;G&柢E{~Fl1Fo?AWUSDQCHP":",c,陑r(Y I^StrcycXCo&LZJt@z@Lc011c9Lc0a橵$%wEWKMqP&G(q\j""ٴDh TLSys`7 C'CD_MZj2xڻhj% $Q50 LSDSh \m ^dST4zQq1 JB0sGDYMb' lYa",0LCFZ5rJbJb"P {Xcɤlc6Ʉ{hɒ)H@(JRhբ#DXI@H ssP|pDZ~hWc/!9a> )E$%dP&dL ri"Hh`I$@M$P)JP"E䐏`*U986jF6#,AMdD$Q5c8 LSƕ9 % ֏3=%fiKMdΊڼp)#&F4dD)@R#DK牏O_~˽Wc>匜>鏤zWk 5ngrtJbfEb~Fl1Fo>OuBVL~be|DF"4Dh TLSy6xUy?"h#DF`e% A9gDZ~h#DF"4Dh%Ч?eޫo1rNVta=s˫ ou ?xj4^q,gfS!lE"4Dh6dXbx}+h9e1=݇1=ҴZ-s']r*jtX%z"fGv8g[0+Sϰ,{H)fwɽi%"$l))φx<:\j6fhE22PPVn*ԯD.HL$n'⃎^د<#lT Rݎ8d,A6Y7+T`.(ubqH$vL~bY&n; 1Ɔ$GPv9*/ `Dn7InQ)J'NHFrpnvl<3U!MjF Pss*;?8r6]by-;\15p\*[4s&uD '( 02r&v)XuۂMaͥIvѫJEABU]3;LP7x1ت8!:}o^ka4]u嗭XaߦSdؙ7"eo;n]mWgIdQiD xY ]G +d9)㜦Q3&Qݸ], pV/͓Pkٽ*uݷlK4]5ҮE9Gėpˡ|C/`D(O嚽z;]@F5dˤzDX co#8hۢmkeR,JLE1:9^E#nU68^zwHZcTR%<0H2`Α"ӳxcß} ow74:R(O1]62ilʏ 7lBEg<))$F8r\:7و00Q5e"*|mnW g7  =hs"`86`L^\qo!YGuӽI XDS&;UކװN]`klkB n(G9"4Dx'-fǮyupVRMAG5_F>Řbjyڄ-DF"i+/mPwn.iT$|@n`O77â+_7`_ wO5(]аn=VW%V5 GF*$Ȓ!ݕ7AyRۊv;쏸{Frn2Sw[ \4C">=(d ']102.=Zn)3 9b Q^>Y%OQ}JH!XK@"Uӕ͠O`nbQR#Ow_?a ݼ-}$I{[a2[Dȫ,-#f>b/8G>v]+ndVl?QhVhʝB)Uq=Ȫ);~K=p31>o6 qJ2{[*U R\do75eާ=U;CGHXzaHGy.BELT1ܷh[ŷ 84,ҁ %9aPq'?,>gP" fN7!FD/E`-q*~άӬ0)rOxoأhK_DJq7Zt;7OdýR؞X٠hVruB_(\uD]0`?ϴDtDh%Ч?eޫo1rNVta=s˫ ou ?xj4^q,gfS!lE"4Dh&7$g,{]ne/`HH8Qӧݼ/Z@( +x\lmsϵ՜jϒwpôd5GVn;P;“*10\T">."nS")w-msi* nT[[iHI(#O-ژd?flL8m:Ů!Lj6NyN lDJGdWuS)@ gT<@P,cXlb5fqN>:hX$HH&XE2em|#q1Qb'FZ⛻lhHä{Y09r*I(;=[n-~(-BGXaaa+ǸAe FR10b^v;%È Ѱ3 e~@J XD !wٸUEv7a`- ^ml/nb3sfSDR.;{.jWV<9d*TڪX@ʜzPM"4Dh|1)Ow[yܱ1}\a&›G'(j-}1[F"4Dh#DF"4Dh#DF"4Dh(k0n `N.Fe6ZTJ. #ϗx)>Zə8I4Yb.{ER.YDMc݂m0QpV867uO??f&1M&)6!5 KA$o _ tBgהoJ mV@re啑EFnLQ"M"82#8ˏRR`,FԥSpZ8M| %6t4ȿ`6ɽ-py6tJ~٫kSUff@H`UCGQ}Zq.s,`/vŖXX-ѽv ;yi]q+MmGIHPRokd&dv9AJQS :b6of'<ɹi٧f\[#`$:/{YsyDt೶t7vu\s杶0WHC֊HD%TBMUQ`]mOy-lF`Et`xkyk;bOƻਫ਼1!C!cɶ}+'hDl'2Dv\y0)\/`{*;Sg{{C 8546()fe>tPnX"Z4ܤ&AA @Gp1F Vg8hhUk:f8qvG |aW֫]ma=mLٳәM X1KcH.fuݎ ;o)USP Hk4?0OTUe&u2@V\+Qڬ+g̕X+YERN%M295V-8^N8&d)#Tw16Bmr듻2BlLT7IJG!"'DJET a@ᮗUI=lgrG͇Lr.W̓ AG?u޿(~]65 Vk[E˹a~I~˯sش>nqsOf|o{vuPM. nràn\L|>$)ę:aiVۈw8y\hmWv3?VF-qk7i')\"MC'P%C!pVv 2d|KeC&" b n-$ou1!IB*fZ oZO0$ZE6NF:A2A0z/mb|.H<ۦsǢf@~Z2vBvһhwIƽ'vWL!9D<5ɼVcrDƱjkk. UOb qb ;@JZ&if ,~.wꜜ^@gu3tY'>%U٩D&ksYM6%/۬c}]v,M($n˿[aT\˜UHKv @TD~5y9Il2m.2LAy6Jy,[%<>cIwbn!f Զgl- e*ԃj\n C߸rNP7@`\W'mk" 8CKek\"kd ZqOi)0M#JؤlڥK8vQ򉪱f@˒-Ba$aksm`Ӹ6 hQ۬n&>=~.^Y4r>]\$ԸS{PQ EWѢf?#?7ZV.oeNnɏJC~P2#ڶG4;k?Aru76s$C:ojPMiP> )jYͩ=/OSħ/>-;Sm.EdkU6і1Fv ȑ 2 &f)t9 ƉKVژmc}el=f\gKoi/-pmƤ=o_i{ȐgJTccm{#H$WhqXHb9î0To{}5e×LvP<ֱ<@7s}BgJJkr9Yj.AW GS~Iʯ^ѿ{Gqڞ8 ljpq kB"F/CT+ ZJ5x='+?@e 6_>/T"P4AN@oݖlEQg ڛ邍8Asx/̌`RPuKdFɢ[Ò 7M7k9P]_8y/@)Y'd~^FN6ՍO|u%mSaʻv%'"u/~Bl757כ/+7ĪN"  ƃĪx *P H͙>~f艈S`*czC=Rq(6-$Mp˸(ovS@GeV6!m@+5C |]"(+{t٪DUioU#c."w*n5(g\+]4LMRd)@מ A+fefl/ k$ 76&P'FsP~a uCI b#?mRV?Ex׼ ܡ?c:?LE= U~ AE*M?v͔Sv+RM"5:=#s9c-p`I%͍k#7蝎M8>S_J!1JVBH3vѩ%A{^eD5l ]e*f.V8e1kGޝ.%Zzc|Q3+Z BĔ[G|)vUCHz>l.U^;g O/|)!&OF#aW]NX{t˾/@ڰ 㗏1{̶s۳6/M s^'iy's:'6emO^zlqs]UUI|hU̬^GE!);)m?`e!,/`W7L27IGMd`j/TYD&T#Njً#ʊR98GYU6 dKJ*gxN}ƑdleMFȚX^qMZa5VR,=r@G*)M4R!\vNpt'7%C" k1zVcԔbZXrҫFNf5Nit ؠR PMVi7+)y-f*ϔq@eZoi}A;󹶽 0O9S*&beeR_XΧ{>Lc[$p˓`D?uʳ3b8ZòV w-Hd ;׸n#P]Ax'-fǮyupVRMAG5_F>ŘbjtwʣkFz4Tne"fg9@~!Q#dJRET,s\?H>W |}oQ 9 \S:Qf-]Gr/+ U g `H }MhN'Zmw9_d}9RJ88 n;q~M&9vㄬmXS>>zuH?]j&ȍDdAS=HUE u /sqouirqt4|앚y[Yn77!Jp) L)DϥG0pꯙܧ[k&Ib4eaql}#ߴDZm5ElM1m"[&9ܢP =R4b6up>U!`{;k0 ō/bp]a]7Ŵz.4{ ӛUlJ]ZưAc. >p"1V(;Wo*ljRm1E'r׆=V߼)V= mfc;H%&$Xp+H>'F5ɃHbeKӉ[گz92&:Kn. zц8usQ,UVųBlPGY+g1{@a(: C/iH-Qܼ$髲 G\^ֳ#qԅR\/Ƞd@ENX)9`F0yLNa=A赺U=b/Gؐ5px- n9\)q.JǛp-̣0&ye>t>/< V( h9ږa+t[SUxy6jky.q5:n)q|͏fE}*mvf+cILnhPC*T!Dul},fTՎ-6`I8v2kNNJ s7 核ksmLXNe5C{v]z52n;L>rr8{< %5Mc_¡N-|~=WʣY]e\>5#'Ȱ'G"ۄtP@KC>`:^$RPG3| 1NtP Ɛ 6bݮ!77Dfz܌ 6A7uUP!LcD@5,~gTu4kEN7'uo< 5<"׳dumOx;ImUqM $WA|YEdV9E00k5pXelhϯ)'5婣LA\+clh@gK1w3BXfmtv9s7/Fq2>z^})"צڴkuik HC\ioHmx.Eݝ#VU CzCy }:[{-ḤU^zL*hwk?XkG=On`߶j[<"ąjB6Y4UvΙ!=&AuiV{m2R2OC\׏,WNWhoP͒Q7oj ,Bq0H:"N\%"ETʠC@ u~pkS^PX]^Uc! `Dc䖉C8PȎiɏ7+:H ^_15w']8ƖJ}%؀%i= ^!JJWPy:hTLKaq9btn_QI(!n| v/cF;a2@A G4wj]ʳ52]R ^fa $UQPy DJ`! SZ 1B1ܭ>鏤zWk 5.9?~CQlhY/֧B؊᯶ m?křcd|+zvMD^L%MDGB zebxt$ܱߤXyKw6Xl4æ(Xa+70MWFj2ICx=0RtN%9m mj;8MxVj2,n@NASw+r@eL B! BHJ;-Cgs+ecx=VkqYs'&h&7[a* "kUDR3}r#@LaHLR;i+hx3l|uGO|vJ3m;ٶNEzؐq(RC`"89 yxՎdao/WMcLt :{?Fܟ9 m{2XJMX^TQQD9\RZ)JRBTTU!w\<@+ecX=XkIK;0n77+e˘{ 0˔đSHOԓ THrn9L̦fA,.?.;j]Jcyp=Ry `H\"f3E(ULcuf:9']*mcâ'7 :&;fB/j̜]GL̂sw%HMڠc t"h$'h*tKLjL T/2gT^Bܨ<v4́ 56V\^1è@dt )C DyC,WF+?bMV SGF"7 5wT>#y"'(f[CSQ3CEèѫɨn(+ K DL "n!pQm6i餅bfdv5 Mhņ`*wh(ېXu?*W?]m/L*Y":b.TdEtq:zqvnU^s&0A{&~ˣVr{v6o}ֺx9Gj&W @YPO ^`[dJ\:Mlxlxmvo{PJ5,n{r-"b=:BEk^$MDΡ` _,N~r^g`<Jt\ 7 4,s_Kcp'b;s$-ѽR޶(o4B$!Iȕ1q? WrY ,qԮ,,:7w5ᬕ/t>G٥ )VK_ŕR5n;[}5vIG*ED{uXJ>(Z2*"VĺmRڲ"YH(RvbnJ`)Dy\ϵj#c`ik#=uYVZnc[zܬE%EU4]R:bH2M``;dħ( p%-m_4l/L׹i^q&o[_U_j8IH[}EhD>鏤zWk ]N}Vd~99bIq uS/I|~ Q1>|BG s,췲~̢SЈؘuoͰ>D<[nIZw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,TyNL]4goY'u| RGm?U~sNqw\,UT<;0蔄.)N r {(\zX^A`-e gglF+1}]dC2g9?Z,}7-)JDF"4Dh#DF"4Dh#DF"4Dh#DF"4Dh/PK!ttimages/2AInIn200x250.jpgnu[JFIFHH"ExifMM*bj(1r2iHHAdobe Photoshop 23.3 (Windows)2022:08:17 18:56:15"*(2!HHJFIFHHC    ""C  " U !1A"Qaq#2RUBb$%35CST&46DEFcdr4 !12AQa"qR$3Sb ?HՅdc dljq“ YJ@뷮DrI*s sj`; h)r Y=k,oHn8!)ZRƯߕ'yZ mMg[2za[P8'RF06+ZI tc !!Ylm%8U`3OΟvv01H\xsp<5W,AKhBO|yhV uPP GAIP'C;f,>(pƪMi,8TXVXd+]FGQ padhq*ZHRV؏)#QIiGp@O=[_7mqY!(BR:힑\F[u.P r I)ʏrʀ@7B!'*X2$dp~QAV}!˲k B5g^8M iv;`uտ&>tp{/F0efZ*po - NwI0vT jI->i'q,G{VӜ_vp@\ABIOK%LS(tUďr5) zDv_2:>Ѹį!jZ򢵫*Q;P 1OqbuivДtT1UA3p]s[(by엛7 tx}(ħ-)LOTԽäQmq(,WюdcQ0zt$,e"͗$[\YN,xT&))‚v6;Ґ+DWƐ1?3l}"wg_jZY2I*Rv+,K+JYtYOKLꓳL,PKt2G5)gR2RZID?=R7 `gFq iVrh}\hVCRT)>r;N4"<ܴm JmJldKReKOA8nOt:xB/ >4֩o4%w@qP|3 )!=lp ;$hU7{hv3_gY)E*+Cl$i2,˰@LNuF9rBAܨ'?9'.D_-n!8ĭjY-1E^V'㘂B=PJ F$쏖,##'o:Sda]NL(188p˥((HIH}qzRJvII'=3-hV|d/ gil㝑^5$q=='\ЭjRR}rN1Uu)EyOBFpAɶ[%^O;%S^I؃*Fw9].Eû'S\Si 'NЋeTk Lp8u.DzI:UABr\?yU}MQ)VOVњqtR>d8csJ%_ >?\3 X(ӕz3+x',&Dp}>PLNog.w\M2:˧r9~hv?/8UvPr:m1Bӑ.(*Ī}rdƆ%tr`b3YqKHB^I%[cqF"IK7 eS8z9;s Cj)JSS QFB*vzej $>bpPTeI } a.s]Ӥ1޶U:Z25s9i0YvSӤiI`qKcҟ-ԬtS2:J㍭kZܨ;tjt:]d7u1$bZu-z7Z`q}vtާ*RE qIl^N59MN,S$l| A.[YITXť„3V/;>We%PH8Nm!r;ṶskIuo4'Yf(J(aL-x+ YF7`)rU9)ydr%)eIqIHH)OhM/)7Tmʶ?Sa_ Zjzt ɟR&iJ ii凒X܌t7Ď"攪*̲̌fP-, $8iM$%YU>]yHJXRK$%XVIbz}=cI)8Pcm:Bu=M (uRʦ8Tp;N-j:ո,'7 ׌nxpIzѪ;'G 4į 8'0/+X(qM湎8tSVFza kIm؎0Lړs;KI 0=NaJl(Wϭ!IaCq7lϱ uBS!!{ћ%q'J{JTZ ܧNz|!!IfNЎѻ&}x[/%90 u>'B ;+/ķ 3?m.ssFq6򉣸O8P)鍈99ZTt}Ў0q;&UM"2d#nnkᖸTy 72R 8"+ܟ Nku iL>`pTH+ q.^2E*#cic͏'HoIRMYN!M[($<}mX>L)#ŠPI!ВzAb>g ɗ iT G-#lp# 5JI?j Z*=F.L*CJP,'v1lTUgNN1`m}ʓ'HNhD+=dF@: ǥڈ[e$yЂz1Ii $Be:L=\lcpFNe$dT!wBfҥz#IRUN1t\3]zI% jJ@ .En ZmjMMvδ:OEU'kjiSIZ(%`p[4H!ia: m:HӤ%YĮ=6ێ 9.(;)YTS?F"tR۪9=<~Xεŷ,)٪ctfgAbR10Mԝ?cPԗOI=¹}ԤClV~s S?%w0havԿ-ұ6RH?0.}ыıS/oj &bF*o8@2"FᵆJ]65TĒVWJ.I[-(qj?;7S[)aS59ҭA>G_#&_C;N_{BڿĊ>;Kk{8Krƾk{lD[v%yt)gD|}G-*ҾN"*Kq1ML4̜! Jp>O銼cŻuU ^`eFp{o={I!)3)D9T%R> H8`w=?\&] bs `u'l!%C 0v2$Y:;lcK$K79Z=S,~3:2oW|Okﭗfꗘ> үNHE.c}қ!Fmm%s!ÔgQ?i~ėwY1ODOEɩL펀Ǎǂ}>˳79B*2I~耸Ga?0/"JI.+8 *yGO.2=? FtsS)=TrTvIvͣ͞55;9NRns^:U:✐'dX ="Q`} Գ!<.>KV4R+[rVۿ[I'>o@h%A&ż%] R8ʕx%InTT4xI2?~]+ȩmS.\"5oH˗2)r`}30k첌|&ѣ8dJEz| `ӟ%?:_)@JiXH\>^'dP] qO%IRڜ-HYcVTܛL:\va%K=|( ` ]L9F5uB;nC\`:AMD`Pt7Nٴ/›C3*ss-XNq@=JwVR%O>R58 ]9hv*G*k:RA)xo`yDQd٬W%tgބ0QK Νm-ƞ\N]^!j*eX%.h`*(r,#bb(eTz"GWQCT?4"\kOݳƟOTi+VN\$6L8O{DZWs3bN1"XXR!X 9T)ԩWXjNs.܁r>BݭTUs]/?t[ jTFI$52@})V% 0%eT)Ծ唑ÅwɆ5.[m3==jӦf惔2ZN9;A]GގSܤVm]qҹE:TQ#7uیu"śRn^JuaI;E,]K&IVVa_ӍE&K8(+swoپ<3ES4L6cNqH#W;n vl眫"bFmSAX_?8ߦT'm{Kc3>ZMuK0l'A1 ^ZfgQqkI뫥4\C Y UNNNG;lեP˩T'6fUJ(VH9LI޲q뮰r!R Typ77%'$iՉZVawLQ<43;6:w:q&٪T3kVzEY TFA 6 RH=0O92Օ8ԣOXy\v:q`v!@q 0ˏMKuA);;8ס9/nUuVĉR% 9 LiYd9EN7i \ںu`C.MW; qtB5xW{\pӴi[V}b,%p0:D*FqX9S/:e\RΡИ x%P>YgJ*Q8Ʊ.;^Еz٩I"ˍ *㯗Q hӔi/:m ,B\WgH*a H\lHWUY>[ ;A?-.M02PuDmR,ق;MDq6Ljm]FZ߫²,0{oSh<i(+m>@e&ۨ4('J~ЬLmxIp2qJn)$:8 NXHʡr RМ`y1J,wS_7!fmITd,g% ,smuGFNyR9jQ Q՜a+:mN_Kr*sjT]V[Wo7(3.ۋRJCPԝ"+=Zj(XƗ=6ҩ BTF XU,V^T Nyg'_O۩[9eW$ge%V|-$l2r{B<;}ϘTࢍJM6馶5c 2w*#]U$q JiyZ13ƚˆ8rwK~m`dO]Ϭp8rAks+ϼ)֮Qاsps S@r"[>~qQ3vVrX˄!%D~w#5Îoׁd5/)Ľ-<\1#'xP%뵹oZH7V[}bJ0|EdO}<ܝ{̱mjRhPzza:9TI$f5DO#z%$%.Sӓ)Š~9F?'CM]f]ZDL()*֜DiS y]<3g~QdVoJ{ 6,ҟa[u'~pFgaS,K{^y a񔸉7l0˭ͤNвmۺT洚a:RBb#M8i5'244YU+/3}G.6sƱ)޷0du'YQRprL8u'V3aoۦ3#5/'i:o"˭\R *[RQ[ p(c|uLn,ӏ!m+Y @PQ:s]6;4Y #2vnJm DfBv]OԢ}\bR&œ()Y <8+|gc ^NuOTzũ.:{iI%%%^h&e)LZu |jQ5 ]9yrk?8+http://ns.adobe.com/xap/1.0/ 00599DEC88AFD379FB54D654052E077F 0533C6BB00C1DD6BE56630A08913300F 07B4A1C9A59F8A04ECD73B3CC65A3E5A 07C8D728849BB47DEDF47438AE70AC1A 07F797FD521C8DD086F0F358BCEE08EF 09338BC404BDADE129FA37EDED29BCFC 0A330ACF220D4EA0E1B1D1F3D2B75F41 0B232A9B543705AA6EBF28E2479EABF7 0C9D68DDECC11E309687458D26AE60F5 0E6A1F25F98CE4A295DAC86053184324 109C18F45EDD7A4A86F9BFFB29824D5E 10DD06585D77085BD5E50308FDA1E660 10FCDF3C0415B3BBB02CF44B90F8D6E3 15F5C1BC21D293A7E1606C8DEFA424A5 1C9B415BFE697A56AB15E9C5C54E66EF 1CD4715CE9F41C5226F72B06F2ED7A89 1E0D3A3664AF6C5118872A59BDBC8146 1E6DE62646E2E91A454FEE6E97019D45 1F906B9F3C6E9A171CFE065E311FF885 20F6CFA26CD259B52265DE5B3F2E0294 2A44994DBD012765BEAEEA8ABD86DCC9 2FA5E8F5326F31708F60CB8D600AC074 313C2BF86E68069C185A84BB4E6BA7CF 358793FB4E86B0250B5FA08309D41DAD 36A014AA999BED8A09BB533F4EC43A85 3799F4C7163D76C3DA6324A8FAA04600 41263266829E1239566974AB88D9F4EF 42B0B69FB747D73067ACFC5132936734 48DEBBDD8B33C2DD9A7A25ADBFC50680 496B88CE2DC1C02762A77BB29C5AE453 4C7F435012CEEFB47CF19EC51CE7BED6 51233FFC6B2DAD4925E7FDBD07FED17B 51E03AC9BB65DC1F81A921D46482BB9D 577825DFA9197C8AEEF425722E495160 5EA1625A59B681F8E073D3F857E692DC 633FA9BB7B1F38DD873ED7C726A1AE28 649A4B13862B00A4789791074EE35296 6622C1A46D811FCED9F2620FF55C5F9D 6F1C221EA45BB4B346560CD15B7E1C80 709B5863F703E74111CFE54C52CD999A 7271CE9E8BEF69D0E5CDD7C2DB2C7254 728266F8AEC2A5EE8F918D6C03B2E432 745908E89650661C6138EAAFD0352848 78BF03119D5981F65C7F86E5E4305874 7D00860DFA9D54E5EF76EA1393D19C9E 7DC7AC4900452A9D7F4F0EA671BB3C35 7F16352B7E51B6DD5CD845EFF625B774 821FB0C3C924EC1C20E6FB6B47CCF606 8B04A49A7246492C48E85C89421D1FCD 8B53BE27011F52B057145F409E5B2C08 8BC366704BE94D81770B780F6AC29C51 925443CDF0CB03A899D27BE493F7182F 9348A901E872E5AC7DC185E802C35ECC 94ABA1AD1AE5E9A3F941A9A92B2CAEED 9D821C050C851698D9809EFF53D41E5C A03F12CD155FAF177B16AE4A0D4F15BF A087F9BBFD4C5EBE646E5634A3C6A3DA A22C3C8E891C10162A4680CA76AAB20A A2715B60BBE9F657AE46AA13ED08CCFA A8173C13C8E4D90243766A5844D7638D A8AFACA68A8EB1B40C371E6DA55F6772 A8B8C7B75218C53F5B4646049328E604 A98D464C47BB8934BFCDC28A8A7B21EB AA13888C4B5642B2D390056898CD2A00 AD22F88623C86E8B60AA7D5C984F4495 B32311BC4735EEF2E24CDFFA26F69180 BB33B0F2103351BAD5C6FAE22D1FBE1A BE5BB085026CF96C471E5E45F8B7E0E1 BF20B595D2A13030D8B481BED6DB2DA3 BFC3BFF7799991D4D8BA1A379EF711A3 C044FDC16D26D2DB4B102D605650CB04 C48913A34CF0640C82E1A82A5E3606C5 C4D4746514D893F63ED7EA36056DE22D C5448739577CCEA0112756CFEC751C71 D1A187FC7CFFD8FE5F4213E9DA264FC7 D7AD019A48F23DBE01573C7A2535774F D9F2109FC65DB475968C2F3EEB43C173 DA45DE7D66FC34330EE2B3E3CB627AF9 EE0408E4BAE6E24F576267507289BD2F F4CD26396B32CE850AF735B5F4DF0BA0 F7121E962388DB88F30161D58D3060B4 F90FA269629778AFA723AE0E7375845D FD633D490470BF4D2621D477680439EC adobe:docid:photoshop:268e54d8-ad96-11e6-9875-c3ae9fe9b346 adobe:docid:photoshop:2a59b17c-dcc7-11e6-837e-9c42691083e8 adobe:docid:photoshop:2d0698d5-abdc-11e6-b149-85202e9dcfc7 adobe:docid:photoshop:4158b484-dcc7-11e6-837e-9c42691083e8 adobe:docid:photoshop:5558be49-dbce-1177-ab74-a19abbfe5183 adobe:docid:photoshop:5c2ada9e-c82a-4c42-a001-2938ef771d3c adobe:docid:photoshop:5dc8381b-9a4d-1842-beda-d4cdd957b27f adobe:docid:photoshop:6f08e69c-6f30-6345-a3b9-8ffcc31546ef adobe:docid:photoshop:73c10a4b-248b-f940-9f1f-dfe6ba72c230 adobe:docid:photoshop:86d125b8-f60e-8d45-843f-497b7a35c557 adobe:docid:photoshop:9175e5d5-82f4-9744-b09f-89bed622cc69 adobe:docid:photoshop:a1289762-4b71-fd4d-8a14-735ec142fc9f adobe:docid:photoshop:ac5278a4-e963-d744-bfaf-a0706f313565 adobe:docid:photoshop:c6f6e563-0a9d-f646-afc7-e48dc5531f11 adobe:docid:photoshop:d1283862-1d24-bb4c-bf20-bf6c6c671880 adobe:docid:photoshop:d7a30376-750f-a141-ae2c-7810495ce369 adobe:docid:photoshop:ec58a44f-900c-e34c-bb1f-fc2b0bdc11e9 uuid:18317BB61454DD11B072AAB0678C6EC0 uuid:33F867AF77B0DD118BB88B63F587CB88 uuid:AEB72E0F065BE21190E6A53B8DEAD2D4 uuid:BAF36C8477B0DD118BB88B63F587CB88 xmp.did:018011740720681183D1B7155E0063D6 xmp.did:0280117407206811822A8DD347035589 xmp.did:0280117407206811822AE41C914C1686 xmp.did:04157CAC262D11E58547B515CFE93C26 xmp.did:058011740720681183D18FFDC0EE7A2A xmp.did:07D64A4A80BEE511850C97A9C358DB5D xmp.did:0880117407206811822A9D48829E614E xmp.did:09F9F4BF4EABE211B304C27C3A7348DE xmp.did:1ABC1A91C930E3119FEDA52BE0ECF468 xmp.did:210df20c-2bdc-a245-8468-bb2373d445e4 xmp.did:271790e7-c17b-2045-8d0f-fcc48173fd2f xmp.did:291f6c60-43a0-aa47-aac8-9ee6d6689e03 xmp.did:2F4B4B4CE929E011A014897789896DBE xmp.did:33EBFD7C072068118083DCA71E68BBCE xmp.did:38ccb7d3-baa2-4d45-9022-17c1c8456f96 xmp.did:3B665E6D422EE21198B2FAEE9FB93FAD xmp.did:4B41B34A08206811822ACF19180E81B2 xmp.did:4c0383bf-ceee-2548-9da5-931b192dcbbd xmp.did:50dabc4a-2411-7f4f-9959-2a44c05ce311 xmp.did:5B5B472C08206811822ACB6E691C24FF xmp.did:5C81318856FD11E680B1BE05A91D299F xmp.did:5FA7C617ADCE11E49E7AF0F29752DE80 xmp.did:5FA7C61FADCE11E49E7AF0F29752DE80 xmp.did:5FD1E3FAADCE11E49E7AF0F29752DE80 xmp.did:60AC9636392911E396C9D7FB51F41FBF xmp.did:6588AB2708206811822AAE066D9BD385 xmp.did:67310723ADCF11E49BE6F9F1B1E4BE86 xmp.did:6B18ED2B09206811822AA56E3BF141E6 xmp.did:6fecbf38-97ef-49dc-9236-d7f74d6fd234 xmp.did:71CD42FF07206811822AECF9DD639D3E xmp.did:730c5884-6066-fe42-8417-0289b26a87af xmp.did:7623F5E469EF11E693D49CDFE8DC4142 xmp.did:7D04D006CF5EE211AAC2972AE1B78D81 xmp.did:7a34502e-468a-c741-b916-0a5833b37a15 xmp.did:847678728B30E011A851E97219B738EB xmp.did:879429ca-b04b-144a-88b5-dc4b560dc849 xmp.did:8CF1E12208206811822A846271F1967B xmp.did:8E73F883665DE511A04D991EFD9AD566 xmp.did:90EF34C5C84111E3B553CF8512AFA90D xmp.did:93F0067308206811822A8ACFDFF16C2A xmp.did:956ACC61C84111E3B553CF8512AFA90D xmp.did:95ED3A62C84111E3B553CF8512AFA90D xmp.did:983bac09-bf39-8045-bf6e-6254de390d83 xmp.did:98a7ecab-ff62-f04d-97f1-d09506489261 xmp.did:A35C883921A8E211B1F1F4EE24B0D37A xmp.did:C073799A07206811808382444E3CD50D xmp.did:C0F85CE7AB39E21195FEBBF63031080C xmp.did:C473799A07206811808382444E3CD50D xmp.did:C92518F2EAF011E2A1B0C590D1E4749B xmp.did:D9D4CE3908206811822AA56E3BF141E6 xmp.did:E3D8EF35646F11E2B4C5B0E48626874B xmp.did:EBD9C7450A206811822ABB58BDE15284 xmp.did:F2DF51DC072068118083B3CB38A72423 xmp.did:ac392b14-21a5-3244-9067-cf8102e47a14 xmp.did:aceb1982-7525-a94b-916e-d19cb60bbbb0 xmp.did:b0e9bea9-1df3-f94b-bda9-dbe6e16b97dc xmp.did:c0018f82-4194-cf42-aec7-e9281d5f8c7d xmp.did:c7210d8a-526e-f841-9325-7305615e29cc xmp.did:d337ca5a-de17-ce40-9f65-47f9a3332a50 xmp.did:d829aad8-4e14-3d47-af9a-65103f51b1b5 xmp.did:f154d5ed-58a6-4231-a61e-0d7f3718c019 xmp.did:f4e274f8-93cc-874b-8407-5432174b5893 xmp.did:f8230346-b777-4575-a8c1-44248ca36c28 xmp.did:fc7a3868-622f-d841-aa8f-b946306700e0 xmp.did:fe943ebe-7e53-4c41-912f-141b4c594374 +.Photoshop 3.08BIM8BIM%\/{gdպ8BIM: printOutputPstSboolInteenumInteImg printSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oGrn doub@oBl doub@oBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMHH8BIM&?8BIM 8BIM Z8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM 8BIM8BIM08BIM-D8BIM@@`9@8BIM8BIM_Ad type 2 (A) 250x250nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIML8BIM !,! Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?RDK})jBuw9SǷ';'| NN+!*$1o׿u.}J_VԲz_-xfQ~Ec=Ѻ=/FdOd>+X-<F#{T ,Ռ+7Ĵ~=;1SOܒ>4vO].gO5{ Zl;=DSUXE71Unn;,9kc~vF#M?iQkִ1ƴ@t5L&cJ[oqsR'h=jOu։{q0"Kk\ˋ}w#aǎ#TB~D&R㴦!%,`9O:m9IKuIOơ9 $gHg明uUqcu4éĠenٺ=~]-}"0qs_^ڿEEGE}z#V5Nݼz[zy_ZC#\ s23*V3z Gm8Gc}T534H5g~e沈޷3m?tNU85R܏];W?z~M~z&\\y3=ܵd[M.vʇ_ѥ;]!Y}_wѩ9 x]?qs6zJX~I~7V߫WOᶬs=Gc-.K)z/~0u:Zn73ckǮkɰ-/2ۿm Ϭ}zTAH?qW}\, Hsݬ3}{=dz~[/ıX:c~u~] C.m_Z32cEX7qQ~ QmWlFMz>C=.thI]uxO׊arR#nf 蘸.@MW^hslBX+7>;ՙhQC0kj5+ 3ɣ?higeU t?SD_' S ub'O |Lpkُ>}:ExǭUuY dYME&mkj=jjOaȕ ?SJpf89dn?)<.inut Z~4~9cP]v:[7~.[bc`Yu4b⌽(¶^M;cϲgUN<ޙVn ;Ds\ǵϡcU7IvOS.-3~M5qپ3%b)FS^ مK2Y.oxB^K7d[Y_zKzWCui˦W>q:{vMgz5m O 2+j]C+GCfOQZZky6fqS>쎇:֮S2^א,w=g+^M Yu<,WՑNom~6gu׳]_Ck>TWKHWk2vkmc:D9ST5 :]oum_[a{0-;4# }?{qKm$՞n7>ߵ:c6<6[n#[73_k/jo3s[*ӧšz66NWb?3NS/~^v?O^7팱=o/Gn}sese}'[ ÏzOk 6 k-N]U+N=t#:wٕ]T]hUux{zWzΫoיfOPﴃawyz=I{hua3w~oS/ zvy*:@E}DUG#?>> WG_IuvCﹳuEmvFe~Էvuh :εt}ѺKهu,ooѯBu:s1ri4NE.ǹ qZ-̖YEV?)3V埱*Ģk{DZ5Yk+_f?멤'q8vvCt2thU{gP]q6>{vlw7tuq 6)/eoln׹?Toms\15Ç~jVFr>Q`Wk~G(?Skvs"'xSwB<5?H͟wa>n>"W:?0N?` bt(|`LZ0uא?P﯒d Os9/$~hq.}9Ԁ<;F3^kIfܣ# c]nߝc'bęmů|&Bƒy:I5ŸM8+T&OŏSgϪ \p dxgS;3'}0|>Z`<y @vc*r2*se_s{[0)Mf)qDWH4׎;qb <ӟ-I;&"$qdI1ЈA׺c4珊%@D!IwC)H?O d  _ "?r'RiM;ޜ&NJq:Nu`R7h.{gAr#xƓs}[٣I=B%(r ~Σ[2k}k@l浿AWes?̌uً =x׼A'p-sǾkss챎{tVq!*=gA˰2?Pu%Y$b6_I/9:*Z{J6{>ėf[ԫ=;6Fs+k?GI ,u"8ӳ@jisks &#HcB_d|rM08D{CuIr dOʨu@-ꦶ;s;+S.,~uAy< kkw殇'[Xr(Z6;6QC3=qapMzo[OֶoHkXl.:}~C^- }X2F"r!8H{^d_kPCsX͕]kbJ$ Շ[Cxkeo]F/z?kͺקdP7:?vU,sXSYxz4Id)lb@x}辶rq?Qn^e\ёgA.if^_A-Yٹg?*MX\,k{15\r> &-~3ĭ ?7+dSXc]U=HJHC%4ח&D]7ծ:XU./*;?9qeΌX5#N7-.:u |g}'qk?ԽjDhj4_y/r?`8uj ۪PFtq?=0}=~%/x%]S.' kJ$Yèw=|~{?Y @c:u ϧeZ.V!uYakmm3w3?G ??"պݏ縟u5ղ?Oo%e MgOj9-;3mZ麺wٽ;z]}V}OܻV&FV[F+ ~+c4XY?z2WLS]m~-3.Y|˾_9=4,|6E xX^ӫN}O\{#SNs 0Q`}hgG5g;>}:=? 9ͯ]3X Mma^˃ne60ѻ۵miN?\g쟴OMBcz'.ے-;>02qrv[=\9r7t],}\zCꭗiWeztU'{Ykeo iK=7ժzUc*xƂ׏WV!{Xw3Zs̶Mov:1f-;g>kwz^}{epxw"gO(F)c{{\KL@t&"Ls?h'k\.qw'\fiv[Ys{'~bad9.@=ފ)iwrL{P=yQR w#dqHGM\1+6]Im|9!Iڪ|j;"wlVu,gCՖ`4Gܙ*׻6IkF?Scs(ߍv- p ?IkfIN&ְ}[<O1޷}LS'$p^rN]y8ﮫK3ߚMfFtա.7wJr[0712lwIS^S,M:@54_b'띋]vFHlL>GK8ԜH}Ih~=" -bFsYah s/DDDNprɻOIMio?&< [.fCn윺ܖPZN[eua 2 ]iĉgrd#GC|?uMjqX]++3ج>ZAm_Z$0K$LIk>F:EUp{67Ix^q8G+a܇E¡sӵ'.[KϹL5q's~ڮK n-F]k9[ۘ܆;;6EofkZ\&>Y9 I?yD:xIg)luW۴׾׼t-k2[i#z;k[NmWdϧQ/qIתi2ᐖoW`aY!~}9;GfZgƍ-MX)Jw/?6Q'^!ů3^M9ّcvn-,6ڦw%5%cd>6z_vH7',xe):]c76De{ {v\iͺ1ˉu''Ah'r.ZbeSu8ͨ3m#XgU3]w9un/8h]smDmB$gDIx$gחFEf9p`)T'hU&5kỿyT6@ ρ̞ iiB#c(~SgYUٷQ%<6vD)V2EPfr2?I_8BIM!WAdobe PhotoshopAdobe Photoshop 20228BIMCC   k ! "1A #2Qaq$BRX%&3HTr49SVb')57FwUWegiy ^  !1AQaq"2#BR $3STUbr5FVcs'6D(4Cdt ?A82;)"92IybY)9xUK2Z*\ A02C ,T$yLr!QOب@ǀGeВs3jK¶4U,I\d ividL!@?`H薐HH% s"^@J7s͆/)91F2ADEE<*8$>X(3յfX1jJ'*ON%0L{RiScNn~Ya:S%@GTey՚G+|%X3 XTZBs4'"[6/CDJ˃qz V8wH6{ʄςA)ztI1}\wPC1v-׸Q"䪗:MS:"5fOU⤨H&*d`h@ҹ!MXOSM8fhHh3 e`$~+XpqfYZi`i02IfDaWϔ 8'Zc j ,ܼ~J>udI4zqо]!\ >K)hK>tʫ:Xq} bH0.$r 8>}qFAr+/md ȍUzb kXF2);!Jy %Nўa >r2@$9*X!3089]1;f0ryc۝1($W,0<2DkZp|ލ|hcXaVJu̯1p2Ρs(H@<󁟹+rC>/Y,*M4!tduʦCq?bxq`>153Q(A'cO WZN?T3_:jzXK岌F-*Tw6)*hR5HQy$(c *eFgy_x"ΓUIs&lQgo=!P$wJ@Z:o]Q\6w6f4.j%{ƪ$6­T"$vdA]! cM93YPgKrJX\'x K;%lۉXs s,s()+H#(:$U z@$4Y&RGR٘,E1'B`(H΁&BCD+ a3! m!"tSh|>f_ 31f` 1䵳5U0IECdut#3"3b`î<$-;IA؂22(_ }0AI&lLنhv,"FDZ#+K $!(YHp9 î8 hz"¤h Bh*Co!O%`+M]\RE#CN_~:%x`YqK6 ?Đ=sSP ocQZ!0zHX%eEIѣ,ԕ%Ȋճ( MG؊W~ ?áUVc$H#nyW*3Efٌf50GU$B:YjV-H#\ru\D2um4G$-NDS$30= .Yd>8DxA\MDYl*1%_C*HAkL V_&,XTg>RNC(h; 5m5Zji3+T/【D}B lٓa$ҧ:! R ?Ècejbe" %B3,ɸ7CCs۵5Z:zjKŲQ%9 JGSk )aV nXmP* * 0,Ĕ-@Uȇn`34":JL,Ĥ(ut  yd*pМٵ0EXbI ]yAh'i(:0[Zz W-7lO¡T'̉~Ob e&qPƊըُsbdHnh4s|3"pBp$䧙iK \"Iڬ T6DT^.+vƩKN۠qZgݰkTYͧi~VݻG e*Q$2ULO6$ zT) Zby :?HϧC 펝kA==YZ|_Z]FTRβ3U D@E9D6b5:X,NԾgyR9?GڻoSU4M6{k4昳 u]-U؄QTW `4HU1.2~ap1%!Bkm!][mɼk诇WpVh"X皕# ͱ sW/ >Ȑ*!]~TgGkz=<{t;=Km m]ZPʂ7ɧ+&`*15:ҧYC^@H'_v~~{_շE*ڊ̺q6^OܬEyj]tQ3-XjfN(Z3JK/Yp@[ kz*O{bD&IQ喔2+rKưH iydU|=" *zd3~AUZڤlR 暚ԳJI3P!i#͉ f)V cBZJHK~_<#!$AݎZ)fi.c$#%a@JF)sʏV-DSe,`L[nC{u CH͎"4u[)PCnU]CBO+!< 9#9D UٞEQѨ: 𨟢(iRwiBn%W9aT}3kM G 'Eju^pPh:N;ek:ŽVyTe;HOR\B"jv!3Ƭ14QrtVf\n7jK[[4fHU-;2 E2M2$"HJ֠*rHJ9)b:,pO^PjjB8?3V9|>0(HQKeFj }Hfb3H=UnP蓮~ZFCwGl:kkr4^~m]SUI,JeET5ָU:E,SDĬ剩pq^tf*މzŮ4ԚZ'T\i  Ct QR:q48c4s{ҒF4oo|1㗐^FSW,^h9<o9_ !qȪ_N6%8uIs鞯|nz}opM{:Uj8$YMW4!ѻP!-(V&JR@sueΌl^R@}~Oluro{㴆ibI&iIDX#f>ں'1Z*:30| Lai׼(Z} />u9f#QI2^N]ګe yU["}E6i^L;zslKQ4Z6\zCj-ӝ5TuU]_t/h_7NS']=uPU3ۘv8O u4=l-~{BQWFQ,MIF4MUP`XBxpT,_8D:==u-uaz*AO#67Mmgz b{v_UY4V42 , MûJm=ԧ%oOzZRg{?UWn& 5髷md+U#)ObOۊ>6Atcvڝ3KuRk+hZ(c0HA+IEd:?Ι"􊭉K՚`g&C]ҡF]yTrGϢ t>Pf+VJhV'CCKۂD^20/>NcDyA9BG X0GGf!e-,8-q}J~"t/ѤPɅYs#%eb>oVPN$3sG]r+ G4S|BNy?HT?)$3*+.w\FaV, ^s^.}msuoUS=MMKvIdBH[3$bRHXPe;42tNho:fmƫZ7:Kh5]k4 , (Zr{ɨw~ϬBb8bM5DzY]wQxk[AzrIzgfc'A*B-#r+A p|%~$ZGE۟WY:?Oo>·7jt|̶ њKEVMT)Os EiD ֚A긔reO /,E2j<#i_ժ+6`yۿn;55oqu4YiEuC"gi+ou3_x_ڝ9oN^TNx2jZk+ihL1V`Y)S;.((C6| *gp_B]qmfl=jmNkiqK+POCΑiRxHIք M_6J,8׭wyԎu-ҥ-:z#L_;Tw* JFEmAwBUnCqQX ''!ЁZd0)!#ïʞq`Wy? ?CzE |FҪdJ{۩=+s(,+TUfnJbKbj%J}cZUrIg'DB4"'g8*G9.v,*pκ4QB|}V#ZB77}tt]HB?2iXۋ c pG99>ԉp?%2A XĦ'*㨆Xd+3+e(pT'7 Twu S] +]E$rlナadS۳}tnwCZn%JVY!Jc&쬸 cࢶsi_ߐapM2 cG.=ӿvCnJvm T?m].W[ev:~RjZjeO9Bە +fVDa`T 8ܒu6^b׮9 2A`C`^O~Ԧ˕݂8Fq0I#1xҪ2I$HHx^q-hwk Y(?1>O7sdvG6Z&I]_ DQߪ`13iK rJp}PL=|a`ԚpzP]WWt7+}teC5UmzH'I,vep,+)nG"|@7_81:s3}gԣK3;J#S!g`3F䓅>r %5<-,¼t YIsS=5QbɅR'.9.bQWW "Ly )<>%ןگp?I}.IgIjvٰP"L)h!taEJ _^J)#c]" K  e5e.4BғCBgI O\GD3QfV:@%h`cA9RHҞ9FFR$- Z1"4rRQƦ>Qd^-0Ée<^$Zʒ(pe(F}7x)iZZV?NNspYF6 *[(d\J(EP֥,hXʑh{!7ݣ+kN7S }ZuzYd@2IY46a13Np.U=/k}JvO>3 f=Bpg>w`r\a%CŅQ{ _(ߟmK:njKwQ[w-jEZWP':V2eDJe% B9\=39 :jH(ZugnFT[ V!@_V2RB;YC*AE3ԥ}r}iɵJWdy)"b3denX -ĊJ AAs뮜?($Gk]ԂmP$+ijR\0|>2VAzhCe+-se8L8ڔqAEOB]]2YBqGz5*EP,EYˋk8RK<.G?S-*Io╫ceY!2FVT#dK(J.sa\)Q3n;]@p"daԃ9#'<>qdֿH E˭Ȭ[AtJ5o#O:݋ܢy9iQ甍qMN*')ITţ ~H:9)*#-"|JUF&W/O>nqøGSEIK1vcFQᚹ莰:5]Uԛ;BD2ZSK]{!VájZ%w%Q35kqJ'RV䀔P0To-|W q]ug;5NKD[u I]"OnhKs\C`Mi5Ɵ؎5e-)o:]ި"S[,U]l=MU,fK \q~bsav-¾u /=Y7lat*-vU}BQ*j$ERkt,qev/bKKa:Ԛi$*˵][v뷺OIU;HήTL-[$AT^"h3wP;F.?oi]M삊yRU5+;EGF=MMUʎ(5%D=Dq1f6%)zAo%aP3QN=3ϲ_iMI =ߑ[WO]+J"sl XmjKӎE JTsؾݶ5hj[cvRrVyMMq6ud\:My׈ԧC*iR%EM_|hXh!0蚘Sb5r%,Nxܬ!B\2 [Չڀ3=XZf:؍yM;[k.uE{n6@jx4;FVzqSLjh%$O+g-9KQ%!rƵݿ*Ādxxqy=X^&toutVzsWr7ez4'IxJ]l@QFPwݷpU3ݺUku4;JFԄEn䂚 C>w*>2ԩo5Xa)N 3u>_j=o>wHuUԖh۫ݪHwZk±b`PKʖJT"ep5e!9:^5&9I$3TSѻ)T FXiBSR1rŋޯ@ʞ}A-|yGF[3G~%B{2C螌zeh 2Y"(DPӑ TWgd8v'nY&u8_]KVj2?s#J{nvJf[Ҿ=gLKSoq\>UQ@$`]n('1_ m6*ڳ|6nEdUbiFOΚx\3(tCs܎mҔB%(tHw@5Z"M9 nSɡj.UIu_,GeSOcVhQGmfQ79$HΘ' *xTN-' G3-8DJ5(h\1!W5r\_%x1'!ugWzgM(JԎz$f@;?^*g>0ճqDДzG٧8z ]@' sQp }tgx0oMГj R][qPJ=~cf֤]ʑEJgXa<ڌz:HKQ,ÜeZkbAG_xTSkm\%.=KS)IaS-?(FgQ)Ov73A+* ˯POO%KS/6U3dI LKAS7MWHMiL˜25Q Pdfi|%,3S B C#}>=S%R qNN]airT?XV%hXkZ*MUPNȦnL2 1s$IdΡ1hSBPV bWt 6 զu5vFjMmvzjo "QWN$WCѣj,)j(hEN>@j箩:{{ovNۓ[W~5P\D\-0^ :$+* )qf ^AE1[˞o[>'ͼ=Izo tiۮ .:ZZ*]e+ Cz)` M2 8NˋRzG#tMQY7ouEKw@NAI;}s-M%N_SiG$V.jB^)(8P(v˯L{IaoC큢R6lq넵SA5M|WZ+OFi)$e(u^˓(t}}=til[;w ݾ76*$D2¢mF-Z餧"]9;]= ' C9f)1(o8wWD+\qvixeQPZA"KL:K4dp2l$ +N`2Xݟo: 蛤wniMg¶')6[PuVg *tU~jA1esjߧU8d`4U TYA b< GS]s]@n1cqz˾&Q:D ( =Uo+QikLZVbZѷuWFm]df$S3KImԍhK:j}ڂj{-9ЛAkI䨋ONu,IqqEa,GtQMKO>/A4ٖJJ̱$͒2i@'O;vњv"5]6ԛt$3\sPdUcHǂMem(0_fp]`K0nOyk.Z-ؽmnW(~.-a]C+jFXıSP|2d)GJW;GcsجX8'Vol]=|oDtV{Eg_%2$q%QOa3f! 02 &0\s ;=-SgPɛ 9S{qul6i~i;4>$Y"yUME:$IRH!d(Xgjm)ZTg8]i2^]*|ںAiMѓGOJkxO`CNPAxI9;/*m`lZSdK,x?m!G8k Zi\ tܻ-4TaBZEL{f2Rn2ft?עzlK3Pg‹I-:&ٺl!vwC[,r̴T5X.Ap(5;,vw4A=)`HB[XU?>jmM} }%]Wg֮AdT$BX28`XM]V*S0+/`^H+݁iMjAOz!{zuZ ^5S[pP]LT*1L\ JJ=%ԫv@\(b՟ F;%J]6% Z ApC. `O[Wʭ=&_P=v8֚i+U]EQ+u[,e\2>vlڛYT-v,%EX0}b8pЕxY :_^=˶#h9mkFjlεK ؍]:MYfZdOpZ#Y`(cuQ{g!brKDv,}{YU6eΖJ,S Z$qZ}门:OzKI\ժpmfڅުu5tʵh(*Z"2a/ Iw uǛK C0wT ~lSx $J/}1# 껚 ӭ< Zt(84 S]|0iLi9z>L X zz;Mu~jIɳ뙩"DePV'R>P0s `/C2̴p&6c%0$b}㺞ʻG[)W>j`њkTf]~5DqD51/E͉ƅHNHSt=k;P6o^wuoM:EfږdLPKQ Mljj4u&I /܃$} ~hD$)7| |A>]eєmQ+).,̿V# (NO@}N >".ۚ:٠4LuW-e6{FEI S[WAJNXJT٥R6^U{S7t W5Y6ҰBI$ƳLinynԛqmZjnWV4"=CmbTI"HC &ZHH$S eϢ|v[S>.l$H-p^ZPH%PnzҝV9u?RZf~YGTIKEXݭֺ+mA>Y-=D˜/'Z'Y.dW  `6nMjj.ukJPmv(j;M%TIQ !Ff3݋'eW<%vVrRJ L-)H@,IW]zKo}c W޶Yi}+rѴZn++uVxlՕvRd8$՚+ٰݙrRrɈVɵ*ZTntƀV\6WIjӛGEKd9v?2eԜ47>z~oM$O 2ىC*f?@W9^pԆR@ Tg~pbjyXeZW)9.5q3) 5dpH8tbÔ ` *(X{W BcwJ"1f9P,*+)-y$ci5Cܱʀ={蒱Ig=("#:I0$D Tǀ9g fLo]W=XZ) &,f-y.톱tԦYE"1ɕk՗.r]Wh;dW>G!TH7=؝ P >rE-3EHi_$6Ą7SuPnFBbԭ wd*пΎf140{:yRv-̦uZ3^ AOORLN"i Sanjk֌f>TuƞFsb/,Ș9P.\C$ @J_,:$6lxe•0pVMф5T|8K+&#$G6, A6H+Iyssk:%IZ;l>CBʫ-B 69#e588;^&J|MqMqo_QGPĐR?İ4g %[ qI1e5:$a&B_mJF8bO~pZ:YdZ>ԩ `/eq rGmNxH "yE57T,üxH $T6K2Xʡi?NQ[ԍ]lTM\pRGQ!/]Pψ%K8}vҐL\0;ˮ"c6u"D29"@=@YlYbgm]`U8M=`eԒ ՂfѡjWUUNjp0ܲv[3Q4Xk{s1;:d\KeIQMl~A!æZ,S+PGn=-XE=OC_WuzSvQ\`S[a=-UKS VD`ά2Rxe2!Z@`}c;ovn&γeRKZ4:b*\(*rl@U6y@:e^ǥA )& @GE)>#?&'Pn(.4[mAS [kY'UF Nxŗ48)ߟP ; #uN|=A(&=_igGA*v*4!p|8,ݾ1nXC2z0zpyaHyIUB)p@,@.5PC49{O[n߼qNԽ%LETG f*xc#C(.4!Kݺm2j"FzX***D-+'XR2xLef-) ]ٙ~T"(>IZi@6hJIV*vX! lq0Kd#6 U#C5ںQSjڱ eUcT۩U(ibUeD]|.bS4/ZM^#9A  ZO54F*VKET5)RG0P8ؒJJEQ1bTPhAgZZ +z=zASH^xIH) bxf}*` IF`'vy>T;s[3pEdU{5l9P5Uq۬snQ8/T54@9}ȡ_Ol* 57y- !ѼrFݴ[IZ~I jέ,I%@rϻOV6BGaQ^$UHqIa4 "f,$2i}#F'Ѓ9cH+RI j. 0{ Yvٮ1A$,JfM"Ǐh! )DTnBQ!ETt;Sw'ٛ*%U1eZ59Bȩ tGA._c>F27 0ɉ}Z!R%dwTSRrLP }:Lґa91 |€,g(3w_QmO%ܱTZ{SRUW%cJ-)""EN ĻF|(rίR%/L 2EO;NgB 8RX2DGp!K^lpoiP"?8RFNghPCs)5'J1}XڑNznZ/5/$M0XDGː80x Y#)%_Zu1%S̕A1[.;a>@}衚Ar'7Џ-lLrCN7L$X@r.؉<Gi fKddkפ'R(Q8y˜b8B>R%1I Aݛ?\9|XcgrT"P9a|3bBe.`UOPJŠhCWXpG)SMNRhc3[PA,$T @?@e |rkVrVT; xqoJ*9 #E\*^섷p1g =M3 0muP@)J,[usS]R+%)I,d2Ȍ% lHA,F[BHK.MDJtW*(Dh%n=Y2QՔ+_$fM 3BҖ|`I4~z|KAihh|HBΑ vIK2%In,XqKH'ޕp)as)ag <]+ PR%HC{# * qbiIȳd fɖ Syy·apEU&Mӟ4DH"\1sa <}K<ѸkNb}=vܯ}Ku={3]etzOG%^VEhikиIWQvdixAJ#ȁĢпGcm{]zPL_ioJcb??ۯm{]_OMa@UZ&M׮7MitHki-SW$ u0 +GV*yZ2첿'Q>ts0hl;%7iR+ϟ藧k?sfΏްz֧Q^uҖn](k|uWyY;,aB̪.HV>=cͶNTTYE 7Oݻ!tٯkZ$٥%d-J!81M#-k-u>Ψۊku:fIu:I֓'y'g+}<#qR t^1AzS*u ewEǎ}3(LPu pz%zZz24oB)V!O{@HKFXrSX% Q^0'.4 +%Cq!0||Bl3)M_6:ROW) ez(g_Q2 Jۮq+:A}#}|55KM P6U%QQ~ X'--RЬ- 'ݛ頭e$M spNQ㕊1aģT*Hˮ$xMh~*%2~P߷8 %7KAɞGef5+ L3@p*ܘJa, #-ޞ!H$YuB Q.zV@$`t#nJ8a5)ZGM3μ3;H7zJY*=,Q!OFixH 29')1 ME˖%O^Ǹ}V Zh?XKP=Xa!P~MY APy¼9Jx;ʋ QdHٙ3<Si)6y9 YP8%~y^SQŐ aqs eĎpGɘ!R<%w46YS1)Zf_b8P³T涺EMG,js jjRdh)21bTЩ %ĖwP^tЧSX{M}SiQ$tVn*qG )&V,e%V AQdK'2椒wSEf_!ӭ,j%_9BCֱ}el3ʼne%+NwĥM\(B۞gEI"&"8tP! 品?1KzuK*Q1P8\i` 7CiCQn*[U=-#sO+R1r8S8ݛS 6mTPHjk*7)yyYJ$tK;\ `15Xzi6{,%MLmkqTӔ}SO5,t\T"DAN̦EcrRVg96n9qg̖bOx4km~}}tބZmK^]44Nr<`\d<_ӟm(QavP~1N g?_ӵ~ܛ Bmջ]eP h֊ VE 'B졘($+ݶv;EkBТٲT lo/mogw]"m'JAYD$)c Q rM"Opw.?.\ݽ.q?o?e?E? ݽ.qӟ7ӏUw_auXcӃs]8EW-%~5{X]-?pc3.zz.77)_auXc;+`o]aaS[w_N"ٮK١QȴԢ[q*Fy:zrۮELKZC,IY9}ױ}V[i>VeȴK"RVR `H zyum+ |/ 6|iXP3q^YibP9fz\q( 8>zJXoE4c9p0VJJ DU$N%WUIdĕI !8}EJ*҂hڦAA;+ ~rA/#`*d ( B^HN{@}N2g> #1BDTHcB*:՗H9F3Cp(%$gEXĬivxTʎS) br8 qśǁGKX$)+zVUbU2~)}q KJ* D{ BV5D揈xO9{<ጱ#+!~TJBVPˌ<D&t_Ty J&KBN2"%#2(nw#\$G?/Ќ?OCPB(  <|?I:Xqct IIe a FK2eg m7"K9(ԧY~הG yJX+$zuXmJd,biHu$̋$gvnTb: 5SIhگwKvԐ.TmISqKv%Yjf8QM-V+WDաD '?EPrAVDU޹ѷk -jIQ>9ѳ >WEKFYii7̥L LfiPpW3XY4tz$W/Q$4|ȳ:ҵDPK)3H;p|?_O*%%nM~_?Bt*_ED_Q40dTU/a9Y?F(J4!QV'.ڕ9 1aH#FͲJ4ep()DsNvFqʺeː9 hVdRsN| S3Z@fKQR3~Qwo;o?q?O'HMMG(QJ{҅G(QJ{҅س7Kܡxedc~ܕNsDbOwG>3;>6b!&ZOzcQS =B$1n۷33e8` F־C쒉f"whC@@v~'XiBí?H8f0I6Q K.@>~q Be(R:aX咃i ?_>EjaVCC P09FIrI} ASCSK7b+ A1w@,t@MVM-?UJ/%S avq%c%ORB@b5w՜哰fbAŠwe `ݲ;7j^^ d|#ϦRAJpZ<9uŲP%mGiiq䦸s%)Lpx<Y6G.*9R0nuvef"kg We+!/0IF^5yK3JOBTENZD\N={3L&/)*$^UJeG% ^\32jk)[3#:n|a*`.B^N2ؒrOށ:ZH)g"B8x!^3xe@ ~ Ҵaϯ_D7,C3<|2ٌ )>i)I.Eu`78 zB?hmyĈx*w,")8dNxcfTQ#04J q9\S&ѠsR矫Gy]:{N#bg\] YnOKs;`xԺ.{PIMUӲMqFUU@O.Jk(z'amvlڒ־*% *$Y#i[7'hOUzF~_j:^W%geRL&RC.ġK,2&lfVX@Zh -IZ.ڪ6o qZ[jˎ4+U]++/W h~*dZɥ c@5 G(QJ{҅.j)[jɤյ:r٣FV|PK[! GSdLÊUB? M(~mgJ/sX=CIiZͩ==MW:T2Bܽ_VY}*T_J ~PD-ELBDYP8` tnjl3Lł\59¦P[v̚md9p;G xB -Q$Ck}ն*#Uuw}$.}bT Q+)H bBj6RHeQJdJJy'("h=-Snt[򲂖rš&!H r-95U__s0Je~[YlRf 4=#JʸxkR-{L :=b&JAiF`--8QQ!u@d|)SǸ; $9A%L^[/%2#Nd.EWu.d#=DP`CpE#Fiݻq8&7SUQ{h;Je1 A-!J $`~P|UH>@$~>1E!q<Y#3ASWdb(W*0Xg$),I1*ZVaj|CgO&;>0 ą域68X6dZHWN_ZD(P@ʣ?TYK4LjnУ/~:xi|HېV#*$(TSsB`=#:.LA6dd}r~$C%%I N\DG/7? A)jĐ$q>A)͝aa¨J2Β:8$|9.*RMh N*+_荥cLhZkN: ؓoYE nHW#c1㢜_t{sZnBnzMω~2x׈z,$>x\w%IRLHR4 w'Uroz'm%}c;=܃T]FUƬ #}ۗ|+ 6/c =4܍aCPo᬴zl4+wY\T&(jWq!|5C^d(Nw@U~Cm*dbf()䫫raQHP38Ucd̴NEHuK]3/ۚ״e2tՐHDH+ JK$Y%GsT3a]vǮڏC$~|~ڿfWg>u5>C$~?f%WgրnW@o6Ko:x+5uRR zC1j?ޫN*K~nqg^;?|]EPXRjĵ }{fpw}l(Z*ЂAhVLRs0$?6;u^= =RifΠBϣKC(w8wB羖rTbuy'XWپ6ѕ4ڼimIpk|k=>@^C[j{5rv2§N$b,܋ro6}l.G`Ȱ"S&4`ho|˞>?'>?tpOF37 q?_ŧG ~|tma=nZh?kcukԗZ|U5rI*)b \C6F|?uy[`*%,ar#?&;/ltI fZD¹KƢĬJjdd(ԈaQ؀cJ1eR=+ oS+M AC i'4c~\@du:v"2!bLtu%Jkm mI:&:`ӴdF+Ieْ8LЦ+ Z#t=_yݽ ^Wj-CEgh}#^tp?&IP2h~XܕG2.JUɎ|@*Qe?^v롽C[3ӥmx/k-z7Q}t^\VHX.tsSRteV=ôإ.NǩQcZ\? UOfl?3{3{o]qT|}Gcnoqb])Rh ,T0'Kỡ\ۓҚmj J-soi!#p'vN5U4-H,eISdK@„UfiۛTAUM7ٵBnapXo{s7HO5.YnK`WvPX{v0x×#,*Cx6?Bc5,4utCr;M՞w Ħe Ie99T^Yf6]Z'Bf!D@J4p]=rm&J)6mliĢKPr@s~zHu?׾ كv?G؃FⲿFؙ?<l8_G%n&OE[C[p=R۝.b,b *8 x咠yW=vIݳ3e aPw ȏ~Ÿg~>Ѯccλ% 3qM642gLPtKZ ;  %sU韪ĘZotw6< ;?Xls.'ǕThWޚ2Zo<+oLe =x?Wޞ{i(QKJ~¿G})"G҅r1q6xhEm,8y*ᘰFPx`z xDpM9EԢ}/Wwܫ__RPUQ.X ZlY 6ܮ<cNΰ@GIPƢj1$gLg s"83g'! RxP_!C&c8S}Re iޚW[4 `>O0 Nd C1baE(as,VOL -TC,,14-,u$(0 &ax:gHPřw0E2)${nPmţQ`$^XO9)yH)`N{IJNN5zj=Y:z[Eǹ_89O̰إŎRbPrx>0ۯ߷cxݱ쪵T&E&LEKII|vHUmkkoFShInvH˼sw̘&T,2]ݨV%KDK.`HN%TuI0S}6'fwKJhخVxQ$hÏ6s6͝DXX؜O"#N{]ݭڬ&bP,҂]䩕 Ocg[7y˕֊_ksodQOC)aoRwec2 m]i\.3$G؏6^vֹrdNJ$"B*$2YR%_5N H |g<1o9CS*'݃Q0V?Y ?zr0((a~U&F>  XB d9T%B1Pt_zv(PT^.Џ EisL}6n tm(5b+7c8Q:C~zP҅G(QJ{҅EH{6D:l0g q$đS`eq-ŷ%դ>EQ2E%YԎ<\c/ 78II*~PXTqIdF~zEJYu)!_'/erbLa2$p\ y8ШJ,! :QV}u[΅tu\(@DNOIZ8)Ǣʻ-7MGzlE%tݦSVݾ]Lot)‡K% ΍J˻4r+h;3)BmA?$} nOsϤuDzTBw[Z_ c뉙-R*R}`ȼ2o3sPp!Aƅqs>  O=(Qŏ+Uv']1ort,= oV៽S"WiTЖdZ&~g1R./쁼G(;n_y^)Db"/HH'ݥ$:V:ew)8P@Řt͡7M^+$kLQؙbÉ*A_$H W)ދ|H~%L@o,ڶOŦĎ(`D+ũXeEZv(;wMlHmIQW%.DQtĥ*DvP2ZGsI >? :sB>ɤOcn#~u9 GQq KG`TZoi8|U6ܩ{),$Ge]H *gMgZr! 1&3{2뾶gK`SmysHpJH %7(}u.GRzn??ddAзQ[}%fw[Uz]-{ä6 Dw@G$lU6S3 )PAV;;۾]qZl36ZXfK*B)%e A17U%7KLCF'Ԙm/zhDP_iޮw+G6;g4AqM@J_ȩQ"3)Pl]-O^6aJ#zG! KP *Z9%ZTxCm7 %L#|K!/-5'G808Hݻ1L̈`Y]Ihs ?,IQ]+¼=bwiƌk~~ЉSnC$uR9IDof<6|7ԃ uLQξz@YRw>%~h2¾\TLA2e(`w[wd]J!dU%ɂF@9%x;W{AId?_u=z0#p QaDZZDPC3#EVr~#X˦<$_BR2 Gd$~$??#_HRWEӴk v?*@63SM85wG#I-:Ώ a2(#|aэ1ddK0@~XPXada$Ÿ>bj IюvoP[7 e5ⳘֶS6葼:1״B3my?qj@u P#}mћ)$]GoZ?+c޸d#bc pu%mMZ7Ii̺lu:슓mL-QAO+#iDII#6.$Skyo`I+V3gQTOwjn`G.GCAޗszAja UM u,]-)1%'309ҩpUմMGAal+SzdIɝ_%R/_\>Tvk趋rtuWC^-{eIJN$yD!oTRlΡ@𶃏2IM=}/]*o=s {/g^KK2?xp?/EDiS}-[M.(u'~\d+]ac@FK6]uʻf+(>&z?5nޝv{v#ieSmR%*`.[ |FmxS: ܪ8?y?SѕV?y|k2+LXIh=ʛ̚:L׈P?w],'NNGm>3y%1 Λ?Gc]=ϵZbsLxp|/G`{ic?5_={KW:bݡ6(NwG3^}BOW}gtիwnкbǨ*tUFEHmݩ)kUY x/V7&h (q++ W9ER40==M=I~ᩎզ`qd `1j*i bcIJI~`HD\dI#A7F%N<3)ZIF貹3OϮ T0u~;E+®Gr]|O$,гO /hKHJRd3E#hJd  bYbc  Co| 8T>~T*\{ef7brO U# ?CZ&ZT.R- , TEMa1הFX+{MQ(NҨJh +/#B e H!ޕjW#H$dͽi%C6nG"$bIcTVgoxU YrXՕVp%321 1e0 e Q/3L Q%.N9\Y HH5zrյ:*h + v\*1,Ɂ`A$e2A54AT[ӍMOVΣ4rWRhAS5}3"F#BW,.PʔP] ̃wR,Yg%dfReX&T8^ˋD٤9g͙AnjkԷ{;nW꺙zʇ%YY,;ٞ[I<'^0P%!$r mv:W#U_ :ƲE#03d{d!ZS(0_ȍ<8Q,LD@`taU7SbE>=d!O5&7` G<Դ12 LO9v4,N 8(:=B.bW 5Ln'xHW!Fy3ybOoB`c,6n(ljJPNs9uZ+hjORITI "GO "9?U+sObUG&"= (/x4aTzp{%ƺziyc^eX2BǐË2QnL*sx8Wo6փumQU[P,WiR&1 >f JF"&~jZWe(h [:.LhȲFKG8uH[$euƐƦQ#%(ςOٱ^e!Pwڴ!HKsBY<~ij#(X.^HG,CŔUKHʲM,*P9;UyW вCM Ǝj99Ir]BZO.@ AORꘚQH}`_jLGV%AMzUIpӓ-\u/G%"2M}W? Va)837e.f 5X5nZZʺjQBPإx;\B)K2ۓfIf&Ȑ$I2VԊU!D4ByɊb*:b Y`(Nκʱ%MZkO_(MoLqML`^Sd+%!!^9($Q^2h׺PQ}KQCn:HuqHQ'(ո(V&$! }=D VWP#, VY$j0-P.IEE 8]M뾰5%3 >PmJIʕdR>?w#!dkVY;,M}1>|Q28 >?nH[qRϺr?p0苘9w[RU55{ʹm$qz& N/pvkk5[zUQ9,4u$`M\a0Ҹ'eْ֔ &o)OÇǺ{w?Kކm++N[.u/]f41]2Lz+2,B ҿXnk/`r]1ӦmZQm柏sMFoO-d2hڟ  \]"liL5Us<, Cu?O?ź[]muJpm}wz;}zʑK iIcC˦]e2f14Du5>lCMe׻G{_-nTֻΞTZPAUhUѷX)*poIN @w@SgU]ƹrh޷ ߪ݋oeN,j˅˸^DW*f:;J)wE4XʴLU *{E̲qfgiidU5?ATIP*j[Ps4I`ᤌ>IZ;nřiTxkp5F!UZ8_s%PJi<ʿr.wNYH%{PG _?~-2fvsܖi", ? n8LT[y 5㡆T3;%XC-Q@YUD6lE>C@J0$%*7?)%&4AYC^EV@`>~zA8ÅLܵ`w1gR c1LF K3P1_*$b0^+XUpZJM\D X'~&}ݛɫ5e6GܶY-64J#5_QeGdhg6NuiK.O8bWE{zp}u[<eU]>̉P1I_[*A"5 C]L c>l4O;g{mh܍ҷ^"$ ůnOWB܌sm"H+- 3]g0cV$YfX ̇0wou F]KjF %߭8$ڈH ?0eƅӥv+Ɯ ٞ:="OxFǷ_PZPܷ׸^;_:rE%Lou w;K\3Pxx]J*tkPR!#KZ"aLg5~t7Gg[zRù{cIo]uUlS5uš'4('Z6˴J&UAIXQe$;Tաu_J/N;u)ewV֧kU[lVJKm7EE5jHSL5ދL2'e4p$zQd8 8E uTg wxk,~vN⼪H F9ᄳ2"KdR<)\@JxfEIv1E+DX'~t&WF!<`Y_\HǏ=d)XC(WZT )J~"u)#c>X\!SA"HF"XZӷR ~;-)CM{E;]nvqʝ1tmŠZ*k,֑'c^/mTno"LEVt"smKr"QK^j]ݝ4WiU8,~""jAY' ğ_(m!!-,i9׽_7XzG-7oW)KDw%W(uy%`0@+[9 -8HziΞ3z.m4ON[ZPk M!xi;Inb CLSiKWϞ1 Rg)IΪ0l|FzݎM~}]W=KF\p#CGVS@dnŶjDp 8۹PPfYN->5αBȘć!@Ov~$-K?_[ռ#hMe]<ΩӕuZN֩IJFb!Spӳ.)RJDubTg\g5,/@=`U#dYL/uzM Se7Kl1̗oU8̏I s`D-3*%,(~^eneڛbSfJ] nvhջnNSOomזj{uHн4]h,Urzhr2{n&%=r}vtZ1[jn]{⑊zE(4g&-Gc&`% 8f-si:6:D1ul+Fu4k*d*jƬ(GprM(I:j_Zo{>:ֹBq&j_8~NF{mfUhw&wm[WYjZ("֝%Yby s%bԥAMk2ӳ2l8'OJkosCm:_-TqR=΅n䢨 Ŧjzyj:HYSYfc Dң7vR#"հ($O,E \L>ۏ}.~zKw-ֹN靐Ӻ}h %]m=E kGe(6jeY!IcIV$lq"bxJr>yDZ~۽Noi.P7+Yl]\Dq.QޣE̦NoWn3$rmTZl$㙥 ח/h6-hLe$R8ޤN:-rB6ɨTŤQ.)V"j?5"8Dq#EnBe(9$T NOIvIHSv^{Bu|֝?j);'HۭZe=%pm\!{lPjCN*%S4ɜ!s^ *‹EjL=׉,2 b٦Öpa6jҾnFۏ=ݝ_;oM{M,M+lY-4Vzƪ~5u4@X[ &=Zf( A.iBhzIemԻjHtj m~-#U-PBUYMZx3gЄRd ',| R45~zd59G46`1fNXI-9 lřaCQ.3ρ&I.Tj[RTȔ#1u![ ;">tR?Q1>1 <+??r>F<.?޲13F!OR/}yA?`ʤ #@?L2gX3+rRLj1p6 2`y |ICK,81i3kZ:֮)夆jV*OW:LHe8>%(AcWLtqo*]vkƮmmK_DbnBĸD }KJpysJ]w\(ۣ+c~2B%s>N0CSV *e:p!y|q9[6 J&PĔI8^`߿rҌ$zgUƔ11d%IeGbߨQ yʐԢDPV3 BJFr#8s51GQΔSHY/*RL?u@&"IxJ\©aa51! p4rR&WV< NNGդL&/pC|Mp4uI̡i\"#Dx 8b0HQ(HrUdy$Iwrys3 EtJM>5%0-h&X SSъ%dcR$P]@9`XF @ 1vdc9}Zr8ĉ)Isba(l]U{P efRG{h 3P]ߜISxk]hV!ߐ359ʪIa5}orɔT@'8ֱq7tu--nCmҚf R?x䋏nEy>VĄ1t8'RfxY"Ӟ}L˩P3uEO)MlWhb⟽2HBTqJ$Iʠy$)#-sYm[t"Xh/M-tDۥBU{^Zaʅ [c[)G!%Iɫq ˦END9 0>qU[fejSTV;ŲϕgG8R3zysBT>dyN .cFv9\O⼀8-J0I)9+ٛ>l R&m29CbzOu]ƂwyʆT$d(#A#H A%\@|2Z0Ň)8p9feJV(YR@s bKƿŦ!Z$45#5V9dK$;# ~YO&:d QeC )uD+KBMT򧛍I$VD"#Ldb!D2ϖaERԄTչfs@X R#3USYG:UtIbi:f_Sb rYxA1~r/$îyxL B+  ?BuNPO\io/(4sޑn,3<9 dս!": ٝ5-:\}-aߌL(HƢcy-+;$LKk>lR*M_x>:l=}XmC~إϗ2eLĺF9` >plt:b礴M5=IK-/嬤hV#Hߖ]d-N]v{܉Ya(Ly3voi\ɲeB!3%+d1%Rjnt~W]̋Vim3[ + -(̒׉ K27S$}B/ ]+-ػRmrҰ j'x:Wj|إZ'-0q655З퉳ѽSw*, ʝGp<)#ߛ#dLΰP.[8,M*ܫ}g/BLABJ=&n4}HRoѷ-<4W[=5T1R֘=‚G%elHQ +T;=gaMsP+E3)/8h{U滮Dmğ"-̖I' $bIv:ܝexsšTW?FT$FW*}y07H)!O4fj'uB[hRuz6 ϶=z-٭{԰?I}n+]/F{-0|q;f '.}[m7qӖ ;IE=.)z4d1jdYmt,*h@j4clUtZ{k6,DXԄX 30 @M`ѹz[NzL٬Zb[fX4)^^Pפ ,R3F1Iԓ3klniVk,R @9)jsf:Giofwt^ݕD K@BpᙅJ(M Nt7gK֝q[l4nbLr,4yp2P"NʲۧMRVY8;oISҔ#-3)ƒϑhkVƥT} Wr Tߣev1Rģʬk`M嵳.x%%j%Nihb[vk3It( A|(FKhUwj= OSSqm45rӬb79$ ð@%H^w]ɲU'_{&_knF"D)+"\X1ԵŲb* h%9ۅ&(]6(`gZynRaD-5lɽ7]v ` `Bsd4Vnζ/l6{rKBJp%HOxKI• Xnvz}WIS}R_%u77(bf?(>lݭIg(0$Ekf͏٫ehZm)3d˘@i$$`[IlILкn1wJWO$23(KKS~]a):@arb4??54uvnwT;Q špҵzKl [Lh.YRߓgd]?xvfn{wr.Ťvuɒ&\*Z55tD Sj&l}y[it gUKGOjʮ҇? ǩORh'}GE}l&Jd0IZI'&b+-UmnmCl:::dʵ@^.F(˂ceG3 %i,)_هfvk7n,u.Z怄 ̓2H% [$2ՄRsZC~ 7k[tb:ڸkfYei&1/ ` J%LĝIsʵpcw.XfQiCLlUψ~%PuFڒL嬂QmZ)i>/KR o,(s i ExKne]ĭݚd.ft7/Enm ΈG{5ܢSQ-(Clwy Τ`}32hB5 VrjPGVߴ.vZdzWlh"rU"B5+T!iiNt ^ߍkAS`5do{CP-^̈"FaG)iI2}6{V{c_#gm Rca5$jLD~u՚f#o71Ik5bI+ $!<gDLV%HÆuhӴ.{Mܛ)H[%"TeK $.Q+ RBޤmK]@HX$`x~ ';yvtm3N'?([ =/apN/^tm 92HepK+``.aLǘlCg<9tWAgajw=03S%ZU˹ -Yž遏d$4'%UT˻ ap[-(0]|c$01tg݀X 7{8rmGf*@OY$:Vg@#[n?Q+a|fDĭq=Czcj#M=:3$3YB{QQei11$ROSD{\ -ʳd ȨAr#59foiWmk-Y(WN&'r7 9;5uLmuF$va?noeTK+V0]*hWůޥmO[mQ\i0AR9}pw>϶˫-@B>`sy֝r~YRQhLHQ!I} wIj(AUM=O=%{jƺzQJSV-@qᗕ=P\x@[&Ӵ3lUȃEy=5wg쓶.2kMTSx$O.k[fEzThZn1VR3[VF1 ,W*.[e1f9<70]cK+-.E).,(# $ I$|A.[{{FkB]b-[AG?W9zB=/h\6wU`э$qg~I>9ˑvUIx}#9eS`\}?#UlUcO[4|KCbO4u*!I\ij̱*>/Β&+->{ˣWl%2D V &L^'3jVC S8_cih_{]fxaֳYfX˄r#+/(׻ 'g${o`_bO͐ʹI8Hg8\ـWXeI@d욲TZDT*9-< Al\B-GhIC(2XZ MF(MUNԯWRTEDb"F9~GH ֑3"_dv5D!1$ֱe &Z23{iUMdt֒"l )A_`.k3VDő1*&k $JA&KUb톒.Yme}M')rWf`df g-y+tc^6rN,{7>rEb )[G#6 3zďY5C=Zku D9UXR@@Rc3v} lIX!!KIJ`QHu%#nqw_~]s)Qߨ)*4!&ا @Wg%2~ڋk{Fo[슒!f7xhu$ ++TIRY@%J(ʘj)q!w<琙bW^,+R8R+-ak$n)/rXˀsc"UH0eE!j kAt!`?YD?. 85b)RrA? &<8< V@'W-9~2ޫ,3םql]+g j(LH**JC)*0'J:'/6Eh&x{vRRkZQPȒ]wG/VLiϟ5i`JRSi=ݱֻ\u5OcjY2].3Rb)l9;=شX; 29k?_̏/ ]yZڵsYj'#/=QsߝTgl)?ǝBW?5@a=wiTW(%=Vx>}Vۉ$gHiJMP8G0Rކ"!3Ơb>j~BٛT&$-Bl MT?R$ n/x՝ |ɀ$ 7]]bRk9_\@>.[P*+mWHa#EW,K:} NY?oVҩiJ>Y9^믵fS."bAa1=$(dYa$=Bn;aޝ5[AL=@Q!)䯨p cr9B$|aI̯Rtula &6rIrD"lvL' j(Qj8C(LBqw' 4J"S$N%hFeRrTer˞a $$!98H!mI"B 'Y|yoC>%07t++ƥX.'#-ߓf^ R8`0b={ysi EsP-}(ڪ' aیы _"VK]_, &čٳ\7FWZͿg*9H(*K9v=R%חʽKUjĕ+*eXcXbS *F[ulMesh{օEL! zqWt>OL#zy,#El9>`tM(RH:nth[]7h]ᴪDŧ 5K}D;m{A~y{:WZyc3|<r]|ʵLJR%'zcfX Edf"hެ0+/M):ߪvG]N {SU(F 0$Am;OLCZzd{B\!w"Ÿyכںwnue\޾R<.ʎLOc"rZ&TRI$Ě!hگ [&*dJY*Q'RI$f0.),HPF<yO@e 1Azt޽Ni-%U;|=pGgnСaQgoG1\[U;2fڕ$Ï xb-k_e2k^U57W pj]-)s}B]kZ.iLI*՟K~]%HKR1JW/>_{(2uyd9}2=k6ubg(# S dГV*zc[|443T$x3**$Ε-!E@O=mPܤV~:9SvFppP[>"|va]V]mo&vJT 8Zj]ӝ's|p:t,BH/$bBɂ&j[cl vmMSmMߵWU-W2ߔR*b!RU+ sG +KoU2Yg 8>Fi3"S(ϏTDp8ǤU(s:*V!$  o0p Ҁ DDJ$` dqHI<~GU9)Q .w*QΟ Adαei F*8<b$ӆPt# BI%0l#HP9D9^E>RAldo?oUVJHVZovp($g >_#)T$,^$6D9H!!3&~B1 siMFj3v 7CF##J[8fs* .$!nEH!dLPHPM0(nY*u̼\`[9@}JUSRIw -5"S!"ur qVX7G ,AqsQWQ;)tw##$ 98_CѢ$ VHX8l|ܩ/?_IT-G?4Q'g'$N|OI#^Ő%_q1dcM9ai#*pP1^(V` Xq, 8>}`jM~ze|Ne&NjKO|ziaH ř\$}2?w|AUZj]䆢C 2epA x I($99< @Q $Eb|~I>}]?_cu Jsn #/#ŔbU8zu -_RGhB@9@$19.<9++9IcIT?僦4}+[34\VPFb (B*J'*d0W?)[j$>1)#8oW>$(x.3?T~ "+*yld|ķ9g-Dd,a<99Xh' b%D弌}S2nU,Ī'=\JPK!ռ%%images/1AInIn728x90.jpgnu[JFIFHH JExifMM*bj(1r2iHHAdobe Photoshop 23.3 (Windows)2022:08:17 14:04:42ؠZ"*(2 HHJFIFHHC    C   "2!1"AQa2qB#$Cb'!1AQ"Raq ?5y)嫬:zhP{U@>O[YBoEVۊjHHIJU>0H̸' ;ݿmufw;CGO4"~ܔ+ֺx&ø-P[ΩtdMRJ a) 4X+E}WYi33pt|dwBr0Ǝg* @]P)ڂ*ĒcG`0ӓJoa=l=ti|\ "4ΡfsNjd+8nCU{fPr]')(Lgi=T=M]TM*h))jޡ0U!ecC!NӈmS kdiaT1<'C[Ut'u=]%|cMSE3EQ`Gצ6xq߹׫W*K592*rAG>tloM`u5a^lOpT6.d)ph#YuumٶVK .eKON|O^C cZA[bEYxi6foS:7Ma[w3Y&Z  Nr5-q<;S>=8Nqb"_,գX{>ysPlz(k)wl \'HQPF{f.4fK KcJWh }?c8FI;ߤ=,5AWGLubX;jl~CRQo :Rx cξ{r՟D> I!;bӡzLo~۪]֘ 3K=9U(VJuV+ ;xݖ8MJCM')a=\uܶX4,V1$qRNB@]ϵ)ZV1WW1Q@_?Sol^f*-Z<-12+H^,xq827+\E=heT)y9%!Hc3=V%CNMFJP^|&vܧH<`S4j\LgiUl&5qBTO/:;v+6缱L_)F=1hB2Oxwݗ?1kx۶20)H>G_BѣN ~e[O5MIWI.1fb~diKnꕶ@E99'6SFēzxϺ#⪞,qE+E@=9xջvJjbd=s4P-06;4S D($gs5ji6*d2,LϏ.ď4hdSCP1޵rnj˄=zR'2|jg.@I۾<4iW 'F;8'3?$YFs羍RL{Zb[.<`隷SRUTJ܋˞oFH]2uuk@ zʆP(F |vƫdvidc#K>thHUbw3http://ns.adobe.com/xap/1.0/ Photoshop 3.08BIMZ%G8BIM%}Ǿ pvN8BIM: printOutputPstSboolInteenumInteImg printSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oGrn doub@oBl doub@oBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMHH8BIM&?8BIM 8BIM Z8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM 8BIM8BIM08BIM-48BIM@@8BIM8BIM]Ad type 2 (A) 728x90nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM78BIM ,%  Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ꪶYU,u\91os]MQeq,q˥w̜-8ާ.at,1:FI lvvmaw~qnv.;}Q^ Y8U(cQA~[J=KoIO4>Z4m945mͩ;mu*zŶYSg7շ+Vs:Ss]gֳ7?ή[WPŹ>eNN7NfmoO'_oTo(}g Z˼dZXik]Vf}+ٶM\"N,^,eMuƶ]umҿc\FҩԠ;otjE[iu,uxy'1aڬWԷYm_ԫz쟳Ë@g9'zuc evc足UԸHt'˲ip˰9n9Ђ1~'»?&<}ۧiy~Nmv>te}GX ՝cSbTȣ[KIs5KVBv> E8`8 ̋Z7'igc[E۶?ژN1Hؕ?pϏէ}\6 ~9N^zd~bWSIkk#q[zٱ zWՒ(额Y#M;۶_*#9JRZ=#fW쎭U\>KY.kХ}SUU02`4kP]y5h l9n?ԧ԰qɲ6@(a9zlv-zSfߨ}^EWdbV;gnԧ:^31?z[Ȯڷ&2=6Z\ӿ1Α[K,iw٪~𛶿 ^0ݸdc?%QmaՆ c~ӿ"ǬkwӷؕQ:O/k.[s>FVO*eVvA /9O>{}O[HgIĢ8,l[~Xl9ZW}d^?˂,sumbCWMmoouOW`gk1 7uN>gmcKXs@˻›X$A;Ns50oZ?Μ>~?b d-OKoIs$>띾7>^Z.rg]oO c$GnGqF\-6򾂗m}x RKFAF_QRIw{-ohXgzپvv{8wF-t?~oGxgpj}_Py?W*h>+_W?m}if`3'͋Bοh3_$Ur/oOQ=_9>ߴz#gާGw{K}Xn7ńpٜlݿnnCC|1>HRz쏴oX7moпX}ILY濟qf$_7F϶ ow{t=EVϩ'~= 'ק8BIM!WAdobe PhotoshopAdobe Photoshop 20228BIMCCZ  f ! "1A 2Qa#q3$BRWXՒ4CHbr%&'(57EUVdesuy Y !1AQa"q2#BR3CSTUbr $45DcdtVs ?k2~jI%jO,5{1Bt$I*vXR뉡gI-R-/JoJkMo7<?Y U G#3gO|?DmTg6Q_YR}7M8'#<q|j26mvWf`WO,XOx)z_CW^5Pe<7 +b3o뷟 zW! ڱj7`ƭ <ܯ`?'W7 .I:w^vFQF DguCbH_M~rѕeWIXባwbdX78EEyҦ@ԧ-c n kP6; V`xQs=ՎGU??W!I[F:Z2id҇*.EfxR22"K# ȕ3verDPƝ~׿(S$ظHZBy-꣊(2综0- l":鿲Үd^Ū+KrԻ] ,xdP6z\O*.BޭkhV1[|mNi3zkPjkw+irW4er˖ [(&JC?Bk[7r[2dlIfNyI,Ny/$kǒcƻ[@̒ ĖӿϞ? VjO0Yr;ρ"As)|q0K:)*@#BKrmq@+z;3>V]銙Jx[ NJL%++ػ_=׮fDa'hhзm'2}nE} Rh,n3l NTׁhXG מ"Eڅ#uԷR7 |/ b3e3*—`qגK'ӉB1?zy }hL,/{{7ǣY+2͘՟=vF]VgL$Iڑ,(v,kFx e-NQj2AanNkzYm#g-EŻx؞܋ "J㻂 Lc,_j&^4R˝Һuxd-i/خ /3wdv`H kҥ1O1ȱ=荖-.c#ehr<Л;HHeñ7, f$K\i\[4h( }ⷚ)R5@Tsl(H€㷺iwj2]!,d}#XE'SZ˗SD#gKj k,l8Ҡq~:A_FK{-B7;0ӀC%Ugrь|`±xs\xrBK\Ē@B ݪ!b1d>5] u6WޭlM y9߃5J6F,1]V2T!is֠8bEoӞzKPwS=CSW 0Ks>SOS6ÂJ8{Ra'\ٹ)MԶ,|y0'i%Ja,-vKi! 1<\J(nC3+ v]>ڣ<jLjEy"-Wi$YmreX` Qϝ':0ۻJKW힮o KLk8C5$6?QX<ݜ4 A<R2 0ε.[{yUO_u6 {QeҞ8مmu(M a6ڦflI+8#? S!E Vb؃9mGsqsQٺ2G~kUؑ"Z0Vt{^FNְ)nू$6(篪8%Dgu:}a,[W\' $$v'wR߰1$rgs(u-NYLXY'Z^RwV9)YU E$LYD*Kd92*7s 3~o)GKRju"cKAl֤mfIJI,G>}kU0} <}w)k ;Gvc#TȡN_,rN u=]خ.~k'/Nx^ ( E,Ш̟>yCVk%.зZ#8A=ڟ3D: ʑIYvQ1IXjOjXDbV9{YX9Zѱ4^<_lCn%+h]C,;F;5ުa"2ZVlTܡi-TծRHgUՕ;I*P 8WVrJ9dY׭|ϝ=3/=ycl?q~>xc<Ѥ1 6睼iIVZUb`D* U@$seDFs=㾴Ƭ\P3@E t&HP#o1c $zV'{ud,~PA 9zAQ` X,Q|hc)>ӓI9Hz `ǎɔO?RIvnNƳ=Wg; "14^6FV}^I6cD),Ov  iΪvk}\^9\*R4V(s"Qb{Y't]ꅆAqT3dUf,??[< o>|U2A%y?8?!rjXwQKpL(iC7G 5D ",}a3ЈeıHqe:5S!ʥdrZzjKcB>,q(ڂ0dS# DZ3ԛe1X2]iI)LbUdc [g4H sϢ:U/}kH?U #)OH?~F& ?:Sb>{bY(į+A Oq} Rj6+N#@FU?ɇ0?*nz4`tԕF1U@ǐ? ?O?S*xIv'm{尦E XD/n1aSˬI%VnGpVHa< Qȣ+ĔXA4o[,G +{Vn? MךY,B1 b,E6%ܓ1`*^;`47c>C6@ȍGnr>K'G=Ƶ"A`k.D Hx璿<U|?=ijr *ViAU ,}ܷ=Ǟ1eA"{F \yއe &AE'FCLx_)XF*eZ5c2$">UxNI XR& 6jc,NnXv!{x>xC"^i[Xz $BHaa'nR=_AmC%0=&tQn;x!yH=v=hPZͩ;rE͔n$XJQ c$G) TWCjwMrؐ.,X-{[B6D,$F)LQĒAk Y@UOw $g֛t>3?-aHXhyT0=KjXJE[sy X:\_ݯ ƬezVI JA+$rd6'wc ;_D*miF2zRnlٖx0LVڒK#DȬ]3,]ݼN$O .ye|lIq^[IWQn Qb$KTd5S~7iCÞ\I1<@Y(Ks` zp ;ńVKl9㬩zt"6i&6Eړ0]&PIqnyq!<I +5/kk΃ eOz˓H>Px7#Bd[1qϕqWI V+f:W9їO}67D _K|s=9s۷/Y<4K$;I'ט XLBHmJޙ7}S,/|i#ڭGح-wz^[w:T%+n2qsMxihn`}BxFqwqePG"tmzwTxN{|sၝPbx1N˖TuHsZؐuyXҍ_U=ߝ+CXҍU1EߝOPrgrqS=W??Cs ñ]ĬC2^ $~ O_SojOGBՀvCC=mOO 7CP_8p>tZmk+ҝ0zo/C^:yyVi8繘.bFD-[IXia(6LC~;NWo@u+}M!a>ZsaM3[K ieUY%`;` f=Abf =EȊ<5)2>nm`E}9u_hnAުG2+QH$љR#i6*,qx^X_"*ڬ|z R5b56Esijޚb{s0ue죺Ĥ9 ù,?"[D#' tT(B^HHgtxw~X <o<=g?ɪl4ѶF(t:#ɭ!iX;l-!Gj%m,uA^YkHf=3JH$ޭ~ 33r}t3mo?JRzWc,Y,S(".3B1)$:*])fW5"mu65句WxS_G?w@V*pukmwSAљLGa,1F>$XE@Q= 6jƁ<(xk R8yǀ9vy0ɩM! x C1?#ǬlE{ϑB8f#ƪ;??@|5ejrI$F] @1p:([K|I͢-87cU"BSπ|#lH7=ڼcyCL'HO{19O5A0bCw;#O!RhwQkL IQ,!u >+xA;S'j?J!!퓹qLG!8ώH$~{ړ#XCјZ4Y9I^!s=)߳Q2lh; 2DѬG$;J>NBr~;sPQk V3,if,3/ކoʯgI'¤A0#jG>oS[ސe$9ಀVSU?}ە.I Z]~𽧏<`~?K8@*F ?}\[G?N,ozX)=2NaG=V1Yꄅ g+ 4 ' !ʹ?Y];#XYyx<~P[CZ'4ʑHXOkv&eVkp{c\??2Y4$[H7Vʤ,D2<|<<GAw]ZJ8&7dr8^_FwU "2$ZXc˺(*!b!$8#Ϗ9˔Ԣs(ڋT]??r>?+&BRV O~NFY,q1ce D`R=J$r4|CHXpA*Wv3ԑTHIS,ƠkHs经Mg>t{@M6'Iv;z}0mJ[s6eT"^|lg! eՆ׮?wWfԽn\]Qh/-3;ΚUc(EIdf O]á@1zwޠnhTg_Jb0 }/ q}-N4s{XGךV^4ip]8L?dV0C; fBs̻~Kէna=:>SAۙ)fgLV2\1K;V巉)a:(UXمʭH%f*H 1i?8p,*,mqѸ-ZK"Xl)Ь{׉< "\:Ts egAi{?fpKI(|Yߝg"Kac~6XlMm,0Uvk7r H3FC G.~+^415tX ="OĕW">VpÆofßK ;>k)k=q>{pG ω-(~EGB*#À;⭕>e;u-M*0NHƁ=Y, F{yP=UW#KhBK S2]<+$,"T5[_2/8$sǢ+QcX" )/ٮ#%ty2O3XEeN#ȾIeyFv$Vevv$QK.Az[J&;||bXcjL$_C: !Tu\,`۷R\U 5zG6OzZU,v%Z[&&VTHY Q#&9Qwb.Oe%!?s7o'6` !Ox+  }\iK4{~L SೲcxFH~92$ 8lf'Ĭ!bvn%{V[^"}u.?O\Q z㮉9(hpO%Dܼ-nծ!Sau uFDFm֣h=zы<$+0тĿ/Ń౥%Z|r;ũr-Tڂynӳ5fH dYeOLC1R; ,ArviF5tfZygI%,lXheI~JT({*OirXuh,$ޙYݹΰ[zp2yRΥ\In,!\up|ֲѓkwkݷWUa\DJ4C8jN$ B'$[(Gu86EݩKf.[h:ʍ?r|A!BƖhu:0aq띉v%,y虳fvgnM #us9ܾnFsgmt+[ <}yNHs R|t? ]ڟ*{WM=-+uO;e kꡎMU1k[<94?'%IU#8;+W#-mAʾuwU닣W<RePK,VDV ,,NS{H6앯]JO??ϣ_lҎ܏ZU|O Z.uqkTُ:Δ'j;wc׎lҞkW??'jwG[;Jr?FקzJ?\}itܺm'9K3fZSgmڅq9B3I0RṼSk˙UG 43H%?W|$qvsx㑗,Ȣ6$tc-ʹԗcY:uՃp^_?iWH%eX d;[i,y,9%*sNBHFE'؈96~ULDV+i\EceRd]!@5]71!-WC"D 27c>;p#e \X5ʫ3H?buOe~vP'ہjU2K~;MPX!vcvTQO  *FI$1|g"ꏨ ޣ6jr:fzrz}Gp[ffVer+C/rOr,n}#ʌjZooް6ݠvK?}ԠS氺rc{mTI+ 7J?q#D ©]I2lmtéu6oUc~WY[WݽeRCs@hFg<@ %,.@FU߾QzsWImǀsG 'z0aGoa"3VmGg}73KFx-AZ1ɇ^csFFf3Ix\Q}ޤ6CRfd2X ~ꄺӣk[o7MڿDkZ;nKUlP=\m<5ˎәt#XE9`="t`S_fv/[mI:WZjl>(,̝ }^V)N.&9s 5EfL}5e7ol[PҋpoXMګ̬D>[b"߽Y٪uY/TVe5j[ 3Uchgjx7)ɏyUٱ_NY0fwwoГZtmY[[ 5gL;n;qFW_ե&”f,`8ߗ){g\Fvq+Φ=}:36t-շӺΆ8YI1Y ̄bR$KɈ%x$e՚c;4zgy:|hTwCvh;SnGV԰xJy~7:N§D䑝1 õt}RN-mksٍ4֮LtYj?fCR,I")#'|hUb~UfBO#i%J]Q7.HQk/[ cQe 7jl Y]`'1޽q;mt>_xMM +ύ[? y;ܨT%ɦ@ֽ4tDSk>7;39WOz z}&S`6PcS#_y3ffU21&QWƹdW Ձsa[@=3οUCI.Eq7I*֝Im T8D**;ʨ^F2M3_֗}zfI]9mbtKvMOJjLc"k3Yd` rtR"D.kDƉEo6&Tw7'|^r׃"Ҷh8Q&ID|Vq(? U}zMr#{7u4#|2Fume ׫, `u~!" Lk?wNOoQs/Ӿ;Lg}ɤklteUlW2֖J9N"'?6:ޗ@2ng=2&6 M y#f@̔ӷ4PZlEչ֯ٶI,mmw~Tbq YA<>|ڴ5b?Aϟ*m#5pdF%2Yx/<>9 {j緟Έ湵V[Ӵ5vi]Z[VI`#a^{}Ea>ĝA\&ż9lmF}n]#61?͊а>Nb`V#˥1[.y\Pv iҽtc,DY'iU[qVٚHW~^Q+;0U@#y\\Ôw>Wl@) U/;gw'BoM:hѽWt߭ .I(ʲSy1ķ2:n)᐀4hwW[ia2{ɹzly>;cRdb`h(2q7ʱx )%O6o&wΘaOJٍutŪeG]_A{w 7NibrH[4ٯ/P;6OsOw߬ƃḙ2G._(%z 1'ûZ"u>?{ O~^Y` )Cv[,j>2GZ8:/ @=9xv.]N[:ASջQIہlⴿU1i._02uXlDaZ$!') wC .AZd;#~1-ƪ"^ I+Ꮟ'-+)֝*Q.42}xiL$ ^ 0VHդ]*Rnl,{Lf ı`kgInk+&FԳpRHu/H(nfGPkӡRc ߄j-PII-nljb`Xk\"Kv, "TC${%V9 ZV>FTp4[MY<4sG< yʆ,@cuoW3>| V,71ٌO/y4zgKFkF k;քhB,8ϢIf*U,H ߯:I#: q~g!xVs(*6,O7ڦ`/֓ g,65)QWڪ?>;8?#&:sPq &va\[ DM..lm~vbΕʿgQM)նUrmjړ?9m]1y|bĔСF cycF\T2q"IOhTǝN؎[o܏@{t)z/'T{gx;X|Y,Az Fw48#W)l;A22yJ #_|o ]޽-R|ږ! `](vc ^8tܤH1i>cAqDt#\{W\kVda;5v. ; DβcQ,]^VZFzp˻~.w[ey4:+_e]!b8's#)Vha1@8(#*p(qF_OI"fi4_϶T+MWm܉rI)WQbKLp&Z2Xzq2bbK\i>v9ԷogC߳-mn)cW'7)f,C Μ*חF |(Iڣnoy4{Y,~n^'p2S^jaK^qs^J9yMZIB%?*d!{s[򩳠=wl'ж#5._Pf|rE:TQ,^NϖR]dbiڣb,ښ;X|-w]}ftaw_o5f7;䲙Vh1,E2Xj+ř.ַ~Ԙ ȶ1>禞1:vuj^:meoQjT,ҽʦbNSZW5mBw+ a1~=2P4U#buCC6/RuIӇEzN{kmu[kzG%ͥ p٥SXn:r2=_N/ns9 zQguڅ\Ʒ^9[f)W6+羠kHvι fuGtc;3W}wi6ƯC24Vxz-Zk~3/%er{tF`7_m&uJ{yܽyw>:!Ҹ祹8k㤕DȨ#U $ GYa!4 ?_| m7cfzWK0{l7ݟҵ.W 9iî4XXg$qA$PR8!qHYSbJmoBuc NnnUn55[w2WutC!ڎӴiMkδqBWTM&3VV  R(+Q"TvZLQeyVesrBȑαKL7=|13oտ뮮z]}ܻ}GDYl.KR h#kj%<,G:URA#j7ym[MjKWո $v<$1Eh(PGU3Yll 窾Ǫպlv~3Kj6AymhB3Vs?i)YuYvF/m N۵ѧK,ؽ^U4I8D7IN`1Upo8XV[ 5-Oy9#^&fERAe=L_"ly")(>u2wۿMl0x܎k;Tఘzes9C{߈Vn年Ə$Jʈ$JfڵoR^+գJIKʋ$3C*J A*PޥJRTz+ޥJRT㤟rR*\Qmm+vGr4Z0dNO%R<³yx|| 5I#նꝉ kQ I/:jbU go,GGga{I n!\ij; %APcdӺ bak1J.+gVSzih׷#5ᅤ$:HwHiFN=,e q;[<~I:";XDbX=Tw'2OjjrٮLc38dNLr4Hyh^Ҭd*Dk:5y6Ҳ1hB /(?Ax>d E6L,~Zc 0, 'PY$&ǚ, tF! bIvN9bwr(pI_Y~(mU 0)ȁ>9\N*խkQ5C5$xj1?l|Qs*֙{0w>%DCh+WH ʕ+#F9=9oۜaoQrw=E}7D<|rG>="xiLnR} 6'm_P[[Zu;#G)iY=GiGi1#>HT׿C\Y~&kާ`ٽEhO[YR]aB|V;P.ivՑbV"̊rSpӂ?ٷRJ75&JloVc}Κ jwee̬ȟ,a#o̰0*v3X_' v~տSx?s-i:X͑c`t~O;{pܥCTr T8?T|ȲWBɞw~}].?L]Yǵ7D{մۋ^AuvOS'EQ iC-Q+a-m {7mnk7gwB\InSBUL?K/aߤō6W2wuc:'h_mK#FOwIįZ\r 4w#pA$Kmz̆E6 GagHZe[P`owx{>ehW\lvgbJ8c2M=^uĶk2Eٍʶ-^}5醴맦m ]lkvrՌnXj3$ٻTvfIXq"EWt^G |Lq㧞HZZܿwm;ջЦڜ=Zgw ٌf-+rlH]߅ \'JN&:`U_JOooC;{C_zy}5E7k /^ ꥨ߻)졆i$CacRg, JL~_][K.wXKKqIt֘m(ѫZlKLM0eBp0HwPAk.M禚Wap=:vmwvrޑb"S{Rd=zONl;Zv]O0Ü9΢Ǖ;T ]uŢ5׻C{&azv!bLv'RPk[[蚪;$ ,/N Y?h3=[ܟgvbK{q qsM_(("-<](S*^dBV瑝0vq\-"qNNwd(-X(qq{ةSr 9{Ama7KmO i6S&A=;X,Ei`cZS7MVu2)j9Kj)(xYNa@|wݯp VvQhͶvΝ4 E];{CRxECvnKV(uĐƣ_ЈN7O4niQxWv3#{{an,fGo4;ӷ&ۧ?l*<)y?[LRV!2mI/>uhz-=fmHcWEb2yNǍrHy6U v}[#]=WX7ff,֓Vl2_ybǃ9hҠ;pP#dyޡٲ'iXH$d"DDYx $ sw[mEh.zjYn dk1vI|nA0`A nty}Y^ R4a)BcK <a]PG}IA _)*~27 A~IDkҺqž؍R{|1+`,>JÒDr% F-5)A5f!)6 ֶbU;0kq`o&>OT^J\>f&8#cž{Q30P>yS [UY%gV5XkrP1҆V0DWs +I0_ϛT6W۾~pya+,=c,#f{T&TlF>|~AX27/̝_ɯ7%[o "pLЩ & bzlG}[Cc/ XB ֘L< տ*] mVG,o*Ȇ6d7ttu?WR9_,m>=JR{ԩ^*WJh=`o~U}1tN ҹܾd56]@&J8(XDa%J=#J-jyz7tt}_J6ewp뷺9sZ{9qd%j*ĀO]8y>J[ixqӝO{ŋOs7j28@ZM>O9v&Q7{7Q+p#ݧ-/y>[JpOssVݹ]d$S#qUPi *Iz/}nloW^ Lc12$Q'qZI"(- 1@ kZ--7 +W"Ca8dVj+ VT~>U$+f {U]'lV9&7m~O}~Yj&gaP_ZVYxjT*|VAP3ۅ ӎ#J2/̏@|x̞3O䪜A7tE;s5^G1[Zs~ДE=z?F%&H@e<ŰВ'SrL+AfIZVTIc$I "ʬUҏʭ c^ldj1oRDRH'D) YR{?U03(VN)ĩ c0Ay>>Py3r(ƭ܏e YӼZ6e`S(AkTS4bY5pWJ1q ?iVӝQz3V(EjrY kt*ӆK)8=㹆T) l~U@"ARKwQdaR׵6'`0ImXFBWiRI;V_dN{o }V4@R{=ǧ5&H諗sӱQD4O_]LxK41O5ڶ$ԃZӼt\ 0 x x>fk:ӑr^gI"Y D;v| ¶(ij%(ޓg[ ֍X4SlX7dݣc%W!F*! b9V>vR3+'=Q9s}e5b kB#s G“FIAVp8Ox"I:\!Uv|I'?>y[I'}= m'P@nTx x=jtGp>4̠jhy QT}x?ϟ?D lڂDv|~r+'BcX4/hӞNݶ+ G*;})ecͮQI1ģIGq%T?Qザ9kΝڟ 5E]@ӗ_>pإĢ"dfq8|< 7L{mSTkCgK u;Z6eUAfkczf#V/R|ayYl 5ra(*6cڋMAò!xXd{ x~U+؉+,V?=YQ28׾)+bPf*G4ˆ*;,S~+^T}C*d!H xTC\.[&^dw$ʆґv (!{[%F`?<}bvjO#7v'>?N-f;N9EԁC/TEh,F/ ܬ +}K_BU>">u<[T-[u^[Չc++ÈۂY"HrXf 2XQ|'>I- ō$Vg~t܊ Unl/ Y]b2NJ2eg>DI }(u,Vޞ?GӾ7^KcwS_G.45XVlHdv ~.z߾كר-zԤ3޳C@g2@ XbR;VMݜ@bZnM:?jCzF.{tK]At:B.bYCA3%KT.XX@{I,0Lf~汢5}?ѿK\2us!ɂd] (دJ/Gvt@ 7:VOrvӄwd|g!M[Z]=R;䉱:Z*e8.} eE/DzOvuXgzor$qau~ ƲWY9|QG,L7- ﷿֭5o7|}z~ӻN0=VjOi|(H?<1#-5hbPGQb^`fg;1XlkWѬ޶?(y%~J"9ljWj΄:S^>ShkR 5I<=34_$@eH pJ>ܩZє=8aDV"<.ѫ%G9,$цPo[2?]񦨮tբޠzpl`()k/abp+8ի=T=gOVHh Jڽ]؞zXb9"0z6[n6Z.$RYkR$3JFV_M;Վޭ;Nz؍=Ikjj{ISMlc>Iaj׭~}DCoG,A#Ig[U=G6QuqGT=nkf:mUa24$hdL4o܍Vv(Ѯ.o$ao}G4e #2{/b5[<T|8ߧudHyΔk\TT8ؚFԗigК";!*PFPyWF2@$nmc&l9A7>_( Sݬ$5 +Oσ ei`ޟ~ӣ,=eRȒRʧWc!;,ʿh'{xV#^vSa/T>[ҽ B VIeφGC;|c>^:Н>ZQHRĶigoyRjS9LuӇHKMgY_NتxPO rI忋j3`n4rQz?b(*QjMe[5S"XJ?i#,$ {AbI10yu܄q,\f;u-Sfn%+[!?jD̰y$Wύ-~>I,$FqIx,|wxǦXCndRQI 6!9kd'l?vGp )py,Ex٦ 6zdһrp&ӨY9 0:IV^c #&6,1L@r$!aټmT ,[K؍{ͫki_Gǃ^\385۟ \?YQzǃmGN9A׺d/(5KJX=s)QڎNs?͑17g ٔkrXrM+1N뻤}eIaeÉH[zrsz{vc[j %K 52:@D?$|?)p1``2潇}W~Wn)Ӯ/<ΑF h]&%01=VsFo[?o!^C?|Kxo%7gq:4wWN.%.%-!XX "BAT7iY}bq\^L+WRb-]΋/DMúSAldPÃ؃k؊_{O_Gbڗ1eaqf/z'-ݮUrs3(ƿĭruz0dXو[-*Zg&(tu^~Pܴ'z4=;m~tSݘ^hmYb{n29O$YxuvZ.SU,ѩE0D%ߑ,?ή֩C5H#e(he&9<2;xN;K$럇maHE Q uj4bgm#JQ7pB %J#w۾2* c@QpIYX6. ؞nե Z*a.< 1**J f*|)A "v:miWmMbsO.YL_vEen&}zȸF2[V;]H1:WZIH9WS}э ǦTQ$A= QIW Xjc{RwH"_z/vG+HVnhBݫY\ቊ%MO~]꿂u]I8RH<IolY:f_񌶈K?5Nj1jamd!vx4EfVFei9edRQC Age lmM)VOI|`Mr)lΠK 'Ld$W6wĨ薬"I?$CLZ%v?f2Q;__Id-XesdI,Z,dHbCTWPLN[07nI٦WN.7L]`f ʩ.9R(#U$XoOkw7T#o{܇n`F.ݙIH_grYry#ӆ3~U^qﳯKxtF#iFDjnHߵ\-؋jSl qa-Yu=)` oPhY7qqt %dPye,x\OYm}^kvu]V} 8{U,ڲ :-pАA'd;*lބk-u ،YmZk έ2+Kx}?? w__zWΣz]'Hb?A wF{]t6Tsv}Vaܜw$Uɪgw0?\i|~}8vR9'6ힳn꼞?^>2M,2KvH,}sGkWwՇ@w#U̘ !D16Qb4&;o^;XLf4휄V!x$I%CڼJ 1R,A#jp57c25i#xH,XȪ'NwP;idu&G$ k'Ym 2ly1{.uCC(&Fgi"s $5+\f[9K=C5U/qڋ-L5vcBQ";)#^A&!3]>u*uF:4 FҞYT%c{M}잵h g6g g.Kn5ډVdHǟϫC_޲t}:<Fq*3vp[HfS})цt񼺟}FUgۡYLuĻi),nUG)Vt*tf@p@^}kGY\_O8DH1A!@ r!A6mE5{jcؼ^,a4vG%}-T}1V}:sۏM>I7]iX ?g2Xn/#z{uԪ}쪦@$bHOg'%hkF<-y[5[k!f%t^`4# 0fk+$ou&XNC 9i2Z˲dm={׽[xkFjj ,mIj2>N1_/E NgȻsTx5,V_>Oq ]Tc;?w]e{6ٽcvK0s{!X[䮏 wV!lYxG^GXuZ$T[m,=҃N]E_Q3 cŸ_ϟ:0AmLayEn!`,ϕ~AүQ7 |kn8{Z+.qnq}Am(bN!Q* bNV*]#QM .m￲Zu=ݩWmww~jx*W ֽq#vrM}X*KL3>0١g4Fֽzo,TG?"WKmVb8vi|0cVX>yLL<Ut)?{ߵ;*h+l,>mYNL5Vhѫ pFQFڝ勇]{>dM9yNPM]qp_3dR-x^Y~8Q BAv:{ deZࡌdg)ֱ>?d#hR>JqCH}AS\+`/qAI\r$.g*3[>zһ7Sͨ6z=Bmm=Wn^ooux|C%Ħ&u yI{Nt |N5Fs~__[αSOFXbG|3 $4SGMq,zF)+)o:޼P65΢wjy5iN>=i\MMxZ-A׵"_WO$Wt^M"p jFRkIۿ^z]_p`h&F rG?a8o7?cQ>3lm6 ([ڏMXȉ֡ZH4*;;w /sUW  O2u׾ZԏF:t &yb[Ѵ(ʃq.@!RRnZAF[v0;H=30z}4zr>i|u+>Aǯp/P7^*WJR{ԩ^*TGJ*W$8rQ-Sy X[)dvtebD`d6[=k#=<.Eg ,1ZFpGžҝ(C.?-iڒUExl]I |dv8 wV%3s1,VݞНHiKhT?"&gx9I 8%dYnI,mlqM6d˖3s D9RjW:[O9-# Z1JWKo vśDrVIfI$G+Lm|enjz"\{>!O1= CZXŸ:S K}jEٍg[n[c+FҫVkMCc|1^Xw]OX\3H63Ib|*ʗCF%p0v89A[9A&8+*Bq8aoΣ=u0]rp@m-!cU_49C>pmiҵ--dhe*E Ω9b,?k;xW qv6_:> ~Qm-s zrJTyLut5EdnFIRUp[q (+B٪PMmUҐRcjz._yBK끄]=%}kVپӹ+jՏ뎝wm]$iqD`#U<2H17 8I> { 6֑iv %gA[,)d1cnQp;ԇo- %PgZquعqzd-j1&.h$Ƚʡ۹T*@VaFst>߇ ^El&zz"_/^XP iTrP?<;NŽ{^+>LdB!Hۇ펧ש.{9Z5rOK PװYd!E!qn%@ wѨ[ t뻪zEP %F+kF574QsSE1Ҭ@#^'(R?>bX}7,,_PL]AiM#mM妖Lvv^HRx;ю&J8y `q8GM}{!ַG?¤_L=$$eŞ9 u! f9ji-Y ݆ʵZ[f~2ъ:eQJ$)_&sypoA"2p>:?=VKsuvRoU^E_Vro)j:[zKFˊOط - Va ձaiZфb9?xShF×_Oԓ<Ћm#J2lYW u^ifRڝݍiC۝)2 p\?[iZHҘvbrabGDzuӾ`7IJJ(, b@>k7I[{g*:=JOKU[Z)$pR9pUp[?fM ע} qxBd>-*!#6V,l:^qkм}y8iGLF@]5bD=^d6ƝBH)!kԻ38>zlvl}2N͖4%xvOo H`Z¹zI\_ UƐgg2PH0R[q {n[齲Nf |>\XSEcjƕ#'#VcXfc̜{&Xags$Si2_DH1`4PK_6gPy{H+RPK'ji;gtCJU8O0?9.òu3)SzCLq7֐5^tpE;b)#IgsE$y!G>q2`-0K[C}m3 z %[j4Uӛ͜>?dO|K3{ƿDŸ?IZC ך:5W2y*2g0(5'W0ٙx#~}VbGN?eot#YdvN 29b.2FTlfmZ3H^n.;Rג ^DbGCR1bp}_F,bcT"A S#Bv/uI[SF !x,ΛJ2؋/yH ajW?\ ¤f˛;)ĉkeRi~޽(j(56g]_'zu(WJ3las˗|rG~7Rn#fB EI #1-m N7Z+-zt -IkL'wjU^PV>Z%#$71Ʒ dY,ٴc~V~)cD8kA{Mio^Y'0bo FHe_?>,mPȤS?( M SN3Ȕ.+fr,ǒd HPm~]L )7">x2FY4Ď y`x^~Gh'ۏh.7<_՝(-9`Ec`BbN[oGEadw'm(C n?GW-͍dFS  Uqfbkl 5y V:YЇRGᔕ#^VkiRS}hj= 奥wf6L}ÉɌX31疖UWQ ``[4hsWKN?t1u_}Ch`Zc5˶ؘX_Rl&JRdnYu k+nz(/kֈ}5^Eo[=Ϫ7ր"rI#j.}h6N^4PlFXX٣HkVWJ>xtpT('R.@kNb|jk>=5UmVu7ս gF< zr=jx #QT g EA$i[?Ǥh{v6t~N4F u.ULHIv9 `EKv՚TFGg}ϟU48~uxowk߸5M 1oxFđ<;{ -b @HA{EY9:֠a@a'`\FI!TTJ ]2EX=hew_)_!1UWvr? Ϟ?O]^ qH׾ *DA@u` Аtc4o:`9Sׯ%U.}aR؜}i^5fEۧ-mq3˄q(,TW%,TxcJ2C|<[zCºUX'1`i[m}XvkWtzzQכJ|3vS5zGRaY!_6_9U2w(ʎ253 (k/qi |"Ec c^\zQ,E>LN c;#J0,/`\YZca/}>m1'J}.VAws:OMv͓|b6Uj[NWhI)Qם߆0("lb8\Lj:ĤM[WJtUO+6^?;Y}G ʏJ5I4jo'^gHc=PX k{#iڵ^Lu\MC9ڞIVVRHܕE8Ʊ2M^/xٚ kst d2W%5Hm-FIc*<$/1+HnMHQ.O'k+I^/]RUda+bǕv02{P:$ ۞JR+3io:cI'2 8eUfVkm}ܫ~ڙqMF[2/uExexp'SKaQϗu(A×J|oa0ZCb!΁@ XX))2Y{v sm;W){|n#4l @EebO 0!KpX,# I"@ݨ’.jftP"f H$-KޝFCP5LRܛ4%pgh *H>Gp4cbd;iu~N!@5F?_HoIA~>AlI3mR)31} H]=gBW+dkHʅRY=z..8||+[<; ꧋C@[t;l9iUa~}m#QL*[w3vUqZI-#*C!{^^>l ~]oϗҾ=oT9qX8,і2HJKYe*R-r 567ntniU_JQ뾣>b$X+-. o޼H $-՗Sr{ " bThC"D( bVM%)Ꚙե;Z8Ch$q'ϢN\侇C$KZm};C^ -k6 gƠ6gQfrYx4α:sOŐ%0#ZSH52k%n9rMb$#(&I?a#q%5y"}Ih /t4{5%Kjf8sSؚ´JHx23r>} ~KWa8 R頑{2pEҶs{[4꛸LQi䄻q䚊ʽ\(f`=*k폶 IѾŚ1ڤGxO=gﶷju yn2~vwoϟE5z(n@7޿%XKTy/jqIxH"[q^Sjw7 jTw$c"{:jD9Z'Sm×w~ Db" $I3z[e1Y<>gq)ػ4ֻ̪r2aǪCN}/8uzU.[Ì3)`u֛A{]Tt}/kK:ښ {2'2$'`uoWWxtWtpˉKٗ+ٳ[_u/kmRjuI{&L*GI"ʬ@EwRfGX,`sr4쯹}3Åм3~h]/uO^ۺ?=99yk/Y^~dU] Z9fxd*!UAU!:ۺAWRq%Îԗnkz ڲVfCԵ%V/Y<G(cZW aqe%MБvwSQRg4M$uW+<2D@ElV6N}SRHL)!/üyU Nro,A&6KJ8=cVRwrwѓq}4 lM*%[dVS|nO"5//'2=$T<bnƵXiA"ȄVV#@ʹiooUޗ(vZ闧۝9WBzH(n6:/]db_x#̼̓c$v+縛`tǺة^Ua$ss}BuVi,wsfЈXҡpmg$0gM$i5:'HO8lÇe8唉zvs[ }X\Q[ewS]{Ӹy_ջjBZ:VxGZDڈ8AWTY-  O{<~y,P#}AͲυ <`"8;axio> $|SA%zTW 2ўiJ%0<*y ?z_%[1oWHFSke+6__ܪisYs *l} V 2.bIu'>$B~,?_]wC|Tol;.kC"=wT6ͪt<yw'׭-"ݔT4ib Q}f^'CH-k7uҹ1u`8Vmm DW`T}IΑޝ6Nimvki48dWB9Rlc$53O1Ȍ߈avfٍϡj-< ctMe<ya2Ŕ\capjW 1lF{r6py報D̒@Ǥ!7e[WrXXp{V_%Nݲ]1mhm}Z*-/{9w~VIA>&c"!ϡ>#/p|>&> FQUv!@#³>{ﲸКSjo&=]+!\TRff|w.8,ÙU43p-HSvi$_{GMl}~9矈s#Mdo>ɩ~997@{k}{p;hIݯڍM\/)1HlENC$)$ ע>x&xlʸ+˘8JC;fޭ#k)mjtNc6&,@kbBK-dGv8YKK}u:;̝vsX㉒F{ffsbh bauvl5S|Z/\.͸BK^œ0W1sS9Q\ׯW?ڋp#~7pXepGlI1Zqׁi{SNU*mӐ |=Z6hKV;_`[}Irf' &#ދc8~7OтF.VI>;^Ժe]r^ (XTmָi3?KM7n9)n9P<,:*Cz~|nWGE`:?$wf5\FAK*/ŹevPN(s'<ǎ l8m״okW̹ \@/JPeZyy<QjL_83C8\f-k^VfN壻ү_PBcN$rB )2aEf%`SFd"huI%4 ϐ~5!e b! َQΦ>>47*  <u@?O8=IcP%9{qW,C My6xHG % ճH ((lTYu or>0]  fMtB-ӭo3J9k j9*U%{RZ(*E! WEGwԲ]W:81Koq3~Z-Lj To=y㛇n2a(?&SnǞNphP, {;;%{lnڶTv{~]gfkm7B:#>kP:8) Q=KF[M8|fq'~" ekd" "q{t"c5*CGqxsDT3{0-3WRþuTԿ·GjT~k[Mġ*zغw;X9&oa3x|zGj[oU\&GNmVvau-7mCTĒ=U<>(\εbz?Mn $ՙI"T"QpbܼāCA)/=|),qB9Z~i}#Zkbtv,;+uIdEb])>95y,Ig7m'lz˜;?7{p6\hƛӸajބ4FbFـ#1iX60b@je^TkS=YV_.rԉ U#(E^X4bG_ 2GxεV>' Ld_Zl4vlw_z#r;D߭IAɭNZHJؚ')y^x.,oEx%o:V1{{sњ= tv5VE7o{nN%'s~5Y$Xk&;pX)f5PMk^խ%]"2./w1__Q^_? i'J5wI @]PIsR?@cVOC&O앲A3bW=ߜѴZ { ݿ.O^T֒/ܪkΝ{яO_]At%֘8֘T \Z3'|kܪH^yPߕ~yѩ jGW!_}e7G 7Ѵ]%@AO[KGWѾ1)2[~9OILyOݭ*Goİ*4)t"9-&.pien֦ ozb@ȇ3pG wr;}G Jv3r"51FUIђK "~u/L%QCkX6ZQ r-KTJER̴jvI)3tCowj%MCNei>u~¦>TqbFR(+,GA1BH,C&G$ p XԂ=?~I5pvJqTa&]E EGܳN'h eB 뾶^7L8?GFx AWeَ EƄJ4Вë/ dԅO+'x'< xhfmRT[hP81dj70+:#2F7}qR:-޽=ctF#Gp_suEOz7?J2hau48?ŎV3O0b90cXbpx^ġDP6UQ`.6Ԓ{"ݬEeuɩZ-AF I3y"sY#f I8^+&1RA`4qn:0MM'wA1 A$i~kL*L֣UI;{FܔKp=rY/ C+,;I e!J՛e ESZ;($FH$h% VsqOic.+ɥdÉJa(t)V8XL,hv!1:ۍv0e#.ir1;k,n/7 8R8@UU͵&5m' W'sM-l7|WyݟCC=GᣒɮuӘʯtp^Xvq6cf4>"0y'7+3)1DB-ްG)U=~,{ rԿ7xo9-kJɉcxFXٵ-Dl/цH$;}i1B CX<}^ؾ]=qC7* ;>БzEjMG?V} Pi AףtF^v 9"=J,-deqz9~;\`&mFs/uUmSg>8Q]R`ҸIGHr ~fygO}d: eyg@^U7+5ds9,圄ȱXJ$ > LHy8t!U0aW[~bY[=$S<گn3qiȮ&^Іe@5<<J }.h{67W[,WmG$rz 2u( }4:M}rz\j=M~T2FJh։ RP>4V1-6יִ,g)6Eg_*_F5D Zwsdkfm]/)9SmY. $P#w8GfK]ބޭ#z>ieYr,^JR՚ ugXV%L?{q4$cvUi -Amw{GS.=BڳHn׺!)Nh)C(Q^FBLygtޱzGlL,SC* cM o.ӜG`9ܸ N~ 1w' OPbg3\[^V;o\γqMlwdéT=1A#1  =|6R\/e5-&/;4ܖ i~I 1|0 Y"(_Sʷtzb0 G C(,mM\{ B9ԹLc+ K9bƠ_R*]c V(ܿdp!~XX7jt5+cO143HQK1,"Eʪ6RGRb.g"VK#>ҾJ7[KfHLTy#EHqa.)vqa|^;W8!|6cf֊pYyi[.)T`Z)7I;\bu`x#+9Z[H^`mncn9#k+ ͍,ym+X}{K+p^#-!4c17̭呂{?AQX$' 1R!H㏸(`-}څt>|IyU s"1F?oZìŷ+xzjhD#]F/< 9d$p̅Hy~؛vmބ!{*Cڧ#~>~|nVUdOa,UcrO)ޭ* f+6I$R$IF),LV$y妈b{?J;+28"bnAbym/uHͥ2fm=5U{O 1Ho\\rqǒBvO$ض梋do+DxaUɥ BQبVe>@bA#m {~~7‘2ZpRXr*v#T'ğ ʲZ FVCj2ܑ#PǀX;~$+?ޣ•h[+Y$XY1C ƾk]S{Xuv[O/S\ދ(Ns:{Lb,cp9D/$-X rg`gJF,5α#c&eU~Z^] 8}EVkjuNMҚKUXi>l5j@,[kVkIQ7xKT CoUi_P{H3Ypq `7撴ΦNUdv]vSpYp9r.w3o*E 쮩V`|nI.= ODBS6vβg hsٟfuJ^`n;`G9gdw]jǺfcmky,X{hz'THebn;H7~Ǹֵ ڲ-K[XK6KRNAѽQQ>bF#Ԋvj6'vMXMX'pv,,9Y[Ixll9%^dD_]n?IXtgJZE/ME]A 4ܣ"/y2\*xXE:p3qO L'@kՖg#ϲ>1G!e3q>rxO'P3m݄S׿O5vn;}Yk7!K[8oe,0 WU6u|>>BlnUW'ȮgA<4p<ڞőgT'N@!I 8,j4?UvN -q]ۂi${2T4F]R{K;y &, Mo[J*Mic#fL}$ԲMࡍl^veїTQ4,= $P&6ͨSj]m-&[IKǛG m7BmG24/ )"xqu s]E/FGv|a$a, b2N֌}z$fUXFx?bX;์Gg.᝻ػ 6Thrk(s 5XM{3hXLVGB{G^%!NUEAZ) V'Ir5b )E4yJ+;&ˮ=ԧ.:/7$3aK\HR쪒 }#BRA%)dҹ}}2k@%q;ցGdȱD?@$+7-p>vP;+Oj8<=iduWe={H(VϾFzF^&ȥm҄ 檿& KEcF}22AR#9?ȂAE13 r,V wrO&0'x4 S|M:_E$Eg9 ?yb47FDv~ @~?' DR3m^%IuDN Rxqx8=Pﶾ|u^BD)~XWXdY~cOam76#F%ʼXKxVĽ r7[Eu!ێdI'w"8H7cB c-6>Rݦ Ms Ltw1 zҐIfE-j)o#I3A+y ʅt*݄cny4$m`{Ue-&AjjbfEJhn9c䏴ޮ O?9\C|ڃmqA.7]ΟJE_xdSn bPBmԧrıi"Cȯdd='<#m-?@Y |;WBP R>YLj:X%ؽCOc1Kvrr5[ hM$V&0$_4ݏ⸬\C*UE͙ X Jx ^ouEB~<%@"fd 8 Hpx?Zԩ^.jPCHfƋ  )%KmiB_΍^I"x)7[vlQĿ=F}(7=IvP|@]2ڑK-$|I;( ʄ֮RW$x$`6mZ:SΰQ(C(d$"۝ &RH҈JB^#~=fPBd w0g>=l8,^痪#‚=0qO25e\*H$_$U,”Ȁ2NۋJGEJHc_iNlѤb~H~OגD;Գ<^FGOBjL1|_|3H9FϤdqR0;9t~fŅ]yD pO>uY!&A^0 f:Ӯ+vi%B%v\d <BG_=c@>ZHukjnԓIfäQxfXF"|+e$OI ޺dFRf]ijIqg^_ֆ$TrVu KTx|iH7U%PJvKJ_t/ʷPviyf>?4! gAvT_S)/rjZ^Y#1 PʽqČ8} 14ֽU?Mljf鎳sLdhh[V)\+#Ha2%hl6s?;ZoUEfT_)Rc̵;W!e;"brU};ײ3. 'DX(jGƼ<Ǒ֌!,W6vfƬn)D*"$8"DP8?dc} SOW1FߥC$z*֐A:+,G#$>[C0rJ,FHR? O(?.-b![p [izh19IPPT ?NO*#n$m^vcr,Ǿf/.ث,"PXf\b* l,J굅VY>`D$K\@f!T>`5"xћRA.HZ0 㹸MrϩLˉHs 9{ڮbœ1FLI0>}/Hż+vO$WWuv5gV!A?xY2թ9Zrg])'gަ5b1 {N= FDIFz~O>UQ(ۖ*HQ;1D 8Úz7;(zdv4jc55Ϧ Wa|niW,r `{Wȟt.'{ =G\ىnJ9eG3 ;IqϬp*Jlt֙荰Ũ,èk-9^kRG4"eWێxsfk_fLbDZ[_4o#8Gzb5 k.kΒJƱr{ؒр3aWaI 2I$I'?Vwaf{>6j>"M5Ah[%Z#o^Ő$W{^(݊*d`7Ow_:=;kx#h᪯ GHb r˄vSc”TQV:*^(3a8E(-ME~<~=kQazSU b1U@@@` qTĺveOΛ2 }_wJH?Ii?fkPK!$87((images/ai-charts-250.pngnu[PNG  IHDR2PLTE33޽ݽMMCCWW--Ԓےșՙޞ렠ҲȲƃյͺtt򭰻ķӞެӒӽыþ㲶ĵ޵ǺѫһöإúꚚjjXX̲ᦱ⣰ﹹûcfnñypwڻةéyo|ϘմŞұ˥Ĺӹ͂ӱh\V滻ªڋƩRU\qT𖌦D%%jjԧ$IDATxH[W#B~^\B?f 4AP>X1"Rc,T[dU3+PhXGb\Iƪqe2i;bͮXs_qN{ &(ᬈ8p&/CIj,2"-Ѥi꧲2Ъ'H+%B䑜~p|lx[G/M[RQxy8p%v}{];kѯ-ZO˧[:/L G?M+ǖ?%f?<k\\ ol\'neJl!v6-X}eG>~4ۼ/7nƮ,ƽù o7bGWbkeOA 4]%pc95E,mǮLYrvI=ֱ t~XˉᦱK~_|LUxW y\Y^[]A[Ӗe9òT*hpux7mjٰ]BDִOtM(ACt&su}櫘UMZyTjo7]k%I&"vAjj\tyL>]T_llAU/lP\ӖN XH)N%d&@!7de5%}K !ۊdlk~ ! 2e1(vAhI輁fz $UB gs\0gC7H 'Ko(` ]xx5^SS'WU$]ivuk]9̾ 3m V wH"Ve:A_Jb 8#ނ.7ڠJFl8e"r&-d[y۱1&T99oXe|Ug$C0kQڶpz,ܥA/%2$,;TLU~!er7L&sё%t(o_{P;KQԖax"~=/a5NBͱ [U~&k]A7"07Dgǻ!ɬRdȠooYLσYa$;'۠{yrp^C;-'W9tYz #sГ%J#*R\.*/D;)]U:(JЌbPD)DbqlpNM퀮3.fϏdGd 9/SJB^V,F@6fsGOϚZgj*JeEbn' 8(;$r錺j|:Q\C$2):(B!1xC%Y{Y) ]e0 "H@UW&Sd4F&"S>Q^7i!oTexD (I]r j-яSyhUz;^ Z?6#afG2TFU**EfmȕQyEzKʚ-;w1q5j28,bdeZÉn`4Sl%*B TE* *~3U쪿;^=n%5/}9uMKwl)=.=AWd!}NCP}ps怣`hrufeXj+/e#{ebDebj @.UpKZ-^$}od"5hw ,9ҥQ8P̬]F;EۿN% Fg%`?@3D=Vd;GOvƿ{E{m޼_Z㓣uoO p¿U^Ur?̕4lp򞶤 /?A?$ br|[]-Xv |xvfwY6_ >% T@6*0Hy,]i@گ؊Zi,4^~eSm1>f3j|LSp ~B4,_#݇7_F9?} cvyyȗg/㛞5eW;~n_ٓ 5_||ʉ;}JzGVA yfɳoe}nz Hpû0^7l^ L_9cYXM`;uc:}n.`lɧuØdg7W˚Vx.LAΧН_Ʊ~_&}dCZ|^c v0@5\2oǰhgLy˩mѭS\oI5:- Wqûeu5AK u%fnvW恵*K(.iկ*/QA bNvq*kxA-J8;0B;Hm*6Zӌ Qx@"]ATz E7|rIMkԦ^A~I'[e;::gL@]bx9^*S@/]r\gG>@z}JtQ.q?SGп{xA]5(ćߟ8ip>c>qw3mo*:&4|PK|xAC_>tTmyn-&# zߞqK\\}qJVK?ZVf.y~.6冾&]ҙlv=q\m Hܬ&%rEE/Ai,Gt9A%_en]-"G}yH;k\WO-i {ϾrA_4^ì(t?1 Ss?Z$GDI#mN(z&$-=JGfMar&罢1zT.g,"I{CϋQIwGgk@"PJINdPTѡg$O\tF{B7d^5'tQtIv׏ޭa_WtDu$<ҺR c*mD1<.~LSìRqֳY/"C%-~%3 5^|zEtI.A 1"rUD,- ZZKPݾ$r3ZJtVRtXÇa `ժzdryszc?X{bF_G# [6OU>L3yJ99T2J@%2gϞaxz ) [gcDESd]pբ#EcZ;:MyYRp$W(zXՑwtUA!)U=ztXoG FGixX4SMM'v}-$&(Xi_o 6!x, cW{2 =tﲉWL\/ Ie D*uFhؙ)z0'9z4P;[KdL% As8Mh$D}3e✯(JC~ 1qGi?ǰx'R嘺 #2&|ĝn|Gx.O@#7@@m s?ͧrbVÌ4c3j%@ k8y0*Lņu[\&k 4z~G砑cyGﶼoY0JYx&n ܇cnjdXo>FȹE /9 'l7Һ!cRz=FzhCw`aamc߿otQO:W&i!=˵wɔ@\ ;F8݄-T4)@1PҤ-Q& 0A;PG[,U DC^|F zDLw]=fvrS"BcQ]ծ?hy9H{eHUbK=XHZ6z!2-8}ʪettXګgɋr$4ctAGJjJ~bI:&R(DKLLf=Y&ܑD2J*ީ\y h8,&F(DKۉ#{ %ҾB` z>e;v`mUB$…n*c8j'MнC=ެ{#1W:G<١/B-Wkѽ.$n7nw=3?wOt|}پWq>QDt"=]H ~9eÿF/& 1 2۝ӾSyC' 71"l7jmu7(< ,}=u~goݔѬ8աŬ;h~Y/[g^v|q\;uSm0-_b<GG VtB]swAt2= >a]j83-` ̴91,vTCt04M_RGsAx}3:hlu>#A>z n;?GWY*9C]>}3Sͣ<#F]>(u២ 1tkr=`A0rj*FQVkՕ+FaENH0H(0Z╥ÇL瀜z+ wdb6G,GrkkK1s>8'#`uui|iҸcؘ8\NJ|Ma`rXVFH:/$>G(P0# 4 -2ښV @Qj8eCZؠ_kkhAO>5ʸV {R58U09(DT>xŕqm%P rn;q ,n{/;D. ESl$xܼ0%UF#>d# bc9K ^Gh;{Ñ_Z]Y_pW32`LMݢ!D$>px x!B/bz-:9G9 N B }وoSΦT-)4!-&E'&(59Q/SpK=c5 F8ѸVޠ4$iXXۣ/qܚ 74zy_Gg pDBB:Boat(ziJ05_ FvѪK4R=\GwOo|a@**zU3FLKN6FC^8W I"bPL.U!FG Fm Ep2ۣT4ŨhQ1JZO0,]] ap$ɨzy2|' eJ9ATH`cF(DK>7w&)H)r4*%26Jӛ/)W~ˇ>u`w?z+f_ei]J~ g`]^ ӧ# QLaBc9ػIhi91l maꐓO2gN<8ߏ^7.Yu%9d~yyh:93. Fb lE #}:Mzt(Y#aE@*Ǡu %B -AsF}p>yf=g+9B<0dT.*{y%prZ:KyOhB`6O7'teR:Y:,CwGIL6d cp0g3 XQC͚*hwz 6>ͧPl(}BVF_3 /I?;X=}uXe9ًݛ5{{1x7Nkx<8===}+:<HgULۑ<>&$D+X.K%M%qz+X|.]n!InJ;i0xĈ~URk%t';/]umZ)wIy-]2P|C3,ftlKMųyX?s<:?R^e E:>c %P,d$of.c+:.gO$z=L ւuK381gcF5aҔWbҜ=҃{Kslni9>z3:)9*%.xdqniR)V&sI$z=t@aS[^3zќsw`ȻZ0oi[k1e]--Md-s:T ż!T9q4o= +;1Bi)E*poi芡^lhKC:txgTMijA2.t{Yܳ>}^t=s曦CѕIS,{] 790w짌\^Wƽrt>;r[M' UU)$?H脌M$A miK BH)hԛN\!"!)Gb!+5pAhRn1+\⯌H%%3d L"b >I28\m5+y빊 0 <%hbjbٴ\Y*jz tИ (NM% +|6?SrԆHk>{ǣWd1(e2Ψ.457Ϧ^8als_9klk=d)qa?O.|#zNM"ty瓕:!lYէ62[4v:0 p;u?T{%?xݞvOɻ.f^^uUS|R,bt$Z(I (:XBC1\2ݐ]zS֌g=[ցެ83L6Ė6>{lqhH%`uJ/P:b7Ώg -ɯq\E0tQtI6~2@0n.w):;:qɳs^:&7D/Y͜"Ei BdbܥLS hEedz Ok_ffEIENDB`PK!|Lqimages/stars.pngnu[PNG  IHDRD]itIME$ pHYsxx˫gAMA aIDATxVkLW~N/P-wR(F0.D4ĬQ.77fK㖱g nns˦s.H0# /Z2KiR+Z{6wy#[>/K'z oԿ?)o0) ?# +x1`JL^ofsn^PR^$?yȯnؗi>^rqSҀ1-=M'~˜+ s9 ~J5:lWV ߍF%%l6΅pv타Hf@q%Zh`#_ڀFQ܃@ﹽL|Ըu|sI ;³NcY90qN -` :L5| #  Ԙ9~DD!&&S&FD7C<,Ĥ.42'aA[zR^7 Y P5p+)aɱkK:\ 04y l\^qIʻ+ ͋FǸ-$'‚ް&8RLgcE]2l>3"ލčټs &܈yX&0;~UKYȃ2Մ o!Q5! |;2 ).cɛ廘9=!Fv@Sgi; " ͚=^8un/~Yߛ^'G; f%c1;uzH;ąOE,nØ]GȋH:+alooۡL;,UF6ЉȞlA(*u-$#cG3 Yh(m#.shPEww1DN)_J-U8X ]⳨FUeI?U=I"x"G8J}O=Kt躚=3p)Oi>wIsZ\G$5ybAejQ&2+5/%oRz7ҋ:d,K&("=VA ׎(4YԁH[PxC&4E?QW-rݕ15ԙ:!tUHZVf5KLQr!l ݎV!.봧?d> U?zy^6нu _;,kxC Tځ&8=f>?PLcq&8o߽{` لRі 1y4yvS;?ЫT+lk%w tZh9C]JE]=2h1rPIENDB`PK!+!!images/icon-128x128.jpgnu[JFIF      }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{ Mi"s^ K3jqayRuw@˥O]ٔʾe ??)3O_p?3TfRgʾ+Hf̥5?} /XVQK?j*^@#2?hUGx6ijf%p+ ;?3zʜMC_~r0YG ry-IUu@;X3Կ} UtƏZ?*n~X3RU%W_ ӿ>x}j_ʾw?GcKW]7Nh*uXn9-G{W6"i&O:p=m_s5ztX:A!g7vU+Ûn8t&emG{ |k>;??w|oN/ag47 MA}C`M{&c?>qow_/? >K?oCG1}C`m:߇|aiC fFw)_St;_`ERe뻯]K)l ZPJE`o~7I4qB~~kCC+-@oo yl`J᭘ʃjJge96I]5UKOOATmS??l|"t?Ut?|OhG.?3_¶΁y{ZuoJ*0N Ry>cm{zSAŻ;5no*#>$TfV wcvhP@HILX)5&_vz^H4&$ Y*րbxG?gъs&L(PѤ6龻~&xF;km_UsDHX|ɷ䃜ay[SvzK2JM>K=/|G%+ˣ|xc  %PF&e sqJTyb?̪9R0ѻnv^k[ '&?E#g_Կuߴh+mq.N<0R$[D|QBo<ߪWG">(Pv >u+#п;[:?_?}J[_ Pqv(T5/iu_Q?>_O]?a}LG??W Q?>G!*wPv >u1{_&⸍qR$\+){IEp,\q%#MRt晴V< =Skf~:pntgZ1ߴ<'_2~^.}^ȷ~u= eY8e<3+N{It48ҶO# '&?E/~GW//)VRM<[H)8+0\cL'%EE>7Wʷf^"{U3Ac[%镀GrNT:{ c\x̲)FU>vWbRU/9ύ(G/َL8e :Gٚ}_ -~c(CU2O?z^ևtʿf>$ ;U3;_mK R^GqhdH؅p[%_9R=u>1tre:ةr߷ kk##(߄?~=>Q/NQ? ,{}7>_?֜~"Η16wBX<0n{I+gȸqnUM5 ^.?cO^q:@G&S+QzM (V>\.mW .dѭytFrCk)Ukݧ~go.gԷ*bypϵ [ k_Qw1 ;?F߀57 |̷2ݤXoW%P6b#mm Cpys{G֊ͪ{wk0WյuNypϵ  k_Qw1 ;?E68^}L)k1 ;? F_f0SjwԵ"_wVŅŴy [ƌ #S4ע6rv۫>yĿ0'V/k;O_u? h_rwĿ0'ZȾYa ?a.O?}>_c-GQްچstwjJW.3+H$׷e'Rm6Abo "kt߰L\Q,91 Ky?G_ĺx[6?L'n␜g\.acGW_/ }~k[)3HP{^~ʰ]gz!]Y Qݲ4?6k_֥؏ǸJ|sjֿ QvǸJ|sjֿ QvǸJ|sjֿ Qvǹ57 7'խc6WX?K}V=˞9<hbr5-o 秓(b] +V웱~7Ѽwkڟ#ƇߴO i^e#i>#6338??ҵdƗ܈]׹FGVٚ5_w:~ZuďeW9?5--;1鞕NͭWKeKշGZ+|OfIF/" kiMbY"wݞ8"ќN<>ȸT~Pt"S.T싏5O>P>H?.?x?'@ ȸTt"S.T싏5O>P>H?.?x?'@ ȸTt֯k$ծ5uR%+$sH֝HW߲?f_s.'m̼8Hs<5NeVG%Jt\+_@A*·mJft{*p~V>IԔh}ͩœaxGU[x{1$c3/)Mov0ԭkRè_mOQ(F~JykJ"̓vO~(gŝr];}1r5b.[fxpά}VIBXЏW3/ϯxޗ5O'a |+Ԩ1^n+RFﭶsiF ;r[9h/ ЙwG?ϧ4L}??ᠼ7Be&G?? .448!O=֕|;ѼC$Qߣ8$+13ùߕo+kQek8N@cS/y.@ ,sGuCqQwEꩿk _?bt?Jαo7lPlz ےنIE6=otz=? {oZ43]DbP uba:Rrm/;?^O^W_y]o#ž45=Q'f$@[jq*IJwO" 5~h~C[y5yszٞTwG0?>/gח3_{A/Tu5￲}w[\:H0pg<q_Xڙ}|>&}W`c WWnο?לg~gO(nο^qA|? ?w]WElm5-.|oBx0Q/ bRW[?a@wf=9_iwYi̚tq"[ o$;漷?].xK_<;kR^^k6JȊ w!Ed{QR^- |/i?Ixh`|??ƎIvi_|>ǀ?eLJlt95>K-(gEAU#8gjz/'Z/ PxŋGJtvbg8v=3KX7/vS`k8ZipvkbJxrz~~z{&g:izK>||H: /Z ˼]#W|gaZ8{O{Ѝv6g7tbRg/@j84焿 51}&vܶsQWeOik{.6}xվ&x"F=ޡ=H h ~lrEzT<}J_^t<Nҽ2r;O[yh _! j??ռ˴~gk+ )6B~~2|mU[[}\7G? ߳c?e:?l#{R{־j*J/C8:uE犏mC5iKAƏ˸W4%G8?zDPH\0l&'/|=hᯇԣhf jY?7o3_?򎟂?jS_QWS|Cu?[78/4ZS{qMB |H8^?c7Bm]Ggny8~)Wvdkס|5gLџῇ![6V_; J>_?E)e}\lj)r+ۑ+{Щ:}? >܏6c[tK۠D\185RMԨVuB+$lr <,hosgұF7=U,jY6?i_??3>Ӈ~f45Yl~0, 8[Ri_ڻ#:_+My/+|_=}u_(ыmgamgl?€_(k? aG(h5Pji0i`Dq,ph??i)3\#Wz ; 2>e;_(k? aCZA1.k<|fӻL ߁9t]ڟF)ޗ=bşys.H 5W2}}w~qxx%cO=B]kzVF]{ II3O SVf{gI'GR, E@(aގB Kq(?j_ !Z(<>%D=3{ɉ\nA> _N@4c(%ZF(ޗ>Z3?8 W3S q>>|Q~#< /zOgnQkwd5/ >ʜq(?g/mח~^J/NH>7i>OgK{dGVv̀(8\z~PsVxF𾂚 ą3\6q肀>I?Uu +6>7N-u "0!Q @3o 7gE{WoFS9MelI@U_FmF\f#sxqﱑ!@:t># 6PxOhW'~%|$?l_%߂3V.6~݋ƺ'c`'''y0I%dhmtҼTlܬ *mZC3v~ݟ'=vO/'ohӤڮl#W%O$PK!YcFimages/loading.gifnu[GIF89a{{{wwwooogggccc___ZZZVVVRRRNNNBBB:::555---)))%%%! NETSCAPE2.0!0,@pH^d1 CBR'RPBD*Bar#.(Дa CT0 B%DSBi q0 m]BmuJmlmIj jCJ` vQ`j  B0j_0DltͲhjJC0]_`)2Iظm!0,i@pHRŤB}H!*@ \l0"Hhm|B  D*C IB BBA!0, q@pH@$ A CN.'RhJ0BaT ~\,#$ra#)'C )0 B lB$B./+0 `0,//-C*/.[D`) CA!0, `@px A@4 H4 P(¢8gALC B))%rh&'H$[H"C/A!0, `@F,a"Br8&99.F\Gpr @I+ P' kxp7a t))U*/. -//,~t./+ )0A!0, k@,pB @-4aEH #aP R0!\M~H"_W$))W'&0*B%0)/-G#0 ./w /. w,/)w+gHA!0,  \@p8$A@$3|J0phxƀ@0DXyw`//0#)'Cw0))O0ND)"I%hA!0,  c@pH*ȢRL.PaB*)JTT. bXYQ 氄W o@!a2}^. ts gE ./ BuBE)/-CB E*sB  VPA!0, q@HQaH>ʉD(!z,ԡ qE` $ %!$abhJ` lCgI))l aBBB#)'CB$lB IaA!0,  `p+!l:ĤR%1$b)6:c!06DT\`EY 0v0 L~E0H F0 H wEkmTFA!0, _@X$HB:+׋Uq"?ʊT(02E.sfi0exW#]G0 ENGzN~H GkA! 0,y@pH,lSsp>S'Rd bzP*VV4LrZ"f]#~F Fcq~ BrC   A;PK!MW77images/ai-recaptcha-250.pngnu[PNG  IHDR_PLTE񝝝.3x𞞞3x櫫2y4x礤 .-/,񨨨蹹2x5x5vٯ맧.齽 /ij2yȷ򜠞ꡡο ,-a /\r6y 0 .7x4r漼f۶oݴ46w5tf3u1y8xڻ3 ,3]ɵ3x-\q4r`\Iܑ]Ɠ*4g;w7xܔ ,\rM_ ,"<+4xU@zІ?U,r2G!3*>"72TqTۖ`pTi)?1톫yA~M?{֝ՏЁn o@I!C IJU(YoA+W&kW?2g-{2-vMҽJKKW@AN3U{=~v_`doX2*sA՗섖-+Ylُ_CɷӽY|HCdޒK+@'RNuruTVV=?;_âl$^ _ ϴ`yk1=acD2rt'B (^4ɂ ;J1r;+O&ˢH{*;#=>@@91H#Kfc=C|CfMZ}H0D1JoD3ckg^4 iOx|˝du.,qLat[kV$B'ru١)ƴm%<ٜ{w(I. T7g Z} [^g:nDMSgoHmmtJhַݯnv$vks{i4@W Ì,y\fLN:Qt:\=mULnї2'@O:΃|MCS@o_ϺY%id`Cx<":]Kˀ.YS5c3WMxotxƍ}7uOu! j<z^\՜ygˮn=aYzb=`)Bnuu(JNcI&kh[mشQGYŒ\[]z{B-d*Xy^GNCWziԥ{vn{K?4יԋo/ { ,Wne9[“PL`z YprSp O o!XW-O73v國ڤi,GLNATzڐDm]QW-nneZvOGJnGJ[p!@nۑԟjfpGnw*tɁH=xJ.zW?*vV6H E!x\C`0vrg8s,#IN%wti9Ѣ1.$+ +KGD{=ڌ*]TZIr]TٮFǐ6ݯSw"W7~Qc8Ӧ?2=p:·\"` <=z4B hJMޣc(vkn:ݾs`qD.ET1f\WCn'~3.P>aZ-b/uŶ>ػƁ03030iTBj/BLnq[ CAւ{B{p=/3x캭6q^9Mć"=rXőWBh3>3}j:WxjFc>+,|/#֡cݓ7r^z̀, @E\Z䇨P @m֧ ̣/Oәgݣ}}(9mʗDۧc@_`@[ 'rGzfDb,e{qߦ%?Y:#$/(=-9'ܪk@6=I|2tDsozM=gRtvƙэ}=s=J)0:fgg{w8uQptV t6쎛= cMѼ#wzct[!{(V>Fl8&&QN#oέDI߹ݷ6Dg 7!{DE5pntَ^f^2-#Qwmnmp(JQihjK:Ec?!0,z.LwRԊdAR z> :H՜Be/LmbE:AԼ/ggMrB ѬL´tJ+-\nαV9|saD_Z[ ѷm] eJQW0 Fo~ETa_:mw4 RDO/W8{ ~9 (]^ŝiM]  $&E!L~,Ԃ *vi]c[S.'wM[mOp'fy}%xkU#q@u0׊5)=ȃDK1Pi0B>])WiI}!ZR_Fn8#azif^D^Rv5KZc59ry47Q9c&Ru:z"f3|"Zw ˪&,&Eq*[7k7M)͔g8IK GU1Q}n*2߾s VK)t}b=G!4lOR2k&$+ŇºHݕN] ޫo 1ˣ,Kî2+0vq󲰂*RpcS}HԌvqhN]Nm&MvP:1WCHo[Qk=-" ]T/zv^qdRakv!>A3NHʁu\mZa;;N7 M+zKC`>Az<+Oxu*'cZ5 0jtQ3afZ̺ˏ̝`miuiPoI%"y]P㤿F5gu.-#&o8c&u,rkh duTKqbo'C=SzHO\v6Su<?SgguDoU8NԥYl: Id̏p::& ;:0-6֜QR[z;Yui?4ߩ5:ېǬ p,7c;tp':)ˀQIdp58;G+R_Q@?WgR*٫ϤG9vruyMCgUR_DL}^u#*:; |b6a̠kpxì輬wȻ{gyR'7ZDmeuj-Du,)SoOr̴ T<F{#McwQFF&o] ,ԯjiTmuν@?RUY/ :dVg ׫+CfӯQl1!w.'fʥO 3A"JaNZ&j}#"@@ 9tyې% Q;C"`aWbsaߐ#%O[unB#zMRv&խkV =Z#H)#82w?K>5h4"$tRH\-": Ng?Uu ^z.EK\C]otݬWY{)z*v^1 !0 v\T8iB՝J7Z:Y;j% om $7;Wߨ'Q[l?W8Nj.jRԣ~R5#Vܤt/l֞&yxJy wF Pgkc鼎zFI)>^is/3^pࢻɒo^47n/e]4FTB'RVSV7Q~m-D~QVœ HCYs.̱ 9<9U\Bxv2Saz\+Xz18S[[>XH]Gȣp/sJWڌ{SMJfӅSTUԏ7N~ji76i3aP[*EgST shakzW%+u^(X>ւeO2YzH9/9j1HLqsu6KS)8QԳTďŬ9n7പNo`G5a^;Й|oʽsKqIMKu9eNvI] W.z3:J.W~euq'zc7gu@Z9C'Oɳ!)pWչՅ]SGrK1_Iw3Nԭ {j:cN,&.nEZ}±~$'saɜ <>+aO&\9dxz{M?ģՇY:=F4xH![z'zwmƯ5oXǧa YF&w?@>-M۰Vk++`/ u&}; Þe|ϗ3{{f>m,T)I˷,Geu´Ō*;K*ޙ{eY]Zm*b%əmmQ0\ɏLfrg'?K񱊼;bʏL3QTcF|η]8}lv<ͷSFzzg|ͿܟIENDB`PK!U))images/ai-preview-250.pngnu[PNG  IHDRMiWtIME gBn pHYs  ~gAMA aIDATx PWπw}D!#JqP TBLP hkk`DrsIJ4D.5DJ4BGys= L4~O>;==gdZ 8b?PE@#rG(P1J֎b$44TPyargxqvAj "PEӌi3ZqMKVͼYoϸ+cd}/FL8*ݭ-O}:u֭s$f-Q8dOre/ QhUm,J?:!,S܁II9k<(1-mύWe%4r^)+/% %˪oԯgҫKs/E!'R_%'\o_'F\^y<بT*:$tɚ#9K/pFE (w@@6^(r~3Ȏ:F+4j;/7;!dKڵ]lU-)l>LE.%X&lohTf4+wa:u4pJ%iLm+H wQc=*P\Irj poUTŖXoQ)$T3YԸ$}1)3Z\{rG퓺 ',:^y`acK\0c>i:1ey1պ!s(Cx6=y`Ȅ-4(7ПI]7@Si+9.{Ol0Ӻ;tX(fH̡5ޓAf!\,:o+U\Hp6[VY$[xw=>t_AuC\nx+ Ibb{9lQhm_Է鎚8c>bB˃mX,]El$ 6ӯ@Jp@bOri???pVudҼ-[fкS3{ =;<[rVYÄ1^޵Óѓhv#4Lmm(z4V\^غO\B.Sihio&v~qQd3u_j (oZ&t_{;}C , `1O]a:&xPڶozw]EWл/ b$?}OfdPE]ȑLj<W8.oUH rG( ىv#n87o7?U}Knuhow޾> Z@q<ɡ*6@A7r/Qh'W7b*.ZWyM5m %+f *Ǩ`ok!mU 6912uW{6MK/w+&]n.=cGO+ {?*Mf%WVRa|n`څDC!f"o {+k9;żr 6'Uf_$1 WUXo Q2š U7fV2B*r=wlbʟ'17)-=;g~;I^ _b_@<>.&kxTz(? =Ap+#cMMl@q9w _uf Tԩ(e;)lfSuNHdd&e^q|Bvcd||b[~aDv%sDD0KQ٤t܅o)I/*"DEnGx2dOr?L#ݛ~|oM3[8!0ٮ[=WcȦf+SΟ9e(kDplGEs! b䮋ΙHtR?c*6e8 ә$q3²겏[S},gvcJ0GLA+ywa.,cR' ? D`b6 I4' Y< i),A >cFft/d6gRpsY{D`F6d(X"4T~0ٚnͨ^~᠅4?"iw"d XI"$+)w0[:}N]3E}g(Y2k~py;Z*ķlȩv.|,Vnٸܢ$k%TŦ"^8?䑜T"!EL>>*%=BV`<$òҏ4-0CS},Ei$r*lo\W5ahNĆ2v?cm̈.x![7ͅAS&!Rsпr{k@%uբLxt/V !_ٜʬb3nNΌpgId=tq~|goCB:n%V܄{\gL%} }]0bWq?Wń38 lCB,:PK2 _Z$vEl ΔA=%rLOP'W'fuR|~x֭L`u_w9%$R4LOO% cA]4wui.d:C;mkghBP Fv\v~{07yAl1FH$6u[a߻e 3}) $x+Wôe[ɱ_c%<[y5 P5**jT"e !:Jp6_x=(Cl8p,u7M PqDYu4'(ݺ<4 # -NM?fl2V^~ 4 ooHCHCpTb k7'̬>,&3ѹ - :[Wm!іE6.T\Zt5w~eE'GԀH;kO#9C/y[a^%jeB+]$X 3G ˛ww6ܯ?T%!2h&("GdYo XVyI"$) %''_kvirZ]t9obX7f0gfT{.Z  7!n>' <}C" 9 ^tE`l]A b;VլP`#S~7R ]<بT*V~!44Yx@|eee֗ҦEhTPP"u`vQOf%Ln$dSnl] 2=C<[a°u)V7gZ94mUsE"3IEEVyٿyvA\ӈPU+.zG;#&3Q@s-[fsI8(wa4v9q7 ͏e3[` Nӯ}2KHޜ;(wwF5W>1B{dF(w;dءхK M"PE, "8;GP 3E@#3 C4KH8&msf^g\畱]u#}&@Ts[KǝM/gaS@g>c3 w\땲[j.^7uo*zlKl>4}q/AmVŷ}t 먑Ђ޽%'j+9.˪ocӜeVw.y̖%]EYNjJ*L 닲)Sx_yv+VoSY]t]7-lַ1Ig9lG]x8.ubOz$鼢W* z6"2gm'u79yuQRٮĨHC0柧|5[ɥjI <`erv뤤 :D̺Sc=?o#+8@Q.a ~W %q(4bk&WktL 8L^48=zxnp 0|Ӯ6s)zL0dB4 Ofтkt.p9Yݻq;{7fmۓƕ{%;xHƖY7<|oXaS^juCr$y S-IS1~uAj T}6:Gcـzw'۾-w;>o+8m|;pqf=π"κaxpub.v"%6"̓HPQaG#Lh>] z1.?o%L٧+H.}EjJ^'=|kw֣؆X}ND̺ABB?̺LUBLZI_߅kyMzZMn9.R̲N"xuHۜFGK&v~3vA*}Gi`;äjMkO]BNv}C , 5yKI+z6Nʴ/.hszw],1.޻لoaC[S61;B(w"cFf`0P;B(w"PE@#<ʥX YIENDB`PK!zAI__images/ads.pngnu[PNG  IHDR%VPLTEz=tRNS@f IDATc`!3IENDB`PK!{%ս  images/2GAdXFP728x90.jpgnu[JFIFHH ExifMM*bj(1r2iHHAdobe Photoshop 23.3 (Windows)2022:08:19 00:49:47ؠZ"*(2HHJFIFHHC     C   " 3!"1A#Q2a$Cbqr&!1AQa" ?5)`,c~W&U3sȟQR{F;֬F8斺£fHԲvfr v6pM-$RG GI㻅bx1e6YEvӡYl٨fDvb#6Gr"(~pYEK !&âZZ'9J":t |>cunbkpޛ F=֝7eImC4bk*o=u^q=JLJQX}Dok"2 "$᚜,ĎxxKٻ3$8YilV$(#r[˃`st9Uz>/Tf%ZJᡭѠ=K/'η;sގ:+Vfj?9Yֲ>2 ]è炰oo-ܖw&^ )YG uHz(nl-MRA-H|k܇^z1掮xf]}UIc9  ?QK:oӎۦ4ieLUpȑ U$|4C=br#^~ux[m{v\ݺ՛Q+*E cfVCBy*ocn΅YʗcaENDDed%у/o+#XJ,~>2$ 1wD#C(b[#'O=ԥZp] *f6!d౐G˲*q\e?hvnLbXJ$FB(/>;R)ʂ:O"DuJ8q1$UFKq#t !<9Ox#{uD *{aܼG:Kmˆ -f;HO*:YV*9l|ky쥙[X<TiZ)& F3MT'c_3D"3^v#?@B38Ŋ<~GVW[hb6m7%ШWSgXxe . +6Sj*> ^=08O,JKoǖ ?n'=?5?yN@\8?<~T:} [}VFh$cpπ8~5Fw/pnԏbf1(UPN v'5cxa^]UVӿS/ΎFx`ם4hѣ@ Sk~\7$fg'[jMVڭ2dpU ѣ@s>lI_Q\.Rh mH~@<GZO1r`qJf $ Y<(4kEROCu3tb25ٌ59"| ~j265cf) ̀<F8EkwW` 00599DEC88AFD379FB54D654052E077F 0533C6BB00C1DD6BE56630A08913300F 07B4A1C9A59F8A04ECD73B3CC65A3E5A 07C8D728849BB47DEDF47438AE70AC1A 07F797FD521C8DD086F0F358BCEE08EF 09338BC404BDADE129FA37EDED29BCFC 0A330ACF220D4EA0E1B1D1F3D2B75F41 0B232A9B543705AA6EBF28E2479EABF7 0C9D68DDECC11E309687458D26AE60F5 0E6A1F25F98CE4A295DAC86053184324 109C18F45EDD7A4A86F9BFFB29824D5E 10DD06585D77085BD5E50308FDA1E660 10FCDF3C0415B3BBB02CF44B90F8D6E3 15F5C1BC21D293A7E1606C8DEFA424A5 1C9B415BFE697A56AB15E9C5C54E66EF 1CD4715CE9F41C5226F72B06F2ED7A89 1E0D3A3664AF6C5118872A59BDBC8146 1E6DE62646E2E91A454FEE6E97019D45 1F906B9F3C6E9A171CFE065E311FF885 20F6CFA26CD259B52265DE5B3F2E0294 2A44994DBD012765BEAEEA8ABD86DCC9 2FA5E8F5326F31708F60CB8D600AC074 313C2BF86E68069C185A84BB4E6BA7CF 358793FB4E86B0250B5FA08309D41DAD 36A014AA999BED8A09BB533F4EC43A85 3799F4C7163D76C3DA6324A8FAA04600 41263266829E1239566974AB88D9F4EF 42B0B69FB747D73067ACFC5132936734 48DEBBDD8B33C2DD9A7A25ADBFC50680 496B88CE2DC1C02762A77BB29C5AE453 4C7F435012CEEFB47CF19EC51CE7BED6 51233FFC6B2DAD4925E7FDBD07FED17B 51E03AC9BB65DC1F81A921D46482BB9D 577825DFA9197C8AEEF425722E495160 5EA1625A59B681F8E073D3F857E692DC 633FA9BB7B1F38DD873ED7C726A1AE28 649A4B13862B00A4789791074EE35296 6622C1A46D811FCED9F2620FF55C5F9D 6F1C221EA45BB4B346560CD15B7E1C80 709B5863F703E74111CFE54C52CD999A 7271CE9E8BEF69D0E5CDD7C2DB2C7254 728266F8AEC2A5EE8F918D6C03B2E432 745908E89650661C6138EAAFD0352848 78BF03119D5981F65C7F86E5E4305874 7D00860DFA9D54E5EF76EA1393D19C9E 7DC7AC4900452A9D7F4F0EA671BB3C35 7F16352B7E51B6DD5CD845EFF625B774 821FB0C3C924EC1C20E6FB6B47CCF606 8B04A49A7246492C48E85C89421D1FCD 8B53BE27011F52B057145F409E5B2C08 8BC366704BE94D81770B780F6AC29C51 925443CDF0CB03A899D27BE493F7182F 9348A901E872E5AC7DC185E802C35ECC 94ABA1AD1AE5E9A3F941A9A92B2CAEED 9D821C050C851698D9809EFF53D41E5C A03F12CD155FAF177B16AE4A0D4F15BF A087F9BBFD4C5EBE646E5634A3C6A3DA A22C3C8E891C10162A4680CA76AAB20A A2715B60BBE9F657AE46AA13ED08CCFA A8173C13C8E4D90243766A5844D7638D A8AFACA68A8EB1B40C371E6DA55F6772 A8B8C7B75218C53F5B4646049328E604 A98D464C47BB8934BFCDC28A8A7B21EB AA13888C4B5642B2D390056898CD2A00 AD22F88623C86E8B60AA7D5C984F4495 B32311BC4735EEF2E24CDFFA26F69180 BB33B0F2103351BAD5C6FAE22D1FBE1A BE5BB085026CF96C471E5E45F8B7E0E1 BF20B595D2A13030D8B481BED6DB2DA3 BFC3BFF7799991D4D8BA1A379EF711A3 C044FDC16D26D2DB4B102D605650CB04 C48913A34CF0640C82E1A82A5E3606C5 C4D4746514D893F63ED7EA36056DE22D C5448739577CCEA0112756CFEC751C71 D1A187FC7CFFD8FE5F4213E9DA264FC7 D7AD019A48F23DBE01573C7A2535774F D9F2109FC65DB475968C2F3EEB43C173 DA45DE7D66FC34330EE2B3E3CB627AF9 EE0408E4BAE6E24F576267507289BD2F F4CD26396B32CE850AF735B5F4DF0BA0 F7121E962388DB88F30161D58D3060B4 F90FA269629778AFA723AE0E7375845D FD633D490470BF4D2621D477680439EC adobe:docid:photoshop:268e54d8-ad96-11e6-9875-c3ae9fe9b346 adobe:docid:photoshop:2a59b17c-dcc7-11e6-837e-9c42691083e8 adobe:docid:photoshop:2d0698d5-abdc-11e6-b149-85202e9dcfc7 adobe:docid:photoshop:4158b484-dcc7-11e6-837e-9c42691083e8 adobe:docid:photoshop:5558be49-dbce-1177-ab74-a19abbfe5183 adobe:docid:photoshop:5c2ada9e-c82a-4c42-a001-2938ef771d3c adobe:docid:photoshop:5dc8381b-9a4d-1842-beda-d4cdd957b27f adobe:docid:photoshop:6f08e69c-6f30-6345-a3b9-8ffcc31546ef adobe:docid:photoshop:73c10a4b-248b-f940-9f1f-dfe6ba72c230 adobe:docid:photoshop:86d125b8-f60e-8d45-843f-497b7a35c557 adobe:docid:photoshop:9175e5d5-82f4-9744-b09f-89bed622cc69 adobe:docid:photoshop:a1289762-4b71-fd4d-8a14-735ec142fc9f adobe:docid:photoshop:ac5278a4-e963-d744-bfaf-a0706f313565 adobe:docid:photoshop:c6f6e563-0a9d-f646-afc7-e48dc5531f11 adobe:docid:photoshop:d1283862-1d24-bb4c-bf20-bf6c6c671880 adobe:docid:photoshop:d7a30376-750f-a141-ae2c-7810495ce369 adobe:docid:photoshop:ec58a44f-900c-e34c-bb1f-fc2b0bdc11e9 uuid:18317BB61454DD11B072AAB0678C6EC0 uuid:33F867AF77B0DD118BB88B63F587CB88 uuid:AEB72E0F065BE21190E6A53B8DEAD2D4 uuid:BAF36C8477B0DD118BB88B63F587CB88 xmp.did:018011740720681183D1B7155E0063D6 xmp.did:0280117407206811822A8DD347035589 xmp.did:0280117407206811822AE41C914C1686 xmp.did:04157CAC262D11E58547B515CFE93C26 xmp.did:058011740720681183D18FFDC0EE7A2A xmp.did:07D64A4A80BEE511850C97A9C358DB5D xmp.did:0880117407206811822A9D48829E614E xmp.did:09F9F4BF4EABE211B304C27C3A7348DE xmp.did:1ABC1A91C930E3119FEDA52BE0ECF468 xmp.did:210df20c-2bdc-a245-8468-bb2373d445e4 xmp.did:271790e7-c17b-2045-8d0f-fcc48173fd2f xmp.did:291f6c60-43a0-aa47-aac8-9ee6d6689e03 xmp.did:2F4B4B4CE929E011A014897789896DBE xmp.did:33EBFD7C072068118083DCA71E68BBCE xmp.did:38ccb7d3-baa2-4d45-9022-17c1c8456f96 xmp.did:3B665E6D422EE21198B2FAEE9FB93FAD xmp.did:4B41B34A08206811822ACF19180E81B2 xmp.did:4c0383bf-ceee-2548-9da5-931b192dcbbd xmp.did:50dabc4a-2411-7f4f-9959-2a44c05ce311 xmp.did:52afe668-c33e-9f48-987e-55e7a2db095b xmp.did:59c0351a-61f6-8f49-a6e8-90e15e8b3e9b xmp.did:5B5B472C08206811822ACB6E691C24FF xmp.did:5C81318856FD11E680B1BE05A91D299F xmp.did:5FA7C617ADCE11E49E7AF0F29752DE80 xmp.did:5FA7C61FADCE11E49E7AF0F29752DE80 xmp.did:5FD1E3FAADCE11E49E7AF0F29752DE80 xmp.did:60AC9636392911E396C9D7FB51F41FBF xmp.did:6588AB2708206811822AAE066D9BD385 xmp.did:67310723ADCF11E49BE6F9F1B1E4BE86 xmp.did:6B18ED2B09206811822AA56E3BF141E6 xmp.did:6fecbf38-97ef-49dc-9236-d7f74d6fd234 xmp.did:71CD42FF07206811822AECF9DD639D3E xmp.did:730c5884-6066-fe42-8417-0289b26a87af xmp.did:7623F5E469EF11E693D49CDFE8DC4142 xmp.did:7D04D006CF5EE211AAC2972AE1B78D81 xmp.did:7a34502e-468a-c741-b916-0a5833b37a15 xmp.did:847678728B30E011A851E97219B738EB xmp.did:879429ca-b04b-144a-88b5-dc4b560dc849 xmp.did:8CF1E12208206811822A846271F1967B xmp.did:8E73F883665DE511A04D991EFD9AD566 xmp.did:90EF34C5C84111E3B553CF8512AFA90D xmp.did:93F0067308206811822A8ACFDFF16C2A xmp.did:956ACC61C84111E3B553CF8512AFA90D xmp.did:95ED3A62C84111E3B553CF8512AFA90D xmp.did:983bac09-bf39-8045-bf6e-6254de390d83 xmp.did:98a7ecab-ff62-f04d-97f1-d09506489261 xmp.did:9c4532a2-8b21-b647-9c4a-e70572d28fb6 xmp.did:A35C883921A8E211B1F1F4EE24B0D37A xmp.did:C073799A07206811808382444E3CD50D xmp.did:C0F85CE7AB39E21195FEBBF63031080C xmp.did:C473799A07206811808382444E3CD50D xmp.did:C92518F2EAF011E2A1B0C590D1E4749B xmp.did:D9D4CE3908206811822AA56E3BF141E6 xmp.did:E3D8EF35646F11E2B4C5B0E48626874B xmp.did:EBD9C7450A206811822ABB58BDE15284 xmp.did:F2DF51DC072068118083B3CB38A72423 xmp.did:ac392b14-21a5-3244-9067-cf8102e47a14 xmp.did:aceb1982-7525-a94b-916e-d19cb60bbbb0 xmp.did:b0e9bea9-1df3-f94b-bda9-dbe6e16b97dc xmp.did:c0018f82-4194-cf42-aec7-e9281d5f8c7d xmp.did:c7210d8a-526e-f841-9325-7305615e29cc xmp.did:d337ca5a-de17-ce40-9f65-47f9a3332a50 xmp.did:d829aad8-4e14-3d47-af9a-65103f51b1b5 xmp.did:f154d5ed-58a6-4231-a61e-0d7f3718c019 xmp.did:f4e274f8-93cc-874b-8407-5432174b5893 xmp.did:f8230346-b777-4575-a8c1-44248ca36c28 xmp.did:fc7a3868-622f-d841-aa8f-b946306700e0 xmp.did:fe943ebe-7e53-4c41-912f-141b4c594374 >Photoshop 3.08BIM8BIM%\/{gdպ8BIM: printOutputPstSboolInteenumInteImg printSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oGrn doub@oBl doub@oBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMHH8BIM&?8BIM 8BIM Z8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM0 8BIM-8BIM@@8BIM8BIM]Ad type 4 (B) 728x90nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM % Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?u-Cu$nmvt}8}tL̇Mu{'Euf ko#бՎ슫{k˷V*ooc=JŘgCֺ[+,̯k63&dkHt?۾k.;['WIٵg?k6aEoz\+uC>žG_6W6?"C=KH־Tv;^Kzou[2ۚ]632?0P#M8cԾ}kYC[]c=g^?JOP~U {ݻg,^srzgR} Kf[cg{~uG)eX"c6ͻYˌu`u\*ӏkD7 НTrʩkAa;]~u,~ꌷ9gu{j,ec1c}O?w^4:A[khKCpkmϢ_eU^Ժ^о[5[eV ~DZҿk߾~fYEUn+6W`p ]vQvz6wO_J U<_/Ww5ٓ_{]NM'zN3hik~U߲M]1u`T-kXK_]쟳>U1N6U8&=r͌uNUzj4GH.s[>ve}L&dV_;f9lnd4eF-7bkmczpxmu6"ȫ}dEIa7sА7Ut`ho1%?95+]-N)p mMlVnsœso1=:ʬtSq\懹7/m6X*@ V>"P<?~5l|A9^߫wwlA\ݻsX6z"ߍvck?E {WK7umA6ӛ1TEW?Dϳ~?O}|J~1ntL=9v">˩$C8KI_-?-GپѼϿt~~wo#o鯗INm߷?j56l/+_Wml6}v?;g.u$ ߴ?haGާ=>װ#wnO "ھ=_oNciٷoiF"#X'=/Lwq?g}O,;N'd|zisi# EfPDO(6vX)&ΝUG K8BIM!WAdobe PhotoshopAdobe Photoshop 20228BIMCCZ   q !"1A #2Qaq$BS3R'VXZbg%&9Fefrtw)467:CGUWYchsvxy N!1AQ"aq2#3BRbCSr$45sTUt ?å(J:R(J:R(J:R(J:R(J:R(J:R(J:R(J:R(J:RI$>JB>F 󷚌ry]lΙYLf~+DL|`I'Dp?R@ViYu޸UPZV-'inTU㏹YWe=yԎhן9 U:ê0HIbxi~}Io.WeJYRm,"@Ip5+&G]2b DP0|<9a&D cb>\}wғ,:$)WeO 8`p Oﴯd H>ZWK.җz>f-+-G#_,;<XWHY:LT"#}&Z\#)h}{Ny>㢬LZURNYZHNRFm8M"iT!zۖ2}f>I*4?G8KEj :hX7hX[n@NOO)†]^J=)X'E_n%2Leܠ_i|ټHe>p-qIA왥7 xa, pO<+eA=YVu+xl+_Q,a ^E*V´,&a%|K(yaGW&N>J%(y o]͢5A0jF" @Q#0#u?<{ }G~Y2v\*Mr)z_+l{B|eZVd 22J8*XCr"3"VR p-"j_x5*oOCzIlk{_%d")Д+xB  +l1$HM \ԙ[SM[ƪb,ՄP*/i |YT1`yِȊVBcy䑷a֛XVL>˾|H,@q9EΘ%R4dF!Gox0g)@ *20=Lbmń5J+j)PM9rE> ar#XnxIAHRY͔Symby SG a 㳫yr 8oPQ) {rqBMxo ԥKUD2Bd~Hܕ||NOR ^2-Vo0$Rڃ4k!%8Y>QeS+FR\AY" XU2{K6ya?ms!\\!A _>!T' )8 ewSp+-tՓֲNh-=HݫXyG$L}_#ȚmBKLxUu5"wg{u`# h|Dʭç!H -²{kN!'u@A#y4Fx^P cE:q1S,Hm\6|K*]o,,/R:ƣ[f7Bn،V թxbE~GIuT$S5ZP44>G+䜖y'ź:+r @%1kIV呤wK!2NK&>M9BJ::LQ߆XV<ȗZ0+F}.fR | D~/ΰeFe:wzXc3<A25!JGSCd Pc,~kxyu9V`Rs& J=_!,=ɝjXRuh&8,k߸P/*3,2OVH9W،ܑdherjdnTǖ9${JÉQ)UXcpH*zqIl>@P$c~GZ!FDH=x2H|U<ˇ^, 'IPt$vxS_})'HZ5YF//ܢ@,|VQG9y$9-"+ziGJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔtru? og~ZMFpd(fHJ??7K-?7K-|߮wqs?o+ w+)kn[GC!߭[/{Vbs4:.F-Ud3"3(f@>9#NJ\{%IyY<"B0 ,>I'f&cœ)xk"Xtx*#*` Zr(&z!U r8 $}- sЃK;AVi|X.?RDž% 2x-II \ IX&:yb"Iܲ* u # ~d +Pʜ]kÁAs},]-QiԵYbxPO=nS$iʤ |(Cx&-7v'"5X .a` | n>A$YS*d OuI9G U皶]lPWj@ڵZD3F F>F ?+(JYI=;Dqシ;ą?[ӧ5y+U\5M{#ZڊFJ:#ud2Ƴ5{dOmN<sJRJH7&ol(t) 1^O*>2rX(b %襄N[4@RY6#aH[o&'VC # fȃh\`6dY%J^58$%yHFi $pf jhI8ԨRPNVYHkյViHbFNUG-Xk\$χ 3j=^4kWu;8xPiV8ٷC7N#O[qaВNd]t]q-Fj{j{&\J#ZZU۝FRvV6 -C,t0csUԩ"/aϙ}d=&>zf:F0HapQ 3םA(;4 kVG f/>6xqɶzcZk Bǻr&\nRzp[^V":akXY6I_U#×pB%#Ph-3{qg=WFORJteڤZZM%2#Y"h%}'vI<:N xUɈwKj–ȓ~Q5J~a bY!Nq8^ qHRCE5[zKO-UZFXHVhYd#B 灹8O|:2Mǎ9U!4"JK -%i*)La&%&+M5mM$MiC<-ډIMnf8c0V$+#+|*`ea#+nX+DGΛU(˄+2~ xʌx8<n!)6?Wx'9d_.k28a0n|DCH0S$ XҒ$u\*<)iAxT+G̍&P%S\@ nTyqŸ W[*I2S<`ּi-}uim8&YD^.G!〪TOq(9%0f޴S-"թƾ8d@zh䌪<|R 'mVUR]vU_N ˟U/=uu 4ڬ=`JFa)B!hgx$o աyO2ASsQOXJFyk4p%e19}%%d280"-2!f 2Bd|qש (ҙ'cYZIt46YG%^?ty7 ϴX׭\mԐ\x8ŒQơG 7 pXO ):HXڼNf⒢ #T_(ԯ$;rz+ lV G[&\=t, W>d HYRepO&C r$HU,W9$vFJPdž#`DNP75ჟĪ{2-n| b d?f@U[-ya(AQ5D8$8_׻/!,$x[+ R' !ONUɰuJ2J$LD2xq%H~?JXJ`ҫC XbU>|nv$kKiz0)򶖄B7+حP9?i"X[QەX?$2ʍ"+`x>Dp(|GFf)kثzij\e,I2Jf$ ghڒ, 8d«gu 9ukmUJ:R(J:R(J:R(J:R(J:R(J:R(J:R(J:R*`Xp2Ummŏ8mFXEʪ$ X:WCZ;q<oɺ:x߽ Ey8>o?顧 f~Ol훀BbGN6m[әmWoҴL2dD$|]C,mJڿ!oE{hm=ï-H=s"RLGV,?@&"x|oy7^?cy;{@i#7?ko;jHMuml.jh4aZ9ك!M [V٘讇wcn`6][|#:)-)CJH=kyZf1T r@ʮB1VK++`x*L4 HRJ57n O#We+ <|0HaJӋBí(X5^~@xV/JW픉ZSB9hK2B:jHX5?+,6*cY>0?v` r:Q 8eJȒ@2;qK&VOicCd{r{RǁXNe5 pi3Ճd`@>UZeZfU7X<r6Fod1%uȪ%H բT`hחpҀ웳ݭh5D˓20 /o!9$Nx'IZW(i(%PnÿQJSzTi=::;XwttOL]ؗe_'C3fh2Y5.&IC |S؇! *MT @mǪW _ ٘4ĕソ\u ,$-(K+1+!(# 9Tʰޣs xd鯏/1}zJ.]x#zwnj-OWYIf E9G-C% F3 2u$%• p=ݾ[\Ln&/c=k1:Hf:IWu N{NzE\U֪j"s`L'Fxz; =sLXXiՎKz %#Rc[XG. S62ڞBR Bh^D)\9#˨LR*O~>1M]ak*k~+ձwͩ+`iklC^QH%1FR^6!!"mo|ƞkPg|Fq6D{Gkʾsd52~Jo,y㲘8@$r. )8̲ X*^lt [bOYX0AWŁi#AjCjDô^fˡ2nu6PI׎zL:Lɟ"~$ZS^#Is)-ؖ@$(33+(v !ip1?υWȶ 7n>h_wH`P HJDn N~OP,kVC.YFS>=A*ՊHE%R̗rCg%XbrdpÏr@Xҹ"RA@̦Ƃ @]l܋U)((I Uۘ(|72FV%𭒐%\cޒQHѣ$%,^=XHmƪ\e\2Q!D B kD\i"zvMۏs{%|-h&%Wo9b72D4>g pi] wwe0;GB[xO,_R9$6u i׻;K x+ַ2R6Z *3JPԇVd1krӺ̟N˲ۘ彭~eF^<?Q|.!y;}{7[yxlsF= ŵ[k+)Xx )^$]7 "SOP}ժSy2'f1v?uoGfN,<=h(#p%h,| `^wOz1Jps%k ]f8Im]q$K4f+ofFr,]+'sA"NձΕBn$9Oj4#PjܗdwvqI!$  G,W'H? a&#ӹȭ4dC;S!t&URE$n@: ̓n꙽I~ 9U)Gwi #yX!{"mN<1l힟;Z*FL8 9_+$ֲ/Bg;:GzX-枫),ȂYRQֶ2}v"~CZ~RrOΝ7|ܘ-]Ϧ*+)<`hTifV[.<]RL 3W{cZu5 Ly-RF\4ߐ^LvR1h{ uR<;CrH䍊 )Fb*>^ THc~uO,^1GHaFO@xsURRΠp 6}{,k]5vڦ O_r $VZxkIzF5SRTuit?_;/ˆM''iÎDӕ}\QT8#ZZ`8sn1etӱo~VV*otw>:{2Z[ 1wW7ps%'f6,tdq&tIbV-]+v*tNlÜt<kccu-:Cj.W+w kvM۱>8F\"YV[H0C@xQ)tre>G¯3B< *98b|򴣄^'@a˯..HP~#XQ) .>Nv=3mmQY*Rx=?R; 2w0k]:WZw鋶Zʵ+ü*GSٿ>5(SY h-8| Pd]6bc~a=;EGu. 5p;one%dXy冡@)XgAFgBV@ALJJVSX`;l>ZJ 5j\Ry0i"K&icCZuQJ # pT9d 3򹊸K@blN|87tzI`7SwSiGN! vOX֕lO &+X QpZåue~\lzLaM[ ~JtK5zfjj%d#fjiڒR1~=]2 `۽;{ ֛raHdj]S]+]ى[%3 D {$I >zU]Crjt*Oc3нzb=U`<-uNvU+fK $x9_ʐi@x|*6Z+(Sh]vżݧ~ٽ:AgDPKTum,ENY!p#x[lӠ<ʦ={oR!.dG±Ji5xHVsr* T1jRUWR}Inڔ<"J.D^:T=FX(=GHLL2&u) 46I4+VQK%dd^|̓|&Wh'חw:P~K4XS⒤L>W!_J<Dyq^ ǕXfI_`n4~񣳪[>+ ȟFF+J,nKB*+%XP'I'zM}  `ZKh=js: Ҫ?~*'J δSo ZDR~BNm RUٚ[e.l+KRď>*Xl4#U, 3oP)Di]VX*ջy7حi0)TL5_/eaI7Uœ!G'R{I= PwKنCnd n{EFZk l}+!zD{/^jA s kJb7K\lh7q#UfsU:۷m'[1$"Y\sFU 4x HJg"@'_y1zjVJr,S9dz̿z0ĒvC%E]Wh=F|{܍GH譙V`sb\(Ë%ח#ȃ)8R+`s;R~y2ڃm{#ڽ؎iJ߮FiBjYH\G4ec n_ !ǦVKoOwDat^nj}G-NeSXD-M.>,eKO@I}{|%؛[Uf%{&%쮾̙VxF+7hƥ/WKg-;=L-XU1 wZVwi[ s aVR# [=eqW1y>4>CKy LȌ+ )[Sޱ{;znۍRh]o2iK7ɮT)hoF C(!J_L;LUǏn^-Aw3Z軑"5ō7#KR|uJ^){Řѝww4x=)p&ؒٿikیl6}Qs}ZSx;Ii==Ѹ a.~Xc8$PӀH/ҩ_sk+ѣfxm&i2gc7OThh*ai=U߯ 롐B*}<vK[E3>G:,ZwS̭#+ *mK w t{3:bM1ݬKXbdZ\+gkE!)^IH\zv۹7oi w,zY5[Tbw1vU'g,U g'#+je=;Nk=B{%nn>w+KlGhѽQ9JsD^=Bѩ]v[;9;=K *ڗ|jл*GBCRi|^fPTIʁ ~])[/Ҕt)GJQҔoJVZ۱z6lRޗi.S۩k$H YX*@ JOzR6hҕZooZSn$S3$2܎Z@0zRѿ7sU!+RY(J:R(J:RѸr@x?:J5W)KDX_" !RxV* W-]ڕWxcD!e)p@_"y$|_BND.|+i*_33̹(mBUfbILe#U33Hl "U>UT mӒݽBU2USc نְ59²Kl(lD^RS$i1$@*p$H *\"GMRJi,'P<% SyN =xT@w~v7u5FXrv{XmwTC-l]Z(&֯a_Ϲffyãg"786 goE]/uݨcn-;^Q]Z9M1arky(Ճ;H8gqCP>k%ENj>jo[͉&SFO!x{w4Xϕ[[JTH${{wj;ӮwV \&Njծ3j,#H1Re-/k:HQH:`Lk a؀S皅3#A#Va" pE%j#Qm*$Hv iU=_]doh˾vyK2PEnVe|nh=2 8Ϫ lVXf_r<~܈&)q,+ I8P)m bƷp-Y6IM5[j.7PcjgcrpDj4i2ĮCJ'Sd LI:MhZԌV75tΖgpL_5.Kj-#Jnd>S\[w:YX=x$GqΣ]]i1unkM['Z]kK!i܎'t, @#,L*u!Km0DDknHe6Gqok]+[zsp67K95(ewiX2W!V /!c0 A20}J@owXj}Ewk]m t&XM\>-PV,+9[RTYC eP0e%DÖT% ܟQKU5hd@խ#1UiOnR6R} _:n)lq}GUֺlK?t|NZZJ?)|MuY,iK>~?u 4Rԏ8+~*Mtf5xlC,獡I#) AGQYtZq uq׻fw['K[IjMEjZ,WV1VX/p9BJȰbfɁk8W[F齃< JpOPf[ BֵJH 44]'{lDM"+0TP7eEf{<$>@HTMvyѪQO2s)PTGTڛ^dܟ0ƶmw'>ڴ?W #_̖Le9;\pVqHMؚ"++x=)Vd=q̋]Hs;K=1x=xQQG]_tNktNp/[ӅvRJD,؉/Lr9_>?f)Hw~7[h ޶{u jsmufZXm~'_ MX!/p=)Wflw!-mp;Eՠ-KѴ5[1ڎH;OY+iY՝v=d5#~딯`f7 Q€ſFV^N{ܕI(d(ڈMV3#G,R!eufR#+ /l2ݔyC&imѴtF'Zr'R4<Ұ,RK ROcr8l:_.3-T!֞6z Y$DvGVV JV_J?M 7Av'܊9K-y4]*kQŖzq /•nFOdv}: [EoC=)P_NN]7lޘr8ޕ6TMsntݧf1,K{gV#0nZu!lV)) HWOĮ*d[}ߛlI' ax |}vL6%uCgX h ?_+Eccܝ< >/Yq-<0zٮoRڶk:NW;ض紶?&dugpF2vX}sn;Ӈݶ%̼Ė˘]f4;0~\o UGRGJ9(~ )GJQҕ5{}:uO+ʻY%} ׻rtEIгsPfGԜ(&C#˫kZq=OO|o#r럂8>,(,9WEo#{8C+sco~P|~GlTʀ>5@pwәç۰G*|>ĂC>XMтgLagӃX5&nǷ nQ7,^ 0瀣[q[m#9k}O3x [N;miJ Q`N>CZBS>YΈB0ח=/n9Gk嬱Fz1rj̫N:muN#%G*O PPŠu1խnmk|Nӗ4pi+EOP$N N̥+)+Z]Xؙy4y[/!5\lڗM&ԦFGZܰɗ%j A"X2oj yzxT-E:{j{G%Kzһv*?S{g_ڮr>"p;֩NzwBQE+IT C?ZEڃ;*.PN [{`} ?km|8V>3TvADzmj *d!?' ]}nG =L"4{͉2bU'tR)}gW礞5%aDߐʰe_ݶzo;lBPTļf}aW ={)b*Kj%+<~딏ͽ#JKLn7o<\BIYv#Vk:#1ffQʕ KF[r|;cS-&t˕]v'j{u>2QC*VhNbV@YuVD^ս֮jBHQ$kaT}pR^N v #حV,'\OrG.>`1Y)e 12fvog RH=zg 8͠z+G֪Nd)d2;2-0$oIfXyGΒBJ*LtV:"xVS>U/ڊ[-TMԓ܂:Mqߏ-c UY~aA`5Bf/ uuqooCc[p|.]b|mXsnG4Z,mCh̲+#ĻC<(Rc&@)'PH60|8RTP*H*RT& Z/0WR\}NJf\ؘ"D3*٤,l|0$^(u8wK}R#BxA7L0!KINbL!#3իjn\gifkG7n9"eucrk{8B()QC0TS{J61$%ԥ␕* RT,XV )#Veo LKGp|!U=#&HKcTuB ey9p*׾j,q[ZW aq]G%8*W<`삖Ю.Q4c#nQ&u"O?lOC)!X): mηs 703L;4Qoc#c.x#ȖJ:~JGDawmAZOZtWF=OOSV5u;/C%lʕ"ì-JF6j0.y0aSυ|oh? {hic( #*mkvOeco};f5fe!c4UەtEz"f:kQZu.|yP&q Lw]`_`]g< X bmvyQΜl=KnKx`lZVfbK;O>!H["M?>\.ۘLju)TAcYg{{؍¾SU5k5:E<6yq9P\YI9;:}ԻWm[XH$b i{]l~vѼZGOWYϪwZ{',WB"/L>-OM-s7x6ͿK8g2 H(Nv${So ZFob;ۖ{E o}Q?gGͧZM+O k0aǶbR(=u`wZ7amݝN[_C'"SArAv)Nn+3`4y35Jtl-K$ηkh pDx6zU_7;?E#@S *@ !'ԕzs{okN m/Fhư,ֱ͜b2LU]!BO=Cín_>|wx9ŵ^ 0BP$ = Q7f xGd#{}Jc5vv;}.n6rkeU- &{3P >8PjC9ywWGI= t{IKN8)%Цl'}N$%D6GƦliگf[F#4.l=!hk_6kd2XZsIBԒۮSSfj\FXչ[^KKL1 JQݝig waOsXڍpm#RfacdÔc)֭#g(0dxe5VhU<ٻľwbw;m+k7?i ֔s¤[{_ߎDm>+wn4u8$U!^P]` v;=`B?C^3}w-Ķ0ED)TZn#QAwO_#}պYld4>:\j`PKXׇn9y`[ &bK=R0I> %Z8.Ϫ~k_Mim? KZm-`RX㮼*VFֱżҦ-vcĨpW#⺩,#n^RlICV(BIZ;~پs&onh.X\ELXrںXY%ao1?@Mk>]OlmFWaE\~& G+=5w{tm'> 3q͓g+VĢOk( L+HQVuuYǗdǙbw7{ki1V͖8k V5 ^~Z_*zFj=%&oVljFL%ZTIbYܮĥ ?ilHq*ڴ?C׏=uV%:#qpeL + ꟪o{=vT˹ UWGk!tݫp uJMnȮ!RXfl>cOu7 Rx P {"Ĩ4e^~]ms~ӴV'k5Uqɟۻ f2׻_1ǽL,YDnZFٸԨlXq]wrSEj L/NPبfoo'~ϵn6(湇uqY,rTNe eY*Y {=f-xlI)2A+-l]VHAHPRVs%Bc ӹyc7oTS.m6yX&s+zTYeHVI",'c41M!KJF+m [/mbk4 a* L& w p>F5E}miG]d& 8U-՛_i|H[0L7pZ]|;i-ihjB1RT"Fw;NnVijCI$%L7:)~c՗p9G寫c폴{gm[} M#MKgߺ=}w}햔ڍыY[Z;Sҭm_-?/CApɑ lٻi8}/-P*̟ݵ`Hڞ\w ]sov]<^Ye3[~Ɏ 9Y# x v\ZWqc@P/v':׻m}u;m4ËxgArz\4Ho_GvmIcG s4aDvB^k_etq#K"QKnvBVyKn~sB4e7r݊7I{foMSZV,l#QTŧa# qz\OFE`-2T{)%Nl6Toƞ-n^B<[-w#M/CR6;Q0aU,׎U }t%/tAxM9PJYBgPR e$ùݭ7FvߦMhF9c)aNRv=h$јrl@Mvnvat{AZDаR$.ɕank u8sxL,>Rv'a'.FxuR*:gRҕ57zRWꭊv5^iOg}ȳW A*yn~%9V?zRg,/Vv+- iiES O^Uh*Ȭ:ְLWA-4Vk᫦=!'4:bbS:Ntր Yl;쮔VAU"F'ߗU}id NHX?k43ZM4s}l?ɶzu@`JsB>{9`x vX`0OcY$HR8V>( 8ȱ bS^HPc<,xaagMuNYCO5T^58O8<Z9C }?>b?R+GcWoj1ZO11{EX.V>!/2T]LaEH5;7HXpeQIjGM?nXգ#q_/p?ٻ)Vm~.߭vQ즯Rgӽ`KW/~2߭}. WGdt?{i0t<ʂ.$i"/\#cU y8[־%V|݆k驹cU Ղ͐<#z@O4`H5nBI>d^1j&5o78W< xnH-<A<9XA5昋Tzo쎔mi3s[8G d֠Ƥj=}W}>s>{w6TxmyfUY[arI|u)^ sU󛇩,Ca8‡?F\B/>O7b}G^<n{?1Zwb Eyly/ф9!AHp82==[$GYomNŻ߽Us‡ӂLle\G$cԱBǴ4DԑT؏t1p{ӭKs﫺.}45Z\cbHA0t.̑M_B]ڊ9cyTFJđJ\VU1<=wxVAian+Uw n~Ѣmv3XvlpJbRhG ת}r8kݕ &O<8QFp'x=؍\Ӹ E6mmXboWi̶'NeHf^>tHs$î% )$g̅ JH #`8S(9:Gjցmw)-b*r42%ͨ}R;4nU]S:smmo4&άJ,r%ZhREPK±ΥITI:۹{+tz7KJqeȉ 8dޭN=Lwg}˵;Qu.ܝݼ:wtF,S<̗jFɳh;\Ņ6P anÅv-ڸ K,n9ĄT nu=ק>vK?'<L-3Na/iYCWZ.y'yw{ljCË'iTDc[qnԵo?:y4ƷWY1|>qʵ֚HOjx=$WnGCNq:WSzvvoJpc0R R JU 8?3+ N{\ ЛtNGQǝ5ij"LXANL>Xm)(+oFnqwi?Ø))mAQ@[ mՋXYv2A{Fc ͜+R~V7DÉZ:IWyViLluff}Uk-E.KJhc0Kݱ R%%Lal{1>TMgwsGln7q!:6cL_Y|JHArx?蜺 MCbȜ՛Id̍G:u9AΑh3ͳ:^TP[rG݊~]w='p]Ē惹-[=]紱"1Y=s;3 ]JI 96Z[mayLP 4kM+Xlޘhͪni,H(d.*SlO{I@4*~MÌmG̒ =lݡ#i`v)iZ$fxTv$=÷=>?gfI˾U<ZW눞}etE/k韣]wH?Իv״zkn^i8teԵͻ2Ħ2?gq eNeW5]ߢntK\[A:^롍^m6;$w9=S&IL/r @~TMl/gllO0DB4U~u-.' 5X0^Su@b[sp_:V=dIFg sݦr_T.ҙ3 %ZI< ǟ29bL(_ѽ&t=ldu}[q!,h$6cӒ]y$9M ؝c L˕%]P%@̛YCE[ng7~[3jIsd[٫ "#J5q C7an>8}H+̰s8' 0Ţsg?iZʾfV}BI}yLH? ~A^u5g~w#պz;[ω+u*vI,O'Kt  4"li^28('CzG\)/YQw~1>??B HT}b}Cc?Eu@byʑ>'[³~tV%m6GWXP)K=TpHAG1Ϭ(Ec*yS~IQkH|~Տ?}(czR*Ӟަ{l{c6,еV(a2R,ĭF12Fxƕa!IdpR9ISK~nkM:TnVOMM.ST쑐I/YgvU²ũE䜡=Ʒ N`z)NO|pQo%N_q؄ B,7eO'W# $r[<?7ۉmE (X^U r %& MxzЉId22Z 8*WI㞧v s}ZOV^jβ81$Sl/aF<~Y ύYov=|xr)XT]KѨ˚1K4AĒnQ! PR8\>m%/ }.)Xl5.f#)="*W;,pȒ9򑼘 2"@k;% -ڴ#/S=q&ZLe* x"1$uoe. δ:L&{]ָO;,rZTS܁2 dP #1ry3a058Z`|~00;7ړhӹc2+]"Ê4RG$AZGyC=NIS/] NAlM"Mrp.bwp}Yk#VuڒnZ34uee%13R2[is X*M rp2*4LY^+8N7O+סkqEJ9}%ͪD۟NWn(e Uw[PR$ڮm̪e;?M=aJVX@ ~&.0rzlqa逽/"FνVcW x%COtۊsYf u'ʳ-kJaZD`$n*B },BRu;g3>Pfdͬ8ːLKe÷HȘ$hb5`EK3VOҩqթzZխ*+r?/ xԉL#K4)3HD&K5LH9#PxR*d (;)$(a[JI#7i(C$#@OWV6ڝuA)H$`$jj;}Z,*KZUiTi,b G*W)tI kAᬊmtѿ /#Dp晴 PE[/bܖӜua*i9!Y)1:(T2R$t&A VܱYX׿yp۷q;ȣAJxEGn޸;a6gJltؽ 9WoGcWZu%Wݧj0"_%bv #-j{G?@iS_L\9w&kĉ܂,#AA,JZrw$UIGfao쾗1,e4')$I^αnߣ[${aw#2n0fr=pa\2Gnovt6F8K-#j͝N豱Kkh,ƥ+MՖWGg~k IcwR35h={xx N̷ͪ-YRV%T=[=$q2$ vK ob JJPu#0J,$[g&wVmmo;S4:u;eWSiЭ4+^Դ4ɯX]d?2U89YX^Cv.bv$\r  p$h^/\M;i͒[a/G#]i|߱} Auy1` z_SiWktVڋڛ <$N\B;IήJwy{?R^~CoaR-16;#YʳuhjP*gGBV6k0a0'M*kdFt9 "Fe/@b;;w1{mܾܷ'k;X+m EoTp b@ojl3}jtLj{e􃹍99 Ge@]&LDM=3Om٭m n<֜%(n JXۗ'2aT , kq1j~Wq:9n.^.10)6R bk%mVٟHvp1 ;QA1Mk)2cw6dFf^bu~b0mf˅$ְ& ĉj;qgev;{Ӓ`t&_#|U8ejSKXɑI L)tV#T S.g*mm.3y]  7 M06wW"ae$G+^icotx|@Zv K-]C*-)Rf׵c}a۶fuFc=4ay< L3Hmر]|fQAue5g{?C/2R`2|6MMh6h==t$E{R$+4~[сrA ~_ݫѦNmu6s4TSJR@%&{&m6㮈3㫢څ%8L)%u p2YI~,*e$AzُE n WF~Fү o#N+h33a%Bte+=apL6*ZPbi5{W}95e=6F._קv8AEFFX1c6ƥx7}i $qRCu;e t'HLK* /NuiI _%cH *J쾜{c :  Rf񾣽 [sC:LAjO+GBW+ BkFZ\+72,xۆzz׹vvѰn 49ұ3w#݄qh'#*{gn?Кv>@mݡ)RRGX-)*ک7n.4-DRvT0F93ƒFeS.i/Ay@d(ėP'1-F=]Nz:g}n~-cwvrΛdrkLIo(^c֚7Xح8xPrCpu6ɽtN 8ҠL& L9Ͱm_ٟ輾5Eys:7>P KG6#%% >ε-kR*{2H~ A:(b*LGXE2аToơb%ʟq_KNr|kY|FB<} 2?OR(ڢV0 ?/UkŎw[wl)Ч6Fhy? h~IdYSVc0? ;[IRL $ VS]=liu9bG?'p&dũ`gO65_,0_q{f$*yʃuqDM=ax6Ee9f4< :·.cgYk`<ލ;khцz IΦB#*|G >zVwV.w_q~R9a8ba1zL5yR{ӉEOLc??ګ <JdʳWm6d&sNjc9I"һRZgYT1Uв5*JlL o;>"n}pbA&., mwwwwr;{37۾ cJⰵjӕ1y%SYlx&b@EX;]y)% }u[f6l=<[E_9p8]yŅa uzrݥc{i#1wo|{0d}25`ISedO$u],:V0) k^;{=Β0wSᲯ=TzЬgݖ;qQۦomkV{ f,IƵqPlJJ6 A=f\9VӤD\'gpW`͗㐦;k8E_cGw=F:lWt v4YQhw6n9shxzQlomAeMҐg+J (@+:۴p e :l&57.jF˄EF%0HZVye%B>/'m7_jawqf?xq%kmnДakC*R K`vl7ktN3s0x#k^%UVƦT7 3_QF^c0 Xw[vv~nh&lhs=4 J^g@g%Pl]XH.O?:;=uY 6EmJ_]ȔZ b۾̶p|qwRMy' 8HLxE,I A@@  N-ݬw7}޵3a]aqn* 9RmoԠ$1B;˶}UZZZsQϖр U ORc_|+ޖvN7 le*Jh**JJAa.RU ZY-S5,y!~m+9o^~bw&<5x_] yfVN때d( >xAX_Q>ڷoۆK)4~sX}!Y A#>$eP-7xTn׈O\35[?ݮ:5OEXܖv4@8_z4|-נ\BB1G־5GS7r%$%$ <L&Wt2{կ쥺', JFՒ`ÇNi21RgHP1ǸUooUԣLsgXҺlQJ?zEuYbG gP\MubGr$ERN[=@Wfb*r>>JP5Uy?2I2jjXkJUul}kn!u|Ŋ{>?%`s$Au($I.=8C0OrS($j&-AVŪry DдDGZ֬Q7'S:+ii2d?ZKWƒUkҝI7XQm,MR7\*T>oO70v %|t)̑&jEʿu>#GJQҔ3vx-\зj4=~v㏟b+di)$KzV$GDY# ::WpA<xQBkTs)db,U@:RefO}+Z;uZѳnG5 cr<#礞TLYҵ@!JCKƉYHiVHH@OI:q |LޱZQҔt)GJQҔt)GJQҔt)GJQҔt[ZgSh] {zLUgIn# V'x)\hN^: m4;Q>=|D`~n]%0]c^Ӓ[Hm~B-`D RwnJU3ܟ=nG{ҕ}N+n7 qzٸ=5)oHF3RzcѷbvvU+4=)GJQҕhz; 3vVşB{Z)8TU#4KHТKƲs¥r7]nۻhC[.maVtmCgX- of98#d WҬ%|eG?ޜ|:bkOr>fzol&Y+ l  )u#>jJ2O~7#,VJTy,6D Xp̲#HjW-u޻[wicnsdq:b|P^N&0yLMj)+AŽһp}(3Ij*Ug,f_?j\ EeAz'1 8IĐ@n PmaiW7kvl|a!ՖʠAA Vs+jk}n|YF>i;ξFz܏Wken>N{mAZQ^,Ryys {LEW؛1#b)*3匨D{fffqbk{nb WƾA@}֚;cK y'go$NxteV 2?mӭa}aHZRHDFH ;~󾣝==N͡nvݍSxc*ͩo/qB##&;ژY!DAV^|?g`qPqJa3^%athh7QEH0[[zvwW3l[nlx4,1nm9$J[OueCB!ov&9v?!*њ/եtwMCg˓OOPNhZй[ q0]tS>17J*,m'/7khc\lY&s@L.lF<;|oG?3뺈˞u;9rZoom#ɪ5SqrnMմ kfʢ*K -$4 mQҾzͯdl p{$-KjHTHq1$ (Eh?( /詎٪ gK[_N4Y#K#,HiPx|d{Jb8 _Qi5z DO؝_Ի]q((uYpbE{m4z[,, C!`rV5 <ѣ{M8bLnqHIHHQ_9},^5JiF#JmJf̧d{** țUcusڶ}ć9t)`ttX,sIUq5ST2GCZJ@{jo6g*;Uku.,_NR{-Y$2O+@e%`!)1~@)o=zm n" p[3ARH'۽`/v*~䰎5O8RD8 -9"2O 'ЄPtp#m饷x)f]/txArQ ~Å LsL\Z9Jΐ=4\ލݟ݊TrIr9CJ~#8:L~_ҴomYļG=cRJѿf֔4v 3,O"PR ֕XF---gRTO2M[L]I2I4,"@LpBpەd{g-oOe +1ueVSGB'{ X 9?g@cs ~]y9tkVJ:R(J:R(J:R(J:R(J:R(J:R(J:R(J:R(J:R Q9t<|䝔t3NBɴpUHrVW2 a Ń$P ܆rl$T\^K+ &ҥ@f:OYGA"C۬蠨Ҝ h'yBI϶2o"dC|R/ ~>P1llGXT?O-?D% QR%Ň 5^ad쭈v`x,1)heeWeTGη)XQH}Qpl6fUQH< C(PpO)Ԃ{B7;rTV^8f7ZǃoQ LWvX PS^H  ?RbZ$w-&JIoG0+KL>hk>9ӟt֨25F,КlE})V1H$N@YTڲb5ΥÄ84DWa =i˂%I^O<C}I2;EM)+$Bz7)=9C)ڴGm"1I*ӴCykR!)E!YG> vG N,fat8ǽei:5"jPH()N=)f:Z,Q@3dmTl4f(LbĐBxTrѩ>I-ݒgjՙEN哤~ƗjT{IRʚI͹"EoeIW D)EgP+Rxz-2B/C<Ֆ4x-$qXD`XRX~f?7'8*8W1!`r6}*0!3WԦf^*%K7Rxʢ~Ȳ4q"G#w2I#"^W\p'RkS6SpDA3~E{Bۍ #^ 0ţe-WbU< e&0&gU*H`[G%qk83%[YX"[YQ^ {SS fi*&:bXĒ*Ȣ&#OꇄwKꓝPo󏠩KlЈ1Q >Uo$%0G tSIzO%k~i,W/)̨UwFN [pe(kGqL&@y@EU=aGNثYW+B,Ij:qefqObS3{c6q51X,5H -< -5ab"t $2yGbGeQ*YT{UX潶H\+Wn,WhH%IA=>"Quqq8gH=q $[#U5fXW "EyԡZWT…{RkyZіP]BBE*ܲI, Y(+ TI2mZ!mˑ61q7c Rz<+4"$8@[A#)IZn,hː{"ҸmcXPh)ViV ' RA‡=%.VEqjKdz5_׹fyc d10 x<*uD mԌxe$Uj1L)U]f!YyF8[JpL6 j/U[Q=${U F'cFuFP$9 ?^-Ӆ a3o’ɨHgJOu&/ud1pV[`zVrU,E=5fHI'+~~~FQd4tZ-ADE,'ە[ # @[@(Eh 9\ PKʟxpy ?/(m*xs"GY" ~*>A;<‘EN7;)BN9‘HET o_X'GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔt)GJQҔth_^]aZݿ'W>2?'G K)~ì2IQ|tW?wYfbԱ,USQGUS1!ڒw-a1a]1bX8#*G &p:SfS+aS`~uA7wǏ&-u%)N\5VD WcD 8poP7sO+f ;Δ#%1稞 rT 7Hj׳ VcbHF'FH+Ȍ|ŁbI5#oa%9Y5؞;HؙOڻ$Yܟ͝'Jjۄ1KI+ IuV#yM>cnODx$r8-]VMn$5V{Kߏ"g™ #M$El͠ #L>DO6+TbI+ߨJ׀6~"9+?Ssz*]_dɣ;Q%Rbd쪼#H#8RXm5OgKUҿI@%t5e`ҬKީ*,ۂH Cm?<ϭI3coW5Z03K7?W+ωp8uk_3Ui=|PK<o~#ujf!`R mvFC?e } "bhX լmbݣ*VeNUubB<%zH, E*Qarx+ s 0sM(b*Ϸ&壚ǀXc%gI ێ9=GZI\g=qbr&V2ߔu^H& Zvp)WVFwq(:CFI5/ix_x`p5b_U~C|\g@S毞M,-zDHchWGH߿X+L/OʭeZYdT7̎\Bذ ?M)DY]IfV^VK{^b|uy$y$wF'I$]cn*h Bdk}fٹ2݅m,l1|*>~Pbp-.\Jloλ3P567:PDɔiՎq49K_Ҕ֊3?J%)9Uzj[S[Mh,{8߅fd{pG%:72oμXi9Fe(KG-*CNTrTI)&*uo ;PtWq_ 0c!xf_J#w}*OO%";x_~?f#=s't]UG#[h5m<=uob,m_j.t-}- pU#0 +j2\dUXHެF ?bMEvKO|S_ް$r~,$+l53V"9*ӧ-hSaʹ|]i*Ur6h6>e 9YDbqxqdy:\Œs5dp_roڿ9??eQíz#[b.SU-U2*Ž$@>?$8'(›eVV!V(;Qn1J ,=I'QE[Z+&bc(qLrUG=pG4e]Ε<2qr-KM f44!-Yf ,9~x?ρn>$I*O!?/7Q+UIix%<|s0?ZZm?So">$~līΰ@ }3LSrIO<֏~Ω9$bwXx䍊I8*G?'uֵ}sPK!`}=sBsBimages/ez-8.jpgnu[JFIF``ExifII*JR(iZ``Zhttp://ns.adobe.com/xap/1.0/ 2021-04-14 7c5fa280-8dcf-4609-b46b-98900b753f5f 525265914179580 2 Colorful Asymmetrical Bars Digital Marketing Leaderboard (IAB) Tyler Bishop Canva C   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((Z" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?娢 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( _6%>O_* ;"0eaGB)k~BR?<^W4Wx48=܀>y#^L;$tY!J:0e# ]Ш]ϋ%mܟ2Fz~#}nSٝ\(Q@Q@Q@-xO\"iL2~RU&¢j8Σe,)#+N2RWLO`)((((((((( ({?kw7ֻAaS5w 8:$w_C'dQ+݀3[w>y?eh6=Qס|<_BH%}WP~&g4]_wmoOX 5;U3xU<4enk<5h]O7#:q=r0<=kT~˽X#,)jv->SPG6sW[EeW*C &VvgxgXt{VͰڡA8c>^JDh?~BcלtGѼwWR4 /˳BW;O*MGnfO4.t-?G6"1cr09>0~UVQx:.mYF6PA`Uؕ"RI/b&5ޟ૿i҉I!^0ٍXq]/]>{ໆ-6QB˗SצMU* > _V3\g6|ȩR?j).,iϐ)V+:~|YPWDӂsgyŶ3%HdvDzWr `5gtxnTuzW17iIpdq>|;ݟ_jڕǧp Rvgf 6=z髂WJIQZr_Dm ݌`Oc?mDž5RbV{v댿iZ4E aѶ#֔0\JZ r/+H%ǵ6ŸuRÖz;agA8fWp4Ť%# >_( Ǧ+֥V}M3K] uerAۑԬa{xikh uqUͣs<>'M o_e7=Y3*keEs\SG~$Gg$ȩw"o~xdeGoWK;ɫרaGmFNu #{YiA:ck G7;cVZS-Z_)A~=x=kc>C}erDb[ӑO:;Sd|P$z~ԠtO\#OO*{d(ff`z֋ ܯd|i |4tu#u |&ͤ rA'6kJ+Тm1NH j%? Z^im@bbfX'?+Sōixq h93-n@z*N1xJv.JlxFE<tNB@fFz\Gqzt/Z.#M2,S|p(sQ\6hњ/ j6ڢVm# هt 6u%= d~UQw?X95};Q^wvZC)JdRw ziƉzک c2\ 0z +m k'ß%=|5?wzğx~xVf#2 0Tp1~W]?m 1Y-6),]8j\ME]xx$ 8' 0r׹| OOgk-xb*z C*vXڍZ2Ɍo lPQ+=iXzZJ׵%BL8=+uw= ,c åsTI2UQXQEQEQEKi;[]g81@~Ns_7& W<7xK%*䩐@I$_ڷῈL7(A&`pxz_=_k.Q c0uV_-zKF pA==wh_᮪tټkR["0~VB3x8W[k23aNGȽ}~dsM 륊tchUqvcx}Jb$UKo$T7y;\Xԧ[{KKk=zq^~bKTm*IA{D߇uH_G8 gIdA RKgr~ 4Οs}"\lydlRrs^N#Pr( +Yc[wN{^#oPB$20zoGx:u\^].y+>b2:Ll*V1=,=kV㼌ybeNy!@"=)@z]VVH~k#jM._^KɥI+I%rPa}uomma D$}no3OsNQ~EeQg#%A1bIu%Vih{x@:^"YfsG09bGEn?pH.~ hא\@y85K)B0:haʵՒ>ž(qrls^t%]G\I1E~Vd3^msJTcr{kMKP]CFHr3G/cY;E=<Čaaӿ|ǐ*aqk4zGſiEh󇸒I@?-?:ƙc@OlxNc@ R-˛M73.1.B(| 3W< wYV|/!es,#2)RƼo`q1{tmOcGh>*W!rcy7ao{%տ&bFWX.i(^gIm,NyOwc ݆#j(վ&|s_,pn-o$0=Ao~jzaoz,3(P9?:>1-Ԣmljo ~0Ѵk\ĻV2GmN"(V'ya]nXaelcVI,$dɮ(((((*(DM/ oxN#LUN~iwimL+ H?@jFFkR1D}$} iUfav&Ts:_Ěhʗg]*i^͖^\oi HpƥxGzxH44ˑ S ut-,<߉Ri d0 POZ8X.YOv IY&6Gn"^\JY,񜓒j4C4-+*/W:bUfͶ5󬉼wu:imcG138~|Tܜݞax{V5+]>Ho.b,[h:Z(7e5ϝI@g=~,~~J+C p HeF#S\/c{3}v:zmJʑ zWit+K;뫌nIdB(\0s[.%m~1kC%Bऌ`EYůjw4i,nw*c$GRSe}Gc$WV3_hˉ0Tt$לc{Gc-1̼q)J"?saakS*IJ 4kVi\ W'g޹ dڡZ(l()Kg9ֽe/xkPͧ}@_ej_+ƷkWP} W{Vvs~#)y~TfC>[~T,H*GTknR M\ Ov߁(mP_u >LJYyʖ?^I<œ'̻1N8χ>Yz7t ڴ*}j/VĺFyFApR-zf }ui qVߏ514mݜJ%B.?3'[y7hثUҷ־!}~d  #h+OeG6\J?*3%+JvoJ5s% T:}s 4=V}7Sյ(oa۾=ʆdt"FƱ<%vcެ9#xViႶ6ϽE[`@Pn _R!{(Gk:epm;Ig!e\dzQ+о&x/@k_I)DQʒ[=r}=Mt?$moྟj"jjʧnYSfSOJ_G? )nq1jAI.M$xMɊ5=Ϛ41&k{_bo Z698|:fca17 s?r-HVM2¶WZyU-ʌc#<׊A-+h$h_FS?1_Ok1xBO-8dkϼKx~:i_h~é7vNW,Ob0qJ*=_M,ţ]z~\Ə%Εf-lHٷ|Oz4Cjfi$vYCkؕ;:Rt)œ 1█[$pH|Vut4L@pB>y8뚅8ʔ3S<u>|]@F2IQֲQ.g-d  =A -ּ6<:ڙď+jہ1ɪ?nNZ1܏o)qY{VSWQzF:yjVKwe\nr1b]itpI U|]aI4ÚկceYiڜt`xki-˴@}( 6\nyx g/n|dM7z47m b;O2HqST(5&=S],fdʿV<ΝhńVqcpO^~YiCcI~B;> #=8ޱ_6ԬOW" +:S fc{/`w7!F{=|MA۱pèaF }^=Bv_aC" T?оeX 75+;EWAEPEPWZI4F#!X5?']_1yJ]4\L''$hğ _ml]:Kg1$?.__˳3ֲYwQZc@I@??'$k?GYVny (F'CTnmbyYq,qp̬?Jxfc@I@??'$k鉴{e@$6ݿ^XЅ آ%0gIv>fJNk4OI})0;g6yR(2ɽC+9vϵUEr?5BG2C+~TY?2OƏ@I@?^="i4єY{X =jidv[mɑ0QpV*Xpzx_P}f}'$hğ _"[ۼI,NbOq -ml+G0 һ|?'Xƛy%f+ g}K_]p{w5D2Ҡ>s 3~}юK5}w;x-Zh>/X7e6s8T"X-n6 3}j褱VI+y!k+jN8x+F}u ZPkXo`ud_kg#՚g|v\ ]}kF^K;inJpEy%Lqm=ĪI6o->qe%`PƿIeYErp~5U=co3|7soֹҊZʥIT7Be'-Š( ( |GOl;t~fkѡ!"v=EIYX袊GuDgv 2X=k埉(oxic?ul;WrO^5\A!}>ϕV>[1Ģ+7 ( (=u/ z]|$ z--wyߣ5c2ڵg\<6%\N8/?.0ic}pf{vlc޾u;?ƏZZ,ehg~ K]?MؗC^pk [ |<ط}FE޳H/h,~T vҾt;?ƏZZGhAzV)"8BΡIJ`O\y7:MAd|*̌d--wYߣ4<՛Azжg`FufUp_\-֯k}!{$+#~\07rc鏝ikܳGh;?ƅRоP%dԒXxCЀ^뚣jI3D" vI,1kZZGhrL@W??w_V--wyߣ5kzƧ=A408J˰50rTm*r(QEaEPEPEPTQE|Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@T5A eM?_h~p{ǯ[Q\wf*ie췷B'jyeDAX׈msVzjX**DŽxZw]L z`VUWE(#+QL((((((((((((((PK!56""images/ai-amp.pngnu[PNG  IHDR=PLTEyxy{xyzwzzx ziyzyyywzzxwxz z|Y|xwDzyyz| w\w |x w zvzw }{v w y xx }~u@#|U3wx z xc:x{O{*}v"||woH2WiXeeP(|4/+~^K`KC&₾ko;+{j{w9pT>S-*vA#γGlIDATx{XSeq1 qM`# 0 "CQѨk &w)e6ޖ#hQ|pyI״kymkky.\Rqv=/>cCC'G>y螆߾8~L4A$Qprm-6|Z4#>k;{eځ GDõaH͂ʶg#'6ԉdZ+$Zpc4ES_dtrJh`V$WX0:nZWkfEC߿|^R^ٶ 1U.Ul3U8#=ǹgs0U5We+4bC O3/7'{ՒWߖ7LvCW$HDynʴ/41D>3G烩`$eNp:έD4R|pT.HHab }l˵w;<ݾrU2^AA(7}o%Uz9Uͳn|NZ*yc ^ok4x=Tdb_O+.pjٹ+Ƃ?!?+N]eۥ/Tr6Mn %W>Ƞ 3'K#EY7(_TI"iR9~. !pj^ cd\=?F!m~f?p8aR{k/~/1bvs/ 莏k-/kO-E3?Q( @!IK sԌڑ?n=G2aaa]c[Y'ߜ#DyWe)Bp5&Ob̬G=j哓e3U!}T6D!9@Rߏٮm7M_4,L' 1Izʝk݀N߿Z$Զz|(Tdn@_m\OAԑe;(G$aK q Ap.@޸i2T+w ·n@%~07pCB 7GֲO@w3Lt%O9Lcw 4 (ي~ $3pI{ +H,% (+/ H =h)4sѾ (ezs`d]R"m (b | +r"ߟπZBg[>.{ؘRRkϛa5lv–dH@|ՁVOznr 7i=^ 9\b,JG賓 $0IzW &ˁJ|`20 ^Fc{19 ̧ΔMprnjs.#sN p\1,!pͩbx ;{@ }5D]eE S\ɠK7|TN]m0@“m3_9-JO.XHHH}x00ǟ!iY ;4|=r̹ByS5[d)ߘ7;.܇%yHMX:re>-zP=Ai."tB]RY/<ΕeMZpVݜ9tN,c/K@–|eֽ5ѬdyT|~]D.\pu<`ȂǍ޳r䒻wa'3} 5M<a ?'L GooqgL>Cd`EL;䱖(I3Hd!ΑoJ}|dkzCci7\砳1'D .wqRjd&ooc٦ quG:cX,ew26ho+Ve!=^畅cB|;.Àd[6SzʗLq>d)9[ |Zvd_HsD?=i[/t[zes^JH KF<U2٩td/8i7s2/DCNıӧ}REQaΕ 'aȀo̖)ҳ ̵E.SL7U~o19 FjփWF%%$]v;΋oLS 4$NiH`l233_Ҫ7u{[*ok@JRW]ܽd3ڦ:.9rhxΌ~k[ӳ!WY2?BbtUrexgɈ{]w$#Ղ7c =1cE2yu2Ε^H aFrR~^XN^^w*z|,H釩󓚡D(X~l$ 7؛8\@ fC<̭N%Hyku41 5 i$8@DEb[Z &0 ڼsR0sc!DlYڸ(2ס$2\. "2#Q35|䮧(_Nb<,-$~y D28؁\{$Rëvnʩ0EUDAf$P9rU7N  e_bT*[y cb$`yg5?3s##ڥFmzöZc|K~{ypEz$u4ı<͇{k`? 1y0aI,{?VP[I(dҡ_,":t)BhY= ~̦QD|ܪ{ ]MⰰgJfd&W+;j̬ꉺ-?bF-[býtW>Se!hA1B̅_r۲> ff蠺1pPD_m(!!)QDŽ ?3z4k؛.,& ;ۛhi| PƬϦAf%Ҷd  ;dҷimτ$@^mg=g4YO  ><=9}*DtqMoyI|f -Z[Գ5ӷLx{˳:2m[%!~vNԣ{+wyy2 W*?^X3k'A *I">'(aJ1q q!, ~\X{cP/Ǘ\Y?.WQ B\ٜSˬxz'F7u+p]|بLӫ'f+[Ȇz/&^=o[˧9Bʹw4c?V[M#S p5\1m{Շio-`Voo- =?ܚ9:pX> _&%G# QM"qپS5)kP2yNGe=_0jӗZq4\E#QI{&TNN*4jWmoaY֒+Dz:ѸMXf/ƷrNjBEwj.,ݫcN_ aN,,xoMMuZ9C#-~CgXDB•|At td@裧YG}Gez沲C ">{-|}sMz$&f jXd:s28.ۗfHvwA C ʊ[ڹdÞ*S$9FO?ǔ>3N;f47eo+2:+:zL5zP!|+1n"퐕j M3ĩxNГ<"`r8>{P,pJWR`Gx{{XBoa@xQO+I8# Orx 6P`,?n,5?Y HUwsnI&:L"c1R(JrSW|.:|S{{%6ε $v1Mkf4@PFb߷r8Y=;6:˚")=]yC@=fqk !uٓUvϘaӨ(fdSFq>w*}rv+Ջ\]L#.i$@ԫ_51s|T[Haquk_[*>k5DԹ ,;FPZVzx">`URi c;, ~$~AF}l_3J]I-81>>YqWQa,֭M®0``w"n:uCE!<yߌ/|{a>I?`N">s@mKJV ]_qSyg3|Q}g 8ӎp[*q,Sx CYΪDqM I1 ͺ bꀥ_[g0rygꀊzV¡6R|o Øl.SW1a*Jp}o[i"u?9),T%8:♳4âξ֍v{"!dN'Y&:/6߀nk!F $ח`_s W{`Gc&.>/m1Zݡhp@SK:r4ҮvT]T5q"F6xzaʔܘaΰ>6 \uנS&Lʞd\Yc:a䤍Pma.AO^)v#*[F5NUo2pEY%QYbRd),JMVûFDJ)-g@wL>eЩ8r.X#'""'2aWI-ڊf&i@zd2<_\(uFcJSUOd LW_]`K GI$uS6NװB ):#atLa<]YRְRH9k?`AȲCLP^Sbzy;W$]=.v*P3D\IO+A@,?i`&hWc4['Hs-g2@ɛk8oJ@}Hel;ؼN ցnqg[j i]V)FF't9*Ync)]6V-Q'GmP߭untgV47ZwGHL1 @=^},'NC6dbZ^NQC~~`OԹ ;6a*ce&p YZʝ}Cg8+%/鄚ŀG^TUuz.M^Ɍ˯qDn+T!EB)Ss/jR,%RA޾_m1Qws<ոa{:N8bMkuA~ A?V!L?@Qo1Z̒7ʕ#+???-st1*BqydT"!quɄΦmhC>n-=FY\&Qgdo[E 0W@3zfв]#DXCHݝ2c:ߌh|R3Lx S/ $.-mÄ\r̨f`*  Nū}_B=;CbFT[G,P?bt@PfVűs̨63+0<z#.!Ή.rƌn AS$}P6Ǵ`i<4ۼFYpX41g[_nʌ[U$%l W$O;5y 궿S@Nl!Cy5 =Twe/vufT=B wz9"LM@DB9#VXC3:-m 曕E f;$såTI; ̤4sͨ.V>Zuq|`}#Au|6RfT~AՏzְy4!I0>ftЊEѝON`Qm;QQz0>f/^urS6zG(iC9^;e!8=S6:Y]ng,[pq|swEϑrt٨hs ꃼGqLncFfT#긬lG{tvU5 Өp;YjkO4)z `>WBzy2.{N_5RPuK._ >9%O"w7׉-Ph  %&V^_㚾3,8=n_dZbݪOOǦ݈bs D9ukֶVwb2vccPwFWu9#8G$Z\W#CVHB6OA2/Co>G}G}a*W7x[IENDB`PK!#o,,images/index.htmlnu[PK!(h)h)images/ai-countries-250.pngnu[PNG  IHDRjtIME/  pHYsxx˫gAMA a(IDATx XS>-DK 5VȺVi[m*uNŭЮڙ@[X_"dKfa֨ ڤ0+#$| w'yN>'ǣ{ _tׯ㍛7oz.dfuV֧O3a) I IJOn]s찰)ӌa] ;+GpbgXʾt i'FHV׀䍍g*^95pkk\}#+U=bG[HʉǦWw$o~;ᄍo~>WzeK%7szQ F!{c;"_{gOjZ>66 xs ?6W^@}۶9mnFT c$LaAEg4/DB^eDa I Ƙg4tErnH龔_(.bGҢ[8}ÌǷ>1Ow[5! s[i>YP" KPPPXcC#θێUI2SǼ~1b̶ڝ܌6;9+y޹ 0)C͈IavoMN17#YNxwsxLw*y\|ˆܧO#S W6O+Vƕ<̓~"2=^#?cЕG-򀠵;S^XJ5E~h?P'OEY{ ]<|U>Xtp1ʹͳ?xox=?yxHrcA Qmݧ %GV.aFy3xqDf?{З|G7O Cps͝;Be>=pWk=uc;&#>>>c7);˱p/^ hpndڴiZ>C2M>'6pؤ>7@;F7ffwwwgp\& 䧪Xfʔ)T*r_|ÃFje`2AtuuBh&jr |a??ryO Y*%Qm/t{Lzl{ϩO?rf\ ۲lQyl m!~>g=.}{wR'YSQ{ x%3qZΞ{ٻ~ xEL5{:|\o  /`uCzL|y{?>yÔCؼs9.ۛ[ݒgfmߙ2H]*wK-kB_N&).~WI;%t7z·'eY5η?!c5z?ˋ]h՗ͻ[/i.O?7w/t}wju[L^wL~7+x|\"pY`WW y,~O=jV]rW! bu,j@:ޚ9{n'qQN״Sã^8/t9gf]WϝoC(T7NYzӷv~ԤDł8eoTe+_#pwlѠMZZW_b)|OC~όSLW` n}||\=7p2f!{@@Va^WOnu7 IItZ1cf&$śD:kB=`Ao^/.].]Ul@v w.wo-WOu.>%9Ŋ=P?eZo˙lԵ|"'S[M7:skJ)M!&u:gAŠ3x.;uݚY~@"uEUK8(aY`KXIl#:I,N%3W=͋t.&귻2͒XB%9CJ2E98Sd ,Ckn}qc憫R( kARȏ0$w_fgYfo"n872R#'4E(*>&P,Ϯ J[VVӰ@\EO/)+M(PxGCLN nVITf{@YK߫loROAiUhL FGTf$M-`XuW\2tԙ] ӣb)(UtѦUbsDRHLoPh"2L"P7ȣWs5k\F,NK/757`ks xyjtX:\ J2өvP"O)%*n4cYN mnQ O<}=׃re+N&8*Z[[\TT0\+QHrYt$st7ftB({i:cHQi|gVks3FH/K ZJVcĊ;]:̒EnOEeDʲjnkX^t}nR7țΎU:ksF8O;£Sɩl:9$;?μ}l?׮u40~GEY Q*Nu:Y)H_Bu;pǰdwxvJ PO@hzX JH0CD+bQ([Q.AKr*Ͻ:⹭(rqt=l;FΟ?C{{0dp#@rԦ^ٲG?)%}[Ϙ=. W#!=|55܉sGGw.xC[![v~"nUB/س"lsAAx1C=/}fL[Z}?} >cxM nopQM7klҰam0 D."qr?~wި?|ۼwAM W<_}ba%:~ztn܂}mʲ?l<] O QՐhnK,0[H:uXT,kAL~8M!NnT4!߅rThSړɔU@!15<԰3 9On%=}oаC4zC\9wh5t&؇$hp= aȱMҼdO@y9KOV{罗D-ՌH4d΋Yx(tV}29~]D-"a[ֳX(S' e.);z*-#}8$ѐIMPg9%rm0g=+п7GtݬD^^ .}RB> -r眣+N.nA[SRU\9/*e*ɮnP=y&UH>4!?KՔ>]o-͙̌3?YFE9?p6N2eԶ(O[7o}3ZK5 ΚL!C9PA\HAں|aura6CgP3n#$dp7r/|!2窮Kq&`nj7PpxtG馌h}>a.y 2S\}t0 ~Z̿=g.W&W ivX'Ozo7}~ yHp233D wny~zO}?)r1r;F7b8d(5If>6N'*M,d58L4{W_ygwklo=[ :u(d( )yb0/]Zyid~%{ w[F+"&dJ%`50QpD=,AV`b̐9ZEE,1 $isiDm$' #rWOAn=>3Fsѵjf$kDƟ')!ӀN2H)D%kNl: 5 $3p33kfW?>BHgvI*WL;e8;==DU}P 33VuJtu"XM c$vͺ=eΑV &$3pD[+D:336jujO = ]K,iLTqLR$@N2 LyMn'ݿU%d .d@XN2nGwnp#gp#gp# ;Fg,቗f~qjWպytԜ؉]=;p*f[H g0Xx*8&:6]IEge%WSO Uj% (4!pIY1,~qOPTJIF0dd4t4 G*-51;qg!_ޱY[`A.wгw0 r5W# 'np#\Q=گ;:<Dwnrz`cBWOQxv;3c6X똉t.mm[u"մ+/g 6X9 c&rWv\k-tH@q,4 we5$m"am،Leu .\ܒ ;*%546m61_1[UsW}DM}Cp!~,%ue..|JtIYWr:̐w- i.U`3Ul6}"q9ml1+KT|- ig{$s 1:fcǩrlcJ˾>.־=,:eDō6`cp)jbD's3vɧg we]kaKp&qes9*3[fc c;䧪`*0lx.NҿԇǹegF_֖3j'_sm2V1r'yoo?E!pt~lrYյ'ב6^0웑:;W$ëdbc8Xnj{KfWKqGs*R᎛똉};vVEB{ϐxF;a߂TRMꇫoDn;Fw F@2 wny$yC;c|W#1{>z=G=C@2c}kA{*._z`v3 zxiãoDMg[y ն/adU' F4;Zsʟ~۸_\kH{[KoKz/$6!)" D\皙<_(>O3z~yyP6܍{:cFѭPSW|AVBWT/qz*1rcm,?^T]%Vzd~{{ЭR +BKh s3i(/{&%mfe֭EY]$'aGTa2˷gchkJy=bcaA3 ;3%9ldA ݋M`F4Ǝ<(ۣCoY~kDŽ[H(e$AZňߢ7a$&׫Q0WpcɪMƣۨ)թD5€ b^41i$9hˆF;,vvȽMY>^wyP{(zZLʭvn-디zW@١ۓh+jeEL(elw Ѹ,Qdnip'WG7+kkҭ<+z3\#r@#tк+/MC'> utGb} a6O+s'C.8k׮Agp# w;Fg,io~)Wٽ`h e|[Z>׀ȚW##Ak?+5*{ԎW?[>oL:Olw>Oڞ^V_̥  [0ߜ0<.֬&C9˓U?C.'!~}oNkڴ«[V¢VMs dp]eA Q kLnƄŦdïYէutOiՠVЊG ƴ&?JXFb &.]WeטTƄʞJ=)ͷC~[QSf'QtV6jVX»UaF8 `*] /!RZn*oИ*w\!?pj"sAwyD k_yFVz0`XΡ,ߥ(+ۛSPa'dAQIF~+#RZ*>xSKPiFh,=HF*`11I5sn~\Pپsц=k)#xyjtD\F,NK/XDj0Ҡ1#ƭ~Hp H28 *K:Ely>"D%l: 5h>Ѱr?<[Ω5"~};NL([cȟD[iB~)}~fCYUrJ;$w߯~3k˖m8Eځ3jPl /:{ nK%!mk뛗'2u5ȨbvlpшqF;l>*ͺ=e'"aU/ܰZoy2Yԩ8S?H;1 b Egm=$vbb(b|BVNKO7 4 !W\MOTqL> I^o z|PZw9nV][}k\}E,4&(МֽM ߿f<8Z.rW  }KWFo ,BGQ鮞;uHEMsAl{@|/74):X;s<|/J`C~ef80p";F7zO7Dwnp#@ ;g:ld!:]`#3yqQtό5laSf0۲ErgfL?yb0/];62ff62^G 4kMdTGg}marH'P%_|!-[&a[a[@o#jqwhدS? exAT( X: K+ى걏~!sjFdK4ETK"\pcF2ivLČ;Of{=m(*r ?|p\FF;}rA.wz`V|fBͪrYpϦFf46_L+N0zʩ*zQoWs[6o8{}fpGV8̑]-Zu$]q $LRW3&WfE9gz' U;vaWw-b`#JtW_ofJf\B/{8{ #.w,qV3Q:ú *ǡSBMEL667includes/agent/LICENSEnu[PK! Y_)_)includes/agent/Agent.phpnu[PK!KZincludes/js/jquery.scombobox.jsnu[PK!L## _includes/js/ai-adb.jsnu[PK!X.7373includes/js/ai-adb.min.jsnu[PK!Dincludes/js/ai-ads-data.jsnu[PK!jsp" includes/js/ai-sidebar-data.jsnu[PK!d~SS!#!includes/js/jquery.quicksearch.jsnu[PK!Vg1includes/js/ai-select.min.jsnu[PK!ahWWPincludes/js/ai-cookie-data.jsnu[PK!楌 Pincludes/js/missed.jsnu[PK!  [includes/js/ai-adb.q.jsnu[PK!m88#includes/js/ai-mobile-detect.min.jsnu[PK!r tt!iincludes/js/ai-filter-data.min.jsnu[PK!xʉ%%.includes/js/ai-errors.min.jsnu[PK!ApԍPP#includes/js/ai-rotation-data.min.jsnu[PK!L??#Bincludes/js/theia-sticky-sidebar.jsnu[PK!P$includes/js/ai-base64.min.jsnu[PK!N ""\includes/js/ai-filter.q.jsnu[PK!-+^44includes/js/ai-admin.jsnu[PK!includes/js/ai-base64.jsnu[PK!4`gincludes/js/ai-jquery.jsnu[PK!2f'includes/js/theia-sticky-sidebar.min.jsnu[PK!="gccincludes/js/image-picker.min.jsnu[PK!P/includes/js/ai-cookie.min.jsnu[PK!j1Jincludes/js/ai-filter-data.jsnu[PK!:nl..Kincludes/js/ai-adb.q.min.jsnu[PK!m1zincludes/js/ai-adb-try.jsnu[PK!7")")|includes/js/ai-insert.min.jsnu[PK!?=YBYB includes/js/ai-filter.jsnu[PK!4 nPPincludes/js/ai-lists-data.jsnu[PK! LLHincludes/js/ai-lists.jsnu[PK!LDrincludes/js/ResizeSensor.min.jsnu[PK!MEZincludes/js/ai-wait-jquery.jsnu[PK!]MM!includes/js/ai-errors-head.min.jsnu[PK!!!includes/js/ai-ads.jsnu[PK! xincludes/js/ai-ads.q.min.jsnu[PK!2߱GGincludes/js/ai-select.jsnu[PK!`^eincludes/js/ai-select-data.jsnu[PK!_xMxM"fincludes/js/jquery.multi-select.jsnu[PK!^includes/js/ResizeSensor.jsnu[PK!1'includes/js/ai-lists.q.jsnu[PK!=BDD includes/js/ai-lists-data.min.jsnu[PK!7Lincludes/js/ai-adb-data.min.jsnu[PK!ZZincludes/js/ai-insert-data.jsnu[PK!! ^includes/js/ai-errors-head.jsnu[PK!Хr$0includes/js/ai-wait-functions.min.jsnu[PK!)ύ"gincludes/js/ai-sidebar-data.min.jsnu[PK!d2KK!Yincludes/js/ai-insert-data.min.jsnu[PK!Iӫincludes/js/ai-auto-ads.jsnu[PK!ͳYg g includes/js/ai-ads.min.jsnu[PK!JK K includes/js/jquery.mousewheel.jsnu[PK!ȁ .13135includes/js/ai-lists.q.min.jsnu[PK!9W{includes/js/ai-ads.q.jsnu[PK!M  includes/js/ai-rotation.q.min.jsnu[PK!-NN#! includes/js/jquery.scombobox.min.jsnu[PK!C p includes/js/ai-auto-ads.q.min.jsnu[PK!HO O q includes/js/ai-sidebar.q.jsnu[PK!/ALLR~ includes/js/ai-auto-ads.q.jsnu[PK!N99 includes/js/ai-lists.min.jsnu[PK!v$55 includes/js/ai-adb-try.min.jsnu[PK!Hdd includes/js/ai-rotation-data.jsnu[PK!sND includes/js/ai-rotation.min.jsnu[PK![00 _ includes/js/ad-inserter-check.jsnu[PK!ju8  includes/js/ai-wait-functions.jsnu[PK!4)4) includes/js/ai-select.q.jsnu[PK!['' includes/js/image-picker.jsnu[PK! }Ch/ includes/js/ai-sidebar.q.min.jsnu[PK!NCHH!|3 includes/js/ai-cookie-data.min.jsnu[PK!sY-Q-Q4 includes/js/ai-rotation.q.jsnu[PK!;tt includes/js/ai-insert.q.jsnu[PK!\2CCp includes/js/ai-mobile-detect.jsnu[PK!\! includes/js/ai-select-data.min.jsnu[PK!DII includes/js/ai-select.q.min.jsnu[PK!㸱{{m' includes/js/ai-ads-data.min.jsnu[PK!6( includes/js/ai-sidebar.jsnu[PK!nWCC=D includes/js/ai-filter.q.min.jsnu[PK!#o,,R includes/js/index.htmlnu[PK!ק00@S includes/js/ai-errors-footer.jsnu[PK!\\W includes/js/ai-cookie.jsnu[PK!}z includes/js/ai-sidebar.min.jsnu[PK!5RRû includes/js/ai-filter.min.jsnu[PK!qUa includes/js/ai-adb-data.jsnu[PK!ڹd $ includes/js/jquery.mousewheel.min.jsnu[PK!_Z@ XX# includes/js/ai-errors-footer.min.jsnu[PK!=Ux includes/js/ai-errors.jsnu[PK!]||R includes/js/ai-rotation.jsnu[PK!^{!`c includes/js/ai-wait-jquery.min.jsnu[PK!CBXX[f includes/js/ai-auto-ads.min.jsnu[PK!^))h includes/js/ai-insert.q.min.jsnu[PK!f5y5yM includes/js/ai-insert.jsnu[PK!Ca`6`6  includes/js/jquery.ui.spinner.jsnu[PK!T;X#X#zBincludes/editor.phpnu[PK!.HH'fincludes/mobiledetect/Mobile_Detect.phpnu[PK!A IEEincludes/mobiledetect/README.mdnu[PK!g+!includes/mobiledetect/LICENSE.txtnu[PK!1#includes/google-api/src/Service.phpnu[PK!"{3""!includes/google-api/src/Model.phpnu[PK!O/  :'includes/google-api/src/AuthHandler/Guzzle6AuthHandler.phpnu[PK!q:M4includes/google-api/src/AuthHandler/Guzzle7AuthHandler.phpnu[PK!Rӯgg:7includes/google-api/src/AuthHandler/AuthHandlerFactory.phpnu[PK!: :Z>includes/google-api/src/AuthHandler/Guzzle5AuthHandler.phpnu[PK!OO-Iincludes/google-api/src/Service/Exception.phpnu[PK!|)TQincludes/google-api/src/Service/README.mdnu[PK!5]']',nRincludes/google-api/src/Service/Resource.phpnu[PK!|cB(*'zincludes/google-api/src/Task/Exception.phpnu[PK!71 1 )I}includes/google-api/src/Task/Composer.phpnu[PK!F*ӊincludes/google-api/src/Task/Retryable.phpnu[PK!v'includes/google-api/src/Task/Runner.phpnu[PK!SWh%6includes/google-api/src/Exception.phpnu[PK!R6 #Cincludes/google-api/src/aliases.phpnu[PK!t$$-includes/google-api/src/Utils/UriTemplate.phpnu[PK! .includes/google-api/src/AccessToken/Verify.phpnu[PK!o.includes/google-api/src/AccessToken/Revoke.phpnu[PK!& includes/google-api/src/Collection.phpnu[PK!mi_ǏǏ"&includes/google-api/src/Client.phpnu[PK! \N&?includes/google-api/src/Http/Batch.phpnu[PK!:NYY%|includes/google-api/src/Http/REST.phpnu[PK!"-'$'$0*includes/google-api/src/Http/MediaFileUpload.phpnu[PK!~ѽ&includes/google-api/CODE_OF_CONDUCT.mdnu[PK!c]@@=includes/google-api/vendor/guzzlehttp/promises/src/Create.phpnu[PK!69Lq includes/google-api/vendor/guzzlehttp/promises/src/CancellationException.phpnu[PK!߇`G G ; includes/google-api/vendor/guzzlehttp/promises/src/Each.phpnu[PK!(K||IVincludes/google-api/vendor/guzzlehttp/promises/src/AggregateException.phpnu[PK!2~$ $ GKincludes/google-api/vendor/guzzlehttp/promises/src/PromiseInterface.phpnu[PK!͔@%includes/google-api/vendor/guzzlehttp/promises/src/TaskQueue.phpnu[PK!rW9-includes/google-api/vendor/guzzlehttp/promises/src/Is.phpnu[PK!''@:2includes/google-api/vendor/guzzlehttp/promises/src/functions.phpnu[PK!9I:Zincludes/google-api/vendor/guzzlehttp/promises/src/RejectionException.phpnu[PK!-{J!!<u_includes/google-api/vendor/guzzlehttp/promises/src/Utils.phpnu[PK!lIincludes/google-api/vendor/guzzlehttp/promises/src/TaskQueueInterface.phpnu[PK!t&Gȃincludes/google-api/vendor/guzzlehttp/promises/src/FulfilledPromise.phpnu[PK!v>>Bincludes/google-api/vendor/guzzlehttp/promises/src/EachPromise.phpnu[PK!߇'Hincludes/google-api/vendor/guzzlehttp/promises/src/functions_include.phpnu[PK!>Fլincludes/google-api/vendor/guzzlehttp/promises/src/RejectedPromise.phpnu[PK!zHyH7includes/google-api/vendor/guzzlehttp/promises/src/PromisorInterface.phpnu[PK!A"">includes/google-api/vendor/guzzlehttp/promises/src/Promise.phpnu[PK!CM@includes/google-api/vendor/guzzlehttp/promises/src/Coroutine.phpnu[PK!c<kincludes/google-api/vendor/guzzlehttp/promises/composer.jsonnu[PK!U)??8sincludes/google-api/vendor/guzzlehttp/promises/README.mdnu[PK!x\\60includes/google-api/vendor/guzzlehttp/promises/LICENSEnu[PK!Bi7w5includes/google-api/vendor/guzzlehttp/promises/Makefilenu[PK!O(];6includes/google-api/vendor/guzzlehttp/promises/CHANGELOG.mdnu[PK!D<@<includes/google-api/vendor/guzzlehttp/guzzle/src/UriTemplate.phpnu[PK!6i J ]includes/google-api/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.phpnu[PK!A{ Djincludes/google-api/vendor/guzzlehttp/guzzle/src/RetryMiddleware.phpnu[PK!zz+ + BAxincludes/google-api/vendor/guzzlehttp/guzzle/src/TransferStats.phpnu[PK!7v^^Eބincludes/google-api/vendor/guzzlehttp/guzzle/src/MessageFormatter.phpnu[PK!hd&&>includes/google-api/vendor/guzzlehttp/guzzle/src/functions.phpnu[PK!qXXAincludes/google-api/vendor/guzzlehttp/guzzle/src/HandlerStack.phpnu[PK!Rh>P :includes/google-api/vendor/guzzlehttp/guzzle/src/Utils.phpnu[PK!e"z9includes/google-api/vendor/guzzlehttp/guzzle/src/Pool.phpnu[PK!9>0 0 DTincludes/google-api/vendor/guzzlehttp/guzzle/src/ClientInterface.phpnu[PK!4a a Iincludes/google-api/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.phpnu[PK!9!W((Eincludes/google-api/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.phpnu[PK!Mδ0b$b$E Fincludes/google-api/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.phpnu[PK!-Ljincludes/google-api/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.phpnu[PK! Nrincludes/google-api/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.phpnu[PK!%pZ Z Gj~includes/google-api/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.phpnu[PK!Q;includes/google-api/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.phpnu[PK!(T(THzincludes/google-api/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.phpnu[PK! Gincludes/google-api/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.phpnu[PK!кHHJincludes/google-api/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.phpnu[PK!O HKincludes/google-api/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.phpnu[PK!hEGbHcincludes/google-api/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.phpnu[PK!AF  M`iincludes/google-api/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.phpnu[PK!XhBincludes/google-api/vendor/guzzlehttp/guzzle/src/Handler/Proxy.phpnu[PK!I۱ FIincludes/google-api/vendor/guzzlehttp/guzzle/src/functions_include.phpnu[PK!wmt(t(C_includes/google-api/vendor/guzzlehttp/guzzle/src/RequestOptions.phpnu[PK!'BxxPFincludes/google-api/vendor/guzzlehttp/guzzle/src/Exception/TransferException.phpnu[PK!^ܢN>includes/google-api/vendor/guzzlehttp/guzzle/src/Exception/ServerException.phpnu[PK!/O^includes/google-api/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.phpnu[PK!=s[Nincludes/google-api/vendor/guzzlehttp/guzzle/src/Exception/ClientException.phpnu[PK!*_N&&SӺincludes/google-api/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.phpnu[PK!XLLL|includes/google-api/vendor/guzzlehttp/guzzle/src/Exception/SeekException.phpnu[PK!^xvNDincludes/google-api/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.phpnu[PK! 5Oincludes/google-api/vendor/guzzlehttp/guzzle/src/Exception/RequestException.phpnu[PK!BuddX.includes/google-api/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.phpnu[PK!coWincludes/google-api/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.phpnu[PK!ޤ&&?/includes/google-api/vendor/guzzlehttp/guzzle/src/Middleware.phpnu[PK!osKsK;Bincludes/google-api/vendor/guzzlehttp/guzzle/src/Client.phpnu[PK!3`}CC: Mincludes/google-api/vendor/guzzlehttp/guzzle/composer.jsonnu[PK!2::6Rincludes/google-api/vendor/guzzlehttp/guzzle/README.mdnu[PK!97maincludes/google-api/vendor/guzzlehttp/guzzle/Dockerfilenu[PK!oPP9Wcincludes/google-api/vendor/guzzlehttp/guzzle/UPGRADING.mdnu[PK!7t4*includes/google-api/vendor/guzzlehttp/guzzle/.php_csnu[PK!w\\4,includes/google-api/vendor/guzzlehttp/guzzle/LICENSEnu[PK!p q3391includes/google-api/vendor/guzzlehttp/guzzle/CHANGELOG.mdnu[PK!ʀ@@7eincludes/google-api/vendor/guzzlehttp/psr7/.php_cs.distnu[PK!V[[?nincludes/google-api/vendor/guzzlehttp/psr7/src/UploadedFile.phpnu[PK!|77?pincludes/google-api/vendor/guzzlehttp/psr7/src/MessageTrait.phpnu[PK!+`:includes/google-api/vendor/guzzlehttp/psr7/src/Rfc7230.phpnu[PK!GW;3includes/google-api/vendor/guzzlehttp/psr7/src/Response.phpnu[PK!Y?gincludes/google-api/vendor/guzzlehttp/psr7/src/NoSeekStream.phpnu[PK!dvv;includes/google-api/vendor/guzzlehttp/psr7/src/FnStream.phpnu[PK!'  ?nincludes/google-api/vendor/guzzlehttp/psr7/src/BufferStream.phpnu[PK!90:includes/google-api/vendor/guzzlehttp/psr7/src/Request.phpnu[PK!5},;includes/google-api/vendor/guzzlehttp/psr7/src/MimeType.phpnu[PK!֮@5includes/google-api/vendor/guzzlehttp/psr7/src/CachingStream.phpnu[PK!PSr|&|&@includes/google-api/vendor/guzzlehttp/psr7/src/ServerRequest.phpnu[PK!Pn=5includes/google-api/vendor/guzzlehttp/psr7/src/PumpStream.phpnu[PK!N 8Eincludes/google-api/vendor/guzzlehttp/psr7/src/Query.phpnu[PK!ƟFFASincludes/google-api/vendor/guzzlehttp/psr7/src/DroppingStream.phpnu[PK! <#a4a4<Xincludes/google-api/vendor/guzzlehttp/psr7/src/functions.phpnu[PK!])Bvincludes/google-api/vendor/guzzlehttp/psr7/src/MultipartStream.phpnu[PK!'Jk@Q9Q98includes/google-api/vendor/guzzlehttp/psr7/src/Utils.phpnu[PK!?Bincludes/google-api/vendor/guzzlehttp/psr7/src/AppendStream.phpnu[PK!X?xU"U">9includes/google-api/vendor/guzzlehttp/psr7/src/UriResolver.phpnu[PK!oDI Gincludes/google-api/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.phpnu[PK![@N!includes/google-api/vendor/guzzlehttp/psr7/src/StreamWrapper.phpnu[PK!T T :0includes/google-api/vendor/guzzlehttp/psr7/src/Message.phpnu[PK!rYrY6?Qincludes/google-api/vendor/guzzlehttp/psr7/src/Uri.phpnu[PK!,55@includes/google-api/vendor/guzzlehttp/psr7/src/InflateStream.phpnu[PK!HDincludes/google-api/vendor/guzzlehttp/psr7/src/functions_include.phpnu[PK!A̳includes/google-api/vendor/guzzlehttp/psr7/src/LazyOpenStream.phpnu[PK! >includes/google-api/vendor/guzzlehttp/psr7/src/LimitStream.phpnu[PK!LwE9includes/google-api/vendor/guzzlehttp/psr7/src/Stream.phpnu[PK!Di @includes/google-api/vendor/guzzlehttp/psr7/src/UriNormalizer.phpnu[PK!9includes/google-api/vendor/guzzlehttp/psr7/src/Header.phpnu[PK!Z II8 includes/google-api/vendor/guzzlehttp/psr7/composer.jsonnu[PK!hh4Jincludes/google-api/vendor/guzzlehttp/psr7/README.mdnu[PK!WW2{includes/google-api/vendor/guzzlehttp/psr7/LICENSEnu[PK!W\\7xincludes/google-api/vendor/guzzlehttp/psr7/CHANGELOG.mdnu[PK!}aaH;includes/google-api/vendor/firebase/php-jwt/src/BeforeValidException.phpnu[PK!/ O O7includes/google-api/vendor/firebase/php-jwt/src/JWT.phpnu[PK!o*]]Dincludes/google-api/vendor/firebase/php-jwt/src/ExpiredException.phpnu[PK!sa7Uincludes/google-api/vendor/firebase/php-jwt/src/JWK.phpnu[PK!S!includes/google-api/vendor/google/apiclient-services/README.mdnu[PK!II@!includes/google-api/vendor/google/apiclient-services/SECURITY.mdnu[PK!d=h!includes/google-api/vendor/google/apiclient-services/synth.pynu[PK!#s((<Ӱ!includes/google-api/vendor/google/apiclient-services/LICENSEnu[PK!J$$AO!includes/google-api/vendor/google/apiclient-services/autoload.phpnu[PK!AC!includes/google-api/vendor/google/apiclient-services/synth.metadatanu[PK!!Kw66S!includes/google-api/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.phpnu[PK!`$==E!includes/google-api/vendor/paragonie/random_compat/lib/random_int.phpnu[PK!iᦁ Q"includes/google-api/vendor/paragonie/random_compat/lib/random_bytes_libsodium.phpnu[PK!bi~~I!"includes/google-api/vendor/paragonie/random_compat/lib/error_polyfill.phpnu[PK!?- - Nx("includes/google-api/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.phpnu[PK!;L#3"includes/google-api/vendor/paragonie/random_compat/lib/byte_safe_strings.phpnu[PK!  RIL"includes/google-api/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.phpnu[PK!"0R FX"includes/google-api/vendor/paragonie/random_compat/lib/cast_to_int.phpnu[PK!bZ l l Xc"includes/google-api/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.phpnu[PK!$$Ao"includes/google-api/vendor/paragonie/random_compat/lib/random.phpnu[PK!;ǻ@."includes/google-api/vendor/paragonie/random_compat/composer.jsonnu[PK!V~ K/"includes/google-api/vendor/paragonie/random_compat/.github/workflows/ci.ymlnu[PK!*A|Q8"includes/google-api/vendor/paragonie/random_compat/dist/random_compat.phar.pubkeynu[PK!١iU"includes/google-api/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.ascnu[PK!>JJ:"includes/google-api/vendor/paragonie/random_compat/LICENSEnu[PK!.-_L"includes/google-api/vendor/paragonie/constant_time_encoding/phpunit.xml.distnu[PK!s3  M"includes/google-api/vendor/paragonie/constant_time_encoding/src/Base32Hex.phpnu[PK!)TTG"includes/google-api/vendor/paragonie/constant_time_encoding/src/Hex.phpnu[PK!,9įLn"includes/google-api/vendor/paragonie/constant_time_encoding/src/Encoding.phpnu[PK!<K"includes/google-api/vendor/paragonie/constant_time_encoding/src/RFC4648.phpnu[PK!R  J"includes/google-api/vendor/paragonie/constant_time_encoding/src/Base64.phpnu[PK!@9_ J/#includes/google-api/vendor/paragonie/constant_time_encoding/src/Binary.phpnu[PK!oz/ Y#includes/google-api/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.phpnu[PK!rN8N8J'#includes/google-api/vendor/paragonie/constant_time_encoding/src/Base32.phpnu[PK!i'55T`#includes/google-api/vendor/paragonie/constant_time_encoding/src/EncoderInterface.phpnu[PK!oN8 Reh#includes/google-api/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.phpnu[PK!m~Bn n Qt#includes/google-api/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.phpnu[PK!JdE#includes/google-api/vendor/paragonie/constant_time_encoding/psalm.xmlnu[PK!I#includes/google-api/vendor/paragonie/constant_time_encoding/composer.jsonnu[PK!:HE9#includes/google-api/vendor/paragonie/constant_time_encoding/README.mdnu[PK!e e G^#includes/google-api/vendor/paragonie/constant_time_encoding/LICENSE.txtnu[PK!G:#includes/google-api/vendor/paragonie/constant_time_encoding/.travis.ymlnu[PK!n= Q#includes/google-api/vendor/paragonie/constant_time_encoding/tests/RFC4648Test.phpnu[PK!S6AAS#includes/google-api/vendor/paragonie/constant_time_encoding/tests/Base32HexTest.phpnu[PK!lˤ++P~#includes/google-api/vendor/paragonie/constant_time_encoding/tests/Base64Test.phpnu[PK!@RRX)#includes/google-api/vendor/paragonie/constant_time_encoding/tests/Base64DotSlashTest.phpnu[PK!H##W#includes/google-api/vendor/paragonie/constant_time_encoding/tests/Base64UrlSafeTest.phpnu[PK!(M#includes/google-api/vendor/paragonie/constant_time_encoding/tests/HexTest.phpnu[PK!,߈$$R#includes/google-api/vendor/paragonie/constant_time_encoding/tests/EncodingTest.phpnu[PK!u^wwP #includes/google-api/vendor/paragonie/constant_time_encoding/tests/Base32Test.phpnu[PK!<2Y||_#includes/google-api/vendor/paragonie/constant_time_encoding/tests/Base64DotSlashOrderedTest.phpnu[PK!ᩏN #includes/google-api/vendor/paragonie/constant_time_encoding/tests/autoload.phpnu[PK!`FM#includes/google-api/vendor/paragonie/constant_time_encoding/.gitignorenu[PK! >#includes/google-api/vendor/psr/log/Psr/Log/Test/TestLogger.phpnu[PK!I\))G $includes/google-api/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.phpnu[PK!HTg=$includes/google-api/vendor/psr/log/Psr/Log/Test/DummyTest.phpnu[PK!1b!q* * >$includes/google-api/vendor/psr/log/Psr/Log/LoggerInterface.phpnu[PK!PP7,$includes/google-api/vendor/psr/log/Psr/Log/LogLevel.phpnu[PK!Q'?E.$includes/google-api/vendor/psr/log/Psr/Log/LoggerAwareTrait.phpnu[PK!WjW W :F0$includes/google-api/vendor/psr/log/Psr/Log/LoggerTrait.phpnu[PK!j ))C>$includes/google-api/vendor/psr/log/Psr/Log/LoggerAwareInterface.phpnu[PK!I9?$includes/google-api/vendor/psr/log/Psr/Log/NullLogger.phpnu[PK!G =B$includes/google-api/vendor/psr/log/Psr/Log/AbstractLogger.phpnu[PK! X1``G\O$includes/google-api/vendor/psr/log/Psr/Log/InvalidArgumentException.phpnu[PK!՞2203P$includes/google-api/vendor/psr/log/composer.jsonnu[PK!'BB,R$includes/google-api/vendor/psr/log/README.mdnu[PK!pO==*cX$includes/google-api/vendor/psr/log/LICENSEnu[PK!=fbrC\$includes/google-api/vendor/psr/http-message/src/StreamInterface.phpnu[PK!-{  Eo$includes/google-api/vendor/psr/http-message/src/ResponseInterface.phpnu[PK!z /Dz$includes/google-api/vendor/psr/http-message/src/MessageInterface.phpnu[PK!_r'r'J$includes/google-api/vendor/psr/http-message/src/ServerRequestInterface.phpnu[PK!D$includes/google-api/vendor/psr/http-message/src/RequestInterface.phpnu[PK!?.?1?1@+$includes/google-api/vendor/psr/http-message/src/UriInterface.phpnu[PK!㭢vQQI%includes/google-api/vendor/psr/http-message/src/UploadedFileInterface.phpnu[PK!mm9%includes/google-api/vendor/psr/http-message/composer.jsonnu[PK!hff5z%includes/google-api/vendor/psr/http-message/README.mdnu[PK!==3E%includes/google-api/vendor/psr/http-message/LICENSEnu[PK!:\Y338%includes/google-api/vendor/psr/http-message/CHANGELOG.mdnu[PK!K;#%includes/google-api/vendor/psr/cache/src/CacheException.phpnu[PK!l%%Cz$%includes/google-api/vendor/psr/cache/src/CacheItemPoolInterface.phpnu[PK!4z=?6%includes/google-api/vendor/psr/cache/src/CacheItemInterface.phpnu[PK!Gb<++E=E%includes/google-api/vendor/psr/cache/src/InvalidArgumentException.phpnu[PK!F2F%includes/google-api/vendor/psr/cache/composer.jsonnu[PK!m.@I%includes/google-api/vendor/psr/cache/README.mdnu[PK!Df880J%includes/google-api/vendor/psr/cache/LICENSE.txtnu[PK!- G1KO%includes/google-api/vendor/psr/cache/CHANGELOG.mdnu[PK!t!ו;R%includes/google-api/vendor/composer/autoload_namespaces.phpnu[PK!6S%includes/google-api/vendor/composer/platform_check.phpnu[PK!"X X 9W%includes/google-api/vendor/composer/autoload_classmap.phpnu[PK!ի1`a%includes/google-api/vendor/composer/installed.phpnu[PK!?g6g69l%includes/google-api/vendor/composer/InstalledVersions.phpnu[PK!)58583<%includes/google-api/vendor/composer/ClassLoader.phpnu[PK!0//6%includes/google-api/vendor/composer/autoload_files.phpnu[PK!$l2i%includes/google-api/vendor/composer/installed.jsonnu[PK!F 5&includes/google-api/vendor/composer/autoload_real.phpnu[PK! ..+&includes/google-api/vendor/composer/LICENSEnu[PK!l&UU7&includes/google-api/vendor/composer/autoload_static.phpnu[PK!zg5^&includes/google-api/vendor/composer/autoload_psr4.phpnu[PK!OSS9N&includes/google-api/vendor/phpseclib/phpseclib/BACKERS.mdnu[PK!(@6 &includes/google-api/vendor/phpseclib/phpseclib/AUTHORSnu[PK!<&includes/google-api/vendor/phpseclib/phpseclib/composer.jsonnu[PK!z  8&includes/google-api/vendor/phpseclib/phpseclib/README.mdnu[PK!99Bg&includes/google-api/vendor/phpseclib/phpseclib/.github/FUNDING.ymlnu[PK!S;&includes/google-api/vendor/phpseclib/phpseclib/appveyor.ymlnu[PK!T- PjjF&includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.phpnu[PK!)ARPRPFt'includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.phpnu[PK!&[R<:(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CPSuri.phpnu[PK!񰊡T<(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Validity.phpnu[PK!<..Z@(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeValue.phpnu[PK!_vvZB(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtree.phpnu[PK!]G(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AccessDescription.phpnu[PK!WXc1K(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedPrivateKeyInfo.phpnu[PK!`1\N(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OneAsymmetricKey.phpnu[PK!w~iiWT(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DisplayText.phpnu[PK!&4GGaX(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyUsagePeriod.phpnu[PK!EU Z](includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertificate.phpnu[PK!Dfi(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectDirectoryAttributes.phpnu[PK! YZl(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPrivateKey.phpnu[PK!jiYzp(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPrivateKey.phpnu[PK! n%%Zv(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectAltName.phpnu[PK! ^),,X{y(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPublicKey.phpnu[PK!F[/|(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DirectoryString.phpnu[PK!`z4X(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PersonalName.phpnu[PK!7k077_(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AlgorithmIdentifier.phpnu[PK! 5]](includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SpecifiedECDomain.phpnu[PK!Qd(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AdministrationDomainName.phpnu[PK!\\]&(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSASSA_PSS_params.phpnu[PK!t~_(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierInfo.phpnu[PK!xGj(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttributes.phpnu[PK![9i)(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttribute.phpnu[PK!'""Sا(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPoint.phpnu[PK!&?\\g}(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignedPublicKeyAndChallenge.phpnu[PK!r7""Yp(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuerAltName.phpnu[PK!vEx;;\(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UniqueIdentifier.phpnu[PK!VMMc(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateSerialNumber.phpnu[PK!P%_U¶(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extension.phpnu[PK!\!_(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttributes.phpnu[PK!:p,,X[(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BaseDistance.phpnu[PK!ϕ6FW(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AnotherName.phpnu[PK!Ppa;(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLDistributionPoints.phpnu[PK!Hš__\(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BasicConstraints.phpnu[PK!0M..]r(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateIssuer.phpnu[PK!P-(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Time.phpnu[PK!mWx(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBES2params.phpnu[PK!S`(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectPublicKeyInfo.phpnu[PK! W(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Certificate.phpnu[PK!>&^A(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RevokedCertificate.phpnu[PK!a)»Z(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyMappings.phpnu[PK!;;Z(includes/google-api/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/InvalidityDate.phpnu[PK!!mV_r-includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/StreamCipher.phpnu[PK!sxYegeg\w-includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.phpnu[PK!{[-includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS.phpnu[PK!\#\#^^-includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.phpnu[PK!'4##\H .includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PuTTY.phpnu[PK!w-X88\..includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS1.phpnu[PK!}y_wM.includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Signature/Raw.phpnu[PK!`r\\US.includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/BlockCipher.phpnu[PK!39`VmV.includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/SymmetricKey.phpnu[PK!td%֑b90includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/PasswordProtected.phpnu[PK!OV\?0includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/Fingerprint.phpnu[PK!1.==WF0includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.phpnu[PK!˺T0includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PrivateKey.phpnu[PK!3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r2.phpnu[PK!@ӊU3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp384.phpnu[PK!͠U3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp256.phpnu[PK!8GMU3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp224.phpnu[PK!aaW 3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v2.phpnu[PK!<;V3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r1.phpnu[PK!K^\7#3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224t1.phpnu[PK!Uh(3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb409.phpnu[PK!ʥ Ww*3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v2.phpnu[PK!$mm=uu\/3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192t1.phpnu[PK!`QOU43includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk233.phpnu[PK!<))V63includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571k1.phpnu[PK!TUf=3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp521.phpnu[PK!D^.Vu?3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256r1.phpnu[PK!vT))\D3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512t1.phpnu[PK!@iVpL3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409r1.phpnu[PK!_2\ R3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320t1.phpnu[PK!X11VX3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r1.phpnu[PK!7/V^]3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r1.phpnu[PK!VFii\a3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384t1.phpnu[PK!^Uh3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk283.phpnu[PK!<$Uj3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb233.phpnu[PK!2=  Vl3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp521r1.phpnu[PK!x \gu3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224r1.phpnu[PK!'Vz3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233r1.phpnu[PK!IiVVV&3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283k1.phpnu[PK!bbV3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192k1.phpnu[PK!-!W3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve25519.phpnu[PK!i\3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256r1.phpnu[PK!*((Tr3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed25519.phpnu[PK!Cx V3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192r1.phpnu[PK!WiizzV3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r1.phpnu[PK!5x]U3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistt571.phpnu[PK!Ml?V3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r1.phpnu[PK!!*4NNV3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r2.phpnu[PK!'וZW3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v1.phpnu[PK!zzV3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r2.phpnu[PK!wwV3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r2.phpnu[PK!{;;VZ3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160k1.phpnu[PK!(eh\3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320r1.phpnu[PK!NT\3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160t1.phpnu[PK!w)aaWF3includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v3.phpnu[PK!QV.4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r2.phpnu[PK!:pĩWH4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v3.phpnu[PK!Wx 4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime256v1.phpnu[PK!^B\4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256t1.phpnu[PK!~Ӂ  V4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r2.phpnu[PK!OU4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk163.phpnu[PK!{W4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v1.phpnu[PK!{{V4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp384r1.phpnu[PK!\ZV$4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233k1.phpnu[PK! hU;)4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk409.phpnu[PK!qELVJ+4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r1.phpnu[PK!Ud/4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp192.phpnu[PK!eI]))Vs14includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571r1.phpnu[PK!,+ͽU"84includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve448.phpnu[PK!bqVdA4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224r1.phpnu[PK!e.HC;;\zF4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160r1.phpnu[PK!]ڬVAK4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224k1.phpnu[PK!f9VsR4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r1.phpnu[PK!~9^^\V4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384r1.phpnu[PK!-:#V]4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409k1.phpnu[PK! R}c4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed448.phpnu[PK!O4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.phpnu[PK!҅ Wޘ4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/Raw.phpnu[PK!+xxZ4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/MSBLOB.phpnu[PK!<XHHY4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS8.phpnu[PK!KI@[4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/OpenSSH.phpnu[PK!hY4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PuTTY.phpnu[PK!ݠ,W4includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/XML.phpnu[PK!"D%YD5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS1.phpnu[PK!%W"5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.phpnu[PK!}nAnAQB5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.phpnu[PK!Hv==P{5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.phpnu[PK! lpX5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS8.phpnu[PK!صXG5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS1.phpnu[PK!jaPPP5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Parameters.phpnu[PK!q==PT5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PrivateKey.phpnu[PK!?cUUO5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PublicKey.phpnu[PK!/KddK5includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.phpnu[PK!!kFwT6includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.phpnu[PK!)  Fs6includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.phpnu[PK! |i'  R7includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/PublicKeyLoader.phpnu[PK!hH\7o7oFk7includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.phpnu[PK![u||K7includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/ChaCha20.phpnu[PK!_$$FUy8includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA.phpnu[PK!n1313E8includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC.phpnu[PK!;5959J8includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Salsa20.phpnu[PK!PIIE? 9includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH.phpnu[PK!~66LhU9includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.phpnu[PK!s!IGd9includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.phpnu[PK!JDDJE:includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.phpnu[PK!{<܈ WQ:includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/Raw.phpnu[PK!y mmY`:includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS8.phpnu[PK!็HH[V:includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/OpenSSH.phpnu[PK!;\77Y);includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PuTTY.phpnu[PK!lW;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/XML.phpnu[PK!+)Y%*;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS1.phpnu[PK!L.ZSS\>;;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/Raw.phpnu[PK!= ]>;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/ASN1.phpnu[PK!Q--]D;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/SSH2.phpnu[PK!S2v"ZZQeL;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Parameters.phpnu[PK!\ѠqwwQ@P;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.phpnu[PK!q P8d;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.phpnu[PK!1!!KZn;includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.phpnu[PK!+.SSL<includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.phpnu[PK!,=T>p<includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField.phpnu[PK!p\r<includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField/Integer.phpnu[PK!4&&Tt<includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField/Integer.phpnu[PK!ɧD**M<includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField.phpnu[PK!Tě@8H8H[/<includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.phpnu[PK!>LL[<includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/Engine.phpnu[PK!0iɊ=includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/DefaultEngine.phpnu[PK!-c=includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/BuiltIn.phpnu[PK!2WȒn=includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/Barrett.phpnu[PK! r=includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/EvalBarrett.phpnu[PK!~s s `j=includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Base.phpnu[PK!$sȇcm=includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/OpenSSL.phpnu[PK!QEQEX=includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP.phpnu[PK!&&Za>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP32.phpnu[PK!H3_f5>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/DefaultEngine.phpnu[PK!iL L c/8>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Montgomery.phpnu[PK!mK++kC>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Barrett.phpnu[PK!]5==oo>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/EvalBarrett.phpnu[PK!'hhk0>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Classic.phpnu[PK!0 r߱>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/MontgomeryMult.phpnu[PK!&;wnO>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/PowerOfTwo.phpnu[PK!RBbbn>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Montgomery.phpnu[PK!Yu]>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Base.phpnu[PK!c x`$>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/OpenSSL.phpnu[PK!ޚNNX6>includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP.phpnu[PK!@J&&Z ?includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP64.phpnu[PK!)~f?includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP/DefaultEngine.phpnu[PK!bz^77\?includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/OpenSSL.phpnu[PK!HPLr55U?includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField/Integer.phpnu[PK!GP5 5 L?includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField.phpnu[PK!UAhhF?includes/google-api/vendor/phpseclib/phpseclib/phpseclib/bootstrap.phpnu[PK!wHE?includes/google-api/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.phpnu[PK!7uVuVL;Aincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.phpnu[PK!-jE,Aincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.phpnu[PK!K.00`{Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedCurveException.phpnu[PK!;55aW~Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/InsufficientSetupException.phpnu[PK!DDdDincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedAlgorithmException.phpnu[PK!]8QlWDincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/BadModeException.phpnu[PK! ^00`Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/BadConfigurationException.phpnu[PK!TnDDd?Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedOperationException.phpnu[PK!q\Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/FileNotFoundException.phpnu[PK!W55aDincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/InconsistentSetupException.phpnu[PK!%[Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/NoKeyLoadedException.phpnu[PK!l++_'Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/UnableToConnectException.phpnu[PK!=IIeDincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/NoSupportedAlgorithmsException.phpnu[PK!P!!]Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/BadDecryptionException.phpnu[PK!r@|V55amDincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedFormatException.phpnu[PK!lA00`3Dincludes/google-api/vendor/phpseclib/phpseclib/phpseclib/Exception/ConnectionClosedException.phpnu[PK!s=j996Dincludes/google-api/vendor/phpseclib/phpseclib/LICENSEnu[PK!uX?Dincludes/google-api/vendor/symfony/polyfill-php70/composer.jsonnu[PK!a3RR;Dincludes/google-api/vendor/symfony/polyfill-php70/README.mdnu[PK!mW;үDincludes/google-api/vendor/symfony/polyfill-php70/Php70.phpnu[PK!^ii?8Dincludes/google-api/vendor/symfony/polyfill-php70/bootstrap.phpnu[PK!\))9Dincludes/google-api/vendor/symfony/polyfill-php70/LICENSEnu[PK![k ))KDincludes/google-api/vendor/symfony/polyfill-php70/Resources/stubs/Error.phpnu[PK!&8y..TFDincludes/google-api/vendor/symfony/polyfill-php70/Resources/stubs/AssertionError.phpnu[PK!J22lDincludes/google-api/vendor/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.phpnu[PK!**P^Dincludes/google-api/vendor/symfony/polyfill-php70/Resources/stubs/ParseError.phpnu[PK!|m//UDincludes/google-api/vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.phpnu[PK!O_))ODincludes/google-api/vendor/symfony/polyfill-php70/Resources/stubs/TypeError.phpnu[PK!h;33YdDincludes/google-api/vendor/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.phpnu[PK!e"$$J Dincludes/google-api/vendor/symfony/polyfill-intl-normalizer/Normalizer.phpnu[PK!EEIDincludes/google-api/vendor/symfony/polyfill-intl-normalizer/composer.jsonnu[PK!EADincludes/google-api/vendor/symfony/polyfill-intl-normalizer/README.mdnu[PK!uyyIhDincludes/google-api/vendor/symfony/polyfill-intl-normalizer/bootstrap.phpnu[PK!\))CZDincludes/google-api/vendor/symfony/polyfill-intl-normalizer/LICENSEnu[PK!je{{hDincludes/google-api/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.phpnu[PK! D5D5` Eincludes/google-api/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.phpnu[PK!'CDDfEincludes/google-api/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.phpnu[PK!c,oolVFincludes/google-api/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.phpnu[PK!ݮQQZaGincludes/google-api/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.phpnu[PK!B<Gincludes/google-api/vendor/symfony/polyfill-intl-idn/composer.jsonnu[PK!J5>Gincludes/google-api/vendor/symfony/polyfill-intl-idn/README.mdnu[PK!&u{=Gincludes/google-api/vendor/symfony/polyfill-intl-idn/Info.phpnu[PK!#($vv<L!Gincludes/google-api/vendor/symfony/polyfill-intl-idn/Idn.phpnu[PK! EBGincludes/google-api/vendor/symfony/polyfill-intl-idn/bootstrap.phpnu[PK!nWW<4Gincludes/google-api/vendor/symfony/polyfill-intl-idn/LICENSEnu[PK!UUQGincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.phpnu[PK!ɨU  PͲGincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.phpnu[PK!P̭̭UW;Iincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.phpnu[PK!͎KKQIincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.phpnu[PK!dBBat}Kincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.phpnu[PK!u `GKincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.phpnu[PK!N""[Kincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.phpnu[PK!H}SST)Kincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.phpnu[PK!]P*RKincludes/google-api/vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.phpnu[PK![.e;bKincludes/google-api/vendor/symfony/polyfill-php72/Php72.phpnu[PK!5?Kincludes/google-api/vendor/symfony/polyfill-php72/composer.jsonnu[PK!!>ii;Kincludes/google-api/vendor/symfony/polyfill-php72/README.mdnu[PK!zf?Kincludes/google-api/vendor/symfony/polyfill-php72/bootstrap.phpnu[PK!\))9Kincludes/google-api/vendor/symfony/polyfill-php72/LICENSEnu[PK! 'fKincludes/google-api/vendor/autoload.phpnu[PK!zhhHoKincludes/google-api/vendor/ralouphie/getallheaders/src/getallheaders.phpnu[PK!G@OLincludes/google-api/vendor/ralouphie/getallheaders/composer.jsonnu[PK!\@@<Lincludes/google-api/vendor/ralouphie/getallheaders/README.mdnu[PK!Ka88:< Lincludes/google-api/vendor/ralouphie/getallheaders/LICENSEnu[PK!4nNLincludes/google-api/vendor/monolog/monolog/src/Monolog/ResettableInterface.phpnu[PK!--V Lincludes/google-api/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.phpnu[PK!.hݻVLincludes/google-api/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.phpnu[PK!^T1Lincludes/google-api/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.phpnu[PK!w**T6Lincludes/google-api/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.phpnu[PK!nSңRA > Q>Nincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.phpnu[PK!ΘXGNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.phpnu[PK! O0eNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.phpnu[PK!M911ZpNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.phpnu[PK!$s  SSxNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.phpnu[PK!W,+'+'TNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.phpnu[PK!VVQNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.phpnu[PK!N{??Z{Nincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.phpnu[PK!ĩ0^DNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.phpnu[PK!pȦ&&RNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.phpnu[PK! l l UsNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.phpnu[PK!ŧ RdNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.phpnu[PK!;HվPNincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.phpnu[PK!GSOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.phpnu[PK!ffQOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.phpnu[PK! W; ; Px/Oincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.phpnu[PK!kMyyV3:Oincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.phpnu[PK!G00V2@Oincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.phpnu[PK!BB86 6 RWOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.phpnu[PK!}O@ @ ReOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.phpnu[PK!&HɅ RboOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.phpnu[PK!唘\yOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.phpnu[PK!f[[O!Oincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.phpnu[PK!EEm UOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.phpnu[PK!ܕN:Oincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.phpnu[PK!2 OOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.phpnu[PK!]\Oincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.phpnu[PK!~Y߫Oincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.phpnu[PK!LPOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.phpnu[PK!9U U WOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.phpnu[PK!VOOTOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.phpnu[PK!`L L RTOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.phpnu[PK!/gFFQ"Oincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.phpnu[PK!+ + XOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.phpnu[PK!ufNOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.phpnu[PK!j SOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.phpnu[PK!r-NOincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.phpnu[PK!,^hPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.phpnu[PK! 7VPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.phpnu[PK!V vn$Pincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.phpnu[PK!m{m'Pincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.phpnu[PK!oVp*Pincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.phpnu[PK![66N3Pincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.phpnu[PK!V33PEPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.phpnu[PK!ΓPjMPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.phpnu[PK!YyWVVNbPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.phpnu[PK!kT&T&PhPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.phpnu[PK!;*[. TPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.phpnu[PK!QrrZPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.phpnu[PK!zYMNPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.phpnu[PK!c#QPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.phpnu[PK!(rMPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.phpnu[PK!ƔTOPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.phpnu[PK!ŠffRWPincludes/google-api/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.phpnu[PK!9}!!G? Qincludes/google-api/vendor/monolog/monolog/src/Monolog/ErrorHandler.phpnu[PK! ȡMWMWAv-Qincludes/google-api/vendor/monolog/monolog/src/Monolog/Logger.phpnu[PK!9G<4Qincludes/google-api/vendor/monolog/monolog/phpstan.neon.distnu[PK!u˯85Qincludes/google-api/vendor/monolog/monolog/composer.jsonnu[PK!ˆ@@4LQincludes/google-api/vendor/monolog/monolog/README.mdnu[PK!1K''2Qincludes/google-api/vendor/monolog/monolog/LICENSEnu[PK! H_H_7yQincludes/google-api/vendor/monolog/monolog/CHANGELOG.mdnu[PK!EE(Rincludes/google-api/README.mdnu[PK!@|B1B1 sJRincludes/google-api/UPGRADING.mdnu[PK!II|Rincludes/google-api/SECURITY.mdnu[PK!#s((}Rincludes/google-api/LICENSEnu[PK!+ Rincludes/adsense-api.phpnu[PK!Ḑ  $Rincludes/ace/theme-solarized_dark.jsnu[PK!3tP, , TRincludes/ace/theme-textmate.jsnu[PK! !Rincludes/ace/theme-katzenmilch.jsnu[PK!*Rincludes/ace/theme-dawn.jsnu[PK!31 %FRincludes/ace/theme-mono_industrial.jsnu[PK!Rincludes/ace/mode-html.jsnu[PK! s s Sincludes/ace/theme-terminal.jsnu[PK!Pt6  $ESincludes/ace/theme-tomorrow_night.jsnu[PK!=x Sincludes/ace/ext-whitespace.jsnu[PK!`4 Sincludes/ace/theme-kr_theme.jsnu[PK!| $Sincludes/ace/theme-merbivore_soft.jsnu[PK!ƒc˝ $Tincludes/ace/ext-static_highlight.jsnu[PK!ؒ\) Tincludes/ace/ext-elastic_tabstops_lite.jsnu[PK!'+'+!pTincludes/ace/ext-settings_menu.jsnu[PK!o{6aaGTincludes/ace/ext-split.jsnu[PK!b XTincludes/ace/theme-chrome.jsnu[PK!0^ %vcTincludes/ace/theme-clouds_midnight.jsnu[PK!h`mTincludes/ace/theme-kuroir.jsnu[PK!ȣg( uTincludes/ace/ext-error_marker.jsnu[PK! vvTincludes/ace/mode-ai-php.jsnu[PK!uDP )sTincludes/ace/theme-tomorrow_night_blue.jsnu[PK!3t"Tincludes/ace/ext-language_tools.jsnu[PK!keeUincludes/ace/mode-php.jsnu[PK!`!iWincludes/ace/ext-chromevox.jsnu[PK!i +ǽWincludes/ace/theme-tomorrow_night_bright.jsnu[PK!2.2.Wincludes/ace/ext-old_ie.jsnu[PK!::XWincludes/ace/worker-php.jsnu[PK!S  Zincludes/ace/ext-modelist.jsnu[PK!M Zincludes/ace/theme-twilight.jsnu[PK!See"Zincludes/ace/keybinding-vim.jsnu[PK!rc33wZincludes/ace/theme-clouds.jsnu[PK!#Zincludes/ace/ext-beautify.jsnu[PK!u}88#,Zincludes/ace/ext-keybinding_menu.jsnu[PK!CZincludes/ace/ext-themelist.jsnu[PK!Ɓ81Zincludes/ace/theme-github.jsnu[PK!llBZincludes/ace/theme-ambiance.jsnu[PK!A!([includes/ace/theme-ad_inserter.jsnu[PK!r&&X7[includes/ace/ext-searchbox.jsnu[PK!'  b^[includes/ace/theme-chaos.jsnu[PK! ][ [ $i[includes/ace/theme-pastel_on_dark.jsnu[PK!K $vt[includes/ace/theme-crimson_editor.jsnu[PK!SpLY Y [includes/ace/theme-monokai.jsnu[PK!=l[includes/ace/theme-merbivore.jsnu[PK!;ix))[includes/ace/ace.jsnu[PK! -ϧ -`includes/ace/theme-tomorrow_night_eighties.jsnu[PK!s`includes/ace/theme-disabled.jsnu[PK!!`includes/ace/theme-vibrant_ink.jsnu[PK!Z))`includes/ace/ext-textarea.jsnu[PK!Yn*<aincludes/ace/ext-statusbar.jsnu[PK!#o,,aincludes/ace/index.htmlnu[PK!J J %aincludes/ace/theme-solarized_light.jsnu[PK!} Waincludes/ace/theme-xcode.jsnu[PK!Y bbaincludes/ace/mode-ai-html.jsnu[PK!:II=*aincludes/ace/worker-html.jsnu[PK!9K`tdincludes/ace/LICENSEnu[PK!F{C C vzdincludes/ace/theme-cobalt.jsnu[PK!J  dincludes/ace/theme-tomorrow.jsnu[PK!}iB B !adincludes/ace/theme-dreamweaver.jsnu[PK!g'dincludes/ace/ext-spellcheck.jsnu[PK!EO__ dincludes/ace/keybinding-emacs.jsnu[PK!:/MMeincludes/ace/theme-eclipse.jsnu[PK!QQ eincludes/ace/ext-emmet.jsnu[PK!N."[eincludes/ace/theme-idle_fingers.jsnu[PK!Yt  deincludes/ace/Readme.mdnu[PK!nHY99~eincludes/ace/ext-linking.jsnu[PK!WP))#eincludes/dst/languages/dst-es_ES.ponu[PK![)I cc#eincludes/dst/languages/dst-es_ES.monu[PK!@25#eincludes/dst/languages/dst-fr_FR.monu[PK!R3#eincludes/dst/languages/dst-it_IT.monu[PK!n#eincludes/dst/languages/dst-tr_TR.ponu[PK!?BB#eincludes/dst/languages/dst-it_IT.ponu[PK!=wii#6fincludes/dst/languages/dst-tr_TR.monu[PK!$3jڏ&fincludes/dst/languages/dst.potnu[PK!i#6fincludes/dst/languages/dst-sl_SI.monu[PK!4ֆ #Lfincludes/dst/languages/dst-sl_SI.ponu[PK!T #ldfincludes/dst/languages/dst-fr_FR.ponu[PK!\-~fincludes/dst/dst.phpnu[PK!#o,,egincludes/dst/index.htmlnu[PK!bf))-fgincludes/phpQuery.phpnu[PK!1% jincludes/google-api-8/src/Service.phpnu[PK!䎚3#3##jincludes/google-api-8/src/Model.phpnu[PK!O/  <%4jincludes/google-api-8/src/AuthHandler/Guzzle6AuthHandler.phpnu[PK!q<@jincludes/google-api-8/src/AuthHandler/Guzzle7AuthHandler.phpnu[PK!Rӯgg<Cjincludes/google-api-8/src/AuthHandler/AuthHandlerFactory.phpnu[PK!: <Jjincludes/google-api-8/src/AuthHandler/Guzzle5AuthHandler.phpnu[PK!OO/ Vjincludes/google-api-8/src/Service/Exception.phpnu[PK!|+]jincludes/google-api-8/src/Service/README.mdnu[PK!4~'~'.^jincludes/google-api-8/src/Service/Resource.phpnu[PK!|cB(,jincludes/google-api-8/src/Task/Exception.phpnu[PK!71 1 +ԉjincludes/google-api-8/src/Task/Composer.phpnu[PK!F,`jincludes/google-api-8/src/Task/Retryable.phpnu[PK!v)jincludes/google-api-8/src/Task/Runner.phpnu[PK!SWh'Ƿjincludes/google-api-8/src/Exception.phpnu[PK!R6 %ֺjincludes/google-api-8/src/aliases.phpnu[PK!t$$/+jincludes/google-api-8/src/Utils/UriTemplate.phpnu[PK! 0|jincludes/google-api-8/src/AccessToken/Verify.phpnu[PK!Ln0{ kincludes/google-api-8/src/AccessToken/Revoke.phpnu[PK!ݺ/ (xkincludes/google-api-8/src/Collection.phpnu[PK!*⢑$] kincludes/google-api-8/src/Client.phpnu[PK!lE1(Skincludes/google-api-8/src/Http/Batch.phpnu[PK!j+YY'kincludes/google-api-8/src/Http/REST.phpnu[PK!٬IT3$3$2Hkincludes/google-api-8/src/Http/MediaFileUpload.phpnu[PK!~ѽ( lincludes/google-api-8/CODE_OF_CONDUCT.mdnu[PK!c]@@?lincludes/google-api-8/vendor/guzzlehttp/promises/src/Create.phpnu[PK!69Nlincludes/google-api-8/vendor/guzzlehttp/promises/src/CancellationException.phpnu[PK!߇`G G =lincludes/google-api-8/vendor/guzzlehttp/promises/src/Each.phpnu[PK!(K||K'lincludes/google-api-8/vendor/guzzlehttp/promises/src/AggregateException.phpnu[PK!2~$ $ I)lincludes/google-api-8/vendor/guzzlehttp/promises/src/PromiseInterface.phpnu[PK!͔B5lincludes/google-api-8/vendor/guzzlehttp/promises/src/TaskQueue.phpnu[PK!rW;$=lincludes/google-api-8/vendor/guzzlehttp/promises/src/Is.phpnu[PK!''BvAlincludes/google-api-8/vendor/guzzlehttp/promises/src/functions.phpnu[PK!9Kxilincludes/google-api-8/vendor/guzzlehttp/promises/src/RejectionException.phpnu[PK!RE"">nlincludes/google-api-8/vendor/guzzlehttp/promises/src/Utils.phpnu[PK!lK#lincludes/google-api-8/vendor/guzzlehttp/promises/src/TaskQueueInterface.phpnu[PK!t&IOlincludes/google-api-8/vendor/guzzlehttp/promises/src/FulfilledPromise.phpnu[PK!R$QQDlincludes/google-api-8/vendor/guzzlehttp/promises/src/EachPromise.phpnu[PK!߇'JTlincludes/google-api-8/vendor/guzzlehttp/promises/src/functions_include.phpnu[PK!>Hulincludes/google-api-8/vendor/guzzlehttp/promises/src/RejectedPromise.phpnu[PK!zHyJlincludes/google-api-8/vendor/guzzlehttp/promises/src/PromisorInterface.phpnu[PK!A""@Glincludes/google-api-8/vendor/guzzlehttp/promises/src/Promise.phpnu[PK!CMBlincludes/google-api-8/vendor/guzzlehttp/promises/src/Coroutine.phpnu[PK!_\>lincludes/google-api-8/vendor/guzzlehttp/promises/composer.jsonnu[PK!cCC:\mincludes/google-api-8/vendor/guzzlehttp/promises/README.mdnu[PK!z*/8Fmincludes/google-api-8/vendor/guzzlehttp/promises/LICENSEnu[PK!Bi9.Lmincludes/google-api-8/vendor/guzzlehttp/promises/Makefilenu[PK!N~33=TMmincludes/google-api-8/vendor/guzzlehttp/promises/CHANGELOG.mdnu[PK!,TTmincludes/google-api-8/vendor/guzzlehttp/guzzle/vendor-bin/php-cs-fixer/composer.jsonnu[PK!_*OVmincludes/google-api-8/vendor/guzzlehttp/guzzle/vendor-bin/phpstan/composer.jsonnu[PK!AnMnWmincludes/google-api-8/vendor/guzzlehttp/guzzle/vendor-bin/psalm/composer.jsonnu[PK!=mML L LXmincludes/google-api-8/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.phpnu[PK!Vx.#.#BIemincludes/google-api-8/vendor/guzzlehttp/guzzle/src/ClientTrait.phpnu[PK!u͞Fmincludes/google-api-8/vendor/guzzlehttp/guzzle/src/RetryMiddleware.phpnu[PK!]Nsmincludes/google-api-8/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.phpnu[PK!oDl l Dژmincludes/google-api-8/vendor/guzzlehttp/guzzle/src/TransferStats.phpnu[PK!Kau||Gmincludes/google-api-8/vendor/guzzlehttp/guzzle/src/MessageFormatter.phpnu[PK!$::@mincludes/google-api-8/vendor/guzzlehttp/guzzle/src/functions.phpnu[PK!?""CWmincludes/google-api-8/vendor/guzzlehttp/guzzle/src/HandlerStack.phpnu[PK!;<22<mincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Utils.phpnu[PK!L+ll;1nincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Pool.phpnu[PK!^:wwECnincludes/google-api-8/vendor/guzzlehttp/guzzle/src/BodySummarizer.phpnu[PK!3LU U FFnincludes/google-api-8/vendor/guzzlehttp/guzzle/src/ClientInterface.phpnu[PK!Y KRnincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.phpnu[PK!W-133G]nincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.phpnu[PK!r$$Gnincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.phpnu[PK!lgNnincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.phpnu[PK!j! PPnincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.phpnu[PK!z9kInincludes/google-api-8/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.phpnu[PK!PSVnincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.phpnu[PK!8XXJjnincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.phpnu[PK!V V IEoincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.phpnu[PK!̄zOOLVQoincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.phpnu[PK!J*IJQoincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.phpnu[PK!I]22Jٺoincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.phpnu[PK!*  Ooincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.phpnu[PK!9Doincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/Proxy.phpnu[PK!F  Nroincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.phpnu[PK!kHoincludes/google-api-8/vendor/guzzlehttp/guzzle/src/functions_include.phpnu[PK!*H)H)E*oincludes/google-api-8/vendor/guzzlehttp/guzzle/src/RequestOptions.phpnu[PK!/yyRpincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/TransferException.phpnu[PK!FjPpincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/ServerException.phpnu[PK!N Qpincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.phpnu[PK!jP pincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/ClientException.phpnu[PK!OmU)!pincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.phpnu[PK!5O\$P%pincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.phpnu[PK!aQ&pincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/RequestException.phpnu[PK!$eeZ:pincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.phpnu[PK!coY:pincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.phpnu[PK!11Ppincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Middleware.phpnu[PK! ?GG=jpincludes/google-api-8/vendor/guzzlehttp/guzzle/src/Client.phpnu[PK!4D <pincludes/google-api-8/vendor/guzzlehttp/guzzle/composer.jsonnu[PK!I'QQ8۽pincludes/google-api-8/vendor/guzzlehttp/guzzle/README.mdnu[PK!vWpp;pincludes/google-api-8/vendor/guzzlehttp/guzzle/UPGRADING.mdnu[PK!Շ6oqincludes/google-api-8/vendor/guzzlehttp/guzzle/LICENSEnu[PK!8\rKrK;qincludes/google-api-8/vendor/guzzlehttp/guzzle/CHANGELOG.mdnu[PK!,Rfrincludes/google-api-8/vendor/guzzlehttp/psr7/vendor-bin/php-cs-fixer/composer.jsonnu[PK!RيMrincludes/google-api-8/vendor/guzzlehttp/psr7/vendor-bin/phpstan/composer.jsonnu[PK!bKrincludes/google-api-8/vendor/guzzlehttp/psr7/vendor-bin/psalm/composer.jsonnu[PK!;Arincludes/google-api-8/vendor/guzzlehttp/psr7/src/UploadedFile.phpnu[PK! AX sincludes/google-api-8/vendor/guzzlehttp/psr7/src/MessageTrait.phpnu[PK!`(;<&sincludes/google-api-8/vendor/guzzlehttp/psr7/src/Rfc7230.phpnu[PK!Գ))=)sincludes/google-api-8/vendor/guzzlehttp/psr7/src/Response.phpnu[PK! d2A>=sincludes/google-api-8/vendor/guzzlehttp/psr7/src/NoSeekStream.phpnu[PK!7bW=?sincludes/google-api-8/vendor/guzzlehttp/psr7/src/FnStream.phpnu[PK!cq ArQsincludes/google-api-8/vendor/guzzlehttp/psr7/src/BufferStream.phpnu[PK!oK^;;<^sincludes/google-api-8/vendor/guzzlehttp/psr7/src/Request.phpnu[PK!JvT=6nsincludes/google-api-8/vendor/guzzlehttp/psr7/src/MimeType.phpnu[PK!,>Btsincludes/google-api-8/vendor/guzzlehttp/psr7/src/CachingStream.phpnu[PK!Tu%u%Bsincludes/google-api-8/vendor/guzzlehttp/psr7/src/ServerRequest.phpnu[PK!md?{sincludes/google-api-8/vendor/guzzlehttp/psr7/src/PumpStream.phpnu[PK!fW88:sincludes/google-api-8/vendor/guzzlehttp/psr7/src/Query.phpnu[PK!-t^vvCsincludes/google-api-8/vendor/guzzlehttp/psr7/src/DroppingStream.phpnu[PK!ADpsincludes/google-api-8/vendor/guzzlehttp/psr7/src/MultipartStream.phpnu[PK!6yJ77:sincludes/google-api-8/vendor/guzzlehttp/psr7/src/Utils.phpnu[PK!TYYA(tincludes/google-api-8/vendor/guzzlehttp/psr7/src/AppendStream.phpnu[PK!ixn!n!@n@tincludes/google-api-8/vendor/guzzlehttp/psr7/src/UriResolver.phpnu[PK!PM ILbtincludes/google-api-8/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.phpnu[PK!C~  Botincludes/google-api-8/vendor/guzzlehttp/psr7/src/StreamWrapper.phpnu[PK!^ <dtincludes/google-api-8/vendor/guzzlehttp/psr7/src/Message.phpnu[PK!O;4RURU8ڠtincludes/google-api-8/vendor/guzzlehttp/psr7/src/Uri.phpnu[PK![e88Btincludes/google-api-8/vendor/guzzlehttp/psr7/src/InflateStream.phpnu[PK!ࣅ΃C>tincludes/google-api-8/vendor/guzzlehttp/psr7/src/LazyOpenStream.phpnu[PK!  @4uincludes/google-api-8/vendor/guzzlehttp/psr7/src/HttpFactory.phpnu[PK!rN@ uincludes/google-api-8/vendor/guzzlehttp/psr7/src/LimitStream.phpnu[PK!@`ww;uincludes/google-api-8/vendor/guzzlehttp/psr7/src/Stream.phpnu[PK!N|T:uincludes/google-api-8/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.phpnu[PK! B9(9(B\wincludes/google-api-8/vendor/google/auth/src/CredentialsLoader.phpnu[PK!H66J-wincludes/google-api-8/vendor/google/auth/src/ServiceAccountSignerTrait.phpnu[PK!dkk74wincludes/google-api-8/vendor/google/auth/src/OAuth2.phpnu[PK!/=22Nwincludes/google-api-8/vendor/google/auth/src/ApplicationDefaultCredentials.phpnu[PK!W(Kwincludes/google-api-8/vendor/google/auth/src/ProjectIdProviderInterface.phpnu[PK!/VW,wincludes/google-api-8/vendor/google/auth/src/Middleware/ScopedAccessTokenMiddleware.phpnu[PK![^  Lxincludes/google-api-8/vendor/google/auth/src/Middleware/SimpleMiddleware.phpnu[PK!^++T%xincludes/google-api-8/vendor/google/auth/src/Middleware/ProxyAuthTokenMiddleware.phpnu[PK!@i2O0xincludes/google-api-8/vendor/google/auth/src/Middleware/AuthTokenMiddleware.phpnu[PK!ևvv;ACxincludes/google-api-8/vendor/google/auth/src/CacheTrait.phpnu[PK!W} llH"Lxincludes/google-api-8/vendor/google/auth/src/FetchAuthTokenInterface.phpnu[PK!g!!DSxincludes/google-api-8/vendor/google/auth/src/FetchAuthTokenCache.phpnu[PK!h+ Kuxincludes/google-api-8/vendor/google/auth/src/Credentials/IAMCredentials.phpnu[PK!ߖ#)#)V9xincludes/google-api-8/vendor/google/auth/src/Credentials/ServiceAccountCredentials.phpnu[PK!'KOOSxincludes/google-api-8/vendor/google/auth/src/Credentials/UserRefreshCredentials.phpnu[PK!L_xincludes/google-api-8/vendor/google/auth/src/Credentials/ServiceAccountJwtAccessCredentials.phpnu[PK!88PYxincludes/google-api-8/vendor/google/auth/src/Credentials/InsecureCredentials.phpnu[PK!]@]@Kxincludes/google-api-8/vendor/google/auth/src/Credentials/GCECredentials.phpnu[PK!Syincludes/google-api-8/vendor/google/auth/src/Credentials/AppIdentityCredentials.phpnu[PK!Úf@I)6yincludes/google-api-8/vendor/google/auth/src/GetQuotaProjectInterface.phpnu[PK!/+uBU:yincludes/google-api-8/vendor/google/auth/src/SignBlobInterface.phpnu[PK!H@yincludes/google-api-8/vendor/google/auth/src/Cache/SysVCacheItemPool.phpnu[PK!MC;Xyincludes/google-api-8/vendor/google/auth/src/Cache/Item.phpnu[PK!/g g Jiyincludes/google-api-8/vendor/google/auth/src/Cache/MemoryCacheItemPool.phpnu[PK!s,,Ovyincludes/google-api-8/vendor/google/auth/src/Cache/InvalidArgumentException.phpnu[PK!U#/DD<vzyincludes/google-api-8/vendor/google/auth/src/AccessToken.phpnu[PK!1LH޿yincludes/google-api-8/vendor/google/auth/src/UpdateMetadataInterface.phpnu[PK!jd 9%yincludes/google-api-8/vendor/google/auth/src/GCECache.phpnu[PK!LQG G 4Eyincludes/google-api-8/vendor/google/auth/src/Iam.phpnu[PK!o]]Oyincludes/google-api-8/vendor/google/auth/src/Subscriber/AuthTokenSubscriber.phpnu[PK!FqW  Wyincludes/google-api-8/vendor/google/auth/src/Subscriber/ScopedAccessTokenSubscriber.phpnu[PK!P? ? L_zincludes/google-api-8/vendor/google/auth/src/Subscriber/SimpleSubscriber.phpnu[PK!~ѽ; zincludes/google-api-8/vendor/google/auth/CODE_OF_CONDUCT.mdnu[PK!D@OO6Bzincludes/google-api-8/vendor/google/auth/composer.jsonnu[PK! )4D)D)2zincludes/google-api-8/vendor/google/auth/README.mdnu[PK!II4Bzincludes/google-api-8/vendor/google/auth/SECURITY.mdnu[PK!#s((0JDzincludes/google-api-8/vendor/google/auth/LICENSEnu[PK!KK[[5lzincludes/google-api-8/vendor/google/auth/autoload.phpnu[PK!QFF6zqzincludes/google-api-8/vendor/google/auth/renovate.jsonnu[PK! 5&rzincludes/google-api-8/vendor/google/auth/CHANGELOG.mdnu[PK!gX?[zincludes/google-api-8/vendor/google/auth/.php-cs-fixer.dist.phpnu[PK!SSFzincludes/google-api-8/vendor/google/apiclient-services/src/Adsense.phpnu[PK!5UTzincludes/google-api-8/vendor/google/apiclient-services/src/Adsense/CustomChannel.phpnu[PK!B/VNzincludes/google-api-8/vendor/google/apiclient-services/src/Adsense/Account.phpnu[PK!3Lm`?zincludes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListLinkedAdUnitsResponse.phpnu[PK!sIKKYzincludes/google-api-8/vendor/google/apiclient-services/src/Adsense/Date.phpnu[PK!jgzincludes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListLinkedCustomChannelsResponse.phpnu[PK!cqa3{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListCustomChannelsResponse.phpnu[PK!9ߗL{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Alert.phpnu[PK!"_ {includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListSavedReportsResponse.phpnu[PK!·v^ {includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListUrlChannelsResponse.phpnu[PK!KL{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Cell.phpnu[PK!Yp^{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsAlerts.phpnu[PK!d&{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsReportsSaved.phpnu[PK!ƒ_-B{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsReports.phpnu[PK!$tl`{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsAdclientsUrlchannels.phpnu[PK!. Hk11X6j{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/Accounts.phpnu[PK!*||`x{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsPayments.phpnu[PK!HΠ a{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsAdclients.phpnu[PK!{  hU{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsAdclientsAdunits.phpnu[PK!V1  ]{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsSites.phpnu[PK!O44o{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Resource/AccountsAdclientsCustomchannels.phpnu[PK!/ZZXw{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListSitesResponse.phpnu[PK!z*`Y{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListChildAccountsResponse.phpnu[PK!O ۺ[{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListPaymentsResponse.phpnu[PK!unaaN{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Payment.phpnu[PK!.ccR{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/SavedReport.phpnu[PK!JO{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/AdClient.phpnu[PK!ĕQ{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/UrlChannel.phpnu[PK!8++U{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/AdClientAdCode.phpnu[PK!@xxZ;{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListAdUnitsResponse.phpnu[PK!HDS={includes/google-api-8/vendor/google/apiclient-services/src/Adsense/AdUnitAdCode.phpnu[PK!PA1K{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Site.phpnu[PK!M{includes/google-api-8/vendor/google/apiclient-services/src/Adsense/AdUnit.phpnu[PK!#=sccJ|includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Row.phpnu[PK!![|includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListAccountsResponse.phpnu[PK!jD\ |includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListAdClientsResponse.phpnu[PK!7m S |includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ReportResult.phpnu[PK!тbmmO>|includes/google-api-8/vendor/google/apiclient-services/src/Adsense/HttpBody.phpnu[PK!XZZO*%|includes/google-api-8/vendor/google/apiclient-services/src/Adsense/TimeZone.phpnu[PK!;]Y*|includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ListAlertsResponse.phpnu[PK!s@qqY(/|includes/google-api-8/vendor/google/apiclient-services/src/Adsense/ContentAdsSettings.phpnu[PK!qM"4|includes/google-api-8/vendor/google/apiclient-services/src/Adsense/Header.phpnu[PK!VyZ;ddD9|includes/google-api-8/vendor/google/apiclient-services/composer.jsonnu[PK!P}N@<|includes/google-api-8/vendor/google/apiclient-services/README.mdnu[PK!IIB>|includes/google-api-8/vendor/google/apiclient-services/SECURITY.mdnu[PK!]]?q@|includes/google-api-8/vendor/google/apiclient-services/synth.pynu[PK!#s((>=O|includes/google-api-8/vendor/google/apiclient-services/LICENSEnu[PK!^x>G!!Cw|includes/google-api-8/vendor/google/apiclient-services/autoload.phpnu[PK!} .[[DO}|includes/google-api-8/vendor/google/apiclient-services/renovate.jsonnu[PK!)E~|includes/google-api-8/vendor/google/apiclient-services/synth.metadatanu[PK!&//CO|includes/google-api-8/vendor/paragonie/random_compat/lib/random.phpnu[PK!DTT>|includes/google-api-8/vendor/paragonie/random_compat/psalm.xmlnu[PK!G|includes/google-api-8/vendor/paragonie/random_compat/psalm-autoload.phpnu[PK!P|*ffB|includes/google-api-8/vendor/paragonie/random_compat/composer.jsonnu[PK!t8QB|includes/google-api-8/vendor/paragonie/random_compat/build-phar.shnu[PK!*A|S|includes/google-api-8/vendor/paragonie/random_compat/dist/random_compat.phar.pubkeynu[PK!١iW;|includes/google-api-8/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.ascnu[PK!k}4aaI|includes/google-api-8/vendor/paragonie/random_compat/other/build_phar.phpnu[PK!>JJ<|includes/google-api-8/vendor/paragonie/random_compat/LICENSEnu[PK!cN:|includes/google-api-8/vendor/paragonie/constant_time_encoding/phpunit.xml.distnu[PK!)dY Y O|includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Base32Hex.phpnu[PK!q~~I}|includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Hex.phpnu[PK!q~~Nt|includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Encoding.phpnu[PK!n)Mp|includes/google-api-8/vendor/paragonie/constant_time_encoding/src/RFC4648.phpnu[PK!Kͧ""L{|includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Base64.phpnu[PK!K/( ( L}includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Binary.phpnu[PK!T*B [}includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.phpnu[PK!ӥT>>L(}includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Base32.phpnu[PK!VYh}includes/google-api-8/vendor/paragonie/constant_time_encoding/src/EncoderInterface.phpnu[PK! Tp}includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.phpnu[PK!) S}}includes/google-api-8/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.phpnu[PK!hG!}includes/google-api-8/vendor/paragonie/constant_time_encoding/psalm.xmlnu[PK!HK<}includes/google-api-8/vendor/paragonie/constant_time_encoding/composer.jsonnu[PK!1TDJ J G}includes/google-api-8/vendor/paragonie/constant_time_encoding/README.mdnu[PK!e e IH}includes/google-api-8/vendor/paragonie/constant_time_encoding/LICENSE.txtnu[PK!R0iiI&}includes/google-api-8/vendor/paragonie/constant_time_encoding/.travis.ymlnu[PK![%S}includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/RFC4648Test.phpnu[PK!QJmU#}includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/Base32HexTest.phpnu[PK!VJRp}includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/Base64Test.phpnu[PK!lޔZ}includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/Base64DotSlashTest.phpnu[PK!1D  Y}includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/Base64UrlSafeTest.phpnu[PK!{POY}includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/HexTest.phpnu[PK!w $$T}includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/EncodingTest.phpnu[PK!hSR~includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/Base32Test.phpnu[PK!Rja~includes/google-api-8/vendor/paragonie/constant_time_encoding/tests/Base64DotSlashOrderedTest.phpnu[PK!`H9 ~includes/google-api-8/vendor/paragonie/constant_time_encoding/.gitignorenu[PK!"7N ~includes/google-api-8/vendor/psr/http-client/src/NetworkExceptionInterface.phpnu[PK!Ҟv D~includes/google-api-8/vendor/psr/http-client/src/ClientInterface.phpnu[PK!:M7~includes/google-api-8/vendor/psr/http-client/src/ClientExceptionInterface.phpnu[PK!EuJJN_~includes/google-api-8/vendor/psr/http-client/src/RequestExceptionInterface.phpnu[PK!;b {{:'~includes/google-api-8/vendor/psr/http-client/composer.jsonnu[PK!C$$6 ~includes/google-api-8/vendor/psr/http-client/README.mdnu[PK!S==4~includes/google-api-8/vendor/psr/http-client/LICENSEnu[PK!Fyy97 ~includes/google-api-8/vendor/psr/http-client/CHANGELOG.mdnu[PK!DhEEI"~includes/google-api-8/vendor/psr/http-factory/src/UriFactoryInterface.phpnu[PK!rTXM#~includes/google-api-8/vendor/psr/http-factory/src/RequestFactoryInterface.phpnu[PK!!VVRG&~includes/google-api-8/vendor/psr/http-factory/src/UploadedFileFactoryInterface.phpnu[PK!BHAS+~includes/google-api-8/vendor/psr/http-factory/src/ServerRequestFactoryInterface.phpnu[PK!yۜLA/~includes/google-api-8/vendor/psr/http-factory/src/StreamFactoryInterface.phpnu[PK!X""NG5~includes/google-api-8/vendor/psr/http-factory/src/ResponseFactoryInterface.phpnu[PK!$>7~includes/google-api-8/vendor/psr/http-factory/.pullapprove.ymlnu[PK!2d=;8~includes/google-api-8/vendor/psr/http-factory/composer.jsonnu[PK!H7<~includes/google-api-8/vendor/psr/http-factory/README.mdnu[PK!}]((5>~includes/google-api-8/vendor/psr/http-factory/LICENSEnu[PK!)@8B~includes/google-api-8/vendor/psr/http-factory/.gitignorenu[PK! @#C~includes/google-api-8/vendor/psr/log/Psr/Log/Test/TestLogger.phpnu[PK!I\))IBU~includes/google-api-8/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.phpnu[PK!HTg?g~includes/google-api-8/vendor/psr/log/Psr/Log/Test/DummyTest.phpnu[PK!1b!q* * @Ni~includes/google-api-8/vendor/psr/log/Psr/Log/LoggerInterface.phpnu[PK!PP9u~includes/google-api-8/vendor/psr/log/Psr/Log/LogLevel.phpnu[PK!Q'Aw~includes/google-api-8/vendor/psr/log/Psr/Log/LoggerAwareTrait.phpnu[PK!WjW W <y~includes/google-api-8/vendor/psr/log/Psr/Log/LoggerTrait.phpnu[PK!j ))Eg~includes/google-api-8/vendor/psr/log/Psr/Log/LoggerAwareInterface.phpnu[PK!I;~includes/google-api-8/vendor/psr/log/Psr/Log/NullLogger.phpnu[PK!G ?3~includes/google-api-8/vendor/psr/log/Psr/Log/AbstractLogger.phpnu[PK! X1``I˜~includes/google-api-8/vendor/psr/log/Psr/Log/InvalidArgumentException.phpnu[PK!՞222~includes/google-api-8/vendor/psr/log/composer.jsonnu[PK!'BB./~includes/google-api-8/vendor/psr/log/README.mdnu[PK!pO==,ϡ~includes/google-api-8/vendor/psr/log/LICENSEnu[PK!=fbrEh~includes/google-api-8/vendor/psr/http-message/src/StreamInterface.phpnu[PK!-{  Gg~includes/google-api-8/vendor/psr/http-message/src/ResponseInterface.phpnu[PK!z /F~includes/google-api-8/vendor/psr/http-message/src/MessageInterface.phpnu[PK!_r'r'Lq~includes/google-api-8/vendor/psr/http-message/src/ServerRequestInterface.phpnu[PK!F_includes/google-api-8/vendor/psr/http-message/src/RequestInterface.phpnu[PK!?.?1?1Bincludes/google-api-8/vendor/psr/http-message/src/UriInterface.phpnu[PK!㭢vQQKTLincludes/google-api-8/vendor/psr/http-message/src/UploadedFileInterface.phpnu[PK!mm; _includes/google-api-8/vendor/psr/http-message/composer.jsonnu[PK!hff7aincludes/google-api-8/vendor/psr/http-message/README.mdnu[PK!==5cincludes/google-api-8/vendor/psr/http-message/LICENSEnu[PK!:\Y33:ghincludes/google-api-8/vendor/psr/http-message/CHANGELOG.mdnu[PK!p=mincludes/google-api-8/vendor/psr/cache/src/CacheException.phpnu[PK! ;;Enincludes/google-api-8/vendor/psr/cache/src/CacheItemPoolInterface.phpnu[PK!h";;Aincludes/google-api-8/vendor/psr/cache/src/CacheItemInterface.phpnu[PK!Gb<++Goincludes/google-api-8/vendor/psr/cache/src/InvalidArgumentException.phpnu[PK!Œ4includes/google-api-8/vendor/psr/cache/composer.jsonnu[PK!(Ac""0wincludes/google-api-8/vendor/psr/cache/README.mdnu[PK!Df882includes/google-api-8/vendor/psr/cache/LICENSE.txtnu[PK!- G3includes/google-api-8/vendor/psr/cache/CHANGELOG.mdnu[PK!t!ו=includes/google-api-8/vendor/composer/autoload_namespaces.phpnu[PK!R8includes/google-api-8/vendor/composer/platform_check.phpnu[PK!j&&;includes/google-api-8/vendor/composer/autoload_classmap.phpnu[PK!%u9zz3xincludes/google-api-8/vendor/composer/installed.phpnu[PK!T"::;Uincludes/google-api-8/vendor/composer/InstalledVersions.phpnu[PK!H[>>5Oincludes/google-api-8/vendor/composer/ClassLoader.phpnu[PK!.VAA8uBincludes/google-api-8/vendor/composer/autoload_files.phpnu[PK!hxx4Fincludes/google-api-8/vendor/composer/installed.jsonnu[PK! 7includes/google-api-8/vendor/composer/autoload_real.phpnu[PK! ..-Vincludes/google-api-8/vendor/composer/LICENSEnu[PK!H9 includes/google-api-8/vendor/composer/autoload_static.phpnu[PK!!c’7 includes/google-api-8/vendor/composer/autoload_psr4.phpnu[PK!gYaa;%includes/google-api-8/vendor/phpseclib/phpseclib/BACKERS.mdnu[PK!(@8'includes/google-api-8/vendor/phpseclib/phpseclib/AUTHORSnu[PK!> )includes/google-api-8/vendor/phpseclib/phpseclib/composer.jsonnu[PK!:Qi i :j2includes/google-api-8/vendor/phpseclib/phpseclib/README.mdnu[PK!99D=?includes/google-api-8/vendor/phpseclib/phpseclib/.github/FUNDING.ymlnu[PK!S=Aincludes/google-api-8/vendor/phpseclib/phpseclib/appveyor.ymlnu[PK!&2xxHnEincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.phpnu[PK!)ARPRPH^2includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.phpnu[PK!&[T(includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CPSuri.phpnu[PK!񰊡VɅincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Validity.phpnu[PK!<..\includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeValue.phpnu[PK!_vv\includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtree.phpnu[PK!_includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AccessDescription.phpnu[PK!WXe'includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedPrivateKeyInfo.phpnu[PK!`1^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OneAsymmetricKey.phpnu[PK!w~iiYincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DisplayText.phpnu[PK!&4GGc includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyUsagePeriod.phpnu[PK!EU \}includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertificate.phpnu[PK!Dhincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectDirectoryAttributes.phpnu[PK! [\includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPrivateKey.phpnu[PK!ji[~includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPrivateKey.phpnu[PK! n%%\ҿincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectAltName.phpnu[PK! ^),,Z‚includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPublicKey.phpnu[PK!F]9łincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DirectoryString.phpnu[PK!`z4Zɂincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PersonalName.phpnu[PK!7k077aтincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AlgorithmIdentifier.phpnu[PK! 5_mՂincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SpecifiedECDomain.phpnu[PK!Qfڂincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AdministrationDomainName.phpnu[PK!\\_:߂includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSASSA_PSS_params.phpnu[PK!t~a%includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierInfo.phpnu[PK!xGlincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttributes.phpnu[PK![9kCincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttribute.phpnu[PK!'""Uincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPoint.phpnu[PK!&?\\iincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignedPublicKeyAndChallenge.phpnu[PK!r7""[includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuerAltName.phpnu[PK!vEx;;^=includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UniqueIdentifier.phpnu[PK!VMMeincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateSerialNumber.phpnu[PK!P%_Wincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extension.phpnu[PK!\!a'includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttributes.phpnu[PK!:p,,Zincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BaseDistance.phpnu[PK!ϕ6FY; includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AnotherName.phpnu[PK!Ppciincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLDistributionPoints.phpnu[PK!Hš__^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BasicConstraints.phpnu[PK!0M.._includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateIssuer.phpnu[PK!Raincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Time.phpnu[PK!mYincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBES2params.phpnu[PK!SbI!includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectPublicKeyInfo.phpnu[PK! Y$includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Certificate.phpnu[PK!>&`}(includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RevokedCertificate.phpnu[PK!a)»\,includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyMappings.phpnu[PK!;;\&1includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/InvalidityDate.phpnu[PK!!includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLNumber.phpnu[PK!\(([includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HashAlgorithm.phpnu[PK!eincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectInfoAccessSyntax.phpnu[PK!-PQYincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DHParameter.phpnu[PK!=szz[#includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyInfo.phpnu[PK!11Z 'includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldElement.phpnu[PK!%%])includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateList.phpnu[PK!0jjY-includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ReasonFlags.phpnu[PK!F<Z1includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPublicKey.phpnu[PK!r[4includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EcdsaSigValue.phpnu[PK!ס99\>8includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NetworkAddress.phpnu[PK!n0Z];includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfos.phpnu[PK!!RZ`>includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPrivateKey.phpnu[PK!.j|YCincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DssSigValue.phpnu[PK!0C++XFincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKey.phpnu[PK!YrI fIincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuingDistributionPoint.phpnu[PK!hTkX>Vincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UserNotice.phpnu[PK![VWZincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ORAddress.phpnu[PK! $ύX^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attributes.phpnu[PK!k&&Waincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKey.phpnu[PK!MjGfdincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequestInfo.phpnu[PK!:Ziincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralNames.phpnu[PK!4_11^lincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MaskGenAlgorithm.phpnu[PK!=00Woincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLReason.phpnu[PK!gEB""WWtincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Trinomial.phpnu[PK!^}XXVwincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyUsage.phpnu[PK!ZdYzincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CountryName.phpnu[PK!44[Xincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyIdentifier.phpnu[PK!yFPincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.phpnu[PK!?3b2b2HXincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/File/X509.phpnu[PK!hhF2includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/openssl.cnfnu[PK!:uuaincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Common/Traits/ReadBytes.phpnu[PK!F#p#p#Xincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.phpnu[PK!U :!!Oincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.phpnu[PK!?ӫ44Wincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Strings.phpnu[PK!6M$M$K8includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.phpnu[PK!`$$H]includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.phpnu[PK!4HŢUUH(mincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.phpnu[PK!>mXBÇincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/StreamCipher.phpnu[PK!sxYegeg^ȇincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.phpnu[PK!{]0includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS.phpnu[PK!=βb#b#`G7includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.phpnu[PK!'4##^9[includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PuTTY.phpnu[PK!w-X88^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS1.phpnu[PK!}yalincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Signature/Raw.phpnu[PK!`r\\Wincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/BlockCipher.phpnu[PK!"Xfincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/SymmetricKey.phpnu[PK!td%֑d includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/PasswordProtected.phpnu[PK!OV^/includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/Fingerprint.phpnu[PK!o>>YϘincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.phpnu[PK!˺Vg׊includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PrivateKey.phpnu[PK!5GG]>includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Montgomery.phpnu[PK!͕wwWincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Base.phpnu[PK!`JCCRincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Parameters.phpnu[PK!8*V$$Rincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PrivateKey.phpnu[PK!GeeXU;includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256k1.phpnu[PK!\겼XBCincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163k1.phpnu[PK!1XGincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect239k1.phpnu[PK!wX#Lincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r2.phpnu[PK!66VVXPincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283r1.phpnu[PK!:kk^iUincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192r1.phpnu[PK!u^bZincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512r1.phpnu[PK!^ 6Xbincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r2.phpnu[PK!@ӊWfincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp384.phpnu[PK!͠Whincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp256.phpnu[PK!8GMWjincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp224.phpnu[PK!aaYlincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v2.phpnu[PK!<;Xqincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r1.phpnu[PK!K^^vincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224t1.phpnu[PK!WG{includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb409.phpnu[PK!ʥ YX}includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v2.phpnu[PK!$mm=uu^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192t1.phpnu[PK!`QOWincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk233.phpnu[PK!<))Xincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571k1.phpnu[PK!TWOincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp521.phpnu[PK!D^.X`includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256r1.phpnu[PK!vT))^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512t1.phpnu[PK!@iX_includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409r1.phpnu[PK!_2^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320t1.phpnu[PK!X11Xincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r1.phpnu[PK!7/XSincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r1.phpnu[PK!VFii^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384t1.phpnu[PK!^Wincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk283.phpnu[PK!<$WĽincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb233.phpnu[PK!2=  Xտincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp521r1.phpnu[PK!x ^fȍincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224r1.phpnu[PK!'X͍includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233r1.phpnu[PK!IiVVX)ҍincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283k1.phpnu[PK!bbX׍includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192k1.phpnu[PK!H~- - Yݍincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve25519.phpnu[PK!i^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256r1.phpnu[PK!O''Vincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed25519.phpnu[PK!Cx Xiincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192r1.phpnu[PK!WiizzX!includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r1.phpnu[PK!5x]W%includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistt571.phpnu[PK!Ml?X (includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r1.phpnu[PK!!*4NNX|,includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r2.phpnu[PK!'וZYR1includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v1.phpnu[PK!zzX6includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r2.phpnu[PK!wwX:includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r2.phpnu[PK!{;;X>includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160k1.phpnu[PK!(eh^Eincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320r1.phpnu[PK!NT^ Lincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160t1.phpnu[PK!w)aaYSincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v3.phpnu[PK!QXXincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r2.phpnu[PK!:pĩY\includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v3.phpnu[PK!Yaincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime256v1.phpnu[PK!^B^ dincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256t1.phpnu[PK!~Ӂ  Xpiincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r2.phpnu[PK!OWnincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk163.phpnu[PK!{Ypincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v1.phpnu[PK!{{X+rincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp384r1.phpnu[PK!\ZX.yincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233k1.phpnu[PK! hW}includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk409.phpnu[PK!qELXincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r1.phpnu[PK!Wincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp192.phpnu[PK!eI]))Xincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571r1.phpnu[PK!}o@ @ Wincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve448.phpnu[PK!bqX|includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224r1.phpnu[PK!e.HC;;^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160r1.phpnu[PK!]ڬX]includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224k1.phpnu[PK!f9Xincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r1.phpnu[PK!~9^^^includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384r1.phpnu[PK!-:#Xincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409k1.phpnu[PK!~YhhTincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed448.phpnu[PK!I.ڝQ؎includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.phpnu[PK!2_Yincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/Raw.phpnu[PK!+xx\includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/MSBLOB.phpnu[PK!<XHH[$includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS8.phpnu[PK!KI@]5includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/OpenSSH.phpnu[PK!h[Fincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PuTTY.phpnu[PK!ݠ,YVVincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/XML.phpnu[PK!"D%[mincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS1.phpnu[PK!%Yincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.phpnu[PK!}nAnAS:includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.phpnu[PK!Hv==R+includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.phpnu[PK! lpZ"includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS8.phpnu[PK!صZ5includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS1.phpnu[PK!jaPPR:?includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Parameters.phpnu[PK!q==R Cincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PrivateKey.phpnu[PK!?cUUQJincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PublicKey.phpnu[PK!/KddMOincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.phpnu[PK!!kH5includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.phpnu[PK!)  HCӐincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.phpnu[PK!@  Tincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/PublicKeyLoader.phpnu[PK!DM o oHDincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.phpnu[PK![u||M[includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/ChaCha20.phpnu[PK!_$$Hْincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA.phpnu[PK!n1313Gincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC.phpnu[PK!;5959LF1includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Salsa20.phpnu[PK!PIIGjincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH.phpnu[PK!~66N"includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.phpnu[PK!s!II includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.phpnu[PK!JDDLQincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.phpnu[PK!{<܈ Y7includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/Raw.phpnu[PK!y mm["Bincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS8.phpnu[PK!็HH]Wincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/OpenSSH.phpnu[PK!;\77[fincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PuTTY.phpnu[PK!lYuincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/XML.phpnu[PK!+)[includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS1.phpnu[PK!L.ZSS^ includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/Raw.phpnu[PK!= _띕includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/ASN1.phpnu[PK!Q--_{includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/SSH2.phpnu[PK!S2v"ZZS7includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Parameters.phpnu[PK!\ѠqwwSincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.phpnu[PK!q Rĕincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.phpnu[PK!1!!M2Εincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.phpnu[PK!^TTN{includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.phpnu[PK!,=Vіincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField.phpnu[PK!p^PӖincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField/Integer.phpnu[PK!/\&&VՖincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField/Integer.phpnu[PK!ɧD**O.includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField.phpnu[PK!includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.phpnu[PK!K.00b5?includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedCurveException.phpnu[PK!;55cAincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/InsufficientSetupException.phpnu[PK!DDfDincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedAlgorithmException.phpnu[PK!]8QlYGincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/BadModeException.phpnu[PK! ^00b%Jincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/BadConfigurationException.phpnu[PK!TnDDfLincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedOperationException.phpnu[PK!q^Oincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/FileNotFoundException.phpnu[PK!W55ckRincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/InconsistentSetupException.phpnu[PK!%]3Uincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/NoKeyLoadedException.phpnu[PK!l++aWincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/UnableToConnectException.phpnu[PK!=IIgZincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/NoSupportedAlgorithmsException.phpnu[PK!P!!_s]includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/BadDecryptionException.phpnu[PK!r@|V55c#`includes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedFormatException.phpnu[PK!lA00bbincludes/google-api-8/vendor/phpseclib/phpseclib/phpseclib/Exception/ConnectionClosedException.phpnu[PK!s=j998eincludes/google-api-8/vendor/phpseclib/phpseclib/LICENSEnu[PK!rgGNjincludes/google-api-8/vendor/symfony/deprecation-contracts/function.phpnu[PK!,HIIHnincludes/google-api-8/vendor/symfony/deprecation-contracts/composer.jsonnu[PK!3Dvrincludes/google-api-8/vendor/symfony/deprecation-contracts/README.mdnu[PK!8½))Bwincludes/google-api-8/vendor/symfony/deprecation-contracts/LICENSEnu[PK!U""E9|includes/google-api-8/vendor/symfony/deprecation-contracts/.gitignorenu[PK!h{#G|includes/google-api-8/vendor/symfony/deprecation-contracts/CHANGELOG.mdnu[PK!uV)}includes/google-api-8/vendor/autoload.phpnu[PK!zhhJ~includes/google-api-8/vendor/ralouphie/getallheaders/src/getallheaders.phpnu[PK!GBхincludes/google-api-8/vendor/ralouphie/getallheaders/composer.jsonnu[PK!\@@>includes/google-api-8/vendor/ralouphie/getallheaders/README.mdnu[PK!Ka88<Œincludes/google-api-8/vendor/ralouphie/getallheaders/LICENSEnu[PK!Zof%%Jfincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Test/TestCase.phpnu[PK!GPincludes/google-api-8/vendor/monolog/monolog/src/Monolog/ResettableInterface.phpnu[PK!v$==Nqincludes/google-api-8/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.phpnu[PK!1eX,includes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.phpnu[PK!J J X̫includes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.phpnu[PK!EE]includes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.phpnu[PK!FVpincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.phpnu[PK! ؑV~Ɵincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.phpnu[PK!uPyT̟includes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.phpnu[PK!XWmincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.phpnu[PK!4zYincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.phpnu[PK!I::Wincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.phpnu[PK!13caaXincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.phpnu[PK!qRXincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.phpnu[PK! Xincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.phpnu[PK![>$includes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.phpnu[PK!& TT8includes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.phpnu[PK!Oz**TyJincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.phpnu[PK!](M``Y'dincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.phpnu[PK!6Zmincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.phpnu[PK! btE4includes/google-api-8/vendor/monolog/monolog/src/Monolog/Registry.phpnu[PK!__YKincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.phpnu[PK!Y^Y3includes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.phpnu[PK!DD_^includes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.phpnu[PK!3a]1includes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.phpnu[PK!xSincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.phpnu[PK!x\˕S includes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.phpnu[PK!)11[8àincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.phpnu[PK!^ɌTF F ]Ơincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.phpnu[PK!a ##VҠincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.phpnu[PK!{bbSpڠincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.phpnu[PK!aXUߠincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.phpnu[PK!:DChhYincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.phpnu[PK! Sincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.phpnu[PK!Jincludes/google-api-8/vendor/monolog/monolog/src/Monolog/SignalHandler.phpnu[PK!p?t"t"B"includes/google-api-8/vendor/monolog/monolog/src/Monolog/Utils.phpnu[PK!y  ^+includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.phpnu[PK!#33T-includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.phpnu[PK!+!!ZYLincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.phpnu[PK!^wn#kkXmincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.phpnu[PK! U끡includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.phpnu[PK!l5Vincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.phpnu[PK!Di$hY1includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.phpnu[PK!A||Riincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.phpnu[PK!A7-Ogɡincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.phpnu[PK!]  QСincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.phpnu[PK!D Wincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.phpnu[PK!H7 Tincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.phpnu[PK!C  Sincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.phpnu[PK!nI Ze includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.phpnu[PK!> Q+includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.phpnu[PK!X_Y8includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.phpnu[PK!V\ Nincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.phpnu[PK!6 UUincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.phpnu[PK!'((Vxaincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.phpnu[PK!S抢includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.phpnu[PK!Z\includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.phpnu[PK!y:0`fincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.phpnu[PK![ [ Tincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.phpnu[PK!$sM7 7 Tincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.phpnu[PK!8  W=âincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.phpnu[PK!VYТincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.phpnu[PK!@vT<آincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.phpnu[PK!>$$Rincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.phpnu[PK!Yu_mmUXincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.phpnu[PK!Y,T T SJincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.phpnu[PK!FR!includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.phpnu[PK!6X/includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.phpnu[PK!qOVVX7includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.phpnu[PK!Ou>B B TPincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.phpnu[PK!  T]includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.phpnu[PK!@_ T9hincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.phpnu[PK!mzz^orincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.phpnu[PK!wӇQwzincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.phpnu[PK!+ Tincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.phpnu[PK!=A A Wincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.phpnu[PK!_9wwP˝includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.phpnu[PK!C Q£includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.phpnu[PK!^ﯣincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.phpnu[PK!=hh[Vincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.phpnu[PK!cRTIincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.phpnu[PK!ggNɣincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.phpnu[PK!gVgѣincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.phpnu[PK!C Sףincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.phpnu[PK!5?6 ZZincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.phpnu[PK!Ik99Pincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.phpnu[PK!HUqincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.phpnu[PK!b^^Pincludes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.phpnu[PK!BMM`e#includes/google-api-8/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.phpnu[PK!`f&css/images/ui-icons_cd0a0a_256x240.pngnu[PK!ŽL3css/images/ui-bg_highlight-soft_75_cccccc_1x100.pngnu[PK!o$PP&css/images/ui-icons_454545_256x240.pngnu[PK!8*<css/images/ui-bg_flat_75_ffffff_40x100.pngnu[PK!O&fcss/images/ui-icons_2e83ff_256x240.pngnu[PK!(w8  #1css/images/insertions-alignmets.pngnu[PK!#o,,Mcss/images/index.htmlnu[PK!xj8OO*RNcss/images/ui-bg_glass_55_fbf9ee_1x400.pngnu[PK!7B ii#Ocss/jquery-ui-1.10.3.custom.min.cssnu[PK!섰qqӹlanguages/ad-inserter-fr_FR.ponu[PK!r_ 4]Z]Z+languages/ad-inserter-fr_FR.monu[PK!=KX=K=K|languages/ad-inserter-it_IT.monu[PK!lQ0Q0languages/ad-inserter-pl_PL.monu[PK!99languages/ad-inserter.potnu[PK!ɸT00<languages/ad-inserter-sl_SI.monu[PK!]GAnAnmlanguages/ad-inserter-sl_SI.ponu[PK!}wdwdflanguages/ad-inserter-es_ES.ponu[PK! U%D%D+Alanguages/ad-inserter-tr_TR.monu[PK!,::languages/ad-inserter-pl_PL.ponu[PK!?2 (>(>&tlanguages/ad-inserter-tr_TR.ponu[PK!bGGlanguages/ad-inserter-it_IT.ponu[PK!Őz&P&Planguages/ad-inserter-es_ES.monu[PK!;3[[ KKconstants.phpnu[PK!S# {a"a" \class.phpnu[PK!I}?R** }settings.phpnu[PK!SQqQq changelog.txtnu[PK!#o,, index.htmlnu[PK!B@S@S ~strings.phpnu[PK!2]G]Goad-inserter.phpnu[PK!*8*8images/1AInIn200x250.jpgnu[PK!W<ցYYimages/icon-256x256.jpgnu[PK!^<(OIimages/info-2.jpgnu[PK!WyyyCimages/ai-adb.pngnu[PK!QAA~Rimages/info-3.jpgnu[PK!R8E8Erimages/ez-5.pngnu[PK!#HHwimages/ez-6.pngnu[PK!ME, , images/icon-50x50.jpgnu[PK!}](]( images/info-1.jpgnu[PK!~p>7552images/ez-7.jpgnu[PK!닼ghimages/1GAdXFP728x90.jpgnu[PK!'yyQimages/1GAdXFP200x250.jpgnu[PK!ttimages/2AInIn200x250.jpgnu[PK!ռ%%q images/1AInIn728x90.jpgnu[PK!$87(( images/ai-charts-250.pngnu[PK!|Lq images/stars.pngnu[PK!+!! images/icon-128x128.jpgnu[PK!YcF= images/loading.gifnu[PK!MW77 images/ai-recaptcha-250.pngnu[PK!U)) images/ai-preview-250.pngnu[PK!zAI__* images/ads.pngnu[PK!{%ս  + images/2GAdXFP728x90.jpgnu[PK!`}=sBsB#L images/ez-8.jpgnu[PK!56""Վ images/ai-amp.pngnu[PK!#o,,DZ images/index.htmlnu[PK!(h)h)4 images/ai-countries-250.pngnu[PKgg