ID)) { return $conf; } $conf[$this->ID] = array( 'version' => \PHP_VERSION, 'sapi' => \PHP_SAPI, 'displayErrors' => (bool) \ini_get('display_errors'), 'errorReporting' => (int) \ini_get('error_reporting'), 'memoryLimit' => (string) \ini_get('memory_limit'), 'postMaxSize' => (string) \ini_get('post_max_size'), 'uploadMaxFilesize' => (string) \ini_get('upload_max_filesize'), 'maxInputVars' => (int) \ini_get('max_input_vars'), 'maxExecutionTime' => (int) \ini_get('max_execution_time'), 'defaultSocketTimeout' => (int) \ini_get('default_socket_timeout'), 'allowUrlFopen' => (bool) \ini_get('allow_url_fopen'), 'smtp' => (bool) \ini_get('SMTP'), 'disableFunctions' => XconfigApi::isDisabled('phpDisabledFunctions') ? array() : array_filter(explode(',', (string) \ini_get('disable_functions'))), 'disableClasses' => XconfigApi::isDisabled('phpDisabledClasses') ? array() : array_filter(explode(',', (string) \ini_get('disable_classes'))), ); return $conf; }); } } namespace InnStudio\Prober\Components\PhpInfo; use InnStudio\Prober\Components\Config\ConfigApi; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Rest\RestResponse; use InnStudio\Prober\Components\Rest\StatusCode; use InnStudio\Prober\Components\Xconfig\XconfigApi; final class FetchLatestPhpVersion extends PhpInfoConstants { public function __construct() { EventsApi::on('init', function ($action) { if (XconfigApi::isDisabled($this->ID)) { return $action; } if ('latest-php-version' !== $action) { return $action; } $response = new RestResponse(); $content = file_get_contents('https://www.php.net/releases/?json'); if ( ! $content) { $response->setStatus(StatusCode::$NOT_FOUND)->end(); } $versions = json_decode($content, true); if ( ! $versions) { $response->setStatus(StatusCode::$NOT_FOUND)->end(); } $version = isset($versions[ConfigApi::$LATEST_PHP_STABLE_VERSION]['version']) ? $versions[ConfigApi::$LATEST_PHP_STABLE_VERSION]['version'] : ''; if ( ! $version) { $response->setStatus(StatusCode::$NOT_FOUND)->end(); } $response->setData(array( 'version' => $version, 'date' => $versions[ConfigApi::$LATEST_PHP_STABLE_VERSION]['date'], ))->json()->end(); }); } } namespace InnStudio\Prober\Components\PhpInfo; final class PhpInfo { public function __construct() { new Conf(); new FetchLatestPhpVersion(); } } namespace InnStudio\Prober\Components\PhpInfo; class PhpInfoConstants { protected $ID = 'phpInfo'; } namespace InnStudio\Prober\Components\Events; final class EventsApi { private static $events = array(); private static $PRIORITY_ID = 'priority'; private static $CALLBACK_ID = 'callback'; public static function on($name, $callback, $priority = 10) { if ( ! isset(self::$events[$name])) { self::$events[$name] = array(); } self::$events[$name][] = array( self::$PRIORITY_ID => $priority, self::$CALLBACK_ID => $callback, ); } public static function emit() { $args = \func_get_args(); $name = $args[0]; $return = isset($args[1]) ? $args[1] : null; unset($args[0], $args[1]); $events = isset(self::$events[$name]) ? self::$events[$name] : false; if ( ! $events) { return $return; } $sortArr = array(); foreach ($events as $k => $filter) { $sortArr[$k] = $filter[self::$PRIORITY_ID]; } array_multisort($sortArr, $events); foreach ($events as $filter) { $return = \call_user_func_array($filter[self::$CALLBACK_ID], array($return, $args)); } return $return; } } namespace InnStudio\Prober\Components\PhpInfoDetail; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Xconfig\XconfigApi; final class PhpInfoDetail extends PhpInfoDetailConstants { public function __construct() { EventsApi::on('init', function ($action) { if (XconfigApi::isDisabled($this->ID)) { return $action; } if ($this->ID !== $action) { return $action; } phpinfo(); exit; }); } } namespace InnStudio\Prober\Components\PhpInfoDetail; class PhpInfoDetailConstants { protected $ID = 'phpInfoDetail'; } namespace InnStudio\Prober\Components\Ping; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Xconfig\XconfigApi; final class Conf extends PingConstants { public function __construct() { EventsApi::on('conf', function (array $conf) { if (XconfigApi::isDisabled($this->ID)) { return $conf; } $conf[$this->ID] = array(); return $conf; }); } } namespace InnStudio\Prober\Components\Ping; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Rest\RestResponse; use InnStudio\Prober\Components\Xconfig\XconfigApi; final class Ping extends PingConstants { public function __construct() { new Conf(); EventsApi::on('init', function ($action) { if (XconfigApi::isDisabled($this->ID)) { return $action; } if ($this->ID !== $action) { return $action; } $response = new RestResponse(array( 'time' => \defined('XPROBER_TIMER') ? microtime(true) - XPROBER_TIMER : 0, )); $response->json()->end(); }); } } namespace InnStudio\Prober\Components\Ping; class PingConstants { protected $ID = 'ping'; } namespace InnStudio\Prober\Components\PhpExtensions; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Xconfig\XconfigApi; final class Conf extends PhpExtensionsConstants { public function __construct() { EventsApi::on('conf', function (array $conf) { if (XconfigApi::isDisabled($this->ID)) { return $conf; } $jitEnabled = false; if (\function_exists('opcache_get_status')) { $status = opcache_get_status(); if (isset($status['jit']['enabled']) && true === $status['jit']['enabled']) { $jitEnabled = true; } } $conf[$this->ID] = array( 'redis' => \extension_loaded('redis') && class_exists('Redis'), 'sqlite3' => \extension_loaded('sqlite3') && class_exists('Sqlite3'), 'memcache' => \extension_loaded('memcache') && class_exists('Memcache'), 'memcached' => \extension_loaded('memcached') && class_exists('Memcached'), 'opcache' => \function_exists('opcache_get_status'), 'opcacheEnabled' => $this->isOpcEnabled(), 'opcacheJitEnabled' => $jitEnabled, 'swoole' => \extension_loaded('swoole') && \function_exists('swoole_version'), 'imagick' => \extension_loaded('imagick') && class_exists('Imagick'), 'gmagick' => \extension_loaded('gmagick'), 'exif' => \extension_loaded('exif') && \function_exists('exif_imagetype'), 'fileinfo' => \extension_loaded('fileinfo'), 'simplexml' => \extension_loaded('simplexml'), 'sockets' => \extension_loaded('sockets') && \function_exists('socket_accept'), 'mysqli' => \extension_loaded('mysqli') && class_exists('mysqli'), 'zip' => \extension_loaded('zip') && class_exists('ZipArchive'), 'mbstring' => \extension_loaded('mbstring') && \function_exists('mb_substr'), 'phalcon' => \extension_loaded('phalcon'), 'xdebug' => \extension_loaded('xdebug'), 'zendOptimizer' => \function_exists('zend_optimizer_version'), 'ionCube' => \extension_loaded('ioncube loader'), 'sourceGuardian' => \extension_loaded('sourceguardian'), 'ldap' => \function_exists('ldap_connect'), 'curl' => \function_exists('curl_init'), 'loadedExtensions' => XconfigApi::isDisabled('phpExtensionsLoaded') ? array() : get_loaded_extensions(), ); return $conf; }); } private function isOpcEnabled() { $isOpcEnabled = \function_exists('opcache_get_configuration'); if ($isOpcEnabled) { $isOpcEnabled = opcache_get_configuration(); $isOpcEnabled = isset($isOpcEnabled['directives']['opcache.enable']) && true === $isOpcEnabled['directives']['opcache.enable']; } return $isOpcEnabled; } } namespace InnStudio\Prober\Components\PhpExtensions; class PhpExtensionsConstants { protected $ID = 'phpExtensions'; } namespace InnStudio\Prober\Components\PhpExtensions; final class PhpExtensions { public function __construct() { new Conf(); } } namespace InnStudio\Prober\Components\Footer; use InnStudio\Prober\Components\Events\EventsApi; final class Footer { private $ID = 'footer'; public function __construct() { EventsApi::on('conf', function (array $conf) { $conf[$this->ID] = array( 'memUsage' => memory_get_usage(), 'time' => microtime(true) - (\defined('XPROBER_TIMER') ? XPROBER_TIMER : 0), ); return $conf; }, \PHP_INT_MAX); } } namespace InnStudio\Prober\Components\TemperatureSensor; use Exception; use InnStudio\Prober\Components\Config\ConfigApi; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Rest\RestResponse; use InnStudio\Prober\Components\Rest\StatusCode; final class TemperatureSensor { public function __construct() { EventsApi::on('init', function ($action) { if ('temperature-sensor' !== $action) { return $action; } $response = new RestResponse(); $items = $this->getItems(); if ($items) { $response->setData($items)->json()->end(); } $cpuTemp = $this->getCpuTemp(); if ( ! $cpuTemp) { $response->setStatus(StatusCode::$NO_CONTENT); } $items[] = array( 'id' => 'cpu', 'name' => 'CPU', 'celsius' => round((float) $cpuTemp / 1000, 2), ); $response->setData($items)->json()->end(); }); } private function curl($url) { if ( ! \function_exists('curl_init')) { return; } $ch = curl_init(); curl_setopt_array($ch, array( \CURLOPT_URL => $url, \CURLOPT_RETURNTRANSFER => true, )); $res = curl_exec($ch); curl_close($ch); return (string) $res; } private function getItems() { $items = array(); foreach (ConfigApi::$APP_TEMPERATURE_SENSOR_PORTS as $port) { $res = $this->curl(ConfigApi::$APP_TEMPERATURE_SENSOR_URL . ":{$port}"); if ( ! $res) { continue; } $item = json_decode($res, true); if ( ! $item || ! \is_array($item)) { continue; } $items = $item; break; } return $items; } private function getCpuTemp() { try { $path = '/sys/class/thermal/thermal_zone0/temp'; return file_exists($path) ? (int) file_get_contents($path) : 0; } catch (Exception $e) { return 0; } } } namespace InnStudio\Prober\Components\ServerStatus; final class ServerStatus { public function __construct() { new Conf(); new Fetch(); } } namespace InnStudio\Prober\Components\ServerStatus; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Utils\UtilsCpu; use InnStudio\Prober\Components\Utils\UtilsMemory; use InnStudio\Prober\Components\Xconfig\XconfigApi; final class Conf extends ServerStatusConstants { public function __construct() { EventsApi::on('conf', function (array $conf) { if (XconfigApi::isDisabled($this->ID)) { return $conf; } $conf[$this->ID] = array( 'sysLoad' => UtilsCpu::getLoadAvg(), 'memRealUsage' => array( 'value' => UtilsMemory::getMemoryUsage('MemRealUsage'), 'max' => UtilsMemory::getMemoryUsage('MemTotal'), ), 'memBuffers' => array( 'value' => UtilsMemory::getMemoryUsage('Buffers'), 'max' => UtilsMemory::getMemoryUsage('MemUsage'), ), 'memCached' => array( 'value' => UtilsMemory::getMemoryUsage('Cached'), 'max' => UtilsMemory::getMemoryUsage('MemUsage'), ), 'swapUsage' => array( 'value' => UtilsMemory::getMemoryUsage('SwapUsage'), 'max' => UtilsMemory::getMemoryUsage('SwapTotal'), ), 'swapCached' => array( 'value' => UtilsMemory::getMemoryUsage('SwapCached'), 'max' => UtilsMemory::getMemoryUsage('SwapUsage'), ), ); return $conf; }); } } namespace InnStudio\Prober\Components\ServerStatus; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Utils\UtilsCpu; use InnStudio\Prober\Components\Utils\UtilsMemory; use InnStudio\Prober\Components\Xconfig\XconfigApi; final class Fetch extends ServerStatusConstants { public function __construct() { EventsApi::on('fetch', array($this, 'filter')); EventsApi::on('nodes', array($this, 'filter')); } public function filter(array $items) { if (XconfigApi::isDisabled($this->ID)) { return $items; } $items[$this->ID] = array( 'sysLoad' => UtilsCpu::getLoadAvg(), 'cpuUsage' => UtilsCpu::getUsage(), 'memRealUsage' => array( 'value' => UtilsMemory::getMemoryUsage('MemRealUsage'), 'max' => UtilsMemory::getMemoryUsage('MemTotal'), ), 'memBuffers' => array( 'value' => UtilsMemory::getMemoryUsage('Buffers'), 'max' => UtilsMemory::getMemoryUsage('MemUsage'), ), 'memCached' => array( 'value' => UtilsMemory::getMemoryUsage('Cached'), 'max' => UtilsMemory::getMemoryUsage('MemUsage'), ), 'swapUsage' => array( 'value' => UtilsMemory::getMemoryUsage('SwapUsage'), 'max' => UtilsMemory::getMemoryUsage('SwapTotal'), ), 'swapCached' => array( 'value' => UtilsMemory::getMemoryUsage('SwapCached'), 'max' => UtilsMemory::getMemoryUsage('SwapUsage'), ), ); return $items; } } namespace InnStudio\Prober\Components\ServerStatus; class ServerStatusConstants { protected $ID = 'serverStatus'; } namespace InnStudio\Prober\Components\Style; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Utils\UtilsApi; final class Style { public function __construct() { EventsApi::on('init', function ($action) { if ('style' !== $action) { return $action; } $this->output(); }); } private function output() { UtilsApi::setFileCacheHeader(); header('Content-type: text/css'); echo <<<'HTML' .src-Components-Card-components-styles-module__des--EgOss{margin-bottom:var(--x-gutter);border-radius:var(--x-radius);background-color:var(--x-card-des-bg);padding:calc(var(--x-gutter)/2) var(--x-gutter);color:var(--x-card-des-fg)}.src-Components-Card-components-styles-module__link--QMvaX::before{content:"👆 "}.src-Components-Card-components-styles-module__ruby--lRf3T{cursor:pointer;background:var(--x-benchmark-ruby-bg)}.src-Components-Card-components-styles-module__ruby--lRf3T:hover{text-decoration:underline}.src-Components-Card-components-styles-module__ruby--lRf3T rt{opacity:.5;font-size:.75rem}.src-Components-Card-components-styles-module__ruby--lRf3T[data-is-result]{font-weight:bold}.src-Components-Card-components-styles-module__error--RxEjQ{padding:var(--x-gutter)}.src-Components-Card-components-styles-module__title--sQBIC{flex:0 0 8rem;padding:calc(var(--x-gutter)/2) 0;color:var(--x-card-title-fg);word-break:normal}@media(min-width: 375px){.src-Components-Card-components-styles-module__title--sQBIC{flex:0 0 9rem}}@media(min-width: 425px){.src-Components-Card-components-styles-module__title--sQBIC{flex:0 0 10rem}}@media(min-width: 768px){.src-Components-Card-components-styles-module__title--sQBIC{flex:0 0 11rem}}.src-Components-Card-components-styles-module__group--onjSH{display:flex;align-items:center;border-bottom:1px dashed var(--x-card-split-color);width:100%}.src-Components-Card-components-styles-module__group--onjSH:hover{background:var(--x-card-bg-hover)}.src-Components-Card-components-styles-module__content--Ibvay{flex-grow:1;padding:calc(var(--x-gutter)/2) 0}.src-Components-Card-components-styles-module__fieldset--GoXuV{position:relative;margin-bottom:calc(var(--x-gutter)*1.5);box-shadow:var(--x-card-box-shadow);border:5px solid var(--x-card-border-color);border-radius:var(--x-radius);background:var(--x-card-bg);padding:calc(var(--x-gutter)*1.5) 0 0;scroll-margin-top:50px}.src-Components-Card-components-styles-module__body--aNmjc{padding:0 calc(var(--x-gutter)/2)}@media(min-width: 425px){.src-Components-Card-components-styles-module__body--aNmjc{padding:0 var(--x-gutter)}}.src-Components-Card-components-styles-module__arrow--YXo0g{opacity:.5;cursor:pointer;padding:0 .5rem;color:var(--x-card-legend-arrow-fg)}.src-Components-Card-components-styles-module__arrow--YXo0g:active,.src-Components-Card-components-styles-module__arrow--YXo0g:hover{opacity:1;color:var(--x-card-legend-arrow-fg);text-decoration:none}.src-Components-Card-components-styles-module__arrow--YXo0g[data-disabled],.src-Components-Card-components-styles-module__arrow--YXo0g[data-disabled]:hover{opacity:.1;cursor:not-allowed}.src-Components-Card-components-styles-module__legend--fgO2f{display:flex;position:absolute;top:0;left:50%;justify-content:center;align-items:center;transform:translate(-50%, -50%);margin:0 auto;border-radius:5rem;background:var(--x-card-legend-bg);padding:.5rem 1rem;color:var(--x-card-legend-fg);white-space:nowrap}.src-Components-Card-components-styles-module__legendText--q65Xw{padding:0 .5rem}.src-Components-Card-components-styles-module__multiItemContainer--CAVDM{display:flex;flex-wrap:wrap;margin-bottom:-0.2rem} :root{--x-max-width: 1680px;--x-radius: 1rem;--x-fg: hsl(0, 0%, 20%);--x-bg: hsl(0, 0%, 97%);--x-html-bg: var(--x-fg);--x-body-fg: var(--x-fg);--x-body-bg: var(--x-bg);--x-gutter: 1rem;--x-app-border-color: var(--x-fg);--x-app-bg: var(--x-bg);--x-footer-fg: var(--x-bg);--x-footer-bg: var(--x-fg);--x-benchmark-ruby-bg: hsla(0, 0%, 0%, 0.05);--x-card-bg: hsla(0, 0%, 20%, 0.03);--x-card-bg-hover: linear-gradient(to right, transparent, hsla(0, 0%, 0%, 0.102), transparent);--x-card-legend-fg: var(--x-bg);--x-card-legend-bg: linear-gradient(hsl(0, 0%, 15%), var(--x-fg));--x-card-legend-arrow-fg: var(--x-card-legend-fg);--x-card-title-fg: var(--x-fg);--x-card-title-bg: var(--x-bg);--x-card-des-fg: var(--x-bg);--x-card-des-bg: var(--x-fg);--x-card-border-color: hsla(0, 0%, 0%, 0.1);--x-card-split-color: hsla(0, 0%, 0%, 0.3);--x-card-box-shadow: hsla(0, 0%, 20%, 0.3) 0px -1px 0px, hsl(0, 0%, 100%) 0px 1px 0px inset, hsla(0, 0%, 20%, 0.3) 0px -1px 0px inset, hsl(0, 0%, 100%) 0px 1px 0px;--x-title-fg: var(--x-bg);--x-title-bg: var(--x-fg);--x-title-box-shadow: 0 1px 0 hsl(0, 0%, 0%);--x-star-me-fg: var(--x-bg);--x-star-me-bg: var(--x-fg);--x-star-me-hover-fg: hsl(0, 0%, 100%);--x-star-me-hover-bg: var(--x-fg);--x-star-me-border-color: linear-gradient(90deg, transparent, hsl(0, 0%, 100%), transparent);--x-nav-fg: var(--x-bg);--x-nav-fg-hover: var(--x-fg);--x-nav-fg-active: var(--x-fg);--x-nav-bg: var(--x-fg);--x-nav-bg-hover: linear-gradient(hsla(0, 0%, 100%, 0.85), hsla(0, 0%, 100%, 0.65));--x-nav-bg-active: linear-gradient(hsla(0, 0%, 100%, 0.95), hsla(0, 0%, 100%, 0.75));--x-nav-border-color: hsla(0, 0%, 100%, 0.1);--x-status-ok-fg: hsl(0, 0%, 100%);--x-status-ok-bg: linear-gradient(hsl(120, 100%, 30%), hsl(120, 100%, 45%));--x-status-error-fg: hsl(0, 0%, 100%);--x-status-error-bg: linear-gradient(hsl(0, 0%, 50%), hsl(0, 0%, 73%));--x-search-fg: var(--x-fg);--x-search-bg: hsla(0, 0%, 0%, 0.05);--x-search-bg-hover: hsla(0, 0%, 0%, 0.15);--x-progress-fg: var(--x-bg);--x-progress-bg: linear-gradient(hsl(0, 0%, 0%), hsl(0, 0%, 20%));--x-progress-value-bg: hsl(120, 100%, 40%);--x-progress-value-highlight-bg: linear-gradient(hsla(0, 0%, 100%, 0.45), transparent);--x-progress-value-highlight-border-color: linear-gradient( to right, hsla(0, 0%, 100%, 0.1), hsla(0, 0%, 100%, 0.45), hsla(0, 0%, 100%, 0.1) );--x-progress-value-box-shadow: 0px 0px 1px 1px hsl(0, 0%, 0%);--x-network-stats-tx-fg: hsl(23, 100%, 38%);--x-network-stats-rx-fg: hsl(120, 100%, 23%);--x-network-node-fg: var(--x-fg);--x-network-node-bg: hsla(132, 4%, 23%, 0.1);--x-network-node-border-color: var(--x-card-split-color);--x-network-node-row-bg: linear-gradient(to right, transparent, hsla(0, 0%, 100%, 0.5), transparent);--x-ping-btn-fg: var(--x-bg);--x-ping-btn-bg: var(--x-fg);--x-ping-result-fg: var(--x-bg);--x-ping-result-bg: var(--x-fg);--x-ping-result-scrollbar-bg: var(--x-fg);--x-sys-load-fg: var(--x-bg);--x-sys-load-bg: var(--x-fg);--x-toast-fg: var(--x-bg);--x-toast-bg: var(--x-fg)}@media(prefers-color-scheme: dark){:root{--x-fg: hsl(0, 0%, 80%);--x-bg: hsl(0, 0%, 0%);--x-html-bg: hsl(0, 0%, 0%);--x-body-fg: var(--x-fg);--x-body-bg: hsl(0, 0%, 0%);--x-gutter: 1rem;--x-app-border-color: var(--x-bg);--x-app-bg: hsl(0, 0%, 13%);--x-footer-fg: var(--x-fg);--x-footer-bg: var(--x-bg);--x-benchmark-ruby-bg: hsl(0, 0%, 0%, 0.5);--x-card-bg: hsla(0, 0%, 100%, 0.05);--x-card-bg-hover: linear-gradient(to right, transparent, hsla(0, 0%, 0%, 0.5), transparent);--x-card-legend-fg: var(--x-fg);--x-card-legend-bg: linear-gradient(hsl(0, 0%, 10%), var(--x-bg));--x-card-legend-arrow-fg: var(--x-card-legend-fg);--x-card-title-fg: var(--x-fg);--x-card-title-bg: var(--x-bg);--x-card-des-fg: var(--x-fg);--x-card-des-bg: hsla(0, 0%, 0%, 0.5);--x-card-border-color: hsla(0, 0%, 0%, 0.5);--x-card-split-color: hsla(0, 0%, 100%, 0.1);--x-card-box-shadow: 0px 0px 0px 1px hsl(0, 0%, 0%) inset;--x-title-fg: var(--x-fg);--x-title-bg: var(--x-bg);--x-title-box-shadow: 0 1px 0 hsl(0, 0%, 0%);--x-star-me-fg: var(--x-fg);--x-star-me-bg: var(--x-bg);--x-star-me-hover-fg: hsl(0, 0%, 100%);--x-star-me-hover-bg: var(--x-bg);--x-star-me-border-color: linear-gradient(90deg, transparent, hsl(0, 0%, 100%), transparent);--x-nav-fg: var(--x-fg);--x-nav-fg-hover: var(--x-fg);--x-nav-fg-active: var(--x-fg);--x-nav-bg: var(--x-bg);--x-nav-bg-hover: linear-gradient(hsla(0, 0%, 100%, 0.15), hsla(0, 0%, 100%, 0.05));--x-nav-bg-active: linear-gradient(hsla(0, 0%, 100%, 0.25), hsla(0, 0%, 100%, 0.15));--x-nav-border-color: hsla(0, 0%, 100%, 0.1);--x-status-ok-fg: hsl(0, 0%, 100%);--x-status-ok-bg: linear-gradient(hsl(120, 100%, 20%), hsl(120, 100%, 25%));--x-status-error-fg: hsl(0, 0%, 100%);--x-status-error-bg: linear-gradient(hsl(0, 0%, 27%), hsl(0, 0%, 33%));--x-search-fg: var(--x-fg);--x-search-bg: hsla(0, 0%, 0%, 0.35);--x-search-bg-hover: hsla(0, 0%, 100%, 0.1);--x-progress-fg: var(--x-fg);--x-progress-bg: linear-gradient(hsl(0, 0%, 0%), hsla(0, 0%, 0%, 0.5));--x-progress-value-bg: hsl(120, 100%, 40%);--x-progress-value-highlight-bg: linear-gradient(hsla(0, 0%, 100%, 0.25), transparent);--x-progress-value-highlight-border-color: linear-gradient( to right, hsla(0, 0%, 100%, 0.1), hsla(0, 0%, 100%, 0.25), hsla(0, 0%, 100%, 0.1) );--x-progress-value-box-shadow: 0px 0px 0px 10px inset hsla(0, 0%, 0%, 0.55), 0px 0px 1px 1px hsl(0, 0%, 0%);--x-network-stats-tx-fg: hsl(23, 100%, 58%);--x-network-stats-rx-fg: hsl(120, 100%, 43%);--x-network-node-fg: var(--x-fg);--x-network-node-bg: hsla(0, 0%, 100%, 0.05);--x-network-node-border-color: var(--x-card-split-color);--x-network-node-row-bg: var(--x-card-bg-hover);--x-ping-btn-fg: var(--x-fg);--x-ping-btn-bg: var(--x-bg);--x-ping-result-fg: var(--x-fg);--x-ping-result-bg: var(--x-bg);--x-ping-result-scrollbar-bg: var(--x-bg);--x-sys-load-fg: var(--x-fg);--x-sys-load-bg: var(--x-bg);--x-toast-fg: var(--x-fg);--x-toast-bg: var(--x-bg)}} .src-Components-Container-components-styles-module__main--rQ91J{margin-left:auto;margin-right:auto;padding-left:calc(var(--x-gutter)/2);padding-right:calc(var(--x-gutter)/2);max-width:var(--x-max-width)}@media(min-width: 768px){.src-Components-Container-components-styles-module__main--rQ91J{padding-left:var(--x-gutter);padding-right:var(--x-gutter)}} .src-Components-Grid-components-styles-module__container--EXgkw{display:flex;flex-wrap:wrap;margin-left:calc(var(--x-gutter)*-0.5);margin-right:calc(var(--x-gutter)*-0.5)}.src-Components-Grid-components-styles-module__grid--qbVV1{padding-left:calc(var(--x-gutter)*.5);padding-right:calc(var(--x-gutter)*.5);flex:1 0 100%;width:100%}@media(min-width: 320px){.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="1"]{flex:0 0 100%;width:100%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="2"]{flex:0 0 50%;width:50%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="3"]{flex:0 0 33.3333333333%;width:33.3333333333%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="4"]{flex:0 0 25%;width:25%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="5"]{flex:0 0 20%;width:20%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="6"]{flex:0 0 16.6666666667%;width:16.6666666667%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="7"]{flex:0 0 14.2857142857%;width:14.2857142857%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="8"]{flex:0 0 12.5%;width:12.5%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xs="9"]{flex:0 0 11.1111111111%;width:11.1111111111%}}@media(min-width: 375px){.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="1"]{flex:0 0 100%;width:100%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="2"]{flex:0 0 50%;width:50%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="3"]{flex:0 0 33.3333333333%;width:33.3333333333%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="4"]{flex:0 0 25%;width:25%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="5"]{flex:0 0 20%;width:20%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="6"]{flex:0 0 16.6666666667%;width:16.6666666667%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="7"]{flex:0 0 14.2857142857%;width:14.2857142857%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="8"]{flex:0 0 12.5%;width:12.5%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-sm="9"]{flex:0 0 11.1111111111%;width:11.1111111111%}}@media(min-width: 425px){.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="1"]{flex:0 0 100%;width:100%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="2"]{flex:0 0 50%;width:50%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="3"]{flex:0 0 33.3333333333%;width:33.3333333333%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="4"]{flex:0 0 25%;width:25%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="5"]{flex:0 0 20%;width:20%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="6"]{flex:0 0 16.6666666667%;width:16.6666666667%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="7"]{flex:0 0 14.2857142857%;width:14.2857142857%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="8"]{flex:0 0 12.5%;width:12.5%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-md="9"]{flex:0 0 11.1111111111%;width:11.1111111111%}}@media(min-width: 768px){.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="1"]{flex:0 0 100%;width:100%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="2"]{flex:0 0 50%;width:50%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="3"]{flex:0 0 33.3333333333%;width:33.3333333333%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="4"]{flex:0 0 25%;width:25%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="5"]{flex:0 0 20%;width:20%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="6"]{flex:0 0 16.6666666667%;width:16.6666666667%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="7"]{flex:0 0 14.2857142857%;width:14.2857142857%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="8"]{flex:0 0 12.5%;width:12.5%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-lg="9"]{flex:0 0 11.1111111111%;width:11.1111111111%}}@media(min-width: 1024px){.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="1"]{flex:0 0 100%;width:100%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="2"]{flex:0 0 50%;width:50%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="3"]{flex:0 0 33.3333333333%;width:33.3333333333%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="4"]{flex:0 0 25%;width:25%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="5"]{flex:0 0 20%;width:20%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="6"]{flex:0 0 16.6666666667%;width:16.6666666667%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="7"]{flex:0 0 14.2857142857%;width:14.2857142857%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="8"]{flex:0 0 12.5%;width:12.5%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xl="9"]{flex:0 0 11.1111111111%;width:11.1111111111%}}@media(min-width: 1440px){.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="1"]{flex:0 0 100%;width:100%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="2"]{flex:0 0 50%;width:50%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="3"]{flex:0 0 33.3333333333%;width:33.3333333333%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="4"]{flex:0 0 25%;width:25%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="5"]{flex:0 0 20%;width:20%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="6"]{flex:0 0 16.6666666667%;width:16.6666666667%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="7"]{flex:0 0 14.2857142857%;width:14.2857142857%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="8"]{flex:0 0 12.5%;width:12.5%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-xxl="9"]{flex:0 0 11.1111111111%;width:11.1111111111%}}@media(min-width: 2560px){.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="1"]{flex:0 0 100%;width:100%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="2"]{flex:0 0 50%;width:50%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="3"]{flex:0 0 33.3333333333%;width:33.3333333333%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="4"]{flex:0 0 25%;width:25%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="5"]{flex:0 0 20%;width:20%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="6"]{flex:0 0 16.6666666667%;width:16.6666666667%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="7"]{flex:0 0 14.2857142857%;width:14.2857142857%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="8"]{flex:0 0 12.5%;width:12.5%}.src-Components-Grid-components-styles-module__grid--qbVV1[data-4k="9"]{flex:0 0 11.1111111111%;width:11.1111111111%}} .src-Components-Utils-components-alert-styles-module__main--fj45p{display:inline-flex;border-radius:var(--x-radius);align-items:center;justify-content:center;font-family:"Arial Black",sans-serif;font-weight:bolder;min-width:2em;padding:0 .5rem;white-space:nowrap;cursor:pointer;text-shadow:0 1px 1px #000}.src-Components-Utils-components-alert-styles-module__main--fj45p:active{transform:scale3d(0.95, 0.95, 1)}.src-Components-Utils-components-alert-styles-module__main--fj45p[data-ok]{background:var(--x-status-ok-bg);color:var(--x-status-ok-fg)}.src-Components-Utils-components-alert-styles-module__main--fj45p[data-error]{background:var(--x-status-error-bg);color:var(--x-status-error-fg)}.src-Components-Utils-components-alert-styles-module__main--fj45p[data-ok][data-icon]::before{content:"✓"}.src-Components-Utils-components-alert-styles-module__main--fj45p[data-error][data-icon]::before{content:"×"} .src-Components-ProgressBar-components-styles-module__main--vmjyU{position:relative}.src-Components-ProgressBar-components-styles-module__overview--bibEt{position:absolute;right:var(--x-gutter);bottom:0;z-index:1;font-weight:700;color:var(--x-progress-fg);line-height:2rem;font-family:"Arial Black",sans-serif,monospace;text-shadow:0 1px 1px #000}.src-Components-ProgressBar-components-styles-module__precent--wnWh2{left:var(--x-gutter);right:auto}.src-Components-ProgressBar-components-styles-module__shell--gG7gJ{position:relative;display:flex;width:100%;height:2rem;background:var(--x-progress-bg);border-radius:var(--x-radius);padding:.3rem}.src-Components-ProgressBar-components-styles-module__value--itYdo{position:relative;transition:width .5s;border-radius:var(--x-gutter);background-color:var(--x-progress-value-bg);overflow:hidden;box-shadow:var(--x-progress-value-box-shadow)}.src-Components-ProgressBar-components-styles-module__value--itYdo::after,.src-Components-ProgressBar-components-styles-module__value--itYdo::before{position:absolute;content:"";top:0;height:61.8%;width:100%;border-radius:0 0 50% 50%;background:var(--x-progress-value-highlight-bg)}.src-Components-ProgressBar-components-styles-module__value--itYdo::before{background:var(--x-progress-value-highlight-border-color);opacity:1;height:1px;border-radius:0} .src-Components-Footer-components-styles-module__main--zdKev{background:var(--x-footer-bg);color:var(--x-footer-fg);width:100%;border-radius:10rem;text-align:center;padding:calc(var(--x-gutter)/2) var(--x-gutter);margin:calc(var(--x-gutter)*1.5) auto;word-break:normal}.src-Components-Footer-components-styles-module__main--zdKev a{color:var(--x-footer-fg)}.src-Components-Footer-components-styles-module__main--zdKev a:hover{color:var(--x-footer-fg)} .src-Components-Forkme-components-styles-module__link--MuvAU{display:flex;justify-content:center;align-items:center;position:fixed;top:0;left:0;background:var(--x-star-me-bg);color:var(--x-star-me-fg);font-family:"Arial Black",sans-serif;padding:calc(var(--x-gutter)/3) calc(var(--x-gutter)*3);box-shadow:0 3px 5px var(--x-star-me-bg);z-index:2;transform:rotate(-45deg) translate3d(-28%, -70%, 0);opacity:.95}@media(min-width: 425px){.src-Components-Forkme-components-styles-module__link--MuvAU{transform:rotate(-45deg) translate3d(-28%, -50%, 0);top:calc(var(--x-gutter)/2);left:calc(var(--x-gutter)/2)}}.src-Components-Forkme-components-styles-module__link--MuvAU:hover{color:var(--x-star-me-hover-fg);background:var(--x-star-me-hover-bg);text-decoration:none;opacity:1}.src-Components-Forkme-components-styles-module__link--MuvAU::after,.src-Components-Forkme-components-styles-module__link--MuvAU::before{position:absolute;left:0;top:1px;height:.5px;width:100%;background:var(--x-star-me-border-color);content:""}.src-Components-Forkme-components-styles-module__link--MuvAU::after{top:auto;bottom:1px}.src-Components-Forkme-components-styles-module__text--Fk_hI{margin-left:.5em;text-transform:uppercase;font-weight:bold} .src-Components-Nav-components-styles-module__main--gMYNN{position:fixed;bottom:0;background:var(--x-nav-bg);padding:0 var(--x-gutter);left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:flex-start;height:3rem;line-height:3rem;overflow-x:auto}@media(min-width: 375px){.src-Components-Nav-components-styles-module__main--gMYNN{overflow-x:unset;justify-content:center}}.src-Components-Nav-components-styles-module__link--kVaBO{position:relative;white-space:nowrap;color:var(--x-nav-fg);padding:0 .5rem;border-right:1px solid var(--x-nav-border-color)}@media(min-width: 425px){.src-Components-Nav-components-styles-module__link--kVaBO{padding:0 var(--x-gutter)}}.src-Components-Nav-components-styles-module__link--kVaBO:hover{background:var(--x-nav-bg-hover);color:var(--x-nav-fg-hover);text-decoration:none}.src-Components-Nav-components-styles-module__link--kVaBO:active,.src-Components-Nav-components-styles-module__link--kVaBO[data-active]{background:var(--x-nav-bg-active);color:var(--x-nav-fg-active);text-decoration:none}.src-Components-Nav-components-styles-module__link--kVaBO:last-child{border-right:0}.src-Components-Nav-components-styles-module__linkTitle--qqTdU{display:none}@media(min-width: 768px){.src-Components-Nav-components-styles-module__linkTitle--qqTdU{display:block}}.src-Components-Nav-components-styles-module__linkTitleTiny--pkoLr{display:block}@media(min-width: 768px){.src-Components-Nav-components-styles-module__linkTitleTiny--pkoLr{display:none}} .src-Components-NetworkStats-components-styles-module__id--eJf_G{text-decoration:underline;text-align:center}.src-Components-NetworkStats-components-styles-module__idRow--ACOSC{align-items:center}.src-Components-NetworkStats-components-styles-module__dataContainer--bPvUe{display:flex;align-items:center;justify-content:center;text-align:center}.src-Components-NetworkStats-components-styles-module__data--Fo38e{flex:0 0 50%}.src-Components-NetworkStats-components-styles-module__data--Fo38e[data-rx]{color:var(--x-network-stats-rx-fg)}.src-Components-NetworkStats-components-styles-module__data--Fo38e[data-tx]{color:var(--x-network-stats-tx-fg)}.src-Components-NetworkStats-components-styles-module__rate--eoXaN{font-family:"Arial Black",sans-serif}.src-Components-NetworkStats-components-styles-module__rate--eoXaN::before{margin-right:.5rem}.src-Components-NetworkStats-components-styles-module__rateRx--IuEZe::before{content:"▼"}.src-Components-NetworkStats-components-styles-module__rateTx--gWEgj::before{content:"▲"} .src-Components-ServerStatus-components-styles-module__loadGroup--WzXPX{display:flex;align-items:center}.src-Components-ServerStatus-components-styles-module__loadGroup--WzXPX[data-center]{justify-content:center}@media(min-width: 768px){.src-Components-ServerStatus-components-styles-module__loadGroup--WzXPX[data-center]{justify-content:center}}.src-Components-ServerStatus-components-styles-module__loadGroupItem--ZSsqk{background:var(--x-sys-load-bg);color:var(--x-sys-load-fg);padding:calc(var(--x-gutter)*.1) calc(var(--x-gutter)/1.5);border-radius:10rem;font-family:"Arial Black",sans-serif,monospace;font-weight:700}@media(min-width: 768px){.src-Components-ServerStatus-components-styles-module__loadGroupItem--ZSsqk{padding:calc(var(--x-gutter)*.1) var(--x-gutter)}}.src-Components-ServerStatus-components-styles-module__loadGroupItem--ZSsqk+.src-Components-ServerStatus-components-styles-module__loadGroupItem--ZSsqk{margin-left:.5rem} .src-Components-Utils-components-loading-styles-module__main--jnV53{display:flex;align-items:center;margin-bottom:var(--x-gutter)}.src-Components-Utils-components-loading-styles-module__text--opKiN{margin-left:.5em} .src-Components-Nodes-components-styles-module__groupId--PmHBP{display:block;text-decoration:underline;text-align:center;margin-bottom:calc(var(--x-gutter)*.5)}.src-Components-Nodes-components-styles-module__groupId--PmHBP:hover{text-decoration:none}.src-Components-Nodes-components-styles-module__group--cvxdK{margin-bottom:calc(var(--x-gutter)*.5)}.src-Components-Nodes-components-styles-module__groupMsg--wNqQl{display:flex;justify-content:center}.src-Components-Nodes-components-styles-module__groupNetworks--h1HMf{border-radius:var(--x-radius);background:var(--x-network-node-bg);color:var(--x-network-node-fg);padding:var(--x-gutter);margin-bottom:var(--x-gutter)}.src-Components-Nodes-components-styles-module__groupNetwork--rvydY{border-bottom:1px dashed var(--x-network-node-border-color);margin-bottom:calc(var(--x-gutter)*.5);padding-bottom:calc(var(--x-gutter)*.5)}.src-Components-Nodes-components-styles-module__groupNetwork--rvydY:last-child{margin-bottom:0;border-bottom:0;padding-bottom:0}.src-Components-Nodes-components-styles-module__groupNetwork--rvydY:hover{background:var(--x-network-node-row-bg)} .src-Components-Utils-components-search-link-styles-module__main--kwUcX{margin:0 calc(var(--x-gutter)*.2) calc(var(--x-gutter)*.2) 0;background:var(--x-search-bg);color:var(--x-search-fg);padding:0 calc(var(--x-gutter)*.5);border-radius:var(--x-radius);font-family:consolas,monospace}.src-Components-Utils-components-search-link-styles-module__main--kwUcX:hover{text-decoration:underline;background:var(--x-search-bg-hover)} .src-Components-Ping-components-style-module__btn--o_4YN{display:block;text-align:center;color:var(--x-ping-btn-fg);background:var(--x-ping-btn-bg);border-radius:var(--x-radius);padding:calc(var(--x-gutter)*.5) var(--x-gutter);margin-right:var(--x-gutter)}.src-Components-Ping-components-style-module__btn--o_4YN:hover,.src-Components-Ping-components-style-module__btn--o_4YN:active{text-decoration:none;color:var(--x-ping-btn-fg);opacity:.9}.src-Components-Ping-components-style-module__btn--o_4YN:active{opacity:1;transform:scale3d(0.95, 0.95, 1)}.src-Components-Ping-components-style-module__itemContainer--GLMRY{display:flex;flex-wrap:wrap;margin:0 0 calc(var(--x-gutter)*.5);padding:0;height:8rem;overflow-y:auto;list-style-type:none}.src-Components-Ping-components-style-module__item--kR0WD{flex:0 0 50%}@media(min-width: 768px){.src-Components-Ping-components-style-module__item--kR0WD{flex:0 0 33.333%}}@media(min-width: 1024px){.src-Components-Ping-components-style-module__item--kR0WD{flex:0 0 25%}}@media(min-width: 1440px){.src-Components-Ping-components-style-module__item--kR0WD{flex:0 0 20%}}.src-Components-Ping-components-style-module__itemNumber--KiUxL{opacity:.5;display:none}@media(min-width: 768px){.src-Components-Ping-components-style-module__itemNumber--KiUxL{display:inline}}.src-Components-Ping-components-style-module__itemLine--OVM7p{opacity:.3;display:none}@media(min-width: 768px){.src-Components-Ping-components-style-module__itemLine--OVM7p{display:inline}}.src-Components-Ping-components-style-module__itemTime--WiXML{font-weight:bold}.src-Components-Ping-components-style-module__resultContainer--xJz3t{background:var(--x-ping-result-bg);color:var(--x-ping-result-fg);border-radius:calc(var(--x-radius)*.5);padding:calc(var(--x-gutter)*.5) var(--x-gutter)}.src-Components-Ping-components-style-module__result--qEqSo{display:flex;align-items:center;flex-wrap:wrap;border-top:1px dashed var(--x-ping-result-fg);padding-top:calc(var(--x-gutter)*.5);justify-content:space-between} .src-Components-ServerBenchmark-components-styles-module__btn--DR6pA{display:block}.src-Components-ServerBenchmark-components-styles-module__aff--U6apK{word-break:normal} .src-Components-Title-components-styles-module__h1--z5lLy{background:var(--x-title-bg);position:fixed;top:0;left:50%;justify-content:center;text-align:center;margin:0;min-width:60vw;width:50vw;font-size:var(--x-gutter);line-height:1;border-radius:0 0 var(--x-radius) var(--x-radius);z-index:10;box-shadow:var(--x-title-box-shadow);transform:translateX(-50%)}.src-Components-Title-components-styles-module__link--_O32A{display:block;padding:var(--x-gutter);color:var(--x-title-fg)}.src-Components-Title-components-styles-module__link--_O32A:hover{color:var(--x-title-fg)} .src-Components-Toast-components-styles-module__main--yKV4Y{position:fixed;bottom:4rem;width:20rem;max-width:80vw;left:50%;transform:translateX(-50%);background:var(--x-toast-bg);color:var(--x-toast-fg);border-radius:var(--x-gutter);padding:calc(var(--x-gutter)*.5) var(--x-gutter);cursor:pointer;word-break:normal;text-align:center;backdrop-filter:blur(5px)} @media(min-width: 1024px){::-webkit-scrollbar-track{background-color:rgba(0,0,0,0)}::-webkit-scrollbar{width:var(--x-gutter);background-color:rgba(0,0,0,0)}::-webkit-scrollbar-thumb{border-radius:var(--x-gutter) 0 0 var(--x-gutter);background-color:#ccc}::-webkit-scrollbar-thumb:hover{background-color:#fff}}*{box-sizing:border-box;word-break:break-all;padding:0;margin:0}html{font-size:75%;background:var(--x-html-bg);scroll-behavior:smooth}body{background:var(--x-body-bg);color:var(--x-body-fg);font-family:"Noto Sans CJK SC","Helvetica Neue",Helvetica,Arial,Verdana,Geneva,sans-serif;padding:var(--x-gutter);margin:0;line-height:1.5}a{cursor:pointer;color:var(--x-fg);text-decoration:none}a:hover,a:active{color:var(--x-fg);text-decoration:underline} .src-Components-Bootstrap-components-styles-module__app--llWF8{padding:calc(var(--x-gutter)*3.5) 0 calc(var(--x-gutter)*2);background:var(--x-app-bg)}.src-Components-Bootstrap-components-styles-module__app--llWF8::before,.src-Components-Bootstrap-components-styles-module__app--llWF8::after{position:fixed;left:0;top:0;right:0;bottom:calc(var(--x-gutter)*2);border:var(--x-gutter) solid var(--x-app-border-color);pointer-events:none;z-index:1;content:""}.src-Components-Bootstrap-components-styles-module__app--llWF8::after{border-radius:calc(var(--x-gutter)*3)} HTML; exit; } } namespace InnStudio\Prober\Components\Timezone; use InnStudio\Prober\Components\Events\EventsApi; final class Timezone { public function __construct() { EventsApi::on('init', function ($action) { if ( ! \ini_get('date.timezone')) { date_default_timezone_set('GMT'); } return $action; }, 1); } } namespace InnStudio\Prober\Components\Script; use InnStudio\Prober\Components\Events\EventsApi; use InnStudio\Prober\Components\Utils\UtilsApi; final class Script { public function __construct() { EventsApi::on('init', function ($action) { if ('script' !== $action) { return $action; } $this->output(); }); } private function output() { UtilsApi::setFileCacheHeader(); header('Content-type: application/javascript'); echo <<<'HTML' !function(){var e={874:function(e,t,n){"use strict";var r=n(935),i={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,a,o,l,s,u,c=!1;t||(t={}),n=t.debug||!1;try{if(o=r(),l=document.createRange(),s=document.getSelection(),(u=document.createElement("span")).textContent=e,u.ariaHidden="true",u.style.all="unset",u.style.position="fixed",u.style.top=0,u.style.clip="rect(0, 0, 0, 0)",u.style.whiteSpace="pre",u.style.webkitUserSelect="text",u.style.MozUserSelect="text",u.style.msUserSelect="text",u.style.userSelect="text",u.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=i[t.format]||i.default;window.clipboardData.setData(a,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(u),l.selectNodeContents(u),s.addRange(l),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");c=!0}catch(r){n&&console.error("unable to copy using execCommand: ",r),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),c=!0}catch(r){n&&console.error("unable to copy using clipboardData: ",r),n&&console.error("falling back to prompt"),a=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(a,e)}}finally{s&&("function"==typeof s.removeRange?s.removeRange(l):s.removeAllRanges()),u&&document.body.removeChild(u),o()}return c}},746:function(e,t,n){"use strict";var r=n(959),i=n(962);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n