Showing preview only (5,169K chars total). Download the full file or copy to clipboard to get everything.
Repository: jianxingxuejian/grasscutter-tools
Branch: main
Commit: c5f3fa141201
Files: 195
Total size: 4.3 MB
Directory structure:
gitextract_xxt0u2o3/
├── .editorconfig
├── .eslintignore
├── .eslintrc-auto-import.json
├── .eslintrc.cjs
├── .github/
│ └── workflows/
│ ├── alpha.yml
│ ├── check.yml
│ ├── deploy.yml
│ ├── release.yml
│ └── updater.yml
├── .gitignore
├── .npmrc
├── .prettierrc
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── CHANGELOG.en-US.md
├── CHANGELOG.zh-CN.md
├── LICENSE
├── README.md
├── README_zh-CN.md
├── build/
│ ├── config/
│ │ ├── index.ts
│ │ └── utils.ts
│ ├── index.ts
│ └── plugins/
│ ├── compress.ts
│ ├── https.ts
│ ├── i18n.ts
│ ├── index.ts
│ ├── unocss.ts
│ ├── unplugin.ts
│ └── vue.ts
├── docs/
│ ├── mod.md
│ └── mod_zh-CN.md
├── index.html
├── package.json
├── renovate.json
├── scripts/
│ └── updater.ts
├── src/
│ ├── App.vue
│ ├── components/
│ │ ├── MyButton.vue
│ │ ├── MyDivider.vue
│ │ ├── MyInputGroup.vue
│ │ ├── MySelect.vue
│ │ ├── MySwitch.vue
│ │ ├── NaiveProvider.vue
│ │ ├── SelectFile.vue
│ │ ├── ServerInput.vue
│ │ └── index.ts
│ ├── http/
│ │ ├── api.ts
│ │ ├── axios.ts
│ │ ├── index.ts
│ │ ├── request.ts
│ │ └── reqwest.ts
│ ├── i18n/
│ │ ├── data/
│ │ │ ├── common/
│ │ │ │ ├── artifactIds.ts
│ │ │ │ ├── quest.ts
│ │ │ │ ├── questInfo.json
│ │ │ │ ├── transform.ts
│ │ │ │ └── weatherIds.ts
│ │ │ ├── en/
│ │ │ │ ├── artifactInfo.json
│ │ │ │ ├── avatarItem.json
│ │ │ │ ├── index.ts
│ │ │ │ ├── materialItem.json
│ │ │ │ ├── monsterItem.json
│ │ │ │ ├── questItem.json
│ │ │ │ ├── route.ts
│ │ │ │ ├── sceneItem.json
│ │ │ │ ├── weaponItem.json
│ │ │ │ └── weatherItem.json
│ │ │ ├── es/
│ │ │ │ ├── artifactInfo.json
│ │ │ │ ├── avatarItem.json
│ │ │ │ ├── index.ts
│ │ │ │ ├── materialItem.json
│ │ │ │ ├── monsterItem.json
│ │ │ │ ├── questItem.json
│ │ │ │ ├── route.ts
│ │ │ │ ├── sceneItem.json
│ │ │ │ ├── weaponItem.json
│ │ │ │ └── weatherItem.json
│ │ │ ├── ja-JP/
│ │ │ │ ├── artifactInfo.json
│ │ │ │ ├── avatarItem.json
│ │ │ │ ├── index.ts
│ │ │ │ ├── materialItem.json
│ │ │ │ ├── monsterItem.json
│ │ │ │ ├── questItem.json
│ │ │ │ ├── route.ts
│ │ │ │ ├── sceneItem.json
│ │ │ │ ├── weaponItem.json
│ │ │ │ └── weatherItem.json
│ │ │ └── zh-CN/
│ │ │ ├── artifactInfo.json
│ │ │ ├── avatarItem.json
│ │ │ ├── index.ts
│ │ │ ├── materialItem.json
│ │ │ ├── monsterItem.json
│ │ │ ├── questItem.json
│ │ │ ├── route.ts
│ │ │ ├── sceneItem.json
│ │ │ ├── weaponItem.json
│ │ │ └── weatherItem.json
│ │ ├── index.ts
│ │ └── locales/
│ │ ├── de.json
│ │ ├── en.json
│ │ ├── es.json
│ │ ├── fr.json
│ │ ├── id-ID.json
│ │ ├── ja-JP.json
│ │ ├── ko-KR.json
│ │ ├── pt.json
│ │ ├── ru-RU.json
│ │ ├── th-TH.json
│ │ ├── vi-VN.json
│ │ ├── zh-CN.json
│ │ └── zh-TW.json
│ ├── layout/
│ │ ├── components/
│ │ │ ├── Language.vue
│ │ │ ├── Main.vue
│ │ │ ├── Menu.vue
│ │ │ ├── Theme.vue
│ │ │ └── index.ts
│ │ └── index.vue
│ ├── main.ts
│ ├── router/
│ │ ├── constant-routes.ts
│ │ ├── index.ts
│ │ └── modules/
│ │ ├── about.ts
│ │ ├── artifact.ts
│ │ ├── common.ts
│ │ ├── index.ts
│ │ ├── item.ts
│ │ ├── launcher.ts
│ │ ├── mod.ts
│ │ ├── quest.ts
│ │ ├── setting.ts
│ │ └── windy.ts
│ ├── stores/
│ │ ├── index.ts
│ │ └── modules/
│ │ ├── app.ts
│ │ ├── index.ts
│ │ └── setting.ts
│ ├── styles/
│ │ ├── css/
│ │ │ ├── common.css
│ │ │ ├── index.css
│ │ │ └── reset.css
│ │ └── scss/
│ │ ├── index.scss
│ │ └── naive-ui.scss
│ ├── types/
│ │ ├── api.d.ts
│ │ ├── auto-import.d.ts
│ │ ├── business.d.ts
│ │ ├── components.d.ts
│ │ ├── env.d.ts
│ │ ├── message.d.ts
│ │ ├── naive-ui.d.ts
│ │ ├── route.d.ts
│ │ ├── setting.d.ts
│ │ └── utils.d.ts
│ ├── utils/
│ │ ├── index.ts
│ │ ├── invoke.ts
│ │ ├── is-tauri.ts
│ │ ├── msg.ts
│ │ ├── naive-ui.ts
│ │ ├── parse.ts
│ │ ├── regex.ts
│ │ ├── route.ts
│ │ └── storage.ts
│ └── views/
│ ├── about/
│ │ └── index.vue
│ ├── artifact/
│ │ ├── constant.ts
│ │ └── index.vue
│ ├── common/
│ │ └── index.vue
│ ├── item/
│ │ └── index.vue
│ ├── launcher/
│ │ ├── components/
│ │ │ ├── Changelog.vue
│ │ │ ├── StartupItems.vue
│ │ │ ├── Updater.vue
│ │ │ └── index.ts
│ │ └── index.vue
│ ├── mod/
│ │ ├── constant.ts
│ │ ├── download/
│ │ │ ├── components/
│ │ │ │ ├── DownloadQueue.vue
│ │ │ │ ├── SettingModal.vue
│ │ │ │ └── index.ts
│ │ │ ├── index.vue
│ │ │ └── interface.ts
│ │ ├── index.vue
│ │ └── local/
│ │ ├── components/
│ │ │ ├── SettingModal.vue
│ │ │ └── index.ts
│ │ └── index.vue
│ ├── quest/
│ │ └── index.vue
│ ├── seed/
│ │ └── index.vue
│ └── setting/
│ └── index.vue
├── src-tauri/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── build.rs
│ ├── icons/
│ │ └── icon.icns
│ ├── src/
│ │ ├── cmd/
│ │ │ ├── file.rs
│ │ │ ├── http.rs
│ │ │ ├── lib.rs
│ │ │ ├── proxy.rs
│ │ │ └── system.rs
│ │ ├── cmd.rs
│ │ └── main.rs
│ └── tauri.conf.json
├── tsconfig.json
├── uno.config.ts
├── vercel.json
└── vite.config.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
================================================
FILE: .eslintignore
================================================
*.sh
node_modules
lib
*.md
*.woff
*.ttf
.idea
/dist/
/public
/docs
.local
package.json
pnpm-lock.yaml
!.env-config.ts
src/types/components.d.ts
src/types/auto-import.d.ts
.eslintrc-auto-import.json
/src-tauri
================================================
FILE: .eslintrc-auto-import.json
================================================
{
"globals": {
"EffectScope": true,
"acceptHMRUpdate": true,
"computed": true,
"createApp": true,
"createPinia": true,
"customRef": true,
"defineAsyncComponent": true,
"defineComponent": true,
"defineStore": true,
"effectScope": true,
"getActivePinia": true,
"getCurrentInstance": true,
"getCurrentScope": true,
"h": true,
"inject": true,
"isProxy": true,
"isReactive": true,
"isReadonly": true,
"isRef": true,
"mapActions": true,
"mapGetters": true,
"mapState": true,
"mapStores": true,
"mapWritableState": true,
"markRaw": true,
"nextTick": true,
"onActivated": true,
"onBeforeMount": true,
"onBeforeRouteLeave": true,
"onBeforeRouteUpdate": true,
"onBeforeUnmount": true,
"onBeforeUpdate": true,
"onDeactivated": true,
"onErrorCaptured": true,
"onMounted": true,
"onRenderTracked": true,
"onRenderTriggered": true,
"onScopeDispose": true,
"onServerPrefetch": true,
"onUnmounted": true,
"onUpdated": true,
"provide": true,
"reactive": true,
"readonly": true,
"ref": true,
"resolveComponent": true,
"resolveDirective": true,
"setActivePinia": true,
"setMapStoreSuffix": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,
"storeToRefs": true,
"toRaw": true,
"toRef": true,
"toRefs": true,
"triggerRef": true,
"unref": true,
"useAttrs": true,
"useCssModule": true,
"useCssVars": true,
"useLink": true,
"useRoute": true,
"useRouter": true,
"useSlots": true,
"watch": true,
"watchEffect": true,
"watchPostEffect": true,
"watchSyncEffect": true
}
}
================================================
FILE: .eslintrc.cjs
================================================
module.exports = {
root: true,
env: {
browser: true,
node: true,
es2021: true
},
parser: 'vue-eslint-parser',
parserOptions: {
parser: '@typescript-eslint/parser',
ecmaVersion: 12,
sourceType: 'module'
},
extends: [
'eslint:recommended',
'plugin:vue/vue3-recommended',
'plugin:@typescript-eslint/recommended',
'./.eslintrc-auto-import.json',
'plugin:prettier/recommended'
],
rules: {
'prettier/prettier': 'error',
'vue/multi-word-component-names': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-non-null-assertion': 'off'
},
overrides: [
{
files: ['*.vue'],
rules: {
'no-undef': 'off'
}
}
]
}
================================================
FILE: .github/workflows/alpha.yml
================================================
name: Alpha
on:
workflow_dispatch:
jobs:
release:
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Pnpm setup
uses: pnpm/action-setup@v2
with:
version: 7
- name: Node.js setup
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'pnpm'
- name: Rust setup
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
- name: Install dependencies
run: pnpm install
- name: Build and release the app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
tagName: alpha
releaseName: 'alpha version'
releaseDraft: false
prerelease: true
================================================
FILE: .github/workflows/check.yml
================================================
name: Check
on:
push:
branches: [main, dev]
pull_request:
branches: [main, dev]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Pnpm setup
uses: pnpm/action-setup@v2
with:
version: 7
- name: Node.js setup
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Lint
run: pnpm run lint
- name: TypeCheck
run: pnpm run check
================================================
FILE: .github/workflows/deploy.yml
================================================
name: Deploy
on:
push:
branches: ['main']
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Pnpm setup
uses: pnpm/action-setup@v2
with:
version: 7
- name: Node.js setup
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'pnpm'
- name: Install
run: pnpm install
- name: Build
run: pnpm run build --mode deploy
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Get version from tag
id: tag_name
run: |
echo ::set-output name=current_version::${GITHUB_REF#refs/tags/v}
shell: bash
- name: Checkout
uses: actions/checkout@v3
- name: Get changelog
id: changelog_reader
uses: mindsers/changelog-reader-action@v2
with:
validation_level: warn
validation_depth: 10
version: ${{ steps.tag_name.outputs.current_version }}
path: ./CHANGELOG.en-US.md
- name: Pnpm setup
uses: pnpm/action-setup@v2
with:
version: 7
- name: Node.js setup
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'pnpm'
- name: Rust setup
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
- name: Install dependencies
run: pnpm install
- name: Build and release the app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
tagName: v__VERSION__ # tauri-action replaces \_\_VERSION\_\_ with the app version
releaseName: 'v__VERSION__'
releaseBody: ${{ steps.changelog_reader.outputs.changes }}
releaseDraft: true
prerelease: false
================================================
FILE: .github/workflows/updater.yml
================================================
name: Updater
on:
release:
types: [published]
workflow_dispatch:
jobs:
release-update:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Pnpm setup
uses: pnpm/action-setup@v2
with:
version: 7
- name: Node.js setup
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Release updater file
run: pnpm run updater
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
# .vscode/*
# !.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.VSCodeCounter
/scripts/Grasscutter_Resources
/scripts/target
.eslintcache
================================================
FILE: .npmrc
================================================
shamefully-hoist=true
================================================
FILE: .prettierrc
================================================
{
"printWidth": 120,
"tabWidth": 2,
"semi": false,
"singleQuote": true,
"trailingComma": "none",
"vueIndentScriptAndStyle": true,
"arrowParens": "avoid"
}
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"Vue.volar",
"Vue.vscode-typescript-vue-plugin",
"hollowtree.vue-snippets",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"EditorConfig.EditorConfig",
"antfu.unocss",
"antfu.iconify",
"lokalise.i18n-ally",
"antfu.goto-alias"
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": ["source.fixAll.eslint"],
"npm.packageManager": "pnpm",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"i18n-ally.localesPaths": ["src/i18n/locales"],
"i18n-ally.sourceLanguage": "en",
"i18n-ally.displayLanguage": "en",
"i18n-ally.enabledParsers": ["json"],
"i18n-ally.keystyle": "flat",
"i18n-ally.indent": 2,
"i18n-ally.tabStyle": "space",
"i18n-ally.enabledFrameworks": ["vue-sfc", "vue"],
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer"
}
}
================================================
FILE: CHANGELOG.en-US.md
================================================
# Changelog
## [1.5.7] - 2023-02-09
### Features
- update some data to 3.4
## [1.5.6] - 2023-01-07
### Bug Fixes
- checkbox style error
- some mods do not generate modinfo.json
## [1.5.5] - 2023-01-05
### Features
- improve local image loading speed
- update some data to 3.3
- add alwaysOnTop setting
- add borderless window/fullscreen/custom resolution game start parameters
## [1.5.4] - 2022-12-26
### Features
- add /verify command to get mail verify code
- restore the previous proxy settings after stopping proxy traffic or exit the program
- right click refresh will no longer affect the proxy state
## [1.5.3] - 2022-12-24
### Features
- add a mystery feature
- adjust automatic width and scrollbar width of cascader
## [1.5.2] - 2022-12-11
### Features
- mods auto-complete classification based on ini file name (only the characters part is completed)
- update some quest data
- add num param of artifact generate
### Bug Fixes
- mods classification results are not written locally
- Wrong text
## [1.5.1] - 2022-12-01
### Features
- Add Grasscutter to startup items
- Add changelog view
- Add proxy port setting
- Local mods support category and filter
- Ignore case when searching
- Spwn command add maxhp,hp,atk,def parameters
## [1.5.0] - 2022-11-24
### Features
- certificate installation and traffic proxy
- Launcher and startup item management
### Breaking Changes
- The corresponding plugin must be upgrade to 1.5.0
## [1.4.11] - 2022-11-10
### Features
- Improve the translation of some monster names
- Add NFSW switch to the mod download interface
- Add Japanese and Spanish
- Add a button to cancel the ehance of artifact
### Bug Fixes
- Fix the wrong text
## [1.4.10] - 2022-11-09
### Features
- Update complete character, weapon, and material data
## [1.4.9] - 2022-11-08
### Features
- Update some of the data from version 3.2
- Add mod online download function
### Bug Fixes
- Fix part of the wrong artifact id
## [1.4.8] - 2022-10-26
### Features
- Add artifact adjustment lv
- Improve some translation
- Online Mod(test)
## [1.4.7] - 2022-10-22
### Features
- Add scene list and tp command
- Improve some text translation and modification
- Clear Inventory function adds parameters
- Server address support domain name, add history list
### Bug Fixes
- Fix part of the wrong artifact id
- Fix some missing text tips
## [1.4.6] - 2022-10-17
### Features
- Add Quest list
## [1.4.5] - 2022-10-16
### Features
- The monster list is modified to include groups, with ids for easy searching
## [1.4.4] - 2022-10-16
### Features
- Replace the id with the name in the weather json file
- Add monster list
## [1.4.3] - 2022-10-12
### Features
- Add software version check and upgrade function
- modify levelUpAll to be optional(requires plugin upgrade to v1.4.1)
### Bug Fixes
- FetterLevel level-up now is immediately
## [1.4.2] - 2022-10-10
### Features
- Add system proxy switch
### Bug Fixes
- Fix the wrong artifact id
[1.5.6]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.6...v1.5.7
[1.5.6]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.5...v1.5.6
[1.5.5]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.4...v1.5.5
[1.5.4]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.3...v1.5.4
[1.5.3]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.2...v1.5.3
[1.5.2]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.1...v1.5.2
[1.5.1]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.0...v1.5.1
[1.5.0]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.11...v1.5.0
[1.4.11]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.10...v1.4.11
[1.4.10]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.9...v1.4.10
[1.4.9]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.8...v1.4.9
[1.4.8]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.7...v1.4.8
[1.4.7]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.6...v1.4.7
[1.4.6]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.5...v1.4.6
[1.4.5]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.4...v1.4.5
[1.4.4]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.3...v1.4.4
[1.4.3]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.2...v1.4.3
[1.4.2]: https://github.com/jianxingxuejian/grasscutter-tools/releases/tag/v1.4.2
================================================
FILE: CHANGELOG.zh-CN.md
================================================
# 变更日志
## [1.5.7] - 2023-02-09
### 特性
- 更新部分数据到 3.4
## [1.5.6] - 2023-01-07
### 修复 Bug
- 复选框样式错误
- 部分 mods 未生成 modinfo.json
## [1.5.5] - 2023-01-05
### 特性
- 提高本地图片加载速度
- 部分数据更新至 3.3
- 添加窗口总在最前设置
- 游戏启动参数添加无边框窗口/全屏/自定义分辨率
## [1.5.4] - 2022-12-26
### 特性
- 添加 /verify 指令用于获取验证码
- 在停止流量代理或者退出程序后,恢复之前的代理设置
- 右键刷新不会再影响代理状态
## [1.5.3] - 2022-12-24
### 特性
- 新增了一项神秘功能
- 调整自动宽度和滚动条宽度
## [1.5.2] - 2022-12-11
### 特性
- Mod 根据 ini 文件名自动完成分类(仅完成角色部分)
- 更新部分任务数据
- 新增圣遗物生成的数量参数
### 修复 Bug
- Mod 分类结果并未写入本地
- 错误的文案
## [1.5.1] - 2022-12-01
### 特性
- 启动项新增割草机
- 新增变更日志查看
- 新增代理端口配置
- 本地 mod 支持分类与筛选
- 搜索时忽略大小写
- spawn 命令新增血量、攻击力等参数
## [1.5.0] - 2022-11-24
### 特性
- CA 证书安装以及流量代理
- 启动器以及启动项管理
### 破坏性变更
- 相应的插件必须升级到 1.5.0
## [1.4.11] - 2022-11-10
### 特性
- 完善部分怪物名称翻译
- 新增 mod 下载界面的 NFSW 开关
- 新增日语与西班牙语
- 新增圣遗物词条取消强化按钮
### 修复 Bug
- 修正错误的文本
## [1.4.10] - 2022-11-09
### 特性
- 更新完整的人物、武器、材料数据
## [1.4.9] - 2022-11-08
### 特性
- 增加部分 3.2 版本的数据
- 新增 mod 在线下载功能
### 修复 Bug
- 修正部分错误的圣遗物 id
## [1.4.8] - 2022-10-26
### 特性
- 新增圣遗物等级调整
- 完善部分翻译
- 在线 mod(测试)
## [1.4.7] - 2022-10-22
### 特性
- 添加场景列表与传送指令
- 清理背包功能增加参数
- 服务器地址支持域名,增加历史列表
### 修复 Bug
- 修正部分错误的圣遗物 id
- 修复部分丢失的文字提示
## [1.4.6] - 2022-10-17
### 特性
- 增加任务列表
## [1.4.5] - 2022-10-16
### 特性
- 怪物列表修改成分组,加上了 id 便于搜索,补上一部分翻译
## [1.4.4] - 2022-10-16
### 特性
- 用天气 json 文件中的名字替换 id
- 增加怪物列表(由脚本生成,因此暂时还没有翻译)
## [1.4.3] - 2022-10-10
### 特性
- 添加软件版本检测与升级功能
- 修改一键升级功能为可选的(需要插件升级到 v1.4.1)
### 修复 Bug
- 好感度升级现在能立即生效
## [1.4.2] - 2022-10-10
### 特性
- 增加系统代理切换功能
### 修复 Bug
- 修正错误的圣遗物 id
[1.5.6]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.6...v1.5.7
[1.5.6]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.5...v1.5.6
[1.5.5]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.4...v1.5.5
[1.5.4]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.3...v1.5.4
[1.5.3]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.2...v1.5.3
[1.5.2]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.1...v1.5.2
[1.5.1]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.5.0...v1.5.1
[1.5.0]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.11...v1.5.0
[1.4.11]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.10...v1.4.11
[1.4.10]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.9...v1.4.10
[1.4.9]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.8...v1.4.9
[1.4.8]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.7...v1.4.8
[1.4.7]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.6...v1.4.7
[1.4.6]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.5...v1.4.6
[1.4.5]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.4...v1.4.5
[1.4.4]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.3...v1.4.4
[1.4.3]: https://github.com/jianxingxuejian/grasscutter-tools/compare/v1.4.2...v1.4.3
[1.4.2]: https://github.com/jianxingxuejian/grasscutter-tools/releases/tag/v1.4.2
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2022 null
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
<h1 align="center">Grasscutter Tools</h1>
English | [简体中文](README_zh-CN.md)








[](https://github.com/jianxingxuejian/grasscutter-tools/blob/main/LICENSE)
[](https://github.com/jianxingxuejian/grasscutter-tools/stargazers)
[](https://github.com/jianxingxuejian/grasscutter-tools/network/members)
[](https://github.com/jianxingxuejian/grasscutter-tools/releases)
[](https://github.com/jianxingxuejian/grasscutter-tools/releases)
[](https://discord.com/invite/qGyWhAUApU)
[](https://qm.qq.com/cgi-bin/qm/qr?k=0VnTLjWPz76RSScycDyp2_X68w6b73gO&jump_from=webapi&authKey=AO4rT4mzAw8krhEVDIMECCwFX7wRmGJA9+ui7AK7aQRA3l5BCeS1h/3pXT2MCkzZ)
## Features
- [x] Launcher
- [x] Common Command
- [x] Create Artifacts
- [x] Item Category Search
- [x] Spawn List
- [x] Quest/Scene/TP
- [x] Online Mod Download and Local Mod Management
- [x] Admin Console
## Community
Join our [discord](https://discord.com/invite/qGyWhAUApU)
## Usage
If you don't want to install the client, you can use the web version that includes some of the features: https://null-grasscutter-tools.vercel.app/
The remote execute feature requires your server to use the [plugin](https://github.com/jianxingxuejian/grasscutter-plugin/releases/tag/v1.5.1).
Before you use the client, you should complete the easy certification first(send a verification code to your in-game mailbox to complete the verification within 1 minute. The new version of the plugin add a custom command, so you can also use `/verify` command to get the verification code). If you are the server owner, you can use the Admin-Console on it after completed the admin certification.
If you want to use the launcher, make sure the values of useEncryption and useInRouting in the server config.json file are both false, and then use the http address, like this: http:127.0.0.1:443, or configure the server with an https certificate, make sure the values of useEncryption and useInRouting are both true, and then you can use the https connection, like this: https:127.0.0.1
About Mod please [go here](docs/mod.md).
If you have any questions or want to add features, please open an issue.
## Download
Windows platform download the msi file,mac platform download the app.tar.gz or dmg file,linux platform download the deb or AppImage file,Please [go here](https://github.com/jianxingxuejian/grasscutter-tools/releases) to download the latest version.
## Development
Build with Tauri, front-end tech stack: Vue3 + Vite3 + Typescript + Naive-ui + Unocss + Vue I18n.
**Node** and **Rust** environments are required for development, and package manager use **pnpm**.
Install dependencies:
```shell
pnpm install
```
Run:
```shell
pnpm tauri dev
```
Please go to the [Tauri](https://github.com/tauri-apps/tauri) project for more information.
## Contribute
Feel free to point out any questions about code quality, UI design, etc. It would be great if you could create a pull request.
For translations, only Simplified Chinese and English are currently available. If you want to translate to other languages or optimize your translation, please go to the src/i18n/locales folder, which lists all supported languages, and submit pr.
The game data text is parsing from [gc-res-parse](https://github.com/jianxingxuejian/gc-res-parse), and most of the data has been internationalized.
================================================
FILE: README_zh-CN.md
================================================
<h1 align="center">Grasscutter Tools</h1>
[English](README.md) | 简体中文








[](https://github.com/jianxingxuejian/grasscutter-tools/blob/main/LICENSE)
[](https://github.com/jianxingxuejian/grasscutter-tools/stargazers)
[](https://github.com/jianxingxuejian/grasscutter-tools/network/members)
[](https://github.com/jianxingxuejian/grasscutter-tools/releases)
[](https://github.com/jianxingxuejian/grasscutter-tools/releases)
[](https://discord.com/invite/qGyWhAUApU)
[](https://qm.qq.com/cgi-bin/qm/qr?k=0VnTLjWPz76RSScycDyp2_X68w6b73gO&jump_from=webapi&authKey=AO4rT4mzAw8krhEVDIMECCwFX7wRmGJA9+ui7AK7aQRA3l5BCeS1h/3pXT2MCkzZ)
## 功能
- [x] 启动器
- [x] 常用指令
- [x] 快速生成圣遗物
- [x] 物品分类检索
- [x] 怪物列表
- [x] 任务/场景/传送
- [x] 在线 Mod 下载和本地 Mod 管理
- [x] 管理员控制台
## 社区
加入我们的 [Discord](https://discord.com/invite/qGyWhAUApU)
加入 [QQ](https://qm.qq.com/cgi-bin/qm/qr?k=0VnTLjWPz76RSScycDyp2_X68w6b73gO&jump_from=webapi&authKey=AO4rT4mzAw8krhEVDIMECCwFX7wRmGJA9+ui7AK7aQRA3l5BCeS1h/3pXT2MCkzZ) 交流群 734643309
## 使用
如果你不想安装应用程序,可以使用包含部分功能的 web 版本: https://null-grasscutter-tools.vercel.app/
远程执行功能需要服务端配合[这个插件](https://github.com/jianxingxuejian/grasscutter-plugin/releases/tag/v1.5.1)使用。
使用客户端之前需要完成简单的账号认证(向你的游戏发送验证码邮件然后在 1 分钟之内完成验证。新版本插件新增了一个自定义指令,也可以用 `/verify` 指令获取验证码)。服务端拥有者可以完成管理员认证然后使用管理员控制台,效果与服务器控制台相同。
如果想使用启动器,请确保服务端的 config.json 文件中 useEncryption 与 useInRouting 的值都是 false,然后使用 http 地址,例如: http:127.0.0.1:443,或者服务端配置 https 证书,然后就能使用 https 连接,例如:https:127.0.0.1。
mod 相关功能的使用请看[这里](docs/mod_zh-CN.md)。
有什么疑问或者想添加功能请提 issue。
## 下载
windows 平台下载 msi 文件,mac 平台下载 app.tar.gz 或者 dmg 文件,linux 平台下载 deb 或者 AppImage 文件,请前往[此处](https://github.com/jianxingxuejian/grasscutter-tools/releases)下载最新版本。
## 开发
使用 Tauri 构建,前端技术栈:Vue3 + Vite3 + Typescript + Naive-ui + Unocss + Vue I18n。
开发需要 Node 和 Rust 环境,包管理使用 pnpm。
安装依赖:
```shell
pnpm install
```
启动:
```shell
pnpm tauri dev
```
更详细的内容请前往[Tauri](https://github.com/tauri-apps/tauri)项目进行了解。
## 贡献
欢迎指出任何关于代码质量,UI 设计等方面的问题,如果能提交 PR 就更好了。
关于翻译,目前仅有简体中文和英语。如果想要翻译其它语言或者优化翻译,请前往 src/i18n/locales 文件夹,里面罗列了所有能支持的语言版本,然后提交 pr。
游戏数据文本解析来自[gc-res-parse](https://github.com/jianxingxuejian/gc-res-parse),大部分数据已经完成了国际化。
================================================
FILE: build/config/index.ts
================================================
export * from './utils'
================================================
FILE: build/config/utils.ts
================================================
// eslint-disable-next-line no-control-regex
const INVALID_CHAR_REGEX = /[\x00-\x1F\x7F<>*#"{}|^[\]`;?:&=+$,]/g
const DRIVE_LETTER_REGEX = /^[a-z]:/i
export function sanitizeFileName(name: string): string {
const match = DRIVE_LETTER_REGEX.exec(name)
const driveLetter = match ? match[0] : ''
// A `:` is only allowed as part of a windows drive letter (ex: C:\foo)
// Otherwise, avoid them because they can refer to NTFS alternate data streams.
return driveLetter + name.substring(driveLetter.length).replace(INVALID_CHAR_REGEX, '')
}
================================================
FILE: build/index.ts
================================================
export * from './config'
export * from './plugins'
================================================
FILE: build/plugins/compress.ts
================================================
import ViteCompression from 'vite-plugin-compression'
export default (env: ImportMetaEnv) =>
ViteCompression({
disable: !JSON.parse(env.VITE_COMPRESS)
})
================================================
FILE: build/plugins/https.ts
================================================
import basicSsl from '@vitejs/plugin-basic-ssl'
export default basicSsl()
================================================
FILE: build/plugins/i18n.ts
================================================
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
import path from 'path'
export default VueI18nPlugin({
include: path.resolve('./src/i18n/locales/**')
})
================================================
FILE: build/plugins/index.ts
================================================
import type { PluginOption } from 'vite'
import vue from './vue'
import unplugin from './unplugin'
import unocss from './unocss'
import i18n from './i18n'
import https from './https'
import compress from './compress'
/**
* 安装vite插件
*/
export function setupVitePlugins(env: ImportMetaEnv): PluginOption[] {
const plugins = [compress(env), ...vue, ...unplugin, unocss, i18n, https]
return plugins
}
================================================
FILE: build/plugins/unocss.ts
================================================
import unocss from 'unocss/vite'
export default unocss()
================================================
FILE: build/plugins/unplugin.ts
================================================
import Icons from 'unplugin-icons/vite'
import { FileSystemIconLoader } from 'unplugin-icons/loaders'
import Components from 'unplugin-vue-components/vite'
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'
import IconsResolver from 'unplugin-icons/resolver'
import AutoImport from 'unplugin-auto-import/vite'
export default [
Icons({
autoInstall: true,
compiler: 'vue3',
scale: 1,
defaultClass: 'inline-block',
customCollections: {
// 加载自定义图标
custom: FileSystemIconLoader('src/assets/icons')
}
}),
Components({
dirs: ['src/components'],
deep: true,
directives: true,
dts: 'src/types/components.d.ts',
types: [{ from: 'vue-router', names: ['RouterLink', 'RouterView'] }],
include: [/\.vue$/, /\.vue\?vue/],
exclude: [/[\\/]node_modules[\\/]/],
resolvers: [
NaiveUiResolver(),
IconsResolver({
customCollections: ['custom'],
prefix: 'icon'
})
]
}),
AutoImport({
imports: ['vue', 'vue-router', 'pinia'],
dts: 'src/types/auto-import.d.ts',
include: [/\.vue$/, /\.vue\?vue/, /\.ts$/],
eslintrc: {
enabled: true,
filepath: './.eslintrc-auto-import.json'
}
})
]
================================================
FILE: build/plugins/vue.ts
================================================
import vue from '@vitejs/plugin-vue'
const plugins = [vue()]
export default plugins
================================================
FILE: docs/mod.md
================================================
About mods, please go to the [GIMI](https://github.com/SilentNightSound/GI-Model-Importer) project to understand the basics, how to use the mod function in this project: select the 3DMigoto Loader.exe file and make sure the Mods folder is at the same level. The document structure is as follows:
```
|-- 3DMigoto Loader.exe
|-- Mods
|-- keqing
|-- mod1
|-- KeqingMod
|-- Keqing.ini
|-- ...
|-- modinfo.json
|-- *.png/jpg/jpeg/jfif
```
You can nest and name as many mods as you want, but be careful that each mod must be in a separate folder, not together with other mods. The program will read all mods and **automatically generate modinfo.json files**, then you can place a picture (at the same level as the mod folder) for the program to read, or you can modify the images field in the modinfo.json file to use network pictures. you can adjust the aspect ratio of the image, fill in the name and author, and use the keywords to filter. the checkbox on the mod floating window is used to select whether to load the mod or not, when unchecked 3dm will not load the mod.
The merged mod is now supported, with the following structure:
```
|-- 3DMigoto Loader.exe
|-- Mods
|-- keqing
|-- merged.ini
|-- mod1
|-- KeqingMod
|-- DISABLEKeqing.ini
|-- ...
|-- modinfo.json
|-- *.png/jpg/jpeg/jfif
|-- mod2
|-- KeqingMod
|-- DISABLEKeqing.ini
|-- ...
|-- modinfo.json
|-- *.png/jpg/jpeg/jfif
```
OR:
```
|-- 3DMigoto Loader.exe
|-- Mods
|-- keqing
|-- merged.ini
|-- mod1
|-- DISABLEKeqing.ini
|-- ...
|-- mod2
|-- DISABLEKeqing.ini
|-- ...
|-- modinfo.json
|-- *.png/jpg/jpeg/jfif
```
================================================
FILE: docs/mod_zh-CN.md
================================================
关于 mod,请前往 [GIMI](https://github.com/SilentNightSound/GI-Model-Importer) 项目了解基础知识,本项目 mod 功能的使用方法:选择 3DMigoto Loader.exe 文件,并确保 Mods 文件夹在同一级。结构如下:
```
|-- 3DMigoto Loader.exe
|-- Mods
|-- 刻晴
|-- mod1
|-- KeqingMod
|-- Keqing.ini
|-- ...
|-- modinfo.json
|-- *.png/jpg/jpeg/jfif
```
可以进行任意的嵌套和命名,但要注意每个 mod 一定要在一个单独的文件夹下,不能跟其它 mod 放在一起。程序会读取所有 mod,**自动生成 modinfo.json 文件**,然后你可以放置一张图片(与 mod 文件夹同一级)让程序读取到,也可以修改 modinfo.json 文件的 images 字段来使用网络图片。可以调整图片的宽高比例,填写名字和作者,使用关键字进行筛选。mod 浮窗上的复选框是用来选择是否加载这个 mod,取消勾选时 3dm 不会加载这个 mod。
现在已支持合并后的 mod,结构如下:
```
|-- 3DMigoto Loader.exe
|-- Mods
|-- 刻晴
|-- merged.ini
|-- mod1
|-- KeqingMod
|-- DISABLEKeqing.ini
|-- ...
|-- modinfo.json
|-- *.png/jpg/jpeg/jfif
|-- mod2
|-- KeqingMod
|-- DISABLEKeqing.ini
|-- ...
|-- modinfo.json
|-- *.png/jpg/jpeg/jfif
```
或者:
```
|-- 3DMigoto Loader.exe
|-- Mods
|-- 刻晴
|-- merged.ini
|-- mod1
|-- DISABLEKeqing.ini
|-- ...
|-- mod2
|-- DISABLEKeqing.ini
|-- ...
|-- modinfo.json
|-- *.png/jpg/jpeg/jfif
```
================================================
FILE: index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>GC-Tools</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
================================================
FILE: package.json
================================================
{
"name": "grasscutter-tools",
"type": "module",
"private": true,
"version": "1.0.0",
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && vite build",
"preview": "vite preview",
"tauri": "tauri",
"check": "vue-tsc --noEmit --skipLibCheck",
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .eslintignore",
"updater": "tsx scripts/updater.ts",
"pre-commit": "pnpm dlx simple-git-hooks"
},
"dependencies": {
"@tauri-apps/api": "^1.2.0",
"@vueuse/core": "^9.12.0",
"axios": "1.3.2",
"lodash-es": "^4.17.21",
"monaco-editor": "^0.34.1",
"pinia": "^2.0.30",
"snarkdown": "^2.0.0",
"tauri-plugin-store-api": "github:jianxingxuejian/tauri-plugin-store#dev",
"vue": "^3.2.47",
"vue-i18n": "^9.2.2",
"vue-router": "^4.1.6"
},
"devDependencies": {
"@actions/github": "^5.1.1",
"@iconify-json/carbon": "^1.1.14",
"@iconify-json/ic": "^1.1.12",
"@iconify-json/icon-park-solid": "^1.1.7",
"@iconify-json/ion": "^1.1.7",
"@iconify-json/line-md": "^1.1.22",
"@iconify-json/material-symbols": "^1.1.27",
"@iconify-json/mdi": "^1.1.45",
"@iconify/vue": "^4.1.0",
"@intlify/eslint-plugin-vue-i18n": "^2.0.0",
"@intlify/unplugin-vue-i18n": "^0.8.1",
"@tauri-apps/cli": "^1.2.3",
"@types/fs-extra": "^11.0.1",
"@typescript-eslint/eslint-plugin": "^5.50.0",
"@typescript-eslint/parser": "^5.50.0",
"@vitejs/plugin-basic-ssl": "^1.0.1",
"@vitejs/plugin-vue": "^4.0.0",
"eslint": "^8.33.0",
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-vue": "^9.9.0",
"fs-extra": "^11.1.0",
"lint-staged": "^13.1.0",
"naive-ui": "2.34.3",
"node-fetch": "^3.3.0",
"prettier": "^2.8.3",
"sass": "^1.58.0",
"simple-git-hooks": "^2.8.1",
"tsx": "^3.12.2",
"typescript": "^4.9.5",
"unocss": "^0.49.4",
"unplugin-auto-import": "^0.14.0",
"unplugin-icons": "^0.15.2",
"unplugin-vue-components": "^0.23.0",
"vite": "^4.1.1",
"vite-plugin-compression": "^0.5.1",
"vue-tsc": "^1.0.24"
},
"simple-git-hooks": {
"pre-commit": "pnpm dlx lint-staged"
},
"lint-staged": {
"*": [
"eslint --cache --fix"
]
}
}
================================================
FILE: renovate.json
================================================
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
]
}
================================================
FILE: scripts/updater.ts
================================================
import path from 'path'
import fs from 'fs-extra'
import fetch from 'node-fetch'
import { getOctokit, context } from '@actions/github'
const i18nList = ['en-US', 'zh-CN']
export async function updater() {
if (process.env.GITHUB_TOKEN === undefined) {
throw new Error('GITHUB_TOKEN is required')
}
const notes: Record<string, string> = {}
i18nList.forEach(async locale => {
const logPath = path.join(process.cwd(), `CHANGELOG.${locale}.md`)
if (!(await fs.pathExists(logPath))) {
throw new Error(`could not found CHANGELOG.${locale}.md`)
}
const read = fs.readFileSync(logPath, 'utf-8').split('\n')
const changelog: string[] = []
let count = 0
for (const line of read) {
if (/^## [v[\d.]+/.test(line)) {
count++
}
if (count > 1) break
if (line.startsWith('##') || line.startsWith('-')) {
changelog.push(line)
}
}
notes[locale] = changelog.join('\n')
})
const options = { owner: context.repo.owner, repo: context.repo.repo }
const github = getOctokit(process.env.GITHUB_TOKEN)
const { tag_name, published_at } = (await github.rest.repos.getLatestRelease({ ...options })).data
const downloadUrl = 'https://github.com/jianxingxuejian/grasscutter-tools/releases/download/' + tag_name + '/'
const version = tag_name.slice(1)
const downloadUrl_win = downloadUrl + `grasscutter-tools_${version}_x64_en-US.msi.zip`
const signature_win = await getSignature(downloadUrl_win)
const downloadUrl_darwin = downloadUrl + 'grasscutter-tools.app.tar.gz'
const signature_darwin = await getSignature(downloadUrl_darwin)
const download_linux = downloadUrl + `grasscutter-tools_${version}_amd64.AppImage.tar.gz`
const signature_linux = await getSignature(download_linux)
const updateData = {
version: tag_name,
pub_date: published_at,
notes: JSON.stringify(notes),
platforms: {
win64: {
url: downloadUrl_win,
signature: signature_win
},
darwin: {
url: downloadUrl_darwin,
signature: signature_darwin
},
linux: {
url: download_linux,
signature: signature_linux
},
'windows-x86_64': {
url: downloadUrl_win,
signature: signature_win
},
'darwin-x86_64': {
url: downloadUrl_darwin,
signature: signature_darwin
},
'darwin-aarch64': {
url: downloadUrl_darwin,
signature: signature_darwin
},
'linux-x86_64': {
url: download_linux,
signature: signature_linux
}
}
}
const { data: updateRelease } = await github.rest.repos.getReleaseByTag({ ...options, tag: 'updater' })
const asset = updateRelease.assets.find(item => item.name.includes('update'))
if (asset) {
await github.rest.repos.deleteReleaseAsset({ ...options, asset_id: asset.id })
}
await github.rest.repos.uploadReleaseAsset({
...options,
release_id: updateRelease.id,
name: `update.json`,
data: JSON.stringify(updateData)
})
}
async function getSignature(url: string) {
const response = await fetch(url + '.sig', {
method: 'GET',
headers: { 'Content-Type': 'application/octet-stream' }
})
const text = await response.text()
return text
}
for (let i = 0; i < 3; i++) {
try {
await updater()
} catch (err) {
console.log(err)
continue
}
break
}
================================================
FILE: src/App.vue
================================================
<template>
<n-config-provider :locale="locale" :date-locale="dateLocale" :theme-overrides="themeOverrides" :theme="theme">
<naive-provider>
<router-view />
</naive-provider>
</n-config-provider>
</template>
<script setup lang="ts">
import { useEventListener } from '@vueuse/core'
import { zhCN, enUS, jaJP, dateZhCN, dateEnUS, dateJaJP, lightTheme, darkTheme } from 'naive-ui'
import { useAppStore, useSettingStore } from '@/stores'
const appStore = useAppStore()
const settingStore = useSettingStore()
const locale = computed(() => {
switch (settingStore.locale) {
case 'zh-CN':
return zhCN
case 'en':
return enUS
case 'ja-JP':
return jaJP
default:
return enUS
}
})
const dateLocale = computed(() => {
switch (settingStore.locale) {
case 'zh-CN':
return dateZhCN
case 'en':
return dateEnUS
case 'ja-JP':
return dateJaJP
default:
return dateEnUS
}
})
const theme = computed(() => {
switch (settingStore.theme) {
case 'light':
return lightTheme
case 'dark':
return darkTheme
default:
return lightTheme
}
})
//naive-ui全分辨率适配,由于没有全部适配rem,部分需要转px
const themeOverrides = reactive({
common: {
borderRadius: '0.3rem',
fontSize: '1rem',
fontSizeSmall: '0.8rem',
fontSizeMedium: '1rem',
fontSizeLarge: '1.2rem',
heightSmall: '1.5rem',
heightMedium: computed(() => appStore.fontSize * 2 + 'px'),
heightLarge: '2.5rem'
},
Button: {
paddingMedium: '0 0.5rem',
iconMarginMedium: '0.25rem',
iconSizeMedium: '1.5rem'
},
Divider: {
color: 'rgb(236,236,242)'
},
Drawer: {
titleFontSize: '1.5rem'
},
Form: {
labelFontSizeLeftMedium: '1rem',
labelFontSizeLeftLarge: '1.2rem',
labelPaddingHorizontal: '0 0.5rem 0 0',
feedbackHeightMedium: '1.2rem',
feedbackFontSizeMedium: '0.8rem',
feedbackPadding: '0.2rem 0 0 0.2rem'
},
Progress: {
railHeight: '0.5rem'
},
Input: {
paddingMedium: '0 1rem'
},
Menu: {
fontSize: '1.25rem'
},
Message: {
margin: '0.3rem 0 0.6rem 0',
padding: '0.4rem 0.8rem',
fontSize: '1rem',
iconSize: '1.4rem',
iconMargin: '0 0.5rem 0 0'
},
Notification: {
closeMargin: '1rem 0.75rem',
closeSize: '2rem',
closeIconSize: '1.5rem',
width: '25rem',
padding: '1rem',
titleFontSize: '1.5rem',
descriptionFontSize: '1rem'
},
Popconfirm: {
fontSize: '1rem'
},
Radio: {
radioSizeMedium: '1.5rem'
},
Rate: {
sizeMedium: '1.5rem'
},
Slider: {
railHeight: '0.25rem',
handleSize: '1.125rem'
},
Space: {
gapMedium: computed(() => {
const fontSize = appStore.fontSize
return fontSize + 'px ' + fontSize * 1.5 + 'px'
})
},
Switch: {
buttonHeightMedium: '1.4rem',
buttonWidthMedium: '1.4rem',
buttonWidthPressedMedium: '1.8rem',
railHeightMedium: '1.6rem',
railWidthMedium: '3.5rem'
},
Tag: {
padding: '0 0.3rem',
closeIconSizeMedium: '0.8rem',
closeMargin: '0 0 0 0.2rem'
}
})
/** 宽度发生变化时修改基准字体大小 */
function resizeFontSize() {
let width = document.body.clientWidth
let fontSize = (width / 1920) * 30 <= 12.5 ? 12.5 : (width / 1920) * 30
document.documentElement.style.fontSize = fontSize + 'px'
appStore.updateFontSize(fontSize)
}
useEventListener(window, 'resize', () => resizeFontSize())
onMounted(() => resizeFontSize())
</script>
<style lang="scss">
@import '@/styles/scss/naive-ui.scss';
</style>
================================================
FILE: src/components/MyButton.vue
================================================
<!-- 按钮+图标+悬浮信息文字or弹出确认 -->
<template>
<n-popconfirm v-if="$slots.popconfirm" :show-icon="false" @positive-click="ckick">
<template #trigger>
<n-button :text="!text" :loading="loading" v-bind="$attrs">
<template #icon>
<slot></slot>
</template>
<span>{{ text }}</span>
</n-button>
</template>
<slot name="popconfirm"></slot>
</n-popconfirm>
<n-tooltip v-else-if="$slots.tooltip">
<template #trigger>
<n-button :text="!text" :loading="loading" v-bind="$attrs" class="text-8" @click="ckick">
<slot></slot>
<span class="text-4">{{ text }}</span>
</n-button>
</template>
<slot name="tooltip"></slot>
</n-tooltip>
<n-button v-else :text="!text" :loading="loading" v-bind="$attrs" @click="ckick">
<template #icon>
<slot></slot>
</template>
<span>{{ text }}</span>
</n-button>
</template>
<script setup lang="ts">
import { type Ref, useSlots } from 'vue'
import { useThrottleFn } from '@vueuse/core'
import { showSuccessMsg } from '@/utils'
const props = defineProps<{
/** 按钮文本 */
text?: string
/** 异步点击事件 */
onClickAsync?: () => Promise<void | ApiResult<null>> | void
/** 点击事件 */
onClick?: () => void
}>()
defineExpose({ clickAsync })
let loading: Ref<boolean>
if (useSlots().default) {
loading = ref(false)
}
async function clickAsync() {
if (!props.onClickAsync) return
let timeout
if (loading) {
timeout = setTimeout(() => {
loading.value = true
}, 20)
}
try {
const result = await props.onClickAsync()
showSuccessMsg(result)
// eslint-disable-next-line no-empty
} catch (err) {
} finally {
if (loading) {
if (!loading.value) {
clearTimeout(timeout)
} else {
loading.value = false
}
}
}
}
const clickThrottle = useThrottleFn(clickAsync, 1000)
async function ckick() {
if (props.onClick) {
props.onClick()
}
clickThrottle()
}
</script>
================================================
FILE: src/components/MyDivider.vue
================================================
<!-- 分割线+标题+图标 -->
<template>
<n-divider v-if="!vertical" class="mb-2! mt-0! px-10%" :dashed="dashed">
<span v-if="!dashed" class="text-5 font-bold">{{ title }}</span>
<span v-else class="text-4">{{ title }}</span>
<n-tooltip v-if="$slots.default">
<template #trigger>
<slot name="icon">
<icon-line-md-question-circle class="text-5" />
</slot>
</template>
<slot></slot>
</n-tooltip>
</n-divider>
<n-divider v-else vertical class="text-8 mx-2!" />
</template>
<script setup lang="ts">
defineProps<{
title?: string
dashed?: boolean
vertical?: boolean
}>()
</script>
================================================
FILE: src/components/MyInputGroup.vue
================================================
<template>
<n-input-group>
<n-input-group-label>{{ label }}</n-input-group-label>
<n-input-number
:value="modelValue"
:min="min"
:max="max"
:disabled="disable"
:style="{ width: max.toString().length + 5 + 'rem' }"
@update:value="$emit('update:modelValue', $event)"
/>
<my-button :text="text" :disabled="disable" @click-async="onClick" />
</n-input-group>
</template>
<script setup lang="ts">
import { playerCommand } from '@/http'
import { showSuccessMsg } from '@/utils'
const props = withDefaults(
defineProps<{
/** 绑定值 */
modelValue: number
/** 禁用 */
disable?: boolean
/** 标签文本 */
label: string
/** 最小值 */
min?: number
/** 最大值 */
max: number
/** 按钮文本 */
text: string
/** 按钮指令 */
command: string
}>(),
{
min: 0
}
)
defineEmits<{
(e: 'update:modelValue', value: number): void
}>()
async function onClick() {
const result = await playerCommand(props.command + ' ' + props.modelValue)
showSuccessMsg(result)
}
</script>
================================================
FILE: src/components/MySelect.vue
================================================
<!-- 二次封装n-select组件,增加最大可选数量限制 -->
<template>
<n-select v-model:value="substatArray" :options="options" v-bind="$attrs"></n-select>
</template>
<script setup lang="ts">
import type { SelectOption } from 'naive-ui'
const props = defineProps<{
/** 最大可选数量 */
maxSelectCount?: number
value: number[]
options: SelectOption[]
}>()
const substatArray = computed({
get() {
return props.value
},
set(value: number[]) {
emit('update:value', value)
}
})
/** 禁选状态 */
const disabled = ref(false)
const emit = defineEmits<{
(e: 'update:value', value: number[]): void
}>()
watch(
() => props.value,
() => {
//存在最大值
if (props.maxSelectCount) {
//状态为未禁选且数量大于等于最大值
if (!disabled.value && props.value.length >= props.maxSelectCount) {
//获取所有的下拉框,zIndex最大的即为当前激活的下拉框
const parents = Array.from(
document.getElementsByClassName('v-binder-follower-container') as HTMLCollectionOf<HTMLElement>
)
const max = parents.reduce((prev, next) => {
return prev.style.zIndex > next.style.zIndex ? prev : next
})
//获取所有选项,将未选择的设为禁选
const elements = Array.from(max.getElementsByClassName('n-base-select-option'))
elements
.filter(el => !el.classList.contains('n-base-select-option--selected'))
.forEach(el => {
el.classList.add('n-base-select-option--disabled')
})
props.options.forEach(x => {
x.disabled = !props.value.includes(x.value as number)
})
disabled.value = true
}
//数量小于最大值则清除禁选状态
else {
const elements: Element[] = Array.from(document.getElementsByClassName('n-base-select-option'))
elements.forEach(el => {
el.classList.remove('n-base-select-option--disabled')
})
props.options.forEach(x => {
x.disabled = false
})
disabled.value = false
}
}
},
{ deep: true }
)
</script>
================================================
FILE: src/components/MySwitch.vue
================================================
<template>
<div class="flex justify-center">
<span class="text-4 mr-3">{{ text }}</span>
<n-switch :value="modelValue" :loading="loading" :disabled="disable" @update:value="clickThrottle" />
</div>
</template>
<script setup lang="ts">
import { useThrottleFn } from '@vueuse/core'
import { playerCommand } from '@/http'
const props = defineProps<{
/** 绑定值 */
modelValue?: boolean
/** 文本 */
text: string
/** 禁用 */
disable?: boolean
/** 指令 */
command: string
}>()
const emit = defineEmits<{
(e: 'update:modelValue', value: boolean): void
}>()
const loading = ref(false)
async function click(value: boolean) {
loading.value = true
try {
const result = await playerCommand(props.command + ' ' + value)
if (result?.code == 200) {
window.$message?.success(result.msg)
emit('update:modelValue', value)
} else {
emit('update:modelValue', !value)
}
// eslint-disable-next-line no-empty
} catch (err) {
} finally {
loading.value = false
}
}
const clickThrottle = useThrottleFn(click, 1000)
</script>
================================================
FILE: src/components/NaiveProvider.vue
================================================
<template>
<n-loading-bar-provider>
<n-dialog-provider>
<n-notification-provider placement="bottom-right">
<n-message-provider>
<slot></slot>
<naive-provider-content />
</n-message-provider>
</n-notification-provider>
</n-dialog-provider>
</n-loading-bar-provider>
</template>
<script setup lang="ts">
import { useLoadingBar, useDialog, useMessage, useNotification } from 'naive-ui'
const NaiveProviderContent = defineComponent({
setup() {
window.$loadingBar = useLoadingBar()
window.$dialog = useDialog()
window.$notification = useNotification()
window.$message = useMessage()
},
render() {
return h('div')
}
})
</script>
================================================
FILE: src/components/SelectFile.vue
================================================
<template>
<n-input-group>
<n-input :value="value" :placeholder="placeholder" />
<n-tooltip>
<template #trigger>
<n-button type="primary" @click="onClick"> {{ buttonText }} </n-button>
</template>
<span>{{ placeholder }}</span>
</n-tooltip>
</n-input-group>
</template>
<script setup lang="ts">
defineProps<{
value: string
buttonText: string
placeholder: string
onClick?: () => void
}>()
</script>
================================================
FILE: src/components/ServerInput.vue
================================================
<template>
<n-input-group>
<n-popselect v-model:value="server.protocol" :options="protocolOptions">
<n-input-group-label>{{ server.protocol }}</n-input-group-label>
</n-popselect>
<n-input v-model:value="server.ip">
<template #suffix>
<n-dropdown trigger="hover" :options="history" :render-label="renderDropdownLabel">
<my-button>
<icon-material-symbols-history />
</my-button>
</n-dropdown>
</template>
</n-input>
</n-input-group>
</template>
<script setup lang="ts">
import type { DropdownOption } from 'naive-ui'
import IconDelete from '~icons/mdi/delete-forever-outline'
import { useSettingStore } from '@/stores'
import { MyButton } from './'
const settingStore = useSettingStore()
const { server, updateServer } = settingStore
const protocolOptions = [
{ label: 'http', value: 'http' },
{ label: 'https', value: 'https' }
]
const history = computed(() => server.history.map(item => ({ key: item, label: item })))
function renderDropdownLabel(option: DropdownOption) {
return h('div', { class: 'flex-between' }, [
h('span', { class: 'mr-2', onClick: () => handleSelectHistory(option.key) }, { default: () => option.label }),
h(MyButton, { onClick: () => deleteHistory(option.key) }, { default: () => h(IconDelete) })
])
}
function deleteHistory(key?: string | number) {
if (key) {
const history = server.history
history.splice(
history.findIndex(item => item === key),
1
)
}
}
function handleSelectHistory(key?: string | number) {
if (key && typeof key === 'string') {
server.ip = key
updateServer()
}
}
</script>
================================================
FILE: src/components/index.ts
================================================
import MyButton from './MyButton.vue'
import MyDivider from './MyDivider.vue'
import MyInputGroup from './MyInputGroup.vue'
import MySelect from './MySelect.vue'
import MySwitch from './MySwitch.vue'
import NaiveProvider from './NaiveProvider.vue'
export { MyButton, MyDivider, MyInputGroup, MySelect, MySwitch, NaiveProvider }
================================================
FILE: src/http/api.ts
================================================
import request from '@/http/request'
import { useSettingStore } from '@/stores'
import router from '@/router'
import i18n from '@/i18n'
import isTauri from '@/utils/is-tauri'
export function adminAuth(adminVoucher: string) {
return request.post<string>('/plugin/admin/auth', { adminVoucher })
}
export function adminCreateAccount(params: Param.Account) {
return request.post('/plugin/admin/createAccount', params)
}
export function adminCommand(command: string) {
return request.get(`/plugin/admin/command?command=${command}`)
}
export function mailVerifyCode(username: string) {
return request.get(`/plugin/mail/verifyCode?username=${username}`)
}
export function playerAuthByVerifyCode(username: string, verifyCode: string) {
return request.post<string>('/plugin/player/authByVerifyCode', { username, verifyCode })
}
export function playerAuthByPassword(username: string, password: string) {
return request.post<string>('/plugin/player/authByPassword', { username, password })
}
export function playerCommand(command: string) {
if (!checkToken()) return
return request.get(`/plugin/player/command?command=${command}`)
}
export function levelUpAll(type: number) {
if (!checkToken()) return
return request.get(`/plugin/player/levelUpAll?type=${type}`)
}
export function getProps() {
return request.get<Props>('/plugin/player/getProps')
}
export function cdr() {
if (!checkToken()) return
return request.get('/plugin/player/cdr')
}
export function seed(contents: string) {
return request.post('/plugin/admin/seed', { contents })
}
function checkToken() {
if (isTauri && !useSettingStore().token) {
window.$message?.error(i18n.global.t('player auth first'))
router.push('/setting/index')
return false
}
return true
}
================================================
FILE: src/http/axios.ts
================================================
import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios'
import { useSettingStore } from '@/stores'
import { showErrorMsg } from '@/utils'
import i18n from '@/i18n'
class CustomAxiosInstance {
instance: AxiosInstance
constructor(axiosConfig: AxiosRequestConfig) {
this.instance = axios.create(axiosConfig)
this.setInterceptor()
}
setInterceptor() {
const settingStore = useSettingStore()
// intercept request
this.instance.interceptors.request.use(
config => {
const { getServer, locale, token, admin_token } = settingStore
config.baseURL = getServer
config.headers.locale = locale
config.headers.token = token
config.headers.admin_token = admin_token
return config
},
// @ts-ignore
() => showErrorMsg(100, i18n.global.t('network error'))
)
// intercept response
this.instance.interceptors.response.use(
response => {
const { status, data } = response
if (status !== 200) {
showErrorMsg(100, i18n.global.t('network error'))
return data
}
if (data.code !== 200) {
showErrorMsg(100, i18n.global.t('network error'))
return data
}
return data
},
() => showErrorMsg(100, i18n.global.t('network error'))
)
}
}
function createRequest(axiosConfig: AxiosRequestConfig) {
const instance = new CustomAxiosInstance(axiosConfig).instance
async function get<T = any>(url: string, config?: AxiosRequestConfig) {
try {
return (await instance.get(url, config)) as ApiResult<T>
} catch {
return
}
}
async function post<T = any>(url: string, data?: any, config?: AxiosRequestConfig) {
try {
return (await instance.post(url, data, config)) as ApiResult<T>
} catch {
return
}
}
return {
get,
post
}
}
const axiosRequest = createRequest({})
export default axiosRequest
================================================
FILE: src/http/index.ts
================================================
export * from './api'
================================================
FILE: src/http/request.ts
================================================
import axiosRequest from './axios'
import reqwest from './reqwest'
import isTauri from '@/utils/is-tauri'
function request() {
function get<T = null>(api: string) {
if (isTauri) {
return reqwest<T>('GET', api)
} else {
return axiosRequest.get<T>(api)
}
}
function post<T = null>(api: string, params?: any) {
if (isTauri) {
return reqwest<T>('POST', api, params)
} else {
return axiosRequest.post<T>(api, params)
}
}
return {
get,
post
}
}
export default request()
================================================
FILE: src/http/reqwest.ts
================================================
import { invoke } from '@tauri-apps/api/tauri'
import { useSettingStore } from '@/stores'
import { showErrorMsg } from '@/utils'
import i18n from '@/i18n'
type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS'
export default async function reqwest<T>(method: Method, api: string, params?: any) {
try {
const { getServer, locale, token, admin_token, proxy } = useSettingStore()
const headers = { locale, token, admin_token }
const text = await invoke<string>('http', { method, url: getServer + api, params, headers, proxy })
if (text) {
const result: ApiResult<T> = JSON.parse(text)
const { code, msg } = result
if (code != 200) {
showErrorMsg(code, msg)
}
return result
}
} catch (e) {
//@ts-ignore
showErrorMsg(100, i18n.global.t('network error'))
}
}
================================================
FILE: src/i18n/data/common/artifactIds.ts
================================================
export const artifactIds: Record<number, number[]> = {
214001: [71544, 71524, 71554, 71514, 71534],
214002: [72544, 72524, 72554, 72514, 72534],
214003: [73544, 73524, 73554, 73514, 73534],
214004: [74544, 74524, 74554, 74514, 74534],
215001: [75544, 75524, 75554, 75514, 75534],
215002: [76544, 76524, 76554, 76514, 76534],
215003: [77544, 77524, 77554, 77514, 77534],
215004: [78544, 78524, 78554, 78514, 78534],
215005: [79544, 79524, 79554, 79514, 79534],
215006: [80544, 80524, 80554, 80514, 80534],
215007: [81544, 81524, 81554, 81514, 81534],
215008: [82544, 82524, 82554, 82514, 82534],
215014: [88544, 88524, 88554, 88514, 88534],
215015: [89544, 89524, 89554, 89514, 89534],
215016: [90544, 90524, 90554, 90514, 90534],
215017: [91544, 91524, 91554, 91514, 91534],
215018: [92544, 92524, 92554, 92514, 92534],
215019: [93544, 93524, 93554, 93514, 93534],
215020: [94544, 94524, 94554, 94514, 94534],
215021: [95544, 95524, 95554, 95514, 95534],
215022: [96544, 96524, 96554, 96514, 96534],
215023: [97544, 97524, 97554, 97514, 97534],
215024: [98544, 98524, 98554, 98514, 98534],
215025: [23624, 23622, 23625, 23621, 23623],
215026: [23634, 23632, 23635, 23631, 23633],
215027: [27544, 27524, 27554, 27514, 27534],
215028: [28544, 28524, 28554, 28514, 28534]
}
================================================
FILE: src/i18n/data/common/quest.ts
================================================
import questInfo from './questInfo.json?raw'
type QuestType = 'WQ' | 'IQ' | 'LQ'
type QuestInfo = {
id: number
type: QuestType
hidden?: true
test?: true
unreleased?: true
titleHash?: number
descHash?: number
children?: {
subId: number
order: number
hidden?: true
test?: true
unreleased?: true
descHash?: number
}[]
}
const questInfos: QuestInfo[] = JSON.parse(questInfo)
export function parseQuestItem(questItem: Record<string, string>, tags: string[]) {
return questInfos.map(({ id, titleHash, descHash, children, ...other }) => ({
...other,
value: id,
label: `${id} ` + (titleHash && questItem[titleHash]) || '',
desc: descHash && questItem[descHash],
children: children?.map(({ subId, order, hidden, test, unreleased, descHash }) => ({
value: subId,
label:
order +
'. ' +
((descHash && questItem[descHash]) || '') +
` (${subId})` +
(hidden ? ` [${tags[0]}]` : '') +
(test ? ` [${tags[1]}]` : '') +
(unreleased ? ` [${tags[2]}]` : '')
}))
}))
}
================================================
FILE: src/i18n/data/common/questInfo.json
================================================
[
{
"id": 303,
"hidden": true,
"titleHash": 3245935097,
"children": [
{ "subId": 30302, "order": 1, "hidden": true },
{ "subId": 30303, "order": 2, "hidden": true },
{ "subId": 30304, "order": 3, "hidden": true },
{ "subId": 30305, "order": 4, "hidden": true },
{ "subId": 30306, "order": 5, "hidden": true },
{ "subId": 30307, "order": 6, "hidden": true },
{ "subId": 30308, "order": 7, "hidden": true },
{ "subId": 30309, "order": 8, "hidden": true },
{ "subId": 30310, "order": 9, "hidden": true },
{ "subId": 30311, "order": 10, "hidden": true },
{ "subId": 30312, "order": 11, "hidden": true },
{ "subId": 30313, "order": 12, "hidden": true },
{ "subId": 30314, "order": 13, "hidden": true },
{ "subId": 30315, "order": 14, "hidden": true },
{ "subId": 30316, "order": 15, "hidden": true },
{ "subId": 30317, "order": 16, "hidden": true },
{ "subId": 30318, "order": 17, "hidden": true },
{ "subId": 30319, "order": 18, "hidden": true },
{ "subId": 30320, "order": 19, "hidden": true },
{ "subId": 30321, "order": 20, "hidden": true },
{ "subId": 30322, "order": 21, "hidden": true },
{ "subId": 30323, "order": 22, "hidden": true },
{ "subId": 30324, "order": 23, "hidden": true },
{ "subId": 30325, "order": 24, "hidden": true },
{ "subId": 30326, "order": 25, "hidden": true },
{ "subId": 30327, "order": 26, "hidden": true },
{ "subId": 30328, "order": 27, "hidden": true }
]
},
{
"id": 306,
"titleHash": 1965198993,
"children": [
{ "subId": 30600, "order": 1, "descHash": 447310999 },
{ "subId": 30601, "order": 2, "descHash": 1564683591 },
{ "subId": 30602, "order": 3, "descHash": 3501471039 },
{ "subId": 30607, "order": 4, "hidden": true, "test": true, "descHash": 1084925175 },
{ "subId": 30608, "order": 5, "hidden": true, "test": true, "descHash": 1806936359 },
{ "subId": 30609, "order": 6, "hidden": true, "test": true, "descHash": 3182344095 },
{ "subId": 30612, "order": 7, "hidden": true, "test": true, "descHash": 2445233615 },
{ "subId": 30611, "order": 8, "hidden": true, "test": true, "descHash": 2886916207 },
{ "subId": 30603, "order": 9, "descHash": 1446306495 },
{ "subId": 30610, "order": 10, "hidden": true, "test": true, "descHash": 448045895 },
{ "subId": 30604, "order": 11, "descHash": 3323344495 }
]
},
{
"id": 307,
"titleHash": 1911328169,
"children": [
{ "subId": 30700, "order": 1, "descHash": 4264102975 },
{ "subId": 30701, "order": 2, "descHash": 524363823 },
{ "subId": 30702, "order": 3, "descHash": 1278948111 },
{ "subId": 30710, "order": 4, "descHash": 4064397919 },
{ "subId": 30707, "order": 5, "hidden": true, "test": true, "descHash": 703610127 },
{ "subId": 30708, "order": 6, "hidden": true, "test": true, "descHash": 2016556831 },
{ "subId": 30709, "order": 7, "hidden": true, "test": true, "descHash": 4232639047 },
{ "subId": 30712, "order": 8, "hidden": true, "test": true, "descHash": 4249325223 },
{ "subId": 30711, "order": 9, "hidden": true, "test": true, "descHash": 3057613159 },
{ "subId": 30703, "order": 10, "descHash": 920395111 },
{ "subId": 30715, "order": 11, "hidden": true, "test": true, "descHash": 3149053687 },
{ "subId": 30713, "order": 12, "hidden": true, "test": true, "descHash": 4022357263 },
{ "subId": 30704, "order": 13, "descHash": 3063214687 }
]
},
{
"id": 308,
"titleHash": 1947339513,
"children": [
{ "subId": 30800, "order": 1, "descHash": 4078363583 },
{ "subId": 30801, "order": 2, "descHash": 2315719471 },
{ "subId": 30802, "order": 3, "descHash": 2175151207 },
{ "subId": 30810, "order": 4, "descHash": 3334851879 },
{ "subId": 30807, "order": 5, "hidden": true, "test": true, "descHash": 2513277607 },
{ "subId": 30808, "order": 6, "hidden": true, "test": true, "descHash": 3550928127 },
{ "subId": 30809, "order": 7, "hidden": true, "test": true, "descHash": 3217259375 },
{ "subId": 30812, "order": 8, "hidden": true, "test": true, "descHash": 1082624943 },
{ "subId": 30811, "order": 9, "hidden": true, "test": true, "descHash": 4150957047 },
{ "subId": 30803, "order": 10, "descHash": 3829272239 },
{ "subId": 30814, "order": 11, "hidden": true, "test": true, "descHash": 2911203223 },
{ "subId": 30804, "order": 12, "descHash": 3926918687 }
]
},
{
"id": 309,
"hidden": true,
"test": true,
"titleHash": 1633048865,
"children": [
{ "subId": 30901, "order": 1, "hidden": true, "test": true, "descHash": 2918457247 },
{ "subId": 30903, "order": 2, "hidden": true, "test": true, "descHash": 1872970879 },
{ "subId": 30904, "order": 3, "hidden": true, "test": true, "descHash": 3201146311 }
]
},
{
"id": 310,
"titleHash": 3049624401,
"children": [
{ "subId": 31001, "order": 1, "descHash": 2240335847 },
{ "subId": 31002, "order": 2, "hidden": true, "descHash": 2981509407 },
{ "subId": 31003, "order": 3, "hidden": true, "descHash": 1301205263 },
{ "subId": 31004, "order": 4, "hidden": true, "descHash": 2158515743 },
{ "subId": 31005, "order": 5, "hidden": true, "descHash": 594867935 },
{ "subId": 31006, "order": 6, "hidden": true, "descHash": 2284869727 },
{ "subId": 31007, "order": 7, "hidden": true, "descHash": 850767503 },
{ "subId": 31008, "order": 8, "hidden": true, "descHash": 2187278695 }
]
},
{
"id": 311,
"hidden": true,
"test": true,
"titleHash": 3089746017,
"children": [{ "subId": 31101, "order": 1, "hidden": true, "test": true, "descHash": 486980247 }]
},
{
"id": 312,
"hidden": true,
"test": true,
"titleHash": 4282850473,
"children": [{ "subId": 31201, "order": 1, "hidden": true, "test": true, "descHash": 2839501271 }]
},
{
"id": 318,
"hidden": true,
"titleHash": 3810169769,
"children": [
{ "subId": 31801, "order": 1, "hidden": true, "descHash": 3287132415 },
{ "subId": 31802, "order": 2, "hidden": true, "descHash": 1627811743 }
]
},
{
"id": 348,
"hidden": true,
"titleHash": 2026386625,
"children": [
{ "subId": 34800, "order": 1, "hidden": true },
{ "subId": 34801, "order": 2, "hidden": true },
{ "subId": 34802, "order": 3, "hidden": true },
{ "subId": 34803, "order": 4, "hidden": true },
{ "subId": 34804, "order": 5, "hidden": true },
{ "subId": 34805, "order": 6, "hidden": true },
{ "subId": 34806, "order": 7, "hidden": true },
{ "subId": 34807, "order": 8, "hidden": true },
{ "subId": 34808, "order": 9, "hidden": true },
{ "subId": 34809, "order": 10, "hidden": true },
{ "subId": 34810, "order": 11, "hidden": true },
{ "subId": 34811, "order": 12, "hidden": true },
{ "subId": 34812, "order": 13, "hidden": true },
{ "subId": 34813, "order": 14, "hidden": true },
{ "subId": 34814, "order": 15, "hidden": true },
{ "subId": 34815, "order": 16, "hidden": true },
{ "subId": 34816, "order": 17, "hidden": true },
{ "subId": 34817, "order": 18, "hidden": true }
]
},
{
"id": 349,
"hidden": true,
"titleHash": 1930920657,
"children": [
{ "subId": 34900, "order": 1, "hidden": true },
{ "subId": 34901, "order": 2, "hidden": true },
{ "subId": 34902, "order": 3, "hidden": true },
{ "subId": 34903, "order": 4, "hidden": true },
{ "subId": 34904, "order": 5, "hidden": true },
{ "subId": 34905, "order": 6, "hidden": true },
{ "subId": 34906, "order": 7, "hidden": true },
{ "subId": 34907, "order": 8, "hidden": true },
{ "subId": 34908, "order": 9, "hidden": true },
{ "subId": 34909, "order": 10, "hidden": true },
{ "subId": 34910, "order": 11, "hidden": true },
{ "subId": 34911, "order": 12, "hidden": true },
{ "subId": 34912, "order": 13, "hidden": true },
{ "subId": 34913, "order": 14, "hidden": true }
]
},
{
"id": 350,
"hidden": true,
"titleHash": 2434547969,
"children": [{ "subId": 35001, "order": 1, "hidden": true, "descHash": 1131023927 }]
},
{
"id": 351,
"titleHash": 597412161,
"children": [
{ "subId": 35104, "order": 1, "hidden": true },
{ "subId": 35100, "order": 2, "descHash": 573649119 },
{ "subId": 35107, "order": 3, "hidden": true },
{ "subId": 35101, "order": 4, "descHash": 3236261599 },
{ "subId": 35106, "order": 5, "descHash": 3658908327 },
{ "subId": 35105, "order": 6, "descHash": 4073332223 },
{ "subId": 35103, "order": 7, "hidden": true },
{ "subId": 35102, "order": 8, "descHash": 1403459271 }
]
},
{
"id": 352,
"titleHash": 1595243881,
"children": [
{ "subId": 35200, "order": 1, "descHash": 2150334359 },
{ "subId": 35201, "order": 2, "descHash": 3934520839 },
{ "subId": 35202, "order": 3, "descHash": 167165543 },
{ "subId": 35203, "order": 4, "descHash": 2630461079 },
{ "subId": 35204, "order": 5, "descHash": 1866107263 },
{ "subId": 35205, "order": 6, "hidden": true, "descHash": 966870527 }
]
},
{
"id": 353,
"titleHash": 3070624785,
"children": [
{ "subId": 35301, "order": 1, "descHash": 2576534423 },
{ "subId": 35312, "order": 2, "hidden": true, "descHash": 2391463783 },
{ "subId": 35302, "order": 3, "descHash": 3726907551 },
{ "subId": 35309, "order": 4, "descHash": 238374919 },
{ "subId": 35303, "order": 5, "descHash": 753896439 },
{ "subId": 35310, "order": 6, "descHash": 1633501991 },
{ "subId": 35304, "order": 7, "descHash": 2035326023 },
{ "subId": 35311, "order": 8, "descHash": 3635228655 }
]
},
{
"id": 354,
"titleHash": 641240337,
"children": [
{ "subId": 35401, "order": 1, "descHash": 2564565335 },
{ "subId": 35402, "order": 2, "descHash": 4086525815 },
{ "subId": 35404, "order": 3, "descHash": 3709841279 },
{ "subId": 35405, "order": 4, "hidden": true, "descHash": 669959295 },
{ "subId": 35403, "order": 5, "descHash": 1527153159 }
]
},
{
"id": 355,
"titleHash": 1760868089,
"children": [
{ "subId": 35501, "order": 1, "descHash": 1480972647 },
{ "subId": 35502, "order": 2, "descHash": 3003853399 },
{ "subId": 35503, "order": 3, "descHash": 2752259839 },
{ "subId": 35504, "order": 4, "descHash": 2764279735 },
{ "subId": 35505, "order": 5, "descHash": 4123189991 }
]
},
{
"id": 356,
"titleHash": 278941721,
"children": [
{ "subId": 35601, "order": 1, "descHash": 1893186071 },
{ "subId": 35602, "order": 2, "hidden": true, "test": true, "descHash": 1567184279 },
{ "subId": 35603, "order": 3, "descHash": 645974095 },
{ "subId": 35604, "order": 4, "descHash": 3380646159 },
{ "subId": 35605, "order": 5, "hidden": true, "test": true, "descHash": 1471203431 },
{ "subId": 35606, "order": 6, "descHash": 1752137135 }
]
},
{
"id": 357,
"titleHash": 4246098801,
"children": [
{ "subId": 35721, "order": 1, "hidden": true, "test": true, "descHash": 401722951 },
{ "subId": 35722, "order": 2, "descHash": 3668563551 },
{ "subId": 35725, "order": 3, "hidden": true, "test": true, "descHash": 1903335655 },
{ "subId": 35723, "order": 4, "hidden": true, "test": true, "descHash": 2746556759 },
{ "subId": 35724, "order": 5, "descHash": 3082111767 }
]
},
{
"id": 358,
"titleHash": 4251075033,
"children": [
{ "subId": 35800, "order": 1, "hidden": true, "test": true, "descHash": 2056537895 },
{ "subId": 35801, "order": 2, "descHash": 2846281583 },
{ "subId": 35802, "order": 3, "descHash": 1519184903 }
]
},
{
"id": 359,
"hidden": true,
"test": true,
"titleHash": 370503217,
"children": [
{ "subId": 35901, "order": 1, "hidden": true, "test": true, "descHash": 1736465287 },
{ "subId": 35902, "order": 2, "hidden": true, "test": true, "descHash": 206764287 },
{ "subId": 35903, "order": 3, "hidden": true, "test": true, "descHash": 4126557215 },
{ "subId": 35904, "order": 4, "hidden": true, "test": true, "descHash": 969515567 }
]
},
{
"id": 360,
"titleHash": 1478804457,
"children": [
{ "subId": 36001, "order": 1, "descHash": 4087620839 },
{ "subId": 36003, "order": 3, "descHash": 2320130263 },
{ "subId": 36004, "order": 4, "descHash": 4031532871 },
{ "subId": 36005, "order": 5, "descHash": 1589495903 }
]
},
{
"id": 361,
"hidden": true,
"titleHash": 3210914585,
"children": [
{ "subId": 36100, "order": 1, "hidden": true },
{ "subId": 36101, "order": 2, "hidden": true }
]
},
{ "id": 362, "hidden": true, "titleHash": 2584536633, "children": [{ "subId": 36203, "order": 1, "hidden": true }] },
{
"id": 363,
"hidden": true,
"test": true,
"titleHash": 411236993,
"children": [{ "subId": 36301, "order": 1, "hidden": true }]
},
{
"id": 370,
"titleHash": 2826605337,
"children": [
{ "subId": 37001, "order": 1, "descHash": 984138423 },
{ "subId": 37002, "order": 2, "descHash": 1235401567 },
{ "subId": 37004, "order": 3, "descHash": 556300975 },
{ "subId": 37005, "order": 4, "descHash": 3633474671 },
{ "subId": 37003, "order": 5, "hidden": true, "test": true, "descHash": 411942639 }
]
},
{
"id": 371,
"titleHash": 500475441,
"children": [
{ "subId": 37101, "order": 1, "descHash": 3416483463 },
{ "subId": 37102, "order": 2, "descHash": 1240324911 },
{ "subId": 37103, "order": 3, "descHash": 3729363975 },
{ "subId": 37104, "order": 4, "descHash": 3590781431 },
{ "subId": 37105, "order": 5, "descHash": 3045757791 },
{ "subId": 37106, "order": 6, "descHash": 3873422671 },
{ "subId": 37107, "order": 7, "descHash": 2671945279 },
{ "subId": 37108, "order": 8, "descHash": 3201278239 },
{ "subId": 37109, "order": 9, "descHash": 2437026911 },
{ "subId": 37110, "order": 10, "descHash": 2829298135 },
{ "subId": 37111, "order": 11, "descHash": 859878951 },
{ "subId": 37112, "order": 12, "descHash": 658779551 },
{ "subId": 37113, "order": 13, "descHash": 4087922335 },
{ "subId": 37114, "order": 14, "hidden": true, "test": true, "descHash": 1536121015 },
{ "subId": 37115, "order": 15, "hidden": true, "test": true, "descHash": 2565408671 }
]
},
{
"id": 372,
"titleHash": 2546023913,
"children": [
{ "subId": 37201, "order": 1, "descHash": 359632807 },
{ "subId": 37202, "order": 2, "descHash": 899249471 },
{ "subId": 37203, "order": 3, "descHash": 1832772295 }
]
},
{
"id": 373,
"titleHash": 949761097,
"children": [
{ "subId": 37301, "order": 1, "descHash": 773251119 },
{ "subId": 37302, "order": 2, "descHash": 2960338583 },
{ "subId": 37303, "order": 3, "descHash": 1791029543 },
{ "subId": 37304, "order": 4, "descHash": 2923595407 }
]
},
{
"id": 374,
"titleHash": 2683990361,
"children": [
{ "subId": 37408, "order": 1, "hidden": true, "test": true, "descHash": 1400623775 },
{ "subId": 37407, "order": 2, "descHash": 580310471 },
{ "subId": 37401, "order": 3, "descHash": 3618629879 },
{ "subId": 37402, "order": 4, "descHash": 3000193111 },
{ "subId": 37403, "order": 5, "hidden": true, "descHash": 2861193455 },
{ "subId": 37404, "order": 6, "descHash": 1236060895 },
{ "subId": 37405, "order": 7, "hidden": true, "descHash": 4214610471 },
{ "subId": 37406, "order": 8, "descHash": 4274057759 }
]
},
{
"id": 375,
"titleHash": 1044015961,
"children": [
{ "subId": 37501, "order": 1, "descHash": 3501063943 },
{ "subId": 37502, "order": 2, "descHash": 914354047 },
{ "subId": 37503, "order": 3, "descHash": 648719679 },
{ "subId": 37504, "order": 4, "hidden": true, "descHash": 1556817527 },
{ "subId": 37505, "order": 5, "hidden": true, "descHash": 2981149631 },
{ "subId": 37506, "order": 6, "hidden": true, "test": true, "descHash": 2974836799 },
{ "subId": 37507, "order": 7, "hidden": true, "descHash": 4156193663 }
]
},
{
"id": 376,
"titleHash": 2512702433,
"children": [
{ "subId": 37601, "order": 1, "descHash": 4056705575 },
{ "subId": 37602, "order": 2, "descHash": 1721371527 },
{ "subId": 37603, "order": 3, "hidden": true, "test": true, "descHash": 3574689671 },
{ "subId": 37604, "order": 4, "descHash": 2005605039 },
{ "subId": 37605, "order": 5, "descHash": 1810506007 },
{ "subId": 37606, "order": 6, "descHash": 3333731143 },
{ "subId": 37607, "order": 7, "hidden": true, "test": true, "descHash": 145332607 },
{ "subId": 37608, "order": 8, "descHash": 4168627359 }
]
},
{
"id": 377,
"titleHash": 2943776345,
"children": [
{ "subId": 37701, "order": 1, "descHash": 266979951 },
{ "subId": 37702, "order": 2, "hidden": true, "descHash": 2785659199 },
{ "subId": 37703, "order": 3, "descHash": 1644062951 },
{ "subId": 37704, "order": 4, "descHash": 2959174615 },
{ "subId": 37705, "order": 5, "descHash": 2810238695 },
{ "subId": 37706, "order": 6, "descHash": 1248003967 }
]
},
{
"id": 379,
"titleHash": 248114793,
"children": [
{ "subId": 37901, "order": 1, "descHash": 2594881711 },
{ "subId": 37902, "order": 2, "descHash": 145080711 },
{ "subId": 37903, "order": 3, "descHash": 742669735 },
{ "subId": 37904, "order": 4, "descHash": 1594139127 }
]
},
{
"id": 380,
"titleHash": 2383852777,
"children": [
{ "subId": 38001, "order": 1, "descHash": 249899831 },
{ "subId": 38002, "order": 2, "descHash": 1035206095 },
{ "subId": 38003, "order": 3, "descHash": 304518935 },
{ "subId": 38004, "order": 4, "hidden": true, "test": true, "descHash": 4092135879 }
]
},
{
"id": 381,
"titleHash": 396979777,
"children": [
{ "subId": 38101, "order": 1, "descHash": 3708220407 },
{ "subId": 38102, "order": 2, "descHash": 1668763823 },
{ "subId": 38103, "order": 3, "descHash": 872511127 },
{ "subId": 38104, "order": 4, "descHash": 1579327743 },
{ "subId": 38105, "order": 5, "hidden": true, "test": true, "descHash": 1671128983 }
]
},
{
"id": 382,
"titleHash": 2040928209,
"children": [
{ "subId": 38201, "order": 1, "descHash": 2955011271 },
{ "subId": 38202, "order": 2, "descHash": 2074972271 },
{ "subId": 38203, "order": 3, "hidden": true, "test": true, "descHash": 1109766735 }
]
},
{
"id": 383,
"titleHash": 3395488209,
"children": [
{ "subId": 38301, "order": 1, "descHash": 3476920543 },
{ "subId": 38302, "order": 2, "descHash": 1927513367 },
{ "subId": 38303, "order": 3, "descHash": 2219058455 },
{ "subId": 38304, "order": 4, "hidden": true, "test": true, "descHash": 1098076431 }
]
},
{
"id": 384,
"titleHash": 1797437065,
"children": [
{ "subId": 38401, "order": 1, "hidden": true, "test": true, "descHash": 829836719 },
{ "subId": 38402, "order": 2, "descHash": 1901607839 },
{ "subId": 38403, "order": 3, "descHash": 1300964095 },
{ "subId": 38404, "order": 4, "hidden": true, "test": true, "descHash": 3407223151 },
{ "subId": 38405, "order": 5, "hidden": true, "test": true, "descHash": 135631271 },
{ "subId": 38406, "order": 6, "hidden": true, "test": true, "descHash": 3534475631 }
]
},
{
"id": 388,
"titleHash": 974487489,
"children": [
{ "subId": 38806, "order": 1, "descHash": 2741855983 },
{ "subId": 38801, "order": 2, "hidden": true, "test": true, "descHash": 408228863 },
{ "subId": 38802, "order": 3, "descHash": 106814807 },
{ "subId": 38805, "order": 4, "hidden": true, "test": true, "descHash": 2614952327 },
{ "subId": 38803, "order": 5, "descHash": 3346504911 },
{ "subId": 38804, "order": 6, "hidden": true, "test": true, "descHash": 4179967055 }
]
},
{
"id": 389,
"titleHash": 879821785,
"children": [
{ "subId": 38901, "order": 1, "hidden": true, "test": true, "descHash": 1795075375 },
{ "subId": 38902, "order": 2, "descHash": 1934281223 },
{ "subId": 38903, "order": 3, "hidden": true, "test": true, "descHash": 1960261087 },
{ "subId": 38909, "order": 4, "descHash": 1805490135 },
{ "subId": 38907, "order": 5, "descHash": 4027503167 },
{ "subId": 38904, "order": 6, "descHash": 1061926415 },
{ "subId": 38910, "order": 7, "descHash": 2147743935 },
{ "subId": 38908, "order": 8, "descHash": 616295999 },
{ "subId": 38905, "order": 9, "descHash": 2236028271 },
{ "subId": 38906, "order": 10, "hidden": true, "test": true, "descHash": 2023645223 }
]
},
{
"id": 390,
"titleHash": 1941522521,
"children": [
{ "subId": 39003, "order": 1, "descHash": 1835230111 },
{ "subId": 39004, "order": 2, "descHash": 2759022175 },
{ "subId": 39005, "order": 3, "descHash": 161132647 },
{ "subId": 39006, "order": 4, "descHash": 859149535 },
{ "subId": 39007, "order": 5, "descHash": 847968335 },
{ "subId": 39008, "order": 6, "hidden": true, "test": true, "descHash": 256415303 },
{ "subId": 39009, "order": 7, "hidden": true, "test": true, "descHash": 845869743 }
]
},
{
"id": 393,
"titleHash": 1520658585,
"children": [
{ "subId": 39301, "order": 1, "descHash": 3474298871 },
{ "subId": 39302, "order": 2, "descHash": 1199618135 },
{ "subId": 39303, "order": 3, "hidden": true, "test": true, "descHash": 286588839 }
]
},
{
"id": 394,
"titleHash": 1906853201,
"children": [
{ "subId": 39401, "order": 1, "descHash": 681904983 },
{ "subId": 39404, "order": 2, "descHash": 26368015 },
{ "subId": 39402, "order": 3, "descHash": 3536910263 },
{ "subId": 39403, "order": 4, "hidden": true, "test": true, "descHash": 1511303543 },
{ "subId": 39405, "order": 5, "hidden": true, "test": true, "descHash": 2787794103 }
]
},
{
"id": 396,
"titleHash": 4079397641,
"children": [
{ "subId": 39601, "order": 1, "hidden": true, "test": true, "descHash": 3582722255 },
{ "subId": 39602, "order": 2, "descHash": 4009287327 },
{ "subId": 39606, "order": 3, "hidden": true, "test": true, "descHash": 2753842151 },
{ "subId": 39605, "order": 4, "descHash": 4003668407 },
{ "subId": 39604, "order": 5, "descHash": 3666608975 },
{ "subId": 39607, "order": 6, "hidden": true, "test": true, "descHash": 1533382079 }
]
},
{
"id": 397,
"titleHash": 2779564865,
"children": [
{ "subId": 39701, "order": 1, "descHash": 619580703 },
{ "subId": 39702, "order": 2, "descHash": 3821761479 },
{ "subId": 39705, "order": 3, "hidden": true, "test": true, "descHash": 3803636791 },
{ "subId": 39703, "order": 4, "descHash": 410566151 },
{ "subId": 39704, "order": 5, "hidden": true, "test": true, "descHash": 1144244215 }
]
},
{
"id": 398,
"titleHash": 2024054705,
"children": [
{ "subId": 39810, "order": 1, "hidden": true, "test": true, "descHash": 1293032679 },
{ "subId": 39812, "order": 2, "descHash": 2540037839 },
{ "subId": 39814, "order": 3, "hidden": true, "test": true, "descHash": 2315571679 },
{ "subId": 39811, "order": 4, "descHash": 2563165719 },
{ "subId": 39801, "order": 5, "descHash": 1306737215 },
{ "subId": 39802, "order": 6, "descHash": 3623462327 },
{ "subId": 39803, "order": 7, "descHash": 2418392567 },
{ "subId": 39804, "order": 8, "descHash": 130177639 },
{ "subId": 39805, "order": 9, "hidden": true, "test": true, "descHash": 1646978055 },
{ "subId": 39806, "order": 10, "hidden": true, "test": true, "descHash": 1037675503 },
{ "subId": 39807, "order": 11, "descHash": 3763857247 },
{ "subId": 39815, "order": 12, "hidden": true, "test": true, "descHash": 610448191 },
{ "subId": 39808, "order": 13, "descHash": 3754284999 },
{ "subId": 39816, "order": 14, "hidden": true, "test": true, "descHash": 3985481119 },
{ "subId": 39813, "order": 15, "hidden": true, "test": true, "descHash": 4034921759 },
{ "subId": 39809, "order": 16, "descHash": 2298192135 }
]
},
{
"id": 399,
"hidden": true,
"test": true,
"titleHash": 332268625,
"children": [{ "subId": 39901, "order": 1, "hidden": true, "test": true, "descHash": 3451845839 }]
},
{
"id": 400,
"hidden": true,
"test": true,
"titleHash": 2751309041,
"children": [{ "subId": 40001, "order": 1, "hidden": true, "test": true, "descHash": 2956522047 }]
},
{
"id": 407,
"unreleased": true,
"titleHash": 1355891481,
"children": [
{ "subId": 40701, "order": 1, "hidden": true },
{ "subId": 40702, "order": 2 },
{ "subId": 40703, "order": 3 },
{ "subId": 40704, "order": 4 },
{ "subId": 40705, "order": 5, "hidden": true }
]
},
{
"id": 408,
"unreleased": true,
"titleHash": 352561513,
"children": [
{ "subId": 40801, "order": 1, "hidden": true },
{ "subId": 40802, "order": 2, "hidden": true },
{ "subId": 40803, "order": 3, "hidden": true },
{ "subId": 40804, "order": 4, "hidden": true },
{ "subId": 40805, "order": 5, "hidden": true },
{ "subId": 40806, "order": 6, "hidden": true },
{ "subId": 40807, "order": 7 },
{ "subId": 40808, "order": 8 },
{ "subId": 40809, "order": 9 },
{ "subId": 40810, "order": 10, "hidden": true }
]
},
{
"id": 409,
"unreleased": true,
"titleHash": 3330881769,
"children": [
{ "subId": 40901, "order": 1, "hidden": true },
{ "subId": 40902, "order": 2, "hidden": true },
{ "subId": 40903, "order": 3 },
{ "subId": 40904, "order": 4 },
{ "subId": 40905, "order": 5, "hidden": true }
]
},
{
"id": 416,
"hidden": true,
"titleHash": 1838950985,
"children": [
{ "subId": 41601, "order": 1, "hidden": true },
{ "subId": 41602, "order": 2, "hidden": true },
{ "subId": 41603, "order": 3, "hidden": true }
]
},
{
"id": 418,
"titleHash": 2679727785,
"children": [
{ "subId": 41801, "order": 1, "hidden": true, "descHash": 2964063223 },
{ "subId": 41802, "order": 2, "descHash": 1786317703 },
{ "subId": 41803, "order": 3, "descHash": 1296562183 },
{ "subId": 41804, "order": 4, "hidden": true, "descHash": 3995446103 },
{ "subId": 41805, "order": 5, "descHash": 1992718575 },
{ "subId": 41806, "order": 6, "descHash": 186663215 }
]
},
{
"id": 419,
"titleHash": 3792806609,
"children": [{ "subId": 41901, "order": 1, "hidden": true, "descHash": 966746287 }]
},
{
"id": 420,
"titleHash": 128510673,
"children": [{ "subId": 42001, "order": 1, "hidden": true, "descHash": 3674775839 }]
},
{
"id": 421,
"hidden": true,
"titleHash": 2865925609,
"children": [
{ "subId": 42101, "order": 1, "hidden": true, "test": true, "descHash": 858269911 },
{ "subId": 42102, "order": 2, "hidden": true, "test": true, "descHash": 1572554711 },
{ "subId": 42103, "order": 3, "hidden": true, "test": true, "descHash": 2027104887 },
{ "subId": 42104, "order": 4, "hidden": true, "test": true, "descHash": 4217223023 }
]
},
{
"id": 422,
"titleHash": 320147489,
"children": [{ "subId": 42201, "order": 1, "hidden": true, "descHash": 3722443367 }]
},
{
"id": 423,
"titleHash": 171490209,
"children": [
{ "subId": 42301, "order": 1, "hidden": true, "descHash": 605151255 },
{ "subId": 42302, "order": 1, "descHash": 1730915959 }
]
},
{
"id": 424,
"unreleased": true,
"titleHash": 3021578617,
"children": [
{ "subId": 42401, "order": 1, "hidden": true, "test": true, "unreleased": true, "descHash": 3359315247 },
{ "subId": 42402, "order": 2 },
{ "subId": 42403, "order": 3 },
{ "subId": 42406, "order": 4 },
{ "subId": 42407, "order": 5 },
{ "subId": 42404, "order": 6 },
{ "subId": 42405, "order": 7 }
]
},
{
"id": 425,
"unreleased": true,
"titleHash": 1029454569,
"children": [
{ "subId": 42501, "order": 1, "hidden": true, "test": true, "unreleased": true, "descHash": 3831557271 },
{ "subId": 42502, "order": 2, "test": true, "unreleased": true, "descHash": 3824917703 },
{ "subId": 42503, "order": 3, "test": true, "unreleased": true, "descHash": 237560559 },
{ "subId": 42504, "order": 4, "test": true, "unreleased": true, "descHash": 1537116695 }
]
},
{
"id": 426,
"unreleased": true,
"titleHash": 2870703041,
"children": [
{ "subId": 42601, "order": 1, "hidden": true, "test": true, "unreleased": true, "descHash": 418570359 },
{ "subId": 42602, "order": 2, "hidden": true, "test": true, "unreleased": true, "descHash": 1787063767 }
]
},
{
"id": 427,
"titleHash": 2100408553,
"children": [
{ "subId": 42709, "order": 1, "descHash": 2178051783 },
{ "subId": 42701, "order": 2, "descHash": 4285958007 },
{ "subId": 42702, "order": 3, "descHash": 3311919407 },
{ "subId": 42703, "order": 4, "descHash": 3836874663 },
{ "subId": 42704, "order": 5, "descHash": 548427495 },
{ "subId": 42705, "order": 6, "descHash": 996370375 },
{ "subId": 42706, "order": 7, "descHash": 273505103 },
{ "subId": 42707, "order": 8, "descHash": 4061964751 },
{ "subId": 42708, "order": 9, "hidden": true, "descHash": 863049199 }
]
},
{
"id": 428,
"unreleased": true,
"titleHash": 1471032225,
"children": [
{ "subId": 42801, "order": 1, "hidden": true, "test": true, "unreleased": true, "descHash": 72431063 },
{ "subId": 42802, "order": 2, "test": true, "unreleased": true, "descHash": 1303840271 },
{ "subId": 42803, "order": 3, "test": true, "unreleased": true, "descHash": 3904820751 }
]
},
{
"id": 451,
"titleHash": 2143930321,
"children": [
{ "subId": 45109, "order": 1, "hidden": true, "descHash": 1626575127 },
{ "subId": 45101, "order": 2, "descHash": 1579011519 },
{ "subId": 45102, "order": 3, "hidden": true, "descHash": 1457676303 },
{ "subId": 45107, "order": 4, "descHash": 208368079 },
{ "subId": 45103, "order": 5, "descHash": 2949566159 },
{ "subId": 45104, "order": 6, "descHash": 1679352431 },
{ "subId": 45105, "order": 7, "descHash": 2318634055 },
{ "subId": 45108, "order": 8, "hidden": true, "descHash": 3767998991 },
{ "subId": 45106, "order": 9, "descHash": 1139828983 }
]
},
{
"id": 452,
"titleHash": 3789883025,
"children": [
{ "subId": 45201, "order": 1, "descHash": 3565727623 },
{ "subId": 45202, "order": 2, "descHash": 11348943 },
{ "subId": 45203, "order": 3, "descHash": 1908687823 },
{ "subId": 45206, "order": 4, "hidden": true, "descHash": 10720951 },
{ "subId": 45204, "order": 5, "descHash": 289416967 },
{ "subId": 45205, "order": 6, "descHash": 4149357943 }
]
},
{
"id": 453,
"titleHash": 2458889641,
"children": [
{ "subId": 45301, "order": 1, "descHash": 406679687 },
{ "subId": 45302, "order": 2, "descHash": 410826495 },
{ "subId": 45307, "order": 3, "hidden": true, "descHash": 2541381839 },
{ "subId": 45303, "order": 4, "descHash": 2685981935 },
{ "subId": 45308, "order": 5, "hidden": true, "descHash": 520773367 },
{ "subId": 45304, "order": 6, "descHash": 1606039439 },
{ "subId": 45305, "order": 7, "hidden": true, "descHash": 715941063 },
{ "subId": 45306, "order": 8, "descHash": 140982135 }
]
},
{
"id": 454,
"titleHash": 263672017,
"children": [
{ "subId": 45407, "order": 1, "descHash": 2961770687 },
{ "subId": 45401, "order": 2, "descHash": 1840859031 },
{ "subId": 45410, "order": 3, "descHash": 2923952599 },
{ "subId": 45411, "order": 4, "descHash": 1386322847 },
{ "subId": 45412, "order": 5, "descHash": 1349771479 },
{ "subId": 45413, "order": 6, "descHash": 1681941495 },
{ "subId": 45414, "order": 7, "descHash": 3545644623 },
{ "subId": 45408, "order": 8, "hidden": true, "descHash": 158444983 },
{ "subId": 45409, "order": 9, "hidden": true, "descHash": 3705340031 },
{ "subId": 45415, "order": 10, "descHash": 221357671 },
{ "subId": 45402, "order": 11, "descHash": 3632437023 },
{ "subId": 45403, "order": 12, "descHash": 3590726247 },
{ "subId": 45404, "order": 13, "hidden": true, "descHash": 3724033575 },
{ "subId": 45416, "order": 14, "descHash": 4289457159 },
{ "subId": 45417, "order": 15, "hidden": true, "descHash": 3289840983 },
{ "subId": 45405, "order": 16, "descHash": 1880263399 },
{ "subId": 45406, "order": 17, "hidden": true, "descHash": 756934943 }
]
},
{
"id": 461,
"titleHash": 3393509625,
"children": [
{ "subId": 46101, "order": 1, "descHash": 1941951351 },
{ "subId": 46110, "order": 2, "hidden": true },
{ "subId": 46102, "order": 3, "descHash": 2198855687 },
{ "subId": 46109, "order": 4, "hidden": true, "test": true, "descHash": 4261651839 },
{ "subId": 46103, "order": 5, "descHash": 1715428255 },
{ "subId": 46104, "order": 6, "hidden": true, "test": true, "descHash": 1569813663 },
{ "subId": 46105, "order": 7, "hidden": true, "test": true, "descHash": 3333881911 },
{ "subId": 46106, "order": 8, "hidden": true, "test": true, "descHash": 1924670719 },
{ "subId": 46107, "order": 9, "descHash": 3397250423 }
]
},
{
"id": 462,
"titleHash": 1127843489,
"children": [
{ "subId": 46201, "order": 1, "descHash": 2897854543 },
{ "subId": 46202, "order": 2, "descHash": 2817638999 },
{ "subId": 46203, "order": 3, "descHash": 2877653055 },
{ "subId": 46204, "order": 4, "hidden": true, "test": true, "descHash": 3252908895 },
{ "subId": 46210, "order": 5, "hidden": true, "test": true, "descHash": 1882401175 },
{ "subId": 46205, "order": 6, "descHash": 4164179863 },
{ "subId": 46208, "order": 7, "descHash": 4049784311 },
{ "subId": 46206, "order": 8, "hidden": true, "test": true, "descHash": 4045182879 },
{ "subId": 46207, "order": 9, "descHash": 3320595623 },
{ "subId": 46209, "order": 10, "descHash": 805821951 }
]
},
{
"id": 463,
"titleHash": 1990456193,
"children": [
{ "subId": 46300, "order": 1, "descHash": 1550219335 },
{ "subId": 46301, "order": 2, "descHash": 2541189463 },
{ "subId": 46307, "order": 3, "hidden": true, "test": true, "descHash": 3825482823 },
{ "subId": 46302, "order": 4, "descHash": 998270583 },
{ "subId": 46303, "order": 5, "hidden": true, "test": true, "descHash": 2176075023 },
{ "subId": 46304, "order": 6, "descHash": 2478269831 },
{ "subId": 46305, "order": 7, "hidden": true, "test": true, "descHash": 1488540135 },
{ "subId": 46306, "order": 8, "hidden": true, "test": true, "descHash": 1994876319 },
{ "subId": 46308, "order": 9, "hidden": true, "test": true, "descHash": 1368546351 }
]
},
{
"id": 464,
"titleHash": 1799905041,
"children": [
{ "subId": 46401, "order": 1, "descHash": 3338830815 },
{ "subId": 46402, "order": 2, "descHash": 4101074687 },
{ "subId": 46403, "order": 3, "descHash": 630445695 },
{ "subId": 46404, "order": 4, "descHash": 1801631711 },
{ "subId": 46405, "order": 5, "descHash": 3005151263 },
{ "subId": 46406, "order": 6, "descHash": 2812272199 },
{ "subId": 46407, "order": 7, "descHash": 2930275135 },
{ "subId": 46408, "order": 8, "descHash": 3733739135 },
{ "subId": 46409, "order": 9, "descHash": 2715737287 }
]
},
{
"id": 465,
"titleHash": 1750024521,
"children": [
{ "subId": 46501, "order": 1, "descHash": 1755373999 },
{ "subId": 46502, "order": 2, "descHash": 3980518943 },
{ "subId": 46503, "order": 3, "descHash": 3636706199 },
{ "subId": 46522, "order": 4, "descHash": 2250411311 },
{ "subId": 46504, "order": 5, "descHash": 2281000559 },
{ "subId": 46505, "order": 6, "descHash": 826103839 },
{ "subId": 46506, "order": 7, "descHash": 1156521503 },
{ "subId": 46507, "order": 8, "descHash": 3699073239 },
{ "subId": 46508, "order": 9, "descHash": 777569631 },
{ "subId": 46509, "order": 10, "descHash": 1167628887 },
{ "subId": 46525, "order": 11, "hidden": true, "test": true },
{ "subId": 46510, "order": 12, "descHash": 2085794143 },
{ "subId": 46514, "order": 13, "descHash": 913215031 },
{ "subId": 46515, "order": 14, "hidden": true, "test": true, "descHash": 4034895359 },
{ "subId": 46516, "order": 15, "hidden": true, "test": true, "descHash": 3917870087 },
{ "subId": 46517, "order": 16, "hidden": true, "test": true, "descHash": 2735196943 },
{ "subId": 46518, "order": 17, "hidden": true, "test": true, "descHash": 2759597215 },
{ "subId": 46519, "order": 18, "hidden": true, "test": true },
{ "subId": 46523, "order": 19, "hidden": true, "test": true },
{ "subId": 46520, "order": 20, "descHash": 2721149751 },
{ "subId": 46511, "order": 21, "descHash": 917713919 },
{ "subId": 46524, "order": 22, "descHash": 1828495151 },
{ "subId": 46512, "order": 23, "descHash": 3675358151 },
{ "subId": 46513, "order": 24, "descHash": 1405290839 },
{ "subId": 46521, "order": 25, "descHash": 2675332607 }
]
},
{
"id": 466,
"titleHash": 1620948153,
"children": [
{ "subId": 46601, "order": 1, "descHash": 2865188119 },
{ "subId": 46602, "order": 2, "descHash": 3954215311 },
{ "subId": 46603, "order": 3, "descHash": 2042266431 },
{ "subId": 46621, "order": 4, "descHash": 2486774663 },
{ "subId": 46622, "order": 5, "descHash": 3751942399 },
{ "subId": 46604, "order": 6, "descHash": 1629919871 },
{ "subId": 46605, "order": 7, "descHash": 1048923095 },
{ "subId": 46606, "order": 8, "descHash": 2959734855 },
{ "subId": 46607, "order": 9, "descHash": 1640506247 },
{ "subId": 46608, "order": 10, "descHash": 1718837183 },
{ "subId": 46609, "order": 11, "descHash": 2856577751 },
{ "subId": 46610, "order": 12, "descHash": 1417136215 },
{ "subId": 46620, "order": 13, "descHash": 3060649191 },
{ "subId": 46611, "order": 14, "descHash": 298668135 },
{ "subId": 46619, "order": 15, "hidden": true, "test": true, "descHash": 2846196807 },
{ "subId": 46612, "order": 16, "hidden": true, "descHash": 2126748183 },
{ "subId": 46625, "order": 17, "hidden": true, "test": true },
{ "subId": 46613, "order": 18, "descHash": 554762383 },
{ "subId": 46614, "order": 19, "descHash": 3550338487 },
{ "subId": 46623, "order": 20, "hidden": true, "descHash": 4249390567 },
{ "subId": 46615, "order": 21, "descHash": 24884159 },
{ "subId": 46624, "order": 22, "hidden": true, "test": true },
{ "subId": 46616, "order": 23, "descHash": 3008945863 },
{ "subId": 46617, "order": 24, "descHash": 4161986711 },
{ "subId": 46618, "order": 25, "descHash": 2085478303 }
]
},
{
"id": 467,
"titleHash": 2621545049,
"children": [
{ "subId": 46701, "order": 1, "hidden": true, "test": true, "descHash": 3093212919 },
{ "subId": 46702, "order": 2, "descHash": 3617007087 },
{ "subId": 46703, "order": 3, "descHash": 3578823407 }
]
},
{
"id": 468,
"titleHash": 3777872257,
"children": [
{ "subId": 46801, "order": 1, "hidden": true, "test": true, "descHash": 2328421759 },
{ "subId": 46802, "order": 2, "hidden": true, "test": true, "descHash": 2414078271 }
]
},
{
"id": 469,
"titleHash": 3277174689,
"children": [
{ "subId": 46901, "order": 1, "hidden": true, "test": true, "descHash": 2484957871 },
{ "subId": 46904, "order": 1, "hidden": true, "test": true, "descHash": 3402784999 },
{ "subId": 46902, "order": 2, "descHash": 3357318719 },
{ "subId": 46903, "order": 3, "descHash": 106117023 }
]
},
{
"id": 470,
"titleHash": 323429985,
"children": [
{ "subId": 47001, "order": 1, "hidden": true, "descHash": 4108312351 },
{ "subId": 47002, "order": 2, "hidden": true, "descHash": 3120834359 },
{ "subId": 47003, "order": 3, "descHash": 2654779743 },
{ "subId": 47004, "order": 4, "hidden": true, "descHash": 2379400023 }
]
},
{
"id": 471,
"hidden": true,
"titleHash": 2816513633,
"children": [
{ "subId": 47101, "order": 1, "hidden": true, "descHash": 1351851071 },
{ "subId": 47102, "order": 2, "hidden": true, "descHash": 3168155047 }
]
},
{
"id": 480,
"titleHash": 2580572529,
"children": [
{ "subId": 48005, "order": 1, "descHash": 1060061583 },
{ "subId": 48001, "order": 2, "descHash": 3317344511 },
{ "subId": 48002, "order": 3, "descHash": 3649254423 },
{ "subId": 48003, "order": 4, "descHash": 2194342463 },
{ "subId": 48004, "order": 5, "descHash": 1893467943 }
]
},
{
"id": 481,
"titleHash": 559170065,
"children": [
{ "subId": 48101, "order": 1, "descHash": 632675343 },
{ "subId": 48102, "order": 2, "hidden": true, "test": true, "descHash": 3390120327 },
{ "subId": 48103, "order": 3, "test": true, "descHash": 1727817231 },
{ "subId": 48104, "order": 4, "test": true, "descHash": 1067217975 },
{ "subId": 48105, "order": 5, "test": true, "descHash": 3002519151 },
{ "subId": 48106, "order": 6, "test": true, "descHash": 1127733575 }
]
},
{
"id": 482,
"unreleased": true,
"titleHash": 2268032617,
"children": [
{ "subId": 48201, "order": 1, "test": true, "unreleased": true, "descHash": 3682077071 },
{ "subId": 48202, "order": 2, "test": true, "unreleased": true, "descHash": 1884072087 },
{ "subId": 48203, "order": 3, "test": true, "unreleased": true, "descHash": 1221877159 },
{ "subId": 48209, "order": 4, "test": true, "unreleased": true, "descHash": 2852509615 },
{ "subId": 48207, "order": 5, "test": true, "unreleased": true, "descHash": 2830168063 },
{ "subId": 48204, "order": 6, "test": true, "unreleased": true, "descHash": 261771079 },
{ "subId": 48208, "order": 7, "test": true, "unreleased": true, "descHash": 3416879191 },
{ "subId": 48205, "order": 8, "test": true, "unreleased": true, "descHash": 2251931895 }
]
},
{
"id": 484,
"titleHash": 2989066873,
"children": [
{ "subId": 48401, "order": 1, "descHash": 3440040495 },
{ "subId": 48402, "order": 2, "descHash": 661380207 },
{ "subId": 48403, "order": 3, "descHash": 3479137487 },
{ "subId": 48404, "order": 4, "hidden": true, "test": true, "descHash": 547185543 },
{ "subId": 48405, "order": 5, "descHash": 1351686223 },
{ "subId": 48406, "order": 6, "hidden": true, "test": true, "descHash": 3887951999 },
{ "subId": 48407, "order": 7, "descHash": 397249815 },
{ "subId": 48408, "order": 8, "hidden": true, "test": true, "descHash": 2002598567 },
{ "subId": 48433, "order": 9, "hidden": true, "descHash": 2890695887 },
{ "subId": 48409, "order": 10, "hidden": true, "descHash": 4007409903 },
{ "subId": 48410, "order": 11, "hidden": true, "descHash": 1498812447 },
{ "subId": 48411, "order": 12, "hidden": true, "descHash": 1354844551 },
{ "subId": 48412, "order": 13, "hidden": true, "test": true, "descHash": 2342008879 },
{ "subId": 48413, "order": 14, "hidden": true, "test": true, "descHash": 390797887 },
{ "subId": 48414, "order": 15, "hidden": true, "test": true, "descHash": 976218975 },
{ "subId": 48424, "order": 16, "hidden": true, "descHash": 249447687 },
{ "subId": 48425, "order": 17, "hidden": true, "descHash": 1491932343 },
{ "subId": 48426, "order": 18, "hidden": true, "test": true, "descHash": 2339485687 },
{ "subId": 48427, "order": 19, "hidden": true, "test": true, "descHash": 2249870359 },
{ "subId": 48428, "order": 20, "hidden": true, "test": true, "descHash": 1464702167 },
{ "subId": 48429, "order": 21, "hidden": true, "test": true, "descHash": 4261909783 },
{ "subId": 48430, "order": 22, "hidden": true, "test": true, "descHash": 315293327 },
{ "subId": 48431, "order": 23, "descHash": 1153071895 },
{ "subId": 48432, "order": 24, "descHash": 458110559 },
{ "subId": 48415, "order": 25, "descHash": 2524321583 },
{ "subId": 48416, "order": 26, "descHash": 1513507623 },
{ "subId": 48417, "order": 27, "hidden": true, "test": true, "descHash": 845048447 },
{ "subId": 48418, "order": 28, "descHash": 1010397535 },
{ "subId": 48419, "order": 29, "descHash": 2662642319 },
{ "subId": 48420, "order": 30, "descHash": 2573038575 },
{ "subId": 48421, "order": 31, "descHash": 772516103 },
{ "subId": 48422, "order": 32, "descHash": 4273693503 },
{ "subId": 48423, "order": 33, "descHash": 2306371167 }
]
},
{
"id": 485,
"titleHash": 3974969649,
"children": [
{ "subId": 48501, "order": 1, "descHash": 2153296127 },
{ "subId": 48511, "order": 2, "descHash": 298165063 },
{ "subId": 48509, "order": 3, "descHash": 1880841991 },
{ "subId": 48512, "order": 4, "hidden": true, "test": true, "descHash": 3081484503 },
{ "subId": 48510, "order": 5, "hidden": true, "test": true, "descHash": 12897567 },
{ "subId": 48502, "order": 6, "descHash": 4220779159 },
{ "subId": 48503, "order": 7, "descHash": 3541451551 },
{ "subId": 48504, "order": 8, "descHash": 1176404559 },
{ "subId": 48505, "order": 9, "descHash": 1928452183 },
{ "subId": 48506, "order": 10, "descHash": 1628924447 },
{ "subId": 48507, "order": 11, "descHash": 2553494855 },
{ "subId": 48508, "order": 12, "descHash": 2429682903 }
]
},
{
"id": 486,
"titleHash": 2819904217,
"children": [
{ "subId": 48601, "order": 1, "descHash": 866374928 },
{ "subId": 48602, "order": 2, "descHash": 3136230904 },
{ "subId": 48603, "order": 3, "descHash": 1233269688 },
{ "subId": 48604, "order": 4, "descHash": 751711944 },
{ "subId": 48605, "order": 5, "hidden": true, "test": true, "descHash": 4248166248 },
{ "subId": 48606, "order": 6, "descHash": 2985948864 },
{ "subId": 48607, "order": 7, "hidden": true, "test": true, "descHash": 1175889648 },
{ "subId": 48608, "order": 8, "descHash": 587473088 },
{ "subId": 48609, "order": 9, "descHash": 1197396008 },
{ "subId": 48610, "order": 10, "hidden": true, "test": true, "descHash": 1948769944 },
{ "subId": 48611, "order": 11, "descHash": 3270826600 },
{ "subId": 48612, "order": 12, "descHash": 1507608872 },
{ "subId": 48613, "order": 13, "descHash": 1319814096 },
{ "subId": 48616, "order": 14, "hidden": true, "test": true, "descHash": 1063722120 },
{ "subId": 48617, "order": 15, "hidden": true, "test": true, "descHash": 2873241848 },
{ "subId": 48618, "order": 16, "hidden": true, "test": true, "descHash": 1475922080 },
{ "subId": 48614, "order": 17, "hidden": true, "test": true, "descHash": 2381012160 },
{ "subId": 48619, "order": 18, "descHash": 3080224040 },
{ "subId": 48615, "order": 19, "hidden": true, "test": true, "descHash": 2161027160 }
]
},
{
"id": 487,
"titleHash": 311886417,
"children": [
{ "subId": 48701, "order": 1, "descHash": 3479056928 },
{ "subId": 48711, "order": 2, "descHash": 4001155424 },
{ "subId": 48702, "order": 3, "descHash": 2150934432 },
{ "subId": 48704, "order": 4, "hidden": true, "test": true, "descHash": 57674248 },
{ "subId": 48705, "order": 5, "hidden": true, "test": true, "descHash": 676251608 },
{ "subId": 48706, "order": 6, "hidden": true, "test": true, "descHash": 3982333344 },
{ "subId": 48707, "order": 7, "hidden": true, "test": true, "descHash": 4100085264 },
{ "subId": 48708, "order": 8, "hidden": true, "test": true, "descHash": 1752962056 },
{ "subId": 48709, "order": 9, "hidden": true, "test": true, "descHash": 2635452680 },
{ "subId": 48712, "order": 10, "hidden": true, "test": true, "descHash": 549350216 },
{ "subId": 48710, "order": 11, "descHash": 1106119328 },
{ "subId": 48703, "order": 12, "descHash": 2332505984 },
{ "subId": 48713, "order": 13, "hidden": true, "test": true, "descHash": 1329468272 }
]
},
{
"id": 488,
"titleHash": 3877187513,
"children": [
{ "subId": 48800, "order": 1, "descHash": 4215482304 },
{ "subId": 48801, "order": 2, "descHash": 4138003040 },
{ "subId": 48802, "order": 3, "descHash": 522346432 },
{ "subId": 48804, "order": 4, "hidden": true, "test": true, "descHash": 4080551248 },
{ "subId": 48803, "order": 5, "descHash": 3993794416 }
]
},
{
"id": 489,
"titleHash": 1458314705,
"children": [
{ "subId": 48901, "order": 1, "descHash": 2707412880 },
{ "subId": 48902, "order": 2, "descHash": 2144255392 },
{ "subId": 48909, "order": 3, "hidden": true, "test": true, "descHash": 3636519824 },
{ "subId": 48903, "order": 4, "descHash": 34172712 },
{ "subId": 48910, "order": 5, "hidden": true },
{ "subId": 48911, "order": 6, "hidden": true },
{ "subId": 48905, "order": 7, "hidden": true, "test": true, "descHash": 1749837984 },
{ "subId": 48906, "order": 8, "hidden": true, "test": true, "descHash": 1754401456 },
{ "subId": 48904, "order": 9, "descHash": 1500178088 },
{ "subId": 48912, "order": 10, "hidden": true },
{ "subId": 48913, "order": 11, "hidden": true },
{ "subId": 48907, "order": 12, "hidden": true, "test": true, "descHash": 3846214488 },
{ "subId": 48908, "order": 13, "hidden": true, "test": true, "descHash": 3736288976 }
]
},
{
"id": 490,
"titleHash": 1626966721,
"children": [
{ "subId": 49001, "order": 1, "descHash": 399286312 },
{ "subId": 49002, "order": 2, "descHash": 2202319040 },
{ "subId": 49003, "order": 3, "hidden": true, "test": true, "descHash": 92742816 },
{ "subId": 49004, "order": 4, "hidden": true, "test": true, "descHash": 19895400 },
{ "subId": 49011, "order": 5, "descHash": 2979564992 },
{ "subId": 49013, "order": 6, "hidden": true, "test": true, "descHash": 1865337536 },
{ "subId": 49012, "order": 7, "hidden": true, "test": true, "descHash": 2865091608 },
{ "subId": 49005, "order": 8, "descHash": 3267586880 },
{ "subId": 49006, "order": 9, "hidden": true, "test": true, "descHash": 1043280792 },
{ "subId": 49007, "order": 10, "descHash": 3711190192 },
{ "subId": 49008, "order": 11, "descHash": 3562001056 },
{ "subId": 49009, "order": 12, "hidden": true, "test": true, "descHash": 1826002288 },
{ "subId": 49014, "order": 13, "hidden": true, "test": true, "descHash": 2788086440 },
{ "subId": 49010, "order": 14, "descHash": 72716384 },
{ "subId": 49015, "order": 15, "hidden": true }
]
},
{
"id": 491,
"hidden": true,
"titleHash": 3948500297,
"children": [
{ "subId": 49102, "order": 1, "hidden": true, "test": true },
{ "subId": 49101, "order": 2, "hidden": true, "test": true }
]
},
{
"id": 492,
"hidden": true,
"test": true,
"titleHash": 797114329,
"children": [{ "subId": 49201, "order": 1, "hidden": true, "test": true, "descHash": 1952717832 }]
},
{
"id": 500,
"hidden": true,
"unreleased": true,
"titleHash": 2822913569,
"children": [
{ "subId": 50001, "order": 1, "hidden": true },
{ "subId": 50002, "order": 2, "hidden": true },
{ "subId": 50003, "order": 3, "hidden": true },
{ "subId": 50004, "order": 4, "hidden": true },
{ "subId": 50005, "order": 5, "hidden": true },
{ "subId": 50006, "order": 6, "hidden": true },
{ "subId": 50007, "order": 7, "hidden": true },
{ "subId": 50008, "order": 8, "hidden": true },
{ "subId": 50009, "order": 9, "hidden": true },
{ "subId": 50010, "order": 10, "hidden": true },
{ "subId": 50011, "order": 11, "hidden": true },
{ "subId": 50012, "order": 12, "hidden": true }
]
},
{
"id": 501,
"hidden": true,
"unreleased": true,
"titleHash": 3263640801,
"children": [
{ "subId": 50101, "order": 1, "hidden": true },
{ "subId": 50102, "order": 2, "hidden": true },
{ "subId": 50103, "order": 3, "hidden": true },
{ "subId": 50104, "order": 4, "hidden": true },
{ "subId": 50105, "order": 5, "hidden": true },
{ "subId": 50106, "order": 6, "hidden": true },
{ "subId": 50107, "order": 7, "hidden": true },
{ "subId": 50108, "order": 8, "hidden": true },
{ "subId": 50109, "order": 9, "hidden": true },
{ "subId": 50110, "order": 10, "hidden": true },
{ "subId": 50111, "order": 11, "hidden": true },
{ "subId": 50112, "order": 12, "hidden": true },
{ "subId": 50113, "order": 13, "hidden": true },
{ "subId": 50114, "order": 14, "hidden": true },
{ "subId": 50115, "order": 15, "hidden": true },
{ "subId": 50116, "order": 16, "hidden": true },
{ "subId": 50117, "order": 17, "hidden": true },
{ "subId": 50118, "order": 18, "hidden": true },
{ "subId": 50119, "order": 19, "hidden": true }
]
},
{
"id": 502,
"hidden": true,
"unreleased": true,
"titleHash": 2619911753,
"children": [
{ "subId": 50201, "order": 1, "hidden": true },
{ "subId": 50202, "order": 2, "hidden": true },
{ "subId": 50203, "order": 3, "hidden": true },
{ "subId": 50204, "order": 4, "hidden": true },
{ "subId": 50205, "order": 5, "hidden": true },
{ "subId": 50206, "order": 6, "hidden": true },
{ "subId": 50207, "order": 7, "hidden": true },
{ "subId": 50208, "order": 8, "hidden": true },
{ "subId": 50209, "order": 9, "hidden": true },
{ "subId": 50210, "order": 10, "hidden": true },
{ "subId": 50211, "order": 11, "hidden": true },
{ "subId": 50212, "order": 12, "hidden": true },
{ "subId": 50213, "order": 13, "hidden": true },
{ "subId": 50214, "order": 14, "hidden": true }
]
},
{
"id": 503,
"hidden": true,
"unreleased": true,
"titleHash": 3194287305,
"children": [
{ "subId": 50301, "order": 1, "hidden": true },
{ "subId": 50302, "order": 2, "hidden": true },
{ "subId": 50303, "order": 3, "hidden": true },
{ "subId": 50304, "order": 4, "hidden": true },
{ "subId": 50305, "order": 5, "hidden": true },
{ "subId": 50306, "order": 6, "hidden": true },
{ "subId": 50307, "order": 7, "hidden": true },
{ "subId": 50308, "order": 8, "hidden": true },
{ "subId": 50309, "order": 9, "hidden": true },
{ "subId": 50310, "order": 10, "hidden": true },
{ "subId": 50311, "order": 11, "hidden": true },
{ "subId": 50312, "order": 12, "hidden": true },
{ "subId": 50313, "order": 13, "hidden": true },
{ "subId": 50314, "order": 14, "hidden": true },
{ "subId": 50315, "order": 15, "hidden": true },
{ "subId": 50316, "order": 16, "hidden": true },
{ "subId": 50317, "order": 17, "hidden": true },
{ "subId": 50318, "order": 18, "hidden": true },
{ "subId": 50319, "order": 19, "hidden": true }
]
},
{
"id": 504,
"hidden": true,
"unreleased": true,
"titleHash": 1942182505,
"children": [
{ "subId": 50401, "order": 1, "hidden": true },
{ "subId": 50402, "order": 2, "hidden": true },
{ "subId": 50403, "order": 3, "hidden": true },
{ "subId": 50404, "order": 4, "hidden": true },
{ "subId": 50405, "order": 5, "hidden": true },
{ "subId": 50406, "order": 6, "hidden": true },
{ "subId": 50407, "order": 7, "hidden": true },
{ "subId": 50408, "order": 8, "hidden": true },
{ "subId": 50409, "order": 9, "hidden": true },
{ "subId": 50410, "order": 10, "hidden": true },
{ "subId": 50411, "order": 11, "hidden": true },
{ "subId": 50412, "order": 12, "hidden": true },
{ "subId": 50413, "order": 13, "hidden": true },
{ "subId": 50414, "order": 14, "hidden": true },
{ "subId": 50415, "order": 15, "hidden": true },
{ "subId": 50416, "order": 16, "hidden": true },
{ "subId": 50417, "order": 17, "hidden": true },
{ "subId": 50418, "order": 18, "hidden": true },
{ "subId": 50419, "order": 19, "hidden": true },
{ "subId": 50420, "order": 20, "hidden": true },
{ "subId": 50421, "order": 21, "hidden": true },
{ "subId": 50422, "order": 22, "hidden": true }
]
},
{
"id": 505,
"hidden": true,
"titleHash": 976353401,
"children": [
{ "subId": 50501, "order": 1, "hidden": true },
{ "subId": 50502, "order": 2, "hidden": true },
{ "subId": 50503, "order": 3, "hidden": true },
{ "subId": 50504, "order": 4, "hidden": true },
{ "subId": 50505, "order": 5, "hidden": true },
{ "subId": 50506, "order": 6, "hidden": true },
{ "subId": 50507, "order": 7, "hidden": true },
{ "subId": 50508, "order": 8, "hidden": true },
{ "subId": 50509, "order": 9, "hidden": true },
{ "subId": 50510, "order": 10, "hidden": true },
{ "subId": 50511, "order": 11, "hidden": true },
{ "subId": 50512, "order": 12, "hidden": true }
]
},
{
"id": 506,
"hidden": true,
"titleHash": 4226039393,
"children": [
{ "subId": 50601, "order": 1, "hidden": true },
{ "subId": 50602, "order": 2, "hidden": true },
{ "subId": 50603, "order": 3, "hidden": true },
{ "subId": 50604, "order": 4, "hidden": true },
{ "subId": 50605, "order": 5, "hidden": true },
{ "subId": 50606, "order": 6, "hidden": true },
{ "subId": 50607, "order": 7, "hidden": true },
{ "subId": 50608, "order": 8, "hidden": true },
{ "subId": 50609, "order": 9, "hidden": true },
{ "subId": 50610, "order": 10, "hidden": true },
{ "subId": 50611, "order": 11, "hidden": true },
{ "subId": 50612, "order": 12, "hidden": true },
{ "subId": 50613, "order": 13, "hidden": true },
{ "subId": 50614, "order": 14, "hidden": true },
{ "subId": 50615, "order": 15, "hidden": true },
{ "subId": 50616, "order": 16, "hidden": true },
{ "subId": 50617, "order": 17, "hidden": true },
{ "subId": 50618, "order": 18, "hidden": true },
{ "subId": 50619, "order": 19, "hidden": true },
{ "subId": 50620, "order": 20, "hidden": true },
{ "subId": 50621, "order": 21, "hidden": true },
{ "subId": 50622, "order": 22, "hidden": true },
{ "subId": 50623, "order": 23, "hidden": true }
]
},
{
"id": 507,
"hidden": true,
"titleHash": 1680198353,
"children": [
{ "subId": 50701, "order": 1, "hidden": true },
{ "subId": 50702, "order": 2, "hidden": true },
{ "subId": 50703, "order": 3, "hidden": true },
{ "subId": 50704, "order": 4, "hidden": true },
{ "subId": 50705, "order": 5, "hidden": true },
{ "subId": 50706, "order": 6, "hidden": true },
{ "subId": 50707, "order": 7, "hidden": true },
{ "subId": 50708, "order": 8, "hidden": true },
{ "subId": 50709, "order": 9, "hidden": true },
{ "subId": 50710, "order": 10, "hidden": true },
{ "subId": 50711, "order": 11, "hidden": true },
{ "subId": 50712, "order": 12, "hidden": true },
{ "subId": 50713, "order": 13, "hidden": true },
{ "subId": 50714, "order": 14, "hidden": true },
{ "subId": 50715, "order": 15, "hidden": true },
{ "subId": 50716, "order": 16, "hidden": true },
{ "subId": 50717, "order": 17, "hidden": true },
{ "subId": 50718, "order": 18, "hidden": true }
]
},
{
"id": 508,
"hidden": true,
"titleHash": 1536242537,
"children": [
{ "subId": 50801, "order": 1, "hidden": true },
{ "subId": 50802, "order": 2, "hidden": true },
{ "subId": 50803, "order": 3, "hidden": true },
{ "subId": 50804, "order": 4, "hidden": true },
{ "subId": 50805, "order": 5, "hidden": true },
{ "subId": 50806, "order": 6, "hidden": true },
{ "subId": 50807, "order": 7, "hidden": true },
{ "subId": 50808, "order": 8, "hidden": true },
{ "subId": 50809, "order": 9, "hidden": true },
{ "subId": 50810, "order": 10, "hidden": true },
{ "subId": 50811, "order": 11, "hidden": true },
{ "subId": 50812, "order": 12, "hidden": true },
{ "subId": 50813, "order": 13, "hidden": true },
{ "subId": 50814, "order": 14, "hidden": true },
{ "subId": 50815, "order": 15, "hidden": true },
{ "subId": 50816, "order": 16, "hidden": true },
{ "subId": 50817, "order": 17, "hidden": true },
{ "subId": 50818, "order": 18, "hidden": true },
{ "subId": 50819, "order": 19, "hidden": true }
]
},
{
"id": 509,
"hidden": true,
"titleHash": 3768932345,
"children": [
{ "subId": 50901, "order": 1, "hidden": true },
{ "subId": 50902, "order": 2, "hidden": true },
{ "subId": 50903, "order": 3, "hidden": true },
{ "subId": 50904, "order": 4, "hidden": true },
{ "subId": 50905, "order": 5, "hidden": true },
{ "subId": 50906, "order": 6, "hidden": true },
{ "subId": 50907, "order": 7, "hidden": true },
{ "subId": 50908, "order": 8, "hidden": true },
{ "subId": 50909, "order": 9, "hidden": true },
{ "subId": 50910, "order": 10, "hidden": true },
{ "subId": 50911, "order": 11, "hidden": true },
{ "subId": 50912, "order": 12, "hidden": true },
{ "subId": 50913, "order": 13, "hidden": true },
{ "subId": 50914, "order": 14, "hidden": true },
{ "subId": 50915, "order": 15, "hidden": true },
{ "subId": 50916, "order": 16, "hidden": true },
{ "subId": 50917, "order": 17, "hidden": true },
{ "subId": 50918, "order": 18, "hidden": true }
]
},
{
"id": 515,
"hidden": true,
"titleHash": 3343218985,
"children": [
{ "subId": 51501, "order": 1, "hidden": true },
{ "subId": 51502, "order": 2, "hidden": true },
{ "subId": 51503, "order": 3, "hidden": true },
{ "subId": 51504, "order": 4, "hidden": true },
{ "subId": 51505, "order": 5, "hidden": true },
{ "subId": 51506, "order": 6, "hidden": true },
{ "subId": 51507, "order": 7, "hidden": true },
{ "subId": 51508, "order": 8, "hidden": true },
{ "subId": 51509, "order": 9, "hidden": true },
{ "subId": 51510, "order": 10, "hidden": true },
{ "subId": 51511, "order": 11, "hidden": true },
{ "subId": 51512, "order": 12, "hidden": true },
{ "subId": 51513, "order": 13, "hidden": true },
{ "subId": 51514, "order": 14, "hidden": true },
{ "subId": 51515, "order": 15, "hidden": true },
{ "subId": 51516, "order": 16, "hidden": true }
]
},
{
"id": 516,
"hidden": true,
"titleHash": 244668601,
"children": [
{ "subId": 51601, "order": 1, "hidden": true },
{ "subId": 51602, "order": 2, "hidden": true },
{ "subId": 51603, "order": 3, "hidden": true },
{ "subId": 51604, "order": 4, "hidden": true },
{ "subId": 51605, "order": 5, "hidden": true },
{ "subId": 51606, "order": 6, "hidden": true },
{ "subId": 51607, "order": 7, "hidden": true },
{ "subId": 51608, "order": 8, "hidden": true },
{ "subId": 51609, "order": 9, "hidden": true },
{ "subId": 51610, "order": 10, "hidden": true },
{ "subId": 51611, "order": 11, "hidden": true },
{ "subId": 51612, "order": 12, "hidden": true },
{ "subId": 51613, "order": 13, "hidden": true },
{ "subId": 51614, "order": 14, "hidden": true },
{ "subId": 51615, "order": 15, "hidden": true },
{ "subId": 51616, "order": 16, "hidden": true },
{ "subId": 51617, "order": 17, "hidden": true },
{ "subId": 51618, "order": 18, "hidden": true }
]
},
{
"id": 517,
"hidden": true,
"titleHash": 1822635529,
"children": [
{ "subId": 51701, "order": 1, "hidden": true },
{ "subId": 51702, "order": 2, "hidden": true },
{ "subId": 51703, "order": 3, "hidden": true },
{ "subId": 51704, "order": 4, "hidden": true },
{ "subId": 51705, "order": 5, "hidden": true },
{ "subId": 51706, "order": 6, "hidden": true },
{ "subId": 51707, "order": 7, "hidden": true },
{ "subId": 51708, "order": 8, "hidden": true },
{ "subId": 51709, "order": 9, "hidden": true },
{ "subId": 51710, "order": 10, "hidden": true },
{ "subId": 51711, "order": 11, "hidden": true },
{ "subId": 51712, "order": 12, "hidden": true },
{ "subId": 51713, "order": 13, "hidden": true },
{ "subId": 51714, "order": 14, "hidden": true },
{ "subId": 51715, "order": 15, "hidden": true },
{ "subId": 51716, "order": 16, "hidden": true },
{ "subId": 51717, "order": 17, "hidden": true },
{ "subId": 51718, "order": 18, "hidden": true },
{ "subId": 51719, "order": 19, "hidden": true }
]
},
{
"id": 518,
"hidden": true,
"titleHash": 182108273,
"children": [
{ "subId": 51801, "order": 1, "hidden": true },
{ "subId": 51802, "order": 2, "hidden": true },
{ "subId": 51803, "order": 3, "hidden": true },
{ "subId": 51804, "order": 4, "hidden": true },
{ "subId": 51805, "order": 5, "hidden": true },
{ "subId": 51806, "order": 6, "hidden": true },
{ "subId": 51807, "order": 7, "hidden": true },
{ "subId": 51808, "order": 8, "hidden": true },
{ "subId": 51809, "order": 9, "hidden": true },
{ "subId": 51810, "order": 10, "hidden": true },
{ "subId": 51811, "order": 11, "hidden": true },
{ "subId": 51812, "order": 12, "hidden": true },
{ "subId": 51813, "order": 13, "hidden": true },
{ "subId": 51814, "order": 14, "hidden": true },
{ "subId": 51815, "order": 15, "hidden": true },
{ "subId": 51816, "order": 16, "hidden": true },
{ "subId": 51817, "order": 17, "hidden": true },
{ "subId": 51818, "order": 18, "hidden": true }
]
},
{
"id": 519,
"hidden": true,
"titleHash": 1020965833,
"children": [
{ "subId": 51901, "order": 1, "hidden": true },
{ "subId": 51902, "order": 2, "hidden": true },
{ "subId": 51903, "order": 3, "hidden": true },
{ "subId": 51904, "order": 4, "hidden": true },
{ "subId": 51905, "order": 5, "hidden": true },
{ "subId": 51906, "order": 6, "hidden": true },
{ "subId": 51907, "order": 7, "hidden": true },
{ "subId": 51908, "order": 8, "hidden": true },
{ "subId": 51909, "order": 9, "hidden": true },
{ "subId": 51910, "order": 10, "hidden": true },
{ "subId": 51911, "order": 11, "hidden": true },
{ "subId": 51912, "order": 12, "hidden": true }
]
},
{
"id": 520,
"hidden": true,
"titleHash": 3829728761,
"children": [
{ "subId": 52001, "order": 1, "hidden": true },
{ "subId": 52002, "order": 2, "hidden": true },
{ "subId": 52003, "order": 3, "hidden": true },
{ "subId": 52004, "order": 4, "hidden": true },
{ "subId": 52005, "order": 5, "hidden": true },
{ "subId": 52006, "order": 6, "hidden": true },
{ "subId": 52007, "order": 7, "hidden": true },
{ "subId": 52008, "order": 8, "hidden": true },
{ "subId": 52009, "order": 9, "hidden": true },
{ "subId": 52010, "order": 10, "hidden": true },
{ "subId": 52011, "order": 11, "hidden": true },
{ "subId": 52012, "order": 12, "hidden": true }
]
},
{
"id": 521,
"hidden": true,
"titleHash": 1736378753,
"children": [
{ "subId": 52101, "order": 1, "hidden": true },
{ "subId": 52102, "order": 2, "hidden": true },
{ "subId": 52103, "order": 3, "hidden": true },
{ "subId": 52104, "order": 4, "hidden": true },
{ "subId": 52105, "order": 5, "hidden": true },
{ "subId": 52106, "order": 6, "hidden": true },
{ "subId": 52107, "order": 7, "hidden": true },
{ "subId": 52108, "order": 8, "hidden": true },
{ "subId": 52109, "order": 9, "hidden": true },
{ "subId": 52110, "order": 10, "hidden": true },
{ "subId": 52111, "order": 11, "hidden": true },
{ "subId": 52112, "order": 12, "hidden": true },
{ "subId": 52113, "order": 13, "hidden": true },
{ "subId": 52114, "order": 14, "hidden": true },
{ "subId": 52115, "order": 15, "hidden": true },
{ "subId": 52116, "order": 16, "hidden": true },
{ "subId": 52117, "order": 17, "hidden": true },
{ "subId": 52118, "order": 18, "hidden": true }
]
},
{
"id": 522,
"hidden": true,
"titleHash": 4291376201,
"children": [
{ "subId": 52201, "order": 1, "hidden": true },
{ "subId": 52202, "order": 2, "hidden": true },
{ "subId": 52203, "order": 3, "hidden": true },
{ "subId": 52204, "order": 4, "hidden": true },
{ "subId": 52205, "order": 5, "hidden": true },
{ "subId": 52206, "order": 6, "hidden": true },
{ "subId": 52207, "order": 7, "hidden": true },
{ "subId": 52208, "order": 8, "hidden": true },
{ "subId": 52209, "order": 9, "hidden": true },
{ "subId": 52210, "order": 10, "hidden": true },
{ "subId": 52211, "order": 11, "hidden": true },
{ "subId": 52212, "order": 12, "hidden": true },
{ "subId": 52213, "order": 13, "hidden": true },
{ "subId": 52214, "order": 14, "hidden": true },
{ "subId": 52215, "order": 15, "hidden": true },
{ "subId": 52216, "order": 16, "hidden": true },
{ "subId": 52217, "order": 17, "hidden": true }
]
},
{
"id": 523,
"hidden": true,
"titleHash": 2314928553,
"children": [
{ "subId": 52301, "order": 1, "hidden": true },
{ "subId": 52302, "order": 2, "hidden": true },
{ "subId": 52303, "order": 3, "hidden": true },
{ "subId": 52304, "order": 4, "hidden": true },
{ "subId": 52305, "order": 5, "hidden": true },
{ "subId": 52306, "order": 6, "hidden": true },
{ "subId": 52307, "order": 7, "hidden": true },
{ "subId": 52308, "order": 8, "hidden": true },
{ "subId": 52309, "order": 9, "hidden": true },
{ "subId": 52310, "order": 10, "hidden": true },
{ "subId": 52311, "order": 11, "hidden": true },
{ "subId": 52312, "order": 12, "hidden": true },
{ "subId": 52313, "order": 13, "hidden": true },
{ "subId": 52314, "order": 14, "hidden": true },
{ "subId": 52315, "order": 15, "hidden": true },
{ "subId": 52316, "order": 16, "hidden": true },
{ "subId": 52317, "order": 17, "hidden": true },
{ "subId": 52318, "order": 18, "hidden": true },
{ "subId": 52319, "order": 19, "hidden": true }
]
},
{
"id": 524,
"hidden": true,
"titleHash": 2691153161,
"children": [
{ "subId": 52401, "order": 1, "hidden": true },
{ "subId": 52402, "order": 2, "hidden": true },
{ "subId": 52403, "order": 3, "hidden": true },
{ "subId": 52404, "order": 4, "hidden": true },
{ "subId": 52405, "order": 5, "hidden": true },
{ "subId": 52406, "order": 6, "hidden": true },
{ "subId": 52407, "order": 7, "hidden": true },
{ "subId": 52408, "order": 8, "hidden": true },
{ "subId": 52409, "order": 9, "hidden": true },
{ "subId": 52410, "order": 10, "hidden": true },
{ "subId": 52411, "order": 11, "hidden": true },
{ "subId": 52412, "order": 12, "hidden": true },
{ "subId": 52413, "order": 13, "hidden": true },
{ "subId": 52414, "order": 14, "hidden": true },
{ "subId": 52415, "order": 15, "hidden": true },
{ "subId": 52416, "order": 16, "hidden": true },
{ "subId": 52417, "order": 17, "hidden": true },
{ "subId": 52418, "order": 18, "hidden": true },
{ "subId": 52419, "order": 19, "hidden": true },
{ "subId": 52420, "order": 20, "hidden": true }
]
},
{
"id": 800,
"test": true,
"unreleased": true,
"titleHash": 4157279319,
"children": [
{ "subId": 80001, "order": 1, "test": true, "unreleased": true, "descHash": 360046132 },
{ "subId": 80002, "order": 2, "test": true, "unreleased": true, "descHash": 1873944436 },
{ "subId": 80003, "order": 3, "test": true, "unreleased": true, "descHash": 810866276 },
{ "subId": 80004, "order": 4, "test": true, "unreleased": true, "descHash": 100361652 },
{ "subId": 80005, "order": 5, "test": true, "unreleased": true, "descHash": 3752976076 },
{ "subId": 80006, "order": 6, "test": true, "unreleased": true, "descHash": 1234969212 },
{ "subId": 80007, "order": 7, "test": true, "unreleased": true, "descHash": 324320164 },
{ "subId": 80008, "order": 8, "test": true, "unreleased": true, "descHash": 1390464364 },
{ "subId": 80009, "order": 9, "test": true, "unreleased": true, "descHash": 3085918164 },
{ "subId": 80010, "order": 10, "test": true, "unreleased": true, "descHash": 2413489044 },
{ "subId": 80011, "order": 11, "test": true, "unreleased": true, "descHash": 4286677156 },
{ "subId": 80012, "order": 12, "test": true, "unreleased": true, "descHash": 4175582340 },
{ "subId": 80013, "order": 13, "test": true, "unreleased": true, "descHash": 3773672068 },
{ "subId": 80014, "order": 14, "test": true, "unreleased": true, "descHash": 3823319188 },
{ "subId": 80015, "order": 15, "test": true, "unreleased": true, "descHash": 2966869732 },
{ "subId": 80016, "order": 16, "test": true, "unreleased": true, "descHash": 1270970804 },
{ "subId": 80017, "order": 17, "test": true, "unreleased": true, "descHash": 901798636 },
{ "subId": 80018, "order": 18, "test": true, "unreleased": true, "descHash": 2944319556 },
{ "subId": 80019, "order": 19, "test": true, "unreleased": true, "descHash": 1144468884 },
{ "subId": 80020, "order": 20, "test": true, "unreleased": true, "descHash": 2718284060 },
{ "subId": 80021, "order": 21, "test": true, "unreleased": true, "descHash": 1705377772 },
{ "subId": 80022, "order": 22, "test": true, "unreleased": true, "descHash": 3517588460 },
{ "subId": 80023, "order": 23, "test": true, "unreleased": true, "descHash": 259185412 },
{ "subId": 80024, "order": 24, "test": true, "unreleased": true, "descHash": 3652289068 },
{ "subId": 80025, "order": 25, "test": true, "unreleased": true, "descHash": 2065613548 },
{ "subId": 80026, "order": 26, "test": true, "unreleased": true, "descHash": 2538333652 },
{ "subId": 80027, "order": 27, "test": true, "unreleased": true, "descHash": 1552064516 },
{ "subId": 80028, "order": 28, "test": true, "unreleased": true, "descHash": 1084018780 },
{ "subId": 80029, "order": 29, "test": true, "unreleased": true, "descHash": 1314779276 },
{ "subId": 80030, "order": 30, "test": true, "unreleased": true, "descHash": 1204857092 },
{ "subId": 80031, "order": 31, "test": true, "unreleased": true, "descHash": 3719539564 }
]
},
{
"id": 990,
"test": true,
"unreleased": true,
"titleHash": 234942785,
"children": [
{ "subId": 99001, "order": 1, "test": true, "unreleased": true, "descHash": 440435327 },
{ "subId": 99002, "order": 1, "test": true, "unreleased": true, "descHash": 839340391 },
{ "subId": 99003, "order": 1, "test": true, "unreleased": true, "descHash": 1435924071 },
{ "subId": 99004, "order": 1, "test": true, "unreleased": true, "descHash": 637006399 },
{ "subId": 99005, "order": 1, "test": true, "unreleased": true, "descHash": 2575139631 },
{ "subId": 99006, "order": 1, "test": true, "unreleased": true, "descHash": 2840123023 },
{ "subId": 99007, "order": 1, "unreleased": true, "descHash": 655277111 }
]
},
{
"id": 993,
"test": true,
"unreleased": true,
"titleHash": 2670288841,
"children": [
{ "subId": 99301, "order": 1, "test": true, "unreleased": true, "descHash": 3964310503 },
{ "subId": 99302, "order": 2, "test": true, "unreleased": true, "descHash": 2981090719 },
{ "subId": 99303, "order": 3, "test": true, "unreleased": true, "descHash": 3860542551 },
{ "subId": 99304, "order": 4, "test": true, "unreleased": true, "descHash": 4176619287 }
]
},
{
"id": 994,
"test": true,
"unreleased": true,
"titleHash": 2894547313,
"children": [{ "subId": 99401, "order": 1, "test": true, "unreleased": true, "descHash": 3794773247 }]
},
{
"id": 995,
"test": true,
"unreleased": true,
"titleHash": 490252265,
"children": [
{ "subId": 99501, "order": 1, "test": true, "unreleased": true, "descHash": 177281407 },
{ "subId": 99502, "order": 2, "test": true, "unreleased": true, "descHash": 2609161927 }
]
},
{
"id": 996,
"test": true,
"unreleased": true,
"titleHash": 1903697617,
"children": [
{ "subId": 99601, "order": 1, "test": true, "unreleased": true, "descHash": 3683323503 },
{ "subId": 99602, "order": 2, "test": true, "unreleased": true, "descHash": 544559735 },
{ "subId": 99603, "order": 3, "test": true, "unreleased": true, "descHash": 2065715455 },
{ "subId": 99604, "order": 4, "test": true, "unreleased": true, "descHash": 1617499799 }
]
},
{
"id": 997,
"test": true,
"unreleased": true,
"titleHash": 3127375953,
"children": [{ "subId": 99701, "order": 1, "test": true, "unreleased": true, "descHash": 951560047 }]
},
{
"id": 998,
"test": true,
"unreleased": true,
"titleHash": 2780691993,
"children": [
{ "subId": 99801, "order": 1, "test": true, "unreleased": true, "descHash": 497343263 },
{ "subId": 99802, "order": 2, "test": true, "unreleased": true, "descHash": 1662716615 },
{ "subId": 99803, "order": 3, "test": true, "unreleased": true, "descHash": 1238825079 },
{ "subId": 99804, "order": 4, "test": true, "unreleased": true, "descHash": 3694787191 },
{ "subId": 99805, "order": 5, "test": true, "unreleased": true, "descHash": 1232109215 },
{ "subId": 99806, "order": 6, "test": true, "unreleased": true, "descHash": 2915575983 },
{ "subId": 99807, "order": 7, "test": true, "unreleased": true, "descHash": 3354740847 },
{ "subId": 99808, "order": 8, "test": true, "unreleased": true, "descHash": 957198823 },
{ "subId": 99809, "order": 9, "test": true, "unreleased": true, "descHash": 3547702463 }
]
},
{
"id": 999,
"test": true,
"unreleased": true,
"titleHash": 3695553,
"children": [
{ "subId": 99901, "order": 1, "test": true, "unreleased": true, "descHash": 3406630415 },
{ "subId": 99902, "order": 2, "test": true, "unreleased": true, "descHash": 383933495 },
{ "subId": 99903, "order": 3, "test": true, "unreleased": true, "descHash": 259325815 },
{ "subId": 99904, "order": 4, "test": true, "unreleased": true, "descHash": 72735183 },
{ "subId": 99905, "order": 5, "test": true, "unreleased": true, "descHash": 427025511 },
{ "subId": 99906, "order": 6, "test": true, "unreleased": true, "descHash": 4268321103 },
{ "subId": 99919, "order": 19, "hidden": true, "test": true, "unreleased": true, "descHash": 1769938863 },
{ "subId": 99920, "order": 20, "test": true, "unreleased": true, "descHash": 1522762247 },
{ "subId": 99921, "order": 21, "test": true, "unreleased": true, "descHash": 2503069375 },
{ "subId": 99922, "order": 22, "test": true, "unreleased": true, "descHash": 2580260191 },
{ "subId": 99923, "order": 23, "test": true, "unreleased": true, "descHash": 2244116151 }
]
},
{
"id": 1000,
"titleHash": 492421553,
"children": [
{ "subId": 100099, "order": 1, "hidden": true, "descHash": 730009758 },
{ "subId": 100098, "order": 2, "hidden": true, "descHash": 1711324566 },
{ "subId": 100000, "order": 3, "descHash": 66312846 },
{ "subId": 100001, "order": 4, "descHash": 73951502 },
{ "subId": 100002, "order": 5, "descHash": 2304184750 },
{ "subId": 100003, "order": 6, "descHash": 2771555118 },
{ "subId": 100004, "order": 7, "descHash": 4048193646 },
{ "subId": 100005, "order": 8, "hidden": true, "test": true, "descHash": 833348838 },
{ "subId": 100006, "order": 9, "hidden": true, "descHash": 4248462238 },
{ "subId": 100016, "order": 10, "hidden": true, "test": true, "descHash": 1757998254 },
{ "subId": 100007, "order": 11, "descHash": 3066403206 },
{ "subId": 100021, "order": 12, "descHash": 3779311862 },
{ "subId": 100022, "order": 13, "descHash": 2108662390 },
{ "subId": 100023, "order": 14, "hidden": true, "descHash": 1249019230 },
{ "subId": 100024, "order": 15, "hidden": true, "descHash": 1018896998 },
{ "subId": 100025, "order": 16, "hidden": true, "descHash": 435010334 },
{ "subId": 100026, "order": 17, "descHash": 1592354382 },
{ "subId": 100008, "order": 18, "descHash": 2948082982 },
{ "subId": 100015, "order": 19, "descHash": 242270662 },
{ "subId": 100009, "order": 20, "hidden": true, "test": true, "descHash": 2415559102 },
{ "subId": 100027, "order": 21, "hidden": true, "descHash": 3111176726 },
{ "subId": 100010, "order": 22, "descHash": 2485550366 },
{ "subId": 100011, "order": 23, "hidden": true, "test": true, "descHash": 4233120406 },
{ "subId": 100012, "order": 24, "hidden": true, "test": true, "descHash": 400602686 },
{ "subId": 100013, "order": 25, "descHash": 196615918 },
{ "subId": 100014, "order": 26, "descHash": 3398541654 }
]
},
{
"id": 1001,
"hidden": true,
"test": true,
"titleHash": 2046717777,
"children": [
{ "subId": 100101, "order": 1, "hidden": true, "descHash": 1528199070 },
{ "subId": 100102, "order": 2, "hidden": true, "descHash": 208067862 },
{ "subId": 100103, "order": 3, "hidden": true, "descHash": 1712104726 }
]
},
{
"id": 1002,
"titleHash": 633119625,
"children": [
{ "subId": 100201, "order": 1, "descHash": 1999835862 },
{ "subId": 100202, "order": 2, "hidden": true, "test": true, "descHash": 326479846 },
{ "subId": 100203, "order": 3, "hidden": true, "descHash": 2986185630 },
{ "subId": 100204, "order": 4, "descHash": 2625164046 },
{ "subId": 100205, "order": 5, "hidden": true, "descHash": 3471225974 }
]
},
{
"id": 1003,
"titleHash": 775143905,
"children": [
{ "subId": 100301, "order": 1, "descHash": 2206123430 },
{ "subId": 100320, "order": 2, "hidden": true, "test": true, "descHash": 23169054 },
{ "subId": 100302, "order": 3, "hidden": true, "test": true, "descHash": 1597006646 },
{ "subId": 100303, "order": 4, "descHash": 2879863678 },
{ "subId": 100319, "order": 5, "hidden": true, "test": true, "descHash": 1337930438 },
{ "subId": 100304, "order": 6, "descHash": 4148438678 },
{ "subId": 100305, "order": 7, "descHash": 2133885238 },
{ "subId": 100306, "order": 8, "descHash": 1196523278 },
{ "subId": 100307, "order": 9, "descHash": 898838862 },
{ "subId": 100308, "order": 10, "hidden": true, "descHash": 1332433406 },
{ "subId": 100309, "order": 11, "descHash": 1505947734 },
{ "subId": 100310, "order": 12, "descHash": 3003238206 },
{ "subId": 100321, "order": 13, "descHash": 4121904830 },
{ "subId": 100311, "order": 14, "descHash": 3941762502 },
{ "subId": 100312, "order": 15, "hidden": true, "descHash": 4128635134 },
{ "subId": 100313, "order": 16, "descHash": 4182208870 },
{ "subId": 100314, "order": 17, "descHash": 451622134 },
{ "subId": 100315, "order": 18, "descHash": 1931428838 },
{ "subId": 100316, "order": 19, "descHash": 1641590222 },
{ "subId": 100317, "order": 20, "descHash": 1965185366 }
]
},
{
"id": 1004,
"hidden": true,
"test": true,
"titleHash": 1271066001,
"children": [
{ "subId": 100401, "order": 1, "hidden": true, "descHash": 3050830054 },
{ "subId": 100402, "order": 2, "hidden": true, "descHash": 762456318 },
{ "subId": 100403, "order": 3, "hidden": true, "descHash": 1965115950 },
{ "subId": 100404, "order": 4, "hidden": true, "descHash": 1367498670 }
]
},
{
"id": 1005,
"hidden": true,
"test": true,
"titleHash": 2316888433,
"children": [{ "subId": 100501, "order": 1, "hidden": true, "descHash": 1257348350 }]
},
{
"id": 1006,
"hidden": true,
"test": true,
"titleHash": 1930559377,
"children": [{ "subId": 100601, "order": 1, "hidden": true, "descHash": 2796799390 }]
},
{
"id": 1007,
"hidden": true,
"test": true,
"titleHash": 357068217,
"children": [
{ "subId": 100701, "order": 1, "hidden": true, "test": true, "descHash": 1428311174 },
{ "subId": 100702, "order": 2, "hidden": true, "test": true, "descHash": 4113829358 },
{ "subId": 100703, "order": 3, "hidden": true, "test": true, "descHash": 498328678 }
]
},
{
"id": 1008,
"titleHash": 2963680265,
"children": [
{ "subId": 100808, "order": 1, "hidden": true, "test": true, "descHash": 723983646 },
{ "subId": 100801, "order": 2, "descHash": 3019703382 },
{ "subId": 100802, "order": 3, "hidden": true, "descHash": 1354664582 },
{ "subId": 100803, "order": 4, "hidden": true, "descHash": 1713346550 },
{ "subId": 100804, "order": 5, "descHash": 265443958 },
{ "subId": 100805, "order": 6, "descHash": 974090142 },
{ "subId": 100806, "order": 7, "descHash": 2604567190 },
{ "subId": 100807, "order": 8, "descHash": 974225294 }
]
},
{
"id": 1009,
"titleHash": 2474320849,
"children": [
{ "subId": 100901, "order": 1, "descHash": 2224259326 },
{ "subId": 100915, "order": 2, "descHash": 829415190 },
{ "subId": 100902, "order": 3, "descHash": 750617182 },
{ "subId": 100903, "order": 4, "descHash": 572642054 },
{ "subId": 100904, "order": 5, "descHash": 4189773534 },
{ "subId": 100905, "order": 6, "hidden": true, "test": true, "descHash": 1081681902 },
{ "subId": 100906, "order": 7, "hidden": true, "test": true, "descHash": 2206487830 },
{ "subId": 100907, "order": 8, "descHash": 3326152254 },
{ "subId": 100908, "order": 9, "descHash": 869474030 },
{ "subId": 100909, "order": 10, "descHash": 3778084878 },
{ "subId": 100910, "order": 11, "descHash": 3384291766 },
{ "subId": 100911, "order": 12, "hidden": true, "test": true, "descHash": 3201615878 },
{ "subId": 100912, "order": 13, "descHash": 2570770966 },
{ "subId": 100913, "order": 14, "hidden": true, "descHash": 2193828638 },
{ "subId": 100914, "order": 15, "descHash": 2694838326 }
]
},
{
"id": 1010,
"titleHash": 3403721721,
"children": [
{ "subId": 101001, "order": 1, "descHash": 3256933974 },
{ "subId": 101002, "order": 2, "descHash": 2839051910 },
{ "subId": 101003, "order": 3, "descHash": 3682043446 },
{ "subId": 101004, "order": 4, "hidden": true, "test": true, "descHash": 1841647094 },
{ "subId": 101007, "order": 5, "hidden": true, "test": true, "descHash": 322488654 },
{ "subId": 101008, "order": 6, "hidden": true, "test": true, "descHash": 1417555518 },
{ "subId": 101005, "order": 7, "descHash": 1021935550 },
{ "subId": 101006, "order": 8, "descHash": 2640720366 }
]
},
{
"id": 1011,
"titleHash": 2168374345,
"children": [
{ "subId": 101101, "order": 1, "descHash": 1450737182 },
{ "subId": 101116, "order": 2, "hidden": true, "test": true, "descHash": 2741388678 },
{ "subId": 101102, "order": 3, "descHash": 2648971166 },
{ "subId": 101103, "order": 4, "descHash": 2404520014 },
{ "subId": 101112, "order": 5, "descHash": 3154152798 },
{ "subId": 101104, "order": 6, "hidden": true, "test": true, "descHash": 1458921662 },
{ "subId": 101128, "order": 7, "hidden": true, "test": true, "descHash": 3550501614 },
{ "subId": 101105, "order": 8, "descHash": 823386574 },
{ "subId": 101123, "order": 9, "hidden": true, "test": true, "descHash": 2839998918 },
{ "subId": 101113, "order": 10, "descHash": 3811701622 },
{ "subId": 101124, "order": 11, "hidden": true, "test": true, "descHash": 1048589718 },
{ "subId": 101114, "order": 12, "descHash": 3474116310 },
{ "subId": 101125, "order": 13, "hidden": true, "test": true, "descHash": 1822289942 },
{ "subId": 101115, "order": 14, "descHash": 3368554190 },
{ "subId": 101126, "order": 15, "hidden": true, "test": true, "descHash": 1225839734 },
{ "subId": 101106, "order": 16, "descHash": 2243812454 },
{ "subId": 101127, "order": 17, "hidden": true, "test": true, "descHash": 47602694 },
{ "subId": 101110, "order": 18, "hidden": true, "test": true, "descHash": 3603652718 },
{ "subId": 101111, "order": 19, "hidden": true, "test": true, "descHash": 2790499086 },
{ "subId": 101107, "order": 20, "descHash": 861117294 },
{ "subId": 101108, "order": 21, "descHash": 2713991150 },
{ "subId": 101109, "order": 22, "hidden": true, "descHash": 2140281678 }
]
},
{
"id": 1012,
"titleHash": 156369657,
"children": [
{ "subId": 101202, "order": 1, "descHash": 362291814 },
{ "subId": 101212, "order": 2, "hidden": true, "test": true, "descHash": 2175598750 },
{ "subId": 101203, "order": 3, "descHash": 2631170582 },
{ "subId": 101204, "order": 4, "descHash": 2178085694 },
{ "subId": 101205, "order": 5, "descHash": 918555366 },
{ "subId": 101213, "order": 6, "descHash": 4215925614 },
{ "subId": 101206, "order": 7, "descHash": 3207253742 },
{ "subId": 101214, "order": 8, "descHash": 2293379342 },
{ "subId": 101210, "order": 9, "descHash": 3162982934 },
{ "subId": 101211, "order": 10, "hidden": true, "test": true, "descHash": 284919390 },
{ "subId": 101207, "order": 11, "hidden": true, "test": true, "descHash": 440999366 },
{ "subId": 101208, "order": 12, "hidden": true, "test": true, "descHash": 2150692022 },
{ "subId": 101201, "order": 13, "hidden": true, "test": true, "descHash": 1373647526 },
{ "subId": 101215, "order": 14, "descHash": 2214313726 },
{ "subId": 101209, "order": 15, "descHash": 1118582718 }
]
},
{
"id": 1013,
"titleHash": 126291521,
"children": [
{ "subId": 101301, "order": 1, "descHash": 316008214 },
{ "subId": 101302, "order": 2, "test": true, "descHash": 544593662 },
{ "subId": 101303, "order": 3, "hidden": true, "descHash": 1758390534 },
{ "subId": 101321, "order": 4, "descHash": 4227934006 },
{ "subId": 101304, "order": 5, "descHash": 1962414190 },
{ "subId": 101305, "order": 6, "descHash": 380978710 },
{ "subId": 101306, "order": 7, "descHash": 3617063470 },
{ "subId": 101307, "order": 8, "hidden": true, "descHash": 3867225110 },
{ "subId": 101322, "order": 9, "descHash": 1414800718 },
{ "subId": 101308, "order": 10, "descHash": 3881868694 },
{ "subId": 101309, "order": 11, "descHash": 1683719766 },
{ "subId": 101310, "order": 12, "descHash": 2960307854 },
{ "subId": 101311, "order": 13, "hidden": true, "descHash": 3072837694 },
{ "subId": 101323, "order": 14, "descHash": 2460868686 },
{ "subId": 101312, "order": 15, "descHash": 3142324054 },
{ "subId": 101313, "order": 16, "descHash": 3395802982 },
{ "subId": 101314, "order": 17, "descHash": 12570734 },
{ "subId": 101315, "order": 18, "hidden": true, "test": true, "descHash": 1490232590 },
{ "subId": 101316, "order": 19, "hidden": true, "test": true, "descHash": 4144000182 },
{ "subId": 101317, "order": 20, "hidden": true, "test": true, "descHash": 2313182734 },
{ "subId": 101318, "order": 21, "hidden": true, "test": true, "descHash": 3915703246 },
{ "subId": 101319, "order": 22, "hidden": true, "test": true, "descHash": 581972286 },
{ "subId": 101320, "order": 23, "descHash": 2144203702 }
]
},
{
"id": 1014,
"titleHash": 2414407745,
"children": [
{ "subId": 101401, "order": 1, "descHash": 3851701478 },
{ "subId": 101406, "order": 2, "descHash": 2228815254 },
{ "subId": 101402, "order": 3, "descHash": 1113244550 },
{ "subId": 101405, "order": 4, "hidden": true, "test": true, "descHash": 1256087934 },
{ "subId": 101408, "order": 5, "hidden": true, "test": true, "descHash": 3673603918 },
{ "subId": 101403, "order": 6, "descHash": 610283270 },
{ "subId": 101404, "order": 7, "descHash": 3041324158 },
{ "subId": 101407, "order": 8, "hidden": true, "test": true, "descHash": 1926297478 }
]
},
{
"id": 1015,
"titleHash": 2212320145,
"children": [
{ "subId": 101501, "order": 1, "descHash": 976056246 },
{ "subId": 101513, "order": 2, "hidden": true, "test": true, "descHash": 202009230 },
{ "subId": 101509, "order": 3, "descHash": 3277953846 },
{ "subId": 101516, "order": 3, "hidden": true, "test": true, "descHash": 2630094158 },
{ "subId": 101502, "order": 4, "descHash": 2007285246 },
{ "subId": 101508, "order": 5, "descHash": 593902134 },
{ "subId": 101503, "order": 6, "hidden": true, "test": true, "descHash": 3544986846 },
{ "subId": 101504, "order": 7, "descHash": 1264572870 },
{ "subId": 101505, "order": 8, "descHash": 724698414 },
{ "subId": 101506, "order": 9, "hidden": true, "descHash": 751769294 },
{ "subId": 101515, "order": 10, "hidden": true, "test": true, "descHash": 706394454 },
{ "subId": 101510, "order": 11, "descHash": 1679616238 },
{ "subId": 101514, "order": 12, "hidden": true, "descHash": 2111547382 },
{ "subId": 101507, "order": 13, "descHash": 506653846 },
{ "subId": 101511, "order": 14, "descHash": 3172241982 },
{ "subId": 101512, "order": 15, "hidden": true, "test": true, "descHash": 1631857854 }
]
},
{
"id": 1016,
"titleHash": 1207725753,
"children": [
{ "subId": 101604, "order": 1, "descHash": 430346358 },
{ "subId": 101605, "order": 2, "hidden": true, "test": true, "descHash": 2957197982 },
{ "subId": 101601, "order": 3, "descHash": 3579979886 },
{ "subId": 101608, "order": 4, "descHash": 2098362990 },
{ "subId": 101609, "order": 5, "hidden": true, "test": true, "descHash": 451570790 },
{ "subId": 101606, "order": 6, "hidden": true, "test": true, "descHash": 1677916374 },
{ "subId": 101607, "order": 7, "hidden": true, "test": true, "descHash": 2615133446 },
{ "subId": 101602, "order": 8, "hidden": true, "test": true, "descHash": 820073814 },
{ "subId": 101603, "order": 9, "hidden": true, "test": true, "descHash": 503103670 },
{ "subId": 101610, "order": 10, "hidden": true, "test": true, "descHash": 3031523134 }
]
},
{
"id": 1017,
"hidden": true,
"test": true,
"titleHash": 1159841081,
"children": [
{ "subId": 101701, "order": 1, "hidden": true, "test": true, "descHash": 2003967438 },
{ "subId": 101702, "order": 2, "hidden": true, "test": true, "descHash": 739706134 },
{ "subId": 101703, "order": 3, "hidden": true, "test": true, "descHash": 2532669622 },
{ "subId": 101704, "order": 4, "hidden": true, "test": true, "descHash": 3503669678 },
{ "subId": 101705, "order": 5, "hidden": true, "test": true, "descHash": 79703326 }
]
},
{ "id": 1018, "titleHash": 3873565161, "children": [{ "subId": 101801, "order": 1, "descHash": 276085838 }] },
{
"id": 1019,
"titleHash": 4195987807,
"children": [
{ "subId": 101906, "order": 1, "hidden": true, "test": true, "descHash": 1233975348 },
{ "subId": 101907, "order": 2, "descHash": 2345112564 },
{ "subId": 101901, "order": 3, "descHash": 1312979684 },
{ "subId": 101902, "order": 4, "descHash": 3703164316 },
{ "subId": 101903, "order": 5, "descHash": 3482294988 },
{ "subId": 101904, "order": 6, "descHash": 1118391204 },
{ "subId": 101905, "order": 7, "descHash": 2704102260 }
]
},
{
"id": 1020,
"titleHash": 3420715793,
"children": [
{ "subId": 102001, "order": 1, "descHash": 1134761862 },
{ "subId": 102002, "order": 2, "descHash": 920558078 },
{ "subId": 102003, "order": 3, "descHash": 3663965798 },
{ "subId": 102007, "order": 4, "hidden": true, "test": true, "descHash": 850063806 },
{ "subId": 102004, "order": 5, "descHash": 1164753134 },
{ "subId": 102005, "order": 6, "descHash": 1527703006 },
{ "subId": 102006, "order": 7, "hidden": true, "test": true, "descHash": 692491190 }
]
},
{
"id": 1021,
"titleHash": 3308674505,
"children": [
{ "subId": 102109, "order": 1, "descHash": 773118558 },
{ "subId": 102110, "order": 2, "descHash": 962414430 },
{ "subId": 102101, "order": 3, "descHash": 3606455590 },
{ "subId": 102102, "order": 4, "descHash": 2406994974 },
{ "subId": 102107, "order": 5, "descHash": 1921208902 },
{ "subId": 102108, "order": 6, "descHash": 3450934118 },
{ "subId": 102111, "order": 7, "descHash": 3319919358 },
{ "subId": 102103, "order": 8, "descHash": 3312136942 },
{ "subId": 102104, "order": 9, "hidden": true, "test": true, "descHash": 2445645902 },
{ "subId": 102113, "order": 10, "descHash": 163703686 },
{ "subId": 102105, "order": 11, "descHash": 3031272166 },
{ "subId": 102106, "order": 12, "descHash": 2532168910 },
{ "subId": 102112, "order": 13, "descHash": 2918590886 }
]
},
{
"id": 1022,
"titleHash": 1529124233,
"children": [
{ "subId": 102201, "order": 1, "descHash": 544802782 },
{ "subId": 102202, "order": 2, "descHash": 2030931302 },
{ "subId": 102203, "order": 3, "descHash": 514840766 },
{ "subId": 102204, "order": 4, "descHash": 1745900190 },
{ "subId": 102205, "order": 5, "descHash": 2995471006 },
{ "subId": 102206, "order": 6, "hidden": true, "test": true, "descHash": 1033464774 },
{ "subId": 102207, "order": 7, "descHash": 3992385398 },
{ "subId": 102208, "order": 8, "descHash": 2276095398 }
]
},
{
"id": 1023,
"titleHash": 186534449,
"children": [
{ "subId": 102301, "order": 1, "descHash": 3151610934 },
{ "subId": 102303, "order": 2, "hidden": true, "test": true, "descHash": 3596423782 },
{ "subId": 102302, "order": 3, "descHash": 4028223406 },
{ "subId": 102304, "order": 4, "descHash": 1499678406 },
{ "subId": 102305, "order": 5, "hidden": true, "test": true, "descHash": 220486950 },
{ "subId": 102306, "order": 6, "hidden": true, "test": true, "descHash": 2165747262 },
{ "subId": 102307, "order": 7, "test": true, "descHash": 3299852950 }
]
},
{
"id": 1024,
"titleHash": 4062148249,
"children": [
{ "subId": 102407, "order": 1, "hidden": true, "test": true, "descHash": 3601371542 },
{ "subId": 102408, "order": 2, "descHash": 3236261246 },
{ "subId": 102401, "order": 3, "hidden": true, "test": true, "descHash": 617709662 },
{ "subId": 102403, "order": 3, "hidden": true, "test": true, "descHash": 2315469590 },
{ "subId": 102402, "order": 4, "hidden": true, "test": true, "descHash": 458491958 },
{ "subId": 102404, "order": 5, "descHash": 2273117606 },
{ "subId": 102405, "order": 6, "hidden": true, "test": true, "descHash": 4232911478 },
{ "subId": 102406, "order": 6, "test": true, "descHash": 1984570246 }
]
},
{
"id": 1025,
"titleHash": 2849435409,
"children": [
{ "subId": 102501, "order": 1, "hidden": true, "test": true, "descHash": 2764034014 },
{ "subId": 102516, "order": 2, "hidden": true, "test": true, "descHash": 1905948638 },
{ "subId": 102515, "order": 3, "descHash": 3832539726 },
{ "subId": 102521, "order": 4, "descHash": 1840549054 },
{ "subId": 102502, "order": 5, "hidden": true, "test": true, "descHash": 908060102 },
{ "subId": 102517, "order": 6, "descHash": 3898841334 },
{ "subId": 102503, "order": 7, "descHash": 702010158 },
{ "subId": 102504, "order": 8, "descHash": 4227877614 },
{ "subId": 102511, "order": 9, "hidden": true, "descHash": 3218947758 },
{ "subId": 102512, "order": 10, "hidden": true, "test": true, "descHash": 1545146038 },
{ "subId": 102505, "order": 11, "descHash": 3711576166 },
{ "subId": 102506, "order": 12, "descHash": 1148236926 },
{ "subId": 102507, "order": 13, "hidden": true, "descHash": 2407962542 },
{ "subId": 102508, "order": 14, "hidden": true, "descHash": 4037916470 },
{ "subId": 102509, "order": 15, "hidden": true, "descHash": 1921759582 },
{ "subId": 102518, "order": 16, "hidden": true, "descHash": 1866638590 },
{ "subId": 102519, "order": 17, "hidden": true, "descHash": 2201692230 },
{ "subId": 102520, "order": 18, "hidden": true, "descHash": 1324536198 },
{ "subId": 102513, "order": 19, "descHash": 461056158 },
{ "subId": 102514, "order": 20, "hidden": true, "test": true, "descHash": 3891216502 },
{ "subId": 102510, "order": 21, "descHash": 2815222158 }
]
},
{
"id": 1026,
"hidden": true,
"test": true,
"titleHash": 1171653617,
"children": [
{ "subId": 102601, "order": 1, "hidden": true, "test": true, "descHash": 1758591134 },
{ "subId": 102602, "order": 2, "hidden": true, "test": true, "descHash": 3188094830 },
{ "subId": 102603, "order": 3, "hidden": true, "test": true, "descHash": 3705516486 },
{ "subId": 102604, "order": 4, "hidden": true, "test": true, "descHash": 3122861390 }
]
},
{
"id": 1027,
"hidden": true,
"titleHash": 1466678287,
"children": [{ "subId": 102701, "order": 1, "hidden": true, "descHash": 379288204 }]
},
{
"id": 1028,
"titleHash": 3086338855,
"children": [
{ "subId": 102801, "order": 1, "descHash": 2475799548 },
{ "subId": 102808, "order": 2, "descHash": 2704484764 },
{ "subId": 102803, "order": 3, "descHash": 3634810508 },
{ "subId": 102804, "order": 4, "descHash": 2628846756 },
{ "subId": 102809, "order": 5, "hidden": true, "descHash": 2189082540 },
{ "subId": 102805, "order": 6, "descHash": 717726932 },
{ "subId": 102802, "order": 7, "descHash": 1591030452 },
{ "subId": 102806, "order": 8, "descHash": 1007045420 },
{ "subId": 102807, "order": 9, "hidden": true, "descHash": 3371022764 }
]
},
{
"id": 1029,
"titleHash": 3397078575,
"children": [
{ "subId": 102901, "order": 1, "descHash": 1754020308 },
{ "subId": 102936, "order": 2, "descHash": 1241157092 },
{ "subId": 102935, "order": 3, "descHash": 1837459500 },
{ "subId": 102933, "order": 4, "hidden": true, "descHash": 3716105516 },
{ "subId": 102902, "order": 5, "descHash": 3441104964 },
{ "subId": 102903, "order": 6, "descHash": 2889617140 },
{ "subId": 102904, "order": 7, "descHash": 1417693980 },
{ "subId": 102905, "order": 8, "descHash": 1895582548 },
{ "subId": 102906, "order": 9, "descHash": 33043292 },
{ "subId": 102907, "order": 10, "hidden": true, "descHash": 2057610428 },
{ "subId": 102929, "order": 11, "hidden": true, "descHash": 3154902844 },
{ "subId": 102928, "order": 12, "hidden": true, "descHash": 402143556 },
{ "subId": 102927, "order": 13, "hidden": true, "descHash": 1434185156 },
{ "subId": 102926, "order": 14, "hidden": true, "descHash": 3389325452 },
{ "subId": 102925, "order": 15, "hidden": true, "descHash": 4118154284 },
{ "subId": 102924, "order": 16, "hidden": true, "descHash": 4152673484 },
{ "subId": 102930, "order": 17, "hidden": true, "descHash": 3672163380 },
{ "subId": 102931, "order": 18, "hidden": true, "descHash": 447096676 },
{ "subId": 102908, "order": 19, "descHash": 1808814172 },
{ "subId": 102909, "order": 20, "descHash": 2648382884 },
{ "subId": 102934, "order": 21, "hidden": true, "descHash": 2075045572 },
{ "subId": 102910, "order": 22, "descHash": 3994903692 },
{ "subId": 102911, "order": 23, "descHash": 2210853276 },
{ "subId": 102916, "order": 24, "descHash": 346428628 },
{ "subId": 102917, "order": 25, "descHash": 920003732 },
{ "subId": 102912, "order": 26, "descHash": 2581568300 },
{ "subId": 102918, "order": 27, "descHash": 165478804 },
{ "subId": 102932, "order": 28, "hidden": true, "descHash": 2294580228 },
{ "subId": 102913, "order": 29, "descHash": 1842393972 },
{ "subId": 102914, "order": 30, "descHash": 1536370244 },
{ "subId": 102915, "order": 31, "descHash": 3633315804 },
{ "subId": 102919, "order": 32, "descHash": 650751780 },
{ "subId": 102920, "order": 33, "descHash": 971501252 },
{ "subId": 102921, "order": 34, "descHash": 308442292 },
{ "subId": 102922, "order": 35, "descHash": 4053446924 },
{ "subId": 102923, "order": 36, "hidden": true, "descHash": 2411873836 }
]
},
{
"id": 1030,
"titleHash": 1604200951,
"children": [
{ "subId": 103001, "order": 1, "descHash": 723374244 },
{ "subId": 103002, "order": 2, "descHash": 1145923172 },
{ "subId": 103003, "order": 3, "descHash": 3394935764 },
{ "subId": 103007, "order": 4, "descHash": 2619957732 },
{ "subId": 103010, "order": 5, "hidden": true, "descHash": 1357796788 },
{ "subId": 103015, "order": 6, "hidden": true, "descHash": 2736719588 },
{ "subId": 103004, "order": 7, "hidden": true, "descHash": 1539251268 },
{ "subId": 103008, "order": 8, "descHash": 2689533988 },
{ "subId": 103009, "order": 9, "descHash": 399416740 },
{ "subId": 103011, "order": 11, "descHash": 774634260 },
{ "subId": 103012, "order": 12, "descHash": 3955546036 },
{ "subId": 103013, "order": 13, "descHash": 3097387468 },
{ "subId": 103014, "order": 14, "descHash": 872926940 },
{ "subId": 103016, "order": 16, "descHash": 2613818188 },
{ "subId": 103017, "order": 17, "descHash": 835306380 },
{ "subId": 103018, "order": 18, "descHash": 3050560268 },
{ "subId": 103019, "order": 19, "descHash": 1660691892 },
{ "subId": 103024, "order": 24, "descHash": 2347309020 },
{ "subId": 103005, "order": 25, "descHash": 1724246116 },
{ "subId": 103006, "order": 26, "descHash": 633141036 },
{ "subId": 103020, "order": 30, "descHash": 3620472828 },
{ "subId": 103021, "order": 31, "descHash": 3008425116 },
{ "subId": 103022, "order": 32, "descHash": 1894071876 },
{ "subId": 103023, "order": 33, "descHash": 1502399444 },
{ "subId": 103025, "order": 34, "descHash": 1523449188 },
{ "subId": 103026, "order": 35, "descHash": 2082397356 },
{ "subId": 103027, "order": 36, "descHash": 629733348 }
]
},
{
"id": 1031,
"titleHash": 1491105359,
"children": [
{ "subId": 103101, "order": 1, "descHash": 4109162108 },
{ "subId": 103102, "order": 2, "descHash": 1971786004 },
{ "subId": 103107, "order": 3, "hidden": true, "descHash": 3938038588 },
{ "subId": 103103, "order": 4, "hidden": true, "descHash": 841092860 },
{ "subId": 103104, "order": 5, "descHash": 1088778732 },
{ "subId": 103109, "order": 6, "hidden": true, "descHash": 3002174636 },
{ "subId": 103105, "order": 7, "descHash": 1803275228 },
{ "subId": 103106, "order": 8, "descHash": 4006987604 },
{ "subId": 103108, "order": 9, "hidden": true, "descHash": 3568812516 }
]
},
{
"id": 1032,
"hidden": true,
"titleHash": 1011175175,
"children": [{ "subId": 103201, "order": 1, "hidden": true }]
},
{
"id": 1033,
"hidden": true,
"titleHash": 2327823943,
"children": [{ "subId": 103301, "order": 1, "hidden": true }]
},
{
"id": 2000,
"titleHash": 3946941215,
"children": [
{ "subId": 200012, "order": 1, "hidden": true, "test": true, "descHash": 2719917732 },
{ "subId": 200001, "order": 2, "descHash": 3129039764 },
{ "subId": 200002, "order": 3, "descHash": 1536826420 },
{ "subId": 200003, "order": 4, "descHash": 373720220 },
{ "subId": 200004, "order": 5, "descHash": 3292574332 },
{ "subId": 200011, "order": 6, "descHash": 4065007204 },
{ "subId": 200005, "order": 7, "descHash": 3137264748 },
{ "subId": 200006, "order": 8, "descHash": 1091578364 },
{ "subId": 200007, "order": 9, "descHash": 3477433148 },
{ "subId": 200008, "order": 10, "hidden": true, "descHash": 1912325884 },
{ "subId": 200009, "order": 11, "hidden": true, "descHash": 1402020868 },
{ "subId": 200010, "order": 12, "descHash": 1806180468 }
]
},
{
"id": 2001,
"titleHash": 3233532831,
"children": [
{ "subId": 200101, "order": 1, "descHash": 2786028868 },
{ "subId": 200102, "order": 2, "descHash": 1590276948 },
{ "subId": 200114, "order": 3, "hidden": true, "test": true, "descHash": 1089910044 },
{ "subId": 200103, "order": 4, "descHash": 1020002036 },
{ "subId": 200104, "order": 5, "descHash": 1707329268 },
{ "subId": 200105, "order": 6, "descHash": 1261492916 },
{ "subId": 200106, "order": 7, "descHash": 3300983812 },
{ "subId": 200107, "order": 8, "descHash": 3002150332 },
{ "subId": 200108, "order": 9, "descHash": 2295774492 },
{ "subId": 200109, "order": 10, "descHash": 1148902684 },
{ "subId": 200110, "order": 11, "descHash": 510598212 },
{ "subId": 200111, "order": 12, "descHash": 3267183724 },
{ "subId": 200112, "order": 13, "descHash": 1558490220 },
{ "subId": 200113, "order": 14, "descHash": 1185265844 }
]
},
{
"id": 2002,
"titleHash": 3473314535,
"children": [
{ "subId": 200202, "order": 1, "descHash": 1669833132 },
{ "subId": 200203, "order": 2, "descHash": 3990247908 },
{ "subId": 200213, "order": 3, "hidden": true, "test": true, "descHash": 2070018292 },
{ "subId": 200204, "order": 4, "descHash": 4050025652 },
{ "subId": 200201, "order": 5, "descHash": 126916732 },
{ "subId": 200205, "order": 6, "descHash": 2917796604 },
{ "subId": 200206, "order": 7, "descHash": 1747203276 },
{ "subId": 200207, "order": 8, "descHash": 4179872452 },
{ "subId": 200208, "order": 9, "descHash": 660727452 },
{ "subId": 200209, "order": 10, "descHash": 1065994148 },
{ "subId": 200210, "order": 11, "descHash": 2637370004 },
{ "subId": 200211, "order": 12, "descHash": 2133159044 },
{ "subId": 200212, "order": 13, "descHash": 2898332884 }
]
},
{
"id": 2003,
"titleHash": 55039543,
"children": [
{ "subId": 200305, "order": 1, "descHash": 104139516 },
{ "subId": 200301, "order": 2, "descHash": 1691568260 },
{ "subId": 200302, "order": 3, "descHash": 4241962420 },
{ "subId": 200303, "order": 4, "test": true, "descHash": 2754217284 },
{ "subId": 200304, "order": 5, "descHash": 2169017924 }
]
},
{
"id": 2004,
"titleHash": 2637528983,
"children": [
{ "subId": 200401, "order": 1, "descHash": 1534893180 },
{ "subId": 200406, "order": 2, "descHash": 1490072164 },
{ "subId": 200407, "order": 3, "descHash": 1538871108 },
{ "subId": 200408, "order": 4, "descHash": 130028068 },
{ "subId": 200402, "order": 5, "descHash": 930852812 },
{ "subId": 200403, "order": 6, "descHash": 1156197564 },
{ "subId": 200404, "order": 7, "descHash": 2317512740 },
{ "subId": 200405, "order": 8, "descHash": 368288492 }
]
},
{
"id": 2005,
"titleHash": 284197415,
"children": [
{ "subId": 200501, "order": 1, "descHash": 538431412 },
{ "subId": 200506, "order": 2, "descHash": 1986905444 },
{ "subId": 200507, "order": 3, "descHash": 3399537772 },
{ "subId": 200502, "order": 4, "descHash": 2818233148 },
{ "subId": 200503, "order": 5, "descHash": 2338988796 },
{ "subId": 200504, "order": 6, "descHash": 202849748 },
{ "subId": 200505, "order": 7, "descHash": 1686024828 }
]
},
{
"id": 2006,
"titleHash": 4099676191,
"children": [
{ "subId": 200601, "order": 1, "descHash": 158705964 },
{ "subId": 200602, "order": 2, "descHash": 1515476252 },
{ "subId": 200603, "order": 3, "descHash": 4200424428 },
{ "subId": 200608, "order": 4, "descHash": 2596406892 },
{ "subId": 200609, "order": 5, "descHash": 2321705852 },
{ "subId": 200604, "order": 6, "descHash": 2139850572 },
{ "subId": 200605, "order": 7, "descHash": 919530468 },
{ "subId": 200606, "order": 8, "descHash": 1659041004 },
{ "subId": 200607, "order": 9, "descHash": 3349802956 },
{ "subId": 200610, "order": 10, "test": true, "descHash": 2284609068 }
]
},
{
"id": 2007,
"titleHash": 3043740727,
"children": [
{ "subId": 200701, "order": 1, "descHash": 1920389612 },
{ "subId": 200710, "order": 2, "descHash": 4075809716 },
{ "subId": 200702, "order": 3, "descHash": 1863460812 },
{ "subId": 200703, "order": 4, "descHash": 3906166508 },
{ "subId": 200704, "order": 5, "descHash": 4272691356 },
{ "subId": 200706, "order": 6, "descHash": 3576817180 },
{ "subId": 200705, "order": 7, "descHash": 464415708 },
{ "subId": 200709, "order": 8, "descHash": 1115056460 },
{ "subId": 200707, "order": 9, "hidden": true, "descHash": 4232321516 },
{ "subId": 200711, "order": 10, "descHash": 3854745244 },
{ "subId": 200708, "order": 11, "descHash": 2257216340 }
]
},
{
"id": 2008,
"titleHash": 3854853215,
"children": [
{ "subId": 200807, "order": 1, "hidden": true, "test": true, "descHash": 284452628 },
{ "subId": 200805, "order": 2, "descHash": 1441453788 },
{ "subId": 200806, "order": 3, "descHash": 637423732 },
{ "subId": 200801, "order": 4, "descHash": 1147422652 },
{ "subId": 200802, "order": 5, "hidden": true, "test": true, "descHash": 1164044708 },
{ "subId": 200803, "order": 6, "descHash": 1118591668 },
{ "subId": 200804, "order": 7, "hidden": true, "descHash": 2186999188 },
{ "subId": 200808, "order": 8, "descHash": 2821469684 }
]
},
{
"id": 2009,
"titleHash": 56189327,
"children": [
{ "subId": 200901, "order": 1, "descHash": 2615173020 },
{ "subId": 200910, "order": 2, "descHash": 699731284 },
{ "subId": 200909, "order": 3, "descHash": 63763700 },
{ "subId": 200921, "order": 4, "descHash": 1914285348 },
{ "subId": 200922, "order": 5, "descHash": 1093315788 },
{ "subId": 200902, "order": 6, "descHash": 2870455244 },
{ "subId": 200903, "order": 7, "descHash": 2607788436 },
{ "subId": 200914, "order": 8, "descHash": 4153226148 },
{ "subId": 200915, "order": 9, "descHash": 4074025700 },
{ "subId": 200916, "order": 10, "descHash": 2473597108 },
{ "subId": 200920, "order": 11, "descHash": 439741980 },
{ "subId": 200917, "order": 12, "descHash": 2825148276 },
{ "subId": 200924, "order": 13, "descHash": 913468636 },
{ "subId": 200918, "order": 14, "descHash": 3164348084 },
{ "subId": 200923, "order": 15, "hidden": true, "test": true, "descHash": 4038523340 },
{ "subId": 200919, "order": 16, "descHash": 373034124 },
{ "subId": 200911, "order": 17, "descHash": 2169422740 },
{ "subId": 200913, "order": 18, "descHash": 2012954324 },
{ "subId": 200912, "order": 19, "descHash": 1976159964 },
{ "subId": 200925, "order": 20, "descHash": 517479644 },
{ "subId": 200904, "order": 21, "descHash": 1755451716 },
{ "subId": 200926, "order": 22, "hidden": true, "test": true, "descHash": 3886585492 },
{ "subId": 200905, "order": 23, "descHash": 1595956644 },
{ "subId": 200906, "order": 24, "descHash": 4139362004 },
{ "subId": 200907, "order": 25, "descHash": 4133760076 },
{ "subId": 200927, "order": 26, "descHash": 2264575284 },
{ "subId": 200928, "order": 27, "descHash": 4113650476 },
{ "subId": 200929, "order": 28, "descHash": 3452929092 },
{ "subId": 200930, "order": 29, "descHash": 518314652 },
{ "subId": 200931, "order": 30, "hidden": true, "test": true },
{ "subId": 200908, "order": 31, "descHash": 3882926276 }
]
},
{
"id": 2010,
"titleHash": 2829201271,
"children": [
{ "subId": 201001, "order": 1, "descHash": 3046997260 },
{ "subId": 201002, "order": 2, "descHash": 1493962532 },
{ "subId": 201003, "order": 3, "descHash": 4069099972 },
{ "subId": 201004, "order": 4, "descHash": 4057003468 },
{ "subId": 201005, "order": 5, "descHash": 2245891988 },
{ "subId": 201006, "order": 6, "descHash": 980390692 },
{ "subId": 201012, "order": 7, "descHash": 2214518676 },
{ "subId": 201013, "order": 8, "descHash": 3066080092 },
{ "subId": 201017, "order": 9, "hidden": true, "test": true, "descHash": 3389706372 },
{ "subId": 201007, "order": 10, "descHash": 2128509244 },
{ "subId": 201014, "order": 11, "descHash": 238360692 },
{ "subId": 201010, "order": 12, "descHash": 1507604828 },
{ "subId": 201016, "order": 13, "descHash": 2453746932 },
{ "subId": 201018, "order": 14, "hidden": true, "test": true, "descHash": 3419907348 },
{ "subId": 201008, "order": 15, "descHash": 938906516 },
{ "subId": 201015, "order": 16, "descHash": 1867787908 },
{ "subId": 201011, "order": 17, "descHash": 1696792148 },
{ "subId": 201009, "order": 18, "descHash": 3810452492 }
]
},
{
"id": 2011,
"titleHash": 3126017879,
"children": [
{ "subId": 201101, "order": 1, "descHash": 1986048236 },
{ "subId": 201102, "order": 2, "descHash": 4205351284 },
{ "subId": 201103, "order": 3, "descHash": 1763984460 },
{ "subId": 201104, "order": 4, "descHash": 2100170324 },
{ "subId": 201105, "order": 5, "descHash": 3560136316 },
{ "subId": 201106, "order": 6, "descHash": 1431813012 },
{ "subId": 201107, "order": 7, "descHash": 4287035588 }
]
},
{
"id": 2012,
"titleHash": 3576818855,
"children": [
{ "subId": 201201, "order": 1, "descHash": 2909056260 },
{ "subId": 201202, "order": 2, "descHash": 1214434644 },
{ "subId": 201203, "order": 3, "descHash": 2745422484 },
{ "subId": 201204, "order": 4, "descHash": 3202325620 },
{ "subId": 201205, "order": 5, "descHash": 108061868 },
{ "subId": 201206, "order": 6, "descHash": 1050646476 },
{ "subId": 201210, "order": 7, "descHash": 3877899484 },
{ "subId": 201211, "order": 8, "descHash": 1035541164 },
{ "subId": 201216, "order": 9, "descHash": 2680590044 },
{ "subId": 201217, "order": 10, "descHash": 3016864852 },
{ "subId": 201212, "order": 11, "descHash": 4209199108 },
{ "subId": 201207, "order": 12, "descHash": 1108409828 },
{ "subId": 201213, "order": 13, "descHash": 3222105644 },
{ "subId": 201208, "order": 14, "descHash": 1344041844 },
{ "subId": 201214, "order": 15, "descHash": 2824197972 },
{ "subId": 201209, "order": 16, "descHash": 3575985324 },
{ "subId": 201215, "order": 17, "descHash": 127863052 }
]
},
{
"id": 2013,
"titleHash": 1388933119,
"children": [
{ "subId": 201301, "order": 1, "descHash": 1786725396 },
{ "subId": 201311, "order": 2, "descHash": 3533877508 },
{ "subId": 201302, "order": 3, "descHash": 1743099124 },
{ "subId": 201303, "order": 4, "descHash": 3468278908 },
{ "subId": 201304, "order": 5, "descHash": 789119236 },
{ "subId": 201305, "order": 6, "hidden": true, "descHash": 312395772 },
{ "subId": 201306, "order": 7, "descHash": 2557114524 },
{ "subId": 201307, "order": 8, "descHash": 1153198380 },
{ "subId": 201308, "order": 9, "descHash": 702384804 },
{ "subId": 201309, "order": 10, "descHash": 1126796300 },
{ "subId": 201312, "order": 11, "hidden": true, "test": true, "descHash": 3016999076 },
{ "subId": 201310, "order": 12, "descHash": 2451095932 }
]
},
{
"id": 2014,
"titleHash": 4016615943,
"children": [
{ "subId": 201401, "order": 1, "descHash": 2185202684 },
{ "subId": 201402, "order": 2, "hidden": true, "descHash": 1839190676 },
{ "subId": 201403, "order": 3, "descHash": 3525214612 },
{ "subId": 201404, "order": 4, "descHash": 2454644740 },
{ "subId": 201405, "order": 5, "descHash": 402721788 },
{ "subId": 201406, "order": 6, "descHash": 1219860564 },
{ "subId": 201407, "order": 7, "descHash": 1086875868 },
{ "subId": 201408, "order": 8, "descHash": 4038058916 }
]
},
{
"id": 2015,
"titleHash": 2156306839,
"children": [
{ "subId": 201501, "order": 1, "descHash": 539189964 },
{ "subId": 201502, "order": 2, "descHash": 3543382964 },
{ "subId": 201503, "order": 3, "descHash": 4196096748 },
{ "subId": 201504, "order": 4, "descHash": 2737492820 },
{ "subId": 201505, "order": 5, "descHash": 2006273268 }
]
},
{
"id": 2016,
"titleHash": 873861071,
"children": [
{ "subId": 201601, "order": 1, "descHash": 802735044 },
{ "subId": 201606, "order": 2, "descHash": 1978692220 },
{ "subId": 201608, "order": 3, "descHash": 2139245244 },
{ "subId": 201602, "order": 4, "descHash": 1413776660 },
{ "subId": 201607, "order": 5, "descHash": 4088443596 },
{ "subId": 201603, "order": 6, "descHash": 2374496884 },
{ "subId": 201604, "order": 7, "descHash": 2260606844 },
{ "subId": 201605, "order": 8, "descHash": 1293501340 },
{ "subId": 201609, "order": 9, "descHash": 657098788 }
]
},
{
"id": 2017,
"titleHash": 2528758855,
"children": [
{ "subId": 201701, "order": 1, "descHash": 4098021572 },
{ "subId": 201702, "order": 2, "descHash": 872278548 },
{ "subId": 201712, "order": 3, "hidden": true, "test": true, "descHash": 3893820324 },
{ "subId": 201703, "order": 4, "descHash": 42192788 },
{ "subId": 201704, "order": 5, "descHash": 2387951988 },
{ "subId": 201710, "order": 6, "descHash": 3422274772 },
{ "subId": 201705, "order": 7, "descHash": 417036212 },
{ "subId": 201706, "order": 8, "descHash": 1428832532 },
{ "subId": 201707, "order": 9, "descHash": 2807673652 },
{ "subId": 201708, "order": 10, "descHash": 4268964404 },
{ "subId": 201716, "order": 11, "hidden": true, "test": true, "descHash": 4245838092 },
{ "subId": 201714, "order": 12, "descHash": 51803180 },
{ "subId": 201711, "order": 13, "descHash": 3445493492 },
{ "subId": 201715, "order": 14, "descHash": 1296033324 },
{ "subId": 201713, "order": 15, "hidden": true, "test": true, "descHash": 4193499724 },
{ "subId": 201709, "order": 16, "descHash": 2045881236 }
]
},
{
"id": 2018,
"titleHash": 2536531223,
"children": [
{ "subId": 201801, "order": 1, "test": true, "descHash": 1172020132 },
{ "subId": 201802, "order": 2, "descHash": 3891407444 },
{ "subId": 201803, "order": 3, "descHash": 1578558140 },
{ "subId": 201805, "order": 4, "descHash": 3526525748 },
{ "subId": 201806, "order": 5, "descHash": 3601511908 },
{ "subId": 201807, "order": 6, "descHash": 3037213412 },
{ "subId": 201804, "order": 7, "descHash": 2698377516 }
]
},
{
"id": 2019,
"titleHash": 172874215,
"children": [
{ "subId": 201905, "order": 2, "descHash": 1998491692 },
{ "subId": 201901, "order": 3, "descHash": 4239877732 },
{ "subId": 201902, "order": 4, "descHash": 256933484 },
{ "subId": 201903, "order": 5, "hidden": true, "test": true, "descHash": 4013488724 },
{ "subId": 201904, "order": 6, "descHash": 548436668 }
]
},
{
"id": 2020,
"titleHash": 2485356903,
"children": [
{ "subId": 202001, "order": 1, "descHash": 2369637220 },
{ "subId": 202007, "order": 2, "hidden": true, "test": true, "descHash": 914984116 },
{ "subId": 202008, "order": 3, "hidden": true, "test": true, "descHash": 3141742388 },
{ "subId": 202009, "order": 4, "descHash": 27596172 },
{ "subId": 202002, "order": 5, "descHash": 782585636 },
{ "subId": 202013, "order": 6, "descHash": 3932765436 },
{ "subId": 202003, "order": 7, "descHash": 3785750524 },
{ "subId": 202004, "order": 8, "descHash": 2792278412 },
{ "subId": 202010, "order": 9, "hidden": true, "test": true, "descHash": 520237852 },
{ "subId": 202011, "order": 10, "descHash": 1254931676 },
{ "subId": 202005, "order": 11, "descHash": 3588164364 },
{ "subId": 202006, "order": 12, "test": true, "descHash": 396080916 },
{ "subId": 202012, "order": 13, "descHash": 1653828388 }
]
},
{
"id": 2021,
"titleHash": 3806214671,
"children": [
{ "subId": 202101, "order": 1, "descHash": 1927774476 },
{ "subId": 202102, "order": 2, "descHash": 2415517716 }
]
},
{
"id": 2022,
"hidden": true,
"test": true,
"titleHash": 3255389847,
"children": [
{ "subId": 202201, "order": 1, "hidden": true, "test": true, "descHash": 3924419828 },
{ "subId": 202202, "order": 2, "hidden": true, "test": true, "descHash": 3733012948 },
{ "subId": 202203, "order": 3, "hidden": true, "test": true, "descHash": 1394969108 }
]
},
{
"id": 2023,
"hidden": true,
"test": true,
"titleHash": 409160735,
"children": [
{ "subId": 202301, "order": 1, "hidden": true, "test": true, "descHash": 1222001804 },
{ "subId": 202302, "order": 2, "hidden": true, "test": true, "descHash": 2485441236 },
{ "subId": 202303, "order": 3, "hidden": true, "test": true, "descHash": 1457503540 },
{ "subId": 202304, "order": 4, "hidden": true, "test": true, "descHash": 4231450340 },
{ "subId": 202305, "order": 5, "hidden": true, "test": true, "descHash": 767983780 }
]
},
{
"id": 2024,
"hidden": true,
"test": true,
"titleHash": 4220531823,
"children": [{ "subId": 202401, "order": 1, "hidden": true }]
},
{
"id": 2025,
"hidden": true,
"test": true,
"titleHash": 3452945279,
"children": [
{ "subId": 202501, "order": 1, "hidden": true, "test": true, "descHash": 2810401764 },
{ "subId": 202502, "order": 2, "hidden": true, "test": true, "descHash": 2996831084 }
]
},
{
"id": 3000,
"titleHash": 1159747887,
"children": [
{ "subId": 300011, "order": 1, "descHash": 3904462692 },
{ "subId": 300001, "order": 2, "descHash": 2210589780 },
{ "subId": 300002, "order": 3, "descHash": 3663587956 },
{ "subId": 300003, "order": 4, "descHash": 3276905820 },
{ "subId": 300004, "order": 5, "hidden": true, "test": true, "descHash": 2994242220 },
{ "subId": 300005, "order": 6, "descHash": 3466836148 },
{ "subId": 300006, "order": 7, "hidden": true, "test": true, "descHash": 819381524 },
{ "subId": 300007, "order": 8, "descHash": 1727229484 },
{ "subId": 300008, "order": 9, "hidden": true, "test": true, "descHash": 3604856444 },
{ "subId": 300009, "order": 10, "hidden": true, "test": true, "descHash": 1518790268 },
{ "subId": 300010, "order": 11, "descHash": 1529055052 }
]
},
{
"id": 3001,
"titleHash": 2029690863,
"children": [
{ "subId": 300101, "order": 1, "descHash": 2921119820 },
{ "subId": 300102, "order": 2, "descHash": 292144780 },
{ "subId": 300108, "order": 3, "descHash": 3952646396 },
{ "subId": 300109, "order": 4, "descHash": 3173154556 },
{ "subId": 300103, "order": 5, "descHash": 4051466532 },
{ "subId": 300104, "order": 6, "descHash": 2882961572 },
{ "subId": 300107, "order": 7, "descHash": 2271827588 },
{ "subId": 300105, "order": 8, "descHash": 2383492388 },
{ "subId": 300106, "order": 9, "descHash": 1752246316 },
{ "subId": 300110, "order": 10, "descHash": 911655956 },
{ "subId": 300111, "order": 11, "descHash": 4216485620 }
]
},
{
"id": 3002,
"titleHash": 1127903943,
"children": [
{ "subId": 300201, "order": 1, "descHash": 4211580156 },
{ "subId": 300202, "order": 2, "descHash": 241983796 },
{ "subId": 300203, "order": 3, "descHash": 1099171412 },
{ "subId": 300204, "order": 4, "descHash": 232344044 },
{ "subId": 300205, "order": 5, "descHash": 422560084 },
{ "subId": 300206, "order": 6, "descHash": 152990708 },
{ "subId": 300207, "order": 7, "descHash": 225008492 },
{ "subId": 300208, "order": 8, "descHash": 2107799316 },
{ "subId": 300213, "order": 9, "hidden": true, "test": true, "descHash": 1060806396 },
{ "subId": 300209, "order": 10, "descHash": 3755337004 },
{ "subId": 300210, "order": 11, "descHash": 1620799588 },
{ "subId": 300211, "order": 12, "descHash": 3471624380 },
{ "subId": 300212, "order": 13, "descHash": 2057431948 }
]
},
{
"id": 3003,
"titleHash": 3252344839,
"children": [
{ "subId": 300301, "order": 1, "descHash": 426193212 },
{ "subId": 300302, "order": 2, "hidden": true, "test": true, "descHash": 4059817156 },
{ "subId": 300303, "order": 3, "descHash": 2711847212 },
{ "subId": 300304, "order": 4, "descHash": 2491642812 },
{ "subId": 300312, "order": 5, "descHash": 4127672012 },
{ "subId": 300315, "order": 6, "descHash": 1373346804 },
{ "subId": 300316, "order": 7, "descHash": 2265124116 },
{ "subId": 300317, "order": 8, "descHash": 3926503420 },
{ "subId": 300321, "order": 9, "descHash": 1387818868 },
{ "subId": 300318, "order": 10, "descHash": 1684829580 },
{ "subId": 300313, "order": 11, "descHash": 2450706332 },
{ "subId": 300314, "order": 12, "descHash": 2499954940 },
{ "subId": 300305, "order": 13, "descHash": 317530572 },
{ "subId": 300306, "order": 14, "descHash": 2658517692 },
{ "subId": 300307, "order": 15, "descHash": 3855238884 },
{ "subId": 300319, "order": 16, "hidden": true, "test": true, "descHash": 4203536900 },
{ "subId": 300308, "order": 17, "descHash": 1056251060 },
{ "subId": 300309, "order": 18, "descHash": 3169622388 },
{ "subId": 300320, "order": 19, "hidden": true, "test": true, "descHash": 3810638588 },
{ "subId": 300310, "order": 20, "descHash": 3746457804 },
{ "subId": 300311, "order": 21, "descHash": 37299964 }
]
},
{
"id": 3004,
"titleHash": 1639422863,
"children": [
{ "subId": 300401, "order": 1, "descHash": 1132605044 },
{ "subId": 300422, "order": 2, "hidden": true, "test": true, "descHash": 149904428 },
{ "subId": 300402, "order": 3, "descHash": 3767972084 },
{ "subId": 300403, "order": 4, "descHash": 2917540588 },
{ "subId": 300404, "order": 5, "descHash": 4249003332 },
{ "subId": 300405, "order": 6, "descHash": 4124681092 },
{ "subId": 300406, "order": 7, "descHash": 1699696756 },
{ "subId": 300407, "order": 8, "descHash": 3474459604 },
{ "subId": 300408, "order": 9, "descHash": 2416593228 },
{ "subId": 300409, "order": 10, "descHash": 2833611100 },
{ "subId": 300421, "order": 11, "hidden": true, "test": true, "descHash": 2970181860 },
{ "subId": 300410, "order": 12, "descHash": 3648670060 },
{ "subId": 300411, "order": 13, "descHash": 1502314636 },
{ "subId": 300412, "order": 14, "descHash": 2163462636 },
{ "subId": 300413, "order": 15, "descHash": 1543425252 },
{ "subId": 300414, "order": 16, "descHash": 3346637068 },
{ "subId": 300415, "order": 17, "descHash": 3213804844 },
{ "subId": 300416,
gitextract_xxt0u2o3/ ├── .editorconfig ├── .eslintignore ├── .eslintrc-auto-import.json ├── .eslintrc.cjs ├── .github/ │ └── workflows/ │ ├── alpha.yml │ ├── check.yml │ ├── deploy.yml │ ├── release.yml │ └── updater.yml ├── .gitignore ├── .npmrc ├── .prettierrc ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── CHANGELOG.en-US.md ├── CHANGELOG.zh-CN.md ├── LICENSE ├── README.md ├── README_zh-CN.md ├── build/ │ ├── config/ │ │ ├── index.ts │ │ └── utils.ts │ ├── index.ts │ └── plugins/ │ ├── compress.ts │ ├── https.ts │ ├── i18n.ts │ ├── index.ts │ ├── unocss.ts │ ├── unplugin.ts │ └── vue.ts ├── docs/ │ ├── mod.md │ └── mod_zh-CN.md ├── index.html ├── package.json ├── renovate.json ├── scripts/ │ └── updater.ts ├── src/ │ ├── App.vue │ ├── components/ │ │ ├── MyButton.vue │ │ ├── MyDivider.vue │ │ ├── MyInputGroup.vue │ │ ├── MySelect.vue │ │ ├── MySwitch.vue │ │ ├── NaiveProvider.vue │ │ ├── SelectFile.vue │ │ ├── ServerInput.vue │ │ └── index.ts │ ├── http/ │ │ ├── api.ts │ │ ├── axios.ts │ │ ├── index.ts │ │ ├── request.ts │ │ └── reqwest.ts │ ├── i18n/ │ │ ├── data/ │ │ │ ├── common/ │ │ │ │ ├── artifactIds.ts │ │ │ │ ├── quest.ts │ │ │ │ ├── questInfo.json │ │ │ │ ├── transform.ts │ │ │ │ └── weatherIds.ts │ │ │ ├── en/ │ │ │ │ ├── artifactInfo.json │ │ │ │ ├── avatarItem.json │ │ │ │ ├── index.ts │ │ │ │ ├── materialItem.json │ │ │ │ ├── monsterItem.json │ │ │ │ ├── questItem.json │ │ │ │ ├── route.ts │ │ │ │ ├── sceneItem.json │ │ │ │ ├── weaponItem.json │ │ │ │ └── weatherItem.json │ │ │ ├── es/ │ │ │ │ ├── artifactInfo.json │ │ │ │ ├── avatarItem.json │ │ │ │ ├── index.ts │ │ │ │ ├── materialItem.json │ │ │ │ ├── monsterItem.json │ │ │ │ ├── questItem.json │ │ │ │ ├── route.ts │ │ │ │ ├── sceneItem.json │ │ │ │ ├── weaponItem.json │ │ │ │ └── weatherItem.json │ │ │ ├── ja-JP/ │ │ │ │ ├── artifactInfo.json │ │ │ │ ├── avatarItem.json │ │ │ │ ├── index.ts │ │ │ │ ├── materialItem.json │ │ │ │ ├── monsterItem.json │ │ │ │ ├── questItem.json │ │ │ │ ├── route.ts │ │ │ │ ├── sceneItem.json │ │ │ │ ├── weaponItem.json │ │ │ │ └── weatherItem.json │ │ │ └── zh-CN/ │ │ │ ├── artifactInfo.json │ │ │ ├── avatarItem.json │ │ │ ├── index.ts │ │ │ ├── materialItem.json │ │ │ ├── monsterItem.json │ │ │ ├── questItem.json │ │ │ ├── route.ts │ │ │ ├── sceneItem.json │ │ │ ├── weaponItem.json │ │ │ └── weatherItem.json │ │ ├── index.ts │ │ └── locales/ │ │ ├── de.json │ │ ├── en.json │ │ ├── es.json │ │ ├── fr.json │ │ ├── id-ID.json │ │ ├── ja-JP.json │ │ ├── ko-KR.json │ │ ├── pt.json │ │ ├── ru-RU.json │ │ ├── th-TH.json │ │ ├── vi-VN.json │ │ ├── zh-CN.json │ │ └── zh-TW.json │ ├── layout/ │ │ ├── components/ │ │ │ ├── Language.vue │ │ │ ├── Main.vue │ │ │ ├── Menu.vue │ │ │ ├── Theme.vue │ │ │ └── index.ts │ │ └── index.vue │ ├── main.ts │ ├── router/ │ │ ├── constant-routes.ts │ │ ├── index.ts │ │ └── modules/ │ │ ├── about.ts │ │ ├── artifact.ts │ │ ├── common.ts │ │ ├── index.ts │ │ ├── item.ts │ │ ├── launcher.ts │ │ ├── mod.ts │ │ ├── quest.ts │ │ ├── setting.ts │ │ └── windy.ts │ ├── stores/ │ │ ├── index.ts │ │ └── modules/ │ │ ├── app.ts │ │ ├── index.ts │ │ └── setting.ts │ ├── styles/ │ │ ├── css/ │ │ │ ├── common.css │ │ │ ├── index.css │ │ │ └── reset.css │ │ └── scss/ │ │ ├── index.scss │ │ └── naive-ui.scss │ ├── types/ │ │ ├── api.d.ts │ │ ├── auto-import.d.ts │ │ ├── business.d.ts │ │ ├── components.d.ts │ │ ├── env.d.ts │ │ ├── message.d.ts │ │ ├── naive-ui.d.ts │ │ ├── route.d.ts │ │ ├── setting.d.ts │ │ └── utils.d.ts │ ├── utils/ │ │ ├── index.ts │ │ ├── invoke.ts │ │ ├── is-tauri.ts │ │ ├── msg.ts │ │ ├── naive-ui.ts │ │ ├── parse.ts │ │ ├── regex.ts │ │ ├── route.ts │ │ └── storage.ts │ └── views/ │ ├── about/ │ │ └── index.vue │ ├── artifact/ │ │ ├── constant.ts │ │ └── index.vue │ ├── common/ │ │ └── index.vue │ ├── item/ │ │ └── index.vue │ ├── launcher/ │ │ ├── components/ │ │ │ ├── Changelog.vue │ │ │ ├── StartupItems.vue │ │ │ ├── Updater.vue │ │ │ └── index.ts │ │ └── index.vue │ ├── mod/ │ │ ├── constant.ts │ │ ├── download/ │ │ │ ├── components/ │ │ │ │ ├── DownloadQueue.vue │ │ │ │ ├── SettingModal.vue │ │ │ │ └── index.ts │ │ │ ├── index.vue │ │ │ └── interface.ts │ │ ├── index.vue │ │ └── local/ │ │ ├── components/ │ │ │ ├── SettingModal.vue │ │ │ └── index.ts │ │ └── index.vue │ ├── quest/ │ │ └── index.vue │ ├── seed/ │ │ └── index.vue │ └── setting/ │ └── index.vue ├── src-tauri/ │ ├── .gitignore │ ├── Cargo.toml │ ├── build.rs │ ├── icons/ │ │ └── icon.icns │ ├── src/ │ │ ├── cmd/ │ │ │ ├── file.rs │ │ │ ├── http.rs │ │ │ ├── lib.rs │ │ │ ├── proxy.rs │ │ │ └── system.rs │ │ ├── cmd.rs │ │ └── main.rs │ └── tauri.conf.json ├── tsconfig.json ├── uno.config.ts ├── vercel.json └── vite.config.ts
SYMBOL INDEX (161 symbols across 39 files)
FILE: build/config/utils.ts
constant INVALID_CHAR_REGEX (line 2) | const INVALID_CHAR_REGEX = /[\x00-\x1F\x7F<>*#"{}|^[\]`;?:&=+$,]/g
constant DRIVE_LETTER_REGEX (line 3) | const DRIVE_LETTER_REGEX = /^[a-z]:/i
function sanitizeFileName (line 5) | function sanitizeFileName(name: string): string {
FILE: build/plugins/index.ts
function setupVitePlugins (line 12) | function setupVitePlugins(env: ImportMetaEnv): PluginOption[] {
FILE: scripts/updater.ts
function updater (line 8) | async function updater() {
function getSignature (line 99) | async function getSignature(url: string) {
FILE: src-tauri/build.rs
function main (line 1) | fn main() {
FILE: src-tauri/src/cmd.rs
type CmdResult (line 13) | type CmdResult<T = ()> = Result<T, String>;
type MyError (line 26) | pub enum MyError {
method fmt (line 32) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
function http (line 43) | pub async fn http(
function get_mod_list (line 55) | pub fn get_mod_list(path: String) -> HashMap<String, ModInfo> {
function rename (line 60) | pub fn rename(path: String, new_path: String) -> CmdResult {
function write_file (line 66) | pub fn write_file(path: String, contents: String) -> CmdResult {
function download (line 72) | pub async fn download(url: String, path: String, contents: String) -> Cm...
function install_ca (line 98) | pub fn install_ca() -> CmdResult<String> {
function set_proxy_addr (line 105) | pub fn set_proxy_addr(addr: String) {
function proxy_start (line 110) | pub async fn proxy_start(port: u16) -> CmdResult {
function proxy_end (line 117) | pub async fn proxy_end() -> CmdResult {
function run_program (line 123) | pub async fn run_program(path: String, args: Option<String>) -> CmdResul...
function run_jar (line 129) | pub async fn run_jar(path: String) -> CmdResult {
function execute_luac (line 135) | pub fn execute_luac(path: String, contents: String) -> CmdResult<String> {
function get_enable_state (line 141) | pub fn get_enable_state() -> bool {
FILE: src-tauri/src/cmd/file.rs
type ModInfo (line 15) | pub struct ModInfo {
function get_mod_list (line 21) | pub fn get_mod_list(path: String) -> HashMap<String, ModInfo> {
function get_info (line 57) | fn get_info(target: &Path, path: &Path) -> Option<(String, ModInfo)> {
function is_deep_merge (line 84) | fn is_deep_merge(path: &Path, ini: Option<&OsStr>) -> Option<bool> {
function rename (line 102) | pub fn rename(path: String, new_path: String) -> Result<(), Box<dyn Erro...
function write_file (line 108) | pub fn write_file(path: String, contents: String) -> Result<(), Box<dyn ...
constant EXTS (line 115) | const EXTS: &'static [&'static str] = &["png", "jpg", "jpeg", "jfif"];
function read_local_img (line 117) | fn read_local_img(path: &Path) -> Result<Vec<String>, Box<dyn Error>> {
function unzip (line 136) | pub fn unzip(path: &Path) -> Result<(), Box<dyn Error>> {
function unrar (line 159) | pub fn unrar(path: &Path) -> Result<(), Box<dyn Error>> {
function un7z (line 177) | pub fn un7z(path: &Path) -> Result<(), Box<dyn Error>> {
FILE: src-tauri/src/cmd/http.rs
function request (line 9) | pub async fn request(
function download (line 53) | pub async fn download(url: String, path: &Path) -> Result<(), Box<dyn Er...
type Headers (line 64) | pub struct Headers {
type Proxy (line 71) | pub struct Proxy {
FILE: src-tauri/src/cmd/proxy.rs
function generate_ca (line 24) | pub fn generate_ca() -> Result<(), Box<dyn Error>> {
function install_ca (line 51) | pub fn install_ca() -> Result<String, Box<dyn Error>> {
function install_ca (line 60) | pub fn install_ca() -> Result<String, Box<dyn Error>> {
function install_ca (line 71) | pub fn install_ca() -> Result<String, Box<dyn Error>> {
function set_proxy_addr (line 89) | pub fn set_proxy_addr(addr: String) {
function add_setting (line 95) | pub fn add_setting(port: u16) -> Result<(), Box<dyn Error>> {
type ProxyHandler (line 110) | struct ProxyHandler;
method handle_request (line 114) | async fn handle_request(
method handle_response (line 133) | async fn handle_response(
function start (line 145) | pub fn start(port: u16) -> Result<(), Box<dyn Error>> {
function end (line 173) | pub fn end() -> Result<(), Box<dyn Error>> {
function get_enable_state (line 185) | pub fn get_enable_state() -> bool {
function stop_proxy (line 189) | pub fn stop_proxy() -> Result<(), Box<dyn Error>> {
function before_exit (line 214) | pub fn before_exit() {
function shutdown_signal (line 218) | async fn shutdown_signal() {
function get_ca_path (line 224) | fn get_ca_path() -> Result<PathBuf, Box<dyn Error>> {
function get_ca_path_with (line 231) | fn get_ca_path_with(file: &str) -> Result<PathBuf, Box<dyn Error>> {
FILE: src-tauri/src/cmd/system.rs
function run_program (line 15) | pub fn run_program(path: String, args: Option<String>) -> Result<String,...
function run_program (line 29) | pub fn run_program(path: String, args: Option<String>) -> Result<String,...
function run_jar (line 36) | pub fn run_jar(path: String) -> Result<(), Box<dyn Error>> {
function run_jar (line 49) | pub fn run_jar(path: String) -> Result<(), Box<dyn Error>> {
function execute_luac (line 56) | pub fn execute_luac(path: String, contents: String) -> Result<String, Bo...
function execute_luac (line 71) | pub fn execute_luac(path: String, contents: String) -> Result<String, Bo...
function return_output (line 78) | fn return_output(output: Output) -> Result<String, Box<dyn Error>> {
function write_lua (line 88) | fn write_lua(contents: String) -> Result<PathBuf, Box<dyn Error>> {
function return_luac (line 102) | fn return_luac(child: Child, path: &str) -> Result<String, Box<dyn Error...
FILE: src-tauri/src/main.rs
function main (line 13) | fn main() {
FILE: src/http/api.ts
function adminAuth (line 7) | function adminAuth(adminVoucher: string) {
function adminCreateAccount (line 11) | function adminCreateAccount(params: Param.Account) {
function adminCommand (line 15) | function adminCommand(command: string) {
function mailVerifyCode (line 19) | function mailVerifyCode(username: string) {
function playerAuthByVerifyCode (line 23) | function playerAuthByVerifyCode(username: string, verifyCode: string) {
function playerAuthByPassword (line 27) | function playerAuthByPassword(username: string, password: string) {
function playerCommand (line 31) | function playerCommand(command: string) {
function levelUpAll (line 36) | function levelUpAll(type: number) {
function getProps (line 41) | function getProps() {
function cdr (line 45) | function cdr() {
function seed (line 50) | function seed(contents: string) {
function checkToken (line 54) | function checkToken() {
FILE: src/http/axios.ts
class CustomAxiosInstance (line 6) | class CustomAxiosInstance {
method constructor (line 9) | constructor(axiosConfig: AxiosRequestConfig) {
method setInterceptor (line 14) | setInterceptor() {
function createRequest (line 52) | function createRequest(axiosConfig: AxiosRequestConfig) {
FILE: src/http/request.ts
function request (line 5) | function request() {
FILE: src/http/reqwest.ts
type Method (line 6) | type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OP...
function reqwest (line 8) | async function reqwest<T>(method: Method, api: string, params?: any) {
FILE: src/i18n/data/common/quest.ts
type QuestType (line 3) | type QuestType = 'WQ' | 'IQ' | 'LQ'
type QuestInfo (line 5) | type QuestInfo = {
function parseQuestItem (line 25) | function parseQuestItem(questItem: Record<string, string>, tags: string[...
FILE: src/i18n/data/common/transform.ts
type Param (line 5) | interface Param {
type ArtifactText (line 22) | interface ArtifactText {
type MonsterType (line 29) | type MonsterType =
type WeaponType (line 36) | type WeaponType = 'WEAPON_SWORD_ONE_HAND' | 'WEAPON_CLAYMORE' | 'WEAPON_...
type MaterialType (line 38) | type MaterialType =
function transformItems (line 86) | function transformItems({
FILE: src/i18n/index.ts
function setupI18n (line 18) | function setupI18n(app: App) {
FILE: src/main.ts
function setupApp (line 12) | async function setupApp() {
FILE: src/router/index.ts
function setupRouter (line 13) | async function setupRouter(app: App) {
FILE: src/stores/index.ts
function setupStore (line 5) | function setupStore(app: App) {
FILE: src/stores/modules/app.ts
type AppState (line 4) | interface AppState {
method updateFontSize (line 15) | updateFontSize(fontSize: number) {
FILE: src/stores/modules/setting.ts
method initSettings (line 58) | initSettings(settings: NullablePartial<Setting>) {
method updateServer (line 82) | async updateServer() {
method updateToken (line 97) | async updateToken(token: string) {
method updateAdminToken (line 101) | async updateAdminToken(admin_token: string) {
method updateLocale (line 105) | async updateLocale() {
method updateTheme (line 108) | async updateTheme() {
method updateModPath (line 117) | async updateModPath(path?: string) {
method updateProxy (line 123) | async updateProxy() {
method updateCheckTime (line 126) | async updateCheckTime(lastCheckTime: number) {
method updateGamePath (line 130) | async updateGamePath(path?: string) {
method updateAkebiPath (line 135) | async updateAkebiPath(path?: string) {
method updateLauncher (line 140) | async updateLauncher() {
method updateGCPath (line 143) | async updateGCPath(path?: string) {
method updateLuacPath (line 148) | async updateLuacPath(path: string) {
method updateAlwaysOnTop (line 152) | async updateAlwaysOnTop() {
FILE: src/types/api.d.ts
type ApiResult (line 2) | interface ApiResult<T> {
type Account (line 12) | interface Account {
type Props (line 18) | interface Props {
FILE: src/types/business.d.ts
type Mod (line 1) | interface Mod extends ModBasic {
type ModBasic (line 9) | interface ModBasic {
FILE: src/types/components.d.ts
type GlobalComponents (line 9) | interface GlobalComponents {
FILE: src/types/env.d.ts
type ImportMetaEnv (line 4) | interface ImportMetaEnv {
FILE: src/types/message.d.ts
type Message (line 1) | interface Message {
type Item (line 19) | type Item = {
type QuestItem (line 25) | type QuestItem = {
FILE: src/types/naive-ui.d.ts
type Window (line 1) | interface Window {
FILE: src/types/route.d.ts
type Base (line 4) | interface Base {
type Config (line 16) | interface Config extends Base {
type Module (line 26) | type Module = Record<string, { default: Config | undefined }>
type RecordRaw (line 29) | interface RecordRaw extends Base {
type Meta (line 40) | interface Meta {
type Menu (line 52) | type Menu = {
FILE: src/types/setting.d.ts
type Setting (line 1) | interface Setting {
type LocaleModule (line 47) | type LocaleModule = Record<string, { default: unknown }>
FILE: src/types/utils.d.ts
type NullablePartial (line 2) | type NullablePartial<T> = {
type Optional (line 7) | type Optional<T extends Record<string, any>, K extends keyof T = keyof T...
FILE: src/utils/invoke.ts
function select_file (line 6) | function select_file<T extends OpenDialogOptions = OpenDialogOptions>(op...
type ModListResult (line 12) | type ModListResult = Record<string, { contents: string; name: string; lo...
function get_mod_list (line 14) | async function get_mod_list(path?: string): Promise<Mod[]> {
function convertModBasic (line 36) | function convertModBasic(contents: string, name: string) {
function write_file (line 56) | function write_file(mod: Mod) {
function download (line 62) | function download(url: string, path: string, mod: ModBasic) {
FILE: src/utils/msg.ts
constant ERROR_MSG_DURATION (line 5) | const ERROR_MSG_DURATION = 2000
function showErrorMsg (line 12) | function showErrorMsg(code: number, msg: string): void {
function showSuccessMsg (line 24) | function showSuccessMsg(resultOrCode?: ApiResult<any> | undefined | null...
FILE: src/utils/naive-ui.ts
function filterIgnoreCase (line 3) | function filterIgnoreCase(pattern: string, _: CascaderOption, path: Casc...
FILE: src/utils/parse.ts
function parseMd (line 1) | function parseMd(text: string, limit?: number) {
FILE: src/utils/regex.ts
function testUrlOrIP (line 1) | function testUrlOrIP(str: string) {
FILE: src/utils/route.ts
function transformModeleToRoute (line 6) | function transformModeleToRoute(module: Route.Module): Route.RecordRaw[] {
function transformConfigToRoute (line 17) | function transformConfigToRoute(configs: Route.Config[] | Optional<Route...
function transformIcon (line 37) | function transformIcon(
FILE: src/utils/storage.ts
function setSetting (line 7) | async function setSetting(key: string, value: any) {
function getSetting (line 20) | async function getSetting<T>(key: string) {
function saveSetting (line 37) | async function saveSetting() {
function remove (line 45) | async function remove(key: string) {
function clear (line 57) | async function clear() {
function loadClientSetting (line 65) | async function loadClientSetting() {
function loadWebSetting (line 100) | async function loadWebSetting() {
FILE: src/views/mod/download/interface.ts
type ModDataBody (line 1) | interface ModDataBody {
type ModData (line 19) | interface ModData {
type ProfilePage (line 31) | interface ProfilePage {
type InstallOption (line 42) | interface InstallOption {
Condensed preview — 195 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,707K chars).
[
{
"path": ".editorconfig",
"chars": 147,
"preview": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_"
},
{
"path": ".eslintignore",
"chars": 209,
"preview": "*.sh\nnode_modules\nlib\n*.md\n*.woff\n*.ttf\n.idea\n/dist/\n/public\n/docs\n.local\npackage.json\npnpm-lock.yaml\n!.env-config.ts\nsr"
},
{
"path": ".eslintrc-auto-import.json",
"chars": 1749,
"preview": "{\n \"globals\": {\n \"EffectScope\": true,\n \"acceptHMRUpdate\": true,\n \"computed\": true,\n \"createApp\": true,\n "
},
{
"path": ".eslintrc.cjs",
"chars": 835,
"preview": "module.exports = {\n root: true,\n env: {\n browser: true,\n node: true,\n es2021: true\n },\n parser: 'vue-eslint"
},
{
"path": ".github/workflows/alpha.yml",
"chars": 1325,
"preview": "name: Alpha\n\non:\n workflow_dispatch:\n\njobs:\n release:\n strategy:\n fail-fast: false\n matrix:\n platf"
},
{
"path": ".github/workflows/check.yml",
"chars": 591,
"preview": "name: Check\n\non:\n push:\n branches: [main, dev]\n pull_request:\n branches: [main, dev]\n\n workflow_dispatch:\n\njobs"
},
{
"path": ".github/workflows/deploy.yml",
"chars": 688,
"preview": "name: Deploy\n\non:\n push:\n branches: ['main']\n\n workflow_dispatch:\n\njobs:\n build:\n runs-on: ubuntu-latest\n st"
},
{
"path": ".github/workflows/release.yml",
"chars": 1930,
"preview": "name: Release\n\non:\n push:\n tags:\n - 'v*'\n\njobs:\n release:\n strategy:\n fail-fast: false\n matrix:\n "
},
{
"path": ".github/workflows/updater.yml",
"chars": 591,
"preview": "name: Updater\n\non:\n release:\n types: [published]\n\n workflow_dispatch:\n\njobs:\n release-update:\n runs-on: macos-l"
},
{
"path": ".gitignore",
"chars": 333,
"preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
},
{
"path": ".npmrc",
"chars": 22,
"preview": "shamefully-hoist=true\n"
},
{
"path": ".prettierrc",
"chars": 169,
"preview": "{\n \"printWidth\": 120,\n \"tabWidth\": 2,\n \"semi\": false,\n \"singleQuote\": true,\n \"trailingComma\": \"none\",\n \"vueIndentS"
},
{
"path": ".vscode/extensions.json",
"chars": 302,
"preview": "{\n \"recommendations\": [\n \"Vue.volar\",\n \"Vue.vscode-typescript-vue-plugin\",\n \"hollowtree.vue-snippets\",\n \"db"
},
{
"path": ".vscode/settings.json",
"chars": 559,
"preview": "{\n \"editor.formatOnSave\": true,\n \"editor.codeActionsOnSave\": [\"source.fixAll.eslint\"],\n \"npm.packageManager\": \"pnpm\","
},
{
"path": "CHANGELOG.en-US.md",
"chars": 4588,
"preview": "# Changelog\n\n## [1.5.7] - 2023-02-09\n\n### Features\n\n- update some data to 3.4\n\n## [1.5.6] - 2023-01-07\n\n### Bug Fixes\n\n-"
},
{
"path": "CHANGELOG.zh-CN.md",
"chars": 3147,
"preview": "# 变更日志\n\n## [1.5.7] - 2023-02-09\n\n### 特性\n\n- 更新部分数据到 3.4\n\n## [1.5.6] - 2023-01-07\n\n### 修复 Bug\n\n- 复选框样式错误\n\n- 部分 mods 未生成 mo"
},
{
"path": "LICENSE",
"chars": 1061,
"preview": "MIT License\n\nCopyright (c) 2022 null\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof th"
},
{
"path": "README.md",
"chars": 4197,
"preview": "<h1 align=\"center\">Grasscutter Tools</h1>\n\nEnglish | [简体中文](README_zh-CN.md)\n\n\n | 简体中文\n\n\n =>\n ViteCompression({\n di"
},
{
"path": "build/plugins/https.ts",
"chars": 75,
"preview": "import basicSsl from '@vitejs/plugin-basic-ssl'\n\nexport default basicSsl()\n"
},
{
"path": "build/plugins/i18n.ts",
"chars": 168,
"preview": "import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'\nimport path from 'path'\n\nexport default VueI18nPlugin({\n in"
},
{
"path": "build/plugins/index.ts",
"chars": 404,
"preview": "import type { PluginOption } from 'vite'\nimport vue from './vue'\nimport unplugin from './unplugin'\nimport unocss from '."
},
{
"path": "build/plugins/unocss.ts",
"chars": 58,
"preview": "import unocss from 'unocss/vite'\n\nexport default unocss()\n"
},
{
"path": "build/plugins/unplugin.ts",
"chars": 1223,
"preview": "import Icons from 'unplugin-icons/vite'\nimport { FileSystemIconLoader } from 'unplugin-icons/loaders'\nimport Components "
},
{
"path": "build/plugins/vue.ts",
"chars": 86,
"preview": "import vue from '@vitejs/plugin-vue'\n\nconst plugins = [vue()]\n\nexport default plugins\n"
},
{
"path": "docs/mod.md",
"chars": 1936,
"preview": "About mods, please go to the [GIMI](https://github.com/SilentNightSound/GI-Model-Importer) project to understand the bas"
},
{
"path": "docs/mod_zh-CN.md",
"chars": 1338,
"preview": "关于 mod,请前往 [GIMI](https://github.com/SilentNightSound/GI-Model-Importer) 项目了解基础知识,本项目 mod 功能的使用方法:选择 3DMigoto Loader.exe"
},
{
"path": "index.html",
"chars": 337,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" href=\"/favicon.ico\" />\n <"
},
{
"path": "package.json",
"chars": 2309,
"preview": "{\n \"name\": \"grasscutter-tools\",\n \"type\": \"module\",\n \"private\": true,\n \"version\": \"1.0.0\",\n \"scripts\": {\n \"dev\": "
},
{
"path": "renovate.json",
"chars": 107,
"preview": "{\n \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n \"extends\": [\n \"config:base\"\n ]\n}\n"
},
{
"path": "scripts/updater.ts",
"chars": 3395,
"preview": "import path from 'path'\nimport fs from 'fs-extra'\nimport fetch from 'node-fetch'\nimport { getOctokit, context } from '@a"
},
{
"path": "src/App.vue",
"chars": 3793,
"preview": "<template>\n <n-config-provider :locale=\"locale\" :date-locale=\"dateLocale\" :theme-overrides=\"themeOverrides\" :theme=\"the"
},
{
"path": "src/components/MyButton.vue",
"chars": 2071,
"preview": "<!-- 按钮+图标+悬浮信息文字or弹出确认 -->\n<template>\n <n-popconfirm v-if=\"$slots.popconfirm\" :show-icon=\"false\" @positive-click=\"ckic"
},
{
"path": "src/components/MyDivider.vue",
"chars": 647,
"preview": "<!-- 分割线+标题+图标 -->\n<template>\n <n-divider v-if=\"!vertical\" class=\"mb-2! mt-0! px-10%\" :dashed=\"dashed\">\n <span v-if="
},
{
"path": "src/components/MyInputGroup.vue",
"chars": 1112,
"preview": "<template>\n <n-input-group>\n <n-input-group-label>{{ label }}</n-input-group-label>\n <n-input-number\n :value"
},
{
"path": "src/components/MySelect.vue",
"chars": 2095,
"preview": "<!-- 二次封装n-select组件,增加最大可选数量限制 -->\n<template>\n <n-select v-model:value=\"substatArray\" :options=\"options\" v-bind=\"$attrs"
},
{
"path": "src/components/MySwitch.vue",
"chars": 1143,
"preview": "<template>\n <div class=\"flex justify-center\">\n <span class=\"text-4 mr-3\">{{ text }}</span>\n <n-switch :value=\"mod"
},
{
"path": "src/components/NaiveProvider.vue",
"chars": 737,
"preview": "<template>\n <n-loading-bar-provider>\n <n-dialog-provider>\n <n-notification-provider placement=\"bottom-right\">\n "
},
{
"path": "src/components/SelectFile.vue",
"chars": 461,
"preview": "<template>\n <n-input-group>\n <n-input :value=\"value\" :placeholder=\"placeholder\" />\n <n-tooltip>\n <template #"
},
{
"path": "src/components/ServerInput.vue",
"chars": 1732,
"preview": "<template>\n <n-input-group>\n <n-popselect v-model:value=\"server.protocol\" :options=\"protocolOptions\">\n <n-input"
},
{
"path": "src/components/index.ts",
"chars": 329,
"preview": "import MyButton from './MyButton.vue'\nimport MyDivider from './MyDivider.vue'\nimport MyInputGroup from './MyInputGroup.v"
},
{
"path": "src/http/api.ts",
"chars": 1773,
"preview": "import request from '@/http/request'\nimport { useSettingStore } from '@/stores'\nimport router from '@/router'\nimport i18"
},
{
"path": "src/http/axios.ts",
"chars": 1972,
"preview": "import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios'\nimport { useSettingStore } from '@/stores'\nim"
},
{
"path": "src/http/index.ts",
"chars": 22,
"preview": "export * from './api'\n"
},
{
"path": "src/http/request.ts",
"chars": 535,
"preview": "import axiosRequest from './axios'\nimport reqwest from './reqwest'\nimport isTauri from '@/utils/is-tauri'\n\nfunction requ"
},
{
"path": "src/http/reqwest.ts",
"chars": 851,
"preview": "import { invoke } from '@tauri-apps/api/tauri'\nimport { useSettingStore } from '@/stores'\nimport { showErrorMsg } from '"
},
{
"path": "src/i18n/data/common/artifactIds.ts",
"chars": 1325,
"preview": "export const artifactIds: Record<number, number[]> = {\n 214001: [71544, 71524, 71554, 71514, 71534],\n 214002: [72544, "
},
{
"path": "src/i18n/data/common/quest.ts",
"chars": 1090,
"preview": "import questInfo from './questInfo.json?raw'\n\ntype QuestType = 'WQ' | 'IQ' | 'LQ'\n\ntype QuestInfo = {\n id: number\n typ"
},
{
"path": "src/i18n/data/common/questInfo.json",
"chars": 1302284,
"preview": "[\n {\n \"id\": 303,\n \"hidden\": true,\n \"titleHash\": 3245935097,\n \"children\": [\n { \"subId\": 30302, \"order\":"
},
{
"path": "src/i18n/data/common/transform.ts",
"chars": 4278,
"preview": "import { artifactIds } from './artifactIds'\nimport { parseQuestItem } from './quest'\nimport { weatherIds } from './weath"
},
{
"path": "src/i18n/data/common/weatherIds.ts",
"chars": 6558,
"preview": "export const weatherIds = [\n [\n 0, 1, 3, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1008, 1009, 1010, 1011, 1012, 200"
},
{
"path": "src/i18n/data/en/artifactInfo.json",
"chars": 9358,
"preview": "[\n {\n \"id\": 214001,\n \"name\": \"Blizzard Strayer\",\n \"desc1\": \"Cryo DMG Bonus +15%\",\n \"desc2\": \"When a charact"
},
{
"path": "src/i18n/data/en/avatarItem.json",
"chars": 2595,
"preview": "{\n \"10000001\": \"Kate\",\n \"10000002\": \"Kamisato Ayaka\",\n \"10000003\": \"Jean\",\n \"10000005\": \"Traveler (Male)\",\n \"100000"
},
{
"path": "src/i18n/data/en/index.ts",
"chars": 2901,
"preview": "import { type MonsterType, type WeaponType, type MaterialType, transformItems } from '../common/transform'\nimport artifa"
},
{
"path": "src/i18n/data/en/materialItem.json",
"chars": 172545,
"preview": "{\n \"undefined\": {\n \"101\": \"Character EXP\",\n \"102\": \"Adventure EXP\",\n \"103\": \"Stardust\",\n \"104\": \"Starglitte"
},
{
"path": "src/i18n/data/en/monsterItem.json",
"chars": 43699,
"preview": "{\n \"MONSTER_ORDINARY\": {\n \"20010101\": \"Dendro Slime\",\n \"20010201\": \"Large Dendro Slime\",\n \"20010202\": \"Large D"
},
{
"path": "src/i18n/data/en/questItem.json",
"chars": 524971,
"preview": "{\n \"9340\": \"Talk to Swan\",\n \"265564\": \"Find the treasure area indicated by the Illumiscreen\",\n \"572868\": \"Try and con"
},
{
"path": "src/i18n/data/en/route.ts",
"chars": 198,
"preview": "export const route: Message['route'] = {\n launcher: 'Launcher',\n common: 'Common',\n artifact: 'Artifact',\n item: 'It"
},
{
"path": "src/i18n/data/en/sceneItem.json",
"chars": 38200,
"preview": "{\n \"1\": \"BigWorld_LevelStreaming\",\n \"2\": \"BigWorld_LevelStreaming\",\n \"3\": \"BigWorld_LevelStreaming\",\n \"4\": \"LostPara"
},
{
"path": "src/i18n/data/en/weaponItem.json",
"chars": 5549,
"preview": "{\n \"WEAPON_SWORD_ONE_HAND\": {\n \"11101\": \"Dull Blade\",\n \"11201\": \"Silver Sword\",\n \"11301\": \"Cool Steel\",\n \"1"
},
{
"path": "src/i18n/data/en/weatherItem.json",
"chars": 34483,
"preview": "{\n \"1\": \"BigWorld_Md_General\",\n \"2\": \"BigWorld_Md_WindDragon\",\n \"3\": \"BigWorld_Md_City_Storm\",\n \"4\": \"Monster_Monste"
},
{
"path": "src/i18n/data/es/artifactInfo.json",
"chars": 10534,
"preview": "[\n {\n \"id\": 214001,\n \"name\": \"Nómada del Invierno\",\n \"desc1\": \"Bono de Daño Cryo +15%.\",\n \"desc2\": \"Aumenta"
},
{
"path": "src/i18n/data/es/avatarItem.json",
"chars": 2805,
"preview": "{\n \"10000001\": \"Kate\",\n \"10000002\": \"Kamisato Ayaka\",\n \"10000003\": \"Jean\",\n \"10000005\": \"Viajero\",\n \"10000006\": \"Li"
},
{
"path": "src/i18n/data/es/index.ts",
"chars": 2901,
"preview": "import { type MonsterType, type WeaponType, type MaterialType, transformItems } from '../common/transform'\nimport artifa"
},
{
"path": "src/i18n/data/es/materialItem.json",
"chars": 187743,
"preview": "{\n \"undefined\": {\n \"101\": \"EXP de Personaje\",\n \"102\": \"EXP de Aventura\",\n \"103\": \"Polvo estelar\",\n \"104\": \""
},
{
"path": "src/i18n/data/es/monsterItem.json",
"chars": 50807,
"preview": "{\n \"MONSTER_ORDINARY\": {\n \"20010101\": \"Slime Dendro (Slime_Grass_02)\",\n \"20010201\": \"Slime Gigante Dendro (Slime_"
},
{
"path": "src/i18n/data/es/questItem.json",
"chars": 557243,
"preview": "{\n \"9340\": \"Habla con Swan\",\n \"265564\": \"Encuentra los tesoros indicados por las linternas giratorias\",\n \"572868\": \"I"
},
{
"path": "src/i18n/data/es/route.ts",
"chars": 198,
"preview": "export const route: Message['route'] = {\n launcher: 'Launcher',\n common: 'Common',\n artifact: 'Artifact',\n item: 'It"
},
{
"path": "src/i18n/data/es/sceneItem.json",
"chars": 39347,
"preview": "{\n \"1\": \"BigWorld_LevelStreaming\",\n \"2\": \"BigWorld_LevelStreaming\",\n \"3\": \"BigWorld_LevelStreaming\",\n \"4\": \"LostPara"
},
{
"path": "src/i18n/data/es/weaponItem.json",
"chars": 6065,
"preview": "{\n \"WEAPON_SWORD_ONE_HAND\": {\n \"11101\": \"Hoja Desafilada\",\n \"11201\": \"Espada Plateada\",\n \"11301\": \"Hoja Fría\","
},
{
"path": "src/i18n/data/es/weatherItem.json",
"chars": 34483,
"preview": "{\n \"1\": \"BigWorld_Md_General\",\n \"2\": \"BigWorld_Md_WindDragon\",\n \"3\": \"BigWorld_Md_City_Storm\",\n \"4\": \"Monster_Monste"
},
{
"path": "src/i18n/data/ja-JP/artifactInfo.json",
"chars": 4912,
"preview": "[\n {\n \"id\": 214001,\n \"name\": \"氷風を彷徨う勇士\",\n \"desc1\": \"氷元素ダメージ+15%。\",\n \"desc2\": \"氷元素の影響を受けている敵を攻撃した場合、会心率+20%。"
},
{
"path": "src/i18n/data/ja-JP/avatarItem.json",
"chars": 2084,
"preview": "{\n \"10000001\": \"ケイト\",\n \"10000002\": \"神里綾華\",\n \"10000003\": \"ジン\",\n \"10000005\": \"旅人\",\n \"10000006\": \"リサ\",\n \"10000007\": \""
},
{
"path": "src/i18n/data/ja-JP/index.ts",
"chars": 2535,
"preview": "import { type MonsterType, type WeaponType, type MaterialType, transformItems } from '../common/transform'\nimport artifa"
},
{
"path": "src/i18n/data/ja-JP/materialItem.json",
"chars": 113983,
"preview": "{\n \"undefined\": {\n \"101\": \"キャラクター経験値\",\n \"102\": \"冒険経験\",\n \"103\": \"スターダスト\",\n \"104\": \"スターライト\",\n \"105\": \"好感度経"
},
{
"path": "src/i18n/data/ja-JP/monsterItem.json",
"chars": 41843,
"preview": "{\n \"MONSTER_ORDINARY\": {\n \"20010101\": \"草スライム (Slime_Grass_02)\",\n \"20010201\": \"大型草スライム (Slime_Grass_03)\",\n \"200"
},
{
"path": "src/i18n/data/ja-JP/questItem.json",
"chars": 335441,
"preview": "{\n \"9340\": \"スワンと会話する\",\n \"265564\": \"「玲瓏霄灯図」に記された地点を探す\",\n \"572868\": \"デート中のカップルを注意する\",\n \"982580\": \"突然現れた敵を倒す\",\n \"10157"
},
{
"path": "src/i18n/data/ja-JP/route.ts",
"chars": 180,
"preview": "export const route: Message['route'] = {\n launcher: 'ランチャー',\n common: '一般',\n artifact: '聖遺物',\n item: 'アイテム',\n quest"
},
{
"path": "src/i18n/data/ja-JP/sceneItem.json",
"chars": 31357,
"preview": "{\n \"1\": \"BigWorld_LevelStreaming\",\n \"2\": \"BigWorld_LevelStreaming\",\n \"3\": \"BigWorld_LevelStreaming\",\n \"4\": \"LostPara"
},
{
"path": "src/i18n/data/ja-JP/weaponItem.json",
"chars": 3783,
"preview": "{\n \"WEAPON_SWORD_ONE_HAND\": {\n \"11101\": \"無鋒の剣\",\n \"11201\": \"銀の剣\",\n \"11301\": \"冷刃\",\n \"11302\": \"黎明の神剣\",\n \"11"
},
{
"path": "src/i18n/data/ja-JP/weatherItem.json",
"chars": 34483,
"preview": "{\n \"1\": \"BigWorld_Md_General\",\n \"2\": \"BigWorld_Md_WindDragon\",\n \"3\": \"BigWorld_Md_City_Storm\",\n \"4\": \"Monster_Monste"
},
{
"path": "src/i18n/data/zh-CN/artifactInfo.json",
"chars": 4419,
"preview": "[\n {\n \"id\": 214001,\n \"name\": \"冰风迷途的勇士\",\n \"desc1\": \"获得15%冰元素伤害加成。\",\n \"desc2\": \"攻击处于冰元素影响下的敌人时,暴击率提高20%;若敌人处于"
},
{
"path": "src/i18n/data/zh-CN/avatarItem.json",
"chars": 1994,
"preview": "{\n \"10000001\": \"凯特\",\n \"10000002\": \"神里绫华\",\n \"10000003\": \"琴\",\n \"10000005\": \"旅行者\",\n \"10000006\": \"丽莎\",\n \"10000007\": \"旅"
},
{
"path": "src/i18n/data/zh-CN/index.ts",
"chars": 2639,
"preview": "import { type MonsterType, type WeaponType, type MaterialType, transformItems } from '../common/transform'\nimport artifa"
},
{
"path": "src/i18n/data/zh-CN/materialItem.json",
"chars": 110759,
"preview": "{\n \"undefined\": {\n \"101\": \"角色经验\",\n \"102\": \"冒险阅历\",\n \"103\": \"星尘\",\n \"104\": \"星辉\",\n \"105\": \"好感经验\",\n \"106\":"
},
{
"path": "src/i18n/data/zh-CN/monsterItem.json",
"chars": 38468,
"preview": "{\n \"MONSTER_ORDINARY\": {\n \"20010101\": \"草史莱姆 (Slime_Grass_02)\",\n \"20010201\": \"大型草史莱姆 (Slime_Grass_03)\",\n \"20010"
},
{
"path": "src/i18n/data/zh-CN/questItem.json",
"chars": 419016,
"preview": "{\n \"9340\": \"与斯万对话\",\n \"265564\": \"找到「玲珑霄灯图」上标注的藏宝地\",\n \"572868\": \"去劝说约会者保持安静\",\n \"937052\": \"人群\",\n \"982580\": \"打倒突然出现的东西\""
},
{
"path": "src/i18n/data/zh-CN/route.ts",
"chars": 171,
"preview": "export const route: Message['route'] = {\n launcher: '启动器',\n common: '常用',\n artifact: '圣遗物',\n item: '物品',\n quest: '任"
},
{
"path": "src/i18n/data/zh-CN/sceneItem.json",
"chars": 29889,
"preview": "{\n \"1\": \"BigWorld_LevelStreaming\",\n \"2\": \"BigWorld_LevelStreaming\",\n \"3\": \"BigWorld_LevelStreaming\",\n \"4\": \"LostPara"
},
{
"path": "src/i18n/data/zh-CN/weaponItem.json",
"chars": 3639,
"preview": "{\n \"WEAPON_SWORD_ONE_HAND\": {\n \"10002\": \"(test)穿模测试\",\n \"11101\": \"无锋剑\",\n \"11201\": \"银剑\",\n \"11301\": \"冷刃\",\n "
},
{
"path": "src/i18n/data/zh-CN/weatherItem.json",
"chars": 34483,
"preview": "{\n \"1\": \"BigWorld_Md_General\",\n \"2\": \"BigWorld_Md_WindDragon\",\n \"3\": \"BigWorld_Md_City_Storm\",\n \"4\": \"Monster_Monste"
},
{
"path": "src/i18n/index.ts",
"chars": 553,
"preview": "import type { App } from 'vue'\nimport { createI18n } from 'vue-i18n'\nimport messages from '@intlify/unplugin-vue-i18n/me"
},
{
"path": "src/i18n/locales/de.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/i18n/locales/en.json",
"chars": 7425,
"preview": "{\n \"auther\": \"Auther\",\n \"client ver\": \"Client version\",\n \"plugin ver\": \"Plugin version\",\n \"project addr\": \"Project a"
},
{
"path": "src/i18n/locales/es.json",
"chars": 7952,
"preview": "{\n \"auther\": \"Autor\",\n \"client ver\": \"Versión del cliente\",\n \"plugin ver\": \"Versión del Plugin\",\n \"project addr\": \"D"
},
{
"path": "src/i18n/locales/fr.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/i18n/locales/id-ID.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/i18n/locales/ja-JP.json",
"chars": 6403,
"preview": "{\n \"auther\": \"製作者\",\n \"client ver\": \"クライアント バージョン\",\n \"plugin ver\": \"プラグイン バージョン\",\n \"project addr\": \"プロジェクトアドレス\",\n \"s"
},
{
"path": "src/i18n/locales/ko-KR.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/i18n/locales/pt.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/i18n/locales/ru-RU.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/i18n/locales/th-TH.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/i18n/locales/vi-VN.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/i18n/locales/zh-CN.json",
"chars": 5297,
"preview": "{\n \"auther\": \"作者\",\n \"client ver\": \"客户端版本\",\n \"plugin ver\": \"插件版本\",\n \"project addr\": \"项目地址\",\n \"server plugin\": \"服务端所需"
},
{
"path": "src/i18n/locales/zh-TW.json",
"chars": 3,
"preview": "{}\n"
},
{
"path": "src/layout/components/Language.vue",
"chars": 743,
"preview": "<template>\n <div class=\"flex-center\">\n <n-popselect v-model:value=\"settingStore.locale\" :options=\"languageOptions\" @"
},
{
"path": "src/layout/components/Main.vue",
"chars": 294,
"preview": "<template>\n <router-view v-slot=\"{ Component, route }\">\n <transition name=\"fade-slide\" mode=\"out-in\" appear>\n <"
},
{
"path": "src/layout/components/Menu.vue",
"chars": 1710,
"preview": "<template>\n <n-menu\n mode=\"horizontal\"\n :value=\"activeKey\"\n :options=\"menus\"\n :collapsed-width=\"15\"\n @up"
},
{
"path": "src/layout/components/Theme.vue",
"chars": 447,
"preview": "<template>\n <div class=\"flex-center\" @click=\"updateTheme\">\n <icon-line-md-sun-rising-loop v-if=\"settingStore.theme ="
},
{
"path": "src/layout/components/index.ts",
"chars": 194,
"preview": "import Language from './Language.vue'\nimport LayoutMain from './Main.vue'\nimport LayoutMenu from './Menu.vue'\nimport The"
},
{
"path": "src/layout/index.vue",
"chars": 476,
"preview": "<template>\n <n-layout class=\"min-w-600px h-screen flex-col\">\n <n-layout-header class=\"flex h-10%\">\n <layout-men"
},
{
"path": "src/main.ts",
"chars": 556,
"preview": "import { createApp } from 'vue'\nimport { setupStore } from './stores'\nimport { setupRouter } from './router'\nimport { se"
},
{
"path": "src/router/constant-routes.ts",
"chars": 243,
"preview": "import isTauri from '@/utils/is-tauri'\n\nconst routes: Route.RecordRaw[] = [\n {\n path: '/',\n name: 'home',\n red"
},
{
"path": "src/router/index.ts",
"chars": 510,
"preview": "import type { App } from 'vue'\nimport { createRouter, createWebHashHistory } from 'vue-router'\nimport type { RouteRecord"
},
{
"path": "src/router/modules/about.ts",
"chars": 400,
"preview": "const routes: Route.Config = {\n path: '/about',\n name: 'about',\n redirect: '/about/index',\n component: () => import("
},
{
"path": "src/router/modules/artifact.ts",
"chars": 450,
"preview": "import IconCustomArtifact from '~icons/custom/artifact'\n\nconst routes: Route.Config = {\n path: '/artifact',\n name: 'ar"
},
{
"path": "src/router/modules/common.ts",
"chars": 432,
"preview": "const routes: Route.Config = {\n path: '/common',\n name: 'common',\n redirect: '/common/index',\n component: () => impo"
},
{
"path": "src/router/modules/index.ts",
"chars": 198,
"preview": "import { transformModeleToRoute } from '@/utils'\n\nconst module = import.meta.glob('./**/*.ts', { eager: true }) as Route"
},
{
"path": "src/router/modules/item.ts",
"chars": 427,
"preview": "// import IconCustomThing from '~icons/custom/thing'\n\nconst routes: Route.Config = {\n path: '/item',\n name: 'item',\n "
},
{
"path": "src/router/modules/launcher.ts",
"chars": 444,
"preview": "const routes: Route.Config = {\n path: '/launcher',\n name: 'launcher',\n redirect: '/launcher/index',\n component: () ="
},
{
"path": "src/router/modules/mod.ts",
"chars": 397,
"preview": "const routes: Route.Config = {\n path: '/mod',\n name: 'mod',\n redirect: '/mod/index',\n component: () => import('@/lay"
},
{
"path": "src/router/modules/quest.ts",
"chars": 385,
"preview": "const routes: Route.Config = {\n path: '/quest',\n name: 'quest',\n redirect: '/quest/index',\n component: () => import("
},
{
"path": "src/router/modules/setting.ts",
"chars": 391,
"preview": "const routes: Route.Config = {\n path: '/setting',\n name: 'setting',\n redirect: '/setting/index',\n component: () => i"
},
{
"path": "src/router/modules/windy.ts",
"chars": 386,
"preview": "const routes: Route.Config = {\n path: '/seed',\n name: 'seed',\n redirect: '/seed/index',\n component: () => import('@/"
},
{
"path": "src/stores/index.ts",
"chars": 197,
"preview": "import type { App } from 'vue'\nimport { createPinia } from 'pinia'\n\n/** 安装状态管理 */\nexport function setupStore(app: App) {"
},
{
"path": "src/stores/modules/app.ts",
"chars": 330,
"preview": "import { defineStore } from 'pinia'\n\n/** app状态 */\ninterface AppState {\n /** 基准字体大小 */\n fontSize: number\n}\n\nexport cons"
},
{
"path": "src/stores/modules/index.ts",
"chars": 48,
"preview": "export * from './app'\nexport * from './setting'\n"
},
{
"path": "src/stores/modules/setting.ts",
"chars": 4111,
"preview": "import { defineStore } from 'pinia'\nimport { appWindow } from '@tauri-apps/api/window'\nimport { setSetting } from '@/uti"
},
{
"path": "src/styles/css/common.css",
"chars": 684,
"preview": "/* 滚动条设置 */\n*::-webkit-scrollbar {\n width: 0.25rem;\n height: 0.25rem;\n}\n*::-webkit-scrollbar-track-piece {\n backgroun"
},
{
"path": "src/styles/css/index.css",
"chars": 159,
"preview": "@import './common.css';\n/* @import './naive-ui.scss'; */\n@import './reset.css';\n\nhtml,\nbody,\n#app {\n /* scrollbar-gutte"
},
{
"path": "src/styles/css/reset.css",
"chars": 6640,
"preview": "/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow "
},
{
"path": "src/styles/scss/index.scss",
"chars": 27,
"preview": "@import './naive-ui.scss';\n"
},
{
"path": "src/styles/scss/naive-ui.scss",
"chars": 2744,
"preview": "/* 卡片头部文字居中 */\n.n-card-header {\n text-align: center;\n}\n\n.n-card > {\n .n-card-header {\n font-size: 1.5rem;\n paddi"
},
{
"path": "src/types/api.d.ts",
"chars": 395,
"preview": "/** 请求结果 */\ninterface ApiResult<T> {\n /** 状态码 */\n code: number\n /** 接口消息 */\n msg: string\n /** 接口数据 */\n data: T\n}\n\n"
},
{
"path": "src/types/auto-import.d.ts",
"chars": 4066,
"preview": "// Generated by 'unplugin-auto-import'\nexport {}\ndeclare global {\n const EffectScope: typeof import('vue')['EffectScope"
},
{
"path": "src/types/business.d.ts",
"chars": 274,
"preview": "interface Mod extends ModBasic {\n path: string\n src: string\n enabled: boolean\n show?: boolean\n iniName: string\n}\n\ni"
},
{
"path": "src/types/components.d.ts",
"chars": 5937,
"preview": "// generated by unplugin-vue-components\n// We suggest you to commit this file into source control\n// Read more: https://"
},
{
"path": "src/types/env.d.ts",
"chars": 236,
"preview": "/// <reference types=\"vite/client\" />\n\n/** 环境配置 */\ninterface ImportMetaEnv {\n /** 项目基本地址 */\n readonly VITE_BASE_URL: s"
},
{
"path": "src/types/message.d.ts",
"chars": 482,
"preview": "interface Message {\n route: {\n [key: string]: string\n }\n artifactInfo: {\n itemIds: number[]\n name: string\n "
},
{
"path": "src/types/naive-ui.d.ts",
"chars": 243,
"preview": "interface Window {\n $loadingBar?: import('naive-ui').LoadingBarProviderInst\n $dialog?: import('naive-ui').DialogProvid"
},
{
"path": "src/types/route.d.ts",
"chars": 1062,
"preview": "/** 路由模块 */\ndeclare namespace Route {\n /** 基本配置 */\n interface Base {\n /** 路由名称 */\n name: string\n /** 路由路径 */\n"
},
{
"path": "src/types/setting.d.ts",
"chars": 856,
"preview": "interface Setting {\n server: {\n protocol: 'http' | 'https'\n ip: string\n username: string\n history: string[]"
},
{
"path": "src/types/utils.d.ts",
"chars": 220,
"preview": "/** 将对象的所有属性设置为可选且可为null */\ntype NullablePartial<T> = {\n [P in keyof T]?: T[P] | null\n}\n\n/** 将对象的部分属性设置为可选 */\ntype Opti"
},
{
"path": "src/utils/index.ts",
"chars": 172,
"preview": "export * from './invoke'\nexport * from './msg'\nexport * from './naive-ui'\nexport * from './parse'\nexport * from './regex"
},
{
"path": "src/utils/invoke.ts",
"chars": 2977,
"preview": "import type { OpenDialogOptions } from '@tauri-apps/api/dialog'\nimport { shell, dialog } from '@tauri-apps/api'\nimport {"
},
{
"path": "src/utils/is-tauri.ts",
"chars": 144,
"preview": "const isTauri = Boolean(typeof window !== 'undefined' && window != undefined && (window as any).__TAURI__ !== undefined)"
},
{
"path": "src/utils/msg.ts",
"chars": 976,
"preview": "/** 错误消息栈 */\nconst errorMsgStack = new Map<number, string>()\n\n/** 错误提示持续时间 */\nconst ERROR_MSG_DURATION = 2000\n\n/**\n * 显示"
},
{
"path": "src/utils/naive-ui.ts",
"chars": 250,
"preview": "import type { CascaderOption } from 'naive-ui'\n\nexport function filterIgnoreCase(pattern: string, _: CascaderOption, pat"
},
{
"path": "src/utils/parse.ts",
"chars": 358,
"preview": "export function parseMd(text: string, limit?: number) {\n const target: string[] = []\n let count = 0\n for (const line "
},
{
"path": "src/utils/regex.ts",
"chars": 325,
"preview": "export function testUrlOrIP(str: string) {\n return (\n /^([0-9a-zA-Z-]{1,}\\.)+([a-zA-Z]{2,})$/.test(str) ||\n /^((\\"
},
{
"path": "src/utils/route.ts",
"chars": 1626,
"preview": "import type { VNode } from 'vue'\nimport { NIcon } from 'naive-ui'\nimport { Icon } from '@iconify/vue'\n\n/** 路由模块转换为路由记录 *"
},
{
"path": "src/utils/storage.ts",
"chars": 3239,
"preview": "import { Store } from 'tauri-plugin-store-api'\nimport { useSettingStore } from '@/stores'\nimport isTauri from '@/utils/i"
},
{
"path": "src/views/about/index.vue",
"chars": 990,
"preview": "<template>\n <div class=\"flex-col flex-center gap-5 text-5\">\n <span class=\"w-75%\">{{ t('about project') }}</span>\n "
},
{
"path": "src/views/artifact/constant.ts",
"chars": 2166,
"preview": "/** 各个部位对应的主属性列表 */\nexport const positionMainstats = [\n [7],\n [6],\n [3, 4, 5, 2, 9],\n [10, 11, 12, 13, 14, 15, 16, 1"
},
{
"path": "src/views/artifact/index.vue",
"chars": 8706,
"preview": "<template>\n <div class=\"flex-row select-none\">\n <!-- 左侧圣遗物列表选择 -->\n <div class=\"w-20% of-y-scroll grid grid-cols-"
},
{
"path": "src/views/common/index.vue",
"chars": 7274,
"preview": "<template>\n <div class=\"px-0\">\n <my-divider :title=\"t('general settings')\" />\n <div class=\"flex-col items-center "
},
{
"path": "src/views/item/index.vue",
"chars": 4423,
"preview": "<template>\n <div class=\"px-10 flex-col\">\n <span class=\"flex-center text-5 font-bold mb-5\">{{ t('give') }}</span>\n\n "
},
{
"path": "src/views/launcher/components/Changelog.vue",
"chars": 1337,
"preview": "<template>\n <n-modal v-model:show=\"showModal\" class=\"w-40% of-auto\">\n <n-card class=\"h-80vh\">\n <div class=\"flex"
},
{
"path": "src/views/launcher/components/StartupItems.vue",
"chars": 3370,
"preview": "<template>\n <n-modal v-model:show=\"showModal\" preset=\"card\" :title=\"t('startup items')\" :auto-focus=\"false\" class=\"w-70"
},
{
"path": "src/views/launcher/components/Updater.vue",
"chars": 1843,
"preview": "<template>\n <n-modal v-model:show=\"showModal\" :mask-closable=\"false\" class=\"w-50%\">\n <n-card>\n <n-spin :show=\"l"
},
{
"path": "src/views/launcher/components/index.ts",
"chars": 167,
"preview": "import Changelog from './Changelog.vue'\nimport StartupItems from './StartupItems.vue'\nimport Updater from './Updater.vue"
},
{
"path": "src/views/launcher/index.vue",
"chars": 6984,
"preview": "<template>\n <div class=\"flex-col px-10 gap-y-4\">\n <div class=\"flex items-center\">\n <div class=\"text-8\">\n "
},
{
"path": "src/views/mod/constant.ts",
"chars": 1629,
"preview": "export const characterIds = [\n 18959, 18989, 19141, 19340, 19465, 19466, 19467, 19469, 19470, 19471, 19472, 19473, 1947"
},
{
"path": "src/views/mod/download/components/DownloadQueue.vue",
"chars": 1532,
"preview": "<template>\n <n-drawer v-model:show=\"show\" width=\"20rem\" @update:value=\"$emit('update:modelValue', $event)\">\n <n-draw"
},
{
"path": "src/views/mod/download/components/SettingModal.vue",
"chars": 1594,
"preview": "<template>\n <n-modal v-model:show=\"showModal\" preset=\"card\" :title=\"t('mod settings')\" :auto-focus=\"false\" class=\"w-80%"
},
{
"path": "src/views/mod/download/components/index.ts",
"chars": 134,
"preview": "import DownloadQueue from './DownloadQueue.vue'\nimport SettingModal from './SettingModal.vue'\n\nexport { DownloadQueue, S"
},
{
"path": "src/views/mod/download/index.vue",
"chars": 8063,
"preview": "<template>\n <div class=\"h-full w-full flex-col\">\n <div class=\"flex-center mb-1\">\n <n-space class=\"items-center\""
},
{
"path": "src/views/mod/download/interface.ts",
"chars": 961,
"preview": "export interface ModDataBody {\n _aMetadata: {\n _nRecordCount: number\n }\n _aRecords: {\n _idRow: number\n _sNam"
},
{
"path": "src/views/mod/index.vue",
"chars": 1433,
"preview": "<template>\n <div class=\"h-full w-full\">\n <transition name=\"fade-slide\" mode=\"out-in\">\n <keep-alive>\n <mo"
},
{
"path": "src/views/mod/local/components/SettingModal.vue",
"chars": 1870,
"preview": "<template>\n <n-modal v-model:show=\"showModal\" preset=\"card\" :title=\"t('mod settings')\" :auto-focus=\"false\" class=\"w-80%"
},
{
"path": "src/views/mod/local/components/index.ts",
"chars": 71,
"preview": "import SettingModal from './SettingModal.vue'\n\nexport { SettingModal }\n"
},
{
"path": "src/views/mod/local/index.vue",
"chars": 6175,
"preview": "<template>\n <div class=\"h-full w-full flex-col\">\n <div class=\"flex-center mb-1\">\n <n-space class=\"items-center\""
},
{
"path": "src/views/quest/index.vue",
"chars": 3051,
"preview": "<template>\n <div class=\"px-10 flex-col\">\n <span class=\"flex-center text-5 font-bold mb-5\">{{ t('quests') }}</span>\n "
},
{
"path": "src/views/seed/index.vue",
"chars": 1718,
"preview": "<template>\n <div class=\"flex-col p-2\">\n <div ref=\"domRef\" class=\"of-auto grow\"></div>\n <div class=\"flex-center mt"
},
{
"path": "src/views/setting/index.vue",
"chars": 8027,
"preview": "<template>\n <div class=\"px-10 flex-col items-center\">\n <my-divider v-if=\"isTauri\" :title=\"t('app settings')\" />\n "
},
{
"path": "src-tauri/.gitignore",
"chars": 73,
"preview": "# Generated by Cargo\n# will have compiled files and executables\n/target/\n"
},
{
"path": "src-tauri/Cargo.toml",
"chars": 1356,
"preview": "[package]\nname = \"app\"\nversion = \"1.0.0\"\ndescription = \"A Tauri App\"\nauthors = [\"null\"]\nlicense = \"\"\nrepository = \"\"\ndef"
},
{
"path": "src-tauri/build.rs",
"chars": 39,
"preview": "fn main() {\n tauri_build::build()\n}\n"
},
{
"path": "src-tauri/src/cmd/file.rs",
"chars": 5423,
"preview": "use serde::{Deserialize, Serialize};\nuse std::collections::HashMap;\nuse std::error::Error;\nuse std::ffi::OsStr;\nuse std:"
},
{
"path": "src-tauri/src/cmd/http.rs",
"chars": 1966,
"preview": "use serde::{Deserialize, Serialize};\nuse std::error::Error;\nuse std::fs;\nuse std::fs::File;\nuse std::io;\nuse std::io::Cu"
},
{
"path": "src-tauri/src/cmd/lib.rs",
"chars": 420,
"preview": "// #[macro_export]\n// macro_rules! unwrap_or {\n// ($e:expr, $or_do_what:expr) => {\n// if let Some(d) = $e {\n"
},
{
"path": "src-tauri/src/cmd/proxy.rs",
"chars": 7076,
"preview": "use hudsucker::{\n async_trait::async_trait,\n certificate_authority::RcgenAuthority,\n hyper::{Body, Request, Res"
},
{
"path": "src-tauri/src/cmd/system.rs",
"chars": 3669,
"preview": "use base64::engine::general_purpose;\nuse base64::Engine;\nuse std::error::Error;\nuse std::fs;\nuse std::fs::File;\nuse std:"
},
{
"path": "src-tauri/src/cmd.rs",
"chars": 3318,
"preview": "use std::collections::HashMap;\nuse std::error::Error;\nuse std::fmt;\nuse std::path::Path;\n\nuse self::file::ModInfo;\n\npub "
},
{
"path": "src-tauri/src/main.rs",
"chars": 1188,
"preview": "#![cfg_attr(\n all(not(debug_assertions), target_os = \"windows\"),\n windows_subsystem = \"windows\"\n)]\n\nuse cmd::proxy"
},
{
"path": "src-tauri/tauri.conf.json",
"chars": 1863,
"preview": "{\n \"$schema\": \"../node_modules/@tauri-apps/cli/schema.json\",\n \"build\": {\n \"beforeBuildCommand\": \"pnpm build\",\n \""
},
{
"path": "tsconfig.json",
"chars": 761,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ESNext\",\n \"useDefineForClassFields\": true,\n \"module\": \"ESNext\",\n \"modul"
},
{
"path": "uno.config.ts",
"chars": 679,
"preview": "import { defineConfig, presetUno } from 'unocss'\nimport transformerVariantGroup from '@unocss/transformer-variant-group'"
},
{
"path": "vercel.json",
"chars": 41,
"preview": "{\n \"github\": {\n \"silent\": true\n }\n}\n"
},
{
"path": "vite.config.ts",
"chars": 869,
"preview": "import { fileURLToPath } from 'url'\nimport { defineConfig, loadEnv } from 'vite'\nimport { setupVitePlugins, sanitizeFile"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the jianxingxuejian/grasscutter-tools GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 195 files (4.3 MB), approximately 1.1M tokens, and a symbol index with 161 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.