<?php
abstract class Employee
{
private $rate;
private $litresOfCoffee;
private $pgsOfDocs;
private $rank;
private $boss;
public function __construct($rate, $litresOfCoffee, $pgsOfDocs, $rank, $boss = false){
$this->rate = $rate;
$this->litresOfCoffee = $litresOfCoffee;
$this->pgsOfDocs = $pgsOfDocs;
$this->rank = $rank;
$this->boss = $boss;
if ($this->rank > 1) {
$this->setRateWithRank();
}
if ($boss) {
$this->setBossPrivelege();
}
}
public function getRate(){
return $this->rate;
}
public function getCoffee(){
return $this->litresOfCoffee;
}
public function getPages(){
return $this->pgsOfDocs;
}
private function setRateWithRank(){
if ($this->rank == 2) {
$this->rate = $this->rate * 1.25;
}
if ($this->rank == 3) {
$this->rate = $this->rate * 1.50;
}
}
private function setBossPrivelege(){
$this->rate = $this->rate * 1.50;
$this->litresOfCoffee = $this->litresOfCoffee * 2;
$this->pgsOfDocs = 0;
}
}
class Manager extends Employee
{}
class Marketer extends Employee
{}
class Engineer extends Employee
{}
class Analyst extends Employee
{}
class Department
{
private $name;
private $employees;
public function __construct($name, $employees){
$this->name = $name;
$this->employees = $employees;
}
public function getNumOfEmployees(){
$numOfEmployees = 0;
foreach ($this->employees as list($num, $position)) { $numOfEmployees += $num;
}
return $numOfEmployees;
}
public function getSalaryOfEmployees(){
$salaryOfEmployees = 0;
foreach ($this->employees as list($num, $position)) { $salaryOfEmployees += $position->getRate() * $num;
}
return $salaryOfEmployees;
}
public function getDrunkCoffee(){
$drunkCoffee = 0;
foreach ($this->employees as list($num, $position)) { $drunkCoffee += $position->getCoffee() * $num;
}
return $drunkCoffee;
}
public function getPagesOfDocs(){
$pagesOfDocs = 0;
foreach ($this->employees as list($num, $position)) { $pagesOfDocs += $position->getPages() * $num;
}
return $pagesOfDocs;
}
public function getTugricsPerPage(){
return round(($this->getSalaryOfEmployees() / $this->getPagesOfDocs()), 1); }
public function getNameOfDept(){
return $this->name;
}
}
class Company
{
private $departments;
private $name;
public function __construct($name, $departments)
{
$this->name = $name;
$this->departments = $departments;
}
public function getNameOfCompany(){
return $this->name;
}
public function getDepartments(){
return $this->departments;
}
}
function padRight($string, $widthOfCol){
if ($lengthOfString < $widthOfCol) {
$formattedString = $string . str_repeat(" ", $widthOfCol - $lengthOfString); return $formattedString;
}
}
function padLeft($string, $widthOfCol){
if ($lengthOfString < $widthOfCol) {
$formattedString = str_repeat(" ", $widthOfCol - $lengthOfString) . $string; return $formattedString;
}
}
//существующие виды сотрудников в компании
$manager1 = new Manager(500, 20, 200, 1);
$manager2 = new Manager(500, 20, 200, 2);
$manager2boss = new Manager(500, 20, 200, 2, true);
$manager3 = new Manager(500, 20, 200, 3);
$marketer1 = new Marketer(400, 15, 150, 1);
$analyst1 = new Analyst(800, 50, 5, 1);
$analyst2 = new Analyst(800, 50, 5, 2);
$marketer2boss = new Marketer(400, 15, 150, 2, true);
$marketer2 = new Marketer(400, 15, 150, 2);
$engineer1 = new Engineer(200, 5, 50, 1);
$marketer3boss = new Marketer(400, 15, 150, 3, true);
$manager1boss = new Manager(500, 20, 200, 1, true);
//Сотрудники в департаментах
$procurementDepartmentEmpls = [
[9, $manager1],
[3, $manager2],
[2, $manager3],
[2, $marketer1],
[1, $manager2boss]
];
$salesDepartmentEmpls = [
[12, $manager1],
[6, $marketer1],
[3, $analyst1],
[2, $analyst2],
[1, $marketer2boss]
];
$advertisingDepartmentEmpls = [
[15, $marketer1],
[10, $marketer2],
[8, $manager1],
[2, $engineer1],
[1, $marketer3boss]
];
$logisticsDepartmentEmpls = [
[13, $manager1],
[5, $manager2],
[5, $engineer1],
[1, $manager1boss],
];
//Департаменты
$departments = [
$procurementDepartment = new Department("Закупок", $procurementDepartmentEmpls),
$salesDepartment = new Department("Продаж", $salesDepartmentEmpls),
$advertisingDepartment = new Department("Рекламы", $advertisingDepartmentEmpls),
$logisticsDepartment = new Department("Логистики", $logisticsDepartmentEmpls),
];
//Компания
$company = new Company("Вектор", $departments);
//Вывод информации
$col1 = 15;
$col2 = 10;
$col3 = 10;
$col4 = 10;
$col5 = 10;
$col6 = 12;
echo padRight("Департамент", $col1) .
padLeft("Сотр.", $col2) .
padLeft("Тугр.", $col3) .
padLeft("Кофе", $col4) .
padLeft("Стр.", $col5) .
padLeft("Тугр./стр.", $col6) . "\n\n";
$allEmployees = 0;
$allSalary = 0;
$allCoffee = 0;
$allPages = 0;
$allTugPerPgs = 0;
foreach ($company->getDepartments() as $department) {
echo padRight($department->getNameOfDept(), $col1) .
padLeft($department->getNumOfEmployees(), $col2) .
padLeft($department->getSalaryOfEmployees(), $col3) .
padLeft($department->getDrunkCoffee(), $col4) .
padLeft($department->getPagesOfDocs(), $col5) .
padLeft($department->getTugricsPerPage(), $col6) . "\n";
$allEmployees += $department->getNumOfEmployees();
$allSalary += $department->getSalaryOfEmployees();
$allCoffee += $department->getDrunkCoffee();
$allPages += $department->getPagesOfDocs();
$allTugPerPgs += $department->getTugricsPerPage();
}
$numOfDepartments = count($company->getDepartments());
echo padRight("Среднее", $col1) .
padLeft
(round(($allEmployees / $numOfDepartments),1), $col2) . padLeft
(round(($allSalary / $numOfDepartments), 1), $col3) . padLeft
(round(($allCoffee / $numOfDepartments), 1), $col4) . padLeft
(round(($allPages / $numOfDepartments), 1), $col5) . padLeft
(round(($allTugPerPgs / $numOfDepartments), 1), $col6) . "\n";
echo padRight("Всего", $col1) .
padLeft($allEmployees, $col2) .
padLeft($allSalary, $col3) .
padLeft($allCoffee, $col4) .
padLeft($allPages, $col5) .
padLeft($allTugPerPgs, $col6) . "\n";
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgphYnN0cmFjdCBjbGFzcyBFbXBsb3llZQp7Cglwcml2YXRlICRyYXRlOwoJcHJpdmF0ZSAkbGl0cmVzT2ZDb2ZmZWU7Cglwcml2YXRlICRwZ3NPZkRvY3M7Cglwcml2YXRlICRyYW5rOwoJcHJpdmF0ZSAkYm9zczsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJhdGUsICRsaXRyZXNPZkNvZmZlZSwgJHBnc09mRG9jcywgJHJhbmssICRib3NzID0gZmFsc2UpewoJCSR0aGlzLT5yYXRlID0gJHJhdGU7CgkJJHRoaXMtPmxpdHJlc09mQ29mZmVlID0gJGxpdHJlc09mQ29mZmVlOwoJCSR0aGlzLT5wZ3NPZkRvY3MgPSAkcGdzT2ZEb2NzOwoJCSR0aGlzLT5yYW5rID0gJHJhbms7CgkJJHRoaXMtPmJvc3MgPSAkYm9zczsKCQlpZiAoJHRoaXMtPnJhbmsgPiAxKSB7CgkJCSR0aGlzLT5zZXRSYXRlV2l0aFJhbmsoKTsKCQl9CgkJaWYgKCRib3NzKSB7CgkJCSR0aGlzLT5zZXRCb3NzUHJpdmVsZWdlKCk7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRSYXRlKCl7CgkJcmV0dXJuICR0aGlzLT5yYXRlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRDb2ZmZWUoKXsKCQlyZXR1cm4gJHRoaXMtPmxpdHJlc09mQ29mZmVlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRQYWdlcygpewoJCXJldHVybiAkdGhpcy0+cGdzT2ZEb2NzOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gc2V0UmF0ZVdpdGhSYW5rKCl7CgkJaWYgKCR0aGlzLT5yYW5rID09IDIpIHsKCQkJJHRoaXMtPnJhdGUgPSAkdGhpcy0+cmF0ZSAqIDEuMjU7CgkJfQoJCWlmICgkdGhpcy0+cmFuayA9PSAzKSB7CgkJCSR0aGlzLT5yYXRlID0gJHRoaXMtPnJhdGUgKiAxLjUwOwoJCX0KCX0KCglwcml2YXRlIGZ1bmN0aW9uIHNldEJvc3NQcml2ZWxlZ2UoKXsKCQkkdGhpcy0+cmF0ZSA9ICR0aGlzLT5yYXRlICogMS41MDsKCQkkdGhpcy0+bGl0cmVzT2ZDb2ZmZWUgPSAkdGhpcy0+bGl0cmVzT2ZDb2ZmZWUgKiAyOwoJCSR0aGlzLT5wZ3NPZkRvY3MgPSAwOwoJfQp9CgpjbGFzcyBNYW5hZ2VyIGV4dGVuZHMgRW1wbG95ZWUKe30KY2xhc3MgTWFya2V0ZXIgZXh0ZW5kcyBFbXBsb3llZQp7fQpjbGFzcyBFbmdpbmVlciBleHRlbmRzIEVtcGxveWVlCnt9CmNsYXNzIEFuYWx5c3QgZXh0ZW5kcyBFbXBsb3llZQp7fQoKY2xhc3MgRGVwYXJ0bWVudAp7Cglwcml2YXRlICRuYW1lOwoJcHJpdmF0ZSAkZW1wbG95ZWVzOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJGVtcGxveWVlcyl7CgkJJHRoaXMtPm5hbWUgPSAkbmFtZTsKCQkkdGhpcy0+ZW1wbG95ZWVzID0gJGVtcGxveWVlczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtT2ZFbXBsb3llZXMoKXsKCQkkbnVtT2ZFbXBsb3llZXMgPSAwOwoJCWZvcmVhY2ggKCR0aGlzLT5lbXBsb3llZXMgYXMgbGlzdCgkbnVtLCAkcG9zaXRpb24pKSB7CgkJCSRudW1PZkVtcGxveWVlcyArPSAkbnVtOwoJCX0KCQlyZXR1cm4gJG51bU9mRW1wbG95ZWVzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRTYWxhcnlPZkVtcGxveWVlcygpewoJCSRzYWxhcnlPZkVtcGxveWVlcyA9IDA7CgkJZm9yZWFjaCAoJHRoaXMtPmVtcGxveWVlcyBhcyBsaXN0KCRudW0sICRwb3NpdGlvbikpIHsKCQkJJHNhbGFyeU9mRW1wbG95ZWVzICs9ICRwb3NpdGlvbi0+Z2V0UmF0ZSgpICogJG51bTsJCgkJfQoJCXJldHVybiAkc2FsYXJ5T2ZFbXBsb3llZXM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldERydW5rQ29mZmVlKCl7CgkJJGRydW5rQ29mZmVlID0gMDsKCQlmb3JlYWNoICgkdGhpcy0+ZW1wbG95ZWVzIGFzIGxpc3QoJG51bSwgJHBvc2l0aW9uKSkgewoJCQkkZHJ1bmtDb2ZmZWUgKz0gJHBvc2l0aW9uLT5nZXRDb2ZmZWUoKSAqICRudW07CgkJfQoJCXJldHVybiAkZHJ1bmtDb2ZmZWU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFBhZ2VzT2ZEb2NzKCl7CgkJJHBhZ2VzT2ZEb2NzID0gMDsKCQlmb3JlYWNoICgkdGhpcy0+ZW1wbG95ZWVzIGFzIGxpc3QoJG51bSwgJHBvc2l0aW9uKSkgewoJCQkkcGFnZXNPZkRvY3MgKz0gJHBvc2l0aW9uLT5nZXRQYWdlcygpICogJG51bTsKCQl9CgkJcmV0dXJuICRwYWdlc09mRG9jczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VHVncmljc1BlclBhZ2UoKXsKCQlyZXR1cm4gcm91bmQoKCR0aGlzLT5nZXRTYWxhcnlPZkVtcGxveWVlcygpIC8gJHRoaXMtPmdldFBhZ2VzT2ZEb2NzKCkpLCAxKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZU9mRGVwdCgpewoJCXJldHVybiAkdGhpcy0+bmFtZTsKCX0KCn0KCmNsYXNzIENvbXBhbnkKewoJcHJpdmF0ZSAkZGVwYXJ0bWVudHM7Cglwcml2YXRlICRuYW1lOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJGRlcGFydG1lbnRzKQoJewoJCSR0aGlzLT5uYW1lID0gJG5hbWU7CgkJJHRoaXMtPmRlcGFydG1lbnRzID0gJGRlcGFydG1lbnRzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lT2ZDb21wYW55KCl7CgkJcmV0dXJuICR0aGlzLT5uYW1lOwoJfQoJcHVibGljIGZ1bmN0aW9uIGdldERlcGFydG1lbnRzKCl7CgkJcmV0dXJuICR0aGlzLT5kZXBhcnRtZW50czsKCX0KfQoKZnVuY3Rpb24gcGFkUmlnaHQoJHN0cmluZywgJHdpZHRoT2ZDb2wpewoJJGxlbmd0aE9mU3RyaW5nID0gbWJfc3RybGVuKCRzdHJpbmcpOwoJaWYgKCRsZW5ndGhPZlN0cmluZyA8ICR3aWR0aE9mQ29sKSB7CgkJJGZvcm1hdHRlZFN0cmluZyA9ICRzdHJpbmcgLiBzdHJfcmVwZWF0KCIgIiwgJHdpZHRoT2ZDb2wgLSAkbGVuZ3RoT2ZTdHJpbmcpOwoJCXJldHVybiAkZm9ybWF0dGVkU3RyaW5nOwoJfQp9CgpmdW5jdGlvbiBwYWRMZWZ0KCRzdHJpbmcsICR3aWR0aE9mQ29sKXsKCSRsZW5ndGhPZlN0cmluZyA9IG1iX3N0cmxlbigkc3RyaW5nKTsKCWlmICgkbGVuZ3RoT2ZTdHJpbmcgPCAkd2lkdGhPZkNvbCkgewoJCSRmb3JtYXR0ZWRTdHJpbmcgPSBzdHJfcmVwZWF0KCIgIiwgJHdpZHRoT2ZDb2wgLSAkbGVuZ3RoT2ZTdHJpbmcpIC4gJHN0cmluZzsKCQlyZXR1cm4gJGZvcm1hdHRlZFN0cmluZzsKCX0KfQovL9GB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSDQstC40LTRiyDRgdC+0YLRgNGD0LTQvdC40LrQvtCyINCyINC60L7QvNC/0LDQvdC40LgKJG1hbmFnZXIxID0gbmV3IE1hbmFnZXIoNTAwLCAyMCwgMjAwLCAxKTsKJG1hbmFnZXIyID0gbmV3IE1hbmFnZXIoNTAwLCAyMCwgMjAwLCAyKTsKJG1hbmFnZXIyYm9zcyA9IG5ldyBNYW5hZ2VyKDUwMCwgMjAsIDIwMCwgMiwgdHJ1ZSk7CiRtYW5hZ2VyMyA9IG5ldyBNYW5hZ2VyKDUwMCwgMjAsIDIwMCwgMyk7CiRtYXJrZXRlcjEgPSBuZXcgTWFya2V0ZXIoNDAwLCAxNSwgMTUwLCAxKTsKJGFuYWx5c3QxID0gbmV3IEFuYWx5c3QoODAwLCA1MCwgNSwgMSk7CiRhbmFseXN0MiA9IG5ldyBBbmFseXN0KDgwMCwgNTAsIDUsIDIpOwokbWFya2V0ZXIyYm9zcyA9IG5ldyBNYXJrZXRlcig0MDAsIDE1LCAxNTAsIDIsIHRydWUpOwokbWFya2V0ZXIyID0gbmV3IE1hcmtldGVyKDQwMCwgMTUsIDE1MCwgMik7CiRlbmdpbmVlcjEgPSBuZXcgRW5naW5lZXIoMjAwLCA1LCA1MCwgMSk7CiRtYXJrZXRlcjNib3NzID0gbmV3IE1hcmtldGVyKDQwMCwgMTUsIDE1MCwgMywgdHJ1ZSk7CiRtYW5hZ2VyMWJvc3MgPSBuZXcgTWFuYWdlcig1MDAsIDIwLCAyMDAsIDEsIHRydWUpOwovL9Ch0L7RgtGA0YPQtNC90LjQutC4INCyINC00LXQv9Cw0YDRgtCw0LzQtdC90YLQsNGFCiRwcm9jdXJlbWVudERlcGFydG1lbnRFbXBscyA9IFsKCVs5LCAkbWFuYWdlcjFdLAoJWzMsICRtYW5hZ2VyMl0sCglbMiwgJG1hbmFnZXIzXSwKCVsyLCAkbWFya2V0ZXIxXSwKCVsxLCAkbWFuYWdlcjJib3NzXQpdOwokc2FsZXNEZXBhcnRtZW50RW1wbHMgPSBbCglbMTIsICRtYW5hZ2VyMV0sCglbNiwgJG1hcmtldGVyMV0sCglbMywgJGFuYWx5c3QxXSwKCVsyLCAkYW5hbHlzdDJdLAoJWzEsICRtYXJrZXRlcjJib3NzXQpdOwokYWR2ZXJ0aXNpbmdEZXBhcnRtZW50RW1wbHMgPSBbCglbMTUsICRtYXJrZXRlcjFdLAoJWzEwLCAkbWFya2V0ZXIyXSwKCVs4LCAkbWFuYWdlcjFdLAoJWzIsICRlbmdpbmVlcjFdLAoJWzEsICRtYXJrZXRlcjNib3NzXQpdOwokbG9naXN0aWNzRGVwYXJ0bWVudEVtcGxzID0gWwoJWzEzLCAkbWFuYWdlcjFdLAoJWzUsICRtYW5hZ2VyMl0sCglbNSwgJGVuZ2luZWVyMV0sCglbMSwgJG1hbmFnZXIxYm9zc10sCl07Ci8v0JTQtdC/0LDRgNGC0LDQvNC10L3RgtGLCiRkZXBhcnRtZW50cyA9IFsKCSRwcm9jdXJlbWVudERlcGFydG1lbnQgPSBuZXcgRGVwYXJ0bWVudCgi0JfQsNC60YPQv9C+0LoiLCAkcHJvY3VyZW1lbnREZXBhcnRtZW50RW1wbHMpLAoJJHNhbGVzRGVwYXJ0bWVudCA9IG5ldyBEZXBhcnRtZW50KCLQn9GA0L7QtNCw0LYiLCAkc2FsZXNEZXBhcnRtZW50RW1wbHMpLAoJJGFkdmVydGlzaW5nRGVwYXJ0bWVudCA9IG5ldyBEZXBhcnRtZW50KCLQoNC10LrQu9Cw0LzRiyIsICRhZHZlcnRpc2luZ0RlcGFydG1lbnRFbXBscyksCgkkbG9naXN0aWNzRGVwYXJ0bWVudCA9IG5ldyBEZXBhcnRtZW50KCLQm9C+0LPQuNGB0YLQuNC60LgiLCAkbG9naXN0aWNzRGVwYXJ0bWVudEVtcGxzKSwKXTsKLy/QmtC+0LzQv9Cw0L3QuNGPCiRjb21wYW55ID0gbmV3IENvbXBhbnkoItCS0LXQutGC0L7RgCIsICRkZXBhcnRtZW50cyk7CgovL9CS0YvQstC+0LQg0LjQvdGE0L7RgNC80LDRhtC40LgKJGNvbDEgPSAxNTsKJGNvbDIgPSAxMDsKJGNvbDMgPSAxMDsKJGNvbDQgPSAxMDsKJGNvbDUgPSAxMDsKJGNvbDYgPSAxMjsKCmVjaG8gcGFkUmlnaHQoItCU0LXQv9Cw0YDRgtCw0LzQtdC90YIiLCAkY29sMSkgLgogICAgIHBhZExlZnQoItCh0L7RgtGALiIsICRjb2wyKSAuIAogICAgIHBhZExlZnQoItCi0YPQs9GALiIsICRjb2wzKSAuIAogICAgIHBhZExlZnQoItCa0L7RhNC1IiwgJGNvbDQpIC4gCiAgICAgcGFkTGVmdCgi0KHRgtGALiIsICRjb2w1KSAuIAogICAgIHBhZExlZnQoItCi0YPQs9GALi/RgdGC0YAuIiwgJGNvbDYpIC4gIlxuXG4iOwoKJGFsbEVtcGxveWVlcyA9IDA7CiRhbGxTYWxhcnkgPSAwOwokYWxsQ29mZmVlID0gMDsKJGFsbFBhZ2VzID0gMDsKJGFsbFR1Z1BlclBncyA9IDA7Cgpmb3JlYWNoICgkY29tcGFueS0+Z2V0RGVwYXJ0bWVudHMoKSBhcyAkZGVwYXJ0bWVudCkgewoKCWVjaG8gcGFkUmlnaHQoJGRlcGFydG1lbnQtPmdldE5hbWVPZkRlcHQoKSwgJGNvbDEpIC4KCXBhZExlZnQoJGRlcGFydG1lbnQtPmdldE51bU9mRW1wbG95ZWVzKCksICRjb2wyKSAuCglwYWRMZWZ0KCRkZXBhcnRtZW50LT5nZXRTYWxhcnlPZkVtcGxveWVlcygpLCAkY29sMykgLgoJcGFkTGVmdCgkZGVwYXJ0bWVudC0+Z2V0RHJ1bmtDb2ZmZWUoKSwgJGNvbDQpIC4KCXBhZExlZnQoJGRlcGFydG1lbnQtPmdldFBhZ2VzT2ZEb2NzKCksICRjb2w1KSAuIAoJcGFkTGVmdCgkZGVwYXJ0bWVudC0+Z2V0VHVncmljc1BlclBhZ2UoKSwgJGNvbDYpIC4gIlxuIjsKCgkkYWxsRW1wbG95ZWVzICs9ICRkZXBhcnRtZW50LT5nZXROdW1PZkVtcGxveWVlcygpOwoJJGFsbFNhbGFyeSArPSAkZGVwYXJ0bWVudC0+Z2V0U2FsYXJ5T2ZFbXBsb3llZXMoKTsKCSRhbGxDb2ZmZWUgKz0gJGRlcGFydG1lbnQtPmdldERydW5rQ29mZmVlKCk7CgkkYWxsUGFnZXMgKz0gJGRlcGFydG1lbnQtPmdldFBhZ2VzT2ZEb2NzKCk7CgkkYWxsVHVnUGVyUGdzICs9ICRkZXBhcnRtZW50LT5nZXRUdWdyaWNzUGVyUGFnZSgpOwp9CgokbnVtT2ZEZXBhcnRtZW50cyA9IGNvdW50KCRjb21wYW55LT5nZXREZXBhcnRtZW50cygpKTsKCmVjaG8gcGFkUmlnaHQoItCh0YDQtdC00L3QtdC1IiwgJGNvbDEpIC4KICAgICBwYWRMZWZ0KHJvdW5kKCgkYWxsRW1wbG95ZWVzIC8gJG51bU9mRGVwYXJ0bWVudHMpLDEpLCAkY29sMikgLiAKICAgICBwYWRMZWZ0KHJvdW5kKCgkYWxsU2FsYXJ5IC8gJG51bU9mRGVwYXJ0bWVudHMpLCAxKSwgJGNvbDMpIC4gCiAgICAgcGFkTGVmdChyb3VuZCgoJGFsbENvZmZlZSAvICRudW1PZkRlcGFydG1lbnRzKSwgMSksICRjb2w0KSAuIAogICAgIHBhZExlZnQocm91bmQoKCRhbGxQYWdlcyAvICRudW1PZkRlcGFydG1lbnRzKSwgMSksICRjb2w1KSAuCiAgICAgcGFkTGVmdChyb3VuZCgoJGFsbFR1Z1BlclBncyAvICRudW1PZkRlcGFydG1lbnRzKSwgMSksICRjb2w2KSAuICJcbiI7CgplY2hvIHBhZFJpZ2h0KCLQktGB0LXQs9C+IiwgJGNvbDEpIC4KICAgICBwYWRMZWZ0KCRhbGxFbXBsb3llZXMsICRjb2wyKSAuIAogICAgIHBhZExlZnQoJGFsbFNhbGFyeSwgJGNvbDMpIC4gCiAgICAgcGFkTGVmdCgkYWxsQ29mZmVlLCAkY29sNCkgLiAKICAgICBwYWRMZWZ0KCRhbGxQYWdlcywgJGNvbDUpIC4KICAgICBwYWRMZWZ0KCRhbGxUdWdQZXJQZ3MsICRjb2w2KSAuICJcbiI7Cg==