AkWebMasterV2

🚀 支持 91短视频、海角社区、SWAG、19JTV、糖心、海角APP、萝莉巴士等十几个站点哦~ 🚀

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name           AkWebMasterV2
// @namespace      https://ak-sky.com
// @version        v2.2.10
// @author         ak-sky
// @description    🚀 支持 91短视频、海角社区、SWAG、19JTV、糖心、海角APP、萝莉巴士等十几个站点哦~ 🚀
// @license        MIT
// @homepage       https://ak-sky.com
// @supportURL     https://ak-sky.com
// @icon           https://store.ak-sky.com/akWebMaster/akwm.ico
// @include        https://*.h.*j*.*/home
// @include        https://*h*j*.*/home
// @include        https://hai*.top/*
// @include        *://www.loibox*.top/*
// @include        *://www.loibus*.top/*
// @include        *://www.loibus*.xyz/*
// @include        *://www.loibus.com/*
// @include        *://www.loiraft.com/*
// @include        *://www.loiship.com/*
// @include        *://www.loix.org/*
// @include        *://loix.org/*
// @include        https://*txh*.com/*
// @match          https://haijiao.com/*
// @match          https://www.haijiao.com/*
// @match          *://*/post/details*
// @match          https://p1.lsqykbvl.com/*
// @match          https://p5.fkdadqjju.cc*
// @match          https://19jtv.com/*
// @match          https://javhd.com/*
// @match          https://www.mdav.live/*
// @match          https://5ktmi048.com/*
// @match          https://p2.lxrzwdq.xyz/*
// @match          https://www.loiship.com/*
// @match          https://51fengliu.com/*
// @match          https://51fengliu3.com/*
// @match          https://pwa3.dsp11a.cc/*
// @match          https://pwa1.oyqwgpzi.xyz/*
// @match          https://lubosp.com/*
// @match          https://moso.monster/*
// ==/UserScript==
var __defProp = Object.defineProperty;

var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
    enumerable: true,
    configurable: true,
    writable: true,
    value: value
}) : obj[key] = value;

var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);

(function() {
    "use strict";
    function Jtv19Inject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!/category\/.*?\/\d+/.test(pathname)) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    const Config = {
        ApiURL: "https://webmaster.ak-sky.com",
        ServerAPI: "https://ak-sky.com/api"
    };
    function PhoenixAnalyze(req) {
        const reqURL = `${Config.ServerAPI}/v1/phoenix/analyze`;
        return fetch(reqURL, {
            method: "POST",
            headers: {
                "Content-Type": "application/json"
            },
            body: JSON.stringify(req)
        }).then(async response => {
            const data = await response.json();
            if (response.status !== 200) {
                throw data;
            }
            return data;
        });
    }
    class LocalStorage {
        static set(key2, value) {
            window.localStorage.setItem(key2, JSON.stringify(value));
        }
        static get(key2) {
            const value = window.localStorage.getItem(key2);
            if (!value) {
                return null;
            }
            try {
                return JSON.parse(value);
            } catch {
                return value;
            }
        }
        static remove(key2) {
            window.localStorage.removeItem(key2);
        }
    }
    class SessionStorage {
        static set(key2, value) {
            window.sessionStorage.setItem(key2, JSON.stringify(value));
        }
        static get(key2) {
            const value = window.sessionStorage.getItem(key2);
            if (!value) {
                return null;
            }
            try {
                return JSON.parse(value);
            } catch {
                return value;
            }
        }
        static remove(key2) {
            window.sessionStorage.removeItem(key2);
        }
    }
    const columnZhName = {
        qq: "QQ",
        wechat: "微信",
        telegram: "电报",
        yuNi: "与你号",
        phone: "电话",
        address: "地址",
        textConcat: "内容",
        description: "简介"
    };
    function FengLiu51Inject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!/\/show|guide|merchant|info|\/\d+\.html/.test(pathname)) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在详情页面中解析"
                });
                return;
            }
            const token = LocalStorage.get("akSkyUserToken");
            if (!token) {
                resolve({
                    openActivateToken: true
                });
                return;
            }
            let href = window.location.href;
            if (window.location.host === "51fengliu3.com") {
                const id = url.searchParams.get("id");
                const type = url.searchParams.get("type");
                switch (type) {
                  case "INFO":
                    href = `https://51fengliu.com/show/${id}.html`;
                    break;

                  case "STREET":
                    href = `https://51fengliu.com/guide/${id}.html`;
                    break;

                  case "MERCHANT":
                    href = `https://51fengliu.com/merchant/${id}.html`;
                    break;
                }
            }
            console.log(href);
            PhoenixAnalyze({
                token: token,
                targetURL: href
            }).then(reply => {
                const haveValueKeys = Object.keys(reply).filter(key2 => reply[key2]);
                const options = haveValueKeys.map(k => columnZhName[k]);
                const data = haveValueKeys.reduce((obj, key2) => {
                    obj[columnZhName[key2]] = reply[key2];
                    return obj;
                }, {});
                resolve({
                    segmented: {
                        options: options,
                        data: data
                    },
                    remindMsg: "⚠️ 请注意甄别信息真伪 ⚠️"
                });
            }).catch(err => {
                resolve({
                    failReason: err.msg
                });
            });
        });
    }
    function TMInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/movie/detail/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
    function getDefaultExportFromCjs(x) {
        return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
    }
    function getAugmentedNamespace(n) {
        if (n.__esModule) return n;
        var f = n.default;
        if (typeof f == "function") {
            var a = function a2() {
                if (this instanceof a2) {
                    return Reflect.construct(f, arguments, this.constructor);
                }
                return f.apply(this, arguments);
            };
            a.prototype = f.prototype;
        } else a = {};
        Object.defineProperty(a, "__esModule", {
            value: true
        });
        Object.keys(n).forEach(function(k) {
            var d = Object.getOwnPropertyDescriptor(n, k);
            Object.defineProperty(a, k, d.get ? d : {
                enumerable: true,
                get: function() {
                    return n[k];
                }
            });
        });
        return a;
    }
    var aes = {
        exports: {}
    };
    function commonjsRequire(path) {
        throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
    }
    var core = {
        exports: {}
    };
    const __viteBrowserExternal = {};
    const __viteBrowserExternal$1 = Object.freeze(Object.defineProperty({
        __proto__: null,
        default: __viteBrowserExternal
    }, Symbol.toStringTag, {
        value: "Module"
    }));
    const require$$0 = getAugmentedNamespace(__viteBrowserExternal$1);
    var hasRequiredCore;
    function requireCore() {
        if (hasRequiredCore) return core.exports;
        hasRequiredCore = 1;
        (function(module, exports) {
            (function(root, factory) {
                {
                    module.exports = factory();
                }
            })(commonjsGlobal, function() {
                var CryptoJS = CryptoJS || function(Math2, undefined$1) {
                    var crypto;
                    if (typeof window !== "undefined" && window.crypto) {
                        crypto = window.crypto;
                    }
                    if (typeof self !== "undefined" && self.crypto) {
                        crypto = self.crypto;
                    }
                    if (typeof globalThis !== "undefined" && globalThis.crypto) {
                        crypto = globalThis.crypto;
                    }
                    if (!crypto && typeof window !== "undefined" && window.msCrypto) {
                        crypto = window.msCrypto;
                    }
                    if (!crypto && typeof commonjsGlobal !== "undefined" && commonjsGlobal.crypto) {
                        crypto = commonjsGlobal.crypto;
                    }
                    if (!crypto && typeof commonjsRequire === "function") {
                        try {
                            crypto = require$$0;
                        } catch (err) {}
                    }
                    var cryptoSecureRandomInt = function() {
                        if (crypto) {
                            if (typeof crypto.getRandomValues === "function") {
                                try {
                                    return crypto.getRandomValues(new Uint32Array(1))[0];
                                } catch (err) {}
                            }
                            if (typeof crypto.randomBytes === "function") {
                                try {
                                    return crypto.randomBytes(4).readInt32LE();
                                } catch (err) {}
                            }
                        }
                        throw new Error("Native crypto module could not be used to get secure random number.");
                    };
                    var create = Object.create || function() {
                        function F() {}
                        return function(obj) {
                            var subtype;
                            F.prototype = obj;
                            subtype = new F;
                            F.prototype = null;
                            return subtype;
                        };
                    }();
                    var C = {};
                    var C_lib = C.lib = {};
                    var Base = C_lib.Base = function() {
                        return {
                            extend: function(overrides) {
                                var subtype = create(this);
                                if (overrides) {
                                    subtype.mixIn(overrides);
                                }
                                if (!subtype.hasOwnProperty("init") || this.init === subtype.init) {
                                    subtype.init = function() {
                                        subtype.$super.init.apply(this, arguments);
                                    };
                                }
                                subtype.init.prototype = subtype;
                                subtype.$super = this;
                                return subtype;
                            },
                            create: function() {
                                var instance = this.extend();
                                instance.init.apply(instance, arguments);
                                return instance;
                            },
                            init: function() {},
                            mixIn: function(properties) {
                                for (var propertyName in properties) {
                                    if (properties.hasOwnProperty(propertyName)) {
                                        this[propertyName] = properties[propertyName];
                                    }
                                }
                                if (properties.hasOwnProperty("toString")) {
                                    this.toString = properties.toString;
                                }
                            },
                            clone: function() {
                                return this.init.prototype.extend(this);
                            }
                        };
                    }();
                    var WordArray = C_lib.WordArray = Base.extend({
                        init: function(words, sigBytes) {
                            words = this.words = words || [];
                            if (sigBytes != undefined$1) {
                                this.sigBytes = sigBytes;
                            } else {
                                this.sigBytes = words.length * 4;
                            }
                        },
                        toString: function(encoder) {
                            return (encoder || Hex2).stringify(this);
                        },
                        concat: function(wordArray) {
                            var thisWords = this.words;
                            var thatWords = wordArray.words;
                            var thisSigBytes = this.sigBytes;
                            var thatSigBytes = wordArray.sigBytes;
                            this.clamp();
                            if (thisSigBytes % 4) {
                                for (var i = 0; i < thatSigBytes; i++) {
                                    var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                                    thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;
                                }
                            } else {
                                for (var j = 0; j < thatSigBytes; j += 4) {
                                    thisWords[thisSigBytes + j >>> 2] = thatWords[j >>> 2];
                                }
                            }
                            this.sigBytes += thatSigBytes;
                            return this;
                        },
                        clamp: function() {
                            var words = this.words;
                            var sigBytes = this.sigBytes;
                            words[sigBytes >>> 2] &= 4294967295 << 32 - sigBytes % 4 * 8;
                            words.length = Math2.ceil(sigBytes / 4);
                        },
                        clone: function() {
                            var clone = Base.clone.call(this);
                            clone.words = this.words.slice(0);
                            return clone;
                        },
                        random: function(nBytes) {
                            var words = [];
                            for (var i = 0; i < nBytes; i += 4) {
                                words.push(cryptoSecureRandomInt());
                            }
                            return new WordArray.init(words, nBytes);
                        }
                    });
                    var C_enc = C.enc = {};
                    var Hex2 = C_enc.Hex = {
                        stringify: function(wordArray) {
                            var words = wordArray.words;
                            var sigBytes = wordArray.sigBytes;
                            var hexChars = [];
                            for (var i = 0; i < sigBytes; i++) {
                                var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                                hexChars.push((bite >>> 4).toString(16));
                                hexChars.push((bite & 15).toString(16));
                            }
                            return hexChars.join("");
                        },
                        parse: function(hexStr) {
                            var hexStrLength = hexStr.length;
                            var words = [];
                            for (var i = 0; i < hexStrLength; i += 2) {
                                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;
                            }
                            return new WordArray.init(words, hexStrLength / 2);
                        }
                    };
                    var Latin1 = C_enc.Latin1 = {
                        stringify: function(wordArray) {
                            var words = wordArray.words;
                            var sigBytes = wordArray.sigBytes;
                            var latin1Chars = [];
                            for (var i = 0; i < sigBytes; i++) {
                                var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                                latin1Chars.push(String.fromCharCode(bite));
                            }
                            return latin1Chars.join("");
                        },
                        parse: function(latin1Str) {
                            var latin1StrLength = latin1Str.length;
                            var words = [];
                            for (var i = 0; i < latin1StrLength; i++) {
                                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 255) << 24 - i % 4 * 8;
                            }
                            return new WordArray.init(words, latin1StrLength);
                        }
                    };
                    var Utf82 = C_enc.Utf8 = {
                        stringify: function(wordArray) {
                            try {
                                return decodeURIComponent(escape(Latin1.stringify(wordArray)));
                            } catch (e) {
                                throw new Error("Malformed UTF-8 data");
                            }
                        },
                        parse: function(utf8Str) {
                            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
                        }
                    };
                    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
                        reset: function() {
                            this._data = new WordArray.init;
                            this._nDataBytes = 0;
                        },
                        _append: function(data) {
                            if (typeof data == "string") {
                                data = Utf82.parse(data);
                            }
                            this._data.concat(data);
                            this._nDataBytes += data.sigBytes;
                        },
                        _process: function(doFlush) {
                            var processedWords;
                            var data = this._data;
                            var dataWords = data.words;
                            var dataSigBytes = data.sigBytes;
                            var blockSize = this.blockSize;
                            var blockSizeBytes = blockSize * 4;
                            var nBlocksReady = dataSigBytes / blockSizeBytes;
                            if (doFlush) {
                                nBlocksReady = Math2.ceil(nBlocksReady);
                            } else {
                                nBlocksReady = Math2.max((nBlocksReady | 0) - this._minBufferSize, 0);
                            }
                            var nWordsReady = nBlocksReady * blockSize;
                            var nBytesReady = Math2.min(nWordsReady * 4, dataSigBytes);
                            if (nWordsReady) {
                                for (var offset = 0; offset < nWordsReady; offset += blockSize) {
                                    this._doProcessBlock(dataWords, offset);
                                }
                                processedWords = dataWords.splice(0, nWordsReady);
                                data.sigBytes -= nBytesReady;
                            }
                            return new WordArray.init(processedWords, nBytesReady);
                        },
                        clone: function() {
                            var clone = Base.clone.call(this);
                            clone._data = this._data.clone();
                            return clone;
                        },
                        _minBufferSize: 0
                    });
                    C_lib.Hasher = BufferedBlockAlgorithm.extend({
                        cfg: Base.extend(),
                        init: function(cfg) {
                            this.cfg = this.cfg.extend(cfg);
                            this.reset();
                        },
                        reset: function() {
                            BufferedBlockAlgorithm.reset.call(this);
                            this._doReset();
                        },
                        update: function(messageUpdate) {
                            this._append(messageUpdate);
                            this._process();
                            return this;
                        },
                        finalize: function(messageUpdate) {
                            if (messageUpdate) {
                                this._append(messageUpdate);
                            }
                            var hash = this._doFinalize();
                            return hash;
                        },
                        blockSize: 512 / 32,
                        _createHelper: function(hasher) {
                            return function(message, cfg) {
                                return new hasher.init(cfg).finalize(message);
                            };
                        },
                        _createHmacHelper: function(hasher) {
                            return function(message, key2) {
                                return new C_algo.HMAC.init(hasher, key2).finalize(message);
                            };
                        }
                    });
                    var C_algo = C.algo = {};
                    return C;
                }(Math);
                return CryptoJS;
            });
        })(core);
        return core.exports;
    }
    var encBase64 = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory) {
            {
                module.exports = factory(requireCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            (function() {
                var C = CryptoJS;
                var C_lib = C.lib;
                var WordArray = C_lib.WordArray;
                var C_enc = C.enc;
                C_enc.Base64 = {
                    stringify: function(wordArray) {
                        var words = wordArray.words;
                        var sigBytes = wordArray.sigBytes;
                        var map = this._map;
                        wordArray.clamp();
                        var base64Chars = [];
                        for (var i = 0; i < sigBytes; i += 3) {
                            var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                            var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 255;
                            var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 255;
                            var triplet = byte1 << 16 | byte2 << 8 | byte3;
                            for (var j = 0; j < 4 && i + j * .75 < sigBytes; j++) {
                                base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 63));
                            }
                        }
                        var paddingChar = map.charAt(64);
                        if (paddingChar) {
                            while (base64Chars.length % 4) {
                                base64Chars.push(paddingChar);
                            }
                        }
                        return base64Chars.join("");
                    },
                    parse: function(base64Str) {
                        var base64StrLength = base64Str.length;
                        var map = this._map;
                        var reverseMap = this._reverseMap;
                        if (!reverseMap) {
                            reverseMap = this._reverseMap = [];
                            for (var j = 0; j < map.length; j++) {
                                reverseMap[map.charCodeAt(j)] = j;
                            }
                        }
                        var paddingChar = map.charAt(64);
                        if (paddingChar) {
                            var paddingIndex = base64Str.indexOf(paddingChar);
                            if (paddingIndex !== -1) {
                                base64StrLength = paddingIndex;
                            }
                        }
                        return parseLoop(base64Str, base64StrLength, reverseMap);
                    },
                    _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
                };
                function parseLoop(base64Str, base64StrLength, reverseMap) {
                    var words = [];
                    var nBytes = 0;
                    for (var i = 0; i < base64StrLength; i++) {
                        if (i % 4) {
                            var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;
                            var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;
                            var bitsCombined = bits1 | bits2;
                            words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;
                            nBytes++;
                        }
                    }
                    return WordArray.create(words, nBytes);
                }
            })();
            return CryptoJS.enc.Base64;
        });
    })(encBase64);
    var encBase64Exports = encBase64.exports;
    const Base64 = getDefaultExportFromCjs(encBase64Exports);
    var md5 = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory) {
            {
                module.exports = factory(requireCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            (function(Math2) {
                var C = CryptoJS;
                var C_lib = C.lib;
                var WordArray = C_lib.WordArray;
                var Hasher = C_lib.Hasher;
                var C_algo = C.algo;
                var T = [];
                (function() {
                    for (var i = 0; i < 64; i++) {
                        T[i] = Math2.abs(Math2.sin(i + 1)) * 4294967296 | 0;
                    }
                })();
                var MD52 = C_algo.MD5 = Hasher.extend({
                    _doReset: function() {
                        this._hash = new WordArray.init([ 1732584193, 4023233417, 2562383102, 271733878 ]);
                    },
                    _doProcessBlock: function(M, offset) {
                        for (var i = 0; i < 16; i++) {
                            var offset_i = offset + i;
                            var M_offset_i = M[offset_i];
                            M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 16711935 | (M_offset_i << 24 | M_offset_i >>> 8) & 4278255360;
                        }
                        var H = this._hash.words;
                        var M_offset_0 = M[offset + 0];
                        var M_offset_1 = M[offset + 1];
                        var M_offset_2 = M[offset + 2];
                        var M_offset_3 = M[offset + 3];
                        var M_offset_4 = M[offset + 4];
                        var M_offset_5 = M[offset + 5];
                        var M_offset_6 = M[offset + 6];
                        var M_offset_7 = M[offset + 7];
                        var M_offset_8 = M[offset + 8];
                        var M_offset_9 = M[offset + 9];
                        var M_offset_10 = M[offset + 10];
                        var M_offset_11 = M[offset + 11];
                        var M_offset_12 = M[offset + 12];
                        var M_offset_13 = M[offset + 13];
                        var M_offset_14 = M[offset + 14];
                        var M_offset_15 = M[offset + 15];
                        var a = H[0];
                        var b = H[1];
                        var c = H[2];
                        var d = H[3];
                        a = FF(a, b, c, d, M_offset_0, 7, T[0]);
                        d = FF(d, a, b, c, M_offset_1, 12, T[1]);
                        c = FF(c, d, a, b, M_offset_2, 17, T[2]);
                        b = FF(b, c, d, a, M_offset_3, 22, T[3]);
                        a = FF(a, b, c, d, M_offset_4, 7, T[4]);
                        d = FF(d, a, b, c, M_offset_5, 12, T[5]);
                        c = FF(c, d, a, b, M_offset_6, 17, T[6]);
                        b = FF(b, c, d, a, M_offset_7, 22, T[7]);
                        a = FF(a, b, c, d, M_offset_8, 7, T[8]);
                        d = FF(d, a, b, c, M_offset_9, 12, T[9]);
                        c = FF(c, d, a, b, M_offset_10, 17, T[10]);
                        b = FF(b, c, d, a, M_offset_11, 22, T[11]);
                        a = FF(a, b, c, d, M_offset_12, 7, T[12]);
                        d = FF(d, a, b, c, M_offset_13, 12, T[13]);
                        c = FF(c, d, a, b, M_offset_14, 17, T[14]);
                        b = FF(b, c, d, a, M_offset_15, 22, T[15]);
                        a = GG(a, b, c, d, M_offset_1, 5, T[16]);
                        d = GG(d, a, b, c, M_offset_6, 9, T[17]);
                        c = GG(c, d, a, b, M_offset_11, 14, T[18]);
                        b = GG(b, c, d, a, M_offset_0, 20, T[19]);
                        a = GG(a, b, c, d, M_offset_5, 5, T[20]);
                        d = GG(d, a, b, c, M_offset_10, 9, T[21]);
                        c = GG(c, d, a, b, M_offset_15, 14, T[22]);
                        b = GG(b, c, d, a, M_offset_4, 20, T[23]);
                        a = GG(a, b, c, d, M_offset_9, 5, T[24]);
                        d = GG(d, a, b, c, M_offset_14, 9, T[25]);
                        c = GG(c, d, a, b, M_offset_3, 14, T[26]);
                        b = GG(b, c, d, a, M_offset_8, 20, T[27]);
                        a = GG(a, b, c, d, M_offset_13, 5, T[28]);
                        d = GG(d, a, b, c, M_offset_2, 9, T[29]);
                        c = GG(c, d, a, b, M_offset_7, 14, T[30]);
                        b = GG(b, c, d, a, M_offset_12, 20, T[31]);
                        a = HH(a, b, c, d, M_offset_5, 4, T[32]);
                        d = HH(d, a, b, c, M_offset_8, 11, T[33]);
                        c = HH(c, d, a, b, M_offset_11, 16, T[34]);
                        b = HH(b, c, d, a, M_offset_14, 23, T[35]);
                        a = HH(a, b, c, d, M_offset_1, 4, T[36]);
                        d = HH(d, a, b, c, M_offset_4, 11, T[37]);
                        c = HH(c, d, a, b, M_offset_7, 16, T[38]);
                        b = HH(b, c, d, a, M_offset_10, 23, T[39]);
                        a = HH(a, b, c, d, M_offset_13, 4, T[40]);
                        d = HH(d, a, b, c, M_offset_0, 11, T[41]);
                        c = HH(c, d, a, b, M_offset_3, 16, T[42]);
                        b = HH(b, c, d, a, M_offset_6, 23, T[43]);
                        a = HH(a, b, c, d, M_offset_9, 4, T[44]);
                        d = HH(d, a, b, c, M_offset_12, 11, T[45]);
                        c = HH(c, d, a, b, M_offset_15, 16, T[46]);
                        b = HH(b, c, d, a, M_offset_2, 23, T[47]);
                        a = II(a, b, c, d, M_offset_0, 6, T[48]);
                        d = II(d, a, b, c, M_offset_7, 10, T[49]);
                        c = II(c, d, a, b, M_offset_14, 15, T[50]);
                        b = II(b, c, d, a, M_offset_5, 21, T[51]);
                        a = II(a, b, c, d, M_offset_12, 6, T[52]);
                        d = II(d, a, b, c, M_offset_3, 10, T[53]);
                        c = II(c, d, a, b, M_offset_10, 15, T[54]);
                        b = II(b, c, d, a, M_offset_1, 21, T[55]);
                        a = II(a, b, c, d, M_offset_8, 6, T[56]);
                        d = II(d, a, b, c, M_offset_15, 10, T[57]);
                        c = II(c, d, a, b, M_offset_6, 15, T[58]);
                        b = II(b, c, d, a, M_offset_13, 21, T[59]);
                        a = II(a, b, c, d, M_offset_4, 6, T[60]);
                        d = II(d, a, b, c, M_offset_11, 10, T[61]);
                        c = II(c, d, a, b, M_offset_2, 15, T[62]);
                        b = II(b, c, d, a, M_offset_9, 21, T[63]);
                        H[0] = H[0] + a | 0;
                        H[1] = H[1] + b | 0;
                        H[2] = H[2] + c | 0;
                        H[3] = H[3] + d | 0;
                    },
                    _doFinalize: function() {
                        var data = this._data;
                        var dataWords = data.words;
                        var nBitsTotal = this._nDataBytes * 8;
                        var nBitsLeft = data.sigBytes * 8;
                        dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32;
                        var nBitsTotalH = Math2.floor(nBitsTotal / 4294967296);
                        var nBitsTotalL = nBitsTotal;
                        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 16711935 | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 4278255360;
                        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 16711935 | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 4278255360;
                        data.sigBytes = (dataWords.length + 1) * 4;
                        this._process();
                        var hash = this._hash;
                        var H = hash.words;
                        for (var i = 0; i < 4; i++) {
                            var H_i = H[i];
                            H[i] = (H_i << 8 | H_i >>> 24) & 16711935 | (H_i << 24 | H_i >>> 8) & 4278255360;
                        }
                        return hash;
                    },
                    clone: function() {
                        var clone = Hasher.clone.call(this);
                        clone._hash = this._hash.clone();
                        return clone;
                    }
                });
                function FF(a, b, c, d, x, s, t) {
                    var n = a + (b & c | ~b & d) + x + t;
                    return (n << s | n >>> 32 - s) + b;
                }
                function GG(a, b, c, d, x, s, t) {
                    var n = a + (b & d | c & ~d) + x + t;
                    return (n << s | n >>> 32 - s) + b;
                }
                function HH(a, b, c, d, x, s, t) {
                    var n = a + (b ^ c ^ d) + x + t;
                    return (n << s | n >>> 32 - s) + b;
                }
                function II(a, b, c, d, x, s, t) {
                    var n = a + (c ^ (b | ~d)) + x + t;
                    return (n << s | n >>> 32 - s) + b;
                }
                C.MD5 = Hasher._createHelper(MD52);
                C.HmacMD5 = Hasher._createHmacHelper(MD52);
            })(Math);
            return CryptoJS.MD5;
        });
    })(md5);
    var md5Exports = md5.exports;
    const MD5 = getDefaultExportFromCjs(md5Exports);
    var evpkdf = {
        exports: {}
    };
    var sha1 = {
        exports: {}
    };
    var hasRequiredSha1;
    function requireSha1() {
        if (hasRequiredSha1) return sha1.exports;
        hasRequiredSha1 = 1;
        (function(module, exports) {
            (function(root, factory) {
                {
                    module.exports = factory(requireCore());
                }
            })(commonjsGlobal, function(CryptoJS) {
                (function() {
                    var C = CryptoJS;
                    var C_lib = C.lib;
                    var WordArray = C_lib.WordArray;
                    var Hasher = C_lib.Hasher;
                    var C_algo = C.algo;
                    var W = [];
                    var SHA1 = C_algo.SHA1 = Hasher.extend({
                        _doReset: function() {
                            this._hash = new WordArray.init([ 1732584193, 4023233417, 2562383102, 271733878, 3285377520 ]);
                        },
                        _doProcessBlock: function(M, offset) {
                            var H = this._hash.words;
                            var a = H[0];
                            var b = H[1];
                            var c = H[2];
                            var d = H[3];
                            var e = H[4];
                            for (var i = 0; i < 80; i++) {
                                if (i < 16) {
                                    W[i] = M[offset + i] | 0;
                                } else {
                                    var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
                                    W[i] = n << 1 | n >>> 31;
                                }
                                var t = (a << 5 | a >>> 27) + e + W[i];
                                if (i < 20) {
                                    t += (b & c | ~b & d) + 1518500249;
                                } else if (i < 40) {
                                    t += (b ^ c ^ d) + 1859775393;
                                } else if (i < 60) {
                                    t += (b & c | b & d | c & d) - 1894007588;
                                } else {
                                    t += (b ^ c ^ d) - 899497514;
                                }
                                e = d;
                                d = c;
                                c = b << 30 | b >>> 2;
                                b = a;
                                a = t;
                            }
                            H[0] = H[0] + a | 0;
                            H[1] = H[1] + b | 0;
                            H[2] = H[2] + c | 0;
                            H[3] = H[3] + d | 0;
                            H[4] = H[4] + e | 0;
                        },
                        _doFinalize: function() {
                            var data = this._data;
                            var dataWords = data.words;
                            var nBitsTotal = this._nDataBytes * 8;
                            var nBitsLeft = data.sigBytes * 8;
                            dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32;
                            dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 4294967296);
                            dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;
                            data.sigBytes = dataWords.length * 4;
                            this._process();
                            return this._hash;
                        },
                        clone: function() {
                            var clone = Hasher.clone.call(this);
                            clone._hash = this._hash.clone();
                            return clone;
                        }
                    });
                    C.SHA1 = Hasher._createHelper(SHA1);
                    C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
                })();
                return CryptoJS.SHA1;
            });
        })(sha1);
        return sha1.exports;
    }
    var hmac = {
        exports: {}
    };
    var hasRequiredHmac;
    function requireHmac() {
        if (hasRequiredHmac) return hmac.exports;
        hasRequiredHmac = 1;
        (function(module, exports) {
            (function(root, factory) {
                {
                    module.exports = factory(requireCore());
                }
            })(commonjsGlobal, function(CryptoJS) {
                (function() {
                    var C = CryptoJS;
                    var C_lib = C.lib;
                    var Base = C_lib.Base;
                    var C_enc = C.enc;
                    var Utf82 = C_enc.Utf8;
                    var C_algo = C.algo;
                    C_algo.HMAC = Base.extend({
                        init: function(hasher, key2) {
                            hasher = this._hasher = new hasher.init;
                            if (typeof key2 == "string") {
                                key2 = Utf82.parse(key2);
                            }
                            var hasherBlockSize = hasher.blockSize;
                            var hasherBlockSizeBytes = hasherBlockSize * 4;
                            if (key2.sigBytes > hasherBlockSizeBytes) {
                                key2 = hasher.finalize(key2);
                            }
                            key2.clamp();
                            var oKey = this._oKey = key2.clone();
                            var iKey = this._iKey = key2.clone();
                            var oKeyWords = oKey.words;
                            var iKeyWords = iKey.words;
                            for (var i = 0; i < hasherBlockSize; i++) {
                                oKeyWords[i] ^= 1549556828;
                                iKeyWords[i] ^= 909522486;
                            }
                            oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
                            this.reset();
                        },
                        reset: function() {
                            var hasher = this._hasher;
                            hasher.reset();
                            hasher.update(this._iKey);
                        },
                        update: function(messageUpdate) {
                            this._hasher.update(messageUpdate);
                            return this;
                        },
                        finalize: function(messageUpdate) {
                            var hasher = this._hasher;
                            var innerHash = hasher.finalize(messageUpdate);
                            hasher.reset();
                            var hmac2 = hasher.finalize(this._oKey.clone().concat(innerHash));
                            return hmac2;
                        }
                    });
                })();
            });
        })(hmac);
        return hmac.exports;
    }
    var hasRequiredEvpkdf;
    function requireEvpkdf() {
        if (hasRequiredEvpkdf) return evpkdf.exports;
        hasRequiredEvpkdf = 1;
        (function(module, exports) {
            (function(root, factory, undef) {
                {
                    module.exports = factory(requireCore(), requireSha1(), requireHmac());
                }
            })(commonjsGlobal, function(CryptoJS) {
                (function() {
                    var C = CryptoJS;
                    var C_lib = C.lib;
                    var Base = C_lib.Base;
                    var WordArray = C_lib.WordArray;
                    var C_algo = C.algo;
                    var MD52 = C_algo.MD5;
                    var EvpKDF = C_algo.EvpKDF = Base.extend({
                        cfg: Base.extend({
                            keySize: 128 / 32,
                            hasher: MD52,
                            iterations: 1
                        }),
                        init: function(cfg) {
                            this.cfg = this.cfg.extend(cfg);
                        },
                        compute: function(password, salt) {
                            var block;
                            var cfg = this.cfg;
                            var hasher = cfg.hasher.create();
                            var derivedKey = WordArray.create();
                            var derivedKeyWords = derivedKey.words;
                            var keySize = cfg.keySize;
                            var iterations = cfg.iterations;
                            while (derivedKeyWords.length < keySize) {
                                if (block) {
                                    hasher.update(block);
                                }
                                block = hasher.update(password).finalize(salt);
                                hasher.reset();
                                for (var i = 1; i < iterations; i++) {
                                    block = hasher.finalize(block);
                                    hasher.reset();
                                }
                                derivedKey.concat(block);
                            }
                            derivedKey.sigBytes = keySize * 4;
                            return derivedKey;
                        }
                    });
                    C.EvpKDF = function(password, salt, cfg) {
                        return EvpKDF.create(cfg).compute(password, salt);
                    };
                })();
                return CryptoJS.EvpKDF;
            });
        })(evpkdf);
        return evpkdf.exports;
    }
    var cipherCore = {
        exports: {}
    };
    var hasRequiredCipherCore;
    function requireCipherCore() {
        if (hasRequiredCipherCore) return cipherCore.exports;
        hasRequiredCipherCore = 1;
        (function(module, exports) {
            (function(root, factory, undef) {
                {
                    module.exports = factory(requireCore(), requireEvpkdf());
                }
            })(commonjsGlobal, function(CryptoJS) {
                CryptoJS.lib.Cipher || function(undefined$1) {
                    var C = CryptoJS;
                    var C_lib = C.lib;
                    var Base = C_lib.Base;
                    var WordArray = C_lib.WordArray;
                    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
                    var C_enc = C.enc;
                    var Base642 = C_enc.Base64;
                    var C_algo = C.algo;
                    var EvpKDF = C_algo.EvpKDF;
                    var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
                        cfg: Base.extend(),
                        createEncryptor: function(key2, cfg) {
                            return this.create(this._ENC_XFORM_MODE, key2, cfg);
                        },
                        createDecryptor: function(key2, cfg) {
                            return this.create(this._DEC_XFORM_MODE, key2, cfg);
                        },
                        init: function(xformMode, key2, cfg) {
                            this.cfg = this.cfg.extend(cfg);
                            this._xformMode = xformMode;
                            this._key = key2;
                            this.reset();
                        },
                        reset: function() {
                            BufferedBlockAlgorithm.reset.call(this);
                            this._doReset();
                        },
                        process: function(dataUpdate) {
                            this._append(dataUpdate);
                            return this._process();
                        },
                        finalize: function(dataUpdate) {
                            if (dataUpdate) {
                                this._append(dataUpdate);
                            }
                            var finalProcessedData = this._doFinalize();
                            return finalProcessedData;
                        },
                        keySize: 128 / 32,
                        ivSize: 128 / 32,
                        _ENC_XFORM_MODE: 1,
                        _DEC_XFORM_MODE: 2,
                        _createHelper: function() {
                            function selectCipherStrategy(key2) {
                                if (typeof key2 == "string") {
                                    return PasswordBasedCipher;
                                } else {
                                    return SerializableCipher;
                                }
                            }
                            return function(cipher) {
                                return {
                                    encrypt: function(message, key2, cfg) {
                                        return selectCipherStrategy(key2).encrypt(cipher, message, key2, cfg);
                                    },
                                    decrypt: function(ciphertext, key2, cfg) {
                                        return selectCipherStrategy(key2).decrypt(cipher, ciphertext, key2, cfg);
                                    }
                                };
                            };
                        }()
                    });
                    C_lib.StreamCipher = Cipher.extend({
                        _doFinalize: function() {
                            var finalProcessedBlocks = this._process(true);
                            return finalProcessedBlocks;
                        },
                        blockSize: 1
                    });
                    var C_mode = C.mode = {};
                    var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
                        createEncryptor: function(cipher, iv2) {
                            return this.Encryptor.create(cipher, iv2);
                        },
                        createDecryptor: function(cipher, iv2) {
                            return this.Decryptor.create(cipher, iv2);
                        },
                        init: function(cipher, iv2) {
                            this._cipher = cipher;
                            this._iv = iv2;
                        }
                    });
                    var CBC = C_mode.CBC = function() {
                        var CBC2 = BlockCipherMode.extend();
                        CBC2.Encryptor = CBC2.extend({
                            processBlock: function(words, offset) {
                                var cipher = this._cipher;
                                var blockSize = cipher.blockSize;
                                xorBlock.call(this, words, offset, blockSize);
                                cipher.encryptBlock(words, offset);
                                this._prevBlock = words.slice(offset, offset + blockSize);
                            }
                        });
                        CBC2.Decryptor = CBC2.extend({
                            processBlock: function(words, offset) {
                                var cipher = this._cipher;
                                var blockSize = cipher.blockSize;
                                var thisBlock = words.slice(offset, offset + blockSize);
                                cipher.decryptBlock(words, offset);
                                xorBlock.call(this, words, offset, blockSize);
                                this._prevBlock = thisBlock;
                            }
                        });
                        function xorBlock(words, offset, blockSize) {
                            var block;
                            var iv2 = this._iv;
                            if (iv2) {
                                block = iv2;
                                this._iv = undefined$1;
                            } else {
                                block = this._prevBlock;
                            }
                            for (var i = 0; i < blockSize; i++) {
                                words[offset + i] ^= block[i];
                            }
                        }
                        return CBC2;
                    }();
                    var C_pad = C.pad = {};
                    var Pkcs72 = C_pad.Pkcs7 = {
                        pad: function(data, blockSize) {
                            var blockSizeBytes = blockSize * 4;
                            var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
                            var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes;
                            var paddingWords = [];
                            for (var i = 0; i < nPaddingBytes; i += 4) {
                                paddingWords.push(paddingWord);
                            }
                            var padding = WordArray.create(paddingWords, nPaddingBytes);
                            data.concat(padding);
                        },
                        unpad: function(data) {
                            var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 255;
                            data.sigBytes -= nPaddingBytes;
                        }
                    };
                    C_lib.BlockCipher = Cipher.extend({
                        cfg: Cipher.cfg.extend({
                            mode: CBC,
                            padding: Pkcs72
                        }),
                        reset: function() {
                            var modeCreator;
                            Cipher.reset.call(this);
                            var cfg = this.cfg;
                            var iv2 = cfg.iv;
                            var mode = cfg.mode;
                            if (this._xformMode == this._ENC_XFORM_MODE) {
                                modeCreator = mode.createEncryptor;
                            } else {
                                modeCreator = mode.createDecryptor;
                                this._minBufferSize = 1;
                            }
                            if (this._mode && this._mode.__creator == modeCreator) {
                                this._mode.init(this, iv2 && iv2.words);
                            } else {
                                this._mode = modeCreator.call(mode, this, iv2 && iv2.words);
                                this._mode.__creator = modeCreator;
                            }
                        },
                        _doProcessBlock: function(words, offset) {
                            this._mode.processBlock(words, offset);
                        },
                        _doFinalize: function() {
                            var finalProcessedBlocks;
                            var padding = this.cfg.padding;
                            if (this._xformMode == this._ENC_XFORM_MODE) {
                                padding.pad(this._data, this.blockSize);
                                finalProcessedBlocks = this._process(true);
                            } else {
                                finalProcessedBlocks = this._process(true);
                                padding.unpad(finalProcessedBlocks);
                            }
                            return finalProcessedBlocks;
                        },
                        blockSize: 128 / 32
                    });
                    var CipherParams = C_lib.CipherParams = Base.extend({
                        init: function(cipherParams) {
                            this.mixIn(cipherParams);
                        },
                        toString: function(formatter) {
                            return (formatter || this.formatter).stringify(this);
                        }
                    });
                    var C_format = C.format = {};
                    var OpenSSLFormatter = C_format.OpenSSL = {
                        stringify: function(cipherParams) {
                            var wordArray;
                            var ciphertext = cipherParams.ciphertext;
                            var salt = cipherParams.salt;
                            if (salt) {
                                wordArray = WordArray.create([ 1398893684, 1701076831 ]).concat(salt).concat(ciphertext);
                            } else {
                                wordArray = ciphertext;
                            }
                            return wordArray.toString(Base642);
                        },
                        parse: function(openSSLStr) {
                            var salt;
                            var ciphertext = Base642.parse(openSSLStr);
                            var ciphertextWords = ciphertext.words;
                            if (ciphertextWords[0] == 1398893684 && ciphertextWords[1] == 1701076831) {
                                salt = WordArray.create(ciphertextWords.slice(2, 4));
                                ciphertextWords.splice(0, 4);
                                ciphertext.sigBytes -= 16;
                            }
                            return CipherParams.create({
                                ciphertext: ciphertext,
                                salt: salt
                            });
                        }
                    };
                    var SerializableCipher = C_lib.SerializableCipher = Base.extend({
                        cfg: Base.extend({
                            format: OpenSSLFormatter
                        }),
                        encrypt: function(cipher, message, key2, cfg) {
                            cfg = this.cfg.extend(cfg);
                            var encryptor = cipher.createEncryptor(key2, cfg);
                            var ciphertext = encryptor.finalize(message);
                            var cipherCfg = encryptor.cfg;
                            return CipherParams.create({
                                ciphertext: ciphertext,
                                key: key2,
                                iv: cipherCfg.iv,
                                algorithm: cipher,
                                mode: cipherCfg.mode,
                                padding: cipherCfg.padding,
                                blockSize: cipher.blockSize,
                                formatter: cfg.format
                            });
                        },
                        decrypt: function(cipher, ciphertext, key2, cfg) {
                            cfg = this.cfg.extend(cfg);
                            ciphertext = this._parse(ciphertext, cfg.format);
                            var plaintext = cipher.createDecryptor(key2, cfg).finalize(ciphertext.ciphertext);
                            return plaintext;
                        },
                        _parse: function(ciphertext, format) {
                            if (typeof ciphertext == "string") {
                                return format.parse(ciphertext, this);
                            } else {
                                return ciphertext;
                            }
                        }
                    });
                    var C_kdf = C.kdf = {};
                    var OpenSSLKdf = C_kdf.OpenSSL = {
                        execute: function(password, keySize, ivSize, salt, hasher) {
                            if (!salt) {
                                salt = WordArray.random(64 / 8);
                            }
                            if (!hasher) {
                                var key2 = EvpKDF.create({
                                    keySize: keySize + ivSize
                                }).compute(password, salt);
                            } else {
                                var key2 = EvpKDF.create({
                                    keySize: keySize + ivSize,
                                    hasher: hasher
                                }).compute(password, salt);
                            }
                            var iv2 = WordArray.create(key2.words.slice(keySize), ivSize * 4);
                            key2.sigBytes = keySize * 4;
                            return CipherParams.create({
                                key: key2,
                                iv: iv2,
                                salt: salt
                            });
                        }
                    };
                    var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
                        cfg: SerializableCipher.cfg.extend({
                            kdf: OpenSSLKdf
                        }),
                        encrypt: function(cipher, message, password, cfg) {
                            cfg = this.cfg.extend(cfg);
                            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);
                            cfg.iv = derivedParams.iv;
                            var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);
                            ciphertext.mixIn(derivedParams);
                            return ciphertext;
                        },
                        decrypt: function(cipher, ciphertext, password, cfg) {
                            cfg = this.cfg.extend(cfg);
                            ciphertext = this._parse(ciphertext, cfg.format);
                            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);
                            cfg.iv = derivedParams.iv;
                            var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);
                            return plaintext;
                        }
                    });
                }();
            });
        })(cipherCore);
        return cipherCore.exports;
    }
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), encBase64Exports, md5Exports, requireEvpkdf(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            (function() {
                var C = CryptoJS;
                var C_lib = C.lib;
                var BlockCipher = C_lib.BlockCipher;
                var C_algo = C.algo;
                var SBOX = [];
                var INV_SBOX = [];
                var SUB_MIX_0 = [];
                var SUB_MIX_1 = [];
                var SUB_MIX_2 = [];
                var SUB_MIX_3 = [];
                var INV_SUB_MIX_0 = [];
                var INV_SUB_MIX_1 = [];
                var INV_SUB_MIX_2 = [];
                var INV_SUB_MIX_3 = [];
                (function() {
                    var d = [];
                    for (var i = 0; i < 256; i++) {
                        if (i < 128) {
                            d[i] = i << 1;
                        } else {
                            d[i] = i << 1 ^ 283;
                        }
                    }
                    var x = 0;
                    var xi = 0;
                    for (var i = 0; i < 256; i++) {
                        var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;
                        sx = sx >>> 8 ^ sx & 255 ^ 99;
                        SBOX[x] = sx;
                        INV_SBOX[sx] = x;
                        var x2 = d[x];
                        var x4 = d[x2];
                        var x8 = d[x4];
                        var t = d[sx] * 257 ^ sx * 16843008;
                        SUB_MIX_0[x] = t << 24 | t >>> 8;
                        SUB_MIX_1[x] = t << 16 | t >>> 16;
                        SUB_MIX_2[x] = t << 8 | t >>> 24;
                        SUB_MIX_3[x] = t;
                        var t = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008;
                        INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;
                        INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;
                        INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;
                        INV_SUB_MIX_3[sx] = t;
                        if (!x) {
                            x = xi = 1;
                        } else {
                            x = x2 ^ d[d[d[x8 ^ x2]]];
                            xi ^= d[d[xi]];
                        }
                    }
                })();
                var RCON = [ 0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54 ];
                var AES2 = C_algo.AES = BlockCipher.extend({
                    _doReset: function() {
                        var t;
                        if (this._nRounds && this._keyPriorReset === this._key) {
                            return;
                        }
                        var key2 = this._keyPriorReset = this._key;
                        var keyWords = key2.words;
                        var keySize = key2.sigBytes / 4;
                        var nRounds = this._nRounds = keySize + 6;
                        var ksRows = (nRounds + 1) * 4;
                        var keySchedule = this._keySchedule = [];
                        for (var ksRow = 0; ksRow < ksRows; ksRow++) {
                            if (ksRow < keySize) {
                                keySchedule[ksRow] = keyWords[ksRow];
                            } else {
                                t = keySchedule[ksRow - 1];
                                if (!(ksRow % keySize)) {
                                    t = t << 8 | t >>> 24;
                                    t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255];
                                    t ^= RCON[ksRow / keySize | 0] << 24;
                                } else if (keySize > 6 && ksRow % keySize == 4) {
                                    t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255];
                                }
                                keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
                            }
                        }
                        var invKeySchedule = this._invKeySchedule = [];
                        for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
                            var ksRow = ksRows - invKsRow;
                            if (invKsRow % 4) {
                                var t = keySchedule[ksRow];
                            } else {
                                var t = keySchedule[ksRow - 4];
                            }
                            if (invKsRow < 4 || ksRow <= 4) {
                                invKeySchedule[invKsRow] = t;
                            } else {
                                invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 255]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 255]] ^ INV_SUB_MIX_3[SBOX[t & 255]];
                            }
                        }
                    },
                    encryptBlock: function(M, offset) {
                        this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
                    },
                    decryptBlock: function(M, offset) {
                        var t = M[offset + 1];
                        M[offset + 1] = M[offset + 3];
                        M[offset + 3] = t;
                        this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
                        var t = M[offset + 1];
                        M[offset + 1] = M[offset + 3];
                        M[offset + 3] = t;
                    },
                    _doCryptBlock: function(M, offset, keySchedule, SUB_MIX_02, SUB_MIX_12, SUB_MIX_22, SUB_MIX_32, SBOX2) {
                        var nRounds = this._nRounds;
                        var s0 = M[offset] ^ keySchedule[0];
                        var s1 = M[offset + 1] ^ keySchedule[1];
                        var s2 = M[offset + 2] ^ keySchedule[2];
                        var s3 = M[offset + 3] ^ keySchedule[3];
                        var ksRow = 4;
                        for (var round = 1; round < nRounds; round++) {
                            var t0 = SUB_MIX_02[s0 >>> 24] ^ SUB_MIX_12[s1 >>> 16 & 255] ^ SUB_MIX_22[s2 >>> 8 & 255] ^ SUB_MIX_32[s3 & 255] ^ keySchedule[ksRow++];
                            var t1 = SUB_MIX_02[s1 >>> 24] ^ SUB_MIX_12[s2 >>> 16 & 255] ^ SUB_MIX_22[s3 >>> 8 & 255] ^ SUB_MIX_32[s0 & 255] ^ keySchedule[ksRow++];
                            var t2 = SUB_MIX_02[s2 >>> 24] ^ SUB_MIX_12[s3 >>> 16 & 255] ^ SUB_MIX_22[s0 >>> 8 & 255] ^ SUB_MIX_32[s1 & 255] ^ keySchedule[ksRow++];
                            var t3 = SUB_MIX_02[s3 >>> 24] ^ SUB_MIX_12[s0 >>> 16 & 255] ^ SUB_MIX_22[s1 >>> 8 & 255] ^ SUB_MIX_32[s2 & 255] ^ keySchedule[ksRow++];
                            s0 = t0;
                            s1 = t1;
                            s2 = t2;
                            s3 = t3;
                        }
                        var t0 = (SBOX2[s0 >>> 24] << 24 | SBOX2[s1 >>> 16 & 255] << 16 | SBOX2[s2 >>> 8 & 255] << 8 | SBOX2[s3 & 255]) ^ keySchedule[ksRow++];
                        var t1 = (SBOX2[s1 >>> 24] << 24 | SBOX2[s2 >>> 16 & 255] << 16 | SBOX2[s3 >>> 8 & 255] << 8 | SBOX2[s0 & 255]) ^ keySchedule[ksRow++];
                        var t2 = (SBOX2[s2 >>> 24] << 24 | SBOX2[s3 >>> 16 & 255] << 16 | SBOX2[s0 >>> 8 & 255] << 8 | SBOX2[s1 & 255]) ^ keySchedule[ksRow++];
                        var t3 = (SBOX2[s3 >>> 24] << 24 | SBOX2[s0 >>> 16 & 255] << 16 | SBOX2[s1 >>> 8 & 255] << 8 | SBOX2[s2 & 255]) ^ keySchedule[ksRow++];
                        M[offset] = t0;
                        M[offset + 1] = t1;
                        M[offset + 2] = t2;
                        M[offset + 3] = t3;
                    },
                    keySize: 256 / 32
                });
                C.AES = BlockCipher._createHelper(AES2);
            })();
            return CryptoJS.AES;
        });
    })(aes);
    var aesExports = aes.exports;
    const AES = getDefaultExportFromCjs(aesExports);
    var encHex = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory) {
            {
                module.exports = factory(requireCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            return CryptoJS.enc.Hex;
        });
    })(encHex);
    var encHexExports = encHex.exports;
    const Hex = getDefaultExportFromCjs(encHexExports);
    var encUtf8 = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory) {
            {
                module.exports = factory(requireCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            return CryptoJS.enc.Utf8;
        });
    })(encUtf8);
    var encUtf8Exports = encUtf8.exports;
    const Utf8 = getDefaultExportFromCjs(encUtf8Exports);
    var coreExports = requireCore();
    const Core = getDefaultExportFromCjs(coreExports);
    var modeCfb = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            CryptoJS.mode.CFB = function() {
                var CFB2 = CryptoJS.lib.BlockCipherMode.extend();
                CFB2.Encryptor = CFB2.extend({
                    processBlock: function(words, offset) {
                        var cipher = this._cipher;
                        var blockSize = cipher.blockSize;
                        generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
                        this._prevBlock = words.slice(offset, offset + blockSize);
                    }
                });
                CFB2.Decryptor = CFB2.extend({
                    processBlock: function(words, offset) {
                        var cipher = this._cipher;
                        var blockSize = cipher.blockSize;
                        var thisBlock = words.slice(offset, offset + blockSize);
                        generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
                        this._prevBlock = thisBlock;
                    }
                });
                function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
                    var keystream;
                    var iv2 = this._iv;
                    if (iv2) {
                        keystream = iv2.slice(0);
                        this._iv = void 0;
                    } else {
                        keystream = this._prevBlock;
                    }
                    cipher.encryptBlock(keystream, 0);
                    for (var i = 0; i < blockSize; i++) {
                        words[offset + i] ^= keystream[i];
                    }
                }
                return CFB2;
            }();
            return CryptoJS.mode.CFB;
        });
    })(modeCfb);
    var modeCfbExports = modeCfb.exports;
    const CFBMode = getDefaultExportFromCjs(modeCfbExports);
    var modeEcb = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            CryptoJS.mode.ECB = function() {
                var ECB2 = CryptoJS.lib.BlockCipherMode.extend();
                ECB2.Encryptor = ECB2.extend({
                    processBlock: function(words, offset) {
                        this._cipher.encryptBlock(words, offset);
                    }
                });
                ECB2.Decryptor = ECB2.extend({
                    processBlock: function(words, offset) {
                        this._cipher.decryptBlock(words, offset);
                    }
                });
                return ECB2;
            }();
            return CryptoJS.mode.ECB;
        });
    })(modeEcb);
    var modeEcbExports = modeEcb.exports;
    const ECB = getDefaultExportFromCjs(modeEcbExports);
    var padNopadding = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            CryptoJS.pad.NoPadding = {
                pad: function() {},
                unpad: function() {}
            };
            return CryptoJS.pad.NoPadding;
        });
    })(padNopadding);
    var padNopaddingExports = padNopadding.exports;
    const NoPadding = getDefaultExportFromCjs(padNopaddingExports);
    var padPkcs7 = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            return CryptoJS.pad.Pkcs7;
        });
    })(padPkcs7);
    var padPkcs7Exports = padPkcs7.exports;
    const Pkcs7 = getDefaultExportFromCjs(padPkcs7Exports);
    function AesDecryptCBCPKCS7(encryptedData, key2, iv2) {
        const keyWordArray = Utf8.parse(key2);
        const ivWordArray = Utf8.parse(iv2);
        const decrypted = AES.decrypt(encryptedData, keyWordArray, {
            iv: ivWordArray,
            padding: Pkcs7
        });
        return decrypted.toString(Utf8);
    }
    class CFB {
        constructor(key2, iv2) {
            __publicField(this, "key");
            __publicField(this, "iv");
            this.key = Hex.parse(key2);
            this.iv = Hex.parse(iv2);
        }
        decrypt(cipherTextHex) {
            const cipherParams = Core.lib.CipherParams.create({
                ciphertext: Hex.parse(cipherTextHex)
            });
            const decrypted = AES.decrypt(cipherParams, this.key, {
                iv: this.iv,
                mode: CFBMode,
                padding: NoPadding
            });
            return decrypted.toString(Utf8);
        }
    }
    class ECBPkcs7 {
        constructor(key2) {
            __publicField(this, "key");
            const keyWordArray = Utf8.parse(key2);
            const byteLength = keyWordArray.sigBytes;
            if (byteLength !== 16 && byteLength !== 24 && byteLength !== 32) {
                throw new Error(`ECBPkcs7 key length must be 16/24/32 bytes, got ${byteLength}`);
            }
            this.key = keyWordArray;
        }
        encrypt(plainText) {
            const plainWordArray = Utf8.parse(plainText);
            const encrypted = AES.encrypt(plainWordArray, this.key, {
                mode: ECB,
                padding: Pkcs7
            });
            return encrypted.ciphertext.toString(Base64);
        }
        decrypt(cipherTextBase64) {
            const cipherParams = Core.lib.CipherParams.create({
                ciphertext: Base64.parse(cipherTextBase64)
            });
            const decrypted = AES.decrypt(cipherParams, this.key, {
                mode: ECB,
                padding: Pkcs7
            });
            return decrypted.toString(Utf8);
        }
    }
    const key = "6363383864646339333537666634363165303866303437616564656536393262";
    const iv = "65383932323563666262696d676b6375";
    const cfb = new CFB(key, iv);
    function decryptReqData$2(reqBody) {
        const dataMatch = reqBody.match(/data=([^&]+)/);
        const dataValue = dataMatch ? dataMatch[1] : null;
        if (!dataValue) {
            return null;
        }
        const decrypt2 = cfb.decrypt(dataValue);
        return JSON.parse(decrypt2);
    }
    function decryptRespData$2(respData) {
        const data = JSON.parse(respData);
        const decrypt2 = cfb.decrypt(data.data);
        return JSON.parse(decrypt2);
    }
    function hook(body, respData) {
        const reqData = decryptReqData$2(body);
        const code = reqData.code;
        const mod = reqData.mod;
        let canContinue = false;
        if (mod == "system" && code == "index") {
            canContinue = true;
        }
        if (mod == "index" && code == "home") {
            canContinue = true;
        }
        if (mod == "index" && code == "auth") {
            canContinue = true;
        }
        if (!canContinue) {
            return;
        }
        const resData = decryptRespData$2(respData);
        let playItems = [];
        if (mod == "system") {
            playItems = resData.data.recommendedData;
        } else {
            playItems = resData.data;
        }
        const akPlayItems = SessionStorage.get("ak91ShortPornPlayItems") || {};
        playItems.forEach(item => {
            if (item.type == 1) {
                const playUrlMD5 = MD5(item.playUrl).toString();
                akPlayItems[playUrlMD5] = {
                    id: `short_${item.id}`,
                    title: item.title,
                    playURL: item.playUrl
                };
            }
        });
        SessionStorage.set("ak91ShortPornPlayItems", akPlayItems);
    }
    function setActivatePlayURL(playURL) {
        const playUrlMD5 = MD5(playURL).toString();
        SessionStorage.set("ak91ShortPornPlayMD5", playUrlMD5);
    }
    function Short91PornAPPInit() {
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                if (this.responseURL.includes("/pwa.php")) {
                    hook(body, this.response);
                }
                if (this.responseURL.includes(".m3u8")) {
                    setActivatePlayURL(this.responseURL);
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function tryToGetItemInSessionStorage() {
        const activatePlayURLMd5 = SessionStorage.get("ak91ShortPornPlayMD5");
        if (activatePlayURLMd5) {
            const akPlayItems = SessionStorage.get("ak91ShortPornPlayItems") || {};
            const item = akPlayItems[activatePlayURLMd5];
            if (item) {
                return {
                    id: item.id,
                    title: item.title
                };
            }
            return null;
        }
        return null;
    }
    function Short91PornInject() {
        return new Promise(resolve => {
            var _a, _b, _c;
            let analyzeURL = "https://short91Porn.com/";
            let title = "";
            let find = false;
            let remindMsg = "";
            if (window.location.pathname == "/home") {
                const item = tryToGetItemInSessionStorage();
                if (item) {
                    analyzeURL += item.id;
                    title = item.title;
                    find = true;
                }
            }
            if (/\/video\/(\d+)/.test(window.location.href)) {
                const videoId = (_a = window.location.href.match(/\/video\/(\d+)/)) == null ? void 0 : _a[1];
                if (videoId) {
                    analyzeURL += `video_${videoId}`;
                    find = true;
                }
            }
            if (/\/short\?id=(\d+)/.test(window.location.href)) {
                const videoId = (_b = window.location.href.match(/\/short\?id=(\d+)/)) == null ? void 0 : _b[1];
                if (videoId) {
                    analyzeURL += `short_${videoId}`;
                    find = true;
                }
            }
            if (/\/cartoonDetail\/(\d+)/.test(window.location.href)) {
                const videoId = (_c = window.location.href.match(/\/cartoonDetail\/(\d+)/)) == null ? void 0 : _c[1];
                if (videoId) {
                    analyzeURL += `cartoonDetail_${videoId}`;
                    find = true;
                }
            }
            if (!find) {
                resolve({
                    analyzeURL: "",
                    failReason: "未捕获到视频信息",
                    remindMsg: ""
                });
                return;
            }
            if (title) {
                remindMsg = '<p style="color: rgb(190,24,93);">请核对标题</p>';
                remindMsg += `<p style="color: rgb(190,24,93);">${title}</p>`;
            }
            resolve({
                analyzeURL: analyzeURL,
                failReason: "",
                remindMsg: remindMsg
            });
        });
    }
    function DecodeData(body) {
        if (body instanceof Uint8Array || body instanceof ArrayBuffer) {
            return new TextDecoder("utf-8").decode(body);
        }
        if (typeof body === "object") {
            return JSON.stringify(body);
        }
        return body;
    }
    const sessionKey$2 = "91_short_app";
    const aesKey$1 = "7f21f0eb260e396e";
    const aesIv$1 = "6cbe8a2b687e0ffb";
    const hookURLs$2 = {
        mv: /https:\/\/.*\/mv\/detail/,
        community: /https:\/\/.*\/community\/post_detail/
    };
    function decryptReqData$1(reqBody) {
        const dataMatch = reqBody.match(/data=([^&]+)/);
        const dataValue = dataMatch ? dataMatch[1] : null;
        if (!dataValue) {
            return null;
        }
        const decrypt2 = AesDecryptCBCPKCS7(dataValue, aesKey$1, aesIv$1);
        return JSON.parse(decrypt2);
    }
    function decryptRespData$1(respData) {
        const decrypt2 = AesDecryptCBCPKCS7(respData, aesKey$1, aesIv$1);
        return JSON.parse(decrypt2);
    }
    function mv(body, reply) {
        const reqBody = DecodeData(body);
        const response = DecodeData(reply);
        const reqData = decryptReqData$1(reqBody);
        const respData = decryptRespData$1(JSON.parse(response).data);
        if (!respData || !respData) {
            return;
        }
        console.log("respData: ", respData);
        const cacheData = {
            title: respData.data.row.title,
            id: reqData.id,
            anaURL: "https://91short.com/mv?id=" + reqData.id,
            haveVideo: true
        };
        SessionStorage.set(sessionKey$2, cacheData);
    }
    function community(body, reply) {
        const reqBody = DecodeData(body);
        const response = DecodeData(reply);
        const reqData = decryptReqData$1(reqBody);
        const respData = decryptRespData$1(JSON.parse(response).data);
        if (!respData || !respData) {
            return;
        }
        let haveVideo = false;
        console.log(respData);
        respData.data.detail.medias.forEach(element => {
            if (element.type === 2) {
                haveVideo = true;
            }
        });
        const cacheData = {
            title: respData.data.detail.title,
            id: reqData.id,
            anaURL: "https://91short.com/community?id=" + reqData.id,
            haveVideo: haveVideo
        };
        SessionStorage.set(sessionKey$2, cacheData);
    }
    function Short91APPInit() {
        SessionStorage.remove(sessionKey$2);
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                for (const [key2, hookURL] of Object.entries(hookURLs$2)) {
                    if (hookURL.test(this.responseURL)) {
                        console.log("Request URL:", this.responseURL);
                        if (key2 === "mv") {
                            mv(body, this.response);
                        } else if (key2 === "community") {
                            community(body, this.response);
                        }
                    }
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function Short91APPInject() {
        return new Promise(resolve => {
            const cacheData = SessionStorage.get(sessionKey$2);
            if (!cacheData) {
                resolve({
                    analyzeURL: "",
                    failReason: "抱歉:未检测到任何视频或暂不支持该类型"
                });
                return;
            }
            SessionStorage.remove(sessionKey$2);
            if (!cacheData.haveVideo) {
                resolve({
                    analyzeURL: "",
                    failReason: "您好: 当前页面不存在视频"
                });
            }
            let remindMsg = '<p style="color: rgb(190,24,93);">请核对标题</p>';
            remindMsg += `<p style="color: rgb(190,24,93);">${cacheData.title}</p>`;
            remindMsg += '<p style="color: rgb(190,24,93);">若点击取消需要重新回到当前页面哦~</p>';
            resolve({
                analyzeURL: cacheData.anaURL,
                failReason: "",
                remindMsg: remindMsg
            });
        });
    }
    const sessionKey$1 = "hj_short_video";
    function decrypt(data) {
        const atobData1 = atob(data);
        const atobData2 = atob(atobData1);
        const atobData3 = atob(atobData2);
        return JSON.parse(atobData3);
    }
    function cacheCheckCanPlayData(data, reqURL) {
        console.log("response Data,", data);
        const videoId = new URL(reqURL).searchParams.get("video_id");
        const responseData = decrypt(JSON.parse(data).data);
        const cacheData = {
            videoId: videoId,
            amount: responseData.amount,
            anaURL: "https://v-short.haijiao.com?video_id=" + videoId
        };
        SessionStorage.set(sessionKey$1, cacheData);
    }
    function HaiJiaoInit() {
        SessionStorage.remove(sessionKey$1);
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                if (this.responseURL.includes("checkVideoCanPlay")) {
                    cacheCheckCanPlayData(this.response, this.responseURL);
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function HaiJiaoInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            if (url.pathname !== "/post/details" && url.pathname !== "/videoplay") {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页或短视频播放页面使用"
                });
                return;
            }
            if (url.pathname === "/post/details") {
                const buypostBtn = document.getElementsByClassName("buypost-btn");
                const saleBtn = document.getElementsByClassName("sell-btn");
                if (buypostBtn.length === 0 && saleBtn.length === 0) {
                    resolve({
                        analyzeURL: "",
                        failReason: "当前页面不包含付费视频或您已购买"
                    });
                    return;
                }
                const pid = url.searchParams.get("pid");
                if (!pid) {
                    resolve({
                        analyzeURL: "",
                        failReason: "获取视频ID失败"
                    });
                    return;
                }
                resolve({
                    analyzeURL: "https://haijiao.com/post/details?pid=" + pid,
                    failReason: ""
                });
                return;
            }
            if (url.pathname === "/videoplay") {
                const cacheData = SessionStorage.get(sessionKey$1);
                let remindMsg = "";
                if (cacheData.amount === 0) {
                    resolve({
                        analyzeURL: "",
                        failReason: "当前短视频免费, 无需解析"
                    });
                    return;
                }
                resolve({
                    analyzeURL: cacheData.anaURL,
                    failReason: "",
                    remindMsg: remindMsg
                });
            }
        });
    }
    const sessionKey = "ak_hj_app";
    const currentEnvKey = "ak_hj_app_current_env";
    const aesKey = "b78ce48964cffd68";
    const aesIv = "d82e851b5811f3a7";
    const hookURLs$1 = {
        community_post_detail: /api\.php\/api\/community\/post_detail$/,
        mv_get_detail: /\/api\.php\/api\/mv\/getDetail$/,
        vlog_play: /api.php\/api\/vlog\/play/,
        vlog_like: /api.php\/api\/vlog\/like/
    };
    function decryptReqData(reqBody) {
        const dataMatch = reqBody.match(/data=([^&]+)/);
        const dataValue = dataMatch ? dataMatch[1] : null;
        if (!dataValue) {
            return null;
        }
        const decrypt2 = AesDecryptCBCPKCS7(dataValue, aesKey, aesIv);
        return JSON.parse(decrypt2);
    }
    function decryptRespData(respData) {
        const decrypt2 = AesDecryptCBCPKCS7(respData, aesKey, aesIv);
        return JSON.parse(decrypt2);
    }
    function community_post_detail_api(body, reply) {
        const reqBody = DecodeData(body);
        const response = DecodeData(reply);
        const reqData = decryptReqData(reqBody);
        const respData = decryptRespData(JSON.parse(response).data);
        if (!reqData || !respData) {
            return;
        }
        const cacheData = {
            title: respData.data.title,
            id: reqData.id,
            duration: 0,
            videoNum: respData.data.video_num,
            anaURL: `https://app-hai-jiao.fun/detail?id=${respData.data.id}`
        };
        SessionStorage.set(sessionKey, cacheData);
        SessionStorage.set(currentEnvKey, "mv/get_detail");
    }
    function mvGetDetail(body, reply) {
        const reqBody = DecodeData(body);
        const response = DecodeData(reply);
        const reqData = decryptReqData(reqBody);
        const respData = decryptRespData(JSON.parse(response).data);
        console.log("respData", respData);
        if (!reqData || !respData) {
            return;
        }
        const cacheData = {
            title: respData.data.detail.title,
            id: reqData.id,
            duration: respData.data.detail.duration,
            videoNum: 1,
            anaURL: `https://mv-app-hai-jiao.fun/detail?id=${reqData.id}`
        };
        SessionStorage.set(sessionKey, cacheData);
        SessionStorage.set(currentEnvKey, "community/getDetail");
    }
    function vlogPlay(body) {
        SessionStorage.set(currentEnvKey, "vlog_play");
    }
    function vlogLike(body) {
        const reqBody = DecodeData(body);
        const reqData = decryptReqData(reqBody);
        if (!reqData) {
            return;
        }
        if (!reqData.id) {
            return;
        }
        const cacheData = {
            title: "",
            id: reqData.id,
            duration: 0,
            videoNum: 1,
            anaURL: `https://mv-app-hai-jiao.fun/detail?id=${reqData.id}`
        };
        SessionStorage.set(sessionKey, cacheData);
    }
    function HaiJiaoAPPInit() {
        SessionStorage.remove(sessionKey);
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                for (const [key2, hookURL] of Object.entries(hookURLs$1)) {
                    if (hookURL.test(this.responseURL)) {
                        console.log("Request URL:", this.responseURL, "key", key2);
                        if (key2 === "community_post_detail") {
                            community_post_detail_api(body, this.response);
                        } else if (key2 === "mv_get_detail") {
                            mvGetDetail(body, this.response);
                        } else if (key2 === "vlog_play") {
                            vlogPlay();
                        } else if (key2 === "vlog_like") {
                            vlogLike(body);
                        }
                    }
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function HaiJiaoAPPInject() {
        return new Promise(resolve => {
            const cacheData = SessionStorage.get(sessionKey);
            const currentEnv = SessionStorage.get(currentEnvKey);
            SessionStorage.remove(sessionKey);
            SessionStorage.remove(currentEnvKey);
            if (!cacheData && currentEnv !== "vlog_play") {
                resolve({
                    analyzeURL: "",
                    failReason: "抱歉:未检测到任何视频, 请重新进入播放页"
                });
                return;
            }
            if (!cacheData && currentEnv === "vlog_play") {
                resolve({
                    analyzeURL: "",
                    failReason: "右侧短视频点个赞即可提取到解析地址哦~"
                });
                return;
            }
            let remindMsg = '<p style="color: rgb(190,24,93);">若点击取消需要重新"回到/操作"该视频哦~</p>';
            if (cacheData.title) {
                remindMsg += `<p style="color: rgb(46, 24, 190);">${cacheData.title.substring(0, 20) + "..."}</p>`;
            }
            resolve({
                analyzeURL: cacheData.anaURL,
                failReason: "",
                remindMsg: remindMsg
            });
        });
    }
    function JAVHDInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/video/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    function LaikanlupingInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!/\/\d+\.html/.test(pathname)) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            const isFree = pathname.includes("free");
            if (isFree) {
                resolve({
                    analyzeURL: "",
                    failReason: "该视频免费, 无需解析"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    function LoiBusInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!/\/lois\/\d+/.test(pathname)) {
                resolve({
                    analyzeURL: "",
                    failReason: "请点击任意视频"
                });
                return;
            }
            const splitPath = pathname.split("/");
            const id = splitPath[splitPath.length - 1];
            fetch(`https://api.moegoat.com/api/lois/${id}`, {
                body: null,
                method: "GET"
            }).then(response => {
                if (!response.ok) {
                    resolve({
                        failReason: `获取失败, 请重试或联系客服\nerr: response status not ok`
                    });
                    return;
                }
                return response.json();
            }).then(data => {
                const videoCount = data.data.video_count;
                if (videoCount <= 0) {
                    resolve({
                        failReason: `当前内容不包含视频`
                    });
                    return;
                }
                const vipRequirement = data.data.vip_requirement;
                if (vipRequirement == 4) {
                    resolve({
                        failReason: `抱歉, 当前等级视频即将支持, 先换个视频吧~`
                    });
                }
                if (data.data.online_play !== 1) {
                    resolve({
                        failReason: `视频在该站只支持下载,不支持在线播放, 换个视频吧~`
                    });
                }
                const playlist = [ ...Array(videoCount).keys() ].map(item => ({
                    title: `第${item + 1}部`,
                    url: `https://www.loiship.com/lois/${id}?index=${item}`
                }));
                resolve({
                    playlist: playlist,
                    failReason: ""
                });
                return;
            }).catch(error => {
                resolve({
                    failReason: `获取失败, 请重试或联系客服\nerr:${error}`
                });
            });
        });
    }
    function ModelMediaAsiaInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/videos/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: "",
                gotoPage: "modelmediaasia"
            });
        });
    }
    function MosoInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/video/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: "",
                gotoPage: "moso"
            });
        });
    }
    function SLRInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/scenes/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    const txVLogSessionKey = "ak_tx_vlog_app";
    const hookURLs = {
        doLove: /\/h5\/movie\/doLove/,
        detail: /\/h5\/movie\/detail/
    };
    const tx_key = "fd14f9f8e38808fa";
    const ecb = new ECBPkcs7(tx_key);
    function getMovieID(body) {
        const bodyData = JSON.parse(ecb.decrypt(body));
        SessionStorage.set(txVLogSessionKey, {
            id: bodyData.data.id
        });
    }
    function TxVLogAPPInit() {
        SessionStorage.remove(txVLogSessionKey);
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                const url = new URL(window.location.href);
                const pathname = url.pathname;
                for (const [key2, hookURL] of Object.entries(hookURLs)) {
                    if (hookURL.test(this.responseURL)) {
                        SessionStorage.remove(txVLogSessionKey);
                        console.log("Request URL:", this.responseURL);
                        if (key2 === "doLove" && pathname.includes("/vlog")) {
                            getMovieID(body);
                        }
                        if (key2 === "detail" && pathname.includes("/movie/detail/")) {
                            getMovieID(body);
                        }
                    }
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function TxVLogInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/movie/detail/") && !pathname.includes("/vlog")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页/VLog专区使用"
                });
                return;
            }
            const cacheData = SessionStorage.get(txVLogSessionKey);
            if (!cacheData && pathname.includes("/vlog")) {
                resolve({
                    analyzeURL: "",
                    failReason: "当前 vlog 右侧点个 “赞” 即可获取视频解析地址"
                });
                return;
            }
            if (!cacheData) {
                resolve({
                    analyzeURL: "",
                    failReason: "抱歉:未检测到任何视频或暂不支持该类型"
                });
                return;
            }
            const anaURL = `https://txh067.com/movie/detail/${cacheData.id}`;
            SessionStorage.remove(txVLogSessionKey);
            console.log("remove session success");
            resolve({
                analyzeURL: anaURL,
                failReason: "",
                remindMsg: "若点击取消需要重新操作哦~"
            });
        });
    }
    const sourceData = {
        "海角社区": [ /(http|https):\/\/hj.*\./, /(http|https):\/\/.*?\.hj.*\./, /(http|https):\/\/.*?\.hai.*\./, /(http|https):\/\/hai.*\./, /(http|https):\/\/hj.*\/.*/, /(http|https):\/\/.*\.hj.*/, /(http|https):\/\/.*h.*j.*\/home/, /.*:\/\/.*\/post\/details*/, /.*:\/\/.*\/user\/userinfo\?=*/, /.*:\/\/.*\/videoplay$/ ],
        "海角APP": [ /https:\/\/p1\.lsqykbvl\.com\/.*/, /https:\/\/p5\.tyhytqs\.xyz\/.*/, /https:\/\/p5\.fkdadqjju\.cc\/.*/ ],
        "19JTV": [ /https:\/\/19jtv\.com\/*/ ],
        JAVHD: [ /https:\/\/javhd\.com\/*/ ],
        "麻豆传媒映画": [ /https:\/\/modelmediaasia\.com\/*/, /https:\/\/www\.mdav\.live\/*/ ],
        "糖心VLOG": [ /https:\/\/txh\d+\.com\/.*/, /https:\/\/.*txh\d+\.com\/.*/ ],
        "天美传媒": [ /https:\/\/5ktmi048\.com\/*/ ],
        "91短视频": [ /https:\/\/p2.lxrzwdq.xyz\/*/ ],
        sexLikeReal: [ /https:\/\/.*sexlikereal.com\/*/ ],
        "萝莉巴士": [ /https:\/\/www\.loi(?:box\d+|bus(?:\d+)?|raft|ship)\.(?:top|xyz|com)\/.*/, /https:\/\/loix.org\/.*/ ],
        "51风流": [ /https:\/\/.*51fengliu.com\/*/, /https:\/\/.*51fengliu3.com\/*/ ],
        "91Porn短视频": [ /https:\/\/pwa3\.dsp11a\.cc\// ],
        "来看录屏": [ /https:\/\/lubosp\.com\/*/ ],
        "兔子先生": [ /https:\/\/moso\.monster\/*/ ]
    };
    function matchSource(href) {
        for (const [key2, regexPatterns] of Object.entries(sourceData)) {
            const match = regexPatterns.some(regex => regex.test(href));
            if (match) {
                return key2;
            }
        }
        return "";
    }
    function PlatformInject() {
        const href = window.location.href;
        const source = matchSource(href);
        if (source === "") {
            return {
                ok: false,
                platform: "",
                func: () => Promise.reject()
            };
        }
        if (source === "海角社区") {
            HaiJiaoInit();
            return {
                ok: true,
                platform: source,
                func: HaiJiaoInject,
                platformMsg: "支持板块: 视频播放页面、短视频页面"
            };
        }
        if (source === "海角APP") {
            HaiJiaoAPPInit();
            return {
                ok: true,
                platform: source,
                func: HaiJiaoAPPInject,
                platformMsg: "支持板块: 首页、原创、短视频、社区(不包括ASMR、种子下载)"
            };
        }
        if (source === "19JTV") {
            return {
                ok: true,
                platform: source,
                func: Jtv19Inject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "JAVHD") {
            return {
                ok: true,
                platform: source,
                func: JAVHDInject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "麻豆传媒映画") {
            return {
                ok: true,
                platform: source,
                func: ModelMediaAsiaInject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "糖心VLOG") {
            TxVLogAPPInit();
            return {
                ok: true,
                platform: source,
                func: TxVLogInject,
                platformMsg: "支持板块: 视频详情页以及VLOG专区"
            };
        }
        if (source === "天美传媒") {
            return {
                ok: true,
                platform: source,
                func: TMInject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "91短视频") {
            Short91APPInit();
            return {
                ok: true,
                platform: source,
                func: Short91APPInject,
                platformMsg: "支持板块: 首页、PORN、原创、社区"
            };
        }
        if (source === "sexLikeReal") {
            return {
                ok: true,
                platform: source,
                func: SLRInject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "萝莉巴士") {
            return {
                ok: true,
                platform: source,
                func: LoiBusInject,
                platformMsg: "支持板块: 视频详情弹窗"
            };
        }
        if (source === "51风流") {
            return {
                ok: true,
                platform: source,
                func: FengLiu51Inject,
                platformMsg: "支持板块: 信息、暗巷、商家",
                supportUserToken: true
            };
        }
        if (source === "91Porn短视频") {
            Short91PornAPPInit();
            return {
                ok: true,
                platform: source,
                func: Short91PornInject,
                platformMsg: "支持板块: 首页、热点、资源(动漫视频)、原创。该站点存在特殊性, 不建议在首页使用,可以进入作者页面找到对应的视频进行使用, 请见谅!",
                platformMsgDuration: 0
            };
        }
        if (source === "来看录屏") {
            return {
                ok: true,
                platform: source,
                func: LaikanlupingInject,
                platformMsg: "支持板块: 视频播放页"
            };
        }
        if (source === "兔子先生") {
            return {
                ok: true,
                platform: source,
                func: MosoInject,
                platformMsg: "支持板块: 视频播放页"
            };
        }
        return {
            ok: false,
            platform: "",
            func: () => Promise.reject()
        };
    }
    function UpdatePluginRequest() {
        const reqURL = `${Config.ApiURL}/version`;
        return fetch(reqURL, {
            method: "POST",
            headers: {
                "Content-Type": "application/json"
            }
        }).then(response => response.json());
    }
    const _FloatingActions = class _FloatingActions {
        constructor(root, showActivateIcon, callbacks) {
            __publicField(this, "group");
            __publicField(this, "updateButton");
            __publicField(this, "mainButton");
            __publicField(this, "dragState");
            this.group = document.createElement("div");
            this.group.className = "akwm-fab-group";
            this.group.dataset.open = "false";
            this.applyStoredPosition();
            const actions = document.createElement("div");
            actions.className = "akwm-fab-actions";
            this.updateButton = this.createButton(syncIcon(), "检查更新", callbacks.onUpdate);
            actions.appendChild(this.updateButton);
            actions.appendChild(this.createButton(linkIcon(), "获取解析地址", callbacks.onAnalyze));
            if (showActivateIcon) {
                actions.appendChild(this.createButton(checkIcon(), "身份验证", callbacks.onActivateToken));
            }
            this.mainButton = this.createButton("AK", "Ak Web Master", () => this.toggleOpen());
            this.mainButton.classList.add("akwm-fab-main");
            this.bindDrag();
            this.group.append(actions, this.mainButton);
            root.appendChild(this.group);
        }
        setNeedUpdate(needUpdate) {
            this.updateButton.classList.toggle("akwm-fab-badge", needUpdate);
        }
        toggleOpen() {
            this.group.dataset.open = this.group.dataset.open === "true" ? "false" : "true";
        }
        createButton(content, title, onClick) {
            const button = document.createElement("button");
            button.className = "akwm-fab";
            button.type = "button";
            if (content.trim().startsWith("<svg")) {
                button.innerHTML = content;
            } else {
                button.textContent = content;
            }
            button.title = title;
            button.setAttribute("aria-label", title);
            button.addEventListener("click", onClick);
            return button;
        }
        bindDrag() {
            this.mainButton.addEventListener("pointerdown", event => {
                if (event.button !== 0) {
                    return;
                }
                const rect = this.group.getBoundingClientRect();
                this.dragState = {
                    pointerId: event.pointerId,
                    startX: event.clientX,
                    startY: event.clientY,
                    startLeft: rect.left,
                    startTop: rect.top,
                    moved: false
                };
                this.mainButton.setPointerCapture(event.pointerId);
                this.group.classList.add("akwm-fab-dragging");
            });
            this.mainButton.addEventListener("pointermove", event => {
                const state = this.dragState;
                if (!state || state.pointerId !== event.pointerId) {
                    return;
                }
                const dx = event.clientX - state.startX;
                const dy = event.clientY - state.startY;
                if (Math.abs(dx) + Math.abs(dy) > 4) {
                    state.moved = true;
                }
                this.setPosition(state.startLeft + dx, state.startTop + dy);
            });
            this.mainButton.addEventListener("pointerup", event => this.finishDrag(event));
            this.mainButton.addEventListener("pointercancel", event => this.finishDrag(event));
            this.mainButton.addEventListener("click", event => {
                if (this.group.dataset.justDragged === "true") {
                    event.stopImmediatePropagation();
                    this.group.dataset.justDragged = "false";
                }
            }, true);
            window.addEventListener("resize", () => {
                const rect = this.group.getBoundingClientRect();
                this.setPosition(rect.left, rect.top, true);
            });
        }
        finishDrag(event) {
            const state = this.dragState;
            if (!state || state.pointerId !== event.pointerId) {
                return;
            }
            this.mainButton.releasePointerCapture(event.pointerId);
            this.group.classList.remove("akwm-fab-dragging");
            this.dragState = void 0;
            const rect = this.group.getBoundingClientRect();
            this.savePosition(rect.left, rect.top);
            if (state.moved) {
                this.group.dataset.justDragged = "true";
            }
        }
        applyStoredPosition() {
            const position = readStoredPosition();
            if (!position) {
                return;
            }
            this.setPosition(position.left, position.top);
        }
        setPosition(left, top, skipSave = false) {
            const maxLeft = Math.max(8, window.innerWidth - this.group.offsetWidth - 8);
            const maxTop = Math.max(8, window.innerHeight - this.group.offsetHeight - 8);
            const nextLeft = clamp(left, 8, maxLeft);
            const nextTop = clamp(top, 8, maxTop);
            this.group.style.left = `${nextLeft}px`;
            this.group.style.top = `${nextTop}px`;
            this.group.style.right = "auto";
            if (!skipSave) {
                this.savePosition(nextLeft, nextTop);
            }
        }
        savePosition(left, top) {
            localStorage.setItem(_FloatingActions.positionKey, JSON.stringify({
                left: left,
                top: top
            }));
        }
    };
    __publicField(_FloatingActions, "positionKey", "akwmFloatingPosition");
    let FloatingActions = _FloatingActions;
    function readStoredPosition() {
        const raw = localStorage.getItem(FloatingActions.positionKey);
        if (!raw) {
            return null;
        }
        try {
            const data = JSON.parse(raw);
            if (typeof data.left === "number" && typeof data.top === "number") {
                return data;
            }
        } catch {
            return null;
        }
        return null;
    }
    function clamp(value, min, max) {
        return Math.min(Math.max(value, min), max);
    }
    function icon(path) {
        return `<svg class="akwm-fab-icon" viewBox="0 0 24 24" aria-hidden="true">${path}</svg>`;
    }
    function syncIcon() {
        return icon('<path d="M21 12a9 9 0 0 0-15.4-6.4L3 8"></path><path d="M3 3v5h5"></path><path d="M3 12a9 9 0 0 0 15.4 6.4L21 16"></path><path d="M21 21v-5h-5"></path>');
    }
    function linkIcon() {
        return icon('<path d="M10 13a5 5 0 0 0 7.1 0l2-2a5 5 0 0 0-7.1-7.1l-1.1 1.1"></path><path d="M14 11a5 5 0 0 0-7.1 0l-2 2a5 5 0 0 0 7.1 7.1l1.1-1.1"></path>');
    }
    function checkIcon() {
        return icon('<path d="M20 6 9 17l-5-5"></path>');
    }
    class ModalController {
        constructor(root, options) {
            __publicField(this, "overlay");
            __publicField(this, "body");
            __publicField(this, "okButton");
            __publicField(this, "cancelButton");
            __publicField(this, "okLabel", "");
            this.root = root;
            this.overlay = document.createElement("div");
            this.overlay.className = "akwm-modal-overlay";
            const dialog = document.createElement("section");
            dialog.className = "akwm-modal";
            dialog.setAttribute("role", "dialog");
            dialog.setAttribute("aria-modal", "true");
            const header = document.createElement("header");
            header.className = "akwm-modal-header";
            header.textContent = options.title;
            this.body = document.createElement("div");
            this.body.className = "akwm-modal-body";
            this.setBody(options.body || "");
            const footer = document.createElement("footer");
            footer.className = "akwm-modal-footer";
            const showCancel = options.showCancel !== false;
            if (showCancel) {
                this.cancelButton = document.createElement("button");
                this.cancelButton.className = "akwm-btn";
                this.cancelButton.type = "button";
                this.cancelButton.textContent = options.cancelText || "取消";
                this.cancelButton.addEventListener("click", () => {
                    var _a;
                    (_a = options.onCancel) == null ? void 0 : _a.call(options);
                    this.close();
                });
                footer.appendChild(this.cancelButton);
            }
            const showOk = options.showOk !== false;
            if (showOk) {
                this.okButton = document.createElement("button");
                this.okButton.className = "akwm-btn akwm-btn-primary";
                this.okButton.type = "button";
                this.okLabel = options.okText || "确定";
                this.okButton.textContent = this.okLabel;
                this.okButton.disabled = Boolean(options.okDisabled);
                this.okButton.addEventListener("click", () => {
                    var _a;
                    void ((_a = options.onOk) == null ? void 0 : _a.call(options));
                });
                footer.appendChild(this.okButton);
            }
            dialog.append(header, this.body, footer);
            this.overlay.appendChild(dialog);
            this.root.appendChild(this.overlay);
        }
        setBody(content) {
            this.body.replaceChildren();
            if (typeof content === "string") {
                const text = document.createElement("span");
                text.textContent = content;
                this.body.appendChild(text);
                return;
            }
            this.body.appendChild(content);
        }
        setOkText(text) {
            this.okLabel = text;
            if (this.okButton) {
                this.okButton.textContent = text;
            }
        }
        setOkDisabled(disabled) {
            if (this.okButton) {
                this.okButton.disabled = disabled;
            }
        }
        setLoading(loading) {
            if (this.okButton) {
                this.okButton.disabled = loading;
                this.okButton.textContent = loading ? "请稍等..." : this.okLabel;
            }
            if (this.cancelButton) {
                this.cancelButton.disabled = loading;
            }
        }
        close() {
            this.overlay.remove();
        }
    }
    const styles = `\n:host {\n  all: initial;\n}\n\n.akwm-root,\n.akwm-root * {\n  box-sizing: border-box;\n  letter-spacing: 0;\n}\n\n.akwm-root {\n  position: fixed;\n  inset: 0;\n  z-index: 2147483647;\n  pointer-events: none;\n  color: #172033;\n  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;\n  font-size: 14px;\n  line-height: 1.5;\n}\n\n.akwm-root button,\n.akwm-root input {\n  font: inherit;\n}\n\n.akwm-fab-group {\n  position: fixed;\n  right: 20px;\n  top: 47vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  pointer-events: auto;\n  touch-action: none;\n}\n\n.akwm-fab-actions {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  transform: translateY(6px);\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 160ms ease, transform 160ms ease;\n}\n\n.akwm-fab-group[data-open="true"] .akwm-fab-actions {\n  transform: translateY(0);\n  opacity: 1;\n  pointer-events: auto;\n}\n\n.akwm-fab {\n  position: relative;\n  width: 38px;\n  height: 38px;\n  border: 0;\n  border-radius: 999px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  color: #fff;\n  background: #2563eb;\n  box-shadow: 0 8px 20px rgba(31, 41, 55, 0.22);\n  cursor: pointer;\n  user-select: none;\n  transition: transform 120ms ease, box-shadow 120ms ease, background 120ms ease;\n}\n\n.akwm-fab:hover {\n  transform: translateY(-1px);\n  background: #1d4ed8;\n  box-shadow: 0 10px 24px rgba(31, 41, 55, 0.28);\n}\n\n.akwm-fab:active {\n  transform: translateY(0);\n}\n\n.akwm-fab-main {\n  width: 44px;\n  height: 44px;\n  font-size: 13px;\n  font-weight: 800;\n  cursor: grab;\n}\n\n.akwm-fab-dragging .akwm-fab-main {\n  cursor: grabbing;\n}\n\n.akwm-fab-icon {\n  width: 18px;\n  height: 18px;\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 2;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n.akwm-fab-badge::after {\n  content: "";\n  position: absolute;\n  top: 2px;\n  right: 3px;\n  width: 8px;\n  height: 8px;\n  border: 2px solid #fff;\n  border-radius: 999px;\n  background: #ef4444;\n}\n\n.akwm-toast-wrap {\n  position: fixed;\n  top: 22px;\n  right: 22px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: min(340px, calc(100vw - 44px));\n  pointer-events: auto;\n}\n\n.akwm-toast {\n  border: 1px solid rgba(148, 163, 184, 0.28);\n  border-radius: 8px;\n  background: #fff;\n  box-shadow: 0 14px 38px rgba(15, 23, 42, 0.18);\n  padding: 12px 14px;\n  color: #172033;\n  overflow: hidden;\n}\n\n.akwm-toast-title {\n  margin: 0;\n  font-size: 14px;\n  font-weight: 700;\n}\n\n.akwm-toast-desc {\n  margin: 4px 0 0;\n  color: #5b6475;\n  font-size: 13px;\n  word-break: break-word;\n}\n\n.akwm-toast-success {\n  border-left: 4px solid #16a34a;\n}\n\n.akwm-toast-error {\n  border-left: 4px solid #dc2626;\n}\n\n.akwm-toast-info {\n  border-left: 4px solid #2563eb;\n}\n\n.akwm-modal-overlay {\n  position: fixed;\n  inset: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 22px;\n  background: rgba(15, 23, 42, 0.36);\n  pointer-events: auto;\n}\n\n.akwm-modal {\n  width: min(520px, 100%);\n  max-height: min(680px, calc(100vh - 44px));\n  display: flex;\n  flex-direction: column;\n  border: 1px solid rgba(148, 163, 184, 0.24);\n  border-radius: 8px;\n  background: #fff;\n  box-shadow: 0 26px 70px rgba(15, 23, 42, 0.28);\n  overflow: hidden;\n}\n\n.akwm-modal-header {\n  padding: 18px 20px 10px;\n  color: #101828;\n  font-size: 16px;\n  font-weight: 760;\n}\n\n.akwm-modal-body {\n  padding: 10px 20px 18px;\n  color: #273244;\n  overflow: auto;\n  word-break: break-word;\n}\n\n.akwm-modal-footer {\n  display: flex;\n  justify-content: flex-end;\n  gap: 10px;\n  padding: 12px 20px 16px;\n  border-top: 1px solid #edf1f7;\n}\n\n.akwm-btn {\n  min-width: 74px;\n  height: 34px;\n  border: 1px solid #d6dce8;\n  border-radius: 6px;\n  padding: 0 14px;\n  background: #fff;\n  color: #273244;\n  cursor: pointer;\n  text-align: center;\n  user-select: none;\n}\n\n.akwm-btn:hover {\n  border-color: #9fb0c8;\n  color: #111827;\n}\n\n.akwm-btn-primary {\n  border-color: #2563eb;\n  background: #2563eb;\n  color: #fff;\n}\n\n.akwm-btn-primary:hover {\n  border-color: #1d4ed8;\n  background: #1d4ed8;\n  color: #fff;\n}\n\n.akwm-btn-link {\n  border-color: transparent;\n  background: transparent;\n  color: #2563eb;\n  min-width: auto;\n  padding: 0 2px;\n}\n\n.akwm-btn-dashed {\n  border-style: dashed;\n  min-width: 92px;\n}\n\n.akwm-btn:disabled {\n  cursor: not-allowed;\n  opacity: 0.55;\n}\n\n.akwm-input {\n  width: 100%;\n  height: 40px;\n  border: 1px solid #d6dce8;\n  border-radius: 6px;\n  padding: 0 12px;\n  outline: none;\n  color: #172033;\n  background: #f8fafc;\n}\n\n.akwm-input:focus {\n  border-color: #2563eb;\n  background: #fff;\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);\n}\n\n.akwm-tag {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 30px;\n  border-radius: 6px;\n  padding: 5px 10px;\n  color: #5b21b6;\n  background: #f3e8ff;\n  overflow: hidden;\n}\n\n.akwm-ellipsis {\n  max-width: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.akwm-center {\n  text-align: center;\n}\n\n.akwm-stack {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 12px;\n}\n\n.akwm-row {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: 8px;\n}\n\n.akwm-segmented {\n  display: inline-flex;\n  gap: 4px;\n  padding: 4px;\n  border-radius: 8px;\n  background: #eef2f7;\n}\n\n.akwm-segmented button {\n  min-width: 54px;\n  height: 30px;\n  border: 0;\n  border-radius: 6px;\n  padding: 0 12px;\n  color: #475569;\n  background: transparent;\n  cursor: pointer;\n}\n\n.akwm-segmented button[data-active="true"] {\n  color: #172033;\n  background: #fff;\n  box-shadow: 0 1px 4px rgba(15, 23, 42, 0.12);\n}\n\n.akwm-remind {\n  text-align: center;\n}\n\n.akwm-remind p {\n  margin: 6px 0;\n}\n\n.akwm-danger {\n  color: #be185d;\n}\n\n.akwm-muted {\n  color: #667085;\n}\n\n@media (max-width: 520px) {\n  .akwm-fab-group {\n    right: 14px;\n  }\n\n  .akwm-modal-overlay {\n    padding: 14px;\n  }\n\n  .akwm-modal-header {\n    padding: 16px 16px 8px;\n  }\n\n  .akwm-modal-body {\n    padding: 8px 16px 16px;\n  }\n\n  .akwm-modal-footer {\n    padding: 12px 16px 14px;\n  }\n}\n`;
    class ToastCenter {
        constructor(root) {
            __publicField(this, "wrap");
            this.wrap = document.createElement("div");
            this.wrap.className = "akwm-toast-wrap";
            root.appendChild(this.wrap);
        }
        info(message, description, duration = 5) {
            this.show("info", message, description, duration);
        }
        success(message, description, duration = 2.4) {
            this.show("success", message, description, duration);
        }
        error(message, description, duration = 4) {
            this.show("error", message, description, duration);
        }
        show(kind, message, description, duration = 5) {
            const item = document.createElement("div");
            item.className = `akwm-toast akwm-toast-${kind}`;
            const title = document.createElement("p");
            title.className = "akwm-toast-title";
            title.textContent = message;
            item.appendChild(title);
            if (description) {
                const desc = document.createElement("p");
                desc.className = "akwm-toast-desc";
                desc.textContent = description;
                item.appendChild(desc);
            }
            item.addEventListener("click", () => item.remove());
            this.wrap.appendChild(item);
            if (duration > 0) {
                window.setTimeout(() => item.remove(), duration * 1e3);
            }
        }
    }
    async function copyToClipboard(text, success, toast, failure) {
        try {
            await navigator.clipboard.writeText(text);
            toast.success(success);
        } catch {
            toast.error("复制解析地址失败, 请开启浏览器复制权限");
        }
    }
    function autoSearchEncodeUrl(url) {
        return btoa(url).replace(/=/g, "~").replace(/\+/g, "-").replace(/\//g, "_");
    }
    function gotoAkSky(searchURL, page = "") {
        const url = `https://ak-sky.com/${page}#searchURL=${autoSearchEncodeUrl(searchURL)}`;
        window.open(url, "_blank");
    }
    const newVersionPluginAddress = "https://sleazyfork.org/zh-CN/scripts/588047-akwebmasterv2";
    const noopInject = async () => ({
        analyzeURL: "",
        failReason: "Default function - no operation",
        remindMsg: "",
        gotoPage: ""
    });
    class AkWebMasterApp {
        constructor(shadowRoot) {
            __publicField(this, "root");
            __publicField(this, "toast");
            __publicField(this, "injectFunction", noopInject);
            __publicField(this, "actions");
            __publicField(this, "initialized", false);
            this.shadowRoot = shadowRoot;
            const style = document.createElement("style");
            style.textContent = styles;
            this.shadowRoot.appendChild(style);
            this.root = document.createElement("div");
            this.root.className = "akwm-root";
            this.shadowRoot.appendChild(this.root);
            this.toast = new ToastCenter(this.root);
        }
        init() {
            if (this.initialized) {
                return;
            }
            this.initialized = true;
            const platform = PlatformInject();
            if (!platform.ok) {
                this.toast.info("Ak Web Master", "加载失败, 请联系客服");
                return;
            }
            this.injectFunction = platform.func;
            this.actions = new FloatingActions(this.root, Boolean(platform.supportUserToken), {
                onUpdate: () => this.openUpdateDialog(),
                onAnalyze: () => this.openAnalyzeDialog(),
                onActivateToken: () => this.openActivateDialog()
            });
            this.refreshUpdateBadge();
            this.toast.info(`${platform.platform} 加载成功`, platform.platformMsg, platform.platformMsgDuration ?? 5);
        }
        refreshUpdateBadge() {
            UpdatePluginRequest().then(reply => {
                var _a;
                if (reply.code !== 200) {
                    return;
                }
                (_a = this.actions) == null ? void 0 : _a.setNeedUpdate(reply.data.version !== getScriptVersion());
            }).catch(() => {
                var _a;
                (_a = this.actions) == null ? void 0 : _a.setNeedUpdate(false);
            });
        }
        openAnalyzeDialog() {
            let modal;
            modal = new ModalController(this.root, {
                title: "您 好",
                body: "是否尝试获解析地址",
                okText: "获 取",
                cancelText: "取 消",
                onOk: async () => {
                    modal.setOkText("获取中");
                    modal.setBody("请稍等...");
                    modal.setLoading(true);
                    try {
                        const reply = await this.injectFunction();
                        if (reply.openActivateToken) {
                            modal.close();
                            this.openActivateDialog();
                            return;
                        }
                        if (reply.failReason) {
                            modal.setBody(reply.failReason);
                            modal.setOkText("重 试");
                            return;
                        }
                        this.handleAnalyzeSuccess(reply);
                        modal.close();
                    } catch {
                        modal.setBody("获取失败, 请重试");
                        modal.setOkText("获 取");
                    } finally {
                        modal.setLoading(false);
                    }
                }
            });
        }
        handleAnalyzeSuccess(reply) {
            var _a;
            if (reply.analyzeURL) {
                this.openRedirectDialog(reply.analyzeURL, reply.remindMsg, reply.gotoPage);
            }
            if ((_a = reply.playlist) == null ? void 0 : _a.length) {
                this.openPlaylistDialog(reply.playlist, reply.remindMsg, reply.playlistSubTitle);
            }
            if (reply.segmented) {
                this.openSegmentedDialog(reply.segmented, reply.remindMsg);
            }
        }
        openRedirectDialog(analyzeURL, remindMsg, gotoPage) {
            const body = document.createElement("div");
            const tag = document.createElement("div");
            tag.className = "akwm-tag";
            const urlText = document.createElement("span");
            urlText.className = "akwm-ellipsis";
            urlText.textContent = analyzeURL;
            tag.appendChild(urlText);
            body.appendChild(tag);
            appendRemind(body, remindMsg);
            let modal;
            modal = new ModalController(this.root, {
                title: "获取成功",
                body: body,
                okText: "前往Ak-Sky",
                cancelText: "取消",
                onOk: () => {
                    gotoAkSky(analyzeURL, gotoPage);
                    modal.close();
                }
            });
        }
        openPlaylistDialog(playlist, remindMsg, subTitle) {
            const body = document.createElement("div");
            body.className = "akwm-stack";
            const subtitle = document.createElement("div");
            subtitle.className = "akwm-center akwm-muted";
            subtitle.textContent = subTitle || `本内容含有 ${playlist.length} 个视频, 请选择`;
            body.appendChild(subtitle);
            const row = document.createElement("div");
            row.className = "akwm-row";
            playlist.forEach(item => {
                const button = document.createElement("button");
                button.className = "akwm-btn akwm-btn-dashed";
                button.type = "button";
                button.textContent = item.title;
                button.addEventListener("click", () => gotoAkSky(item.url));
                row.appendChild(button);
            });
            body.appendChild(row);
            appendRemind(body, remindMsg);
            new ModalController(this.root, {
                title: "获取成功",
                body: body,
                cancelText: "取消",
                showOk: false
            });
        }
        openSegmentedDialog(result, remindMsg) {
            let key2 = result.options[0] || "";
            const body = document.createElement("div");
            body.className = "akwm-stack akwm-center";
            const remind = document.createElement("div");
            remind.className = "akwm-danger";
            remind.textContent = remindMsg || "";
            body.appendChild(remind);
            const segmented = document.createElement("div");
            segmented.className = "akwm-segmented";
            const value = document.createElement("p");
            value.textContent = result.data[key2] || "";
            const renderSegments = () => {
                segmented.replaceChildren();
                result.options.forEach(option => {
                    const button = document.createElement("button");
                    button.type = "button";
                    button.textContent = option;
                    button.dataset.active = String(option === key2);
                    button.addEventListener("click", () => {
                        key2 = option;
                        value.textContent = result.data[key2] || "";
                        renderSegments();
                    });
                    segmented.appendChild(button);
                });
            };
            renderSegments();
            const copyButton = document.createElement("button");
            copyButton.className = "akwm-btn akwm-btn-primary";
            copyButton.type = "button";
            copyButton.textContent = "复 制";
            copyButton.addEventListener("click", () => copyToClipboard(result.data[key2] || "", "复制成功", this.toast));
            body.append(segmented, value, copyButton);
            new ModalController(this.root, {
                title: "获取成功",
                body: body,
                cancelText: "关 闭",
                showOk: false
            });
        }
        openActivateDialog() {
            const body = document.createElement("div");
            const input = document.createElement("input");
            input.className = "akwm-input";
            input.placeholder = "请输入您的激活码";
            input.value = LocalStorage.get("akSkyUserToken") || "";
            body.appendChild(input);
            const linkWrap = document.createElement("div");
            linkWrap.style.display = "flex";
            linkWrap.style.justifyContent = "flex-end";
            linkWrap.style.marginTop = "10px";
            const link = document.createElement("button");
            link.className = "akwm-btn akwm-btn-link";
            link.type = "button";
            link.textContent = "获取激活码";
            link.addEventListener("click", () => window.open("https://ak-sky.com/phoenix", "_blank"));
            linkWrap.appendChild(link);
            body.appendChild(linkWrap);
            let modal;
            modal = new ModalController(this.root, {
                title: "身份验证",
                body: body,
                okText: "确 认",
                cancelText: "取 消",
                okDisabled: !input.value,
                onOk: () => {
                    const token = input.value.trim();
                    if (!token) {
                        modal.setOkDisabled(true);
                        return;
                    }
                    LocalStorage.set("akSkyUserToken", token);
                    modal.close();
                }
            });
            input.addEventListener("input", () => modal.setOkDisabled(!input.value.trim()));
            window.setTimeout(() => input.focus(), 0);
        }
        openUpdateDialog() {
            let okText = "检查";
            let modal;
            modal = new ModalController(this.root, {
                title: "Ak-WebMaster",
                body: "是否检查新版本?",
                okText: okText,
                cancelText: "取消",
                onOk: async () => {
                    var _a, _b;
                    if (okText === "前往更新") {
                        window.open(newVersionPluginAddress, "_blank");
                        modal.close();
                        return;
                    }
                    modal.setLoading(true);
                    try {
                        const reply = await UpdatePluginRequest();
                        if (reply.code !== 200) {
                            modal.setBody("检查失败");
                            return;
                        }
                        if (reply.data.version !== getScriptVersion()) {
                            modal.setBody(`发现新版本: ${reply.data.version}`);
                            okText = "前往更新";
                            modal.setOkText(okText);
                            (_a = this.actions) == null ? void 0 : _a.setNeedUpdate(true);
                        } else {
                            modal.setBody("当前版本为最新版本");
                            (_b = this.actions) == null ? void 0 : _b.setNeedUpdate(false);
                        }
                    } catch {
                        modal.setBody("检查失败");
                    } finally {
                        modal.setLoading(false);
                    }
                }
            });
        }
    }
    function appendRemind(parent, remindMsg) {
        if (!remindMsg) {
            return;
        }
        const remind = document.createElement("div");
        remind.className = "akwm-remind";
        remind.innerHTML = remindMsg;
        parent.appendChild(remind);
    }
    function getScriptVersion() {
        if (typeof GM_info !== "undefined") {
            return GM_info.script.version;
        }
        return "v2.2.5";
    }
    function log(...args) {
        console.log("%cAkWebMaster:", "color: #7c3aed; font-weight: 700", ...args);
    }
    function onLocationChange(callback) {
        window.setTimeout(callback, 0);
        const start = () => {
            let oldHref = window.location.href;
            const observer = new MutationObserver(() => {
                if (oldHref !== window.location.href) {
                    oldHref = window.location.href;
                    callback();
                }
            });
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
            return observer;
        };
        if (document.body) {
            return start();
        }
        document.addEventListener("DOMContentLoaded", start, {
            once: true
        });
        return void 0;
    }
    log("script has successfully started");
    function mount() {
        if (!document.body) {
            window.setTimeout(mount, 50);
            return;
        }
        if (document.getElementById("akwm")) {
            return;
        }
        const host = document.createElement("div");
        host.id = "akwm";
        document.body.appendChild(host);
        const shadowRoot = host.attachShadow({
            mode: "open"
        });
        const app = new AkWebMasterApp(shadowRoot);
        window.__AKWM_APP__ = app;
        app.init();
    }
    onLocationChange(() => {
        try {
            mount();
        } catch (error) {
            log(error);
        }
    });
})();