<?php
header("Content-Type: text/plain; charset=utf-8");
?>
<?php
mb_internal_encoding("UTF-8");
class Player
{
public $name;
public $icon;
public $x;
public $y;
public $isWinner;
public $position;
public function __construct($name, $icon)
{
$this->name = $name;
$this->icon = $icon;
$this->x = 1;
$this->y = 0;
$this->position = 1;
}
public function getMove()
{
$round = 1;
$roll = mt_rand(1, 6);
$lastX = $this->x;
$lastY = $this->y;
$this->x = $this->x + $roll;
$position = $this->y * 10 + $this->x;
$this->position = $position;
echo "Rolling the dice for $this->name ($this->icon): $roll \n";
if ($position < 100) {
$length = 10 - $lastX;
if ($length < $roll) {
$roll = $roll - $length;
$this->x = $roll;
$this->y = $this->y + 1;
}
if (100 - $position < $roll) {
$position = 100;
$this->position = $position;
}
switch ($position) {
case 4:
echo "Congratulation: $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 2;
$this->y = 4;
$this->position = 42;
echo "to new position $this->y$this->x \n";
break;
case 16:
echo "Sorry but $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 8;
$this->y = 0;
echo "to new position is $this->y$this->x \n";
$this->position = 8;
break;
case 9:
echo "Congratulation: $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 10;
$this->y = 3;
$this->position = 30;
echo "to new position $this->position \n";
break;
case 32:
echo "Sorry but $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 2;
$this->y = 1;
$this->position = 12;
echo "to new position $this->y$this->x \n";
break;
case 14:
echo "Congratulation: $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 7;
$this->y = 7;
$this->position = 77;
echo "to new position $this->y$this->x \n";
break;
case 62:
echo "Sorry but $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 9;
$this->y = 1;
$this->position = 19;
echo "to new position $this->y$this->x \n";
break;
case 80:
echo "Congratulation: $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 8;
$this->y = 9;
$this->position = 98;
echo "to new position $this->y$this->x \n";
break;
case 96:
echo "Sorry but $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 6;
$this->y = 7;
$this->position = 76;
echo "to new position $this->y$this->x \n";
break;
case 71:
echo "Sorry but $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 7;
$this->y = 6;
$this->position = 67;
echo "to new position $this->y$this->x \n";
break;
case 48:
echo "Congratulation: $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 3;
$this->y = 7;
$this->position = 73;
echo "to new position $this->y$this->x \n";
break;
case 37:
echo "Congratulation: $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 8;
$this->y = 5;
$this->position = 58;
echo "to new position $this->y$this->x \n";
break;
case 47:
echo "Sorry but $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 6;
$this->y = 2;
$this->position = 26;
echo "to new position $this->y$this->x \n";
break;
case 70:
echo "Congratulation: $this->name ($this->icon) is moving from $this->y$this->x ";
$this->x = 9;
$this->y = 8;
$this->position = 89;
echo "to new position $this->y$this->x \n";
break;
default:
echo "$this->name new position is $position \n";
}
} else {
echo "CONGRATULATION: $this->name ($this->icon) - THE WINNER!!! \n";
$this->position = 100;
$this->x = 10;
$this->y = 9;
$this->isWinner = 1;
return $this->isWinner;
}
}
}
$player1 = new Player('Player1', '@');
$player2 = new Player('Player2', '#');
$player3 = new Player('Player3', '*');
$player4 = new Player('Player4', '%');
$players = array(
$player1,
$player2,
$player3,
$player4
);
$round = 1;
function padRight($string)
{
$count = 50 - mb_strlen($string);
if ($count <= 0) {
return $string;
}
$space = str_repeat(' ', $count / 2);
return $space . $string . $space;
}
function getShow($players)
{
$zone = array();
$k = 1;
for ($i = 0; $i <= 9; $i++) {
for ($j = 1; $j <= 10; $j++) {
$zone[$i][$j] = $k++;
}
}
foreach ($players as $player) {
$zone[$player->y][$player->x] .= $player->icon;
}
$text = '';
foreach ($zone as $line) {
$string = '';
foreach ($line as $position) {
$string .= " $position ";
}
$text .= padRight($string) . "\n";
}
return $text;
}
function getGame($array)
{
global $round;
global $players;
do {
foreach ($array as $player) {
$player->getMove();
if ($player->isWinner == 1) {
return $player->name;
}
echo getShow($players);
}
echo str_repeat('_', 50) . "\n";
echo "End of $round round \n\n";
$round++;
} while ($player->isWinner == 0);
}
getGame($players);
echo getShow($players);
PD9waHAKaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKTsKPz4KCjw/cGhwCm1iX2ludGVybmFsX2VuY29kaW5nKCJVVEYtOCIpOwpjbGFzcyBQbGF5ZXIKewogICAgcHVibGljICRuYW1lOwogICAgcHVibGljICRpY29uOwogICAgcHVibGljICR4OwogICAgcHVibGljICR5OwogICAgcHVibGljICRpc1dpbm5lcjsKICAgIHB1YmxpYyAkcG9zaXRpb247CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUsICRpY29uKQogICAgewogICAgICAgICR0aGlzLT5uYW1lICAgICA9ICRuYW1lOwogICAgICAgICR0aGlzLT5pY29uICAgICA9ICRpY29uOwogICAgICAgICR0aGlzLT54ICAgICAgICA9IDE7CiAgICAgICAgJHRoaXMtPnkgICAgICAgID0gMDsKICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSAxOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vdmUoKQogICAgewogICAgICAgICRyb3VuZCAgICAgICAgICA9IDE7CiAgICAgICAgJHJvbGwgICAgICAgICAgID0gbXRfcmFuZCgxLCA2KTsKICAgICAgICAkbGFzdFggICAgICAgICAgPSAkdGhpcy0+eDsKICAgICAgICAkbGFzdFkgICAgICAgICAgPSAkdGhpcy0+eTsKICAgICAgICAkdGhpcy0+eCAgICAgICAgPSAkdGhpcy0+eCArICRyb2xsOwogICAgICAgICRwb3NpdGlvbiAgICAgICA9ICR0aGlzLT55ICogMTAgKyAkdGhpcy0+eDsKICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSAkcG9zaXRpb247CiAgICAgICAgZWNobyAiUm9sbGluZyB0aGUgZGljZSBmb3IgJHRoaXMtPm5hbWUgKCR0aGlzLT5pY29uKTogJHJvbGwgXG4iOwogICAgICAgIGlmICgkcG9zaXRpb24gPCAxMDApIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICRsZW5ndGggPSAxMCAtICRsYXN0WDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgkbGVuZ3RoIDwgJHJvbGwpIHsKICAgICAgICAgICAgICAgICRyb2xsICAgID0gJHJvbGwgLSAkbGVuZ3RoOwogICAgICAgICAgICAgICAgJHRoaXMtPnggPSAkcm9sbDsKICAgICAgICAgICAgICAgICR0aGlzLT55ID0gJHRoaXMtPnkgKyAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgxMDAgLSAkcG9zaXRpb24gPCAkcm9sbCkgewogICAgICAgICAgICAgICAgJHBvc2l0aW9uICAgICAgID0gMTAwOwogICAgICAgICAgICAgICAgJHRoaXMtPnBvc2l0aW9uID0gJHBvc2l0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN3aXRjaCAoJHBvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ29uZ3JhdHVsYXRpb246ICR0aGlzLT5uYW1lICgkdGhpcy0+aWNvbikgaXMgbW92aW5nIGZyb20gJHRoaXMtPnkkdGhpcy0+eCAiOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT54ICAgICAgICA9IDI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnkgICAgICAgID0gNDsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSA0MjsKICAgICAgICAgICAgICAgICAgICBlY2hvICJ0byBuZXcgcG9zaXRpb24gICR0aGlzLT55JHRoaXMtPnggXG4iOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAxNjoKICAgICAgICAgICAgICAgICAgICBlY2hvICJTb3JyeSBidXQgJHRoaXMtPm5hbWUgKCR0aGlzLT5pY29uKSBpcyBtb3ZpbmcgZnJvbSAkdGhpcy0+eSR0aGlzLT54ICI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnggPSA4OwogICAgICAgICAgICAgICAgICAgICR0aGlzLT55ID0gMDsKICAgICAgICAgICAgICAgICAgICBlY2hvICJ0byBuZXcgcG9zaXRpb24gaXMgJHRoaXMtPnkkdGhpcy0+eCBcbiI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBvc2l0aW9uID0gODsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICAgICAgICBlY2hvICJDb25ncmF0dWxhdGlvbjogJHRoaXMtPm5hbWUgKCR0aGlzLT5pY29uKSBpcyBtb3ZpbmcgZnJvbSAkdGhpcy0+eSR0aGlzLT54ICI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnggICAgICAgID0gMTA7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnkgICAgICAgID0gMzsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSAzMDsKICAgICAgICAgICAgICAgICAgICBlY2hvICJ0byBuZXcgcG9zaXRpb24gICR0aGlzLT5wb3NpdGlvbiBcbiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDMyOgogICAgICAgICAgICAgICAgICAgIGVjaG8gIlNvcnJ5IGJ1dCAkdGhpcy0+bmFtZSAoJHRoaXMtPmljb24pIGlzIG1vdmluZyBmcm9tICR0aGlzLT55JHRoaXMtPnggIjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eCAgICAgICAgPSAyOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT55ICAgICAgICA9IDE7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBvc2l0aW9uID0gMTI7CiAgICAgICAgICAgICAgICAgICAgZWNobyAidG8gbmV3IHBvc2l0aW9uICAkdGhpcy0+eSR0aGlzLT54IFxuIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ29uZ3JhdHVsYXRpb246ICR0aGlzLT5uYW1lICgkdGhpcy0+aWNvbikgaXMgbW92aW5nIGZyb20gJHRoaXMtPnkkdGhpcy0+eCAiOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT54ICAgICAgICA9IDc7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnkgICAgICAgID0gNzsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSA3NzsKICAgICAgICAgICAgICAgICAgICBlY2hvICJ0byBuZXcgcG9zaXRpb24gICR0aGlzLT55JHRoaXMtPnggXG4iOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA2MjoKICAgICAgICAgICAgICAgICAgICBlY2hvICJTb3JyeSBidXQgJHRoaXMtPm5hbWUgKCR0aGlzLT5pY29uKSBpcyBtb3ZpbmcgZnJvbSAkdGhpcy0+eSR0aGlzLT54ICI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnggICAgICAgID0gOTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eSAgICAgICAgPSAxOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5wb3NpdGlvbiA9IDE5OwogICAgICAgICAgICAgICAgICAgIGVjaG8gInRvIG5ldyBwb3NpdGlvbiAgJHRoaXMtPnkkdGhpcy0+eCBcbiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDgwOgogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNvbmdyYXR1bGF0aW9uOiAkdGhpcy0+bmFtZSAoJHRoaXMtPmljb24pIGlzIG1vdmluZyBmcm9tICR0aGlzLT55JHRoaXMtPnggIjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eCAgICAgICAgPSA4OwogICAgICAgICAgICAgICAgICAgICR0aGlzLT55ICAgICAgICA9IDk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBvc2l0aW9uID0gOTg7CiAgICAgICAgICAgICAgICAgICAgZWNobyAidG8gbmV3IHBvc2l0aW9uICAkdGhpcy0+eSR0aGlzLT54IFxuIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgOTY6CiAgICAgICAgICAgICAgICAgICAgZWNobyAiU29ycnkgYnV0ICR0aGlzLT5uYW1lICgkdGhpcy0+aWNvbikgaXMgbW92aW5nIGZyb20gJHRoaXMtPnkkdGhpcy0+eCAiOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT54ICAgICAgICA9IDY7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnkgICAgICAgID0gNzsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSA3NjsKICAgICAgICAgICAgICAgICAgICBlY2hvICJ0byBuZXcgcG9zaXRpb24gICR0aGlzLT55JHRoaXMtPnggXG4iOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA3MToKICAgICAgICAgICAgICAgICAgICBlY2hvICJTb3JyeSBidXQgJHRoaXMtPm5hbWUgKCR0aGlzLT5pY29uKSBpcyBtb3ZpbmcgZnJvbSAkdGhpcy0+eSR0aGlzLT54ICI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnggICAgICAgID0gNzsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eSAgICAgICAgPSA2OwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5wb3NpdGlvbiA9IDY3OwogICAgICAgICAgICAgICAgICAgIGVjaG8gInRvIG5ldyBwb3NpdGlvbiAgJHRoaXMtPnkkdGhpcy0+eCBcbiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDQ4OgogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNvbmdyYXR1bGF0aW9uOiAkdGhpcy0+bmFtZSAoJHRoaXMtPmljb24pIGlzIG1vdmluZyBmcm9tICR0aGlzLT55JHRoaXMtPnggIjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eCAgICAgICAgPSAzOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT55ICAgICAgICA9IDc7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBvc2l0aW9uID0gNzM7CiAgICAgICAgICAgICAgICAgICAgZWNobyAidG8gbmV3IHBvc2l0aW9uICAkdGhpcy0+eSR0aGlzLT54IFxuIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMzc6CiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ29uZ3JhdHVsYXRpb246ICR0aGlzLT5uYW1lICgkdGhpcy0+aWNvbikgaXMgbW92aW5nIGZyb20gJHRoaXMtPnkkdGhpcy0+eCAiOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT54ICAgICAgICA9IDg7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnkgICAgICAgID0gNTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSA1ODsKICAgICAgICAgICAgICAgICAgICBlY2hvICJ0byBuZXcgcG9zaXRpb24gICR0aGlzLT55JHRoaXMtPnggXG4iOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA0NzoKICAgICAgICAgICAgICAgICAgICBlY2hvICJTb3JyeSBidXQgJHRoaXMtPm5hbWUgKCR0aGlzLT5pY29uKSBpcyBtb3ZpbmcgZnJvbSAkdGhpcy0+eSR0aGlzLT54ICI7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnggICAgICAgID0gNjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eSAgICAgICAgPSAyOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5wb3NpdGlvbiA9IDI2OwogICAgICAgICAgICAgICAgICAgIGVjaG8gInRvIG5ldyBwb3NpdGlvbiAgJHRoaXMtPnkkdGhpcy0+eCBcbiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDcwOgogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNvbmdyYXR1bGF0aW9uOiAkdGhpcy0+bmFtZSAoJHRoaXMtPmljb24pIGlzIG1vdmluZyBmcm9tICR0aGlzLT55JHRoaXMtPnggIjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+eCAgICAgICAgPSA5OwogICAgICAgICAgICAgICAgICAgICR0aGlzLT55ICAgICAgICA9IDg7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBvc2l0aW9uID0gODk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAidG8gbmV3IHBvc2l0aW9uICAkdGhpcy0+eSR0aGlzLT54IFxuIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgZWNobyAiJHRoaXMtPm5hbWUgbmV3IHBvc2l0aW9uIGlzICRwb3NpdGlvbiBcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlY2hvICJDT05HUkFUVUxBVElPTjogJHRoaXMtPm5hbWUgKCR0aGlzLT5pY29uKSAtIFRIRSBXSU5ORVIhISEgXG4iOwogICAgICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSAxMDA7CiAgICAgICAgICAgICR0aGlzLT54ICAgICAgICA9IDEwOwogICAgICAgICAgICAkdGhpcy0+eSAgICAgICAgPSA5OwogICAgICAgICAgICAkdGhpcy0+aXNXaW5uZXIgPSAxOwogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmlzV2lubmVyOwogICAgICAgIH0KICAgICAgICAKICAgIH0KICAgIAp9CiRwbGF5ZXIxID0gbmV3IFBsYXllcignUGxheWVyMScsICdAJyk7CiRwbGF5ZXIyID0gbmV3IFBsYXllcignUGxheWVyMicsICcjJyk7CiRwbGF5ZXIzID0gbmV3IFBsYXllcignUGxheWVyMycsICcqJyk7CiRwbGF5ZXI0ID0gbmV3IFBsYXllcignUGxheWVyNCcsICclJyk7CgokcGxheWVycyA9IGFycmF5KAogICAgJHBsYXllcjEsCiAgICAkcGxheWVyMiwKICAgICRwbGF5ZXIzLAogICAgJHBsYXllcjQKKTsKJHJvdW5kICAgPSAxOwpmdW5jdGlvbiBwYWRSaWdodCgkc3RyaW5nKQp7CiAgICAkY291bnQgPSA1MCAtIG1iX3N0cmxlbigkc3RyaW5nKTsKICAgIGlmICgkY291bnQgPD0gMCkgewogICAgICAgIHJldHVybiAkc3RyaW5nOwogICAgfQogICAgJHNwYWNlID0gc3RyX3JlcGVhdCgnICcsICRjb3VudCAvIDIpOwogICAgcmV0dXJuICRzcGFjZSAuICRzdHJpbmcgLiAkc3BhY2U7Cn0KZnVuY3Rpb24gZ2V0U2hvdygkcGxheWVycykKewogICAgJHpvbmUgPSBhcnJheSgpOwogICAgJGsgICAgPSAxOwogICAgZm9yICgkaSA9IDA7ICRpIDw9IDk7ICRpKyspIHsKICAgICAgICBmb3IgKCRqID0gMTsgJGogPD0gMTA7ICRqKyspIHsKICAgICAgICAgICAgJHpvbmVbJGldWyRqXSA9ICRrKys7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmb3JlYWNoICgkcGxheWVycyBhcyAkcGxheWVyKSB7CiAgICAgICAgJHpvbmVbJHBsYXllci0+eV1bJHBsYXllci0+eF0gLj0gJHBsYXllci0+aWNvbjsKICAgIH0KICAgIAogICAgJHRleHQgPSAnJzsKICAgIGZvcmVhY2ggKCR6b25lIGFzICRsaW5lKSB7CiAgICAJJHN0cmluZyA9ICcnOwogICAgICAgIGZvcmVhY2ggKCRsaW5lIGFzICRwb3NpdGlvbikgewogICAgICAgICAgICAkc3RyaW5nIC49ICIgJHBvc2l0aW9uICI7CiAgICAgICAgfQogICAgICAgICR0ZXh0IC49IHBhZFJpZ2h0KCRzdHJpbmcpIC4gIlxuIjsgICAgICAgIAogICAgfQogICAgcmV0dXJuICR0ZXh0Owp9CgoKZnVuY3Rpb24gZ2V0R2FtZSgkYXJyYXkpCnsKICAgIGdsb2JhbCAkcm91bmQ7CiAgICBnbG9iYWwgJHBsYXllcnM7CiAgICBkbyB7CiAgICAgICAgZm9yZWFjaCAoJGFycmF5IGFzICRwbGF5ZXIpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICRwbGF5ZXItPmdldE1vdmUoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgkcGxheWVyLT5pc1dpbm5lciA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHBsYXllci0+bmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvIGdldFNob3coJHBsYXllcnMpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBlY2hvIHN0cl9yZXBlYXQoJ18nLCA1MCkgLiAiXG4iOwogICAgICAgIGVjaG8gIkVuZCBvZiAkcm91bmQgcm91bmQgXG5cbiI7CiAgICAgICAgJHJvdW5kKys7CiAgICB9IHdoaWxlICgkcGxheWVyLT5pc1dpbm5lciA9PSAwKTsKICAgIAp9CmdldEdhbWUoJHBsYXllcnMpOwoKCmVjaG8gZ2V0U2hvdygkcGxheWVycyk7Cg==