public static function progressbar( $title, $numerator, $denominator, $line, $time_id = null, $color = 'cyan' ) {
		static $timer = array();
		if( $time_id ) {
			if( !isset($timer[$time_id]) || $timer[$time_id]['last_numerator'] > $numerator ) {
				$timer[$time_id] = array( 'start' => microtime(true) );
			}
			$timer[$time_id]['last_numerator'] = $numerator;
		}

		$text      = $title . ' - ' . self::num_display($numerator) . '/' . self::num_display($denominator);
		$time_text = '';
		if( $time_id ) {
			$diff      = microtime(true) - $timer[$time_id]['start'];
			$time_left = self::formtime(($numerator ? $diff / $numerator : 0) * ($denominator - $numerator));
			$elapsed   = self::formtime($diff);
			if( $diff > 2 ) {
				$time_text = $time_left . " ($elapsed)";
			}
		}
		$width   = max(min(Misc::cols() - strlen($text) - (strlen($time_text) ? : -1) - 6, $denominator), 4);
		$main_xs = floor(($numerator / $denominator) * $width);

		$str = $text . ' [' . Style::$color(str_repeat('#', $main_xs)) . str_repeat('.', $width - $main_xs) . "] " . $time_text;

		Output::line($str, $line);
	}