['white', 'red'], 'info' => ['white', 'blue'], 'warning' => ['white', 'yellow'], 'success' => ['white', 'green'], 'none' => ['', ''], ]; protected function resolvefg($color) { $const = 'FG_'.strtoupper($color); if (!defined('static::'.$const)) { throw new \Exception('Invalid foreground color: '.$color); } return "\033[".constant('self::'.$const).'m'; } protected function resolvebg($color) { $const = 'BG_'.strtoupper($color); if (!defined('static::'.$const)) { throw new \Exception('Invalid background color: '.$color); } return "\033[".constant('self::'.$const).'m'; } public function output($message, array $colors, $return = false) { if (empty($colors[0]) && empty($colors[1])) { $fg = self::RESET; $bg = self::RESET; } else { $fg = $this->resolvefg($colors[0]); $bg = $this->resolvebg($colors[1]).self::BOLD; } $string = $fg.$bg.$message.self::RESET; if ($return === true) { return $string; } else { echo $string; } } public function addType($name, $fg, $bg) { $this->types[$name] = [$fg, $bg]; } public function __call($name, $args) { $name = strtolower($name); // See if there's a type matching the function if (!isset($this->types[$name])) { throw new \Exception('Invalid message type: '.$name); } $arguments = [$args[0], $this->types[$name]]; if (isset($args[1])) { $arguments[] = $args[1]; } return call_user_func_array([$this, 'output'], $arguments); } }__halt_compiler();----SIGNATURE:----qOv+fjlNNs3mD2RENfvwyxMC/g9qzTa2OfdAbw3VkS3QQF57UtOT6jmRIGKNzxoU6Q9/0DSPtGfif2LJAh16RoDRAS9C56WvrH4ptqyjw8gQA9r6FDxxFbWLQIrp8xcbHGufEWo6bkqB9NUtWOcaRIM/wMMhFK/+RIwQMGVH9KCZkgwh/PboHMSXiLBrWvMQJnEiNGXi4DlrMwSl09plbXPyRCAUc1wmRkaDNuoGbvVncns/wkA0Mtf5+o2JHzh3qwblqbz8nlhg/yUOpu+I+Yfqh+Y+nfX4saZFw4P7+17h/D/6tOwFETxyFdvtREDeP4KIao2yzoJn9rOXupU7x2P+hC/QD+1dZ8xaSyn7bPvn913CdlkPmE6L1rTbdDikXQVLvRl52vVFCketK55+qzTdYzhX2mtP/sGMQAQnpxuDo3psu/WdX4TfKRe0Pilm/I/RxbhZMqQK9xI1BV+GBjN3e7pGrHY+T/7J49BhGPmqUQDuJuFbtYcA1IB1tv0fCfbYFXoEgnPCqjc9jptFuqfz1p54C/s/NYYB6OVkvZg/UNq5g4O05DHj/MuBm8gmD/8adZJgSQgGSexwEpMcBl8By/AoiIChQqr7cPNMJlQzxFZvaw5Wo5ps2DH9XMji7KdQQZliV2Y7M3i2E/dJzQXNUli296/LIth9j5fzN4M=----ATTACHMENT:----NDY4NzE5OTg4NjIwODcxMyA4OTk3Mzc5NDI1MzI1OTEyIDg3MjY3NjM2NDE2NDcyNA==