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("PD9waHANCmRlZmluZWQoJ0JBU0VQQVRIJykgT1IgZXhpdCgnTm8gZGlyZWN..
Decoded Output download
?>b'<?php
defined(\'BASEPATH\') OR exit(\'No direct script access allowed\');
class C_tpp extends AUTH_Controller {
public function __construct() {
parent::__construct();
$this->load->model(\'M_config\');
$this->load->model(\'M_bagian\');
$this->load->model(\'M_absen\');
$this->load->model(\'M_tpp\');
$this->load->model(\'M_master\',\'openModel\');
date_default_timezone_set(\'Asia/Seoul\');
}
private $page = \'Data Kedisiplinan\';
private $judul = \'Data Kedisiplinan\';
private $deskripsi = \'Manage Data Kedisiplinan\';
public function ringkasanTPPTahun() {
// $data[\'ringkasan\'] = $this->M_tpp->ringkasanTPPTahun();
$data[\'ringkasan\'] = $this->M_tpp->ringkasanTPPTahunPosting();
echo json_encode($data[\'ringkasan\']);
}
public function cekStatus() {
$kd_skpd = $this->userdata->kd_skpd;
$bln = $this->session->userdata(\'blnFilter\');
$thn = $this->session->userdata(\'thnFilter\');
$tgl = date(\'Y-m-d H:i:s\');
$cek = $this->db->query("SELECT MIN(sts_verifikasi) as sts FROM tr_laporan WHERE MONTH(tgl)= \'$bln\' AND YEAR(tgl) = \'$thn\' AND id_user = \'$kd_skpd\' GROUP BY id_user,tgl limit 1")->row();
if ($cek) {
if ($cek->sts == 1) {
$kd_skpd = $this->userdata->kd_skpd;
$sql = "UPDATE tr_laporan SET sts_kirim = 1, tgl_kirim = \'$tgl\' WHERE MONTH(tgl)= \'$bln\' AND YEAR(tgl) = \'$thn\' AND id_user = \'$peg\' AND sts_kirim = 0";
$this->db->query($sql);
$hasil = $this->db->affected_rows();
$data[\'detail\'] = $hasil .\' Data Kinerja/Aktivitas Berhasil Dikirim <i class="smile outline icon"></i>\';
$data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn);
$data[\'userdata\'] = $this->userdata;
$data[\'deskripsi_detail\'] = "Info";
echo show_my_modal(\'modals/modal_ppt_error\', \'detail-ppt\', $data, \'sm\');
}else{
$data[\'detail\'] = \'Data Belum Diverifikasi <i class="frown outline icon"></i>\';
$data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn);
$data[\'userdata\'] = $this->userdata;
$data[\'deskripsi_detail\'] = "Info";
echo show_my_modal(\'modals/modal_ppt_error\', \'detail-ppt\', $data, \'sm\');
}
}else{
$data[\'detail\'] = \'Data Belum ada <i class="meh outline icon"></i>\';
$data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn);
$data[\'userdata\'] = $this->userdata;
$data[\'deskripsi_detail\'] = "Info";
echo show_my_modal(\'modals/modal_ppt_error\', \'detail-ppt\', $data, \'sm\');
}
}
public function prestasi() {
$data[\'userdata\'] = $this->userdata;
$session = array(\'blnFilter\' => date(\'m\'),\'thnFilter\' => date(\'Y\'));
$this->session->set_userdata($session);
$data[\'page\'] = "Absensi";
$data[\'judul\'] = "Absensi";
$data[\'menu_aktif\'] = "LAPORAN TPP";
$data[\'deskripsi\'] = "LAPORAN TPP ASPEK PRESTASI KERJA";
$this->template->views(\'prestasi_kerja/Vprestasi\', $data);
}
//dipakai
public function prilaku() {
$data[\'userdata\'] = $this->userdata;
$session = array(\'blnFilter\' => date(\'m\'),\'thnFilter\' => date(\'Y\'));
$this->session->set_userdata($session);
$data[\'page\'] = "Absensi";
$data[\'judul\'] = "Absensi";
$data[\'menu_aktif\'] = "LAPORAN TPP";
$data[\'deskripsi\'] = "LAPORAN TPP ASPEK PRILAKU KERJA";
$this->template->views(\'perilaku_kerja/Vperilaku\', $data);
}
public function pengajuan() {
$data[\'userdata\'] = $this->userdata;
$session = array(\'blnFilter\' => date(\'m\'),\'thnFilter\' => date(\'Y\'));
$this->session->set_userdata($session);
$data[\'page\'] = "Absensi";
$data[\'judul\'] = "Absensi";
$data[\'menu_aktif\'] = "LAPORAN TPP";
$data[\'deskripsi\'] = "PENGAJUAN TRANSFER BENDAHARA";
$this->template->views(\'pengajuan_bendahara/Vpengajuan\', $data);
}
public function tampilrekapprilaku() {
$thn = $this->input->post(\'thn\');
$bln = $this->input->post(\'bln\');
$kriteria = $this->input->post(\'kriteria\');
$cetak = false;
$data[\'dataList\'] = $this->M_tpp->selectRekapPrilaku($cetak);
// $data[\'detail\'] = $bln.\'/\'.$thn.\'/\'.$kriteria.\'/\';
$data[\'userdata\'] = $this->userdata;
$this->load->view(\'perilaku_kerja/list_prilaku\', $data);
}
public function tampilrekapprestasi() {
$thn = $this->input->post(\'thn\');
$bln = $this->input->post(\'bln\');
$kriteria = $this->input->post(\'kriteria\');
$cetak = false;
$data[\'dataList\'] = $this->M_tpp->selectRekapPrestasi($cetak);
// $data[\'detail\'] = $bln.\'/\'.$thn.\'/\'.$kriteria.\'/\';
$data[\'userdata\'] = $this->userdata;
$this->load->view(\'perilaku_kerja/list_prilaku\', $data);
}
public function tampilrekappengajuan() {
$thn = $this->input->post(\'thn\');
$bln = $this->input->post(\'bln\');
$kriteria = $this->input->post(\'kriteria\');
$cetak = false;
$data[\'dataList\'] = $this->M_tpp->selectRekapPengajuan($cetak);
// $data[\'detail\'] = $bln.\'/\'.$thn.\'/\'.$kriteria.\'/\';
$data[\'userdata\'] = $this->userdata;
$this->load->view(\'perilaku_kerja/list_prilaku\', $data);
}
public function pilihAtasan() {
$bln = $_POST[\'bln\'];
$thn = $_POST[\'thn\'];
$kriteria = $_POST[\'kriteria\'];
$kd_skpd = $this->userdata->kd_skpd;
$sql = "SELECT * FROM admin WHERE kd_skpd = \'$kd_skpd\' and level = 4 and (kd_jab IN (\'6\',\'7\',\'8\',\'15\'))";
$data[\'detail\'] = $this->db->query($sql)->result_array();
$data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn, \'kriteria\' => $kriteria);
$data[\'userdata\'] = $this->userdata;
$data[\'deskripsi_detail\'] = "Pejabat Penandatangan";
echo show_my_modal(\'modals/modal_cetak_prilaku\', \'detail-cetak\', $data, \'lg\');
}
public function pilihAtasanPrestasi() {
$bln = $_POST[\'bln\'];
$thn = $_POST[\'thn\'];
$kriteria = $_POST[\'kriteria\'];
$kd_skpd = $this->userdata->kd_skpd;
$sql = "SELECT * FROM admin WHERE kd_skpd = \'$kd_skpd\' and level = 4 and (kd_jab IN (\'6\',\'7\',\'8\',\'15\'))";
$data[\'detail\'] = $this->db->query($sql)->result_array();
$data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn, \'kriteria\' => $kriteria);
$data[\'userdata\'] = $this->userdata;
$data[\'deskripsi_detail\'] = "Pejabat Penandatangan";
echo show_my_modal(\'modals/modal_cetak_prestasi\', \'detail-cetak\', $data, \'lg\');
}
public function pilihAtasanPengajuan() {
$bln = $_POST[\'bln\'];
$thn = $_POST[\'thn\'];
$kriteria = $_POST[\'kriteria\'];
$kd_skpd = $this->userdata->kd_skpd;
$sql = "SELECT * FROM admin WHERE kd_skpd = \'$kd_skpd\' and level = 4 and (kd_jab IN (\'6\',\'7\',\'8\',\'15\'))";
$data[\'detail\'] = $this->db->query($sql)->result_array();
$data[\'filter\'] = array(\'bln\' => $bln, \'thn\' => $thn, \'kriteria\' => $kriteria);
$data[\'userdata\'] = $this->userdata;
$data[\'deskripsi_detail\'] = "Pejabat Penandatangan";
echo show_my_modal(\'modals/modal_cetak_pengajuan\', \'detail-cetak\', $data, \'lg\');
}
public function cetakRekap() {
$session = array(\'ctipe\' => $_POST[\'tipe\'],\'ckriteria\' => $_POST[\'kriteria\'],\'cbln\' => $_POST[\'bulan\'],\'cthn\' => $_POST[\'tahun\'],\'cnip1\' => $_POST[\'nip_pejabat1\'],
\'cnama1\' => $_POST[\'nama_pejabat1\'],\'cjbt1\' => $_POST[\'jabatan1\'],\'cnip2\' => $_POST[\'nip_pejabat2\'],
\'cnama2\' => $_POST[\'nama_pejabat2\'],\'cjbt2\' => $_POST[\'jabatan2\'],\'cnip3\' => $_POST[\'nip_pejabat3\'],
\'cnama3\' => $_POST[\'nama_pejabat3\'],\'cjbt3\' => $_POST[\'jabatan3\'],\'cnip4\' => $_POST[\'nip_pejabat4\'],
\'cnama4\' => $_POST[\'nama_pejabat4\'],\'cjbt4\' => $_POST[\'jabatan4\']);
$this->session->set_userdata($session);
echo show_my_modal(\'modals/modal_cetak_rekap_prilaku\', \'detail-pdf\', \'\', \'lg\');
}
public function cetakRekapPrestasi() {
// print_r($this->userdata->kd_skpd);die();
$session = array(\'ctipe\' => $_POST[\'tipe\'],\'ckriteria\' => $_POST[\'kriteria\'],\'cbln\' => $_POST[\'bulan\'],\'cthn\' => $_POST[\'tahun\'],\'cnip1\' => $_POST[\'nip_pejabat1\'],
\'cnama1\' => $_POST[\'nama_pejabat1\'],\'cjbt1\' => $_POST[\'jabatan1\'],\'cnip2\' => $_POST[\'nip_pejabat2\'],
\'cnama2\' => $_POST[\'nama_pejabat2\'],\'cjbt2\' => $_POST[\'jabatan2\'],\'cnip3\' => $_POST[\'nip_pejabat3\'],
\'cnama3\' => $_POST[\'nama_pejabat3\'],\'cjbt3\' => $_POST[\'jabatan3\'],\'cnip4\' => $_POST[\'nip_pejabat4\'],
\'cnama4\' => $_POST[\'nama_pejabat4\'],\'cjbt4\' => $_POST[\'jabatan4\']);
$this->session->set_userdata($session);
echo show_my_modal(\'modals/modal_cetak_rekap_prestasi\', \'detail-pdf\', \'\', \'lg\');
}
public function cetakRekapPengajuan() {
// print_r($this->userdata->kd_skpd);die();
$session = array(\'ctipe\' => $_POST[\'tipe\'],\'ckriteria\' => $_POST[\'kriteria\'],\'cbln\' => $_POST[\'bulan\'],\'cthn\' => $_POST[\'tahun\'],\'cnip1\' => $_POST[\'nip_pejabat1\'],
\'cnama1\' => $_POST[\'nama_pejabat1\'],\'cjbt1\' => $_POST[\'jabatan1\'],\'cnip2\' => $_POST[\'nip_pejabat2\'],
\'cnama2\' => $_POST[\'nama_pejabat2\'],\'cjbt2\' => $_POST[\'jabatan2\'],\'cnip3\' => $_POST[\'nip_pejabat3\'],
\'cnama3\' => $_POST[\'nama_pejabat3\'],\'cjbt3\' => $_POST[\'jabatan3\'],\'cnip4\' => $_POST[\'nip_pejabat4\'],
\'cnama4\' => $_POST[\'nama_pejabat4\'],\'cjbt4\' => $_POST[\'jabatan4\']);
$this->session->set_userdata($session);
echo show_my_modal(\'modals/modal_cetak_rekap_pengajuan\', \'detail-pdf\', \'\', \'lg\');
}
public function postingTPP() {
$msg = $this->M_tpp->postingTPP();
$data[\'detail\'] = $msg;
$data[\'userdata\'] = $this->userdata;
$data[\'deskripsi_detail\'] = "Info";
echo show_my_modal(\'modals/modal_ppt_error\', \'detail-ppt\', $data, \'md\');
// echo json_encode($data);
}
public function cetakRekapPdf() {
$cetak = true;
$judul = \'Asp_Prilaku_\'.$this->session->userdata(\'ckriteria\').\'_\'.$this->session->userdata(\'cbln\').\'_\'.$this->session->userdata(\'cthn\');
$data = $this->M_tpp->selectRekapPrilaku($cetak);
$this->_mpdf(\'\',$data,10,10,11,\'L\', $judul);
}
public function cetakRekapPrestasiPdf() {
$cetak = true;
$judul = \'Asp_Prestasi_\'.$this->session->userdata(\'ckriteria\').\'_\'.$this->session->userdata(\'cbln\').\'_\'.$this->session->userdata(\'cthn\');
$data = $this->M_tpp->selectRekapPrestasi($cetak);
$this->_mpdf(\'\',$data,10,10,11,\'L\', $judul);
}
public function cetakRekapPengajuanPdf() {
$cetak = true;
$judul = \'Pengajuan_\'.$this->session->userdata(\'ckriteria\').\'_\'.$this->session->userdata(\'cbln\').\'_\'.$this->session->userdata(\'cthn\');
$data = $this->M_tpp->selectRekapPengajuan($cetak);
$this->_mpdf(\'\',$data,10,10,11,\'L\', $judul);
}
public function absenPegawai() {
$data[\'userdata\'] = $this->userdata;
$session = array(\'blnFilter\' => date(\'m\'),\'thnFilter\' => date(\'Y\'));
$this->session->set_userdata($session);
$data[\'page\'] = "Absensi";
$data[\'judul\'] = "Absensi";
$data[\'menu_aktif\'] = "ABSENSI";
$data[\'deskripsi\'] = "DATA ABSENSI PER USER";
$this->template->views(\'absensi/Vabsensi\', $data);
}
// dipakai
//dipakai
public function kedisiplinan() {
$data[\'userdata\'] = $this->userdata;
$session = array(\'blnFilter\' => date(\'m\'),\'thnFilter\' => date(\'Y\'));
$this->session->set_userdata($session);
$data[\'page\'] = "Absensi";
$data[\'judul\'] = "Absensi";
$data[\'menu_aktif\'] = "ABSENSI";
$data[\'deskripsi\'] = "KEDISIPLINAN";
$this->template->views(\'absensi/Vdisiplin\', $data);
}
public function tampilKedisiplinan() {
$bln = $this->input->post(\'bln\');
$thn = $this->input->post(\'thn\');
// if($bln <> \'\' && $thn<>\'\'){
$session = array(\'blnFilter\' => $bln,\'thnFilter\' => $thn);
$this->session->set_userdata($session);
// }else{
// $bln = date(\'m\');
// $thn = date(\'Y\');
// }
$sql = "SELECT id,nip,nama,jabatan, IFNULL((SELECT STATUS FROM tr_disiplin WHERE a.`id` = tr_disiplin.`id_peg` AND bulan = \'$bln\' AND tahun = \'$thn\'),\'\') AS sts FROM admin a";
$data[\'listdata\'] = $this->M_absen->select_query($sql);
$data[\'userdata\'] = $this->userdata;
$this->load->view(\'absensi/list_disiplin\', $data);
}
public function detaildisiplin() {
$aksi = $_POST[\'aksi\'];
$bln = $this->session->userdata(\'blnFilter\');
$thn = $this->session->userdata(\'thnFilter\');
if($aksi == "detail"){
$id = $_POST[\'id\'];
$data[\'disable\'] = \'disabled\';
$data[\'readonly\'] = \'readonly\';
$data[\'simpan\'] = \'hidden\';
$data[\'ubah\'] = \'\';
$data[\'hapus\'] = \'\';
$data[\'aksi\'] = \'ubah\';
// $data[\'detail\'] = $this->openModel->select_by_id(\'tr_disiplin\',$id);
$sql = "SELECT * FROM tr_disiplin WHERE id_peg = \'$id\' AND bulan = \'$bln\' AND tahun = \'$thn\'";
$data[\'detail\'] = $this->db->query($sql)->row_array();
}else{
$id = "";
$data[\'disable\'] = \'\';
$data[\'simpan\'] = \'\';
$data[\'readonly\'] = \'\';
$data[\'ubah\'] = \'hidden\';
$data[\'hapus\'] = \'hidden\';
$data[\'aksi\'] = \'tambah\';
$data[\'detail\'] = array(\'id_peg\'=>trim($_POST[\'id\']),\'bulan\'=>$bln,\'tahun\'=>$thn,\'status\'=>\'\');
}
$data[\'userdata\'] = $this->userdata;
$data[\'deskripsi_detail\'] = "Kedisiplinan";
echo show_my_modal(\'modals/modal_detail_disiplin\', \'detail-disiplin\', $data, \'sm\');
}
public function addDisiplin($aksi){
$this->form_validation->set_rules(\'id_peg\',\'Id Pegawai\',\'trim|required\');
$this->form_validation->set_rules(\'status\',\'Status\',\'trim|required\');
$this->form_validation->set_rules(\'bulan\',\'Bulan\',\'trim|required\');
$this->form_validation->set_rules(\'tahun\',\'Tahun\',\'trim|required\');
$data = $this->input->post();
$sts_update = array(\'status\' => $this->input->post(\'status\'));
;
$id = array(\'id_peg\'=>$data[\'id_peg\']);
if ($this->form_validation->run() == TRUE) {
if($aksi == "tambah"){
$insert = $this->openModel->add(\'tr_disiplin\',$data);
$action = "ditambahkan";
}
else{
$insert = $this->openModel->update(\'tr_disiplin\',$sts_update,$id);
$action = "diperbarui";
}
if ($insert > 0) {
$out[\'status\'] = \'\';
$out[\'msg\'] = show_succ_msg($this->judul.\' Berhasil \'.$action, \'20px\');
} else {
$out[\'status\'] = \'\';
$out[\'msg\'] = show_err_msg($this->judul.\' Gagal \'.$action, \'20px\');
}
} else {
$out[\'status\'] = \'\';
$out[\'msg\'] = show_err_msg($this->judul.\' Belum lengkap\', \'20px\');
}
echo json_encode($out);
}
// dipakai
public function rekapAbsensi() {
$data[\'userdata\'] = $this->userdata;
$session = array(\'blnFilter\' => date(\'m\'),\'thnFilter\' => date(\'Y\'));
$this->session->set_userdata($session);
$data[\'page\'] = "Absensi";
$data[\'judul\'] = "Absensi";
$data[\'menu_aktif\'] = "ABSENSI";
$data[\'deskripsi\'] = "REKAP ABSENSI";
$this->template->views(\'absensi/Vrekapabsensi\', $data);
}
public function transfer() {
$data[\'userdata\'] = $this->userdata;
$data[\'page\'] = "Absensi";
$data[\'judul\'] = "Absensi";
$data[\'deskripsi\'] = "TRANSFER DATA ABSENSI";
$data[\'dataarsip\'] = $this->M_absen->select_all();
$this->template->views(\'absensi/Vtransfer\', $data);
}
public function do_transfer() {
$data[\'dataarsip\'] = $this->M_absen->transfer();
echo json_encode($data);
// $this->template->views(\'absensi/Vtransfer\', $data);
}
public function cek()
{
$sql= " SELECT B.USERID, Format([B.CHECKTIME],\'yyyy-mm-dd\') as Tanggal,
Min(Format([B.CHECKTIME],\'hh:mm\')) as Masuk, Max(Format([B.CHECKTIME],\'hh:mm\')) as Pulang
from CHECKINOUT B
where B.USERID= 9
and Year([B.CHECKTIME]) = 2019
and Month([B.CHECKTIME]) = 06
group by B.USERID, Format([B.CHECKTIME],\'yyyy-mm-dd\') ";
$res = $this->mdbAbsensi->query($sql)->result_array();
}
public function tampil() {
$data[\'dataabsen\'] = $this->M_absen->select_all();
print_r($data[\'dataabsen\']);die();
$data[\'userdata\'] = $this->userdata;
$this->load->view(\'absensi/Vabsensi_data\', $data);
}
public function tampilAbsenPerUser() {
$data[\'dataList\'] = $this->M_absen->selectPerUser();
$data[\'userdata\'] = $this->userdata;
$this->load->view(\'absensi/Vabsensi_data\', $data);
}
public function tampilAbsenRekap() {
$data[\'dataList\'] = $this->M_absen->selectRekap();
$data[\'userdata\'] = $this->userdata;
$this->load->view(\'absensi/Vrekapabsensi_data\', $data);
}
function _mpdf($judul=\'\',$isi=\'\',$lMargin=10,$rMargin=10,$font=10,$orientasi=\'\', $nama = \'1\') {
ini_set("memory_limit","-1");
$this->load->library(\'mpdf\');
$namaPdf = $nama.\'.pdf\';
$this->mpdf->defaultheaderfontsize = 10; /* in pts */
$this->mpdf->SetHTMLFooter(\'<table width="100%">
<tr>
<td width="100%" align="center"><i>{PAGENO}/{nbpg}</i></td>
</tr>
</table>\'); /* footer */
$this->mpdf->defaultheaderfontstyle = BI; /* blank, B, I, or BI */
$this->mpdf->defaultheaderline = 1; /* 1 to include line below header/above footer */
$this->mpdf->defaultfooterfontsize = 6; /* in pts */
$this->mpdf->defaultfooterfontstyle = BI; /* blank, B, I, or BI */
$this->mpdf->defaultfooterline = 1;
$this->mpdf->AddPage($orientasi);
if (!empty($judul)) $this->mpdf->writeHTML($judul);
$this->mpdf->writeHTML($isi);
$this->mpdf->Output($namaPdf,\'I\');
}
}
/* End of file fungsi.php */
/* Location: ./application/controllers/fungsi.php */'
Did this file decode correctly?
Original Code
<?php eval("?>".base64_decode("PD9waHANCmRlZmluZWQoJ0JBU0VQQVRIJykgT1IgZXhpdCgnTm8gZGlyZWN0IHNjcmlwdCBhY2Nlc3MgYWxsb3dlZCcpOw0KDQpjbGFzcyBDX3RwcCBleHRlbmRzIEFVVEhfQ29udHJvbGxlciB7DQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+bG9hZC0+bW9kZWwoJ01fY29uZmlnJyk7DQogICAgICAgICR0aGlzLT5sb2FkLT5tb2RlbCgnTV9iYWdpYW4nKTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPm1vZGVsKCdNX2Fic2VuJyk7DQogICAgICAgICR0aGlzLT5sb2FkLT5tb2RlbCgnTV90cHAnKTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPm1vZGVsKCdNX21hc3RlcicsJ29wZW5Nb2RlbCcpOw0KICAgICAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdBc2lhL1Nlb3VsJyk7DQogICAgfQ0KDQogICAgcHJpdmF0ZSAkcGFnZSAgICAgICA9ICdEYXRhIEtlZGlzaXBsaW5hbic7DQogICAgcHJpdmF0ZSAkanVkdWwgICAgICA9ICdEYXRhIEtlZGlzaXBsaW5hbic7DQogICAgcHJpdmF0ZSAkZGVza3JpcHNpICA9ICdNYW5hZ2UgRGF0YSBLZWRpc2lwbGluYW4nOw0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJpbmdrYXNhblRQUFRhaHVuKCkgew0KDQogICAgICAgIC8vICRkYXRhWydyaW5na2FzYW4nXSAgICAgID0gJHRoaXMtPk1fdHBwLT5yaW5na2FzYW5UUFBUYWh1bigpOw0KICAgICAgICAkZGF0YVsncmluZ2thc2FuJ10gICAgICA9ICR0aGlzLT5NX3RwcC0+cmluZ2thc2FuVFBQVGFodW5Qb3N0aW5nKCk7DQogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJGRhdGFbJ3JpbmdrYXNhbiddKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY2VrU3RhdHVzKCkgew0KDQogICAgICAgICRrZF9za3BkID0gJHRoaXMtPnVzZXJkYXRhLT5rZF9za3BkOw0KICAgICAgICAkYmxuID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdibG5GaWx0ZXInKTsNCiAgICAgICAgJHRobiA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgndGhuRmlsdGVyJyk7DQogICAgICAgICR0Z2wgPSBkYXRlKCdZLW0tZCBIOmk6cycpOw0KICAgICAgICAkY2VrID0gJHRoaXMtPmRiLT5xdWVyeSgiU0VMRUNUIE1JTihzdHNfdmVyaWZpa2FzaSkgYXMgc3RzIEZST00gdHJfbGFwb3JhbiBXSEVSRSBNT05USCh0Z2wpPSAnJGJsbicgQU5EIFlFQVIodGdsKSA9ICckdGhuJyBBTkQgaWRfdXNlciA9ICcka2Rfc2twZCcgR1JPVVAgQlkgaWRfdXNlcix0Z2wgbGltaXQgMSIpLT5yb3coKTsNCiAgICAgICAgaWYgKCRjZWspIHsNCiAgICAgICAgICAgIGlmICgkY2VrLT5zdHMgPT0gMSkgew0KICAgICAgICAgICAgICAgICRrZF9za3BkID0gJHRoaXMtPnVzZXJkYXRhLT5rZF9za3BkOw0KICAgICAgICAgICAgICAgICRzcWwgPSAiVVBEQVRFIHRyX2xhcG9yYW4gU0VUIHN0c19raXJpbSA9IDEsIHRnbF9raXJpbSA9ICckdGdsJyBXSEVSRSBNT05USCh0Z2wpPSAnJGJsbicgQU5EIFlFQVIodGdsKSA9ICckdGhuJyBBTkQgaWRfdXNlciA9ICckcGVnJyBBTkQgc3RzX2tpcmltID0gMCI7DQogICAgICAgICAgICAgICAgJHRoaXMtPmRiLT5xdWVyeSgkc3FsKTsNCiAgICAgICAgICAgICAgICAkaGFzaWwgPSAkdGhpcy0+ZGItPmFmZmVjdGVkX3Jvd3MoKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsnZGV0YWlsJ10gPSAkaGFzaWwgLicgRGF0YSBLaW5lcmphL0FrdGl2aXRhcyBCZXJoYXNpbCBEaWtpcmltIDxpIGNsYXNzPSJzbWlsZSBvdXRsaW5lIGljb24iPjwvaT4nOyANCiAgICAgICAgICAgICAgICAkZGF0YVsnZmlsdGVyJ10gPSBhcnJheSgnYmxuJyA9PiAkYmxuLCAndGhuJyA9PiAkdGhuKTsNCiAgICAgICAgICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgICAgICAgICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaV9kZXRhaWwnXSAgID0gIkluZm8iOyAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9wcHRfZXJyb3InLCAnZGV0YWlsLXBwdCcsICRkYXRhLCAnc20nKTsNCiAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICRkYXRhWydkZXRhaWwnXSA9ICdEYXRhIEJlbHVtIERpdmVyaWZpa2FzaSA8aSBjbGFzcz0iZnJvd24gb3V0bGluZSBpY29uIj48L2k+JzsgDQogICAgICAgICAgICAgICAgJGRhdGFbJ2ZpbHRlciddID0gYXJyYXkoJ2JsbicgPT4gJGJsbiwgJ3RobicgPT4gJHRobik7DQogICAgICAgICAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAgICAgICAgICRkYXRhWydkZXNrcmlwc2lfZGV0YWlsJ10gICA9ICJJbmZvIjsNCiAgICAgICAgICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9wcHRfZXJyb3InLCAnZGV0YWlsLXBwdCcsICRkYXRhLCAnc20nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAkZGF0YVsnZGV0YWlsJ10gPSAnRGF0YSBCZWx1bSBhZGEgPGkgY2xhc3M9Im1laCBvdXRsaW5lIGljb24iPjwvaT4nOyANCiAgICAgICAgICAgICRkYXRhWydmaWx0ZXInXSA9IGFycmF5KCdibG4nID0+ICRibG4sICd0aG4nID0+ICR0aG4pOw0KICAgICAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaV9kZXRhaWwnXSAgID0gIkluZm8iOw0KICAgICAgICAgICAgZWNobyBzaG93X215X21vZGFsKCdtb2RhbHMvbW9kYWxfcHB0X2Vycm9yJywgJ2RldGFpbC1wcHQnLCAkZGF0YSwgJ3NtJyk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlc3Rhc2koKSB7DQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gZGF0ZSgnbScpLCd0aG5GaWx0ZXInICA9PiBkYXRlKCdZJykpOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ21lbnVfYWt0aWYnXSA9ICJMQVBPUkFOIFRQUCI7DQogICAgICAgICRkYXRhWydkZXNrcmlwc2knXSAgPSAiTEFQT1JBTiBUUFAgQVNQRUsgUFJFU1RBU0kgS0VSSkEiOw0KICAgICAgICANCiAgICAgICAgJHRoaXMtPnRlbXBsYXRlLT52aWV3cygncHJlc3Rhc2lfa2VyamEvVnByZXN0YXNpJywgJGRhdGEpOyANCiAgICB9DQogICAgLy9kaXBha2FpDQogICAgcHVibGljIGZ1bmN0aW9uIHByaWxha3UoKSB7DQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gZGF0ZSgnbScpLCd0aG5GaWx0ZXInICA9PiBkYXRlKCdZJykpOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ21lbnVfYWt0aWYnXSA9ICJMQVBPUkFOIFRQUCI7DQogICAgICAgICRkYXRhWydkZXNrcmlwc2knXSAgPSAiTEFQT1JBTiBUUFAgQVNQRUsgUFJJTEFLVSBLRVJKQSI7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdwZXJpbGFrdV9rZXJqYS9WcGVyaWxha3UnLCAkZGF0YSk7IA0KICAgIH0NCiAgICANCg0KICAgICBwdWJsaWMgZnVuY3Rpb24gcGVuZ2FqdWFuKCkgew0KDQogICAgICAgICRkYXRhWyd1c2VyZGF0YSddICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICRzZXNzaW9uID0gYXJyYXkoJ2JsbkZpbHRlcicgID0+IGRhdGUoJ20nKSwndGhuRmlsdGVyJyAgPT4gZGF0ZSgnWScpKTsNCiAgICAgICAgJHRoaXMtPnNlc3Npb24tPnNldF91c2VyZGF0YSgkc2Vzc2lvbik7DQogICAgICAgICRkYXRhWydwYWdlJ10gICAgICAgPSAiQWJzZW5zaSI7DQogICAgICAgICRkYXRhWydqdWR1bCddICAgICAgPSAiQWJzZW5zaSI7DQogICAgICAgICRkYXRhWydtZW51X2FrdGlmJ10gPSAiTEFQT1JBTiBUUFAiOw0KICAgICAgICAkZGF0YVsnZGVza3JpcHNpJ10gID0gIlBFTkdBSlVBTiBUUkFOU0ZFUiBCRU5EQUhBUkEiOw0KICAgICAgICANCiAgICAgICAgJHRoaXMtPnRlbXBsYXRlLT52aWV3cygncGVuZ2FqdWFuX2JlbmRhaGFyYS9WcGVuZ2FqdWFuJywgJGRhdGEpOyANCiAgICB9DQogICAgcHVibGljIGZ1bmN0aW9uIHRhbXBpbHJla2FwcHJpbGFrdSgpIHsNCiAgICAgICAgJHRobiA9ICR0aGlzLT5pbnB1dC0+cG9zdCgndGhuJyk7DQogICAgICAgICRibG4gPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2JsbicpOw0KICAgICAgICAka3JpdGVyaWEgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2tyaXRlcmlhJyk7DQogICAgICAgICRjZXRhayA9IGZhbHNlOw0KICAgICAgICAkZGF0YVsnZGF0YUxpc3QnXSA9ICR0aGlzLT5NX3RwcC0+c2VsZWN0UmVrYXBQcmlsYWt1KCRjZXRhayk7DQogICAgICAgIA0KICAgICAgICAvLyAkZGF0YVsnZGV0YWlsJ10gPSAkYmxuLicvJy4kdGhuLicvJy4ka3JpdGVyaWEuJy8nOw0KICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygncGVyaWxha3Vfa2VyamEvbGlzdF9wcmlsYWt1JywgJGRhdGEpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1waWxyZWthcHByZXN0YXNpKCkgew0KICAgICAgICAkdGhuID0gJHRoaXMtPmlucHV0LT5wb3N0KCd0aG4nKTsNCiAgICAgICAgJGJsbiA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnYmxuJyk7DQogICAgICAgICRrcml0ZXJpYSA9ICR0aGlzLT5pbnB1dC0+cG9zdCgna3JpdGVyaWEnKTsNCiAgICAgICAgJGNldGFrID0gZmFsc2U7DQogICAgICAgICRkYXRhWydkYXRhTGlzdCddID0gJHRoaXMtPk1fdHBwLT5zZWxlY3RSZWthcFByZXN0YXNpKCRjZXRhayk7DQogICAgICAgIA0KICAgICAgICAvLyAkZGF0YVsnZGV0YWlsJ10gPSAkYmxuLicvJy4kdGhuLicvJy4ka3JpdGVyaWEuJy8nOw0KICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygncGVyaWxha3Vfa2VyamEvbGlzdF9wcmlsYWt1JywgJGRhdGEpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1waWxyZWthcHBlbmdhanVhbigpIHsNCiAgICAgICAgJHRobiA9ICR0aGlzLT5pbnB1dC0+cG9zdCgndGhuJyk7DQogICAgICAgICRibG4gPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2JsbicpOw0KICAgICAgICAka3JpdGVyaWEgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2tyaXRlcmlhJyk7DQogICAgICAgICRjZXRhayA9IGZhbHNlOw0KICAgICAgICAkZGF0YVsnZGF0YUxpc3QnXSA9ICR0aGlzLT5NX3RwcC0+c2VsZWN0UmVrYXBQZW5nYWp1YW4oJGNldGFrKTsNCiAgICAgICAgDQogICAgICAgIC8vICRkYXRhWydkZXRhaWwnXSA9ICRibG4uJy8nLiR0aG4uJy8nLiRrcml0ZXJpYS4nLyc7DQogICAgICAgICRkYXRhWyd1c2VyZGF0YSddICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICR0aGlzLT5sb2FkLT52aWV3KCdwZXJpbGFrdV9rZXJqYS9saXN0X3ByaWxha3UnLCAkZGF0YSk7DQogICAgfQ0KDQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIHBpbGloQXRhc2FuKCkgew0KDQogICAgICAgICRibG4gPSAkX1BPU1RbJ2JsbiddOw0KICAgICAgICAkdGhuID0gJF9QT1NUWyd0aG4nXTsNCiAgICAgICAgJGtyaXRlcmlhID0gJF9QT1NUWydrcml0ZXJpYSddOw0KICAgICAgICAka2Rfc2twZCA9ICR0aGlzLT51c2VyZGF0YS0+a2Rfc2twZDsNCiAgICAgICAgDQogICAgICAgICRzcWwgPSAiU0VMRUNUICogRlJPTSBhZG1pbiBXSEVSRSBrZF9za3BkID0gJyRrZF9za3BkJyBhbmQgbGV2ZWwgPSA0IGFuZCAoa2RfamFiIElOICgnNicsJzcnLCc4JywnMTUnKSkiOw0KICAgICAgICAkZGF0YVsnZGV0YWlsJ10gPSAkdGhpcy0+ZGItPnF1ZXJ5KCRzcWwpLT5yZXN1bHRfYXJyYXkoKTsNCiAgICAgICAgJGRhdGFbJ2ZpbHRlciddID0gYXJyYXkoJ2JsbicgPT4gJGJsbiwgJ3RobicgPT4gJHRobiwgJ2tyaXRlcmlhJyA9PiAka3JpdGVyaWEpOw0KICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgICAgICAgICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICRkYXRhWydkZXNrcmlwc2lfZGV0YWlsJ10gICA9ICJQZWphYmF0IFBlbmFuZGF0YW5nYW4iOw0KDQogICAgICAgIGVjaG8gc2hvd19teV9tb2RhbCgnbW9kYWxzL21vZGFsX2NldGFrX3ByaWxha3UnLCAnZGV0YWlsLWNldGFrJywgJGRhdGEsICdsZycpOw0KICAgIH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gcGlsaWhBdGFzYW5QcmVzdGFzaSgpIHsNCg0KICAgICAgICAgJGJsbiA9ICRfUE9TVFsnYmxuJ107DQogICAgICAgICR0aG4gPSAkX1BPU1RbJ3RobiddOw0KICAgICAgICAka3JpdGVyaWEgPSAkX1BPU1RbJ2tyaXRlcmlhJ107DQogICAgICAgICRrZF9za3BkID0gJHRoaXMtPnVzZXJkYXRhLT5rZF9za3BkOw0KICAgICAgICANCiAgICAgICAgJHNxbCA9ICJTRUxFQ1QgKiBGUk9NIGFkbWluIFdIRVJFIGtkX3NrcGQgPSAnJGtkX3NrcGQnIGFuZCBsZXZlbCA9IDQgYW5kIChrZF9qYWIgSU4gKCc2JywnNycsJzgnLCcxNScpKSI7DQogICAgICAgICRkYXRhWydkZXRhaWwnXSA9ICR0aGlzLT5kYi0+cXVlcnkoJHNxbCktPnJlc3VsdF9hcnJheSgpOw0KICAgICAgICAkZGF0YVsnZmlsdGVyJ10gPSBhcnJheSgnYmxuJyA9PiAkYmxuLCAndGhuJyA9PiAkdGhuLCAna3JpdGVyaWEnID0+ICRrcml0ZXJpYSk7DQogICAgICAgICRkYXRhWyd1c2VyZGF0YSddICAgICAgICAgICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaV9kZXRhaWwnXSAgID0gIlBlamFiYXQgUGVuYW5kYXRhbmdhbiI7DQoNCiAgICAgICAgZWNobyBzaG93X215X21vZGFsKCdtb2RhbHMvbW9kYWxfY2V0YWtfcHJlc3Rhc2knLCAnZGV0YWlsLWNldGFrJywgJGRhdGEsICdsZycpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwaWxpaEF0YXNhblBlbmdhanVhbigpIHsNCg0KICAgICAgICAkYmxuID0gJF9QT1NUWydibG4nXTsNCiAgICAgICAgJHRobiA9ICRfUE9TVFsndGhuJ107DQogICAgICAgICRrcml0ZXJpYSA9ICRfUE9TVFsna3JpdGVyaWEnXTsNCiAgICAgICAgJGtkX3NrcGQgPSAkdGhpcy0+dXNlcmRhdGEtPmtkX3NrcGQ7DQogICAgICAgIA0KICAgICAgICAkc3FsID0gIlNFTEVDVCAqIEZST00gYWRtaW4gV0hFUkUga2Rfc2twZCA9ICcka2Rfc2twZCcgYW5kIGxldmVsID0gNCBhbmQgKGtkX2phYiBJTiAoJzYnLCc3JywnOCcsJzE1JykpIjsNCiAgICAgICAgJGRhdGFbJ2RldGFpbCddID0gJHRoaXMtPmRiLT5xdWVyeSgkc3FsKS0+cmVzdWx0X2FycmF5KCk7DQogICAgICAgICRkYXRhWydmaWx0ZXInXSA9IGFycmF5KCdibG4nID0+ICRibG4sICd0aG4nID0+ICR0aG4sICdrcml0ZXJpYScgPT4gJGtyaXRlcmlhKTsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkZGF0YVsnZGVza3JpcHNpX2RldGFpbCddICAgPSAiUGVqYWJhdCBQZW5hbmRhdGFuZ2FuIjsNCg0KICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9jZXRha19wZW5nYWp1YW4nLCAnZGV0YWlsLWNldGFrJywgJGRhdGEsICdsZycpOw0KICAgIH0NCg0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNldGFrUmVrYXAoKSB7DQogICAgICAgIA0KICAgICAgICAkc2Vzc2lvbiA9IGFycmF5KCdjdGlwZScgID0+ICRfUE9TVFsndGlwZSddLCdja3JpdGVyaWEnICA9PiAkX1BPU1RbJ2tyaXRlcmlhJ10sJ2NibG4nICA9PiAkX1BPU1RbJ2J1bGFuJ10sJ2N0aG4nICA9PiAkX1BPU1RbJ3RhaHVuJ10sJ2NuaXAxJyAgPT4gJF9QT1NUWyduaXBfcGVqYWJhdDEnXSwNCiAgICAgICAgICAgICdjbmFtYTEnICA9PiAkX1BPU1RbJ25hbWFfcGVqYWJhdDEnXSwnY2pidDEnICA9PiAkX1BPU1RbJ2phYmF0YW4xJ10sJ2NuaXAyJyAgPT4gJF9QT1NUWyduaXBfcGVqYWJhdDInXSwNCiAgICAgICAgICAgICdjbmFtYTInICA9PiAkX1BPU1RbJ25hbWFfcGVqYWJhdDInXSwnY2pidDInICA9PiAkX1BPU1RbJ2phYmF0YW4yJ10sJ2NuaXAzJyAgPT4gJF9QT1NUWyduaXBfcGVqYWJhdDMnXSwNCiAgICAgICAgICAgICdjbmFtYTMnICA9PiAkX1BPU1RbJ25hbWFfcGVqYWJhdDMnXSwnY2pidDMnICA9PiAkX1BPU1RbJ2phYmF0YW4zJ10sJ2NuaXA0JyAgPT4gJF9QT1NUWyduaXBfcGVqYWJhdDQnXSwNCiAgICAgICAgICAgICdjbmFtYTQnICA9PiAkX1BPU1RbJ25hbWFfcGVqYWJhdDQnXSwnY2pidDQnICA9PiAkX1BPU1RbJ2phYmF0YW40J10pOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCg0KICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9jZXRha19yZWthcF9wcmlsYWt1JywgJ2RldGFpbC1wZGYnLCAnJywgJ2xnJyk7DQogICAgICAgIA0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha1Jla2FwUHJlc3Rhc2koKSB7DQogICAgICAgIC8vIHByaW50X3IoJHRoaXMtPnVzZXJkYXRhLT5rZF9za3BkKTtkaWUoKTsNCiAgICAgICAgICRzZXNzaW9uID0gYXJyYXkoJ2N0aXBlJyAgPT4gJF9QT1NUWyd0aXBlJ10sJ2Nrcml0ZXJpYScgID0+ICRfUE9TVFsna3JpdGVyaWEnXSwnY2JsbicgID0+ICRfUE9TVFsnYnVsYW4nXSwnY3RobicgID0+ICRfUE9TVFsndGFodW4nXSwnY25pcDEnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MSddLA0KICAgICAgICAgICAgJ2NuYW1hMScgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MSddLCdjamJ0MScgID0+ICRfUE9TVFsnamFiYXRhbjEnXSwnY25pcDInICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MiddLA0KICAgICAgICAgICAgJ2NuYW1hMicgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MiddLCdjamJ0MicgID0+ICRfUE9TVFsnamFiYXRhbjInXSwnY25pcDMnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MyddLA0KICAgICAgICAgICAgJ2NuYW1hMycgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MyddLCdjamJ0MycgID0+ICRfUE9TVFsnamFiYXRhbjMnXSwnY25pcDQnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0NCddLA0KICAgICAgICAgICAgJ2NuYW1hNCcgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0NCddLCdjamJ0NCcgID0+ICRfUE9TVFsnamFiYXRhbjQnXSk7DQogICAgICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoJHNlc3Npb24pOw0KDQogICAgICAgIGVjaG8gc2hvd19teV9tb2RhbCgnbW9kYWxzL21vZGFsX2NldGFrX3Jla2FwX3ByZXN0YXNpJywgJ2RldGFpbC1wZGYnLCAnJywgJ2xnJyk7DQogICAgICAgIA0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha1Jla2FwUGVuZ2FqdWFuKCkgew0KICAgICAgICAvLyBwcmludF9yKCR0aGlzLT51c2VyZGF0YS0+a2Rfc2twZCk7ZGllKCk7DQogICAgICAgICRzZXNzaW9uID0gYXJyYXkoJ2N0aXBlJyAgPT4gJF9QT1NUWyd0aXBlJ10sJ2Nrcml0ZXJpYScgID0+ICRfUE9TVFsna3JpdGVyaWEnXSwnY2JsbicgID0+ICRfUE9TVFsnYnVsYW4nXSwnY3RobicgID0+ICRfUE9TVFsndGFodW4nXSwnY25pcDEnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MSddLA0KICAgICAgICAgICAgJ2NuYW1hMScgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MSddLCdjamJ0MScgID0+ICRfUE9TVFsnamFiYXRhbjEnXSwnY25pcDInICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MiddLA0KICAgICAgICAgICAgJ2NuYW1hMicgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MiddLCdjamJ0MicgID0+ICRfUE9TVFsnamFiYXRhbjInXSwnY25pcDMnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0MyddLA0KICAgICAgICAgICAgJ2NuYW1hMycgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0MyddLCdjamJ0MycgID0+ICRfUE9TVFsnamFiYXRhbjMnXSwnY25pcDQnICA9PiAkX1BPU1RbJ25pcF9wZWphYmF0NCddLA0KICAgICAgICAgICAgJ2NuYW1hNCcgID0+ICRfUE9TVFsnbmFtYV9wZWphYmF0NCddLCdjamJ0NCcgID0+ICRfUE9TVFsnamFiYXRhbjQnXSk7DQogICAgICAgICR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoJHNlc3Npb24pOw0KDQogICAgICAgIGVjaG8gc2hvd19teV9tb2RhbCgnbW9kYWxzL21vZGFsX2NldGFrX3Jla2FwX3BlbmdhanVhbicsICdkZXRhaWwtcGRmJywgJycsICdsZycpOw0KICAgICAgICANCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9zdGluZ1RQUCgpIHsNCg0KICAgICAgICAkbXNnID0gJHRoaXMtPk1fdHBwLT5wb3N0aW5nVFBQKCk7DQogICAgICAgICRkYXRhWydkZXRhaWwnXSA9ICRtc2c7IA0KICAgICAgICANCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkZGF0YVsnZGVza3JpcHNpX2RldGFpbCddICAgPSAiSW5mbyI7ICAgICAgICAgICAgICAgIA0KICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9wcHRfZXJyb3InLCAnZGV0YWlsLXBwdCcsICRkYXRhLCAnbWQnKTsNCiAgICAgICAgLy8gZWNobyBqc29uX2VuY29kZSgkZGF0YSk7DQogICAgICAgIA0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBjZXRha1Jla2FwUGRmKCkgew0KICAgICAgICAkY2V0YWsgPSB0cnVlOw0KICAgICAgICAkanVkdWwgPSAnQXNwX1ByaWxha3VfJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2Nrcml0ZXJpYScpLidfJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2NibG4nKS4nXycuJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdjdGhuJyk7DQogICAgICAgICRkYXRhID0gJHRoaXMtPk1fdHBwLT5zZWxlY3RSZWthcFByaWxha3UoJGNldGFrKTsNCiAgICAgICAgJHRoaXMtPl9tcGRmKCcnLCRkYXRhLDEwLDEwLDExLCdMJywgJGp1ZHVsKTsgDQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNldGFrUmVrYXBQcmVzdGFzaVBkZigpIHsNCiAgICAgICAgJGNldGFrID0gdHJ1ZTsNCiAgICAgICAgJGp1ZHVsID0gJ0FzcF9QcmVzdGFzaV8nLiR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnY2tyaXRlcmlhJykuJ18nLiR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnY2JsbicpLidfJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2N0aG4nKTsNCiAgICAgICAgJGRhdGEgPSAkdGhpcy0+TV90cHAtPnNlbGVjdFJla2FwUHJlc3Rhc2koJGNldGFrKTsNCiAgICAgICAgJHRoaXMtPl9tcGRmKCcnLCRkYXRhLDEwLDEwLDExLCdMJywgJGp1ZHVsKTsgDQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNldGFrUmVrYXBQZW5nYWp1YW5QZGYoKSB7DQogICAgICAgICRjZXRhayA9IHRydWU7DQogICAgICAgICRqdWR1bCA9ICdQZW5nYWp1YW5fJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2Nrcml0ZXJpYScpLidfJy4kdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2NibG4nKS4nXycuJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdjdGhuJyk7DQogICAgICAgICRkYXRhID0gJHRoaXMtPk1fdHBwLT5zZWxlY3RSZWthcFBlbmdhanVhbigkY2V0YWspOw0KICAgICAgICAkdGhpcy0+X21wZGYoJycsJGRhdGEsMTAsMTAsMTEsJ0wnLCAkanVkdWwpOyANCiAgICB9DQoNCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBhYnNlblBlZ2F3YWkoKSB7DQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gZGF0ZSgnbScpLCd0aG5GaWx0ZXInICA9PiBkYXRlKCdZJykpOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ21lbnVfYWt0aWYnXSA9ICJBQlNFTlNJIjsNCiAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaSddICA9ICJEQVRBIEFCU0VOU0kgUEVSIFVTRVIiOw0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdhYnNlbnNpL1ZhYnNlbnNpJywgJGRhdGEpOyANCiAgICB9DQogICAgLy8gZGlwYWthaQ0KICAgIC8vZGlwYWthaQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBrZWRpc2lwbGluYW4oKSB7DQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gZGF0ZSgnbScpLCd0aG5GaWx0ZXInICA9PiBkYXRlKCdZJykpOw0KICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ21lbnVfYWt0aWYnXSA9ICJBQlNFTlNJIjsNCiAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaSddICA9ICJLRURJU0lQTElOQU4iOw0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdhYnNlbnNpL1ZkaXNpcGxpbicsICRkYXRhKTsgDQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHRhbXBpbEtlZGlzaXBsaW5hbigpIHsNCiAgICAgICAgJGJsbiA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnYmxuJyk7DQogICAgICAgICR0aG4gPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3RobicpOw0KDQogICAgICAgIC8vIGlmKCRibG4gPD4gJycgJiYgJHRobjw+Jycpew0KICAgICAgICAgICAgJHNlc3Npb24gPSBhcnJheSgnYmxuRmlsdGVyJyAgPT4gJGJsbiwndGhuRmlsdGVyJyAgPT4gJHRobik7DQogICAgICAgICAgICAkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRzZXNzaW9uKTsNCiAgICAgICAgLy8gfWVsc2V7DQogICAgICAgIC8vICAgICAkYmxuID0gZGF0ZSgnbScpOw0KICAgICAgICAvLyAgICAgJHRobiA9IGRhdGUoJ1knKTsNCiAgICAgICAgLy8gfQ0KICAgICAgICAkc3FsID0gIlNFTEVDVCBpZCxuaXAsbmFtYSxqYWJhdGFuLCBJRk5VTEwoKFNFTEVDVCBTVEFUVVMgRlJPTSB0cl9kaXNpcGxpbiBXSEVSRSBhLmBpZGAgPSB0cl9kaXNpcGxpbi5gaWRfcGVnYCBBTkQgYnVsYW4gPSAnJGJsbicgQU5EIHRhaHVuID0gJyR0aG4nKSwnJykgQVMgc3RzIEZST00gYWRtaW4gYSI7DQogICAgICAgICRkYXRhWydsaXN0ZGF0YSddID0gJHRoaXMtPk1fYWJzZW4tPnNlbGVjdF9xdWVyeSgkc3FsKTsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2Fic2Vuc2kvbGlzdF9kaXNpcGxpbicsICRkYXRhKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWlsZGlzaXBsaW4oKSB7DQogICAgICAgICRha3NpID0gJF9QT1NUWydha3NpJ107DQogICAgICAgICRibG4gPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2JsbkZpbHRlcicpOw0KICAgICAgICAkdGhuID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCd0aG5GaWx0ZXInKTsNCiAgICAgICAgaWYoJGFrc2kgPT0gImRldGFpbCIpew0KICAgICAgICAgICAgJGlkICAgICAgICAgICAgICAgICA9ICRfUE9TVFsnaWQnXTsNCiAgICAgICAgICAgICRkYXRhWydkaXNhYmxlJ10gICAgPSAnZGlzYWJsZWQnOw0KICAgICAgICAgICAgJGRhdGFbJ3JlYWRvbmx5J10gICA9ICdyZWFkb25seSc7DQogICAgICAgICAgICAkZGF0YVsnc2ltcGFuJ10gICAgID0gJ2hpZGRlbic7DQogICAgICAgICAgICAkZGF0YVsndWJhaCddICAgICAgID0gJyc7DQogICAgICAgICAgICAkZGF0YVsnaGFwdXMnXSAgICAgID0gJyc7DQogICAgICAgICAgICAkZGF0YVsnYWtzaSddICAgICAgID0gJ3ViYWgnOw0KICAgICAgICAgICAgLy8gJGRhdGFbJ2RldGFpbCddICAgICA9ICR0aGlzLT5vcGVuTW9kZWwtPnNlbGVjdF9ieV9pZCgndHJfZGlzaXBsaW4nLCRpZCk7DQogICAgICAgICAgICAkc3FsID0gIlNFTEVDVCAqIEZST00gdHJfZGlzaXBsaW4gV0hFUkUgaWRfcGVnID0gJyRpZCcgQU5EIGJ1bGFuID0gJyRibG4nIEFORCB0YWh1biA9ICckdGhuJyI7DQogICAgICAgICAgICAkZGF0YVsnZGV0YWlsJ10gPSAkdGhpcy0+ZGItPnF1ZXJ5KCRzcWwpLT5yb3dfYXJyYXkoKTsNCg0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICRpZCA9ICIiOw0KICAgICAgICAgICAgJGRhdGFbJ2Rpc2FibGUnXSAgICA9ICcnOw0KICAgICAgICAgICAgJGRhdGFbJ3NpbXBhbiddICAgICA9ICcnOw0KICAgICAgICAgICAgJGRhdGFbJ3JlYWRvbmx5J10gICA9ICcnOw0KICAgICAgICAgICAgJGRhdGFbJ3ViYWgnXSAgICAgICA9ICdoaWRkZW4nOw0KICAgICAgICAgICAgJGRhdGFbJ2hhcHVzJ10gICAgICA9ICdoaWRkZW4nOw0KICAgICAgICAgICAgJGRhdGFbJ2Frc2knXSAgICAgICA9ICd0YW1iYWgnOw0KICAgICAgICAgICAgJGRhdGFbJ2RldGFpbCddICAgICA9IGFycmF5KCdpZF9wZWcnPT50cmltKCRfUE9TVFsnaWQnXSksJ2J1bGFuJz0+JGJsbiwndGFodW4nPT4kdGhuLCdzdGF0dXMnPT4nJyk7DQogICAgICAgIH0NCiAgICAgICAgDQoNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICAgICAgICAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkZGF0YVsnZGVza3JpcHNpX2RldGFpbCddICAgPSAiS2VkaXNpcGxpbmFuIjsNCg0KICAgICAgICBlY2hvIHNob3dfbXlfbW9kYWwoJ21vZGFscy9tb2RhbF9kZXRhaWxfZGlzaXBsaW4nLCAnZGV0YWlsLWRpc2lwbGluJywgJGRhdGEsICdzbScpOw0KICAgIH0NCg0KDQogICAgcHVibGljIGZ1bmN0aW9uIGFkZERpc2lwbGluKCRha3NpKXsNCiAgICAgICAgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCdpZF9wZWcnLCdJZCBQZWdhd2FpJywndHJpbXxyZXF1aXJlZCcpOw0KICAgICAgICAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJ3N0YXR1cycsJ1N0YXR1cycsJ3RyaW18cmVxdWlyZWQnKTsNCiAgICAgICAgJHRoaXMtPmZvcm1fdmFsaWRhdGlvbi0+c2V0X3J1bGVzKCdidWxhbicsJ0J1bGFuJywndHJpbXxyZXF1aXJlZCcpOw0KICAgICAgICAkdGhpcy0+Zm9ybV92YWxpZGF0aW9uLT5zZXRfcnVsZXMoJ3RhaHVuJywnVGFodW4nLCd0cmltfHJlcXVpcmVkJyk7DQogICAgICAgICRkYXRhICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoKTsNCiAgICAgICAgJHN0c191cGRhdGUgPSBhcnJheSgnc3RhdHVzJyA9PiAkdGhpcy0+aW5wdXQtPnBvc3QoJ3N0YXR1cycpKTsNCiAgICAgICAgICAgIDsNCg0KDQogICAgICAgICRpZCAgICAgPSBhcnJheSgnaWRfcGVnJz0+JGRhdGFbJ2lkX3BlZyddKTsNCiAgICAgICAgaWYgKCR0aGlzLT5mb3JtX3ZhbGlkYXRpb24tPnJ1bigpID09IFRSVUUpIHsNCiAgICAgICAgICAgIGlmKCRha3NpID09ICJ0YW1iYWgiKXsNCiAgICAgICAgICAgICAgICAkaW5zZXJ0ID0gJHRoaXMtPm9wZW5Nb2RlbC0+YWRkKCd0cl9kaXNpcGxpbicsJGRhdGEpOw0KICAgICAgICAgICAgICAgICRhY3Rpb24gPSAiZGl0YW1iYWhrYW4iOyANCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2V7DQoNCiAgICAgICAgICAgICAgICAkaW5zZXJ0ID0gJHRoaXMtPm9wZW5Nb2RlbC0+dXBkYXRlKCd0cl9kaXNpcGxpbicsJHN0c191cGRhdGUsJGlkKTsNCiAgICAgICAgICAgICAgICAkYWN0aW9uID0gImRpcGVyYmFydWkiOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJGluc2VydCA+IDApIHsNCiAgICAgICAgICAgICAgICAkb3V0WydzdGF0dXMnXSA9ICcnOw0KICAgICAgICAgICAgICAgICRvdXRbJ21zZyddID0gc2hvd19zdWNjX21zZygkdGhpcy0+anVkdWwuJyBCZXJoYXNpbCAnLiRhY3Rpb24sICcyMHB4Jyk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRvdXRbJ3N0YXR1cyddID0gJyc7DQogICAgICAgICAgICAgICAgJG91dFsnbXNnJ10gPSBzaG93X2Vycl9tc2coJHRoaXMtPmp1ZHVsLicgR2FnYWwgJy4kYWN0aW9uLCAnMjBweCcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG91dFsnc3RhdHVzJ10gPSAnJzsNCiAgICAgICAgICAgICRvdXRbJ21zZyddID0gc2hvd19lcnJfbXNnKCR0aGlzLT5qdWR1bC4nIEJlbHVtIGxlbmdrYXAnLCAnMjBweCcpOyAgDQogICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRvdXQpOw0KICAgIH0NCg0KICAgIC8vIGRpcGFrYWkNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVrYXBBYnNlbnNpKCkgew0KDQogICAgICAgICRkYXRhWyd1c2VyZGF0YSddICAgPSAkdGhpcy0+dXNlcmRhdGE7DQogICAgICAgICRzZXNzaW9uID0gYXJyYXkoJ2JsbkZpbHRlcicgID0+IGRhdGUoJ20nKSwndGhuRmlsdGVyJyAgPT4gZGF0ZSgnWScpKTsNCiAgICAgICAgJHRoaXMtPnNlc3Npb24tPnNldF91c2VyZGF0YSgkc2Vzc2lvbik7DQogICAgICAgICRkYXRhWydwYWdlJ10gICAgICAgPSAiQWJzZW5zaSI7DQogICAgICAgICRkYXRhWydqdWR1bCddICAgICAgPSAiQWJzZW5zaSI7DQogICAgICAgICRkYXRhWydtZW51X2FrdGlmJ10gPSAiQUJTRU5TSSI7DQogICAgICAgICRkYXRhWydkZXNrcmlwc2knXSAgPSAiUkVLQVAgQUJTRU5TSSI7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdhYnNlbnNpL1ZyZWthcGFic2Vuc2knLCAkZGF0YSk7IA0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2ZlcigpIHsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJGRhdGFbJ3BhZ2UnXSAgICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2p1ZHVsJ10gICAgICA9ICJBYnNlbnNpIjsNCiAgICAgICAgJGRhdGFbJ2Rlc2tyaXBzaSddICA9ICJUUkFOU0ZFUiBEQVRBIEFCU0VOU0kiOw0KICAgICAgICAkZGF0YVsnZGF0YWFyc2lwJ10gPSAkdGhpcy0+TV9hYnNlbi0+c2VsZWN0X2FsbCgpOw0KICAgICAgICAkdGhpcy0+dGVtcGxhdGUtPnZpZXdzKCdhYnNlbnNpL1Z0cmFuc2ZlcicsICRkYXRhKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZG9fdHJhbnNmZXIoKSB7DQogICAgDQogICAgICAgICRkYXRhWydkYXRhYXJzaXAnXSA9ICR0aGlzLT5NX2Fic2VuLT50cmFuc2ZlcigpOw0KICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRkYXRhKTsNCiAgICAgICAgLy8gJHRoaXMtPnRlbXBsYXRlLT52aWV3cygnYWJzZW5zaS9WdHJhbnNmZXInLCAkZGF0YSk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNlaygpDQogICAgew0KICAgICAgICAkc3FsPSAiIFNFTEVDVCBCLlVTRVJJRCwgRm9ybWF0KFtCLkNIRUNLVElNRV0sJ3l5eXktbW0tZGQnKSBhcyBUYW5nZ2FsLA0KICAgICAgICAgICAgICAgIE1pbihGb3JtYXQoW0IuQ0hFQ0tUSU1FXSwnaGg6bW0nKSkgYXMgTWFzdWssIE1heChGb3JtYXQoW0IuQ0hFQ0tUSU1FXSwnaGg6bW0nKSkgYXMgUHVsYW5nDQogICAgICAgICAgICAgICAgZnJvbSBDSEVDS0lOT1VUIEINCiAgICAgICAgICAgICAgICB3aGVyZSBCLlVTRVJJRD0gOSANCiAgICAgICAgICAgICAgICBhbmQgWWVhcihbQi5DSEVDS1RJTUVdKSA9IDIwMTkNCiAgICAgICAgICAgICAgICBhbmQgTW9udGgoW0IuQ0hFQ0tUSU1FXSkgPSAwNiANCiAgICAgICAgICAgICAgICBncm91cCBieSBCLlVTRVJJRCwgRm9ybWF0KFtCLkNIRUNLVElNRV0sJ3l5eXktbW0tZGQnKSAiOw0KICAgICAgICAkcmVzID0gJHRoaXMtPm1kYkFic2Vuc2ktPnF1ZXJ5KCRzcWwpLT5yZXN1bHRfYXJyYXkoKTsNCiAgICB9DQogICAgcHVibGljIGZ1bmN0aW9uIHRhbXBpbCgpIHsNCiAgICAgICAgJGRhdGFbJ2RhdGFhYnNlbiddID0gJHRoaXMtPk1fYWJzZW4tPnNlbGVjdF9hbGwoKTsNCiAgICAgICAgcHJpbnRfcigkZGF0YVsnZGF0YWFic2VuJ10pO2RpZSgpOw0KICAgICAgICAkZGF0YVsndXNlcmRhdGEnXSAgID0gJHRoaXMtPnVzZXJkYXRhOw0KICAgICAgICAkdGhpcy0+bG9hZC0+dmlldygnYWJzZW5zaS9WYWJzZW5zaV9kYXRhJywgJGRhdGEpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1waWxBYnNlblBlclVzZXIoKSB7DQogICAgICAgICRkYXRhWydkYXRhTGlzdCddID0gJHRoaXMtPk1fYWJzZW4tPnNlbGVjdFBlclVzZXIoKTsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2Fic2Vuc2kvVmFic2Vuc2lfZGF0YScsICRkYXRhKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gdGFtcGlsQWJzZW5SZWthcCgpIHsNCiAgICAgICAgJGRhdGFbJ2RhdGFMaXN0J10gPSAkdGhpcy0+TV9hYnNlbi0+c2VsZWN0UmVrYXAoKTsNCiAgICAgICAgJGRhdGFbJ3VzZXJkYXRhJ10gICA9ICR0aGlzLT51c2VyZGF0YTsNCiAgICAgICAgJHRoaXMtPmxvYWQtPnZpZXcoJ2Fic2Vuc2kvVnJla2FwYWJzZW5zaV9kYXRhJywgJGRhdGEpOw0KICAgIH0NCg0KICAgIA0KDQogICANCg0KDQogICAgIA0KICAgIA0KDQogICAgZnVuY3Rpb24gX21wZGYoJGp1ZHVsPScnLCRpc2k9JycsJGxNYXJnaW49MTAsJHJNYXJnaW49MTAsJGZvbnQ9MTAsJG9yaWVudGFzaT0nJywgJG5hbWEgPSAnMScpIHsNCiAgICAgICAgDQogICAgICAgIGluaV9zZXQoIm1lbW9yeV9saW1pdCIsIi0xIik7DQogICAgICAgICR0aGlzLT5sb2FkLT5saWJyYXJ5KCdtcGRmJyk7DQogICAgICAgICRuYW1hUGRmID0gJG5hbWEuJy5wZGYnOw0KICAgICAgICAkdGhpcy0+bXBkZi0+ZGVmYXVsdGhlYWRlcmZvbnRzaXplID0gMTA7IC8qIGluIHB0cyAqLw0KICAgICAgICAkdGhpcy0+bXBkZi0+U2V0SFRNTEZvb3RlcignPHRhYmxlIHdpZHRoPSIxMDAlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+PGk+e1BBR0VOT30ve25icGd9PC9pPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+Jyk7IC8qIGZvb3RlciAqLw0KICAgICAgICAkdGhpcy0+bXBkZi0+ZGVmYXVsdGhlYWRlcmZvbnRzdHlsZSA9IEJJOyAgIC8qIGJsYW5rLCBCLCBJLCBvciBCSSAqLw0KICAgICAgICAkdGhpcy0+bXBkZi0+ZGVmYXVsdGhlYWRlcmxpbmUgPSAxOyAgICAgLyogMSB0byBpbmNsdWRlIGxpbmUgYmVsb3cgaGVhZGVyL2Fib3ZlIGZvb3RlciAqLw0KDQogICAgICAgICR0aGlzLT5tcGRmLT5kZWZhdWx0Zm9vdGVyZm9udHNpemUgPSA2OyAvKiBpbiBwdHMgKi8NCiAgICAgICAgJHRoaXMtPm1wZGYtPmRlZmF1bHRmb290ZXJmb250c3R5bGUgPSBCSTsgICAvKiBibGFuaywgQiwgSSwgb3IgQkkgKi8NCiAgICAgICAgJHRoaXMtPm1wZGYtPmRlZmF1bHRmb290ZXJsaW5lID0gMTsgDQogICAgICAgIA0KICAgICAgICAkdGhpcy0+bXBkZi0+QWRkUGFnZSgkb3JpZW50YXNpKTsNCiAgICAgICAgDQogICAgICAgIGlmICghZW1wdHkoJGp1ZHVsKSkgJHRoaXMtPm1wZGYtPndyaXRlSFRNTCgkanVkdWwpOw0KICAgICAgICAkdGhpcy0+bXBkZi0+d3JpdGVIVE1MKCRpc2kpOyAgICAgICAgIA0KICAgICAgICAkdGhpcy0+bXBkZi0+T3V0cHV0KCRuYW1hUGRmLCdJJyk7DQogICAgICAgICAgICAgICANCiAgICB9IA0KDQoNCiAgICANCn0NCg0KLyogRW5kIG9mIGZpbGUgZnVuZ3NpLnBocCAqLw0KLyogTG9jYXRpb246IC4vYXBwbGljYXRpb24vY29udHJvbGxlcnMvZnVuZ3NpLnBocCAqLw==")); ?>
Function Calls
base64_decode | 1 |
Stats
MD5 | f38d9b9667e95aba8197bd5e06c52ae0 |
Eval Count | 1 |
Decode Time | 91 ms |