@ 2014-03-26T10:58:51Z <?php
class FirePHP {
/**
* Gets singleton instance of FirePHP
*
* @param boolean $AutoCreate
* @return FirePHP
*/
public static function getInstance($AutoCreate=false) {
if($AutoCreate===true && !self::$instance) {
self::init();
}
return self::$instance;
}
/**
* Creates FirePHP object and stores it for singleton access
*
* @return FirePHP
*/
public static function init() {
return self::$instance = new self();
}
/**
* Enable and disable logging to Firebug
*
* @param boolean $Enabled TRUE to enable, FALSE to disable
* @return void
*/
public function setEnabled($Enabled) {
$this->enabled = $Enabled;
}
/**
* Check if logging is enabled
*
* @return boolean TRUE if enabled
*/
public function getEnabled() {
return $this->enabled;
}
/**
* Specify a filter to be used when encoding an object
*
* Filters are used to exclude object members.
*
* @param string $Class The class name of the object
* @param array $Filter An array or members to exclude
* @return void
*/
public function setObjectFilter($Class, $Filter) {
$this->objectFilters[$Class] = $Filter;
}
/**
* Register FirePHP as your error handler
*
* Will throw exceptions for each php error.
*/
public function registerErrorHandler()
{
//NOTE: The following errors will not be caught by this error handler:
// E_ERROR, E_PARSE, E_CORE_ERROR,
// E_CORE_WARNING, E_COMPILE_ERROR,
// E_COMPILE_WARNING, E_STRICT
set_error_handler(array($this,'errorHandler'));
}
/**
* FirePHP's error handler
*
* Throws exception for each php error that will occur.
*
* @param int $errno
* @param string $errstr
* @param string $errfile
* @param int $errline
* @param array $errcontext
*/
public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
{
// Don't throw exception if error reporting is switched off
if (error_reporting() == 0) {
return;
}
// Only throw exceptions for errors we are asking for
if (error_reporting() & $errno) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
}
/**
* Register FirePHP as your exception handler
*/
public function registerExceptionHandler()
{
set_exception_handler(array($this,'exceptionHandler'));
}
/**
* FirePHP's exception handler
*
* Logs all exceptions to your firebug console and then stops the script.
*
* @param Exception $Exception
* @throws Exception
*/
function exceptionHandler($Exception) {
$this->fb($Exception);
}
/**
* Set custom processor url for FirePHP
*
* @param string $URL
*/
public function setProcessorUrl($URL)
{
$this->setHeader('X-FirePHP-ProcessorURL', $URL);
}
/**
* Set custom renderer url for FirePHP
*
* @param string $URL
*/
public function setRendererUrl($URL)
{
$this->setHeader('X-FirePHP-RendererURL', $URL);
}
/**
* Start a group for following messages
*
* @param string $Name
* @return true
* @throws Exception
*/
public function group($Name) {
return $this->fb(null, $Name, FirePHP::GROUP_START);
}
/**
* Ends a group you have started before
*
* @return true
* @throws Exception
*/
public function groupEnd() {
return $this->fb(null, null, FirePHP::GROUP_END);
}
/**
* Log object with label to firebug console
*
* @see FirePHP::LOG
* @param mixes $Object
* @param string $Label
* @return true
* @throws Exception
*/
public function log($Object, $Label=null) {
return $this->fb($Object, $Label, FirePHP::LOG);
}
/**
* Log object with label to firebug console
*
* @see FirePHP::INFO
* @param mixes $Object
* @param string $Label
* @return true
* @throws Exception
*/
public function info($Object, $Label=null) {
return $this->fb($Object, $Label, FirePHP::INFO);
}
/**
* Log object with label to firebug console
*
* @see FirePHP::WARN
* @param mixes $Object
* @param string $Label
* @return true
* @throws Exception
*/
public function warn($Object, $Label=null) {
return $this->fb($Object, $Label, FirePHP::WARN);
}
/**
* Log object with label to firebug console
*
* @see FirePHP::ERROR
* @param mixes $Object
* @param string $Label
* @return true
* @throws Exception
*/
public function error($Object, $Label=null) {
return $this->fb($Object, $Label, FirePHP::ERROR);
}
/**
* Dumps key and variable to firebug server panel
*
* @see FirePHP::DUMP
* @param string $Key
* @param mixed $Variable
* @return true
* @throws Exception
*/
public function dump($Key, $Variable) {
return $this->fb($Variable, $Key, FirePHP::DUMP);
}
/**
* Log a trace in the firebug console
*
* @see FirePHP::TRACE
* @param string $Label
* @return true
* @throws Exception
*/
public function trace($Label) {
return $this->fb($Label, FirePHP::TRACE);
}
public function table($Label, $Table) {
return $this->fb($Table, $Label, FirePHP::TABLE);
}
public function detectClientExtension() {
/* Check if FirePHP is installed on client */
if(!@preg_match_all('/\sFirePHP\/([\.|\d]*)\s?/si',$this->getUserAgent(),$m) ||
!version_compare($m[1][0],'0.0.6','>=')) {
return false;
}
return true;
}
public function fb($Object) {
if(!$this->enabled) {
return false;
}
if (headers_sent($filename, $linenum)) {
throw $this->newException('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
}
$Type = null;
$Label = null;
if(func_num_args()==1) {
} else
if(func_num_args()==2) {
switch(func_get_arg(1)) {
case self::LOG:
case self::INFO:
case self::WARN:
case self::ERROR:
case self::DUMP:
case self::TRACE:
case self::EXCEPTION:
case self::TABLE:
case self::GROUP_START:
case self::GROUP_END:
$Type = func_get_arg(1);
break;
default:
$Label = func_get_arg(1);
break;
}
} else
if(func_num_args()==3) {
$Type = func_get_arg(2);
$Label = func_get_arg(1);
} else {
throw $this->newException('Wrong number of arguments to fb() function!');
}
if(!$this->detectClientExtension()) {
return false;
}
$meta = array();
$skipFinalObjectEncode = false;
if($Object instanceof Exception) {
$meta['file'] = $this->_escapeTraceFile($Object->getFile());
$meta['line'] = $Object->getLine();
$trace = $Object->getTrace();
if($Object instanceof ErrorException
&& isset($trace[0]['function'])
&& $trace[0]['function']=='errorHandler'
&& isset($trace[0]['class'])
&& $trace[0]['class']=='FirePHP') {
$severity = false;
switch($Object->getSeverity()) {
case E_WARNING: $severity = 'E_WARNING'; break;
case E_NOTICE: $severity = 'E_NOTICE'; break;
case E_USER_ERROR: $severity = 'E_USER_ERROR'; break;
case E_USER_WARNING: $severity = 'E_USER_WARNING'; break;
case E_USER_NOTICE: $severity = 'E_USER_NOTICE'; break;
case E_STRICT: $severity = 'E_STRICT'; break;
case E_RECOVERABLE_ERROR: $severity = 'E_RECOVERABLE_ERROR'; break;
case E_DEPRECATED: $severity = 'E_DEPRECATED'; break;
case E_USER_DEPRECATED: $severity = 'E_USER_DEPRECATED'; break;
}
$Object = array('Class'=>get_class($Object),
'Message'=>$severity.': '.$Object->getMessage(),
'File'=>$this->_escapeTraceFile($Object->getFile()),
'Line'=>$Object->getLine(),
'Type'=>'trigger',
'Trace'=>$this->_escapeTrace(array_splice($trace,2)));
$skipFinalObjectEncode = true;
} else {
$Object = array('Class'=>get_class($Object),
'Message'=>$Object->getMessage(),
'File'=>$this->_escapeTraceFile($Object->getFile()),
'Line'=>$Object->getLine(),
'Type'=>'throw',
'Trace'=>$this->_escapeTrace($trace));
$skipFinalObjectEncode = true;
}
$Type = self::EXCEPTION;
} else
if($Type==self::TRACE) {
$trace = debug_backtrace();
if(!$trace) return false;
for( $i=0 ; $i<sizeof($trace) ; $i++ ) {
if(isset($trace[$i]['class'])
&& isset($trace[$i]['file'])
&& ($trace[$i]['class']=='FirePHP'
|| $trace[$i]['class']=='FB')
&& (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
|| substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
/* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
} else
if(isset($trace[$i]['class'])
&& isset($trace[$i+1]['file'])
&& $trace[$i]['class']=='FirePHP'
&& substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
/* Skip fb() */
} else
if($trace[$i]['function']=='fb'
|| $trace[$i]['function']=='trace'
|| $trace[$i]['function']=='send') {
$Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'',
'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'',
'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'',
'Message'=>$trace[$i]['args'][0],
'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'',
'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'',
'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'',
'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1)));
$skipFinalObjectEncode = true;
$meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
$meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
break;
}
}
} else
if($Type==self::TABLE) {
if(isset($Object[0]) && is_string($Object[0])) {
$Object[1] = $this->encodeTable($Object[1]);
} else {
$Object = $this->encodeTable($Object);
}
$skipFinalObjectEncode = true;
} else {
if($Type===null) {
$Type = self::LOG;
}
}
if($this->options['includeLineNumbers']) {
if(!isset($meta['file']) || !isset($meta['line'])) {
$trace = debug_backtrace();
for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) {
if(isset($trace[$i]['class'])
&& isset($trace[$i]['file'])
&& ($trace[$i]['class']=='FirePHP'
|| $trace[$i]['class']=='FB')
&& (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
|| substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
/* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
} else
if(isset($trace[$i]['class'])
&& isset($trace[$i+1]['file'])
&& $trace[$i]['class']=='FirePHP'
&& substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
/* Skip fb() */
} else
if(isset($trace[$i]['file'])
&& substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') {
/* Skip FB::fb() */
} else {
$meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
$meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
break;
}
}
}
} else {
unset($meta['file']);
unset($meta['line']);
}
$this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
$this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.self::VERSION);
$structure_index = 1;
if($Type==self::DUMP) {
$structure_index = 2;
$this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
} else {
$this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
}
if($Type==self::DUMP) {
$msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}';
} else {
$msg_meta = array('Type'=>$Type);
if($Label!==null) {
$msg_meta['Label'] = $Label;
}
if(isset($meta['file'])) {
$msg_meta['File'] = $meta['file'];
}
if(isset($meta['line'])) {
$msg_meta['Line'] = $meta['line'];
}
$msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']';
}
$parts = explode("\n",chunk_split($msg, 5000, "\n"));
for( $i=0 ; $i<count($parts) ; $i++) {
$part = $parts[$i];
if ($part) {
if(count($parts)>2) {
// Message needs to be split into multiple parts
$this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
(($i==0)?strlen($msg):'')
. '|' . $part . '|'
. (($i<count($parts)-2)?'\\':''));
} else {
$this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
strlen($part) . '|' . $part . '|');
}
$this->messageIndex++;
if ($this->messageIndex > 99999) {
throw new Exception('Maximum number (99,999) of messages reached!');
}
}
}
$this->setHeader('X-Wf-1-Index',$this->messageIndex-1);
return true;
}
protected function _standardizePath($Path) {
}
protected function _escapeTrace($Trace) {
if(!$Trace) return $Trace;
for( $i=0 ; $i<sizeof($Trace) ; $i++ ) {
if(isset($Trace[$i]['file'])) {
$Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']);
}
if(isset($Trace[$i]['args'])) {
$Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']);
}
}
return $Trace;
}
protected function _escapeTraceFile($File) {
/* Check if we have a windows filepath */
if(strpos($File,'\\')) {
/* First strip down to single \ */
$file = preg_replace('/\\\\+/','\\',$File);
return $file;
}
return $File;
}
protected function setHeader($Name, $Value) {
return header($Name.': '.$Value);
}
protected function getUserAgent() {
if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
return $_SERVER['HTTP_USER_AGENT'];
}
}
function ciao()
{
$out = '<pre>';
$args = func_get_args();
if(!empty($args))
{
// var_export() causes fatal errors on recursion...
ob_start();
ini_set('xdebug.var_display_max_depth', 4);
var_dump($args);
$out .= ob_get_contents()."\n\n";
ob_end_clean();
}
$out .= get_backtrace(1);
die($out);
}
class A {
function B()
{
while (ob_get_level() > 1)
ob_end_flush();
// store possible trailing content
$content = ob_get_clean();
// start an output buffer which cannot be flushed (3rd parameter is false)
// callback function get all output and corrects Content-Length header
ob_start(function($buffer) {
ciao($buffer);
}, 0, false);
}
}
$a = new A;
$a->B();
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 8.3.6 0.020 0.000 18.43 8.3.5 0.012 0.005 21.89 8.3.4 0.010 0.007 18.82 8.3.3 0.008 0.008 19.04 8.3.2 0.005 0.003 20.45 8.3.1 0.005 0.003 21.92 8.3.0 0.004 0.004 22.40 8.2.18 0.007 0.014 16.88 8.2.17 0.007 0.007 22.96 8.2.16 0.010 0.007 19.32 8.2.15 0.003 0.006 24.18 8.2.14 0.004 0.004 24.66 8.2.13 0.019 0.000 26.16 8.2.12 0.013 0.000 17.63 8.2.11 0.006 0.006 22.30 8.2.10 0.003 0.009 19.76 8.2.9 0.005 0.003 19.42 8.2.8 0.003 0.006 18.05 8.2.7 0.004 0.004 17.88 8.2.6 0.007 0.003 18.18 8.2.5 0.004 0.004 18.07 8.2.4 0.006 0.003 18.41 8.2.3 0.000 0.008 18.29 8.2.2 0.004 0.004 17.95 8.2.1 0.004 0.004 17.95 8.2.0 0.000 0.008 17.91 8.1.28 0.009 0.012 25.92 8.1.27 0.005 0.003 22.45 8.1.26 0.008 0.000 26.35 8.1.25 0.005 0.003 28.09 8.1.24 0.009 0.000 23.96 8.1.23 0.007 0.004 19.40 8.1.22 0.006 0.003 17.91 8.1.21 0.000 0.008 18.77 8.1.20 0.007 0.003 17.35 8.1.19 0.000 0.008 17.66 8.1.18 0.006 0.003 18.80 8.1.17 0.009 0.000 18.89 8.1.16 0.003 0.005 22.24 8.1.15 0.004 0.004 18.93 8.1.14 0.009 0.003 17.71 8.1.13 0.006 0.003 18.06 8.1.12 0.004 0.004 17.63 8.1.11 0.008 0.000 17.68 8.1.10 0.005 0.003 17.54 8.1.9 0.003 0.005 17.61 8.1.8 0.008 0.000 17.64 8.1.7 0.004 0.004 17.58 8.1.6 0.000 0.009 17.81 8.1.5 0.000 0.009 17.80 8.1.4 0.008 0.000 17.64 8.1.3 0.008 0.000 17.87 8.1.2 0.006 0.003 17.89 8.1.1 0.004 0.004 17.71 8.1.0 0.000 0.009 17.59 8.0.30 0.007 0.000 18.77 8.0.29 0.000 0.008 17.43 8.0.28 0.004 0.004 18.59 8.0.27 0.004 0.004 17.44 8.0.26 0.008 0.000 17.10 8.0.25 0.005 0.002 17.27 8.0.24 0.006 0.003 17.13 8.0.23 0.000 0.007 17.24 8.0.22 0.008 0.000 17.20 8.0.21 0.000 0.007 17.18 8.0.20 0.004 0.004 17.21 8.0.19 0.004 0.004 17.13 8.0.18 0.000 0.011 17.16 8.0.17 0.004 0.004 17.20 8.0.16 0.000 0.009 17.10 8.0.15 0.007 0.000 17.09 8.0.14 0.003 0.006 17.16 8.0.13 0.005 0.002 13.57 8.0.12 0.005 0.005 17.07 8.0.11 0.004 0.004 17.15 8.0.10 0.005 0.003 17.21 8.0.9 0.000 0.007 17.16 8.0.8 0.003 0.013 17.12 8.0.7 0.000 0.008 17.25 8.0.6 0.008 0.000 17.07 8.0.5 0.000 0.008 17.05 8.0.3 0.012 0.008 17.37 8.0.2 0.012 0.007 17.40 8.0.1 0.003 0.005 17.21 8.0.0 0.009 0.011 17.07 7.4.33 0.003 0.003 15.00 7.4.32 0.000 0.007 16.75 7.4.30 0.003 0.003 16.68 7.4.29 0.000 0.007 16.72 7.4.28 0.003 0.005 16.74 7.4.27 0.000 0.007 16.83 7.4.26 0.006 0.003 16.86 7.4.25 0.004 0.004 16.65 7.4.24 0.001 0.007 16.82 7.4.23 0.000 0.007 16.93 7.4.22 0.009 0.009 16.75 7.4.21 0.009 0.006 16.75 7.4.20 0.004 0.004 16.64 7.4.19 0.007 0.000 16.64 7.4.16 0.013 0.010 16.87 7.4.15 0.010 0.010 17.40 7.4.14 0.010 0.010 17.86 7.4.13 0.014 0.005 16.78 7.4.12 0.015 0.006 16.88 7.4.11 0.010 0.010 16.69 7.4.10 0.011 0.007 16.73 7.4.9 0.009 0.009 16.83 7.4.8 0.011 0.008 19.39 7.4.7 0.009 0.009 16.71 7.4.6 0.007 0.011 16.80 7.4.5 0.003 0.006 16.63 7.4.4 0.007 0.011 22.77 7.4.3 0.010 0.007 16.81 7.4.0 0.003 0.014 15.03 7.3.33 0.000 0.007 13.49 7.3.32 0.000 0.006 13.45 7.3.31 0.007 0.000 16.64 7.3.30 0.005 0.002 16.65 7.3.29 0.000 0.015 16.50 7.3.28 0.010 0.009 16.57 7.3.27 0.010 0.007 17.40 7.3.26 0.017 0.000 16.86 7.3.25 0.013 0.004 16.83 7.3.24 0.009 0.009 16.77 7.3.23 0.018 0.000 16.66 7.3.21 0.011 0.007 16.71 7.3.20 0.011 0.011 19.39 7.3.19 0.007 0.013 16.80 7.3.18 0.009 0.009 16.61 7.3.17 0.010 0.007 16.66 7.3.16 0.010 0.010 16.67 7.3.12 0.009 0.009 15.05 7.2.33 0.006 0.012 16.60 7.2.32 0.015 0.003 16.96 7.2.31 0.014 0.005 17.00 7.2.30 0.014 0.018 17.07 7.2.29 0.009 0.009 16.81 7.2.6 0.006 0.009 16.63 7.1.20 0.006 0.006 15.75 7.1.7 0.000 0.008 17.04 7.1.6 0.016 0.009 19.82 7.1.5 0.017 0.007 16.99 7.1.0 0.003 0.093 22.48 7.0.20 0.000 0.009 16.75 7.0.14 0.010 0.070 22.01 7.0.10 0.017 0.070 20.40 7.0.9 0.000 0.087 20.17 7.0.8 0.010 0.077 20.13 7.0.7 0.013 0.033 20.16 7.0.6 0.003 0.083 20.16 7.0.5 0.007 0.080 20.59 7.0.4 0.003 0.087 20.07 7.0.3 0.010 0.063 20.15 7.0.2 0.013 0.077 20.11 7.0.1 0.003 0.050 20.13 7.0.0 0.010 0.050 20.06 5.6.25 0.000 0.043 20.74 5.6.24 0.010 0.067 20.76 5.6.23 0.007 0.080 20.75 5.6.22 0.003 0.043 20.86 5.6.21 0.017 0.077 20.86 5.6.20 0.003 0.077 21.18 5.6.19 0.003 0.080 21.23 5.6.18 0.003 0.057 21.15 5.6.17 0.007 0.080 21.09 5.6.16 0.010 0.080 21.14 5.6.15 0.003 0.067 21.21 5.6.14 0.003 0.087 21.13 5.6.13 0.003 0.093 21.29 5.6.12 0.003 0.083 21.16 5.6.11 0.013 0.037 21.10 5.6.10 0.013 0.067 21.19 5.6.9 0.010 0.077 21.18 5.6.8 0.003 0.073 20.48 5.6.7 0.007 0.070 20.55 5.6.6 0.010 0.043 20.54 5.6.5 0.000 0.070 20.53 5.6.4 0.007 0.077 20.48 5.6.3 0.000 0.040 20.54 5.6.2 0.007 0.070 20.43 5.6.1 0.013 0.080 20.58 5.6.0 0.007 0.070 20.51 5.5.38 0.017 0.073 20.48 5.5.37 0.010 0.047 20.62 5.5.36 0.010 0.070 20.50 5.5.35 0.003 0.043 20.57 5.5.34 0.010 0.077 20.92 5.5.33 0.000 0.057 20.91 5.5.32 0.007 0.043 20.89 5.5.31 0.013 0.077 20.95 5.5.30 0.007 0.077 20.86 5.5.29 0.017 0.067 20.98 5.5.28 0.010 0.047 21.02 5.5.27 0.007 0.073 20.90 5.5.26 0.013 0.067 20.97 5.5.25 0.003 0.053 20.79 5.5.24 0.010 0.073 20.41 5.5.23 0.007 0.067 20.33 5.5.22 0.000 0.053 20.36 5.5.21 0.007 0.080 20.38 5.5.20 0.010 0.033 20.24 5.5.19 0.013 0.067 20.28 5.5.18 0.010 0.080 20.34 5.5.16 0.010 0.037 20.34 5.5.15 0.007 0.067 20.23 5.5.14 0.007 0.053 20.29 5.5.13 0.010 0.070 20.19 5.5.12 0.017 0.067 20.33 5.5.11 0.020 0.067 20.29 5.5.10 0.010 0.070 20.25 5.5.9 0.010 0.073 20.27 5.5.8 0.003 0.083 20.27 5.5.7 0.013 0.040 20.13 5.5.6 0.007 0.080 20.21 5.5.5 0.010 0.033 20.16 5.5.4 0.017 0.050 20.15 5.5.3 0.007 0.063 20.11 5.5.2 0.007 0.073 20.25 5.5.1 0.010 0.083 20.15 5.5.0 0.003 0.050 20.07 5.4.45 0.007 0.077 19.43 5.4.44 0.013 0.047 19.56 5.4.43 0.007 0.080 19.56 5.4.42 0.010 0.080 19.46 5.4.41 0.007 0.073 19.36 5.4.40 0.007 0.083 19.17 5.4.39 0.003 0.050 19.09 5.4.38 0.010 0.077 19.00 5.4.37 0.013 0.073 18.94 5.4.36 0.010 0.033 18.95 5.4.35 0.007 0.077 18.90 5.4.34 0.010 0.073 18.91 5.4.32 0.013 0.070 19.23 5.4.31 0.007 0.080 19.00 5.4.30 0.003 0.077 19.14 5.4.29 0.017 0.043 19.14 5.4.28 0.010 0.077 19.16 5.4.27 0.007 0.080 19.14 5.4.26 0.000 0.083 19.23 5.4.25 0.003 0.080 19.23 5.4.24 0.000 0.087 19.06 5.4.23 0.003 0.073 18.94 5.4.22 0.007 0.043 19.06 5.4.21 0.003 0.047 19.12 5.4.20 0.013 0.070 19.00 5.4.19 0.010 0.063 18.99 5.4.18 0.007 0.073 19.05 5.4.17 0.007 0.067 19.14 5.4.16 0.023 0.060 18.92 5.4.15 0.013 0.063 19.15 5.4.14 0.007 0.063 16.30 5.4.13 0.003 0.043 16.52 5.4.12 0.010 0.060 16.51 5.4.11 0.003 0.057 16.54 5.4.10 0.007 0.040 16.48 5.4.9 0.007 0.077 16.60 5.4.8 0.010 0.070 16.55 5.4.7 0.003 0.043 16.41 5.4.6 0.010 0.067 16.52 5.4.5 0.010 0.063 16.35 5.4.4 0.013 0.060 16.54 5.4.3 0.007 0.070 16.45 5.4.2 0.007 0.063 16.54 5.4.1 0.007 0.070 16.51 5.4.0 0.000 0.060 15.96 5.3.29 0.007 0.073 14.88 5.3.28 0.007 0.043 14.84 5.3.27 0.000 0.077 14.90 5.3.26 0.003 0.067 14.79 5.3.25 0.007 0.073 14.73 5.3.24 0.000 0.077 14.93 5.3.23 0.000 0.077 14.90 5.3.22 0.003 0.077 14.71 5.3.21 0.003 0.073 14.89 5.3.20 0.017 0.067 14.88 5.3.19 0.007 0.050 14.88 5.3.18 0.010 0.070 14.77 5.3.17 0.013 0.057 14.69 5.3.16 0.007 0.040 14.73 5.3.15 0.007 0.067 14.87 5.3.14 0.007 0.073 14.72 5.3.13 0.013 0.067 14.72 5.3.12 0.000 0.083 14.79 5.3.11 0.003 0.050 14.77 5.3.10 0.007 0.077 14.37 5.3.9 0.000 0.047 14.20 5.3.8 0.010 0.070 14.10 5.3.7 0.003 0.043 14.20 5.3.6 0.007 0.040 14.33 5.3.5 0.007 0.040 14.12 5.3.4 0.003 0.077 14.14 5.3.3 0.010 0.060 14.19 5.3.2 0.007 0.043 13.86 5.3.1 0.003 0.063 13.74 5.3.0 0.010 0.050 13.72
preferences:dark mode live preview
50.12 ms | 401 KiB | 5 Q