<?php
header("Content-Type: text/plain; charset=utf-8"); ?>
<?php
//объявление классов >>
abstract class Employee
{
public $salary;
public $coffee;
public $reports;
public function __construct($isDirector)
{
switch ($isDirector) {
case 1:
$this->salary *= 1.5;
$this->coffee *= 2;
$this->reports = 0;
break;
case 0:
break;
}
}
}
class Engineer extends Employee
{
public $salary = 200;
public $coffee = 5;
public $reports = 50;
}
class Marketolog extends Employee
{
public $salary = 400;
public $coffee = 15;
public $reports = 150;
}
class Manager extends Employee
{
public $salary = 500;
public $coffee = 20;
public $reports = 200;
}
class Analyst extends Employee
{
public $salary = 800;
public $coffee = 50;
public $reports = 5;
}
class Department
{
public $workers = array(); public function __construct($array)
{
$this->workers = $array;
}
public function doCount()
{
$c = count($this->workers, 2); return $c;
}
public function doSalary()
{
$sumSalary = 0;
foreach ($this->workers as $object) {
foreach ($object as $k => $v) {
if ($k === 'salary') {
$salary = $v;
}
}
$sumSalary += $salary;
}
return $sumSalary;
}
public function doCoffee()
{
$sumCoffee = 0;
foreach ($this->workers as $object) {
foreach ($object as $k => $v) {
if ($k === 'coffee') {
$coffee = $v;
}
}
$sumCoffee += $coffee;
}
return $sumCoffee;
}
public function doReports()
{
$sumReports = 0;
foreach ($this->workers as $object) {
foreach ($object as $k => $v) {
if ($k === 'reports') {
$reports = $v;
}
}
$sumReports += $reports;
}
return $sumReports;
}
public function doSalaryReports()
{
return $this->doSalary() / $this->doReports();
}
public function doShow()
{
$show[] = $this->doCount();
$show[] = $this->doSalary();
$show[] = $this->doCoffee();
$show[] = $this->doReports();
$show[] = $this->doSalaryReports();
return $show;
}
}
class Procurement extends Department
{
}
class Sales extends Department
{
}
class Advertising extends Department
{
}
class Logistic extends Department
{
}
//Создание работников(объектов) внутри департаментов(объектов) >>
function doEmployeeFirstRank($class, $count, $isDirector = 0)
{
for ($i = 1; $i <= $count; $i++) {
$employee = new $class($isDirector);
$employees[] = $employee;
}
return $employees;
}
function doEmployeeSecondRank($class, $count, $isDirector = 0)
{
for ($i = 1; $i <= $count; $i++) {
$employee = new $class($isDirector);
$employee->salary *= 1.25;
$employees[] = $employee;
}
return $employees;
}
function doEmployeeThirdRank($class, $number, $isDirector = 0)
{
for ($i = 1; $i <= $number; $i++) {
$employee = new $class($isDirector);
$employee->salary *= 1.5;
$employees[] = $employee;
}
return $employees;
}
$ma = 'Marketolog';
$me = 'Manager';
$an = 'Analyst';
$in = 'Engineer';
$procurement = new Procurement
(array_merge(doEmployeeFirstRank
($me, 9), doEmployeeSecondRank
($me, 3), doEmployeeThirdRank
($me, 2), doEmployeeFirstRank
($ma, 2), doEmployeeSecondRank
($me, 1, 1))); $sales = new Sales
(array_merge(doEmployeeFirstRank
($me, 12), doEmployeeFirstRank
($ma, 6), doEmployeeFirstRank
($an, 3), doEmployeeSecondRank
($an, 2), doEmployeeSecondRank
($ma, 1, 1))); $advertising = new Advertising
(array_merge(doEmployeeFirstRank
($ma, 15), doEmployeeSecondRank
($ma, 10), doEmployeeFirstRank
($me, 8), doEmployeeFirstRank
($in, 2), doEmployeeThirdRank
($ma, 1, 1))); $logistic = new Logistic
(array_merge(doEmployeeFirstRank
($me, 13), doEmployeeSecondRank
($me, 5), doEmployeeFirstRank
($in, 5), doEmployeeFirstRank
($me, 1, 1))); $procurement,
$sales,
$advertising,
$logistic
);
//Создание функций для вывода таблицы на экран и подсчет суммы по департаментам
function padRight($string, $arg)
{
if ($count <= 0) {
return $string;
}
return $string . $space;
}
function padLeft($string, $arg)
{
if ($count <= 0) {
return $string;
}
return $space . $string;
}
$text = 'Департамент сотр. тугр кофе стр. туг/стр.';
function letShow($array)
{
$col1 = 22;
$col2 = 11;
foreach ($array as $k => $str) {
if ($k == 0) {
echo padRight($str, $col1);
} else {
echo padLeft($str, $col2);
}
}
echo "\n";
}
function doAll()
{
}
$proc = $procurement->doShow();
$log = $logistic->doShow();
$adv = $advertising->doShow();
$sal = $sales->doShow();
$proc,
$log,
$adv,
$sal
);
$sumWorkers = 0;
$sumSal = 0;
$sumCoffee = 0;
$sumReports = 0;
$sumRepSal = 0;
foreach ($vek as $dep) {
foreach ($dep as $k => $v) {
switch ($k) {
case 1:
$sumWorkers += $v;
break;
case 2:
$sumSal += $v;
break;
case 3:
$sumCoffee += $v;
break;
case 4:
$sumReports += $v;
break;
case 5:
$sumRepSal += $v;
break;
}
}
}
$end[] = 'Всего';
$end[] = $sumWorkers;
$end[] = $sumSal;
$end[] = $sumCoffee;
$end[] = $sumReports;
$end[] = $sumRepSal / 4;
//Вывод на экран
letShow($textAr);
letShow($procurement->doShow());
letShow($logistic->doShow());
letShow($advertising->doShow());
letShow($sales->doShow());
letShow($end);
PD9waHAKaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKTsKPz4gCjw/cGhwCgptYl9pbnRlcm5hbF9lbmNvZGluZygiVVRGLTgiKTsKLy/QvtCx0YrRj9Cy0LvQtdC90LjQtSDQutC70LDRgdGB0L7QsiA+PgphYnN0cmFjdCBjbGFzcyBFbXBsb3llZQp7CiAgICBwdWJsaWMgJHNhbGFyeTsKICAgIHB1YmxpYyAkY29mZmVlOwogICAgcHVibGljICRyZXBvcnRzOwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpc0RpcmVjdG9yKQogICAgewogICAgICAgIHN3aXRjaCAoJGlzRGlyZWN0b3IpIHsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgJHRoaXMtPnNhbGFyeSAqPSAxLjU7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y29mZmVlICo9IDI7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVwb3J0cyA9IDA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CmNsYXNzIEVuZ2luZWVyIGV4dGVuZHMgRW1wbG95ZWUKewogICAgcHVibGljICRzYWxhcnkgPSAyMDA7CiAgICBwdWJsaWMgJGNvZmZlZSA9IDU7CiAgICBwdWJsaWMgJHJlcG9ydHMgPSA1MDsKfQoKY2xhc3MgTWFya2V0b2xvZyBleHRlbmRzIEVtcGxveWVlCnsKICAgIHB1YmxpYyAkc2FsYXJ5ID0gNDAwOwogICAgcHVibGljICRjb2ZmZWUgPSAxNTsKICAgIHB1YmxpYyAkcmVwb3J0cyA9IDE1MDsKfQpjbGFzcyBNYW5hZ2VyIGV4dGVuZHMgRW1wbG95ZWUKewogICAgcHVibGljICRzYWxhcnkgPSA1MDA7CiAgICBwdWJsaWMgJGNvZmZlZSA9IDIwOwogICAgcHVibGljICRyZXBvcnRzID0gMjAwOwp9CgpjbGFzcyBBbmFseXN0IGV4dGVuZHMgRW1wbG95ZWUKewogICAgcHVibGljICRzYWxhcnkgPSA4MDA7CiAgICBwdWJsaWMgJGNvZmZlZSA9IDUwOwogICAgcHVibGljICRyZXBvcnRzID0gNTsKfQpjbGFzcyBEZXBhcnRtZW50CnsKICAgIAogICAgcHVibGljICR3b3JrZXJzID0gYXJyYXkoKTsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYXJyYXkpCiAgICB7CiAgICAgICAgJHRoaXMtPndvcmtlcnMgPSAkYXJyYXk7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZG9Db3VudCgpCiAgICB7CiAgICAgICAgJGMgPSBjb3VudCgkdGhpcy0+d29ya2VycywgMik7CiAgICAgICAgcmV0dXJuICRjOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIGRvU2FsYXJ5KCkKICAgIHsKICAgIAkkc3VtU2FsYXJ5ID0gMDsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+d29ya2VycyBhcyAkb2JqZWN0KSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3QgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgIGlmICgkayA9PT0gJ3NhbGFyeScpIHsKICAgICAgICAgICAgICAgICAgICAkc2FsYXJ5ID0gJHY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHN1bVNhbGFyeSArPSAkc2FsYXJ5OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHN1bVNhbGFyeTsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBkb0NvZmZlZSgpCiAgICB7CiAgICAJJHN1bUNvZmZlZSA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPndvcmtlcnMgYXMgJG9iamVjdCkgewogICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0IGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICAgICBpZiAoJGsgPT09ICdjb2ZmZWUnKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvZmZlZSA9ICR2OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRzdW1Db2ZmZWUgKz0gJGNvZmZlZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzdW1Db2ZmZWU7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZG9SZXBvcnRzKCkKICAgIHsKICAgIAkkc3VtUmVwb3J0cyA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPndvcmtlcnMgYXMgJG9iamVjdCkgewogICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0IGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICAgICBpZiAoJGsgPT09ICdyZXBvcnRzJykgewogICAgICAgICAgICAgICAgICAgICRyZXBvcnRzID0gJHY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHN1bVJlcG9ydHMgKz0gJHJlcG9ydHM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc3VtUmVwb3J0czsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBkb1NhbGFyeVJlcG9ydHMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZG9TYWxhcnkoKSAvICR0aGlzLT5kb1JlcG9ydHMoKTsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBkb1Nob3coKQogICAgewogICAgICAgICRzaG93ICAgPSBhcnJheSgpOwogICAgICAgICRzaG93W10gPSBnZXRfY2xhc3MoJHRoaXMpOwogICAgICAgICRzaG93W10gPSAkdGhpcy0+ZG9Db3VudCgpOwogICAgICAgICRzaG93W10gPSAkdGhpcy0+ZG9TYWxhcnkoKTsKICAgICAgICAkc2hvd1tdID0gJHRoaXMtPmRvQ29mZmVlKCk7CiAgICAgICAgJHNob3dbXSA9ICR0aGlzLT5kb1JlcG9ydHMoKTsKICAgICAgICAkc2hvd1tdID0gJHRoaXMtPmRvU2FsYXJ5UmVwb3J0cygpOwogICAgICAgIHJldHVybiAkc2hvdzsKICAgIH0KICAgIAp9CgpjbGFzcyBQcm9jdXJlbWVudCBleHRlbmRzIERlcGFydG1lbnQKewp9CmNsYXNzIFNhbGVzIGV4dGVuZHMgRGVwYXJ0bWVudAp7Cn0KY2xhc3MgQWR2ZXJ0aXNpbmcgZXh0ZW5kcyBEZXBhcnRtZW50CnsKfQpjbGFzcyBMb2dpc3RpYyBleHRlbmRzIERlcGFydG1lbnQKewp9Ci8v0KHQvtC30LTQsNC90LjQtSDRgNCw0LHQvtGC0L3QuNC60L7QsijQvtCx0YrQtdC60YLQvtCyKSDQstC90YPRgtGA0Lgg0LTQtdC/0LDRgNGC0LDQvNC10L3RgtC+0LIo0L7QsdGK0LXQutGC0L7QsikgPj4KZnVuY3Rpb24gZG9FbXBsb3llZUZpcnN0UmFuaygkY2xhc3MsICRjb3VudCwgJGlzRGlyZWN0b3IgPSAwKQp7CiAgICAkZW1wbG95ZWVzID0gYXJyYXkoKTsKICAgIGZvciAoJGkgPSAxOyAkaSA8PSAkY291bnQ7ICRpKyspIHsKICAgICAgICAkZW1wbG95ZWUgICAgPSBuZXcgJGNsYXNzKCRpc0RpcmVjdG9yKTsKICAgICAgICAkZW1wbG95ZWVzW10gPSAkZW1wbG95ZWU7CiAgICB9CiAgICByZXR1cm4gJGVtcGxveWVlczsKfQpmdW5jdGlvbiBkb0VtcGxveWVlU2Vjb25kUmFuaygkY2xhc3MsICRjb3VudCwgJGlzRGlyZWN0b3IgPSAwKQp7CiAgICAkZW1wbG95ZWVzID0gYXJyYXkoKTsKICAgIGZvciAoJGkgPSAxOyAkaSA8PSAkY291bnQ7ICRpKyspIHsKICAgICAgICAkZW1wbG95ZWUgPSBuZXcgJGNsYXNzKCRpc0RpcmVjdG9yKTsKICAgICAgICAkZW1wbG95ZWUtPnNhbGFyeSAqPSAxLjI1OwogICAgICAgICRlbXBsb3llZXNbXSA9ICRlbXBsb3llZTsKICAgIH0KICAgIHJldHVybiAkZW1wbG95ZWVzOwp9CmZ1bmN0aW9uIGRvRW1wbG95ZWVUaGlyZFJhbmsoJGNsYXNzLCAkbnVtYmVyLCAkaXNEaXJlY3RvciA9IDApCnsKICAgICRlbXBsb3llZXMgPSBhcnJheSgpOwogICAgZm9yICgkaSA9IDE7ICRpIDw9ICRudW1iZXI7ICRpKyspIHsKICAgICAgICAkZW1wbG95ZWUgPSBuZXcgJGNsYXNzKCRpc0RpcmVjdG9yKTsKICAgICAgICAkZW1wbG95ZWUtPnNhbGFyeSAqPSAxLjU7CiAgICAgICAgJGVtcGxveWVlc1tdID0gJGVtcGxveWVlOwogICAgfQogICAgcmV0dXJuICRlbXBsb3llZXM7Cn0KJG1hICAgICAgICAgID0gJ01hcmtldG9sb2cnOwokbWUgICAgICAgICAgPSAnTWFuYWdlcic7CiRhbiAgICAgICAgICA9ICdBbmFseXN0JzsKJGluICAgICAgICAgID0gJ0VuZ2luZWVyJzsKJHByb2N1cmVtZW50ID0gbmV3IFByb2N1cmVtZW50KGFycmF5X21lcmdlKGRvRW1wbG95ZWVGaXJzdFJhbmsoJG1lLCA5KSwgZG9FbXBsb3llZVNlY29uZFJhbmsoJG1lLCAzKSwgZG9FbXBsb3llZVRoaXJkUmFuaygkbWUsIDIpLCBkb0VtcGxveWVlRmlyc3RSYW5rKCRtYSwgMiksIGRvRW1wbG95ZWVTZWNvbmRSYW5rKCRtZSwgMSwgMSkpKTsKJHNhbGVzICAgICAgID0gbmV3IFNhbGVzKGFycmF5X21lcmdlKGRvRW1wbG95ZWVGaXJzdFJhbmsoJG1lLCAxMiksIGRvRW1wbG95ZWVGaXJzdFJhbmsoJG1hLCA2KSwgZG9FbXBsb3llZUZpcnN0UmFuaygkYW4sIDMpLCBkb0VtcGxveWVlU2Vjb25kUmFuaygkYW4sIDIpLCBkb0VtcGxveWVlU2Vjb25kUmFuaygkbWEsIDEsIDEpKSk7CiRhZHZlcnRpc2luZyA9IG5ldyBBZHZlcnRpc2luZyhhcnJheV9tZXJnZShkb0VtcGxveWVlRmlyc3RSYW5rKCRtYSwgMTUpLCBkb0VtcGxveWVlU2Vjb25kUmFuaygkbWEsIDEwKSwgZG9FbXBsb3llZUZpcnN0UmFuaygkbWUsIDgpLCBkb0VtcGxveWVlRmlyc3RSYW5rKCRpbiwgMiksIGRvRW1wbG95ZWVUaGlyZFJhbmsoJG1hLCAxLCAxKSkpOwokbG9naXN0aWMgICAgPSBuZXcgTG9naXN0aWMoYXJyYXlfbWVyZ2UoZG9FbXBsb3llZUZpcnN0UmFuaygkbWUsIDEzKSwgZG9FbXBsb3llZVNlY29uZFJhbmsoJG1lLCA1KSwgZG9FbXBsb3llZUZpcnN0UmFuaygkaW4sIDUpLCBkb0VtcGxveWVlRmlyc3RSYW5rKCRtZSwgMSwgMSkpKTsKJHZla3RvciAgICAgID0gYXJyYXkoCiAgICAkcHJvY3VyZW1lbnQsCiAgICAkc2FsZXMsCiAgICAkYWR2ZXJ0aXNpbmcsCiAgICAkbG9naXN0aWMKKTsKCi8v0KHQvtC30LTQsNC90LjQtSDRhNGD0L3QutGG0LjQuSDQtNC70Y8g0LLRi9Cy0L7QtNCwINGC0LDQsdC70LjRhtGLINC90LAg0Y3QutGA0LDQvSDQuCDQv9C+0LTRgdGH0LXRgiDRgdGD0LzQvNGLINC/0L4g0LTQtdC/0LDRgNGC0LDQvNC10L3RgtCw0LwKZnVuY3Rpb24gcGFkUmlnaHQoJHN0cmluZywgJGFyZykKewogICAgJGNvdW50ID0gJGFyZyAtIG1iX3N0cmxlbigkc3RyaW5nKTsKICAgIGlmICgkY291bnQgPD0gMCkgewogICAgICAgIHJldHVybiAkc3RyaW5nOwogICAgfQogICAgJHNwYWNlID0gc3RyX3JlcGVhdCgnICcsICRjb3VudCk7CiAgICByZXR1cm4gJHN0cmluZyAuICRzcGFjZTsKfQpmdW5jdGlvbiBwYWRMZWZ0KCRzdHJpbmcsICRhcmcpCnsKICAgICRjb3VudCA9ICRhcmcgLSBtYl9zdHJsZW4oJHN0cmluZyk7CiAgICBpZiAoJGNvdW50IDw9IDApIHsKICAgICAgICByZXR1cm4gJHN0cmluZzsKICAgIH0KICAgICRzcGFjZSA9IHN0cl9yZXBlYXQoJyAnLCAkY291bnQpOwogICAgcmV0dXJuICRzcGFjZSAuICRzdHJpbmc7Cn0KCiR0ZXh0ICAgPSAn0JTQtdC/0LDRgNGC0LDQvNC10L3RgiDRgdC+0YLRgC4g0YLRg9Cz0YAg0LrQvtGE0LUg0YHRgtGALiDRgtGD0LMv0YHRgtGALic7CiR0ZXh0QXIgPSBleHBsb2RlKCcgJywgJHRleHQpOwoKCmZ1bmN0aW9uIGxldFNob3coJGFycmF5KQp7CiAgICAkY29sMSA9IDIyOwogICAgJGNvbDIgPSAxMTsKICAgIGZvcmVhY2ggKCRhcnJheSBhcyAkayA9PiAkc3RyKSB7CiAgICAgICAgaWYgKCRrID09IDApIHsKICAgICAgICAgICAgZWNobyBwYWRSaWdodCgkc3RyLCAkY29sMSk7CiAgICAgICAgfSBlbHNlaWYgKGlzX251bWVyaWMoJHN0cikgJiYgJGsgPT0gNSkgewogICAgICAgICAgICAKICAgICAgICAgICAgZWNobyBwYWRMZWZ0KChudW1iZXJfZm9ybWF0KCRzdHIsIDIpKSwgJGNvbDIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVjaG8gcGFkTGVmdCgkc3RyLCAkY29sMik7CiAgICAgICAgfQogICAgICAgIAogICAgfQogICAgZWNobyAiXG4iOwp9CmZ1bmN0aW9uIGRvQWxsKCkKewogICAgCn0KCiRwcm9jID0gJHByb2N1cmVtZW50LT5kb1Nob3coKTsKJGxvZyAgPSAkbG9naXN0aWMtPmRvU2hvdygpOwokYWR2ICA9ICRhZHZlcnRpc2luZy0+ZG9TaG93KCk7CiRzYWwgID0gJHNhbGVzLT5kb1Nob3coKTsKJHZlayAgPSBhcnJheSgKICAgICRwcm9jLAogICAgJGxvZywKICAgICRhZHYsCiAgICAkc2FsCik7Cgokc3VtV29ya2VycyA9IDA7CiRzdW1TYWwgICAgID0gMDsKJHN1bUNvZmZlZSAgPSAwOwokc3VtUmVwb3J0cyA9IDA7CiRzdW1SZXBTYWwgID0gMDsKJGVuZCAgICAgICAgPSBhcnJheSgpOwpmb3JlYWNoICgkdmVrIGFzICRkZXApIHsKICAgIGZvcmVhY2ggKCRkZXAgYXMgJGsgPT4gJHYpIHsKICAgICAgICBzd2l0Y2ggKCRrKSB7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICRzdW1Xb3JrZXJzICs9ICR2OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICRzdW1TYWwgKz0gJHY7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgJHN1bUNvZmZlZSArPSAkdjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAkc3VtUmVwb3J0cyArPSAkdjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAkc3VtUmVwU2FsICs9ICR2OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgCn0KJGVuZFtdID0gJ9CS0YHQtdCz0L4nOwokZW5kW10gPSAkc3VtV29ya2VyczsKJGVuZFtdID0gJHN1bVNhbDsKJGVuZFtdID0gJHN1bUNvZmZlZTsKJGVuZFtdID0gJHN1bVJlcG9ydHM7CiRlbmRbXSA9ICRzdW1SZXBTYWwgLyA0OwoKLy/QktGL0LLQvtC0INC90LAg0Y3QutGA0LDQvQpsZXRTaG93KCR0ZXh0QXIpOwplY2hvIHN0cl9yZXBlYXQoJy0nLCA4MCkgLiAiXG4iOwpsZXRTaG93KCRwcm9jdXJlbWVudC0+ZG9TaG93KCkpOwpsZXRTaG93KCRsb2dpc3RpYy0+ZG9TaG93KCkpOwpsZXRTaG93KCRhZHZlcnRpc2luZy0+ZG9TaG93KCkpOwpsZXRTaG93KCRzYWxlcy0+ZG9TaG93KCkpOwplY2hvIHN0cl9yZXBlYXQoJy0nLCA4MCkgLiAiXG4iOwpsZXRTaG93KCRlbmQpOwoKCgoKCgoKCgo=