@ 2015-03-09T16:09:42Z <?php
/* Projekt 1 - 09: XML Query v PHP 5 pro IPP 2014/2015
** Jmeno a prijemni: Tomas Hynek (c) 2015
** Login: xhynek09
*/
//###################################################################################
//############################# HELP - NAPOVEDA #####################################
function help(){
echo "################################################################\n",
"############### Projekt 1 - XQR v PHP 5.3.3 ####################\n",
"############### Autor: Tomas Hynek (c) 2015 ####################\n",
"############### Login: xhynek09 ####################\n",
"############### Napoveda ke skriptu ####################\n",
"## --help vypise na standardni vystup napovedu skriptu.\n\n",
"## --input=filename\n\tzadany vstupni soubor muze byt zadan relativni cestou nebo absolutni cestou;v pripade, ze by\n\tnazev ci cesta obsahovala mezeru, tak musi byt uvedena cela cesta i se jmenem souboru v uvozovkach\n\t(znak uvozovek a rovnitka ve jmene soubory neni treba uvazovat); chybi-li tento parametr, tak je\n\tuvazovnan standardni vstup.\n\n",
"## --output=filename\n\tzadany vystupni soubor muze byt zadan relativni cestou nebo absolutni cestou; v pripade, ze by nazev\n\tci cesta obsahovala mezeru, tak musi byt uvedena cesta i se jmenem souboru v uvozovkach (znak uvozovek\n\ta rovnitka ve jmene soubory neni treba uvazovat); chybi-li tento parametr, tak je vystup presmerovan\n\tna standardni vystup; existuje-li jiz vystupni soubor, bude bez varovani prepsan, jinak bude vytvoren\n\tnovy soubor.\n\n",
"## --query='dotaz'\n\tzadany dotaz v dotazovacim jazyce definovanem nize (v pripade zadani timto zpusobem nebude dotaz\n\tobsahovat symbol apostrof).\n\n",
"## --qf=filename\n\tdotaz v dotazovacim jazyce definovanem nize zadany v externim textovem souboru (nelze kombinovat s --query).\n\n",
"## -n\tnegenerovat XML hlavicku na vystup skriptu.\n\n",
"## --root=element\n\tjmeno paroveho korenoveho elementu obalujici vysledky. Pokud nebude zadan, tak se vysledky neobaluji\n\tkorenovym elementem, ac to porusuje validitu XML.\n\n";
}
//###################################################################################
//############### SEPARATE QUERY - VYHODNOCENI VYRAZU SELECT ########################
function separate_query($query)
{
global $select;
global $limit;
global $from;
global $elem_or_atr;
global $operator;
global $literal;
global $matches_out;
global $type_liter;
global $condition;
global $from_all;
$regex = "/^(SELECT\s[a-z]+)".
"(\sLIMIT\s[0-9])*".
"(\sFROM\sROOT|\sFROM\s[a-z]+\x2E[a-z]+|\sFROM\s\x2E[a-z]+|\sFROM\s[a-z]+)".
"($|\sWHERE(\sNOT)?\s([a-z]+\x2E[a-z]+|\x2E[a-z]+|[a-z]+)\s".
"((CONTAINS|\x3D|\x3C|\x3E)\s(\x22\w+\x22)|(\x3D|\x3C|\x3E)\s([0-9]+)))\z/";
if (!preg_match_all($regex, $query, $matches_out)) // funkce pracuje s RV a naplni dotaz do pole dle pravidel
{
file_put_contents('php://stderr', "Error - bad grammar of query\n");
exit(80);
}
// $count_q = count($matches_out);
// for ($l=0; $l < $count_q; $l++)
// {
// print_r($matches_out[$l]);
// }
if (($matches_out[1][0]) !='') //SELECT element
{
$arr = explode("SELECT ", $matches_out[1][0]); // rozparsrovani na SELECT | element
$select = $arr[1]; // vyjmuti element do $select
echo ("select:".$select."\n");
}
if (($matches_out[2][0]) !='') //LIMIT number
{
$arr = explode(" LIMIT ", $matches_out[2][0]); // rozparsrovani na SELECT | element
$limit = $arr[1]; // vyjmuti element do $select
echo ($limit."\n");
}
if (($matches_out[3][0]) !='') //FROM <FROM-ELM>
{
$arr = explode(" FROM ", $matches_out[3][0]); // rozparsrovani na SELECT | element
$from = $arr[1]; // vyjmuti element do $select
echo ("from:".$from."\n");
if ($from == 'ROOT')
{$from_all = 1;}
}
if (($matches_out[4][0]) !='') //WHERE exists?
{
$condition = 1; // YES
}
if (($matches_out[5][0]) !='') //NOT
{
$arr = explode(" ", $matches_out[5][0]); // rozparsrovani na SELECT | element
$not = $arr[1];
echo ($not."\n");
}
if (($matches_out[6][0]) !='') //<ELEMENT-OR-ATTRIBUTE>
{
$elem_or_atr = $matches_out[6][0]; // ulozeni do promenne
echo ($elem_or_atr."\n");
}
if (($matches_out[8][0]) !='') //<RELATION-OPERATOR> |<|>|=|CONTAINS| pro STRING
{
$opr = $matches_out[10][0]; // ulozeni relation operatoru
if ($opr == '='){$operator=1;}
else if($opr == '>'){$operator=2;}
else {$operator=3;}
echo ($operator."\n");
}
if (($matches_out[9][0]) !='') //<LITERAL> STRING
{
$literal = $matches_out[9][0]; // ulozeni literalu - string
$type_liter = 1;
echo ($type_liter."\n");
}
if (($matches_out[10][0]) !='') //<RELATION-OPERATOR> |<|>|=| pro NUM
{
$opr = $matches_out[10][0]; // ulozeni relation operatoru
if ($opr == '='){$operator=1;}
else if($opr == '>'){$operator=2;}
else {$operator=3;}
echo ($operator."\n");
}
if (($matches_out[11][0]) !='') //<LITERAL> NUM
{
$literal = $matches_out[11][0]; // ulozeni literalu - num
$type_liter = 2;
echo ($type_liter."\n");
}
return;
}
//###################################################################################
//##################### PROHLEDAVANI a ZPRACOVANI WHERE #############################
function searchWhere($key, $array, $simple_obj)
{
if (array_key_exists($key, $array))
{
foreach ($array as $index => $subarray)
{
if ($index == $key)
{
if (is_object($subarray))
{
echo $index." je to object\n";
//$simple_obj = new SimpleXMLElement("<{$index}>{$key}</{$index}>");
$simple_obj->addChild($key, $subarray);
print_r($simple_obj);
}
echo("item find: {$index}=>{$key}\n");
}
}
return;
}
else
{
foreach ($array as $index => $subarray)
{
echo("RE-SEACHING {$index} FOR : {$key}\n");
return search($subarray, $key, $simple_obj);
}
}
return;
}
//###################################################################################
//#################### PROHLEDAVANI a ZPRACOVANI SELECT #############################
function search($array, $key, $simple_out)
{
global $select, $rt, $root_elem, $from;
if (!is_object($simple_out) && ($rt == 1))
{
$simple_out = new SimpleXMLElement("<{$root_elem}></{$root_elem}>");
}
if (array_key_exists($key, $array))
{
foreach ($array as $index => $subarray)
{
if ($index == $key )
{
if (is_object($subarray))
{
echo $index." je to object\n";
print_r($simple_out);
}
if ($rt != 1)
{
$simple_out = new SimpleXMLElement("<{$index}></{$index}>");
echo("item find: {$index}=>{$key}\n");
searchWhere($select, $subarray, $simple_out);
}
else
{ echo("item find: {$index}=>{$key}\n");
$elem = $simple_out->addChild($index);
searchWhere($select, $subarray, $elem);
}
}
return $simple_out;
}
}
else
{
foreach ($array as $index => $subarray)
{
echo("RE-SEACHING {$index} FOR : {$key}\n");
return search($subarray, $key, $simple_out);
}
}
return;
}
//###################################################################################
//################# PROHLEDAVANI a ZPRACOVANI PRI FROM ROOT #########################
function searchRoot($array, $key, $simple_out)
{
global $rt, $root_elem;
if (!is_object($simple_out) && ($rt == 1))
{
$simple_out = new SimpleXMLElement("<{$root_elem}></{$root_elem}>");
}
echo "zpracovavam ROOT\n";
if (array_key_exists($key, $array))
{
foreach ($array as $index => $subarray)
{
if ($index == $key )
{
if ($rt == 1) // pokud --root=element
{
$elem = $simple_out->addChild($index);
}
else // pokud neni zadan --root=
{
if (!is_object($simple_out)) // tady jeste nevim jeslti to je dobre, jestli vytvorit book jednou nebo dvakrat??
{ // viz sekvence prikazu php -d open_basedir="" xqr.php --input=xml02.in --qf=query02.qu
$simple_out = new SimpleXMLElement("<{$index}></{$index}>");
$elem = $simple_out;
}
}
foreach ($subarray as $child => $data)
{ echo("vypisek: {$child}=>{$data}\n");
$elem->addChild($child, $data);
}
}
}
return $simple_out;
}
else
{
foreach ($array as $index => $subarray)
{
echo("RE-SEACHING {$index} FOR : {$key}\n");
return searchRoot($subarray, $key, $simple_out);
}
}
return;
}
//###################################################################################
//########################## HLAVNI PROGRAM SKRIPTU #################################
//###################################################################################
$in = 0; // indikace parametru --input
$out = 0; // indikace parametru --output
$qr = 0; // indikace parametru --query
$qf = 0; // indikace parametru --qf
$rt = 0; // indikace parametru --root
$n = 0; // indikace parametru -n
$root=0; // 0-nic, 1-ROOT... jmeno paroveho korenoveho elementu obalujici vysledky
$type_liter=0; // 0-nic, 1-string, 2-num
$condition=0; // 0-bez podminky, 1-s podminkou
$xml_arr = 0; //
global $from, $from_all;
// $operator = 0; // 0-nic, 1-equal, 2-more, 3-less
//$input; // v stupni soubor
//$output; // vystupni soubor
//$query; // zadany dotaz v dotaz. jazyce
//$qfile; // zadany dotaz v externim textovem souboru
//$root_elem; // ulozen obalujici root
//$xml_arr_out;
//########################### ZPRACOVANI ARGUMENTU ##################################
for ($i = 0; $i < $argc; $i++)
{
if ($i > 0) // pokud prochazime druhy argument a vyse.....
{
if ((strpos($argv[$i], '--help')) !== false) // ---help
{
$help = explode("--help", $argv[$i]);
if (($argc > 2) || ($help[1] != "") || ($help[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
help(); // konec skriptu bez chyby
exit(0);
}
else if ((strpos($argv[$i], '--input=')) !== false) // --input
{
$input = explode("--input=", $argv[$i]);
if (($input[1] == "") || ($input[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
if (file_exists("$input[1]"))
{
fclose(STDIN);
$xml_arr = simplexml_load_file("$input[1]");
//echo "ZDE JE ROOT ELEMENT: ".$xml_arr->getName()."\n";
if($xml_arr === FALSE)
{
file_put_contents('php://stderr', "Error - file isnt exist\n");
exit(2);
}
//print_r($xml);
}
else
{
file_put_contents('php://stderr', "Error - file isnt exist\n");
exit(2);
}
$in += 1;
}
else if ((strpos($argv[$i], '--output=')) !== false) // --output
{
$output = explode("--output=", $argv[$i]);
if (($output[1] == "") || ($output[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
fclose(STDOUT);
$fopen_out = fopen($output[1], 'wb');
$out += 1;
}
else if ((strpos($argv[$i], '--query=')) !== false) // --query
{
$query = explode("--query=", $argv[$i]);
if (($query[1] == "") || ($query[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
separate_query($query[1]);
$qr += 1;
}
else if ((strpos($argv[$i], '--qf=')) !== false) // --qf
{
$qfile = explode("--qf=", $argv[$i]);
if (($qfile[1] == "") || ($qfile[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
if (!(is_readable($qfile[1])))
{
file_put_contents('php://stderr', "Error - file isnt exist\n");
exit(2); // spatny format parametru nebo zakazana kombinace parametru
}
$query_string = file_get_contents($qfile[1]);
var_dump($query_string);
separate_query($query_string);
$qf += 1;
}
else if ((strpos($argv[$i], '--root=')) !== false) // --root
{
$root = explode("--root=", $argv[$i]);
if (($root[1] == "") || ($root[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
$root_elem = $root[1];
$rt += 1;
}
else if ((strpos($argv[$i], '-n')) !== false) // -n
{
$n += 1;
}
else // jine argumenty nejsou povoleny
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
}
}
//###################################################################################
if (($in > 1)||($out > 1)||($qr > 1)||($qf > 1)||($rt > 1)||($n > 1)) // pokud se nejaky parametr opakuje
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
if (($qr > 0) && ($qf > 0))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
print_r($xml_arr);
if ($from_all == 0)
{
$xml_out = search($xml_arr, $from, NULL);
}
else
{
$xml_out = searchRoot($xml_arr, $select, NULL);
}
echo"\n##### Konecna tabulka obejktu ##### \n";
//print_r($xml_out);
//var_dump($arr);
if (is_object($xml_out))
{
if ($xml_final_output = $xml_out->asXML()) // prevedeni zpet na XML
{ echo "wwwwwtttttttttttffffffffff\n";
if ($out == 1)
{
$fopen_out = $xml_final_output;
fclose($fopen_out);
}
else
{
echo $xml_final_output;
}
}
else
{
file_put_contents('php://stderr', "Error - pri prevodu na XML format!\n");
exit(100);
}
}
//else
//{
// file_put_contents('php://stderr', "Error - pri prevodu na XML format!\n");
// exit(100);
//}
echo "\n";
exit(0); // konec skriptu bez chyby
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.018 0.004 18.68 8.3.5 0.008 0.011 22.06 8.3.4 0.012 0.006 18.93 8.3.3 0.019 0.003 19.29 8.3.2 0.008 0.000 20.43 8.3.1 0.008 0.000 23.65 8.3.0 0.008 0.000 19.31 8.2.18 0.015 0.015 16.75 8.2.17 0.009 0.006 22.96 8.2.16 0.000 0.014 22.12 8.2.15 0.003 0.005 24.18 8.2.14 0.003 0.005 24.66 8.2.13 0.000 0.007 26.16 8.2.12 0.004 0.004 19.66 8.2.11 0.003 0.006 22.22 8.2.10 0.009 0.003 18.47 8.2.9 0.006 0.003 17.88 8.2.8 0.003 0.006 17.97 8.2.7 0.000 0.008 18.05 8.2.6 0.000 0.008 18.34 8.2.5 0.003 0.006 18.10 8.2.4 0.008 0.000 19.51 8.2.3 0.003 0.006 19.46 8.2.2 0.004 0.004 17.99 8.2.1 0.000 0.008 18.41 8.2.0 0.004 0.004 17.98 8.1.28 0.006 0.009 25.92 8.1.27 0.005 0.003 19.07 8.1.26 0.005 0.003 26.35 8.1.25 0.003 0.006 28.09 8.1.24 0.003 0.007 22.07 8.1.23 0.004 0.007 19.16 8.1.22 0.003 0.006 17.80 8.1.21 0.004 0.004 18.77 8.1.20 0.003 0.007 17.61 8.1.19 0.006 0.003 17.60 8.1.18 0.005 0.003 18.10 8.1.17 0.003 0.006 18.90 8.1.16 0.000 0.008 19.08 8.1.15 0.000 0.008 19.17 8.1.14 0.004 0.004 17.64 8.1.13 0.000 0.010 18.05 8.1.12 0.005 0.003 17.65 8.1.11 0.000 0.008 17.53 8.1.10 0.000 0.007 17.59 8.1.9 0.004 0.004 17.63 8.1.8 0.007 0.000 17.64 8.1.7 0.000 0.007 17.64 8.1.6 0.006 0.003 17.73 8.1.5 0.003 0.006 17.61 8.1.4 0.000 0.008 17.68 8.1.3 0.003 0.005 17.82 8.1.2 0.005 0.003 17.72 8.1.1 0.000 0.008 17.64 8.1.0 0.000 0.010 17.69 8.0.30 0.005 0.003 20.07 8.0.29 0.004 0.004 17.00 8.0.28 0.002 0.005 18.64 8.0.27 0.004 0.004 17.38 8.0.26 0.007 0.000 17.48 8.0.25 0.004 0.003 17.12 8.0.24 0.002 0.005 17.19 8.0.23 0.005 0.002 17.15 8.0.22 0.000 0.007 17.08 8.0.21 0.005 0.003 17.05 8.0.20 0.000 0.006 17.21 8.0.19 0.004 0.004 17.12 8.0.18 0.005 0.003 17.15 8.0.17 0.000 0.008 17.20 8.0.16 0.004 0.004 17.19 8.0.15 0.004 0.004 17.12 8.0.14 0.000 0.008 17.06 8.0.13 0.000 0.006 13.53 8.0.12 0.004 0.004 17.10 8.0.11 0.004 0.004 17.07 8.0.10 0.003 0.007 17.09 8.0.9 0.002 0.005 17.13 8.0.8 0.010 0.011 17.03 8.0.7 0.005 0.003 16.98 8.0.6 0.000 0.009 17.15 8.0.5 0.006 0.003 17.14 8.0.3 0.015 0.008 17.24 8.0.2 0.017 0.011 17.44 8.0.1 0.003 0.006 17.09 8.0.0 0.008 0.009 17.01 7.4.33 0.000 0.006 15.14 7.4.32 0.003 0.003 16.79 7.4.30 0.003 0.003 16.68 7.4.29 0.005 0.003 16.79 7.4.28 0.003 0.006 16.68 7.4.27 0.003 0.003 16.68 7.4.26 0.005 0.003 16.79 7.4.25 0.004 0.004 16.83 7.4.24 0.000 0.007 16.74 7.4.23 0.005 0.003 16.81 7.4.22 0.013 0.006 16.57 7.4.21 0.014 0.003 16.87 7.4.20 0.007 0.000 16.67 7.4.16 0.015 0.000 16.66 7.4.15 0.015 0.010 17.40 7.4.14 0.011 0.009 17.86 7.4.13 0.008 0.013 16.67 7.4.12 0.011 0.010 16.69 7.4.11 0.012 0.009 16.66 7.4.10 0.014 0.007 16.86 7.4.9 0.009 0.009 16.83 7.4.8 0.018 0.007 19.39 7.4.7 0.014 0.003 16.84 7.4.6 0.013 0.003 16.74 7.4.5 0.003 0.006 16.85 7.4.4 0.009 0.009 16.66 7.4.3 0.015 0.009 16.58 7.4.0 0.004 0.013 15.28 7.3.33 0.005 0.000 13.61 7.3.32 0.005 0.000 13.50 7.3.31 0.004 0.004 16.57 7.3.30 0.003 0.005 16.39 7.3.29 0.007 0.007 16.53 7.3.28 0.006 0.011 16.56 7.3.27 0.012 0.006 17.40 7.3.26 0.007 0.011 16.66 7.3.25 0.008 0.013 16.61 7.3.24 0.014 0.003 16.83 7.3.23 0.011 0.006 16.56 7.3.21 0.013 0.003 16.47 7.3.20 0.016 0.007 19.39 7.3.19 0.013 0.010 16.74 7.3.18 0.007 0.013 16.55 7.3.17 0.015 0.009 16.55 7.3.16 0.008 0.008 16.76 7.3.12 0.010 0.010 15.04 7.3.11 0.007 0.011 15.18 7.3.10 0.003 0.010 15.03 7.3.9 0.007 0.003 15.26 7.3.8 0.003 0.013 15.19 7.3.7 0.000 0.011 15.14 7.3.6 0.006 0.009 14.87 7.3.5 0.011 0.004 15.07 7.3.4 0.006 0.009 14.95 7.3.3 0.008 0.008 14.91 7.3.2 0.011 0.000 16.85 7.3.1 0.007 0.007 16.82 7.3.0 0.003 0.009 16.56 7.2.33 0.010 0.010 16.71 7.2.32 0.013 0.003 16.68 7.2.31 0.010 0.018 16.87 7.2.30 0.009 0.008 16.77 7.2.29 0.000 0.020 16.99 7.2.25 0.003 0.018 15.09 7.2.24 0.000 0.020 15.39 7.2.23 0.004 0.007 15.35 7.2.22 0.009 0.003 15.11 7.2.21 0.007 0.003 15.35 7.2.20 0.010 0.007 15.02 7.2.19 0.004 0.011 15.41 7.2.18 0.011 0.004 15.38 7.2.17 0.009 0.009 15.42 7.2.16 0.006 0.009 15.15 7.2.15 0.012 0.003 16.70 7.2.14 0.003 0.010 17.04 7.2.13 0.007 0.007 16.75 7.2.12 0.010 0.006 16.82 7.2.11 0.010 0.003 17.07 7.2.10 0.004 0.012 16.81 7.2.9 0.007 0.003 17.04 7.2.8 0.006 0.009 17.01 7.2.7 0.006 0.009 16.92 7.2.6 0.004 0.011 17.02 7.2.5 0.012 0.006 17.02 7.2.4 0.007 0.006 16.93 7.2.3 0.007 0.011 16.76 7.2.2 0.007 0.003 17.02 7.2.1 0.000 0.015 16.93 7.2.0 0.004 0.011 18.22 7.1.33 0.007 0.007 15.75 7.1.32 0.000 0.011 15.95 7.1.31 0.010 0.003 15.73 7.1.30 0.006 0.006 15.89 7.1.29 0.004 0.007 15.82 7.1.28 0.008 0.006 15.53 7.1.27 0.000 0.009 15.96 7.1.26 0.004 0.004 15.55 7.1.25 0.007 0.007 15.77 7.1.24 0.006 0.012 15.64 7.1.23 0.000 0.011 15.88 7.1.22 0.010 0.000 15.96 7.1.21 0.004 0.012 15.79 7.1.20 0.000 0.013 15.88 7.1.19 0.004 0.011 15.79 7.1.18 0.003 0.007 15.85 7.1.17 0.000 0.013 15.70 7.1.16 0.004 0.007 15.73 7.1.15 0.000 0.015 15.77 7.1.14 0.003 0.010 15.89 7.1.13 0.003 0.007 15.90 7.1.12 0.004 0.011 15.68 7.1.11 0.007 0.010 15.80 7.1.10 0.007 0.008 16.94 7.1.9 0.004 0.011 16.08 7.1.8 0.003 0.009 15.57 7.1.7 0.006 0.013 16.29 7.1.6 0.009 0.010 17.75 7.1.5 0.005 0.011 16.38 7.1.4 0.004 0.007 15.46 7.1.3 0.003 0.013 15.84 7.1.2 0.006 0.010 15.86 7.1.1 0.003 0.010 15.89 7.1.0 0.002 0.040 19.05 7.0.33 0.009 0.000 15.52 7.0.32 0.007 0.007 15.28 7.0.31 0.003 0.007 15.41 7.0.30 0.006 0.009 15.48 7.0.29 0.007 0.007 15.37 7.0.28 0.003 0.006 15.44 7.0.27 0.011 0.004 15.34 7.0.26 0.010 0.003 15.45 7.0.25 0.009 0.009 15.41 7.0.24 0.006 0.003 15.47 7.0.23 0.000 0.014 15.41 7.0.22 0.007 0.007 15.57 7.0.21 0.003 0.010 15.58 7.0.20 0.005 0.008 15.96 7.0.19 0.000 0.015 15.59 7.0.18 0.006 0.006 15.56 7.0.17 0.004 0.008 15.59 7.0.16 0.003 0.009 15.60 7.0.15 0.003 0.007 15.14 7.0.14 0.005 0.037 18.62 7.0.13 0.012 0.003 15.53 7.0.12 0.006 0.003 15.45 7.0.11 0.008 0.004 15.30 7.0.10 0.019 0.042 17.82 7.0.9 0.005 0.026 17.87 7.0.8 0.007 0.044 17.62 7.0.7 0.005 0.025 17.78 7.0.6 0.008 0.047 17.87 7.0.5 0.007 0.056 17.96 7.0.4 0.010 0.036 16.90 7.0.3 0.007 0.030 16.86 7.0.2 0.005 0.039 16.79 7.0.1 0.008 0.040 16.78 7.0.0 0.003 0.025 16.64 5.6.40 0.007 0.004 14.41 5.6.39 0.003 0.012 14.75 5.6.38 0.007 0.010 14.35 5.6.37 0.010 0.003 14.82 5.6.36 0.009 0.006 13.94 5.6.35 0.004 0.010 14.42 5.6.34 0.003 0.007 14.27 5.6.33 0.007 0.003 14.18 5.6.32 0.013 0.007 14.41 5.6.31 0.012 0.003 14.36 5.6.30 0.008 0.005 14.28 5.6.29 0.007 0.007 14.71 5.6.28 0.005 0.042 17.92 5.6.27 0.003 0.007 14.36 5.6.26 0.003 0.010 14.75 5.6.25 0.007 0.018 17.58 5.6.24 0.008 0.033 17.54 5.6.23 0.005 0.027 17.53 5.6.22 0.001 0.033 17.44 5.6.21 0.007 0.023 17.46 5.6.20 0.002 0.029 17.80 5.6.19 0.008 0.047 17.76 5.6.18 0.006 0.022 17.86 5.6.17 0.005 0.048 17.64 5.6.16 0.003 0.030 17.89 5.6.15 0.008 0.043 17.81 5.6.14 0.003 0.036 17.78 5.6.13 0.007 0.037 17.77 5.6.12 0.008 0.022 17.73 5.6.11 0.006 0.022 17.77 5.6.10 0.013 0.038 17.64 5.6.9 0.005 0.045 17.72 5.6.8 0.006 0.043 17.41 5.6.7 0.002 0.032 17.39 5.6.6 0.010 0.040 17.35 5.6.5 0.007 0.025 17.37 5.6.4 0.003 0.028 17.41 5.6.3 0.012 0.030 17.41 5.6.2 0.003 0.034 17.25 5.6.1 0.005 0.047 17.40 5.6.0 0.009 0.034 17.45 5.5.38 0.000 0.038 17.43 5.5.37 0.003 0.039 17.36 5.5.36 0.008 0.040 17.53 5.5.35 0.005 0.041 17.43 5.5.34 0.005 0.044 17.58 5.5.33 0.005 0.027 17.62 5.5.32 0.007 0.043 17.54 5.5.31 0.006 0.045 17.64 5.5.30 0.009 0.032 17.62 5.5.29 0.005 0.024 17.62 5.5.28 0.002 0.045 17.65 5.5.27 0.005 0.034 17.49 5.5.26 0.005 0.035 17.73 5.5.25 0.009 0.039 17.53 5.5.24 0.005 0.044 17.30 5.5.23 0.006 0.043 17.28 5.5.22 0.005 0.034 17.32 5.5.21 0.013 0.038 17.34 5.5.20 0.007 0.024 17.10 5.5.19 0.008 0.043 17.14 5.5.18 0.006 0.023 17.23 5.5.17 0.003 0.006 14.31 5.5.16 0.007 0.030 17.14 5.5.15 0.008 0.022 17.09 5.5.14 0.003 0.036 17.10 5.5.13 0.011 0.018 17.25 5.5.12 0.003 0.026 17.22 5.5.11 0.011 0.036 17.33 5.5.10 0.004 0.024 17.14 5.5.9 0.003 0.033 17.32 5.5.8 0.010 0.027 17.23 5.5.7 0.008 0.035 17.15 5.5.6 0.008 0.021 17.34 5.5.5 0.009 0.022 17.13 5.5.4 0.005 0.024 17.10 5.5.3 0.012 0.017 17.27 5.5.2 0.007 0.030 17.16 5.5.1 0.005 0.024 17.09 5.5.0 0.006 0.041 17.27 5.4.45 0.001 0.046 15.38 5.4.44 0.005 0.034 15.40 5.4.43 0.007 0.043 15.46 5.4.42 0.006 0.026 15.54 5.4.41 0.007 0.027 15.49 5.4.40 0.002 0.040 15.22 5.4.39 0.006 0.026 15.35 5.4.38 0.008 0.039 15.34 5.4.37 0.004 0.038 15.21 5.4.36 0.008 0.039 15.38 5.4.35 0.005 0.045 15.33 5.4.34 0.003 0.033 15.38 5.4.33 0.003 0.009 11.54 5.4.32 0.006 0.023 15.34 5.4.31 0.005 0.022 15.30 5.4.30 0.005 0.038 15.31 5.4.29 0.002 0.044 15.31 5.4.28 0.005 0.022 15.25 5.4.27 0.005 0.033 15.22 5.4.26 0.002 0.032 15.29 5.4.25 0.003 0.042 15.31 5.4.24 0.003 0.039 15.29 5.4.23 0.005 0.042 15.29 5.4.22 0.007 0.045 15.30 5.4.21 0.003 0.043 15.25 5.4.20 0.005 0.018 15.33 5.4.19 0.011 0.022 15.33 5.4.18 0.003 0.037 15.20 5.4.17 0.005 0.023 15.20 5.4.16 0.005 0.036 15.24 5.4.15 0.006 0.036 15.32 5.4.14 0.007 0.018 14.02 5.4.13 0.011 0.033 14.04 5.4.12 0.011 0.030 13.97 5.4.11 0.005 0.035 13.96 5.4.10 0.000 0.045 13.94 5.4.9 0.005 0.034 13.99 5.4.8 0.005 0.023 14.01 5.4.7 0.010 0.030 14.04 5.4.6 0.004 0.032 13.96 5.4.5 0.005 0.030 14.03 5.4.4 0.013 0.023 13.97 5.4.3 0.004 0.039 14.02 5.4.2 0.007 0.045 14.04 5.4.1 0.005 0.021 14.00 5.4.0 0.007 0.033 13.73
preferences:dark mode live preview
34.03 ms | 401 KiB | 5 Q