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("cmVxdWlyZSBfX0RJUl9fLicvdmVuZG9yL2F1dG9sb2FkLnBocCc7CiRpZyA9I..

Decoded Output download

require __DIR__.'/vendor/autoload.php';
$ig = new \InstagramAPI\Instagram();

output_clean("
 _   _                       _                   
| | | |                     | |                  
| |_| |_   _ _ __   ___ _ __| | ___   ___  _ __  
|  _  | | | | '_ \ / _ \ '__| |/ _ \ / _ \| '_ \ 
| | | | |_| | |_) |  __/ |  | | (_) | (_) | |_) |
\_| |_/\__, | .__/ \___|_|  |_|\___/ \___/| .__/ 
        __/ | |                           | |    
       |___/|_|                           |_|        
");

output_clean("");
output_clean("Hyperloop Terminal");
output_clean("v.2.0");
output_clean("");
output_clean(" Developed by Nextpost Developers Team (https://nextpost.tech)");
output_clean("");

run($ig);

/**
 * Let's start the show
 */
function run($ig) {
    try {

        output('Please provide login data of your Instagram Account.');
        $login = getVarFromUser("Login");

        if (empty($login)) {
            do { 
                $login = getVarFromUser("Login"); 
            } while (empty($login));
        }

        $password = getVarFromUser("Password");

        if (empty($password)) {
            do { 
                $password = getVarFromUser("Password");
            } while (empty($password));
        }

        $first_loop = true;
        do {
            if ($first_loop) {
                output("(Optional) Set proxy, if needed.");
                output("Proxy should match following pattern:");
                output("http://ip:port or http://username:password@ip:port");
                output("Don't use in pattern https://.");
                output("Type 3 to skip and don't use proxy.");
                $first_loop = false;
            } else {
                output("Proxy - [NOT VALID]");
                output("Please check the proxy syntax and try again.");
            }

            $proxy = getVarFromUser("Proxy");

            if (empty($proxy)) {
                do { 
                    $proxy = getVarFromUser("Proxy");
                } while (empty($proxy));
            }

            if ($proxy == '3') {
                // Skip proxy setup
                break;
            }
        } while (!isValidProxy($proxy));

        if ($proxy == "3") {
           // // Skip proxy setup
        } else {
            output("Proxy - [OK]");
            $ig->setProxy($proxy);
        }

        // output('Please set pause between requests to Instagram.');
        // output('As lower delay as faster speed. Try to use 0 for example.');
        // output('You should increase delay if you are using another type of automation-related to followers.');
        // $delay = (int)getVarFromUser("Delay");
        $delay = 0;

        // if (!is_int($delay)) {
        //    do { 
        //        output('Delay shoold be an integer value. Please type correct value.');
        //        $delay = getVarFromUser("Delay");
        //    } while (!is_int($delay));
        // }

        try {
            output("Emulation of an Instagram app in initiated...");
            $login_resp = $ig->login($login, $password);

            if ($login_resp !== null && $login_resp->isTwoFactorRequired()) {
                // Default verification method is phone
                $twofa_method = '1';

                // Detect is Authentification app verification is available 
                $is_totp = json_decode(json_encode($login_resp), true);
                if ($is_totp['two_factor_info']['totp_two_factor_on'] == '1'){
                    output("Two-factor authentication required, please enter the code from you Authentication app");
                    $twofa_id = $login_resp->getTwoFactorInfo()->getTwoFactorIdentifier();
                    $twofa_method = '3';
                } else {
                    output("Two-factor authentication required, please enter the code sent to your number ending in %s", 
                        $login_resp->getTwoFactorInfo()->getObfuscatedPhoneNumber());
                    $twofa_id = $login_resp->getTwoFactorInfo()->getTwoFactorIdentifier();
                }

                $twofa_code = getVarFromUser("Two-factor code");

                if (empty($twofa_code)) {
                    do { 
                        $twofa_code = getVarFromUser("Two-factor code");
                    } while (empty($twofa_code));
                }

                try {
                    output("Two-factor authentication in progress...");
                    $twofa_resp = $ig->finishTwoFactorLogin($login, $password, $twofa_id, $twofa_code, $twofa_method);
                } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                    $is_code_correct = false;
                    do {
                        output("Code is incorrect. Please check the syntax and try again.");
                        $twofa_code = getVarFromUser("Two-factor code");
    
                        if (empty($twofa_code)) {
                            do { 
                                $twofa_code = getVarFromUser("Security code");
                            } while (empty($twofa_code));
                        }
    
                        try {
                            output("Verification in progress...");
                            $twofa_resp = $ig->finishTwoFactorLogin($login, $password, $twofa_id, $twofa_code, $twofa_method);
                            $is_code_correct = true;
                        } catch (\InstagramAPI\Exception\NetworkException $e) { 
                            sleep(3);
                        } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                            sleep(3);
                        } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                            $is_code_correct = false;
                        }
                    } while (!$is_code_correct);
                } catch (\Exception $e) {
                    $msg = $e->getMessage();
                    output($msg);
                    run($ig);
                }
            }
        } catch (\InstagramAPI\Exception\NetworkException $e) { 
            output("We couldn't connect to Instagram at the moment. Please try again in few minutes.");
            run($ig);
        } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
            output("Instagram send us empty response. Please try again in few minutes.");
            run($ig);
        } catch (\InstagramAPI\Exception\CheckpointRequiredException $e) {
            output("Please go to Instagram website or mobile app and pass checkpoint!");
            run($ig);
        } catch (\InstagramAPI\Exception\ChallengeRequiredException $e) {
            output("Instagram will send you a security code to verify your identity.");
            output("How do you want receive this code?");
            output("1 - [Email]");
            output("2 - [SMS]");
            output("3 - [Exit]");

            $choice = getVarFromUser("Choice");

            if (empty($choice)) {
                do { 
                    $choice = getVarFromUser("Choice");
                } while (empty($choice));
            }

            if ($choice == '1' || $choice == '2' || $choice == '3') {
                // All fine
            } else {
                do {
                    output("Choice is incorrect. Type 1, 2 or 3.");
                    $choice = getVarFromUser("Choice");

                    if (empty($choice)) {
                        do { 
                            $choice = getVarFromUser("Choice");
                        } while (empty($choice));
                    }
                } while ($choice != '1' || $choice != '2' || $choice != '3');
            }

            if ($choice == '3') {
                run($ig);
            } elseif ($choice == '1') {
                $choice = 1;
            } else {
                $choice = 2;
            }

            $api_path = $e->getResponse()->getChallenge()->getApiPath();

            $challenge_resp = $ig->sendChallangeCode($api_path, $choice);

            // Failed to send challenge code via email. Try with SMS.
            if ($challenge_resp->status != "ok") {
                $choice = 2;
                $challenge_resp = $ig->sendChallangeCode($api_path, $choice);
            }

            if ($challenge_resp->status != "ok") {
                output("Couldn't send a verification code for the login challenge. Please try again later.");
                run($ig);
            }

            $contact_point = $challenge_resp->step_data->contact_point;

            if (isset($challenge_resp->step_data->contact_point)){
                $contact_point = $challenge_resp->step_data->contact_point;
                if ($choice == 2) {
                    output("Enter the code sent to your number ending in " . $contact_point . ".");
                } else {
                    output("Enter the 6-digit code sent to the email address " . $contact_point . ".");
                }
            } else {
                if ($choice == 2) {
                    output("Enter the code sent to your phone number.");
                } else {
                    output("Enter the 6-digit code sent to your email address.");
                }
            }

            $security_code = getVarFromUser("Security code");

            if (empty($security_code)) {
                do { 
                    $security_code = getVarFromUser("Security code");
                } while (empty($security_code));
            }

            try {
                output("Verification in progress...");
                $challenge_resp = $ig->finishChallengeLogin($login, $password, $api_path, $security_code);
            } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                $is_code_correct = false;
                do {
                    output("Please check the security code sent to you and try again.");
                    $security_code= getVarFromUser("Security code");

                    if (empty($security_code)) {
                        do { 
                            $security_code = getVarFromUser("Security code");
                        } while (empty($security_code));
                    }

                    try {
                        output("Verification in progress...");
                        $challenge_resp = $ig->finishChallengeLogin($login, $password, $api_path, $security_code);
                        $is_code_correct = true;
                    } catch (\InstagramAPI\Exception\NetworkException $e) { 
                        sleep(3);
                    } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                        sleep(3);
                    } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                        $is_code_correct = false;
                    } catch (\Exception $e) {
                        $msg = $e->getMessage();
                        output($msg);
                        run($ig);
                    }
                } while (!$is_code_correct);
            } catch (\Exception $e) {
                $msg = $e->getMessage();
                if ($msg == 'Invalid Login Response at finishChallengeLogin().') {
                    sleep(7);
                    $ig = finishLogin($ig, $login, $password, $proxy);
                } elseif ($msg == 'This field is required.') {
                    output("You should login to Instagram website or mobile app and attach mobile phone number to account.");
                    output("For advanced users: You can catch Instagram-session with Chrome/Opera extensions and save this session to /hyperloop/vendor/mgp25/instagram-php/sessions folder.");
                } else {
                    $msg = $e->getMessage();
                    output($msg);
                    run($ig);
                }
            }
        } catch (\InstagramAPI\Exception\AccountDisabledException $e) {
            output("Your account has been disabled for violating Instagram terms. Go Instagram website or mobile app to learn how you may be able to restore your account.");
            run($ig);
        } catch (\InstagramAPI\Exception\ConsentRequiredException $e) {
            output("Instagram updated Terms and Data Policy. Please go to Instagram website or mobile app to review these changes and accept them.");
            run($ig);
        } catch (\InstagramAPI\Exception\SentryBlockException $e) {
            output("Your account has been banned from Instagram API for spam behaviour or otherwise abusing.");
            run($ig);
        } catch (\InstagramAPI\Exception\IncorrectPasswordException $e) {
            output("The password you entered is incorrect. Please try again.");
            run($ig);
        } catch (\InstagramAPI\Exception\InvalidUserException $e) {
            output("The username you entered doesn't appear to belong to an account. Please check your username and try again.");
            run($ig);
        } catch (\Exception $e) {
            throw new Exception($e->getMessage());
            run($ig);
        }
        output("Logged as @" . $login . " successfully.");

        $data = define_targets($ig);

        masslooking($data, $ig, $delay);

    } catch (Exception $e){
        output($e->getMessage());
        run($ig);
    }
}

/**
 * Define targets for masslooking
 */
function define_targets($ig) {

    do {
        output("Please define the targets.");
        output("Write all Instagram profile usernames via comma without '@' symbol.");
        output("Example: apple, instagram, zendaya");
        $targets_input = getVarFromUser("Usernames");

        if (empty($targets_input)) {
            do { 
                $targets_input = getVarFromUser("Usernames");
            } while (empty($targets_input));
        }

        $targets_input = str_replace(' ','',$targets_input);
        $targets = [];
        $targets = explode(',',trim($targets_input));
        $targets = array_unique($targets);

        $pks = [];
        $filtered_targets = [];
        foreach ($targets as $target) {
            try {
                $user_resp = $ig->people->getUserIdForName($target);
                output("@" . $target . " - [OK]");
                $filtered_targets[] = $target;
                $pks[] = $user_resp;
            } catch (\InstagramAPI\Exception\NetworkException $e) { 
                sleep(3);
            } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                sleep(3);
            } catch (\Exception $e) {
                $is_username_correct = false;
                do {
                    output("Instagram profile username @" . $target . " is incorrect.");
                    output("Type 3 for skip this target.");
                    $target_new = getVarFromUser("Please provide valid username");

                    if (empty($target_new)) {
                        do { 
                            $target_new = getVarFromUser("Please provide valid username");
                        } while (empty($target_new));
                    }

                    if ($target_new == "3") {
                        break;
                    } else {
                        try {
                            $user_resp = $ig->people->getUserIdForName($target_new);
                            output("@" . $target_new . " - [OK]");
                            $filtered_targets[] = $target_new;
                            $pks[] = $user_resp;
                            $is_username_correct = true;
                            sleep(3);
                        } catch (\InstagramAPI\Exception\NetworkException $e) { 
                            sleep(3);
                        } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                            sleep(3);
                        } catch (\Exception $e) {
                            $is_username_correct = false;
                        }
                    }
                } while (!$is_username_correct);
            }
        }
    } while ( empty($filtered_targets) );

    $targets = array_unique($filtered_targets);
    $pks = array_unique($pks);

    $data = [];
    for ($i = 0; $i < count($targets); $i++) {
        $data[$i] = [
            'username' => $targets[$i],
            'pk' => $pks[$i],
        ];
    }

    output("Selected targets: @" . implode(", @", $targets) . ".");
    output("Please confirm that the selected targets are correct.");
    output("1 - [Yes]");
    output("2 - [No]");
    output("3 - [Exit]");

    $confirm = getVarFromUser("Choice");

    if (empty($confirm)) {
        do { 
            $confirm = getVarFromUser("Choice");
        } while (empty($confirm));
    }

    if ($confirm == '1' || $confirm == '2' || $confirm == '3') {
        // All fine
    } else {
        do {
            output("Choice is incorrect. Type 1, 2 or 3.");
            $confirm = getVarFromUser("Choice");

            if (empty($confirm)) {
                do { 
                    $confirm = getVarFromUser("Choice");
                } while (empty($confirm));
            }
        } while ($confirm != '1' || $confirm != '2' || $confirm != '3');
    }

    if ($confirm == '3') {
        run($ig);
    } elseif ($confirm == '2') {
        $data = define_targets($ig);
    } else {
        // All fine. Going to masslooking.
    }

    return $data;
}

/**
 * Masslooking loop
 */
function masslooking($data, $ig, $delay) {

    $rank_token = \InstagramAPI\Signatures::generateUUID();
    $max_id = null;
    $view_count = 0;
    $st_count = 0;
    $st_count_seen = 0;
    $begin = strtotime(date("Y-m-d H:i:s"));
    $speed = 0;
    $delitel = 0;
    $counter1 = 0;
    $counter2 = 0;
    $stories = [];

    output("Masslooking started.");

    foreach ($data as $d) {
        $users_count = 0;
        $is_gf_first = 1;
        do {
            try {
                $followers = $ig->people->getFollowers($d['pk'], $rank_token, null, $max_id);
                $begin_gf = strtotime(date("Y-m-d H:i:s"));

                if (empty($followers->getUsers())) { 
                    output("@" . $d['username'] . " don't have any follower.");
                    sleep(5);
                    continue;
                }

                $max_id = $followers->getNextMaxId();

                $followers_ids = [];
                foreach ($followers->getUsers() as $follower) {
                    $followers_ids[] = $follower->getPk();
                }

                $users_count = $users_count + count($followers_ids);

                $number = count($followers_ids);

                if ($is_gf_first) {
                    output($number . " followers of @" . $d['username'] . " collected.");
                    $is_gf_first = 0;
                } else {
                    output("Next " . $number . " followers of @" . $d['username'] . " collected. Total: " . number_format($users_count, 0, '.', ' ') . " followers parsed.");
                }

                $index_new = 0;
                $index_old = 0;
                $last = false;

                $begin_fs = strtotime(date("Y-m-d H:i:s"));

                do { 
                    $index_new += 13;

                    if (!isset($followers_ids[$index_new])) {
                        do {
                            $index_new -= 1;
                        } while (!isset($followers_ids[$index_new]));
                        $last = true;
                    }

                    if ($index_new < $index_old) {
                        break;
                    }

                    $ids = [];
                    for ($i = $index_old; $i <= $index_new; $i++) {
                        $ids[] = $followers_ids[$i];
                    }

                    try {
                        $stories_reels = $ig->story->getReelsMediaFeed($ids);

                        // $counter1 += 1;

                        if (isset($stories_reels) && $stories_reels->isOk() && count($stories_reels->getReels()->getData()) > 0) {
                            // Save user story reels's to array
                            $reels = [];
                            $reels = $stories_reels->getReels()->getData();

                            $stories_collected = [];
                            foreach ($reels as $r) {
                                $items = [];
                                $stories_loop = [];
                                $items = $r->getItems();
                                
                                foreach ($items as $item) {
                                    if (!$item->getId()) {
                                        // Item is not valid
                                        continue;
                                    }
                                    $stories_loop[] = $item;
                                }

                                if (empty($stories)) {
                                    $stories = $stories_loop;
                                } else {
                                    $stories = array_merge($stories, $stories_loop);
                                }

                                if (empty($stories_collected)) {
                                    $stories_collected = $stories_loop;
                                } else {
                                    $stories_collected = array_merge($stories_collected, $stories_loop);
                                }
                            }

                            $st_count =  $st_count + count($stories_collected);
                            $view_count = $view_count + count($stories_collected);

                            $now = strtotime(date("Y-m-d H:i:s"));

                            if ($now - $begin >= 299) {

                                $begin = strtotime(date("Y-m-d H:i:s"));
                                $delitel = $delitel + 1;
                                $speed = (int)($view_count * 12 * 24 / $delitel);
                                output_clean("");
                                output_clean("Estimated speed is " . number_format($speed, 0, '.', ' ') . " stories/day.");
                                output_clean("");
                            }

                            // output($st_count . " stories found. / Debug: getReelsMediaFeed (" . $counter1 . "), markMediaSeen (" . $counter2 . ")");
                            output($st_count . " stories found in this loop.");
                        }
                        
                        if ($st_count > 1500) {
                            // Mark collected stories as seen
                            $mark_seen_resp = $ig->story->markMediaSeen($stories);
                            
                            $st_count_seen = number_format($st_count, 0, '.', ' ');
                            // $counter2 += 1;
                            // output($st_count_seen . " stories marked as seen. Total: " . number_format($view_count, 0, '.', ' ') . " stories successfully seen. / Debug: getReelsMediaFeed (" . $counter1 . "), markMediaSeen (" . $counter2 . ")."); 
                            output($st_count_seen . " stories marked as seen. Total: " . number_format($view_count, 0, '.', ' ') . " stories successfully seen.");
        
                            // Initialize arrays and parameters again
                            $stories = [];
                            $st_count = 0;
                        } elseif ($last && $max_id == null) {
                            // Mark collected stories as seen
                            $mark_seen_resp = $ig->story->markMediaSeen($stories);  
                            
                            $st_count_seen = number_format($st_count, 0, '.', ' ');
                            // $counter2 += 1;
                            // output($st_count_seen . " stories marked as seen. Total: " . number_format($view_count, 0, '.', ' ') . " stories successfully seen. / Debug: getReelsMediaFeed (" . $counter1 . "), markMediaSeen (" . $counter2 . ")."); 
                            output($st_count_seen . " stories marked as seen. Total: " . number_format($view_count, 0, '.', ' ') . " stories successfully seen."); 
        
                            // Initialize arrays and parameters again
                            $stories = [];
                            $st_count = 0;
                        }

                        sleep($delay);
                    } catch (\InstagramAPI\Exception\NetworkException $e) {
                        output("We couldn't connect to Instagram at the moment. Trying again.");
                        sleep(7);
                        $index_new -= 13;
                        continue;
                    } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                        output("Instagram sent us empty response. Trying again.");
                        sleep(7);
                        $index_new -= 13;
                        continue;
                    } catch (\InstagramAPI\Exception\ThrottledException $e) {
                        output("Throttled by Instagram because of too many API requests.");
                        output("Please login again after 1 hour and you reached Instagram limits");
                        run($ig);
                    } catch (Exception $e){
                        output($e->getMessage());
                        sleep(5);
                    }
                    
                    $index_old = $index_new + 1;

                } while ($last == false);

                // Check pause for account safety
                $end_gf = strtotime(date("Y-m-d H:i:s"));
                if (($end_gf - $begin_gf) < 5) {
                    $sleep_time = 5 - ($end_gf - $begin_gf);
                    sleep($sleep_time);
                }
            } catch (\InstagramAPI\Exception\NetworkException $e) {
                output("We couldn't connect to Instagram at the moment. Trying again.");
                sleep(7);
            } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                output("Instagram send us empty response. Trying again.");
                sleep(7);
            } catch (\InstagramAPI\Exception\ThrottledException $e) {
                output("Throttled by Instagram because of too many API requests.");
                output("Please log in again after 1 hour and increase the delay between requests manually.");
                run($ig);
            } catch (Exception $e){
                output($e->getMessage());
                sleep(7);
            }
        } while ($max_id !== null);

        if (empty($followers->getUsers())) { 
            continue;
        }

        output("All stories of @" .  $d['username'] . "'s followers successfully seen.");

    }

    output("All stories related to the targets seen. Starting the new loop.");

    masslooking($data, $ig, $delay);
}

/**
 * Get varable from user
 */
function getVarFromUser($text) {
    echo $text . ": ";
    $var = trim(fgets(STDIN));
    return $var;
}

/**
 * Output message with data to console
 */
function output($message) {
    echo "[", date("H:i:s"), "] ", $message, PHP_EOL;
}

/**
 * Output clean message to console
 */
function output_clean($message) {
    echo $message, PHP_EOL;
}

/**
 * Validates proxy address
 */
function isValidProxy($proxy) {
    output("Connecting to Instagram...");
    try {
        $client = new \GuzzleHttp\Client();
        $res = $client->request('GET', 'http://www.instagram.com', 
                                [
                                    "timeout" => 30,
                                    "proxy" => $proxy
                                ]);
        $code = $res->getStatusCode();
    } catch (\InstagramAPI\Exception\NetworkException $e) { 
        sleep(3);
        $code = isValidProxy($proxy);
    } catch (\Exception $e) {
        output($e->getMessage());
        return false;
    }

    return $code == 200;
}

/**
 * Validates proxy address
 */
function finishLogin($ig, $login, $password, $proxy) {
    $success = false;
    do {
        if ($proxy == "3") {
            // Skip proxy setup
        } else {
            $ig->setProxy($proxy);
        }

        try {
            $login_resp = $ig->login($login, $password);
    
            if ($login_resp !== null && $login_resp->isTwoFactorRequired()) {
                // Default verification method is phone
                $twofa_method = '1';
    
                // Detect is Authentification app verification is available 
                $is_totp = json_decode(json_encode($login_resp), true);
                if ($is_totp['two_factor_info']['totp_two_factor_on'] == '1'){
                    output("Two-factor authentication required, please enter the code from you Authentication app");
                    $twofa_id = $login_resp->getTwoFactorInfo()->getTwoFactorIdentifier();
                    $twofa_method = '3';
                } else {
                    output("Two-factor authentication required, please enter the code sent to your number ending in %s", 
                        $login_resp->getTwoFactorInfo()->getObfuscatedPhoneNumber());
                    $twofa_id = $login_resp->getTwoFactorInfo()->getTwoFactorIdentifier();
                }
    
                $twofa_code = getVarFromUser("Two-factor code");
    
                if (empty($twofa_code)) {
                    do { 
                        $twofa_code = getVarFromUser("Two-factor code");
                    } while (empty($twofa_code));
                }
    
                try {
                    output("Two-factor authentication in progress...");
                    $twofa_resp = $ig->finishTwoFactorLogin($login, $password, $twofa_id, $twofa_code, $twofa_method);
                } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                    $is_code_correct = false;
                    do {
                        output("Code is incorrect. Please check the syntax and try again.");
                        $twofa_code = getVarFromUser("Two-factor code");
    
                        if (empty($security_code)) {
                            do { 
                                $security_code = getVarFromUser("Security code");
                            } while (empty($security_code));
                        }
    
                        try {
                            output("Verification in progress...");
                            $twofa_resp = $ig->finishTwoFactorLogin($login, $password, $twofa_id, $twofa_code, $twofa_method);
                            $is_code_correct = true;
                        } catch (\InstagramAPI\Exception\NetworkException $e) { 
                            sleep(3);
                        } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                            sleep(3);
                        } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                            $is_code_correct = false;
                        } catch (\Exception $e) {
                            $msg = $e->getMessage();
                            output($msg);
                            run($ig);
                        }
                    } while (!$is_code_correct);
                } catch (\Exception $e) {
                    $msg = $e->getMessage();
                    output($msg);
                    run($ig);
                }
            }

            $success = true;
        } catch (\InstagramAPI\Exception\NetworkException $e) { 
            sleep(3);
        } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
            sleep(3);
        } catch (\InstagramAPI\Exception\CheckpointRequiredException $e) {
            output("Please go to Instagram website or mobile app and pass checkpoint!");
            run($ig);
        } catch (\InstagramAPI\Exception\ChallengeRequiredException $e) {
            output("Challenge loop. Something wring with your account");
            run($ig);
        } catch (\Exception $e) {
            $msg = $e->getMessage();
            output($msg);
            run($ig);
        }
    } while (!$success);

    return $ig;
}

Did this file decode correctly?

Original Code

<?php

eval(base64_decode("cmVxdWlyZSBfX0RJUl9fLicvdmVuZG9yL2F1dG9sb2FkLnBocCc7CiRpZyA9IG5ldyBcSW5zdGFn
cmFtQVBJXEluc3RhZ3JhbSgpOwoKb3V0cHV0X2NsZWFuKCIKIF8gICBfICAgICAgICAgICAgICAg
ICAgICAgICBfICAgICAgICAgICAgICAgICAgIAp8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAg
fCB8ICAgICAgICAgICAgICAgICAgCnwgfF98IHxfICAgXyBfIF9fICAgX19fIF8gX198IHwgX19f
ICAgX19fICBfIF9fICAKfCAgXyAgfCB8IHwgfCAnXyBcIC8gXyBcICdfX3wgfC8gXyBcIC8gXyBc
fCAnXyBcIAp8IHwgfCB8IHxffCB8IHxfKSB8ICBfXy8gfCAgfCB8IChfKSB8IChfKSB8IHxfKSB8
ClxffCB8Xy9cX18sIHwgLl9fLyBcX19ffF98ICB8X3xcX19fLyBcX19fL3wgLl9fLyAKICAgICAg
ICBfXy8gfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAgIAogICAgICAgfF9fXy98
X3wgICAgICAgICAgICAgICAgICAgICAgICAgICB8X3wgICAgICAgIAoiKTsKCm91dHB1dF9jbGVh
bigiIik7Cm91dHB1dF9jbGVhbigiSHlwZXJsb29wIFRlcm1pbmFsIik7Cm91dHB1dF9jbGVhbigi
di4yLjAiKTsKb3V0cHV0X2NsZWFuKCIiKTsKb3V0cHV0X2NsZWFuKCLCqSBEZXZlbG9wZWQgYnkg
TmV4dHBvc3QgRGV2ZWxvcGVycyBUZWFtIChodHRwczovL25leHRwb3N0LnRlY2gpIik7Cm91dHB1
dF9jbGVhbigiIik7CgpydW4oJGlnKTsKCi8qKgogKiBMZXQncyBzdGFydCB0aGUgc2hvdwogKi8K
ZnVuY3Rpb24gcnVuKCRpZykgewogICAgdHJ5IHsKCiAgICAgICAgb3V0cHV0KCdQbGVhc2UgcHJv
dmlkZSBsb2dpbiBkYXRhIG9mIHlvdXIgSW5zdGFncmFtIEFjY291bnQuJyk7CiAgICAgICAgJGxv
Z2luID0gZ2V0VmFyRnJvbVVzZXIoIkxvZ2luIik7CgogICAgICAgIGlmIChlbXB0eSgkbG9naW4p
KSB7CiAgICAgICAgICAgIGRvIHsgCiAgICAgICAgICAgICAgICAkbG9naW4gPSBnZXRWYXJGcm9t
VXNlcigiTG9naW4iKTsgCiAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCRsb2dpbikpOwogICAg
ICAgIH0KCiAgICAgICAgJHBhc3N3b3JkID0gZ2V0VmFyRnJvbVVzZXIoIlBhc3N3b3JkIik7Cgog
ICAgICAgIGlmIChlbXB0eSgkcGFzc3dvcmQpKSB7CiAgICAgICAgICAgIGRvIHsgCiAgICAgICAg
ICAgICAgICAkcGFzc3dvcmQgPSBnZXRWYXJGcm9tVXNlcigiUGFzc3dvcmQiKTsKICAgICAgICAg
ICAgfSB3aGlsZSAoZW1wdHkoJHBhc3N3b3JkKSk7CiAgICAgICAgfQoKICAgICAgICAkZmlyc3Rf
bG9vcCA9IHRydWU7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoJGZpcnN0X2xvb3ApIHsK
ICAgICAgICAgICAgICAgIG91dHB1dCgiKE9wdGlvbmFsKSBTZXQgcHJveHksIGlmIG5lZWRlZC4i
KTsKICAgICAgICAgICAgICAgIG91dHB1dCgiUHJveHkgc2hvdWxkIG1hdGNoIGZvbGxvd2luZyBw
YXR0ZXJuOiIpOwogICAgICAgICAgICAgICAgb3V0cHV0KCJodHRwOi8vaXA6cG9ydCBvciBodHRw
Oi8vdXNlcm5hbWU6cGFzc3dvcmRAaXA6cG9ydCIpOwogICAgICAgICAgICAgICAgb3V0cHV0KCJE
b24ndCB1c2UgaW4gcGF0dGVybiBodHRwczovLy4iKTsKICAgICAgICAgICAgICAgIG91dHB1dCgi
VHlwZSAzIHRvIHNraXAgYW5kIGRvbid0IHVzZSBwcm94eS4iKTsKICAgICAgICAgICAgICAgICRm
aXJzdF9sb29wID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBv
dXRwdXQoIlByb3h5IC0gW05PVCBWQUxJRF0iKTsKICAgICAgICAgICAgICAgIG91dHB1dCgiUGxl
YXNlIGNoZWNrIHRoZSBwcm94eSBzeW50YXggYW5kIHRyeSBhZ2Fpbi4iKTsKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgJHByb3h5ID0gZ2V0VmFyRnJvbVVzZXIoIlByb3h5Iik7CgogICAgICAg
ICAgICBpZiAoZW1wdHkoJHByb3h5KSkgewogICAgICAgICAgICAgICAgZG8geyAKICAgICAgICAg
ICAgICAgICAgICAkcHJveHkgPSBnZXRWYXJGcm9tVXNlcigiUHJveHkiKTsKICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKGVtcHR5KCRwcm94eSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBp
ZiAoJHByb3h5ID09ICczJykgewogICAgICAgICAgICAgICAgLy8gU2tpcCBwcm94eSBzZXR1cAog
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICghaXNW
YWxpZFByb3h5KCRwcm94eSkpOwoKICAgICAgICBpZiAoJHByb3h5ID09ICIzIikgewogICAgICAg
ICAgIC8vIC8vIFNraXAgcHJveHkgc2V0dXAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBv
dXRwdXQoIlByb3h5IC0gW09LXSIpOwogICAgICAgICAgICAkaWctPnNldFByb3h5KCRwcm94eSk7
CiAgICAgICAgfQoKICAgICAgICAvLyBvdXRwdXQoJ1BsZWFzZSBzZXQgcGF1c2UgYmV0d2VlbiBy
ZXF1ZXN0cyB0byBJbnN0YWdyYW0uJyk7CiAgICAgICAgLy8gb3V0cHV0KCdBcyBsb3dlciBkZWxh
eSBhcyBmYXN0ZXIgc3BlZWQuIFRyeSB0byB1c2UgMCBmb3IgZXhhbXBsZS4nKTsKICAgICAgICAv
LyBvdXRwdXQoJ1lvdSBzaG91bGQgaW5jcmVhc2UgZGVsYXkgaWYgeW91IGFyZSB1c2luZyBhbm90
aGVyIHR5cGUgb2YgYXV0b21hdGlvbi1yZWxhdGVkIHRvIGZvbGxvd2Vycy4nKTsKICAgICAgICAv
LyAkZGVsYXkgPSAoaW50KWdldFZhckZyb21Vc2VyKCJEZWxheSIpOwogICAgICAgICRkZWxheSA9
IDA7CgogICAgICAgIC8vIGlmICghaXNfaW50KCRkZWxheSkpIHsKICAgICAgICAvLyAgICBkbyB7
IAogICAgICAgIC8vICAgICAgICBvdXRwdXQoJ0RlbGF5IHNob29sZCBiZSBhbiBpbnRlZ2VyIHZh
bHVlLiBQbGVhc2UgdHlwZSBjb3JyZWN0IHZhbHVlLicpOwogICAgICAgIC8vICAgICAgICAkZGVs
YXkgPSBnZXRWYXJGcm9tVXNlcigiRGVsYXkiKTsKICAgICAgICAvLyAgICB9IHdoaWxlICghaXNf
aW50KCRkZWxheSkpOwogICAgICAgIC8vIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb3V0
cHV0KCJFbXVsYXRpb24gb2YgYW4gSW5zdGFncmFtIGFwcCBpbiBpbml0aWF0ZWQuLi4iKTsKICAg
ICAgICAgICAgJGxvZ2luX3Jlc3AgPSAkaWctPmxvZ2luKCRsb2dpbiwgJHBhc3N3b3JkKTsKCiAg
ICAgICAgICAgIGlmICgkbG9naW5fcmVzcCAhPT0gbnVsbCAmJiAkbG9naW5fcmVzcC0+aXNUd29G
YWN0b3JSZXF1aXJlZCgpKSB7CiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHZlcmlmaWNhdGlv
biBtZXRob2QgaXMgcGhvbmUKICAgICAgICAgICAgICAgICR0d29mYV9tZXRob2QgPSAnMSc7Cgog
ICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGlzIEF1dGhlbnRpZmljYXRpb24gYXBwIHZlcmlmaWNh
dGlvbiBpcyBhdmFpbGFibGUgCiAgICAgICAgICAgICAgICAkaXNfdG90cCA9IGpzb25fZGVjb2Rl
KGpzb25fZW5jb2RlKCRsb2dpbl9yZXNwKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBpZiAoJGlz
X3RvdHBbJ3R3b19mYWN0b3JfaW5mbyddWyd0b3RwX3R3b19mYWN0b3Jfb24nXSA9PSAnMScpewog
ICAgICAgICAgICAgICAgICAgIG91dHB1dCgiVHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiByZXF1
aXJlZCwgcGxlYXNlIGVudGVyIHRoZSBjb2RlIGZyb20geW91IEF1dGhlbnRpY2F0aW9uIGFwcCIp
OwogICAgICAgICAgICAgICAgICAgICR0d29mYV9pZCA9ICRsb2dpbl9yZXNwLT5nZXRUd29GYWN0
b3JJbmZvKCktPmdldFR3b0ZhY3RvcklkZW50aWZpZXIoKTsKICAgICAgICAgICAgICAgICAgICAk
dHdvZmFfbWV0aG9kID0gJzMnOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQoIlR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gcmVxdWlyZWQsIHBsZWFz
ZSBlbnRlciB0aGUgY29kZSBzZW50IHRvIHlvdXIgbnVtYmVyIGVuZGluZyBpbiAlcyIsIAogICAg
ICAgICAgICAgICAgICAgICAgICAkbG9naW5fcmVzcC0+Z2V0VHdvRmFjdG9ySW5mbygpLT5nZXRP
YmZ1c2NhdGVkUGhvbmVOdW1iZXIoKSk7CiAgICAgICAgICAgICAgICAgICAgJHR3b2ZhX2lkID0g
JGxvZ2luX3Jlc3AtPmdldFR3b0ZhY3RvckluZm8oKS0+Z2V0VHdvRmFjdG9ySWRlbnRpZmllcigp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICR0d29mYV9jb2RlID0gZ2V0VmFy
RnJvbVVzZXIoIlR3by1mYWN0b3IgY29kZSIpOwoKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgk
dHdvZmFfY29kZSkpIHsKICAgICAgICAgICAgICAgICAgICBkbyB7IAogICAgICAgICAgICAgICAg
ICAgICAgICAkdHdvZmFfY29kZSA9IGdldFZhckZyb21Vc2VyKCJUd28tZmFjdG9yIGNvZGUiKTsK
ICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChlbXB0eSgkdHdvZmFfY29kZSkpOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgb3V0
cHV0KCJUd28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGluIHByb2dyZXNzLi4uIik7CiAgICAgICAg
ICAgICAgICAgICAgJHR3b2ZhX3Jlc3AgPSAkaWctPmZpbmlzaFR3b0ZhY3RvckxvZ2luKCRsb2dp
biwgJHBhc3N3b3JkLCAkdHdvZmFfaWQsICR0d29mYV9jb2RlLCAkdHdvZmFfbWV0aG9kKTsKICAg
ICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXEludmFsaWRTbXND
b2RlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgJGlzX2NvZGVfY29ycmVjdCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0KCJDb2RlIGlzIGluY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSBzeW50YXggYW5kIHRy
eSBhZ2Fpbi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR3b2ZhX2NvZGUgPSBnZXRWYXJG
cm9tVXNlcigiVHdvLWZhY3RvciBjb2RlIik7CiAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGVtcHR5KCR0d29mYV9jb2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8g
eyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHdvZmFfY29kZSA9IGdldFZhckZy
b21Vc2VyKCJTZWN1cml0eSBjb2RlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdo
aWxlIChlbXB0eSgkdHdvZmFfY29kZSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dCgiVmVyaWZpY2F0aW9uIGluIHByb2dyZXNzLi4uIik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkdHdvZmFfcmVzcCA9ICRpZy0+ZmluaXNoVHdvRmFjdG9yTG9naW4oJGxvZ2lu
LCAkcGFzc3dvcmQsICR0d29mYV9pZCwgJHR3b2ZhX2NvZGUsICR0d29mYV9tZXRob2QpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2NvZGVfY29ycmVjdCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXE5ldHdvcmtF
eGNlcHRpb24gJGUpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgzKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cRW1w
dHlSZXNwb25zZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xl
ZXAoMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhj
ZXB0aW9uXEludmFsaWRTbXNDb2RlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkaXNfY29kZV9jb3JyZWN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICghJGlzX2NvZGVfY29ycmVjdCk7CiAgICAg
ICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAg
JG1zZyA9ICRlLT5nZXRNZXNzYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRtc2cp
OwogICAgICAgICAgICAgICAgICAgIHJ1bigkaWcpOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cTmV0d29ya0V4
Y2VwdGlvbiAkZSkgeyAKICAgICAgICAgICAgb3V0cHV0KCJXZSBjb3VsZG4ndCBjb25uZWN0IHRv
IEluc3RhZ3JhbSBhdCB0aGUgbW9tZW50LiBQbGVhc2UgdHJ5IGFnYWluIGluIGZldyBtaW51dGVz
LiIpOwogICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJ
XEV4Y2VwdGlvblxFbXB0eVJlc3BvbnNlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIG91dHB1
dCgiSW5zdGFncmFtIHNlbmQgdXMgZW1wdHkgcmVzcG9uc2UuIFBsZWFzZSB0cnkgYWdhaW4gaW4g
ZmV3IG1pbnV0ZXMuIik7CiAgICAgICAgICAgIHJ1bigkaWcpOwogICAgICAgIH0gY2F0Y2ggKFxJ
bnN0YWdyYW1BUElcRXhjZXB0aW9uXENoZWNrcG9pbnRSZXF1aXJlZEV4Y2VwdGlvbiAkZSkgewog
ICAgICAgICAgICBvdXRwdXQoIlBsZWFzZSBnbyB0byBJbnN0YWdyYW0gd2Vic2l0ZSBvciBtb2Jp
bGUgYXBwIGFuZCBwYXNzIGNoZWNrcG9pbnQhIik7CiAgICAgICAgICAgIHJ1bigkaWcpOwogICAg
ICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXENoYWxsZW5nZVJlcXVpcmVkRXhj
ZXB0aW9uICRlKSB7CiAgICAgICAgICAgIG91dHB1dCgiSW5zdGFncmFtIHdpbGwgc2VuZCB5b3Ug
YSBzZWN1cml0eSBjb2RlIHRvIHZlcmlmeSB5b3VyIGlkZW50aXR5LiIpOwogICAgICAgICAgICBv
dXRwdXQoIkhvdyBkbyB5b3Ugd2FudCByZWNlaXZlIHRoaXMgY29kZT8iKTsKICAgICAgICAgICAg
b3V0cHV0KCIxIC0gW0VtYWlsXSIpOwogICAgICAgICAgICBvdXRwdXQoIjIgLSBbU01TXSIpOwog
ICAgICAgICAgICBvdXRwdXQoIjMgLSBbRXhpdF0iKTsKCiAgICAgICAgICAgICRjaG9pY2UgPSBn
ZXRWYXJGcm9tVXNlcigiQ2hvaWNlIik7CgogICAgICAgICAgICBpZiAoZW1wdHkoJGNob2ljZSkp
IHsKICAgICAgICAgICAgICAgIGRvIHsgCiAgICAgICAgICAgICAgICAgICAgJGNob2ljZSA9IGdl
dFZhckZyb21Vc2VyKCJDaG9pY2UiKTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCRj
aG9pY2UpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRjaG9pY2UgPT0gJzEnIHx8
ICRjaG9pY2UgPT0gJzInIHx8ICRjaG9pY2UgPT0gJzMnKSB7CiAgICAgICAgICAgICAgICAvLyBB
bGwgZmluZQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG8gewogICAgICAg
ICAgICAgICAgICAgIG91dHB1dCgiQ2hvaWNlIGlzIGluY29ycmVjdC4gVHlwZSAxLCAyIG9yIDMu
Iik7CiAgICAgICAgICAgICAgICAgICAgJGNob2ljZSA9IGdldFZhckZyb21Vc2VyKCJDaG9pY2Ui
KTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRjaG9pY2UpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGRvIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hvaWNlID0g
Z2V0VmFyRnJvbVVzZXIoIkNob2ljZSIpOwogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxl
IChlbXB0eSgkY2hvaWNlKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fSB3aGlsZSAoJGNob2ljZSAhPSAnMScgfHwgJGNob2ljZSAhPSAnMicgfHwgJGNob2ljZSAhPSAn
MycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGNob2ljZSA9PSAnMycpIHsKICAg
ICAgICAgICAgICAgIHJ1bigkaWcpOwogICAgICAgICAgICB9IGVsc2VpZiAoJGNob2ljZSA9PSAn
MScpIHsKICAgICAgICAgICAgICAgICRjaG9pY2UgPSAxOwogICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgJGNob2ljZSA9IDI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRh
cGlfcGF0aCA9ICRlLT5nZXRSZXNwb25zZSgpLT5nZXRDaGFsbGVuZ2UoKS0+Z2V0QXBpUGF0aCgp
OwoKICAgICAgICAgICAgJGNoYWxsZW5nZV9yZXNwID0gJGlnLT5zZW5kQ2hhbGxhbmdlQ29kZSgk
YXBpX3BhdGgsICRjaG9pY2UpOwoKICAgICAgICAgICAgLy8gRmFpbGVkIHRvIHNlbmQgY2hhbGxl
bmdlIGNvZGUgdmlhIGVtYWlsLiBUcnkgd2l0aCBTTVMuCiAgICAgICAgICAgIGlmICgkY2hhbGxl
bmdlX3Jlc3AtPnN0YXR1cyAhPSAib2siKSB7CiAgICAgICAgICAgICAgICAkY2hvaWNlID0gMjsK
ICAgICAgICAgICAgICAgICRjaGFsbGVuZ2VfcmVzcCA9ICRpZy0+c2VuZENoYWxsYW5nZUNvZGUo
JGFwaV9wYXRoLCAkY2hvaWNlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRjaGFs
bGVuZ2VfcmVzcC0+c3RhdHVzICE9ICJvayIpIHsKICAgICAgICAgICAgICAgIG91dHB1dCgiQ291
bGRuJ3Qgc2VuZCBhIHZlcmlmaWNhdGlvbiBjb2RlIGZvciB0aGUgbG9naW4gY2hhbGxlbmdlLiBQ
bGVhc2UgdHJ5IGFnYWluIGxhdGVyLiIpOwogICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICRjb250YWN0X3BvaW50ID0gJGNoYWxsZW5nZV9yZXNwLT5z
dGVwX2RhdGEtPmNvbnRhY3RfcG9pbnQ7CgogICAgICAgICAgICBpZiAoaXNzZXQoJGNoYWxsZW5n
ZV9yZXNwLT5zdGVwX2RhdGEtPmNvbnRhY3RfcG9pbnQpKXsKICAgICAgICAgICAgICAgICRjb250
YWN0X3BvaW50ID0gJGNoYWxsZW5nZV9yZXNwLT5zdGVwX2RhdGEtPmNvbnRhY3RfcG9pbnQ7CiAg
ICAgICAgICAgICAgICBpZiAoJGNob2ljZSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0
cHV0KCJFbnRlciB0aGUgY29kZSBzZW50IHRvIHlvdXIgbnVtYmVyIGVuZGluZyBpbiAiIC4gJGNv
bnRhY3RfcG9pbnQgLiAiLiIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQoIkVudGVyIHRoZSA2LWRpZ2l0IGNvZGUgc2VudCB0byB0aGUgZW1haWwg
YWRkcmVzcyAiIC4gJGNvbnRhY3RfcG9pbnQgLiAiLiIpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCRjaG9pY2UgPT0gMikgewogICAg
ICAgICAgICAgICAgICAgIG91dHB1dCgiRW50ZXIgdGhlIGNvZGUgc2VudCB0byB5b3VyIHBob25l
IG51bWJlci4iKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
b3V0cHV0KCJFbnRlciB0aGUgNi1kaWdpdCBjb2RlIHNlbnQgdG8geW91ciBlbWFpbCBhZGRyZXNz
LiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkc2VjdXJp
dHlfY29kZSA9IGdldFZhckZyb21Vc2VyKCJTZWN1cml0eSBjb2RlIik7CgogICAgICAgICAgICBp
ZiAoZW1wdHkoJHNlY3VyaXR5X2NvZGUpKSB7CiAgICAgICAgICAgICAgICBkbyB7IAogICAgICAg
ICAgICAgICAgICAgICRzZWN1cml0eV9jb2RlID0gZ2V0VmFyRnJvbVVzZXIoIlNlY3VyaXR5IGNv
ZGUiKTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCRzZWN1cml0eV9jb2RlKSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBvdXRwdXQoIlZl
cmlmaWNhdGlvbiBpbiBwcm9ncmVzcy4uLiIpOwogICAgICAgICAgICAgICAgJGNoYWxsZW5nZV9y
ZXNwID0gJGlnLT5maW5pc2hDaGFsbGVuZ2VMb2dpbigkbG9naW4sICRwYXNzd29yZCwgJGFwaV9w
YXRoLCAkc2VjdXJpdHlfY29kZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElc
RXhjZXB0aW9uXEludmFsaWRTbXNDb2RlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAk
aXNfY29kZV9jb3JyZWN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0KCJQbGVhc2UgY2hlY2sgdGhlIHNlY3VyaXR5IGNvZGUgc2VudCB0byB5
b3UgYW5kIHRyeSBhZ2Fpbi4iKTsKICAgICAgICAgICAgICAgICAgICAkc2VjdXJpdHlfY29kZT0g
Z2V0VmFyRnJvbVVzZXIoIlNlY3VyaXR5IGNvZGUiKTsKCiAgICAgICAgICAgICAgICAgICAgaWYg
KGVtcHR5KCRzZWN1cml0eV9jb2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICBkbyB7IAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlY3VyaXR5X2NvZGUgPSBnZXRWYXJGcm9tVXNl
cigiU2VjdXJpdHkgY29kZSIpOwogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChlbXB0
eSgkc2VjdXJpdHlfY29kZSkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCJWZXJpZmljYXRpb24g
aW4gcHJvZ3Jlc3MuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoYWxsZW5nZV9yZXNw
ID0gJGlnLT5maW5pc2hDaGFsbGVuZ2VMb2dpbigkbG9naW4sICRwYXNzd29yZCwgJGFwaV9wYXRo
LCAkc2VjdXJpdHlfY29kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRpc19jb2RlX2NvcnJl
Y3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhj
ZXB0aW9uXE5ldHdvcmtFeGNlcHRpb24gJGUpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgIHNs
ZWVwKDMpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0
aW9uXEVtcHR5UmVzcG9uc2VFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
c2xlZXAoMyk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNl
cHRpb25cSW52YWxpZFNtc0NvZGVFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgJGlzX2NvZGVfY29ycmVjdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1zZyA9ICRlLT5nZXRN
ZXNzYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgkbXNnKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfSB3aGlsZSAoISRpc19jb2RlX2NvcnJlY3QpOwogICAgICAgICAgICB9IGNhdGNoIChc
RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAkbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsK
ICAgICAgICAgICAgICAgIGlmICgkbXNnID09ICdJbnZhbGlkIExvZ2luIFJlc3BvbnNlIGF0IGZp
bmlzaENoYWxsZW5nZUxvZ2luKCkuJykgewogICAgICAgICAgICAgICAgICAgIHNsZWVwKDcpOwog
ICAgICAgICAgICAgICAgICAgICRpZyA9IGZpbmlzaExvZ2luKCRpZywgJGxvZ2luLCAkcGFzc3dv
cmQsICRwcm94eSk7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJG1zZyA9PSAnVGhpcyBmaWVs
ZCBpcyByZXF1aXJlZC4nKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCJZb3Ugc2hvdWxk
IGxvZ2luIHRvIEluc3RhZ3JhbSB3ZWJzaXRlIG9yIG1vYmlsZSBhcHAgYW5kIGF0dGFjaCBtb2Jp
bGUgcGhvbmUgbnVtYmVyIHRvIGFjY291bnQuIik7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0
KCJGb3IgYWR2YW5jZWQgdXNlcnM6IFlvdSBjYW4gY2F0Y2ggSW5zdGFncmFtLXNlc3Npb24gd2l0
aCBDaHJvbWUvT3BlcmEgZXh0ZW5zaW9ucyBhbmQgc2F2ZSB0aGlzIHNlc3Npb24gdG8gL2h5cGVy
bG9vcC92ZW5kb3IvbWdwMjUvaW5zdGFncmFtLXBocC9zZXNzaW9ucyBmb2xkZXIuIik7CiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRtc2cgPSAkZS0+Z2V0TWVz
c2FnZSgpOwogICAgICAgICAgICAgICAgICAgIG91dHB1dCgkbXNnKTsKICAgICAgICAgICAgICAg
ICAgICBydW4oJGlnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0g
Y2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXEFjY291bnREaXNhYmxlZEV4Y2VwdGlvbiAk
ZSkgewogICAgICAgICAgICBvdXRwdXQoIllvdXIgYWNjb3VudCBoYXMgYmVlbiBkaXNhYmxlZCBm
b3IgdmlvbGF0aW5nIEluc3RhZ3JhbSB0ZXJtcy4gR28gSW5zdGFncmFtIHdlYnNpdGUgb3IgbW9i
aWxlIGFwcCB0byBsZWFybiBob3cgeW91IG1heSBiZSBhYmxlIHRvIHJlc3RvcmUgeW91ciBhY2Nv
dW50LiIpOwogICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFt
QVBJXEV4Y2VwdGlvblxDb25zZW50UmVxdWlyZWRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAg
b3V0cHV0KCJJbnN0YWdyYW0gdXBkYXRlZCBUZXJtcyBhbmQgRGF0YSBQb2xpY3kuIFBsZWFzZSBn
byB0byBJbnN0YWdyYW0gd2Vic2l0ZSBvciBtb2JpbGUgYXBwIHRvIHJldmlldyB0aGVzZSBjaGFu
Z2VzIGFuZCBhY2NlcHQgdGhlbS4iKTsKICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgfSBj
YXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cU2VudHJ5QmxvY2tFeGNlcHRpb24gJGUpIHsK
ICAgICAgICAgICAgb3V0cHV0KCJZb3VyIGFjY291bnQgaGFzIGJlZW4gYmFubmVkIGZyb20gSW5z
dGFncmFtIEFQSSBmb3Igc3BhbSBiZWhhdmlvdXIgb3Igb3RoZXJ3aXNlIGFidXNpbmcuIik7CiAg
ICAgICAgICAgIHJ1bigkaWcpOwogICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0
aW9uXEluY29ycmVjdFBhc3N3b3JkRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIG91dHB1dCgi
VGhlIHBhc3N3b3JkIHlvdSBlbnRlcmVkIGlzIGluY29ycmVjdC4gUGxlYXNlIHRyeSBhZ2Fpbi4i
KTsKICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxF
eGNlcHRpb25cSW52YWxpZFVzZXJFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgb3V0cHV0KCJU
aGUgdXNlcm5hbWUgeW91IGVudGVyZWQgZG9lc24ndCBhcHBlYXIgdG8gYmVsb25nIHRvIGFuIGFj
Y291bnQuIFBsZWFzZSBjaGVjayB5b3VyIHVzZXJuYW1lIGFuZCB0cnkgYWdhaW4uIik7CiAgICAg
ICAgICAgIHJ1bigkaWcpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAg
ICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAg
cnVuKCRpZyk7CiAgICAgICAgfQogICAgICAgIG91dHB1dCgiTG9nZ2VkIGFzIEAiIC4gJGxvZ2lu
IC4gIiBzdWNjZXNzZnVsbHkuIik7CgogICAgICAgICRkYXRhID0gZGVmaW5lX3RhcmdldHMoJGln
KTsKCiAgICAgICAgbWFzc2xvb2tpbmcoJGRhdGEsICRpZywgJGRlbGF5KTsKCiAgICB9IGNhdGNo
IChFeGNlcHRpb24gJGUpewogICAgICAgIG91dHB1dCgkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAg
ICBydW4oJGlnKTsKICAgIH0KfQoKLyoqCiAqIERlZmluZSB0YXJnZXRzIGZvciBtYXNzbG9va2lu
ZwogKi8KZnVuY3Rpb24gZGVmaW5lX3RhcmdldHMoJGlnKSB7CgogICAgZG8gewogICAgICAgIG91
dHB1dCgiUGxlYXNlIGRlZmluZSB0aGUgdGFyZ2V0cy4iKTsKICAgICAgICBvdXRwdXQoIldyaXRl
IGFsbCBJbnN0YWdyYW0gcHJvZmlsZSB1c2VybmFtZXMgdmlhIGNvbW1hIHdpdGhvdXQgJ0AnIHN5
bWJvbC4iKTsKICAgICAgICBvdXRwdXQoIkV4YW1wbGU6IGFwcGxlLCBpbnN0YWdyYW0sIHplbmRh
eWEiKTsKICAgICAgICAkdGFyZ2V0c19pbnB1dCA9IGdldFZhckZyb21Vc2VyKCJVc2VybmFtZXMi
KTsKCiAgICAgICAgaWYgKGVtcHR5KCR0YXJnZXRzX2lucHV0KSkgewogICAgICAgICAgICBkbyB7
IAogICAgICAgICAgICAgICAgJHRhcmdldHNfaW5wdXQgPSBnZXRWYXJGcm9tVXNlcigiVXNlcm5h
bWVzIik7CiAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCR0YXJnZXRzX2lucHV0KSk7CiAgICAg
ICAgfQoKICAgICAgICAkdGFyZ2V0c19pbnB1dCA9IHN0cl9yZXBsYWNlKCcgJywnJywkdGFyZ2V0
c19pbnB1dCk7CiAgICAgICAgJHRhcmdldHMgPSBbXTsKICAgICAgICAkdGFyZ2V0cyA9IGV4cGxv
ZGUoJywnLHRyaW0oJHRhcmdldHNfaW5wdXQpKTsKICAgICAgICAkdGFyZ2V0cyA9IGFycmF5X3Vu
aXF1ZSgkdGFyZ2V0cyk7CgogICAgICAgICRwa3MgPSBbXTsKICAgICAgICAkZmlsdGVyZWRfdGFy
Z2V0cyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCR0YXJnZXRzIGFzICR0YXJnZXQpIHsKICAgICAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICR1c2VyX3Jlc3AgPSAkaWctPnBlb3BsZS0+Z2V0
VXNlcklkRm9yTmFtZSgkdGFyZ2V0KTsKICAgICAgICAgICAgICAgIG91dHB1dCgiQCIgLiAkdGFy
Z2V0IC4gIiAtIFtPS10iKTsKICAgICAgICAgICAgICAgICRmaWx0ZXJlZF90YXJnZXRzW10gPSAk
dGFyZ2V0OwogICAgICAgICAgICAgICAgJHBrc1tdID0gJHVzZXJfcmVzcDsKICAgICAgICAgICAg
fSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cTmV0d29ya0V4Y2VwdGlvbiAkZSkgeyAK
ICAgICAgICAgICAgICAgIHNsZWVwKDMpOwogICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFt
QVBJXEV4Y2VwdGlvblxFbXB0eVJlc3BvbnNlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAg
ICBzbGVlcCgzKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAg
ICAgICAgICAgJGlzX3VzZXJuYW1lX2NvcnJlY3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGRv
IHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXQoIkluc3RhZ3JhbSBwcm9maWxlIHVzZXJuYW1l
IEAiIC4gJHRhcmdldCAuICIgaXMgaW5jb3JyZWN0LiIpOwogICAgICAgICAgICAgICAgICAgIG91
dHB1dCgiVHlwZSAzIGZvciBza2lwIHRoaXMgdGFyZ2V0LiIpOwogICAgICAgICAgICAgICAgICAg
ICR0YXJnZXRfbmV3ID0gZ2V0VmFyRnJvbVVzZXIoIlBsZWFzZSBwcm92aWRlIHZhbGlkIHVzZXJu
YW1lIik7CgogICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkdGFyZ2V0X25ldykpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZG8geyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0
YXJnZXRfbmV3ID0gZ2V0VmFyRnJvbVVzZXIoIlBsZWFzZSBwcm92aWRlIHZhbGlkIHVzZXJuYW1l
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCR0YXJnZXRfbmV3KSk7
CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldF9u
ZXcgPT0gIjMiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkdXNlcl9yZXNwID0gJGlnLT5wZW9wbGUtPmdldFVzZXJJZEZvck5h
bWUoJHRhcmdldF9uZXcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCJAIiAu
ICR0YXJnZXRfbmV3IC4gIiAtIFtPS10iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRm
aWx0ZXJlZF90YXJnZXRzW10gPSAkdGFyZ2V0X25ldzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRwa3NbXSA9ICR1c2VyX3Jlc3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNf
dXNlcm5hbWVfY29ycmVjdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVl
cCgzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNl
cHRpb25cTmV0d29ya0V4Y2VwdGlvbiAkZSkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNsZWVwKDMpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJ
XEV4Y2VwdGlvblxFbXB0eVJlc3BvbnNlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzbGVlcCgzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4
Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX3VzZXJuYW1lX2Nv
cnJlY3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0gd2hpbGUgKCEkaXNfdXNlcm5hbWVfY29ycmVjdCk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IHdoaWxlICggZW1wdHkoJGZpbHRlcmVkX3Rhcmdl
dHMpICk7CgogICAgJHRhcmdldHMgPSBhcnJheV91bmlxdWUoJGZpbHRlcmVkX3RhcmdldHMpOwog
ICAgJHBrcyA9IGFycmF5X3VuaXF1ZSgkcGtzKTsKCiAgICAkZGF0YSA9IFtdOwogICAgZm9yICgk
aSA9IDA7ICRpIDwgY291bnQoJHRhcmdldHMpOyAkaSsrKSB7CiAgICAgICAgJGRhdGFbJGldID0g
WwogICAgICAgICAgICAndXNlcm5hbWUnID0+ICR0YXJnZXRzWyRpXSwKICAgICAgICAgICAgJ3Br
JyA9PiAkcGtzWyRpXSwKICAgICAgICBdOwogICAgfQoKICAgIG91dHB1dCgiU2VsZWN0ZWQgdGFy
Z2V0czogQCIgLiBpbXBsb2RlKCIsIEAiLCAkdGFyZ2V0cykgLiAiLiIpOwogICAgb3V0cHV0KCJQ
bGVhc2UgY29uZmlybSB0aGF0IHRoZSBzZWxlY3RlZCB0YXJnZXRzIGFyZSBjb3JyZWN0LiIpOwog
ICAgb3V0cHV0KCIxIC0gW1llc10iKTsKICAgIG91dHB1dCgiMiAtIFtOb10iKTsKICAgIG91dHB1
dCgiMyAtIFtFeGl0XSIpOwoKICAgICRjb25maXJtID0gZ2V0VmFyRnJvbVVzZXIoIkNob2ljZSIp
OwoKICAgIGlmIChlbXB0eSgkY29uZmlybSkpIHsKICAgICAgICBkbyB7IAogICAgICAgICAgICAk
Y29uZmlybSA9IGdldFZhckZyb21Vc2VyKCJDaG9pY2UiKTsKICAgICAgICB9IHdoaWxlIChlbXB0
eSgkY29uZmlybSkpOwogICAgfQoKICAgIGlmICgkY29uZmlybSA9PSAnMScgfHwgJGNvbmZpcm0g
PT0gJzInIHx8ICRjb25maXJtID09ICczJykgewogICAgICAgIC8vIEFsbCBmaW5lCiAgICB9IGVs
c2UgewogICAgICAgIGRvIHsKICAgICAgICAgICAgb3V0cHV0KCJDaG9pY2UgaXMgaW5jb3JyZWN0
LiBUeXBlIDEsIDIgb3IgMy4iKTsKICAgICAgICAgICAgJGNvbmZpcm0gPSBnZXRWYXJGcm9tVXNl
cigiQ2hvaWNlIik7CgogICAgICAgICAgICBpZiAoZW1wdHkoJGNvbmZpcm0pKSB7CiAgICAgICAg
ICAgICAgICBkbyB7IAogICAgICAgICAgICAgICAgICAgICRjb25maXJtID0gZ2V0VmFyRnJvbVVz
ZXIoIkNob2ljZSIpOwogICAgICAgICAgICAgICAgfSB3aGlsZSAoZW1wdHkoJGNvbmZpcm0pKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKCRjb25maXJtICE9ICcxJyB8fCAkY29uZmly
bSAhPSAnMicgfHwgJGNvbmZpcm0gIT0gJzMnKTsKICAgIH0KCiAgICBpZiAoJGNvbmZpcm0gPT0g
JzMnKSB7CiAgICAgICAgcnVuKCRpZyk7CiAgICB9IGVsc2VpZiAoJGNvbmZpcm0gPT0gJzInKSB7
CiAgICAgICAgJGRhdGEgPSBkZWZpbmVfdGFyZ2V0cygkaWcpOwogICAgfSBlbHNlIHsKICAgICAg
ICAvLyBBbGwgZmluZS4gR29pbmcgdG8gbWFzc2xvb2tpbmcuCiAgICB9CgogICAgcmV0dXJuICRk
YXRhOwp9CgovKioKICogTWFzc2xvb2tpbmcgbG9vcAogKi8KZnVuY3Rpb24gbWFzc2xvb2tpbmco
JGRhdGEsICRpZywgJGRlbGF5KSB7CgogICAgJHJhbmtfdG9rZW4gPSBcSW5zdGFncmFtQVBJXFNp
Z25hdHVyZXM6OmdlbmVyYXRlVVVJRCgpOwogICAgJG1heF9pZCA9IG51bGw7CiAgICAkdmlld19j
b3VudCA9IDA7CiAgICAkc3RfY291bnQgPSAwOwogICAgJHN0X2NvdW50X3NlZW4gPSAwOwogICAg
JGJlZ2luID0gc3RydG90aW1lKGRhdGUoIlktbS1kIEg6aTpzIikpOwogICAgJHNwZWVkID0gMDsK
ICAgICRkZWxpdGVsID0gMDsKICAgICRjb3VudGVyMSA9IDA7CiAgICAkY291bnRlcjIgPSAwOwog
ICAgJHN0b3JpZXMgPSBbXTsKCiAgICBvdXRwdXQoIk1hc3Nsb29raW5nIHN0YXJ0ZWQuIik7Cgog
ICAgZm9yZWFjaCAoJGRhdGEgYXMgJGQpIHsKICAgICAgICAkdXNlcnNfY291bnQgPSAwOwogICAg
ICAgICRpc19nZl9maXJzdCA9IDE7CiAgICAgICAgZG8gewogICAgICAgICAgICB0cnkgewogICAg
ICAgICAgICAgICAgJGZvbGxvd2VycyA9ICRpZy0+cGVvcGxlLT5nZXRGb2xsb3dlcnMoJGRbJ3Br
J10sICRyYW5rX3Rva2VuLCBudWxsLCAkbWF4X2lkKTsKICAgICAgICAgICAgICAgICRiZWdpbl9n
ZiA9IHN0cnRvdGltZShkYXRlKCJZLW0tZCBIOmk6cyIpKTsKCiAgICAgICAgICAgICAgICBpZiAo
ZW1wdHkoJGZvbGxvd2Vycy0+Z2V0VXNlcnMoKSkpIHsgCiAgICAgICAgICAgICAgICAgICAgb3V0
cHV0KCJAIiAuICRkWyd1c2VybmFtZSddIC4gIiBkb24ndCBoYXZlIGFueSBmb2xsb3dlci4iKTsK
ICAgICAgICAgICAgICAgICAgICBzbGVlcCg1KTsKICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkbWF4X2lkID0gJGZvbGxvd2Vy
cy0+Z2V0TmV4dE1heElkKCk7CgogICAgICAgICAgICAgICAgJGZvbGxvd2Vyc19pZHMgPSBbXTsK
ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmb2xsb3dlcnMtPmdldFVzZXJzKCkgYXMgJGZvbGxv
d2VyKSB7CiAgICAgICAgICAgICAgICAgICAgJGZvbGxvd2Vyc19pZHNbXSA9ICRmb2xsb3dlci0+
Z2V0UGsoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdXNlcnNfY291bnQg
PSAkdXNlcnNfY291bnQgKyBjb3VudCgkZm9sbG93ZXJzX2lkcyk7CgogICAgICAgICAgICAgICAg
JG51bWJlciA9IGNvdW50KCRmb2xsb3dlcnNfaWRzKTsKCiAgICAgICAgICAgICAgICBpZiAoJGlz
X2dmX2ZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRudW1iZXIgLiAiIGZvbGxv
d2VycyBvZiBAIiAuICRkWyd1c2VybmFtZSddIC4gIiBjb2xsZWN0ZWQuIik7CiAgICAgICAgICAg
ICAgICAgICAgJGlzX2dmX2ZpcnN0ID0gMDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0KCJOZXh0ICIgLiAkbnVtYmVyIC4gIiBmb2xsb3dlcnMgb2Yg
QCIgLiAkZFsndXNlcm5hbWUnXSAuICIgY29sbGVjdGVkLiBUb3RhbDogIiAuIG51bWJlcl9mb3Jt
YXQoJHVzZXJzX2NvdW50LCAwLCAnLicsICcgJykgLiAiIGZvbGxvd2VycyBwYXJzZWQuIik7CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGluZGV4X25ldyA9IDA7CiAgICAgICAg
ICAgICAgICAkaW5kZXhfb2xkID0gMDsKICAgICAgICAgICAgICAgICRsYXN0ID0gZmFsc2U7Cgog
ICAgICAgICAgICAgICAgJGJlZ2luX2ZzID0gc3RydG90aW1lKGRhdGUoIlktbS1kIEg6aTpzIikp
OwoKICAgICAgICAgICAgICAgIGRvIHsgCiAgICAgICAgICAgICAgICAgICAgJGluZGV4X25ldyAr
PSAxMzsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkZm9sbG93ZXJzX2lkc1skaW5k
ZXhfbmV3XSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJGluZGV4X25ldyAtPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9IHdo
aWxlICghaXNzZXQoJGZvbGxvd2Vyc19pZHNbJGluZGV4X25ld10pKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgJGxhc3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgaWYgKCRpbmRleF9uZXcgPCAkaW5kZXhfb2xkKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAg
JGlkcyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAkaW5kZXhfb2xkOyAkaSA8
PSAkaW5kZXhfbmV3OyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpZHNbXSA9ICRm
b2xsb3dlcnNfaWRzWyRpXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzdG9yaWVzX3JlZWxzID0gJGlnLT5z
dG9yeS0+Z2V0UmVlbHNNZWRpYUZlZWQoJGlkcyk7CgogICAgICAgICAgICAgICAgICAgICAgICAv
LyAkY291bnRlcjEgKz0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkc3Rv
cmllc19yZWVscykgJiYgJHN0b3JpZXNfcmVlbHMtPmlzT2soKSAmJiBjb3VudCgkc3Rvcmllc19y
ZWVscy0+Z2V0UmVlbHMoKS0+Z2V0RGF0YSgpKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNhdmUgdXNlciBzdG9yeSByZWVscydzIHRvIGFycmF5CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkcmVlbHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRy
ZWVscyA9ICRzdG9yaWVzX3JlZWxzLT5nZXRSZWVscygpLT5nZXREYXRhKCk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJHN0b3JpZXNfY29sbGVjdGVkID0gW107CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JlYWNoICgkcmVlbHMgYXMgJHIpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkaXRlbXMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkc3Rvcmllc19sb29wID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0
ZW1zID0gJHItPmdldEl0ZW1zKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGl0ZW0tPmdldElkKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0ZW0gaXMgbm90
IHZhbGlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkc3Rvcmllc19sb29wW10gPSAkaXRlbTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl
bXB0eSgkc3RvcmllcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0
b3JpZXMgPSAkc3Rvcmllc19sb29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdG9yaWVzID0gYXJy
YXlfbWVyZ2UoJHN0b3JpZXMsICRzdG9yaWVzX2xvb3ApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRz
dG9yaWVzX2NvbGxlY3RlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JHN0b3JpZXNfY29sbGVjdGVkID0gJHN0b3JpZXNfbG9vcDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
c3Rvcmllc19jb2xsZWN0ZWQgPSBhcnJheV9tZXJnZSgkc3Rvcmllc19jb2xsZWN0ZWQsICRzdG9y
aWVzX2xvb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RfY291bnQg
PSAgJHN0X2NvdW50ICsgY291bnQoJHN0b3JpZXNfY29sbGVjdGVkKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICR2aWV3X2NvdW50ID0gJHZpZXdfY291bnQgKyBjb3VudCgkc3Rvcmllc19j
b2xsZWN0ZWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRub3cgPSBzdHJ0b3RpbWUo
ZGF0ZSgiWS1tLWQgSDppOnMiKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRu
b3cgLSAkYmVnaW4gPj0gMjk5KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRi
ZWdpbiA9IHN0cnRvdGltZShkYXRlKCJZLW0tZCBIOmk6cyIpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkZGVsaXRlbCA9ICRkZWxpdGVsICsgMTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkc3BlZWQgPSAoaW50KSgkdmlld19jb3VudCAqIDEyICogMjQgLyAkZGVs
aXRlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NsZWFuKCIiKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY2xlYW4oIkVzdGltYXRlZCBz
cGVlZCBpcyAiIC4gbnVtYmVyX2Zvcm1hdCgkc3BlZWQsIDAsICcuJywgJyAnKSAuICIgc3Rvcmll
cy9kYXkuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2NsZWFuKCIi
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBvdXRwdXQoJHN0X2NvdW50IC4gIiBzdG9yaWVzIGZvdW5kLiAvIERlYnVnOiBnZXRS
ZWVsc01lZGlhRmVlZCAoIiAuICRjb3VudGVyMSAuICIpLCBtYXJrTWVkaWFTZWVuICgiIC4gJGNv
dW50ZXIyIC4gIikiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgkc3RfY291
bnQgLiAiIHN0b3JpZXMgZm91bmQgaW4gdGhpcyBsb29wLiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoJHN0X2NvdW50ID4gMTUwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFy
ayBjb2xsZWN0ZWQgc3RvcmllcyBhcyBzZWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
bWFya19zZWVuX3Jlc3AgPSAkaWctPnN0b3J5LT5tYXJrTWVkaWFTZWVuKCRzdG9yaWVzKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0
X2NvdW50X3NlZW4gPSBudW1iZXJfZm9ybWF0KCRzdF9jb3VudCwgMCwgJy4nLCAnICcpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJGNvdW50ZXIyICs9IDE7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBvdXRwdXQoJHN0X2NvdW50X3NlZW4gLiAiIHN0b3JpZXMgbWFya2Vk
IGFzIHNlZW4uIFRvdGFsOiAiIC4gbnVtYmVyX2Zvcm1hdCgkdmlld19jb3VudCwgMCwgJy4nLCAn
ICcpIC4gIiBzdG9yaWVzIHN1Y2Nlc3NmdWxseSBzZWVuLiAvIERlYnVnOiBnZXRSZWVsc01lZGlh
RmVlZCAoIiAuICRjb3VudGVyMSAuICIpLCBtYXJrTWVkaWFTZWVuICgiIC4gJGNvdW50ZXIyIC4g
IikuIik7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRzdF9jb3VudF9zZWVu
IC4gIiBzdG9yaWVzIG1hcmtlZCBhcyBzZWVuLiBUb3RhbDogIiAuIG51bWJlcl9mb3JtYXQoJHZp
ZXdfY291bnQsIDAsICcuJywgJyAnKSAuICIgc3RvcmllcyBzdWNjZXNzZnVsbHkgc2Vlbi4iKTsK
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgYXJyYXlz
IGFuZCBwYXJhbWV0ZXJzIGFnYWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3Rvcmll
cyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0X2NvdW50ID0gMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRsYXN0ICYmICRtYXhfaWQgPT0gbnVsbCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFyayBjb2xsZWN0ZWQgc3RvcmllcyBhcyBz
ZWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWFya19zZWVuX3Jlc3AgPSAkaWctPnN0
b3J5LT5tYXJrTWVkaWFTZWVuKCRzdG9yaWVzKTsgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RfY291bnRfc2VlbiA9IG51bWJlcl9m
b3JtYXQoJHN0X2NvdW50LCAwLCAnLicsICcgJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAkY291bnRlcjIgKz0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dHB1
dCgkc3RfY291bnRfc2VlbiAuICIgc3RvcmllcyBtYXJrZWQgYXMgc2Vlbi4gVG90YWw6ICIgLiBu
dW1iZXJfZm9ybWF0KCR2aWV3X2NvdW50LCAwLCAnLicsICcgJykgLiAiIHN0b3JpZXMgc3VjY2Vz
c2Z1bGx5IHNlZW4uIC8gRGVidWc6IGdldFJlZWxzTWVkaWFGZWVkICgiIC4gJGNvdW50ZXIxIC4g
IiksIG1hcmtNZWRpYVNlZW4gKCIgLiAkY291bnRlcjIgLiAiKS4iKTsgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQoJHN0X2NvdW50X3NlZW4gLiAiIHN0b3JpZXMgbWFya2VkIGFz
IHNlZW4uIFRvdGFsOiAiIC4gbnVtYmVyX2Zvcm1hdCgkdmlld19jb3VudCwgMCwgJy4nLCAnICcp
IC4gIiBzdG9yaWVzIHN1Y2Nlc3NmdWxseSBzZWVuLiIpOyAKICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgYXJyYXlzIGFuZCBwYXJhbWV0ZXJzIGFnYWlu
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RvcmllcyA9IFtdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJHN0X2NvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoJGRlbGF5KTsKICAgICAgICAgICAgICAgICAg
ICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxOZXR3b3JrRXhjZXB0aW9uICRlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiV2UgY291bGRuJ3QgY29ubmVjdCB0byBJ
bnN0YWdyYW0gYXQgdGhlIG1vbWVudC4gVHJ5aW5nIGFnYWluLiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGluZGV4X25ldyAtPSAx
MzsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cRW1wdHlSZXNwb25zZUV4Y2VwdGlvbiAk
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQoIkluc3RhZ3JhbSBzZW50IHVzIGVt
cHR5IHJlc3BvbnNlLiBUcnlpbmcgYWdhaW4uIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHNs
ZWVwKDcpOwogICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXhfbmV3IC09IDEzOwogICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChc
SW5zdGFncmFtQVBJXEV4Y2VwdGlvblxUaHJvdHRsZWRFeGNlcHRpb24gJGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0KCJUaHJvdHRsZWQgYnkgSW5zdGFncmFtIGJlY2F1c2Ugb2Yg
dG9vIG1hbnkgQVBJIHJlcXVlc3RzLiIpOwogICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQo
IlBsZWFzZSBsb2dpbiBhZ2FpbiBhZnRlciAxIGhvdXIgYW5kIHlvdSByZWFjaGVkIEluc3RhZ3Jh
bSBsaW1pdHMiKTsKICAgICAgICAgICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKXsKICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0KCRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCg1
KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgJGluZGV4X29sZCA9ICRpbmRleF9uZXcgKyAxOwoKICAgICAgICAgICAgICAgIH0g
d2hpbGUgKCRsYXN0ID09IGZhbHNlKTsKCiAgICAgICAgICAgICAgICAvLyBDaGVjayBwYXVzZSBm
b3IgYWNjb3VudCBzYWZldHkKICAgICAgICAgICAgICAgICRlbmRfZ2YgPSBzdHJ0b3RpbWUoZGF0
ZSgiWS1tLWQgSDppOnMiKSk7CiAgICAgICAgICAgICAgICBpZiAoKCRlbmRfZ2YgLSAkYmVnaW5f
Z2YpIDwgNSkgewogICAgICAgICAgICAgICAgICAgICRzbGVlcF90aW1lID0gNSAtICgkZW5kX2dm
IC0gJGJlZ2luX2dmKTsKICAgICAgICAgICAgICAgICAgICBzbGVlcCgkc2xlZXBfdGltZSk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0
aW9uXE5ldHdvcmtFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIG91dHB1dCgiV2UgY291
bGRuJ3QgY29ubmVjdCB0byBJbnN0YWdyYW0gYXQgdGhlIG1vbWVudC4gVHJ5aW5nIGFnYWluLiIp
OwogICAgICAgICAgICAgICAgc2xlZXAoNyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdy
YW1BUElcRXhjZXB0aW9uXEVtcHR5UmVzcG9uc2VFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAg
ICAgIG91dHB1dCgiSW5zdGFncmFtIHNlbmQgdXMgZW1wdHkgcmVzcG9uc2UuIFRyeWluZyBhZ2Fp
bi4iKTsKICAgICAgICAgICAgICAgIHNsZWVwKDcpOwogICAgICAgICAgICB9IGNhdGNoIChcSW5z
dGFncmFtQVBJXEV4Y2VwdGlvblxUaHJvdHRsZWRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAg
ICAgIG91dHB1dCgiVGhyb3R0bGVkIGJ5IEluc3RhZ3JhbSBiZWNhdXNlIG9mIHRvbyBtYW55IEFQ
SSByZXF1ZXN0cy4iKTsKICAgICAgICAgICAgICAgIG91dHB1dCgiUGxlYXNlIGxvZyBpbiBhZ2Fp
biBhZnRlciAxIGhvdXIgYW5kIGluY3JlYXNlIHRoZSBkZWxheSBiZXR3ZWVuIHJlcXVlc3RzIG1h
bnVhbGx5LiIpOwogICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgIH0gY2F0Y2gg
KEV4Y2VwdGlvbiAkZSl7CiAgICAgICAgICAgICAgICBvdXRwdXQoJGUtPmdldE1lc3NhZ2UoKSk7
CiAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUg
KCRtYXhfaWQgIT09IG51bGwpOwoKICAgICAgICBpZiAoZW1wdHkoJGZvbGxvd2Vycy0+Z2V0VXNl
cnMoKSkpIHsgCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgb3V0cHV0
KCJBbGwgc3RvcmllcyBvZiBAIiAuICAkZFsndXNlcm5hbWUnXSAuICIncyBmb2xsb3dlcnMgc3Vj
Y2Vzc2Z1bGx5IHNlZW4uIik7CgogICAgfQoKICAgIG91dHB1dCgiQWxsIHN0b3JpZXMgcmVsYXRl
ZCB0byB0aGUgdGFyZ2V0cyBzZWVuLiBTdGFydGluZyB0aGUgbmV3IGxvb3AuIik7CgogICAgbWFz
c2xvb2tpbmcoJGRhdGEsICRpZywgJGRlbGF5KTsKfQoKLyoqCiAqIEdldCB2YXJhYmxlIGZyb20g
dXNlcgogKi8KZnVuY3Rpb24gZ2V0VmFyRnJvbVVzZXIoJHRleHQpIHsKICAgIGVjaG8gJHRleHQg
LiAiOiAiOwogICAgJHZhciA9IHRyaW0oZmdldHMoU1RESU4pKTsKICAgIHJldHVybiAkdmFyOwp9
CgovKioKICogT3V0cHV0IG1lc3NhZ2Ugd2l0aCBkYXRhIHRvIGNvbnNvbGUKICovCmZ1bmN0aW9u
IG91dHB1dCgkbWVzc2FnZSkgewogICAgZWNobyAiWyIsIGRhdGUoIkg6aTpzIiksICJdICIsICRt
ZXNzYWdlLCBQSFBfRU9MOwp9CgovKioKICogT3V0cHV0IGNsZWFuIG1lc3NhZ2UgdG8gY29uc29s
ZQogKi8KZnVuY3Rpb24gb3V0cHV0X2NsZWFuKCRtZXNzYWdlKSB7CiAgICBlY2hvICRtZXNzYWdl
LCBQSFBfRU9MOwp9CgovKioKICogVmFsaWRhdGVzIHByb3h5IGFkZHJlc3MKICovCmZ1bmN0aW9u
IGlzVmFsaWRQcm94eSgkcHJveHkpIHsKICAgIG91dHB1dCgiQ29ubmVjdGluZyB0byBJbnN0YWdy
YW0uLi4iKTsKICAgIHRyeSB7CiAgICAgICAgJGNsaWVudCA9IG5ldyBcR3V6emxlSHR0cFxDbGll
bnQoKTsKICAgICAgICAkcmVzID0gJGNsaWVudC0+cmVxdWVzdCgnR0VUJywgJ2h0dHA6Ly93d3cu
aW5zdGFncmFtLmNvbScsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQiID0+IDMwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicHJveHkiID0+ICRwcm94eQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICRjb2RlID0gJHJlcy0+Z2V0U3RhdHVzQ29k
ZSgpOwogICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cTmV0d29ya0V4Y2VwdGlv
biAkZSkgeyAKICAgICAgICBzbGVlcCgzKTsKICAgICAgICAkY29kZSA9IGlzVmFsaWRQcm94eSgk
cHJveHkpOwogICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgIG91dHB1dCgkZS0+
Z2V0TWVzc2FnZSgpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuICRj
b2RlID09IDIwMDsKfQoKLyoqCiAqIFZhbGlkYXRlcyBwcm94eSBhZGRyZXNzCiAqLwpmdW5jdGlv
biBmaW5pc2hMb2dpbigkaWcsICRsb2dpbiwgJHBhc3N3b3JkLCAkcHJveHkpIHsKICAgICRzdWNj
ZXNzID0gZmFsc2U7CiAgICBkbyB7CiAgICAgICAgaWYgKCRwcm94eSA9PSAiMyIpIHsKICAgICAg
ICAgICAgLy8gU2tpcCBwcm94eSBzZXR1cAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRp
Zy0+c2V0UHJveHkoJHByb3h5KTsKICAgICAgICB9CgogICAgICAgIHRyeSB7CiAgICAgICAgICAg
ICRsb2dpbl9yZXNwID0gJGlnLT5sb2dpbigkbG9naW4sICRwYXNzd29yZCk7CiAgICAKICAgICAg
ICAgICAgaWYgKCRsb2dpbl9yZXNwICE9PSBudWxsICYmICRsb2dpbl9yZXNwLT5pc1R3b0ZhY3Rv
clJlcXVpcmVkKCkpIHsKICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgdmVyaWZpY2F0aW9uIG1l
dGhvZCBpcyBwaG9uZQogICAgICAgICAgICAgICAgJHR3b2ZhX21ldGhvZCA9ICcxJzsKICAgIAog
ICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGlzIEF1dGhlbnRpZmljYXRpb24gYXBwIHZlcmlmaWNh
dGlvbiBpcyBhdmFpbGFibGUgCiAgICAgICAgICAgICAgICAkaXNfdG90cCA9IGpzb25fZGVjb2Rl
KGpzb25fZW5jb2RlKCRsb2dpbl9yZXNwKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBpZiAoJGlz
X3RvdHBbJ3R3b19mYWN0b3JfaW5mbyddWyd0b3RwX3R3b19mYWN0b3Jfb24nXSA9PSAnMScpewog
ICAgICAgICAgICAgICAgICAgIG91dHB1dCgiVHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiByZXF1
aXJlZCwgcGxlYXNlIGVudGVyIHRoZSBjb2RlIGZyb20geW91IEF1dGhlbnRpY2F0aW9uIGFwcCIp
OwogICAgICAgICAgICAgICAgICAgICR0d29mYV9pZCA9ICRsb2dpbl9yZXNwLT5nZXRUd29GYWN0
b3JJbmZvKCktPmdldFR3b0ZhY3RvcklkZW50aWZpZXIoKTsKICAgICAgICAgICAgICAgICAgICAk
dHdvZmFfbWV0aG9kID0gJzMnOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQoIlR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gcmVxdWlyZWQsIHBsZWFz
ZSBlbnRlciB0aGUgY29kZSBzZW50IHRvIHlvdXIgbnVtYmVyIGVuZGluZyBpbiAlcyIsIAogICAg
ICAgICAgICAgICAgICAgICAgICAkbG9naW5fcmVzcC0+Z2V0VHdvRmFjdG9ySW5mbygpLT5nZXRP
YmZ1c2NhdGVkUGhvbmVOdW1iZXIoKSk7CiAgICAgICAgICAgICAgICAgICAgJHR3b2ZhX2lkID0g
JGxvZ2luX3Jlc3AtPmdldFR3b0ZhY3RvckluZm8oKS0+Z2V0VHdvRmFjdG9ySWRlbnRpZmllcigp
OwogICAgICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgICAgICAkdHdvZmFfY29kZSA9IGdl
dFZhckZyb21Vc2VyKCJUd28tZmFjdG9yIGNvZGUiKTsKICAgIAogICAgICAgICAgICAgICAgaWYg
KGVtcHR5KCR0d29mYV9jb2RlKSkgewogICAgICAgICAgICAgICAgICAgIGRvIHsgCiAgICAgICAg
ICAgICAgICAgICAgICAgICR0d29mYV9jb2RlID0gZ2V0VmFyRnJvbVVzZXIoIlR3by1mYWN0b3Ig
Y29kZSIpOwogICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCR0d29mYV9jb2RlKSk7
CiAgICAgICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0KCJUd28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGluIHByb2dyZXNzLi4u
Iik7CiAgICAgICAgICAgICAgICAgICAgJHR3b2ZhX3Jlc3AgPSAkaWctPmZpbmlzaFR3b0ZhY3Rv
ckxvZ2luKCRsb2dpbiwgJHBhc3N3b3JkLCAkdHdvZmFfaWQsICR0d29mYV9jb2RlLCAkdHdvZmFf
bWV0aG9kKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9u
XEludmFsaWRTbXNDb2RlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgJGlzX2Nv
ZGVfY29ycmVjdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0KCJDb2RlIGlzIGluY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSBz
eW50YXggYW5kIHRyeSBhZ2Fpbi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR3b2ZhX2Nv
ZGUgPSBnZXRWYXJGcm9tVXNlcigiVHdvLWZhY3RvciBjb2RlIik7CiAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGVtcHR5KCRzZWN1cml0eV9jb2RlKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG8geyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VjdXJp
dHlfY29kZSA9IGdldFZhckZyb21Vc2VyKCJTZWN1cml0eSBjb2RlIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IHdoaWxlIChlbXB0eSgkc2VjdXJpdHlfY29kZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiVmVyaWZpY2F0aW9uIGluIHByb2dyZXNzLi4u
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHdvZmFfcmVzcCA9ICRpZy0+ZmluaXNo
VHdvRmFjdG9yTG9naW4oJGxvZ2luLCAkcGFzc3dvcmQsICR0d29mYV9pZCwgJHR3b2ZhX2NvZGUs
ICR0d29mYV9tZXRob2QpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2NvZGVfY29y
cmVjdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1B
UElcRXhjZXB0aW9uXE5ldHdvcmtFeGNlcHRpb24gJGUpIHsgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzbGVlcCgzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3Rh
Z3JhbUFQSVxFeGNlcHRpb25cRW1wdHlSZXNwb25zZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2xlZXAoMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXEludmFsaWRTbXNDb2RlRXhjZXB0aW9uICRlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfY29kZV9jb3JyZWN0ID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICRtc2cgPSAkZS0+Z2V0TWVzc2FnZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0KCRtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnVuKCRpZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9
IHdoaWxlICghJGlzX2NvZGVfY29ycmVjdCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcRXhj
ZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgJG1zZyA9ICRlLT5nZXRNZXNzYWdlKCk7
CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRtc2cpOwogICAgICAgICAgICAgICAgICAgIHJ1
bigkaWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkc3Vj
Y2VzcyA9IHRydWU7CiAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cTmV0
d29ya0V4Y2VwdGlvbiAkZSkgeyAKICAgICAgICAgICAgc2xlZXAoMyk7CiAgICAgICAgfSBjYXRj
aCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cRW1wdHlSZXNwb25zZUV4Y2VwdGlvbiAkZSkgewog
ICAgICAgICAgICBzbGVlcCgzKTsKICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2Vw
dGlvblxDaGVja3BvaW50UmVxdWlyZWRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgb3V0cHV0
KCJQbGVhc2UgZ28gdG8gSW5zdGFncmFtIHdlYnNpdGUgb3IgbW9iaWxlIGFwcCBhbmQgcGFzcyBj
aGVja3BvaW50ISIpOwogICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICB9IGNhdGNoIChcSW5z
dGFncmFtQVBJXEV4Y2VwdGlvblxDaGFsbGVuZ2VSZXF1aXJlZEV4Y2VwdGlvbiAkZSkgewogICAg
ICAgICAgICBvdXRwdXQoIkNoYWxsZW5nZSBsb29wLiBTb21ldGhpbmcgd3Jpbmcgd2l0aCB5b3Vy
IGFjY291bnQiKTsKICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2Vw
dGlvbiAkZSkgewogICAgICAgICAgICAkbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKICAgICAgICAg
ICAgb3V0cHV0KCRtc2cpOwogICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICB9CiAgICB9IHdo
aWxlICghJHN1Y2Nlc3MpOwoKICAgIHJldHVybiAkaWc7Cn0="));

?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 ab521aea3d444463a1b81dd1f3e9bb2e
Eval Count 1
Decode Time 138 ms