Greasy Fork is available in English.

Bilibili 旧播放页

恢复Bilibili旧版页面,为了那些念旧的人。

// ==UserScript==
// @name         Bilibili 旧播放页
// @namespace    MotooriKashin
// @version      10.8.1-1272ee50230293555dec1d2e23fc5c74215b4c86
// @description  恢复Bilibili旧版页面,为了那些念旧的人。
// @author       MotooriKashin, wly5556
// @homepage     https://github.com/MotooriKashin/Bilibili-Old
// @supportURL   https://github.com/MotooriKashin/Bilibili-Old/issues
// @icon         https://www.bilibili.com/favicon.ico
// @match        *://*.bilibili.com/*
// @connect      *
// @grant        GM.xmlHttpRequest
// @grant        GM.getValue
// @grant        GM.setValue
// @grant        GM.deleteValue
// @grant        GM.cookie
// @grant        GM.registerMenuCommand
// @run-at       document-start
// @license      MIT
// ==/UserScript==

const MODULES = `
"use strict";
(() => {
  var __create = Object.create;
  var __defProp = Object.defineProperty;
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  var __getOwnPropNames = Object.getOwnPropertyNames;
  var __getProtoOf = Object.getPrototypeOf;
  var __hasOwnProp = Object.prototype.hasOwnProperty;
  var __esm = (fn, res) => function __init() {
    return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
  };
  var __commonJS = (cb, mod2) => function __require() {
    return mod2 || (0, cb[__getOwnPropNames(cb)[0]])((mod2 = { exports: {} }).exports, mod2), mod2.exports;
  };
  var __copyProps = (to, from, except, desc) => {
    if (from && typeof from === "object" || typeof from === "function") {
      for (let key of __getOwnPropNames(from))
        if (!__hasOwnProp.call(to, key) && key !== except)
          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
    }
    return to;
  };
  var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__getProtoOf(mod2)) : {}, __copyProps(
    // If the importer is in node compatibility mode or this is not an ESM
    // file that has been converted to a CommonJS file using a Babel-
    // compatible transform (i.e. "__esModule" has not been set), then set
    // "default" to the CommonJS "module.exports" for node compatibility.
    isNodeMode || !mod2 || !mod2.__esModule ? __defProp(target, "default", { value: mod2, enumerable: true }) : target,
    mod2
  ));

  // tampermonkey/gm.ts
  var init_gm = __esm({
    "tampermonkey/gm.ts"() {
      "use strict";
      init_tampermonkey();
      GM.fetch = function(input, init) {
        return new Promise((resolve, reject) => {
          if (input instanceof Request) {
            input = input.url;
          } else if (input instanceof URL) {
            input = input.toJSON();
          }
          if ((init == null ? void 0 : init.body) instanceof ArrayBuffer) {
            init.body = new Blob([init.body]);
          }
          input = new URL(input, location.href).toJSON();
          GM.xmlHttpRequest({
            url: input,
            method: init == null ? void 0 : init.method,
            data: init == null ? void 0 : init.body,
            anonymous: init ? init.credentials === "include" ? false : true : true,
            headers: init == null ? void 0 : init.headers,
            responseType: "arraybuffer",
            onload: ({ response, status, statusText, finalUrl, responseHeaders }) => {
              const headers = responseHeaders.replace(/\\r/g, "").split("\\n").reduce((s, d) => {
                const arr2 = d.split(":");
                arr2[0] && (s[arr2[0]] = arr2[1] || "");
                return s;
              }, {});
              if (!response)
                return reject(statusText);
              const res = new Response(response, { status, statusText, headers });
              Object.defineProperties(res, {
                url: { value: finalUrl }
              });
              resolve(res);
            },
            onerror: reject
          });
        });
      };
    }
  });

  // tampermonkey/polyfill/element-prototype-replaceChildren.ts
  var init_element_prototype_replaceChildren = __esm({
    "tampermonkey/polyfill/element-prototype-replaceChildren.ts"() {
      "use strict";
      init_tampermonkey();
      if (typeof Element.prototype.replaceChildren === "undefined") {
        Reflect.defineProperty(Element.prototype, "replaceChildren", {
          value: function() {
            while (this.lastChild)
              this.removeChild(this.lastChild);
            this.append.call(this, ...arguments);
          },
          writable: true,
          enumerable: false,
          configurable: true
        });
      }
    }
  });

  // tampermonkey/polyfill/proposal-relative-indexing-method.ts
  var at2;
  var init_proposal_relative_indexing_method = __esm({
    "tampermonkey/polyfill/proposal-relative-indexing-method.ts"() {
      "use strict";
      init_tampermonkey();
      if (typeof Array.prototype.at === "undefined") {
        let at = function(n) {
          n = Math.trunc(n) || 0;
          if (n < 0)
            n += this.length;
          if (n < 0 || n >= this.length)
            return void 0;
          return this[n];
        };
        at2 = at;
        const TypedArray = Reflect.getPrototypeOf(Int8Array);
        for (const C of [Array, String, TypedArray]) {
          Reflect.defineProperty(
            C.prototype,
            "at",
            {
              value: at,
              writable: true,
              enumerable: false,
              configurable: true
            }
          );
        }
      }
    }
  });

  // tampermonkey/polyfill/polyfill.ts
  var init_polyfill = __esm({
    "tampermonkey/polyfill/polyfill.ts"() {
      "use strict";
      init_tampermonkey();
      init_element_prototype_replaceChildren();
      init_proposal_relative_indexing_method();
    }
  });

  // tampermonkey/index.ts
  var init_tampermonkey = __esm({
    "tampermonkey/index.ts"() {
      "use strict";
      init_gm();
      init_polyfill();
    }
  });

  // node_modules/crypt/crypt.js
  var require_crypt = __commonJS({
    "node_modules/crypt/crypt.js"(exports2, module2) {
      init_tampermonkey();
      (function() {
        var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", crypt = {
          // Bit-wise rotation left
          rotl: function(n, b) {
            return n << b | n >>> 32 - b;
          },
          // Bit-wise rotation right
          rotr: function(n, b) {
            return n << 32 - b | n >>> b;
          },
          // Swap big-endian to little-endian and vice versa
          endian: function(n) {
            if (n.constructor == Number) {
              return crypt.rotl(n, 8) & 16711935 | crypt.rotl(n, 24) & 4278255360;
            }
            for (var i = 0; i < n.length; i++)
              n[i] = crypt.endian(n[i]);
            return n;
          },
          // Generate an array of any length of random bytes
          randomBytes: function(n) {
            for (var bytes = []; n > 0; n--)
              bytes.push(Math.floor(Math.random() * 256));
            return bytes;
          },
          // Convert a byte array to big-endian 32-bit words
          bytesToWords: function(bytes) {
            for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)
              words[b >>> 5] |= bytes[i] << 24 - b % 32;
            return words;
          },
          // Convert big-endian 32-bit words to a byte array
          wordsToBytes: function(words) {
            for (var bytes = [], b = 0; b < words.length * 32; b += 8)
              bytes.push(words[b >>> 5] >>> 24 - b % 32 & 255);
            return bytes;
          },
          // Convert a byte array to a hex string
          bytesToHex: function(bytes) {
            for (var hex = [], i = 0; i < bytes.length; i++) {
              hex.push((bytes[i] >>> 4).toString(16));
              hex.push((bytes[i] & 15).toString(16));
            }
            return hex.join("");
          },
          // Convert a hex string to a byte array
          hexToBytes: function(hex) {
            for (var bytes = [], c = 0; c < hex.length; c += 2)
              bytes.push(parseInt(hex.substr(c, 2), 16));
            return bytes;
          },
          // Convert a byte array to a base-64 string
          bytesToBase64: function(bytes) {
            for (var base642 = [], i = 0; i < bytes.length; i += 3) {
              var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
              for (var j = 0; j < 4; j++)
                if (i * 8 + j * 6 <= bytes.length * 8)
                  base642.push(base64map.charAt(triplet >>> 6 * (3 - j) & 63));
                else
                  base642.push("=");
            }
            return base642.join("");
          },
          // Convert a base-64 string to a byte array
          base64ToBytes: function(base642) {
            base642 = base642.replace(/[^A-Z0-9+\\/]/ig, "");
            for (var bytes = [], i = 0, imod4 = 0; i < base642.length; imod4 = ++i % 4) {
              if (imod4 == 0)
                continue;
              bytes.push((base64map.indexOf(base642.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base642.charAt(i)) >>> 6 - imod4 * 2);
            }
            return bytes;
          }
        };
        module2.exports = crypt;
      })();
    }
  });

  // node_modules/charenc/charenc.js
  var require_charenc = __commonJS({
    "node_modules/charenc/charenc.js"(exports2, module2) {
      init_tampermonkey();
      var charenc = {
        // UTF-8 encoding
        utf8: {
          // Convert a string to a byte array
          stringToBytes: function(str) {
            return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
          },
          // Convert a byte array to a string
          bytesToString: function(bytes) {
            return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
          }
        },
        // Binary encoding
        bin: {
          // Convert a string to a byte array
          stringToBytes: function(str) {
            for (var bytes = [], i = 0; i < str.length; i++)
              bytes.push(str.charCodeAt(i) & 255);
            return bytes;
          },
          // Convert a byte array to a string
          bytesToString: function(bytes) {
            for (var str = [], i = 0; i < bytes.length; i++)
              str.push(String.fromCharCode(bytes[i]));
            return str.join("");
          }
        }
      };
      module2.exports = charenc;
    }
  });

  // node_modules/is-buffer/index.js
  var require_is_buffer = __commonJS({
    "node_modules/is-buffer/index.js"(exports2, module2) {
      init_tampermonkey();
      module2.exports = function(obj) {
        return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
      };
      function isBuffer(obj) {
        return !!obj.constructor && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj);
      }
      function isSlowBuffer(obj) {
        return typeof obj.readFloatLE === "function" && typeof obj.slice === "function" && isBuffer(obj.slice(0, 0));
      }
    }
  });

  // node_modules/md5/md5.js
  var require_md5 = __commonJS({
    "node_modules/md5/md5.js"(exports2, module2) {
      init_tampermonkey();
      (function() {
        var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer = require_is_buffer(), bin = require_charenc().bin, md54 = function(message, options) {
          if (message.constructor == String)
            if (options && options.encoding === "binary")
              message = bin.stringToBytes(message);
            else
              message = utf8.stringToBytes(message);
          else if (isBuffer(message))
            message = Array.prototype.slice.call(message, 0);
          else if (!Array.isArray(message) && message.constructor !== Uint8Array)
            message = message.toString();
          var m = crypt.bytesToWords(message), l = message.length * 8, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878;
          for (var i = 0; i < m.length; i++) {
            m[i] = (m[i] << 8 | m[i] >>> 24) & 16711935 | (m[i] << 24 | m[i] >>> 8) & 4278255360;
          }
          m[l >>> 5] |= 128 << l % 32;
          m[(l + 64 >>> 9 << 4) + 14] = l;
          var FF = md54._ff, GG = md54._gg, HH = md54._hh, II = md54._ii;
          for (var i = 0; i < m.length; i += 16) {
            var aa = a, bb = b, cc = c, dd = d;
            a = FF(a, b, c, d, m[i + 0], 7, -680876936);
            d = FF(d, a, b, c, m[i + 1], 12, -389564586);
            c = FF(c, d, a, b, m[i + 2], 17, 606105819);
            b = FF(b, c, d, a, m[i + 3], 22, -1044525330);
            a = FF(a, b, c, d, m[i + 4], 7, -176418897);
            d = FF(d, a, b, c, m[i + 5], 12, 1200080426);
            c = FF(c, d, a, b, m[i + 6], 17, -1473231341);
            b = FF(b, c, d, a, m[i + 7], 22, -45705983);
            a = FF(a, b, c, d, m[i + 8], 7, 1770035416);
            d = FF(d, a, b, c, m[i + 9], 12, -1958414417);
            c = FF(c, d, a, b, m[i + 10], 17, -42063);
            b = FF(b, c, d, a, m[i + 11], 22, -1990404162);
            a = FF(a, b, c, d, m[i + 12], 7, 1804603682);
            d = FF(d, a, b, c, m[i + 13], 12, -40341101);
            c = FF(c, d, a, b, m[i + 14], 17, -1502002290);
            b = FF(b, c, d, a, m[i + 15], 22, 1236535329);
            a = GG(a, b, c, d, m[i + 1], 5, -165796510);
            d = GG(d, a, b, c, m[i + 6], 9, -1069501632);
            c = GG(c, d, a, b, m[i + 11], 14, 643717713);
            b = GG(b, c, d, a, m[i + 0], 20, -373897302);
            a = GG(a, b, c, d, m[i + 5], 5, -701558691);
            d = GG(d, a, b, c, m[i + 10], 9, 38016083);
            c = GG(c, d, a, b, m[i + 15], 14, -660478335);
            b = GG(b, c, d, a, m[i + 4], 20, -405537848);
            a = GG(a, b, c, d, m[i + 9], 5, 568446438);
            d = GG(d, a, b, c, m[i + 14], 9, -1019803690);
            c = GG(c, d, a, b, m[i + 3], 14, -187363961);
            b = GG(b, c, d, a, m[i + 8], 20, 1163531501);
            a = GG(a, b, c, d, m[i + 13], 5, -1444681467);
            d = GG(d, a, b, c, m[i + 2], 9, -51403784);
            c = GG(c, d, a, b, m[i + 7], 14, 1735328473);
            b = GG(b, c, d, a, m[i + 12], 20, -1926607734);
            a = HH(a, b, c, d, m[i + 5], 4, -378558);
            d = HH(d, a, b, c, m[i + 8], 11, -2022574463);
            c = HH(c, d, a, b, m[i + 11], 16, 1839030562);
            b = HH(b, c, d, a, m[i + 14], 23, -35309556);
            a = HH(a, b, c, d, m[i + 1], 4, -1530992060);
            d = HH(d, a, b, c, m[i + 4], 11, 1272893353);
            c = HH(c, d, a, b, m[i + 7], 16, -155497632);
            b = HH(b, c, d, a, m[i + 10], 23, -1094730640);
            a = HH(a, b, c, d, m[i + 13], 4, 681279174);
            d = HH(d, a, b, c, m[i + 0], 11, -358537222);
            c = HH(c, d, a, b, m[i + 3], 16, -722521979);
            b = HH(b, c, d, a, m[i + 6], 23, 76029189);
            a = HH(a, b, c, d, m[i + 9], 4, -640364487);
            d = HH(d, a, b, c, m[i + 12], 11, -421815835);
            c = HH(c, d, a, b, m[i + 15], 16, 530742520);
            b = HH(b, c, d, a, m[i + 2], 23, -995338651);
            a = II(a, b, c, d, m[i + 0], 6, -198630844);
            d = II(d, a, b, c, m[i + 7], 10, 1126891415);
            c = II(c, d, a, b, m[i + 14], 15, -1416354905);
            b = II(b, c, d, a, m[i + 5], 21, -57434055);
            a = II(a, b, c, d, m[i + 12], 6, 1700485571);
            d = II(d, a, b, c, m[i + 3], 10, -1894986606);
            c = II(c, d, a, b, m[i + 10], 15, -1051523);
            b = II(b, c, d, a, m[i + 1], 21, -2054922799);
            a = II(a, b, c, d, m[i + 8], 6, 1873313359);
            d = II(d, a, b, c, m[i + 15], 10, -30611744);
            c = II(c, d, a, b, m[i + 6], 15, -1560198380);
            b = II(b, c, d, a, m[i + 13], 21, 1309151649);
            a = II(a, b, c, d, m[i + 4], 6, -145523070);
            d = II(d, a, b, c, m[i + 11], 10, -1120210379);
            c = II(c, d, a, b, m[i + 2], 15, 718787259);
            b = II(b, c, d, a, m[i + 9], 21, -343485551);
            a = a + aa >>> 0;
            b = b + bb >>> 0;
            c = c + cc >>> 0;
            d = d + dd >>> 0;
          }
          return crypt.endian([a, b, c, d]);
        };
        md54._ff = function(a, b, c, d, x, s, t) {
          var n = a + (b & c | ~b & d) + (x >>> 0) + t;
          return (n << s | n >>> 32 - s) + b;
        };
        md54._gg = function(a, b, c, d, x, s, t) {
          var n = a + (b & d | c & ~d) + (x >>> 0) + t;
          return (n << s | n >>> 32 - s) + b;
        };
        md54._hh = function(a, b, c, d, x, s, t) {
          var n = a + (b ^ c ^ d) + (x >>> 0) + t;
          return (n << s | n >>> 32 - s) + b;
        };
        md54._ii = function(a, b, c, d, x, s, t) {
          var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
          return (n << s | n >>> 32 - s) + b;
        };
        md54._blocksize = 16;
        md54._digestsize = 16;
        module2.exports = function(message, options) {
          if (message === void 0 || message === null)
            throw new Error("Illegal argument " + message);
          var digestbytes = crypt.wordsToBytes(md54(message, options));
          return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
        };
      })();
    }
  });

  // node_modules/@protobufjs/aspromise/index.js
  var require_aspromise = __commonJS({
    "node_modules/@protobufjs/aspromise/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = asPromise;
      function asPromise(fn, ctx) {
        var params = new Array(arguments.length - 1), offset3 = 0, index = 2, pending = true;
        while (index < arguments.length)
          params[offset3++] = arguments[index++];
        return new Promise(function executor(resolve, reject) {
          params[offset3] = function callback(err2) {
            if (pending) {
              pending = false;
              if (err2)
                reject(err2);
              else {
                var params2 = new Array(arguments.length - 1), offset4 = 0;
                while (offset4 < params2.length)
                  params2[offset4++] = arguments[offset4];
                resolve.apply(null, params2);
              }
            }
          };
          try {
            fn.apply(ctx || null, params);
          } catch (err2) {
            if (pending) {
              pending = false;
              reject(err2);
            }
          }
        });
      }
    }
  });

  // node_modules/@protobufjs/base64/index.js
  var require_base64 = __commonJS({
    "node_modules/@protobufjs/base64/index.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var base642 = exports2;
      base642.length = function length2(string) {
        var p = string.length;
        if (!p)
          return 0;
        var n = 0;
        while (--p % 4 > 1 && string.charAt(p) === "=")
          ++n;
        return Math.ceil(string.length * 3) / 4 - n;
      };
      var b64 = new Array(64);
      var s64 = new Array(123);
      for (i = 0; i < 64; )
        s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;
      var i;
      base642.encode = function encode(buffer, start, end) {
        var parts = null, chunk = [];
        var i2 = 0, j = 0, t;
        while (start < end) {
          var b = buffer[start++];
          switch (j) {
            case 0:
              chunk[i2++] = b64[b >> 2];
              t = (b & 3) << 4;
              j = 1;
              break;
            case 1:
              chunk[i2++] = b64[t | b >> 4];
              t = (b & 15) << 2;
              j = 2;
              break;
            case 2:
              chunk[i2++] = b64[t | b >> 6];
              chunk[i2++] = b64[b & 63];
              j = 0;
              break;
          }
          if (i2 > 8191) {
            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
            i2 = 0;
          }
        }
        if (j) {
          chunk[i2++] = b64[t];
          chunk[i2++] = 61;
          if (j === 1)
            chunk[i2++] = 61;
        }
        if (parts) {
          if (i2)
            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i2)));
          return parts.join("");
        }
        return String.fromCharCode.apply(String, chunk.slice(0, i2));
      };
      var invalidEncoding = "invalid encoding";
      base642.decode = function decode(string, buffer, offset3) {
        var start = offset3;
        var j = 0, t;
        for (var i2 = 0; i2 < string.length; ) {
          var c = string.charCodeAt(i2++);
          if (c === 61 && j > 1)
            break;
          if ((c = s64[c]) === void 0)
            throw Error(invalidEncoding);
          switch (j) {
            case 0:
              t = c;
              j = 1;
              break;
            case 1:
              buffer[offset3++] = t << 2 | (c & 48) >> 4;
              t = c;
              j = 2;
              break;
            case 2:
              buffer[offset3++] = (t & 15) << 4 | (c & 60) >> 2;
              t = c;
              j = 3;
              break;
            case 3:
              buffer[offset3++] = (t & 3) << 6 | c;
              j = 0;
              break;
          }
        }
        if (j === 1)
          throw Error(invalidEncoding);
        return offset3 - start;
      };
      base642.test = function test(string) {
        return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?\$/.test(string);
      };
    }
  });

  // node_modules/@protobufjs/eventemitter/index.js
  var require_eventemitter = __commonJS({
    "node_modules/@protobufjs/eventemitter/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = EventEmitter;
      function EventEmitter() {
        this._listeners = {};
      }
      EventEmitter.prototype.on = function on(evt, fn, ctx) {
        (this._listeners[evt] || (this._listeners[evt] = [])).push({
          fn,
          ctx: ctx || this
        });
        return this;
      };
      EventEmitter.prototype.off = function off(evt, fn) {
        if (evt === void 0)
          this._listeners = {};
        else {
          if (fn === void 0)
            this._listeners[evt] = [];
          else {
            var listeners = this._listeners[evt];
            for (var i = 0; i < listeners.length; )
              if (listeners[i].fn === fn)
                listeners.splice(i, 1);
              else
                ++i;
          }
        }
        return this;
      };
      EventEmitter.prototype.emit = function emit(evt) {
        var listeners = this._listeners[evt];
        if (listeners) {
          var args = [], i = 1;
          for (; i < arguments.length; )
            args.push(arguments[i++]);
          for (i = 0; i < listeners.length; )
            listeners[i].fn.apply(listeners[i++].ctx, args);
        }
        return this;
      };
    }
  });

  // node_modules/@protobufjs/float/index.js
  var require_float = __commonJS({
    "node_modules/@protobufjs/float/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = factory(factory);
      function factory(exports3) {
        if (typeof Float32Array !== "undefined")
          (function() {
            var f32 = new Float32Array([-0]), f8b = new Uint8Array(f32.buffer), le = f8b[3] === 128;
            function writeFloat_f32_cpy(val, buf, pos) {
              f32[0] = val;
              buf[pos] = f8b[0];
              buf[pos + 1] = f8b[1];
              buf[pos + 2] = f8b[2];
              buf[pos + 3] = f8b[3];
            }
            function writeFloat_f32_rev(val, buf, pos) {
              f32[0] = val;
              buf[pos] = f8b[3];
              buf[pos + 1] = f8b[2];
              buf[pos + 2] = f8b[1];
              buf[pos + 3] = f8b[0];
            }
            exports3.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;
            exports3.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;
            function readFloat_f32_cpy(buf, pos) {
              f8b[0] = buf[pos];
              f8b[1] = buf[pos + 1];
              f8b[2] = buf[pos + 2];
              f8b[3] = buf[pos + 3];
              return f32[0];
            }
            function readFloat_f32_rev(buf, pos) {
              f8b[3] = buf[pos];
              f8b[2] = buf[pos + 1];
              f8b[1] = buf[pos + 2];
              f8b[0] = buf[pos + 3];
              return f32[0];
            }
            exports3.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;
            exports3.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;
          })();
        else
          (function() {
            function writeFloat_ieee754(writeUint, val, buf, pos) {
              var sign = val < 0 ? 1 : 0;
              if (sign)
                val = -val;
              if (val === 0)
                writeUint(1 / val > 0 ? (
                  /* positive */
                  0
                ) : (
                  /* negative 0 */
                  2147483648
                ), buf, pos);
              else if (isNaN(val))
                writeUint(2143289344, buf, pos);
              else if (val > 34028234663852886e22)
                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);
              else if (val < 11754943508222875e-54)
                writeUint((sign << 31 | Math.round(val / 1401298464324817e-60)) >>> 0, buf, pos);
              else {
                var exponent = Math.floor(Math.log(val) / Math.LN2), mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;
                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);
              }
            }
            exports3.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);
            exports3.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);
            function readFloat_ieee754(readUint, buf, pos) {
              var uint = readUint(buf, pos), sign = (uint >> 31) * 2 + 1, exponent = uint >>> 23 & 255, mantissa = uint & 8388607;
              return exponent === 255 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 1401298464324817e-60 * mantissa : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);
            }
            exports3.readFloatLE = readFloat_ieee754.bind(null, readUintLE);
            exports3.readFloatBE = readFloat_ieee754.bind(null, readUintBE);
          })();
        if (typeof Float64Array !== "undefined")
          (function() {
            var f64 = new Float64Array([-0]), f8b = new Uint8Array(f64.buffer), le = f8b[7] === 128;
            function writeDouble_f64_cpy(val, buf, pos) {
              f64[0] = val;
              buf[pos] = f8b[0];
              buf[pos + 1] = f8b[1];
              buf[pos + 2] = f8b[2];
              buf[pos + 3] = f8b[3];
              buf[pos + 4] = f8b[4];
              buf[pos + 5] = f8b[5];
              buf[pos + 6] = f8b[6];
              buf[pos + 7] = f8b[7];
            }
            function writeDouble_f64_rev(val, buf, pos) {
              f64[0] = val;
              buf[pos] = f8b[7];
              buf[pos + 1] = f8b[6];
              buf[pos + 2] = f8b[5];
              buf[pos + 3] = f8b[4];
              buf[pos + 4] = f8b[3];
              buf[pos + 5] = f8b[2];
              buf[pos + 6] = f8b[1];
              buf[pos + 7] = f8b[0];
            }
            exports3.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;
            exports3.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;
            function readDouble_f64_cpy(buf, pos) {
              f8b[0] = buf[pos];
              f8b[1] = buf[pos + 1];
              f8b[2] = buf[pos + 2];
              f8b[3] = buf[pos + 3];
              f8b[4] = buf[pos + 4];
              f8b[5] = buf[pos + 5];
              f8b[6] = buf[pos + 6];
              f8b[7] = buf[pos + 7];
              return f64[0];
            }
            function readDouble_f64_rev(buf, pos) {
              f8b[7] = buf[pos];
              f8b[6] = buf[pos + 1];
              f8b[5] = buf[pos + 2];
              f8b[4] = buf[pos + 3];
              f8b[3] = buf[pos + 4];
              f8b[2] = buf[pos + 5];
              f8b[1] = buf[pos + 6];
              f8b[0] = buf[pos + 7];
              return f64[0];
            }
            exports3.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;
            exports3.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;
          })();
        else
          (function() {
            function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {
              var sign = val < 0 ? 1 : 0;
              if (sign)
                val = -val;
              if (val === 0) {
                writeUint(0, buf, pos + off0);
                writeUint(1 / val > 0 ? (
                  /* positive */
                  0
                ) : (
                  /* negative 0 */
                  2147483648
                ), buf, pos + off1);
              } else if (isNaN(val)) {
                writeUint(0, buf, pos + off0);
                writeUint(2146959360, buf, pos + off1);
              } else if (val > 17976931348623157e292) {
                writeUint(0, buf, pos + off0);
                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);
              } else {
                var mantissa;
                if (val < 22250738585072014e-324) {
                  mantissa = val / 5e-324;
                  writeUint(mantissa >>> 0, buf, pos + off0);
                  writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);
                } else {
                  var exponent = Math.floor(Math.log(val) / Math.LN2);
                  if (exponent === 1024)
                    exponent = 1023;
                  mantissa = val * Math.pow(2, -exponent);
                  writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);
                  writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);
                }
              }
            }
            exports3.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);
            exports3.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);
            function readDouble_ieee754(readUint, off0, off1, buf, pos) {
              var lo = readUint(buf, pos + off0), hi = readUint(buf, pos + off1);
              var sign = (hi >> 31) * 2 + 1, exponent = hi >>> 20 & 2047, mantissa = 4294967296 * (hi & 1048575) + lo;
              return exponent === 2047 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 5e-324 * mantissa : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);
            }
            exports3.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);
            exports3.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);
          })();
        return exports3;
      }
      function writeUintLE(val, buf, pos) {
        buf[pos] = val & 255;
        buf[pos + 1] = val >>> 8 & 255;
        buf[pos + 2] = val >>> 16 & 255;
        buf[pos + 3] = val >>> 24;
      }
      function writeUintBE(val, buf, pos) {
        buf[pos] = val >>> 24;
        buf[pos + 1] = val >>> 16 & 255;
        buf[pos + 2] = val >>> 8 & 255;
        buf[pos + 3] = val & 255;
      }
      function readUintLE(buf, pos) {
        return (buf[pos] | buf[pos + 1] << 8 | buf[pos + 2] << 16 | buf[pos + 3] << 24) >>> 0;
      }
      function readUintBE(buf, pos) {
        return (buf[pos] << 24 | buf[pos + 1] << 16 | buf[pos + 2] << 8 | buf[pos + 3]) >>> 0;
      }
    }
  });

  // node_modules/@protobufjs/inquire/index.js
  var require_inquire = __commonJS({
    "node_modules/@protobufjs/inquire/index.js"(exports, module) {
      "use strict";
      init_tampermonkey();
      module.exports = inquire;
      function inquire(moduleName) {
        try {
          var mod = eval("quire".replace(/^/, "re"))(moduleName);
          if (mod && (mod.length || Object.keys(mod).length))
            return mod;
        } catch (e) {
        }
        return null;
      }
    }
  });

  // node_modules/@protobufjs/utf8/index.js
  var require_utf8 = __commonJS({
    "node_modules/@protobufjs/utf8/index.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var utf8 = exports2;
      utf8.length = function utf8_length(string) {
        var len = 0, c = 0;
        for (var i = 0; i < string.length; ++i) {
          c = string.charCodeAt(i);
          if (c < 128)
            len += 1;
          else if (c < 2048)
            len += 2;
          else if ((c & 64512) === 55296 && (string.charCodeAt(i + 1) & 64512) === 56320) {
            ++i;
            len += 4;
          } else
            len += 3;
        }
        return len;
      };
      utf8.read = function utf8_read(buffer, start, end) {
        var len = end - start;
        if (len < 1)
          return "";
        var parts = null, chunk = [], i = 0, t;
        while (start < end) {
          t = buffer[start++];
          if (t < 128)
            chunk[i++] = t;
          else if (t > 191 && t < 224)
            chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;
          else if (t > 239 && t < 365) {
            t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 65536;
            chunk[i++] = 55296 + (t >> 10);
            chunk[i++] = 56320 + (t & 1023);
          } else
            chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;
          if (i > 8191) {
            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
            i = 0;
          }
        }
        if (parts) {
          if (i)
            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));
          return parts.join("");
        }
        return String.fromCharCode.apply(String, chunk.slice(0, i));
      };
      utf8.write = function utf8_write(string, buffer, offset3) {
        var start = offset3, c1, c2;
        for (var i = 0; i < string.length; ++i) {
          c1 = string.charCodeAt(i);
          if (c1 < 128) {
            buffer[offset3++] = c1;
          } else if (c1 < 2048) {
            buffer[offset3++] = c1 >> 6 | 192;
            buffer[offset3++] = c1 & 63 | 128;
          } else if ((c1 & 64512) === 55296 && ((c2 = string.charCodeAt(i + 1)) & 64512) === 56320) {
            c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);
            ++i;
            buffer[offset3++] = c1 >> 18 | 240;
            buffer[offset3++] = c1 >> 12 & 63 | 128;
            buffer[offset3++] = c1 >> 6 & 63 | 128;
            buffer[offset3++] = c1 & 63 | 128;
          } else {
            buffer[offset3++] = c1 >> 12 | 224;
            buffer[offset3++] = c1 >> 6 & 63 | 128;
            buffer[offset3++] = c1 & 63 | 128;
          }
        }
        return offset3 - start;
      };
    }
  });

  // node_modules/@protobufjs/pool/index.js
  var require_pool = __commonJS({
    "node_modules/@protobufjs/pool/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = pool;
      function pool(alloc, slice, size) {
        var SIZE = size || 8192;
        var MAX = SIZE >>> 1;
        var slab = null;
        var offset3 = SIZE;
        return function pool_alloc(size2) {
          if (size2 < 1 || size2 > MAX)
            return alloc(size2);
          if (offset3 + size2 > SIZE) {
            slab = alloc(SIZE);
            offset3 = 0;
          }
          var buf = slice.call(slab, offset3, offset3 += size2);
          if (offset3 & 7)
            offset3 = (offset3 | 7) + 1;
          return buf;
        };
      }
    }
  });

  // node_modules/protobufjs/src/util/longbits.js
  var require_longbits = __commonJS({
    "node_modules/protobufjs/src/util/longbits.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = LongBits;
      var util = require_minimal();
      function LongBits(lo, hi) {
        this.lo = lo >>> 0;
        this.hi = hi >>> 0;
      }
      var zero = LongBits.zero = new LongBits(0, 0);
      zero.toNumber = function() {
        return 0;
      };
      zero.zzEncode = zero.zzDecode = function() {
        return this;
      };
      zero.length = function() {
        return 1;
      };
      var zeroHash = LongBits.zeroHash = "\\0\\0\\0\\0\\0\\0\\0\\0";
      LongBits.fromNumber = function fromNumber(value) {
        if (value === 0)
          return zero;
        var sign = value < 0;
        if (sign)
          value = -value;
        var lo = value >>> 0, hi = (value - lo) / 4294967296 >>> 0;
        if (sign) {
          hi = ~hi >>> 0;
          lo = ~lo >>> 0;
          if (++lo > 4294967295) {
            lo = 0;
            if (++hi > 4294967295)
              hi = 0;
          }
        }
        return new LongBits(lo, hi);
      };
      LongBits.from = function from(value) {
        if (typeof value === "number")
          return LongBits.fromNumber(value);
        if (util.isString(value)) {
          if (util.Long)
            value = util.Long.fromString(value);
          else
            return LongBits.fromNumber(parseInt(value, 10));
        }
        return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;
      };
      LongBits.prototype.toNumber = function toNumber(unsigned) {
        if (!unsigned && this.hi >>> 31) {
          var lo = ~this.lo + 1 >>> 0, hi = ~this.hi >>> 0;
          if (!lo)
            hi = hi + 1 >>> 0;
          return -(lo + hi * 4294967296);
        }
        return this.lo + this.hi * 4294967296;
      };
      LongBits.prototype.toLong = function toLong(unsigned) {
        return util.Long ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned)) : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };
      };
      var charCodeAt = String.prototype.charCodeAt;
      LongBits.fromHash = function fromHash(hash) {
        if (hash === zeroHash)
          return zero;
        return new LongBits(
          (charCodeAt.call(hash, 0) | charCodeAt.call(hash, 1) << 8 | charCodeAt.call(hash, 2) << 16 | charCodeAt.call(hash, 3) << 24) >>> 0,
          (charCodeAt.call(hash, 4) | charCodeAt.call(hash, 5) << 8 | charCodeAt.call(hash, 6) << 16 | charCodeAt.call(hash, 7) << 24) >>> 0
        );
      };
      LongBits.prototype.toHash = function toHash() {
        return String.fromCharCode(
          this.lo & 255,
          this.lo >>> 8 & 255,
          this.lo >>> 16 & 255,
          this.lo >>> 24,
          this.hi & 255,
          this.hi >>> 8 & 255,
          this.hi >>> 16 & 255,
          this.hi >>> 24
        );
      };
      LongBits.prototype.zzEncode = function zzEncode() {
        var mask = this.hi >> 31;
        this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;
        this.lo = (this.lo << 1 ^ mask) >>> 0;
        return this;
      };
      LongBits.prototype.zzDecode = function zzDecode() {
        var mask = -(this.lo & 1);
        this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;
        this.hi = (this.hi >>> 1 ^ mask) >>> 0;
        return this;
      };
      LongBits.prototype.length = function length2() {
        var part0 = this.lo, part1 = (this.lo >>> 28 | this.hi << 4) >>> 0, part2 = this.hi >>> 24;
        return part2 === 0 ? part1 === 0 ? part0 < 16384 ? part0 < 128 ? 1 : 2 : part0 < 2097152 ? 3 : 4 : part1 < 16384 ? part1 < 128 ? 5 : 6 : part1 < 2097152 ? 7 : 8 : part2 < 128 ? 9 : 10;
      };
    }
  });

  // node_modules/protobufjs/src/util/minimal.js
  var require_minimal = __commonJS({
    "node_modules/protobufjs/src/util/minimal.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var util = exports2;
      util.asPromise = require_aspromise();
      util.base64 = require_base64();
      util.EventEmitter = require_eventemitter();
      util.float = require_float();
      util.inquire = require_inquire();
      util.utf8 = require_utf8();
      util.pool = require_pool();
      util.LongBits = require_longbits();
      util.isNode = Boolean(typeof global !== "undefined" && global && global.process && global.process.versions && global.process.versions.node);
      util.global = util.isNode && global || typeof window !== "undefined" && window || typeof self !== "undefined" && self || exports2;
      util.emptyArray = Object.freeze ? Object.freeze([]) : (
        /* istanbul ignore next */
        []
      );
      util.emptyObject = Object.freeze ? Object.freeze({}) : (
        /* istanbul ignore next */
        {}
      );
      util.isInteger = Number.isInteger || /* istanbul ignore next */
      function isInteger(value) {
        return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
      };
      util.isString = function isString(value) {
        return typeof value === "string" || value instanceof String;
      };
      util.isObject = function isObject2(value) {
        return value && typeof value === "object";
      };
      util.isset = /**
       * Checks if a property on a message is considered to be present.
       * @param {Object} obj Plain object or message instance
       * @param {string} prop Property name
       * @returns {boolean} \`true\` if considered to be present, otherwise \`false\`
       */
      util.isSet = function isSet(obj, prop) {
        var value = obj[prop];
        if (value != null && obj.hasOwnProperty(prop))
          return typeof value !== "object" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;
        return false;
      };
      util.Buffer = function() {
        try {
          var Buffer2 = util.inquire("buffer").Buffer;
          return Buffer2.prototype.utf8Write ? Buffer2 : (
            /* istanbul ignore next */
            null
          );
        } catch (e) {
          return null;
        }
      }();
      util._Buffer_from = null;
      util._Buffer_allocUnsafe = null;
      util.newBuffer = function newBuffer(sizeOrArray) {
        return typeof sizeOrArray === "number" ? util.Buffer ? util._Buffer_allocUnsafe(sizeOrArray) : new util.Array(sizeOrArray) : util.Buffer ? util._Buffer_from(sizeOrArray) : typeof Uint8Array === "undefined" ? sizeOrArray : new Uint8Array(sizeOrArray);
      };
      util.Array = typeof Uint8Array !== "undefined" ? Uint8Array : Array;
      util.Long = /* istanbul ignore next */
      util.global.dcodeIO && /* istanbul ignore next */
      util.global.dcodeIO.Long || /* istanbul ignore next */
      util.global.Long || util.inquire("long");
      util.key2Re = /^true|false|0|1\$/;
      util.key32Re = /^-?(?:0|[1-9][0-9]*)\$/;
      util.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))\$/;
      util.longToHash = function longToHash(value) {
        return value ? util.LongBits.from(value).toHash() : util.LongBits.zeroHash;
      };
      util.longFromHash = function longFromHash(hash, unsigned) {
        var bits2 = util.LongBits.fromHash(hash);
        if (util.Long)
          return util.Long.fromBits(bits2.lo, bits2.hi, unsigned);
        return bits2.toNumber(Boolean(unsigned));
      };
      function merge(dst, src, ifNotSet) {
        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)
          if (dst[keys[i]] === void 0 || !ifNotSet)
            dst[keys[i]] = src[keys[i]];
        return dst;
      }
      util.merge = merge;
      util.lcFirst = function lcFirst(str) {
        return str.charAt(0).toLowerCase() + str.substring(1);
      };
      function newError(name) {
        function CustomError(message, properties) {
          if (!(this instanceof CustomError))
            return new CustomError(message, properties);
          Object.defineProperty(this, "message", { get: function() {
            return message;
          } });
          if (Error.captureStackTrace)
            Error.captureStackTrace(this, CustomError);
          else
            Object.defineProperty(this, "stack", { value: new Error().stack || "" });
          if (properties)
            merge(this, properties);
        }
        CustomError.prototype = Object.create(Error.prototype, {
          constructor: {
            value: CustomError,
            writable: true,
            enumerable: false,
            configurable: true
          },
          name: {
            get: function get() {
              return name;
            },
            set: void 0,
            enumerable: false,
            // configurable: false would accurately preserve the behavior of
            // the original, but I'm guessing that was not intentional.
            // For an actual error subclass, this property would
            // be configurable.
            configurable: true
          },
          toString: {
            value: function value() {
              return this.name + ": " + this.message;
            },
            writable: true,
            enumerable: false,
            configurable: true
          }
        });
        return CustomError;
      }
      util.newError = newError;
      util.ProtocolError = newError("ProtocolError");
      util.oneOfGetter = function getOneOf(fieldNames) {
        var fieldMap = {};
        for (var i = 0; i < fieldNames.length; ++i)
          fieldMap[fieldNames[i]] = 1;
        return function() {
          for (var keys = Object.keys(this), i2 = keys.length - 1; i2 > -1; --i2)
            if (fieldMap[keys[i2]] === 1 && this[keys[i2]] !== void 0 && this[keys[i2]] !== null)
              return keys[i2];
        };
      };
      util.oneOfSetter = function setOneOf(fieldNames) {
        return function(name) {
          for (var i = 0; i < fieldNames.length; ++i)
            if (fieldNames[i] !== name)
              delete this[fieldNames[i]];
        };
      };
      util.toJSONOptions = {
        longs: String,
        enums: String,
        bytes: String,
        json: true
      };
      util._configure = function() {
        var Buffer2 = util.Buffer;
        if (!Buffer2) {
          util._Buffer_from = util._Buffer_allocUnsafe = null;
          return;
        }
        util._Buffer_from = Buffer2.from !== Uint8Array.from && Buffer2.from || /* istanbul ignore next */
        function Buffer_from(value, encoding) {
          return new Buffer2(value, encoding);
        };
        util._Buffer_allocUnsafe = Buffer2.allocUnsafe || /* istanbul ignore next */
        function Buffer_allocUnsafe(size) {
          return new Buffer2(size);
        };
      };
    }
  });

  // node_modules/protobufjs/src/writer.js
  var require_writer = __commonJS({
    "node_modules/protobufjs/src/writer.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Writer2;
      var util = require_minimal();
      var BufferWriter;
      var LongBits = util.LongBits;
      var base642 = util.base64;
      var utf8 = util.utf8;
      function Op(fn, len, val) {
        this.fn = fn;
        this.len = len;
        this.next = void 0;
        this.val = val;
      }
      function noop() {
      }
      function State(writer) {
        this.head = writer.head;
        this.tail = writer.tail;
        this.len = writer.len;
        this.next = writer.states;
      }
      function Writer2() {
        this.len = 0;
        this.head = new Op(noop, 0, 0);
        this.tail = this.head;
        this.states = null;
      }
      var create = function create2() {
        return util.Buffer ? function create_buffer_setup() {
          return (Writer2.create = function create_buffer() {
            return new BufferWriter();
          })();
        } : function create_array() {
          return new Writer2();
        };
      };
      Writer2.create = create();
      Writer2.alloc = function alloc(size) {
        return new util.Array(size);
      };
      if (util.Array !== Array)
        Writer2.alloc = util.pool(Writer2.alloc, util.Array.prototype.subarray);
      Writer2.prototype._push = function push(fn, len, val) {
        this.tail = this.tail.next = new Op(fn, len, val);
        this.len += len;
        return this;
      };
      function writeByte(val, buf, pos) {
        buf[pos] = val & 255;
      }
      function writeVarint32(val, buf, pos) {
        while (val > 127) {
          buf[pos++] = val & 127 | 128;
          val >>>= 7;
        }
        buf[pos] = val;
      }
      function VarintOp(len, val) {
        this.len = len;
        this.next = void 0;
        this.val = val;
      }
      VarintOp.prototype = Object.create(Op.prototype);
      VarintOp.prototype.fn = writeVarint32;
      Writer2.prototype.uint32 = function write_uint32(value) {
        this.len += (this.tail = this.tail.next = new VarintOp(
          (value = value >>> 0) < 128 ? 1 : value < 16384 ? 2 : value < 2097152 ? 3 : value < 268435456 ? 4 : 5,
          value
        )).len;
        return this;
      };
      Writer2.prototype.int32 = function write_int32(value) {
        return value < 0 ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) : this.uint32(value);
      };
      Writer2.prototype.sint32 = function write_sint32(value) {
        return this.uint32((value << 1 ^ value >> 31) >>> 0);
      };
      function writeVarint64(val, buf, pos) {
        while (val.hi) {
          buf[pos++] = val.lo & 127 | 128;
          val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;
          val.hi >>>= 7;
        }
        while (val.lo > 127) {
          buf[pos++] = val.lo & 127 | 128;
          val.lo = val.lo >>> 7;
        }
        buf[pos++] = val.lo;
      }
      Writer2.prototype.uint64 = function write_uint64(value) {
        var bits2 = LongBits.from(value);
        return this._push(writeVarint64, bits2.length(), bits2);
      };
      Writer2.prototype.int64 = Writer2.prototype.uint64;
      Writer2.prototype.sint64 = function write_sint64(value) {
        var bits2 = LongBits.from(value).zzEncode();
        return this._push(writeVarint64, bits2.length(), bits2);
      };
      Writer2.prototype.bool = function write_bool(value) {
        return this._push(writeByte, 1, value ? 1 : 0);
      };
      function writeFixed32(val, buf, pos) {
        buf[pos] = val & 255;
        buf[pos + 1] = val >>> 8 & 255;
        buf[pos + 2] = val >>> 16 & 255;
        buf[pos + 3] = val >>> 24;
      }
      Writer2.prototype.fixed32 = function write_fixed32(value) {
        return this._push(writeFixed32, 4, value >>> 0);
      };
      Writer2.prototype.sfixed32 = Writer2.prototype.fixed32;
      Writer2.prototype.fixed64 = function write_fixed64(value) {
        var bits2 = LongBits.from(value);
        return this._push(writeFixed32, 4, bits2.lo)._push(writeFixed32, 4, bits2.hi);
      };
      Writer2.prototype.sfixed64 = Writer2.prototype.fixed64;
      Writer2.prototype.float = function write_float(value) {
        return this._push(util.float.writeFloatLE, 4, value);
      };
      Writer2.prototype.double = function write_double(value) {
        return this._push(util.float.writeDoubleLE, 8, value);
      };
      var writeBytes = util.Array.prototype.set ? function writeBytes_set(val, buf, pos) {
        buf.set(val, pos);
      } : function writeBytes_for(val, buf, pos) {
        for (var i = 0; i < val.length; ++i)
          buf[pos + i] = val[i];
      };
      Writer2.prototype.bytes = function write_bytes(value) {
        var len = value.length >>> 0;
        if (!len)
          return this._push(writeByte, 1, 0);
        if (util.isString(value)) {
          var buf = Writer2.alloc(len = base642.length(value));
          base642.decode(value, buf, 0);
          value = buf;
        }
        return this.uint32(len)._push(writeBytes, len, value);
      };
      Writer2.prototype.string = function write_string(value) {
        var len = utf8.length(value);
        return len ? this.uint32(len)._push(utf8.write, len, value) : this._push(writeByte, 1, 0);
      };
      Writer2.prototype.fork = function fork() {
        this.states = new State(this);
        this.head = this.tail = new Op(noop, 0, 0);
        this.len = 0;
        return this;
      };
      Writer2.prototype.reset = function reset() {
        if (this.states) {
          this.head = this.states.head;
          this.tail = this.states.tail;
          this.len = this.states.len;
          this.states = this.states.next;
        } else {
          this.head = this.tail = new Op(noop, 0, 0);
          this.len = 0;
        }
        return this;
      };
      Writer2.prototype.ldelim = function ldelim() {
        var head = this.head, tail = this.tail, len = this.len;
        this.reset().uint32(len);
        if (len) {
          this.tail.next = head.next;
          this.tail = tail;
          this.len += len;
        }
        return this;
      };
      Writer2.prototype.finish = function finish() {
        var head = this.head.next, buf = this.constructor.alloc(this.len), pos = 0;
        while (head) {
          head.fn(head.val, buf, pos);
          pos += head.len;
          head = head.next;
        }
        return buf;
      };
      Writer2._configure = function(BufferWriter_) {
        BufferWriter = BufferWriter_;
        Writer2.create = create();
        BufferWriter._configure();
      };
    }
  });

  // node_modules/protobufjs/src/writer_buffer.js
  var require_writer_buffer = __commonJS({
    "node_modules/protobufjs/src/writer_buffer.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = BufferWriter;
      var Writer2 = require_writer();
      (BufferWriter.prototype = Object.create(Writer2.prototype)).constructor = BufferWriter;
      var util = require_minimal();
      function BufferWriter() {
        Writer2.call(this);
      }
      BufferWriter._configure = function() {
        BufferWriter.alloc = util._Buffer_allocUnsafe;
        BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === "set" ? function writeBytesBuffer_set(val, buf, pos) {
          buf.set(val, pos);
        } : function writeBytesBuffer_copy(val, buf, pos) {
          if (val.copy)
            val.copy(buf, pos, 0, val.length);
          else
            for (var i = 0; i < val.length; )
              buf[pos++] = val[i++];
        };
      };
      BufferWriter.prototype.bytes = function write_bytes_buffer(value) {
        if (util.isString(value))
          value = util._Buffer_from(value, "base64");
        var len = value.length >>> 0;
        this.uint32(len);
        if (len)
          this._push(BufferWriter.writeBytesBuffer, len, value);
        return this;
      };
      function writeStringBuffer(val, buf, pos) {
        if (val.length < 40)
          util.utf8.write(val, buf, pos);
        else if (buf.utf8Write)
          buf.utf8Write(val, pos);
        else
          buf.write(val, pos);
      }
      BufferWriter.prototype.string = function write_string_buffer(value) {
        var len = util.Buffer.byteLength(value);
        this.uint32(len);
        if (len)
          this._push(writeStringBuffer, len, value);
        return this;
      };
      BufferWriter._configure();
    }
  });

  // node_modules/protobufjs/src/reader.js
  var require_reader = __commonJS({
    "node_modules/protobufjs/src/reader.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Reader2;
      var util = require_minimal();
      var BufferReader;
      var LongBits = util.LongBits;
      var utf8 = util.utf8;
      function indexOutOfRange(reader, writeLength) {
        return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len);
      }
      function Reader2(buffer) {
        this.buf = buffer;
        this.pos = 0;
        this.len = buffer.length;
      }
      var create_array = typeof Uint8Array !== "undefined" ? function create_typed_array(buffer) {
        if (buffer instanceof Uint8Array || Array.isArray(buffer))
          return new Reader2(buffer);
        throw Error("illegal buffer");
      } : function create_array2(buffer) {
        if (Array.isArray(buffer))
          return new Reader2(buffer);
        throw Error("illegal buffer");
      };
      var create = function create2() {
        return util.Buffer ? function create_buffer_setup(buffer) {
          return (Reader2.create = function create_buffer(buffer2) {
            return util.Buffer.isBuffer(buffer2) ? new BufferReader(buffer2) : create_array(buffer2);
          })(buffer);
        } : create_array;
      };
      Reader2.create = create();
      Reader2.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */
      util.Array.prototype.slice;
      Reader2.prototype.uint32 = /* @__PURE__ */ function read_uint32_setup() {
        var value = 4294967295;
        return function read_uint32() {
          value = (this.buf[this.pos] & 127) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          value = (value | (this.buf[this.pos] & 127) << 7) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          value = (value | (this.buf[this.pos] & 127) << 14) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          value = (value | (this.buf[this.pos] & 127) << 21) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          value = (value | (this.buf[this.pos] & 15) << 28) >>> 0;
          if (this.buf[this.pos++] < 128)
            return value;
          if ((this.pos += 5) > this.len) {
            this.pos = this.len;
            throw indexOutOfRange(this, 10);
          }
          return value;
        };
      }();
      Reader2.prototype.int32 = function read_int32() {
        return this.uint32() | 0;
      };
      Reader2.prototype.sint32 = function read_sint32() {
        var value = this.uint32();
        return value >>> 1 ^ -(value & 1) | 0;
      };
      function readLongVarint() {
        var bits2 = new LongBits(0, 0);
        var i = 0;
        if (this.len - this.pos > 4) {
          for (; i < 4; ++i) {
            bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
            if (this.buf[this.pos++] < 128)
              return bits2;
          }
          bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << 28) >>> 0;
          bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;
          if (this.buf[this.pos++] < 128)
            return bits2;
          i = 0;
        } else {
          for (; i < 3; ++i) {
            if (this.pos >= this.len)
              throw indexOutOfRange(this);
            bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
            if (this.buf[this.pos++] < 128)
              return bits2;
          }
          bits2.lo = (bits2.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;
          return bits2;
        }
        if (this.len - this.pos > 4) {
          for (; i < 5; ++i) {
            bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
            if (this.buf[this.pos++] < 128)
              return bits2;
          }
        } else {
          for (; i < 5; ++i) {
            if (this.pos >= this.len)
              throw indexOutOfRange(this);
            bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
            if (this.buf[this.pos++] < 128)
              return bits2;
          }
        }
        throw Error("invalid varint encoding");
      }
      Reader2.prototype.bool = function read_bool() {
        return this.uint32() !== 0;
      };
      function readFixed32_end(buf, end) {
        return (buf[end - 4] | buf[end - 3] << 8 | buf[end - 2] << 16 | buf[end - 1] << 24) >>> 0;
      }
      Reader2.prototype.fixed32 = function read_fixed32() {
        if (this.pos + 4 > this.len)
          throw indexOutOfRange(this, 4);
        return readFixed32_end(this.buf, this.pos += 4);
      };
      Reader2.prototype.sfixed32 = function read_sfixed32() {
        if (this.pos + 4 > this.len)
          throw indexOutOfRange(this, 4);
        return readFixed32_end(this.buf, this.pos += 4) | 0;
      };
      function readFixed64() {
        if (this.pos + 8 > this.len)
          throw indexOutOfRange(this, 8);
        return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));
      }
      Reader2.prototype.float = function read_float() {
        if (this.pos + 4 > this.len)
          throw indexOutOfRange(this, 4);
        var value = util.float.readFloatLE(this.buf, this.pos);
        this.pos += 4;
        return value;
      };
      Reader2.prototype.double = function read_double() {
        if (this.pos + 8 > this.len)
          throw indexOutOfRange(this, 4);
        var value = util.float.readDoubleLE(this.buf, this.pos);
        this.pos += 8;
        return value;
      };
      Reader2.prototype.bytes = function read_bytes() {
        var length2 = this.uint32(), start = this.pos, end = this.pos + length2;
        if (end > this.len)
          throw indexOutOfRange(this, length2);
        this.pos += length2;
        if (Array.isArray(this.buf))
          return this.buf.slice(start, end);
        if (start === end) {
          var nativeBuffer = util.Buffer;
          return nativeBuffer ? nativeBuffer.alloc(0) : new this.buf.constructor(0);
        }
        return this._slice.call(this.buf, start, end);
      };
      Reader2.prototype.string = function read_string() {
        var bytes = this.bytes();
        return utf8.read(bytes, 0, bytes.length);
      };
      Reader2.prototype.skip = function skip(length2) {
        if (typeof length2 === "number") {
          if (this.pos + length2 > this.len)
            throw indexOutOfRange(this, length2);
          this.pos += length2;
        } else {
          do {
            if (this.pos >= this.len)
              throw indexOutOfRange(this);
          } while (this.buf[this.pos++] & 128);
        }
        return this;
      };
      Reader2.prototype.skipType = function(wireType) {
        switch (wireType) {
          case 0:
            this.skip();
            break;
          case 1:
            this.skip(8);
            break;
          case 2:
            this.skip(this.uint32());
            break;
          case 3:
            while ((wireType = this.uint32() & 7) !== 4) {
              this.skipType(wireType);
            }
            break;
          case 5:
            this.skip(4);
            break;
          default:
            throw Error("invalid wire type " + wireType + " at offset " + this.pos);
        }
        return this;
      };
      Reader2._configure = function(BufferReader_) {
        BufferReader = BufferReader_;
        Reader2.create = create();
        BufferReader._configure();
        var fn = util.Long ? "toLong" : (
          /* istanbul ignore next */
          "toNumber"
        );
        util.merge(Reader2.prototype, {
          int64: function read_int64() {
            return readLongVarint.call(this)[fn](false);
          },
          uint64: function read_uint64() {
            return readLongVarint.call(this)[fn](true);
          },
          sint64: function read_sint64() {
            return readLongVarint.call(this).zzDecode()[fn](false);
          },
          fixed64: function read_fixed64() {
            return readFixed64.call(this)[fn](true);
          },
          sfixed64: function read_sfixed64() {
            return readFixed64.call(this)[fn](false);
          }
        });
      };
    }
  });

  // node_modules/protobufjs/src/reader_buffer.js
  var require_reader_buffer = __commonJS({
    "node_modules/protobufjs/src/reader_buffer.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = BufferReader;
      var Reader2 = require_reader();
      (BufferReader.prototype = Object.create(Reader2.prototype)).constructor = BufferReader;
      var util = require_minimal();
      function BufferReader(buffer) {
        Reader2.call(this, buffer);
      }
      BufferReader._configure = function() {
        if (util.Buffer)
          BufferReader.prototype._slice = util.Buffer.prototype.slice;
      };
      BufferReader.prototype.string = function read_string_buffer() {
        var len = this.uint32();
        return this.buf.utf8Slice ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len)) : this.buf.toString("utf-8", this.pos, this.pos = Math.min(this.pos + len, this.len));
      };
      BufferReader._configure();
    }
  });

  // node_modules/protobufjs/src/rpc/service.js
  var require_service = __commonJS({
    "node_modules/protobufjs/src/rpc/service.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Service;
      var util = require_minimal();
      (Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;
      function Service(rpcImpl, requestDelimited, responseDelimited) {
        if (typeof rpcImpl !== "function")
          throw TypeError("rpcImpl must be a function");
        util.EventEmitter.call(this);
        this.rpcImpl = rpcImpl;
        this.requestDelimited = Boolean(requestDelimited);
        this.responseDelimited = Boolean(responseDelimited);
      }
      Service.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {
        if (!request)
          throw TypeError("request must be specified");
        var self2 = this;
        if (!callback)
          return util.asPromise(rpcCall, self2, method, requestCtor, responseCtor, request);
        if (!self2.rpcImpl) {
          setTimeout(function() {
            callback(Error("already ended"));
          }, 0);
          return void 0;
        }
        try {
          return self2.rpcImpl(
            method,
            requestCtor[self2.requestDelimited ? "encodeDelimited" : "encode"](request).finish(),
            function rpcCallback(err2, response) {
              if (err2) {
                self2.emit("error", err2, method);
                return callback(err2);
              }
              if (response === null) {
                self2.end(
                  /* endedByRPC */
                  true
                );
                return void 0;
              }
              if (!(response instanceof responseCtor)) {
                try {
                  response = responseCtor[self2.responseDelimited ? "decodeDelimited" : "decode"](response);
                } catch (err3) {
                  self2.emit("error", err3, method);
                  return callback(err3);
                }
              }
              self2.emit("data", response, method);
              return callback(null, response);
            }
          );
        } catch (err2) {
          self2.emit("error", err2, method);
          setTimeout(function() {
            callback(err2);
          }, 0);
          return void 0;
        }
      };
      Service.prototype.end = function end(endedByRPC) {
        if (this.rpcImpl) {
          if (!endedByRPC)
            this.rpcImpl(null, null, null);
          this.rpcImpl = null;
          this.emit("end").off();
        }
        return this;
      };
    }
  });

  // node_modules/protobufjs/src/rpc.js
  var require_rpc = __commonJS({
    "node_modules/protobufjs/src/rpc.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var rpc = exports2;
      rpc.Service = require_service();
    }
  });

  // node_modules/protobufjs/src/roots.js
  var require_roots = __commonJS({
    "node_modules/protobufjs/src/roots.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = {};
    }
  });

  // node_modules/protobufjs/src/index-minimal.js
  var require_index_minimal = __commonJS({
    "node_modules/protobufjs/src/index-minimal.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var protobuf = exports2;
      protobuf.build = "minimal";
      protobuf.Writer = require_writer();
      protobuf.BufferWriter = require_writer_buffer();
      protobuf.Reader = require_reader();
      protobuf.BufferReader = require_reader_buffer();
      protobuf.util = require_minimal();
      protobuf.rpc = require_rpc();
      protobuf.roots = require_roots();
      protobuf.configure = configure;
      function configure() {
        protobuf.util._configure();
        protobuf.Writer._configure(protobuf.BufferWriter);
        protobuf.Reader._configure(protobuf.BufferReader);
      }
      configure();
    }
  });

  // node_modules/@protobufjs/codegen/index.js
  var require_codegen = __commonJS({
    "node_modules/@protobufjs/codegen/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = codegen;
      function codegen(functionParams, functionName) {
        if (typeof functionParams === "string") {
          functionName = functionParams;
          functionParams = void 0;
        }
        var body = [];
        function Codegen(formatStringOrScope) {
          if (typeof formatStringOrScope !== "string") {
            var source = toString2();
            if (codegen.verbose)
              console.log("codegen: " + source);
            source = "return " + source;
            if (formatStringOrScope) {
              var scopeKeys = Object.keys(formatStringOrScope), scopeParams = new Array(scopeKeys.length + 1), scopeValues = new Array(scopeKeys.length), scopeOffset = 0;
              while (scopeOffset < scopeKeys.length) {
                scopeParams[scopeOffset] = scopeKeys[scopeOffset];
                scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];
              }
              scopeParams[scopeOffset] = source;
              return Function.apply(null, scopeParams).apply(null, scopeValues);
            }
            return Function(source)();
          }
          var formatParams = new Array(arguments.length - 1), formatOffset = 0;
          while (formatOffset < formatParams.length)
            formatParams[formatOffset] = arguments[++formatOffset];
          formatOffset = 0;
          formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace(\$0, \$1) {
            var value = formatParams[formatOffset++];
            switch (\$1) {
              case "d":
              case "f":
                return String(Number(value));
              case "i":
                return String(Math.floor(value));
              case "j":
                return JSON.stringify(value);
              case "s":
                return String(value);
            }
            return "%";
          });
          if (formatOffset !== formatParams.length)
            throw Error("parameter count mismatch");
          body.push(formatStringOrScope);
          return Codegen;
        }
        function toString2(functionNameOverride) {
          return "function " + (functionNameOverride || functionName || "") + "(" + (functionParams && functionParams.join(",") || "") + "){\\n  " + body.join("\\n  ") + "\\n}";
        }
        Codegen.toString = toString2;
        return Codegen;
      }
      codegen.verbose = false;
    }
  });

  // node_modules/@protobufjs/fetch/index.js
  var require_fetch = __commonJS({
    "node_modules/@protobufjs/fetch/index.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = fetch2;
      var asPromise = require_aspromise();
      var inquire2 = require_inquire();
      var fs = inquire2("fs");
      function fetch2(filename, options, callback) {
        if (typeof options === "function") {
          callback = options;
          options = {};
        } else if (!options)
          options = {};
        if (!callback)
          return asPromise(fetch2, this, filename, options);
        if (!options.xhr && fs && fs.readFile)
          return fs.readFile(filename, function fetchReadFileCallback(err2, contents) {
            return err2 && typeof XMLHttpRequest !== "undefined" ? fetch2.xhr(filename, options, callback) : err2 ? callback(err2) : callback(null, options.binary ? contents : contents.toString("utf8"));
          });
        return fetch2.xhr(filename, options, callback);
      }
      fetch2.xhr = function fetch_xhr(filename, options, callback) {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function fetchOnReadyStateChange() {
          if (xhr.readyState !== 4)
            return void 0;
          if (xhr.status !== 0 && xhr.status !== 200)
            return callback(Error("status " + xhr.status));
          if (options.binary) {
            var buffer = xhr.response;
            if (!buffer) {
              buffer = [];
              for (var i = 0; i < xhr.responseText.length; ++i)
                buffer.push(xhr.responseText.charCodeAt(i) & 255);
            }
            return callback(null, typeof Uint8Array !== "undefined" ? new Uint8Array(buffer) : buffer);
          }
          return callback(null, xhr.responseText);
        };
        if (options.binary) {
          if ("overrideMimeType" in xhr)
            xhr.overrideMimeType("text/plain; charset=x-user-defined");
          xhr.responseType = "arraybuffer";
        }
        xhr.open("GET", filename);
        xhr.send();
      };
    }
  });

  // node_modules/@protobufjs/path/index.js
  var require_path = __commonJS({
    "node_modules/@protobufjs/path/index.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var path = exports2;
      var isAbsolute = (
        /**
         * Tests if the specified path is absolute.
         * @param {string} path Path to test
         * @returns {boolean} \`true\` if path is absolute
         */
        path.isAbsolute = function isAbsolute2(path2) {
          return /^(?:\\/|\\w+:)/.test(path2);
        }
      );
      var normalize = (
        /**
         * Normalizes the specified path.
         * @param {string} path Path to normalize
         * @returns {string} Normalized path
         */
        path.normalize = function normalize2(path2) {
          path2 = path2.replace(/\\\\/g, "/").replace(/\\/{2,}/g, "/");
          var parts = path2.split("/"), absolute = isAbsolute(path2), prefix = "";
          if (absolute)
            prefix = parts.shift() + "/";
          for (var i = 0; i < parts.length; ) {
            if (parts[i] === "..") {
              if (i > 0 && parts[i - 1] !== "..")
                parts.splice(--i, 2);
              else if (absolute)
                parts.splice(i, 1);
              else
                ++i;
            } else if (parts[i] === ".")
              parts.splice(i, 1);
            else
              ++i;
          }
          return prefix + parts.join("/");
        }
      );
      path.resolve = function resolve(originPath, includePath, alreadyNormalized) {
        if (!alreadyNormalized)
          includePath = normalize(includePath);
        if (isAbsolute(includePath))
          return includePath;
        if (!alreadyNormalized)
          originPath = normalize(originPath);
        return (originPath = originPath.replace(/(?:\\/|^)[^/]+\$/, "")).length ? normalize(originPath + "/" + includePath) : includePath;
      };
    }
  });

  // node_modules/protobufjs/src/types.js
  var require_types = __commonJS({
    "node_modules/protobufjs/src/types.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var types = exports2;
      var util = require_util();
      var s = [
        "double",
        // 0
        "float",
        // 1
        "int32",
        // 2
        "uint32",
        // 3
        "sint32",
        // 4
        "fixed32",
        // 5
        "sfixed32",
        // 6
        "int64",
        // 7
        "uint64",
        // 8
        "sint64",
        // 9
        "fixed64",
        // 10
        "sfixed64",
        // 11
        "bool",
        // 12
        "string",
        // 13
        "bytes"
        // 14
      ];
      function bake(values, offset3) {
        var i = 0, o = {};
        offset3 |= 0;
        while (i < values.length)
          o[s[i + offset3]] = values[i++];
        return o;
      }
      types.basic = bake([
        /* double   */
        1,
        /* float    */
        5,
        /* int32    */
        0,
        /* uint32   */
        0,
        /* sint32   */
        0,
        /* fixed32  */
        5,
        /* sfixed32 */
        5,
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        1,
        /* sfixed64 */
        1,
        /* bool     */
        0,
        /* string   */
        2,
        /* bytes    */
        2
      ]);
      types.defaults = bake([
        /* double   */
        0,
        /* float    */
        0,
        /* int32    */
        0,
        /* uint32   */
        0,
        /* sint32   */
        0,
        /* fixed32  */
        0,
        /* sfixed32 */
        0,
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        0,
        /* sfixed64 */
        0,
        /* bool     */
        false,
        /* string   */
        "",
        /* bytes    */
        util.emptyArray,
        /* message  */
        null
      ]);
      types.long = bake([
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        1,
        /* sfixed64 */
        1
      ], 7);
      types.mapKey = bake([
        /* int32    */
        0,
        /* uint32   */
        0,
        /* sint32   */
        0,
        /* fixed32  */
        5,
        /* sfixed32 */
        5,
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        1,
        /* sfixed64 */
        1,
        /* bool     */
        0,
        /* string   */
        2
      ], 2);
      types.packed = bake([
        /* double   */
        1,
        /* float    */
        5,
        /* int32    */
        0,
        /* uint32   */
        0,
        /* sint32   */
        0,
        /* fixed32  */
        5,
        /* sfixed32 */
        5,
        /* int64    */
        0,
        /* uint64   */
        0,
        /* sint64   */
        0,
        /* fixed64  */
        1,
        /* sfixed64 */
        1,
        /* bool     */
        0
      ]);
    }
  });

  // node_modules/protobufjs/src/field.js
  var require_field = __commonJS({
    "node_modules/protobufjs/src/field.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Field2;
      var ReflectionObject2 = require_object();
      ((Field2.prototype = Object.create(ReflectionObject2.prototype)).constructor = Field2).className = "Field";
      var Enum = require_enum();
      var types = require_types();
      var util = require_util();
      var Type3;
      var ruleRe = /^required|optional|repeated\$/;
      Field2.fromJSON = function fromJSON(name, json) {
        return new Field2(name, json.id, json.type, json.rule, json.extend, json.options, json.comment);
      };
      function Field2(name, id, type, rule, extend, options, comment) {
        if (util.isObject(rule)) {
          comment = extend;
          options = rule;
          rule = extend = void 0;
        } else if (util.isObject(extend)) {
          comment = options;
          options = extend;
          extend = void 0;
        }
        ReflectionObject2.call(this, name, options);
        if (!util.isInteger(id) || id < 0)
          throw TypeError("id must be a non-negative integer");
        if (!util.isString(type))
          throw TypeError("type must be a string");
        if (rule !== void 0 && !ruleRe.test(rule = rule.toString().toLowerCase()))
          throw TypeError("rule must be a string rule");
        if (extend !== void 0 && !util.isString(extend))
          throw TypeError("extend must be a string");
        if (rule === "proto3_optional") {
          rule = "optional";
        }
        this.rule = rule && rule !== "optional" ? rule : void 0;
        this.type = type;
        this.id = id;
        this.extend = extend || void 0;
        this.required = rule === "required";
        this.optional = !this.required;
        this.repeated = rule === "repeated";
        this.map = false;
        this.message = null;
        this.partOf = null;
        this.typeDefault = null;
        this.defaultValue = null;
        this.long = util.Long ? types.long[type] !== void 0 : (
          /* istanbul ignore next */
          false
        );
        this.bytes = type === "bytes";
        this.resolvedType = null;
        this.extensionField = null;
        this.declaringField = null;
        this._packed = null;
        this.comment = comment;
      }
      Object.defineProperty(Field2.prototype, "packed", {
        get: function() {
          if (this._packed === null)
            this._packed = this.getOption("packed") !== false;
          return this._packed;
        }
      });
      Field2.prototype.setOption = function setOption(name, value, ifNotSet) {
        if (name === "packed")
          this._packed = null;
        return ReflectionObject2.prototype.setOption.call(this, name, value, ifNotSet);
      };
      Field2.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "rule",
          this.rule !== "optional" && this.rule || void 0,
          "type",
          this.type,
          "id",
          this.id,
          "extend",
          this.extend,
          "options",
          this.options,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      Field2.prototype.resolve = function resolve() {
        if (this.resolved)
          return this;
        if ((this.typeDefault = types.defaults[this.type]) === void 0) {
          this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type);
          if (this.resolvedType instanceof Type3)
            this.typeDefault = null;
          else
            this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]];
        } else if (this.options && this.options.proto3_optional) {
          this.typeDefault = null;
        }
        if (this.options && this.options["default"] != null) {
          this.typeDefault = this.options["default"];
          if (this.resolvedType instanceof Enum && typeof this.typeDefault === "string")
            this.typeDefault = this.resolvedType.values[this.typeDefault];
        }
        if (this.options) {
          if (this.options.packed === true || this.options.packed !== void 0 && this.resolvedType && !(this.resolvedType instanceof Enum))
            delete this.options.packed;
          if (!Object.keys(this.options).length)
            this.options = void 0;
        }
        if (this.long) {
          this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === "u");
          if (Object.freeze)
            Object.freeze(this.typeDefault);
        } else if (this.bytes && typeof this.typeDefault === "string") {
          var buf;
          if (util.base64.test(this.typeDefault))
            util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0);
          else
            util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0);
          this.typeDefault = buf;
        }
        if (this.map)
          this.defaultValue = util.emptyObject;
        else if (this.repeated)
          this.defaultValue = util.emptyArray;
        else
          this.defaultValue = this.typeDefault;
        if (this.parent instanceof Type3)
          this.parent.ctor.prototype[this.name] = this.defaultValue;
        return ReflectionObject2.prototype.resolve.call(this);
      };
      Field2.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {
        if (typeof fieldType === "function")
          fieldType = util.decorateType(fieldType).name;
        else if (fieldType && typeof fieldType === "object")
          fieldType = util.decorateEnum(fieldType).name;
        return function fieldDecorator(prototype, fieldName) {
          util.decorateType(prototype.constructor).add(new Field2(fieldName, fieldId, fieldType, fieldRule, { "default": defaultValue }));
        };
      };
      Field2._configure = function configure(Type_) {
        Type3 = Type_;
      };
    }
  });

  // node_modules/protobufjs/src/oneof.js
  var require_oneof = __commonJS({
    "node_modules/protobufjs/src/oneof.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = OneOf2;
      var ReflectionObject2 = require_object();
      ((OneOf2.prototype = Object.create(ReflectionObject2.prototype)).constructor = OneOf2).className = "OneOf";
      var Field2 = require_field();
      var util = require_util();
      function OneOf2(name, fieldNames, options, comment) {
        if (!Array.isArray(fieldNames)) {
          options = fieldNames;
          fieldNames = void 0;
        }
        ReflectionObject2.call(this, name, options);
        if (!(fieldNames === void 0 || Array.isArray(fieldNames)))
          throw TypeError("fieldNames must be an Array");
        this.oneof = fieldNames || [];
        this.fieldsArray = [];
        this.comment = comment;
      }
      OneOf2.fromJSON = function fromJSON(name, json) {
        return new OneOf2(name, json.oneof, json.options, json.comment);
      };
      OneOf2.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "options",
          this.options,
          "oneof",
          this.oneof,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      function addFieldsToParent(oneof) {
        if (oneof.parent) {
          for (var i = 0; i < oneof.fieldsArray.length; ++i)
            if (!oneof.fieldsArray[i].parent)
              oneof.parent.add(oneof.fieldsArray[i]);
        }
      }
      OneOf2.prototype.add = function add(field) {
        if (!(field instanceof Field2))
          throw TypeError("field must be a Field");
        if (field.parent && field.parent !== this.parent)
          field.parent.remove(field);
        this.oneof.push(field.name);
        this.fieldsArray.push(field);
        field.partOf = this;
        addFieldsToParent(this);
        return this;
      };
      OneOf2.prototype.remove = function remove(field) {
        if (!(field instanceof Field2))
          throw TypeError("field must be a Field");
        var index = this.fieldsArray.indexOf(field);
        if (index < 0)
          throw Error(field + " is not a member of " + this);
        this.fieldsArray.splice(index, 1);
        index = this.oneof.indexOf(field.name);
        if (index > -1)
          this.oneof.splice(index, 1);
        field.partOf = null;
        return this;
      };
      OneOf2.prototype.onAdd = function onAdd(parent) {
        ReflectionObject2.prototype.onAdd.call(this, parent);
        var self2 = this;
        for (var i = 0; i < this.oneof.length; ++i) {
          var field = parent.get(this.oneof[i]);
          if (field && !field.partOf) {
            field.partOf = self2;
            self2.fieldsArray.push(field);
          }
        }
        addFieldsToParent(this);
      };
      OneOf2.prototype.onRemove = function onRemove(parent) {
        for (var i = 0, field; i < this.fieldsArray.length; ++i)
          if ((field = this.fieldsArray[i]).parent)
            field.parent.remove(field);
        ReflectionObject2.prototype.onRemove.call(this, parent);
      };
      OneOf2.d = function decorateOneOf() {
        var fieldNames = new Array(arguments.length), index = 0;
        while (index < arguments.length)
          fieldNames[index] = arguments[index++];
        return function oneOfDecorator(prototype, oneofName) {
          util.decorateType(prototype.constructor).add(new OneOf2(oneofName, fieldNames));
          Object.defineProperty(prototype, oneofName, {
            get: util.oneOfGetter(fieldNames),
            set: util.oneOfSetter(fieldNames)
          });
        };
      };
    }
  });

  // node_modules/protobufjs/src/namespace.js
  var require_namespace = __commonJS({
    "node_modules/protobufjs/src/namespace.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Namespace;
      var ReflectionObject2 = require_object();
      ((Namespace.prototype = Object.create(ReflectionObject2.prototype)).constructor = Namespace).className = "Namespace";
      var Field2 = require_field();
      var util = require_util();
      var OneOf2 = require_oneof();
      var Type3;
      var Service;
      var Enum;
      Namespace.fromJSON = function fromJSON(name, json) {
        return new Namespace(name, json.options).addJSON(json.nested);
      };
      function arrayToJSON(array, toJSONOptions) {
        if (!(array && array.length))
          return void 0;
        var obj = {};
        for (var i = 0; i < array.length; ++i)
          obj[array[i].name] = array[i].toJSON(toJSONOptions);
        return obj;
      }
      Namespace.arrayToJSON = arrayToJSON;
      Namespace.isReservedId = function isReservedId(reserved, id) {
        if (reserved) {
          for (var i = 0; i < reserved.length; ++i)
            if (typeof reserved[i] !== "string" && reserved[i][0] <= id && reserved[i][1] > id)
              return true;
        }
        return false;
      };
      Namespace.isReservedName = function isReservedName(reserved, name) {
        if (reserved) {
          for (var i = 0; i < reserved.length; ++i)
            if (reserved[i] === name)
              return true;
        }
        return false;
      };
      function Namespace(name, options) {
        ReflectionObject2.call(this, name, options);
        this.nested = void 0;
        this._nestedArray = null;
      }
      function clearCache(namespace) {
        namespace._nestedArray = null;
        return namespace;
      }
      Object.defineProperty(Namespace.prototype, "nestedArray", {
        get: function() {
          return this._nestedArray || (this._nestedArray = util.toArray(this.nested));
        }
      });
      Namespace.prototype.toJSON = function toJSON(toJSONOptions) {
        return util.toObject([
          "options",
          this.options,
          "nested",
          arrayToJSON(this.nestedArray, toJSONOptions)
        ]);
      };
      Namespace.prototype.addJSON = function addJSON(nestedJson) {
        var ns = this;
        if (nestedJson) {
          for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) {
            nested = nestedJson[names[i]];
            ns.add(
              // most to least likely
              (nested.fields !== void 0 ? Type3.fromJSON : nested.values !== void 0 ? Enum.fromJSON : nested.methods !== void 0 ? Service.fromJSON : nested.id !== void 0 ? Field2.fromJSON : Namespace.fromJSON)(names[i], nested)
            );
          }
        }
        return this;
      };
      Namespace.prototype.get = function get(name) {
        return this.nested && this.nested[name] || null;
      };
      Namespace.prototype.getEnum = function getEnum(name) {
        if (this.nested && this.nested[name] instanceof Enum)
          return this.nested[name].values;
        throw Error("no such enum: " + name);
      };
      Namespace.prototype.add = function add(object) {
        if (!(object instanceof Field2 && object.extend !== void 0 || object instanceof Type3 || object instanceof OneOf2 || object instanceof Enum || object instanceof Service || object instanceof Namespace))
          throw TypeError("object must be a valid nested object");
        if (!this.nested)
          this.nested = {};
        else {
          var prev = this.get(object.name);
          if (prev) {
            if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type3 || prev instanceof Service)) {
              var nested = prev.nestedArray;
              for (var i = 0; i < nested.length; ++i)
                object.add(nested[i]);
              this.remove(prev);
              if (!this.nested)
                this.nested = {};
              object.setOptions(prev.options, true);
            } else
              throw Error("duplicate name '" + object.name + "' in " + this);
          }
        }
        this.nested[object.name] = object;
        object.onAdd(this);
        return clearCache(this);
      };
      Namespace.prototype.remove = function remove(object) {
        if (!(object instanceof ReflectionObject2))
          throw TypeError("object must be a ReflectionObject");
        if (object.parent !== this)
          throw Error(object + " is not a member of " + this);
        delete this.nested[object.name];
        if (!Object.keys(this.nested).length)
          this.nested = void 0;
        object.onRemove(this);
        return clearCache(this);
      };
      Namespace.prototype.define = function define(path, json) {
        if (util.isString(path))
          path = path.split(".");
        else if (!Array.isArray(path))
          throw TypeError("illegal path");
        if (path && path.length && path[0] === "")
          throw Error("path must be relative");
        var ptr = this;
        while (path.length > 0) {
          var part = path.shift();
          if (ptr.nested && ptr.nested[part]) {
            ptr = ptr.nested[part];
            if (!(ptr instanceof Namespace))
              throw Error("path conflicts with non-namespace objects");
          } else
            ptr.add(ptr = new Namespace(part));
        }
        if (json)
          ptr.addJSON(json);
        return ptr;
      };
      Namespace.prototype.resolveAll = function resolveAll() {
        var nested = this.nestedArray, i = 0;
        while (i < nested.length)
          if (nested[i] instanceof Namespace)
            nested[i++].resolveAll();
          else
            nested[i++].resolve();
        return this.resolve();
      };
      Namespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) {
        if (typeof filterTypes === "boolean") {
          parentAlreadyChecked = filterTypes;
          filterTypes = void 0;
        } else if (filterTypes && !Array.isArray(filterTypes))
          filterTypes = [filterTypes];
        if (util.isString(path) && path.length) {
          if (path === ".")
            return this.root;
          path = path.split(".");
        } else if (!path.length)
          return this;
        if (path[0] === "")
          return this.root.lookup(path.slice(1), filterTypes);
        var found = this.get(path[0]);
        if (found) {
          if (path.length === 1) {
            if (!filterTypes || filterTypes.indexOf(found.constructor) > -1)
              return found;
          } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true)))
            return found;
        } else
          for (var i = 0; i < this.nestedArray.length; ++i)
            if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true)))
              return found;
        if (this.parent === null || parentAlreadyChecked)
          return null;
        return this.parent.lookup(path, filterTypes);
      };
      Namespace.prototype.lookupType = function lookupType(path) {
        var found = this.lookup(path, [Type3]);
        if (!found)
          throw Error("no such type: " + path);
        return found;
      };
      Namespace.prototype.lookupEnum = function lookupEnum(path) {
        var found = this.lookup(path, [Enum]);
        if (!found)
          throw Error("no such Enum '" + path + "' in " + this);
        return found;
      };
      Namespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) {
        var found = this.lookup(path, [Type3, Enum]);
        if (!found)
          throw Error("no such Type or Enum '" + path + "' in " + this);
        return found;
      };
      Namespace.prototype.lookupService = function lookupService(path) {
        var found = this.lookup(path, [Service]);
        if (!found)
          throw Error("no such Service '" + path + "' in " + this);
        return found;
      };
      Namespace._configure = function(Type_, Service_, Enum_) {
        Type3 = Type_;
        Service = Service_;
        Enum = Enum_;
      };
    }
  });

  // node_modules/protobufjs/src/mapfield.js
  var require_mapfield = __commonJS({
    "node_modules/protobufjs/src/mapfield.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = MapField;
      var Field2 = require_field();
      ((MapField.prototype = Object.create(Field2.prototype)).constructor = MapField).className = "MapField";
      var types = require_types();
      var util = require_util();
      function MapField(name, id, keyType, type, options, comment) {
        Field2.call(this, name, id, type, void 0, void 0, options, comment);
        if (!util.isString(keyType))
          throw TypeError("keyType must be a string");
        this.keyType = keyType;
        this.resolvedKeyType = null;
        this.map = true;
      }
      MapField.fromJSON = function fromJSON(name, json) {
        return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);
      };
      MapField.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "keyType",
          this.keyType,
          "type",
          this.type,
          "id",
          this.id,
          "extend",
          this.extend,
          "options",
          this.options,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      MapField.prototype.resolve = function resolve() {
        if (this.resolved)
          return this;
        if (types.mapKey[this.keyType] === void 0)
          throw Error("invalid key type: " + this.keyType);
        return Field2.prototype.resolve.call(this);
      };
      MapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {
        if (typeof fieldValueType === "function")
          fieldValueType = util.decorateType(fieldValueType).name;
        else if (fieldValueType && typeof fieldValueType === "object")
          fieldValueType = util.decorateEnum(fieldValueType).name;
        return function mapFieldDecorator(prototype, fieldName) {
          util.decorateType(prototype.constructor).add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));
        };
      };
    }
  });

  // node_modules/protobufjs/src/method.js
  var require_method = __commonJS({
    "node_modules/protobufjs/src/method.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Method;
      var ReflectionObject2 = require_object();
      ((Method.prototype = Object.create(ReflectionObject2.prototype)).constructor = Method).className = "Method";
      var util = require_util();
      function Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) {
        if (util.isObject(requestStream)) {
          options = requestStream;
          requestStream = responseStream = void 0;
        } else if (util.isObject(responseStream)) {
          options = responseStream;
          responseStream = void 0;
        }
        if (!(type === void 0 || util.isString(type)))
          throw TypeError("type must be a string");
        if (!util.isString(requestType))
          throw TypeError("requestType must be a string");
        if (!util.isString(responseType))
          throw TypeError("responseType must be a string");
        ReflectionObject2.call(this, name, options);
        this.type = type || "rpc";
        this.requestType = requestType;
        this.requestStream = requestStream ? true : void 0;
        this.responseType = responseType;
        this.responseStream = responseStream ? true : void 0;
        this.resolvedRequestType = null;
        this.resolvedResponseType = null;
        this.comment = comment;
        this.parsedOptions = parsedOptions;
      }
      Method.fromJSON = function fromJSON(name, json) {
        return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions);
      };
      Method.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "type",
          this.type !== "rpc" && /* istanbul ignore next */
          this.type || void 0,
          "requestType",
          this.requestType,
          "requestStream",
          this.requestStream,
          "responseType",
          this.responseType,
          "responseStream",
          this.responseStream,
          "options",
          this.options,
          "comment",
          keepComments ? this.comment : void 0,
          "parsedOptions",
          this.parsedOptions
        ]);
      };
      Method.prototype.resolve = function resolve() {
        if (this.resolved)
          return this;
        this.resolvedRequestType = this.parent.lookupType(this.requestType);
        this.resolvedResponseType = this.parent.lookupType(this.responseType);
        return ReflectionObject2.prototype.resolve.call(this);
      };
    }
  });

  // node_modules/protobufjs/src/service.js
  var require_service2 = __commonJS({
    "node_modules/protobufjs/src/service.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Service;
      var Namespace = require_namespace();
      ((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = "Service";
      var Method = require_method();
      var util = require_util();
      var rpc = require_rpc();
      function Service(name, options) {
        Namespace.call(this, name, options);
        this.methods = {};
        this._methodsArray = null;
      }
      Service.fromJSON = function fromJSON(name, json) {
        var service = new Service(name, json.options);
        if (json.methods)
          for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i)
            service.add(Method.fromJSON(names[i], json.methods[names[i]]));
        if (json.nested)
          service.addJSON(json.nested);
        service.comment = json.comment;
        return service;
      };
      Service.prototype.toJSON = function toJSON(toJSONOptions) {
        var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "options",
          inherited && inherited.options || void 0,
          "methods",
          Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */
          {},
          "nested",
          inherited && inherited.nested || void 0,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      Object.defineProperty(Service.prototype, "methodsArray", {
        get: function() {
          return this._methodsArray || (this._methodsArray = util.toArray(this.methods));
        }
      });
      function clearCache(service) {
        service._methodsArray = null;
        return service;
      }
      Service.prototype.get = function get(name) {
        return this.methods[name] || Namespace.prototype.get.call(this, name);
      };
      Service.prototype.resolveAll = function resolveAll() {
        var methods = this.methodsArray;
        for (var i = 0; i < methods.length; ++i)
          methods[i].resolve();
        return Namespace.prototype.resolve.call(this);
      };
      Service.prototype.add = function add(object) {
        if (this.get(object.name))
          throw Error("duplicate name '" + object.name + "' in " + this);
        if (object instanceof Method) {
          this.methods[object.name] = object;
          object.parent = this;
          return clearCache(this);
        }
        return Namespace.prototype.add.call(this, object);
      };
      Service.prototype.remove = function remove(object) {
        if (object instanceof Method) {
          if (this.methods[object.name] !== object)
            throw Error(object + " is not a member of " + this);
          delete this.methods[object.name];
          object.parent = null;
          return clearCache(this);
        }
        return Namespace.prototype.remove.call(this, object);
      };
      Service.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) {
        var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited);
        for (var i = 0, method; i < /* initializes */
        this.methodsArray.length; ++i) {
          var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^\$\\w_]/g, "");
          rpcService[methodName] = util.codegen(["r", "c"], util.isReserved(methodName) ? methodName + "_" : methodName)("return this.rpcCall(m,q,s,r,c)")({
            m: method,
            q: method.resolvedRequestType.ctor,
            s: method.resolvedResponseType.ctor
          });
        }
        return rpcService;
      };
    }
  });

  // node_modules/protobufjs/src/message.js
  var require_message = __commonJS({
    "node_modules/protobufjs/src/message.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Message2;
      var util = require_minimal();
      function Message2(properties) {
        if (properties)
          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
            this[keys[i]] = properties[keys[i]];
      }
      Message2.create = function create(properties) {
        return this.\$type.create(properties);
      };
      Message2.encode = function encode(message, writer) {
        return this.\$type.encode(message, writer);
      };
      Message2.encodeDelimited = function encodeDelimited(message, writer) {
        return this.\$type.encodeDelimited(message, writer);
      };
      Message2.decode = function decode(reader) {
        return this.\$type.decode(reader);
      };
      Message2.decodeDelimited = function decodeDelimited(reader) {
        return this.\$type.decodeDelimited(reader);
      };
      Message2.verify = function verify(message) {
        return this.\$type.verify(message);
      };
      Message2.fromObject = function fromObject(object) {
        return this.\$type.fromObject(object);
      };
      Message2.toObject = function toObject2(message, options) {
        return this.\$type.toObject(message, options);
      };
      Message2.prototype.toJSON = function toJSON() {
        return this.\$type.toObject(this, util.toJSONOptions);
      };
    }
  });

  // node_modules/protobufjs/src/decoder.js
  var require_decoder = __commonJS({
    "node_modules/protobufjs/src/decoder.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = decoder;
      var Enum = require_enum();
      var types = require_types();
      var util = require_util();
      function missing(field) {
        return "missing required '" + field.name + "'";
      }
      function decoder(mtype) {
        var gen = util.codegen(["r", "l"], mtype.name + "\$decode")("if(!(r instanceof Reader))")("r=Reader.create(r)")("var c=l===undefined?r.len:r.pos+l,m=new this.ctor" + (mtype.fieldsArray.filter(function(field2) {
          return field2.map;
        }).length ? ",k,value" : ""))("while(r.pos<c){")("var t=r.uint32()");
        if (mtype.group)
          gen("if((t&7)===4)")("break");
        gen("switch(t>>>3){");
        var i = 0;
        for (; i < /* initializes */
        mtype.fieldsArray.length; ++i) {
          var field = mtype._fieldsArray[i].resolve(), type = field.resolvedType instanceof Enum ? "int32" : field.type, ref = "m" + util.safeProp(field.name);
          gen("case %i: {", field.id);
          if (field.map) {
            gen("if(%s===util.emptyObject)", ref)("%s={}", ref)("var c2 = r.uint32()+r.pos");
            if (types.defaults[field.keyType] !== void 0)
              gen("k=%j", types.defaults[field.keyType]);
            else
              gen("k=null");
            if (types.defaults[type] !== void 0)
              gen("value=%j", types.defaults[type]);
            else
              gen("value=null");
            gen("while(r.pos<c2){")("var tag2=r.uint32()")("switch(tag2>>>3){")("case 1: k=r.%s(); break", field.keyType)("case 2:");
            if (types.basic[type] === void 0)
              gen("value=types[%i].decode(r,r.uint32())", i);
            else
              gen("value=r.%s()", type);
            gen("break")("default:")("r.skipType(tag2&7)")("break")("}")("}");
            if (types.long[field.keyType] !== void 0)
              gen('%s[typeof k==="object"?util.longToHash(k):k]=value', ref);
            else
              gen("%s[k]=value", ref);
          } else if (field.repeated) {
            gen("if(!(%s&&%s.length))", ref, ref)("%s=[]", ref);
            if (types.packed[type] !== void 0)
              gen("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos<c2)")("%s.push(r.%s())", ref, type)("}else");
            if (types.basic[type] === void 0)
              gen(field.resolvedType.group ? "%s.push(types[%i].decode(r))" : "%s.push(types[%i].decode(r,r.uint32()))", ref, i);
            else
              gen("%s.push(r.%s())", ref, type);
          } else if (types.basic[type] === void 0)
            gen(field.resolvedType.group ? "%s=types[%i].decode(r)" : "%s=types[%i].decode(r,r.uint32())", ref, i);
          else
            gen("%s=r.%s()", ref, type);
          gen("break")("}");
        }
        gen("default:")("r.skipType(t&7)")("break")("}")("}");
        for (i = 0; i < mtype._fieldsArray.length; ++i) {
          var rfield = mtype._fieldsArray[i];
          if (rfield.required)
            gen("if(!m.hasOwnProperty(%j))", rfield.name)("throw util.ProtocolError(%j,{instance:m})", missing(rfield));
        }
        return gen("return m");
      }
    }
  });

  // node_modules/protobufjs/src/verifier.js
  var require_verifier = __commonJS({
    "node_modules/protobufjs/src/verifier.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = verifier;
      var Enum = require_enum();
      var util = require_util();
      function invalid(field, expected) {
        return field.name + ": " + expected + (field.repeated && expected !== "array" ? "[]" : field.map && expected !== "object" ? "{k:" + field.keyType + "}" : "") + " expected";
      }
      function genVerifyValue(gen, field, fieldIndex, ref) {
        if (field.resolvedType) {
          if (field.resolvedType instanceof Enum) {
            gen("switch(%s){", ref)("default:")("return%j", invalid(field, "enum value"));
            for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j)
              gen("case %i:", field.resolvedType.values[keys[j]]);
            gen("break")("}");
          } else {
            gen("{")("var e=types[%i].verify(%s);", fieldIndex, ref)("if(e)")("return%j+e", field.name + ".")("}");
          }
        } else {
          switch (field.type) {
            case "int32":
            case "uint32":
            case "sint32":
            case "fixed32":
            case "sfixed32":
              gen("if(!util.isInteger(%s))", ref)("return%j", invalid(field, "integer"));
              break;
            case "int64":
            case "uint64":
            case "sint64":
            case "fixed64":
            case "sfixed64":
              gen("if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))", ref, ref, ref, ref)("return%j", invalid(field, "integer|Long"));
              break;
            case "float":
            case "double":
              gen('if(typeof %s!=="number")', ref)("return%j", invalid(field, "number"));
              break;
            case "bool":
              gen('if(typeof %s!=="boolean")', ref)("return%j", invalid(field, "boolean"));
              break;
            case "string":
              gen("if(!util.isString(%s))", ref)("return%j", invalid(field, "string"));
              break;
            case "bytes":
              gen('if(!(%s&&typeof %s.length==="number"||util.isString(%s)))', ref, ref, ref)("return%j", invalid(field, "buffer"));
              break;
          }
        }
        return gen;
      }
      function genVerifyKey(gen, field, ref) {
        switch (field.keyType) {
          case "int32":
          case "uint32":
          case "sint32":
          case "fixed32":
          case "sfixed32":
            gen("if(!util.key32Re.test(%s))", ref)("return%j", invalid(field, "integer key"));
            break;
          case "int64":
          case "uint64":
          case "sint64":
          case "fixed64":
          case "sfixed64":
            gen("if(!util.key64Re.test(%s))", ref)("return%j", invalid(field, "integer|Long key"));
            break;
          case "bool":
            gen("if(!util.key2Re.test(%s))", ref)("return%j", invalid(field, "boolean key"));
            break;
        }
        return gen;
      }
      function verifier(mtype) {
        var gen = util.codegen(["m"], mtype.name + "\$verify")('if(typeof m!=="object"||m===null)')("return%j", "object expected");
        var oneofs = mtype.oneofsArray, seenFirstField = {};
        if (oneofs.length)
          gen("var p={}");
        for (var i = 0; i < /* initializes */
        mtype.fieldsArray.length; ++i) {
          var field = mtype._fieldsArray[i].resolve(), ref = "m" + util.safeProp(field.name);
          if (field.optional)
            gen("if(%s!=null&&m.hasOwnProperty(%j)){", ref, field.name);
          if (field.map) {
            gen("if(!util.isObject(%s))", ref)("return%j", invalid(field, "object"))("var k=Object.keys(%s)", ref)("for(var i=0;i<k.length;++i){");
            genVerifyKey(gen, field, "k[i]");
            genVerifyValue(gen, field, i, ref + "[k[i]]")("}");
          } else if (field.repeated) {
            gen("if(!Array.isArray(%s))", ref)("return%j", invalid(field, "array"))("for(var i=0;i<%s.length;++i){", ref);
            genVerifyValue(gen, field, i, ref + "[i]")("}");
          } else {
            if (field.partOf) {
              var oneofProp = util.safeProp(field.partOf.name);
              if (seenFirstField[field.partOf.name] === 1)
                gen("if(p%s===1)", oneofProp)("return%j", field.partOf.name + ": multiple values");
              seenFirstField[field.partOf.name] = 1;
              gen("p%s=1", oneofProp);
            }
            genVerifyValue(gen, field, i, ref);
          }
          if (field.optional)
            gen("}");
        }
        return gen("return null");
      }
    }
  });

  // node_modules/protobufjs/src/converter.js
  var require_converter = __commonJS({
    "node_modules/protobufjs/src/converter.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var converter = exports2;
      var Enum = require_enum();
      var util = require_util();
      function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
        var defaultAlreadyEmitted = false;
        if (field.resolvedType) {
          if (field.resolvedType instanceof Enum) {
            gen("switch(d%s){", prop);
            for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {
              if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) {
                gen("default:")('if(typeof(d%s)==="number"){m%s=d%s;break}', prop, prop, prop);
                if (!field.repeated)
                  gen("break");
                defaultAlreadyEmitted = true;
              }
              gen("case%j:", keys[i])("case %i:", values[keys[i]])("m%s=%j", prop, values[keys[i]])("break");
            }
            gen("}");
          } else
            gen('if(typeof d%s!=="object")', prop)("throw TypeError(%j)", field.fullName + ": object expected")("m%s=types[%i].fromObject(d%s)", prop, fieldIndex, prop);
        } else {
          var isUnsigned = false;
          switch (field.type) {
            case "double":
            case "float":
              gen("m%s=Number(d%s)", prop, prop);
              break;
            case "uint32":
            case "fixed32":
              gen("m%s=d%s>>>0", prop, prop);
              break;
            case "int32":
            case "sint32":
            case "sfixed32":
              gen("m%s=d%s|0", prop, prop);
              break;
            case "uint64":
              isUnsigned = true;
            case "int64":
            case "sint64":
            case "fixed64":
            case "sfixed64":
              gen("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j", prop, prop, isUnsigned)('else if(typeof d%s==="string")', prop)("m%s=parseInt(d%s,10)", prop, prop)('else if(typeof d%s==="number")', prop)("m%s=d%s", prop, prop)('else if(typeof d%s==="object")', prop)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : "");
              break;
            case "bytes":
              gen('if(typeof d%s==="string")', prop)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)("else if(d%s.length >= 0)", prop)("m%s=d%s", prop, prop);
              break;
            case "string":
              gen("m%s=String(d%s)", prop, prop);
              break;
            case "bool":
              gen("m%s=Boolean(d%s)", prop, prop);
              break;
          }
        }
        return gen;
      }
      converter.fromObject = function fromObject(mtype) {
        var fields = mtype.fieldsArray;
        var gen = util.codegen(["d"], mtype.name + "\$fromObject")("if(d instanceof this.ctor)")("return d");
        if (!fields.length)
          return gen("return new this.ctor");
        gen("var m=new this.ctor");
        for (var i = 0; i < fields.length; ++i) {
          var field = fields[i].resolve(), prop = util.safeProp(field.name);
          if (field.map) {
            gen("if(d%s){", prop)('if(typeof d%s!=="object")', prop)("throw TypeError(%j)", field.fullName + ": object expected")("m%s={}", prop)("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);
            genValuePartial_fromObject(
              gen,
              field,
              /* not sorted */
              i,
              prop + "[ks[i]]"
            )("}")("}");
          } else if (field.repeated) {
            gen("if(d%s){", prop)("if(!Array.isArray(d%s))", prop)("throw TypeError(%j)", field.fullName + ": array expected")("m%s=[]", prop)("for(var i=0;i<d%s.length;++i){", prop);
            genValuePartial_fromObject(
              gen,
              field,
              /* not sorted */
              i,
              prop + "[i]"
            )("}")("}");
          } else {
            if (!(field.resolvedType instanceof Enum))
              gen("if(d%s!=null){", prop);
            genValuePartial_fromObject(
              gen,
              field,
              /* not sorted */
              i,
              prop
            );
            if (!(field.resolvedType instanceof Enum))
              gen("}");
          }
        }
        return gen("return m");
      };
      function genValuePartial_toObject(gen, field, fieldIndex, prop) {
        if (field.resolvedType) {
          if (field.resolvedType instanceof Enum)
            gen("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s", prop, fieldIndex, prop, prop, fieldIndex, prop, prop);
          else
            gen("d%s=types[%i].toObject(m%s,o)", prop, fieldIndex, prop);
        } else {
          var isUnsigned = false;
          switch (field.type) {
            case "double":
            case "float":
              gen("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s", prop, prop, prop, prop);
              break;
            case "uint64":
              isUnsigned = true;
            case "int64":
            case "sint64":
            case "fixed64":
            case "sfixed64":
              gen('if(typeof m%s==="number")', prop)("d%s=o.longs===String?String(m%s):m%s", prop, prop, prop)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s", prop, prop, prop, prop, isUnsigned ? "true" : "", prop);
              break;
            case "bytes":
              gen("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s", prop, prop, prop, prop, prop);
              break;
            default:
              gen("d%s=m%s", prop, prop);
              break;
          }
        }
        return gen;
      }
      converter.toObject = function toObject2(mtype) {
        var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);
        if (!fields.length)
          return util.codegen()("return {}");
        var gen = util.codegen(["m", "o"], mtype.name + "\$toObject")("if(!o)")("o={}")("var d={}");
        var repeatedFields = [], mapFields = [], normalFields = [], i = 0;
        for (; i < fields.length; ++i)
          if (!fields[i].partOf)
            (fields[i].resolve().repeated ? repeatedFields : fields[i].map ? mapFields : normalFields).push(fields[i]);
        if (repeatedFields.length) {
          gen("if(o.arrays||o.defaults){");
          for (i = 0; i < repeatedFields.length; ++i)
            gen("d%s=[]", util.safeProp(repeatedFields[i].name));
          gen("}");
        }
        if (mapFields.length) {
          gen("if(o.objects||o.defaults){");
          for (i = 0; i < mapFields.length; ++i)
            gen("d%s={}", util.safeProp(mapFields[i].name));
          gen("}");
        }
        if (normalFields.length) {
          gen("if(o.defaults){");
          for (i = 0; i < normalFields.length; ++i) {
            var field = normalFields[i], prop = util.safeProp(field.name);
            if (field.resolvedType instanceof Enum)
              gen("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);
            else if (field.long)
              gen("if(util.Long){")("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n", prop)("}else")("d%s=o.longs===String?%j:%i", prop, field.typeDefault.toString(), field.typeDefault.toNumber());
            else if (field.bytes) {
              var arrayDefault = "[" + Array.prototype.slice.call(field.typeDefault).join(",") + "]";
              gen("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))("else{")("d%s=%s", prop, arrayDefault)("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)("}");
            } else
              gen("d%s=%j", prop, field.typeDefault);
          }
          gen("}");
        }
        var hasKs2 = false;
        for (i = 0; i < fields.length; ++i) {
          var field = fields[i], index = mtype._fieldsArray.indexOf(field), prop = util.safeProp(field.name);
          if (field.map) {
            if (!hasKs2) {
              hasKs2 = true;
              gen("var ks2");
            }
            gen("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)("d%s={}", prop)("for(var j=0;j<ks2.length;++j){");
            genValuePartial_toObject(
              gen,
              field,
              /* sorted */
              index,
              prop + "[ks2[j]]"
            )("}");
          } else if (field.repeated) {
            gen("if(m%s&&m%s.length){", prop, prop)("d%s=[]", prop)("for(var j=0;j<m%s.length;++j){", prop);
            genValuePartial_toObject(
              gen,
              field,
              /* sorted */
              index,
              prop + "[j]"
            )("}");
          } else {
            gen("if(m%s!=null&&m.hasOwnProperty(%j)){", prop, field.name);
            genValuePartial_toObject(
              gen,
              field,
              /* sorted */
              index,
              prop
            );
            if (field.partOf)
              gen("if(o.oneofs)")("d%s=%j", util.safeProp(field.partOf.name), field.name);
          }
          gen("}");
        }
        return gen("return d");
      };
    }
  });

  // node_modules/protobufjs/src/wrappers.js
  var require_wrappers = __commonJS({
    "node_modules/protobufjs/src/wrappers.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var wrappers = exports2;
      var Message2 = require_message();
      wrappers[".google.protobuf.Any"] = {
        fromObject: function(object) {
          if (object && object["@type"]) {
            var name = object["@type"].substring(object["@type"].lastIndexOf("/") + 1);
            var type = this.lookup(name);
            if (type) {
              var type_url = object["@type"].charAt(0) === "." ? object["@type"].slice(1) : object["@type"];
              if (type_url.indexOf("/") === -1) {
                type_url = "/" + type_url;
              }
              return this.create({
                type_url,
                value: type.encode(type.fromObject(object)).finish()
              });
            }
          }
          return this.fromObject(object);
        },
        toObject: function(message, options) {
          var googleApi = "type.googleapis.com/";
          var prefix = "";
          var name = "";
          if (options && options.json && message.type_url && message.value) {
            name = message.type_url.substring(message.type_url.lastIndexOf("/") + 1);
            prefix = message.type_url.substring(0, message.type_url.lastIndexOf("/") + 1);
            var type = this.lookup(name);
            if (type)
              message = type.decode(message.value);
          }
          if (!(message instanceof this.ctor) && message instanceof Message2) {
            var object = message.\$type.toObject(message, options);
            var messageName = message.\$type.fullName[0] === "." ? message.\$type.fullName.slice(1) : message.\$type.fullName;
            if (prefix === "") {
              prefix = googleApi;
            }
            name = prefix + messageName;
            object["@type"] = name;
            return object;
          }
          return this.toObject(message, options);
        }
      };
    }
  });

  // node_modules/protobufjs/src/type.js
  var require_type = __commonJS({
    "node_modules/protobufjs/src/type.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Type3;
      var Namespace = require_namespace();
      ((Type3.prototype = Object.create(Namespace.prototype)).constructor = Type3).className = "Type";
      var Enum = require_enum();
      var OneOf2 = require_oneof();
      var Field2 = require_field();
      var MapField = require_mapfield();
      var Service = require_service2();
      var Message2 = require_message();
      var Reader2 = require_reader();
      var Writer2 = require_writer();
      var util = require_util();
      var encoder = require_encoder();
      var decoder = require_decoder();
      var verifier = require_verifier();
      var converter = require_converter();
      var wrappers = require_wrappers();
      function Type3(name, options) {
        Namespace.call(this, name, options);
        this.fields = {};
        this.oneofs = void 0;
        this.extensions = void 0;
        this.reserved = void 0;
        this.group = void 0;
        this._fieldsById = null;
        this._fieldsArray = null;
        this._oneofsArray = null;
        this._ctor = null;
      }
      Object.defineProperties(Type3.prototype, {
        /**
         * Message fields by id.
         * @name Type#fieldsById
         * @type {Object.<number,Field>}
         * @readonly
         */
        fieldsById: {
          get: function() {
            if (this._fieldsById)
              return this._fieldsById;
            this._fieldsById = {};
            for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) {
              var field = this.fields[names[i]], id = field.id;
              if (this._fieldsById[id])
                throw Error("duplicate id " + id + " in " + this);
              this._fieldsById[id] = field;
            }
            return this._fieldsById;
          }
        },
        /**
         * Fields of this message as an array for iteration.
         * @name Type#fieldsArray
         * @type {Field[]}
         * @readonly
         */
        fieldsArray: {
          get: function() {
            return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields));
          }
        },
        /**
         * Oneofs of this message as an array for iteration.
         * @name Type#oneofsArray
         * @type {OneOf[]}
         * @readonly
         */
        oneofsArray: {
          get: function() {
            return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs));
          }
        },
        /**
         * The registered constructor, if any registered, otherwise a generic constructor.
         * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.
         * @name Type#ctor
         * @type {Constructor<{}>}
         */
        ctor: {
          get: function() {
            return this._ctor || (this.ctor = Type3.generateConstructor(this)());
          },
          set: function(ctor) {
            var prototype = ctor.prototype;
            if (!(prototype instanceof Message2)) {
              (ctor.prototype = new Message2()).constructor = ctor;
              util.merge(ctor.prototype, prototype);
            }
            ctor.\$type = ctor.prototype.\$type = this;
            util.merge(ctor, Message2, true);
            this._ctor = ctor;
            var i = 0;
            for (; i < /* initializes */
            this.fieldsArray.length; ++i)
              this._fieldsArray[i].resolve();
            var ctorProperties = {};
            for (i = 0; i < /* initializes */
            this.oneofsArray.length; ++i)
              ctorProperties[this._oneofsArray[i].resolve().name] = {
                get: util.oneOfGetter(this._oneofsArray[i].oneof),
                set: util.oneOfSetter(this._oneofsArray[i].oneof)
              };
            if (i)
              Object.defineProperties(ctor.prototype, ctorProperties);
          }
        }
      });
      Type3.generateConstructor = function generateConstructor(mtype) {
        var gen = util.codegen(["p"], mtype.name);
        for (var i = 0, field; i < mtype.fieldsArray.length; ++i)
          if ((field = mtype._fieldsArray[i]).map)
            gen("this%s={}", util.safeProp(field.name));
          else if (field.repeated)
            gen("this%s=[]", util.safeProp(field.name));
        return gen("if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null)")("this[ks[i]]=p[ks[i]]");
      };
      function clearCache(type) {
        type._fieldsById = type._fieldsArray = type._oneofsArray = null;
        delete type.encode;
        delete type.decode;
        delete type.verify;
        return type;
      }
      Type3.fromJSON = function fromJSON(name, json) {
        var type = new Type3(name, json.options);
        type.extensions = json.extensions;
        type.reserved = json.reserved;
        var names = Object.keys(json.fields), i = 0;
        for (; i < names.length; ++i)
          type.add(
            (typeof json.fields[names[i]].keyType !== "undefined" ? MapField.fromJSON : Field2.fromJSON)(names[i], json.fields[names[i]])
          );
        if (json.oneofs)
          for (names = Object.keys(json.oneofs), i = 0; i < names.length; ++i)
            type.add(OneOf2.fromJSON(names[i], json.oneofs[names[i]]));
        if (json.nested)
          for (names = Object.keys(json.nested), i = 0; i < names.length; ++i) {
            var nested = json.nested[names[i]];
            type.add(
              // most to least likely
              (nested.id !== void 0 ? Field2.fromJSON : nested.fields !== void 0 ? Type3.fromJSON : nested.values !== void 0 ? Enum.fromJSON : nested.methods !== void 0 ? Service.fromJSON : Namespace.fromJSON)(names[i], nested)
            );
          }
        if (json.extensions && json.extensions.length)
          type.extensions = json.extensions;
        if (json.reserved && json.reserved.length)
          type.reserved = json.reserved;
        if (json.group)
          type.group = true;
        if (json.comment)
          type.comment = json.comment;
        return type;
      };
      Type3.prototype.toJSON = function toJSON(toJSONOptions) {
        var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions);
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "options",
          inherited && inherited.options || void 0,
          "oneofs",
          Namespace.arrayToJSON(this.oneofsArray, toJSONOptions),
          "fields",
          Namespace.arrayToJSON(this.fieldsArray.filter(function(obj) {
            return !obj.declaringField;
          }), toJSONOptions) || {},
          "extensions",
          this.extensions && this.extensions.length ? this.extensions : void 0,
          "reserved",
          this.reserved && this.reserved.length ? this.reserved : void 0,
          "group",
          this.group || void 0,
          "nested",
          inherited && inherited.nested || void 0,
          "comment",
          keepComments ? this.comment : void 0
        ]);
      };
      Type3.prototype.resolveAll = function resolveAll() {
        var fields = this.fieldsArray, i = 0;
        while (i < fields.length)
          fields[i++].resolve();
        var oneofs = this.oneofsArray;
        i = 0;
        while (i < oneofs.length)
          oneofs[i++].resolve();
        return Namespace.prototype.resolveAll.call(this);
      };
      Type3.prototype.get = function get(name) {
        return this.fields[name] || this.oneofs && this.oneofs[name] || this.nested && this.nested[name] || null;
      };
      Type3.prototype.add = function add(object) {
        if (this.get(object.name))
          throw Error("duplicate name '" + object.name + "' in " + this);
        if (object instanceof Field2 && object.extend === void 0) {
          if (this._fieldsById ? (
            /* istanbul ignore next */
            this._fieldsById[object.id]
          ) : this.fieldsById[object.id])
            throw Error("duplicate id " + object.id + " in " + this);
          if (this.isReservedId(object.id))
            throw Error("id " + object.id + " is reserved in " + this);
          if (this.isReservedName(object.name))
            throw Error("name '" + object.name + "' is reserved in " + this);
          if (object.parent)
            object.parent.remove(object);
          this.fields[object.name] = object;
          object.message = this;
          object.onAdd(this);
          return clearCache(this);
        }
        if (object instanceof OneOf2) {
          if (!this.oneofs)
            this.oneofs = {};
          this.oneofs[object.name] = object;
          object.onAdd(this);
          return clearCache(this);
        }
        return Namespace.prototype.add.call(this, object);
      };
      Type3.prototype.remove = function remove(object) {
        if (object instanceof Field2 && object.extend === void 0) {
          if (!this.fields || this.fields[object.name] !== object)
            throw Error(object + " is not a member of " + this);
          delete this.fields[object.name];
          object.parent = null;
          object.onRemove(this);
          return clearCache(this);
        }
        if (object instanceof OneOf2) {
          if (!this.oneofs || this.oneofs[object.name] !== object)
            throw Error(object + " is not a member of " + this);
          delete this.oneofs[object.name];
          object.parent = null;
          object.onRemove(this);
          return clearCache(this);
        }
        return Namespace.prototype.remove.call(this, object);
      };
      Type3.prototype.isReservedId = function isReservedId(id) {
        return Namespace.isReservedId(this.reserved, id);
      };
      Type3.prototype.isReservedName = function isReservedName(name) {
        return Namespace.isReservedName(this.reserved, name);
      };
      Type3.prototype.create = function create(properties) {
        return new this.ctor(properties);
      };
      Type3.prototype.setup = function setup() {
        var fullName = this.fullName, types = [];
        for (var i = 0; i < /* initializes */
        this.fieldsArray.length; ++i)
          types.push(this._fieldsArray[i].resolve().resolvedType);
        this.encode = encoder(this)({
          Writer: Writer2,
          types,
          util
        });
        this.decode = decoder(this)({
          Reader: Reader2,
          types,
          util
        });
        this.verify = verifier(this)({
          types,
          util
        });
        this.fromObject = converter.fromObject(this)({
          types,
          util
        });
        this.toObject = converter.toObject(this)({
          types,
          util
        });
        var wrapper = wrappers[fullName];
        if (wrapper) {
          var originalThis = Object.create(this);
          originalThis.fromObject = this.fromObject;
          this.fromObject = wrapper.fromObject.bind(originalThis);
          originalThis.toObject = this.toObject;
          this.toObject = wrapper.toObject.bind(originalThis);
        }
        return this;
      };
      Type3.prototype.encode = function encode_setup(message, writer) {
        return this.setup().encode(message, writer);
      };
      Type3.prototype.encodeDelimited = function encodeDelimited(message, writer) {
        return this.encode(message, writer && writer.len ? writer.fork() : writer).ldelim();
      };
      Type3.prototype.decode = function decode_setup(reader, length2) {
        return this.setup().decode(reader, length2);
      };
      Type3.prototype.decodeDelimited = function decodeDelimited(reader) {
        if (!(reader instanceof Reader2))
          reader = Reader2.create(reader);
        return this.decode(reader, reader.uint32());
      };
      Type3.prototype.verify = function verify_setup(message) {
        return this.setup().verify(message);
      };
      Type3.prototype.fromObject = function fromObject(object) {
        return this.setup().fromObject(object);
      };
      Type3.prototype.toObject = function toObject2(message, options) {
        return this.setup().toObject(message, options);
      };
      Type3.d = function decorateType(typeName) {
        return function typeDecorator(target) {
          util.decorateType(target, typeName);
        };
      };
    }
  });

  // node_modules/protobufjs/src/root.js
  var require_root = __commonJS({
    "node_modules/protobufjs/src/root.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Root4;
      var Namespace = require_namespace();
      ((Root4.prototype = Object.create(Namespace.prototype)).constructor = Root4).className = "Root";
      var Field2 = require_field();
      var Enum = require_enum();
      var OneOf2 = require_oneof();
      var util = require_util();
      var Type3;
      var parse;
      var common;
      function Root4(options) {
        Namespace.call(this, "", options);
        this.deferred = [];
        this.files = [];
      }
      Root4.fromJSON = function fromJSON(json, root) {
        if (!root)
          root = new Root4();
        if (json.options)
          root.setOptions(json.options);
        return root.addJSON(json.nested);
      };
      Root4.prototype.resolvePath = util.path.resolve;
      Root4.prototype.fetch = util.fetch;
      function SYNC() {
      }
      Root4.prototype.load = function load2(filename, options, callback) {
        if (typeof options === "function") {
          callback = options;
          options = void 0;
        }
        var self2 = this;
        if (!callback)
          return util.asPromise(load2, self2, filename, options);
        var sync = callback === SYNC;
        function finish(err2, root) {
          if (!callback)
            return;
          if (sync)
            throw err2;
          var cb = callback;
          callback = null;
          cb(err2, root);
        }
        function getBundledFileName(filename2) {
          var idx = filename2.lastIndexOf("google/protobuf/");
          if (idx > -1) {
            var altname = filename2.substring(idx);
            if (altname in common)
              return altname;
          }
          return null;
        }
        function process(filename2, source) {
          try {
            if (util.isString(source) && source.charAt(0) === "{")
              source = JSON.parse(source);
            if (!util.isString(source))
              self2.setOptions(source.options).addJSON(source.nested);
            else {
              parse.filename = filename2;
              var parsed = parse(source, self2, options), resolved2, i2 = 0;
              if (parsed.imports) {
                for (; i2 < parsed.imports.length; ++i2)
                  if (resolved2 = getBundledFileName(parsed.imports[i2]) || self2.resolvePath(filename2, parsed.imports[i2]))
                    fetch2(resolved2);
              }
              if (parsed.weakImports) {
                for (i2 = 0; i2 < parsed.weakImports.length; ++i2)
                  if (resolved2 = getBundledFileName(parsed.weakImports[i2]) || self2.resolvePath(filename2, parsed.weakImports[i2]))
                    fetch2(resolved2, true);
              }
            }
          } catch (err2) {
            finish(err2);
          }
          if (!sync && !queued)
            finish(null, self2);
        }
        function fetch2(filename2, weak) {
          filename2 = getBundledFileName(filename2) || filename2;
          if (self2.files.indexOf(filename2) > -1)
            return;
          self2.files.push(filename2);
          if (filename2 in common) {
            if (sync)
              process(filename2, common[filename2]);
            else {
              ++queued;
              setTimeout(function() {
                --queued;
                process(filename2, common[filename2]);
              });
            }
            return;
          }
          if (sync) {
            var source;
            try {
              source = util.fs.readFileSync(filename2).toString("utf8");
            } catch (err2) {
              if (!weak)
                finish(err2);
              return;
            }
            process(filename2, source);
          } else {
            ++queued;
            self2.fetch(filename2, function(err2, source2) {
              --queued;
              if (!callback)
                return;
              if (err2) {
                if (!weak)
                  finish(err2);
                else if (!queued)
                  finish(null, self2);
                return;
              }
              process(filename2, source2);
            });
          }
        }
        var queued = 0;
        if (util.isString(filename))
          filename = [filename];
        for (var i = 0, resolved; i < filename.length; ++i)
          if (resolved = self2.resolvePath("", filename[i]))
            fetch2(resolved);
        if (sync)
          return self2;
        if (!queued)
          finish(null, self2);
        return void 0;
      };
      Root4.prototype.loadSync = function loadSync(filename, options) {
        if (!util.isNode)
          throw Error("not supported");
        return this.load(filename, options, SYNC);
      };
      Root4.prototype.resolveAll = function resolveAll() {
        if (this.deferred.length)
          throw Error("unresolvable extensions: " + this.deferred.map(function(field) {
            return "'extend " + field.extend + "' in " + field.parent.fullName;
          }).join(", "));
        return Namespace.prototype.resolveAll.call(this);
      };
      var exposeRe = /^[A-Z]/;
      function tryHandleExtension(root, field) {
        var extendedType = field.parent.lookup(field.extend);
        if (extendedType) {
          var sisterField = new Field2(field.fullName, field.id, field.type, field.rule, void 0, field.options);
          if (extendedType.get(sisterField.name)) {
            return true;
          }
          sisterField.declaringField = field;
          field.extensionField = sisterField;
          extendedType.add(sisterField);
          return true;
        }
        return false;
      }
      Root4.prototype._handleAdd = function _handleAdd(object) {
        if (object instanceof Field2) {
          if (
            /* an extension field (implies not part of a oneof) */
            object.extend !== void 0 && /* not already handled */
            !object.extensionField
          ) {
            if (!tryHandleExtension(this, object))
              this.deferred.push(object);
          }
        } else if (object instanceof Enum) {
          if (exposeRe.test(object.name))
            object.parent[object.name] = object.values;
        } else if (!(object instanceof OneOf2)) {
          if (object instanceof Type3)
            for (var i = 0; i < this.deferred.length; )
              if (tryHandleExtension(this, this.deferred[i]))
                this.deferred.splice(i, 1);
              else
                ++i;
          for (var j = 0; j < /* initializes */
          object.nestedArray.length; ++j)
            this._handleAdd(object._nestedArray[j]);
          if (exposeRe.test(object.name))
            object.parent[object.name] = object;
        }
      };
      Root4.prototype._handleRemove = function _handleRemove(object) {
        if (object instanceof Field2) {
          if (
            /* an extension field */
            object.extend !== void 0
          ) {
            if (
              /* already handled */
              object.extensionField
            ) {
              object.extensionField.parent.remove(object.extensionField);
              object.extensionField = null;
            } else {
              var index = this.deferred.indexOf(object);
              if (index > -1)
                this.deferred.splice(index, 1);
            }
          }
        } else if (object instanceof Enum) {
          if (exposeRe.test(object.name))
            delete object.parent[object.name];
        } else if (object instanceof Namespace) {
          for (var i = 0; i < /* initializes */
          object.nestedArray.length; ++i)
            this._handleRemove(object._nestedArray[i]);
          if (exposeRe.test(object.name))
            delete object.parent[object.name];
        }
      };
      Root4._configure = function(Type_, parse_, common_) {
        Type3 = Type_;
        parse = parse_;
        common = common_;
      };
    }
  });

  // node_modules/protobufjs/src/util.js
  var require_util = __commonJS({
    "node_modules/protobufjs/src/util.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      var util = module2.exports = require_minimal();
      var roots = require_roots();
      var Type3;
      var Enum;
      util.codegen = require_codegen();
      util.fetch = require_fetch();
      util.path = require_path();
      util.fs = util.inquire("fs");
      util.toArray = function toArray(object) {
        if (object) {
          var keys = Object.keys(object), array = new Array(keys.length), index = 0;
          while (index < keys.length)
            array[index] = object[keys[index++]];
          return array;
        }
        return [];
      };
      util.toObject = function toObject2(array) {
        var object = {}, index = 0;
        while (index < array.length) {
          var key = array[index++], val = array[index++];
          if (val !== void 0)
            object[key] = val;
        }
        return object;
      };
      var safePropBackslashRe = /\\\\/g;
      var safePropQuoteRe = /"/g;
      util.isReserved = function isReserved(name) {
        return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)\$/.test(name);
      };
      util.safeProp = function safeProp(prop) {
        if (!/^[\$\\w_]+\$/.test(prop) || util.isReserved(prop))
          return '["' + prop.replace(safePropBackslashRe, "\\\\\\\\").replace(safePropQuoteRe, '\\\\"') + '"]';
        return "." + prop;
      };
      util.ucFirst = function ucFirst(str) {
        return str.charAt(0).toUpperCase() + str.substring(1);
      };
      var camelCaseRe = /_([a-z])/g;
      util.camelCase = function camelCase(str) {
        return str.substring(0, 1) + str.substring(1).replace(camelCaseRe, function(\$0, \$1) {
          return \$1.toUpperCase();
        });
      };
      util.compareFieldsById = function compareFieldsById(a, b) {
        return a.id - b.id;
      };
      util.decorateType = function decorateType(ctor, typeName) {
        if (ctor.\$type) {
          if (typeName && ctor.\$type.name !== typeName) {
            util.decorateRoot.remove(ctor.\$type);
            ctor.\$type.name = typeName;
            util.decorateRoot.add(ctor.\$type);
          }
          return ctor.\$type;
        }
        if (!Type3)
          Type3 = require_type();
        var type = new Type3(typeName || ctor.name);
        util.decorateRoot.add(type);
        type.ctor = ctor;
        Object.defineProperty(ctor, "\$type", { value: type, enumerable: false });
        Object.defineProperty(ctor.prototype, "\$type", { value: type, enumerable: false });
        return type;
      };
      var decorateEnumIndex = 0;
      util.decorateEnum = function decorateEnum(object) {
        if (object.\$type)
          return object.\$type;
        if (!Enum)
          Enum = require_enum();
        var enm = new Enum("Enum" + decorateEnumIndex++, object);
        util.decorateRoot.add(enm);
        Object.defineProperty(object, "\$type", { value: enm, enumerable: false });
        return enm;
      };
      util.setProperty = function setProperty(dst, path, value) {
        function setProp(dst2, path2, value2) {
          var part = path2.shift();
          if (part === "__proto__" || part === "prototype") {
            return dst2;
          }
          if (path2.length > 0) {
            dst2[part] = setProp(dst2[part] || {}, path2, value2);
          } else {
            var prevValue = dst2[part];
            if (prevValue)
              value2 = [].concat(prevValue).concat(value2);
            dst2[part] = value2;
          }
          return dst2;
        }
        if (typeof dst !== "object")
          throw TypeError("dst must be an object");
        if (!path)
          throw TypeError("path must be specified");
        path = path.split(".");
        return setProp(dst, path, value);
      };
      Object.defineProperty(util, "decorateRoot", {
        get: function() {
          return roots["decorated"] || (roots["decorated"] = new (require_root())());
        }
      });
    }
  });

  // node_modules/protobufjs/src/object.js
  var require_object = __commonJS({
    "node_modules/protobufjs/src/object.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = ReflectionObject2;
      ReflectionObject2.className = "ReflectionObject";
      var util = require_util();
      var Root4;
      function ReflectionObject2(name, options) {
        if (!util.isString(name))
          throw TypeError("name must be a string");
        if (options && !util.isObject(options))
          throw TypeError("options must be an object");
        this.options = options;
        this.parsedOptions = null;
        this.name = name;
        this.parent = null;
        this.resolved = false;
        this.comment = null;
        this.filename = null;
      }
      Object.defineProperties(ReflectionObject2.prototype, {
        /**
         * Reference to the root namespace.
         * @name ReflectionObject#root
         * @type {Root}
         * @readonly
         */
        root: {
          get: function() {
            var ptr = this;
            while (ptr.parent !== null)
              ptr = ptr.parent;
            return ptr;
          }
        },
        /**
         * Full name including leading dot.
         * @name ReflectionObject#fullName
         * @type {string}
         * @readonly
         */
        fullName: {
          get: function() {
            var path = [this.name], ptr = this.parent;
            while (ptr) {
              path.unshift(ptr.name);
              ptr = ptr.parent;
            }
            return path.join(".");
          }
        }
      });
      ReflectionObject2.prototype.toJSON = /* istanbul ignore next */
      function toJSON() {
        throw Error();
      };
      ReflectionObject2.prototype.onAdd = function onAdd(parent) {
        if (this.parent && this.parent !== parent)
          this.parent.remove(this);
        this.parent = parent;
        this.resolved = false;
        var root = parent.root;
        if (root instanceof Root4)
          root._handleAdd(this);
      };
      ReflectionObject2.prototype.onRemove = function onRemove(parent) {
        var root = parent.root;
        if (root instanceof Root4)
          root._handleRemove(this);
        this.parent = null;
        this.resolved = false;
      };
      ReflectionObject2.prototype.resolve = function resolve() {
        if (this.resolved)
          return this;
        if (this.root instanceof Root4)
          this.resolved = true;
        return this;
      };
      ReflectionObject2.prototype.getOption = function getOption(name) {
        if (this.options)
          return this.options[name];
        return void 0;
      };
      ReflectionObject2.prototype.setOption = function setOption(name, value, ifNotSet) {
        if (!ifNotSet || !this.options || this.options[name] === void 0)
          (this.options || (this.options = {}))[name] = value;
        return this;
      };
      ReflectionObject2.prototype.setParsedOption = function setParsedOption(name, value, propName) {
        if (!this.parsedOptions) {
          this.parsedOptions = [];
        }
        var parsedOptions = this.parsedOptions;
        if (propName) {
          var opt = parsedOptions.find(function(opt2) {
            return Object.prototype.hasOwnProperty.call(opt2, name);
          });
          if (opt) {
            var newValue = opt[name];
            util.setProperty(newValue, propName, value);
          } else {
            opt = {};
            opt[name] = util.setProperty({}, propName, value);
            parsedOptions.push(opt);
          }
        } else {
          var newOpt = {};
          newOpt[name] = value;
          parsedOptions.push(newOpt);
        }
        return this;
      };
      ReflectionObject2.prototype.setOptions = function setOptions(options, ifNotSet) {
        if (options)
          for (var keys = Object.keys(options), i = 0; i < keys.length; ++i)
            this.setOption(keys[i], options[keys[i]], ifNotSet);
        return this;
      };
      ReflectionObject2.prototype.toString = function toString2() {
        var className = this.constructor.className, fullName = this.fullName;
        if (fullName.length)
          return className + " " + fullName;
        return className;
      };
      ReflectionObject2._configure = function(Root_) {
        Root4 = Root_;
      };
    }
  });

  // node_modules/protobufjs/src/enum.js
  var require_enum = __commonJS({
    "node_modules/protobufjs/src/enum.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = Enum;
      var ReflectionObject2 = require_object();
      ((Enum.prototype = Object.create(ReflectionObject2.prototype)).constructor = Enum).className = "Enum";
      var Namespace = require_namespace();
      var util = require_util();
      function Enum(name, values, options, comment, comments, valuesOptions) {
        ReflectionObject2.call(this, name, options);
        if (values && typeof values !== "object")
          throw TypeError("values must be an object");
        this.valuesById = {};
        this.values = Object.create(this.valuesById);
        this.comment = comment;
        this.comments = comments || {};
        this.valuesOptions = valuesOptions;
        this.reserved = void 0;
        if (values) {
          for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)
            if (typeof values[keys[i]] === "number")
              this.valuesById[this.values[keys[i]] = values[keys[i]]] = keys[i];
        }
      }
      Enum.fromJSON = function fromJSON(name, json) {
        var enm = new Enum(name, json.values, json.options, json.comment, json.comments);
        enm.reserved = json.reserved;
        return enm;
      };
      Enum.prototype.toJSON = function toJSON(toJSONOptions) {
        var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
        return util.toObject([
          "options",
          this.options,
          "valuesOptions",
          this.valuesOptions,
          "values",
          this.values,
          "reserved",
          this.reserved && this.reserved.length ? this.reserved : void 0,
          "comment",
          keepComments ? this.comment : void 0,
          "comments",
          keepComments ? this.comments : void 0
        ]);
      };
      Enum.prototype.add = function add(name, id, comment, options) {
        if (!util.isString(name))
          throw TypeError("name must be a string");
        if (!util.isInteger(id))
          throw TypeError("id must be an integer");
        if (this.values[name] !== void 0)
          throw Error("duplicate name '" + name + "' in " + this);
        if (this.isReservedId(id))
          throw Error("id " + id + " is reserved in " + this);
        if (this.isReservedName(name))
          throw Error("name '" + name + "' is reserved in " + this);
        if (this.valuesById[id] !== void 0) {
          if (!(this.options && this.options.allow_alias))
            throw Error("duplicate id " + id + " in " + this);
          this.values[name] = id;
        } else
          this.valuesById[this.values[name] = id] = name;
        if (options) {
          if (this.valuesOptions === void 0)
            this.valuesOptions = {};
          this.valuesOptions[name] = options || null;
        }
        this.comments[name] = comment || null;
        return this;
      };
      Enum.prototype.remove = function remove(name) {
        if (!util.isString(name))
          throw TypeError("name must be a string");
        var val = this.values[name];
        if (val == null)
          throw Error("name '" + name + "' does not exist in " + this);
        delete this.valuesById[val];
        delete this.values[name];
        delete this.comments[name];
        if (this.valuesOptions)
          delete this.valuesOptions[name];
        return this;
      };
      Enum.prototype.isReservedId = function isReservedId(id) {
        return Namespace.isReservedId(this.reserved, id);
      };
      Enum.prototype.isReservedName = function isReservedName(name) {
        return Namespace.isReservedName(this.reserved, name);
      };
    }
  });

  // node_modules/protobufjs/src/encoder.js
  var require_encoder = __commonJS({
    "node_modules/protobufjs/src/encoder.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = encoder;
      var Enum = require_enum();
      var types = require_types();
      var util = require_util();
      function genTypePartial(gen, field, fieldIndex, ref) {
        return field.resolvedType.group ? gen("types[%i].encode(%s,w.uint32(%i)).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0) : gen("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0);
      }
      function encoder(mtype) {
        var gen = util.codegen(["m", "w"], mtype.name + "\$encode")("if(!w)")("w=Writer.create()");
        var i, ref;
        var fields = (
          /* initializes */
          mtype.fieldsArray.slice().sort(util.compareFieldsById)
        );
        for (var i = 0; i < fields.length; ++i) {
          var field = fields[i].resolve(), index = mtype._fieldsArray.indexOf(field), type = field.resolvedType instanceof Enum ? "int32" : field.type, wireType = types.basic[type];
          ref = "m" + util.safeProp(field.name);
          if (field.map) {
            gen("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name)("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref)("w.uint32(%i).fork().uint32(%i).%s(ks[i])", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);
            if (wireType === void 0)
              gen("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()", index, ref);
            else
              gen(".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref);
            gen("}")("}");
          } else if (field.repeated) {
            gen("if(%s!=null&&%s.length){", ref, ref);
            if (field.packed && types.packed[type] !== void 0) {
              gen("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)("for(var i=0;i<%s.length;++i)", ref)("w.%s(%s[i])", type, ref)("w.ldelim()");
            } else {
              gen("for(var i=0;i<%s.length;++i)", ref);
              if (wireType === void 0)
                genTypePartial(gen, field, index, ref + "[i]");
              else
                gen("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref);
            }
            gen("}");
          } else {
            if (field.optional)
              gen("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name);
            if (wireType === void 0)
              genTypePartial(gen, field, index, ref);
            else
              gen("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref);
          }
        }
        return gen("return w");
      }
    }
  });

  // node_modules/protobufjs/src/index-light.js
  var require_index_light = __commonJS({
    "node_modules/protobufjs/src/index-light.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      var protobuf = module2.exports = require_index_minimal();
      protobuf.build = "light";
      function load2(filename, root, callback) {
        if (typeof root === "function") {
          callback = root;
          root = new protobuf.Root();
        } else if (!root)
          root = new protobuf.Root();
        return root.load(filename, callback);
      }
      protobuf.load = load2;
      function loadSync(filename, root) {
        if (!root)
          root = new protobuf.Root();
        return root.loadSync(filename);
      }
      protobuf.loadSync = loadSync;
      protobuf.encoder = require_encoder();
      protobuf.decoder = require_decoder();
      protobuf.verifier = require_verifier();
      protobuf.converter = require_converter();
      protobuf.ReflectionObject = require_object();
      protobuf.Namespace = require_namespace();
      protobuf.Root = require_root();
      protobuf.Enum = require_enum();
      protobuf.Type = require_type();
      protobuf.Field = require_field();
      protobuf.OneOf = require_oneof();
      protobuf.MapField = require_mapfield();
      protobuf.Service = require_service2();
      protobuf.Method = require_method();
      protobuf.Message = require_message();
      protobuf.wrappers = require_wrappers();
      protobuf.types = require_types();
      protobuf.util = require_util();
      protobuf.ReflectionObject._configure(protobuf.Root);
      protobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);
      protobuf.Root._configure(protobuf.Type);
      protobuf.Field._configure(protobuf.Type);
    }
  });

  // node_modules/protobufjs/light.js
  var require_light = __commonJS({
    "node_modules/protobufjs/light.js"(exports2, module2) {
      "use strict";
      init_tampermonkey();
      module2.exports = require_index_light();
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/value-types.js
  var require_value_types = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/value-types.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var NewLine = "\\n";
      exports2.NewLine = NewLine;
      var ListType;
      (function(ListType2) {
        ListType2["Ordered"] = "ordered";
        ListType2["Bullet"] = "bullet";
        ListType2["Checked"] = "checked";
        ListType2["Unchecked"] = "unchecked";
      })(ListType || (ListType = {}));
      exports2.ListType = ListType;
      var ScriptType;
      (function(ScriptType2) {
        ScriptType2["Sub"] = "sub";
        ScriptType2["Super"] = "super";
      })(ScriptType || (ScriptType = {}));
      exports2.ScriptType = ScriptType;
      var DirectionType;
      (function(DirectionType2) {
        DirectionType2["Rtl"] = "rtl";
      })(DirectionType || (DirectionType = {}));
      exports2.DirectionType = DirectionType;
      var AlignType;
      (function(AlignType2) {
        AlignType2["Left"] = "left";
        AlignType2["Center"] = "center";
        AlignType2["Right"] = "right";
        AlignType2["Justify"] = "justify";
      })(AlignType || (AlignType = {}));
      exports2.AlignType = AlignType;
      var DataType;
      (function(DataType2) {
        DataType2["Image"] = "image";
        DataType2["Video"] = "video";
        DataType2["Formula"] = "formula";
        DataType2["Text"] = "text";
      })(DataType || (DataType = {}));
      exports2.DataType = DataType;
      var GroupType;
      (function(GroupType2) {
        GroupType2["Block"] = "block";
        GroupType2["InlineGroup"] = "inline-group";
        GroupType2["List"] = "list";
        GroupType2["Video"] = "video";
        GroupType2["Table"] = "table";
      })(GroupType || (GroupType = {}));
      exports2.GroupType = GroupType;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertData.js
  var require_InsertData = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertData.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var InsertDataQuill = /* @__PURE__ */ function() {
        function InsertDataQuill2(type, value) {
          this.type = type;
          this.value = value;
        }
        return InsertDataQuill2;
      }();
      exports2.InsertDataQuill = InsertDataQuill;
      var InsertDataCustom = /* @__PURE__ */ function() {
        function InsertDataCustom2(type, value) {
          this.type = type;
          this.value = value;
        }
        return InsertDataCustom2;
      }();
      exports2.InsertDataCustom = InsertDataCustom;
    }
  });

  // node_modules/lodash.isequal/index.js
  var require_lodash = __commonJS({
    "node_modules/lodash.isequal/index.js"(exports2, module2) {
      init_tampermonkey();
      var LARGE_ARRAY_SIZE = 200;
      var HASH_UNDEFINED = "__lodash_hash_undefined__";
      var COMPARE_PARTIAL_FLAG = 1;
      var COMPARE_UNORDERED_FLAG = 2;
      var MAX_SAFE_INTEGER = 9007199254740991;
      var argsTag = "[object Arguments]";
      var arrayTag = "[object Array]";
      var asyncTag = "[object AsyncFunction]";
      var boolTag = "[object Boolean]";
      var dateTag = "[object Date]";
      var errorTag = "[object Error]";
      var funcTag = "[object Function]";
      var genTag = "[object GeneratorFunction]";
      var mapTag = "[object Map]";
      var numberTag = "[object Number]";
      var nullTag = "[object Null]";
      var objectTag = "[object Object]";
      var promiseTag = "[object Promise]";
      var proxyTag = "[object Proxy]";
      var regexpTag = "[object RegExp]";
      var setTag = "[object Set]";
      var stringTag = "[object String]";
      var symbolTag = "[object Symbol]";
      var undefinedTag = "[object Undefined]";
      var weakMapTag = "[object WeakMap]";
      var arrayBufferTag = "[object ArrayBuffer]";
      var dataViewTag = "[object DataView]";
      var float32Tag = "[object Float32Array]";
      var float64Tag = "[object Float64Array]";
      var int8Tag = "[object Int8Array]";
      var int16Tag = "[object Int16Array]";
      var int32Tag = "[object Int32Array]";
      var uint8Tag = "[object Uint8Array]";
      var uint8ClampedTag = "[object Uint8ClampedArray]";
      var uint16Tag = "[object Uint16Array]";
      var uint32Tag = "[object Uint32Array]";
      var reRegExpChar = /[\\\\^\$.*+?()[\\]{}|]/g;
      var reIsHostCtor = /^\\[object .+?Constructor\\]\$/;
      var reIsUint = /^(?:0|[1-9]\\d*)\$/;
      var typedArrayTags = {};
      typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
      typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
      var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
      var freeSelf = typeof self == "object" && self && self.Object === Object && self;
      var root = freeGlobal || freeSelf || Function("return this")();
      var freeExports = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2;
      var freeModule = freeExports && typeof module2 == "object" && module2 && !module2.nodeType && module2;
      var moduleExports = freeModule && freeModule.exports === freeExports;
      var freeProcess = moduleExports && freeGlobal.process;
      var nodeUtil = function() {
        try {
          return freeProcess && freeProcess.binding && freeProcess.binding("util");
        } catch (e) {
        }
      }();
      var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
      function arrayFilter(array, predicate) {
        var index = -1, length2 = array == null ? 0 : array.length, resIndex = 0, result = [];
        while (++index < length2) {
          var value = array[index];
          if (predicate(value, index, array)) {
            result[resIndex++] = value;
          }
        }
        return result;
      }
      function arrayPush(array, values) {
        var index = -1, length2 = values.length, offset3 = array.length;
        while (++index < length2) {
          array[offset3 + index] = values[index];
        }
        return array;
      }
      function arraySome(array, predicate) {
        var index = -1, length2 = array == null ? 0 : array.length;
        while (++index < length2) {
          if (predicate(array[index], index, array)) {
            return true;
          }
        }
        return false;
      }
      function baseTimes(n, iteratee) {
        var index = -1, result = Array(n);
        while (++index < n) {
          result[index] = iteratee(index);
        }
        return result;
      }
      function baseUnary(func) {
        return function(value) {
          return func(value);
        };
      }
      function cacheHas(cache, key) {
        return cache.has(key);
      }
      function getValue(object, key) {
        return object == null ? void 0 : object[key];
      }
      function mapToArray(map) {
        var index = -1, result = Array(map.size);
        map.forEach(function(value, key) {
          result[++index] = [key, value];
        });
        return result;
      }
      function overArg(func, transform) {
        return function(arg) {
          return func(transform(arg));
        };
      }
      function setToArray(set) {
        var index = -1, result = Array(set.size);
        set.forEach(function(value) {
          result[++index] = value;
        });
        return result;
      }
      var arrayProto = Array.prototype;
      var funcProto = Function.prototype;
      var objectProto = Object.prototype;
      var coreJsData = root["__core-js_shared__"];
      var funcToString = funcProto.toString;
      var hasOwnProperty = objectProto.hasOwnProperty;
      var maskSrcKey = function() {
        var uid2 = /[^.]+\$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
        return uid2 ? "Symbol(src)_1." + uid2 : "";
      }();
      var nativeObjectToString = objectProto.toString;
      var reIsNative = RegExp(
        "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\\\\$&").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, "\$1.*?") + "\$"
      );
      var Buffer2 = moduleExports ? root.Buffer : void 0;
      var Symbol2 = root.Symbol;
      var Uint8Array2 = root.Uint8Array;
      var propertyIsEnumerable = objectProto.propertyIsEnumerable;
      var splice = arrayProto.splice;
      var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;
      var nativeGetSymbols = Object.getOwnPropertySymbols;
      var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
      var nativeKeys = overArg(Object.keys, Object);
      var DataView2 = getNative(root, "DataView");
      var Map = getNative(root, "Map");
      var Promise2 = getNative(root, "Promise");
      var Set2 = getNative(root, "Set");
      var WeakMap = getNative(root, "WeakMap");
      var nativeCreate = getNative(Object, "create");
      var dataViewCtorString = toSource(DataView2);
      var mapCtorString = toSource(Map);
      var promiseCtorString = toSource(Promise2);
      var setCtorString = toSource(Set2);
      var weakMapCtorString = toSource(WeakMap);
      var symbolProto = Symbol2 ? Symbol2.prototype : void 0;
      var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
      function Hash(entries) {
        var index = -1, length2 = entries == null ? 0 : entries.length;
        this.clear();
        while (++index < length2) {
          var entry = entries[index];
          this.set(entry[0], entry[1]);
        }
      }
      function hashClear() {
        this.__data__ = nativeCreate ? nativeCreate(null) : {};
        this.size = 0;
      }
      function hashDelete(key) {
        var result = this.has(key) && delete this.__data__[key];
        this.size -= result ? 1 : 0;
        return result;
      }
      function hashGet(key) {
        var data = this.__data__;
        if (nativeCreate) {
          var result = data[key];
          return result === HASH_UNDEFINED ? void 0 : result;
        }
        return hasOwnProperty.call(data, key) ? data[key] : void 0;
      }
      function hashHas(key) {
        var data = this.__data__;
        return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key);
      }
      function hashSet(key, value) {
        var data = this.__data__;
        this.size += this.has(key) ? 0 : 1;
        data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
        return this;
      }
      Hash.prototype.clear = hashClear;
      Hash.prototype["delete"] = hashDelete;
      Hash.prototype.get = hashGet;
      Hash.prototype.has = hashHas;
      Hash.prototype.set = hashSet;
      function ListCache(entries) {
        var index = -1, length2 = entries == null ? 0 : entries.length;
        this.clear();
        while (++index < length2) {
          var entry = entries[index];
          this.set(entry[0], entry[1]);
        }
      }
      function listCacheClear() {
        this.__data__ = [];
        this.size = 0;
      }
      function listCacheDelete(key) {
        var data = this.__data__, index = assocIndexOf(data, key);
        if (index < 0) {
          return false;
        }
        var lastIndex = data.length - 1;
        if (index == lastIndex) {
          data.pop();
        } else {
          splice.call(data, index, 1);
        }
        --this.size;
        return true;
      }
      function listCacheGet(key) {
        var data = this.__data__, index = assocIndexOf(data, key);
        return index < 0 ? void 0 : data[index][1];
      }
      function listCacheHas(key) {
        return assocIndexOf(this.__data__, key) > -1;
      }
      function listCacheSet(key, value) {
        var data = this.__data__, index = assocIndexOf(data, key);
        if (index < 0) {
          ++this.size;
          data.push([key, value]);
        } else {
          data[index][1] = value;
        }
        return this;
      }
      ListCache.prototype.clear = listCacheClear;
      ListCache.prototype["delete"] = listCacheDelete;
      ListCache.prototype.get = listCacheGet;
      ListCache.prototype.has = listCacheHas;
      ListCache.prototype.set = listCacheSet;
      function MapCache(entries) {
        var index = -1, length2 = entries == null ? 0 : entries.length;
        this.clear();
        while (++index < length2) {
          var entry = entries[index];
          this.set(entry[0], entry[1]);
        }
      }
      function mapCacheClear() {
        this.size = 0;
        this.__data__ = {
          "hash": new Hash(),
          "map": new (Map || ListCache)(),
          "string": new Hash()
        };
      }
      function mapCacheDelete(key) {
        var result = getMapData(this, key)["delete"](key);
        this.size -= result ? 1 : 0;
        return result;
      }
      function mapCacheGet(key) {
        return getMapData(this, key).get(key);
      }
      function mapCacheHas(key) {
        return getMapData(this, key).has(key);
      }
      function mapCacheSet(key, value) {
        var data = getMapData(this, key), size = data.size;
        data.set(key, value);
        this.size += data.size == size ? 0 : 1;
        return this;
      }
      MapCache.prototype.clear = mapCacheClear;
      MapCache.prototype["delete"] = mapCacheDelete;
      MapCache.prototype.get = mapCacheGet;
      MapCache.prototype.has = mapCacheHas;
      MapCache.prototype.set = mapCacheSet;
      function SetCache(values) {
        var index = -1, length2 = values == null ? 0 : values.length;
        this.__data__ = new MapCache();
        while (++index < length2) {
          this.add(values[index]);
        }
      }
      function setCacheAdd(value) {
        this.__data__.set(value, HASH_UNDEFINED);
        return this;
      }
      function setCacheHas(value) {
        return this.__data__.has(value);
      }
      SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
      SetCache.prototype.has = setCacheHas;
      function Stack(entries) {
        var data = this.__data__ = new ListCache(entries);
        this.size = data.size;
      }
      function stackClear() {
        this.__data__ = new ListCache();
        this.size = 0;
      }
      function stackDelete(key) {
        var data = this.__data__, result = data["delete"](key);
        this.size = data.size;
        return result;
      }
      function stackGet(key) {
        return this.__data__.get(key);
      }
      function stackHas(key) {
        return this.__data__.has(key);
      }
      function stackSet(key, value) {
        var data = this.__data__;
        if (data instanceof ListCache) {
          var pairs = data.__data__;
          if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {
            pairs.push([key, value]);
            this.size = ++data.size;
            return this;
          }
          data = this.__data__ = new MapCache(pairs);
        }
        data.set(key, value);
        this.size = data.size;
        return this;
      }
      Stack.prototype.clear = stackClear;
      Stack.prototype["delete"] = stackDelete;
      Stack.prototype.get = stackGet;
      Stack.prototype.has = stackHas;
      Stack.prototype.set = stackSet;
      function arrayLikeKeys(value, inherited) {
        var isArr = isArray2(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length2 = result.length;
        for (var key in value) {
          if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable \`arguments.length\` in strict mode.
          (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
          isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
          isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
          isIndex(key, length2)))) {
            result.push(key);
          }
        }
        return result;
      }
      function assocIndexOf(array, key) {
        var length2 = array.length;
        while (length2--) {
          if (eq(array[length2][0], key)) {
            return length2;
          }
        }
        return -1;
      }
      function baseGetAllKeys(object, keysFunc, symbolsFunc) {
        var result = keysFunc(object);
        return isArray2(object) ? result : arrayPush(result, symbolsFunc(object));
      }
      function baseGetTag(value) {
        if (value == null) {
          return value === void 0 ? undefinedTag : nullTag;
        }
        return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
      }
      function baseIsArguments(value) {
        return isObjectLike(value) && baseGetTag(value) == argsTag;
      }
      function baseIsEqual(value, other, bitmask, customizer, stack) {
        if (value === other) {
          return true;
        }
        if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
          return value !== value && other !== other;
        }
        return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
      }
      function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
        var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);
        objTag = objTag == argsTag ? objectTag : objTag;
        othTag = othTag == argsTag ? objectTag : othTag;
        var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
        if (isSameTag && isBuffer(object)) {
          if (!isBuffer(other)) {
            return false;
          }
          objIsArr = true;
          objIsObj = false;
        }
        if (isSameTag && !objIsObj) {
          stack || (stack = new Stack());
          return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
        }
        if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
          var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__");
          if (objIsWrapped || othIsWrapped) {
            var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
            stack || (stack = new Stack());
            return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
          }
        }
        if (!isSameTag) {
          return false;
        }
        stack || (stack = new Stack());
        return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
      }
      function baseIsNative(value) {
        if (!isObject2(value) || isMasked(value)) {
          return false;
        }
        var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
        return pattern.test(toSource(value));
      }
      function baseIsTypedArray(value) {
        return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
      }
      function baseKeys(object) {
        if (!isPrototype(object)) {
          return nativeKeys(object);
        }
        var result = [];
        for (var key in Object(object)) {
          if (hasOwnProperty.call(object, key) && key != "constructor") {
            result.push(key);
          }
        }
        return result;
      }
      function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
        var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length;
        if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
          return false;
        }
        var stacked = stack.get(array);
        if (stacked && stack.get(other)) {
          return stacked == other;
        }
        var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : void 0;
        stack.set(array, other);
        stack.set(other, array);
        while (++index < arrLength) {
          var arrValue = array[index], othValue = other[index];
          if (customizer) {
            var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
          }
          if (compared !== void 0) {
            if (compared) {
              continue;
            }
            result = false;
            break;
          }
          if (seen) {
            if (!arraySome(other, function(othValue2, othIndex) {
              if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
                return seen.push(othIndex);
              }
            })) {
              result = false;
              break;
            }
          } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
            result = false;
            break;
          }
        }
        stack["delete"](array);
        stack["delete"](other);
        return result;
      }
      function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
        switch (tag) {
          case dataViewTag:
            if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
              return false;
            }
            object = object.buffer;
            other = other.buffer;
          case arrayBufferTag:
            if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) {
              return false;
            }
            return true;
          case boolTag:
          case dateTag:
          case numberTag:
            return eq(+object, +other);
          case errorTag:
            return object.name == other.name && object.message == other.message;
          case regexpTag:
          case stringTag:
            return object == other + "";
          case mapTag:
            var convert = mapToArray;
          case setTag:
            var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
            convert || (convert = setToArray);
            if (object.size != other.size && !isPartial) {
              return false;
            }
            var stacked = stack.get(object);
            if (stacked) {
              return stacked == other;
            }
            bitmask |= COMPARE_UNORDERED_FLAG;
            stack.set(object, other);
            var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
            stack["delete"](object);
            return result;
          case symbolTag:
            if (symbolValueOf) {
              return symbolValueOf.call(object) == symbolValueOf.call(other);
            }
        }
        return false;
      }
      function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
        var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;
        if (objLength != othLength && !isPartial) {
          return false;
        }
        var index = objLength;
        while (index--) {
          var key = objProps[index];
          if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
            return false;
          }
        }
        var stacked = stack.get(object);
        if (stacked && stack.get(other)) {
          return stacked == other;
        }
        var result = true;
        stack.set(object, other);
        stack.set(other, object);
        var skipCtor = isPartial;
        while (++index < objLength) {
          key = objProps[index];
          var objValue = object[key], othValue = other[key];
          if (customizer) {
            var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
          }
          if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
            result = false;
            break;
          }
          skipCtor || (skipCtor = key == "constructor");
        }
        if (result && !skipCtor) {
          var objCtor = object.constructor, othCtor = other.constructor;
          if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
            result = false;
          }
        }
        stack["delete"](object);
        stack["delete"](other);
        return result;
      }
      function getAllKeys(object) {
        return baseGetAllKeys(object, keys, getSymbols);
      }
      function getMapData(map, key) {
        var data = map.__data__;
        return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
      }
      function getNative(object, key) {
        var value = getValue(object, key);
        return baseIsNative(value) ? value : void 0;
      }
      function getRawTag(value) {
        var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
        try {
          value[symToStringTag] = void 0;
          var unmasked = true;
        } catch (e) {
        }
        var result = nativeObjectToString.call(value);
        if (unmasked) {
          if (isOwn) {
            value[symToStringTag] = tag;
          } else {
            delete value[symToStringTag];
          }
        }
        return result;
      }
      var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
        if (object == null) {
          return [];
        }
        object = Object(object);
        return arrayFilter(nativeGetSymbols(object), function(symbol) {
          return propertyIsEnumerable.call(object, symbol);
        });
      };
      var getTag = baseGetTag;
      if (DataView2 && getTag(new DataView2(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {
        getTag = function(value) {
          var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
          if (ctorString) {
            switch (ctorString) {
              case dataViewCtorString:
                return dataViewTag;
              case mapCtorString:
                return mapTag;
              case promiseCtorString:
                return promiseTag;
              case setCtorString:
                return setTag;
              case weakMapCtorString:
                return weakMapTag;
            }
          }
          return result;
        };
      }
      function isIndex(value, length2) {
        length2 = length2 == null ? MAX_SAFE_INTEGER : length2;
        return !!length2 && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length2);
      }
      function isKeyable(value) {
        var type = typeof value;
        return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
      }
      function isMasked(func) {
        return !!maskSrcKey && maskSrcKey in func;
      }
      function isPrototype(value) {
        var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
        return value === proto;
      }
      function objectToString(value) {
        return nativeObjectToString.call(value);
      }
      function toSource(func) {
        if (func != null) {
          try {
            return funcToString.call(func);
          } catch (e) {
          }
          try {
            return func + "";
          } catch (e) {
          }
        }
        return "";
      }
      function eq(value, other) {
        return value === other || value !== value && other !== other;
      }
      var isArguments = baseIsArguments(/* @__PURE__ */ function() {
        return arguments;
      }()) ? baseIsArguments : function(value) {
        return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
      };
      var isArray2 = Array.isArray;
      function isArrayLike(value) {
        return value != null && isLength(value.length) && !isFunction(value);
      }
      var isBuffer = nativeIsBuffer || stubFalse;
      function isEqual(value, other) {
        return baseIsEqual(value, other);
      }
      function isFunction(value) {
        if (!isObject2(value)) {
          return false;
        }
        var tag = baseGetTag(value);
        return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
      }
      function isLength(value) {
        return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
      }
      function isObject2(value) {
        var type = typeof value;
        return value != null && (type == "object" || type == "function");
      }
      function isObjectLike(value) {
        return value != null && typeof value == "object";
      }
      var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
      function keys(object) {
        return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
      }
      function stubArray() {
        return [];
      }
      function stubFalse() {
        return false;
      }
      module2.exports = isEqual;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/DeltaInsertOp.js
  var require_DeltaInsertOp = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/DeltaInsertOp.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importDefault = exports2 && exports2.__importDefault || function(mod2) {
        return mod2 && mod2.__esModule ? mod2 : { "default": mod2 };
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var value_types_1 = require_value_types();
      var InsertData_1 = require_InsertData();
      var lodash_isequal_1 = __importDefault(require_lodash());
      var DeltaInsertOp = function() {
        function DeltaInsertOp2(insertVal, attrs) {
          if (typeof insertVal === "string") {
            insertVal = new InsertData_1.InsertDataQuill(value_types_1.DataType.Text, insertVal + "");
          }
          this.insert = insertVal;
          this.attributes = attrs || {};
        }
        DeltaInsertOp2.createNewLineOp = function() {
          return new DeltaInsertOp2(value_types_1.NewLine);
        };
        DeltaInsertOp2.prototype.isContainerBlock = function() {
          return this.isBlockquote() || this.isList() || this.isTable() || this.isCodeBlock() || this.isHeader() || this.isBlockAttribute() || this.isCustomTextBlock();
        };
        DeltaInsertOp2.prototype.isBlockAttribute = function() {
          var attrs = this.attributes;
          return !!(attrs.align || attrs.direction || attrs.indent);
        };
        DeltaInsertOp2.prototype.isBlockquote = function() {
          return !!this.attributes.blockquote;
        };
        DeltaInsertOp2.prototype.isHeader = function() {
          return !!this.attributes.header;
        };
        DeltaInsertOp2.prototype.isTable = function() {
          return !!this.attributes.table;
        };
        DeltaInsertOp2.prototype.isSameHeaderAs = function(op) {
          return op.attributes.header === this.attributes.header && this.isHeader();
        };
        DeltaInsertOp2.prototype.hasSameAdiAs = function(op) {
          return this.attributes.align === op.attributes.align && this.attributes.direction === op.attributes.direction && this.attributes.indent === op.attributes.indent;
        };
        DeltaInsertOp2.prototype.hasSameIndentationAs = function(op) {
          return this.attributes.indent === op.attributes.indent;
        };
        DeltaInsertOp2.prototype.hasSameAttr = function(op) {
          return lodash_isequal_1.default(this.attributes, op.attributes);
        };
        DeltaInsertOp2.prototype.hasHigherIndentThan = function(op) {
          return (Number(this.attributes.indent) || 0) > (Number(op.attributes.indent) || 0);
        };
        DeltaInsertOp2.prototype.isInline = function() {
          return !(this.isContainerBlock() || this.isVideo() || this.isCustomEmbedBlock());
        };
        DeltaInsertOp2.prototype.isCodeBlock = function() {
          return !!this.attributes["code-block"];
        };
        DeltaInsertOp2.prototype.hasSameLangAs = function(op) {
          return this.attributes["code-block"] === op.attributes["code-block"];
        };
        DeltaInsertOp2.prototype.isJustNewline = function() {
          return this.insert.value === value_types_1.NewLine;
        };
        DeltaInsertOp2.prototype.isList = function() {
          return this.isOrderedList() || this.isBulletList() || this.isCheckedList() || this.isUncheckedList();
        };
        DeltaInsertOp2.prototype.isOrderedList = function() {
          return this.attributes.list === value_types_1.ListType.Ordered;
        };
        DeltaInsertOp2.prototype.isBulletList = function() {
          return this.attributes.list === value_types_1.ListType.Bullet;
        };
        DeltaInsertOp2.prototype.isCheckedList = function() {
          return this.attributes.list === value_types_1.ListType.Checked;
        };
        DeltaInsertOp2.prototype.isUncheckedList = function() {
          return this.attributes.list === value_types_1.ListType.Unchecked;
        };
        DeltaInsertOp2.prototype.isACheckList = function() {
          return this.attributes.list == value_types_1.ListType.Unchecked || this.attributes.list === value_types_1.ListType.Checked;
        };
        DeltaInsertOp2.prototype.isSameListAs = function(op) {
          return !!op.attributes.list && (this.attributes.list === op.attributes.list || op.isACheckList() && this.isACheckList());
        };
        DeltaInsertOp2.prototype.isSameTableRowAs = function(op) {
          return !!op.isTable() && this.isTable() && this.attributes.table === op.attributes.table;
        };
        DeltaInsertOp2.prototype.isText = function() {
          return this.insert.type === value_types_1.DataType.Text;
        };
        DeltaInsertOp2.prototype.isImage = function() {
          return this.insert.type === value_types_1.DataType.Image;
        };
        DeltaInsertOp2.prototype.isFormula = function() {
          return this.insert.type === value_types_1.DataType.Formula;
        };
        DeltaInsertOp2.prototype.isVideo = function() {
          return this.insert.type === value_types_1.DataType.Video;
        };
        DeltaInsertOp2.prototype.isLink = function() {
          return this.isText() && !!this.attributes.link;
        };
        DeltaInsertOp2.prototype.isCustomEmbed = function() {
          return this.insert instanceof InsertData_1.InsertDataCustom;
        };
        DeltaInsertOp2.prototype.isCustomEmbedBlock = function() {
          return this.isCustomEmbed() && !!this.attributes.renderAsBlock;
        };
        DeltaInsertOp2.prototype.isCustomTextBlock = function() {
          return this.isText() && !!this.attributes.renderAsBlock;
        };
        DeltaInsertOp2.prototype.isMentions = function() {
          return this.isText() && !!this.attributes.mentions;
        };
        return DeltaInsertOp2;
      }();
      exports2.DeltaInsertOp = DeltaInsertOp;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/mentions/MentionSanitizer.js
  var require_MentionSanitizer = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/mentions/MentionSanitizer.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var OpAttributeSanitizer_1 = require_OpAttributeSanitizer();
      var MentionSanitizer = function() {
        function MentionSanitizer2() {
        }
        MentionSanitizer2.sanitize = function(dirtyObj, sanitizeOptions) {
          var cleanObj = {};
          if (!dirtyObj || typeof dirtyObj !== "object") {
            return cleanObj;
          }
          if (dirtyObj.class && MentionSanitizer2.IsValidClass(dirtyObj.class)) {
            cleanObj.class = dirtyObj.class;
          }
          if (dirtyObj.id && MentionSanitizer2.IsValidId(dirtyObj.id)) {
            cleanObj.id = dirtyObj.id;
          }
          if (MentionSanitizer2.IsValidTarget(dirtyObj.target + "")) {
            cleanObj.target = dirtyObj.target;
          }
          if (dirtyObj.avatar) {
            cleanObj.avatar = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(dirtyObj.avatar + "", sanitizeOptions);
          }
          if (dirtyObj["end-point"]) {
            cleanObj["end-point"] = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(dirtyObj["end-point"] + "", sanitizeOptions);
          }
          if (dirtyObj.slug) {
            cleanObj.slug = dirtyObj.slug + "";
          }
          return cleanObj;
        };
        MentionSanitizer2.IsValidClass = function(classAttr) {
          return !!classAttr.match(/^[a-zA-Z0-9_\\-]{1,500}\$/i);
        };
        MentionSanitizer2.IsValidId = function(idAttr) {
          return !!idAttr.match(/^[a-zA-Z0-9_\\-\\:\\.]{1,500}\$/i);
        };
        MentionSanitizer2.IsValidTarget = function(target) {
          return ["_self", "_blank", "_parent", "_top"].indexOf(target) > -1;
        };
        return MentionSanitizer2;
      }();
      exports2.MentionSanitizer = MentionSanitizer;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/url.js
  var require_url = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/url.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      function sanitize(str) {
        var val = str;
        val = val.replace(/^\\s*/gm, "");
        var whiteList = /^((https?|s?ftp|file|blob|mailto|tel):|#|\\/|data:image\\/)/;
        if (whiteList.test(val)) {
          return val;
        }
        return "unsafe:" + val;
      }
      exports2.sanitize = sanitize;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/funcs-html.js
  var require_funcs_html = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/funcs-html.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var EncodeTarget;
      (function(EncodeTarget2) {
        EncodeTarget2[EncodeTarget2["Html"] = 0] = "Html";
        EncodeTarget2[EncodeTarget2["Url"] = 1] = "Url";
      })(EncodeTarget || (EncodeTarget = {}));
      function makeStartTag(tag, attrs) {
        if (attrs === void 0) {
          attrs = void 0;
        }
        if (!tag) {
          return "";
        }
        var attrsStr = "";
        if (attrs) {
          var arrAttrs = [].concat(attrs);
          attrsStr = arrAttrs.map(function(attr) {
            return attr.key + (attr.value ? '="' + attr.value + '"' : "");
          }).join(" ");
        }
        var closing = ">";
        if (tag === "img" || tag === "br") {
          closing = "/>";
        }
        return attrsStr ? "<" + tag + " " + attrsStr + closing : "<" + tag + closing;
      }
      exports2.makeStartTag = makeStartTag;
      function makeEndTag(tag) {
        if (tag === void 0) {
          tag = "";
        }
        return tag && "</" + tag + ">" || "";
      }
      exports2.makeEndTag = makeEndTag;
      function decodeHtml(str) {
        return encodeMappings(EncodeTarget.Html).reduce(decodeMapping, str);
      }
      exports2.decodeHtml = decodeHtml;
      function encodeHtml(str, preventDoubleEncoding) {
        if (preventDoubleEncoding === void 0) {
          preventDoubleEncoding = true;
        }
        if (preventDoubleEncoding) {
          str = decodeHtml(str);
        }
        return encodeMappings(EncodeTarget.Html).reduce(encodeMapping, str);
      }
      exports2.encodeHtml = encodeHtml;
      function encodeLink(str) {
        var linkMaps = encodeMappings(EncodeTarget.Url);
        var decoded = linkMaps.reduce(decodeMapping, str);
        return linkMaps.reduce(encodeMapping, decoded);
      }
      exports2.encodeLink = encodeLink;
      function encodeMappings(mtype) {
        var maps = [
          ["&", "&amp;"],
          ["<", "&lt;"],
          [">", "&gt;"],
          ['"', "&quot;"],
          ["'", "&#x27;"],
          ["\\\\/", "&#x2F;"],
          ["\\\\(", "&#40;"],
          ["\\\\)", "&#41;"]
        ];
        if (mtype === EncodeTarget.Html) {
          return maps.filter(function(_a3) {
            var v = _a3[0], _ = _a3[1];
            return v.indexOf("(") === -1 && v.indexOf(")") === -1;
          });
        } else {
          return maps.filter(function(_a3) {
            var v = _a3[0], _ = _a3[1];
            return v.indexOf("/") === -1;
          });
        }
      }
      function encodeMapping(str, mapping) {
        return str.replace(new RegExp(mapping[0], "g"), mapping[1]);
      }
      function decodeMapping(str, mapping) {
        return str.replace(new RegExp(mapping[1], "g"), mapping[0].replace("\\\\", ""));
      }
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/array.js
  var require_array = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/array.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      function preferSecond(arr2) {
        if (arr2.length === 0) {
          return null;
        }
        return arr2.length >= 2 ? arr2[1] : arr2[0];
      }
      exports2.preferSecond = preferSecond;
      function flatten(arr2) {
        return arr2.reduce(function(pv, v) {
          return pv.concat(Array.isArray(v) ? flatten(v) : v);
        }, []);
      }
      exports2.flatten = flatten;
      function find(arr2, predicate) {
        if (Array.prototype.find) {
          return Array.prototype.find.call(arr2, predicate);
        }
        for (var i = 0; i < arr2.length; i++) {
          if (predicate(arr2[i]))
            return arr2[i];
        }
        return void 0;
      }
      exports2.find = find;
      function groupConsecutiveElementsWhile(arr2, predicate) {
        var groups = [];
        var currElm, currGroup;
        for (var i = 0; i < arr2.length; i++) {
          currElm = arr2[i];
          if (i > 0 && predicate(currElm, arr2[i - 1])) {
            currGroup = groups[groups.length - 1];
            currGroup.push(currElm);
          } else {
            groups.push([currElm]);
          }
        }
        return groups.map(function(g) {
          return g.length === 1 ? g[0] : g;
        });
      }
      exports2.groupConsecutiveElementsWhile = groupConsecutiveElementsWhile;
      function sliceFromReverseWhile(arr2, startIndex, predicate) {
        var result = {
          elements: [],
          sliceStartsAt: -1
        };
        for (var i = startIndex; i >= 0; i--) {
          if (!predicate(arr2[i])) {
            break;
          }
          result.sliceStartsAt = i;
          result.elements.unshift(arr2[i]);
        }
        return result;
      }
      exports2.sliceFromReverseWhile = sliceFromReverseWhile;
      function intersperse(arr2, item) {
        return arr2.reduce(function(pv, v, index) {
          pv.push(v);
          if (index < arr2.length - 1) {
            pv.push(item);
          }
          return pv;
        }, []);
      }
      exports2.intersperse = intersperse;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/OpAttributeSanitizer.js
  var require_OpAttributeSanitizer = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/OpAttributeSanitizer.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importStar = exports2 && exports2.__importStar || function(mod2) {
        if (mod2 && mod2.__esModule)
          return mod2;
        var result = {};
        if (mod2 != null) {
          for (var k in mod2)
            if (Object.hasOwnProperty.call(mod2, k))
              result[k] = mod2[k];
        }
        result["default"] = mod2;
        return result;
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var value_types_1 = require_value_types();
      var MentionSanitizer_1 = require_MentionSanitizer();
      var url = __importStar(require_url());
      var funcs_html_1 = require_funcs_html();
      var array_1 = require_array();
      var OpAttributeSanitizer = function() {
        function OpAttributeSanitizer2() {
        }
        OpAttributeSanitizer2.sanitize = function(dirtyAttrs, sanitizeOptions) {
          var cleanAttrs = {};
          if (!dirtyAttrs || typeof dirtyAttrs !== "object") {
            return cleanAttrs;
          }
          var booleanAttrs = [
            "bold",
            "italic",
            "underline",
            "strike",
            "code",
            "blockquote",
            "code-block",
            "renderAsBlock"
          ];
          var colorAttrs = ["background", "color"];
          var font = dirtyAttrs.font, size = dirtyAttrs.size, link = dirtyAttrs.link, script = dirtyAttrs.script, list = dirtyAttrs.list, header = dirtyAttrs.header, align = dirtyAttrs.align, direction = dirtyAttrs.direction, indent = dirtyAttrs.indent, mentions = dirtyAttrs.mentions, mention = dirtyAttrs.mention, width = dirtyAttrs.width, target = dirtyAttrs.target, rel = dirtyAttrs.rel;
          var codeBlock = dirtyAttrs["code-block"];
          var sanitizedAttrs = booleanAttrs.concat(colorAttrs, [
            "font",
            "size",
            "link",
            "script",
            "list",
            "header",
            "align",
            "direction",
            "indent",
            "mentions",
            "mention",
            "width",
            "target",
            "rel",
            "code-block"
          ]);
          booleanAttrs.forEach(function(prop) {
            var v = dirtyAttrs[prop];
            if (v) {
              cleanAttrs[prop] = !!v;
            }
          });
          colorAttrs.forEach(function(prop) {
            var val = dirtyAttrs[prop];
            if (val && (OpAttributeSanitizer2.IsValidHexColor(val + "") || OpAttributeSanitizer2.IsValidColorLiteral(val + "") || OpAttributeSanitizer2.IsValidRGBColor(val + ""))) {
              cleanAttrs[prop] = val;
            }
          });
          if (font && OpAttributeSanitizer2.IsValidFontName(font + "")) {
            cleanAttrs.font = font;
          }
          if (size && OpAttributeSanitizer2.IsValidSize(size + "")) {
            cleanAttrs.size = size;
          }
          if (width && OpAttributeSanitizer2.IsValidWidth(width + "")) {
            cleanAttrs.width = width;
          }
          if (link) {
            cleanAttrs.link = OpAttributeSanitizer2.sanitizeLinkUsingOptions(link + "", sanitizeOptions);
          }
          if (target && OpAttributeSanitizer2.isValidTarget(target)) {
            cleanAttrs.target = target;
          }
          if (rel && OpAttributeSanitizer2.IsValidRel(rel)) {
            cleanAttrs.rel = rel;
          }
          if (codeBlock) {
            if (OpAttributeSanitizer2.IsValidLang(codeBlock)) {
              cleanAttrs["code-block"] = codeBlock;
            } else {
              cleanAttrs["code-block"] = !!codeBlock;
            }
          }
          if (script === value_types_1.ScriptType.Sub || value_types_1.ScriptType.Super === script) {
            cleanAttrs.script = script;
          }
          if (list === value_types_1.ListType.Bullet || list === value_types_1.ListType.Ordered || list === value_types_1.ListType.Checked || list === value_types_1.ListType.Unchecked) {
            cleanAttrs.list = list;
          }
          if (Number(header)) {
            cleanAttrs.header = Math.min(Number(header), 6);
          }
          if (array_1.find([value_types_1.AlignType.Center, value_types_1.AlignType.Right, value_types_1.AlignType.Justify, value_types_1.AlignType.Left], function(a) {
            return a === align;
          })) {
            cleanAttrs.align = align;
          }
          if (direction === value_types_1.DirectionType.Rtl) {
            cleanAttrs.direction = direction;
          }
          if (indent && Number(indent)) {
            cleanAttrs.indent = Math.min(Number(indent), 30);
          }
          if (mentions && mention) {
            var sanitizedMention = MentionSanitizer_1.MentionSanitizer.sanitize(mention, sanitizeOptions);
            if (Object.keys(sanitizedMention).length > 0) {
              cleanAttrs.mentions = !!mentions;
              cleanAttrs.mention = mention;
            }
          }
          return Object.keys(dirtyAttrs).reduce(function(cleaned, k) {
            if (sanitizedAttrs.indexOf(k) === -1) {
              cleaned[k] = dirtyAttrs[k];
            }
            return cleaned;
          }, cleanAttrs);
        };
        OpAttributeSanitizer2.sanitizeLinkUsingOptions = function(link, options) {
          var sanitizerFn = function() {
            return void 0;
          };
          if (options && typeof options.urlSanitizer === "function") {
            sanitizerFn = options.urlSanitizer;
          }
          var result = sanitizerFn(link);
          return typeof result === "string" ? result : funcs_html_1.encodeLink(url.sanitize(link));
        };
        OpAttributeSanitizer2.IsValidHexColor = function(colorStr) {
          return !!colorStr.match(/^#([0-9A-F]{6}|[0-9A-F]{3})\$/i);
        };
        OpAttributeSanitizer2.IsValidColorLiteral = function(colorStr) {
          return !!colorStr.match(/^[a-z]{1,50}\$/i);
        };
        OpAttributeSanitizer2.IsValidRGBColor = function(colorStr) {
          var re = /^rgb\\(((0|25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d?\\d),\\s*){2}(0|25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d?\\d)\\)\$/i;
          return !!colorStr.match(re);
        };
        OpAttributeSanitizer2.IsValidFontName = function(fontName) {
          return !!fontName.match(/^[a-z\\s0-9\\- ]{1,30}\$/i);
        };
        OpAttributeSanitizer2.IsValidSize = function(size) {
          return !!size.match(/^[a-z0-9\\-]{1,20}\$/i);
        };
        OpAttributeSanitizer2.IsValidWidth = function(width) {
          return !!width.match(/^[0-9]*(px|em|%)?\$/);
        };
        OpAttributeSanitizer2.isValidTarget = function(target) {
          return !!target.match(/^[_a-zA-Z0-9\\-]{1,50}\$/);
        };
        OpAttributeSanitizer2.IsValidRel = function(relStr) {
          return !!relStr.match(/^[a-zA-Z\\s\\-]{1,250}\$/i);
        };
        OpAttributeSanitizer2.IsValidLang = function(lang) {
          if (typeof lang === "boolean") {
            return true;
          }
          return !!lang.match(/^[a-zA-Z\\s\\-\\\\\\/\\+]{1,50}\$/i);
        };
        return OpAttributeSanitizer2;
      }();
      exports2.OpAttributeSanitizer = OpAttributeSanitizer;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/string.js
  var require_string = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/string.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      function tokenizeWithNewLines(str) {
        var NewLine = "\\n";
        if (str === NewLine) {
          return [str];
        }
        var lines = str.split(NewLine);
        if (lines.length === 1) {
          return lines;
        }
        var lastIndex = lines.length - 1;
        return lines.reduce(function(pv, line, ind) {
          if (ind !== lastIndex) {
            if (line !== "") {
              pv = pv.concat(line, NewLine);
            } else {
              pv.push(NewLine);
            }
          } else if (line !== "") {
            pv.push(line);
          }
          return pv;
        }, []);
      }
      exports2.tokenizeWithNewLines = tokenizeWithNewLines;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/object.js
  var require_object2 = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/object.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      function assign(target) {
        var sources = [];
        for (var _i = 1; _i < arguments.length; _i++) {
          sources[_i - 1] = arguments[_i];
        }
        if (target == null) {
          throw new TypeError("Cannot convert undefined or null to object");
        }
        var to = Object(target);
        for (var index = 0; index < sources.length; index++) {
          var nextSource = sources[index];
          if (nextSource != null) {
            for (var nextKey in nextSource) {
              if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
                to[nextKey] = nextSource[nextKey];
              }
            }
          }
        }
        return to;
      }
      exports2.assign = assign;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpDenormalizer.js
  var require_InsertOpDenormalizer = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpDenormalizer.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importStar = exports2 && exports2.__importStar || function(mod2) {
        if (mod2 && mod2.__esModule)
          return mod2;
        var result = {};
        if (mod2 != null) {
          for (var k in mod2)
            if (Object.hasOwnProperty.call(mod2, k))
              result[k] = mod2[k];
        }
        result["default"] = mod2;
        return result;
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var value_types_1 = require_value_types();
      var str = __importStar(require_string());
      var obj = __importStar(require_object2());
      var InsertOpDenormalizer = function() {
        function InsertOpDenormalizer2() {
        }
        InsertOpDenormalizer2.denormalize = function(op) {
          if (!op || typeof op !== "object") {
            return [];
          }
          if (typeof op.insert === "object" || op.insert === value_types_1.NewLine) {
            return [op];
          }
          var newlinedArray = str.tokenizeWithNewLines(op.insert + "");
          if (newlinedArray.length === 1) {
            return [op];
          }
          var nlObj = obj.assign({}, op, { insert: value_types_1.NewLine });
          return newlinedArray.map(function(line) {
            if (line === value_types_1.NewLine) {
              return nlObj;
            }
            return obj.assign({}, op, {
              insert: line
            });
          });
        };
        return InsertOpDenormalizer2;
      }();
      exports2.InsertOpDenormalizer = InsertOpDenormalizer;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpsConverter.js
  var require_InsertOpsConverter = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpsConverter.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var DeltaInsertOp_1 = require_DeltaInsertOp();
      var value_types_1 = require_value_types();
      var InsertData_1 = require_InsertData();
      var OpAttributeSanitizer_1 = require_OpAttributeSanitizer();
      var InsertOpDenormalizer_1 = require_InsertOpDenormalizer();
      var InsertOpsConverter = function() {
        function InsertOpsConverter2() {
        }
        InsertOpsConverter2.convert = function(deltaOps, options) {
          if (!Array.isArray(deltaOps)) {
            return [];
          }
          var denormalizedOps = [].concat.apply([], deltaOps.map(InsertOpDenormalizer_1.InsertOpDenormalizer.denormalize));
          var results = [];
          var insertVal, attributes;
          for (var _i = 0, denormalizedOps_1 = denormalizedOps; _i < denormalizedOps_1.length; _i++) {
            var op = denormalizedOps_1[_i];
            if (!op.insert) {
              continue;
            }
            insertVal = InsertOpsConverter2.convertInsertVal(op.insert, options);
            if (!insertVal) {
              continue;
            }
            attributes = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitize(op.attributes, options);
            results.push(new DeltaInsertOp_1.DeltaInsertOp(insertVal, attributes));
          }
          return results;
        };
        InsertOpsConverter2.convertInsertVal = function(insertPropVal, sanitizeOptions) {
          if (typeof insertPropVal === "string") {
            return new InsertData_1.InsertDataQuill(value_types_1.DataType.Text, insertPropVal);
          }
          if (!insertPropVal || typeof insertPropVal !== "object") {
            return null;
          }
          var keys = Object.keys(insertPropVal);
          if (!keys.length) {
            return null;
          }
          return value_types_1.DataType.Image in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Image, OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(insertPropVal[value_types_1.DataType.Image] + "", sanitizeOptions)) : value_types_1.DataType.Video in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Video, OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(insertPropVal[value_types_1.DataType.Video] + "", sanitizeOptions)) : value_types_1.DataType.Formula in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Formula, insertPropVal[value_types_1.DataType.Formula]) : new InsertData_1.InsertDataCustom(keys[0], insertPropVal[keys[0]]);
        };
        return InsertOpsConverter2;
      }();
      exports2.InsertOpsConverter = InsertOpsConverter;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/OpToHtmlConverter.js
  var require_OpToHtmlConverter = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/OpToHtmlConverter.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importStar = exports2 && exports2.__importStar || function(mod2) {
        if (mod2 && mod2.__esModule)
          return mod2;
        var result = {};
        if (mod2 != null) {
          for (var k in mod2)
            if (Object.hasOwnProperty.call(mod2, k))
              result[k] = mod2[k];
        }
        result["default"] = mod2;
        return result;
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var funcs_html_1 = require_funcs_html();
      var value_types_1 = require_value_types();
      var obj = __importStar(require_object2());
      var arr2 = __importStar(require_array());
      var OpAttributeSanitizer_1 = require_OpAttributeSanitizer();
      var DEFAULT_INLINE_FONTS = {
        serif: "font-family: Georgia, Times New Roman, serif",
        monospace: "font-family: Monaco, Courier New, monospace"
      };
      exports2.DEFAULT_INLINE_STYLES = {
        font: function(value) {
          return DEFAULT_INLINE_FONTS[value] || "font-family:" + value;
        },
        size: {
          small: "font-size: 0.75em",
          large: "font-size: 1.5em",
          huge: "font-size: 2.5em"
        },
        indent: function(value, op) {
          var indentSize = parseInt(value, 10) * 3;
          var side = op.attributes["direction"] === "rtl" ? "right" : "left";
          return "padding-" + side + ":" + indentSize + "em";
        },
        direction: function(value, op) {
          if (value === "rtl") {
            return "direction:rtl" + (op.attributes["align"] ? "" : "; text-align:inherit");
          } else {
            return void 0;
          }
        }
      };
      var OpToHtmlConverter = function() {
        function OpToHtmlConverter2(op, options) {
          this.op = op;
          this.options = obj.assign({}, {
            classPrefix: "ql",
            inlineStyles: void 0,
            encodeHtml: true,
            listItemTag: "li",
            paragraphTag: "p"
          }, options);
        }
        OpToHtmlConverter2.prototype.prefixClass = function(className) {
          if (!this.options.classPrefix) {
            return className + "";
          }
          return this.options.classPrefix + "-" + className;
        };
        OpToHtmlConverter2.prototype.getHtml = function() {
          var parts = this.getHtmlParts();
          return parts.openingTag + parts.content + parts.closingTag;
        };
        OpToHtmlConverter2.prototype.getHtmlParts = function() {
          var _this = this;
          if (this.op.isJustNewline() && !this.op.isContainerBlock()) {
            return { openingTag: "", closingTag: "", content: value_types_1.NewLine };
          }
          var tags = this.getTags(), attrs = this.getTagAttributes();
          if (!tags.length && attrs.length) {
            tags.push(this.options.textTag || "span");
          }
          var beginTags = [], endTags = [];
          var imgTag = "img";
          var isImageLink = function(tag2) {
            return tag2 === imgTag && !!_this.op.attributes.link;
          };
          for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
            var tag = tags_1[_i];
            if (isImageLink(tag)) {
              beginTags.push(funcs_html_1.makeStartTag("a", this.getLinkAttrs()));
            }
            beginTags.push(funcs_html_1.makeStartTag(tag, attrs));
            endTags.push(tag === "img" ? "" : funcs_html_1.makeEndTag(tag));
            if (isImageLink(tag)) {
              endTags.push(funcs_html_1.makeEndTag("a"));
            }
            attrs = [];
          }
          endTags.reverse();
          return {
            openingTag: beginTags.join(""),
            content: this.getContent(),
            closingTag: endTags.join("")
          };
        };
        OpToHtmlConverter2.prototype.getContent = function() {
          if (this.op.isContainerBlock()) {
            return "";
          }
          if (this.op.isMentions()) {
            return this.op.insert.value;
          }
          var content = this.op.isFormula() || this.op.isText() ? this.op.insert.value : "";
          return this.options.encodeHtml && funcs_html_1.encodeHtml(content) || content;
        };
        OpToHtmlConverter2.prototype.getCssClasses = function() {
          var attrs = this.op.attributes;
          if (this.options.inlineStyles) {
            return [];
          }
          var propsArr = ["indent", "align", "direction", "font", "size"];
          if (this.options.allowBackgroundClasses) {
            propsArr.push("background");
          }
          return (this.getCustomCssClasses() || []).concat(propsArr.filter(function(prop) {
            return !!attrs[prop];
          }).filter(function(prop) {
            return prop === "background" ? OpAttributeSanitizer_1.OpAttributeSanitizer.IsValidColorLiteral(attrs[prop]) : true;
          }).map(function(prop) {
            return prop + "-" + attrs[prop];
          }).concat(this.op.isFormula() ? "formula" : []).concat(this.op.isVideo() ? "video" : []).concat(this.op.isImage() ? "image" : []).map(this.prefixClass.bind(this)));
        };
        OpToHtmlConverter2.prototype.getCssStyles = function() {
          var _this = this;
          var attrs = this.op.attributes;
          var propsArr = [["color"]];
          if (!!this.options.inlineStyles || !this.options.allowBackgroundClasses) {
            propsArr.push(["background", "background-color"]);
          }
          if (this.options.inlineStyles) {
            propsArr = propsArr.concat([
              ["indent"],
              ["align", "text-align"],
              ["direction"],
              ["font", "font-family"],
              ["size"]
            ]);
          }
          return (this.getCustomCssStyles() || []).concat(propsArr.filter(function(item) {
            return !!attrs[item[0]];
          }).map(function(item) {
            var attribute = item[0];
            var attrValue = attrs[attribute];
            var attributeConverter = _this.options.inlineStyles && _this.options.inlineStyles[attribute] || exports2.DEFAULT_INLINE_STYLES[attribute];
            if (typeof attributeConverter === "object") {
              return attributeConverter[attrValue];
            } else if (typeof attributeConverter === "function") {
              var converterFn = attributeConverter;
              return converterFn(attrValue, _this.op);
            } else {
              return arr2.preferSecond(item) + ":" + attrValue;
            }
          })).filter(function(item) {
            return item !== void 0;
          });
        };
        OpToHtmlConverter2.prototype.getTagAttributes = function() {
          if (this.op.attributes.code && !this.op.isLink()) {
            return [];
          }
          var makeAttr = this.makeAttr.bind(this);
          var customTagAttributes = this.getCustomTagAttributes();
          var customAttr = customTagAttributes ? Object.keys(this.getCustomTagAttributes()).map(function(k) {
            return makeAttr(k, customTagAttributes[k]);
          }) : [];
          var classes = this.getCssClasses();
          var tagAttrs = classes.length ? customAttr.concat([makeAttr("class", classes.join(" "))]) : customAttr;
          if (this.op.isImage()) {
            this.op.attributes.width && (tagAttrs = tagAttrs.concat(makeAttr("width", this.op.attributes.width)));
            return tagAttrs.concat(makeAttr("src", this.op.insert.value));
          }
          if (this.op.isACheckList()) {
            return tagAttrs.concat(makeAttr("data-checked", this.op.isCheckedList() ? "true" : "false"));
          }
          if (this.op.isFormula()) {
            return tagAttrs;
          }
          if (this.op.isVideo()) {
            return tagAttrs.concat(makeAttr("frameborder", "0"), makeAttr("allowfullscreen", "true"), makeAttr("src", this.op.insert.value));
          }
          if (this.op.isMentions()) {
            var mention = this.op.attributes.mention;
            if (mention.class) {
              tagAttrs = tagAttrs.concat(makeAttr("class", mention.class));
            }
            if (mention["end-point"] && mention.slug) {
              tagAttrs = tagAttrs.concat(makeAttr("href", mention["end-point"] + "/" + mention.slug));
            } else {
              tagAttrs = tagAttrs.concat(makeAttr("href", "about:blank"));
            }
            if (mention.target) {
              tagAttrs = tagAttrs.concat(makeAttr("target", mention.target));
            }
            return tagAttrs;
          }
          var styles = this.getCssStyles();
          if (styles.length) {
            tagAttrs.push(makeAttr("style", styles.join(";")));
          }
          if (this.op.isCodeBlock() && typeof this.op.attributes["code-block"] === "string") {
            return tagAttrs.concat(makeAttr("data-language", this.op.attributes["code-block"]));
          }
          if (this.op.isContainerBlock()) {
            return tagAttrs;
          }
          if (this.op.isLink()) {
            tagAttrs = tagAttrs.concat(this.getLinkAttrs());
          }
          return tagAttrs;
        };
        OpToHtmlConverter2.prototype.makeAttr = function(k, v) {
          return { key: k, value: v };
        };
        OpToHtmlConverter2.prototype.getLinkAttrs = function() {
          var tagAttrs = [];
          var targetForAll = OpAttributeSanitizer_1.OpAttributeSanitizer.isValidTarget(this.options.linkTarget || "") ? this.options.linkTarget : void 0;
          var relForAll = OpAttributeSanitizer_1.OpAttributeSanitizer.IsValidRel(this.options.linkRel || "") ? this.options.linkRel : void 0;
          var target = this.op.attributes.target || targetForAll;
          var rel = this.op.attributes.rel || relForAll;
          return tagAttrs.concat(this.makeAttr("href", this.op.attributes.link)).concat(target ? this.makeAttr("target", target) : []).concat(rel ? this.makeAttr("rel", rel) : []);
        };
        OpToHtmlConverter2.prototype.getCustomTag = function(format) {
          if (this.options.customTag && typeof this.options.customTag === "function") {
            return this.options.customTag.apply(null, [format, this.op]);
          }
        };
        OpToHtmlConverter2.prototype.getCustomTagAttributes = function() {
          if (this.options.customTagAttributes && typeof this.options.customTagAttributes === "function") {
            return this.options.customTagAttributes.apply(null, [this.op]);
          }
        };
        OpToHtmlConverter2.prototype.getCustomCssClasses = function() {
          if (this.options.customCssClasses && typeof this.options.customCssClasses === "function") {
            var res = this.options.customCssClasses.apply(null, [this.op]);
            if (res) {
              return Array.isArray(res) ? res : [res];
            }
          }
        };
        OpToHtmlConverter2.prototype.getCustomCssStyles = function() {
          if (this.options.customCssStyles && typeof this.options.customCssStyles === "function") {
            var res = this.options.customCssStyles.apply(null, [this.op]);
            if (res) {
              return Array.isArray(res) ? res : [res];
            }
          }
        };
        OpToHtmlConverter2.prototype.getTags = function() {
          var _this = this;
          var attrs = this.op.attributes;
          if (!this.op.isText()) {
            return [
              this.op.isVideo() ? "iframe" : this.op.isImage() ? "img" : "span"
            ];
          }
          var positionTag = this.options.paragraphTag || "p";
          var blocks = [
            ["blockquote"],
            ["code-block", "pre"],
            ["list", this.options.listItemTag],
            ["header"],
            ["align", positionTag],
            ["direction", positionTag],
            ["indent", positionTag]
          ];
          for (var _i = 0, blocks_1 = blocks; _i < blocks_1.length; _i++) {
            var item = blocks_1[_i];
            var firstItem = item[0];
            if (attrs[firstItem]) {
              var customTag = this.getCustomTag(firstItem);
              return customTag ? [customTag] : firstItem === "header" ? ["h" + attrs[firstItem]] : [arr2.preferSecond(item)];
            }
          }
          if (this.op.isCustomTextBlock()) {
            var customTag = this.getCustomTag("renderAsBlock");
            return customTag ? [customTag] : [positionTag];
          }
          var customTagsMap = Object.keys(attrs).reduce(function(res, it) {
            var customTag2 = _this.getCustomTag(it);
            if (customTag2) {
              res[it] = customTag2;
            }
            return res;
          }, {});
          var inlineTags = [
            ["link", "a"],
            ["mentions", "a"],
            ["script"],
            ["bold", "strong"],
            ["italic", "em"],
            ["strike", "s"],
            ["underline", "u"],
            ["code"]
          ];
          return inlineTags.filter(function(item2) {
            return !!attrs[item2[0]];
          }).concat(Object.keys(customTagsMap).filter(function(t) {
            return !inlineTags.some(function(it) {
              return it[0] == t;
            });
          }).map(function(t) {
            return [t, customTagsMap[t]];
          })).map(function(item2) {
            return customTagsMap[item2[0]] ? customTagsMap[item2[0]] : item2[0] === "script" ? attrs[item2[0]] === value_types_1.ScriptType.Sub ? "sub" : "sup" : arr2.preferSecond(item2);
          });
        };
        return OpToHtmlConverter2;
      }();
      exports2.OpToHtmlConverter = OpToHtmlConverter;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/group-types.js
  var require_group_types = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/group-types.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __extends = exports2 && exports2.__extends || function() {
        var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) {
          d.__proto__ = b;
        } || function(d, b) {
          for (var p in b)
            if (b.hasOwnProperty(p))
              d[p] = b[p];
        };
        return function(d, b) {
          extendStatics(d, b);
          function __() {
            this.constructor = d;
          }
          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
        };
      }();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var InlineGroup = /* @__PURE__ */ function() {
        function InlineGroup2(ops) {
          this.ops = ops;
        }
        return InlineGroup2;
      }();
      exports2.InlineGroup = InlineGroup;
      var SingleItem = /* @__PURE__ */ function() {
        function SingleItem2(op) {
          this.op = op;
        }
        return SingleItem2;
      }();
      var VideoItem = function(_super) {
        __extends(VideoItem2, _super);
        function VideoItem2() {
          return _super !== null && _super.apply(this, arguments) || this;
        }
        return VideoItem2;
      }(SingleItem);
      exports2.VideoItem = VideoItem;
      var BlotBlock = function(_super) {
        __extends(BlotBlock2, _super);
        function BlotBlock2() {
          return _super !== null && _super.apply(this, arguments) || this;
        }
        return BlotBlock2;
      }(SingleItem);
      exports2.BlotBlock = BlotBlock;
      var BlockGroup = /* @__PURE__ */ function() {
        function BlockGroup2(op, ops) {
          this.op = op;
          this.ops = ops;
        }
        return BlockGroup2;
      }();
      exports2.BlockGroup = BlockGroup;
      var ListGroup = /* @__PURE__ */ function() {
        function ListGroup2(items) {
          this.items = items;
        }
        return ListGroup2;
      }();
      exports2.ListGroup = ListGroup;
      var ListItem = /* @__PURE__ */ function() {
        function ListItem2(item, innerList) {
          if (innerList === void 0) {
            innerList = null;
          }
          this.item = item;
          this.innerList = innerList;
        }
        return ListItem2;
      }();
      exports2.ListItem = ListItem;
      var TableGroup = /* @__PURE__ */ function() {
        function TableGroup2(rows) {
          this.rows = rows;
        }
        return TableGroup2;
      }();
      exports2.TableGroup = TableGroup;
      var TableRow = /* @__PURE__ */ function() {
        function TableRow2(cells) {
          this.cells = cells;
        }
        return TableRow2;
      }();
      exports2.TableRow = TableRow;
      var TableCell = /* @__PURE__ */ function() {
        function TableCell2(item) {
          this.item = item;
        }
        return TableCell2;
      }();
      exports2.TableCell = TableCell;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/Grouper.js
  var require_Grouper = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/Grouper.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var DeltaInsertOp_1 = require_DeltaInsertOp();
      var array_1 = require_array();
      var group_types_1 = require_group_types();
      var Grouper = function() {
        function Grouper2() {
        }
        Grouper2.pairOpsWithTheirBlock = function(ops) {
          var result = [];
          var canBeInBlock = function(op2) {
            return !(op2.isJustNewline() || op2.isCustomEmbedBlock() || op2.isVideo() || op2.isContainerBlock());
          };
          var isInlineData = function(op2) {
            return op2.isInline();
          };
          var lastInd = ops.length - 1;
          var opsSlice;
          for (var i = lastInd; i >= 0; i--) {
            var op = ops[i];
            if (op.isVideo()) {
              result.push(new group_types_1.VideoItem(op));
            } else if (op.isCustomEmbedBlock()) {
              result.push(new group_types_1.BlotBlock(op));
            } else if (op.isContainerBlock()) {
              opsSlice = array_1.sliceFromReverseWhile(ops, i - 1, canBeInBlock);
              result.push(new group_types_1.BlockGroup(op, opsSlice.elements));
              i = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i;
            } else {
              opsSlice = array_1.sliceFromReverseWhile(ops, i - 1, isInlineData);
              result.push(new group_types_1.InlineGroup(opsSlice.elements.concat(op)));
              i = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i;
            }
          }
          result.reverse();
          return result;
        };
        Grouper2.groupConsecutiveSameStyleBlocks = function(groups, blocksOf) {
          if (blocksOf === void 0) {
            blocksOf = {
              header: true,
              codeBlocks: true,
              blockquotes: true,
              customBlocks: true
            };
          }
          return array_1.groupConsecutiveElementsWhile(groups, function(g, gPrev) {
            if (!(g instanceof group_types_1.BlockGroup) || !(gPrev instanceof group_types_1.BlockGroup)) {
              return false;
            }
            return blocksOf.codeBlocks && Grouper2.areBothCodeblocksWithSameLang(g, gPrev) || blocksOf.blockquotes && Grouper2.areBothBlockquotesWithSameAdi(g, gPrev) || blocksOf.header && Grouper2.areBothSameHeadersWithSameAdi(g, gPrev) || blocksOf.customBlocks && Grouper2.areBothCustomBlockWithSameAttr(g, gPrev);
          });
        };
        Grouper2.reduceConsecutiveSameStyleBlocksToOne = function(groups) {
          var newLineOp = DeltaInsertOp_1.DeltaInsertOp.createNewLineOp();
          return groups.map(function(elm) {
            if (!Array.isArray(elm)) {
              if (elm instanceof group_types_1.BlockGroup && !elm.ops.length) {
                elm.ops.push(newLineOp);
              }
              return elm;
            }
            var groupsLastInd = elm.length - 1;
            elm[0].ops = array_1.flatten(elm.map(function(g, i) {
              if (!g.ops.length) {
                return [newLineOp];
              }
              return g.ops.concat(i < groupsLastInd ? [newLineOp] : []);
            }));
            return elm[0];
          });
        };
        Grouper2.areBothCodeblocksWithSameLang = function(g1, gOther) {
          return g1.op.isCodeBlock() && gOther.op.isCodeBlock() && g1.op.hasSameLangAs(gOther.op);
        };
        Grouper2.areBothSameHeadersWithSameAdi = function(g1, gOther) {
          return g1.op.isSameHeaderAs(gOther.op) && g1.op.hasSameAdiAs(gOther.op);
        };
        Grouper2.areBothBlockquotesWithSameAdi = function(g, gOther) {
          return g.op.isBlockquote() && gOther.op.isBlockquote() && g.op.hasSameAdiAs(gOther.op);
        };
        Grouper2.areBothCustomBlockWithSameAttr = function(g, gOther) {
          return g.op.isCustomTextBlock() && gOther.op.isCustomTextBlock() && g.op.hasSameAttr(gOther.op);
        };
        return Grouper2;
      }();
      exports2.Grouper = Grouper;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/ListNester.js
  var require_ListNester = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/ListNester.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var group_types_1 = require_group_types();
      var array_1 = require_array();
      var ListNester = function() {
        function ListNester2() {
        }
        ListNester2.prototype.nest = function(groups) {
          var _this = this;
          var listBlocked = this.convertListBlocksToListGroups(groups);
          var groupedByListGroups = this.groupConsecutiveListGroups(listBlocked);
          var nested = array_1.flatten(groupedByListGroups.map(function(group2) {
            if (!Array.isArray(group2)) {
              return group2;
            }
            return _this.nestListSection(group2);
          }));
          var groupRootLists = array_1.groupConsecutiveElementsWhile(nested, function(curr, prev) {
            if (!(curr instanceof group_types_1.ListGroup && prev instanceof group_types_1.ListGroup)) {
              return false;
            }
            return curr.items[0].item.op.isSameListAs(prev.items[0].item.op);
          });
          return groupRootLists.map(function(v) {
            if (!Array.isArray(v)) {
              return v;
            }
            var litems = v.map(function(g) {
              return g.items;
            });
            return new group_types_1.ListGroup(array_1.flatten(litems));
          });
        };
        ListNester2.prototype.convertListBlocksToListGroups = function(items) {
          var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) {
            return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isList() && gPrev.op.isList() && g.op.isSameListAs(gPrev.op) && g.op.hasSameIndentationAs(gPrev.op);
          });
          return grouped.map(function(item) {
            if (!Array.isArray(item)) {
              if (item instanceof group_types_1.BlockGroup && item.op.isList()) {
                return new group_types_1.ListGroup([new group_types_1.ListItem(item)]);
              }
              return item;
            }
            return new group_types_1.ListGroup(item.map(function(g) {
              return new group_types_1.ListItem(g);
            }));
          });
        };
        ListNester2.prototype.groupConsecutiveListGroups = function(items) {
          return array_1.groupConsecutiveElementsWhile(items, function(curr, prev) {
            return curr instanceof group_types_1.ListGroup && prev instanceof group_types_1.ListGroup;
          });
        };
        ListNester2.prototype.nestListSection = function(sectionItems) {
          var _this = this;
          var indentGroups = this.groupByIndent(sectionItems);
          Object.keys(indentGroups).map(Number).sort().reverse().forEach(function(indent) {
            indentGroups[indent].forEach(function(lg) {
              var idx = sectionItems.indexOf(lg);
              if (_this.placeUnderParent(lg, sectionItems.slice(0, idx))) {
                sectionItems.splice(idx, 1);
              }
            });
          });
          return sectionItems;
        };
        ListNester2.prototype.groupByIndent = function(items) {
          return items.reduce(function(pv, cv) {
            var indent = cv.items[0].item.op.attributes.indent;
            if (indent) {
              pv[indent] = pv[indent] || [];
              pv[indent].push(cv);
            }
            return pv;
          }, {});
        };
        ListNester2.prototype.placeUnderParent = function(target, items) {
          for (var i = items.length - 1; i >= 0; i--) {
            var elm = items[i];
            if (target.items[0].item.op.hasHigherIndentThan(elm.items[0].item.op)) {
              var parent = elm.items[elm.items.length - 1];
              if (parent.innerList) {
                parent.innerList.items = parent.innerList.items.concat(target.items);
              } else {
                parent.innerList = target;
              }
              return true;
            }
          }
          return false;
        };
        return ListNester2;
      }();
      exports2.ListNester = ListNester;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/TableGrouper.js
  var require_TableGrouper = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/TableGrouper.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var group_types_1 = require_group_types();
      var array_1 = require_array();
      var TableGrouper = function() {
        function TableGrouper2() {
        }
        TableGrouper2.prototype.group = function(groups) {
          var tableBlocked = this.convertTableBlocksToTableGroups(groups);
          return tableBlocked;
        };
        TableGrouper2.prototype.convertTableBlocksToTableGroups = function(items) {
          var _this = this;
          var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) {
            return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isTable() && gPrev.op.isTable();
          });
          return grouped.map(function(item) {
            if (!Array.isArray(item)) {
              if (item instanceof group_types_1.BlockGroup && item.op.isTable()) {
                return new group_types_1.TableGroup([new group_types_1.TableRow([new group_types_1.TableCell(item)])]);
              }
              return item;
            }
            return new group_types_1.TableGroup(_this.convertTableBlocksToTableRows(item));
          });
        };
        TableGrouper2.prototype.convertTableBlocksToTableRows = function(items) {
          var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) {
            return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isTable() && gPrev.op.isTable() && g.op.isSameTableRowAs(gPrev.op);
          });
          return grouped.map(function(item) {
            return new group_types_1.TableRow(Array.isArray(item) ? item.map(function(it) {
              return new group_types_1.TableCell(it);
            }) : [new group_types_1.TableCell(item)]);
          });
        };
        return TableGrouper2;
      }();
      exports2.TableGrouper = TableGrouper;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/QuillDeltaToHtmlConverter.js
  var require_QuillDeltaToHtmlConverter = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/QuillDeltaToHtmlConverter.js"(exports2) {
      "use strict";
      init_tampermonkey();
      var __importStar = exports2 && exports2.__importStar || function(mod2) {
        if (mod2 && mod2.__esModule)
          return mod2;
        var result = {};
        if (mod2 != null) {
          for (var k in mod2)
            if (Object.hasOwnProperty.call(mod2, k))
              result[k] = mod2[k];
        }
        result["default"] = mod2;
        return result;
      };
      Object.defineProperty(exports2, "__esModule", { value: true });
      var InsertOpsConverter_1 = require_InsertOpsConverter();
      var OpToHtmlConverter_1 = require_OpToHtmlConverter();
      var Grouper_1 = require_Grouper();
      var group_types_1 = require_group_types();
      var ListNester_1 = require_ListNester();
      var funcs_html_1 = require_funcs_html();
      var obj = __importStar(require_object2());
      var value_types_1 = require_value_types();
      var TableGrouper_1 = require_TableGrouper();
      var BrTag = "<br/>";
      var QuillDeltaToHtmlConverter2 = function() {
        function QuillDeltaToHtmlConverter3(deltaOps, options) {
          this.rawDeltaOps = [];
          this.callbacks = {};
          this.options = obj.assign({
            paragraphTag: "p",
            textTag: "span",
            encodeHtml: true,
            classPrefix: "ql",
            inlineStyles: false,
            multiLineBlockquote: true,
            multiLineHeader: true,
            multiLineCodeblock: true,
            multiLineParagraph: true,
            multiLineCustomBlock: true,
            allowBackgroundClasses: false,
            linkTarget: "_blank"
          }, options, {
            orderedListTag: "ol",
            bulletListTag: "ul",
            listItemTag: "li"
          });
          var inlineStyles;
          if (!this.options.inlineStyles) {
            inlineStyles = void 0;
          } else if (typeof this.options.inlineStyles === "object") {
            inlineStyles = this.options.inlineStyles;
          } else {
            inlineStyles = {};
          }
          this.converterOptions = {
            encodeHtml: this.options.encodeHtml,
            classPrefix: this.options.classPrefix,
            inlineStyles,
            listItemTag: this.options.listItemTag,
            paragraphTag: this.options.paragraphTag,
            textTag: this.options.textTag,
            linkRel: this.options.linkRel,
            linkTarget: this.options.linkTarget,
            allowBackgroundClasses: this.options.allowBackgroundClasses,
            customTag: this.options.customTag,
            customTagAttributes: this.options.customTagAttributes,
            customCssClasses: this.options.customCssClasses,
            customCssStyles: this.options.customCssStyles
          };
          this.rawDeltaOps = deltaOps;
        }
        QuillDeltaToHtmlConverter3.prototype._getListTag = function(op) {
          return op.isOrderedList() ? this.options.orderedListTag + "" : op.isBulletList() ? this.options.bulletListTag + "" : op.isCheckedList() ? this.options.bulletListTag + "" : op.isUncheckedList() ? this.options.bulletListTag + "" : "";
        };
        QuillDeltaToHtmlConverter3.prototype.getGroupedOps = function() {
          var deltaOps = InsertOpsConverter_1.InsertOpsConverter.convert(this.rawDeltaOps, this.options);
          var pairedOps = Grouper_1.Grouper.pairOpsWithTheirBlock(deltaOps);
          var groupedSameStyleBlocks = Grouper_1.Grouper.groupConsecutiveSameStyleBlocks(pairedOps, {
            blockquotes: !!this.options.multiLineBlockquote,
            header: !!this.options.multiLineHeader,
            codeBlocks: !!this.options.multiLineCodeblock,
            customBlocks: !!this.options.multiLineCustomBlock
          });
          var groupedOps = Grouper_1.Grouper.reduceConsecutiveSameStyleBlocksToOne(groupedSameStyleBlocks);
          var tableGrouper = new TableGrouper_1.TableGrouper();
          groupedOps = tableGrouper.group(groupedOps);
          var listNester = new ListNester_1.ListNester();
          return listNester.nest(groupedOps);
        };
        QuillDeltaToHtmlConverter3.prototype.convert = function() {
          var _this = this;
          var groups = this.getGroupedOps();
          return groups.map(function(group2) {
            if (group2 instanceof group_types_1.ListGroup) {
              return _this._renderWithCallbacks(value_types_1.GroupType.List, group2, function() {
                return _this._renderList(group2);
              });
            } else if (group2 instanceof group_types_1.TableGroup) {
              return _this._renderWithCallbacks(value_types_1.GroupType.Table, group2, function() {
                return _this._renderTable(group2);
              });
            } else if (group2 instanceof group_types_1.BlockGroup) {
              var g = group2;
              return _this._renderWithCallbacks(value_types_1.GroupType.Block, group2, function() {
                return _this._renderBlock(g.op, g.ops);
              });
            } else if (group2 instanceof group_types_1.BlotBlock) {
              return _this._renderCustom(group2.op, null);
            } else if (group2 instanceof group_types_1.VideoItem) {
              return _this._renderWithCallbacks(value_types_1.GroupType.Video, group2, function() {
                var g2 = group2;
                var converter = new OpToHtmlConverter_1.OpToHtmlConverter(g2.op, _this.converterOptions);
                return converter.getHtml();
              });
            } else {
              return _this._renderWithCallbacks(value_types_1.GroupType.InlineGroup, group2, function() {
                return _this._renderInlines(group2.ops, true);
              });
            }
          }).join("");
        };
        QuillDeltaToHtmlConverter3.prototype._renderWithCallbacks = function(groupType, group2, myRenderFn) {
          var html = "";
          var beforeCb = this.callbacks["beforeRender_cb"];
          html = typeof beforeCb === "function" ? beforeCb.apply(null, [groupType, group2]) : "";
          if (!html) {
            html = myRenderFn();
          }
          var afterCb = this.callbacks["afterRender_cb"];
          html = typeof afterCb === "function" ? afterCb.apply(null, [groupType, html]) : html;
          return html;
        };
        QuillDeltaToHtmlConverter3.prototype._renderList = function(list) {
          var _this = this;
          var firstItem = list.items[0];
          return funcs_html_1.makeStartTag(this._getListTag(firstItem.item.op)) + list.items.map(function(li) {
            return _this._renderListItem(li);
          }).join("") + funcs_html_1.makeEndTag(this._getListTag(firstItem.item.op));
        };
        QuillDeltaToHtmlConverter3.prototype._renderListItem = function(li) {
          li.item.op.attributes.indent = 0;
          var converter = new OpToHtmlConverter_1.OpToHtmlConverter(li.item.op, this.converterOptions);
          var parts = converter.getHtmlParts();
          var liElementsHtml = this._renderInlines(li.item.ops, false);
          return parts.openingTag + liElementsHtml + (li.innerList ? this._renderList(li.innerList) : "") + parts.closingTag;
        };
        QuillDeltaToHtmlConverter3.prototype._renderTable = function(table) {
          var _this = this;
          return funcs_html_1.makeStartTag("table") + funcs_html_1.makeStartTag("tbody") + table.rows.map(function(row) {
            return _this._renderTableRow(row);
          }).join("") + funcs_html_1.makeEndTag("tbody") + funcs_html_1.makeEndTag("table");
        };
        QuillDeltaToHtmlConverter3.prototype._renderTableRow = function(row) {
          var _this = this;
          return funcs_html_1.makeStartTag("tr") + row.cells.map(function(cell) {
            return _this._renderTableCell(cell);
          }).join("") + funcs_html_1.makeEndTag("tr");
        };
        QuillDeltaToHtmlConverter3.prototype._renderTableCell = function(cell) {
          var converter = new OpToHtmlConverter_1.OpToHtmlConverter(cell.item.op, this.converterOptions);
          var parts = converter.getHtmlParts();
          var cellElementsHtml = this._renderInlines(cell.item.ops, false);
          return funcs_html_1.makeStartTag("td", {
            key: "data-row",
            value: cell.item.op.attributes.table
          }) + parts.openingTag + cellElementsHtml + parts.closingTag + funcs_html_1.makeEndTag("td");
        };
        QuillDeltaToHtmlConverter3.prototype._renderBlock = function(bop, ops) {
          var _this = this;
          var converter = new OpToHtmlConverter_1.OpToHtmlConverter(bop, this.converterOptions);
          var htmlParts = converter.getHtmlParts();
          if (bop.isCodeBlock()) {
            return htmlParts.openingTag + funcs_html_1.encodeHtml(ops.map(function(iop) {
              return iop.isCustomEmbed() ? _this._renderCustom(iop, bop) : iop.insert.value;
            }).join("")) + htmlParts.closingTag;
          }
          var inlines = ops.map(function(op) {
            return _this._renderInline(op, bop);
          }).join("");
          return htmlParts.openingTag + (inlines || BrTag) + htmlParts.closingTag;
        };
        QuillDeltaToHtmlConverter3.prototype._renderInlines = function(ops, isInlineGroup) {
          var _this = this;
          if (isInlineGroup === void 0) {
            isInlineGroup = true;
          }
          var opsLen = ops.length - 1;
          var html = ops.map(function(op, i) {
            if (i > 0 && i === opsLen && op.isJustNewline()) {
              return "";
            }
            return _this._renderInline(op, null);
          }).join("");
          if (!isInlineGroup) {
            return html;
          }
          var startParaTag = funcs_html_1.makeStartTag(this.options.paragraphTag);
          var endParaTag = funcs_html_1.makeEndTag(this.options.paragraphTag);
          if (html === BrTag || this.options.multiLineParagraph) {
            return startParaTag + html + endParaTag;
          }
          return startParaTag + html.split(BrTag).map(function(v) {
            return v === "" ? BrTag : v;
          }).join(endParaTag + startParaTag) + endParaTag;
        };
        QuillDeltaToHtmlConverter3.prototype._renderInline = function(op, contextOp) {
          if (op.isCustomEmbed()) {
            return this._renderCustom(op, contextOp);
          }
          var converter = new OpToHtmlConverter_1.OpToHtmlConverter(op, this.converterOptions);
          return converter.getHtml().replace(/\\n/g, BrTag);
        };
        QuillDeltaToHtmlConverter3.prototype._renderCustom = function(op, contextOp) {
          var renderCb = this.callbacks["renderCustomOp_cb"];
          if (typeof renderCb === "function") {
            return renderCb.apply(null, [op, contextOp]);
          }
          return "";
        };
        QuillDeltaToHtmlConverter3.prototype.beforeRender = function(cb) {
          if (typeof cb === "function") {
            this.callbacks["beforeRender_cb"] = cb;
          }
        };
        QuillDeltaToHtmlConverter3.prototype.afterRender = function(cb) {
          if (typeof cb === "function") {
            this.callbacks["afterRender_cb"] = cb;
          }
        };
        QuillDeltaToHtmlConverter3.prototype.renderCustomWith = function(cb) {
          this.callbacks["renderCustomOp_cb"] = cb;
        };
        return QuillDeltaToHtmlConverter3;
      }();
      exports2.QuillDeltaToHtmlConverter = QuillDeltaToHtmlConverter2;
    }
  });

  // node_modules/quill-delta-to-html-cb/dist/commonjs/main.js
  var require_main = __commonJS({
    "node_modules/quill-delta-to-html-cb/dist/commonjs/main.js"(exports2) {
      "use strict";
      init_tampermonkey();
      Object.defineProperty(exports2, "__esModule", { value: true });
      var QuillDeltaToHtmlConverter_1 = require_QuillDeltaToHtmlConverter();
      exports2.QuillDeltaToHtmlConverter = QuillDeltaToHtmlConverter_1.QuillDeltaToHtmlConverter;
      var OpToHtmlConverter_1 = require_OpToHtmlConverter();
      exports2.OpToHtmlConverter = OpToHtmlConverter_1.OpToHtmlConverter;
      var group_types_1 = require_group_types();
      exports2.InlineGroup = group_types_1.InlineGroup;
      exports2.VideoItem = group_types_1.VideoItem;
      exports2.BlockGroup = group_types_1.BlockGroup;
      exports2.ListGroup = group_types_1.ListGroup;
      exports2.ListItem = group_types_1.ListItem;
      exports2.BlotBlock = group_types_1.BlotBlock;
      var DeltaInsertOp_1 = require_DeltaInsertOp();
      exports2.DeltaInsertOp = DeltaInsertOp_1.DeltaInsertOp;
      var InsertData_1 = require_InsertData();
      exports2.InsertDataQuill = InsertData_1.InsertDataQuill;
      exports2.InsertDataCustom = InsertData_1.InsertDataCustom;
      var value_types_1 = require_value_types();
      exports2.NewLine = value_types_1.NewLine;
      exports2.ListType = value_types_1.ListType;
      exports2.ScriptType = value_types_1.ScriptType;
      exports2.DirectionType = value_types_1.DirectionType;
      exports2.AlignType = value_types_1.AlignType;
      exports2.DataType = value_types_1.DataType;
      exports2.GroupType = value_types_1.GroupType;
    }
  });

  // src/index.ts
  init_tampermonkey();

  // src/core/bilibili-old.ts
  init_tampermonkey();
  var import_md52 = __toESM(require_md5());

  // src/utils/base64.ts
  init_tampermonkey();
  var base64 = new class {
    /**
     * Base64编码
     * @param str 原始字符串
     * @returns 编码结果
     */
    encode(str) {
      return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
        return String.fromCharCode("0x" + p1);
      }));
    }
    /**
     * Base64解码
     * @param str 原始字符串
     * @returns 解码结果
     */
    decode(str) {
      return decodeURIComponent(atob(str).split("").map(function(c) {
        return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
      }).join(""));
    }
    /**
     * Base64编码
     * @param buffer Uint8Array
     * @returns 编码结果
     */
    encodeFromUint8Array(buffer) {
      return btoa(String.fromCharCode(...buffer));
    }
    /**
     * Base64编码
     * @param str 
     * @returns 
     */
    decodeToUint8Array(str) {
      return new Uint8Array(atob(str).split("").map((d) => d.charCodeAt(0)));
    }
  }();

  // src/utils/debug.ts
  init_tampermonkey();

  // src/utils/format/time.ts
  init_tampermonkey();

  // src/utils/format/integer.ts
  init_tampermonkey();
  function integerFormat(num, byte = 2) {
    return num < 10 ** byte ? (Array(byte).join("0") + num).slice(-1 * byte) : num;
  }

  // src/utils/format/time.ts
  function timeFormat(time = (/* @__PURE__ */ new Date()).getTime(), type) {
    const date = new Date(time);
    const arr2 = date.toLocaleString().split(" ");
    const day = arr2[0].split("/");
    day[1] = integerFormat(day[1], 2);
    day[2] = integerFormat(day[2], 2);
    return type ? day.join("-") + " " + arr2[1] : arr2[1];
  }

  // src/utils/debug.ts
  var group = {
    /** 分组层次 */
    i: 0,
    /** 分组栈 */
    call: []
  };
  function debug(...data) {
    group.call.push(console.log.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  }
  debug.assert = function(condition, ...data) {
    group.call.push(console.assert.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.clear = function() {
    group.i = 0;
    group.call = [];
    setTimeout(console.clear.bind(console));
    return debug;
  };
  debug.debug = function(...data) {
    group.call.push(console.debug.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.error = function(...data) {
    group.call.push(console.error.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.group = function(...data) {
    group.i++;
    group.call.push(console.group.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    return debug;
  };
  debug.groupCollapsed = function(...data) {
    group.i++;
    group.call.push(console.groupCollapsed.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    return debug;
  };
  debug.groupEnd = function() {
    if (group.i) {
      group.i--;
      group.call.push(console.groupEnd.bind(console));
      !group.i && (group.call.push(() => group.call = []), group.call.forEach((d) => setTimeout(d)));
    }
    return debug;
  };
  debug.info = function(...data) {
    group.call.push(console.info.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.log = function(...data) {
    group.call.push(console.log.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.table = function(tabularData, properties) {
    group.call.push(console.table.bind(console, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.time = function(label) {
    console.time(label);
    return debug;
  };
  debug.timeEnd = function(label) {
    console.timeEnd(label);
    return debug;
  };
  debug.timeLog = function(label, ...data) {
    console.timeLog(label, \`[\${timeFormat()}]\`, ...data);
    return debug;
  };
  debug.trace = function(...data) {
    group.call.push(console.trace.bind(console, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };
  debug.warn = function(...data) {
    group.call.push(console.warn.bind(console, \`[\${timeFormat()}]\`, ...arguments));
    !group.i && setTimeout(group.call.shift());
    return debug;
  };

  // src/utils/format/url.ts
  init_tampermonkey();

  // src/utils/typeof.ts
  init_tampermonkey();
  var isArray = Array.isArray;
  var isObject = (val) => val !== null && typeof val === "object";
  var isNumber = (val) => !isNaN(parseFloat(val)) && isFinite(val);

  // src/utils/format/url.ts
  var URL2 = class {
    /** 锚 */
    hash;
    /** 基链 */
    base;
    /** 参数对象。结果会格式化\`undefined\`\`null\`\`NaN\`等特殊值,但不会处理数字,以免丢失精度。 */
    params = {};
    /** 参数链(不含\`?\`) */
    get param() {
      return Object.entries(this.params).reduce((s, d) => {
        return s += \`\${s ? "&" : ""}\${d[0]}=\${d[1]}\`;
      }, "");
    }
    /** 提取URL参数 */
    constructor(url) {
      const arr1 = url.split("#");
      let str = arr1.shift();
      this.hash = arr1.join("#");
      (this.hash || url.includes("#")) && (this.hash = \`#\${this.hash}\`);
      const arr2 = str.split("?");
      this.base = arr2.shift();
      str = arr2.join("?");
      if (str) {
        str.split("&").forEach((d) => {
          const arr3 = d.split("=");
          const key = arr3.shift();
          if (key) {
            let value = arr3.join("=") || "";
            try {
              if (!isNumber(value)) {
                value = JSON.parse(value);
              }
            } catch {
              value === "undefined" && (value = void 0);
              value === "NaN" && (value = NaN);
            }
            this.params[key] = value;
          }
        });
      }
    }
    sort() {
      this.params = Object.keys(this.params).sort().reduce((s, d) => {
        s[d] = this.params[d];
        return s;
      }, {});
    }
    /** 还原url链接 */
    toJSON() {
      return \`\${this.base ? this.param ? this.base + "?" : this.base : ""}\${this.param}\${this.hash || ""}\`;
    }
  };
  function objUrl(url, obj) {
    const res = new URL2(url);
    Object.entries(obj).forEach((d) => {
      if (d[1] === void 0 || d[1] === null)
        return;
      res.params[d[0]] = d[1];
    });
    return res.toJSON();
  }
  function urlObj(url) {
    const res = new URL2(url);
    return res.params;
  }

  // src/utils/htmlvnode.ts
  init_tampermonkey();
  var Vnode = class {
    tagName;
    props = {};
    children = [];
    text;
    constructor(tagName) {
      this.tagName = tagName;
    }
  };
  var Scanner = class {
    /** HTML */
    html;
    /** 当前光标 */
    pos = 0;
    /** Vnode */
    vnode = [];
    /** 节点名栈 */
    tagNames = [];
    /** Vnode栈 */
    targets = [];
    /** innerText栈 */
    text = "";
    /** 引号栈 */
    quote = "";
    /**
     * 扫描html文本转化为Vnode
     * @param html html文本
     */
    constructor(html) {
      this.html = html;
      this.targets.push({ children: this.vnode });
      while (this.html) {
        this.organizeTag();
      }
      this.textContent();
    }
    /** 提取节点名 */
    organizeTag() {
      if (!this.quote && this.html[0] === "<") {
        if (this.html.startsWith(\`</\${this.tagNames.at(-1)}\`)) {
          this.textContent();
          this.html = this.html.replace(new RegExp(\`^</\${this.tagNames.at(-1)}>\`), "");
          this.popNode();
        } else if (this.tagNames.at(-1) === "script") {
          this.addText();
        } else {
          this.removeScanned();
          if (this.html.startsWith("!--")) {
            this.html = this.html.replace(/^!--[\\S\\s]+?-->/, "");
          }
          if (this.html.startsWith("!DOCTYPE")) {
            this.html = this.html.replace(/^!DOCTYPE[\\S\\s]+?>/, "");
          }
          if (/^[a-zA-Z]/.test(this.html)) {
            this.textContent();
            const func = [];
            let stop = false;
            for (this.pos = 0; this.pos < this.html.length; this.pos++) {
              if (stop) {
                this.pos--;
                break;
              }
              switch (this.html[this.pos]) {
                case " ":
                case "\\r":
                case "\\n":
                  func.push(() => this.organizeProp());
                  stop = true;
                  break;
                case ">":
                  this.html[this.pos - 1] === "/" ? func.push(() => this.popNode()) : func.push(() => this.tagSingle());
                  stop = true;
                  break;
              }
            }
            const tagName = this.html.substring(0, this.pos);
            const tag = new Vnode(tagName);
            this.tagNames.push(tagName);
            this.targets.at(-1).children.push(tag);
            this.targets.push(tag);
            this.removeScanned(this.pos + 1);
            func.forEach((d) => d());
          }
        }
      } else {
        this.addText();
      }
    }
    /** 记录疑似文本节点 */
    addText() {
      switch (this.html[0]) {
        case "'":
          !this.quote ? this.quote = "'" : this.quote === "'" && (this.quote = "");
          break;
        case '"':
          !this.quote ? this.quote = '"' : this.quote === '"' && (this.quote = "");
          break;
        case "\`":
          !this.quote ? this.quote = "\`" : this.quote === "\`" && (this.quote = "");
          break;
      }
      this.text += this.html[0];
      this.removeScanned();
    }
    /** 提取属性 */
    organizeProp() {
      let value = false;
      let stop = false;
      let start = 0;
      let popd = false;
      for (this.pos = 0; this.pos < this.html.length; this.pos++) {
        if (stop)
          break;
        switch (this.html[this.pos]) {
          case '"':
            value = !value;
            break;
          case " ":
            if (!value) {
              const str = this.html.substring(start, this.pos).replace(/\\r|\\n|"/g, "").replace(/^ +/, "");
              const prop = str.split("=");
              const key = prop.shift();
              key && key !== "/" && (this.targets.at(-1).props[key] = prop.join("=") || key);
              start = this.pos;
            }
            break;
          case ">":
            if (!value) {
              stop = true;
              const str = this.html.substring(start, this.pos).replace(/\\r|\\n|"/g, "").replace(/^ +/, "");
              const prop = str.split("=");
              const key = prop.shift();
              key && key !== "/" && (this.targets.at(-1).props[key] = prop.join("=") || key);
              if (this.html[this.pos - 1] === "/") {
                this.popNode();
                popd = true;
              }
            }
            break;
        }
      }
      if (!popd)
        this.tagSingle();
      this.removeScanned(this.pos--);
    }
    /** 出栈检查 空元素直接出栈*/
    tagSingle() {
      switch (this.tagNames.at(-1)) {
        case "area":
        case "base":
        case "br":
        case "col":
        case "colgroup":
        case "command":
        case "embed":
        case "hr":
        case "img":
        case "input":
        case "keygen":
        case "link":
        case "meta":
        case "param":
        case "path":
        case "source":
        case "track":
        case "wbr":
          this.popNode();
          break;
      }
    }
    /** 节点出栈 */
    popNode() {
      this.tagNames.splice(this.tagNames.length - 1, 1);
      this.targets.splice(this.targets.length - 1, 1);
      this.text = "";
    }
    /** 移除已扫描字符长度 默认1位 */
    removeScanned(length2 = 1) {
      this.html = this.html.slice(length2);
    }
    /** 处理TextContent */
    textContent() {
      const text = this.text.replace(/\\r|\\n| /g, "");
      if (text) {
        const tag = new Vnode("text");
        tag.text = this.text;
        this.targets.at(-1).children.push(tag);
      }
      this.text = "";
    }
  };
  function htmlVnode(html) {
    return new Scanner(html).vnode;
  }

  // src/core/danmaku.ts
  init_tampermonkey();

  // src/io/grpc/api-dm-web.ts
  init_tampermonkey();
  var import_light = __toESM(require_light());

  // src/json/dm-web.json
  var dm_web_default = {
    nested: {
      bilibili: {
        nested: {
          community: {
            nested: {
              service: {
                nested: {
                  dm: {
                    nested: {
                      v1: {
                        nested: {
                          DmWebViewReply: {
                            fields: {
                              state: {
                                type: "int32",
                                id: 1
                              },
                              text: {
                                type: "string",
                                id: 2
                              },
                              textSide: {
                                type: "string",
                                id: 3
                              },
                              dmSge: {
                                type: "DmSegConfig",
                                id: 4
                              },
                              flag: {
                                type: "DanmakuFlagConfig",
                                id: 5
                              },
                              specialDms: {
                                rule: "repeated",
                                type: "string",
                                id: 6
                              },
                              checkBox: {
                                type: "bool",
                                id: 7
                              },
                              count: {
                                type: "int64",
                                id: 8
                              },
                              commandDms: {
                                rule: "repeated",
                                type: "CommandDm",
                                id: 9
                              },
                              dmSetting: {
                                type: "DanmuWebPlayerConfig",
                                id: 10
                              },
                              reportFilter: {
                                rule: "repeated",
                                type: "string",
                                id: 11
                              }
                            }
                          },
                          CommandDm: {
                            fields: {
                              id: {
                                type: "int64",
                                id: 1
                              },
                              oid: {
                                type: "int64",
                                id: 2
                              },
                              mid: {
                                type: "int64",
                                id: 3
                              },
                              command: {
                                type: "string",
                                id: 4
                              },
                              content: {
                                type: "string",
                                id: 5
                              },
                              progress: {
                                type: "int32",
                                id: 6
                              },
                              ctime: {
                                type: "string",
                                id: 7
                              },
                              mtime: {
                                type: "string",
                                id: 8
                              },
                              extra: {
                                type: "string",
                                id: 9
                              },
                              idStr: {
                                type: "string",
                                id: 10
                              }
                            }
                          },
                          DmSegConfig: {
                            fields: {
                              pageSize: {
                                type: "int64",
                                id: 1
                              },
                              total: {
                                type: "int64",
                                id: 2
                              }
                            }
                          },
                          DanmakuFlagConfig: {
                            fields: {
                              recFlag: {
                                type: "int32",
                                id: 1
                              },
                              recText: {
                                type: "string",
                                id: 2
                              },
                              recSwitch: {
                                type: "int32",
                                id: 3
                              }
                            }
                          },
                          DmSegMobileReply: {
                            fields: {
                              elems: {
                                rule: "repeated",
                                type: "DanmakuElem",
                                id: 1
                              }
                            }
                          },
                          DanmakuElem: {
                            fields: {
                              id: {
                                type: "int64",
                                id: 1
                              },
                              progress: {
                                type: "int32",
                                id: 2
                              },
                              mode: {
                                type: "int32",
                                id: 3
                              },
                              fontsize: {
                                type: "int32",
                                id: 4
                              },
                              color: {
                                type: "uint32",
                                id: 5
                              },
                              midHash: {
                                type: "string",
                                id: 6
                              },
                              content: {
                                type: "string",
                                id: 7
                              },
                              ctime: {
                                type: "int64",
                                id: 8
                              },
                              weight: {
                                type: "int32",
                                id: 9
                              },
                              action: {
                                type: "string",
                                id: 10
                              },
                              pool: {
                                type: "int32",
                                id: 11
                              },
                              idStr: {
                                type: "string",
                                id: 12
                              },
                              attr: {
                                type: "int32",
                                id: 13
                              }
                            }
                          },
                          DanmuWebPlayerConfig: {
                            fields: {
                              dmSwitch: {
                                type: "bool",
                                id: 1
                              },
                              aiSwitch: {
                                type: "bool",
                                id: 2
                              },
                              aiLevel: {
                                type: "int32",
                                id: 3
                              },
                              blocktop: {
                                type: "bool",
                                id: 4
                              },
                              blockscroll: {
                                type: "bool",
                                id: 5
                              },
                              blockbottom: {
                                type: "bool",
                                id: 6
                              },
                              blockcolor: {
                                type: "bool",
                                id: 7
                              },
                              blockspecial: {
                                type: "bool",
                                id: 8
                              },
                              preventshade: {
                                type: "bool",
                                id: 9
                              },
                              dmask: {
                                type: "bool",
                                id: 10
                              },
                              opacity: {
                                type: "float",
                                id: 11
                              },
                              dmarea: {
                                type: "int32",
                                id: 12
                              },
                              speedplus: {
                                type: "float",
                                id: 13
                              },
                              fontsize: {
                                type: "float",
                                id: 14
                              },
                              screensync: {
                                type: "bool",
                                id: 15
                              },
                              speedsync: {
                                type: "bool",
                                id: 16
                              },
                              fontfamily: {
                                type: "string",
                                id: 17
                              },
                              bold: {
                                type: "bool",
                                id: 18
                              },
                              fontborder: {
                                type: "int32",
                                id: 19
                              },
                              drawType: {
                                type: "string",
                                id: 20
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  };

  // src/utils/danmaku.ts
  init_tampermonkey();
  var DanmakuBase = class {
    /** 从小到大排序弹幕 */
    static sortDmById(dms) {
      dms.sort((a, b) => this.bigInt(a.idStr, b.idStr) ? 1 : -1);
    }
    /** 比较两个弹幕ID先后 */
    static bigInt(num1, num2) {
      String(num1).replace(/\\d+/, (d) => num1 = d.replace(/^0+/, ""));
      String(num2).replace(/\\d+/, (d) => num2 = d.replace(/^0+/, ""));
      if (num1.length > num2.length)
        return true;
      else if (num1.length < num2.length)
        return false;
      else {
        for (let i = 0; i < num1.length; i++) {
          if (num1[i] > num2[i])
            return true;
          if (num1[i] < num2[i])
            return false;
        }
        return false;
      }
    }
    /** 重构为旧版弹幕类型 */
    static parseCmd(dms) {
      return dms.map((d) => {
        var _a3;
        const dm = {
          class: d.pool || 0,
          color: d.color || 0,
          date: d.ctime || 0,
          dmid: d.idStr || "",
          mode: +d.mode || 1,
          pool: d.pool || 0,
          size: d.fontsize || 25,
          stime: d.progress / 1e3 || 0,
          text: d.content && d.mode != 8 && d.mode != 9 ? d.content.replace(/(\\/n|\\\\n|\\n|\\r\\n)/g, "\\n") : d.content,
          uhash: d.midHash || "",
          uid: d.midHash || "",
          weight: d.weight,
          attr: d.attr
        };
        ((_a3 = d.action) == null ? void 0 : _a3.startsWith("picture:")) && (dm.html = \`<img src="\${d.action.replace("picture:", "//")}" style="width:auto;height:28.13px;">\`);
        return dm;
      });
    }
    /** 解析解码xml弹幕 */
    static decodeXml(xml) {
      if (typeof xml === "string") {
        xml = xml.replace(/((?:[\\0-\\x08\\x0B\\f\\x0E-\\x1F\\uFFFD\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))/g, "");
        xml = new DOMParser().parseFromString(xml, "application/xml");
      }
      const items = xml.querySelectorAll("d");
      const dms = [];
      items.forEach((d) => {
        const json = d.getAttribute("p").split(",");
        const text = d.textContent || d.text;
        if (text) {
          const dm = {
            pool: Number(json[5]),
            color: Number(json[3]),
            ctime: Number(json[4]),
            id: Number(json[7]),
            idStr: String(json[7]),
            mode: Number(json[1]),
            fontsize: Number(json[2]),
            progress: Number(json[0]) * 1e3,
            content: String(text),
            midHash: json[6]
          };
          dms.push(dm);
        }
      });
      return dms;
    }
    /** 编码xml弹幕 */
    static encodeXml(dms, cid) {
      return dms.reduce((s, d) => {
        var _a3;
        const text = d.mode === 8 || d.mode === 9 ? d.text : ((_a3 = d.text) != null ? _a3 : "").replace(/(\\n|\\r\\n)/g, "/n");
        s += \`<d p="\${d.stime},\${d.mode},\${d.size},\${d.color},\${d.date},\${d.class},\${d.uid},\${d.dmid}">\${text.replace(/[<&]/g, (a) => {
          return { "<": "&lt;", "&": "&amp;" }[a];
        })}</d>
\`;
        return s;
      }, \`<?xml version="1.0" encoding="UTF-8"?><i><chatserver>chat.api.bilibili.com</chatserver><chatid>\${cid}</chatid><mission>0</mission><maxlimit>\${dms.length}</maxlimit><state>0</state><real_name>0</real_name><source>k-v</source>
\`) + "</i>";
    }
  };

  // src/io/urls.ts
  init_tampermonkey();
  var URLS = class _URLS {
    // protocol + //
    static P_AUTO = "//";
    static P_HTTP = "http://";
    static P_HTTPS = "https://";
    static P_WS = "ws://";
    static P_WSS = "wss://";
    // domain
    static D_WWW = "www.bilibili.com";
    static D_API = "api.bilibili.com";
    static D_APP = "app.bilibili.com";
    static D_MANAGER = "manager.bilibili.co";
    static D_INTERFACE = "interface.bilibili.com";
    static D_PASSPORT = "passport.bilibili.com";
    static D_BANGUMI = "bangumi.bilibili.com";
    static D_SPACE = "space.bilibili.com";
    static D_STATIC_S = "static.hdslb.com";
    static D_CHAT = "chat.bilibili.com";
    static D_DATA = "data.bilibili.com";
    static D_COMMENT = "comment.bilibili.com";
    static D_BROADCAST = "broadcast.bilibili.com";
    static D_MISAKA_SW = "misaka-sw.bilibili.com";
    static D_MEMBER = "member.bilibili.com";
    static D_BVC = "bvc.bilivideo.com";
    static D_S1 = "s1.hdslb.com";
    static D_API_GLOBAL = "api.global.bilibili.com";
    static D_ACCOUNT = "account.bilibili.com";
    static D_INTL = "apiintl.biliapi.net";
    static D_API_VC = "api.vc.bilibili.com";
    static WEBSHOW_LOCS = _URLS.P_AUTO + _URLS.D_API + "/x/web-show/res/locs";
    static INDEX_TOP_RCMD = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/index/top/rcmd";
    static PAGE_HEADER = _URLS.P_AUTO + _URLS.D_API + "/x/web-show/page/header";
    static SEASON_RANK_LIST = _URLS.P_AUTO + _URLS.D_API + "/pgc/season/rank/web/list";
    static VIDEO = _URLS.P_AUTO + _URLS.D_STATIC_S + "/js/video.min.js";
    static JQUERY = _URLS.P_AUTO + _URLS.D_STATIC_S + "/js/jquery.min.js";
    static ARTICLE_CARDS = _URLS.P_AUTO + _URLS.D_API + "/x/article/cards";
    static VIEW_DETAIL = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/view/detail";
    static VIEW = _URLS.P_AUTO + _URLS.D_API + "/view";
    static X_VIEW = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/view";
    static PAGE_LIST = _URLS.P_AUTO + _URLS.D_API + "/x/player/pagelist";
    static TAG_INFO = _URLS.P_AUTO + _URLS.D_API + "/x/tag/info";
    static TAG_TOP = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/tag/top";
    static BANGUMI_SEASON = _URLS.P_AUTO + _URLS.D_BANGUMI + "/view/web_api/season";
    static SEASON_STATUS = _URLS.P_AUTO + _URLS.D_API + "/pgc/view/web/season/user/status";
    static PGC_SEASON = _URLS.P_AUTO + _URLS.D_API + "/pgc/view/web/season";
    static SEASON_SECTION = _URLS.P_AUTO + _URLS.D_API + "/pgc/web/season/section";
    static GLOBAL_OGV_VIEW = _URLS.P_AUTO + _URLS.D_API_GLOBAL + "/intl/gateway/v2/ogv/view/app/season";
    static GLOBAL_OGV_PLAYURL = _URLS.P_AUTO + _URLS.D_API_GLOBAL + "/intl/gateway/v2/ogv/playurl";
    static APP_PGC_PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurl";
    static ACCOUNT_GETCARDBYMID = _URLS.P_AUTO + _URLS.D_ACCOUNT + "/api/member/getCardByMid";
    static LOGIN_APP_THIRD = _URLS.P_AUTO + _URLS.D_PASSPORT + "/login/app/third";
    static PLAYER = _URLS.P_AUTO + _URLS.D_API + "/x/player/v2";
    static PLAYURL_PROJ = _URLS.P_AUTO + _URLS.D_APP + "/v2/playurlproj";
    static PGC_PLAYURL_PROJ = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurlproj";
    static PGC_PLAYURL_TV = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurltv";
    static UGC_PLAYURL_TV = _URLS.P_AUTO + _URLS.D_API + "/x/tv/ugc/playurl";
    static PGC_PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/web/playurl";
    static PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/x/player/playurl";
    static INTL_PLAYURL = _URLS.P_AUTO + _URLS.D_APP + "/x/intl/playurl";
    static INTL_OGV_PLAYURL = _URLS.P_AUTO + _URLS.D_INTL + "/intl/gateway/ogv/player/api/playurl";
    static PLAYURL_INTERFACE = _URLS.P_AUTO + _URLS.D_INTERFACE + "/v2/playurl";
    static PLAYURL_BANGUMI = _URLS.P_AUTO + _URLS.D_BANGUMI + "/player/web_api/v2/playurl";
    static LIKE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/like";
    static HAS_LIKE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/has/like";
    static DM_WEB_VIEW = _URLS.P_AUTO + _URLS.D_API + "/x/v2/dm/web/view";
    static DM_WEB_SEG_SO = _URLS.P_AUTO + _URLS.D_API + "/x/v2/dm/web/seg.so";
    static STAT = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/stat";
    static SLIDE_SHOW = _URLS.P_AUTO + _URLS.D_API + "/pgc/operation/api/slideshow";
    static SEARCH_SQUARE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/search/square";
    static SPACE_ARC = _URLS.P_AUTO + _URLS.D_API + "/x/space/wbi/arc/search";
    static NEWLIST = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/newlist";
    static SEARCH = _URLS.P_AUTO + _URLS.D_API + "/search";
    static REPLY = _URLS.P_AUTO + _URLS.D_API + "/x/v2/reply";
    static ARTICLE_UPCOVER = _URLS.P_AUTO + _URLS.D_API + "/x/article/creative/article/upcover";
    static DRAW_IMAGE_UPLOAD = _URLS.P_AUTO + _URLS.D_API_VC + "/api/v1/drawImage/upload";
    static DYNAMIC_UPLOAD_BFS = _URLS.P_AUTO + _URLS.D_API + "/x/dynamic/feed/draw/upload_bfs";
    /** 退出登录 */
    static PASSPORT_LOGIN_EXIT = _URLS.P_AUTO + _URLS.D_PASSPORT + "/login/exit/v2";
    static PASSPORT_AUTH_CODE = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/qrcode/auth_code";
    static PASSPORT_QRCODE_CONFIRM = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/h5/qrcode/confirm";
    static PASSPORT_QRCODE_POLL = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/qrcode/poll";
  };

  // src/io/grpc/api-dm-web.ts
  var ApiDmWeb = class _ApiDmWeb {
    constructor(aid, cid) {
      this.aid = aid;
      this.cid = cid;
      _ApiDmWeb.Root || _ApiDmWeb.RootInit();
    }
    static Root;
    static DmWebViewReply;
    static DmSegMobileReply;
    static RootInit() {
      this.Root = import_light.Root.fromJSON(dm_web_default);
      this.DmWebViewReply = this.Root.lookupType("DmWebViewReply");
      this.DmSegMobileReply = this.Root.lookupType("DmSegMobileReply");
    }
    danmaku = [];
    /** 获取新版弹幕 */
    async getData() {
      var _a3, _b2;
      if (!this.danmaku.length) {
        const dmWebView = await this.DmWebViewReply();
        const pageSize = dmWebView.dmSge.pageSize ? dmWebView.dmSge.pageSize / 1e3 : 360;
        const total = this.aid == window.aid && ((_b2 = (_a3 = window.player) == null ? void 0 : _a3.getDuration) == null ? void 0 : _b2.call(_a3)) / pageSize + 1 || dmWebView.dmSge.total;
        const promises = [];
        for (let i = 1; i <= total; i++) {
          promises.push(
            this.DmSegMobileReply(i).then((d) => {
              d.elems && (this.danmaku = this.danmaku.concat(d.elems));
            }).catch((e) => {
              console.warn("弹幕丢包:", \`segment_index=\${i}\`, e);
            })
          );
        }
        dmWebView.specialDms && dmWebView.specialDms.forEach((d) => {
          promises.push(
            this.specialDm(d.replace("http:", "")).then((d2) => {
              d2.elems && (this.danmaku = this.danmaku.concat(d2.elems));
            }).catch((e) => {
              console.warn("高级弹幕丢包:", d, e);
            })
          );
        });
        await Promise.all(promises);
        DanmakuBase.sortDmById(this.danmaku);
      }
      return this.danmaku;
    }
    /** 获取旧版弹幕 */
    async toCmd() {
      const danmaku2 = await this.getData();
      return DanmakuBase.parseCmd(danmaku2);
    }
    /** 获取弹幕分包 */
    async DmWebViewReply() {
      const response = await fetch(objUrl(URLS.DM_WEB_VIEW, {
        type: 1,
        oid: this.cid,
        pid: this.aid
      }), { credentials: "include", cache: "force-cache" });
      const arraybuffer = await response.arrayBuffer();
      const msg = _ApiDmWeb.DmWebViewReply.decode(new Uint8Array(arraybuffer));
      return _ApiDmWeb.DmWebViewReply.toObject(msg);
    }
    /** 获取弹幕分包 */
    async DmSegMobileReply(segment_index = 1) {
      const response = await fetch(objUrl(URLS.DM_WEB_SEG_SO, {
        type: 1,
        oid: this.cid,
        pid: this.aid,
        segment_index
      }), { credentials: "include" });
      const arraybuffer = await response.arrayBuffer();
      const msg = _ApiDmWeb.DmSegMobileReply.decode(new Uint8Array(arraybuffer));
      return _ApiDmWeb.DmSegMobileReply.toObject(msg);
    }
    /** 获取高级弹幕 */
    async specialDm(url) {
      const response = await fetch(url);
      const arraybuffer = await response.arrayBuffer();
      const msg = _ApiDmWeb.DmSegMobileReply.decode(new Uint8Array(arraybuffer));
      return _ApiDmWeb.DmSegMobileReply.toObject(msg);
    }
  };

  // src/utils/file.ts
  init_tampermonkey();
  function readAs(file, type = "string", encoding = "utf-8") {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      switch (type) {
        case "ArrayBuffer":
          reader.readAsArrayBuffer(file);
          break;
        case "DataURL":
          reader.readAsDataURL(file);
          break;
        case "string":
          reader.readAsText(file, encoding);
          break;
      }
      reader.onload = () => resolve(reader.result);
      reader.onerror = (e) => reject(e);
    });
  }
  async function saveAs(content, fileName, contentType = "text/plain") {
    const a = document.createElement("a");
    const file = new Blob([content], { type: contentType });
    a.href = URL.createObjectURL(file);
    a.download = fileName;
    a.addEventListener("load", () => URL.revokeObjectURL(a.href));
    a.click();
    setTimeout(() => {
      a.remove();
      window.URL.revokeObjectURL(a.href);
    }, 3e3);
  }
  function fileRead(accept, multiple) {
    return new Promise((resolve, reject) => {
      const input = document.createElement("input");
      input.type = "file";
      accept && (input.accept = accept);
      multiple && (input.multiple = multiple);
      input.style.opacity = "0";
      input.addEventListener("cancel", () => {
        reject(new DOMException("The user aborted a request.", "AbortError"));
      });
      input.addEventListener("change", () => {
        resolve(input.multiple ? input.files : input.files[0]);
      });
      input.click();
    });
  }

  // src/utils/format/size.ts
  init_tampermonkey();
  function sizeFormat(size = 0) {
    let unit = ["B", "K", "M", "G"], i = unit.length - 1, dex = 1024 ** i, vor = 1e3 ** i;
    while (dex > 1) {
      if (size >= vor) {
        size = Number((size / dex).toFixed(2));
        break;
      }
      dex = dex / 1024;
      vor = vor / 1e3;
      i--;
    }
    return size ? size + unit[i] : "N/A";
  }

  // src/utils/hook/method.ts
  init_tampermonkey();
  function methodHook(target, propertyKey, callback, modifyArguments) {
    try {
      let modify2 = function() {
        loaded = true;
        if (values[0]) {
          Reflect.defineProperty(target, propertyKey, { configurable: true, value: values[0] });
          iArguments.forEach((d) => values[0](...d));
        } else {
          debug.error("拦截方法出错!", "目标方法", propertyKey, "所属对象", target);
        }
      };
      var modify = modify2;
      const values = [];
      const iArguments = [];
      let loading2 = false;
      let loaded = false;
      Reflect.defineProperty(target, propertyKey, {
        configurable: true,
        set: (v) => {
          if (loading2 && !loaded) {
            values.unshift(v);
          }
          return true;
        },
        get: () => {
          if (!loading2) {
            loading2 = true;
            setTimeout(() => {
              const res = callback();
              if (res && res.finally) {
                res.finally(() => modify2());
              } else {
                modify2();
              }
            });
          }
          return function() {
            modifyArguments == null ? void 0 : modifyArguments(arguments);
            iArguments.push(arguments);
          };
        }
      });
    } catch (e) {
      debug.error(e);
    }
  }
  function propertyHook(target, propertyKey, propertyValue, configurable = true) {
    try {
      Reflect.defineProperty(target, propertyKey, {
        configurable,
        set: (v) => true,
        get: () => {
          Reflect.defineProperty(target, propertyKey, { configurable: true, value: propertyValue });
          return propertyValue;
        }
      });
    } catch (e) {
      debug.error(e);
    }
  }
  propertyHook.modify = (target, propertyKey, callback, once = false) => {
    try {
      let value = target[propertyKey];
      value && (value = callback(value));
      Reflect.defineProperty(target, propertyKey, {
        configurable: true,
        set: (v) => {
          value = callback(v);
          return true;
        },
        get: () => {
          if (once) {
            Reflect.deleteProperty(target, propertyKey);
            Reflect.set(target, propertyKey, value);
          }
          return value;
        }
      });
    } catch (e) {
      debug.error(e);
    }
  };
  function ProxyHandler(target, parrent, key) {
    return new Proxy(target, {
      deleteProperty(target2, p) {
        const res = Reflect.deleteProperty(target2, p);
        parrent[key] = target2;
        return res;
      },
      set(target2, p, newValue, receiver) {
        const res = Reflect.set(target2, p, newValue, receiver);
        parrent[key] = target2;
        return res;
      },
      get(target2, p, receiver) {
        const res = Reflect.get(target2, p, receiver);
        if (isArray(res) || isObject(res)) {
          return ProxyHandler(res, receiver, p);
        }
        return res;
      }
    });
  }
  function propertryChangeHook(target, callback) {
    return new Proxy(target, {
      deleteProperty(target2, p) {
        const res = Reflect.deleteProperty(target2, p);
        callback(p, void 0);
        return res;
      },
      set(target2, p, newValue, receiver) {
        const res = Reflect.set(target2, p, newValue, receiver);
        callback(p, newValue);
        return res;
      },
      get(target2, p, receiver) {
        const res = Reflect.get(target2, p, receiver);
        if (isArray(res) || isObject(res)) {
          return ProxyHandler(res, receiver, p);
        }
        return res;
      }
    });
  }

  // src/utils/hook/worker.ts
  init_tampermonkey();
  var WorkerHook = class _WorkerHook {
    /** Worker.prototype.postMessage backup. */
    static postMessage;
    static postMessageCallback = [];
    /** Worker.prototype.postMessage hook init. */
    static postMessageHook() {
      this.postMessage = Worker.prototype.postMessage;
      Worker.prototype.postMessage = function(message, transfer) {
        let ishook = false;
        _WorkerHook.postMessageCallback.forEach((d) => {
          d.call(this, message, transfer) && (ishook = true);
        });
        ishook || _WorkerHook.postMessage.call(this, message, transfer);
      };
    }
    constructor() {
      _WorkerHook.postMessage || _WorkerHook.postMessageHook();
    }
    /**
     * Worker.prototype.postMessage hook.
     * @param callback 检查并处理\`Worker.prototype.postMessage\`的回调函数,继承原传参,返回 **true** 时拦截该实例。
     * @returns 取消该hook的方法,执行后不再hook。
     */
    postMessage(callback) {
      const id = _WorkerHook.postMessageCallback.push(callback);
      return () => {
        id >= 0 && delete _WorkerHook.postMessageCallback[id - 1];
      };
    }
  };

  // src/utils/utils.ts
  init_tampermonkey();

  // src/io/api-bangumi-season.ts
  init_tampermonkey();

  // src/io/api.ts
  init_tampermonkey();
  function jsonCheck(str) {
    const result = typeof str === "string" ? JSON.parse(str) : str;
    if (result.code === 0)
      return result;
    throw new Error(\`\${result.code} \${result.message}\`, { cause: result.code });
  }

  // src/io/api-bangumi-season.ts
  async function apiBangumiSeason(data) {
    const response = await fetch(objUrl(URLS.BANGUMI_SEASON, data), { credentials: "include" });
    const json = await response.json();
    return jsonCheck(json).result;
  }

  // src/io/api-biliplus-view.ts
  init_tampermonkey();

  // src/utils/hook/xhr.ts
  init_tampermonkey();
  var rules = [];
  var open = XMLHttpRequest.prototype.open;
  XMLHttpRequest.prototype.open = function(...rest) {
    const args = [...rest];
    args[1] && rules.forEach((d) => {
      d && d[0].every((d2) => args[1].includes(d2)) && d[1].call(this, args);
    });
    return open.call(this, ...args);
  };
  function xhrHook(url, modifyOpen, modifyResponse, once = true) {
    let id;
    const one = Array.isArray(url) ? url : [url];
    const two = function(args) {
      once && id && delete rules[id - 1];
      if (modifyOpen)
        try {
          modifyOpen(args);
        } catch (e) {
          debug.error("modifyOpen of xhrhook", one, e);
        }
      if (modifyResponse)
        try {
          this.addEventListener("readystatechange", () => {
            try {
              if (this.readyState === 4) {
                const { responseType } = this;
                const response = { response: this.response, responseType: this.responseType, status: this.status, statusText: this.statusText };
                (this.responseType === "" || this.responseType === "text") && (response.responseText = this.responseText);
                (this.responseType === "" || this.responseType === "document") && (response.responseXML = this.responseXML);
                modifyResponse(response);
                Reflect.defineProperty(this, "response", { configurable: true, value: response.response });
                try {
                  response.responseType && responseType !== response.responseType && setResponseType(response.responseType, this);
                  if (response.responseXML) {
                    response.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: response.responseXML });
                  } else if (response.response) {
                    response.responseText = typeof response.response === "object" ? JSON.stringify(response.response) : response.response;
                    Reflect.defineProperty(this, "responseText", { configurable: true, value: response.responseText });
                  }
                } catch {
                }
              }
            } catch (e) {
              debug.error("modifyResponse of xhrhook", one, e);
            }
          });
        } catch (e) {
          debug.error("modifyResponse of xhrhook", one, e);
        }
    };
    const iid = rules.push([one, two]);
    return () => {
      removeXhrhook(iid);
    };
  }
  xhrHook.async = (url, condition, modifyResponse, once = true) => {
    let id, temp;
    const one = Array.isArray(url) ? url : [url];
    const two = function(args) {
      try {
        if (!condition || condition(args)) {
          this.xhrhookTimes = this.xhrhookTimes ? this.xhrhookTimes++ : 1;
          id && (temp = rules[id - 1]);
          delete rules[id - 1];
          this.send = () => true;
          (!args[2] || args[2] === true) && (this.timeout = 0);
          const et2 = setInterval(() => {
            this.dispatchEvent(new ProgressEvent("progress"));
          }, 50);
          Reflect.defineProperty(this, "status", { configurable: true, value: 200 });
          Reflect.defineProperty(this, "readyState", { configurable: true, value: 2 });
          this.dispatchEvent(new ProgressEvent("readystatechange"));
          modifyResponse ? modifyResponse(args).then((d) => {
            clearInterval(et2);
            if (d) {
              Reflect.defineProperty(this, "response", { configurable: true, value: d.response });
              d.responseType && setResponseType(d.responseType, this);
              d.responseText && Reflect.defineProperty(this, "responseText", { configurable: true, value: d.responseText });
              d.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: d.responseXML });
              !this.responseURL && Reflect.defineProperty(this, "responseURL", { configurable: true, value: args[1] });
              Reflect.defineProperty(this, "readyState", { configurable: true, value: 4 });
              this.dispatchEvent(new ProgressEvent("readystatechange"));
              this.dispatchEvent(new ProgressEvent("load"));
              this.dispatchEvent(new ProgressEvent("loadend"));
            }
          }).catch((d) => {
            if (this.xhrhookTimes === 1) {
              if (d && d.response) {
                Reflect.defineProperty(this, "response", { configurable: true, value: d.response });
                d.responseType && setResponseType(d.responseType, this);
                d.responseText && Reflect.defineProperty(this, "responseText", { configurable: true, value: d.responseText });
                d.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: d.responseXML });
                !this.responseURL && Reflect.defineProperty(this, "responseURL", { configurable: true, value: args[1] });
                Reflect.defineProperty(this, "readyState", { configurable: true, value: 4 });
                this.dispatchEvent(new ProgressEvent("readystatechange"));
                this.dispatchEvent(new ProgressEvent("load"));
                this.dispatchEvent(new ProgressEvent("loadend"));
              } else {
                this.dispatchEvent(new ProgressEvent("error"));
              }
            } else {
              this.xhrhookTimes--;
            }
            debug.error("modifyResponse of xhrhookasync", one, d);
          }).finally(() => {
            clearInterval(et2);
            !once && (id = rules.push(temp));
          }) : (this.abort(), !once && (id = rules.push(temp)));
          clearInterval(et2);
        }
      } catch (e) {
        debug.error("condition of xhrhook", one, e);
      }
    };
    const iid = rules.push([one, two]);
    return () => {
      removeXhrhook(iid);
    };
  };
  function removeXhrhook(id) {
    id >= 0 && delete rules[id - 1];
  }
  xhrHook.ultra = (url, modify) => {
    const one = Array.isArray(url) ? url : [url];
    const two = function(args) {
      try {
        modify.call(this, this, args);
      } catch (e) {
        debug.error("xhrhook modify", one, modify, e);
      }
    };
    const iid = rules.push([one, two]);
    return () => {
      removeXhrhook(iid);
    };
  };
  function setResponseType(responseType, xhr) {
    Reflect.defineProperty(xhr, "responseType", { configurable: true, value: responseType });
    xhr.getResponseHeader = (name) => {
      if (name === "content-type") {
        switch (xhr.responseType) {
          case "arraybuffer":
          case "blob":
            return "application/octet-stream";
          case "document":
            return "text/xml; charset=utf-8";
          case "json":
            return "application/json; charset=utf-8";
          default:
            return "text/plain; charset=utf-8";
        }
      }
      return "text/plain; charset=utf-8";
    };
    xhr.getAllResponseHeaders = () => {
      switch (xhr.responseType) {
        case "arraybuffer":
        case "blob":
          return "content-type: application/octet-stream\\r\\n";
        case "document":
          return "content-type: text/xml; charset=utf-8\\r\\n";
        case "json":
          return "content-type: application/json; charset=utf-8\\r\\n";
        default:
          return "content-type: text/plain; charset=utf-8\\r\\n";
      }
    };
  }

  // src/io/api-view-detail.ts
  init_tampermonkey();
  var ApiViewDetail = class {
    code = 0;
    data = {
      Card: { archive_count: -1, article_count: -1, card: {}, follower: -1, following: false, like_num: -1, space: {} },
      Related: [],
      Reply: { page: {}, replies: [] },
      Spec: null,
      Tags: [],
      View: {},
      elec: null,
      hot_share: {},
      recommend: null,
      view_addit: {}
    };
    message = "0";
    ttl = 1;
  };
  async function apiViewDetail(aid) {
    const response = await fetch(objUrl(URLS.VIEW_DETAIL, {
      aid
    }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/io/api-biliplus-view.ts
  var apiBiliplusView = class {
    constructor(aid) {
      this.aid = aid;
      this.fetch = fetch(objUrl("//www.biliplus.com/api/view", {
        id: aid
      }));
    }
    fetch;
    async getDate() {
      const respense = await this.fetch;
      return await respense.json();
    }
    /** 转化为\`apiViewDetail\`格式 */
    async toDetail() {
      const json = await this.getDate();
      return this.view2Detail(json);
    }
    view2Detail(data) {
      var _a3;
      const result = new ApiViewDetail();
      if (data.v2_app_api) {
        delete data.v2_app_api.redirect_url;
        result.data.Card.follower = (_a3 = data.v2_app_api.owner_ext) == null ? void 0 : _a3.fans;
        result.data.Card.card = { ...data.v2_app_api.owner, ...data.v2_app_api.owner_ext };
        result.data.Tags = data.v2_app_api.tag;
        result.data.View = data.v2_app_api;
        xhrHook(\`api.bilibili.com/x/web-interface/view?aid=\${this.aid}\`, void 0, (res) => {
          const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify(result.data.View)}}\`;
          res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t;
        }, false);
        xhrHook(\`api.bilibili.com/x/web-interface/archive/stat?aid=\${this.aid}\`, void 0, (res) => {
          const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify({ ...result.data.View.stat, aid: this.aid })}}\`;
          res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t;
        }, false);
        return JSON.parse(JSON.stringify(result));
      } else
        return this.view2Detail_v1(data);
    }
    view2Detail_v1(data) {
      var _a3, _b2, _c, _d, _e, _f, _g;
      if ("code" in data) {
        jsonCheck(data);
      }
      const result = new ApiViewDetail();
      const p = Number(getUrlValue("p"));
      result.data.Card.card = {
        face: "//static.hdslb.com/images/akari.jpg",
        mid: data.mid,
        name: data.author,
        vip: {}
      };
      data.list || (data.list = [{
        cid: -1,
        dimension: { width: 1920, height: 1080, rotate: 0 }
      }]);
      result.data.View = {
        aid: data.aid || data.id || this.aid,
        cid: data.list[p ? p - 1 : 0].cid,
        copyright: 1,
        ctime: (_a3 = data.created) != null ? _a3 : 0,
        dimension: { width: 1920, height: 1080, rotate: 0 },
        duration: -1,
        owner: result.data.Card.card,
        pages: data.list.map((d) => {
          d.dimension = { width: 1920, height: 1080, rotate: 0 };
          return d;
        }),
        pic: (_b2 = data.pic) != null ? _b2 : "",
        pubdate: (_c = data.lastupdatets) != null ? _c : 0,
        rights: {},
        stat: {
          aid: data.aid || data.id || this.aid,
          coin: data.coins,
          danmaku: data.video_review,
          dislike: 0,
          evaluation: "",
          favorite: data.favorites,
          his_rank: 0,
          like: -1,
          now_rank: 0,
          reply: -1,
          share: -1,
          view: data.play
        },
        state: 0,
        subtitle: { allow_submit: false, list: [] },
        tid: (_d = data.tid) != null ? _d : 0,
        title: (_e = data.title) != null ? _e : "",
        tname: (_f = data.typename) != null ? _f : "",
        videos: (_g = data.list.length) != null ? _g : 0
      };
      data.bangumi && (result.data.View.season = data.bangumi);
      xhrHook(\`api.bilibili.com/x/web-interface/view?aid=\${this.aid}\`, void 0, (res) => {
        const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify(result.data.View)}}\`;
        res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t;
      }, false);
      xhrHook(\`api.bilibili.com/x/web-interface/archive/stat?aid=\${this.aid}\`, void 0, (res) => {
        const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify({ ...result.data.View.stat, aid: this.aid })}}\`;
        res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t;
      }, false);
      return JSON.parse(JSON.stringify(result));
    }
  };

  // src/io/api-player-pagelist.ts
  init_tampermonkey();
  async function apiPlayerPagelist(aid) {
    const response = await fetch(objUrl(URLS.PAGE_LIST, { aid }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/io/api-view.ts
  init_tampermonkey();
  async function apiView(aid) {
    const response = await fetch(objUrl(URLS.VIEW, {
      appkey: "8e9fc618fbd41e28",
      id: aid,
      type: "json"
    }));
    return await response.json();
  }

  // src/io/api-x-view.ts
  init_tampermonkey();
  async function apiXView(aid) {
    const response = await fetch(objUrl(URLS.X_VIEW, { aid }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/utils/av.ts
  init_tampermonkey();
  var AV;
  ((AV2) => {
    const XOR_CODE = 23442827791579n;
    const MASK_CODE = 2251799813685247n;
    const MAX_AID = 1n << 51n;
    const MIN_AID = 1n;
    const BASE = 58n;
    const BYTES = ["B", "V", 1, "", "", "", "", "", "", "", "", ""];
    const BV_LEN = BYTES.length;
    const ALPHABET = [
      "F",
      "c",
      "w",
      "A",
      "P",
      "N",
      "K",
      "T",
      "M",
      "u",
      "g",
      "3",
      "G",
      "V",
      "5",
      "L",
      "j",
      "7",
      "E",
      "J",
      "n",
      "H",
      "p",
      "W",
      "s",
      "x",
      "4",
      "t",
      "b",
      "8",
      "h",
      "a",
      "Y",
      "e",
      "v",
      "i",
      "q",
      "B",
      "z",
      "6",
      "r",
      "k",
      "C",
      "y",
      "1",
      "2",
      "m",
      "U",
      "S",
      "D",
      "Q",
      "X",
      "9",
      "R",
      "d",
      "o",
      "Z",
      "f"
    ];
    const DIGIT_MAP = [0, 1, 2, 9, 7, 5, 6, 4, 8, 3, 10, 11];
    const REG_EXP = new RegExp(\`^[bB][vV]1[\${ALPHABET.join("")}]{9}\$\`, "g");
    const REG_EXP_SHORT = new RegExp(\`^1[\${ALPHABET.join("")}]{9}\$\`, "g");
    const REG_EXP_STR = new RegExp(\`[bB][vV]1[\${ALPHABET.join("")}]{9}\`, "g");
    function toBV(avid) {
      typeof avid === "bigint" || (avid = BigInt(avid));
      if (avid < MIN_AID) {
        throw new RangeError(\`Av \${avid} is smaller than \${MIN_AID}\`);
      }
      if (avid >= MAX_AID) {
        throw new RangeError(\`Av \${avid} is bigger than \${MAX_AID}\`);
      }
      const bytes = Array.from(BYTES);
      let bv_idx = BV_LEN - 1;
      let tmp = (MAX_AID | avid) ^ XOR_CODE;
      while (tmp !== 0n) {
        let table_idx = tmp % BASE;
        bytes[DIGIT_MAP[Number(bv_idx)]] = ALPHABET[Number(table_idx)];
        tmp /= BASE;
        bv_idx -= 1;
      }
      return bytes.join("");
    }
    AV2.toBV = toBV;
    function fromBV(bvid) {
      if (REG_EXP_SHORT.test(bvid)) {
        bvid = "BV" + bvid;
      }
      let r = 0n;
      for (let i = 3; i < BV_LEN; i++) {
        r = r * BASE + BigInt(ALPHABET.indexOf(bvid[DIGIT_MAP[i]]));
      }
      return \`\${r & MASK_CODE ^ XOR_CODE}\`;
    }
    AV2.fromBV = fromBV;
    function fromStr(str) {
      return str.replace(REG_EXP_STR, (s) => "av" + fromBV(s));
    }
    AV2.fromStr = fromStr;
  })(AV || (AV = {}));

  // src/utils/utils.ts
  function getUrlValue(name) {
    const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|\$)", "i");
    const r = window.location.search.substr(1).match(reg);
    if (r != null)
      return decodeURIComponent(r[2]);
    return null;
  }
  var catchs = { aid: {}, ssid: {}, epid: {} };
  async function urlParam(url, redirect = true) {
    url && !url.includes("?") && (url = "?" + url);
    const obj = urlObj(url);
    let { aid, cid, ssid, epid, p } = obj;
    let pgc = false;
    !aid && (aid = obj.avid);
    !aid && url.replace(/[aA][vV]\\d+/, (d) => aid = d.substring(2));
    !aid && url.replace(/[bB][vV]1[fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF]{9}/, (d) => aid = AV.fromBV(d));
    !aid && obj.bvid && (aid = AV.fromBV(obj.bvid));
    aid && !Number(aid) && (aid = AV.fromBV(aid));
    p = p || 1;
    !ssid && (ssid = obj.seasonId);
    !ssid && (ssid = obj.season_id);
    !ssid && url.replace(/[sS][sS]\\d+/, (d) => ssid = d.substring(2));
    !epid && (epid = obj.episodeId);
    !epid && (epid = obj.ep_id);
    !epid && url.replace(/[eE][pP]\\d+/, (d) => epid = d.substring(2));
    if (!ssid && !epid && aid) {
      if (catchs.aid[aid])
        return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
      if (!cid) {
        try {
          let data = await apiXView(aid);
          if (data.redirect_url)
            return urlParam(objUrl(data.redirect_url, { aid, cid, ssid, epid, p }));
          catchs.aid[aid] = data.pages;
          catchs.aid[aid].forEach((d) => d.aid = aid);
          return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
        } catch (e) {
          debug.error("view", e);
          try {
            catchs.aid[aid] = await apiPlayerPagelist(aid);
            catchs.aid[aid].forEach((d) => d.aid = aid);
            return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
          } catch (e2) {
            debug.error("pagelist", e2);
            try {
              catchs.aid[aid] = (await apiView(aid)).list;
              catchs.aid[aid].forEach((d) => d.aid = aid);
              return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
            } catch (e3) {
              debug.error("appkey", e3);
              try {
                let data = await new apiBiliplusView(aid).getDate();
                catchs.aid[aid] = data.list || data.v2_app_api && data.v2_app_api.pages;
                catchs.aid[aid].forEach((d) => d.aid = aid);
                if (redirect && data.v2_app_api && data.v2_app_api.redirect_url)
                  return urlParam(objUrl(data.v2_app_api.redirect_url, { aid, cid, ssid, epid, p }));
                return catchs.aid[aid][p - 1] || catchs.aid[aid][0];
              } catch (e4) {
                debug.error("biliplus", e4);
              }
            }
          }
        }
      }
    }
    if (ssid || epid) {
      if (ssid && catchs.ssid[ssid])
        return catchs.ssid[ssid][p - 1] || catchs.ssid[ssid][0];
      if (epid && catchs.epid[epid])
        return catchs.epid[epid];
      pgc = true;
      let data = await apiBangumiSeason({ ep_id: epid, season_id: ssid });
      ssid = data.season_id;
      catchs.ssid[ssid] = [];
      data.episodes.forEach((d) => {
        Object.assign(d, { ssid, pgc, epid: d.ep_id });
        catchs.aid[d.aid] = catchs.aid[d.aid] || [];
        catchs.aid[d.aid].push(d);
        catchs.ssid[ssid].push(catchs.epid[d.ep_id] = d);
      });
      if (epid)
        return catchs.epid[epid];
      return catchs.ssid[ssid][p - 1] || catchs.ssid[ssid][0];
    }
    return { aid, cid, ssid, epid, p, pgc };
  }

  // src/core/toast.ts
  init_tampermonkey();

  // src/html/toast.html
  var toast_default = '<div id="toast-container"></div>\\r\\n<style type="text/css">\\r\\n    .toast-close-button>svg {\\r\\n        width: 12px;\\r\\n        height: 12px;\\r\\n    }\\r\\n\\r\\n    .toast {\\r\\n        transition: height 1s ease 0s, padding 1s ease 0s;\\r\\n    }\\r\\n\\r\\n    #toast-container {\\r\\n        font: 12px Helvetica Neue, Helvetica, Arial, Microsoft Yahei, Hiragino Sans GB, Heiti SC, WenQuanYi Micro Hei, sans-serif;\\r\\n    }\\r\\n</style>\\r\\n<style type="text/css">\\r\\n    /*\\r\\n     * Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance,\\r\\n     * please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use,\\r\\n     * make sure you copy the url from the website since the url may change between versions.\\r\\n     */\\r\\n    .toast-title {\\r\\n        font-weight: bold;\\r\\n    }\\r\\n\\r\\n    .toast-message {\\r\\n        -ms-word-wrap: break-word;\\r\\n        word-wrap: break-word;\\r\\n    }\\r\\n\\r\\n    .toast-message a,\\r\\n    .toast-message label {\\r\\n        color: #FFFFFF;\\r\\n    }\\r\\n\\r\\n    .toast-message a:hover {\\r\\n        color: #CCCCCC;\\r\\n        text-decoration: none;\\r\\n    }\\r\\n\\r\\n    .toast-close-button {\\r\\n        position: relative;\\r\\n        right: -0.3em;\\r\\n        top: -0.3em;\\r\\n        float: right;\\r\\n        font-size: 20px;\\r\\n        font-weight: bold;\\r\\n        color: #FFFFFF;\\r\\n        -webkit-text-shadow: 0 1px 0 #ffffff;\\r\\n        text-shadow: 0 1px 0 #ffffff;\\r\\n        opacity: 0.8;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\\r\\n        filter: alpha(opacity=80);\\r\\n        line-height: 1;\\r\\n    }\\r\\n\\r\\n    .toast-close-button:hover,\\r\\n    .toast-close-button:focus {\\r\\n        color: #000000;\\r\\n        text-decoration: none;\\r\\n        cursor: pointer;\\r\\n        opacity: 0.4;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\\r\\n        filter: alpha(opacity=40);\\r\\n    }\\r\\n\\r\\n    .rtl .toast-close-button {\\r\\n        left: -0.3em;\\r\\n        float: left;\\r\\n        right: 0.3em;\\r\\n    }\\r\\n\\r\\n    /*Additional properties for button version\\r\\n     iOS requires the button element instead of an anchor tag.\\r\\n     If you want the anchor version, it requires \`href="#"\`.*/\\r\\n    button.toast-close-button {\\r\\n        padding: 0;\\r\\n        cursor: pointer;\\r\\n        background: transparent;\\r\\n        border: 0;\\r\\n        -webkit-appearance: none;\\r\\n    }\\r\\n\\r\\n    .toast-top-center {\\r\\n        top: 0;\\r\\n        right: 0;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .toast-bottom-center {\\r\\n        bottom: 0;\\r\\n        right: 0;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .toast-top-full-width {\\r\\n        top: 0;\\r\\n        right: 0;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .toast-bottom-full-width {\\r\\n        bottom: 0;\\r\\n        right: 0;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .toast-top-left {\\r\\n        top: 12px;\\r\\n        left: 12px;\\r\\n    }\\r\\n\\r\\n    .toast-top-right {\\r\\n        top: 12px;\\r\\n        right: 12px;\\r\\n    }\\r\\n\\r\\n    .toast-bottom-right {\\r\\n        right: 12px;\\r\\n        bottom: 12px;\\r\\n    }\\r\\n\\r\\n    .toast-bottom-left {\\r\\n        bottom: 12px;\\r\\n        left: 12px;\\r\\n    }\\r\\n\\r\\n    #toast-container {\\r\\n        position: fixed;\\r\\n        z-index: 999999;\\r\\n        pointer-events: none;\\r\\n        /*overrides*/\\r\\n    }\\r\\n\\r\\n    #toast-container * {\\r\\n        -moz-box-sizing: border-box;\\r\\n        -webkit-box-sizing: border-box;\\r\\n        box-sizing: border-box;\\r\\n    }\\r\\n\\r\\n    #toast-container>div {\\r\\n        position: relative;\\r\\n        pointer-events: auto;\\r\\n        overflow: hidden;\\r\\n        margin: 0 0 6px;\\r\\n        padding: 15px 15px 15px 50px;\\r\\n        width: 300px;\\r\\n        -moz-border-radius: 3px 3px 3px 3px;\\r\\n        -webkit-border-radius: 3px 3px 3px 3px;\\r\\n        border-radius: 3px 3px 3px 3px;\\r\\n        background-position: 15px center;\\r\\n        background-repeat: no-repeat;\\r\\n        -moz-box-shadow: 0 0 12px #999999;\\r\\n        -webkit-box-shadow: 0 0 12px #999999;\\r\\n        box-shadow: 0 0 12px #999999;\\r\\n        color: #FFFFFF;\\r\\n        opacity: 0.8;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\\r\\n        filter: alpha(opacity=80);\\r\\n    }\\r\\n\\r\\n    #toast-container>div.rtl {\\r\\n        direction: rtl;\\r\\n        padding: 15px 50px 15px 15px;\\r\\n        background-position: right 15px center;\\r\\n    }\\r\\n\\r\\n    #toast-container>div:hover {\\r\\n        -moz-box-shadow: 0 0 12px #000000;\\r\\n        -webkit-box-shadow: 0 0 12px #000000;\\r\\n        box-shadow: 0 0 12px #000000;\\r\\n        opacity: 1;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\\r\\n        filter: alpha(opacity=100);\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    #toast-container>.toast-info {\\r\\n        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;\\r\\n    }\\r\\n\\r\\n    #toast-container>.toast-error {\\r\\n        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;\\r\\n    }\\r\\n\\r\\n    #toast-container>.toast-success {\\r\\n        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;\\r\\n    }\\r\\n\\r\\n    #toast-container>.toast-warning {\\r\\n        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;\\r\\n    }\\r\\n\\r\\n    #toast-container.toast-top-center>div,\\r\\n    #toast-container.toast-bottom-center>div {\\r\\n        width: 300px;\\r\\n        margin-left: auto;\\r\\n        margin-right: auto;\\r\\n    }\\r\\n\\r\\n    #toast-container.toast-top-full-width>div,\\r\\n    #toast-container.toast-bottom-full-width>div {\\r\\n        width: 96%;\\r\\n        margin-left: auto;\\r\\n        margin-right: auto;\\r\\n    }\\r\\n\\r\\n    .toast {\\r\\n        background-color: #030303;\\r\\n    }\\r\\n\\r\\n    .toast-success {\\r\\n        background-color: #51A351;\\r\\n    }\\r\\n\\r\\n    .toast-error {\\r\\n        background-color: #BD362F;\\r\\n    }\\r\\n\\r\\n    .toast-info {\\r\\n        background-color: #2F96B4;\\r\\n    }\\r\\n\\r\\n    .toast-warning {\\r\\n        background-color: #F89406;\\r\\n    }\\r\\n\\r\\n    .toast-progress {\\r\\n        position: absolute;\\r\\n        left: 0;\\r\\n        bottom: 0;\\r\\n        height: 4px;\\r\\n        background-color: #000000;\\r\\n        opacity: 0.4;\\r\\n        -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\\r\\n        filter: alpha(opacity=40);\\r\\n    }\\r\\n\\r\\n    /*Responsive Design*/\\r\\n    @media all and (max-width: 240px) {\\r\\n        #toast-container>div {\\r\\n            padding: 8px 8px 8px 50px;\\r\\n            width: 11em;\\r\\n        }\\r\\n\\r\\n        #toast-container>div.rtl {\\r\\n            padding: 8px 50px 8px 8px;\\r\\n        }\\r\\n\\r\\n        #toast-container .toast-close-button {\\r\\n            right: -0.2em;\\r\\n            top: -0.2em;\\r\\n        }\\r\\n\\r\\n        #toast-container .rtl .toast-close-button {\\r\\n            left: -0.2em;\\r\\n            right: 0.2em;\\r\\n        }\\r\\n    }\\r\\n\\r\\n    @media all and (min-width: 241px) and (max-width: 480px) {\\r\\n        #toast-container>div {\\r\\n            padding: 8px 8px 8px 50px;\\r\\n            width: 18em;\\r\\n        }\\r\\n\\r\\n        #toast-container>div.rtl {\\r\\n            padding: 8px 50px 8px 8px;\\r\\n        }\\r\\n\\r\\n        #toast-container .toast-close-button {\\r\\n            right: -0.2em;\\r\\n            top: -0.2em;\\r\\n        }\\r\\n\\r\\n        #toast-container .rtl .toast-close-button {\\r\\n            left: -0.2em;\\r\\n            right: 0.2em;\\r\\n        }\\r\\n    }\\r\\n\\r\\n    @media all and (min-width: 481px) and (max-width: 768px) {\\r\\n        #toast-container>div {\\r\\n            padding: 15px 15px 15px 50px;\\r\\n            width: 25em;\\r\\n        }\\r\\n\\r\\n        #toast-container>div.rtl {\\r\\n            padding: 15px 50px 15px 15px;\\r\\n        }\\r\\n    }\\r\\n</style>';

  // src/svg/fork.svg
  var fork_default = '<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M0.284996 0.286944C0.480258 0.091682 0.796841 0.0916819 0.992103 0.286944L4.99893 4.29377L9.00684 0.285851C9.20211 0.0905889 9.51869 0.0905886 9.71395 0.285851C9.90921 0.481113 9.90921 0.797696 9.71395 0.992958L5.70603 5.00088L9.71309 9.00793C9.90835 9.20319 9.90835 9.51978 9.71309 9.71504C9.51783 9.9103 9.20124 9.9103 9.00598 9.71504L4.99893 5.70798L0.992966 9.71394C0.797704 9.90921 0.481122 9.90921 0.28586 9.71394C0.0905973 9.51868 0.0905975 9.2021 0.28586 9.00684L4.29182 5.00088L0.284996 0.994051C0.0897343 0.798789 0.0897342 0.482206 0.284996 0.286944Z" fill="#E19C2C"></path></svg>';

  // src/utils/type.ts
  init_tampermonkey();
  function toObject(input) {
    switch (input) {
      case "undefined":
        input = void 0;
        break;
      case "null":
        input = null;
        break;
      case "NaN":
        input = NaN;
        break;
      default:
        if (!input)
          break;
        try {
          const temp = JSON.parse(input);
          if (typeof temp !== "number" || input === String(temp)) {
            input = temp;
          }
        } catch {
          try {
            const temp = Number(input);
            if (String(temp) !== "NaN" && !input.startsWith("0")) {
              input = temp;
            }
          } catch {
          }
          try {
            if (/^\\d+n\$/.test(input))
              input = BigInt(input.slice(0, -1));
          } catch {
          }
        }
        break;
    }
    return input;
  }
  function toString(input, space = "\\n") {
    let result;
    try {
      result = input.toString();
    } catch {
      result = String(input);
    }
    if (result.startsWith("[object") && result.endsWith("]")) {
      try {
        const str = JSON.stringify(input, void 0, space);
        str === "{}" || (result = str);
      } catch {
      }
    }
    return result;
  }

  // src/core/toast.ts
  var Toastconfig = {
    position: "top-right",
    rtl: false,
    delay: 4,
    disabled: false
  };
  var Toast = class extends HTMLDivElement {
    /** 关闭按钮 */
    closeButton = document.createElement("div");
    /** 消息节点 */
    message = document.createElement("div");
    /** 延时 */
    timer;
    /** 鼠标移入 */
    hovering = false;
    /** 延时结束 */
    timeout = false;
    /** 是否输出到控制台 */
    debug = false;
    constructor() {
      super();
      this.classList.add("toast");
      this.setAttribute("aria-live", "assertive");
      this.fadeOut();
      this.appendChild(this.message);
      this.message.className = "toast-message";
      this.closeButton.className = "toast-close-button";
      this.closeButton.innerHTML = fork_default;
      this.closeButton.addEventListener("click", (e) => {
        this.timeout = true;
        this.delay = 1;
        e.stopPropagation();
      });
      this.addEventListener("mouseover", () => this.hovering = true);
      this.addEventListener("mouseout", () => {
        this.hovering = false;
        this.timeout && (this.delay = 1);
      });
    }
    /** 更新内容 */
    value(v) {
      isArray(v) || (v = [v]);
      let html = "";
      v.forEach((d, i) => {
        d = toString(d);
        html += i ? \`<br>\${d}\` : \`<label>\${d}</label>\`;
      });
      v.length || this.fadeOut();
      const close = this.message.contains(this.closeButton);
      this.message.innerHTML = html;
      close && (this.delay = 0);
      v.length && this.fadeIn();
    }
    /** 代理对象暂存 */
    _data = [];
    \$data = [];
    get data() {
      return this._data;
    }
    /** 内容 */
    set data(v) {
      this.\$data = v;
      this.value(v);
      this._data = propertryChangeHook(v, () => this.value(v));
    }
    /** 类型 */
    set type(v) {
      this.classList.remove("toast-success", "toast-error", "toast-info", "toast-warning");
      v && this.classList.add(\`toast-\${v}\`);
    }
    /** 镜像 */
    set rtl(v) {
      v ? this.classList.add("rtl") : this.classList.remove("rtl");
    }
    /** 时长 */
    set delay(v) {
      clearTimeout(this.timer);
      v = Math.max(Math.trunc(v), 0);
      v ? this.message.contains(this.closeButton) && this.closeButton.remove() : this.message.contains(this.closeButton) || this.message.insertBefore(this.closeButton, this.message.firstChild);
      if (v === 1) {
        if (!this.hovering) {
          this.fadeOut(true);
        }
      } else if (v !== 0) {
        this.timer = setTimeout(() => {
          this.timeout = true;
          this.delay = 1;
        }, v * 1e3);
      }
    }
    /** 添加消息 */
    push(...items) {
      return this.data.push(...items);
    }
    /** 弹出第一条消息 */
    shift() {
      return this.data.shift();
    }
    /** 添加置顶消息 */
    unshift(...items) {
      return this.data.unshift(...items);
    }
    /** 弹出末尾的消息 */
    pop() {
      return this.data.pop();
    }
    /** 淡入 */
    fadeIn() {
      this.setAttribute("style", \`height: \${this.message.scrollHeight + 30}px;\`);
    }
    /** 淡出 */
    fadeOut(remove = false) {
      this.setAttribute("style", "padding-top: 0px;padding-bottom: 0px;height: 0px;");
      if (remove) {
        setTimeout(() => this.remove(), 1e3);
        if (this.debug && this.\$data.length) {
          debug.group(this.\$data.shift());
          this.\$data.forEach((d) => {
            d instanceof Error ? debug.error(d) : debug(d);
          });
          debug.groupEnd();
        }
      }
    }
  };
  customElements.get(\`toast-\${"1272ee5"}\`) || customElements.define(\`toast-\${"1272ee5"}\`, Toast, { extends: "div" });
  var ToastContainer = class extends HTMLElement {
    /** 实际根节点 */
    container;
    static get observedAttributes() {
      return [
        "position",
        "rtl",
        "delay",
        "disabled"
      ];
    }
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = toast_default;
      this.container = root.children[0];
    }
    /** 刷新配置 */
    update(value) {
      Object.entries(value).forEach((d) => {
        this[d[0]] = d[1];
      });
    }
    toast(delay, type = "info", ...data) {
      document.body.contains(this) || document.body.appendChild(this);
      const toast2 = new Toast();
      toast2.type = type;
      toast2.rtl = this.rtl;
      this.container.insertBefore(toast2, this.container.firstChild);
      delay === 0 && (toast2.debug = true);
      toast2.data = data;
      toast2.delay = delay;
      return toast2;
    }
    /**
     * 可拓展toast,用于需要动态增减消息。  
     * 无数据时隐藏,有数据时显现。默认为info类型。
     * @param data 初始信息,可为空。
     * @example
     * const T = toast.list(); // 生成toast(隐藏)。
     * T.data.push(123); // 添加一条消息123,toast显现。data属性本质是数组,可以使用任何数组方法更改消息。
     * T.type = 'warning'; // 更改toast样式为warning。
     * T.rtl = true; // 镜像toast。
     * T.data.pop(); // 删除最后一条消息,消息变为空,toast自动隐藏。
     * T.delay = 4; // 启用倒计时,单位/秒,倒计时结束后toast将被移除。也就是对象\`T\`不再响应任何操作,所以除非不需要再拓展,否则请不要修改\`delay\`属性。
     * T.fadeOut(); // 隐藏toast但不移除。
     * T.fadeOut(true); // 移除toast,效果同T.delay = 1。
     */
    list(...data) {
      return this.toast(0, "info", ...data);
    }
    success(...data) {
      this.toast(this.delay, "success", ...data);
      return () => {
        debug(...data);
      };
    }
    error(...data) {
      this.toast(this.delay, "error", ...data);
      return () => {
        debug.error(...data);
      };
    }
    info(...data) {
      this.toast(this.delay, "info", ...data);
      return () => {
        debug.debug(...data);
      };
    }
    warning(...data) {
      this.toast(this.delay, "warning", ...data);
      return () => {
        debug.warn(...data);
      };
    }
    set position(v) {
      this.setAttribute("position", v);
    }
    /** 位置 */
    get position() {
      return this.getAttribute("position");
    }
    set rtl(v) {
      this.setAttribute("rtl", v);
    }
    /** 镜像 */
    get rtl() {
      return toObject(this.getAttribute("rtl"));
    }
    set delay(v) {
      this.setAttribute("delay", v);
    }
    /** 延时 */
    get delay() {
      return toObject(this.getAttribute("delay"));
    }
    set disabled(v) {
      this.setAttribute("disabled", v);
    }
    /** 禁用 */
    get disabled() {
      return toObject(this.getAttribute("disabled"));
    }
    attributeChangedCallback(name, oldValue, newValue) {
      if (oldValue === newValue)
        return;
      switch (name) {
        case "position":
          newValue && (this.container.className = \`toast-\${newValue}\`);
          break;
        case "rtl":
          this.container.querySelectorAll(".toast").forEach((d) => {
            d.rtl = toObject(newValue);
          });
          break;
        case "delay":
          this.container.querySelectorAll(".toast").forEach((d) => {
            d.delay = toObject(newValue);
          });
          break;
        case "disabled":
          this.container.style.display = toObject(newValue) ? "none" : "";
        default:
          break;
      }
    }
  };
  customElements.get(\`toast-container-\${"1272ee5"}\`) || customElements.define(\`toast-container-\${"1272ee5"}\`, ToastContainer);
  var toast = new ToastContainer();

  // src/core/user.ts
  init_tampermonkey();

  // src/core/userstatus.ts
  init_tampermonkey();

  // src/core/ui/entry.ts
  init_tampermonkey();

  // src/html/ui-entry.html
  var ui_entry_default = '<div class="setting">\\r\\n    <i></i><span>设置</span>\\r\\n</div>\\r\\n<div class="gear"></div>\\r\\n<style type="text/css">\\r\\n    .gear {\\r\\n        position: fixed;\\r\\n        right: 40px;\\r\\n        bottom: 60px;\\r\\n        height: 20px;\\r\\n        width: 20px;\\r\\n        border: 1px solid #e9eaec;\\r\\n        border-radius: 50%;\\r\\n        box-shadow: 0 0 12px 4px rgb(106, 115, 133, 22%);\\r\\n        padding: 10px;\\r\\n        cursor: pointer;\\r\\n        animation: roll 1s ease-out;\\r\\n        transition: opacity 0.3s ease-out;\\r\\n        background: none;\\r\\n        z-index: 11110;\\r\\n    }\\r\\n\\r\\n    .setting {\\r\\n        box-sizing: content-box;\\r\\n        color: #fff;\\r\\n        background-color: #fff;\\r\\n        border-radius: 5px;\\r\\n        position: fixed;\\r\\n        bottom: 65px;\\r\\n        width: 56px;\\r\\n        height: 40px;\\r\\n        transition: right 0.7s;\\r\\n        -moz-transition: right 0.7s;\\r\\n        -webkit-transition: right 0.7s;\\r\\n        -o-transition: right 0.7s;\\r\\n        z-index: 11110;\\r\\n        padding: 4px;\\r\\n        right: -54px;\\r\\n    }\\r\\n\\r\\n    .setting:hover {\\r\\n        right: 0px;\\r\\n        box-shadow: rgba(0, 85, 255, 0.098) 0px 0px 20px 0px;\\r\\n        border: 1px solid rgb(233, 234, 236);\\r\\n    }\\r\\n\\r\\n    .setting i {\\r\\n        background-position: -471px -982px;\\r\\n        display: block;\\r\\n        width: 20px;\\r\\n        height: 20px;\\r\\n        transition: 0.2s;\\r\\n        background-image: url(//static.hdslb.com/images/base/icons.png);\\r\\n        margin: auto;\\r\\n    }\\r\\n\\r\\n    .setting span {\\r\\n        font-size: 14px;\\r\\n        display: block;\\r\\n        width: 50%;\\r\\n        transition: 0.2s;\\r\\n        color: #000;\\r\\n        margin: auto;\\r\\n    }\\r\\n\\r\\n    @keyframes roll {\\r\\n\\r\\n        30%,\\r\\n        60%,\\r\\n        90% {\\r\\n            transform: scale(1) rotate(0deg);\\r\\n        }\\r\\n\\r\\n        10%,\\r\\n        40%,\\r\\n        70% {\\r\\n            transform: scale(1.11) rotate(-180deg);\\r\\n        }\\r\\n\\r\\n        20%,\\r\\n        50%,\\r\\n        80% {\\r\\n            transform: scale(0.9) rotate(-360deg);\\r\\n        }\\r\\n    }\\r\\n</style>';

  // src/svg/gear.svg
  var gear_default = '<svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></svg>';

  // src/core/ui/entry.ts
  var UiEntryType = "new";
  var BilioldEntry = class extends HTMLElement {
    /** 旧版按钮 */
    stage;
    /** 新版按钮 */
    gear;
    /** 实际节点 */
    root;
    /** 实际根节点 */
    static get observedAttributes() {
      return [
        "type"
      ];
    }
    constructor() {
      super();
      this.root = this.attachShadow({ mode: "closed" });
      this.root.innerHTML = ui_entry_default;
      this.stage = this.root.children[0];
      this.gear = this.root.children[1];
      this.gear.innerHTML = gear_default;
      this.stage.remove();
      this.gear.remove();
      this.gear.addEventListener("mouseover", () => this.gear.style.opacity = "0.8");
      this.gear.addEventListener("mouseout", () => this.gear.style.opacity = "0");
    }
    get type() {
      return this.getAttribute("type");
    }
    set type(v) {
      this.setAttribute("type", v);
    }
    attributeChangedCallback(name, oldValue, newValue) {
      if (oldValue === newValue)
        return;
      switch (name) {
        case "type":
          if (newValue === "old") {
            this.root.contains(this.gear) && this.gear.remove();
            this.root.contains(this.stage) || this.root.appendChild(this.stage);
          } else {
            this.root.contains(this.stage) && this.stage.remove();
            if (!this.root.contains(this.gear)) {
              this.root.appendChild(this.gear);
              setTimeout(() => {
                this.gear.style.opacity = "0";
              }, 2e3);
            }
          }
          break;
        default:
          break;
      }
    }
  };
  customElements.get("biliold-entry-1272ee5") || customElements.define("bilibili-entry-1272ee5", BilioldEntry);

  // src/core/userstatus.ts
  var userStatus = {
    /** 开发者模式 */
    development: true,
    /** 主页 */
    index: true,
    /** toastr */
    toast: Toastconfig,
    /** 替换全局顶栏 */
    header: true,
    /** 翻页评论区 */
    comment: true,
    /** av */
    av: true,
    /** 嵌入式播放器 */
    player: true,
    /** WebRTC */
    webRTC: false,
    /** 充电鸣谢 */
    elecShow: true,
    /** 合作UP */
    staff: false,
    /** bangumi */
    bangumi: true,
    /** 解除限制 */
    videoLimit: {
      /** 开关 */
      status: false,
      /** 服务器类型 */
      server: "内置",
      /** 东南亚(泰区)代理服务器 */
      th: "api.global.bilibili.com",
      /** 台湾代理服务器 */
      tw: "",
      /** 香港代理服务器 */
      hk: "",
      /** 大陆代理服务器 */
      cn: ""
    },
    /** UPOS替换 */
    uposReplace: {
      /** 东南亚(泰区) */
      th: "ks3(金山)",
      /** 港澳台 */
      gat: "不替换",
      /** 一般视频 */
      nor: "不替换",
      /** 下载 */
      download: "不替换"
    },
    /** 强制显示bangumi分p */
    bangumiEplist: false,
    /** 账户授权 */
    accessKey: {
      /** access_key */
      token: void 0,
      /** 授权日期 */
      date: 0,
      /** 授权日期字符串 */
      dateStr: ""
    },
    /** 稍后再看 */
    watchlater: true,
    /** 播单 */
    playlist: true,
    /** 全站排行榜 */
    ranking: true,
    /** 专栏 */
    read: true,
    /** 搜索 */
    search: true,
    /** 相簿 */
    album: true,
    /** 注册时间 */
    jointime: false,
    /** 失效视频 */
    lostVideo: true,
    /** 纯视频历史 */
    history: true,
    /** 动态里的直播录屏 */
    liveRecord: false,
    /** 设置入口样式 */
    uiEntryType: UiEntryType,
    /** 自动化操作 */
    automate: {
      /** 展开弹幕列表 */
      danmakuFirst: false,
      /** 滚动到播放器 */
      showBofqi: false,
      /** 自动宽屏 */
      screenWide: false,
      /** 自动关弹幕 */
      noDanmaku: false,
      /** 自动播放 */
      autoPlay: false,
      /** 自动网页全屏 */
      webFullScreen: false,
      /** 记忆播放速率 */
      videospeed: false
    },
    /** 关闭抗锯齿 */
    videoDisableAA: false,
    /** 禁用直播间挂机检测 */
    disableSleepChcek: true,
    /** 禁止上报 */
    disableReport: true,
    /** 禁用评论跳转标题 */
    commentJumpUrlTitle: false,
    /** 合集 */
    ugcSection: false,
    /** 请求的文件类型 */
    downloadType: ["mp4"],
    /** 请求无水印源 */
    TVresource: false,
    /** 画质 */
    downloadQn: 127,
    /** 下载方式 */
    downloadMethod: "浏览器",
    /** User-Agent */
    userAgent: "Bilibili Freedoooooom/MarkII",
    /** referer */
    referer: "https://www.bilibili.com",
    /** 下载目录 */
    filepath: "",
    /** aria2 */
    aria2: {
      /** 服务器 */
      server: "http://localhost",
      /** 端口 */
      port: 6800,
      /** 令牌 */
      token: "",
      /** 分片数目 */
      split: 4,
      /** 分片大小 */
      size: 20
    },
    ef2: {
      /** 稍后下载 */
      delay: false,
      /** 静默下载 */
      silence: false
    },
    /** 点赞功能 */
    like: false,
    /** 重构播放器脚本 */
    bilibiliplayer: true,
    /** 检查播放器脚本更新 */
    checkUpdate: true,
    /** 不登录1080P支持 */
    show1080p: false,
    /** 调整顶栏banner样式 */
    fullBannerCover: false,
    /** 原生播放器新版弹幕 */
    dmproto: true,
    /** 普权弹幕换行 */
    dmwrap: true,
    /** 弹幕格式 */
    dmExtension: "xml",
    /** 合并已有弹幕 */
    dmContact: false,
    /** 分集数据 */
    episodeData: false,
    /** 港澳台新番时间表 */
    timeLine: false,
    /** 字幕:繁 -> 简 */
    simpleChinese: true,
    /** 资源cdn */
    cdn: "jsdelivr",
    /** 弹幕保护计划 */
    danmakuProtect: false,
    /** 下载按钮 */
    downloadButton: false,
    /** 全区域搜索 */
    searchAllArea: false,
    /** 评论图片 */
    commentPicture: true,
    /** 分区主页 */
    channel: true,
    /** 拦截视频心跳 */
    heartbeatBlock: false,
    /** 稍后再看重定向 */
    watchlater2Av: false
  };

  // src/core/ui/alert.ts
  init_tampermonkey();

  // src/utils/element.ts
  init_tampermonkey();

  // src/utils/poll.ts
  init_tampermonkey();
  function poll(check, callback, delay = 100, stop = 180) {
    let timer = setInterval(() => {
      const d = check();
      if (d) {
        clearInterval(timer);
        callback(d);
      }
    }, delay);
    stop && setTimeout(() => clearInterval(timer), stop * 1e3);
  }

  // src/utils/element.ts
  function addElement(tag, attribute, parrent, innerHTML, top, replaced) {
    const element = document.createElement(tag);
    attribute && Object.entries(attribute).forEach((d) => element.setAttribute(d[0], d[1]));
    innerHTML && element.insertAdjacentHTML("beforeend", innerHTML);
    replaced ? replaced.replaceWith(element) : parrent && (top ? parrent.insertAdjacentElement("afterbegin", element) : parrent.insertAdjacentElement("beforeend", element));
    return element;
  }
  async function addCss(txt, id, parrent) {
    if (!parrent && !document.head) {
      await new Promise((r) => poll(() => document.body, r));
    }
    parrent = parrent || document.head;
    const style = document.createElement("style");
    style.setAttribute("type", "text/css");
    id && !parrent.querySelector(\`#\${id}\`) && style.setAttribute("id", id);
    style.appendChild(document.createTextNode(txt));
    parrent.appendChild(style);
    return style;
  }
  function loadScript(src, onload) {
    return new Promise((r, j) => {
      const script = document.createElement("script");
      script.type = "text/javascript";
      script.src = src;
      script.addEventListener("load", () => {
        script.remove();
        onload && onload();
        r(true);
      });
      script.addEventListener("error", () => {
        script.remove();
        j();
      });
      (document.body || document.head || document.documentElement || document).appendChild(script);
    });
  }
  function offset(ele) {
    const box = ele.getBoundingClientRect();
    const body = document.body;
    const docElem = document.documentElement;
    const scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
    const scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
    const clientTop = docElem.clientTop || body.clientTop;
    const clientLeft = docElem.clientLeft || body.clientLeft;
    const top = box.top + scrollTop - clientTop;
    const left = box.left + scrollLeft - clientLeft;
    return {
      //Math.round 兼容火狐浏览器bug
      top: Math.round(top),
      left: Math.round(left)
    };
  }

  // src/core/ui/utils/button.ts
  init_tampermonkey();

  // src/html/button.html
  var button_default = '<div class="button" role="button">按钮</div>\\r\\n<style>\\r\\n    .button {\\r\\n        width: fit-content;\\r\\n        cursor: pointer;\\r\\n        line-height: 28px;\\r\\n        padding-left: 10px;\\r\\n        padding-right: 10px;\\r\\n        text-align: right;\\r\\n        border: 1px solid #ccd0d7;\\r\\n        border-radius: 4px;\\r\\n        color: #222;\\r\\n        transition: border-color .2s ease, background-color .2s ease;\\r\\n        box-sizing: border-box;\\r\\n        user-select: none;\\r\\n    }\\r\\n\\r\\n    .button:hover {\\r\\n        color: #00a1d6;\\r\\n        border-color: #00a1d6;\\r\\n    }\\r\\n\\r\\n    .button:active {\\r\\n        background-color: #eee;\\r\\n    }\\r\\n</style>';

  // src/core/ui/utils/button.ts
  var PushButton = class extends HTMLElement {
    _button;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = button_default;
      this._button = root.querySelector(".button");
      this._button.addEventListener("click", (e) => {
        e.stopPropagation();
        this.dispatchEvent(new Event("change"));
      });
    }
    set text(v) {
      this._button.textContent = v;
    }
  };
  customElements.get(\`button-\${"1272ee5"}\`) || customElements.define(\`button-\${"1272ee5"}\`, PushButton);

  // src/core/ui/utils/popupbox.ts
  init_tampermonkey();

  // src/html/popupbox.html
  var popupbox_default = '<div class="box">\\r\\n    <div class="contain"></div>\\r\\n    <div class="fork"></div>\\r\\n</div>\\r\\n<style type="text/css">\\r\\n    .box {\\r\\n        top: 50%;\\r\\n        left: 50%;\\r\\n        transform: translateX(-50%) translateY(-50%);\\r\\n        transition: 0.3s cubic-bezier(0.22, 0.61, 0.36, 1);\\r\\n        padding: 12px;\\r\\n        background-color: #fff;\\r\\n        color: black;\\r\\n        border-radius: 8px;\\r\\n        box-shadow: 0 4px 12px 0 rgb(0 0 0 / 5%);\\r\\n        border: 1px solid rgba(136, 136, 136, 0.13333);\\r\\n        box-sizing: border-box;\\r\\n        position: fixed;\\r\\n        font-size: 13px;\\r\\n        z-index: 11115;\\r\\n        line-height: 14px;\\r\\n    }\\r\\n\\r\\n    .contain {\\r\\n        display: flex;\\r\\n        flex-direction: column;\\r\\n        height: 100%;\\r\\n    }\\r\\n\\r\\n    .fork {\\r\\n        position: absolute;\\r\\n        transform: scale(0.8);\\r\\n        right: 10px;\\r\\n        top: 10px;\\r\\n        height: 20px;\\r\\n        width: 20px;\\r\\n        pointer-events: visible;\\r\\n    }\\r\\n\\r\\n    .fork:hover {\\r\\n        border-radius: 50%;\\r\\n        background-color: rgba(0, 0, 0, 10%);\\r\\n    }\\r\\n</style>';

  // src/core/ui/utils/popupbox.ts
  var ClickOutRemove = class {
    constructor(target) {
      this.target = target;
      target.addEventListener("click", (e) => e.stopPropagation());
    }
    /** 已启用监听 */
    enabled = false;
    /** 移除节点 */
    remove = () => {
      this.target.remove();
    };
    /** 停止监听 */
    disable = () => {
      if (this.enabled) {
        document.removeEventListener("click", this.remove);
        this.enabled = false;
      }
      return this;
    };
    /** 开始监听 */
    enable = () => {
      this.enabled || setTimeout(() => {
        document.addEventListener("click", this.remove, { once: true });
        this.enabled = true;
      }, 100);
      return this;
    };
  };
  var PopupBox = class extends HTMLElement {
    _contain;
    _fork;
    clickOutRemove;
    \$fork = true;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = popupbox_default;
      this._contain = root.children[0].children[0];
      this._fork = root.children[0].children[1];
      this._fork.innerHTML = fork_default;
      this._fork.addEventListener("click", () => this.remove());
      this.clickOutRemove = new ClickOutRemove(this);
      document.body.appendChild(this);
    }
    insertAdjacentElement(where, element) {
      this._contain.insertAdjacentElement(where, element);
      return element;
    }
    insertAdjacentHTML(position, text) {
      return this._contain.insertAdjacentHTML(position, text);
    }
    insertAdjacentText(where, data) {
      return this._contain.insertAdjacentText(where, data);
    }
    append(...nodes) {
      this._contain.append(...nodes);
    }
    appendChild(node) {
      this._contain.appendChild(node);
      return node;
    }
    replaceChildren(...nodes) {
      this._contain.replaceChildren(...nodes);
    }
    setAttribute(qualifiedName, value) {
      this._contain.setAttribute(qualifiedName, value);
    }
    getAttribute(qualifiedName) {
      return this._contain.getAttribute(qualifiedName);
    }
    get style() {
      return this._contain.style;
    }
    get innerHTML() {
      return this._contain.innerHTML;
    }
    set innerHTML(v) {
      this._contain.innerHTML = v;
    }
    /** 设置是否显示关闭按钮,不显示则点击节点外部自动关闭 */
    get fork() {
      return this.\$fork;
    }
    set fork(v) {
      this.\$fork = v;
      this._fork.style.display = v ? "" : "none";
      if (v) {
        this.clickOutRemove.disable();
      } else {
        this.clickOutRemove.enable();
      }
    }
  };
  customElements.get(\`popupbox-\${"1272ee5"}\`) || customElements.define(\`popupbox-\${"1272ee5"}\`, PopupBox);

  // src/core/ui/alert.ts
  function alert(msg, title, buttons, fork = false) {
    isArray(msg) || (msg = [msg]);
    msg = msg.join("</br>");
    const popup = new PopupBox();
    popup.fork = fork;
    popup.setAttribute("style", "max-width: 400px; max-height: 300px;line-height: 16px;");
    popup.innerHTML = \`<div style="text-align: center;font-size: 16px;font-weight: bold;margin-bottom: 10px;">
    <span>\${title || "Bilibili Old"}</span>
</div>
<div><div style="padding-block: 10px;padding-inline: 15px;">\${msg}</div></div>\`;
    if (buttons) {
      addElement("hr", { style: "width: 100%;opacity: .3;" }, popup);
      const div = addElement("div", { style: "display: flex;align-items: center;justify-content: space-around;" }, popup);
      buttons.forEach((d) => {
        const button = new PushButton();
        button.text = d.text;
        button.addEventListener("change", () => {
          var _a3;
          (_a3 = d.callback) == null ? void 0 : _a3.call(d);
          popup.remove();
        });
        div.appendChild(button);
      });
    }
  }

  // src/core/user.ts
  var User = class {
    /** 用户数据,除非确定已初始化,否则请使用\`addCallback\`用户数据回调代替 */
    userStatus;
    /** 初始化标记 */
    initialized = false;
    /** 更新CD */
    updating;
    /** 回调栈 */
    changes = {};
    /** 更新存储延时 */
    timer;
    /** 用户数据加载回调序列 */
    userLoadedCallbacks = [];
    constructor() {
      GM.getValue("userStatus", userStatus).then((status) => {
        var _a3;
        status = Object.assign(userStatus, status);
        const proxy = propertryChangeHook(status, (key, value) => {
          clearTimeout(this.timer);
          this.timer = setTimeout(() => GM.setValue("userStatus", status));
          this.emitChange(key, value);
        });
        this.userStatus = proxy;
        this.initialized = true;
        while (this.userLoadedCallbacks.length) {
          (_a3 = this.userLoadedCallbacks.shift()) == null ? void 0 : _a3(proxy);
        }
      });
    }
    /**
     * 监听设置改动
     * @param key 设置键
     * @param callback 设置项变动时执行的回调,新值将作为第一个参数传入
     * @returns 用于取消监听的回调
     */
    bindChange(key, callback) {
      this.changes[key] || (this.changes[key] = []);
      const id = this.changes[key].push(callback);
      return () => {
        delete this.changes[key][id - 1];
      };
    }
    /**
     * 推送设置改动
     * @param key 设置键
     * @param newValue 新值
     */
    emitChange(key, newValue) {
      this.changes[key].forEach(async (d) => {
        d(newValue);
      });
    }
    /** 用户数据回调 */
    addCallback(callback) {
      if (typeof callback === "function") {
        if (this.initialized) {
          callback(this.userStatus);
        } else {
          this.userLoadedCallbacks.push(callback);
        }
      }
    }
    /** 恢复默认数据 */
    restoreUserStatus() {
      GM.deleteValue("userStatus");
      toast.warning("已恢复默认设置数据,请<strong>刷新</strong>页面以避免数据紊乱!");
    }
    /** 备份设置数据 */
    outputUserStatus() {
      GM.getValue("userStatus", userStatus).then((d) => {
        saveAs(JSON.stringify(d, void 0, "	"), \`Bilibili-Old-\${timeFormat(void 0, true).replace(/ |:/g, (d2) => "-")}\`, "application/json");
      });
    }
    /** 恢复备份数据 */
    inputUserStatus() {
      const msg = toast.list("恢复备份数据 >>>", "> 请选择一个备份的数据文件(.json)", "> 注意:无效的数据文件可能导致异常!");
      fileRead("application/json").then((d) => {
        msg.push(\`> 读取文件:\${d.name}\`);
        msg.type = "info";
        return readAs(d).then((d2) => {
          const data = JSON.parse(d2);
          if (typeof data === "object") {
            GM.setValue("userStatus", data);
            const text = "已恢复设置数据,请<strong>刷新</strong>页面以避免数据紊乱!";
            msg.push("> " + text);
            msg.type = "success";
            return alert(text, "刷新页面", [{
              text: "刷新",
              callback: () => location.reload()
            }]);
          }
        }).catch((e) => {
          msg.push("> 读取文件出错!", e);
          msg.type = "error";
        });
      }).catch((e) => {
        msg.push(e);
      }).finally(() => {
        msg.delay = 4;
      });
    }
  };
  var user = new User();

  // src/core/video-info.ts
  init_tampermonkey();
  var VideoInfo = class {
    cids = {};
    stats = {};
    get metadata() {
      const cid = BLOD.cid;
      return cid ? this.cids[cid] : void 0;
    }
    get album() {
      var _a3;
      return ((_a3 = this.metadata) == null ? void 0 : _a3.album) || this.title;
    }
    get artist() {
      var _a3;
      return (_a3 = this.metadata) == null ? void 0 : _a3.artist;
    }
    get title() {
      var _a3;
      return ((_a3 = this.metadata) == null ? void 0 : _a3.title) || document.title.slice(0, -26);
    }
    get artwork() {
      var _a3;
      return (_a3 = this.metadata) == null ? void 0 : _a3.artwork;
    }
    get stat() {
      const aid = BLOD.aid;
      return aid ? this.stats[aid] : void 0;
    }
    /** 数据变动回调栈 */
    callbacks = [];
    /**
     * 数据变动回调
     * @param callback 数据变动时执行的回调函数
     * @returns 撤销监听的函数
     */
    bindChange(callback) {
      const id = this.callbacks.push(callback);
      return () => {
        delete this.callbacks[id - 1];
      };
    }
    timer;
    /** 推送数据变动 */
    emitChange() {
      clearTimeout(this.timer);
      this.timer = setTimeout(() => this.callbacks.forEach((d) => d(this)), 100);
    }
    /** 从\`IAidDatail\`中提取 */
    aidDatail(data) {
      const album = data.title;
      const artist = data.owner.name;
      const pic = data.pic.replace("http:", "");
      data.pages ? data.pages.forEach((d, i) => {
        this.cids[d.cid] = {
          album,
          artist,
          title: d.part || \`#\${i + 1}\`,
          artwork: [{ src: pic }]
        };
      }) : this.cids[data.cid] = {
        album,
        artist,
        title: \`#1\`,
        artwork: [{ src: pic }]
      };
      this.stats[data.aid] = data.stat;
      this.emitChange();
    }
    /** 从\`IAidInfo\`中提取 */
    aidInfo(data) {
      const album = data.title;
      const artist = data.upper.name;
      const pic = data.cover.replace("http:", "");
      data.pages ? data.pages.forEach((d, i) => {
        this.cids[d.id] = {
          album,
          artist,
          title: d.title || \`#\${i + 1}\`,
          artwork: [{ src: pic }]
        };
      }) : this.cids[data.id] = {
        album,
        artist,
        title: \`#1\`,
        artwork: [{ src: pic }]
      };
    }
    /** 从\`IBangumiSeasonResponse\`中提取 */
    bangumiSeason(data) {
      var _a3, _b2;
      const album = data.title || data.jp_title;
      const artist = data.actors || data.staff || ((_a3 = data.up_info) == null ? void 0 : _a3.name);
      const pic = data.cover.replace("http:", "");
      const bkg_cover = (_b2 = data.bkg_cover) == null ? void 0 : _b2.replace("http:", "");
      this.bangumiEpisode(data.episodes, album, artist, pic, bkg_cover);
      this.emitChange();
    }
    /** 从\`IBangumiEpisode\`中提取 */
    bangumiEpisode(data, album, artist, pic, bkg_cover) {
      data.forEach((d) => {
        const artwork = [{ src: d.cover.replace("http:", "") }, { src: pic }];
        bkg_cover && artwork.push({ src: bkg_cover });
        this.cids[d.cid] = {
          album,
          artist,
          title: d.index_title,
          artwork
        };
      });
    }
    toview(data) {
      const album = data.name;
      const pic = data.cover.replace("http:", "");
      data.list.forEach((d) => {
        const title = d.title;
        const cover = d.pic.replace("http:", "");
        const artist = d.owner.name;
        d.pages.forEach((d2, i) => {
          this.cids[d2.cid] = {
            album,
            artist,
            title: title + \`(\${d2.part})\`,
            artwork: [{ src: pic }, { src: cover }]
          };
        });
      });
      this.emitChange();
    }
    /** 设置浏览器媒体信息 */
    mediaSession() {
      if (this.metadata) {
        navigator.mediaSession.metadata = new MediaMetadata({ ...this.metadata });
      }
    }
  };
  var videoInfo = new VideoInfo();

  // src/core/danmaku.ts
  var Danmaku = class {
    listSoFixed = false;
    constructor() {
      user.addCallback((status) => {
        if (!status.bilibiliplayer) {
          this.listSoFix();
        }
      });
    }
    /** 原生旧版播放器使用protobuf弹幕 */
    listSoFix() {
      if (this.listSoFixed)
        return;
      this.listSoFixed = true;
      const that = this;
      new WorkerHook().postMessage(function(message) {
        if (message.url && message.url.includes("list.so")) {
          user.userStatus.dmwrap && that.trim();
          if (!user.userStatus.dmproto)
            return false;
          const params = urlObj(message.url);
          const startTime = (/* @__PURE__ */ new Date()).getTime();
          that.getSegDanmaku(void 0, params.oid).then((d) => {
            this.dispatchEvent(new MessageEvent("message", {
              data: {
                code: 0,
                danmakuArray: d,
                loadTime: (/* @__PURE__ */ new Date()).getTime() - startTime,
                parseTime: Math.random(),
                sendTip: "",
                state: 0,
                textSide: "",
                total: d.length.toString()
              }
            }));
          }).catch((e) => {
            console.error("protobuf 弹幕获取失败", e);
          });
          return true;
        }
        return false;
      });
    }
    /** 允许普权弹幕排版 */
    trim() {
      propertyHook(String.prototype, "trim", function() {
        return String(this);
      });
    }
    async getSegDanmaku(aid = BLOD.aid, cid = BLOD.cid) {
      if (!cid)
        throw new Error(\`无法获取弹幕 aid:\${aid} cid:\${cid}\`);
      return new ApiDmWeb(aid, cid).toCmd();
    }
    /** 加载本地xml弹幕 */
    localDmXml() {
      var _a3;
      if (!window.player)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm))
        return toast.warning("未启用【重构播放器】,无法载入弹幕!");
      const msg = toast.list("加载本地弹幕 >>>", "> 请选择一个弹幕文件,拓展名:.xml,编码:utf-8");
      fileRead(".xml").then((d) => {
        msg.push("> -------loading-------", \`> 弹幕:\${d.name}\`, \`> 类型:\${d.type}\`, \`> 大小:\${sizeFormat(d.size)}\`);
        msg.type = "warning";
        return readAs(d);
      }).then((d) => {
        const dm = DanmakuBase.decodeXml(d);
        window.player.appendDm(dm, !user.userStatus.dmContact);
        msg.push("> -------decoding-------", \`> 有效弹幕数:\${dm.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`);
        msg.type = "success";
      }).catch((e) => {
        msg.push(e);
        msg.type = "error";
      }).finally(() => {
        msg.delay = user.userStatus.toast.delay;
      });
    }
    /** 加载本地json弹幕 */
    localDmJson() {
      var _a3;
      if (!window.player)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm))
        return toast.warning("未启用【重构播放器】,无法载入弹幕!");
      const msg = toast.list("加载本地弹幕 >>>", "> 请选择一个弹幕文件,拓展名:.json,编码:utf-8");
      fileRead(".json").then((d) => {
        msg.push("> -------loading-------", \`> 弹幕:\${d.name}\`, \`> 类型:\${d.type}\`, \`> 大小:\${sizeFormat(d.size)}\`);
        msg.type = "warning";
        return readAs(d);
      }).then((d) => {
        const dm = JSON.parse(d);
        window.player.appendDm(dm, !user.userStatus.dmContact);
        msg.push("> -------decoding-------", \`> 有效弹幕数:\${dm.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`);
        msg.type = "success";
      }).catch((e) => {
        msg.push(e);
        msg.type = "error";
      }).finally(() => {
        msg.delay = user.userStatus.toast.delay;
      });
    }
    /** 下载弹幕 */
    async download(aid = BLOD.aid, cid = BLOD.cid) {
      var _a3;
      if (!cid)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      const dms = ((_a3 = window.player) == null ? void 0 : _a3.getDanmaku) ? window.player.getDanmaku() : await new ApiDmWeb(aid, cid).getData();
      const metadata = videoInfo.metadata;
      const title = metadata ? \`\${metadata.album}(\${metadata.title})\` : \`\${aid}.\${cid}\`;
      if (user.userStatus.dmExtension === "json") {
        return saveAs(JSON.stringify(dms, void 0, "	"), \`\${title}.json\`, "application/json");
      }
      return saveAs(DanmakuBase.encodeXml(DanmakuBase.parseCmd(dms), cid), \`\${title}.xml\`, "application/xml");
    }
    /** 加载在线弹幕 */
    async onlineDm(str) {
      var _a3;
      if (!window.player)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm))
        return toast.warning("未启用【重构播放器】,无法载入弹幕!");
      const msg = toast.list("加载在线弹幕 >>>", "> -------在线弹幕-------", \`> 目标:\${str}\`);
      const { aid, cid } = await urlParam(str);
      msg.push(\`> aid:\${aid}\`, \`> cid:\${cid}\`);
      if (!aid || !cid) {
        msg.push("> 查询cid信息失败,已退出!");
        msg.type = "error";
        msg.delay = toast.delay;
      } else {
        new ApiDmWeb(aid, cid).getData().then((d) => {
          window.player.appendDm(d, !user.userStatus.dmContact);
          msg.push(\`> 有效弹幕数:\${d.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`);
          msg.type = "success";
        }).catch((e) => {
          msg.push(e);
          msg.type = "error";
        }).finally(() => {
          msg.delay = user.userStatus.toast.delay;
        });
      }
    }
  };
  var danmaku = new Danmaku();

  // src/core/download.ts
  init_tampermonkey();

  // src/io/api-playurl.ts
  init_tampermonkey();

  // src/io/api-sign.ts
  init_tampermonkey();
  var import_md5 = __toESM(require_md5());
  var APP_KEY = /* @__PURE__ */ ((APP_KEY2) => {
    APP_KEY2["1d8b6e7d45233436"] = "560c52ccd288fed045859ed18bffd973";
    APP_KEY2["c1b107428d337928"] = "ea85624dfcf12d7cc7b2b3a94fac1f2c";
    APP_KEY2["07da50c9a0bf829f"] = "25bdede4e1581c836cab73a48790ca6e";
    APP_KEY2["7d089525d3611b1c"] = "acd495b248ec528c2eed1e862d393126";
    APP_KEY2["9e5ded06c39bf5c4"] = "583e398ed0f980290b5903aba30b4cc4";
    APP_KEY2["27eb53fc9058f8c3"] = "c2ed53a74eeefe3cf99fbd01d8c9c375";
    APP_KEY2["85eb6835b0a1034e"] = "2ad42749773c441109bdc0191257a664";
    APP_KEY2["4409e2ce8ffd12b8"] = "59b43e04ad6965f34319062b478f83dd";
    APP_KEY2["37207f2beaebf8d7"] = "e988e794d4d4b6dd43bc0e89d6e90c43";
    APP_KEY2["84956560bc028eb7"] = "94aba54af9065f71de72f5508f1cd42e";
    APP_KEY2["bb3101000e232e27"] = "36efcfed79309338ced0380abd824ac1";
    APP_KEY2["fb06a25c6338edbc"] = "fd10bd177559780c2e4a44f1fa47fa83";
    APP_KEY2["iVGUTjsxvpLeuDCf"] = "aHRmhWMLkdeMuILqORnYZocwMBpMEOdt";
    APP_KEY2["178cf125136ca8ea"] = "34381a26236dd1171185c0beb042e1c6";
    APP_KEY2["57263273bc6b67f6"] = "a0488e488d1567960d3a765e8d129f90";
    APP_KEY2["8d23902c1688a798"] = "710f0212e62bd499b8d3ac6e1db9302a";
    APP_KEY2["7d336ec01856996b"] = "a1ce6983bc89e20a36c37f40c4f1a0dd";
    APP_KEY2["8e16697a1b4f8121"] = "f5dd03b752426f2e623d7badb28d190a";
    APP_KEY2["aae92bc66f3edfab"] = "af125a0d5279fd576c1b4418a3e8276d";
    APP_KEY2["ae57252b0c09105d"] = "c75875c596a69eb55bd119e74b07cfe3";
    APP_KEY2["bca7e84c2d947ac6"] = "60698ba2f68e01ce44738920a0ffe768";
    APP_KEY2["cc578d267072c94d"] = "ffb6bb4c4edae2566584dbcacfc6a6ad";
    APP_KEY2["cc8617fd6961e070"] = "3131924b941aac971e45189f265262be";
    APP_KEY2["YvirImLGlLANCLvM"] = "JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM";
    APP_KEY2["f3bb208b3d081dc8"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["4fa4601d1caa8b48"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["452d3958f048c02a"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["86385cdc024c0f6c"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["5256c25b71989747"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["e97210393ad42219"] = "f7c926f549b9becf1c27644958676a21";
    APP_KEY2["5dce947fe22167f9"] = "";
    APP_KEY2["8e9fc618fbd41e28"] = "";
    APP_KEY2["21087a09e533a072"] = "e5b8ba95cab6104100be35739304c23a";
    APP_KEY2["783bbb7264451d82"] = "2653583c8873dea268ab9386918b1d65";
    APP_KEY2["4ebafd7c4951b366"] = "8cb98205e9b2ad3669aad0fce12a4c13";
    return APP_KEY2;
  })(APP_KEY || {});
  var ApiSign = class {
    constructor(url, appkey) {
      this.url = url;
      this.appkey = appkey;
    }
    get ts() {
      return (/* @__PURE__ */ new Date()).getTime();
    }
    /** 查询参数,须要在子类中初始化好才能无参数调用\`sign\`方法 */
    data = {};
    /**
     * URL签名
     * @param searchParams 查询参数,会覆盖url原有参数
     * @param api 授权api,**授权第三方登录专用**
     * @returns 签名后的api
     */
    sign(searchParams = this.data, api = "") {
      const url = new URL2(this.url);
      Object.assign(url.params, searchParams, { ts: this.ts });
      delete url.params.sign;
      const appSecret = this.appSecret;
      url.params.appkey = this.appkey;
      url.sort();
      url.params.sign = (0, import_md5.default)((api ? \`api=\${decodeURIComponent(api)}\` : url.param) + appSecret);
      return url;
    }
    get appSecret() {
      switch (this.appkey) {
        case "f3bb208b3d081dc8":
        case "4fa4601d1caa8b48":
        case "452d3958f048c02a":
        case "86385cdc024c0f6c":
        case "5256c25b71989747":
        case "e97210393ad42219":
          switch (Math.trunc((/* @__PURE__ */ new Date()).getHours() / 4)) {
            case 0:
              this.appkey = "f3bb208b3d081dc8";
              break;
            case 1:
              this.appkey = "4fa4601d1caa8b48";
              break;
            case 2:
              this.appkey = "452d3958f048c02a";
              break;
            case 3:
              this.appkey = "86385cdc024c0f6c";
              break;
            case 4:
              this.appkey = "5256c25b71989747";
              break;
            case 5:
              this.appkey = "e97210393ad42219";
              break;
            default:
              break;
          }
          break;
        default:
          break;
      }
      return APP_KEY[this.appkey];
    }
  };
  async function urlSign(url, searchParams = {}, appkey = "c1b107428d337928") {
    const api = new ApiSign(url, appkey);
    const response = await fetch(api.sign(searchParams).toJSON());
    return await response.json();
  }

  // src/io/fnval.ts
  init_tampermonkey();
  var qn = 127;
  var fnver = 0;
  var fnval = 0 /* FLV */ + 16 /* DASH_H265 */ + 64 /* HDR */ + 128 /* DASH_4K */ + 256 /* DOLBYAUDIO */ + 512 /* DOLBYVIDEO */ + 1024 /* DASH_8K */ + 2048 /* DASH_AV1 */;

  // src/io/api-playurl.ts
  var PlayurlDescriptionMap = {
    127: "超高清 8K",
    126: "杜比视界",
    125: "HDR",
    121: "超清 4K",
    120: "超清 4K",
    116: "高清 1080P60",
    112: "高清 1080P+",
    80: "高清 1080P",
    74: "高清 720P60",
    64: "高清 720P",
    48: "高清 720P",
    32: "清晰 480P",
    16: "流畅 360P",
    15: "流畅 360P",
    6: "流畅 240P",
    5: "流畅 144P"
  };
  var PlayurlFormatMap = {
    127: "hdflv2",
    126: "hdflv2",
    125: "hdflv2",
    121: "hdflv2",
    120: "hdflv2",
    116: "flv_p60",
    112: "hdflv2",
    80: "flv",
    74: "flv720_p60",
    64: "flv720",
    48: "flv720",
    32: "flv480",
    16: "mp4",
    15: "mp4",
    6: "mp4",
    5: "mp4"
  };
  var PlayurlQualityMap = {
    127: "8K",
    126: "Dolby",
    125: "HDR",
    121: "4K",
    120: "4K",
    116: "1080P60",
    112: "1080P+",
    80: "1080P",
    74: "720P60",
    64: "720P",
    48: "720P",
    32: "480P",
    16: "360P",
    15: "360P",
    6: "240P",
    5: "144P"
  };
  var PlayurlCodecs = {
    30126: "hvc1.2.4.L153.90",
    126: "hvc1.2.4.L153.90",
    30121: "hev1.1.6.L156.90",
    121: "hev1.1.6.L156.90",
    30120: "avc1.64003C",
    120: "avc1.64003C",
    30112: "avc1.640028",
    // 1080P+
    112: "avc1.640028",
    // 1080P+
    30102: "hev1.1.6.L120.90",
    // HEVC 1080P+
    102: "hev1.1.6.L120.90",
    // HEVC 1080P+
    30080: "avc1.640028",
    // 1080P
    80: "avc1.640028",
    // 1080P
    30077: "hev1.1.6.L120.90",
    // HEVC 1080P
    77: "hev1.1.6.L120.90",
    // HEVC 1080P
    30064: "avc1.64001F",
    // 720P
    64: "avc1.64001F",
    // 720P
    30066: "hev1.1.6.L120.90",
    // HEVC 720P
    66: "hev1.1.6.L120.90",
    // HEVC 720P
    30032: "avc1.64001E",
    // 480P
    32: "avc1.64001E",
    // 480P
    30033: "hev1.1.6.L120.90",
    // HEVC 480P
    33: "hev1.1.6.L120.90",
    // HEVC 480P
    30011: "hev1.1.6.L120.90",
    // HEVC 360P
    11: "hev1.1.6.L120.90",
    // HEVC 360P
    30016: "avc1.64001E",
    // 360P
    16: "avc1.64001E",
    // 360P
    30006: "avc1.64001E",
    //240P
    6: "avc1.64001E",
    // 240P
    30005: "avc1.64001E",
    // 144P
    5: "avc1.64001E",
    // 144P
    30251: "fLaC",
    // Hires
    30250: "ec-3",
    // Dolby
    30280: "mp4a.40.2",
    // 高码音频
    30232: "mp4a.40.2",
    // 中码音频
    30216: "mp4a.40.2"
    // 低码音频
  };
  var PlayurlCodecsAPP = {
    30016: "avc1.64001E",
    // APP源 360P
    16: "avc1.64001E",
    // APP源 360P
    30032: "avc1.64001F",
    // APP源 480P
    32: "avc1.64001F",
    // APP源 480P
    30064: "avc1.640028",
    // APP源 720P
    64: "avc1.640028",
    // APP源 720P
    30080: "avc1.640032",
    // APP源 1080P
    80: "avc1.640032",
    // APP源 1080P
    30216: "mp4a.40.2",
    // APP源 低码音频
    30232: "mp4a.40.2",
    // APP源 中码音频
    30280: "mp4a.40.2"
    // APP源 高码音频 
  };
  var PlayurlFrameRate = {
    30121: "16000/672",
    121: "16000/672",
    30120: "16000/672",
    120: "16000/672",
    30112: "16000/672",
    112: "16000/672",
    30102: "16000/672",
    102: "16000/672",
    30080: "16000/672",
    80: "16000/672",
    30077: "16000/656",
    77: "16000/656",
    30064: "16000/672",
    64: "16000/672",
    30066: "16000/656",
    66: "16000/656",
    30032: "16000/672",
    32: "16000/672",
    30033: "16000/656",
    33: "16000/656",
    30011: "16000/656",
    11: "16000/656",
    30016: "16000/672",
    16: "16000/672",
    30006: "16000/672",
    6: "16000/672",
    30005: "16000/672",
    5: "16000/672"
  };
  var PlayurlResolution = {
    30121: [3840, 2160],
    121: [3840, 2160],
    30120: [3840, 2160],
    120: [3840, 2160],
    30112: [1920, 1080],
    // 1080P+
    112: [1920, 1080],
    // 1080P+
    30102: [1920, 1080],
    // HEVC 1080P+
    102: [1920, 1080],
    // HEVC 1080P+
    30080: [1920, 1080],
    // 1080P
    80: [1920, 1080],
    // 1080P
    30077: [1920, 1080],
    // HEVC 1080P
    77: [1920, 1080],
    // HEVC 1080P
    30064: [1280, 720],
    // 720P
    64: [1280, 720],
    // 720P
    30066: [1280, 720],
    // HEVC 720P
    66: [1280, 720],
    // HEVC 720P
    30032: [852, 480],
    // 480P
    32: [852, 480],
    // 480P
    30033: [852, 480],
    // HEVC 480P
    33: [852, 480],
    // HEVC 480P
    30011: [640, 360],
    // HEVC 360P
    11: [640, 360],
    // HEVC 360P
    30016: [640, 360],
    // 360P
    16: [640, 360],
    // 360P
    30006: [426, 240],
    // 240P
    6: [426, 240],
    // 240P
    30005: [256, 144],
    // 144P
    5: [256, 144]
    // 144P
  };
  var PlayurlDash = class {
    accept_description = [];
    accept_format = "";
    accept_quality = [];
    bp = 0;
    code = 0;
    dash = {
      audio: [],
      dolby: { audio: [], type: 0 },
      duration: 0,
      min_buffer_time: 1.5,
      minBufferTime: 1.5,
      video: []
    };
    fnval = 4048;
    fnver = 0;
    format = "flv";
    from = "local";
    has_paid = true;
    is_preview = 0;
    message = "";
    no_rexcode = 1;
    quality = 80;
    result = "suee";
    seek_param = "start";
    seek_type = "offset";
    status = 2;
    support_formats = [];
    timelength = 0;
    type = "DASH";
    video_codecid = 7;
    video_project = true;
  };
  async function apiPlayurl(data, dash = true, pgc = false, server = "api.bilibili.com") {
    data = Object.assign({
      qn,
      otype: "json",
      fourk: 1
    }, data, dash ? { fnver, fnval } : {});
    const response = await fetch(objUrl(pgc ? URLS.PGC_PLAYURL.replace("api.bilibili.com", server) : URLS.PLAYURL, data), { credentials: "include" });
    const json = await response.json();
    if (pgc) {
      return jsonCheck(json).result;
    }
    return jsonCheck(json).data;
  }

  // src/io/api-playurl-interface.ts
  init_tampermonkey();
  var ApiPlayurlInterface = class extends ApiSign {
    constructor(data, pgc = false) {
      super(pgc ? URLS.PLAYURL_BANGUMI : URLS.PLAYURL_INTERFACE, "YvirImLGlLANCLvM");
      this.data = data;
      this.data = Object.assign({
        otype: "json",
        qn: data.quality,
        type: "",
        fnver,
        fnval
      }, data, pgc ? { module: "bangumi", season_type: 1 } : {});
    }
    async getData() {
      const response = await fetch(this.sign().toJSON(), { credentials: "include" });
      return await response.json();
    }
  };

  // src/io/api-playurl-intl.ts
  init_tampermonkey();
  var ApiPlayurlIntl = class extends ApiSign {
    constructor(data, dash = true, pgc = false) {
      super(pgc ? URLS.INTL_OGV_PLAYURL : URLS.INTL_PLAYURL, "bb3101000e232e27");
      this.data = data;
      this.pgc = pgc;
      this.data = Object.assign({
        device: "android",
        force_host: 1,
        mobi_app: "android_i",
        qn,
        platform: "android_i",
        fourk: 1,
        build: 2100110,
        otype: "json"
      }, data, dash ? { fnval, fnver } : {});
    }
    async getData() {
      const response = await GM.fetch(this.sign().toJSON());
      const json = await response.json();
      if (this.pgc) {
        return jsonCheck(json);
      }
      return jsonCheck(json).data;
    }
  };

  // src/io/api-playurl-tv.ts
  init_tampermonkey();
  var ApiPlayurlTv = class extends ApiSign {
    constructor(data, dash = true, pgc = false) {
      super(pgc ? URLS.PGC_PLAYURL_TV : URLS.UGC_PLAYURL_TV, "27eb53fc9058f8c3");
      this.data = data;
      this.data = Object.assign({
        qn,
        fourk: 1,
        otype: "json",
        platform: "android",
        mobi_app: "android_tv_yst",
        build: 102801
      }, data, dash ? { fnval, fnver } : {});
    }
    async getData() {
      const response = await fetch(this.sign().toJSON());
      const json = await response.json();
      return jsonCheck(json);
    }
  };

  // src/io/api-playurlproj.ts
  init_tampermonkey();
  var ApiPlayurlProj = class extends ApiSign {
    constructor(data, pgc = false) {
      super(pgc ? URLS.PGC_PLAYURL_PROJ : URLS.PLAYURL_PROJ, "bb3101000e232e27");
      this.data = data;
      this.data = Object.assign({
        build: "2040100",
        device: "android",
        mobi_app: "android_i",
        otype: "json",
        platform: "android_i",
        qn
      }, data);
      pgc && (this.data.module = "bangumi");
    }
    async getData() {
      const response = await fetch(this.sign().toJSON());
      return await response.json();
    }
  };

  // src/io/grpc/BAPIAppPlayurl/v1/playurl.ts
  init_tampermonkey();
  var import_light3 = __toESM(require_light());

  // src/io/grpc/BAPIAppPlayurl/v1/playurl.json
  var playurl_default = {
    nested: {
      bilibili: {
        nested: {
          pgc: {
            nested: {
              gateway: {
                nested: {
                  player: {
                    nested: {
                      v1: {
                        nested: {
                          PlayViewReq: {
                            fields: {
                              epId: {
                                type: "int64",
                                id: 1
                              },
                              cid: {
                                type: "int64",
                                id: 2
                              },
                              qn: {
                                type: "int64",
                                id: 3
                              },
                              fnver: {
                                type: "int32",
                                id: 4
                              },
                              fnval: {
                                type: "int32",
                                id: 5
                              },
                              download: {
                                type: "uint32",
                                id: 6
                              },
                              forceHost: {
                                type: "int32",
                                id: 7
                              },
                              fourk: {
                                type: "bool",
                                id: 8
                              },
                              spmid: {
                                type: "string",
                                id: 9
                              },
                              fromSpmid: {
                                type: "string",
                                id: 10
                              },
                              teenagersMode: {
                                type: "int32",
                                id: 11
                              },
                              preferCodecType: {
                                type: "bilibili.app.playurl.v1.CodeType",
                                id: 12
                              },
                              isPreview: {
                                type: "bool",
                                id: 13
                              },
                              roomId: {
                                type: "int64",
                                id: 14
                              }
                            }
                          },
                          ProjectReq: {
                            fields: {
                              epId: {
                                type: "int64",
                                id: 1
                              },
                              cid: {
                                type: "int64",
                                id: 2
                              },
                              qn: {
                                type: "int64",
                                id: 3
                              },
                              fnver: {
                                type: "int32",
                                id: 4
                              },
                              fnval: {
                                type: "int32",
                                id: 5
                              },
                              download: {
                                type: "uint32",
                                id: 6
                              },
                              forceHost: {
                                type: "int32",
                                id: 7
                              },
                              fourk: {
                                type: "bool",
                                id: 8
                              },
                              spmid: {
                                type: "string",
                                id: 9
                              },
                              fromSpmid: {
                                type: "string",
                                id: 10
                              },
                              protocol: {
                                type: "int32",
                                id: 11
                              },
                              deviceType: {
                                type: "int32",
                                id: 12
                              }
                            }
                          },
                          PlayViewReply: {
                            fields: {
                              videoInfo: {
                                type: "bilibili.app.playurl.v1.VideoInfo",
                                id: 1
                              },
                              playConf: {
                                type: "PlayAbilityConf",
                                id: 2
                              },
                              business: {
                                type: "BusinessInfo",
                                id: 3
                              },
                              event: {
                                type: "Event",
                                id: 4
                              }
                            }
                          },
                          Event: {
                            fields: {
                              shake: {
                                type: "Shake",
                                id: 1
                              }
                            }
                          },
                          Shake: {
                            fields: {
                              file: {
                                type: "string",
                                id: 1
                              }
                            }
                          },
                          BusinessInfo: {
                            fields: {
                              isPreview: {
                                type: "bool",
                                id: 1
                              },
                              bp: {
                                type: "bool",
                                id: 2
                              },
                              marlinToken: {
                                type: "string",
                                id: 3
                              }
                            }
                          },
                          PlayAbilityConf: {
                            fields: {
                              backgroundPlayDisable: {
                                type: "bool",
                                id: 1
                              },
                              flipDisable: {
                                type: "bool",
                                id: 2
                              },
                              castDisable: {
                                type: "bool",
                                id: 3
                              },
                              feedbackDisable: {
                                type: "bool",
                                id: 4
                              },
                              subtitleDisable: {
                                type: "bool",
                                id: 5
                              },
                              playbackRateDisable: {
                                type: "bool",
                                id: 6
                              },
                              timeUpDisable: {
                                type: "bool",
                                id: 7
                              },
                              playbackModeDisable: {
                                type: "bool",
                                id: 8
                              },
                              scaleModeDisable: {
                                type: "bool",
                                id: 9
                              },
                              likeDisable: {
                                type: "bool",
                                id: 10
                              },
                              dislikeDisable: {
                                type: "bool",
                                id: 11
                              },
                              coinDisable: {
                                type: "bool",
                                id: 12
                              },
                              elecDisable: {
                                type: "bool",
                                id: 13
                              },
                              shareDisable: {
                                type: "bool",
                                id: 14
                              },
                              screenShotDisable: {
                                type: "bool",
                                id: 15
                              },
                              lockScreenDisable: {
                                type: "bool",
                                id: 16
                              },
                              recommendDisable: {
                                type: "bool",
                                id: 17
                              },
                              playbackSpeedDisable: {
                                type: "bool",
                                id: 18
                              },
                              definitionDisable: {
                                type: "bool",
                                id: 19
                              },
                              selectionsDisable: {
                                type: "bool",
                                id: 20
                              },
                              nextDisable: {
                                type: "bool",
                                id: 21
                              },
                              editDmDisable: {
                                type: "bool",
                                id: 22
                              },
                              smallWindowDisable: {
                                type: "bool",
                                id: 23
                              },
                              shakeDisable: {
                                type: "bool",
                                id: 24
                              },
                              outerDmDisable: {
                                type: "bool",
                                id: 25
                              },
                              innerDmDisable: {
                                type: "bool",
                                id: 26
                              },
                              freyaEnterDisable: {
                                type: "bool",
                                id: 27
                              },
                              dolbyDisable: {
                                type: "bool",
                                id: 28
                              },
                              freyaFullDisable: {
                                type: "bool",
                                id: 29
                              }
                            }
                          },
                          ProjectReply: {
                            fields: {
                              project: {
                                type: "bilibili.app.playurl.v1.PlayURLReply",
                                id: 1
                              }
                            }
                          },
                          LivePlayViewReq: {
                            fields: {
                              epId: {
                                type: "int64",
                                id: 1
                              },
                              quality: {
                                type: "uint32",
                                id: 2
                              },
                              ptype: {
                                type: "uint32",
                                id: 3
                              },
                              https: {
                                type: "bool",
                                id: 4
                              },
                              playType: {
                                type: "uint32",
                                id: 5
                              },
                              deviceType: {
                                type: "int32",
                                id: 6
                              }
                            }
                          },
                          LivePlayViewReply: {
                            fields: {
                              roomInfo: {
                                type: "RoomInfo",
                                id: 1
                              },
                              playInfo: {
                                type: "LivePlayInfo",
                                id: 2
                              }
                            }
                          },
                          RoomInfo: {
                            fields: {
                              roomId: {
                                type: "int64",
                                id: 1
                              },
                              uid: {
                                type: "int64",
                                id: 2
                              },
                              status: {
                                type: "RoomStatusInfo",
                                id: 3
                              },
                              show: {
                                type: "RoomShowInfo",
                                id: 4
                              }
                            }
                          },
                          RoomStatusInfo: {
                            fields: {
                              liveStatus: {
                                type: "int64",
                                id: 1
                              },
                              liveScreenType: {
                                type: "int64",
                                id: 2
                              },
                              liveMark: {
                                type: "int64",
                                id: 3
                              },
                              lockStatus: {
                                type: "int64",
                                id: 4
                              },
                              lockTime: {
                                type: "int64",
                                id: 5
                              },
                              hiddenStatus: {
                                type: "int64",
                                id: 6
                              },
                              hiddenTime: {
                                type: "int64",
                                id: 7
                              },
                              liveType: {
                                type: "int64",
                                id: 8
                              },
                              roomShield: {
                                type: "int64",
                                id: 9
                              }
                            }
                          },
                          RoomShowInfo: {
                            fields: {
                              shortId: {
                                type: "int64",
                                id: 1
                              },
                              popularityCount: {
                                type: "int64",
                                id: 8
                              },
                              liveStartTime: {
                                type: "int64",
                                id: 10
                              }
                            }
                          },
                          LivePlayInfo: {
                            fields: {
                              currentQn: {
                                type: "int32",
                                id: 1
                              },
                              qualityDescription: {
                                rule: "repeated",
                                type: "QualityDescription",
                                id: 2
                              },
                              durl: {
                                rule: "repeated",
                                type: "ResponseDataUrl",
                                id: 3
                              }
                            }
                          },
                          QualityDescription: {
                            fields: {
                              qn: {
                                type: "int32",
                                id: 1
                              },
                              desc: {
                                type: "string",
                                id: 2
                              }
                            }
                          },
                          ResponseDataUrl: {
                            fields: {
                              url: {
                                type: "string",
                                id: 1
                              },
                              streamType: {
                                type: "uint32",
                                id: 2
                              },
                              ptag: {
                                type: "uint32",
                                id: 3
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          app: {
            nested: {
              playurl: {
                nested: {
                  v1: {
                    nested: {
                      PlayURLReq: {
                        fields: {
                          aid: {
                            type: "int64",
                            id: 1
                          },
                          cid: {
                            type: "int64",
                            id: 2
                          },
                          qn: {
                            type: "int64",
                            id: 3
                          },
                          fnver: {
                            type: "int32",
                            id: 4
                          },
                          fnval: {
                            type: "int32",
                            id: 5
                          },
                          download: {
                            type: "uint32",
                            id: 6
                          },
                          forceHost: {
                            type: "int32",
                            id: 7
                          },
                          fourk: {
                            type: "bool",
                            id: 8
                          },
                          spmid: {
                            type: "string",
                            id: 9
                          },
                          fromSpmid: {
                            type: "string",
                            id: 10
                          }
                        }
                      },
                      PlayURLReply: {
                        fields: {
                          quality: {
                            type: "uint32",
                            id: 1
                          },
                          format: {
                            type: "string",
                            id: 2
                          },
                          timelength: {
                            type: "uint64",
                            id: 3
                          },
                          videoCodecid: {
                            type: "uint32",
                            id: 4
                          },
                          fnver: {
                            type: "uint32",
                            id: 5
                          },
                          fnval: {
                            type: "uint32",
                            id: 6
                          },
                          videoProject: {
                            type: "bool",
                            id: 7
                          },
                          durl: {
                            rule: "repeated",
                            type: "ResponseUrl",
                            id: 8
                          },
                          dash: {
                            type: "ResponseDash",
                            id: 9
                          },
                          noRexcode: {
                            type: "int32",
                            id: 10
                          },
                          upgradeLimit: {
                            type: "UpgradeLimit",
                            id: 11
                          },
                          supportFormats: {
                            rule: "repeated",
                            type: "FormatDescription",
                            id: 12
                          },
                          type: {
                            type: "VideoType",
                            id: 13
                          }
                        }
                      },
                      ResponseUrl: {
                        fields: {
                          order: {
                            type: "uint32",
                            id: 1
                          },
                          length: {
                            type: "uint64",
                            id: 2
                          },
                          size: {
                            type: "uint64",
                            id: 3
                          },
                          url: {
                            type: "string",
                            id: 4
                          },
                          backupUrl: {
                            rule: "repeated",
                            type: "string",
                            id: 5
                          },
                          md5: {
                            type: "string",
                            id: 6
                          }
                        }
                      },
                      ResponseDash: {
                        fields: {
                          video: {
                            rule: "repeated",
                            type: "DashItem",
                            id: 1
                          },
                          audio: {
                            rule: "repeated",
                            type: "DashItem",
                            id: 2
                          }
                        }
                      },
                      DashItem: {
                        fields: {
                          id: {
                            type: "uint32",
                            id: 1
                          },
                          baseUrl: {
                            type: "string",
                            id: 2
                          },
                          backupUrl: {
                            rule: "repeated",
                            type: "string",
                            id: 3
                          },
                          bandwidth: {
                            type: "uint32",
                            id: 4
                          },
                          codecid: {
                            type: "uint32",
                            id: 5
                          },
                          md5: {
                            type: "string",
                            id: 6
                          },
                          size: {
                            type: "uint64",
                            id: 7
                          },
                          frameRate: {
                            type: "string",
                            id: 8
                          }
                        }
                      },
                      UpgradeLimit: {
                        fields: {
                          code: {
                            type: "int32",
                            id: 1
                          },
                          message: {
                            type: "string",
                            id: 2
                          },
                          image: {
                            type: "string",
                            id: 3
                          },
                          button: {
                            type: "UpgradeButton",
                            id: 4
                          }
                        }
                      },
                      UpgradeButton: {
                        fields: {
                          title: {
                            type: "string",
                            id: 1
                          },
                          link: {
                            type: "string",
                            id: 2
                          }
                        }
                      },
                      FormatDescription: {
                        fields: {
                          quality: {
                            type: "uint32",
                            id: 1
                          },
                          format: {
                            type: "string",
                            id: 2
                          },
                          description: {
                            type: "string",
                            id: 3
                          },
                          newDescription: {
                            type: "string",
                            id: 4
                          },
                          displayDesc: {
                            type: "string",
                            id: 5
                          },
                          superscript: {
                            type: "string",
                            id: 6
                          }
                        }
                      },
                      ProjectReq: {
                        fields: {
                          aid: {
                            type: "int64",
                            id: 1
                          },
                          cid: {
                            type: "int64",
                            id: 2
                          },
                          qn: {
                            type: "int64",
                            id: 3
                          },
                          fnver: {
                            type: "int32",
                            id: 4
                          },
                          fnval: {
                            type: "int32",
                            id: 5
                          },
                          download: {
                            type: "uint32",
                            id: 6
                          },
                          forceHost: {
                            type: "int32",
                            id: 7
                          },
                          fourk: {
                            type: "bool",
                            id: 8
                          },
                          spmid: {
                            type: "string",
                            id: 9
                          },
                          fromSpmid: {
                            type: "string",
                            id: 10
                          },
                          protocol: {
                            type: "int32",
                            id: 11
                          },
                          deviceType: {
                            type: "int32",
                            id: 12
                          }
                        }
                      },
                      ProjectReply: {
                        fields: {
                          project: {
                            type: "PlayURLReply",
                            id: 1
                          }
                        }
                      },
                      PlayViewReq: {
                        fields: {
                          aid: {
                            type: "int64",
                            id: 1
                          },
                          cid: {
                            type: "int64",
                            id: 2
                          },
                          qn: {
                            type: "int64",
                            id: 3
                          },
                          fnver: {
                            type: "int32",
                            id: 4
                          },
                          fnval: {
                            type: "int32",
                            id: 5
                          },
                          download: {
                            type: "uint32",
                            id: 6
                          },
                          forceHost: {
                            type: "int32",
                            id: 7
                          },
                          fourk: {
                            type: "bool",
                            id: 8
                          },
                          spmid: {
                            type: "string",
                            id: 9
                          },
                          fromSpmid: {
                            type: "string",
                            id: 10
                          },
                          teenagersMode: {
                            type: "int32",
                            id: 11
                          },
                          preferCodecType: {
                            type: "CodeType",
                            id: 12
                          },
                          business: {
                            type: "Business",
                            id: 13
                          }
                        }
                      },
                      Business: {
                        values: {
                          UNKNOWN: 0,
                          STORY: 1
                        }
                      },
                      CodeType: {
                        values: {
                          NOCODE: 0,
                          CODE264: 1,
                          CODE265: 2
                        }
                      },
                      PlayViewReply: {
                        fields: {
                          videoInfo: {
                            type: "VideoInfo",
                            id: 1
                          },
                          playConf: {
                            type: "PlayAbilityConf",
                            id: 2
                          },
                          upgradeLimit: {
                            type: "UpgradeLimit",
                            id: 3
                          },
                          chronos: {
                            type: "Chronos",
                            id: 4
                          },
                          playArc: {
                            type: "PlayArcConf",
                            id: 5
                          },
                          event: {
                            type: "Event",
                            id: 6
                          }
                        }
                      },
                      Event: {
                        fields: {
                          shake: {
                            type: "Shake",
                            id: 1
                          }
                        }
                      },
                      Shake: {
                        fields: {
                          file: {
                            type: "string",
                            id: 1
                          }
                        }
                      },
                      Chronos: {
                        fields: {
                          md5: {
                            type: "string",
                            id: 1
                          },
                          file: {
                            type: "string",
                            id: 2
                          }
                        }
                      },
                      PlayConfReq: {
                        fields: {}
                      },
                      PlayConfReply: {
                        fields: {
                          playConf: {
                            type: "PlayAbilityConf",
                            id: 1
                          }
                        }
                      },
                      PlayAbilityConf: {
                        fields: {
                          backgroundPlayConf: {
                            type: "CloudConf",
                            id: 1
                          },
                          flipConf: {
                            type: "CloudConf",
                            id: 2
                          },
                          castConf: {
                            type: "CloudConf",
                            id: 3
                          },
                          feedbackConf: {
                            type: "CloudConf",
                            id: 4
                          },
                          subtitleConf: {
                            type: "CloudConf",
                            id: 5
                          },
                          playbackRateConf: {
                            type: "CloudConf",
                            id: 6
                          },
                          timeUpConf: {
                            type: "CloudConf",
                            id: 7
                          },
                          playbackModeConf: {
                            type: "CloudConf",
                            id: 8
                          },
                          scaleModeConf: {
                            type: "CloudConf",
                            id: 9
                          },
                          likeConf: {
                            type: "CloudConf",
                            id: 10
                          },
                          dislikeConf: {
                            type: "CloudConf",
                            id: 11
                          },
                          coinConf: {
                            type: "CloudConf",
                            id: 12
                          },
                          elecConf: {
                            type: "CloudConf",
                            id: 13
                          },
                          shareConf: {
                            type: "CloudConf",
                            id: 14
                          },
                          screenShotConf: {
                            type: "CloudConf",
                            id: 15
                          },
                          lockScreenConf: {
                            type: "CloudConf",
                            id: 16
                          },
                          recommendConf: {
                            type: "CloudConf",
                            id: 17
                          },
                          playbackSpeedConf: {
                            type: "CloudConf",
                            id: 18
                          },
                          definitionConf: {
                            type: "CloudConf",
                            id: 19
                          },
                          selectionsConf: {
                            type: "CloudConf",
                            id: 20
                          },
                          nextConf: {
                            type: "CloudConf",
                            id: 21
                          },
                          editDmConf: {
                            type: "CloudConf",
                            id: 22
                          },
                          smallWindowConf: {
                            type: "CloudConf",
                            id: 23
                          },
                          shakeConf: {
                            type: "CloudConf",
                            id: 24
                          },
                          outerDmConf: {
                            type: "CloudConf",
                            id: 25
                          },
                          innerDmConf: {
                            type: "CloudConf",
                            id: 26
                          },
                          panoramaConf: {
                            type: "CloudConf",
                            id: 27
                          },
                          dolbyConf: {
                            type: "CloudConf",
                            id: 28
                          }
                        }
                      },
                      PlayArcConf: {
                        fields: {
                          backgroundPlayConf: {
                            type: "ArcConf",
                            id: 1
                          },
                          flipConf: {
                            type: "ArcConf",
                            id: 2
                          },
                          castConf: {
                            type: "ArcConf",
                            id: 3
                          },
                          feedbackConf: {
                            type: "ArcConf",
                            id: 4
                          },
                          subtitleConf: {
                            type: "ArcConf",
                            id: 5
                          },
                          playbackRateConf: {
                            type: "ArcConf",
                            id: 6
                          },
                          timeUpConf: {
                            type: "ArcConf",
                            id: 7
                          },
                          playbackModeConf: {
                            type: "ArcConf",
                            id: 8
                          },
                          scaleModeConf: {
                            type: "ArcConf",
                            id: 9
                          },
                          likeConf: {
                            type: "ArcConf",
                            id: 10
                          },
                          dislikeConf: {
                            type: "ArcConf",
                            id: 11
                          },
                          coinConf: {
                            type: "ArcConf",
                            id: 12
                          },
                          elecConf: {
                            type: "ArcConf",
                            id: 13
                          },
                          shareConf: {
                            type: "ArcConf",
                            id: 14
                          },
                          screenShotConf: {
                            type: "ArcConf",
                            id: 15
                          },
                          lockScreenConf: {
                            type: "ArcConf",
                            id: 16
                          },
                          recommendConf: {
                            type: "ArcConf",
                            id: 17
                          },
                          playbackSpeedConf: {
                            type: "ArcConf",
                            id: 18
                          },
                          definitionConf: {
                            type: "ArcConf",
                            id: 19
                          },
                          selectionsConf: {
                            type: "ArcConf",
                            id: 20
                          },
                          nextConf: {
                            type: "ArcConf",
                            id: 21
                          },
                          editDmConf: {
                            type: "ArcConf",
                            id: 22
                          },
                          smallWindowConf: {
                            type: "ArcConf",
                            id: 23
                          },
                          shakeConf: {
                            type: "ArcConf",
                            id: 24
                          },
                          outerDmConf: {
                            type: "ArcConf",
                            id: 25
                          },
                          innerDmConf: {
                            type: "ArcConf",
                            id: 26
                          },
                          panoramaConf: {
                            type: "ArcConf",
                            id: 27
                          },
                          dolbyConf: {
                            type: "ArcConf",
                            id: 28
                          }
                        }
                      },
                      ConfType: {
                        values: {
                          NoType: 0,
                          FLIPCONF: 1,
                          CASTCONF: 2,
                          FEEDBACK: 3,
                          SUBTITLE: 4,
                          PLAYBACKRATE: 5,
                          TIMEUP: 6,
                          PLAYBACKMODE: 7,
                          SCALEMODE: 8,
                          BACKGROUNDPLAY: 9,
                          LIKE: 10,
                          DISLIKE: 11,
                          COIN: 12,
                          ELEC: 13,
                          SHARE: 14,
                          SCREENSHOT: 15,
                          LOCKSCREEN: 16,
                          RECOMMEND: 17,
                          PLAYBACKSPEED: 18,
                          DEFINITION: 19,
                          SELECTIONS: 20,
                          NEXT: 21,
                          EDITDM: 22,
                          SMALLWINDOW: 23,
                          SHAKE: 24,
                          OUTERDM: 25,
                          INNERDM: 26,
                          PANORAMA: 27,
                          DOLBY: 28
                        }
                      },
                      CloudConf: {
                        fields: {
                          show: {
                            type: "bool",
                            id: 1
                          },
                          confType: {
                            type: "ConfType",
                            id: 2
                          },
                          fieldValue: {
                            type: "FieldValue",
                            id: 3
                          }
                        }
                      },
                      FieldValue: {
                        oneofs: {
                          value: {
                            oneof: [
                              "switch"
                            ]
                          }
                        },
                        fields: {
                          switch: {
                            type: "bool",
                            id: 1
                          }
                        }
                      },
                      ArcConf: {
                        fields: {
                          isSupport: {
                            type: "bool",
                            id: 1
                          }
                        }
                      },
                      VideoInfo: {
                        fields: {
                          quality: {
                            type: "uint32",
                            id: 1
                          },
                          format: {
                            type: "string",
                            id: 2
                          },
                          timelength: {
                            type: "uint64",
                            id: 3
                          },
                          videoCodecid: {
                            type: "uint32",
                            id: 4
                          },
                          streamList: {
                            rule: "repeated",
                            type: "Stream",
                            id: 5
                          },
                          dashAudio: {
                            rule: "repeated",
                            type: "DashItem",
                            id: 6
                          },
                          dolby: {
                            type: "DolbyItem",
                            id: 7
                          }
                        }
                      },
                      DolbyItem: {
                        fields: {
                          type: {
                            type: "Type",
                            id: 1
                          },
                          audio: {
                            rule: "repeated",
                            type: "DashItem",
                            id: 2
                          }
                        },
                        nested: {
                          Type: {
                            values: {
                              NONE: 0,
                              COMMON: 1,
                              ATMOS: 2
                            }
                          }
                        }
                      },
                      Stream: {
                        oneofs: {
                          content: {
                            oneof: [
                              "dashVideo",
                              "segmentVideo"
                            ]
                          }
                        },
                        fields: {
                          streamInfo: {
                            type: "StreamInfo",
                            id: 1
                          },
                          dashVideo: {
                            type: "DashVideo",
                            id: 2
                          },
                          segmentVideo: {
                            type: "SegmentVideo",
                            id: 3
                          }
                        }
                      },
                      SegmentVideo: {
                        fields: {
                          segment: {
                            rule: "repeated",
                            type: "ResponseUrl",
                            id: 1
                          }
                        }
                      },
                      PlayErr: {
                        values: {
                          NoErr: 0,
                          WithMultiDeviceLoginErr: 1
                        }
                      },
                      StreamInfo: {
                        fields: {
                          quality: {
                            type: "uint32",
                            id: 1
                          },
                          format: {
                            type: "string",
                            id: 2
                          },
                          description: {
                            type: "string",
                            id: 3
                          },
                          errCode: {
                            type: "PlayErr",
                            id: 4
                          },
                          limit: {
                            type: "StreamLimit",
                            id: 5
                          },
                          needVip: {
                            type: "bool",
                            id: 6
                          },
                          needLogin: {
                            type: "bool",
                            id: 7
                          },
                          intact: {
                            type: "bool",
                            id: 8
                          },
                          noRexcode: {
                            type: "bool",
                            id: 9
                          },
                          attribute: {
                            type: "int64",
                            id: 10
                          },
                          newDescription: {
                            type: "string",
                            id: 11
                          },
                          displayDesc: {
                            type: "string",
                            id: 12
                          },
                          superscript: {
                            type: "string",
                            id: 13
                          }
                        }
                      },
                      StreamLimit: {
                        fields: {
                          title: {
                            type: "string",
                            id: 1
                          },
                          uri: {
                            type: "string",
                            id: 2
                          },
                          msg: {
                            type: "string",
                            id: 3
                          }
                        }
                      },
                      PlayConfEditReply: {
                        fields: {}
                      },
                      PlayConfEditReq: {
                        fields: {
                          playConf: {
                            rule: "repeated",
                            type: "PlayConfState",
                            id: 1
                          }
                        }
                      },
                      PlayConfState: {
                        fields: {
                          confType: {
                            type: "ConfType",
                            id: 1
                          },
                          show: {
                            type: "bool",
                            id: 2
                          },
                          fieldValue: {
                            type: "FieldValue",
                            id: 3
                          }
                        }
                      },
                      DashVideo: {
                        fields: {
                          baseUrl: {
                            type: "string",
                            id: 1
                          },
                          backupUrl: {
                            rule: "repeated",
                            type: "string",
                            id: 2
                          },
                          bandwidth: {
                            type: "uint32",
                            id: 3
                          },
                          codecid: {
                            type: "uint32",
                            id: 4
                          },
                          md5: {
                            type: "string",
                            id: 5
                          },
                          size: {
                            type: "uint64",
                            id: 6
                          },
                          audioId: {
                            type: "uint32",
                            id: 7
                          },
                          noRexcode: {
                            type: "bool",
                            id: 8
                          }
                        }
                      },
                      VideoType: {
                        values: {
                          Unknown: 0,
                          FLV: 1,
                          DASH: 2,
                          MP4: 3
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  };

  // src/io/grpc/BAPIMetadata/metadata.ts
  init_tampermonkey();
  var import_light2 = __toESM(require_light());

  // src/io/grpc/BAPIMetadata/metadata.json
  var metadata_default = {
    nested: {
      bilibili: {
        nested: {
          metadata: {
            nested: {
              Metadata: {
                fields: {
                  accessKey: {
                    type: "string",
                    id: 1
                  },
                  mobiApp: {
                    type: "string",
                    id: 2
                  },
                  device: {
                    type: "string",
                    id: 3
                  },
                  build: {
                    type: "int32",
                    id: 4
                  },
                  channel: {
                    type: "string",
                    id: 5
                  },
                  buvid: {
                    type: "string",
                    id: 6
                  },
                  platform: {
                    type: "string",
                    id: 7
                  }
                }
              }
            }
          },
          rpc: {
            nested: {
              Status: {
                fields: {
                  code: {
                    type: "int32",
                    id: 1
                  },
                  message: {
                    type: "string",
                    id: 2
                  },
                  details: {
                    rule: "repeated",
                    type: "google.protobuf.Any",
                    id: 3
                  }
                }
              }
            }
          }
        }
      },
      google: {
        nested: {
          protobuf: {
            nested: {
              Any: {
                fields: {
                  type_url: {
                    type: "string",
                    id: 1
                  },
                  value: {
                    type: "google.protobuf.RequestInfo",
                    id: 2
                  }
                }
              },
              RequestInfo: {
                fields: {
                  request_id: {
                    type: "int64",
                    id: 1
                  },
                  serving_data: {
                    type: "string",
                    id: 2
                  }
                }
              }
            }
          }
        }
      }
    }
  };

  // node_modules/fflate/esm/browser.js
  init_tampermonkey();
  var u8 = Uint8Array;
  var u16 = Uint16Array;
  var i32 = Int32Array;
  var fleb = new u8([
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    1,
    1,
    1,
    1,
    2,
    2,
    2,
    2,
    3,
    3,
    3,
    3,
    4,
    4,
    4,
    4,
    5,
    5,
    5,
    5,
    0,
    /* unused */
    0,
    0,
    /* impossible */
    0
  ]);
  var fdeb = new u8([
    0,
    0,
    0,
    0,
    1,
    1,
    2,
    2,
    3,
    3,
    4,
    4,
    5,
    5,
    6,
    6,
    7,
    7,
    8,
    8,
    9,
    9,
    10,
    10,
    11,
    11,
    12,
    12,
    13,
    13,
    /* unused */
    0,
    0
  ]);
  var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
  var freb = function(eb, start) {
    var b = new u16(31);
    for (var i = 0; i < 31; ++i) {
      b[i] = start += 1 << eb[i - 1];
    }
    var r = new i32(b[30]);
    for (var i = 1; i < 30; ++i) {
      for (var j = b[i]; j < b[i + 1]; ++j) {
        r[j] = j - b[i] << 5 | i;
      }
    }
    return { b, r };
  };
  var _a = freb(fleb, 2);
  var fl = _a.b;
  var revfl = _a.r;
  fl[28] = 258, revfl[258] = 28;
  var _b = freb(fdeb, 0);
  var fd = _b.b;
  var revfd = _b.r;
  var rev = new u16(32768);
  for (i = 0; i < 32768; ++i) {
    x = (i & 43690) >> 1 | (i & 21845) << 1;
    x = (x & 52428) >> 2 | (x & 13107) << 2;
    x = (x & 61680) >> 4 | (x & 3855) << 4;
    rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;
  }
  var x;
  var i;
  var hMap = function(cd, mb, r) {
    var s = cd.length;
    var i = 0;
    var l = new u16(mb);
    for (; i < s; ++i) {
      if (cd[i])
        ++l[cd[i] - 1];
    }
    var le = new u16(mb);
    for (i = 1; i < mb; ++i) {
      le[i] = le[i - 1] + l[i - 1] << 1;
    }
    var co;
    if (r) {
      co = new u16(1 << mb);
      var rvb = 15 - mb;
      for (i = 0; i < s; ++i) {
        if (cd[i]) {
          var sv = i << 4 | cd[i];
          var r_1 = mb - cd[i];
          var v = le[cd[i] - 1]++ << r_1;
          for (var m = v | (1 << r_1) - 1; v <= m; ++v) {
            co[rev[v] >> rvb] = sv;
          }
        }
      }
    } else {
      co = new u16(s);
      for (i = 0; i < s; ++i) {
        if (cd[i]) {
          co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i];
        }
      }
    }
    return co;
  };
  var flt = new u8(288);
  for (i = 0; i < 144; ++i)
    flt[i] = 8;
  var i;
  for (i = 144; i < 256; ++i)
    flt[i] = 9;
  var i;
  for (i = 256; i < 280; ++i)
    flt[i] = 7;
  var i;
  for (i = 280; i < 288; ++i)
    flt[i] = 8;
  var i;
  var fdt = new u8(32);
  for (i = 0; i < 32; ++i)
    fdt[i] = 5;
  var i;
  var flm = /* @__PURE__ */ hMap(flt, 9, 0);
  var flrm = /* @__PURE__ */ hMap(flt, 9, 1);
  var fdm = /* @__PURE__ */ hMap(fdt, 5, 0);
  var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);
  var max = function(a) {
    var m = a[0];
    for (var i = 1; i < a.length; ++i) {
      if (a[i] > m)
        m = a[i];
    }
    return m;
  };
  var bits = function(d, p, m) {
    var o = p / 8 | 0;
    return (d[o] | d[o + 1] << 8) >> (p & 7) & m;
  };
  var bits16 = function(d, p) {
    var o = p / 8 | 0;
    return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);
  };
  var shft = function(p) {
    return (p + 7) / 8 | 0;
  };
  var slc = function(v, s, e) {
    if (s == null || s < 0)
      s = 0;
    if (e == null || e > v.length)
      e = v.length;
    return new u8(v.subarray(s, e));
  };
  var ec = [
    "unexpected EOF",
    "invalid block type",
    "invalid length/literal",
    "invalid distance",
    "stream finished",
    "no stream handler",
    ,
    "no callback",
    "invalid UTF-8 data",
    "extra field too long",
    "date not in range 1980-2099",
    "filename too long",
    "stream finishing",
    "invalid zip data"
    // determined by unknown compression method
  ];
  var err = function(ind, msg, nt) {
    var e = new Error(msg || ec[ind]);
    e.code = ind;
    if (Error.captureStackTrace)
      Error.captureStackTrace(e, err);
    if (!nt)
      throw e;
    return e;
  };
  var inflt = function(dat, st, buf, dict) {
    var sl = dat.length, dl = dict ? dict.length : 0;
    if (!sl || st.f && !st.l)
      return buf || new u8(0);
    var noBuf = !buf;
    var resize = noBuf || st.i != 2;
    var noSt = st.i;
    if (noBuf)
      buf = new u8(sl * 3);
    var cbuf = function(l2) {
      var bl = buf.length;
      if (l2 > bl) {
        var nbuf = new u8(Math.max(bl * 2, l2));
        nbuf.set(buf);
        buf = nbuf;
      }
    };
    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
    var tbts = sl * 8;
    do {
      if (!lm) {
        final = bits(dat, pos, 1);
        var type = bits(dat, pos + 1, 3);
        pos += 3;
        if (!type) {
          var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;
          if (t > sl) {
            if (noSt)
              err(0);
            break;
          }
          if (resize)
            cbuf(bt + l);
          buf.set(dat.subarray(s, t), bt);
          st.b = bt += l, st.p = pos = t * 8, st.f = final;
          continue;
        } else if (type == 1)
          lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
        else if (type == 2) {
          var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
          var tl = hLit + bits(dat, pos + 5, 31) + 1;
          pos += 14;
          var ldt = new u8(tl);
          var clt = new u8(19);
          for (var i = 0; i < hcLen; ++i) {
            clt[clim[i]] = bits(dat, pos + i * 3, 7);
          }
          pos += hcLen * 3;
          var clb = max(clt), clbmsk = (1 << clb) - 1;
          var clm = hMap(clt, clb, 1);
          for (var i = 0; i < tl; ) {
            var r = clm[bits(dat, pos, clbmsk)];
            pos += r & 15;
            var s = r >> 4;
            if (s < 16) {
              ldt[i++] = s;
            } else {
              var c = 0, n = 0;
              if (s == 16)
                n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
              else if (s == 17)
                n = 3 + bits(dat, pos, 7), pos += 3;
              else if (s == 18)
                n = 11 + bits(dat, pos, 127), pos += 7;
              while (n--)
                ldt[i++] = c;
            }
          }
          var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
          lbt = max(lt);
          dbt = max(dt);
          lm = hMap(lt, lbt, 1);
          dm = hMap(dt, dbt, 1);
        } else
          err(1);
        if (pos > tbts) {
          if (noSt)
            err(0);
          break;
        }
      }
      if (resize)
        cbuf(bt + 131072);
      var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
      var lpos = pos;
      for (; ; lpos = pos) {
        var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
        pos += c & 15;
        if (pos > tbts) {
          if (noSt)
            err(0);
          break;
        }
        if (!c)
          err(2);
        if (sym < 256)
          buf[bt++] = sym;
        else if (sym == 256) {
          lpos = pos, lm = null;
          break;
        } else {
          var add = sym - 254;
          if (sym > 264) {
            var i = sym - 257, b = fleb[i];
            add = bits(dat, pos, (1 << b) - 1) + fl[i];
            pos += b;
          }
          var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
          if (!d)
            err(3);
          pos += d & 15;
          var dt = fd[dsym];
          if (dsym > 3) {
            var b = fdeb[dsym];
            dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
          }
          if (pos > tbts) {
            if (noSt)
              err(0);
            break;
          }
          if (resize)
            cbuf(bt + 131072);
          var end = bt + add;
          if (bt < dt) {
            var shift = dl - dt, dend = Math.min(dt, end);
            if (shift + bt < 0)
              err(3);
            for (; bt < dend; ++bt)
              buf[bt] = dict[shift + bt];
          }
          for (; bt < end; ++bt)
            buf[bt] = buf[bt - dt];
        }
      }
      st.l = lm, st.p = lpos, st.b = bt, st.f = final;
      if (lm)
        final = 1, st.m = lbt, st.d = dm, st.n = dbt;
    } while (!final);
    return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
  };
  var wbits = function(d, p, v) {
    v <<= p & 7;
    var o = p / 8 | 0;
    d[o] |= v;
    d[o + 1] |= v >> 8;
  };
  var wbits16 = function(d, p, v) {
    v <<= p & 7;
    var o = p / 8 | 0;
    d[o] |= v;
    d[o + 1] |= v >> 8;
    d[o + 2] |= v >> 16;
  };
  var hTree = function(d, mb) {
    var t = [];
    for (var i = 0; i < d.length; ++i) {
      if (d[i])
        t.push({ s: i, f: d[i] });
    }
    var s = t.length;
    var t2 = t.slice();
    if (!s)
      return { t: et, l: 0 };
    if (s == 1) {
      var v = new u8(t[0].s + 1);
      v[t[0].s] = 1;
      return { t: v, l: 1 };
    }
    t.sort(function(a, b) {
      return a.f - b.f;
    });
    t.push({ s: -1, f: 25001 });
    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;
    t[0] = { s: -1, f: l.f + r.f, l, r };
    while (i1 != s - 1) {
      l = t[t[i0].f < t[i2].f ? i0++ : i2++];
      r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];
      t[i1++] = { s: -1, f: l.f + r.f, l, r };
    }
    var maxSym = t2[0].s;
    for (var i = 1; i < s; ++i) {
      if (t2[i].s > maxSym)
        maxSym = t2[i].s;
    }
    var tr = new u16(maxSym + 1);
    var mbt = ln(t[i1 - 1], tr, 0);
    if (mbt > mb) {
      var i = 0, dt = 0;
      var lft = mbt - mb, cst = 1 << lft;
      t2.sort(function(a, b) {
        return tr[b.s] - tr[a.s] || a.f - b.f;
      });
      for (; i < s; ++i) {
        var i2_1 = t2[i].s;
        if (tr[i2_1] > mb) {
          dt += cst - (1 << mbt - tr[i2_1]);
          tr[i2_1] = mb;
        } else
          break;
      }
      dt >>= lft;
      while (dt > 0) {
        var i2_2 = t2[i].s;
        if (tr[i2_2] < mb)
          dt -= 1 << mb - tr[i2_2]++ - 1;
        else
          ++i;
      }
      for (; i >= 0 && dt; --i) {
        var i2_3 = t2[i].s;
        if (tr[i2_3] == mb) {
          --tr[i2_3];
          ++dt;
        }
      }
      mbt = mb;
    }
    return { t: new u8(tr), l: mbt };
  };
  var ln = function(n, l, d) {
    return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;
  };
  var lc = function(c) {
    var s = c.length;
    while (s && !c[--s])
      ;
    var cl = new u16(++s);
    var cli = 0, cln = c[0], cls = 1;
    var w = function(v) {
      cl[cli++] = v;
    };
    for (var i = 1; i <= s; ++i) {
      if (c[i] == cln && i != s)
        ++cls;
      else {
        if (!cln && cls > 2) {
          for (; cls > 138; cls -= 138)
            w(32754);
          if (cls > 2) {
            w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);
            cls = 0;
          }
        } else if (cls > 3) {
          w(cln), --cls;
          for (; cls > 6; cls -= 6)
            w(8304);
          if (cls > 2)
            w(cls - 3 << 5 | 8208), cls = 0;
        }
        while (cls--)
          w(cln);
        cls = 1;
        cln = c[i];
      }
    }
    return { c: cl.subarray(0, cli), n: s };
  };
  var clen = function(cf, cl) {
    var l = 0;
    for (var i = 0; i < cl.length; ++i)
      l += cf[i] * cl[i];
    return l;
  };
  var wfblk = function(out, pos, dat) {
    var s = dat.length;
    var o = shft(pos + 2);
    out[o] = s & 255;
    out[o + 1] = s >> 8;
    out[o + 2] = out[o] ^ 255;
    out[o + 3] = out[o + 1] ^ 255;
    for (var i = 0; i < s; ++i)
      out[o + i + 4] = dat[i];
    return (o + 4 + s) * 8;
  };
  var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
    wbits(out, p++, final);
    ++lf[256];
    var _a3 = hTree(lf, 15), dlt = _a3.t, mlb = _a3.l;
    var _b2 = hTree(df, 15), ddt = _b2.t, mdb = _b2.l;
    var _c = lc(dlt), lclt = _c.c, nlc = _c.n;
    var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;
    var lcfreq = new u16(19);
    for (var i = 0; i < lclt.length; ++i)
      ++lcfreq[lclt[i] & 31];
    for (var i = 0; i < lcdt.length; ++i)
      ++lcfreq[lcdt[i] & 31];
    var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;
    var nlcc = 19;
    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)
      ;
    var flen = bl + 5 << 3;
    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;
    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];
    if (bs >= 0 && flen <= ftlen && flen <= dtlen)
      return wfblk(out, p, dat.subarray(bs, bs + bl));
    var lm, ll, dm, dl;
    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;
    if (dtlen < ftlen) {
      lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;
      var llm = hMap(lct, mlcb, 0);
      wbits(out, p, nlc - 257);
      wbits(out, p + 5, ndc - 1);
      wbits(out, p + 10, nlcc - 4);
      p += 14;
      for (var i = 0; i < nlcc; ++i)
        wbits(out, p + 3 * i, lct[clim[i]]);
      p += 3 * nlcc;
      var lcts = [lclt, lcdt];
      for (var it = 0; it < 2; ++it) {
        var clct = lcts[it];
        for (var i = 0; i < clct.length; ++i) {
          var len = clct[i] & 31;
          wbits(out, p, llm[len]), p += lct[len];
          if (len > 15)
            wbits(out, p, clct[i] >> 5 & 127), p += clct[i] >> 12;
        }
      }
    } else {
      lm = flm, ll = flt, dm = fdm, dl = fdt;
    }
    for (var i = 0; i < li; ++i) {
      var sym = syms[i];
      if (sym > 255) {
        var len = sym >> 18 & 31;
        wbits16(out, p, lm[len + 257]), p += ll[len + 257];
        if (len > 7)
          wbits(out, p, sym >> 23 & 31), p += fleb[len];
        var dst = sym & 31;
        wbits16(out, p, dm[dst]), p += dl[dst];
        if (dst > 3)
          wbits16(out, p, sym >> 5 & 8191), p += fdeb[dst];
      } else {
        wbits16(out, p, lm[sym]), p += ll[sym];
      }
    }
    wbits16(out, p, lm[256]);
    return p + ll[256];
  };
  var deo = /* @__PURE__ */ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);
  var et = /* @__PURE__ */ new u8(0);
  var dflt = function(dat, lvl, plvl, pre, post, st) {
    var s = st.z || dat.length;
    var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);
    var w = o.subarray(pre, o.length - post);
    var lst = st.l;
    var pos = (st.r || 0) & 7;
    if (lvl) {
      if (pos)
        w[0] = st.r >> 3;
      var opt = deo[lvl - 1];
      var n = opt >> 13, c = opt & 8191;
      var msk_1 = (1 << plvl) - 1;
      var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);
      var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;
      var hsh = function(i2) {
        return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;
      };
      var syms = new i32(25e3);
      var lf = new u16(288), df = new u16(32);
      var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;
      for (; i + 2 < s; ++i) {
        var hv = hsh(i);
        var imod = i & 32767, pimod = head[hv];
        prev[imod] = pimod;
        head[hv] = imod;
        if (wi <= i) {
          var rem = s - i;
          if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) {
            pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);
            li = lc_1 = eb = 0, bs = i;
            for (var j = 0; j < 286; ++j)
              lf[j] = 0;
            for (var j = 0; j < 30; ++j)
              df[j] = 0;
          }
          var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;
          if (rem > 2 && hv == hsh(i - dif)) {
            var maxn = Math.min(n, rem) - 1;
            var maxd = Math.min(32767, i);
            var ml = Math.min(258, rem);
            while (dif <= maxd && --ch_1 && imod != pimod) {
              if (dat[i + l] == dat[i + l - dif]) {
                var nl = 0;
                for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)
                  ;
                if (nl > l) {
                  l = nl, d = dif;
                  if (nl > maxn)
                    break;
                  var mmd = Math.min(dif, nl - 2);
                  var md = 0;
                  for (var j = 0; j < mmd; ++j) {
                    var ti = i - dif + j & 32767;
                    var pti = prev[ti];
                    var cd = ti - pti & 32767;
                    if (cd > md)
                      md = cd, pimod = ti;
                  }
                }
              }
              imod = pimod, pimod = prev[imod];
              dif += imod - pimod & 32767;
            }
          }
          if (d) {
            syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];
            var lin = revfl[l] & 31, din = revfd[d] & 31;
            eb += fleb[lin] + fdeb[din];
            ++lf[257 + lin];
            ++df[din];
            wi = i + l;
            ++lc_1;
          } else {
            syms[li++] = dat[i];
            ++lf[dat[i]];
          }
        }
      }
      for (i = Math.max(i, wi); i < s; ++i) {
        syms[li++] = dat[i];
        ++lf[dat[i]];
      }
      pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);
      if (!lst) {
        st.r = pos & 7 | w[pos / 8 | 0] << 3;
        pos -= 7;
        st.h = head, st.p = prev, st.i = i, st.w = wi;
      }
    } else {
      for (var i = st.w || 0; i < s + lst; i += 65535) {
        var e = i + 65535;
        if (e >= s) {
          w[pos / 8 | 0] = lst;
          e = s;
        }
        pos = wfblk(w, pos + 1, dat.subarray(i, e));
      }
      st.i = s;
    }
    return slc(o, 0, pre + shft(pos) + post);
  };
  var crct = /* @__PURE__ */ function() {
    var t = new Int32Array(256);
    for (var i = 0; i < 256; ++i) {
      var c = i, k = 9;
      while (--k)
        c = (c & 1 && -306674912) ^ c >>> 1;
      t[i] = c;
    }
    return t;
  }();
  var crc = function() {
    var c = -1;
    return {
      p: function(d) {
        var cr = c;
        for (var i = 0; i < d.length; ++i)
          cr = crct[cr & 255 ^ d[i]] ^ cr >>> 8;
        c = cr;
      },
      d: function() {
        return ~c;
      }
    };
  };
  var dopt = function(dat, opt, pre, post, st) {
    if (!st) {
      st = { l: 1 };
      if (opt.dictionary) {
        var dict = opt.dictionary.subarray(-32768);
        var newDat = new u8(dict.length + dat.length);
        newDat.set(dict);
        newDat.set(dat, dict.length);
        dat = newDat;
        st.w = dict.length;
      }
    }
    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, st);
  };
  var wbytes = function(d, b, v) {
    for (; v; ++b)
      d[b] = v, v >>>= 8;
  };
  var gzh = function(c, o) {
    var fn = o.filename;
    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3;
    if (o.mtime != 0)
      wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1e3));
    if (fn) {
      c[3] = 8;
      for (var i = 0; i <= fn.length; ++i)
        c[i + 10] = fn.charCodeAt(i);
    }
  };
  var gzs = function(d) {
    if (d[0] != 31 || d[1] != 139 || d[2] != 8)
      err(6, "invalid gzip data");
    var flg = d[3];
    var st = 10;
    if (flg & 4)
      st += (d[10] | d[11] << 8) + 2;
    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])
      ;
    return st + (flg & 2);
  };
  var gzl = function(d) {
    var l = d.length;
    return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;
  };
  var gzhl = function(o) {
    return 10 + (o.filename ? o.filename.length + 1 : 0);
  };
  function gzipSync(data, opts) {
    if (!opts)
      opts = {};
    var c = crc(), l = data.length;
    c.p(data);
    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;
    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;
  }
  function gunzipSync(data, opts) {
    var st = gzs(data);
    if (st + 8 > data.length)
      err(6, "invalid gzip data");
    return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);
  }
  var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
  var tds = 0;
  try {
    td.decode(et, { stream: true });
    tds = 1;
  } catch (e) {
  }

  // src/io/grpc/BAPIMetadata/metadata.ts
  var BAPIMetadata = class _BAPIMetadata {
    constructor(accessKey) {
      this.accessKey = accessKey;
      _BAPIMetadata.Root || _BAPIMetadata.RootInit();
      accessKey && (this.metadata.accessKey = accessKey);
    }
    /** 命名空间 */
    static Root;
    /** Type<Metadata> */
    static metadata;
    /** Type<Status> */
    static status;
    /** 初始化命名空间及Type */
    static RootInit() {
      this.Root = import_light2.Root.fromJSON(metadata_default);
      this.metadata = this.Root.lookupType("Metadata");
      this.status = this.Root.lookupType("bilibili.rpc.Status");
    }
    /** grpc app host */
    hostAPP = "//app.bilibili.com";
    /** grpc host */
    hostGrpc = "//grpc.biliapi.net";
    /** 默认metadata */
    metadata = {
      buvid: "5848738A7B27474C9C407F25701EFAC28527C",
      build: 7220300,
      // channel: 'bilibili',
      mobiApp: "iphone",
      platform: "ios"
      // device: 'phone'
    };
    /** Base64化metadata */
    get metadataBase64() {
      return base64.encodeFromUint8Array(_BAPIMetadata.metadata.encode(_BAPIMetadata.metadata.fromObject(this.metadata)).finish());
    }
    /**
     * 发起grpc请求  
     * - T 用于序列化请求参数的Type类型  
     * - K 用于反序列化返回值的Type类型
     * @param method 请求方法名
     * @param repType 用于序列化请求参数的Type名
     * @param replyType 用于反序列化返回值的Type名
     * @param req 序列化前的请求参数
     * @returns 请求返回值
     */
    async request(method, repType, replyType, req) {
      const typeReq = this.lookupType(repType);
      const typeReply = this.lookupType(replyType);
      const body = gzipSync(typeReq.encode(typeReq.fromObject(req)).finish());
      const buffer = new ArrayBuffer(body.length + 5);
      const dataview = new DataView(buffer);
      dataview.setUint32(1, body.length);
      const uInt8 = new Uint8Array(buffer);
      uInt8[0] = 1;
      uInt8.set(body, 5);
      const headers = {
        "Content-Type": "application/grpc",
        "x-bili-metadata-bin": this.metadataBase64,
        "user-agent": "Bilibili Freedoooooom/MarkII",
        "referer": "",
        "grpc-encoding": "gzip",
        "grpc-accept-encoding": "identify,gzip",
        "grpc-timeout": "17989265u"
        // 1680058967939
      };
      this.accessKey && (headers.authorization = \`identify_v1 \${this.accessKey}\`);
      const response = await GM.fetch(\`\${this.hostAPP}/\${this.package}.\${this.service}/\${method}\`, {
        method: "POST",
        headers,
        body: buffer
      }, void 0, {
        "Access-Control-Expose-Headers": "grpc-status,grpc-message,grpc-status-details-bin,grpc-encoding"
      });
      if (response.headers.has("grpc-status-details-bin")) {
        const bin = response.headers.get("grpc-status-details-bin");
        const uInt82 = base64.decodeToUint8Array(bin);
        const details = _BAPIMetadata.status.toObject(_BAPIMetadata.status.decode(uInt82));
        if (details.details && details.details.length) {
          throw details.details[0].value;
        }
        throw details;
      } else if (response.headers.has("grpc-message")) {
        throw response.headers.get("grpc-message");
      }
      const arraybuffer = await response.arrayBuffer();
      const uint8Array = new Uint8Array(arraybuffer.slice(5));
      if (response.headers.get("grpc-encoding") === "gzip") {
        return typeReply.toObject(typeReply.decode(gunzipSync(uint8Array)));
      }
      return typeReply.toObject(typeReply.decode(uint8Array));
    }
  };

  // src/io/grpc/BAPIAppPlayurl/v1/playurl.ts
  var BAPIAppPlayurlV1 = class _BAPIAppPlayurlV1 extends BAPIMetadata {
    constructor(accessKey) {
      super(accessKey);
      this.accessKey = accessKey;
      _BAPIAppPlayurlV1.Root || (_BAPIAppPlayurlV1.Root = import_light3.Root.fromJSON(playurl_default));
    }
    /** 命名空间 */
    static Root;
    package = "bilibili.app.playurl.v1";
    service = "PlayURL";
    lookupType(type) {
      return _BAPIAppPlayurlV1.Root.lookupType(\`\${this.package}.\${type}\`);
    }
    /** 获取播放地址 */
    PlayURL(req) {
      return this.request(
        "PlayURL",
        "PlayURLReq",
        "PlayURLReply",
        Object.assign({
          qn,
          fnval,
          fnver,
          forceHost: 2
        }, req)
      );
    }
    /** 获取投屏地址 */
    Project(req) {
      return this.request(
        "Project",
        "ProjectReq",
        "ProjectReply",
        Object.assign({
          qn,
          fnval,
          fnver,
          forceHost: 2,
          protocol: 0,
          deviceType: 0
        }, req)
      );
    }
    /** 获取播放地址和云控配置信息 */
    PlayView(req) {
      return this.request(
        "PlayView",
        "PlayViewReq",
        "PlayViewReply",
        Object.assign({
          qn,
          fnval,
          fnver,
          forceHost: 2
        }, req)
      );
    }
  };

  // src/core/download/aria2.ts
  init_tampermonkey();

  // src/utils/mutex.ts
  init_tampermonkey();
  function getMetux() {
    return Math.random().toString(36).substring(2);
  }

  // src/core/download/aria2.ts
  var Aria2 = class {
    constructor(userAgent, referer, dir, server = "http://localhost", port = 6800, token, split, size) {
      this.userAgent = userAgent;
      this.referer = referer;
      this.dir = dir;
      this.server = server;
      this.port = port;
      this.token = token;
      this.split = split;
      this.size = size;
    }
    get url() {
      return \`\${this.server}:\${this.port}/jsonrpc\`;
    }
    /** 命令行 */
    cmdlet(data) {
      const arr2 = ["aria2c"];
      data.urls.forEach((d) => arr2.push(\`"\${d}"\`));
      data.out && arr2.push(\`--out="\${data.out}"\`);
      (data.userAgent || this.userAgent) && arr2.push(\`--user-agent="\${data.userAgent || this.userAgent}"\`);
      (data.referer || this.referer) && arr2.push(\`--referer="\${data.referer || this.referer}"\`);
      (data.dir || this.dir) && arr2.push(\`--dir="\${data.dir || this.dir}"\`);
      (data.split || this.split) && arr2.push(\`--split="\${data.split || this.split}"\`, \`--max-connection-per-server="\${data.split || this.split}"\`);
      (data.size || this.size) && arr2.push(\`--min-split-size="\${data.size || this.size}M"\`);
      data.header && Object.entries(data.header).forEach((d) => arr2.push(\`--header="\${d[0]}: \${d[1]}"\`));
      return navigator.clipboard.writeText(arr2.join(" "));
    }
    /** RPC */
    rpc(data) {
      const options = {};
      data.out && (options.out = data.out);
      (data.userAgent || this.userAgent) && (options["user-agent"] = data.userAgent || this.userAgent);
      (data.referer || this.referer) && (options.referer = data.referer || this.referer);
      (data.dir || this.dir) && (options.dir = data.dir || this.dir);
      (data.split || this.split) && (options.split = options["max-connection-per-server"] = data.split || this.split);
      (data.size || this.size) && (options["min-split-size"] = \`\${data.size || this.size}M\`);
      data.header && (options.header = data.header);
      return this.postMessage("aria2.addUri", data.id, [data.urls, options]);
    }
    /** 获取aria2配置信息 */
    getVersion() {
      return this.postMessage("aria2.getVersion");
    }
    postMessage(method, id = getMetux(), params = []) {
      this.token && params.unshift(\`token:\${this.token}\`);
      return new Promise((r, j) => {
        fetch(this.url, {
          method: "POST",
          body: JSON.stringify({ method, id, params }),
          headers: {
            "Content-Type": "application/json"
          }
        }).then((d) => d.json()).then((d) => {
          d.error && j(d.error);
          d.result && r(d.result);
        }).catch((e) => {
          fetch(objUrl(this.url, { method, id, params: base64.encode(JSON.stringify(params)) })).then((d) => d.json()).then((d) => {
            d.error && j(d.error);
            d.result && r(d.result);
          }).catch(() => {
            j(e);
          });
        });
      });
    }
  };

  // src/core/download/curl.ts
  init_tampermonkey();
  var Curl = class {
    constructor(userAgent, referer, dir) {
      this.userAgent = userAgent;
      this.referer = referer;
      this.dir = dir;
    }
    /** 命令行 */
    cmdlet(data) {
      const arr2 = ["curl", "-C", "-", \`"\${data.url}"\`];
      data.out && arr2.push("-o", \`"\${data.out}"\`);
      (data.userAgent || this.userAgent) && arr2.push("--user-agent", \`"\${data.userAgent || this.userAgent}"\`);
      (data.referer || this.referer) && arr2.push("--referer", \`"\${data.referer || this.referer}"\`);
      (data.dir || this.dir) && arr2.push("--output-dir", \`"\${data.dir || this.dir}"\`);
      data.header && Object.entries(data.header).forEach((d) => arr2.push("-H", \`"\${d[0]}: \${d[1]}"\`));
      return navigator.clipboard.writeText(arr2.join(" "));
    }
  };

  // src/core/download/ef2.ts
  init_tampermonkey();
  var Ef2 = class _Ef2 {
    constructor(userAgent, referer, dir, delay = false, silence = false) {
      this.userAgent = userAgent;
      this.referer = referer;
      this.dir = dir;
      this.delay = delay;
      this.silence = silence;
    }
    /** 拉起IDM */
    sendLinkToIDM(data) {
      this.rebuildData(data);
      const ef2str = _Ef2.encode(data);
      const a = document.createElement("a");
      a.href = ef2str;
      a.click();
      return ef2str;
    }
    /** 生成ef2文件 */
    file(data, fileName) {
      this.rebuildData(data);
      return _Ef2.file([data], fileName);
    }
    /** 补全数据 */
    rebuildData(data) {
      this.userAgent && !data.userAgent && (data.userAgent = this.userAgent);
      this.referer && !data.referer && (data.referer = this.referer);
      this.dir && !data.dir && (data.dir = this.dir);
      this.delay && !data.delay && (data.delay = this.delay);
      this.silence && !data.silence && (data.silence = this.silence);
    }
    /** 生成ef2文件 */
    static file(data, fileName) {
      const result = [];
      data.forEach((d) => {
        const arr2 = ["<", "", "", "", ""];
        Object.entries(d).forEach((d2) => {
          switch (d2[0]) {
            case "cookie":
              arr2[4] = \`cookie: \${d2[1]}\`;
              break;
            case "delay":
              break;
            case "dir":
              d2[1] = d2[1].replace(/\\//, "\\\\");
              d2[1].endsWith("\\\\") && (d2[1] = d2[1].slice(0, -1));
              arr2.push(\`filepath: \${d2[1]}\`);
              break;
            case "out":
              arr2.push(\`filename: \${d2[1]}\`);
              break;
            case "password":
              arr2.push(\`password: \${d2[1]}\`);
              break;
            case "body":
              arr2.push(\`postdata: \${d2[1]}\`);
              break;
            case "referer":
              arr2[2] = \`referer: \${d2[1]}\`;
              break;
            case "silence":
              break;
            case "url":
              d2[1].startsWith("//") && (d2[1] = "https:" + d2[1]);
              arr2[1] = d2[1];
              break;
            case "userAgent":
              arr2[3] = \`User-Agent: \${d2[1]}\`;
              break;
            case "userName":
              arr2.push(\`username: \${d2[1]}\`);
              break;
            default:
              break;
          }
        });
        arr2.push(">");
        arr2.forEach((d2) => {
          d2 && result.push(d2);
        });
      });
      result.push("");
      saveAs(result.join("\\r\\n"), fileName || \`\${data[0].out || getMetux()}.ef2\`);
    }
    /** 生成ef2协议 */
    static encode(data) {
      const arr2 = [];
      Object.entries(data).forEach((d) => {
        typeof d[1] === "string" && d[1].startsWith('"') || (d[1] = \`"\${d[1]}"\`);
        switch (d[0]) {
          case "cookie":
            arr2.push("-c", d[1]);
            break;
          case "delay":
            arr2.push("-q");
            break;
          case "dir":
            d[1] = d[1].replace(/\\//, "\\\\");
            d[1].endsWith("\\\\") && (d[1] = d[1].slice(0, -1));
            arr2.push("-o", d[1]);
            break;
          case "out":
            arr2.push("-s", d[1]);
            break;
          case "password":
            arr2.push("-P", d[1]);
            break;
          case "body":
            arr2.push("-d", d[1]);
            break;
          case "referer":
            arr2.push("-r", d[1]);
            break;
          case "silence":
            arr2.push("-f");
            break;
          case "url":
            d[1].startsWith("//") && (d[1] = "https:" + d[1]);
            arr2.push("-u", d[1]);
            break;
          case "userAgent":
            arr2.push("-a", d[1]);
            break;
          case "userName":
            arr2.push("-U", d[1]);
            break;
          default:
            break;
        }
      });
      return \`ef2://\${base64.encode(arr2.join(" "))}\`;
    }
    /** 解码ef2协议 */
    static decode(ef2str) {
      ef2str = ef2str.replace("ef2://", "");
      ef2str = base64.decode(ef2str);
      const arr2 = ef2str.split(" ");
      const data = {};
      for (let i = 0; i < arr2.length; i++) {
        if (/-\\w/.test(arr2[i])) {
          switch (arr2[i]) {
            case "-c":
              data.cookie = arr2[i + 1];
              i++;
              break;
            case "-q":
              data.delay = true;
              break;
            case "-o":
              data.dir = arr2[i + 1];
              i++;
              break;
            case "-s":
              data.out = arr2[i + 1];
              i++;
              break;
            case "-P":
              data.password = arr2[i + 1];
              i++;
              break;
            case "-d":
              data.body = arr2[i + 1];
              i++;
              break;
            case "-r":
              data.referer = arr2[i + 1];
              i++;
              break;
            case "-f":
              data.silence = true;
              break;
            case "-u":
              data.url = arr2[i + 1];
              i++;
              break;
            case "-a":
              data.userAgent = arr2[i + 1];
              i++;
              break;
            case "-U":
              data.userName = arr2[i + 1];
              i++;
              break;
            default:
              break;
          }
        }
      }
      return data;
    }
  };

  // src/core/download/playinfo.ts
  init_tampermonkey();
  var PlayinfoFilter = class {
    constructor(fileName) {
      this.fileName = fileName;
    }
    /** 数据 */
    record = [];
    /** id => 质量 */
    quality = {
      100032: "8K",
      100029: "4K",
      100028: "1080P60",
      100027: "1080P+",
      100026: "1080P",
      100024: "720P",
      100023: "480P",
      100022: "360P",
      30280: "320Kbps",
      30260: "320Kbps",
      30259: "128Kbps",
      30257: "64Kbps",
      30255: "AUDIO",
      30251: "FLAC",
      30250: "ATMOS",
      30232: "128Kbps",
      30216: "64Kbps",
      30127: "8K",
      30126: "Dolby",
      30125: "HDR",
      30121: "4K",
      30120: "4K",
      30116: "1080P60",
      30112: "1080P+",
      30106: "1080P60",
      30102: "1080P+",
      30080: "1080P",
      30077: "1080P",
      30076: "720P",
      30074: "720P",
      30066: "720P",
      30064: "720P",
      30048: "720P",
      30033: "480P",
      30032: "480P",
      30016: "360P",
      30015: "360P",
      30011: "360P",
      464: "预览",
      336: "1080P",
      320: "720P",
      288: "480P",
      272: "360P",
      208: "1080P",
      192: "720P",
      160: "480P",
      127: "8K",
      126: "Dolby",
      125: "HDR",
      120: "4K",
      116: "1080P60",
      112: "1080P+",
      80: "1080P",
      74: "720P60",
      64: "720P",
      48: "720P",
      32: "480P",
      16: "360P",
      15: "360P",
      6: "240P",
      5: "144P"
    };
    /** id => 类型(备用方案) */
    codec = {
      hev: [30127, 30126, 30125, 30121, 30106, 30102, 30077, 30066, 30033, 30011],
      avc: [30120, 30112, 30080, 30064, 30032, 30016],
      av1: [100029, 100028, 100027, 100026, 100024, 100023, 100022]
    };
    /** 颜色表 */
    color = {
      "8K": "yellow",
      "Dolby": "pink",
      "FLAC": "pink",
      "ATMOS": "pink",
      "AUDIO": "pink",
      "HDR": "purple",
      "4K": "purple",
      "1080P60": "red",
      "1080P+": "red",
      "1080P": "red",
      "720P60": "orange",
      "720P": "orange",
      "480P": "blue",
      "360P": "green",
      "320Kbps": "red",
      "128Kbps": "blue",
      "64Kbps": "green"
    };
    /**
     * 解码playurl的下载数据
     * @param playinfo playurl返回值(json)
     */
    filter(playinfo) {
      typeof playinfo === "string" && (playinfo = toObject(playinfo));
      if (playinfo) {
        playinfo.data && this.filter(playinfo.data);
        playinfo.result && this.filter(playinfo.result);
        playinfo.durl && this.durl(playinfo.durl);
        playinfo.dash && this.dash(playinfo.dash);
      }
      return this.record;
    }
    /**
     * 整理durl部分
     * @param durl durl信息
     */
    durl(durl) {
      durl.forEach((d) => {
        const url = d.backupUrl || d.backup_url || [];
        url.unshift(d.url);
        const qua = this.getQuality(url[0], d.id);
        const link = {
          type: "",
          url,
          quality: qua,
          size: sizeFormat(d.size),
          color: this.color[qua] || ""
        };
        switch (d.url.includes("mp4?")) {
          case true:
            link.type = "mp4";
            break;
          case false:
            link.type = "flv";
            link.order = d.order;
            break;
        }
        this.fileName && (link.fileName = \`\${this.fileName}\${qua}.\${link.type}\`);
        this.record.push(link);
      });
    }
    /**
     * 整理dash部分
     * @param dash dash信息
     */
    dash(dash) {
      dash.video && this.dashVideo(dash.video, dash.duration);
      dash.audio && this.dashAudio(dash.audio, dash.duration);
      dash.dolby && dash.dolby.audio && Array.isArray(dash.dolby.audio) && this.dashAudio(dash.dolby.audio, dash.duration);
      dash.flac && dash.flac.audio && this.dashAudio([dash.flac.audio], dash.duration, ".flac");
    }
    /**
     * 整理dash视频部分
     * @param video dash视频信息
     * @param duration duration信息,配合bandwidth能计算出文件大小
     */
    dashVideo(video, duration) {
      video.forEach((d) => {
        const url = d.backupUrl || d.backup_url || [];
        (d.baseUrl || d.base_url) && url.unshift(d.baseUrl || d.base_url);
        if (!url.length)
          return;
        let type = "";
        if (d.codecs) {
          type = d.codecs.includes("avc") ? "avc" : d.codecs.includes("av01") ? "av1" : "hev";
        } else {
          const id = this.getID(url[0]);
          type = this.codec.hev.find((d2) => d2 === id) ? "hev" : "avc";
        }
        const qua = this.getQuality(url[0], d.id);
        this.record.push({
          type,
          url,
          quality: qua,
          size: sizeFormat(d.bandwidth * duration / 8),
          color: this.color[qua] || "",
          fileName: \`\${this.fileName}\${qua}.m4v\`
        });
      });
    }
    /**
     * 整理dash音频部分
     * @param audio dash音频信息
     * @param duration duration信息,配合bandwidth能计算出文件大小
     * @param fmt 音频拓展名,默认\`.m4a\`
     */
    dashAudio(audio, duration, fmt = ".m4a") {
      audio.forEach((d) => {
        const url = d.backupUrl || d.backup_url || [];
        (d.baseUrl || d.base_url) && url.unshift(d.baseUrl || d.base_url);
        const qua = this.getQuality(url[0], d.id);
        url.length && this.record.push({
          type: "aac",
          url,
          quality: qua,
          size: sizeFormat(d.bandwidth * duration / 8),
          color: this.color[qua] || "",
          fileName: \`\${this.fileName}\${qua}.\${fmt}\`
        });
      });
    }
    /**
     * 根据url确定画质/音质信息  
     * 需要维护quality表
     * @param url 多媒体url
     * @param id 媒体流id
     * @returns 画质/音质信息
     */
    getQuality(url, id) {
      return this.quality[this.getID(url)] || id && this.quality[id] || "N/A";
    }
    /**
     * 从url中提取可能的id
     * @param url 多媒体url
     */
    getID(url) {
      let id = 0;
      url.replace(/\\d+\\.((flv)|(mp4)|(m4s))/, (d) => id = Number(d.split(".")[0]));
      return id;
    }
  };

  // src/core/observer.ts
  init_tampermonkey();
  var nodelist = [];
  var observe = new MutationObserver(async (d) => d.forEach((d2) => {
    d2.addedNodes[0] && nodelist.forEach((f) => {
      try {
        f(d2.addedNodes[0]);
      } catch (e) {
        debug.error("MutationObserver", e);
      }
    });
  }));
  observe.observe(document, { childList: true, subtree: true });
  function observerAddedNodes(callback) {
    try {
      if (typeof callback === "function")
        nodelist.push(callback);
      return nodelist.length - 1;
    } catch (e) {
      debug.error(e);
    }
  }
  var switchlist = [];
  function switchVideo(callback) {
    try {
      if (typeof callback === "function")
        switchlist.push(callback);
    } catch (e) {
      debug.error("switchVideo", e);
    }
  }
  observerAddedNodes((node) => {
    if (/video-state-pause/.test(node.className)) {
      switchlist.forEach(async (d) => {
        try {
          d();
        } catch (e) {
          debug.error(d);
        }
      });
    }
  });

  // src/core/ui/download.ts
  init_tampermonkey();

  // src/html/download.html
  var download_default = '<div class="table"></div>\\r\\n<style type="text/css">\\r\\n    .table {\\r\\n        position: fixed;\\r\\n        z-index: 11113;\\r\\n        bottom: 0;\\r\\n        width: 100%;\\r\\n        min-height: 50px;\\r\\n        display: flex;\\r\\n        box-sizing: border-box;\\r\\n        background: #fff;\\r\\n        border-radius: 8px;\\r\\n        box-shadow: 0 6px 12px 0 rgba(106, 115, 133, 22%);\\r\\n        transition: transform 0.3s ease-in;\\r\\n        flex-wrap: wrap;\\r\\n        align-content: center;\\r\\n        justify-content: center;\\r\\n        align-items: center;\\r\\n    }\\r\\n\\r\\n    .cell {\\r\\n        background-color: #fff;\\r\\n        color: #000 !important;\\r\\n        border: #ccc 1px solid;\\r\\n        border-radius: 3px;\\r\\n        display: flex;\\r\\n        margin: 3px;\\r\\n        flex-wrap: wrap;\\r\\n        align-content: center;\\r\\n        justify-content: center;\\r\\n        align-items: center;\\r\\n        flex-direction: row;\\r\\n    }\\r\\n\\r\\n    .type {\\r\\n        color: #000 !important;\\r\\n        display: table-cell;\\r\\n        min-width: 1.5em;\\r\\n        text-align: center;\\r\\n        vertical-align: middle;\\r\\n        padding: 10px 3px;\\r\\n    }\\r\\n\\r\\n    .type.mp4 {\\r\\n        background-color: #e0e;\\r\\n    }\\r\\n\\r\\n    .type.av1 {\\r\\n        background-color: #feb;\\r\\n    }\\r\\n\\r\\n    .type.avc {\\r\\n        background-color: #07e;\\r\\n    }\\r\\n\\r\\n    .type.hev {\\r\\n        background-color: #7ba;\\r\\n    }\\r\\n\\r\\n    .type.aac {\\r\\n        background-color: #0d0;\\r\\n    }\\r\\n\\r\\n    .type.flv {\\r\\n        background-color: #0dd;\\r\\n    }\\r\\n\\r\\n    .item {\\r\\n        display: table-cell;\\r\\n        text-decoration: none;\\r\\n        padding: 3px;\\r\\n        cursor: pointer;\\r\\n        color: #1184B4;\\r\\n    }\\r\\n\\r\\n    .item:hover {\\r\\n        color: #FE3676;\\r\\n    }\\r\\n\\r\\n    .up {\\r\\n        color: #fff !important;\\r\\n        text-align: center;\\r\\n        padding: 1px 3px;\\r\\n        background-color: #777;\\r\\n    }\\r\\n\\r\\n    .up.yellow {\\r\\n        background-color: #ffe42b;\\r\\n        background-image: linear-gradient(to right, #ffe42b, #dfb200);\\r\\n    }\\r\\n\\r\\n    .up.pink {\\r\\n        background-color: #ffafc9;\\r\\n        background-image: linear-gradient(to right, #ffafc9, #dfada7);\\r\\n    }\\r\\n\\r\\n    .up.purple {\\r\\n        background-color: #c0f;\\r\\n        background-image: linear-gradient(to right, #c0f, #90f);\\r\\n    }\\r\\n\\r\\n    .up.red {\\r\\n        background-color: #f00;\\r\\n        background-image: linear-gradient(to right, #f00, #c00);\\r\\n    }\\r\\n\\r\\n    .up.orange {\\r\\n        background-color: #f90;\\r\\n        background-image: linear-gradient(to right, #f90, #d70);\\r\\n    }\\r\\n\\r\\n    .up.blue {\\r\\n        background-color: #00d;\\r\\n        background-image: linear-gradient(to right, #00d, #00b);\\r\\n    }\\r\\n\\r\\n    .up.green {\\r\\n        background-color: #0d0;\\r\\n        background-image: linear-gradient(to right, #0d0, #0b0);\\r\\n    }\\r\\n\\r\\n    .up.lv9 {\\r\\n        background-color: #151515;\\r\\n        background-image: linear-gradient(to right, #151515, #030303);\\r\\n    }\\r\\n\\r\\n    .up.lv8 {\\r\\n        background-color: #841cf9;\\r\\n        background-image: linear-gradient(to right, #841cf9, #620ad7);\\r\\n    }\\r\\n\\r\\n    .up.lv7 {\\r\\n        background-color: #e52fec;\\r\\n        background-image: linear-gradient(to right, #e52fec, #c30dca);\\r\\n    }\\r\\n\\r\\n    .up.lv6 {\\r\\n        background-color: #ff0000;\\r\\n        background-image: linear-gradient(to right, #ff0000, #dd0000);\\r\\n    }\\r\\n\\r\\n    .up.lv5 {\\r\\n        background-color: #ff6c00;\\r\\n        background-image: linear-gradient(to right, #ff6c00, #dd4a00);\\r\\n    }\\r\\n\\r\\n    .up.lv4 {\\r\\n        background-color: #ffb37c;\\r\\n        background-image: linear-gradient(to right, #ffb37c, #dd915a);\\r\\n    }\\r\\n\\r\\n    .up.lv3 {\\r\\n        background-color: #92d1e5;\\r\\n        background-image: linear-gradient(to right, #92d1e5, #70b0c3);\\r\\n    }\\r\\n\\r\\n    .up.lv2 {\\r\\n        background-color: #95ddb2;\\r\\n        background-image: linear-gradient(to right, #95ddb2, #73bb90);\\r\\n    }\\r\\n\\r\\n    .up.lv1 {\\r\\n        background-color: #bfbfbf;\\r\\n        background-image: linear-gradient(to right, #bfbfbf, #9d9d9d);\\r\\n    }\\r\\n\\r\\n    .down {\\r\\n        font-size: 90%;\\r\\n        margin-top: 2px;\\r\\n        text-align: center;\\r\\n        padding: 1px 3px;\\r\\n    }\\r\\n</style>';

  // src/core/ui/download.ts
  var BilioldDownload = class extends HTMLElement {
    _container;
    _cells = {};
    _noData;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = download_default;
      this._container = root.children[0];
      this.addEventListener("click", (e) => e.stopPropagation());
      this._noData = addElement("div", void 0, this._container, "正在获取下载数据~");
    }
    updateItem = (key, value) => {
      var _a3;
      this._container.contains(this._noData) && this._noData.remove();
      this._cells[key] || (this._cells[key] = addElement("div", { class: "cell" }, this._container));
      this._cells[key].innerHTML = \`<div class="type \${key}">\${key}</div>\`;
      value ? value.forEach((d) => {
        const a = addElement("a", { class: "item", target: "_blank" }, this._cells[key], \`<div class="up\${d.color ? \` \${d.color}\` : ""}">\${d.quality}</div><div class="down">\${d.size}</div>\`);
        d.url && (a.href = d.url[0]);
        d.fileName && (a.download = d.fileName);
        d.onClick && a.addEventListener("click", (e) => d.onClick(e));
      }) : (_a3 = this._cells[key]) == null ? void 0 : _a3.remove();
      this._container.firstChild || this._container.replaceChildren(this._noData);
    };
    show() {
      document.contains(this) || document.body.appendChild(this);
      this.style.display = "";
      window.addEventListener("click", () => {
        this.style.display = "none";
      }, { once: true });
    }
    init() {
      return propertryChangeHook({}, this.updateItem);
    }
    disconnectedCallback() {
      this.destory();
    }
    destory() {
      this._cells = {};
      this._container.replaceChildren(this._noData);
    }
  };
  customElements.get(\`download-\${"1272ee5"}\`) || customElements.define(\`download-\${"1272ee5"}\`, BilioldDownload);

  // src/core/ui/preview-image.ts
  init_tampermonkey();

  // src/html/preview-image.html
  var preview_image_default = '<div class="reply-view-image">\\r\\n    <!-- 操作区 -->\\r\\n    <div class="operation-btn">\\r\\n        <div class="operation-btn-icon close-container">\\r\\n            <i class="svg-icon close use-color" style="width: 14px; height: 14px;"></i>\\r\\n        </div>\\r\\n        <div class="operation-btn-icon last-image">\\r\\n            <i class="svg-icon left-arrow use-color" style="width: 22px; height: 22px;"></i>\\r\\n        </div>\\r\\n        <div class="operation-btn-icon next-image">\\r\\n            <i class="svg-icon right-arrow use-color" style="width: 22px; height: 22px;"></i>\\r\\n        </div>\\r\\n    </div>\\r\\n    <!-- 图片内容 -->\\r\\n    <div class="show-image-wrap"></div>\\r\\n    <!-- 小图预览栏 -->\\r\\n    <div class="preview-list"></div>\\r\\n</div>\\r\\n<style>\\r\\n    .reply-view-image {\\r\\n        position: fixed;\\r\\n        z-index: 999999;\\r\\n        top: 0;\\r\\n        right: 0;\\r\\n        bottom: 0;\\r\\n        left: 0;\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n        background: rgba(24, 25, 28, 0.85);\\r\\n        transform: scale(1);\\r\\n        user-select: none;\\r\\n    }\\r\\n\\r\\n    .reply-view-image,\\r\\n    .reply-view-image * {\\r\\n        box-sizing: border-box;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon {\\r\\n        display: flex;\\r\\n        align-items: center;\\r\\n        justify-content: center;\\r\\n        position: absolute;\\r\\n        z-index: 2;\\r\\n        width: 42px;\\r\\n        height: 42px;\\r\\n        border-radius: 50%;\\r\\n        color: white;\\r\\n        background: rgba(0, 0, 0, 0.58);\\r\\n        transition: 0.2s;\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon:hover {\\r\\n        color: #FF6699;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon.close-container {\\r\\n        top: 16px;\\r\\n        right: 16px;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon.last-image {\\r\\n        top: 50%;\\r\\n        left: 16px;\\r\\n        transform: translateY(-50%);\\r\\n    }\\r\\n\\r\\n    .reply-view-image .operation-btn .operation-btn-icon.next-image {\\r\\n        top: 50%;\\r\\n        right: 16px;\\r\\n        transform: translateY(-50%);\\r\\n    }\\r\\n\\r\\n    .reply-view-image .show-image-wrap {\\r\\n        display: flex;\\r\\n        align-items: center;\\r\\n        justify-content: center;\\r\\n        position: absolute;\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n        max-height: 100%;\\r\\n        padding: 0 100px;\\r\\n        overflow: auto;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .show-image-wrap .loading-svga {\\r\\n        position: absolute;\\r\\n        top: 50%;\\r\\n        left: 50%;\\r\\n        transform: translate(-50%, -50%);\\r\\n        width: 42px;\\r\\n        height: 42px;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .show-image-wrap.vertical {\\r\\n        flex-direction: column;\\r\\n        justify-content: start;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .show-image-wrap .image-content {\\r\\n        max-width: 100%;\\r\\n        margin: auto;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list {\\r\\n        display: flex;\\r\\n        align-items: center;\\r\\n        position: absolute;\\r\\n        left: 50%;\\r\\n        bottom: 30px;\\r\\n        z-index: 2;\\r\\n        padding: 6px 10px;\\r\\n        border-radius: 8px;\\r\\n        background: rgba(24, 25, 28, 0.8);\\r\\n        backdrop-filter: blur(20px);\\r\\n        transform: translateX(-50%);\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box {\\r\\n        padding: 1px;\\r\\n        border: 2px solid transparent;\\r\\n        border-radius: 8px;\\r\\n        transition: 0.3s;\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box.active {\\r\\n        border-color: #FF6699;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box .preview-item-wrap {\\r\\n        display: flex;\\r\\n        justify-content: center;\\r\\n        overflow: hidden;\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n        border-radius: 6px;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box .preview-item-wrap.vertical {\\r\\n        flex-direction: column;\\r\\n    }\\r\\n\\r\\n    .reply-view-image .preview-list .preview-item-box .preview-item-wrap.extra-long {\\r\\n        justify-content: start;\\r\\n    }\\r\\n\\r\\n    .svg-icon {\\r\\n        display: inline-flex;\\r\\n        justify-content: center;\\r\\n        align-items: center;\\r\\n    }\\r\\n\\r\\n    .svg-icon svg {\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n    }\\r\\n\\r\\n    .svg-icon.use-color svg path {\\r\\n        fill: currentColor;\\r\\n        color: inherit;\\r\\n    }\\r\\n</style>';

  // src/svg/left.svg
  var left_default = '<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.67413 1.57564C7.90844 1.80995 7.90844 2.18985 7.67413 2.42417L4.09839 5.9999L7.67413 9.57564C7.90844 9.80995 7.90844 10.1899 7.67413 10.4242C7.43981 10.6585 7.05992 10.6585 6.8256 10.4242L3.00238 6.60094C2.67043 6.269 2.67043 5.73081 3.00238 5.39886L6.8256 1.57564C7.05992 1.34132 7.43981 1.34132 7.67413 1.57564Z" fill="#A2A7AE"></path></svg>';

  // src/svg/right.svg
  var right_default = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.82576 2.07564C5.59145 2.30995 5.59145 2.68985 5.82576 2.92417L10.9015 7.9999L5.82576 13.0756C5.59145 13.31 5.59145 13.6899 5.82576 13.9242C6.06008 14.1585 6.43997 14.1585 6.67429 13.9242L11.9386 8.65987C12.3031 8.29538 12.3031 7.70443 11.9386 7.33994L6.67429 2.07564C6.43997 1.84132 6.06008 1.84132 5.82576 2.07564Z" fill="#E19C2C"></path></svg>';

  // src/utils/scrollbar.ts
  init_tampermonkey();
  var Scrollbar = class _Scrollbar {
    /**
     * 设置滚动条
     * @param ele 目标节点
     * @param x 是否显示横滚动条
     * @param y 是否显示纵滚动条
     * @param side 复制样式到目标节点旁边,用于默认样式不生效的情况,比如ShadowRoot环境
     */
    constructor(ele, x = true, y = true, side = false) {
      this.ele = ele;
      this.x = x;
      this.y = y;
      this.side = side;
      _Scrollbar.style || _Scrollbar.init();
      this.overflow = this.ele.style.overflow;
      side && ele.insertAdjacentElement("afterend", _Scrollbar.style.cloneNode(true));
      this.flesh();
    }
    static mutex = getMetux();
    static prefix = "scrollbar-" + _Scrollbar.mutex;
    static style;
    static thumb = "#999";
    static track = "#EEE";
    static init() {
      this.style || (this.style = addElement("style", void 0), document.head);
      this.style.textContent = \`.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]{
    scrollbar-width: none;
    scrollbar-color: \${this.thumb} \${this.track};
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]:hover {
    scrollbar-width: thin;
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar {
    width: 0;
    height: 0;
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar-track {
    border-radius: 4px;
    background-color: \${this.track};
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar-thumb {
    border-radius: 4px;
    background-color: \${this.thumb};
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]:hover::-webkit-scrollbar {
    width: 7px;
    height: 7px;
}
.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar:hover {
    width: 7px;
    height: 7px;
}\`;
    }
    /** 备份原始overflow */
    overflow;
    /** 滑块颜色 */
    get thumb() {
      return _Scrollbar.thumb;
    }
    set thumb(v) {
      _Scrollbar.thumb = v;
      _Scrollbar.init();
    }
    /** 轨道颜色 */
    get track() {
      return _Scrollbar.track;
    }
    set track(v) {
      _Scrollbar.track = v;
      _Scrollbar.init();
    }
    flesh() {
      document.contains(_Scrollbar.style) || document.head.append(_Scrollbar.style);
      this.ele.classList.add(_Scrollbar.prefix);
      this.ele.setAttribute(\`data-\${_Scrollbar.mutex}\`, _Scrollbar.mutex);
      switch (this.suffix()) {
        case "-all": {
          this.ele.style.overflow = "auto auto";
          break;
        }
        case "-x": {
          this.ele.style.overflow = "auto hidden";
          break;
        }
        case "-y": {
          this.ele.style.overflow = "hidden auto";
          break;
        }
        case "-none":
        default: {
          this.ele.style.overflow = this.overflow;
          this.remove();
          break;
        }
      }
    }
    suffix() {
      if (this.x) {
        return this.y ? "-all" : "-x";
      } else {
        return this.y ? "-y" : "-none";
      }
    }
    remove() {
      this.ele.classList.remove(_Scrollbar.prefix);
      this.ele.removeAttribute(\`data-\${_Scrollbar.mutex}\`);
    }
    /**
     * 更新滚动条
     * @param x 是否显示横滚动条
     * @param y 是否显示纵滚动条
     * @param thumb 滑块颜色
     * @param track 轨道颜色
     */
    update(x = true, y = true) {
      this.x = x;
      this.y = y;
      this.flesh();
    }
  };

  // src/core/ui/preview-image.ts
  var PreviewImage = class extends HTMLElement {
    _image;
    _list;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = preview_image_default;
      const close = root.querySelector(".svg-icon.close.use-color");
      const left = root.querySelector(".svg-icon.left-arrow.use-color");
      const right = root.querySelector(".svg-icon.right-arrow.use-color");
      close.innerHTML = fork_default;
      left.innerHTML = left_default;
      right.innerHTML = right_default;
      this._image = root.querySelector(".show-image-wrap");
      this._list = root.querySelector(".preview-list");
      new Scrollbar(this._image, true, true, true);
      close.parentElement.addEventListener("click", (e) => {
        this.remove();
        document.body.style.overflow = "";
        e.stopPropagation();
      });
      left.parentElement.addEventListener("click", (e) => {
        this.togger(e, false);
        e.stopPropagation();
      });
      right.parentElement.addEventListener("click", (e) => {
        this.togger(e);
        e.stopPropagation();
      });
      this._image.addEventListener("click", (e) => {
        if (e.target === this._image) {
          this.remove();
          document.body.style.overflow = "";
          e.stopPropagation();
        }
      });
    }
    togger(e, right = true) {
      const list = this._list.querySelectorAll(".preview-item-box");
      if (list.length) {
        let i = 0;
        list.forEach((d, j) => {
          if (d.classList.contains("active")) {
            d.classList.remove("active");
            if (right) {
              i = j + 1;
              i < list.length || (i = 0);
            } else {
              i = j - 1;
              i < 0 && (i = list.length - 1);
            }
          }
        });
        list[i].classList.add("active");
        const img = list[i].querySelector("img");
        if (img) {
          this._image.innerHTML = \`<img class="image-content" src="\${img.src}">\`;
        }
      }
      e.stopPropagation();
    }
    /**
     * 初始化
     * @param imgs 图片链接(组)
     * @param vertical 是否垂直
     * @param active 显示第几张图片
     */
    value(imgs, vertical = false, active = 0) {
      imgs = isArray(imgs) ? imgs : [imgs];
      active < imgs.length || (active = 0);
      this._image.innerHTML = \`<img class="image-content" src="\${imgs[active]}">\`;
      vertical ? this.classList.add("vertical") : this.classList.remove("vertical");
      this._list.innerHTML = "";
      imgs.forEach((d, i) => {
        const item = addElement("div", {
          class: \`preview-item-box\${i === active ? " active" : ""}\`,
          style: "min-width: 54px; max-width: 54px; height: 54px;"
        }, this._list, \`<div class="preview-item-wrap\${vertical ? " vertical" : ""}"><img src="\${d}"></div>\`);
        item.addEventListener("click", (e) => {
          var _a3;
          (_a3 = this._list.querySelector(".preview-item-box.active")) == null ? void 0 : _a3.classList.remove("active");
          item.classList.add("active");
          this._image.innerHTML = \`<img class="image-content" src="\${d}">\`;
          e.stopPropagation();
        });
      });
      document.body.contains(this) || document.body.appendChild(this);
      document.body.style.overflow = "hidden";
    }
  };
  customElements.get(\`preview-image-\${"1272ee5"}\`) || customElements.define(\`preview-image-\${"1272ee5"}\`, PreviewImage);

  // src/core/videolimit.ts
  init_tampermonkey();

  // src/io/api-biliplus-playurl.ts
  init_tampermonkey();
  async function apiBiliplusPlayurl(data) {
    const response = await fetch(objUrl("//www.biliplus.com/BPplayurl.php", data));
    return await response.json();
  }

  // src/io/api-global-ogv-playurl.ts
  init_tampermonkey();

  // src/io/sidx.ts
  init_tampermonkey();
  var Sidx = class {
    /**
     * @param url 目标url
     * @param size 最大索引范围(不宜过大),默认6万字节
     */
    constructor(url, size = 6e4) {
      this.url = url;
      this.size = size;
    }
    /** range索引结束点 */
    end = 5999;
    /** range索引开始点 */
    start = 0;
    /** 结果hex字符串 */
    hex_data = "";
    getData() {
      return new Promise((resolve, reject) => {
        this.fetch(resolve, reject);
      });
    }
    /** 请求片段 */
    fetch(resolve, reject) {
      fetch(this.url.replace("http:", "https:"), {
        headers: {
          range: \`bytes=\${this.start}-\${this.end}\`
        }
      }).then((d) => {
        if ((d.status >= 300 || d.status < 200) && d.status !== 304)
          throw new Error(\`\${d.status} \${d.statusText}\`, { cause: d.status });
        return d.arrayBuffer();
      }).then((d) => {
        const data = new Uint8Array(d);
        this.hex_data += Array.prototype.map.call(data, (x) => ("00" + x.toString(16)).slice(-2)).join("");
        if (this.hex_data.indexOf("73696478") > -1 && this.hex_data.indexOf("6d6f6f66") > -1) {
          const indexRangeStart = this.hex_data.indexOf("73696478") / 2 - 4;
          const indexRagneEnd = this.hex_data.indexOf("6d6f6f66") / 2 - 5;
          resolve(["0-" + String(indexRangeStart - 1), String(indexRangeStart) + "-" + String(indexRagneEnd)]);
        } else {
          this.start = this.end + 1;
          if (this.size && this.start > this.size) {
            reject("未能获取到sidx");
          } else {
            this.end += 6e3;
            this.size && (this.end = Math.min(this.end, this.size));
            this.fetch(resolve, reject);
          }
        }
      }).catch((e) => reject(e));
    }
  };

  // src/io/api-global-ogv-playurl.ts
  var ApiGlobalOgvPlayurl = class extends ApiSign {
    /**
     * @param data 查询参数
     * @param server 东南亚(泰区)代理服务器
     */
    constructor(data, server = "api.global.bilibili.com") {
      super(URLS.GLOBAL_OGV_PLAYURL.replace("api.global.bilibili.com", server), "7d089525d3611b1c");
      this.data = data;
      this.data = Object.assign({
        area: "th",
        build: 1001310,
        device: "android",
        force_host: 2,
        download: 1,
        mobi_app: "bstar_a",
        platform: "android"
      }, data);
    }
    response;
    async getDate() {
      if (this.response)
        return this.response;
      const response = await fetch(this.sign().toJSON());
      const json = await response.json();
      return this.response = jsonCheck(json).data;
    }
    toPlayurl() {
      return new Promise((resolve, reject) => {
        this.getDate().then((d) => {
          const playurl = new PlayurlDash();
          const set = [];
          playurl.quality = d.video_info.stream_list[0].stream_info.quality || d.video_info.quality;
          playurl.format = PlayurlFormatMap[playurl.quality];
          playurl.timelength = d.video_info.timelength;
          playurl.dash.duration = Math.ceil(playurl.timelength / 1e3);
          playurl.dash.minBufferTime = playurl.dash.min_buffer_time = 1.5;
          Promise.all([
            ...d.video_info.stream_list.map((d2) => (async () => {
              var _a3, _b2;
              if (d2.dash_video && d2.dash_video.base_url) {
                const id = d2.stream_info.quality;
                playurl.accept_description.push(PlayurlDescriptionMap[id]);
                set.push(PlayurlFormatMap[id]);
                playurl.accept_quality.push(id);
                playurl.support_formats.push({
                  description: PlayurlDescriptionMap[id],
                  display_desc: PlayurlQualityMap[id],
                  format: PlayurlFormatMap[id],
                  new_description: PlayurlDescriptionMap[id],
                  quality: id,
                  superscript: "",
                  codecs: [PlayurlCodecs[id]]
                });
                const sidx = await new Sidx(d2.dash_video.base_url, d2.dash_video.size).getData();
                playurl.dash.video.push({
                  SegmentBase: {
                    Initialization: sidx[0],
                    indexRange: sidx[1]
                  },
                  segment_base: {
                    initialization: sidx[0],
                    index_range: sidx[1]
                  },
                  backupUrl: [],
                  backup_url: [],
                  bandwidth: d2.dash_video.bandwidth,
                  baseUrl: d2.dash_video.base_url,
                  base_url: d2.dash_video.base_url,
                  codecid: d2.dash_video.codecid,
                  codecs: PlayurlCodecsAPP[id] || PlayurlCodecs[id],
                  frameRate: PlayurlFrameRate[id],
                  frame_rate: PlayurlFrameRate[id],
                  height: (_a3 = PlayurlResolution[id]) == null ? void 0 : _a3[1],
                  id: d2.stream_info.quality,
                  mimeType: "video/mp4",
                  mime_type: "video/mp4",
                  sar: "1:1",
                  startWithSap: 1,
                  start_with_sap: 1,
                  width: (_b2 = PlayurlResolution[id]) == null ? void 0 : _b2[0]
                });
              }
            })()),
            ...d.video_info.dash_audio.map((d2) => (async () => {
              const id = d2.id;
              const sidx = await new Sidx(d2.base_url, d2.size).getData();
              playurl.dash.audio.push({
                SegmentBase: {
                  Initialization: sidx[0],
                  indexRange: sidx[1]
                },
                segment_base: {
                  initialization: sidx[0],
                  index_range: sidx[1]
                },
                backupUrl: [],
                backup_url: [],
                bandwidth: d2.bandwidth,
                baseUrl: d2.base_url,
                base_url: d2.base_url,
                codecid: d2.codecid,
                codecs: PlayurlCodecsAPP[id] || PlayurlCodecs[id],
                frameRate: "",
                frame_rate: "",
                height: 0,
                id,
                mimeType: "audio/mp4",
                mime_type: "audio/mp4",
                sar: "",
                startWithSap: 0,
                start_with_sap: 0,
                width: 0
              });
            })())
          ]).then(() => {
            const avc = [], hev = [], video = [];
            playurl.dash.video.forEach((d2) => {
              if (d2.codecid == 7)
                avc.push(d2);
              else
                hev.push(d2);
            });
            let length2 = avc.length > hev.length ? avc.length : hev.length;
            for (let i = length2 - 1; i >= 0; i--) {
              if (avc[i])
                video.push(avc[i]);
              if (hev[i])
                video.push(hev[i]);
            }
            playurl.dash.video = video;
            playurl.accept_format = set.join(",");
            playurl.quality > 80 && (playurl.quality = 80);
            resolve(playurl);
          }).catch((e) => reject(e));
        }).catch((e) => reject(e));
      });
    }
  };

  // src/utils/conf/uid.ts
  init_tampermonkey();

  // src/utils/cookie.ts
  init_tampermonkey();
  function getCookies() {
    return document.cookie.split("; ").reduce((s, d) => {
      let key = d.split("=")[0];
      let val = d.split("=")[1];
      s[key] = unescape(val);
      return s;
    }, {});
  }
  function setCookie(name, value, days = 365) {
    const exp = /* @__PURE__ */ new Date();
    exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1e3);
    document.cookie = name + "=" + escape(value) + ";expires=" + exp.toUTCString() + "; path=/; domain=.bilibili.com";
  }

  // src/utils/conf/uid.ts
  var uid = Number(getCookies().DedeUserID);

  // src/core/network-mock.ts
  init_tampermonkey();
  var networkMocked = false;
  function defineRes(target, res, v) {
    Object.defineProperties(target, {
      status: {
        configurable: true,
        writable: true,
        value: res.status
      },
      statusText: {
        configurable: true,
        writable: true,
        value: res.statusText
      },
      response: {
        configurable: true,
        writable: true,
        value: res.response
      },
      responseText: {
        configurable: true,
        writable: true,
        value: res.responseText
      },
      responseXML: {
        configurable: true,
        writable: true,
        value: res.responseXML
      },
      responseURL: {
        configurable: true,
        writable: true,
        value: res.finalUrl
      }
    });
    v();
  }
  function networkMock() {
    if (!networkMocked) {
      networkMocked = true;
      if (true) {
        xhrHook.ultra(".m4s", function(target, args) {
          const obj = {
            method: args[0],
            url: args[1],
            headers: {
              "user-agent": user.userStatus.userAgent
            },
            onloadstart: (res) => {
              defineRes(this, res, () => {
              });
            }
          };
          args[2] || (obj.anonymous = true);
          Object.defineProperties(this, {
            responseType: {
              configurable: true,
              set: (v) => {
                obj.responseType = v;
              },
              get: () => obj.responseType
            },
            onload: {
              configurable: true,
              set: (v) => {
                obj.onload = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.onload
            },
            onerror: {
              configurable: true,
              set: (v) => {
                obj.onerror = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.onerror
            },
            timeout: {
              configurable: true,
              set: (v) => {
                obj.timeout = v;
              },
              get: () => obj.timeout
            },
            ontimeout: {
              configurable: true,
              set: (v) => {
                obj.ontimeout = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.ontimeout
            },
            onprogress: {
              configurable: true,
              set: (v) => {
                obj.onprogress = (res) => {
                  defineRes(this, res, v.bind(this, new ProgressEvent("progress", {
                    lengthComputable: res.lengthComputable,
                    loaded: res.loaded,
                    total: res.total
                  })));
                };
              },
              get: () => obj.onprogress
            },
            onabort: {
              configurable: true,
              set: (v) => {
                obj.onabort = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.onabort
            },
            onreadystatechange: {
              configurable: true,
              set: (v) => {
                obj.onreadystatechange = (res) => {
                  defineRes(this, res, v);
                };
              },
              get: () => obj.onreadystatechange
            },
            setRequestHeader: {
              configurable: true,
              value: (name, value) => {
                obj.headers && (obj.headers[name] = value);
              }
            },
            send: {
              configurable: true,
              value: (body) => {
                obj.method === "POST" && body && (obj.data = body);
                const tar = GM.xmlHttpRequest(obj);
                this.abort = tar.abort.bind(tar);
                return true;
              }
            }
          });
        });
      } else {
        GM.modifyRequestheader(".m4s?", {
          "user-agent": "Bilibili Freedoooooom/MarkII",
          referer: void 0
        });
        GM.modifyRequestheader(".flv?", {
          "user-agent": "Bilibili Freedoooooom/MarkII",
          referer: void 0
        });
      }
    }
  }

  // src/core/videolimit.ts
  var UPOS = {
    "ks3(金山)": "upos-sz-mirrorks3.bilivideo.com",
    "ks3b(金山)": "upos-sz-mirrorks3b.bilivideo.com",
    "ks3c(金山)": "upos-sz-mirrorks3c.bilivideo.com",
    "ks32(金山)": "upos-sz-mirrorks32.bilivideo.com",
    "kodo(七牛)": "upos-sz-mirrorkodo.bilivideo.com",
    "kodob(七牛)": "upos-sz-mirrorkodob.bilivideo.com",
    "cos(腾讯)": "upos-sz-mirrorcos.bilivideo.com",
    "cosb(腾讯)": "upos-sz-mirrorcosb.bilivideo.com",
    "coso1(腾讯)": "upos-sz-mirrorcoso1.bilivideo.com",
    "coso2(腾讯)": "upos-sz-mirrorcoso2.bilivideo.com",
    "bos(腾讯)": "upos-sz-mirrorbos.bilivideo.com",
    "hw(华为)": "upos-sz-mirrorhw.bilivideo.com",
    "hwb(华为)": "upos-sz-mirrorhwb.bilivideo.com",
    "uphw(华为)": "upos-sz-upcdnhw.bilivideo.com",
    "js(华为)": "upos-tf-all-js.bilivideo.com",
    "hk(香港)": "cn-hk-eq-bcache-01.bilivideo.com",
    "akamai(海外)": "upos-hz-mirrorakam.akamaized.net"
  };
  var AREA = /* @__PURE__ */ ((AREA2) => {
    AREA2[AREA2["tw"] = 0] = "tw";
    AREA2[AREA2["hk"] = 1] = "hk";
    AREA2[AREA2["cn"] = 2] = "cn";
    return AREA2;
  })(AREA || {});
  var VideoLimit = class {
    /** 数据备份 */
    Backup = {};
    /** 通知组件 */
    toast;
    /** 监听中 */
    listening = false;
    /** 播放数据备份 */
    __playinfo__;
    constructor() {
      xhrHook("/playurl?", (args) => {
        const param2 = urlObj(args[1]);
        if (!uid && user.userStatus.show1080p && user.userStatus.accessKey.token) {
          param2.appkey = "27eb53fc9058f8c3";
          param2.access_key = user.userStatus.accessKey.token;
        }
        param2.fnval && (param2.fnval = fnval);
        args[1] = objUrl(args[1], param2);
        return !(BLOD.limit || BLOD.th);
      }, (res) => {
        try {
          const result = res.responseType === "json" ? JSON.stringify(res.response) : res.responseText;
          if (user.userStatus.uposReplace.nor !== "不替换") {
            const nstr = this.uposReplace(result, user.userStatus.uposReplace.nor);
            toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.nor}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.nor]}\`);
            if (res.responseType === "json") {
              res.response = JSON.parse(nstr);
            } else {
              res.response = res.responseText = nstr;
            }
          }
        } catch (e) {
        }
      }, false);
    }
    /** 开始监听 */
    enable() {
      if (this.listening)
        return;
      const disable = xhrHook.async("/playurl?", (args) => {
        const obj = urlObj(args[1]);
        this.updateVaribale(obj);
        return Boolean(BLOD.limit || BLOD.th);
      }, async (args) => {
        const response = BLOD.th ? await this._th(args) : await this._gat(args);
        return { response, responseType: "json", responseText: JSON.stringify(response) };
      }, false);
      this.disable = () => {
        disable();
        this.listening = false;
      };
      this.listening = true;
    }
    /** 处理泰区 */
    async _th(args) {
      this.toast || (this.toast = toast.list());
      this.toast.data = ["泰区限制视频 >>>"];
      const obj = urlObj(args[1]);
      this.toast.push(\`> aid:\${BLOD.aid}\`, \`> cid:\${BLOD.cid}\`);
      obj.access_key = user.userStatus.accessKey.token;
      if (!this.Backup[args[1]]) {
        try {
          networkMock();
          this.toast.push(\`> 代理服务器:\${user.userStatus.videoLimit.th}\`);
          this.Backup[args[1]] = { code: 0, message: "success", result: await this.th(obj) };
          this.toast.push("> 获取代理数据成功!");
          this.toast.type = "success";
        } catch (e) {
          this.toast.push("> 代理出错!", e);
          !obj.access_key && this.toast.push("> 代理服务器要求【账户授权】才能进一步操作!");
          this.toast.type = "error";
          this.toast.delay = 4;
          return { code: -404, message: e, data: null };
        }
      }
      this.toast.delay = 4;
      delete this.toast;
      return this.__playinfo__ = this.Backup[args[1]];
    }
    /** 处理港澳台 */
    async _gat(args) {
      var _a3;
      this.toast || (this.toast = toast.list());
      this.toast.data = ["港澳台限制视频 >>>"];
      const obj = urlObj(args[1]);
      this.toast.push(\`> aid:\${BLOD.aid}\`, \`> cid:\${BLOD.cid}\`);
      obj.access_key = user.userStatus.accessKey.token;
      if (!this.Backup[args[1]]) {
        try {
          if (user.userStatus.videoLimit.server === "内置") {
            obj.module = "bangumi";
            const upInfo = (_a3 = window.__INITIAL_STATE__) == null ? void 0 : _a3.upInfo;
            if (upInfo) {
              (upInfo.mid == 1988098633 || upInfo.mid == 2042149112) && (obj.module = "movie");
            }
            this.toast.push(\`> 代理服务器:内置\`, \`> 类型:\${obj.module}\`);
            const res = await apiBiliplusPlayurl(obj);
            this.Backup[args[1]] = { code: 0, message: "success", result: res };
          } else {
            const res = await this.gat(obj);
            this.Backup[args[1]] = { code: 0, message: "success", result: res };
          }
          if (user.userStatus.uposReplace.gat !== "不替换") {
            this.Backup[args[1]] = JSON.parse(this.uposReplace(JSON.stringify(this.Backup[args[1]]), user.userStatus.uposReplace.gat));
            toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.gat}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.gat]}\`);
          }
          ;
          this.toast.push("> 获取代理数据成功!");
          this.toast.type = "success";
        } catch (e) {
          this.toast.push("> 代理出错!", e);
          !obj.access_key && this.toast.push("> 代理服务器要求【账户授权】才能进一步操作!");
          this.toast.type = "error";
          this.toast.delay = 4;
          return { code: -404, message: e, data: null };
        }
      }
      this.toast.delay = 4;
      delete this.toast;
      return this.__playinfo__ = this.Backup[args[1]];
    }
    /** 停止监听 */
    disable() {
      this.listening = false;
    }
    /** 更新全局变量 */
    updateVaribale(obj) {
      obj.seasonId && (BLOD.ssid = obj.seasonId);
      obj.episodeId && (BLOD.epid = obj.episodeId);
      obj.ep_id && (BLOD.epid = obj.ep_id);
      obj.aid && (BLOD.aid = Number(obj.aid)) && (BLOD.aid = obj.aid);
      obj.avid && (BLOD.aid = Number(obj.avid)) && (BLOD.aid = obj.avid);
      obj.cid && (BLOD.cid = Number(obj.cid)) && (BLOD.cid = obj.cid);
    }
    /** 访问泰区代理 */
    async th(obj) {
      const d = await new ApiGlobalOgvPlayurl(obj, user.userStatus.videoLimit.th).toPlayurl();
      toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.th}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.th]}\`);
      return JSON.parse(this.uposReplace(JSON.stringify(d), user.userStatus.uposReplace.th));
    }
    /** 代理服务器序号 */
    area = 0;
    /** 访问港澳台代理 */
    async gat(obj) {
      this.toast || (this.toast = toast.list());
      if (!user.userStatus.videoLimit[AREA[this.area]])
        throw new Error(\`无有效代理服务器:\${AREA[this.area]}\`);
      const server = user.userStatus.videoLimit[AREA[this.area]];
      obj.area = AREA[this.area];
      this.toast.push(\`> 代理服务器:\${server}\`);
      try {
        return await apiPlayurl(obj, true, true, server);
      } catch (e) {
        this.toast.push("> 代理服务器返回异常!", e);
        if (this.toast) {
          this.toast.type = "warning";
        }
        this.area++;
        if (this.area > 2)
          throw new Error("代理服务器不可用!");
        return await this.gat(obj);
      }
    }
    /** 用于过滤upos提示 */
    upos = false;
    /** 用于取消过滤upos提示 */
    timer;
    /**
     * 替换upos服务器
     * @param str playurl或包含视频URL的字符串
     * @param uposName 替换的代理服务器名 keyof typeof {@link UPOS}
     */
    uposReplace(str, uposName) {
      if (uposName === "不替换")
        return str;
      this.upos = true;
      clearTimeout(this.timer);
      this.timer = setTimeout(() => this.upos = false, 1e3);
      return str.replace(/:\\\\?\\/\\\\?\\/[^\\/]+\\\\?\\//g, () => \`://\${UPOS[uposName]}/\`);
    }
  };
  var videoLimit = new VideoLimit();

  // src/core/download.ts
  var Download = class {
    /** 下载界面 */
    ui = new BilioldDownload();
    /** 数据缓存 */
    data = this.ui.init();
    previewImage;
    /** 下载按钮 */
    bgrayButtonBtn;
    get fileName() {
      if (videoInfo.metadata) {
        return \`\${videoInfo.metadata.album}(\${videoInfo.metadata.title})\`;
      }
      return "";
    }
    constructor() {
      switchVideo(() => {
        this.destory();
        user.userStatus.downloadButton && this.bgrayButton();
      });
    }
    /** 解码playinfo */
    decodePlayinfo(playinfo, fileName = this.fileName) {
      const data = new PlayinfoFilter(fileName).filter(playinfo);
      data.forEach((d) => {
        this.data[d.type] || (this.data[d.type] = []);
        this.data[d.type].push({
          url: d.url,
          fileName,
          quality: Reflect.has(d, "order") ? \`\${d.quality}*\${d.order}\` : d.quality,
          size: d.size,
          color: d.color,
          onClick: (ev) => {
            ev.preventDefault();
            this.pushDownload(d, ev);
          }
        });
      });
    }
    /** 分发数据 */
    async pushDownload(data, ev) {
      if (data.onClick) {
        data.onClick(ev);
      } else if (data.url) {
        switch (user.userStatus.downloadMethod) {
          case "IDM": {
            new Ef2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.ef2.delay, user.userStatus.ef2.silence).file({
              url: data.url[0],
              out: data.fileName
            });
            toast.success('保存IDM导出文件后,打开IDM -> 任务 -> 导入 -> 从"IDM导出文件"导入即可下载');
            break;
          }
          case "ef2": {
            new Ef2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.ef2.delay, user.userStatus.ef2.silence).sendLinkToIDM({
              url: data.url[0],
              out: data.fileName
            });
            toast.warning("允许浏览器打开【IDM EF2辅助工具】即可开始下载", "如果浏览器和IDM都没有任何反应,那些请先安装ef2辅助工具。");
            break;
          }
          case "aria2": {
            const cmdLine = new Aria2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.aria2.server, user.userStatus.aria2.port, user.userStatus.aria2.token, user.userStatus.aria2.split, user.userStatus.aria2.size).cmdlet({
              urls: data.url,
              out: data.fileName
            });
            toast.success(
              "已复制下载命令到剪切板,粘贴到终端里回车即可开始下载。当然前提是您的设备已配置好了aria2。",
              "--------------",
              cmdLine
            );
            break;
          }
          case "aria2rpc": {
            new Aria2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.aria2.server, user.userStatus.aria2.port, user.userStatus.aria2.token, user.userStatus.aria2.split, user.userStatus.aria2.size).rpc({
              urls: data.url,
              out: data.fileName
            }).then((d) => {
              toast.success("aria2已经开始下载", \`GUID: \${d}\`);
            }).catch((e) => {
              toast.error("aria2[RPC]错误!", e);
            });
            break;
          }
          case "curl": {
            const cmdLine = new Curl(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath).cmdlet({
              url: data.url[0],
              out: data.fileName
            });
            toast.success(
              "已复制下载命令到剪切板,粘贴到终端里回车即可开始下载。",
              "--------------",
              cmdLine
            );
            break;
          }
          default: {
            if (false) {
              if (!("\$id" in data)) {
                data.\$id = await GM.modifyRequestheader(data.url[0], {
                  "user-agent": user.userStatus.userAgent,
                  "referer": user.userStatus.referer
                }, {
                  "Content-Disposition": \`attachment\${data.fileName ? \`; filename="\${data.fileName}"\` : ""}\`
                }, false);
              }
              setTimeout(() => {
                data.\$id();
                delete data.\$id;
              }, 1e5);
            }
            this.anchor(data);
            break;
          }
        }
      }
    }
    /**
     * 直接访问要下载的链接
     * @param d 下载数据
     */
    anchor(d) {
      const a = document.createElement("a");
      d.url && (a.href = d.url[0]);
      d.fileName && (a.download = d.fileName);
      a.target = "_blank";
      a.click();
    }
    /** 请求中 */
    downloading = 0;
    /** 已请求 */
    gets = [];
    /** 下载当前视频 */
    default() {
      if (this.downloading)
        return;
      if (!BLOD.cid)
        return toast.warning("未找到视频文件");
      this.ui.show();
      user.userStatus.TVresource || this.getPlayInfo();
      user.userStatus.downloadType.includes("mp4") && this.getMp4();
      user.userStatus.downloadType.includes("flv") && this.getFlv();
      user.userStatus.downloadType.includes("dash") && this.getDash();
    }
    getPlayInfo() {
      if (this.gets.includes("_"))
        return;
      this.decodePlayinfo(videoLimit.__playinfo__);
      this.gets.push("_");
    }
    getMp4() {
      if (this.data.mp4 || this.gets.includes("mp4"))
        return;
      this.downloading++;
      (BLOD.pgc ? this.mp4(BLOD.cid) : this.flv(BLOD.aid, BLOD.cid)).then((d) => {
        this.gets.push("mp4");
        this.decodePlayinfo(d);
      }).finally(() => {
        this.downloading--;
      });
    }
    getFlv() {
      if (this.data.flv || this.gets.includes("flv"))
        return;
      this.downloading++;
      (user.userStatus.TVresource ? this.tv(BLOD.aid, BLOD.cid, false, user.userStatus.downloadQn) : this.interface(BLOD.cid, user.userStatus.downloadQn)).then((d) => {
        this.gets.push("flv");
        this.decodePlayinfo(d);
      }).finally(() => {
        this.downloading--;
      });
    }
    getDash() {
      if (this.data.aac || this.gets.includes("dash") || this.data.hev || this.data.av1)
        return;
      this.downloading++;
      (user.userStatus.TVresource ? this.tv(BLOD.aid, BLOD.cid) : this.dash(BLOD.aid, BLOD.cid)).then((d) => {
        this.gets.push("dash");
        this.decodePlayinfo(d);
      }).finally(() => {
        this.downloading--;
      });
    }
    /** 清空数据 */
    destory() {
      this.ui.remove();
      this.data = this.ui.init();
      this.downloading = 0;
      this.gets = [];
      videoLimit.__playinfo__ = void 0;
    }
    mp4(cid) {
      return new ApiPlayurlProj({ cid, access_key: user.userStatus.accessKey.token }, BLOD.pgc).getData();
    }
    flv(avid, cid) {
      return apiPlayurl({ avid, cid }, false, BLOD.pgc);
    }
    dash(avid, cid) {
      return apiPlayurl({ avid, cid }, true, BLOD.pgc);
    }
    tv(avid, cid, dash = true, quality = qn) {
      return new ApiPlayurlTv({ avid, cid, access_key: user.userStatus.accessKey.token, qn: quality }, dash, BLOD.pgc).getData();
    }
    intl(aid, cid, dash = true) {
      return new ApiPlayurlIntl({ aid, cid, access_key: user.userStatus.accessKey.token }, dash, BLOD.pgc).getData();
    }
    interface(cid, quality = qn) {
      return new ApiPlayurlInterface({ cid, quality }, BLOD.pgc).getData();
    }
    _BAPIAppPlayurlV1;
    get BAPIAppPlayurlV1() {
      this._BAPIAppPlayurlV1 || (this._BAPIAppPlayurlV1 = new BAPIAppPlayurlV1(user.userStatus.accessKey.token));
      return this._BAPIAppPlayurlV1;
    }
    image() {
      var _a3, _b2, _c, _d, _e, _f, _g, _h, _i, _j;
      const src = [];
      (_b2 = (_a3 = videoInfo.metadata) == null ? void 0 : _a3.artwork) == null ? void 0 : _b2.forEach((d) => src.push(d.src));
      if (location.host === "live.bilibili.com" && ((_f = (_e = (_d = (_c = window.__NEPTUNE_IS_MY_WAIFU__) == null ? void 0 : _c.roomInfoRes) == null ? void 0 : _d.data) == null ? void 0 : _e.room_info) == null ? void 0 : _f.cover)) {
        src.push((_j = (_i = (_h = (_g = window.__NEPTUNE_IS_MY_WAIFU__) == null ? void 0 : _g.roomInfoRes) == null ? void 0 : _h.data) == null ? void 0 : _i.room_info) == null ? void 0 : _j.cover);
      }
      if (/\\/read\\/[Cc][Vv]/.test(location.href)) {
        document.querySelectorAll(".article-holder img").forEach((d) => {
          d.src && src.push(d.src);
        });
      }
      if (src.length) {
        this.previewImage || (this.previewImage = new PreviewImage());
        this.previewImage.value(src);
      } else {
        toast.warning("未找到封面信息!");
      }
    }
    /** 添加播放器下载按钮 */
    bgrayButton() {
      var _a3;
      if (!this.bgrayButtonBtn) {
        this.bgrayButtonBtn = document.createElement("div");
        this.bgrayButtonBtn.classList.add("bgray-btn", "show");
        this.bgrayButtonBtn.title = "下载当前视频";
        this.bgrayButtonBtn.innerHTML = "下载<br>视频";
        this.bgrayButtonBtn.addEventListener("click", (e) => {
          var _a4;
          (_a4 = BLOD.ui) == null ? void 0 : _a4.show("download");
          e.stopPropagation();
        });
      }
      (_a3 = document.querySelector(".bgray-btn-wrap")) == null ? void 0 : _a3.appendChild(this.bgrayButtonBtn);
    }
  };
  var download = new Download();

  // src/core/bilibili-old.ts
  var BLOD = new class {
    /** 路径拆分 */
    path = location.href.split("/");
    /** bangumi标记 */
    pgc = false;
    ui;
    get aid() {
      return window.aid;
    }
    set aid(v) {
      window.aid = v;
    }
    get cid() {
      return window.cid;
    }
    set cid(v) {
      window.cid = v;
    }
    /** bangumi ssid */
    ssid;
    /** bangumi epid */
    epid;
    /** 限制视频 */
    limit;
    /** 东南亚视频标记 */
    th;
    /** 播放器已加载 */
    playLoaded = false;
    /** 已模拟APP端取流 */
    networkMocked = false;
    /** 是否大会员 */
    isVip = false;
    /** 播放器哈希值 */
    version;
    // 调试接口
    GM = GM;
    urlSign = urlSign;
    objUrl = objUrl;
    urlObj = urlObj;
    download = download;
    danmaku = danmaku;
    toast = toast;
    debug = debug;
    videoInfo = videoInfo;
    base64 = base64;
    md5 = import_md52.default;
    htmlVnode = htmlVnode;
    saveAs = saveAs;
    fileRead = fileRead;
    /** 刷新toast,多用于重构页面后刷新显示 */
    flushToast() {
      document.body.contains(toast) || document.body.appendChild(toast);
    }
  }();

  // src/core/storage.ts
  init_tampermonkey();
  var LocalStorage = class {
    /** 清空! */
    static clear() {
      localStorage.clear();
    }
    /**
     * 读取
     * @param key 目标键名
     * @returns 格式化后的数据
     */
    static getItem(key) {
      return toObject(localStorage.getItem(key));
    }
    /**
     * 列出键名数组  
     * 原生Storage.key只返回但索引,感觉意义不大。
     * @returns 键名数组
     */
    static keys() {
      return Object.keys(localStorage);
    }
    /**
     * 移除
     * @param key 目标键名
     */
    static removeItem(key) {
      localStorage.removeItem(key);
    }
    /**
     * 添加/修改
     * @param key 
     * @param value 
     */
    static setItem(key, value) {
      localStorage.setItem(key, toString(value));
    }
  };
  var SessionStorage = class {
    /** 清空! */
    static clear() {
      sessionStorage.clear();
    }
    /**
     * 读取
     * @param key 目标键名
     * @returns 格式化后的数据
     */
    static getItem(key) {
      return toObject(sessionStorage.getItem(key));
    }
    /**
     * 列出键名数组  
     * 原生Storage.key只返回但索引,感觉意义不大。
     * @returns 键名数组
     */
    static keys() {
      return Object.keys(sessionStorage);
    }
    /**
     * 移除
     * @param key 目标键名
     */
    static removeItem(key) {
      sessionStorage.removeItem(key);
    }
    /**
     * 添加/修改
     * @param key 
     * @param value 
     */
    static setItem(key, value) {
      sessionStorage.setItem(key, toString(value));
    }
  };

  // src/page/header.ts
  init_tampermonkey();

  // src/io/api-page-header.ts
  init_tampermonkey();
  async function apiPageHeader(data) {
    const response = await fetch(objUrl(URLS.PAGE_HEADER, data));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/utils/format/subarray.ts
  init_tampermonkey();
  function subArray(res, num = 1) {
    const arr2 = [...res];
    const out = [];
    num = num || 1;
    num = num < arr2.length ? num : arr2.length;
    while (out.length < num) {
      var temp = Math.random() * arr2.length >> 0;
      out.push(arr2.splice(temp, 1)[0]);
    }
    return num === 1 ? out[0] : out;
  }

  // src/utils/hook/node.ts
  init_tampermonkey();
  var appendChild = Element.prototype.appendChild;
  var insertBefore = Element.prototype.insertBefore;
  var jsonp = [];
  Element.prototype.appendChild = function(newChild) {
    this.parentElement === document.documentElement && newChild.nodeName == "SCRIPT" && newChild.src && jsonp.forEach((d) => {
      d[0].every((d2) => newChild.src.includes(d2)) && d[1].call(newChild);
    });
    return appendChild.call(this, newChild);
  };
  Element.prototype.insertBefore = function(newChild, refChild) {
    this.parentElement === document.documentElement && newChild.nodeName == "SCRIPT" && newChild.src && jsonp.forEach((d) => {
      d[0].every((d2) => newChild.src.includes(d2)) && d[1].call(newChild);
    });
    return insertBefore.call(this, newChild, refChild);
  };
  function jsonpHook(url, redirect, modifyResponse, once = true) {
    let id;
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      once && id && delete jsonp[id - 1];
      if (redirect)
        try {
          this.src = redirect(this.src) || this.src;
        } catch (e) {
          debug.error("redirect of jsonphook", one, e);
        }
      if (modifyResponse) {
        const obj = urlObj(this.src);
        if (obj) {
          const callback = obj.callback;
          const call = window[callback];
          const url2 = this.src;
          if (call) {
            window[callback] = function(v) {
              try {
                v = modifyResponse(v, url2, call) || v;
              } catch (e) {
                debug.error("modifyResponse of jsonphook", one, e);
              }
              return v !== true && call(v);
            };
          }
        }
      }
    };
    const iid = jsonp.push([one, two]);
    return () => {
      removeJsonphook(iid);
    };
  }
  jsonpHook.async = (url, condition, modifyResponse, once = true) => {
    let id;
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      try {
        once && id && delete jsonp[id - 1];
        if (!condition || condition(this.src)) {
          const obj = urlObj(this.src);
          if (obj) {
            const callback = obj.callback;
            const call = window[callback];
            if (call) {
              modifyResponse && modifyResponse(this.src).then((d) => {
                window[callback](d);
                this.dispatchEvent(new ProgressEvent("load"));
              }).catch((e) => {
                this.dispatchEvent(new ProgressEvent("error"));
                debug.error("modifyResponse of xhrhookasync", one, e);
              });
            }
            this.removeAttribute("src");
          }
        }
      } catch (e) {
        debug.error("jsonphook", one, e);
      }
    };
    const iid = jsonp.push([one, two]);
    return () => {
      removeJsonphook(iid);
    };
  };
  jsonpHook.scriptBlock = (url) => {
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      try {
        this.removeAttribute("src");
        setTimeout(() => {
          this.dispatchEvent(new ProgressEvent("load"));
          try {
            this.remove();
          } catch (e) {
          }
        }, 100);
      } catch (e) {
        debug.error("脚本拦截失败!", one, e);
      }
    };
    jsonp.push([one, two]);
  };
  jsonpHook.scriptIntercept = (url, redirect, text) => {
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      try {
        if (text) {
          this.text = text(this.src);
          this.removeAttribute("src");
          setTimeout(() => {
            this.dispatchEvent(new ProgressEvent("load"));
            this == null ? void 0 : this.remove();
          }, 100);
        } else if (redirect) {
          this.src = redirect(this.src);
        }
      } catch (e) {
        debug.error("scriptIntercept", one, e);
      }
    };
    const iid = jsonp.push([one, two]);
    return () => {
      removeJsonphook(iid);
    };
  };
  function removeJsonphook(id) {
    id >= 0 && delete jsonp[id - 1];
  }
  jsonpHook.xhr = (url) => {
    const one = Array.isArray(url) ? url : [url];
    const two = function() {
      try {
        const obj = urlObj(this.src);
        if (obj) {
          const callback = obj.callback || obj.jsoncallback;
          const call = window[callback];
          const url2 = this.src;
          this.removeAttribute("src");
          delete obj.callback;
          delete obj.jsoncallback;
          fetch(objUrl(url2.split("?")[0], obj)).then((d) => d.json()).then((d) => {
            call(d);
            this.dispatchEvent(new ProgressEvent("load"));
          }).catch(() => {
            this.dispatchEvent(new ProgressEvent("error"));
          });
        }
      } catch (e) {
        debug.error("jsonphook", one, e);
      }
    };
    const iid = jsonp.push([one, two]);
    return () => {
      removeJsonphook(iid);
    };
  };

  // src/json/index-icon.json
  var index_icon_default = {
    fix: [
      {
        id: "609",
        type: "fix",
        title: "如果国宝会说话",
        deltime: "0",
        posttime: "1514973117",
        edittime: "1514973117",
        sttime: "1514886600",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20180103/59pz8mv77p.gif",
        weight: "10",
        links: [
          "https:https://search.bilibili.com/all?keyword=%E5%A6%82%E6%9E%9C%E5%9B%BD%E5%AE%9D%E4%BC%9A%E8%AF%B4%E8%AF%9D"
        ]
      },
      {
        id: "608",
        type: "fix",
        title: "极地",
        deltime: "0",
        posttime: "1514431011",
        edittime: "1514972989",
        sttime: "1514171700",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171228/p6xkl7v8rq.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=极地"
        ]
      },
      {
        id: "607",
        type: "fix",
        title: "大卫·爱登堡与巨象",
        deltime: "0",
        posttime: "1513741733",
        edittime: "1514972989",
        sttime: "1513650780",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171220/x6899kp5rq.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=大卫·爱登堡与巨象"
        ]
      },
      {
        id: "605",
        type: "fix",
        title: "国家宝藏",
        deltime: "0",
        posttime: "1512962047",
        edittime: "1514972989",
        sttime: "1512875400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171211/027jnnx0qv.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=国家宝藏"
        ]
      },
      {
        id: "604",
        type: "fix",
        title: "BBC60周年",
        deltime: "0",
        posttime: "1512961936",
        edittime: "1514972989",
        sttime: "1512875400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171211/027jn6l0w0.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=BBC60周年"
        ]
      },
      {
        id: "603",
        type: "fix",
        title: "",
        deltime: "0",
        posttime: "1511250034",
        edittime: "1514972989",
        sttime: "1511247600",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171121/y4o19nyvmj.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=INFINI-T%20FORCE"
        ]
      },
      {
        id: "602",
        type: "fix",
        title: "声之形",
        deltime: "0",
        posttime: "1507781072",
        edittime: "1514972989",
        sttime: "1507823700",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171012/z4ypmx829l.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A3%B0%E4%B9%8B%E5%BD%A2"
        ]
      },
      {
        id: "601",
        type: "fix",
        title: "你的名字",
        deltime: "0",
        posttime: "1503565677",
        edittime: "1514972989",
        sttime: "1503503700",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170828/02wz2nv570.gif",
        weight: "0",
        links: [
          "https:https://www.bilibili.com/blackboard/topic/activity-yourname1708.html"
        ]
      },
      {
        id: "600",
        type: "fix",
        title: "放肆开学",
        deltime: "0",
        posttime: "1503555174",
        edittime: "1514972989",
        sttime: "1503676500",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170824/v5o245k70y.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=%E6%94%BE%E8%82%86%E5%BC%80%E5%AD%A6"
        ]
      },
      {
        id: "599",
        type: "fix",
        title: "Nike React",
        deltime: "0",
        posttime: "1501561207",
        edittime: "1514972989",
        sttime: "1502034900",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170801/y4r02q54zj.gif",
        weight: "0",
        links: [
          "https:https://search.bilibili.com/all?keyword=Nike%20React"
        ]
      },
      {
        id: "596",
        type: "fix",
        title: "七月新番",
        deltime: "0",
        posttime: "1498792166",
        edittime: "1514972989",
        sttime: "1498701120",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170630/12jlkyp1vj.gif",
        weight: "0",
        links: [
          "https:https://www.bilibili.com/blackboard/topic/activity-HkBRflO7Z.html"
        ]
      },
      {
        id: "595",
        type: "fix",
        title: "脸接鱼雷",
        deltime: "0",
        posttime: "1495532952",
        edittime: "1514972989",
        sttime: "1495648800",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170523/q0rzwvnxqw.gif",
        weight: "0",
        links: [
          "https://acg.tv/u1Sq"
        ]
      },
      {
        id: "594",
        type: "fix",
        title: "恋爱暴君",
        deltime: "0",
        posttime: "1494917068",
        edittime: "1514972989",
        sttime: "1494830580",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170516/l66z6q9vx7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%81%8B%E7%88%B1%E6%9A%B4%E5%90%9B"
        ]
      },
      {
        id: "593",
        type: "fix",
        title: "P5",
        deltime: "0",
        posttime: "1494240485",
        edittime: "1514972989",
        sttime: "1494153300",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/m66pvpvo5p.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%B3%E7%A5%9E%E5%BC%82%E9%97%BB%E5%BD%955"
        ]
      },
      {
        id: "592",
        type: "fix",
        title: "点兔",
        deltime: "0",
        posttime: "1494240166",
        edittime: "1514972989",
        sttime: "1494153300",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/299nq72pon.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%82%B9%E5%85%94"
        ]
      },
      {
        id: "591",
        type: "fix",
        title: "全职高手",
        deltime: "0",
        posttime: "1494240079",
        edittime: "1514972989",
        sttime: "1494153300",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/699r071y3w.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%85%A8%E8%81%8C%E9%AB%98%E6%89%8B"
        ]
      },
      {
        id: "590",
        type: "fix",
        title: "人工智障",
        deltime: "0",
        posttime: "1493709665",
        edittime: "1514972989",
        sttime: "1493623080",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/v55r8ql070.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BA%BA%E5%B7%A5%E6%99%BA%E9%9A%9C"
        ]
      },
      {
        id: "589",
        type: "fix",
        title: "液压机",
        deltime: "0",
        posttime: "1493021860",
        edittime: "1514972989",
        sttime: "1492935360",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/r99qk2p22q.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B6%B2%E5%8E%8B%E6%9C%BA"
        ]
      },
      {
        id: "588",
        type: "fix",
        title: "原谅她",
        deltime: "0",
        posttime: "1492144236",
        edittime: "1514972989",
        sttime: "1492057680",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/v556yx5nl5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8E%9F%E8%B0%85%E5%A5%B9"
        ]
      },
      {
        id: "584",
        type: "fix",
        title: "孤独的美食家",
        deltime: "0",
        posttime: "1484811832",
        edittime: "1514972989",
        sttime: "1485705600",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-4147/QQ%E5%9B%BE%E7%89%8720170110124819.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AD%A4%E7%8B%AC%E7%BE%8E%E9%A3%9F%E5%AE%B6"
        ]
      },
      {
        id: "583",
        type: "fix",
        title: "血源诅咒",
        deltime: "0",
        posttime: "1481617840",
        edittime: "1514972989",
        sttime: "1481530800",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E8%A1%80%E6%BA%90%E8%AF%85%E5%92%92.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=+%E8%A1%80%E6%BA%90%E8%AF%85%E5%92%92"
        ]
      },
      {
        id: "582",
        type: "fix",
        title: "腹语术",
        deltime: "0",
        posttime: "1481177705",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E8%85%B9%E8%AF%AD%E6%9C%AF.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%85%B9%E8%AF%AD"
        ]
      },
      {
        id: "581",
        type: "fix",
        title: "上升气流",
        deltime: "0",
        posttime: "1481177656",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E4%B8%8A%E5%8D%87%E6%B0%94%E6%B5%81.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8A%E5%8D%87%E6%B0%94%E6%B5%81"
        ]
      },
      {
        id: "580",
        type: "fix",
        title: "牛顿",
        deltime: "0",
        posttime: "1481177628",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E7%89%9B%E9%A1%BF.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%89%9B%E9%A1%BF"
        ]
      },
      {
        id: "579",
        type: "fix",
        title: "喷了",
        deltime: "0",
        posttime: "1481177596",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E5%96%B7%E4%BA%86.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B7%E4%BA%86"
        ]
      },
      {
        id: "578",
        type: "fix",
        title: "维克托",
        deltime: "0",
        posttime: "1481177224",
        edittime: "1514972989",
        sttime: "1481090760",
        endtime: "0",
        state: "1",
        icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E5%86%B0%E4%B8%8A%E7%9A%84%E5%B0%A4%E9%87%8C.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B0%E4%B8%8A%E7%9A%84%E5%B0%A4%E9%87%8C"
        ]
      },
      {
        id: "577",
        type: "fix",
        title: "羽生结弦",
        deltime: "0",
        posttime: "1477649861",
        edittime: "1514972989",
        sttime: "1477563240",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/aa21b37ada0eaed484567b1c07870f6c82eb0a88.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%BD%E7%94%9F%E7%BB%93%E5%BC%A6&page=1&order=click"
        ]
      },
      {
        id: "576",
        type: "fix",
        title: "僵尸",
        deltime: "0",
        posttime: "1477034605",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/9d04921fa7646907fa087b129f64e68d0c756e4d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%83%B5%E5%B0%B8"
        ]
      },
      {
        id: "575",
        type: "fix",
        title: "困",
        deltime: "0",
        posttime: "1477034579",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/835f1f30d19d95e0f6b9a0e33c59eb5db3d00a7e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%B0"
        ]
      },
      {
        id: "574",
        type: "fix",
        title: "南瓜灯",
        deltime: "0",
        posttime: "1477034405",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6b12ae120a622df4ab5bda54747203e58afeb0c6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%97%E7%93%9C%E7%81%AF"
        ]
      },
      {
        id: "573",
        type: "fix",
        title: "吃药",
        deltime: "0",
        posttime: "1477034101",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ffd36c9244bb23f4f88648203386fc9067a4c40e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E8%8D%AF"
        ]
      },
      {
        id: "572",
        type: "fix",
        title: "搞事",
        deltime: "0",
        posttime: "1477034071",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/7767ebd63553ecc22b246e095fa55b16fc5420f3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%90%9E%E4%BA%8B"
        ]
      },
      {
        id: "571",
        type: "fix",
        title: "PPAP",
        deltime: "0",
        posttime: "1477033993",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9a89870eff12495e137713612e695a24ae369e2d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=PPAP"
        ]
      },
      {
        id: "570",
        type: "fix",
        title: "放假",
        deltime: "0",
        posttime: "1477033922",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a90403b979e707278b4e47bac3c78e549c732134.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%94%BE%E5%81%87"
        ]
      },
      {
        id: "569",
        type: "fix",
        title: "战术目镜启动",
        deltime: "0",
        posttime: "1477033807",
        edittime: "1514972989",
        sttime: "1476946920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d3a375898eba9b787d8240dd8708314119131f44.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%98%E6%9C%AF%E7%9B%AE%E9%95%9C"
        ]
      },
      {
        id: "568",
        type: "fix",
        title: "丛林",
        deltime: "0",
        posttime: "1475232463",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8c84c29a42dcdf789745c6d552766133b94a0534.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%9B%E6%9E%97"
        ]
      },
      {
        id: "567",
        type: "fix",
        title: "非洲欢迎你",
        deltime: "0",
        posttime: "1475232419",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/431f5cbfc1f69e19a474b2def0b0571792fdbe1e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9D%9E%E6%B4%B2%E6%AC%A2%E8%BF%8E%E4%BD%A0"
        ]
      },
      {
        id: "566",
        type: "fix",
        title: "聪哥",
        deltime: "0",
        posttime: "1475232380",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ac2b22633ea1c72b6406c1877a61cb659db8cfea.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%81%AA%E5%93%A5"
        ]
      },
      {
        id: "565",
        type: "fix",
        title: "非洲人 (..•˘_˘•..)",
        deltime: "0",
        posttime: "1475232306",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/140ce02b9c96d6cd6bc82f508247ed785109d0b9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9D%9E%E6%B4%B2"
        ]
      },
      {
        id: "564",
        type: "fix",
        title: "SSR",
        deltime: "0",
        posttime: "1475232266",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/aad1773e1df51757f15f79de91b783ce22151e1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=SSR"
        ]
      },
      {
        id: "563",
        type: "fix",
        title: "静电",
        deltime: "0",
        posttime: "1475232209",
        edittime: "1514972989",
        sttime: "1475145660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/43d84069e3db486f24739e2c406ebbc13a33ba8e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9D%99%E7%94%B5"
        ]
      },
      {
        id: "562",
        type: "fix",
        title: "舔冰棒",
        deltime: "0",
        posttime: "1474973710",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e530a4b3b893fd54e95930e3898adf092f764b22.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%88%94%E5%86%B0"
        ]
      },
      {
        id: "561",
        type: "fix",
        title: "翻墙",
        deltime: "0",
        posttime: "1474973671",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/64749730eb6a0238f61ee4d603197dc3dd1193a1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BF%BB%E5%A2%99"
        ]
      },
      {
        id: "560",
        type: "fix",
        title: "动如脱兔",
        deltime: "0",
        posttime: "1474973639",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/69ea913485d7719489a3f5fe0c0c7c85130584ff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8A%A8%E5%A6%82%E8%84%B1%E5%85%94"
        ]
      },
      {
        id: "559",
        type: "fix",
        title: "娃娃机",
        deltime: "0",
        posttime: "1474973603",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a18bb9aa9fd32cf3fed25566cfd2b126e5ecc378.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A8%83%E5%A8%83%E6%9C%BA"
        ]
      },
      {
        id: "558",
        type: "fix",
        title: "告白实行委员会",
        deltime: "0",
        posttime: "1474973573",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a7198ebd51ddeb644f44630fbbf5224d2474120c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%8A%E7%99%BD%E5%AE%9E%E8%A1%8C%E5%A7%94%E5%91%98%E4%BC%9A"
        ]
      },
      {
        id: "557",
        type: "fix",
        title: "G胖",
        deltime: "0",
        posttime: "1474973533",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ddc290d2e010e3dbe3356bbded54e5cb26fdea48.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=G%E8%83%96"
        ]
      },
      {
        id: "556",
        type: "fix",
        title: "死鱼眼",
        deltime: "0",
        posttime: "1474973463",
        edittime: "1514972989",
        sttime: "1474887000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9668a491b4e159c79aa0b1d8f9527eaba0244463.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AD%BB%E9%B1%BC%E7%9C%BC"
        ]
      },
      {
        id: "555",
        type: "fix",
        title: "休闲",
        deltime: "0",
        posttime: "1474781201",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/13bafd46d175e4f753153e8d5fb4d618ba479e57.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BC%91%E9%97%B2"
        ]
      },
      {
        id: "554",
        type: "fix",
        title: "飞吻",
        deltime: "0",
        posttime: "1474781174",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b22d4b55626a9924a85f931529a95b029366660d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A3%9E%E5%90%BB"
        ]
      },
      {
        id: "553",
        type: "fix",
        title: "嘴馋",
        deltime: "0",
        posttime: "1474781145",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8632ddf29548597302d2c667d3506303adbe02a4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%98%B4%E9%A6%8B"
        ]
      },
      {
        id: "552",
        type: "fix",
        title: "嘻嘻嘻",
        deltime: "0",
        posttime: "1474781095",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c50d5d8c7a93c31a074a54c83057b06ae0c20857.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%98%BB%E5%98%BB%E5%98%BB"
        ]
      },
      {
        id: "551",
        type: "fix",
        title: "调教",
        deltime: "0",
        posttime: "1474781045",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/dcb9411062229fbaaa09c36cc42438f98974ca1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B0%83%E6%95%99"
        ]
      },
      {
        id: "550",
        type: "fix",
        title: "科学",
        deltime: "0",
        posttime: "1474779827",
        edittime: "1514972989",
        sttime: "1474692840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/04419daf939342513ff3220551b6c199a43f4558.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A7%91%E5%AD%A6"
        ]
      },
      {
        id: "549",
        type: "fix",
        title: "猪猪",
        deltime: "0",
        posttime: "1474440111",
        edittime: "1514972989",
        sttime: "1474353540",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/bfd556a757c6e8b489fa183e61246e526183e9ae.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%AA"
        ]
      },
      {
        id: "548",
        type: "fix",
        title: "一起摇摆",
        deltime: "0",
        posttime: "1474440063",
        edittime: "1514972989",
        sttime: "1474353540",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5ddef1dfb0f8a4a8ed160195e942fd41c7922b01.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%91%87%E6%91%86"
        ]
      },
      {
        id: "547",
        type: "fix",
        title: "坏笑",
        deltime: "0",
        posttime: "1474439982",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2060313be66420dd721fa8f73666c191d9df586c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9D%8F%E7%AC%912"
        ]
      },
      {
        id: "546",
        type: "fix",
        title: "买买买",
        deltime: "0",
        posttime: "1474439944",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f42cdace4d5436e960ecb3e19705662e38863b55.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B9%B0%E4%B9%B0%E4%B9%B0"
        ]
      },
      {
        id: "545",
        type: "fix",
        title: "作业向BGM",
        deltime: "0",
        posttime: "1474439907",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b9c0a8b257c1b5f98433ce68f8e51613ba6a8cca.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BD%9C%E4%B8%9A%E5%90%91"
        ]
      },
      {
        id: "544",
        type: "fix",
        title: "拉伸运动",
        deltime: "0",
        posttime: "1474439869",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3716fb767dffd5f9cbc380a492c4dbfd93bb486b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8B%89%E4%BC%B8"
        ]
      },
      {
        id: "543",
        type: "fix",
        title: "滚来滚去",
        deltime: "0",
        posttime: "1474439764",
        edittime: "1514972989",
        sttime: "1474353060",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/dc47a10c5bf327309fa459436f79f2f49f31ae88.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%BB%9A%E6%9D%A5%E6%BB%9A%E5%8E%BB"
        ]
      },
      {
        id: "542",
        type: "fix",
        title: "Yoga",
        deltime: "0",
        posttime: "1474270692",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/83f04dc39521dcf567121037f982ea91e7306b76.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%91%9C%E4%BC%BD"
        ]
      },
      {
        id: "541",
        type: "fix",
        title: "魂斗罗",
        deltime: "0",
        posttime: "1474270622",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/04d8d945bcaa05646514d00ba6f664507cd6fd1e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%82%E6%96%97%E7%BD%97"
        ]
      },
      {
        id: "540",
        type: "fix",
        title: "百战天虫",
        deltime: "0",
        posttime: "1474270567",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2cdc0609096c9beb3a6c237b0bd7613c3600b098.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%99%BE%E6%88%98%E5%A4%A9%E8%99%AB"
        ]
      },
      {
        id: "539",
        type: "fix",
        title: "蝴蝶",
        deltime: "0",
        posttime: "1474270514",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/92638e9e9cbb3429d4e48486b7992ac4c79e9ccd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%9D%B4%E8%9D%B6"
        ]
      },
      {
        id: "538",
        type: "fix",
        title: "跳绳",
        deltime: "0",
        posttime: "1474270432",
        edittime: "1514972989",
        sttime: "1474183800",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7c8759c0d6ccb15383b8cd8655bec5bb3255b3e9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%B3%E7%BB%B3"
        ]
      },
      {
        id: "537",
        type: "fix",
        title: "脑洞",
        deltime: "0",
        posttime: "1473734801",
        edittime: "1514972989",
        sttime: "1473648300",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7e729b0d2e96431d00b98253a82f840ba0c9b992.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%84%91%E6%B4%9E"
        ]
      },
      {
        id: "536",
        type: "fix",
        title: "卧槽",
        deltime: "0",
        posttime: "1473734691",
        edittime: "1514972989",
        sttime: "1473648120",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c8705a26f2cfa12bcd25a53892268f2b7b7347a5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%A7%E6%A7%BD"
        ]
      },
      {
        id: "535",
        type: "fix",
        title: "瑟瑟发抖",
        deltime: "0",
        posttime: "1473734614",
        edittime: "1514972989",
        sttime: "1473648120",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/715f8793f5c1af969deff434029de68749c3bf76.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%91%9F%E7%91%9F%E5%8F%91%E6%8A%96"
        ]
      },
      {
        id: "534",
        type: "fix",
        title: "露脸",
        deltime: "0",
        posttime: "1473669258",
        edittime: "1514972989",
        sttime: "1473582660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/82264be44c5cbbfdad61b1bd5b7594b5c28409ec.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9C%B2%E8%84%B8"
        ]
      },
      {
        id: "533",
        type: "fix",
        title: "泡沫",
        deltime: "0",
        posttime: "1473669224",
        edittime: "1514972989",
        sttime: "1473582660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7362d4c40cccad4cc63611aa8ff19953cd084c24.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B3%A1%E6%B2%AB"
        ]
      },
      {
        id: "532",
        type: "fix",
        title: "呆毛",
        deltime: "0",
        posttime: "1473669183",
        edittime: "1514972989",
        sttime: "1473582660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6e88bc9235e3648a96cd74c28d99491ca0c4b338.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%86%E6%AF%9B"
        ]
      },
      {
        id: "531",
        type: "fix",
        title: "卖萌",
        deltime: "0",
        posttime: "1473669146",
        edittime: "1514972989",
        sttime: "1473582660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8a6375683ae2084631e39916be15325846d2fe1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%96%E8%90%8C"
        ]
      },
      {
        id: "530",
        type: "fix",
        title: "哆啦A梦",
        deltime: "0",
        posttime: "1473387971",
        edittime: "1514972989",
        sttime: "1473301380",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/37dea027fefc96a9e63b91400b870b82aa93745c.gif",
        weight: "0",
        links: [
          "https://bangumi.bilibili.com/movie/11870/"
        ]
      },
      {
        id: "529",
        type: "fix",
        title: "蛋包饭",
        deltime: "0",
        posttime: "1473133768",
        edittime: "1514972989",
        sttime: "1473047100",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b04bdcd80140b6b8539288bc3da72b6763af0660.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%9B%8B%E5%8C%85%E9%A5%AD"
        ]
      },
      {
        id: "528",
        type: "fix",
        title: "鹅",
        deltime: "0",
        posttime: "1473133734",
        edittime: "1514972989",
        sttime: "1473047100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a995985cca22ef2675348eedc9fa5ae7c4a85370.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%B9%85"
        ]
      },
      {
        id: "527",
        type: "fix",
        title: "散步",
        deltime: "0",
        posttime: "1473133708",
        edittime: "1514972989",
        sttime: "1473047100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f8f3ddb128b38687be7fb7918c21abbbc9b1b5b5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%95%A3%E6%AD%A5"
        ]
      },
      {
        id: "526",
        type: "fix",
        title: "速写",
        deltime: "0",
        posttime: "1473072559",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8359bad2495b6a348b04a2ebde16ea9547c2c3b4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%80%9F%E5%86%99"
        ]
      },
      {
        id: "525",
        type: "fix",
        title: "破蛋",
        deltime: "0",
        posttime: "1473072536",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f612b62a9609000da7a5d5e22ab2ba52a9bd006a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A0%B4%E8%9B%8B"
        ]
      },
      {
        id: "524",
        type: "fix",
        title: "泡泡",
        deltime: "0",
        posttime: "1473072509",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/feca114aaaba8a35f7febc0b9f8920959e31d918.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B3%A1%E6%B3%A1"
        ]
      },
      {
        id: "523",
        type: "fix",
        title: "大力",
        deltime: "0",
        posttime: "1473072493",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ca3f6944301a54b5dedd214fd7c74dfb0178ff44.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A7%E5%8A%9B"
        ]
      },
      {
        id: "522",
        type: "fix",
        title: "婴儿",
        deltime: "0",
        posttime: "1473072467",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/728b706186874e0da8f49b4bff057688b85ce90a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A9%B4%E5%84%BF"
        ]
      },
      {
        id: "521",
        type: "fix",
        title: "腿控福利",
        deltime: "0",
        posttime: "1473072422",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2eb48866889e8667abe5be2e3b3ed37799ff2765.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%95%BF%E8%85%BF"
        ]
      },
      {
        id: "520",
        type: "fix",
        title: "禁烟",
        deltime: "0",
        posttime: "1473072400",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/19ec7aa9f6543882e6a5f5b08f55de83f34dce42.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A6%81%E7%83%9F"
        ]
      },
      {
        id: "519",
        type: "fix",
        title: "生无可恋",
        deltime: "0",
        posttime: "1473072369",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/2596e298010cea772966b7b0c869dc697c501e2f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%94%9F%E6%97%A0%E5%8F%AF%E6%81%8B"
        ]
      },
      {
        id: "518",
        type: "fix",
        title: "快递",
        deltime: "0",
        posttime: "1473072307",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e1762b1396c9961dac2a77c93d0b7bc2f7998dd0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%AB%E9%80%92"
        ]
      },
      {
        id: "517",
        type: "fix",
        title: "odds&ends",
        deltime: "0",
        posttime: "1473072269",
        edittime: "1514972989",
        sttime: "1472985660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6ecb8eaba4e38ab2d3eec0e98fa6875c89f126d3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=ODDS+AND+ENDS"
        ]
      },
      {
        id: "516",
        type: "fix",
        title: "鸡腿",
        deltime: "0",
        posttime: "1472723482",
        edittime: "1514972989",
        sttime: "1472637000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a1957fb3b3acaad31c054757f9b0b168d09b0b60.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%B8%A1%E8%85%BF"
        ]
      },
      {
        id: "515",
        type: "fix",
        title: "热",
        deltime: "0",
        posttime: "1472723446",
        edittime: "1514972989",
        sttime: "1472637000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c4fb3cde4e02df97f28c5b1dde11aa8035c82042.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%83%AD"
        ]
      },
      {
        id: "514",
        type: "fix",
        title: "无聊",
        deltime: "0",
        posttime: "1472723409",
        edittime: "1514972989",
        sttime: "1472636400",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/4cabeffe32798efdb782331312a2cb9d83af8f18.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%97%A0%E8%81%8A"
        ]
      },
      {
        id: "512",
        type: "fix",
        title: "一个亿",
        deltime: "0",
        posttime: "1472723301",
        edittime: "1514972989",
        sttime: "1472636400",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/93028ba79a997b444f0d70fbedddeaf14af876a1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%80%E4%B8%AA%E4%BA%BF"
        ]
      },
      {
        id: "511",
        type: "fix",
        title: "打豆豆",
        deltime: "0",
        posttime: "1472723249",
        edittime: "1514972989",
        sttime: "1472636400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/12b927e0ae4cb690bd53a75308152beea0bc80c1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%93%E8%B1%86%E8%B1%86"
        ]
      },
      {
        id: "510",
        type: "fix",
        title: "沼跃鱼",
        deltime: "0",
        posttime: "1472468014",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5a07738599177591152dfa586846644dfc1369b0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B2%BC%E8%B7%83%E9%B1%BC"
        ]
      },
      {
        id: "509",
        type: "fix",
        title: "可达鸭",
        deltime: "0",
        posttime: "1472467994",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e7b7a306ae643fec59558a9162d32ec38c882de1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8F%AF%E8%BE%BE%E9%B8%AD"
        ]
      },
      {
        id: "508",
        type: "fix",
        title: "毁童年",
        deltime: "0",
        posttime: "1472467967",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/227bb230e487f687d8440228b83ac605129457ec.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AF%81%E7%AB%A5%E5%B9%B4"
        ]
      },
      {
        id: "507",
        type: "fix",
        title: "りりり",
        deltime: "0",
        posttime: "1472467904",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d616a2126d13955974909ce316c3740cb38747f5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E3%82%8A%E3%82%8A%E3%82%8A"
        ]
      },
      {
        id: "506",
        type: "fix",
        title: "屎壳郎",
        deltime: "0",
        posttime: "1472467884",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/684ba732f6d07f054f537932e120001a725f55da.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B1%8E%E5%A3%B3%E9%83%8E"
        ]
      },
      {
        id: "505",
        type: "fix",
        title: "回复",
        deltime: "0",
        posttime: "1472467844",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f2c01cab66b908f4f486b8b4a295c43d5bbb57db.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%9E%E5%A4%8D"
        ]
      },
      {
        id: "504",
        type: "fix",
        title: "求生之路",
        deltime: "0",
        posttime: "1472467821",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/05c169b61982ad641b529576be63424729bb6108.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B1%82%E7%94%9F%E4%B9%8B%E8%B7%AF"
        ]
      },
      {
        id: "503",
        type: "fix",
        title: "幽灵",
        deltime: "0",
        posttime: "1472467789",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/02b8b884e435959ec1714ca68168235bc9fe98f4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B9%BD%E7%81%B5"
        ]
      },
      {
        id: "502",
        type: "fix",
        title: "没钱",
        deltime: "0",
        posttime: "1472467751",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/bb823d5639d3142d7ec69d1ef61f884fe1842de0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B2%A1%E9%92%B1"
        ]
      },
      {
        id: "501",
        type: "fix",
        title: "半条命",
        deltime: "0",
        posttime: "1472467715",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f28cd7af5832d997bd9c4706dfb4404ec96ce69a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%8A%E6%9D%A1%E5%91%BD"
        ]
      },
      {
        id: "500",
        type: "fix",
        title: "抖腿",
        deltime: "0",
        posttime: "1472467419",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/64882d1f0bee58775384dddd972505fe2b831940.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%96%E8%85%BF"
        ]
      },
      {
        id: "499",
        type: "fix",
        title: "干枯",
        deltime: "0",
        posttime: "1472467371",
        edittime: "1514972989",
        sttime: "1472380920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9685fe4a9ddc4ec087e62109928e750c1c19b742.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B9%B2%E6%9E%AF"
        ]
      },
      {
        id: "498",
        type: "fix",
        title: "气球",
        deltime: "0",
        posttime: "1471949013",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6ccca20dd7211d21fa32080576f51d2be44919de.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B0%94%E7%90%83"
        ]
      },
      {
        id: "497",
        type: "fix",
        title: "炼金术",
        deltime: "0",
        posttime: "1471948996",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ae07e00404a1ddb6083153ef440c7ec31b8c0b5b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%82%BC%E9%87%91%E6%9C%AF"
        ]
      },
      {
        id: "496",
        type: "fix",
        title: "有毒",
        deltime: "0",
        posttime: "1471948978",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8ae4200fbcb60b3f29e4ce75e27ba144145b366a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9C%89%E6%AF%92"
        ]
      },
      {
        id: "495",
        type: "fix",
        title: "四叶草",
        deltime: "0",
        posttime: "1471948964",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/28c17ed8cfc3394149a6814a4a53086dee79c053.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%9B%E5%8F%B6%E8%8D%89"
        ]
      },
      {
        id: "494",
        type: "fix",
        title: "冷",
        deltime: "0",
        posttime: "1471948902",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/73100795fd5fd7ab885319d777ffd38f134ace28.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B7"
        ]
      },
      {
        id: "493",
        type: "fix",
        title: "C菌",
        deltime: "0",
        posttime: "1471948880",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d0d0cf65e2644c86a4c71ba96abcd9d0e7251e2d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=C%E8%8F%8C"
        ]
      },
      {
        id: "492",
        type: "fix",
        title: "冰天雪地",
        deltime: "0",
        posttime: "1471948846",
        edittime: "1514972989",
        sttime: "1471862220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/89ee85942e3f1a76de9e73b91041246938f7bf7c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B0%E5%A4%A9%E9%9B%AA%E5%9C%B0"
        ]
      },
      {
        id: "491",
        type: "fix",
        title: "水母",
        deltime: "0",
        posttime: "1471598410",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d9ae025039cebbf6c3c8785b4292cf9283a28235.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B0%B4%E6%AF%8D"
        ]
      },
      {
        id: "490",
        type: "fix",
        title: "自来水",
        deltime: "0",
        posttime: "1471598393",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ba02e18a191fe1b98b9cf9314f065f0ee185534f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%87%AA%E6%9D%A5%E6%B0%B4"
        ]
      },
      {
        id: "489",
        type: "fix",
        title: "rap",
        deltime: "0",
        posttime: "1471598372",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e6b0b05ca85b3dd083e122b22007cef7ff3760e4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=rap"
        ]
      },
      {
        id: "488",
        type: "fix",
        title: "B-BOX",
        deltime: "0",
        posttime: "1471598349",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/96c439a8ffff903d48c3b14d64fca92bf8af8f04.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=bbox"
        ]
      },
      {
        id: "487",
        type: "fix",
        title: "柠檬",
        deltime: "0",
        posttime: "1471598322",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d21e14162ed6ed5585321b0e684b7d1ea17780dd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9F%A0%E6%AA%AC"
        ]
      },
      {
        id: "486",
        type: "fix",
        title: "GTA",
        deltime: "0",
        posttime: "1471595877",
        edittime: "1514972989",
        sttime: "1471509420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ba6aa88c3e43e6c0d0bb3a7a189d8ba910874702.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=GTA"
        ]
      },
      {
        id: "485",
        type: "fix",
        title: "垃圾食品",
        deltime: "0",
        posttime: "1471406539",
        edittime: "1514972989",
        sttime: "1471319880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/26c2f30f1bcf4ae3334e6a39468b3dc681b78b14.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9E%83%E5%9C%BE%E9%A3%9F%E5%93%81"
        ]
      },
      {
        id: "484",
        type: "fix",
        title: "温泉",
        deltime: "0",
        posttime: "1471406507",
        edittime: "1514972989",
        sttime: "1471319880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a82739d278730041812d99f0beb97a4b93c28434.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B8%A9%E6%B3%89"
        ]
      },
      {
        id: "483",
        type: "fix",
        title: "跳水",
        deltime: "0",
        posttime: "1471406479",
        edittime: "1514972989",
        sttime: "1471319880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b785d81d4a6aa170167ba5a0d3f74922d796fc9b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%B3%E6%B0%B4"
        ]
      },
      {
        id: "482",
        type: "fix",
        title: "奥运会",
        deltime: "0",
        posttime: "1471406336",
        edittime: "1514972989",
        sttime: "1471319880",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/002ffe9ca353bbe264938d31d39cde8524931029.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%A5%E8%BF%90%E4%BC%9A"
        ]
      },
      {
        id: "481",
        type: "fix",
        title: "西瓜",
        deltime: "0",
        posttime: "1471254974",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/bc7d16c2d1bbed0ce1610496fee8657e041612bc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%A5%BF%E7%93%9C"
        ]
      },
      {
        id: "480",
        type: "fix",
        title: "豌豆",
        deltime: "0",
        posttime: "1471254937",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/727a4abaf6d8bea7d8b7a9f312ee6063463d0628.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B1%8C%E8%B1%86"
        ]
      },
      {
        id: "479",
        type: "fix",
        title: "数位板",
        deltime: "0",
        posttime: "1471254919",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6a1a80783db77bca5effb3715c253f41fffc1eb3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%95%B0%E4%BD%8D%E6%9D%BF"
        ]
      },
      {
        id: "478",
        type: "fix",
        title: "乒乓",
        deltime: "0",
        posttime: "1471254896",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/10d779949755fdadad4e8b58776bc62815d759bb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B9%92%E4%B9%93"
        ]
      },
      {
        id: "477",
        type: "fix",
        title: "冒泡",
        deltime: "0",
        posttime: "1471254872",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4bda5b53b06c650cf031b57af51e6713599b22c5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%92%E6%B3%A1"
        ]
      },
      {
        id: "476",
        type: "fix",
        title: "胡萝卜",
        deltime: "0",
        posttime: "1471254847",
        edittime: "1514972989",
        sttime: "1471168320",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1077b524d400cda27b32837e4c589bce685a7d4e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%83%A1%E8%90%9D%E5%8D%9C"
        ]
      },
      {
        id: "475",
        type: "fix",
        title: "眼神犀利",
        deltime: "0",
        posttime: "1470975304",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/57ca64365d096baa64ed417d7917c2ad2b27c8dd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9C%BC%E7%A5%9E%E7%8A%80%E5%88%A9"
        ]
      },
      {
        id: "474",
        type: "fix",
        title: "智障",
        deltime: "0",
        posttime: "1470975275",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4c0902c7f1fb90c0155d82a81610cb7ea5fe6b73.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%99%BA%E9%9A%9C"
        ]
      },
      {
        id: "473",
        type: "fix",
        title: "扑街",
        deltime: "0",
        posttime: "1470975197",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/07ad60518b465174566fd74d9d08cc826a6c1675.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%91%E8%A1%97"
        ]
      },
      {
        id: "472",
        type: "fix",
        title: "近视",
        deltime: "0",
        posttime: "1470975129",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/63e78addf099ed2df8ceb6dcae9cac701d1223e8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%BF%91%E8%A7%86"
        ]
      },
      {
        id: "471",
        type: "fix",
        title: "放空",
        deltime: "0",
        posttime: "1470975101",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/42e9bce4727a3b3eb827d6f08d0f6a0f0cc50741.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%94%BE%E7%A9%BA"
        ]
      },
      {
        id: "470",
        type: "fix",
        title: "V+",
        deltime: "0",
        posttime: "1470975058",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/22e658a6055b8074232d521ede3f5543b3e22ca2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=vocaloid"
        ]
      },
      {
        id: "469",
        type: "fix",
        title: "洪荒之力",
        deltime: "0",
        posttime: "1470974992",
        edittime: "1514972989",
        sttime: "1470888360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/4f3f6d65ad40bede3861911277ee53e0712132d6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B4%AA%E8%8D%92%E4%B9%8B%E5%8A%9B"
        ]
      },
      {
        id: "468",
        type: "fix",
        title: "狗粮科科",
        deltime: "0",
        posttime: "1470811983",
        edittime: "1514972989",
        sttime: "1470725100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d1c7747da3e2bc73ee14a92f2ecbb651d9f428c6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8B%97%E7%B2%AE"
        ]
      },
      {
        id: "467",
        type: "fix",
        title: "啊啾~",
        deltime: "0",
        posttime: "1470811051",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/601564e67d2bd5f542b4558a92fae98074b70d8e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B7%E5%9A%8F"
        ]
      },
      {
        id: "466",
        type: "fix",
        title: "猫shi",
        deltime: "0",
        posttime: "1470811015",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6c60b1dcedddcc59ee4960accebdde03db52e1a2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%AB%E5%B1%8E"
        ]
      },
      {
        id: "465",
        type: "fix",
        title: "灵能百分百",
        deltime: "0",
        posttime: "1470810981",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/03195adabf64db2fe8ce65012aa16abd337503ba.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%81%B5%E8%83%BD%E7%99%BE%E5%88%86%E7%99%BE"
        ]
      },
      {
        id: "464",
        type: "fix",
        title: "脱团狗",
        deltime: "0",
        posttime: "1470810913",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/852fb270e78b41a2e3543313e8a6ef01884efc9a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%84%B1%E5%9B%A2%E7%8B%97"
        ]
      },
      {
        id: "463",
        type: "fix",
        title: "约会(x",
        deltime: "0",
        posttime: "1470810634",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6ee6c236a00d3ae6fc71105a89dff9bba7ad29c5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BA%A6%E4%BC%9A"
        ]
      },
      {
        id: "462",
        type: "fix",
        title: "黄少天",
        deltime: "0",
        posttime: "1470810600",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/298526f9e3d876528ccd4dbe007ea90e15c00560.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%84%E5%B0%91%E5%A4%A9"
        ]
      },
      {
        id: "461",
        type: "fix",
        title: "二次螈",
        deltime: "0",
        posttime: "1470810570",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/06a43f02b5f0b213cf657483a89860ced6b77ffe.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BA%8C%E6%AC%A1%E5%85%83"
        ]
      },
      {
        id: "460",
        type: "fix",
        title: "单身汪",
        deltime: "0",
        posttime: "1470810517",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c7039f23fe40c40fdf3d35856cbb77a320797465.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%95%E8%BA%AB%E7%8B%97"
        ]
      },
      {
        id: "459",
        type: "fix",
        title: "undertale",
        deltime: "0",
        posttime: "1470810488",
        edittime: "1514972989",
        sttime: "1470723960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e2ed7dcd20514146a21d69bcb6ba8cfbe7c72c18.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=undertale"
        ]
      },
      {
        id: "458",
        type: "fix",
        title: "MMD",
        deltime: "0",
        posttime: "1470280075",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/fcfbcb2ece446f12f41d3bd02bfae7dd81716cb6.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/video/douga-mmd-1.html"
        ]
      },
      {
        id: "457",
        type: "fix",
        title: "我想静静",
        deltime: "0",
        posttime: "1470280036",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/fb3648a6cd2432188864d8b83882c22fc1928468.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%91%E6%83%B3%E9%9D%99%E9%9D%99"
        ]
      },
      {
        id: "456",
        type: "fix",
        title: "闹钟(不",
        deltime: "0",
        posttime: "1470280010",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/095dcee824669638cc345397e5082c06b3700a1e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%97%B9%E9%92%9F"
        ]
      },
      {
        id: "455",
        type: "fix",
        title: "辣眼睛",
        deltime: "0",
        posttime: "1470279975",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a45a62addb907b637653c33abccc8749db83d818.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%BE%A3%E7%9C%BC%E7%9D%9B"
        ]
      },
      {
        id: "454",
        type: "fix",
        title: "极乐净土",
        deltime: "0",
        posttime: "1470279934",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/02ec6d14dd67ef2b9d1e9b471c93842c91d63f69.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9E%81%E4%B9%90%E5%87%80%E5%9C%9F"
        ]
      },
      {
        id: "453",
        type: "fix",
        title: "罪袋",
        deltime: "0",
        posttime: "1470279888",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/497ecdf8d6004bee3e5e3cacb20e573a24d54003.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BD%AA%E8%A2%8B"
        ]
      },
      {
        id: "452",
        type: "fix",
        title: "沙画",
        deltime: "0",
        posttime: "1470279780",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2a7e707e79e12b10ab747f4afdf0331db14c73a6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B2%99%E7%94%BB"
        ]
      },
      {
        id: "451",
        type: "fix",
        title: "扭扭扭腰",
        deltime: "0",
        posttime: "1470279754",
        edittime: "1514972989",
        sttime: "1470193020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8808c59621c12a1da8e2c8533ed96fa95fe833dd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%AD%E8%85%B0"
        ]
      },
      {
        id: "450",
        type: "fix",
        title: "刺客信条",
        deltime: "0",
        posttime: "1470036936",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b3d9d5cacf411f4beca284b48d8cd7fecfacdbfd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%88%BA%E5%AE%A2%E4%BF%A1%E6%9D%A1"
        ]
      },
      {
        id: "449",
        type: "fix",
        title: "园艺大师",
        deltime: "0",
        posttime: "1470036831",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ba8a467c6b035458021b34b23876d710154a0ab1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%AD%E8%89%BA"
        ]
      },
      {
        id: "448",
        type: "fix",
        title: "鸟之诗",
        deltime: "0",
        posttime: "1470036711",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/55876ccf8459158adf8fdf82aceadaba4061cc40.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%B8%9F%E4%B9%8B%E8%AF%97"
        ]
      },
      {
        id: "447",
        type: "fix",
        title: "羞羞",
        deltime: "0",
        posttime: "1470036609",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6f08c653f9d3070d3551d6b8694202dbf7ed02e3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%B3%E7%BE%9E"
        ]
      },
      {
        id: "446",
        type: "fix",
        title: "东方俯卧撑",
        deltime: "0",
        posttime: "1470036527",
        edittime: "1514972989",
        sttime: "1469949540",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1b494e573c0b5b25b4e966a61fee5c15512c17bb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BF%AF%E5%8D%A7%E6%92%91"
        ]
      },
      {
        id: "445",
        type: "fix",
        title: "小提琴",
        deltime: "0",
        posttime: "1469611494",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ea9b245ba67d27593bc73bdbd4230f60521e2222.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B0%8F%E6%8F%90%E7%90%B4"
        ]
      },
      {
        id: "444",
        type: "fix",
        title: "萨克斯",
        deltime: "0",
        posttime: "1469611468",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8dd6ea6c08d6f3b18b7cc394866685355beac090.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%90%A8%E5%85%8B%E6%96%AF"
        ]
      },
      {
        id: "443",
        type: "fix",
        title: "酷暑",
        deltime: "0",
        posttime: "1469611439",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d9e12dc752a42da832bba2b730b004c2380e37a1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%85%B7%E6%9A%91"
        ]
      },
      {
        id: "442",
        type: "fix",
        title: "羁绊",
        deltime: "0",
        posttime: "1469611415",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5a57c6c0831f7c7e26e5fd500911f6b71480bfba.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%81%E7%BB%8A"
        ]
      },
      {
        id: "441",
        type: "fix",
        title: "挥手",
        deltime: "0",
        posttime: "1469611375",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/08238267a9b88adf85fa860fc78981c9a94b0e58.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8C%A5%E6%89%8B"
        ]
      },
      {
        id: "440",
        type: "fix",
        title: "读书",
        deltime: "0",
        posttime: "1469607053",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1f257a22ecff21b9a215d80ad3360a1c328c3e90.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%AF%BB%E4%B9%A6"
        ]
      },
      {
        id: "439",
        type: "fix",
        title: "打针",
        deltime: "0",
        posttime: "1469607009",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e5d4ec30d15b0950658833f5ea14c3b93edb38b3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%93%E9%92%88"
        ]
      },
      {
        id: "438",
        type: "fix",
        title: "插画师",
        deltime: "0",
        posttime: "1469606880",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8ec4105a29565696823a556ea42cc94ce90f9a07.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8F%92%E7%94%BB%E5%B8%88"
        ]
      },
      {
        id: "437",
        type: "fix",
        title: "舞蹈",
        deltime: "0",
        posttime: "1469606649",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/2821554ce9fde44f787bbae127e5079742933935.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%88%9E%E8%B9%88"
        ]
      },
      {
        id: "436",
        type: "fix",
        title: "拼图",
        deltime: "0",
        posttime: "1469606410",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/baa81fa699af6340201be843f81d93239363bcc8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8B%BC%E5%9B%BE"
        ]
      },
      {
        id: "435",
        type: "fix",
        title: "凝视",
        deltime: "0",
        posttime: "1469606376",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4e0807349c9f67e8e6de755c48189ff3dba6b715.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%87%9D%E8%A7%86"
        ]
      },
      {
        id: "434",
        type: "fix",
        title: "魔法少女小圆",
        deltime: "0",
        posttime: "1469606333",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8cf9c4967327a32f1c90f93b7f85f478a9e97b3a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86"
        ]
      },
      {
        id: "433",
        type: "fix",
        title: "灵魂画手",
        deltime: "0",
        posttime: "1469606284",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/51d68c4b744744fee9f567876f1518b0c538f472.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%81%B5%E9%AD%82%E7%94%BB%E6%89%8B"
        ]
      },
      {
        id: "432",
        type: "fix",
        title: "扭腰",
        deltime: "0",
        posttime: "1469606240",
        edittime: "1514972989",
        sttime: "1469519100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/de10e8a4fc08b0183182396b9afc830a149e2389.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%AD%E8%85%B0"
        ]
      },
      {
        id: "431",
        type: "fix",
        title: "冷汗",
        deltime: "0",
        posttime: "1469180684",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1acfb9cb4190eba7e4fd48c7426f698a87428a05.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B7%E6%B1%97"
        ]
      },
      {
        id: "430",
        type: "fix",
        title: "画画",
        deltime: "0",
        posttime: "1469180637",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/59b1223db28da7b0c040895cf6960c62f8143dcb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%94%BB%E7%94%BB"
        ]
      },
      {
        id: "429",
        type: "fix",
        title: "抖腿",
        deltime: "0",
        posttime: "1469180435",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2c2328bce8071688dd3fba5b0e44a83f5f8917dc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%96%E8%85%BF"
        ]
      },
      {
        id: "428",
        type: "fix",
        title: "电波",
        deltime: "0",
        posttime: "1469180150",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b8abee0e27e8c63cfe836738017a6a0ba47318e0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%94%B5%E6%B3%A2"
        ]
      },
      {
        id: "427",
        type: "fix",
        title: "催泪向",
        deltime: "0",
        posttime: "1469179784",
        edittime: "1514972989",
        sttime: "1469093280",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/74952c377ad1a128b8f1c6da171366e826207848.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%82%AC%E6%B3%AA%E5%90%91"
        ]
      },
      {
        id: "426",
        type: "fix",
        title: "葛优躺",
        deltime: "0",
        posttime: "1469083937",
        edittime: "1514972989",
        sttime: "1468997280",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fb0561550e2ea970612dd2c6c83371a8f63c4fb9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%91%9B%E4%BC%98%E8%BA%BA"
        ]
      },
      {
        id: "425",
        type: "fix",
        title: "good job",
        deltime: "0",
        posttime: "1469083898",
        edittime: "1514972989",
        sttime: "1468997280",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/42e983a34462a7695b14c7dc55ba9692fdd44090.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=good%20job"
        ]
      },
      {
        id: "424",
        type: "fix",
        title: "视力检查",
        deltime: "0",
        posttime: "1468914069",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cee0a7f7303bfdec6f21c437a86aa5feca4dda3e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%A7%86%E5%8A%9B%E6%A3%80%E6%9F%A5"
        ]
      },
      {
        id: "423",
        type: "fix",
        title: "命运石之门",
        deltime: "0",
        posttime: "1468914018",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/505e97fbeb4eb313b230c83bcfd1e0af4741bb02.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%BD%E8%BF%90%E7%9F%B3%E4%B9%8B%E9%97%A8"
        ]
      },
      {
        id: "422",
        type: "fix",
        title: "技术宅",
        deltime: "0",
        posttime: "1468913943",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/cb2fdb92341f682e5ec3f84526ae8bbd051742dc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%80%E6%9C%AF%E5%AE%85"
        ]
      },
      {
        id: "421",
        type: "fix",
        title: "孤岛",
        deltime: "0",
        posttime: "1468913778",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b4e078f2639bc031f91835401087fa7a84d0e56a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AD%A4%E5%B2%9B"
        ]
      },
      {
        id: "420",
        type: "fix",
        title: "冻鳗",
        deltime: "0",
        posttime: "1468913739",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/59a5162b9a48728174b3b66d940237f172ad6f98.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8A%A8%E6%BC%AB"
        ]
      },
      {
        id: "419",
        type: "fix",
        title: "测评",
        deltime: "0",
        posttime: "1468913621",
        edittime: "1514972989",
        sttime: "1468826880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d6cf0bb539727a8d525385f48441a564451f7539.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B5%8B%E8%AF%84"
        ]
      },
      {
        id: "418",
        type: "fix",
        title: "新房昭之",
        deltime: "0",
        posttime: "1468810405",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/4209e73c2a5b55c4391f8ac687ccf0e50ba8e4b6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%96%B0%E6%88%BF%E6%98%AD%E4%B9%8B"
        ]
      },
      {
        id: "417",
        type: "fix",
        title: "圣地巡礼",
        deltime: "0",
        posttime: "1468810376",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/23f9f44dc7296519da3f26b49f1f733f9cb5d838.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9C%A3%E5%9C%B0%E5%B7%A1%E7%A4%BC"
        ]
      },
      {
        id: "416",
        type: "fix",
        title: "听歌向",
        deltime: "0",
        posttime: "1468810333",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/55ec3bdb3f88e619f1428fe940b554beb59bb7c2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%AC%E6%AD%8C%E5%90%91"
        ]
      },
      {
        id: "415",
        type: "fix",
        title: "入坑",
        deltime: "0",
        posttime: "1468810281",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/22309f6212cfce7d52d61c8b67126964c2a5f1b2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%85%A5%E5%9D%91"
        ]
      },
      {
        id: "414",
        type: "fix",
        title: "毕业设计",
        deltime: "0",
        posttime: "1468809952",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/16719dac59b715654e25bbc87b54c94dff4989c6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1"
        ]
      },
      {
        id: "413",
        type: "fix",
        title: "摆渡人",
        deltime: "0",
        posttime: "1468809648",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/edfade7f15316b05faeeb00707ebf4b1f2eb3f95.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%91%86%E6%B8%A1%E4%BA%BA"
        ]
      },
      {
        id: "412",
        type: "fix",
        title: "pokemon go",
        deltime: "0",
        posttime: "1468809527",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0a4ce86d279e6904e9743440c50427f228bf9933.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=pokemon%20go"
        ]
      },
      {
        id: "411",
        type: "fix",
        title: "足球",
        deltime: "0",
        posttime: "1468809467",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/52ba7205d4c6657a2aabb9f90759393ebda1f88c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B6%B3%E7%90%83"
        ]
      },
      {
        id: "410",
        type: "fix",
        title: "无聊",
        deltime: "0",
        posttime: "1468809425",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/00c007b756623b0392a2218a9e9ff7be6ece1ec8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%97%A0%E8%81%8A"
        ]
      },
      {
        id: "409",
        type: "fix",
        title: "架子鼓",
        deltime: "0",
        posttime: "1468809323",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a2f013fe24dfd22d58f995f7e2b3970f345b6054.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9E%B6%E5%AD%90%E9%BC%93"
        ]
      },
      {
        id: "408",
        type: "fix",
        title: "和尚",
        deltime: "0",
        posttime: "1468809220",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bcf23bb6e1fed57e69dce4cca5212cf1a32cbf0c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%92%8C%E5%B0%9A"
        ]
      },
      {
        id: "407",
        type: "fix",
        title: "东离剑游记",
        deltime: "0",
        posttime: "1468809179",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/269a6e55a0b64ba326e0b10b9f0a7ed3b080a947.gif",
        weight: "0",
        links: [
          "https://bangumi.bilibili.com/anime/5064/"
        ]
      },
      {
        id: "406",
        type: "fix",
        title: "ok",
        deltime: "0",
        posttime: "1468809127",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/87e677d7b81d6b4e342c64eb80bb644f477ba947.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=ok"
        ]
      },
      {
        id: "405",
        type: "fix",
        title: "齐木楠雄的灾难",
        deltime: "0",
        posttime: "1468808924",
        edittime: "1514972989",
        sttime: "1468722360",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e3ea2ef84b9bf180186ea9dc5e09c7cbe0a5b0d4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BD%90%E6%9C%A8%E6%A5%A0%E9%9B%84%E7%9A%84%E7%81%BE%E9%9A%BE"
        ]
      },
      {
        id: "404",
        type: "fix",
        title: "屁股",
        deltime: "0",
        posttime: "1468572916",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/7389ccc05054f79c16b7bcf893a93ad305e4aee2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B1%81%E8%82%A1"
        ]
      },
      {
        id: "403",
        type: "fix",
        title: "津岛善子",
        deltime: "0",
        posttime: "1468572861",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/811eba9d63b8e7f238e64092fc8e861ce5a49d4c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B4%A5%E5%B2%9B%E5%96%84%E5%AD%90"
        ]
      },
      {
        id: "402",
        type: "fix",
        title: "積乱雲グラフィティ",
        deltime: "0",
        posttime: "1468572822",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/80d6b8bfb1d2ca4fca2afb48526e82c7ed7bc5d6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A9%8D%E4%B9%B1%E9%9B%B2%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%86%E3%82%A3"
        ]
      },
      {
        id: "401",
        type: "fix",
        title: "黑暗料理",
        deltime: "0",
        posttime: "1468572753",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/56febae51aada7a868bd6a86c773bd743a314a3c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%91%E6%9A%97%E6%96%99%E7%90%86"
        ]
      },
      {
        id: "400",
        type: "fix",
        title: "天真与闪电",
        deltime: "0",
        posttime: "1468572693",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/5fed4e089bdcbf8146def83f3c97ea407d60b1fb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%9C%9F%E4%B8%8E%E9%97%AA%E7%94%B5"
        ]
      },
      {
        id: "399",
        type: "fix",
        title: "赏花",
        deltime: "0",
        posttime: "1468572646",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b37a5f11a9333097d98381d14e3015d14d17a865.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B5%8F%E8%8A%B1"
        ]
      },
      {
        id: "398",
        type: "fix",
        title: "包子",
        deltime: "0",
        posttime: "1468572563",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9233ce9100871a83d96ea1dd99439af7eb7eae1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8C%85%E5%AD%90"
        ]
      },
      {
        id: "397",
        type: "fix",
        title: "手风琴",
        deltime: "0",
        posttime: "1468572526",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/099249da8e4d6ad82ca933f540e7964b55dd0774.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%8B%E9%A3%8E%E7%90%B4"
        ]
      },
      {
        id: "396",
        type: "fix",
        title: "上车",
        deltime: "0",
        posttime: "1468572405",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/53ddb2069d24bbe6d8440a2344b27eb0be7a311e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8A%E8%BD%A6"
        ]
      },
      {
        id: "395",
        type: "fix",
        title: "口琴",
        deltime: "0",
        posttime: "1468572278",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/baf2b4e794f28d43b59a3cf98dafe05e3762bc3d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8F%A3%E7%90%B4"
        ]
      },
      {
        id: "394",
        type: "fix",
        title: "我们仍未知道那天所看见的花的名字",
        deltime: "0",
        posttime: "1468572075",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/107e1c9077ded7be66aa8dc5710b38e30504c030.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%91%E4%BB%AC%E4%BB%8D%E6%9C%AA%E7%9F%A5%E9%81%93%E9%82%A3%E5%A4%A9%E6%89%80%E7%9C%8B%E8%A7%81%E7%9A%84%E8%8A%B1%E7%9A%84%E5%90%8D%E5%AD%97"
        ]
      },
      {
        id: "393",
        type: "fix",
        title: "饱腹",
        deltime: "0",
        posttime: "1468572040",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/5ba039c41f5a6a4eb3e6c3c4745e751689c07899.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E9%A5%B1%E4%BA%86"
        ]
      },
      {
        id: "392",
        type: "fix",
        title: "攻壳机动队",
        deltime: "0",
        posttime: "1468571949",
        edittime: "1514972989",
        sttime: "1468483620",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/72770979cfade1e7cbfb70c5acec544dd9d45d90.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%94%BB%E5%A3%B3%E6%9C%BA%E5%8A%A8%E9%98%9F"
        ]
      },
      {
        id: "391",
        type: "fix",
        title: "粘着系男子15年",
        deltime: "0",
        posttime: "1467692787",
        edittime: "1514972989",
        sttime: "1467603780",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/88d8af2151a1ffb8a83030bf643c242b1c821d5c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%B2%98%E7%9D%80%E7%B3%BB%E7%94%B7%E5%AD%90%2015%E5%B9%B4"
        ]
      },
      {
        id: "390",
        type: "fix",
        title: "银河英雄传说",
        deltime: "0",
        posttime: "1467692079",
        edittime: "1514972989",
        sttime: "1467603780",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c3d65e136821157c3a603aa7a9f448f55c3e60d8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%93%B6%E6%B2%B3%E8%8B%B1%E9%9B%84%E4%BC%A0%E8%AF%B4"
        ]
      },
      {
        id: "389",
        type: "fix",
        title: "下雨",
        deltime: "0",
        posttime: "1467691240",
        edittime: "1514972989",
        sttime: "1467603780",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a9abed328d9f3c6f6767de1b795a2c3c4610d404.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8B%E9%9B%A8"
        ]
      },
      {
        id: "388",
        type: "fix",
        title: "石化",
        deltime: "0",
        posttime: "1467690309",
        edittime: "1514972989",
        sttime: "1467603780",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fc4c234cb28618b777281ed28520efaa3c3f7b40.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9F%B3%E5%8C%96"
        ]
      },
      {
        id: "387",
        type: "fix",
        title: "懵逼",
        deltime: "0",
        posttime: "1467625869",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/484c6be77679b81f42f56c649dc9b811105d9976.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%87%B5%E9%80%BC"
        ]
      },
      {
        id: "386",
        type: "fix",
        title: "量产机",
        deltime: "0",
        posttime: "1467625462",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/3485a50682eb3d730380522254cf5ddb1c83be06.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%87%8F%E4%BA%A7%E6%9C%BA"
        ]
      },
      {
        id: "385",
        type: "fix",
        title: "钢琴",
        deltime: "0",
        posttime: "1467625430",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/1b9fc9843a6afe7efeceec778be07fd76bb7b51b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%92%A2%E7%90%B4"
        ]
      },
      {
        id: "384",
        type: "fix",
        title: "串烧",
        deltime: "0",
        posttime: "1467625396",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/14f958c0ee61df20824f84c072aa1eaef28319d5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%B2%E7%83%A7"
        ]
      },
      {
        id: "383",
        type: "fix",
        title: "博丽神社",
        deltime: "0",
        posttime: "1467624989",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/1f7b6ffa03346eb1f340a28b2c00f259fe75d835.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%9A%E4%B8%BD%E7%A5%9E%E7%A4%BE"
        ]
      },
      {
        id: "382",
        type: "fix",
        title: "章鱼",
        deltime: "0",
        posttime: "1467623385",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/22e33788746f48ce298eaf7443aba64361ce3992.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%AB%A0%E9%B1%BC"
        ]
      },
      {
        id: "381",
        type: "fix",
        title: "秀恩爱",
        deltime: "0",
        posttime: "1467623353",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1f8aa6cd328fee1eaf61d1f59e40e97addc1aae8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A7%80%E6%81%A9%E7%88%B1"
        ]
      },
      {
        id: "380",
        type: "fix",
        title: "喵星人",
        deltime: "0",
        posttime: "1467623279",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/466bcac249baae2df36fba18d7ddd91f26417c0e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B5%E6%98%9F%E4%BA%BA"
        ]
      },
      {
        id: "379",
        type: "fix",
        title: "翻滚",
        deltime: "0",
        posttime: "1467623195",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f0d94316c65a3edf0834182f0d8d9b8d39b56d28.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BF%BB%E6%BB%9A"
        ]
      },
      {
        id: "378",
        type: "fix",
        title: "侏罗纪公园",
        deltime: "0",
        posttime: "1467623143",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/915c3a91fc4a48a5b8f299e8498ddc4a16c8e6de.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BE%8F%E7%BD%97%E7%BA%AA%E5%85%AC%E5%9B%AD"
        ]
      },
      {
        id: "377",
        type: "fix",
        title: "宅舞",
        deltime: "0",
        posttime: "1467623080",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/80bd4fceff66fa41f27547869c5826cf34a5fb8d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%85%E8%88%9E"
        ]
      },
      {
        id: "376",
        type: "fix",
        title: "独立日",
        deltime: "0",
        posttime: "1467623042",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fa6beb54d0923320077aa1272cf7e6b06577d510.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8B%AC%E7%AB%8B%E6%97%A5"
        ]
      },
      {
        id: "375",
        type: "fix",
        title: "米菲",
        deltime: "0",
        posttime: "1467622996",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/43b112f6e863e32589aeecb26a8ec86de55ea811.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%B1%B3%E8%8F%B2"
        ]
      },
      {
        id: "374",
        type: "fix",
        title: "狐狸",
        deltime: "0",
        posttime: "1467622921",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/58e5abb63c05c615d1da48a2cc80e45593a04728.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8B%90%E7%8B%B8"
        ]
      },
      {
        id: "373",
        type: "fix",
        title: "nqrse",
        deltime: "0",
        posttime: "1467622889",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b9c75114669bbc1aa63d5f4176f8f7aeda97b081.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=nqrse"
        ]
      },
      {
        id: "372",
        type: "fix",
        title: "高产似母猪",
        deltime: "0",
        posttime: "1467622799",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/302b8cfa7bcba4f9d4da9b85336b4667a2767bb0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AB%98%E4%BA%A7%E4%BC%BC%E6%AF%8D%E7%8C%AA"
        ]
      },
      {
        id: "371",
        type: "fix",
        title: "装死",
        deltime: "0",
        posttime: "1467622755",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fb6400db3879f4a40d494c1e71819c563c564159.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%A3%85%E6%AD%BB"
        ]
      },
      {
        id: "370",
        type: "fix",
        title: "台风",
        deltime: "0",
        posttime: "1467622719",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/225450593d96c544f154a86bac5126e42c182e96.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8F%B0%E9%A3%8E"
        ]
      },
      {
        id: "369",
        type: "fix",
        title: "跷跷板",
        deltime: "0",
        posttime: "1467622652",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d518dd28c7e63a9e79c58cb7a8b12eb649e387bc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%B7%E8%B7%B7%E6%9D%BF"
        ]
      },
      {
        id: "368",
        type: "fix",
        title: "鬼畜眼镜",
        deltime: "0",
        posttime: "1467622613",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3e80bd4287998c4b814b5c1304d2d0f6decb6dd4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AC%BC%E7%95%9C%20%E7%9C%BC"
        ]
      },
      {
        id: "367",
        type: "fix",
        title: "地球online",
        deltime: "0",
        posttime: "1467622536",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/88aa141f13b97d30d005f3c578d58025f70a5011.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9C%B0%E7%90%83online"
        ]
      },
      {
        id: "366",
        type: "fix",
        title: "报警",
        deltime: "0",
        posttime: "1467622492",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/02690716795fb1ff65f913ee8158c8b3a4bcdac5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%A5%E8%AD%A6"
        ]
      },
      {
        id: "365",
        type: "fix",
        title: "围观",
        deltime: "0",
        posttime: "1467622334",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b5ef65cff936e57738108a0b4c73222527d9b8ea.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%B4%E8%A7%82"
        ]
      },
      {
        id: "364",
        type: "fix",
        title: "日语",
        deltime: "0",
        posttime: "1467621902",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f3e6a7934adeb9dc382b5ab48ef23cb871747e35.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%97%A5%E8%AF%AD"
        ]
      },
      {
        id: "363",
        type: "fix",
        title: "任豚",
        deltime: "0",
        posttime: "1467621861",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/92b4dca6298d196f6da76dfe9f36a977f02160df.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BB%BB%E8%B1%9A"
        ]
      },
      {
        id: "362",
        type: "fix",
        title: "饭团",
        deltime: "0",
        posttime: "1467621805",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0e5f19d622a48b3510e8dd8532e5f9a35aacaa79.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A5%AD%E5%9B%A2"
        ]
      },
      {
        id: "361",
        type: "fix",
        title: "心跳",
        deltime: "0",
        posttime: "1467621704",
        edittime: "1514972989",
        sttime: "1467535020",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/bf935d4f64f149ea3cf3d082f7b05526b5cd81a0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%83%E8%B7%B3"
        ]
      },
      {
        id: "360",
        type: "fix",
        title: "受不了",
        deltime: "0",
        posttime: "1467360158",
        edittime: "1514972989",
        sttime: "1467273480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/19defc47f7ac93fb885a4038d208bed1ea23cc4b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8F%97%E4%B8%8D%E4%BA%86"
        ]
      },
      {
        id: "359",
        type: "fix",
        title: "手办",
        deltime: "0",
        posttime: "1467360088",
        edittime: "1514972989",
        sttime: "1467273480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d520a5ffa3ad994bca4bd1a523583fefbe6d61f0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%8B%E5%8A%9E"
        ]
      },
      {
        id: "358",
        type: "fix",
        title: "日蚀",
        deltime: "0",
        posttime: "1467360050",
        edittime: "1514972989",
        sttime: "1467273480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/5f7d0081b3a2a01d52f2b3a96c824d11f8051352.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%97%A5%E8%9A%80"
        ]
      },
      {
        id: "357",
        type: "fix",
        title: "挠痒痒",
        deltime: "0",
        posttime: "1467359963",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c337d9780767b894af922ebf4e1b43a838b43388.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8C%A0%E7%97%92%E7%97%92"
        ]
      },
      {
        id: "356",
        type: "fix",
        title: "狂魔随便玩玩具",
        deltime: "0",
        posttime: "1467353752",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/56eef81107c4461e614f9a9971d8b7d97674304c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8B%82%E9%AD%94%E9%9A%8F%E4%BE%BF%E7%8E%A9%E7%8E%A9%E5%85%B7"
        ]
      },
      {
        id: "355",
        type: "fix",
        title: "震惊",
        deltime: "0",
        posttime: "1467353710",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8a93e0148bee4d4439a60e5e94c96cc3de0134e3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%9C%87%E6%83%8A"
        ]
      },
      {
        id: "354",
        type: "fix",
        title: "沉默",
        deltime: "0",
        posttime: "1467353667",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/79eb33869af08d24748a764b01cd3fb792dd445a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B2%89%E9%BB%98"
        ]
      },
      {
        id: "353",
        type: "fix",
        title: "刘海",
        deltime: "0",
        posttime: "1467353606",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/79994f3fde343799dc92e649b8e34d0e72ddba47.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%88%98%E6%B5%B7"
        ]
      },
      {
        id: "352",
        type: "fix",
        title: "蕾姆",
        deltime: "0",
        posttime: "1467353552",
        edittime: "1514972989",
        sttime: "1467266580",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/cf8690a44b1c1ea7123280226a86eac3b025a63b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%95%BE%E5%A7%86"
        ]
      },
      {
        id: "351",
        type: "fix",
        title: "护肤",
        deltime: "0",
        posttime: "1467352157",
        edittime: "1514972989",
        sttime: "1467265200",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6abca815cef52069ea99d7506a9cf3e61f4b9337.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%A4%E8%82%A4"
        ]
      },
      {
        id: "350",
        type: "fix",
        title: "蹦迪",
        deltime: "0",
        posttime: "1467352091",
        edittime: "1514972989",
        sttime: "1467265200",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/84f323e3a77a6eafee656f832847603751f3857d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B9%A6%E8%BF%AA"
        ]
      },
      {
        id: "349",
        type: "fix",
        title: "猫耳",
        deltime: "0",
        posttime: "1467025940",
        edittime: "1514972989",
        sttime: "1466937960",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b4a3326de814168501bb4b2afefdac1aa9c45bba.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%AB%E8%80%B3"
        ]
      },
      {
        id: "348",
        type: "fix",
        title: "魔性",
        deltime: "0",
        posttime: "1467025903",
        edittime: "1514972989",
        sttime: "1466937960",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/2f23c0bc2f7cbdd9ec60dfcde5279625af815057.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%80%A7"
        ]
      },
      {
        id: "347",
        type: "fix",
        title: "导弹",
        deltime: "0",
        posttime: "1467024450",
        edittime: "1514972989",
        sttime: "1466937420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b27081d495783b3f3012bae045eed5b9ff1f0e3f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AF%BC%E5%BC%B9"
        ]
      },
      {
        id: "346",
        type: "fix",
        title: "吃饭团",
        deltime: "0",
        posttime: "1467024074",
        edittime: "1514972989",
        sttime: "1466937420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d9cc1a4e653d2870cc024d9174b2cea730164eb4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E9%A5%AD%E5%9B%A2"
        ]
      },
      {
        id: "345",
        type: "fix",
        title: "深井冰",
        deltime: "0",
        posttime: "1466576350",
        edittime: "1514972989",
        sttime: "1466489700",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/274dc4ba9cd77e5ed40f84238d172dd0615b4fa5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B7%B1%E4%BA%95"
        ]
      },
      {
        id: "344",
        type: "fix",
        title: "哥斯拉",
        deltime: "0",
        posttime: "1466576183",
        edittime: "1514972989",
        sttime: "1466489700",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f8c1efb3ea375ace31fea587fe3923a3a5bda519.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%93%A5%E6%96%AF%E6%8B%89"
        ]
      },
      {
        id: "343",
        type: "fix",
        title: "钢尺",
        deltime: "0",
        posttime: "1466576118",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/da230a0c77bb733c0eca05128fbcc9fbbd31da5e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%92%A2%E5%B0%BA"
        ]
      },
      {
        id: "342",
        type: "fix",
        title: "安卓",
        deltime: "0",
        posttime: "1466576071",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d4b85822c353180cacc48fa74c66f0e45a6de64b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%89%E5%8D%93"
        ]
      },
      {
        id: "341",
        type: "fix",
        title: "寂静岭",
        deltime: "0",
        posttime: "1466575784",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e3cc37fb4c3af904707c475f85ccbb71dadcd63d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AF%82%E9%9D%99%E5%B2%AD"
        ]
      },
      {
        id: "340",
        type: "fix",
        title: "为美好的世界献上祝福",
        deltime: "0",
        posttime: "1466575756",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c9100d99d79513b5e53cb4f662d9faba35cfa35e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%BA%E7%BE%8E%E5%A5%BD%E7%9A%84%E4%B8%96%E7%95%8C%E7%8C%AE%E4%B8%8A%E7%A5%9D%E7%A6%8F"
        ]
      },
      {
        id: "339",
        type: "fix",
        title: "感冒",
        deltime: "0",
        posttime: "1466575725",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d982254ba12cced5ccc2748be4f88b180de57ed4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%84%9F%E5%86%92"
        ]
      },
      {
        id: "338",
        type: "fix",
        title: "+TIC模型姐妹",
        deltime: "0",
        posttime: "1466575676",
        edittime: "1514972989",
        sttime: "1466489100",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/834af809ee5320f163b8749d0b1aa8a20d9f8c77.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%2BTIC%E6%A8%A1%E5%9E%8B%E5%A7%90%E5%A6%B9"
        ]
      },
      {
        id: "337",
        type: "fix",
        title: "水手服",
        deltime: "0",
        posttime: "1466061735",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/9ce05f48371b6dc96407e28be37e32708f60d459.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B0%B4%E6%89%8B%E6%9C%8D"
        ]
      },
      {
        id: "336",
        type: "fix",
        title: "冷漠",
        deltime: "0",
        posttime: "1466061700",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/71de35c6564f25d58938168f3bb4ab7826ba0132.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B7%E6%BC%A0"
        ]
      },
      {
        id: "335",
        type: "fix",
        title: "白鲸",
        deltime: "0",
        posttime: "1466061671",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/af13be6ad0de33d529bf103a33cd8877c73355ab.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%99%BD%E9%B2%B8"
        ]
      },
      {
        id: "334",
        type: "fix",
        title: "山羊",
        deltime: "0",
        posttime: "1466061610",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bf2c253c8bd197bd89d5db437a45d0a5c3af68fd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B1%B1%E7%BE%8A"
        ]
      },
      {
        id: "333",
        type: "fix",
        title: "颜文字",
        deltime: "0",
        posttime: "1466061587",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/991d3db75385f8776dc99f1d8895f2f27c8be73d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A2%9C%E6%96%87%E5%AD%97"
        ]
      },
      {
        id: "332",
        type: "fix",
        title: "熊孩子",
        deltime: "0",
        posttime: "1466061214",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9291a76a24ad1d3d08f13bdd5907f32849998086.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%86%8A%E5%AD%A9%E5%AD%90"
        ]
      },
      {
        id: "331",
        type: "fix",
        title: "喷子",
        deltime: "0",
        posttime: "1466061177",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/7a2fbe229152dc83c16462315859a01bfd4aaa6f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B7%E5%AD%90"
        ]
      },
      {
        id: "330",
        type: "fix",
        title: "偶像大师",
        deltime: "0",
        posttime: "1466061132",
        edittime: "1514972989",
        sttime: "1465974600",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bf773b95a978ff73b5db868289b7616315164610.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%81%B6%E5%83%8F%E5%A4%A7%E5%B8%88"
        ]
      },
      {
        id: "329",
        type: "fix",
        title: "逗猫",
        deltime: "0",
        posttime: "1466061053",
        edittime: "1514972989",
        sttime: "1465974000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/aaa355983dfbfb1d364f714a4b69fc183e63a4b9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%80%97%E7%8C%AB"
        ]
      },
      {
        id: "328",
        type: "fix",
        title: "大触",
        deltime: "0",
        posttime: "1466060998",
        edittime: "1514972989",
        sttime: "1465974000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9a10590b6150035a483ff19eafe05c6c52527090.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A7%E8%A7%A6"
        ]
      },
      {
        id: "327",
        type: "fix",
        title: "转笔",
        deltime: "0",
        posttime: "1465872936",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1db11d383faffdb0cf7433b191d7f839501f52fd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%BD%AC%E7%AC%94"
        ]
      },
      {
        id: "326",
        type: "fix",
        title: "魔都",
        deltime: "0",
        posttime: "1465872784",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a250fb1f97c3eea90d320dd5c317981af32234e5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E9%83%BD"
        ]
      },
      {
        id: "325",
        type: "fix",
        title: "健身",
        deltime: "0",
        posttime: "1465872708",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f193e2f150d934bb04eee24c82fc15c4edadf962.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%81%A5%E8%BA%AB"
        ]
      },
      {
        id: "324",
        type: "fix",
        title: "加特林机枪",
        deltime: "0",
        posttime: "1465872621",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/2206307dfec95850ed1028b9f745d930fc405d2e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8A%A0%E7%89%B9%E6%9E%97%E6%9C%BA%E6%9E%AA"
        ]
      },
      {
        id: "323",
        type: "fix",
        title: "钓鱼",
        deltime: "0",
        posttime: "1465872536",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f5e72650c6fdb3cea149182f0cd684c695142f40.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%92%93%E9%B1%BC"
        ]
      },
      {
        id: "322",
        type: "fix",
        title: "百合星人奈绪子",
        deltime: "0",
        posttime: "1465872472",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/654fd04a465517b7b7e807e826d3a703dc406e67.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%99%BE%E5%90%88%E6%98%9F%E4%BA%BA%E5%A5%88%E7%BB%AA%E5%AD%90"
        ]
      },
      {
        id: "321",
        type: "fix",
        title: "魔兽",
        deltime: "0",
        posttime: "1465871571",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171225/12lrwvyml3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E5%85%BD"
        ]
      },
      {
        id: "320",
        type: "fix",
        title: "大胃王",
        deltime: "0",
        posttime: "1465871530",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e996fa618d5866c3113b2cff7ee2dbb5c36ef676.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A7%E8%83%83%E7%8E%8B"
        ]
      },
      {
        id: "319",
        type: "fix",
        title: "闪灵",
        deltime: "0",
        posttime: "1465871476",
        edittime: "1514972989",
        sttime: "1465784820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c3d5bbfa106d3638fe665ef0e6de7f8b7e7ed639.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%97%AA%E7%81%B5"
        ]
      },
      {
        id: "318",
        type: "fix",
        title: "音乐",
        deltime: "0",
        posttime: "1465354482",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/af086c9c319e0a3854a58481955a85b5ee2349e0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AD%8C%E5%8D%95"
        ]
      },
      {
        id: "317",
        type: "fix",
        title: "魔道祖师",
        deltime: "0",
        posttime: "1465353809",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d7ba9c4bd660ec09ac68e78d5ac47c1d10257d7b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E9%81%93%E7%A5%96%E5%B8%88"
        ]
      },
      {
        id: "316",
        type: "fix",
        title: "屏裂",
        deltime: "0",
        posttime: "1465353579",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c94d160e8b148beb23390c84315a43dae76aaca7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A2%8E%E5%B1%8F"
        ]
      },
      {
        id: "315",
        type: "fix",
        title: "篮球",
        deltime: "0",
        posttime: "1465353466",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c286192f9442d3d839e10a8f5b3553665a3a92ff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%AF%AE%E7%90%83"
        ]
      },
      {
        id: "314",
        type: "fix",
        title: "恐怖小游戏",
        deltime: "0",
        posttime: "1465352576",
        edittime: "1514972989",
        sttime: "1465265760",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7f93d986bd48546a0e8ff003e0ab38da5cb4c076.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%81%90%E6%80%96%E5%B0%8F%E6%B8%B8%E6%88%8F"
        ]
      },
      {
        id: "313",
        type: "fix",
        title: "周婕纶",
        deltime: "0",
        posttime: "1465297354",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2d1dff9727be8024cf3dc54cf80a5df361898eef.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%A8%E5%A9%95%E7%BA%B6"
        ]
      },
      {
        id: "312",
        type: "fix",
        title: "咸鱼",
        deltime: "0",
        posttime: "1465297316",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cdad9db97f2a11254e863e414b0688d2e43e3a81.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%92%B8%E9%B1%BC"
        ]
      },
      {
        id: "311",
        type: "fix",
        title: "心碎",
        deltime: "0",
        posttime: "1465297031",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/767e6adc432a73304aa99e3b88f62eaed2a057c7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%83%E7%A2%8E%E5%90%91"
        ]
      },
      {
        id: "310",
        type: "fix",
        title: "超超超级向东方",
        deltime: "0",
        posttime: "1465295570",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0b512fe16c950ead33ece5c08d1d80b9dc829b51.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B6%85%E7%BA%A7%E5%90%91%20%E4%B8%9C%E6%96%B9"
        ]
      },
      {
        id: "309",
        type: "fix",
        title: "猜拳",
        deltime: "0",
        posttime: "1465295413",
        edittime: "1514972989",
        sttime: "1465208820",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/24d7cedb35c52774c526599c9029ce8fbea131b9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%9C%E6%8B%B3"
        ]
      },
      {
        id: "308",
        type: "fix",
        title: "kiss",
        deltime: "0",
        posttime: "1465295267",
        edittime: "1514972989",
        sttime: "1465208760",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/63897ed3bd90478a8d6941ac1590c1a1422c620d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%A5%E5%90%BB"
        ]
      },
      {
        id: "307",
        type: "fix",
        title: "萌宠",
        deltime: "0",
        posttime: "1464946701",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1f7bc4b638ac9332c9b01ae465b35a6f51621975.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%90%8C%E5%AE%A0"
        ]
      },
      {
        id: "306",
        type: "fix",
        title: "偶像梦幻祭",
        deltime: "0",
        posttime: "1464946644",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8983956a37861ec102e6a0ccd4b0219a9bfa4b29.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%81%B6%E5%83%8F%E6%A2%A6%E5%B9%BB%E7%A5%AD"
        ]
      },
      {
        id: "305",
        type: "fix",
        title: "竜が我が敌を喰ら",
        deltime: "0",
        posttime: "1464946448",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/768916ac9138876d2a34ea33d191aa5321761f3d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%88%E6%9C%9B%E5%B1%81%E8%82%A1"
        ]
      },
      {
        id: "304",
        type: "fix",
        title: "吃豆人",
        deltime: "0",
        posttime: "1464946323",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/28f64df4485c43de82fc28cd6d93b986a25fe2c7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E8%B1%86%E4%BA%BA"
        ]
      },
      {
        id: "303",
        type: "fix",
        title: "flag",
        deltime: "0",
        posttime: "1464946175",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9438bee77d1c2fa47867e628c897186b12ae5203.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=flag"
        ]
      },
      {
        id: "302",
        type: "fix",
        title: "章鱼",
        deltime: "0",
        posttime: "1464946111",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d35ea551f2c118408eca334470db2736f0c1b652.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%AB%A0%E9%B1%BC"
        ]
      },
      {
        id: "301",
        type: "fix",
        title: "死鱼眼",
        deltime: "0",
        posttime: "1464945996",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f0ce0992147ccc56eb7989912c231f1bd2c011dc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%AD%BB%E9%B1%BC%E7%9C%BC"
        ]
      },
      {
        id: "300",
        type: "fix",
        title: "催眠",
        deltime: "0",
        posttime: "1464945913",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3a6a868585732892d351dfd693bd87ded43ca926.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%82%AC%E7%9C%A0"
        ]
      },
      {
        id: "299",
        type: "fix",
        title: "超级玛丽",
        deltime: "0",
        posttime: "1464945790",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/1ef12713e53b5f596bb77bbb15067053929d8f91.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%8C%AB%E7%89%88%E8%B6%85%E7%BA%A7%E7%8E%9B%E4%B8%BD"
        ]
      },
      {
        id: "298",
        type: "fix",
        title: "心疼",
        deltime: "0",
        posttime: "1464945714",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7697009ae0bf89a87524d421cea14f136b55c2cb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%83%E7%96%BC%E5%90%8E%E9%9D%A2%E7%9A%84"
        ]
      },
      {
        id: "297",
        type: "fix",
        title: "团子大家族",
        deltime: "0",
        posttime: "1464945562",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/200f385add8a0e2bb156a5f5b3fbf6ce80fe2318.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%9B%A2%E5%AD%90%E5%A4%A7%E5%AE%B6%E6%97%8F"
        ]
      },
      {
        id: "296",
        type: "fix",
        title: "泡面",
        deltime: "0",
        posttime: "1464945505",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e2fdf69637b36c08ed8a32c708e9e90ebe66b07f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B3%A1%E9%9D%A2"
        ]
      },
      {
        id: "295",
        type: "fix",
        title: "捏脸",
        deltime: "0",
        posttime: "1464945320",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c9d7a539066b4e381a109fa27ae10df834b81b98.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8D%8F%E8%84%B8"
        ]
      },
      {
        id: "294",
        type: "fix",
        title: "跳绳",
        deltime: "0",
        posttime: "1464945070",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d4af4847fae945a85078da4e7649d6a29f541341.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%B3%E7%BB%B3"
        ]
      },
      {
        id: "293",
        type: "fix",
        title: "美甲",
        deltime: "0",
        posttime: "1464944847",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/919ea3440629a4f30b753599ad3ee5a1da90311f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E7%94%B2"
        ]
      },
      {
        id: "292",
        type: "fix",
        title: "翻唱",
        deltime: "0",
        posttime: "1464944803",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6216b20956cd6708cbbeae567cd65c6becdb3639.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BF%BB%E5%94%B1"
        ]
      },
      {
        id: "291",
        type: "fix",
        title: "俄罗斯方块",
        deltime: "0",
        posttime: "1464944749",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/350de52c8fd2a8662843c5074a3da3b4c83a1d5d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BF%84%E7%BD%97%E6%96%AF%E6%96%B9%E5%9D%97"
        ]
      },
      {
        id: "290",
        type: "fix",
        title: "Re:从零开始的异世界生活",
        deltime: "0",
        posttime: "1464944624",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/0ef68bb0159d8b2fc9be0008b0dbb92bd13fb6e8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=Re%EF%BC%9A%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E7%9A%84%E5%BC%82%E4%B8%96%E7%95%8C%E7%94%9F%E6%B4%BB"
        ]
      },
      {
        id: "289",
        type: "fix",
        title: "流星",
        deltime: "0",
        posttime: "1464944481",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/cd544efe76e05a915bfe559c6ab45921988539fa.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%B5%81%E6%98%9F"
        ]
      },
      {
        id: "288",
        type: "fix",
        title: "火锅",
        deltime: "0",
        posttime: "1464944293",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/34c1c43476ed00ada44a2bc9797d5bb64e49ebaf.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%81%AB%E9%94%85"
        ]
      },
      {
        id: "287",
        type: "fix",
        title: "charlotte",
        deltime: "0",
        posttime: "1464944170",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4c9db699a9b6316a1293cfa93469a7c5c83ceb73.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=charlotte"
        ]
      },
      {
        id: "286",
        type: "fix",
        title: "学习",
        deltime: "0",
        posttime: "1464944075",
        edittime: "1514972989",
        sttime: "1464856920",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/28285c794aad429fad8f316a96317f38e0f9e2b8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AD%A6%E4%B9%A0"
        ]
      },
      {
        id: "285",
        type: "fix",
        title: "蛋疼",
        deltime: "0",
        posttime: "1464606062",
        edittime: "1514972989",
        sttime: "1464519000",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/02f727c78831f4b86449726e4c42f272ee54d1ec.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%9B%8B%E7%96%BC"
        ]
      },
      {
        id: "284",
        type: "fix",
        title: "冰淇淋",
        deltime: "0",
        posttime: "1464606018",
        edittime: "1514972989",
        sttime: "1464519000",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/83fceea64c232b5db3ec4d5a115b9b4568a9ed35.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B0%E6%B7%87%E6%B7%8B"
        ]
      },
      {
        id: "283",
        type: "fix",
        title: "射命丸文",
        deltime: "0",
        posttime: "1464577522",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c84cee2d2aa0e12aa2f47cd75a1fe64b3b29beee.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B0%84%E5%91%BD%E4%B8%B8%E6%96%87"
        ]
      },
      {
        id: "282",
        type: "fix",
        title: "强化失败",
        deltime: "0",
        posttime: "1464577486",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/34124005a69d8340d1cc28e91c98899b4de8d696.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BC%BA%E5%8C%96%E5%A4%B1%E8%B4%A5"
        ]
      },
      {
        id: "281",
        type: "fix",
        title: "跑酷",
        deltime: "0",
        posttime: "1464577457",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0105560c89d1453d3f9653e92450e0d7a9738415.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%B7%91%E9%85%B7"
        ]
      },
      {
        id: "280",
        type: "fix",
        title: "化学实验",
        deltime: "0",
        posttime: "1464577427",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e2746af03baed90daf0c1dbdb096ea76643a76ef.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8C%96%E5%AD%A6%E5%AE%9E%E9%AA%8C"
        ]
      },
      {
        id: "279",
        type: "fix",
        title: "爆笑星际2",
        deltime: "0",
        posttime: "1464577373",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d2f969750728b47ee83bd8a37687a582652b060d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%88%86%E7%AC%91%E6%98%9F%E9%99%852"
        ]
      },
      {
        id: "278",
        type: "fix",
        title: "giligili eye",
        deltime: "0",
        posttime: "1464577325",
        edittime: "1514972989",
        sttime: "1464490440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/709b9c0e30c09cb9d7db5e4f5f6272fd7cc754dc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=GILIGILI"
        ]
      },
      {
        id: "277",
        type: "fix",
        title: "尼克杨",
        deltime: "0",
        posttime: "1464258086",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ee4414ee0dd32419bd6231c758de385d9b9035da.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B0%BC%E5%85%8B%E6%9D%A8"
        ]
      },
      {
        id: "276",
        type: "fix",
        title: "喵星人",
        deltime: "0",
        posttime: "1464257778",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e2982eb27e2485745b01e8e6f956ef84b905682a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B5%E6%98%9F%E4%BA%BA"
        ]
      },
      {
        id: "275",
        type: "fix",
        title: "星际牛仔",
        deltime: "0",
        posttime: "1464257743",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d74f8216006f61d194bb7a7ebff9ff8531253f21.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%9F%E9%99%85%E7%89%9B%E4%BB%94"
        ]
      },
      {
        id: "274",
        type: "fix",
        title: "求领养",
        deltime: "0",
        posttime: "1464257664",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/841a509087d7450bc8a2b4034bff75251ee51d6b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B1%82%E9%A2%86%E5%85%BB"
        ]
      },
      {
        id: "273",
        type: "fix",
        title: "飞镖",
        deltime: "0",
        posttime: "1464257485",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/094429f049a7c0a51ca2479ef5a6d9bf4f1c12d8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A3%9E%E9%95%96"
        ]
      },
      {
        id: "272",
        type: "fix",
        title: "吹泡泡",
        deltime: "0",
        posttime: "1464257245",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c24155b73ddad15f5243e7c58868762e0b8d437f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%B9%E6%B3%A1%E6%B3%A1"
        ]
      },
      {
        id: "271",
        type: "fix",
        title: "煎蛋",
        deltime: "0",
        posttime: "1464257186",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/dc18e9cf8670d7f1dea88266ea3365f663c61747.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%85%8E%E8%9B%8B"
        ]
      },
      {
        id: "270",
        type: "fix",
        title: "啊啊啊",
        deltime: "0",
        posttime: "1464256962",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ad94fa918f4b2dd593876aebc0029b83997b5240.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%95%8A%E5%95%8A%E5%95%8A"
        ]
      },
      {
        id: "269",
        type: "fix",
        title: "心情不好就来看",
        deltime: "0",
        posttime: "1464256907",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/26371aa33464a0c78cfb39d23f13082ace656e08.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BF%83%E6%83%85%E4%B8%8D%E5%A5%BD%E5%B0%B1%E6%9D%A5%E7%9C%8B"
        ]
      },
      {
        id: "268",
        type: "fix",
        title: "天线宝宝",
        deltime: "0",
        posttime: "1464256746",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/579dd8982a44aa44f4f12d40f46b1fcdf792f08b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%BA%BF%E5%AE%9D%E5%AE%9D"
        ]
      },
      {
        id: "267",
        type: "fix",
        title: "睡前",
        deltime: "0",
        posttime: "1464256703",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/27065f35333b72d10746be9fbd453f8ade4322f5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9D%A1%E5%89%8D%E9%9F%B3%E9%A2%91"
        ]
      },
      {
        id: "266",
        type: "fix",
        title: "恐怖片",
        deltime: "0",
        posttime: "1464256618",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fa3d11e277d2c0801544350f028014ef854ab0fb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%81%90%E6%80%96%E7%89%87"
        ]
      },
      {
        id: "265",
        type: "fix",
        title: "飞檐走壁",
        deltime: "0",
        posttime: "1464256570",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9d5e2a336889ae47d4b53a8d4e74a1b6893912d0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A3%9E%E6%AA%90%E8%B5%B0%E5%A3%81"
        ]
      },
      {
        id: "264",
        type: "fix",
        title: "戳戳乐",
        deltime: "0",
        posttime: "1464256500",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b9a75fc9ae4da2cb214b807886294f72974a8d7c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%B3%E6%88%B3%E4%B9%90"
        ]
      },
      {
        id: "263",
        type: "fix",
        title: "腿初音",
        deltime: "0",
        posttime: "1464256113",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3c1f7c747d4742a736a72e2067197a4898235298.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%88%9D%E9%9F%B3"
        ]
      },
      {
        id: "262",
        type: "fix",
        title: "太鼓达人",
        deltime: "0",
        posttime: "1464256014",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/bface0707e4e4e162a0a6457e6279ed36a5d7408.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%AA%E9%BC%93%E8%BE%BE%E4%BA%BA"
        ]
      },
      {
        id: "261",
        type: "fix",
        title: "如龙",
        deltime: "0",
        posttime: "1464255937",
        edittime: "1514972989",
        sttime: "1464169440",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ed8c5d2fc88a271e65accee74bf3b158f7784a8d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A6%82%E9%BE%99"
        ]
      },
      {
        id: "260",
        type: "fix",
        title: "VR",
        deltime: "0",
        posttime: "1464255874",
        edittime: "1514972989",
        sttime: "1464169380",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fbaa9b7272273daf28c0f69a267a03836a9b5518.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=vr"
        ]
      },
      {
        id: "259",
        type: "fix",
        title: "熊猫",
        deltime: "0",
        posttime: "1464255754",
        edittime: "1514972989",
        sttime: "1464169320",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0073b2221e5e9e6275d6ef1757c1b68360747d4b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%86%8A%E7%8C%AB"
        ]
      },
      {
        id: "258",
        type: "fix",
        title: "上天",
        deltime: "0",
        posttime: "1464255686",
        edittime: "1514972989",
        sttime: "1464167880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f29f2c68bdad91830eb1553b282dbd07e6a9968a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BD%A0%E5%92%8B%E4%B8%8D%E4%B8%8A%E5%A4%A9"
        ]
      },
      {
        id: "257",
        type: "fix",
        title: "节奏天国",
        deltime: "0",
        posttime: "1464255602",
        edittime: "1514972989",
        sttime: "1464167880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/599e33b04a0c34af8693d55487f041c7f1d0a5d6.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%8A%82%E5%A5%8F%E5%A4%A9%E5%9B%BD"
        ]
      },
      {
        id: "256",
        type: "fix",
        title: "海盗",
        deltime: "0",
        posttime: "1464255567",
        edittime: "1514972989",
        sttime: "1464167880",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a55172db4b0bbae56cad0a173f0c98ec105b50c4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B5%B7%E7%9B%97"
        ]
      },
      {
        id: "255",
        type: "fix",
        title: "打瞌睡",
        deltime: "0",
        posttime: "1464255511",
        edittime: "1514972989",
        sttime: "1464167880",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/54076d6e1fab7ff53217ba70bc0698bc4ab20645.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%89%93%E7%9E%8C%E7%9D%A1"
        ]
      },
      {
        id: "254",
        type: "fix",
        title: "splatoon",
        deltime: "0",
        posttime: "1463739463",
        edittime: "1514972989",
        sttime: "1463652660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/3b26654188286a014174aa21a8a596230c4f8f48.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=splatoon"
        ]
      },
      {
        id: "253",
        type: "fix",
        title: "逆转裁判",
        deltime: "0",
        posttime: "1463739253",
        edittime: "1514972989",
        sttime: "1463652660",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/1a49fccbf8a91984bcfab853a0989e23198c1050.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%80%86%E8%BD%AC%E8%A3%81%E5%88%A4"
        ]
      },
      {
        id: "252",
        type: "fix",
        title: "美树沙耶香",
        deltime: "0",
        posttime: "1463739216",
        edittime: "1514972989",
        sttime: "1463652660",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/73193956be362bc6774ead4b632a66aaf4df8706.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E6%A0%91%E6%B2%99%E8%80%B6%E9%A6%99"
        ]
      },
      {
        id: "251",
        type: "fix",
        title: "不明生物",
        deltime: "0",
        posttime: "1463739175",
        edittime: "1514972989",
        sttime: "1463652660",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0ee68c48ee79baba7c4dba931f2f8e3befb8beb8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8D%E6%98%8E%E7%94%9F%E7%89%A9"
        ]
      },
      {
        id: "250",
        type: "fix",
        title: "友谊的小船",
        deltime: "0",
        posttime: "1462765088",
        edittime: "1514972989",
        sttime: "1462678320",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c804c57efc396fccb2c0efb724c33fcfa2d9a1ff.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/1187.html"
        ]
      },
      {
        id: "249",
        type: "fix",
        title: "弹丸论破",
        deltime: "0",
        posttime: "1462763334",
        edittime: "1514972989",
        sttime: "1462676040",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c15930b15f1b2ce887ec9eb2f40200ade5aeb097.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BC%B9%E4%B8%B8%E8%AE%BA%E7%A0%B4"
        ]
      },
      {
        id: "248",
        type: "fix",
        title: "红壳的潘多拉",
        deltime: "0",
        posttime: "1462763060",
        edittime: "1514972989",
        sttime: "1462676040",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/4b333905442e73b70f12d052aab200156b70545c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BA%A2%E5%A3%B3%E7%9A%84%E6%BD%98%E5%A4%9A%E6%8B%89"
        ]
      },
      {
        id: "247",
        type: "fix",
        title: "圣杯",
        deltime: "0",
        posttime: "1462762932",
        edittime: "1514972989",
        sttime: "1462676040",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/9b18bed7ff8538b638871f1c8d00615cb6591647.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/special?keyword=%E5%9C%A3%E6%9D%AF"
        ]
      },
      {
        id: "246",
        type: "fix",
        title: "渚薰",
        deltime: "0",
        posttime: "1462762675",
        edittime: "1514972989",
        sttime: "1462676040",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6cd504c2a785bf4dbe74dc273572b7f306345af3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B8%9A%E8%96%B0"
        ]
      },
      {
        id: "245",
        type: "fix",
        title: "魔术",
        deltime: "0",
        posttime: "1461921980",
        edittime: "1514972989",
        sttime: "1461835140",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b3442eb7da2178659c10f9480e15302ccea3fbc7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%9C%AF"
        ]
      },
      {
        id: "244",
        type: "fix",
        title: "osu",
        deltime: "0",
        posttime: "1461921807",
        edittime: "1514972989",
        sttime: "1461835140",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cf49ee78de8a2ab45e6321d33e39befc6ef05671.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=osu"
        ]
      },
      {
        id: "243",
        type: "fix",
        title: "we bare bears",
        deltime: "0",
        posttime: "1461744470",
        edittime: "1514972989",
        sttime: "1461657780",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d9556a43143958c283a875521e6c6dacf2de1572.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=we+bare+bears"
        ]
      },
      {
        id: "242",
        type: "fix",
        title: "魔卡少女樱",
        deltime: "0",
        posttime: "1461744398",
        edittime: "1514972989",
        sttime: "1461657780",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/420dcfa24100127d70988d624f5558b9afdcb5ef.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%AD%94%E5%8D%A1%E5%B0%91%E5%A5%B3%E6%A8%B1"
        ]
      },
      {
        id: "241",
        type: "fix",
        title: "神秘博士",
        deltime: "0",
        posttime: "1460716877",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6514ee9176f6c82be020ee3fc89e899696471496.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%A5%9E%E7%A7%98%E5%8D%9A%E5%A3%AB"
        ]
      },
      {
        id: "240",
        type: "fix",
        title: "AB向",
        deltime: "0",
        posttime: "1460716835",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/332d998873898fd5fd3ffbb43a06ed0c0bf516af.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=AB%E5%90%91"
        ]
      },
      {
        id: "239",
        type: "fix",
        title: "宇宙巡警露露子",
        deltime: "0",
        posttime: "1460716786",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f7a1964da37c6fba9e5170dd0521207832c20147.gif",
        weight: "0",
        links: [
          "https://bangumi.bilibili.com/anime/3459"
        ]
      },
      {
        id: "238",
        type: "fix",
        title: "纸飞机",
        deltime: "0",
        posttime: "1460716688",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/829412d4a6d76b8facf0011ba16c6b0a9bfb9f66.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BA%B8%E9%A3%9E%E6%9C%BA"
        ]
      },
      {
        id: "237",
        type: "fix",
        title: "二五仔",
        deltime: "0",
        posttime: "1460716558",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cd0f0c7b69724515b30c87cd6d56129193a5395b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BA%8C%E4%BA%94%E4%BB%94"
        ]
      },
      {
        id: "236",
        type: "fix",
        title: "树懒体",
        deltime: "0",
        posttime: "1460716447",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ab2e8dd8d85681abed37021dfc980b3a7139e020.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%A0%91%E6%87%92"
        ]
      },
      {
        id: "235",
        type: "fix",
        title: "在下坂本,有何贵干?",
        deltime: "0",
        posttime: "1460716288",
        edittime: "1514972989",
        sttime: "1460629740",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9b625a77be6058aac7f952298da0078a0780cd09.gif",
        weight: "0",
        links: [
          "https://bangumi.bilibili.com/anime/3450"
        ]
      },
      {
        id: "234",
        type: "fix",
        title: "模拟山羊",
        deltime: "0",
        posttime: "1459910512",
        edittime: "1514972989",
        sttime: "1459824060",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1786ce76f5de2f72c588cd2870fdb322b571d642.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%A8%A1%E6%8B%9F%E5%B1%B1%E7%BE%8A"
        ]
      },
      {
        id: "233",
        type: "fix",
        title: "海尔兄弟",
        deltime: "0",
        posttime: "1459827791",
        edittime: "1514972989",
        sttime: "1459741020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/de4e29696526036d976d7a744cce1581abe6fe20.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B5%B7%E5%B0%94%E5%85%84%E5%BC%9F"
        ]
      },
      {
        id: "232",
        type: "fix",
        title: "怪诞小镇",
        deltime: "0",
        posttime: "1459827754",
        edittime: "1514972989",
        sttime: "1459741020",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/43618895efc752ea83fec4a37340fff2f0b50c1c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%80%AA%E8%AF%9E%E5%B0%8F%E9%95%87"
        ]
      },
      {
        id: "231",
        type: "fix",
        title: "黑岩",
        deltime: "0",
        posttime: "1459827691",
        edittime: "1514972989",
        sttime: "1459741020",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/850abfee9e23cc3ce449699d196c666a58088bff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%91%E5%B2%A9"
        ]
      },
      {
        id: "229",
        type: "fix",
        title: "BML",
        deltime: "0",
        posttime: "1458702744",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/493547116600c4f477c304dca1d96b7c22027baf.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=BML"
        ]
      },
      {
        id: "228",
        type: "fix",
        title: "兔子",
        deltime: "0",
        posttime: "1458702712",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c6011421730d0b27dad0c1b2d68b6cf00712541d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%85%94%E5%AD%90"
        ]
      },
      {
        id: "227",
        type: "fix",
        title: "传送门",
        deltime: "0",
        posttime: "1458702645",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7432141f6e7b6f7e03a45aef17942b6cb2b0bca0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BC%A0%E9%80%81%E9%97%A8"
        ]
      },
      {
        id: "226",
        type: "fix",
        title: "窥视",
        deltime: "0",
        posttime: "1458702479",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/8e2962c5761b433ce51ffcef0e5539f0a31349b1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%AA%A5%E8%A7%86"
        ]
      },
      {
        id: "225",
        type: "fix",
        title: "苦力怕",
        deltime: "0",
        posttime: "1458702321",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/fa0b6ebef226b701e7dd466bdc428f78ab0d2197.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/v2/1114.html"
        ]
      },
      {
        id: "224",
        type: "fix",
        title: "黑岩",
        deltime: "0",
        posttime: "1458701952",
        edittime: "1514972989",
        sttime: "1458615420",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/850abfee9e23cc3ce449699d196c666a58088bff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%91%E5%B2%A9"
        ]
      },
      {
        id: "223",
        type: "fix",
        title: "奥巴马",
        deltime: "0",
        posttime: "1457943992",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e26aaa49d380ce97be796c8af4c8e471a32590c3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%A5%E5%B7%B4%E9%A9%AC&order=totalrank"
        ]
      },
      {
        id: "222",
        type: "fix",
        title: "周星驰",
        deltime: "0",
        posttime: "1457943874",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f7d5195f03242d20999db95974ca7059f731a460.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%91%A8%E6%98%9F%E9%A9%B0"
        ]
      },
      {
        id: "221",
        type: "fix",
        title: "健身",
        deltime: "0",
        posttime: "1457943619",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/30c8f6802cd1f797f44ab70338abd87efbe2a0bb.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/v2/1051.html"
        ]
      },
      {
        id: "220",
        type: "fix",
        title: "CS",
        deltime: "0",
        posttime: "1457943569",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f588372f96774ca80fd2f431f2d6577dd603cb1a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=CS&order=totalrank"
        ]
      },
      {
        id: "219",
        type: "fix",
        title: "害怕",
        deltime: "0",
        posttime: "1457943496",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/303261c1ebdf9bdea245d58e903f91294cfdd29d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%AE%B3%E6%80%95&page=1&order=totalrank"
        ]
      },
      {
        id: "218",
        type: "fix",
        title: "I wanna be the guy",
        deltime: "0",
        posttime: "1457943443",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/16358bd52ef1491c17d0ef5f9437355d38357a6a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=I%20wanna%20be%20the%20guy"
        ]
      },
      {
        id: "217",
        type: "fix",
        title: "探险活宝",
        deltime: "0",
        posttime: "1457943406",
        edittime: "1514972989",
        sttime: "1457856840",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a202961e8d3ac165f6c716b268eb7c0f09bc1a1b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%A2%E9%99%A9%E6%B4%BB%E5%AE%9D"
        ]
      },
      {
        id: "216",
        type: "fix",
        title: "are you ok",
        deltime: "0",
        posttime: "1457341630",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/18abe91eb6fbd5b3a0839e8f1e08846927b9b5c2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=are%20you%20ok"
        ]
      },
      {
        id: "215",
        type: "fix",
        title: "大小姐的抱头蹲防",
        deltime: "0",
        posttime: "1457341591",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/093228a2c9ae9fef31aed700e10c3b0bcdd009ce.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8A%B1%E5%A4%B4%E8%B9%B2%E9%98%B2&page=1&order=totalrank"
        ]
      },
      {
        id: "214",
        type: "fix",
        title: "博丽灵梦",
        deltime: "0",
        posttime: "1457341521",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/853f89cf41370a84760ad66dd6cde792714bf8c3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%81%B5%E6%A2%A6"
        ]
      },
      {
        id: "213",
        type: "fix",
        title: "岚少",
        deltime: "0",
        posttime: "1457341465",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d85eba9bf089148a383d064029d27e03ff1da904.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B2%9A%E5%B0%91"
        ]
      },
      {
        id: "212",
        type: "fix",
        title: "以撒的结合",
        deltime: "0",
        posttime: "1457341432",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f5f1a66d3d9ae02888ed0d93c784dab6c2163a6e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BB%A5%E6%92%92%E7%9A%84%E7%BB%93%E5%90%88"
        ]
      },
      {
        id: "211",
        type: "fix",
        title: "博人传",
        deltime: "0",
        posttime: "1457341396",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/10b94847bd22b85bd4a0b1754943df929013e152.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%9A%E4%BA%BA%E4%BC%A0"
        ]
      },
      {
        id: "210",
        type: "fix",
        title: "探险活宝",
        deltime: "0",
        posttime: "1457341255",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a202961e8d3ac165f6c716b268eb7c0f09bc1a1b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%A2%E9%99%A9%E6%B4%BB%E5%AE%9D"
        ]
      },
      {
        id: "209",
        type: "fix",
        title: "I wanna be the guy",
        deltime: "0",
        posttime: "1457341229",
        edittime: "1514972989",
        sttime: "1457254680",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/16358bd52ef1491c17d0ef5f9437355d38357a6a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=I+wanna+be+the+guy"
        ]
      },
      {
        id: "208",
        type: "fix",
        title: "境界线上的地平线",
        deltime: "0",
        posttime: "1456801855",
        edittime: "1514972989",
        sttime: "1456715160",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/36adbba91f02013751cf2de5c25cb5b5398f9caf.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A2%83%E7%95%8C%E7%BA%BF%E4%B8%8A%E7%9A%84%E5%9C%B0%E5%B9%B3%E7%BA%BF&order=totalrank&tids_1=1"
        ]
      },
      {
        id: "207",
        type: "fix",
        title: "好男人",
        deltime: "0",
        posttime: "1456801799",
        edittime: "1514972989",
        sttime: "1456715160",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/16d00edf97d1e7abbabf03ca5b274b208467925c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%BD%E7%94%B7%E4%BA%BA&page=1&order=totalrank&tids_1=1"
        ]
      },
      {
        id: "206",
        type: "fix",
        title: "奥斯卡",
        deltime: "0",
        posttime: "1456801679",
        edittime: "1514972989",
        sttime: "1456715160",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/5743a5b3c968e007670c5c510832260966a0df1d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%A5%E6%96%AF%E5%8D%A1%E9%A2%81%E5%A5%96%E5%85%B8%E7%A4%BC"
        ]
      },
      {
        id: "205",
        type: "fix",
        title: "⑨的算术教室",
        deltime: "0",
        posttime: "1456733008",
        edittime: "1514972989",
        sttime: "1456646400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/0fe340454d22120c7c1bf172ae159649f55f34f2.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/105.html"
        ]
      },
      {
        id: "204",
        type: "fix",
        title: "美食侦探",
        deltime: "0",
        posttime: "1456732963",
        edittime: "1514972989",
        sttime: "1456646400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f6f4ab7d071771ce7aad2b7f19c02505ad658cae.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E9%A3%9F%E4%BE%A6%E6%8E%A2%E7%8E%8B&order=dm"
        ]
      },
      {
        id: "203",
        type: "fix",
        title: "猫和老鼠",
        deltime: "0",
        posttime: "1456732889",
        edittime: "1514972989",
        sttime: "1456646400",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b9e247e9da1a6506fd2a0367826b8059487516c2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%8C%AB%E5%92%8C%E8%80%81%E9%BC%A0"
        ]
      },
      {
        id: "202",
        type: "fix",
        title: "合唱",
        deltime: "0",
        posttime: "1454493583",
        edittime: "1514972989",
        sttime: "1454406720",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e689fad96b281cfd9e528e056ff88b359d7d612e.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/sp/%E5%90%88%E5%94%B1%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"
        ]
      },
      {
        id: "201",
        type: "fix",
        title: "喵帕斯",
        deltime: "0",
        posttime: "1454493533",
        edittime: "1514972989",
        sttime: "1454406720",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e9914ddf0778db2b8fb7559fb0b3bffefdc29458.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%96%B5%E5%B8%95%E6%96%AF"
        ]
      },
      {
        id: "200",
        type: "fix",
        title: "黄金",
        deltime: "0",
        posttime: "1454493431",
        edittime: "1514972989",
        sttime: "1454406720",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f81233c5ffec793da045018275960ce06cf73bcd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BB%84%E9%87%91"
        ]
      },
      {
        id: "198",
        type: "fix",
        title: "麻婆",
        deltime: "0",
        posttime: "1454383916",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/cc8314adf3fbe35da156fbdb37635ae7b71aab7e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%BA%BB%E5%A9%86"
        ]
      },
      {
        id: "197",
        type: "fix",
        title: "炸弹人",
        deltime: "0",
        posttime: "1454383883",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c37c51ee73d79f11d7eaa866f77a5283cdacf46c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%82%B8%E5%BC%B9%E4%BA%BA"
        ]
      },
      {
        id: "196",
        type: "fix",
        title: "数码宝贝",
        deltime: "0",
        posttime: "1454383854",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/23e02817ea3490d6c07290ced306604930802b89.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%95%B0%E7%A0%81%E5%AE%9D%E8%B4%9D"
        ]
      },
      {
        id: "195",
        type: "fix",
        title: "妈妈再爱我一次",
        deltime: "0",
        posttime: "1454383723",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/29213eb9c09f4aa0f199201b03dfd7d6cd5feed9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A6%88%E5%A6%88%E5%86%8D%E7%88%B1%E6%88%91%E4%B8%80%E6%AC%A1"
        ]
      },
      {
        id: "194",
        type: "fix",
        title: "物语系列",
        deltime: "0",
        posttime: "1454383687",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/cbced60a25b84c6479fb50495d31fd95548f3fda.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%89%A9%E8%AF%AD%E7%B3%BB%E5%88%97"
        ]
      },
      {
        id: "193",
        type: "fix",
        title: "刀剑乱舞",
        deltime: "0",
        posttime: "1454383236",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d0bf43b038a37aa9816c37564b0d5b6ea60c2f01.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%88%80%E5%89%91%E4%B9%B1%E8%88%9E"
        ]
      },
      {
        id: "192",
        type: "fix",
        title: "房东妹子青春期",
        deltime: "0",
        posttime: "1454382543",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/72339f279293726390a3d9899940f7943b79b0cb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%BF%E4%B8%9C%E5%A6%B9%E5%AD%90%E9%9D%92%E6%98%A5%E6%9C%9F"
        ]
      },
      {
        id: "191",
        type: "fix",
        title: "美妆达人",
        deltime: "0",
        posttime: "1454382506",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0127380410d03506ccaa21d619dc4d0ad8bceb1f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E5%A6%86%E8%BE%BE%E4%BA%BA"
        ]
      },
      {
        id: "190",
        type: "fix",
        title: "星之卡比",
        deltime: "0",
        posttime: "1454382461",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2f70e9f34de3ba482d662a519860b84b4fb70159.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%9F%E4%B9%8B%E5%8D%A1%E6%AF%94"
        ]
      },
      {
        id: "189",
        type: "fix",
        title: "美少女战士",
        deltime: "0",
        posttime: "1454382419",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ead25b16118b097a4bd7831cb9b89f7ce4da019e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E5%B0%91%E5%A5%B3%E6%88%98%E5%A3%AB"
        ]
      },
      {
        id: "188",
        type: "fix",
        title: "天线宝宝",
        deltime: "0",
        posttime: "1454382338",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/12ab85217a881fb270017557451ba5cad98a813c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%BA%BF%E5%AE%9D%E5%AE%9D"
        ]
      },
      {
        id: "187",
        type: "fix",
        title: "逆转裁判",
        deltime: "0",
        posttime: "1454382260",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/57e26d38490a0c88694768bfd28b860c40509603.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%80%86%E8%BD%AC%E8%A3%81%E5%88%A4"
        ]
      },
      {
        id: "186",
        type: "fix",
        title: "春节饺子",
        deltime: "0",
        posttime: "1454382229",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e8cd8b17530264fb50848035aceec3d71a2d280b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%A5%E8%8A%82%E9%A5%BA%E5%AD%90&page=1&order=click"
        ]
      },
      {
        id: "185",
        type: "fix",
        title: "二胡",
        deltime: "0",
        posttime: "1454382141",
        edittime: "1514972989",
        sttime: "1454295480",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2e465503cf4f912b30f21e7f9a6e5174a3f22712.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BA%8C%E8%83%A1"
        ]
      },
      {
        id: "184",
        type: "fix",
        title: "仓鼠",
        deltime: "0",
        posttime: "1453865830",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cb55d2c83705b18be579a127aea7f7855367e09d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BB%93%E9%BC%A0"
        ]
      },
      {
        id: "183",
        type: "fix",
        title: "甜点",
        deltime: "0",
        posttime: "1453865707",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8d141440c766c3e76b409ad82d97a9ab80fb1347.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%94%9C%E7%82%B9"
        ]
      },
      {
        id: "182",
        type: "fix",
        title: "张士超你到底把我家钥匙放哪里了",
        deltime: "0",
        posttime: "1453865672",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a635614bce78543705ca90943ba476b0304b7c51.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BC%A0%E5%A3%AB%E8%B6%85%E4%BD%A0%E5%88%B0%E5%BA%95%E6%8A%8A%E6%88%91%E5%AE%B6%E9%92%A5%E5%8C%99%E6%94%BE%E5%93%AA%E9%87%8C%E4%BA%86"
        ]
      },
      {
        id: "181",
        type: "fix",
        title: "南家三姐妹",
        deltime: "0",
        posttime: "1453865642",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/447910b0f954589fa9105b263a46c91a88be29ac.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%97%E5%AE%B6%E4%B8%89%E5%A7%90%E5%A6%B9"
        ]
      },
      {
        id: "180",
        type: "fix",
        title: "化妆",
        deltime: "0",
        posttime: "1453865599",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e06dbcda039eb5e6fe39f765fcb4965e8b31116f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8C%96%E5%A6%86&page=1&tids_1=155"
        ]
      },
      {
        id: "179",
        type: "fix",
        title: "哆啦A梦",
        deltime: "0",
        posttime: "1453865535",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6a702ed80245ac06450c712cb072e459b562995f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%93%86%E5%95%A6A%E6%A2%A6"
        ]
      },
      {
        id: "178",
        type: "fix",
        title: "监狱兔",
        deltime: "0",
        posttime: "1453865498",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ba090ff3b9bccb7d0b2f383012a74217c0ff8c33.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9B%91%E7%8B%B1%E5%85%94"
        ]
      },
      {
        id: "177",
        type: "fix",
        title: "乌瑟的穷困生活",
        deltime: "0",
        posttime: "1453865463",
        edittime: "1514972989",
        sttime: "1453778640",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/09b6c280d320362733d5232612481abcc4f92179.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B9%8C%E7%91%9F%E7%9A%84%E7%A9%B7%E5%9B%B0%E7%94%9F%E6%B4%BB"
        ]
      },
      {
        id: "176",
        type: "fix",
        title: "爆笑星际",
        deltime: "0",
        posttime: "1453435368",
        edittime: "1514972989",
        sttime: "1453348800",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c5e045204b5ae6fa1251bb6423b71a7844461595.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%88%86%E7%AC%91%E6%98%9F%E9%99%85"
        ]
      },
      {
        id: "175",
        type: "fix",
        title: "粗点心战争",
        deltime: "0",
        posttime: "1453348316",
        edittime: "1514972989",
        sttime: "1453261320",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8ad3cd43eef240f264da496b24b946278b1a0629.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%B2%97%E7%82%B9%E5%BF%83%E6%88%98%E4%BA%89"
        ]
      },
      {
        id: "173",
        type: "fix",
        title: "阳炎PROJECT",
        deltime: "0",
        posttime: "1453348270",
        edittime: "1514972989",
        sttime: "1453261320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/aaba793864f7169bd4b71fc4c7f4179c85d0265b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%98%B3%E7%82%8EPROJECT"
        ]
      },
      {
        id: "172",
        type: "fix",
        title: "熊本熊",
        deltime: "0",
        posttime: "1453347842",
        edittime: "1514972989",
        sttime: "1453261320",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/99fe6dee6d7c90e2b6ad37420a58fb724332f323.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%86%8A%E6%9C%AC%E7%86%8A"
        ]
      },
      {
        id: "171",
        type: "fix",
        title: "绘画",
        deltime: "0",
        posttime: "1453347797",
        edittime: "1514972989",
        sttime: "1453261320",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3184ca3c797848282f60085fe67c55a55bf19193.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BB%98%E7%94%BB"
        ]
      },
      {
        id: "170",
        type: "fix",
        title: "星际迷航",
        deltime: "0",
        posttime: "1453347725",
        edittime: "1514972989",
        sttime: "1453260480",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/02c04e9c7836e5692a8daa9b24cdcfcb91101f8e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%9F%E9%99%85%E8%BF%B7%E8%88%AA"
        ]
      },
      {
        id: "169",
        type: "fix",
        title: "阿姆斯特朗回旋加速喷气式阿姆斯特朗炮",
        deltime: "0",
        posttime: "1453347688",
        edittime: "1514972989",
        sttime: "1453260480",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8eb760963036a72c2727dcc1de63ba54dec67606.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E6%9C%97%E5%9B%9E%E6%97%8B%E5%96%B7%E6%B0%94%E5%8A%A0%E9%80%9F%E5%BC%8F%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E6%9C%97%E7%82%AE"
        ]
      },
      {
        id: "168",
        type: "fix",
        title: "山海战记",
        deltime: "0",
        posttime: "1453172813",
        edittime: "1514972989",
        sttime: "1453082880",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5f6c7ea19db25f98ef86feb624d26474d4bd682f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B1%B1%E6%B5%B7%E6%88%98%E8%AE%B0"
        ]
      },
      {
        id: "167",
        type: "fix",
        title: "卡巴迪",
        deltime: "0",
        posttime: "1453172778",
        edittime: "1514972989",
        sttime: "1453082880",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/05472367425f3c4a67c35ca5d76fd32fb233a73b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8D%A1%E5%B7%B4%E8%BF%AA"
        ]
      },
      {
        id: "166",
        type: "fix",
        title: "美琴",
        deltime: "0",
        posttime: "1453088289",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f8514c2a7f3dc94a71f7feacc746f78ccae970c3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%BE%8E%E7%90%B4"
        ]
      },
      {
        id: "165",
        type: "fix",
        title: "奥特曼",
        deltime: "0",
        posttime: "1453088118",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/878af50f4c03d20cdd6eeda252d673554e2c5071.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A5%A5%E7%89%B9%E6%9B%BC"
        ]
      },
      {
        id: "164",
        type: "fix",
        title: "尔康",
        deltime: "0",
        posttime: "1453088090",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9f27f43827a53e224c39e86d0d0c4b2dcea7be45.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B0%94%E5%BA%B7"
        ]
      },
      {
        id: "163",
        type: "fix",
        title: "松冈修造",
        deltime: "0",
        posttime: "1453088058",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d928db274d9eb51822af238f1432ac63cc0589fd.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9D%BE%E5%86%88%E4%BF%AE%E9%80%A0"
        ]
      },
      {
        id: "162",
        type: "fix",
        title: "火影忍者",
        deltime: "0",
        posttime: "1453088030",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/3ab85ab70ff1b94170eb814554fdf6e1624d2103.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%81%AB%E5%BD%B1%E5%BF%8D%E8%80%85"
        ]
      },
      {
        id: "161",
        type: "fix",
        title: "张全蛋",
        deltime: "0",
        posttime: "1453088006",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b00f00b857305759580c11128319a08fa1a71cf5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BC%A0%E5%85%A8%E8%9B%8B"
        ]
      },
      {
        id: "160",
        type: "fix",
        title: "荒木飞吕彦",
        deltime: "0",
        posttime: "1453087980",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6f5b1a41a93f69767dea0f6befff07440e5ce301.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%8D%92%E6%9C%A8%E9%A3%9E%E5%90%95%E5%BD%A6"
        ]
      },
      {
        id: "159",
        type: "fix",
        title: "去污粉",
        deltime: "0",
        posttime: "1453087954",
        edittime: "1514972989",
        sttime: "1453001220",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6cce2575e173b00021c56766aff2d9258198ee32.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%8E%BB%E6%B1%A1%E7%B2%89"
        ]
      },
      {
        id: "158",
        type: "fix",
        title: "普通disco",
        deltime: "0",
        posttime: "1452739637",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/dd062ef83f889fb2fe22e5069ce9ae4ee2d0adcb.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%99%AE%E9%80%9A%E7%9A%84disco"
        ]
      },
      {
        id: "157",
        type: "fix",
        title: "小岛秀夫",
        deltime: "0",
        posttime: "1452739503",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/2ae008e7887591a59d10dc3480298f03d1938827.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%B0%8F%E5%B2%9B%E7%A7%80%E5%A4%AB&order=totalrank&page=1"
        ]
      },
      {
        id: "156",
        type: "fix",
        title: "饥荒",
        deltime: "0",
        posttime: "1452739456",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1f9cb183f1b58cd343d813aa2c34e90fef7611ab.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%A5%A5%E8%8D%92"
        ]
      },
      {
        id: "155",
        type: "fix",
        title: "大海原与大海原",
        deltime: "0",
        posttime: "1452739402",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/b1a3d828c424b1f16290a72d985c8bc1ce658eef.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%A7%E6%B5%B7%E5%8E%9F%E4%B8%8E%E5%A4%A7%E6%B5%B7%E5%8E%9F"
        ]
      },
      {
        id: "154",
        type: "fix",
        title: "极速老师",
        deltime: "0",
        posttime: "1452739351",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7783bd2a2ea3dfe85f0c1ad3f666bcbdd55f90ff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9E%81%E9%80%9F%E8%80%81%E5%B8%88"
        ]
      },
      {
        id: "153",
        type: "fix",
        title: "冰果",
        deltime: "0",
        posttime: "1452739321",
        edittime: "1514972989",
        sttime: "1452652620",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/005d3f1c98311baaa51c630a4f85501ea939334f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%86%B0%E6%9E%9C"
        ]
      },
      {
        id: "152",
        type: "fix",
        title: "皮卡丘",
        deltime: "0",
        posttime: "1452578463",
        edittime: "1514972989",
        sttime: "1452484560",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/97e0cafbe36e091e24cb19654552f36a23124282.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%9A%AE%E5%8D%A1%E4%B8%98&order=totalrank&page=1"
        ]
      },
      {
        id: "151",
        type: "fix",
        title: "非洲boy",
        deltime: "0",
        posttime: "1452571145",
        edittime: "1514972989",
        sttime: "1452484560",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7ed4a3de40a8a0a81336a1039f319e8d6a3e3a91.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E9%9D%9E%E6%B4%B2boy&tids_1=119"
        ]
      },
      {
        id: "150",
        type: "fix",
        title: "我们这一家",
        deltime: "0",
        posttime: "1452232736",
        edittime: "1514972989",
        sttime: "1452146220",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bec5ac87f70593bb355b17c037af5840031bfb61.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%88%91%E4%BB%AC%E8%BF%99%E4%B8%80%E5%AE%B6"
        ]
      },
      {
        id: "149",
        type: "fix",
        title: "阿松",
        deltime: "0",
        posttime: "1452232695",
        edittime: "1514972989",
        sttime: "1452146220",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3b332cd02821265db07a271eb8e2029ef0e1af89.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%98%BF%E6%9D%BE"
        ]
      },
      {
        id: "148",
        type: "fix",
        title: "吃货木下",
        deltime: "0",
        posttime: "1452232653",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e823417ca4174941ddac43613ca80f857efd051e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%83%E8%B4%A7%E6%9C%A8%E4%B8%8B"
        ]
      },
      {
        id: "147",
        type: "fix",
        title: "僵尸猫",
        deltime: "0",
        posttime: "1452232600",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/9484ba894ef39a80d8c96d1e92feeabf6370c717.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%90%B8%E8%A1%80%E7%8C%AB"
        ]
      },
      {
        id: "146",
        type: "fix",
        title: "张学友",
        deltime: "0",
        posttime: "1452232559",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/912c6b1944c0778bbc4ecc8f25a9c5aab347c60d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%BC%A0%E5%AD%A6%E5%8F%8B&tids_1=119"
        ]
      },
      {
        id: "145",
        type: "fix",
        title: "丞相",
        deltime: "0",
        posttime: "1452232500",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/26c2b408e8e1ae38f7be4cae75ee8da43e853975.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%9E%E7%9B%B8"
        ]
      },
      {
        id: "144",
        type: "fix",
        title: "retoruto",
        deltime: "0",
        posttime: "1452232443",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/00cf377f28ec54111c9d6f12041dac0ac314f255.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=retoruto"
        ]
      },
      {
        id: "143",
        type: "fix",
        title: "夏目",
        deltime: "0",
        posttime: "1452232390",
        edittime: "1514972989",
        sttime: "1452140400",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/9861b6b81d1af46b792237e9a3a3beeaeaa6026b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%8F%E7%9B%AE"
        ]
      },
      {
        id: "142",
        type: "fix",
        title: "轻音少女",
        deltime: "0",
        posttime: "1451444236",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3da2ee0bd92b2b79169c6a4f4f642c6abf80849a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%BD%BB%E9%9F%B3%E5%B0%91%E5%A5%B3"
        ]
      },
      {
        id: "141",
        type: "fix",
        title: "彩虹猫",
        deltime: "0",
        posttime: "1451444207",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/5973e6caa5dde47d99238c39fa5c450b87d5aeac.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%BD%A9%E8%99%B9%E7%8C%AB"
        ]
      },
      {
        id: "140",
        type: "fix",
        title: "太鼓达人",
        deltime: "0",
        posttime: "1451444177",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8788d0f4ec9787bb3cedef4def36c7d32b579be3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%A4%AA%E9%BC%93%E8%BE%BE%E4%BA%BA"
        ]
      },
      {
        id: "139",
        type: "fix",
        title: "星球大战",
        deltime: "0",
        posttime: "1451444147",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "1480550400",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/aafcee2b9f889f35e9e1fa69eca0bbaccdf61cf0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%98%9F%E7%90%83%E5%A4%A7%E6%88%98"
        ]
      },
      {
        id: "138",
        type: "fix",
        title: "热带雨林的爆笑生活",
        deltime: "0",
        posttime: "1451444057",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/d70f479a5ae70c71ad92128f1f23e1065349ee52.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%83%AD%E5%B8%A6%E9%9B%A8%E6%9E%97%E7%9A%84%E7%88%86%E7%AC%91%E7%94%9F%E6%B4%BB"
        ]
      },
      {
        id: "137",
        type: "fix",
        title: "EVA",
        deltime: "0",
        posttime: "1451444022",
        edittime: "1514972989",
        sttime: "1451356980",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8d6d9c2b7beb0c7b66d9340780772e7e7507b2fe.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/39.html"
        ]
      },
      {
        id: "136",
        type: "fix",
        title: "裸狼",
        deltime: "0",
        posttime: "1451300143",
        edittime: "1514972989",
        sttime: "1451213520",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3024bbb0bc7951e14cd5c4d9353e9069bf544422.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%A3%B8%E7%8B%BC"
        ]
      },
      {
        id: "135",
        type: "fix",
        title: "蜡笔小新",
        deltime: "0",
        posttime: "1451300112",
        edittime: "1514972989",
        sttime: "1451213520",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/6cc6995cb51bd25af37842621150acb0f55cad91.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0"
        ]
      },
      {
        id: "134",
        type: "fix",
        title: "钢之炼金术师",
        deltime: "0",
        posttime: "1451300075",
        edittime: "1514972989",
        sttime: "1451213520",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/16cea7ba117652835f950d0da4a468107a07710c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E9%92%A2%E4%B9%8B%E7%82%BC%E9%87%91%E6%9C%AF%E5%B8%88"
        ]
      },
      {
        id: "133",
        type: "fix",
        title: "三国志",
        deltime: "0",
        posttime: "1451300016",
        edittime: "1514972989",
        sttime: "1451213520",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/ba4c1c276f8c03c00f902385d1a4a1aa408a65e1.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%89%E5%9B%BD%E5%BF%97"
        ]
      },
      {
        id: "132",
        type: "fix",
        title: "朝九晚五",
        deltime: "0",
        posttime: "1450957116",
        edittime: "1514972989",
        sttime: "1450870500",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e6e9fda14b3dc57c7dbf3096f06d9077543e4ca8.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9C%9D%E4%B9%9D%E6%99%9A%E4%BA%94"
        ]
      },
      {
        id: "131",
        type: "fix",
        title: "推倒",
        deltime: "0",
        posttime: "1450957077",
        edittime: "1514972989",
        sttime: "1450870500",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/3a53073e71e0a681f0c4276663e0547374a66afa.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%A8%E5%88%B0"
        ]
      },
      {
        id: "130",
        type: "fix",
        title: "waimo kun",
        deltime: "0",
        posttime: "1450957025",
        edittime: "1514972989",
        sttime: "1450870500",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/c362edc0ad113ead8691c30b1f74232bc369bb4a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=waimo+kun"
        ]
      },
      {
        id: "129",
        type: "fix",
        title: "泡面番",
        deltime: "0",
        posttime: "1450868346",
        edittime: "1514972989",
        sttime: "1450758240",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/12513e7be0990620ec8381d9be2c0c82c327f16f.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B3%A1%E9%9D%A2%E7%95%AA"
        ]
      },
      {
        id: "128",
        type: "fix",
        title: "挖坟",
        deltime: "0",
        posttime: "1450868319",
        edittime: "1514972989",
        sttime: "1450758240",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a5205539a5103b8c7ca3d99961742927cd6f1af5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%8C%96%E5%9D%9F&order=click"
        ]
      },
      {
        id: "127",
        type: "fix",
        title: "家有穆珂",
        deltime: "0",
        posttime: "1450868283",
        edittime: "1514972989",
        sttime: "1450758240",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8ac60cbef777d759655018d05b99d2f3ed6ca933.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/bangumi/i/2794/"
        ]
      },
      {
        id: "126",
        type: "fix",
        title: "花泽香菜",
        deltime: "0",
        posttime: "1450868245",
        edittime: "1514972989",
        sttime: "1450758240",
        endtime: "0",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/36dcef446ad558680f5a3f2432766d99deac496a.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/sp/%E8%8A%B1%E6%B3%BD%E9%A6%99%E8%8F%9C"
        ]
      },
      {
        id: "125",
        type: "fix",
        title: "暴走漫画",
        deltime: "0",
        posttime: "1450782039",
        edittime: "1514972989",
        sttime: "1450695540",
        endtime: "1482404340",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/a144630111550f2a5194d39f7e57a006797e4a9c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%9A%B4%E8%B5%B0%E6%BC%AB%E7%94%BB"
        ]
      },
      {
        id: "124",
        type: "fix",
        title: "不约",
        deltime: "0",
        posttime: "1450696045",
        edittime: "1514972989",
        sttime: "1450598460",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f4b56b2f8d796b4c98d629a6869bfdee0e621cc3.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8D%E7%BA%A6"
        ]
      },
      {
        id: "123",
        type: "fix",
        title: "miku",
        deltime: "0",
        posttime: "1450696008",
        edittime: "1514972989",
        sttime: "1450598460",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170831/o683zkj78z.gif",
        weight: "0",
        links: [
          "https:https://www.bilibili.com/blackboard/activity-Miku10th.html"
        ]
      },
      {
        id: "122",
        type: "fix",
        title: "任天堂",
        deltime: "0",
        posttime: "1450695960",
        edittime: "1514972989",
        sttime: "1450598460",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c71aa74a8ddc7bf7e08d4f7d5a72f247aa015bb5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%BB%BB%E5%A4%A9%E5%A0%82"
        ]
      },
      {
        id: "121",
        type: "fix",
        title: "目瞪口呆",
        deltime: "0",
        posttime: "1450695932",
        edittime: "1514972989",
        sttime: "1450598460",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7da608c8d87d679b3da50946190999a30d18529c.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%9B%AE%E7%9E%AA%E5%8F%A3%E5%91%86"
        ]
      },
      {
        id: "120",
        type: "fix",
        title: "苍天饶过谁",
        deltime: "0",
        posttime: "1450350704",
        edittime: "1514972989",
        sttime: "1450255560",
        endtime: "0",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/abcae160b98c6283d1daadfed8307c15d4ea5030.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%8B%8D%E5%A4%A9%E9%A5%B6%E8%BF%87%E8%B0%81"
        ]
      },
      {
        id: "119",
        type: "fix",
        title: "买买买",
        deltime: "0",
        posttime: "1450350632",
        edittime: "1514972989",
        sttime: "1450255560",
        endtime: "0",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/d8f89a73fb3711893c76459ef0bca53ad12e7a3e.gif",
        weight: "0",
        links: [
          "https://bmall.bilibili.com/"
        ]
      },
      {
        id: "118",
        type: "fix",
        title: "胖次",
        deltime: "0",
        posttime: "1450334567",
        edittime: "1514972989",
        sttime: "1450245540",
        endtime: "1481954340",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/87a3332f5f4ed41c33af182a81ae0e1278876029.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E8%83%96%E6%AC%A1&order=stow&page=1"
        ]
      },
      {
        id: "117",
        type: "fix",
        title: "爱杀宝贝",
        deltime: "0",
        posttime: "1450319358",
        edittime: "1514972989",
        sttime: "1450232640",
        endtime: "1481941440",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/93f817140c0daba690166492926e672720cf2c6e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E7%88%B1%E6%9D%80%E5%AE%9D%E8%B4%9D"
        ]
      },
      {
        id: "116",
        type: "fix",
        title: "说好的炸鸡块呢",
        deltime: "0",
        posttime: "1450319292",
        edittime: "1514972989",
        sttime: "1450232640",
        endtime: "1481941440",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/a141a5222fdb51ff8507b34c24f8fecb7ba292da.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E8%AF%B4%E5%A5%BD%E7%9A%84%E7%82%B8%E9%B8%A1%E5%9D%97%E5%91%A2"
        ]
      },
      {
        id: "115",
        type: "fix",
        title: "一拳超人",
        deltime: "0",
        posttime: "1450319257",
        edittime: "1514972989",
        sttime: "1450232640",
        endtime: "1481941440",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/e1da0f5ff76f5640c0814c708299ae4a96589b61.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%80%E6%8B%B3%E8%B6%85%E4%BA%BA"
        ]
      },
      {
        id: "113",
        type: "fix",
        title: "彩虹小马",
        deltime: "0",
        posttime: "1450177764",
        edittime: "1514972989",
        sttime: "1450091100",
        endtime: "1481799900",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/36b484b752de1071f50c40bdc7f554a9d9fc3125.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%BD%A9%E8%99%B9%E5%B0%8F%E9%A9%AC&tids_1=119"
        ]
      },
      {
        id: "112",
        type: "fix",
        title: "掀桌",
        deltime: "0",
        posttime: "1450177692",
        edittime: "1514972989",
        sttime: "1450091100",
        endtime: "1481799900",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/0a404aea7fe4d80a0289a8b9692fd9c3daa0eaff.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%8E%80%E6%A1%8C"
        ]
      },
      {
        id: "111",
        type: "fix",
        title: "懒蛋蛋",
        deltime: "0",
        posttime: "1450177612",
        edittime: "1514972989",
        sttime: "1450091100",
        endtime: "1481799900",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/4d10b8b58b4ae3cffda057bd2b22210fca3f5bc7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%87%92%E8%9B%8B%E8%9B%8B"
        ]
      },
      {
        id: "110",
        type: "fix",
        title: "巴拉拉小魔仙",
        deltime: "0",
        posttime: "1450091554",
        edittime: "1514972989",
        sttime: "1450091460",
        endtime: "1481713860",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/7942ad0abd2efa9fbb0117857f48ffda3bb4f08d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E5%B7%B4%E6%8B%89%E6%8B%89%E5%B0%8F%E9%AD%94%E4%BB%99"
        ]
      },
      {
        id: "109",
        type: "fix",
        title: "海绵宝宝",
        deltime: "0",
        posttime: "1450091465",
        edittime: "1514972989",
        sttime: "1450080000",
        endtime: "1481702400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/07a5ffcadd977d01f63326a8a22f5563ddd5f2c9.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E6%B5%B7%E7%BB%B5%E5%AE%9D%E5%AE%9D"
        ]
      },
      {
        id: "108",
        type: "fix",
        title: "错误的打开方式",
        deltime: "0",
        posttime: "1449800071",
        edittime: "1514972989",
        sttime: "1449799860",
        endtime: "1481421960",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ee3fb8667b58d5f0672281e37e7d2774226f007b.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/49.html"
        ]
      },
      {
        id: "107",
        type: "fix",
        title: "不明真相的吃瓜围观群众",
        deltime: "0",
        posttime: "1449799961",
        edittime: "1514972989",
        sttime: "1449799860",
        endtime: "1481421960",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/217fd837b0301bccf85aec2d5453d9f72ccc10a4.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/all?keyword=%E4%B8%8D%E6%98%8E%E7%9C%9F%E7%9B%B8%E7%9A%84%20%E7%BE%A4%E4%BC%97"
        ]
      },
      {
        id: "106",
        type: "fix",
        title: "天才麻将少女",
        deltime: "0",
        posttime: "1449660680",
        edittime: "1514972989",
        sttime: "1449574080",
        endtime: "1449660480",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/46122d556af3b82bedb383edf4871ae69dc533ec.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/91.html"
        ]
      },
      {
        id: "105",
        type: "fix",
        title: "新日暮里",
        deltime: "0",
        posttime: "1449660596",
        edittime: "1514972989",
        sttime: "1449574080",
        endtime: "1449660480",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/cc008f466fb633ef4d70bb810b9d7cb9509f0512.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%96%B0%E6%97%A5%E6%9A%AE%E9%87%8C&order=click"
        ]
      },
      {
        id: "104",
        type: "fix",
        title: "洛天依",
        deltime: "0",
        posttime: "1449660566",
        edittime: "1514972989",
        sttime: "1501689300",
        endtime: "1449660480",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b3e8a4538679f2f2821fcc8390ad1de6ad9c7bca.gif",
        weight: "0",
        links: [
          "https:https://www.bilibili.com/video/av12802603/"
        ]
      },
      {
        id: "103",
        type: "fix",
        title: "as we can",
        deltime: "0",
        posttime: "1449660533",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/dd7a46b549397fbe78dbac7ff3faa43c67ee393a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%AF%94%E5%88%A9&order=click"
        ]
      },
      {
        id: "102",
        type: "fix",
        title: "我已经没什么好怕的了",
        deltime: "0",
        posttime: "1449660222",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/a0e6bb9d5c2079ebb46d57e83e7568815a38439a.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86&order=click"
        ]
      },
      {
        id: "100",
        type: "fix",
        title: "齐天大圣",
        deltime: "0",
        posttime: "1449660124",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2c834cdbd53153adfd467dd310c3ef059e7a96d5.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%A4%A7%E5%9C%A3&order=click"
        ]
      },
      {
        id: "99",
        type: "fix",
        title: "复仇者联盟",
        deltime: "0",
        posttime: "1449660092",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/f22ae79cab8b0a4c2b9e7c43eb7595e9413f15fc.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%A4%8D%E4%BB%87%E8%80%85%E8%81%94%E7%9B%9F&order=click"
        ]
      },
      {
        id: "98",
        type: "fix",
        title: "虎纹鲨鱼",
        deltime: "0",
        posttime: "1449660032",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ff4807a83fe328c93dcbd8e4aad6902f9d72e207.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E8%99%8E%E7%BA%B9%E9%B2%A8%E9%B1%BC&order=click"
        ]
      },
      {
        id: "97",
        type: "fix",
        title: "灌篮高手",
        deltime: "0",
        posttime: "1449659855",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/7cbdca340d0194ef9a7c885ff1d226018d4d2f0b.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%81%8C%E7%AF%AE%E9%AB%98%E6%89%8B&order=click"
        ]
      },
      {
        id: "96",
        type: "fix",
        title: "duang",
        deltime: "0",
        posttime: "1449659802",
        edittime: "1514972989",
        sttime: "1449573360",
        endtime: "1481282160",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/4b88188a05a189c4bd7bd8a44c58b9a52386cc93.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=duang&order=click"
        ]
      },
      {
        id: "95",
        type: "fix",
        title: "新华里业务员",
        deltime: "0",
        posttime: "1449629659",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/79935d7683bd30722af393a5f91c9be6b13bc02e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%96%B0%E5%8D%8E%E9%87%8C%E4%B8%9A%E5%8A%A1%E5%91%98&tids_1=119&page=1"
        ]
      },
      {
        id: "94",
        type: "fix",
        title: "挖掘机技术哪家强",
        deltime: "0",
        posttime: "1449629566",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/66420b2addff0aadd92942f7b0ccc86c1f3c541d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%8C%96%E6%8E%98%E6%9C%BA%E6%8A%80%E6%9C%AF%E5%93%AA%E5%AE%B6%E5%BC%BA&tids_1=119"
        ]
      },
      {
        id: "93",
        type: "fix",
        title: "德国boy",
        deltime: "0",
        posttime: "1449629115",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ec41c58bbc9477cdba09eb39feecc180b14f44d2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%BE%B7%E5%9B%BDboy&tids_1=119"
        ]
      },
      {
        id: "92",
        type: "fix",
        title: "梁逸峰",
        deltime: "0",
        posttime: "1449629017",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/db237b35ab764c3feb4e2455e2baed1f63cbc0a2.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%A2%81%E9%80%B8%E5%B3%B0&page=1"
        ]
      },
      {
        id: "91",
        type: "fix",
        title: "元首",
        deltime: "0",
        posttime: "1449628671",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/623ea657e69af03fe78667bb15c59048e6c957dc.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/topic/65.html"
        ]
      },
      {
        id: "90",
        type: "fix",
        title: "立flag",
        deltime: "0",
        posttime: "1449628642",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/ea8e430bb0478b642ba2e34bd590b03467cbc934.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%AB%8Bflag"
        ]
      },
      {
        id: "89",
        type: "fix",
        title: "核爆神曲",
        deltime: "0",
        posttime: "1449628445",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/e6196afc5e86c1346a5009b16f14dcbe3d6ae73d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%A0%B8%E7%88%86%E7%A5%9E%E6%9B%B2"
        ]
      },
      {
        id: "88",
        type: "fix",
        title: "妈妈今天不在家",
        deltime: "0",
        posttime: "1449628262",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/49d2a06f3f054e8dcbc80ab354662d62fc885c49.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%A6%88%E5%A6%88%E4%BB%8A%E5%A4%A9%E4%B8%8D%E5%9C%A8%E5%AE%B6"
        ]
      },
      {
        id: "87",
        type: "fix",
        title: "金馆长",
        deltime: "0",
        posttime: "1449627879",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ee76be61c03788b767616079684af071807c396d.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E9%87%91%E9%A6%86%E9%95%BF"
        ]
      },
      {
        id: "86",
        type: "fix",
        title: "jojo",
        deltime: "0",
        posttime: "1449627835",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/6c153ef7a2f96aec5ea318fa73d5b9cb93f95f34.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=jojo"
        ]
      },
      {
        id: "85",
        type: "fix",
        title: "怪物猎人",
        deltime: "0",
        posttime: "1449627557",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/63fe1f03c513c771add893b9b9f254610b0646b0.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%80%AA%E7%89%A9%E7%8C%8E%E4%BA%BA"
        ]
      },
      {
        id: "84",
        type: "fix",
        title: "嘿嘿嘿",
        deltime: "0",
        posttime: "1449627454",
        edittime: "1514972989",
        sttime: "1449540600",
        endtime: "1481249400",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/f12a086b603fccad6e7342d5d4e53198743daba7.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E5%98%BF%E5%98%BF%E5%98%BF"
        ]
      },
      {
        id: "83",
        type: "fix",
        title: "昆特牌",
        deltime: "0",
        posttime: "1449490981",
        edittime: "1514972989",
        sttime: "1449404460",
        endtime: "1449490860",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b4f53871964fe4a48eb4c68f0a4ca096adb30a55.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%98%86%E7%89%B9%E7%89%8C"
        ]
      },
      {
        id: "82",
        type: "fix",
        title: "梁非凡",
        deltime: "0",
        posttime: "1449490637",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2a4386ea51dc1853344f3bb6d3fe677f6a0d8cec.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E6%A2%81%E9%9D%9E%E5%87%A1&page=1&tids_1=119"
        ]
      },
      {
        id: "81",
        type: "fix",
        title: "葛平",
        deltime: "0",
        posttime: "1449490495",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/dfc68ef4c18aebff26829374c50479f59f1e9b71.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E8%91%9B%E5%B9%B3&page=1"
        ]
      },
      {
        id: "80",
        type: "fix",
        title: "紫妈永远17岁",
        deltime: "0",
        posttime: "1449490417",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/456983ac8563c71788f3e16c22be89baa0a16a9e.gif",
        weight: "0",
        links: [
          "https://search.bilibili.com/video?keyword=%E7%B4%AB%E5%A6%88%E6%B0%B8%E8%BF%9C17%E5%B2%81"
        ]
      },
      {
        id: "79",
        type: "fix",
        title: "潜行吧!奈亚子W",
        deltime: "0",
        posttime: "1449489735",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/cb75081f16caf785f49a5cad13001e0c3da4e66e.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/bangumi/i/408/"
        ]
      },
      {
        id: "78",
        type: "fix",
        title: "魔法少女小圆",
        deltime: "0",
        posttime: "1449489553",
        edittime: "1514972989",
        sttime: "1449383460",
        endtime: "1481092260",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/c0e0e97e31ac090dce6cbcd5c9fe225525764baa.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "77",
        type: "fix",
        title: "we will rock you",
        deltime: "0",
        posttime: "1449226983",
        edittime: "1514972989",
        sttime: "1449226260",
        endtime: "1480848660",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b35357cc5e2916c55f34a7733469fb7ca2729af4.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=WE+WILL+ROCK+YOU&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "76",
        type: "fix",
        title: "金坷垃",
        deltime: "0",
        posttime: "1449226898",
        edittime: "1514972989",
        sttime: "1449226260",
        endtime: "1480848660",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8ca7510f973e706b592f40b09b93f332bfdec273.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E9%87%91%E5%9D%B7%E6%8B%89&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "75",
        type: "fix",
        title: "口袋妖怪",
        deltime: "0",
        posttime: "1449226636",
        edittime: "1514972989",
        sttime: "1449198660",
        endtime: "1480848660",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8d7724f290cc66fd3a613c3fc57f55eaa24a0a33.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%8F%A3%E8%A2%8B%E5%A6%96%E6%80%AA&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "74",
        type: "fix",
        title: "蓝蓝路",
        deltime: "0",
        posttime: "1449226386",
        edittime: "1514972989",
        sttime: "1449198660",
        endtime: "1480848660",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/8291a67c542f215b75c27332ea7910ffb1622335.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%93%9D%E8%93%9D%E8%B7%AF&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "73",
        type: "fix",
        title: "甩葱歌",
        deltime: "0",
        posttime: "1449142744",
        edittime: "1514972989",
        sttime: "1449054840",
        endtime: "1480763640",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0fbb5f302cdb98dd0faad421692438ab6a25db0a.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E7%94%A9%E8%91%B1%E6%AD%8C&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "72",
        type: "fix",
        title: "辐射4",
        deltime: "0",
        posttime: "1449142425",
        edittime: "1514972989",
        sttime: "1449054840",
        endtime: "1480763640",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e626c7e0fc602e320918b3e69a555e77e9be0426.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%BE%90%E5%B0%844&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "71",
        type: "fix",
        title: "贝爷",
        deltime: "0",
        posttime: "1449142186",
        edittime: "1514972989",
        sttime: "1449054840",
        endtime: "1480763640",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8db7647e99d3f4c9fca541811bf4433be0756fd4.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/sp/%E8%B4%9D%E5%B0%94%C2%B7%E6%A0%BC%E9%87%8C%E5%B0%94%E6%96%AF"
        ]
      },
      {
        id: "70",
        type: "fix",
        title: "膝盖请收下",
        deltime: "0",
        posttime: "1449141465",
        edittime: "1514972989",
        sttime: "1449054840",
        endtime: "1480763640",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1359a42b50c41d22d4ba5804b9b74be0a19aaed0.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%86%9D%E7%9B%96+%E8%AF%B7%E6%94%B6%E4%B8%8B&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "69",
        type: "fix",
        title: "半泽直树",
        deltime: "0",
        posttime: "1449141296",
        edittime: "1514972989",
        sttime: "1449054780",
        endtime: "1480763580",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/3fb9ae473fe50cd13af3bc6e2994b358e3004249.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%8D%8A%E6%B3%BD%E7%9B%B4%E6%A0%91&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "68",
        type: "fix",
        title: "是在下输了",
        deltime: "0",
        posttime: "1449055280",
        edittime: "1514972989",
        sttime: "1448967420",
        endtime: "1480676220",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/9201b6e0682a33dc5d33017767642735f8819c5a.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%98%AF%E5%9C%A8%E4%B8%8B%E8%BE%93%E4%BA%86&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "67",
        type: "fix",
        title: "雪姨",
        deltime: "0",
        posttime: "1449054038",
        edittime: "1514972989",
        sttime: "1448967420",
        endtime: "1480676220",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/30c510982561b15f427c9689607527d168f174f7.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E9%9B%AA%E5%A7%A8&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "66",
        type: "fix",
        title: "狗带",
        deltime: "0",
        posttime: "1449053990",
        edittime: "1514972989",
        sttime: "1448967420",
        endtime: "1480676220",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/8d4c72dd1a4d1948d03ed3041fc2417ba70ab2fd.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E7%8B%97%E5%B8%A6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "65",
        type: "fix",
        title: "lovelive",
        deltime: "0",
        posttime: "1449053948",
        edittime: "1514972989",
        sttime: "1448967420",
        endtime: "1480676220",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/21453207026e5597ebc67dad369eeeca41342c66.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=lovelive&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "64",
        type: "fix",
        title: "红警",
        deltime: "0",
        posttime: "1449039971",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/97b1233a87d2aaaafac7ef4d405ce762f2355128.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E7%BA%A2%E8%AD%A6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "63",
        type: "fix",
        title: "摸鱼",
        deltime: "0",
        posttime: "1449039899",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/d359d29d5876325f1c7e097dcdaf4586be228eb8.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%91%B8%E9%B1%BC&orderby=scores&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "62",
        type: "fix",
        title: "just you know why",
        deltime: "0",
        posttime: "1449039812",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/226d73e078c81e22748c67ba9bc5f8e5fc01c885.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=just+you+know+why&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "61",
        type: "fix",
        title: "你为什么这么屌",
        deltime: "0",
        posttime: "1449039696",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/79254877a35287d3fde697e8cb37e77d5fe0e156.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E4%BD%A0%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B9%88%E5%8F%BC&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "60",
        type: "fix",
        title: "坦克",
        deltime: "0",
        posttime: "1449039535",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/11637f112277371c854a7fc9e6457c5a809f4c01.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%9D%A6%E5%85%8B&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "59",
        type: "fix",
        title: "bilibili",
        deltime: "0",
        posttime: "1449039500",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/151fa668c8f083a8ed3f7a2be2ffcc652c8f0b1f.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=bilibili&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "58",
        type: "fix",
        title: "应援",
        deltime: "0",
        posttime: "1449037131",
        edittime: "1514972989",
        sttime: "1448947980",
        endtime: "1480656780",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/efc7fac0df51a458d60433014ba438037080218e.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%BA%94%E6%8F%B4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "57",
        type: "fix",
        title: "上古卷轴",
        deltime: "0",
        posttime: "1448968231",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/b6d8ef3404bbf6582e3498c981dabee994a6d029.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E4%B8%8A%E5%8F%A4%E5%8D%B7%E8%BD%B4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "56",
        type: "fix",
        title: "八尾妖姬抱回家",
        deltime: "0",
        posttime: "1448968097",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/b727e4367bf7532d76da3b1439c5301794b0b5ec.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%85%AB%E5%B0%BE%E5%A6%96%E5%A7%AC%E6%8A%B1%E5%9B%9E%E5%AE%B6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "55",
        type: "fix",
        title: "要优雅不要污",
        deltime: "0",
        posttime: "1448967687",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/e5eb20641bf6a07fbb5fb1516f9cf088fd636545.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%A6%81%E4%BC%98%E9%9B%85%E4%B8%8D%E8%A6%81%E6%B1%A1&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "54",
        type: "fix",
        title: "悲伤",
        deltime: "0",
        posttime: "1448967507",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/60ea1dfbeb389de26d0d0ae13c6fa5f696a38d04.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%82%B2%E4%BC%A4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "53",
        type: "fix",
        title: "比利",
        deltime: "0",
        posttime: "1448967484",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/2b1a9d34de4031aa40c69324d999912669527383.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%AF%94%E5%88%A9&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "52",
        type: "fix",
        title: "费玉污",
        deltime: "0",
        posttime: "1448967407",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/5f9b620676eefa92fef945f29b419bcbae32cabc.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%B4%B9%E7%8E%89%E6%B1%A1&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "51",
        type: "fix",
        title: "prprpr",
        deltime: "0",
        posttime: "1448967122",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/68fecc5fe1dd097ce8ae4de96e4966f2e4dafc59.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=prprpr&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "50",
        type: "fix",
        title: "熊猫",
        deltime: "0",
        posttime: "1448966693",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/56707d7fd0e76e5d42cf14811af3b6fe0b7cc905.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E7%86%8A%E7%8C%AB&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "49",
        type: "fix",
        title: "普通disco",
        deltime: "0",
        posttime: "1448966337",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/4e75ec60d9265407c8fccaecbc748b9a15122f69.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%99%AE%E9%80%9Adisco&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "48",
        type: "fix",
        title: "恋爱研究所",
        deltime: "0",
        posttime: "1448966021",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/575041c9e3aa6c52c29ddb80bc99c6fef533ed6b.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%81%8B%E7%88%B1%E7%A0%94%E7%A9%B6%E6%89%80&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "47",
        type: "fix",
        title: "yoooooooooooooooo",
        deltime: "0",
        posttime: "1448965872",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/f230203607de02eb3f487e4053a85df7ac940730.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=yoooooooooooo&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "46",
        type: "fix",
        title: "doge",
        deltime: "0",
        posttime: "1448965833",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/ae9c1d743b552aa38dfcc6e27fc8bbf5a333dc6f.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=doge&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "45",
        type: "fix",
        title: "装逼",
        deltime: "0",
        posttime: "1448965714",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/51ae965b6a138305e7be866d161426cda2e98479.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E8%A3%85%E9%80%BC&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "44",
        type: "fix",
        title: "2233",
        deltime: "0",
        posttime: "1448965467",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/4b7bc004f638767826158b83f39758ccd2371062.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=2233&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "43",
        type: "fix",
        title: "局座",
        deltime: "0",
        posttime: "1448965352",
        edittime: "1514972989",
        sttime: "1448872740",
        endtime: "1480581540",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/0a71119c1954bef52828c6780765de6a94f6769c.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%B1%80%E5%BA%A7&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "34",
        type: "fix",
        title: "李狗嗨",
        deltime: "0",
        posttime: "1448952587",
        edittime: "1514972989",
        sttime: "1448950020",
        endtime: "1483164420",
        state: "1",
        icon: "https://i0.hdslb.com/bfs/active/1b9a8ea64110b8ea14342be63e8f22c703d0023d.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=legal+high&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "33",
        type: "fix",
        title: "扭腰舞2",
        deltime: "0",
        posttime: "1448952498",
        edittime: "1514972989",
        sttime: "1448950020",
        endtime: "1483164420",
        state: "1",
        icon: "https://i1.hdslb.com/bfs/active/c1eaa50e18c9e3ee06b9dd024262ff008eda6700.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%89%AD%E8%85%B0%E8%88%9E&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "32",
        type: "fix",
        title: "扭腰舞",
        deltime: "0",
        posttime: "1448952395",
        edittime: "1514972989",
        sttime: "1448950020",
        endtime: "1483164420",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/6a642bd3ba9ca866bdf0b1455e29fa27ffb580fe.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E6%89%AD%E8%85%B0%E8%88%9E&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      },
      {
        id: "31",
        type: "fix",
        title: "小埋",
        deltime: "0",
        posttime: "1448952295",
        edittime: "1514972989",
        sttime: "1448950020",
        endtime: "1483164420",
        state: "1",
        icon: "https://i2.hdslb.com/bfs/active/bdd59786ad48ac3c43cae29377b203a81d434035.gif",
        weight: "0",
        links: [
          "https://www.bilibili.com/search?keyword=%E5%B0%8F%E5%9F%8B&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all"
        ]
      }
    ],
    random: [],
    random_link: null,
    ea_public: null
  };

  // src/css/avatar-animation.css
  var avatar_animation_default = "/* 鼠标放在顶栏上的动效 */\\r\\n.bili-header-m .profile-info .i-face .face {\\r\\n    border: 0\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info .i-face .pendant {\\r\\n    transform: scale(0.5);\\r\\n    width: 112px;\\r\\n    height: 112px;\\r\\n    left: -41px;\\r\\n    bottom: -46px;\\r\\n    opacity: 0;\\r\\n    transition: opacity .1s ease-in\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face {\\r\\n    left: 8px !important;\\r\\n    top: 0 !important;\\r\\n    height: 32px !important;\\r\\n    width: 32px !important;\\r\\n    transform: translateY(10px) translateX(-16px) scale(2);\\r\\n    transform-origin: top left\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .legalize {\\r\\n    transform: scale(0.5) translate(10px, 15px)\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .pendant {\\r\\n    opacity: 1\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .face {\\r\\n    border: 0;\\r\\n    box-shadow: 0 0 0 2px #fff\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face.scale-in {\\r\\n    transform: translateY(5px) translateX(-10px) scale(1.75)\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .scale-in .face {\\r\\n    height: 32px;\\r\\n    width: 32px\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face.scale-in .legalize {\\r\\n    transform: scale(0.5) translate(38px, 48px)\\r\\n}";

  // src/css/message.css
  var message_default = "/* 修复消息页样式 */\\r\\n.container[data-v-6969394c] {\\r\\n    height: calc(100vh - 42px) !important;\\r\\n}\\r\\n\\r\\n.container[data-v-1c9150a9] {\\r\\n    height: calc(100vh - 42px) !important;\\r\\n}\\r\\n\\r\\n.im-root,\\r\\n.im-root .im-list-box * {\\r\\n    font-size: 12px;\\r\\n    line-height: 42px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box {\\r\\n    width: 100%;\\r\\n    overflow: visible;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-list {\\r\\n    line-height: 42px;\\r\\n    height: 42px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-number {\\r\\n    height: 14px;\\r\\n    line-height: 13px;\\r\\n    border-radius: 10px;\\r\\n    padding: 1px 3px;\\r\\n    font-size: 12px;\\r\\n    min-width: 20px;\\r\\n    text-align: center;\\r\\n    color: #fff;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-number.im-center {\\r\\n    top: 14px;\\r\\n    left: 80px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-dot {\\r\\n    top: 11px;\\r\\n    right: -10px;\\r\\n    width: 8px;\\r\\n    height: 8px;\\r\\n    border-radius: 100%;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-dot.im-center {\\r\\n    top: 16px;\\r\\n    right: 20px;\\r\\n}";

  // src/page/header.ts
  var Header = class _Header {
    /** locs列表 */
    static locs = [1576, 1612, 1580, 1920, 1584, 1588, 1592, 3129, 1600, 1608, 1604, 1596, 2210, 1634, 142];
    /** 缓存已请求内容 */
    static record = {};
    /** 资源id */
    static get rid() {
      return this.resourceId();
    }
    /** 页面固定的资源id */
    static prid = 0;
    /** tid对照表 */
    static tid = {
      1: 1576,
      13: 1612,
      167: 1920,
      3: 1580,
      129: 1584,
      4: 1588,
      36: 1592,
      160: 1600,
      119: 1608,
      155: 1604,
      165: 1620,
      166: 1620,
      5: 1596,
      23: 1634,
      11: 1616,
      181: 2210,
      177: 2260,
      188: 3129
    };
    /**
     * 根据页面返回resourceId
     * @returns resourceId
     */
    static resourceId() {
      var _a3;
      const tid = window.bid || window.tid || window.topid;
      if (tid) {
        return (_a3 = this.tid[tid]) != null ? _a3 : 142;
      }
      if (location.href.includes("v/douga"))
        return 1576;
      if (location.href.includes("/anime"))
        return 1612;
      if (location.href.includes("v/music"))
        return 1580;
      if (location.href.includes("/guochuang"))
        return 1920;
      if (location.href.includes("v/dance"))
        return 1584;
      if (location.href.includes("v/game"))
        return 1588;
      if (location.href.includes("v/knowledge"))
        return 1592;
      if (location.href.includes("v/tech"))
        return 3129;
      if (location.href.includes("v/life"))
        return 1600;
      if (location.href.includes("v/kichiku"))
        return 1608;
      if (location.href.includes("v/fashion"))
        return 1604;
      if (location.href.includes("v/ent"))
        return 1596;
      if (location.href.includes("v/cinephile"))
        return 2210;
      if (location.href.includes("/cinema"))
        return 1634;
      return 142;
    }
    /** 顶栏分区 */
    static primaryMenu() {
      poll(() => document.querySelector("#primary_menu"), (d) => {
        const vue = d.__vue__;
        vue.menuList.forEach((d2, i, s) => {
          switch (d2.name) {
            case "动画":
              s[i].sub = [{ "name": "MAD·AMV", "route": "mad", "tid": 24, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 151 }, "desc": "具有一定制作程度的动画或静画的二次创作视频", "url": "//www.bilibili.com/video/douga-mad-1.html" }, { "name": "MMD·3D", "route": "mmd", "tid": 25, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 152 }, "desc": "使用MMD(MikuMikuDance)和其他3D建模类软件制作的视频", "url": "//www.bilibili.com/video/douga-mmd-1.html" }, { "name": "短片·手书·配音", "route": "voice", "tid": 47, "ps": 15, "rps": 10, "desc": "追求创新并具有强烈特色的短片、手书(绘)及ACG相关配音", "url": "//www.bilibili.com/video/douga-voice-1.html" }, { "name": "手办·模玩", "route": "garage_kit", "tid": 210, "ps": 15, "rps": 10, "desc": "手办模玩的测评、改造或其他衍生内容", "url": "" }, { "name": "特摄", "route": "tokusatsu", "tid": 86, "ps": 15, "rps": 10, "desc": "特摄相关衍生视频", "url": "//www.bilibili.com/video/cinephile-tokusatsu.html" }, { "name": "综合", "route": "other", "tid": 27, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 153 }, "desc": "以动画及动画相关内容为素材,包括但不仅限于音频替换、杂谈、排行榜等内容", "url": "//www.bilibili.com/video/douga-else-1.html" }];
              break;
            case "音乐":
              s[i].sub = [{ "name": "原创音乐", "route": "original", "tid": 28, "ps": 15, "rps": 10, "viewHotTag": true, "ad": { "active": true, "dataLocId": 243 }, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "原创歌曲及纯音乐,包括改编、重编曲及remix", "url": "//www.bilibili.com/video/music-original-1.html" }, { "name": "翻唱", "route": "cover", "tid": 31, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 245 }, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "对曲目的人声再演绎视频", "url": "//www.bilibili.com/video/music-Cover-1.html" }, { "name": "演奏", "route": "perform", "tid": 59, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "乐器和非传统乐器器材的演奏作品", "url": "//www.bilibili.com/video/music-perform-1.html" }, { "name": "VOCALOID·UTAU", "route": "vocaloid", "tid": 30, "ps": 15, "rps": 10, "viewHotTag": true, "ad": { "active": true, "dataLocId": 247 }, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "以VOCALOID等歌声合成引擎为基础,运用各类音源进行的创作", "url": "//www.bilibili.com/video/music-vocaloid-1.html" }, { "name": "音乐现场", "route": "live", "tid": 29, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "音乐表演的实况视频,包括官方/个人拍摄的综艺节目、音乐剧、音乐节、演唱会等", "url": "//www.bilibili.com/video/music-oped-1.html" }, { "name": "MV", "route": "mv", "tid": 193, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "为音乐作品配合拍摄或制作的音乐录影带(Music Video),以及自制拍摄、剪辑、翻拍MV", "url": "//www.bilibili.com/video/music-coordinate-1.html" }, { "name": "乐评盘点", "route": "commentary", "tid": 243, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "音乐类新闻、盘点、点评、reaction、榜单、采访、幕后故事、唱片开箱等", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音乐教学", "route": "tutorial", "tid": 244, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "以音乐教学为目的的内容", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音乐综合", "route": "other", "tid": 130, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "所有无法被收纳到其他音乐二级分区的音乐类视频", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音频", "customZone": "Audio", "route": "audio", "url": "//www.bilibili.com/audio/home?musicType=music" }, { "name": "说唱", "url": "//www.bilibili.com/v/rap" }];
              break;
            case "科技":
              s[i].name = "知识";
              s[i].route = "knowledge";
              s[i].sub = [{ "name": "科学科普", "route": "science", "tid": 201, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 261 }, "desc": "回答你的十万个为什么" }, { "name": "社科·法律·心理", "route": "social_science", "tid": 124, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 263 }, "desc": "基于社会科学、法学、心理学展开或个人观点输出的知识视频" }, { "name": "人文历史", "route": "humanity_history", "tid": 228, "ps": 15, "rps": 10, "desc": "看看古今人物,聊聊历史过往,品品文学典籍" }, { "name": "财经商业", "route": "business", "tid": 207, "ps": 15, "rps": 10, "desc": "说金融市场,谈宏观经济,一起畅聊商业故事" }, { "name": "校园学习", "route": "campus", "tid": 208, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 265 }, "desc": "老师很有趣,学生也有才,我们一起搞学习" }, { "name": "职业职场", "route": "career", "tid": 209, "ps": 15, "rps": 10, "desc": "职业分享、升级指南,一起成为最有料的职场人" }, { "name": "设计·创意", "route": "design", "tid": 229, "ps": 15, "rps": 10, "desc": "天马行空,创意设计,都在这里" }, { "name": "野生技能协会", "route": "skill", "tid": 122, "ps": 15, "rps": 10, "desc": "技能党集合,是时候展示真正的技术了" }];
              break;
            case "数码":
              s[i].name = "科技";
              s[i].route = "tech";
              s[i].sub = [{ "name": "数码", "route": "digital", "tid": 95, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "科技数码产品大全,一起来做发烧友", "url": "#" }, { "name": "软件应用", "route": "application", "tid": 230, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "超全软件应用指南", "url": "#" }, { "name": "计算机技术", "route": "computer_tech", "tid": 231, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "研究分析、教学演示、经验分享......有关计算机技术的都在这里", "url": "#" }, { "name": "科工机械", "route": "industry", "tid": 232, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "从小芯片到大工程,一起见证科工力量", "url": "#" }, { "name": "极客DIY", "route": "diy", "tid": 233, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "炫酷技能,极客文化,硬核技巧,准备好你的惊讶", "url": "#" }];
              break;
            case "生活":
              s[i].sub = [{ "name": "搞笑", "route": "funny", "tid": 138, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 273 }, "desc": "各种沙雕有趣的搞笑剪辑,挑战,表演,配音等视频", "url": "//www.bilibili.com/video/ent_funny_1.html", "locid": 4204, "recommendId": 4210, "slider": { "width": 620, "height": 220 }, "customComponent": { "name": "Energy", "leftId": 4212, "rightId": 4218, "rightType": "slide" } }, { "name": "家居房产", "route": "home", "tid": 239, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 275 }, "desc": "与买房、装修、居家生活相关的分享", "url": "#" }, { "name": "手工", "route": "handmake", "tid": 161, "ps": 15, "rps": 10, "desc": "手工制品的制作过程或成品展示、教程、测评类视频", "url": "//www.bilibili.com/video/ent-handmake-1.html" }, { "name": "绘画", "route": "painting", "tid": 162, "ps": 15, "rps": 10, "desc": "绘画过程或绘画教程,以及绘画相关的所有视频", "url": "//www.bilibili.com/video/ent-painting-1.html" }, { "name": "日常", "route": "daily", "tid": 21, "ps": 15, "rps": 10, "desc": "记录日常生活,分享生活故事", "url": "//www.bilibili.com/video/ent-life-1.html" }];
              break;
            case "鬼畜":
              s[i].sub = [{ "name": "鬼畜调教", "route": "guide", "tid": 22, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 285 }, "desc": "使用素材在音频、画面上做一定处理,达到与BGM一定的同步感", "url": "//www.bilibili.com/video/ent-Kichiku-1.html" }, { "name": "音MAD", "route": "mad", "tid": 26, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 287 }, "desc": "使用素材音频进行一定的二次创作来达到还原原曲的非商业性质稿件", "url": "//www.bilibili.com/video/douga-kichiku-1.html" }, { "name": "人力VOCALOID", "route": "manual_vocaloid", "tid": 126, "ps": 15, "rps": 10, "desc": "将人物或者角色的无伴奏素材进行人工调音,使其就像VOCALOID一样歌唱的技术", "url": "//www.bilibili.com/video/kichiku-manual_vocaloid-1.html" }, { "name": "鬼畜剧场", "route": "theatre", "tid": 216, "ps": 15, "rps": 10, "desc": "使用素材进行人工剪辑编排的有剧情的作品" }, { "name": "教程演示", "route": "course", "tid": 127, "ps": 10, "rps": 6, "rightComponent": { "name": "CmImgList", "id": 148 }, "ad": { "active": true, "dataLocId": 289 }, "hideDropdown": false, "desc": "鬼畜相关的教程演示", "url": "//www.bilibili.com/video/kichiku-course-1.html" }];
              break;
            case "时尚":
              s[i].sub = [{ "name": "美妆护肤", "route": "makeup", "tid": 157, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 279 }, "desc": "彩妆护肤、美甲美发、仿妆、医美相关内容分享或产品测评", "url": "//www.bilibili.com/video/fashion-makeup-fitness-1.html" }, { "name": "穿搭", "route": "clothing", "tid": 158, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 281 }, "desc": "穿搭风格、穿搭技巧的展示分享,涵盖衣服、鞋靴、箱包配件、配饰(帽子、钟表、珠宝首饰)等", "url": "//www.bilibili.com/video/fashion-clothing-1.html" }, { "name": "时尚潮流", "route": "trend", "tid": 159, "ps": 15, "rps": 10, "desc": "时尚街拍、时装周、时尚大片,时尚品牌、潮流等行业相关记录及知识科普", "url": "#" }];
              break;
            case "广告":
              s[i].name = "资讯";
              s[i].route = "information";
              s[i].tid = 202;
              s[i].sub = [{ "name": "热点", "route": "hotspot", "tid": 203, "ps": 18, "rps": 10, "desc": "全民关注的时政热门资讯" }, { "name": "环球", "route": "global", "tid": 204, "ps": 18, "rps": 10, "desc": "全球范围内发生的具有重大影响力的事件动态" }, { "name": "社会", "route": "social", "tid": 205, "ps": 18, "rps": 10, "desc": "日常生活的社会事件、社会问题、社会风貌的报道" }, { "name": "综合", "route": "multiple", "tid": 206, "ps": 18, "rps": 10, "desc": "除上述领域外其它垂直领域的综合资讯" }];
              break;
            case "娱乐":
              s[i].sub = [{ "name": "综艺", "route": "variety", "tid": 71, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 267 }, "desc": "所有综艺相关,全部一手掌握!", "url": "//www.bilibili.com/video/ent-variety-1.html" }, { "name": "娱乐杂谈", "route": "talker", "tid": 241, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 269 }, "desc": "娱乐人物解读、娱乐热点点评、娱乐行业分析" }, { "name": "粉丝创作", "route": "fans", "tid": 242, "ps": 15, "rps": 10, "desc": "粉丝向创作视频" }, { "name": "明星综合", "route": "celebrity", "tid": 137, "ps": 15, "rps": 10, "desc": "娱乐圈动态、明星资讯相关" }];
              break;
          }
        });
      });
      this.plaza();
      this.indexIcon();
      this.styleFix();
    }
    static banner() {
      jsonpHook.async("api.bilibili.com/x/web-show/res/loc", (url) => {
        const rid = this.rid;
        this.record[rid] || (this.record[rid] = apiPageHeader({ resource_id: rid }));
        return true;
      }, async (url) => {
        const obj = new URL(url);
        const rid = this.rid;
        obj.searchParams.delete("callback");
        url = obj.toJSON();
        _Header.prid && (url.includes(String(_Header.prid)) || (url = url.replace("ids=", \`ids=\${_Header.prid}%2C\`)));
        const loc = await fetch(url).then((d) => d.json());
        const header = await this.record[rid];
        if (loc.data) {
          this.locs.forEach((d) => {
            loc.data[d] && (loc.data[d][0].pic = header && header.pic || "//i0.hdslb.com/bfs/activity-plat/static/20171220/68a052f664e8414bb594f9b00b176599/images/90w1lpp6ry.png", loc.data[d][0].litpic = header && header.litpic, loc.data[d][0].url = header && header.url || "", loc.data[d][0].title = header && header.name || "");
            if (url.includes("loc?") && obj.searchParams.get("id") == String(d)) {
              loc.data[0].pic = header && header.pic || "//i0.hdslb.com/bfs/activity-plat/static/20171220/68a052f664e8414bb594f9b00b176599/images/90w1lpp6ry.png";
              loc.data[0].litpic = header && header.litpic || "";
              loc.data[0].url = header && header.url || "";
              loc.data[0].title = header && header.name || "";
            }
          });
        }
        return loc;
      }, false);
    }
    /** 顶栏广场 */
    static plaza() {
      jsonpHook.async("api.bilibili.com/plaza/banner", () => true, async () => {
        return { "code": 0, "result": [{ "link": "https://www.bilibili.com/blackboard/x/act_list", "end": 1640966407, "begin": 1456709887, "title": "bilibili 活动", "cover": "http://i0.hdslb.com/bfs/square/6830d0e479eee8cc9a42c3e375ca99a5147390cd.jpg", "id": 9, "created_ts": 1491386053 }, { "link": "http://www.bilibili.com/blackboard/topic_list.html", "end": 1640966418, "begin": 1544258598, "title": "话题列表", "cover": "http://i0.hdslb.com/bfs/square/b1b00a0c3ce8570b48277ae07a2e55603a4a4ddf.jpg", "id": 17, "created_ts": 1491386030 }] };
      }, false);
    }
    // 已失效 2023-09-18
    /** 顶栏动图 */
    static indexIcon() {
      jsonpHook.async("api.bilibili.com/x/web-interface/index/icon", void 0, async () => {
        return {
          code: 0,
          data: subArray(index_icon_default.fix),
          message: "0",
          ttl: 1
        };
      }, false);
    }
    /** 消息页面样式 */
    static message() {
      addCss(message_default, "message");
    }
    /** 顶栏动态记录参数失效,另行找补 */
    static videoOffset() {
      if (uid) {
        const offset3 = getCookies()[\`bp_video_offset_\${uid}\`];
        if (offset3) {
          setCookie(\`bp_t_offset_\${uid}\`, offset3);
        }
      }
    }
    /** 迷你顶栏 */
    miniHeader() {
      this.oldHeader.classList.remove("has-menu");
    }
    /** 是否mini顶栏 */
    static isMiniHead(d) {
      if (/\\/v\\/(douga|music|dance|game|knowledge|tech|life|kichiku|fashion|information|ent|cinephile|car|sports|animal)\\//.test(location.href))
        return true;
      if (/\\/mooc\\//.test(location.href))
        return true;
      return location.href.includes("blackboard/topic_list") || location.href.includes("blackboard/x/act_list") || document.querySelector(".large-header") || document.querySelector(".bili-banner") || (d == null ? void 0 : d.getAttribute("type")) == "all" ? false : true;
    }
    constructor() {
      this.oldHeader.className = "z-top-container has-menu";
      this.hookHeadV2();
      this.feedCount();
      poll(() => document.readyState === "complete", () => this.styleClear());
    }
    /** 监听新版顶栏 */
    hookHeadV2() {
      poll(() => {
        return document.querySelector("#internationalHeader") || document.querySelector("#biliMainHeader") || document.querySelector("#bili-header-container") || document.querySelector("#home_nav") || document.querySelector(".bili-header__bar");
      }, (d) => {
        _Header.isMiniHead(d) && this.miniHeader();
        this.loadOldHeader(d);
      });
      poll(() => document.querySelector(".z_top_container"), (d) => {
        this.loadOldHeader(d);
        document.querySelector(".header").style.display = "none";
      });
    }
    /** 已加载旧版顶栏 */
    oldHeadLoaded = false;
    /** 旧版顶栏节点 */
    oldHeader = document.createElement("div");
    /** 加载旧版顶栏 */
    loadOldHeader(target) {
      if (target) {
        if (target.className === "bili-header__bar") {
          addCss('.bili-header.large-header,.header-channel,.z-top-container.has-menu[type="all"] {display: none;}');
        }
        document.body.classList.remove("header-v3");
        target.style.display = "none";
        target.hidden = true;
      }
      if (this.oldHeadLoaded)
        return;
      this.oldHeadLoaded = true;
      addCss("#internationalHeader,#biliMainHeader,#bili-header-container{display: none;}");
      document.body.insertBefore(this.oldHeader, document.body.firstChild);
      (window.jQuery ? Promise.resolve() : loadScript("//static.hdslb.com/js/jquery.min.js")).then(() => loadScript("//s1.hdslb.com/bfs/seed/jinkela/header/header.js")).then(() => {
        _Header.styleFix();
      });
      _Header.primaryMenu();
      _Header.banner();
    }
    loadOldFooter(target) {
      addElement("div", { class: "footer bili-footer report-wrap-module" }, document.body, void 0, void 0, target);
      (window.jQuery ? Promise.resolve() : loadScript("//static.hdslb.com/js/jquery.min.js")).then(() => loadScript("//static.hdslb.com/common/js/footer.js")).then(() => {
        var _a3;
        target && (target.style.display = "none");
        this.styleClear();
        addCss(".bili-footer {position: relative;}");
        (_a3 = document.getElementsByClassName("bili-header-m")[1]) == null ? void 0 : _a3.remove();
      });
    }
    static fullBannerCover = false;
    /** 顶栏样式修复 */
    static styleFix() {
      addCss(".nav-item.live {width: auto;}.lt-row {display: none !important;} .bili-header-m #banner_link{background-size: cover;background-position: center !important;}", "lt-row-fix");
      addCss(avatar_animation_default, "avatarAnimation");
      this.fullBannerCover && addCss(".bili-header-m #banner_link{height: 9.375vw !important;min-width: 1000px;min-height: 155px;max-height: 240px;}");
    }
    /** 禁用新版顶栏相关样式 */
    async styleClear() {
      var _a3;
      const d = document.styleSheets;
      for (let i = 0; i < d.length; i++) {
        ((_a3 = d[i].href) == null ? void 0 : _a3.includes("laputa-header")) && (d[i].disabled = true);
      }
      _Header.styleFix();
    }
    /** 顶栏动态直播回复数目接口失效,强制标记为0 */
    feedCount() {
      xhrHook.async("api.live.bilibili.com/ajax/feed/count", void 0, async () => {
        const response = '{ "code": 0, "data": { "count": 0 }, "message": "0" }';
        return { response, responseText: response };
      }, false);
    }
  };

  // src/page/space.ts
  init_tampermonkey();

  // src/io/account-getcardbymid.ts
  init_tampermonkey();
  async function accountGetCardByMid(mid) {
    const response = await GM.fetch(objUrl(URLS.ACCOUNT_GETCARDBYMID, { mid }));
    const json = await response.json();
    return jsonCheck(json).card;
  }

  // src/json/mid.json
  var mid_default = {
    code: 0,
    data: {
      birthday: "1980-01-01",
      coins: 0,
      face: "http://i2.hdslb.com/bfs/face/9f10323503739e676857f06f5e4f5eb323e9f3f2.jpg",
      fans_badge: false,
      is_followed: true,
      jointime: 1436351229,
      level: 6,
      mid: 11783021,
      moral: 0,
      name: "哔哩哔哩番剧出差",
      official: {
        type: 1,
        desc: "哔哩哔哩番剧出差 官方账号"
      },
      pendant: {
        pid: 0,
        name: "",
        image: "",
        expire: 0
      },
      rank: "10000",
      sex: "保密",
      sign: "",
      silence: 0,
      sys_notice: {},
      theme: {},
      user_honour_info: {
        colour: null,
        mid: 0,
        tags: null
      },
      vip: {
        avatar_subscript: 1,
        avatar_subscript_url: "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png",
        due_date: 16557408e5,
        label: {
          bg_color: "#FB7299",
          bg_style: 1,
          border_color: "",
          label_theme: "annual_vip",
          path: "",
          text: "年度大会员",
          text_color: "#FFFFFF"
        },
        nickname_color: "#FB7299",
        role: 3,
        status: 1,
        theme_type: 0,
        type: 2,
        vip_pay_type: 1
      }
    },
    message: "0",
    ttl: 1
  };

  // src/utils/hook/fetch.ts
  init_tampermonkey();
  var FetchHook = class _FetchHook {
    static inited = false;
    static rules = /* @__PURE__ */ new Set();
    static init() {
      const fetch2 = self.fetch;
      self.fetch = (input, init) => {
        var _a3;
        const url = input instanceof Request ? input.url : typeof input === "string" ? input : input.toJSON();
        const obj = { input: url, init };
        let fetchHook;
        for (const rule of this.rules) {
          if (rule && rule.urls.every((d) => url.includes(d))) {
            (_a3 = rule.\$request) == null ? void 0 : _a3.call(rule, obj);
            rule.\$response && (fetchHook = rule);
          }
        }
        if (fetchHook) {
          return new Promise((resolve, reject) => {
            if (fetchHook.noRequest) {
              fetchHook.\$response().then((d) => {
                d ? resolve(new Response(d, { status: 200, statusText: "" })) : reject();
              }).catch(reject);
            } else {
              fetch2(obj.input, obj.init).then(async (d) => {
                const res = await fetchHook.\$response(d.clone());
                resolve(res ? new Response(res, { status: d.status, statusText: d.statusText, headers: d.headers }) : d);
              }).catch(reject);
            }
          });
        }
        return fetch2(obj.input, obj.init);
      };
      this.inited = true;
    }
    urls;
    /** 不发送原始请求 */
    noRequest = false;
    /** 取消本次拦截 */
    noModify = false;
    constructor(...urls) {
      _FetchHook.inited || _FetchHook.init();
      this.urls = urls;
      _FetchHook.rules.add(this);
    }
    \$request;
    /**
     * 拦截修改fetch请求
     * 
     * @param callback 修改请求的回调函数,将fetch参数包裹为对象传入,修改对应属性即可。
     */
    request(callback) {
      this.\$request = callback;
    }
    \$response;
    /**
     * 拦截修改fetch返回值
     * 
     * @param callback 修改返回值的回调函数,将原Response传入,异步返回新返回值即可,也可以不反悔任何值,表示使用不修改原始值
     * @param noRequest 不发送原始请求,callback中将不会原Response。通常用于不依赖原始返回值便能构造新返回值的情形。此时callback必须返回值!
     */
    response(callback, noRequest = false) {
      this.\$response = callback;
      this.noRequest = noRequest;
    }
  };

  // src/utils/vdomtool.ts
  init_tampermonkey();
  var VdomTool = class {
    vdom;
    constructor(html) {
      if (typeof html === "string") {
        this.vdom = htmlVnode(html);
      } else {
        this.vdom = html;
      }
    }
    /** 生成 DocumentFragment(会过滤script标签,请稍后使用\`loadScript\`方法依次运行所有script) */
    toFragment() {
      const fragment = document.createDocumentFragment();
      this.vdom.forEach((d) => {
        fragment.appendChild(this.createElement(d));
      });
      return fragment;
    }
    /** 根据vdom生成真DOM(过滤script标签) */
    createElement(element) {
      if (element.tagName === "text") {
        return document.createTextNode(element.text);
      }
      if (element.tagName === "svg") {
        return this.createSVG(element);
      }
      const node = document.createElement(element.tagName);
      element.props && Object.entries(element.props).forEach((d) => {
        node.setAttribute(d[0], d[1]);
      });
      element.text && node.appendChild(document.createTextNode(element.text));
      element.event && Object.entries(element.event).forEach((d) => {
        node.addEventListener(...d);
      });
      if (element.tagName === "script") {
        node.async = false;
      }
      element.children && element.children.forEach((d) => {
        node.appendChild(this.createElement(d));
      });
      return node;
    }
    /** svg限定生成方法 */
    createSVG(element) {
      const node = document.createElementNS("http://www.w3.org/2000/svg", element.tagName);
      element.props && Object.entries(element.props).forEach((d) => {
        node.setAttribute(d[0], d[1]);
      });
      element.children && element.children.forEach((d) => {
        node.appendChild(this.createSVG(d));
      });
      return node;
    }
    /** 添加为目标节点的子节点 */
    appendTo(node) {
      try {
        node.append(this.toFragment());
      } catch (e) {
        debug.error(e);
      }
    }
    /** 替换目标节点 */
    replace(node) {
      try {
        node.replaceWith(this.toFragment());
      } catch (e) {
        debug.error(e);
      }
    }
    addEventListener(target, type, listener) {
      try {
        const arr2 = target.split("");
        let dom = this.vdom;
        let ele;
        while (dom && arr2.length) {
          const i = Number(arr2.shift());
          if (i) {
            ele = dom[i];
            dom = ele.children;
          }
        }
        ele.event || (ele.event = {});
        ele.event[type] = listener;
      } catch (e) {
        debug.error(e);
      }
    }
    removeEventListener(target, type) {
      var _a3;
      try {
        const arr2 = target.split("");
        let dom = this.vdom;
        let ele;
        while (dom && arr2.length) {
          const i = Number(arr2.shift());
          if (i) {
            ele = dom[i];
            dom = ele.children;
          }
        }
        (_a3 = ele.event) == null ? true : delete _a3[type];
      } catch (e) {
        debug.error(e);
      }
    }
  };

  // src/page/space.ts
  var Mid = {
    11783021: "哔哩哔哩番剧出差",
    1988098633: "b站_戲劇咖",
    2042149112: "b站_綜藝咖"
  };
  var PageSpace = class {
    mid;
    /** 失效视频aid */
    aids = [];
    aidInfo = [];
    constructor() {
      this.mid = Number(BLOD.path[3] && BLOD.path[3].split("?")[0]);
      this.midInfo();
      user.addCallback((status) => {
        status.album && this.album();
        status.jointime && this.jointime();
        status.lostVideo && this.lostVideo();
      });
    }
    /** 修复限制访问up空间 */
    midInfo() {
      switch (this.mid) {
        case 11783021:
        case 1988098633:
        case 2042149112:
          mid_default.data.mid = this.mid;
          mid_default.data.name = mid_default.data.official.desc = (Mid[this.mid] || Mid[11783021]) + " 官方帐号";
          xhrHook("acc/info?", void 0, (obj) => {
            if (obj.responseText && obj.responseText.includes("-404")) {
              obj.response = obj.responseText = JSON.stringify(mid_default);
              toast.warning("该用户被404,已使用缓存数据恢复访问!");
            } else if (obj.responseType === "blob" && obj.response.size === 46) {
              obj.response = new Blob([JSON.stringify(mid_default)], { type: "application/json" });
              toast.warning("该用户被404,已使用缓存数据恢复访问!");
            }
          }, false);
          new FetchHook("acc/info?").response(async (res) => {
            const text = await res.text();
            if (text.includes("-404")) {
              return JSON.stringify(mid_default);
            }
          });
          break;
        default:
          break;
      }
    }
    /** 还原相簿 */
    album() {
      xhrHook("api.bilibili.com/x/dynamic/feed/draw/doc_list", void 0, (obj) => {
        const response = JSON.parse(obj.responseText);
        let data = response.data.items.reduce((s, d) => {
          s.push(d.doc_id);
          return s;
        }, []);
        setTimeout(() => {
          document.querySelectorAll(".album-card").forEach((d, i) => {
            d.firstChild.href = \`//h.bilibili.com/\${data[i]}\`;
            d.children[1].href = \`//h.bilibili.com/\${data[i]}\`;
          });
        }, 1e3);
      }, false);
    }
    /** 动态重定向回相簿 */
    static album() {
      xhrHook(["x/polymer/web-dynamic", "detail?"], void 0, (res) => {
        var _a3;
        const result = res.responseType === "json" ? res.response : JSON.parse(res.response);
        if (result.code === 0) {
          if (((_a3 = result.data) == null ? void 0 : _a3.item.type) === "DYNAMIC_TYPE_DRAW")
            location.replace(\`https://h.bilibili.com/\${result.data.item.basic.rid_str}\`);
        }
      }, false);
    }
    /** 注册时间 */
    jointime() {
      poll(() => document.querySelector(".section.user-info"), (t) => {
        accountGetCardByMid(this.mid).then((d) => {
          const jointime = timeFormat(d.regtime * 1e3, true);
          const node = t.lastChild;
          new VdomTool(\`<div class="info-regtime" style="display: inline-block;word-break: break-all;">
                    <span class="info-command" style="display: inline-block;font-size: 12px;font-family: Microsoft YaHei;line-height: 16px;color: #9499a0;margin-right: 16px;">注册</span>
                    <span class="info-value" style="color: #6d757a;font-family: Microsoft YaHei;font-size: 12px;line-height: 16px;padding-right: 15px;">\${jointime}</span>
                </div>\`).appendTo(node);
        });
      });
    }
    /** 失效视频 */
    lostVideo() {
      xhrHook("x/v3/fav/resource/list", void 0, async (res) => {
        var _a3;
        try {
          const data = jsonCheck(res.response);
          (_a3 = data.data) == null ? true : delete _a3.ttl;
          if (data.data.medias) {
            data.data.medias.forEach((d) => {
              d.attr % 2 && this.aids.push(d.id);
            });
          }
          if (this.aids.length) {
            const msg = toast.list("失效视频 >>>", "> " + this.aids.join(" "));
            this.lostVideoView().then(() => {
              setTimeout(() => {
                msg.push("> 数据返回,正在修复~");
                let resolve = 0, reject = 0;
                msg.type = "success";
                const ele = document.querySelector("#page-fav");
                if (ele) {
                  const medias = ele.__vue__.favListDetails.medias;
                  medias == null ? void 0 : medias.forEach((d) => {
                    var _a4, _b2;
                    if (d.attr % 2) {
                      msg.push(\`> av\${d.id}\`);
                      if (this.aidInfo[d.id].title) {
                        resolve++;
                        d.title = this.aidInfo[d.id].title;
                        msg.push(">" + this.aidInfo[d.id].title);
                      } else {
                        reject++;
                        d.title = \`av\${d.id}\`;
                        msg.push("> 未能获取到有效信息!");
                      }
                      this.aidInfo[d.id].cover && (d.cover = this.aidInfo[d.id].cover);
                      d.attr = 0;
                      (_b2 = (_a4 = ele.querySelector(\`[data-aid=\${d.bvid}]\`)) == null ? void 0 : _a4.children[1]) == null ? void 0 : _b2.setAttribute("style", "text-decoration : line-through;color : #ff0000;");
                    }
                  });
                }
                msg.push("> ", \`> 修复结束:成功 \${resolve} 失败 \${reject}\`);
                msg.delay = 4;
              }, 100);
            });
          }
        } catch {
        }
      }, false);
    }
    lostVideoView() {
      const arr2 = [];
      while (this.aids.length) {
        arr2.push((async () => {
          const d = this.aids.shift();
          if (this.aidInfo[d])
            return;
          let title, cover;
          await GM.fetch(\`//www.biliplus.com/video/av\${d}\`).then((d2) => d2.text()).then((d2) => {
            if (d2.match(/\\<title\\>.+?\\ \\-\\ AV/)) {
              title = d2.match(/\\<title\\>.+?\\ \\-\\ AV/)[0].replace(/<title>/, "").replace(/ - AV/, "");
              cover = d2.match(/\\<img style=\\"display:none\\"\\ src=\\".+?\\"\\ alt/)[0].replace(/<img style="display:none" src="/, "").replace(/" alt/, "");
            }
          }).catch((e) => {
            debug.error(\`获取失效视频av\${d}信息错误\`, "BILIPLUS", e);
          });
          if (!title || !cover) {
            await GM.fetch(\`//www.biliplus.com/all/video/av\${d}\`).then((d2) => d2.text()).then((d2) => {
              if (d2.match("/api/view_all?")) {
                const url = d2.match(/\\/api\\/view_all\\?.+?\\',cloudmoe/)[0].replace(/\\',cloudmoe/, "");
                return GM.fetch(\`//www.biliplus.com\${url}\`);
              }
              throw new Error("无cid缓存");
            }).then((d2) => d2.json()).then((d2) => {
              d2 = jsonCheck(d2);
              title = title || d2.data.info.title;
              cover = cover || d2.data.info.pic;
            }).catch((e) => {
              debug.error(\`获取失效视频av\${d}信息错误\`, "BILIPLUSALL", e);
            });
          }
          if (!title || !cover) {
            await GM.fetch(\`//www.jijidown.com/video/av\${d}\`).then((d2) => d2.text()).then((d2) => {
              if (d2.match("window._INIT")) {
                title = title || d2.match(/\\<title\\>.+?\\-哔哩哔哩唧唧/)[0].replace(/<title>/, "").replace(/-哔哩哔哩唧唧/, "");
                cover = cover || d2.match(/\\"img\\":\\ \\".+?\\",/)[0].match(/http.+?\\",/)[0].replace(/",/, "");
              }
            }).catch((e) => {
              debug.error(\`获取失效视频av\${d}信息错误\`, "JIJIDOWN", e);
            });
          }
          cover = cover && cover.replace("http:", "");
          this.aidInfo[d] = { title, cover };
        })());
      }
      return Promise.all(arr2);
    }
  };

  // src/page/media.ts
  init_tampermonkey();
  var PageMedia = class {
    constructor() {
      this.limit();
    }
    /** 解除限制 */
    limit() {
      xhrHook("user/status", void 0, (res) => {
        try {
          const result = jsonCheck(res.response);
          result.result.area_limit = 0;
          result.result.ban_area_show = 0;
          res.responseType === "json" ? res.response = result : res.response = res.responseText = JSON.stringify(result);
        } catch (e) {
        }
      }, false);
    }
  };

  // src/page/history.ts
  init_tampermonkey();
  var PageHistory = class {
    constructor() {
      user.addCallback((status) => {
        status.history && this.archive();
      });
    }
    /** 纯视频历史记录 */
    archive() {
      xhrHook(["api.bilibili.com/x/web-interface/history/cursor", "business"], function(args) {
        let obj = new URL(args[1]), max2 = obj.searchParams.get("max") || "", view_at = obj.searchParams.get("view_at") || "";
        args[1] = objUrl("//api.bilibili.com/x/web-interface/history/cursor", { max: max2, view_at, type: "archive", ps: "20" });
      }, void 0, false);
    }
  };

  // src/page/live.ts
  init_tampermonkey();

  // src/core/report.ts
  init_tampermonkey();
  var Cache = class {
    fpriskMsg = {};
  };
  var EventTracker = class {
    extMsgs = {};
    legalContainer = "report-wrap-module";
    bindEvent() {
    }
    bindHeatMapEvent() {
    }
    checkContainer() {
    }
    eventCB() {
    }
    handleSelfDefReport() {
    }
    todo() {
    }
  };
  var LoadTracker = class {
    msg = {};
    showRawPerformance() {
    }
    todo() {
    }
  };
  var PvTracker = class {
    extMsgs = {};
    _uuid = "";
    sendPV() {
    }
    todo() {
    }
  };
  var ScrollTracker = class {
    extMsgs = {};
    ignoreHidden = true;
    reportedIds = [];
    scrollDivClass = "";
    scrollLintenerFns = [];
    scrollMsg = {};
    scrollReportOffset = 200;
    scrollSubDivClass = "";
    addScrollListenNode() {
    }
    checkScroll() {
    }
    customReport() {
    }
    getOffset() {
    }
    inView() {
    }
    judgeAppear() {
    }
    judgeCustom() {
    }
    judgeHidden() {
    }
    judgeSubAppear() {
    }
    removeScrollListenNode() {
    }
    subInView() {
    }
    todo() {
    }
    todoCustom() {
    }
  };
  var reportConfig = { msgObjects: "spmReportData", sample: -1, scrollTracker: false };
  var reportMsgObj = {};
  var ReportObserver = class {
    constructor() {
      propertyHook(window, "reportObserver", this);
      propertyHook(window, "reportConfig", reportConfig);
    }
    cache = new Cache();
    eventTracker = new EventTracker();
    loadTracker = new LoadTracker();
    pvTracker = new PvTracker();
    scrollTracker = new ScrollTracker();
    forceCommit() {
    }
    importTracker() {
    }
    init() {
    }
    initBsource() {
    }
    initTracker() {
    }
    reportCustomData() {
    }
    reportWithAdditionalParam() {
    }
    reportWithSpmPrefix() {
    }
    sendPV() {
    }
    sendPerformance() {
    }
    setSPM_id() {
    }
    setSpeicalMsg() {
    }
    updateConfig() {
    }
  };
  var statisObserverConfig = {
    blackEvents: [],
    clickConfig: { logId: "", isDoubleWrite: false },
    loadPerform: false,
    loadSpecial: false,
    performConfig: { isWrite: false },
    pvConfig: { isDoubleWrite: false, logId: "", selfDefMsg: {} },
    selfConfig: { logId: "", isDoubleWrite: false, isSelfDefWrite: false, isDefaultWrite: false },
    spmId: ""
  };
  var StatisObserver = class {
    __bufferFuns = [];
    __initConfig = {};
    __loadedFlag = { baidu: false, error: false, event: false, perform: false, pv: false, special: false };
    __visitId = "";
    constructor() {
      propertyHook(window, "__statisObserver", this);
      propertyHook(window, "reportMsgObj", reportMsgObj);
      propertyHook(window, "__statisObserverConfig", statisObserverConfig);
    }
    addClickTracker() {
    }
    addLegalContainer() {
    }
    addSelfDefineMsg() {
    }
    forceCommit() {
    }
    getPvid() {
    }
    removeLegalContainer() {
    }
    removeSelfDefineMsg() {
    }
    sendBaidu() {
    }
    sendClickEvent() {
    }
    sendCustomMetrics() {
    }
    sendError() {
    }
    sendPV() {
    }
    sendPerform() {
    }
    sendSpecial() {
    }
    setAttrName() {
    }
    setBaseUrl() {
    }
    setErrorInterval() {
    }
    setErrorLogId() {
    }
    setEventLogId() {
    }
    setEventSendStatus() {
    }
    setPVLogId() {
    }
    setPVSendStatus() {
    }
    setPerformLogId() {
    }
    setPvid() {
    }
    setSpecialFirstLoop() {
    }
    setSpecialInterval() {
    }
    setSpecialLogId() {
    }
    setSpmId() {
    }
    startPoolListen() {
    }
    startSpecialLoop() {
    }
    stopPoolListen() {
    }
    stopSpecialLoop() {
    }
  };

  // src/core/url.ts
  init_tampermonkey();
  var paramsSet = /* @__PURE__ */ new Set([
    "spm_id_from",
    "from_source",
    "msource",
    "bsource",
    "seid",
    "source",
    "session_id",
    "visit_id",
    "sourceFrom",
    "from_spmid",
    "share_source",
    "share_medium",
    "share_plat",
    "share_session_id",
    "share_tag",
    "unique_k",
    "vd_source",
    "csource"
  ]);
  var paramArr = Object.entries({
    from: ["search"]
  });
  var UrlCleaner = class {
    /** 垃圾参数序列 */
    paramsSet = paramsSet;
    /** 精准爆破序列 */
    paramArr = paramArr;
    constructor() {
      var _a3;
      this.location();
      (_a3 = window.navigation) == null ? void 0 : _a3.addEventListener("navigate", (e) => {
        const newURL = this.clear(e.destination.url);
        if (e.destination.url != newURL) {
          e.preventDefault();
          if (newURL == window.location.href)
            return;
          if (e.navigationType !== "traverse") {
            this.updateLocation(newURL, e.navigationType);
          }
        }
      });
      window.addEventListener("click", (e) => this.anchorClick(e));
      window.addEventListener("contextmenu", (e) => this.anchorClick(e));
      document.addEventListener("DOMContentLoaded", () => {
        this.location();
        this.anchor(document.querySelectorAll("a"));
      }, { once: true });
    }
    /** 净化url */
    clear(str) {
      const url = new URL2(str);
      if (url && !str.includes("passport.bilibili.com")) {
        const params = url.params;
        if (params.bvid) {
          params.aid = AV.fromBV(params.bvid);
        }
        if (params.aid && !Number(params.aid)) {
          params.aid = AV.fromBV(params.aid);
        }
        paramsSet.forEach((d) => {
          delete params[d];
        });
        paramArr.forEach((d) => {
          if (params[d[0]]) {
            if (d[1].includes(params[d[0]])) {
              delete params[d[0]];
            }
          }
        });
        url.base = AV.fromStr(url.base);
        url.hash && (url.hash = AV.fromStr(url.hash));
        return url.toJSON();
      } else
        return str;
    }
    /** 净化URL */
    location() {
      this.updateLocation(this.clear(location.href));
    }
    /** 更新URL而不触发重定向 */
    updateLocation(url, fun) {
      const Url = new self.URL(url);
      if (Url.host === location.host) {
        if (fun === "push") {
          window.history.pushState(window.history.state, "", url);
        } else {
          window.history.replaceState(window.history.state, "", url);
        }
      }
    }
    /** 点击回调 */
    anchorClick(e) {
      var f = e.target;
      for (; f && "A" !== f.tagName; ) {
        f = f.parentNode;
      }
      if ("A" !== (f == null ? void 0 : f.tagName)) {
        return;
      }
      this.anchor([f]);
    }
    /** 净化a标签 */
    anchor(list) {
      list.forEach((d) => {
        if (!d.href)
          return;
        d.href = this.clear(d.href);
      });
    }
  };
  var urlCleaner = new UrlCleaner();

  // src/page/live.ts
  var PageLive = class {
    sleep = false;
    constructor() {
      user.addCallback((status) => {
        status.disableSleepChcek && this.disAbleSleepCheck();
        status.disableReport && new StatisObserver();
      });
      this.urlClean();
    }
    /** 添加url清理参数 */
    urlClean() {
      urlCleaner.paramsSet.add("broadcast_type");
      urlCleaner.paramsSet.add("is_room_feed");
    }
    /** 禁止挂机检测 */
    disAbleSleepCheck() {
      const setInterval2 = self.setInterval;
      const setTimeout2 = self.setTimeout;
      self.setInterval = (...args) => {
        if (args[1] === 3e5) {
          if (!this.sleep) {
            this.sleep = true;
            toast.warning("成功阻止直播间挂机检测!");
          }
          return Number.MIN_VALUE;
        }
        return setInterval2.call(self, ...args);
      };
      self.setTimeout = (...args) => {
        if (args[1] === 3e5) {
          if (!this.sleep) {
            this.sleep = true;
            toast.warning("成功阻止直播间挂机检测!");
          }
          return Number.MIN_VALUE;
        }
        return setTimeout2.call(self, ...args);
      };
    }
  };

  // src/page/dynamic.ts
  init_tampermonkey();
  var PageDynamic = class {
    constructor() {
      user.addCallback((status) => {
        status.liveRecord || this.liveRecord();
      });
    }
    liveRecord() {
      xhrHook("api.bilibili.com/x/polymer/web-dynamic/v1/feed/all", void 0, (r) => {
        try {
          const response = jsonCheck(r.response);
          response.data.items = response.data.items.filter((d) => {
            var _a3, _b2, _c, _d, _e;
            return ((_e = (_d = (_c = (_b2 = (_a3 = d.modules) == null ? void 0 : _a3.module_dynamic) == null ? void 0 : _b2.major) == null ? void 0 : _c.archive) == null ? void 0 : _d.badge) == null ? void 0 : _e.text) != "直播回放";
          });
          r.responseType === "json" ? r.response = response : r.response = r.responseText = JSON.stringify(response);
        } catch (e) {
        }
      }, false);
    }
  };

  // src/page/index.ts
  init_tampermonkey();

  // src/html/index.html
  var html_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8" />\\r\\n    <title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <meta name="keywords"\\r\\n        content="Bilibili,哔哩哔哩,哔哩哔哩动画,哔哩哔哩弹幕网,弹幕视频,B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,二次元,游戏视频,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid,日本动漫,国产动漫,手机游戏,网络游戏,电子竞技,ACG燃曲,ACG神曲,追新番,新番动漫,新番吐槽,巡音,镜音双子,千本樱,初音MIKU,舞蹈MMD,MIKUMIKUDANCE,洛天依原创曲,洛天依翻唱曲,洛天依投食歌,洛天依MMD,vocaloid家族,OST,BGM,动漫歌曲,日本动漫音乐,宫崎骏动漫音乐,动漫音乐推荐,燃系mad,治愈系mad,MAD MOVIE,MAD高燃" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩" />\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/jinkela/home/css/home.0.4eadf4209b1762230047120e0a9945a9f3b56fd1.css" />\\r\\n    <style type="text/css">\\r\\n        /* 隐藏失效节点 */\\r\\n        #fixed_app_download,\\r\\n        #app>div.report-wrap-module.elevator-module>div.ver {\\r\\n            display: none;\\r\\n        }\\r\\n\\r\\n        /* 禁用失效节点 */\\r\\n        .bili-tab.rank-tab,\\r\\n        .bili-dropdown.rank-dropdown {\\r\\n            pointer-events: none;\\r\\n        }\\r\\n\\r\\n        /* 资讯区图标 */\\r\\n        .icon.icon_t.icon-news {\\r\\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA39pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzNhZmQ3OS04ZTViLWQ2NDItOTYxZi0yNDM2MGQyN2JhM2YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTFEMzQ4MEJBNUM1MTFFQ0FGQTk5NEVFMjgwODg3M0UiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTFEMzQ4MEFBNUM1MTFFQ0FGQTk5NEVFMjgwODg3M0UiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjBiNzNlZjA5LTA1ZmEtNTM0MC1iMWY3LWE4MTljMjFhYmEzMiIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjI2MDJjOTk2LTBiNzQtZDQ0MC1hMzcxLTIxN2NkM2ZlOTgzMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsCIXZoAAAi+SURBVHja7Fh7TJvXFT+fwTa2MX5gXjZgg3kEJvICh6YELUujNKNb10ZpWFc17aapSxcpy1YlUjctUbt0L22VMm2NlkXLsqZJWdT0sWwlaZOmCwW1gfIMCSYYDOZhDH6ADdjGvvvOhc8YY8Bru61/9EhX97vnnnvv755z7znnfgwhBD7PxIPPOcWHNxiGWdSp0Wi2eX0+uSxJVuxyOaXIk8nkk1hj2+FwlHGyCoWiMbwfaXLCNRIEsAsFAufU9LSdLxL2jw4O21cCFGlRJpzBAUzTqnX2Qdtlti8/XFir04AqK58RieVgtxinPB6XyFBRRQf19nfDtH10Cr+Rj/XIuNvnnXQJuPFCqcznc0+YgyRoCQaD/ckq1d/HbLaLMQP0zPjmtCFN7Nq45csFzxz4IeTk6ilPJBGDLjMNJAmCmM0zMu4Ci2UEek09YBs0w+jENHR13aV9nS0fTHXe6hRpdbojPT13jy0HkDK44p72QmpKyncl8uQZEiOxY2j5JLT/0E9IfFx8EC0WDQ+WJRqUihNOVz++78nzZ14KafS/QWgJnF+eKCFypWI3Z+pIDS65xTweL7vSULLsxHE8Hj2rkRdq0Rzz/VzhLSOLIEsrtzIsCGXMbobH8DJzS8qjCuMygWAwpP7lKBhhpmAUWc46ZYZy7M+PGaAgMUkb3u7r7YWrV94Bv98PZL7d3NT0mZm6pGQdhLurFQF2dfaowt0C3anbDUODg9DR1hZq28ftnxlAbbaeWi0mgLV1danRHLZAKGQBtgPr+BbxUZM1587DG6+9Bk6nk7aNXV2078b196m2kdACttFRWr98+i+s3MeRniTf+uP90phMjOBUcskinkqlArVGAw0f1Id4uCCC1uXowOv1Qf2NOhAIBHDX2E03guAGzP1UDi3g9/lpvbGsFHL0uaF5sjQptD6Vti5rVYDD/b1aTnuRx3rt+nV0gZHhEdoetVpp7Z50g1AogPGxMdBkZdG612SiG0KQKKfLyQF1pgYK1hRCR3sHCPj80LzJiiQaYXDtVQFmZOeYlzsLKampdCEEGW56BF5RWQk7H6gCuVw+dxxYEPr8PJAmSeHjxibI0mZT+fLNm0EqlcL1a+99umxmzOmJKlxqWLhsOblzZmpraYU7nbfxJtI2mtzn9YImMxMy1GrKS2U3N2QZpGdwcnISfD7vkrndnqn1q2Yzx399lNrP7bCGeLl5emo6JLFEAl9/+KGF7288SM0pSUwEuUIx5zbWroXCoiLgs2bE71y9nsoioVbTM9JDm0NiN0PQcyRKxC2rAmx/Ypdff6IGPaiQu8cikZgWjtCMHOHCXypZHHWQJw7/ngeHNR6RSJqc8jJRjnx0E0t++iLN5UYtff+zhHTaQzM0MFRs88d0Bll1m+saO0KxcqWElgt/keyFWLy0L5IwFUOyDPQOxQQwL0/f8uGNSySWbJdzR5HshVi8tC+SME+E1VLs8HxQlZKyC3O0my13FuVuASyBIC3++TKL7SCbH9PyiVJC8s29TxPMP7lIEpkPxi9RqSD+OtavvPQ8FB0/DX0WKzVjUe1lGLm/FOKS9ayb8BE2ajAkTI+xPg7T/noOhqrKwK/eACn8IH0qZKepmtN+/ofJVW8xkulun51NWs/86W+XH12z5U0hBvPUty4A+f0JMmLez1j2PAYJXh89WbJpE1imJaAWutlavOwxQOKrsyGruR54hw5Pqxu3i7oOfh9uTCXTd4xtfPxfy20o6puELp4ovpoglVfI9v5CaPBPwQWlHWzt3dOHlEoRXoDkNDkok5SQmiRaERhH+B550GaFEkkCtHtm4HmvGhqMTeB4/1VjYpK02mG3t0SbZ5EGERSmPrOB2Xo2swZJaZXQVvxVeKf1FrQ+ooNS93HR2NlzYFLIiNXu8eFkMxNOAcbSCE8g4F5x4d/fySsW8N/4DbPjnBkc7nWgvP4q4FocuJhMLMsvLSDf/lGB3J9FknfeA/iasXS+jUGMTd5K4NK+FOAfe44Z7LopnHv7OsEx7hAqkuciCfsdmovlURlpkhy89WcFWa1+hkgVILS0Anm4wKerqBHAweonXd1N9yLQ3Fw9+pxjywJMksmewTRPf98jkC2eZHrYvIDPruv0Z8OfGzuhbE8pkOpfAsyOgKbQQGuINwC5+RGQzjvAFK8BYh0G3mM7WH76fH86ndv/8iWGbNDDW7e9MDNkhfUBEPBU2ZB7tgGCY/0FfQerC/q7m4yRABf5QVS1w3jzWt/hvdA/JaXgkGZScqCm9haAZhN0GPLh/vRiYDUYWpwxbAJIl8Hsm/+gIClx4Nj6e9u2B4/WnATeE3vhSkc3O5+Bzu1nlc0qYi6iDHd78Syu6Adp5qHJUPLj+V2p9z1O9C80BAsvuMiGdwkRP11L37F6vTaIfhJL+dbt5OBT3yL1b9cQ4h+ec2xsffujK5R39IXfEk4WC8qqD5wkca+4yKYmQgu2sQ/9bzQ/uARgWBb9KxyIE+y+PUF4R7qoQ0XHah60UnAcSORvrdpNN4BtVdE9RLn7Z7Qgf3jMSUFzfARWdtlMx+PYlR7uUQHiTyPUIg7efMJEJ0QNNgy4QxGgd8JPeRzhwqh13BD+aUDZHadM7sjIgWOY94gX50QLIWhUxnIajI92tfGPFv7g8bknoO1Zg1aUkS9k2DNy3LNHOPDQ16CYTbFOmueGbjn2Lq2dxXtg16MZ8M/f1bNuyQi1bR6oa3ZKjmaOwE4yAC5RHpjaP4REYwNk1Mv4cco0UJSpGUfzAzDx+nOHAsHAGXaaiys66mjZCqo/MOXfyG6nnHu/snnKVwRPXWKqDtwLF88PUzkEp01LBLPVTUHixcoR2on5SCVwfhJ9IveHayGxCFqSlcrzozbbqZh/v60YS1nAbpf3zj6TTZgvWBjb7Vs6FvuvnfwjvH74B0aZQv5sIBAwrfaP8FMDjIuLu6ooMGz7TxNT1hkb/bP+wtXkVgT4xT/qLwD+H+jfAgwAa4KbOGyf2aUAAAAASUVORK5CYII=);\\r\\n            background-position: unset;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div id="home-app"></div>\\r\\n    <div id="app" data-server-rendered="true"></div>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/cm/st/bundle.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/home/1.home.4eadf4209b1762230047120e0a9945a9f3b56fd1.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/home/home.4eadf4209b1762230047120e0a9945a9f3b56fd1.js"><\\/script>\\r\\n    <script src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/html/news.html
  var news_default = '<div class="r-con">\\r\\n    <div class="r-con">\\r\\n        <header style="margin-bottom: 14px">\\r\\n            <h3 style="font-size: 18px;font-weight: 400;">资讯分区正式上线啦!</h3>\\r\\n        </header>\\r\\n        <div class="carousel-module">\\r\\n            <div class="panel"><a href="https://www.bilibili.com/v/information" target="_blank"><img\\r\\n                        src="//i0.hdslb.com/bfs/archive/0747d26dbbc3bbf087d47cff49e598a326b0030c.jpg@320w_330h_1c.webp"\\r\\n                        width="260" height="280" /></a></div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>';

  // src/io/api-article-cards.ts
  init_tampermonkey();
  async function apiArticleCards(data) {
    const arr2 = [];
    if (isArray(data)) {
      arr2.push(...data);
    } else {
      Object.entries(data).forEach((d) => {
        if (d[1]) {
          (isArray(d[1]) ? d[1] : [d[1]]).forEach((t) => arr2.push(d[0] + t));
        }
      });
    }
    if (!arr2.length)
      throw new Error("输入参数不能为空!");
    const response = await fetch(objUrl(URLS.ARTICLE_CARDS, { ids: arr2.join(",") }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/io/api-index-top-rcmd.ts
  init_tampermonkey();
  async function apiIndexTopRcmd(data) {
    const response = await fetch(objUrl(URLS.INDEX_TOP_RCMD, {
      fresh_type: (data == null ? void 0 : data.fresh_type) || 3
    }), {
      credentials: (data == null ? void 0 : data.credentials) || "include"
    });
    const json = await response.json();
    return jsonCheck(json).data.item.map((d) => {
      d.author = d.owner.name;
      d.play = d.stat.view;
      d.aid = d.id;
      return d;
    });
  }

  // src/io/api-newlist.ts
  init_tampermonkey();
  async function apiNewlist(rid, ps = 30, pn = 1, type = 0) {
    const response = await fetch(objUrl(URLS.NEWLIST, { rid, type, pn, ps }));
    const json = await response.json();
    return jsonCheck(json).data.archives;
  }

  // src/io/api-season-rank-list.ts
  init_tampermonkey();
  async function apiSeasonRankList(data) {
    const response = await fetch(objUrl(URLS.SEASON_RANK_LIST, {
      season_type: data.season_type,
      day: 3
    }));
    const json = await response.json();
    return jsonCheck(json).data.list;
  }

  // src/io/api-webshow-locs.ts
  init_tampermonkey();
  async function apiWebshowLoc(id) {
    const response = await fetch(objUrl(URLS.WEBSHOW_LOCS.slice(0, -1), {
      pf: 0,
      id
    }));
    const text = await response.text();
    return jsonCheck(AV.fromStr(text)).data;
  }
  async function apiWebshowLocs(data) {
    const response = await fetch(objUrl(URLS.WEBSHOW_LOCS, {
      pf: 0,
      ids: data.ids.join(",")
    }));
    const text = await response.text();
    return jsonCheck(AV.fromStr(text)).data;
  }

  // src/utils/format/unit.ts
  init_tampermonkey();
  function unitFormat(num = 0) {
    num = 1 * num || 0;
    let unit = ["", "万", "亿"], i = unit.length - 1, dex = 1e4 ** i;
    while (dex > 1) {
      if (num >= dex) {
        num = Number((num / dex).toFixed(1));
        break;
      }
      dex = dex / 1e4;
      i--;
    }
    return num + unit[i];
  }

  // src/page/page.ts
  init_tampermonkey();
  var Page = class {
    /** 页面框架vdom */
    vdom;
    /** 初始化完成 */
    initilized = false;
    /** 禁止清除webpackJsonp */
    webpackJsonp = false;
    /**
     * @param html 页面框架
     */
    constructor(html) {
      this.updateHtml(html);
      Reflect.defineProperty(window, "_babelPolyfill", {
        configurable: true,
        set: () => true,
        get: () => void 0
      });
    }
    updateHtml(html) {
      this.vdom = new VdomTool(html);
    }
    /** 重写页面 */
    updateDom() {
      const title = document.title;
      this.webpackJsonp || Reflect.deleteProperty(window, "webpackJsonp");
      this.vdom.replace(document.documentElement);
      title && !title.includes("404") && (document.title = title);
      setTimeout(() => this.loadedCallback());
    }
    /** 重写完成回调 */
    loadedCallback() {
      this.initilized = true;
      poll(() => document.readyState === "complete", () => {
        document.querySelector("#jvs-cert") || window.dispatchEvent(new ProgressEvent("load"));
      });
    }
  };

  // src/json/recommend.txt
  var recommend_default = '{"list":[{"aid":384216562,"last_recommend":[{"mid":294646,"time":1653053871,"msg":"","uname":"毛酱·把名字还给我","face":"https://i1.hdslb.com/bfs/face/b2345c23456f93d865cdaac3905a6157f1f4ea06.jpg"}],"bvid":"BV1dZ4y187t3","typeid":20,"typename":"宅舞","title":"【祀舞】フォニイ/ phony","subtitle":"","play":8190,"review":167,"video_review":74,"favorites":244,"mid":317922,"author":"祀舞。","description":"没想到吧我又来了,依然是和小五联动。\\\\n本该418,但是520。音源传送门→BV1MY411F736\\\\n本家:sm38833751\\\\n编舞:sm39010899\\\\n摄影后期:@Toxic_Photon 超级感谢!!","create":"2022-05-20 18:45","pic":"https://i0.hdslb.com/bfs/archive/5ea4f9e3f4da0b213074a43ba14faad34e4bf62c.jpg","credit":0,"coins":557,"like":801,"duration":"3:10","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":0,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":551599512,"last_recommend":[{"mid":5242573,"time":1645000954,"msg":"","uname":"今日屁事","face":"https://i1.hdslb.com/bfs/face/ac9c605acf4a3fa523247bd8ec538d071d2b96cd.jpg"}],"bvid":"BV1mi4y117k7","typeid":138,"typename":"搞笑","title":"法国公婆怎么过情人节?公公的告白把我看呆了!!","subtitle":"","play":10165,"review":8,"video_review":17,"favorites":10,"mid":314843091,"author":"Lulu_Young","description":"偷偷学了法国婆婆的菜谱,从早上准备到晚上的晚餐!\\\\n公公超级会撒狗粮,让我教他们用中文给婆婆告白,饭后还主动洗盘子!","create":"2022-02-16 12:00","pic":"https://i2.hdslb.com/bfs/archive/f2c5bc0498a2a0dd62bc69b52aa06ed33e00ee66.jpg","credit":0,"coins":28,"like":57,"duration":"5:28","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":1,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":936614557,"last_recommend":[{"mid":294646,"time":1644835898,"msg":"","uname":"毛酱·把名字还给我","face":"https://i1.hdslb.com/bfs/face/b2345c23456f93d865cdaac3905a6157f1f4ea06.jpg"}],"bvid":"BV1TT4y197QK","typeid":31,"typename":"翻唱","title":"【翻唱】门的另一端【A. Ikari】","subtitle":"","play":8368,"review":77,"video_review":10,"favorites":95,"mid":436256,"author":"A_Ikari","description":"他对我笑了,他心里有我!(\\\\n\\\\n下载:https://pan.baidu.com/s/16L7_5GTKWWBpIj45hLgtiw?pwd=k8wf\\\\n前作:Kiss me sweet → BV1YD4y1c7qN","create":"2022-02-13 23:50","pic":"https://i1.hdslb.com/bfs/archive/e640f463171f82cc6398217e2b39b09434347184.jpg","credit":0,"coins":188,"like":371,"duration":"3:57","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":0,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":508421134,"last_recommend":[{"mid":3400252,"time":1643288342,"msg":"","uname":"党哦","face":"https://i1.hdslb.com/bfs/face/30eabd617e86a7a82d40eac3940a870c337defa5.jpg"}],"bvid":"BV1bu41117Qe","typeid":236,"typename":null,"title":"夏天也能练滑雪?美国滑雪天才少年教你足不出户上雪场","subtitle":"","play":27827,"review":24,"video_review":14,"favorites":89,"mid":1104695563,"author":"洛根滑雪Logan","description":"我是喜欢滑雪的Logan Ski,快三连关注一个~","create":"2022-01-27 16:02","pic":"https://i0.hdslb.com/bfs/archive/5feac2808035225818d8d822e24c0580ae681ef2.jpg","credit":0,"coins":54,"like":351,"duration":"4:34","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":0,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":635545046,"last_recommend":[{"mid":3400252,"time":1641821047,"msg":"","uname":"党哦","face":"https://i1.hdslb.com/bfs/face/30eabd617e86a7a82d40eac3940a870c337defa5.jpg"}],"bvid":"BV13b4y1H7uL","typeid":208,"typename":null,"title":"作弊!没有毕业证也能办回国学历认证?超干货手把手教学|海外学历学位认证攻略|留学生回国","subtitle":"","play":3284,"review":29,"video_review":22,"favorites":103,"mid":6514473,"author":"合鸟是我","description":"","create":"2022-01-10 19:02","pic":"https://i1.hdslb.com/bfs/archive/40dc8385a4cb84ff5366f1e9417b9659d6375608.jpg","credit":0,"coins":31,"like":53,"duration":"5:54","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":0,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}},{"aid":680501556,"last_recommend":[{"mid":3400252,"time":1641821092,"msg":"","uname":"党哦","face":"https://i1.hdslb.com/bfs/face/30eabd617e86a7a82d40eac3940a870c337defa5.jpg"}],"bvid":"BV1RS4y1T7iH","typeid":238,"typename":null,"title":"禧玛诺乱了,扛不住了","subtitle":"","play":21869,"review":195,"video_review":125,"favorites":23,"mid":273304400,"author":"住吉悍刀行","description":"关于禧玛诺涨价,和斯泰拉新款","create":"2022-01-09 20:38","pic":"https://i1.hdslb.com/bfs/archive/56b9584d1cd03a098c5b3b21679d2fd05e7af0be.jpg","credit":0,"coins":42,"like":277,"duration":"2:27","rights":{"bp":0,"elec":0,"download":0,"movie":0,"pay":0,"hd5":1,"no_reprint":1,"autoplay":1,"ugc_pay":0,"is_cooperation":0,"ugc_pay_preview":0,"no_background":0,"arc_pay":0,"pay_free_watch":0}}]}';

  // src/page/index.ts
  var __INITIAL_STATE__ = {
    locsData: {
      23: null,
      29: null,
      31: null,
      34: null,
      40: null,
      42: null,
      44: null,
      142: null
    },
    recommendData: null
  };
  var PageIndex = class extends Page {
    constructor() {
      super(html_default);
      this.avcheck();
      window.__INITIAL_STATE__ = __INITIAL_STATE__;
      this.locsData();
      this.recommendData();
      this.roomRecommend();
      this.ranking();
      this.newlist();
      this.region();
      this.recommendSpecial();
      Header.primaryMenu();
      Header.banner();
      user.userStatus.timeLine && this.timeLine();
      this.updateDom();
    }
    locsData() {
      apiWebshowLocs({ ids: [4694, 29, 31, 34, 40, 42, 44] }).then((d) => {
        __INITIAL_STATE__.locsData[23] = this.adblock(d[4694]);
        __INITIAL_STATE__.locsData[29] = this.adblock(d[29]);
        __INITIAL_STATE__.locsData[31] = this.adblock(d[31]);
        __INITIAL_STATE__.locsData[34] = this.adblock(d[34]);
        __INITIAL_STATE__.locsData[40] = this.adblock(d[40]);
        __INITIAL_STATE__.locsData[42] = this.adblock(d[42]);
        __INITIAL_STATE__.locsData[44] = this.adblock(d[44]);
      }).catch((e) => {
        toast.error("locsData Error!", e)();
      });
    }
    recommendData() {
      apiIndexTopRcmd().then((d) => {
        if (uid) {
          __INITIAL_STATE__.recommendData = d;
          poll(() => document.querySelector(".rec-btn.prev"), () => {
            addElement(
              "span",
              { class: "rec-btn prev" },
              void 0,
              "刷新",
              void 0,
              document.querySelector(".rec-btn.prev")
            ).addEventListener("click", () => {
              apiIndexTopRcmd().then((d2) => __INITIAL_STATE__.recommendData = d2);
            });
            addElement(
              "span",
              { class: "rec-btn next" },
              void 0,
              "刷新",
              void 0,
              document.querySelector(".rec-btn.next")
            ).addEventListener("click", () => {
              apiIndexTopRcmd().then((d2) => __INITIAL_STATE__.recommendData = d2);
            });
          });
        } else {
          const one = d.splice(0, 10);
          const two = d.splice(0, 10);
          __INITIAL_STATE__.recommendData = [...one];
          jsonpHook.async("api.bilibili.com/x/web-interface/ranking/index", void 0, async (str) => {
            const obj = urlObj(str);
            if (obj) {
              if (obj.day == "7") {
                return { code: 0, data: two, message: "0", ttl: 1 };
              } else if (obj.day == "1") {
                return { code: 0, data: d, message: "0", ttl: 1 };
              }
              return { code: 0, data: one, message: "0", ttl: 1 };
            }
          }, false);
        }
      }).catch((e) => {
        toast.error("recommendData Error!", e)();
      });
    }
    /** 修复分区排行 */
    ranking() {
      poll(() => document.querySelector("#ranking_ad"), () => {
        const vue = document.querySelector("#app > div.report-wrap-module.elevator-module").__vue__;
        const ranking_ad = document.querySelector("#ranking_ad").__vue__;
        const ranking_technology = document.querySelector("#ranking_technology").__vue__;
        const ranking_digital = document.querySelector("#ranking_digital").__vue__;
        vue.config[13].morelink = "/v/information/";
        vue.config[13].name = "资讯";
        vue.config[13].tid = 202;
        vue.config[13].type = "news";
        vue.config[8].morelink = "/v/knowledge/";
        vue.config[8].name = "知识";
        vue.config[9].morelink = "/v/tech/";
        vue.config[9].name = "科技";
        ranking_ad.config.morelink = "/v/information/";
        ranking_ad.config.name = "资讯";
        ranking_ad.config.tid = 202;
        ranking_ad.config.type = "news";
        ranking_technology.config.morelink = "/v/knowledge/";
        ranking_technology.config.name = "知识";
        ranking_digital.config.morelink = "/v/tech/";
        ranking_digital.config.name = "科技";
        poll(() => document.querySelector("#ranking_news"), (d) => {
          new VdomTool(news_default).replace(d);
        });
      });
    }
    /** 修复直播推荐 */
    roomRecommend() {
      xhrHook("api.live.bilibili.com/room/v1/RoomRecommend/biliIndexRec", (args) => {
        args[1] = args[1].includes("List") ? args[1].replace("api.live.bilibili.com/room/v1/RoomRecommend/biliIndexRecList", "api.live.bilibili.com/xlive/web-interface/v1/webMain/getList?platform=web") : args[1].replace("api.live.bilibili.com/room/v1/RoomRecommend/biliIndexRecMore", "api.live.bilibili.com/xlive/web-interface/v1/webMain/getMoreRecList?platform=web");
      }, (obj) => {
        var _a3;
        let response = (_a3 = obj.responseText) == null ? void 0 : _a3.replace(/preview_banner_list/, "preview").replace(/ranking_list/, "ranking").replace(/recommend_room_list/, "recommend");
        if (response) {
          response = JSON.parse(response);
          response.data.text_link = { text: "233秒居然能做这些!", link: "//vc.bilibili.com" };
          if (response.data.recommend) {
            for (let i = 0; i < response.data.recommend.length; i++) {
              response.data.recommend[i].pic = response.data.recommend[i].cover;
              response.data.recommend[i].link = "//live.bilibili.com" + response.data.recommend[i].link;
            }
          }
          if (response.data.preview)
            for (let i = 0; i < response.data.preview.length; i++)
              response.data.preview[i].url = response.data.preview[i].link;
          obj.response = obj.responseText = JSON.stringify(response);
        }
      }, false);
    }
    /** 用户热点最新投稿修复资讯区最新投稿 */
    newlist() {
      jsonpHook(["newlist", "rid=202"], (url) => url.replace("rid=202", "rid=203"), void 0, false);
    }
    /** 修正电影/电视剧/纪录片排行 */
    region() {
      jsonpHook("api.bilibili.com/x/web-interface/ranking/region", (url) => {
        const obj = new URL(url);
        let arr2 = void 0;
        switch (obj.searchParams.get("rid")) {
          case "23":
            arr2 = [document.querySelector("#ranking_movie"), 2, "/ranking/cinema/23/0/3"];
            break;
          case "11":
            arr2 = [document.querySelector("#ranking_teleplay"), 5, "/ranking/cinema/11/0/3"];
            break;
          case "177":
            arr2 = [document.querySelector("#ranking_documentary"), 3, "/ranking/cinema/177/0/3"];
            break;
        }
        if (arr2) {
          apiSeasonRankList({ season_type: arr2[1] }).then((d) => {
            var _a3;
            let html = \`<header class="rank-head"><h3>排行</h3><div class="bili-dropdown rank-dropdown"><span class="selected">三日</span><i class="icon icon-arrow-down"></i><ul class="dropdown-list"><li class="dropdown-item" style="display: none;">三日</li><li class="dropdown-item">一周</li></ul></div></header><div class="rank-list-wrap"><ul class="bangumi-rank-list rank-list">\`;
            for (let i = 0; i < 8; i++) {
              html += \`<li class="rank-item\${i < 3 ? " highlight" : ""}"><i class="ri-num">\${i + 1}</i><a href="\${d[i].url}" target="_blank" title="\${d[i].title} 播放:\${d[i].stat.view}" class="ri-info-wrap"><p class="ri-title">\${d[i].title}</p><span class="ri-total">\${d[i].new_ep.index_show}</span></a></li>\`;
            }
            html += \`</ul></div><a href="\${arr2[2]}" target="_blank" class="more-link">查看更多<i class="icon icon-arrow-r"></i></a>\`;
            const vnode = htmlVnode(html);
            (_a3 = vnode[1].children[0].children) == null ? void 0 : _a3.forEach((t, i) => {
              let node;
              t.event = {
                "mouseover": (e) => {
                  const target = e.target;
                  const nodes = \`<div class="bangumi-info-module" style="left: \${target.getBoundingClientRect().left}px; top: \${offset(target).top - 150}px;"><div class="v-preview clearfix"><div class="lazy-img cover"><img alt="\${d[i].title}" src="\${d[i].cover.replace("http:", "")}@72w_72h.webp" /></div><div><p class="title">\${d[i].title}</p><p class="desc">\${d[i].new_ep.index_show}</p></div></div><div class="v-data"><span class="play"><i class="icon"></i>\${unitFormat(d[i].stat.view)}</span><span class="danmu"><i class="icon"></i>\${unitFormat(d[i].stat.danmaku)}</span><span class="fav"><i class="icon"></i>\${unitFormat(d[i].stat.follow)}</span></div></div>\`;
                  node = new VdomTool(nodes).toFragment().children[0];
                  document.body.appendChild(node);
                },
                "mouseout": () => node.remove()
              };
            });
            arr2[0].replaceChildren(new VdomTool(vnode).toFragment());
          }).catch((e) => {
            debug.error(arr2[0], e);
          });
        }
        return url;
      }, void 0, false);
    }
    adblock(arr2) {
      return arr2 == null ? void 0 : arr2.filter((d) => !d.is_ad && d.id);
    }
    /** 港澳台新番时间表 */
    timeLine() {
      poll(() => {
        var _a3;
        return (_a3 = document.querySelector("#bili_bangumi > .bangumi-module")) == null ? void 0 : _a3.__vue__;
      }, (vue) => {
        apiNewlist(33).then(async (d) => {
          const eps = d.reduce((s, d2) => {
            if (d2.redirect_url && d2.owner.mid === 11783021) {
              const arr2 = d2.redirect_url.split("/");
              const ep = arr2.at(-1);
              if (ep) {
                ep.replace(/\\d+/, (e) => d2.episode_id = e);
                s[ep] = d2;
              }
            }
            return s;
          }, {});
          const cards = await apiArticleCards(Object.keys(eps));
          Object.entries(cards).forEach((d2) => {
            if (eps[d2[0]]) {
              eps[d2[0]] = Object.assign(eps[d2[0]], d2[1]);
            }
          });
          const timingData = vue.timingData;
          Object.values(eps).forEach((d2) => {
            const date = new Date(d2.pubdate * 1e3);
            for (let i = timingData.length - 1; i >= 0; i--) {
              if (date.getDay() + 1 === timingData[i].day_of_week) {
                timingData[i].episodes.push({
                  cover: d2.cover || d2.pic,
                  delay: 0,
                  delay_id: 0,
                  delay_index: "",
                  delay_reason: "",
                  ep_cover: d2.cover || d2.pic,
                  episode_id: d2.episode_id,
                  follows: d2.follow_count,
                  plays: d2.play_count,
                  pub_index: d2.desc,
                  pub_time: \`\${integerFormat(date.getHours())}:\${integerFormat(date.getMinutes())}\`,
                  pub_ts: d2.pubdate,
                  published: 1,
                  season_id: d2.season_id,
                  square_cover: d2.cover || d2.pic,
                  title: d2.title
                });
                break;
              }
            }
          });
          vue.timingData = timingData;
        }).catch((e) => {
          debug.error("港澳台新番时间表", e);
        });
      });
    }
    recommendSpecial() {
      xhrHook.async("www.bilibili.com/index/recommend.json", void 0, async () => {
        return { response: recommend_default, responseText: recommend_default, responseType: "json" };
      }, false);
    }
    avcheck() {
      const obj = urlObj(location.href);
      if (obj.aid) {
        location.replace(\`/video/av\${obj.aid}\`);
      }
    }
  };

  // src/utils/cdn.ts
  init_tampermonkey();
  var Cdn = class {
    /**
     * 
     * @param host CDN名
     * @param hash 默认文件版本哈希值
     * @param protocol url协议
     */
    constructor(host = "Github", hash, protocol = "https") {
      this.host = host;
      this.hash = hash;
      this.protocol = protocol;
    }
    /**
     * 获取cdn链接
     * @param path 文件相对路径
     * @param hash 文件版本哈希值
     */
    encode(path, hash = this.hash) {
      switch (this.host) {
        case "jsdelivr":
          return \`\${this.protocol}://fastly.jsdelivr.net/gh/MotooriKashin/Bilibili-Old\${hash ? \`@\${hash}\` : ""}\${path}\`;
        default:
          return \`\${this.protocol}://github.com/MotooriKashin/Bilibili-Old/raw/\${hash || "master"}\${path}\`;
      }
    }
    /** 更新默认值 */
    update(host, hash, protocol) {
      this.host = host;
      hash && (this.hash = hash);
      protocol && (this.protocol = protocol);
    }
  };
  var cdn = new Cdn();

  // src/core/player.ts
  init_tampermonkey();

  // src/io/api-pgc-slideshow.ts
  init_tampermonkey();
  async function apiPgcSlideShow(position_id) {
    const response = await fetch(objUrl(URLS.SLIDE_SHOW, { position_id }));
    const json = await response.json();
    return jsonCheck(json).result;
  }

  // src/io/api-search-square.ts
  init_tampermonkey();
  async function apiSearchSquare(limit = 10) {
    const response = await fetch(objUrl(URLS.SEARCH_SQUARE, { limit }));
    const json = await response.json();
    return jsonCheck(json).data.trending.list;
  }

  // src/utils/format/cht2chs.ts
  init_tampermonkey();
  var aTC2SC = {
    "以功覆過": "以功复过",
    "侔德覆載": "侔德复载",
    "傷亡枕藉": "伤亡枕借",
    "出醜狼藉": "出丑狼借",
    "反反覆覆": "反反复复",
    "名覆金甌": "名复金瓯",
    "情有獨鍾": "情有独锺",
    "文錦覆阱": "文锦复阱",
    "於呼哀哉": "於呼哀哉",
    "旋乾轉坤": "旋乾转坤",
    "朝乾夕惕": "朝乾夕惕",
    "狐藉虎威": "狐借虎威",
    "瞭若指掌": "了若指掌",
    "老態龍鍾": "老态龙锺",
    "藉箸代籌": "借箸代筹",
    "藉草枕塊": "借草枕块",
    "藉藉无名": "藉藉无名",
    "衹見樹木": "只见树木",
    "覆蕉尋鹿": "复蕉寻鹿",
    "覆鹿尋蕉": "复鹿寻蕉",
    "覆鹿遺蕉": "复鹿遗蕉",
    "買臣覆水": "买臣复水",
    "踅門瞭戶": "踅门了户",
    "雁杳魚沈": "雁杳鱼沉",
    "顛乾倒坤": "颠乾倒坤",
    "乾清宮": "乾清宫",
    "乾盛世": "乾盛世",
    "八濛山": "八濛山",
    "千鍾粟": "千锺粟",
    "尼乾陀": "尼乾陀",
    "張法乾": "张法乾",
    "於世成": "於世成",
    "於仲完": "於仲完",
    "於其一": "於其一",
    "於勇明": "於勇明",
    "於崇文": "於崇文",
    "於忠祥": "於忠祥",
    "於惟一": "於惟一",
    "於梨華": "於梨华",
    "於清言": "於清言",
    "於竹屋": "於竹屋",
    "於陵子": "於陵子",
    "李乾德": "李乾德",
    "李澤鉅": "李泽钜",
    "李鍊福": "李链福",
    "李鍾郁": "李锺郁",
    "樊於期": "樊於期",
    "藉寇兵": "借寇兵",
    "覆醬瓿": "复酱瓿",
    "角徵羽": "角徵羽",
    "貂覆額": "貂复额",
    "郭子乾": "郭子乾",
    "錢鍾書": "钱锺书",
    "鍾萬梅": "锺万梅",
    "鍾重發": "锺重发",
    "麼些族": "麽些族",
    "黄鍾公": "黄锺公",
    "上鍊": "上链",
    "么麼": "幺麽",
    "么麽": "幺麽",
    "乾元": "乾元",
    "乾卦": "乾卦",
    "乾嘉": "乾嘉",
    "乾圖": "乾图",
    "乾坤": "乾坤",
    "乾宅": "乾宅",
    "乾斷": "乾断",
    "乾旦": "乾旦",
    "乾曜": "乾曜",
    "乾紅": "乾红",
    "乾綱": "乾纲",
    "乾縣": "乾县",
    "乾象": "乾象",
    "乾造": "乾造",
    "乾道": "乾道",
    "乾陵": "乾陵",
    "乾隆": "乾隆",
    "家俱": "家具",
    "傢具": "家具",
    "傢俱": "家具",
    "凌藉": "凌借",
    "函覆": "函复",
    "反覆": "反复",
    "哪吒": "哪吒",
    "哪咤": "哪吒",
    "回覆": "回复",
    "射覆": "射复",
    "幺麼": "幺麽",
    "康乾": "康乾",
    "彷彿": "仿佛",
    "徵弦": "徵弦",
    "徵絃": "徵弦",
    "徵聲": "徵声",
    "徵調": "徵调",
    "徵音": "徵音",
    "憑藉": "凭借",
    "手鍊": "手链",
    "拉鍊": "拉链",
    "拜覆": "拜复",
    "於乎": "於乎",
    "於倫": "於伦",
    "於則": "於则",
    "於單": "於单",
    "於坦": "於坦",
    "於戲": "於戏",
    "於敖": "於敖",
    "於琳": "於琳",
    "於穆": "於穆",
    "於菟": "於菟",
    "於邑": "於邑",
    "明瞭": "明了",
    "明覆": "明复",
    "木吒": "木吒",
    "木咤": "木吒",
    "沈沒": "沉没",
    "沈積": "沉积",
    "沈船": "沉船",
    "沈默": "沉默",
    "流徵": "流徵",
    "滑藉": "滑借",
    "牴牾": "抵牾",
    "牴觸": "抵触",
    "甚鉅": "甚钜",
    "申覆": "申复",
    "畢昇": "毕昇",
    "發覆": "发复",
    "瞭如": "了如",
    "瞭然": "了然",
    "瞭解": "了解",
    "示覆": "示复",
    "禀覆": "禀复",
    "答覆": "答复",
    "篤麼": "笃麽",
    "籌畫": "筹划",
    "素藉": "素借",
    "茵藉": "茵借",
    "萬鍾": "万锺",
    "蒜薹": "蒜薹",
    "蕓薹": "芸薹",
    "蕩覆": "荡复",
    "蕭乾": "萧乾",
    "藉代": "借代",
    "藉以": "借以",
    "藉助": "借助",
    "藉卉": "借卉",
    "藉口": "借口",
    "藉喻": "借喻",
    "藉手": "借手",
    "藉據": "借据",
    "藉故": "借故",
    "藉方": "借方",
    "藉條": "借条",
    "藉槁": "借槁",
    "藉機": "借机",
    "藉此": "借此",
    "藉甚": "借甚",
    "藉由": "借由",
    "藉著": "借着",
    "藉端": "借端",
    "藉藉": "借借",
    "藉詞": "借词",
    "藉讀": "借读",
    "藉資": "借资",
    "衹得": "只得",
    "覆上": "复上",
    "覆住": "复住",
    "覆信": "复信",
    "覆冒": "复冒",
    "覆呈": "复呈",
    "覆命": "复命",
    "覆墓": "复墓",
    "覆宗": "复宗",
    "覆帳": "复帐",
    "覆幬": "复帱",
    "覆成": "复成",
    "覆按": "复按",
    "覆文": "复文",
    "覆杯": "复杯",
    "覆校": "复校",
    "覆瓿": "复瓿",
    "覆盂": "复盂",
    "覆育": "复育",
    "覆逆": "复逆",
    "覆醢": "复醢",
    "覆電": "复电",
    "覆露": "复露",
    "覆鼎": "复鼎",
    "見覆": "见复",
    "角徵": "角徵",
    "計畫": "计划",
    "變徵": "变徵",
    "躪藉": "躏借",
    "酝藉": "酝借",
    "重覆": "重复",
    "金吒": "金吒",
    "金咤": "金吒",
    "金鍊": "金链",
    "鈕釦": "纽扣",
    "鈞覆": "钧复",
    "鉅子": "钜子",
    "鉅萬": "钜万",
    "鉅防": "钜防",
    "鉸鍊": "铰链",
    "銀鍊": "银链",
    "鍊墜": "链坠",
    "鍊子": "链子",
    "鍊形": "链形",
    "鍊條": "链条",
    "鍊錘": "链锤",
    "鍊鎖": "链锁",
    "鍛鍾": "锻锺",
    "鍾鍛": "锺锻",
    "鍾馗": "锺馗",
    "鎖鍊": "锁链",
    "鐵鍊": "铁链",
    "電覆": "电复",
    "露覆": "露复",
    "項鍊": "项链",
    "頗覆": "颇复",
    "頸鍊": "颈链",
    "顧藉": "顾借",
    "煞車": "刹车",
    "著": "着",
    "乾": "干",
    "儘": "尽",
    "劃": "划",
    "徵": "征",
    "於": "于",
    "瀋": "沈",
    "瀰": "弥",
    "畫": "画",
    "睪": "睾",
    "綵": "彩",
    "線": "线",
    "薹": "苔",
    "蘋": "苹",
    "襬": "摆",
    "託": "托",
    "諮": "咨",
    "鈕": "钮",
    "鉅": "巨",
    "鍾": "钟",
    "钁": "镢",
    "靦": "腼",
    "餘": "余",
    "麪": "面",
    "麴": "曲",
    "麵": "面",
    "麼": "么",
    "麽": "么",
    "開": "开",
    "噹": "当",
    "崙": "仑",
    "擣": "捣",
    "牴": "抵",
    "衹": "只",
    "諫": "谏",
    "譾": "谫",
    "買": "买",
    "閒": "闲",
    "願": "愿",
    "餬": "糊",
    "餱": "糇",
    "餵": "喂",
    "驄": "骢",
    "鵰": "雕",
    "齧": "啮",
    "鍊": "炼",
    "㑯": "㑔",
    "㑳": "㑇",
    "㑶": "㐹",
    "㓨": "刾",
    "㘚": "㘎",
    "㜄": "㚯",
    "㜏": "㛣",
    "㠏": "㟆",
    "㥮": "㤘",
    "㩜": "㨫",
    "㩳": "㧐",
    "䁻": "䀥",
    "䊷": "䌶",
    "䋙": "䌺",
    "䋚": "䌻",
    "䋹": "䌿",
    "䋻": "䌾",
    "䎱": "䎬",
    "䙡": "䙌",
    "䜀": "䜧",
    "䝼": "䞍",
    "䥇": "䦂",
    "䥱": "䥾",
    "䦛": "䦶",
    "䦟": "䦷",
    "䯀": "䯅",
    "䰾": "鲃",
    "䱷": "䲣",
    "䱽": "䲝",
    "䲁": "鳚",
    "䲘": "鳤",
    "䴉": "鹮",
    "丟": "丢",
    "並": "并",
    "亂": "乱",
    "亙": "亘",
    "亞": "亚",
    "佇": "伫",
    "佈": "布",
    "佔": "占",
    "併": "并",
    "來": "来",
    "侖": "仑",
    "侶": "侣",
    "侷": "局",
    "俁": "俣",
    "係": "系",
    "俔": "伣",
    "俠": "侠",
    "俥": "伡",
    "俬": "私",
    "倀": "伥",
    "倆": "俩",
    "倈": "俫",
    "倉": "仓",
    "個": "个",
    "們": "们",
    "倖": "幸",
    "倫": "伦",
    "倲": "㑈",
    "偉": "伟",
    "偑": "㐽",
    "側": "侧",
    "偵": "侦",
    "偽": "伪",
    "傌": "㐷",
    "傑": "杰",
    "傖": "伧",
    "傘": "伞",
    "備": "备",
    "傢": "家",
    "傭": "佣",
    "傯": "偬",
    "傳": "传",
    "傴": "伛",
    "債": "债",
    "傷": "伤",
    "傾": "倾",
    "僂": "偻",
    "僅": "仅",
    "僉": "佥",
    "僑": "侨",
    "僕": "仆",
    "僞": "伪",
    "僥": "侥",
    "僨": "偾",
    "僱": "雇",
    "價": "价",
    "儀": "仪",
    "儁": "俊",
    "儂": "侬",
    "億": "亿",
    "儈": "侩",
    "儉": "俭",
    "儐": "傧",
    "儔": "俦",
    "儕": "侪",
    "償": "偿",
    "優": "优",
    "儲": "储",
    "儷": "俪",
    "儸": "㑩",
    "儺": "傩",
    "儻": "傥",
    "儼": "俨",
    "兇": "凶",
    "兌": "兑",
    "兒": "儿",
    "兗": "兖",
    "內": "内",
    "兩": "两",
    "冊": "册",
    "冑": "胄",
    "冪": "幂",
    "凈": "净",
    "凍": "冻",
    "凜": "凛",
    "凱": "凯",
    "別": "别",
    "刪": "删",
    "剄": "刭",
    "則": "则",
    "剋": "克",
    "剎": "刹",
    "剗": "刬",
    "剛": "刚",
    "剝": "剥",
    "剮": "剐",
    "剴": "剀",
    "創": "创",
    "剷": "铲",
    "劇": "剧",
    "劉": "刘",
    "劊": "刽",
    "劌": "刿",
    "劍": "剑",
    "劏": "㓥",
    "劑": "剂",
    "劚": "㔉",
    "勁": "劲",
    "動": "动",
    "務": "务",
    "勛": "勋",
    "勝": "胜",
    "勞": "劳",
    "勢": "势",
    "勩": "勚",
    "勱": "劢",
    "勳": "勋",
    "勵": "励",
    "勸": "劝",
    "勻": "匀",
    "匭": "匦",
    "匯": "汇",
    "匱": "匮",
    "區": "区",
    "協": "协",
    "卹": "恤",
    "卻": "却",
    "卽": "即",
    "厙": "厍",
    "厠": "厕",
    "厤": "历",
    "厭": "厌",
    "厲": "厉",
    "厴": "厣",
    "參": "参",
    "叄": "叁",
    "叢": "丛",
    "吒": "咤",
    "吳": "吴",
    "吶": "呐",
    "呂": "吕",
    "咼": "呙",
    "員": "员",
    "唄": "呗",
    "唚": "吣",
    "唸": "念",
    "問": "问",
    "啓": "启",
    "啞": "哑",
    "啟": "启",
    "啢": "唡",
    "喎": "㖞",
    "喚": "唤",
    "喪": "丧",
    "喫": "吃",
    "喬": "乔",
    "單": "单",
    "喲": "哟",
    "嗆": "呛",
    "嗇": "啬",
    "嗊": "唝",
    "嗎": "吗",
    "嗚": "呜",
    "嗩": "唢",
    "嗶": "哔",
    "嘆": "叹",
    "嘍": "喽",
    "嘓": "啯",
    "嘔": "呕",
    "嘖": "啧",
    "嘗": "尝",
    "嘜": "唛",
    "嘩": "哗",
    "嘮": "唠",
    "嘯": "啸",
    "嘰": "叽",
    "嘵": "哓",
    "嘸": "呒",
    "嘽": "啴",
    "噁": "恶",
    "噓": "嘘",
    "噚": "㖊",
    "噝": "咝",
    "噠": "哒",
    "噥": "哝",
    "噦": "哕",
    "噯": "嗳",
    "噲": "哙",
    "噴": "喷",
    "噸": "吨",
    "嚀": "咛",
    "嚇": "吓",
    "嚌": "哜",
    "嚐": "尝",
    "嚕": "噜",
    "嚙": "啮",
    "嚥": "咽",
    "嚦": "呖",
    "嚨": "咙",
    "嚮": "向",
    "嚲": "亸",
    "嚳": "喾",
    "嚴": "严",
    "嚶": "嘤",
    "囀": "啭",
    "囁": "嗫",
    "囂": "嚣",
    "囅": "冁",
    "囈": "呓",
    "囉": "啰",
    "囌": "苏",
    "囑": "嘱",
    "囪": "囱",
    "圇": "囵",
    "國": "国",
    "圍": "围",
    "園": "园",
    "圓": "圆",
    "圖": "图",
    "團": "团",
    "垵": "埯",
    "埡": "垭",
    "埰": "采",
    "執": "执",
    "堅": "坚",
    "堊": "垩",
    "堖": "垴",
    "堝": "埚",
    "堯": "尧",
    "報": "报",
    "場": "场",
    "塊": "块",
    "塋": "茔",
    "塏": "垲",
    "塒": "埘",
    "塗": "涂",
    "塚": "冢",
    "塢": "坞",
    "塤": "埙",
    "塵": "尘",
    "塹": "堑",
    "墊": "垫",
    "墜": "坠",
    "墮": "堕",
    "墰": "坛",
    "墳": "坟",
    "墶": "垯",
    "墻": "墙",
    "墾": "垦",
    "壇": "坛",
    "壋": "垱",
    "壎": "埙",
    "壓": "压",
    "壘": "垒",
    "壙": "圹",
    "壚": "垆",
    "壜": "坛",
    "壞": "坏",
    "壟": "垄",
    "壠": "垅",
    "壢": "坜",
    "壩": "坝",
    "壯": "壮",
    "壺": "壶",
    "壼": "壸",
    "壽": "寿",
    "夠": "够",
    "夢": "梦",
    "夥": "伙",
    "夾": "夹",
    "奐": "奂",
    "奧": "奥",
    "奩": "奁",
    "奪": "夺",
    "奬": "奖",
    "奮": "奋",
    "奼": "姹",
    "妝": "妆",
    "姍": "姗",
    "姦": "奸",
    "娛": "娱",
    "婁": "娄",
    "婦": "妇",
    "婭": "娅",
    "媧": "娲",
    "媯": "妫",
    "媰": "㛀",
    "媼": "媪",
    "媽": "妈",
    "嫋": "袅",
    "嫗": "妪",
    "嫵": "妩",
    "嫺": "娴",
    "嫻": "娴",
    "嫿": "婳",
    "嬀": "妫",
    "嬃": "媭",
    "嬈": "娆",
    "嬋": "婵",
    "嬌": "娇",
    "嬙": "嫱",
    "嬡": "嫒",
    "嬤": "嬷",
    "嬪": "嫔",
    "嬰": "婴",
    "嬸": "婶",
    "孃": "娘",
    "孋": "㛤",
    "孌": "娈",
    "孫": "孙",
    "學": "学",
    "孿": "孪",
    "宮": "宫",
    "寀": "采",
    "寢": "寝",
    "實": "实",
    "寧": "宁",
    "審": "审",
    "寫": "写",
    "寬": "宽",
    "寵": "宠",
    "寶": "宝",
    "將": "将",
    "專": "专",
    "尋": "寻",
    "對": "对",
    "導": "导",
    "尷": "尴",
    "屆": "届",
    "屍": "尸",
    "屓": "屃",
    "屜": "屉",
    "屢": "屡",
    "層": "层",
    "屨": "屦",
    "屬": "属",
    "岡": "冈",
    "峯": "峰",
    "峴": "岘",
    "島": "岛",
    "峽": "峡",
    "崍": "崃",
    "崑": "昆",
    "崗": "岗",
    "崢": "峥",
    "崬": "岽",
    "嵐": "岚",
    "嵗": "岁",
    "嶁": "嵝",
    "嶄": "崭",
    "嶇": "岖",
    "嶔": "嵚",
    "嶗": "崂",
    "嶠": "峤",
    "嶢": "峣",
    "嶧": "峄",
    "嶨": "峃",
    "嶮": "崄",
    "嶴": "岙",
    "嶸": "嵘",
    "嶺": "岭",
    "嶼": "屿",
    "嶽": "岳",
    "巋": "岿",
    "巒": "峦",
    "巔": "巅",
    "巖": "岩",
    "巰": "巯",
    "巹": "卺",
    "帥": "帅",
    "師": "师",
    "帳": "帐",
    "帶": "带",
    "幀": "帧",
    "幃": "帏",
    "幗": "帼",
    "幘": "帻",
    "幟": "帜",
    "幣": "币",
    "幫": "帮",
    "幬": "帱",
    "幹": "干",
    "幾": "几",
    "庫": "库",
    "廁": "厕",
    "廂": "厢",
    "廄": "厩",
    "廈": "厦",
    "廎": "庼",
    "廕": "荫",
    "廚": "厨",
    "廝": "厮",
    "廟": "庙",
    "廠": "厂",
    "廡": "庑",
    "廢": "废",
    "廣": "广",
    "廩": "廪",
    "廬": "庐",
    "廳": "厅",
    "弒": "弑",
    "弔": "吊",
    "弳": "弪",
    "張": "张",
    "強": "强",
    "彆": "别",
    "彈": "弹",
    "彌": "弥",
    "彎": "弯",
    "彔": "录",
    "彙": "汇",
    "彞": "彝",
    "彠": "彟",
    "彥": "彦",
    "彫": "雕",
    "彲": "彨",
    "彿": "佛",
    "後": "后",
    "徑": "径",
    "從": "从",
    "徠": "徕",
    "復": "复",
    "徹": "彻",
    "恆": "恒",
    "恥": "耻",
    "悅": "悦",
    "悞": "悮",
    "悵": "怅",
    "悶": "闷",
    "悽": "凄",
    "惡": "恶",
    "惱": "恼",
    "惲": "恽",
    "惻": "恻",
    "愛": "爱",
    "愜": "惬",
    "愨": "悫",
    "愴": "怆",
    "愷": "恺",
    "愾": "忾",
    "慄": "栗",
    "態": "态",
    "慍": "愠",
    "慘": "惨",
    "慚": "惭",
    "慟": "恸",
    "慣": "惯",
    "慤": "悫",
    "慪": "怄",
    "慫": "怂",
    "慮": "虑",
    "慳": "悭",
    "慶": "庆",
    "慼": "戚",
    "慾": "欲",
    "憂": "忧",
    "憊": "惫",
    "憐": "怜",
    "憑": "凭",
    "憒": "愦",
    "憚": "惮",
    "憤": "愤",
    "憫": "悯",
    "憮": "怃",
    "憲": "宪",
    "憶": "忆",
    "懇": "恳",
    "應": "应",
    "懌": "怿",
    "懍": "懔",
    "懞": "蒙",
    "懟": "怼",
    "懣": "懑",
    "懨": "恹",
    "懲": "惩",
    "懶": "懒",
    "懷": "怀",
    "懸": "悬",
    "懺": "忏",
    "懼": "惧",
    "懾": "慑",
    "戀": "恋",
    "戇": "戆",
    "戔": "戋",
    "戧": "戗",
    "戩": "戬",
    "戰": "战",
    "戱": "戯",
    "戲": "戏",
    "戶": "户",
    "拋": "抛",
    "挩": "捝",
    "挱": "挲",
    "挾": "挟",
    "捨": "舍",
    "捫": "扪",
    "捱": "挨",
    "捲": "卷",
    "掃": "扫",
    "掄": "抡",
    "掆": "㧏",
    "掗": "挜",
    "掙": "挣",
    "掛": "挂",
    "採": "采",
    "揀": "拣",
    "揚": "扬",
    "換": "换",
    "揮": "挥",
    "損": "损",
    "搖": "摇",
    "搗": "捣",
    "搵": "揾",
    "搶": "抢",
    "摑": "掴",
    "摜": "掼",
    "摟": "搂",
    "摯": "挚",
    "摳": "抠",
    "摶": "抟",
    "摺": "折",
    "摻": "掺",
    "撈": "捞",
    "撏": "挦",
    "撐": "撑",
    "撓": "挠",
    "撝": "㧑",
    "撟": "挢",
    "撣": "掸",
    "撥": "拨",
    "撫": "抚",
    "撲": "扑",
    "撳": "揿",
    "撻": "挞",
    "撾": "挝",
    "撿": "捡",
    "擁": "拥",
    "擄": "掳",
    "擇": "择",
    "擊": "击",
    "擋": "挡",
    "擓": "㧟",
    "擔": "担",
    "據": "据",
    "擠": "挤",
    "擡": "抬",
    "擬": "拟",
    "擯": "摈",
    "擰": "拧",
    "擱": "搁",
    "擲": "掷",
    "擴": "扩",
    "擷": "撷",
    "擺": "摆",
    "擻": "擞",
    "擼": "撸",
    "擽": "㧰",
    "擾": "扰",
    "攄": "摅",
    "攆": "撵",
    "攏": "拢",
    "攔": "拦",
    "攖": "撄",
    "攙": "搀",
    "攛": "撺",
    "攜": "携",
    "攝": "摄",
    "攢": "攒",
    "攣": "挛",
    "攤": "摊",
    "攪": "搅",
    "攬": "揽",
    "敎": "教",
    "敓": "敚",
    "敗": "败",
    "敘": "叙",
    "敵": "敌",
    "數": "数",
    "斂": "敛",
    "斃": "毙",
    "斆": "敩",
    "斕": "斓",
    "斬": "斩",
    "斷": "断",
    "旂": "旗",
    "旣": "既",
    "昇": "升",
    "時": "时",
    "晉": "晋",
    "晝": "昼",
    "暈": "晕",
    "暉": "晖",
    "暘": "旸",
    "暢": "畅",
    "暫": "暂",
    "曄": "晔",
    "曆": "历",
    "曇": "昙",
    "曉": "晓",
    "曏": "向",
    "曖": "暧",
    "曠": "旷",
    "曨": "昽",
    "曬": "晒",
    "書": "书",
    "會": "会",
    "朧": "胧",
    "朮": "术",
    "東": "东",
    "杴": "锨",
    "枴": "拐",
    "柵": "栅",
    "柺": "拐",
    "査": "查",
    "桿": "杆",
    "梔": "栀",
    "梘": "枧",
    "條": "条",
    "梟": "枭",
    "梲": "棁",
    "棄": "弃",
    "棊": "棋",
    "棖": "枨",
    "棗": "枣",
    "棟": "栋",
    "棡": "㭎",
    "棧": "栈",
    "棲": "栖",
    "棶": "梾",
    "椏": "桠",
    "椲": "㭏",
    "楊": "杨",
    "楓": "枫",
    "楨": "桢",
    "業": "业",
    "極": "极",
    "榘": "矩",
    "榦": "干",
    "榪": "杩",
    "榮": "荣",
    "榲": "榅",
    "榿": "桤",
    "構": "构",
    "槍": "枪",
    "槓": "杠",
    "槤": "梿",
    "槧": "椠",
    "槨": "椁",
    "槮": "椮",
    "槳": "桨",
    "槶": "椢",
    "槼": "椝",
    "樁": "桩",
    "樂": "乐",
    "樅": "枞",
    "樑": "梁",
    "樓": "楼",
    "標": "标",
    "樞": "枢",
    "樢": "㭤",
    "樣": "样",
    "樫": "㭴",
    "樳": "桪",
    "樸": "朴",
    "樹": "树",
    "樺": "桦",
    "樿": "椫",
    "橈": "桡",
    "橋": "桥",
    "機": "机",
    "橢": "椭",
    "橫": "横",
    "檁": "檩",
    "檉": "柽",
    "檔": "档",
    "檜": "桧",
    "檟": "槚",
    "檢": "检",
    "檣": "樯",
    "檮": "梼",
    "檯": "台",
    "檳": "槟",
    "檸": "柠",
    "檻": "槛",
    "櫃": "柜",
    "櫓": "橹",
    "櫚": "榈",
    "櫛": "栉",
    "櫝": "椟",
    "櫞": "橼",
    "櫟": "栎",
    "櫥": "橱",
    "櫧": "槠",
    "櫨": "栌",
    "櫪": "枥",
    "櫫": "橥",
    "櫬": "榇",
    "櫱": "蘖",
    "櫳": "栊",
    "櫸": "榉",
    "櫺": "棂",
    "櫻": "樱",
    "欄": "栏",
    "欅": "榉",
    "權": "权",
    "欏": "椤",
    "欒": "栾",
    "欖": "榄",
    "欞": "棂",
    "欽": "钦",
    "歎": "叹",
    "歐": "欧",
    "歟": "欤",
    "歡": "欢",
    "歲": "岁",
    "歷": "历",
    "歸": "归",
    "歿": "殁",
    "殘": "残",
    "殞": "殒",
    "殤": "殇",
    "殨": "㱮",
    "殫": "殚",
    "殭": "僵",
    "殮": "殓",
    "殯": "殡",
    "殰": "㱩",
    "殲": "歼",
    "殺": "杀",
    "殻": "壳",
    "殼": "壳",
    "毀": "毁",
    "毆": "殴",
    "毿": "毵",
    "氂": "牦",
    "氈": "毡",
    "氌": "氇",
    "氣": "气",
    "氫": "氢",
    "氬": "氩",
    "氳": "氲",
    "氾": "泛",
    "汎": "泛",
    "汙": "污",
    "決": "决",
    "沒": "没",
    "沖": "冲",
    "況": "况",
    "泝": "溯",
    "洩": "泄",
    "洶": "汹",
    "浹": "浃",
    "涇": "泾",
    "涗": "涚",
    "涼": "凉",
    "淒": "凄",
    "淚": "泪",
    "淥": "渌",
    "淨": "净",
    "淩": "凌",
    "淪": "沦",
    "淵": "渊",
    "淶": "涞",
    "淺": "浅",
    "渙": "涣",
    "減": "减",
    "渢": "沨",
    "渦": "涡",
    "測": "测",
    "渾": "浑",
    "湊": "凑",
    "湞": "浈",
    "湧": "涌",
    "湯": "汤",
    "溈": "沩",
    "準": "准",
    "溝": "沟",
    "溫": "温",
    "溮": "浉",
    "溳": "涢",
    "溼": "湿",
    "滄": "沧",
    "滅": "灭",
    "滌": "涤",
    "滎": "荥",
    "滙": "汇",
    "滬": "沪",
    "滯": "滞",
    "滲": "渗",
    "滷": "卤",
    "滸": "浒",
    "滻": "浐",
    "滾": "滚",
    "滿": "满",
    "漁": "渔",
    "漊": "溇",
    "漚": "沤",
    "漢": "汉",
    "漣": "涟",
    "漬": "渍",
    "漲": "涨",
    "漵": "溆",
    "漸": "渐",
    "漿": "浆",
    "潁": "颍",
    "潑": "泼",
    "潔": "洁",
    "潙": "沩",
    "潛": "潜",
    "潤": "润",
    "潯": "浔",
    "潰": "溃",
    "潷": "滗",
    "潿": "涠",
    "澀": "涩",
    "澆": "浇",
    "澇": "涝",
    "澐": "沄",
    "澗": "涧",
    "澠": "渑",
    "澤": "泽",
    "澦": "滪",
    "澩": "泶",
    "澮": "浍",
    "澱": "淀",
    "澾": "㳠",
    "濁": "浊",
    "濃": "浓",
    "濄": "㳡",
    "濕": "湿",
    "濘": "泞",
    "濛": "蒙",
    "濜": "浕",
    "濟": "济",
    "濤": "涛",
    "濧": "㳔",
    "濫": "滥",
    "濰": "潍",
    "濱": "滨",
    "濺": "溅",
    "濼": "泺",
    "濾": "滤",
    "瀂": "澛",
    "瀅": "滢",
    "瀆": "渎",
    "瀇": "㲿",
    "瀉": "泻",
    "瀏": "浏",
    "瀕": "濒",
    "瀘": "泸",
    "瀝": "沥",
    "瀟": "潇",
    "瀠": "潆",
    "瀦": "潴",
    "瀧": "泷",
    "瀨": "濑",
    "瀲": "潋",
    "瀾": "澜",
    "灃": "沣",
    "灄": "滠",
    "灑": "洒",
    "灕": "漓",
    "灘": "滩",
    "灝": "灏",
    "灠": "漤",
    "灡": "㳕",
    "灣": "湾",
    "灤": "滦",
    "灧": "滟",
    "灩": "滟",
    "災": "灾",
    "為": "为",
    "烏": "乌",
    "烴": "烃",
    "無": "无",
    "煉": "炼",
    "煒": "炜",
    "煙": "烟",
    "煢": "茕",
    "煥": "焕",
    "煩": "烦",
    "煬": "炀",
    "煱": "㶽",
    "熅": "煴",
    "熒": "荧",
    "熗": "炝",
    "熱": "热",
    "熲": "颎",
    "熾": "炽",
    "燁": "烨",
    "燈": "灯",
    "燉": "炖",
    "燒": "烧",
    "燙": "烫",
    "燜": "焖",
    "營": "营",
    "燦": "灿",
    "燬": "毁",
    "燭": "烛",
    "燴": "烩",
    "燶": "㶶",
    "燻": "熏",
    "燼": "烬",
    "燾": "焘",
    "爍": "烁",
    "爐": "炉",
    "爛": "烂",
    "爭": "争",
    "爲": "为",
    "爺": "爷",
    "爾": "尔",
    "牀": "床",
    "牆": "墙",
    "牘": "牍",
    "牽": "牵",
    "犖": "荦",
    "犛": "牦",
    "犢": "犊",
    "犧": "牺",
    "狀": "状",
    "狹": "狭",
    "狽": "狈",
    "猙": "狰",
    "猶": "犹",
    "猻": "狲",
    "獁": "犸",
    "獃": "呆",
    "獄": "狱",
    "獅": "狮",
    "獎": "奖",
    "獨": "独",
    "獪": "狯",
    "獫": "猃",
    "獮": "狝",
    "獰": "狞",
    "獱": "㺍",
    "獲": "获",
    "獵": "猎",
    "獷": "犷",
    "獸": "兽",
    "獺": "獭",
    "獻": "献",
    "獼": "猕",
    "玀": "猡",
    "現": "现",
    "琱": "雕",
    "琺": "珐",
    "琿": "珲",
    "瑋": "玮",
    "瑒": "玚",
    "瑣": "琐",
    "瑤": "瑶",
    "瑩": "莹",
    "瑪": "玛",
    "瑲": "玱",
    "璉": "琏",
    "璡": "琎",
    "璣": "玑",
    "璦": "瑷",
    "璫": "珰",
    "璯": "㻅",
    "環": "环",
    "璵": "玙",
    "璸": "瑸",
    "璽": "玺",
    "瓊": "琼",
    "瓏": "珑",
    "瓔": "璎",
    "瓚": "瓒",
    "甌": "瓯",
    "甕": "瓮",
    "產": "产",
    "産": "产",
    "甦": "苏",
    "甯": "宁",
    "畝": "亩",
    "畢": "毕",
    "異": "异",
    "畵": "画",
    "當": "当",
    "疇": "畴",
    "疊": "叠",
    "痙": "痉",
    "痠": "酸",
    "痾": "疴",
    "瘂": "痖",
    "瘋": "疯",
    "瘍": "疡",
    "瘓": "痪",
    "瘞": "瘗",
    "瘡": "疮",
    "瘧": "疟",
    "瘮": "瘆",
    "瘲": "疭",
    "瘺": "瘘",
    "瘻": "瘘",
    "療": "疗",
    "癆": "痨",
    "癇": "痫",
    "癉": "瘅",
    "癒": "愈",
    "癘": "疠",
    "癟": "瘪",
    "癡": "痴",
    "癢": "痒",
    "癤": "疖",
    "癥": "症",
    "癧": "疬",
    "癩": "癞",
    "癬": "癣",
    "癭": "瘿",
    "癮": "瘾",
    "癰": "痈",
    "癱": "瘫",
    "癲": "癫",
    "發": "发",
    "皁": "皂",
    "皚": "皑",
    "皰": "疱",
    "皸": "皲",
    "皺": "皱",
    "盃": "杯",
    "盜": "盗",
    "盞": "盏",
    "盡": "尽",
    "監": "监",
    "盤": "盘",
    "盧": "卢",
    "盪": "荡",
    "眞": "真",
    "眥": "眦",
    "眾": "众",
    "睏": "困",
    "睜": "睁",
    "睞": "睐",
    "瞘": "眍",
    "瞜": "䁖",
    "瞞": "瞒",
    "瞶": "瞆",
    "瞼": "睑",
    "矇": "蒙",
    "矓": "眬",
    "矚": "瞩",
    "矯": "矫",
    "硃": "朱",
    "硜": "硁",
    "硤": "硖",
    "硨": "砗",
    "硯": "砚",
    "碕": "埼",
    "碩": "硕",
    "碭": "砀",
    "碸": "砜",
    "確": "确",
    "碼": "码",
    "碽": "䂵",
    "磑": "硙",
    "磚": "砖",
    "磠": "硵",
    "磣": "碜",
    "磧": "碛",
    "磯": "矶",
    "磽": "硗",
    "礄": "硚",
    "礆": "硷",
    "礎": "础",
    "礙": "碍",
    "礦": "矿",
    "礪": "砺",
    "礫": "砾",
    "礬": "矾",
    "礱": "砻",
    "祕": "秘",
    "祿": "禄",
    "禍": "祸",
    "禎": "祯",
    "禕": "祎",
    "禡": "祃",
    "禦": "御",
    "禪": "禅",
    "禮": "礼",
    "禰": "祢",
    "禱": "祷",
    "禿": "秃",
    "秈": "籼",
    "稅": "税",
    "稈": "秆",
    "稏": "䅉",
    "稜": "棱",
    "稟": "禀",
    "種": "种",
    "稱": "称",
    "穀": "谷",
    "穇": "䅟",
    "穌": "稣",
    "積": "积",
    "穎": "颖",
    "穠": "秾",
    "穡": "穑",
    "穢": "秽",
    "穩": "稳",
    "穫": "获",
    "穭": "稆",
    "窩": "窝",
    "窪": "洼",
    "窮": "穷",
    "窯": "窑",
    "窵": "窎",
    "窶": "窭",
    "窺": "窥",
    "竄": "窜",
    "竅": "窍",
    "竇": "窦",
    "竈": "灶",
    "竊": "窃",
    "竪": "竖",
    "競": "竞",
    "筆": "笔",
    "筍": "笋",
    "筧": "笕",
    "筴": "䇲",
    "箇": "个",
    "箋": "笺",
    "箏": "筝",
    "節": "节",
    "範": "范",
    "築": "筑",
    "篋": "箧",
    "篔": "筼",
    "篤": "笃",
    "篩": "筛",
    "篳": "筚",
    "簀": "箦",
    "簍": "篓",
    "簑": "蓑",
    "簞": "箪",
    "簡": "简",
    "簣": "篑",
    "簫": "箫",
    "簹": "筜",
    "簽": "签",
    "簾": "帘",
    "籃": "篮",
    "籌": "筹",
    "籔": "䉤",
    "籙": "箓",
    "籛": "篯",
    "籜": "箨",
    "籟": "籁",
    "籠": "笼",
    "籤": "签",
    "籩": "笾",
    "籪": "簖",
    "籬": "篱",
    "籮": "箩",
    "籲": "吁",
    "粵": "粤",
    "糉": "粽",
    "糝": "糁",
    "糞": "粪",
    "糧": "粮",
    "糰": "团",
    "糲": "粝",
    "糴": "籴",
    "糶": "粜",
    "糹": "纟",
    "糾": "纠",
    "紀": "纪",
    "紂": "纣",
    "約": "约",
    "紅": "红",
    "紆": "纡",
    "紇": "纥",
    "紈": "纨",
    "紉": "纫",
    "紋": "纹",
    "納": "纳",
    "紐": "纽",
    "紓": "纾",
    "純": "纯",
    "紕": "纰",
    "紖": "纼",
    "紗": "纱",
    "紘": "纮",
    "紙": "纸",
    "級": "级",
    "紛": "纷",
    "紜": "纭",
    "紝": "纴",
    "紡": "纺",
    "紬": "䌷",
    "紮": "扎",
    "細": "细",
    "紱": "绂",
    "紲": "绁",
    "紳": "绅",
    "紵": "纻",
    "紹": "绍",
    "紺": "绀",
    "紼": "绋",
    "紿": "绐",
    "絀": "绌",
    "終": "终",
    "絃": "弦",
    "組": "组",
    "絅": "䌹",
    "絆": "绊",
    "絎": "绗",
    "結": "结",
    "絕": "绝",
    "絛": "绦",
    "絝": "绔",
    "絞": "绞",
    "絡": "络",
    "絢": "绚",
    "給": "给",
    "絨": "绒",
    "絰": "绖",
    "統": "统",
    "絲": "丝",
    "絳": "绛",
    "絶": "绝",
    "絹": "绢",
    "綁": "绑",
    "綃": "绡",
    "綆": "绠",
    "綈": "绨",
    "綉": "绣",
    "綌": "绤",
    "綏": "绥",
    "綐": "䌼",
    "綑": "捆",
    "經": "经",
    "綜": "综",
    "綞": "缍",
    "綠": "绿",
    "綢": "绸",
    "綣": "绻",
    "綫": "线",
    "綬": "绶",
    "維": "维",
    "綯": "绹",
    "綰": "绾",
    "綱": "纲",
    "網": "网",
    "綳": "绷",
    "綴": "缀",
    "綸": "纶",
    "綹": "绺",
    "綺": "绮",
    "綻": "绽",
    "綽": "绰",
    "綾": "绫",
    "綿": "绵",
    "緄": "绲",
    "緇": "缁",
    "緊": "紧",
    "緋": "绯",
    "緑": "绿",
    "緒": "绪",
    "緓": "绬",
    "緔": "绱",
    "緗": "缃",
    "緘": "缄",
    "緙": "缂",
    "緝": "缉",
    "緞": "缎",
    "締": "缔",
    "緡": "缗",
    "緣": "缘",
    "緦": "缌",
    "編": "编",
    "緩": "缓",
    "緬": "缅",
    "緯": "纬",
    "緱": "缑",
    "緲": "缈",
    "練": "练",
    "緶": "缏",
    "緹": "缇",
    "緻": "致",
    "緼": "缊",
    "縈": "萦",
    "縉": "缙",
    "縊": "缢",
    "縋": "缒",
    "縐": "绉",
    "縑": "缣",
    "縕": "缊",
    "縗": "缞",
    "縛": "缚",
    "縝": "缜",
    "縞": "缟",
    "縟": "缛",
    "縣": "县",
    "縧": "绦",
    "縫": "缝",
    "縭": "缡",
    "縮": "缩",
    "縱": "纵",
    "縲": "缧",
    "縳": "䌸",
    "縴": "纤",
    "縵": "缦",
    "縶": "絷",
    "縷": "缕",
    "縹": "缥",
    "總": "总",
    "績": "绩",
    "繃": "绷",
    "繅": "缫",
    "繆": "缪",
    "繐": "穗",
    "繒": "缯",
    "織": "织",
    "繕": "缮",
    "繚": "缭",
    "繞": "绕",
    "繡": "绣",
    "繢": "缋",
    "繩": "绳",
    "繪": "绘",
    "繫": "系",
    "繭": "茧",
    "繮": "缰",
    "繯": "缳",
    "繰": "缲",
    "繳": "缴",
    "繸": "䍁",
    "繹": "绎",
    "繼": "继",
    "繽": "缤",
    "繾": "缱",
    "繿": "䍀",
    "纇": "颣",
    "纈": "缬",
    "纊": "纩",
    "續": "续",
    "纍": "累",
    "纏": "缠",
    "纓": "缨",
    "纔": "才",
    "纖": "纤",
    "纘": "缵",
    "纜": "缆",
    "缽": "钵",
    "罈": "坛",
    "罌": "罂",
    "罎": "坛",
    "罰": "罚",
    "罵": "骂",
    "罷": "罢",
    "羅": "罗",
    "羆": "罴",
    "羈": "羁",
    "羋": "芈",
    "羣": "群",
    "羥": "羟",
    "羨": "羡",
    "義": "义",
    "羶": "膻",
    "習": "习",
    "翬": "翚",
    "翹": "翘",
    "翽": "翙",
    "耬": "耧",
    "耮": "耢",
    "聖": "圣",
    "聞": "闻",
    "聯": "联",
    "聰": "聪",
    "聲": "声",
    "聳": "耸",
    "聵": "聩",
    "聶": "聂",
    "職": "职",
    "聹": "聍",
    "聽": "听",
    "聾": "聋",
    "肅": "肃",
    "脅": "胁",
    "脈": "脉",
    "脛": "胫",
    "脣": "唇",
    "脩": "修",
    "脫": "脱",
    "脹": "胀",
    "腎": "肾",
    "腖": "胨",
    "腡": "脶",
    "腦": "脑",
    "腫": "肿",
    "腳": "脚",
    "腸": "肠",
    "膃": "腽",
    "膕": "腘",
    "膚": "肤",
    "膞": "䏝",
    "膠": "胶",
    "膩": "腻",
    "膽": "胆",
    "膾": "脍",
    "膿": "脓",
    "臉": "脸",
    "臍": "脐",
    "臏": "膑",
    "臘": "腊",
    "臚": "胪",
    "臟": "脏",
    "臠": "脔",
    "臢": "臜",
    "臥": "卧",
    "臨": "临",
    "臺": "台",
    "與": "与",
    "興": "兴",
    "舉": "举",
    "舊": "旧",
    "舘": "馆",
    "艙": "舱",
    "艤": "舣",
    "艦": "舰",
    "艫": "舻",
    "艱": "艰",
    "艷": "艳",
    "芻": "刍",
    "苧": "苎",
    "茲": "兹",
    "荊": "荆",
    "莊": "庄",
    "莖": "茎",
    "莢": "荚",
    "莧": "苋",
    "華": "华",
    "菴": "庵",
    "菸": "烟",
    "萇": "苌",
    "萊": "莱",
    "萬": "万",
    "萴": "荝",
    "萵": "莴",
    "葉": "叶",
    "葒": "荭",
    "葤": "荮",
    "葦": "苇",
    "葯": "药",
    "葷": "荤",
    "蒐": "搜",
    "蒓": "莼",
    "蒔": "莳",
    "蒕": "蒀",
    "蒞": "莅",
    "蒼": "苍",
    "蓀": "荪",
    "蓆": "席",
    "蓋": "盖",
    "蓮": "莲",
    "蓯": "苁",
    "蓴": "莼",
    "蓽": "荜",
    "蔔": "卜",
    "蔘": "参",
    "蔞": "蒌",
    "蔣": "蒋",
    "蔥": "葱",
    "蔦": "茑",
    "蔭": "荫",
    "蕁": "荨",
    "蕆": "蒇",
    "蕎": "荞",
    "蕒": "荬",
    "蕓": "芸",
    "蕕": "莸",
    "蕘": "荛",
    "蕢": "蒉",
    "蕩": "荡",
    "蕪": "芜",
    "蕭": "萧",
    "蕷": "蓣",
    "薀": "蕰",
    "薈": "荟",
    "薊": "蓟",
    "薌": "芗",
    "薑": "姜",
    "薔": "蔷",
    "薘": "荙",
    "薟": "莶",
    "薦": "荐",
    "薩": "萨",
    "薳": "䓕",
    "薴": "苧",
    "薺": "荠",
    "藍": "蓝",
    "藎": "荩",
    "藝": "艺",
    "藥": "药",
    "藪": "薮",
    "藭": "䓖",
    "藴": "蕴",
    "藶": "苈",
    "藹": "蔼",
    "藺": "蔺",
    "蘀": "萚",
    "蘄": "蕲",
    "蘆": "芦",
    "蘇": "苏",
    "蘊": "蕴",
    "蘚": "藓",
    "蘞": "蔹",
    "蘢": "茏",
    "蘭": "兰",
    "蘺": "蓠",
    "蘿": "萝",
    "虆": "蔂",
    "處": "处",
    "虛": "虚",
    "虜": "虏",
    "號": "号",
    "虧": "亏",
    "虯": "虬",
    "蛺": "蛱",
    "蛻": "蜕",
    "蜆": "蚬",
    "蝕": "蚀",
    "蝟": "猬",
    "蝦": "虾",
    "蝨": "虱",
    "蝸": "蜗",
    "螄": "蛳",
    "螞": "蚂",
    "螢": "萤",
    "螮": "䗖",
    "螻": "蝼",
    "螿": "螀",
    "蟄": "蛰",
    "蟈": "蝈",
    "蟎": "螨",
    "蟣": "虮",
    "蟬": "蝉",
    "蟯": "蛲",
    "蟲": "虫",
    "蟶": "蛏",
    "蟻": "蚁",
    "蠁": "蚃",
    "蠅": "蝇",
    "蠆": "虿",
    "蠍": "蝎",
    "蠐": "蛴",
    "蠑": "蝾",
    "蠔": "蚝",
    "蠟": "蜡",
    "蠣": "蛎",
    "蠨": "蟏",
    "蠱": "蛊",
    "蠶": "蚕",
    "蠻": "蛮",
    "衆": "众",
    "衊": "蔑",
    "術": "术",
    "衕": "同",
    "衚": "胡",
    "衛": "卫",
    "衝": "冲",
    "袞": "衮",
    "裊": "袅",
    "裏": "里",
    "補": "补",
    "裝": "装",
    "裡": "里",
    "製": "制",
    "複": "复",
    "褌": "裈",
    "褘": "袆",
    "褲": "裤",
    "褳": "裢",
    "褸": "褛",
    "褻": "亵",
    "襆": "幞",
    "襇": "裥",
    "襉": "裥",
    "襏": "袯",
    "襖": "袄",
    "襝": "裣",
    "襠": "裆",
    "襤": "褴",
    "襪": "袜",
    "襯": "衬",
    "襲": "袭",
    "襴": "襕",
    "覈": "核",
    "見": "见",
    "覎": "觃",
    "規": "规",
    "覓": "觅",
    "視": "视",
    "覘": "觇",
    "覡": "觋",
    "覥": "觍",
    "覦": "觎",
    "親": "亲",
    "覬": "觊",
    "覯": "觏",
    "覲": "觐",
    "覷": "觑",
    "覺": "觉",
    "覽": "览",
    "覿": "觌",
    "觀": "观",
    "觴": "觞",
    "觶": "觯",
    "觸": "触",
    "訁": "讠",
    "訂": "订",
    "訃": "讣",
    "計": "计",
    "訊": "讯",
    "訌": "讧",
    "討": "讨",
    "訐": "讦",
    "訒": "讱",
    "訓": "训",
    "訕": "讪",
    "訖": "讫",
    "記": "记",
    "訛": "讹",
    "訝": "讶",
    "訟": "讼",
    "訢": "䜣",
    "訣": "诀",
    "訥": "讷",
    "訩": "讻",
    "訪": "访",
    "設": "设",
    "許": "许",
    "訴": "诉",
    "訶": "诃",
    "診": "诊",
    "註": "注",
    "証": "证",
    "詁": "诂",
    "詆": "诋",
    "詎": "讵",
    "詐": "诈",
    "詒": "诒",
    "詔": "诏",
    "評": "评",
    "詖": "诐",
    "詗": "诇",
    "詘": "诎",
    "詛": "诅",
    "詞": "词",
    "詠": "咏",
    "詡": "诩",
    "詢": "询",
    "詣": "诣",
    "試": "试",
    "詩": "诗",
    "詫": "诧",
    "詬": "诟",
    "詭": "诡",
    "詮": "诠",
    "詰": "诘",
    "話": "话",
    "該": "该",
    "詳": "详",
    "詵": "诜",
    "詼": "诙",
    "詿": "诖",
    "誄": "诔",
    "誅": "诛",
    "誆": "诓",
    "誇": "夸",
    "誌": "志",
    "認": "认",
    "誑": "诳",
    "誒": "诶",
    "誕": "诞",
    "誘": "诱",
    "誚": "诮",
    "語": "语",
    "誠": "诚",
    "誡": "诫",
    "誣": "诬",
    "誤": "误",
    "誥": "诰",
    "誦": "诵",
    "誨": "诲",
    "說": "说",
    "説": "说",
    "誰": "谁",
    "課": "课",
    "誶": "谇",
    "誹": "诽",
    "誼": "谊",
    "誾": "訚",
    "調": "调",
    "諂": "谄",
    "諄": "谆",
    "談": "谈",
    "諉": "诿",
    "請": "请",
    "諍": "诤",
    "諏": "诹",
    "諑": "诼",
    "諒": "谅",
    "論": "论",
    "諗": "谂",
    "諛": "谀",
    "諜": "谍",
    "諝": "谞",
    "諞": "谝",
    "諡": "谥",
    "諢": "诨",
    "諤": "谔",
    "諦": "谛",
    "諧": "谐",
    "諭": "谕",
    "諱": "讳",
    "諳": "谙",
    "諶": "谌",
    "諷": "讽",
    "諸": "诸",
    "諺": "谚",
    "諼": "谖",
    "諾": "诺",
    "謀": "谋",
    "謁": "谒",
    "謂": "谓",
    "謄": "誊",
    "謅": "诌",
    "謊": "谎",
    "謎": "谜",
    "謐": "谧",
    "謔": "谑",
    "謖": "谡",
    "謗": "谤",
    "謙": "谦",
    "謚": "谥",
    "講": "讲",
    "謝": "谢",
    "謠": "谣",
    "謡": "谣",
    "謨": "谟",
    "謫": "谪",
    "謬": "谬",
    "謭": "谫",
    "謳": "讴",
    "謹": "谨",
    "謾": "谩",
    "譁": "哗",
    "譅": "䜧",
    "證": "证",
    "譎": "谲",
    "譏": "讥",
    "譖": "谮",
    "識": "识",
    "譙": "谯",
    "譚": "谭",
    "譜": "谱",
    "譟": "噪",
    "譫": "谵",
    "譭": "毁",
    "譯": "译",
    "議": "议",
    "譴": "谴",
    "護": "护",
    "譸": "诪",
    "譽": "誉",
    "讀": "读",
    "讅": "谉",
    "變": "变",
    "讋": "詟",
    "讌": "䜩",
    "讎": "雠",
    "讒": "谗",
    "讓": "让",
    "讕": "谰",
    "讖": "谶",
    "讚": "赞",
    "讜": "谠",
    "讞": "谳",
    "豈": "岂",
    "豎": "竖",
    "豐": "丰",
    "豔": "艳",
    "豬": "猪",
    "豶": "豮",
    "貓": "猫",
    "貙": "䝙",
    "貝": "贝",
    "貞": "贞",
    "貟": "贠",
    "負": "负",
    "財": "财",
    "貢": "贡",
    "貧": "贫",
    "貨": "货",
    "販": "贩",
    "貪": "贪",
    "貫": "贯",
    "責": "责",
    "貯": "贮",
    "貰": "贳",
    "貲": "赀",
    "貳": "贰",
    "貴": "贵",
    "貶": "贬",
    "貸": "贷",
    "貺": "贶",
    "費": "费",
    "貼": "贴",
    "貽": "贻",
    "貿": "贸",
    "賀": "贺",
    "賁": "贲",
    "賂": "赂",
    "賃": "赁",
    "賄": "贿",
    "賅": "赅",
    "資": "资",
    "賈": "贾",
    "賊": "贼",
    "賑": "赈",
    "賒": "赊",
    "賓": "宾",
    "賕": "赇",
    "賙": "赒",
    "賚": "赉",
    "賜": "赐",
    "賞": "赏",
    "賠": "赔",
    "賡": "赓",
    "賢": "贤",
    "賣": "卖",
    "賤": "贱",
    "賦": "赋",
    "賧": "赕",
    "質": "质",
    "賫": "赍",
    "賬": "账",
    "賭": "赌",
    "賰": "䞐",
    "賴": "赖",
    "賵": "赗",
    "賺": "赚",
    "賻": "赙",
    "購": "购",
    "賽": "赛",
    "賾": "赜",
    "贄": "贽",
    "贅": "赘",
    "贇": "赟",
    "贈": "赠",
    "贊": "赞",
    "贋": "赝",
    "贍": "赡",
    "贏": "赢",
    "贐": "赆",
    "贓": "赃",
    "贔": "赑",
    "贖": "赎",
    "贗": "赝",
    "贛": "赣",
    "贜": "赃",
    "赬": "赪",
    "趕": "赶",
    "趙": "赵",
    "趨": "趋",
    "趲": "趱",
    "跡": "迹",
    "踐": "践",
    "踰": "逾",
    "踴": "踊",
    "蹌": "跄",
    "蹕": "跸",
    "蹟": "迹",
    "蹣": "蹒",
    "蹤": "踪",
    "蹺": "跷",
    "躂": "跶",
    "躉": "趸",
    "躊": "踌",
    "躋": "跻",
    "躍": "跃",
    "躎": "䟢",
    "躑": "踯",
    "躒": "跞",
    "躓": "踬",
    "躕": "蹰",
    "躚": "跹",
    "躡": "蹑",
    "躥": "蹿",
    "躦": "躜",
    "躪": "躏",
    "軀": "躯",
    "車": "车",
    "軋": "轧",
    "軌": "轨",
    "軍": "军",
    "軑": "轪",
    "軒": "轩",
    "軔": "轫",
    "軛": "轭",
    "軟": "软",
    "軤": "轷",
    "軫": "轸",
    "軲": "轱",
    "軸": "轴",
    "軹": "轵",
    "軺": "轺",
    "軻": "轲",
    "軼": "轶",
    "軾": "轼",
    "較": "较",
    "輅": "辂",
    "輇": "辁",
    "輈": "辀",
    "載": "载",
    "輊": "轾",
    "輒": "辄",
    "輓": "挽",
    "輔": "辅",
    "輕": "轻",
    "輛": "辆",
    "輜": "辎",
    "輝": "辉",
    "輞": "辋",
    "輟": "辍",
    "輥": "辊",
    "輦": "辇",
    "輩": "辈",
    "輪": "轮",
    "輬": "辌",
    "輯": "辑",
    "輳": "辏",
    "輸": "输",
    "輻": "辐",
    "輼": "辒",
    "輾": "辗",
    "輿": "舆",
    "轀": "辒",
    "轂": "毂",
    "轄": "辖",
    "轅": "辕",
    "轆": "辘",
    "轉": "转",
    "轍": "辙",
    "轎": "轿",
    "轔": "辚",
    "轟": "轰",
    "轡": "辔",
    "轢": "轹",
    "轤": "轳",
    "辦": "办",
    "辭": "辞",
    "辮": "辫",
    "辯": "辩",
    "農": "农",
    "迴": "回",
    "逕": "迳",
    "這": "这",
    "連": "连",
    "週": "周",
    "進": "进",
    "遊": "游",
    "運": "运",
    "過": "过",
    "達": "达",
    "違": "违",
    "遙": "遥",
    "遜": "逊",
    "遞": "递",
    "遠": "远",
    "遡": "溯",
    "適": "适",
    "遲": "迟",
    "遷": "迁",
    "選": "选",
    "遺": "遗",
    "遼": "辽",
    "邁": "迈",
    "還": "还",
    "邇": "迩",
    "邊": "边",
    "邏": "逻",
    "邐": "逦",
    "郟": "郏",
    "郵": "邮",
    "鄆": "郓",
    "鄉": "乡",
    "鄒": "邹",
    "鄔": "邬",
    "鄖": "郧",
    "鄧": "邓",
    "鄭": "郑",
    "鄰": "邻",
    "鄲": "郸",
    "鄴": "邺",
    "鄶": "郐",
    "鄺": "邝",
    "酇": "酂",
    "酈": "郦",
    "醃": "腌",
    "醖": "酝",
    "醜": "丑",
    "醞": "酝",
    "醣": "糖",
    "醫": "医",
    "醬": "酱",
    "醱": "酦",
    "釀": "酿",
    "釁": "衅",
    "釃": "酾",
    "釅": "酽",
    "釋": "释",
    "釐": "厘",
    "釒": "钅",
    "釓": "钆",
    "釔": "钇",
    "釕": "钌",
    "釗": "钊",
    "釘": "钉",
    "釙": "钋",
    "針": "针",
    "釣": "钓",
    "釤": "钐",
    "釦": "扣",
    "釧": "钏",
    "釩": "钒",
    "釵": "钗",
    "釷": "钍",
    "釹": "钕",
    "釺": "钎",
    "釾": "䥺",
    "鈀": "钯",
    "鈁": "钫",
    "鈃": "钘",
    "鈄": "钭",
    "鈅": "钥",
    "鈈": "钚",
    "鈉": "钠",
    "鈍": "钝",
    "鈎": "钩",
    "鈐": "钤",
    "鈑": "钣",
    "鈒": "钑",
    "鈔": "钞",
    "鈞": "钧",
    "鈡": "钟",
    "鈣": "钙",
    "鈥": "钬",
    "鈦": "钛",
    "鈧": "钪",
    "鈮": "铌",
    "鈰": "铈",
    "鈳": "钶",
    "鈴": "铃",
    "鈷": "钴",
    "鈸": "钹",
    "鈹": "铍",
    "鈺": "钰",
    "鈽": "钸",
    "鈾": "铀",
    "鈿": "钿",
    "鉀": "钾",
    "鉆": "钻",
    "鉈": "铊",
    "鉉": "铉",
    "鉋": "铇",
    "鉍": "铋",
    "鉑": "铂",
    "鉕": "钷",
    "鉗": "钳",
    "鉚": "铆",
    "鉛": "铅",
    "鉞": "钺",
    "鉢": "钵",
    "鉤": "钩",
    "鉦": "钲",
    "鉬": "钼",
    "鉭": "钽",
    "鉶": "铏",
    "鉸": "铰",
    "鉺": "铒",
    "鉻": "铬",
    "鉿": "铪",
    "銀": "银",
    "銃": "铳",
    "銅": "铜",
    "銍": "铚",
    "銑": "铣",
    "銓": "铨",
    "銖": "铢",
    "銘": "铭",
    "銚": "铫",
    "銛": "铦",
    "銜": "衔",
    "銠": "铑",
    "銣": "铷",
    "銥": "铱",
    "銦": "铟",
    "銨": "铵",
    "銩": "铥",
    "銪": "铕",
    "銫": "铯",
    "銬": "铐",
    "銱": "铞",
    "銳": "锐",
    "銷": "销",
    "銹": "锈",
    "銻": "锑",
    "銼": "锉",
    "鋁": "铝",
    "鋃": "锒",
    "鋅": "锌",
    "鋇": "钡",
    "鋌": "铤",
    "鋏": "铗",
    "鋒": "锋",
    "鋙": "铻",
    "鋝": "锊",
    "鋟": "锓",
    "鋣": "铘",
    "鋤": "锄",
    "鋥": "锃",
    "鋦": "锔",
    "鋨": "锇",
    "鋩": "铓",
    "鋪": "铺",
    "鋭": "锐",
    "鋮": "铖",
    "鋯": "锆",
    "鋰": "锂",
    "鋱": "铽",
    "鋶": "锍",
    "鋸": "锯",
    "鋼": "钢",
    "錁": "锞",
    "錄": "录",
    "錆": "锖",
    "錇": "锫",
    "錈": "锩",
    "錏": "铔",
    "錐": "锥",
    "錒": "锕",
    "錕": "锟",
    "錘": "锤",
    "錙": "锱",
    "錚": "铮",
    "錛": "锛",
    "錟": "锬",
    "錠": "锭",
    "錡": "锜",
    "錢": "钱",
    "錦": "锦",
    "錨": "锚",
    "錩": "锠",
    "錫": "锡",
    "錮": "锢",
    "錯": "错",
    "録": "录",
    "錳": "锰",
    "錶": "表",
    "錸": "铼",
    "鍀": "锝",
    "鍁": "锨",
    "鍃": "锪",
    "鍆": "钔",
    "鍇": "锴",
    "鍈": "锳",
    "鍋": "锅",
    "鍍": "镀",
    "鍔": "锷",
    "鍘": "铡",
    "鍚": "钖",
    "鍛": "锻",
    "鍠": "锽",
    "鍤": "锸",
    "鍥": "锲",
    "鍩": "锘",
    "鍬": "锹",
    "鍰": "锾",
    "鍵": "键",
    "鍶": "锶",
    "鍺": "锗",
    "鍼": "针",
    "鎂": "镁",
    "鎄": "锿",
    "鎇": "镅",
    "鎊": "镑",
    "鎌": "镰",
    "鎔": "镕",
    "鎖": "锁",
    "鎘": "镉",
    "鎚": "锤",
    "鎛": "镈",
    "鎡": "镃",
    "鎢": "钨",
    "鎣": "蓥",
    "鎦": "镏",
    "鎧": "铠",
    "鎩": "铩",
    "鎪": "锼",
    "鎬": "镐",
    "鎭": "镇",
    "鎮": "镇",
    "鎰": "镒",
    "鎲": "镋",
    "鎳": "镍",
    "鎵": "镓",
    "鎸": "镌",
    "鎿": "镎",
    "鏃": "镞",
    "鏇": "镟",
    "鏈": "链",
    "鏌": "镆",
    "鏍": "镙",
    "鏐": "镠",
    "鏑": "镝",
    "鏗": "铿",
    "鏘": "锵",
    "鏚": "戚",
    "鏜": "镗",
    "鏝": "镘",
    "鏞": "镛",
    "鏟": "铲",
    "鏡": "镜",
    "鏢": "镖",
    "鏤": "镂",
    "鏨": "錾",
    "鏰": "镚",
    "鏵": "铧",
    "鏷": "镤",
    "鏹": "镪",
    "鏺": "䥽",
    "鏽": "锈",
    "鐃": "铙",
    "鐋": "铴",
    "鐐": "镣",
    "鐒": "铹",
    "鐓": "镦",
    "鐔": "镡",
    "鐗": "锏",
    "鐘": "钟",
    "鐙": "镫",
    "鐝": "镢",
    "鐠": "镨",
    "鐥": "䦅",
    "鐦": "锎",
    "鐧": "锏",
    "鐨": "镄",
    "鐫": "镌",
    "鐮": "镰",
    "鐯": "䦃",
    "鐲": "镯",
    "鐳": "镭",
    "鐵": "铁",
    "鐶": "镮",
    "鐸": "铎",
    "鐺": "铛",
    "鐿": "镱",
    "鑄": "铸",
    "鑊": "镬",
    "鑌": "镔",
    "鑑": "鉴",
    "鑒": "鉴",
    "鑔": "镲",
    "鑕": "锧",
    "鑞": "镴",
    "鑠": "铄",
    "鑣": "镳",
    "鑥": "镥",
    "鑭": "镧",
    "鑰": "钥",
    "鑱": "镵",
    "鑲": "镶",
    "鑷": "镊",
    "鑹": "镩",
    "鑼": "锣",
    "鑽": "钻",
    "鑾": "銮",
    "鑿": "凿",
    "钂": "镋",
    "镟": "旋",
    "長": "长",
    "門": "门",
    "閂": "闩",
    "閃": "闪",
    "閆": "闫",
    "閈": "闬",
    "閉": "闭",
    "閌": "闶",
    "閎": "闳",
    "閏": "闰",
    "閑": "闲",
    "間": "间",
    "閔": "闵",
    "閘": "闸",
    "閡": "阂",
    "閣": "阁",
    "閤": "合",
    "閥": "阀",
    "閨": "闺",
    "閩": "闽",
    "閫": "阃",
    "閬": "阆",
    "閭": "闾",
    "閱": "阅",
    "閲": "阅",
    "閶": "阊",
    "閹": "阉",
    "閻": "阎",
    "閼": "阏",
    "閽": "阍",
    "閾": "阈",
    "閿": "阌",
    "闃": "阒",
    "闆": "板",
    "闇": "暗",
    "闈": "闱",
    "闊": "阔",
    "闋": "阕",
    "闌": "阑",
    "闍": "阇",
    "闐": "阗",
    "闒": "阘",
    "闓": "闿",
    "闔": "阖",
    "闕": "阙",
    "闖": "闯",
    "關": "关",
    "闞": "阚",
    "闠": "阓",
    "闡": "阐",
    "闢": "辟",
    "闤": "阛",
    "闥": "闼",
    "陘": "陉",
    "陝": "陕",
    "陞": "升",
    "陣": "阵",
    "陰": "阴",
    "陳": "陈",
    "陸": "陆",
    "陽": "阳",
    "隉": "陧",
    "隊": "队",
    "階": "阶",
    "隕": "陨",
    "際": "际",
    "隨": "随",
    "險": "险",
    "隱": "隐",
    "隴": "陇",
    "隸": "隶",
    "隻": "只",
    "雋": "隽",
    "雖": "虽",
    "雙": "双",
    "雛": "雏",
    "雜": "杂",
    "雞": "鸡",
    "離": "离",
    "難": "难",
    "雲": "云",
    "電": "电",
    "霢": "霡",
    "霧": "雾",
    "霽": "霁",
    "靂": "雳",
    "靄": "霭",
    "靆": "叇",
    "靈": "灵",
    "靉": "叆",
    "靚": "靓",
    "靜": "静",
    "靨": "靥",
    "鞀": "鼗",
    "鞏": "巩",
    "鞝": "绱",
    "鞦": "秋",
    "鞽": "鞒",
    "韁": "缰",
    "韃": "鞑",
    "韆": "千",
    "韉": "鞯",
    "韋": "韦",
    "韌": "韧",
    "韍": "韨",
    "韓": "韩",
    "韙": "韪",
    "韜": "韬",
    "韞": "韫",
    "韻": "韵",
    "響": "响",
    "頁": "页",
    "頂": "顶",
    "頃": "顷",
    "項": "项",
    "順": "顺",
    "頇": "顸",
    "須": "须",
    "頊": "顼",
    "頌": "颂",
    "頎": "颀",
    "頏": "颃",
    "預": "预",
    "頑": "顽",
    "頒": "颁",
    "頓": "顿",
    "頗": "颇",
    "領": "领",
    "頜": "颌",
    "頡": "颉",
    "頤": "颐",
    "頦": "颏",
    "頭": "头",
    "頮": "颒",
    "頰": "颊",
    "頲": "颋",
    "頴": "颕",
    "頷": "颔",
    "頸": "颈",
    "頹": "颓",
    "頻": "频",
    "頽": "颓",
    "顆": "颗",
    "題": "题",
    "額": "额",
    "顎": "颚",
    "顏": "颜",
    "顒": "颙",
    "顓": "颛",
    "顔": "颜",
    "顙": "颡",
    "顛": "颠",
    "類": "类",
    "顢": "颟",
    "顥": "颢",
    "顧": "顾",
    "顫": "颤",
    "顬": "颥",
    "顯": "显",
    "顰": "颦",
    "顱": "颅",
    "顳": "颞",
    "顴": "颧",
    "風": "风",
    "颭": "飐",
    "颮": "飑",
    "颯": "飒",
    "颱": "台",
    "颳": "刮",
    "颶": "飓",
    "颸": "飔",
    "颺": "飏",
    "颻": "飖",
    "颼": "飕",
    "飀": "飗",
    "飄": "飘",
    "飆": "飙",
    "飈": "飚",
    "飛": "飞",
    "飠": "饣",
    "飢": "饥",
    "飣": "饤",
    "飥": "饦",
    "飩": "饨",
    "飪": "饪",
    "飫": "饫",
    "飭": "饬",
    "飯": "饭",
    "飱": "飧",
    "飲": "饮",
    "飴": "饴",
    "飼": "饲",
    "飽": "饱",
    "飾": "饰",
    "飿": "饳",
    "餃": "饺",
    "餄": "饸",
    "餅": "饼",
    "餉": "饷",
    "養": "养",
    "餌": "饵",
    "餎": "饹",
    "餏": "饻",
    "餑": "饽",
    "餒": "馁",
    "餓": "饿",
    "餕": "馂",
    "餖": "饾",
    "餚": "肴",
    "餛": "馄",
    "餜": "馃",
    "餞": "饯",
    "餡": "馅",
    "館": "馆",
    "餳": "饧",
    "餶": "馉",
    "餷": "馇",
    "餺": "馎",
    "餼": "饩",
    "餾": "馏",
    "餿": "馊",
    "饁": "馌",
    "饃": "馍",
    "饅": "馒",
    "饈": "馐",
    "饉": "馑",
    "饊": "馓",
    "饋": "馈",
    "饌": "馔",
    "饑": "饥",
    "饒": "饶",
    "饗": "飨",
    "饜": "餍",
    "饞": "馋",
    "饢": "馕",
    "馬": "马",
    "馭": "驭",
    "馮": "冯",
    "馱": "驮",
    "馳": "驰",
    "馴": "驯",
    "馹": "驲",
    "駁": "驳",
    "駐": "驻",
    "駑": "驽",
    "駒": "驹",
    "駔": "驵",
    "駕": "驾",
    "駘": "骀",
    "駙": "驸",
    "駛": "驶",
    "駝": "驼",
    "駟": "驷",
    "駡": "骂",
    "駢": "骈",
    "駭": "骇",
    "駰": "骃",
    "駱": "骆",
    "駸": "骎",
    "駿": "骏",
    "騁": "骋",
    "騂": "骍",
    "騅": "骓",
    "騌": "骔",
    "騍": "骒",
    "騎": "骑",
    "騏": "骐",
    "騖": "骛",
    "騙": "骗",
    "騤": "骙",
    "騧": "䯄",
    "騫": "骞",
    "騭": "骘",
    "騮": "骝",
    "騰": "腾",
    "騶": "驺",
    "騷": "骚",
    "騸": "骟",
    "騾": "骡",
    "驀": "蓦",
    "驁": "骜",
    "驂": "骖",
    "驃": "骠",
    "驅": "驱",
    "驊": "骅",
    "驌": "骕",
    "驍": "骁",
    "驏": "骣",
    "驕": "骄",
    "驗": "验",
    "驚": "惊",
    "驛": "驿",
    "驟": "骤",
    "驢": "驴",
    "驤": "骧",
    "驥": "骥",
    "驦": "骦",
    "驪": "骊",
    "驫": "骉",
    "骯": "肮",
    "髏": "髅",
    "髒": "脏",
    "體": "体",
    "髕": "髌",
    "髖": "髋",
    "髮": "发",
    "鬆": "松",
    "鬍": "胡",
    "鬚": "须",
    "鬢": "鬓",
    "鬥": "斗",
    "鬧": "闹",
    "鬨": "哄",
    "鬩": "阋",
    "鬮": "阄",
    "鬱": "郁",
    "鬹": "鬶",
    "魎": "魉",
    "魘": "魇",
    "魚": "鱼",
    "魛": "鱽",
    "魢": "鱾",
    "魨": "鲀",
    "魯": "鲁",
    "魴": "鲂",
    "魷": "鱿",
    "魺": "鲄",
    "鮁": "鲅",
    "鮃": "鲆",
    "鮊": "鲌",
    "鮋": "鲉",
    "鮍": "鲏",
    "鮎": "鲇",
    "鮐": "鲐",
    "鮑": "鲍",
    "鮒": "鲋",
    "鮓": "鲊",
    "鮚": "鲒",
    "鮜": "鲘",
    "鮝": "鲞",
    "鮞": "鲕",
    "鮣": "䲟",
    "鮦": "鲖",
    "鮪": "鲔",
    "鮫": "鲛",
    "鮭": "鲑",
    "鮮": "鲜",
    "鮳": "鲓",
    "鮶": "鲪",
    "鮺": "鲝",
    "鯀": "鲧",
    "鯁": "鲠",
    "鯇": "鲩",
    "鯉": "鲤",
    "鯊": "鲨",
    "鯒": "鲬",
    "鯔": "鲻",
    "鯕": "鲯",
    "鯖": "鲭",
    "鯗": "鲞",
    "鯛": "鲷",
    "鯝": "鲴",
    "鯡": "鲱",
    "鯢": "鲵",
    "鯤": "鲲",
    "鯧": "鲳",
    "鯨": "鲸",
    "鯪": "鲮",
    "鯫": "鲰",
    "鯰": "鲶",
    "鯴": "鲺",
    "鯷": "鳀",
    "鯽": "鲫",
    "鯿": "鳊",
    "鰁": "鳈",
    "鰂": "鲗",
    "鰃": "鳂",
    "鰆": "䲠",
    "鰈": "鲽",
    "鰉": "鳇",
    "鰌": "䲡",
    "鰍": "鳅",
    "鰏": "鲾",
    "鰐": "鳄",
    "鰒": "鳆",
    "鰓": "鳃",
    "鰛": "鳁",
    "鰜": "鳒",
    "鰟": "鳑",
    "鰠": "鳋",
    "鰣": "鲥",
    "鰥": "鳏",
    "鰧": "䲢",
    "鰨": "鳎",
    "鰩": "鳐",
    "鰭": "鳍",
    "鰮": "鳁",
    "鰱": "鲢",
    "鰲": "鳌",
    "鰳": "鳓",
    "鰵": "鳘",
    "鰷": "鲦",
    "鰹": "鲣",
    "鰺": "鲹",
    "鰻": "鳗",
    "鰼": "鳛",
    "鰾": "鳔",
    "鱂": "鳉",
    "鱅": "鳙",
    "鱈": "鳕",
    "鱉": "鳖",
    "鱒": "鳟",
    "鱔": "鳝",
    "鱖": "鳜",
    "鱗": "鳞",
    "鱘": "鲟",
    "鱝": "鲼",
    "鱟": "鲎",
    "鱠": "鲙",
    "鱣": "鳣",
    "鱤": "鳡",
    "鱧": "鳢",
    "鱨": "鲿",
    "鱭": "鲚",
    "鱯": "鳠",
    "鱷": "鳄",
    "鱸": "鲈",
    "鱺": "鲡",
    "鳥": "鸟",
    "鳧": "凫",
    "鳩": "鸠",
    "鳬": "凫",
    "鳲": "鸤",
    "鳳": "凤",
    "鳴": "鸣",
    "鳶": "鸢",
    "鳾": "䴓",
    "鴆": "鸩",
    "鴇": "鸨",
    "鴉": "鸦",
    "鴒": "鸰",
    "鴕": "鸵",
    "鴛": "鸳",
    "鴝": "鸲",
    "鴞": "鸮",
    "鴟": "鸱",
    "鴣": "鸪",
    "鴦": "鸯",
    "鴨": "鸭",
    "鴯": "鸸",
    "鴰": "鸹",
    "鴴": "鸻",
    "鴷": "䴕",
    "鴻": "鸿",
    "鴿": "鸽",
    "鵁": "䴔",
    "鵂": "鸺",
    "鵃": "鸼",
    "鵐": "鹀",
    "鵑": "鹃",
    "鵒": "鹆",
    "鵓": "鹁",
    "鵜": "鹈",
    "鵝": "鹅",
    "鵠": "鹄",
    "鵡": "鹉",
    "鵪": "鹌",
    "鵬": "鹏",
    "鵮": "鹐",
    "鵯": "鹎",
    "鵲": "鹊",
    "鵷": "鹓",
    "鵾": "鹍",
    "鶄": "䴖",
    "鶇": "鸫",
    "鶉": "鹑",
    "鶊": "鹒",
    "鶓": "鹋",
    "鶖": "鹙",
    "鶘": "鹕",
    "鶚": "鹗",
    "鶡": "鹖",
    "鶥": "鹛",
    "鶩": "鹜",
    "鶪": "䴗",
    "鶬": "鸧",
    "鶯": "莺",
    "鶲": "鹟",
    "鶴": "鹤",
    "鶹": "鹠",
    "鶺": "鹡",
    "鶻": "鹘",
    "鶼": "鹣",
    "鶿": "鹚",
    "鷀": "鹚",
    "鷁": "鹢",
    "鷂": "鹞",
    "鷄": "鸡",
    "鷈": "䴘",
    "鷉": "䴘",
    "鷊": "鹝",
    "鷓": "鹧",
    "鷖": "鹥",
    "鷗": "鸥",
    "鷙": "鸷",
    "鷚": "鹨",
    "鷥": "鸶",
    "鷦": "鹪",
    "鷫": "鹔",
    "鷯": "鹩",
    "鷲": "鹫",
    "鷳": "鹇",
    "鷴": "鹇",
    "鷸": "鹬",
    "鷹": "鹰",
    "鷺": "鹭",
    "鷽": "鸴",
    "鷿": "䴙",
    "鸂": "㶉",
    "鸇": "鹯",
    "鸊": "䴙",
    "鸌": "鹱",
    "鸏": "鹲",
    "鸕": "鸬",
    "鸘": "鹴",
    "鸚": "鹦",
    "鸛": "鹳",
    "鸝": "鹂",
    "鸞": "鸾",
    "鹵": "卤",
    "鹹": "咸",
    "鹺": "鹾",
    "鹼": "碱",
    "鹽": "盐",
    "麗": "丽",
    "麥": "麦",
    "麩": "麸",
    "麫": "面",
    "麯": "曲",
    "黃": "黄",
    "黌": "黉",
    "點": "点",
    "黨": "党",
    "黲": "黪",
    "黴": "霉",
    "黶": "黡",
    "黷": "黩",
    "黽": "黾",
    "黿": "鼋",
    "鼉": "鼍",
    "鼕": "冬",
    "鼴": "鼹",
    "齇": "齄",
    "齊": "齐",
    "齋": "斋",
    "齎": "赍",
    "齏": "齑",
    "齒": "齿",
    "齔": "龀",
    "齕": "龁",
    "齗": "龂",
    "齙": "龅",
    "齜": "龇",
    "齟": "龃",
    "齠": "龆",
    "齡": "龄",
    "齣": "出",
    "齦": "龈",
    "齪": "龊",
    "齬": "龉",
    "齲": "龋",
    "齶": "腭",
    "齷": "龌",
    "龍": "龙",
    "龎": "厐",
    "龐": "庞",
    "龑": "䶮",
    "龔": "龚",
    "龕": "龛",
    "龜": "龟",
    "鿁": "䜤",
    "妳": "你"
  };
  var regexp;
  function cht2chs(text) {
    regexp || (regexp = new RegExp(Object.keys(aTC2SC).join("|"), "g"));
    return text.replace(regexp, (d) => aTC2SC[d]);
  }

  // src/core/player.ts
  var danmakuProtect = [
    // 96048, // 【幸运星组曲】「らき☆すた動画」
    207527,
    // 【呆又呆】鹿乃呆? 弹幕呆?
    329896,
    // 【白屏弹幕】10 years after
    469970,
    // 【黑屏弹幕】美丽之物【Soundhorizon】
    1474616,
    // 繁星梅露露(弹幕版)
    4335759,
    // 【弹幕PV】世界终结舞厅
    384460933
    // 【弹幕祭应援】 緋色月下、狂咲ノ絶-1st Anniversary Remix
  ];
  var Player = class {
    /** 播放器启动参数修改回调栈 */
    modifyArgumentCallback = [];
    /** 添加播放器启动参数修改命令 */
    addModifyArgument(callback) {
      this.modifyArgumentCallback.push(callback);
    }
    /** 捕获的新版播放器 */
    nanoPlayer;
    connect;
    isConnect = false;
    /** 已加载播放器 */
    playLoaded = false;
    constructor() {
      propertyHook.modify(window, "nano", (v) => {
        var _a3;
        debug("捕获新版播放器!");
        const createPlayer = v.createPlayer;
        const that = this;
        propertyHook(v, "createPlayer", function() {
          debug("新版播放器试图启动!");
          if (that.isEmbedPlayer)
            throw new Error("爆破新版播放器!");
          that.nanoPlayer = createPlayer.call(v, ...arguments);
          that.createPlayer(...arguments);
          that.connect = that.nanoPlayer.connect;
          that.nanoPlayer.connect = function() {
            var _a4;
            if (that.isConnect) {
              debug("允许新版播放器启动!");
              return (_a4 = that.connect) == null ? void 0 : _a4.call(that);
            } else {
              that.isConnect = true;
              return Promise.resolve(true);
            }
          };
          return that.nanoPlayer;
        });
        if (window.player) {
          try {
            const manifest = (_a3 = window.player) == null ? void 0 : _a3.getManifest();
            debug("播放器实例已存在,可能脚本注入过慢!", manifest);
            manifest && this.createPlayer(manifest);
          } catch (e) {
            debug("读取播放器启动参数失败!", e);
          }
        }
        return v;
      });
      window.self === window.top || this.addModifyArgument((args) => {
        const obj = urlObj(\`?\${args[2]}\`);
        obj.as_wide = 1;
        args[2] = objUrl("", obj);
      });
      user.addCallback((status) => {
        status.heartbeatBlock && this.heartbeatBlock();
      });
    }
    /** 修改播放器启动参数 */
    modifyArgument(args) {
      var _a3;
      while (this.modifyArgumentCallback.length) {
        (_a3 = this.modifyArgumentCallback.shift()) == null ? void 0 : _a3(args);
      }
    }
    initData = {};
    dataInited = false;
    createPlayer(initData, theme) {
      this.dataInited = true;
      Object.entries(initData).forEach((d) => {
        switch (typeof d[1]) {
          case "bigint":
          case "boolean":
          case "number":
          case "string":
          case "undefined":
            this.initData[d[0]] = d[1];
            break;
          default:
            break;
        }
      });
      if (initData.element) {
        if (initData.element.id !== "bofqi" && initData.element.id !== "bilibili-player") {
          initData.element.id = "bofqi";
          initData.element.style.cssText = "margin: 0;padding: 0;width: 100%;height: 100%;";
        }
      }
      this.initData.as_wide = true;
      this.dataInitedCallback();
    }
    /** 脚本初始化中 */
    // private loading = true;
    /** 旧版播放器已启用 */
    isEmbedPlayer = false;
    /** 旧版播放器正常引导 */
    EmbedPlayer(loadPlayer, isEmbedPlayer = true) {
      var _a3;
      this.nanoPermit = () => {
      };
      this.isEmbedPlayer = isEmbedPlayer;
      methodHook(window, "EmbedPlayer", () => loadPlayer(), (d) => this.modifyArgument(d));
      if ((_a3 = window.player) == null ? void 0 : _a3.disconnect) {
        try {
          debug("爆破新版播放器!");
          window.player.disconnect();
          this.nanoPlayer || (this.nanoPlayer = window.player);
        } catch {
        }
      }
      this.switchVideo();
      this.simpleChinese();
    }
    /** 通过hook新版播放器来引导旧版播放器 */
    connectPlayer(loadPlayer) {
      this.EmbedPlayer(loadPlayer, false);
      this.dataInitedCallback(() => {
        window.EmbedPlayer("player", "", objUrl("", this.initData));
        if (this.nanoPlayer) {
          Object.defineProperties(this.nanoPlayer, {
            addEventListener: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.addEventListener;
            } },
            directiveDispatcher: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.directiveDispatcher;
            } },
            editorCenter: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.editorCenter;
            } },
            exitFullScreen: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.exitFullScreen;
            } },
            getCurrentTime: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.getCurrentTime;
            } },
            getDuration: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.getDuration;
            } },
            next: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.next;
            } },
            ogvUpdate: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.ogvUpdate;
            } },
            pause: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.pause;
            } },
            play: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.play;
            } },
            prev: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.prev;
            } },
            reload: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.reload;
            } },
            seek: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.seek;
            } },
            stop: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.stop;
            } },
            volume: { get: () => {
              var _a3;
              return (_a3 = window.player) == null ? void 0 : _a3.volume;
            } },
            isInitialized: { value: () => true }
          });
        }
      });
      addCss(\`#bofqi .player,#bilibili-player .player{width: 100%;height: 100%;display: block;}.bilibili-player .bilibili-player-auxiliary-area{z-index: 1;}\`, "nano-fix");
    }
    /** 不启用旧版播放器允许新版播放器启动 */
    nanoPermit() {
      var _a3;
      if (this.isConnect) {
        debug("允许新版播放器启动!");
        (_a3 = this.connect) == null ? void 0 : _a3.call(this);
      } else {
        this.isConnect = true;
      }
    }
    /** 引导旧播放器 */
    loadEmbedPlayer() {
      if (!this.playLoaded) {
        this.playLoaded = true;
        this.EmbedPlayer(() => this.loadplayer());
        this.playerSettings();
      }
    }
    /** 替换新版播放器 */
    loadConnectPlayer() {
      if (!this.playLoaded) {
        this.playLoaded = true;
        this.connectPlayer(() => this.loadplayer());
        this.playerSettings();
      }
    }
    /** 播放器启动栈 */
    dataInitedCallbacks = [];
    /** 捕获启动数据后启动播放器 */
    dataInitedCallback(callback) {
      var _a3;
      callback && this.dataInitedCallbacks.push(callback);
      if (this.dataInited) {
        while (this.dataInitedCallbacks.length) {
          (_a3 = this.dataInitedCallbacks.shift()) == null ? void 0 : _a3();
        }
      }
    }
    regised = false;
    switchVideo() {
      if (this.regised)
        return;
      this.regised = true;
      let cache;
      switchVideo(() => {
        if (window.player.appendTopMessage) {
          const cfg = LocalStorage.getItem("bilibili_player_settings");
          poll(() => document.querySelector(".bilibili-player-video-message-panel"), () => {
            if (cache) {
              window.player.appendTopMessage(cache);
            } else if (cfg.message) {
              const message = Object.keys(cfg.message).filter((d) => cfg.message[d]).sort(() => 0.5 - Math.random());
              if (message[0]) {
                switch (message[0]) {
                  case "system":
                    apiWebshowLoc(4694).then((d) => {
                      window.player.appendTopMessage(cache = d.filter((d2) => d2.name).map((d2) => {
                        return {
                          url: d2.url,
                          type: message[0],
                          name: d2.name
                        };
                      }));
                    }).catch((e) => {
                      debug.error("播放器通知", e);
                    });
                    break;
                  case "bangumi":
                    apiPgcSlideShow(531).then((d) => {
                      window.player.appendTopMessage(cache = d.map((d2) => {
                        return {
                          url: d2.blink,
                          type: message[0],
                          name: d2.title
                        };
                      }));
                    }).catch((e) => {
                      debug.error("播放器通知", e);
                    });
                    break;
                  case "news":
                    apiSearchSquare().then((d) => {
                      window.player.appendTopMessage(cache = d.map((d2) => {
                        return {
                          url: d2.uri || \`//search.bilibili.com/all?keyword=\${encodeURIComponent(d2.keyword)}\`,
                          type: message[0],
                          name: d2.show_name || d2.keyword
                        };
                      }));
                    }).catch((e) => {
                      debug.error("播放器通知", e);
                    });
                    break;
                  default:
                    break;
                }
              }
            }
          });
        }
        user.userStatus.danmakuProtect && this.danmakuProtect();
      });
    }
    playbackRateTimer;
    /** 更改播放器速率 */
    playbackRate(playbackRate = 1) {
      clearTimeout(this.playbackRateTimer);
      this.playbackRateTimer = setTimeout(() => {
        const video = document.querySelector("#bilibiliPlayer video");
        if (!video)
          return toast.warning("未找到播放器!请在播放页面使用。");
        video.playbackRate = Number(playbackRate);
      }, 100);
    }
    /** 繁体字幕转简体 */
    simpleChinese() {
      if (user.userStatus.simpleChinese) {
        xhrHook("x/player/v2?", void 0, (res) => {
          var _a3, _b2, _c;
          try {
            const response = jsonCheck(res.response);
            if ((_c = (_b2 = (_a3 = response == null ? void 0 : response.data) == null ? void 0 : _a3.subtitle) == null ? void 0 : _b2.subtitles) == null ? void 0 : _c.length) {
              response.data.subtitle.subtitles.forEach((d) => {
                if (typeof d.subtitle_url === "string") {
                  switch (d.lan) {
                    case "zh-Hant":
                      xhrHook(d.subtitle_url, void 0, (res2) => {
                        try {
                          let response2 = res2.responseType === "json" ? JSON.stringify(res2.response) : res2.responseText;
                          if (response2) {
                            response2 = cht2chs(response2);
                            if (res2.responseType === "json") {
                              res2.response = JSON.parse(response2);
                            } else {
                              res2.response = res2.responseText = response2;
                            }
                            toast.warning("字幕:繁 -> 简", \`原始语言:\${d.lan_doc}\`);
                          }
                        } catch (e) {
                          debug.error("繁 -> 简", e);
                        }
                      });
                      break;
                    default:
                      break;
                  }
                }
              });
            }
          } catch {
          }
        }, false);
      }
    }
    /** 弹幕保护计划 */
    danmakuProtect() {
      var _a3;
      if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm))
        return;
      const cid = Number(BLOD.cid);
      if (cid && danmakuProtect.includes(cid)) {
        alert("此视频高级弹幕部分丢失,点击确认加载备份弹幕。<br>※ 请在原弹幕加载完后再点确定,以免备份弹幕被覆盖。", "弹幕保护计划", [
          {
            text: "确定",
            callback: () => {
              const msg = toast.list("弹幕保护计划 >>>");
              GM.fetch(cdn.encode(\`/danmaku/\${cid}.xml\`, ""), { cache: "force-cache" }).then((d) => {
                msg.push(\`> 获取存档:\${cid}.xml\`);
                msg.type = "success";
                return d.text();
              }).then((d) => {
                const dm = DanmakuBase.decodeXml(d);
                window.player.appendDm(dm, !user.userStatus.dmContact);
                msg.push(\`> 有效弹幕数:\${dm.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`);
              }).catch((e) => {
                msg.push(e);
                msg.type = "error";
              }).finally(() => {
                msg.delay = user.userStatus.toast.delay;
              });
            }
          },
          {
            text: "取消"
          }
        ], true);
      }
    }
    /** 备份播放器设置 */
    playerSettings() {
      const local = LocalStorage.getItem("bilibili_player_settings");
      if (local) {
        GM.setValue("bilibili_player_settings", local);
      } else {
        GM.getValue("bilibili_player_settings").then((d) => {
          d && LocalStorage.setItem("bilibili_player_settings", d);
        });
      }
    }
    /** 正在更新播放器 */
    updating = false;
    /**
     * 加载播放器
     * @param force 强制更新
     */
    async loadplayer(force = false) {
      if (!window.jQuery)
        await loadScript(URLS.JQUERY);
      try {
        if (user.userStatus.bilibiliplayer) {
          if (true) {
            const data = await Promise.all([
              GM.getValue("bilibiliplayer"),
              GM.getValue("bilibiliplayerstyle")
            ]);
            if (force || !data[0] || !data[1]) {
              if (this.updating)
                throw new Error("一次只能运行一个更新实例!");
              this.updating = true;
              if (!BLOD.version)
                throw new Error(\`未知错误导致脚本版本异常!version:\${BLOD.version}\`);
              const msg = toast.list(
                "更新播放器组件 >>>",
                "> 可能需要花费一点时间,请不要关闭页面!",
                "> 如果弹出跨域提醒,推荐【总是允许全部域名】",
                "> 如果多次更新失败,请禁用【重构播放器】功能!"
              );
              let i = 1;
              await Promise.all([
                GM.fetch(cdn.encode("/chrome/player/video.js")).then((d) => d.text()).then((d) => {
                  data[0] = d;
                  msg.push(\`> 加载播放器组件:\${i++}/2\`);
                }).catch((e) => {
                  msg.push(\`> 获取播放器组件出错!\${i++}/2\`, e);
                  msg.type = "error";
                }),
                GM.fetch(cdn.encode("/chrome/player/video.css")).then((d) => d.text()).then((d) => {
                  data[1] = d;
                  msg.push(\`> 加载播放器组件:\${i++}/2\`);
                }).catch((e) => {
                  msg.push(\`> 获取播放器组件出错!\${i++}/2\`, e);
                  msg.type = "error";
                })
              ]);
              this.updating = false;
              msg.delay = user.userStatus.toast.delay;
              if (!data[0] || !data[1]) {
                throw new Error("获取播放器组件出错!");
              }
              msg.push("> -------加载成功-------");
              msg.type = "success";
              GM.setValue("bilibiliplayer", data[0]);
              GM.setValue("bilibiliplayerstyle", data[1]);
            }
            (0, eval)(\`\${data[0]}
//@ sourceURL=bilibiliplayer.js\`);
            addCss(data[1], \`bilibiliplayer-\${BLOD.version}\`);
            GM.setValue("version", BLOD.version);
          } else {
            await Promise.all([
              GM.executeScript("player/video.js", true).then((d) => loadScript(d)),
              GM.insertCSS("player/video.css", true).then((d) => loadStyle(d))
            ]);
          }
        } else {
          await loadScript(URLS.VIDEO);
          addCss(".bilibili-player-video-progress-detail-img {transform: scale(0.333333);transform-origin: 0px 0px;}", "detail-img");
        }
      } catch (e) {
        this.updating || toast.error("播放器加载失败!", "已回滚~", e)();
        await loadScript(URLS.VIDEO);
        addCss(".bilibili-player-video-progress-detail-img {transform: scale(0.333333);transform-origin: 0px 0px;}", "detail-img");
      }
    }
    changeNaiveVideo() {
      var _a3;
      if (!window.player)
        return toast.warning("未找到播放器实例!请在播放页面使用。");
      if (!((_a3 = window.player) == null ? void 0 : _a3.changeNaiveVideo))
        return toast.warning("未启用【重构播放器】,无法播放本地视频!");
      const msg = toast.list("播放本地文件 >>>", "> 请选择一个mp4文件", "> 音视频编码必须被浏览器支持!");
      fileRead(".mp4").then((d) => {
        var _a4;
        msg.push(\`> 文件:\${d.name}\`, \`> 类型:\${d.type}\`, \`> 大小:\${sizeFormat(d.size)}\`);
        (_a4 = window.player) == null ? void 0 : _a4.changeNaiveVideo(d);
        msg.push("> 视频加载成功!");
        msg.type = "success";
      }).catch((e) => {
        msg.push(e);
        msg.type = "error";
      }).finally(() => {
        msg.delay = user.userStatus.toast.delay;
      });
    }
    /** 拦截视频心跳 */
    heartbeatBlock() {
      xhrHook.async("/heartbeat", void 0, async (res) => {
        const response = '{"code":0,"message":"0","ttl":1}';
        return {
          response,
          responseText: response
        };
      }, false);
    }
  };
  var player = new Player();

  // src/page/av.ts
  init_tampermonkey();

  // src/core/comment.ts
  init_tampermonkey();

  // src/io/api-reply.ts
  init_tampermonkey();
  async function apiReply(oid, pn = 1, type = 1, sort = 0) {
    const reply = await fetch(objUrl(URLS.REPLY, { pn, type, oid, sort }), { credentials: "include" });
    const json = await reply.json();
    return jsonCheck(json).data;
  }

  // src/core/quickLogin.ts
  init_tampermonkey();
  function biliQuickLogin() {
    window.biliQuickLogin ? window.biliQuickLogin() : loadScript("//static.hdslb.com/account/bili_quick_login.js", () => biliQuickLogin());
  }

  // src/core/comment.ts
  var Feedback;
  var loading = false;
  var load = false;
  var events = {};
  var Comment2 = class _Comment {
    /** 还原超链接标题 */
    static commentJumpUrlTitle = false;
    /** 显示评论图片 */
    static resolvePictures = true;
    /** 评论页数 */
    count = 0;
    constructor() {
      Feedback = void 0;
      loading = false;
      load = false;
      events = {};
      this.bbComment();
      this.initComment();
      this.pageCount();
      this.jump();
    }
    /** 捕获评论组件 */
    bbComment() {
      const that = this;
      Reflect.defineProperty(window, "bbComment", {
        configurable: true,
        set: (v) => {
          if (!v.prototype._createNickNameDom) {
            return loadScript("//s1.hdslb.com/bfs/seed/jinkela/commentpc/comment.min.js").then(() => {
              Array.from(document.styleSheets).forEach((d) => {
                d.href && d.href.includes("comment") && (d.disabled = true);
              });
            });
          }
          Feedback = v;
          this.bbCommentModify();
          Reflect.defineProperty(window, "bbComment", { configurable: true, value: Feedback });
        },
        get: () => {
          return Feedback ? Feedback : class {
            constructor() {
              if (!loading) {
                loadScript("//s1.hdslb.com/bfs/seed/jinkela/commentpc/comment.min.js").then(() => {
                  Array.from(document.styleSheets).forEach((d) => {
                    d.href && d.href.includes("comment") && (d.disabled = true);
                  });
                });
                loading = true;
              }
              setTimeout(() => {
                let bbcomment = new window.bbComment(...arguments);
                bbcomment.events && (bbcomment.events = Object.assign(bbcomment.events, events));
              });
            }
            on(eventName, cb) {
              if (!events[eventName]) {
                events[eventName] = [];
              }
              events[eventName].push(cb);
            }
          };
        }
      });
    }
    initComment() {
      const commentHander = {};
      Reflect.defineProperty(window, "initComment", {
        configurable: true,
        set: (v) => true,
        get: () => {
          if (load) {
            let initComment2 = function(tar, init) {
              commentHander.reset = function({ oid }) {
                new Feedback(tar, oid, init.pageType, init.userStatus);
              };
              new Feedback(tar, init.oid, init.pageType, init.userStatus, init.jumpReplyId);
              return commentHander;
            };
            var initComment = initComment2;
            Reflect.defineProperty(window, "initComment", { configurable: true, value: initComment2 });
            return initComment2;
          }
          return function() {
            if (!loading) {
              loadScript(\`//s1.hdslb.com/bfs/seed/jinkela/commentpc/comment.min.js\`).then(() => {
                load = true;
              });
            }
            loading = true;
            setTimeout(() => window.initComment(...arguments), 100);
            return commentHander;
          };
        }
      });
    }
    /** 修复按时间排序评论翻页数 */
    pageCount() {
      jsonpHook("api.bilibili.com/x/v2/reply?", void 0, (res, url) => {
        var _a3;
        if (0 === res.code && ((_a3 = res.data) == null ? void 0 : _a3.page)) {
          if (res.data.page.count) {
            this.count = res.data.page.count;
          } else if (this.count) {
            res.data.page.count = this.count;
          }
        }
        return res;
      }, false);
    }
    /** 预取评论页数 */
    async getPageCount(that) {
      var _a3;
      if (that.oid) {
        const res = await apiReply(that.oid, 1, that.pageType);
        ((_a3 = res.page) == null ? void 0 : _a3.count) && (this.count = res.page.count);
      }
    }
    /** 修复评论跳转 */
    jump() {
      jsonpHook.async("x/v2/reply/jump?", void 0, async (url) => {
        var _a3, _b2;
        const obj = urlObj(url);
        const data = await fetch(\`https://api.bilibili.com/x/v2/reply/main?csrf=6c09e4c6405d1369c9e94e0d0a4f6790&mode=3&oid=\${obj.oid}&pagination_str=%7B%22offset%22:%22%22%7D&plat=1&seek_rpid=\${obj.rpid}&type=\${obj.type}\`, { credentials: "include" });
        const json = await data.json();
        const { config, control, cursor, seek_root_reply, replies, top, upper } = json.data;
        return {
          code: 0,
          data: {
            config,
            control,
            mode: (_a3 = cursor.mode) != null ? _a3 : 3,
            page: { acount: cursor.all_count, count: (_b2 = this.count) != null ? _b2 : cursor.all_count, num: 1, rt_num: 1, size: 20 },
            replies: seek_root_reply ? [seek_root_reply].concat(replies) : replies,
            support_mode: cursor.support_mode,
            top,
            upper
          },
          message: "0",
          ttl: 1
        };
      });
    }
    /** 修补评论组件 */
    bbCommentModify() {
      this.styleFix();
      this.initAbtest();
      this._renderBottomPagination();
      this._createListCon();
      this._createSubReplyItem();
      this._registerEvent();
      this._resolvePictures();
      _Comment.commentJumpUrlTitle && this._resolveJump();
      this.quickLogin();
    }
    /** 样式修补 */
    styleFix() {
      addCss(\`.bb-comment .comment-list .list-item .info .btn-hover, .comment-bilibili-fold .comment-list .list-item .info .btn-hover {
            line-height: 24px;
        }\`, "comment-btn-24pxH");
      addCss(\`.operation.btn-hide-re .opera-list {visibility: visible}\`, "keep-operalist-visible");
      addCss(".image-exhibition {margin-top: 8px;user-select: none;} .image-exhibition .image-item-wrap {max-width: 240px;display: flex;justify-content: center;position: relative;border-radius: 4px;overflow: hidden;cursor: zoom-in;} .image-exhibition .image-item-wrap.vertical {flex-direction: column} .image-exhibition .image-item-wrap.extra-long {justify-content: start;} .image-exhibition .image-item-wrap img {width: 100%;}", "image-exhibition");
    }
    /** 退出abtest,获取翻页评论区 */
    initAbtest() {
      const that = this;
      Feedback.prototype.initAbtest = function() {
        this.abtest = {};
        this.abtest.optimize = false;
        if (this.jumpId || this.noPage) {
          this.abtest.optimize = false;
        }
        if (this.appMode === "comic") {
          this.abtest.optimize = false;
        }
        that.getPageCount(this).finally(() => {
          var _a3;
          this.init();
          if (!document.querySelector(".b-head")) {
            const div = addElement("div", { class: \`b-head\` }, void 0, '<span class="b-head-t results"></span><span class="b-head-t">评论</span>');
            const com = document.querySelector(".bb-comment");
            com == null ? void 0 : com.insertAdjacentElement("beforebegin", div);
            (_a3 = com == null ? void 0 : com.parentElement) == null ? void 0 : _a3.classList.add("common");
            addCss(".b-head {    font-size: 18px;    line-height: 24px;    color: #222;    margin: 0 0 20px;}.b-head .results {    margin-right: 10px;}", "b-head");
          }
        });
        this._registerEvent();
      };
    }
    /** 添加回小页码区 */
    _renderBottomPagination() {
      Feedback.prototype._renderBottomPagination = function(pageInfo) {
        if (this.noPage) {
          var isLastPage = pageInfo.count <= this.pageSize;
          var html = "";
          if (isLastPage) {
            html = "没有更多了~";
          } else {
            html = '<a class="more-link" href="javascript:">查看更多评论</a>';
          }
          this.\$root.find(".bottom-page").addClass("center").html(html);
          return;
        }
        const count = Math.ceil(pageInfo.count / pageInfo.size);
        if (count > 1) {
          this.\$root.find(".header-interaction").addClass("paging-box").paging({
            pageCount: count,
            current: pageInfo.num,
            backFn: (p) => {
              this.\$root.trigger("replyPageChange", {
                p,
                isBottom: true
              });
              this.trigger("replyPageChange", {
                p,
                isBottom: true
              });
              this.currentPage = p;
            }
          });
          this.\$root.find(".bottom-page").paging({
            pageCount: count,
            current: pageInfo.num,
            jump: true,
            smallSize: this.smallPager,
            backFn: (p) => {
              this.\$root.trigger("replyPageChange", {
                p,
                isBottom: true
              });
              this.trigger("replyPageChange", {
                p,
                isBottom: true
              });
              this.currentPage = p;
            }
          });
        } else {
          this.\$root.find(".header-page").html("");
          this.\$root.find(".bottom-page").html("");
        }
      };
    }
    /** 顶层评论ip属地 */
    _createListCon() {
      Feedback.prototype._createListCon = function(item, i, pos) {
        var _a3, _b2;
        const blCon = this._parentBlacklistDom(item, i, pos);
        const con = [
          '<div class="con ' + (pos == i ? "no-border" : "") + '">',
          '<div class="user">' + this._createNickNameDom(item),
          this._createLevelLink(item),
          this._identity(item.mid, item.assist, item.member.fans_detail),
          this._createNameplate(item.member.nameplate) + this._createUserSailing(item) + "</div>",
          this._createMsgContent(item),
          _Comment.resolvePictures && this._resolvePictures(item.content),
          this._createPerfectReply(item),
          '<div class="info">',
          item.floor ? '<span class="floor">#' + item.floor + "</span>" : "",
          this._createPlatformDom(item.content.plat),
          '<span class="time-location">',
          '<span class="reply-time">'.concat(this._formateTime(item.ctime), "</span>"),
          ((_a3 = item == null ? void 0 : item.reply_control) == null ? void 0 : _a3.location) ? \`<span class="reply-location">\${((_b2 = item == null ? void 0 : item.reply_control) == null ? void 0 : _b2.location) || ""}</span>\` : "",
          "</span>",
          item.lottery_id ? "" : '<span class="like ' + (item.action == 1 ? "liked" : "") + '"><i></i><span>' + (item.like ? item.like : "") + "</span></span>",
          item.lottery_id ? "" : '<span class="hate ' + (item.action == 2 ? "hated" : "") + '"><i></i></span>',
          item.lottery_id ? "" : this._createReplyBtn(item.rcount),
          item.lottery_id && item.mid !== this.userStatus.mid ? "" : '<div class="operation more-operation"><div class="spot"></div><div class="opera-list"><ul>' + (this._canSetTop(item) ? '<li class="set-top">' + (item.isUpTop ? "取消置顶" : "设为置顶") + "</li>" : "") + (this._canBlackList(item.mid) ? '<li class="blacklist">加入黑名单</li>' : "") + (this._canReport(item.mid) ? '<li class="report">举报</li>' : "") + (this._canDel(item.mid) && !item.isTop ? '<li class="del" data-mid="' + item.mid + '">删除</li>' : "") + "</ul></div></div>",
          this._createLotteryContent(item.content),
          this._createVoteContent(item.content),
          this._createTags(item),
          "</div>",
          '<div class="reply-box">',
          this._createSubReplyList(item.replies, item.rcount, false, item.rpid, item.folder && item.folder.has_folded, item.reply_control),
          "</div>",
          '<div class="paging-box">',
          "</div>",
          "</div>"
        ].join("");
        return item.state === this.blacklistCode ? blCon : con;
      };
    }
    /** 楼中楼评论ip属地 */
    _createSubReplyItem() {
      Feedback.prototype._createSubReplyItem = function(item, i) {
        var _a3, _b2;
        if (item.invisible) {
          return "";
        }
        return [
          '<div class="reply-item reply-wrap" data-id="' + item.rpid + '" data-index="' + i + '">',
          this._createSubReplyUserFace(item),
          '<div class="reply-con">',
          '<div class="user">',
          this._createNickNameDom(item),
          this._createLevelLink(item),
          this._identity(item.mid, item.assist, item.member.fans_detail),
          this._createSubMsgContent(item),
          "</div>",
          "</div>",
          '<div class="info">',
          item.floor ? '<span class="floor">#' + item.floor + "</span>" : "",
          this._createPlatformDom(item.content.plat),
          '<span class="time-location">',
          '<span class="reply-time">'.concat(this._formateTime(item.ctime), "</span>"),
          ((_a3 = item == null ? void 0 : item.reply_control) == null ? void 0 : _a3.location) ? \`<span class="reply-location">\${((_b2 = item == null ? void 0 : item.reply_control) == null ? void 0 : _b2.location) || ""}</span>\` : "",
          "</span>",
          '<span class="like ' + (item.action == 1 ? "liked" : "") + '"><i></i><span>' + (item.like ? item.like : "") + "</span></span>",
          '<span class="hate ' + (item.action == 2 ? "hated" : "") + '"><i></i></span>',
          '<span class="reply btn-hover">回复</span>',
          item.dialog != item.rpid ? '<span class="dialog btn-hover" dialog-id="' + item.dialog + '" data-id="' + item.rpid + '">查看对话</span>' : "",
          '<div class="operation btn-hover btn-hide-re"><div class="spot"></div><div class="opera-list"><ul>' + (this._canBlackList(item.mid) ? '<li class="blacklist">加入黑名单</li>' : "") + (this._canReport(item.mid) ? '<li class="report">举报</li>' : "") + (this._canDel(item.mid) ? '<li class="del" data-mid="' + item.mid + '">删除</li>' : "") + "</ul></div></div>",
          "</div>",
          "</div>"
        ].join("");
      };
    }
    /** 楼中楼“查看对话按钮” & 让评论菜单可以通过再次点击按钮来关闭 */
    _registerEvent() {
      const _registerEvent = Feedback.prototype._registerEvent;
      let previewImage;
      Feedback.prototype._registerEvent = function(e) {
        _registerEvent.call(this, e);
        let n = this.\$root;
        let \$ = window.\$;
        if (e)
          n = \$(e);
        let l = this;
        n.on("click.dialog", ".dialog", function() {
          let clickTarget = this;
          clickTarget.innerHTML = "正在载入……";
          let rootid = clickTarget.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("data-id");
          let dialogid = clickTarget.getAttribute("dialog-id");
          let selfRpid = clickTarget.getAttribute("data-id");
          addCss(\`
            .comment-dialog .dialog{display:none!important}
            .comment-dialog > .comment-list{transform:translateY(-13px)}
            .comment-dialog{min-height:200px;max-height:70vh;overflow-y:auto}
            .comment-dialog-container{width:600px;z-index:100000;position:fixed;background:#fff;left:50%;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 20px 3px #0000005c;border-radius:10px;padding:0 18px;opacity:1;transition:opacity 0.1s}
            .comment-dialog-container.hidden{opacity:0}\`, "comment-dialog");
          let container = document.createElement("div");
          container.className = "comment-dialog-container hidden";
          container.innerHTML = \`
            <div class="comment-dialog bb-comment">
            <div class="comment-list">
            <div class="list-item" data-id="\${rootid}">
            <div class="con" style="border:none;margin:0;padding:0;">
            <div class="reply-box">
            </div></div></div></div></div>\`;
          document.body.appendChild(container);
          let replyBox = container.getElementsByClassName("reply-box")[0];
          setTimeout(() => {
            let closeWindow = (e2) => {
              if (!container.contains(e2.target) && e2.target != container) {
                container.className = "comment-dialog-container hidden";
                setTimeout(() => container.remove(), 100);
                clickTarget.innerHTML = "查看对话";
                window.removeEventListener("click", closeWindow, false);
              }
            };
            window.addEventListener("click", closeWindow);
          }, 0);
          function fetchDialog(minFloor) {
            return \$.ajax({
              url: "//api.bilibili.com/x/v2/reply/dialog/cursor",
              type: "GET",
              data: {
                type: l.pageType,
                oid: l.oid,
                root: rootid,
                dialog: dialogid,
                size: 20,
                min_floor: minFloor
              },
              xhrFields: { withCredentials: true }
            });
          }
          function fixEmojiPosition(node) {
            node = \$(node);
            node.find(".reply-item").each(function(_, n2) {
              var t = \$(n2).find(".reply-face"), r = \$(n2).find(".user"), n2 = \$(n2).find(".name");
              t && r && n2 && (10 < n2.offset().top - r.offset().top ? t.css("top", "32px") : t.css("top", "0"));
            });
          }
          fetchDialog(0).done((resp) => {
            if (resp.code == 0 && resp.data.replies && resp.data.replies.length > 0) {
              let nextPage2 = function(minFloor) {
                if (minFloor < resp.data.dialog.max_floor) {
                  fetchDialog(minFloor + 1).done((resp2) => {
                    if (resp2.code == 0 && resp2.data.replies && resp2.data.replies.length > 0) {
                      replyBox.insertAdjacentHTML("beforeend", l._createSubReplyList(resp2.data.replies, resp2.data.replies.length, true, rootid, null, false));
                      nextPage2(resp2.data.cursor.max_floor);
                    }
                  });
                } else {
                  fixEmojiPosition(replyBox);
                  replyBox.querySelector(\`div[data-id="\${selfRpid}"]\`).style.cssText = \`
                            background: linear-gradient(45deg, rgba(115,108,231,0.13) 0%, rgba(0,161,214,0.13) 67%, rgba(0,212,255,0.13) 100%);
                            border-radius: 15px;
                            margin-right: 15px;\`;
                }
              };
              var nextPage = nextPage2;
              replyBox.innerHTML = l._createSubReplyList(resp.data.replies, resp.data.replies.length, true, rootid, null, false);
              l._registerEvent(container);
              container.className = "comment-dialog-container";
              fixEmojiPosition(replyBox);
              nextPage2(resp.data.cursor.max_floor);
            }
          });
        });
        n.off("click.operation", ".spot");
        n.on("click.operation", ".spot", function(e2) {
          let operalist = this.parentNode.getElementsByClassName("opera-list")[0];
          if (l.lastClickOperation != this || operalist && operalist.style.display == "none") {
            \$(".opera-list").hide(), \$(this).siblings(".opera-list").show(), e2.stopPropagation(), \$(this).hasClass("more-operation") && (e2 = +\$(this).parents(".reply-wrap:eq(0)").attr("data-id"));
            l.lastClickOperation = this;
          } else
            operalist && (operalist.style.display = "none");
        });
        n.on("click.image-exhibition", ".image-item-img", function(e2) {
          var _a3, _b2, _c;
          const src = this.src;
          const srcs = [];
          (_b2 = (_a3 = this.parentElement) == null ? void 0 : _a3.parentElement) == null ? void 0 : _b2.querySelectorAll("img").forEach((d) => {
            srcs.push(d.src);
          });
          srcs.length || srcs.push(src);
          previewImage || (previewImage = new PreviewImage());
          previewImage.value(srcs, (_c = this.parentElement) == null ? void 0 : _c.classList.contains("vertical"), srcs.indexOf(src));
        });
      };
    }
    _resolveJump() {
      Feedback.prototype._resolveJump = function(str, jumpUrl) {
        var jumpUrlSortKeyList = [];
        for (var item in jumpUrl) {
          if (item.startsWith("http")) {
            jumpUrlSortKeyList.unshift(item);
          } else {
            jumpUrlSortKeyList.push(item);
          }
        }
        for (var _i = 0, _jumpUrlSortKeyList = jumpUrlSortKeyList; _i < _jumpUrlSortKeyList.length; _i++) {
          var jumpKey = _jumpUrlSortKeyList[_i];
          if (str.includes(jumpKey)) {
            var _jumpInfo\$extra;
            var jumpInfo = jumpUrl[jumpKey];
            var img = jumpInfo.prefix_icon ? '<img src="' + jumpInfo.prefix_icon + '" class="jump-img"/>' : "";
            var content = jumpKey;
            if ((_jumpInfo\$extra = jumpInfo.extra) !== null && _jumpInfo\$extra !== void 0 && _jumpInfo\$extra.is_word_search) {
              continue;
            } else {
              var url = jumpInfo.pc_url ? jumpInfo.pc_url : jumpKey.indexOf("http") === 0 ? jumpKey : this._createLinkById(jumpKey);
              var res = img + (jumpInfo.state === 0 ? '<a href="' + url + '" data-report="' + this.jumpReportIndex + '" class="comment-jump-url" target="_blank">' + content + "</a>" : content);
              var reg = new RegExp(jumpKey.replace(/\\?/, "\\\\?"), "ig");
              try {
                var regStr = jumpKey.replace(/\\(/g, "\\\\(").replace(/\\)/g, "\\\\)").replace(/\\?/, "\\\\?");
                var reg = new RegExp(regStr, "ig");
                str = str.replace(reg, res);
              } catch (e) {
              }
            }
            this.jumpReport[this.jumpReportIndex] = jumpInfo.click_report;
            this.jumpReportIndex++;
          }
        }
        return AV.fromStr(str);
      };
    }
    /** 评论图片 */
    _resolvePictures() {
      Feedback.prototype._resolvePictures = function(content) {
        var _a3, _b2, _c, _d;
        const pictureList = [];
        if (content) {
          if ((_b2 = (_a3 = content.rich_text) == null ? void 0 : _a3.note) == null ? void 0 : _b2.images) {
            if (!content.pictures) {
              content.pictures = [];
              content.rich_text.note.images.forEach((d) => {
                content.pictures.push({
                  img_src: d,
                  click_url: content.rich_text.note.click_url
                });
              });
            }
          }
          if (((_d = (_c = content.rich_text) == null ? void 0 : _c.note) == null ? void 0 : _d.click_url) && !content.message.includes(content.rich_text.note.click_url)) {
            pictureList.push(\`<a href="\${content.rich_text.note.click_url}" target="_blank" style="font-size: 14px;">\${content.rich_text.note.click_url}</a>\`);
          }
          if (content.pictures && content.pictures.length) {
            pictureList.push(\`<div class="image-exhibition">\`);
            content.pictures.forEach((d) => {
              const type = d.img_width >= d.img_height ? "horizontal" : "vertical";
              const extraLong = d.img_width / d.img_height >= 3 || d.img_height / d.img_width >= 3;
              pictureList.push(
                '<div class="image-item-wrap ',
                type,
                \`\${extraLong ? "extraLong" : ""}\`,
                '"><img class="image-item-img" src="',
                d.img_src + "@.webp",
                \`"></div>\`
              );
            });
            pictureList.push(\`</div>\`);
          }
        }
        return pictureList.join("");
      };
    }
    /** 快速登录 */
    quickLogin() {
      Feedback.prototype.quickLogin = function() {
        biliQuickLogin();
      };
    }
  };

  // src/core/ui/like.ts
  init_tampermonkey();

  // src/io/api-like.ts
  init_tampermonkey();
  async function apiLike(aid, bili_jct, like = false) {
    const response = await fetch(URLS.LIKE, {
      method: "POST",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      },
      body: \`aid=\${aid}&like=\${like ? 1 : 2}&csrf=\${bili_jct}\`,
      credentials: "include"
    });
    const json = await response.json();
    return jsonCheck(json);
  }

  // src/io/api-like-has.ts
  init_tampermonkey();
  async function apiLikeHas(aid) {
    const response = await fetch(objUrl(URLS.HAS_LIKE, { aid }), {
      credentials: "include"
    });
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/svg/dislike.svg
  var dislike_default = '<svg viewBox="0 0 38.89 34.47" width="22px"><defs><style>.cls-1 {fill: #f36392;}</style></defs><g><path class="cls-1" d="M10.28,32.77h2.5V13.19h-2.5ZM25,10.55H35.42a4.15,4.15,0,0,1,3.33,1.67,4.38,4.38,0,0,1,.56,3.47L34.86,30.41a6.37,6.37,0,0,1-6,4.86H5.56a4.52,4.52,0,0,1-4.31-2.36,5.61,5.61,0,0,1-.69-2.5V15.55a4.93,4.93,0,0,1,2.5-4.31,8.38,8.38,0,0,1,2.5-.69h6.25l6.8-8.49A3.83,3.83,0,0,1,25.25,5Zm10.14,2.51H22.22l.28-2.92L22.92,5a1.26,1.26,0,0,0-.18-1,1.28,1.28,0,0,0-.82-.56,1.11,1.11,0,0,0-1.25.42l-6.36,8.2-.83,1.11H5.14a2,2,0,0,0-.83.28,2.28,2.28,0,0,0-1.25,2.08V30.41a2,2,0,0,0,.42,1.25,2,2,0,0,0,2.08,1.11H28.89a2.38,2.38,0,0,0,1.39-.41,3.61,3.61,0,0,0,2.08-2.78L36.8,15l2.5.56L36.8,15a2.45,2.45,0,0,0-.14-1.39,2.89,2.89,0,0,0-1.52-.54l.28-2.5Z" transform="translate(-0.56 -0.82)" /></g></svg>';

  // src/svg/like.svg
  var like_default = '<svg viewBox="0 0 38.89 34.47" width="22px"><defs><style>.cls-1 {fill: #f36392;}</style></defs><g><path class="cls-1" d="M12.06,35.27V10.43h-.15l6.7-8.37A3.83,3.83,0,0,1,25.25,5L25,10.55H35.42a4.15,4.15,0,0,1,3.33,1.67,4.38,4.38,0,0,1,.56,3.47L34.86,30.41a6.37,6.37,0,0,1-6,4.86Zm-2.5,0h-4a4.52,4.52,0,0,1-4.31-2.36,5.61,5.61,0,0,1-.69-2.5V15.55a4.93,4.93,0,0,1,2.5-4.31,8.38,8.38,0,0,1,2.5-.69h4Z" transform="translate(-0.56 -0.82)" /></g></svg>';

  // src/core/ui/like.ts
  var Like = class extends HTMLSpanElement {
    liked = false;
    number = 0;
    constructor() {
      super();
      this.classList.add("ulike");
      this.update();
      this.addEventListener("click", (ev) => {
        ev.stopPropagation();
        if (uid) {
          apiLike(BLOD.aid, getCookies().bili_jct, !this.liked).then(() => {
            this.liked ? this.number-- : this.number++;
            this.toggle();
          }).catch((e) => {
            toast.error("点赞出错!", e)();
          });
        } else {
          biliQuickLogin();
        }
      });
    }
    /** 初始化节点 */
    init() {
      if (uid) {
        apiLikeHas(BLOD.aid).then((d) => {
          this.liked = d === 1 ? true : false;
          this.update();
        }).catch((e) => {
          debug.error("获取点赞情况失败", e);
        });
      }
      addCss(".ulike {cursor: pointer;}.ulike svg{vertical-align: middle;margin-right: 10px;transform: translateY(-1px);}", \`ulike\${"1272ee5"}\`);
    }
    /** 更新点赞数 */
    get likes() {
      return this.number;
    }
    set likes(v) {
      this.number = v;
      this.update();
    }
    toggle() {
      this.liked = !this.liked;
      this.update();
    }
    update() {
      this.innerHTML = (this.liked ? like_default : dislike_default) + "点赞 " + unitFormat(this.number);
    }
  };
  customElements.get(\`like-\${"1272ee5"}\`) || customElements.define(\`like-\${"1272ee5"}\`, Like, { extends: "span" });

  // src/css/uplist.css
  var uplist_default = ".up-info-m .up-card-box {\\r\\n    white-space: nowrap;\\r\\n    overflow: auto;\\r\\n}\\r\\n\\r\\n.up-info-m .up-card {\\r\\n    display: inline-block;\\r\\n    margin-top: 10px;\\r\\n}\\r\\n\\r\\n.up-info-m .avatar img {\\r\\n    cursor: pointer;\\r\\n    width: 40px;\\r\\n    height: 40px;\\r\\n    border-radius: 50%;\\r\\n}\\r\\n\\r\\n.up-info-m .avatar {\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.up-info-m .avatar .info-tag {\\r\\n    position: absolute;\\r\\n    background: #fff;\\r\\n    border: 1px solid #fb7299;\\r\\n    border-radius: 2px;\\r\\n    display: inline-block;\\r\\n    font-size: 12px;\\r\\n    color: #fb7299;\\r\\n    padding: 0 3px;\\r\\n    top: -10px;\\r\\n    right: -10px;\\r\\n    white-space: nowrap;\\r\\n}\\r\\n\\r\\n.up-info-m .avatar {\\r\\n    width: 60px;\\r\\n    height: 30px;\\r\\n    display: -ms-flexbox;\\r\\n    display: flex;\\r\\n    -ms-flex-pack: center;\\r\\n    justify-content: center;\\r\\n    -ms-flex-align: start;\\r\\n    align-items: flex-start;\\r\\n}\\r\\n\\r\\n.up-info-m .avatar .name-text {\\r\\n    font-family: PingFangSC-Regular, sans-serif;\\r\\n    line-height: 30px;\\r\\n    color: #222;\\r\\n    word-break: break-all;\\r\\n    overflow: hidden;\\r\\n    text-overflow: ellipsis;\\r\\n    display: -webkit-box;\\r\\n    -webkit-line-clamp: 2;\\r\\n    -webkit-box-orient: vertical;\\r\\n    white-space: nowrap;\\r\\n}\\r\\n\\r\\n.up-info-m .avatar .name-text.is-vip,\\r\\n.up-info-m .avatar .name-text:hover {\\r\\n    color: #fb7299;\\r\\n}\\r\\n\\r\\n.up-info-m .title {\\r\\n    display: block;\\r\\n    font-size: 14px;\\r\\n    margin-right: 80px;\\r\\n    color: #525659;\\r\\n    overflow: hidden;\\r\\n    height: 24px;\\r\\n    font-weight: 400;\\r\\n    padding: 8px 0;\\r\\n}";

  // src/html/av.html
  var av_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8" />\\r\\n    <title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <meta name="keywords"\\r\\n        content="Bilibili,哔哩哔哩,哔哩哔哩动画,哔哩哔哩弹幕网,弹幕视频,B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,二次元,游戏视频,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid,日本动漫,国产动漫,手机游戏,网络游戏,电子竞技,ACG燃曲,ACG神曲,追新番,新番动漫,新番吐槽,巡音,镜音双子,千本樱,初音MIKU,舞蹈MMD,MIKUMIKUDANCE,洛天依原创曲,洛天依翻唱曲,洛天依投食歌,洛天依MMD,vocaloid家族,OST,BGM,动漫歌曲,日本动漫音乐,宫崎骏动漫音乐,动漫音乐推荐,燃系mad,治愈系mad,MAD MOVIE,MAD高燃" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩" />\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/jinkela/videoplay/css/video.0.406cee7878545872b8dfbe73071d665dfb287c67.css" />\\r\\n    <style type="text/css">\\r\\n        #bofqi .player {\\r\\n            width: 980px;\\r\\n            height: 620px;\\r\\n            display: block;\\r\\n        }\\r\\n\\r\\n        @media screen and (min-width:1400px) {\\r\\n\\r\\n            #bofqi .player {\\r\\n                width: 1160px;\\r\\n                height: 720px\\r\\n            }\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container has-menu"></div>\\r\\n    <div id="video-page-app"></div>\\r\\n    <div id="app" data-server-rendered="true"></div>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript">\\r\\n        window.getInternetExplorerVersion = function () {\\r\\n            var e = -1; if ("Microsoft Internet Explorer" == navigator.appName) {\\r\\n                var r = navigator.userAgent;\\r\\n                null != new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(r) && (e = parseFloat(RegExp.\$1))\\r\\n            }\\r\\n            return e\\r\\n        };\\r\\n        function getQueryString(e) {\\r\\n            var r = new RegExp("(^|&)" + e + "=([^&]*)(&|\$)"),\\r\\n                i = window.location.search.substr(1).match(r);\\r\\n            return null != i ? unescape(i[2]) : null\\r\\n        }\\r\\n        window.commentAgent = { seek: t => window.player && window.player.seek(t) };\\r\\n    <\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.qrcode.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/videoplay/manifest.b1b7706abd590dd295794f540f7669a5d8d978b3.js"\\r\\n        crossorigin=""><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/videoplay/vendor.b1b7706abd590dd295794f540f7669a5d8d978b3.js"\\r\\n        crossorigin=""><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/videoplay/video.b1b7706abd590dd295794f540f7669a5d8d978b3.js"\\r\\n        crossorigin=""><\\/script>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/json/sort.txt
  var sort_default = '[{"channelId":2,"name":"番剧","tid":13,"url":"//www.bilibili.com/anime/","icon":"ChannelAnime","sub":[{"subChannelId":20001,"name":"连载动画","tid":33,"route":"serial","url":"//www.bilibili.com/v/anime/serial/"},{"subChannelId":20002,"name":"完结动画","tid":32,"route":"finish","url":"//www.bilibili.com/v/anime/finish"},{"subChannelId":20003,"name":"资讯","tid":51,"route":"information","url":"//www.bilibili.com/v/anime/information/"},{"subChannelId":20004,"name":"官方延伸","tid":152,"route":"offical","url":"//www.bilibili.com/v/anime/offical/"},{"subChannelId":20005,"name":"新番时间表","url":"//www.bilibili.com/anime/timeline/"},{"subChannelId":20006,"name":"番剧索引","url":"//www.bilibili.com/anime/index/"}]},{"channelId":3,"name":"电影","tid":23,"url":"//www.bilibili.com/movie/","icon":"ChannelMovie","sub":[]},{"channelId":4,"name":"国创","tid":167,"url":"//www.bilibili.com/guochuang/","icon":"ChannelGuochuang","sub":[{"subChannelId":40001,"name":"国产动画","tid":153,"route":"chinese","url":"//www.bilibili.com/v/guochuang/chinese/"},{"subChannelId":40002,"name":"国产原创相关","tid":168,"route":"original","url":"//www.bilibili.com/v/guochuang/original/"},{"subChannelId":40003,"name":"布袋戏","tid":169,"route":"puppetry","url":"//www.bilibili.com/v/guochuang/puppetry/"},{"subChannelId":40004,"name":"动态漫·广播剧","tid":195,"route":"motioncomic","url":"//www.bilibili.com/v/guochuang/motioncomic/"},{"subChannelId":40005,"name":"资讯","tid":170,"route":"information","url":"//www.bilibili.com/v/guochuang/information/"},{"subChannelId":40006,"name":"新番时间表","url":"//www.bilibili.com/guochuang/timeline/"},{"subChannelId":40007,"name":"国产动画索引","url":"//www.bilibili.com/guochuang/index/"}]},{"name":"电视剧","channelId":5,"tid":11,"url":"//www.bilibili.com/tv/","type":"first","icon":"ChannelTeleplay","sub":[]},{"name":"综艺","channelId":6,"icon":"ChannelZongyi","url":"//www.bilibili.com/variety/ ","sub":[]},{"name":"纪录片","tid":177,"channelId":7,"url":"//www.bilibili.com/documentary/","icon":"ChannelDocumentary","sub":[]},{"name":"动画","channelId":8,"tid":1,"url":"//www.bilibili.com/v/douga/","icon":"ChannelDouga","sub":[{"subChannelId":80001,"name":"MAD·AMV","route":"mad","tid":24,"url":"//www.bilibili.com/v/douga/mad/"},{"subChannelId":80002,"name":"MMD·3D","route":"mmd","tid":25,"url":"//www.bilibili.com/v/douga/mmd/"},{"subChannelId":80003,"name":"短片·手书·配音","route":"voice","tid":47,"url":"//www.bilibili.com/v/douga/voice/"},{"subChannelId":80004,"name":"手办·模玩","route":"garage_kit","tid":210,"url":"//www.bilibili.com/v/douga/garage_kit/"},{"subChannelId":80005,"name":"特摄","route":"tokusatsu","tid":86,"url":"//www.bilibili.com/v/douga/tokusatsu/"},{"subChannelId":80007,"name":"动漫杂谈","route":"acgntalks","tid":253,"url":"//www.bilibili.com/v/douga/acgntalks/"},{"subChannelId":80006,"name":"综合","route":"other","tid":27,"url":"//www.bilibili.com/v/douga/other/"}]},{"name":"游戏","channelId":11,"tid":4,"url":"//www.bilibili.com/v/game/","icon":"ChannelGame","sub":[{"subChannelId":110001,"name":"单机游戏","route":"stand_alone","tid":17,"url":"//www.bilibili.com/v/game/stand_alone"},{"subChannelId":110002,"name":"电子竞技","route":"esports","tid":171,"url":"//www.bilibili.com/v/game/esports"},{"subChannelId":110003,"name":"手机游戏","route":"mobile","tid":172,"url":"//www.bilibili.com/v/game/mobile"},{"subChannelId":110004,"name":"网络游戏","route":"online","tid":65,"url":"//www.bilibili.com/v/game/online"},{"subChannelId":110005,"name":"桌游棋牌","route":"board","tid":173,"url":"//www.bilibili.com/v/game/board"},{"subChannelId":110006,"name":"GMV","route":"gmv","tid":121,"url":"//www.bilibili.com/v/game/gmv"},{"subChannelId":110007,"name":"音游","route":"music","tid":136,"url":"//www.bilibili.com/v/game/music"},{"subChannelId":110008,"name":"Mugen","route":"mugen","tid":19,"url":"//www.bilibili.com/v/game/mugen"},{"subChannelId":110009,"name":"游戏赛事","url":"//www.bilibili.com/v/game/match/"}]},{"name":"鬼畜","channelId":20,"tid":119,"url":"//www.bilibili.com/v/kichiku/","icon":"ChannelKichiku","sub":[{"subChannelId":200001,"name":"鬼畜调教","route":"guide","tid":22,"url":"//www.bilibili.com/v/kichiku/guide"},{"subChannelId":200002,"name":"音MAD","route":"mad","tid":26,"url":"//www.bilibili.com/v/kichiku/mad"},{"subChannelId":200003,"name":"人力VOCALOID","route":"manual_vocaloid","tid":126,"url":"//www.bilibili.com/v/kichiku/manual_vocaloid"},{"subChannelId":200004,"name":"鬼畜剧场","route":"theatre","tid":216,"url":"//www.bilibili.com/v/kichiku/theatre"},{"subChannelId":200005,"name":"教程演示","route":"course","tid":127,"url":"//www.bilibili.com/v/kichiku/course"}]},{"name":"音乐","channelId":9,"tid":3,"url":"//www.bilibili.com/v/music","icon":"ChannelMusic","sub":[{"subChannelId":90001,"name":"原创音乐","route":"original","url":"//www.bilibili.com/v/music/original","tid":28},{"subChannelId":90002,"name":"翻唱","route":"cover","url":"//www.bilibili.com/v/music/cover","tid":31},{"subChannelId":90005,"name":"演奏","route":"perform","tid":59,"url":"//www.bilibili.com/v/music/perform"},{"subChannelId":90003,"name":"VOCALOID·UTAU","route":"vocaloid","url":"//www.bilibili.com/v/music/vocaloid","tid":30},{"subChannelId":90007,"name":"音乐现场","route":"live","tid":29,"url":"//www.bilibili.com/v/music/live"},{"subChannelId":90006,"name":"MV","route":"mv","tid":193,"url":"//www.bilibili.com/v/music/mv"},{"subChannelId":900011,"name":"乐评盘点","route":"commentary","tid":243,"url":"//www.bilibili.com/v/music/commentary"},{"subChannelId":900012,"name":"音乐教学","route":"tutorial","tid":244,"url":"//www.bilibili.com/v/music/tutorial"},{"subChannelId":90008,"name":"音乐综合","route":"other","tid":130,"url":"//www.bilibili.com/v/music/other"},{"subChannelId":900010,"name":"说唱","url":"//www.bilibili.com/v/rap"}]},{"name":"舞蹈","channelId":10,"tid":129,"url":"//www.bilibili.com/v/dance/","icon":"ChannelDance","sub":[{"subChannelId":100001,"name":"宅舞","route":"otaku","tid":20,"url":"//www.bilibili.com/v/dance/otaku/"},{"subChannelId":100002,"name":"街舞","route":"hiphop","tid":198,"url":"//www.bilibili.com/v/dance/hiphop/"},{"subChannelId":100003,"name":"明星舞蹈","route":"star","tid":199,"url":"//www.bilibili.com/v/dance/star/"},{"subChannelId":100004,"name":"国风舞蹈","route":"china","tid":200,"url":"//www.bilibili.com/v/dance/china/"},{"subChannelId":100007,"name":"手势·网红舞","route":"gestures","tid":255,"url":"//www.bilibili.com/v/dance/gestures/"},{"subChannelId":100005,"name":"舞蹈综合","route":"three_d","tid":154,"url":"//www.bilibili.com/v/dance/three_d/"},{"subChannelId":100006,"name":"舞蹈教程","route":"demo","tid":156,"url":"//www.bilibili.com/v/dance/demo/"}]},{"name":"影视","channelId":25,"tid":181,"url":"//www.bilibili.com/v/cinephile","icon":"ChannelCinephile","sub":[{"subChannelId":250001,"name":"影视杂谈","route":"cinecism","tid":182,"url":"//www.bilibili.com/v/cinephile/cinecism"},{"subChannelId":250002,"name":"影视剪辑","route":"montage","tid":183,"url":"//www.bilibili.com/v/cinephile/montage"},{"subChannelId":250003,"name":"小剧场","route":"shortfilm","tid":85,"url":"//www.bilibili.com/v/cinephile/shortfilm"},{"subChannelId":250004,"name":"预告·资讯","route":"trailer_info","tid":184,"url":"//www.bilibili.com/v/cinephile/trailer_info"}]},{"name":"娱乐","channelId":23,"tid":5,"url":"//www.bilibili.com/v/ent/","icon":"ChannelEnt","sub":[{"subChannelId":230001,"name":"综艺","route":"variety","tid":71,"url":"//www.bilibili.com/v/ent/variety"},{"subChannelId":230003,"name":"娱乐杂谈","route":"talker","tid":241,"url":"//www.bilibili.com/v/ent/talker"},{"subChannelId":230004,"name":"粉丝创作","route":"fans","tid":242,"url":"//www.bilibili.com/v/ent/fans"},{"subChannelId":230002,"name":"明星综合","route":"celebrity","tid":137,"url":"//www.bilibili.com/v/ent/celebrity"}]},{"name":"知识","channelId":12,"tid":36,"url":"//www.bilibili.com/v/knowledge/","icon":"ChannelKnowledge","sub":[{"subChannelId":120001,"name":"科学科普","route":"science","tid":201,"url":"//www.bilibili.com/v/knowledge/science"},{"subChannelId":120002,"name":"社科·法律·心理","route":"social_science","tid":124,"url":"//www.bilibili.com/v/knowledge/social_science"},{"subChannelId":120003,"name":"人文历史","route":"humanity_history","tid":228,"url":"//www.bilibili.com/v/knowledge/humanity_history"},{"subChannelId":120004,"name":"财经商业","route":"business","tid":207,"url":"//www.bilibili.com/v/knowledge/business"},{"subChannelId":120005,"name":"校园学习","route":"campus","tid":208,"url":"//www.bilibili.com/v/knowledge/campus"},{"subChannelId":120006,"name":"职业职场","route":"career","tid":209,"url":"//www.bilibili.com/v/knowledge/career"},{"subChannelId":120007,"name":"设计·创意","route":"design","tid":229,"url":"//www.bilibili.com/v/knowledge/design"},{"subChannelId":120008,"name":"野生技能协会","route":"skill","tid":122,"url":"//www.bilibili.com/v/knowledge/skill"}]},{"name":"科技","channelId":13,"tid":188,"url":"//www.bilibili.com/v/tech/","icon":"ChannelTech","sub":[{"subChannelId":130001,"name":"数码","route":"digital","tid":95,"url":"//www.bilibili.com/v/tech/digital"},{"subChannelId":130002,"name":"软件应用","route":"application","tid":230,"url":"//www.bilibili.com/v/tech/application"},{"subChannelId":130003,"name":"计算机技术","route":"computer_tech","tid":231,"url":"//www.bilibili.com/v/tech/computer_tech"},{"subChannelId":130004,"name":"科工机械","route":"industry","tid":232,"url":"//www.bilibili.com/v/tech/industry"},{"subChannelId":130005,"name":"极客DIY","route":"diy","url":"//www.bilibili.com/v/tech/diy"}]},{"name":"资讯","channelId":21,"tid":202,"url":"//www.bilibili.com/v/information/","icon":"ChannelInformation","sub":[{"subChannelId":210001,"name":"热点","route":"hotspot","tid":203,"url":"//www.bilibili.com/v/information/hotspot"},{"subChannelId":210002,"name":"环球","route":"global","tid":204,"url":"//www.bilibili.com/v/information/global"},{"subChannelId":210003,"name":"社会","route":"social","tid":205,"url":"//www.bilibili.com/v/information/social"},{"subChannelId":210004,"name":"综合","route":"multiple","tid":206,"url":"//www.bilibili.com/v/information/multiple"}]},{"name":"美食","channelId":17,"tid":211,"url":"//www.bilibili.com/v/food","icon":"ChannelFood","sub":[{"subChannelId":170001,"name":"美食制作","route":"make","tid":76,"url":"//www.bilibili.com/v/food/make"},{"subChannelId":170002,"name":"美食侦探","route":"detective","tid":212,"url":"//www.bilibili.com/v/food/detective"},{"subChannelId":170003,"name":"美食测评","route":"measurement","tid":213,"url":"//www.bilibili.com/v/food/measurement"},{"subChannelId":170004,"name":"田园美食","route":"rural","tid":214,"url":"//www.bilibili.com/v/food/rural"},{"subChannelId":170005,"name":"美食记录","route":"record","tid":215,"url":"//www.bilibili.com/v/food/record"}]},{"name":"生活","channelId":16,"tid":160,"url":"//www.bilibili.com/v/life","icon":"ChannelLife","sub":[{"subChannelId":160001,"name":"搞笑","route":"funny","tid":138,"url":"//www.bilibili.com/v/life/funny"},{"subChannelId":160008,"name":"亲子","route":"parenting","tid":254,"url":"//www.bilibili.com/v/life/parenting"},{"subChannelId":160006,"name":"出行","route":"travel","tid":250,"url":"//www.bilibili.com/v/life/travel"},{"subChannelId":160007,"name":"三农","route":"rurallife","tid":251,"url":"//www.bilibili.com/v/life/rurallife"},{"subChannelId":160002,"name":"家居房产","route":"home","tid":239,"url":"//www.bilibili.com/v/life/home"},{"subChannelId":160003,"name":"手工","route":"handmake","tid":161,"url":"//www.bilibili.com/v/life/handmake"},{"subChannelId":160004,"name":"绘画","route":"painting","tid":162,"url":"//www.bilibili.com/v/life/painting"},{"subChannelId":160005,"name":"日常","route":"daily","tid":21,"url":"//www.bilibili.com/v/life/daily"}]},{"name":"汽车","channelId":15,"tid":223,"url":"//www.bilibili.com/v/car","icon":"ChannelCar","sub":[{"subChannelId":150007,"name":"赛车","route":"racing","tid":245,"url":"//www.bilibili.com/v/car/racing"},{"subChannelId":150008,"name":"改装玩车","route":"modifiedvehicle","tid":246,"url":"//www.bilibili.com/v/car/modifiedvehicle"},{"subChannelId":150009,"name":"新能源车","route":"newenergyvehicle","tid":246,"url":"//www.bilibili.com/v/car/newenergyvehicle"},{"subChannelId":150010,"name":"房车","route":"touringcar","tid":248,"url":"//www.bilibili.com/v/car/touringcar"},{"subChannelId":150006,"name":"摩托车","route":"motorcycle","tid":240,"url":"//www.bilibili.com/v/car/motorcycle"},{"subChannelId":150005,"name":"购车攻略","route":"strategy","tid":227,"url":"//www.bilibili.com/v/car/strategy"},{"subChannelId":150001,"name":"汽车生活","route":"life","tid":176,"url":"//www.bilibili.com/v/car/life"}]},{"name":"时尚","channelId":22,"tid":155,"url":"//www.bilibili.com/v/fashion","icon":"ChannelFashion","sub":[{"subChannelId":220001,"name":"美妆护肤","route":"makeup","tid":157,"url":"//www.bilibili.com/v/fashion/makeup"},{"subChannelId":220004,"name":"仿妆cos","route":"cos","tid":252,"url":"//www.bilibili.com/v/fashion/cos"},{"subChannelId":220002,"name":"穿搭","route":"clothing","tid":158,"url":"//www.bilibili.com/v/fashion/clothing"},{"subChannelId":220003,"name":"时尚潮流","route":"trend","tid":159,"url":"//www.bilibili.com/v/fashion/trend"}]},{"name":"运动","channelId":14,"tid":234,"url":"//www.bilibili.com/v/sports","icon":"ChannelSports","sub":[{"subChannelId":140001,"name":"篮球","route":"basketball","tid":235,"url":"//www.bilibili.com/v/sports/basketball"},{"subChannelId":140006,"name":"足球","route":"football","tid":249,"url":"//www.bilibili.com/v/sports/football"},{"subChannelId":140002,"name":"健身","route":"aerobics","tid":164,"url":"//www.bilibili.com/v/sports/aerobics"},{"subChannelId":140003,"name":"竞技体育","route":"athletic","tid":236,"url":"//www.bilibili.com/v/sports/athletic"},{"subChannelId":140004,"name":"运动文化","route":"culture","tid":237,"url":"//www.bilibili.com/v/sports/culture"},{"subChannelId":140005,"name":"运动综合","route":"comprehensive","tid":238,"url":"//www.bilibili.com/v/sports/comprehensive"}]},{"name":"动物圈","channelId":18,"tid":217,"url":"//www.bilibili.com/v/animal","icon":"ChannelAnimal","sub":[{"subChannelId":180001,"name":"喵星人","route":"cat","tid":218,"url":"//www.bilibili.com/v/animal/cat"},{"subChannelId":180002,"name":"汪星人","route":"dog","tid":219,"url":"//www.bilibili.com/v/animal/dog"},{"subChannelId":180007,"name":"小宠异宠","route":"reptiles","tid":222,"url":"//www.bilibili.com/v/animal/reptiles"},{"subChannelId":180004,"name":"野生动物","route":"wild_animal","tid":221,"url":"//www.bilibili.com/v/animal/wild_animal"},{"subChannelId":180008,"name":"动物二创","route":"second_edition","tid":220,"url":"//www.bilibili.com/v/animal/second_edition"},{"subChannelId":180006,"name":"动物综合","route":"animal_composite","tid":75,"url":"//www.bilibili.com/v/animal/animal_composite"}]},{"name":"VLOG","channelId":19,"url":"//www.bilibili.com/v/life/daily/#/530003","icon":"ChannelVlog","sub":[]},{"channelId":160001,"name":"搞笑","route":"stand_alone","tid":138,"icon":"ChannelGaoxiao","url":"//www.bilibili.com/v/life/funny","sub":[]},{"channelId":110001,"name":"单机游戏","route":"stand_alone","tid":17,"icon":"ChannelDanjiyouxi","url":"//www.bilibili.com/v/game/stand_alone","sub":[]},{"channelId":31,"name":"虚拟UP主","icon":"ChannelVtuber","url":"//www.bilibili.com/v/virtual","sub":[]},{"channelId":32,"name":"公益","icon":"ChannelLove","url":"//love.bilibili.com","sub":[]},{"channelId":33,"name":"公开课","icon":"ChannelGongkaike","url":"//www.bilibili.com/mooc","sub":[]}]';

  // src/json/toview.json
  var toview_default = {
    attr: 2,
    count: 100,
    cover: "https://i0.hdslb.com/bfs/archive/a45ef4fcde397247032cf4ce0c8f71815f9e28d0.jpg",
    ctime: 1529021131,
    description: "bilibili moe 2018 动画角色人气大赏日本动画场应援视频播单 / 每天不定时更新最新的一批",
    faved_count: 0,
    favored: 0,
    favorite: false,
    id: 1826036,
    is_favorite: false,
    like_count: 0,
    list: [
      {
        aid: 24883898,
        attribute: 16768,
        cid: 41980488,
        copyright: 1,
        ctime: 1528969754,
        desc: "bilibili moe 2018 动画角色人气大赏日本动画场宣传PV / BGM : No.1 / Editor : @暗猫の祝福  \\n\\n活动地址 https://www.bilibili.com/moe/2018/jp/home\\n\\n了解活动最新动态请关注@哔哩哔哩萌战基",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 191,
        dynamic: "#日本场应援##角色应援##bilibilimoe2018#",
        owner: {
          face: "http://i2.hdslb.com/bfs/face/1e711421fdd158a0cadc1c4351ca19a75ea712ec.jpg",
          mid: 26366366,
          name: "哔哩哔哩活动"
        },
        pages: [
          {
            cid: 41980488,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 191,
            from: "vupload",
            page: 1,
            part: "bilibili moe 2018 动画角色人气大赏 - 日本动画场PV",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/6e7ce18cca1965da52090e96c03c095ee97f43a7.jpg",
        pubdate: 1529121652,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 24883898,
          coin: 30379,
          danmaku: 38599,
          dislike: 0,
          favorite: 29868,
          his_rank: 76,
          like: 18109,
          now_rank: 0,
          reply: 18082,
          share: 12878,
          view: 1072577
        },
        state: 0,
        tid: 24,
        title: "bilibili moe 2018 动画角色人气大赏日本动画场宣传PV",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28854498,
        attribute: 16768,
        cid: 50012938,
        copyright: 1,
        ctime: 1533734369,
        desc: "因为是突然心血来潮的作品,所以也没有特意去找无字幕的片源,直接用了带字幕的。所以中间有一段我添加了部分马赛克。\\n之前已经做过一次关于(Fate/Stay night 宛若天堂)这一条樱线的视频了,但是上一次毕竟是战斗画面为主,所以这一次我决定给樱做一期她为主角的剪辑视频,希望大家可以喜欢。\\nBGM:River Flows in You",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 192,
        dynamic: "#日本场应援2018##AMV##MAD#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/d6c946012742c3c86839fc2caf547a99159009ad.jpg",
          mid: 24626247,
          name: "星火琉璃酱"
        },
        pages: [
          {
            cid: 50012938,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 192,
            from: "vupload",
            page: 1,
            part: "【AMV】樱,你是我喜欢的女孩。",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/dacc8024b48b7cc756b27e2945bd7d7d9cbbc387.jpg",
        pubdate: 1533734369,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28854498,
          coin: 27,
          danmaku: 31,
          dislike: 0,
          favorite: 22,
          his_rank: 0,
          like: 29,
          now_rank: 0,
          reply: 7,
          share: 4,
          view: 4788
        },
        state: 0,
        tid: 24,
        title: "【AMV】樱,你是我喜欢的女孩。",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28854218,
        attribute: 16768,
        cid: 50011454,
        copyright: 1,
        ctime: 1533733783,
        desc: "尼禄殿下好可爱啊,用了前十集的素材。一共30多个唔嗯,有些不能用,用了好长时间剪素材\\n动漫:Fate/EXTRA Last Encore,其实我觉得这番挺好看的,内容也是有点,可能还是和UBW有点差距吧\\nBGM:Unity",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 121,
        dynamic: "#日本场应援2018##新星计划##尼禄#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/67d4c8c9a6d9b58fd5c935047c64cdd3b5cadbef.jpg",
          mid: 14911961,
          name: "抹不去の伤痛"
        },
        pages: [
          {
            cid: 50011454,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 121,
            from: "vupload",
            page: 1,
            part: "FateEXTRA Last Encore - 如今在古老边狱之底(Av18806005,P1)",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/8a213e873515eda27d474f0c9cc31e6c47166cb3.jpg",
        pubdate: 1533733783,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28854218,
          coin: 56,
          danmaku: 47,
          dislike: 0,
          favorite: 96,
          his_rank: 0,
          like: 91,
          now_rank: 0,
          reply: 21,
          share: 28,
          view: 6641
        },
        state: 0,
        tid: 27,
        title: "尼禄殿下世界第一可爱",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28851731,
        attribute: 24704,
        cid: 49951942,
        copyright: 1,
        ctime: 1533733741,
        desc: "米娜桑,大家好!这次趁着B萌赶紧做一波应援视频,希望大家喜欢!btw考虑一下投凛哟~\\n使用素材: Fate/Grand Order, Fate/Stay Night UBW, Fate/Zero, Fate,/Stay Night HF, Fate/Hollow Ataraxia\\n视频类型: AMV/MAD\\nBGM【音乐名】: Illuminate\\nBGM【音乐人】: Minami",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 287,
        dynamic: "#金闪闪##日本场应援2018##卫宫士郎##远坂凛#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/3c3eb61912831b33c83a5924c16d1d17f1ad893c.jpg",
          mid: 44371203,
          name: "呆毛万岁233"
        },
        pages: [
          {
            cid: 49951942,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 287,
            from: "vupload",
            page: 1,
            part: "【Fate:全角色应援:MAD:慢燃】吾等响应汝之召唤而来,众英灵,参上!",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/5cde6c0623ec8701da5ade96425c72d21448bd22.jpg",
        pubdate: 1533733741,
        rights: {
          autoplay: 0,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28851731,
          coin: 139,
          danmaku: 81,
          dislike: 0,
          favorite: 152,
          his_rank: 0,
          like: 141,
          now_rank: 0,
          reply: 47,
          share: 37,
          view: 5948
        },
        state: 0,
        tid: 24,
        title: "【Fate/全角色应援/慢燃/MAD】吾等响应汝之召唤而来,众英灵,参上!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28847039,
        attribute: 16512,
        cid: 49996088,
        copyright: 1,
        ctime: 1533728826,
        desc: "萌萌的小樱~",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 749,
        dynamic: "#日本场应援2018##魔卡少女樱##木之本樱#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/fcafbef391efb9b59978242c27d1907de11a4270.jpg",
          mid: 32452880,
          name: "月下的纯白"
        },
        pages: [
          {
            cid: 49996088,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 749,
            from: "vupload",
            page: 1,
            part: "小樱",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/003c7674aad37e0fa0791e21c2b1c16935132f99.jpg",
        pubdate: 1533728826,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28847039,
          coin: 42,
          danmaku: 10,
          dislike: 0,
          favorite: 19,
          his_rank: 0,
          like: 45,
          now_rank: 0,
          reply: 26,
          share: 9,
          view: 2271
        },
        state: 0,
        tid: 162,
        title: "【绘画过程】木之本樱 封印解除~",
        tname: "绘画",
        videos: 1
      },
      {
        aid: 28845287,
        attribute: 16768,
        cid: 49992801,
        copyright: 1,
        ctime: 1533723329,
        desc: "救救孩子!!请给咔酱投上一票!!!\\n【别问我为什么要用这样的应援我已经彻底放弃剪燃向了_(:з」∠)_】【无cp】\\nBGM:\\nだってまだまだアバンタイトル—觉得爆豪同学特别可爱的轰君和切岛君x【梶裕贵/增田俊树】",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 64,
        dynamic: "#日本场应援2018##爆豪胜己##我的英雄学院#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/4874ce1162dce147670b610aad356272ba23ef1a.jpg",
          mid: 26498497,
          name: "是扑倒不是扑倒"
        },
        pages: [
          {
            cid: 49992801,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 64,
            from: "vupload",
            page: 1,
            part: "【爆豪胜己】可爱的爆豪君(日常吸咔^q^)",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/6bb2a44b5179fc2389b72815f20c08fc227e1a63.jpg",
        pubdate: 1533723329,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28845287,
          coin: 22,
          danmaku: 13,
          dislike: 0,
          favorite: 10,
          his_rank: 0,
          like: 42,
          now_rank: 0,
          reply: 13,
          share: 3,
          view: 1482
        },
        state: -100,
        tid: 24,
        title: "【爆豪胜己】这么可爱的咔不来吸一口吗^q^",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28841791,
        attribute: 16512,
        cid: 49986585,
        copyright: 1,
        ctime: 1533724456,
        desc: "封面源自网络\\r\\n前方高渣....\\r\\n使用素材: 我的英雄学院\\r\\nBGM【音乐名】: Look At Me Now",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 132,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/62c5c0b39cd1f9b559d0eea9083702110abde6b0.jpg",
          mid: 9565447,
          name: "祁延浅"
        },
        pages: [
          {
            cid: 49986585,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 132,
            from: "vupload",
            page: 1,
            part: "秀气的我_bilibili",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/2fde6388863e889fda437507379719ca47228e94.png",
        pubdate: 1533724456,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28841791,
          coin: 70,
          danmaku: 41,
          dislike: 0,
          favorite: 44,
          his_rank: 0,
          like: 100,
          now_rank: 0,
          reply: 29,
          share: 14,
          view: 2163
        },
        state: -100,
        tid: 24,
        title: "【B萌/绿谷出久应援】冲向更遥远的彼方!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28840257,
        attribute: 2113664,
        cid: 49983925,
        copyright: 1,
        ctime: 1533719916,
        desc: "模型:ザビ男:なかむら\\n场景:im8225803:SNowly\\n动作:sm25937215:ゆり\\n镜头:一騎当千(1人用):うぐいす\\nBGM:一騎当千(Luz)\\nMME:AutoLuminous4、Diffusion7:そぼろ",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 209,
        dynamic: "#岸浪白野##日本场应援2018##FATE#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/7dc3c1da46f9d5024b27fc0c880a4c2a66327c16.jpg",
          mid: 16295316,
          name: "岸波玉藻"
        },
        pages: [
          {
            cid: 49983925,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 209,
            from: "vupload",
            page: 1,
            part: "1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/d4eeaf566b61e6c3c32271cbbc51d658402af01b.jpg",
        pubdate: 1533719916,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28840257,
          coin: 4,
          danmaku: 0,
          dislike: 0,
          favorite: 9,
          his_rank: 0,
          like: 30,
          now_rank: 0,
          reply: 8,
          share: 8,
          view: 529
        },
        state: 0,
        tid: 25,
        title: "【FATE MMD】扎比君的一骑当千",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28840256,
        attribute: 16512,
        cid: 49984131,
        copyright: 1,
        ctime: 1533721986,
        desc: "BGM:skillet--hero\\n喜欢的话点个转发,加个关注都是对我最大的支持~",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 188,
        dynamic: "#日本场应援2018##AMV##纯剪辑#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/45b27a346e342f9d92a71c68ec78dac5dd0893b4.jpg",
          mid: 237269440,
          name: "无sol谓"
        },
        pages: [
          {
            cid: 49984131,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 188,
            from: "vupload",
            page: 1,
            part: "未命名项目",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/f9b7ad36badbee092bf05c85e5b1364b2cefc000.jpg",
        pubdate: 1533721986,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28840256,
          coin: 35,
          danmaku: 14,
          dislike: 0,
          favorite: 7,
          his_rank: 0,
          like: 32,
          now_rank: 0,
          reply: 18,
          share: 7,
          view: 858
        },
        state: -100,
        tid: 24,
        title: "「我的英雄学院/AMV」三人共同的意志",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28840249,
        attribute: 16512,
        cid: 49977458,
        copyright: 1,
        ctime: 1533723558,
        desc: "某不知名萌新up,第一次做mad/amv。做的不好请多指教\\nBGM:THERE IS REASON。\\n因为我的天谴之力,一共做了4次,第一次没保存重做,第二次出了致命问题重做,第三次电脑死机重做,第四次电脑卡死只保存了一半......但是游戏人生是我top1,剧场版看哭了40分钟,所以还是坚持做完了·-·\\n播放量要是没超1w,可能我以后就不会做这种视频了,除非游戏人生出第二季→.→...\\n求关注求硬币求推荐求收藏求打赏求转发(๑ • . • ๑)",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 437,
        dynamic: "#日本场应援2018##游戏人生ZERO##游戏人生#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/f7a8cb6818a31566ecb686c334b79c7251385e7d.jpg",
          mid: 69185991,
          name: "邪少年丶"
        },
        pages: [
          {
            cid: 49977458,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 437,
            from: "vupload",
            page: 1,
            part: "最终成品游戏人生zero",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/ab4da65db1a29bb62187a43f4163f84642632ae9.jpg",
        pubdate: 1533723558,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28840249,
          coin: 80,
          danmaku: 23,
          dislike: 0,
          favorite: 52,
          his_rank: 0,
          like: 107,
          now_rank: 0,
          reply: 27,
          share: 29,
          view: 2537
        },
        state: 0,
        tid: 24,
        title: "【游戏人生zero/剧场版/mad】跨越种族的爱情。休比,下次我们一定会赢!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28837429,
        attribute: 16512,
        cid: 49978954,
        copyright: 1,
        ctime: 1533719385,
        desc: "",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 227,
        dynamic: "#日本场应援2018##此花亭奇谭##柚#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/39f667b341cf21827cd7ae81f68da3081934ac82.jpg",
          mid: 97248224,
          name: "bili_97248224"
        },
        pages: [
          {
            cid: 49978954,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 227,
            from: "vupload",
            page: 1,
            part: "周杰伦 - 稻香",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/1e89c1ef6c8a3be7b1585599c8ca418c939d6440.jpg",
        pubdate: 1533719385,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28837429,
          coin: 19,
          danmaku: 3,
          dislike: 0,
          favorite: 18,
          his_rank: 0,
          like: 19,
          now_rank: 0,
          reply: 4,
          share: 8,
          view: 729
        },
        state: 0,
        tid: 24,
        title: "【此花亭奇谭】稻香X此花亭奇谭",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28835367,
        attribute: 16512,
        cid: 49973121,
        copyright: 1,
        ctime: 1533718379,
        desc: "歌曲:魔法少女小圆OPコネクト -歌手:ClariS(网易云有)\\n剪辑软件:PR\\n没找到生肉,也没找到歌词字幕,,好气啊。。。。\\n总之,2018萌战请多多支持小樱,拜托了!!!",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 267,
        dynamic: "#魔卡少女樱##动漫##新人向#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/04a86a7f99fb9506003c13a130134763c283536b.jpg",
          mid: 29543952,
          name: "渡鸦爱德华"
        },
        pages: [
          {
            cid: 49973121,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 267,
            from: "vupload",
            page: 1,
            part: "魔卡少女樱",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/60a588aae46e8ae2e172682ab98a4779b7f5ea87.jpg",
        pubdate: 1533718379,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28835367,
          coin: 48,
          danmaku: 28,
          dislike: 0,
          favorite: 66,
          his_rank: 0,
          like: 102,
          now_rank: 0,
          reply: 53,
          share: 19,
          view: 3232
        },
        state: 0,
        tid: 24,
        title: "【2018 B萌 应援/魔卡少女樱】无论前方有多么大的阻碍,也一定可以越过(用小圆的方式打开小樱)",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28833022,
        attribute: 16512,
        cid: 49966396,
        copyright: 1,
        ctime: 1533715262,
        desc: "《闪耀之海》\\n演唱:染音若蔡\\n作词:冰梓yuri\\n作曲:甄小熊\\nPV:EinsElric\\n封面画师:汐洛琪SHIROKI\\n\\nST声迹配音组《宝石之国》中文配音原创歌。助力宝石之国B萌大人气角色,取得好成绩!\\n网易云:https://music.163.com/#/album?id=71806628\\n5sing:http://5sing.kugou.com/yc/3652162.html\\n\\n微博:@瑷珥-染音若蔡",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 133,
        dynamic: "B萌记得给宝石们投票哦~!支持请多多点赞收藏~!爱你们~!\\nps:配合PV看会感觉到了不一样的东西!\\n《闪耀之海》\\n演唱:@瑷珥-染音若蔡\\n作词:@冰梓yuri\\n作曲:甄小熊\\nPV:@EinsElric\\n封面画师:@汐洛琪SHIROKI\\n#宝石之国##染音若蔡##磷叶石##原创歌#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/dc14daced5b61f985759fd931980f43f7605ace1.jpg",
          mid: 215210,
          name: "瑷珥-染音若蔡"
        },
        pages: [
          {
            cid: 49966396,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 133,
            from: "vupload",
            page: 1,
            part: "118【染音若蔡】闪耀之海【宝石之国 原创歌】_1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/531a0b243f53ab33b854ecd8a5ea72d8f7f8fc2d.jpg",
        pubdate: 1533715262,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28833022,
          coin: 347,
          danmaku: 42,
          dislike: 0,
          favorite: 377,
          his_rank: 0,
          like: 656,
          now_rank: 0,
          reply: 63,
          share: 41,
          view: 6559
        },
        state: 0,
        tid: 28,
        title: "【染音若蔡】你还记得宝石之国那闪耀之海吗",
        tname: "原创音乐",
        videos: 1
      },
      {
        aid: 28831588,
        attribute: 16512,
        cid: 49967939,
        copyright: 1,
        ctime: 1533715661,
        desc: "智乃应援视频第二弹终于肝出来了!!由于是两天肝出来的,有一半的镜头有重复,但看点完全是两个看点!希望大家多多支持智乃!!!emmm也希望智乃能比伊莉雅的票高!!\\nbgm:光吉猛修 - 天国と地獄",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 83,
        dynamic: "智乃应援视频第二弹终于肝出来了!!由于是两天肝出来的,有一半的镜头有重复,但看点完全是两个看点!希望大家多多支持智乃!!!emmm也希望智乃能比伊莉雅的票高!#日本场应援2018##bilibili moe##请问您今天要来点兔子吗??##香风智乃##新星计划#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/7a9e7d5d792c853f6adeb262ebabf61d59e6cf0a.jpg",
          mid: 11354330,
          name: "凌云Chino"
        },
        pages: [
          {
            cid: 49967939,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 83,
            from: "vupload",
            page: 1,
            part: "老婆!你有毒!",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/bd95d3672b7030d7ad33a607ac74d15088940d1e.jpg",
        pubdate: 1533715661,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28831588,
          coin: 52,
          danmaku: 9,
          dislike: 0,
          favorite: 27,
          his_rank: 0,
          like: 58,
          now_rank: 0,
          reply: 67,
          share: 15,
          view: 1866
        },
        state: 0,
        tid: 24,
        title: "【欢乐向/智乃应援】老婆!你有毒!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28831178,
        attribute: 16768,
        cid: 49964130,
        copyright: 1,
        ctime: 1533715825,
        desc: "新人渣作,素材和音乐等方面有很大不足,请大家多多见谅,欢迎大家的批评指教。\\n封面ID64099009",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 142,
        dynamic: "#AMV##新人向##纯剪辑",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/021b691a4de5c69f85c97b0745481eb092695131.jpg",
          mid: 23033971,
          name: "漫雪凛冬"
        },
        pages: [
          {
            cid: 49964130,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 142,
            from: "vupload",
            page: 1,
            part: "我的视频",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/448a64ab80ab613b97a0f6661df9cd21e2154cf5.jpg",
        pubdate: 1533718392,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28831178,
          coin: 10,
          danmaku: 1,
          dislike: 0,
          favorite: 4,
          his_rank: 0,
          like: 14,
          now_rank: 0,
          reply: 10,
          share: 7,
          view: 689
        },
        state: 0,
        tid: 24,
        title: "绚烂如樱,尘世似雪",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28830153,
        attribute: 16768,
        cid: 49964529,
        copyright: 1,
        ctime: 1533714855,
        desc: "做完这个视频后B站暂时不会再发布新视频了,工作重心转移到自己的学业和微博上,说不出为什么就是不想再这样参加萌战了,但无论如何,智乃加油吧,大家加油吧。",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 299,
        dynamic: "#日本场应援2018##香风智乃##二次元# 大家加油",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/5bcbe2e796416996929cc225b57f252ef2772fa8.jpg",
          mid: 31895977,
          name: "Andy安笛"
        },
        pages: [
          {
            cid: 49964529,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 299,
            from: "vupload",
            page: 1,
            part: "Last",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/41c200994248d6f491786fe4753bf29049f2e893.jpg",
        pubdate: 1533714855,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28830153,
          coin: 25,
          danmaku: 0,
          dislike: 0,
          favorite: 20,
          his_rank: 0,
          like: 32,
          now_rank: 0,
          reply: 18,
          share: 11,
          view: 3325
        },
        state: 0,
        tid: 24,
        title: "【Moe2018应援/退圈纪念/点兔/香风智乃】CONTINUE....?",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28829710,
        attribute: 16512,
        cid: 49965171,
        copyright: 1,
        ctime: 1533715229,
        desc: "主要内容为纳萨力克大坟墓目前登场的领域守护者\\nBGM:鏡音レン,mothy - 悪ノ召使\\n欢迎加入UP的粉丝群:237213911",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 299,
        dynamic: "#不死者之王##骨傲天##Overlord##新星计划#\\n主要内容为纳萨力克大坟墓目前登场的领域守护者\\nBGM:鏡音レン,mothy - 悪ノ召使\\n欢迎加入UP的粉丝群:237213911",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/a4cbc140157251afb969023ada66e6d7b084bf6e.jpg",
          mid: 4021955,
          name: "红莲妖"
        },
        pages: [
          {
            cid: 49965171,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 299,
            from: "vupload",
            page: 1,
            part: "领域守护者",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/b4986d507dc65cf0222f2b1d40d35a640ac1e757.jpg",
        pubdate: 1533715229,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28829710,
          coin: 41,
          danmaku: 26,
          dislike: 0,
          favorite: 24,
          his_rank: 0,
          like: 82,
          now_rank: 0,
          reply: 21,
          share: 1,
          view: 4222
        },
        state: 0,
        tid: 27,
        title: "【瞎考剧】Overlord:领域守护者",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28826330,
        attribute: 16512,
        cid: 49957386,
        copyright: 1,
        ctime: 1533710501,
        desc: "·自制,2018b萌日本场贞德应援作品\\n·草稿风,渣上色,轻喷……\\n·BGM:自伤无色\\n·无cp向,请勿ky,一起愉快的食用\\n·求硬币,收藏,关注( ´・◡・`)",
        dimension: {
          height: 1072,
          rotate: 0,
          width: 1520
        },
        duration: 105,
        dynamic: "#日本场应援2018##fgo##贞德应援#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/2f787c2dcafdd2d0772b3564bd772ab17bd83633.jpg",
          mid: 5825627,
          name: "Great乱舞"
        },
        pages: [
          {
            cid: 49957386,
            dimension: {
              height: 1072,
              rotate: 0,
              width: 1520
            },
            duration: 105,
            from: "vupload",
            page: 1,
            part: "乐秀视频第12部_20180808133443914",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/4bb5318d9c5b1654d25ecca194170fe4badeb03a.jpg",
        pubdate: 1533710501,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28826330,
          coin: 323,
          danmaku: 37,
          dislike: 0,
          favorite: 501,
          his_rank: 0,
          like: 363,
          now_rank: 0,
          reply: 56,
          share: 42,
          view: 6674
        },
        state: 0,
        tid: 47,
        title: "【FGO手书】这样的我生存于世",
        tname: "短片·手书·配音",
        videos: 1
      },
      {
        aid: 28826083,
        attribute: 16768,
        cid: 49956973,
        copyright: 1,
        ctime: 1533711389,
        desc: "因果流转,人总得靠其他人的帮助才能生活下去,所以总有一天,请你去帮助其他人吧。  阿万音铃羽",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 59,
        dynamic: "#日本场应援2018##命运石之门##命运石之门0#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/9d9a503bc52be6f408910ea0b8aba6653bb018d8.jpg",
          mid: 7583781,
          name: "素晴硝子"
        },
        pages: [
          {
            cid: 49956973,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 59,
            from: "vupload",
            page: 1,
            part: "翎羽1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/2965363a0f23ab4fae38481e08032f2a91f33078.jpg",
        pubdate: 1533711389,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28826083,
          coin: 85,
          danmaku: 1,
          dislike: 0,
          favorite: 32,
          his_rank: 0,
          like: 101,
          now_rank: 0,
          reply: 36,
          share: 18,
          view: 1374
        },
        state: 0,
        tid: 27,
        title: "【应援】铃羽莫比乌斯的跃迁",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28825682,
        attribute: 16768,
        cid: 49824582,
        copyright: 1,
        ctime: 1533708951,
        desc: "-",
        dimension: {
          height: 1440,
          rotate: 0,
          width: 2560
        },
        duration: 106,
        dynamic: "#日本场应援2018##木之本樱##魔卡少女樱#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/bed3035d9ac8ef3a8d4428551110a1f061ffc932.jpg",
          mid: 3651600,
          name: "咕大福"
        },
        pages: [
          {
            cid: 49824582,
            dimension: {
              height: 1440,
              rotate: 0,
              width: 2560
            },
            duration: 106,
            from: "vupload",
            page: 1,
            part: "【木之本樱B萌应援】燃向踩点混剪,小樱今天就告诉你什么是魔法少女\\\\(✨∇✨)\\\\",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/ffe6068e6cf665e2bfdbc7d88bda39312d13d196.jpg",
        pubdate: 1533708951,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28825682,
          coin: 51,
          danmaku: 37,
          dislike: 0,
          favorite: 73,
          his_rank: 0,
          like: 119,
          now_rank: 0,
          reply: 32,
          share: 25,
          view: 3764
        },
        state: 0,
        tid: 183,
        title: "【木之本樱B萌应援】燃向踩点混剪,小樱今天就告诉你什么是魔法少女(✨∇✨)",
        tname: "影视剪辑",
        videos: 1
      },
      {
        aid: 28822944,
        attribute: 2113920,
        cid: 49952983,
        copyright: 1,
        ctime: 1533709292,
        desc: "各位好我是冥香。这个不出意外可能是天草在参加本届B萌期间我会做的最后一个应援视频。\\r\\n这次改成适用持刀的动作费了好长时间……如果觉得效果好,也不用给我投币,请给天草投票xxxxxxxxxxx\\r\\n\\r\\n总而言之本周六天草对小太阳的32进16,希望大家支持天草!虽然我也很喜欢小太阳但内战就是这样了!!",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 201,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/40d60aa15ac21ed3f8f0a13aac77d176094e4e8f.jpg",
          mid: 422673,
          name: "冥香"
        },
        pages: [
          {
            cid: 49952983,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 201,
            from: "vupload",
            page: 1,
            part: "moe3",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/3726c6fe26cf6b0e39b45f62f3701abccb49a293.png",
        pubdate: 1533709292,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28822944,
          coin: 50,
          danmaku: 5,
          dislike: 0,
          favorite: 51,
          his_rank: 0,
          like: 55,
          now_rank: 0,
          reply: 13,
          share: 13,
          view: 1100
        },
        state: 0,
        tid: 25,
        title: "【B萌2018日本场应援】[A]ddiction【天草四郎】【动作改变】",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28821884,
        attribute: 16512,
        cid: 49951385,
        copyright: 1,
        ctime: 1533707868,
        desc: "这次做了好长时间哦。\\r\\n素材:魔法少女伊莉雅雪下的誓言,Fate/Stay Night06版,Fate/Stay Night UBW版,Fate/Stay Night HF版\\r\\n音乐:Flower Dance",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 254,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/1d3318128de6a4d2164cd37e43f4ad45222fe98b.jpg",
          mid: 175795512,
          name: "我是笔帽"
        },
        pages: [
          {
            cid: 49951385,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 254,
            from: "vupload",
            page: 1,
            part: "第14话 理想的尽头_高清_3",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/84a5b2d3a3e098a8db0ddc0326bee4603a88be44.png",
        pubdate: 1533707868,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28821884,
          coin: 23,
          danmaku: 11,
          dislike: 0,
          favorite: 35,
          his_rank: 0,
          like: 39,
          now_rank: 0,
          reply: 9,
          share: 12,
          view: 2179
        },
        state: 0,
        tid: 24,
        title: "【Fate/卫宫士郎应援】无论发生什么,我也不会后悔!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28820064,
        attribute: 2113664,
        cid: 49946360,
        copyright: 1,
        ctime: 1533705696,
        desc: "模型:衛宮士郎:ごまもりは流れゆく/遠坂凛、間桐桜、ぐだお:珠華(しゅか)/セイバー:ribbondog/ネロ・クラウディウス:あかね/玉藻の前、ザビ男:なかむら/ザビ子:1010浣/エミヤ、クーフーリン:ちょビ玉/ギルガメッシュ:ひどく泰平化されたオティー\\n场景:月面ステージ、月面低軌道ステージ:Tansoku102cm-短足沼地人\\n动作/镜头:Thriller:DJRocket\\nBGM:Thriller(Michael Jackson)\\nMME:Diffusion7:そぼろ",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 128,
        dynamic: "#THRILLER##FATE##日本场应援2018#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/7dc3c1da46f9d5024b27fc0c880a4c2a66327c16.jpg",
          mid: 16295316,
          name: "岸波玉藻"
        },
        pages: [
          {
            cid: 49946360,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 128,
            from: "vupload",
            page: 1,
            part: "2",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/3103e49ef8b92433c74cd86b58ebb8482bde0046.jpg",
        pubdate: 1533705696,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28820064,
          coin: 27,
          danmaku: 58,
          dislike: 0,
          favorite: 71,
          his_rank: 0,
          like: 93,
          now_rank: 0,
          reply: 45,
          share: 25,
          view: 2953
        },
        state: 0,
        tid: 25,
        title: "【FATE MMD】Thriller",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28819794,
        attribute: 16512,
        cid: 49945412,
        copyright: 1,
        ctime: 1533705933,
        desc: "视频类型: 其他\\n相关题材: OVERLORD;报菜名\\n简介: 老骨头:我的那萨里克原来还有说相声的女仆!?\\n贯口:相声中常见的表现形式,\\n贯是一气呵成,一贯到底的意思。",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 147,
        dynamic: "视频类型: 其他\\n相关题材: OVERLORD;报菜名\\n简介: 老骨头:我的那萨里克原来还有说相声的女仆!?\\n贯口:相声中常见的表现形式,\\n贯是一气呵成,一贯到底的意思。",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/0901945fce57e13d89b3d941330ab89a10cd9ebd.jpg",
          mid: 4159782,
          name: "养耗子防猫"
        },
        pages: [
          {
            cid: 49945412,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 147,
            from: "vupload",
            page: 1,
            part: "goodgang",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/329994b5fecf7222c05586036ff4e634d0c5c97e.jpg",
        pubdate: 1533705933,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28819794,
          coin: 84,
          danmaku: 45,
          dislike: 0,
          favorite: 34,
          his_rank: 0,
          like: 114,
          now_rank: 0,
          reply: 34,
          share: 19,
          view: 8210
        },
        state: 0,
        tid: 27,
        title: "【OVERLORD】老骨:我请您吃饭..",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28819726,
        attribute: 16512,
        cid: 49943436,
        copyright: 1,
        ctime: 1533705782,
        desc: "大家如果观后感觉不错,有劳点个推荐赞一下吧,小透明up主在B站生存艰难,没有推荐就没有播放量,拜托各位了,十分感谢!\\n新作指路 ——→ 鬼灯不同造型帅气瞬间,av30505048 :【踩点高燃】鬼灯:无所不能,瞬间切换!白泽:笑瘫!鬼灯百变造型帅气瞬间剪辑,求推荐哇!\\n在av28147879里,白泽被鬼灯一顿狂扁,弹幕和评论中不少老中医粉纷纷表达心疼。为了活命,up主做了新的剪辑。\\n这次,换白泽来折腾鬼灯!虐啊——!从头到尾,鬼灯被安排得明明白白。题目为《欲胜鬼灯,惟可用情》。“胜”改为“虐”后,情,就是",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 229,
        dynamic: "本视频主题:鬼灯可爱~(误......)\\n身为一只上亿岁的老神兽,白泽反虐的方式,自然与鬼灯不同。\\n鬼灯战力爆表,名贯三界,遇事属他拎得清,总能找到最适宜有效的解决方法。虽然行事和表情令人生怖,但威严下亦有对他人尊重、体恤与守护的心意。\\n这样的人物,却反常且别扭地,总和非奸非恶的白泽过不去。\\n可能鬼灯自己也没有发觉内心真实的情感吧。\\n难以察觉的情感,即本视频主题。\\n#鬼灯的冷彻# #白泽# #鬼灯# #Bilibili Moe# #日本场应援2018# #剪辑#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/86d74a90ee6c2b729392bcb9d6d6a954f7f0ae26.jpg",
          mid: 2609880,
          name: "树狸饭堂"
        },
        pages: [
          {
            cid: 49943436,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 229,
            from: "vupload",
            page: 1,
            part: "白泽鬼灯甜折腾720P",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/204887868346b795c004d55cf4678fbf5dea898f.jpg",
        pubdate: 1533705782,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28819726,
          coin: 1267,
          danmaku: 218,
          dislike: 0,
          favorite: 1828,
          his_rank: 0,
          like: 2122,
          now_rank: 0,
          reply: 272,
          share: 138,
          view: 39315
        },
        state: 0,
        tid: 27,
        title: "【HE】换白泽来虐鬼灯!鬼灯:被安排得明明白白...原台词重塑甜向剧情",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28819080,
        attribute: 16512,
        cid: 49943054,
        copyright: 1,
        ctime: 1533702750,
        desc: "字幕来源/应援文:半翅雀@半翅雀\\n票根来源:UP主自己\\n让我们迎接各位刀回家,他们在我们心里是最棒的\\n欢迎各位婶婶加入刀剑乱舞B萌应援群\\n群号:773458796",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1200
        },
        duration: 238,
        dynamic: "#日本场应援2018##刀剑乱舞##鹤丸国永#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/2e3e8bcedcbcb6abcfdf00cca6049d5345d0da58.jpg",
          mid: 19505617,
          name: "夜雨月落"
        },
        pages: [
          {
            cid: 49943054,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1200
            },
            duration: 238,
            from: "vupload",
            page: 1,
            part: "【墨染瑶】【刀剑乱舞B萌应援】刀剑乱舞2018 Bilibili Moe 日漫场送别",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/7149b35ee1df51de1d8dfbd88f7a77e4a11e3f4e.jpg",
        pubdate: 1533702750,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28819080,
          coin: 13,
          danmaku: 1,
          dislike: 0,
          favorite: 12,
          his_rank: 0,
          like: 18,
          now_rank: 0,
          reply: 19,
          share: 14,
          view: 559
        },
        state: 0,
        tid: 47,
        title: "【墨染瑶】【刀剑乱舞B萌应援】刀剑乱舞2018 Bilibili Moe 日漫场送别",
        tname: "短片·手书·配音",
        videos: 1
      },
      {
        aid: 28810607,
        attribute: 16768,
        cid: 49922234,
        copyright: 1,
        ctime: 1533696555,
        desc: "番名:《DARLING in the FRANXX》\\nBGM:日剧产科医生鸿鸟的主题曲《あなたがここにいて抱きしめることができるなら》    from  miwa\\n第二发了,做完就感觉比上次工作量大了很多,很幸运歌不算很难,对我这个萌新比较友好\\n喜欢我的视频别忘了点赞,投币,收藏,关注,分享给你的朋友。b萌02加油!02赛高!让这个世界给这个女孩一丝温暖吧!\\n敏娜桑!!!多谢了!!!    \\n最后祝02在b萌取得好成绩",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1440
        },
        duration: 357,
        dynamic: "#日本场应援2018##bilibili moe##动画#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/96c43c12e194c5cc95e86a624099da01dd309b9f.jpg",
          mid: 29459594,
          name: "KLArkalin阿卡林"
        },
        pages: [
          {
            cid: 49922234,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1440
            },
            duration: 357,
            from: "vupload",
            page: 1,
            part: "二期成品字幕_2",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/98f22b1956f8f68355e2b9db0c127c03c90c16c3.jpg",
        pubdate: 1533697364,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28810607,
          coin: 252,
          danmaku: 82,
          dislike: 0,
          favorite: 179,
          his_rank: 0,
          like: 224,
          now_rank: 0,
          reply: 141,
          share: 41,
          view: 3341
        },
        state: 0,
        tid: 24,
        title: "【DitF/02应援/催泪向】只要能将眼前的你拥入怀中,我别无所求",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28805234,
        attribute: 16512,
        cid: 49913077,
        copyright: 1,
        ctime: 1533691390,
        desc: "第一次做amv也是费了一番心血\\n从文案 剪辑 后期\\n一共花了大概一个星期吧\\n其中偷懒过 爆肝过\\n苦想过 也欣喜过\\n用自己微弱的力量给薇尔莉特应援\\n薇尔莉特 冲鸭!!!!!!!!!!!!!",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 208,
        dynamic: "#日本场应援2018##AMV##新人向#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/d234685696aeb25f42bf096e619e0e8fd1fa69e0.jpg",
          mid: 85985833,
          name: "安少目"
        },
        pages: [
          {
            cid: 49913077,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 208,
            from: "vupload",
            page: 1,
            part: "08_3",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/bfe2df5b1183b4022f355b88a7eef61d35db9478.jpg",
        pubdate: 1533691390,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28805234,
          coin: 52,
          danmaku: 23,
          dislike: 0,
          favorite: 15,
          his_rank: 0,
          like: 56,
          now_rank: 0,
          reply: 29,
          share: 8,
          view: 903
        },
        state: -100,
        tid: 24,
        title: "【AMV/紫罗兰】一个人如其名的书记人偶 一段扣人心弦的寻爱之旅",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28804750,
        attribute: 16512,
        cid: 49915214,
        copyright: 1,
        ctime: 1533690428,
        desc: "( ・ˍ・) (・ˍ・*)",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1080
        },
        duration: 231,
        dynamic: "#日本场应援2018##我的英雄学院##绿谷出久#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/46877cdaa4023321d113153564fd97e4b620127c.jpg",
          mid: 25328929,
          name: "SWINGNOW"
        },
        pages: [
          {
            cid: 49915214,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1080
            },
            duration: 231,
            from: "vupload",
            page: 1,
            part: "合成 1_1_x264",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/099048695bcba2fd6ba0075269fd549f1105a74b.jpg",
        pubdate: 1533690428,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28804750,
          coin: 4,
          danmaku: 13,
          dislike: 0,
          favorite: 5,
          his_rank: 0,
          like: 25,
          now_rank: 0,
          reply: 16,
          share: 1,
          view: 944
        },
        state: -100,
        tid: 24,
        title: "【我英应援】逆战",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28803085,
        attribute: 16512,
        cid: 49912292,
        copyright: 1,
        ctime: 1533687448,
        desc: "不要收藏,不要硬币,要脸。\\r\\n啊……太菜了……剪了半天弄了个什么出来……留个黑历史在这儿以后拿来嘲笑一下自己。",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 159,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/77a572f604a652b2b73432127f4191d8354970ef.jpg",
          mid: 43971264,
          name: "烟唐秋豪丶"
        },
        pages: [
          {
            cid: 49912292,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 159,
            from: "vupload",
            page: 1,
            part: "磷叶石终稿",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/d2747e03786090bf318f4eb6c3916fd8c332a017.png",
        pubdate: 1533687448,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28803085,
          coin: 28,
          danmaku: 4,
          dislike: 0,
          favorite: 39,
          his_rank: 0,
          like: 45,
          now_rank: 0,
          reply: 25,
          share: 9,
          view: 1201
        },
        state: 0,
        tid: 24,
        title: "【宝石之国AMV】法斯:我该如何改变?",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28802665,
        attribute: 16768,
        cid: 49911644,
        copyright: 1,
        ctime: 1533686451,
        desc: "8月6日,与人梭哈莓反杀,惜败\\r\\n素材:DARLING in the FRANXX\\r\\nBGM:Take me hand  - DAISHI DANCE",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 262,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/28e3b7964a7a25462350583a45ecfb57883aebc5.jpg",
          mid: 3127528,
          name: "空耳狂魔"
        },
        pages: [
          {
            cid: 49911644,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 262,
            from: "vupload",
            page: 1,
            part: "序列 01_24",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/e90fd9a48797ce034fde2d885116b0c86cf6aefc.png",
        pubdate: 1533686451,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28802665,
          coin: 4015,
          danmaku: 468,
          dislike: 0,
          favorite: 3102,
          his_rank: 0,
          like: 3422,
          now_rank: 0,
          reply: 332,
          share: 756,
          view: 62078
        },
        state: 0,
        tid: 24,
        title: "【02应援】你一票我一票,02今晚就出道",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28797741,
        attribute: 16512,
        cid: 49901368,
        copyright: 1,
        ctime: 1533675012,
        desc: "Emmmmmmm白纸up没技术没生肉没智商,但是(我永远喜欢田所惠.jpg)",
        dimension: {
          height: 576,
          rotate: 0,
          width: 720
        },
        duration: 238,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/59dee61bb5022c7fa331c3ffb8177b4e6910e6f2.jpg",
          mid: 298019774,
          name: "Mztty"
        },
        pages: [
          {
            cid: 49901368,
            dimension: {
              height: 576,
              rotate: 0,
              width: 720
            },
            duration: 238,
            from: "vupload",
            page: 1,
            part: "田所惠",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/91f9a1af07a609e94fb7ac2c82816deacd4e90b7.jpg",
        pubdate: 1533675012,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28797741,
          coin: 4,
          danmaku: 0,
          dislike: 0,
          favorite: 0,
          his_rank: 0,
          like: 1,
          now_rank: 0,
          reply: 1,
          share: 2,
          view: 332
        },
        state: -100,
        tid: 24,
        title: "【食戟之灵】感谢你出现在我的身边",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28797730,
        attribute: 16512,
        cid: 49901363,
        copyright: 1,
        ctime: 1533675022,
        desc: "时间飞快的流逝,唯独现在,我有一种想对爱因斯坦发牢骚的心情,冈部,时间根据每个人的主观感受,既会变长,也会变短,相对论真是既浪漫又伤感的东西呢。——牧濑红莉栖",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 150,
        dynamic: "#日本场应援2018##命运石之门##MAD#时间飞快的流逝,唯独现在,我有一种想对爱因斯坦发牢骚的心情,冈部,时间根据每个人的主观感受,既会变长,也会变短,相对论真是既浪漫又伤感的东西呢。——牧濑红莉栖",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/d7018376ff9e712c03a34f6d4e77c247b6a2ba75.jpg",
          mid: 22044759,
          name: "丶牧濑红莉牺"
        },
        pages: [
          {
            cid: 49901363,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 150,
            from: "vupload",
            page: 1,
            part: "命运石之门.amv",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/a9d7ad25f84f34abcdd32d200fb9b7a9e7986462.jpg",
        pubdate: 1533675022,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28797730,
          coin: 89,
          danmaku: 3,
          dislike: 0,
          favorite: 37,
          his_rank: 0,
          like: 73,
          now_rank: 0,
          reply: 32,
          share: 8,
          view: 1369
        },
        state: 0,
        tid: 24,
        title: "【牧濑红莉栖应援】穿越世界线,与你相遇,仅此而已",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28796831,
        attribute: 16512,
        cid: 49900181,
        copyright: 1,
        ctime: 1533678023,
        desc: "做了16天的视频,可是食戟全员已回家,但128强仍然值得骄傲。\\n素材:食戟之灵\\nBGM:Black Rail\\n参考了一个黑契的视频:av3219374,是一个良作",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 137,
        dynamic: "#日本场应援2018##食戟之灵##MAD#欢迎食戟全员回家,招待不周",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/19c9dc8a6e28c4c570c16733599492f0503ea7c3.jpg",
          mid: 20443161,
          name: "Hope豪侠"
        },
        pages: [
          {
            cid: 49900181,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 137,
            from: "vupload",
            page: 1,
            part: "食戟之灵应援视频2_1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/3048dddd60221bdfe0e6002e15dbe821e078ff50.jpg",
        pubdate: 1533693611,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28796831,
          coin: 37,
          danmaku: 3,
          dislike: 0,
          favorite: 16,
          his_rank: 0,
          like: 25,
          now_rank: 0,
          reply: 17,
          share: 4,
          view: 859
        },
        state: 0,
        tid: 24,
        title: "【接全员回家】我的食戟,不,是我们的食戟",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28795012,
        attribute: 2113920,
        cid: 49887724,
        copyright: 1,
        ctime: 1533671812,
        desc: "BGM:ONE OK ROCK -The beginning\\n素材:fate  进击的巨人 一击男  小英雄 \\n上一次做的很多小伙伴说不够好,BGM不搭什么的,这次就重新做了一遍,希望大家会喜欢",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 294,
        dynamic: "#日本场应援2018##MAD##AMV#这次重新做了一版,希望会让大家满意",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/7c6d2f48e51eb4849fde10975b47f9fddbcb8373.jpg",
          mid: 113630734,
          name: "我就是BB机啊"
        },
        pages: [
          {
            cid: 49887724,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 294,
            from: "vupload",
            page: 1,
            part: "爱剪辑-我的信念AMV_clip",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/e70a5139253a8de2c78dce317a2f237d30fbeba5.jpg",
        pubdate: 1533671812,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28795012,
          coin: 78,
          danmaku: 18,
          dislike: 0,
          favorite: 101,
          his_rank: 0,
          like: 80,
          now_rank: 0,
          reply: 29,
          share: 27,
          view: 3798
        },
        state: 0,
        tid: 24,
        title: "【AMV】因为背负着信念才不会甘愿认输!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28794117,
        attribute: 16512,
        cid: 49894425,
        copyright: 1,
        ctime: 1533671090,
        desc: "bgm--卡路里",
        dimension: {
          height: 576,
          rotate: 0,
          width: 720
        },
        duration: 324,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/6f15a7a5df1658f1fe0bdb79c0ca729672556f5c.jpg",
          mid: 211720194,
          name: "珠珠珠珠珠珠玉"
        },
        pages: [
          {
            cid: 49894425,
            dimension: {
              height: 576,
              rotate: 0,
              width: 720
            },
            duration: 162,
            from: "vupload",
            page: 1,
            part: "画面有问题对不起呜呜呜",
            vid: "",
            weblink: ""
          },
          {
            cid: 50379376,
            dimension: {
              height: 576,
              rotate: 0,
              width: 720
            },
            duration: 162,
            from: "vupload",
            page: 2,
            part: "画面调整啦,直接看这个就行",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/733e426e0c3d5221c117fe7a4e6d2c3309389a18.jpg",
        pubdate: 1533671090,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28794117,
          coin: 778,
          danmaku: 273,
          dislike: 0,
          favorite: 1258,
          his_rank: 0,
          like: 1237,
          now_rank: 0,
          reply: 266,
          share: 438,
          view: 32021
        },
        state: 0,
        tid: 27,
        title: "爱过,再见。",
        tname: "综合",
        videos: 2
      },
      {
        aid: 28793582,
        attribute: 16512,
        cid: 49893323,
        copyright: 1,
        ctime: 1533675084,
        desc: "爆豪胜己,粗中有细\\n话不多说,西内为敬\\n西内!",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 350,
        dynamic: "#日本场应援2018##我的英雄学院##爆豪胜己#西内!",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/863cbca4ad7d93581d7c2fc382da6bb66e4a74e9.jpg",
          mid: 22701238,
          name: "Hello-Newworld"
        },
        pages: [
          {
            cid: 49893323,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 350,
            from: "vupload",
            page: 1,
            part: "爆豪",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/60ae2e49ebfc28a60447adcd46f2bc6833336411.jpg",
        pubdate: 1533675083,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28793582,
          coin: 22,
          danmaku: 7,
          dislike: 0,
          favorite: 24,
          his_rank: 0,
          like: 56,
          now_rank: 0,
          reply: 0,
          share: 7,
          view: 1552
        },
        state: -100,
        tid: 24,
        title: "【爆豪胜己】为了成为No.1的英雄!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28792753,
        attribute: 16768,
        cid: 49891825,
        copyright: 1,
        ctime: 1533666186,
        desc: "喜欢还请点个推荐,就是那个大拇指,点个关注,收藏硬币!谢谢各位支持!",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 41,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/19626abafb253b1864026aaa4a5c86d150262df1.jpg",
          mid: 9253594,
          name: "拔旗"
        },
        pages: [
          {
            cid: 49891825,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 41,
            from: "vupload",
            page: 1,
            part: "卡酱1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/477bea426007d003a8e02e75ea82994dcef1c329.png",
        pubdate: 1533666186,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28792753,
          coin: 27,
          danmaku: 17,
          dislike: 0,
          favorite: 84,
          his_rank: 0,
          like: 225,
          now_rank: 0,
          reply: 54,
          share: 11,
          view: 8421
        },
        state: -100,
        tid: 22,
        title: "【旗子】爆豪:啊?啊啊?啊啊啊?诶啊啊啊?!",
        tname: "鬼畜调教",
        videos: 1
      },
      {
        aid: 28792602,
        attribute: 16512,
        cid: 49892800,
        copyright: 1,
        ctime: 1533670521,
        desc: "和伊莉雅领证的最后一关选择了打闪闪,和ubw以及魔伊的混剪,喜欢的话请关注下up哦。",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 647,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/a7cc9d0187170a0ef41dd5c77c0c1d8965df3050.jpg",
          mid: 44487065,
          name: "怪人兰斯"
        },
        pages: [
          {
            cid: 49892800,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 647,
            from: "vupload",
            page: 1,
            part: "伊莉雅",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/4c29c30c26d7094294b38eabb4f911735e03d568.png",
        pubdate: 1533670521,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28792602,
          coin: 6,
          danmaku: 33,
          dislike: 0,
          favorite: 21,
          his_rank: 0,
          like: 27,
          now_rank: 0,
          reply: 33,
          share: 11,
          view: 3596
        },
        state: 0,
        tid: 172,
        title: "震惊!某UP与伊莉雅结婚现场上,某金发男路人竟惨遭殴打,重伤不起!(b萌伊莉雅,金闪闪应援)",
        tname: "手机游戏",
        videos: 1
      },
      {
        aid: 28792328,
        attribute: 16768,
        cid: 53221024,
        copyright: 1,
        ctime: 1533666210,
        desc: "之前做得不太满意,这次在原版的基础上做了一点小改动,希望大家能够喜欢~~",
        dimension: {
          height: 2160,
          rotate: 0,
          width: 3840
        },
        duration: 77,
        dynamic: "#FATE# #尼禄#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/e277274b0f6e0b587031f7415e868ec767f9c349.jpg",
          mid: 52367389,
          name: "柯哀落樱飘雪"
        },
        pages: [
          {
            cid: 53221024,
            dimension: {
              height: 2160,
              rotate: 0,
              width: 3840
            },
            duration: 77,
            from: "vupload",
            page: 1,
            part: "【Fate/Extra Last Encore】尼禄陛下的欢脱日常",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/0c7b4d21b030b10ea1137d6822b31d9ca1078aa0.jpg",
        pubdate: 1533666210,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28792328,
          coin: 34,
          danmaku: 6,
          dislike: 0,
          favorite: 31,
          his_rank: 0,
          like: 51,
          now_rank: 0,
          reply: 7,
          share: 5,
          view: 2221
        },
        state: -100,
        tid: 27,
        title: "【Fate/Extra Last Encore】红saber:今天余不但要唱歌~还要唱rap!",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28789557,
        attribute: 16768,
        cid: 49886535,
        copyright: 1,
        ctime: 1533669770,
        desc: "fate全员应援,外加失踪人口回归(。ò ∀ ó。)\\nBGM:Shot In The Dark",
        dimension: {
          height: 2160,
          rotate: 0,
          width: 3840
        },
        duration: 299,
        dynamic: "#日本场应援2018##fate##吾王#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/0c1d6eb8b497ffe10e3c29817b41e84ad13ee5e9.jpg",
          mid: 23226251,
          name: "Saber琪"
        },
        pages: [
          {
            cid: 49886535,
            dimension: {
              height: 2160,
              rotate: 0,
              width: 3840
            },
            duration: 299,
            from: "vupload",
            page: 1,
            part: "2160_25_12.76_Aug072018",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/1e3fac7c49cc612020ecc4260156b9938cc62650.jpg",
        pubdate: 1533669770,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28789557,
          coin: 67,
          danmaku: 8,
          dislike: 0,
          favorite: 84,
          his_rank: 0,
          like: 65,
          now_rank: 0,
          reply: 18,
          share: 24,
          view: 2351
        },
        state: 0,
        tid: 24,
        title: "【FGO/AMV/燃向】欢迎来到人理之光",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28788090,
        attribute: 16512,
        cid: 49883160,
        copyright: 1,
        ctime: 1533667419,
        desc: "第一次做mad,做的不怎么好,多多包涵。\\r\\n素材:魔法少女伊莉雅剧场版:雪下的誓言\\r\\nBGM:ひび割れた世界\\r\\n封面:https://www.pixiv.net/member_illust.php?mode=medium&illust_id=65608478",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 329,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/b7f988546726555377681f732c4bfed54c299613.jpg",
          mid: 8416010,
          name: "阡陌初雪"
        },
        pages: [
          {
            cid: 49883160,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 329,
            from: "vupload",
            page: 1,
            part: "雪下的誓言",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/ef03d707048a19e83796341b56eedb67db044440.png",
        pubdate: 1533667419,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28788090,
          coin: 1682,
          danmaku: 504,
          dislike: 0,
          favorite: 2383,
          his_rank: 0,
          like: 1685,
          now_rank: 0,
          reply: 441,
          share: 429,
          view: 79651
        },
        state: 0,
        tid: 24,
        title: "【卫宫士郎】我没能成为拯救所有人的正义的伙伴",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28787251,
        attribute: 16768,
        cid: 49900934,
        copyright: 1,
        ctime: 1533675107,
        desc: "第一次做AMV,估计观感欠佳_(:з」∠)_\\r\\n算是b萌朱碧和利库的应援视频吧ww\\r\\n素材:NGNL0(No Game No Life Zero)\\r\\n           鈴木このみ - There is a reason",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 602,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/f6e7b7ff85f7af44ed547c895dfe5f16a5e75d60.jpg",
          mid: 13902416,
          name: "一本畫時"
        },
        pages: [
          {
            cid: 49900934,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 301,
            from: "vupload",
            page: 1,
            part: "字幕版",
            vid: "",
            weblink: ""
          },
          {
            cid: 49881402,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 301,
            from: "vupload",
            page: 2,
            part: "无字版",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/9e3eeaf0b1e2983ba283da7c80063874f0ab7a15.png",
        pubdate: 1533675107,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28787251,
          coin: 20,
          danmaku: 1,
          dislike: 0,
          favorite: 18,
          his_rank: 0,
          like: 36,
          now_rank: 0,
          reply: 12,
          share: 18,
          view: 798
        },
        state: 0,
        tid: 24,
        title: "【No Game No Life · Zero】There is a reason 愛のために「AMV」",
        tname: "MAD·AMV",
        videos: 2
      },
      {
        aid: 28787096,
        attribute: 16512,
        cid: 49880064,
        copyright: 1,
        ctime: 1533666205,
        desc: "新人初投稿 请多指教\\n五战骑主从真好\\n\\nBGM:浅川悠-《瞬时の涡》(Fate/Stay Night Rider 角色歌)\\n素材来源:《Fate/Stay Night[Unlimited Blade Works]》、《Fate/Stay Night[Heaven's Feel I.presage flower]》",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 90,
        dynamic: "#日本场应援2018# #AMV# #美杜莎# #间桐樱#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/45227ce02741601a2a0098e0bfd5df11af7fb8c2.jpg",
          mid: 35151881,
          name: "-雪户鹤织-"
        },
        pages: [
          {
            cid: 49880064,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 90,
            from: "vupload",
            page: 1,
            part: "瞬时の涡",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/0b9a6b5da7e5e43ee0ec6f818b19e33a51bdd718.jpg",
        pubdate: 1533666205,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28787096,
          coin: 25,
          danmaku: 1,
          dislike: 0,
          favorite: 24,
          his_rank: 0,
          like: 33,
          now_rank: 0,
          reply: 7,
          share: 7,
          view: 1743
        },
        state: 0,
        tid: 24,
        title: "[Fate/AMV]Rider&间桐樱|只要澄澈的羁绊仍无言地照亮心间",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28787024,
        attribute: 2113664,
        cid: 49881578,
        copyright: 1,
        ctime: 1533666213,
        desc: "借用见视频尾",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 55,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/8ab9d8c06b1ede208b51fb7be1e0a9c06b396ac2.jpg",
          mid: 5033425,
          name: "木2森森"
        },
        pages: [
          {
            cid: 49881578,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 55,
            from: "vupload",
            page: 1,
            part: "001",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/917d5441b2f434f227453c5544570dd6b9434056.png",
        pubdate: 1533666213,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28787024,
          coin: 11,
          danmaku: 3,
          dislike: 0,
          favorite: 40,
          his_rank: 0,
          like: 30,
          now_rank: 0,
          reply: 9,
          share: 5,
          view: 1189
        },
        state: 0,
        tid: 25,
        title: "【我的英雄学院MMD】轰焦冻的runaway baby",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28786327,
        attribute: 2113664,
        cid: 49876912,
        copyright: 1,
        ctime: 1533666200,
        desc: "迦勒底加班人员的b萌应援。\\n嘛,对上了大狗感觉有点恐怖,也许是在做最后的挣扎也说不定呢。。。。.。\\n说起来这是我第一次正经地尝试2d向渲染,我吹爆akon太太的模型wwwww~\\nBGM是れをる桑的no title,降了三个半调(降调狂魔就是我了)。\\n韦伯子裙子的物理出了点问题咋改也改不好我也很烦恼,稍微忍耐下吧,别刷暂停成功什么的,小心复明失败23333。\\n借物表见评论,如果没看见就是你来的太早啦我还没起床。\\n另外为了应援9号当天我会发一个小彩蛋,能记住的可以来我的动态看下哦~",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 245,
        dynamic: "#日本场应援2018##君主·埃尔梅罗二世##bilibili moe#迦勒底加班势力登场~~~~b萌希望能投一票哦",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/8aeb328aec7b35b61786fb1dbdf2df7a6431154f.jpg",
          mid: 10986504,
          name: "xyz坐标"
        },
        pages: [
          {
            cid: 49876912,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 245,
            from: "vupload",
            page: 1,
            part: "001",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/a8973399567558849135be742ac6c1fcdc6f2ffe.jpg",
        pubdate: 1533666200,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28786327,
          coin: 42,
          danmaku: 11,
          dislike: 0,
          favorite: 27,
          his_rank: 0,
          like: 38,
          now_rank: 0,
          reply: 16,
          share: 15,
          view: 1241
        },
        state: 0,
        tid: 25,
        title: "【B萌应援】迦勒底加班势力登场",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28785523,
        attribute: 2113664,
        cid: 49877810,
        copyright: 1,
        ctime: 1533666183,
        desc: "Bilibili Moe,弗兰肯斯坦应援向MMD\\nBGM:from Y to Y\\nModel:做成参谋\\nCamera+Action:Hiramori Amu",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 322,
        dynamic: "#日本场应援2018##舞蹈MMD##新人向#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/98545d02fcb6bd97fe21eeb784a38ec24eb0f6ed.jpg",
          mid: 39469126,
          name: "双商下线"
        },
        pages: [
          {
            cid: 49877810,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 322,
            from: "vupload",
            page: 1,
            part: "from Y to Y(弗兰肯斯坦ver._BiliBili",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/3fb6aa9bd61c14133d65ebf1959a16dc16d1e771.jpg",
        pubdate: 1533666183,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28785523,
          coin: 13,
          danmaku: 4,
          dislike: 0,
          favorite: 4,
          his_rank: 0,
          like: 6,
          now_rank: 0,
          reply: 4,
          share: 3,
          view: 394
        },
        state: 0,
        tid: 25,
        title: "【MMD/B萌应援】from Y to Y(弗兰肯斯坦)",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28782524,
        attribute: 16512,
        cid: 49926392,
        copyright: 1,
        ctime: 1533660829,
        desc: "BGM:田中井彩智——黄金の辉き\\n=\\n说到做到。上星期看到B站上架了06版的fate,打鸡血剪辑的……剪到后面遇到不少困难有点摸鱼了,甚至忘了自己最初想通过视频表达什么了,有些粗制滥造,真是对不起(飞歌语气)。\\n可能赶不上士郎今天的应援了,但是我喜欢士郎的热情还是不变的(笑),也请大家多多支持士郎咯。",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 277,
        dynamic: "#日本场应援2018##卫宫士郎##fate#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/3ae164771bc5df3dc8f3083fc09154984f912a0f.jpg",
          mid: 8983166,
          name: "自我意识过剩者"
        },
        pages: [
          {
            cid: 49926392,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 277,
            from: "vupload",
            page: 1,
            part: "黄金の辉き(士郎应援)_bilibili",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/707cfd0e00eab017fa6792e5d2ee2db19a9ac508.jpg",
        pubdate: 1533660828,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28782524,
          coin: 103,
          danmaku: 9,
          dislike: 0,
          favorite: 135,
          his_rank: 0,
          like: 113,
          now_rank: 0,
          reply: 39,
          share: 19,
          view: 3160
        },
        state: 0,
        tid: 24,
        title: "【Fate/卫宫士郎】背负理想不断前行",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28779967,
        attribute: 16768,
        cid: 49868565,
        copyright: 1,
        ctime: 1533657496,
        desc: "bgm:Old Memory\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n希望有一个小埋那样的妹妹",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 106,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/4fd3f9c70ba89b9f87d6db91796b87233edcd670.jpg",
          mid: 20963025,
          name: "HoshikawaKanade"
        },
        pages: [
          {
            cid: 49868565,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 106,
            from: "vupload",
            page: 1,
            part: "【小埋应援】Old Memory",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/697ef3486f5bcd8514fea73d9677930bc1b5873d.jpg",
        pubdate: 1533657496,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28779967,
          coin: 36,
          danmaku: 27,
          dislike: 0,
          favorite: 23,
          his_rank: 0,
          like: 74,
          now_rank: 0,
          reply: 41,
          share: 8,
          view: 2025
        },
        state: -100,
        tid: 24,
        title: "【土间埋应援】Old Memory",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28778494,
        attribute: 16768,
        cid: 49865025,
        copyright: 1,
        ctime: 1533657293,
        desc: "有一对夫妻他们很强,但他们从来没赢过。        有一对兄妹他们很弱,但他们从来没输过。",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 245,
        dynamic: "#日本场应援2018##里克与休比#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/e177eb81b4d0b835cf5023f411a9a9c612cd3037.jpg",
          mid: 289091320,
          name: "牧瑟秋风"
        },
        pages: [
          {
            cid: 49865025,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 245,
            from: "vupload",
            page: 1,
            part: "游戏人生剧场版里克与休比",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/fc4f4ea539ac75cf8f2aadc4778d09e3e6a05222.jpg",
        pubdate: 1533657293,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28778494,
          coin: 7,
          danmaku: 0,
          dislike: 0,
          favorite: 2,
          his_rank: 0,
          like: 4,
          now_rank: 0,
          reply: 1,
          share: 0,
          view: 312
        },
        state: -100,
        tid: 27,
        title: "游戏人生剧场版里克与休比",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28773575,
        attribute: 16512,
        cid: 49854596,
        copyright: 1,
        ctime: 1533657302,
        desc: "第一次剪辑这种视频\\n所以暂且把开头放出来当预告\\n不知道大家感觉怎么样\\n评论区说一下,我在正片里改改\\n争取赶在十号之前给小樱应援L('ω')┘三└('ω')」\\n\\n视频素材:魔卡少女樱clear篇\\n音乐素材:认真卖萌么么哒--洛天依(作曲:周存JUSF)",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 45,
        dynamic: "#日本场应援2018##动漫##童年#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/f6af35d8b410256680a4f3dec77ffc86a8677e90.jpg",
          mid: 10434225,
          name: "花子君のドーナツ"
        },
        pages: [
          {
            cid: 49854596,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 45,
            from: "vupload",
            page: 1,
            part: "认真卖萌么么哒   2018.8.7",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/79bebca16fcad64fb529c2973c176f3088a02ee2.jpg",
        pubdate: 1533657302,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28773575,
          coin: 10,
          danmaku: 1,
          dislike: 0,
          favorite: 16,
          his_rank: 0,
          like: 56,
          now_rank: 0,
          reply: 16,
          share: 1,
          view: 1468
        },
        state: -100,
        tid: 27,
        title: "【樱狼警告】认真卖萌给你看~=ω=【预告】",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28771695,
        attribute: 16512,
        cid: 49850403,
        copyright: 1,
        ctime: 1533657307,
        desc: "做MAD之前:这首歌好适合士樱啊,做个MAD试试吧\\n为了做MAD去看了HF线生肉后:呜呜呜呜,老虫子你还我樱!qaq\\n【BGM:THERE IS A REASON】\\n顺便求个关注收藏推荐硬币,你们的支持是我最大的动力!",
        dimension: {
          height: 720,
          rotate: 0,
          width: 960
        },
        duration: 295,
        dynamic: "#日本场应援2018##卫宫士郎##间桐樱#我以后再也不拿pr做字幕了.....手都得断掉......",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/1f3d7848eba42e5775235e3bb9d6789133a56674.jpg",
          mid: 272915884,
          name: "藤丸嘉人"
        },
        pages: [
          {
            cid: 49850403,
            dimension: {
              height: 720,
              rotate: 0,
              width: 960
            },
            duration: 295,
            from: "vupload",
            page: 1,
            part: "鈴木このみ - THERE IS A REASON_1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/48874afd663622db93026f5325909b12340947e4.jpg",
        pubdate: 1533657307,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28771695,
          coin: 38,
          danmaku: 3,
          dislike: 0,
          favorite: 45,
          his_rank: 0,
          like: 43,
          now_rank: 0,
          reply: 16,
          share: 14,
          view: 1975
        },
        state: 0,
        tid: 24,
        title: "仅此一人的英雄【fate/HF  MAD/AMV】",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28770849,
        attribute: 16768,
        cid: 49849896,
        copyright: 1,
        ctime: 1533657317,
        desc: "这个和预告系没有任何关系,没看过的被剧透别怪我~~~",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 601,
        dynamic: "#日本场应援2018##AMV##游戏人生##TOS偶像总选举#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/694658b56ad6d747497b7ffb7b2efdad5f4a4623.jpg",
          mid: 3001391,
          name: "NearLight"
        },
        pages: [
          {
            cid: 49849896,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 301,
            from: "vupload",
            page: 1,
            part: "参赛稿",
            vid: "",
            weblink: ""
          },
          {
            cid: 56785862,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 300,
            from: "vupload",
            page: 2,
            part: "工程文件整理",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/2b43cacdfc92b09c6f838fb4df417b688a28d154.jpg",
        pubdate: 1533657317,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28770849,
          coin: 750,
          danmaku: 25,
          dislike: 0,
          favorite: 1102,
          his_rank: 0,
          like: 1672,
          now_rank: 0,
          reply: 108,
          share: 105,
          view: 14257
        },
        state: 0,
        tid: 24,
        title: "【AMV/NGNL/游戏人生ZERO】无命而去 有命而逝",
        tname: "MAD·AMV",
        videos: 2
      },
      {
        aid: 28770700,
        attribute: 16512,
        cid: 49850685,
        copyright: 1,
        ctime: 1533651391,
        desc: "关于胜出上学路上的小故事\\n尝试做了手书,差点累死我这个手残\\n果然还是回去好好学画画吧",
        dimension: {
          height: 576,
          rotate: 0,
          width: 720
        },
        duration: 118,
        dynamic: "#我的英雄学院##手书##胜出#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/d0c5030ab6cf4a7a53eac013fb8522db13033166.jpg",
          mid: 20359495,
          name: "今天惹咔酱生气了吗"
        },
        pages: [
          {
            cid: 49850685,
            dimension: {
              height: 576,
              rotate: 0,
              width: 720
            },
            duration: 118,
            from: "vupload",
            page: 1,
            part: "你的心拍数",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/b6b74f8c4365d9e6364ae95f3b03fa58814d95a0.jpg",
        pubdate: 1533651391,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28770700,
          coin: 8,
          danmaku: 5,
          dislike: 0,
          favorite: 8,
          his_rank: 0,
          like: 43,
          now_rank: 0,
          reply: 4,
          share: 9,
          view: 1215
        },
        state: -100,
        tid: 47,
        title: "{我的英雄学院/胜出/手书} 你的心拍数",
        tname: "短片·手书·配音",
        videos: 1
      },
      {
        aid: 28769993,
        attribute: 1065171,
        cid: 49835843,
        copyright: 1,
        ctime: 1533650863,
        desc: "末尾有信长三连!\\n没纯踩点所以不敢用87k!\\n没错我就是那个欠债的后期!\\n\\nbgm:handclap",
        dimension: {
          height: 576,
          rotate: 0,
          width: 720
        },
        duration: 110,
        dynamic: "#日本场应援2018##FREE!#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/2e6f63afc605959f370db3dfe91c0e5dd69a3a9b.jpg",
          mid: 104557039,
          name: "梓川木由"
        },
        pages: [
          {
            cid: 49835843,
            dimension: {
              height: 576,
              rotate: 0,
              width: 720
            },
            duration: 110,
            from: "vupload",
            page: 1,
            part: "Fitz & the Tantrums - HandClap_1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/301c5a13e052776f333f005f6de16479191635d6.jpg",
        pubdate: 1533650863,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28769993,
          coin: 14,
          danmaku: 9,
          dislike: 0,
          favorite: 9,
          his_rank: 0,
          like: 17,
          now_rank: 0,
          reply: 5,
          share: 8,
          view: 770
        },
        state: 0,
        tid: 24,
        title: "【混剪】不就是想看小哥哥脱衣服么!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28768955,
        attribute: 16512,
        cid: 49838604,
        copyright: 1,
        ctime: 1533650172,
        desc: "■ 调教 · 混音 · 字幕:梦落遗廊P\\n■ 曲:じん\\n■ 編曲:Nhato\\n■ 映像:しづ\\n \\n● 本家 → sm21720819\\n● 时隔5个月的稿,鸽了这么久请诸位别把我抓去炖汤……\\n● 调教了这首带感曲子来应援阳炎,海选赛只有Konoha通过了,球球你们本战投稿这位小天使一票,让他好歹撑到决赛(´;ω;\`)\\n● 在niconico也有投稿 → sm33640672 \\n● 之前用 IA 翻调的车祸曲 → av20887402",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 217,
        dynamic: "#じん##VOCALOID##阳炎计划#个\\n翻调了界外科学,快来听一听ww",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/ef2b6e770837ed88f1e02a90f289af18a0f4c42e.jpg",
          mid: 111651195,
          name: "Niscet"
        },
        pages: [
          {
            cid: 49838604,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 217,
            from: "vupload",
            page: 1,
            part: "结月缘 · GUMI Ver.",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/5806182a696baba6fe44fb10d36202707528d910.jpg",
        pubdate: 1533650172,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28768955,
          coin: 24,
          danmaku: 72,
          dislike: 0,
          favorite: 43,
          his_rank: 0,
          like: 42,
          now_rank: 0,
          reply: 13,
          share: 12,
          view: 894
        },
        state: 0,
        tid: 30,
        title: "【结月缘 · GUMI】界外科学 / アウターサイエンス【VOCALOID COVER】【原PV付 · 自制中文字幕】【2018B萌应援】",
        tname: "VOCALOID·UTAU",
        videos: 1
      },
      {
        aid: 28767558,
        attribute: 16768,
        cid: 49842496,
        copyright: 1,
        ctime: 1533648380,
        desc: "娱乐至上,大家看的开心就好",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 62,
        dynamic: "求求审核老哥给个面子吧QAQ",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/0dc27beff4d096b67ece41d5213d417f076ec81e.jpg",
          mid: 4328994,
          name: "三木先森不会咕"
        },
        pages: [
          {
            cid: 49842496,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 62,
            from: "vupload",
            page: 1,
            part: "圣经_x264",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/eaa6950d0823447ebc8fea77fbda57d7d645132c.jpg",
        pubdate: 1533648380,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28767558,
          coin: 57,
          danmaku: 7,
          dislike: 0,
          favorite: 13,
          his_rank: 0,
          like: 40,
          now_rank: 0,
          reply: 40,
          share: 19,
          view: 1412
        },
        state: 0,
        tid: 27,
        title: "如果以命运石之门的方式去打开7酱圣经会怎么样",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28766665,
        attribute: 16579,
        cid: 213977771,
        copyright: 1,
        ctime: 1533648458,
        desc: "不希望别人看这个视频啦\\n所以呢就悄悄地换了源!\\n不删掉视频的原因是会扣硬币w\\n\\n原简介:\\n万恶之源:av17699810\\n参考,音频:av20536168",
        dimension: {
          height: 1280,
          rotate: 0,
          width: 590
        },
        duration: 10,
        dynamic: "#日本场应援2018##手书##自制#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/5deb5de649e9d0fc7c3da927e48e1eae74ec8754.jpg",
          mid: 13437131,
          name: "UID_13437131"
        },
        pages: [
          {
            cid: 213977771,
            dimension: {
              height: 1280,
              rotate: 0,
              width: 590
            },
            duration: 10,
            from: "vupload",
            page: 1,
            part: "SVID_20200718_222845_1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/82f16c06497ecffc29b20ee6d5d433dd11c0a799.jpg",
        pubdate: 1533648458,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28766665,
          coin: 587,
          danmaku: 2,
          dislike: 0,
          favorite: 2352,
          his_rank: 0,
          like: 3413,
          now_rank: 0,
          reply: 238,
          share: 122,
          view: 129535
        },
        state: 0,
        tid: 174,
        title: "已删除",
        tname: "其他",
        videos: 1
      },
      {
        aid: 28764554,
        attribute: 16768,
        cid: 49836795,
        copyright: 1,
        ctime: 1533648227,
        desc: "02加油",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 46,
        dynamic: "#日本场应援2018##MAD.AMV##bilibili  moe#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/02478906b35a1ea1ef29eecf8c93548cf47d07c8.jpg",
          mid: 65732857,
          name: "零二的達令"
        },
        pages: [
          {
            cid: 49836795,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 46,
            from: "vupload",
            page: 1,
            part: "[02应援]",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/f173f5886356dc23b4966a6b0a35763db3fe50d6.jpg",
        pubdate: 1533648227,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28764554,
          coin: 26,
          danmaku: 2,
          dislike: 0,
          favorite: 21,
          his_rank: 0,
          like: 47,
          now_rank: 0,
          reply: 13,
          share: 7,
          view: 1048
        },
        state: 0,
        tid: 24,
        title: "[02应援]",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28759375,
        attribute: 2113664,
        cid: 49826852,
        copyright: 1,
        ctime: 1533646967,
        desc: "模型:アストルフォ:すがきれもん\\n场景:im8225803:SNowly\\n动作/镜头:av25782915:浪潮小汐\\n表情:av25782915:閃爍P\\nBGM:恋して♥ポプテピピック(牧野由依、渡部优衣)\\nMME:AutoLuminous4、Diffusion7:そぼろ",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 90,
        dynamic: "#阿斯托尔福##日本场应援2018##FATE#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/7dc3c1da46f9d5024b27fc0c880a4c2a66327c16.jpg",
          mid: 16295316,
          name: "岸波玉藻"
        },
        pages: [
          {
            cid: 49826852,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 90,
            from: "vupload",
            page: 1,
            part: "1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/28235650899fd8313e78e62238340a99c0f4f6bf.jpg",
        pubdate: 1533646967,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28759375,
          coin: 10,
          danmaku: 4,
          dislike: 0,
          favorite: 13,
          his_rank: 0,
          like: 38,
          now_rank: 0,
          reply: 5,
          share: 10,
          view: 815
        },
        state: 0,
        tid: 25,
        title: "【FATE MMD】阿斯托尔福的恋爱吧❤POP TEAM EPIC",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28757836,
        attribute: 16384,
        cid: 49820005,
        copyright: 1,
        ctime: 1533646283,
        desc: "话说对导演下手的“家伙”还是挺多的嘛,如:\\n库洛牌:消牌、冰牌、迷牌、声牌、地牌、无牌等\\n人物:柊泽艾力欧、女占卜师等\\n透明牌-包围、冰雹、幻影等\\n(还有个破坏知世房子的摇动没加进去)",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 196,
        dynamic: "对导演知世动手的片段小剪。#日本场应援2018#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/d6cb50fc26bdd24652a25e0d3571243a9cfa6c14.jpg",
          mid: 23218911,
          name: "花中童"
        },
        pages: [
          {
            cid: 49820005,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 160,
            from: "vupload",
            page: 1,
            part: "正片",
            vid: "",
            weblink: ""
          },
          {
            cid: 50634353,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 36,
            from: "vupload",
            page: 2,
            part: "补续",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/d14c77ad2456cacdd9d3b498eb64e17bb520743d.jpg",
        pubdate: 1533646283,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 0,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28757836,
          coin: 21,
          danmaku: 103,
          dislike: 0,
          favorite: 162,
          his_rank: 0,
          like: 142,
          now_rank: 0,
          reply: 53,
          share: 19,
          view: 11693
        },
        state: 0,
        tid: 27,
        title: "【魔卡少女樱】那些年敢对知世动手的人或牌(不全)",
        tname: "综合",
        videos: 2
      },
      {
        aid: 28757709,
        attribute: 16768,
        cid: 49821087,
        copyright: 1,
        ctime: 1533646295,
        desc: "一个短小的绿谷小天使应援视频...........\\n莺莺燕燕嘤嘤\\n新人UP求关注",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 86,
        dynamic: "#日本场应援2018##我的英雄学院##AMV#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/be45bacc10a0467bc798dac935dd62825dcb06b6.jpg",
          mid: 351853136,
          name: "带肥皂的小纸船"
        },
        pages: [
          {
            cid: 49821087,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 86,
            from: "vupload",
            page: 1,
            part: "绿谷",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/46bb690c9c9cace1c02e6efec8162ed1e955c35e.jpg",
        pubdate: 1533646295,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28757709,
          coin: 17,
          danmaku: 6,
          dislike: 0,
          favorite: 9,
          his_rank: 0,
          like: 32,
          now_rank: 0,
          reply: 20,
          share: 9,
          view: 957
        },
        state: 0,
        tid: 24,
        title: "【小英雄/AMV/泪燃向】承包绿谷小天使(●'◡'●)",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28756456,
        attribute: 16768,
        cid: 49814945,
        copyright: 1,
        ctime: 1533644685,
        desc: "迦尔纳应援视频,各位一定要去为迦尔纳投票啊,他现在的处境很不好。\\n不要三连,只要你们投票。\\n十分感谢。",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 226,
        dynamic: "#日本场应援2018##fate/apocrypha##迦尔纳#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/0057690360800f5120c82b581909725f09a94c14.jpg",
          mid: 76807994,
          name: "ZXSA-solider"
        },
        pages: [
          {
            cid: 49814945,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 226,
            from: "vupload",
            page: 1,
            part: "迦尔纳应援是视频2_01",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/960d6efdab3975e5ba6b13178d9a0a49cbe4f584.jpg",
        pubdate: 1533644685,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28756456,
          coin: 48,
          danmaku: 1,
          dislike: 0,
          favorite: 10,
          his_rank: 0,
          like: 40,
          now_rank: 0,
          reply: 27,
          share: 12,
          view: 904
        },
        state: 0,
        tid: 183,
        title: "【2018 bilbil moe】 迦尔纳应援视频   第二弹",
        tname: "影视剪辑",
        videos: 1
      },
      {
        aid: 28753982,
        attribute: 16512,
        cid: 49813835,
        copyright: 1,
        ctime: 1533643235,
        desc: "这是在下第一次投稿希望不会出什么问题......也许吧。\\n如果问题太多我就重做一次吧。",
        dimension: {
          height: 576,
          rotate: 0,
          width: 720
        },
        duration: 238,
        dynamic: "#日本场应援2018##FGO##FATE#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/6273def76c5d6a9cc61b4465a23cfaaeb6f5888b.jpg",
          mid: 28036674,
          name: "言峰明"
        },
        pages: [
          {
            cid: 49813835,
            dimension: {
              height: 576,
              rotate: 0,
              width: 720
            },
            duration: 238,
            from: "vupload",
            page: 1,
            part: "fgo原创卡片视频系列-阿尔泰尔",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/e969f49f4e218e6c18b5d39eb6d80147509a6d55.jpg",
        pubdate: 1533643235,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28753982,
          coin: 24,
          danmaku: 5,
          dislike: 0,
          favorite: 5,
          his_rank: 0,
          like: 23,
          now_rank: 0,
          reply: 17,
          share: 8,
          view: 857
        },
        state: -100,
        tid: 172,
        title: "fgo原创卡片视频系列-阿尔泰尔",
        tname: "手机游戏",
        videos: 1
      },
      {
        aid: 28750045,
        attribute: 16512,
        cid: 49858754,
        copyright: 1,
        ctime: 1533630352,
        desc: "视频类型: 动画\\r\\n动漫中那些毁天灭地的炫酷大招",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 890,
        dynamic: "#动漫##动画##热血#",
        owner: {
          face: "http://i0.hdslb.com/bfs/face/607efa42b42d23a32433f524d452d3ab36a6cdd2.jpg",
          mid: 7360144,
          name: "十柒号"
        },
        pages: [
          {
            cid: 49858754,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 890,
            from: "vupload",
            page: 1,
            part: "动漫中那些毁天灭地的炫酷大招",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/6583dc0f9c786eb7386f808771437b236732a589.png",
        pubdate: 1533657312,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28750045,
          coin: 359,
          danmaku: 1784,
          dislike: 0,
          favorite: 1235,
          his_rank: 0,
          like: 1057,
          now_rank: 0,
          reply: 403,
          share: 88,
          view: 138104
        },
        state: 0,
        tid: 27,
        title: "动漫中那些毁天灭地的炫酷大招",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28749274,
        attribute: 16512,
        cid: 49803783,
        copyright: 1,
        ctime: 1533639413,
        desc: "一个潦草的自制手书233333有描绘,原作Takadabear",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 63,
        dynamic: "#日本场应援2018##卫宫切嗣##卫宫士郎#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/57dd2529a51790824a6fb3e0fa3778b424cd7cab.jpg",
          mid: 524252,
          name: "笑揉橘猫不语"
        },
        pages: [
          {
            cid: 49803783,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 63,
            from: "vupload",
            page: 1,
            part: "卫宫 搓腚舞",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/1a15f0b0220690a8d0b8e09a6cdda1fbe7011123.jpg",
        pubdate: 1533639413,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28749274,
          coin: 79,
          danmaku: 33,
          dislike: 0,
          favorite: 89,
          his_rank: 0,
          like: 107,
          now_rank: 0,
          reply: 48,
          share: 31,
          view: 2578
        },
        state: 0,
        tid: 47,
        title: "【卫宫家的搓屁舞】孩子不听话怎么办",
        tname: "短片·手书·配音",
        videos: 1
      },
      {
        aid: 28748902,
        attribute: 2113664,
        cid: 49803395,
        copyright: 1,
        ctime: 1533639596,
        desc: "模型:天草四郎時貞:sema/カルナ:ユタカ/シェイクスピア:履物連絡用(準備中)\\n背景:sm15356644:kiyo_NoN\\n动作/镜头:sm24491916:にもゆに\\nBGM:EVERYBODY(Backstreet Boys)\\nMME:Diffusion7:そぼろ",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 231,
        dynamic: "#日本场应援2018##FATE##EVERYBODY#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/7dc3c1da46f9d5024b27fc0c880a4c2a66327c16.jpg",
          mid: 16295316,
          name: "岸波玉藻"
        },
        pages: [
          {
            cid: 49803395,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 231,
            from: "vupload",
            page: 1,
            part: "3",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/59e215ed79cc0814a36c0ed815b633e28c6ed1f7.jpg",
        pubdate: 1533639596,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28748902,
          coin: 13,
          danmaku: 0,
          dislike: 0,
          favorite: 7,
          his_rank: 0,
          like: 29,
          now_rank: 0,
          reply: 5,
          share: 7,
          view: 636
        },
        state: 0,
        tid: 25,
        title: "【FATE MMD】EVERYBODY【天草四郎&迦尔纳&莎士比亚】",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28745414,
        attribute: 16512,
        cid: 49795470,
        copyright: 1,
        ctime: 1533634290,
        desc: "喜欢就点个赞吧 谢谢大家!\\nbgm: 菅田将晖《ロングホープ・フィリア》",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 86,
        dynamic: "#动漫##剪辑##我的英雄学院#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/96a64c7bbf85efa5453cbb5751b471e61265c394.jpg",
          mid: 12423973,
          name: "拉二的小太阳"
        },
        pages: [
          {
            cid: 49795470,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 86,
            from: "vupload",
            page: 1,
            part: "切爆",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/136403e510faead254816acfd76ba6d5f5a6ce38.jpg",
        pubdate: 1533634290,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28745414,
          coin: 831,
          danmaku: 225,
          dislike: 0,
          favorite: 2334,
          his_rank: 0,
          like: 2236,
          now_rank: 0,
          reply: 341,
          share: 263,
          view: 72678
        },
        state: 0,
        tid: 27,
        title: "【我英】(切爆)鸡窝头,你老是垂头丧气,我都不舒服了!(谢谢你切岛)",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28744228,
        attribute: 16512,
        cid: 49793945,
        copyright: 1,
        ctime: 1533633433,
        desc: "第一次尝试着做视频,对pr还不是很了解,\\n但对于金木。(尽力了)\\n做视频不敢有任何懈怠,大家好,新人up猪\\n我来啦,希望各位大佬wu喷\\nBGM:Angel    saybia\\n           透明で透き通って何でも成れそうで    haku",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 367,
        dynamic: "#剪辑##东京喰种##金木#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/220f925eafda0466421f1395a52ddad47dfc07a7.jpg",
          mid: 288141009,
          name: "-时鸣涧-"
        },
        pages: [
          {
            cid: 49793945,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 367,
            from: "vupload",
            page: 1,
            part: "金木研:  我,从未后悔",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/768d50b95d27d6cab7c9be696cd3a23a640799df.jpg",
        pubdate: 1533633433,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28744228,
          coin: 46,
          danmaku: 90,
          dislike: 0,
          favorite: 204,
          his_rank: 0,
          like: 212,
          now_rank: 0,
          reply: 87,
          share: 28,
          view: 13225
        },
        state: 0,
        tid: 183,
        title: "金木研:  我,从未后悔",
        tname: "影视剪辑",
        videos: 1
      },
      {
        aid: 28743188,
        attribute: 2113664,
        cid: 49793120,
        copyright: 1,
        ctime: 1533632587,
        desc: "模型:ロビン・フッド:切な顔P\\n场景:im4179284:切な顔P\\n动作:sm29180863:yurie\\n镜头:sm29298856:一護牛乳\\nBGM:av5451565:云潇翼Seanwing\\nMME:Diffusion7:そぼろ",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 221,
        dynamic: "#FATE##日本场应援2018##罗宾汉#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/7dc3c1da46f9d5024b27fc0c880a4c2a66327c16.jpg",
          mid: 16295316,
          name: "岸波玉藻"
        },
        pages: [
          {
            cid: 49793120,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 221,
            from: "vupload",
            page: 1,
            part: "2",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/84dabeaa9b7d5d127c98f8121b0d46f241287767.jpg",
        pubdate: 1533632587,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28743188,
          coin: 2,
          danmaku: 0,
          dislike: 0,
          favorite: 7,
          his_rank: 0,
          like: 23,
          now_rank: 0,
          reply: 6,
          share: 2,
          view: 124
        },
        state: -100,
        tid: 25,
        title: "【FATE MMD】罗宾汉的极乐净土",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28741550,
        attribute: 16768,
        cid: 49789622,
        copyright: 1,
        ctime: 1533630391,
        desc: "BGM:Désir——《fate/apocrypha》ED1\\n新人up摸鱼出来的第二个视频\\n前面一段偷懒了还望谅解(还有一小段用过两次\\n喜欢的话就请关注投币推荐收藏一条龙吧=v=",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 278,
        dynamic: "#日本场应援2018##间桐樱##卫宫士郎##远坂凛##燃向#终于弄好了哇QAQ",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/016fb61758a8697378703853f075e5ffd96dfc80.jpg",
          mid: 74156490,
          name: "极と墨"
        },
        pages: [
          {
            cid: 49789622,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 278,
            from: "vupload",
            page: 1,
            part: "樱应援(2)",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/48b2c32d85521f0074ff8a34385811b8e0c59399.jpg",
        pubdate: 1533630391,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28741550,
          coin: 431,
          danmaku: 75,
          dislike: 0,
          favorite: 776,
          his_rank: 0,
          like: 466,
          now_rank: 0,
          reply: 92,
          share: 58,
          view: 17369
        },
        state: 0,
        tid: 24,
        title: "【FATE/fgo】正义之所在",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28740360,
        attribute: 16512,
        cid: 49786602,
        copyright: 1,
        ctime: 1533629143,
        desc: "首先,感谢网易云用户:saberycr他在网易云投稿的游戏人生mad非常棒!给了我很大的灵感,大家可以去看看。\\n新人渣作,喜欢的话就点个赞也是好的,谢谢!",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 368,
        dynamic: "#日本场应援2018##AMV##MAD#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/fd9cf396df8779b55a84f8793a668f028f37608d.jpg",
          mid: 107142392,
          name: "清居wl"
        },
        pages: [
          {
            cid: 49786602,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 368,
            from: "vupload",
            page: 1,
            part: "【MAD·AMV游戏人生zero】休比,下辈子再做我的妻子好吗?",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/e41e625d36b235e1fd55bbf479b550d6b93190e0.jpg",
        pubdate: 1533629142,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28740360,
          coin: 19,
          danmaku: 5,
          dislike: 0,
          favorite: 12,
          his_rank: 0,
          like: 26,
          now_rank: 0,
          reply: 15,
          share: 12,
          view: 575
        },
        state: 0,
        tid: 24,
        title: "【MAD·AMV游戏人生zero】休比,下辈子再做我的妻子好吗?",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28739521,
        attribute: 16512,
        cid: 49782315,
        copyright: 1,
        ctime: 1533629243,
        desc: "大家好我死回来啦.........!\\n学会了录屏和一点点简单的剪辑超开心!!!\\n炫耀一下vqv。\\n大家今天一定要给茶茶投票鸭!!!!!!!!!!!!!\\n\\nbgm:\\n無邪気な冒険心——Goose house\\n3/4——Goose house\\n18歲——Goose house",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 799,
        dynamic: "#绘画过程##板绘##上色#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/8901e94eb89768277f88f3e5e021b28f0202bdb5.jpg",
          mid: 12469873,
          name: "嗨呀个嘿"
        },
        pages: [
          {
            cid: 49782315,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 799,
            from: "vupload",
            page: 1,
            part: "20180806_172718.mp4",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/428deb75735cab3e32cfd6af4a7e15dc62564ff6.jpg",
        pubdate: 1533629243,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28739521,
          coin: 15,
          danmaku: 0,
          dislike: 0,
          favorite: 5,
          his_rank: 0,
          like: 13,
          now_rank: 0,
          reply: 15,
          share: 11,
          view: 417
        },
        state: -100,
        tid: 162,
        title: "【一个过程】简陋的画了一个茶茶",
        tname: "绘画",
        videos: 1
      },
      {
        aid: 28738449,
        attribute: 16512,
        cid: 49783840,
        copyright: 1,
        ctime: 1533628244,
        desc: "休息了2周 再次回来做视频了\\nBGM:一刀缭乱-六花\\n希望大家喜欢 也希望fate在萌战里获得好成绩 也希望大家鬼岛活动加油!",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 200,
        dynamic: "#日本场应援2018##AMV##FATE#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/ff34db61ca71de81684ea0ae9b708e5ee68cd342.jpg",
          mid: 3294538,
          name: "月无挽风"
        },
        pages: [
          {
            cid: 49783840,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 200,
            from: "vupload",
            page: 1,
            part: "六花 - 一刀繚乱",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/dac96f76cc81fe4205fc29fb37f3d52178c73a87.jpg",
        pubdate: 1533628244,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28738449,
          coin: 162,
          danmaku: 23,
          dislike: 0,
          favorite: 223,
          his_rank: 0,
          like: 174,
          now_rank: 0,
          reply: 33,
          share: 48,
          view: 5548
        },
        state: 0,
        tid: 24,
        title: "【FGO/AMV】为御主献上 如雷鸣般的喝彩!",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28738418,
        attribute: 16512,
        cid: 49800159,
        copyright: 1,
        ctime: 1533623268,
        desc: "应援视频。\\n对不起来晚了,如果这样就能让故事停留在P1就好了。\\n(虽然我觉得P2很好)\\n希望休比和助手都能拿个好名次~",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 696,
        dynamic: "#日本场应援2018##NO GAME NO LIFE##游戏人生#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/20fbb85c51b1cfcfc24372d5e06068addaf6f8a0.jpg",
          mid: 4313856,
          name: "年度枫"
        },
        pages: [
          {
            cid: 49800159,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 135,
            from: "vupload",
            page: 1,
            part: "游戏人生zero-休比(原音频)",
            vid: "",
            weblink: ""
          },
          {
            cid: 49800172,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 561,
            from: "vupload",
            page: 2,
            part: "如果没有P2就好了(配乐版)",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/ff2227531a7dcc0eaef3c22e73c34733689fec45.jpg",
        pubdate: 1533634230,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28738418,
          coin: 22,
          danmaku: 10,
          dislike: 0,
          favorite: 19,
          his_rank: 0,
          like: 26,
          now_rank: 0,
          reply: 13,
          share: 10,
          view: 1278
        },
        state: 0,
        tid: 27,
        title: "【游戏人生zero】休比应援:这场游戏是休比赢了",
        tname: "综合",
        videos: 2
      },
      {
        aid: 28736888,
        attribute: 2113664,
        cid: 49781520,
        copyright: 1,
        ctime: 1533621539,
        desc: "模型:エミヤ:ちょビ玉\\n场景:im8147346:鯖缶359\\n动作:sm24923974:遊風稜\\n口型:sm32918418:しわこ\\n镜头:sm26631976:足屋コーヒー\\nMME:Diffusion7:そぼろ\\nBGM:Beat It(Michael Jackson)",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 218,
        dynamic: "#FATE##日本场应援2018##卫宫#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/7dc3c1da46f9d5024b27fc0c880a4c2a66327c16.jpg",
          mid: 16295316,
          name: "岸波玉藻"
        },
        pages: [
          {
            cid: 49781520,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 218,
            from: "vupload",
            page: 1,
            part: "1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/10338319f5125dfb9b793795a0fd02241dfc52fc.jpg",
        pubdate: 1533621539,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28736888,
          coin: 0,
          danmaku: 1,
          dislike: 0,
          favorite: 7,
          his_rank: 0,
          like: 27,
          now_rank: 0,
          reply: 3,
          share: 10,
          view: 475
        },
        state: 0,
        tid: 25,
        title: "【FATE MMD】卫宫的Beat it",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28734732,
        attribute: 16768,
        cid: 49769513,
        copyright: 1,
        ctime: 1533622564,
        desc: "第三期预告(水视频)\\n我怀疑我们能不能继续了(失望)赞好少,感觉大家不是很喜欢我这个系列\\n真的如果收藏没有达到200我们打算做其他简单的了",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 264,
        dynamic: "#日本场应援2018##魔法少女伊莉雅##阿库娅#我才不是什么智障,我是魔法女神!发起火来连自己都打!",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/a12473cd675c85d35ca62ebb16ee8788f924512e.jpg",
          mid: 104934805,
          name: "小千藤"
        },
        pages: [
          {
            cid: 49769513,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 264,
            from: "vupload",
            page: 1,
            part: "第三期魔法少女",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/6d4d6dc5044c32ba3fa8e155abb89d71438c3904.jpg",
        pubdate: 1533622564,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28734732,
          coin: 272,
          danmaku: 91,
          dislike: 0,
          favorite: 151,
          his_rank: 0,
          like: 588,
          now_rank: 0,
          reply: 145,
          share: 48,
          view: 9016
        },
        state: -100,
        tid: 24,
        title: "【AMV/误解】我才不是智障!我是魔法少女~",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28734092,
        attribute: 16512,
        cid: 49775961,
        copyright: 1,
        ctime: 1533620802,
        desc: "因为第一次传失误了所以删除了...对此感到抱歉...\\n明天的帮派火拼请各位务必投zero two一票\\nBGM:い〜やい〜やい〜や(算了~算了~算了~)",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 199,
        dynamic: "#日本场应援2018##DARLINGINTHEFRANX##国家队#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/b17b1cfde77da1bb362f962e639852b853679a56.jpg",
          mid: 33916569,
          name: "熊屋_"
        },
        pages: [
          {
            cid: 49775961,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 199,
            from: "vupload",
            page: 1,
            part: "4 (2)",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/ee255addecc8c1f9c61bb854b96dc2d6d45c606c.jpg",
        pubdate: 1533620802,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28734092,
          coin: 12,
          danmaku: 1,
          dislike: 0,
          favorite: 19,
          his_rank: 0,
          like: 32,
          now_rank: 0,
          reply: 7,
          share: 1,
          view: 874
        },
        state: -100,
        tid: 24,
        title: "[Darling in the Franxx]因为我们13部队是一家人啊",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28729478,
        attribute: 16512,
        cid: 49766687,
        copyright: 1,
        ctime: 1533614675,
        desc: "bgm:彼女は旅に出る\\n我的英雄学院实在是,太太太太太太太太好看了!!!!吹爆我英!!!真的具TM好看,我永远爱着绿谷小天使/咔酱/轰总/茶爷/欧叔/渡我/...(省略),真的,我英真的很棒,b萌轰总下一场和小天使对,自己人打自己人,咔酱对闪闪,简直死亡分组)\\nqaq手书里的绿毛是up我了,刚开始因为画风,然后一直没看,我朋友安利过我很多次了,后面是没东西看了,然后去看我英,然后 出不来了!!\\n此生无悔入我英,祝小伙伴们食用愉快【比心】",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 205,
        dynamic: "#我的英雄学院##手书##all出#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/a42c2ed64c15f8f782597a6a2d8dfc14064c8539.jpg",
          mid: 8882876,
          name: "七月萤兮"
        },
        pages: [
          {
            cid: 49766687,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 205,
            from: "vupload",
            page: 1,
            part: "Pixgram_2018-08-06-05-51-39",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/78ea20ba7fa688185ef8def45bd6b27ba142a1aa.jpg",
        pubdate: 1533614675,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28729478,
          coin: 33,
          danmaku: 33,
          dislike: 0,
          favorite: 30,
          his_rank: 0,
          like: 43,
          now_rank: 0,
          reply: 42,
          share: 12,
          view: 807
        },
        state: -100,
        tid: 47,
        title: "【七月萤兮/我的英雄学院手书】我的小英雄",
        tname: "短片·手书·配音",
        videos: 1
      },
      {
        aid: 28729392,
        attribute: 16512,
        cid: 49765760,
        copyright: 1,
        ctime: 1533614699,
        desc: "bgm:Re:rain",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1434
        },
        duration: 290,
        dynamic: "#日本场应援2018##恋爱##我的青春恋爱物语果然有问题#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/18ca4971240d76810158623d7c75240e675f4874.jpg",
          mid: 31451891,
          name: "骑士王SABER233"
        },
        pages: [
          {
            cid: 49765760,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1434
            },
            duration: 290,
            from: "vupload",
            page: 1,
            part: "我的青春恋爱物语果然有问题 (1)",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/7b8058ac794060dbefac6e00256185bea88dcf7a.jpg",
        pubdate: 1533614699,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28729392,
          coin: 6,
          danmaku: 6,
          dislike: 0,
          favorite: 14,
          his_rank: 0,
          like: 21,
          now_rank: 0,
          reply: 13,
          share: 7,
          view: 1101
        },
        state: 0,
        tid: 24,
        title: "【我的青春恋爱物语果然有问题】那个房间依旧演绎着永不终结的日常",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28728563,
        attribute: 16512,
        cid: 49764773,
        copyright: 1,
        ctime: 1533613174,
        desc: "ooc警告!!!!!!!!!!\\n开头声音不知道为什么爆炸了,小心啊(虽然我觉得没人看简介)\\n本家手书:sm7598520\\n是半成品(但是不会画完,因为懒)\\n作品是闪恩向向,伊斯塔凛厨慎入",
        dimension: {
          height: 704,
          rotate: 0,
          width: 1280
        },
        duration: 81,
        dynamic: "#日本场应援2018##bilibili moe#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/b8c804b83b724a75dbd695114b8e94fa0fd5c8b6.jpg",
          mid: 5246707,
          name: "鸦青夙"
        },
        pages: [
          {
            cid: 49764773,
            dimension: {
              height: 704,
              rotate: 0,
              width: 1280
            },
            duration: 81,
            from: "vupload",
            page: 1,
            part: "bandicam 2018-08-07 10-52-36-456",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/7a09ba0de0d85a3062aac90740382b6d96b24cac.jpg",
        pubdate: 1533646608,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28728563,
          coin: 88,
          danmaku: 38,
          dislike: 0,
          favorite: 101,
          his_rank: 0,
          like: 149,
          now_rank: 0,
          reply: 50,
          share: 27,
          view: 4009
        },
        state: -100,
        tid: 47,
        title: "【描绘】那什么的吉尔伽美什",
        tname: "短片·手书·配音",
        videos: 1
      },
      {
        aid: 28728539,
        attribute: 16768,
        cid: 49763239,
        copyright: 1,
        ctime: 1533613312,
        desc: "原图作者:@micsu3_3   \\n一时兴起录的勾线视频 \\n因为我就是被这张图拉入闪恩 就当给闪闪应援了\\nBGM发在弹幕里   \\n作者大大只在图里做了签名 但是微博p站都找不到了\\n有人知道求发我一下",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 901,
        dynamic: "#日本场应援2018##手绘##板绘#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/b0129594cbf7b0472760055e06619ff38ca5bd82.jpg",
          mid: 101222463,
          name: "-吾生-"
        },
        pages: [
          {
            cid: 49763239,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 901,
            from: "vupload",
            page: 1,
            part: "金闪闪小恩",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/71b0f51ca97edab7f09ebe06d0a6d8df68968022.jpg",
        pubdate: 1533613312,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28728539,
          coin: 65,
          danmaku: 32,
          dislike: 0,
          favorite: 38,
          his_rank: 0,
          like: 48,
          now_rank: 0,
          reply: 25,
          share: 9,
          view: 1705
        },
        state: -100,
        tid: 162,
        title: "(封面勾线)闪恩 超舒服的勾线教程 金闪闪应援  原图@micsu3_3",
        tname: "绘画",
        videos: 1
      },
      {
        aid: 28726197,
        attribute: 16768,
        cid: 49760343,
        copyright: 1,
        ctime: 1533610523,
        desc: "素材 DARLING in the FRANXX\\nBGM lie 三无MarBlue\\n02应援 希望大家多多支持02",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 177,
        dynamic: "#日本场应援2018##02##剪辑#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/9584df17eab3fa95f602a0f786c30fa40848aedd.jpg",
          mid: 180306090,
          name: "黑火saki"
        },
        pages: [
          {
            cid: 49760343,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 177,
            from: "vupload",
            page: 1,
            part: "催泪 02应援 DARLING in the FRANXX BGM超燃",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/28862cff8571c64f8b1c366da7cfb2214cb0e8de.jpg",
        pubdate: 1533610523,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28726197,
          coin: 45,
          danmaku: 1,
          dislike: 0,
          favorite: 32,
          his_rank: 0,
          like: 53,
          now_rank: 0,
          reply: 23,
          share: 10,
          view: 1279
        },
        state: 0,
        tid: 183,
        title: "催泪 02应援 DARLING in the FRANXX BGM超燃",
        tname: "影视剪辑",
        videos: 1
      },
      {
        aid: 28724349,
        attribute: 16768,
        cid: 49753999,
        copyright: 1,
        ctime: 1533609970,
        desc: "为02和广主席疯狂打call!\\n封面pixiv画师:星晓吻",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 235,
        dynamic: "#AMV##MAD##新人向#国家队虽然瑕疵挺多,但这不妨它成为今年上半年给我留下印象最深的日本动画。",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/0a735c9ff4fe87d7c0f205a832e59cc59a902694.jpg",
          mid: 8189036,
          name: "幻化涅槃"
        },
        pages: [
          {
            cid: 49753999,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 235,
            from: "vupload",
            page: 1,
            part: "比翼齐飞,终不悔",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/54587be6c0441b911ffa551666efe6e2c21c7ce3.jpg",
        pubdate: 1533609970,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28724349,
          coin: 69,
          danmaku: 12,
          dislike: 0,
          favorite: 67,
          his_rank: 0,
          like: 87,
          now_rank: 0,
          reply: 25,
          share: 22,
          view: 1690
        },
        state: 0,
        tid: 24,
        title: "【02广应援/燃】比翼齐飞,终不悔",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28721456,
        attribute: 16768,
        cid: 49750661,
        copyright: 1,
        ctime: 1533607334,
        desc: "这次画了一个知世,我知道我画残了,完全没有知世小姐姐的那种气质TAT…………cm我也不画了,想不出来。(尾巴我居然忘了…………TAT)我也希望本战大家能多投给这善解人意,为他人着想,又是神助攻的知世几票,我不希望她就此止步于32强~以及,不喜勿喷。",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 238,
        dynamic: "#日本场应援2018##我的小马驹##动画#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/ab1bf911a50086c21707f0f558908c1adda0f8ac.jpg",
          mid: 71304403,
          name: "暮临呀"
        },
        pages: [
          {
            cid: 49750661,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 238,
            from: "vupload",
            page: 1,
            part: "知世拟马",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/7435ec40e0b513949546a93c15661df3dea27f94.jpg",
        pubdate: 1533607334,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28721456,
          coin: 4,
          danmaku: 0,
          dislike: 0,
          favorite: 3,
          his_rank: 0,
          like: 2,
          now_rank: 0,
          reply: 19,
          share: 5,
          view: 322
        },
        state: 0,
        tid: 27,
        title: "[mlp速绘]知世拟马",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28719317,
        attribute: 2113664,
        cid: 49746204,
        copyright: 1,
        ctime: 1533603953,
        desc: "借物表:\\nmodel:Kei\\nmotion:srs\\ncamera:aokana\\nstage:hazi,溯北,怪獣対若大将P,kotami,RedialC\\nmme:角砂糖,下っ腹P,XDOF,Diffusion7,SSAO\\nmusic:無情",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 212,
        dynamic: "#舞蹈MMD##日本场应援2018##新人#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/6061182c896d07597978ff34862d690652f29cf4.jpg",
          mid: 348898917,
          name: "ex陌书"
        },
        pages: [
          {
            cid: 49746204,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 212,
            from: "vupload",
            page: 1,
            part: "無情",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/95039a13d98c56f3281791f33c7b19c6351df1fb.jpg",
        pubdate: 1533603953,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28719317,
          coin: 4,
          danmaku: 1,
          dislike: 0,
          favorite: 53,
          his_rank: 0,
          like: 19,
          now_rank: 0,
          reply: 9,
          share: 10,
          view: 665
        },
        state: 0,
        tid: 25,
        title: "【刀剑乱舞MMD】無情--来自kei咪",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28718973,
        attribute: 16512,
        cid: 49751276,
        copyright: 1,
        ctime: 1533606982,
        desc: "主要内容为管家助理艾克雷亚·艾克雷尔·艾伊克雷亚\\nBGM:ほぼ日P - 家に帰ると妻が必ず死んだふりをしています\\n欢迎加入UP的粉丝群:237213911",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 163,
        dynamic: "#不死者之王##骨傲天##Overlord##新星计划#\\n主要内容为管家助理艾克雷亚·艾克雷尔·艾伊克雷亚\\nBGM:ほぼ日P - 家に帰ると妻が必ず死んだふりをしています\\n欢迎加入UP的粉丝群:237213911",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/a4cbc140157251afb969023ada66e6d7b084bf6e.jpg",
          mid: 4021955,
          name: "红莲妖"
        },
        pages: [
          {
            cid: 49751276,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 163,
            from: "vupload",
            page: 1,
            part: "助理_1",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/dbec0f5b79c77003b9f2065ab5806b1f662d7f06.jpg",
        pubdate: 1533606982,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28718973,
          coin: 37,
          danmaku: 15,
          dislike: 0,
          favorite: 14,
          his_rank: 0,
          like: 85,
          now_rank: 0,
          reply: 38,
          share: 7,
          view: 6447
        },
        state: 0,
        tid: 27,
        title: "【瞎考剧】Overlord:艾克雷亚·艾克雷尔·艾伊克雷亚",
        tname: "综合",
        videos: 1
      },
      {
        aid: 28718963,
        attribute: 16512,
        cid: 49851722,
        copyright: 1,
        ctime: 1533607036,
        desc: "又一个积压了一个多月的视频,花了两天时间憋出来。\\n(才刚用pr的新人啥也不会)\\n很遗憾爱酱的B萌已经落幕了\\n但他的留下反叛精神与钢铁的意志永远不会消失\\n献给伟大的起义领袖,斯巴达克斯\\n(中间部分已3倍速快进,需要也可跳至25:35继续食用)",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 1846,
        dynamic: "#Fate/Grand Order##国服##实况##斯巴达克斯#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/584f66e6583416ef5117910c32fcb5ef26df0e5c.jpg",
          mid: 9366744,
          name: "Actinides"
        },
        pages: [
          {
            cid: 49851722,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 1846,
            from: "vupload",
            page: 1,
            part: "序列 01",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/fb8b9580a2039ca2bb56efcc0315fd911801f27e.jpg",
        pubdate: 1533619025,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28718963,
          coin: 6,
          danmaku: 5,
          dislike: 0,
          favorite: 6,
          his_rank: 0,
          like: 9,
          now_rank: 0,
          reply: 7,
          share: 8,
          view: 822
        },
        state: 0,
        tid: 172,
        title: "我的爱终将毁灭一切压迫!斯巴达克斯主手vs魔性菩萨",
        tname: "手机游戏",
        videos: 1
      },
      {
        aid: 28714933,
        attribute: 16768,
        cid: 78023888,
        copyright: 1,
        ctime: 1533603974,
        desc: "bgm:lemon\\n稍微小改了一下,虽然感觉还有点问题,但之后也没有大改的打算了",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 269,
        dynamic: "#日本场应援2018##命运石之门##石头门#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/b77b86be883edc9e028148d4dbbe30e25f2e8682.jpg",
          mid: 12787286,
          name: "羽室233"
        },
        pages: [
          {
            cid: 78023888,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 269,
            from: "vupload",
            page: 1,
            part: "试下直接删旧源换源0.0",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/fa7894144ea6aa79df078be2b9a427346c569237.jpg",
        pubdate: 1533603974,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28714933,
          coin: 51,
          danmaku: 2,
          dislike: 0,
          favorite: 24,
          his_rank: 0,
          like: 35,
          now_rank: 0,
          reply: 24,
          share: 14,
          view: 1094
        },
        state: 0,
        tid: 24,
        title: "【命运石之门】误入α线——你待在这里,只不过是在梦境中罢了",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28714440,
        attribute: 2113920,
        cid: 49737324,
        copyright: 1,
        ctime: 1533603986,
        desc: "高三那年看了游戏人生zero,过了很久才释然...\\n“我其实不想给任何人的...喜欢里克的心情,不想和他分开的心情,毕竟很害羞啊!从里克那得到的多到数不清的系统错误,这些都是只属于休比自己的东西,现在要把这些交给你们,这意味着什么?你们给我明白啊!笨蛋!别在那啰里啰唆!给我把这份思念继承下去啊!\\n给我把应援票投给休比啊!w\\n给我把关注和硬币投up主啊!(误)“\\n休比,祝你终有一天能与自己重要的人重逢.\\n\\n封面截自BD  0:55:56\\nbgm:befall(崩三女王降临印象曲)",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 235,
        dynamic: "#日本场应援2018##新星计划##游戏人生zero#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/0e0c4b99b95726bf34c62122effa08c4e1e36e11.jpg",
          mid: 35578381,
          name: "阴久晴"
        },
        pages: [
          {
            cid: 49737324,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 235,
            from: "vupload",
            page: 1,
            part: "游戏人生",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/527eb42364d323d9c171be6cce97178c7b140656.jpg",
        pubdate: 1533616201,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28714440,
          coin: 70,
          danmaku: 9,
          dislike: 0,
          favorite: 39,
          his_rank: 0,
          like: 72,
          now_rank: 0,
          reply: 17,
          share: 11,
          view: 967
        },
        state: 1,
        tid: 24,
        title: "【游戏人生/休比应援】当给休比配上崩三的bgm,悲剧是否能够改变",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28714349,
        attribute: 16512,
        cid: 49738002,
        copyright: 1,
        ctime: 1533603990,
        desc: "第一次剪视频,完全用爱发电爆肝赶在凛凛本战的时候做完,做得不好的地方还请大家包容啦。\\n他们俩真好嘤嘤嘤,凛凛、哈鲁冲鸭!\\n事先声明,里面混有玻璃渣,但结局绝对是甜的!绝对!!",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 306,
        dynamic: "#日本场应援2018##凛遥##Free!#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/7c8e6063dbcbe34411c761c1645038e49f19a5cf.jpg",
          mid: 4902600,
          name: "浮声"
        },
        pages: [
          {
            cid: 49738002,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 306,
            from: "vupload",
            page: 1,
            part: "free",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/df18b2ffe096c285a8b6f1953cd75a5429ee6de7.jpg",
        pubdate: 1533603990,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28714349,
          coin: 177,
          danmaku: 70,
          dislike: 0,
          favorite: 214,
          his_rank: 0,
          like: 173,
          now_rank: 0,
          reply: 84,
          share: 29,
          view: 2883
        },
        state: 0,
        tid: 24,
        title: "【Free!凛遥】【愛してるのに、愛せない】爱着你、却无法爱你",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28712030,
        attribute: 16768,
        cid: 49732205,
        copyright: 1,
        ctime: 1533604e3,
        desc: "永不放弃努力前行 是想抓住梦想的翅膀\\n时至今日 想要传达的心愿无法按捺 在心中迸发\\n动摇的心或有迷茫 即使如此也要向前\\n相信会有风停雨散\\n向着明天前行  得以遇见Sunshine!\\n昂首便是万里晴空",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 282,
        dynamic: "#日本场应援2018##MAD.AMV##MAD##Aqours##lovelive#\\n永不放弃努力前行 是想抓住梦想的翅膀\\n时至今日 想要传达的心愿无法按捺 在心中迸发\\n动摇的心或有迷茫 即使如此也要向前\\n相信会有风停雨散\\n向着明天前行  得以遇见Sunshine!\\n昂首便是万里晴空",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/0630cf1774548a15fe62fe93de01f76f91232dbb.jpg",
          mid: 177444763,
          name: "希大0723"
        },
        pages: [
          {
            cid: 49732205,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 282,
            from: "vupload",
            page: 1,
            part: "序列 01",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/edccc6da7934da5cf39e095bedbcbffc8f1f66ba.jpg",
        pubdate: 1533604e3,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28712030,
          coin: 27,
          danmaku: 2,
          dislike: 0,
          favorite: 11,
          his_rank: 0,
          like: 19,
          now_rank: 0,
          reply: 5,
          share: 2,
          view: 787
        },
        state: -4,
        tid: 24,
        title: "【Aqours BD7纪念】キセキヒカル 奇迹闪耀",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28711339,
        attribute: 16768,
        cid: 49733160,
        copyright: 1,
        ctime: 1533584227,
        desc: "士郎加油,喜欢的话推荐收藏一下哦!",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 255,
        dynamic: "#日本场应援2018##卫宫士郎##AMV#",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/78527264bbbb4c1370ffb1c57c999c3984323dd6.jpg",
          mid: 66862188,
          name: "伊卡伊卡w"
        },
        pages: [
          {
            cid: 49733160,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 255,
            from: "vupload",
            page: 1,
            part: "【AMV·卫宫士郎应援】“输给谁都可以,但是,决不能输给自己!”",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/ead76899d19cdbe371b1a646c13a8ec850e89040.jpg",
        pubdate: 1533584227,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28711339,
          coin: 25,
          danmaku: 9,
          dislike: 0,
          favorite: 46,
          his_rank: 0,
          like: 56,
          now_rank: 0,
          reply: 19,
          share: 16,
          view: 2037
        },
        state: 0,
        tid: 24,
        title: "【AMV·卫宫士郎应援】“输给谁都可以,但是,决不能输给自己!”",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28710374,
        attribute: 16512,
        cid: 49727323,
        copyright: 1,
        ctime: 1533604007,
        desc: "尝试去讲一个机器人少女拥有心的故事,于是选用了镜音的这首歌曲,同时和花たん的翻唱结合做音频处理,试图从休比的个体视角,而不是故事的全局视角,去表现少女从“无心”到拥有“心”的升华过程。\\n\\n素材:no game no life 0(游戏人生剧场版)\\nBGM:ココロ(镜音+花たん,UP主剪辑版)",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 312,
        dynamic: "#日本场应援2018##休比·多拉##休比# 还是太赶了,待打磨的地方太多,完成度三成吧",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/fe4a7d538ddbcba7bf28a2bf1b29965ac1d2a6b5.jpg",
          mid: 16386653,
          name: "精神隶属机"
        },
        pages: [
          {
            cid: 49727323,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 312,
            from: "vupload",
            page: 1,
            part: "心·机凯",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/841ef5644f90f16633bb5b17201bd73932bd8e38.jpg",
        pubdate: 1533604007,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28710374,
          coin: 706,
          danmaku: 111,
          dislike: 0,
          favorite: 353,
          his_rank: 0,
          like: 607,
          now_rank: 0,
          reply: 109,
          share: 113,
          view: 12415
        },
        state: -100,
        tid: 24,
        title: "【游戏人生ZERO】心·机凯——那是名为“心”的奇迹(ココロ・エクスマキナ)",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28709514,
        attribute: 2113920,
        cid: 49728720,
        copyright: 1,
        ctime: 1533609142,
        desc: '青叶可真是个罪孽深重的女人,没有青叶看我要死了("▔□▔)/\\n请大家为青叶投上宝贵的一票!!\\nbgm:恋爱循环香菜版',
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 204,
        dynamic: "#日本场应援2018##新星计划##凉风青叶#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/0e0c4b99b95726bf34c62122effa08c4e1e36e11.jpg",
          mid: 35578381,
          name: "阴久晴"
        },
        pages: [
          {
            cid: 49728720,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 204,
            from: "vupload",
            page: 1,
            part: "凉风青叶",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/be899252235f5fbc3f432d354fad87e59e79a8d3.jpg",
        pubdate: 1533634233,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28709514,
          coin: 29,
          danmaku: 25,
          dislike: 0,
          favorite: 16,
          his_rank: 0,
          like: 35,
          now_rank: 0,
          reply: 12,
          share: 10,
          view: 411
        },
        state: 1,
        tid: 24,
        title: '【青叶应援】没有青叶看我要死了("▔□▔)/青叶赛高',
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28708306,
        attribute: 2113664,
        cid: 50233770,
        copyright: 1,
        ctime: 1533604016,
        desc: "自制,借物表见视频内\\n摸鱼,这次算填完一个坑,于是顺便把它当做了应援视频,虽然感觉发的时间有点微妙\\n很喜欢这首歌的动作数据,感觉和波特莫名契合,很可爱",
        dimension: {
          height: 768,
          rotate: 0,
          width: 1366
        },
        duration: 194,
        dynamic: "",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/63f3fe9708a4dfb9158d5a1d845e3f1bfa04592a.jpg",
          mid: 6565661,
          name: "Tiua"
        },
        pages: [
          {
            cid: 50233770,
            dimension: {
              height: 768,
              rotate: 0,
              width: 1366
            },
            duration: 194,
            from: "vupload",
            page: 1,
            part: "0",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/2b3bf7256a573bfb5a1d1c2ac8308a5724ec0859.jpg",
        pubdate: 1533604016,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28708306,
          coin: 8,
          danmaku: 1,
          dislike: 0,
          favorite: 16,
          his_rank: 0,
          like: 15,
          now_rank: 0,
          reply: 7,
          share: 7,
          view: 397
        },
        state: 0,
        tid: 25,
        title: "【女神异闻录5MMD】波特的染上你的颜色",
        tname: "MMD·3D",
        videos: 1
      },
      {
        aid: 28707654,
        attribute: 16640,
        cid: 49726539,
        copyright: 1,
        ctime: 1533604019,
        desc: "=-=想哭了,感觉莫名对不到节奏\\n但总之是吧之前的遗憾略微弥补了一下(真的是略微)哭\\n因为里克违背了誓约,所以他注定要失去一切(哭)\\nMAD很一般,不知道是做的烂还是审美疲劳了(我觉得是做的烂)\\n请审核大佬放过~呜呜呜",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 255,
        dynamic: "#日本场应援2018##里克##休比#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/67c1f2995c2b69abef1e952eb01d6e72a3a249c1.jpg",
          mid: 6410318,
          name: "玖钥桑"
        },
        pages: [
          {
            cid: 49726539,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 255,
            from: "vupload",
            page: 1,
            part: "无标题2",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/e8f2e8e8bf2461dbabaf0352cbc28c8a7bca78cf.jpg",
        pubdate: 1533604019,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 0,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28707654,
          coin: 21,
          danmaku: 4,
          dislike: 0,
          favorite: 20,
          his_rank: 0,
          like: 37,
          now_rank: 0,
          reply: 17,
          share: 11,
          view: 945
        },
        state: 0,
        tid: 24,
        title: "【游戏人生ZERO/MAD/终极应援】违背了誓约,我注定失去这一切",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28707213,
        attribute: 16768,
        cid: 49725419,
        copyright: 1,
        ctime: 1533604022,
        desc: "虽然用很多时间搞,但是依然做的很烂",
        dimension: {
          height: 1080,
          rotate: 0,
          width: 1920
        },
        duration: 87,
        dynamic: "#日本场应援2018##AMV##fate#",
        mission_id: 10568,
        owner: {
          face: "http://i1.hdslb.com/bfs/face/147a6f160a5cc3364828bf2ad10909d6bf2ff082.jpg",
          mid: 4961140,
          name: "凉宫杏夏"
        },
        pages: [
          {
            cid: 49725419,
            dimension: {
              height: 1080,
              rotate: 0,
              width: 1920
            },
            duration: 87,
            from: "vupload",
            page: 1,
            part: "序列 03",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i2.hdslb.com/bfs/archive/b6969e7eb14eb1854d094c95d243e3356a88719f.jpg",
        pubdate: 1533604022,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 1,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28707213,
          coin: 7,
          danmaku: 5,
          dislike: 0,
          favorite: 14,
          his_rank: 0,
          like: 23,
          now_rank: 0,
          reply: 10,
          share: 8,
          view: 967
        },
        state: 0,
        tid: 24,
        title: "【AMV】高燃,最爱的红色Archer和红色的魔法师",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28705483,
        attribute: 16512,
        cid: 49722687,
        copyright: 1,
        ctime: 1533574047,
        desc: "bgm很老了,小学生估计都没听过",
        dimension: {
          height: 720,
          rotate: 0,
          width: 1280
        },
        duration: 112,
        dynamic: "#日本场应援2018##AMV##MAD#",
        mission_id: 10568,
        owner: {
          face: "http://i2.hdslb.com/bfs/face/39f667b341cf21827cd7ae81f68da3081934ac82.jpg",
          mid: 97248224,
          name: "bili_97248224"
        },
        pages: [
          {
            cid: 49722687,
            dimension: {
              height: 720,
              rotate: 0,
              width: 1280
            },
            duration: 112,
            from: "vupload",
            page: 1,
            part: "【龙王的工作】八一x空银子,只对你有感觉",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i0.hdslb.com/bfs/archive/9925518d391f52287c1a11e0b1f13f87505ed3f5.jpg",
        pubdate: 1533574047,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28705483,
          coin: 15,
          danmaku: 3,
          dislike: 0,
          favorite: 11,
          his_rank: 0,
          like: 24,
          now_rank: 0,
          reply: 10,
          share: 11,
          view: 1389
        },
        state: 0,
        tid: 24,
        title: "【龙王的工作】八一x空银子,只对你有感觉",
        tname: "MAD·AMV",
        videos: 1
      },
      {
        aid: 28705200,
        attribute: 16512,
        cid: 49719266,
        copyright: 1,
        ctime: 1533604035,
        desc: "原作:《孤独的巡礼/孤独な巡礼》\\n出自作品:Fate/Stay Night\\n作者:川井宪次\\n演奏乐器:钢琴/小提琴\\nSTAFF:钢琴/小提琴/COS/后期:Kino\\n终于翻了自己从刚入fate坑就特别喜欢的这首歌~!\\n一人全役了整首歌,有许多不足,还请各位dalao们指正~\\n一人制作辛苦,如果喜欢希望能给点个赞啦~比心(๑•̀ㅁ•́ฅ)\\n(原声乐器的录音好蓝瘦QWQ)\\n这次试了远坂凛在Fate/Grand Order中的概念礼装元素转换的COS,凛酱赛高!我永远喜欢远坂凛.JPG \\n(虽然这是Saber的",
        dimension: {
          height: 480,
          rotate: 0,
          width: 640
        },
        duration: 116,
        dynamic: "#fate##日本场应援2018#终于翻了自己从刚入fate坑就特别喜欢的《孤独的巡礼》,试了远坂凛在Fate/Grand Order中的概念礼装元素转换的COS,凛酱赛高!我永远喜欢远坂凛.JPG。一人全役了整首歌,有许多不足,还请各位dalao们指正~",
        mission_id: 10568,
        owner: {
          face: "http://i0.hdslb.com/bfs/face/71f384ff3ed0a7a9b3e7cad28cedbb988ca16173.jpg",
          mid: 3575182,
          name: "LogicKino"
        },
        pages: [
          {
            cid: 49719266,
            dimension: {
              height: 480,
              rotate: 0,
              width: 640
            },
            duration: 116,
            from: "vupload",
            page: 1,
            part: "孤独的巡礼",
            vid: "",
            weblink: ""
          }
        ],
        pic: "http://i1.hdslb.com/bfs/archive/3f54e6e37135ad042b49b66e75f1d0495321fd46.jpg",
        pubdate: 1533604035,
        rights: {
          autoplay: 1,
          bp: 0,
          download: 0,
          elec: 0,
          hd5: 0,
          is_cooperation: 0,
          movie: 0,
          no_background: 0,
          no_reprint: 1,
          pay: 0,
          ugc_pay: 0,
          ugc_pay_preview: 0
        },
        stat: {
          aid: 28705200,
          coin: 122,
          danmaku: 10,
          dislike: 0,
          favorite: 30,
          his_rank: 0,
          like: 82,
          now_rank: 0,
          reply: 64,
          share: 16,
          view: 2323
        },
        state: 0,
        tid: 59,
        title: "【一人全役】【钢琴&小提琴】孤独的巡礼 Fate/Stay Night插入曲【B萌日本场应援】",
        tname: "演奏",
        videos: 1
      }
    ],
    mid: 26468955,
    mlid: 182603655,
    mtime: 1533874759,
    name: "bilibili moe 2018 日本动画场应援",
    owner: {
      face: "http://i2.hdslb.com/bfs/face/57389d533621407d36981a99fed93834dd8b20e6.jpg",
      mid: 26468955,
      name: "萌战基"
    },
    pid: 769,
    play_count: 0,
    recent_oids: [
      28705200,
      28705483,
      28707213
    ],
    recent_res: [
      {
        oid: 28705200,
        typ: 2
      },
      {
        oid: 28705483,
        typ: 2
      },
      {
        oid: 28707213,
        typ: 2
      }
    ],
    reply_count: 0,
    share_count: 0,
    stat: {
      favorite: 1685,
      pid: 769,
      reply: 10,
      share: 0,
      view: 298928
    },
    state: 0,
    type: 2
  };

  // src/utils/hook/webpack.ts
  init_tampermonkey();
  var arr = [];
  var param = [];
  var length;
  var Webpack = class _Webpack {
    static load = false;
    backup = window.webpackJsonp;
    constructor() {
      _Webpack.load = true;
      Reflect.defineProperty(window, "webpackJsonp", {
        configurable: true,
        set: (v) => {
          typeof v === "function" && (this.backup = v);
          return true;
        },
        get: () => {
          return this.backup && ((chunkIds, moreModules, executeModules) => {
            var _a3;
            const len = (_a3 = moreModules.length) != null ? _a3 : length;
            if (len in arr) {
              const obj = arr[len];
              const pam = param[len];
              Object.entries(obj).forEach((d) => {
                let code = moreModules[d[0]];
                if (code) {
                  code = code.toString();
                  d[1].forEach((e) => code = e(code));
                  moreModules[d[0]] = new Function(pam[0], pam[1], pam[2], \`(\${code})(\${pam[0]},\${pam[1]},\${pam[2]})\`);
                } else {
                  length = len;
                }
              });
            }
            return this.backup(chunkIds, moreModules, executeModules);
          });
        }
      });
    }
  };
  function webpackHook(len, pos, rpc, params = ["t", "e", "i"]) {
    Webpack.load || new Webpack();
    if (!arr[len]) {
      arr[len] = {};
      param[len] = params;
    }
    arr[len][pos] = arr[len][pos] || [];
    arr[len][pos].push((code) => rpc(code));
  }

  // src/page/bangumi.ts
  init_tampermonkey();

  // src/html/bangumi.html
  var bangumi_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8" />\\r\\n    <title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <meta name="keywords"\\r\\n        content="Bilibili,哔哩哔哩,哔哩哔哩动画,哔哩哔哩弹幕网,弹幕视频,B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,二次元,游戏视频,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid,日本动漫,国产动漫,手机游戏,网络游戏,电子竞技,ACG燃曲,ACG神曲,追新番,新番动漫,新番吐槽,巡音,镜音双子,千本樱,初音MIKU,舞蹈MMD,MIKUMIKUDANCE,洛天依原创曲,洛天依翻唱曲,洛天依投食歌,洛天依MMD,vocaloid家族,OST,BGM,动漫歌曲,日本动漫音乐,宫崎骏动漫音乐,动漫音乐推荐,燃系mad,治愈系mad,MAD MOVIE,MAD高燃" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩" />\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/bangumi/play/css/bangumi-play.0.809bd6f6d1fba866255d2e6c5dc06dabba9ce8b4.css" />\\r\\n    <style type="text/css">\\r\\n        .new-entry {\\r\\n            display: none;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container has-menu"></div>\\r\\n    <div id="app" data-server-rendered="true" class="main-container"></div>\\r\\n    <div class="footer bili-footer report-wrap-module" id="home_footer"></div>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/vip/dist/js/vipPlugin.v2.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/promise.auto.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/plugin/vip/BilAccountThaw.js"><\\/script>\\r\\n    <script>\\r\\n        window.__INITIAL_STATE__ = { activity: {}, app: false, area: 0, canReview: false, epId: -1, epInfo: {}, epList: [], epStat: { isPay: false, isVip: false, payPack: 0, status: 0, vipNeedPay: false }, isPlayerTrigger: false, loginInfo: { isLogin: false }, mdId: -1, mediaInfo: {}, mediaRating: {}, miniOn: 0, newestEp: {}, paster: {}, payMent: {}, payPack: {}, playerRecomList: [], pubInfo: {}, recomList: [], rightsInfo: {}, seasonFollowed: false, seasonList: [], seasonStat: { coins: 0, danmakus: 0, favorites: 0, views: 0 }, special: false, spending: 0, sponsorTotal: { code: 0, result: { ep_bp: 0, list: [], mine: {}, users: 0 } }, sponsorTotalCount: 0, sponsorWeek: { code: 0, result: { ep_bp: 0, list: [], mine: {}, users: 0 } }, ssId: -1, ssStat: { isPay: false, isVip: false, payPack: 0, status: 0, vipNeedPay: false }, upInfo: {}, userCoined: false, userLongReview: {}, userScore: 0, userShortReview: {}, userStat: { error: true, follow: 0, loaded: true, pay: 0, payPackPaid: 0, sponsor: 0, vipInfo: { due_date: 0, status: 0, type: 0 }, watchProgress: { lastEpId: -1, lastEpIndex: "", lastTime: 0 } }, ver: {} }; (function () { Reflect.deleteProperty(window, "webpackJsonp"); Reflect.deleteProperty(window, "_babelPolyfill"); var s; (s = document.currentScript || document.scripts[document.scripts.length - 1]).parentNode.removeChild(s); }());\\r\\n    <\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/bangumi/play/1.bangumi-play.809bd6f6d1fba866255d2e6c5dc06dabba9ce8b4.js"\\r\\n        crossorigin=""><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/bangumi/play/bangumi-play.809bd6f6d1fba866255d2e6c5dc06dabba9ce8b4.js"\\r\\n        crossorigin=""><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/io/api-global-view.ts
  init_tampermonkey();
  var ApiGlobalOgvView = class extends ApiSign {
    constructor(data, server = "api.global.bilibili.com") {
      super(URLS.GLOBAL_OGV_VIEW.replace("api.global.bilibili.com", server), "7d089525d3611b1c");
      this.data = data;
      this.data = Object.assign({
        build: 108003,
        mobi_app: "bstar_a",
        s_locale: "zh_SG"
      }, data);
    }
    async getDate() {
      const response = await fetch(this.sign().toJSON());
      const json = await response.json();
      return jsonCheck(json).result;
    }
  };

  // src/io/api-pgc-season.ts
  init_tampermonkey();
  async function apiPgcSeason(data) {
    const response = await fetch(objUrl(URLS.PGC_SEASON, data), { credentials: "include" });
    const json = await response.json();
    return jsonCheck(json).result;
  }

  // src/io/api-player.ts
  init_tampermonkey();
  var PlayerResponse = class {
    constructor(aid, cid, has_next = false) {
      this.aid = aid;
      this.cid = cid;
      this.has_next = has_next;
    }
    allow_bp = false;
    answer_status = 0;
    bgm_info;
    block_time = 0;
    fawkes = { config_version: 18964, ff_version: 21289 };
    guide_attention = [];
    ip_info = { city: "", country: "中国", ip: "", province: "", zone_id: 0, zone_ip: "" };
    is_owner = false;
    is_ugc_pay_preview = false;
    jump_card = [];
    last_play_cid = 0;
    last_play_time = 0;
    level_info = { current_level: 0, current_min: 0, current_exp: 0, next_exp: 0, level_up: 0 };
    login_mid = 0;
    login_mid_hash = "";
    max_limit = 1e3;
    name = "";
    no_share = false;
    now_time = (/* @__PURE__ */ new Date()).getTime() / 1e3;
    online_count = 1;
    online_switch = { enable_gray_dash_playback: "500", new_broadcast: "1", realtime_dm: "1", subtitle_submit_switch: "1" };
    operation_card = [];
    options = { is_360: false, without_vip: false };
    page_no = 1;
    pcdn_loader = {
      dash: {
        labels: { pcdn_video_type: "dash", pcdn_stage: "release", pcdn_group: "nil", pcdn_version: "nil", pcdn_vendor: "nil" }
      },
      flv: {
        labels: { pcdn_video_type: "flv", pcdn_stage: "release", pcdn_group: "nil", pcdn_version: "nil", pcdn_vendor: "nil" }
      }
    };
    permission = 0;
    preview_toast = "为创作付费,购买观看完整视频|购买观看";
    role = "";
    show_switch = { long_progress: false };
    subtitle = { allow_submit: false, lan: "", lan_doc: "", subtitles: [] };
    toast_block = false;
    view_points = [];
    vip = {
      avatar_subscript: 0,
      avatar_subscript_url: "",
      due_date: 0,
      label: {
        bg_color: "",
        bg_style: 0,
        border_color: "",
        img_label_uri_hans: "",
        img_label_uri_hans_static: "",
        img_label_uri_hant: "",
        img_label_uri_hant_static: "",
        label_theme: "",
        path: "",
        text: "",
        text_color: "",
        use_img_label: false
      },
      nickname_color: "",
      role: 0,
      status: 0,
      theme_type: 0,
      tv_vip_pay_type: 0,
      tv_vip_status: 0,
      type: 0,
      vip_pay_type: 0
    };
  };

  // src/io/api-season-section.ts
  init_tampermonkey();
  var ApiSeasonSection = class {
    fetch;
    constructor(season_id) {
      this.fetch = fetch(objUrl(URLS.SEASON_STATUS, { season_id }), { credentials: "include" });
    }
    async getDate() {
      const response = await this.fetch;
      const json = await response.json();
      return jsonCheck(json).result;
    }
    async toEpisodes() {
      const res = await this.getDate();
      return res.main_section.episodes.concat(...res.section.map((d) => d.episodes)).map((d) => {
        d.ep_id = d.id;
        d.episode_status = d.status;
        d.index = d.title;
        d.index_title = d.long_title;
        d.premiere = Boolean(d.is_premiere);
        return d;
      });
    }
  };

  // src/io/api-season-status.ts
  init_tampermonkey();
  async function apiSeasonStatus(data) {
    const response = await fetch(objUrl(URLS.SEASON_STATUS, data), { credentials: "include" });
    const json = await response.json();
    return jsonCheck(json).result;
  }

  // src/io/api-tag-info.ts
  init_tampermonkey();
  async function apiTagInfo(tag_name) {
    const response = await fetch(objUrl(URLS.TAG_INFO, { tag_name }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/io/api-tag-top.ts
  init_tampermonkey();
  async function apiTagTop(tid) {
    const response = await fetch(objUrl(URLS.TAG_TOP, { tid }));
    const json = await response.json();
    return jsonCheck(json).data;
  }

  // src/page/bangumi.ts
  var PageBangumi = class extends Page {
    like;
    get ssid() {
      return BLOD.ssid;
    }
    set ssid(v) {
      BLOD.ssid = v;
    }
    get epid() {
      return BLOD.epid;
    }
    set epid(v) {
      BLOD.epid = v;
    }
    get th() {
      return BLOD.th;
    }
    set th(v) {
      BLOD.th = v;
    }
    get limit() {
      return BLOD.limit;
    }
    set limit(v) {
      BLOD.limit = v;
    }
    get pgc() {
      return BLOD.pgc;
    }
    set pgc(v) {
      BLOD.pgc = v;
    }
    /** 播放额外参数 */
    playerExtraParams;
    /** 字幕暂存 */
    subtitles = [];
    constructor() {
      var _a3;
      super(bangumi_default);
      Reflect.deleteProperty(window, "__INITIAL_STATE__");
      Reflect.defineProperty(window, "__NEXT_DATA__", { value: true });
      this.like = new Like();
      new Comment2();
      window.__Iris__ = true;
      this.pgc = true;
      location.href.replace(/[sS][sS]\\d+/, (d) => this.ssid = Number(d.substring(2)));
      location.href.replace(/[eE][pP]\\d+/, (d) => this.epid = Number(d.substring(2)));
      this.recommend();
      this.seasonCount();
      ((_a3 = user.userStatus.videoLimit) == null ? void 0 : _a3.status) && this.videoLimit();
      this.related();
      this.initialState();
      this.enLike();
      this.episodeData();
      Header.prid = 1612;
      Header.primaryMenu();
      Header.banner();
      this.updateDom();
    }
    /** 修复:末尾番剧推荐 */
    recommend() {
      xhrHook("api.bilibili.com/pgc/web/recommend/related/recommend", (args) => {
        args[1] = args[1].replace("web/recommend", "season/web");
      }, (r) => {
        try {
          const result = jsonCheck(r.response);
          result.result = result.data.season;
          r.responseType === "json" ? r.response = result : r.response = r.responseText = JSON.stringify(result);
          propertyHook.modify(window, "getPlayerExtraParams", (d) => {
            return () => {
              this.playerExtraParams = d();
              this.playerExtraParams.recommend = result.result;
              return this.playerExtraParams;
            };
          });
        } catch (e) {
        }
      });
    }
    /** 修复追番数据 */
    seasonCount() {
      xhrHook("bangumi.bilibili.com/ext/web_api/season_count", (args) => {
        args[1] = args[1].replace("bangumi.bilibili.com/ext/web_api/season_count", "api.bilibili.com/pgc/web/season/stat");
      }, (r) => {
        try {
          const result = jsonCheck(r.response);
          result.result.favorites = result.result.follow;
          r.responseType === "json" ? r.response = result : r.response = r.responseText = JSON.stringify(result);
        } catch (e) {
        }
      }, true);
    }
    /** 解除区域限制(重定向模式) */
    videoLimit() {
      xhrHook("bangumi.bilibili.com/view/web_api/season/user/status", void 0, (res) => {
        try {
          const data = res.responseType === "json" ? res.response : JSON.parse(res.response);
          data.result.area_limit = 0;
          data.result.ban_area_show = 0;
          res.responseType === "json" || (res.response = res.responseText = JSON.stringify(data));
        } catch (e) {
        }
      }, false);
    }
    /** 修复相关视频推荐 接口来自md页面 */
    related() {
      const related = {};
      xhrHook.async("x/web-interface/archive/related", () => {
        var _a3, _b2;
        return (_b2 = (_a3 = window.__INITIAL_STATE__) == null ? void 0 : _a3.mediaInfo) == null ? void 0 : _b2.title;
      }, async () => {
        var _a3, _b2;
        let response = { code: 0, data: [], message: "0" };
        if (related[(_b2 = (_a3 = window.__INITIAL_STATE__) == null ? void 0 : _a3.mediaInfo) == null ? void 0 : _b2.title]) {
          response.data = related[window.__INITIAL_STATE__.mediaInfo.title];
        } else {
          await apiTagInfo(window.__INITIAL_STATE__.mediaInfo.title).then((d) => {
            return apiTagTop(d.tag_id);
          }).then((d) => {
            response.data = related[window.__INITIAL_STATE__.mediaInfo.title] = d;
          }).catch((e) => {
            debug.error("相关视频推荐", e);
          });
        }
        return { response, responseType: "json", responseText: JSON.stringify(response) };
      }, false);
    }
    /** 初始化\`__INITIAL_STATE__\` */
    initialState() {
      const data = this.epid ? { ep_id: this.epid } : { season_id: this.ssid };
      Promise.allSettled([apiBangumiSeason(data), apiSeasonStatus(data), new Promise((r) => poll(() => this.initilized, r))]).then((d) => d.map((d2) => d2.status === "fulfilled" && d2.value)).then(async (d) => {
        var _a3;
        const t = window.__INITIAL_STATE__;
        const bangumi = d[0];
        const status = d[1];
        if (status) {
          const i = status.progress ? status.progress.last_ep_id : -1, n = status.progress ? status.progress.last_ep_index : "", s = status.progress ? status.progress.last_time : 0, o = status.vip_info || {};
          !this.epid && i > 0 && (this.epid = i);
          t.userStat = {
            loaded: true,
            error: void 0 === status.pay,
            follow: status.follow || 0,
            pay: status.pay || 0,
            payPackPaid: status.pay_pack_paid || 0,
            sponsor: status.sponsor || 0,
            watchProgress: {
              lastEpId: 0 === i ? -1 : i,
              lastEpIndex: n,
              lastTime: s
            },
            vipInfo: {
              due_date: o.due_date || 0,
              status: o.status || 0,
              type: o.type || 0
            }
          };
          status.paster && (t.paster = status.paster || {});
          this.limit = status.area_limit || 0;
          user.userStatus.videoLimit.status || (t.area = this.limit);
          t.seasonFollowed = 1 === status.follow;
        }
        if (bangumi) {
          let loopTitle2 = function() {
            poll(() => document.title != title, () => {
              document.title = title;
              if (document.title != title)
                loopTitle2();
            });
          };
          var loopTitle = loopTitle2;
          if (bangumi.season_id && bangumi.total_ep && !((_a3 = bangumi.episodes) == null ? void 0 : _a3[0])) {
            await new ApiSeasonSection(bangumi.season_id).toEpisodes().then((d2) => {
              bangumi.episodes = d2;
            }).catch((e) => {
              debug.warn("episodes数据获取出错", e);
            });
          }
          const i = JSON.parse(JSON.stringify(bangumi));
          delete i.episodes;
          delete i.seasons;
          delete i.up_info;
          delete i.rights;
          delete i.publish;
          delete i.newest_ep;
          delete i.rating;
          delete i.pay_pack;
          delete i.payment;
          delete i.activity;
          if (user.userStatus.bangumiEplist)
            delete i.bkg_cover;
          user.userStatus.videoLimit.status && bangumi.rights && (bangumi.rights.watch_platform = 0);
          t.mediaInfo = i;
          t.mediaInfo.bkg_cover && (t.special = true);
          t.ssId = bangumi.season_id || -1;
          t.mdId = bangumi.media_id;
          t.epInfo = this.epid && bangumi.episodes.find((d2) => d2.ep_id == this.epid) || bangumi.episodes[0] || {};
          t.epList = bangumi.episodes || [];
          t.seasonList = bangumi.seasons || [];
          t.upInfo = bangumi.up_info || {};
          t.rightsInfo = bangumi.rights || {};
          t.app = 1 === t.rightsInfo.watch_platform;
          t.pubInfo = bangumi.publish || {};
          t.newestEp = bangumi.newest_ep || {};
          t.mediaRating = bangumi.rating || {};
          t.payPack = bangumi.pay_pack || {};
          t.payMent = bangumi.payment || {};
          t.activity = bangumi.activity || {};
          t.epStat = this.setEpStat(t.epInfo.episode_status || t.mediaInfo.season_status, t.userStat.pay, t.userStat.payPackPaid, t.loginInfo);
          t.epId = Number(this.epid || t.epInfo.ep_id);
          this.ssid = t.ssId;
          this.epid = t.epId;
          if (t.upInfo.mid == /** Classic_Anime */
          677043260 || t.upInfo.mid == /** Anime_Ongoing */
          688418886) {
            this.th = true;
          }
          const title = this.setTitle(t.epInfo.index, t.mediaInfo.title, this.Q(t.mediaInfo.season_type), true);
          loopTitle2();
          videoInfo.bangumiSeason(bangumi);
        } else {
          apiPgcSeason(data).then((bangumi2) => {
            const t2 = window.__INITIAL_STATE__;
            const status2 = bangumi2.user_status;
            if (status2) {
              const i2 = status2.progress ? status2.progress.last_ep_id : -1, n = status2.progress ? status2.progress.last_ep_index : "", s = status2.progress ? status2.progress.last_time : 0, o = status2.vip_info || {};
              !this.epid && i2 > 0 && (this.epid = i2);
              t2.userStat = {
                loaded: true,
                error: void 0 === status2.pay,
                follow: status2.follow || 0,
                pay: status2.pay || 0,
                payPackPaid: status2.pay_pack_paid || 0,
                sponsor: status2.sponsor || 0,
                watchProgress: {
                  lastEpId: 0 === i2 ? -1 : i2,
                  lastEpIndex: n,
                  lastTime: s
                },
                vipInfo: {
                  due_date: o.due_date || 0,
                  status: o.status || 0,
                  type: o.type || 0
                }
              };
              this.limit = status2.area_limit || 0;
              user.userStatus.videoLimit.status || (t2.area = this.limit);
              t2.seasonFollowed = 1 === status2.follow;
            }
            const i = JSON.parse(JSON.stringify(bangumi2));
            delete i.episodes;
            delete i.seasons;
            delete i.up_info;
            delete i.rights;
            delete i.publish;
            delete i.newest_ep;
            delete i.rating;
            delete i.pay_pack;
            delete i.payment;
            delete i.activity;
            i.paster_text = i.record;
            i.season_status = i.status;
            i.season_type = i.type;
            i.series_title = i.series.series_title;
            i.total_ep = i.total !== -1 ? i.total : bangumi2.episodes.length;
            if (user.userStatus.bangumiEplist)
              delete i.bkg_cover;
            user.userStatus.videoLimit.status && bangumi2.rights && (bangumi2.rights.watch_platform = 0);
            t2.mediaInfo = i;
            t2.mediaInfo.bkg_cover && (t2.special = true);
            t2.ssId = bangumi2.season_id || -1;
            t2.mdId = bangumi2.media_id;
            bangumi2.episodes.forEach((d2) => {
              d2.episode_status = d2.status;
              d2.index = d2.title;
              d2.index_title = d2.long_title;
              d2.page = 1;
              d2.premiere = false;
            });
            t2.epInfo = this.epid && bangumi2.episodes.find((d2) => d2.ep_id == this.epid) || bangumi2.episodes[0] || {};
            t2.epList = bangumi2.episodes || [];
            t2.seasonList = bangumi2.seasons || [];
            t2.upInfo = bangumi2.up_info || {};
            t2.rightsInfo = bangumi2.rights || {};
            t2.app = 1 === t2.rightsInfo.watch_platform;
            t2.pubInfo = bangumi2.publish || {};
            t2.newestEp = bangumi2.new_ep || {};
            t2.mediaRating = bangumi2.rating || {};
            t2.payMent = bangumi2.payment || {};
            t2.activity = bangumi2.activity || {};
            t2.epStat = this.setEpStat(t2.epInfo.episode_status || t2.mediaInfo.season_status, t2.userStat.pay, t2.userStat.payPackPaid, t2.loginInfo);
            t2.epId = Number(this.epid || t2.epInfo.ep_id);
            this.ssid = t2.ssId;
            this.epid = t2.epId;
            if (t2.upInfo.mid == /** Classic_Anime */
            677043260 || t2.upInfo.mid == /** Anime_Ongoing */
            688418886) {
              this.th = true;
            }
            const title = this.setTitle(t2.epInfo.index, t2.mediaInfo.title, this.Q(t2.mediaInfo.season_type), true);
            function loopTitle2() {
              poll(() => document.title != title, () => {
                document.title = title;
                if (document.title != title)
                  loopTitle2();
              });
            }
            loopTitle2();
            videoInfo.bangumiSeason(bangumi2);
          }).catch(() => {
            return this.initGlobal();
          });
        }
      }).catch((e) => {
        toast.error("初始化bangumi数据出错!", e)();
      }).finally(() => {
        if (window.__INITIAL_STATE__.special) {
          addCss("#bili-header-m > #banner_link,#bili-header-m > .bili-wrapper{ display: none; }");
        }
        if (document.compatMode === "BackCompat")
          addCss(".header-info > .count-wrapper {height: 18px !important;}");
        window.addEventListener("resize", (e) => {
          const container = document.querySelector(".main-container");
          if (container) {
            setTimeout(() => {
              container.removeAttribute("style");
            });
          }
        });
      });
    }
    /** epStat,用于判定ep状态。同样由于原生缺陷,ep_id初始化时不会更新本信息,需要主动更新 */
    setEpStat(status, pay, payPackPaid, loginInfo) {
      var s = 0, o = false, a = (1 === loginInfo.vipType || 2 === loginInfo.vipType) && 1 === loginInfo.vipStatus, r = "number" == typeof payPackPaid ? payPackPaid : -1;
      return 1 === pay ? s = 0 : 6 === status || 7 === status ? s = loginInfo.isLogin ? a ? 0 : 1 : 2 : 8 === status || 9 === status ? (s = loginInfo.isLogin ? 1 : 2, o = true) : 12 === status ? s = loginInfo.isLogin ? 1 === r ? 0 : 1 : 2 : 13 === status && (s = loginInfo.isLogin ? a ? 0 : 1 : 2), {
        status: s,
        isPay: 6 === status || 7 === status || 8 === status || 9 === status || 12 === status || 13 === status,
        isVip: a,
        vipNeedPay: o,
        payPack: r
      };
    }
    /** 更新标题 */
    setTitle(t, e, i, n) {
      var s = !(arguments.length > 4 && void 0 !== arguments[4]) || arguments[4], o = "";
      if (i = void 0 === i ? "番剧" : i, e && i)
        if (s && t) {
          var a = this.V(t, i);
          o = "".concat(e, ":").concat(a, "_").concat(i).concat(n ? "_bilibili" : "", "_哔哩哔哩");
        } else
          o = "".concat(e, "_").concat(i).concat(n ? "_bilibili" : "", "_哔哩哔哩");
      else
        o = "番剧".concat(n ? "_bilibili" : "", "_哔哩哔哩");
      if ("undefined" != typeof window) {
        var r = window.document.createElement("div");
        r.innerHTML = o, o = r.innerText || r.textContent, r = null;
      }
      return o;
    }
    Q(t, e) {
      var i = {
        1: "番剧",
        2: "电影",
        3: "纪录片",
        4: "国创",
        5: "电视剧",
        7: "综艺",
        music: "音乐"
      };
      return [26484, 26481].indexOf(e) > -1 ? i.music : i[t] || "番剧";
    }
    V(t, e) {
      var i = Number(t), n = 1 === e || 4 === e || "番剧" === e || "国创" === e ? "话" : "集";
      return isNaN(i) ? t : "第".concat(i).concat(n);
    }
    /** 尝试东南亚接口 */
    async initGlobal() {
      var _a3, _b2, _c, _d, _e, _f, _g;
      const data = this.epid ? { ep_id: this.epid } : { season_id: this.ssid };
      Object.assign(data, { access_key: user.userStatus.accessKey.token });
      const d = await new ApiGlobalOgvView(data, user.userStatus.videoLimit.th).getDate();
      networkMock();
      await new Promise((r) => poll(() => window.__INITIAL_STATE__, r));
      const t = window.__INITIAL_STATE__;
      const i = JSON.parse(JSON.stringify(d));
      const episodes = d.modules.reduce((s, d_1) => {
        d_1.data.episodes.forEach((d_2) => {
          s.push({
            aid: d_2.aid,
            cid: d_2.id,
            cover: d_2.cover,
            ep_id: d_2.id,
            episode_status: d_2.status,
            from: d_2.from,
            index: d_2.title,
            index_title: d_2.title_display,
            subtitles: d_2.subtitles
          });
          if (d_2.subtitles) {
            this.subtitles[d_2.id] = [];
            d_2.subtitles.forEach((d2) => {
              this.subtitles[d_2.id].push({
                ai_status: 2,
                ai_type: Number(d2.is_machine),
                id: d2.id,
                id_str: String(d2.id),
                is_lock: false,
                lan: d2.key,
                lan_doc: d2.title,
                subtitle_url: d2.url,
                type: 1
              });
            });
          }
        });
        return s;
      }, []);
      t.mediaInfo = {
        actors: (_a3 = i.actor) == null ? void 0 : _a3.info,
        alias: i.alias,
        areas: i.areas,
        cover: i.cover,
        evaluate: i.evaluate,
        is_paster_ads: 0,
        jp_title: i.origin_name,
        link: i.link,
        media_id: -1,
        mode: i.mode,
        paster_text: "",
        season_id: i.season_id,
        season_status: i.status,
        season_title: i.season_title,
        season_type: i.type,
        series_title: i.title,
        square_cover: i.square_cover,
        staff: (_b2 = i.actor) == null ? void 0 : _b2.info,
        stat: i.stat,
        style: (_c = i.styles) == null ? void 0 : _c.map((d_3) => d_3.name),
        title: i.title,
        total_ep: i.total
      };
      t.mediaInfo.bkg_cover && (t.special = true);
      t.ssId = i.season_id || -1;
      t.epInfo = this.epid && episodes.find((d_4) => d_4.ep_id == this.epid) || episodes[0] || {};
      t.epList = episodes;
      t.seasonList = ((_e = (_d = d.series) == null ? void 0 : _d.seasons) == null ? void 0 : _e.map((d_5) => {
        return {
          badge: "独家",
          badge_type: 1,
          cover: "",
          media_id: -1,
          new_ep: {},
          season_id: d_5.season_id,
          season_title: d_5.quarter_title,
          season_type: 1,
          stat: {},
          title: d_5.quarter_title
        };
      })) || [];
      t.upInfo = d.up_info || {};
      t.rightsInfo = d.rights || {};
      t.app = 1 === t.rightsInfo.watch_platform;
      d.publish.is_started = 1;
      ((_f = d.publish) == null ? void 0 : _f.time_length_show) === "已完结" && (d.publish.is_finish = 1);
      t.pubInfo = d.publish || {};
      if (d.new_ep) {
        d.new_ep.desc = d.new_ep.new_ep_display;
        d.new_ep.index = d.new_ep.title;
      }
      t.newestEp = d.new_ep || {};
      t.mediaRating = d.rating || {};
      t.payPack = d.pay_pack || {};
      t.payMent = d.payment || {};
      t.activity = d.activity_dialog || {};
      t.epStat = this.setEpStat(t.epInfo.episode_status || t.mediaInfo.season_status, t.userStat.pay, t.userStat.payPackPaid, t.loginInfo);
      t.epId = Number(this.epid || t.epInfo.ep_id);
      this.ssid = t.ssId;
      this.epid = t.epId;
      this.th = true;
      xhrHook("api.bilibili.com/pgc/web/season/stat", void 0, (res) => {
        const t_1 = \`{"code": 0,"message":"0","ttl":1,"result":\${JSON.stringify(d.stat)}}\`;
        res.responseType === "json" ? res.response = JSON.parse(t_1) : res.response = res.responseText = t_1;
      }, false);
      this.player();
      toast.warning("这大概是一个泰区专属Bangumi,可能没有弹幕和评论区,可以使用【在线弹幕】【播放本地文件】等功能载入弹幕~", "另外:播放泰区番剧还可能导致历史记录错乱,请多担待🤣");
      const title = this.setTitle(t.epInfo.index, t.mediaInfo.title, this.Q(t.mediaInfo.season_type), true);
      function loopTitle() {
        poll(() => document.title != title, () => {
          document.title = title;
          if (document.title != title)
            loopTitle();
        });
      }
      loopTitle();
      videoInfo.bangumiEpisode(episodes, i.title, (_g = i.actor) == null ? void 0 : _g.info, i.cover, t.mediaInfo.bkg_cover);
    }
    /** 修复泰区player接口 */
    player() {
      xhrHook.async("api.bilibili.com/x/player/v2?", void 0, async (args) => {
        const obj = urlObj(args[1]);
        const aid = obj.aid;
        const cid = obj.cid;
        const response = { code: 0, message: "0", data: new PlayerResponse(aid, cid) };
        if (this.subtitles[cid]) {
          response.data.subtitle.subtitles = this.subtitles[cid];
        }
        return { response, responseType: "json", responseText: JSON.stringify(response) };
      }, false);
    }
    /** 点赞功能 */
    enLike() {
      if (user.userStatus.like) {
        poll(() => document.querySelector("#bangumi_header > div.header-info > div.count-wrapper.clearfix > div.bangumi-coin-wrap"), (d) => {
          var _a3;
          (_a3 = d.parentElement) == null ? void 0 : _a3.insertBefore(this.like, d);
          addCss(".ulike {margin-left: 15px;position: relative;float: left;height: 100%;line-height: 18px;font-size: 12px;color: #222;}", "ulike-bangumi");
        });
        xhrHook("pgc/web/season/stat?", void 0, async (res) => {
          try {
            const result = typeof res.response === "string" ? jsonCheck(res.response) : res.response;
            this.like.likes = result.result.likes;
          } catch {
          }
        });
        switchVideo(() => {
          this.like.init();
        });
      }
    }
    episodeIndex = 0;
    /** 分集数据 */
    episodeData() {
      if (user.userStatus.episodeData) {
        switchVideo(() => {
          this.episodeIndex++;
          const views = document.querySelector(".view-count > span");
          const danmakus = document.querySelector(".danmu-count > span");
          if (views && danmakus) {
            if (this.episodeIndex === 1) {
              const [view, danmaku2] = [
                unitFormat(window.__INITIAL_STATE__.mediaInfo.stat.views),
                unitFormat(window.__INITIAL_STATE__.mediaInfo.stat.danmakus)
              ];
              views.setAttribute("title", "总播放数 " + view);
              danmakus.setAttribute("title", "总弹幕数 " + danmaku2);
              debug.log("总播放数:", view, "总弹幕数", danmaku2);
            }
            apiViewDetail(BLOD.aid).then(({ View }) => {
              views.textContent = unitFormat(View.stat.view);
              danmakus.textContent = unitFormat(View.stat.danmaku);
              debug.log("播放数:", View.stat.view, "弹幕数", View.stat.danmaku);
            }).catch((e) => {
              debug.error("分集数据", e);
            });
          }
        });
      }
    }
    /** 页面死循环检查 */
    reloadCheck() {
      function reload() {
        if (document.title === "Application error: a client-side exception has occurred") {
          alert("新版页面出现死循环,CPU占用飙升,尝试刷新页面解决?", "死循环", [
            {
              text: "刷新",
              callback: () => {
                location.reload();
              }
            }
          ]);
        }
      }
      if (document.readyState === "complete") {
        reload();
      } else {
        window.addEventListener("load", reload, { once: true });
      }
    }
    loadedCallback() {
      super.loadedCallback();
      this.reloadCheck();
    }
  };

  // src/page/av.ts
  var PageAV = class extends Page {
    /** 销毁标记,当前已不是av页,部分回调禁止生效 */
    destroy = false;
    like;
    webpackJsonp = true;
    get aid() {
      return BLOD.aid;
    }
    set aid(v) {
      BLOD.aid = v;
    }
    constructor() {
      super(av_default);
      location.href.replace(/av\\d+/i, (d) => this.aid = d.slice(2));
      new Comment2();
      this.like = new Like();
      propertyHook(window, "__INITIAL_STATE__", void 0);
      propertyHook(window, "__playinfo__", void 0);
      location.href.includes("/s/video") && urlCleaner.updateLocation(location.href.replace("s/video", "video"));
      this.enLike();
      this.aidLostCheck();
      this.favCode();
      this.tagTopic();
      this.menuConfig();
      this.ancientHeader();
      this.hyperLink();
      this.embedPlayer();
      this.elecShow();
      this.biliUIcomponents();
      this.crumbFirstLink();
      this.exp();
      Header.primaryMenu();
      Header.banner();
      this.updateDom();
    }
    /**
     * 暴露UI组件
     * 717 -> video.b1b7706abd590dd295794f540f7669a5d8d978b3.js
     * .onCoinSuccess(n)   页面变为已投币n枚的状态
     * .onFollow()         变为已关注状态
     * .favSubmit(bool)    设置收藏状态,参数bool: true -> “已收藏”状态 false -> 未收藏状态
     */
    biliUIcomponents() {
      webpackHook(
        717,
        274,
        (code) => code.replace("this.getAdData()", "this.getAdData").replace("ut.MenuConfig[e].name", "ut.MenuConfig[e].name,url:ut.MenuConfig[e].url,subUrl: ut.MenuConfig[e].sub[a].url")
      );
    }
    /** 修复分区列表 */
    crumbFirstLink() {
      webpackHook(
        717,
        271,
        (code) => code.replace(/breadCrumbFirstLink:[\\S\\s]+?breadCrumbSecondName:/, "breadCrumbFirstLink:function() {return this.breadcrumb.url},breadCrumbSecondName:").replace(/breadCrumbSecondLink:[\\S\\s]+?coined:/, "breadCrumbSecondLink:function() {return this.breadcrumb.subUrl},coined:")
      );
    }
    /**
     * 修复:收藏视频时,在“添加到收藏夹”弹窗中,如果将视频从收藏夹A删除,并同时添加到收藏夹B,点击确定后窗口不消失的问题
     * @example
     * // 报错原因示意:
     * jQuery.when(deferredA,deferredB).done((resultA,resultB) => {
     *      let codeA = resultA[0].code; // Cannot read property 'code' of undefined
     *      let codeA = resultA.code;    // 本应该写成这样
     * })
     */
    favCode() {
      webpackHook(717, 251, (code) => code.replace("e[0].code", "e.code").replace("i[0].code", "i.code"));
    }
    /** 修复:视频标签链接(tag -> topic) */
    tagTopic() {
      webpackHook(717, 660, (code) => code.replace('tag/"+t.info.tag_id+"/?pagetype=videopage', 'topic/"+t.info.tag_id+"/?pagetype=videopage'));
    }
    /** 修复:视频分区 */
    menuConfig() {
      webpackHook(717, 100, (code) => code.replace(/MenuConfig[\\S\\s]+?LiveMenuConfig/, \`MenuConfig=\${sort_default},e.LiveMenuConfig\`));
    }
    /** 移除上古顶栏 */
    ancientHeader() {
      webpackHook(717, 609, () => \`()=>{}\`);
    }
    /** 修复:超链接跳转 */
    hyperLink() {
      webpackHook(717, 2, (code) => code.replace("av\$1</a>')", \`av\$1</a>').replace(/(?!<a[^>]*>)cv([0-9]+)(?![^<]*<\\\\/a>)/ig, '<a href="//www.bilibili.com/read/cv\$1/" target="_blank" data-view="\$1">cv\$1</a>').replace(/(?!<a[^>]*>)(bv1)(\\\\w{9})(?![^<]*<\\\\/a>)/ig, '<a href="//www.bilibili.com/video/bv1\$2/" target="_blank">\$1\$2</a>')\`).replace("http://acg.tv/sm", "https://www.nicovideo.jp/watch/sm"));
    }
    /**
     * 添加:播放器启动代码
     * 无\`__INITIAL_STATE__\`启动
     */
    embedPlayer() {
      webpackHook(717, 286, (code) => code.replace('e("setVideoData",t)', \`e("setVideoData",t);\$("#bofqi").attr("id","__bofqi").html('<div class="bili-wrapper" id="bofqi"><div id="player_placeholder"></div></div>');new Function('EmbedPlayer',t.embedPlayer)(window.EmbedPlayer);\`));
    }
    /** 跳过充电鸣谢 */
    elecShow() {
      if (user.userStatus.elecShow) {
        jsonpHook("api.bilibili.com/x/web-interface/elec/show", void 0, (res) => {
          try {
            res.data.av_list = [];
          } catch {
          }
          return res;
        }, false);
      } else {
        jsonpHook.async("api.bilibili.com/x/web-interface/elec/show", void 0, async () => {
          return { code: -404 };
        }, false);
      }
    }
    /** 检查页面是否失效及bangumi跳转 */
    aidLostCheck() {
      jsonpHook("api.bilibili.com/x/web-interface/view/detail", void 0, (res, r, call) => {
        if (0 !== res.code) {
          const obj = urlObj(r);
          if (obj.aid) {
            this.aid = obj.aid;
            this.getVideoInfo().then((d) => call(d)).catch(() => call(res));
            return true;
          }
        } else {
          if (res.data) {
            if (res.data.View) {
              const response = \`{ "code": 0, "message": "0", "ttl": 1, "data": \${JSON.stringify(res.data.View.stat)} }\`;
              xhrHook.async("/x/web-interface/archive/stat?", void 0, async () => {
                return { response, responseText: response, responseType: "json" };
              });
              Promise.resolve().then(() => {
                user.userStatus.staff && res.data.View.staff && this.staff(res.data.View.staff);
              });
              if (user.userStatus.ugcSection && res.data.View.ugc_season) {
                this.ugcSection(res.data.View.ugc_season, res.data.View.owner);
              }
              videoInfo.aidDatail(res.data.View);
            }
            if (res.data.Related) {
              const response = JSON.stringify(res.data.Related.map((d) => {
                return [d.pic, d.aid, d.title, d.stat.view, d.stat.danmaku, , d.stat.favorite];
              }));
              xhrHook.async("comment.bilibili.com/playtag", void 0, async () => {
                return { response, responseText: response, responseType: "json" };
              }, false);
            }
          }
        }
      }, false);
    }
    /** 通过其他接口获取aid数据 */
    async getVideoInfo() {
      const msg = toast.list(\`av\${this.aid}可能无效,尝试其他接口 >>>\`);
      try {
        const card = await apiArticleCards({ av: this.aid });
        if (card[\`av\${this.aid}\`]) {
          if (card[\`av\${this.aid}\`].redirect_url) {
            msg.push(\`> bangumi重定向:\${card[\`av\${this.aid}\`].redirect_url}\`);
            msg.type = "warning";
            setTimeout(() => {
              urlCleaner.updateLocation(card[\`av\${this.aid}\`].redirect_url);
              new PageBangumi();
              BLOD.flushToast();
              this.destroy = true;
              msg.delay = 4;
            }, 100);
            return new ApiViewDetail();
          }
        }
        const view = await new apiBiliplusView(this.aid).toDetail();
        if (view == null ? void 0 : view.data.View.season) {
          msg.push(\`> bangumi重定向:\${view.data.View.season.ogv_play_url}\`);
          msg.type = "warning";
          view.data.View.season = void 0;
          setTimeout(() => {
            urlCleaner.updateLocation(card[\`av\${this.aid}\`].redirect_url);
            new PageBangumi();
            BLOD.flushToast();
            this.destroy = true;
            msg.delay = 4;
          }, 100);
          return new ApiViewDetail();
        }
        setTimeout(() => {
          videoInfo.aidDatail(view.data.View);
          msg.push("> 获取缓存数据成功!但这可能是个失效视频!");
          msg.type = "success";
          msg.delay = 4;
        }, 100);
        return view;
      } catch (e) {
        msg.push("> 获取数据出错!", e);
        msg.type = "error";
        msg.delay = 4;
        throw e;
      }
    }
    /** 合作UP */
    staff(staff) {
      poll(() => document.querySelector("#v_upinfo"), (node) => {
        let fl2 = '<span class="title">UP主列表</span><div class="up-card-box">';
        fl2 = staff.reduce((s, d) => {
          s = s + \`<div class="up-card">
                    <a href="//space.bilibili.com/\${d.mid}" data-usercard-mid="\${d.mid}" target="_blank" class="avatar">
                    <img src="\${d.face}@48w_48h.webp" /><!---->
                    <span class="info-tag">\${d.title}</span><!----></a>
                    <div class="avatar">
                    <a href="//space.bilibili.com/\${d.mid}" data-usercard-mid="\${d.mid}" target="_blank" class="\${d.vip && d.vip.status ? "name-text is-vip" : "name-text"}">\${d.name}</a>
                    </div></div>\`;
          return s;
        }, fl2) + \`</div>\`;
        node.innerHTML = fl2;
        addCss(uplist_default, "up-list");
        const box = node.querySelector(".up-card-box");
        box && new Scrollbar(box, true, false);
      });
    }
    /** 合集(使用播单模拟) */
    ugcSection(season, owner) {
      toview_default.cover = season.cover;
      toview_default.count = season.ep_count;
      toview_default.id = season.id;
      toview_default.description = season.intro;
      toview_default.mid = season.mid;
      toview_default.type = season.season_type;
      toview_default.state = season.sign_state;
      toview_default.stat.favorite = season.stat.fav;
      toview_default.stat.reply = season.stat.reply;
      toview_default.stat.share = season.stat.share;
      toview_default.stat.view = season.stat.view;
      toview_default.pid = -1;
      toview_default.list = season.sections.reduce((s, d) => {
        d.episodes.forEach((d2) => {
          s.push({
            aid: d2.aid,
            attribute: d2.attribute,
            cid: d2.cid,
            copyright: d2.arc.copyright,
            ctime: d2.arc.ctime,
            desc: d2.arc.desc,
            dimension: d2.arc.dimension,
            duration: d2.arc.duration,
            dynamic: d2.arc.dynamic,
            owner,
            pages: [d2.page],
            pic: d2.arc.pic,
            pubdate: d2.arc.pubdate,
            rights: d2.arc.rights,
            stat: d2.arc.stat,
            state: d2.arc.state,
            tid: d2.arc.type_id,
            title: d2.title,
            tname: "",
            videos: 1
          });
        });
        return s;
      }, []);
      player.addModifyArgument((args) => {
        if (this.destroy)
          return;
        const obj = urlObj(\`?\${args[2]}\`);
        obj.playlist = encodeURIComponent(JSON.stringify({ code: 0, data: toview_default, message: "0", ttl: 1 }));
        args[2] = objUrl("", obj);
      });
      propertyHook(window, "callAppointPart", this.callAppointPart);
      addCss(".bilibili-player .bilibili-player-auxiliary-area .bilibili-player-playlist .bilibili-player-playlist-playlist {height: calc(100% - 45px);}.bilibili-player-playlist-nav-title,.bilibili-player-playlist-nav-ownername{display: none;}");
    }
    /** hook合集切p回调 */
    callAppointPart = (p, state) => {
      var _a3;
      if (this.destroy)
        return Reflect.deleteProperty(window, "callAppointPart");
      const vue = (_a3 = document.querySelector("#app")) == null ? void 0 : _a3.__vue__;
      if (vue) {
        vue.\$store.state.aid = state.aid;
        apiViewDetail(state.aid).then((d) => {
          var _a4;
          vue.setVideoData(d.View);
          (_a4 = document.querySelector("#recommend_report")) == null ? void 0 : _a4.__vue__.init(d.Related);
          document.querySelector("#v_tag").__vue__.\$data.tags = d.Tags;
          videoInfo.aidDatail(d.View);
        }).catch((e) => {
          toast.error("更新视频信息失败", e)();
        }).finally(() => {
          history.pushState(history.state, "", \`/video/av\${state.aid}\`);
        });
      }
    };
    /** 点赞功能 */
    enLike() {
      if (user.userStatus.like) {
        poll(() => document.querySelector("#viewbox_report > div.number > span.u.coin"), (d) => {
          var _a3;
          if (this.destroy)
            return this.like.remove();
          (_a3 = d.parentElement) == null ? void 0 : _a3.insertBefore(this.like, d);
          addCss(".video-info-m .number .ulike {margin-left: 15px;margin-right: 5px;}", "ulike-av");
        });
        const destroy = videoInfo.bindChange((v) => {
          var _a3;
          if (this.destroy) {
            destroy();
            return this.like.remove();
          }
          this.like.likes = (_a3 = v.stat) == null ? void 0 : _a3.like;
          this.like.init();
        });
      }
    }
    /** 经验值接口 */
    exp() {
      xhrHook.async("plus/account/exp.php", void 0, async () => {
        const res = await fetch("https://api.bilibili.com/x/web-interface/coin/today/exp", { credentials: "include" });
        const json = await res.json();
        json.number = json.data;
        const response = JSON.stringify(json);
        return { response, responseText: response, responseType: "json" };
      });
    }
  };

  // src/page/watchalter.ts
  init_tampermonkey();

  // src/html/watchlater.html
  var watchlater_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8" />\\r\\n    <title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico" />\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩" />\\r\\n    <link rel="stylesheet" href="//static.hdslb.com/elec_2/dist/css/later_elec.css" type="text/css" />\\r\\n    <link rel="stylesheet" href="//static.hdslb.com/tag/css/tag-index2.0.css" type="text/css" />\\r\\n    <link href="//s1.hdslb.com/bfs/static/phoenix/viewlater/static/css/main.d9641d2f4dc42228ea8c2650e1b98b0b.css"\\r\\n        rel="stylesheet" />\\r\\n    <style type="text/css">\\r\\n        #bofqi .player {\\r\\n            width: 980px;\\r\\n            height: 620px;\\r\\n            display: block;\\r\\n        }\\r\\n\\r\\n        @media screen and (min-width:1400px) {\\r\\n            #bofqi .player {\\r\\n                width: 1160px;\\r\\n                height: 720px\\r\\n            }\\r\\n        }\\r\\n\\r\\n        /* 修正稍后再看迷你播放器样式 */\\r\\n        .bilibili-player .bilibili-player-area .bilibili-player-video-wrap.mini-player .bilibili-player-video-danmaku {\\r\\n            top: 30px;\\r\\n            height: 240px;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container has-menu"></div>\\r\\n    <div id="viewlater-app">\\r\\n        <app></app>\\r\\n    </div>\\r\\n    <div class="footer bili-footer"></div>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.qrcode.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/swfobject.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/account/bili_quick_login.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/mstation/js/upload/moxie.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/mstation/js/upload/plupload.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/elec_2/dist/js/later_elec.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//s1.hdslb.com/bfs/static/phoenix/viewlater/static/js/main.2111469a1bbc20e2e885.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/watchalter.ts
  var PageWatchlater = class extends Page {
    like;
    constructor() {
      super(watchlater_default);
      this.like = new Like();
      new Comment2();
      this.toAv();
      this.enLike();
      this.toview();
      this.living();
      this.commentAgent();
      this.exp();
      Header.primaryMenu();
      Header.banner();
      this.updateDom();
    }
    /** 记录视频数据 */
    toview() {
      jsonpHook("history/toview/web?", void 0, (d) => {
        setTimeout(() => {
          d.data.list.forEach((d2) => videoInfo.aidDatail(d2));
        });
        return d;
      });
    }
    /** 点赞功能 */
    enLike() {
      if (user.userStatus.like) {
        poll(() => document.querySelector("#viewlater-app > div > div > div > div.video-top-info.clearfix.bili-wrapper.bili-wrapper > div.video-info-module > div.number > span.u.coin.on"), (d) => {
          var _a3;
          (_a3 = d.parentElement) == null ? void 0 : _a3.insertBefore(this.like, d);
          addCss(".video-info-module .number .ulike {margin-left: 15px;margin-right: 5px;}", "ulike-watchlater");
        }, void 0, 0);
        jsonpHook("x/web-interface/view?", void 0, (d) => {
          setTimeout(() => {
            const data = jsonCheck(d).data;
            BLOD.aid = data.aid;
            this.like.likes = data.stat.like;
            this.like.init();
          });
          return d;
        }, false);
      }
    }
    /** 修正直播错误 */
    living() {
      xhrHook("api.live.bilibili.com/bili/living_v2/", void 0, (r) => {
        r.response = r.responseText = \` \${r.response}\`;
      }, false);
    }
    /** 修复评论播放跳转 */
    commentAgent() {
      window.commentAgent = { seek: (t) => window.player && window.player.seek(t) };
    }
    /** 重定向回av页 */
    toAv() {
      var _a3;
      if ((_a3 = user.userStatus) == null ? void 0 : _a3.watchlater2Av) {
        jsonpHook(["web-interface/view?", "cb_view"], (url) => {
          const obj = urlObj(url);
          if (obj.aid) {
            location.replace(\`/video/av\${obj.aid}\`);
          }
          return url;
        });
      }
    }
    /** 经验值接口 */
    exp() {
      xhrHook.async("plus/account/exp.php", void 0, async () => {
        const res = await fetch("https://api.bilibili.com/x/web-interface/coin/today/exp", { credentials: "include" });
        const json = await res.json();
        json.number = json.data;
        const response = JSON.stringify(json);
        return { response, responseText: response, responseType: "json" };
      });
    }
  };

  // src/page/playlist.ts
  init_tampermonkey();

  // src/html/playlist.html
  var playlist_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta charset="utf-8" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid" />\\r\\n    <meta charset="utf-8" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid" />\\r\\n    <link\\r\\n        href="//s1.hdslb.com/bfs/static/jinkela/playlist-video/css/playlist_video.0.87292febba67b03f65d05c15d03e325d9db4f56a.css"\\r\\n        rel="stylesheet" />\\r\\n    <style type="text/css">\\r\\n        #bofqi .player {\\r\\n            width: 980px;\\r\\n            height: 620px;\\r\\n            display: block;\\r\\n        }\\r\\n\\r\\n        @media screen and (min-width:1400px) {\\r\\n            #bofqi .player {\\r\\n                width: 1160px;\\r\\n                height: 720px\\r\\n            }\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div id="playlist-video-app"></div>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.qrcode.min.js"><\\/script>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/swfobject.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/mstation/js/upload/moxie.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/mstation/js/upload/plupload.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//s1.hdslb.com/bfs/static/jinkela/playlist-video/1.playlist_video.87292febba67b03f65d05c15d03e325d9db4f56a.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//s1.hdslb.com/bfs/static/jinkela/playlist-video/playlist_video.87292febba67b03f65d05c15d03e325d9db4f56a.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/playlist.ts
  var PagePlaylist = class extends Page {
    /** 查询参数 */
    route = urlObj(location.href);
    /** 播单类型 */
    type = 3;
    /** 播单号 */
    pl = -1;
    /** 是否播单 */
    isPl = false;
    like;
    constructor() {
      super(playlist_default);
      this.like = new Like();
      new Comment2();
      this.init();
      this.EmbedPlayer();
      this.toviewHook();
      this.elecShow();
      this.enLike();
      this.exp();
      Header.primaryMenu();
      Header.banner();
      this.isPl || switchVideo(this.switchVideo);
      this.updateDom();
    }
    /** 初始化 */
    init() {
      const path = BLOD.path.at(-1);
      this.isPl = Boolean(path == null ? void 0 : path.startsWith("pl"));
      path == null ? void 0 : path.replace(/\\d+/, (d) => this.pl = d);
      if (this.route.business) {
        switch (this.route.business) {
          case "space":
            this.type = 1;
            break;
          case "space_series":
            this.type = 5;
            this.pl = this.route.business_id;
            break;
          case "space_channel":
            this.type = 6;
            this.pl = 10 * this.route.business_id + this.pl % 10;
            break;
          case "space_collection":
            this.type = 8;
            this.pl = this.route.business_id;
            break;
          default:
            this.type = 3;
        }
      }
      this.isPl || urlCleaner.updateLocation(objUrl(\`https://www.bilibili.com/playlist/video/pl\${this.pl}\`, this.route));
    }
    /** 过滤播放启动参数 */
    EmbedPlayer() {
      if (!this.isPl) {
        player.addModifyArgument((args) => {
          const obj = urlObj(\`?\${args[2]}\`);
          delete obj.playlist;
          obj.playlistType = this.type;
          obj.playlistId = this.pl;
          obj.playBvid = NaN;
          obj.playlistOid = "";
          obj.playlistOtype = NaN;
          obj.sort_field = 1;
          args[2] = objUrl("", obj);
        });
        xhrHook("x/v2/medialist/resource/list?", void 0, async (res) => {
          const data = jsonCheck(res.response);
          data.data.media_list.forEach((d) => {
            videoInfo.aidInfo(d);
          });
        });
      }
    }
    /** 拦截并修改页面初始化请求 */
    toviewHook() {
      jsonpHook.async("toview", void 0, async () => {
        urlCleaner.updateLocation(BLOD.path.join("/"));
        return { code: 0, data: toview_default, message: "0", ttl: 1 };
      });
      videoInfo.toview(toview_default);
    }
    /** 跳过充电鸣谢 */
    elecShow() {
      if (user.userStatus.elecShow) {
        jsonpHook("api.bilibili.com/x/web-interface/elec/show", void 0, (res) => {
          try {
            res.data.av_list = [];
          } catch {
          }
          return res;
        }, false);
      } else {
        jsonpHook.async("api.bilibili.com/x/web-interface/elec/show", void 0, async () => {
          return { code: -404 };
        }, false);
      }
    }
    /** 伪造的播单页不应有识别参数 */
    switchVideo = () => {
      urlCleaner.updateLocation(BLOD.path.join("/"));
    };
    /** 点赞功能 */
    enLike() {
      if (user.userStatus.like) {
        poll(() => document.querySelector("#viewbox_report > div.number > span.u.coin"), (d) => {
          var _a3;
          (_a3 = d.parentElement) == null ? void 0 : _a3.insertBefore(this.like, d);
          addCss(".video-info-m .number .ulike {margin-left: 15px;margin-right: 5px;}", "ulike-playlist");
        });
        jsonpHook("x/web-interface/view?", void 0, (d) => {
          setTimeout(() => {
            const data = jsonCheck(d).data;
            BLOD.aid = data.aid;
            this.like.likes = data.stat.like;
          });
          return d;
        }, false);
        switchVideo(() => {
          this.like.init();
        });
      }
    }
    /** 经验值接口 */
    exp() {
      xhrHook.async("plus/account/exp.php", void 0, async () => {
        const res = await fetch("https://api.bilibili.com/x/web-interface/coin/today/exp", { credentials: "include" });
        const json = await res.json();
        json.number = json.data;
        const response = JSON.stringify(json);
        return { response, responseText: response, responseType: "json" };
      });
    }
  };

  // src/page/playlist-detail.ts
  init_tampermonkey();

  // src/html/playlist-detail.html
  var playlist_detail_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta charset="utf-8" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <link rel="stylesheet" href="//static.hdslb.com/phoenix/dist/css/comment.min.css" type="text/css" />\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid" />\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/jinkela/playlist-detail/css/playlist_detail.1.dc2f20722afb93b15bbf7a30436f70ff31fb0a05.css" />\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container"></div>\\r\\n    <div id="playlist-detail-app"></div>\\r\\n    <div id="app" data-server-rendered="true" class="pl-app"></div>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/playlist-detail/manifest.dc2f20722afb93b15bbf7a30436f70ff31fb0a05.js"\\r\\n        defer="defer"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/playlist-detail/vendor.dc2f20722afb93b15bbf7a30436f70ff31fb0a05.js"\\r\\n        defer="defer"><\\/script>\\r\\n    <script\\r\\n        src="//s1.hdslb.com/bfs/static/jinkela/playlist-detail/playlist_detail.dc2f20722afb93b15bbf7a30436f70ff31fb0a05.js"\\r\\n        defer="defer"><\\/script>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/playlist-detail.ts
  var PagePlaylistDetail = class extends Page {
    webpackJsonp = true;
    constructor() {
      super(playlist_detail_default);
      this.__INITIAL_STATE__();
      this.ancientHeader();
      this.updateDom();
    }
    /** 移除上古顶栏 */
    ancientHeader() {
      webpackHook(499, 446, () => \`()=>{}\`);
    }
    __INITIAL_STATE__() {
      urlCleaner.updateLocation("https://www.bilibili.com/playlist/detail/pl769");
      window.__INITIAL_STATE__ = {
        mid: toview_default.mid,
        pid: toview_default.pid,
        plinfoData: {
          attr: toview_default.attr,
          count: toview_default.count,
          cover: toview_default.cover,
          ctime: toview_default.ctime,
          description: toview_default.description,
          favored: toview_default.favored,
          id: toview_default.id,
          is_favorite: toview_default.is_favorite,
          mid: toview_default.mid,
          mtime: toview_default.mtime,
          owner: toview_default.owner,
          pid: toview_default.pid,
          stat: toview_default.stat,
          state: toview_default.state,
          type: toview_default.type
        },
        pllistData: toview_default.list
      };
      window.addEventListener("load", () => {
        toast.warning("播单详情页面已不存在,这里显示的是缓存的播单 769 的数据。");
      }, { once: true });
    }
  };

  // src/page/ranking.ts
  init_tampermonkey();

  // src/html/ranking.html
  var ranking_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <title>热门视频排行榜 - 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta charset="utf-8" />\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。" />\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid" />\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/jinkela/rank/css/rank.0.ba58f8684a87651e0e1c576df8f918bfa10c1a90.css" />\\r\\n    <style type="text/css">\\r\\n        .gg-floor-module {\\r\\n            display: none;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container has-menu"></div>\\r\\n    <div id="rank-app"></div>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/cm/st/bundle.js" crossorigin=""><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/rank/1.rank.ba58f8684a87651e0e1c576df8f918bfa10c1a90.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/rank/rank.ba58f8684a87651e0e1c576df8f918bfa10c1a90.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/ranking.ts
  var PageRanking = class extends Page {
    constructor() {
      super(ranking_default);
      this.location();
      this.overDue();
      this.initState();
      Header.primaryMenu();
      Header.banner();
      this.updateDom();
    }
    /** 还原正确的排行地址否则页面无法正常初始化 */
    location() {
      urlCleaner.updateLocation(/ranking/.test(document.referrer) ? document.referrer : "https://www.bilibili.com/ranking");
    }
    /** 三日以外的数据全部过期 */
    overDue() {
      jsonpHook(["api.bilibili.com/x/web-interface/ranking", "arc_type=0"], (d) => d.replace(/day=\\d+/, "day=3"), void 0, false);
    }
    /** 禁用错误的__INITIAL_STATE__ */
    initState() {
      propertyHook(window, "__INITIAL_STATE__", void 0);
    }
    /** 优化高分辨率支持 */
    style() {
      addCss("@media screen and (min-width: 1400px){.main-inner {width: 1160px !important;}}");
    }
  };

  // src/page/read.ts
  init_tampermonkey();
  var import_quill_delta_to_html_cb = __toESM(require_main());

  // src/html/read.html
  var read_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head itemprop="Article" itemscope="itemscope" itemtype="http://schema.org/Article">\\r\\n    <meta charset="UTF-8" />\\r\\n    <meta data-n-head="true" name="viewport" content="width=device-width,initial-scale=1,user-scalable=0" />\\r\\n    <meta name="theme-color" content="#de698c" />\\r\\n    <meta http="Cache-Control" content="no-transform" />\\r\\n    <meta name="format-detection" content="telephone=no" />\\r\\n    <meta name="applicable-device" content="pc" />\\r\\n    <link rel="apple-touch-icon-precomposed" href="//static.hdslb.com/mobile/img/512.png" />\\r\\n    <link rel="icon" type="image/vnd.microsoft.icon" href="//www.bilibili.com/favicon.ico" />\\r\\n    <link rel="apple-touch-icon" href="//www.bilibili.com/favicon.ico" />\\r\\n    <meta name="renderer" content="webkit" />\\r\\n    <link data-n-head="true" rel="icon" type="image/x-icon" href="//www.bilibili.com/favicon.ico" />\\r\\n    <link data-n-head="true" rel="apple-touch-icon-precomposed" type="image/x-icon"\\r\\n        href="//static.hdslb.com/mobile/img/512.png" />\\r\\n    <title>哔哩哔哩专栏</title>\\r\\n    <link href="//s1.hdslb.com/bfs/static/jinkela/article/pcDetail.e5d43b1ea4f5a12408d8cd222049b34cfacd107c.css"\\r\\n        rel="stylesheet" />\\r\\n    <style type="text/css">\\r\\n        .nav-tab-bar .tab-item[data-tab-id="41"]:before {\\r\\n            background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAA6lBMVEUAAAAiIiIkJCT///8jIyMiIiIiIiIiIiJVVVUjIyMjIyMlJSU0NDT9/f0iIiIoKCjz8/NCQkIjIyMjIyMrKysiIiJFRUWQkJAiIiIlJSUjIyMkJCQzMzNAQEDv7+/7+/tHR0ciIiIlJSUjIyNKSkp7e3tcXFxoaGgjIyMjIyMkJCT8/PxDQ0MnJyf39/fx8fHn5+cvLy/i4uLe3t7R0dHAwMA0NDQjIyOtra06Ojo+Pj4iIiJAQEBOTk5VVVVwcHBtbW1hYWEjIyMjIyMjIyMiIiIiIiIlJSUpKSkkJCT///95eXltbW1zc3PUVbhEAAAASnRSTlMAf4H+6NOdaAOnQRQF/asO/vTs5NnXxcO6NzMaCgT++fLv3s7GwMC/v6Fi+vr59PDn5ePh2dHOzMrKyMjGw8C/v7+1sZeVUikfHAMz54kAAAEUSURBVCjPldLXboMwFIDhQ7DNDBA2JGmTNLt7772d9v1fp5hSjEOkqP+lP/lIlg+sTVcaRV1gKXE/mLWBZWqYSEUMjfjsYv/4Hr0zxJYKlYxgItOsaMpmItHwA82TkQGgEMG2JrTITwGkRsXs80f6F/oU0b4el3YaQI585l1pm/6bgHZ/Ry7tcgYCaoetjcKaV1ZXwGSwvSi0efNsgoAvI0oXLYc9MXwyQcTBSXb83XOoPIw7AGlawQ8ks4FfPWc47fyec5yHmTHddZmJqEU57t16baghOqL0IArdVxvq6I3GvqvN2bU6JkRK+Odx5P0LFbIaicLWBKurTPX0/IEWV24WBpaJEWksRbBmlkstLaXosK4fYdYsW/LHMigAAAAASUVORK5CYII=);\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container report-wrap-module"></div>\\r\\n    <div class="page-container"></div>\\r\\n    <div class="footer bili-footer report-wrap-module" id="home_footer"></div>\\r\\n    <script src="//static.hdslb.com/public/intersection-observer.js"><\\/script>\\r\\n    <script src="//static.hdslb.com/public/timing.min.js"><\\/script>\\r\\n    <script src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" charset="utf-8" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/biliapp/biliapp.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//s1.hdslb.com/bfs/static/jinkela/article/manifest.e5d43b1ea4f5a12408d8cd222049b34cfacd107c.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//s1.hdslb.com/bfs/static/jinkela/article/vendor.e5d43b1ea4f5a12408d8cd222049b34cfacd107c.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//s1.hdslb.com/bfs/static/jinkela/article/pcDetail.e5d43b1ea4f5a12408d8cd222049b34cfacd107c.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/read.ts
  var PageRead = class _PageRead extends Page {
    readInfo;
    cvid;
    bars = [
      [0, "推荐", "home"],
      [2, "动画", "douga"],
      [1, "游戏", "game"],
      [28, "影视", "cinephile"],
      [3, "生活", "life"],
      [29, "兴趣", "interest"],
      [16, "轻小说", "lightnovel"],
      [17, "科技", "technology"],
      [41, "笔记", "note"]
    ];
    readInfoStr = "";
    ops;
    webpackJsonp = true;
    constructor() {
      super(read_default);
      this.initState();
    }
    /** 处理webpackJsonp污染 */
    webpackjsonp() {
      webpackHook(115, 0, (str) => {
        return str.replace("gi,function(i){return", 'gi,function(i){return i.indexOf("api.")>-1?i:');
      });
    }
    /** 获取专栏信息 */
    initState() {
      var _a3;
      this.readInfo = (_a3 = window.__INITIAL_STATE__) == null ? void 0 : _a3.readInfo;
      if (this.readInfo) {
        this.cvid = window.__INITIAL_STATE__.cvid;
        this.buildReadInfo();
      } else {
        Reflect.defineProperty(window, "__INITIAL_STATE__", {
          configurable: true,
          set: (v) => {
            this.readInfo = v.readInfo;
            this.cvid = v.cvid;
            propertyHook(window, "__INITIAL_STATE__", v);
            this.buildReadInfo();
          }
        });
      }
    }
    /** 构造专栏节点 */
    buildReadInfo() {
      this.navTabBar();
      this.upInfoHolder();
      this.headContainer();
      this.articleHolder();
      this.tagContainer();
      this.articleAction();
      this.updateDom();
    }
    navTabBar() {
      this.readInfoStr += this.bars.reduce((s, d) => {
        s += \`<a href="//www.bilibili.com/read/\${d[2]}?from=articleDetail" target="_self" class="tab-item\${this.readInfo.category.parent_id == d[0] ? " on" : ""}" data-tab-id="\${d[0]}"><span>\${d[1]}</span></a>\`;
        return s;
      }, '<div class="nav-tab-bar"><a href="https://www.bilibili.com/read/home?from=articleDetail" target="_self" class="logo"></a>') + "</div>";
    }
    upInfoHolder() {
      this.readInfoStr += \`<div class="up-info-holder"><div class="fixed-box"><div class="up-info-block">
        <a class="up-face-holder" href="//space.bilibili.com/\${this.readInfo.author.mid}" target="_blank"><img class="up-face-image" data-face-src="\${this.readInfo.author.face.replace("http:", "")}" src="//static.hdslb.com/images/member/noface.gif" /></a><div class="up-info-right-block"><div class="row">
        <a class="up-name" href="//space.bilibili.com/\${this.readInfo.author.mid}" target="_blank">\${this.readInfo.author.name}</a> <span class="level"></span><div class="nameplate-holder"><i class="nameplate"></i></div></div><div class="row-2">粉丝: <span class="fans-num"></span> <span class="view">阅读:</span> <span class="view-num"></span></div></div></div><div class="follow-btn-holder"><span class="follow-btn">关注</span></div><div class="up-article-list-block hidden"><div class="block-title">推荐文章</div><ul class="article-list"></ul></div><div class="more"><div class="top-bar"><label>更多</label></div><a class="ac-link" href="//www.bilibili.com/read/apply/" target="_blank"><div class="link"><span class="icon"></span><p class="title">成为创作者</p><p class="info">申请成为专栏UP主</p></div></a> <a href="//www.bilibili.com/blackboard/help.html#%C3%A4%C2%B8%C2%93%C3%A6%C2%A0%C2%8F%C3%A7%C2%9B%C2%B8%C3%A5%C2%85%C2%B3" target="_blank"><div class="help"><span class="icon"></span><p class="title">专栏帮助</p><p class="info">查看专栏使用说明</p></div></a></div></div>
        </div><div class="right-side-bar"><div class="to-comment"><div class="comment-num-holder"><span class="comment-num"></span></div></div><div class="to-top"></div></div>\`;
    }
    headContainer() {
      this.readInfoStr += \`<div class="head-container"><div class="banner-img-holder"></div><div class="bangumi-rating-container"></div><div class="argue-flag hidden"></div><div class="title-container">
        <h1 class="title">\${this.readInfo.title}</h1><div class="info">
        <a class="category-link" href="//www.bilibili.com/read/\${this.bars.find((d) => {
        if (d[0] == this.readInfo.category.parent_id)
          return d;
      })[2]}#rid=\${this.readInfo.category.id}" target="_blank"><span>\${this.readInfo.category.name}</span></a> <span class="create-time" data-ts="\${this.readInfo.ctime}"></span><div class="article-data"></div>
        </div></div><div style="display:none" class="author-container">
        <a class="author-face" href="//space.bilibili.com/\${this.readInfo.author.mid}" target="_blank"><img data-face-src="\${this.readInfo.author.face.replace("http:", "")}" src="\${this.readInfo.author.face.replace("http:", "")}" class="author-face-img" /></a> <a class="author-name" href="//space.bilibili.com/\${this.readInfo.author.mid}" target="_blank">\${this.readInfo.author.name}</a><div class="attention-btn slim-border">关注</div></div></div>\`;
    }
    articleHolder() {
      this.readInfoStr += \`<div class="article-holder">\${this.delta()}</div><p class="original">本文为我原创</p>\`;
    }
    delta() {
      let str = this.readInfo.content.replace(/(\\&quot;)|(\\&#34;)|(\\&#39;)|(\\&amp;)/g, (d) => {
        return { "&quot;": '"', "&#34;": '"', "&#39;": "'", "&amp;": "&" }[d];
      });
      if (str == null ? void 0 : str.startsWith('{"ops"')) {
        try {
          this.ops = JSON.parse(str).ops;
          const converter = new import_quill_delta_to_html_cb.QuillDeltaToHtmlConverter(this.ops);
          converter.renderCustomWith(function(customOp, contextOp) {
            switch (customOp.insert.type) {
              case "native-image":
                const val = customOp.insert.value;
                return \`<img src="\${val.url.split("@")[0]}@progressive.webp"\${val.alt ? \` alt="\${val.alt}"\` : ""}\${val.height ? \` data-h="\${val.height}"\` : ""}\${val.width ? \` data-w="\${val.width}"\` : ""}\${val.size ? \` data-size="\${val.size}"\` : ""}\${val.status ? \` data-status="\${val.status}"\` : ""}\${val.id ? \` data-id="\${val.id}"\` : ""}>\`;
              default:
                return "Unmanaged custom blot!";
            }
          });
          str = converter.convert();
        } catch (e) {
          debug.error(e);
        }
      }
      return AV.fromStr(str);
    }
    tagContainer() {
      this.readInfoStr += (this.readInfo.tags || []).reduce((o, d) => {
        o = o + \`<li data-tag-id="\${d.tid}" class="tag-item"><span class="tag-border"><span class="tag-border-inner"></span></span> <span class="tag-content">\${d.name}</span></li>\`;
        return o;
      }, \`<ul class="tag-container">\`) + "</ul>";
    }
    articleAction() {
      this.readInfoStr += \`<div class="article-action"><div class="ops"><span class="like-btn"><i class="icon-video-details_like"></i> <span>--</span></span> <span class="coin-btn"><i class="icon-video-details_throw-coin"></i> <span>--</span></span> <span class="fav-btn"><i class="icon-video-details_collection"></i> <span>--</span></span> <span class="share-container share-btn">分享到:<span></span></span></div><div class="more"><!-- <i class="icon-general_more-actions"></i> --><div class="more-ops-list"><ul><li value="0">投诉或建议</li></ul></div></div></div><div class="article-list-holder-block"></div><div class="draft-holder-block"></div><div class="b-head comment-title-block"><span class="b-head-t comment-results" style="display: inline;"></span> <span class="b-head-t">评论</span></div><div class="comment-holder"></div>\`;
    }
    updateDom() {
      window.original = {
        cvid: this.cvid,
        author: {
          name: this.readInfo.author.name,
          mid: this.readInfo.author.mid
        },
        banner_url: this.readInfo.banner_url || this.readInfo && this.readInfo.image_urls[0] || null,
        reprint: this.readInfo.reprint,
        summary: this.readInfo.summary,
        media: "",
        actId: this.readInfo.act_id,
        dispute: {
          dispute: "",
          dispute_url: ""
        },
        spoiler: "0"
      };
      new Comment2();
      this.webpackjsonp();
      super.updateDom();
      document.querySelector(".page-container").innerHTML = this.readInfoStr;
      _PageRead.rightCopyEnable();
    }
    /** 解锁右键菜单及复制 */
    static rightCopyEnable() {
      addCss(\`* {
            -webkit-user-select: text !important;
            -moz-user-select: text !important;
            -ms-user-select: text !important;
            user-select: text !important;
        }\`);
      [].forEach.call(["contextmenu", "copy", "cut", "paste", "mouseup", "mousedown", "keyup", "keydown", "drag", "dragstart", "select", "selectstart"], function(event) {
        document.addEventListener(event, function(e) {
          e.stopPropagation();
        }, true);
      });
    }
    /** 重构后回调 */
    loadedCallback() {
      super.loadedCallback();
      const pres = document.querySelectorAll("figure pre");
      let prism = false;
      pres.forEach((d) => {
        const code = d.getAttribute("codecontent");
        if (code) {
          d.querySelector("code").textContent = code;
          d.removeAttribute("codecontent");
          prism = true;
        }
      });
      prism && loadScript("//s1.hdslb.com/bfs/static/article-text/static/ueditor/plugins/prism/prism.js").catch((e) => {
        toast.error("代码组件加载失败!", e)();
      });
    }
  };

  // src/page/search.ts
  init_tampermonkey();

  // src/html/search.html
  var search_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n    <title data-vue-meta="true"> _ 搜索结果_哔哩哔哩_Bilibili</title>\\r\\n    <meta data-vue-meta="true" charset="UTF-8">\\r\\n    <meta data-vue-meta="true" http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\\r\\n    <meta data-vue-meta="true" name="renderer" content="webkit|ie-comp|ie-stand">\\r\\n    <meta data-vue-meta="true" name="description"\\r\\n        content="点击查看更多相关视频、番剧、影视、直播、专栏、话题、用户等内容;你感兴趣的视频都在B站,bilibili是国内知名的视频弹幕网站,这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主。大家可以在这里找到许多欢乐。">\\r\\n    <meta data-vue-meta="true" name="keywords"\\r\\n        content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid">\\r\\n    <meta data-vue-meta="true" charset="UTF-8">\\r\\n    <meta name="referrer" content="no-referrer-when-downgrade">\\r\\n    <link rel="dns-prefetch" href="//s1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i0.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//static.hdslb.com">\\r\\n    <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/jinkela/search/css/search.1.873ddf42c10f89041580a7464cc60c78d86b8329.css">\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/jinkela/search/css/search.0.873ddf42c10f89041580a7464cc60c78d86b8329.css">\\r\\n</head>\\r\\n\\r\\n<body id="bili-search">\\r\\n    <div class="z-top-container"></div>\\r\\n    <div id="search-app"></div>\\r\\n    <!-- built files will be auto injected -->\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript"\\r\\n        src="//www.bilibili.com/gentleman/polyfill.js?features=Promise%2CObject.assign%2CString.prototype.includes%2CNumber.isNaN"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/static/jinkela/long/js/sentry/sentry-5.7.1.min.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//s1.hdslb.com/bfs/static/jinkela/long/js/sentry/sentry-5.7.1.vue.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script\\r\\n        src="//s1.hdslb.com/bfs/static/jinkela/search/1.search.873ddf42c10f89041580a7464cc60c78d86b8329.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/jinkela/search/search.873ddf42c10f89041580a7464cc60c78d86b8329.js"><\\/script>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/io/api-search.ts
  init_tampermonkey();
  var ApiSearch = class extends ApiSign {
    constructor(keyword) {
      super(URLS.SEARCH, "c1b107428d337928");
      this.data = Object.assign({ keyword }, {
        type: "json",
        build: 404e3,
        main_ver: "v4",
        page: 1,
        pagesize: 20,
        platform: "android",
        search_type: "all",
        source_type: 0,
        bangumi_num: 1,
        special_num: 1,
        topic_num: 1,
        upuser_num: 1,
        tv_num: 1,
        movie_num: 1
      });
    }
    async getData() {
      const response = await fetch(this.sign().toJSON());
      const json = await response.json();
      return jsonCheck(json);
    }
    /**
     * 转换为网页版搜索结果
     * @param data 本api结果
     */
    static toSearchV2(data) {
      const { code, result } = data;
      delete data.code;
      delete data.result;
      delete data.cache;
      return {
        code,
        data: Object.assign(data, {
          result: Object.entries(result).map((d) => {
            return {
              result_type: d[0],
              data: d[1]
            };
          })
        }),
        message: "0",
        ttl: 1
      };
    }
  };

  // src/utils/timer.ts
  init_tampermonkey();
  function timeout(value, time = 0) {
    return new Promise((r) => {
      setTimeout(() => {
        r(value);
      }, time);
    });
  }

  // src/page/search.ts
  var PageSearch = class extends Page {
    constructor() {
      super(search_default);
      this.location();
      this.initState();
      this.hotword();
      this.style();
      this.gat();
      this.rqt();
      this.updateDom();
    }
    /** 修复搜索推荐词 */
    static suggest() {
      jsonpHook.xhr("s.search.bilibili.com/main/suggest");
    }
    /** 修正URL */
    location() {
      poll(() => location.href.endsWith("/all"), () => {
        urlCleaner.updateLocation(location.origin);
      }, 10, 30);
    }
    /** 新版__INITIAL_STATE__可能损坏页面 */
    initState() {
      propertyHook(window, "__INITIAL_STATE__", void 0);
    }
    style() {
      addCss(\`
.home-wrap .home-form .home-suggest .hotlist {
    display: flex;
    flex-direction: column;
    width: auto;
}
.home-wrap .home-form .home-suggest .hotlist .item {
    width: auto;
}\`);
    }
    /** 获取港澳台搜索数据 */
    gat() {
      if (user.userStatus.searchAllArea) {
        const record = {};
        jsonpHook("x/web-interface/search/all/v2?", void 0, (res, url) => {
          const keyword = decodeURIComponent(urlObj(url).keyword);
          (keyword in record ? timeout(record[keyword]) : new ApiSearch(keyword).getData()).then((data) => {
            var _a3, _b2;
            record[keyword] = data;
            const vue = (_a3 = document.querySelector("#all-list > div.flow-loader")) == null ? void 0 : _a3.__vue__;
            if (vue && ((_b2 = data == null ? void 0 : data.result) == null ? void 0 : _b2.media_bangumi.length)) {
              vue.source.result.forEach((d) => {
                switch (d.result_type) {
                  case "media_bangumi": {
                    const arr2 = [].concat(d.data);
                    const names = arr2.map((d2) => d2.season_id);
                    data.result.media_bangumi.forEach((d2) => {
                      d2.season_type_name = "番剧";
                      names.includes(d2.season_id) || arr2.push(d2);
                    });
                    d.data = JSON.parse(JSON.stringify(arr2));
                    break;
                  }
                  default:
                    break;
                }
              });
            }
          });
          return res;
        }, false);
        jsonpHook(["x/web-interface/search/type?", "search_type=media_bangumi"], void 0, (res, url) => {
          var _a3, _b2, _c;
          const keyword = decodeURIComponent(urlObj(url).keyword);
          const data = record[keyword];
          if (((_a3 = data == null ? void 0 : data.result) == null ? void 0 : _a3.media_bangumi.length) && ((_c = (_b2 = res == null ? void 0 : res.data) == null ? void 0 : _b2.result) == null ? void 0 : _c.length)) {
            const arr2 = [].concat(res.data.result);
            const names = arr2.map((d) => d.season_id);
            data.result.media_bangumi.forEach((d) => {
              d.season_type_name = "番剧";
              names.includes(d.season_id) || arr2.push(d);
            });
            res.data.result = arr2;
          }
          return res;
        }, false);
      }
    }
    /** 修复搜索数据 */
    rqt() {
      jsonpHook("/search/all", void 0, (res) => {
        var _a3, _b2;
        (_b2 = (_a3 = res.data) == null ? void 0 : _a3.result) == null ? void 0 : _b2.forEach((d) => {
          d.data || (d.data = []);
        });
      }, false);
    }
    hotword() {
      xhrHook("main/hotword?", void 0, (res) => {
        res.responseType = "json";
      }, false);
    }
  };

  // src/core/automate.ts
  init_tampermonkey();
  var Automate = class {
    constructor() {
      this.modifyArgument();
      this.danmakuFirst();
      switchVideo(this.switchVideo);
      this.videospeed();
    }
    /** 展开弹幕列表 */
    danmakuFirst() {
      user.userStatus.automate.danmakuFirst && SessionStorage.setItem("player_last_filter_tab_info", 4);
    }
    /** 滚动到播放器 */
    showBofqi() {
      const str = [".bangumi_player", "#bofqi", "#bilibiliPlayer"];
      user.userStatus.automate.showBofqi && setTimeout(() => {
        const node = str.reduce((s, d) => {
          s = s || document.querySelector(d);
          return s;
        }, document.querySelector("#__bofqi"));
        node && node.scrollIntoView({ behavior: "smooth", block: "center" });
      }, 500);
    }
    /** 自动网页全屏 */
    webFullScreen() {
      user.userStatus.automate.webFullScreen && poll(() => document.querySelector(".bilibili-player-iconfont.bilibili-player-iconfont-web-fullscreen.icon-24webfull.player-tooltips-trigger"), () => document.querySelector(".bilibili-player-video-web-fullscreen").click());
    }
    /** 记忆播放速率 */
    videospeed() {
      if (user.userStatus.automate.videospeed) {
        GM.getValue("videospeed").then((videospeed) => {
          if (videospeed) {
            let setting = SessionStorage.getItem("bilibili_player_settings");
            setting ? setting.video_status ? setting.video_status.videospeed = videospeed : setting.video_status = { videospeed } : setting = { video_status: { videospeed } };
            SessionStorage.setItem("bilibili_player_settings", setting);
          }
        });
        switchVideo(() => {
          poll(() => {
            var _a3;
            return (_a3 = document.querySelector("#bofqi")) == null ? void 0 : _a3.querySelector("video");
          }, (d) => {
            d.addEventListener("ratechange", (e) => {
              GM.setValue("videospeed", e.target.playbackRate || 1);
            });
          });
        });
      }
    }
    /** 关闭抗锯齿 */
    videoDisableAA() {
      user.userStatus.videoDisableAA && poll(() => document.querySelector("#bilibiliPlayer .bilibili-player-video video"), (d) => d.style.filter += "contrast(1)");
    }
    /** 修改播放器启动参数 */
    modifyArgument() {
      player.addModifyArgument((args) => {
        const obj = urlObj(\`?\${args[2]}\`);
        user.userStatus.automate.screenWide && (obj.as_wide = 1);
        user.userStatus.automate.autoPlay && (obj.autoplay = 1);
        user.userStatus.automate.noDanmaku && (obj.danmaku = 0);
        args[2] = objUrl("", obj);
      });
    }
    /** 切p回调 */
    switchVideo = async () => {
      this.showBofqi();
      this.webFullScreen();
      this.videoDisableAA();
      if (!videoInfo.metadata && BLOD.aid) {
        apiArticleCards({ av: BLOD.aid }).then((d) => {
          Object.values(d).forEach((d2) => videoInfo.aidDatail(d2));
          videoInfo.mediaSession();
        }).catch((e) => {
          debug.error("获取aid详情出错!", e);
        });
      } else {
        videoInfo.mediaSession();
      }
    };
  };

  // src/core/webrtc.ts
  init_tampermonkey();
  var WebTRC = class {
    static disable() {
      navigator.getUserMedia = void 0;
      window.MediaStreamTrack = void 0;
      window.RTCPeerConnection = void 0;
      window.RTCSessionDescription = void 0;
      navigator.mozGetUserMedia = void 0;
      window.mozMediaStreamTrack = void 0;
      window.mozRTCPeerConnection = void 0;
      window.mozRTCSessionDescription = void 0;
      navigator.webkitGetUserMedia = void 0;
      window.webkitMediaStreamTrack = void 0;
      window.webkitRTCPeerConnection = void 0;
      window.webkitRTCSessionDescription = void 0;
    }
  };

  // src/core/ui.ts
  init_tampermonkey();

  // src/svg/blind.svg
  var blind_default = '<svg viewBox="0 0 24 24"><g><path d="M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z"></path></g></svg>';

  // src/svg/dmset.svg
  var dmset_default = '<svg viewBox="0 0 22 22"><path d="M16.5 8c1.289 0 2.49.375 3.5 1.022V6a2 2 0 00-2-2H4a2 2 0 00-2 2v10a2 2 0 002 2h7.022A6.5 6.5 0 0116.5 8zM7 13H5a1 1 0 010-2h2a1 1 0 010 2zm2-4H5a1 1 0 010-2h4a1 1 0 010 2z"></path><path d="M20.587 13.696l-.787-.131a3.503 3.503 0 00-.593-1.051l.301-.804a.46.46 0 00-.21-.56l-1.005-.581a.52.52 0 00-.656.113l-.499.607a3.53 3.53 0 00-1.276 0l-.499-.607a.52.52 0 00-.656-.113l-1.005.581a.46.46 0 00-.21.56l.301.804c-.254.31-.456.665-.593 1.051l-.787.131a.48.48 0 00-.413.465v1.209a.48.48 0 00.413.465l.811.135c.144.382.353.733.614 1.038l-.292.78a.46.46 0 00.21.56l1.005.581a.52.52 0 00.656-.113l.515-.626a3.549 3.549 0 001.136 0l.515.626a.52.52 0 00.656.113l1.005-.581a.46.46 0 00.21-.56l-.292-.78c.261-.305.47-.656.614-1.038l.811-.135A.48.48 0 0021 15.37v-1.209a.48.48 0 00-.413-.465zM16.5 16.057a1.29 1.29 0 11.002-2.582 1.29 1.29 0 01-.002 2.582z"></path></svg>';

  // src/svg/download.svg
  var download_default2 = '<svg viewBox="0 0 24 24"><g><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path></g></svg>';

  // src/svg/linechart.svg
  var linechart_default = '<svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path></svg>';

  // src/svg/net.svg
  var net_default = '<svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false"><g><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96zM14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"></path></g></svg>';

  // src/svg/note.svg
  var note_default = '<svg viewBox="0 0 24 24"><g><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"></path></g></svg>';

  // src/svg/palette.svg
  var palette_default = '<svg viewBox="0 0 24 24"><g><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-.99 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path></g></svg>';

  // src/svg/play.svg
  var play_default = '<svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path></svg>';

  // src/svg/stethoscope.svg
  var stethoscope_default = '<svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg>';

  // src/svg/warn.svg
  var warn_default = '<svg viewBox="0 0 24 24"><g><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></path></g></svg>';

  // src/svg/wrench.svg
  var wrench_default = '<svg viewBox="0 0 24 24"><g><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"></path></g></svg>';

  // src/core/accesskey.ts
  init_tampermonkey();

  // src/io/api-login-app-third.ts
  init_tampermonkey();
  var ApiLoginAppThird = class extends ApiSign {
    constructor(api) {
      super(URLS.LOGIN_APP_THIRD, "27eb53fc9058f8c3");
      this.api = api;
      this.api = encodeURIComponent(api);
    }
    async getData() {
      const response = await fetch(this.sign({ api: this.api }, this.api).toJSON(), { credentials: "include" });
      const json = await response.json();
      return jsonCheck(json).data;
    }
  };

  // src/io/passport.bilibili.com/x/passport-tv-login/h5/qrcode/confirm.ts
  init_tampermonkey();

  // src/io/android.ts
  init_tampermonkey();
  var import_md53 = __toESM(require_md5());
  var _buvid = "";
  function buvid() {
    if (_buvid)
      return _buvid;
    const buvid2 = (0, import_md53.default)(Math.random().toString()).toUpperCase();
    return _buvid = "XX" + buvid2[2] + buvid2[12] + buvid2[22] + buvid2;
  }

  // src/io/passport.bilibili.com/x/passport-tv-login/h5/qrcode/confirm.ts
  async function confirm(authCode2, csrf = getCookies().bili_jct) {
    const response = await GM.fetch(URLS.PASSPORT_QRCODE_CONFIRM, {
      method: "POST",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
        "user-agent": "Mozilla/5.0 BiliDroid/7.54.0 (bbcallen@gmail.com) os/android model/XQ-CT72 mobi_app/android build/7540300 channel/bilih5 innerVer/7540310 osVer/12 network/2" /* user-agent */,
        "buvid": buvid()
      },
      credentials: "include",
      body: objUrl("", { auth_code: authCode2, csrf, scanning_type: 1 })
    });
    const json = await response.json();
    return jsonCheck(json).data.gourl;
  }

  // src/io/passport.bilibili.com/x/passport-tv-login/qrcode/auth_code.ts
  init_tampermonkey();
  async function authCode() {
    const response = await GM.fetch(URLS.PASSPORT_AUTH_CODE, {
      method: "POST",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
        "user-agent": "Mozilla/5.0 BiliDroid/7.54.0 (bbcallen@gmail.com) os/android model/XQ-CT72 mobi_app/android build/7540300 channel/bilih5 innerVer/7540310 osVer/12 network/2" /* user-agent */,
        "buvid": buvid()
      },
      credentials: "include",
      body: new ApiSign("", "27eb53fc9058f8c3").sign({
        build: "7540300" /* build */,
        c_locale: "zh-Hans_CN" /* c_locale */,
        channel: "website",
        local_id: buvid(),
        mobi_app: "android" /* mobi_app */,
        platform: "android" /* platform */,
        s_locale: "zh-Hans_CN" /* s_locale */,
        ts: Math.floor(Date.now() / 1e3)
      }).param
    });
    const json = await response.json();
    return jsonCheck(json).data.auth_code;
  }

  // src/io/passport.bilibili.com/x/passport-tv-login/qrcode/poll.ts
  init_tampermonkey();
  async function poll2(authCode2) {
    const response = await GM.fetch(URLS.PASSPORT_QRCODE_POLL, {
      method: "POST",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
        "user-agent": "Mozilla/5.0 BiliDroid/7.54.0 (bbcallen@gmail.com) os/android model/XQ-CT72 mobi_app/android build/7540300 channel/bilih5 innerVer/7540310 osVer/12 network/2" /* user-agent */,
        "buvid": buvid()
      },
      credentials: "include",
      body: new ApiSign("", "27eb53fc9058f8c3").sign({
        build: "7540300" /* build */,
        c_locale: "zh-Hans_CN" /* c_locale */,
        channel: "website",
        local_id: buvid(),
        mobi_app: "android" /* mobi_app */,
        platform: "android" /* platform */,
        s_locale: "zh-Hans_CN" /* s_locale */,
        ts: Math.floor(Date.now() / 1e3),
        auth_code: authCode2
      }).param
    });
    const json = await response.json();
    return jsonCheck(json).data.access_token;
  }

  // src/core/accesskey.ts
  var AccessKey = class {
    authCode = "";
    constructor() {
      const button = [{
        text: "开始授权",
        callback: () => this.poll()
      }];
      if (user.userStatus.accessKey.token) {
        button[0].text = "刷新授权";
        button.push({
          text: "取消授权",
          callback: () => this.remove()
        });
      }
      alert([
        "【账户授权】将授权脚本获取您的登录鉴权,允许脚本访问一些网页端无权访问的B站接口,以实现【解除播放限制】等功能。",
        "警告:如果您启用了脚本的【解除播放限制】功能,并且选择使用【自定义】服务器,请务必自行确认服务器的可信度!",
        "第三方服务器获得授权等于您在上面登录了B站,好比在网吧登录又忘了退出,第三方能用您的账户实现任何登录状态能进行的操作!",
        "成功授权将添加一条扫码登录信息!",
        "个中风险请务必知悉!<strong>如无必要,切莫授权!</strong>"
      ], "授权确认", button);
    }
    get() {
      if (uid) {
        const msg = toast.list("正在申请账户授权 >>>");
        new ApiLoginAppThird("https://www.mcbbs.net/template/mcbbs/image/special_photo_bg.png").getData().then(async (d) => {
          msg.push("> 成功获取到授权链接~");
          return GM.fetch(d.confirm_uri, { credentials: "include" }, true);
        }).then((d) => {
          const date = (/* @__PURE__ */ new Date()).getTime();
          const dateStr = timeFormat(date, true);
          const obj = urlObj(d.url);
          if (!obj.access_key)
            throw new Error("未能获取到鉴权参数~");
          user.userStatus.accessKey.token = obj.access_key;
          user.userStatus.accessKey.date = date;
          user.userStatus.accessKey.dateStr = dateStr;
          msg.push("> ------- 授权成功 -------", \`> 鉴权: \${obj.access_key}\`, \`> 日期:\${dateStr}\`);
          msg.type = "success";
          msg.delay = 4;
        }).catch((e) => {
          msg.push("> 授权出错!", e);
          msg.type = "error";
          msg.delay = 4;
        });
      } else {
        toast.warning("请先登录B站账户!");
        biliQuickLogin();
      }
    }
    /**
     * 新版方法  
     * @see https://github.com/lzghzr/TampermonkeyJS/blob/master/libBilibiliToken/libBilibiliToken.ts
     */
    poll() {
      if (uid) {
        const msg = toast.list("正在申请账户授权 >>>", "> 获取登录二维码");
        authCode().then(async (d) => {
          if (!d) {
            msg.push("> 未能获取到二维码!");
            throw new Error("获取二维码出错!", { cause: d });
          }
          msg.push("> 获取到二维码", \`> \${d}\`);
          this.authCode = d;
          await this.defer();
          return confirm(d);
        }).then((d) => {
          msg.push("> 扫描二维码", \`> \${d}\`, "> 拉取token");
          return poll2(this.authCode);
        }).then((d) => {
          if (!d)
            throw new Error("未能获取到鉴权参数~");
          const date = (/* @__PURE__ */ new Date()).getTime();
          const dateStr = timeFormat(date, true);
          user.userStatus.accessKey.token = d;
          user.userStatus.accessKey.date = date;
          user.userStatus.accessKey.dateStr = dateStr;
          msg.push("> ------- 授权成功 -------", \`> 鉴权: \${d}\`, \`> 日期:\${dateStr}\`);
          msg.type = "success";
          msg.delay = 4;
        }).catch((e) => {
          msg.push("> 授权出错!", e);
          msg.type = "error";
          msg.delay = 4;
        });
      } else {
        toast.warning("请先登录B站账户!");
        biliQuickLogin();
      }
    }
    defer() {
      return new Promise((resolve) => {
        setTimeout(resolve, Math.floor(Math.random() * 1e3) + 3e3);
      });
    }
    remove() {
      user.userStatus.accessKey.token = void 0;
      user.userStatus.accessKey.date = 0;
      user.userStatus.accessKey.dateStr = "";
      toast.warning("已清除账户鉴权", "如果您在【解除播放限制】功能中选择【自定义】服务器,那么第三方服务器中很可能依然有鉴权。", "为求保险,您可以修改一次密码,这会强制所有鉴权失效。")();
    }
  };

  // src/core/chain.ts
  init_tampermonkey();
  var Chain = new class {
    /**
     * 链式获取目标对象的值
     * @param key 链式字符串
     * @param obj 目标对象(默认为用户数据)
     * @returns 用户数据
     * @example
     * getStatus('toast.disabled') // userStatus.toast.disabled
     */
    getStatus(key, obj = user.userStatus) {
      const arr2 = key.split(".");
      let status = obj;
      while (status && arr2.length) {
        const d = arr2.shift();
        d && (status = status[d]);
      }
      return status;
    }
    /**
     * 链式设置目标对象的值
     * @param key 链式字符串
     * @param value 用户数据
     * @param obj 目标对象(默认为用户数据)
     * @example
     * setStatus('toast.disabled', false) // userStatus.toast.disabled
     */
    setStatus(key, value, obj = user.userStatus) {
      try {
        const arr2 = key.split(".");
        let target = obj;
        key = void 0;
        while (arr2.length) {
          key && (target = target[key]);
          key = arr2.shift();
        }
        target[key] = value;
      } catch {
      }
    }
  }();

  // src/core/ui/desc.ts
  init_tampermonkey();

  // src/css/desc.css
  var desc_default = ".container {\\r\\n    position: fixed;\\r\\n    top: 16px;\\r\\n    left: 100%;\\r\\n    background: hsla(0, 0%, 95.7%, .8);\\r\\n    border-radius: 2px;\\r\\n    box-shadow: 0 6px 12px 0 rgba(106, 115, 133, 22%);\\r\\n    color: #000;\\r\\n    width: 381px;\\r\\n    z-index: 1;\\r\\n}\\r\\n\\r\\n.title {\\r\\n    text-align: center;\\r\\n    margin-top: 16px;\\r\\n    margin-bottom: 3px;\\r\\n    font-size: 12px;\\r\\n}\\r\\n\\r\\n.content {\\r\\n    font-size: 12px;\\r\\n    line-height: 19px;\\r\\n    padding: 0 16px 16px;\\r\\n    text-align: justify;\\r\\n    white-space: pre-line;\\r\\n}";

  // src/core/ui/desc.ts
  var Desc = class extends HTMLElement {
    _title;
    _content;
    show = true;
    timer;
    _container;
    _parrent;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = \`<div class="container"><div class="title"></div><div class="content"></div></div>\`;
      addCss(desc_default, void 0, root);
      this._container = root.querySelector(".container");
      this._title = root.querySelector(".title");
      this._content = root.querySelector(".content");
      this.toggle(false);
    }
    /**
     * 更新浮窗
     * @param title 标题
     * @param content 内容
     * @param appendTo 父节点
     */
    value(title, content, appendTo) {
      this._title.innerHTML = title;
      this._content.innerHTML = content;
      this._parrent = appendTo;
      appendTo.appendChild(this);
      appendTo.addEventListener("mouseover", () => {
        clearTimeout(this.timer);
        this.timer = setTimeout(() => {
          this.toggle(true);
        }, 300);
      });
      appendTo.addEventListener("mouseout", () => {
        clearTimeout(this.timer);
        this.timer = setTimeout(() => {
          this.toggle(false);
        }, 300);
      });
    }
    toggle(show) {
      this.show = show === void 0 ? !this.show : show;
      this.style.display = this.show ? "" : "none";
      if (this._parrent) {
        const rect = this._parrent.getBoundingClientRect();
        this._container.style.top = rect.top - rect.height * 2 + "px";
      }
    }
  };
  customElements.get(\`desc-\${"1272ee5"}\`) || customElements.define(\`desc-\${"1272ee5"}\`, Desc);

  // src/core/ui/interface.ts
  init_tampermonkey();

  // src/html/ui-interface.html
  var ui_interface_default = '<div class="box">\\r\\n    <div class="tool">\\r\\n        <div title="关闭" class="icon"></div>\\r\\n        <header>Bilbili Old</header>\\r\\n    </div>\\r\\n    <div class="content">\\r\\n        <div class="contain">\\r\\n            <div class="menu"></div>\\r\\n            <div class="item"></div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n<style type="text/css">\\r\\n    .box {\\r\\n        left: 50%;\\r\\n        top: 50%;\\r\\n        transform: translateX(-50%) translateY(-50%);\\r\\n        min-width: 600px;\\r\\n        min-height: 400px;\\r\\n        padding: 0;\\r\\n        border: 0;\\r\\n        position: fixed;\\r\\n        z-index: 11110;\\r\\n        display: none;\\r\\n        box-sizing: border-box;\\r\\n        background: #fff;\\r\\n        border-radius: 8px;\\r\\n        box-shadow: 0 6px 12px 0 rgba(106, 115, 133, 22%);\\r\\n        transition: transform 0.3s ease-in;\\r\\n        line-height: 14px;\\r\\n        font: 12px Helvetica Neue, Helvetica, Arial, Microsoft Yahei, Hiragino Sans GB,\\r\\n            Heiti SC, WenQuanYi Micro Hei, sans-serif;\\r\\n    }\\r\\n\\r\\n    .tool {\\r\\n        border-bottom-left-radius: 8px;\\r\\n        border-bottom-right-radius: 8px;\\r\\n        overflow: hidden;\\r\\n        width: 100%;\\r\\n        display: inline-flex;\\r\\n        z-index: 1;\\r\\n        align-items: center;\\r\\n        justify-content: flex-end;\\r\\n        pointer-events: none;\\r\\n    }\\r\\n\\r\\n    .tool header {\\r\\n        position: absolute;\\r\\n        transform: translateX(-50%);\\r\\n        left: 50%;\\r\\n        font-size: 14px;\\r\\n    }\\r\\n\\r\\n    .tool div {\\r\\n        border-radius: 50%;\\r\\n        padding: 10px;\\r\\n        transform: scale(0.8);\\r\\n        pointer-events: visible;\\r\\n        transition: opacity 0.3s ease;\\r\\n    }\\r\\n\\r\\n    .tool div:hover {\\r\\n        background-color: rgba(0, 0, 0, 10%);\\r\\n    }\\r\\n\\r\\n    .content {\\r\\n        position: relative;\\r\\n        border-bottom-left-radius: 8px;\\r\\n        border-bottom-right-radius: 8px;\\r\\n        overflow: hidden;\\r\\n        background-color: #fff;\\r\\n    }\\r\\n\\r\\n    .contain {\\r\\n        padding-bottom: 15px;\\r\\n        background-position: top center;\\r\\n        background-size: contain;\\r\\n        background-repeat: no-repeat;\\r\\n        display: flex;\\r\\n        align-items: flex-start;\\r\\n        flex: 1;\\r\\n        height: 360px;\\r\\n    }\\r\\n\\r\\n    .menu::-webkit-scrollbar,\\r\\n    .item::-webkit-scrollbar {\\r\\n        width: 0 !important;\\r\\n        height: 0 !important;\\r\\n    }\\r\\n\\r\\n    .menu {\\r\\n        flex: 1 1 0;\\r\\n        flex-basis: calc(480px * 0.2);\\r\\n        height: 100%;\\r\\n        position: sticky;\\r\\n        top: 0;\\r\\n        display: flex;\\r\\n        flex-direction: column;\\r\\n        min-width: fit-content;\\r\\n        overflow: auto;\\r\\n        scrollbar-width: none;\\r\\n    }\\r\\n\\r\\n    .item {\\r\\n        flex: 4 4 0;\\r\\n        flex-basis: calc(480px * 0.8);\\r\\n        height: 100%;\\r\\n        box-sizing: border-box;\\r\\n        display: flex;\\r\\n        flex-direction: column;\\r\\n        margin: 0 auto;\\r\\n        position: relative;\\r\\n        overflow: auto;\\r\\n        scrollbar-width: none;\\r\\n        background-image: linear-gradient(to top, white, white),\\r\\n            linear-gradient(to top, white, white),\\r\\n            linear-gradient(to top, rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0)),\\r\\n            linear-gradient(to bottom, rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0));\\r\\n        background-position: bottom center, top center, bottom center, top center;\\r\\n        background-color: white;\\r\\n        background-repeat: no-repeat;\\r\\n        background-size: 100% 20px, 100% 20px, 100% 10px, 100% 10px;\\r\\n        background-attachment: local, local, scroll, scroll;\\r\\n    }\\r\\n\\r\\n    .item>div {\\r\\n        margin-bottom: 60px;\\r\\n    }\\r\\n\\r\\n    .menuitem {\\r\\n        align-items: center;\\r\\n        display: flex;\\r\\n        font-weight: 500;\\r\\n        margin-inline-end: 2px;\\r\\n        margin-inline-start: 1px;\\r\\n        min-height: 20px;\\r\\n        padding-bottom: 10px;\\r\\n        padding-inline-start: 23px;\\r\\n        padding-top: 10px;\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    .menuitem:hover {\\r\\n        background-color: rgb(0, 0, 0, 6%);\\r\\n    }\\r\\n\\r\\n    .menuitem>div {\\r\\n        padding-inline-end: 12px;\\r\\n    }\\r\\n\\r\\n    .selected {\\r\\n        color: rgb(51, 103, 214) !important;\\r\\n    }\\r\\n\\r\\n    .selected>.icon {\\r\\n        fill: rgb(51, 103, 214) !important;\\r\\n    }\\r\\n\\r\\n    .contain1 {\\r\\n        margin-bottom: 3px;\\r\\n        padding-inline-start: 20px;\\r\\n        padding-inline-end: 20px;\\r\\n        display: flex;\\r\\n        flex-direction: column;\\r\\n        outline: none;\\r\\n        position: relative;\\r\\n    }\\r\\n\\r\\n    .header .title {\\r\\n        color: #000;\\r\\n        font-size: 108%;\\r\\n        font-weight: 400;\\r\\n        letter-spacing: 0.25px;\\r\\n        margin-bottom: 12px;\\r\\n        outline: none;\\r\\n        padding-bottom: 4px;\\r\\n    }\\r\\n\\r\\n    .card {\\r\\n        border-radius: 4px;\\r\\n        box-shadow: 0px 0px 1px 1px rgb(60 64 67 / 30%);\\r\\n        flex: 1;\\r\\n        color: #000;\\r\\n        line-height: 154%;\\r\\n        user-select: text;\\r\\n        margin-inline: 12px;\\r\\n        margin-bottom: 12px;\\r\\n    }\\r\\n\\r\\n    .contain2 {\\r\\n        align-items: center;\\r\\n        border-top: 1px solid rgba(0, 0, 0, 6%);\\r\\n        display: flex;\\r\\n        min-height: 24px;\\r\\n        padding: 0 20px;\\r\\n        flex-wrap: wrap;\\r\\n        justify-content: flex-end;\\r\\n        background-color: transparent !important;\\r\\n    }\\r\\n\\r\\n    .value {\\r\\n        flex: 1;\\r\\n        flex-basis: 1e-9px;\\r\\n        display: flex;\\r\\n    }\\r\\n\\r\\n    .value>* {\\r\\n        flex: 1;\\r\\n        flex-basis: 1e-9px;\\r\\n        display: flex;\\r\\n        flex-wrap: wrap;\\r\\n        justify-content: flex-end;\\r\\n        align-items: center;\\r\\n        align-content: center;\\r\\n    }\\r\\n\\r\\n    .label {\\r\\n        flex: 1;\\r\\n        flex-basis: 1e-9px;\\r\\n        padding-block-end: 12px;\\r\\n        padding-block-start: 12px;\\r\\n        padding-inline-start: 12px;\\r\\n    }\\r\\n\\r\\n    .switch>.label,\\r\\n    .button>.label,\\r\\n    .select>.label,\\r\\n    .input>.label,\\r\\n    .slider>.label {\\r\\n        flex: 2;\\r\\n    }\\r\\n\\r\\n    .select>.value,\\r\\n    .input>.value,\\r\\n    .slider>.value {\\r\\n        flex: 3;\\r\\n    }\\r\\n\\r\\n    .sub {\\r\\n        color: rgb(95, 99, 104);\\r\\n        font-weight: 400;\\r\\n    }\\r\\n\\r\\n    .icon {\\r\\n        align-items: center;\\r\\n        border-radius: 50%;\\r\\n        display: flex;\\r\\n        height: 20px;\\r\\n        justify-content: center;\\r\\n        position: relative;\\r\\n        width: 20px;\\r\\n        box-sizing: content-box;\\r\\n        background: none;\\r\\n        cursor: pointer;\\r\\n    }\\r\\n</style>';

  // src/core/ui/interface.ts
  var BiliOldInterface = class extends HTMLElement {
    /** 跟节点 */
    _box;
    /** 标题栏 */
    _tool;
    /** 关闭按钮 */
    _close;
    /** 菜单栏 */
    _menu;
    /** 项目栏 */
    _item;
    /** 显示设置 */
    showing = false;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = ui_interface_default;
      this._box = root.children[0];
      this._tool = root.children[0].children[0];
      this._close = root.children[0].children[0].children[0];
      this._menu = root.children[0].children[1].children[0].children[0];
      this._item = root.children[0].children[1].children[0].children[1];
      this._close.innerHTML = fork_default;
      this._close.addEventListener("click", () => this.hide());
    }
    show() {
      document.body.contains(this) || document.body.appendChild(this);
      this._box.style.display = "block";
      this.showing = true;
    }
    hide() {
      this._box.style.display = "";
      this.showing = false;
    }
    addMenu(menu) {
      this._menu.appendChild(menu);
      const sets = menu.show();
      menu.show = () => {
        this._item.replaceChildren(...sets);
        return sets;
      };
    }
  };
  customElements.get("bili-old") || customElements.define("bili-old", BiliOldInterface);

  // src/core/ui/item.ts
  init_tampermonkey();
  var SettingItem = class extends HTMLDivElement {
    _value = document.createElement("div");
    /**
     * 新建设置项
     * @param id keyof typeof {@link userStatus}
     * @param title 标题
     * @param sub 副标题
     * @param svg 图标
     */
    init(id, title, sub, svg) {
      var _a3;
      this.innerHTML = \`<div class="contain2\${id ? \` \${id}\` : ""}">\${svg ? \`<div class="icon">\${svg}</div>\` : ""}
    <div class="label">\${title}\${sub ? \`<div class="sub">\${sub}</div>\` : ""}</div>
</div>\`;
      this._value.className = "value";
      (_a3 = this.querySelector(".contain2")) == null ? void 0 : _a3.appendChild(this._value);
    }
    /** 添加值 */
    value(value) {
      this._value.appendChild(value);
    }
  };
  customElements.get(\`item-\${"1272ee5"}\`) || customElements.define(\`item-\${"1272ee5"}\`, SettingItem, { extends: "div" });

  // src/core/ui/menu.ts
  init_tampermonkey();

  // src/core/ui/item-container.ts
  init_tampermonkey();
  var ItemContainer = class extends HTMLDivElement {
    _title;
    /** 设置项容器 */
    _card;
    constructor() {
      super();
      this.innerHTML = \`<div class="contain1">
    <div class="header">
        <h2 class="title"></h2>
    </div>
</div>
<div class="card"></div>\`;
      this._title = this.querySelector(".title");
      this._card = this.querySelector(".card");
    }
    /** 初始化设置项容器 */
    init(title) {
      this._title.textContent = title;
    }
    /**
     * 添加设置
     * @param item 设置项
     */
    addSetting(item) {
      this._card.append(...item);
    }
  };
  customElements.get(\`item-container-\${"1272ee5"}\`) || customElements.define(\`item-container-\${"1272ee5"}\`, ItemContainer, { extends: "div" });

  // src/core/ui/menu.ts
  var Menuitem = class extends HTMLDivElement {
    container = [new ItemContainer()];
    constructor() {
      super();
      this.addEventListener("click", () => {
        var _a3, _b2;
        (_b2 = (_a3 = this.parentElement) == null ? void 0 : _a3.querySelector(".selected")) == null ? void 0 : _b2.classList.remove("selected");
        this.classList.add("selected");
        this.show();
      });
    }
    /**
     * 初始化菜单项
     * @param name 标题
     * @param svg 图标
     * @returns 默认设置项容器
     */
    init(name, svg) {
      this.className = "menuitem";
      this.innerHTML = (svg ? \`<div class="icon">\${svg}</div>\` : "") + name;
      this.container[0].init(name);
      return this.container[0];
    }
    /**
     * 添加设置分组
     * @param name 分组名称
     * @returns 分组设置项容器
     */
    addCard(name) {
      const con = new ItemContainer();
      con.init(name);
      this.container.push(con);
      return con;
    }
    /**
     * 添加设置项到容器
     * @param item 设置项
     * @param i 容器序号
     */
    addSetting(item, i = 0) {
      isArray(item) || (item = [item]);
      item.forEach((d) => {
        d.addEventListener("show", (e) => {
          Promise.resolve(this.click()).then(() => {
            d.scrollIntoView({ behavior: "smooth", block: "start" });
            e.stopPropagation();
          });
        });
      });
      i = Math.min(this.container.length - 1, i);
      this.container[i].addSetting(item);
    }
    /** 显示容器中的设置 */
    show() {
      return this.container;
    }
  };
  customElements.get(\`menuitem-\${"1272ee5"}\`) || customElements.define(\`menuitem-\${"1272ee5"}\`, Menuitem, { extends: "div" });

  // src/core/ui/utils/checkbox.ts
  init_tampermonkey();

  // src/html/checkbox.html
  var checkbox_default = \`<input type="checkbox" id="checkbox">\\r
<label for="checkbox"></label>\\r
<style>\\r
    input[type="checkbox"] {\\r
        display: none;\\r
    }\\r
\\r
    input~label {\\r
        cursor: pointer;\\r
    }\\r
\\r
    input:checked~label:before {\\r
        content: '\\\\2714';\\r
    }\\r
\\r
    input~label:before {\\r
        width: 12px;\\r
        height: 12px;\\r
        line-height: 14px;\\r
        vertical-align: text-bottom;\\r
        border-radius: 3px;\\r
        border: 1px solid #d3d3d3;\\r
        display: inline-block;\\r
        text-align: center;\\r
        content: ' ';\\r
    }\\r
</style>\`;

  // src/core/ui/utils/checkbox.ts
  var CheckBox = class extends HTMLElement {
    _input;
    _text;
    static get observedAttributes() {
      return [
        "label",
        "value"
      ];
    }
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = checkbox_default;
      this._input = root.children[0];
      this._text = root.children[1];
      this._input.addEventListener("change", () => {
        this.setAttribute("value", this._input.checked);
        this.dispatchEvent(new Event("change"));
      });
    }
    /** 是否选中 */
    get value() {
      return this.getAttribute("value") === "true" ? true : false;
    }
    set value(v) {
      v || (v = false);
      this.setAttribute("value", v);
    }
    /** 标签 */
    get label() {
      return this.getAttribute("label");
    }
    set label(v) {
      v || (v = "");
      this.setAttribute("label", v);
    }
    attributeChangedCallback(name, oldValue, newValue) {
      if (oldValue === newValue)
        return;
      switch (name) {
        case "label":
          this._text.textContent = newValue;
          break;
        case "value":
          this._input.checked = newValue === "false" ? false : true;
          break;
        default:
          break;
      }
    }
    /** 刷新值 */
    update(value) {
      Object.entries(value).forEach((d) => this[d[0]] = d[1]);
    }
  };
  customElements.get(\`checkbox-\${"1272ee5"}\`) || customElements.define(\`checkbox-\${"1272ee5"}\`, CheckBox);
  var CheckBoxs = class extends HTMLDivElement {
    \$value = [];
    checkboxs = {};
    get value() {
      return this.\$value;
    }
    set value(v) {
      v.forEach((d) => {
        if (!this.\$value.includes(d)) {
          if (this.checkboxs[d]) {
            this.checkboxs[d].value = true;
          } else {
            this.update(Object.keys(this.checkboxs).concat(d));
            this.checkboxs[d].value = true;
          }
        }
      });
      this.\$value.forEach((d) => {
        v.includes(d) || (this.checkboxs[d].value = false);
      });
      this.\$value = [...v];
    }
    update(labels) {
      labels.forEach((d) => {
        if (!this.checkboxs[d]) {
          const checkbox = new CheckBox();
          checkbox.update({ label: d });
          checkbox.addEventListener("change", () => {
            if (checkbox.value) {
              this.\$value.includes(d) || this.\$value.push(d);
            } else {
              const i = this.\$value.indexOf(d);
              i >= 0 && this.\$value.splice(i, 1);
            }
            this.dispatchEvent(new Event("change"));
          });
          this.appendChild(checkbox);
          this.checkboxs[d] = checkbox;
        }
      });
      this.\$value.forEach((d) => {
        var _a3;
        if (!labels.includes(d)) {
          (_a3 = this.checkboxs[d]) == null ? void 0 : _a3.remove();
          const i = this.\$value.indexOf(d);
          i >= 0 && this.\$value.splice(i, 1);
        }
      });
    }
  };
  customElements.get(\`checkboxs-\${"1272ee5"}\`) || customElements.define(\`checkboxs-\${"1272ee5"}\`, CheckBoxs, { extends: "div" });

  // src/core/ui/utils/input.ts
  init_tampermonkey();

  // src/html/input.html
  var input_default = '<div class="input">\\r\\n    <input>\\r\\n    <ul class="input-list"></ul>\\r\\n</div>\\r\\n<style type="text/css">\\r\\n    .input {\\r\\n        width: 100%;\\r\\n        display: inline-block;\\r\\n        position: relative;\\r\\n        border: 0;\\r\\n        overflow: visible;\\r\\n        white-space: nowrap;\\r\\n        height: 24px;\\r\\n        line-height: 24px;\\r\\n        cursor: pointer;\\r\\n        font-size: 12px;\\r\\n    }\\r\\n\\r\\n    .input input {\\r\\n        height: 24px;\\r\\n        line-height: 24px;\\r\\n        display: inline;\\r\\n        user-select: auto;\\r\\n        text-decoration: none;\\r\\n        outline: none;\\r\\n        width: calc(100% - 10px);\\r\\n        background: transparent;\\r\\n        padding: 0 5px;\\r\\n        border: 1px solid #ccd0d7;\\r\\n        border-radius: 4px;\\r\\n    }\\r\\n\\r\\n    .input input:focus {\\r\\n        border-color: #00a1d6;\\r\\n    }\\r\\n\\r\\n    .input-list {\\r\\n        display: none;\\r\\n        margin: 0;\\r\\n        width: 100%;\\r\\n        padding: 0;\\r\\n        border-radius: 0 0 4px 4px;\\r\\n        max-height: 120px;\\r\\n        background-color: #fff;\\r\\n        border: 1px solid #ccd0d7;\\r\\n        box-shadow: 0 0 2px 0 #ccd0d7;\\r\\n        position: absolute;\\r\\n        left: -1px;\\r\\n        right: auto;\\r\\n        z-index: 2;\\r\\n        overflow: hidden auto;\\r\\n        white-space: nowrap;\\r\\n    }\\r\\n\\r\\n    .input:hover .input-list {\\r\\n        display: block;\\r\\n    }\\r\\n\\r\\n    .input-list-row {\\r\\n        padding: 0 5px;\\r\\n        transition: background-color .3s;\\r\\n        line-height: 30px;\\r\\n        height: 30px;\\r\\n        font-size: 12px;\\r\\n        cursor: pointer;\\r\\n        color: #222;\\r\\n        position: relative;\\r\\n    }\\r\\n\\r\\n    .input-list-row:hover {\\r\\n        background-color: #f4f5f7;\\r\\n        color: #6d757a;\\r\\n    }\\r\\n\\r\\n    .cancel {\\r\\n        position: absolute;\\r\\n        right: 0;\\r\\n        top: 0px;\\r\\n        width: 38px;\\r\\n        height: 28px;\\r\\n        background: url(//static.hdslb.com/images/base/icons.png) -461px -530px no-repeat;\\r\\n    }\\r\\n\\r\\n    .input-list-row:hover .cancel {\\r\\n        background-position: -525px -530px;\\r\\n    }\\r\\n</style>';

  // src/core/ui/utils/input.ts
  var InputArea = class extends HTMLElement {
    _input;
    _ul;
    \$prop = {};
    \$value = "";
    \$candidate = [];
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = input_default;
      this._input = root.children[0].children[0];
      this._ul = root.children[0].children[1];
      new Scrollbar(this._ul, false, true, true);
      this._input.addEventListener("change", () => {
        this.\$value = this.\$prop.type === "file" ? this._input.files : this._input.value;
        this.dispatchEvent(new Event("change"));
      });
    }
    /** input标签属性 */
    get prop() {
      return this.\$prop;
    }
    set prop(v) {
      this.\$prop = v;
      Object.entries(v).forEach((d) => this._input.setAttribute(...d));
    }
    /** 输入框值 */
    get value() {
      return this.\$value;
    }
    set value(v) {
      if (this.\$value === v)
        return;
      this.\$value = v || "";
      this._input.value = this.\$value;
    }
    /** 候选值 */
    get candidate() {
      return this.\$candidate;
    }
    set candidate(v) {
      this.\$candidate = v;
      this._ul.replaceChildren(...v.map((d, i, t) => {
        const li = document.createElement("li");
        li.className = "input-list-row";
        li.addEventListener("click", (e) => {
          this.value = d;
          e.stopPropagation();
          this.dispatchEvent(new Event("change"));
        });
        const span = document.createElement("span");
        span.textContent = d;
        const div = document.createElement("div");
        div.className = "cancel";
        div.addEventListener("click", (e) => {
          t.splice(i, 1);
          li.remove();
          e.stopPropagation();
        });
        li.append(span, div);
        return li;
      }));
    }
    /** 刷新值 */
    update(value) {
      Object.entries(value).forEach((d) => this[d[0]] = d[1]);
    }
  };
  customElements.get(\`input-\${"1272ee5"}\`) || customElements.define(\`input-\${"1272ee5"}\`, InputArea);

  // src/core/ui/utils/select.ts
  init_tampermonkey();

  // src/html/select.html
  var select_default = '<div class="selectmenu">\\r\\n    <div class="selectmenu-txt"><span></span></div>\\r\\n    <div class="selectmenu-arrow arrow-down"></div>\\r\\n    <ul class="selectmenu-list"></ul>\\r\\n</div>\\r\\n<style type="text/css">\\r\\n    .selectmenu {\\r\\n        width: 100%;\\r\\n        display: inline-block;\\r\\n        position: relative;\\r\\n        border: 1px solid #ccd0d7;\\r\\n        border-radius: 4px;\\r\\n        overflow: visible;\\r\\n        white-space: nowrap;\\r\\n        height: 24px;\\r\\n        line-height: 24px;\\r\\n        cursor: pointer;\\r\\n        font-size: 12px;\\r\\n    }\\r\\n\\r\\n    .selectmenu-txt {\\r\\n        display: inline-block;\\r\\n        overflow: hidden;\\r\\n        vertical-align: top;\\r\\n        text-overflow: ellipsis;\\r\\n        padding: 0 5px;\\r\\n        height: 24px;\\r\\n        line-height: 24px;\\r\\n    }\\r\\n\\r\\n    .selectmenu-arrow {\\r\\n        position: absolute;\\r\\n        background-color: transparent;\\r\\n        top: 0;\\r\\n        right: 4px;\\r\\n        z-index: 0;\\r\\n        border-radius: 4px;\\r\\n        width: 20px;\\r\\n        height: 100%;\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    .arrow-down:before {\\r\\n        margin: 0 auto;\\r\\n        margin-top: 8px;\\r\\n        width: 0;\\r\\n        height: 0;\\r\\n        display: block;\\r\\n        border-width: 4px 4px 0;\\r\\n        border-style: solid;\\r\\n        border-color: #99a2aa transparent transparent;\\r\\n        position: relative;\\r\\n        content: "";\\r\\n    }\\r\\n\\r\\n    .selectmenu-list {\\r\\n        display: none;\\r\\n        margin: 0;\\r\\n        width: 100%;\\r\\n        padding: 0;\\r\\n        max-height: 120px;\\r\\n        background-color: #fff;\\r\\n        border: 1px solid #ccd0d7;\\r\\n        box-shadow: 0 0 2px 0 #ccd0d7;\\r\\n        position: absolute;\\r\\n        left: -1px;\\r\\n        right: auto;\\r\\n        z-index: 2;\\r\\n        overflow: hidden auto;\\r\\n        white-space: nowrap;\\r\\n    }\\r\\n\\r\\n    .selectmenu:hover .selectmenu-list {\\r\\n        display: block;\\r\\n    }\\r\\n\\r\\n    .selectmenu-list-row {\\r\\n        padding: 0 5px;\\r\\n        transition: background-color .3s;\\r\\n        line-height: 30px;\\r\\n        height: 30px;\\r\\n        font-size: 12px;\\r\\n        cursor: pointer;\\r\\n        color: #222;\\r\\n    }\\r\\n\\r\\n    .selectmenu-list-row:hover {\\r\\n        background-color: #f4f5f7;\\r\\n        color: #6d757a;\\r\\n    }\\r\\n</style>';

  // src/core/ui/utils/select.ts
  var SelectMenu = class extends HTMLElement {
    _text;
    _list;
    \$value = "";
    \$candidate = [];
    \$styles = {};
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = select_default;
      this._text = root.children[0].children[0].children[0];
      this._list = root.children[0].children[2];
      new Scrollbar(this._list, false, true, true);
    }
    /** 当前值 */
    get value() {
      return this.\$value;
    }
    set value(v) {
      if (this.\$value === v)
        return;
      this.\$value = v || "";
      this._text.textContent = v || "";
      v && this.\$styles[v] && this._text.setAttribute("style", this.\$styles[v]);
    }
    /** 候选值 */
    get candidate() {
      return this.\$candidate;
    }
    set candidate(v) {
      this.\$candidate = v;
      this._list.replaceChildren(...v.map((d, i, t) => {
        const li = document.createElement("li");
        li.className = "selectmenu-list-row";
        li.addEventListener("click", (e) => {
          this.value = d;
          this.dispatchEvent(new Event("change"));
          e.stopPropagation();
        });
        const span = document.createElement("span");
        span.textContent = d;
        this.\$styles[d] && span.setAttribute("style", this.\$styles[d]);
        li.appendChild(span);
        return li;
      }));
    }
    /** 候选值对应的行内应该 格式 => 候选值: 样式 */
    get styles() {
      return this.\$styles;
    }
    set styles(v) {
      this.\$styles = v;
      this.candidate = this.candidate;
    }
    /** 刷新值 */
    update(value) {
      Object.entries(value).forEach((d) => this[d[0]] = d[1]);
    }
  };
  customElements.get(\`select-\${"1272ee5"}\`) || customElements.define(\`select-\${"1272ee5"}\`, SelectMenu);

  // src/core/ui/utils/slider.ts
  init_tampermonkey();

  // src/html/slider.html
  var slider_default = '<div class="block">\\r\\n    <div class="slider">\\r\\n        <div class="slider-tracker-wrp">\\r\\n            <div class="slider-tracker">\\r\\n                <div class="slider-handle">\\r\\n                    <div class="slider-hint"></div>\\r\\n                </div>\\r\\n                <div class="slider-progress"></div>\\r\\n            </div>\\r\\n        </div>\\r\\n    </div>\\r\\n</div>\\r\\n<style type="text/css">\\r\\n    .block {\\r\\n        vertical-align: top;\\r\\n        display: inline-block;\\r\\n        width: 100%;\\r\\n    }\\r\\n\\r\\n    .slider {\\r\\n        width: 100%;\\r\\n        height: 13px;\\r\\n        clear: both;\\r\\n        position: relative;\\r\\n    }\\r\\n\\r\\n    .slider-tracker-wrp {\\r\\n        position: relative;\\r\\n        width: 100%;\\r\\n        height: 100%;\\r\\n        cursor: pointer;\\r\\n    }\\r\\n\\r\\n    .slider-tracker {\\r\\n        position: absolute;\\r\\n        width: 100%;\\r\\n        height: 6px;\\r\\n        left: 0;\\r\\n        border-radius: 4px;\\r\\n        top: 50%;\\r\\n        margin-top: -3px;\\r\\n        background-color: #e5e9ef;\\r\\n    }\\r\\n\\r\\n    .slider-handle {\\r\\n        position: absolute;\\r\\n        top: -4px;\\r\\n        height: 14px;\\r\\n        width: 14px;\\r\\n        border-radius: 7px;\\r\\n        cursor: pointer;\\r\\n        z-index: 1;\\r\\n        margin-left: -7px;\\r\\n        box-shadow: 0 0 3px #017cc3;\\r\\n        background-color: #fff;\\r\\n        transition: box-shadow .3s;\\r\\n    }\\r\\n\\r\\n    .slider-handle:hover {\\r\\n        box-shadow: 0 0 5px #017cc3;\\r\\n    }\\r\\n\\r\\n    .slider-hint {\\r\\n        display: none;\\r\\n        position: absolute;\\r\\n        top: -21px;\\r\\n        white-space: nowrap;\\r\\n        border-radius: 4px;\\r\\n        background-color: hsla(0, 0%, 100%, .8);\\r\\n        padding: 0 3px;\\r\\n        border: 1px solid #fafafa;\\r\\n        z-index: 1;\\r\\n        transform: translateX(-25%);\\r\\n        user-select: none;\\r\\n    }\\r\\n\\r\\n    .slider-progress {\\r\\n        width: 0;\\r\\n        height: 100%;\\r\\n        border-radius: 4px;\\r\\n        background-color: #00a1d6;\\r\\n        position: relative;\\r\\n    }\\r\\n</style>';

  // src/core/ui/utils/slider.ts
  function offset2(node) {
    const result = {
      top: 0,
      left: 0
    };
    const onwer = node.ownerDocument;
    if (node === onwer.body) {
      result.top = node.offsetTop;
      result.left = node.offsetLeft;
    } else {
      let rect = void 0;
      try {
        rect = node.getBoundingClientRect();
      } catch {
      }
      if (!rect || !onwer.documentElement.contains(node)) {
        rect && (result.top = rect.top, result.left = rect.left);
        return result;
      }
      result.top = rect.top + onwer.body.scrollTop - onwer.documentElement.clientTop;
      result.left = rect.left + onwer.body.scrollLeft - onwer.documentElement.clientLeft;
    }
    return result;
  }
  var SliderBlock = class extends HTMLElement {
    _handle;
    _progress;
    _hinter;
    _wrp;
    \$value = 0;
    \$min = 0;
    \$max = 100;
    \$precision = 100;
    \$hint = true;
    \$solid = false;
    \$vertical = false;
    showChange;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = slider_default;
      this._handle = root.children[0].children[0].children[0].children[0].children[0];
      this._progress = root.children[0].children[0].children[0].children[0].children[1];
      this._hinter = root.children[0].children[0].children[0].children[0].children[0].children[0];
      this._wrp = root.children[0].children[0].children[0];
      const mouseLinster = (e) => {
        const { pageX, pageY } = e;
        const offsetX = this.\$vertical ? pageY - offset2(this._wrp).top - 7 : pageX - offset2(this._wrp).left - 7;
        const allX = this._wrp.offsetWidth - 14;
        const pv = (0 > offsetX ? 0 : offsetX > allX ? allX : offsetX) / allX;
        this.value = (this.\$max - this.\$min) * Math.round(pv * this.\$precision) / this.\$precision + this.\$min;
        this.dispatchEvent(new Event("change"));
      };
      this.addEventListener("click", mouseLinster);
      const mouseClear = () => {
        window.removeEventListener("mousemove", mouseLinster);
        window.removeEventListener("mouseup", mouseClear);
      };
      this._handle.addEventListener("mousedown", () => {
        window.addEventListener("mousemove", mouseLinster);
        window.addEventListener("mouseup", mouseClear);
      });
      this._handle.addEventListener("mouseover", () => this.showChange());
      let nHint = 0;
      this.showChange = () => {
        const pv = (this.\$value - this.\$min) / (this.\$max - this.\$min);
        this._handle.style.cssText = \`left: \${(pv * (this._wrp.offsetWidth - 14) + 7) / this._wrp.offsetWidth * 100}%;\`;
        this._progress.style.cssText = \`width: \${pv * 100}%;\`;
        if (this.\$hint) {
          this._hinter.textContent = this.\$value;
          if (this._hinter.style.display !== "block")
            this._hinter.style.display = "block";
          if (this.\$solid)
            return;
          clearTimeout(nHint);
          nHint = setTimeout(() => this._hinter.style.display = "", 300);
        }
        ;
      };
    }
    /** 默认值 */
    get value() {
      return this.\$value;
    }
    set value(v) {
      if (this.\$vertical)
        v = this.\$max - v + this.\$min;
      v = (this.\$max - this.\$min) * Math.round((v - this.\$min) / (this.\$max - this.\$min) * this.\$precision) / this.\$precision + this.\$min;
      if (v === this.\$value)
        return;
      this.\$value = v;
      this.showChange();
    }
    /** 最小值 */
    get min() {
      return this.\$min;
    }
    set min(v) {
      if (v === this.\$min || v >= this.\$max)
        return;
      this.\$min = v;
      if (v > this.\$value)
        this.value = v;
      this.showChange();
    }
    /** 最大值 */
    get max() {
      return this.\$max;
    }
    set max(v) {
      if (v === this.\$max || v <= this.\$min)
        return;
      this.\$max = v;
      if (v < this.\$value)
        this.value = v;
      this.showChange();
    }
    /** 刻度数 */
    get precision() {
      return this.\$precision;
    }
    set precision(v) {
      if (v === this.\$precision)
        return;
      this.\$precision = v;
      this.value = this.\$value;
    }
    /** 提示信息 */
    get hint() {
      return this.\$hint;
    }
    set hint(v) {
      if (v === this.\$hint)
        return;
      this.\$hint = v;
    }
    /** 固化提示 */
    get solid() {
      return this.\$solid;
    }
    set solid(v) {
      if (v === this.\$solid)
        return;
      this.\$solid = v;
      this.showChange();
    }
    /** 垂直 */
    get vertical() {
      return this.\$vertical;
    }
    set vertical(v) {
      if (v === this.\$vertical)
        return;
      this.\$vertical = v;
      this.style.transform = v ? "rotate(-90deg)" : "";
    }
    connectedCallback() {
      this.showChange();
    }
    adoptedCallback() {
      this.showChange();
    }
    /** 刷新值 */
    update(value) {
      Object.entries(value).forEach((d) => this[d[0]] = d[1]);
    }
  };
  customElements.get(\`slider-\${"1272ee5"}\`) || customElements.define(\`slider-\${"1272ee5"}\`, SliderBlock);

  // src/core/ui/utils/switch.ts
  init_tampermonkey();

  // src/html/switch.html
  var switch_default = '<div class="switch">\\r\\n    <span class="bar"></span>\\r\\n    <span class="knob">\\r\\n        <i class="circle"></i>\\r\\n    </span>\\r\\n</div>\\r\\n<style type="text/css">\\r\\n    .switch {\\r\\n        cursor: pointer;\\r\\n        display: block;\\r\\n        min-width: 34px;\\r\\n        outline: none;\\r\\n        position: relative;\\r\\n        width: 34px;\\r\\n    }\\r\\n\\r\\n    .bar {\\r\\n        background-color: rgb(189, 193, 198);\\r\\n        border-radius: 8px;\\r\\n        height: 12px;\\r\\n        left: 3px;\\r\\n        position: absolute;\\r\\n        top: 2px;\\r\\n        transition: background-color linear 80ms;\\r\\n        width: 28px;\\r\\n        z-index: 0;\\r\\n    }\\r\\n\\r\\n    .bar[checked] {\\r\\n        background-color: rgb(26, 115, 232);\\r\\n        opacity: 0.5;\\r\\n    }\\r\\n\\r\\n    .bar:active {\\r\\n        box-shadow: 0 0 1px 1px rgba(26, 115, 232, 80%);\\r\\n    }\\r\\n\\r\\n    .knob {\\r\\n        background-color: #fff;\\r\\n        border-radius: 50%;\\r\\n        box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 40%);\\r\\n        display: block;\\r\\n        height: 16px;\\r\\n        position: relative;\\r\\n        transition: transform linear 80ms, background-color linear 80ms;\\r\\n        width: 16px;\\r\\n        z-index: 1;\\r\\n    }\\r\\n\\r\\n    .knob[checked] {\\r\\n        background-color: rgb(26, 115, 232);\\r\\n        transform: translate3d(18px, 0, 0);\\r\\n    }\\r\\n\\r\\n    .knob:active {\\r\\n        box-shadow: 0 0 1px 1px rgba(26, 115, 232, 80%);\\r\\n    }\\r\\n\\r\\n    .knob i {\\r\\n        color: rgba(128, 134, 139, 15%);\\r\\n        height: 40px;\\r\\n        left: -12px;\\r\\n        pointer-events: none;\\r\\n        top: -12px;\\r\\n        transition: color linear 80ms;\\r\\n        width: 40px;\\r\\n        border-radius: 50%;\\r\\n        bottom: 0;\\r\\n        display: block;\\r\\n        overflow: hidden;\\r\\n        position: absolute;\\r\\n        right: 0;\\r\\n        transform: translate3d(0, 0, 0);\\r\\n    }\\r\\n\\r\\n    .knob i[checked] {\\r\\n        color: rgb(26, 115, 232);\\r\\n    }\\r\\n\\r\\n    .knob i:active {\\r\\n        box-shadow: 0 0 1px 1px rgba(26, 115, 232, 80%);\\r\\n    }\\r\\n</style>';

  // src/core/ui/utils/switch.ts
  var SwitchButton = class extends HTMLElement {
    _bar;
    _knob;
    _circle;
    \$value = false;
    constructor() {
      super();
      const root = this.attachShadow({ mode: "closed" });
      root.innerHTML = switch_default;
      this._bar = root.children[0].children[0];
      this._knob = root.children[0].children[1];
      this._circle = root.children[0].children[1].children[0];
      root.children[0].addEventListener("click", (e) => {
        this.value = !this.\$value;
        e.stopPropagation();
        this.dispatchEvent(new Event("change"));
      });
    }
    get value() {
      return this.\$value;
    }
    set value(v) {
      if (this.\$value === v)
        return;
      if (v) {
        this._bar.setAttribute("checked", "checked");
        this._knob.setAttribute("checked", "checked");
        this._circle.setAttribute("checked", "checked");
      } else {
        this._bar.removeAttribute("checked");
        this._knob.removeAttribute("checked");
        this._circle.removeAttribute("checked");
      }
      this.\$value = v;
    }
    /** 刷新值 */
    update(value) {
      value === void 0 || (this.value = value);
      return this;
    }
  };
  customElements.get(\`switch-\${"1272ee5"}\`) || customElements.define(\`switch-\${"1272ee5"}\`, SwitchButton);

  // src/core/ui.ts
  var Menus = {
    common: ["通用", wrench_default],
    rewrite: ["重写", note_default],
    danmaku: ["弹幕", dmset_default],
    restore: ["修复", stethoscope_default],
    player: ["播放", play_default],
    style: ["样式", palette_default],
    download: ["下载", download_default2]
  };
  var UI = class {
    entry = new BilioldEntry();
    interface = new BiliOldInterface();
    menuitem = {};
    settingItem = {};
    constructor() {
      this.initMenu();
      this.initSettings();
      poll(() => document.readyState === "complete", () => {
        this.entry.type = user.userStatus.uiEntryType;
        document.body.appendChild(this.entry);
        this.updateCheck();
      }, 1e3, 0);
      this.entry.addEventListener("click", (e) => {
        this.show();
        e.stopPropagation();
      });
      if (true) {
        GM.registerMenuCommand("设置", () => {
          this.show();
        });
      }
    }
    /** 检查播放器脚本更新 */
    async updateCheck() {
      if (user.userStatus.bilibiliplayer && user.userStatus.checkUpdate) {
        const version = await GM.getValue("version");
        if (version !== BLOD.version) {
          player.loadplayer(true);
        }
      }
    }
    /** 初始化菜单 */
    initMenu() {
      Object.entries(Menus).forEach((d) => {
        const menu = new Menuitem();
        this.menuitem[d[0]] = menu;
        menu.init(d[1][0], d[1][1]);
        this.interface.addMenu(menu);
      });
    }
    /** 初始化设置项 */
    initSettings() {
      this.initSettingCommon();
      this.initSettingRewrite();
      this.initSettingStyle();
      this.initSettingRestore();
      this.initSettingPlayer();
      this.initSettingDanmaku();
      this.initSettingDownload();
    }
    /** 通用设置 */
    initSettingCommon() {
      this.menuitem.common.addSetting([
        this.switch("development", "开发者模式", "暴露调试接口到控制台", warn_default, (v) => {
          if (v) {
            propertyHook(window, "BLOD", BLOD);
          } else {
            Reflect.deleteProperty(window, "BLOD");
          }
        }, "暴露一个名为【BLOD】的对象到全局,你可以在浏览器控制台里使用内部的属性及方法进行调试。"),
        this.switch("disableReport", "数据上报", "禁止网页跟踪上报", linechart_default),
        this.select("uiEntryType", "设置入口样式", {
          candidate: ["old", "new"]
        }, "浮动齿轮或者贴边隐藏", gear_default, (v) => this.entry.type = v, "【old】入口更具隐蔽性,鼠标移动到贴边位置才会浮现。【new】入口每次网页加载完成都会滚动浮现,隐藏会鼠标移动到对应位置便会浮现。"),
        this.button("userStatus", "管理设置数据", () => {
          alert([
            "备份脚本设置或者恢复已备份的数据。",
            "当调整的选项过多时,备份一下是一个良好的主意,以免因为意外重复第二次操作。"
          ], "备份还原", [
            {
              text: "默认",
              callback: () => user.restoreUserStatus()
            },
            {
              text: "导出",
              callback: () => user.outputUserStatus()
            },
            {
              text: "导入",
              callback: () => user.inputUserStatus()
            }
          ]);
        }, "备份/恢复", "管理", blind_default),
        this.switch("bilibiliplayer", "重构播放器", "修复及增强", play_default, (v) => {
          if (v) {
            this.updateCheck();
          }
        }, "旧版播放器已于 2019-10-31T07:38:36.004Z 失去官方维护,为了旧版播放器长期可持续维护,我们使用typescript完全重构了旧版播放器。修复了旧版播放器出现异常或失效的功能(如无法获取90分钟以后的弹幕问题),移植了一些B站后续推出的功能(如互动视频、全景视频、杜比视界、杜比全景声、AV1编码支持和DRM支持等)。能力有限无法做到100%复刻,如果您想体验原生的旧版播放器,可以禁用本功能。同时由于项目托管于Github,国内部分网络环境可能访问不畅,初次启动播放器可能耗时较久,加载失败后也会回滚原生播放器。如果您的网络环境始终无法正常加载,也请禁用本功能或者前往反馈。"),
        this.select("cdn", "CDN", {
          candidate: ["Github", "jsdelivr"]
        }, "更新外部资源", net_default, void 0, "用于加载外部资源的CDN,一般而言jsdelivr比GitHub好些,然而部分网路环境可能二者都无法访问。")
      ]);
      this.menuitem.common.addCard("toastr");
      this.menuitem.common.addSetting([
        this.switch("toast.disabled", "禁用", '<a href="https://github.com/CodeSeven/toastr" target="_blank">toastr</a>', void 0, (v) => toast.disabled = v),
        this.switch("toast.rtl", "镜像", "左右翻转", void 0, (v) => toast.rtl = v),
        this.select("toast.position", "位置", {
          candidate: ["top-left", "top-center", "top-right", "top-full-width", "bottom-left", "bottom-right", "bottom-center", "bottom-full-width"]
        }, "相对屏幕", void 0, (v) => toast.position = v),
        this.slider("toast.delay", "时长", {
          min: 2,
          max: 60,
          precision: 58
        }, "单位:/秒", void 0, (v) => toast.delay = v),
        this.select("toast.type", "类型", {
          candidate: ["info", "success", "warning", "error"],
          styles: {
            info: "color: #2F96B4",
            success: "color: #51A351",
            warning: "color: #F89406",
            error: "color: #BD362F"
          }
        }, "测试限定"),
        this.inputCustom("toast.test", "测试", {
          candidate: ["Hello World!"]
        }, (v) => {
          try {
            toast.toast(user.userStatus.toast.delay, user.userStatus.toast.type, v);
          } catch (e) {
            toast.error("非常抱歉!发生了错误", e);
          }
        }, "请输入一句话~")
      ], 1);
      this.menuitem.common.addCard("账户授权");
      this.menuitem.common.addSetting([
        this.input("accessKey.token", "token", {
          prop: { type: "text", readonly: "readonly" }
        }, "access_key", void 0, void 0, "鉴权。效果等同于网页端的cookie,B站服务器用以识别您的登录身份。本脚本只会在您本地保存鉴权,绝对不会泄露出去,唯一的例外是如果启用了【解除区域限制】功能并选择自定义服务器,则会向代理服务器发送鉴权,我们无法保证第三方服务器如何使用您的鉴权,所以万请自行必确认代理服务器的可信度,<strong>三思而后行</strong>!"),
        this.input("accessKey.dateStr", "授权日期", {
          prop: { type: "text", readonly: "readonly" }
        }, "有效期一般为一个月", void 0, void 0, "脚本不会代为检查鉴权是否失效,请失效时自行重新授权。"),
        this.button("accessKey.action", "进行授权", () => {
          new AccessKey();
        }, "授权脚本使用登录鉴权", "授权", warn_default)
      ], 2);
      if (true) {
        this.menuitem.common.addSetting([
          this.switch("checkUpdate", "检查更新", "自动更新播放器", download_default2, void 0, "启用【重构播放器】后,脚本会自动检查并更新播放器组件,但可能因为网络原因更新失败,出现反复更新->反复失败的问题。您可以禁用此功能,以继续使用【重构播放器】,等待网络环境改善后再尝试启用。")
        ]);
      }
    }
    /** 重写设置 */
    initSettingRewrite() {
      this.menuitem.rewrite.addSetting([
        this.switch("av", "av/BV", "恢复旧版av页"),
        this.switch("bangumi", "bangumi", "恢复旧版bangumi页"),
        this.switch("watchlater", "稍后再看", "恢复旧版稍后再看"),
        this.switch("playlist", "播单", "恢复旧版播单页"),
        this.switch("index", "主页", "恢复旧版Bilibili主页"),
        this.switch("player", "播放器", "替换其他未重写页面的播放器"),
        this.switch("read", "专栏", "恢复旧版专栏"),
        this.switch("ranking", "排行榜", "恢复旧版全站排行榜页"),
        this.switch("search", "搜索", "恢复旧版搜索页"),
        this.switch("album", "相簿", "恢复相簿页"),
        this.switch("channel", "分区主页", "恢复各分区主页")
      ]);
    }
    /** 弹幕设置 */
    initSettingDanmaku() {
      this.menuitem.danmaku.addSetting([
        this.switch("dmproto", "proto弹幕", "protobuf弹幕支持", void 0, void 0, "因为B站已放弃维护xml弹幕,带来一些问题,比如90分钟后无弹幕,所以此项不建议禁用。【重构播放器】默认启用且不受此项影响。"),
        this.switch("dmwrap", "弹幕提权", "允许普权弹幕排版", void 0, void 0, "上古时代存在大量使用换行及空格等特殊字符来提权以达到高级弹幕效果的作品,在html5时代无法正常显示,启用此项将恢复普权弹幕排版效果。尽情享受弹幕艺术。【重构播放器】默认启用且不受此项影响。"),
        this.select("dmExtension", "弹幕格式", {
          candidate: ["xml", "json"]
        }, "拓展名", void 0, void 0, "【下载弹幕】及【本地弹幕】使用的弹幕格式,xml是传统格式,json是protobuf弹幕实际格式,前者一般拥有更小的体积,只是可能丢失彩蛋及部分非法字符。"),
        this.switch("dmContact", "合并弹幕", "本地弹幕或在线弹幕", void 0, void 0, "选择【本地弹幕】或【在线弹幕】是否与播放器内已有弹幕合并。"),
        this.inputCustom("onlineDm", "在线弹幕", {
          prop: { placeholder: "ss3398" }
        }, (v) => {
          v && typeof v === "string" && danmaku.onlineDm(v);
        }, "从其他视频加载弹幕", void 0, "从其他B站视频加载弹幕,可以输入关键url或者查询参数,如:<br/>av806828803<br/>av806828803?p=1<br/>aid=806828803&p=1<br/>ss3398<br/>ep84795<br/>注意:【重构播放器】此处加载的弹幕会替换【下载弹幕】的内容!"),
        this.button("localVideo", "本地视频", () => {
          player.changeNaiveVideo();
        }, "播放本地磁盘上的视频", "打开", void 0, "播放本地磁盘上的mp4文件。视频及音频编码格式必须是你的设备及浏览器能够支持,推荐视频编码:AVC(H.264);音频编码:AAC。配合【本地弹幕】或者【在线弹幕】功能等于是一个本地B站播放器~"),
        this.button("localDm", "本地弹幕", () => {
          user.userStatus.dmExtension === "json" ? danmaku.localDmJson() : danmaku.localDmXml();
        }, "加载本地磁盘上的弹幕", "打开", void 0, "从本地磁盘上加载弹幕文件,来源可以是下载功能下载的弹幕,拓展名.xml或.json,编码utf-8。【合并弹幕】项能选择是否与播放器内已有弹幕合并。"),
        this.switch("danmakuProtect", "弹幕保护计划", '<a href="https://github.com/MotooriKashin/Bilibili-Old/blob/master/danmaku/README.md" target="_blank">查看目录</a>', void 0, void 0, "上古弹幕作品很多高级弹幕都丢失了,幸好本项目备份了一些。启用本功能将自动识别对应作品并使用【在线弹幕】功能加载备份的弹幕,找回曾经的感动。<br>※部分4:3视频请以播放器原始形态观看获取最佳体验,不推荐全屏。")
      ]);
    }
    /** 样式设置 */
    initSettingStyle() {
      this.menuitem.style.addSetting([
        this.switch("header", "恢复旧版顶栏", "替换所有B站页面中的顶栏为旧版", void 0, void 0, "除非替换后实在不和谐,一般都会进行替换。"),
        this.switch("comment", "恢复评论翻页", "替换瀑布流评论区", void 0, void 0, "评论区版本将被固定,可能享受不到B站后续为评论区推出的新功能。本功能有专门独立为一个脚本,不要重复安装。"),
        this.switch("staff", "合作UP主", "联合投稿显示合作UP主", void 0, void 0, "在原av页up主信息处列出所有合作up主。"),
        this.switch("bangumiEplist", "保留bangumi分P", "牺牲特殊背景图", void 0, void 0, "旧版bangumi遇到有特殊背景图的视频时,会隐藏播放器下方的分集选择界面,二者不可得兼。"),
        this.switch("jointime", "注册时间", "个人空间显示账户注册时间"),
        this.switch("history", "纯视频历史", "过滤历史记录页的非视频部分"),
        this.switch("liveRecord", "录屏动态", "允许动态页显示直播录屏"),
        this.switch("commentJumpUrlTitle", "评论超链接标题", "还原为链接或短链接", void 0, void 0, "直接显示链接标题固然方便,但有些时候还是直接显示链接合适。"),
        this.switch("like", "添加点赞功能", "不支持一键三连"),
        this.switch("fullBannerCover", "修正banner分辨率", "顶栏banner完整显示不裁剪", void 0, void 0, "旧版顶栏banner接口已不再更新,脚本使用新版banner接口进行修复,但二者图片分辨率不一致。脚本默认不会去动页面样式以尽可能原汁原味还原旧版页面,导致顶栏banner被裁剪显示不全,启用本项将调整顶栏分辨率以完整显示图片。"),
        this.switch("episodeData", "分集数据", "bangumi", void 0, void 0, "显示bangumi分集播放和弹幕数,原始合计数据移动到鼠标浮动提示中。"),
        this.switch("simpleChinese", "繁 -> 简", "将繁体字幕翻译为简体", void 0, void 0, "识别并替换CC字幕繁体并转化为简体,使用内置的简繁对照表机械翻译。"),
        this.switch("commentPicture", "评论图片", "显示评论中的图片")
      ]);
    }
    /** 修复设置 */
    initSettingRestore() {
      this.menuitem.restore.addSetting([
        this.switch("lostVideo", "失效视频", "尝试获取失效视频信息", void 0, void 0, "修复收藏的失效视频的封面和标题信息,并以红色删除线标记。使用缓存数据恢复的页面重构av页默认开启且不受此项影响,其中部分上古失效视频甚至还保留了评论区。"),
        this.switch("disableSleepChcek", "禁用直播间挂机检测", "就喜欢挂后台听个响不行吗!"),
        this.switch("show1080p", "不登录高画质支持", "dash模式限定", void 0, (v) => {
          if (v && !user.userStatus.accessKey.token) {
            toast.warning("需要启用【账户授权】功能!");
            alert("需要启用【账户授权】功能!是否前往?", "【账户授权】", [{ text: "前往【账户授权】", callback: () => this.show("accessKey.token") }]);
            user.userStatus.show1080p = false;
          }
        }, "B站砍掉了不登录能获取的画质,最多只能获取480P。您可以启用【账户授权】功能,授权本脚本使用您的登录信息,如此您退出登录后依然能获取高画质视频流。本功能只会在请求播放源时添加上登录鉴权,不影响页面其他功能的未登录状态,B站也不会记录您的播放记录。本功能适用于那些经常用浏览器无痕模式上B站的用户。若<strong>非常抱歉</strong>报错请关闭本选项!"),
        this.switch("timeLine", "港澳台新番时间表", "填充首页番剧板块", void 0, void 0, "在首页番剧板块中填充港澳台最新番剧更新信息。只提取了最新的30条番剧信息,所以数据中可能不会包含过于久远的更新。本功能只能显示已更新的番剧信息,而不能作为即将更新番剧的预测。"),
        this.switch("searchAllArea", "全区域搜索", "还原港澳台Bangumi结果", void 0, void 0, "替换搜索页面默认搜索结果,使能够搜索到港澳台bangumi。需要特别注意搜索关键词,港澳台译名通常与简中译名不一致,但也不强制要求繁体,如:<br>别当欧尼酱了 -> 不当哥哥了/不當哥哥了<br>本功能只在默认搜索时生效,更改搜索范围无效。另外,启用本功能搜索到的bangumi会丢失ep列表。"),
        this.switch("watchlater2Av", "稍后再看重定向", "稍后再看重定向回av页")
      ]);
    }
    /** 播放设置 */
    initSettingPlayer() {
      this.menuitem.player.addSetting([
        this.sliderCustom("playbackRate", "播放速率", {
          min: 0.25,
          max: 5,
          precision: 95,
          value: 1,
          solid: true
        }, (e) => {
          player.playbackRate(e);
        }, "播放速率调整拓展", void 0, "调节当前HTML5播放器速率,拥有比播放器自带的更宽的调整范围。注意:未调整前的当前速率默认为1。"),
        this.switch("webRTC", "WebRTC", "<strong>关闭</strong>以禁用p2p共享带宽", void 0, void 0, "B站使用【WebRTC】实现p2p共享,等同于将您的设备变成了B站的一个视频服务器节点,别人观看相同的视频或直播便可以从您的设备取流而不必访问B站固有的服务器。脚本默认<strong>关闭</strong>了此功能,以减轻小水管的带宽压力,如果您的带宽允许,还是推荐开启,人人为我,我为人人。bilibili~乾杯 - ( ゜-゜)つロ!"),
        this.switch("elecShow", "充电鸣谢", "允许视频结尾的充电鸣谢"),
        this.switch("videoDisableAA", "禁用视频渲染抗锯齿", '详见<a href="https://github.com/MotooriKashin/Bilibili-Old/issues/292" target="_blank">#292</a>说明'),
        this.switch("ugcSection", "视频合集", "以播单形式呈现", void 0, void 0, "视频合集在旧版页面时代本不存在,但其实质类似于上古的播单,所以直接使用播单页面进行模拟。值得一提的是真正的播单页面相关接口已完全被404,如果有幸访问到脚本会直接替换为缓存的播单号769——因为只缓存了这一项数据。另外播单详情页面还是404状态,以后可能也会用缓存数据修复,让后人能一窥范例。"),
        this.switch("heartbeatBlock", "无痕模式", "禁用视频心跳", void 0, void 0, "禁用视频心跳便不会产生播放器历史记录。鉴于B站网页端开始严重限制未登录用户的权限,比如弹幕减少,评论只能看第一页等。可以启用本功能模拟【无痕模式】来使用,享受已登录用户的权限但B站不会知道你看了什么视频。<br/>※ 刷新页面生效")
      ]);
      this.menuitem.player.addCard("自动化操作");
      this.menuitem.player.addSetting([
        this.switch("automate.danmakuFirst", "展开弹幕列表", "而不是推荐视频", void 0, void 0, "载入播放器时右侧面板默认切换到弹幕列表。"),
        this.switch("automate.showBofqi", "滚动到播放器", "载入视频时", void 0, void 0, "载入播放器时自动滚动到播放器。"),
        this.switch("automate.screenWide", "宽屏模式", "隐藏播放器右侧面板", void 0, (v) => v && (user.userStatus.automate.webFullScreen = false), "载入播放器时自动启用宽屏模式。(与网页全屏二选一)"),
        this.switch("automate.noDanmaku", "无弹幕模式", "默认关闭弹幕", void 0, void 0, "载入播放器时默认关闭弹幕。"),
        this.switch("automate.autoPlay", "自动播放", "播放器初始化完成时", void 0, void 0, "播放器加载完成自动播放。"),
        this.switch("automate.webFullScreen", "网页全屏模式", "载入视频时", void 0, (v) => v && (user.userStatus.automate.screenWide = false), "载入播放器时自动网页全屏。(与宽屏模式二选一)"),
        this.switch("automate.videospeed", "记忆播放速率", "永久继承播放速率设定", void 0, void 0, "默认的记忆播放速率记忆仅同一个网页标签页有效,开启后将代为记忆固定下来。")
      ], 1);
      this.menuitem.player.addCard("限制视频");
      this.menuitem.player.addSetting([
        this.switch("videoLimit.status", "解除播放限制", "解除区域/APP限制", void 0, void 0, "内置服务器只能获取到360P,有条件请在下面自定义服务器。"),
        this.select("videoLimit.server", "代理服务器模式", {
          candidate: ["内置", "自定义"]
        }, "<strong>自定义</strong>模式须要填写下面的服务器", void 0, (v) => {
          if (v === "自定义") {
            if (!user.userStatus.videoLimit.cn && !user.userStatus.videoLimit.hk && !user.userStatus.videoLimit.tw) {
              toast.warning("请至少填选以下代理服务器中的一下再选择!", "服务器请自行搭建或参考【公共反代服务器】");
              user.userStatus.videoLimit.server = "内置";
              alert('<a href="https://github.com/yujincheng08/BiliRoaming/wiki/%E5%85%AC%E5%85%B1%E8%A7%A3%E6%9E%90%E6%9C%8D%E5%8A%A1%E5%99%A8" target="_blank">https://github.com/yujincheng08/BiliRoaming/</a>', "公共反代服务器");
            } else if (!user.userStatus.accessKey.token) {
              alert([
                "【公共反代服务器】一般都要求识别您的登录身份才能正常登录",
                "点击【授权】将跳转到账户授权页面,点击【取消】或其他区域返回",
                "<strong>【账户授权】是高风险操作,请仔细阅读相关说明后三思而后操作!</strong>"
              ], void 0, [
                {
                  text: "授权",
                  callback: () => {
                    this.show("accessKey.token");
                  }
                },
                {
                  text: "取消"
                }
              ]);
            }
          }
        }, "大部分新视频【内置】服务器只能获取到360P,实在不堪入目,有条件的话还是【自定义】服务器吧。对于大陆用户而言,【自定义】服务器一般填一个台湾就行,或者加上一个泰区。"),
        this.input("videoLimit.th", "泰区", {
          prop: { type: "url", placeholder: "www.example.com" }
        }, "泰国(东南亚)限定视频反代服务器", void 0, void 0, "解析泰国(东南亚)限定视频所用的代理服务器。东南亚视频暂时无弹幕和评论,有也是其他视频乱入的。"),
        this.input("videoLimit.tw", "台湾", {
          prop: { type: "url", placeholder: "www.example.com" }
        }, "台湾限定视频反代服务器", void 0, void 0, "解析【仅限台湾地区】视频所用的代理服务器。港澳台限定视频的首选。"),
        this.input("videoLimit.hk", "港澳", {
          prop: { type: "url", placeholder: "www.example.com" }
        }, "香港澳门限定视频反代服务器", void 0, void 0, "解析【仅限香港澳门地区】视频所用的代理服务器。与台湾不同,香港澳门基本上是绑定在一起的。"),
        this.input("videoLimit.cn", "大陆", {
          prop: { type: "url", placeholder: "www.example.com" }
        }, "大陆限定视频反代服务器", void 0, void 0, "解析大陆(一般)视频所用的代理服务器。此项一般是留给海外用户用的。")
      ], 2);
      this.menuitem.player.addCard("替换 UPOS 服务器");
      const upos = Object.keys(UPOS);
      this.menuitem.player.addSetting([
        this.select("uposReplace.th", "泰区", {
          candidate: upos
        }, "针对泰国(东南亚)限制视频", void 0, void 0, "泰区服务器ban了大陆ip,所以必须选一个进行替换。卡加载时请酌情切换。"),
        this.select("uposReplace.gat", "港澳台", {
          candidate: ["不替换"].concat(upos)
        }, "针对港澳台限制视频", void 0, void 0, "港澳台视频服务器一般为大陆外的Akamai,大陆用户有可能访问不畅,请按需酌情切换。若卡加载请关闭或者换一个。"),
        this.select("uposReplace.nor", "一般视频", {
          candidate: ["不替换"].concat(upos)
        }, "针对其他视频", void 0, void 0, "一般视频不需要替换,除非分配给您的视频服务器实在不行,请按需酌情切换。若卡加载请关闭或者换一个。"),
        this.select("uposReplace.download", "下载", {
          candidate: ["不替换"].concat(upos)
        }, "针对下载功能", void 0, void 0, "一般不需要替换,除非屡屡下载403。若还是403请关闭或者换一个。")
      ], 3);
    }
    /** 下载设置 */
    initSettingDownload() {
      this.menuitem.download.addSetting([
        this.button("download", "下载视频", () => {
          download.default();
        }, "当前视频", "视频", void 0, "根据当前设置下载当前网页(顶层)的视频,在页面底部列出所有可用下载源。仅在视频播放页可用。"),
        this.button("downloadDm", "下载弹幕", () => {
          danmaku.download();
        }, "当前弹幕", "弹幕", void 0, "下载当前视频的弹幕,你可以在【弹幕格式】里选择要保存的格式,详见对应设置项说明。文件名格式为“视频标题(分P标题).扩展名”或者“aid.cid.扩展名”。"),
        this.button("downloadImg", "下载图片", () => {
          download.image();
        }, "当前封面", "图片", void 0, "下载当前封面,如果有其他特殊图片,如专栏正文图片,也会一并显示。请右键对应的<strong>图片另存为</strong>。"),
        this.switch("downloadButton", "下载按钮", "播放器右侧", void 0, void 0, "在旧版播放器右侧添加下载按钮,呼出并滚动到下载设置界面,以方便快捷下载。"),
        this.chockboxs("downloadType", "请求的文件类型", ["mp4", "dash", "flv"], "视频封装格式", void 0, () => download.destory(), "勾选视频的封装类型,具体能不能获取到两说。封装类型≠编码类型:①mp4封装,视频编码avc+音频编码aac,画质上限1080P。②flv封装,编码同mp4,但可能切分成多个分段,须手动合并。③dash,未封装的视频轨和音频轨,以编码格式分类,aac为音频轨(含flac、杜比全景声),avc、hev和av1为视频轨(任选其一即可),须下载音视频轨各一条后手动封装为一个视频文件。另外【解除区域限制】功能获取到的下载源不受本项限制。<br>※ 2022年11月2日以后的视频已经没有flv封装。"),
        this.switch("TVresource", "请求tv端视频源", "无水印", void 0, (e) => {
          e && alert("下载TV源必须将【referer】置空,否则会403(无权访问)!另外浏览器不支持配置UA和referer,请更换【下载方式】!", "403警告", [
            {
              text: "置空referer",
              callback: () => user.userStatus.referer = ""
            }
          ]);
          download.destory();
        }, "请求TV端下载源,唯一的优势是可能无Bilibili水印。注意:①B站tv端大会员不通用,所以可能无法获取到大会员视频或画质。②需要进行【账户授权】,否则只能以游客身份获取下载数据。③TV源要求特定的UA且不能发送referer,基本无法通过浏览器直接下载(403无权访问),请选择其他下载工具。④mp4封装的并非tv源。"),
        this.select("downloadQn", "画质", {
          candidate: ["0", "15", "16", "32", "48", "64", "74", "80", "112", "116", "120", "125", "126", "127"]
        }, "flv限定", void 0, () => download.destory(), "画质参数,只针对flv封装。mp4封装没得选,dash则由于特性会一次性提供所有画质选项。"),
        this.select("downloadMethod", "下载方式", {
          candidate: ["浏览器", "IDM", "ef2", "aria2", "aria2rpc", "curl"]
        }, "浏览器或第三方工具", void 0, (e) => {
          switch (e) {
            case "浏览器":
              alert("由于浏览器安全限制,直接鼠标左键点击很难触发下载功能,更良好的习惯是右键要下载的文件选择【另存为】(不同浏览器可能命名不同)", "浏览器下载");
              break;
            case "IDM":
              alert('<a href="https://www.internetdownloadmanager.com/" target="_blank">IDM(Internet Download Manager)</a>是Windows端著名的的下载工具,本方式将下载数据生成IDM导出文件,您可以在打开IDM -> 任务 -> 导入 -> 从"IDM导出文件"导入开始下载。虽然有点麻烦,但是IDM支持配置UA和referer,并且下载速度的确不是浏览器能比的。', "IDM导出文件");
              break;
            case "ef2":
              alert('<a href="https://github.com/MotooriKashin/ef2" target="_blank">ef2</a>是本脚本作者开发的一款开源的IDM辅助工具,支持直接从浏览器里拉起IDM进行下载,免去使用IDM导出文件的繁琐,同时解放你的鼠标左键。', "ef2辅助下载");
              break;
            case "aria2":
              alert('<a href="https://github.com/aria2/aria2" target="_blank">aria2</a>是著名的开源命令行下载工具,本方式将下载命令复制到剪切板。命令行不是一般人能使用的工具,没有相应知识储备和使用习惯不推荐选择。', "aria2");
              break;
            case "aria2rpc":
              alert("aria2支持rpc方式进行下载,正确配置后方便程度不亚于ef2方式,唯一的问题是配置起来有亿点麻烦。</br>是否跳转到rpc相关设置?", "aria2 rpc", [
                {
                  text: "RPC配置",
                  callback: () => this.show("aria2.server")
                },
                {
                  text: "不必了"
                }
              ]);
              break;
            case "curl":
              alert('<a href="https://curl.se/" target="_blank">curl</a>是著名的开源命令行下载工具,本方式将下载命令复制到剪切板。命令行不是一般人能使用的工具,没有相应知识储备和使用习惯不推荐选择。', "curl");
              break;
            default:
              break;
          }
        }, "使用浏览器下载请右键另存为而不是左键点击!其他选项需要使用对应工具,详见对应选项弹窗说明。"),
        this.input("userAgent", "User-Agent", {
          candidate: [
            "Bilibili Freedoooooom/MarkII",
            "Mozilla/5.0 BiliDroid/7.0.0 (bbcallen@gmail.com)",
            navigator.userAgent
          ]
        }, "鉴权参数", void 0, void 0, "下载工具发送给服务器的身份标志,鉴权关键参数之一,无效的User-Agent将导致403无权访问。<strong>除非你知道自己在修改什么,否则请不要轻易调整此项。</strong>此项只在使用第三方下载方式时有效。"),
        this.input("referer", "referer", {
          candidate: [location.origin]
        }, "鉴权参数", void 0, (v) => {
          v && alert("您勾选了下载TV源,根据经验必须将referer置空,不然会触发403(无权访问)!是否撤销输入将referer置空?还是取消勾选tv源?", "设置冲突", [
            {
              text: "置空referer",
              callback: () => user.userStatus.referer = ""
            },
            {
              text: "取消勾选tv源",
              callback: () => user.userStatus.TVresource = false
            }
          ]);
        }, "下载时发送给服务器的标志之一,鉴权关键参数之一,无效的User-Agent将导致403无权访问。此项在网页端必须存在,而且一般为主站域名,但是<strong>TV、APP等源此项必须为空!</strong>"),
        this.input("filepath", "下载目录", {}, "保存下载文件的本地磁盘目录", void 0, void 0, "ef2、aria2、aria2rpc和curl方式限定。Windows平台请注意使用反斜杠哦。")
      ]);
      this.menuitem.download.addCard("aria2 相关");
      this.menuitem.download.addSetting([
        this.input("aria2.server", "RPC服务器", {
          prop: { type: "url", placeholder: "http://localhost" },
          candidate: ["http://localhost"]
        }, "本地或远程链接", void 0, void 0, "端口号请另外输入。建议使用下方按钮测试RPC连接可用性。"),
        this.input("aria2.port", "端口", {
          prop: { type: "number", placeholder: "6800" },
          candidate: ["6800"]
        }, "本地或远程端口", void 0, void 0, "服务器链接另外输入。建议使用下方按钮测试RPC连接可用性。"),
        this.input("aria2.token", "token", {
          prop: { type: "password" }
        }, "鉴权", void 0, void 0, "如果RPC服务器启用了token鉴权的话。"),
        this.slider("aria2.split", "分段数目", {
          min: 1,
          max: 16,
          precision: 15
        }, "分段并发下载", void 0, void 0, "对于支持断点续传的文件,启用多线程同时并发下载通常是一种非常有效的提高下载速度的方法。如果需要请自行调整一个合适的并发数,1表示不并发下载。值得注意的是,部分服务器会限制并发连接数目,并发连接过多有触发风控甚至被临时封禁的风险,所以并不是并发数越多越好。"),
        this.slider("aria2.size", "分段大小", {
          min: 1,
          max: 20,
          precision: 19
        }, "单位:/MB", void 0, void 0, "如果一个文件有多个下载源,那么此项会间接决定使用几个下载源。一旦要下载的文件不小于此项的2倍,aria2便会同时尝试连接多个下载源。这也是提高下载速率的有效方法。注意:某种意义上此项是越小越好,原因不言而喻。"),
        this.button("aria2.test", "测试RPC连接", () => {
          const msg = toast.list("正在测试RPC连接 >>>");
          new Aria2().getVersion().then((d) => {
            msg.type = "success";
            msg.push(\`> -------aria2 v\${d.version}-------\`, ...d.enabledFeatures);
          }).catch((e) => {
            msg.type = "error";
            msg.push("> RPC链接失败 ಥ_ಥ", e);
          }).finally(() => {
            msg.delay = 4;
          });
        }, "获取aria2信息", "ping", void 0, "请确定正确配置并启用了aria2的RPC服务器。")
      ], 1);
      this.menuitem.download.addCard("ef2 相关");
      this.menuitem.download.addSetting([
        this.switch("ef2.delay", "稍后下载", "添加到IDM下载队列但不开始", void 0, void 0, "要开始时请手动到IDM队列里点击开始。本项可以用来批量下载而不弹出多个窗口。注意:B站视频源使用的是临时链接,过期后无法访问,请及时下载或清理。"),
        this.switch("ef2.silence", "静默下载", "跳过IDM确认对话框", void 0, void 0, "默认情况下IDM会弹窗询问是否确认下载,在该确认框中可以调整保存目录和文件名等操作。启用本项以跳过该确认框。")
      ], 2);
    }
    /**
     * 新建开关设置
     * @param id 用户数据键或链式字符串,链式字符串用来提取深层数据
     * @param label 标题
     * @param sub 副标题
     * @param svg 图标
     * @param callback 用户调整设置的回调,将新值作为第一个参数传入
     * @param desc 浮动窗口
     */
    switch(id, label, sub, svg, callback, desc) {
      const item = new SettingItem();
      const button = new SwitchButton();
      const arr2 = id.split(".");
      let looping = false;
      item.init(arr2.join(""), label, sub, svg);
      button.update(Chain.getStatus(id));
      button.addEventListener("change", () => {
        looping = true;
        Chain.setStatus(id, button.value);
        callback && callback(button.value);
      });
      user.bindChange(arr2.shift(), (v) => {
        looping || button.update(Chain.getStatus(arr2.join("."), v));
        looping = false;
      });
      item.value(button);
      this.settingItem[id] = item;
      desc && new Desc().value(label, desc, item);
      return item;
    }
    /**
     * 新建下拉菜单设置
     * @param id 用户数据键或链式字符串,链式字符串用来提取深层数据
     * @param label 标题
     * @param value 配置数据
     * @param sub 副标题
     * @param svg 图标
     * @param callback 用户调整设置的回调,将新值作为第一个参数传入
     * @param desc 浮动窗口
     */
    select(id, label, value, sub, svg, callback, desc) {
      const item = new SettingItem();
      const select = new SelectMenu();
      const arr2 = id.split(".");
      let looping = false;
      item.init(arr2.join(""), label, sub, svg);
      value.value = Chain.getStatus(id);
      select.update(value);
      select.addEventListener("change", () => {
        looping = true;
        Chain.setStatus(id, select.value);
        callback && callback(select.value);
      });
      user.bindChange(arr2.shift(), (v) => {
        looping || (select.value = Chain.getStatus(arr2.join("."), v));
        looping = false;
      });
      item.value(select);
      this.settingItem[id] = item;
      desc && new Desc().value(label, desc, item);
      return item;
    }
    /**
     * 创建滑动条菜单设置
     * @param id 用户数据键或链式字符串,链式字符串用来提取深层数据
     * @param label 标题
     * @param value 配置数据
     * @param sub 副标题
     * @param svg 图标
     * @param callback 用户调整设置的回调,将新值作为第一个参数传入
     * @param desc 浮动窗口
     */
    slider(id, label, value, sub, svg, callback, desc) {
      const item = new SettingItem();
      const slider = new SliderBlock();
      const arr2 = id.split(".");
      let looping = false;
      item.init(arr2.join(""), label, sub, svg);
      value.value = Chain.getStatus(id);
      slider.update(value);
      slider.addEventListener("change", () => {
        looping = true;
        Chain.setStatus(id, slider.value);
        callback && callback(slider.value);
      });
      user.bindChange(arr2.shift(), (v) => {
        looping || (slider.value = Chain.getStatus(arr2.join("."), v));
        looping = false;
      });
      item.value(slider);
      this.settingItem[id] = item;
      desc && new Desc().value(label, desc, item);
      return item;
    }
    /**
     * 创建自定义滑动条菜单设置
     * @param id 用来索引的字符串
     * @param label 标题
     * @param value 配置数据
     * @param callback 输入回调
     * @param sub 副标题
     * @param svg 图标
     * @param desc 浮动窗口
     */
    sliderCustom(id, label, value, callback, sub, svg, desc) {
      const item = new SettingItem();
      const slider = new SliderBlock();
      item.init("", label, sub, svg);
      slider.update(value);
      slider.addEventListener("change", () => {
        callback(slider.value);
      });
      item.value(slider);
      this.settingItem[id] = item;
      desc && new Desc().value(label, desc, item);
      return item;
    }
    /**
     * 创建自定义输入框设置
     * @param id 用来索引的字符串
     * @param label 标题
     * @param value 配置数据
     * @param callback 输入回调
     * @param sub 副标题
     * @param svg 图标
     * @param desc 浮动窗口
     */
    inputCustom(id, label, value, callback, sub, svg, desc) {
      const item = new SettingItem();
      const input = new InputArea();
      item.init("", label, sub, svg);
      input.update(value);
      input.addEventListener("change", () => {
        callback(input.value);
      });
      item.value(input);
      this.settingItem[id] = item;
      desc && new Desc().value(label, desc, item);
      return item;
    }
    /**
     * 创建输入框设置
     * @param id 用户数据键或链式字符串,链式字符串用来提取深层数据
     * @param label 标题
     * @param value 配置数据
     * @param sub 副标题
     * @param svg 图标
     * @param callback 输入回调
     * @param desc 浮动窗口
     */
    input(id, label, value, sub, svg, callback, desc) {
      const item = new SettingItem();
      const input = new InputArea();
      const arr2 = id.split(".");
      let looping = false;
      item.init(arr2.join(""), label, sub, svg);
      value.value = Chain.getStatus(id);
      input.update(value);
      input.addEventListener("change", () => {
        looping = true;
        Chain.setStatus(id, input.value);
        callback && callback(input.value);
      });
      user.bindChange(arr2.shift(), (v) => {
        looping || (input.value = Chain.getStatus(arr2.join("."), v));
        looping = false;
      });
      item.value(input);
      this.settingItem[id] = item;
      desc && new Desc().value(label, desc, item);
      return item;
    }
    /**
     * 创建按钮设置
     * @param id 用来索引的字符串
     * @param label 标题
     * @param callback 按钮点击回调
     * @param sub 副标题
     * @param text 按钮文字
     * @param svg 图标
     * @param desc 浮动窗口
     */
    button(id, label, callback, sub, text, svg, desc) {
      const item = new SettingItem();
      const button = new PushButton();
      item.init("", label, sub, svg);
      text && (button.text = text);
      button.addEventListener("change", (ev) => {
        callback();
      });
      item.value(button);
      this.settingItem[id] = item;
      desc && new Desc().value(label, desc, item);
      return item;
    }
    /**
     * 新建复选框设置
     * @param id 用户数据键或链式字符串,链式字符串用来提取深层数据
     * @param label 标题
     * @param values 配置数据
     * @param sub 副标题
     * @param svg 图标
     * @param callback 用户调整设置的回调,将新值作为第一个参数传入
     * @param desc 浮动窗口
     */
    chockboxs(id, label, values, sub, svg, callback, desc) {
      const item = new SettingItem();
      const checkboxs = new CheckBoxs();
      const arr2 = id.split(".");
      let looping = false;
      item.init(arr2.join(""), label, sub, svg);
      checkboxs.update(values);
      checkboxs.value = Array.from(Chain.getStatus(id));
      checkboxs.addEventListener("change", () => {
        looping = true;
        Chain.setStatus(id, checkboxs.value);
        callback && callback(checkboxs.value);
      });
      user.bindChange(arr2.shift(), (v) => {
        looping || (checkboxs.value = Chain.getStatus(arr2.join("."), v));
        looping = false;
      });
      item.value(checkboxs);
      this.settingItem[id] = item;
      desc && new Desc().value(label, desc, item);
      return item;
    }
    /**
     * 显示设置面板
     * @param id 设置项注册id,id不在可选项时可以使用强制断言
     * @example
     * this.show('accessKey.token') // 显示设置面板并滚动到【账户授权】那一项
     * this.show(<'accessKey'>'accessKey.token') // TypeScript 强制断言
     */
    show(id) {
      this.interface.show();
      if (id && this.settingItem[id]) {
        this.settingItem[id].dispatchEvent(new Event("show"));
      } else {
        this.menuitem.common.click();
      }
    }
  };

  // src/page/wild.ts
  init_tampermonkey();

  // src/utils/format/http.ts
  init_tampermonkey();
  function https(url, protocol = false) {
    return url.replace(/http:/g, protocol ? "https:" : "");
  }

  // src/page/wild.ts
  var PageWild = class extends Page {
    /**
     * 使用远程网页框架重写页面
     * @param path 框架文件相对根目录路径(以\`/\`开头)
     * @param url 修改地址栏
     * @param comment 是否替换评论区
     */
    constructor(path, url, comment = true) {
      super("");
      this.path = path;
      this.url = url;
      comment && new Comment();
      typeof this.path === "string" && this.init();
    }
    toast = toast.list();
    init() {
      this.toast.push("页面重构 >>>", "> " + this.url, "> 已失效~", "> 请求远程备份~");
      GM.fetch(cdn.encode(this.path, "")).then((d) => d.text()).then((d) => {
        this.toast.push("> 成功获取网页框架,刷新页面~");
        this.url && urlCleaner.updateLocation(this.url);
        this.updateHtml(d);
        this.updateDom();
        BLOD.flushToast();
        this.toast.type = "success";
      }).catch((e) => {
        this.toast.push("> 重构页面错误", e);
        this.toast.type = "error";
      }).finally(() => {
        this.toast.delay = 4;
      });
    }
  };
  var PageHttps = class extends Page {
    toast = toast.list();
    constructor(comment = true) {
      super("");
      comment && new Comment();
      this.init();
    }
    init() {
      this.toast.push("此页面混有部分不安全链接,即将替换为安全链接并刷新~");
      fetch(location.href).then((d) => d.text()).then((d) => {
        this.toast.push("刷新中 >>>");
        console.clear();
        this.updateHtml(https(d, true));
        this.updateDom();
        BLOD.flushToast();
        this.toast.push("> 刷新成功");
        this.toast.delay = 4;
      }).catch((e) => {
        this.toast.push("> 重构页面错误", e);
        this.toast.type = "error";
      }).finally(() => {
        this.toast.delay = 4;
      });
    }
  };

  // src/page/channel/anime.ts
  init_tampermonkey();

  // src/html/anime.html
  var anime_default = '<!DOCTYPE html>\\r\\n<html lang="zh-Hans">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8">\\r\\n    <title>番剧 - 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。">\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid">\\r\\n    <meta name="renderer" content="webkit">\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge">\\r\\n    <meta name="baidu-site-verification" content="gbRdPloQBZ">\\r\\n    <link rel="dns-prefetch" href="//s1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//s2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//s3.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i0.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//static.hdslb.com">\\r\\n    <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩">\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/bangumi-home/css/bangumi-home.1.73141fb5868615cb4fe6bc969ccd02cb7c1c7d4c.css">\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/bangumi-home/css/bangumi-home.0.73141fb5868615cb4fe6bc969ccd02cb7c1c7d4c.css">\\r\\n    <style>\\r\\n        .pgc-rank-list .rank-item.highlight .ri-num {\\r\\n            background: #f25d8e;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container has-menu"></div>\\r\\n    <div id="client-app"></div>\\r\\n    <div id="app" data-server-rendered="true" class="cinema-home-wrapper"></div>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s2.hdslb.com/bfs/cm/st/bundle.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/promise.auto.min.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//www.bilibili.com/gentleman/polyfill.js?features=Promise%2CObject.assign%2CString.prototype.includes%2CNumber.isNaN"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/static/ogv/fe/iris.min.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/bangumi-home/1.bangumi-home.73141fb5868615cb4fe6bc969ccd02cb7c1c7d4c.js"\\r\\n        crossorigin defer><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/bangumi-home/bangumi-home.73141fb5868615cb4fe6bc969ccd02cb7c1c7d4c.js"\\r\\n        crossorigin defer><\\/script>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/channel/anime.ts
  var PageAnime = class extends Page {
    constructor() {
      super(anime_default);
      Header.prid = location.pathname.includes("anime") ? 1612 : 1920;
      Header.primaryMenu();
      Header.banner();
      this.updateDom();
      this.handPickList();
    }
    /** 修复编辑推荐 */
    handPickList() {
      xhrHook(["pgc/operation/api/static", "position_id=52"], void 0, () => {
        setTimeout(() => {
          const d = document.querySelector(".hot-recom-module");
          if (d && d.__vue__) {
            d.__vue__.renderList = JSON.parse(JSON.stringify(d.__vue__.HAND_PICK_LIST));
          }
        });
      }, false);
    }
  };

  // src/page/channel/movie.ts
  init_tampermonkey();

  // src/html/movie.html
  var movie_default = '<!DOCTYPE html>\\r\\n<html lang="zh-Hans">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8">\\r\\n    <title>电影 - 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。">\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid">\\r\\n    <meta name="renderer" content="webkit">\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge">\\r\\n    <meta name="baidu-site-verification" content="gbRdPloQBZ">\\r\\n    <link rel="dns-prefetch" href="//s1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//s2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//s3.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i0.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//static.hdslb.com">\\r\\n    <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩">\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/cinema/movie/css/cinema-movie.0.20b925f03d0da5e0e0262157a0f44e4bdb547b33.css">\\r\\n    <style>\\r\\n        .pgc-rank-list .rank-item.highlight .ri-num {\\r\\n            background: #f25d8e;\\r\\n        }\\r\\n\\r\\n        .pgc-rank-list.v2 .rank-item.highlight .ri-num {\\r\\n            background: #f25d8e;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container has-menu"></div>\\r\\n    <div id="client-app"></div>\\r\\n    <div id="app" data-server-rendered="true" class="cinema-home-wrapper"></div>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s2.hdslb.com/bfs/cm/st/bundle.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/promise.auto.min.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//www.bilibili.com/gentleman/polyfill.js?features=Promise%2CObject.assign%2CString.prototype.includes%2CNumber.isNaN"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/static/ogv/fe/iris.min.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/cinema/movie/1.cinema-movie.20b925f03d0da5e0e0262157a0f44e4bdb547b33.js"\\r\\n        crossorigin defer><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/cinema/movie/cinema-movie.20b925f03d0da5e0e0262157a0f44e4bdb547b33.js"\\r\\n        crossorigin defer><\\/script>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/channel/movie.ts
  var PageMovie = class extends Page {
    constructor() {
      super(movie_default);
      Header.prid = 1634;
      Header.primaryMenu();
      Header.banner();
      this.updateDom();
      this.slideshow();
    }
    slideshow() {
      xhrHook.async("pgc/operation/api/slideshow?position_id=265", void 0, async () => {
        const d = await fetch("https://api.bilibili.com/pgc/page/web/v2?name=movie", { credentials: "include" });
        const json = await d.json();
        const response = JSON.stringify({
          code: 0,
          message: "success",
          result: json.data.modules[0].items.map((d2) => {
            return {
              blink: d2.link,
              gif: "",
              id: d2.item_id,
              img: d2.cover,
              link: d2.link,
              pub_time: "",
              simg: d2.cover,
              title: d2.title
            };
          })
        });
        return { response, responseText: response };
      });
    }
  };

  // src/page/channel/tv.ts
  init_tampermonkey();

  // src/html/tv.html
  var tv_default = '<!DOCTYPE html>\\r\\n<html lang="zh-Hans">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8">\\r\\n    <title>电影 - 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。">\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid">\\r\\n    <meta name="renderer" content="webkit">\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge">\\r\\n    <meta name="baidu-site-verification" content="gbRdPloQBZ">\\r\\n    <link rel="dns-prefetch" href="//s1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//s2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//s3.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i0.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//static.hdslb.com">\\r\\n    <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩">\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/cinema/tv/css/cinema-tv.0.dae7f35e3e7f34cdb2cc931ef41eaf978b15becf.css">\\r\\n    <style>\\r\\n        .pgc-rank-list .rank-item.highlight .ri-num {\\r\\n            background: #f25d8e;\\r\\n        }\\r\\n\\r\\n        .pgc-rank-list.v2 .rank-item.highlight .ri-num {\\r\\n            background: #f25d8e;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container has-menu"></div>\\r\\n    <div id="client-app"></div>\\r\\n    <div id="app" data-server-rendered="true" class="cinema-home-wrapper"></div>\\r\\n    <script>window.__INITIAL_STATE__ = { "ver": {}, "tid": 11, "carouselList": [], "hotRecomSpec": [], "hotRecomList": [], "showBv": false }; (function () { var s; (s = document.currentScript || document.scripts[document.scripts.length - 1]).parentNode.removeChild(s); }());<\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s2.hdslb.com/bfs/cm/st/bundle.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/promise.auto.min.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//www.bilibili.com/gentleman/polyfill.js?features=Promise%2CObject.assign%2CString.prototype.includes%2CNumber.isNaN"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/static/ogv/fe/iris.min.js"><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/cinema/tv/1.cinema-tv.dae7f35e3e7f34cdb2cc931ef41eaf978b15becf.js"\\r\\n        crossorigin defer><\\/script>\\r\\n    <script src="//s1.hdslb.com/bfs/static/cinema/tv/cinema-tv.dae7f35e3e7f34cdb2cc931ef41eaf978b15becf.js" crossorigin\\r\\n        defer><\\/script>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/channel/tv.ts
  var PageTv = class extends Page {
    constructor() {
      super(tv_default);
      Header.prid = 1616;
      Header.primaryMenu();
      Header.banner();
      this.updateDom();
      this.carouselList();
      this.hotRecomSpec();
      this.hotRecomList();
    }
    carouselList() {
      fetch("https://api.bilibili.com/pgc/operation/api/slideshow?position_id=273", { credentials: "include" }).then((d) => d.json()).then((d) => {
        if (window.__INITIAL_STATE__) {
          window.__INITIAL_STATE__.carouselList = d.result;
        }
      }).catch((e) => {
        toast.error("滚动推荐", e);
      });
    }
    hotRecomSpec() {
      fetch("https://api.bilibili.com/pgc/operation/api/static?position_id=274", { credentials: "include" }).then((d) => d.json()).then((d) => {
        if (window.__INITIAL_STATE__) {
          window.__INITIAL_STATE__.hotRecomSpec = d.result;
        }
      }).catch((e) => {
        toast.error("热播推荐", e);
      });
    }
    hotRecomList() {
      fetch("https://api.bilibili.com/pgc/operation/api/static?position_id=275", { credentials: "include" }).then((d) => d.json()).then((d) => {
        if (window.__INITIAL_STATE__) {
          window.__INITIAL_STATE__.hotRecomList = d.result;
        }
      }).catch((e) => {
        toast.error("热播推荐", e);
      });
    }
  };

  // src/page/channel/documentary.ts
  init_tampermonkey();

  // src/html/documentary.html
  var documentary_default = '<!DOCTYPE html>\\r\\n<html lang="zh-Hans">\\r\\n\\r\\n<head>\\r\\n    <meta charset="utf-8">\\r\\n    <title>电影 - 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili</title>\\r\\n    <meta name="description" content="bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。">\\r\\n    <meta name="keywords" content="B站,弹幕,字幕,AMV,MAD,MTV,ANIME,动漫,动漫音乐,游戏,游戏解说,ACG,galgame,动画,番组,新番,初音,洛天依,vocaloid">\\r\\n    <meta name="renderer" content="webkit">\\r\\n    <meta http-equiv="X-UA-Compatible" content="IE=edge">\\r\\n    <meta name="baidu-site-verification" content="gbRdPloQBZ">\\r\\n    <link rel="dns-prefetch" href="//s1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//s2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//s3.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i0.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i1.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//i2.hdslb.com">\\r\\n    <link rel="dns-prefetch" href="//static.hdslb.com">\\r\\n    <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">\\r\\n    <link rel="search" type="application/opensearchdescription+xml" href="//static.hdslb.com/opensearch.xml"\\r\\n        title="哔哩哔哩">\\r\\n    <link rel="stylesheet"\\r\\n        href="//s1.hdslb.com/bfs/static/cinema/documentary/css/cinema-documentary.0.dae7f35e3e7f34cdb2cc931ef41eaf978b15becf.css">\\r\\n    <style>\\r\\n        .pgc-rank-list .rank-item.highlight .ri-num {\\r\\n            background: #f25d8e;\\r\\n        }\\r\\n\\r\\n        .pgc-rank-list.v2 .rank-item.highlight .ri-num {\\r\\n            background: #f25d8e;\\r\\n        }\\r\\n    </style>\\r\\n</head>\\r\\n\\r\\n<body>\\r\\n    <div class="z-top-container has-menu"></div>\\r\\n    <div id="client-app"></div>\\r\\n    <div id="app" data-server-rendered="true" class="cinema-home-wrapper"></div>\\r\\n    <script>window.__INITIAL_STATE__ = { "ver": {}, "carouselList": [], "hotRecomSpec": [], "hotRecomList": [], "showBv": false }; (function () { var s; (s = document.currentScript || document.scripts[document.scripts.length - 1]).parentNode.removeChild(s); }());<\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/jquery.min.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/seed/jinkela/header/header.js"><\\/script>\\r\\n    <script type="text/javascript" src="//s2.hdslb.com/bfs/cm/st/bundle.js"><\\/script>\\r\\n    <script type="text/javascript" src="//static.hdslb.com/js/promise.auto.min.js"><\\/script>\\r\\n    <script type="text/javascript"\\r\\n        src="//www.bilibili.com/gentleman/polyfill.js?features=Promise%2CObject.assign%2CString.prototype.includes%2CNumber.isNaN"><\\/script>\\r\\n    <script type="text/javascript" src="//s1.hdslb.com/bfs/static/ogv/fe/iris.min.js"><\\/script>\\r\\n    <script\\r\\n        src="//s1.hdslb.com/bfs/static/cinema/documentary/1.cinema-documentary.dae7f35e3e7f34cdb2cc931ef41eaf978b15becf.js"\\r\\n        crossorigin defer><\\/script>\\r\\n    <script\\r\\n        src="//s1.hdslb.com/bfs/static/cinema/documentary/cinema-documentary.dae7f35e3e7f34cdb2cc931ef41eaf978b15becf.js"\\r\\n        crossorigin defer><\\/script>\\r\\n    <div class="footer bili-footer report-wrap-module"></div>\\r\\n    <script type="text/javascript" charset="utf-8" src="//static.hdslb.com/common/js/footer.js"><\\/script>\\r\\n</body>\\r\\n\\r\\n</html>';

  // src/page/channel/documentary.ts
  var PageDocumentary = class extends Page {
    constructor() {
      super(documentary_default);
      Header.prid = 1634;
      Header.primaryMenu();
      Header.banner();
      this.updateDom();
      this.carouselList();
      this.hotRecomSpec();
      this.hotRecomList();
    }
    carouselList() {
      fetch("https://api.bilibili.com/pgc/page/web/v2?name=documentary", { credentials: "include" }).then((d) => d.json()).then((d) => {
        if (window.__INITIAL_STATE__) {
          window.__INITIAL_STATE__.carouselList = d.data.modules[0].items.map((d2) => {
            return {
              blink: d2.link,
              gif: "",
              id: d2.item_id,
              img: d2.cover,
              link: d2.link,
              pub_time: "",
              simg: d2.cover,
              title: d2.title
            };
          });
        }
      }).catch((e) => {
        toast.error("滚动推荐", e);
      });
    }
    hotRecomSpec() {
      fetch("https://api.bilibili.com/pgc/operation/api/static?position_id=384", { credentials: "include" }).then((d) => d.json()).then((d) => {
        if (window.__INITIAL_STATE__) {
          window.__INITIAL_STATE__.hotRecomSpec = d.result;
        }
      }).catch((e) => {
        toast.error("热播推荐", e);
      });
    }
    hotRecomList() {
      fetch("https://api.bilibili.com/pgc/operation/api/static?position_id=258", { credentials: "include" }).then((d) => d.json()).then((d) => {
        if (window.__INITIAL_STATE__) {
          window.__INITIAL_STATE__.hotRecomList = d.result;
        }
      }).catch((e) => {
        toast.error("热播推荐", e);
      });
    }
  };

  // src/page/logout.ts
  init_tampermonkey();

  // src/io/passport-login-exit.ts
  init_tampermonkey();
  async function passportLoginExit() {
    const { DedeUserID, bili_jct } = getCookies();
    await fetch(URLS.PASSPORT_LOGIN_EXIT, {
      method: "POST",
      credentials: "include",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      },
      body: \`biliCSRF=\${bili_jct}&gourl=https%3A%2F%2Fwww.bilibili.com%2F\`
    });
    return \`https://passport.biligame.com/crossDomain?DedeUserID=\${DedeUserID}&DedeUserID__ckMd5=&SESSDATA=&bili_jct=&gourl=https%3A%2F%2Fwww.bilibili.com%2F\`;
  }

  // src/page/logout.ts
  function loginExit() {
    if (uid) {
      if (document.readyState === "complete") {
        const tt = toast.list("正在退出登录 >>>");
        passportLoginExit().then((d) => {
          tt.push("> 退出登录成功", "> 正在重定向 >");
          tt.type = "success";
          location.replace(d);
        }).catch((e) => {
          tt.push("> 退出登录失败", e);
          tt.type = "error";
        }).finally(() => {
          tt.delay = 4;
        });
      } else {
        window.addEventListener("load", loginExit, { once: true });
      }
    }
  }

  // src/index.ts
  document.domain = "bilibili.com";
  var _a2;
  BLOD.version = (_a2 = GM.info) == null ? void 0 : _a2.script.version.slice(-40);
  user.addCallback((status) => {
    toast.update(status.toast);
    cdn.update(status.cdn, BLOD.version);
    Comment2.commentJumpUrlTitle = status.commentJumpUrlTitle;
    Comment2.resolvePictures = status.commentPicture;
    if (BLOD.path[2] !== "m.bilibili.com") {
      if (BLOD.path[2] == "www.bilibili.com" && (!BLOD.path[3] || (BLOD.path[3].startsWith("?") || BLOD.path[3].startsWith("#") || BLOD.path[3].startsWith("index.")))) {
        if (document.referrer.includes("blackboard/bnj2019.html")) {
          new PageWild("/src/html/bnj2019.html", "https://www.bilibili.com/blackboard/bnj2019.html");
        } else {
          status.index && new PageIndex();
        }
      }
      if (status.av && /(\\/s)?\\/video\\/[AaBb][Vv]/.test(location.href)) {
        BLOD.path[3] === "s" && urlCleaner.updateLocation(location.href.replace("s/video", "video"));
        player.loadEmbedPlayer();
        new PageAV();
      }
      if (status.player && (/\\/festival\\//.test(location.href) || (/player\\./.test(location.href) || /webplayer\\/embed/.test(location.href) && !location.href.includes("ancient")))) {
        player.loadConnectPlayer();
      }
      if (status.bangumi && /\\/bangumi\\/play\\/(ss|ep)/.test(location.href)) {
        player.loadEmbedPlayer();
        new PageBangumi();
      }
      if (status.watchlater && /\\/watchlater/.test(location.href)) {
        player.loadEmbedPlayer();
        new PageWatchlater();
      }
      if (status.playlist && (/\\/medialist\\/play\\//.test(location.href) || /\\/list\\/ml\\d+/.test(location.href)) && !/watchlater/.test(location.href) || /\\/playlist\\/video\\/pl/.test(location.href)) {
        player.loadEmbedPlayer();
        new PagePlaylist();
      }
      if (/\\/playlist\\/detail\\/pl/.test(location.href)) {
        new PagePlaylistDetail();
      }
      if (status.ranking && /\\/v\\/popular\\//.test(location.href)) {
        new PageRanking();
      }
      if (status.read && /\\/read\\/[Cc][Vv]/.test(location.href)) {
        new PageRead();
      }
      if (status.search && BLOD.path[2] == "search.bilibili.com") {
        new PageSearch();
      }
      if (/\\/moe\\/2018\\/jp\\/home/.test(location.href)) {
        Reflect.set(window, "getPlayList", () => {
          return { code: 0, data: toview_default };
        });
      }
      if (/\\/html\\/danmubisai.html/.test(location.href) || /\\/html\\/cele.html/.test(location.href)) {
        new PageHttps();
      }
      if (status.channel) {
        if (/\\/(anime|guochuang)\\/?\$/.test(location.pathname)) {
          new PageAnime();
        }
        if (/\\/movie\\/?\$/.test(location.pathname)) {
          new PageMovie();
        }
        if (/\\/tv\\/?\$/.test(location.pathname)) {
          new PageTv();
        }
        if (/\\/documentary\\/?\$/.test(location.pathname)) {
          new PageDocumentary();
        }
      }
    }
    player.nanoPermit();
    new Automate();
    status.disableReport && new ReportObserver();
    status.videoLimit.status && videoLimit.enable();
    status.fullBannerCover && (Header.fullBannerCover = true);
    status.header && new Header();
    status.comment && new Comment2();
    status.webRTC || WebTRC.disable();
    status.album && /t.bilibili.com\\/\\d+/.test(location.href) && PageSpace.album();
    status.development && Reflect.defineProperty(window, "BLOD", {
      value: BLOD,
      configurable: true
    });
    window.top === window.self && (BLOD.ui = new UI());
  });
  try {
    const bpx_player_profile = LocalStorage.getItem("bpx_player_profile") || { media: { autoplay: false } };
    bpx_player_profile.media.autoplay = false;
    LocalStorage.setItem("bpx_player_profile", bpx_player_profile);
  } catch (e) {
  }
  BLOD.path[2] == "message.bilibili.com" && Header.message();
  Header.videoOffset();
  PageSearch.suggest();
  /space\\.bilibili\\.com/.test(location.href) && new PageSpace();
  /bangumi\\/media\\/md/.test(location.href) && new PageMedia();
  location.href.includes("www.bilibili.com/account/history") && new PageHistory();
  BLOD.path[2] == "live.bilibili.com" && new PageLive();
  BLOD.path[2] == "t.bilibili.com" && new PageDynamic();
  location.href.includes("passport.bilibili.com/login?act=exit") && loginExit();
})();
// @license MIT
/*! Bundled license information:

is-buffer/index.js:
  (*!
   * Determine if an object is a Buffer
   *
   * @author   Feross Aboukhadijeh <https://feross.org>
   * @license  MIT
   *)
*/

//@ sourceURL=bilibili-old.js`;

new Function("GM", MODULES)(GM);