<?php

defined('ABSPATH') || exit;
if (isset($_SERVER['REQUEST_URI']) && (strstr($_SERVER['REQUEST_URI'], 'robots.txt') || strstr($_SERVER['REQUEST_URI'], '.htaccess'))) {
    rocket_define_donotoptimize_constant(true);
    return;
}
$rocket_request_uri = explode('?', $_SERVER['REQUEST_URI']);
$rocket_request_uri = reset($rocket_request_uri);
if (strtolower($_SERVER['REQUEST_URI']) !== '/index.php' && in_array(pathinfo($rocket_request_uri, PATHINFO_EXTENSION), ['php', 'xml', 'xsl'], true)) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (is_admin()) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (defined('DOING_AJAX') && DOING_AJAX) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (isset($_POST['wp_customize'])) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (!isset($_SERVER['REQUEST_METHOD']) || 'GET' !== $_SERVER['REQUEST_METHOD']) {
    rocket_define_donotoptimize_constant(true);
    return;
}
$rocket_config_path = WP_CONTENT_DIR . '/wp-rocket-config/';
$rocket_real_config_path = realpath($rocket_config_path) . DIRECTORY_SEPARATOR;
$rocket_host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : (string) time();
$rocket_host = preg_replace('/:\\d+$/', '', $rocket_host);
$rocket_host = trim(strtolower($rocket_host), '.');
$rocket_host = rawurlencode($rocket_host);
$rocket_continue = false;
if (realpath($rocket_config_path . $rocket_host . '.php') && 0 === stripos(realpath($rocket_config_path . $rocket_host . '.php'), $rocket_real_config_path)) {
    include $rocket_config_path . $rocket_host . '.php';
    $rocket_continue = true;
} else {
    $rocket_path = str_replace('\\', '/', strtok($_SERVER['REQUEST_URI'], '?'));
    $rocket_path = preg_replace('|(?<=.)/+|', '/', $rocket_path);
    $rocket_path = explode('%2F', preg_replace('/^(?:%2F)*(.*?)(?:%2F)*$/', '$1', rawurlencode($rocket_path)));
    foreach ($rocket_path as $p) {
        static $dir;
        if (realpath($rocket_config_path . $rocket_host . '.' . $p . '.php') && 0 === stripos(realpath($rocket_config_path . $rocket_host . '.' . $p . '.php'), $rocket_real_config_path)) {
            include $rocket_config_path . $rocket_host . '.' . $p . '.php';
            $rocket_continue = true;
            break;
        }
        if (realpath($rocket_config_path . $rocket_host . '.' . $dir . $p . '.php') && 0 === stripos(realpath($rocket_config_path . $rocket_host . '.' . $dir . $p . '.php'), $rocket_real_config_path)) {
            include $rocket_config_path . $rocket_host . '.' . $dir . $p . '.php';
            $rocket_continue = true;
            break;
        }
        $dir .= $p . '.';
    }
}
if (!$rocket_continue) {
    rocket_define_donotoptimize_constant(true);
    return;
}
$rocket_remove_query_strings = ['utm_source' => 1, 'utm_medium' => 1, 'utm_campaign' => 1, 'utm_expid' => 1, 'fb_action_ids' => 1, 'fb_action_types' => 1, 'fb_source' => 1, 'fbclid' => 1, 'campaignid' => 1, 'adgroupid' => 1, 'adid' => 1, 'gclid' => 1, 'age-verified' => 1, 'ao_noptimize' => 1, 'usqp' => 1, 'cn-reloaded' => 1, '_ga' => 1];
$rocket_params = [];
if (!empty($_GET)) {
    $rocket_params = array_diff_key($_GET, $rocket_remove_query_strings);
    if (!empty($rocket_params)) {
        ksort($rocket_params);
        $rocket_request_uri .= http_build_query($rocket_params);
    }
}
$rocket_ignore_query_strings = ['lang' => 1, 's' => 1, 'permalink_name' => 1, 'lp-variation-id' => 1];
if (!empty($rocket_params) && !(bool) array_intersect_key($rocket_params, $rocket_ignore_query_strings) && (!isset($rocket_cache_query_strings) || !array_intersect(array_keys($rocket_params), $rocket_cache_query_strings))) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (empty($rocket_cache_ssl) && is_ssl()) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (isset($rocket_cache_reject_uri) && preg_match('#^(' . $rocket_cache_reject_uri . ')$#', $rocket_request_uri)) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (isset($rocket_cache_reject_cookies) && preg_match('#(' . $rocket_cache_reject_cookies . ')#', var_export($_COOKIE, true))) {
    rocket_define_donotoptimize_constant(true);
    return;
}
$rocket_ip = rocket_get_ip();
$rocket_allowed_ips = ['208.70.247.157' => '', '204.187.14.70' => '', '204.187.14.71' => '', '204.187.14.72' => '', '204.187.14.73' => '', '204.187.14.74' => '', '204.187.14.75' => '', '204.187.14.76' => '', '204.187.14.77' => '', '204.187.14.78' => '', '199.10.31.194' => '', '13.85.80.124' => '', '13.84.146.132' => '', '13.84.146.226' => '', '40.74.254.217' => '', '13.84.43.227' => '', '172.255.61.34' => '', '172.255.61.35' => '', '172.255.61.36' => '', '172.255.61.37' => '', '172.255.61.38' => '', '172.255.61.39' => '', '172.255.61.40' => '', '13.70.66.20' => '', '191.235.85.154' => '', '191.235.86.0' => '', '52.66.75.147' => '', '52.175.28.116' => ''];
if (!isset($rocket_allowed_ips[$rocket_ip]) && isset($_SERVER['HTTP_USER_AGENT']) && !preg_match('#(PingdomPageSpeed|DareBoost|Google|PTST|WP Rocket)#i', $_SERVER['HTTP_USER_AGENT']) && isset($rocket_cache_mandatory_cookies) && !preg_match('#(' . $rocket_cache_mandatory_cookies . ')#', var_export($_COOKIE, true))) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (isset($rocket_cache_reject_ua, $_SERVER['HTTP_USER_AGENT']) && !empty($rocket_cache_reject_ua) && preg_match('#(' . $rocket_cache_reject_ua . ')#', $_SERVER['HTTP_USER_AGENT'])) {
    rocket_define_donotoptimize_constant(true);
    return;
}
if (!isset($rocket_cache_mobile) && isset($_SERVER['HTTP_USER_AGENT']) && (preg_match('#^.*(2.0\\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\\ Wii|Nitro|Nokia|Opera\\ Mini|Palm|PlayStation\\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\\ Obigo|LGE\\ VX|webOS|Nokia5800).*#i', $_SERVER['HTTP_USER_AGENT']) || preg_match('#^(w3c\\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\\ |xda-).*#i', substr($_SERVER['HTTP_USER_AGENT'], 0, 4)))) {
    rocket_define_donotoptimize_constant(true);
    return;
}
$rocket_host = isset($rocket_url_no_dots) ? str_replace('.', '_', $rocket_host) : $rocket_host;
if (isset($rocket_cookie_hash) && isset($_COOKIE['wordpress_logged_in_' . $rocket_cookie_hash]) && isset($rocket_cache_reject_cookies) && !strstr($rocket_cache_reject_cookies, 'wordpress_logged_in_')) {
    if (isset($rocket_common_cache_logged_users)) {
        $request_uri_path = $rocket_cache_path . $rocket_host . '-loggedin' . rtrim($rocket_request_uri, '/');
    } else {
        $rocket_user_key = explode('|', $_COOKIE['wordpress_logged_in_' . $rocket_cookie_hash]);
        $rocket_user_key = reset($rocket_user_key);
        $rocket_user_key = $rocket_user_key . '-' . $rocket_secret_cache_key;
        $request_uri_path = $rocket_cache_path . $rocket_host . '-' . $rocket_user_key . rtrim($rocket_request_uri, '/');
    }
} else {
    $request_uri_path = $rocket_cache_path . $rocket_host . rtrim($rocket_request_uri, '/');
}
$rocket_filename = 'index';
if (isset($rocket_cache_mobile, $rocket_do_caching_mobile_files, $rocket_cache_mobile_files_tablet) && class_exists('Rocket_Mobile_Detect')) {
    $rocket_detect = new Rocket_Mobile_Detect();
    if ($rocket_detect->isMobile() && !$rocket_detect->isTablet() && 'desktop' === $rocket_cache_mobile_files_tablet || ($rocket_detect->isMobile() || $rocket_detect->isTablet()) && 'mobile' === $rocket_cache_mobile_files_tablet) {
        $rocket_filename .= '-mobile';
    }
}
if (is_ssl() && !empty($rocket_cache_ssl)) {
    $rocket_filename .= '-https';
}
if (!empty($rocket_cache_dynamic_cookies)) {
    foreach ($rocket_cache_dynamic_cookies as $key => $cookie_name) {
        if (is_array($cookie_name) && isset($_COOKIE[$key])) {
            foreach ($cookie_name as $cookie_key) {
                if (isset($_COOKIE[$key][$cookie_key]) && '' !== $_COOKIE[$key][$cookie_key]) {
                    $rocket_cache_key = $_COOKIE[$key][$cookie_key];
                    $rocket_cache_key = preg_replace('/[^a-z0-9_\\-]/i', '-', $cache_key);
                    $rocket_filename .= '-' . $rocket_cache_key;
                }
            }
            continue;
        }
        if (isset($_COOKIE[$cookie_name]) && '' !== $_COOKIE[$cookie_name]) {
            $rocket_cache_key = $_COOKIE[$cookie_name];
            $rocket_cache_key = preg_replace('/[^a-z0-9_\\-]/i', '-', $cache_key);
            $rocket_filename .= '-' . $rocket_cache_key;
        }
    }
}
$request_uri_path = preg_replace_callback('/%[0-9A-F]{2}/', 'rocket_urlencode_lowercase', $request_uri_path);
$request_uri_path = str_replace('?', '_', $request_uri_path);
$rocket_cache_filepath = $request_uri_path . '/' . $rocket_filename . '.html';
rocket_serve_cache_file($rocket_cache_filepath);
ob_start('do_rocket_callback');
function do_rocket_callback($buffer)
{
    $rocket_cache_search = apply_filters('rocket_cache_search', false);
    $rocket_override_donotcachepage = apply_filters('rocket_override_donotcachepage', false);
    if (strlen($buffer) > 255 && http_response_code() === 200 && (function_exists('is_404') && !is_404()) && (function_exists('is_search') && !is_search() || $rocket_cache_search) && (!defined('DONOTCACHEPAGE') || !DONOTCACHEPAGE || $rocket_override_donotcachepage) && function_exists('rocket_mkdir_p')) {
        global $request_uri_path, $rocket_cache_filepath, $is_nginx;
        $footprint = '';
        $is_html = false;
        if (preg_match('/(<\\/html>)/i', $buffer)) {
            $is_html = true;
        }
        if (apply_filters('do_rocket_generate_caching_files', true)) {
            rocket_mkdir_p($request_uri_path);
            if ($is_html) {
                $footprint = get_rocket_footprint();
            }
            rocket_put_content($rocket_cache_filepath, $buffer . $footprint);
            if (get_rocket_option('do_caching_mobile_files')) {
                if ($is_nginx) {
                    $nginx_mobile_detect_file = $request_uri_path . '/.mobile-active';
                    if (!rocket_direct_filesystem()->exists($nginx_mobile_detect_file)) {
                        rocket_direct_filesystem()->touch($nginx_mobile_detect_file);
                    }
                }
            }
            if (function_exists('gzencode')) {
                rocket_put_content($rocket_cache_filepath . '_gzip', gzencode($buffer . $footprint, apply_filters('rocket_gzencode_level_compression', 3)));
            }
            if (file_exists($rocket_cache_filepath)) {
                header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($rocket_cache_filepath)) . ' GMT');
            }
        }
        if ($is_html) {
            $footprint = get_rocket_footprint(false);
        }
        $buffer = $buffer . $footprint;
    }
    return $buffer;
}
function rocket_serve_cache_file($rocket_cache_filepath)
{
    $rocket_cache_filepath_gzip = $rocket_cache_filepath . '_gzip';
    if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && false !== strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && file_exists($rocket_cache_filepath_gzip) && is_readable($rocket_cache_filepath_gzip)) {
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($rocket_cache_filepath_gzip)) . ' GMT');
        if (function_exists('apache_request_headers')) {
            $headers = apache_request_headers();
            $http_if_modified_since = isset($headers['If-Modified-Since']) ? $headers['If-Modified-Since'] : '';
        } else {
            $http_if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : '';
        }
        if ($http_if_modified_since && strtotime($http_if_modified_since) === @filemtime($rocket_cache_filepath_gzip)) {
            header((isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : '') . ' 304 Not Modified', true, 304);
            header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
            header('Cache-Control: no-cache, must-revalidate');
            exit;
        }
        readgzfile($rocket_cache_filepath_gzip);
        exit;
    }
    if (file_exists($rocket_cache_filepath) && is_readable($rocket_cache_filepath)) {
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($rocket_cache_filepath)) . ' GMT');
        if (function_exists('apache_request_headers')) {
            $headers = apache_request_headers();
            $http_if_modified_since = isset($headers['If-Modified-Since']) ? $headers['If-Modified-Since'] : '';
        } else {
            $http_if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : '';
        }
        if ($http_if_modified_since && strtotime($http_if_modified_since) === @filemtime($rocket_cache_filepath)) {
            header((isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : '') . ' 304 Not Modified', true, 304);
            header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
            header('Cache-Control: no-cache, must-revalidate');
            exit;
        }
        readfile($rocket_cache_filepath);
        exit;
    }
}
function rocket_define_donotoptimize_constant($value)
{
    if (!defined('DONOTROCKETOPTIMIZE')) {
        define('DONOTROCKETOPTIMIZE', (bool) $value);
    }
}
function rocket_urlencode_lowercase($matches)
{
    return strtolower($matches[0]);
}
function rocket_get_ip()
{
    $keys = ['HTTP_CF_CONNECTING_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_X_REAL_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR'];
    foreach ($keys as $key) {
        if (array_key_exists($key, $_SERVER)) {
            $ip = explode(',', $_SERVER[$key]);
            $ip = end($ip);
            if (false !== filter_var($ip, FILTER_VALIDATE_IP)) {
                return $ip;
            }
        }
    }
    return '0.0.0.0';
}