#!/usr/bin/bash

# Copyright (C) Maslov N.G. Normatov R.R.

# This file is part of StartWine-Launcher.

# StartWine-Launcher is free software: you can redistribute it and/or modify it 
# under the terms of the GNU General Public License as published by the Free 
# Software Foundation, either version 3 of the License, or (at your option) any 
# later version.

# StartWine-Launcher is distributed in the hope that it will be useful, but 
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

# You should have received a copy of the GNU General Public License along with 
# StartWine-Launcher. If not, see http://www.gnu.org/licenses/.

START_WINE_PATH="$(cd "$(dirname "$(realpath "$0")")"/../../ && pwd)"
export START_WINE_PATH

##############################   LOCALE   ######################################

export LANGUAGE="${SW_LOCALE}.UTF-8"
# shellcheck source=/dev/null
. gettext.sh
export TEXTDOMAIN="StartWine"
export TEXTDOMAINDIR="${START_WINE_PATH}/data/scripts/locale"

##############################   COLORS   ######################################

RED="\033[1;91m"
BLUE="\033[1;94m"
GREEN="\033[1;92m"
YELLOW="\033[1;33m"
RESETCOLOR="\033[1;00m"

##############################   FUNCTIONS TOOLS   #############################

print_error () {

    echo -e "${RED}[ ERROR ][$(date +"%Y.%m.%d %T")]: $* $RESETCOLOR"

}

print_info () {

    echo -e "${GREEN}[ INFO ][$(date +"%Y.%m.%d %T")]: $* $RESETCOLOR"

}

print_warning () {

    echo -e "${YELLOW}[ WARNING ][$(date +"%Y.%m.%d %T")]: $* $RESETCOLOR"

}

try_copy () {

    if [[ -f "$1" || -d "$1" || -L "$1" ]]; then
        if cp -rf "$@" 2>/dev/null; then
            return 0
        else
            print_error "Failed to copy '$1' to '$2'"
        fi
    elif [ -z "$(dirname "$2" 2>/dev/null)" ]; then
        print_error "Destination path for '$2' not found!"
    else
        print_error "'$1' not found for copy!"
    fi

    return 1

}

try_link () {

    if [[ -f "$1" || -d "$1" || -L "$1" ]]; then
        if ln -sfr "$@" 2>/dev/null; then
            return 0
        else
            print_error "Failed to link '$1' to '$2'"
        fi
    elif [ -z "$(dirname "$2" 2>/dev/null)" ]; then
        print_error "Destination path for '$2' not found!"
    else
        print_error "'$1' not found for link!"
    fi

    return 1

}

try_move () {

    if [[ -f "$1" || -d "$1" || -L "$1" ]]; then
        if mv -f "$@" 2>/dev/null; then
            return 0
        else
            print_error "Failed to move '$1' to '$2'"
        fi
    elif [ -z "$(dirname "$2" 2>/dev/null)" ]; then
        print_error "Destination path for '$2' not found!"
    else
        print_error "'$1' not found for move!"
    fi

    return 1

}

try_remove () {

    if [[ -f "$1" || -d "$1" || -L "$1" ]]; then
        if rm -rf "$@" 2>/dev/null; then
            return 0
        else
            print_error "Failed to remove '$1'"
        fi
    else
        print_error "'$1' not found for remove!"
    fi

    return 1

}

try_create_dir () {

    if [ ! -d "$1" ]; then
        if mkdir -p "$1" 2>/dev/null; then
            return 0
        else
            print_error "Failed to create directory '$1'"
            return 1
        fi
    fi

}

try_winedlloverride_update () {

    if [ -n "${WINEDLLOVERRIDES}" ]; then
        export WINEDLLOVERRIDES="${1};${WINEDLLOVERRIDES}"
    else
        export WINEDLLOVERRIDES="${1}"
    fi

}

try_winedllpath_path_update () {

    if [ -n "${WINEDLLPATH}" ]; then
        export WINEDLLPATH="${1}:${WINEDLLPATH}"
    else
        export WINEDLLPATH="${1}"
    fi

}

try_ld_library_path_update () {

    if [ -n "${LD_LIBRARY_PATH}" ]; then
        export LD_LIBRARY_PATH="${1}:${LD_LIBRARY_PATH}"
    else
        export LD_LIBRARY_PATH="${1}"
    fi

}

try_path_update () {

    if [ -n "${PATH}" ]; then
        export PATH="${1}:${PATH}"
    else
        export PATH="${1}"
    fi

}

try_wine_mono_override_update () {

    if [ -n "${WINE_MONO_OVERRIDES}" ]; then
        export WINE_MONO_OVERRIDES="${1};${WINE_MONO_OVERRIDES}"
    else
        export WINE_MONO_OVERRIDES="${1}"
    fi

}

try_clear_pfx () {

    try_remove "$WINEPREFIX/"*.reg
    try_remove "$WINEPREFIX/"*.log
    try_remove "$WINEPREFIX/dosdevices"
    try_remove "$WINEPREFIX/.update-timestamp"
    try_remove "$WINEPREFIX/drive_c/.windows-serial"
    try_remove "$WINEPREFIX/drive_c/windows"
    try_remove "$WINEPREFIX/drive_c/ProgramData/Setup"
    try_remove "$WINEPREFIX/drive_c/ProgramData/Windows"
    try_remove "$WINEPREFIX/drive_c/ProgramData/WindowsTask"
    try_remove "$WINEPREFIX/drive_c/ProgramData/Package Cache"
    try_remove "$WINEPREFIX/drive_c/ProgramData/Microsoft"
    try_remove "$WINEPREFIX/drive_c/users/Public/Local Settings/Application Data/Microsoft"
    try_remove "$WINEPREFIX/drive_c/users/Public/Local Settings/Application Data/Temp"
    try_remove "$WINEPREFIX/drive_c/users/Public/Local Settings/Temporary Internet Files"
    try_remove "$WINEPREFIX/drive_c/users/Public/Application Data/Microsoft"
    try_remove "$WINEPREFIX/drive_c/users/Public/Application Data/wine_gecko"
    try_remove "$WINEPREFIX/drive_c/users/Public/Temp"
    try_remove "$WINEPREFIX/drive_c/users/$USER/Local Settings/Application Data/Microsoft"
    try_remove "$WINEPREFIX/drive_c/users/$USER/Local Settings/Application Data/Temp"
    try_remove "$WINEPREFIX/drive_c/users/$USER/Local Settings/Temporary Internet Files"
    try_remove "$WINEPREFIX/drive_c/users/$USER/Application Data/Microsoft"
    try_remove "$WINEPREFIX/drive_c/users/$USER/Application Data/wine_gecko"
    try_remove "$WINEPREFIX/drive_c/users/$USER/Temp"
    try_remove "$WINEPREFIX/drive_c/Program Files/Internet Explorer"
    try_remove "$WINEPREFIX/drive_c/Program Files/Windows Media Player"
    try_remove "$WINEPREFIX/drive_c/Program Files/Windows NT"
    try_remove "$WINEPREFIX/drive_c/Program Files/Common Files"
    try_remove "$WINEPREFIX/drive_c/Program Files (x86)/Internet Explorer"
    try_remove "$WINEPREFIX/drive_c/Program Files (x86)/Common Files"
    try_remove "$WINEPREFIX/drive_c/Program Files (x86)/Windows Media Player"
    try_remove "$WINEPREFIX/drive_c/Program Files (x86)/Windows NT"
    try_remove "$WINEPREFIX/drive_c/Program Files (x86)/Microsoft"

    "${WINELOADER}" wineboot -i || clear && print_error "There is a problem initializing the Wine prefix!"
    "${WINESERVER}" -w

}

prefix_init_error () {

    clear
    print_error "There is a problem initializing the Wine prefix!"
    try_clear_pfx
    "$CRIER" -e "$(eval_gettext "Error initializing the Wine prefix")"
    exit 1

}

libraries_init_error () {

    clear
    print_error "Error installing libraries, try again!"
    try_clear_pfx
    "$CRIER" -e "$(eval_gettext "Error installing libraries, try again")"
    exit 1

}

sw_win_ver () {

    if [[ -z "$(! grep -i "ProductName.*Microsoft Windows $SW_USE_WINDOWS_VER" "$WINEPREFIX/system.reg" 2>/dev/null)" ]]; then
        [[ "$SW_USE_WINDOWS_VER" == "xp" && "$WINEARCH" == "win64" ]] && \
            export SW_USE_WINDOWS_VER="xp64"
        "${WINELOADER}" winecfg -v win"$SW_USE_WINDOWS_VER" &>/dev/null
        "${WINESERVER}" -w
        print_info "Set to Windows-${SW_USE_WINDOWS_VER}"
    fi

}

try_rm_broken_link () {

    find -L "$1" -maxdepth 1 -type l -exec rm -rfv {} \; 2>/dev/null

}

try_fix_pfx () {

    if [ ! -f "${WINEPREFIX}/drive_c/windows/system32/start.exe" ]; then
        try_remove "${WINEPREFIX}"
        unsquashfs -d "${WINEPREFIX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"
        "${WINELOADER}" wineboot -i || prefix_init_error
        "${WINESERVER}" -w
    fi

    if [ "${SW_USE_DISABLE_UPDATE_PFX}" == 1 ]; then
        [ "$(cat "${WINEPREFIX}"/.update-timestamp)" != "disable" ] && \
            echo disable > "${WINEPREFIX}/.update-timestamp"
    else
        [ "$(cat "${WINEPREFIX}"/.update-timestamp)" == "disable" ] && \
            try_remove "${WINEPREFIX}/.update-timestamp"
    fi

    if [ ! -L "$WINEPREFIX/drive_c/users" ]; then
        if [ -d "$WINEPREFIX/drive_c/users" ]; then
            try_copy "$WINEPREFIX/drive_c/users/steamuser" "${START_WINE_PATH}/data/app_saves"
            try_copy "$WINEPREFIX/drive_c/users/Public" "${START_WINE_PATH}/data/app_saves"
            try_remove "$WINEPREFIX/drive_c/users"
            try_link "${START_WINE_PATH}/data/app_saves" "$WINEPREFIX/drive_c/users"
        else
            try_link "${START_WINE_PATH}/data/app_saves" "$WINEPREFIX/drive_c/users"
        fi
    fi

    [ -d "${START_WINE_PATH}/data/wine/${SW_USE_WINE}/share/default_pfx/drive_c/openxr" ] && \
        try_copy "${START_WINE_PATH}/data/wine/${SW_USE_WINE}/share/default_pfx/drive_c/openxr" "${WINEPREFIX}/drive_c"

    if [ -f "${START_WINE_PATH}/data/wine/${SW_USE_WINE}/lib/wine/i386-windows/vrclient.dll" ]; then
        if [ ! -f "${WINEPREFIX}/drive_c/vrclient/bin/vrclient.dll" ]; then
            try_create_dir "${WINEPREFIX}/drive_c/vrclient/bin"

            if [ -d "${WINEDIR}/lib64" ]; then
                try_copy "${START_WINE_PATH}/data/wine/${SW_USE_WINE}/lib/wine/i386-windows/vrclient.dll" "${WINEPREFIX}/drive_c/vrclient/bin"
                try_copy "${START_WINE_PATH}/data/wine/${SW_USE_WINE}/lib64/wine/x86_64-windows/vrclient_x64.dll" "${WINEPREFIX}/drive_c/vrclient/bin"
            else
                try_copy "${START_WINE_PATH}/data/wine/${SW_USE_WINE}/lib/wine/i386-windows/vrclient.dll" "${WINEPREFIX}/drive_c/vrclient/bin"
                try_copy "${START_WINE_PATH}/data/wine/${SW_USE_WINE}/lib/wine/x86_64-windows/vrclient_x64.dll" "${WINEPREFIX}/drive_c/vrclient/bin"
            fi
        fi
    fi

    if [ -f "${WINEPREFIX}/system.reg" ]; then
        if ! grep -qo "\"e:\"=\"cdrom\"" "${WINEPREFIX}/system.reg" 2>/dev/null ; then
            echo -e "\n[Software\\\\\\Wine\\\\\\Drives]\n\"e:\"=\"cdrom\"" >> "${WINEPREFIX}/system.reg"
        fi
    else
        print_error 'system.reg not found in prefix!'
        return 1
    fi

    check_wine_drive() { ls -l "$WINEPREFIX/dosdevices"/[a-z]: 2>/dev/null|grep -w "${1}$"|grep -o '[a-z]:' &>/dev/null; }

    try_create_dir "${WINEPREFIX}/dosdevices"
    check_wine_drive 'drive_c' || (rm -f "$DRIVE_C" && try_link "$WINEPREFIX/drive_c" "$DRIVE_C")
    check_wine_drive "${START_WINE_PATH}/data/tmp/cdrom" \
    || (rm -f "$DRIVE_E" && ln -sf "${START_WINE_PATH}/data/tmp/cdrom" "$DRIVE_E")
    check_wine_drive "$HOME" || (rm -f "$DRIVE_H" && ln -sf "$HOME" "$DRIVE_H")
    check_wine_drive '/' || (rm -f "$DRIVE_Z" && ln -sf '/' "$DRIVE_Z")

    (DRIVES=(d f g i j k l m n o p q r s t u v w x y)
    DEF_MP_DIRS=('/media' "/media/$USER" '/mnt' '/run/media' "/run/media/$USER")
    IFS=$'\n' MP_DIRS=($(find "${DEF_MP_DIRS[@]}" -maxdepth 1 -type d 2>/dev/null|sort -u))
    try_rm_broken_link "$WINEPREFIX/dosdevices" &>/dev/null

    for mp in "${MP_DIRS[@]}" ; do
        if [[ ! "${DEF_MP_DIRS[*]}" =~ $mp ]] && mountpoint -q "$mp" ; then
            if ! check_wine_drive "$mp" ; then
                drive_num=0
                while true ; do
                    if [[ "$drive_num" -le "${#DRIVES[@]}" ]]; then
                        drive_path="$WINEPREFIX/dosdevices/${DRIVES[$drive_num]}:"
                        if [ ! -d "$drive_path" ]; then
                            ln -sf "$mp" "$drive_path"
                            break
                        else
                            drive_num="$(( "$drive_num" + 1 ))"
                            continue
                        fi
                    else
                        break
                    fi
                done
            fi
        fi
    done)

    for comprt in {1..32} ; do
        [ ! -L "$WINEPREFIX/dosdevices/com$comprt" ] && \
            ln -sf "/dev/ttyS$(( "$comprt" - 1 ))" "$WINEPREFIX/dosdevices/com$comprt"
    done

    if [ ! -L "${WINEPREFIX}/drive_c/users/${USER}" ]; then
        try_create_dir "${WINEPREFIX}/drive_c/users/steamuser"
        try_link "${WINEPREFIX}/drive_c/users/steamuser" "${WINEPREFIX}/drive_c/users/${USER}"
    fi

    if [ ! -L "${WINEPREFIX}/drive_c/users/steamuser/Application Data" ]; then
        try_create_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming"
        try_link "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming" "${WINEPREFIX}/drive_c/users/steamuser/Application Data"
    fi

    if [ ! -L "${WINEPREFIX}/drive_c/users/steamuser/My Documents" ]; then
        try_create_dir "${WINEPREFIX}/drive_c/users/steamuser/Documents"
        try_link "${WINEPREFIX}/drive_c/users/steamuser/Documents" "${WINEPREFIX}/drive_c/users/steamuser/My Documents"
    fi

    [ ! -L "${WINEPREFIX}/drive_c/users/steamuser/Documents_Multilocale" ] && \
        try_link "${WINEPREFIX}/drive_c/users/steamuser/Documents" "${WINEPREFIX}/drive_c/users/steamuser/Documents_Multilocale"

    [ ! -L "${WINEPREFIX}/drive_c/Games" ] && \
        try_link "${START_WINE_PATH}/Games" "${WINEPREFIX}/drive_c/Games"

    [ ! -d "${WINEPREFIX}/drive_c/users/Public/Documents/Steam" ] && \
        try_create_dir "${WINEPREFIX}/drive_c/users/Public/Documents/Steam"

    [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/Documents/Steam" ] && \
        try_create_dir "${WINEPREFIX}/drive_c/users/steamuser/Documents/Steam"

    [ ! -d "${WINEPREFIX}/drive_c/Program Files (x86)/Steam/steamapps" ] && \
        try_create_dir "${WINEPREFIX}/drive_c/Program Files (x86)/Steam/steamapps"

    [ ! -d "${WINEPREFIX}/drive_c/Program Files (x86)/Steam/config" ] && \
        try_create_dir "${WINEPREFIX}/drive_c/Program Files (x86)/Steam/config"

    [ ! -d "${WINEPREFIX}/drive_c/Users/User" ] && \
        try_create_dir "${WINEPREFIX}/drive_c/Users/User"

    [ ! -d "${WINEPREFIX}/drive_c/Users/Default" ] && \
        try_create_dir "${WINEPREFIX}/drive_c/Users/Default"

    try_create_dir "${WINEPREFIX}/drive_c/windows/Fonts"
    export SW_FONTS="${WINEDIR}/share/fonts"
    export SW_WINE_FONTS="${WINEDIR}/share/wine/fonts"
    export SW_PFX_FONTS="${WINEPREFIX}/drive_c/windows/Fonts"

    FONTS_LIST=(
        "arial.ttf arialbd.ttf cour.ttf courbd.ttf georgia.ttf malgun.ttf micross.ttf msgothic.ttc msyh.ttf\
        nirmala.ttf simsun.ttc times.ttf marlett.ttf symbol.ttf tahoma.ttf tahomabd.ttf webdings.ttf wingding.ttf"
    )

    for font in ${FONTS_LIST[*]} ; do
        if [ ! -f "${SW_PFX_FONTS}/${font}" ]; then
            try_copy "${SW_FONTS}/${font}" "${SW_PFX_FONTS}/${font}" \
            || try_copy "${SW_WINE_FONTS}/${font}" "${SW_PFX_FONTS}/${font}"
        else
            print_info "${font} file exists, skip..."
        fi
    done

    chmod -R 775 "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"

}

sw_shortcuts_autoinstall () {

    export SW_GAME_EXE="${WINEPREFIX}/${SW_USE_EXE}"
    SW_GAME_NAME="$(basename "${SW_GAME_EXE}" | sed 's/\.exe//gi' | sed 's/\.msi//gi' | sed 's/ /_/g')"
    export SW_GAME_NAME
    SW_GAME_PATH="$(cd "$(dirname "${SW_GAME_EXE}")" >/dev/null 2>&1 && pwd)"
    export SW_GAME_PATH

    SW_FORMAT_GAME_NAME="$(echo "${SW_GAME_NAME}" | tr -d "[:punct:]")"
    export SW_FORMAT_GAME_NAME

    export SW_ICO_TMP_PATH="${START_WINE_PATH}/data/tmp/icons"
    "$CRIER" --ico "${SW_GAME_EXE}" "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.ico"
    magick "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.ico" "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.png"

    [ ! -f "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.png" ] && \
        try_copy "$(ls -S -1 "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}"*[_-]*.png 2>/dev/null | head -1)" "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.png" 2>/dev/null

    magick "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.png" -resize 480X480 "${START_WINE_PATH}/data/img/app_icons/default/${SW_FORMAT_GAME_NAME}_${SW_FORMAT_GAME_NAME}_x256.png"
    try_remove "${SW_ICO_TMP_PATH}/"*.png

    GUI_NAME_H="$(basename -s .jpg "${COPY_ICON_H}" | tr -s '[:punct:]' ' ')"
    export GUI_NAME_H
    GUI_NAME_V="$(basename -s .jpg "${COPY_ICON_V}" | tr -s '[:punct:]' ' ')"
    export GUI_NAME_V
    GUI_NAME_HEROES="$(basename -s .jpg "${COPY_ICON_HEROES}" | tr -s '[:punct:]' ' ')"
    export GUI_NAME_HEROES

    PARSE_NAME="$(echo "${SW_GAME_NAME}" | tr -d '[:punct:]')"
    export PARSE_NAME

    try_copy "${COPY_ICON_H}" "${START_WINE_PATH}/data/img/app_icons/horizontal/${PARSE_NAME}_horizontal_${GUI_NAME_H}_x256.jpg"
    try_copy "${COPY_ICON_V}" "${START_WINE_PATH}/data/img/app_icons/vertical/${PARSE_NAME}_vertical_${GUI_NAME_V}_x256.jpg"
    try_copy "${COPY_ICON_HEROES}" "${START_WINE_PATH}/data/img/app_icons/heroes/${PARSE_NAME}_heroes_${GUI_NAME_HEROES}_x256.jpg"

    echo "Exec=\"${SW_GAME_EXE}\"" > "${START_WINE_PATH}/Shortcuts/${SW_GAME_NAME}.swd"

    if [ ! -f "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}" ]; then
        if [ -f "${START_WINE_PATH}/data/app_config/.default/${SW_GAME_NAME}" ]; then
            cat "${START_WINE_PATH}/data/app_config/.default/${SW_GAME_NAME}" > "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
            chmod +x "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
        else
            cat "${START_WINE_PATH}/data/app_config/.default/default" > "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
            chmod +x "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
        fi
    fi

}

try_link_d3d_plugins () {

    if [ "${SW_USE_D3D_PLUGINS}" == 1 ]; then

        for sw_d3d_plugins in d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 \
            d3dcompiler_36 d3dcompiler_37 d3dcompiler_38 d3dcompiler_39 d3dcompiler_40 \
            d3dcompiler_41 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 \
            d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 d3dx10_40 \
            d3dx10_41 d3dx10_42 d3dx10_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 \
            d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30 d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 \
            d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43 ; do

            [ ! -L "${WINEPREFIX}/drive_c/windows/system32/${sw_d3d_plugins}.dll" ] && \
                try_link "${START_WINE_PATH}/data/tools/utils/d3d_extras/x64/${sw_d3d_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32"
            [ ! -L "${WINEPREFIX}/drive_c/windows/syswow64/${sw_d3d_plugins}.dll" ] && \
                try_link "${START_WINE_PATH}/data/tools/utils/d3d_extras/x32/${sw_d3d_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"

            try_winedlloverride_update "${sw_d3d_plugins}=n"
        done
    else
        for sw_d3d_plugins in d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 \
            d3dcompiler_36 d3dcompiler_37 d3dcompiler_38 d3dcompiler_39 d3dcompiler_40 \
            d3dcompiler_41 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 \
            d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 d3dx10_40 \
            d3dx10_41 d3dx10_42 d3dx10_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 \
            d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30 d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 \
            d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43 ; do

            try_winedlloverride_update "${sw_d3d_plugins}=b"
        done
    fi

}

try_get_wine_ver () {

    url_list=(
        "https://api.github.com/repos/Kron4ek/Wine-Builds/releases"
        "https://api.github.com/repos/RusNor/Wine-Steam-Proton/releases"
        "https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases"
        "https://api.github.com/repos/doitsujin/dxvk/releases"
        "https://api.github.com/repos/HansKristian-Work/vkd3d-proton/releases"
    )

    grep_url() { grep 'browser_download_url'|grep -iEo 'https.*download.*\.tar\.gz|https.*download.*\.tar\.xz|https.*download.*\.tar\.zst'|sed "s/.*-x86.tar.xz//g" ; }

    staging_ver=$(curl -s "${url_list[0]}"|grep_url|tr -d '"'|tr '\n' ' ')
    export staging_ver
    steam_proton_ver=$(curl -s "${url_list[1]}"|grep_url|tr -d '"'|tr '\n' ' ')
    export steam_proton_ver
    proton_ge_ver=$(curl -s "${url_list[2]}"|grep_url|tr -d '"'|tr '\n' ' ')
    export proton_ge_ver
    dxvk_ver=$(curl -s "${url_list[3]}"|grep_url|tr -d '"'|tr '\n' ' ')
    export dxvk_ver
    vkd3d_ver=$(curl -s "${url_list[4]}"|grep_url|tr -d '"'|tr '\n' ' ')
    export vkd3d_ver

    for staging in $staging_ver ; do
        [[ $staging == *"staging-amd64"* && $staging != *"-rc"* && $staging != *"wow64"* ]] && \
            staging_list+="$staging "
        [[ $staging == *"staging-tkg-amd64"* && $staging != *"-rc"* && $staging != *"wow64"* ]] && \
            staging_tkg_list+="$staging "
    done

    for proton_ge in $proton_ge_ver ; do
        [[ $proton_ge != *"tar.zst"* ]] && \
            proton_ge_list+="$proton_ge "
    done

    for dxvk in $dxvk_ver ; do
        [[ $dxvk == *"dxvk"* && $dxvk != *"dxvk-native"* ]] && \
            dxvk_list+="$(basename  $(dirname $dxvk) | tr -d "v") "
    done

    for vkd3d in $vkd3d_ver ; do
        vkd3d_list+="$(basename  $(dirname $vkd3d) | tr -d "v") "
    done

    {
        echo "{"
        echo "\"wine_staging\": \"${staging_list[*]}\","
        echo "\"wine_steam_proton\": \"$steam_proton_ver\","
        echo "\"wine_proton_ge\": \"$proton_ge_list\","
        echo "\"wine_staging_tkg\": \"${staging_tkg_list[*]}\""
        echo "}"
    } > "${START_WINE_PATH}/data/scripts/wine_version.json"

    {
        echo "{"
        echo "\"dxvk\": \"${dxvk_list[*]}\","
        echo "\"vkd3d\": \"${vkd3d_list[*]}\""
        echo "}"
    } > "${START_WINE_PATH}/data/scripts/dxvk_vkd3d_version.json"

    for dxvk_list_ver in $dxvk_list ; do
        dxvk_ver=$dxvk_list_ver
        break
    done

    [ -n "$dxvk_ver" ] && \
        sed -i "s%DXVK_VER=.*%DXVK_VER=\"$dxvk_ver\"%" "${START_WINE_PATH}/data/app_config/.default/default"

    for vkd3d_list_ver in $vkd3d_list ; do
        vkd3d_ver=$vkd3d_list_ver
        break
    done

    [ -n "$vkd3d_ver" ] && \
        sed -i "s%VKD3D_VER=.*%VKD3D_VER=\"$vkd3d_ver\"%" "${START_WINE_PATH}/data/app_config/.default/default"

    for ge_ver_list in $proton_ge_ver ; do
        ge_ver="$(basename  $(dirname $ge_ver_list))"
        break
    done

    [ -n "$ge_ver" ] && \
        sed -i "s%USE_WINE=.*%USE_WINE=\"$ge_ver\"%" "${START_WINE_PATH}/data/app_config/.default/default"

}

try_update_sw () {

    GIT_VER="$(curl "https://api.github.com/repos/RusNor/StartWine-Launcher/releases" | grep "tag_name" | head -1 | sed "s/.*StartWine_v//" | sed "s/\".*//")"

    if [ -z "$GIT_VER" ]; then
        "$CRIER" -e "$(eval_gettext "Сheck internet connection")"
    else
        if [ -f "${START_WINE_PATH}/data/scripts/version" ]; then
            SW_VER="$(cat "${START_WINE_PATH}/data/scripts/version")"
            export SW_VER
        else
            export SW_VER="0"
        fi

        if [[ "${SW_VER}" -lt "$GIT_VER" ]]; then
            msg="$(eval_gettext "Update to \$GIT_VER version?")"
            crier=$("$CRIER" -q "$msg")
            if [ "$(echo "$crier" | tail -1)" == "0" ]; then

                try_remove "${START_WINE_PATH}/data/tools/utils"
                try_remove "${START_WINE_PATH}/data/tmp/utils.tar.xz"

                export URL_UTILS_LIST=(
                   "https://huggingface.co/RusNor/StartWine-data/resolve/main/utils_data/utils.tar.xz?download=true"
                   "https://github.com/RusNor/Utils-data/releases/download/utils/utils.tar.xz"
                )

                if [ "${SW_SILENT_DL}" == "1" ]; then
                    "$CRIER" --silent-download "${URL_UTILS_LIST[0]}" "${START_WINE_PATH}/data/tmp/utils.tar.xz" \
                    || "$CRIER" --silent-download "${URL_UTILS_LIST[1]}" "${START_WINE_PATH}/data/tmp/utils.tar.xz"
                    "$CRIER" --silent-tar "${START_WINE_PATH}/data/tmp/utils.tar.xz" "${START_WINE_PATH}/data/tools"
                else
                    "$CRIER" -d "${URL_UTILS_LIST[0]}" "${START_WINE_PATH}/data/tmp/utils.tar.xz" \
                    || "$CRIER" -d "${URL_UTILS_LIST[1]}" "${START_WINE_PATH}/data/tmp/utils.tar.xz"
                    "$CRIER" --tar "${START_WINE_PATH}/data/tmp/utils.tar.xz" "${START_WINE_PATH}/data/tools"
                fi

                try_remove "${START_WINE_PATH}/data/tmp/utils.tar.xz"
                try_remove "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

                export URL_PFX_LIST=(
                   "https://huggingface.co/RusNor/StartWine-data/resolve/main/pfx_backup/pfx_default.iso?download=true"
                   "https://github.com/RusNor/pfx_backup/releases/download/pfx_default/pfx_default.iso"
                )

                if [ "${SW_SILENT_DL}" == "1" ]; then
                    "$CRIER" --silent-download "${URL_PFX_LIST[0]}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso" \
                    || "$CRIER" --silent-download "${URL_PFX_LIST[1]}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"
                else
                    "$CRIER" -d "${URL_PFX_LIST[0]}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso" \
                    || "$CRIER" -d "${URL_PFX_LIST[1]}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"
                fi

                [ ! -f "${HOME}/.config/swrc" ] && \
                    echo "${START_WINE_PATH}" > "${HOME}/.config/swrc"

                try_remove "${START_WINE_PATH}/data/tmp/StartWine_v$GIT_VER.tar.xz"
                try_remove "${START_WINE_PATH}/data/tmp/StartWine"

                export URL="https://github.com/RusNor/StartWine-Launcher/releases/download/StartWine_v$GIT_VER/StartWine_v$GIT_VER.tar.xz"
                "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/StartWine_v$GIT_VER.tar.xz" &&
                "$CRIER" --tar "${START_WINE_PATH}/data/tmp/StartWine_v$GIT_VER.tar.xz" "${START_WINE_PATH}/data/tmp" &&
                print_info "Extension release $GIT_VER done"

                if [ -d "${START_WINE_PATH}/data/tmp/StartWine" ]; then

                    try_remove "${START_WINE_PATH}/data/scripts"
                    try_remove "${START_WINE_PATH}/data/img/gui_icons"
                    try_remove "${START_WINE_PATH}/data/img/sw_themes/sounds"
                    try_remove "${START_WINE_PATH}/data/img/sw_themes/css/assets"
                    try_remove "${START_WINE_PATH}/data/img/sw_themes/css/dark"
                    try_remove "${START_WINE_PATH}/data/img/sw_themes/css/light"
                    try_remove "${START_WINE_PATH}/data/img/sw_themes/css/default.css"
                    try_remove "${START_WINE_PATH}/data/img/launcher_icons"

                    try_copy "${START_WINE_PATH}/data/tmp/StartWine/data" "${START_WINE_PATH}"

                    try_remove "${START_WINE_PATH}/data/tmp/StartWine"
                    try_remove "${START_WINE_PATH}/data/tmp/StartWine_v$GIT_VER.tar.xz"

                    [ -n "${GIT_VER}" ] && \
                        echo "${GIT_VER}" > "${START_WINE_PATH}/data/scripts/version"

                    "${RUNIMAGE}" rim-update

                    "$CRIER" -i "$(eval_gettext 'The update is completed successfully. Restart StartWine for the changes to take effect.')"
                fi
            fi
        else
            "${RUNIMAGE}" rim-update
            "$CRIER" -i "$(eval_gettext 'This is the latest version of StartWine. There is nothing more to do.')"
        fi
    fi

}

TRY_REGEDIT_PATCH () {

    "${WINELOADER}" regedit "${START_WINE_PATH}/data/app_patches/${SW_USE_REGEDIT_PATCH}" "$@"

}

try_download_pfx_dn_default () {

    if [ ! -f "${START_WINE_PATH}/data/pfx_backup/pfx_dn_default.iso" ]; then

        export URL_PFX_LIST=(
           "https://huggingface.co/RusNor/StartWine-data/resolve/main/pfx_backup/pfx_dn_default.iso?download=true"
           "https://github.com/RusNor/pfx_backup/releases/download/pfx_default/pfx_dn_default.iso"
        )

        "$CRIER" -d "${URL_PFX_LIST[0]}" "${START_WINE_PATH}/data/pfx_backup/pfx_dn_default.iso" \
        || "$CRIER" -d "${URL_PFX_LIST[1]}" "${START_WINE_PATH}/data/pfx_backup/pfx_dn_default.iso"
    fi

}

###############################   WINELOADER   #################################

SW_GAME_EXE="$(readlink -f "$1")"
export SW_GAME_EXE
SW_GAME_NAME="$(basename "${SW_GAME_EXE}" | sed 's/\.exe//gi' | sed 's/\.msi//gi' | sed 's/\.bat//gi' | sed 's/\.lnk//gi' | sed 's/\.sh//gi' | sed 's/ /_/g')"
export SW_GAME_NAME
SW_GAME_PATH="$(cd "$(dirname "${SW_GAME_EXE}")" >/dev/null 2>&1 && pwd)"
export SW_GAME_PATH

if [ "${SW_GAME_NAME}" == "" ]; then
    if [ ! -f "${START_WINE_PATH}/data/app_config/StartWine" ]; then
        cat "${START_WINE_PATH}/data/app_config/.default/default" > "${START_WINE_PATH}/data/app_config/StartWine"
        chmod +x "${START_WINE_PATH}/data/app_config/StartWine"
    fi
    . "${START_WINE_PATH}/data/app_config/StartWine"
else
    if [ ! -f "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}" ]; then
        if [ -f "${START_WINE_PATH}/data/app_config/.default/${SW_GAME_NAME}" ]; then
            cat "${START_WINE_PATH}/data/app_config/.default/${SW_GAME_NAME}" > "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
            chmod +x "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
        else
            cat "${START_WINE_PATH}/data/app_config/.default/default" > "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
            chmod +x "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
        fi
    fi
    . "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}"
fi

export WINEDIR="${START_WINE_PATH}/data/wine/${SW_USE_WINE}"

if [ -d "${WINEDIR}/lib64" ]; then
    try_ld_library_path_update "${WINEDIR}/lib64:${WINEDIR}/lib"
    try_winedllpath_path_update "${WINEDIR}/lib64/wine:${WINEDIR}/lib/wine"
else
    if [ -d "${WINEDIR}/lib/i386-linux-gnu" ]; then
        try_ld_library_path_update "${WINEDIR}/lib/x86_64-linux-gnu:${WINEDIR}/lib/i386-linux-gnu"
        try_winedllpath_path_update "${WINEDIR}/lib/vkd3d:${WINEDIR}/lib/wine"
    else
        try_ld_library_path_update "${WINEDIR}/lib/wine/x86_64-unix:${WINEDIR}/lib/wine/i386-unix"
        try_winedllpath_path_update "${WINEDIR}/lib/wine"
    fi
fi

try_path_update "${WINEDIR}/bin:${WINEDIR}/bin-wow64"

export WINEARCH="${SW_USE_WINEARCH}"

if [ "${SW_USE_WOW64}" == 1 ]; then
    export WINELOADER="${WINEDIR}/bin-wow64/wine"
    export WINESERVER="${WINEDIR}/bin-wow64/wineserver"
else
    export WINELOADER="${WINEDIR}/bin/wine"
    export WINESERVER="${WINEDIR}/bin/wineserver"
fi

export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"

###############################   EXPORT   #####################################

export WINE_DISABLE_WRITE_WATCH=1
export DXVK_VER="${SW_USE_DXVK_VER}"
export VKD3D_VER="${SW_USE_VKD3D_VER}"
export DRIVE_C="$WINEPREFIX/dosdevices/c:"
export DRIVE_E="$WINEPREFIX/dosdevices/e:"
export DRIVE_H="$WINEPREFIX/dosdevices/h:"
export DRIVE_Z="$WINEPREFIX/dosdevices/z:"
SW_DESKTOP_DIR="$(xdg-user-dir DESKTOP)"
export SW_DESKTOP_DIR
export CRIER="${START_WINE_PATH}/data/scripts/sw_crier.py"
export SW_RUN_RUNIMAGE="${START_WINE_PATH}/data/runtime/sw"

[ -f "${WINEDIR}/share/media/blank.mkv" ] && \
    export MEDIACONV_BLANK_VIDEO_FILE="${WINEDIR}/share/media/blank.mkv"

[ -f "${WINEDIR}/share/media/blank.ptna" ] && \
    export MEDIACONV_BLANK_AUDIO_FILE="${WINEDIR}/share/media/blank.ptna"

##################################   CREATE   ##################################

try_create_dir "$HOME/.local/bin"
try_create_dir "${START_WINE_PATH}/Games"
try_create_dir "${START_WINE_PATH}/data/tmp"
try_create_dir "${START_WINE_PATH}/data/pfx"
try_create_dir "${START_WINE_PATH}/data/wine"
try_create_dir "${START_WINE_PATH}/Shortcuts"
try_create_dir "${START_WINE_PATH}/data/tools"
try_create_dir "${START_WINE_PATH}/data/tmp/logs"
try_create_dir "${START_WINE_PATH}/data/app_saves"
try_create_dir "${START_WINE_PATH}/data/tmp/stats"
try_create_dir "${START_WINE_PATH}/data/tmp/icons"
try_create_dir "${HOME}/.local/share/applications"
try_create_dir "${START_WINE_PATH}/data/pfx_backup"
try_create_dir "${START_WINE_PATH}/data/tmp/cdrom"
try_create_dir "${START_WINE_PATH}/data/tools/vulkan"
try_create_dir "${START_WINE_PATH}/data/pfx/pfx_default"
try_create_dir "${START_WINE_PATH}/data/tmp/gl_shader_cache"
try_create_dir "${START_WINE_PATH}/data/tmp/vulkan_shader_cache"

[ ! -L "${HOME}/Games-SW" ] && \
    try_link "${START_WINE_PATH}/Games" "${HOME}/Games-SW"

[ ! -L "$HOME/.local/bin/sw" ] && \
    try_link "${START_WINE_PATH}/data/runtime/sw_runtime" "$HOME/.local/bin/sw"

[ ! -L "${START_WINE_PATH}/data/runtime/sw" ] && \
    try_link "${START_WINE_PATH}/data/runtime/sw_runtime" "${START_WINE_PATH}/data/runtime/sw"

[ ! -f "${START_WINE_PATH}/data/runtime/ssrv" ] && \
    try_copy "/usr/bin/ssrv" "${START_WINE_PATH}/data/runtime"

if [ ! -f "${HOME}/.local/share/applications/StartWine.desktop" ]; then
    {
        echo "[Desktop Entry]"
        echo "Name=StartWine"
        echo "Exec=env \"${SW_RUN_RUNIMAGE}\" %F"
        echo "Comment[en_GB]=Launch Windows applications on Linux operating systems"
        echo "Comment[ru]=Запуск приложений Windows в операционных системах Linux"
        echo "Type=Application"
        echo "MimeType=application/x-wine-extension-msp;application/x-msi;application/x-ms-dos-executable;"
        echo "Categories=Game;"
        echo "Icon=${START_WINE_PATH}/data/img/gui_icons/sw_icon.svg"
    } > "${HOME}/.local/share/applications/StartWine.desktop"

    chmod +x "${HOME}/.local/share/applications/StartWine.desktop"
fi

if [ ! -f "${HOME}/.local/share/applications/StartWineShell.desktop" ]; then
    {
        echo "[Desktop Entry]"
        echo "Name=StartWineShell"
        echo "Exec=env \"${SW_RUN_RUNIMAGE}\" --shell %F"
        echo "Comment[en_GB]=Launch Windows applications on Linux operating systems"
        echo "Comment[ru]=Запуск приложений Windows в операционных системах Linux"
        echo "Type=Application"
        echo "MimeType=application/x-wine-extension-msp;application/x-msi;application/x-ms-dos-executable;"
        echo "Categories=Game;"
        echo "Terminal=true"
        echo "Icon=${START_WINE_PATH}/data/img/gui_icons/sw_icon.svg"
    } > "${HOME}/.local/share/applications/StartWineShell.desktop"

    chmod +x "${HOME}/.local/share/applications/StartWineShell.desktop"
fi

############################   SETTINGS OPTIONS   ##############################

if [ "${SW_USE_MANGOHUD}" == 1 ]; then
    export MANGOHUD=1
    export MANGOHUD_LOG_LEVEL=off

    if [ "${SW_HUD_SIZE}" == "" ]; then
        SW_HUD_SIZE="$("$CRIER" --hud)"
        export SW_HUD_SIZE
    fi

    export MANGOHUD_CONFIG="fps_color_change,round_corners=10,no_display,cpu_load_change,gpu_load_change,core_load_change,background_alpha=0.2\
    ,font_size=${SW_HUD_SIZE},background_color=020202,fps_limit=${SW_USE_FPS_LIMIT}+0,toggle_fps_limit=Shift_L+F1\
    ,position=top-right,toggle_hud=Shift_R+F12,${SW_USE_MANGOHUD_CONFIG},toggle_hud_position=R_Shift+F11"
fi

if [ "${SW_USE_VIRTUAL_DESKTOP}" == 1 ]; then
    VDESKTOP="explorer /desktop=StartWine,$(eval xrandr --current | grep "\*" | awk '{print $1;}' | head -1)"
fi

export SW_USE_NTSYNC=0

if [ "${SW_USE_NTSYNC}" == 1 ]; then
    if [ "$(lsmod | grep -i ntsync)" ]; then
        export SW_USE_FSYNC=0
        export SW_USE_ESYNC=0
        export WINENTSYNC=1
    else
        unset WINENTSYNC
    fi
else
    unset WINENTSYNC
fi

if [ "${SW_USE_FSYNC}" == 1 ]; then
    export WINEFSYNC=1
    export WINEFSYNC_FUTEX2=0
else
    unset WINEFSYNC WINEFSYNC_FUTEX2
fi

if [ "${SW_USE_ESYNC}" == 1 ]; then
    export WINEESYNC=1
else
    unset WINEESYNC
fi

if [ "${SW_USE_OLD_GL_STRING}" == 1 ]; then
    export MESA_EXTENSION_MAX_YEAR="2003"
    export __GL_ExtensionStringVersion="17700"
fi

if [ "${SW_USE_DLSS}" == 1 ]; then
    if [ "$(lspci | { grep -o 'RTX'; })" ] && [ "$(lsmod | { grep 'nvidia'; })" ]; then
        export DXVK_NVAPIHACK=0
        export DXVK_ENABLE_NVAPI=1
        export SW_USE_NVAPI_DISABLE=0

        [ ! -f "${WINEPREFIX}/drive_c/windows/system32/nvngx.dll" ] && \
            try_copy "/usr/lib/nvidia/wine/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32"

        [ ! -f "${WINEPREFIX}/drive_c/windows/system32/_nvngx.dll" ] && \
            try_copy "/usr/lib/nvidia/wine/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32"

        [ -f "${START_WINE_PATH}/data/tools/utils/dlss_extras/lib64/wine/x86_64-windows/nvml.dll" ] && \
            try_copy "${START_WINE_PATH}/data/tools/utils/dlss_extras/lib64/wine/x86_64-windows/nvml.dll" "${WINEPREFIX}/drive_c/windows/system32"

        try_winedlloverride_update "nvml,nvngx=n"
    fi
fi

if [ "${SW_USE_NVAPI_DISABLE}" == 1 ]; then
    try_winedlloverride_update "nvapi,nvapi64,nvcuda,nvcuvid,nvencodeapi,nvencodeapi64="
else
    if [ "$(lspci| { grep -o NVIDIA; })" ]; then
        if [ -d "${WINEDIR}/lib64" ]; then
            [ -f "${WINEDIR}/lib/wine/nvapi/nvapi.dll" ] && \
                try_copy "${WINEDIR}/lib/wine/nvapi/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
            [ -f "${WINEDIR}/lib64/wine/nvapi/nvapi64.dll" ] && \
                try_copy "${WINEDIR}/lib64/wine/nvapi/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32"
        else
            [ -f "${WINEDIR}/lib/wine/nvapi/i386-windows/nvapi.dll" ] && \
               try_copy "${WINEDIR}/lib/wine/nvapi/i386-windows/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
            [ -f "${WINEDIR}/lib/wine/nvapi/x86_64-windows/nvapi64.dll" ] && \
               try_copy "${WINEDIR}/lib/wine/nvapi/x86_64-windows/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32"
        fi
        try_winedlloverride_update "nvapi,nvapi64=n;nvcuda=b"
    else
        try_winedlloverride_update "nvapi,nvapi64,nvcuda,nvcuvid,nvencodeapi,nvencodeapi64="
    fi
fi

if [ "${SW_USE_WINEDBG_DISABLE}" == 1 ]; then
    export WINEDEBUG="-all"
    export WINE_DO_NOT_CREATE_DUMP=1
    try_winedlloverride_update "winedbg.exe="
fi

if [ "${SW_USE_LARGE_ADDRESS_AWARE}" == 1 ]; then
    export WINE_LARGE_ADDRESS_AWARE=1
else
    unset WINE_LARGE_ADDRESS_AWARE
fi

if [ "${SW_USE_STAGING_WRITECOPY}" == 1 ]; then
    export STAGING_WRITECOPY=1
else
    unset STAGING_WRITECOPY
fi

if [ "${SW_USE_WINE_SIMULATE_WRITECOPY}" == 1 ]; then
    export WINE_SIMULATE_WRITECOPY=1
else
    unset WINE_SIMULATE_WRITECOPY
fi

if [ "${SW_USE_STAGING_SHARED_MEMORY}" == 1 ]; then
    export STAGING_SHARED_MEMORY=1
else
    unset STAGING_SHARED_MEMORY
fi

if [ "${SW_USE_DXVK_HUD}" == 1 ]; then
    export DXVK_FRAME_RATE="${SW_USE_FPS_LIMIT}"
    export DXVK_HUD="devinfo,fps,version,api,scale=0.9"
fi

if [ "${SW_USE_ENABLE_VKBASALT}" == 1 ]; then
    export ENABLE_VKBASALT=1
    export VKBASALT_LOG_LEVEL="none"
    export VKBASALT_LOG_FILE="${START_WINE_PATH}/data/tmp/logs/vkBasalt.log"
    export VKBASALT_CONFIG_FILE="${START_WINE_PATH}/data/tools/utils/config/vkBasalt.conf"

    if [ -f "${START_WINE_PATH}/data/tools/utils/config/vkBasalt.conf" ]; then
        sed -ri "s/effects = .*/effects = ${SW_USE_VKBASALT_EFFECTS}/g" "${START_WINE_PATH}/data/tools/utils/config/vkBasalt.conf"
        sed -ri "s/casSharpness .*/casSharpness = ${SW_USE_VKBASALT_CAS}/g" "${START_WINE_PATH}/data/tools/utils/config/vkBasalt.conf"
    fi
fi

if [ "${SW_USE_FSR}" == 1 ]; then
    export WINE_FULLSCREEN_FSR=1
    export WINE_FULLSCREEN_FSR_STRENGTH=3
    export WINE_FULLSCREEN_INTEGER_SCALING=0
    export FULLSCREEN_PRESERVE_WINDOW_SIZE=1
    export WINE_FULLSCREEN_FSR_MODE="${SW_USE_FSR_MODE}"
else
    unset WINE_FULLSCREEN_FSR WINE_FULLSCREEN_FSR_STRENGTH WINE_FULLSCREEN_INTEGER_SCALING WINE_FULLSCREEN_FSR_MODE WINE_FULLSCREEN_FAKE_CURRENT_RES
fi

if [ "${SW_USE_DRI_PRIME}" == 1 ]; then
    export __NV_PRIME_RENDER_OFFLOAD=1
    export DRI_PRIME=1
fi

if [ "${SW_USE_WINE_MONO}" == 1 ]; then
    try_wine_mono_override_update "Microsoft.Xna.Framework.*,Gac=n"
else
    try_winedlloverride_update "mscoree,mshtml="
fi

if [ "${SW_USE_BATTLEYE}" == 1 ]; then
    export PROTON_BATTLEYE_RUNTIME="${START_WINE_PATH}/data/tools/utils/Proton BattlEye Runtime"
    try_winedlloverride_update "beclient,beclient_x64=b,n"
else
    unset PROTON_BATTLEYE_RUNTIME
fi

if [ "${SW_USE_EASYANTICHEAT}" == 1 ]; then
    export PROTON_EAC_RUNTIME="${START_WINE_PATH}/data/tools/utils/Proton EasyAntiCheat Runtime"
else
    unset PROTON_EAC_RUNTIME
fi

if [ "${SW_USE_VSYNC_DISABLE}" == 1 ]; then
    export vblank_mode=0
    export __GL_SYNC_TO_VBLANK=0
fi

if [ "${SW_USE_HIDE_NVIDIA_GPU}" == 1 ]; then
    export WINE_HIDE_NVIDIA_GPU=1
fi

if [ "${SW_USE_DGVOODOO2}" == 1 ]; then
    for copy_dgvoodoo2 in d3dimm ddraw glide glide2x glide3x ; do
        try_link "${START_WINE_PATH}/data/tools/utils/config/dgVoodoo.conf" "${WINEPREFIX}/drive_c/windows/syswow64"
        try_copy "${START_WINE_PATH}/data/tools/utils/dgvoodoo2/x32/${copy_dgvoodoo2}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
        try_winedlloverride_update "${copy_dgvoodoo2}=n"
    done
fi

if [ "${SW_USE_SHADER_CACHE}" == 1 ]; then
    export __GL_SHADER_DISK_CACHE_PATH="${START_WINE_PATH}/data/tmp/gl_shader_cache"
    export __GL_SHADER_DISK_CACHE_SIZE="1000000000"
    export __GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1
    export __GL_SHADER_DISK_CACHE=1
    export MESA_SHADER_CACHE_DIR="${START_WINE_PATH}/data/tmp"
    export MESA_DISK_CACHE_SINGLE_FILE=1
else
    export __GL_SHADER_DISK_CACHE=0
    export MESA_SHADER_CACHE_DISABLE=1
    unset __GL_SHADER_DISK_CACHE_SKIP_CLEANUP __GL_SHADER_DISK_CACHE_SIZE __GL_SHADER_DISK_CACHE_PATH MESA_DISK_CACHE_SINGLE_FILE MESA_GLSL_CACHE_DIR MESA_GLSL_CACHE_MAX_SIZE
fi

###############################   OVERRIDE DLL   ###############################

#try_winedlloverride_update "amdxcffx64=n"

try_winedlloverride_update "winhttp=n,b"

try_winedlloverride_update "lsteamclient,winemenubuilder.exe="

try_winedlloverride_update "steam_api,steam_api64,steamclient,steamclient64,icu=n"

[ -n "${SW_USE_WINEDLLOVERRIDES}" ] && \
    try_winedlloverride_update "${SW_USE_WINEDLLOVERRIDES}"

[ -n "${SW_USE_LAUNCH_PARAMETERS}" ] && \
    export LAUNCH_PARAMETERS="${SW_USE_LAUNCH_PARAMETERS}"

[ -n "${SW_USE_WINE_CPU_TOPOLOGY}" ] && \
    export WINE_CPU_TOPOLOGY="${SW_USE_WINE_CPU_TOPOLOGY}"

###############################   DXVK DOWNLOAD   ##############################

if [ ! -d "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x64" ]; then

    export URL_DXVK_LIST=(
       "https://huggingface.co/RusNor/StartWine-data/resolve/main/vulkan/dxvk-${DXVK_VER}.tar.gz?download=true"
       "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VER}/dxvk-${DXVK_VER}.tar.gz"
    )

    if [ "${SW_SILENT_DL}" == "1" ]; then
        "$CRIER" --silent-download "${URL_DXVK_LIST[0]}" "${START_WINE_PATH}/data/tmp/dxvk-${DXVK_VER}.tar.gz" \
        || "$CRIER" --silent-download "${URL_DXVK_LIST[1]}" "${START_WINE_PATH}/data/tmp/dxvk-${DXVK_VER}.tar.gz"
        "$CRIER" --silent-tar "${START_WINE_PATH}/data/tmp/dxvk-${DXVK_VER}.tar.gz" "${START_WINE_PATH}/data/tools/vulkan"
    else
        "$CRIER" -d "${URL_DXVK_LIST[0]}" "${START_WINE_PATH}/data/tmp/dxvk-${DXVK_VER}.tar.gz" \
        || "$CRIER" -d "${URL_DXVK_LIST[1]}" "${START_WINE_PATH}/data/tmp/dxvk-${DXVK_VER}.tar.gz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/dxvk-${DXVK_VER}.tar.gz" "${START_WINE_PATH}/data/tools/vulkan"
    fi

    try_remove "${START_WINE_PATH}/data/tmp/dxvk-${DXVK_VER}.tar.gz"
    try_remove "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/setup_dxvk.sh"
fi

###############################   VKD3D DOWNLOAD   #############################

if [ ! -d "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x64" ]; then

    export URL_VKD3D_LIST=(
       "https://huggingface.co/RusNor/StartWine-data/resolve/main/vulkan/vkd3d-proton-${VKD3D_VER}.tar.zst?download=true"
       "https://github.com/HansKristian-Work/vkd3d-proton/releases/download/v${VKD3D_VER}/vkd3d-proton-${VKD3D_VER}.tar.zst"
    )

    if [ "${SW_SILENT_DL}" == "1" ]; then
        "$CRIER" --silent-download "${URL_VKD3D_LIST[0]}" "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar.zst" \
        || "$CRIER" --silent-download "${URL_VKD3D_LIST[1]}" "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar.zst"
        unzstd "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar.zst" &&
        "$CRIER" --silent-tar "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar" "${START_WINE_PATH}/data/tools/vulkan"
    else
        "$CRIER" -d "${URL_VKD3D_LIST[0]}" "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar.zst" \
        || "$CRIER" -d "${URL_VKD3D_LIST[1]}" "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar.zst"
        unzstd "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar.zst" &&
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar" "${START_WINE_PATH}/data/tools/vulkan"
    fi

    try_remove "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar.zst"
    try_remove "${START_WINE_PATH}/data/tmp/vkd3d-proton-${VKD3D_VER}.tar"
    try_remove "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/setup_vkd3d_proton.sh"
fi

############################   UTILS DOWNLOAD   ################################

if [ ! -f "${START_WINE_PATH}/data/tools/utils/config/dxvk.conf" ]; then

    try_remove "${START_WINE_PATH}/data/tools/utils"
    try_remove "${START_WINE_PATH}/data/tmp/utils.tar.xz"

    export URL_UTILS_LIST=(
       "https://huggingface.co/RusNor/StartWine-data/resolve/main/utils_data/utils.tar.xz?download=true"
       "https://github.com/RusNor/Utils-data/releases/download/utils/utils.tar.xz"
    )

    if [ "${SW_SILENT_DL}" == "1" ]; then
        "$CRIER" --silent-download "${URL_UTILS_LIST[0]}" "${START_WINE_PATH}/data/tmp/utils.tar.xz" \
        || "$CRIER" --silent-download "${URL_UTILS_LIST[1]}" "${START_WINE_PATH}/data/tmp/utils.tar.xz"
        "$CRIER" --silent-tar "${START_WINE_PATH}/data/tmp/utils.tar.xz" "${START_WINE_PATH}/data/tools"
    else
        "$CRIER" -d "${URL_UTILS_LIST[0]}" "${START_WINE_PATH}/data/tmp/utils.tar.xz" \
        || "$CRIER" -d "${URL_UTILS_LIST[1]}" "${START_WINE_PATH}/data/tmp/utils.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/utils.tar.xz" "${START_WINE_PATH}/data/tools"
    fi

    try_remove "${START_WINE_PATH}/data/tmp/utils.tar.xz"

fi

##############################   PFX DEFAULT DOWNLOAD  #########################

if [ ! -f "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso" ]; then

    export URL_PFX_LIST=(
       "https://huggingface.co/RusNor/StartWine-data/resolve/main/pfx_backup/pfx_default.iso?download=true"
       "https://github.com/RusNor/pfx_backup/releases/download/pfx_default/pfx_default.iso"
    )

    if [ "${SW_SILENT_DL}" == "1" ]; then
        "$CRIER" --silent-download "${URL_PFX_LIST[0]}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso" \
        || "$CRIER" --silent-download "${URL_PFX_LIST[1]}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"
    else
        "$CRIER" -d "${URL_PFX_LIST[0]}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso" \
        || "$CRIER" -d "${URL_PFX_LIST[1]}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"
    fi

fi

##############################   RUN VULKAN   ##################################

create_backup() {

    source_dir="${START_WINE_PATH}/data/app_saves"
    backup_dir="${START_WINE_PATH}/data/pfx_backup/autosaves/source_dir"
    full_backup_file="${START_WINE_PATH}/data/pfx_backup/saves_backup.iso"

    try_create_dir "${backup_dir}"
    try_create_dir "${START_WINE_PATH}/data/pfx_backup/autosaves/comparison_files"

    rsync_log="${START_WINE_PATH}/data/pfx_backup/autosaves/comparison_files/rsync.log"
    source_log="${START_WINE_PATH}/data/pfx_backup/autosaves/comparison_files/source.log"
    increment_log="${START_WINE_PATH}/data/pfx_backup/autosaves/comparison_files/increment.log"

    [ ! -f "${increment_log}" ] && \
        echo -n > "${increment_log}"

#    find "${source_dir}" -type f -exec b3sum {} \; > "${source_log}"    #real   0m17,707s
    find "${source_dir}" -type f -print0 | xargs -0 b3sum > "${source_log}"    #real   0m1,674s
#    find "${source_dir}" -type f -print0 | xargs -0 sha256sum > "${source_log}"    #real   0m2,569s

#    if ! cmp -s "${source_log}" "${increment_log}"; then
    if ! diff -q "${source_log}" "${increment_log}" >/dev/null; then
#    if ! /usr/bin/diffoscope "${source_log}" "${increment_log}" >/dev/null; then

        print_info "Найдены изменения..."
        print_info "Синхронизация файлов..."

        if rsync -azi --update --delete --log-file="${rsync_log}" "${source_dir}/" "${backup_dir}" 2>&1; then
            cat "${source_log}" > "${increment_log}"
            print_info "Синхронизация успешно завершина..."
        else
            print_error "Ошибка синхронизации!"
        fi

        if [ ! -f "${full_backup_file}" ]; then
            print_info "Полный бэкап не найден. Создаем новый..."
            try_remove "$backup_dir/${USER}"

            if mksquashfs "${backup_dir}" "${full_backup_file}" -noappend -b 1M -comp zstd -Xcompression-level 1 2>&1; then
                print_info "Бэкап успешно создан:"
            else
                print_error "Ошибка при создании бэкапа!"
            fi
        fi

        SW_TIME_UPDATE_BACKUP="${SW_TIME_UPDATE_BACKUP:=5}"

        if [ "${SW_TIME_UPDATE_BACKUP}" != 0 ]; then
            if [ ! -f "$(find "${full_backup_file}" -mtime -$SW_TIME_UPDATE_BACKUP -print 2>/dev/null)" ]; then

                try_remove "$backup_dir/${USER}"
                print_info "Обновляем образ бэкапа..."
                if mksquashfs "${backup_dir}" "${full_backup_file}" -noappend -b 1M -comp zstd -Xcompression-level 1 2>&1; then
                    print_info "Бэкап успешно обновлен:"
                else
                    print_error "Ошибка при обновлении бэкапа!"
                fi
            fi
        fi
    else
        print_info "Изменений бэкапа не найдено:"
    fi

}

RUN_VULKAN () {

    if [ "${SW_USE_OPENGL}" == "1" ]; then

        try_fix_pfx

        sw_win_ver

        try_link_d3d_plugins

        unset VK_INSTANCE_LAYERS VK_LOADER_LAYERS_ENABLE

        for wine_build_dll in d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi ; do
            [ -f "${WINEDIR}/lib/wine/i386-windows/${wine_build_dll}.dll" ] && \
                try_link "${WINEDIR}/lib/wine/i386-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
            [ -f "${WINEDIR}/lib64/wine/x86_64-windows/${wine_build_dll}.dll" ] && \
                try_link "${WINEDIR}/lib64/wine/x86_64-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
        done

        for wine_vkd3d_dll in libvkd3d-1 libvkd3d-shader-1 ; do
            [ -f "${WINEDIR}/lib/vkd3d/${wine_vkd3d_dll}.dll" ] && \
                try_link "${WINEDIR}/lib/vkd3d/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
            [ -f "${WINEDIR}/lib64/vkd3d/${wine_vkd3d_dll}.dll" ] && \
                try_link "${WINEDIR}/lib64/vkd3d/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
        done

        try_winedlloverride_update "d3d12,d3d11,d3d10,d3d10core,d3d10_1,d3d9,d3d8,dxgi=b"

        try_winedlloverride_update "openvr_api_dxvk,d3d12core="

        print_info "OpenGL API is used"

#        notify-send -t 1500 -a "StartWine" "$(eval_gettext "OpenGL mode")"

        if [ "${SW_USE_MANGOHUD}" == 1 ]; then
            export SW_RUN_MANGOHUD="mangohud --dlsym"
        fi

        if [ "${SW_USE_GALLIUM_HUD}" == 1 ]; then
            export GALLIUM_HUD_PERIOD=0.1
            export GALLIUM_HUD=".d.w320fps+.d.w320frametime+.d.w320cpu+.d.w320GPU-load+.d.w320memory-clock+.d.w320VRAM-usage+.d.w320temperature"
        fi

        if [ -n "${SW_USE_LANG_MODE}" ]; then
            export LANG="${SW_USE_LANG_MODE}"
        fi

        cd "${SW_GAME_PATH}" || exit 0

        ${SW_RUN_MANGOHUD} "${WINELOADER}" ${VDESKTOP} "$@" ${LAUNCH_PARAMETERS}
        "${WINESERVER}" -w
#        create_backup

    else

        try_fix_pfx

        sw_win_ver

        try_link_d3d_plugins

        if [ "${SW_USE_DXVK_GE}" == "1" ]; then
            if [ -d "${WINEDIR}/lib/wine/dxvk" ]; then
                for wine_dxvk_dll in openvr_api_dxvk d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi ; do
                    try_remove "${WINEPREFIX}/drive_c/windows/syswow64/${wine_dxvk_dll}.dll"
                    try_remove "${WINEPREFIX}/drive_c/windows/system32/${wine_dxvk_dll}.dll"

                    if [ -d "${WINEDIR}/lib64" ]; then
                        [ -f "${WINEDIR}/lib/wine/dxvk/${wine_dxvk_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/wine/dxvk/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        [ -f "${WINEDIR}/lib64/wine/dxvk/${wine_dxvk_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib64/wine/dxvk/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    else
                        [ -f "${WINEDIR}/lib/wine/dxvk/i386-windows/${wine_dxvk_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/wine/dxvk/i386-windows/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        [ -f "${WINEDIR}/lib/wine/dxvk/x86_64-windows/${wine_dxvk_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/wine/dxvk/x86_64-windows/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    fi
                done
            else
                for wine_dxvk_dll in d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi ; do
                    [ -f "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x32/${wine_dxvk_dll}.dll" ] && \
                        try_link "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                    [ -f "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x64/${wine_dxvk_dll}.dll" ] && \
                        try_link "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                done
            fi
        else
            for wine_dxvk_dll in d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi ; do
                try_remove "${WINEPREFIX}/drive_c/windows/syswow64/${wine_dxvk_dll}.dll"
                try_remove "${WINEPREFIX}/drive_c/windows/system32/${wine_dxvk_dll}.dll"

                [ -f "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x32/${wine_dxvk_dll}.dll" ] && \
                    try_link "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                [ -f "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x64/${wine_dxvk_dll}.dll" ] && \
                    try_link "${START_WINE_PATH}/data/tools/vulkan/dxvk-${DXVK_VER}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
            done
        fi

        if [ "${SW_USE_VKD3D_GE}" == "1" ]; then
            if [ -d "${WINEDIR}/lib/wine/vkd3d-proton" ]; then
                for wine_vkd3d_dll in d3d12 d3d12core ; do
                    if [ -d "${WINEDIR}/lib64" ]; then
                        try_link "${WINEDIR}/lib/wine/vkd3d-proton/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        try_link "${WINEDIR}/lib64/wine/vkd3d-proton/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    else
                        try_link "${WINEDIR}/lib/wine/vkd3d-proton/i386-windows/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        try_link "${WINEDIR}/lib/wine/vkd3d-proton/x86_64-windows/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    fi
                done

                for wine_vkd3d_dll in libvkd3d-1 libvkd3d-shader-1 ; do
                    try_remove "${WINEPREFIX}/drive_c/windows/syswow64/${wine_vkd3d_dll}.dll"
                    try_remove "${WINEPREFIX}/drive_c/windows/system32/${wine_vkd3d_dll}.dll"

                    if [ -d "${WINEDIR}/lib64" ]; then
                        [ -f "${WINEDIR}/lib/vkd3d/${wine_vkd3d_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/vkd3d/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        [ -f "${WINEDIR}/lib64/vkd3d/${wine_vkd3d_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib64/vkd3d/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    else
                        [ -f "${WINEDIR}/lib/vkd3d/i386-windows/${wine_vkd3d_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/vkd3d/i386-windows/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        [ -f "${WINEDIR}/lib/vkd3d/x86_64-windows/${wine_vkd3d_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/vkd3d/x86_64-windows/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    fi
                done
            else
                if [ ! -f "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x86/d3d12core.dll" ]; then
                    try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x86/d3d12.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                    try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x64/d3d12.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x86/d3d12.dll" "${WINEPREFIX}/drive_c/windows/syswow64/d3d12core.dll"
                    try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x64/d3d12.dll" "${WINEPREFIX}/drive_c/windows/system32/d3d12core.dll"
                else
                    for wine_vkd3d_dll in d3d12 d3d12core ; do
                        try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    done
                fi

                for wine_vkd3d_dll in libvkd3d-1 libvkd3d-shader-1 ; do
                    try_remove "${WINEPREFIX}/drive_c/windows/syswow64/${wine_vkd3d_dll}.dll"
                    try_remove "${WINEPREFIX}/drive_c/windows/system32/${wine_vkd3d_dll}.dll"

                    if [ -d "${WINEDIR}/lib64" ]; then
                        [ -f "${WINEDIR}/lib/vkd3d/${wine_vkd3d_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/vkd3d/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        [ -f "${WINEDIR}/lib64/vkd3d/${wine_vkd3d_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib64/vkd3d/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    else
                        [ -f "${WINEDIR}/lib/vkd3d/i386-windows/${wine_vkd3d_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/vkd3d/i386-windows/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                        [ -f "${WINEDIR}/lib/vkd3d/x86_64-windows/${wine_vkd3d_dll}.dll" ] && \
                            try_link "${WINEDIR}/lib/vkd3d/x86_64-windows/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    fi
                done
            fi
        else
            if [ ! -f "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x86/d3d12core.dll" ]; then
                try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x86/d3d12.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x64/d3d12.dll" "${WINEPREFIX}/drive_c/windows/system32"
                try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x86/d3d12.dll" "${WINEPREFIX}/drive_c/windows/syswow64/d3d12core.dll"
                try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x64/d3d12.dll" "${WINEPREFIX}/drive_c/windows/system32/d3d12core.dll"
            else
                for wine_vkd3d_dll in d3d12 d3d12core ; do
                    try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                    try_link "${START_WINE_PATH}/data/tools/vulkan/vkd3d-proton-${VKD3D_VER}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                done
            fi

            for wine_vkd3d_dll in libvkd3d-1 libvkd3d-shader-1 ; do
                try_remove "${WINEPREFIX}/drive_c/windows/syswow64/${wine_vkd3d_dll}.dll"
                try_remove "${WINEPREFIX}/drive_c/windows/system32/${wine_vkd3d_dll}.dll"

                if [ -d "${WINEDIR}/lib64" ]; then
                    [ -f "${WINEDIR}/lib/vkd3d/${wine_vkd3d_dll}.dll" ] && \
                        try_link "${WINEDIR}/lib/vkd3d/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                    [ -f "${WINEDIR}/lib64/vkd3d/${wine_vkd3d_dll}.dll" ] && \
                        try_link "${WINEDIR}/lib64/vkd3d/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                else
                    [ -f "${WINEDIR}/lib/vkd3d/i386-windows/${wine_vkd3d_dll}.dll" ] && \
                        try_link "${WINEDIR}/lib/vkd3d/i386-windows/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                    [ -f "${WINEDIR}/lib/vkd3d/x86_64-windows/${wine_vkd3d_dll}.dll" ] && \
                        try_link "${WINEDIR}/lib/vkd3d/x86_64-windows/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                fi
            done
        fi

        export SW_USE_ICU=1

        if [ "${SW_USE_ICU}" == 1 ]; then
            if [ -d "${WINEDIR}/lib/wine/icu" ]; then
                for wine_dll in icuin68 icuuc68 icudt68 ; do
                    try_link "${WINEDIR}/lib/wine/icu/i386-windows/${wine_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64"
                    try_link "${WINEDIR}/lib/wine/icu/x86_64-windows/${wine_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32"
                    try_winedlloverride_update "icuin68,icuuc68,icudt68=n"
                done
            fi
        fi

        export SW_USE_GSTREAMER=0

        if [ "${SW_USE_GSTREAMER}" == 1 ]; then
            try_create_dir "${START_WINE_PATH}/data/tmp/gstreamer-1.0"
            export GST_DEBUG="0:WARNING"
            export WINE_GST_REGISTRY_DIR="${START_WINE_PATH}/data/tmp/gstreamer-1.0"
            export MEDIACONV_AUDIO_DUMP_FILE="${START_WINE_PATH}/data/tmp/gstreamer-1.0/audiov2.foz"
            export MEDIACONV_VIDEO_DUMP_FILE="${START_WINE_PATH}/data/tmp/gstreamer-1.0/video.foz"
            export MEDIACONV_AUDIO_TRANSCODED_FILE="${START_WINE_PATH}/data/tmp/gstreamer-1.0/transcoded_audio.foz"
            export MEDIACONV_VIDEO_TRANSCODED_FILE="${START_WINE_PATH}/data/tmp/gstreamer-1.0/transcoded_video.foz"

            if [ -d "${WINEDIR}/lib64" ]; then
                export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib64/gstreamer-1.0:${WINEDIR}/lib/gstreamer-1.0"
            else
                export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib/x86_64-linux-gnu/gstreamer-1.0:${WINEDIR}/lib/i386-linux-gnu/gstreamer-1.0"
            fi
        fi

        try_winedlloverride_update "libvkd3d-1,libvkd3d-shader-1,d3d12,d3d12core,openvr_api_dxvk,d3d11,d3d10,d3d10core,d3d10_1,d3d9,d3d8,dxgi=n"

        if [ "${SW_USE_SHADER_CACHE}" == 1 ]; then
            try_create_dir "${START_WINE_PATH}/data/tmp/vulkan_shader_cache/${SW_GAME_NAME}"
            export DXVK_CONFIG_FILE="${START_WINE_PATH}/data/tools/utils/config/dxvk.conf"
            export DXVK_STATE_CACHE_PATH="${START_WINE_PATH}/data/tmp/vulkan_shader_cache/${SW_GAME_NAME}"
            export DXVK_STATE_CACHE=1
            export DXVK_LOG_LEVEL="none"
            export DXVK_LOG_PATH="none"

            export VKD3D_SHADER_CACHE_PATH="${START_WINE_PATH}/data/tmp/vulkan_shader_cache/${SW_GAME_NAME}"
            export VKD3D_FEATURE_LEVEL="12_0"
            export VKD3D_SHADER_DEBUG="none"
            export VKD3D_DEBUG="none"
        else
            export DXVK_STATE_CACHE=0
            unset DXVK_CONFIG_FILE DXVK_STATE_CACHE_PATH DXVK_LOG_LEVEL DXVK_LOG_PATH VKD3D_SHADER_CACHE_PATH VKD3D_FEATURE_LEVEL VKD3D_SHADER_DEBUG VKD3D_DEBUG
        fi

        print_info "Vulkan API is used"

#        notify-send -t 1500 -a "StartWine" "$(eval_gettext "VULKAN mode")"

        if [ "${SW_USE_MESA_OVERLAY_HUD}" == 1 ]; then
            export VK_LAYER_MESA_OVERLAY_CONFIG="output_file=${START_WINE_PATH}/data/tmp/stats/${SW_GAME_NAME}.txt"
            export VK_LOADER_LAYERS_ENABLE="${VK_LOADER_LAYERS_ENABLE},VK_LAYER_MESA_overlay"
            export VK_INSTANCE_LAYERS="${VK_INSTANCE_LAYERS}:VK_LAYER_MESA_overlay"
        else
            export VK_LAYER_MESA_OVERLAY_CONFIG="no_display=1,output_file=${START_WINE_PATH}/data/tmp/stats/${SW_GAME_NAME}.txt"
            export VK_LOADER_LAYERS_ENABLE="${VK_LOADER_LAYERS_ENABLE},VK_LAYER_MESA_overlay"
            export VK_INSTANCE_LAYERS="${VK_INSTANCE_LAYERS}:VK_LAYER_MESA_overlay"
        fi

        if [ -n "${SW_USE_LANG_MODE}" ]; then
            export LANG="${SW_USE_LANG_MODE}"
        fi

        cd "${SW_GAME_PATH}" || exit 0

        "${WINELOADER}" ${VDESKTOP} "$@" ${LAUNCH_PARAMETERS}
        "${WINESERVER}" -w
#        create_backup

    fi

}

###############################   CREATE SHORTCUT   ############################

CREATE_ICON () {

    SW_FORMAT_GAME_NAME="$(echo "${SW_GAME_NAME}" | tr -d "[:punct:]")"
    export SW_FORMAT_GAME_NAME

    export SW_ICO_TMP_PATH="${START_WINE_PATH}/data/tmp/icons"
    "$CRIER" --ico "${SW_GAME_EXE}" "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.ico"

    if [ -f "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.png" ]; then
        try_copy "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}.png" \
            "${START_WINE_PATH}/data/img/app_icons/default/${SW_FORMAT_GAME_NAME}_${SW_FORMAT_GAME_NAME}_x256.png"
        try_remove "${SW_ICO_TMP_PATH}/"*.png
    else
        TMP_PNG_PATH="$(ls -S -1 "${SW_ICO_TMP_PATH}/${SW_FORMAT_GAME_NAME}"*[_-]*.png 2>/dev/null | head -1)"
        if [ -f "$TMP_PNG_PATH" ]; then
            try_copy "$TMP_PNG_PATH" \
                "${START_WINE_PATH}/data/img/app_icons/default/${SW_FORMAT_GAME_NAME}_${SW_FORMAT_GAME_NAME}_x256.png"
            try_remove "${SW_ICO_TMP_PATH}/"*.png
        fi
    fi

}

CREATE_SHORTCUT () {

    if [ -f "${START_WINE_PATH}/data/pfx_backup/pfx_${SW_GAME_NAME}.iso" ]; then
        export SW_USE_PFX="pfx_${SW_GAME_NAME}"
        if [[ "${SW_USE_PFX}" != "pfx_default" && "${SW_USE_PFX}" != "pfx_StartWine" ]]; then
            crier=$("$CRIER" -q "$(eval_gettext "Restore prefix from backup?")")
            if [ "$(echo "$crier" | tail -1)" == "0" ]; then
                try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
                unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso" &&
                try_copy "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}" "${START_WINE_PATH}/data/app_config"
                try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}"
            fi
        fi
    fi

    CREATE_ICON

    echo "Exec=\"${SW_GAME_EXE}\"" > "${START_WINE_PATH}/Shortcuts/${SW_GAME_NAME}.swd"

}

WINEBOOT_CS () {

    crier=$("$CRIER" -q "$(eval_gettext "You have a backup of the default prefix with recommended libraries. Use it to create a new prefix?")")
    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"
        [ "${REIN_PFX}" == 1 ] && \
            "$CRIER" -i "$(eval_gettext "Restore prefix completed successfully")"
    else
        "${WINELOADER}" wineboot || prefix_init_error
        "${WINESERVER}" -w

        [ "${REIN_PFX}" == 1 ] && \
            "$CRIER" -i "$(eval_gettext "Reinstall prefix completed successfully")"
    fi

}

ADD_SHORTCUT_TO_MENU () {

    SW_FORMAT_GAME_NAME="$(echo "${SW_GAME_NAME}" | tr -d "[:punct:]")"
    export SW_FORMAT_GAME_NAME
    SW_ICON_PATH="$(ls "${START_WINE_PATH}"/data/img/app_icons/default/"${SW_FORMAT_GAME_NAME}"*x256.png)"
    export SW_ICON_PATH

    if [ ! -f "${HOME}/.local/share/applications/${CUSTOME_GAME_NAME}.desktop" ]; then
        {
            echo "[Desktop Entry]"
            echo "Name=${CUSTOME_GAME_NAME}"
            echo "Exec=env \"${SW_RUN_RUNIMAGE}\" \"${SW_GAME_EXE}\" --run"
            echo "Type=Application"
            echo "Categories=Game;"
            echo "Icon=${SW_ICON_PATH}"
        } > "${HOME}/.local/share/applications/${CUSTOME_GAME_NAME}.desktop"
        chmod +x "${HOME}/.local/share/applications/${CUSTOME_GAME_NAME}.desktop"
    fi

}

ADD_SHORTCUT_TO_DESKTOP () {

    SW_FORMAT_GAME_NAME="$(echo "${SW_GAME_NAME}" | tr -d "[:punct:]")"
    export SW_FORMAT_GAME_NAME
    SW_ICON_PATH="$(ls "${START_WINE_PATH}"/data/img/app_icons/default/"${SW_FORMAT_GAME_NAME}"*x256.png)"
    export SW_ICON_PATH

    if [ ! -f "${SW_DESKTOP_DIR}/${CUSTOME_GAME_NAME}.desktop" ]; then
        {
            echo "[Desktop Entry]"
            echo "Name=${CUSTOME_GAME_NAME}"
            echo "Exec=env \"${SW_RUN_RUNIMAGE}\" \"${SW_GAME_EXE}\" --run"
            echo "Type=Application"
            echo "Categories=Game;"
            echo "Icon=${SW_ICON_PATH}"
        } > "${SW_DESKTOP_DIR}/${CUSTOME_GAME_NAME}.desktop"
        chmod +x "${SW_DESKTOP_DIR}/${CUSTOME_GAME_NAME}.desktop"
    fi

}

#################################   PREFIX TOOLS   #############################

REMOVE_PFX () {

    try_remove "${START_WINE_PATH}/data/pfx/pfx_${SW_GAME_NAME}"
    try_remove "${START_WINE_PATH}/Shortcuts/${SW_GAME_NAME}.swd"
    try_remove "${START_WINE_PATH}/data/img/${SW_GAME_NAME}_x256.png"

    FORMAT_GAME_NAME="$(echo ${SW_GAME_NAME} | sed 's/_//g')"
    export FORMAT_GAME_NAME

    APP_ON_DESKTOP="$(ls "$START_WINE_PATH/data/img/app_icons/horizontal" | grep "${FORMAT_GAME_NAME}" | cut -d "_" -f3 | head -n1)"

    [ "$APP_ON_DESKTOP" != "" ] && \
        try_remove "${SW_DESKTOP_DIR}/${APP_ON_DESKTOP}.desktop" \
        try_remove "${HOME}/.local/share/applications/${APP_ON_DESKTOP}.desktop"

    [ "${SW_GAME_NAME}" != "StartWine" ] && \
        try_remove "${SW_DESKTOP_DIR}/${SW_GAME_NAME}.desktop" \
        try_remove "${HOME}/.local/share/applications/${SW_GAME_NAME}.desktop"

    notify-send -t 1500 -a "StartWine" "$(eval_gettext "Shortcut and prefix \${SW_GAME_NAME} removed")"

}

REINSTALL_PFX () {

    if [ "${SW_USE_PFX}" == "pfx_default" ]; then
        crier=$("$CRIER" -q "$(eval_gettext "Do you really want to reinstall the default prefix?")")
        if [ "$(echo "$crier" | tail -1)" == "0" ]; then
            try_remove "${START_WINE_PATH}/data/pfx/pfx_default"
            unsquashfs -d "${START_WINE_PATH}/data/pfx/pfx_default" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso" &&
            "$CRIER" -i "$(eval_gettext "Restore completed successfully")"
        fi
    else
        crier=$("$CRIER" -q "$(eval_gettext "Do you really want to reinstall the prefix?")")
        if [ "$(echo "$crier" | tail -1)" == "0" ]; then
            if [ ! -f "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso" ]; then
                crier=$("$CRIER" -q "$(eval_gettext "Remove old prefix?")")
                if [ "$(echo "$crier" | tail -1)" == "0" ]; then
                    try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
                    export REIN_PFX=1
                    WINEBOOT_CS
                fi
            else
                crier=$("$CRIER" -q "$(eval_gettext "Restore prefix from backup?")")
                if [ "$(echo "$crier" | tail -1)" == "0" ]; then
                    try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
                    unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso" &&
                    try_copy "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}" "${START_WINE_PATH}/data/app_config"

                    [ -f "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}" ] && \
                        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}"

                    "$CRIER" -i "$(eval_gettext "Restore prefix completed successfully")"
                else
                    crier=$("$CRIER" -q "$(eval_gettext "Remove old prefix?")")
                    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
                        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
                        export REIN_PFX=1
                        WINEBOOT_CS
                    fi
                fi
            fi
        fi
    fi

}

SW_PFX_BACKUP () {

    if [ "${SW_USE_PFX}" == "pfx_default" ]; then
        "$CRIER" -i "$(eval_gettext "You can not overwrite the default prefix backup")"
    else
        crier=$("$CRIER" -q "$(eval_gettext "Do you really want to backup the prefix?")")
        if [ "$(echo "$crier" | tail -1)" == "0" ]; then
            if [ -f "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso" ]; then
                if [ -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" ]; then
                    crier=$("$CRIER" -q "$(eval_gettext "Overwrite old backup?")")
                    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
                        try_copy "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}" "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
                        try_remove "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso"
                        mksquashfs "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso" -noappend -b 1M -comp zstd -Xcompression-level 1 &&
                        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}"
                        "$CRIER" -i "$(eval_gettext "Backup completed successfully")"
                    fi
                else
                    "$CRIER" -i "$(eval_gettext "There is no application prefix, create one first")"
                fi
            else
                if [ -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" ]; then
                    try_copy "${START_WINE_PATH}/data/app_config/${SW_GAME_NAME}" "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
                    try_remove "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso"
                    mksquashfs "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso" -noappend -b 1M -comp zstd -Xcompression-level 1 &&
                    try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}"
                    "$CRIER" -i "$(eval_gettext "Backup completed successfully")"
                else
                    "$CRIER" -i "$(eval_gettext "There is no application prefix, create one first")"
                fi
            fi
        fi
    fi

}

SW_PFX_RESTORE () {

    if [ "${SW_USE_PFX}" == "pfx_default" ]; then
        crier=$("$CRIER" -q "$(eval_gettext "Do you really want to restore the default prefix?")")
        if [ "$(echo "$crier" | tail -1)" == "0" ]; then
            if [ -f "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso" ]; then
                try_remove "${START_WINE_PATH}/data/pfx/pfx_default"
                unsquashfs -d "${START_WINE_PATH}/data/pfx/pfx_default" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso" &&
                "$CRIER" -i "$(eval_gettext "Restore completed successfully")"
            fi
        fi
    else
        crier=$("$CRIER" -q "$(eval_gettext "Do you really want to restore the prefix?")")
        if [ "$(echo "$crier" | tail -1)" == "0" ]; then
            if [ -f "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso" ]; then
                try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
                unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/${SW_USE_PFX}.iso" &&
                try_copy "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}" "${START_WINE_PATH}/data/app_config"
                try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/${SW_GAME_NAME}"
                "$CRIER" -i "$(eval_gettext "Restore completed successfully")"
            else
                "$CRIER" -i "$(eval_gettext "You do not have a backup create it first")"
            fi
        fi
    fi

}

SW_APP_SAVES_BACKUP () {

    crier=$("$CRIER" -q "$(eval_gettext "Create a backup copy of your saves?")")
    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
        if [ -f "${START_WINE_PATH}/data/pfx_backup/saves_backup.iso" ]; then
            try_remove "${START_WINE_PATH}/data/pfx_backup/saves_backup.iso"
            try_remove "${START_WINE_PATH}/data/app_saves/${USER}"
            mksquashfs "${START_WINE_PATH}/data/app_saves" "${START_WINE_PATH}/data/pfx_backup/saves_backup.iso" -noappend -b 1M -comp zstd -Xcompression-level 1 &&
            "$CRIER" -i "$(eval_gettext "The backup completed successfully")"
        else
            try_remove "${START_WINE_PATH}/data/app_saves/${USER}"
            mksquashfs "${START_WINE_PATH}/data/app_saves" "${START_WINE_PATH}/data/pfx_backup/saves_backup.iso" -noappend -b 1M -comp zstd -Xcompression-level 1 &&
            "$CRIER" -i "$(eval_gettext "The backup completed successfully")"
        fi
    fi

}

SW_APP_SAVES_RESTORE () {

    crier=$("$CRIER" -q "$(eval_gettext "Restore a backup copy of your saves?")")
    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
        if [ -f "${START_WINE_PATH}/data/pfx_backup/saves_backup.iso" ]; then
            try_remove "${START_WINE_PATH}/data/app_saves"
            unsquashfs -d "${START_WINE_PATH}/data/app_saves" "${START_WINE_PATH}/data/pfx_backup/saves_backup.iso" &&
            "$CRIER" -i "$(eval_gettext "The backup was successfully restored")"
        else
            "$CRIER" -i "$(eval_gettext "You do not have a backup copy of your saves")"
        fi
    fi

}

##################################   WINE TOOLS   ##############################

WINECFG () {

    try_fix_pfx

    "${WINELOADER}" winecfg

}

WINECONSOLE () {

    try_fix_pfx

    cd "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/drive_c" || exit 0
    "${WINELOADER}" wineconsole

}

REGEDIT () {

    try_fix_pfx

    "${WINELOADER}" regedit

}

WINEFILE () {

    try_fix_pfx

    "${WINELOADER}" explorer "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/drive_c"

}

UNINSTALLER () {

    export CREATE_PFX_DEFAULT=0

    if [ "${CREATE_PFX_DEFAULT}" == 1 ]; then
        . "${START_WINE_PATH}/data/scripts/sw_make_def_iso"
    else
        try_fix_pfx

        cd "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}/drive_c" || exit 0
        "${WINELOADER}" uninstaller
    fi

}

SW_WINETRICKS () {

    unset VK_INSTANCE_LAYERS VK_LOADER_LAYERS_ENABLE

    try_remove "${START_WINE_PATH}/data/scripts/winetricks"

    export URL="https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks"
    "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/scripts/winetricks"
    chmod +x "${START_WINE_PATH}/data/scripts/winetricks"

    try_fix_pfx

    export WINE="${WINELOADER}"

    "${START_WINE_PATH}/data/scripts/winetricks" -q -f ${DLL} || libraries_init_error
    "${WINESERVER}" -w

    if [ "${INSTALL_OK}" == 1 ]; then
        "$CRIER" -i "$(eval_gettext "Application installed successfully")"
    else
        "$CRIER" -i "$(eval_gettext "Libraries installed successfully")"
    fi

}

#################################   DEBUG   ####################################

DEBUG_LOG () {

    echo "############################   Application name   ##############################"
    echo ""
    echo "${SW_GAME_NAME}"
    echo ""
    echo "#############################   Date and time   ################################"
    echo ""
    date
    echo ""
    echo "###########################   Operating system   ###############################"
    echo ""
    lsb_release -d | sed s/Description/ОС/g
    echo ""
    echo "##########################   Desktop Environment   #############################"
    echo ""
    echo "$DESKTOP_SESSION"
    echo "${XDG_CURRENT_DESKTOP}"
    echo "${XDG_SESSION_TYPE}"
    echo ""
    echo "################################   Kernel   ####################################"
    echo ""
    uname -rmo
    echo ""
    echo "#################################   CPU   ######################################"
    echo ""
    grep -r "model name" /proc/cpuinfo
    echo ""
    echo "#################################   RAM   ######################################"
    echo ""
    free -m
    echo ""
    echo "#############################   Graphic cards   ################################"
    echo ""
    glxinfo -B | grep "OpenGL version string" | grep "Mesa" | sed 's/^.*Mesa/Mesa/'
    glxinfo | grep "OpenGL renderer string" | tail -c +25
    cat /sys/module/nvidia/version 2>/dev/null
    echo ""
    echo "#############################   Wine Version   #################################"
    echo ""
    "$WINELOADER" --version 2>&1
    echo ""
    echo "################################################################################"
    echo ""
}

DEBUG_VULKAN () {

    export WINEDEBUG="fixme-all,err+loaddll,err+dll,err+file,err+reg"

    DEBUG_LOG > "${START_WINE_PATH}/data/tmp/logs/${SW_GAME_NAME}.log"

    RUN_VULKAN >> "${START_WINE_PATH}/data/tmp/logs/${SW_GAME_NAME}.log" 2>&1 "$@"

}

##############################   DOWNLOAD WINE   ###############################

WINE_1 () {

    export STAG_VER

    try_remove "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-amd64.tar.xz"
    try_remove "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-amd64"

    if [ ! -d "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-amd64/bin" ]; then

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/wine-staging/wine-${STAG_VER}-staging-amd64.tar.xz?download=true"
            "https://github.com/Kron4ek/Wine-Builds/releases/download/${STAG_VER}/wine-${STAG_VER}-staging-amd64.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-amd64.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-amd64.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-amd64.tar.xz" "${START_WINE_PATH}/data/tmp"
        try_create_dir "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-amd64"

        for copy_dir in bin lib share ; do
            try_move "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-amd64/${copy_dir}" "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-amd64"
        done

        try_remove "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-amd64.tar.xz"
        try_remove "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-amd64"

    fi

    echo "wine-staging ${STAG_VER}" > "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-amd64/version"

    chmod -R 775 "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-amd64"

    if [ "${WINE_OK}" == 1 ]; then
        echo " "
    else
        if [ -d "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-amd64/bin" ]; then
            msg="$(eval_gettext "Downloading wine staging \${STAG_VER} completed successfully")"
            "$CRIER" -i "$msg"
        else
            "$CRIER" -e "$(eval_gettext "Download failed, try again")"
        fi
    fi

}

WINE_2 () {

    export SP_VER

    try_remove "${START_WINE_PATH}/data/tmp/steam-proton-${SP_VER}.tar.xz"
    try_remove "${START_WINE_PATH}/data/tmp/steam-proton-${SP_VER}"

    if [ ! -d "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}/bin" ]; then

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/wine-steam-proton/steam-proton-${SP_VER}.tar.xz?download=true"
            "https://github.com/RusNor/Wine-Steam-Proton/releases/download/steam-proton-${SP_VER}/steam-proton-${SP_VER}.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/steam-proton-${SP_VER}.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/steam-proton-${SP_VER}.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/steam-proton-${SP_VER}.tar.xz" "${START_WINE_PATH}/data/tmp"
        try_create_dir "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}/files"

        for copy_dir in bin bin-wow64 lib lib64 share ; do
            try_move "${START_WINE_PATH}/data/tmp/steam-proton-${SP_VER}/${copy_dir}" "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}/files"
        done

        for link_dir in bin bin-wow64 lib lib64 share ; do
            try_link "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}/files/${link_dir}" "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}"
        done

        echo "Steam-${SP_VER}" > "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}/version"

        try_remove "${START_WINE_PATH}/data/tmp/steam-proton-${SP_VER}.tar.xz"
        try_remove "${START_WINE_PATH}/data/tmp/steam-proton-${SP_VER}"

    fi

    chmod -R 775 "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}"

    if [ "${WINE_OK}" == 1 ]; then
        echo " "
    else
        if [ -d "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}/bin" ]; then
            msg="$(eval_gettext "Downloading wine steam proton \${SP_VER} completed successfully")"
            "$CRIER" -i "$msg"
        else
            "$CRIER" -e "$(eval_gettext "Download failed, try again")"
        fi
    fi

}

WINE_3 () {

    export GE_VER

    try_remove "${START_WINE_PATH}/data/tmp/GE-Proton${GE_VER}.tar.gz"
    try_remove "${START_WINE_PATH}/data/tmp/GE-Proton${GE_VER}"

    if [ ! -d "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}/bin" ]; then

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/proton-ge-custom/GE-Proton${GE_VER}.tar.gz?download=true"
            "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton${GE_VER}/GE-Proton${GE_VER}.tar.gz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/GE-Proton${GE_VER}.tar.gz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/GE-Proton${GE_VER}.tar.gz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/GE-Proton${GE_VER}.tar.gz" "${START_WINE_PATH}/data/tmp"
        try_create_dir "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        try_move "${START_WINE_PATH}/data/tmp/GE-Proton${GE_VER}/files" "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"

        for link_dir in bin bin-wow64 lib lib64 share ; do
            try_link "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}/files/${link_dir}" "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        done

        echo "GE-${GE_VER}" > "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}/version"

        try_remove "${START_WINE_PATH}/data/tmp/GE-Proton${GE_VER}.tar.gz"
        try_remove "${START_WINE_PATH}/data/tmp/GE-Proton${GE_VER}"

    fi

    chmod -R 775 "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"

    try_remove "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}/bin/cabextract"

    if [ "${WINE_OK}" == 1 ]; then
        echo " "
    else
        if [ -d "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}/bin" ]; then
            msg="$(eval_gettext "Downloading wine proton ge \${GE_VER} completed successfully")"
            "$CRIER" -i "$msg"
        else
            "$CRIER" -e "$(eval_gettext "Download failed, try again")"
        fi
    fi

}

WINE_4 () {

    export STAG_VER

    try_remove "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-tkg-amd64.tar.xz"
    try_remove "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-tkg-amd64"

    if [ ! -d "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-tkg-amd64/bin" ]; then

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/wine-staging-tkg/wine-${STAG_VER}-staging-tkg-amd64.tar.xz?download=true"
            "https://github.com/Kron4ek/Wine-Builds/releases/download/${STAG_VER}/wine-${STAG_VER}-staging-tkg-amd64.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-tkg-amd64.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-tkg-amd64.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-tkg-amd64.tar.xz" "${START_WINE_PATH}/data/tmp"
        try_create_dir "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-tkg-amd64"

        for copy_dir in bin lib share ; do
            try_move "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-tkg-amd64/${copy_dir}" "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-tkg-amd64"
        done

        try_remove "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-tkg-amd64.tar.xz"
        try_remove "${START_WINE_PATH}/data/tmp/wine-${STAG_VER}-staging-tkg-amd64"

    fi

    echo "wine-staging-tkg ${STAG_VER}" > "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-tkg-amd64/version"

    chmod -R 775 "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-tkg-amd64"

    if [ "${WINE_OK}" == 1 ]; then
        echo " "
    else
        if [ -d "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-tkg-amd64/bin" ]; then
            msg="$(eval_gettext "Downloading wine staging tkg \${STAG_VER} completed successfully")"
            "$CRIER" -i "$msg"
        else
            "$CRIER" -e "$(eval_gettext "Download failed, try again")"
        fi
    fi

}

RM_WINE_1 () {

    crier=$("$CRIER" -q "$(eval_gettext "Do you really want to remove the wine staging?")")

    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
        try_remove "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-amd64"
    fi

}

RM_WINE_2 () {

    crier=$("$CRIER" -q "$(eval_gettext "Do you really want to remove the wine steam proton?")")

    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
        try_remove "${START_WINE_PATH}/data/wine/steam-proton-${SP_VER}"
    fi

}

RM_WINE_3 () {

    crier=$("$CRIER" -q "$(eval_gettext "Do you really want to remove the wine proton ge?")")

    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
        try_remove "${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
    fi

}

RM_WINE_4 () {

    crier=$("$CRIER" -q "$(eval_gettext "Do you really want to remove the wine staging tkg?")")

    if [ "$(echo "$crier" | tail -1)" == "0" ]; then
        try_remove "${START_WINE_PATH}/data/wine/wine-${STAG_VER}-staging-tkg-amd64"
    fi

}

##################################   STOP   ####################################

STOP () {

    winedevice_pids="$(pgrep 'winedevice')"
    wine_pids="$(ls -l /proc/*/exe 2>/dev/null | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}')"

    for wine_pid in $winedevice_pids $wine_pids ; do
        if [ -n "${wine_pid}" ]; then
            kill -n 9 "${wine_pid}"
            print_info "$wine_pid"
        fi
    done

    notify-send -t 1500 -a "StartWine" "$(eval_gettext "Termination of active processes...")"

    exit 0

}

#############################   AUTOINSTALL APP   ##############################

INSTALL_BATTLE_NET () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_Battle.net_Launcher/drive_c/Program Files (x86)/Battle.net/Battle.net Launcher.exe" ]; then

        GE_VER="10-15"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_Battle.net_Launcher"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/Battle.net.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/Battle.net/Battle.net.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/Battle.net.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/Battle.net.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/Battle.net.tar.xz" "${WINEPREFIX}/drive_c/Program Files (x86)"
        try_remove "${START_WINE_PATH}/data/tmp/Battle.net.tar.xz"

        SW_USE_EXE="drive_c/Program Files (x86)/Battle.net/Battle.net Launcher.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Battle_Net.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Battle_Net.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Battle_Net.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_EPIC_GAMES () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_EpicGamesLauncher/drive_c/Program Files (x86)/Epic Games/Launcher/Portal/Binaries/Win32/EpicGamesLauncher.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_EpicGamesLauncher"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/EpicGames.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/EpicGames/EpicGames.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/EpicGames.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/EpicGames.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/EpicGames.tar.xz" "${WINEPREFIX}/drive_c/Program Files (x86)"
        try_remove "${START_WINE_PATH}/data/tmp/EpicGames.tar.xz"

        SW_USE_EXE="drive_c/Program Files (x86)/Epic Games/Launcher/Portal/Binaries/Win32/EpicGamesLauncher.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Epic_Games.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Epic_Games.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Epic_Games.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_EVE () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_eve-online/drive_c/CCP/eve-online.exe" ]; then

        GE_VER="10-15"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_eve-online"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        try_create_dir "${WINEPREFIX}/drive_c/CCP"
        export URL="https://launcher.ccpgames.com/eve-online/release/win32/x64/eve-online-latest+Setup.exe"
        "$CRIER" -d "${URL}" "${WINEPREFIX}/drive_c/CCP/eve-online.exe"

        SW_USE_EXE="drive_c/CCP/eve-online.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Eve.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Eve.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Eve.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_GAME_CENTER () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_VKPlay/drive_c/VK Play/VKPlay.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_VKPlay"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        try_create_dir "${WINEPREFIX}/drive_c/VK Play/Distrib"
        export URL="https://static.gc.vkplay.ru/VKPlayLoader.exe"
        "$CRIER" -d "${URL}" "${WINEPREFIX}/drive_c/VK Play/VKPlay.exe"

        SW_USE_EXE="drive_c/VK Play/VKPlay.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Game_Center.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Game_Center.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Game_Center.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_GALAXY () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_GalaxyClient/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        #2.0.80.33 beta
        #2.0.77.22 stable
        #2.0.74.352 old_stable

        export GOG_VER=2.0.80.33
        export URL="https://content-system.gog.com/open_link/download?path=/open/galaxy/client/${GOG_VER}/setup_galaxy_${GOG_VER}.exe"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/setup_galaxy_${GOG_VER}.exe"

        export SW_USE_PFX="pfx_GalaxyClient"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        "${WINELOADER}" "${START_WINE_PATH}/data/tmp/setup_galaxy_${GOG_VER}.exe" /VERYSILENT /NORESTART "$@"
        "${WINESERVER}" -w

        while pgrep -fa "setup_galaxy_${GOG_VER}" &>/dev/null ; do sleep 1 ; done

        SW_USE_EXE="drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe"

        try_remove "${START_WINE_PATH}/data/tmp/setup_galaxy_${GOG_VER}.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Galaxy.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Galaxy.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Galaxy.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_RIOT_GAMES () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_RiotClientServices/drive_c/Riot Games/Riot Client/RiotClientServices.exe" ]; then

        LUTRIS_GE_VER="8-27-LoL"

        try_remove "${START_WINE_PATH}/data/tmp/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64.tar.xz"
        try_remove "${START_WINE_PATH}/data/tmp/lutris-GE-Proton${LUTRIS_GE_VER}-x86_64"

        if [ ! -d "${START_WINE_PATH}/data/wine/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64/bin" ]; then
            export URL="https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton${LUTRIS_GE_VER}/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64.tar.xz"
            "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64.tar.xz"
            "$CRIER" --tar "${START_WINE_PATH}/data/tmp/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64.tar.xz" "${START_WINE_PATH}/data/tmp"
            try_create_dir "${START_WINE_PATH}/data/wine/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64"

            for copy_dir in bin lib lib64 share ; do
                try_move "${START_WINE_PATH}/data/tmp/lutris-GE-Proton${LUTRIS_GE_VER}-x86_64/${copy_dir}" "${START_WINE_PATH}/data/wine/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64"
            done

            try_remove "${START_WINE_PATH}/data/tmp/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64.tar.xz"
            try_remove "${START_WINE_PATH}/data/tmp/lutris-GE-Proton${LUTRIS_GE_VER}-x86_64"

        fi

        chmod -R 775 "${START_WINE_PATH}/data/wine/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64"

        export SW_USE_PFX="pfx_RiotClientServices"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/wine-lutris-GE-Proton${LUTRIS_GE_VER}-x86_64"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/RiotGames.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/RiotGames/RiotGames.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/RiotGames.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/RiotGames.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/RiotGames.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/RiotGames.tar.xz"

        SW_USE_EXE="drive_c/Riot Games/Riot Client/RiotClientServices.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Riot_Games.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Riot_Games.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Riot_Games.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_EA () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_EALauncher/drive_c/Program Files/Electronic Arts/EA Desktop/EA Desktop/EALauncher.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export URL="https://origin-a.akamaihd.net/EA-Desktop-Client-Download/installer-releases/EAappInstaller.exe"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/EAappInstaller.exe"

        export SW_USE_PFX="pfx_EALauncher"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        "${WINELOADER}" "${START_WINE_PATH}/data/tmp/EAappInstaller.exe" /silent "$@"

        while pgrep -fa 'EAappInstaller' &>/dev/null ; do sleep 1 ; done
        "${WINESERVER}" -k

        try_remove "${START_WINE_PATH}/data/tmp/EAappInstaller.exe"

        SW_USE_EXE="drive_c/Program Files/Electronic Arts/EA Desktop/EA Desktop/EALauncher.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/EA.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/EA.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/EA.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_ROCKSTAR_GAMES () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_Launcher/drive_c/Program Files/Rockstar Games/Launcher/Launcher.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_Launcher"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/RockstarGames.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/RockstarGames/RockstarGames.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/RockstarGames.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/RockstarGames.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/RockstarGames.tar.xz" "${WINEPREFIX}/drive_c/Program Files"
        try_remove "${START_WINE_PATH}/data/tmp/RockstarGames.tar.xz"

        SW_USE_EXE="drive_c/Program Files/Rockstar Games/Launcher/Launcher.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Rockstar_Games.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Rockstar_Games.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Rockstar_Games.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_STEAM () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_steam/drive_c/Program Files (x86)/Steam/steam.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_steam"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

       "${WINELOADER}" regedit "${START_WINE_PATH}/data/app_patches/Steam_patch.reg"

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/Steam.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/Steam/Steam.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/Steam.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/Steam.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/Steam.tar.xz" "${WINEPREFIX}/drive_c/Program Files (x86)"
        try_remove "${START_WINE_PATH}/data/tmp/Steam.tar.xz"

        SW_USE_EXE="drive_c/Program Files (x86)/Steam/steam.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Steam.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Steam.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Steam.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_UBISOFT_CONNECT () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_UbisoftConnect/drive_c/Program Files (x86)/Ubisoft/Ubisoft Game Launcher/UbisoftConnect.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_UbisoftConnect"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/Ubisoft.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/Ubisoft/Ubisoft.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/Ubisoft.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/Ubisoft.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/Ubisoft.tar.xz" "${WINEPREFIX}/drive_c/Program Files (x86)"
        try_remove "${START_WINE_PATH}/data/tmp/Ubisoft.tar.xz"

        SW_USE_EXE="drive_c/Program Files (x86)/Ubisoft/Ubisoft Game Launcher/UbisoftConnect.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Ubisoft_Connect.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Ubisoft_Connect.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Ubisoft_Connect.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_WARGAMING () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_wgc/drive_c/ProgramData/Wargaming.net/GameCenter/wgc.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_wgc"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/Wargaming.net.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/Wargaming.net/Wargaming.net.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/Wargaming.net.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/Wargaming.net.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/Wargaming.net.tar.xz" "${WINEPREFIX}/drive_c/ProgramData"
        try_remove "${START_WINE_PATH}/data/tmp/Wargaming.net.tar.xz"

        SW_USE_EXE="drive_c/ProgramData/Wargaming.net/GameCenter/wgc.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Wargaming.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Wargaming.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Wargaming.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_ZONA () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_Zona/drive_c/Program Files (x86)/Zona/Zona.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export URL="https://dlf1.appzona.org/ZonaSetup[mpj07].exe"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/ZonaSetup.exe"

        export SW_USE_PFX="pfx_Zona"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        "${WINELOADER}" "${START_WINE_PATH}/data/tmp/ZonaSetup.exe" /silent "$@"

        while pgrep -fa 'ZonaSetup' &>/dev/null ; do sleep 1 ; done

        "${WINESERVER}" -k

        SW_USE_EXE="drive_c/Program Files (x86)/Zona/Zona.exe"

        try_remove "${START_WINE_PATH}/data/tmp/ZonaSetup.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Zona.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Zona.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Zona.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_OSU () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/osu!/osu!.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_osu!"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        "${WINELOADER}" regedit "${START_WINE_PATH}/data/app_patches/Osu_patch.reg"

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/osu/osu.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/osu.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/osu.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/osu.tar.xz"

        SW_USE_EXE="drive_c/osu!/osu!.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Osu.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Osu.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Osu.jpg"

        sw_shortcuts_autoinstall

        if [ ! -d "${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/winestreamproxy" ]; then
            export URL="https://github.com/openglfreak/winestreamproxy/releases/download/v2.0.3/winestreamproxy-2.0.3-amd64.tar.gz"
            "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/winestreamproxy-2.0.3-amd64.tar.gz"
            try_create_dir "${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/winestreamproxy"
            try_create_dir "${START_WINE_PATH}/data/tmp/winestreamproxy"
            "$CRIER" --tar "${START_WINE_PATH}/data/tmp/winestreamproxy-2.0.3-amd64.tar.gz" "${START_WINE_PATH}/data/tmp/winestreamproxy"

            try_copy "${START_WINE_PATH}/data/tmp/winestreamproxy/settings.conf" "${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/winestreamproxy"
            try_copy "${START_WINE_PATH}/data/tmp/winestreamproxy/winestreamproxy.exe" "${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/winestreamproxy"
            try_copy "${START_WINE_PATH}/data/tmp/winestreamproxy/winestreamproxy_unixlib.dll.so" "${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/winestreamproxy"

            try_remove "${START_WINE_PATH}/data/tmp/winestreamproxy-2.0.3-amd64.tar.gz" &&
            try_remove "${START_WINE_PATH}/data/tmp/winestreamproxy"

            export URL="https://github.com/openglfreak/osu-handler-wine/releases/download/v0.3.0/osu-handler-wine"
            "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/winestreamproxy/osu-handler-wine"
            print_info "done"
        fi

        chmod -R 775 "${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/winestreamproxy"

        if [ ! -f "/home/${USER}/.local/share/applications/Add-Osu-Plugin.desktop" ]; then
            {
                echo "[Desktop Entry]"
                echo "Name=Add-Osu-Plugin"
                echo "Exec=env \"${START_WINE_PATH}/data/pfx/pfx_osu!/drive_c/winestreamproxy/osu-handler-wine\" %F"
                echo "Comment=Osu Plugins"
                echo "Type=Application"
                echo "MimeType=osz;osk;"
                echo "Categories=Game"
                echo "NoDisplay=true"
                echo "Icon=${START_WINE_PATH}/data/img/app_icons/default/osu_osu_x256.png"
            } > "/home/${USER}/.local/share/applications/Add-Osu-Plugin.desktop"
            chmod +x "/home/${USER}/.local/share/applications/Add-Osu-Plugin.desktop"
        fi

        export DLL="dotnet40"
        export INSTALL_OK=1

        SW_WINETRICKS

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_WORLD_OF_SEA_BATTLE () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_WorldOfSeaBattleClient/drive_c/World Of Sea Battle/WorldOfSeaBattleClient.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_WorldOfSeaBattleClient"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/WorldOfSeaBattle.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/WorldOfSeaBattle/WorldOfSeaBattle.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/WorldOfSeaBattle.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/WorldOfSeaBattle.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/WorldOfSeaBattle.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/WorldOfSeaBattle.tar.xz"

        SW_USE_EXE="drive_c/World Of Sea Battle/WorldOfSeaBattleClient.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/World_of_Sea_Battle.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/World_of_Sea_Battle.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/World_of_Sea_Battle.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_CROSSOUT () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_CrossOut/drive_c/Crossout/CrossOut.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_CrossOut"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/CrossOut/CrossOut.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/CrossOut.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/CrossOut.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/CrossOut.tar.xz"

        SW_USE_EXE="drive_c/Crossout/CrossOut.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Crossout.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Crossout.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Crossout.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_CALIBER () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_Caliber/drive_c/Program Files (x86)/1C Game Studios/Caliber/Caliber.exe" ]; then

        GE_VER="10-15"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_Caliber"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/Caliber.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/Caliber/Caliber.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/Caliber.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/Caliber.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/Caliber.tar.xz" "${WINEPREFIX}/drive_c/Program Files (x86)"
        try_remove "${START_WINE_PATH}/data/tmp/Caliber.tar.xz"

        SW_USE_EXE="drive_c/Program Files (x86)/1C Game Studios/Caliber/Caliber.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Caliber.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Caliber.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Caliber.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_LESTA_GAMES () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_lgc/drive_c/ProgramData/Lesta/GameCenter/lgc.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_lgc"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/Lesta.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/Lesta/Lesta.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/Lesta.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/Lesta.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/Lesta.tar.xz" "${WINEPREFIX}/drive_c/ProgramData"
        try_remove "${START_WINE_PATH}/data/tmp/Lesta.tar.xz"

        SW_USE_EXE="drive_c/ProgramData/Lesta/GameCenter/lgc.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Lesta_Games.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Lesta_Games.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Lesta_Games.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_STALCRAFT () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_ExboLauncher/drive_c/EXBO/java/bin/ExboLauncher.exe" ]; then

        GE_VER="8-32"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_ExboLauncher"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/Stalcraft/Stalcraft.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/Stalcraft.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/Stalcraft.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/Stalcraft.tar.xz"

        SW_USE_EXE="drive_c/EXBO/java/bin/ExboLauncher.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Stalcraft.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Stalcraft.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Stalcraft.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_LINEAGE () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_Lineage/drive_c/GameCoast Games/launcher/Lineage.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_Lineage"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/Lineage/Lineage.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/Lineage.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/Lineage.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/Lineage.tar.xz"

        SW_USE_EXE="drive_c/GameCoast Games/launcher/Lineage.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Lineage.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Lineage.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Lineage.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_PLARIUM_PLAY () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_PlariumPlay/drive_c/users/${USER}/AppData/Local/PlariumPlay/PlariumPlay.exe" ]; then

        GE_VER="10-15"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_PlariumPlay"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

        "${WINELOADER}" wineboot || prefix_init_error
        "${WINESERVER}" -w

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/PlariumPlay/PlariumPlay.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/PlariumPlay.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/PlariumPlay.tar.xz" "${START_WINE_PATH}/data/app_saves/${USER}/AppData/Local"

        try_remove "${START_WINE_PATH}/data/tmp/PlariumPlay.tar.xz"

        SW_USE_EXE="drive_c/users/${USER}/AppData/Local/PlariumPlay/PlariumPlay.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Plarium_Play.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Plarium_Play.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Plarium_Play.jpg"

        sw_shortcuts_autoinstall

        export DLL="dotnetdesktop6"
        export INSTALL_OK=1

        SW_WINETRICKS

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_PATH_OF_EXILE () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_PathOfExile/drive_c/Grinding Gear Games/Path of Exile/PathOfExile.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_PathOfExile"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/GrindingGearGames/GrindingGearGames.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/GrindingGearGames.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/GrindingGearGames.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/GrindingGearGames.tar.xz"

        SW_USE_EXE="drive_c/Grinding Gear Games/Path of Exile/PathOfExile.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Path_of_Exile.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Path_of_Exile.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Path_of_Exile.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_STALKER_ONLINE () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_StalkerOnline_Launcher/drive_c/StalkerOnline/StalkerOnline Launcher.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_StalkerOnline_Launcher"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/StalkerOnline/StalkerOnline.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/StalkerOnline.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/StalkerOnline.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/StalkerOnline.tar.xz"

        SW_USE_EXE="drive_c/StalkerOnline/StalkerOnline Launcher.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Stalker_Online.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Stalker_Online.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Stalker_Online.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_ANOMALY_ZONE () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_Anomaly_Zone/drive_c/Cybertime Games/Anomaly-Zone/Anomaly Zone.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_Anomaly_Zone"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/CybertimeGames/CybertimeGames.tar.xz"

        "$CRIER" -d "${FTP_URL}" "${START_WINE_PATH}/data/tmp/CybertimeGames.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/CybertimeGames.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/CybertimeGames.tar.xz"

        SW_USE_EXE="drive_c/Cybertime Games/Anomaly-Zone/Anomaly Zone.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Anomaly_Zone.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Anomaly_Zone.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Anomaly_Zone.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_NINTENDO_SWITCH () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_yuzu/drive_c/yuzu/yuzu.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_yuzu"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/yuzu.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/yuzu/yuzu.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/yuzu.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/yuzu.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/yuzu.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/yuzu.tar.xz"

        SW_USE_EXE="drive_c/yuzu/yuzu.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Nintendo_Switch.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Nintendo_Switch.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Nintendo_Switch.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi


}

INSTALL_POPCOTIME () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_PopcoTime/drive_c/PopcoTime/PopcoTime.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_PopcoTime"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/PopcoTime.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/PopcoTime/PopcoTime.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/PopcoTime.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/PopcoTime.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/PopcoTime.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/PopcoTime.tar.xz"

        SW_USE_EXE="drive_c/PopcoTime/PopcoTime.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Popcotime.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Popcotime.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Popcotime.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_GAMEXP () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_GameXP_Launcher/drive_c/Launcher/GameXP Launcher.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_GameXP_Launcher"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/GameXPLauncher/GameXPLauncher.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/GameXPLauncher.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/GameXPLauncher.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/GameXPLauncher.tar.xz"

        SW_USE_EXE="drive_c/Launcher/GameXP Launcher.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/GameXP.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/GameXP.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/GameXP.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_RPG_CLUB () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_RPG_Club/drive_c/RPG-Club/RPG Club.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_RPG_Club"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export URL="https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/RPG-Club/RPG-Club.tar.xz"
        "$CRIER" -d "${URL}" "${START_WINE_PATH}/data/tmp/RPG-Club.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/RPG-Club.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/RPG-Club.tar.xz"

        SW_USE_EXE="drive_c/RPG-Club/RPG Club.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/RPG_Club.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/RPG_Club.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/RPG_Club.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_GENSHIN_IMPACT () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_HoYoPlay/drive_c/Program Files/HoYoPlay/HoYoPlay.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_HoYoPlay"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/HoYoPlay.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/HoYoPlay/HoYoPlay.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/HoYoPlay.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/HoYoPlay.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/HoYoPlay.tar.xz" "${WINEPREFIX}/drive_c/Program Files"
        try_remove "${START_WINE_PATH}/data/tmp/HoYoPlay.tar.xz"

        SW_USE_EXE="drive_c/Program Files/HoYoPlay/HoYoPlay.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Genshin_Impact.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Genshin_Impact.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Genshin_Impact.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_LOST_LIGHT () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_Lost_Light/drive_c/Program Files (x86)/LostLight/Lost Light.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_Lost_Light"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/LostLight.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/LostLight/LostLight.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/LostLight.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/LostLight.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/LostLight.tar.xz" "${WINEPREFIX}/drive_c/Program Files (x86)"
        try_remove "${START_WINE_PATH}/data/tmp/LostLight.tar.xz"

        SW_USE_EXE="drive_c/Program Files (x86)/LostLight/Lost Light.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/Lost_Light.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/Lost_Light.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/Lost_Light.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

INSTALL_RETROBAT () {

    if [ ! -f "${START_WINE_PATH}/data/pfx/pfx_retrobat/drive_c/RetroBat/retrobat.exe" ]; then

        GE_VER="9-20"
        WINE_OK=1
        WINE_3

        export SW_USE_PFX="pfx_retrobat"
        export WINEPREFIX="${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        export WINEDIR="${START_WINE_PATH}/data/wine/GE-Proton${GE_VER}"
        export WINELOADER="${WINEDIR}/bin/wine"
        export WINESERVER="${WINEDIR}/bin/wineserver"

        try_remove "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}"
        unsquashfs -d "${START_WINE_PATH}/data/pfx/${SW_USE_PFX}" "${START_WINE_PATH}/data/pfx_backup/pfx_default.iso"

#        "${WINELOADER}" wineboot || prefix_init_error
#        "${WINESERVER}" -w

        export FTP_URL=(
            "https://huggingface.co/RusNor/StartWine-data/resolve/main/Autoinstal-Launchers-Data/RetroBat.tar.xz?download=true"
            "https://github.com/RusNor/Autoinstall-Launchers-Data/releases/download/RetroBat/RetroBat.tar.xz"
        )

        "$CRIER" -d "${FTP_URL[0]}" "${START_WINE_PATH}/data/tmp/RetroBat.tar.xz" \
        || "$CRIER" -d "${FTP_URL[1]}" "${START_WINE_PATH}/data/tmp/RetroBat.tar.xz"
        "$CRIER" --tar "${START_WINE_PATH}/data/tmp/RetroBat.tar.xz" "${WINEPREFIX}/drive_c"
        try_remove "${START_WINE_PATH}/data/tmp/RetroBat.tar.xz"

        SW_USE_EXE="drive_c/RetroBat/retrobat.exe"

        export COPY_ICON_H="${START_WINE_PATH}/data/img/launcher_icons/horizontal/RetroBat.jpg"
        export COPY_ICON_V="${START_WINE_PATH}/data/img/launcher_icons/vertical/RetroBat.jpg"
        export COPY_ICON_HEROES="${START_WINE_PATH}/data/img/launcher_icons/heroes/RetroBat.jpg"

        sw_shortcuts_autoinstall

        "$CRIER" -i "$(eval_gettext "Application installed successfully")"

    else

        "$CRIER" -i "$(eval_gettext "Application is installed")"

    fi

}

#################################   THE END   ##################################
