<?php
class Department
{
public $name;
public $chief;
public function __construct($name)
{
$this->name = $name;
}
public function setChief($chief)
{
$this->chief = $chief;
}
public function addEmployee
(array $employees) {
foreach ($employees as $workers) {
$this->staff[] = $workers;
}
}
public function getTotalSalary()
{
$totalSalary = 0;
foreach ($this->staff as $type) {
$totalSalary += $type->getSalary(false);
}
$totalSalary += $this->chief->getSalary(true);
return $totalSalary;
}
public function getTotalCoffee()
{
$totalCoffee = 0;
foreach ($this->staff as $type) {
$totalCoffee += $type->coffee;
}
$totalCoffee += $this->chief->getChiefCoffee();
return $totalCoffee;
}
public function getTotalOutput()
{
$totalOutput = 0;
foreach ($this->staff as $type) {
$totalOutput += $type->output;
}
return $totalOutput;
}
}
abstract class Employee
{
const RANK_1 = 1;
const RANK_2 = 2;
const RANK_3 = 3;
const MANAGER = "me";
const MARKETER = "ma";
const ENGINEER = "en";
const ANALYST = "an";
public $baseSalary, $coffee, $output, $rank;
public function __construct($rank)
{
$this->rank = $rank;
}
public function getSalary($isChief)
{
self::RANK_1 => 1,
self::RANK_2 => 1.25,
self::RANK_3 => 1.5,
);
if ($isChief == false) {
return $this->baseSalary * $salaryMult[$this->rank];
} else {
return $this->baseSalary * $salaryMult[$this->rank] * 1.5;
}
}
public function getChiefCoffee()
{
return $this->coffee*2;
}
}
class Manager extends Employee
{
public $baseSalary = 500;
public $coffee = 20;
public $output = 200;
}
class Marketer extends Employee
{
public $baseSalary = 400;
public $coffee = 15;
public $output = 150;
}
class Engineer extends Employee
{
public $baseSalary = 400;
public $coffee = 5;
public $output = 50;
}
class Analyst extends Employee
{
public $salary = 400;
public $coffee = 50;
public $output = 5;
}
class EmployeeFactory
{
public static function chooseEmployee($name, $rank)
{
if ($name == "me") {
return new Manager($rank);
} elseif ($name == "ma") {
return new Marketer($rank);
} elseif ($name == "en") {
return new Engineer($rank);
} elseif ($name == "an") {
return new Analyst($rank);
}
}
public static function createEmployees($employees)
{
foreach ($employees as $workers) {
preg_match_all('/^(\d*)(\w{2})([1-3])$/i', $workers, $res, PREG_SET_ORDER
); $number = $res[0][1];
$name = $res[0][2];
$rank = $res[0][3];
if (!$number) {
$number = 1;
}
for ($i = 0; $i < $number; $i++) {
$new[] = self::chooseEmployee($name, $rank);
}
}
return $new;
}
public static function createChief($employee)
{
preg_match_all('/^(\w{2})([1-3])$/i', $employee, $res, PREG_SET_ORDER
); $name = $res[0][1];
$rank = $res[0][2];
$chief = self::chooseEmployee($name, $rank);
$chief->output = 0;
return $chief;
}
}
$purchase = new Department("Закупки");
$purchase->addEmployee(EmployeeFactory
::createEmployees(array("9me1", "3me2", "2me3", "2ma1"))); $purchase->setChief(EmployeeFactory::createChief("me2"));
$sales = new Department("Продажи");
$sales->addEmployee(EmployeeFactory
::createEmployees(array("12me1", "6ma1", "3an1", "2an2"))); $sales->setChief(EmployeeFactory::createChief("ma2"));
$ads = new Department("Реклама");
$ads->addEmployee(EmployeeFactory
::createEmployees(array("15ma1", "10ma2", "8me1", "2en1"))); $ads->setChief(EmployeeFactory::createChief("ma3"));
$log = new Department("Логистика");
$log->addEmployee(EmployeeFactory
::createEmployees(array("13me1", "5me2", "5en1"))); $log->setChief(EmployeeFactory::createChief("me1"));
$departments = array($purchase, $sales, $ads, $log);
// ВЫВОД
function padLeft($string, $length)
{
if ($countString < $length) {
$pad = $length - $countString;
}
return $string;
}
function padRight($string, $length)
{
if ($countString < $length) {
$pad = $length - $countString;
}
return $string;
}
// Ширина колонок
$col1 = 15;
$col2 = 12;
$col3 = 12;
$col4 = 12;
$col5 = 12;
$col6 = 20;
// Заголовок таблицы
echo padRight("Департамент", $col1) .
padLeft("сотр.", $col2) .
padLeft("тугр.", $col3) .
padLeft("кофе", $col4) .
padLeft("стр.", $col5) .
padLeft("тугр./стр.", $col6) ."\n";
// Граница заголовков
$sumCount = 0;
$sumSalary = 0;
$sumCoffee = 0;
$sumOutput = 0;
$sumExpence = 0;
foreach ($departments as $department) {
echo padRight($department->name, $col1) .
padLeft
(count($department->staff) + 1, $col2) . padLeft($department->getTotalSalary(), $col3) .
padLeft($department->getTotalCoffee(), $col4) .
padLeft($department->getTotalOutput(), $col5) .
padLeft
(round($department->getTotalSalary()/$department->getTotalOutput(), 2), $col6) ."\n"; $sumCount += count($department->staff) + 1; $sumSalary += $department->getTotalSalary();
$sumCoffee += $department->getTotalCoffee();
$sumOutput += $department->getTotalOutput();
$sumExpence += round($department->getTotalSalary()/$department->getTotalOutput(), 2); }
$n = count($departments);
echo padRight("Среднее", $col1) .
padLeft($sumCount / $n, $col2) .
padLeft($sumSalary / $n, $col3) .
padLeft($sumCoffee / $n, $col4) .
padLeft($sumOutput / $n, $col5) .
padLeft($sumExpence / $n, $col6) ."\n";
echo padRight("Всего", $col1) .
padLeft($sumCount, $col2) .
padLeft($sumSalary, $col3) .
padLeft($sumCoffee, $col4) .
padLeft($sumOutput, $col5) .
padLeft($sumExpence, $col6) ."\n";
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7Cm1iX2ludGVybmFsX2VuY29kaW5nKCJVVEYtOCIpOwoKY2xhc3MgRGVwYXJ0bWVudAp7CQoJcHVibGljICRuYW1lOwoJcHVibGljICRzdGFmZiA9IGFycmF5KCk7CglwdWJsaWMgJGNoaWVmOwoJCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUpCgl7CgkJJHRoaXMtPm5hbWUgPSAkbmFtZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldENoaWVmKCRjaGllZikKCXsKCQkkdGhpcy0+Y2hpZWYgPSAkY2hpZWY7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBhZGRFbXBsb3llZShhcnJheSAkZW1wbG95ZWVzKQoJewoJCWZvcmVhY2ggKCRlbXBsb3llZXMgYXMgJHdvcmtlcnMpIHsKCQkJJHRoaXMtPnN0YWZmW10gPSAkd29ya2VyczsKCQl9Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRUb3RhbFNhbGFyeSgpCgl7CQoJCSR0b3RhbFNhbGFyeSA9IDA7CgkJZm9yZWFjaCAoJHRoaXMtPnN0YWZmIGFzICR0eXBlKSB7CgkJCSR0b3RhbFNhbGFyeSArPSAkdHlwZS0+Z2V0U2FsYXJ5KGZhbHNlKTsKCQl9CgkJCgkJJHRvdGFsU2FsYXJ5ICs9ICR0aGlzLT5jaGllZi0+Z2V0U2FsYXJ5KHRydWUpOwoJCQoJCXJldHVybiAkdG90YWxTYWxhcnk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRUb3RhbENvZmZlZSgpCgl7CgkJJHRvdGFsQ29mZmVlID0gMDsKCQlmb3JlYWNoICgkdGhpcy0+c3RhZmYgYXMgJHR5cGUpIHsKCQkJJHRvdGFsQ29mZmVlICs9ICR0eXBlLT5jb2ZmZWU7CgkJfQoJCQoJCSR0b3RhbENvZmZlZSArPSAkdGhpcy0+Y2hpZWYtPmdldENoaWVmQ29mZmVlKCk7CgkJCgkJcmV0dXJuICR0b3RhbENvZmZlZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldFRvdGFsT3V0cHV0KCkKCXsKCQkkdG90YWxPdXRwdXQgPSAwOwoJCWZvcmVhY2ggKCR0aGlzLT5zdGFmZiBhcyAkdHlwZSkgewoJCQkkdG90YWxPdXRwdXQgKz0gJHR5cGUtPm91dHB1dDsKCQl9CgkJcmV0dXJuICR0b3RhbE91dHB1dDsKCX0KfQoKYWJzdHJhY3QgY2xhc3MgRW1wbG95ZWUKewkKCWNvbnN0IFJBTktfMSA9IDE7Cgljb25zdCBSQU5LXzIgPSAyOwoJY29uc3QgUkFOS18zID0gMzsKCQoJY29uc3QgTUFOQUdFUiA9ICJtZSI7Cgljb25zdCBNQVJLRVRFUiA9ICJtYSI7Cgljb25zdCBFTkdJTkVFUiA9ICJlbiI7Cgljb25zdCBBTkFMWVNUID0gImFuIjsKCQoJcHVibGljICRiYXNlU2FsYXJ5LCAkY29mZmVlLCAkb3V0cHV0LCAkcmFuazsKCQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyYW5rKQoJewoJCSR0aGlzLT5yYW5rID0gJHJhbms7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRTYWxhcnkoJGlzQ2hpZWYpCgl7CgkJJHNhbGFyeU11bHQgPSBhcnJheSgKCQkJc2VsZjo6UkFOS18xID0+IDEsCgkJCXNlbGY6OlJBTktfMiA9PiAxLjI1LAoJCQlzZWxmOjpSQU5LXzMgPT4gMS41LAoJCSk7CgkJCgkJaWYgKCRpc0NoaWVmID09IGZhbHNlKSB7CgkJCXJldHVybiAkdGhpcy0+YmFzZVNhbGFyeSAqICRzYWxhcnlNdWx0WyR0aGlzLT5yYW5rXTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gJHRoaXMtPmJhc2VTYWxhcnkgKiAkc2FsYXJ5TXVsdFskdGhpcy0+cmFua10gKiAxLjU7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpZWZDb2ZmZWUoKQoJewoJCXJldHVybiAkdGhpcy0+Y29mZmVlKjI7Cgl9Cn0KCmNsYXNzIE1hbmFnZXIgZXh0ZW5kcyBFbXBsb3llZQp7CQoJcHVibGljICRiYXNlU2FsYXJ5ID0gNTAwOwoJcHVibGljICRjb2ZmZWUgPSAyMDsKCXB1YmxpYyAkb3V0cHV0ID0gMjAwOwp9CgpjbGFzcyBNYXJrZXRlciBleHRlbmRzIEVtcGxveWVlCnsKCXB1YmxpYyAkYmFzZVNhbGFyeSA9IDQwMDsKCXB1YmxpYyAkY29mZmVlID0gMTU7CglwdWJsaWMgJG91dHB1dCA9IDE1MDsKfQoKY2xhc3MgRW5naW5lZXIgZXh0ZW5kcyBFbXBsb3llZQp7CglwdWJsaWMgJGJhc2VTYWxhcnkgPSA0MDA7CglwdWJsaWMgJGNvZmZlZSA9IDU7CglwdWJsaWMgJG91dHB1dCA9IDUwOwp9CgpjbGFzcyBBbmFseXN0IGV4dGVuZHMgRW1wbG95ZWUKewoJcHVibGljICRzYWxhcnkgPSA0MDA7CglwdWJsaWMgJGNvZmZlZSA9IDUwOwoJcHVibGljICRvdXRwdXQgPSA1Owp9CgpjbGFzcyBFbXBsb3llZUZhY3RvcnkKewoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaG9vc2VFbXBsb3llZSgkbmFtZSwgJHJhbmspCgl7CgkJaWYgKCRuYW1lID09ICJtZSIpIHsKCQkJcmV0dXJuIG5ldyBNYW5hZ2VyKCRyYW5rKTsKCQl9IGVsc2VpZiAoJG5hbWUgPT0gIm1hIikgewoJCQlyZXR1cm4gbmV3IE1hcmtldGVyKCRyYW5rKTsKCQl9IGVsc2VpZiAoJG5hbWUgPT0gImVuIikgewoJCQlyZXR1cm4gbmV3IEVuZ2luZWVyKCRyYW5rKTsKCQl9IGVsc2VpZiAoJG5hbWUgPT0gImFuIikgewoJCQlyZXR1cm4gbmV3IEFuYWx5c3QoJHJhbmspOwoJCX0KCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVFbXBsb3llZXMoJGVtcGxveWVlcykKCXsKCQkkbmV3ID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkZW1wbG95ZWVzIGFzICR3b3JrZXJzKSB7CgkJCQoJCQlwcmVnX21hdGNoX2FsbCgnL14oXGQqKShcd3syfSkoWzEtM10pJC9pJywgJHdvcmtlcnMsICRyZXMsIFBSRUdfU0VUX09SREVSKTsKCQkJJG51bWJlciA9ICRyZXNbMF1bMV07CgkJCSRuYW1lID0gJHJlc1swXVsyXTsKCQkJJHJhbmsgPSAkcmVzWzBdWzNdOwoJCQkKCQkJaWYgKCEkbnVtYmVyKSB7CgkJCQkkbnVtYmVyID0gMTsKCQkJfQoJCQkKCQkJZm9yICgkaSA9IDA7ICRpIDwgJG51bWJlcjsgJGkrKykgewoJCQkKCQkJCSRuZXdbXSA9IHNlbGY6OmNob29zZUVtcGxveWVlKCRuYW1lLCAkcmFuayk7CgkJCX0KCQl9CgkJcmV0dXJuICRuZXc7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQ2hpZWYoJGVtcGxveWVlKQoJewoJCXByZWdfbWF0Y2hfYWxsKCcvXihcd3syfSkoWzEtM10pJC9pJywgJGVtcGxveWVlLCAkcmVzLCBQUkVHX1NFVF9PUkRFUik7CgkJJG5hbWUgPSAkcmVzWzBdWzFdOwoJCSRyYW5rID0gJHJlc1swXVsyXTsKCQkKCQkkY2hpZWYgPSBzZWxmOjpjaG9vc2VFbXBsb3llZSgkbmFtZSwgJHJhbmspOwoJCSRjaGllZi0+b3V0cHV0ID0gMDsKCQkKCQlyZXR1cm4gJGNoaWVmOwoJfQp9CgokcHVyY2hhc2UgPSBuZXcgRGVwYXJ0bWVudCgi0JfQsNC60YPQv9C60LgiKTsKJHB1cmNoYXNlLT5hZGRFbXBsb3llZShFbXBsb3llZUZhY3Rvcnk6OmNyZWF0ZUVtcGxveWVlcyhhcnJheSgiOW1lMSIsICIzbWUyIiwgIjJtZTMiLCAiMm1hMSIpKSk7CiRwdXJjaGFzZS0+c2V0Q2hpZWYoRW1wbG95ZWVGYWN0b3J5OjpjcmVhdGVDaGllZigibWUyIikpOwoKJHNhbGVzID0gbmV3IERlcGFydG1lbnQoItCf0YDQvtC00LDQttC4Iik7CiRzYWxlcy0+YWRkRW1wbG95ZWUoRW1wbG95ZWVGYWN0b3J5OjpjcmVhdGVFbXBsb3llZXMoYXJyYXkoIjEybWUxIiwgIjZtYTEiLCAiM2FuMSIsICIyYW4yIikpKTsKJHNhbGVzLT5zZXRDaGllZihFbXBsb3llZUZhY3Rvcnk6OmNyZWF0ZUNoaWVmKCJtYTIiKSk7CgokYWRzID0gbmV3IERlcGFydG1lbnQoItCg0LXQutC70LDQvNCwIik7CiRhZHMtPmFkZEVtcGxveWVlKEVtcGxveWVlRmFjdG9yeTo6Y3JlYXRlRW1wbG95ZWVzKGFycmF5KCIxNW1hMSIsICIxMG1hMiIsICI4bWUxIiwgIjJlbjEiKSkpOwokYWRzLT5zZXRDaGllZihFbXBsb3llZUZhY3Rvcnk6OmNyZWF0ZUNoaWVmKCJtYTMiKSk7CgokbG9nID0gbmV3IERlcGFydG1lbnQoItCb0L7Qs9C40YHRgtC40LrQsCIpOwokbG9nLT5hZGRFbXBsb3llZShFbXBsb3llZUZhY3Rvcnk6OmNyZWF0ZUVtcGxveWVlcyhhcnJheSgiMTNtZTEiLCAiNW1lMiIsICI1ZW4xIikpKTsKJGxvZy0+c2V0Q2hpZWYoRW1wbG95ZWVGYWN0b3J5OjpjcmVhdGVDaGllZigibWUxIikpOwoKJGRlcGFydG1lbnRzID0gYXJyYXkoJHB1cmNoYXNlLCAkc2FsZXMsICRhZHMsICRsb2cpOwoKLy8g0JLQq9CS0J7QlApmdW5jdGlvbiBwYWRMZWZ0KCRzdHJpbmcsICRsZW5ndGgpIAp7CgkkY291bnRTdHJpbmcgPSBtYl9zdHJsZW4oJHN0cmluZyk7CglpZiAoJGNvdW50U3RyaW5nIDwgJGxlbmd0aCkgewoJCSRwYWQgPSAkbGVuZ3RoIC0gJGNvdW50U3RyaW5nOwoJCSRzdHJpbmcgPSBzdHJfcmVwZWF0KCIgIiwgJHBhZCkuJHN0cmluZzsKCX0KCXJldHVybiAkc3RyaW5nOwp9CgpmdW5jdGlvbiBwYWRSaWdodCgkc3RyaW5nLCAkbGVuZ3RoKSAKewoJJGNvdW50U3RyaW5nID0gbWJfc3RybGVuKCRzdHJpbmcpOwoJaWYgKCRjb3VudFN0cmluZyA8ICRsZW5ndGgpIHsKCQkkcGFkID0gJGxlbmd0aCAtICRjb3VudFN0cmluZzsKCQkkc3RyaW5nIC49IHN0cl9yZXBlYXQoIiAiLCAkcGFkKTsKCX0KCXJldHVybiAkc3RyaW5nOwp9CgovLyDQqNC40YDQuNC90LAg0LrQvtC70L7QvdC+0LoKJGNvbDEgPSAxNTsKJGNvbDIgPSAxMjsKJGNvbDMgPSAxMjsKJGNvbDQgPSAxMjsKJGNvbDUgPSAxMjsKJGNvbDYgPSAyMDsKCi8vINCX0LDQs9C+0LvQvtCy0L7QuiDRgtCw0LHQu9C40YbRiwplY2hvIHBhZFJpZ2h0KCLQlNC10L/QsNGA0YLQsNC80LXQvdGCIiwgJGNvbDEpIC4KICAgICBwYWRMZWZ0KCLRgdC+0YLRgC4iLCAkY29sMikgLgogICAgIHBhZExlZnQoItGC0YPQs9GALiIsICRjb2wzKSAuCiAgICAgcGFkTGVmdCgi0LrQvtGE0LUiLCAkY29sNCkgLiAKICAgICBwYWRMZWZ0KCLRgdGC0YAuIiwgJGNvbDUpIC4gCiAgICAgcGFkTGVmdCgi0YLRg9Cz0YAuL9GB0YLRgC4iLCAkY29sNikgLiJcbiI7CgovLyDQk9GA0LDQvdC40YbQsCDQt9Cw0LPQvtC70L7QstC60L7QsgplY2hvIHN0cl9yZXBlYXQoIi0iLCA3MCkuIlxuIjsKCiRzdW1Db3VudCA9IDA7CiRzdW1TYWxhcnkgPSAwOwokc3VtQ29mZmVlID0gMDsKJHN1bU91dHB1dCA9IDA7CiRzdW1FeHBlbmNlID0gMDsKCmZvcmVhY2ggKCRkZXBhcnRtZW50cyBhcyAkZGVwYXJ0bWVudCkgewoKCWVjaG8gcGFkUmlnaHQoJGRlcGFydG1lbnQtPm5hbWUsICRjb2wxKSAuCgkgICAgIHBhZExlZnQoY291bnQoJGRlcGFydG1lbnQtPnN0YWZmKSArIDEsICRjb2wyKSAuCgkgICAgIHBhZExlZnQoJGRlcGFydG1lbnQtPmdldFRvdGFsU2FsYXJ5KCksICRjb2wzKSAuCgkgICAgIHBhZExlZnQoJGRlcGFydG1lbnQtPmdldFRvdGFsQ29mZmVlKCksICRjb2w0KSAuIAoJICAgICBwYWRMZWZ0KCRkZXBhcnRtZW50LT5nZXRUb3RhbE91dHB1dCgpLCAkY29sNSkgLiAKCSAgICAgcGFkTGVmdChyb3VuZCgkZGVwYXJ0bWVudC0+Z2V0VG90YWxTYWxhcnkoKS8kZGVwYXJ0bWVudC0+Z2V0VG90YWxPdXRwdXQoKSwgMiksICRjb2w2KSAuIlxuIjsKCSAgICAgJHN1bUNvdW50ICs9IGNvdW50KCRkZXBhcnRtZW50LT5zdGFmZikgKyAxOwoJICAgICAkc3VtU2FsYXJ5ICs9ICRkZXBhcnRtZW50LT5nZXRUb3RhbFNhbGFyeSgpOwoJICAgICAkc3VtQ29mZmVlICs9ICRkZXBhcnRtZW50LT5nZXRUb3RhbENvZmZlZSgpOwoJICAgICAkc3VtT3V0cHV0ICs9ICRkZXBhcnRtZW50LT5nZXRUb3RhbE91dHB1dCgpOwoJICAgICAkc3VtRXhwZW5jZSArPSByb3VuZCgkZGVwYXJ0bWVudC0+Z2V0VG90YWxTYWxhcnkoKS8kZGVwYXJ0bWVudC0+Z2V0VG90YWxPdXRwdXQoKSwgMik7Cn0KCiRuID0gY291bnQoJGRlcGFydG1lbnRzKTsKCmVjaG8gcGFkUmlnaHQoItCh0YDQtdC00L3QtdC1IiwgJGNvbDEpIC4KCSAgICAgcGFkTGVmdCgkc3VtQ291bnQgLyAkbiwgJGNvbDIpIC4KCSAgICAgcGFkTGVmdCgkc3VtU2FsYXJ5IC8gJG4sICRjb2wzKSAuCgkgICAgIHBhZExlZnQoJHN1bUNvZmZlZSAvICRuLCAkY29sNCkgLiAKCSAgICAgcGFkTGVmdCgkc3VtT3V0cHV0IC8gJG4sICRjb2w1KSAuIAoJICAgICBwYWRMZWZ0KCRzdW1FeHBlbmNlIC8gJG4sICRjb2w2KSAuIlxuIjsKCSAgICAgCmVjaG8gcGFkUmlnaHQoItCS0YHQtdCz0L4iLCAkY29sMSkgLgoJICAgICBwYWRMZWZ0KCRzdW1Db3VudCwgJGNvbDIpIC4KCSAgICAgcGFkTGVmdCgkc3VtU2FsYXJ5LCAkY29sMykgLgoJICAgICBwYWRMZWZ0KCRzdW1Db2ZmZWUsICRjb2w0KSAuIAoJICAgICBwYWRMZWZ0KCRzdW1PdXRwdXQsICRjb2w1KSAuIAoJICAgICBwYWRMZWZ0KCRzdW1FeHBlbmNlLCAkY29sNikgLiJcbiI7