Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
..
Decoded Output download
?>b'<?php session_start();
include_once "config.php";
$itemCode=NULL;
if($_POST[\'rowid\'])
{
$id = $_POST[\'rowid\'];
}
switch($_POST[\'x\'])
{
case \'RCV_ITEM\':
if($id[0]==\'.\'){
echo "<iframe src=\'iframe.php?id=".substr($id, 1)."\' width=\'100%\' height=\'378\' frameBorder=\'0\' scrolling=\'vertical\'></iframe>";
}
else{
$user="SELECT * FROM `item` WHERE srl=".$id;
$result=mysql_query($user) or die();
while($row=mysql_fetch_array($result))
{ extract($row); }
?>
<!-- Horizontal Form -->
<div style="width:680px;" class="box box-primary">
<div class="box-header"></div>
<table width="100%">
<tr>
<td><img src="imgs/<?php echo $itemCode; ?>.jpg" style="width:300px; height:220px;"></td>
<td>
<table class="table table-bordered">
<tr><th>Code</th><td><?php echo $itemCode;?></td></tr>
<tr><th>Item Name</th><td><?php echo $itemName;?></td></tr>
<tr><th>Category</th><td><?php echo $category;?></td></tr>
<tr><th>Manufacturer</th><td><?php echo $manufacturer;?></td></tr>
<tr><th>Package</th><td><?php echo $package;?></td></tr>
<tr><th>Remarks</th><td><?php echo $remarks;?></td></tr>
</table>
</td>
</tr>
</table>
</div><!-- /.box -->
<?php } ?>
<table class=\'table table-bordered \'><tr><th>Lot No</th><th>Quantity</th><th>Room No</th><th>Mnf_Date</th><th>Exp_Date</th><th>Action</th></tr>
<?php
$sql="SELECT goods_receive_details.lot_No AS l,
goods_receive_details.itemCode,
goods_receive_details.quantity AS q,
goods_receive_details.room_No AS r,
goods_receive_details.mfg_date AS m,
goods_receive_details.exp_Date AS e,
SUM(goods_issue_details.quantity) AS i
FROM goods_receive_details LEFT JOIN goods_issue_details
ON goods_receive_details.itemCode=goods_issue_details.itemCode AND goods_receive_details.lot_No=goods_issue_details.lotNo
WHERE goods_receive_details.itemCode=
".$itemCode." GROUP BY LotNo ";
$result=mysql_query($sql) or die();
while($row=mysql_fetch_array($result))
{
extract($row);
if(($q-$i)!=0) { ?>
<tr>
<td>
<span id="lot_No" class="smlInputSize"><?php echo $l; ?></span>
</td>
<td>
<script>
$(\'a\').on(\'click\', function(){
$(\'a\').removeClass(\'selected\');
$(this).addClass(\'selected\');
});
</script>
<span id="$quantity" class="smlInputSize"><?php echo numberFormatIndia($q-$i); ?></span>
</td>
<td><span id="lot_No" class="smlInputSize"><?php echo $r; ?></span></td>
<td><span id="lot_No" class="smlInputSize"><?php echo $m; ?></span></td>
<td><span id="lot_No" class="smlInputSize">
<?php echo $e;
if(strtotime($e)-strtotime(date("y-m-d"))>0){
if(date(\'m\',strtotime($e)-strtotime(date("y-m-d")))<\'06\'){
if(date(\'m\',strtotime($e)-strtotime(date("y-m-d")))<\'03\'){$chk=\'label-danger\';} else {$chk=\'label-warning\';}
}
else{$chk=\'label-success\';};
} else{$chk=\'label label-default\';};
?></span>
<small class="label <?php echo $chk; ?>"><i class="fa fa-clock-o"></i>
<?php
if(strtotime($e)-strtotime(date("y-m-d"))>0){
echo date(\'m\',strtotime($e)-strtotime(date("y-m-d")));
} else { echo "-".date(\'m\',strtotime(date("y-m-d")-strtotime($e)));}
?> mth(s)</small>
</td>
<td>
<a style="box-shadow: inset 0 4px 8px rgba(100, 150, 250, 0.4); border:1px solid #CCF; width:27px; border-radius:10px; height:22px; display:inline-block;" href="javascript:(void);" onclick="lotNo(\'<?php echo $_GET[\'id\']; ?>\',\'<?php echo $l; ?>\',\'<?php echo ($q-$i); ?>\',\'<?php echo $m; ?>\',\'<?php echo $e; ?>\');">⇧</a>
</td>
</tr>
<?php
}}
?>
</table>
<div align="center">
<input style="border: 1px solid #a8d4b1; border-radius:4px;" class="semiInputSize" type="date" id="start_date" name="start_date" onFocus="javascript:this.value=\'\'" >
<input style="border: 1px solid #a8d4b1; border-radius:4px;" class="semiInputSize" type="date" id="end_date" name="end_date" onFocus="javascript:this.value=\'\'" >
<span class="btn btn-primary" onclick="item_details(\'<?php echo $itemCode;?>\')" style="margin:2px 10px; padding:1px 10px; margin-top:-2px;">Submit</span>
</div>
<div id="item_details_">
</div>
<?php
break;
case \'INVOICE\':
$user="SELECT * FROM `goods_receive_master` WHERE goods_reveice_no=".$id;
$result=mysql_query($user) or die();
while($row=mysql_fetch_array($result))
{ extract($row); }
?>
<div align="center">
<img src="images/logo_img.png" width="300" height="58" />
<table width="95%">
<tr>
<td width="100"><h4>Date </h4></td><td>:</td><td><h4> <?php echo date("d M y", strtotime($goods_receive_date)); ?></h4></td><td width="230" >Invoice No. <?php echo $invoice_no; ?></td></tr>
<tr><td ><strong><b>Vendor Name </b></strong></td><td>:</td><td colspan="2"> <?php echo $other_doc; ?></td></tr>
<tr><td ><strong><b>Issued By </b></strong></td><td>:</td><td colspan="2"><h5> <?php echo $received_By; ?></b></strong></td>
</tr>
</table></div>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Item Code</th>
<th>itemName</th>
<th>quantity</th>
<th>lotNo</th>
<th>mfg_date </th>
<th>exp_Date</th>
</tr>
</thead>
<tbody>
<?php
$user="SELECT goods_receive_details.goods_reveice_no,
goods_receive_details.itemCode,
goods_receive_details.quantity,
goods_receive_details.lot_No,
goods_receive_details.mfg_date,
goods_receive_details.exp_Date,
item.itemName FROM
goods_receive_details LEFT JOIN item ON goods_receive_details.itemCode=item.itemCode WHERE goods_reveice_no=".$id;
$result=mysql_query($user) or die();
while($row=mysql_fetch_array($result))
{
extract($row);
?>
<tr>
<td><?php echo $itemCode; ?></td>
<td><?php echo $itemName; ?></td>
<td><?php echo $quantity; ?></td>
<td><?php echo $lot_No; ?></td>
<td><?php echo $mfg_date; ?></td>
<td><?php echo $exp_Date; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php $d=date(\'Y-m-d\');
$y=strtotime($goods_receive_date);
$x=strtotime($d);
if((($x-$y)<86300)||($_SESSION[\'access_lvl\']==3)||($_SESSION[\'access_lvl\']==2)) {$display=\'inline\';} else {$display=\'none\';}
?>
<div align="right"><?php echo "<a style=\'border-radius: 7px;margin:0; padding:0 10px; display:".$display.";\' class=\'btn btn-warning\' href=\'edit_invoice.php?invoice=$id\'>"; ?> Edit</a>
<?php
break;
case \'ISSUED_INVOICE\':
$user="SELECT goods_issue_master.invoiceNO,
goods_issue_master.issuedBy,
goods_issue_master.goods_isu_date,
customer.customerName,
customer.address,
customer.contactPersonMob
FROM `goods_issue_master`
LEFT JOIN customer ON customer.customerName=goods_issue_master.CustomerId
WHERE goods_isuNo=\'".$id."\' ORDER BY goods_issue_master.goods_isuNo ASC";
$result=mysql_query($user) or die();
while($row=mysql_fetch_array($result))
{ extract($row); }
?>
<div style=" margin-top:-36px; float:right; width:460px;">
<form action="print.php" method="POST" target="_blank">
<input type="hidden" name="invoiceNo" value="<?php echo $id; ?>" />
<input class="subject-list"style="display:inline-block;" type="checkbox" name="customer" value="Customer Copy" checked="checked" />Customer Copy
<input class="subject-list"style="display:inline-block;" type="checkbox" name="WareHouse" value="WareHouse Copy" />WareHouse Copy
<input class="subject-list"style="display:inline-block;" type="checkbox" name="Office" value="Office Copy" />Office Copy
<input type="submit" value=" " style="background:url(images/printer.png) no-repeat; border:none;" />
</form>
<script type="text/javascript">
$(\'.subject-list\').on(\'change\', function() {
$(\'.subject-list\').not(this).prop(\'checked\', false);
});
</script>
</div>
<div align="center">
<img src="images/logo_img.png" width="338" height="53" />
<table width="100%">
<tr>
<td width="100"><h4>Date </h4></td><td>:</td><td><h4> <?php echo date("d M y", strtotime($goods_isu_date)); ?></h4></td><td width="170" ><?php echo " <strong><b>Bill No. </strong></b>".$invoiceNO; ?></td></tr>
<tr><td ><strong><b>Client Name </b></strong></td><td>:</td><td colspan="2"> <?php echo $customerName; ?></td></tr>
<tr><td ><strong><b>Address </b></strong></td><td>:</td><td ><h5> <?php echo $address; ?></b></strong></td>
<td width="170" ><?php echo " Contact No. ".$contactPersonMob; ?></td></tr>
</table></div>
<table class="table table-striped table-bordered">
<thead>
<tr style="background:url(images/tab_bg.png)bottom repeat-x;" >
<td width="90"><strong><b> Item Code</b></strong></td>
<td><strong><b>Item Name</b></strong></td>
<td><strong><b>Lot No</b></strong></td>
<td><strong><b>Quantity</b></strong></td>
<td><strong><b>Pkg-Size</b></strong></td>
<td><strong><b>Rate</b></strong></td>
<td><strong><b>Subtotal</b></strong></td>
</tr>
</thead>
<tbody>
<?php
$total=0;
$user="SELECT goods_issue_details.itemCode, goods_issue_details.quantity,goods_issue_details.lotNo, goods_issue_details.rate, item.itemName, item.package FROM
goods_issue_details LEFT JOIN item ON goods_issue_details.itemCode=item.itemCode WHERE goods_isuNo=".$id;
$result=mysql_query($user) or die();
while($row=mysql_fetch_array($result))
{
extract($row);
?>
<tr>
<td ><span style="float:right;"><?php echo $itemCode; ?></span></td>
<td><?php echo $itemName; ?></td>
<td><?php echo $lotNo; ?></td>
<td><?php echo $quantity; ?></td>
<td><?php echo $package; ?></td>
<td><?php echo sprintf(\'%0.2f\', $rate); ?></td>
<td><?php echo moneyFormatIndia($rate*$quantity); ?></td>
</tr>
<?php $total=$total+($rate*$quantity); } ?>
<tr><th><span style="color:#999">IN WORD: </span><th colspan="4"> <?php echo inword($total); ?></th> <th><span style="float:right">Total (TK)</span></th><th><?php echo moneyFormatIndia($total); ?></th></tr>
</tbody>
</table>
<table width="100%">
<tr><td><div style="width:180px; height:80px; border:1px dotted #d4d4d4; display:block; "><div align="center" style=" margin-top:50px;background:url(images/input.png) top repeat-x;">Receiver Signature</div></div></td>
<td></td><td><div style="width:180px; height:90px; border:1px dotted #d4d4d4; display:block; float:right;">
<div align="center" style=" margin-top:36px;"><?php echo $_SESSION["name"]; ?> </div>
<div align="center" style="margin-top:10px;background:url(images/input.png) top repeat-x;border-top:1px solid #CCC;">Authorised Signature</div></div></td></tr>
</table>
<?php
break;
case \'ISSUED_CALAN\':
$user="SELECT goods_issue_master.invoiceNO,
goods_issue_master.issuedBy,
goods_issue_master.goods_isu_date,
customer.customerName,
customer.address,
customer.contactPersonMob
FROM `goods_issue_master`
LEFT JOIN customer ON customer.customerName=goods_issue_master.CustomerId
WHERE goods_isuNo=".$id;
$result=mysql_query($user) or die();
while($row=mysql_fetch_array($result))
{ extract($row); }
?>
<div style=" margin-top:-40px; float:right; width:160px;">
<form id="myform" action="chalan_print.php" method="POST" target="_blank">
<input type="hidden" name="invoiceNo" value="<?php echo $id; ?>" />
<input style="cursor:pointer" type="radio" name="radio" value="A" checked="checked">A
<input style="cursor:pointer" type="radio" name="radio" value="B">B
<input type="submit" value=" " style="background:url(images/printer.png) no-repeat; border:none;" />
</form>
</div>
<span style="font-size:15px; font-weight:600; float:right;"> DELIVERY CHALLAN</span>
<div align="center">
<img src="images/logo_img.png" width="338" height="53" />
<table width="100%">
<tr>
<td width="100"><h4>Date </h4></td><td>:</td><td><h4> <?php echo $goods_isu_date; ?></h4></td><td width="230" ><?php echo "Challan No. :".$invoiceNO; ?></td></tr>
<tr><td ><strong><b>Challan to </b></strong></td><td>:</td><td colspan="2"> <?php echo $customerName; ?></td></tr>
<tr><td ><strong><b>Address </b></strong></td><td>:</td><td ><h5> <?php echo $address; ?></b></strong></td>
<td width="230" ><strong><b><?php echo " Contact No. :".$contactPersonMob; ?></b></strong></td></tr>
</table></div>
<table class="table">
<thead>
<tr style="background:#D4D4D4 ;" >
<th width="90"><strong><b> Item Code</b></strong></th>
<th><strong><b>Description of Goods</b></strong></th>
<th><strong><b>Pkg-Size</b></strong></th>
<th><strong><b>Mfg_Date</b></strong></th>
<th><strong><b>Exp_Date</b></strong></th>
<th><strong><b>Quantity</b></strong></th>
</tr>
</thead>
<tbody>
<?php
$total=0;
$user="SELECT goods_issue_details.itemCode, goods_issue_details.quantity,goods_issue_details.lotNo, goods_issue_details.rate,goods_issue_details.mfg_date,goods_issue_details.exp_Date, item.itemName, item.package FROM
goods_issue_details LEFT JOIN item ON goods_issue_details.itemCode=item.itemCode WHERE goods_isuNo=".$id;
$result=mysql_query($user) or die();
while($row=mysql_fetch_array($result))
{
extract($row);
?>
<tr>
<td ><div align="center"><?php echo $itemCode; ?></div></td>
<td><?php echo $itemName; ?></td>
<td><?php echo $package; ?></td>
<td><?php echo $mfg_date; ?></td>
<td><?php echo $exp_Date; ?></td>
<td><?php echo $quantity; ?></td>
</tr>
<?php } ?>
<tr><th colspan="6"></th></tr>
</tbody>
<table class="table table-bordered"><tr><th width="100">Remarks</th><td><input form="myform" style="border:none;" name="remarks" type="text" size="120" /></td></tr></table>
</table>
<table width="100%">
<tr><td><div style="width:180px; height:80px; border:1px dotted #d4d4d4; display:block; "><div align="center" style=" margin-top:50px;background:url(images/input.png) top repeat-x;">Receiver Signature</div></div></td>
<td></td><td><div style="width:180px; height:90px; border:1px dotted #d4d4d4; display:block; float:right;">
<div align="center" style=" margin-top:36px;"><?php echo $_SESSION["name"]; ?> </div>
<div align="center" style="margin-top:10px;background:url(images/input.png) top repeat-x;border-top:1px solid #CCC;">Authorised Signature</div></div></td></tr>
</table>
<?php
break;
}
?>
<?php
function inword($num) {
$number = $num;
$no = round($number);
$point = round($number - $no, 2) * 100;
$hundred = null;
$digits_1 = strlen($no);
$i = 0;
$str = array();
$words = array(\'0\' => \'\', \'1\' => \'One\', \'2\' => \'Two\',
\'3\' => \'Three\', \'4\' => \'Four\', \'5\' => \'Five\', \'6\' => \'Six\',
\'7\' => \'Seven\', \'8\' => \'Eight\', \'9\' => \'Nine\',
\'10\' => \'Ten\', \'11\' => \'Eleven\', \'12\' => \'Twelve\',
\'13\' => \'Thirteen\', \'14\' => \'Fourteen\',
\'15\' => \'Fifteen\', \'16\' => \'Sixteen\', \'17\' => \'Seventeen\',
\'18\' => \'Eighteen\', \'19\' =>\'Nineteen\', \'20\' => \'Twenty\',
\'30\' => \'Thirty\', \'40\' => \'Forty\', \'50\' => \'Fifty\',
\'60\' => \'Sixty\', \'70\' => \'Seventy\',
\'80\' => \'Eighty\', \'90\' => \'Ninety\');
$digits = array(\'\', \'Hundred\', \'Thousand\', \'Lakh\', \'Crore\');
while ($i < $digits_1) {
$divider = ($i == 2) ? 10 : 100;
$number = floor($no % $divider);
$no = floor($no / $divider);
$i += ($divider == 10) ? 1 : 2;
if ($number) {
$plural = (($counter = count($str)) && $number > 9) ? \'s\' : null;
$hundred = ($counter == 1 && $str[0]) ? \' and \' : null;
$str [] = ($number < 21) ? $words[$number] .
" " . $digits[$counter] . $plural . " " . $hundred
:
$words[floor($number / 10) * 10]
. " " . $words[$number % 10] . " "
. $digits[$counter] . $plural . " " . $hundred;
} else $str[] = null;
}
$str = array_reverse($str);
$result = implode(\'\', $str);
$points = ($point) ?
"." . $words[$point / 10] . " " .
$words[$point = $point % 10] : \'\';
return $result;
}
function moneyFormatIndia($num){
$explrestunits = "" ;
$num=preg_replace(\'/,+/\', \'\', $num);
$words = explode(".", $num);
$des="00";
if(count($words)<=2){
$num=$words[0];
if(count($words)>=2){$des=$words[1];}
if(strlen($des)<2){$des="$des0";}else{$des=substr($des,0,2);}
}
if(strlen($num)>3){
$lastthree = substr($num, strlen($num)-3, strlen($num));
$restunits = substr($num, 0, strlen($num)-3); // extracts the last three digits
$restunits = (strlen($restunits)%2 == 1)?"0".$restunits:$restunits; // explodes the remaining digits in 2\'s formats, adds a zero in the beginning to maintain the 2\'s grouping.
$expunit = str_split($restunits, 2);
for($i=0; $i<sizeof($expunit); $i++){
// creates each of the 2\'s group and adds a comma to the end
if($i==0)
{
$explrestunits .= (int)$expunit[$i].","; // if is first value , convert into integer
}else{
$explrestunits .= $expunit[$i].",";
}
}
$thecash = $explrestunits.$lastthree;
} else {
$thecash = $num;
}
return "$thecash.$des";
}
function numberFormatIndia($num){
$explrestunits = "" ;
$num=preg_replace(\'/,+/\', \'\', $num);
$words = explode(".", $num);
if(strlen($num)>3){
$lastthree = substr($num, strlen($num)-3, strlen($num));
$restunits = substr($num, 0, strlen($num)-3); // extracts the last three digits
$restunits = (strlen($restunits)%2 == 1)?"0".$restunits:$restunits; // explodes the remaining digits in 2\'s formats, adds a zero in the beginning to maintain the 2\'s grouping.
$expunit = str_split($restunits, 2);
for($i=0; $i<sizeof($expunit); $i++){
// creates each of the 2\'s group and adds a comma to the end
if($i==0)
{
$explrestunits .= (int)$expunit[$i].","; // if is first value , convert into integer
}else{
$explrestunits .= $expunit[$i].",";
}
}
$thecash = $explrestunits.$lastthree;
} else {
$thecash = $num;
}
return "$thecash";
}
?>
<script>
function item_details(x)
{ $.ajax({
type: "POST",
url:"item_details_.php",
data: {x:x,start_date:$("#start_date").val(),end_date:$("#end_date").val()},
cache: false,
beforeSend: function()
{
$("#item_details_").html(\'<font style="font-family:Verdana, Geneva, sans-serif; font-size:16px;">Please wait</font> <img src="images/loadings.gif" align="absmiddle" alt="Loading...">\');
},
success: function(data) {
// data is ur summary
$("#item_details_").html(data);
}
});
}
</script>
'
Did this file decode correctly?
Original Code
<!-- InstanceEndEditable -->
<?php eval("?>".base64_decode("PD9waHAgc2Vzc2lvbl9zdGFydCgpOw0KaW5jbHVkZV9vbmNlICJjb25maWcucGhwIjsNCiRpdGVtQ29kZT1OVUxMOw0KIGlmKCRfUE9TVFsncm93aWQnXSkgDQogIHsNCgkgICAkaWQgPSAkX1BPU1RbJ3Jvd2lkJ107IA0KICAgfQ0KIHN3aXRjaCgkX1BPU1RbJ3gnXSkgDQogCXsNCgkJY2FzZSAnUkNWX0lURU0nOg0KCQlpZigkaWRbMF09PScuJyl7IA0KICBlY2hvICI8aWZyYW1lIHNyYz0naWZyYW1lLnBocD9pZD0iLnN1YnN0cigkaWQsIDEpLiInICB3aWR0aD0nMTAwJScgaGVpZ2h0PSczNzgnIGZyYW1lQm9yZGVyPScwJyBzY3JvbGxpbmc9J3ZlcnRpY2FsJz48L2lmcmFtZT4iOw0KICB9DQoJCWVsc2V7DQogICAgICAgJHVzZXI9IlNFTEVDVCAqIEZST00gYGl0ZW1gIFdIRVJFIHNybD0iLiRpZDsNCgkJCQkJCSRyZXN1bHQ9bXlzcWxfcXVlcnkoJHVzZXIpIG9yIGRpZSgpOw0KICAJCQkJCSAgICB3aGlsZSgkcm93PW15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKQ0KCQkJCQkJeyBleHRyYWN0KCRyb3cpOyB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgID8+DQoJCQkJCQkJCQk8IS0tIEhvcml6b250YWwgRm9ybSAtLT4NCgkJCQkJCQkJCTxkaXYgc3R5bGU9IndpZHRoOjY4MHB4OyIgY2xhc3M9ImJveCBib3gtcHJpbWFyeSI+DQoJCQkJCQkJCQkJPGRpdiBjbGFzcz0iYm94LWhlYWRlciI+PC9kaXY+DQoJCQkJCQkJCQkJDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW1nIHNyYz0iaW1ncy88P3BocCBlY2hvICRpdGVtQ29kZTsgPz4uanBnIiAgc3R5bGU9IndpZHRoOjMwMHB4OyBoZWlnaHQ6MjIwcHg7Ij48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+ICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGg+Q29kZTwvdGg+PHRkPjw/cGhwIGVjaG8gJGl0ZW1Db2RlOz8+PC90ZD48L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGg+SXRlbSBOYW1lPC90aD48dGQ+PD9waHAgZWNobyAkaXRlbU5hbWU7Pz48L3RkPjwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aD5DYXRlZ29yeTwvdGg+PHRkPjw/cGhwIGVjaG8gJGNhdGVnb3J5Oz8+PC90ZD48L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGg+TWFudWZhY3R1cmVyPC90aD48dGQ+PD9waHAgZWNobyAkbWFudWZhY3R1cmVyOz8+PC90ZD48L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aD5QYWNrYWdlPC90aD48dGQ+PD9waHAgZWNobyAkcGFja2FnZTs/PjwvdGQ+PC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRoPlJlbWFya3M8L3RoPjx0ZD48P3BocCBlY2hvICRyZW1hcmtzOz8+PC90ZD48L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPiANCiAJCQkJCQkJCQkJPC9kaXY+PCEtLSAvLmJveCAtLT4gDQogIAkJPD9waHAgfSA/Pg0KDQoNCiANCiAgDQogIDx0YWJsZSBjbGFzcz0ndGFibGUgdGFibGUtYm9yZGVyZWQgJz48dHI+PHRoPkxvdCBObzwvdGg+PHRoPlF1YW50aXR5PC90aD48dGg+Um9vbSBObzwvdGg+PHRoPk1uZl9EYXRlPC90aD48dGg+RXhwX0RhdGU8L3RoPjx0aD5BY3Rpb248L3RoPjwvdHI+DQo8P3BocA0KDQogICAgJHNxbD0iU0VMRUNUIGdvb2RzX3JlY2VpdmVfZGV0YWlscy5sb3RfTm8gQVMgbCwNCgkgICAgICAgICAgICAgZ29vZHNfcmVjZWl2ZV9kZXRhaWxzLml0ZW1Db2RlLA0KCQkJCSBnb29kc19yZWNlaXZlX2RldGFpbHMucXVhbnRpdHkgQVMgcSwNCgkJCQkgZ29vZHNfcmVjZWl2ZV9kZXRhaWxzLnJvb21fTm8gQVMgciwNCgkJCQkgICAgIGdvb2RzX3JlY2VpdmVfZGV0YWlscy5tZmdfZGF0ZSBBUyBtLA0KCQkJCSAgICAgZ29vZHNfcmVjZWl2ZV9kZXRhaWxzLmV4cF9EYXRlIEFTIGUsDQoJCQkJIFNVTShnb29kc19pc3N1ZV9kZXRhaWxzLnF1YW50aXR5KSBBUyBpDQoJCQkJIEZST00gZ29vZHNfcmVjZWl2ZV9kZXRhaWxzIExFRlQgSk9JTiBnb29kc19pc3N1ZV9kZXRhaWxzIA0KCQkJCSBPTiBnb29kc19yZWNlaXZlX2RldGFpbHMuaXRlbUNvZGU9Z29vZHNfaXNzdWVfZGV0YWlscy5pdGVtQ29kZSBBTkQgZ29vZHNfcmVjZWl2ZV9kZXRhaWxzLmxvdF9Obz1nb29kc19pc3N1ZV9kZXRhaWxzLmxvdE5vDQoJCQkJIFdIRVJFIGdvb2RzX3JlY2VpdmVfZGV0YWlscy5pdGVtQ29kZT0NCgkJCQkgIi4kaXRlbUNvZGUuIiAgR1JPVVAgQlkgTG90Tm8gIjsNCg0KCSRyZXN1bHQ9bXlzcWxfcXVlcnkoJHNxbCkgb3IgZGllKCk7DQoJd2hpbGUoJHJvdz1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkNCiAgIAl7DQoJCWV4dHJhY3QoJHJvdyk7DQoJaWYoKCRxLSRpKSE9MCkJeyA/Pg0KICAgICAgICANCjx0cj4NCjx0ZD4NCjxzcGFuICAgaWQ9ImxvdF9ObyIgY2xhc3M9InNtbElucHV0U2l6ZSI+PD9waHAgZWNobyAkbDsgPz48L3NwYW4+DQo8L3RkPg0KPHRkPg0KDQoNCg0KDQoNCg0KDQo8c2NyaXB0Pg0KJCgnYScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCl7DQogICAgJCgnYScpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOw0KICAgICQodGhpcykuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7DQp9KTsNCg0KPC9zY3JpcHQ+DQo8c3BhbiAgIGlkPSIkcXVhbnRpdHkiIGNsYXNzPSJzbWxJbnB1dFNpemUiPjw/cGhwIGVjaG8gbnVtYmVyRm9ybWF0SW5kaWEoJHEtJGkpOyA/Pjwvc3Bhbj4NCg0KDQoNCg0KDQoNCg0KDQo8L3RkPg0KPHRkPjxzcGFuICAgaWQ9ImxvdF9ObyIgY2xhc3M9InNtbElucHV0U2l6ZSI+PD9waHAgZWNobyAkcjsgPz48L3NwYW4+PC90ZD4NCjx0ZD48c3BhbiAgIGlkPSJsb3RfTm8iIGNsYXNzPSJzbWxJbnB1dFNpemUiPjw/cGhwIGVjaG8gJG07ID8+PC9zcGFuPjwvdGQ+DQo8dGQ+PHNwYW4gICBpZD0ibG90X05vIiBjbGFzcz0ic21sSW5wdXRTaXplIj4NCjw/cGhwIGVjaG8gJGU7IA0KDQoNCg0KaWYoc3RydG90aW1lKCRlKS1zdHJ0b3RpbWUoZGF0ZSgieS1tLWQiKSk+MCl7DQoNCg0KaWYoZGF0ZSgnbScsc3RydG90aW1lKCRlKS1zdHJ0b3RpbWUoZGF0ZSgieS1tLWQiKSkpPCcwNicpew0KCWlmKGRhdGUoJ20nLHN0cnRvdGltZSgkZSktc3RydG90aW1lKGRhdGUoInktbS1kIikpKTwnMDMnKXskY2hrPSdsYWJlbC1kYW5nZXInO30gZWxzZSB7JGNoaz0nbGFiZWwtd2FybmluZyc7fQ0KCX0NCiBlbHNleyRjaGs9J2xhYmVsLXN1Y2Nlc3MnO307DQp9ICBlbHNleyRjaGs9J2xhYmVsIGxhYmVsLWRlZmF1bHQnO307DQo/Pjwvc3Bhbj4NCiA8c21hbGwgY2xhc3M9ImxhYmVsIDw/cGhwIGVjaG8gJGNoazsgPz4iPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+IA0KIDw/cGhwICANCiBpZihzdHJ0b3RpbWUoJGUpLXN0cnRvdGltZShkYXRlKCJ5LW0tZCIpKT4wKXsNCiBlY2hvIGRhdGUoJ20nLHN0cnRvdGltZSgkZSktc3RydG90aW1lKGRhdGUoInktbS1kIikpKTsNCiB9IGVsc2UgeyBlY2hvICItIi5kYXRlKCdtJyxzdHJ0b3RpbWUoZGF0ZSgieS1tLWQiKS1zdHJ0b3RpbWUoJGUpKSk7fQ0KICA/PiBtdGgocyk8L3NtYWxsPg0KPC90ZD4NCg0KPHRkPg0KPGEgc3R5bGU9ImJveC1zaGFkb3c6IGluc2V0IDAgNHB4IDhweCByZ2JhKDEwMCwgMTUwLCAyNTAsIDAuNCk7IGJvcmRlcjoxcHggc29saWQgICNDQ0Y7IHdpZHRoOjI3cHg7IGJvcmRlci1yYWRpdXM6MTBweDsgaGVpZ2h0OjIycHg7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyIgaHJlZj0iamF2YXNjcmlwdDoodm9pZCk7IiBvbmNsaWNrPSJsb3RObygnPD9waHAgZWNobyAkX0dFVFsnaWQnXTsgPz4nLCc8P3BocCBlY2hvICRsOyA/PicsJzw/cGhwIGVjaG8gKCRxLSRpKTsgPz4nLCc8P3BocCBlY2hvICRtOyA/PicsJzw/cGhwIGVjaG8gJGU7ID8+Jyk7Ij4mIzg2Nzk7PC9hPg0KPC90ZD4NCjwvdHI+DQogICAgDQogICAgPD9waHANCgl9fQ0KCT8+DQoNCg0KPC90YWJsZT4NCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiA8ZGl2IGFsaWduPSJjZW50ZXIiPg0KPGlucHV0IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjYThkNGIxOyBib3JkZXItcmFkaXVzOjRweDsiIGNsYXNzPSJzZW1pSW5wdXRTaXplIiB0eXBlPSJkYXRlIiBpZD0ic3RhcnRfZGF0ZSIgbmFtZT0ic3RhcnRfZGF0ZSIgb25Gb2N1cz0iamF2YXNjcmlwdDp0aGlzLnZhbHVlPScnIiA+DQoJCQkJCQkJCQkJCQ0KPGlucHV0IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjYThkNGIxOyBib3JkZXItcmFkaXVzOjRweDsiIGNsYXNzPSJzZW1pSW5wdXRTaXplIiB0eXBlPSJkYXRlIiBpZD0iZW5kX2RhdGUiIG5hbWU9ImVuZF9kYXRlIiBvbkZvY3VzPSJqYXZhc2NyaXB0OnRoaXMudmFsdWU9JyciID4JDQo8c3BhbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBvbmNsaWNrPSJpdGVtX2RldGFpbHMoJzw/cGhwIGVjaG8gJGl0ZW1Db2RlOz8+JykiIHN0eWxlPSJtYXJnaW46MnB4IDEwcHg7IHBhZGRpbmc6MXB4IDEwcHg7IG1hcmdpbi10b3A6LTJweDsiPlN1Ym1pdDwvc3Bhbj4JICAgICAgICAgICAJICAJDQo8L2Rpdj4NCiA8ZGl2IGlkPSJpdGVtX2RldGFpbHNfIj4NCiANCiANCiANCiA8L2Rpdj4NCgkJICAgICAgICAgICAJICAJIAkNCgkNCgkNCgkNCgkNCgkNCgkNCgkNCgkNCgkNCgkNCgkNCgk8P3BocCAJCQ0KCQlicmVhazsNCgkJY2FzZSAnSU5WT0lDRSc6DQoJCSAkdXNlcj0iU0VMRUNUICogRlJPTSBgZ29vZHNfcmVjZWl2ZV9tYXN0ZXJgIFdIRVJFIGdvb2RzX3JldmVpY2Vfbm89Ii4kaWQ7DQoJCSRyZXN1bHQ9bXlzcWxfcXVlcnkoJHVzZXIpIG9yIGRpZSgpOw0KICAJCQkJCSAgICB3aGlsZSgkcm93PW15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKQ0KCQkJCQkJICAgICB7IGV4dHJhY3QoJHJvdyk7IH0NCgkJPz4JDQogICAgICAgIA0KICAgICAgICAgIA0KICAgICAgPGRpdiBhbGlnbj0iY2VudGVyIj4gIA0KIDxpbWcgc3JjPSJpbWFnZXMvbG9nb19pbWcucG5nIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjU4IiAvPg0KPHRhYmxlIHdpZHRoPSI5NSUiPg0KICANCiAgPHRyPg0KICA8dGQgd2lkdGg9IjEwMCI+PGg0PkRhdGUgJm5ic3A7PC9oND48L3RkPjx0ZD46PC90ZD48dGQ+PGg0PiAmbmJzcDs8P3BocCBlY2hvIGRhdGUoImQgTSB5Iiwgc3RydG90aW1lKCRnb29kc19yZWNlaXZlX2RhdGUpKTsgPz48L2g0PjwvdGQ+PHRkIHdpZHRoPSIyMzAiID5JbnZvaWNlIE5vLiAmbmJzcDsgIDw/cGhwIGVjaG8gJGludm9pY2Vfbm87ID8+PC90ZD48L3RyPg0KIDx0cj48dGQgPjxzdHJvbmc+PGI+VmVuZG9yIE5hbWUgJm5ic3A7PC9iPjwvc3Ryb25nPjwvdGQ+PHRkPjo8L3RkPjx0ZCBjb2xzcGFuPSIyIj4mbmJzcDs8P3BocCBlY2hvICRvdGhlcl9kb2M7ID8+PC90ZD48L3RyPg0KIDx0cj48dGQgPjxzdHJvbmc+PGI+SXNzdWVkIEJ5ICZuYnNwOzwvYj48L3N0cm9uZz48L3RkPjx0ZD46PC90ZD48dGQgY29sc3Bhbj0iMiI+PGg1PiAmbmJzcDs8P3BocCBlY2hvICRyZWNlaXZlZF9CeTsgPz48L2I+PC9zdHJvbmc+PC90ZD4NCiA8L3RyPg0KPC90YWJsZT48L2Rpdj4NCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5JdGVtIENvZGU8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPml0ZW1OYW1lPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnF1YW50aXR5PC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5sb3RObzwvdGg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5tZmdfZGF0ZSAgPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPmV4cF9EYXRlPC90aD4gICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KIDw/cGhwIA0KICR1c2VyPSJTRUxFQ1QgZ29vZHNfcmVjZWl2ZV9kZXRhaWxzLmdvb2RzX3JldmVpY2Vfbm8sIA0KIGdvb2RzX3JlY2VpdmVfZGV0YWlscy5pdGVtQ29kZSwgDQogZ29vZHNfcmVjZWl2ZV9kZXRhaWxzLnF1YW50aXR5LCANCiBnb29kc19yZWNlaXZlX2RldGFpbHMubG90X05vLCANCiBnb29kc19yZWNlaXZlX2RldGFpbHMubWZnX2RhdGUsIA0KIGdvb2RzX3JlY2VpdmVfZGV0YWlscy5leHBfRGF0ZSwgDQogaXRlbS5pdGVtTmFtZSBGUk9NIA0KICAgICAgICBnb29kc19yZWNlaXZlX2RldGFpbHMgTEVGVCBKT0lOIGl0ZW0gT04gZ29vZHNfcmVjZWl2ZV9kZXRhaWxzLml0ZW1Db2RlPWl0ZW0uaXRlbUNvZGUgV0hFUkUgZ29vZHNfcmV2ZWljZV9ubz0iLiRpZDsJDQoJCQkJCQkkcmVzdWx0PW15c3FsX3F1ZXJ5KCR1c2VyKSBvciBkaWUoKTsNCiAgCQkJCQkgICAgd2hpbGUoJHJvdz1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkNCgkJCQkJCXsNCgkJCSAgICAgICAgICBleHRyYWN0KCRyb3cpOyAgDQoJCQkJCSAgIA0KICAgICAgICAgICAgICAgICAgICAgICA/Pg0KPHRyPg0KPHRkPjw/cGhwIGVjaG8gJGl0ZW1Db2RlOyA/PjwvdGQ+DQo8dGQ+PD9waHAgZWNobyAkaXRlbU5hbWU7ID8+PC90ZD4NCjx0ZD48P3BocCBlY2hvICRxdWFudGl0eTsgPz48L3RkPg0KPHRkPjw/cGhwIGVjaG8gJGxvdF9ObzsgPz48L3RkPg0KPHRkPjw/cGhwIGVjaG8gJG1mZ19kYXRlOyA/PjwvdGQ+DQo8dGQ+PD9waHAgZWNobyAkZXhwX0RhdGU7ID8+PC90ZD4NCjwvdHI+DQogPD9QSFAgfSA/PiAgICAgDQogPC90Ym9keT4NCjwvdGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICA8P3BocCAgICAkZD1kYXRlKCdZLW0tZCcpOw0KJHk9c3RydG90aW1lKCRnb29kc19yZWNlaXZlX2RhdGUpOw0KJHg9c3RydG90aW1lKCRkKTsNCiBpZigoKCR4LSR5KTw4NjMwMCl8fCgkX1NFU1NJT05bJ2FjY2Vzc19sdmwnXT09Myl8fCgkX1NFU1NJT05bJ2FjY2Vzc19sdmwnXT09MikpIHskZGlzcGxheT0naW5saW5lJzt9IGVsc2UgeyRkaXNwbGF5PSdub25lJzt9ICAgICAgICAgICAgICAgICAgICAgDQogPz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgIDxkaXYgYWxpZ249InJpZ2h0Ij48P3BocCBlY2hvICI8YSAgc3R5bGU9J2JvcmRlci1yYWRpdXM6IDdweDttYXJnaW46MDsgcGFkZGluZzowIDEwcHg7IGRpc3BsYXk6Ii4kZGlzcGxheS4iOycgY2xhc3M9J2J0biBidG4td2FybmluZycgaHJlZj0nZWRpdF9pbnZvaWNlLnBocD9pbnZvaWNlPSRpZCc+IjsgPz4JRWRpdDwvYT4JCQ0KCTw/cGhwIA0KCQlicmVhazsNCgkJDQoJY2FzZSAnSVNTVUVEX0lOVk9JQ0UnOg0KCQ0KCQkgJHVzZXI9IlNFTEVDVCBnb29kc19pc3N1ZV9tYXN0ZXIuaW52b2ljZU5PLA0KCQkgICAgICAgICAgICAgICBnb29kc19pc3N1ZV9tYXN0ZXIuaXNzdWVkQnksDQoJCQkJCSAgIGdvb2RzX2lzc3VlX21hc3Rlci5nb29kc19pc3VfZGF0ZSwNCgkJCQkJICAgY3VzdG9tZXIuY3VzdG9tZXJOYW1lLA0KCQkJCQkgICBjdXN0b21lci5hZGRyZXNzLA0KCQkJCQkgICBjdXN0b21lci5jb250YWN0UGVyc29uTW9iDQoJCSAgICAgICAgRlJPTSBgZ29vZHNfaXNzdWVfbWFzdGVyYA0KCQkJCUxFRlQgSk9JTiBjdXN0b21lciBPTiBjdXN0b21lci5jdXN0b21lck5hbWU9Z29vZHNfaXNzdWVfbWFzdGVyLkN1c3RvbWVySWQNCgkJCSAgICBXSEVSRSBnb29kc19pc3VObz0nIi4kaWQuIicgT1JERVIgQlkgZ29vZHNfaXNzdWVfbWFzdGVyLmdvb2RzX2lzdU5vIEFTQyI7DQoJCSRyZXN1bHQ9bXlzcWxfcXVlcnkoJHVzZXIpIG9yIGRpZSgpOw0KICAJCQkJCSAgICB3aGlsZSgkcm93PW15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKQ0KCQkJCQkJICAgICB7IGV4dHJhY3QoJHJvdyk7IH0NCgkJCT8+DQogICAgICAgICAgICANCiAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQo8ZGl2IHN0eWxlPSIgbWFyZ2luLXRvcDotMzZweDsgZmxvYXQ6cmlnaHQ7IHdpZHRoOjQ2MHB4OyI+DQo8Zm9ybSBhY3Rpb249InByaW50LnBocCIgbWV0aG9kPSJQT1NUIiB0YXJnZXQ9Il9ibGFuayI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJpbnZvaWNlTm8iIHZhbHVlPSI8P3BocCBlY2hvICRpZDsgPz4iIC8+DQo8aW5wdXQgY2xhc3M9InN1YmplY3QtbGlzdCJzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7IiB0eXBlPSJjaGVja2JveCIgbmFtZT0iY3VzdG9tZXIiIHZhbHVlPSJDdXN0b21lciBDb3B5IiBjaGVja2VkPSJjaGVja2VkIiAvPkN1c3RvbWVyIENvcHkgJm5ic3A7ICZuYnNwOw0KPGlucHV0IGNsYXNzPSJzdWJqZWN0LWxpc3Qic3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrOyIgdHlwZT0iY2hlY2tib3giIG5hbWU9IldhcmVIb3VzZSIgdmFsdWU9IldhcmVIb3VzZSBDb3B5IiAvPldhcmVIb3VzZSBDb3B5ICZuYnNwOyAmbmJzcDsNCjxpbnB1dCBjbGFzcz0ic3ViamVjdC1saXN0InN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazsiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJPZmZpY2UiIHZhbHVlPSJPZmZpY2UgQ29weSIgLz5PZmZpY2UgQ29weSAmbmJzcDsgJm5ic3A7DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJm5ic3A7ICZuYnNwOyAgIiBzdHlsZT0iYmFja2dyb3VuZDp1cmwoaW1hZ2VzL3ByaW50ZXIucG5nKSBuby1yZXBlYXQ7IGJvcmRlcjpub25lOyIgLz4NCjwvZm9ybT4NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJICAgICQoJy5zdWJqZWN0LWxpc3QnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7DQoJCSAgICAkKCcuc3ViamVjdC1saXN0Jykubm90KHRoaXMpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7ICANCgkJfSk7DQogICAgPC9zY3JpcHQ+DQoNCg0KPC9kaXY+ICANCjxkaXYgYWxpZ249ImNlbnRlciI+ICAgDQo8aW1nIHNyYz0iaW1hZ2VzL2xvZ29faW1nLnBuZyIgd2lkdGg9IjMzOCIgaGVpZ2h0PSI1MyIgLz4NCjx0YWJsZSB3aWR0aD0iMTAwJSI+DQogIDx0cj4NCiAgPHRkIHdpZHRoPSIxMDAiPjxoND5EYXRlICZuYnNwOzwvaDQ+PC90ZD48dGQ+OjwvdGQ+PHRkPjxoND4gJm5ic3A7PD9waHAgICBlY2hvICBkYXRlKCJkIE0geSIsIHN0cnRvdGltZSgkZ29vZHNfaXN1X2RhdGUpKTsgPz48L2g0PjwvdGQ+PHRkIHdpZHRoPSIxNzAiID48P3BocCAgZWNobyAiJm5ic3A7ICZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDs8c3Ryb25nPjxiPkJpbGwgTm8uICZuYnNwOyA8L3N0cm9uZz48L2I+Ii4kaW52b2ljZU5POyA/PjwvdGQ+PC90cj4NCiA8dHI+PHRkID48c3Ryb25nPjxiPkNsaWVudCBOYW1lICZuYnNwOzwvYj48L3N0cm9uZz48L3RkPjx0ZD46PC90ZD48dGQgY29sc3Bhbj0iMiI+Jm5ic3A7PD9waHAgIGVjaG8gJGN1c3RvbWVyTmFtZTsgID8+PC90ZD48L3RyPg0KIDx0cj48dGQgPjxzdHJvbmc+PGI+QWRkcmVzcyAmbmJzcDs8L2I+PC9zdHJvbmc+PC90ZD48dGQ+OjwvdGQ+PHRkID48aDU+ICZuYnNwOzw/cGhwICBlY2hvICRhZGRyZXNzOyAgPz48L2I+PC9zdHJvbmc+PC90ZD4NCiA8dGQgd2lkdGg9IjE3MCIgPjw/cGhwICBlY2hvICIgQ29udGFjdCBOby4gJm5ic3A7ICZuYnNwOyIuJGNvbnRhY3RQZXJzb25Nb2I7ID8+PC90ZD48L3RyPg0KPC90YWJsZT48L2Rpdj4NCiAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgc3R5bGU9ImJhY2tncm91bmQ6dXJsKGltYWdlcy90YWJfYmcucG5nKWJvdHRvbSByZXBlYXQteDsiID4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI5MCI+PHN0cm9uZz48Yj4gSXRlbSBDb2RlPC9iPjwvc3Ryb25nPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3Ryb25nPjxiPkl0ZW0gTmFtZTwvYj48L3N0cm9uZz48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHN0cm9uZz48Yj5Mb3QgTm88L2I+PC9zdHJvbmc+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+PGI+UXVhbnRpdHk8L2I+PC9zdHJvbmc+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+PGI+UGtnLVNpemU8L2I+PC9zdHJvbmc+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+PGI+UmF0ZTwvYj48L3N0cm9uZz48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+PGI+U3VidG90YWw8L2I+PC9zdHJvbmc+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KIDw/cGhwIA0KICR0b3RhbD0wOw0KICR1c2VyPSJTRUxFQ1QgIGdvb2RzX2lzc3VlX2RldGFpbHMuaXRlbUNvZGUsICBnb29kc19pc3N1ZV9kZXRhaWxzLnF1YW50aXR5LGdvb2RzX2lzc3VlX2RldGFpbHMubG90Tm8sIGdvb2RzX2lzc3VlX2RldGFpbHMucmF0ZSwgaXRlbS5pdGVtTmFtZSwgaXRlbS5wYWNrYWdlIEZST00gDQogICAgICAgIGdvb2RzX2lzc3VlX2RldGFpbHMgTEVGVCBKT0lOIGl0ZW0gT04gZ29vZHNfaXNzdWVfZGV0YWlscy5pdGVtQ29kZT1pdGVtLml0ZW1Db2RlIFdIRVJFIGdvb2RzX2lzdU5vPSIuJGlkOwkNCgkJCQkJCSRyZXN1bHQ9bXlzcWxfcXVlcnkoJHVzZXIpIG9yIGRpZSgpOw0KICAJCQkJCSAgICB3aGlsZSgkcm93PW15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKQ0KCQkJCQkJew0KCQkJICAgICAgICAgIGV4dHJhY3QoJHJvdyk7ICANCiAgICAgICAgICAgICAgICAgICAgICAgPz4NCjx0cj4NCjx0ZCA+PHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PD9waHAgZWNobyAkaXRlbUNvZGU7ID8+PC9zcGFuPjwvdGQ+DQo8dGQ+PD9waHAgZWNobyAkaXRlbU5hbWU7ID8+PC90ZD4NCjx0ZD48P3BocCBlY2hvICRsb3RObzsgPz48L3RkPg0KPHRkPjw/cGhwIGVjaG8gJHF1YW50aXR5OyA/PjwvdGQ+DQo8dGQ+PD9waHAgZWNobyAkcGFja2FnZTsgPz48L3RkPg0KPHRkPjw/cGhwIGVjaG8gc3ByaW50ZignJTAuMmYnLCAkcmF0ZSk7ID8+PC90ZD4NCjx0ZD48P3BocCBlY2hvIG1vbmV5Rm9ybWF0SW5kaWEoJHJhdGUqJHF1YW50aXR5KTsgPz48L3RkPg0KPC90cj4NCiA8P3BocCAgICR0b3RhbD0kdG90YWwrKCRyYXRlKiRxdWFudGl0eSk7IH0gPz4gIA0KIA0KIDx0cj48dGg+PHNwYW4gc3R5bGU9ImNvbG9yOiM5OTkiPklOIFdPUkQ6Jm5ic3A7ICZuYnNwOzwvc3Bhbj48dGggY29sc3Bhbj0iNCI+IDw/cGhwIGVjaG8gaW53b3JkKCR0b3RhbCk7ICAgPz48L3RoPiAgPHRoPjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodCI+VG90YWwgKFRLKTwvc3Bhbj48L3RoPjx0aD48P3BocCBlY2hvIG1vbmV5Rm9ybWF0SW5kaWEoJHRvdGFsKTsgPz48L3RoPjwvdHI+ICANCiAgICAgICAgICAgICA8L3Rib2R5Pg0KPC90YWJsZT4JCQ0KPHRhYmxlIHdpZHRoPSIxMDAlIj4NCjx0cj48dGQ+PGRpdiBzdHlsZT0id2lkdGg6MTgwcHg7IGhlaWdodDo4MHB4OyBib3JkZXI6MXB4IGRvdHRlZCAjZDRkNGQ0OyBkaXNwbGF5OmJsb2NrOyAiPjxkaXYgYWxpZ249ImNlbnRlciIgc3R5bGU9IiBtYXJnaW4tdG9wOjUwcHg7YmFja2dyb3VuZDp1cmwoaW1hZ2VzL2lucHV0LnBuZykgdG9wIHJlcGVhdC14OyI+UmVjZWl2ZXIgU2lnbmF0dXJlPC9kaXY+PC9kaXY+PC90ZD4NCjx0ZD48L3RkPjx0ZD48ZGl2IHN0eWxlPSJ3aWR0aDoxODBweDsgaGVpZ2h0OjkwcHg7IGJvcmRlcjoxcHggZG90dGVkICNkNGQ0ZDQ7IGRpc3BsYXk6YmxvY2s7IGZsb2F0OnJpZ2h0OyI+DQo8ZGl2IGFsaWduPSJjZW50ZXIiIHN0eWxlPSIgbWFyZ2luLXRvcDozNnB4OyI+PD9waHAgZWNobyAkX1NFU1NJT05bIm5hbWUiXTsgPz4JPC9kaXY+DQo8ZGl2IGFsaWduPSJjZW50ZXIiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDp1cmwoaW1hZ2VzL2lucHV0LnBuZykgdG9wIHJlcGVhdC14O2JvcmRlci10b3A6MXB4IHNvbGlkICNDQ0M7Ij5BdXRob3Jpc2VkIFNpZ25hdHVyZTwvZGl2PjwvZGl2PjwvdGQ+PC90cj4NCjwvdGFibGU+CQkJCQkNCgkJCQkNCjw/cGhwIA0KYnJlYWs7CQ0KY2FzZSAnSVNTVUVEX0NBTEFOJzoNCgkNCgkJICR1c2VyPSJTRUxFQ1QgZ29vZHNfaXNzdWVfbWFzdGVyLmludm9pY2VOTywNCgkJICAgICAgICAgICAgICAgZ29vZHNfaXNzdWVfbWFzdGVyLmlzc3VlZEJ5LA0KCQkJCQkgICBnb29kc19pc3N1ZV9tYXN0ZXIuZ29vZHNfaXN1X2RhdGUsDQoJCQkJCSAgIGN1c3RvbWVyLmN1c3RvbWVyTmFtZSwNCgkJCQkJICAgY3VzdG9tZXIuYWRkcmVzcywNCgkJCQkJICAgY3VzdG9tZXIuY29udGFjdFBlcnNvbk1vYg0KCQkgICAgICAgIEZST00gYGdvb2RzX2lzc3VlX21hc3RlcmANCgkJCQlMRUZUIEpPSU4gY3VzdG9tZXIgT04gY3VzdG9tZXIuY3VzdG9tZXJOYW1lPWdvb2RzX2lzc3VlX21hc3Rlci5DdXN0b21lcklkDQoJCQkgICAgV0hFUkUgZ29vZHNfaXN1Tm89Ii4kaWQ7DQoJCSRyZXN1bHQ9bXlzcWxfcXVlcnkoJHVzZXIpIG9yIGRpZSgpOw0KICAJCQkJCSAgICB3aGlsZSgkcm93PW15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKQ0KCQkJCQkJICAgICB7IGV4dHJhY3QoJHJvdyk7IH0NCgkJCT8+DQogICAgICAgICAgICANCjxkaXYgc3R5bGU9IiBtYXJnaW4tdG9wOi00MHB4OyBmbG9hdDpyaWdodDsgd2lkdGg6MTYwcHg7Ij4NCjxmb3JtIGlkPSJteWZvcm0iIGFjdGlvbj0iY2hhbGFuX3ByaW50LnBocCIgbWV0aG9kPSJQT1NUIiB0YXJnZXQ9Il9ibGFuayI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJpbnZvaWNlTm8iIHZhbHVlPSI8P3BocCBlY2hvICRpZDsgPz4iIC8+DQoNCg0KICA8aW5wdXQgc3R5bGU9ImN1cnNvcjpwb2ludGVyIiB0eXBlPSJyYWRpbyIgbmFtZT0icmFkaW8iIHZhbHVlPSJBIiBjaGVja2VkPSJjaGVja2VkIj5BDQogIDxpbnB1dCAgc3R5bGU9ImN1cnNvcjpwb2ludGVyIiB0eXBlPSJyYWRpbyIgbmFtZT0icmFkaW8iIHZhbHVlPSJCIj5CDQoNCg0KDQombmJzcDsgJm5ic3A7IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSImbmJzcDsgJm5ic3A7ICAiIHN0eWxlPSJiYWNrZ3JvdW5kOnVybChpbWFnZXMvcHJpbnRlci5wbmcpIG5vLXJlcGVhdDsgYm9yZGVyOm5vbmU7IiAvPg0KDQo8L2Zvcm0+DQo8L2Rpdj4gIA0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBmb250LXdlaWdodDo2MDA7IGZsb2F0OnJpZ2h0OyI+IERFTElWRVJZIENIQUxMQU48L3NwYW4+DQo8ZGl2IGFsaWduPSJjZW50ZXIiPiAgIA0KPGltZyBzcmM9ImltYWdlcy9sb2dvX2ltZy5wbmciIHdpZHRoPSIzMzgiIGhlaWdodD0iNTMiIC8+DQo8dGFibGUgd2lkdGg9IjEwMCUiPg0KICA8dHI+DQogIDx0ZCB3aWR0aD0iMTAwIj48aDQ+RGF0ZSAmbmJzcDs8L2g0PjwvdGQ+PHRkPjo8L3RkPjx0ZD48aDQ+ICZuYnNwOzw/cGhwICBlY2hvICRnb29kc19pc3VfZGF0ZTsgPz48L2g0PjwvdGQ+PHRkIHdpZHRoPSIyMzAiID48P3BocCAgZWNobyAiQ2hhbGxhbiBOby4gOiIuJGludm9pY2VOTzsgPz48L3RkPjwvdHI+DQogPHRyPjx0ZCA+PHN0cm9uZz48Yj5DaGFsbGFuIHRvICZuYnNwOzwvYj48L3N0cm9uZz48L3RkPjx0ZD46PC90ZD48dGQgY29sc3Bhbj0iMiI+Jm5ic3A7PD9waHAgIGVjaG8gJGN1c3RvbWVyTmFtZTsgID8+PC90ZD48L3RyPg0KIDx0cj48dGQgPjxzdHJvbmc+PGI+QWRkcmVzcyAmbmJzcDs8L2I+PC9zdHJvbmc+PC90ZD48dGQ+OjwvdGQ+PHRkID48aDU+ICZuYnNwOzw/cGhwICBlY2hvICRhZGRyZXNzOyAgPz48L2I+PC9zdHJvbmc+PC90ZD4NCiA8dGQgd2lkdGg9IjIzMCIgPjxzdHJvbmc+PGI+PD9waHAgIGVjaG8gIiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBDb250YWN0IE5vLiA6Ii4kY29udGFjdFBlcnNvbk1vYjsgPz48L2I+PC9zdHJvbmc+PC90ZD48L3RyPg0KPC90YWJsZT48L2Rpdj4NCiAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHN0eWxlPSJiYWNrZ3JvdW5kOiNENEQ0RDQgOyIgPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjkwIj48c3Ryb25nPjxiPiBJdGVtIENvZGU8L2I+PC9zdHJvbmc+PC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzdHJvbmc+PGI+RGVzY3JpcHRpb24gb2YgR29vZHM8L2I+PC9zdHJvbmc+PC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzdHJvbmc+PGI+UGtnLVNpemU8L2I+PC9zdHJvbmc+PC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzdHJvbmc+PGI+TWZnX0RhdGU8L2I+PC9zdHJvbmc+PC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzdHJvbmc+PGI+RXhwX0RhdGU8L2I+PC9zdHJvbmc+PC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzdHJvbmc+PGI+UXVhbnRpdHk8L2I+PC9zdHJvbmc+PC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogPD9waHAgDQogJHRvdGFsPTA7DQogJHVzZXI9IlNFTEVDVCAgZ29vZHNfaXNzdWVfZGV0YWlscy5pdGVtQ29kZSwgIGdvb2RzX2lzc3VlX2RldGFpbHMucXVhbnRpdHksZ29vZHNfaXNzdWVfZGV0YWlscy5sb3RObywgZ29vZHNfaXNzdWVfZGV0YWlscy5yYXRlLGdvb2RzX2lzc3VlX2RldGFpbHMubWZnX2RhdGUsZ29vZHNfaXNzdWVfZGV0YWlscy5leHBfRGF0ZSwgaXRlbS5pdGVtTmFtZSwgaXRlbS5wYWNrYWdlIEZST00gDQogICAgICAgIGdvb2RzX2lzc3VlX2RldGFpbHMgTEVGVCBKT0lOIGl0ZW0gT04gZ29vZHNfaXNzdWVfZGV0YWlscy5pdGVtQ29kZT1pdGVtLml0ZW1Db2RlIFdIRVJFIGdvb2RzX2lzdU5vPSIuJGlkOwkNCgkJCQkJCSRyZXN1bHQ9bXlzcWxfcXVlcnkoJHVzZXIpIG9yIGRpZSgpOw0KICAJCQkJCSAgICB3aGlsZSgkcm93PW15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKQ0KCQkJCQkJew0KCQkJICAgICAgICAgIGV4dHJhY3QoJHJvdyk7ICANCiAgICAgICAgICAgICAgICAgICAgICAgPz4NCjx0cj4NCjx0ZCA+PGRpdiBhbGlnbj0iY2VudGVyIj48P3BocCBlY2hvICRpdGVtQ29kZTsgPz48L2Rpdj48L3RkPg0KPHRkPjw/cGhwIGVjaG8gJGl0ZW1OYW1lOyA/PjwvdGQ+DQoNCg0KPHRkPjw/cGhwIGVjaG8gJHBhY2thZ2U7ID8+PC90ZD4NCjx0ZD48P3BocCBlY2hvICRtZmdfZGF0ZTsgPz48L3RkPg0KPHRkPjw/cGhwIGVjaG8gJGV4cF9EYXRlOyA/PjwvdGQ+DQo8dGQ+PD9waHAgZWNobyAkcXVhbnRpdHk7ID8+PC90ZD4NCg0KPC90cj4NCiA8P3BocCAgICB9ID8+ICANCiA8dHI+PHRoIGNvbHNwYW49IjYiPjwvdGg+PC90cj4gICANCiAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQiPjx0cj48dGggd2lkdGg9IjEwMCI+UmVtYXJrczwvdGg+PHRkPjxpbnB1dCBmb3JtPSJteWZvcm0iIHN0eWxlPSJib3JkZXI6bm9uZTsiIG5hbWU9InJlbWFya3MiICB0eXBlPSJ0ZXh0IiBzaXplPSIxMjAiIC8+PC90ZD48L3RyPjwvdGFibGU+DQogICAgICAgICAgICAgDQo8L3RhYmxlPgkJDQo8dGFibGUgd2lkdGg9IjEwMCUiPg0KPHRyPjx0ZD48ZGl2IHN0eWxlPSJ3aWR0aDoxODBweDsgaGVpZ2h0OjgwcHg7IGJvcmRlcjoxcHggZG90dGVkICNkNGQ0ZDQ7IGRpc3BsYXk6YmxvY2s7ICI+PGRpdiBhbGlnbj0iY2VudGVyIiBzdHlsZT0iIG1hcmdpbi10b3A6NTBweDtiYWNrZ3JvdW5kOnVybChpbWFnZXMvaW5wdXQucG5nKSB0b3AgcmVwZWF0LXg7Ij5SZWNlaXZlciBTaWduYXR1cmU8L2Rpdj48L2Rpdj48L3RkPg0KPHRkPjwvdGQ+PHRkPjxkaXYgc3R5bGU9IndpZHRoOjE4MHB4OyBoZWlnaHQ6OTBweDsgYm9yZGVyOjFweCBkb3R0ZWQgI2Q0ZDRkNDsgZGlzcGxheTpibG9jazsgZmxvYXQ6cmlnaHQ7Ij4NCjxkaXYgYWxpZ249ImNlbnRlciIgc3R5bGU9IiBtYXJnaW4tdG9wOjM2cHg7Ij48P3BocCBlY2hvICRfU0VTU0lPTlsibmFtZSJdOyA/Pgk8L2Rpdj4NCjxkaXYgYWxpZ249ImNlbnRlciIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDtiYWNrZ3JvdW5kOnVybChpbWFnZXMvaW5wdXQucG5nKSB0b3AgcmVwZWF0LXg7Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQzsiPkF1dGhvcmlzZWQgU2lnbmF0dXJlPC9kaXY+PC9kaXY+PC90ZD48L3RyPg0KPC90YWJsZT4JCQkJCQ0KCQkJCQ0KPD9waHAgDQpicmVhazsJDQp9ICANCj8+DQogIA0KIA0KIDw/cGhwDQogDQogDQogZnVuY3Rpb24gaW53b3JkKCRudW0pIHsgDQokbnVtYmVyID0gJG51bTsNCiAgICRubyA9IHJvdW5kKCRudW1iZXIpOw0KICAgJHBvaW50ID0gcm91bmQoJG51bWJlciAtICRubywgMikgKiAxMDA7DQogICAkaHVuZHJlZCA9IG51bGw7DQogICAkZGlnaXRzXzEgPSBzdHJsZW4oJG5vKTsNCiAgICRpID0gMDsNCiAgICRzdHIgPSBhcnJheSgpOw0KICAgJHdvcmRzID0gYXJyYXkoJzAnID0+ICcnLCAnMScgPT4gJ09uZScsICcyJyA9PiAnVHdvJywNCiAgICAnMycgPT4gJ1RocmVlJywgJzQnID0+ICdGb3VyJywgJzUnID0+ICdGaXZlJywgJzYnID0+ICdTaXgnLA0KICAgICc3JyA9PiAnU2V2ZW4nLCAnOCcgPT4gJ0VpZ2h0JywgJzknID0+ICdOaW5lJywNCiAgICAnMTAnID0+ICdUZW4nLCAnMTEnID0+ICdFbGV2ZW4nLCAnMTInID0+ICdUd2VsdmUnLA0KICAgICcxMycgPT4gJ1RoaXJ0ZWVuJywgJzE0JyA9PiAnRm91cnRlZW4nLA0KICAgICcxNScgPT4gJ0ZpZnRlZW4nLCAnMTYnID0+ICdTaXh0ZWVuJywgJzE3JyA9PiAnU2V2ZW50ZWVuJywNCiAgICAnMTgnID0+ICdFaWdodGVlbicsICcxOScgPT4nTmluZXRlZW4nLCAnMjAnID0+ICdUd2VudHknLA0KICAgICczMCcgPT4gJ1RoaXJ0eScsICc0MCcgPT4gJ0ZvcnR5JywgJzUwJyA9PiAnRmlmdHknLA0KICAgICc2MCcgPT4gJ1NpeHR5JywgJzcwJyA9PiAnU2V2ZW50eScsDQogICAgJzgwJyA9PiAnRWlnaHR5JywgJzkwJyA9PiAnTmluZXR5Jyk7DQogICAkZGlnaXRzID0gYXJyYXkoJycsICdIdW5kcmVkJywgJ1Rob3VzYW5kJywgJ0xha2gnLCAnQ3JvcmUnKTsNCiAgIHdoaWxlICgkaSA8ICRkaWdpdHNfMSkgew0KICAgICAkZGl2aWRlciA9ICgkaSA9PSAyKSA/IDEwIDogMTAwOw0KICAgICAkbnVtYmVyID0gZmxvb3IoJG5vICUgJGRpdmlkZXIpOw0KICAgICAkbm8gPSBmbG9vcigkbm8gLyAkZGl2aWRlcik7DQogICAgICRpICs9ICgkZGl2aWRlciA9PSAxMCkgPyAxIDogMjsNCiAgICAgaWYgKCRudW1iZXIpIHsNCiAgICAgICAgJHBsdXJhbCA9ICgoJGNvdW50ZXIgPSBjb3VudCgkc3RyKSkgJiYgJG51bWJlciA+IDkpID8gJ3MnIDogbnVsbDsNCiAgICAgICAgJGh1bmRyZWQgPSAoJGNvdW50ZXIgPT0gMSAmJiAkc3RyWzBdKSA/ICcgYW5kICcgOiBudWxsOw0KICAgICAgICAkc3RyIFtdID0gKCRudW1iZXIgPCAyMSkgPyAkd29yZHNbJG51bWJlcl0gLg0KICAgICAgICAgICAgIiAiIC4gJGRpZ2l0c1skY291bnRlcl0gLiAkcGx1cmFsIC4gIiAiIC4gJGh1bmRyZWQNCiAgICAgICAgICAgIDoNCiAgICAgICAgICAgICR3b3Jkc1tmbG9vcigkbnVtYmVyIC8gMTApICogMTBdDQogICAgICAgICAgICAuICIgIiAuICR3b3Jkc1skbnVtYmVyICUgMTBdIC4gIiAiDQogICAgICAgICAgICAuICRkaWdpdHNbJGNvdW50ZXJdIC4gJHBsdXJhbCAuICIgIiAuICRodW5kcmVkOw0KICAgICB9IGVsc2UgJHN0cltdID0gbnVsbDsNCiAgfQ0KICAkc3RyID0gYXJyYXlfcmV2ZXJzZSgkc3RyKTsNCiAgJHJlc3VsdCA9IGltcGxvZGUoJycsICRzdHIpOw0KICAkcG9pbnRzID0gKCRwb2ludCkgPw0KICAgICIuIiAuICR3b3Jkc1skcG9pbnQgLyAxMF0gLiAiICIgLiANCiAgICAgICAgICAkd29yZHNbJHBvaW50ID0gJHBvaW50ICUgMTBdIDogJyc7DQoJCSAgcmV0dXJuICRyZXN1bHQ7DQoJCSAgDQoJCSAgDQoJCSAgDQp9DQoNCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCiANCg0KZnVuY3Rpb24gbW9uZXlGb3JtYXRJbmRpYSgkbnVtKXsNCg0KJGV4cGxyZXN0dW5pdHMgPSAiIiA7DQokbnVtPXByZWdfcmVwbGFjZSgnLywrLycsICcnLCAkbnVtKTsNCiR3b3JkcyA9IGV4cGxvZGUoIi4iLCAkbnVtKTsNCiRkZXM9IjAwIjsNCmlmKGNvdW50KCR3b3Jkcyk8PTIpew0KICAgICRudW09JHdvcmRzWzBdOw0KICAgIGlmKGNvdW50KCR3b3Jkcyk+PTIpeyRkZXM9JHdvcmRzWzFdO30NCiAgICBpZihzdHJsZW4oJGRlcyk8Mil7JGRlcz0iJGRlczAiO31lbHNleyRkZXM9c3Vic3RyKCRkZXMsMCwyKTt9DQp9DQppZihzdHJsZW4oJG51bSk+Myl7DQogICAgJGxhc3R0aHJlZSA9IHN1YnN0cigkbnVtLCBzdHJsZW4oJG51bSktMywgc3RybGVuKCRudW0pKTsNCiAgICAkcmVzdHVuaXRzID0gc3Vic3RyKCRudW0sIDAsIHN0cmxlbigkbnVtKS0zKTsgLy8gZXh0cmFjdHMgdGhlIGxhc3QgdGhyZWUgZGlnaXRzDQogICAgJHJlc3R1bml0cyA9IChzdHJsZW4oJHJlc3R1bml0cyklMiA9PSAxKT8iMCIuJHJlc3R1bml0czokcmVzdHVuaXRzOyAvLyBleHBsb2RlcyB0aGUgcmVtYWluaW5nIGRpZ2l0cyBpbiAyJ3MgZm9ybWF0cywgYWRkcyBhIHplcm8gaW4gdGhlIGJlZ2lubmluZyB0byBtYWludGFpbiB0aGUgMidzIGdyb3VwaW5nLg0KICAgICRleHB1bml0ID0gc3RyX3NwbGl0KCRyZXN0dW5pdHMsIDIpOw0KICAgIGZvcigkaT0wOyAkaTxzaXplb2YoJGV4cHVuaXQpOyAkaSsrKXsNCiAgICAgICAgLy8gY3JlYXRlcyBlYWNoIG9mIHRoZSAyJ3MgZ3JvdXAgYW5kIGFkZHMgYSBjb21tYSB0byB0aGUgZW5kDQogICAgICAgIGlmKCRpPT0wKQ0KICAgICAgICB7DQogICAgICAgICAgICAkZXhwbHJlc3R1bml0cyAuPSAoaW50KSRleHB1bml0WyRpXS4iLCI7IC8vIGlmIGlzIGZpcnN0IHZhbHVlICwgY29udmVydCBpbnRvIGludGVnZXINCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAkZXhwbHJlc3R1bml0cyAuPSAkZXhwdW5pdFskaV0uIiwiOw0KICAgICAgICB9DQogICAgfQ0KICAgICR0aGVjYXNoID0gJGV4cGxyZXN0dW5pdHMuJGxhc3R0aHJlZTsNCn0gZWxzZSB7DQogICAgJHRoZWNhc2ggPSAkbnVtOw0KfQ0KcmV0dXJuICIkdGhlY2FzaC4kZGVzIjsgDQoNCn0NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQpmdW5jdGlvbiBudW1iZXJGb3JtYXRJbmRpYSgkbnVtKXsNCg0KJGV4cGxyZXN0dW5pdHMgPSAiIiA7DQokbnVtPXByZWdfcmVwbGFjZSgnLywrLycsICcnLCAkbnVtKTsNCiR3b3JkcyA9IGV4cGxvZGUoIi4iLCAkbnVtKTsNCg0KDQppZihzdHJsZW4oJG51bSk+Myl7DQogICAgJGxhc3R0aHJlZSA9IHN1YnN0cigkbnVtLCBzdHJsZW4oJG51bSktMywgc3RybGVuKCRudW0pKTsNCiAgICAkcmVzdHVuaXRzID0gc3Vic3RyKCRudW0sIDAsIHN0cmxlbigkbnVtKS0zKTsgLy8gZXh0cmFjdHMgdGhlIGxhc3QgdGhyZWUgZGlnaXRzDQogICAgJHJlc3R1bml0cyA9IChzdHJsZW4oJHJlc3R1bml0cyklMiA9PSAxKT8iMCIuJHJlc3R1bml0czokcmVzdHVuaXRzOyAvLyBleHBsb2RlcyB0aGUgcmVtYWluaW5nIGRpZ2l0cyBpbiAyJ3MgZm9ybWF0cywgYWRkcyBhIHplcm8gaW4gdGhlIGJlZ2lubmluZyB0byBtYWludGFpbiB0aGUgMidzIGdyb3VwaW5nLg0KICAgICRleHB1bml0ID0gc3RyX3NwbGl0KCRyZXN0dW5pdHMsIDIpOw0KICAgIGZvcigkaT0wOyAkaTxzaXplb2YoJGV4cHVuaXQpOyAkaSsrKXsNCiAgICAgICAgLy8gY3JlYXRlcyBlYWNoIG9mIHRoZSAyJ3MgZ3JvdXAgYW5kIGFkZHMgYSBjb21tYSB0byB0aGUgZW5kDQogICAgICAgIGlmKCRpPT0wKQ0KICAgICAgICB7DQogICAgICAgICAgICAkZXhwbHJlc3R1bml0cyAuPSAoaW50KSRleHB1bml0WyRpXS4iLCI7IC8vIGlmIGlzIGZpcnN0IHZhbHVlICwgY29udmVydCBpbnRvIGludGVnZXINCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAkZXhwbHJlc3R1bml0cyAuPSAkZXhwdW5pdFskaV0uIiwiOw0KICAgICAgICB9DQogICAgfQ0KICAgICR0aGVjYXNoID0gJGV4cGxyZXN0dW5pdHMuJGxhc3R0aHJlZTsNCn0gZWxzZSB7DQogICAgJHRoZWNhc2ggPSAkbnVtOw0KfQ0KcmV0dXJuICIkdGhlY2FzaCI7IA0KDQp9DQoNCg0KDQoNCg0KID8+IA0KIDxzY3JpcHQ+DQpmdW5jdGlvbiBpdGVtX2RldGFpbHMoeCkNCiB7ICQuYWpheCh7DQogICAgIHR5cGU6ICJQT1NUIiwNCiAgICAgdXJsOiJpdGVtX2RldGFpbHNfLnBocCIsDQogZGF0YToge3g6eCxzdGFydF9kYXRlOiQoIiNzdGFydF9kYXRlIikudmFsKCksZW5kX2RhdGU6JCgiI2VuZF9kYXRlIikudmFsKCl9LA0KDQpjYWNoZTogZmFsc2UsDQoJCQliZWZvcmVTZW5kOiBmdW5jdGlvbigpIA0KCQkJew0KCQkJCSQoIiNpdGVtX2RldGFpbHNfIikuaHRtbCgnPGZvbnQgc3R5bGU9ImZvbnQtZmFtaWx5OlZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE2cHg7Ij5QbGVhc2Ugd2FpdDwvZm9udD4gPGltZyBzcmM9ImltYWdlcy9sb2FkaW5ncy5naWYiIGFsaWduPSJhYnNtaWRkbGUiIGFsdD0iTG9hZGluZy4uLiI+Jyk7DQoJCQl9LCAgDQoJCQkgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgew0KICAgICAgICAgICAvLyBkYXRhIGlzIHVyIHN1bW1hcnkNCiAgICAgJCgiI2l0ZW1fZGV0YWlsc18iKS5odG1sKGRhdGEpOw0KCSAgICAgfQ0KICAgfSk7DQogIH0NCiANCjwvc2NyaXB0Pg0KDQoNCiANCiANCiANCiANCiANCiANCiANCiANCiANCiA=")); ?>
Function Calls
| base64_decode | 1 |
Stats
| MD5 | c421bf400ad1b83affaa1f218231d315 |
| Eval Count | 1 |
| Decode Time | 100 ms |