Skip to content

Commit

Permalink
Upgraded Jump Short URL API!
Browse files Browse the repository at this point in the history
  • Loading branch information
Dr. Simon A. Xaies committed Jun 26, 2019
1 parent feaf7a2 commit fdab1af
Show file tree
Hide file tree
Showing 3,235 changed files with 277,976 additions and 165 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
18 changes: 11 additions & 7 deletions .htaccess
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@

RewriteEngine On
RewriteCond %{HTTP_HOST} ([a-z0-9]){1,7}.labs.coop$
RewriteCond %{HTTP_HOST} ([a-z0-9]){1,9}.(localhost|snails.email)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^v2/url.api index.php?action=url [L,NC,QSA]
RewriteRule ^style.css style.css [L,NC,QSA]
RewriteRule ^(.*?){2,128} index.php?action=jump&item=$1 [L,NC,QSA]

RewriteRule ^assets/(css|images|jquery|media)/(.*?).(.*?) ./assets/$1/$2.$3 [L,NC,QSA]
RewriteRule ^assets/(css|images|jquery|media)/(.*?)/(.*?).(.*?) ./assets/$1/$2/$3.$4 [L,NC,QSA]
RewriteRule ^assets/(css|images|jquery|media)/(.*?)/(.*?)/(.*?).(.*?) ./assets/$1/$2/$3/$4.$5 [L,NC,QSA]
RewriteRule ^v2/url.api ./index.php?action=url [L,NC,QSA]
RewriteRule ^/(.*?){2,128} ./index.php?action=jump&item=$1 [L,NC,QSA]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*?){2,128}.([a-z0-9]){1,7}.labs.coop$
RewriteRule .* index.php?action=jump&subdomain=1 [L,NC,QSA]
RewriteCond %{HTTP_HOST} ^(.*?){2,128}.([a-z0-9]){1,9}.(localhost|snails.email)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* ./index.php?action=jump&subdomain=1 [L,NC,QSA]

3 changes: 2 additions & 1 deletion apiconfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@
*/
define("API_DROP_DAYS_INACTIVE", mt_rand(64,198));
define("API_PROTOCOL", (!isset($_SERVER["HTTPS"])?'http://':'https://'));
define("API_HOSTNAME", basename(__DIR__));
define("API_HOSTNAME", strtolower(basename(__DIR__)));
define("API_URL", API_PROTOCOL . API_HOSTNAME);
define("API_URL_BASE_PATH", "/");
define("API_PATH_IO_CACHE", dirname(__DIR__) . DIRECTORY_SEPARATOR . 'data-uris' . DIRECTORY_SEPARATOR . 'cache');
define("API_PATH_IO_REFEREE", dirname(__DIR__) . DIRECTORY_SEPARATOR . 'data-uris' . DIRECTORY_SEPARATOR . 'referee');
Expand Down
125 changes: 125 additions & 0 deletions assets/css/gradients.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
<?php
header('Origin: *');
header('Access-Control-Allow-Origin: *');
header("Content-type: text/css");
error_reporting(0);
ini_set('display_errors', false);?>/**
* Variables for $_GET if specified
*
* $_GET['weights'] = "000--111--010" ~ Minimum on Range||Maximum on Range||Has to mt_rant() Greater than for CSS Update
* $_GET['nodes'] = "html--h1, h2, h3, h4, h5--input--textarea--select" ~ Css HTML Tag classes to define individual grandients
* $_GET['elements'] = "#gradomega, .gradomega--#gradbeta, .gradbeta--#gradcharley, .gradcharley--#graddelta, .graddelta--.boxingsmall" ~ Css Identity and Classing Tags to define individual grandients
* $_GET['reds'] = "21--198" ~ Range for mt_rand() of Minimal Red in RGB and Maximum
* $_GET['greens'] = "31--168" ~ Range for mt_rand() of Minimal Green in RGB and Maximum
* $_GET['blues'] = "42--238" ~ Range for mt_rand() of Minimal Blues in RGB and Maximum
* $_GET['heats'] = "41--99--72--91" ~ Range for mt_rand() / mt_rand() of Heats of Grandienting in percentage
* $_GET['opacities'] = "41--99--72--91" ~ Range for mt_rand() / mt_rand() of Transparency of Grandienting in percentage
*/


<?php

function rgb2html($r, $g=-1, $b=-1)
{
if (is_array($r) && sizeof($r) == 3)
list($r, $g, $b) = $r;

$r = intval($r); $g = intval($g);
$b = intval($b);

$r = dechex($r<0?0:($r>255?255:$r));
$g = dechex($g<0?0:($g>255?255:$g));
$b = dechex($b<0?0:($b>255?255:$b));

$color = (strlen($r) < 2?'0':'').$r;
$color .= (strlen($g) < 2?'0':'').$g;
$color .= (strlen($b) < 2?'0':'').$b;
return '#'.$color;
}

error_reporting(0);
ini_set('display_errors', false);
ini_set('log_errors', false);

if (isset($_GET['sessionid']) && !empty($_GET['sessionid']))
$sesshid = sha1($_GET['sessionid']);
else
$sesshid = sha1(serialize($_SERVER).json_encode($_GET));

session_id($sesshid);
session_start();
$weights = (!isset($_GET['weights']) && !strpos($_GET['weights'], '--') ? array(-80, 35, -11) : explode('--', $_GET['weights']));
$nodes = (!isset($_GET['nodes']) && empty($_GET['nodes']) ? array('html', 'blockquote, pre, code', 'button', 'iframe, embed', 'form') : explode('--', $_GET['nodes']));
$elements = (!isset($_GET['elements']) && empty($_GET['elements']) ? array('#header, .header', '#main, .main', '#content, .content', '#footer, .footer', '.item, #item', '.odd, #odd', '.even, #even') : explode('--', $_GET['elements']));
$reds = (!isset($_GET['reds']) && !strpos($_GET['reds'], '--') ? array(mt_rand(67,127), mt_rand(128,255)) : explode('--', $_GET['reds']));
$greens = (!isset($_GET['greens']) && !strpos($_GET['greens'], '--') ? array(mt_rand(57,127), mt_rand(128,255)) : explode('--', $_GET['greens']));
$blues = (!isset($_GET['blues']) && !strpos($_GET['blues'], '--') ? array(mt_rand(61,127), mt_rand(128,255)) : explode('--', $_GET['blues']));
$heats = (!isset($_GET['heats']) && !strpos($_GET['heats'], '--') ? array(mt_rand(0,49), mt_rand(45,99), mt_rand(0,49), mt_rand(45,99)) : explode('--', $_GET['heats']));
$opacities = (!isset($_GET['opacities']) && !strpos($_GET['opacities'], '--') ? array(mt_rand(0,49), mt_rand(45,99), mt_rand(0,49), mt_rand(45,99)) : explode('--', $_GET['opacities']));
$modes = array();
$modes[] = array("-moz-linear-gradient" => "top", '-webkit-gradient' => "left top, left bottom",'-webkit-linear-gradient' => "top", '-o-linear-gradient'=> "top", "-ms-linear-gradient"=> "top",'linear-gradient'=>'to bottom');
$modes[] = array("-moz-linear-gradient" => "left", '-webkit-gradient' => "left top, right top",'-webkit-linear-gradient' => "left", '-o-linear-gradient'=> "left", "-ms-linear-gradient"=> "left",'linear-gradient'=>'to right');
$modes[] = array("-moz-linear-gradient" => "-45deg", '-webkit-gradient' => "left top, right bottom",'-webkit-linear-gradient' => "-45deg", '-o-linear-gradient'=> "-45deg", "-ms-linear-gradient"=> "-45deg",'linear-gradient'=>'135deg');
$modes[] = array("-moz-linear-gradient" => "45deg", '-webkit-gradient' => "left bottom, right top",'-webkit-linear-gradient' => "45deg", '-o-linear-gradient'=> "45deg", "-ms-linear-gradient"=> "45deg",'linear-gradient'=>'45deg');
$modeskeys = array_keys($modes);
$token = sha1($_SERVER['HTTP_REFERER'] . md5($_SERVER['HTTP_USER_AGENT']) . sha1($_SERVER['REMOTE_ADDR']) . sha1($_SERVER['REQUEST_URI']) . $_SERVER['REMOTE_HOST'] . $_REQUEST['token']);
if (!isset($_SESSION[basename(dirname(__FILE__))]['timers'][$token]))
$_SESSION[basename(dirname(__FILE__))]['timers'][$token] = microtime(true) + mt_rand(360, 8500);
elseif ($_SESSION[basename(dirname(__FILE__))]['timers'][$token] < microtime(true))
{
unset($_SESSION[basename(dirname(__FILE__))][$token]);
$_SESSION[basename(dirname(__FILE__))]['timers'][$token] = microtime(true) + mt_rand(360, 8500);
}

if (!is_array($_SESSION[basename(dirname(__FILE__))][$token]) || isset($_REQUEST['reset']) || is_string($_SESSION[basename(dirname(__FILE__))][$token]) || !isset($_SESSION[basename(dirname(__FILE__))][$token]) || mt_rand($weights[0], $weights[1]) >= $weights[2]) {
$_SESSION[basename(dirname(__FILE__))][$token] = array('reset' => implode(', ', $nodes) . ', ' . implode(', ', $elements) . ' {
background-color: transparent;
}');

foreach(array_merge($nodes, $elements) as $node)
{
mt_srand(mt_rand(-microtime(true), microtime(true)));
mt_srand(mt_rand(-microtime(true), microtime(true)));
mt_srand(mt_rand(-microtime(true), microtime(true)));
$decimals = explode('', str_replace(array(' ', '.'), '', microtime(false)));
shuffle($decimals);
$decalpha = implode("", $decimals);
shuffle($decimals);
$decomega = implode("", $decimals);
$colour = array();
for($rt = 1; $rt<=mt_rand(3,9); $rt++) {
$colour[$rt]['red'] = mt_rand($reds[0], $reds[1]);
$colour[$rt]['green'] = mt_rand($greens[0], $greens[1]);
$colour[$rt]['blue'] = mt_rand($blues[0], $blues[1]);
$colour[$rt]['heat'] = (mt_rand($heats[0], $heats[1]) / mt_rand($heats[2], $heats[3])) * 58.69;
$colour[$rt]['opacity'] = mt_rand($opacities[0], $opacities[1]) / mt_rand($opacities[2], $opacities[3]);
}
$state = $modes[mt_rand(0, count($modes)-1)];
$colorstyle = array();
$colorstop = array();
$kieyes = array_keys($colour);
shuffle($kieyes);
foreach($kieyes as $mkey)
{
$colorstyle[$mkey] = "rgba(".$colour[$mkey]['red'] . ", " . $colour[$mkey]['green'] . ", " . $colour[$mkey]['blue'] . ", " . $colour[$mkey]['opacity'] . ") ". $colour[$mkey]['heat'].'%';
$colorstop[$mkey] = 'color-stop('. $colour[$mkey]['heat'].'%, rgba('.$colour[$mkey]['red'] . ", " . $colour[$mkey]['green'] . ", " . $colour[$mkey]['blue'] . ", " . $colour[$mkey]['opacity'] . "))";
}
$colorstyle = implode(", ", $colorstyle);
$colorstop = implode(", ", $colorstop);
$_SESSION[basename(dirname(__FILE__))][$token][$key][$node] = "$node " . ' {
background: -moz-linear-gradient('.$state['-moz-linear-gradient'].', '.$colorstyle .') !important; /* FF3.6+ */
background: -webkit-gradient(linear, '.$state['-webkit-gradient'].', '. $colorstop . ') !important; /* Chrome,Safari4+ */
background: -webkit-linear-gradient('.$state['-webkit-linear-gradient'].', '.$colorstyle .') !important; /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient('.$state['-o-linear-gradient'].', '.$colorstyle .') !important; /* Opera 11.10+ */
background: -ms-linear-gradient('.$state['-ms-linear-gradient'].', '.$colorstyle .') !important; /* IE10+ */
background: linear-gradient('.$state['linear-gradient'].', '.$colorstyle .') !important; /* W3C */
}
';
}
}

foreach(array_keys($_SESSION[basename(dirname(__FILE__))][$token]) as $key)
echo implode("", $_SESSION[basename(dirname(__FILE__))][$token][$key]);
exit(0);
?>
125 changes: 125 additions & 0 deletions assets/css/shadowing.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
<?php
header('Origin: *');
header('Access-Control-Allow-Origin: *');
header("Content-type: text/css");
?>/**
* Variables for $_GET if specified
*
* $_GET['weights'] = "000||111||010" ~ Minimum on Range||Maximum on Range||Has to mt_rant() Greater than for CSS Update
* $_GET['nodes'] = "html||h1, h2, h3, h4, h5||input||textarea||select" ~ Css Object, ID and HTML Tag classes to define individual shadows
* $_GET['elements'] = "box||text" ~ Shadow types only box or text or both
* $_GET['reds'] = "21||198" ~ Range for mt_rand() of Minimal Red in RGB and Maximum
* $_GET['greens'] = "31||168" ~ Range for mt_rand() of Minimal Green in RGB and Maximum
* $_GET['blues'] = "42||238" ~ Range for mt_rand() of Minimal Blues in RGB and Maximum
* $_GET['ranges'] = "0||3" ~ Range for mt_rand() of Minimal Shadow Depth in pixels and Maximum --- Across the board not 1st, 2nd etc. Setting
* $_GET['firsts'] = "0||3" ~ Range for mt_rand() of Minimal Shadow First Basis Measuring Depth in pixels and Maximum
* $_GET['seconds'] = "0||3" ~ Range for mt_rand() of Minimal Shadow Seconds Basis Measuring Depth in pixels and Maximum
* $_GET['thirds'] = "0||3" ~ Range for mt_rand() of Minimal Shadow Third Basis Measuring Depth in pixels and Maximum
* $_GET['forths'] = "0||3" ~ Range for mt_rand() of Minimal Shadow Forth Basis Measuring Depth in pixels and Maximum
* $_GET['opacities'] = "41||99||72||91" ~ Range for mt_rand() / mt_rand() of Transparency of Shadowing in percentage
*/

<?php

error_reporting(0);
ini_set('display_errors', false);
ini_set('log_errors', false);

$url = 'http://localhost'.$_SERVER['REQUEST_URI'];
parse_str(parse_url($url, PHP_URL_QUERY), $_GET);

if (isset($_GET['sessionid']) && !empty($_GET['sessionid']))
$sesshid = sha1($_GET['sessionid']);
else
$sesshid = sha1(serialize($_SERVER).json_encode($_GET));
$weights = (!isset($_GET['weights']) && !strpos($_GET['weights'], '||') ? array(-80, 35, -11) : explode('||', $_GET['weights']));
$nodes = (!isset($_GET['nodes']) && !strpos($_GET['nodes'], '||') ? array('html', 'h1', 'input', 'button', 'iframe, embed', 'textarea', 'select', 'checkbox', 'radio') : explode('||', $_GET['nodes']));
$elements = (!isset($_GET['elements']) && (!strpos($_GET['elements'], 'box') || !strpos($_GET['elements'], 'text')) ? array('text', 'box') : explode('||', $_GET['elements']));
$reds = (!isset($_GET['reds']) && !strpos($_GET['reds'], '||') ? array('21', '198') : explode('||', $_GET['reds']));
$greens = (!isset($_GET['greens']) && !strpos($_GET['greens'], '||') ? array('31', '168') : explode('||', $_GET['greens']));
$blues = (!isset($_GET['blues']) && !strpos($_GET['blues'], '||') ? array('42', '238') : explode('||', $_GET['blues']));
$firsts = $seconds = $thirds = $forths = (!isset($_GET['ranges']) && !strpos($_GET['ranges'], '||') ? array('0', '3') : explode('||', $_GET['ranges']));
$firsts = (!isset($_GET['firsts']) && !strpos($_GET['firsts'], '||') ? $firsts : explode('||', $_GET['firsts']));
$seconds = (!isset($_GET['seconds']) && !strpos($_GET['seconds'], '||') ? $seconds : explode('||', $_GET['seconds']));
$thirds = (!isset($_GET['thirds']) && !strpos($_GET['thirds'], '||') ? $thirds : explode('||', $_GET['ranges']));
$forths = (!isset($_GET['forths']) && !strpos($_GET['forths'], '||') ? $forths : explode('||', $_GET['forths']));
$opacities = (!isset($_GET['opacities']) && !strpos($_GET['opacities'], '||') ? array('41', '99', '72', '91') : explode('||', $_GET['opacities']));
$token = sha1($_SERVER['HTTP_REFERER'] . md5($_SERVER['HTTP_USER_AGENT']) . sha1($_SERVER['REMOTE_ADDR']) . sha1($_SERVER['REQUEST_URI']) . $_SERVER['REMOTE_HOST'] . $_REQUEST['token']);

if (!isset($_SESSION[basename(dirname(__FILE__))]['timers'][$token]))
$_SESSION[basename(dirname(__FILE__))]['timers'][$token] = microtime(true) + mt_rand(360, 8500);
elseif ($_SESSION[basename(dirname(__FILE__))]['timers'][$token] < microtime(true))
{
unset($_SESSION[basename(dirname(__FILE__))][$token]);
$_SESSION[basename(dirname(__FILE__))]['timers'][$token] = microtime(true) + mt_rand(360, 8500);
}
if (isset($_SESSION[basename(dirname(__FILE__))][$token]) && count($_SESSION[basename(dirname(__FILE__))][$token])==0)
unset($_SESSION[basename(dirname(__FILE__))][$token]);
if (!isset($_SESSION[basename(dirname(__FILE__))][$token]) || !is_array($_SESSION[basename(dirname(__FILE__))][$token]) || isset($_REQUEST['reset']) || is_string($_SESSION[basename(dirname(__FILE__))][$token]) || !isset($_SESSION[basename(dirname(__FILE__))][$token]) || mt_rand($weights[0], $weights[1]) >= $weights[2]) {
$_SESSION[basename(dirname(__FILE__))][$token] = array();
foreach($elements as $key)
{
mt_srand(mt_rand(-microtime(true), microtime(true)));
mt_srand(mt_rand(-microtime(true), microtime(true)));
mt_srand(mt_rand(-microtime(true), microtime(true)));
$decimals = explode('', str_replace(array(' ', '.'), '', microtime(false)));
shuffle($decimals);
$decalpha = implode("", $decimals);
shuffle($decimals);
$decomega = implode("", $decimals);
$points = $colour = array();
foreach($nodes as $node) {
$colour[$key]['red'] = (float)mt_rand((float)$reds[0].(!strpos($reds[0], '.')?".$decomega":""), (float)$reds[1].(!strpos($reds[1], '.')?".$decalpha":""));
$colour[$key]['green'] = (float)mt_rand((float)$greens[0].(!strpos($greens[0], '.')?".$decomega":""), (float)$greens[1].(!strpos($greens[1], '.')?".$decalpha":""));
$colour[$key]['blue'] = (float)mt_rand((float)$blues[0].(!strpos($blues[0], '.')?".$decomega":""), (float)$blues[1].(!strpos($blues[1], '.')?".$decalpha":""));
$points[$key]['1st'] = (float)mt_rand((float)$firsts[0].(!strpos($firsts[0], '.')?".$decomega":""), (float)$firsts[1].(!strpos($firsts[1], '.')?".$decalpha":""));
$points[$key]['2nd'] = (float)mt_rand((float)$seconds[0].(!strpos($seconds[0], '.')?".$decomega":""), (float)$seconds[1].(!strpos($seconds[1], '.')?".$decalpha":""));
$points[$key]['3rd'] = (float)mt_rand((float)$thirds[0].(!strpos($thirds[0], '.')?".$decomega":""), (float)$thirds[1].(!strpos($thirds[1], '.')?".$decalpha":""));
$points[$key]['4th'] = (float)mt_rand((float)$forths[0].(!strpos($forths[0], '.')?".$decomega":""), (float)$forths[1].(!strpos($forths[1], '.')?".$decalpha":""));
$colour[$key]['opacity'] = (float)round(mt_rand((float)$opacities[0].(!strpos($opacities[0], '.')?".$decomega":""), (float)$opacities[1].(!strpos($opacities[1], '.')?".$decalpha":"")) / mt_rand((float)$opacities[2].(!strpos($opacities[2], '.')?".$decomega":""), (float)$opacities[3].(!strpos($opacities[3], '.')?".$decalpha":"")), 11);

switch ($key){
case 'box':
if (strpos($node, '%s')>0 || in_array(substr($node, 0, 1), array('.', '#')))
{
$_SESSION[basename(dirname(__FILE__))][$token][$key][$node] = sprintf($node, $key) . ' {
-webkit-box-shadow: ' . $points['box']['1st'] . 'px ' . $points['box']['2nd'] . 'px ' . $points['box']['3rd'] . 'px ' . $points['box']['4th'] . 'px rgba(' . $colour['box']['red'] . ', ' . $colour['box']['green'] . ', ' . $colour['box']['blue'] . ', ' . $colour['box']['opacity'] . ');
-moz-box-shadow: ' . $points['box']['1st'] . 'px ' . $points['box']['2nd'] . 'px ' . $points['box']['3rd'] . 'px ' . $points['box']['4th'] . 'px rgba(' . $colour['box']['red'] . ', ' . $colour['box']['green'] . ', ' . $colour['box']['blue'] . ', ' . $colour['box']['opacity'] . ');
box-shadow: ' . $points['box']['1st'] . 'px ' . $points['box']['2nd'] . 'px ' . $points['box']['3rd'] . 'px ' . $points['box']['4th'] . 'px rgba(' . $colour['box']['red'] . ', ' . $colour['box']['green'] . ', ' . $colour['box']['blue'] . ', ' . $colour['box']['opacity'] . ');
}
';
} else {
$_SESSION[basename(dirname(__FILE__))][$token][$key][$node] = $node . ' {
-webkit-box-shadow: ' . $points['box']['1st'] . 'px ' . $points['box']['2nd'] . 'px ' . $points['box']['3rd'] . 'px ' . $points['box']['4th'] . 'px rgba(' . $colour['box']['red'] . ', ' . $colour['box']['green'] . ', ' . $colour['box']['blue'] . ', ' . $colour['box']['opacity'] . ');
-moz-box-shadow: ' . $points['box']['1st'] . 'px ' . $points['box']['2nd'] . 'px ' . $points['box']['3rd'] . 'px ' . $points['box']['4th'] . 'px rgba(' . $colour['box']['red'] . ', ' . $colour['box']['green'] . ', ' . $colour['box']['blue'] . ', ' . $colour['box']['opacity'] . ');
box-shadow: ' . $points['box']['1st'] . 'px ' . $points['box']['2nd'] . 'px ' . $points['box']['3rd'] . 'px ' . $points['box']['4th'] . 'px rgba(' . $colour['box']['red'] . ', ' . $colour['box']['green'] . ', ' . $colour['box']['blue'] . ', ' . $colour['box']['opacity'] . ');
}
';
}
break;
case 'text':
if (strpos($node, '%s')>0 || in_array(substr($node, 0, 1), array('.', '#')))
{
$_SESSION[basename(dirname(__FILE__))][$token][$key][$node] = sprintf($node, $key) . ' {
text-shadow: ' . $points['text']['1st'] . 'px ' . $points['text']['2nd'] . 'px ' . $points['text']['3rd'] . 'px rgba(' . $colour['text']['red'] . ', ' . $colour['text']['green'] . ', ' . $colour['text']['blue'] . ', ' . $colour['text']['opacity'] . ');
}
';
} else {
$_SESSION[basename(dirname(__FILE__))][$token][$key][$node] = $node . ' {
text-shadow: ' . $points['text']['1st'] . 'px ' . $points['text']['2nd'] . 'px ' . $points['text']['3rd'] . 'px rgba(' . $colour['text']['red'] . ', ' . $colour['text']['green'] . ', ' . $colour['text']['blue'] . ', ' . $colour['text']['opacity'] . ');
}
';
}
break;
}
}
}
}
foreach(array_keys($_SESSION[basename(dirname(__FILE__))][$token]) as $key)
echo implode("", $_SESSION[basename(dirname(__FILE__))][$token][$key]);
exit(0);
?>
Loading

0 comments on commit fdab1af

Please sign in to comment.