diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml new file mode 100644 index 00000000..93642295 --- /dev/null +++ b/.github/workflows/eslint.yml @@ -0,0 +1,17 @@ +name: ESLint +on: [push, pull_request] +jobs: + build: + defaults: + run: + working-directory: web/src/main/javascript + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v2 + with: + node-version: 20.12.2 + - name: Install node modules + run: npm install + - name: Run ESLint + run: npm run lint \ No newline at end of file diff --git a/.github/workflows/github-ci.yml b/.github/workflows/github-ci.yml new file mode 100644 index 00000000..d448fb9d --- /dev/null +++ b/.github/workflows/github-ci.yml @@ -0,0 +1,19 @@ +name: Frontend CI +on: [push, pull_request] +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: web/src/main/javascript + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v2 + with: + node-version: 20.12.2 + - name: Install node modules + run: npm install + - name: Build frontend + run: npm run build + - name: Run unit tests + run: npm test \ No newline at end of file diff --git a/README.md b/README.md index b84b1c6d..652ebcac 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,33 @@ Read about our latest developments on our [News page](/docs/News.md). Users may submit their OncoTree related questions to the [OncoTree Users Google Group](https://groups.google.com/forum/#!forum/oncotree-users). +## Frontend Development + +All of the frontend code can be found at [/web/src/main/javascript](/web/src/main/javascript). The only configuration needed is to set `ONCOTREE_BASE_URL` +in [constants.ts](/web/src/main/javascript/src/shared/constants.ts). During development, it may be easiest to simply point to the public instance of +[OncoTree](https://oncotree.mskcc.org). + +Make sure you are using node version >=20.12.2. + +To begin development run: +``` +cd ./web/src/main/javascript +npm install && npm run dev +``` + +## Building the Frotend + +The frontend must be transpiled to static assets before bundling into a jar. To do this follow the following steps: + +1. Ensure that the correct `ONCOTREE_BASE_URL` is specified in [constants.ts](/web/src/main/javascript/src/shared/constants.ts). +2. Run the following: + + ``` + cd ./web/src/main/javascript + npm install && npm run build + ``` +3. The frontend assets are now up to date, and you are ready to bundle the jar. + ## OncoTree Mapping Tool The OncoTree Mapping Tool was developed to facilitate the mapping of OncoTree codes between different OncoTree release versions. To learn more about the OncoTree Converter tool, please refer to the [OncoTree Mapping documentation](/docs/OncoTree-Mapping-Tool.md). diff --git a/web/src/main/javascript/.eslintrc.cjs b/web/src/main/javascript/.eslintrc.cjs new file mode 100644 index 00000000..fc8d761d --- /dev/null +++ b/web/src/main/javascript/.eslintrc.cjs @@ -0,0 +1,19 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + 'prettier' + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/web/src/main/javascript/.gitignore b/web/src/main/javascript/.gitignore new file mode 100644 index 00000000..3639017d --- /dev/null +++ b/web/src/main/javascript/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +vitepress/.vitepress/cache +.eslintcache + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web/src/main/javascript/.husky/.gitignore b/web/src/main/javascript/.husky/.gitignore new file mode 100644 index 00000000..31354ec1 --- /dev/null +++ b/web/src/main/javascript/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/web/src/main/javascript/.husky/pre-commit b/web/src/main/javascript/.husky/pre-commit new file mode 100755 index 00000000..2312dc58 --- /dev/null +++ b/web/src/main/javascript/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged diff --git a/web/src/main/javascript/README.md b/web/src/main/javascript/README.md new file mode 100644 index 00000000..1ebe234c --- /dev/null +++ b/web/src/main/javascript/README.md @@ -0,0 +1,36 @@ +# Running locally + +```bash +npm run dev +``` + +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default { + // other rules... + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + project: ['./tsconfig.json', './tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: __dirname, + }, +} +``` + +- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` +- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list diff --git a/web/src/main/javascript/docs/about.md b/web/src/main/javascript/docs/about.md new file mode 100644 index 00000000..e7577073 --- /dev/null +++ b/web/src/main/javascript/docs/about.md @@ -0,0 +1,13 @@ +# About + +## About OncoTree + +OncoTree is a comprehensive, community-led cancer classification system that adapts to the evolving demands of precision oncology. Designed to classify cancers by both histological and molecular traits, it provides a structured framework to complement the clinical decision-making processes. The platform, which is open-source and publicly accessible, is governed by a diverse committee of oncologists, pathologists, and scientists. This multidisciplinary oversight ensures OncoTree remains relevant, incorporating new cancer types and research advancements in real time to support clinical decision-making and research applications. + +## Curation Process Overview + +![Overview of the curation process in OncoTree](../src/assets/curation_process.png){class="curation-process-overview-image"} + +## Useful Links +- Please send any feedback or questions to the [OncoTree Users Google Group](https://groups.google.com/g/oncotree-users). +- When using OncoTree, please cite: [Kundra et al., JCO Clinical Cancer Informatics 2021](https://ascopubs.org/doi/10.1200/CCI.20.00108). \ No newline at end of file diff --git a/web/src/main/javascript/docs/mapping.md b/web/src/main/javascript/docs/mapping.md new file mode 100644 index 00000000..180e60c6 --- /dev/null +++ b/web/src/main/javascript/docs/mapping.md @@ -0,0 +1,225 @@ +# Contents +* [OncoTree to OncoTree Mapping Tool](#oncotree-to-oncotree-mapping-tool) +* [Ontology to Ontology Mapping Tool](#ontology-to-ontology-mapping-tool) + +## OncoTree to OncoTree Mapping Tool + +The OncoTree Mapping tool was developed to facilitate the mapping of OncoTree codes between different OncoTree release versions. Below you can find basic instructions in the "Running the tool" section, and a detailed walkthrough in the "Tutorial" section. + +## Setting up and downloading the tool + +As of January 2020, the sun has set on [Python 2.X](https://www.python.org/doc/sunset-python-2/). If you are still using Python 2.X, we encourage you to use Python 3.6 and above, but here is the [last version of the code](https://github.com/cBioPortal/oncotree/blob/a9fac02d21b66b2ea1097a0a5b00e1369cfc2b7a/scripts/oncotree_to_oncotree.py) to work with Python 2.X. In the future, only Python 3.X versions of this tool will be supported. + +Click here to download the script: [oncotree_to_oncotree.py ](http://oncotree.mskcc.org/downloads/oncotree_to_oncotree.py) + +## Running the tool + +The OncoTree Mapping tool can be run with the following command: + + +``` +python3 --source-file --target-file --source-version --target-version +``` + +**Options** +- `-i | --source-file`: This is the source clinical file path. It must contain `ONCOTREE_CODE` in the file header and it must contain OncoTree codes corresponding to the ``. Read more about the cBioPortal clinical file format [here](https://docs.cbioportal.org/5.1-data-loading/data-loading/file-formats#clinical-data). +- `-o | --target-file`: This is the path to the target clinical file that will be generated. It will contain mapped OncoTree codes from ``-to-``. +- `-s | --source-version`: This is the source OncoTree version. The OncoTree codes in the source file must correspond to this version. +- `-t | --target-version`: This is the target OncoTree version that the script will attempt to map the source file OncoTree codes to. + +The list of OncoTree versions available are viewable [here](http://oncotree.mskcc.org/api/versions) or on the dropdown menu of the [OncoTree home page](http://oncotree.mskcc.org/#/home). + +Note: the source file should not contain embedded line breaks within any single cell in the table, such as those created by using the keyboard combinations Alt-Enter or Command-Option-Enter while editing a cell in Microsoft Excel. + +For a detailed walkthrough of running the tool, see the "Tutorial" section below. + +## Output + + The OncoTree Mapper Tool will automatically replace the value in the `ONCOTREE_CODE` column with the mapped code if available. The tool will also add a new column called `ONCOTREE_CODE_OPTIONS` containing suggestions for OncoTree codes if one or more nodes could not be directly mapped. The `ONCOTREE_CODE_OPTIONS` column formats its suggestions differently depending on the mapping results. Possible suggestion formats and corresponding examples are shown below. + +### 1. Unambiguous Direct Mappings + Unambiguous direct mappings occur when an OncoTree code maps directly to a single code in the target version. In this case, the `ONCOTREE_CODE_OPTIONS` column will be left blank, and the mapped code will be automatically placed in the `ONCOTREE_CODE` column. Unambiguous direct mappings are checked for addition of more granular nodes; to see how this may affect the `ONCOTREE_CODE_OPTIONS` column formatting, please refer to the subsection below "4. More Granular Nodes Introduced". + +### 2. Ambiguous Direct Mappings + Ambiguous direct mappings occur when an OncoTree code maps to multiple codes in the target version. The `ONCOTREE_CODE_OPTIONS` column formats the output as follows: + + > 'Source Code' -> {'Code 1', 'Code 2', 'Code 3', }   e.g. _ALL -> {TLL, BLL}_ + + **Example: Schema describing the revocation of OncoTree node ALL is mapped to multiple nodes.** + + + +> In `oncotree_2018_05_01`, `ALL` had two children: `TALL` and `BALL`. On release `oncotree_2018_06_01`, the ALL node was discontinued and the `TALL` node was renamed `TLL` and the `BALL` node was renamed `BLL`. + +**The `ONCOTREE_CODE_OPTIONS` column would be shown as follows:** +> _ALL -> {TLL, BLL}_ + +Ambiguous direct mappings are also checked for addition of more granular nodes; to see how this may affect the `ONCOTREE_CODE_OPTIONS` column formatting, please refer to the subsection below "4. More Granular Nodes Introduced". + +### 3. No Direct Mappings + No direct mappings occur when the source OncoTree code is unrelated to any OncoTree code in the target version. One such possibility is mapping a newly introduced OncoTree code backwards in time. In this case, the tool finds the closest set of **neighbors** (e.g parents and children) which are mappable in the target version. The `ONCOTREE_CODE_OPTIONS` column returns the set with the keyword **Neighbors** as follows: + + > 'Source Code' -> **Neighbors** {'Code 1', 'Code 2', 'Code 3', }   e.g. _UPA -> Neighbors {BLADDER}_ + + **Example: Schema describing a case where new OncoTree node UPA cannot be directly mapped backwards to a node.** + + + +> In `oncotree_2019_03_01`, `UPA` was added to the OncoTree as a child node of `BLADDER`. Because `UPA` did not exist in previous version `oncotree_2018_05_01` and did not replace any existing node, the tool uses the surrounding nodes when mapping backwards. In this case, the parent node `BLADDER` is returned as the closest match. + +**The `ONCOTREE_CODE_OPTIONS` column would be shown as follows:** +> _UPA -> Neighbors {BLADDER}_ + +### 4. More Granular Nodes Introduced +In certain cases, the target version can also introduce nodes with more specific descriptions. When this occurs, the tool will add the string `more granular choices introduced` to the existing text in the `ONCOTREE_CODE_OPTIONS` column as follows: + +> _'Source Code' -> {'Code 1', }, **more granular choices introduced**_ +> e.g. _TALL -> {TLL}, more granular choices introduced_ + + **Example: Schema describing a case where OncoTree node TALL is mapped to a node with more granular children** + + + +> In `oncotree_2019_03_01`, `TALL` was a leaf node with no children. In release `oncotree_2019_06_01`, `TLL` was introduced as a replacement for `TALL` with additional children `ETPLL` and `NKCLL`. + +**The `ONCOTREE_CODE_OPTIONS` column would be shown as follows:** +> _TALL -> {TLL}, more granular choices introduced_ + +### 5. Invalid Source OncoTree Code + An invalid source OncoTree Code means the provided code cannot be found in the source version. In such a case, mapping cannot be attempted and the `ONCOTREE_CODE_OPTIONS` column displays the following: + + > _'Source Code' -> ???, OncoTree code not in source OncoTree version_ + +## Tutorial +The following tutorial will guide the user through using the **oncotree_to_oncotree.py** tool. The tutorial will go through the expected output to highlight specific mapping cases. Additionally, the tutorial will cross-reference the output with the generated mapping summary to demonstrate how it can be used to aid in manual selection of unresolved nodes. + +#### Step 1 +Download the sample input file (data_clinical_sample.txt) from [here ](https://raw.githubusercontent.com/cBioPortal/oncotree/master/docs/resources/data_clinical_sample.txt). +#### Step 2 +Download oncotree_to_oncotree.py from [here ](http://oncotree.mskcc.org/downloads/oncotree_to_oncotree.py). +#### Step 3 +Run the following command from the command line: + +`python oncotree_to_oncotree.py -i data_clinical_sample.txt -o data_clinical_sample_remapped.txt -s oncotree_2018_03_01 -t oncotree_2019_03_01` + +The tool will output two files: `data_clinical_sample_remapped.txt` and `data_clinical_sample_remapped_summary.html`. +For your reference, you can see the expected output files - [here ](https://raw.githubusercontent.com/cBioPortal/oncotree/master/docs/resources/data_clinical_sample_remapped.txt) and [here ](https://raw.githubusercontent.com/cBioPortal/oncotree/master/docs/resources/data_clinical_sample_remapped_summary.html) +#### Step 4 +Examine `data_clinical_sample_remapped.txt`; the first five columns of the file should look as follows: + +|PATIENT_ID|SAMPLE_ID|AGE_AT_SEQ_REPORT|ONCOTREE_CODE|ONCOTREE_CODE_OPTIONS| +|-------|-------|-------|-------|-------| +|P1|S1|41||ALL -> {BLL,TLL}, more granular choices introduced| +|P2|S2|60||BALL -> {BLL}, more granular choices introduced| +|P3|S3|<18||TALL -> {TLL}, more granular choices introduced| +|P4|S4|71|PTCL|| +|P5|S5|64|PTCL|| +|P6|S6|36||CHL -> {CHL}, more granular choices introduced| +|P7|S7|63||SpCC -> ???, OncoTree code not in source OncoTree version| +|P8|S8|63||MCL -> {MCL}, more granular choices introduced| +|P9|S9|73||HGNEE -> ???, OncoTree code not in source OncoTree version| +|P10|S10|52||ONCOTREE_CODE column blank : use a valid OncoTree code or "NA"| +|P11|S11|77|NA|| +|P12|S12|87||TNKL -> {MTNN}, more granular choices introduced| +|P13|S13|79||HIST -> {HDCN}, more granular choices introduced| +|P14|S14|53|CLLSLL|| +|P15|S15|69|CLLSLL|| +|P16|S16|65||LEUK -> {MNM}, more granular choices introduced| +|P17|S17|66|MYCF|| +|P18|S18|66|RBL|| + +#### Step 5 +Using values in the `ONCOTREE_CODE_OPTIONS` as a guide, manually select and place an OncoTree Code in the `ONCOTREE_CODE` column. For additional information, refer to the summary file `data_clinical_sample_remapped_summary.html`. Repeat for all rows in the output file. Several examples are shown below. + +###### Sample 1 + +|SAMPLE_ID|ONCOTREE_CODE |ONCOTREE_CODE_OPTIONS| +|:--------|:-------------:|:----------------------:| +|S1 | |ALL -> {BLL,TLL}, more granular choices introduced| + +Source OncoTree code `ALL` maps directly to codes `BLL` and `TLL`. Users should place either `BLL` or `TLL` in the `ONCOTREE_CODE` column. The `ONCOTREE_CODE_OPTIONS` column also notes that more granular choices were introduced; as such, users can use the summary file for additional guidance. + +Searching by source code, the following information can be found in the summary file: + +The summary file provides a link to the closest shared parent node `LNM`; users can choose more granular nodes by referencing the provided tree: + + +###### Sample 2 + +|SAMPLE_ID|ONCOTREE_CODE |ONCOTREE_CODE_OPTIONS| +|:--------|:-------------:|:----------------------:| +|S2 | |BALL -> {BLL}, more granular choices introduced| + +Source OncoTree code `BALL` maps directly to `BLL`. Users should place `BLL` in the `ONCOTREE_CODE` column. However, similar to sample 1, the `ONCOTREE_CODE_OPTIONS` indicates there are more granular choices available. Users can follow the same steps as above and use the summary file to select a more granular node. + +###### Sample 4 + +|SAMPLE_ID|ONCOTREE_CODE |ONCOTREE_CODE_OPTIONS| +|:--------|:-------------:|:----------------------:| +|S4 | PTCL | | + +No additional resolution is needed; the previous OncoTree code was already automatically mapped to PTCL and placed in the `ONCOTREE_CODE` column. `ONCOTREE_CODE_OPTIONS` is empty because no manual selections were necessary. + +###### Sample 9 + +|SAMPLE_ID|ONCOTREE_CODE |ONCOTREE_CODE_OPTIONS| +|:--------|:-------------:|:----------------------:| +|S4 | |HGNEE -> ???, OncoTree code not in source OncoTree version| + +Source OncoTree code `HGNEE` was not found in the source OncoTree version and therefore could not be mapped. Users can either reassign a new source OncoTree code (and rerun the script) or remove the sample. + +#### Step 6 +After filling in the `ONCOTREE_CODE` column with an OncoTree code for each sample, use an editor (e.g. Microsoft Excel, vim, etc.) to trim off the `ONCOTREE_CODE_OPTIONS` column. The resulting file will be a new `data_clinical_sample.txt` file with all codes mapped to the target version. The first four columns of the final result is shown below: + +|PATIENT_ID|SAMPLE_ID|AGE_AT_SEQ_REPORT|ONCOTREE_CODE| +|-------|-------|-------|-------| +|P1|S1|41|BLL| +|P2|S2|60|BLL| +|P3|S3|<18|TLL| +|P4|S4|71|PTCL| +|P5|S5|64|PTCL| +|P6|S6|36|CHL| +|P7|S7|63|SPCC| +|P8|S8|63|MCL| +|P10|S10|52|NA| +|P11|S11|77|NA| +|P12|S12|87|MTNN| +|P13|S13|79|HDCN| +|P14|S14|53|CLLSLL| +|P15|S15|69|CLLSLL| +|P16|S16|65|MNM| +|P17|S17|66|MYCF| +|P18|S18|66|RBL| + +## Ontology to Ontology Mapping Tool + +The Ontology Mapping tool was developed to facilitate the mapping between different cancer classification systems. We currently support mapping between OncoTree, ICD-O, NCIt, UMLS and HemeOnc systems. The tool and the mapping file (the mapping file does not need to be downloaded to run the tool) can be found [here ](https://github.com/cBioPortal/oncotree/tree/master/scripts/ontology_to_ontology_mapping_tool) + +## Prerequisites + +The Ontology Mapping tool runs on python 3 and requires `pandas` and `requests` libraries. These libraries can be installed using + + +``` +pip3 install pandas +pip3 install requests +``` + +## Running the tool + +The Ontology Mapping tool can be run with the following command: + + +``` +python --source-file --target-file --source-code --target-code +``` + +**Options** + - `i | --source-file`: This is the source file path. The source file must contain one of the `ONCOTREE_CODE`, `NCIT_CODE`, `UMLS_CODE`, `ICDO_TOPOGRAPHY_CODE`, `ICDO_MORPHOLOGY_CODE` or `HEMEONC_CODE` in the file header and it must contain codes corresponding to the Ontology System. + - `o | --target-file`: This is the path to the target file that will be generated. It will contain ontologies mapped from source code in `` to ``. + - `s | --source-code`: This is the source ontology code in ``. It must be one of the `ONCOTREE_CODE`, `NCIT_CODE`, `UMLS_CODE`, `ICDO_TOPOGRAPHY_CODE`, `ICDO_MORPHOLOGY_CODE` or `HEMEONC_CODE`. + - `t | --target-code`: This is the target ontology code that the script will attempt to map the source file ontology code to. It must be one of the `ONCOTREE_CODE`, `NCIT_CODE`, `UMLS_CODE`, `ICDO_TOPOGRAPHY_CODE`, `ICDO_MORPHOLOGY_CODE` or `HEMEONC_CODE`. + +**Note** +- The source file should be tab delimited and should contain one of the ontology: `ONCOTREE_CODE`, `NCIT_CODE`, `UMLS_CODE`, `ICDO_TOPOGRAPHY_CODE`, `ICDO_MORPHOLOGY_CODE` or `HEMEONC_CODE` in the file header. +- We currently are allowing only one ontology to another ontology mapping. In the future, we plan to extend the tool to support mapping to multiple ontology systems. \ No newline at end of file diff --git a/web/src/main/javascript/docs/news.md b/web/src/main/javascript/docs/news.md new file mode 100644 index 00000000..164c5f41 --- /dev/null +++ b/web/src/main/javascript/docs/news.md @@ -0,0 +1,235 @@ +# News +## November 2, 2021 + * **New Stable Release** OncoTree version *oncotree_2021_11_02* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2020_10_01*. + * **New nodes added:** + * Desmoplastic/Nodular Medulloblastoma, NOS (DMBLNOS) + * Desmoplastic/Nodular Medulloblastoma, SHH Subtype (DMBLSHH) + * Anaplastic Medulloblastoma, NOS (AMBLNOS) + * Anaplastic Medulloblastoma, Non-WNT, Non-SHH (AMBLNWS) + * Anaplastic Medulloblastoma, Group 3 (AMBLNWSG3) + * Anaplastic Medulloblastoma, Group 4 (AMBLNWSG4) + * Anaplastic Medulloblastoma, SHH Subtype (AMBLSHH) + * Medulloblastoma, NOS (MBLNOS) + * Medulloblastoma, Non-WNT, Non-SHH (MBLNWS) + * Medulloblastoma, Group 3 (MBLG3) + * Medulloblastoma, Group 4 (MBLG4) + * Medulloblastoma, SHH Subtype (MBLSHH) + * Medulloblastoma, WNT Subtype (MBLWNT) + * Medulloblastoma with Extensive Nodularity, NOS (MBENNOS) + * Medulloblastoma with Extensive Nodularity, SHH Subtype (MBENSHH) + * Pancreatic Neuroendocrine Carcinoma (PANEC) *in the original version of this news release this node was accidentally omitted* + * **Nodes reclassified** + * The following list of oncotree codes had the mainType shortened to drop the suffix "NOS": ADRENAL_GLAND, AMPULLA_OF_VATER, BILIARY_TRACT, BLADDER, BONE, BOWEL, BRAIN, BREAST, CERVIX, EYE, HEAD_NECK, KIDNEY, LIVER, LUNG, LYMPH, MYELOID, OTHER, OVARY, PANCREAS, PENIS, PERITONEUM, PLEURA, PNS, PROSTATE, SKIN, SOFT_TISSUE, STOMACH, TESTIS, THYMUS, THYROID, UTERUS, VULVA + * Cholangiocarcinoma (CHOL) now has direct parent Intraductal Papillary Neoplasm of the Bile Duct (IPN) [previously: Biliary Tract (BILIARY_TRACT)] + * Gallbladder Cancer (GBC) now has direct parent Intracholecystic Papillary Neoplasm (ICPN) [previously: Biliary Tract (BILIARY_TRACT)] + * **oncotree candidate release version additions:** + * Three new nodes intended only for version oncotree_candidate_release were added (NVRINT, MPNWP, MDSWP). These nodes will not be incorperated into oncotree latest stable. + * **resources added** + * rdf formatted OWL ontology and taxomomy files for recent oncotree versions have been added to our github repository. They can be explored [here ](https://github.com/cBioPortal/oncotree/tree/master/resources/rdf). +## November 4, 2020 + * **Ontology to Ontology Mapping tool available** + * The Ontology Mapping tool was developed to facilitate the mapping between different cancer classification systems. We currently support mapping between OncoTree, ICD-O, NCIt, UMLS and HemeOnc systems. + * A mapping file containing mappings between the different ontologies and OncoTree codes as well as a python script to run the mapping is available on the OncoTree [GitHub page ](https://github.com/cBioPortal/oncotree/tree/master/scripts/ontology_to_ontology_mapping_tool). Details are also available on the [Mapping Tools page ](http://oncotree.info/images/../#/home?tab=mapping). + * The mapping file is expected to grow as we curate more ontology mappings for OncoTree codes. +## October 1, 2020 + * **New Stable Release** OncoTree version *oncotree_2020_10_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2020_04_01*. + * **New nodes added:** + * Basal Cell Carcinoma of Prostate (BCCP) + * **Node deleted:** + * Porphyria Cutania Tarda (PCT) + * **Node with updated name:** + * Goblet Cell Adenocarcinoma of the Appendix (GCCAP) [previously: Goblet Cell Carcinoid of the Appendix (GCCAP)]. +## April 1, 2020 + * **New Stable Release** OncoTree version *oncotree_2020_04_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2020_02_06*. + * **New nodes added:** + * AML with Variant RARA translocation (AMLRARA) + * **Nodes reclassified:** + * Mixed Cancer Types (MIXED is now a child of Other (OTHER) [previously under: Cancer of Unknown Primary (CUP)]. +## February 6, 2020 + * **Web Link To Specific Nodes Available:** + * When providing web links to oncotree, you may include a search term as an optional argument and the oncotree you reference will be displayed with the search term located and highlighted. Use of this mechanism can be seen in the [example output ](https://raw.githubusercontent.com/cBioPortal/oncotree/master/docs/resources/data_clinical_sample_remapped_summary.html) for the OncoTree-to-OncoTree code mapping tool. + * As an example, you can provide a direct link to the TumorType node PANET in oncotree version oncotree_2019_12_01 with this link: `http://oncotree.mskcc.org/#/home?version=oncotree_2019_12_01&search_term=(PANET)` + * **New Stable Release** OncoTree version *oncotree_2020_02_06* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2020_02_01*. + * **Nodes reclassified:** + * Gallbladder Cancer (GBC) is now a child of Biliary Tract (BILIARY_TRACT) [previously under: Intracholecystic Papillary Neoplasm (ICPN)]. + * Cholangiocarcinoma (CHOL) is now a child of Biliary Tract (BILIARY_TRACT) [previously under: Intraductal Papillary Neoplasm of the Bile Duct (IPN)]. +## February 1, 2020 + * **New Stable Release** OncoTree version *oncotree_2020_02_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2019_12_01*. + * **New nodes added:** + * Intraductal Oncocytic Papillary Neoplasm (IOPN) + * Intraductal Tubulopapillary Neoplasm (ITPN) + * Intracholecystic Papillary Neoplasm (ICPN) + * Intraductal Papillary Neoplasm of the Bile Duct (IPN) + * **Nodes reclassified:** + * Gallbladder Cancer (GBC) is now a child of Intracholecystic Papillary Neoplasm (ICPN) [previously under: Biliary Tract (BILIARY_TRACT)]. + * Cholangiocarcinoma (CHOL) is now a child of Intraductal Papillary Neoplasm of the Bile Duct (IPN) [previously under: Biliary Tract (BILIARY_TRACT)]. +## December 1, 2019 + * **New Stable Release** OncoTree version *oncotree_2019_12_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2019_08_01*. + * **New nodes added:** + * Low-grade Appendiceal Mucinous Neoplasm (LAMN) +## August 1, 2019 + * **New Stable Release** OncoTree version *oncotree_2019_08_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2019_05_01*. + * **New nodes added:** + * Lacrimal Gland Tumor (LGT) + * Adenoid Cystic Carcinoma of the Lacrimal Gland (ACLG) + * Squamous Cell Carcinoma of the Lacrimal Gland (SCLG) + * Basal Cell Adenocarcinoma (BCAC) + * Carcinoma ex Pleomorphic Adenoma (CAEXPA) + * Pleomorphic Adenoma (PADA) + * Polymorphous Adenocarcinoma (PAC) + * Atypical Lipomatous Tumor (ALT) +## May 2, 2019 + * **OncoTree-to-OncoTree code mapping tool updated** + * The OncoTree-to-OncoTree mapping tool (now version 1.2) has been updated: + * it no longer requires the installation of the python 'requests' module + * it now is able to handle input files where lines end in carriage return (such as files saved from Microsoft Excel) +## May 1, 2019 + * **New Stable Release** OncoTree version *oncotree_2019_05_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2019_03_01*. + * **Nodes reclassified** + * Intestinal Ampullary Carcinoma (IAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma] + * Mixed Ampullary Carcinoma (MAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma] + * Pancreatobiliary Ampullary Carcinoma (PAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma] + * Ependymoma (EPM) MainType is now Glioma [previously: CNS Cancer] + * Rosai-Dorfman Disease (RDD) MainType is now Histiocytosis [previously: Histiocytic Disorder] +## March 26, 2019 + * **OncoTree-to-OncoTree code mapping tool updated** + * The OncoTree-to-OncoTree mapping tool (now version 1.1) has been slightly improved, mainly by adding a separate section in the output summary for reporting OncoTree codes which were replaced automatically. Also, additional documentation and description of the tool has been added under the "Mapping Tools" tab. +## March 14, 2019 + * **OncoTree-to-OncoTree code mapping tool available** + * A python program is now available for download under the webpage tab labeled "Mapping Tools". This tool will rewrite OncoTree codes in a tabular clinical data file, mapping from one version of OncoTree to another. When additional guidance is necessary, the program will insert a column containing options and comments next to the ONCOTREE_CODE column. After selecting an appropriate OncoTree code for cases which require action, this extra column can be deleted to produce a fully re-mapped clinical data file. More details about this tool and how to use it are available under the "Mapping Tools" tab. + * The OncoTree-to-OncoTree mapping tool relies on an expanded model of OncoTree node history. This is reflected in the Web API schema for Tumor Types, which now has added properties called "precursors" and "revocations". Using these properties, and the existing "history" property, the tool is able to make proper mappings across OncoTree versions, and give suggestions when no clear mapping is available. It is also reflected in the main tree visualization of OncoTree, where a combination of these properties (when set) will be displayed in the pop-up information box with label "Previous Codes". +## March 1, 2019 + * **New Stable Release** OncoTree version *oncotree_2019_03_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2019_02_01*. + * **New node added:** + * NUT Carcinoma of the Lung (NUTCL) + * **Node with renamed OncoTree code:** + * Monomorphic Epitheliotropic Intestinal T-Cell Lymphoma (MEITL) [previously: MEATL] + * **Node with renamed OncoTree code and updated name:** + * Germ Cell Tumor with Somatic-Type Malignancy (GCTSTM) [previously: Teratoma with Malignant Transformation (TMT)] + * **Cross-version OncoTree code mapping tool coming soon** + * Development of a tool to map OncoTree codes between different versions of OncoTree is nearing completion. + * Related to this, users of the OncoTree Web API should be aware that we will soon be adding two additional properties to the output schema returned by the api/tumorTypes endpoints. The properties "precursors" and "revocations" will be added alongside the "history" property (having the same type: an array of strings). These will help distinguish the kinds of possible relationships to OncoTree nodes in prior versions of OncoTree. We expect this new schema to be backwards compatible, but if your language or tools requires an exactly matching JSON schema you will need to make adjustments. +## February 1, 2019 + * **New Stable Release** OncoTree version *oncotree_2019_02_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2018_11_01*. + * **New node added:** + * Leiomyoma (LM) +## November 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_11_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2018_09_01*. + * **New nodes added:** + * Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach (GINETES) + * High-Grade Neuroendocrine Carcinoma of the Esophagus (HGNEE) + * High-Grade Neuroendocrine Carcinoma of the Stomach (HGNES) + * **Nodes reclassified:** + * Well-Differentiated Neuroendocrine Tumors of the Stomach (SWDNET) is now a child of Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach (GINETES) [previously under: Bowel (BOWEL)]. +## September 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_09_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2018_08_01*. + * **Nodes with adjusted History:** + * Myeloid Neoplasm (MNM) previous code: LEUK + * B-Lymphoblastic Leukemia/Lymphoma (BLL) previous code: BALL + * T-Lymphoblastic Leukemia/Lymphoma (TLL) previous code: TALL + * Essential Thrombocythemia (ET) previous code: ETC + * Polycythemia Vera (PV) previous code: PCV + * Diffuse Large B-Cell Lymphoma, NOS (DLBCLNOS) previous code: DLBCL + * Sezary Syndrome (SS) previous code: SEZS +## August 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_08_01* is now the latest stable release. The previous stable version is still accessible as version *oncotree_2018_07_01*. + * **New nodes added:** + * Angiomatoid Fibrous Histiocytoma (AFH) + * Clear Cell Sarcoma of Kidney (CCSK) + * Ewing Sarcoma of Soft Tissue (ESST) + * Extra Gonadal Germ Cell Tumor (EGCT) + * Infantile Fibrosarcoma (IFS) + * Malignant Glomus Tumor (MGST) + * Malignant Rhabdoid Tumor of the Liver (MRTL) + * Myofibromatosis (IMS) + * Sialoblastoma (SBL) + * Undifferentiated Embryonal Sarcoma of the Liver (UESL) +## July 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_07_01* is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version *oncotree_2018_06_15*. + * **Node with renamed OncoTree code:** + * Atypical Chronic Myeloid Leukemia, BCR-ABL1- (ACML) [previously: aCML] +## June 15, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_06_15* is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version *oncotree_2018_06_01*. + * **Nodes reclassified** + * Mature B-Cell Neoplasms (MBN) and Mature T and NK Neoplasms (MTNN) and their subnodes were relocated to be under Non-Hodgkin Lymphoma (NHL). + * Rosai-Dorfman Disease (RDD) was relocated to be under Histiocytic and Dendritic Cell Neoplasms (HDCN). Previously RDD was under Lymphoid Neoplasm (LNM) in the Lymphoid category. +## June 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_06_01* is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version *oncotree_2018_05_01*. + * **Blood and Lymph subtrees replaced with new Myeloid and Lymphoid subtrees:** + * 23 nodes in the previous Blood subtree have been deleted or relocated/renamed. Affected OncoTree codes from this tree: BLOOD, BPDCN, HIST, LCH, ECD, LEUK, ALL, BALL, TALL, AMOL, AML, CLL, CML, CMML, HCL, LGLL, MM, MDS, MPN, ETC, MYF, PCV, SM + * 28 nodes in the previous Lymph subtree have been deleted or relocated/renamed. Affected OncoTree codes from this tree: LYMPH, HL, CHL, NLPHL, NHL, BCL, BL, DLBCL, MALTL, FL, MCL, MZL, MBCL, NMZL, PCNSL, PEL, SLL, SMZL, WM, TNKL, CTCL, MYCF, SEZS, PTCL, ALCL, AITL, PTCLNOS, RD + * 122 nodes in the current Lymphoid subtree have been added or relocated/renamed from previous subtrees. OncoTree codes in this new subtree are: LYMPH, LATL, LBGN, LNM, BLL, BLLRGA, BLLHYPER, BLLHYPO, BLLIAMP21, BLLETV6RUNX1, BLLTCF3PBX1, BLLIL3IGH, BLLBCRABL1, BLLKMT2A, BLLBCRABL1L, BLLNOS, HL, CHL, LDCHL, LRCHL, MCCHL, NSCHL, NLPHL, MBN, ALKLBCL, AHCD, BCLU, BPLL, BL, BLL11Q, CLLSLL, DLBCLCI, DLBCLNOS, ABC, GCB, EBVDLBCLNOS, EBVMCU, EP, FL, DFL, ISFN, GHCD, HHV8DLBCL, HCL, HGBCL, HGBCLMYCBCL2, IVBCL, LBLIRF4, LYG, LPL, WM, MCL, ISMCL, MZL, EMALT, NMZL, SMZL, MCBCL, MGUS, MGUSIGA, MGUSIGG, MGUSIGM, MIDD, MIDDA, MIDDO, MHCD, PTFL, PCM, PLBL, PCLBCLLT, PCFCL, PCNSL, PEL, PMBL, SPB, SBLU, HCL-V, SDRPL, THRLBCL, MTNN, ATLL, ANKL, ALCL, ALCLALKN, ALCLALKP, BIALCL, AITL, CLPDNK, EATL, ENKL, FTCL, HSTCL, HVLL, ITLPDGI, MEATL, MYCF, NPTLTFH, PTCL, PCATCL, PCLPD, LYP, PCALCL, PCSMTPLD, PCAECTCL, PCGDTCL, SS, SPTCL, SEBVTLC, TLGL, TPLL, NHL, PTLD, CHLPTLD, FHPTLD, IMPTLD, MPTLD, PHPTLD, PPTLD, RDD, TLL, ETPLL, NKCLL + * 101 nodes in the current Myeloid subtree have been added or relocated/renamed from previous subtrees. OncoTree codes in this new subtree are: MYELOID, MATPL, MBGN, MNM, ALAL, AUL, MPALBCRABL1, MPALKMT2A, MPALBNOS, MPALTNOS, AML, AMLMRC, AMLRGA, AMLRBM15MKL1, AMLBCRABL1, AMLCEBPA, AMLNPM1, AMLRUNX1, AMLCBFBMYH11, AMLGATA2MECOM, AMLDEKNUP214, AMLRUNX1RUNX1T1, AMLMLLT3KMT2A, APLPMLRARA, AMLNOS, AM, AMLMD, AWM, ABL, AMKL, AMOL, AMML, APMF, PERL, MPRDS, MLADS, TAM, MS, TMN, TAML, TMDS, BPDCN, HDCN, JXG, ECD, FRCT, FDCS, HS, IDCT, IDCS, LCH, LCS, MCD, CMCD, MCSL, SM, ASM, ISM, SMMCL, SSM, SMAHN, MDS, MDSEB, MDSEB1, MDSEB2, MDSID5Q, MDSMD, MDSRS, MDSRSMD, MDSRSSLD, MDSSLD, MDSU, RCYC, MDS/MPN, aCML, CMML, CMML0, CMML1, CMML2, JMML, MDSMPNRST, MDSMPNU, MNGLP, MLNER, MLNFGFR1, MLNPCM1JAK2, MLNPDGFRA, MLNPDGFRB, MPN, CELNOS, CML, CMLBCRABL1, CNL, ET, ETMF, MPNU, PV, PVMF, PMF, PMFPES, PMFOFS + * **Nodes reclassified** + * Adrenocortical Adenoma (ACA) MainType is now Adrenocortical Adenoma [previously: Adrenocortical Carcinoma] + * Ampulla of Vater (AMPULLA_OF_VATER) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma] + * Parathyroid Cancer (PTH) MainType is now Parathyroid Cancer [previously: Head and Neck Cancer] + * Parathyroid Carcinoma (PTHC) MainType is now Parathyroid Cancer [previously: Head and Neck Cancer] + * Follicular Dendritic Cell Sarcoma (FDCS) was moved from the Soft Tissue subtree into the Myeloid subtree with direct parent Histiocytic and Dendritic Cell Neoplasms (HDCN) + * Interdigitating Dendritic Cell Sarcoma (IDCS) was moved from the Soft Tissue subtree into the Myeloid subtree with direct parent Histiocytic and Dendritic Cell Neoplasms (HDCN) + * **New nodes added:** + * Inverted Urothelial Papilloma (IUP) + * Urothelial Papilloma (UPA) + * Oncocytic Adenoma of the Thyroid (OAT) + * **Character set simplification** + * Salivary Gland-Type Tumor of the Lung (SGTTL) used to contain a unicode character for a horizontal dash. This punctuation mark is now a hyphen. +## May 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_05_01* is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version *oncotree_2018_04_01*. + * **New nodes added:** + * Primary CNS Melanocytic Tumors (PCNSMT) + * Melanocytoma (MELC) + * **Node reclassified** + * Primary CNS Melanoma (PCNSM) now is a child of Primary CNS Melanocytic Tumors (PCNSMT) [previously under: CNS/Brain]. +## April 23, 2018 + * **New Web API Version Available** + * A new version (v1.0.0) of the OncoTree Web API is available. It can be explored here: +http://oncotree.mskcc.org/swagger-ui.html
The previous version is still available, but is scheduled to be discontinued May 31, 2018 +You can continue to access the previous version (v0.0.1) in its original location summarized here: ~~http://oncotree.mskcc.org/oncotree/swagger-ui.html~~ + * **Details and Migration Guidance** + * The base URL for accessing all API functionality is being simplified from ~~http://oncotree.mskcc.org/oncotree/~~ to http://oncotree.mskcc.org/ + * The /api/tumor_types.txt endpoint is now deprecated. It is scheduled for deletion as part of the next API version release. + * Most endpoint paths in the API remain the same and provide the same services. Exceptions are: + * /api/tumorTypes used to accept a query parameter ("flat") which controlled the output format for receiving a tree representation or a flat representation of the full set of TumorTypes. Now this endpoint always returns a flat list of all TumorTypes and a new endpoint path (/api/tumorTypes/tree) is used to retrieve a tree representation of the OncoTree. Previous requests which included "flat=false" should be adjusted to use the /api/tumorTypes/tree endpoint. Otherwise "flat=true" should be dropped from the request. + * /api/tumorTypes used to accept a query parameter ("deprecated") which is no longer recognized. This parameter should be dropped from requests. Deprecated OncoTree codes can instead be found in the history attribute of the response. + * the POST request endpoint (/api/tumorTypes/search) which accepted a list of TumorType queries has been deprecated and is no longer available through the swagger-ui interface. The GET request endpoint /api/tumorTypes/search/{type}/{query} remains available as before. If you previously submitted an array of query requests, you should iterate through the array and call the GET request endpoint to make one query per request. + * The output format (schema) of many endpoints has been simplified. You will need to adjust your result handling accordingly. Changes include: + * responses no longer include a "meta" element with associated code and error messages. Instead HTTP status codes are set appropriately and error messages are supplied in message bodies. Responses also no longer contain a "data" element. Objects representing the API output are directly returned instead. + * MainType values are no longer modeled as objects. Each MainType value is now represented as a simple string. The /api/mainTypes endpoint now returns an array of strings rather than an object mapping MainType names to MainType objects. + * TumorType values no longer contain elements "id", "deprecated", "links", "NCI", "UMLS". A new element ("externalReferences") has been added which contains a JSON object mapping external authority names to arrays of associated identifiers. Such as "externalReferences": {"UMLS": ["CL497188","C1510796"],"NCI": ["C123384","C40361"]} + * Argument validation has been strengthened for several parameters, such as "type" and "levels" in the /api/tumorTypes/search/{type}/{query} endpoint. Now improper arguments cause an a HTTP status response indicating error, with a description of the problem in the body. + * Some requests which fail to find matching entities now return NOT_FOUND HTTP status code 404 rather than an empty result. Examples: http://oncotree.mskcc.org/api/tumorTypes/search/code/TEST_UNDEFINED_CODE or http://oncotree.mskcc.org/api/crosswalk?vocabularyId=ICDO&conceptId=C15 +## April 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_04_01* is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version *oncotree_2018_03_01*. + * **New nodes added:** + * Adamantinoma (ADMA) + * Tubular Adenoma of the Colon (TAC) + * Parathyroid Cancer (PTH) + * Parathyroid Carcinoma (PTHC) + * Renal Neuroendocrine Tumor (RNET) +## March 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_03_01* is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version *oncotree_2018_02_01*. + * **New node added:** + * Ganglioneuroma (GN) + * **Node reclassified** + * Rhabdoid Cancer (MRT) now has direct parent Kidney (KIDNEY) [previously: Wilms' Tumor (WT)] Main type is now "Rhabdoid Cancer" [previously: Wilms Tumor] +## February 7, 2018 + * **OncoTree format expanded to support deeper tree nodes** + * To support upcoming expansion of the OncoTree, the 5 named levels of the OncoTree {*Primary*, *Secondary*, *Tertiary*, *Quaternary*, *Quinternary*} have been dropped in favor of level numbers {1, 2, 3, 4, 5, ...}. Web API functions have been adjusted accordingly, and an API function which outputs a table format of the OncoTree has been adjusted to output 7 levels of depth. + * **Additional improvements to the website** : + * tab-style navigation + * more prominent version selection information + * a new **News** page +## February 1, 2018 + * **New Stable Release** OncoTree version *oncotree_2018_02_01* is now the latest stable release. The previous stable version is still accessible for use through version name *oncotree_2018_01_01*. + * **New nodes added:** + * Adenosquamous Carcinoma of the Gallbladder (GBASC) + * Gallbladder Adenocarcinoma, NOS (GBAD) + * Small Cell Gallbladder Carcinoma (SCGBC) + * Juvenile Secretory Carcinoma of the Breast (JSCB) + * Osteoclastic Giant Cell Tumor (OSGCT) + * Peritoneal Serous Carcinoma (PSEC) + * **Nodes reclassified** [from: Embryonal Tumor, to: Peripheral Nervous System]: + * Ganglioneuroblastoma (GNBL) + * Neuroblastoma (NBL) + * **Node with renamed OncoTree code:** + * Spindle Cell Carcinoma of the Lung (SPCC) [previously: SpCC] \ No newline at end of file diff --git a/web/src/main/javascript/favicon.svg b/web/src/main/javascript/favicon.svg new file mode 100644 index 00000000..541ff5ca --- /dev/null +++ b/web/src/main/javascript/favicon.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/main/javascript/index.html b/web/src/main/javascript/index.html new file mode 100644 index 00000000..3f627ef0 --- /dev/null +++ b/web/src/main/javascript/index.html @@ -0,0 +1,13 @@ + + + + + + + OncoTree + + +
+ + + diff --git a/web/src/main/javascript/jest.config.js b/web/src/main/javascript/jest.config.js new file mode 100644 index 00000000..3297740d --- /dev/null +++ b/web/src/main/javascript/jest.config.js @@ -0,0 +1,8 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} **/ +export default { + testEnvironment: "node", + transform: { + "^.+.tsx?$": ["ts-jest", {}], + }, + }; + \ No newline at end of file diff --git a/web/src/main/javascript/latest_stable.json b/web/src/main/javascript/latest_stable.json new file mode 100644 index 00000000..26ae48ec --- /dev/null +++ b/web/src/main/javascript/latest_stable.json @@ -0,0 +1,14167 @@ +{ + "TISSUE": { + "code": "TISSUE", + "color": null, + "name": "Tissue", + "mainType": null, + "externalReferences": { + "UMLS": ["C0040300", "C0346183"], + "NCI": ["C12801"] + }, + "tissue": null, + "children": { + "OVARY": { + "code": "OVARY", + "color": "LightBlue", + "name": "Ovary/Fallopian Tube", + "mainType": "Ovarian/Fallopian Tube Cancer", + "externalReferences": { + "UMLS": ["C0029939"], + "NCI": ["C12404"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": { + "OOVC": { + "code": "OOVC", + "color": "LightBlue", + "name": "Ovarian Cancer, Other", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": { + "OCNOS": { + "code": "OCNOS", + "color": "LightBlue", + "name": "Ovarian Choriocarcinoma, NOS", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OOVC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HGONEC": { + "code": "HGONEC", + "color": "LightBlue", + "name": "High-Grade Neuroendocrine Carcinoma of the Ovary", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OOVC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HGSFT": { + "code": "HGSFT", + "color": "LightBlue", + "name": "High-Grade Serous Fallopian Tube Cancer", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OOVC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "OVARY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "OVT": { + "code": "OVT", + "color": "LightBlue", + "name": "Ovarian Epithelial Tumor", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0341823"], + "NCI": ["C4381"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": { + "EBOV": { + "code": "EBOV", + "color": "LightBlue", + "name": "Endometrioid Borderlin Ovarian Tumor", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0334338"], + "NCI": ["C7983"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SOC": { + "code": "SOC", + "color": "LightBlue", + "name": "Serous Ovarian Cancer", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C1335177"], + "NCI": ["C7550"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": { + "HGSOC": { + "code": "HGSOC", + "color": "LightBlue", + "name": "High-Grade Serous Ovarian Cancer", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["CL446431"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "SOC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "LGSOC": { + "code": "LGSOC", + "color": "LightBlue", + "name": "Low-Grade Serous Ovarian Cancer", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["CL446432"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "SOC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BTOV": { + "code": "BTOV", + "color": "LightBlue", + "name": "Brenner Tumor", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["CL323981"], + "NCI": ["C39954"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": { + "BTBEOV": { + "code": "BTBEOV", + "color": "LightBlue", + "name": "Brenner Tumor, Benign", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "BTOV", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "BTBOV": { + "code": "BTBOV", + "color": "LightBlue", + "name": "Brenner Tumor, Borderline", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "BTOV", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "BTMOV": { + "code": "BTMOV", + "color": "LightBlue", + "name": "Brenner Tumor, Malignant", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "BTOV", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CCBOV": { + "code": "CCBOV", + "color": "LightBlue", + "name": "Clear Cell Borderline Ovarian Tumor", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0279676"], + "NCI": ["C40080"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OSMCA": { + "code": "OSMCA", + "color": "LightBlue", + "name": "Ovarian Seromucinous Carcinoma", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0279392"], + "NCI": ["C40090"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OSMAD": { + "code": "OSMAD", + "color": "LightBlue", + "name": "Ovarian Seromucinous Adenoma", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "EOV": { + "code": "EOV", + "color": "LightBlue", + "name": "Endometrioid Ovarian Cancer", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0346163"], + "NCI": ["C7979"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SBOV": { + "code": "SBOV", + "color": "LightBlue", + "name": "Serous Borderline Ovarian Tumor", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0279662"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MOV": { + "code": "MOV", + "color": "LightBlue", + "name": "Mucinous Ovarian Cancer", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C1335168"], + "NCI": ["C5242"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SBMOV": { + "code": "SBMOV", + "color": "LightBlue", + "name": "Serous Borderline Ovarian Tumor, Micropapillary", + "mainType": "Ovarian Cancer", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MXOV": { + "code": "MXOV", + "color": "LightBlue", + "name": "Mixed Ovarian Carcinoma", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0279392"], + "NCI": ["C40090"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MBOV": { + "code": "MBOV", + "color": "LightBlue", + "name": "Mucinous Borderline Ovarian Tumor", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0279664"], + "NCI": ["C40036"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CCOV": { + "code": "CCOV", + "color": "LightBlue", + "name": "Clear Cell Ovarian Cancer", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0346164"], + "NCI": ["C40076"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCCO": { + "code": "SCCO", + "color": "LightBlue", + "name": "Small Cell Carcinoma of the Ovary", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C2212006"], + "NCI": ["C27390"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OSMBT": { + "code": "OSMBT", + "color": "LightBlue", + "name": "Ovarian Seromucinous Borderline Tumor", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C1511264"], + "NCI": ["C40038"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OCS": { + "code": "OCS", + "color": "LightBlue", + "name": "Ovarian Carcinosarcoma/Malignant Mixed Mesodermal Tumor", + "mainType": "Ovarian Cancer", + "externalReferences": { + "UMLS": ["C0392998"], + "NCI": ["C9192"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OVT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "OVARY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "OGCT": { + "code": "OGCT", + "color": "LightBlue", + "name": "Ovarian Germ Cell Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0238324"], + "NCI": ["C3873"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": { + "OIMT": { + "code": "OIMT", + "color": "LightBlue", + "name": "Immature Teratoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0346182"], + "NCI": ["C8111"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OPE": { + "code": "OPE", + "color": "LightBlue", + "name": "Polyembryoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1514199"], + "NCI": ["C39990"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OMGCT": { + "code": "OMGCT", + "color": "LightBlue", + "name": "Mixed Germ Cell Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0280135"], + "NCI": ["C8114"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OMT": { + "code": "OMT", + "color": "LightBlue", + "name": "Mature Teratoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1334637"], + "NCI": ["C8112"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ODYS": { + "code": "ODYS", + "color": "LightBlue", + "name": "Dysgerminoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0346185"], + "NCI": ["C8106"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OEC": { + "code": "OEC", + "color": "LightBlue", + "name": "Embryonal Carcinoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0346183"], + "NCI": ["C8108"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OYST": { + "code": "OYST", + "color": "LightBlue", + "name": "Yolk Sac Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0346188"], + "NCI": ["C8107"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "OGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "OVARY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SCST": { + "code": "SCST", + "color": "LightBlue", + "name": "Sex Cord Stromal Tumor", + "mainType": "Sex Cord Stromal Tumor", + "externalReferences": { + "UMLS": ["C0600113"], + "NCI": ["C4862"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": { + "SLCT": { + "code": "SLCT", + "color": "LightBlue", + "name": "Sertoli-Leydig Cell Tumor", + "mainType": "Sex Cord Stromal Tumor", + "externalReferences": { + "UMLS": ["C0003810"], + "NCI": ["C2880"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "SCST", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCT": { + "code": "SCT", + "color": "LightBlue", + "name": "Steroid Cell Tumor, NOS", + "mainType": "Sex Cord Stromal Tumor", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "SCST", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GRCT": { + "code": "GRCT", + "color": "LightBlue", + "name": "Granulosa Cell Tumor", + "mainType": "Sex Cord Stromal Tumor", + "externalReferences": { + "UMLS": ["C0018206"], + "NCI": ["C3070"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "SCST", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OGBL": { + "code": "OGBL", + "color": "LightBlue", + "name": "Gonadoblastoma", + "mainType": "Sex Cord Stromal Tumor", + "externalReferences": { + "UMLS": ["C1518716"], + "NCI": ["C39985"] + }, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "SCST", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "FT": { + "code": "FT", + "color": "LightBlue", + "name": "Fibrothecoma", + "mainType": "Sex Cord Stromal Tumor", + "externalReferences": {}, + "tissue": "Ovary/Fallopian Tube", + "children": {}, + "parent": "SCST", + "history": ["MFT"], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "OVARY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "LYMPH": { + "code": "LYMPH", + "color": "LimeGreen", + "name": "Lymphoid", + "mainType": "Lymphatic Cancer", + "externalReferences": { + "UMLS": ["C0024202"], + "NCI": ["C13252"] + }, + "tissue": "Lymphoid", + "children": { + "LNM": { + "code": "LNM", + "color": "LimeGreen", + "name": "Lymphoid Neoplasm", + "mainType": "Lymphatic Cancer, NOS", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "PTLD": { + "code": "PTLD", + "color": "LimeGreen", + "name": "Posttransplant Lymphoproliferative Disorders", + "mainType": "Posttransplant Lymphoproliferative Disorders", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "CHLPTLD": { + "code": "CHLPTLD", + "color": "LimeGreen", + "name": "Classical Hodgkin Lymphoma PTLD", + "mainType": "Posttransplant Lymphoproliferative Disorders", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "PTLD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "PPTLD": { + "code": "PPTLD", + "color": "LimeGreen", + "name": "Polymorphic PTLD", + "mainType": "Posttransplant Lymphoproliferative Disorders", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "PTLD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "FHPTLD": { + "code": "FHPTLD", + "color": "LimeGreen", + "name": "Florid Follicular Hyperplasia PTLD", + "mainType": "Posttransplant Lymphoproliferative Disorders", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "PTLD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MPTLD": { + "code": "MPTLD", + "color": "LimeGreen", + "name": "Monomorphic PTLD (B- and T-/NK-cell types)", + "mainType": "Posttransplant Lymphoproliferative Disorders", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "PTLD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "PHPTLD": { + "code": "PHPTLD", + "color": "LimeGreen", + "name": "Plasmacytic Hyperplasia PTLD", + "mainType": "Posttransplant Lymphoproliferative Disorders", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "PTLD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "IMPTLD": { + "code": "IMPTLD", + "color": "LimeGreen", + "name": "Infectious Mononucleosis PTLD", + "mainType": "Posttransplant Lymphoproliferative Disorders", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "PTLD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "LNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BLL": { + "code": "BLL", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "BLLRGA": { + "code": "BLLRGA", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with Recurrent Genetic Abnormalities", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "BLLBCRABL1L": { + "code": "BLLBCRABL1L", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma, BCR-ABL1 Like", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLLKMT2A": { + "code": "BLLKMT2A", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with t(v;11q23.3);KMT2A Rearranged", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLLTCF3PBX1": { + "code": "BLLTCF3PBX1", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with t(1;19)(q23;p13.3);TCF3-PBX1", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLLIL3IGH": { + "code": "BLLIL3IGH", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with t(5;14)(q31.1;q32.3) IL3-IGH", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLLIAMP21": { + "code": "BLLIAMP21", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with iAMP21", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLLHYPER": { + "code": "BLLHYPER", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with Hyperdiploidy", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLLHYPO": { + "code": "BLLHYPO", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with Hypodiploidy", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLLBCRABL1": { + "code": "BLLBCRABL1", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with t(9;22)(q34.1;q11.2);BCR-ABL1", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLLETV6RUNX1": { + "code": "BLLETV6RUNX1", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma with t(12;21)(p13.2;q22.1); ETV6-RUNX1", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "BLL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "BLLNOS": { + "code": "BLLNOS", + "color": "LimeGreen", + "name": "B-Lymphoblastic Leukemia/Lymphoma, NOS", + "mainType": "B-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "BLL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "LNM", + "history": [], + "level": 3, + "revocations": ["ALL"], + "precursors": ["BALL"] + }, + "NHL": { + "code": "NHL", + "color": "LimeGreen", + "name": "Non-Hodgkin Lymphoma", + "mainType": "Non-Hodgkin Lymphoma", + "externalReferences": { + "UMLS": ["C0024305"], + "NCI": ["C3211"] + }, + "tissue": "Lymphoid", + "children": { + "MBN": { + "code": "MBN", + "color": "LimeGreen", + "name": "Mature B-Cell Neoplasms", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["CL448793"], + "NCI": ["C3457"] + }, + "tissue": "Lymphoid", + "children": { + "SPB": { + "code": "SPB", + "color": "LimeGreen", + "name": "Solitary Plasmacytoma of Bone", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "FL": { + "code": "FL", + "color": "LimeGreen", + "name": "Follicular Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0024301"], + "NCI": ["C3209"] + }, + "tissue": "Lymphoid", + "children": { + "ISFN": { + "code": "ISFN", + "color": "LimeGreen", + "name": "In Situ Follicular Neoplasia", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "FL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "DFL": { + "code": "DFL", + "color": "LimeGreen", + "name": "Duodenal-Type Follicular Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "FL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MCBCL": { + "code": "MCBCL", + "color": "LimeGreen", + "name": "Monoclonal B-Cell Lymphocytosis", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "LPL": { + "code": "LPL", + "color": "LimeGreen", + "name": "Lymphoplasmacytic Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "WM": { + "code": "WM", + "color": "LimeGreen", + "name": "Waldenstrom Macroglobulinemia", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0024419"], + "NCI": ["C80307"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "LPL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BL": { + "code": "BL", + "color": "LimeGreen", + "name": "Burkitt Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0006413"], + "NCI": ["C2912"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCLBCLLT": { + "code": "PCLBCLLT", + "color": "LimeGreen", + "name": "Primary Cutaneous DLBCL, Leg Type", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "EBVMCU": { + "code": "EBVMCU", + "color": "LimeGreen", + "name": "EBV Positive Mucocutaneous Ulcer", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "DLBCLCI": { + "code": "DLBCLCI", + "color": "LimeGreen", + "name": "DLBCL Associated with Chronic Inflammation", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BPLL": { + "code": "BPLL", + "color": "LimeGreen", + "name": "B-Cell Prolymphocytic Leukemia", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCNSL": { + "code": "PCNSL", + "color": "LimeGreen", + "name": "Primary DLBCL of the central nervous system", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0280803"], + "NCI": ["C9301"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BCLU": { + "code": "BCLU", + "color": "LimeGreen", + "name": "B-Cell Lymphoma, Unclassifiable, with Features Intermediate between DLBCL and Classical Hodgkin lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AHCD": { + "code": "AHCD", + "color": "LimeGreen", + "name": "Alpha Heavy-Chain Disease", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "CLLSLL": { + "code": "CLLSLL", + "color": "LimeGreen", + "name": "Chronic Lymphocytic Leukemia/Small Lymphocytic Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0855095"], + "NCI": ["C7540"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": ["CLL", "SLL"] + }, + "MHCD": { + "code": "MHCD", + "color": "LimeGreen", + "name": "Mu Heavy-Chain Disease", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCFCL": { + "code": "PCFCL", + "color": "LimeGreen", + "name": "Primary Cutaneous Follicle Center Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "LYG": { + "code": "LYG", + "color": "LimeGreen", + "name": "Lymphomatoid Granulomatosis", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "HGBCL": { + "code": "HGBCL", + "color": "LimeGreen", + "name": "High-Grade B-Cell Lymphoma, NOS", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MGUS": { + "code": "MGUS", + "color": "LimeGreen", + "name": "Monoclonal Gammopathy of Undetermined Significance", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "MGUSIGG": { + "code": "MGUSIGG", + "color": "LimeGreen", + "name": "IgG", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MGUS", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "MGUSIGA": { + "code": "MGUSIGA", + "color": "LimeGreen", + "name": "IgA", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MGUS", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "MGUSIGM": { + "code": "MGUSIGM", + "color": "LimeGreen", + "name": "IgM", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MGUS", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "BLL11Q": { + "code": "BLL11Q", + "color": "LimeGreen", + "name": "Burkitt-Like Lymphoma with 11q Aberration", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "HHV8DLBCL": { + "code": "HHV8DLBCL", + "color": "LimeGreen", + "name": "HHV8 Positive DLBCL, NOS", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PMBL": { + "code": "PMBL", + "color": "LimeGreen", + "name": "Primary Mediastinal (Thymic) Large B-Cell Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C1292754"], + "NCI": ["C9280"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": ["MBCL"], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PLBL": { + "code": "PLBL", + "color": "LimeGreen", + "name": "Plasmablastic Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "GHCD": { + "code": "GHCD", + "color": "LimeGreen", + "name": "Gamma Heavy-Chain Disease", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "EBVDLBCLNOS": { + "code": "EBVDLBCLNOS", + "color": "LimeGreen", + "name": "EBV Positive DLBCL, NOS", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "LBLIRF4": { + "code": "LBLIRF4", + "color": "LimeGreen", + "name": "Large B-Cell Lymphoma with IRF4 Rearrangement", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "EP": { + "code": "EP", + "color": "LimeGreen", + "name": "Extraosseous Plasmacytoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PTFL": { + "code": "PTFL", + "color": "LimeGreen", + "name": "Pediatric-Type Follicular Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "HCL": { + "code": "HCL", + "color": "LimeGreen", + "name": "Hairy Cell Leukemia", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0023443"], + "NCI": ["C7402"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "HGBCLMYCBCL2": { + "code": "HGBCLMYCBCL2", + "color": "LimeGreen", + "name": "High-Grade B-Cell Lymphoma, with MYC and BCL2 and/or BCL6 Rearrangements", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "THRLBCL": { + "code": "THRLBCL", + "color": "LimeGreen", + "name": "T-Cell/Histiocyte-Rich Large B-Cell Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "DLBCLNOS": { + "code": "DLBCLNOS", + "color": "LimeGreen", + "name": "Diffuse Large B-Cell Lymphoma, NOS", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "ABC": { + "code": "ABC", + "color": "LimeGreen", + "name": "Activated B-cell Type", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "DLBCLNOS", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "GCB": { + "code": "GCB", + "color": "LimeGreen", + "name": "Germinal Center B-Cell Type", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "DLBCLNOS", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": ["DLBCL"] + }, + "IVBCL": { + "code": "IVBCL", + "color": "LimeGreen", + "name": "Intravascular Large B-Cell Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PEL": { + "code": "PEL", + "color": "LimeGreen", + "name": "Primary Effusion Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C1292753"], + "NCI": ["C6915"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "ALKLBCL": { + "code": "ALKLBCL", + "color": "LimeGreen", + "name": "ALK Positive Large B-Cell Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MCL": { + "code": "MCL", + "color": "LimeGreen", + "name": "Mantle Cell Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0334634"], + "NCI": ["C4337"] + }, + "tissue": "Lymphoid", + "children": { + "ISMCL": { + "code": "ISMCL", + "color": "LimeGreen", + "name": "In Situ Mantle Cell Neoplasia", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MCL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MIDD": { + "code": "MIDD", + "color": "LimeGreen", + "name": "Monoclonal Immunoglobulin Deposition Diseases", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "MIDDO": { + "code": "MIDDO", + "color": "LimeGreen", + "name": "Monoclonal Immunoglobulin Deposition Diseases, Other", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MIDD", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "MIDDA": { + "code": "MIDDA", + "color": "LimeGreen", + "name": "Amyloidosis", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MIDD", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCM": { + "code": "PCM", + "color": "LimeGreen", + "name": "Plasma Cell Myeloma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0026764"], + "NCI": ["C3242"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MBN", + "history": ["MM"], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MZL": { + "code": "MZL", + "color": "LimeGreen", + "name": "Marginal Zone Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C1367654"], + "NCI": ["C4341"] + }, + "tissue": "Lymphoid", + "children": { + "EMALT": { + "code": "EMALT", + "color": "LimeGreen", + "name": "Extranodal Marginal Zone Lymphoma of Mucosa-Associated Lymphoid Tissue (MALT lymphoma)", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0242647"], + "NCI": ["C3898"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MZL", + "history": ["MALTL"], + "level": 6, + "revocations": [], + "precursors": [] + }, + "NMZL": { + "code": "NMZL", + "color": "LimeGreen", + "name": "Nodal Marginal Zone Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0855139"], + "NCI": ["C8863"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MZL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "SMZL": { + "code": "SMZL", + "color": "LimeGreen", + "name": "Splenic Marginal Zone Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": { + "UMLS": ["C0349632"], + "NCI": ["C4663"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MZL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "SBLU": { + "code": "SBLU", + "color": "LimeGreen", + "name": "Splenic B-Cell Lymphoma/Leukemia, Unclassifiable", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "HCL-V": { + "code": "HCL-V", + "color": "LimeGreen", + "name": "Hairy Cell Leukemia-Variant", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "SBLU", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "SDRPL": { + "code": "SDRPL", + "color": "LimeGreen", + "name": "Splenic Diffuse Red Pulp Small B-Cell Lymphoma", + "mainType": "Mature B-Cell Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "SBLU", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "NHL", + "history": ["BCL"], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MTNN": { + "code": "MTNN", + "color": "LimeGreen", + "name": "Mature T and NK Neoplasms", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": { + "UMLS": ["C0079772"], + "NCI": ["C3466"] + }, + "tissue": "Lymphoid", + "children": { + "ITLPDGI": { + "code": "ITLPDGI", + "color": "LimeGreen", + "name": "Indolent T-Cell Lymphoproliferative Disorder of the GI Tract", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCAECTCL": { + "code": "PCAECTCL", + "color": "LimeGreen", + "name": "Primary Cutaneous CD8 Positive Aggressive Epidermotropic Cytotoxic T-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PTCL": { + "code": "PTCL", + "color": "LimeGreen", + "name": "Peripheral T-Cell lymphoma, NOS", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": ["PTCLNOS"], + "level": 5, + "revocations": ["PTCL"], + "precursors": [] + }, + "ALCL": { + "code": "ALCL", + "color": "LimeGreen", + "name": "Anaplastic Large Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": { + "UMLS": ["C0206180"], + "NCI": ["C3720"] + }, + "tissue": "Lymphoid", + "children": { + "BIALCL": { + "code": "BIALCL", + "color": "LimeGreen", + "name": "Breast Implant-Associated Anaplastic Large-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "ALCL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "ALCLALKP": { + "code": "ALCLALKP", + "color": "LimeGreen", + "name": "Anaplastic Large-Cell Lymphoma ALK Positive", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "ALCL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "ALCLALKN": { + "code": "ALCLALKN", + "color": "LimeGreen", + "name": "Anaplastic Large-Cell Lymphoma ALK Negative", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "ALCL", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "SEBVTLC": { + "code": "SEBVTLC", + "color": "LimeGreen", + "name": "Systemic EBV Positive T-Cell Lymphoma of Childhood", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "HSTCL": { + "code": "HSTCL", + "color": "LimeGreen", + "name": "Hepatosplenic T-cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "ANKL": { + "code": "ANKL", + "color": "LimeGreen", + "name": "Aggressive NK-Cell Leukemia", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "FTCL": { + "code": "FTCL", + "color": "LimeGreen", + "name": "Follicular T-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "TPLL": { + "code": "TPLL", + "color": "LimeGreen", + "name": "T-Cell Prolymphocytic Leukemia", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCATCL": { + "code": "PCATCL", + "color": "LimeGreen", + "name": "Primary Cutaneous Acral CD8 Positive T-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "SS": { + "code": "SS", + "color": "LimeGreen", + "name": "Sezary Syndrome", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": ["SEZS"], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCGDTCL": { + "code": "PCGDTCL", + "color": "LimeGreen", + "name": "Primary Cutaneous Gamma Delta T-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCSMTPLD": { + "code": "PCSMTPLD", + "color": "LimeGreen", + "name": "Primary Cutaneous CD4 Positive Small/Medium T-Cell Lymphoproliferative Disorder", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "ENKL": { + "code": "ENKL", + "color": "LimeGreen", + "name": "Extranodal NK-/T-Cell Lymphoma, Nasal Type", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PCLPD": { + "code": "PCLPD", + "color": "LimeGreen", + "name": "Primary Cutaneous CD30 Positive T-Cell Lymphoproliferative Disorders", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "PCALCL": { + "code": "PCALCL", + "color": "LimeGreen", + "name": "Primary Cutaneous Anaplastic Large Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "PCLPD", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + }, + "LYP": { + "code": "LYP", + "color": "LimeGreen", + "name": "Lymphomatoid Papulosis", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "PCLPD", + "history": [], + "level": 6, + "revocations": [], + "precursors": [] + } + }, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MYCF": { + "code": "MYCF", + "color": "LimeGreen", + "name": "Mycosis Fungoides", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": { + "UMLS": ["C0026948"], + "NCI": ["C3246"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": ["CTCL"] + }, + "HVLL": { + "code": "HVLL", + "color": "LimeGreen", + "name": "Hydroa Vacciniforme Like Lymphoproliferative Disorder", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "ATLL": { + "code": "ATLL", + "color": "LimeGreen", + "name": "Adult T-Cell Leukemia/Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "NPTLTFH": { + "code": "NPTLTFH", + "color": "LimeGreen", + "name": "Nodal Peripheral T-Cell Lymphoma with TFH Phenotype", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "CLPDNK": { + "code": "CLPDNK", + "color": "LimeGreen", + "name": "Chronic Lymphoproliferative Disorder of NK Cells", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "EATL": { + "code": "EATL", + "color": "LimeGreen", + "name": "Enteropathy-Associated T-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MEITL": { + "code": "MEITL", + "color": "LimeGreen", + "name": "Monomorphic Epitheliotropic Intestinal T-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": ["MEATL"], + "level": 5, + "revocations": [], + "precursors": [] + }, + "SPTCL": { + "code": "SPTCL", + "color": "LimeGreen", + "name": "Subcutaneous Panniculitis-Like T-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "TLGL": { + "code": "TLGL", + "color": "LimeGreen", + "name": "T-Cell Large Granular Lymphocytic Leukemia", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": { + "UMLS": ["C1955861"], + "NCI": ["C4664"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": ["LGLL"], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AITL": { + "code": "AITL", + "color": "LimeGreen", + "name": "Angioimmunoblastic T-Cell Lymphoma", + "mainType": "Mature T and NK Neoplasms", + "externalReferences": { + "UMLS": ["C0020981"], + "NCI": ["C7528"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "MTNN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "NHL", + "history": ["TNKL"], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "LNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HL": { + "code": "HL", + "color": "LimeGreen", + "name": "Hodgkin Lymphoma", + "mainType": "Hodgkin Lymphoma", + "externalReferences": { + "UMLS": ["C0019829"], + "NCI": ["C9357"] + }, + "tissue": "Lymphoid", + "children": { + "NLPHL": { + "code": "NLPHL", + "color": "LimeGreen", + "name": "Nodular Lymphocyte-Predominant Hodgkin Lymphoma", + "mainType": "Hodgkin Lymphoma", + "externalReferences": { + "UMLS": ["C1334968"], + "NCI": ["C7258"] + }, + "tissue": "Lymphoid", + "children": {}, + "parent": "HL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "CHL": { + "code": "CHL", + "color": "LimeGreen", + "name": "Classical Hodgkin Lymphoma", + "mainType": "Hodgkin Lymphoma", + "externalReferences": { + "UMLS": ["C1333064"], + "NCI": ["C7164"] + }, + "tissue": "Lymphoid", + "children": { + "LDCHL": { + "code": "LDCHL", + "color": "LimeGreen", + "name": "Lymphocyte-Depleted Classical Hodgkin Lymphoma", + "mainType": "Hodgkin Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "CHL", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "NSCHL": { + "code": "NSCHL", + "color": "LimeGreen", + "name": "Nodular Sclerosis Classical Hodgkin Lymphoma", + "mainType": "Hodgkin Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "CHL", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "LRCHL": { + "code": "LRCHL", + "color": "LimeGreen", + "name": "Lymphocyte-Rich Classical Hodgkin Lymphoma", + "mainType": "Hodgkin Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "CHL", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MCCHL": { + "code": "MCCHL", + "color": "LimeGreen", + "name": "Mixed Cellularity Classical Hodgkin Lymphoma", + "mainType": "Hodgkin Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "CHL", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "HL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "LNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "TLL": { + "code": "TLL", + "color": "LimeGreen", + "name": "T-Lymphoblastic Leukemia/Lymphoma", + "mainType": "T-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": { + "NKCLL": { + "code": "NKCLL", + "color": "LimeGreen", + "name": "Natural Killer (NK) Cell Lymphoblastic Leukemia/Lymphoma", + "mainType": "T-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "TLL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "ETPLL": { + "code": "ETPLL", + "color": "LimeGreen", + "name": "Early T-Cell Precursor Lymphoblastic Leukemia", + "mainType": "T-Lymphoblastic Leukemia/Lymphoma", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "TLL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "LNM", + "history": [], + "level": 3, + "revocations": ["ALL"], + "precursors": ["TALL"] + } + }, + "parent": "LYMPH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LATL": { + "code": "LATL", + "color": "LimeGreen", + "name": "Lymphoid Atypical", + "mainType": "Lymphatic Cancer, NOS", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "LYMPH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LBGN": { + "code": "LBGN", + "color": "LimeGreen", + "name": "Lymphoid Benign", + "mainType": "Lymphatic Cancer, NOS", + "externalReferences": {}, + "tissue": "Lymphoid", + "children": {}, + "parent": "LYMPH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "SOFT_TISSUE": { + "code": "SOFT_TISSUE", + "color": "LightYellow", + "name": "Soft Tissue", + "mainType": "Soft Tissue Cancer", + "externalReferences": { + "UMLS": ["C0225317"], + "NCI": ["C12471"] + }, + "tissue": "Soft Tissue", + "children": { + "LM": { + "code": "LM", + "color": "LightYellow", + "name": "Leiomyoma", + "mainType": "Soft Tissue Cancer", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MPC": { + "code": "MPC", + "color": "LightYellow", + "name": "Myopericytoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1302808"], + "NCI": ["C50401"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LGFMS": { + "code": "LGFMS", + "color": "LightYellow", + "name": "Low-Grade Fibromyxoid Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1275282"], + "NCI": ["C45202"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "TGCT": { + "code": "TGCT", + "color": "LightYellow", + "name": "Tenosynovial Giant Cell Tumor Diffuse Type", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0039106"], + "NCI": ["C3401"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "AFH": { + "code": "AFH", + "color": "LightYellow", + "name": "Angiomatoid Fibrous Histiocytoma", + "mainType": "Angiomatoid Fibrous Histiocytoma", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "RAS": { + "code": "RAS", + "color": "LightYellow", + "name": "Radiation-Associated Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C2985448"], + "NCI": ["C93125"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "INTS": { + "code": "INTS", + "color": "LightYellow", + "name": "Intimal Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1708550"], + "NCI": ["C53677"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MYXO": { + "code": "MYXO", + "color": "LightYellow", + "name": "Myxoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0027149"], + "NCI": ["C6577"] + }, + "tissue": "Soft Tissue", + "children": { + "OFMT": { + "code": "OFMT", + "color": "LightYellow", + "name": "Ossifying Fibromyxoid Tumor", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1266128"], + "NCI": ["C6582"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "MYXO", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ANGS": { + "code": "ANGS", + "color": "LightYellow", + "name": "Angiosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0018923"], + "NCI": ["C3088"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ALT": { + "code": "ALT", + "color": "LightYellow", + "name": "Atypical Lipomatous Tumor", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SYNS": { + "code": "SYNS", + "color": "LightYellow", + "name": "Synovial Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0039101"], + "NCI": ["C3400"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "STMYEC": { + "code": "STMYEC", + "color": "LightYellow", + "name": "Soft Tissue Myoepithelial Carcinoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0334699"], + "NCI": ["C7596"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MFH": { + "code": "MFH", + "color": "LightYellow", + "name": "Undifferentiated Pleomorphic Sarcoma/Malignant Fibrous Histiocytoma/High-Grade Spindle Cell Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0334463"], + "NCI": ["C4247"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PGNG": { + "code": "PGNG", + "color": "Gray", + "name": "Paraganglioma", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C0030421"], + "NCI": ["C3308"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "IFS": { + "code": "IFS", + "color": "LightYellow", + "name": "Infantile Fibrosarcoma", + "mainType": "Infantile Fibrosarcoma", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MF": { + "code": "MF", + "color": "LightYellow", + "name": "Myofibroma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1266121"], + "NCI": ["C7052"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PECOMA": { + "code": "PECOMA", + "color": "LightYellow", + "name": "Perivascular Epithelioid Cell Tumor", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1300127"], + "NCI": ["C38150"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MFS": { + "code": "MFS", + "color": "LightYellow", + "name": "Myxofibrosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0334454"], + "NCI": ["C6496"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LIPO": { + "code": "LIPO", + "color": "LightYellow", + "name": "Liposarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0023827"], + "NCI": ["C3194"] + }, + "tissue": "Soft Tissue", + "children": { + "DDLS": { + "code": "DDLS", + "color": "LightYellow", + "name": "Dedifferentiated Liposarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0205824"], + "NCI": ["C3704"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "LIPO", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MRLS": { + "code": "MRLS", + "color": "LightYellow", + "name": "Myxoid/Round-Cell Liposarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0206634"], + "NCI": ["C27781"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "LIPO", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "WDLS": { + "code": "WDLS", + "color": "LightYellow", + "name": "Well-Differentiated Liposarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1370889"], + "NCI": ["C4250"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "LIPO", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PLLS": { + "code": "PLLS", + "color": "LightYellow", + "name": "Pleomorphic Liposarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0205825"], + "NCI": ["C3705"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "LIPO", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MGST": { + "code": "MGST", + "color": "LightYellow", + "name": "Malignant Glomus Tumor", + "mainType": "Malignant Glomus Tumor", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PMHE": { + "code": "PMHE", + "color": "LightYellow", + "name": "Pseudomyogenic Hemangioendothelioma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["CL479537"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "AA": { + "code": "AA", + "color": "LightYellow", + "name": "Aggressive Angiomyxoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1306242"], + "NCI": ["C6936"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SFT": { + "code": "SFT", + "color": "LightYellow", + "name": "Solitary Fibrous Tumor/Hemangiopericytoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1266119"], + "NCI": ["C7634"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SARCNOS": { + "code": "SARCNOS", + "color": "LightYellow", + "name": "Sarcoma, NOS", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "GIST": { + "code": "GIST", + "color": "LightYellow", + "name": "Gastrointestinal Stromal Tumor", + "mainType": "Gastrointestinal Stromal Tumor", + "externalReferences": { + "UMLS": ["C0238198"], + "NCI": ["C3868"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "EHAE": { + "code": "EHAE", + "color": "LightYellow", + "name": "Epithelioid Hemangioendothelioma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0206732"], + "NCI": ["C3800"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ASPS": { + "code": "ASPS", + "color": "LightYellow", + "name": "Alveolar Soft Part Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0206657"], + "NCI": ["C3750"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "GS": { + "code": "GS", + "color": "LightYellow", + "name": "Glomangiosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1266111"], + "NCI": ["C4221"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "IMS": { + "code": "IMS", + "color": "LightYellow", + "name": "Myofibromatosis", + "mainType": "Myofibromatosis", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ESST": { + "code": "ESST", + "color": "LightYellow", + "name": "Ewing Sarcoma of Soft Tissue", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "HEMA": { + "code": "HEMA", + "color": "LightYellow", + "name": "Hemangioma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0018916"], + "NCI": ["C3085"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "IMT": { + "code": "IMT", + "color": "LightYellow", + "name": "Inflammatory Myofibroblastic Tumor", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0334121"], + "NCI": ["C6481"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "DSRCT": { + "code": "DSRCT", + "color": "LightYellow", + "name": "Desmoplastic Small-Round-Cell Tumor", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0281508"], + "NCI": ["C8300"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CCS": { + "code": "CCS", + "color": "LightYellow", + "name": "Clear Cell Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0206651"], + "NCI": ["C3745"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LMS": { + "code": "LMS", + "color": "LightYellow", + "name": "Leiomyosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0023269"], + "NCI": ["C3158"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "DES": { + "code": "DES", + "color": "LightYellow", + "name": "Desmoid/Aggressive Fibromatosis", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0079218"], + "NCI": ["C9182"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "FIBS": { + "code": "FIBS", + "color": "LightYellow", + "name": "Fibrosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0016057"], + "NCI": ["C3043"] + }, + "tissue": "Soft Tissue", + "children": { + "SEF": { + "code": "SEF", + "color": "LightYellow", + "name": "Sclerosing Epithelioid Fibrosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1710026"], + "NCI": ["C49027"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "FIBS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "RCSNOS": { + "code": "RCSNOS", + "color": "LightYellow", + "name": "Round Cell Sarcoma, NOS", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": {}, + "tissue": "Soft Tissue", + "children": {}, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "EPIS": { + "code": "EPIS", + "color": "LightYellow", + "name": "Epithelioid Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0205944"], + "NCI": ["C3714"] + }, + "tissue": "Soft Tissue", + "children": { + "PTES": { + "code": "PTES", + "color": "LightYellow", + "name": "Proximal-Type Epithelioid Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1335563"], + "NCI": ["C27472"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "EPIS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "DCS": { + "code": "DCS", + "color": "LightYellow", + "name": "Dendritic Cell Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1334030"], + "NCI": ["C9294"] + }, + "tissue": "Soft Tissue", + "children": { + "HDCS": { + "code": "HDCS", + "color": "LightYellow", + "name": "Histiocytic Dendritic Cell Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0334663"], + "NCI": ["C27349"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "DCS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "RMS": { + "code": "RMS", + "color": "LightYellow", + "name": "Rhabdomyosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0035412"], + "NCI": ["C3359"] + }, + "tissue": "Soft Tissue", + "children": { + "ARMS": { + "code": "ARMS", + "color": "LightYellow", + "name": "Alveolar Rhabdomyosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0206655"], + "NCI": ["C3749"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "RMS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCRMS": { + "code": "SCRMS", + "color": "LightYellow", + "name": "Spindle Cell Rhabdomyosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1266134"], + "NCI": ["C6519"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "RMS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ERMS": { + "code": "ERMS", + "color": "LightYellow", + "name": "Embryonal Rhabdomyosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0206656"], + "NCI": ["C8971"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "RMS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCSRMS": { + "code": "SCSRMS", + "color": "LightYellow", + "name": "Spindle Cell/Sclerosing Rhabdomyosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["CL494117"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "RMS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PLRMS": { + "code": "PLRMS", + "color": "LightYellow", + "name": "Pleomorphic Rhabdomyosarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C0334480"], + "NCI": ["C4258"] + }, + "tissue": "Soft Tissue", + "children": {}, + "parent": "RMS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "SOFT_TISSUE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "THYROID": { + "code": "THYROID", + "color": "Teal", + "name": "Thyroid", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C0040132"], + "NCI": ["C12400"] + }, + "tissue": "Thyroid", + "children": { + "OAT": { + "code": "OAT", + "color": "Teal", + "name": "Oncocytic Adenoma of the Thyroid", + "mainType": "Thyroid Cancer", + "externalReferences": {}, + "tissue": "Thyroid", + "children": {}, + "parent": "THYROID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "THAP": { + "code": "THAP", + "color": "Teal", + "name": "Anaplastic Thyroid Cancer", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C0238461"], + "NCI": ["C3878"] + }, + "tissue": "Thyroid", + "children": {}, + "parent": "THYROID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "WDTC": { + "code": "WDTC", + "color": "Teal", + "name": "Well-Differentiated Thyroid Cancer", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C1337013"], + "NCI": ["C7153"] + }, + "tissue": "Thyroid", + "children": { + "THPA": { + "code": "THPA", + "color": "Teal", + "name": "Papillary Thyroid Cancer", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C0238463"], + "NCI": ["C4035"] + }, + "tissue": "Thyroid", + "children": {}, + "parent": "WDTC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "THFO": { + "code": "THFO", + "color": "Teal", + "name": "Follicular Thyroid Cancer", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C0206682"], + "NCI": ["C8054"] + }, + "tissue": "Thyroid", + "children": {}, + "parent": "WDTC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "THYROID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "THHC": { + "code": "THHC", + "color": "Teal", + "name": "Hurthle Cell Thyroid Cancer", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C0749424"], + "NCI": ["C4946"] + }, + "tissue": "Thyroid", + "children": {}, + "parent": "THYROID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "THME": { + "code": "THME", + "color": "Teal", + "name": "Medullary Thyroid Cancer", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C0238462"], + "NCI": ["C3879"] + }, + "tissue": "Thyroid", + "children": {}, + "parent": "THYROID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "HTAT": { + "code": "HTAT", + "color": "Teal", + "name": "Hyalinizing Trabecular Adenoma of the Thyroid", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C1266049"], + "NCI": ["C6846"] + }, + "tissue": "Thyroid", + "children": {}, + "parent": "THYROID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "THPD": { + "code": "THPD", + "color": "Teal", + "name": "Poorly Differentiated Thyroid Cancer", + "mainType": "Thyroid Cancer", + "externalReferences": { + "UMLS": ["C1266050"], + "NCI": ["C6040"] + }, + "tissue": "Thyroid", + "children": {}, + "parent": "THYROID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "PLEURA": { + "code": "PLEURA", + "color": "Blue", + "name": "Pleura", + "mainType": "Pleural Cancer", + "externalReferences": { + "UMLS": ["C0032225"], + "NCI": ["C12469"] + }, + "tissue": "Pleura", + "children": { + "PLMESO": { + "code": "PLMESO", + "color": "Blue", + "name": "Pleural Mesothelioma", + "mainType": "Mesothelioma", + "externalReferences": { + "UMLS": ["C1377913"], + "NCI": ["C9351"] + }, + "tissue": "Pleura", + "children": { + "PLBMESO": { + "code": "PLBMESO", + "color": "Blue", + "name": "Pleural Mesothelioma, Biphasic Type", + "mainType": "Mesothelioma", + "externalReferences": {}, + "tissue": "Pleura", + "children": {}, + "parent": "PLMESO", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PLEMESO": { + "code": "PLEMESO", + "color": "Blue", + "name": "Pleural Mesothelioma, Epithelioid Type", + "mainType": "Mesothelioma", + "externalReferences": {}, + "tissue": "Pleura", + "children": {}, + "parent": "PLMESO", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PLSMESO": { + "code": "PLSMESO", + "color": "Blue", + "name": "Pleural Mesothelioma, Sarcomatoid Type", + "mainType": "Mesothelioma", + "externalReferences": {}, + "tissue": "Pleura", + "children": {}, + "parent": "PLMESO", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "PLEURA", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "PANCREAS": { + "code": "PANCREAS", + "color": "Purple", + "name": "Pancreas", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C0030274"], + "NCI": ["C12393"] + }, + "tissue": "Pancreas", + "children": { + "SPN": { + "code": "SPN", + "color": "Purple", + "name": "Solid Pseudopapillary Neoplasm of the Pancreas", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C1336030"], + "NCI": ["C37212"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PAAD": { + "code": "PAAD", + "color": "Purple", + "name": "Pancreatic Adenocarcinoma", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C0281361"], + "NCI": ["C8294"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PB": { + "code": "PB", + "color": "Purple", + "name": "Pancreatoblastoma", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C0334489"], + "NCI": ["C4265"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "UCP": { + "code": "UCP", + "color": "Purple", + "name": "Undifferentiated Carcinoma of the Pancreas", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C1336861"], + "NCI": ["C5722"] + }, + "tissue": "Pancreas", + "children": { + "OSGCT": { + "code": "OSGCT", + "color": "Purple", + "name": "Osteoclastic Giant Cell Tumor", + "mainType": "Pancreatic Cancer", + "externalReferences": {}, + "tissue": "Pancreas", + "children": {}, + "parent": "UCP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PAASC": { + "code": "PAASC", + "color": "Purple", + "name": "Adenosquamous Carcinoma of the Pancreas", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C1335299"], + "NCI": ["C5721"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PAAC": { + "code": "PAAC", + "color": "Purple", + "name": "Acinar Cell Carcinoma of the Pancreas", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C0279661"], + "NCI": ["C7977"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PACT": { + "code": "PACT", + "color": "Purple", + "name": "Cystic Tumor of the Pancreas", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C1518872"], + "NCI": ["C41247"] + }, + "tissue": "Pancreas", + "children": { + "PSC": { + "code": "PSC", + "color": "Purple", + "name": "Serous Cystadenoma of the Pancreas", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C1335316"], + "NCI": ["C5712"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PACT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MCN": { + "code": "MCN", + "color": "Purple", + "name": "Mucinous Cystic Neoplasm", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C1518872"], + "NCI": ["C41247"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PACT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "IPMN": { + "code": "IPMN", + "color": "Purple", + "name": "Intraductal Papillary Mucinous Neoplasm", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C1518869"], + "NCI": ["C38342"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PACT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ITPN": { + "code": "ITPN", + "color": "Purple", + "name": "Intraductal Tubulopapillary Neoplasm", + "mainType": "Pancreatic Cancer", + "externalReferences": {}, + "tissue": "Pancreas", + "children": {}, + "parent": "PACT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "IOPN": { + "code": "IOPN", + "color": "Purple", + "name": "Intraductal Oncocytic Papillary Neoplasm", + "mainType": "Pancreatic Cancer", + "externalReferences": {}, + "tissue": "Pancreas", + "children": {}, + "parent": "PACT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PANET": { + "code": "PANET", + "color": "Purple", + "name": "Pancreatic Neuroendocrine Tumor", + "mainType": "Pancreatic Cancer", + "externalReferences": { + "UMLS": ["C1337011"], + "NCI": ["C27720"] + }, + "tissue": "Pancreas", + "children": {}, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PANEC": { + "code": "PANEC", + "color": "Purple", + "name": "Pancreatic Neuroendocrine Carcinoma", + "mainType": "Pancreatic Cancer", + "externalReferences": {}, + "tissue": "Pancreas", + "children": {}, + "parent": "PANCREAS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "BILIARY_TRACT": { + "code": "BILIARY_TRACT", + "color": "Green", + "name": "Biliary Tract", + "mainType": "Biliary Tract Cancer", + "externalReferences": { + "UMLS": ["C0005423"], + "NCI": ["C12678"] + }, + "tissue": "Biliary Tract", + "children": { + "IPN": { + "code": "IPN", + "color": "Green", + "name": "Intraductal Papillary Neoplasm of the Bile Duct", + "mainType": "Hepatobiliary Cancer", + "externalReferences": {}, + "tissue": "Biliary Tract", + "children": { + "CHOL": { + "code": "CHOL", + "color": "Green", + "name": "Cholangiocarcinoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0206698"], + "NCI": ["C4436"] + }, + "tissue": "Biliary Tract", + "children": { + "EHCH": { + "code": "EHCH", + "color": "Green", + "name": "Extrahepatic Cholangiocarcinoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": {}, + "tissue": "Biliary Tract", + "children": {}, + "parent": "CHOL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "PHCH": { + "code": "PHCH", + "color": "Green", + "name": "Perihilar Cholangiocarcinoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C3273047"], + "NCI": ["C96804"] + }, + "tissue": "Biliary Tract", + "children": {}, + "parent": "CHOL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "IHCH": { + "code": "IHCH", + "color": "Green", + "name": "Intrahepatic Cholangiocarcinoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0345905"], + "NCI": ["C35417"] + }, + "tissue": "Biliary Tract", + "children": {}, + "parent": "CHOL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "IPN", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BILIARY_TRACT", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ICPN": { + "code": "ICPN", + "color": "Green", + "name": "Intracholecystic Papillary Neoplasm", + "mainType": "Hepatobiliary Cancer", + "externalReferences": {}, + "tissue": "Biliary Tract", + "children": { + "GBC": { + "code": "GBC", + "color": "Green", + "name": "Gallbladder Cancer", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0235782"], + "NCI": ["C3844"] + }, + "tissue": "Biliary Tract", + "children": { + "GBASC": { + "code": "GBASC", + "color": "Green", + "name": "Adenosquamous Carcinoma of the Gallbladder", + "mainType": "Hepatobiliary Cancer", + "externalReferences": {}, + "tissue": "Biliary Tract", + "children": {}, + "parent": "GBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "SCGBC": { + "code": "SCGBC", + "color": "Green", + "name": "Small Cell Gallbladder Carcinoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": {}, + "tissue": "Biliary Tract", + "children": {}, + "parent": "GBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "GBAD": { + "code": "GBAD", + "color": "Green", + "name": "Gallbladder Adenocarcinoma, NOS", + "mainType": "Hepatobiliary Cancer", + "externalReferences": {}, + "tissue": "Biliary Tract", + "children": {}, + "parent": "GBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "ICPN", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BILIARY_TRACT", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "BREAST": { + "code": "BREAST", + "color": "HotPink", + "name": "Breast", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C0006141"], + "NCI": ["C12971"] + }, + "tissue": "Breast", + "children": { + "BNNOS": { + "code": "BNNOS", + "color": "HotPink", + "name": "Breast Neoplasm, NOS", + "mainType": "Breast Cancer", + "externalReferences": {}, + "tissue": "Breast", + "children": {}, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PBS": { + "code": "PBS", + "color": "HotPink", + "name": "Breast Sarcoma", + "mainType": "Breast Sarcoma", + "externalReferences": { + "UMLS": ["C0349667"], + "NCI": ["C4670"] + }, + "tissue": "Breast", + "children": { + "BA": { + "code": "BA", + "color": "HotPink", + "name": "Breast Angiosarcoma", + "mainType": "Breast Sarcoma", + "externalReferences": { + "UMLS": ["C1332614"], + "NCI": ["C5184"] + }, + "tissue": "Breast", + "children": {}, + "parent": "PBS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "BRAME": { + "code": "BRAME", + "color": "HotPink", + "name": "Adenomyoepithelioma of the Breast", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1510795"], + "NCI": ["C6899"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "BRCA": { + "code": "BRCA", + "color": "HotPink", + "name": "Invasive Breast Carcinoma", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C0853879"], + "NCI": ["C9245"] + }, + "tissue": "Breast", + "children": { + "ILC": { + "code": "ILC", + "color": "HotPink", + "name": "Breast Invasive Lobular Carcinoma", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C0279565"], + "NCI": ["C7950"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BRCANOS": { + "code": "BRCANOS", + "color": "HotPink", + "name": "Breast Invasive Cancer, NOS", + "mainType": "Breast Cancer", + "externalReferences": {}, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BRSRCC": { + "code": "BRSRCC", + "color": "HotPink", + "name": "Breast Carcinoma with Signet Ring", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1335964"], + "NCI": ["C5175"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CSNOS": { + "code": "CSNOS", + "color": "HotPink", + "name": "Breast Invasive Carcinosarcoma, NOS", + "mainType": "Breast Cancer", + "externalReferences": {}, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SPC": { + "code": "SPC", + "color": "HotPink", + "name": "Solid Papillary Carcinoma of the Breast", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1336027"], + "NCI": ["C6870"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "IMMC": { + "code": "IMMC", + "color": "HotPink", + "name": "Breast Invasive Mixed Mucinous Carcinoma", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1334807"], + "NCI": ["C9131"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "IDC": { + "code": "IDC", + "color": "HotPink", + "name": "Breast Invasive Ductal Carcinoma", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1134719"], + "NCI": ["C4194"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MDLC": { + "code": "MDLC", + "color": "HotPink", + "name": "Breast Mixed Ductal and Lobular Carcinoma", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["CL007210"], + "NCI": ["C5160"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BRCNOS": { + "code": "BRCNOS", + "color": "HotPink", + "name": "Breast Invasive Carcinoma, NOS", + "mainType": "Breast Cancer", + "externalReferences": {}, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ACBC": { + "code": "ACBC", + "color": "HotPink", + "name": "Adenoid Cystic Breast Cancer", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1332167"], + "NCI": ["C5130"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BRCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LCIS": { + "code": "LCIS", + "color": "HotPink", + "name": "Breast Lobular Carcinoma In Situ", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C0279563"], + "NCI": ["C4018"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "DCIS": { + "code": "DCIS", + "color": "HotPink", + "name": "Breast Ductal Carcinoma In Situ", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C0007124"], + "NCI": ["C2924"] + }, + "tissue": "Breast", + "children": { + "PD": { + "code": "PD", + "color": "HotPink", + "name": "Paget Disease of the Nipple", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1704323"], + "NCI": ["C3301"] + }, + "tissue": "Breast", + "children": {}, + "parent": "DCIS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "JSCB": { + "code": "JSCB", + "color": "HotPink", + "name": "Juvenile Secretory Carcinoma of the Breast", + "mainType": "Breast Cancer", + "externalReferences": {}, + "tissue": "Breast", + "children": {}, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "BFN": { + "code": "BFN", + "color": "HotPink", + "name": "Breast Fibroepithelial Neoplasms", + "mainType": "Breast Sarcoma", + "externalReferences": { + "UMLS": ["C1511309"], + "NCI": ["C40405"] + }, + "tissue": "Breast", + "children": { + "PT": { + "code": "PT", + "color": "HotPink", + "name": "Phyllodes Tumor of the Breast", + "mainType": "Breast Sarcoma", + "externalReferences": { + "UMLS": ["C0238031"], + "NCI": ["C7575"] + }, + "tissue": "Breast", + "children": { + "MPT": { + "code": "MPT", + "color": "HotPink", + "name": "Malignant Phyllodes Tumor of the Breast", + "mainType": "Breast Sarcoma", + "externalReferences": { + "UMLS": ["C0346154"], + "NCI": ["C4504"] + }, + "tissue": "Breast", + "children": {}, + "parent": "PT", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "BLPT": { + "code": "BLPT", + "color": "HotPink", + "name": "Borderline Phyllodes Tumor of the Breast", + "mainType": "Breast Sarcoma", + "externalReferences": { + "UMLS": ["C1332592"], + "NCI": ["C5316"] + }, + "tissue": "Breast", + "children": {}, + "parent": "PT", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "BPT": { + "code": "BPT", + "color": "HotPink", + "name": "Benign Phyllodes Tumor of the Breast", + "mainType": "Breast Sarcoma", + "externalReferences": { + "UMLS": ["C1332533"], + "NCI": ["C5196"] + }, + "tissue": "Breast", + "children": {}, + "parent": "PT", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "BFN", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "FA": { + "code": "FA", + "color": "HotPink", + "name": "Fibroadenoma", + "mainType": "Breast Sarcoma", + "externalReferences": { + "UMLS": ["C0206650"], + "NCI": ["C3744"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BFN", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "IBC": { + "code": "IBC", + "color": "HotPink", + "name": "Inflammatory Breast Cancer", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C0278601"], + "NCI": ["C4001"] + }, + "tissue": "Breast", + "children": {}, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MBC": { + "code": "MBC", + "color": "HotPink", + "name": "Metaplastic Breast Cancer", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1334708"], + "NCI": ["C5164"] + }, + "tissue": "Breast", + "children": { + "MMBC": { + "code": "MMBC", + "color": "HotPink", + "name": "Mixed Type Metaplastic Breast Cancer", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1513365"], + "NCI": ["C40364"] + }, + "tissue": "Breast", + "children": { + "COM": { + "code": "COM", + "color": "HotPink", + "name": "Carcinoma with Osseous Metaplasia", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1711312"], + "NCI": ["C47848"] + }, + "tissue": "Breast", + "children": {}, + "parent": "MMBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MCS": { + "code": "MCS", + "color": "HotPink", + "name": "Metaplastic Carcinosarcoma", + "mainType": "Breast Cancer", + "externalReferences": {}, + "tissue": "Breast", + "children": {}, + "parent": "MMBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "CCHM": { + "code": "CCHM", + "color": "HotPink", + "name": "Carcinoma with Chondroid Metaplasia", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1707042"], + "NCI": ["C47847"] + }, + "tissue": "Breast", + "children": {}, + "parent": "MMBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "EMBC": { + "code": "EMBC", + "color": "HotPink", + "name": "Epithelial Type Metaplastic Breast Cancer", + "mainType": "Breast Cancer", + "externalReferences": {}, + "tissue": "Breast", + "children": { + "MASCC": { + "code": "MASCC", + "color": "HotPink", + "name": "Metaplastic Adenocarcinoma with Spindle Cell Differentiation", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1519487"], + "NCI": ["C40358"] + }, + "tissue": "Breast", + "children": {}, + "parent": "EMBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MSCC": { + "code": "MSCC", + "color": "HotPink", + "name": "Metaplastic Squamous Cell Carcinoma", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1336079"], + "NCI": ["C5177"] + }, + "tissue": "Breast", + "children": {}, + "parent": "EMBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MASC": { + "code": "MASC", + "color": "HotPink", + "name": "Metaplastic Adenosquamous Carcinoma", + "mainType": "Breast Cancer", + "externalReferences": { + "UMLS": ["C1510796"], + "NCI": ["C40361"] + }, + "tissue": "Breast", + "children": {}, + "parent": "EMBC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BREAST", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "HEAD_NECK": { + "code": "HEAD_NECK", + "color": "DarkRed", + "name": "Head and Neck", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0460004"], + "NCI": ["C12418"] + }, + "tissue": "Head and Neck", + "children": { + "NPC": { + "code": "NPC", + "color": "DarkRed", + "name": "Nasopharyngeal Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C2931822"], + "NCI": ["C3871"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "HEAD_NECK", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "HNMUCM": { + "code": "HNMUCM", + "color": "DarkRed", + "name": "Head and Neck Mucosal Melanoma", + "mainType": "Melanoma", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "HEAD_NECK", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PTH": { + "code": "PTH", + "color": "DarkRed", + "name": "Parathyroid Cancer", + "mainType": "Parathyroid Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": { + "PTHC": { + "code": "PTHC", + "color": "DarkRed", + "name": "Parathyroid Carcinoma", + "mainType": "Parathyroid Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "PTH", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "HEAD_NECK", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "HNSC": { + "code": "HNSC", + "color": "DarkRed", + "name": "Head and Neck Squamous Cell Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C1168401"], + "NCI": ["C34447"] + }, + "tissue": "Head and Neck", + "children": { + "OCSC": { + "code": "OCSC", + "color": "DarkRed", + "name": "Oral Cavity Squamous Cell Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0585362"], + "NCI": ["C4833"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "HNSC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OPHSC": { + "code": "OPHSC", + "color": "DarkRed", + "name": "Oropharynx Squamous Cell Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0280313"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "HNSC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HPHSC": { + "code": "HPHSC", + "color": "DarkRed", + "name": "Hypopharynx Squamous Cell Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0280321"], + "NCI": ["C4043"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "HNSC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SNSC": { + "code": "SNSC", + "color": "DarkRed", + "name": "Sinonasal Squamous Cell Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0334270"], + "NCI": ["C54287"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "HNSC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LXSC": { + "code": "LXSC", + "color": "DarkRed", + "name": "Larynx Squamous Cell Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0280324"], + "NCI": ["C4044"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "HNSC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HNSCUP": { + "code": "HNSCUP", + "color": "DarkRed", + "name": "Head and Neck Squamous Cell Carcinoma of Unknown Primary", + "mainType": "Head and Neck Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "HNSC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "HEAD_NECK", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "OHNCA": { + "code": "OHNCA", + "color": "DarkRed", + "name": "Head and Neck Carcinoma, Other", + "mainType": "Head and Neck Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": { + "ODGC": { + "code": "ODGC", + "color": "DarkRed", + "name": "Odontogenic Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0334558"], + "NCI": ["C4812"] + }, + "tissue": "Head and Neck", + "children": { + "CCOC": { + "code": "CCOC", + "color": "DarkRed", + "name": "Clear Cell Odontogenic Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0475829"], + "NCI": ["C54300"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "ODGC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "OHNCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "NMCHN": { + "code": "NMCHN", + "color": "DarkRed", + "name": "NUT Midline Carcinoma of the Head and Neck", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C1707291"], + "NCI": ["C45716"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "OHNCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SNA": { + "code": "SNA", + "color": "DarkRed", + "name": "Sinonasal Adenocarcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["CL473651"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "OHNCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "EMYOCA": { + "code": "EMYOCA", + "color": "DarkRed", + "name": "Epithelial-Myoepithelial Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C0334392"], + "NCI": ["C4199"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "OHNCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HNNE": { + "code": "HNNE", + "color": "DarkRed", + "name": "Head and Neck Neuroendocrine Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "OHNCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ASCT": { + "code": "ASCT", + "color": "DarkRed", + "name": "Adenosquamous Carcinoma of the Tongue", + "mainType": "Head and Neck Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "OHNCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SNUC": { + "code": "SNUC", + "color": "DarkRed", + "name": "Sinonasal Undifferentiated Carcinoma", + "mainType": "Head and Neck Cancer", + "externalReferences": { + "UMLS": ["C1710096"], + "NCI": ["C54294"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "OHNCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "HEAD_NECK", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SACA": { + "code": "SACA", + "color": "DarkRed", + "name": "Salivary Carcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": { + "UMLS": ["C0948750"], + "NCI": ["C9272"] + }, + "tissue": "Head and Neck", + "children": { + "OSACA": { + "code": "OSACA", + "color": "DarkRed", + "name": "Salivary Carcinoma, Other", + "mainType": "Salivary Gland Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HNMASC": { + "code": "HNMASC", + "color": "DarkRed", + "name": "Mammary Analogue Secretory Carcinoma of Salivary Gland Origin", + "mainType": "Salivary Gland Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SDCA": { + "code": "SDCA", + "color": "DarkRed", + "name": "Salivary Duct Carcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": { + "UMLS": ["C1301194"], + "NCI": ["C5904"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PADA": { + "code": "PADA", + "color": "DarkRed", + "name": "Pleomorphic Adenoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CAEXPA": { + "code": "CAEXPA", + "color": "DarkRed", + "name": "Carcinoma ex Pleomorphic Adenoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MUCC": { + "code": "MUCC", + "color": "DarkRed", + "name": "Mucoepidermoid Carcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": { + "UMLS": ["C0206694"], + "NCI": ["C3772"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MYEC": { + "code": "MYEC", + "color": "DarkRed", + "name": "Myoepithelial Carcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": { + "UMLS": ["C1335904"], + "NCI": ["C35700"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ACYC": { + "code": "ACYC", + "color": "DarkRed", + "name": "Adenoid Cystic Carcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": { + "UMLS": ["C0010606"], + "NCI": ["C2970"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PAC": { + "code": "PAC", + "color": "DarkRed", + "name": "Polymorphous Adenocarcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SAAD": { + "code": "SAAD", + "color": "DarkRed", + "name": "Salivary Adenocarcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": { + "UMLS": ["C0279746"], + "NCI": ["C8021"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SGO": { + "code": "SGO", + "color": "DarkRed", + "name": "Salivary Gland Oncocytoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": { + "UMLS": ["C1335906"], + "NCI": ["C5932"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ACCC": { + "code": "ACCC", + "color": "DarkRed", + "name": "Acinic Cell Carcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": { + "UMLS": ["C0206685"], + "NCI": ["C3768"] + }, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BCAC": { + "code": "BCAC", + "color": "DarkRed", + "name": "Basal Cell Adenocarcinoma", + "mainType": "Salivary Gland Cancer", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "SACA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "HEAD_NECK", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SBL": { + "code": "SBL", + "color": "DarkRed", + "name": "Sialoblastoma", + "mainType": "Sialoblastoma", + "externalReferences": {}, + "tissue": "Head and Neck", + "children": {}, + "parent": "HEAD_NECK", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "EYE": { + "code": "EYE", + "color": "Green", + "name": "Eye", + "mainType": "Eye Cancer", + "externalReferences": { + "UMLS": ["C0015392"], + "NCI": ["C12401"] + }, + "tissue": "Eye", + "children": { + "LGT": { + "code": "LGT", + "color": "Green", + "name": "Lacrimal Gland Tumor", + "mainType": "Lacrimal Gland Tumor", + "externalReferences": {}, + "tissue": "Eye", + "children": { + "SCLG": { + "code": "SCLG", + "color": "Green", + "name": "Squamous Cell Carcinoma of the Lacrimal Gland", + "mainType": "Lacrimal Gland Tumor", + "externalReferences": {}, + "tissue": "Eye", + "children": {}, + "parent": "LGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ACLG": { + "code": "ACLG", + "color": "Green", + "name": "Adenoid Cystic Carcinoma of the Lacrimal Gland", + "mainType": "Lacrimal Gland Tumor", + "externalReferences": {}, + "tissue": "Eye", + "children": {}, + "parent": "LGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "EYE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "RBL": { + "code": "RBL", + "color": "Green", + "name": "Retinoblastoma", + "mainType": "Retinoblastoma", + "externalReferences": { + "UMLS": ["C0035335"], + "NCI": ["C7541"] + }, + "tissue": "Eye", + "children": {}, + "parent": "EYE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "OM": { + "code": "OM", + "color": "Green", + "name": "Ocular Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C0558356"], + "NCI": ["C8562"] + }, + "tissue": "Eye", + "children": { + "UM": { + "code": "UM", + "color": "Green", + "name": "Uveal Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C0220633"], + "NCI": ["C7712"] + }, + "tissue": "Eye", + "children": {}, + "parent": "OM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CM": { + "code": "CM", + "color": "Green", + "name": "Conjunctival Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C0346360"], + "NCI": ["C4550"] + }, + "tissue": "Eye", + "children": {}, + "parent": "OM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "EYE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "AMPULLA_OF_VATER": { + "code": "AMPULLA_OF_VATER", + "color": "Purple", + "name": "Ampulla of Vater", + "mainType": "Ampullary Carcinoma", + "externalReferences": { + "UMLS": ["C0042425"], + "NCI": ["C13011"] + }, + "tissue": "Ampulla of Vater", + "children": { + "AMPCA": { + "code": "AMPCA", + "color": "Purple", + "name": "Ampullary Carcinoma", + "mainType": "Ampullary Cancer", + "externalReferences": { + "UMLS": ["C0262401"], + "NCI": ["C3908"] + }, + "tissue": "Ampulla of Vater", + "children": { + "IAMPCA": { + "code": "IAMPCA", + "color": "Purple", + "name": "Intestinal Ampullary Carcinoma", + "mainType": "Ampullary Cancer", + "externalReferences": { + "UMLS": ["C1332247"], + "NCI": ["C27415"] + }, + "tissue": "Ampulla of Vater", + "children": {}, + "parent": "AMPCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MAMPCA": { + "code": "MAMPCA", + "color": "Purple", + "name": "Mixed Ampullary Carcinoma", + "mainType": "Ampullary Cancer", + "externalReferences": {}, + "tissue": "Ampulla of Vater", + "children": {}, + "parent": "AMPCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PAMPCA": { + "code": "PAMPCA", + "color": "Purple", + "name": "Pancreatobiliary Ampullary Carcinoma", + "mainType": "Ampullary Cancer", + "externalReferences": {}, + "tissue": "Ampulla of Vater", + "children": {}, + "parent": "AMPCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "AMPULLA_OF_VATER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "THYMUS": { + "code": "THYMUS", + "color": "Purple", + "name": "Thymus", + "mainType": "Thymic Cancer", + "externalReferences": { + "UMLS": ["C0040113"], + "NCI": ["C12433"] + }, + "tissue": "Thymus", + "children": { + "TET": { + "code": "TET", + "color": "Purple", + "name": "Thymic Epithelial Tumor", + "mainType": "Thymic Tumor", + "externalReferences": { + "UMLS": ["C1266101"], + "NCI": ["C6450"] + }, + "tissue": "Thymus", + "children": { + "THYC": { + "code": "THYC", + "color": "Purple", + "name": "Thymic Carcinoma", + "mainType": "Thymic Tumor", + "externalReferences": { + "UMLS": ["C0205969"], + "NCI": ["C7569"] + }, + "tissue": "Thymus", + "children": {}, + "parent": "TET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "THYM": { + "code": "THYM", + "color": "Purple", + "name": "Thymoma", + "mainType": "Thymic Tumor", + "externalReferences": { + "UMLS": ["C0040100"], + "NCI": ["C3411"] + }, + "tissue": "Thymus", + "children": {}, + "parent": "TET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "THYMUS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "TNET": { + "code": "TNET", + "color": "Purple", + "name": "Thymic Neuroendocrine Tumor", + "mainType": "Thymic Tumor", + "externalReferences": {}, + "tissue": "Thymus", + "children": {}, + "parent": "THYMUS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "CERVIX": { + "code": "CERVIX", + "color": "Teal", + "name": "Cervix", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C0007874"], + "NCI": ["C12311"] + }, + "tissue": "Cervix", + "children": { + "CABC": { + "code": "CABC", + "color": "Teal", + "name": "Cervical Adenoid Basal Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1516403"], + "NCI": ["C40213"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CELI": { + "code": "CELI", + "color": "Teal", + "name": "Cervical Leiomyosarcoma", + "mainType": "Cervical Cancer", + "externalReferences": {}, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CACC": { + "code": "CACC", + "color": "Teal", + "name": "Cervical Adenoid Cystic Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1332911"], + "NCI": ["C6346"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CENE": { + "code": "CENE", + "color": "Teal", + "name": "Cervical Neuroendocrine Tumor", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1516417"], + "NCI": ["C40214"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CERMS": { + "code": "CERMS", + "color": "Teal", + "name": "Cervical Rhabdomyosarcoma", + "mainType": "Cervical Cancer", + "externalReferences": {}, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CEAS": { + "code": "CEAS", + "color": "Teal", + "name": "Cervical Adenosquamous Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C0346202"], + "NCI": ["C4519"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CESC": { + "code": "CESC", + "color": "Teal", + "name": "Cervical Squamous Cell Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C0279671"], + "NCI": ["C4028"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SCCE": { + "code": "SCCE", + "color": "Teal", + "name": "Small Cell Carcinoma of the Cervix", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C0279674"], + "NCI": ["C7982"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CEGCC": { + "code": "CEGCC", + "color": "Teal", + "name": "Glassy Cell Carcinoma of the Cervix", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1516407"], + "NCI": ["C40212"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CEAIS": { + "code": "CEAIS", + "color": "Teal", + "name": "Cervical Adenocarcinoma In Situ", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C0346203"], + "NCI": ["C4520"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CEAD": { + "code": "CEAD", + "color": "Teal", + "name": "Cervical Adenocarcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C0279672"], + "NCI": ["C4029"] + }, + "tissue": "Cervix", + "children": { + "ECAD": { + "code": "ECAD", + "color": "Teal", + "name": "Endocervical Adenocarcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1299237"], + "NCI": ["C28327"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CEAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CEEN": { + "code": "CEEN", + "color": "Teal", + "name": "Cervical Endometrioid Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C0206687"], + "NCI": ["C3769"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CEAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CEMU": { + "code": "CEMU", + "color": "Teal", + "name": "Mucinous Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C0007130"], + "NCI": ["C26712"] + }, + "tissue": "Cervix", + "children": { + "SCEMU": { + "code": "SCEMU", + "color": "Teal", + "name": "Signet Ring Mucinous Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1516424"], + "NCI": ["C40205"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CEMU", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "GCEMU": { + "code": "GCEMU", + "color": "Teal", + "name": "Gastric Type Mucinous Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": {}, + "tissue": "Cervix", + "children": {}, + "parent": "CEMU", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "ICEMU": { + "code": "ICEMU", + "color": "Teal", + "name": "Intestinal Type Mucinous Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1516422"], + "NCI": ["C40203"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CEMU", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "CEAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CESE": { + "code": "CESE", + "color": "Teal", + "name": "Cervical Serous Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": {}, + "tissue": "Cervix", + "children": {}, + "parent": "CEAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CEMN": { + "code": "CEMN", + "color": "Teal", + "name": "Mesonephric Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["CL329978"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CEAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CEVG": { + "code": "CEVG", + "color": "Teal", + "name": "Villoglandular Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1516425"], + "NCI": ["C40208"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CEAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CECC": { + "code": "CECC", + "color": "Teal", + "name": "Cervical Clear Cell Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1332912"], + "NCI": ["C6344"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CEAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "VGCE": { + "code": "VGCE", + "color": "Teal", + "name": "Villoglandular Adenocarcinoma of the Cervix", + "mainType": "Cervical Cancer", + "externalReferences": { + "UMLS": ["C1516425"], + "NCI": ["C40208"] + }, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MCCE": { + "code": "MCCE", + "color": "Teal", + "name": "Mixed Cervical Carcinoma", + "mainType": "Cervical Cancer", + "externalReferences": {}, + "tissue": "Cervix", + "children": {}, + "parent": "CERVIX", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "PNS": { + "code": "PNS", + "color": "Gray", + "name": "Peripheral Nervous System", + "mainType": "Peripheral Nervous System Cancer", + "externalReferences": { + "UMLS": ["C0206417"], + "NCI": ["C12465"] + }, + "tissue": "Peripheral Nervous System", + "children": { + "GNBL": { + "code": "GNBL", + "color": "Gray", + "name": "Ganglioneuroblastoma", + "mainType": "Peripheral Nervous System", + "externalReferences": { + "UMLS": ["C0206718"], + "NCI": ["C3790"] + }, + "tissue": "Peripheral Nervous System", + "children": {}, + "parent": "PNS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "NBL": { + "code": "NBL", + "color": "Gray", + "name": "Neuroblastoma", + "mainType": "Peripheral Nervous System", + "externalReferences": { + "UMLS": ["C0027819"], + "NCI": ["C3270"] + }, + "tissue": "Peripheral Nervous System", + "children": {}, + "parent": "PNS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "NST": { + "code": "NST", + "color": "Gray", + "name": "Nerve Sheath Tumor", + "mainType": "Nerve Sheath Tumor", + "externalReferences": { + "UMLS": ["C0206727"], + "NCI": ["C4972"] + }, + "tissue": "Peripheral Nervous System", + "children": { + "NFIB": { + "code": "NFIB", + "color": "Gray", + "name": "Neurofibroma", + "mainType": "Nerve Sheath Tumor", + "externalReferences": { + "UMLS": ["C0027830"], + "NCI": ["C3272"] + }, + "tissue": "Peripheral Nervous System", + "children": {}, + "parent": "NST", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCHW": { + "code": "SCHW", + "color": "Gray", + "name": "Schwannoma", + "mainType": "Nerve Sheath Tumor", + "externalReferences": { + "UMLS": ["C0027809"], + "NCI": ["C3269"] + }, + "tissue": "Peripheral Nervous System", + "children": { + "CSCHW": { + "code": "CSCHW", + "color": "Gray", + "name": "Cellular Schwannoma", + "mainType": "Nerve Sheath Tumor", + "externalReferences": { + "UMLS": ["C0431124"], + "NCI": ["C4724"] + }, + "tissue": "Peripheral Nervous System", + "children": {}, + "parent": "SCHW", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MSCHW": { + "code": "MSCHW", + "color": "Gray", + "name": "Melanotic Schwannoma", + "mainType": "Nerve Sheath Tumor", + "externalReferences": { + "UMLS": ["C1306247"], + "NCI": ["C6970"] + }, + "tissue": "Peripheral Nervous System", + "children": {}, + "parent": "SCHW", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "NST", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MPNST": { + "code": "MPNST", + "color": "Gray", + "name": "Malignant Peripheral Nerve Sheath Tumor", + "mainType": "Nerve Sheath Tumor", + "externalReferences": { + "UMLS": ["C0751690"], + "NCI": ["C3798"] + }, + "tissue": "Peripheral Nervous System", + "children": {}, + "parent": "NST", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "PNS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "GN": { + "code": "GN", + "color": "Gray", + "name": "Ganglioneuroma", + "mainType": "Peripheral Nervous System", + "externalReferences": {}, + "tissue": "Peripheral Nervous System", + "children": {}, + "parent": "PNS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "BOWEL": { + "code": "BOWEL", + "color": "SaddleBrown", + "name": "Bowel", + "mainType": "Bowel Cancer", + "externalReferences": { + "UMLS": ["C0021853"], + "NCI": ["C12736"] + }, + "tissue": "Bowel", + "children": { + "GINET": { + "code": "GINET", + "color": "SaddleBrown", + "name": "Gastrointestinal Neuroendocrine Tumors", + "mainType": "Gastrointestinal Neuroendocrine Tumor", + "externalReferences": { + "UMLS": ["C2987127"], + "NCI": ["C95404"] + }, + "tissue": "Bowel", + "children": { + "RWDNET": { + "code": "RWDNET", + "color": "SaddleBrown", + "name": "Well-Differentiated Neuroendocrine Tumor of the Rectum", + "mainType": "Gastrointestinal Neuroendocrine Tumor", + "externalReferences": { + "UMLS": ["C3272610"], + "NCI": ["C96159"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "GINET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "AWDNET": { + "code": "AWDNET", + "color": "SaddleBrown", + "name": "Well-Differentiated Neuroendocrine Tumor of the Appendix", + "mainType": "Gastrointestinal Neuroendocrine Tumor", + "externalReferences": { + "UMLS": ["C3272767"], + "NCI": ["C96422"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "GINET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HGNEC": { + "code": "HGNEC", + "color": "SaddleBrown", + "name": "High-Grade Neuroendocrine Carcinoma of the Colon and Rectum", + "mainType": "Gastrointestinal Neuroendocrine Tumor", + "externalReferences": { + "UMLS": ["C3272607"], + "NCI": ["C96156"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "GINET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SBWDNET": { + "code": "SBWDNET", + "color": "SaddleBrown", + "name": "Small Bowel Well-Differentiated Neuroendocrine Tumor", + "mainType": "Gastrointestinal Neuroendocrine Tumor", + "externalReferences": { + "UMLS": ["C1332564"], + "NCI": ["C9461"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "GINET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ANSC": { + "code": "ANSC", + "color": "SaddleBrown", + "name": "Anal Squamous Cell Carcinoma", + "mainType": "Anal Cancer", + "externalReferences": { + "UMLS": ["C1412036"], + "NCI": ["C9161"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LAMN": { + "code": "LAMN", + "color": "SaddleBrown", + "name": "Low-grade Appendiceal Mucinous Neoplasm", + "mainType": "Appendiceal Cancer", + "externalReferences": {}, + "tissue": "Bowel", + "children": {}, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SBC": { + "code": "SBC", + "color": "SaddleBrown", + "name": "Small Bowel Cancer", + "mainType": "Small Bowel Cancer", + "externalReferences": { + "UMLS": ["C0238196"], + "NCI": ["C7724"] + }, + "tissue": "Bowel", + "children": { + "DA": { + "code": "DA", + "color": "SaddleBrown", + "name": "Duodenal Adenocarcinoma", + "mainType": "Small Bowel Cancer", + "externalReferences": { + "UMLS": ["C0278804"], + "NCI": ["C7889"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "SBC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "TAC": { + "code": "TAC", + "color": "SaddleBrown", + "name": "Tubular Adenoma of the Colon", + "mainType": "Tubular Adenoma of the Colon", + "externalReferences": {}, + "tissue": "Bowel", + "children": {}, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CMC": { + "code": "CMC", + "color": "SaddleBrown", + "name": "Medullary Carcinoma of the Colon", + "mainType": "Colorectal Cancer", + "externalReferences": { + "UMLS": ["C1880119"], + "NCI": ["C60641"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "AGA": { + "code": "AGA", + "color": "SaddleBrown", + "name": "Anal Gland Adenocarcinoma", + "mainType": "Anal Cancer", + "externalReferences": { + "UMLS": ["C1266027"], + "NCI": ["C5609"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "APAD": { + "code": "APAD", + "color": "SaddleBrown", + "name": "Appendiceal Adenocarcinoma", + "mainType": "Appendiceal Cancer", + "externalReferences": { + "UMLS": ["C0238003"], + "NCI": ["C7718"] + }, + "tissue": "Bowel", + "children": { + "MAAP": { + "code": "MAAP", + "color": "SaddleBrown", + "name": "Mucinous Adenocarcinoma of the Appendix", + "mainType": "Appendiceal Cancer", + "externalReferences": { + "UMLS": ["C1706832"], + "NCI": ["C43558"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "APAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CTAAP": { + "code": "CTAAP", + "color": "SaddleBrown", + "name": "Colonic Type Adenocarcinoma of the Appendix", + "mainType": "Appendiceal Cancer", + "externalReferences": {}, + "tissue": "Bowel", + "children": {}, + "parent": "APAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SRAP": { + "code": "SRAP", + "color": "SaddleBrown", + "name": "Signet Ring Cell Type of the Appendix", + "mainType": "Appendiceal Cancer", + "externalReferences": { + "UMLS": ["C1711320"], + "NCI": ["C43554"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "APAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GCCAP": { + "code": "GCCAP", + "color": "SaddleBrown", + "name": "Goblet Cell Adenocarcinoma of the Appendix", + "mainType": "Appendiceal Cancer", + "externalReferences": { + "UMLS": ["C0205695"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "APAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SIC": { + "code": "SIC", + "color": "SaddleBrown", + "name": "Small Intestinal Carcinoma", + "mainType": "Small Bowel Cancer", + "externalReferences": { + "UMLS": ["C0238196"], + "NCI": ["C7724"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ARMM": { + "code": "ARMM", + "color": "SaddleBrown", + "name": "Anorectal Mucosal Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C0349538"], + "NCI": ["C4639"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "COADREAD": { + "code": "COADREAD", + "color": "SaddleBrown", + "name": "Colorectal Adenocarcinoma", + "mainType": "Colorectal Cancer", + "externalReferences": { + "UMLS": ["C1319315"], + "NCI": ["C5105"] + }, + "tissue": "Bowel", + "children": { + "READ": { + "code": "READ", + "color": "SaddleBrown", + "name": "Rectal Adenocarcinoma", + "mainType": "Colorectal Cancer", + "externalReferences": { + "UMLS": ["C0149978"], + "NCI": ["C9383"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "COADREAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MACR": { + "code": "MACR", + "color": "SaddleBrown", + "name": "Mucinous Adenocarcinoma of the Colon and Rectum", + "mainType": "Colorectal Cancer", + "externalReferences": { + "UMLS": ["C1707439"], + "NCI": ["C43585"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "COADREAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "COAD": { + "code": "COAD", + "color": "SaddleBrown", + "name": "Colon Adenocarcinoma", + "mainType": "Colorectal Cancer", + "externalReferences": { + "UMLS": ["C0338106"], + "NCI": ["C4349"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "COADREAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SRCCR": { + "code": "SRCCR", + "color": "SaddleBrown", + "name": "Signet Ring Cell Adenocarcinoma of the Colon and Rectum", + "mainType": "Colorectal Cancer", + "externalReferences": { + "UMLS": ["C0279654", "C1707436"], + "NCI": ["C9168", "C7967"] + }, + "tissue": "Bowel", + "children": {}, + "parent": "COADREAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CAIS": { + "code": "CAIS", + "color": "SaddleBrown", + "name": "Colon Adenocarcinoma In Situ", + "mainType": "Colorectal Cancer", + "externalReferences": {}, + "tissue": "Bowel", + "children": {}, + "parent": "COADREAD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BOWEL", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "BONE": { + "code": "BONE", + "color": "White", + "name": "Bone", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0262950"], + "NCI": ["C12366"] + }, + "tissue": "Bone", + "children": { + "CHBL": { + "code": "CHBL", + "color": "White", + "name": "Chondroblastoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0008441"], + "NCI": ["C2945"] + }, + "tissue": "Bone", + "children": {}, + "parent": "BONE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CHDM": { + "code": "CHDM", + "color": "White", + "name": "Chordoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0008487"], + "NCI": ["C2947"] + }, + "tissue": "Bone", + "children": { + "DDCHDM": { + "code": "DDCHDM", + "color": "White", + "name": "Dedifferentiated Chordoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C1266174"], + "NCI": ["C48876"] + }, + "tissue": "Bone", + "children": {}, + "parent": "CHDM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CCHDM": { + "code": "CCHDM", + "color": "White", + "name": "Conventional Type Chordoma", + "mainType": "Bone Cancer", + "externalReferences": {}, + "tissue": "Bone", + "children": {}, + "parent": "CHDM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BONE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "OS": { + "code": "OS", + "color": "White", + "name": "Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0029463"], + "NCI": ["C9145"] + }, + "tissue": "Bone", + "children": { + "HGSOS": { + "code": "HGSOS", + "color": "White", + "name": "High-Grade Surface Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C1266165"], + "NCI": ["C53958"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PAOS": { + "code": "PAOS", + "color": "White", + "name": "Parosteal Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0206642"], + "NCI": ["C8969"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCOS": { + "code": "SCOS", + "color": "White", + "name": "Small Cell Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0279622"], + "NCI": ["C4023"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "TEOS": { + "code": "TEOS", + "color": "White", + "name": "Telangiectatic Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0259782"], + "NCI": ["C3902"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CHOS": { + "code": "CHOS", + "color": "White", + "name": "Chondroblastic Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0279603"], + "NCI": ["C4021"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SECOS": { + "code": "SECOS", + "color": "White", + "name": "Secondary Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C1710042"], + "NCI": ["C53704"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "FIOS": { + "code": "FIOS", + "color": "White", + "name": "Fibroblastic Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0279602"], + "NCI": ["C4020"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LGCOS": { + "code": "LGCOS", + "color": "White", + "name": "Low-Grade Central Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C1266163"], + "NCI": ["C6474"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PEOS": { + "code": "PEOS", + "color": "White", + "name": "Periosteal Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C1377843"], + "NCI": ["C8970"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OSOS": { + "code": "OSOS", + "color": "White", + "name": "Osteoblastic Osteosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C1704328"], + "NCI": ["C53953"] + }, + "tissue": "Bone", + "children": {}, + "parent": "OS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BONE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ADMA": { + "code": "ADMA", + "color": "White", + "name": "Adamantinoma", + "mainType": "Bone Cancer", + "externalReferences": {}, + "tissue": "Bone", + "children": {}, + "parent": "BONE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "GCTB": { + "code": "GCTB", + "color": "White", + "name": "Giant Cell Tumor of Bone", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0206638"], + "NCI": ["C121932"] + }, + "tissue": "Bone", + "children": {}, + "parent": "BONE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ES": { + "code": "ES", + "color": "White", + "name": "Ewing Sarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0553580"], + "NCI": ["C4817"] + }, + "tissue": "Bone", + "children": {}, + "parent": "BONE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CHS": { + "code": "CHS", + "color": "White", + "name": "Chondrosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0008479"], + "NCI": ["C2946"] + }, + "tissue": "Bone", + "children": { + "DDCHS": { + "code": "DDCHS", + "color": "White", + "name": "Dedifferentiated Chondrosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0862878"], + "NCI": ["C6476"] + }, + "tissue": "Bone", + "children": {}, + "parent": "CHS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MYCHS": { + "code": "MYCHS", + "color": "White", + "name": "Myxoid Chondrosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C0334551"], + "NCI": ["C4303"] + }, + "tissue": "Bone", + "children": {}, + "parent": "CHS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MCHS": { + "code": "MCHS", + "color": "White", + "name": "Mesenchymal Chondrosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C1708980"], + "NCI": ["C53493"] + }, + "tissue": "Bone", + "children": {}, + "parent": "CHS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "EMCHS": { + "code": "EMCHS", + "color": "White", + "name": "Extraskeletal Myxoid Chondrosarcoma", + "mainType": "Bone Cancer", + "externalReferences": { + "UMLS": ["C1275278"], + "NCI": ["C27502"] + }, + "tissue": "Bone", + "children": {}, + "parent": "CHS", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BONE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "SKIN": { + "code": "SKIN", + "color": "Black", + "name": "Skin", + "mainType": "Skin Cancer", + "externalReferences": { + "UMLS": ["C1123023"], + "NCI": ["C12470"] + }, + "tissue": "Skin", + "children": { + "SPIR": { + "code": "SPIR", + "color": "Black", + "name": "Spiroma/Spiradenoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0334347"], + "NCI": ["C4170"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "DFSP": { + "code": "DFSP", + "color": "Black", + "name": "Dermatofibrosarcoma Protuberans", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0392784"], + "NCI": ["C4683"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "DF": { + "code": "DF", + "color": "Black", + "name": "Dermatofibroma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0002991"], + "NCI": ["C6801"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "BCC": { + "code": "BCC", + "color": "Black", + "name": "Basal Cell Carcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0007117"], + "NCI": ["C2921"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "EMPSGC": { + "code": "EMPSGC", + "color": "Black", + "name": "Endocrine Mucin Producing Sweat Gland Carcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": {}, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ADPA": { + "code": "ADPA", + "color": "Black", + "name": "Aggressive Digital Papillary Adenocarcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C1367789"], + "NCI": ["C27534"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MCC": { + "code": "MCC", + "color": "Black", + "name": "Merkel Cell Carcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0007129"], + "NCI": ["C9231"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "AN": { + "code": "AN", + "color": "Black", + "name": "Atypical Nevus", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": {}, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MAC": { + "code": "MAC", + "color": "Black", + "name": "Microcystic Adnexal Carcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0346027"], + "NCI": ["C7581"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CSCC": { + "code": "CSCC", + "color": "Black", + "name": "Cutaneous Squamous Cell Carcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0553723"], + "NCI": ["C4819"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SGAD": { + "code": "SGAD", + "color": "Black", + "name": "Sweat Gland Adenocarcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C1883403"], + "NCI": ["C3682"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "AFX": { + "code": "AFX", + "color": "Black", + "name": "Atypical Fibroxanthoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0346053"], + "NCI": ["C4246"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "DTE": { + "code": "DTE", + "color": "Black", + "name": "Desmoplastic Trichoepithelioma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0432526"], + "NCI": ["C27524"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PPCT": { + "code": "PPCT", + "color": "Black", + "name": "Proliferating Pilar Cystic Tumor", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0345992"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MEL": { + "code": "MEL", + "color": "Black", + "name": "Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C0025202"], + "NCI": ["C3224"] + }, + "tissue": "Skin", + "children": { + "SKLMM": { + "code": "SKLMM", + "color": "Black", + "name": "Lentigo Maligna Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C2739810"], + "NCI": ["C9151"] + }, + "tissue": "Skin", + "children": {}, + "parent": "MEL", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ACRM": { + "code": "ACRM", + "color": "Black", + "name": "Acral Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C0346037"], + "NCI": ["C4022"] + }, + "tissue": "Skin", + "children": {}, + "parent": "MEL", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SKCM": { + "code": "SKCM", + "color": "Black", + "name": "Cutaneous Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C0151779"], + "NCI": ["C3510"] + }, + "tissue": "Skin", + "children": {}, + "parent": "MEL", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "DESM": { + "code": "DESM", + "color": "Black", + "name": "Desmoplastic Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C0334439"], + "NCI": ["C37257"] + }, + "tissue": "Skin", + "children": {}, + "parent": "MEL", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SKCN": { + "code": "SKCN", + "color": "Black", + "name": "Congenital Nevus", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C1318558"], + "NCI": ["C3944"] + }, + "tissue": "Skin", + "children": {}, + "parent": "MEL", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SPZM": { + "code": "SPZM", + "color": "Black", + "name": "Spitzoid Melanoma", + "mainType": "Melanoma", + "externalReferences": {}, + "tissue": "Skin", + "children": {}, + "parent": "MEL", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MUP": { + "code": "MUP", + "color": "Black", + "name": "Melanoma of Unknown Primary", + "mainType": "Melanoma", + "externalReferences": {}, + "tissue": "Skin", + "children": {}, + "parent": "MEL", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SEBA": { + "code": "SEBA", + "color": "Black", + "name": "Sebaceous Carcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0206684"], + "NCI": ["C40310"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "POCA": { + "code": "POCA", + "color": "Black", + "name": "Porocarcinoma/Spiroadenocarcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C1266065"], + "NCI": ["C5560"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PORO": { + "code": "PORO", + "color": "Black", + "name": "Poroma/Acrospiroma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C1533161"], + "NCI": ["C27273"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "EMPD": { + "code": "EMPD", + "color": "Black", + "name": "Extramammary Paget Disease", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0030186"], + "NCI": ["C3302"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SKAC": { + "code": "SKAC", + "color": "Black", + "name": "Skin Adnexal Carcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C0206697"], + "NCI": ["C3775"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "AECA": { + "code": "AECA", + "color": "Black", + "name": "Sweat Gland Carcinoma/Apocrine Eccrine Carcinoma", + "mainType": "Skin Cancer, Non-Melanoma", + "externalReferences": { + "UMLS": ["C1412016"], + "NCI": ["C6938"] + }, + "tissue": "Skin", + "children": {}, + "parent": "SKIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "BLADDER": { + "code": "BLADDER", + "color": "Yellow", + "name": "Bladder/Urinary Tract", + "mainType": "Bladder/Urinary Tract Cancer", + "externalReferences": { + "UMLS": ["C0005682"], + "NCI": ["C12414"] + }, + "tissue": "Bladder/Urinary Tract", + "children": { + "BLSC": { + "code": "BLSC", + "color": "Yellow", + "name": "Bladder Squamous Cell Carcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C0279681"], + "NCI": ["C4031"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "IUP": { + "code": "IUP", + "color": "Yellow", + "name": "Inverted Urothelial Papilloma", + "mainType": "Bladder Cancer", + "externalReferences": {}, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "UPA": { + "code": "UPA", + "color": "Yellow", + "name": "Urothelial Papilloma", + "mainType": "Bladder Cancer", + "externalReferences": {}, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "UTUC": { + "code": "UTUC", + "color": "Yellow", + "name": "Upper Tract Urothelial Carcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C0220648"], + "NCI": ["C7716"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "IMTB": { + "code": "IMTB", + "color": "Yellow", + "name": "Inflammatory Myofibroblastic Bladder Tumor", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C1336891"], + "NCI": ["C6177"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SRCBC": { + "code": "SRCBC", + "color": "Yellow", + "name": "Plasmacytoid/Signet Ring Cell Bladder Carcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C1512742"], + "NCI": ["C39823"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "BLAD": { + "code": "BLAD", + "color": "Yellow", + "name": "Bladder Adenocarcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C0279682"], + "NCI": ["C4032"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "UCA": { + "code": "UCA", + "color": "Yellow", + "name": "Urethral Cancer", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C0700101"], + "NCI": ["C9106"] + }, + "tissue": "Bladder/Urinary Tract", + "children": { + "USCC": { + "code": "USCC", + "color": "Yellow", + "name": "Urethral Squamous Cell Carcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C1336890"], + "NCI": ["C6165"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "UCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UAD": { + "code": "UAD", + "color": "Yellow", + "name": "Urethral Adenocarcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C1336885"], + "NCI": ["C6167"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "UCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UCU": { + "code": "UCU", + "color": "Yellow", + "name": "Urethral Urothelial Carcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["CL448335"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "UCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SCB": { + "code": "SCB", + "color": "Yellow", + "name": "Sarcomatoid Carcinoma of the Urinary Bladder", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C1512743"], + "NCI": ["C39824"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "BLCA": { + "code": "BLCA", + "color": "Yellow", + "name": "Bladder Urothelial Carcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C0279680"], + "NCI": ["C39851"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SCBC": { + "code": "SCBC", + "color": "Yellow", + "name": "Small Cell Bladder Cancer", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C1332564"], + "NCI": ["C9461"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "URMM": { + "code": "URMM", + "color": "Yellow", + "name": "Mucosal Melanoma of the Urethra", + "mainType": "Melanoma", + "externalReferences": {}, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": ["GMUCM"], + "precursors": [] + }, + "URCA": { + "code": "URCA", + "color": "Yellow", + "name": "Urachal Carcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C1511205"], + "NCI": ["C39842"] + }, + "tissue": "Bladder/Urinary Tract", + "children": { + "UA": { + "code": "UA", + "color": "Yellow", + "name": "Urachal Adenocarcinoma", + "mainType": "Bladder Cancer", + "externalReferences": { + "UMLS": ["C1511204"], + "NCI": ["C39843"] + }, + "tissue": "Bladder/Urinary Tract", + "children": {}, + "parent": "URCA", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BLADDER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "BRAIN": { + "code": "BRAIN", + "color": "Gray", + "name": "CNS/Brain", + "mainType": "CNS/Brain Cancer", + "externalReferences": { + "UMLS": ["C3714787"], + "NCI": ["C12438"] + }, + "tissue": "CNS/Brain", + "children": { + "EPMT": { + "code": "EPMT", + "color": "Gray", + "name": "Ependymomal Tumor", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C1333407"], + "NCI": ["C6770"] + }, + "tissue": "CNS/Brain", + "children": { + "SUBE": { + "code": "SUBE", + "color": "Gray", + "name": "Subependymoma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0206725"], + "NCI": ["C3795"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EPMT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MPE": { + "code": "MPE", + "color": "Gray", + "name": "Myxopapillary Ependymoma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0205769"], + "NCI": ["C3697"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EPMT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "EPM": { + "code": "EPM", + "color": "Gray", + "name": "Ependymoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0014474"], + "NCI": ["C3017"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EPMT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CCE": { + "code": "CCE", + "color": "Gray", + "name": "Clear Cell Ependymoma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C1384404"], + "NCI": ["C4714"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EPMT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "APE": { + "code": "APE", + "color": "Gray", + "name": "Anaplastic Ependymoma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0280788"], + "NCI": ["C4049"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EPMT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MNET": { + "code": "MNET", + "color": "Gray", + "name": "Miscellaneous Neuroepithelial Tumor", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C1332889"], + "NCI": ["C7172"] + }, + "tissue": "CNS/Brain", + "children": { + "CLNC": { + "code": "CLNC", + "color": "Gray", + "name": "Cerebellar Liponeurocytoma", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C1370507"], + "NCI": ["C6905"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "DIG": { + "code": "DIG", + "color": "Gray", + "name": "Desmoplastic Infantile Ganglioglioma", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C1321878"], + "NCI": ["C4738"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CHGL": { + "code": "CHGL", + "color": "Gray", + "name": "Chordoid Glioma of the Third Ventricle", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C1322252"], + "NCI": ["C5592"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PGNT": { + "code": "PGNT", + "color": "Gray", + "name": "Papillary Glioneuronal Tumor", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C2985174"], + "NCI": ["C92554"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CNC": { + "code": "CNC", + "color": "Gray", + "name": "Central Neurocytoma", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C0206719"], + "NCI": ["C3791"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ANGL": { + "code": "ANGL", + "color": "Gray", + "name": "Angiocentric Glioma", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C2363903"], + "NCI": ["C92552"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "EVN": { + "code": "EVN", + "color": "Gray", + "name": "Extraventricular Neurocytoma", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C2985175"], + "NCI": ["C92555"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "DIA": { + "code": "DIA", + "color": "Gray", + "name": "Desmoplastic Infantile Astrocytoma", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C0457179"], + "NCI": ["C9476"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "RGNT": { + "code": "RGNT", + "color": "Gray", + "name": "Rosette-forming Glioneuronal Tumor of the Fourth Ventricle", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C2347979"], + "NCI": ["C67559"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LDD": { + "code": "LDD", + "color": "Gray", + "name": "Dysplastic Gangliocytoma of the Cerebellum/Lhermitte-Duclos Disease", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C0391826"], + "NCI": ["C8419"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ASTB": { + "code": "ASTB", + "color": "Gray", + "name": "Astroblastoma", + "mainType": "Miscellaneous Neuroepithelial Tumor", + "externalReferences": { + "UMLS": ["C0334587"], + "NCI": ["C4324"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "DIFG": { + "code": "DIFG", + "color": "Gray", + "name": "Diffuse Glioma", + "mainType": "Glioma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": { + "ODG": { + "code": "ODG", + "color": "Gray", + "name": "Oligodendroglioma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0751396"], + "NCI": ["C3288"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "AASTR": { + "code": "AASTR", + "color": "Gray", + "name": "Anaplastic Astrocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0334579"], + "NCI": ["C9477"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OAST": { + "code": "OAST", + "color": "Gray", + "name": "Oligoastrocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0280793"], + "NCI": ["C4050"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "DASTR": { + "code": "DASTR", + "color": "Gray", + "name": "Diffuse Astrocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0280785"], + "NCI": ["C7173"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GNOS": { + "code": "GNOS", + "color": "Gray", + "name": "Glioma, NOS", + "mainType": "Glioma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GB": { + "code": "GB", + "color": "Gray", + "name": "Glioblastoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0017636"], + "NCI": ["C3058"] + }, + "tissue": "CNS/Brain", + "children": { + "GSARC": { + "code": "GSARC", + "color": "Gray", + "name": "Gliosarcoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0206726"], + "NCI": ["C3796"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "GB", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "SCGBM": { + "code": "SCGBM", + "color": "Gray", + "name": "Small Cell Glioblastoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C1272516"], + "NCI": ["C125890"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "GB", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "GBM": { + "code": "GBM", + "color": "Gray", + "name": "Glioblastoma Multiforme", + "mainType": "Glioma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "GB", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HGGNOS": { + "code": "HGGNOS", + "color": "Gray", + "name": "High-Grade Glioma, NOS", + "mainType": "Glioma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "AOAST": { + "code": "AOAST", + "color": "Gray", + "name": "Anaplastic Oligoastrocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0431108"], + "NCI": ["C6959"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "DIPG": { + "code": "DIPG", + "color": "Gray", + "name": "Diffuse Intrinsic Pontine Glioma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C2986658"], + "NCI": ["C94764"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ASTR": { + "code": "ASTR", + "color": "Gray", + "name": "Astrocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0004114"], + "NCI": ["C60781"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "AODG": { + "code": "AODG", + "color": "Gray", + "name": "Anaplastic Oligodendroglioma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0334590"], + "NCI": ["C4326"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DIFG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CPT": { + "code": "CPT", + "color": "Gray", + "name": "Choroid Plexus Tumor", + "mainType": "Choroid Plexus Tumor", + "externalReferences": { + "UMLS": ["C0085138"], + "NCI": ["C3473"] + }, + "tissue": "CNS/Brain", + "children": { + "ACPP": { + "code": "ACPP", + "color": "Gray", + "name": "Atypical Choroid Plexus Papilloma", + "mainType": "Choroid Plexus Tumor", + "externalReferences": { + "UMLS": ["C1266176"], + "NCI": ["C53686"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "CPT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CPP": { + "code": "CPP", + "color": "Gray", + "name": "Choroid Plexus Papilloma", + "mainType": "Choroid Plexus Tumor", + "externalReferences": { + "UMLS": ["C0205770"], + "NCI": ["C3698"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "CPT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CPC": { + "code": "CPC", + "color": "Gray", + "name": "Choroid Plexus Carcinoma", + "mainType": "Choroid Plexus Tumor", + "externalReferences": { + "UMLS": ["C0431109"], + "NCI": ["C4715"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "CPT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PCNSMT": { + "code": "PCNSMT", + "color": "Gray", + "name": "Primary CNS Melanocytic Tumors", + "mainType": "Primary CNS Melanocytic Tumors", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": { + "PCNSM": { + "code": "PCNSM", + "color": "LightSkyBlue", + "name": "Primary CNS Melanoma", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C1332888"], + "NCI": ["C5505"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "PCNSMT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MELC": { + "code": "MELC", + "color": "Gray", + "name": "Melanocytoma", + "mainType": "Melanocytoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "PCNSMT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "BGCT": { + "code": "BGCT", + "color": "Gray", + "name": "Germ Cell Tumor, Brain", + "mainType": "Germ Cell Tumor", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": { + "BCCA": { + "code": "BCCA", + "color": "Gray", + "name": "Choriocarcinoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0008497"], + "NCI": ["C2948"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "BGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BEC": { + "code": "BEC", + "color": "Gray", + "name": "Embryonal Carcinoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1333377"], + "NCI": ["C7010"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "BGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BIMT": { + "code": "BIMT", + "color": "Gray", + "name": "Immature Teratoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1332883"], + "NCI": ["C7014"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "BGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BYST": { + "code": "BYST", + "color": "Gray", + "name": "Yolk Sac Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "BGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BMGT": { + "code": "BMGT", + "color": "Gray", + "name": "Malignant Teratoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1336704"], + "NCI": ["C7015"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "BGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BMT": { + "code": "BMT", + "color": "Gray", + "name": "Mature Teratoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1332886"], + "NCI": ["C7013"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "BGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GMN": { + "code": "GMN", + "color": "Gray", + "name": "Germinoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0206660"], + "NCI": ["C3753"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "BGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BMGCT": { + "code": "BMGCT", + "color": "Gray", + "name": "Mixed Germ Cell Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0334524"], + "NCI": ["C4290"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "BGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PINT": { + "code": "PINT", + "color": "Gray", + "name": "Pineal Tumor", + "mainType": "Pineal Tumor", + "externalReferences": { + "UMLS": ["C1412004"], + "NCI": ["C3328"] + }, + "tissue": "CNS/Brain", + "children": { + "PTPR": { + "code": "PTPR", + "color": "Gray", + "name": "Papillary Tumor of the Pineal Region", + "mainType": "Pineal Tumor", + "externalReferences": { + "UMLS": ["C2985219"], + "NCI": ["C92624"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "PINT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PPTID": { + "code": "PPTID", + "color": "Gray", + "name": "Pineal Parenchymal Tumor of Intermediate Differentiation", + "mainType": "Pineal Tumor", + "externalReferences": { + "UMLS": ["C1367859"], + "NCI": ["C6967"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "PINT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PINC": { + "code": "PINC", + "color": "Gray", + "name": "Pineocytoma", + "mainType": "Pineal Tumor", + "externalReferences": { + "UMLS": ["C0917890"], + "NCI": ["C6966"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "PINT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PBL": { + "code": "PBL", + "color": "Gray", + "name": "Pineoblastoma", + "mainType": "Pineal Tumor", + "externalReferences": { + "UMLS": ["C0205898"], + "NCI": ["C9344"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "PINT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MNGT": { + "code": "MNGT", + "color": "Gray", + "name": "Meningothelial Tumor", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0025284"], + "NCI": ["C3229"] + }, + "tissue": "CNS/Brain", + "children": { + "ANM": { + "code": "ANM", + "color": "Gray", + "name": "Anaplastic Meningioma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0259785"], + "NCI": ["C4051"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SFTCNS": { + "code": "SFTCNS", + "color": "Gray", + "name": "Solitary Fibrous Tumor of the Central Nervous System", + "mainType": "CNS Cancer", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "RHM": { + "code": "RHM", + "color": "Gray", + "name": "Rhabdoid Meningioma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0259786"], + "NCI": ["C6909"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MNG": { + "code": "MNG", + "color": "Gray", + "name": "Meningioma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0025286"], + "NCI": ["C3230"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ATM": { + "code": "ATM", + "color": "Gray", + "name": "Atypical Meningioma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0431122"], + "NCI": ["C4723"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CCM": { + "code": "CCM", + "color": "Gray", + "name": "Clear cell Meningioma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0431121"], + "NCI": ["C4722"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CHOM": { + "code": "CHOM", + "color": "Gray", + "name": "Chordoid Meningioma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C1370510"], + "NCI": ["C6908"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PPM": { + "code": "PPM", + "color": "Gray", + "name": "Papillary Meningioma", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C3163622"], + "NCI": ["C3904"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HPCCNS": { + "code": "HPCCNS", + "color": "Gray", + "name": "Hemangiopericytoma of the Central Nervous System", + "mainType": "CNS Cancer", + "externalReferences": { + "UMLS": ["C0349622"], + "NCI": ["C4660"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MNGT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "EMBT": { + "code": "EMBT", + "color": "Gray", + "name": "Embryonal Tumor", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C0027654"], + "NCI": ["C3264"] + }, + "tissue": "CNS/Brain", + "children": { + "MMB": { + "code": "MMB", + "color": "Gray", + "name": "Medullomyoblastoma", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C0205833"], + "NCI": ["C3706"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "DMBL": { + "code": "DMBL", + "color": "Gray", + "name": "Desmoplastic/Nodular Medulloblastoma", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C0751291"], + "NCI": ["C4956"] + }, + "tissue": "CNS/Brain", + "children": { + "DMBLNOS": { + "code": "DMBLNOS", + "color": "Gray", + "name": "Desmoplastic/Nodular Medulloblastoma, NOS", + "mainType": "Desmoplastic/Nodular Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DMBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "DMBLSHH": { + "code": "DMBLSHH", + "color": "Gray", + "name": "Desmoplastic/Nodular Medulloblastoma, SHH Subtype", + "mainType": "Desmoplastic/Nodular Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "DMBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MDEP": { + "code": "MDEP", + "color": "Gray", + "name": "Medulloepithelioma", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C0334596"], + "NCI": ["C4327"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MBL": { + "code": "MBL", + "color": "Gray", + "name": "Medulloblastoma", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C0025149"], + "NCI": ["C3222"] + }, + "tissue": "CNS/Brain", + "children": { + "MBLNOS": { + "code": "MBLNOS", + "color": "Gray", + "name": "Medulloblastoma, NOS", + "mainType": "Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MBLNWS": { + "code": "MBLNWS", + "color": "Gray", + "name": "Medulloblastoma, Non-WNT, Non-SHH", + "mainType": "Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": { + "MBLG4": { + "code": "MBLG4", + "color": "Gray", + "name": "Medulloblastoma, Group 4", + "mainType": "Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBLNWS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MBLG3": { + "code": "MBLG3", + "color": "Gray", + "name": "Medulloblastoma, Group 3", + "mainType": "Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBLNWS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MBLWNT": { + "code": "MBLWNT", + "color": "Gray", + "name": "Medulloblastoma, WNT Subtype", + "mainType": "Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MBLSHH": { + "code": "MBLSHH", + "color": "Gray", + "name": "Medulloblastoma, SHH Subtype", + "mainType": "Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ETANTR": { + "code": "ETANTR", + "color": "Gray", + "name": "Embryonal Tumor with Abundant Neuropil and True Rosettes", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C0700367"], + "NCI": ["C4915"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PNET": { + "code": "PNET", + "color": "Gray", + "name": "Primitive Neuroectodermal Tumor", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C0206663"], + "NCI": ["C3716"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "AMBL": { + "code": "AMBL", + "color": "Gray", + "name": "Large Cell/Anaplastic Medulloblastoma", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C1266180"], + "NCI": ["C6904"] + }, + "tissue": "CNS/Brain", + "children": { + "AMBLSHH": { + "code": "AMBLSHH", + "color": "Gray", + "name": "Anaplastic Medulloblastoma, SHH Subtype", + "mainType": "Large Cell/Anaplastic Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "AMBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "AMBLNOS": { + "code": "AMBLNOS", + "color": "Gray", + "name": "Anaplastic Medulloblastoma, NOS", + "mainType": "Large Cell/Anaplastic Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "AMBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "AMBLNWS": { + "code": "AMBLNWS", + "color": "Gray", + "name": "Anaplastic Medulloblastoma, Non-WNT, Non-SHH", + "mainType": "Large Cell/Anaplastic Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": { + "AMBLNWSG3": { + "code": "AMBLNWSG3", + "color": "Gray", + "name": "Anaplastic Medulloblastoma, Group 3", + "mainType": "Large Cell/Anaplastic Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "AMBLNWS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMBLNWSG4": { + "code": "AMBLNWSG4", + "color": "Gray", + "name": "Anaplastic Medulloblastoma, Group 4", + "mainType": "Large Cell/Anaplastic Medulloblastoma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "AMBLNWS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "AMBL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MBEN": { + "code": "MBEN", + "color": "Gray", + "name": "Medulloblastoma with Extensive Nodularity", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C1334970"], + "NCI": ["C5407"] + }, + "tissue": "CNS/Brain", + "children": { + "MBENNOS": { + "code": "MBENNOS", + "color": "Gray", + "name": "Medulloblastoma with Extensive Nodularity, NOS", + "mainType": "Medulloblastoma with Extensive Nodularity", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBEN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MBENSHH": { + "code": "MBENSHH", + "color": "Gray", + "name": "Medulloblastoma with Extensive Nodularity, SHH Subtype", + "mainType": "Medulloblastoma with Extensive Nodularity", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBEN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ATRT": { + "code": "ATRT", + "color": "Gray", + "name": "Atypical Teratoid/Rhabdoid Tumor", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C1266184"], + "NCI": ["C6906"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ONBL": { + "code": "ONBL", + "color": "Gray", + "name": "Olfactory Neuroblastoma", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C0206717"], + "NCI": ["C3789"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MMBL": { + "code": "MMBL", + "color": "Gray", + "name": "Melanotic Medulloblastoma", + "mainType": "Embryonal Tumor", + "externalReferences": { + "UMLS": ["C1275668"], + "NCI": ["C9497"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "EMBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SELT": { + "code": "SELT", + "color": "Gray", + "name": "Sellar Tumor", + "mainType": "Sellar Tumor", + "externalReferences": { + "UMLS": ["C0748616"], + "NCI": ["C4944"] + }, + "tissue": "CNS/Brain", + "children": { + "APTAD": { + "code": "APTAD", + "color": "Gray", + "name": "Atypical Pituitary Adenoma", + "mainType": "Sellar Tumor", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "SELT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PTAD": { + "code": "PTAD", + "color": "Gray", + "name": "Pituitary Adenoma", + "mainType": "Sellar Tumor", + "externalReferences": { + "UMLS": ["C0032000"], + "NCI": ["C3329"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "SELT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCOAH": { + "code": "SCOAH", + "color": "Gray", + "name": "Spindle Cell Oncocytoma of the Adenohypophysis", + "mainType": "Sellar Tumor", + "externalReferences": { + "UMLS": ["C2986561"], + "NCI": ["C94537"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "SELT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PTCA": { + "code": "PTCA", + "color": "Gray", + "name": "Pituitary Carcinoma", + "mainType": "Sellar Tumor", + "externalReferences": { + "UMLS": ["C0346300"], + "NCI": ["C4536"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "SELT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ACPG": { + "code": "ACPG", + "color": "Gray", + "name": "Craniopharyngioma, Adamantinomatous Type", + "mainType": "Sellar Tumor", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "SELT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PCGP": { + "code": "PCGP", + "color": "Gray", + "name": "Craniopharyngioma, Papillary Type", + "mainType": "Sellar Tumor", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "SELT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GCT": { + "code": "GCT", + "color": "Gray", + "name": "Granular Cell Tumor", + "mainType": "Sellar Tumor", + "externalReferences": { + "UMLS": ["C0085167"], + "NCI": ["C3474"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "SELT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PTCY": { + "code": "PTCY", + "color": "Gray", + "name": "Pituicytoma", + "mainType": "Sellar Tumor", + "externalReferences": { + "UMLS": ["C2986550"], + "NCI": ["C94524"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "SELT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ENCG": { + "code": "ENCG", + "color": "Gray", + "name": "Encapsulated Glioma", + "mainType": "Glioma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": { + "AGNG": { + "code": "AGNG", + "color": "Gray", + "name": "Anaplastic Ganglioglioma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0431112"], + "NCI": ["C4717"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GNG": { + "code": "GNG", + "color": "Gray", + "name": "Ganglioglioma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0206716"], + "NCI": ["C3788"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PMA": { + "code": "PMA", + "color": "Gray", + "name": "Pilomyxoid Astrocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C1519086"], + "NCI": ["C40315"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "APXA": { + "code": "APXA", + "color": "Gray", + "name": "Anaplastic Pleomorphic Xanthoastrocytoma", + "mainType": "Glioma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PAST": { + "code": "PAST", + "color": "Gray", + "name": "Pilocytic Astrocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0334583"], + "NCI": ["C4047"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PXA": { + "code": "PXA", + "color": "Gray", + "name": "Pleomorphic Xanthoastrocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C0334586"], + "NCI": ["C4323"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "DNT": { + "code": "DNT", + "color": "Gray", + "name": "Dysembryoplastic Neuroepithelial Tumor", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["C1266177"], + "NCI": ["C9505"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LGGNOS": { + "code": "LGGNOS", + "color": "Gray", + "name": "Low-Grade Glioma, NOS", + "mainType": "Glioma", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GNC": { + "code": "GNC", + "color": "Gray", + "name": "Gangliocytoma", + "mainType": "Glioma", + "externalReferences": { + "UMLS": ["CL378224"], + "NCI": ["C6934"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "ENCG", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MBT": { + "code": "MBT", + "color": "Gray", + "name": "Miscellaneous Brain Tumor", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": { + "UMLS": ["C1334936"], + "NCI": ["C6974"] + }, + "tissue": "CNS/Brain", + "children": { + "LGNET": { + "code": "LGNET", + "color": "Gray", + "name": "Low-Grade Neuroepithelial Tumor", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PBT": { + "code": "PBT", + "color": "Gray", + "name": "Primary Brain Tumor", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": { + "UMLS": ["C0750974"], + "NCI": ["C4952"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PRNET": { + "code": "PRNET", + "color": "Gray", + "name": "Primary Neuroepithelial Tumor", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": { + "UMLS": ["C0206715"], + "NCI": ["C3787"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HGNET": { + "code": "HGNET", + "color": "Gray", + "name": "High-Grade Neuroepithelial Tumor", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": {}, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MCHSCNS": { + "code": "MCHSCNS", + "color": "Gray", + "name": "Mesenchymal Chondrosarcoma of the CNS", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": { + "UMLS": ["C0206637"], + "NCI": ["C3737"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MLYM": { + "code": "MLYM", + "color": "Gray", + "name": "Malignant Lymphoma", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": { + "UMLS": ["C0024299"], + "NCI": ["C3208"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MT": { + "code": "MT", + "color": "Gray", + "name": "Malignant Tumor", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": { + "UMLS": ["C0006826"], + "NCI": ["C9305"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HMBL": { + "code": "HMBL", + "color": "Gray", + "name": "Hemangioblastoma", + "mainType": "Miscellaneous Brain Tumor", + "externalReferences": { + "UMLS": ["C0206734"], + "NCI": ["C3801"] + }, + "tissue": "CNS/Brain", + "children": {}, + "parent": "MBT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "BRAIN", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "ADRENAL_GLAND": { + "code": "ADRENAL_GLAND", + "color": "Purple", + "name": "Adrenal Gland", + "mainType": "Adrenal Gland Cancer", + "externalReferences": { + "UMLS": ["C0001625"], + "NCI": ["C12666"] + }, + "tissue": "Adrenal Gland", + "children": { + "ACC": { + "code": "ACC", + "color": "Purple", + "name": "Adrenocortical Carcinoma", + "mainType": "Adrenocortical Carcinoma", + "externalReferences": { + "UMLS": ["C0206686"], + "NCI": ["C9325"] + }, + "tissue": "Adrenal Gland", + "children": {}, + "parent": "ADRENAL_GLAND", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PHC": { + "code": "PHC", + "color": "Purple", + "name": "Pheochromocytoma", + "mainType": "Pheochromocytoma", + "externalReferences": { + "UMLS": ["C0031511"], + "NCI": ["C3326"] + }, + "tissue": "Adrenal Gland", + "children": {}, + "parent": "ADRENAL_GLAND", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ACA": { + "code": "ACA", + "color": "Purple", + "name": "Adrenocortical Adenoma", + "mainType": "Adrenocortical Adenoma", + "externalReferences": { + "UMLS": ["C0206667"], + "NCI": ["C9003"] + }, + "tissue": "Adrenal Gland", + "children": {}, + "parent": "ADRENAL_GLAND", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "PROSTATE": { + "code": "PROSTATE", + "color": "Cyan", + "name": "Prostate", + "mainType": "Prostate Cancer", + "externalReferences": { + "UMLS": ["C0033572"], + "NCI": ["C12410"] + }, + "tissue": "Prostate", + "children": { + "PRAD": { + "code": "PRAD", + "color": "Cyan", + "name": "Prostate Adenocarcinoma", + "mainType": "Prostate Cancer", + "externalReferences": { + "UMLS": ["C0007112"], + "NCI": ["C2919"] + }, + "tissue": "Prostate", + "children": {}, + "parent": "PROSTATE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "BCCP": { + "code": "BCCP", + "color": "Cyan", + "name": "Basal Cell Carcinoma of Prostate", + "mainType": "Prostate Cancer", + "externalReferences": {}, + "tissue": "Prostate", + "children": {}, + "parent": "PROSTATE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PRSCC": { + "code": "PRSCC", + "color": "Cyan", + "name": "Prostate Small Cell Carcinoma", + "mainType": "Prostate Cancer", + "externalReferences": { + "UMLS": ["C1300585"], + "NCI": ["C6766"] + }, + "tissue": "Prostate", + "children": {}, + "parent": "PROSTATE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PRNE": { + "code": "PRNE", + "color": "Cyan", + "name": "Prostate Neuroendocrine Carcinoma", + "mainType": "Prostate Cancer", + "externalReferences": { + "UMLS": ["C1335515"], + "NCI": ["C5545"] + }, + "tissue": "Prostate", + "children": {}, + "parent": "PROSTATE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PRSC": { + "code": "PRSC", + "color": "Cyan", + "name": "Prostate Squamous Cell Carcinoma", + "mainType": "Prostate Cancer", + "externalReferences": { + "UMLS": ["C1302530"], + "NCI": ["C5536"] + }, + "tissue": "Prostate", + "children": {}, + "parent": "PROSTATE", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "LUNG": { + "code": "LUNG", + "color": "Gainsboro", + "name": "Lung", + "mainType": "Lung Cancer", + "externalReferences": { + "UMLS": ["C0024109"], + "NCI": ["C12468"] + }, + "tissue": "Lung", + "children": { + "LNET": { + "code": "LNET", + "color": "Gainsboro", + "name": "Lung Neuroendocrine Tumor", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1334452"], + "NCI": ["C5670"] + }, + "tissue": "Lung", + "children": { + "SCLC": { + "code": "SCLC", + "color": "Gainsboro", + "name": "Small Cell Lung Cancer", + "mainType": "Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0149925"], + "NCI": ["C4917"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LUNE": { + "code": "LUNE", + "color": "Gainsboro", + "name": "Large Cell Neuroendocrine Carcinoma", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1265996"], + "NCI": ["C6875"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LUCA": { + "code": "LUCA", + "color": "Gainsboro", + "name": "Lung Carcinoid", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0280089"], + "NCI": ["C4038"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ALUCA": { + "code": "ALUCA", + "color": "Gainsboro", + "name": "Atypical Lung Carcinoid", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1708766"], + "NCI": ["C45551"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LNET", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "LUNG", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PPB": { + "code": "PPB", + "color": "Gainsboro", + "name": "Pleuropulmonary Blastoma", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1266144"], + "NCI": ["C5669"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LUNG", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "NSCLC": { + "code": "NSCLC", + "color": "Gainsboro", + "name": "Non-Small Cell Lung Cancer", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0007131"], + "NCI": ["C2926"] + }, + "tissue": "Lung", + "children": { + "CMPT": { + "code": "CMPT", + "color": "Gainsboro", + "name": "Ciliated Muconodular Papillary Tumor of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": {}, + "tissue": "Lung", + "children": {}, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "NUTCL": { + "code": "NUTCL", + "color": "Gainsboro", + "name": "NUT Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": {}, + "tissue": "Lung", + "children": {}, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "NSCLCPD": { + "code": "NSCLCPD", + "color": "Gainsboro", + "name": "Poorly Differentiated Non-Small Cell Lung Cancer", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": {}, + "tissue": "Lung", + "children": {}, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LUAS": { + "code": "LUAS", + "color": "Gainsboro", + "name": "Lung Adenosquamous Carcinoma", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0279557"], + "NCI": ["C9133"] + }, + "tissue": "Lung", + "children": {}, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LUSC": { + "code": "LUSC", + "color": "Gainsboro", + "name": "Lung Squamous Cell Carcinoma", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0149782"], + "NCI": ["C3493"] + }, + "tissue": "Lung", + "children": {}, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SGTTL": { + "code": "SGTTL", + "color": "Gainsboro", + "name": "Salivary Gland-Type Tumor of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": {}, + "tissue": "Lung", + "children": { + "LUMEC": { + "code": "LUMEC", + "color": "Gainsboro", + "name": "Mucoepidermoid Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1708778"], + "NCI": ["C45544"] + }, + "tissue": "Lung", + "children": {}, + "parent": "SGTTL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "LUACC": { + "code": "LUACC", + "color": "Gainsboro", + "name": "Adenoid Cystic Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1334439"], + "NCI": ["C5666"] + }, + "tissue": "Lung", + "children": {}, + "parent": "SGTTL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SPCC": { + "code": "SPCC", + "color": "Gainsboro", + "name": "Spindle Cell Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1708784"], + "NCI": ["C45541"] + }, + "tissue": "Lung", + "children": {}, + "parent": "NSCLC", + "history": ["SpCC"], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LCLC": { + "code": "LCLC", + "color": "Gainsboro", + "name": "Large Cell Lung Carcinoma", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0345958"], + "NCI": ["C4450"] + }, + "tissue": "Lung", + "children": { + "CCLC": { + "code": "CCLC", + "color": "Gainsboro", + "name": "Clear Cell Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1707407"], + "NCI": ["C4451"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LCLC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "GCLC": { + "code": "GCLC", + "color": "Gainsboro", + "name": "Giant Cell Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0345960"], + "NCI": ["C4452"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LCLC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "BLCLC": { + "code": "BLCLC", + "color": "Gainsboro", + "name": "Basaloid Large Cell Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1332463"], + "NCI": ["C7266"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LCLC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "LECLC": { + "code": "LECLC", + "color": "Gainsboro", + "name": "Lymphoepithelioma-like Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1708792"], + "NCI": ["C45519"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LCLC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "RLCLC": { + "code": "RLCLC", + "color": "Gainsboro", + "name": "Large Cell Lung Carcinoma With Rhabdoid Phenotype", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1265997"], + "NCI": ["C6876"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LCLC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LUAD": { + "code": "LUAD", + "color": "Gainsboro", + "name": "Lung Adenocarcinoma", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0152013"], + "NCI": ["C3512"] + }, + "tissue": "Lung", + "children": {}, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "LUPC": { + "code": "LUPC", + "color": "Gainsboro", + "name": "Pleomorphic Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1711397"], + "NCI": ["C45542"] + }, + "tissue": "Lung", + "children": {}, + "parent": "NSCLC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "LUNG", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LAM": { + "code": "LAM", + "color": "Gainsboro", + "name": "Pulmonary Lymphangiomyomatosis", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0349649"], + "NCI": ["C38153"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LUNG", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LAIS": { + "code": "LAIS", + "color": "Gainsboro", + "name": "Lung Adenocarcinoma In Situ", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": {}, + "tissue": "Lung", + "children": {}, + "parent": "LUNG", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CSCLC": { + "code": "CSCLC", + "color": "Gainsboro", + "name": "Combined Small Cell Lung Carcinoma", + "mainType": "Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C0334240"], + "NCI": ["C9137"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LUNG", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SARCL": { + "code": "SARCL", + "color": "Gainsboro", + "name": "Sarcomatoid Carcinoma of the Lung", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1708781"], + "NCI": ["C45540"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LUNG", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "IMTL": { + "code": "IMTL", + "color": "Gainsboro", + "name": "Inflammatory Myofibroblastic Lung Tumor", + "mainType": "Non-Small Cell Lung Cancer", + "externalReferences": { + "UMLS": ["C1518038"], + "NCI": ["C39740"] + }, + "tissue": "Lung", + "children": {}, + "parent": "LUNG", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "PENIS": { + "code": "PENIS", + "color": "Blue", + "name": "Penis", + "mainType": "Penile Cancer", + "externalReferences": { + "UMLS": ["C0030851"], + "NCI": ["C12409"] + }, + "tissue": "Penis", + "children": { + "PSCC": { + "code": "PSCC", + "color": "Blue", + "name": "Penile Squamous Cell Carcinoma", + "mainType": "Penile Cancer", + "externalReferences": { + "UMLS": ["C0238348"], + "NCI": ["C7729"] + }, + "tissue": "Penis", + "children": { + "VPSCC": { + "code": "VPSCC", + "color": "Blue", + "name": "Verrucous Penile Squamous Cell Carcinoma", + "mainType": "Penile Cancer", + "externalReferences": { + "UMLS": ["C1336955"], + "NCI": ["C6982"] + }, + "tissue": "Penis", + "children": {}, + "parent": "PSCC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "WPSCC": { + "code": "WPSCC", + "color": "Blue", + "name": "Warty Penile Squamous Cell Carcinoma", + "mainType": "Penile Cancer", + "externalReferences": { + "UMLS": ["C1337009"], + "NCI": ["C6981"] + }, + "tissue": "Penis", + "children": {}, + "parent": "PSCC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BPSCC": { + "code": "BPSCC", + "color": "Blue", + "name": "Basaloid Penile Squamous Cell Carcinoma", + "mainType": "Penile Cancer", + "externalReferences": { + "UMLS": ["C1332462"], + "NCI": ["C6980"] + }, + "tissue": "Penis", + "children": {}, + "parent": "PSCC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "PENIS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "UTERUS": { + "code": "UTERUS", + "color": "PeachPuff", + "name": "Uterus", + "mainType": "Uterine Cancer", + "externalReferences": { + "UMLS": ["C0042149"], + "NCI": ["C12405"] + }, + "tissue": "Uterus", + "children": { + "USARC": { + "code": "USARC", + "color": "PeachPuff", + "name": "Uterine Sarcoma/Mesenchymal", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C0338113"], + "NCI": ["C6339"] + }, + "tissue": "Uterus", + "children": { + "UUS": { + "code": "UUS", + "color": "PeachPuff", + "name": "Undifferentiated Uterine Sarcoma", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["CL033042"], + "NCI": ["C8972"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "USARC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "USMT": { + "code": "USMT", + "color": "PeachPuff", + "name": "Uterine Smooth Muscle Tumor", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C1519863"], + "NCI": ["C40176"] + }, + "tissue": "Uterus", + "children": { + "ULMS": { + "code": "ULMS", + "color": "PeachPuff", + "name": "Uterine Leiomyosarcoma", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C0280631"], + "NCI": ["C6340"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "USMT", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "UMLMS": { + "code": "UMLMS", + "color": "PeachPuff", + "name": "Uterine Myxoid Leiomyosarcoma", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C1519861"], + "NCI": ["C40175"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "USMT", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "UELMS": { + "code": "UELMS", + "color": "PeachPuff", + "name": "Uterine Epithelioid Leiomyosarcoma", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C1519851"], + "NCI": ["C40174"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "USMT", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "ULM": { + "code": "ULM", + "color": "PeachPuff", + "name": "Uterine Leiomyoma", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C0042133"], + "NCI": ["C3434"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "USMT", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "USTUMP": { + "code": "USTUMP", + "color": "PeachPuff", + "name": "Uterine Smooth Muscle Tumor of Uncertain Malignant Potential", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C1519864"], + "NCI": ["C40177"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "USMT", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "USARC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UPECOMA": { + "code": "UPECOMA", + "color": "PeachPuff", + "name": "Uterine Perivascular Epithelioid Cell Tumor", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C1519862"], + "NCI": ["C40180"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "USARC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ESS": { + "code": "ESS", + "color": "PeachPuff", + "name": "Endometrial Stromal Sarcoma", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C0206630"], + "NCI": ["C8973"] + }, + "tissue": "Uterus", + "children": { + "HGESS": { + "code": "HGESS", + "color": "PeachPuff", + "name": "High-Grade Endometrial Stromal Sarcoma", + "mainType": "Uterine Sarcoma", + "externalReferences": {}, + "tissue": "Uterus", + "children": {}, + "parent": "ESS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "LGESS": { + "code": "LGESS", + "color": "PeachPuff", + "name": "Low-Grade Endometrial Stromal Sarcoma", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C0334486"], + "NCI": ["C4263"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "ESS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "USARC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "OUSARC": { + "code": "OUSARC", + "color": "PeachPuff", + "name": "Uterine Sarcoma, Other", + "mainType": "Uterine Sarcoma", + "externalReferences": {}, + "tissue": "Uterus", + "children": {}, + "parent": "USARC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UAS": { + "code": "UAS", + "color": "PeachPuff", + "name": "Uterine Adenosarcoma", + "mainType": "Uterine Sarcoma", + "externalReferences": { + "UMLS": ["C1336917"], + "NCI": ["C6336"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "USARC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "UTERUS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "OUTT": { + "code": "OUTT", + "color": "PeachPuff", + "name": "Other Uterine Tumor", + "mainType": "Endometrial Cancer", + "externalReferences": {}, + "tissue": "Uterus", + "children": {}, + "parent": "UTERUS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "UCEC": { + "code": "UCEC", + "color": "PeachPuff", + "name": "Endometrial Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": { + "UMLS": ["C0476089"], + "NCI": ["C7558"] + }, + "tissue": "Uterus", + "children": { + "UNEC": { + "code": "UNEC", + "color": "PeachPuff", + "name": "Uterine Neuroendocrine Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": {}, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UMEC": { + "code": "UMEC", + "color": "PeachPuff", + "name": "Uterine Mixed Endometrial Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": {}, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UUC": { + "code": "UUC", + "color": "PeachPuff", + "name": "Uterine Undifferentiated Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": { + "UMLS": ["C0850327"], + "NCI": ["C6345"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UEC": { + "code": "UEC", + "color": "PeachPuff", + "name": "Uterine Endometrioid Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": { + "UMLS": ["C1336905"], + "NCI": ["C6287"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "USC": { + "code": "USC", + "color": "PeachPuff", + "name": "Uterine Serous Carcinoma/Uterine Papillary Serous Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": { + "UMLS": ["C0854924"], + "NCI": ["C27838"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UCS": { + "code": "UCS", + "color": "PeachPuff", + "name": "Uterine Carcinosarcoma/Uterine Malignant Mixed Mullerian Tumor", + "mainType": "Endometrial Cancer", + "externalReferences": { + "UMLS": ["C0280630"], + "NCI": ["C42700"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UDDC": { + "code": "UDDC", + "color": "PeachPuff", + "name": "Uterine Dedifferentiated Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": {}, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UCCC": { + "code": "UCCC", + "color": "PeachPuff", + "name": "Uterine Clear Cell Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": { + "UMLS": ["C1332912"], + "NCI": ["C6344"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UMC": { + "code": "UMC", + "color": "PeachPuff", + "name": "Uterine Mucinous Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": { + "UMLS": ["C0854923"], + "NCI": ["C40144"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UMNC": { + "code": "UMNC", + "color": "PeachPuff", + "name": "Uterine Mesonephric Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": {}, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UASC": { + "code": "UASC", + "color": "PeachPuff", + "name": "Uterine Adenosquamous Carcinoma", + "mainType": "Endometrial Cancer", + "externalReferences": { + "UMLS": ["C0346202"], + "NCI": ["C4519"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UPDC": { + "code": "UPDC", + "color": "PeachPuff", + "name": "Poorly Differentiated Carcinoma of the Uterus", + "mainType": "Endometrial Cancer", + "externalReferences": {}, + "tissue": "Uterus", + "children": {}, + "parent": "UCEC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "UTERUS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "GTD": { + "code": "GTD", + "color": "PeachPuff", + "name": "Gestational Trophoblastic Disease", + "mainType": "Gestational Trophoblastic Disease", + "externalReferences": { + "UMLS": ["C1135868"], + "NCI": ["C4699"] + }, + "tissue": "Uterus", + "children": { + "MP": { + "code": "MP", + "color": "PeachPuff", + "name": "Molar Pregnancy", + "mainType": "Gestational Trophoblastic Disease", + "externalReferences": { + "UMLS": ["C0020217"], + "NCI": ["C3110"] + }, + "tissue": "Uterus", + "children": { + "PHM": { + "code": "PHM", + "color": "PeachPuff", + "name": "Partial Hydatidiform Mole", + "mainType": "Gestational Trophoblastic Disease", + "externalReferences": { + "UMLS": ["C0334529"], + "NCI": ["C4293"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "MP", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "CHM": { + "code": "CHM", + "color": "PeachPuff", + "name": "Complete Hydatidiform Mole", + "mainType": "Gestational Trophoblastic Disease", + "externalReferences": { + "UMLS": ["C0678213"], + "NCI": ["C4871"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "MP", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "IHM": { + "code": "IHM", + "color": "PeachPuff", + "name": "Invasive Hydatidiform Mole", + "mainType": "Gestational Trophoblastic Disease", + "externalReferences": { + "UMLS": ["C0008493"], + "NCI": ["C6985"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "MP", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "GTD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UCCA": { + "code": "UCCA", + "color": "PeachPuff", + "name": "Choriocarcinoma", + "mainType": "Gestational Trophoblastic Disease", + "externalReferences": { + "UMLS": ["C0279677"], + "NCI": ["C27246"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "GTD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ETT": { + "code": "ETT", + "color": "PeachPuff", + "name": "Epithelioid Trophoblastic Tumor", + "mainType": "Gestational Trophoblastic Disease", + "externalReferences": { + "UMLS": ["C1266159"], + "NCI": ["C6900"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "GTD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PSTT": { + "code": "PSTT", + "color": "PeachPuff", + "name": "Placental Site Trophoblastic Tumor", + "mainType": "Gestational Trophoblastic Disease", + "externalReferences": { + "UMLS": ["C0206666"], + "NCI": ["C3757"] + }, + "tissue": "Uterus", + "children": {}, + "parent": "GTD", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "UTERUS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "OTHER": { + "code": "OTHER", + "color": "Black", + "name": "Other", + "mainType": "Other Cancer", + "externalReferences": { + "UMLS": ["C0205394"], + "NCI": ["C17649"] + }, + "tissue": "Other", + "children": { + "EGCT": { + "code": "EGCT", + "color": "Black", + "name": "Extra Gonadal Germ Cell Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "OTHER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "AIS": { + "code": "AIS", + "color": "Black", + "name": "Adenocarcinoma In Situ", + "mainType": "Adenocarcinoma In Situ", + "externalReferences": { + "UMLS": ["C0334276"], + "NCI": ["C4123"] + }, + "tissue": "Other", + "children": {}, + "parent": "OTHER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MIXED": { + "code": "MIXED", + "color": "Black", + "name": "Mixed Cancer Types", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "OTHER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CUP": { + "code": "CUP", + "color": "Black", + "name": "Cancer of Unknown Primary", + "mainType": "Cancer of Unknown Primary", + "externalReferences": { + "UMLS": ["C0220647"], + "NCI": ["C3812"] + }, + "tissue": "Other", + "children": { + "NECNOS": { + "code": "NECNOS", + "color": "Black", + "name": "Neuroendocrine Carcinoma, NOS", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "UDMN": { + "code": "UDMN", + "color": "Black", + "name": "Undifferentiated Malignant Neoplasm", + "mainType": "Cancer of Unknown Primary", + "externalReferences": { + "UMLS": ["C1336860"], + "NCI": ["C36051"] + }, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "NETNOS": { + "code": "NETNOS", + "color": "Black", + "name": "Neuroendocrine Tumor, NOS", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ADNOS": { + "code": "ADNOS", + "color": "Black", + "name": "Adenocarcinoma, NOS", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ACN": { + "code": "ACN", + "color": "Black", + "name": "Acinar Cell Carcinoma, NOS", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CUPNOS": { + "code": "CUPNOS", + "color": "Black", + "name": "Cancer of Unknown Primary, NOS", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCUP": { + "code": "SCUP", + "color": "Black", + "name": "Small Cell Carcinoma of Unknown Primary", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "SCCNOS": { + "code": "SCCNOS", + "color": "Black", + "name": "Squamous Cell Carcinoma, NOS", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "PDC": { + "code": "PDC", + "color": "Black", + "name": "Poorly Differentiated Carcinoma, NOS", + "mainType": "Cancer of Unknown Primary", + "externalReferences": {}, + "tissue": "Other", + "children": {}, + "parent": "CUP", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "OTHER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "TESTIS": { + "code": "TESTIS", + "color": "Red", + "name": "Testis", + "mainType": "Testicular Cancer", + "externalReferences": { + "UMLS": ["C0039597"], + "NCI": ["C12412"] + }, + "tissue": "Testis", + "children": { + "NSGCT": { + "code": "NSGCT", + "color": "Red", + "name": "Non-Seminomatous Germ Cell Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["CL480935"] + }, + "tissue": "Testis", + "children": { + "TT": { + "code": "TT", + "color": "Red", + "name": "Teratoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0238451"], + "NCI": ["C3877"] + }, + "tissue": "Testis", + "children": {}, + "parent": "NSGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "EMBCA": { + "code": "EMBCA", + "color": "Red", + "name": "Embryonal Carcinoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0238448"], + "NCI": ["C6341"] + }, + "tissue": "Testis", + "children": {}, + "parent": "NSGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "TYST": { + "code": "TYST", + "color": "Red", + "name": "Yolk Sac Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0279708"], + "NCI": ["C8000"] + }, + "tissue": "Testis", + "children": {}, + "parent": "NSGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "TCCA": { + "code": "TCCA", + "color": "Red", + "name": "Choriocarcinoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0238449"], + "NCI": ["C7733"] + }, + "tissue": "Testis", + "children": {}, + "parent": "NSGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GCTSTM": { + "code": "GCTSTM", + "color": "Red", + "name": "Germ Cell Tumor with Somatic-Type Malignancy", + "mainType": "Germ Cell Tumor", + "externalReferences": {}, + "tissue": "Testis", + "children": {}, + "parent": "NSGCT", + "history": ["TMT"], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MGCT": { + "code": "MGCT", + "color": "Red", + "name": "Mixed Germ Cell Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1336720"], + "NCI": ["C6347"] + }, + "tissue": "Testis", + "children": {}, + "parent": "NSGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "TESTIS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SEM": { + "code": "SEM", + "color": "Red", + "name": "Seminoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0036631"], + "NCI": ["C9309"] + }, + "tissue": "Testis", + "children": {}, + "parent": "TESTIS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "TSCST": { + "code": "TSCST", + "color": "Red", + "name": "Sex Cord Stromal Tumor", + "mainType": "Sex Cord Stromal Tumor", + "externalReferences": { + "UMLS": ["C1336728"] + }, + "tissue": "Testis", + "children": {}, + "parent": "TESTIS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "TMESO": { + "code": "TMESO", + "color": "Red", + "name": "Testicular Mesothelioma", + "mainType": "Mesothelioma", + "externalReferences": {}, + "tissue": "Testis", + "children": {}, + "parent": "TESTIS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "TLYM": { + "code": "TLYM", + "color": "Red", + "name": "Testicular Lymphoma", + "mainType": "Non-Hodgkin Lymphoma", + "externalReferences": { + "UMLS": ["C0349644"], + "NCI": ["C6810"] + }, + "tissue": "Testis", + "children": {}, + "parent": "TESTIS", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "LIVER": { + "code": "LIVER", + "color": "MediumSeaGreen", + "name": "Liver", + "mainType": "Liver Cancer", + "externalReferences": { + "UMLS": ["C0023884"], + "NCI": ["C12392"] + }, + "tissue": "Liver", + "children": { + "LIAD": { + "code": "LIAD", + "color": "MediumSeaGreen", + "name": "Hepatocellular Adenoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0206669"], + "NCI": ["C3758"] + }, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LIMNET": { + "code": "LIMNET", + "color": "MediumSeaGreen", + "name": "Malignant Nonepithelial Tumor of the Liver", + "mainType": "Hepatobiliary Cancer", + "externalReferences": {}, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LIHB": { + "code": "LIHB", + "color": "MediumSeaGreen", + "name": "Hepatoblastoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0206624"], + "NCI": ["C3728"] + }, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "HCC": { + "code": "HCC", + "color": "MediumSeaGreen", + "name": "Hepatocellular Carcinoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0019204"], + "NCI": ["C3099"] + }, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MRTL": { + "code": "MRTL", + "color": "MediumSeaGreen", + "name": "Malignant Rhabdoid Tumor of the Liver", + "mainType": "Malignant Rhabdoid Tumor of the Liver", + "externalReferences": {}, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "HCCIHCH": { + "code": "HCCIHCH", + "color": "MediumSeaGreen", + "name": "Hepatocellular Carcinoma plus Intrahepatic Cholangiocarcinoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0221287"], + "NCI": ["C3828"] + }, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "FLC": { + "code": "FLC", + "color": "MediumSeaGreen", + "name": "Fibrolamellar Carcinoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0334287"], + "NCI": ["C4131"] + }, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "LIAS": { + "code": "LIAS", + "color": "MediumSeaGreen", + "name": "Liver Angiosarcoma", + "mainType": "Hepatobiliary Cancer", + "externalReferences": { + "UMLS": ["C0345907"], + "NCI": ["C4438"] + }, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "UESL": { + "code": "UESL", + "color": "MediumSeaGreen", + "name": "Undifferentiated Embryonal Sarcoma of the Liver", + "mainType": "Undifferentiated Embryonal Sarcoma of the Liver", + "externalReferences": {}, + "tissue": "Liver", + "children": {}, + "parent": "LIVER", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "PERITONEUM": { + "code": "PERITONEUM", + "color": "Green", + "name": "Peritoneum", + "mainType": "Peritoneal Cancer", + "externalReferences": { + "UMLS": ["C0031153"], + "NCI": ["C12770"] + }, + "tissue": "Peritoneum", + "children": { + "PSEC": { + "code": "PSEC", + "color": "Green", + "name": "Peritoneal Serous Carcinoma", + "mainType": "Peritoneal Cancer, NOS", + "externalReferences": {}, + "tissue": "Peritoneum", + "children": {}, + "parent": "PERITONEUM", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "PEMESO": { + "code": "PEMESO", + "color": "Green", + "name": "Peritoneal Mesothelioma", + "mainType": "Mesothelioma", + "externalReferences": { + "UMLS": ["C1377610"], + "NCI": ["C7633"] + }, + "tissue": "Peritoneum", + "children": {}, + "parent": "PERITONEUM", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "MYELOID": { + "code": "MYELOID", + "color": "LightSalmon", + "name": "Myeloid", + "mainType": "Blood Cancer", + "externalReferences": { + "UMLS": ["C0005767"], + "NCI": ["C12434"] + }, + "tissue": "Myeloid", + "children": { + "MBGN": { + "code": "MBGN", + "color": "LightSalmon", + "name": "Myeloid Benign", + "mainType": "Blood Cancer, NOS", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MYELOID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MNM": { + "code": "MNM", + "color": "LightSalmon", + "name": "Myeloid Neoplasm", + "mainType": "Blood Cancer, NOS", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "AML": { + "code": "AML", + "color": "LightSalmon", + "name": "Acute Myeloid Leukemia", + "mainType": "Leukemia", + "externalReferences": { + "UMLS": ["C0023467"], + "NCI": ["C3171"] + }, + "tissue": "Myeloid", + "children": { + "AMLNOS": { + "code": "AMLNOS", + "color": "LightSalmon", + "name": "AML, NOS", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "AMKL": { + "code": "AMKL", + "color": "LightSalmon", + "name": "Acute Megakaryoblastic Leukemia", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMML": { + "code": "AMML", + "color": "LightSalmon", + "name": "Acute Myelomonocytic Leukemia", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "APMF": { + "code": "APMF", + "color": "LightSalmon", + "name": "Acute Panmyelosis with Myelofibrosis", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AWM": { + "code": "AWM", + "color": "LightSalmon", + "name": "AML without Maturation", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMOL": { + "code": "AMOL", + "color": "LightSalmon", + "name": "Acute Monoblastic/Monocytic Leukemia", + "mainType": "Leukemia", + "externalReferences": { + "UMLS": ["C0023465"], + "NCI": ["C4861"] + }, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PERL": { + "code": "PERL", + "color": "LightSalmon", + "name": "Pure Erythroid Leukemia", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "ABL": { + "code": "ABL", + "color": "LightSalmon", + "name": "Acute Basophilic Leukemia", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AM": { + "code": "AM", + "color": "LightSalmon", + "name": "AML with Maturation", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLMD": { + "code": "AMLMD", + "color": "LightSalmon", + "name": "AML with Minimal Differentiation", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLNOS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "AML", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "TMN": { + "code": "TMN", + "color": "LightSalmon", + "name": "Therapy-Related Myeloid Neoplasms", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "TAML": { + "code": "TAML", + "color": "LightSalmon", + "name": "Therapy-Related Acute Myeloid Leukemia", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "TMN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "TMDS": { + "code": "TMDS", + "color": "LightSalmon", + "name": "Therapy-Related Myelodysplastic Syndrome", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "TMN", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "AML", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MPRDS": { + "code": "MPRDS", + "color": "LightSalmon", + "name": "Myeloid Proliferations Related to Down Syndrome", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "TAM": { + "code": "TAM", + "color": "LightSalmon", + "name": "Transient Abnormal Myelopoiesis", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MPRDS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MLADS": { + "code": "MLADS", + "color": "LightSalmon", + "name": "Myeloid Leukemia Associated with Down Syndrome", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MPRDS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "AML", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "AMLMRC": { + "code": "AMLMRC", + "color": "LightSalmon", + "name": "AML with Myelodysplasia-Related Changes", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AML", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MS": { + "code": "MS", + "color": "LightSalmon", + "name": "Myeloid Sarcoma", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AML", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "AMLRGA": { + "code": "AMLRGA", + "color": "LightSalmon", + "name": "AML with Recurrent Genetic Abnormalities", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "AMLGATA2MECOM": { + "code": "AMLGATA2MECOM", + "color": "LightSalmon", + "name": "AML with inv(3)(q21.3q26.2) or t(3;3)(q21.3;q26.2); GATA2, MECOM", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLBCRABL1": { + "code": "AMLBCRABL1", + "color": "LightSalmon", + "name": "AML with BCR-ABL1", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLRARA": { + "code": "AMLRARA", + "color": "LightSalmon", + "name": "AML with Variant RARA translocation", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLCBFBMYH11": { + "code": "AMLCBFBMYH11", + "color": "LightSalmon", + "name": "AML with inv(16)(p13.1q22) or t(16;16)(p13.1;q22);CBFB-MYH11", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLRBM15MKL1": { + "code": "AMLRBM15MKL1", + "color": "LightSalmon", + "name": "AML (megakaryoblastic) with t(1;22)(p13.3;q13.3);RBM15-MKL1", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLRUNX1": { + "code": "AMLRUNX1", + "color": "LightSalmon", + "name": "AML with Mutated RUNX1", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLMLLT3KMT2A": { + "code": "AMLMLLT3KMT2A", + "color": "LightSalmon", + "name": "AML with t(9;11)(p21.3;q23.3);MLLT3-KMT2A", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLDEKNUP214": { + "code": "AMLDEKNUP214", + "color": "LightSalmon", + "name": "AML with t(6;9)(p23;q34.1);DEK-NUP214", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLNPM1": { + "code": "AMLNPM1", + "color": "LightSalmon", + "name": "AML with Mutated NPM1", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLRUNX1RUNX1T1": { + "code": "AMLRUNX1RUNX1T1", + "color": "LightSalmon", + "name": "AML with t(8;21)(q22;q22.1);RUNX1-RUNX1T1", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "AMLCEBPA": { + "code": "AMLCEBPA", + "color": "LightSalmon", + "name": "AML with Biallelic Mutations of CEBPA", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "APLPMLRARA": { + "code": "APLPMLRARA", + "color": "LightSalmon", + "name": "APL with PML-RARA", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "AMLRGA", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "AML", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HDCN": { + "code": "HDCN", + "color": "LightSalmon", + "name": "Histiocytic and Dendritic Cell Neoplasms", + "mainType": "Histiocytosis", + "externalReferences": { + "UMLS": ["C0019618"], + "NCI": ["C3106"] + }, + "tissue": "Myeloid", + "children": { + "LCH": { + "code": "LCH", + "color": "LightSalmon", + "name": "Langerhans Cell Histiocytosis", + "mainType": "Histiocytosis", + "externalReferences": { + "UMLS": ["C0019621"], + "NCI": ["C3107"] + }, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "RDD": { + "code": "RDD", + "color": "LightSalmon", + "name": "Rosai-Dorfman Disease", + "mainType": "Histiocytosis", + "externalReferences": { + "UMLS": ["C0019625"], + "NCI": ["C36075"] + }, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": ["RD"], + "level": 4, + "revocations": [], + "precursors": [] + }, + "ECD": { + "code": "ECD", + "color": "LightSalmon", + "name": "Erdheim-Chester Disease", + "mainType": "Histiocytosis", + "externalReferences": { + "UMLS": ["C0878675"], + "NCI": ["C53972"] + }, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "JXG": { + "code": "JXG", + "color": "LightSalmon", + "name": "Disseminated Juvenile Xanthogranuloma", + "mainType": "Histiocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "IDCS": { + "code": "IDCS", + "color": "LightYellow", + "name": "Interdigitating Dendritic Cell Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1260326"], + "NCI": ["C9282"] + }, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "HS": { + "code": "HS", + "color": "LightSalmon", + "name": "Histiocytic Sarcoma", + "mainType": "Histiocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "FRCT": { + "code": "FRCT", + "color": "LightSalmon", + "name": "Fibroblastic Reticular Cell Tumor", + "mainType": "Histiocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "LCS": { + "code": "LCS", + "color": "LightSalmon", + "name": "Langerhans Cell Sarcoma", + "mainType": "Histiocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "FDCS": { + "code": "FDCS", + "color": "LightYellow", + "name": "Follicular Dendritic Cell Sarcoma", + "mainType": "Soft Tissue Sarcoma", + "externalReferences": { + "UMLS": ["C1260325"], + "NCI": ["C9281"] + }, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "IDCT": { + "code": "IDCT", + "color": "LightSalmon", + "name": "Indeterminate Dendritic Cell Tumor", + "mainType": "Histiocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "HDCN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MNM", + "history": ["HIST"], + "level": 3, + "revocations": [], + "precursors": [] + }, + "BPDCN": { + "code": "BPDCN", + "color": "LightSalmon", + "name": "Blastic Plasmacytoid Dendritic Cell Neoplasm", + "mainType": "Blastic Plasmacytoid Dendritic Cell Neoplasm", + "externalReferences": { + "UMLS": ["C1301363"], + "NCI": ["C7203"] + }, + "tissue": "Myeloid", + "children": {}, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ALAL": { + "code": "ALAL", + "color": "LightSalmon", + "name": "Acute Leukemias of Ambiguous Lineage", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "MPALBNOS": { + "code": "MPALBNOS", + "color": "LightSalmon", + "name": "Mixed Phenotype Acute Leukemia, B/Myeloid, NOS", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "ALAL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "AUL": { + "code": "AUL", + "color": "LightSalmon", + "name": "Acute Undifferentiated Leukemia", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "ALAL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MPALBCRABL1": { + "code": "MPALBCRABL1", + "color": "LightSalmon", + "name": "Mixed Phenotype Acute Leukemia with t(9;22)(q34.1;q11.2); BCR-ABL1", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "ALAL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MPALTNOS": { + "code": "MPALTNOS", + "color": "LightSalmon", + "name": "Mixed Phenotype Acute Leukemia, T/Myeloid, NOS", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "ALAL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MPALKMT2A": { + "code": "MPALKMT2A", + "color": "LightSalmon", + "name": "Mixed Phenotype Acute Leukemia with t(v;11q23.3); KMT2A Rearranged", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "ALAL", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MDS/MPN": { + "code": "MDS/MPN", + "color": "LightSalmon", + "name": "Myelodysplastic/Myeloproliferative Neoplasms", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "JMML": { + "code": "JMML", + "color": "LightSalmon", + "name": "Juvenile Myelomonocytic Leukemia", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS/MPN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MDSMPNU": { + "code": "MDSMPNU", + "color": "LightSalmon", + "name": "MDS/MPN, Unclassifiable", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS/MPN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "CMML": { + "code": "CMML", + "color": "LightSalmon", + "name": "Chronic Myelomonocytic Leukemia", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": { + "UMLS": ["C0023480"], + "NCI": ["C3178"] + }, + "tissue": "Myeloid", + "children": { + "CMML1": { + "code": "CMML1", + "color": "LightSalmon", + "name": "Chronic Myelomonocytic Leukemia-1", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "CMML", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "CMML2": { + "code": "CMML2", + "color": "LightSalmon", + "name": "Chronic Myelomonocytic Leukemia-2", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "CMML", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "CMML0": { + "code": "CMML0", + "color": "LightSalmon", + "name": "Chronic Myelomonocytic Leukemia-0", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "CMML", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MDS/MPN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MDSMPNRST": { + "code": "MDSMPNRST", + "color": "LightSalmon", + "name": "MDS/MPN with Ring Sideroblasts and Thrombocytosis", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS/MPN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "ACML": { + "code": "ACML", + "color": "LightSalmon", + "name": "Atypical Chronic Myeloid Leukemia, BCR-ABL1-", + "mainType": "Myelodysplastic/Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS/MPN", + "history": ["aCML"], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MPN": { + "code": "MPN", + "color": "LightSalmon", + "name": "Myeloproliferative Neoplasms", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": { + "UMLS": ["C1292778"], + "NCI": ["C4345"] + }, + "tissue": "Myeloid", + "children": { + "CNL": { + "code": "CNL", + "color": "LightSalmon", + "name": "Chronic Neutrophilic Leukemia", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MPN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "CML": { + "code": "CML", + "color": "LightSalmon", + "name": "Chronic Myelogenous Leukemia", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": { + "UMLS": ["C0023470"], + "NCI": ["C3172"] + }, + "tissue": "Myeloid", + "children": { + "CMLBCRABL1": { + "code": "CMLBCRABL1", + "color": "LightSalmon", + "name": "Chronic Myeloid Leukemia, BCR-ABL1+", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "CML", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MPN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "PV": { + "code": "PV", + "color": "LightSalmon", + "name": "Polycythemia Vera", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "PVMF": { + "code": "PVMF", + "color": "LightSalmon", + "name": "Polycythaemia Vera Myelofibrosis", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "PV", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MPN", + "history": ["PCV"], + "level": 4, + "revocations": [], + "precursors": [] + }, + "PMF": { + "code": "PMF", + "color": "LightSalmon", + "name": "Primary Myelofibrosis", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "PMFPES": { + "code": "PMFPES", + "color": "LightSalmon", + "name": "Primary Myelofibrosis, Prefibrotic/Early Stage", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "PMF", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "PMFOFS": { + "code": "PMFOFS", + "color": "LightSalmon", + "name": "Primary Myelofibrosis,Overt Fibrotic Stage", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "PMF", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MPN", + "history": ["MYF"], + "level": 4, + "revocations": [], + "precursors": [] + }, + "CELNOS": { + "code": "CELNOS", + "color": "LightSalmon", + "name": "Chronic Eosinophilic Leukemia, NOS", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MPN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MPNU": { + "code": "MPNU", + "color": "LightSalmon", + "name": "Myeloproliferative Neoplasms, Unclassifiable", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MPN", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "ET": { + "code": "ET", + "color": "LightSalmon", + "name": "Essential Thrombocythemia", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "ETMF": { + "code": "ETMF", + "color": "LightSalmon", + "name": "Essential Thrombocythemia Myelofibrosis", + "mainType": "Myeloproliferative Neoplasms", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "ET", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MPN", + "history": ["ETC"], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MNGLP": { + "code": "MNGLP", + "color": "LightSalmon", + "name": "Myeloid Neoplasms with Germ Line Predisposition", + "mainType": "Myeloid Neoplasms with Germ Line Predisposition", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MLNER": { + "code": "MLNER", + "color": "LightSalmon", + "name": "Myeloid/Lymphoid Neoplasms with Eosinophilia and Rearrangement of PDGFRA/PDGFRB or FGFR1 or with PCM1-JAK2", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "MLNPDGFRA": { + "code": "MLNPDGFRA", + "color": "LightSalmon", + "name": "Myeloid/Lymphoid Neoplasms with PDGFRA Rearrangement", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MLNER", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MLNPDGFRB": { + "code": "MLNPDGFRB", + "color": "LightSalmon", + "name": "Myeloid/Lymphoid Neoplasms with PDGFRB Rearrangement", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MLNER", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MLNFGFR1": { + "code": "MLNFGFR1", + "color": "LightSalmon", + "name": "Myeloid/Lymphoid Neoplasms with FGFR1 Rearrangement", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MLNER", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MLNPCM1JAK2": { + "code": "MLNPCM1JAK2", + "color": "LightSalmon", + "name": "Myeloid/Lymphoid Neoplasms with PCM1-JAK2", + "mainType": "Leukemia", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MLNER", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MDS": { + "code": "MDS", + "color": "LightSalmon", + "name": "Myelodysplastic Syndromes", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": { + "UMLS": ["C3463824"], + "NCI": ["C3247"] + }, + "tissue": "Myeloid", + "children": { + "MDSRS": { + "code": "MDSRS", + "color": "LightSalmon", + "name": "MDS with Ring Sideroblasts", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "MDSRSSLD": { + "code": "MDSRSSLD", + "color": "LightSalmon", + "name": "MDS with Ring Sideroblasts and Single Lineage Dysplasia", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDSRS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MDSRSMD": { + "code": "MDSRSMD", + "color": "LightSalmon", + "name": "MDS with Ring Sideroblasts and Multilineage Dysplasia", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDSRS", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MDS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MDSEB": { + "code": "MDSEB", + "color": "LightSalmon", + "name": "MDS with Excess Blasts", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "MDSEB1": { + "code": "MDSEB1", + "color": "LightSalmon", + "name": "MDS with excess blasts-1", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDSEB", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "MDSEB2": { + "code": "MDSEB2", + "color": "LightSalmon", + "name": "MDS with excess blasts-2", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDSEB", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MDS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MDSSLD": { + "code": "MDSSLD", + "color": "LightSalmon", + "name": "MDS with Single Lineage Dysplasia", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MDSU": { + "code": "MDSU", + "color": "LightSalmon", + "name": "MDS, Unclassifiable", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "RCYC": { + "code": "RCYC", + "color": "LightSalmon", + "name": "Refractory Cytopenia of Childhood", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MDSMD": { + "code": "MDSMD", + "color": "LightSalmon", + "name": "MDS with Multilineage Dysplasia", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MDSID5Q": { + "code": "MDSID5Q", + "color": "LightSalmon", + "name": "MDS with Isolated Del(5q)", + "mainType": "Myelodysplastic Syndromes", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MDS", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "MCD": { + "code": "MCD", + "color": "LightSalmon", + "name": "Mastocytosis", + "mainType": "Mastocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": { + "CMCD": { + "code": "CMCD", + "color": "LightSalmon", + "name": "Cutaneous Mastocytosis", + "mainType": "Mastocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MCD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "SM": { + "code": "SM", + "color": "LightSalmon", + "name": "Systemic Mastocytosis", + "mainType": "Mastocytosis", + "externalReferences": { + "UMLS": ["C0221013"], + "NCI": ["C9235"] + }, + "tissue": "Myeloid", + "children": { + "SMAHN": { + "code": "SMAHN", + "color": "LightSalmon", + "name": "Systemic Mastocytosis with an Associated Hematological Neoplasm", + "mainType": "Mastocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "SM", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "SMMCL": { + "code": "SMMCL", + "color": "LightSalmon", + "name": "Mast Cell Leukemia", + "mainType": "Mastocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "SM", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "ISM": { + "code": "ISM", + "color": "LightSalmon", + "name": "Indolent Systemic Mastocytosis", + "mainType": "Mastocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "SM", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "ASM": { + "code": "ASM", + "color": "LightSalmon", + "name": "Aggressive Systemic Mastocytosis", + "mainType": "Mastocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "SM", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + }, + "SSM": { + "code": "SSM", + "color": "LightSalmon", + "name": "Smoldering Systemic Mastocytosis", + "mainType": "Mastocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "SM", + "history": [], + "level": 5, + "revocations": [], + "precursors": [] + } + }, + "parent": "MCD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MCSL": { + "code": "MCSL", + "color": "LightSalmon", + "name": "Mast Cell Sarcoma", + "mainType": "Mastocytosis", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MCD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "MNM", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "MYELOID", + "history": [], + "level": 2, + "revocations": [], + "precursors": ["LEUK"] + }, + "MATPL": { + "code": "MATPL", + "color": "LightSalmon", + "name": "Myeloid Atypical", + "mainType": "Blood Cancer, NOS", + "externalReferences": {}, + "tissue": "Myeloid", + "children": {}, + "parent": "MYELOID", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": ["BLOOD"], + "level": 1, + "revocations": [], + "precursors": [] + }, + "VULVA": { + "code": "VULVA", + "color": "Purple", + "name": "Vulva/Vagina", + "mainType": "Vulvar/Vaginal Cancer", + "externalReferences": { + "UMLS": ["C0042993"], + "NCI": ["C12408"] + }, + "tissue": "Vulva/Vagina", + "children": { + "VPDC": { + "code": "VPDC", + "color": "Purple", + "name": "Poorly Differentiated Vaginal Carcinoma", + "mainType": "Vaginal Cancer", + "externalReferences": {}, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VULVA", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "VGCT": { + "code": "VGCT", + "color": "Purple", + "name": "Germ Cell Tumor of the Vulva", + "mainType": "Germ Cell Tumor", + "externalReferences": {}, + "tissue": "Vulva/Vagina", + "children": { + "VDYS": { + "code": "VDYS", + "color": "Purple", + "name": "Dysgerminoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0346185"], + "NCI": ["C8106"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "VIMT": { + "code": "VIMT", + "color": "Purple", + "name": "Immature Teratoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0334520"], + "NCI": ["C4286"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "VPE": { + "code": "VPE", + "color": "Purple", + "name": "Polyembryoma", + "mainType": "Germ Cell Tumor", + "externalReferences": {}, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "VYST": { + "code": "VYST", + "color": "Purple", + "name": "Yolk Sac Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1336945"], + "NCI": ["C6379"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "VMT": { + "code": "VMT", + "color": "Purple", + "name": "Mature Teratoma", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C1368910"], + "NCI": ["C9015"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "VMGCT": { + "code": "VMGCT", + "color": "Purple", + "name": "Mixed Germ Cell Tumor", + "mainType": "Germ Cell Tumor", + "externalReferences": { + "UMLS": ["C0334524"], + "NCI": ["C4290"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "VOEC": { + "code": "VOEC", + "color": "Purple", + "name": "Embryonal Carcinoma", + "mainType": "Germ Cell Tumor", + "externalReferences": {}, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VGCT", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "VULVA", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "VA": { + "code": "VA", + "color": "Purple", + "name": "Vaginal Adenocarcinoma", + "mainType": "Vaginal Cancer", + "externalReferences": { + "UMLS": ["C0279668"], + "NCI": ["C7981"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VULVA", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "VMA": { + "code": "VMA", + "color": "Purple", + "name": "Mucinous Adenocarcinoma of the Vulva/Vagina", + "mainType": "Vulvar Carcinoma", + "externalReferences": { + "UMLS": ["C1519925"], + "NCI": ["C40252"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VULVA", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "VMM": { + "code": "VMM", + "color": "Purple", + "name": "Mucosal Melanoma of the Vulva/Vagina", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C2004576"], + "NCI": ["C27394"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VULVA", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "VSC": { + "code": "VSC", + "color": "Purple", + "name": "Squamous Cell Carcinoma of the Vulva/Vagina", + "mainType": "Vaginal Cancer", + "externalReferences": { + "UMLS": ["C0238518"], + "NCI": ["C7736"] + }, + "tissue": "Vulva/Vagina", + "children": {}, + "parent": "VULVA", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "KIDNEY": { + "code": "KIDNEY", + "color": "Orange", + "name": "Kidney", + "mainType": "Kidney Cancer", + "externalReferences": { + "UMLS": ["C0022646"], + "NCI": ["C12415"] + }, + "tissue": "Kidney", + "children": { + "RCC": { + "code": "RCC", + "color": "Orange", + "name": "Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C0007134"], + "NCI": ["C9385"] + }, + "tissue": "Kidney", + "children": { + "NCCRCC": { + "code": "NCCRCC", + "color": "Orange", + "name": "Renal Non-Clear Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": {}, + "tissue": "Kidney", + "children": { + "CDRCC": { + "code": "CDRCC", + "color": "Orange", + "name": "Collecting Duct Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C1266044"], + "NCI": ["C6194"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "PRCC": { + "code": "PRCC", + "color": "Orange", + "name": "Papillary Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C1306837"], + "NCI": ["C6975"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "RSCC": { + "code": "RSCC", + "color": "Orange", + "name": "Renal Small Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["CL473652"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "RAML": { + "code": "RAML", + "color": "Orange", + "name": "Renal Angiomyolipoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C0241961"], + "NCI": ["C3888"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MTSCC": { + "code": "MTSCC", + "color": "Orange", + "name": "Renal Mucinous Tubular Spindle Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C1513719"], + "NCI": ["C39807"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "FHRCC": { + "code": "FHRCC", + "color": "Orange", + "name": "FH-Deficient Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": {}, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "CCPRC": { + "code": "CCPRC", + "color": "Orange", + "name": "Clear Cell Papillary Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": {}, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "ROCY": { + "code": "ROCY", + "color": "Orange", + "name": "Renal Oncocytoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C0346255"], + "NCI": ["C4526"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "TRCC": { + "code": "TRCC", + "color": "Orange", + "name": "Translocation-Associated Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C1337036"], + "NCI": ["C27891"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "SRCC": { + "code": "SRCC", + "color": "Orange", + "name": "Sarcomatoid Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C1266043"], + "NCI": ["C27893"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "URCC": { + "code": "URCC", + "color": "Orange", + "name": "Unclassified Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C1336853"], + "NCI": ["C27892"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MRC": { + "code": "MRC", + "color": "Orange", + "name": "Renal Medullary Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["CL448379"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "CHRCC": { + "code": "CHRCC", + "color": "Orange", + "name": "Chromophobe Renal Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C1266042"], + "NCI": ["C4146"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "NCCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "RCC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "CCRCC": { + "code": "CCRCC", + "color": "Orange", + "name": "Renal Clear Cell Carcinoma", + "mainType": "Renal Cell Carcinoma", + "externalReferences": { + "UMLS": ["C0279702"], + "NCI": ["C4033"] + }, + "tissue": "Kidney", + "children": { + "SCCRCC": { + "code": "SCCRCC", + "color": "Orange", + "name": "Renal Clear Cell Carcinoma with Sarcomatoid Features", + "mainType": "Renal Cell Carcinoma", + "externalReferences": {}, + "tissue": "Kidney", + "children": {}, + "parent": "CCRCC", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "RCC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "KIDNEY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "WT": { + "code": "WT", + "color": "Orange", + "name": "Wilms' Tumor", + "mainType": "Wilms Tumor", + "externalReferences": { + "UMLS": ["CL343552"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "KIDNEY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "RNET": { + "code": "RNET", + "color": "Orange", + "name": "Renal Neuroendocrine Tumor", + "mainType": "Renal Neuroendocrine Tumor", + "externalReferences": {}, + "tissue": "Kidney", + "children": {}, + "parent": "KIDNEY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "MRT": { + "code": "MRT", + "color": "Orange", + "name": "Rhabdoid Cancer", + "mainType": "Rhabdoid Cancer", + "externalReferences": { + "UMLS": ["C0206743"], + "NCI": ["C3808"] + }, + "tissue": "Kidney", + "children": {}, + "parent": "KIDNEY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "CCSK": { + "code": "CCSK", + "color": "Orange", + "name": "Clear Cell Sarcoma of Kidney", + "mainType": "Clear Cell Sarcoma of Kidney", + "externalReferences": {}, + "tissue": "Kidney", + "children": {}, + "parent": "KIDNEY", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + }, + "STOMACH": { + "code": "STOMACH", + "color": "LightSkyBlue", + "name": "Esophagus/Stomach", + "mainType": "Esophageal/Stomach Cancer", + "externalReferences": { + "UMLS": ["C0038351"], + "NCI": ["C12391"] + }, + "tissue": "Esophagus/Stomach", + "children": { + "EGC": { + "code": "EGC", + "color": "LightSkyBlue", + "name": "Esophagogastric Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1332166"], + "NCI": ["C9296"] + }, + "tissue": "Esophagus/Stomach", + "children": { + "STAD": { + "code": "STAD", + "color": "LightSkyBlue", + "name": "Stomach Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C0278701"], + "NCI": ["C4004"] + }, + "tissue": "Esophagus/Stomach", + "children": { + "PSTAD": { + "code": "PSTAD", + "color": "LightSkyBlue", + "name": "Papillary Stomach Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1333785"], + "NCI": ["C5472"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STAD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "MSTAD": { + "code": "MSTAD", + "color": "LightSkyBlue", + "name": "Mucinous Stomach Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1334809"], + "NCI": ["C5248"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STAD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "DSTAD": { + "code": "DSTAD", + "color": "LightSkyBlue", + "name": "Diffuse Type Stomach Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C0279635"], + "NCI": ["C9159"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STAD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "ISTAD": { + "code": "ISTAD", + "color": "LightSkyBlue", + "name": "Intestinal Type Stomach Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C0279633"], + "NCI": ["C9157"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STAD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "TSTAD": { + "code": "TSTAD", + "color": "LightSkyBlue", + "name": "Tubular Stomach Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1333791"], + "NCI": ["C5473"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STAD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "EGC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "STAS": { + "code": "STAS", + "color": "LightSkyBlue", + "name": "Adenosquamous Carcinoma of the Stomach", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1333761"], + "NCI": ["C5474"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "EGC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "STSC": { + "code": "STSC", + "color": "LightSkyBlue", + "name": "Small Cell Carcinoma of the Stomach", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1333788"], + "NCI": ["C6764"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "EGC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GRC": { + "code": "GRC", + "color": "LightSkyBlue", + "name": "Gastric Remnant Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": {}, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "EGC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "ESCA": { + "code": "ESCA", + "color": "LightSkyBlue", + "name": "Esophageal Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C0279628"], + "NCI": ["C4025"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "EGC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "USTAD": { + "code": "USTAD", + "color": "LightSkyBlue", + "name": "Undifferentiated Stomach Adenocarcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1336858"], + "NCI": ["C5476"] + }, + "tissue": "Esophagus/Stomach", + "children": { + "SSRCC": { + "code": "SSRCC", + "color": "LightSkyBlue", + "name": "Signet Ring Cell Carcinoma of the Stomach", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1335965"], + "NCI": ["C5250"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "USTAD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + }, + "SPDAC": { + "code": "SPDAC", + "color": "LightSkyBlue", + "name": "Poorly Differentiated Carcinoma of the Stomach", + "mainType": "Esophagogastric Cancer", + "externalReferences": {}, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "USTAD", + "history": [], + "level": 4, + "revocations": [], + "precursors": [] + } + }, + "parent": "EGC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "GEJ": { + "code": "GEJ", + "color": "LightSkyBlue", + "name": "Adenocarcinoma of the Gastroesophageal Junction", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C1332166"], + "NCI": ["C9296"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "EGC", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "STOMACH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "SMN": { + "code": "SMN", + "color": "LightSkyBlue", + "name": "Smooth Muscle Neoplasm, NOS", + "mainType": "Esophagogastric Cancer", + "externalReferences": {}, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STOMACH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "EPDCA": { + "code": "EPDCA", + "color": "LightSkyBlue", + "name": "Esophageal Poorly Differentiated Carcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": {}, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STOMACH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "GINETES": { + "code": "GINETES", + "color": "LightSkyBlue", + "name": "Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach", + "mainType": "Esophagogastric Cancer", + "externalReferences": {}, + "tissue": "Esophagus/Stomach", + "children": { + "SWDNET": { + "code": "SWDNET", + "color": "LightSkyBlue", + "name": "Well-Differentiated Neuroendocrine Tumors of the Stomach", + "mainType": "Gastrointestinal Neuroendocrine Tumor", + "externalReferences": { + "UMLS": ["C3272399"], + "NCI": ["C95871"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "GINETES", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HGNES": { + "code": "HGNES", + "color": "LightSkyBlue", + "name": "High-Grade Neuroendocrine Carcinoma of the Stomach", + "mainType": "Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach", + "externalReferences": {}, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "GINETES", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + }, + "HGNEE": { + "code": "HGNEE", + "color": "LightSkyBlue", + "name": "High-Grade Neuroendocrine Carcinoma of the Esophagus", + "mainType": "Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach", + "externalReferences": {}, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "GINETES", + "history": [], + "level": 3, + "revocations": [], + "precursors": [] + } + }, + "parent": "STOMACH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ESCC": { + "code": "ESCC", + "color": "LightSkyBlue", + "name": "Esophageal Squamous Cell Carcinoma", + "mainType": "Esophagogastric Cancer", + "externalReferences": { + "UMLS": ["C0279626"], + "NCI": ["C4024"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STOMACH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + }, + "ESMM": { + "code": "ESMM", + "color": "LightSkyBlue", + "name": "Mucosal Melanoma of the Esophagus", + "mainType": "Melanoma", + "externalReferences": { + "UMLS": ["C1333460"], + "NCI": ["C5707"] + }, + "tissue": "Esophagus/Stomach", + "children": {}, + "parent": "STOMACH", + "history": [], + "level": 2, + "revocations": [], + "precursors": [] + } + }, + "parent": "TISSUE", + "history": [], + "level": 1, + "revocations": [], + "precursors": [] + } + }, + "parent": null, + "history": [], + "level": 0, + "revocations": [], + "precursors": [] + } +} diff --git a/web/src/main/javascript/package-lock.json b/web/src/main/javascript/package-lock.json new file mode 100644 index 00000000..2ca0326c --- /dev/null +++ b/web/src/main/javascript/package-lock.json @@ -0,0 +1,9947 @@ +{ + "name": "oncotree-frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "oncotree-frontend", + "version": "0.0.0", + "dependencies": { + "@emotion/css": "^11.13.0", + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", + "@oncokb/oncotree": "^0.9.8", + "dompurify": "^3.1.6", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.25.1", + "react-select": "^5.8.0", + "react-toastify": "^10.0.5", + "react-tooltip": "^5.27.1" + }, + "devDependencies": { + "@types/jest": "^29.5.12", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^7.15.0", + "@typescript-eslint/parser": "^7.15.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.7", + "husky": "^9.1.4", + "jest": "^29.7.0", + "lint-staged": "^15.2.7", + "prettier": "3.3.3", + "sass": "^1.77.8", + "ts-jest": "^29.2.3", + "typescript": "^5.2.2", + "vite": "^5.3.4", + "vitepress": "^1.3.1" + }, + "engines": { + "node": ">=20.12.2" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "dev": true, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", + "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", + "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==", + "dev": true + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", + "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", + "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", + "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", + "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", + "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==", + "dev": true + }, + "node_modules/@algolia/logger-console": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", + "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", + "dev": true, + "dependencies": { + "@algolia/logger-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", + "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", + "dev": true, + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", + "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==", + "dev": true + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", + "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", + "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", + "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@docsearch/css": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.1.tgz", + "integrity": "sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==", + "dev": true + }, + "node_modules/@docsearch/js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.1.tgz", + "integrity": "sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==", + "dev": true, + "dependencies": { + "@docsearch/react": "3.6.1", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.1.tgz", + "integrity": "sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.6.1", + "algoliasearch": "^4.19.1" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/css": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.13.0.tgz", + "integrity": "sha512-BUk99ylT+YHl+W/HN7nv1RCTkDYmKKqa1qbvM/qLSQEg61gipuBF5Hptk/2/ERmX2DCv0ccuFGhz9i0KSZOqPg==", + "dependencies": { + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/react": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.0.tgz", + "integrity": "sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.0.tgz", + "integrity": "sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.9.0", + "@emotion/utils": "^1.4.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" + }, + "node_modules/@emotion/unitless": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.9.0.tgz", + "integrity": "sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz", + "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.5.tgz", + "integrity": "sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==", + "dependencies": { + "@floating-ui/utils": "^0.2.5" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.8.tgz", + "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.5" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz", + "integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==" + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz", + "integrity": "sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz", + "integrity": "sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz", + "integrity": "sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", + "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oncokb/oncotree": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@oncokb/oncotree/-/oncotree-0.9.8.tgz", + "integrity": "sha512-B8xmVPHm9aWu94w1VZ8y56kSkSanR5krGg1aNXASoa4tmDKxHwj7GoU1kv4ktyA4+Ul13XbZFthdbfZO7HV/6Q==", + "dependencies": { + "d3": "^7.9.0" + }, + "engines": { + "node": ">=20.12.2" + } + }, + "node_modules/@remix-run/router": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", + "integrity": "sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz", + "integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz", + "integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz", + "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz", + "integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz", + "integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz", + "integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz", + "integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz", + "integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz", + "integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz", + "integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz", + "integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz", + "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz", + "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz", + "integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz", + "integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz", + "integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.12.1.tgz", + "integrity": "sha512-biCz/mnkMktImI6hMfMX3H9kOeqsInxWEyCHbSlL8C/2TR1FqfmGxTLRNwYCKsyCyxWLbB8rEqXRVZuyxuLFmA==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/transformers": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.12.1.tgz", + "integrity": "sha512-zOpj/S2thBvnJV4Ty3EE8aRs/VqCbV+lgtEYeBRkPxTW22uLADEIZq0qjt5W2Rfy2KSu29e73nRyzp4PefjUTg==", + "dev": true, + "dependencies": { + "shiki": "1.12.1" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz", + "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==", + "dev": true, + "dependencies": { + "undici-types": "~6.11.1" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz", + "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.35.tgz", + "integrity": "sha512-gKp0zGoLnMYtw4uS/SJRRO7rsVggLjvot3mcctlMXunYNsX+aRJDqqw/lV5/gHK91nvaAAlWFgdVl020AW1Prg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.24.7", + "@vue/shared": "3.4.35", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.35.tgz", + "integrity": "sha512-pWIZRL76/oE/VMhdv/ovZfmuooEni6JPG1BFe7oLk5DZRo/ImydXijoZl/4kh2406boRQ7lxTYzbZEEXEhj9NQ==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.4.35", + "@vue/shared": "3.4.35" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.35.tgz", + "integrity": "sha512-xacnRS/h/FCsjsMfxBkzjoNxyxEyKyZfBch/P4vkLRvYJwe5ChXmZZrj8Dsed/752H2Q3JE8kYu9Uyha9J6PgA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.24.7", + "@vue/compiler-core": "3.4.35", + "@vue/compiler-dom": "3.4.35", + "@vue/compiler-ssr": "3.4.35", + "@vue/shared": "3.4.35", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.40", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.35.tgz", + "integrity": "sha512-7iynB+0KB1AAJKk/biENTV5cRGHRdbdaD7Mx3nWcm1W8bVD6QmnH3B4AHhQQ1qZHhqFwzEzMwiytXm3PX1e60A==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.35", + "@vue/shared": "3.4.35" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.3.7.tgz", + "integrity": "sha512-kvjQ6nmsqTp7SrmpwI2G0MgbC4ys0bPsgQirHXJM8y1m7siQ5RnWQUHJVfyUrHNguCySW1cevAdIw87zrPTl9g==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.3.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.3.7.tgz", + "integrity": "sha512-ktHhhjI4CoUrwdSUF5b/MFfjrtAtK8r4vhOkFyRN5Yp9kdXTwsRBYcwarHuP+wFPKf4/KM7DVBj2ELO8SBwdsw==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.3.7", + "birpc": "^0.2.17", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.7.tgz", + "integrity": "sha512-M9EU1/bWi5GNS/+IZrAhwGOVZmUTN4MH22Hvh35nUZZg9AZP2R2OhfCb+MG4EtAsrUEYlu3R43/SIj3G7EZYtQ==", + "dev": true, + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.35.tgz", + "integrity": "sha512-Ggtz7ZZHakriKioveJtPlStYardwQH6VCs9V13/4qjHSQb/teE30LVJNrbBVs4+aoYGtTQKJbTe4CWGxVZrvEw==", + "dev": true, + "dependencies": { + "@vue/shared": "3.4.35" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.35.tgz", + "integrity": "sha512-D+BAjFoWwT5wtITpSxwqfWZiBClhBbR+bm0VQlWYFOadUUXFo+5wbe9ErXhLvwguPiLZdEF13QAWi2vP3ZD5tA==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.4.35", + "@vue/shared": "3.4.35" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.35.tgz", + "integrity": "sha512-yGOlbos+MVhlS5NWBF2HDNgblG8e2MY3+GigHEyR/dREAluvI5tuUUgie3/9XeqhPE4LF0i2wjlduh5thnfOqw==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.4.35", + "@vue/runtime-core": "3.4.35", + "@vue/shared": "3.4.35", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.35.tgz", + "integrity": "sha512-iZ0e/u9mRE4T8tNhlo0tbA+gzVkgv8r5BX6s1kRbOZqfpq14qoIvCZ5gIgraOmYkMYrSEZgkkojFPr+Nyq/Mnw==", + "dev": true, + "dependencies": { + "@vue/compiler-ssr": "3.4.35", + "@vue/shared": "3.4.35" + }, + "peerDependencies": { + "vue": "3.4.35" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.35.tgz", + "integrity": "sha512-hvuhBYYDe+b1G8KHxsQ0diDqDMA8D9laxWZhNAjE83VZb5UDaXl9Xnz7cGdDSyiHM90qqI/CyGMcpBpiDy6VVQ==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.0.tgz", + "integrity": "sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==", + "dev": true, + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.0", + "@vueuse/shared": "10.11.0", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.11.0.tgz", + "integrity": "sha512-Pp6MtWEIr+NDOccWd8j59Kpjy5YDXogXI61Kb1JxvSfVBO8NzFQkmrKmSZz47i+ZqHnIzxaT38L358yDHTncZg==", + "dev": true, + "dependencies": { + "@vueuse/core": "10.11.0", + "@vueuse/shared": "10.11.0", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^4", + "drauu": "^0.3", + "focus-trap": "^7", + "fuse.js": "^6", + "idb-keyval": "^6", + "jwt-decode": "^3", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^6" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.0.tgz", + "integrity": "sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.0.tgz", + "integrity": "sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==", + "dev": true, + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/algoliasearch": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", + "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", + "dev": true, + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-account": "4.24.0", + "@algolia/client-analytics": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-personalization": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/recommend": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz", + "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001644", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", + "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/create-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dompurify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz", + "integrity": "sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "dev": true, + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", + "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", + "dev": true, + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/lint-staged": { + "version": "15.2.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", + "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", + "dev": true, + "dependencies": { + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.4", + "execa": "~8.0.1", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", + "micromatch": "~4.0.7", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.4.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/listr2": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minisearch": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.0.tgz", + "integrity": "sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==", + "dev": true + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.23.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.23.1.tgz", + "integrity": "sha512-O5UdRsNh4vdZaTieWe3XOgSpdMAmkIYBCT3VhQDlKrzyCm8lUYsk0fmVEvoQQifoOjFRTaHZO69ylrzTW2BH+A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.25.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.25.1.tgz", + "integrity": "sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw==", + "dependencies": { + "@remix-run/router": "1.18.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.25.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.25.1.tgz", + "integrity": "sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ==", + "dependencies": { + "@remix-run/router": "1.18.0", + "react-router": "6.25.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-select": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", + "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-toastify": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.5.tgz", + "integrity": "sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==", + "dependencies": { + "clsx": "^2.1.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-tooltip": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.27.1.tgz", + "integrity": "sha512-a+micPXcMOMt11CYlwJD4XShcqGziasHco4NPe1OFw298WBTILMyzUgNC1LAFViAe791JdHNVSJIpzhZm2MvDA==", + "dependencies": { + "@floating-ui/dom": "^1.6.1", + "classnames": "^2.3.0" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/rollup": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz", + "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.19.1", + "@rollup/rollup-android-arm64": "4.19.1", + "@rollup/rollup-darwin-arm64": "4.19.1", + "@rollup/rollup-darwin-x64": "4.19.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.19.1", + "@rollup/rollup-linux-arm-musleabihf": "4.19.1", + "@rollup/rollup-linux-arm64-gnu": "4.19.1", + "@rollup/rollup-linux-arm64-musl": "4.19.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1", + "@rollup/rollup-linux-riscv64-gnu": "4.19.1", + "@rollup/rollup-linux-s390x-gnu": "4.19.1", + "@rollup/rollup-linux-x64-gnu": "4.19.1", + "@rollup/rollup-linux-x64-musl": "4.19.1", + "@rollup/rollup-win32-arm64-msvc": "4.19.1", + "@rollup/rollup-win32-ia32-msvc": "4.19.1", + "@rollup/rollup-win32-x64-msvc": "4.19.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/search-insights": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.15.0.tgz", + "integrity": "sha512-ch2sPCUDD4sbPQdknVl9ALSi9H7VyoeVbsxznYz6QV55jJ8CI3EtwpO1i84keN4+hF5IeHWIeGvc08530JkVXQ==", + "dev": true, + "peer": true + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.12.1.tgz", + "integrity": "sha512-nwmjbHKnOYYAe1aaQyEBHvQymJgfm86ZSS7fT8OaPRr4sbAcBNz7PbfAikMEFSDQ6se2j2zobkXvVKcBOm0ysg==", + "dev": true, + "dependencies": { + "@shikijs/core": "1.12.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/superjson": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz", + "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", + "dev": true, + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "29.2.3", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.3.tgz", + "integrity": "sha512-yCcfVdiBFngVz9/keHin9EnsrQtQtEu3nRykNy9RVp+FiPFFbPJ3Sg6Qg4+TkmH0vMP5qsTKgXSsk80HRwvdgQ==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", + "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vite": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", + "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.39", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.3.1.tgz", + "integrity": "sha512-soZDpg2rRVJNIM/IYMNDPPr+zTHDA5RbLDHAxacRu+Q9iZ2GwSR0QSUlLs+aEZTkG0SOX1dc8RmUYwyuxK8dfQ==", + "dev": true, + "dependencies": { + "@docsearch/css": "^3.6.0", + "@docsearch/js": "^3.6.0", + "@shikijs/core": "^1.10.3", + "@shikijs/transformers": "^1.10.3", + "@types/markdown-it": "^14.1.1", + "@vitejs/plugin-vue": "^5.0.5", + "@vue/devtools-api": "^7.3.5", + "@vue/shared": "^3.4.31", + "@vueuse/core": "^10.11.0", + "@vueuse/integrations": "^10.11.0", + "focus-trap": "^7.5.4", + "mark.js": "8.11.1", + "minisearch": "^7.0.0", + "shiki": "^1.10.3", + "vite": "^5.3.3", + "vue": "^3.4.31" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.35.tgz", + "integrity": "sha512-+fl/GLmI4GPileHftVlCdB7fUL4aziPcqTudpTGXCT8s+iZWuOCeNEB5haX6Uz2IpRrbEXOgIFbe+XciCuGbNQ==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.35", + "@vue/compiler-sfc": "3.4.35", + "@vue/runtime-dom": "3.4.35", + "@vue/server-renderer": "3.4.35", + "@vue/shared": "3.4.35" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/web/src/main/javascript/package.json b/web/src/main/javascript/package.json new file mode 100644 index 00000000..9f9d7ef1 --- /dev/null +++ b/web/src/main/javascript/package.json @@ -0,0 +1,60 @@ +{ + "name": "oncotree-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "npm run docs:build && tsc -b && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview", + "test": "jest", + "test:watch": "jest --watch", + "docs:dev": "vitepress dev vitepress", + "docs:build": "vitepress build vitepress", + "docs:preview": "vitepress preview vitepress", + "prepare": "husky" + }, + "engines": { + "node": ">=20.12.2" + }, + "dependencies": { + "@emotion/css": "^11.13.0", + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", + "@oncokb/oncotree": "^0.9.8", + "dompurify": "^3.1.6", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router-dom": "^6.25.1", + "react-select": "^5.8.0", + "react-toastify": "^10.0.5", + "react-tooltip": "^5.27.1" + }, + "devDependencies": { + "@types/jest": "^29.5.12", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^7.15.0", + "@typescript-eslint/parser": "^7.15.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.7", + "husky": "^9.1.4", + "jest": "^29.7.0", + "lint-staged": "^15.2.7", + "prettier": "3.3.3", + "sass": "^1.77.8", + "ts-jest": "^29.2.3", + "typescript": "^5.2.2", + "vite": "^5.3.4", + "vitepress": "^1.3.1" + }, + "lint-staged": { + "*.{css,ts,tsx}": "prettier --write", + "*.{ts,tsx}": "eslint --cache --fix" + } +} diff --git a/web/src/main/javascript/public/404.html b/web/src/main/javascript/public/404.html new file mode 100644 index 00000000..67b4e390 --- /dev/null +++ b/web/src/main/javascript/public/404.html @@ -0,0 +1,21 @@ + + + + + + 404 | OncoTree + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/web/src/main/javascript/public/about.html b/web/src/main/javascript/public/about.html new file mode 100644 index 00000000..bf44f678 --- /dev/null +++ b/web/src/main/javascript/public/about.html @@ -0,0 +1,24 @@ + + + + + + About | OncoTree + + + + + + + + + + + + + +
Skip to content

About

About OncoTree

OncoTree is a comprehensive, community-led cancer classification system that adapts to the evolving demands of precision oncology. Designed to classify cancers by both histological and molecular traits, it provides a structured framework to complement the clinical decision-making processes. The platform, which is open-source and publicly accessible, is governed by a diverse committee of oncologists, pathologists, and scientists. This multidisciplinary oversight ensures OncoTree remains relevant, incorporating new cancer types and research advancements in real time to support clinical decision-making and research applications.

Curation Process Overview

Overview of the curation process in OncoTree

+ + + + \ No newline at end of file diff --git a/web/src/main/javascript/public/assets/about.md.BceXjb0R.js b/web/src/main/javascript/public/assets/about.md.BceXjb0R.js new file mode 100644 index 00000000..5fefd259 --- /dev/null +++ b/web/src/main/javascript/public/assets/about.md.BceXjb0R.js @@ -0,0 +1 @@ +import{_ as e,c as a,o,a3 as t}from"./chunks/framework.CyEiTwkJ.js";const r="/assets/curation_process.CwbRUQ02.png",b=JSON.parse('{"title":"About","description":"","frontmatter":{},"headers":[],"relativePath":"about.md","filePath":"about.md"}'),s={name:"about.md"},i=t('

About

About OncoTree

OncoTree is a comprehensive, community-led cancer classification system that adapts to the evolving demands of precision oncology. Designed to classify cancers by both histological and molecular traits, it provides a structured framework to complement the clinical decision-making processes. The platform, which is open-source and publicly accessible, is governed by a diverse committee of oncologists, pathologists, and scientists. This multidisciplinary oversight ensures OncoTree remains relevant, incorporating new cancer types and research advancements in real time to support clinical decision-making and research applications.

Curation Process Overview

Overview of the curation process in OncoTree

',7),n=[i];function c(l,u,d,h,p,m){return o(),a("div",null,n)}const f=e(s,[["render",c]]);export{b as __pageData,f as default}; diff --git a/web/src/main/javascript/public/assets/about.md.BceXjb0R.lean.js b/web/src/main/javascript/public/assets/about.md.BceXjb0R.lean.js new file mode 100644 index 00000000..7e5ac9f4 --- /dev/null +++ b/web/src/main/javascript/public/assets/about.md.BceXjb0R.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o,a3 as t}from"./chunks/framework.CyEiTwkJ.js";const r="/assets/curation_process.CwbRUQ02.png",b=JSON.parse('{"title":"About","description":"","frontmatter":{},"headers":[],"relativePath":"about.md","filePath":"about.md"}'),s={name:"about.md"},i=t("",7),n=[i];function c(l,u,d,h,p,m){return o(),a("div",null,n)}const f=e(s,[["render",c]]);export{b as __pageData,f as default}; diff --git a/web/src/main/javascript/public/assets/app.CW7a5WQM.js b/web/src/main/javascript/public/assets/app.CW7a5WQM.js new file mode 100644 index 00000000..e09a4127 --- /dev/null +++ b/web/src/main/javascript/public/assets/app.CW7a5WQM.js @@ -0,0 +1 @@ +import{U as o,a4 as p,a5 as u,a6 as l,a7 as c,a8 as f,a9 as d,aa as m,ab as h,ac as g,ad as A,d as P,u as v,y,x as w,ae as C,af as R,ag as b,a2 as E}from"./chunks/framework.CyEiTwkJ.js";import{R as S}from"./chunks/theme.D8__5SLn.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{w(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),R(),b(),s.setup&&s.setup(),()=>E(s.Layout)}});async function _(){globalThis.__VITEPRESS__=!0;const e=D(),a=x();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function x(){return h(T)}function D(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&_().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{_ as createApp}; diff --git a/web/src/main/javascript/public/assets/chunks/framework.CyEiTwkJ.js b/web/src/main/javascript/public/assets/chunks/framework.CyEiTwkJ.js new file mode 100644 index 00000000..9aefb97f --- /dev/null +++ b/web/src/main/javascript/public/assets/chunks/framework.CyEiTwkJ.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.35 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function us(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const se={},mt=[],Te=()=>{},fo=()=>!1,Vt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ds=e=>e.startsWith("onUpdate:"),le=Object.assign,hs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},uo=Object.prototype.hasOwnProperty,z=(e,t)=>uo.call(e,t),V=Array.isArray,yt=e=>mn(e)==="[object Map]",Lr=e=>mn(e)==="[object Set]",k=e=>typeof e=="function",ie=e=>typeof e=="string",Je=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Ir=e=>(Z(e)||k(e))&&k(e.then)&&k(e.catch),Mr=Object.prototype.toString,mn=e=>Mr.call(e),ho=e=>mn(e).slice(8,-1),Pr=e=>mn(e)==="[object Object]",ps=e=>ie(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,_t=us(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),yn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},po=/-(\w)/g,Oe=yn(e=>e.replace(po,(t,n)=>n?n.toUpperCase():"")),go=/\B([A-Z])/g,Qe=yn(e=>e.replace(go,"-$1").toLowerCase()),_n=yn(e=>e.charAt(0).toUpperCase()+e.slice(1)),nn=yn(e=>e?`on${_n(e)}`:""),Ye=(e,t)=>!Object.is(e,t),Fn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},mo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},yo=e=>{const t=ie(e)?Number(e):NaN;return isNaN(t)?e:t};let js;const Fr=()=>js||(js=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function gs(e){if(V(e)){const t={};for(let n=0;n{if(n){const s=n.split(bo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ms(e){let t="";if(ie(e))t=e;else if(V(e))for(let n=0;n!!(e&&e.__v_isRef===!0),So=e=>ie(e)?e:e==null?"":V(e)||Z(e)&&(e.toString===Mr||!k(e.toString))?Hr(e)?So(e.value):JSON.stringify(e,jr,2):String(e),jr=(e,t)=>Hr(t)?jr(e,t.value):yt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[$n(s,i)+" =>"]=r,n),{})}:Lr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>$n(n))}:Je(t)?$n(t):Z(t)&&!V(t)&&!Pr(t)?String(t):t,$n=(e,t="")=>{var n;return Je(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.35 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class xo{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=we;try{return we=this,t()}finally{we=n}}}on(){we=this}off(){we=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),et()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=qe,n=ct;try{return qe=!0,ct=this,this._runnings++,Ds(this),this.fn()}finally{Vs(this),this._runnings--,ct=n,qe=t}}stop(){this.active&&(Ds(this),Vs(this),this.onStop&&this.onStop(),this.active=!1)}}function Ro(e){return e.value}function Ds(e){e._trackId++,e._depsLength=0}function Vs(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},cn=new WeakMap,at=Symbol(""),ns=Symbol("");function be(e,t,n){if(qe&&ct){let s=cn.get(e);s||cn.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=Kr(()=>s.delete(n))),Br(ct,r)}}function He(e,t,n,s,r,i){const o=cn.get(e);if(!o)return;let l=[];if(t==="clear")l=[...o.values()];else if(n==="length"&&V(e)){const c=Number(s);o.forEach((u,d)=>{(d==="length"||!Je(d)&&d>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":V(e)?ps(n)&&l.push(o.get("length")):(l.push(o.get(at)),yt(e)&&l.push(o.get(ns)));break;case"delete":V(e)||(l.push(o.get(at)),yt(e)&&l.push(o.get(ns)));break;case"set":yt(e)&&l.push(o.get(at));break}_s();for(const c of l)c&&kr(c,4);bs()}function Oo(e,t){const n=cn.get(e);return n&&n.get(t)}const Lo=us("__proto__,__v_isRef,__isVue"),Wr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Je)),Us=Io();function Io(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=J(this);for(let i=0,o=this.length;i{e[t]=function(...n){Ze(),_s();const s=J(this)[t].apply(this,n);return bs(),et(),s}}),e}function Mo(e){Je(e)||(e=String(e));const t=J(this);return be(t,"has",e),t.hasOwnProperty(e)}class qr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Wo:zr:i?Yr:Xr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=V(t);if(!r){if(o&&z(Us,n))return Reflect.get(Us,n,s);if(n==="hasOwnProperty")return Mo}const l=Reflect.get(t,n,s);return(Je(n)?Wr.has(n):Lo(n))||(r||be(t,"get",n),i)?l:pe(l)?o&&ps(n)?l:l.value:Z(l)?r?wn(l):vn(l):l}}class Gr extends qr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=dt(i);if(!Ct(s)&&!dt(s)&&(i=J(i),s=J(s)),!V(t)&&pe(i)&&!pe(s))return c?!1:(i.value=s,!0)}const o=V(t)&&ps(n)?Number(n)e,bn=e=>Reflect.getPrototypeOf(e);function Kt(e,t,n=!1,s=!1){e=e.__v_raw;const r=J(e),i=J(t);n||(Ye(t,i)&&be(r,"get",t),be(r,"get",i));const{has:o}=bn(r),l=s?vs:n?Cs:Ft;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function Wt(e,t=!1){const n=this.__v_raw,s=J(n),r=J(e);return t||(Ye(e,r)&&be(s,"has",e),be(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function qt(e,t=!1){return e=e.__v_raw,!t&&be(J(e),"iterate",at),Reflect.get(e,"size",e)}function Bs(e,t=!1){!t&&!Ct(e)&&!dt(e)&&(e=J(e));const n=J(this);return bn(n).has.call(n,e)||(n.add(e),He(n,"add",e,e)),this}function ks(e,t,n=!1){!n&&!Ct(t)&&!dt(t)&&(t=J(t));const s=J(this),{has:r,get:i}=bn(s);let o=r.call(s,e);o||(e=J(e),o=r.call(s,e));const l=i.call(s,e);return s.set(e,t),o?Ye(t,l)&&He(s,"set",e,t):He(s,"add",e,t),this}function Ks(e){const t=J(this),{has:n,get:s}=bn(t);let r=n.call(t,e);r||(e=J(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&He(t,"delete",e,void 0),i}function Ws(){const e=J(this),t=e.size!==0,n=e.clear();return t&&He(e,"clear",void 0,void 0),n}function Gt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=J(o),c=t?vs:e?Cs:Ft;return!e&&be(l,"iterate",at),o.forEach((u,d)=>s.call(r,c(u),c(d),i))}}function Xt(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=yt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),d=n?vs:t?Cs:Ft;return!t&&be(i,"iterate",c?ns:at),{next(){const{value:h,done:b}=u.next();return b?{value:h,done:b}:{value:l?[d(h[0]),d(h[1])]:d(h),done:b}},[Symbol.iterator](){return this}}}}function Ve(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Ho(){const e={get(i){return Kt(this,i)},get size(){return qt(this)},has:Wt,add:Bs,set:ks,delete:Ks,clear:Ws,forEach:Gt(!1,!1)},t={get(i){return Kt(this,i,!1,!0)},get size(){return qt(this)},has:Wt,add(i){return Bs.call(this,i,!0)},set(i,o){return ks.call(this,i,o,!0)},delete:Ks,clear:Ws,forEach:Gt(!1,!0)},n={get(i){return Kt(this,i,!0)},get size(){return qt(this,!0)},has(i){return Wt.call(this,i,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:Gt(!0,!1)},s={get(i){return Kt(this,i,!0,!0)},get size(){return qt(this,!0)},has(i){return Wt.call(this,i,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:Gt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Xt(i,!1,!1),n[i]=Xt(i,!0,!1),t[i]=Xt(i,!1,!0),s[i]=Xt(i,!0,!0)}),[e,n,t,s]}const[jo,Do,Vo,Uo]=Ho();function ws(e,t){const n=t?e?Uo:Vo:e?Do:jo;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(z(n,r)&&r in s?n:s,r,i)}const Bo={get:ws(!1,!1)},ko={get:ws(!1,!0)},Ko={get:ws(!0,!1)};const Xr=new WeakMap,Yr=new WeakMap,zr=new WeakMap,Wo=new WeakMap;function qo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Go(e){return e.__v_skip||!Object.isExtensible(e)?0:qo(ho(e))}function vn(e){return dt(e)?e:Es(e,!1,No,Bo,Xr)}function Xo(e){return Es(e,!1,$o,ko,Yr)}function wn(e){return Es(e,!0,Fo,Ko,zr)}function Es(e,t,n,s,r){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Go(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function bt(e){return dt(e)?bt(e.__v_raw):!!(e&&e.__v_isReactive)}function dt(e){return!!(e&&e.__v_isReadonly)}function Ct(e){return!!(e&&e.__v_isShallow)}function Jr(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function sn(e){return Object.isExtensible(e)&&Nr(e,"__v_skip",!0),e}const Ft=e=>Z(e)?vn(e):e,Cs=e=>Z(e)?wn(e):e;class Qr{constructor(t,n,s,r){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new ys(()=>t(this._value),()=>Lt(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Ye(t._value,t._value=t.effect.run())&&Lt(t,4),Ss(t),t.effect._dirtyLevel>=2&&Lt(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function Yo(e,t,n=!1){let s,r;const i=k(e);return i?(s=e,r=Te):(s=e.get,r=e.set),new Qr(s,r,i||!r,n)}function Ss(e){var t;qe&&ct&&(e=J(e),Br(ct,(t=e.dep)!=null?t:e.dep=Kr(()=>e.dep=void 0,e instanceof Qr?e:void 0)))}function Lt(e,t=4,n,s){e=J(e);const r=e.dep;r&&kr(r,t)}function pe(e){return!!(e&&e.__v_isRef===!0)}function ae(e){return ei(e,!1)}function Zr(e){return ei(e,!0)}function ei(e,t){return pe(e)?e:new zo(e,t)}class zo{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Ft(t)}get value(){return Ss(this),this._value}set value(t){const n=this.__v_isShallow||Ct(t)||dt(t);t=n?t:J(t),Ye(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:Ft(t),Lt(this,4))}}function ti(e){return pe(e)?e.value:e}const Jo={get:(e,t,n)=>ti(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return pe(r)&&!pe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ni(e){return bt(e)?e:new Proxy(e,Jo)}class Qo{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>Ss(this),()=>Lt(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Zo(e){return new Qo(e)}class el{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Oo(J(this._object),this._key)}}class tl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function nl(e,t,n){return pe(e)?e:k(e)?new tl(e):Z(e)&&arguments.length>1?sl(e,t,n):ae(e)}function sl(e,t,n){const s=e[t];return pe(s)?s:new el(e,t,n)}/** +* @vue/runtime-core v3.4.35 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ge(e,t,n,s){try{return s?e(...s):e()}catch(r){En(r,t,n)}}function Ae(e,t,n,s){if(k(e)){const r=Ge(e,t,n,s);return r&&Ir(r)&&r.catch(i=>{En(i,t,n)}),r}if(V(e)){const r=[];for(let i=0;i>>1,r=de[s],i=Ht(r);iPe&&de.splice(t,1)}function ll(e){V(e)?vt.push(...e):(!ke||!ke.includes(e,e.allowRecurse?it+1:it))&&vt.push(e),ri()}function qs(e,t,n=$t?Pe+1:0){for(;nHt(n)-Ht(s));if(vt.length=0,ke){ke.push(...t);return}for(ke=t,it=0;ite.id==null?1/0:e.id,cl=(e,t)=>{const n=Ht(e)-Ht(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ii(e){ss=!1,$t=!0,de.sort(cl);try{for(Pe=0;Pe{s._d&&sr(-1);const i=fn(t);let o;try{o=e(...r)}finally{fn(i),s._d&&sr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Me(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o{e.isMounted=!0}),di(()=>{e.isUnmounting=!0}),e}const Ce=[Function,Array],oi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ce,onEnter:Ce,onAfterEnter:Ce,onEnterCancelled:Ce,onBeforeLeave:Ce,onLeave:Ce,onAfterLeave:Ce,onLeaveCancelled:Ce,onBeforeAppear:Ce,onAppear:Ce,onAfterAppear:Ce,onAppearCancelled:Ce},li=e=>{const t=e.subTree;return t.component?li(t.component):t},ul={name:"BaseTransition",props:oi,setup(e,{slots:t}){const n=Ln(),s=fl();return()=>{const r=t.default&&ai(t.default(),!0);if(!r||!r.length)return;let i=r[0];if(r.length>1){for(const b of r)if(b.type!==me){i=b;break}}const o=J(e),{mode:l}=o;if(s.isLeaving)return Hn(i);const c=Gs(i);if(!c)return Hn(i);let u=rs(c,o,s,n,b=>u=b);un(c,u);const d=n.subTree,h=d&&Gs(d);if(h&&h.type!==me&&!lt(c,h)&&li(n).type!==me){const b=rs(h,o,s,n);if(un(h,b),l==="out-in"&&c.type!==me)return s.isLeaving=!0,b.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Hn(i);l==="in-out"&&c.type!==me&&(b.delayLeave=(T,P,M)=>{const K=ci(s,h);K[String(h.key)]=h,T[Ke]=()=>{P(),T[Ke]=void 0,delete u.delayedLeave},u.delayedLeave=M})}return i}}},dl=ul;function ci(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function rs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:d,onEnterCancelled:h,onBeforeLeave:b,onLeave:T,onAfterLeave:P,onLeaveCancelled:M,onBeforeAppear:K,onAppear:q,onAfterAppear:G,onAppearCancelled:p}=t,m=String(e.key),I=ci(n,e),R=(L,_)=>{L&&Ae(L,s,9,_)},U=(L,_)=>{const N=_[1];R(L,_),V(L)?L.every(C=>C.length<=1)&&N():L.length<=1&&N()},D={mode:o,persisted:l,beforeEnter(L){let _=c;if(!n.isMounted)if(i)_=K||c;else return;L[Ke]&&L[Ke](!0);const N=I[m];N&<(e,N)&&N.el[Ke]&&N.el[Ke](),R(_,[L])},enter(L){let _=u,N=d,C=h;if(!n.isMounted)if(i)_=q||u,N=G||d,C=p||h;else return;let W=!1;const ee=L[Yt]=ne=>{W||(W=!0,ne?R(C,[L]):R(N,[L]),D.delayedLeave&&D.delayedLeave(),L[Yt]=void 0)};_?U(_,[L,ee]):ee()},leave(L,_){const N=String(e.key);if(L[Yt]&&L[Yt](!0),n.isUnmounting)return _();R(b,[L]);let C=!1;const W=L[Ke]=ee=>{C||(C=!0,_(),ee?R(M,[L]):R(P,[L]),L[Ke]=void 0,I[N]===e&&delete I[N])};I[N]=e,T?U(T,[L,W]):W()},clone(L){const _=rs(L,t,n,s,r);return r&&r(_),_}};return D}function Hn(e){if(xn(e))return e=ze(e),e.children=null,e}function Gs(e){if(!xn(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&k(n.default))return n.default()}}function un(e,t){e.shapeFlag&6&&e.component?un(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ai(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,xn=e=>e.type.__isKeepAlive;function hl(e,t){ui(e,"a",t)}function pl(e,t){ui(e,"da",t)}function ui(e,t,n=ce){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Tn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)xn(r.parent.vnode)&&gl(s,t,n,r),r=r.parent}}function gl(e,t,n,s){const r=Tn(t,e,s,!0);An(()=>{hs(s[t],r)},n)}function Tn(e,t,n=ce,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ze();const l=Ut(n),c=Ae(t,n,e,o);return l(),et(),c});return s?r.unshift(i):r.push(i),i}}const De=e=>(t,n=ce)=>{(!In||e==="sp")&&Tn(e,(...s)=>t(...s),n)},ml=De("bm"),xt=De("m"),yl=De("bu"),_l=De("u"),di=De("bum"),An=De("um"),bl=De("sp"),vl=De("rtg"),wl=De("rtc");function El(e,t=ce){Tn("ec",e,t)}const hi="components";function Wa(e,t){return gi(hi,e,!0,t)||e}const pi=Symbol.for("v-ndc");function qa(e){return ie(e)?gi(hi,e,!1)||e:e||pi}function gi(e,t,n=!0,s=!1){const r=he||ce;if(r){const i=r.type;{const l=hc(i,!1);if(l&&(l===t||l===Oe(t)||l===_n(Oe(t))))return i}const o=Xs(r[e]||i[e],t)||Xs(r.appContext[e],t);return!o&&s?i:o}}function Xs(e,t){return e&&(e[t]||e[Oe(t)]||e[_n(Oe(t))])}function Ga(e,t,n,s){let r;const i=n;if(V(e)||ie(e)){r=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;lpn(t)?!(t.type===me||t.type===_e&&!mi(t.children)):!0)?e:null}function Ya(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:nn(s)]=e[s];return n}const is=e=>e?Ui(e)?Ls(e):is(e.parent):null,It=le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>is(e.parent),$root:e=>is(e.root),$emit:e=>e.emit,$options:e=>As(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Ts(e.update)}),$nextTick:e=>e.n||(e.n=Cn.bind(e.proxy)),$watch:e=>Yl.bind(e)}),jn=(e,t)=>e!==se&&!e.__isScriptSetup&&z(e,t),Cl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const T=o[t];if(T!==void 0)switch(T){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(jn(s,t))return o[t]=1,s[t];if(r!==se&&z(r,t))return o[t]=2,r[t];if((u=e.propsOptions[0])&&z(u,t))return o[t]=3,i[t];if(n!==se&&z(n,t))return o[t]=4,n[t];os&&(o[t]=0)}}const d=It[t];let h,b;if(d)return t==="$attrs"&&be(e.attrs,"get",""),d(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==se&&z(n,t))return o[t]=4,n[t];if(b=c.config.globalProperties,z(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return jn(r,t)?(r[t]=n,!0):s!==se&&z(s,t)?(s[t]=n,!0):z(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==se&&z(e,o)||jn(t,o)||(l=i[0])&&z(l,o)||z(s,o)||z(It,o)||z(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function za(){return Sl().slots}function Sl(){const e=Ln();return e.setupContext||(e.setupContext=ki(e))}function Ys(e){return V(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let os=!0;function xl(e){const t=As(e),n=e.proxy,s=e.ctx;os=!1,t.beforeCreate&&zs(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:d,beforeMount:h,mounted:b,beforeUpdate:T,updated:P,activated:M,deactivated:K,beforeDestroy:q,beforeUnmount:G,destroyed:p,unmounted:m,render:I,renderTracked:R,renderTriggered:U,errorCaptured:D,serverPrefetch:L,expose:_,inheritAttrs:N,components:C,directives:W,filters:ee}=t;if(u&&Tl(u,s,null),o)for(const Y in o){const $=o[Y];k($)&&(s[Y]=$.bind(n))}if(r){const Y=r.call(n,n);Z(Y)&&(e.data=vn(Y))}if(os=!0,i)for(const Y in i){const $=i[Y],Fe=k($)?$.bind(n,n):k($.get)?$.get.bind(n,n):Te,Bt=!k($)&&k($.set)?$.set.bind(n):Te,tt=re({get:Fe,set:Bt});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>tt.value,set:Le=>tt.value=Le})}if(l)for(const Y in l)yi(l[Y],s,n,Y);if(c){const Y=k(c)?c.call(n):c;Reflect.ownKeys(Y).forEach($=>{Ml($,Y[$])})}d&&zs(d,e,"c");function j(Y,$){V($)?$.forEach(Fe=>Y(Fe.bind(n))):$&&Y($.bind(n))}if(j(ml,h),j(xt,b),j(yl,T),j(_l,P),j(hl,M),j(pl,K),j(El,D),j(wl,R),j(vl,U),j(di,G),j(An,m),j(bl,L),V(_))if(_.length){const Y=e.exposed||(e.exposed={});_.forEach($=>{Object.defineProperty(Y,$,{get:()=>n[$],set:Fe=>n[$]=Fe})})}else e.exposed||(e.exposed={});I&&e.render===Te&&(e.render=I),N!=null&&(e.inheritAttrs=N),C&&(e.components=C),W&&(e.directives=W)}function Tl(e,t,n=Te){V(e)&&(e=ls(e));for(const s in e){const r=e[s];let i;Z(r)?"default"in r?i=Et(r.from||s,r.default,!0):i=Et(r.from||s):i=Et(r),pe(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function zs(e,t,n){Ae(V(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function yi(e,t,n,s){const r=s.includes(".")?Mi(n,s):()=>n[s];if(ie(e)){const i=t[e];k(i)&&Ne(r,i)}else if(k(e))Ne(r,e.bind(n));else if(Z(e))if(V(e))e.forEach(i=>yi(i,t,n,s));else{const i=k(e.handler)?e.handler.bind(n):t[e.handler];k(i)&&Ne(r,i,e)}}function As(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>dn(c,u,o,!0)),dn(c,t,o)),Z(t)&&i.set(t,c),c}function dn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&dn(e,i,n,!0),r&&r.forEach(o=>dn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Al[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Al={data:Js,props:Qs,emits:Qs,methods:Ot,computed:Ot,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:Ot,directives:Ot,watch:Ol,provide:Js,inject:Rl};function Js(e,t){return t?e?function(){return le(k(e)?e.call(this,this):e,k(t)?t.call(this,this):t)}:t:e}function Rl(e,t){return Ot(ls(e),ls(t))}function ls(e){if(V(e)){const t={};for(let n=0;n1)return n&&k(t)?t.call(s&&s.proxy):t}}const bi={},vi=()=>Object.create(bi),wi=e=>Object.getPrototypeOf(e)===bi;function Pl(e,t,n,s=!1){const r={},i=vi();e.propsDefaults=Object.create(null),Ei(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Xo(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Nl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const d=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[b,T]=Ci(h,t,!0);le(o,b),T&&l.push(...T)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!c)return Z(e)&&s.set(e,mt),mt;if(V(i))for(let d=0;de[0]==="_"||e==="$stable",Rs=e=>V(e)?e.map(xe):[xe(e)],$l=(e,t,n)=>{if(t._n)return t;const s=al((...r)=>Rs(t(...r)),n);return s._c=!1,s},xi=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Si(r))continue;const i=e[r];if(k(i))t[r]=$l(r,i,s);else if(i!=null){const o=Rs(i);t[r]=()=>o}}},Ti=(e,t)=>{const n=Rs(t);e.slots.default=()=>n},Ai=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Hl=(e,t,n)=>{const s=e.slots=vi();if(e.vnode.shapeFlag&32){const r=t._;r?(Ai(s,t,n),n&&Nr(s,"_",r,!0)):xi(t,s)}else t&&Ti(e,t)},jl=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=se;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:Ai(r,t,n):(i=!t.$stable,xi(t,r)),o=t}else t&&(Ti(e,t),o={default:1});if(i)for(const l in r)!Si(l)&&o[l]==null&&delete r[l]};function hn(e,t,n,s,r=!1){if(V(e)){e.forEach((b,T)=>hn(b,t&&(V(t)?t[T]:t),n,s,r));return}if(wt(s)&&!r)return;const i=s.shapeFlag&4?Ls(s.component):s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,d=l.refs===se?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(ie(u)?(d[u]=null,z(h,u)&&(h[u]=null)):pe(u)&&(u.value=null)),k(c))Ge(c,l,12,[o,d]);else{const b=ie(c),T=pe(c);if(b||T){const P=()=>{if(e.f){const M=b?z(h,c)?h[c]:d[c]:c.value;r?V(M)&&hs(M,i):V(M)?M.includes(i)||M.push(i):b?(d[c]=[i],z(h,c)&&(h[c]=d[c])):(c.value=[i],e.k&&(d[e.k]=c.value))}else b?(d[c]=o,z(h,c)&&(h[c]=o)):T&&(c.value=o,e.k&&(d[e.k]=o))};o?(P.id=-1,ye(P,n)):P()}}}const Dl=Symbol("_vte"),Vl=e=>e.__isTeleport;let er=!1;const gt=()=>{er||(console.error("Hydration completed but contains mismatches."),er=!0)},Ul=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Bl=e=>e.namespaceURI.includes("MathML"),zt=e=>{if(Ul(e))return"svg";if(Bl(e))return"mathml"},Jt=e=>e.nodeType===8;function kl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,d=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),an(),m._vnode=p;return}h(m.firstChild,p,null,null,null),an(),m._vnode=p},h=(p,m,I,R,U,D=!1)=>{D=D||!!m.dynamicChildren;const L=Jt(p)&&p.data==="[",_=()=>M(p,m,I,R,U,L),{type:N,ref:C,shapeFlag:W,patchFlag:ee}=m;let ne=p.nodeType;m.el=p,ee===-2&&(D=!1,m.dynamicChildren=null);let j=null;switch(N){case ft:ne!==3?m.children===""?(c(m.el=r(""),o(p),p),j=p):j=_():(p.data!==m.children&&(gt(),p.data=m.children),j=i(p));break;case me:G(p)?(j=i(p),q(m.el=p.content.firstChild,p,I)):ne!==8||L?j=_():j=i(p);break;case Pt:if(L&&(p=i(p),ne=p.nodeType),ne===1||ne===3){j=p;const Y=!m.children.length;for(let $=0;${D=D||!!m.dynamicChildren;const{type:L,props:_,patchFlag:N,shapeFlag:C,dirs:W,transition:ee}=m,ne=L==="input"||L==="option";if(ne||N!==-1){W&&Me(m,null,I,"created");let j=!1;if(G(p)){j=Ri(R,ee)&&I&&I.vnode.props&&I.vnode.props.appear;const $=p.content.firstChild;j&&ee.beforeEnter($),q($,p,I),m.el=p=$}if(C&16&&!(_&&(_.innerHTML||_.textContent))){let $=T(p.firstChild,m,p,I,R,U,D);for(;$;){gt();const Fe=$;$=$.nextSibling,l(Fe)}}else C&8&&p.textContent!==m.children&&(gt(),p.textContent=m.children);if(_){if(ne||!D||N&48)for(const $ in _)(ne&&($.endsWith("value")||$==="indeterminate")||Vt($)&&!_t($)||$[0]===".")&&s(p,$,null,_[$],void 0,I);else if(_.onClick)s(p,"onClick",null,_.onClick,void 0,I);else if(N&4&&bt(_.style))for(const $ in _.style)_.style[$]}let Y;(Y=_&&_.onVnodeBeforeMount)&&Se(Y,I,m),W&&Me(m,null,I,"beforeMount"),((Y=_&&_.onVnodeMounted)||W||j)&&Ni(()=>{Y&&Se(Y,I,m),j&&ee.enter(p),W&&Me(m,null,I,"mounted")},R)}return p.nextSibling},T=(p,m,I,R,U,D,L)=>{L=L||!!m.dynamicChildren;const _=m.children,N=_.length;for(let C=0;C{const{slotScopeIds:L}=m;L&&(U=U?U.concat(L):L);const _=o(p),N=T(i(p),m,_,I,R,U,D);return N&&Jt(N)&&N.data==="]"?i(m.anchor=N):(gt(),c(m.anchor=u("]"),_,N),N)},M=(p,m,I,R,U,D)=>{if(gt(),m.el=null,D){const N=K(p);for(;;){const C=i(p);if(C&&C!==N)l(C);else break}}const L=i(p),_=o(p);return l(p),n(null,m,_,L,I,R,zt(_),U),L},K=(p,m="[",I="]")=>{let R=0;for(;p;)if(p=i(p),p&&Jt(p)&&(p.data===m&&R++,p.data===I)){if(R===0)return i(p);R--}return p},q=(p,m,I)=>{const R=m.parentNode;R&&R.replaceChild(p,m);let U=I;for(;U;)U.vnode.el===m&&(U.vnode.el=U.subTree.el=p),U=U.parent},G=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[d,h]}const ye=Ni;function Kl(e){return Wl(e,kl)}function Wl(e,t){const n=Fr();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:d,parentNode:h,nextSibling:b,setScopeId:T=Te,insertStaticContent:P}=e,M=(a,f,g,w=null,y=null,E=null,A=void 0,S=null,x=!!f.dynamicChildren)=>{if(a===f)return;a&&!lt(a,f)&&(w=kt(a),Le(a,y,E,!0),a=null),f.patchFlag===-2&&(x=!1,f.dynamicChildren=null);const{type:v,ref:O,shapeFlag:H}=f;switch(v){case ft:K(a,f,g,w);break;case me:q(a,f,g,w);break;case Pt:a==null&&G(f,g,w,A);break;case _e:C(a,f,g,w,y,E,A,S,x);break;default:H&1?I(a,f,g,w,y,E,A,S,x):H&6?W(a,f,g,w,y,E,A,S,x):(H&64||H&128)&&v.process(a,f,g,w,y,E,A,S,x,ht)}O!=null&&y&&hn(O,a&&a.ref,E,f||a,!f)},K=(a,f,g,w)=>{if(a==null)s(f.el=l(f.children),g,w);else{const y=f.el=a.el;f.children!==a.children&&u(y,f.children)}},q=(a,f,g,w)=>{a==null?s(f.el=c(f.children||""),g,w):f.el=a.el},G=(a,f,g,w)=>{[a.el,a.anchor]=P(a.children,f,g,w,a.el,a.anchor)},p=({el:a,anchor:f},g,w)=>{let y;for(;a&&a!==f;)y=b(a),s(a,g,w),a=y;s(f,g,w)},m=({el:a,anchor:f})=>{let g;for(;a&&a!==f;)g=b(a),r(a),a=g;r(f)},I=(a,f,g,w,y,E,A,S,x)=>{f.type==="svg"?A="svg":f.type==="math"&&(A="mathml"),a==null?R(f,g,w,y,E,A,S,x):L(a,f,y,E,A,S,x)},R=(a,f,g,w,y,E,A,S)=>{let x,v;const{props:O,shapeFlag:H,transition:F,dirs:B}=a;if(x=a.el=o(a.type,E,O&&O.is,O),H&8?d(x,a.children):H&16&&D(a.children,x,null,w,y,Dn(a,E),A,S),B&&Me(a,null,w,"created"),U(x,a,a.scopeId,A,w),O){for(const te in O)te!=="value"&&!_t(te)&&i(x,te,null,O[te],E,w);"value"in O&&i(x,"value",null,O.value,E),(v=O.onVnodeBeforeMount)&&Se(v,w,a)}B&&Me(a,null,w,"beforeMount");const X=Ri(y,F);X&&F.beforeEnter(x),s(x,f,g),((v=O&&O.onVnodeMounted)||X||B)&&ye(()=>{v&&Se(v,w,a),X&&F.enter(x),B&&Me(a,null,w,"mounted")},y)},U=(a,f,g,w,y)=>{if(g&&T(a,g),w)for(let E=0;E{for(let v=x;v{const S=f.el=a.el;let{patchFlag:x,dynamicChildren:v,dirs:O}=f;x|=a.patchFlag&16;const H=a.props||se,F=f.props||se;let B;if(g&&nt(g,!1),(B=F.onVnodeBeforeUpdate)&&Se(B,g,f,a),O&&Me(f,a,g,"beforeUpdate"),g&&nt(g,!0),(H.innerHTML&&F.innerHTML==null||H.textContent&&F.textContent==null)&&d(S,""),v?_(a.dynamicChildren,v,S,g,w,Dn(f,y),E):A||$(a,f,S,null,g,w,Dn(f,y),E,!1),x>0){if(x&16)N(S,H,F,g,y);else if(x&2&&H.class!==F.class&&i(S,"class",null,F.class,y),x&4&&i(S,"style",H.style,F.style,y),x&8){const X=f.dynamicProps;for(let te=0;te{B&&Se(B,g,f,a),O&&Me(f,a,g,"updated")},w)},_=(a,f,g,w,y,E,A)=>{for(let S=0;S{if(f!==g){if(f!==se)for(const E in f)!_t(E)&&!(E in g)&&i(a,E,f[E],null,y,w);for(const E in g){if(_t(E))continue;const A=g[E],S=f[E];A!==S&&E!=="value"&&i(a,E,S,A,y,w)}"value"in g&&i(a,"value",f.value,g.value,y)}},C=(a,f,g,w,y,E,A,S,x)=>{const v=f.el=a?a.el:l(""),O=f.anchor=a?a.anchor:l("");let{patchFlag:H,dynamicChildren:F,slotScopeIds:B}=f;B&&(S=S?S.concat(B):B),a==null?(s(v,g,w),s(O,g,w),D(f.children||[],g,O,y,E,A,S,x)):H>0&&H&64&&F&&a.dynamicChildren?(_(a.dynamicChildren,F,g,y,E,A,S),(f.key!=null||y&&f===y.subTree)&&Oi(a,f,!0)):$(a,f,g,O,y,E,A,S,x)},W=(a,f,g,w,y,E,A,S,x)=>{f.slotScopeIds=S,a==null?f.shapeFlag&512?y.ctx.activate(f,g,w,A,x):ee(f,g,w,y,E,A,x):ne(a,f,x)},ee=(a,f,g,w,y,E,A)=>{const S=a.component=ac(a,w,y);if(xn(a)&&(S.ctx.renderer=ht),fc(S,!1,A),S.asyncDep){if(y&&y.registerDep(S,j,A),!a.el){const x=S.subTree=fe(me);q(null,x,f,g)}}else j(S,a,f,g,y,E,A)},ne=(a,f,g)=>{const w=f.component=a.component;if(ec(a,f,g))if(w.asyncDep&&!w.asyncResolved){Y(w,f,g);return}else w.next=f,ol(w.update),w.effect.dirty=!0,w.update();else f.el=a.el,w.vnode=f},j=(a,f,g,w,y,E,A)=>{const S=()=>{if(a.isMounted){let{next:O,bu:H,u:F,parent:B,vnode:X}=a;{const pt=Li(a);if(pt){O&&(O.el=X.el,Y(a,O,A)),pt.asyncDep.then(()=>{a.isUnmounted||S()});return}}let te=O,Q;nt(a,!1),O?(O.el=X.el,Y(a,O,A)):O=X,H&&Fn(H),(Q=O.props&&O.props.onVnodeBeforeUpdate)&&Se(Q,B,O,X),nt(a,!0);const oe=Vn(a),Re=a.subTree;a.subTree=oe,M(Re,oe,h(Re.el),kt(Re),a,y,E),O.el=oe.el,te===null&&tc(a,oe.el),F&&ye(F,y),(Q=O.props&&O.props.onVnodeUpdated)&&ye(()=>Se(Q,B,O,X),y)}else{let O;const{el:H,props:F}=f,{bm:B,m:X,parent:te}=a,Q=wt(f);if(nt(a,!1),B&&Fn(B),!Q&&(O=F&&F.onVnodeBeforeMount)&&Se(O,te,f),nt(a,!0),H&&Nn){const oe=()=>{a.subTree=Vn(a),Nn(H,a.subTree,a,y,null)};Q?f.type.__asyncLoader().then(()=>!a.isUnmounted&&oe()):oe()}else{const oe=a.subTree=Vn(a);M(null,oe,g,w,a,y,E),f.el=oe.el}if(X&&ye(X,y),!Q&&(O=F&&F.onVnodeMounted)){const oe=f;ye(()=>Se(O,te,oe),y)}(f.shapeFlag&256||te&&wt(te.vnode)&&te.vnode.shapeFlag&256)&&a.a&&ye(a.a,y),a.isMounted=!0,f=g=w=null}},x=a.effect=new ys(S,Te,()=>Ts(v),a.scope),v=a.update=()=>{x.dirty&&x.run()};v.i=a,v.id=a.uid,nt(a,!0),v()},Y=(a,f,g)=>{f.component=a;const w=a.vnode.props;a.vnode=f,a.next=null,Nl(a,f.props,w,g),jl(a,f.children,g),Ze(),qs(a),et()},$=(a,f,g,w,y,E,A,S,x=!1)=>{const v=a&&a.children,O=a?a.shapeFlag:0,H=f.children,{patchFlag:F,shapeFlag:B}=f;if(F>0){if(F&128){Bt(v,H,g,w,y,E,A,S,x);return}else if(F&256){Fe(v,H,g,w,y,E,A,S,x);return}}B&8?(O&16&&Tt(v,y,E),H!==v&&d(g,H)):O&16?B&16?Bt(v,H,g,w,y,E,A,S,x):Tt(v,y,E,!0):(O&8&&d(g,""),B&16&&D(H,g,w,y,E,A,S,x))},Fe=(a,f,g,w,y,E,A,S,x)=>{a=a||mt,f=f||mt;const v=a.length,O=f.length,H=Math.min(v,O);let F;for(F=0;FO?Tt(a,y,E,!0,!1,H):D(f,g,w,y,E,A,S,x,H)},Bt=(a,f,g,w,y,E,A,S,x)=>{let v=0;const O=f.length;let H=a.length-1,F=O-1;for(;v<=H&&v<=F;){const B=a[v],X=f[v]=x?We(f[v]):xe(f[v]);if(lt(B,X))M(B,X,g,null,y,E,A,S,x);else break;v++}for(;v<=H&&v<=F;){const B=a[H],X=f[F]=x?We(f[F]):xe(f[F]);if(lt(B,X))M(B,X,g,null,y,E,A,S,x);else break;H--,F--}if(v>H){if(v<=F){const B=F+1,X=BF)for(;v<=H;)Le(a[v],y,E,!0),v++;else{const B=v,X=v,te=new Map;for(v=X;v<=F;v++){const ve=f[v]=x?We(f[v]):xe(f[v]);ve.key!=null&&te.set(ve.key,v)}let Q,oe=0;const Re=F-X+1;let pt=!1,Fs=0;const At=new Array(Re);for(v=0;v=Re){Le(ve,y,E,!0);continue}let Ie;if(ve.key!=null)Ie=te.get(ve.key);else for(Q=X;Q<=F;Q++)if(At[Q-X]===0&<(ve,f[Q])){Ie=Q;break}Ie===void 0?Le(ve,y,E,!0):(At[Ie-X]=v+1,Ie>=Fs?Fs=Ie:pt=!0,M(ve,f[Ie],g,null,y,E,A,S,x),oe++)}const $s=pt?ql(At):mt;for(Q=$s.length-1,v=Re-1;v>=0;v--){const ve=X+v,Ie=f[ve],Hs=ve+1{const{el:E,type:A,transition:S,children:x,shapeFlag:v}=a;if(v&6){tt(a.component.subTree,f,g,w);return}if(v&128){a.suspense.move(f,g,w);return}if(v&64){A.move(a,f,g,ht);return}if(A===_e){s(E,f,g);for(let H=0;HS.enter(E),y);else{const{leave:H,delayLeave:F,afterLeave:B}=S,X=()=>s(E,f,g),te=()=>{H(E,()=>{X(),B&&B()})};F?F(E,X,te):te()}else s(E,f,g)},Le=(a,f,g,w=!1,y=!1)=>{const{type:E,props:A,ref:S,children:x,dynamicChildren:v,shapeFlag:O,patchFlag:H,dirs:F,cacheIndex:B}=a;if(H===-2&&(y=!1),S!=null&&hn(S,null,g,a,!0),B!=null&&(f.renderCache[B]=void 0),O&256){f.ctx.deactivate(a);return}const X=O&1&&F,te=!wt(a);let Q;if(te&&(Q=A&&A.onVnodeBeforeUnmount)&&Se(Q,f,a),O&6)ao(a.component,g,w);else{if(O&128){a.suspense.unmount(g,w);return}X&&Me(a,null,f,"beforeUnmount"),O&64?a.type.remove(a,f,g,ht,w):v&&!v.hasOnce&&(E!==_e||H>0&&H&64)?Tt(v,f,g,!1,!0):(E===_e&&H&384||!y&&O&16)&&Tt(x,f,g),w&&Ps(a)}(te&&(Q=A&&A.onVnodeUnmounted)||X)&&ye(()=>{Q&&Se(Q,f,a),X&&Me(a,null,f,"unmounted")},g)},Ps=a=>{const{type:f,el:g,anchor:w,transition:y}=a;if(f===_e){co(g,w);return}if(f===Pt){m(a);return}const E=()=>{r(g),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(a.shapeFlag&1&&y&&!y.persisted){const{leave:A,delayLeave:S}=y,x=()=>A(g,E);S?S(a.el,E,x):x()}else E()},co=(a,f)=>{let g;for(;a!==f;)g=b(a),r(a),a=g;r(f)},ao=(a,f,g)=>{const{bum:w,scope:y,update:E,subTree:A,um:S,m:x,a:v}=a;tr(x),tr(v),w&&Fn(w),y.stop(),E&&(E.active=!1,Le(A,a,f,g)),S&&ye(S,f),ye(()=>{a.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},Tt=(a,f,g,w=!1,y=!1,E=0)=>{for(let A=E;A{if(a.shapeFlag&6)return kt(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const f=b(a.anchor||a.el),g=f&&f[Dl];return g?b(g):f};let Mn=!1;const Ns=(a,f,g)=>{a==null?f._vnode&&Le(f._vnode,null,null,!0):M(f._vnode||null,a,f,null,null,null,g),Mn||(Mn=!0,qs(),an(),Mn=!1),f._vnode=a},ht={p:M,um:Le,m:tt,r:Ps,mt:ee,mc:D,pc:$,pbc:_,n:kt,o:e};let Pn,Nn;return t&&([Pn,Nn]=t(ht)),{render:Ns,hydrate:Pn,createApp:Il(Ns,Pn)}}function Dn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function nt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Ri(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Oi(e,t,n=!1){const s=e.children,r=t.children;if(V(s)&&V(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Li(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Li(t)}function tr(e){if(e)for(let t=0;tEt(Gl);function Ii(e,t){return Rn(e,null,t)}function Ja(e,t){return Rn(e,null,{flush:"post"})}const Qt={};function Ne(e,t,n){return Rn(e,t,n)}function Rn(e,t,{immediate:n,deep:s,flush:r,once:i,onTrack:o,onTrigger:l}=se){if(t&&i){const R=t;t=(...U)=>{R(...U),I()}}const c=ce,u=R=>s===!0?R:ot(R,s===!1?1:void 0);let d,h=!1,b=!1;if(pe(e)?(d=()=>e.value,h=Ct(e)):bt(e)?(d=()=>u(e),h=!0):V(e)?(b=!0,h=e.some(R=>bt(R)||Ct(R)),d=()=>e.map(R=>{if(pe(R))return R.value;if(bt(R))return u(R);if(k(R))return Ge(R,c,2)})):k(e)?t?d=()=>Ge(e,c,2):d=()=>(T&&T(),Ae(e,c,3,[P])):d=Te,t&&s){const R=d;d=()=>ot(R())}let T,P=R=>{T=p.onStop=()=>{Ge(R,c,4),T=p.onStop=void 0}},M;if(In)if(P=Te,t?n&&Ae(t,c,3,[d(),b?[]:void 0,P]):d(),r==="sync"){const R=Xl();M=R.__watcherHandles||(R.__watcherHandles=[])}else return Te;let K=b?new Array(e.length).fill(Qt):Qt;const q=()=>{if(!(!p.active||!p.dirty))if(t){const R=p.run();(s||h||(b?R.some((U,D)=>Ye(U,K[D])):Ye(R,K)))&&(T&&T(),Ae(t,c,3,[R,K===Qt?void 0:b&&K[0]===Qt?[]:K,P]),K=R)}else p.run()};q.allowRecurse=!!t;let G;r==="sync"?G=q:r==="post"?G=()=>ye(q,c&&c.suspense):(q.pre=!0,c&&(q.id=c.uid),G=()=>Ts(q));const p=new ys(d,Te,G),m=Dr(),I=()=>{p.stop(),m&&hs(m.effects,p)};return t?n?q():K=p.run():r==="post"?ye(p.run.bind(p),c&&c.suspense):p.run(),M&&M.push(I),I}function Yl(e,t,n){const s=this.proxy,r=ie(e)?e.includes(".")?Mi(s,e):()=>s[e]:e.bind(s,s);let i;k(t)?i=t:(i=t.handler,n=t);const o=Ut(this),l=Rn(r,i.bind(s),n);return o(),l}function Mi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r{ot(s,t,n)});else if(Pr(e)){for(const s in e)ot(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&ot(e[s],t,n)}return e}const zl=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Oe(t)}Modifiers`]||e[`${Qe(t)}Modifiers`];function Jl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||se;let r=n;const i=t.startsWith("update:"),o=i&&zl(s,t.slice(7));o&&(o.trim&&(r=n.map(d=>ie(d)?d.trim():d)),o.number&&(r=n.map(mo)));let l,c=s[l=nn(t)]||s[l=nn(Oe(t))];!c&&i&&(c=s[l=nn(Qe(t))]),c&&Ae(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ae(u,e,6,r)}}function Pi(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!k(e)){const c=u=>{const d=Pi(u,t,!0);d&&(l=!0,le(o,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(Z(e)&&s.set(e,null),null):(V(i)?i.forEach(c=>o[c]=null):le(o,i),Z(e)&&s.set(e,o),o)}function On(e,t){return!e||!Vt(t)?!1:(t=t.slice(2).replace(/Once$/,""),z(e,t[0].toLowerCase()+t.slice(1))||z(e,Qe(t))||z(e,t))}function Vn(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:u,renderCache:d,props:h,data:b,setupState:T,ctx:P,inheritAttrs:M}=e,K=fn(e);let q,G;try{if(n.shapeFlag&4){const m=r||s,I=m;q=xe(u.call(I,m,d,h,T,b,P)),G=l}else{const m=t;q=xe(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),G=t.props?l:Ql(l)}}catch(m){Nt.length=0,En(m,e,1),q=fe(me)}let p=q;if(G&&M!==!1){const m=Object.keys(G),{shapeFlag:I}=p;m.length&&I&7&&(i&&m.some(ds)&&(G=Zl(G,i)),p=ze(p,G,!1,!0))}return n.dirs&&(p=ze(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),q=p,fn(K),q}const Ql=e=>{let t;for(const n in e)(n==="class"||n==="style"||Vt(n))&&((t||(t={}))[n]=e[n]);return t},Zl=(e,t)=>{const n={};for(const s in e)(!ds(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ec(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?nr(s,o,u):!!o;if(c&8){const d=t.dynamicProps;for(let h=0;he.__isSuspense;function Ni(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):ll(e)}const _e=Symbol.for("v-fgt"),ft=Symbol.for("v-txt"),me=Symbol.for("v-cmt"),Pt=Symbol.for("v-stc"),Nt=[];let Ee=null;function Fi(e=!1){Nt.push(Ee=e?null:[])}function sc(){Nt.pop(),Ee=Nt[Nt.length-1]||null}let jt=1;function sr(e){jt+=e,e<0&&Ee&&(Ee.hasOnce=!0)}function $i(e){return e.dynamicChildren=jt>0?Ee||mt:null,sc(),jt>0&&Ee&&Ee.push(e),e}function Qa(e,t,n,s,r,i){return $i(Di(e,t,n,s,r,i,!0))}function Hi(e,t,n,s,r){return $i(fe(e,t,n,s,r,!0))}function pn(e){return e?e.__v_isVNode===!0:!1}function lt(e,t){return e.type===t.type&&e.key===t.key}const ji=({key:e})=>e??null,rn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ie(e)||pe(e)||k(e)?{i:he,r:e,k:t,f:!!n}:e:null);function Di(e,t=null,n=null,s=0,r=null,i=e===_e?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ji(t),ref:t&&rn(t),scopeId:Sn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:he};return l?(Os(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ie(n)?8:16),jt>0&&!o&&Ee&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ee.push(c),c}const fe=rc;function rc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===pi)&&(e=me),pn(e)){const l=ze(e,t,!0);return n&&Os(l,n),jt>0&&!i&&Ee&&(l.shapeFlag&6?Ee[Ee.indexOf(e)]=l:Ee.push(l)),l.patchFlag=-2,l}if(pc(e)&&(e=e.__vccOpts),t){t=ic(t);let{class:l,style:c}=t;l&&!ie(l)&&(t.class=ms(l)),Z(c)&&(Jr(c)&&!V(c)&&(c=le({},c)),t.style=gs(c))}const o=ie(e)?1:nc(e)?128:Vl(e)?64:Z(e)?4:k(e)?2:0;return Di(e,t,n,s,r,o,i,!0)}function ic(e){return e?Jr(e)||wi(e)?le({},e):e:null}function ze(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,u=t?oc(r||{},t):r,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&ji(u),ref:t&&t.ref?n&&i?V(i)?i.concat(rn(t)):[i,rn(t)]:rn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ze(e.ssContent),ssFallback:e.ssFallback&&ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&un(d,c.clone(d)),d}function Vi(e=" ",t=0){return fe(ft,null,e,t)}function Za(e,t){const n=fe(Pt,null,e);return n.staticCount=t,n}function ef(e="",t=!1){return t?(Fi(),Hi(me,null,e)):fe(me,null,e)}function xe(e){return e==null||typeof e=="boolean"?fe(me):V(e)?fe(_e,null,e.slice()):typeof e=="object"?We(e):fe(ft,null,String(e))}function We(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ze(e)}function Os(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(V(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Os(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!wi(t)?t._ctx=he:r===3&&he&&(he.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else k(t)?(t={default:t,_ctx:he},n=32):(t=String(t),s&64?(n=16,t=[Vi(t)]):n=8);e.children=t,e.shapeFlag|=n}function oc(...e){const t={};for(let n=0;nce||he;let gn,as;{const e=Fr(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};gn=t("__VUE_INSTANCE_SETTERS__",n=>ce=n),as=t("__VUE_SSR_SETTERS__",n=>In=n)}const Ut=e=>{const t=ce;return gn(e),e.scope.on(),()=>{e.scope.off(),gn(t)}},rr=()=>{ce&&ce.scope.off(),gn(null)};function Ui(e){return e.vnode.shapeFlag&4}let In=!1;function fc(e,t=!1,n=!1){t&&as(t);const{props:s,children:r}=e.vnode,i=Ui(e);Pl(e,s,i,t),Hl(e,r,n);const o=i?uc(e,t):void 0;return t&&as(!1),o}function uc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Cl);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?ki(e):null,i=Ut(e);Ze();const o=Ge(s,e,0,[e.props,r]);if(et(),i(),Ir(o)){if(o.then(rr,rr),t)return o.then(l=>{ir(e,l,t)}).catch(l=>{En(l,e,0)});e.asyncDep=o}else ir(e,o,t)}else Bi(e,t)}function ir(e,t,n){k(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=ni(t)),Bi(e,n)}let or;function Bi(e,t,n){const s=e.type;if(!e.render){if(!t&&or&&!s.render){const r=s.template||As(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=le(le({isCustomElement:i,delimiters:l},o),c);s.render=or(r,u)}}e.render=s.render||Te}{const r=Ut(e);Ze();try{xl(e)}finally{et(),r()}}}const dc={get(e,t){return be(e,"get",""),e[t]}};function ki(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,dc),slots:e.slots,emit:e.emit,expose:t}}function Ls(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(ni(sn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in It)return It[n](e)},has(t,n){return n in t||n in It}})):e.proxy}function hc(e,t=!0){return k(e)?e.displayName||e.name:e.name||t&&e.__name}function pc(e){return k(e)&&"__vccOpts"in e}const re=(e,t)=>Yo(e,t,In);function fs(e,t,n){const s=arguments.length;return s===2?Z(t)&&!V(t)?pn(t)?fe(e,null,[t]):fe(e,t):fe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pn(n)&&(n=[n]),fe(e,t,n))}const gc="3.4.35";/** +* @vue/runtime-dom v3.4.35 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const mc="http://www.w3.org/2000/svg",yc="http://www.w3.org/1998/Math/MathML",$e=typeof document<"u"?document:null,lr=$e&&$e.createElement("template"),_c={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?$e.createElementNS(mc,e):t==="mathml"?$e.createElementNS(yc,e):n?$e.createElement(e,{is:n}):$e.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>$e.createTextNode(e),createComment:e=>$e.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>$e.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{lr.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=lr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ue="transition",Rt="animation",Dt=Symbol("_vtc"),Ki=(e,{slots:t})=>fs(dl,bc(e),t);Ki.displayName="Transition";const Wi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Ki.props=le({},oi,Wi);const st=(e,t=[])=>{V(e)?e.forEach(n=>n(...t)):e&&e(...t)},cr=e=>e?V(e)?e.some(t=>t.length>1):e.length>1:!1;function bc(e){const t={};for(const C in e)C in Wi||(t[C]=e[C]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:T=`${n}-leave-to`}=e,P=vc(r),M=P&&P[0],K=P&&P[1],{onBeforeEnter:q,onEnter:G,onEnterCancelled:p,onLeave:m,onLeaveCancelled:I,onBeforeAppear:R=q,onAppear:U=G,onAppearCancelled:D=p}=t,L=(C,W,ee)=>{rt(C,W?d:l),rt(C,W?u:o),ee&&ee()},_=(C,W)=>{C._isLeaving=!1,rt(C,h),rt(C,T),rt(C,b),W&&W()},N=C=>(W,ee)=>{const ne=C?U:G,j=()=>L(W,C,ee);st(ne,[W,j]),ar(()=>{rt(W,C?c:i),Be(W,C?d:l),cr(ne)||fr(W,s,M,j)})};return le(t,{onBeforeEnter(C){st(q,[C]),Be(C,i),Be(C,o)},onBeforeAppear(C){st(R,[C]),Be(C,c),Be(C,u)},onEnter:N(!1),onAppear:N(!0),onLeave(C,W){C._isLeaving=!0;const ee=()=>_(C,W);Be(C,h),Be(C,b),Cc(),ar(()=>{C._isLeaving&&(rt(C,h),Be(C,T),cr(m)||fr(C,s,K,ee))}),st(m,[C,ee])},onEnterCancelled(C){L(C,!1),st(p,[C])},onAppearCancelled(C){L(C,!0),st(D,[C])},onLeaveCancelled(C){_(C),st(I,[C])}})}function vc(e){if(e==null)return null;if(Z(e))return[Un(e.enter),Un(e.leave)];{const t=Un(e);return[t,t]}}function Un(e){return yo(e)}function Be(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Dt]||(e[Dt]=new Set)).add(t)}function rt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Dt];n&&(n.delete(t),n.size||(e[Dt]=void 0))}function ar(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let wc=0;function fr(e,t,n,s){const r=e._endId=++wc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=Ec(e,t);if(!o)return s();const u=o+"end";let d=0;const h=()=>{e.removeEventListener(u,b),i()},b=T=>{T.target===e&&++d>=c&&h()};setTimeout(()=>{d(n[P]||"").split(", "),r=s(`${Ue}Delay`),i=s(`${Ue}Duration`),o=ur(r,i),l=s(`${Rt}Delay`),c=s(`${Rt}Duration`),u=ur(l,c);let d=null,h=0,b=0;t===Ue?o>0&&(d=Ue,h=o,b=i.length):t===Rt?u>0&&(d=Rt,h=u,b=c.length):(h=Math.max(o,u),d=h>0?o>u?Ue:Rt:null,b=d?d===Ue?i.length:c.length:0);const T=d===Ue&&/\b(transform|all)(,|$)/.test(s(`${Ue}Property`).toString());return{type:d,timeout:h,propCount:b,hasTransform:T}}function ur(e,t){for(;e.lengthdr(n)+dr(e[s])))}function dr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Cc(){return document.body.offsetHeight}function Sc(e,t,n){const s=e[Dt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const hr=Symbol("_vod"),xc=Symbol("_vsh"),Tc=Symbol(""),Ac=/(^|;)\s*display\s*:/;function Rc(e,t,n){const s=e.style,r=ie(n);let i=!1;if(n&&!r){if(t)if(ie(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&on(s,l,"")}else for(const o in t)n[o]==null&&on(s,o,"");for(const o in n)o==="display"&&(i=!0),on(s,o,n[o])}else if(r){if(t!==n){const o=s[Tc];o&&(n+=";"+o),s.cssText=n,i=Ac.test(n)}}else t&&e.removeAttribute("style");hr in e&&(e[hr]=i?s.display:"",e[xc]&&(s.display="none"))}const pr=/\s*!important$/;function on(e,t,n){if(V(n))n.forEach(s=>on(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Oc(e,t);pr.test(n)?e.setProperty(Qe(s),n.replace(pr,""),"important"):e[s]=n}}const gr=["Webkit","Moz","ms"],Bn={};function Oc(e,t){const n=Bn[t];if(n)return n;let s=Oe(t);if(s!=="filter"&&s in e)return Bn[t]=s;s=_n(s);for(let r=0;rkn||(Fc.then(()=>kn=0),kn=Date.now());function Hc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Ae(jc(s,n.value),t,5,[s])};return n.value=e,n.attached=$c(),n}function jc(e,t){if(V(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const vr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Dc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Sc(e,s,o):t==="style"?Rc(e,n,s):Vt(t)?ds(t)||Pc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Vc(e,t,s,o))?(Lc(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&yr(e,t,s,o,i,t!=="value")):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),yr(e,t,s,o))};function Vc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&vr(t)&&k(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return vr(t)&&ie(n)?!1:t in e}const Uc=["ctrl","shift","alt","meta"],Bc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Uc.some(n=>e[`${n}Key`]&&!t.includes(n))},tf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=Qe(r.key);if(t.some(o=>o===i||kc[o]===i))return e(r)})},Kc=le({patchProp:Dc},_c);let Kn,wr=!1;function Wc(){return Kn=wr?Kn:Kl(Kc),wr=!0,Kn}const sf=(...e)=>{const t=Wc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Gc(s);if(r)return n(r,!0,qc(r))},t};function qc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Gc(e){return ie(e)?document.querySelector(e):e}const rf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Xc="modulepreload",Yc=function(e){return"/"+e},Er={},of=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),o=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));r=Promise.all(n.map(l=>{if(l=Yc(l),l in Er)return;Er[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const d=document.createElement("link");if(d.rel=c?"stylesheet":Xc,c||(d.as="script",d.crossOrigin=""),d.href=l,o&&d.setAttribute("nonce",o),document.head.appendChild(d),c)return new Promise((h,b)=>{d.addEventListener("load",h),d.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${l}`)))})}))}return r.then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})},zc=window.__VP_SITE_DATA__;function Is(e){return Dr()?(Ao(e),!0):!1}function Xe(e){return typeof e=="function"?e():ti(e)}const qi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Jc=Object.prototype.toString,Qc=e=>Jc.call(e)==="[object Object]",Gi=()=>{},Cr=Zc();function Zc(){var e,t;return qi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ea(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Xi=e=>e();function ta(e=Xi){const t=ae(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:wn(t),pause:n,resume:s,eventFilter:r}}function na(e){return Ln()}function Yi(...e){if(e.length!==1)return nl(...e);const t=e[0];return typeof t=="function"?wn(Zo(()=>({get:t,set:Gi}))):ae(t)}function sa(e,t,n={}){const{eventFilter:s=Xi,...r}=n;return Ne(e,ea(s,t),r)}function ra(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=ta(s);return{stop:sa(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function Ms(e,t=!0,n){na()?xt(e,n):t?e():Cn(e)}function zi(e){var t;const n=Xe(e);return(t=n==null?void 0:n.$el)!=null?t:n}const je=qi?window:void 0;function St(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=je):[t,n,s,r]=e,!t)return Gi;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(d=>d()),i.length=0},l=(d,h,b,T)=>(d.addEventListener(h,b,T),()=>d.removeEventListener(h,b,T)),c=Ne(()=>[zi(t),Xe(r)],([d,h])=>{if(o(),!d)return;const b=Qc(h)?{...h}:h;i.push(...n.flatMap(T=>s.map(P=>l(d,T,P,b))))},{immediate:!0,flush:"post"}),u=()=>{c(),o()};return Is(u),u}function ia(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function lf(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=je,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=ia(t);return St(r,i,d=>{d.repeat&&Xe(l)||c(d)&&n(d)},o)}function oa(){const e=ae(!1),t=Ln();return t&&xt(()=>{e.value=!0},t),e}function la(e){const t=oa();return re(()=>(t.value,!!e()))}function Ji(e,t={}){const{window:n=je}=t,s=la(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=ae(!1),o=u=>{i.value=u.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=Ii(()=>{s.value&&(l(),r=n.matchMedia(Xe(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return Is(()=>{c(),l(),r=void 0}),i}const Zt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},en="__vueuse_ssr_handlers__",ca=aa();function aa(){return en in Zt||(Zt[en]=Zt[en]||{}),Zt[en]}function Qi(e,t){return ca[e]||t}function fa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const ua={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Sr="vueuse-storage";function da(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:d,window:h=je,eventFilter:b,onError:T=_=>{console.error(_)},initOnMounted:P}=s,M=(d?Zr:ae)(typeof t=="function"?t():t);if(!n)try{n=Qi("getDefaultStorage",()=>{var _;return(_=je)==null?void 0:_.localStorage})()}catch(_){T(_)}if(!n)return M;const K=Xe(t),q=fa(K),G=(r=s.serializer)!=null?r:ua[q],{pause:p,resume:m}=ra(M,()=>R(M.value),{flush:i,deep:o,eventFilter:b});h&&l&&Ms(()=>{St(h,"storage",D),St(h,Sr,L),P&&D()}),P||D();function I(_,N){h&&h.dispatchEvent(new CustomEvent(Sr,{detail:{key:e,oldValue:_,newValue:N,storageArea:n}}))}function R(_){try{const N=n.getItem(e);if(_==null)I(N,null),n.removeItem(e);else{const C=G.write(_);N!==C&&(n.setItem(e,C),I(N,C))}}catch(N){T(N)}}function U(_){const N=_?_.newValue:n.getItem(e);if(N==null)return c&&K!=null&&n.setItem(e,G.write(K)),K;if(!_&&u){const C=G.read(N);return typeof u=="function"?u(C,K):q==="object"&&!Array.isArray(C)?{...K,...C}:C}else return typeof N!="string"?N:G.read(N)}function D(_){if(!(_&&_.storageArea!==n)){if(_&&_.key==null){M.value=K;return}if(!(_&&_.key!==e)){p();try{(_==null?void 0:_.newValue)!==G.write(M.value)&&(M.value=U(_))}catch(N){T(N)}finally{_?Cn(m):m()}}}}function L(_){D(_.detail)}return M}function Zi(e){return Ji("(prefers-color-scheme: dark)",e)}function ha(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=je,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},b=Zi({window:r}),T=re(()=>b.value?"dark":"light"),P=c||(o==null?Yi(s):da(o,s,i,{window:r,listenToStorageChanges:l})),M=re(()=>P.value==="auto"?T.value:P.value),K=Qi("updateHTMLAttrs",(m,I,R)=>{const U=typeof m=="string"?r==null?void 0:r.document.querySelector(m):zi(m);if(!U)return;let D;if(d&&(D=r.document.createElement("style"),D.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),r.document.head.appendChild(D)),I==="class"){const L=R.split(/\s/g);Object.values(h).flatMap(_=>(_||"").split(/\s/g)).filter(Boolean).forEach(_=>{L.includes(_)?U.classList.add(_):U.classList.remove(_)})}else U.setAttribute(I,R);d&&(r.getComputedStyle(D).opacity,document.head.removeChild(D))});function q(m){var I;K(t,n,(I=h[m])!=null?I:m)}function G(m){e.onChanged?e.onChanged(m,q):q(m)}Ne(M,G,{flush:"post",immediate:!0}),Ms(()=>G(M.value));const p=re({get(){return u?P.value:M.value},set(m){P.value=m}});try{return Object.assign(p,{store:P,system:T,state:M})}catch{return p}}function pa(e={}){const{valueDark:t="dark",valueLight:n="",window:s=je}=e,r=ha({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=re(()=>r.system?r.system.value:Zi({window:s}).value?"dark":"light");return re({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function Wn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function eo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const qn=new WeakMap;function cf(e,t=!1){const n=ae(t);let s=null,r="";Ne(Yi(e),l=>{const c=Wn(Xe(l));if(c){const u=c;if(qn.get(u)||qn.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(r=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=Wn(Xe(e));!l||n.value||(Cr&&(s=St(l,"touchmove",c=>{ga(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=Wn(Xe(e));!l||!n.value||(Cr&&(s==null||s()),l.style.overflow=r,qn.delete(l),n.value=!1)};return Is(o),re({get(){return n.value},set(l){l?i():o()}})}function af(e={}){const{window:t=je,behavior:n="auto"}=e;if(!t)return{x:ae(0),y:ae(0)};const s=ae(t.scrollX),r=ae(t.scrollY),i=re({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=re({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return St(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function ff(e={}){const{window:t=je,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0}=e,o=ae(n),l=ae(s),c=()=>{t&&(i?(o.value=t.innerWidth,l.value=t.innerHeight):(o.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),Ms(c),St("resize",c,{passive:!0}),r){const u=Ji("(orientation: portrait)");Ne(u,()=>c())}return{width:o,height:l}}var Gn={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Xn={};const to=/^(?:[a-z]+:|\/\/)/i,ma="vitepress-theme-appearance",ya=/#.*$/,_a=/[?#].*$/,ba=/(?:(^|\/)index)?\.(?:md|html)$/,ue=typeof document<"u",no={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function va(e,t,n=!1){if(t===void 0)return!1;if(e=xr(`/${e}`),n)return new RegExp(t).test(e);if(xr(t)!==e)return!1;const s=t.match(ya);return s?(ue?location.hash:"")===s[0]:!0}function xr(e){return decodeURI(e).replace(_a,"").replace(ba,"$1")}function wa(e){return to.test(e)}function Ea(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!wa(n)&&va(t,`/${n}/`,!0))||"root"}function Ca(e,t){var s,r,i,o,l,c,u;const n=Ea(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:ro(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function so(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=Sa(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function Sa(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function xa(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function ro(e,t){return[...e.filter(n=>!xa(t,n)),...t]}const Ta=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Aa=/^[a-z]:/i;function Tr(e){const t=Aa.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Ta,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Yn=new Set;function Ra(e){if(Yn.size===0){const n=typeof process=="object"&&(Xn==null?void 0:Xn.VITE_EXTRA_EXTENSIONS)||(Gn==null?void 0:Gn.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Yn.add(s))}const t=e.split(".").pop();return t==null||!Yn.has(t.toLowerCase())}const Oa=Symbol(),ut=Zr(zc);function uf(e){const t=re(()=>Ca(ut.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?ae(!0):n?pa({storageKey:ma,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):ae(!1),r=ae(ue?location.hash:"");return ue&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Ne(()=>e.data,()=>{r.value=ue?location.hash:""}),{site:t,theme:re(()=>t.value.themeConfig),page:re(()=>e.data),frontmatter:re(()=>e.data.frontmatter),params:re(()=>e.data.params),lang:re(()=>t.value.lang),dir:re(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:re(()=>t.value.localeIndex||"root"),title:re(()=>so(t.value,e.data)),description:re(()=>e.data.description||t.value.description),isDark:s,hash:re(()=>r.value)}}function La(){const e=Et(Oa);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Ia(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ar(e){return to.test(e)||!e.startsWith("/")?e:Ia(ut.value.base,e)}function Ma(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ue){const n="/";t=Tr(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${Tr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let ln=[];function df(e){ln.push(e),An(()=>{ln=ln.filter(t=>t!==e)})}function Pa(){let e=ut.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Rr(e,n);else if(Array.isArray(e))for(const s of e){const r=Rr(s,n);if(r){t=r;break}}return t}function Rr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Na=Symbol(),io="http://a.com",Fa=()=>({path:"/",component:null,data:no});function hf(e,t){const n=vn(Fa()),s={route:n,go:r};async function r(l=ue?location.href:"/"){var c,u;l=zn(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ue&&l!==zn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((u=s.onAfterRouteChanged)==null?void 0:u.call(s,l)))}let i=null;async function o(l,c=0,u=!1){var b;if(await((b=s.onBeforePageLoad)==null?void 0:b.call(s,l))===!1)return;const d=new URL(l,io),h=i=d.pathname;try{let T=await e(h);if(!T)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:P,__pageData:M}=T;if(!P)throw new Error(`Invalid route component: ${P}`);n.path=ue?h:Ar(h),n.component=sn(P),n.data=sn(M),ue&&Cn(()=>{let K=ut.value.base+M.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ut.value.cleanUrls&&!K.endsWith("/")&&(K+=".html"),K!==d.pathname&&(d.pathname=K,l=K+d.search+d.hash,history.replaceState({},"",l)),d.hash&&!c){let q=null;try{q=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(G){console.warn(G)}if(q){Or(q,d.hash);return}}window.scrollTo(0,c)})}}catch(T){if(!/fetch|Page not found/.test(T.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(T),!u)try{const P=await fetch(ut.value.base+"hashmap.json");window.__VP_HASH_MAP__=await P.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ue?h:Ar(h),n.component=t?sn(t):null;const P=ue?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...no,relativePath:P}}}}return ue&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:d,origin:h,pathname:b,hash:T,search:P}=new URL(u,c.baseURI),M=new URL(location.href);h===M.origin&&Ra(b)&&(l.preventDefault(),b===M.pathname&&P===M.search?(T!==M.hash&&(history.pushState({},"",d),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:M.href,newURL:d}))),T?Or(c,T,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(d))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(zn(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function $a(){const e=Et(Na);if(!e)throw new Error("useRouter() is called without provider.");return e}function oo(){return $a().route}function Or(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Pa()+i;requestAnimationFrame(r)}}function zn(e){const t=new URL(e,io);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ut.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const Jn=()=>ln.forEach(e=>e()),pf=fi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=oo(),{site:n}=La();return()=>fs(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?fs(t.component,{onVnodeMounted:Jn,onVnodeUpdated:Jn,onVnodeUnmounted:Jn}):"404 Page Not Found"])}}),gf=fi({setup(e,{slots:t}){const n=ae(!1);return xt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function mf(){ue&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function yf(){if(ue){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(d=>d.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),Ha(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const d=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,d)})}})}}async function Ha(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function _f(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Qn(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(Qn);s.forEach((l,c)=>{const u=o.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};Ii(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=so(o,i);u!==document.title&&(document.title=u);const d=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):Qn(["meta",{name:"description",content:d}]),r(ro(o.head,Da(c)))})}function Qn([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function ja(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Da(e){return e.filter(t=>!ja(t))}const Zn=new Set,lo=()=>document.createElement("link"),Va=e=>{const t=lo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Ua=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let tn;const Ba=ue&&(tn=lo())&&tn.relList&&tn.relList.supports&&tn.relList.supports("prefetch")?Va:Ua;function bf(){if(!ue||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Zn.has(c)){Zn.add(c);const u=Ma(c);u&&Ba(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Zn.add(l))})})};xt(s);const r=oo();Ne(()=>r.path,s),An(()=>{n&&n.disconnect()})}export{di as $,Ja as A,_l as B,Pa as C,Wa as D,Ga as E,_e as F,Zr as G,df as H,fe as I,qa as J,to as K,oo as L,oc as M,Et as N,ff as O,gs as P,lf as Q,Cn as R,af as S,Ki as T,ue as U,wn as V,cf as W,Ml as X,nf as Y,Ya as Z,rf as _,Vi as a,tf as a0,za as a1,fs as a2,Za as a3,_f as a4,Na as a5,uf as a6,Oa as a7,pf as a8,gf as a9,ut as aa,sf as ab,hf as ac,Ma as ad,bf as ae,yf as af,mf as ag,of as ah,Hi as b,Qa as c,fi as d,ef as e,Ra as f,Ar as g,re as h,wa as i,Di as j,ti as k,Ka as l,va as m,ms as n,Fi as o,ka as p,Ji as q,Xa as r,ae as s,So as t,La as u,Ne as v,al as w,Ii as x,xt as y,An as z}; diff --git a/web/src/main/javascript/public/assets/chunks/theme.D8__5SLn.js b/web/src/main/javascript/public/assets/chunks/theme.D8__5SLn.js new file mode 100644 index 00000000..a32a7a29 --- /dev/null +++ b/web/src/main/javascript/public/assets/chunks/theme.D8__5SLn.js @@ -0,0 +1 @@ +import{d as _,o as a,c,r as l,n as w,a as O,t as T,b as k,w as v,e as f,T as de,_ as b,u as Ge,i as Ue,f as je,g as ve,h as g,j as p,k as r,p as C,l as H,m as W,q as ie,s as I,v as G,x as Z,y as K,z as pe,A as he,B as ze,C as qe,D as R,F as M,E,G as Pe,H as x,I as m,J as F,K as Le,L as ee,M as q,N as te,O as We,P as Ve,Q as Ke,R as Re,S as Se,U as oe,V as Je,W as Te,X as Ie,Y as Ye,Z as Qe,$ as Xe,a0 as Ze,a1 as xe,a2 as et}from"./framework.CyEiTwkJ.js";const tt=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:w(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[O(T(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},nt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),k(de,{name:"fade"},{default:v(()=>[e.show?(a(),c("div",ot)):f("",!0)]),_:1}))}}),st=b(nt,[["__scopeId","data-v-c79a1216"]]),P=Ge;function at(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function fe(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ue(o)||o.startsWith("#")||!n.startsWith("http")||!je(e))return o;const{site:i}=P(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return ve(u)}function Y({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=P(),u=g(()=>{var d,$;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:g(()=>Object.entries(e.value.locales).flatMap(([d,$])=>u.value.label===$.label?[]:{text:$.label,link:rt($.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:u}}function rt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const it=o=>(C("data-v-d6be1790"),o=o(),H(),o),lt={class:"NotFound"},ct={class:"code"},ut={class:"title"},dt=it(()=>p("div",{class:"divider"},null,-1)),vt={class:"quote"},pt={class:"action"},ht=["href","aria-label"],ft=_({__name:"NotFound",setup(o){const{theme:e}=P(),{currentLang:t}=Y();return(s,n)=>{var i,u,h,d,$;return a(),c("div",lt,[p("p",ct,T(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",ut,T(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),dt,p("blockquote",vt,T(((h=r(e).notFound)==null?void 0:h.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",pt,[p("a",{class:"link",href:r(ve)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},T((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,ht)])])}}}),_t=b(ft,[["__scopeId","data-v-d6be1790"]]);function we(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?Q(s):Q(s.items,s.base)}function mt(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function kt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):W(o,e.link)?!0:e.items?ce(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=Q(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=P(),s=ie("(min-width: 960px)"),n=I(!1),i=g(()=>{const B=t.value.sidebar,S=e.value.relativePath;return B?we(B,S):[]}),u=I(i.value);G(i,(B,S)=>{JSON.stringify(B)!==JSON.stringify(S)&&(u.value=i.value)});const h=g(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),d=g(()=>$?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),$=g(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),L=g(()=>h.value&&s.value),y=g(()=>h.value?mt(u.value):[]);function V(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():V()}return{isOpen:n,sidebar:u,sidebarGroups:y,hasSidebar:h,hasAside:$,leftAside:d,isSidebarEnabled:L,open:V,close:N,toggle:A}}function bt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),K(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function $t(o){const{page:e,hash:t}=P(),s=I(!1),n=g(()=>o.value.collapsed!=null),i=g(()=>!!o.value.link),u=I(!1),h=()=>{u.value=W(e.value.relativePath,o.value.link)};G([e,o,t],h),K(h);const d=g(()=>u.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),$=g(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),he(()=>{(u.value||d.value)&&(s.value=!1)});function L(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:u,hasActiveLink:d,hasChildren:$,toggle:L}}function gt(){const{hasSidebar:o}=U(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ne(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:yt(t),link:"#"+t.id,level:s}});return Pt(e,o)}function yt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=s&&u.level<=n),ue.length=0;for(const{element:u,link:h}of o)ue.push({element:u,link:h});const i=[];e:for(let u=0;u=0;d--){const $=o[d];if($.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),ze(()=>{u(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const h=window.scrollY,d=window.innerHeight,$=document.body.offsetHeight,L=Math.abs(h+d-$)<1,y=ue.map(({element:N,link:A})=>({link:A,top:Vt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!y.length){u(null);return}if(h<1){u(null);return}if(L){u(y[y.length-1].link);return}let V=null;for(const{link:N,top:A}of y){if(A>h+qe()+4)break;V=N}u(V)}function u(h){n&&n.classList.remove("active"),h==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const St=["href","title"],Tt=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=R("VPDocOutlineItem",!0);return a(),c("ul",{class:w(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:i,link:u,title:h})=>(a(),c("li",null,[p("a",{class:"outline-link",href:u,onClick:e,title:h},T(h),9,St),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=b(Tt,[["__scopeId","data-v-b933a997"]]),It={class:"content"},wt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Nt=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=P(),s=Pe([]);x(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=I(),i=I();return Lt(n,i),(u,h)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",It,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",wt,T(r(Ne)(r(t))),1),m(Me,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Mt=b(Nt,[["__scopeId","data-v-a5bbad30"]]),At={class:"VPDocAsideCarbonAds"},Bt=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),c("div",At,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ct=o=>(C("data-v-3f215769"),o=o(),H(),o),Ht={class:"VPDocAside"},Et=Ct(()=>p("div",{class:"spacer"},null,-1)),Ft=_({__name:"VPDocAside",setup(o){const{theme:e}=P();return(t,s)=>(a(),c("div",Ht,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(Mt),l(t.$slots,"aside-outline-after",{},void 0,!0),Et,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(Bt,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Dt=b(Ft,[["__scopeId","data-v-3f215769"]]);function Ot(){const{theme:o,page:e}=P();return g(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Gt(){const{page:o,theme:e,frontmatter:t}=P();return g(()=>{var $,L,y,V,N,A,B,S;const s=we(e.value.sidebar,o.value.relativePath),n=kt(s),i=Ut(n,j=>j.link.replace(/[?#].*$/,"")),u=i.findIndex(j=>W(o.value.relativePath,j.link)),h=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=i[u-1])==null?void 0:y.docFooterText)??((V=i[u-1])==null?void 0:V.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((N=i[u-1])==null?void 0:N.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[u+1])==null?void 0:A.docFooterText)??((B=i[u+1])==null?void 0:B.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[u+1])==null?void 0:S.link)}}})}function Ut(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=g(()=>e.tag??(e.href?"a":"span")),s=g(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(F(t.value),{class:w(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(fe)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:v(()=>[l(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),jt={class:"VPLastUpdated"},zt=["datetime"],qt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=P(),n=g(()=>new Date(t.value.lastUpdated)),i=g(()=>n.value.toISOString()),u=I("");return K(()=>{Z(()=>{var h,d,$;u.value=new Intl.DateTimeFormat((d=(h=e.value.lastUpdated)==null?void 0:h.formatOptions)!=null&&d.forceLocale?s.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(h,d)=>{var $;return a(),c("p",jt,[O(T((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},T(u.value),9,zt)])}}}),Wt=b(qt,[["__scopeId","data-v-e98dd255"]]),Ae=o=>(C("data-v-e257564d"),o=o(),H(),o),Kt={key:0,class:"VPDocFooter"},Rt={key:0,class:"edit-info"},Jt={key:0,class:"edit-link"},Yt=Ae(()=>p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Qt={key:1,class:"last-updated"},Xt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Zt=Ae(()=>p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),xt={class:"pager"},eo=["innerHTML"],to=["innerHTML"],oo={class:"pager"},no=["innerHTML"],so=["innerHTML"],ao=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=P(),n=Ot(),i=Gt(),u=g(()=>e.value.editLink&&s.value.editLink!==!1),h=g(()=>t.value.lastUpdated),d=g(()=>u.value||h.value||i.value.prev||i.value.next);return($,L)=>{var y,V,N,A;return d.value?(a(),c("footer",Kt,[l($.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Rt,[u.value?(a(),c("div",Jt,[m(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:v(()=>[Yt,O(" "+T(r(n).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Qt,[m(Wt)])):f("",!0)])):f("",!0),(y=r(i).prev)!=null&&y.link||(V=r(i).next)!=null&&V.link?(a(),c("nav",Xt,[Zt,p("div",xt,[(N=r(i).prev)!=null&&N.link?(a(),k(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:v(()=>{var B;return[p("span",{class:"desc",innerHTML:((B=r(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,eo),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,to)]}),_:1},8,["href"])):f("",!0)]),p("div",oo,[(A=r(i).next)!=null&&A.link?(a(),k(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:v(()=>{var B;return[p("span",{class:"desc",innerHTML:((B=r(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,no),p("span",{class:"title",innerHTML:r(i).next.text},null,8,so)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ro=b(ao,[["__scopeId","data-v-e257564d"]]),io=o=>(C("data-v-39a288b8"),o=o(),H(),o),lo={class:"container"},co=io(()=>p("div",{class:"aside-curtain"},null,-1)),uo={class:"aside-container"},vo={class:"aside-content"},po={class:"content"},ho={class:"content-container"},fo={class:"main"},_o=_({__name:"VPDoc",setup(o){const{theme:e}=P(),t=ee(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),u=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,d)=>{const $=R("Content");return a(),c("div",{class:w(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[l(h.$slots,"doc-top",{},void 0,!0),p("div",lo,[r(n)?(a(),c("div",{key:0,class:w(["aside",{"left-aside":r(i)}])},[co,p("div",uo,[p("div",vo,[m(Dt,null,{"aside-top":v(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),p("div",po,[p("div",ho,[l(h.$slots,"doc-before",{},void 0,!0),p("main",fo,[m($,{class:w(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(ro,null,{"doc-footer-before":v(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),mo=b(_o,[["__scopeId","data-v-39a288b8"]]),ko=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=g(()=>e.href&&Le.test(e.href)),s=g(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),k(F(s.value),{class:w(["VPButton",[n.size,n.theme]]),href:n.href?r(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[O(T(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),bo=b(ko,[["__scopeId","data-v-cad61b99"]]),$o=["src","alt"],go=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=R("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",q({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,$o)):(a(),c(M,{key:1},[m(s,q({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(s,q({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),X=b(go,[["__scopeId","data-v-8426fc1a"]]),yo=o=>(C("data-v-303bb580"),o=o(),H(),o),Po={class:"container"},Lo={class:"main"},Vo={key:0,class:"name"},So=["innerHTML"],To=["innerHTML"],Io=["innerHTML"],wo={key:0,class:"actions"},No={key:0,class:"image"},Mo={class:"image-container"},Ao=yo(()=>p("div",{class:"image-bg"},null,-1)),Bo=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=te("hero-image-slot-exists");return(t,s)=>(a(),c("div",{class:w(["VPHero",{"has-image":t.image||r(e)}])},[p("div",Po,[p("div",Lo,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",Vo,[p("span",{innerHTML:t.name,class:"clip"},null,8,So)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,To)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Io)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",wo,[(a(!0),c(M,null,E(t.actions,n=>(a(),c("div",{key:n.link,class:"action"},[m(bo,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",No,[p("div",Mo,[Ao,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Co=b(Bo,[["__scopeId","data-v-303bb580"]]),Ho=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=P();return(t,s)=>r(e).hero?(a(),k(Co,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":v(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Eo=o=>(C("data-v-a3976bdc"),o=o(),H(),o),Fo={class:"box"},Do={key:0,class:"icon"},Oo=["innerHTML"],Go=["innerHTML"],Uo=["innerHTML"],jo={key:4,class:"link-text"},zo={class:"link-text-value"},qo=Eo(()=>p("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Wo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),k(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[p("article",Fo,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Do,[m(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Oo)):f("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Go),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Uo)):f("",!0),e.linkText?(a(),c("div",jo,[p("p",zo,[O(T(e.linkText)+" ",1),qo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Ko=b(Wo,[["__scopeId","data-v-a3976bdc"]]),Ro={key:0,class:"VPFeatures"},Jo={class:"container"},Yo={class:"items"},Qo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=g(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),c("div",Ro,[p("div",Jo,[p("div",Yo,[(a(!0),c(M,null,E(s.features,i=>(a(),c("div",{key:i.title,class:w(["item",[t.value]])},[m(Ko,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Xo=b(Qo,[["__scopeId","data-v-a6181336"]]),Zo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=P();return(t,s)=>r(e).features?(a(),k(Xo,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),xo=_({__name:"VPHomeContent",setup(o){const{width:e}=We({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),c("div",{class:"vp-doc container",style:Ve(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),en=b(xo,[["__scopeId","data-v-8e2d4988"]]),tn={class:"VPHome"},on=_({__name:"VPHome",setup(o){const{frontmatter:e}=P();return(t,s)=>{const n=R("Content");return a(),c("div",tn,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Ho,null,{"home-hero-info-before":v(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(Zo),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(en,{key:0},{default:v(()=>[m(n)]),_:1})):(a(),k(n,{key:1}))])}}}),nn=b(on,[["__scopeId","data-v-686f80a6"]]),sn={},an={class:"VPPage"};function rn(o,e){const t=R("Content");return a(),c("div",an,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const ln=b(sn,[["render",rn]]),cn=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=P(),{hasSidebar:s}=U();return(n,i)=>(a(),c("div",{class:w(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(n.$slots,"not-found",{key:0},()=>[m(_t)],!0):r(t).layout==="page"?(a(),k(ln,{key:1},{"page-top":v(()=>[l(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[l(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(nn,{key:2},{"home-hero-before":v(()=>[l(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[l(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[l(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[l(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[l(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(F(r(t).layout),{key:3})):(a(),k(mo,{key:4},{"doc-top":v(()=>[l(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[l(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[l(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[l(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[l(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[l(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[l(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[l(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),un=b(cn,[["__scopeId","data-v-1428d186"]]),dn={class:"container"},vn=["innerHTML"],pn=["innerHTML"],hn=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:w(["VPFooter",{"has-sidebar":r(s)}])},[p("div",dn,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,vn)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,pn)):f("",!0)])],2)):f("",!0)}}),fn=b(hn,[["__scopeId","data-v-e315a0ad"]]);function _n(){const{theme:o,frontmatter:e}=P(),t=Pe([]),s=g(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const mn=o=>(C("data-v-17a5e62e"),o=o(),H(),o),kn={class:"menu-text"},bn=mn(()=>p("span",{class:"vpi-chevron-right icon"},null,-1)),$n={class:"header"},gn={class:"outline"},yn=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=P(),s=I(!1),n=I(0),i=I(),u=I();function h(y){var V;(V=i.value)!=null&&V.contains(y.target)||(s.value=!1)}G(s,y=>{if(y){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),Ke("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(y){y.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Re(()=>{s.value=!1}))}function L(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,V)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[y.headers.length>0?(a(),c("button",{key:0,onClick:d,class:w({open:s.value})},[p("span",kn,T(r(Ne)(r(t))),1),bn],2)):(a(),c("button",{key:1,onClick:L},T(r(t).returnToTopLabel||"Return to top"),1)),m(de,{name:"flyout"},{default:v(()=>[s.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:$},[p("div",$n,[p("a",{class:"top-link",href:"#",onClick:L},T(r(t).returnToTopLabel||"Return to top"),1)]),p("div",gn,[m(Me,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),Pn=b(yn,[["__scopeId","data-v-17a5e62e"]]),Ln=o=>(C("data-v-a6f0e41e"),o=o(),H(),o),Vn={class:"container"},Sn=["aria-expanded"],Tn=Ln(()=>p("span",{class:"vpi-align-left menu-icon"},null,-1)),In={class:"menu-text"},wn=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:s}=U(),{headers:n}=_n(),{y:i}=Se(),u=I(0);K(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=_e(t.value.outline??e.value.outline)});const h=g(()=>n.value.length===0),d=g(()=>h.value&&!s.value),$=g(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:h.value,fixed:d.value}));return(L,y)=>r(t).layout!=="home"&&(!d.value||r(i)>=u.value)?(a(),c("div",{key:0,class:w($.value)},[p("div",Vn,[r(s)?(a(),c("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=V=>L.$emit("open-menu"))},[Tn,p("span",In,T(r(e).sidebarMenuLabel||"Menu"),1)],8,Sn)):f("",!0),m(Pn,{headers:r(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Nn=b(wn,[["__scopeId","data-v-a6f0e41e"]]);function Mn(){const o=I(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=ee();return G(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const An={},Bn={class:"VPSwitch",type:"button",role:"switch"},Cn={class:"check"},Hn={key:0,class:"icon"};function En(o,e){return a(),c("button",Bn,[p("span",Cn,[o.$slots.default?(a(),c("span",Hn,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Fn=b(An,[["render",En],["__scopeId","data-v-1d5665e3"]]),Be=o=>(C("data-v-5337faa4"),o=o(),H(),o),Dn=Be(()=>p("span",{class:"vpi-sun sun"},null,-1)),On=Be(()=>p("span",{class:"vpi-moon moon"},null,-1)),Gn=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=P(),s=te("toggle-appearance",()=>{e.value=!e.value}),n=I("");return he(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,u)=>(a(),k(Fn,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:v(()=>[Dn,On]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(Gn,[["__scopeId","data-v-5337faa4"]]),Un={key:0,class:"VPNavBarAppearance"},jn=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=P();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",Un,[m(me)])):f("",!0)}}),zn=b(jn,[["__scopeId","data-v-6c893767"]]),ke=I();let Ce=!1,re=0;function qn(o){const e=I(!1);if(oe){!Ce&&Wn(),re++;const t=G(ke,s=>{var n,i,u;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});pe(()=>{t(),re--,re||Kn()})}return Je(e)}function Wn(){document.addEventListener("focusin",He),Ce=!0,ke.value=document.activeElement}function Kn(){document.removeEventListener("focusin",He)}function He(){ke.value=document.activeElement}const Rn={class:"VPMenuLink"},Jn=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,s)=>(a(),c("div",Rn,[m(D,{class:w({active:r(W)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:v(()=>[O(T(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=b(Jn,[["__scopeId","data-v-43f1e123"]]),Yn={class:"VPMenuGroup"},Qn={key:0,class:"title"},Xn=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Yn,[e.text?(a(),c("p",Qn,T(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,s=>(a(),c(M,null,["link"in s?(a(),k(ne,{key:0,item:s},null,8,["item"])):f("",!0)],64))),256))]))}}),Zn=b(Xn,[["__scopeId","data-v-69e747b5"]]),xn={class:"VPMenu"},es={key:0,class:"items"},ts=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",xn,[e.items?(a(),c("div",es,[(a(!0),c(M,null,E(e.items,s=>(a(),c(M,{key:JSON.stringify(s)},["link"in s?(a(),k(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),k(F(s.component),q({key:1,ref_for:!0},s.props),null,16)):(a(),k(Zn,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),os=b(ts,[["__scopeId","data-v-b98bc113"]]),ns=o=>(C("data-v-b6c34ac9"),o=o(),H(),o),ss=["aria-expanded","aria-label"],as={key:0,class:"text"},rs=["innerHTML"],is=ns(()=>p("span",{class:"vpi-chevron-down text-icon"},null,-1)),ls={key:1,class:"vpi-more-horizontal icon"},cs={class:"menu"},us=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=I(!1),t=I();qn({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[n.button||n.icon?(a(),c("span",as,[n.icon?(a(),c("span",{key:0,class:w([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),c("span",{key:1,innerHTML:n.button},null,8,rs)):f("",!0),is])):(a(),c("span",ls))],8,ss),p("div",cs,[m(os,{items:n.items},{default:v(()=>[l(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=b(us,[["__scopeId","data-v-b6c34ac9"]]),ds=["href","aria-label","innerHTML"],vs=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),c("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,ds))}}),ps=b(vs,[["__scopeId","data-v-eee4e7cb"]]),hs={class:"VPSocialLinks"},fs=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",hs,[(a(!0),c(M,null,E(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),k(ps,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=b(fs,[["__scopeId","data-v-7bc22406"]]),_s={key:0,class:"group translations"},ms={class:"trans-title"},ks={key:1,class:"group"},bs={class:"item appearance"},$s={class:"label"},gs={class:"appearance-action"},ys={key:2,class:"group"},Ps={class:"item social-links"},Ls=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=P(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),i=g(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>i.value?(a(),k(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[r(s).length&&r(n).label?(a(),c("div",_s,[p("p",ms,T(r(n).label),1),(a(!0),c(M,null,E(r(s),d=>(a(),k(ne,{key:d.link,item:d},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",ks,[p("div",bs,[p("p",$s,T(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",gs,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",ys,[p("div",Ps,[m($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Vs=b(Ls,[["__scopeId","data-v-bb2aa2f0"]]),Ss=o=>(C("data-v-e5dd9c1c"),o=o(),H(),o),Ts=["aria-expanded"],Is=Ss(()=>p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)),ws=[Is],Ns=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},ws,10,Ts))}}),Ms=b(Ns,[["__scopeId","data-v-e5dd9c1c"]]),As=["innerHTML"],Bs=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,s)=>(a(),k(D,{class:w({VPNavBarMenuLink:!0,active:r(W)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,As)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Cs=b(Bs,[["__scopeId","data-v-9c663999"]]),Hs=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=P(),s=i=>"component"in i?!1:"link"in i?W(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=g(()=>s(e.item));return(i,u)=>(a(),k(be,{class:w({VPNavBarMenuGroup:!0,active:r(W)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Es=o=>(C("data-v-dc692963"),o=o(),H(),o),Fs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Ds=Es(()=>p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),Os=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=P();return(t,s)=>r(e).nav?(a(),c("nav",Fs,[Ds,(a(!0),c(M,null,E(r(e).nav,n=>(a(),c(M,{key:JSON.stringify(n)},["link"in n?(a(),k(Cs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(F(n.component),q({key:1,ref_for:!0},n.props),null,16)):(a(),k(Hs,{key:2,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Gs=b(Os,[["__scopeId","data-v-dc692963"]]);function Us(o){const{localeIndex:e,theme:t}=P();function s(n){var A,B,S;const i=n.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",d=h&&((S=(B=u.locales)==null?void 0:B[e.value])==null?void 0:S.translations)||null,$=h&&u.translations||null;let L=d,y=$,V=o;const N=i.pop();for(const j of i){let z=null;const J=V==null?void 0:V[j];J&&(z=V=J);const se=y==null?void 0:y[j];se&&(z=y=se);const ae=L==null?void 0:L[j];ae&&(z=L=ae),J||(V=z),se||(y=z),ae||(L=z)}return(L==null?void 0:L[N])??(y==null?void 0:y[N])??(V==null?void 0:V[N])??""}return s}const js=["aria-label"],zs={class:"DocSearch-Button-Container"},qs=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Ws={class:"DocSearch-Button-Placeholder"},Ks=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Us({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",zs,[qs,p("span",Ws,T(r(t)("button.buttonText")),1)]),Ks],8,js))}}),Rs={class:"VPNavBarSearch"},Js={id:"local-search"},Ys={key:1,id:"docsearch"},Qs=_({__name:"VPNavBarSearch",setup(o){const e=()=>null,t=()=>null,{theme:s}=P(),n=I(!1),i=I(!1);K(()=>{});function u(){n.value||(n.value=!0,setTimeout(h,16))}function h(){const L=new Event("keydown");L.key="k",L.metaKey=!0,window.dispatchEvent(L),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}const d=I(!1),$="";return(L,y)=>{var V;return a(),c("div",Rs,[r($)==="local"?(a(),c(M,{key:0},[d.value?(a(),k(r(e),{key:0,onClose:y[0]||(y[0]=N=>d.value=!1)})):f("",!0),p("div",Js,[m(ge,{onClick:y[1]||(y[1]=N=>d.value=!0)})])],64)):r($)==="algolia"?(a(),c(M,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((V=r(s).search)==null?void 0:V.options)??r(s).algolia,onVnodeBeforeMount:y[2]||(y[2]=N=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",Ys,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Xs=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=P();return(t,s)=>r(e).socialLinks?(a(),k($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Zs=b(Xs,[["__scopeId","data-v-0394ad82"]]),xs=["href","rel","target"],ea={key:1},ta={key:2},oa=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=P(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=g(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),u=g(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),h=g(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,$)=>(a(),c("div",{class:w(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(fe)(r(n).link),rel:u.value,target:h.value},[l(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",ea,T(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",ta,T(r(e).title),1)):f("",!0),l(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,xs)],2))}}),na=b(oa,[["__scopeId","data-v-ab179fa1"]]),sa={class:"items"},aa={class:"title"},ra=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=P(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),k(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:v(()=>[p("div",sa,[p("p",aa,T(r(s).label),1),(a(!0),c(M,null,E(r(t),u=>(a(),k(ne,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),ia=b(ra,[["__scopeId","data-v-88af2de4"]]),la=o=>(C("data-v-6aa21345"),o=o(),H(),o),ca={class:"wrapper"},ua={class:"container"},da={class:"title"},va={class:"content"},pa={class:"content-body"},ha=la(()=>p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1)),fa=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=Se(),{hasSidebar:s}=U(),{frontmatter:n}=P(),i=I({});return he(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(u,h)=>(a(),c("div",{class:w(["VPNavBar",i.value])},[p("div",ca,[p("div",ua,[p("div",da,[m(na,null,{"nav-bar-title-before":v(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",va,[p("div",pa,[l(u.$slots,"nav-bar-content-before",{},void 0,!0),m(Qs,{class:"search"}),m(Gs,{class:"menu"}),m(ia,{class:"translations"}),m(zn,{class:"appearance"}),m(Zs,{class:"social-links"}),m(Vs,{class:"extra"}),l(u.$slots,"nav-bar-content-after",{},void 0,!0),m(Ms,{class:"hamburger",active:u.isScreenOpen,onClick:h[0]||(h[0]=d=>u.$emit("toggle-screen"))},null,8,["active"])])])])]),ha],2))}}),_a=b(fa,[["__scopeId","data-v-6aa21345"]]),ma={key:0,class:"VPNavScreenAppearance"},ka={class:"text"},ba=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=P();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",ma,[p("p",ka,T(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),$a=b(ba,[["__scopeId","data-v-b44890b2"]]),ga=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,s)=>(a(),k(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),ya=b(ga,[["__scopeId","data-v-7f31e1f6"]]),Pa=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,s)=>(a(),k(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:v(()=>[O(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ee=b(Pa,[["__scopeId","data-v-19976ae1"]]),La={class:"VPNavScreenMenuGroupSection"},Va={key:0,class:"title"},Sa=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",La,[e.text?(a(),c("p",Va,T(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,s=>(a(),k(Ee,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Ta=b(Sa,[["__scopeId","data-v-8133b170"]]),Ia=o=>(C("data-v-b9ab8c58"),o=o(),H(),o),wa=["aria-controls","aria-expanded"],Na=["innerHTML"],Ma=Ia(()=>p("span",{class:"vpi-plus button-icon"},null,-1)),Aa=["id"],Ba={key:0,class:"item"},Ca={key:1,class:"item"},Ha={key:2,class:"group"},Ea=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=I(!1),s=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:w(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,Na),Ma],8,wa),p("div",{id:s.value,class:"items"},[(a(!0),c(M,null,E(i.items,h=>(a(),c(M,{key:JSON.stringify(h)},["link"in h?(a(),c("div",Ba,[m(Ee,{item:h},null,8,["item"])])):"component"in h?(a(),c("div",Ca,[(a(),k(F(h.component),q({ref_for:!0},h.props,{"screen-menu":""}),null,16))])):(a(),c("div",Ha,[m(Ta,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Aa)],2))}}),Fa=b(Ea,[["__scopeId","data-v-b9ab8c58"]]),Da={key:0,class:"VPNavScreenMenu"},Oa=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=P();return(t,s)=>r(e).nav?(a(),c("nav",Da,[(a(!0),c(M,null,E(r(e).nav,n=>(a(),c(M,{key:JSON.stringify(n)},["link"in n?(a(),k(ya,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(F(n.component),q({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),k(Fa,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Ga=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=P();return(t,s)=>r(e).socialLinks?(a(),k($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Fe=o=>(C("data-v-858fe1a4"),o=o(),H(),o),Ua=Fe(()=>p("span",{class:"vpi-languages icon lang"},null,-1)),ja=Fe(()=>p("span",{class:"vpi-chevron-down icon chevron"},null,-1)),za={class:"list"},qa=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=I(!1);function n(){s.value=!s.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:w(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[Ua,O(" "+T(r(t).label)+" ",1),ja]),p("ul",za,[(a(!0),c(M,null,E(r(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(D,{class:"link",href:h.link},{default:v(()=>[O(T(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),Wa=b(qa,[["__scopeId","data-v-858fe1a4"]]),Ka={class:"container"},Ra=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=I(null),t=Te(oe?document.body:null);return(s,n)=>(a(),k(de,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:v(()=>[s.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",Ka,[l(s.$slots,"nav-screen-content-before",{},void 0,!0),m(Oa,{class:"menu"}),m(Wa,{class:"translations"}),m($a,{class:"appearance"}),m(Ga,{class:"social-links"}),l(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ja=b(Ra,[["__scopeId","data-v-f2779853"]]),Ya={key:0,class:"VPNav"},Qa=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Mn(),{frontmatter:n}=P(),i=g(()=>n.value.navbar!==!1);return Ie("close-screen",t),Z(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,h)=>i.value?(a(),c("header",Ya,[m(_a,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":v(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Ja,{open:r(e)},{"nav-screen-content-before":v(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Xa=b(Qa,[["__scopeId","data-v-ae24b3ad"]]),De=o=>(C("data-v-b7550ba0"),o=o(),H(),o),Za=["role","tabindex"],xa=De(()=>p("div",{class:"indicator"},null,-1)),er=De(()=>p("span",{class:"vpi-chevron-right caret-icon"},null,-1)),tr=[er],or={key:1,class:"items"},nr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:u,hasChildren:h,toggle:d}=$t(g(()=>e.item)),$=g(()=>h.value?"section":"div"),L=g(()=>n.value?"a":"div"),y=g(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),V=g(()=>n.value?void 0:"button"),N=g(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":u.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&d()}function B(){e.item.link&&d()}return(S,j)=>{const z=R("VPSidebarItem",!0);return a(),k(F($.value),{class:w(["VPSidebarItem",N.value])},{default:v(()=>[S.item.text?(a(),c("div",q({key:0,class:"item",role:V.value},Qe(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[xa,S.item.link?(a(),k(D,{key:0,tag:L.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:v(()=>[(a(),k(F(y.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(F(y.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:Ye(B,["enter"]),tabindex:"0"},tr,32)):f("",!0)],16,Za)):f("",!0),S.item.items&&S.item.items.length?(a(),c("div",or,[S.depth<5?(a(!0),c(M,{key:0},E(S.item.items,J=>(a(),k(z,{key:J.text,item:J,depth:S.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),sr=b(nr,[["__scopeId","data-v-b7550ba0"]]),ar=_({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=I(!0);let t=null;return K(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Xe(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),c(M,null,E(s.items,i=>(a(),c("div",{key:i.text,class:w(["group",{"no-transition":e.value}])},[m(sr,{item:i,depth:0},null,8,["item"])],2))),128))}}),rr=b(ar,[["__scopeId","data-v-c40bc020"]]),Oe=o=>(C("data-v-319d5ca6"),o=o(),H(),o),ir=Oe(()=>p("div",{class:"curtain"},null,-1)),lr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},cr=Oe(()=>p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),ur=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=I(null),i=Te(oe?document.body:null);G([s,n],()=>{var h;s.open?(i.value=!0,(h=n.value)==null||h.focus()):i.value=!1},{immediate:!0,flush:"post"});const u=I(0);return G(e,()=>{u.value+=1},{deep:!0}),(h,d)=>r(t)?(a(),c("aside",{key:0,class:w(["VPSidebar",{open:h.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=Ze(()=>{},["stop"]))},[ir,p("nav",lr,[cr,l(h.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k(rr,{items:r(e),key:u.value},null,8,["items"])),l(h.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),dr=b(ur,[["__scopeId","data-v-319d5ca6"]]),vr=_({__name:"VPSkipLink",setup(o){const e=ee(),t=I();G(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),c(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),pr=b(vr,[["__scopeId","data-v-0f60ec36"]]),hr=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=ee();G(()=>n.path,s),bt(e,s);const{frontmatter:i}=P(),u=xe(),h=g(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",h),(d,$)=>{const L=R("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:w(["Layout",r(i).pageClass])},[l(d.$slots,"layout-top",{},void 0,!0),m(pr),m(st,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),m(Xa,null,{"nav-bar-title-before":v(()=>[l(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[l(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[l(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[l(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[l(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Nn,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(dr,{open:r(e)},{"sidebar-nav-before":v(()=>[l(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[l(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(un,null,{"page-top":v(()=>[l(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[l(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[l(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[l(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[l(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[l(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[l(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[l(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[l(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[l(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[l(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[l(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[l(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[l(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[l(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[l(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(fn),l(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(L,{key:1}))}}}),fr=b(hr,[["__scopeId","data-v-5d98c3a5"]]),ye={Layout:fr,enhanceApp:({app:o})=>{o.component("Badge",tt)}},mr={extends:ye,Layout:()=>et(ye.Layout,null,{}),enhanceApp({app:o,router:e,siteData:t}){}};export{mr as R}; diff --git a/web/src/main/javascript/public/assets/curation_process.CwbRUQ02.png b/web/src/main/javascript/public/assets/curation_process.CwbRUQ02.png new file mode 100644 index 00000000..35ce3689 Binary files /dev/null and b/web/src/main/javascript/public/assets/curation_process.CwbRUQ02.png differ diff --git a/web/src/main/javascript/public/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/web/src/main/javascript/public/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 00000000..b6b603d5 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/web/src/main/javascript/public/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 00000000..def40a4f Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/web/src/main/javascript/public/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 00000000..e070c3d3 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/web/src/main/javascript/public/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 00000000..a3c16ca4 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/web/src/main/javascript/public/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 00000000..2210a899 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-italic-latin.C2AdPX0b.woff2 b/web/src/main/javascript/public/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 00000000..790d62dc Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/web/src/main/javascript/public/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 00000000..1eec0775 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/web/src/main/javascript/public/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 00000000..2cfe6153 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/web/src/main/javascript/public/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 00000000..e3886dd1 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/web/src/main/javascript/public/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 00000000..36d67487 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-roman-greek.BBVDIX6e.woff2 b/web/src/main/javascript/public/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 00000000..2bed1e85 Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/web/src/main/javascript/public/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 00000000..9a8d1e2b Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-roman-latin.Di8DUHzh.woff2 b/web/src/main/javascript/public/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 00000000..07d3c53a Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/web/src/main/javascript/public/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/web/src/main/javascript/public/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 00000000..57bdc22a Binary files /dev/null and b/web/src/main/javascript/public/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/web/src/main/javascript/public/assets/mapping.md.CdddfsKe.js b/web/src/main/javascript/public/assets/mapping.md.CdddfsKe.js new file mode 100644 index 00000000..fc59130b --- /dev/null +++ b/web/src/main/javascript/public/assets/mapping.md.CdddfsKe.js @@ -0,0 +1,2 @@ +import{_ as e,c as t,o,a3 as a}from"./chunks/framework.CyEiTwkJ.js";const m=JSON.parse('{"title":"Contents","description":"","frontmatter":{},"headers":[],"relativePath":"mapping.md","filePath":"mapping.md"}'),d={name:"mapping.md"},n=a(`

Contents

OncoTree to OncoTree Mapping Tool

The OncoTree Mapping tool was developed to facilitate the mapping of OncoTree codes between different OncoTree release versions. Below you can find basic instructions in the "Running the tool" section, and a detailed walkthrough in the "Tutorial" section.

Setting up and downloading the tool

As of January 2020, the sun has set on Python 2.X. If you are still using Python 2.X, we encourage you to use Python 3.6 and above, but here is the last version of the code to work with Python 2.X. In the future, only Python 3.X versions of this tool will be supported.

Click here to download the script: oncotree_to_oncotree.py

Running the tool

The OncoTree Mapping tool can be run with the following command:

python3 <path/to/scripts/oncotree_to_oncotree.py> --source-file <path/to/source/file> --target-file <path/to/target/file> --source-version <source_oncotree_version> --target-version <target_oncotree_version>

Options

  • -i | --source-file: This is the source clinical file path. It must contain ONCOTREE_CODE in the file header and it must contain OncoTree codes corresponding to the <source_oncotree_version>. Read more about the cBioPortal clinical file format here.
  • -o | --target-file: This is the path to the target clinical file that will be generated. It will contain mapped OncoTree codes from <source_oncotree_version>-to-<target_oncotree_version>.
  • -s | --source-version: This is the source OncoTree version. The OncoTree codes in the source file must correspond to this version.
  • -t | --target-version: This is the target OncoTree version that the script will attempt to map the source file OncoTree codes to.

The list of OncoTree versions available are viewable here or on the dropdown menu of the OncoTree home page.

Note: the source file should not contain embedded line breaks within any single cell in the table, such as those created by using the keyboard combinations Alt-Enter or Command-Option-Enter while editing a cell in Microsoft Excel.

For a detailed walkthrough of running the tool, see the "Tutorial" section below.

Output

The OncoTree Mapper Tool will automatically replace the value in the ONCOTREE_CODE column with the mapped code if available. The tool will also add a new column called ONCOTREE_CODE_OPTIONS containing suggestions for OncoTree codes if one or more nodes could not be directly mapped. The ONCOTREE_CODE_OPTIONS column formats its suggestions differently depending on the mapping results. Possible suggestion formats and corresponding examples are shown below.

1. Unambiguous Direct Mappings

Unambiguous direct mappings occur when an OncoTree code maps directly to a single code in the target version. In this case, the ONCOTREE_CODE_OPTIONS column will be left blank, and the mapped code will be automatically placed in the ONCOTREE_CODE column. Unambiguous direct mappings are checked for addition of more granular nodes; to see how this may affect the ONCOTREE_CODE_OPTIONS column formatting, please refer to the subsection below "4. More Granular Nodes Introduced".

2. Ambiguous Direct Mappings

Ambiguous direct mappings occur when an OncoTree code maps to multiple codes in the target version. The ONCOTREE_CODE_OPTIONS column formats the output as follows:

'Source Code' -> {'Code 1', 'Code 2', 'Code 3', }   e.g. ALL -> {TLL, BLL}

Example: Schema describing the revocation of OncoTree node ALL is mapped to multiple nodes.

In oncotree_2018_05_01, ALL had two children: TALL and BALL. On release oncotree_2018_06_01, the ALL node was discontinued and the TALL node was renamed TLL and the BALL node was renamed BLL.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

ALL -> {TLL, BLL}

Ambiguous direct mappings are also checked for addition of more granular nodes; to see how this may affect the ONCOTREE_CODE_OPTIONS column formatting, please refer to the subsection below "4. More Granular Nodes Introduced".

3. No Direct Mappings

No direct mappings occur when the source OncoTree code is unrelated to any OncoTree code in the target version. One such possibility is mapping a newly introduced OncoTree code backwards in time. In this case, the tool finds the closest set of neighbors (e.g parents and children) which are mappable in the target version. The ONCOTREE_CODE_OPTIONS column returns the set with the keyword Neighbors as follows:

'Source Code' -> Neighbors {'Code 1', 'Code 2', 'Code 3', }   e.g. UPA -> Neighbors {BLADDER}

Example: Schema describing a case where new OncoTree node UPA cannot be directly mapped backwards to a node.

In oncotree_2019_03_01, UPA was added to the OncoTree as a child node of BLADDER. Because UPA did not exist in previous version oncotree_2018_05_01 and did not replace any existing node, the tool uses the surrounding nodes when mapping backwards. In this case, the parent node BLADDER is returned as the closest match.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

UPA -> Neighbors {BLADDER}

4. More Granular Nodes Introduced

In certain cases, the target version can also introduce nodes with more specific descriptions. When this occurs, the tool will add the string more granular choices introduced to the existing text in the ONCOTREE_CODE_OPTIONS column as follows:

'Source Code' -> {'Code 1', }, more granular choices introduced e.g. TALL -> {TLL}, more granular choices introduced

Example: Schema describing a case where OncoTree node TALL is mapped to a node with more granular children

In oncotree_2019_03_01, TALL was a leaf node with no children. In release oncotree_2019_06_01, TLL was introduced as a replacement for TALL with additional children ETPLL and NKCLL.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

TALL -> {TLL}, more granular choices introduced

5. Invalid Source OncoTree Code

An invalid source OncoTree Code means the provided code cannot be found in the source version. In such a case, mapping cannot be attempted and the ONCOTREE_CODE_OPTIONS column displays the following:

'Source Code' -> ???, OncoTree code not in source OncoTree version

Tutorial

The following tutorial will guide the user through using the oncotree_to_oncotree.py tool. The tutorial will go through the expected output to highlight specific mapping cases. Additionally, the tutorial will cross-reference the output with the generated mapping summary to demonstrate how it can be used to aid in manual selection of unresolved nodes.

Step 1

Download the sample input file (data_clinical_sample.txt) from here .

Step 2

Download oncotree_to_oncotree.py from here .

Step 3

Run the following command from the command line:

python oncotree_to_oncotree.py -i data_clinical_sample.txt -o data_clinical_sample_remapped.txt -s oncotree_2018_03_01 -t oncotree_2019_03_01

The tool will output two files: data_clinical_sample_remapped.txt and data_clinical_sample_remapped_summary.html. For your reference, you can see the expected output files - here and here

Step 4

Examine data_clinical_sample_remapped.txt; the first five columns of the file should look as follows:

PATIENT_IDSAMPLE_IDAGE_AT_SEQ_REPORTONCOTREE_CODEONCOTREE_CODE_OPTIONS
P1S141ALL -> {BLL,TLL}, more granular choices introduced
P2S260BALL -> {BLL}, more granular choices introduced
P3S3<18TALL -> {TLL}, more granular choices introduced
P4S471PTCL
P5S564PTCL
P6S636CHL -> {CHL}, more granular choices introduced
P7S763SpCC -> ???, OncoTree code not in source OncoTree version
P8S863MCL -> {MCL}, more granular choices introduced
P9S973HGNEE -> ???, OncoTree code not in source OncoTree version
P10S1052ONCOTREE_CODE column blank : use a valid OncoTree code or "NA"
P11S1177NA
P12S1287TNKL -> {MTNN}, more granular choices introduced
P13S1379HIST -> {HDCN}, more granular choices introduced
P14S1453CLLSLL
P15S1569CLLSLL
P16S1665LEUK -> {MNM}, more granular choices introduced
P17S1766MYCF
P18S1866RBL

Step 5

Using values in the ONCOTREE_CODE_OPTIONS as a guide, manually select and place an OncoTree Code in the ONCOTREE_CODE column. For additional information, refer to the summary file data_clinical_sample_remapped_summary.html. Repeat for all rows in the output file. Several examples are shown below.

Sample 1
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S1ALL -> {BLL,TLL}, more granular choices introduced

Source OncoTree code ALL maps directly to codes BLL and TLL. Users should place either BLL or TLL in the ONCOTREE_CODE column. The ONCOTREE_CODE_OPTIONS column also notes that more granular choices were introduced; as such, users can use the summary file for additional guidance.

Searching by source code, the following information can be found in the summary file:

The summary file provides a link to the closest shared parent node LNM; users can choose more granular nodes by referencing the provided tree:

Sample 2
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S2BALL -> {BLL}, more granular choices introduced

Source OncoTree code BALL maps directly to BLL. Users should place BLL in the ONCOTREE_CODE column. However, similar to sample 1, the ONCOTREE_CODE_OPTIONS indicates there are more granular choices available. Users can follow the same steps as above and use the summary file to select a more granular node.

Sample 4
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S4PTCL

No additional resolution is needed; the previous OncoTree code was already automatically mapped to PTCL and placed in the ONCOTREE_CODE column. ONCOTREE_CODE_OPTIONS is empty because no manual selections were necessary.

Sample 9
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S4HGNEE -> ???, OncoTree code not in source OncoTree version

Source OncoTree code HGNEE was not found in the source OncoTree version and therefore could not be mapped. Users can either reassign a new source OncoTree code (and rerun the script) or remove the sample.

Step 6

After filling in the ONCOTREE_CODE column with an OncoTree code for each sample, use an editor (e.g. Microsoft Excel, vim, etc.) to trim off the ONCOTREE_CODE_OPTIONS column. The resulting file will be a new data_clinical_sample.txt file with all codes mapped to the target version. The first four columns of the final result is shown below:

PATIENT_IDSAMPLE_IDAGE_AT_SEQ_REPORTONCOTREE_CODE
P1S141BLL
P2S260BLL
P3S3<18TLL
P4S471PTCL
P5S564PTCL
P6S636CHL
P7S763SPCC
P8S863MCL
P10S1052NA
P11S1177NA
P12S1287MTNN
P13S1379HDCN
P14S1453CLLSLL
P15S1569CLLSLL
P16S1665MNM
P17S1766MYCF
P18S1866RBL

Ontology to Ontology Mapping Tool

The Ontology Mapping tool was developed to facilitate the mapping between different cancer classification systems. We currently support mapping between OncoTree, ICD-O, NCIt, UMLS and HemeOnc systems. The tool and the mapping file (the mapping file does not need to be downloaded to run the tool) can be found here

Prerequisites

The Ontology Mapping tool runs on python 3 and requires pandas and requests libraries. These libraries can be installed using

pip3 install pandas
+pip3 install requests

Running the tool

The Ontology Mapping tool can be run with the following command:

python <path/to/scripts/ontology_to_ontology_mapping_tool.py> --source-file <path/to/source/file> --target-file <path/to/target/file> --source-code <source_ontology_code> --target-code <target_ontology_code>

Options

  • i | --source-file: This is the source file path. The source file must contain one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE in the file header and it must contain codes corresponding to the Ontology System.
  • o | --target-file: This is the path to the target file that will be generated. It will contain ontologies mapped from source code in <source-file> to <target-code>.
  • s | --source-code: This is the source ontology code in <source-file>. It must be one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE.
  • t | --target-code: This is the target ontology code that the script will attempt to map the source file ontology code to. It must be one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE.

Note

  • The source file should be tab delimited and should contain one of the ontology: ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE in the file header.
  • We currently are allowing only one ontology to another ontology mapping. In the future, we plan to extend the tool to support mapping to multiple ontology systems.
`,88),r=[n];function c(i,l,s,h,p,u){return o(),t("div",null,r)}const O=e(d,[["render",c]]);export{m as __pageData,O as default}; diff --git a/web/src/main/javascript/public/assets/mapping.md.CdddfsKe.lean.js b/web/src/main/javascript/public/assets/mapping.md.CdddfsKe.lean.js new file mode 100644 index 00000000..a9708c19 --- /dev/null +++ b/web/src/main/javascript/public/assets/mapping.md.CdddfsKe.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o,a3 as a}from"./chunks/framework.CyEiTwkJ.js";const m=JSON.parse('{"title":"Contents","description":"","frontmatter":{},"headers":[],"relativePath":"mapping.md","filePath":"mapping.md"}'),d={name:"mapping.md"},n=a("",88),r=[n];function c(i,l,s,h,p,u){return o(),t("div",null,r)}const O=e(d,[["render",c]]);export{m as __pageData,O as default}; diff --git a/web/src/main/javascript/public/assets/news.md.ZGge0dYE.js b/web/src/main/javascript/public/assets/news.md.ZGge0dYE.js new file mode 100644 index 00000000..a6316151 --- /dev/null +++ b/web/src/main/javascript/public/assets/news.md.ZGge0dYE.js @@ -0,0 +1 @@ +import{_ as l,c as i,o as r,a3 as a,j as e,a as o}from"./chunks/framework.CyEiTwkJ.js";const y=JSON.parse('{"title":"News","description":"","frontmatter":{},"headers":[],"relativePath":"news.md","filePath":"news.md"}'),t={name:"news.md"},n=a('

News

November 2, 2021

  • New Stable Release OncoTree version oncotree_2021_11_02 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_10_01.
  • New nodes added:
    • Desmoplastic/Nodular Medulloblastoma, NOS (DMBLNOS)
    • Desmoplastic/Nodular Medulloblastoma, SHH Subtype (DMBLSHH)
    • Anaplastic Medulloblastoma, NOS (AMBLNOS)
    • Anaplastic Medulloblastoma, Non-WNT, Non-SHH (AMBLNWS)
    • Anaplastic Medulloblastoma, Group 3 (AMBLNWSG3)
    • Anaplastic Medulloblastoma, Group 4 (AMBLNWSG4)
    • Anaplastic Medulloblastoma, SHH Subtype (AMBLSHH)
    • Medulloblastoma, NOS (MBLNOS)
    • Medulloblastoma, Non-WNT, Non-SHH (MBLNWS)
    • Medulloblastoma, Group 3 (MBLG3)
    • Medulloblastoma, Group 4 (MBLG4)
    • Medulloblastoma, SHH Subtype (MBLSHH)
    • Medulloblastoma, WNT Subtype (MBLWNT)
    • Medulloblastoma with Extensive Nodularity, NOS (MBENNOS)
    • Medulloblastoma with Extensive Nodularity, SHH Subtype (MBENSHH)
    • Pancreatic Neuroendocrine Carcinoma (PANEC) in the original version of this news release this node was accidentally omitted
  • Nodes reclassified
    • The following list of oncotree codes had the mainType shortened to drop the suffix "NOS": ADRENAL_GLAND, AMPULLA_OF_VATER, BILIARY_TRACT, BLADDER, BONE, BOWEL, BRAIN, BREAST, CERVIX, EYE, HEAD_NECK, KIDNEY, LIVER, LUNG, LYMPH, MYELOID, OTHER, OVARY, PANCREAS, PENIS, PERITONEUM, PLEURA, PNS, PROSTATE, SKIN, SOFT_TISSUE, STOMACH, TESTIS, THYMUS, THYROID, UTERUS, VULVA
    • Cholangiocarcinoma (CHOL) now has direct parent Intraductal Papillary Neoplasm of the Bile Duct (IPN) [previously: Biliary Tract (BILIARY_TRACT)]
    • Gallbladder Cancer (GBC) now has direct parent Intracholecystic Papillary Neoplasm (ICPN) [previously: Biliary Tract (BILIARY_TRACT)]
  • oncotree candidate release version additions:
    • Three new nodes intended only for version oncotree_candidate_release were added (NVRINT, MPNWP, MDSWP). These nodes will not be incorperated into oncotree latest stable.
  • resources added
    • rdf formatted OWL ontology and taxomomy files for recent oncotree versions have been added to our github repository. They can be explored here .

November 4, 2020

  • Ontology to Ontology Mapping tool available
    • The Ontology Mapping tool was developed to facilitate the mapping between different cancer classification systems. We currently support mapping between OncoTree, ICD-O, NCIt, UMLS and HemeOnc systems.
    • A mapping file containing mappings between the different ontologies and OncoTree codes as well as a python script to run the mapping is available on the OncoTree GitHub page . Details are also available on the Mapping Tools page .
    • The mapping file is expected to grow as we curate more ontology mappings for OncoTree codes.

October 1, 2020

  • New Stable Release OncoTree version oncotree_2020_10_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_04_01.
  • New nodes added:
    • Basal Cell Carcinoma of Prostate (BCCP)
  • Node deleted:
    • Porphyria Cutania Tarda (PCT)
  • Node with updated name:
    • Goblet Cell Adenocarcinoma of the Appendix (GCCAP) [previously: Goblet Cell Carcinoid of the Appendix (GCCAP)].

April 1, 2020

  • New Stable Release OncoTree version oncotree_2020_04_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_02_06.
  • New nodes added:
    • AML with Variant RARA translocation (AMLRARA)
  • Nodes reclassified:
    • Mixed Cancer Types (MIXED is now a child of Other (OTHER) [previously under: Cancer of Unknown Primary (CUP)].

February 6, 2020

  • Web Link To Specific Nodes Available:
    • When providing web links to oncotree, you may include a search term as an optional argument and the oncotree you reference will be displayed with the search term located and highlighted. Use of this mechanism can be seen in the example output for the OncoTree-to-OncoTree code mapping tool.
    • As an example, you can provide a direct link to the TumorType node PANET in oncotree version oncotree_2019_12_01 with this link: http://oncotree.mskcc.org/#/home?version=oncotree_2019_12_01&search_term=(PANET)
  • New Stable Release OncoTree version oncotree_2020_02_06 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_02_01.
  • Nodes reclassified:
    • Gallbladder Cancer (GBC) is now a child of Biliary Tract (BILIARY_TRACT) [previously under: Intracholecystic Papillary Neoplasm (ICPN)].
    • Cholangiocarcinoma (CHOL) is now a child of Biliary Tract (BILIARY_TRACT) [previously under: Intraductal Papillary Neoplasm of the Bile Duct (IPN)].

February 1, 2020

  • New Stable Release OncoTree version oncotree_2020_02_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_12_01.
  • New nodes added:
    • Intraductal Oncocytic Papillary Neoplasm (IOPN)
    • Intraductal Tubulopapillary Neoplasm (ITPN)
    • Intracholecystic Papillary Neoplasm (ICPN)
    • Intraductal Papillary Neoplasm of the Bile Duct (IPN)
  • Nodes reclassified:
    • Gallbladder Cancer (GBC) is now a child of Intracholecystic Papillary Neoplasm (ICPN) [previously under: Biliary Tract (BILIARY_TRACT)].
    • Cholangiocarcinoma (CHOL) is now a child of Intraductal Papillary Neoplasm of the Bile Duct (IPN) [previously under: Biliary Tract (BILIARY_TRACT)].

December 1, 2019

  • New Stable Release OncoTree version oncotree_2019_12_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_08_01.
  • New nodes added:
    • Low-grade Appendiceal Mucinous Neoplasm (LAMN)

August 1, 2019

  • New Stable Release OncoTree version oncotree_2019_08_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_05_01.
  • New nodes added:
    • Lacrimal Gland Tumor (LGT)
    • Adenoid Cystic Carcinoma of the Lacrimal Gland (ACLG)
    • Squamous Cell Carcinoma of the Lacrimal Gland (SCLG)
    • Basal Cell Adenocarcinoma (BCAC)
    • Carcinoma ex Pleomorphic Adenoma (CAEXPA)
    • Pleomorphic Adenoma (PADA)
    • Polymorphous Adenocarcinoma (PAC)
    • Atypical Lipomatous Tumor (ALT)

May 2, 2019

  • OncoTree-to-OncoTree code mapping tool updated
    • The OncoTree-to-OncoTree mapping tool (now version 1.2) has been updated:
      • it no longer requires the installation of the python 'requests' module
      • it now is able to handle input files where lines end in carriage return (such as files saved from Microsoft Excel)

May 1, 2019

  • New Stable Release OncoTree version oncotree_2019_05_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_03_01.
  • Nodes reclassified
    • Intestinal Ampullary Carcinoma (IAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Mixed Ampullary Carcinoma (MAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Pancreatobiliary Ampullary Carcinoma (PAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Ependymoma (EPM) MainType is now Glioma [previously: CNS Cancer]
    • Rosai-Dorfman Disease (RDD) MainType is now Histiocytosis [previously: Histiocytic Disorder]

March 26, 2019

  • OncoTree-to-OncoTree code mapping tool updated
    • The OncoTree-to-OncoTree mapping tool (now version 1.1) has been slightly improved, mainly by adding a separate section in the output summary for reporting OncoTree codes which were replaced automatically. Also, additional documentation and description of the tool has been added under the "Mapping Tools" tab.

March 14, 2019

  • OncoTree-to-OncoTree code mapping tool available
    • A python program is now available for download under the webpage tab labeled "Mapping Tools". This tool will rewrite OncoTree codes in a tabular clinical data file, mapping from one version of OncoTree to another. When additional guidance is necessary, the program will insert a column containing options and comments next to the ONCOTREE_CODE column. After selecting an appropriate OncoTree code for cases which require action, this extra column can be deleted to produce a fully re-mapped clinical data file. More details about this tool and how to use it are available under the "Mapping Tools" tab.
    • The OncoTree-to-OncoTree mapping tool relies on an expanded model of OncoTree node history. This is reflected in the Web API schema for Tumor Types, which now has added properties called "precursors" and "revocations". Using these properties, and the existing "history" property, the tool is able to make proper mappings across OncoTree versions, and give suggestions when no clear mapping is available. It is also reflected in the main tree visualization of OncoTree, where a combination of these properties (when set) will be displayed in the pop-up information box with label "Previous Codes".

March 1, 2019

  • New Stable Release OncoTree version oncotree_2019_03_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_02_01.
  • New node added:
    • NUT Carcinoma of the Lung (NUTCL)
  • Node with renamed OncoTree code:
    • Monomorphic Epitheliotropic Intestinal T-Cell Lymphoma (MEITL) [previously: MEATL]
  • Node with renamed OncoTree code and updated name:
    • Germ Cell Tumor with Somatic-Type Malignancy (GCTSTM) [previously: Teratoma with Malignant Transformation (TMT)]
  • Cross-version OncoTree code mapping tool coming soon
    • Development of a tool to map OncoTree codes between different versions of OncoTree is nearing completion.
    • Related to this, users of the OncoTree Web API should be aware that we will soon be adding two additional properties to the output schema returned by the api/tumorTypes endpoints. The properties "precursors" and "revocations" will be added alongside the "history" property (having the same type: an array of strings). These will help distinguish the kinds of possible relationships to OncoTree nodes in prior versions of OncoTree. We expect this new schema to be backwards compatible, but if your language or tools requires an exactly matching JSON schema you will need to make adjustments.

February 1, 2019

  • New Stable Release OncoTree version oncotree_2019_02_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_11_01.
  • New node added:
    • Leiomyoma (LM)

November 1, 2018

  • New Stable Release OncoTree version oncotree_2018_11_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_09_01.
  • New nodes added:
    • Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach (GINETES)
    • High-Grade Neuroendocrine Carcinoma of the Esophagus (HGNEE)
    • High-Grade Neuroendocrine Carcinoma of the Stomach (HGNES)
  • Nodes reclassified:
    • Well-Differentiated Neuroendocrine Tumors of the Stomach (SWDNET) is now a child of Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach (GINETES) [previously under: Bowel (BOWEL)].

September 1, 2018

  • New Stable Release OncoTree version oncotree_2018_09_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_08_01.
  • Nodes with adjusted History:
    • Myeloid Neoplasm (MNM) previous code: LEUK
    • B-Lymphoblastic Leukemia/Lymphoma (BLL) previous code: BALL
    • T-Lymphoblastic Leukemia/Lymphoma (TLL) previous code: TALL
    • Essential Thrombocythemia (ET) previous code: ETC
    • Polycythemia Vera (PV) previous code: PCV
    • Diffuse Large B-Cell Lymphoma, NOS (DLBCLNOS) previous code: DLBCL
    • Sezary Syndrome (SS) previous code: SEZS

August 1, 2018

  • New Stable Release OncoTree version oncotree_2018_08_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_07_01.
  • New nodes added:
    • Angiomatoid Fibrous Histiocytoma (AFH)
    • Clear Cell Sarcoma of Kidney (CCSK)
    • Ewing Sarcoma of Soft Tissue (ESST)
    • Extra Gonadal Germ Cell Tumor (EGCT)
    • Infantile Fibrosarcoma (IFS)
    • Malignant Glomus Tumor (MGST)
    • Malignant Rhabdoid Tumor of the Liver (MRTL)
    • Myofibromatosis (IMS)
    • Sialoblastoma (SBL)
    • Undifferentiated Embryonal Sarcoma of the Liver (UESL)

July 1, 2018

  • New Stable Release OncoTree version oncotree_2018_07_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_06_15.
  • Node with renamed OncoTree code:
    • Atypical Chronic Myeloid Leukemia, BCR-ABL1- (ACML) [previously: aCML]

June 15, 2018

  • New Stable Release OncoTree version oncotree_2018_06_15 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_06_01.
  • Nodes reclassified
    • Mature B-Cell Neoplasms (MBN) and Mature T and NK Neoplasms (MTNN) and their subnodes were relocated to be under Non-Hodgkin Lymphoma (NHL).
    • Rosai-Dorfman Disease (RDD) was relocated to be under Histiocytic and Dendritic Cell Neoplasms (HDCN). Previously RDD was under Lymphoid Neoplasm (LNM) in the Lymphoid category.

June 1, 2018

  • New Stable Release OncoTree version oncotree_2018_06_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_05_01.
  • Blood and Lymph subtrees replaced with new Myeloid and Lymphoid subtrees:
    • 23 nodes in the previous Blood subtree have been deleted or relocated/renamed. Affected OncoTree codes from this tree: BLOOD, BPDCN, HIST, LCH, ECD, LEUK, ALL, BALL, TALL, AMOL, AML, CLL, CML, CMML, HCL, LGLL, MM, MDS, MPN, ETC, MYF, PCV, SM
    • 28 nodes in the previous Lymph subtree have been deleted or relocated/renamed. Affected OncoTree codes from this tree: LYMPH, HL, CHL, NLPHL, NHL, BCL, BL, DLBCL, MALTL, FL, MCL, MZL, MBCL, NMZL, PCNSL, PEL, SLL, SMZL, WM, TNKL, CTCL, MYCF, SEZS, PTCL, ALCL, AITL, PTCLNOS, RD
    • 122 nodes in the current Lymphoid subtree have been added or relocated/renamed from previous subtrees. OncoTree codes in this new subtree are: LYMPH, LATL, LBGN, LNM, BLL, BLLRGA, BLLHYPER, BLLHYPO, BLLIAMP21, BLLETV6RUNX1, BLLTCF3PBX1, BLLIL3IGH, BLLBCRABL1, BLLKMT2A, BLLBCRABL1L, BLLNOS, HL, CHL, LDCHL, LRCHL, MCCHL, NSCHL, NLPHL, MBN, ALKLBCL, AHCD, BCLU, BPLL, BL, BLL11Q, CLLSLL, DLBCLCI, DLBCLNOS, ABC, GCB, EBVDLBCLNOS, EBVMCU, EP, FL, DFL, ISFN, GHCD, HHV8DLBCL, HCL, HGBCL, HGBCLMYCBCL2, IVBCL, LBLIRF4, LYG, LPL, WM, MCL, ISMCL, MZL, EMALT, NMZL, SMZL, MCBCL, MGUS, MGUSIGA, MGUSIGG, MGUSIGM, MIDD, MIDDA, MIDDO, MHCD, PTFL, PCM, PLBL, PCLBCLLT, PCFCL, PCNSL, PEL, PMBL, SPB, SBLU, HCL-V, SDRPL, THRLBCL, MTNN, ATLL, ANKL, ALCL, ALCLALKN, ALCLALKP, BIALCL, AITL, CLPDNK, EATL, ENKL, FTCL, HSTCL, HVLL, ITLPDGI, MEATL, MYCF, NPTLTFH, PTCL, PCATCL, PCLPD, LYP, PCALCL, PCSMTPLD, PCAECTCL, PCGDTCL, SS, SPTCL, SEBVTLC, TLGL, TPLL, NHL, PTLD, CHLPTLD, FHPTLD, IMPTLD, MPTLD, PHPTLD, PPTLD, RDD, TLL, ETPLL, NKCLL
    • 101 nodes in the current Myeloid subtree have been added or relocated/renamed from previous subtrees. OncoTree codes in this new subtree are: MYELOID, MATPL, MBGN, MNM, ALAL, AUL, MPALBCRABL1, MPALKMT2A, MPALBNOS, MPALTNOS, AML, AMLMRC, AMLRGA, AMLRBM15MKL1, AMLBCRABL1, AMLCEBPA, AMLNPM1, AMLRUNX1, AMLCBFBMYH11, AMLGATA2MECOM, AMLDEKNUP214, AMLRUNX1RUNX1T1, AMLMLLT3KMT2A, APLPMLRARA, AMLNOS, AM, AMLMD, AWM, ABL, AMKL, AMOL, AMML, APMF, PERL, MPRDS, MLADS, TAM, MS, TMN, TAML, TMDS, BPDCN, HDCN, JXG, ECD, FRCT, FDCS, HS, IDCT, IDCS, LCH, LCS, MCD, CMCD, MCSL, SM, ASM, ISM, SMMCL, SSM, SMAHN, MDS, MDSEB, MDSEB1, MDSEB2, MDSID5Q, MDSMD, MDSRS, MDSRSMD, MDSRSSLD, MDSSLD, MDSU, RCYC, MDS/MPN, aCML, CMML, CMML0, CMML1, CMML2, JMML, MDSMPNRST, MDSMPNU, MNGLP, MLNER, MLNFGFR1, MLNPCM1JAK2, MLNPDGFRA, MLNPDGFRB, MPN, CELNOS, CML, CMLBCRABL1, CNL, ET, ETMF, MPNU, PV, PVMF, PMF, PMFPES, PMFOFS
  • Nodes reclassified
    • Adrenocortical Adenoma (ACA) MainType is now Adrenocortical Adenoma [previously: Adrenocortical Carcinoma]
    • Ampulla of Vater (AMPULLA_OF_VATER) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Parathyroid Cancer (PTH) MainType is now Parathyroid Cancer [previously: Head and Neck Cancer]
    • Parathyroid Carcinoma (PTHC) MainType is now Parathyroid Cancer [previously: Head and Neck Cancer]
    • Follicular Dendritic Cell Sarcoma (FDCS) was moved from the Soft Tissue subtree into the Myeloid subtree with direct parent Histiocytic and Dendritic Cell Neoplasms (HDCN)
    • Interdigitating Dendritic Cell Sarcoma (IDCS) was moved from the Soft Tissue subtree into the Myeloid subtree with direct parent Histiocytic and Dendritic Cell Neoplasms (HDCN)
  • New nodes added:
    • Inverted Urothelial Papilloma (IUP)
    • Urothelial Papilloma (UPA)
    • Oncocytic Adenoma of the Thyroid (OAT)
  • Character set simplification
    • Salivary Gland-Type Tumor of the Lung (SGTTL) used to contain a unicode character for a horizontal dash. This punctuation mark is now a hyphen.

May 1, 2018

  • New Stable Release OncoTree version oncotree_2018_05_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_04_01.
  • New nodes added:
    • Primary CNS Melanocytic Tumors (PCNSMT)
    • Melanocytoma (MELC)
  • Node reclassified
    • Primary CNS Melanoma (PCNSM) now is a child of Primary CNS Melanocytic Tumors (PCNSMT) [previously under: CNS/Brain].

April 23, 2018

',44),s=e("ul",null,[e("li",null,[e("strong",null,"New Web API Version Available"),e("ul",null,[e("li",null,[o("A new version (v1.0.0) of the OncoTree Web API is available. It can be explored here: "),e("a",{href:"http://oncotree.mskcc.org/swagger-ui.html",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/swagger-ui.html"),o(),e("br"),o(" The previous version is still available, but is scheduled to be discontinued May 31, 2018 You can continue to access the previous version (v0.0.1) in its original location summarized here: ~~"),e("a",{href:"http://oncotree.mskcc.org/oncotree/swagger-ui.html~~",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/oncotree/swagger-ui.html~~")])])]),e("li",null,[e("strong",null,"Details and Migration Guidance"),e("ul",null,[e("li",null,[o("The base URL for accessing all API functionality is being simplified from ~~"),e("a",{href:"http://oncotree.mskcc.org/oncotree/~~",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/oncotree/~~"),o(" to "),e("a",{href:"http://oncotree.mskcc.org/",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/")]),e("li",null,[e("span",{class:"oi oi-warning text-danger","aria-hidden":"true"}),o(" The /api/tumor_types.txt endpoint is now deprecated. It is scheduled for deletion as part of the next API version release.")]),e("li",null,[o("Most endpoint paths in the API remain the same and provide the same services. Exceptions are: "),e("ul",null,[e("li",null,'/api/tumorTypes used to accept a query parameter ("flat") which controlled the output format for receiving a tree representation or a flat representation of the full set of TumorTypes. Now this endpoint always returns a flat list of all TumorTypes and a new endpoint path (/api/tumorTypes/tree) is used to retrieve a tree representation of the OncoTree. Previous requests which included "flat=false" should be adjusted to use the /api/tumorTypes/tree endpoint. Otherwise "flat=true" should be dropped from the request.'),e("li",null,'/api/tumorTypes used to accept a query parameter ("deprecated") which is no longer recognized. This parameter should be dropped from requests. Deprecated OncoTree codes can instead be found in the history attribute of the response.'),e("li",null,"the POST request endpoint (/api/tumorTypes/search) which accepted a list of TumorType queries has been deprecated and is no longer available through the swagger-ui interface. The GET request endpoint /api/tumorTypes/search/{type}/{query} remains available as before. If you previously submitted an array of query requests, you should iterate through the array and call the GET request endpoint to make one query per request.")])]),e("li",null,[o("The output format (schema) of many endpoints has been simplified. You will need to adjust your result handling accordingly. Changes include: "),e("ul",null,[e("li",null,'responses no longer include a "meta" element with associated code and error messages. Instead HTTP status codes are set appropriately and error messages are supplied in message bodies. Responses also no longer contain a "data" element. Objects representing the API output are directly returned instead.'),e("li",null,"MainType values are no longer modeled as objects. Each MainType value is now represented as a simple string. The /api/mainTypes endpoint now returns an array of strings rather than an object mapping MainType names to MainType objects."),e("li",{"UMLS:":"","[CL497188,C1510796],NCI:":"","[C123384,C40361]":""},'TumorType values no longer contain elements "id", "deprecated", "links", "NCI", "UMLS". A new element ("externalReferences") has been added which contains a JSON object mapping external authority names to arrays of associated identifiers. Such as "externalReferences":')])]),e("li",null,'Argument validation has been strengthened for several parameters, such as "type" and "levels" in the /api/tumorTypes/search/{type}/{query} endpoint. Now improper arguments cause an a HTTP status response indicating error, with a description of the problem in the body.'),e("li",null,[o("Some requests which fail to find matching entities now return NOT_FOUND HTTP status code 404 rather than an empty result. Examples: "),e("a",{href:"http://oncotree.mskcc.org/api/tumorTypes/search/code/TEST_UNDEFINED_CODE",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/api/tumorTypes/search/code/TEST_UNDEFINED_CODE"),o(" or "),e("a",{href:"http://oncotree.mskcc.org/api/crosswalk?vocabularyId=ICDO&conceptId=C15",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/api/crosswalk?vocabularyId=ICDO&conceptId=C15")])])])],-1),c=a('

April 1, 2018

  • New Stable Release OncoTree version oncotree_2018_04_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_03_01.
  • New nodes added:
    • Adamantinoma (ADMA)
    • Tubular Adenoma of the Colon (TAC)
    • Parathyroid Cancer (PTH)
    • Parathyroid Carcinoma (PTHC)
    • Renal Neuroendocrine Tumor (RNET)

March 1, 2018

  • New Stable Release OncoTree version oncotree_2018_03_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_02_01.
  • New node added:
    • Ganglioneuroma (GN)
  • Node reclassified
    • Rhabdoid Cancer (MRT) now has direct parent Kidney (KIDNEY) [previously: Wilms' Tumor (WT)] Main type is now "Rhabdoid Cancer" [previously: Wilms Tumor]

February 7, 2018

  • OncoTree format expanded to support deeper tree nodes
    • To support upcoming expansion of the OncoTree, the 5 named levels of the OncoTree {Primary, Secondary, Tertiary, Quaternary, Quinternary} have been dropped in favor of level numbers {1, 2, 3, 4, 5, ...}. Web API functions have been adjusted accordingly, and an API function which outputs a table format of the OncoTree has been adjusted to output 7 levels of depth.
  • Additional improvements to the website :
    • tab-style navigation
    • more prominent version selection information
    • a new News page

February 1, 2018

  • New Stable Release OncoTree version oncotree_2018_02_01 is now the latest stable release. The previous stable version is still accessible for use through version name oncotree_2018_01_01.
  • New nodes added:
    • Adenosquamous Carcinoma of the Gallbladder (GBASC)
    • Gallbladder Adenocarcinoma, NOS (GBAD)
    • Small Cell Gallbladder Carcinoma (SCGBC)
    • Juvenile Secretory Carcinoma of the Breast (JSCB)
    • Osteoclastic Giant Cell Tumor (OSGCT)
    • Peritoneal Serous Carcinoma (PSEC)
  • Nodes reclassified [from: Embryonal Tumor, to: Peripheral Nervous System]:
    • Ganglioneuroblastoma (GNBL)
    • Neuroblastoma (NBL)
  • Node with renamed OncoTree code:
    • Spindle Cell Carcinoma of the Lung (SPCC) [previously: SpCC]
',8),u=[n,s,c];function d(h,m,p,L,b,T){return r(),i("div",null,u)}const C=l(t,[["render",d]]);export{y as __pageData,C as default}; diff --git a/web/src/main/javascript/public/assets/news.md.ZGge0dYE.lean.js b/web/src/main/javascript/public/assets/news.md.ZGge0dYE.lean.js new file mode 100644 index 00000000..64338852 --- /dev/null +++ b/web/src/main/javascript/public/assets/news.md.ZGge0dYE.lean.js @@ -0,0 +1 @@ +import{_ as l,c as i,o as r,a3 as a,j as e,a as o}from"./chunks/framework.CyEiTwkJ.js";const y=JSON.parse('{"title":"News","description":"","frontmatter":{},"headers":[],"relativePath":"news.md","filePath":"news.md"}'),t={name:"news.md"},n=a("",44),s=e("ul",null,[e("li",null,[e("strong",null,"New Web API Version Available"),e("ul",null,[e("li",null,[o("A new version (v1.0.0) of the OncoTree Web API is available. It can be explored here: "),e("a",{href:"http://oncotree.mskcc.org/swagger-ui.html",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/swagger-ui.html"),o(),e("br"),o(" The previous version is still available, but is scheduled to be discontinued May 31, 2018 You can continue to access the previous version (v0.0.1) in its original location summarized here: ~~"),e("a",{href:"http://oncotree.mskcc.org/oncotree/swagger-ui.html~~",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/oncotree/swagger-ui.html~~")])])]),e("li",null,[e("strong",null,"Details and Migration Guidance"),e("ul",null,[e("li",null,[o("The base URL for accessing all API functionality is being simplified from ~~"),e("a",{href:"http://oncotree.mskcc.org/oncotree/~~",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/oncotree/~~"),o(" to "),e("a",{href:"http://oncotree.mskcc.org/",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/")]),e("li",null,[e("span",{class:"oi oi-warning text-danger","aria-hidden":"true"}),o(" The /api/tumor_types.txt endpoint is now deprecated. It is scheduled for deletion as part of the next API version release.")]),e("li",null,[o("Most endpoint paths in the API remain the same and provide the same services. Exceptions are: "),e("ul",null,[e("li",null,'/api/tumorTypes used to accept a query parameter ("flat") which controlled the output format for receiving a tree representation or a flat representation of the full set of TumorTypes. Now this endpoint always returns a flat list of all TumorTypes and a new endpoint path (/api/tumorTypes/tree) is used to retrieve a tree representation of the OncoTree. Previous requests which included "flat=false" should be adjusted to use the /api/tumorTypes/tree endpoint. Otherwise "flat=true" should be dropped from the request.'),e("li",null,'/api/tumorTypes used to accept a query parameter ("deprecated") which is no longer recognized. This parameter should be dropped from requests. Deprecated OncoTree codes can instead be found in the history attribute of the response.'),e("li",null,"the POST request endpoint (/api/tumorTypes/search) which accepted a list of TumorType queries has been deprecated and is no longer available through the swagger-ui interface. The GET request endpoint /api/tumorTypes/search/{type}/{query} remains available as before. If you previously submitted an array of query requests, you should iterate through the array and call the GET request endpoint to make one query per request.")])]),e("li",null,[o("The output format (schema) of many endpoints has been simplified. You will need to adjust your result handling accordingly. Changes include: "),e("ul",null,[e("li",null,'responses no longer include a "meta" element with associated code and error messages. Instead HTTP status codes are set appropriately and error messages are supplied in message bodies. Responses also no longer contain a "data" element. Objects representing the API output are directly returned instead.'),e("li",null,"MainType values are no longer modeled as objects. Each MainType value is now represented as a simple string. The /api/mainTypes endpoint now returns an array of strings rather than an object mapping MainType names to MainType objects."),e("li",{"UMLS:":"","[CL497188,C1510796],NCI:":"","[C123384,C40361]":""},'TumorType values no longer contain elements "id", "deprecated", "links", "NCI", "UMLS". A new element ("externalReferences") has been added which contains a JSON object mapping external authority names to arrays of associated identifiers. Such as "externalReferences":')])]),e("li",null,'Argument validation has been strengthened for several parameters, such as "type" and "levels" in the /api/tumorTypes/search/{type}/{query} endpoint. Now improper arguments cause an a HTTP status response indicating error, with a description of the problem in the body.'),e("li",null,[o("Some requests which fail to find matching entities now return NOT_FOUND HTTP status code 404 rather than an empty result. Examples: "),e("a",{href:"http://oncotree.mskcc.org/api/tumorTypes/search/code/TEST_UNDEFINED_CODE",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/api/tumorTypes/search/code/TEST_UNDEFINED_CODE"),o(" or "),e("a",{href:"http://oncotree.mskcc.org/api/crosswalk?vocabularyId=ICDO&conceptId=C15",target:"_blank",rel:"noreferrer"},"http://oncotree.mskcc.org/api/crosswalk?vocabularyId=ICDO&conceptId=C15")])])])],-1),c=a("",8),u=[n,s,c];function d(h,m,p,L,b,T){return r(),i("div",null,u)}const C=l(t,[["render",d]]);export{y as __pageData,C as default}; diff --git a/web/src/main/javascript/public/assets/style.DIk717ET.css b/web/src/main/javascript/public/assets/style.DIk717ET.css new file mode 100644 index 00000000..34182f20 --- /dev/null +++ b/web/src/main/javascript/public/assets/style.DIk717ET.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-e98dd255]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-e98dd255]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-e257564d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-e257564d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-cad61b99]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-cad61b99]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-cad61b99]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-cad61b99]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-cad61b99]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-cad61b99]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-cad61b99]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-cad61b99]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-cad61b99]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-cad61b99]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-cad61b99]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-cad61b99]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-cad61b99]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-303bb580]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-303bb580]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-303bb580]{flex-direction:row}}.main[data-v-303bb580]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-303bb580]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-303bb580]{text-align:left}}@media (min-width: 960px){.main[data-v-303bb580]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-303bb580]{max-width:592px}}.name[data-v-303bb580],.text[data-v-303bb580]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0 auto}.name[data-v-303bb580]{color:var(--vp-home-hero-name-color)}.clip[data-v-303bb580]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-303bb580],.text[data-v-303bb580]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-303bb580],.text[data-v-303bb580]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0}}.tagline[data-v-303bb580]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-303bb580]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-303bb580]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-303bb580]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-303bb580]{margin:0}}.actions[data-v-303bb580]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-303bb580]{justify-content:center}@media (min-width: 640px){.actions[data-v-303bb580]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-303bb580]{justify-content:flex-start}}.action[data-v-303bb580]{flex-shrink:0;padding:6px}.image[data-v-303bb580]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-303bb580]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-303bb580]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-303bb580]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-303bb580]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-303bb580]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-303bb580]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-303bb580]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-303bb580]{width:320px;height:320px}}[data-v-303bb580] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-303bb580] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-303bb580] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-686f80a6]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-686f80a6]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-17a5e62e]{color:var(--vp-c-text-1)}.icon[data-v-17a5e62e]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{font-size:14px}.icon[data-v-17a5e62e]{font-size:16px}}.open>.icon[data-v-17a5e62e]{transform:rotate(90deg)}.items[data-v-17a5e62e]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-17a5e62e]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-17a5e62e]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-17a5e62e]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-17a5e62e]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-17a5e62e]{transition:all .2s ease-out}.flyout-leave-active[data-v-17a5e62e]{transition:all .15s ease-in}.flyout-enter-from[data-v-17a5e62e],.flyout-leave-to[data-v-17a5e62e]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.moon[data-v-5337faa4],.dark .sun[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-6c893767]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-43f1e123]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-43f1e123]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-43f1e123]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-43f1e123]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-b98bc113]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-b6c34ac9]{position:relative}.VPFlyout[data-v-b6c34ac9]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-b6c34ac9]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-b6c34ac9]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-b6c34ac9]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-b6c34ac9]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-b6c34ac9],.button[aria-expanded=true]+.menu[data-v-b6c34ac9]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-b6c34ac9]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-b6c34ac9]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-b6c34ac9]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-b6c34ac9]{margin-right:0;font-size:16px}.text-icon[data-v-b6c34ac9]{margin-left:4px;font-size:14px}.icon[data-v-b6c34ac9]{font-size:20px;transition:fill .25s}.menu[data-v-b6c34ac9]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-eee4e7cb]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-eee4e7cb]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-eee4e7cb]>svg,.VPSocialLink[data-v-eee4e7cb]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-9c663999]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-9c663999],.VPNavBarMenuLink[data-v-9c663999]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.6.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-ab179fa1]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-ab179fa1]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-ab179fa1]{border-bottom-color:var(--vp-c-divider)}}[data-v-ab179fa1] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-6aa21345]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-6aa21345]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-6aa21345],.container>.content[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-6aa21345]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-6aa21345]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-6aa21345]{column-gap:.5rem}}.menu+.translations[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before,.appearance+.social-links[data-v-6aa21345]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-b44890b2]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-7f31e1f6]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-7f31e1f6]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-19976ae1]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-19976ae1]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-f2779853]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-f2779853],.menu+.appearance[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.menu+.social-links[data-v-f2779853]{margin-top:16px}.appearance+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b7550ba0]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b7550ba0]{padding-bottom:10px}.item[data-v-b7550ba0]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b7550ba0]{cursor:pointer}.indicator[data-v-b7550ba0]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b7550ba0]{background-color:var(--vp-c-brand-1)}.link[data-v-b7550ba0]{display:flex;align-items:center;flex-grow:1}.text[data-v-b7550ba0]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b7550ba0]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b7550ba0],.VPSidebarItem.level-2 .text[data-v-b7550ba0],.VPSidebarItem.level-3 .text[data-v-b7550ba0],.VPSidebarItem.level-4 .text[data-v-b7550ba0],.VPSidebarItem.level-5 .text[data-v-b7550ba0]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b7550ba0]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b7550ba0]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b7550ba0]{color:var(--vp-c-brand-1)}.caret[data-v-b7550ba0]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b7550ba0]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b7550ba0]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b7550ba0]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b7550ba0]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b7550ba0],.VPSidebarItem.level-2 .items[data-v-b7550ba0],.VPSidebarItem.level-3 .items[data-v-b7550ba0],.VPSidebarItem.level-4 .items[data-v-b7550ba0],.VPSidebarItem.level-5 .items[data-v-b7550ba0]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b7550ba0]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-319d5ca6]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-319d5ca6]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-319d5ca6]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-319d5ca6]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-319d5ca6]{outline:0}.VPSkipLink[data-v-0f60ec36]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0f60ec36]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0f60ec36]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #bd34fe 30%, #41d1ff );--vp-home-hero-image-background-image: linear-gradient( -45deg, #bd34fe 50%, #47caff 50% );--vp-home-hero-image-filter: blur(44px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(68px)}}:root{--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand-1) !important}.VPNav{display:none!important}.VPContent{padding-top:unset!important}.aside-container{padding-top:48px!important}.container{margin:unset!important;max-width:unset!important;justify-content:start!important}.content{max-width:unset!important}.content-container{margin:unset!important;max-width:unset!important}@media only screen and (min-width: 960px){.curation-process-overview-image{width:70%}}.curation-process-overview-image{margin-right:auto;margin-left:auto} diff --git a/web/src/main/javascript/public/hashmap.json b/web/src/main/javascript/public/hashmap.json new file mode 100644 index 00000000..1e037398 --- /dev/null +++ b/web/src/main/javascript/public/hashmap.json @@ -0,0 +1 @@ +{"about.md":"BceXjb0R","mapping.md":"CdddfsKe","news.md":"ZGge0dYE"} diff --git a/web/src/main/javascript/public/mapping.html b/web/src/main/javascript/public/mapping.html new file mode 100644 index 00000000..c39a4f78 --- /dev/null +++ b/web/src/main/javascript/public/mapping.html @@ -0,0 +1,25 @@ + + + + + + Contents | OncoTree + + + + + + + + + + + + + +
Skip to content

Contents

OncoTree to OncoTree Mapping Tool

The OncoTree Mapping tool was developed to facilitate the mapping of OncoTree codes between different OncoTree release versions. Below you can find basic instructions in the "Running the tool" section, and a detailed walkthrough in the "Tutorial" section.

Setting up and downloading the tool

As of January 2020, the sun has set on Python 2.X. If you are still using Python 2.X, we encourage you to use Python 3.6 and above, but here is the last version of the code to work with Python 2.X. In the future, only Python 3.X versions of this tool will be supported.

Click here to download the script: oncotree_to_oncotree.py

Running the tool

The OncoTree Mapping tool can be run with the following command:

python3 <path/to/scripts/oncotree_to_oncotree.py> --source-file <path/to/source/file> --target-file <path/to/target/file> --source-version <source_oncotree_version> --target-version <target_oncotree_version>

Options

  • -i | --source-file: This is the source clinical file path. It must contain ONCOTREE_CODE in the file header and it must contain OncoTree codes corresponding to the <source_oncotree_version>. Read more about the cBioPortal clinical file format here.
  • -o | --target-file: This is the path to the target clinical file that will be generated. It will contain mapped OncoTree codes from <source_oncotree_version>-to-<target_oncotree_version>.
  • -s | --source-version: This is the source OncoTree version. The OncoTree codes in the source file must correspond to this version.
  • -t | --target-version: This is the target OncoTree version that the script will attempt to map the source file OncoTree codes to.

The list of OncoTree versions available are viewable here or on the dropdown menu of the OncoTree home page.

Note: the source file should not contain embedded line breaks within any single cell in the table, such as those created by using the keyboard combinations Alt-Enter or Command-Option-Enter while editing a cell in Microsoft Excel.

For a detailed walkthrough of running the tool, see the "Tutorial" section below.

Output

The OncoTree Mapper Tool will automatically replace the value in the ONCOTREE_CODE column with the mapped code if available. The tool will also add a new column called ONCOTREE_CODE_OPTIONS containing suggestions for OncoTree codes if one or more nodes could not be directly mapped. The ONCOTREE_CODE_OPTIONS column formats its suggestions differently depending on the mapping results. Possible suggestion formats and corresponding examples are shown below.

1. Unambiguous Direct Mappings

Unambiguous direct mappings occur when an OncoTree code maps directly to a single code in the target version. In this case, the ONCOTREE_CODE_OPTIONS column will be left blank, and the mapped code will be automatically placed in the ONCOTREE_CODE column. Unambiguous direct mappings are checked for addition of more granular nodes; to see how this may affect the ONCOTREE_CODE_OPTIONS column formatting, please refer to the subsection below "4. More Granular Nodes Introduced".

2. Ambiguous Direct Mappings

Ambiguous direct mappings occur when an OncoTree code maps to multiple codes in the target version. The ONCOTREE_CODE_OPTIONS column formats the output as follows:

'Source Code' -> {'Code 1', 'Code 2', 'Code 3', }   e.g. ALL -> {TLL, BLL}

Example: Schema describing the revocation of OncoTree node ALL is mapped to multiple nodes.

In oncotree_2018_05_01, ALL had two children: TALL and BALL. On release oncotree_2018_06_01, the ALL node was discontinued and the TALL node was renamed TLL and the BALL node was renamed BLL.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

ALL -> {TLL, BLL}

Ambiguous direct mappings are also checked for addition of more granular nodes; to see how this may affect the ONCOTREE_CODE_OPTIONS column formatting, please refer to the subsection below "4. More Granular Nodes Introduced".

3. No Direct Mappings

No direct mappings occur when the source OncoTree code is unrelated to any OncoTree code in the target version. One such possibility is mapping a newly introduced OncoTree code backwards in time. In this case, the tool finds the closest set of neighbors (e.g parents and children) which are mappable in the target version. The ONCOTREE_CODE_OPTIONS column returns the set with the keyword Neighbors as follows:

'Source Code' -> Neighbors {'Code 1', 'Code 2', 'Code 3', }   e.g. UPA -> Neighbors {BLADDER}

Example: Schema describing a case where new OncoTree node UPA cannot be directly mapped backwards to a node.

In oncotree_2019_03_01, UPA was added to the OncoTree as a child node of BLADDER. Because UPA did not exist in previous version oncotree_2018_05_01 and did not replace any existing node, the tool uses the surrounding nodes when mapping backwards. In this case, the parent node BLADDER is returned as the closest match.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

UPA -> Neighbors {BLADDER}

4. More Granular Nodes Introduced

In certain cases, the target version can also introduce nodes with more specific descriptions. When this occurs, the tool will add the string more granular choices introduced to the existing text in the ONCOTREE_CODE_OPTIONS column as follows:

'Source Code' -> {'Code 1', }, more granular choices introduced e.g. TALL -> {TLL}, more granular choices introduced

Example: Schema describing a case where OncoTree node TALL is mapped to a node with more granular children

In oncotree_2019_03_01, TALL was a leaf node with no children. In release oncotree_2019_06_01, TLL was introduced as a replacement for TALL with additional children ETPLL and NKCLL.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

TALL -> {TLL}, more granular choices introduced

5. Invalid Source OncoTree Code

An invalid source OncoTree Code means the provided code cannot be found in the source version. In such a case, mapping cannot be attempted and the ONCOTREE_CODE_OPTIONS column displays the following:

'Source Code' -> ???, OncoTree code not in source OncoTree version

Tutorial

The following tutorial will guide the user through using the oncotree_to_oncotree.py tool. The tutorial will go through the expected output to highlight specific mapping cases. Additionally, the tutorial will cross-reference the output with the generated mapping summary to demonstrate how it can be used to aid in manual selection of unresolved nodes.

Step 1

Download the sample input file (data_clinical_sample.txt) from here .

Step 2

Download oncotree_to_oncotree.py from here .

Step 3

Run the following command from the command line:

python oncotree_to_oncotree.py -i data_clinical_sample.txt -o data_clinical_sample_remapped.txt -s oncotree_2018_03_01 -t oncotree_2019_03_01

The tool will output two files: data_clinical_sample_remapped.txt and data_clinical_sample_remapped_summary.html. For your reference, you can see the expected output files - here and here

Step 4

Examine data_clinical_sample_remapped.txt; the first five columns of the file should look as follows:

PATIENT_IDSAMPLE_IDAGE_AT_SEQ_REPORTONCOTREE_CODEONCOTREE_CODE_OPTIONS
P1S141ALL -> {BLL,TLL}, more granular choices introduced
P2S260BALL -> {BLL}, more granular choices introduced
P3S3<18TALL -> {TLL}, more granular choices introduced
P4S471PTCL
P5S564PTCL
P6S636CHL -> {CHL}, more granular choices introduced
P7S763SpCC -> ???, OncoTree code not in source OncoTree version
P8S863MCL -> {MCL}, more granular choices introduced
P9S973HGNEE -> ???, OncoTree code not in source OncoTree version
P10S1052ONCOTREE_CODE column blank : use a valid OncoTree code or "NA"
P11S1177NA
P12S1287TNKL -> {MTNN}, more granular choices introduced
P13S1379HIST -> {HDCN}, more granular choices introduced
P14S1453CLLSLL
P15S1569CLLSLL
P16S1665LEUK -> {MNM}, more granular choices introduced
P17S1766MYCF
P18S1866RBL

Step 5

Using values in the ONCOTREE_CODE_OPTIONS as a guide, manually select and place an OncoTree Code in the ONCOTREE_CODE column. For additional information, refer to the summary file data_clinical_sample_remapped_summary.html. Repeat for all rows in the output file. Several examples are shown below.

Sample 1
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S1ALL -> {BLL,TLL}, more granular choices introduced

Source OncoTree code ALL maps directly to codes BLL and TLL. Users should place either BLL or TLL in the ONCOTREE_CODE column. The ONCOTREE_CODE_OPTIONS column also notes that more granular choices were introduced; as such, users can use the summary file for additional guidance.

Searching by source code, the following information can be found in the summary file:

The summary file provides a link to the closest shared parent node LNM; users can choose more granular nodes by referencing the provided tree:

Sample 2
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S2BALL -> {BLL}, more granular choices introduced

Source OncoTree code BALL maps directly to BLL. Users should place BLL in the ONCOTREE_CODE column. However, similar to sample 1, the ONCOTREE_CODE_OPTIONS indicates there are more granular choices available. Users can follow the same steps as above and use the summary file to select a more granular node.

Sample 4
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S4PTCL

No additional resolution is needed; the previous OncoTree code was already automatically mapped to PTCL and placed in the ONCOTREE_CODE column. ONCOTREE_CODE_OPTIONS is empty because no manual selections were necessary.

Sample 9
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S4HGNEE -> ???, OncoTree code not in source OncoTree version

Source OncoTree code HGNEE was not found in the source OncoTree version and therefore could not be mapped. Users can either reassign a new source OncoTree code (and rerun the script) or remove the sample.

Step 6

After filling in the ONCOTREE_CODE column with an OncoTree code for each sample, use an editor (e.g. Microsoft Excel, vim, etc.) to trim off the ONCOTREE_CODE_OPTIONS column. The resulting file will be a new data_clinical_sample.txt file with all codes mapped to the target version. The first four columns of the final result is shown below:

PATIENT_IDSAMPLE_IDAGE_AT_SEQ_REPORTONCOTREE_CODE
P1S141BLL
P2S260BLL
P3S3<18TLL
P4S471PTCL
P5S564PTCL
P6S636CHL
P7S763SPCC
P8S863MCL
P10S1052NA
P11S1177NA
P12S1287MTNN
P13S1379HDCN
P14S1453CLLSLL
P15S1569CLLSLL
P16S1665MNM
P17S1766MYCF
P18S1866RBL

Ontology to Ontology Mapping Tool

The Ontology Mapping tool was developed to facilitate the mapping between different cancer classification systems. We currently support mapping between OncoTree, ICD-O, NCIt, UMLS and HemeOnc systems. The tool and the mapping file (the mapping file does not need to be downloaded to run the tool) can be found here

Prerequisites

The Ontology Mapping tool runs on python 3 and requires pandas and requests libraries. These libraries can be installed using

pip3 install pandas
+pip3 install requests

Running the tool

The Ontology Mapping tool can be run with the following command:

python <path/to/scripts/ontology_to_ontology_mapping_tool.py> --source-file <path/to/source/file> --target-file <path/to/target/file> --source-code <source_ontology_code> --target-code <target_ontology_code>

Options

  • i | --source-file: This is the source file path. The source file must contain one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE in the file header and it must contain codes corresponding to the Ontology System.
  • o | --target-file: This is the path to the target file that will be generated. It will contain ontologies mapped from source code in <source-file> to <target-code>.
  • s | --source-code: This is the source ontology code in <source-file>. It must be one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE.
  • t | --target-code: This is the target ontology code that the script will attempt to map the source file ontology code to. It must be one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE.

Note

  • The source file should be tab delimited and should contain one of the ontology: ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE in the file header.
  • We currently are allowing only one ontology to another ontology mapping. In the future, we plan to extend the tool to support mapping to multiple ontology systems.
+ + + + \ No newline at end of file diff --git a/web/src/main/javascript/public/news.html b/web/src/main/javascript/public/news.html new file mode 100644 index 00000000..be281a2a --- /dev/null +++ b/web/src/main/javascript/public/news.html @@ -0,0 +1,24 @@ + + + + + + News | OncoTree + + + + + + + + + + + + + +
Skip to content

News

November 2, 2021

  • New Stable Release OncoTree version oncotree_2021_11_02 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_10_01.
  • New nodes added:
    • Desmoplastic/Nodular Medulloblastoma, NOS (DMBLNOS)
    • Desmoplastic/Nodular Medulloblastoma, SHH Subtype (DMBLSHH)
    • Anaplastic Medulloblastoma, NOS (AMBLNOS)
    • Anaplastic Medulloblastoma, Non-WNT, Non-SHH (AMBLNWS)
    • Anaplastic Medulloblastoma, Group 3 (AMBLNWSG3)
    • Anaplastic Medulloblastoma, Group 4 (AMBLNWSG4)
    • Anaplastic Medulloblastoma, SHH Subtype (AMBLSHH)
    • Medulloblastoma, NOS (MBLNOS)
    • Medulloblastoma, Non-WNT, Non-SHH (MBLNWS)
    • Medulloblastoma, Group 3 (MBLG3)
    • Medulloblastoma, Group 4 (MBLG4)
    • Medulloblastoma, SHH Subtype (MBLSHH)
    • Medulloblastoma, WNT Subtype (MBLWNT)
    • Medulloblastoma with Extensive Nodularity, NOS (MBENNOS)
    • Medulloblastoma with Extensive Nodularity, SHH Subtype (MBENSHH)
    • Pancreatic Neuroendocrine Carcinoma (PANEC) in the original version of this news release this node was accidentally omitted
  • Nodes reclassified
    • The following list of oncotree codes had the mainType shortened to drop the suffix "NOS": ADRENAL_GLAND, AMPULLA_OF_VATER, BILIARY_TRACT, BLADDER, BONE, BOWEL, BRAIN, BREAST, CERVIX, EYE, HEAD_NECK, KIDNEY, LIVER, LUNG, LYMPH, MYELOID, OTHER, OVARY, PANCREAS, PENIS, PERITONEUM, PLEURA, PNS, PROSTATE, SKIN, SOFT_TISSUE, STOMACH, TESTIS, THYMUS, THYROID, UTERUS, VULVA
    • Cholangiocarcinoma (CHOL) now has direct parent Intraductal Papillary Neoplasm of the Bile Duct (IPN) [previously: Biliary Tract (BILIARY_TRACT)]
    • Gallbladder Cancer (GBC) now has direct parent Intracholecystic Papillary Neoplasm (ICPN) [previously: Biliary Tract (BILIARY_TRACT)]
  • oncotree candidate release version additions:
    • Three new nodes intended only for version oncotree_candidate_release were added (NVRINT, MPNWP, MDSWP). These nodes will not be incorperated into oncotree latest stable.
  • resources added
    • rdf formatted OWL ontology and taxomomy files for recent oncotree versions have been added to our github repository. They can be explored here .

November 4, 2020

  • Ontology to Ontology Mapping tool available
    • The Ontology Mapping tool was developed to facilitate the mapping between different cancer classification systems. We currently support mapping between OncoTree, ICD-O, NCIt, UMLS and HemeOnc systems.
    • A mapping file containing mappings between the different ontologies and OncoTree codes as well as a python script to run the mapping is available on the OncoTree GitHub page . Details are also available on the Mapping Tools page .
    • The mapping file is expected to grow as we curate more ontology mappings for OncoTree codes.

October 1, 2020

  • New Stable Release OncoTree version oncotree_2020_10_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_04_01.
  • New nodes added:
    • Basal Cell Carcinoma of Prostate (BCCP)
  • Node deleted:
    • Porphyria Cutania Tarda (PCT)
  • Node with updated name:
    • Goblet Cell Adenocarcinoma of the Appendix (GCCAP) [previously: Goblet Cell Carcinoid of the Appendix (GCCAP)].

April 1, 2020

  • New Stable Release OncoTree version oncotree_2020_04_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_02_06.
  • New nodes added:
    • AML with Variant RARA translocation (AMLRARA)
  • Nodes reclassified:
    • Mixed Cancer Types (MIXED is now a child of Other (OTHER) [previously under: Cancer of Unknown Primary (CUP)].

February 6, 2020

  • Web Link To Specific Nodes Available:
    • When providing web links to oncotree, you may include a search term as an optional argument and the oncotree you reference will be displayed with the search term located and highlighted. Use of this mechanism can be seen in the example output for the OncoTree-to-OncoTree code mapping tool.
    • As an example, you can provide a direct link to the TumorType node PANET in oncotree version oncotree_2019_12_01 with this link: http://oncotree.mskcc.org/#/home?version=oncotree_2019_12_01&search_term=(PANET)
  • New Stable Release OncoTree version oncotree_2020_02_06 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_02_01.
  • Nodes reclassified:
    • Gallbladder Cancer (GBC) is now a child of Biliary Tract (BILIARY_TRACT) [previously under: Intracholecystic Papillary Neoplasm (ICPN)].
    • Cholangiocarcinoma (CHOL) is now a child of Biliary Tract (BILIARY_TRACT) [previously under: Intraductal Papillary Neoplasm of the Bile Duct (IPN)].

February 1, 2020

  • New Stable Release OncoTree version oncotree_2020_02_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_12_01.
  • New nodes added:
    • Intraductal Oncocytic Papillary Neoplasm (IOPN)
    • Intraductal Tubulopapillary Neoplasm (ITPN)
    • Intracholecystic Papillary Neoplasm (ICPN)
    • Intraductal Papillary Neoplasm of the Bile Duct (IPN)
  • Nodes reclassified:
    • Gallbladder Cancer (GBC) is now a child of Intracholecystic Papillary Neoplasm (ICPN) [previously under: Biliary Tract (BILIARY_TRACT)].
    • Cholangiocarcinoma (CHOL) is now a child of Intraductal Papillary Neoplasm of the Bile Duct (IPN) [previously under: Biliary Tract (BILIARY_TRACT)].

December 1, 2019

  • New Stable Release OncoTree version oncotree_2019_12_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_08_01.
  • New nodes added:
    • Low-grade Appendiceal Mucinous Neoplasm (LAMN)

August 1, 2019

  • New Stable Release OncoTree version oncotree_2019_08_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_05_01.
  • New nodes added:
    • Lacrimal Gland Tumor (LGT)
    • Adenoid Cystic Carcinoma of the Lacrimal Gland (ACLG)
    • Squamous Cell Carcinoma of the Lacrimal Gland (SCLG)
    • Basal Cell Adenocarcinoma (BCAC)
    • Carcinoma ex Pleomorphic Adenoma (CAEXPA)
    • Pleomorphic Adenoma (PADA)
    • Polymorphous Adenocarcinoma (PAC)
    • Atypical Lipomatous Tumor (ALT)

May 2, 2019

  • OncoTree-to-OncoTree code mapping tool updated
    • The OncoTree-to-OncoTree mapping tool (now version 1.2) has been updated:
      • it no longer requires the installation of the python 'requests' module
      • it now is able to handle input files where lines end in carriage return (such as files saved from Microsoft Excel)

May 1, 2019

  • New Stable Release OncoTree version oncotree_2019_05_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_03_01.
  • Nodes reclassified
    • Intestinal Ampullary Carcinoma (IAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Mixed Ampullary Carcinoma (MAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Pancreatobiliary Ampullary Carcinoma (PAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Ependymoma (EPM) MainType is now Glioma [previously: CNS Cancer]
    • Rosai-Dorfman Disease (RDD) MainType is now Histiocytosis [previously: Histiocytic Disorder]

March 26, 2019

  • OncoTree-to-OncoTree code mapping tool updated
    • The OncoTree-to-OncoTree mapping tool (now version 1.1) has been slightly improved, mainly by adding a separate section in the output summary for reporting OncoTree codes which were replaced automatically. Also, additional documentation and description of the tool has been added under the "Mapping Tools" tab.

March 14, 2019

  • OncoTree-to-OncoTree code mapping tool available
    • A python program is now available for download under the webpage tab labeled "Mapping Tools". This tool will rewrite OncoTree codes in a tabular clinical data file, mapping from one version of OncoTree to another. When additional guidance is necessary, the program will insert a column containing options and comments next to the ONCOTREE_CODE column. After selecting an appropriate OncoTree code for cases which require action, this extra column can be deleted to produce a fully re-mapped clinical data file. More details about this tool and how to use it are available under the "Mapping Tools" tab.
    • The OncoTree-to-OncoTree mapping tool relies on an expanded model of OncoTree node history. This is reflected in the Web API schema for Tumor Types, which now has added properties called "precursors" and "revocations". Using these properties, and the existing "history" property, the tool is able to make proper mappings across OncoTree versions, and give suggestions when no clear mapping is available. It is also reflected in the main tree visualization of OncoTree, where a combination of these properties (when set) will be displayed in the pop-up information box with label "Previous Codes".

March 1, 2019

  • New Stable Release OncoTree version oncotree_2019_03_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_02_01.
  • New node added:
    • NUT Carcinoma of the Lung (NUTCL)
  • Node with renamed OncoTree code:
    • Monomorphic Epitheliotropic Intestinal T-Cell Lymphoma (MEITL) [previously: MEATL]
  • Node with renamed OncoTree code and updated name:
    • Germ Cell Tumor with Somatic-Type Malignancy (GCTSTM) [previously: Teratoma with Malignant Transformation (TMT)]
  • Cross-version OncoTree code mapping tool coming soon
    • Development of a tool to map OncoTree codes between different versions of OncoTree is nearing completion.
    • Related to this, users of the OncoTree Web API should be aware that we will soon be adding two additional properties to the output schema returned by the api/tumorTypes endpoints. The properties "precursors" and "revocations" will be added alongside the "history" property (having the same type: an array of strings). These will help distinguish the kinds of possible relationships to OncoTree nodes in prior versions of OncoTree. We expect this new schema to be backwards compatible, but if your language or tools requires an exactly matching JSON schema you will need to make adjustments.

February 1, 2019

  • New Stable Release OncoTree version oncotree_2019_02_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_11_01.
  • New node added:
    • Leiomyoma (LM)

November 1, 2018

  • New Stable Release OncoTree version oncotree_2018_11_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_09_01.
  • New nodes added:
    • Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach (GINETES)
    • High-Grade Neuroendocrine Carcinoma of the Esophagus (HGNEE)
    • High-Grade Neuroendocrine Carcinoma of the Stomach (HGNES)
  • Nodes reclassified:
    • Well-Differentiated Neuroendocrine Tumors of the Stomach (SWDNET) is now a child of Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach (GINETES) [previously under: Bowel (BOWEL)].

September 1, 2018

  • New Stable Release OncoTree version oncotree_2018_09_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_08_01.
  • Nodes with adjusted History:
    • Myeloid Neoplasm (MNM) previous code: LEUK
    • B-Lymphoblastic Leukemia/Lymphoma (BLL) previous code: BALL
    • T-Lymphoblastic Leukemia/Lymphoma (TLL) previous code: TALL
    • Essential Thrombocythemia (ET) previous code: ETC
    • Polycythemia Vera (PV) previous code: PCV
    • Diffuse Large B-Cell Lymphoma, NOS (DLBCLNOS) previous code: DLBCL
    • Sezary Syndrome (SS) previous code: SEZS

August 1, 2018

  • New Stable Release OncoTree version oncotree_2018_08_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_07_01.
  • New nodes added:
    • Angiomatoid Fibrous Histiocytoma (AFH)
    • Clear Cell Sarcoma of Kidney (CCSK)
    • Ewing Sarcoma of Soft Tissue (ESST)
    • Extra Gonadal Germ Cell Tumor (EGCT)
    • Infantile Fibrosarcoma (IFS)
    • Malignant Glomus Tumor (MGST)
    • Malignant Rhabdoid Tumor of the Liver (MRTL)
    • Myofibromatosis (IMS)
    • Sialoblastoma (SBL)
    • Undifferentiated Embryonal Sarcoma of the Liver (UESL)

July 1, 2018

  • New Stable Release OncoTree version oncotree_2018_07_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_06_15.
  • Node with renamed OncoTree code:
    • Atypical Chronic Myeloid Leukemia, BCR-ABL1- (ACML) [previously: aCML]

June 15, 2018

  • New Stable Release OncoTree version oncotree_2018_06_15 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_06_01.
  • Nodes reclassified
    • Mature B-Cell Neoplasms (MBN) and Mature T and NK Neoplasms (MTNN) and their subnodes were relocated to be under Non-Hodgkin Lymphoma (NHL).
    • Rosai-Dorfman Disease (RDD) was relocated to be under Histiocytic and Dendritic Cell Neoplasms (HDCN). Previously RDD was under Lymphoid Neoplasm (LNM) in the Lymphoid category.

June 1, 2018

  • New Stable Release OncoTree version oncotree_2018_06_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_05_01.
  • Blood and Lymph subtrees replaced with new Myeloid and Lymphoid subtrees:
    • 23 nodes in the previous Blood subtree have been deleted or relocated/renamed. Affected OncoTree codes from this tree: BLOOD, BPDCN, HIST, LCH, ECD, LEUK, ALL, BALL, TALL, AMOL, AML, CLL, CML, CMML, HCL, LGLL, MM, MDS, MPN, ETC, MYF, PCV, SM
    • 28 nodes in the previous Lymph subtree have been deleted or relocated/renamed. Affected OncoTree codes from this tree: LYMPH, HL, CHL, NLPHL, NHL, BCL, BL, DLBCL, MALTL, FL, MCL, MZL, MBCL, NMZL, PCNSL, PEL, SLL, SMZL, WM, TNKL, CTCL, MYCF, SEZS, PTCL, ALCL, AITL, PTCLNOS, RD
    • 122 nodes in the current Lymphoid subtree have been added or relocated/renamed from previous subtrees. OncoTree codes in this new subtree are: LYMPH, LATL, LBGN, LNM, BLL, BLLRGA, BLLHYPER, BLLHYPO, BLLIAMP21, BLLETV6RUNX1, BLLTCF3PBX1, BLLIL3IGH, BLLBCRABL1, BLLKMT2A, BLLBCRABL1L, BLLNOS, HL, CHL, LDCHL, LRCHL, MCCHL, NSCHL, NLPHL, MBN, ALKLBCL, AHCD, BCLU, BPLL, BL, BLL11Q, CLLSLL, DLBCLCI, DLBCLNOS, ABC, GCB, EBVDLBCLNOS, EBVMCU, EP, FL, DFL, ISFN, GHCD, HHV8DLBCL, HCL, HGBCL, HGBCLMYCBCL2, IVBCL, LBLIRF4, LYG, LPL, WM, MCL, ISMCL, MZL, EMALT, NMZL, SMZL, MCBCL, MGUS, MGUSIGA, MGUSIGG, MGUSIGM, MIDD, MIDDA, MIDDO, MHCD, PTFL, PCM, PLBL, PCLBCLLT, PCFCL, PCNSL, PEL, PMBL, SPB, SBLU, HCL-V, SDRPL, THRLBCL, MTNN, ATLL, ANKL, ALCL, ALCLALKN, ALCLALKP, BIALCL, AITL, CLPDNK, EATL, ENKL, FTCL, HSTCL, HVLL, ITLPDGI, MEATL, MYCF, NPTLTFH, PTCL, PCATCL, PCLPD, LYP, PCALCL, PCSMTPLD, PCAECTCL, PCGDTCL, SS, SPTCL, SEBVTLC, TLGL, TPLL, NHL, PTLD, CHLPTLD, FHPTLD, IMPTLD, MPTLD, PHPTLD, PPTLD, RDD, TLL, ETPLL, NKCLL
    • 101 nodes in the current Myeloid subtree have been added or relocated/renamed from previous subtrees. OncoTree codes in this new subtree are: MYELOID, MATPL, MBGN, MNM, ALAL, AUL, MPALBCRABL1, MPALKMT2A, MPALBNOS, MPALTNOS, AML, AMLMRC, AMLRGA, AMLRBM15MKL1, AMLBCRABL1, AMLCEBPA, AMLNPM1, AMLRUNX1, AMLCBFBMYH11, AMLGATA2MECOM, AMLDEKNUP214, AMLRUNX1RUNX1T1, AMLMLLT3KMT2A, APLPMLRARA, AMLNOS, AM, AMLMD, AWM, ABL, AMKL, AMOL, AMML, APMF, PERL, MPRDS, MLADS, TAM, MS, TMN, TAML, TMDS, BPDCN, HDCN, JXG, ECD, FRCT, FDCS, HS, IDCT, IDCS, LCH, LCS, MCD, CMCD, MCSL, SM, ASM, ISM, SMMCL, SSM, SMAHN, MDS, MDSEB, MDSEB1, MDSEB2, MDSID5Q, MDSMD, MDSRS, MDSRSMD, MDSRSSLD, MDSSLD, MDSU, RCYC, MDS/MPN, aCML, CMML, CMML0, CMML1, CMML2, JMML, MDSMPNRST, MDSMPNU, MNGLP, MLNER, MLNFGFR1, MLNPCM1JAK2, MLNPDGFRA, MLNPDGFRB, MPN, CELNOS, CML, CMLBCRABL1, CNL, ET, ETMF, MPNU, PV, PVMF, PMF, PMFPES, PMFOFS
  • Nodes reclassified
    • Adrenocortical Adenoma (ACA) MainType is now Adrenocortical Adenoma [previously: Adrenocortical Carcinoma]
    • Ampulla of Vater (AMPULLA_OF_VATER) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Parathyroid Cancer (PTH) MainType is now Parathyroid Cancer [previously: Head and Neck Cancer]
    • Parathyroid Carcinoma (PTHC) MainType is now Parathyroid Cancer [previously: Head and Neck Cancer]
    • Follicular Dendritic Cell Sarcoma (FDCS) was moved from the Soft Tissue subtree into the Myeloid subtree with direct parent Histiocytic and Dendritic Cell Neoplasms (HDCN)
    • Interdigitating Dendritic Cell Sarcoma (IDCS) was moved from the Soft Tissue subtree into the Myeloid subtree with direct parent Histiocytic and Dendritic Cell Neoplasms (HDCN)
  • New nodes added:
    • Inverted Urothelial Papilloma (IUP)
    • Urothelial Papilloma (UPA)
    • Oncocytic Adenoma of the Thyroid (OAT)
  • Character set simplification
    • Salivary Gland-Type Tumor of the Lung (SGTTL) used to contain a unicode character for a horizontal dash. This punctuation mark is now a hyphen.

May 1, 2018

  • New Stable Release OncoTree version oncotree_2018_05_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_04_01.
  • New nodes added:
    • Primary CNS Melanocytic Tumors (PCNSMT)
    • Melanocytoma (MELC)
  • Node reclassified
    • Primary CNS Melanoma (PCNSM) now is a child of Primary CNS Melanocytic Tumors (PCNSMT) [previously under: CNS/Brain].

April 23, 2018

  • New Web API Version Available
  • Details and Migration Guidance
    • The base URL for accessing all API functionality is being simplified from ~~http://oncotree.mskcc.org/oncotree/~~ to http://oncotree.mskcc.org/
    • The /api/tumor_types.txt endpoint is now deprecated. It is scheduled for deletion as part of the next API version release.
    • Most endpoint paths in the API remain the same and provide the same services. Exceptions are:
      • /api/tumorTypes used to accept a query parameter ("flat") which controlled the output format for receiving a tree representation or a flat representation of the full set of TumorTypes. Now this endpoint always returns a flat list of all TumorTypes and a new endpoint path (/api/tumorTypes/tree) is used to retrieve a tree representation of the OncoTree. Previous requests which included "flat=false" should be adjusted to use the /api/tumorTypes/tree endpoint. Otherwise "flat=true" should be dropped from the request.
      • /api/tumorTypes used to accept a query parameter ("deprecated") which is no longer recognized. This parameter should be dropped from requests. Deprecated OncoTree codes can instead be found in the history attribute of the response.
      • the POST request endpoint (/api/tumorTypes/search) which accepted a list of TumorType queries has been deprecated and is no longer available through the swagger-ui interface. The GET request endpoint /api/tumorTypes/search/{type}/{query} remains available as before. If you previously submitted an array of query requests, you should iterate through the array and call the GET request endpoint to make one query per request.
    • The output format (schema) of many endpoints has been simplified. You will need to adjust your result handling accordingly. Changes include:
      • responses no longer include a "meta" element with associated code and error messages. Instead HTTP status codes are set appropriately and error messages are supplied in message bodies. Responses also no longer contain a "data" element. Objects representing the API output are directly returned instead.
      • MainType values are no longer modeled as objects. Each MainType value is now represented as a simple string. The /api/mainTypes endpoint now returns an array of strings rather than an object mapping MainType names to MainType objects.
      • TumorType values no longer contain elements "id", "deprecated", "links", "NCI", "UMLS". A new element ("externalReferences") has been added which contains a JSON object mapping external authority names to arrays of associated identifiers. Such as "externalReferences":
    • Argument validation has been strengthened for several parameters, such as "type" and "levels" in the /api/tumorTypes/search/{type}/{query} endpoint. Now improper arguments cause an a HTTP status response indicating error, with a description of the problem in the body.
    • Some requests which fail to find matching entities now return NOT_FOUND HTTP status code 404 rather than an empty result. Examples: http://oncotree.mskcc.org/api/tumorTypes/search/code/TEST_UNDEFINED_CODE or http://oncotree.mskcc.org/api/crosswalk?vocabularyId=ICDO&conceptId=C15

April 1, 2018

  • New Stable Release OncoTree version oncotree_2018_04_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_03_01.
  • New nodes added:
    • Adamantinoma (ADMA)
    • Tubular Adenoma of the Colon (TAC)
    • Parathyroid Cancer (PTH)
    • Parathyroid Carcinoma (PTHC)
    • Renal Neuroendocrine Tumor (RNET)

March 1, 2018

  • New Stable Release OncoTree version oncotree_2018_03_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_02_01.
  • New node added:
    • Ganglioneuroma (GN)
  • Node reclassified
    • Rhabdoid Cancer (MRT) now has direct parent Kidney (KIDNEY) [previously: Wilms' Tumor (WT)] Main type is now "Rhabdoid Cancer" [previously: Wilms Tumor]

February 7, 2018

  • OncoTree format expanded to support deeper tree nodes
    • To support upcoming expansion of the OncoTree, the 5 named levels of the OncoTree {Primary, Secondary, Tertiary, Quaternary, Quinternary} have been dropped in favor of level numbers {1, 2, 3, 4, 5, ...}. Web API functions have been adjusted accordingly, and an API function which outputs a table format of the OncoTree has been adjusted to output 7 levels of depth.
  • Additional improvements to the website :
    • tab-style navigation
    • more prominent version selection information
    • a new News page

February 1, 2018

  • New Stable Release OncoTree version oncotree_2018_02_01 is now the latest stable release. The previous stable version is still accessible for use through version name oncotree_2018_01_01.
  • New nodes added:
    • Adenosquamous Carcinoma of the Gallbladder (GBASC)
    • Gallbladder Adenocarcinoma, NOS (GBAD)
    • Small Cell Gallbladder Carcinoma (SCGBC)
    • Juvenile Secretory Carcinoma of the Breast (JSCB)
    • Osteoclastic Giant Cell Tumor (OSGCT)
    • Peritoneal Serous Carcinoma (PSEC)
  • Nodes reclassified [from: Embryonal Tumor, to: Peripheral Nervous System]:
    • Ganglioneuroblastoma (GNBL)
    • Neuroblastoma (NBL)
  • Node with renamed OncoTree code:
    • Spindle Cell Carcinoma of the Lung (SPCC) [previously: SpCC]
+ + + + \ No newline at end of file diff --git a/web/src/main/javascript/src/App.tsx b/web/src/main/javascript/src/App.tsx new file mode 100644 index 00000000..8dd86fff --- /dev/null +++ b/web/src/main/javascript/src/App.tsx @@ -0,0 +1,97 @@ +import { Route, Routes, useLocation, useSearchParams } from "react-router-dom"; +import Home from "./pages/Home/Home"; +import Header from "./components/Header/Header"; +import "./app.scss"; +import OncoTree, { OncoTreeNode } from "@oncokb/oncotree"; +import { useCallback, useEffect, useState } from "react"; +import "react-toastify/dist/ReactToastify.css"; +import { Bounce, ToastContainer } from "react-toastify"; +import News from "./pages/News/News"; +import { + DEFAULT_VERSION, + ONCOTREE_TREE_URL, + PageRoutes, +} from "./shared/constants"; +import Mapping from "./pages/Mapping/Mapping"; +import Footer from "./components/Footer/footer"; +import About from "./pages/About/About"; + +function App() { + const location = useLocation(); + const [, setSearchParams] = useSearchParams(); + + const [oncoTreeData, setOncoTreeData] = useState(); + const [oncoTree, setOncoTree] = useState(); + + async function fetchData(apiIdentifier: string) { + const response = await fetch( + `${ONCOTREE_TREE_URL}/?&version=${apiIdentifier}`, + ); + const data: { [name: string]: OncoTreeNode } = await response.json(); + const formattedData = Object.values(data)[0]; + setOncoTreeData(formattedData); + } + + useEffect(() => { + fetchData(DEFAULT_VERSION); + }, []); + + useEffect(() => { + if (location.pathname !== PageRoutes.HOME) { + setSearchParams(undefined); + } + }, [location.pathname, setSearchParams]); + + const onOncoTreeInit = useCallback((oncoTree: OncoTree) => { + setOncoTree(oncoTree); + }, []); + + if (!oncoTreeData) { + return <>Loading...; + } + + return ( +
+
{ + fetchData(version.api_identifier); + }} + /> +
+ + + } + /> + } /> + } /> + } /> + +
+
+ +
+ ); +} + +export default App; diff --git a/web/src/main/javascript/src/app.scss b/web/src/main/javascript/src/app.scss new file mode 100644 index 00000000..978e31ea --- /dev/null +++ b/web/src/main/javascript/src/app.scss @@ -0,0 +1,54 @@ +@import './variables.module.scss'; + +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +html, +body, +#root { + height: 100%; + width: 100%; + overflow: hidden; + background-color: $secondary; + margin: 0; + color-scheme: light !important; +} + +.app-container { + height: 100%; +} + +.app-content-container { + height: $app-content-height; + overflow: hidden; + background-size: 40px 40px; + background-image: + linear-gradient(to right, #F0F0F0 1px, transparent 1px), + linear-gradient(to bottom, #F0F0F0 1px, transparent 1px); +} + +a { + font-weight: 500; + color: $primary; + text-decoration: inherit; +} + +a:hover { + color: #535bf2; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} \ No newline at end of file diff --git a/web/src/main/javascript/src/assets/curation_process.png b/web/src/main/javascript/src/assets/curation_process.png new file mode 100644 index 00000000..35ce3689 Binary files /dev/null and b/web/src/main/javascript/src/assets/curation_process.png differ diff --git a/web/src/main/javascript/src/assets/oncotree_logo_no_bg.svg b/web/src/main/javascript/src/assets/oncotree_logo_no_bg.svg new file mode 100644 index 00000000..8fd04d71 --- /dev/null +++ b/web/src/main/javascript/src/assets/oncotree_logo_no_bg.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/main/javascript/src/components/Footer/footer.module.scss b/web/src/main/javascript/src/components/Footer/footer.module.scss new file mode 100644 index 00000000..2d0ce914 --- /dev/null +++ b/web/src/main/javascript/src/components/Footer/footer.module.scss @@ -0,0 +1,39 @@ +@import '../../variables.module.scss'; + +.footer { + pointer-events: none; + bottom: 0; + min-height: 68px; + width: 100%; + color: black; + position: absolute; + background: transparent; +} + +.footer-container { + font-size: .95rem; + margin-bottom: 10px; + display: flex; + height: 68px; + align-items: end; + justify-content: space-between; + padding-top: 3px; + padding-left: 28px; + padding-right: 28px; +} + +@media (max-width: 645px) { + .mobile-hidden { + display: none; + } + + .mobile-community-group { + margin-left: 40px; + margin-right: unset !important; + max-width: 100px; + } + + .mobile-citation { + max-width: 150px; + } + } \ No newline at end of file diff --git a/web/src/main/javascript/src/components/Footer/footer.tsx b/web/src/main/javascript/src/components/Footer/footer.tsx new file mode 100644 index 00000000..dd9b5b56 --- /dev/null +++ b/web/src/main/javascript/src/components/Footer/footer.tsx @@ -0,0 +1,66 @@ +import style from "./footer.module.scss"; +import { Link, useLocation } from "react-router-dom"; +import { + COMMUNITY_GROUP_URL, + ONCOTREE_SWAGGER_URL, + PageRoutes, +} from "../../shared/constants"; + +export default function Footer() { + const location = useLocation(); + + return ( +
+
+
+ + {" "} + When using OncoTree, please cite:
+
+ + Kundra et al., JCO Clinical Cancer Informatics 2021 + +
+ +
+ ); +} diff --git a/web/src/main/javascript/src/components/Header/Header.tsx b/web/src/main/javascript/src/components/Header/Header.tsx new file mode 100644 index 00000000..951fa83d --- /dev/null +++ b/web/src/main/javascript/src/components/Header/Header.tsx @@ -0,0 +1,314 @@ +import style from "./header.module.scss"; +import mainLogo from "../../assets/oncotree_logo_no_bg.svg"; +import { Link, useLocation, useNavigate } from "react-router-dom"; +import SearchBar from "../SearchBar/SearchBar"; +import OncoTree, { OncoTreeNode } from "@oncokb/oncotree"; +import { PageRoutes } from "../../shared/constants"; +import VersionSelect, { Version } from "../VersionSelect/VersionSelect"; +import { useEffect, useMemo, useRef, useState } from "react"; +import { OncoTreeStats, getTotalWidth, getTreeStats } from "../../shared/utils"; +import SearchBySelect from "../SearchBySelect/SearchBySelect"; +import IconButton from "../icon-buttons/IconButton"; +import { faNavicon, faSearch } from "@fortawesome/free-solid-svg-icons"; + +const LINKS_SECTION_HORIZONTAL_MARGIN = 30; +const MOBILE_MENU_HORIZONTAL_MARGIN = 32; +export interface IHeaderProps { + oncoTreeData: OncoTreeNode; + oncoTree: OncoTree | undefined; + onVersionChange: (version: Version) => void; +} + +export default function Header({ + oncoTreeData, + oncoTree, + onVersionChange, +}: IHeaderProps) { + const location = useLocation(); + const navigate = useNavigate(); + + const [searchSectionHidden, setSearchSectionHidden] = useState(true); + const [headerLinksHidden, setHeaderLinksHidden] = useState(true); + + const [showMobileSearch, setShowMobileSearch] = useState(false); + const [showMobileLinks, setShowMobileLinks] = useState(false); + + const headerRef = useRef(null); + const oncoTreeLogoRef = useRef(null); + const searchSectionRef = useRef(null); + const headerLinksRef = useRef(null); + const mobileSearchRef = useRef(null); + const mobileLinksRef = useRef(null); + const mobileSearchBarRef = useRef(null); + const mobileVersionSelectRef = useRef(null); + + const treeStats: OncoTreeStats = useMemo(() => { + return getTreeStats(oncoTreeData); + }, [oncoTreeData]); + + useEffect(() => { + function checkOverflow() { + if ( + !headerRef.current || + !oncoTreeLogoRef.current || + !headerLinksRef.current + ) { + return; + } + + const headerWidth = getTotalWidth(headerRef.current); + const oncoTreeLogoWidth = getTotalWidth(oncoTreeLogoRef.current); + const searchSectionWidth = searchSectionRef.current + ? getTotalWidth(searchSectionRef.current) + : 0; + const headerLinksWidth = getTotalWidth(headerLinksRef.current); + + setHeaderLinksHidden( + headerWidth < oncoTreeLogoWidth + searchSectionWidth + headerLinksWidth, + ); + + if (searchSectionRef.current) { + setSearchSectionHidden( + headerWidth < oncoTreeLogoWidth + searchSectionWidth + 120, + ); + } + } + + checkOverflow(); + window.addEventListener("resize", checkOverflow); + + return () => { + window.removeEventListener("resize", checkOverflow); + }; + }, [location, setHeaderLinksHidden, setSearchSectionHidden]); + + useEffect(() => { + if (!headerLinksHidden) { + setShowMobileLinks(false); + } + }, [headerLinksHidden]); + + useEffect(() => { + if (!searchSectionHidden) setShowMobileSearch(false); + }, [searchSectionHidden]); + + return ( + <> +
+ { + navigate(PageRoutes.HOME); + }} + /> + {location.pathname === PageRoutes.HOME && ( +
+ + +
+ +
+ )} +
+
+ + Home + + + News + + + Mapping + + + About + +
+ {headerLinksHidden && ( +
+ {location.pathname === PageRoutes.HOME && searchSectionHidden && ( + { + setShowMobileSearch((show) => !show); + setShowMobileLinks(false); + }} + /> + )} + { + setShowMobileLinks((show) => !show); + setShowMobileSearch(false); + }} + /> +
+ )} +
+
+
+ { + setShowMobileLinks(false); + setShowMobileSearch(false); + }} + > + Home + + { + setShowMobileLinks(false); + setShowMobileSearch(false); + }} + > + News + + { + setShowMobileLinks(false); + setShowMobileSearch(false); + }} + > + Mapping + + { + setShowMobileLinks(false); + setShowMobileSearch(false); + }} + > + About + +
+
+
+
+
+
+ +
+
+ Version +
+
+
+
+
+ +
+
+ +
+
+
+
+ + ); +} diff --git a/web/src/main/javascript/src/components/Header/header.module.scss b/web/src/main/javascript/src/components/Header/header.module.scss new file mode 100644 index 00000000..b8df56c7 --- /dev/null +++ b/web/src/main/javascript/src/components/Header/header.module.scss @@ -0,0 +1,42 @@ +@import '../../variables.module.scss'; + +.header { + background-color: $primary; + height: $header-height; + min-height: $header-min-height; + position: relative; + z-index: 7; + display: flex; + align-items: center; +} + +.header-link { + font-weight: 500; + font-size: 1.25rem; + color: white; + cursor: pointer; +} + +.header-link:hover { + color: lightblue !important +} + +.mobile-container { + position: absolute; + display: flex; + align-items: end; + padding-bottom: 20px; + z-index: 6; + width: 100%; + transition: 0.25s ease-out; + box-shadow: 0 2px 7px rgba(0,0,0,0.15),0px 5px 17px rgba(0,0,0,0.2); +} + +.mobile-links { + background-color: $primary; +} + +.mobile-search { + padding-top: 20px; + background-color: white; +} \ No newline at end of file diff --git a/web/src/main/javascript/src/components/SearchBar/SearchBar.tsx b/web/src/main/javascript/src/components/SearchBar/SearchBar.tsx new file mode 100644 index 00000000..cc0a9fa1 --- /dev/null +++ b/web/src/main/javascript/src/components/SearchBar/SearchBar.tsx @@ -0,0 +1,360 @@ +import OncoTree, { + D3OncoTreeNode, + OncoTreeNode, + OncoTreeSearchOption, +} from "@oncokb/oncotree"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import ReactSelect, { + ClearIndicatorProps, + ControlProps, + GroupBase, + components, +} from "react-select"; +import { + getNodeLabel, + getSearchOptions, + isValidField, +} from "../../shared/utils"; +import { faArrowUp, faArrowDown } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { css } from "@emotion/css"; +import variables from "../../variables.module.scss"; +import { useSearchParams } from "react-router-dom"; +import { + DEFAULT_FIELD, + SEARCH_BY_FIELD_INFO, + SearchByField, +} from "../../shared/constants"; + +export interface ISearchBarProps { + oncoTreeData: OncoTreeNode; + oncoTree: OncoTree | undefined; + mobileView?: boolean; +} + +const NEXT_BUTTON_DATA_TYPE = "nextButton"; +const PREV_BUTTON_DATA_TYPE = "prevButton"; +const USER_INPUT_VALUE = "USER_INPUT"; + +export default function SearchBar({ + oncoTreeData, + oncoTree, + mobileView = false, +}: ISearchBarProps) { + const [searchParams, setSearchParams] = useSearchParams(); + const search = searchParams.get("search"); + const field = searchParams.get("field"); + + const [input, setInput] = useState(""); + const [cancerTypeResults, setCancerTypeResults] = + useState(); + const [cancerTypeResultsIndex, setCancerTypeResultsIndex] = + useState(); + + const resetSearch = useCallback(() => { + oncoTree?.collapse(); + setInput(""); + searchParams.delete("search"); + setSearchParams(searchParams); + setCancerTypeResults(undefined); + setCancerTypeResultsIndex(undefined); + }, [ + oncoTree, + setInput, + searchParams, + setSearchParams, + setCancerTypeResults, + setCancerTypeResultsIndex, + ]); + + useEffect(() => { + if (!isValidField(field)) { + searchParams.set("field", DEFAULT_FIELD); + setSearchParams(searchParams); + } + }, [field, searchParams, setSearchParams]); + + const defaultOptions = useMemo(() => { + if (!isValidField(field)) { + return []; + } + return getSearchOptions(oncoTreeData, field); + }, [oncoTreeData, field]); + + const options = useMemo(() => { + let matchedCancerTypeIndex = -1; + let matchedCodeIndex = -1; + for (let i = 0; i < defaultOptions.length; i++) { + const formattedInput = input.trim().toLowerCase(); + if (defaultOptions[i].label.toLowerCase() === formattedInput) { + matchedCancerTypeIndex = i; + break; + } else if ( + field === SearchByField.NAME && + defaultOptions[i].value.trim().toLowerCase() === formattedInput + ) { + matchedCodeIndex = i; + break; + } + } + + if (input.length === 0) { + return defaultOptions; + } + if (matchedCancerTypeIndex > -1) { + return [ + defaultOptions[matchedCancerTypeIndex], + ...defaultOptions.slice(0, matchedCancerTypeIndex), + ...defaultOptions.slice(matchedCancerTypeIndex + 1), + ]; + } + if (matchedCodeIndex > -1) { + return [ + { label: input, value: USER_INPUT_VALUE }, + defaultOptions[matchedCodeIndex], + ...defaultOptions.slice(0, matchedCodeIndex), + ...defaultOptions.slice(matchedCodeIndex + 1), + ]; + } + return [{ label: input, value: USER_INPUT_VALUE }, ...defaultOptions]; + }, [defaultOptions, input, field]); + + const handleSearch = useCallback( + (keyword: string) => { + if (!oncoTree || !isValidField(field)) { + return; + } + + const results = oncoTree.search((node) => { + let searchString: string; + if (field === SearchByField.NAME) { + searchString = getNodeLabel(node.data); + } else { + searchString = node.data[SEARCH_BY_FIELD_INFO[field].dataName]; + } + + if (!searchString) { + return false; + } + + return searchString.toLowerCase().includes(keyword.toLowerCase()); + }); + setCancerTypeResults(results); + setCancerTypeResultsIndex(0); + if (results.length > 0) { + oncoTree.focus(results[0]); + } + }, + [oncoTree, field], + ); + + useEffect(() => { + if (search && oncoTree) { + handleSearch(search); + } + }, [search, oncoTree, handleSearch]); + + function getSearchBarValue(): OncoTreeSearchOption | null { + if (!search) { + return null; + } + + const option = options.find((option) => option.label === search); + if (option) { + return option; + } + return { label: search, value: USER_INPUT_VALUE }; + } + + const Control = useCallback( + ( + props: ControlProps< + OncoTreeSearchOption, + false, + GroupBase + >, + ) => { + const onMouseDown = props.innerProps.onMouseDown; + props.innerProps.onMouseDown = (event) => { + if ( + !(event.target instanceof HTMLDivElement) || + event.target.dataset.type === NEXT_BUTTON_DATA_TYPE || + event.target.dataset.type === PREV_BUTTON_DATA_TYPE + ) { + return undefined; + } + + const dataAttributes = event.target.dataset; + if ( + dataAttributes.type === NEXT_BUTTON_DATA_TYPE || + dataAttributes.type === PREV_BUTTON_DATA_TYPE + ) { + // make sure not on arrows + return undefined; + } + return onMouseDown?.(event); + }; + + return ; + }, + [], + ); + + return ( +
+ { + setInput(newValue); + }} + onChange={(selection) => { + if (selection) { + handleSearch(selection.label); + searchParams.set("search", selection.label); + setSearchParams(searchParams); + } else { + resetSearch(); + } + }} + options={options} + components={{ + ClearIndicator, + Control, + }} + styles={{ + option(base, props) { + if (props.isSelected) { + return { ...base, backgroundColor: variables.primary }; + } else { + return { ...base, color: "black" }; + } + }, + control(base) { + return { + ...base, + minHeight: 42, + minWidth: mobileView ? "unset" : 250, + }; + }, + }} + theme={(theme) => { + return { + ...theme, + colors: { + ...theme.colors, + primary: variables.primary, + neutral90: variables.white, + }, + }; + }} + /> +
+ ); + + function ClearIndicator( + props: ClearIndicatorProps< + OncoTreeSearchOption, + false, + GroupBase + >, + ) { + const inputStyle = props.getStyles("input", { ...props, isHidden: false }); + const inputColor = inputStyle.color ?? "black"; + const clearIndicatorClass = css(props.getStyles("clearIndicator", props)); + + const resultsAndIndexDefined = + cancerTypeResults !== undefined && cancerTypeResultsIndex !== undefined; + + function getResultsNumberSpan() { + if (!resultsAndIndexDefined) { + return undefined; + } + + if (cancerTypeResults.length === 0) { + return ( + + 0/0 + + ); + } + + return ( + {`${cancerTypeResultsIndex + 1}/${cancerTypeResults.length}`} + ); + } + + return ( + <> + {getResultsNumberSpan()} + {resultsAndIndexDefined && cancerTypeResults.length > 0 && ( +
+
{ + let newIndex = cancerTypeResults.length - 1; + if (cancerTypeResultsIndex !== 0) { + newIndex = cancerTypeResultsIndex - 1; + } + oncoTree?.focus(cancerTypeResults[newIndex]); + setCancerTypeResultsIndex(newIndex); + } + : undefined + } + > + +
+
{ + let newIndex = 0; + if ( + cancerTypeResultsIndex !== + cancerTypeResults.length - 1 + ) { + newIndex = cancerTypeResultsIndex + 1; + } + oncoTree?.focus(cancerTypeResults[newIndex]); + setCancerTypeResultsIndex(newIndex); + } + : undefined + } + > + +
+
+ )} + + + ); + } +} diff --git a/web/src/main/javascript/src/components/SearchBar/search-bar.module.scss b/web/src/main/javascript/src/components/SearchBar/search-bar.module.scss new file mode 100644 index 00000000..5cad6fc3 --- /dev/null +++ b/web/src/main/javascript/src/components/SearchBar/search-bar.module.scss @@ -0,0 +1,13 @@ +@import '../../variables.module.scss'; + +.search-bar-option { + display: flex; + align-items: center; + cursor: default; + padding: 4px 12px; + color-scheme: light; +} + +.search-bar-option:hover { + background-color: #DEEBFF; +} \ No newline at end of file diff --git a/web/src/main/javascript/src/components/SearchBySelect/SearchBySelect.tsx b/web/src/main/javascript/src/components/SearchBySelect/SearchBySelect.tsx new file mode 100644 index 00000000..a8a0b033 --- /dev/null +++ b/web/src/main/javascript/src/components/SearchBySelect/SearchBySelect.tsx @@ -0,0 +1,117 @@ +import { useEffect, useRef, useState } from "react"; +import { faChevronDown } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { + DEFAULT_FIELD, + SEARCH_BY_FIELD_INFO, + SearchByField, +} from "../../shared/constants"; +import style from "./search-by-select.module.scss"; +import searchBarStyle from "./../SearchBar/search-bar.module.scss"; +import { useSearchParams } from "react-router-dom"; +import { isValidField } from "../../shared/utils"; + +const HORIZONTAL_MARGIN = 20; +export interface ISearchBySelectProps { + mobileView?: boolean; +} + +export default function SearchBySelect({ + mobileView = false, +}: ISearchBySelectProps) { + const [searchParams, setSearchParams] = useSearchParams(); + const field = searchParams.get("field"); + + const [showingFieldOptions, setShowingFieldOptions] = useState(false); + + const searchByContainerRef = useRef(null); + const searchByOptionsContainerRef = useRef(null); + + useEffect(() => { + function handleClickOutside(event: MouseEvent) { + if ( + searchByContainerRef.current && + searchByOptionsContainerRef.current && + !searchByContainerRef.current.contains(event.target as HTMLElement) && + !searchByOptionsContainerRef.current.contains( + event.target as HTMLElement, + ) && + showingFieldOptions + ) { + setShowingFieldOptions(false); + } + } + + document.addEventListener("click", handleClickOutside); + + return () => { + document.removeEventListener("click", handleClickOutside); + }; + }, [showingFieldOptions]); + + function getSearchByOptionsContent() { + return Object.values(SearchByField).map((option) => { + return ( +
{ + searchParams.set("field", option); + setSearchParams(searchParams); + setShowingFieldOptions(false); + }} + > + {SEARCH_BY_FIELD_INFO[option].displayName} +
+ ); + }); + } + + return ( + <> +
{ + setShowingFieldOptions((prev) => !prev); + }} + onMouseDown={(event) => { + if (event.detail > 1) { + event.preventDefault(); + } + }} + > + + {!mobileView && "Search by "} + + {isValidField(field) + ? SEARCH_BY_FIELD_INFO[field].displayName + : SEARCH_BY_FIELD_INFO[DEFAULT_FIELD].displayName} + + + +
+
+ {getSearchByOptionsContent()} +
+ + ); +} diff --git a/web/src/main/javascript/src/components/SearchBySelect/search-by-select.module.scss b/web/src/main/javascript/src/components/SearchBySelect/search-by-select.module.scss new file mode 100644 index 00000000..4c62d7d3 --- /dev/null +++ b/web/src/main/javascript/src/components/SearchBySelect/search-by-select.module.scss @@ -0,0 +1,24 @@ +@import '../../variables.module.scss'; + +.search-by-container { + display: flex; + align-items: center; + max-width: 100px; + cursor: pointer; + line-height: 18px; + font-size: .9rem; +} + +.search-by-options-container { + background-color: $secondary; + min-width: 200px; + z-index: 1000; + color: black; + position: fixed; + top: 80px; + border: 1px solid #eee; + padding-top: 12px; + padding-bottom: 12px; + box-shadow: $shadow; + border-radius: 8px; +} \ No newline at end of file diff --git a/web/src/main/javascript/src/components/Toolbar/Toolbar.tsx b/web/src/main/javascript/src/components/Toolbar/Toolbar.tsx new file mode 100644 index 00000000..072c03f8 --- /dev/null +++ b/web/src/main/javascript/src/components/Toolbar/Toolbar.tsx @@ -0,0 +1,24 @@ +import OncoTree, { ToolbarOptions, buildToolbar } from "@oncokb/oncotree"; +import { useEffect, useRef } from "react"; + +const TOOLBAR_CONTAINER_ID = 'oncotree-toolbar-container'; + +export interface IToolbarProps { + oncoTree: OncoTree, + options?: ToolbarOptions +} + +export default function Toolbar({oncoTree, options}: IToolbarProps) { + const toolbarContainerRef = useRef(null); + + useEffect(() => { + if (toolbarContainerRef.current) { + toolbarContainerRef.current.innerHTML = ''; + buildToolbar(TOOLBAR_CONTAINER_ID, oncoTree, options); + } + }, [oncoTree, options]); + + return ( +
+ ) +} \ No newline at end of file diff --git a/web/src/main/javascript/src/components/Toolbar/ToolbarItem.tsx b/web/src/main/javascript/src/components/Toolbar/ToolbarItem.tsx new file mode 100644 index 00000000..b8a79f63 --- /dev/null +++ b/web/src/main/javascript/src/components/Toolbar/ToolbarItem.tsx @@ -0,0 +1,33 @@ +import OncoTree, { + buildExpandItem, + buildCollapseItem, + ToolbarAction, +} from "@oncokb/oncotree"; +import { useEffect, useRef } from "react"; + +const EXPAND_ITEM_CONTAINER_ID = "oncotree-expand-item-container"; +const COLLAPSE_ITEM_CONTAINER_ID = "oncotree-collapse-item-container"; + +export interface IToolbarProps { + oncoTree: OncoTree; + type: ToolbarAction.EXPAND | ToolbarAction.COLLAPSE; +} + +export default function ToolbarItem({ oncoTree, type }: IToolbarProps) { + const toolbarContainerRef = useRef(null); + const toolbarItemId = + type === ToolbarAction.EXPAND + ? EXPAND_ITEM_CONTAINER_ID + : COLLAPSE_ITEM_CONTAINER_ID; + + useEffect(() => { + if (toolbarContainerRef.current) { + toolbarContainerRef.current.innerHTML = ""; + type === ToolbarAction.EXPAND + ? buildExpandItem(toolbarItemId, oncoTree) + : buildCollapseItem(toolbarItemId, oncoTree); + } + }, [oncoTree, toolbarItemId, type]); + + return
; +} diff --git a/web/src/main/javascript/src/components/VersionSelect/VersionSelect.tsx b/web/src/main/javascript/src/components/VersionSelect/VersionSelect.tsx new file mode 100644 index 00000000..dc7292aa --- /dev/null +++ b/web/src/main/javascript/src/components/VersionSelect/VersionSelect.tsx @@ -0,0 +1,188 @@ +import { useEffect, useState } from "react"; +import { + DEFAULT_VERSION, + DEVELOPMENT_VERSION, + ONCOTREE_VERSIONS_URL, +} from "../../shared/constants"; +import { toast } from "react-toastify"; +import ReactSelect from "react-select"; +import { OncoTreeSearchOption } from "@oncokb/oncotree"; +import { Tooltip } from "react-tooltip"; +import variables from "../../variables.module.scss"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faInfoCircle, faWarning } from "@fortawesome/free-solid-svg-icons"; +import { OncoTreeStats } from "../../shared/utils"; +import { useSearchParams } from "react-router-dom"; + +export type Version = { + api_identifier: string; + description: string; + release_date: string; + visible: boolean; +}; + +type VersionOption = OncoTreeSearchOption & { + data: Version; +}; + +export interface IVersionSelectProps { + stats: OncoTreeStats; + onVersionChange: (version: Version) => void; + mobileView?: boolean; +} + +export default function VersionSelect({ + stats, + onVersionChange, + mobileView = false, +}: IVersionSelectProps) { + const [searchParams, setSearchParams] = useSearchParams(); + const version = searchParams.get("version"); + + const [versionOptions, setVersionOptions] = useState(); + + useEffect(() => { + async function getVersions() { + try { + const response = await fetch(ONCOTREE_VERSIONS_URL); + const data: Version[] = await response.json(); + + // TODO: do we want to parse out when 'visible === false'? Currenly not doing that + + const versionOptions: VersionOption[] = []; + for (const version of data) { + const versionOption: VersionOption = { + label: version.api_identifier, + value: version.api_identifier, + data: version, + }; + versionOptions.push(versionOption); + } + setVersionOptions(versionOptions); + } catch { + toast.error("Error fetching versions"); + } + } + + getVersions(); + }, []); + + function getSelectedVersion() { + if (!version) { + return undefined; + } + + const versionOption = versionOptions?.find( + (option) => option.data.api_identifier === version, + ); + if (!versionOption) { + return undefined; + } + return versionOption; + } + + useEffect(() => { + if ( + !version || + (versionOptions && + !versionOptions.find((option) => option.value === version)) + ) { + searchParams.set("version", DEFAULT_VERSION); + setSearchParams(searchParams); + } + }, [version, versionOptions, searchParams, setSearchParams]); + + function getTooltipContent() { + return ` + Includes ${stats.numCancerTypes} cancer type${stats.numCancerTypes === 1 ? "" : "s"} from ${stats.numTissues} tissue${stats.numTissues === 1 ? "" : "s"}. +

+ ${getSelectedVersion()?.data.description} + `; + } + + return ( +
+
+ + (new Date(a.data.release_date).getTime() - + new Date(b.data.release_date).getTime()) * + -1, + )} + onChange={(newValue) => { + if (newValue) { + searchParams.set("version", newValue.value); + searchParams.delete("search"); + setSearchParams(searchParams); + onVersionChange(newValue.data); + } + }} + styles={{ + container(base) { + if (mobileView) { + return { ...base, flexGrow: 1 }; + } + return base; + }, + option(base, props) { + if (props.isSelected) { + return { ...base, backgroundColor: variables.primary }; + } else { + return { ...base, color: "black" }; + } + }, + control(base) { + return { + ...base, + minHeight: 42, + minWidth: mobileView ? "100%" : 265, + }; + }, + }} + theme={(theme) => { + return { + ...theme, + colors: { + ...theme.colors, + primary: variables.primary, + neutral90: variables.white, + }, + }; + }} + /> +
+ +
+ +
+ {version === DEVELOPMENT_VERSION && ( + + + + Subject to change without notice + + + )} +
+ ); +} diff --git a/web/src/main/javascript/src/components/icon-buttons/IconButton.tsx b/web/src/main/javascript/src/components/icon-buttons/IconButton.tsx new file mode 100644 index 00000000..a7330c7f --- /dev/null +++ b/web/src/main/javascript/src/components/icon-buttons/IconButton.tsx @@ -0,0 +1,11 @@ +import { + FontAwesomeIcon, + FontAwesomeIconProps, +} from "@fortawesome/react-fontawesome"; +import styles from "./icon-button.module.scss"; + +export default function IconButton(props: FontAwesomeIconProps) { + const { className = styles["icon-button"], size = "xl", ...rest } = props; + + return ; +} diff --git a/web/src/main/javascript/src/components/icon-buttons/icon-button.module.scss b/web/src/main/javascript/src/components/icon-buttons/icon-button.module.scss new file mode 100644 index 00000000..22875b72 --- /dev/null +++ b/web/src/main/javascript/src/components/icon-buttons/icon-button.module.scss @@ -0,0 +1,9 @@ +.icon-button { + color: white; + cursor: pointer; + user-select: none; +} + +.icon-button:hover { + color: lightblue !important +} \ No newline at end of file diff --git a/web/src/main/javascript/src/main.tsx b/web/src/main/javascript/src/main.tsx new file mode 100644 index 00000000..1a7a53ff --- /dev/null +++ b/web/src/main/javascript/src/main.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App.tsx"; +import { BrowserRouter } from "react-router-dom"; + +ReactDOM.createRoot(document.getElementById("root")!).render( + + + + + , +); diff --git a/web/src/main/javascript/src/pages/About/About.tsx b/web/src/main/javascript/src/pages/About/About.tsx new file mode 100644 index 00000000..806d8bba --- /dev/null +++ b/web/src/main/javascript/src/pages/About/About.tsx @@ -0,0 +1,3 @@ +export default function About() { + return -
-
- -
- -
-

Website Questions: OncoTree_Users Google Group

-
-
+
diff --git a/web/src/main/resources/static/js/bootstrap.min.js b/web/src/main/resources/static/js/bootstrap.min.js deleted file mode 100644 index c4c0d1f9..00000000 --- a/web/src/main/resources/static/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})},function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(t))return r(t,e,n);if(c.nodeList(t))return i(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function i(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return u(document.body,t,e,n)}var c=n(6),u=n(5);t.exports=o},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){r.off(t,o),e.apply(n,arguments)}var r=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;for(o;o0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,f.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(s.default);t.exports=p})},function(t,e){function n(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=n},function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function r(t,e,n,r,i){return"function"==typeof t.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return o(t,e,n,r,i)}))}function i(t,e,n,o){return function(n){n.delegateTarget=a(n.target,e),n.delegateTarget&&o.call(t,n)}}var a=n(4);t.exports=r},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e){function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}t.exports=n}])}); \ No newline at end of file diff --git a/web/src/main/resources/static/js/d3.js b/web/src/main/resources/static/js/d3.js deleted file mode 100644 index fc556ed4..00000000 --- a/web/src/main/resources/static/js/d3.js +++ /dev/null @@ -1,4149 +0,0 @@ -(function(){if (!Date.now) Date.now = function() { - return +new Date; -}; -try { - document.createElement("div").style.setProperty("opacity", 0, ""); -} catch (error) { - var d3_style_prototype = CSSStyleDeclaration.prototype, - d3_style_setProperty = d3_style_prototype.setProperty; - d3_style_prototype.setProperty = function(name, value, priority) { - d3_style_setProperty.call(this, name, value + "", priority); - }; -} -d3 = {version: "2.4.4"}; // semver -var d3_array = d3_arraySlice; // conversion for NodeLists - -function d3_arrayCopy(pseudoarray) { - var i = -1, n = pseudoarray.length, array = []; - while (++i < n) array.push(pseudoarray[i]); - return array; -} - -function d3_arraySlice(pseudoarray) { - return Array.prototype.slice.call(pseudoarray); -} - -try { - d3_array(document.documentElement.childNodes)[0].nodeType; -} catch(e) { - d3_array = d3_arrayCopy; -} - -var d3_arraySubclass = [].__proto__? - -// Until ECMAScript supports array subclassing, prototype injection works well. -function(array, prototype) { - array.__proto__ = prototype; -}: - -// And if your browser doesn't support __proto__, we'll use direct extension. -function(array, prototype) { - for (var property in prototype) array[property] = prototype[property]; -}; -function d3_this() { - return this; -} -d3.functor = function(v) { - return typeof v === "function" ? v : function() { return v; }; -}; -// A getter-setter method that preserves the appropriate `this` context. -d3.rebind = function(object, method) { - return function() { - var x = method.apply(object, arguments); - return arguments.length ? object : x; - }; -}; -d3.ascending = function(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -}; -d3.descending = function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; -}; -d3.mean = function(array, f) { - var n = array.length, - a, - m = 0, - i = -1, - j = 0; - if (arguments.length === 1) { - while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; - } else { - while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; - } - return j ? m : undefined; -}; -d3.median = function(array, f) { - if (arguments.length > 1) array = array.map(f); - array = array.filter(d3_number); - return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined; -}; -d3.min = function(array, f) { - var i = -1, - n = array.length, - a, - b; - if (arguments.length === 1) { - while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; - while (++i < n) if ((b = array[i]) != null && a > b) a = b; - } else { - while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; - } - return a; -}; -d3.max = function(array, f) { - var i = -1, - n = array.length, - a, - b; - if (arguments.length === 1) { - while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; - while (++i < n) if ((b = array[i]) != null && b > a) a = b; - } else { - while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; - while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; - } - return a; -}; -function d3_number(x) { - return x != null && !isNaN(x); -} -d3.sum = function(array, f) { - var s = 0, - n = array.length, - a, - i = -1; - - if (arguments.length === 1) { - while (++i < n) if (!isNaN(a = +array[i])) s += a; - } else { - while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; - } - - return s; -}; -// R-7 per -d3.quantile = function(values, p) { - var H = (values.length - 1) * p + 1, - h = Math.floor(H), - v = values[h - 1], - e = H - h; - return e ? v + e * (values[h] - v) : v; -}; -d3.zip = function() { - if (!(n = arguments.length)) return []; - for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) { - for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) { - zip[j] = arguments[j][i]; - } - } - return zips; -}; - -function d3_zipLength(d) { - return d.length; -} -// Locate the insertion point for x in a to maintain sorted order. The -// arguments lo and hi may be used to specify a subset of the array which should -// be considered; by default the entire array is used. If x is already present -// in a, the insertion point will be before (to the left of) any existing -// entries. The return value is suitable for use as the first argument to -// `array.splice` assuming that a is already sorted. -// -// The returned insertion point i partitions the array a into two halves so that -// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi] -// for the right side. -d3.bisectLeft = function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = (lo + hi) >> 1; - if (a[mid] < x) lo = mid + 1; - else hi = mid; - } - return lo; -}; - -// Similar to bisectLeft, but returns an insertion point which comes after (to -// the right of) any existing entries of x in a. -// -// The returned insertion point i partitions the array into two halves so that -// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi] -// for the right side. -d3.bisect = -d3.bisectRight = function(a, x, lo, hi) { - if (arguments.length < 3) lo = 0; - if (arguments.length < 4) hi = a.length; - while (lo < hi) { - var mid = (lo + hi) >> 1; - if (x < a[mid]) hi = mid; - else lo = mid + 1; - } - return lo; -}; -d3.first = function(array, f) { - var i = 0, - n = array.length, - a = array[0], - b; - if (arguments.length === 1) f = d3.ascending; - while (++i < n) { - if (f.call(array, a, b = array[i]) > 0) { - a = b; - } - } - return a; -}; -d3.last = function(array, f) { - var i = 0, - n = array.length, - a = array[0], - b; - if (arguments.length === 1) f = d3.ascending; - while (++i < n) { - if (f.call(array, a, b = array[i]) <= 0) { - a = b; - } - } - return a; -}; -d3.nest = function() { - var nest = {}, - keys = [], - sortKeys = [], - sortValues, - rollup; - - function map(array, depth) { - if (depth >= keys.length) return rollup - ? rollup.call(nest, array) : (sortValues - ? array.sort(sortValues) - : array); - - var i = -1, - n = array.length, - key = keys[depth++], - keyValue, - object, - o = {}; - - while (++i < n) { - if ((keyValue = key(object = array[i])) in o) { - o[keyValue].push(object); - } else { - o[keyValue] = [object]; - } - } - - for (keyValue in o) { - o[keyValue] = map(o[keyValue], depth); - } - - return o; - } - - function entries(map, depth) { - if (depth >= keys.length) return map; - - var a = [], - sortKey = sortKeys[depth++], - key; - - for (key in map) { - a.push({key: key, values: entries(map[key], depth)}); - } - - if (sortKey) a.sort(function(a, b) { - return sortKey(a.key, b.key); - }); - - return a; - } - - nest.map = function(array) { - return map(array, 0); - }; - - nest.entries = function(array) { - return entries(map(array, 0), 0); - }; - - nest.key = function(d) { - keys.push(d); - return nest; - }; - - // Specifies the order for the most-recently specified key. - // Note: only applies to entries. Map keys are unordered! - nest.sortKeys = function(order) { - sortKeys[keys.length - 1] = order; - return nest; - }; - - // Specifies the order for leaf values. - // Applies to both maps and entries array. - nest.sortValues = function(order) { - sortValues = order; - return nest; - }; - - nest.rollup = function(f) { - rollup = f; - return nest; - }; - - return nest; -}; -d3.keys = function(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; -}; -d3.values = function(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; -}; -d3.entries = function(map) { - var entries = []; - for (var key in map) entries.push({key: key, value: map[key]}); - return entries; -}; -d3.permute = function(array, indexes) { - var permutes = [], - i = -1, - n = indexes.length; - while (++i < n) permutes[i] = array[indexes[i]]; - return permutes; -}; -d3.merge = function(arrays) { - return Array.prototype.concat.apply([], arrays); -}; -d3.split = function(array, f) { - var arrays = [], - values = [], - value, - i = -1, - n = array.length; - if (arguments.length < 2) f = d3_splitter; - while (++i < n) { - if (f.call(values, value = array[i], i)) { - values = []; - } else { - if (!values.length) arrays.push(values); - values.push(value); - } - } - return arrays; -}; - -function d3_splitter(d) { - return d == null; -} -function d3_collapse(s) { - return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " "); -} -/** - * @param {number} start - * @param {number=} stop - * @param {number=} step - */ -d3.range = function(start, stop, step) { - if (arguments.length < 3) { - step = 1; - if (arguments.length < 2) { - stop = start; - start = 0; - } - } - if ((stop - start) / step == Infinity) throw new Error("infinite range"); - var range = [], - i = -1, - j; - if (step < 0) while ((j = start + step * ++i) > stop) range.push(j); - else while ((j = start + step * ++i) < stop) range.push(j); - return range; -}; -d3.requote = function(s) { - return s.replace(d3_requote_re, "\\$&"); -}; - -var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; -d3.round = function(x, n) { - return n - ? Math.round(x * Math.pow(10, n)) * Math.pow(10, -n) - : Math.round(x); -}; -d3.xhr = function(url, mime, callback) { - var req = new XMLHttpRequest; - if (arguments.length < 3) callback = mime; - else if (mime && req.overrideMimeType) req.overrideMimeType(mime); - req.open("GET", url, true); - req.onreadystatechange = function() { - if (req.readyState === 4) callback(req.status < 300 ? req : null); - }; - req.send(null); -}; -d3.text = function(url, mime, callback) { - function ready(req) { - callback(req && req.responseText); - } - if (arguments.length < 3) { - callback = mime; - mime = null; - } - d3.xhr(url, mime, ready); -}; -d3.json = function(url, callback) { - d3.text(url, "application/json", function(text) { - callback(text ? JSON.parse(text) : null); - }); -}; -d3.html = function(url, callback) { - d3.text(url, "text/html", function(text) { - if (text != null) { // Treat empty string as valid HTML. - var range = document.createRange(); - range.selectNode(document.body); - text = range.createContextualFragment(text); - } - callback(text); - }); -}; -d3.xml = function(url, mime, callback) { - function ready(req) { - callback(req && req.responseXML); - } - if (arguments.length < 3) { - callback = mime; - mime = null; - } - d3.xhr(url, mime, ready); -}; -d3.ns = { - - prefix: { - svg: "http://www.w3.org/2000/svg", - xhtml: "http://www.w3.org/1999/xhtml", - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }, - - qualify: function(name) { - var i = name.indexOf(":"); - return i < 0 ? name : { - space: d3.ns.prefix[name.substring(0, i)], - local: name.substring(i + 1) - }; - } - -}; -/** @param {...string} types */ -d3.dispatch = function(types) { - var dispatch = {}, - type; - for (var i = 0, n = arguments.length; i < n; i++) { - type = arguments[i]; - dispatch[type] = d3_dispatch(type); - } - return dispatch; -}; - -function d3_dispatch(type) { - var dispatch = {}, - listeners = []; - - dispatch.add = function(listener) { - for (var i = 0; i < listeners.length; i++) { - if (listeners[i].listener == listener) return dispatch; // already registered - } - listeners.push({listener: listener, on: true}); - return dispatch; - }; - - dispatch.remove = function(listener) { - for (var i = 0; i < listeners.length; i++) { - var l = listeners[i]; - if (l.listener == listener) { - l.on = false; - listeners = listeners.slice(0, i).concat(listeners.slice(i + 1)); - break; - } - } - return dispatch; - }; - - dispatch.dispatch = function() { - var ls = listeners; // defensive reference - for (var i = 0, n = ls.length; i < n; i++) { - var l = ls[i]; - if (l.on) l.listener.apply(this, arguments); - } - }; - - return dispatch; -}; -// TODO align -d3.format = function(specifier) { - var match = d3_format_re.exec(specifier), - fill = match[1] || " ", - sign = match[3] || "", - zfill = match[5], - width = +match[6], - comma = match[7], - precision = match[8], - type = match[9], - scale = 1, - suffix = "", - integer = false; - - if (precision) precision = +precision.substring(1); - - if (zfill) { - fill = "0"; // TODO align = "="; - if (comma) width -= Math.floor((width - 1) / 4); - } - - switch (type) { - case "n": comma = true; type = "g"; break; - case "%": scale = 100; suffix = "%"; type = "f"; break; - case "p": scale = 100; suffix = "%"; type = "r"; break; - case "d": integer = true; precision = 0; break; - case "s": scale = -1; type = "r"; break; - } - - // If no precision is specified for r, fallback to general notation. - if (type == "r" && !precision) type = "g"; - - type = d3_format_types[type] || d3_format_typeDefault; - - return function(value) { - - // Return the empty string for floats formatted as ints. - if (integer && (value % 1)) return ""; - - // Convert negative to positive, and record the sign prefix. - var negative = (value < 0) && (value = -value) ? "\u2212" : sign; - - // Apply the scale, computing it from the value's exponent for si format. - if (scale < 0) { - var prefix = d3.formatPrefix(value, precision); - value *= prefix.scale; - suffix = prefix.symbol; - } else { - value *= scale; - } - - // Convert to the desired precision. - value = type(value, precision); - - // If the fill character is 0, the sign and group is applied after the fill. - if (zfill) { - var length = value.length + negative.length; - if (length < width) value = new Array(width - length + 1).join(fill) + value; - if (comma) value = d3_format_group(value); - value = negative + value; - } - - // Otherwise (e.g., space-filling), the sign and group is applied before. - else { - if (comma) value = d3_format_group(value); - value = negative + value; - var length = value.length; - if (length < width) value = new Array(width - length + 1).join(fill) + value; - } - - return value + suffix; - }; -}; - -// [[fill]align][sign][#][0][width][,][.precision][type] -var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/; - -var d3_format_types = { - g: function(x, p) { return x.toPrecision(p); }, - e: function(x, p) { return x.toExponential(p); }, - f: function(x, p) { return x.toFixed(p); }, - r: function(x, p) { return d3.round(x, p = d3_format_precision(x, p)).toFixed(Math.max(0, Math.min(20, p))); } -}; - -function d3_format_precision(x, p) { - return p - (x ? 1 + Math.floor(Math.log(x + Math.pow(10, 1 + Math.floor(Math.log(x) / Math.LN10) - p)) / Math.LN10) : 1); -} - -function d3_format_typeDefault(x) { - return x + ""; -} - -// Apply comma grouping for thousands. -function d3_format_group(value) { - var i = value.lastIndexOf("."), - f = i >= 0 ? value.substring(i) : (i = value.length, ""), - t = []; - while (i > 0) t.push(value.substring(i -= 3, i + 3)); - return t.reverse().join(",") + f; -} -var d3_formatPrefixes = ["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(d3_formatPrefix); - -d3.formatPrefix = function(value, precision) { - var i = 0; - if (value) { - if (value < 0) value *= -1; - if (precision) value = d3.round(value, d3_format_precision(value, precision)); - i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); - i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3)); - } - return d3_formatPrefixes[8 + i / 3]; -}; - -function d3_formatPrefix(d, i) { - return { - scale: Math.pow(10, (8 - i) * 3), - symbol: d - }; -} - -/* - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * - Neither the name of the author nor the names of contributors may be used to - * endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -var d3_ease_quad = d3_ease_poly(2), - d3_ease_cubic = d3_ease_poly(3); - -var d3_ease = { - linear: function() { return d3_ease_linear; }, - poly: d3_ease_poly, - quad: function() { return d3_ease_quad; }, - cubic: function() { return d3_ease_cubic; }, - sin: function() { return d3_ease_sin; }, - exp: function() { return d3_ease_exp; }, - circle: function() { return d3_ease_circle; }, - elastic: d3_ease_elastic, - back: d3_ease_back, - bounce: function() { return d3_ease_bounce; } -}; - -var d3_ease_mode = { - "in": function(f) { return f; }, - "out": d3_ease_reverse, - "in-out": d3_ease_reflect, - "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); } -}; - -d3.ease = function(name) { - var i = name.indexOf("-"), - t = i >= 0 ? name.substring(0, i) : name, - m = i >= 0 ? name.substring(i + 1) : "in"; - return d3_ease_clamp(d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1)))); -}; - -function d3_ease_clamp(f) { - return function(t) { - return t <= 0 ? 0 : t >= 1 ? 1 : f(t); - }; -} - -function d3_ease_reverse(f) { - return function(t) { - return 1 - f(1 - t); - }; -} - -function d3_ease_reflect(f) { - return function(t) { - return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t))); - }; -} - -function d3_ease_linear(t) { - return t; -} - -function d3_ease_poly(e) { - return function(t) { - return Math.pow(t, e); - } -} - -function d3_ease_sin(t) { - return 1 - Math.cos(t * Math.PI / 2); -} - -function d3_ease_exp(t) { - return Math.pow(2, 10 * (t - 1)); -} - -function d3_ease_circle(t) { - return 1 - Math.sqrt(1 - t * t); -} - -function d3_ease_elastic(a, p) { - var s; - if (arguments.length < 2) p = 0.45; - if (arguments.length < 1) { a = 1; s = p / 4; } - else s = p / (2 * Math.PI) * Math.asin(1 / a); - return function(t) { - return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p); - }; -} - -function d3_ease_back(s) { - if (!s) s = 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; -} - -function d3_ease_bounce(t) { - return t < 1 / 2.75 ? 7.5625 * t * t - : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 - : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 - : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; -} -d3.event = null; -d3.interpolate = function(a, b) { - var i = d3.interpolators.length, f; - while (--i >= 0 && !(f = d3.interpolators[i](a, b))); - return f; -}; - -d3.interpolateNumber = function(a, b) { - b -= a; - return function(t) { return a + b * t; }; -}; - -d3.interpolateRound = function(a, b) { - b -= a; - return function(t) { return Math.round(a + b * t); }; -}; - -d3.interpolateString = function(a, b) { - var m, // current match - i, // current index - j, // current index (for coallescing) - s0 = 0, // start index of current string prefix - s1 = 0, // end index of current string prefix - s = [], // string constants and placeholders - q = [], // number interpolators - n, // q.length - o; - - // Reset our regular expression! - d3_interpolate_number.lastIndex = 0; - - // Find all numbers in b. - for (i = 0; m = d3_interpolate_number.exec(b); ++i) { - if (m.index) s.push(b.substring(s0, s1 = m.index)); - q.push({i: s.length, x: m[0]}); - s.push(null); - s0 = d3_interpolate_number.lastIndex; - } - if (s0 < b.length) s.push(b.substring(s0)); - - // Find all numbers in a. - for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) { - o = q[i]; - if (o.x == m[0]) { // The numbers match, so coallesce. - if (o.i) { - if (s[o.i + 1] == null) { // This match is followed by another number. - s[o.i - 1] += o.x; - s.splice(o.i, 1); - for (j = i + 1; j < n; ++j) q[j].i--; - } else { // This match is followed by a string, so coallesce twice. - s[o.i - 1] += o.x + s[o.i + 1]; - s.splice(o.i, 2); - for (j = i + 1; j < n; ++j) q[j].i -= 2; - } - } else { - if (s[o.i + 1] == null) { // This match is followed by another number. - s[o.i] = o.x; - } else { // This match is followed by a string, so coallesce twice. - s[o.i] = o.x + s[o.i + 1]; - s.splice(o.i + 1, 1); - for (j = i + 1; j < n; ++j) q[j].i--; - } - } - q.splice(i, 1); - n--; - i--; - } else { - o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x)); - } - } - - // Remove any numbers in b not found in a. - while (i < n) { - o = q.pop(); - if (s[o.i + 1] == null) { // This match is followed by another number. - s[o.i] = o.x; - } else { // This match is followed by a string, so coallesce twice. - s[o.i] = o.x + s[o.i + 1]; - s.splice(o.i + 1, 1); - } - n--; - } - - // Special optimization for only a single match. - if (s.length === 1) { - return s[0] == null ? q[0].x : function() { return b; }; - } - - // Otherwise, interpolate each of the numbers and rejoin the string. - return function(t) { - for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; -}; - -d3.interpolateRgb = function(a, b) { - a = d3.rgb(a); - b = d3.rgb(b); - var ar = a.r, - ag = a.g, - ab = a.b, - br = b.r - ar, - bg = b.g - ag, - bb = b.b - ab; - return function(t) { - return "#" - + d3_rgb_hex(Math.round(ar + br * t)) - + d3_rgb_hex(Math.round(ag + bg * t)) - + d3_rgb_hex(Math.round(ab + bb * t)); - }; -}; - -// interpolates HSL space, but outputs RGB string (for compatibility) -d3.interpolateHsl = function(a, b) { - a = d3.hsl(a); - b = d3.hsl(b); - var h0 = a.h, - s0 = a.s, - l0 = a.l, - h1 = b.h - h0, - s1 = b.s - s0, - l1 = b.l - l0; - return function(t) { - return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString(); - }; -}; - -d3.interpolateArray = function(a, b) { - var x = [], - c = [], - na = a.length, - nb = b.length, - n0 = Math.min(a.length, b.length), - i; - for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i])); - for (; i < na; ++i) c[i] = a[i]; - for (; i < nb; ++i) c[i] = b[i]; - return function(t) { - for (i = 0; i < n0; ++i) c[i] = x[i](t); - return c; - }; -}; - -d3.interpolateObject = function(a, b) { - var i = {}, - c = {}, - k; - for (k in a) { - if (k in b) { - i[k] = d3_interpolateByName(k)(a[k], b[k]); - } else { - c[k] = a[k]; - } - } - for (k in b) { - if (!(k in a)) { - c[k] = b[k]; - } - } - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; -} - -var d3_interpolate_number = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g, - d3_interpolate_rgb = {background: 1, fill: 1, stroke: 1}; - -function d3_interpolateByName(n) { - return n in d3_interpolate_rgb || /\bcolor\b/.test(n) - ? d3.interpolateRgb - : d3.interpolate; -} - -d3.interpolators = [ - d3.interpolateObject, - function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); }, - function(a, b) { return (typeof b === "string") && d3.interpolateString(String(a), b); }, - function(a, b) { return (typeof b === "string" ? b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(String(a), b); }, - function(a, b) { return (typeof b === "number") && d3.interpolateNumber(+a, b); } -]; -function d3_uninterpolateNumber(a, b) { - b = b - (a = +a) ? 1 / (b - a) : 0; - return function(x) { return (x - a) * b; }; -} - -function d3_uninterpolateClamp(a, b) { - b = b - (a = +a) ? 1 / (b - a) : 0; - return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); }; -} -d3.rgb = function(r, g, b) { - return arguments.length === 1 - ? (r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) - : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)) - : d3_rgb(~~r, ~~g, ~~b); -}; - -function d3_rgb(r, g, b) { - return new d3_Rgb(r, g, b); -} - -function d3_Rgb(r, g, b) { - this.r = r; - this.g = g; - this.b = b; -} - -d3_Rgb.prototype.brighter = function(k) { - k = Math.pow(0.7, arguments.length ? k : 1); - var r = this.r, - g = this.g, - b = this.b, - i = 30; - if (!r && !g && !b) return d3_rgb(i, i, i); - if (r && r < i) r = i; - if (g && g < i) g = i; - if (b && b < i) b = i; - return d3_rgb( - Math.min(255, Math.floor(r / k)), - Math.min(255, Math.floor(g / k)), - Math.min(255, Math.floor(b / k))); -}; - -d3_Rgb.prototype.darker = function(k) { - k = Math.pow(0.7, arguments.length ? k : 1); - return d3_rgb( - Math.floor(k * this.r), - Math.floor(k * this.g), - Math.floor(k * this.b)); -}; - -d3_Rgb.prototype.hsl = function() { - return d3_rgb_hsl(this.r, this.g, this.b); -}; - -d3_Rgb.prototype.toString = function() { - return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); -}; - -function d3_rgb_hex(v) { - return v < 0x10 - ? "0" + Math.max(0, v).toString(16) - : Math.min(255, v).toString(16); -} - -function d3_rgb_parse(format, rgb, hsl) { - var r = 0, // red channel; int in [0, 255] - g = 0, // green channel; int in [0, 255] - b = 0, // blue channel; int in [0, 255] - m1, // CSS color specification match - m2, // CSS color specification type (e.g., rgb) - name; - - /* Handle hsl, rgb. */ - m1 = /([a-z]+)\((.*)\)/i.exec(format); - if (m1) { - m2 = m1[2].split(","); - switch (m1[1]) { - case "hsl": { - return hsl( - parseFloat(m2[0]), // degrees - parseFloat(m2[1]) / 100, // percentage - parseFloat(m2[2]) / 100 // percentage - ); - } - case "rgb": { - return rgb( - d3_rgb_parseNumber(m2[0]), - d3_rgb_parseNumber(m2[1]), - d3_rgb_parseNumber(m2[2]) - ); - } - } - } - - /* Named colors. */ - if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b); - - /* Hexadecimal colors: #rgb and #rrggbb. */ - if (format != null && format.charAt(0) === "#") { - if (format.length === 4) { - r = format.charAt(1); r += r; - g = format.charAt(2); g += g; - b = format.charAt(3); b += b; - } else if (format.length === 7) { - r = format.substring(1, 3); - g = format.substring(3, 5); - b = format.substring(5, 7); - } - r = parseInt(r, 16); - g = parseInt(g, 16); - b = parseInt(b, 16); - } - - return rgb(r, g, b); -} - -function d3_rgb_hsl(r, g, b) { - var min = Math.min(r /= 255, g /= 255, b /= 255), - max = Math.max(r, g, b), - d = max - min, - h, - s, - l = (max + min) / 2; - if (d) { - s = l < .5 ? d / (max + min) : d / (2 - max - min); - if (r == max) h = (g - b) / d + (g < b ? 6 : 0); - else if (g == max) h = (b - r) / d + 2; - else h = (r - g) / d + 4; - h *= 60; - } else { - s = h = 0; - } - return d3_hsl(h, s, l); -} - -function d3_rgb_parseNumber(c) { // either integer or percentage - var f = parseFloat(c); - return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; -} - -var d3_rgb_names = { - aliceblue: "#f0f8ff", - antiquewhite: "#faebd7", - aqua: "#00ffff", - aquamarine: "#7fffd4", - azure: "#f0ffff", - beige: "#f5f5dc", - bisque: "#ffe4c4", - black: "#000000", - blanchedalmond: "#ffebcd", - blue: "#0000ff", - blueviolet: "#8a2be2", - brown: "#a52a2a", - burlywood: "#deb887", - cadetblue: "#5f9ea0", - chartreuse: "#7fff00", - chocolate: "#d2691e", - coral: "#ff7f50", - cornflowerblue: "#6495ed", - cornsilk: "#fff8dc", - crimson: "#dc143c", - cyan: "#00ffff", - darkblue: "#00008b", - darkcyan: "#008b8b", - darkgoldenrod: "#b8860b", - darkgray: "#a9a9a9", - darkgreen: "#006400", - darkgrey: "#a9a9a9", - darkkhaki: "#bdb76b", - darkmagenta: "#8b008b", - darkolivegreen: "#556b2f", - darkorange: "#ff8c00", - darkorchid: "#9932cc", - darkred: "#8b0000", - darksalmon: "#e9967a", - darkseagreen: "#8fbc8f", - darkslateblue: "#483d8b", - darkslategray: "#2f4f4f", - darkslategrey: "#2f4f4f", - darkturquoise: "#00ced1", - darkviolet: "#9400d3", - deeppink: "#ff1493", - deepskyblue: "#00bfff", - dimgray: "#696969", - dimgrey: "#696969", - dodgerblue: "#1e90ff", - firebrick: "#b22222", - floralwhite: "#fffaf0", - forestgreen: "#228b22", - fuchsia: "#ff00ff", - gainsboro: "#dcdcdc", - ghostwhite: "#f8f8ff", - gold: "#ffd700", - goldenrod: "#daa520", - gray: "#808080", - green: "#008000", - greenyellow: "#adff2f", - grey: "#808080", - honeydew: "#f0fff0", - hotpink: "#ff69b4", - indianred: "#cd5c5c", - indigo: "#4b0082", - ivory: "#fffff0", - khaki: "#f0e68c", - lavender: "#e6e6fa", - lavenderblush: "#fff0f5", - lawngreen: "#7cfc00", - lemonchiffon: "#fffacd", - lightblue: "#add8e6", - lightcoral: "#f08080", - lightcyan: "#e0ffff", - lightgoldenrodyellow: "#fafad2", - lightgray: "#d3d3d3", - lightgreen: "#90ee90", - lightgrey: "#d3d3d3", - lightpink: "#ffb6c1", - lightsalmon: "#ffa07a", - lightseagreen: "#20b2aa", - lightskyblue: "#87cefa", - lightslategray: "#778899", - lightslategrey: "#778899", - lightsteelblue: "#b0c4de", - lightyellow: "#ffffe0", - lime: "#00ff00", - limegreen: "#32cd32", - linen: "#faf0e6", - magenta: "#ff00ff", - maroon: "#800000", - mediumaquamarine: "#66cdaa", - mediumblue: "#0000cd", - mediumorchid: "#ba55d3", - mediumpurple: "#9370db", - mediumseagreen: "#3cb371", - mediumslateblue: "#7b68ee", - mediumspringgreen: "#00fa9a", - mediumturquoise: "#48d1cc", - mediumvioletred: "#c71585", - midnightblue: "#191970", - mintcream: "#f5fffa", - mistyrose: "#ffe4e1", - moccasin: "#ffe4b5", - navajowhite: "#ffdead", - navy: "#000080", - oldlace: "#fdf5e6", - olive: "#808000", - olivedrab: "#6b8e23", - orange: "#ffa500", - orangered: "#ff4500", - orchid: "#da70d6", - palegoldenrod: "#eee8aa", - palegreen: "#98fb98", - paleturquoise: "#afeeee", - palevioletred: "#db7093", - papayawhip: "#ffefd5", - peachpuff: "#ffdab9", - peru: "#cd853f", - pink: "#ffc0cb", - plum: "#dda0dd", - powderblue: "#b0e0e6", - purple: "#800080", - red: "#ff0000", - rosybrown: "#bc8f8f", - royalblue: "#4169e1", - saddlebrown: "#8b4513", - salmon: "#fa8072", - sandybrown: "#f4a460", - seagreen: "#2e8b57", - seashell: "#fff5ee", - sienna: "#a0522d", - silver: "#c0c0c0", - skyblue: "#87ceeb", - slateblue: "#6a5acd", - slategray: "#708090", - slategrey: "#708090", - snow: "#fffafa", - springgreen: "#00ff7f", - steelblue: "#4682b4", - tan: "#d2b48c", - teal: "#008080", - thistle: "#d8bfd8", - tomato: "#ff6347", - turquoise: "#40e0d0", - violet: "#ee82ee", - wheat: "#f5deb3", - white: "#ffffff", - whitesmoke: "#f5f5f5", - yellow: "#ffff00", - yellowgreen: "#9acd32" -}; - -for (var d3_rgb_name in d3_rgb_names) { - d3_rgb_names[d3_rgb_name] = d3_rgb_parse( - d3_rgb_names[d3_rgb_name], - d3_rgb, - d3_hsl_rgb); -} -d3.hsl = function(h, s, l) { - return arguments.length === 1 - ? (h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) - : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)) - : d3_hsl(+h, +s, +l); -}; - -function d3_hsl(h, s, l) { - return new d3_Hsl(h, s, l); -} - -function d3_Hsl(h, s, l) { - this.h = h; - this.s = s; - this.l = l; -} - -d3_Hsl.prototype.brighter = function(k) { - k = Math.pow(0.7, arguments.length ? k : 1); - return d3_hsl(this.h, this.s, this.l / k); -}; - -d3_Hsl.prototype.darker = function(k) { - k = Math.pow(0.7, arguments.length ? k : 1); - return d3_hsl(this.h, this.s, k * this.l); -}; - -d3_Hsl.prototype.rgb = function() { - return d3_hsl_rgb(this.h, this.s, this.l); -}; - -d3_Hsl.prototype.toString = function() { - return this.rgb().toString(); -}; - -function d3_hsl_rgb(h, s, l) { - var m1, - m2; - - /* Some simple corrections for h, s and l. */ - h = h % 360; if (h < 0) h += 360; - s = s < 0 ? 0 : s > 1 ? 1 : s; - l = l < 0 ? 0 : l > 1 ? 1 : l; - - /* From FvD 13.37, CSS Color Module Level 3 */ - m2 = l <= .5 ? l * (1 + s) : l + s - l * s; - m1 = 2 * l - m2; - - function v(h) { - if (h > 360) h -= 360; - else if (h < 0) h += 360; - if (h < 60) return m1 + (m2 - m1) * h / 60; - if (h < 180) return m2; - if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; - return m1; - } - - function vv(h) { - return Math.round(v(h) * 255); - } - - return d3_rgb(vv(h + 120), vv(h), vv(h - 120)); -} -function d3_selection(groups) { - d3_arraySubclass(groups, d3_selectionPrototype); - return groups; -} - -var d3_select = function(s, n) { return n.querySelector(s); }, - d3_selectAll = function(s, n) { return n.querySelectorAll(s); }; - -// Prefer Sizzle, if available. -if (typeof Sizzle === "function") { - d3_select = function(s, n) { return Sizzle(s, n)[0]; }; - d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); }; -} - -var d3_selectionPrototype = []; - -d3.selection = function() { - return d3_selectionRoot; -}; - -d3.selection.prototype = d3_selectionPrototype; -d3_selectionPrototype.select = function(selector) { - var subgroups = [], - subgroup, - subnode, - group, - node; - - if (typeof selector !== "function") selector = d3_selection_selector(selector); - - for (var j = -1, m = this.length; ++j < m;) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = -1, n = group.length; ++i < n;) { - if (node = group[i]) { - subgroup.push(subnode = selector.call(node, node.__data__, i)); - if (subnode && "__data__" in node) subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - - return d3_selection(subgroups); -}; - -function d3_selection_selector(selector) { - return function() { - return d3_select(selector, this); - }; -} -d3_selectionPrototype.selectAll = function(selector) { - var subgroups = [], - subgroup, - node; - - if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); - - for (var j = -1, m = this.length; ++j < m;) { - for (var group = this[j], i = -1, n = group.length; ++i < n;) { - if (node = group[i]) { - subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i))); - subgroup.parentNode = node; - } - } - } - - return d3_selection(subgroups); -}; - -function d3_selection_selectorAll(selector) { - return function() { - return d3_selectAll(selector, this); - }; -} -d3_selectionPrototype.attr = function(name, value) { - name = d3.ns.qualify(name); - - // If no value is specified, return the first value. - if (arguments.length < 2) { - var node = this.node(); - return name.local - ? node.getAttributeNS(name.space, name.local) - : node.getAttribute(name); - } - - function attrNull() { - this.removeAttribute(name); - } - - function attrNullNS() { - this.removeAttributeNS(name.space, name.local); - } - - function attrConstant() { - this.setAttribute(name, value); - } - - function attrConstantNS() { - this.setAttributeNS(name.space, name.local, value); - } - - function attrFunction() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttribute(name); - else this.setAttribute(name, x); - } - - function attrFunctionNS() { - var x = value.apply(this, arguments); - if (x == null) this.removeAttributeNS(name.space, name.local); - else this.setAttributeNS(name.space, name.local, x); - } - - return this.each(value == null - ? (name.local ? attrNullNS : attrNull) : (typeof value === "function" - ? (name.local ? attrFunctionNS : attrFunction) - : (name.local ? attrConstantNS : attrConstant))); -}; -d3_selectionPrototype.classed = function(name, value) { - var names = name.split(d3_selection_classedWhitespace), - n = names.length, - i = -1; - if (arguments.length > 1) { - while (++i < n) d3_selection_classed.call(this, names[i], value); - return this; - } else { - while (++i < n) if (!d3_selection_classed.call(this, names[i])) return false; - return true; - } -}; - -var d3_selection_classedWhitespace = /\s+/g; - -function d3_selection_classed(name, value) { - var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g"); - - // If no value is specified, return the first value. - if (arguments.length < 2) { - var node = this.node(); - if (c = node.classList) return c.contains(name); - var c = node.className; - re.lastIndex = 0; - return re.test(c.baseVal != null ? c.baseVal : c); - } - - function classedAdd() { - if (c = this.classList) return c.add(name); - var c = this.className, - cb = c.baseVal != null, - cv = cb ? c.baseVal : c; - re.lastIndex = 0; - if (!re.test(cv)) { - cv = d3_collapse(cv + " " + name); - if (cb) c.baseVal = cv; - else this.className = cv; - } - } - - function classedRemove() { - if (c = this.classList) return c.remove(name); - var c = this.className, - cb = c.baseVal != null, - cv = cb ? c.baseVal : c; - cv = d3_collapse(cv.replace(re, " ")); - if (cb) c.baseVal = cv; - else this.className = cv; - } - - function classedFunction() { - (value.apply(this, arguments) - ? classedAdd - : classedRemove).call(this); - } - - return this.each(typeof value === "function" - ? classedFunction : value - ? classedAdd - : classedRemove); -} -d3_selectionPrototype.style = function(name, value, priority) { - if (arguments.length < 3) priority = ""; - - // If no value is specified, return the first value. - if (arguments.length < 2) return window - .getComputedStyle(this.node(), null) - .getPropertyValue(name); - - function styleNull() { - this.style.removeProperty(name); - } - - function styleConstant() { - this.style.setProperty(name, value, priority); - } - - function styleFunction() { - var x = value.apply(this, arguments); - if (x == null) this.style.removeProperty(name); - else this.style.setProperty(name, x, priority); - } - - return this.each(value == null - ? styleNull : (typeof value === "function" - ? styleFunction : styleConstant)); -}; -d3_selectionPrototype.property = function(name, value) { - - // If no value is specified, return the first value. - if (arguments.length < 2) return this.node()[name]; - - function propertyNull() { - delete this[name]; - } - - function propertyConstant() { - this[name] = value; - } - - function propertyFunction() { - var x = value.apply(this, arguments); - if (x == null) delete this[name]; - else this[name] = x; - } - - return this.each(value == null - ? propertyNull : (typeof value === "function" - ? propertyFunction : propertyConstant)); -}; -d3_selectionPrototype.text = function(value) { - return arguments.length < 1 ? this.node().textContent - : (this.each(typeof value === "function" - ? function() { this.textContent = value.apply(this, arguments); } - : function() { this.textContent = value; })); -}; -d3_selectionPrototype.html = function(value) { - return arguments.length < 1 ? this.node().innerHTML - : (this.each(typeof value === "function" - ? function() { this.innerHTML = value.apply(this, arguments); } - : function() { this.innerHTML = value; })); -}; -// TODO append(node)? -// TODO append(function)? -d3_selectionPrototype.append = function(name) { - name = d3.ns.qualify(name); - - function append() { - return this.appendChild(document.createElement(name)); - } - - function appendNS() { - return this.appendChild(document.createElementNS(name.space, name.local)); - } - - return this.select(name.local ? appendNS : append); -}; -// TODO insert(node, function)? -// TODO insert(function, string)? -// TODO insert(function, function)? -d3_selectionPrototype.insert = function(name, before) { - name = d3.ns.qualify(name); - - function insert() { - return this.insertBefore( - document.createElement(name), - d3_select(before, this)); - } - - function insertNS() { - return this.insertBefore( - document.createElementNS(name.space, name.local), - d3_select(before, this)); - } - - return this.select(name.local ? insertNS : insert); -}; -// TODO remove(selector)? -// TODO remove(node)? -// TODO remove(function)? -d3_selectionPrototype.remove = function() { - return this.each(function() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - }); -}; -// TODO data(null) for clearing data? -d3_selectionPrototype.data = function(data, join) { - var enter = [], - update = [], - exit = []; - - function bind(group, groupData) { - var i, - n = group.length, - m = groupData.length, - n0 = Math.min(n, m), - n1 = Math.max(n, m), - updateNodes = [], - enterNodes = [], - exitNodes = [], - node, - nodeData; - - if (join) { - var nodeByKey = {}, - keys = [], - key, - j = groupData.length; - - for (i = -1; ++i < n;) { - key = join.call(node = group[i], node.__data__, i); - if (key in nodeByKey) { - exitNodes[j++] = node; // duplicate key - } else { - nodeByKey[key] = node; - } - keys.push(key); - } - - for (i = -1; ++i < m;) { - node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)]; - if (node) { - node.__data__ = nodeData; - updateNodes[i] = node; - enterNodes[i] = exitNodes[i] = null; - } else { - enterNodes[i] = d3_selection_dataNode(nodeData); - updateNodes[i] = exitNodes[i] = null; - } - delete nodeByKey[key]; - } - - for (i = -1; ++i < n;) { - if (keys[i] in nodeByKey) { - exitNodes[i] = group[i]; - } - } - } else { - for (i = -1; ++i < n0;) { - node = group[i]; - nodeData = groupData[i]; - if (node) { - node.__data__ = nodeData; - updateNodes[i] = node; - enterNodes[i] = exitNodes[i] = null; - } else { - enterNodes[i] = d3_selection_dataNode(nodeData); - updateNodes[i] = exitNodes[i] = null; - } - } - for (; i < m; ++i) { - enterNodes[i] = d3_selection_dataNode(groupData[i]); - updateNodes[i] = exitNodes[i] = null; - } - for (; i < n1; ++i) { - exitNodes[i] = group[i]; - enterNodes[i] = updateNodes[i] = null; - } - } - - enterNodes.update - = updateNodes; - - enterNodes.parentNode - = updateNodes.parentNode - = exitNodes.parentNode - = group.parentNode; - - enter.push(enterNodes); - update.push(updateNodes); - exit.push(exitNodes); - } - - var i = -1, - n = this.length, - group; - if (typeof data === "function") { - while (++i < n) { - bind(group = this[i], data.call(group, group.parentNode.__data__, i)); - } - } else { - while (++i < n) { - bind(group = this[i], data); - } - } - - var selection = d3_selection(update); - selection.enter = function() { return d3_selection_enter(enter); }; - selection.exit = function() { return d3_selection(exit); }; - return selection; -}; - -function d3_selection_dataNode(data) { - return {__data__: data}; -} -function d3_selection_enter(selection) { - d3_arraySubclass(selection, d3_selection_enterPrototype); - return selection; -} - -var d3_selection_enterPrototype = []; - -d3_selection_enterPrototype.append = d3_selectionPrototype.append; -d3_selection_enterPrototype.insert = d3_selectionPrototype.insert; -d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; -d3_selection_enterPrototype.select = function(selector) { - var subgroups = [], - subgroup, - subnode, - upgroup, - group, - node; - - for (var j = -1, m = this.length; ++j < m;) { - upgroup = (group = this[j]).update; - subgroups.push(subgroup = []); - subgroup.parentNode = group.parentNode; - for (var i = -1, n = group.length; ++i < n;) { - if (node = group[i]) { - subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i)); - subnode.__data__ = node.__data__; - } else { - subgroup.push(null); - } - } - } - - return d3_selection(subgroups); -}; -// TODO preserve null elements to maintain index? -d3_selectionPrototype.filter = function(filter) { - var subgroups = [], - subgroup, - group, - node; - - for (var j = 0, m = this.length; j < m; j++) { - subgroups.push(subgroup = []); - subgroup.parentNode = (group = this[j]).parentNode; - for (var i = 0, n = group.length; i < n; i++) { - if ((node = group[i]) && filter.call(node, node.__data__, i)) { - subgroup.push(node); - } - } - } - - return d3_selection(subgroups); -}; -d3_selectionPrototype.map = function(map) { - return this.each(function() { - this.__data__ = map.apply(this, arguments); - }); -}; -d3_selectionPrototype.sort = function(comparator) { - comparator = d3_selection_sortComparator.apply(this, arguments); - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j].sort(comparator), i = 1, n = group.length, prev = group[0]; i < n; i++) { - var node = group[i]; - if (node) { - if (prev) prev.parentNode.insertBefore(node, prev.nextSibling); - prev = node; - } - } - } - return this; -}; - -function d3_selection_sortComparator(comparator) { - if (!arguments.length) comparator = d3.ascending; - return function(a, b) { - return comparator(a && a.__data__, b && b.__data__); - }; -} -// type can be namespaced, e.g., "click.foo" -// listener can be null for removal -d3_selectionPrototype.on = function(type, listener, capture) { - if (arguments.length < 3) capture = false; - - // parse the type specifier - var name = "__on" + type, i = type.indexOf("."); - if (i > 0) type = type.substring(0, i); - - // if called with only one argument, return the current listener - if (arguments.length < 2) return (i = this.node()[name]) && i._; - - // remove the old event listener, and add the new event listener - return this.each(function(d, i) { - var node = this; - - if (node[name]) node.removeEventListener(type, node[name], capture); - if (listener) node.addEventListener(type, node[name] = l, capture); - - // wrapped event listener that preserves i - function l(e) { - var o = d3.event; // Events can be reentrant (e.g., focus). - d3.event = e; - try { - listener.call(node, node.__data__, i); - } finally { - d3.event = o; - } - } - - // stash the unwrapped listener for retrieval - l._ = listener; - }); -}; -d3_selectionPrototype.each = function(callback) { - for (var j = -1, m = this.length; ++j < m;) { - for (var group = this[j], i = -1, n = group.length; ++i < n;) { - var node = group[i]; - if (node) callback.call(node, node.__data__, i, j); - } - } - return this; -}; -// -// Note: assigning to the arguments array simultaneously changes the value of -// the corresponding argument! -// -// TODO The `this` argument probably shouldn't be the first argument to the -// callback, anyway, since it's redundant. However, that will require a major -// version bump due to backwards compatibility, so I'm not changing it right -// away. -// -d3_selectionPrototype.call = function(callback) { - callback.apply(this, (arguments[0] = this, arguments)); - return this; -}; -d3_selectionPrototype.empty = function() { - return !this.node(); -}; -d3_selectionPrototype.node = function(callback) { - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - var node = group[i]; - if (node) return node; - } - } - return null; -}; -d3_selectionPrototype.transition = function() { - var subgroups = [], - subgroup, - node; - - for (var j = -1, m = this.length; ++j < m;) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n;) { - subgroup.push((node = group[i]) ? {node: node, delay: 0, duration: 250} : null); - } - } - - return d3_transition(subgroups, d3_transitionInheritId || ++d3_transitionId, Date.now()); -}; -var d3_selectionRoot = d3_selection([[document]]); - -d3_selectionRoot[0].parentNode = document.documentElement; - -// TODO fast singleton implementation! -// TODO select(function) -d3.select = function(selector) { - return typeof selector === "string" - ? d3_selectionRoot.select(selector) - : d3_selection([[selector]]); // assume node -}; - -// TODO selectAll(function) -d3.selectAll = function(selector) { - return typeof selector === "string" - ? d3_selectionRoot.selectAll(selector) - : d3_selection([d3_array(selector)]); // assume node[] -}; -function d3_transition(groups, id, time) { - d3_arraySubclass(groups, d3_transitionPrototype); - - var tweens = {}, - event = d3.dispatch("start", "end"), - ease = d3_transitionEase; - - groups.id = id; - - groups.time = time; - - groups.tween = function(name, tween) { - if (arguments.length < 2) return tweens[name]; - if (tween == null) delete tweens[name]; - else tweens[name] = tween; - return groups; - }; - - groups.ease = function(value) { - if (!arguments.length) return ease; - ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments); - return groups; - }; - - groups.each = function(type, listener) { - if (arguments.length < 2) return d3_transition_each.call(groups, type); - event[type].add(listener); - return groups; - }; - - d3.timer(function(elapsed) { - groups.each(function(d, i, j) { - var tweened = [], - node = this, - delay = groups[j][i].delay, - duration = groups[j][i].duration, - lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0}); - - ++lock.count; - - delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time); - - function start(elapsed) { - if (lock.active > id) return stop(); - lock.active = id; - - for (var tween in tweens) { - if (tween = tweens[tween].call(node, d, i)) { - tweened.push(tween); - } - } - - event.start.dispatch.call(node, d, i); - if (!tick(elapsed)) d3.timer(tick, 0, time); - return 1; - } - - function tick(elapsed) { - if (lock.active !== id) return stop(); - - var t = (elapsed - delay) / duration, - e = ease(t), - n = tweened.length; - - while (n > 0) { - tweened[--n].call(node, e); - } - - if (t >= 1) { - stop(); - d3_transitionInheritId = id; - event.end.dispatch.call(node, d, i); - d3_transitionInheritId = 0; - return 1; - } - } - - function stop() { - if (!--lock.count) delete node.__transition__; - return 1; - } - }); - return 1; - }, 0, time); - - return groups; -} - -var d3_transitionRemove = {}; - -function d3_transitionNull(d, i, a) { - return a != "" && d3_transitionRemove; -} - -function d3_transitionTween(b) { - - function transitionFunction(d, i, a) { - var v = b.call(this, d, i); - return v == null - ? a != "" && d3_transitionRemove - : a != v && d3.interpolate(a, v); - } - - function transitionString(d, i, a) { - return a != b && d3.interpolate(a, b); - } - - return typeof b === "function" ? transitionFunction - : b == null ? d3_transitionNull - : (b += "", transitionString); -} - -var d3_transitionPrototype = [], - d3_transitionId = 0, - d3_transitionInheritId = 0, - d3_transitionEase = d3.ease("cubic-in-out"); - -d3_transitionPrototype.call = d3_selectionPrototype.call; - -d3.transition = function() { - return d3_selectionRoot.transition(); -}; - -d3.transition.prototype = d3_transitionPrototype; -d3_transitionPrototype.select = function(selector) { - var subgroups = [], - subgroup, - subnode, - node; - - if (typeof selector !== "function") selector = d3_selection_selector(selector); - - for (var j = -1, m = this.length; ++j < m;) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n;) { - if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) { - if ("__data__" in node.node) subnode.__data__ = node.node.__data__; - subgroup.push({node: subnode, delay: node.delay, duration: node.duration}); - } else { - subgroup.push(null); - } - } - } - - return d3_transition(subgroups, this.id, this.time).ease(this.ease()); -}; -d3_transitionPrototype.selectAll = function(selector) { - var subgroups = [], - subgroup, - subnodes, - node; - - if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); - - for (var j = -1, m = this.length; ++j < m;) { - for (var group = this[j], i = -1, n = group.length; ++i < n;) { - if (node = group[i]) { - subnodes = selector.call(node.node, node.node.__data__, i); - subgroups.push(subgroup = []); - for (var k = -1, o = subnodes.length; ++k < o;) { - subgroup.push({node: subnodes[k], delay: node.delay, duration: node.duration}); - } - } - } - } - - return d3_transition(subgroups, this.id, this.time).ease(this.ease()); -}; -d3_transitionPrototype.attr = function(name, value) { - return this.attrTween(name, d3_transitionTween(value)); -}; - -d3_transitionPrototype.attrTween = function(nameNS, tween) { - var name = d3.ns.qualify(nameNS); - - function attrTween(d, i) { - var f = tween.call(this, d, i, this.getAttribute(name)); - return f === d3_transitionRemove - ? (this.removeAttribute(name), null) - : f && function(t) { this.setAttribute(name, f(t)); }; - } - - function attrTweenNS(d, i) { - var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); - return f === d3_transitionRemove - ? (this.removeAttributeNS(name.space, name.local), null) - : f && function(t) { this.setAttributeNS(name.space, name.local, f(t)); }; - } - - return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); -}; -d3_transitionPrototype.style = function(name, value, priority) { - if (arguments.length < 3) priority = ""; - return this.styleTween(name, d3_transitionTween(value), priority); -}; - -d3_transitionPrototype.styleTween = function(name, tween, priority) { - if (arguments.length < 3) priority = ""; - return this.tween("style." + name, function(d, i) { - var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name)); - return f === d3_transitionRemove - ? (this.style.removeProperty(name), null) - : f && function(t) { this.style.setProperty(name, f(t), priority); }; - }); -}; -d3_transitionPrototype.text = function(value) { - return this.tween("text", function(d, i) { - this.textContent = typeof value === "function" - ? value.call(this, d, i) - : value; - }); -}; -d3_transitionPrototype.remove = function() { - return this.each("end", function() { - var p; - if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this); - }); -}; -d3_transitionPrototype.delay = function(value) { - var groups = this; - return groups.each(typeof value === "function" - ? function(d, i, j) { groups[j][i].delay = +value.apply(this, arguments); } - : (value = +value, function(d, i, j) { groups[j][i].delay = value; })); -}; -d3_transitionPrototype.duration = function(value) { - var groups = this; - return groups.each(typeof value === "function" - ? function(d, i, j) { groups[j][i].duration = +value.apply(this, arguments); } - : (value = +value, function(d, i, j) { groups[j][i].duration = value; })); -}; -function d3_transition_each(callback) { - for (var j = 0, m = this.length; j < m; j++) { - for (var group = this[j], i = 0, n = group.length; i < n; i++) { - var node = group[i]; - if (node) callback.call(node = node.node, node.__data__, i, j); - } - } - return this; -} -d3_transitionPrototype.transition = function() { - return this.select(d3_this); -}; -var d3_timer_queue = null, - d3_timer_interval, // is an interval (or frame) active? - d3_timer_timeout; // is a timeout active? - -// The timer will continue to fire until callback returns true. -d3.timer = function(callback, delay, then) { - var found = false, - t0, - t1 = d3_timer_queue; - - if (arguments.length < 3) { - if (arguments.length < 2) delay = 0; - else if (!isFinite(delay)) return; - then = Date.now(); - } - - // See if the callback's already in the queue. - while (t1) { - if (t1.callback === callback) { - t1.then = then; - t1.delay = delay; - found = true; - break; - } - t0 = t1; - t1 = t1.next; - } - - // Otherwise, add the callback to the queue. - if (!found) d3_timer_queue = { - callback: callback, - then: then, - delay: delay, - next: d3_timer_queue - }; - - // Start animatin'! - if (!d3_timer_interval) { - d3_timer_timeout = clearTimeout(d3_timer_timeout); - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } -} - -function d3_timer_step() { - var elapsed, - now = Date.now(), - t1 = d3_timer_queue; - - while (t1) { - elapsed = now - t1.then; - if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed); - t1 = t1.next; - } - - var delay = d3_timer_flush() - now; - if (delay > 24) { - if (isFinite(delay)) { - clearTimeout(d3_timer_timeout); - d3_timer_timeout = setTimeout(d3_timer_step, delay); - } - d3_timer_interval = 0; - } else { - d3_timer_interval = 1; - d3_timer_frame(d3_timer_step); - } -} - -d3.timer.flush = function() { - var elapsed, - now = Date.now(), - t1 = d3_timer_queue; - - while (t1) { - elapsed = now - t1.then; - if (!t1.delay) t1.flush = t1.callback(elapsed); - t1 = t1.next; - } - - d3_timer_flush(); -}; - -// Flush after callbacks, to avoid concurrent queue modification. -function d3_timer_flush() { - var t0 = null, - t1 = d3_timer_queue, - then = Infinity; - while (t1) { - if (t1.flush) { - t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next; - } else { - then = Math.min(then, t1.then + t1.delay); - t1 = (t0 = t1).next; - } - } - return then; -} - -var d3_timer_frame = window.requestAnimationFrame - || window.webkitRequestAnimationFrame - || window.mozRequestAnimationFrame - || window.oRequestAnimationFrame - || window.msRequestAnimationFrame - || function(callback) { setTimeout(callback, 17); }; -function d3_noop() {} -d3.scale = {}; - -function d3_scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [start, stop] : [stop, start]; -} -function d3_scale_nice(domain, nice) { - var i0 = 0, - i1 = domain.length - 1, - x0 = domain[i0], - x1 = domain[i1], - dx; - - if (x1 < x0) { - dx = i0; i0 = i1; i1 = dx; - dx = x0; x0 = x1; x1 = dx; - } - - if (dx = x1 - x0) { - nice = nice(dx); - domain[i0] = nice.floor(x0); - domain[i1] = nice.ceil(x1); - } - - return domain; -} - -function d3_scale_niceDefault() { - return Math; -} -d3.scale.linear = function() { - return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false); -}; - -function d3_scale_linear(domain, range, interpolate, clamp) { - var output, - input; - - function rescale() { - var linear = domain.length == 2 ? d3_scale_bilinear : d3_scale_polylinear, - uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; - output = linear(domain, range, uninterpolate, interpolate); - input = linear(range, domain, uninterpolate, d3.interpolate); - return scale; - } - - function scale(x) { - return output(x); - } - - // Note: requires range is coercible to number! - scale.invert = function(y) { - return input(y); - }; - - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.map(Number); - return rescale(); - }; - - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - - scale.rangeRound = function(x) { - return scale.range(x).interpolate(d3.interpolateRound); - }; - - scale.clamp = function(x) { - if (!arguments.length) return clamp; - clamp = x; - return rescale(); - }; - - scale.interpolate = function(x) { - if (!arguments.length) return interpolate; - interpolate = x; - return rescale(); - }; - - scale.ticks = function(m) { - return d3_scale_linearTicks(domain, m); - }; - - scale.tickFormat = function(m) { - return d3_scale_linearTickFormat(domain, m); - }; - - scale.nice = function() { - d3_scale_nice(domain, d3_scale_linearNice); - return rescale(); - }; - - scale.copy = function() { - return d3_scale_linear(domain, range, interpolate, clamp); - }; - - return rescale(); -}; - -function d3_scale_linearRebind(scale, linear) { - scale.range = d3.rebind(scale, linear.range); - scale.rangeRound = d3.rebind(scale, linear.rangeRound); - scale.interpolate = d3.rebind(scale, linear.interpolate); - scale.clamp = d3.rebind(scale, linear.clamp); - return scale; -} - -function d3_scale_linearNice(dx) { - dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1); - return { - floor: function(x) { return Math.floor(x / dx) * dx; }, - ceil: function(x) { return Math.ceil(x / dx) * dx; } - }; -} - -// TODO Dates? Ugh. -function d3_scale_linearTickRange(domain, m) { - var extent = d3_scaleExtent(domain), - span = extent[1] - extent[0], - step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), - err = m / span * step; - - // Filter ticks to get closer to the desired count. - if (err <= .15) step *= 10; - else if (err <= .35) step *= 5; - else if (err <= .75) step *= 2; - - // Round start and stop values to step interval. - extent[0] = Math.ceil(extent[0] / step) * step; - extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive - extent[2] = step; - return extent; -} - -function d3_scale_linearTicks(domain, m) { - return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); -} - -function d3_scale_linearTickFormat(domain, m) { - return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f"); -} -function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { - var u = uninterpolate(domain[0], domain[1]), - i = interpolate(range[0], range[1]); - return function(x) { - return i(u(x)); - }; -} -function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { - var u = [], - i = [], - j = 0, - n = domain.length; - - while (++j < n) { - u.push(uninterpolate(domain[j - 1], domain[j])); - i.push(interpolate(range[j - 1], range[j])); - } - - return function(x) { - var j = d3.bisect(domain, x, 1, domain.length - 1) - 1; - return i[j](u[j](x)); - }; -} -d3.scale.log = function() { - return d3_scale_log(d3.scale.linear(), d3_scale_logp); -}; - -function d3_scale_log(linear, log) { - var pow = log.pow; - - function scale(x) { - return linear(log(x)); - } - - scale.invert = function(x) { - return pow(linear.invert(x)); - }; - - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(pow); - log = x[0] < 0 ? d3_scale_logn : d3_scale_logp; - pow = log.pow; - linear.domain(x.map(log)); - return scale; - }; - - scale.nice = function() { - linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault)); - return scale; - }; - - scale.ticks = function() { - var extent = d3_scaleExtent(linear.domain()), - ticks = []; - if (extent.every(isFinite)) { - var i = Math.floor(extent[0]), - j = Math.ceil(extent[1]), - u = Math.round(pow(extent[0])), - v = Math.round(pow(extent[1])); - if (log === d3_scale_logn) { - ticks.push(pow(i)); - for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k); - } else { - for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k); - ticks.push(pow(i)); - } - for (i = 0; ticks[i] < u; i++) {} // strip small values - for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values - ticks = ticks.slice(i, j); - } - return ticks; - }; - - scale.tickFormat = function(n, format) { - if (arguments.length < 2) format = d3_scale_logFormat; - if (arguments.length < 1) return format; - var k = n / scale.ticks().length, - f = log === d3_scale_logn ? (e = -1e-15, Math.floor) : (e = 1e-15, Math.ceil), - e; - return function(d) { - return d / pow(f(log(d) + e)) < k ? format(d) : ""; - }; - }; - - scale.copy = function() { - return d3_scale_log(linear.copy(), log); - }; - - return d3_scale_linearRebind(scale, linear); -}; - -var d3_scale_logFormat = d3.format("e"); - -function d3_scale_logp(x) { - return Math.log(x) / Math.LN10; -} - -function d3_scale_logn(x) { - return -Math.log(-x) / Math.LN10; -} - -d3_scale_logp.pow = function(x) { - return Math.pow(10, x); -}; - -d3_scale_logn.pow = function(x) { - return -Math.pow(10, -x); -}; -d3.scale.pow = function() { - return d3_scale_pow(d3.scale.linear(), 1); -}; - -function d3_scale_pow(linear, exponent) { - var powp = d3_scale_powPow(exponent), - powb = d3_scale_powPow(1 / exponent); - - function scale(x) { - return linear(powp(x)); - } - - scale.invert = function(x) { - return powb(linear.invert(x)); - }; - - scale.domain = function(x) { - if (!arguments.length) return linear.domain().map(powb); - linear.domain(x.map(powp)); - return scale; - }; - - scale.ticks = function(m) { - return d3_scale_linearTicks(scale.domain(), m); - }; - - scale.tickFormat = function(m) { - return d3_scale_linearTickFormat(scale.domain(), m); - }; - - scale.nice = function() { - return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice)); - }; - - scale.exponent = function(x) { - if (!arguments.length) return exponent; - var domain = scale.domain(); - powp = d3_scale_powPow(exponent = x); - powb = d3_scale_powPow(1 / exponent); - return scale.domain(domain); - }; - - scale.copy = function() { - return d3_scale_pow(linear.copy(), exponent); - }; - - return d3_scale_linearRebind(scale, linear); -}; - -function d3_scale_powPow(e) { - return function(x) { - return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); - }; -} -d3.scale.sqrt = function() { - return d3.scale.pow().exponent(.5); -}; -d3.scale.ordinal = function() { - return d3_scale_ordinal([], {t: "range", x: []}); -}; - -function d3_scale_ordinal(domain, ranger) { - var index, - range, - rangeBand; - - function scale(x) { - return range[((index[x] || (index[x] = domain.push(x))) - 1) % range.length]; - } - - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = []; - index = {}; - var i = -1, n = x.length, xi; - while (++i < n) if (!index[xi = x[i]]) index[xi] = domain.push(xi); - return scale[ranger.t](ranger.x, ranger.p); - }; - - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - rangeBand = 0; - ranger = {t: "range", x: x}; - return scale; - }; - - scale.rangePoints = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], - stop = x[1], - step = (stop - start) / (domain.length - 1 + padding); - range = domain.length < 2 ? [(start + stop) / 2] : d3.range(start + step * padding / 2, stop + step / 2, step); - rangeBand = 0; - ranger = {t: "rangePoints", x: x, p: padding}; - return scale; - }; - - scale.rangeBands = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], - stop = x[1], - step = (stop - start) / (domain.length + padding); - range = d3.range(start + step * padding, stop, step); - rangeBand = step * (1 - padding); - ranger = {t: "rangeBands", x: x, p: padding}; - return scale; - }; - - scale.rangeRoundBands = function(x, padding) { - if (arguments.length < 2) padding = 0; - var start = x[0], - stop = x[1], - step = Math.floor((stop - start) / (domain.length + padding)), - err = stop - start - (domain.length - padding) * step; - range = d3.range(start + Math.round(err / 2), stop, step); - rangeBand = Math.round(step * (1 - padding)); - ranger = {t: "rangeRoundBands", x: x, p: padding}; - return scale; - }; - - scale.rangeBand = function() { - return rangeBand; - }; - - scale.copy = function() { - return d3_scale_ordinal(domain, ranger); - }; - - return scale.domain(domain); -}; -/* - * This product includes color specifications and designs developed by Cynthia - * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information. - */ - -d3.scale.category10 = function() { - return d3.scale.ordinal().range(d3_category10); -}; - -d3.scale.category20 = function() { - return d3.scale.ordinal().range(d3_category20); -}; - -d3.scale.category20b = function() { - return d3.scale.ordinal().range(d3_category20b); -}; - -d3.scale.category20c = function() { - return d3.scale.ordinal().range(d3_category20c); -}; - -var d3_category10 = [ - "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", - "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf" -]; - -var d3_category20 = [ - "#1f77b4", "#aec7e8", - "#ff7f0e", "#ffbb78", - "#2ca02c", "#98df8a", - "#d62728", "#ff9896", - "#9467bd", "#c5b0d5", - "#8c564b", "#c49c94", - "#e377c2", "#f7b6d2", - "#7f7f7f", "#c7c7c7", - "#bcbd22", "#dbdb8d", - "#17becf", "#9edae5" -]; - -var d3_category20b = [ - "#393b79", "#5254a3", "#6b6ecf", "#9c9ede", - "#637939", "#8ca252", "#b5cf6b", "#cedb9c", - "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94", - "#843c39", "#ad494a", "#d6616b", "#e7969c", - "#7b4173", "#a55194", "#ce6dbd", "#de9ed6" -]; - -var d3_category20c = [ - "#3182bd", "#6baed6", "#9ecae1", "#c6dbef", - "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2", - "#31a354", "#74c476", "#a1d99b", "#c7e9c0", - "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb", - "#636363", "#969696", "#bdbdbd", "#d9d9d9" -]; -d3.scale.quantile = function() { - return d3_scale_quantile([], []); -}; - -function d3_scale_quantile(domain, range) { - var thresholds; - - function rescale() { - var k = 0, - n = domain.length, - q = range.length; - thresholds = []; - while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); - return scale; - } - - function scale(x) { - if (isNaN(x = +x)) return NaN; - return range[d3.bisect(thresholds, x)]; - } - - scale.domain = function(x) { - if (!arguments.length) return domain; - domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending); - return rescale(); - }; - - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - - scale.quantiles = function() { - return thresholds; - }; - - scale.copy = function() { - return d3_scale_quantile(domain, range); // copy on write! - }; - - return rescale(); -}; -d3.scale.quantize = function() { - return d3_scale_quantize(0, 1, [0, 1]); -}; - -function d3_scale_quantize(x0, x1, range) { - var kx, i; - - function scale(x) { - return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; - } - - function rescale() { - kx = range.length / (x1 - x0); - i = range.length - 1; - return scale; - } - - scale.domain = function(x) { - if (!arguments.length) return [x0, x1]; - x0 = +x[0]; - x1 = +x[x.length - 1]; - return rescale(); - }; - - scale.range = function(x) { - if (!arguments.length) return range; - range = x; - return rescale(); - }; - - scale.copy = function() { - return d3_scale_quantize(x0, x1, range); // copy on write - }; - - return rescale(); -}; -d3.svg = {}; -d3.svg.arc = function() { - var innerRadius = d3_svg_arcInnerRadius, - outerRadius = d3_svg_arcOuterRadius, - startAngle = d3_svg_arcStartAngle, - endAngle = d3_svg_arcEndAngle; - - function arc() { - var r0 = innerRadius.apply(this, arguments), - r1 = outerRadius.apply(this, arguments), - a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, - a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, - da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0), - df = da < Math.PI ? "0" : "1", - c0 = Math.cos(a0), - s0 = Math.sin(a0), - c1 = Math.cos(a1), - s1 = Math.sin(a1); - return da >= d3_svg_arcMax - ? (r0 - ? "M0," + r1 - + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1) - + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 - + "M0," + r0 - + "A" + r0 + "," + r0 + " 0 1,0 0," + (-r0) - + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 - + "Z" - : "M0," + r1 - + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1) - + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 - + "Z") - : (r0 - ? "M" + r1 * c0 + "," + r1 * s0 - + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 - + "L" + r0 * c1 + "," + r0 * s1 - + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 - + "Z" - : "M" + r1 * c0 + "," + r1 * s0 - + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 - + "L0,0" - + "Z"); - } - - arc.innerRadius = function(v) { - if (!arguments.length) return innerRadius; - innerRadius = d3.functor(v); - return arc; - }; - - arc.outerRadius = function(v) { - if (!arguments.length) return outerRadius; - outerRadius = d3.functor(v); - return arc; - }; - - arc.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3.functor(v); - return arc; - }; - - arc.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3.functor(v); - return arc; - }; - - arc.centroid = function() { - var r = (innerRadius.apply(this, arguments) - + outerRadius.apply(this, arguments)) / 2, - a = (startAngle.apply(this, arguments) - + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset; - return [Math.cos(a) * r, Math.sin(a) * r]; - }; - - return arc; -}; - -var d3_svg_arcOffset = -Math.PI / 2, - d3_svg_arcMax = 2 * Math.PI - 1e-6; - -function d3_svg_arcInnerRadius(d) { - return d.innerRadius; -} - -function d3_svg_arcOuterRadius(d) { - return d.outerRadius; -} - -function d3_svg_arcStartAngle(d) { - return d.startAngle; -} - -function d3_svg_arcEndAngle(d) { - return d.endAngle; -} -function d3_svg_line(projection) { - var x = d3_svg_lineX, - y = d3_svg_lineY, - interpolate = "linear", - interpolator = d3_svg_lineInterpolators[interpolate], - tension = .7; - - function line(d) { - return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension); - } - - line.x = function(v) { - if (!arguments.length) return x; - x = v; - return line; - }; - - line.y = function(v) { - if (!arguments.length) return y; - y = v; - return line; - }; - - line.interpolate = function(v) { - if (!arguments.length) return interpolate; - interpolator = d3_svg_lineInterpolators[interpolate = v]; - return line; - }; - - line.tension = function(v) { - if (!arguments.length) return tension; - tension = v; - return line; - }; - - return line; -} - -d3.svg.line = function() { - return d3_svg_line(Object); -}; - -// Converts the specified array of data into an array of points -// (x-y tuples), by evaluating the specified `x` and `y` functions on each -// data point. The `this` context of the evaluated functions is the specified -// "self" object; each function is passed the current datum and index. -function d3_svg_linePoints(self, d, x, y) { - var points = [], - i = -1, - n = d.length, - fx = typeof x === "function", - fy = typeof y === "function", - value; - if (fx && fy) { - while (++i < n) points.push([ - x.call(self, value = d[i], i), - y.call(self, value, i) - ]); - } else if (fx) { - while (++i < n) points.push([x.call(self, d[i], i), y]); - } else if (fy) { - while (++i < n) points.push([x, y.call(self, d[i], i)]); - } else { - while (++i < n) points.push([x, y]); - } - return points; -} - -// The default `x` property, which references d[0]. -function d3_svg_lineX(d) { - return d[0]; -} - -// The default `y` property, which references d[1]. -function d3_svg_lineY(d) { - return d[1]; -} - -// The various interpolators supported by the `line` class. -var d3_svg_lineInterpolators = { - "linear": d3_svg_lineLinear, - "step-before": d3_svg_lineStepBefore, - "step-after": d3_svg_lineStepAfter, - "basis": d3_svg_lineBasis, - "basis-open": d3_svg_lineBasisOpen, - "basis-closed": d3_svg_lineBasisClosed, - "bundle": d3_svg_lineBundle, - "cardinal": d3_svg_lineCardinal, - "cardinal-open": d3_svg_lineCardinalOpen, - "cardinal-closed": d3_svg_lineCardinalClosed, - "monotone": d3_svg_lineMonotone -}; - -// Linear interpolation; generates "L" commands. -function d3_svg_lineLinear(points) { - var i = 0, - n = points.length, - p = points[0], - path = [p[0], ",", p[1]]; - while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]); - return path.join(""); -} - -// Step interpolation; generates "H" and "V" commands. -function d3_svg_lineStepBefore(points) { - var i = 0, - n = points.length, - p = points[0], - path = [p[0], ",", p[1]]; - while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); - return path.join(""); -} - -// Step interpolation; generates "H" and "V" commands. -function d3_svg_lineStepAfter(points) { - var i = 0, - n = points.length, - p = points[0], - path = [p[0], ",", p[1]]; - while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); - return path.join(""); -} - -// Open cardinal spline interpolation; generates "C" commands. -function d3_svg_lineCardinalOpen(points, tension) { - return points.length < 4 - ? d3_svg_lineLinear(points) - : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), - d3_svg_lineCardinalTangents(points, tension)); -} - -// Closed cardinal spline interpolation; generates "C" commands. -function d3_svg_lineCardinalClosed(points, tension) { - return points.length < 3 - ? d3_svg_lineLinear(points) - : points[0] + d3_svg_lineHermite((points.push(points[0]), points), - d3_svg_lineCardinalTangents([points[points.length - 2]] - .concat(points, [points[1]]), tension)); -} - -// Cardinal spline interpolation; generates "C" commands. -function d3_svg_lineCardinal(points, tension, closed) { - return points.length < 3 - ? d3_svg_lineLinear(points) - : points[0] + d3_svg_lineHermite(points, - d3_svg_lineCardinalTangents(points, tension)); -} - -// Hermite spline construction; generates "C" commands. -function d3_svg_lineHermite(points, tangents) { - if (tangents.length < 1 - || (points.length != tangents.length - && points.length != tangents.length + 2)) { - return d3_svg_lineLinear(points); - } - - var quad = points.length != tangents.length, - path = "", - p0 = points[0], - p = points[1], - t0 = tangents[0], - t = t0, - pi = 1; - - if (quad) { - path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) - + "," + p[0] + "," + p[1]; - p0 = points[1]; - pi = 2; - } - - if (tangents.length > 1) { - t = tangents[1]; - p = points[pi]; - pi++; - path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) - + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) - + "," + p[0] + "," + p[1]; - for (var i = 2; i < tangents.length; i++, pi++) { - p = points[pi]; - t = tangents[i]; - path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) - + "," + p[0] + "," + p[1]; - } - } - - if (quad) { - var lp = points[pi]; - path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) - + "," + lp[0] + "," + lp[1]; - } - - return path; -} - -// Generates tangents for a cardinal spline. -function d3_svg_lineCardinalTangents(points, tension) { - var tangents = [], - a = (1 - tension) / 2, - p0, - p1 = points[0], - p2 = points[1], - i = 1, - n = points.length; - while (++i < n) { - p0 = p1; - p1 = p2; - p2 = points[i]; - tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]); - } - return tangents; -} - -// B-spline interpolation; generates "C" commands. -function d3_svg_lineBasis(points) { - if (points.length < 3) return d3_svg_lineLinear(points); - var i = 1, - n = points.length, - pi = points[0], - x0 = pi[0], - y0 = pi[1], - px = [x0, x0, x0, (pi = points[1])[0]], - py = [y0, y0, y0, pi[1]], - path = [x0, ",", y0]; - d3_svg_lineBasisBezier(path, px, py); - while (++i < n) { - pi = points[i]; - px.shift(); px.push(pi[0]); - py.shift(); py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - i = -1; - while (++i < 2) { - px.shift(); px.push(pi[0]); - py.shift(); py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); -} - -// Open B-spline interpolation; generates "C" commands. -function d3_svg_lineBasisOpen(points) { - if (points.length < 4) return d3_svg_lineLinear(points); - var path = [], - i = -1, - n = points.length, - pi, - px = [0], - py = [0]; - while (++i < 3) { - pi = points[i]; - px.push(pi[0]); - py.push(pi[1]); - } - path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) - + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); - --i; while (++i < n) { - pi = points[i]; - px.shift(); px.push(pi[0]); - py.shift(); py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); -} - -// Closed B-spline interpolation; generates "C" commands. -function d3_svg_lineBasisClosed(points) { - var path, - i = -1, - n = points.length, - m = n + 4, - pi, - px = [], - py = []; - while (++i < 4) { - pi = points[i % n]; - px.push(pi[0]); - py.push(pi[1]); - } - path = [ - d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", - d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) - ]; - --i; while (++i < m) { - pi = points[i % n]; - px.shift(); px.push(pi[0]); - py.shift(); py.push(pi[1]); - d3_svg_lineBasisBezier(path, px, py); - } - return path.join(""); -} - -function d3_svg_lineBundle(points, tension) { - var n = points.length - 1, - x0 = points[0][0], - y0 = points[0][1], - dx = points[n][0] - x0, - dy = points[n][1] - y0, - i = -1, - p, - t; - while (++i <= n) { - p = points[i]; - t = i / n; - p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); - p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); - } - return d3_svg_lineBasis(points); -} - -// Returns the dot product of the given four-element vectors. -function d3_svg_lineDot4(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; -} - -// Matrix to transform basis (b-spline) control points to bezier -// control points. Derived from FvD 11.2.8. -var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0], - d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0], - d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6]; - -// Pushes a "C" Bézier curve onto the specified path array, given the -// two specified four-element arrays which define the control points. -function d3_svg_lineBasisBezier(path, x, y) { - path.push( - "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), - ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), - ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), - ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), - ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), - ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); -} - -// Computes the slope from points p0 to p1. -function d3_svg_lineSlope(p0, p1) { - return (p1[1] - p0[1]) / (p1[0] - p0[0]); -} - -// Compute three-point differences for the given points. -// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference -function d3_svg_lineFiniteDifferences(points) { - var i = 0, - j = points.length - 1, - m = [], - p0 = points[0], - p1 = points[1], - d = m[0] = d3_svg_lineSlope(p0, p1); - while (++i < j) { - m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1])); - } - m[i] = d; - return m; -} - -// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite -// interpolation. Returns an array of tangent vectors. For details, see -// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation -function d3_svg_lineMonotoneTangents(points) { - var tangents = [], - d, - a, - b, - s, - m = d3_svg_lineFiniteDifferences(points), - i = -1, - j = points.length - 1; - - // The first two steps are done by computing finite-differences: - // 1. Compute the slopes of the secant lines between successive points. - // 2. Initialize the tangents at every point as the average of the secants. - - // Then, for each segment… - while (++i < j) { - d = d3_svg_lineSlope(points[i], points[i + 1]); - - // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set - // mk = m{k + 1} = 0 as the spline connecting these points must be flat to - // preserve monotonicity. Ignore step 4 and 5 for those k. - - if (Math.abs(d) < 1e-6) { - m[i] = m[i + 1] = 0; - } else { - // 4. Let ak = mk / dk and bk = m{k + 1} / dk. - a = m[i] / d; - b = m[i + 1] / d; - - // 5. Prevent overshoot and ensure monotonicity by restricting the - // magnitude of vector to a circle of radius 3. - s = a * a + b * b; - if (s > 9) { - s = d * 3 / Math.sqrt(s); - m[i] = s * a; - m[i + 1] = s * b; - } - } - } - - // Compute the normalized tangent vector from the slopes. Note that if x is - // not monotonic, it's possible that the slope will be infinite, so we protect - // against NaN by setting the coordinate to zero. - i = -1; while (++i <= j) { - s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) - / (6 * (1 + m[i] * m[i])); - tangents.push([s || 0, m[i] * s || 0]); - } - - return tangents; -} - -function d3_svg_lineMonotone(points) { - return points.length < 3 - ? d3_svg_lineLinear(points) - : points[0] + - d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); -} -d3.svg.line.radial = function() { - var line = d3_svg_line(d3_svg_lineRadial); - line.radius = line.x, delete line.x; - line.angle = line.y, delete line.y; - return line; -}; - -function d3_svg_lineRadial(points) { - var point, - i = -1, - n = points.length, - r, - a; - while (++i < n) { - point = points[i]; - r = point[0]; - a = point[1] + d3_svg_arcOffset; - point[0] = r * Math.cos(a); - point[1] = r * Math.sin(a); - } - return points; -} -function d3_svg_area(projection) { - var x0 = d3_svg_lineX, - x1 = d3_svg_lineX, - y0 = 0, - y1 = d3_svg_lineY, - interpolate, - i0, - i1, - tension = .7; - - function area(d) { - if (d.length < 1) return null; - var points0 = d3_svg_linePoints(this, d, x0, y0), - points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1); - return "M" + i0(projection(points1), tension) - + "L" + i1(projection(points0.reverse()), tension) - + "Z"; - } - - area.x = function(x) { - if (!arguments.length) return x1; - x0 = x1 = x; - return area; - }; - - area.x0 = function(x) { - if (!arguments.length) return x0; - x0 = x; - return area; - }; - - area.x1 = function(x) { - if (!arguments.length) return x1; - x1 = x; - return area; - }; - - area.y = function(y) { - if (!arguments.length) return y1; - y0 = y1 = y; - return area; - }; - - area.y0 = function(y) { - if (!arguments.length) return y0; - y0 = y; - return area; - }; - - area.y1 = function(y) { - if (!arguments.length) return y1; - y1 = y; - return area; - }; - - area.interpolate = function(x) { - if (!arguments.length) return interpolate; - i0 = d3_svg_lineInterpolators[interpolate = x]; - i1 = i0.reverse || i0; - return area; - }; - - area.tension = function(x) { - if (!arguments.length) return tension; - tension = x; - return area; - }; - - return area.interpolate("linear"); -} - -d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; -d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; - -d3.svg.area = function() { - return d3_svg_area(Object); -}; - -function d3_svg_areaX(points) { - return function(d, i) { - return points[i][0]; - }; -} - -function d3_svg_areaY(points) { - return function(d, i) { - return points[i][1]; - }; -} -d3.svg.area.radial = function() { - var area = d3_svg_area(d3_svg_lineRadial); - area.radius = area.x, delete area.x; - area.innerRadius = area.x0, delete area.x0; - area.outerRadius = area.x1, delete area.x1; - area.angle = area.y, delete area.y; - area.startAngle = area.y0, delete area.y0; - area.endAngle = area.y1, delete area.y1; - return area; -}; -d3.svg.chord = function() { - var source = d3_svg_chordSource, - target = d3_svg_chordTarget, - radius = d3_svg_chordRadius, - startAngle = d3_svg_arcStartAngle, - endAngle = d3_svg_arcEndAngle; - - // TODO Allow control point to be customized. - - function chord(d, i) { - var s = subgroup(this, source, d, i), - t = subgroup(this, target, d, i); - return "M" + s.p0 - + arc(s.r, s.p1) + (equals(s, t) - ? curve(s.r, s.p1, s.r, s.p0) - : curve(s.r, s.p1, t.r, t.p0) - + arc(t.r, t.p1) - + curve(t.r, t.p1, s.r, s.p0)) - + "Z"; - } - - function subgroup(self, f, d, i) { - var subgroup = f.call(self, d, i), - r = radius.call(self, subgroup, i), - a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, - a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset; - return { - r: r, - a0: a0, - a1: a1, - p0: [r * Math.cos(a0), r * Math.sin(a0)], - p1: [r * Math.cos(a1), r * Math.sin(a1)] - }; - } - - function equals(a, b) { - return a.a0 == b.a0 && a.a1 == b.a1; - } - - function arc(r, p) { - return "A" + r + "," + r + " 0 0,1 " + p; - } - - function curve(r0, p0, r1, p1) { - return "Q 0,0 " + p1; - } - - chord.radius = function(v) { - if (!arguments.length) return radius; - radius = d3.functor(v); - return chord; - }; - - chord.source = function(v) { - if (!arguments.length) return source; - source = d3.functor(v); - return chord; - }; - - chord.target = function(v) { - if (!arguments.length) return target; - target = d3.functor(v); - return chord; - }; - - chord.startAngle = function(v) { - if (!arguments.length) return startAngle; - startAngle = d3.functor(v); - return chord; - }; - - chord.endAngle = function(v) { - if (!arguments.length) return endAngle; - endAngle = d3.functor(v); - return chord; - }; - - return chord; -}; - -function d3_svg_chordSource(d) { - return d.source; -} - -function d3_svg_chordTarget(d) { - return d.target; -} - -function d3_svg_chordRadius(d) { - return d.radius; -} - -function d3_svg_chordStartAngle(d) { - return d.startAngle; -} - -function d3_svg_chordEndAngle(d) { - return d.endAngle; -} -d3.svg.diagonal = function() { - var source = d3_svg_chordSource, - target = d3_svg_chordTarget, - projection = d3_svg_diagonalProjection; - - function diagonal(d, i) { - var p0 = source.call(this, d, i), - p3 = target.call(this, d, i), - m = (p0.y + p3.y) / 2, - p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3]; - p = p.map(projection); - return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; - } - - diagonal.source = function(x) { - if (!arguments.length) return source; - source = d3.functor(x); - return diagonal; - }; - - diagonal.target = function(x) { - if (!arguments.length) return target; - target = d3.functor(x); - return diagonal; - }; - - diagonal.projection = function(x) { - if (!arguments.length) return projection; - projection = x; - return diagonal; - }; - - return diagonal; -}; - -function d3_svg_diagonalProjection(d) { - return [d.x, d.y]; -} -d3.svg.diagonal.radial = function() { - var diagonal = d3.svg.diagonal(), - projection = d3_svg_diagonalProjection, - projection_ = diagonal.projection; - - diagonal.projection = function(x) { - return arguments.length - ? projection_(d3_svg_diagonalRadialProjection(projection = x)) - : projection; - }; - - return diagonal; -}; - -function d3_svg_diagonalRadialProjection(projection) { - return function() { - var d = projection.apply(this, arguments), - r = d[0], - a = d[1] + d3_svg_arcOffset; - return [r * Math.cos(a), r * Math.sin(a)]; - }; -} -d3.svg.mouse = function(container) { - return d3_svg_mousePoint(container, d3.event); -}; - -// https://bugs.webkit.org/show_bug.cgi?id=44083 -var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0; - -function d3_svg_mousePoint(container, e) { - var point = (container.ownerSVGElement || container).createSVGPoint(); - if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) { - var svg = d3.select(document.body) - .append("svg:svg") - .style("position", "absolute") - .style("top", 0) - .style("left", 0); - var ctm = svg[0][0].getScreenCTM(); - d3_mouse_bug44083 = !(ctm.f || ctm.e); - svg.remove(); - } - if (d3_mouse_bug44083) { - point.x = e.pageX; - point.y = e.pageY; - } else { - point.x = e.clientX; - point.y = e.clientY; - } - point = point.matrixTransform(container.getScreenCTM().inverse()); - return [point.x, point.y]; -}; -d3.svg.touches = function(container) { - var touches = d3.event.touches; - return touches ? d3_array(touches).map(function(touch) { - var point = d3_svg_mousePoint(container, touch); - point.identifier = touch.identifier; - return point; - }) : []; -}; -d3.svg.symbol = function() { - var type = d3_svg_symbolType, - size = d3_svg_symbolSize; - - function symbol(d, i) { - return (d3_svg_symbols[type.call(this, d, i)] - || d3_svg_symbols.circle) - (size.call(this, d, i)); - } - - symbol.type = function(x) { - if (!arguments.length) return type; - type = d3.functor(x); - return symbol; - }; - - // size of symbol in square pixels - symbol.size = function(x) { - if (!arguments.length) return size; - size = d3.functor(x); - return symbol; - }; - - return symbol; -}; - -function d3_svg_symbolSize() { - return 64; -} - -function d3_svg_symbolType() { - return "circle"; -} - -// TODO cross-diagonal? -var d3_svg_symbols = { - "circle": function(size) { - var r = Math.sqrt(size / Math.PI); - return "M0," + r - + "A" + r + "," + r + " 0 1,1 0," + (-r) - + "A" + r + "," + r + " 0 1,1 0," + r - + "Z"; - }, - "cross": function(size) { - var r = Math.sqrt(size / 5) / 2; - return "M" + -3 * r + "," + -r - + "H" + -r - + "V" + -3 * r - + "H" + r - + "V" + -r - + "H" + 3 * r - + "V" + r - + "H" + r - + "V" + 3 * r - + "H" + -r - + "V" + r - + "H" + -3 * r - + "Z"; - }, - "diamond": function(size) { - var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), - rx = ry * d3_svg_symbolTan30; - return "M0," + -ry - + "L" + rx + ",0" - + " 0," + ry - + " " + -rx + ",0" - + "Z"; - }, - "square": function(size) { - var r = Math.sqrt(size) / 2; - return "M" + -r + "," + -r - + "L" + r + "," + -r - + " " + r + "," + r - + " " + -r + "," + r - + "Z"; - }, - "triangle-down": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), - ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + ry - + "L" + rx +"," + -ry - + " " + -rx + "," + -ry - + "Z"; - }, - "triangle-up": function(size) { - var rx = Math.sqrt(size / d3_svg_symbolSqrt3), - ry = rx * d3_svg_symbolSqrt3 / 2; - return "M0," + -ry - + "L" + rx +"," + ry - + " " + -rx + "," + ry - + "Z"; - } -}; - -d3.svg.symbolTypes = d3.keys(d3_svg_symbols); - -var d3_svg_symbolSqrt3 = Math.sqrt(3), - d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180); -d3.svg.axis = function() { - var scale = d3.scale.linear(), - orient = "bottom", - tickMajorSize = 6, - tickMinorSize = 6, - tickEndSize = 6, - tickPadding = 3, - tickArguments_ = [10], - tickFormat_, - tickSubdivide = 0; - - function axis(selection) { - selection.each(function(d, i, j) { - var g = d3.select(this); - - // If selection is a transition, create subtransitions. - var transition = selection.delay ? function(o) { - var id = d3_transitionInheritId; - try { - d3_transitionInheritId = selection.id; - return o.transition() - .delay(selection[j][i].delay) - .duration(selection[j][i].duration) - .ease(selection.ease()); - } finally { - d3_transitionInheritId = id; - } - } : Object; - - // Ticks. - var ticks = scale.ticks.apply(scale, tickArguments_), - tickFormat = tickFormat_ == null ? scale.tickFormat.apply(scale, tickArguments_) : tickFormat_; - - // Minor ticks. - var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide), - subtick = g.selectAll(".minor").data(subticks, String), - subtickEnter = subtick.enter().insert("svg:line", "g").attr("class", "tick minor").style("opacity", 1e-6), - subtickExit = transition(subtick.exit()).style("opacity", 1e-6).remove(), - subtickUpdate = transition(subtick).style("opacity", 1); - - // Major ticks. - var tick = g.selectAll("g").data(ticks, String), - tickEnter = tick.enter().insert("svg:g", "path").style("opacity", 1e-6), - tickExit = transition(tick.exit()).style("opacity", 1e-6).remove(), - tickUpdate = transition(tick).style("opacity", 1), - tickTransform; - - // Domain. - var range = d3_scaleExtent(scale.range()), - path = g.selectAll(".domain").data([0]), - pathEnter = path.enter().append("svg:path").attr("class", "domain"), - pathUpdate = transition(path); - - // Stash the new scale and grab the old scale. - var scale0 = this.__chart__ || scale; - this.__chart__ = scale.copy(); - - tickEnter.append("svg:line").attr("class", "tick"); - tickEnter.append("svg:text"); - tickUpdate.select("text").text(tickFormat); - - switch (orient) { - case "bottom": { - tickTransform = d3_svg_axisX; - subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize); - tickUpdate.select("line").attr("x2", 0).attr("y2", tickMajorSize); - tickUpdate.select("text").attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding).attr("dy", ".71em").attr("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize); - break; - } - case "top": { - tickTransform = d3_svg_axisX; - subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize); - tickUpdate.select("line").attr("x2", 0).attr("y2", -tickMajorSize); - tickUpdate.select("text").attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("dy", "0em").attr("text-anchor", "middle"); - pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize); - break; - } - case "left": { - tickTransform = d3_svg_axisY; - subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0); - tickUpdate.select("line").attr("x2", -tickMajorSize).attr("y2", 0); - tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "end"); - pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize); - break; - } - case "right": { - tickTransform = d3_svg_axisY; - subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0); - tickUpdate.select("line").attr("x2", tickMajorSize).attr("y2", 0); - tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "start"); - pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize); - break; - } - } - - tickEnter.call(tickTransform, scale0); - tickUpdate.call(tickTransform, scale); - tickExit.call(tickTransform, scale); - - subtickEnter.call(tickTransform, scale0); - subtickUpdate.call(tickTransform, scale); - subtickExit.call(tickTransform, scale); - }); - } - - axis.scale = function(x) { - if (!arguments.length) return scale; - scale = x; - return axis; - }; - - axis.orient = function(x) { - if (!arguments.length) return orient; - orient = x; - return axis; - }; - - axis.ticks = function() { - if (!arguments.length) return tickArguments_; - tickArguments_ = arguments; - return axis; - }; - - axis.tickFormat = function(x) { - if (!arguments.length) return tickFormat_; - tickFormat_ = x; - return axis; - }; - - axis.tickSize = function(x, y, z) { - if (!arguments.length) return tickMajorSize; - var n = arguments.length - 1; - tickMajorSize = +x; - tickMinorSize = n > 1 ? +y : tickMajorSize; - tickEndSize = n > 0 ? +arguments[n] : tickMajorSize; - return axis; - }; - - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - tickPadding = +x; - return axis; - }; - - axis.tickSubdivide = function(x) { - if (!arguments.length) return tickSubdivide; - tickSubdivide = +x; - return axis; - }; - - return axis; -}; - -function d3_svg_axisX(selection, x) { - selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; }); -} - -function d3_svg_axisY(selection, y) { - selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; }); -} - -function d3_svg_axisSubdivide(scale, ticks, m) { - subticks = []; - if (m && ticks.length > 1) { - var extent = d3_scaleExtent(scale.domain()), - subticks, - i = -1, - n = ticks.length, - d = (ticks[1] - ticks[0]) / ++m, - j, - v; - while (++i < n) { - for (j = m; --j > 0;) { - if ((v = +ticks[i] - j * d) >= extent[0]) { - subticks.push(v); - } - } - } - for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) { - subticks.push(v); - } - } - return subticks; -} -d3.behavior = {}; -d3.behavior.drag = function() { - var event = d3.dispatch("drag", "dragstart", "dragend"); - - function drag() { - this - .on("mousedown.drag", mousedown) - .on("touchstart.drag", mousedown); - - d3.select(window) - .on("mousemove.drag", d3_behavior_dragMove) - .on("touchmove.drag", d3_behavior_dragMove) - .on("mouseup.drag", d3_behavior_dragUp, true) - .on("touchend.drag", d3_behavior_dragUp, true) - .on("click.drag", d3_behavior_dragClick, true); - } - - // snapshot the local context for subsequent dispatch - function start() { - d3_behavior_dragEvent = event; - d3_behavior_dragEventTarget = d3.event.target; - d3_behavior_dragOffset = d3_behavior_dragPoint((d3_behavior_dragTarget = this).parentNode); - d3_behavior_dragMoved = 0; - d3_behavior_dragArguments = arguments; - } - - function mousedown() { - start.apply(this, arguments); - d3_behavior_dragDispatch("dragstart"); - } - - drag.on = function(type, listener) { - event[type].add(listener); - return drag; - }; - - return drag; -}; - -var d3_behavior_dragEvent, - d3_behavior_dragEventTarget, - d3_behavior_dragTarget, - d3_behavior_dragArguments, - d3_behavior_dragOffset, - d3_behavior_dragMoved, - d3_behavior_dragStopClick; - -function d3_behavior_dragDispatch(type) { - var o = d3.event, p = d3_behavior_dragTarget.parentNode, dx = 0, dy = 0; - - if (p) { - p = d3_behavior_dragPoint(p); - dx = p[0] - d3_behavior_dragOffset[0]; - dy = p[1] - d3_behavior_dragOffset[1]; - d3_behavior_dragOffset = p; - d3_behavior_dragMoved |= dx | dy; - } - - try { - d3.event = {dx: dx, dy: dy}; - d3_behavior_dragEvent[type].dispatch.apply(d3_behavior_dragTarget, d3_behavior_dragArguments); - } finally { - d3.event = o; - } - - o.preventDefault(); -} - -function d3_behavior_dragPoint(container) { - return d3.event.touches - ? d3.svg.touches(container)[0] - : d3.svg.mouse(container); -} - -function d3_behavior_dragMove() { - if (!d3_behavior_dragTarget) return; - var parent = d3_behavior_dragTarget.parentNode; - - // O NOES! The drag element was removed from the DOM. - if (!parent) return d3_behavior_dragUp(); - - d3_behavior_dragDispatch("drag"); - d3_behavior_dragCancel(); -} - -function d3_behavior_dragUp() { - if (!d3_behavior_dragTarget) return; - d3_behavior_dragDispatch("dragend"); - d3_behavior_dragTarget = null; - - // If the node was moved, prevent the mouseup from propagating. - // Also prevent the subsequent click from propagating (e.g., for anchors). - if (d3_behavior_dragMoved && d3_behavior_dragEventTarget === d3.event.target) { - d3_behavior_dragStopClick = true; - d3_behavior_dragCancel(); - } -} - -function d3_behavior_dragClick() { - if (d3_behavior_dragStopClick && d3_behavior_dragEventTarget === d3.event.target) { - d3_behavior_dragCancel(); - d3_behavior_dragStopClick = false; - d3_behavior_dragEventTarget = null; - } -} - -function d3_behavior_dragCancel() { - d3.event.stopPropagation(); - d3.event.preventDefault(); -} -// TODO unbind zoom behavior? -// TODO unbind listener? -d3.behavior.zoom = function() { - var xyz = [0, 0, 0], - event = d3.dispatch("zoom"); - - function zoom() { - this - .on("mousedown.zoom", mousedown) - .on("mousewheel.zoom", mousewheel) - .on("DOMMouseScroll.zoom", mousewheel) - .on("dblclick.zoom", dblclick) - .on("touchstart.zoom", touchstart); - - d3.select(window) - .on("mousemove.zoom", d3_behavior_zoomMousemove) - .on("mouseup.zoom", d3_behavior_zoomMouseup) - .on("touchmove.zoom", d3_behavior_zoomTouchmove) - .on("touchend.zoom", d3_behavior_zoomTouchup) - .on("click.zoom", d3_behavior_zoomClick, true); - } - - // snapshot the local context for subsequent dispatch - function start() { - d3_behavior_zoomXyz = xyz; - d3_behavior_zoomDispatch = event.zoom.dispatch; - d3_behavior_zoomEventTarget = d3.event.target; - d3_behavior_zoomTarget = this; - d3_behavior_zoomArguments = arguments; - } - - function mousedown() { - start.apply(this, arguments); - d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget)); - d3_behavior_zoomMoved = false; - d3.event.preventDefault(); - window.focus(); - } - - // store starting mouse location - function mousewheel() { - start.apply(this, arguments); - if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget)); - d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming); - } - - function dblclick() { - start.apply(this, arguments); - var mouse = d3.svg.mouse(d3_behavior_zoomTarget); - d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse)); - } - - // doubletap detection - function touchstart() { - start.apply(this, arguments); - var touches = d3_behavior_zoomTouchup(), - touch, - now = Date.now(); - if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) { - d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]); - } - d3_behavior_zoomLast = now; - } - - zoom.on = function(type, listener) { - event[type].add(listener); - return zoom; - }; - - return zoom; -}; - -var d3_behavior_zoomDiv, - d3_behavior_zoomPanning, - d3_behavior_zoomZooming, - d3_behavior_zoomLocations = {}, // identifier -> location - d3_behavior_zoomLast = 0, - d3_behavior_zoomXyz, - d3_behavior_zoomDispatch, - d3_behavior_zoomEventTarget, - d3_behavior_zoomTarget, - d3_behavior_zoomArguments, - d3_behavior_zoomMoved, - d3_behavior_zoomStopClick; - -function d3_behavior_zoomLocation(point) { - return [ - point[0] - d3_behavior_zoomXyz[0], - point[1] - d3_behavior_zoomXyz[1], - d3_behavior_zoomXyz[2] - ]; -} - -// detect the pixels that would be scrolled by this wheel event -function d3_behavior_zoomDelta() { - - // mousewheel events are totally broken! - // https://bugs.webkit.org/show_bug.cgi?id=40441 - // not only that, but Chrome and Safari differ in re. to acceleration! - if (!d3_behavior_zoomDiv) { - d3_behavior_zoomDiv = d3.select("body").append("div") - .style("visibility", "hidden") - .style("top", 0) - .style("height", 0) - .style("width", 0) - .style("overflow-y", "scroll") - .append("div") - .style("height", "2000px") - .node().parentNode; - } - - var e = d3.event, delta; - try { - d3_behavior_zoomDiv.scrollTop = 1000; - d3_behavior_zoomDiv.dispatchEvent(e); - delta = 1000 - d3_behavior_zoomDiv.scrollTop; - } catch (error) { - delta = e.wheelDelta || (-e.detail * 5); - } - - return delta * .005; -} - -// Note: Since we don't rotate, it's possible for the touches to become -// slightly detached from their original positions. Thus, we recompute the -// touch points on touchend as well as touchstart! -function d3_behavior_zoomTouchup() { - var touches = d3.svg.touches(d3_behavior_zoomTarget), - i = -1, - n = touches.length, - touch; - while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch); - return touches; -} - -function d3_behavior_zoomTouchmove() { - var touches = d3.svg.touches(d3_behavior_zoomTarget); - switch (touches.length) { - - // single-touch pan - case 1: { - var touch = touches[0]; - d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]); - break; - } - - // double-touch pan + zoom - case 2: { - var p0 = touches[0], - p1 = touches[1], - p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2], - l0 = d3_behavior_zoomLocations[p0.identifier], - l1 = d3_behavior_zoomLocations[p1.identifier], - l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]]; - d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2); - break; - } - } -} - -function d3_behavior_zoomMousemove() { - d3_behavior_zoomZooming = null; - if (d3_behavior_zoomPanning) { - d3_behavior_zoomMoved = true; - d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning); - } -} - -function d3_behavior_zoomMouseup() { - if (d3_behavior_zoomPanning) { - if (d3_behavior_zoomMoved && d3_behavior_zoomEventTarget === d3.event.target) { - d3_behavior_zoomStopClick = true; - } - d3_behavior_zoomMousemove(); - d3_behavior_zoomPanning = null; - } -} - -function d3_behavior_zoomClick() { - if (d3_behavior_zoomStopClick && d3_behavior_zoomEventTarget === d3.event.target) { - d3.event.stopPropagation(); - d3.event.preventDefault(); - d3_behavior_zoomStopClick = false; - d3_behavior_zoomEventTarget = null; - } -} - -function d3_behavior_zoomTo(z, x0, x1) { - var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]), - x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0], - y = d3_behavior_zoomXyz[1] = x0[1] - K * x1[1], - o = d3.event, // Events can be reentrant (e.g., focus). - k = Math.pow(2, z); - - d3.event = { - scale: k, - translate: [x, y], - transform: function(sx, sy) { - if (sx) transform(sx, x); - if (sy) transform(sy, y); - } - }; - - function transform(scale, o) { - var domain = scale.__domain || (scale.__domain = scale.domain()), - range = scale.range().map(function(v) { return (v - o) / k; }); - scale.domain(domain).domain(range.map(scale.invert)); - } - - try { - d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments); - } finally { - d3.event = o; - } - - o.preventDefault(); -} -})(); diff --git a/web/src/main/resources/static/js/d3.v3.min.js b/web/src/main/resources/static/js/d3.v3.min.js deleted file mode 100644 index 16648730..00000000 --- a/web/src/main/resources/static/js/d3.v3.min.js +++ /dev/null @@ -1,5 +0,0 @@ -!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++ie;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++aa;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)0?0:3:xo(r[0]-e)0?2:1:xo(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ -r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)Uo?{x:s,y:xo(t-s)Uo?{x:xo(e-g)Uo?{x:h,y:xo(t-h)Uo?{x:xo(e-p)=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.yd||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.yr||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.yp){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.xu||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return ur;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++oe;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.ro;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++0;h--)o.push(u(c)*h);for(c=0;o[c]l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++oe?[NaN,NaN]:[e>0?a[e-1]:n[0],et?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ir&&(e=r)}else{for(;++i=r){e=r;break}for(;++ir&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ie&&(e=r)}else{for(;++i=r){e=r;break}for(;++ie&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}else{for(;++u=r){e=i=r;break}for(;++ur&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++ii){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++rr;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++uu;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], -shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rn?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.xy&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++lt;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++cs?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u0)for(u=-1;++u=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.xg.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++it?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++oe&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; -if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++ue.dx)&&(f=e.dx);++ue&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++au;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}(); \ No newline at end of file diff --git a/web/src/main/resources/static/js/jquery-3.3.1.min.js b/web/src/main/resources/static/js/jquery-3.3.1.min.js deleted file mode 100644 index 4d9b3a25..00000000 --- a/web/src/main/resources/static/js/jquery-3.3.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" + + + + + + + + +
Skip to content

Contents

OncoTree to OncoTree Mapping Tool

The OncoTree Mapping tool was developed to facilitate the mapping of OncoTree codes between different OncoTree release versions. Below you can find basic instructions in the "Running the tool" section, and a detailed walkthrough in the "Tutorial" section.

Setting up and downloading the tool

As of January 2020, the sun has set on Python 2.X. If you are still using Python 2.X, we encourage you to use Python 3.6 and above, but here is the last version of the code to work with Python 2.X. In the future, only Python 3.X versions of this tool will be supported.

Click here to download the script: oncotree_to_oncotree.py

Running the tool

The OncoTree Mapping tool can be run with the following command:

python3 <path/to/scripts/oncotree_to_oncotree.py> --source-file <path/to/source/file> --target-file <path/to/target/file> --source-version <source_oncotree_version> --target-version <target_oncotree_version>

Options

  • -i | --source-file: This is the source clinical file path. It must contain ONCOTREE_CODE in the file header and it must contain OncoTree codes corresponding to the <source_oncotree_version>. Read more about the cBioPortal clinical file format here.
  • -o | --target-file: This is the path to the target clinical file that will be generated. It will contain mapped OncoTree codes from <source_oncotree_version>-to-<target_oncotree_version>.
  • -s | --source-version: This is the source OncoTree version. The OncoTree codes in the source file must correspond to this version.
  • -t | --target-version: This is the target OncoTree version that the script will attempt to map the source file OncoTree codes to.

The list of OncoTree versions available are viewable here or on the dropdown menu of the OncoTree home page.

Note: the source file should not contain embedded line breaks within any single cell in the table, such as those created by using the keyboard combinations Alt-Enter or Command-Option-Enter while editing a cell in Microsoft Excel.

For a detailed walkthrough of running the tool, see the "Tutorial" section below.

Output

The OncoTree Mapper Tool will automatically replace the value in the ONCOTREE_CODE column with the mapped code if available. The tool will also add a new column called ONCOTREE_CODE_OPTIONS containing suggestions for OncoTree codes if one or more nodes could not be directly mapped. The ONCOTREE_CODE_OPTIONS column formats its suggestions differently depending on the mapping results. Possible suggestion formats and corresponding examples are shown below.

1. Unambiguous Direct Mappings

Unambiguous direct mappings occur when an OncoTree code maps directly to a single code in the target version. In this case, the ONCOTREE_CODE_OPTIONS column will be left blank, and the mapped code will be automatically placed in the ONCOTREE_CODE column. Unambiguous direct mappings are checked for addition of more granular nodes; to see how this may affect the ONCOTREE_CODE_OPTIONS column formatting, please refer to the subsection below "4. More Granular Nodes Introduced".

2. Ambiguous Direct Mappings

Ambiguous direct mappings occur when an OncoTree code maps to multiple codes in the target version. The ONCOTREE_CODE_OPTIONS column formats the output as follows:

'Source Code' -> {'Code 1', 'Code 2', 'Code 3', }   e.g. ALL -> {TLL, BLL}

Example: Schema describing the revocation of OncoTree node ALL is mapped to multiple nodes.

In oncotree_2018_05_01, ALL had two children: TALL and BALL. On release oncotree_2018_06_01, the ALL node was discontinued and the TALL node was renamed TLL and the BALL node was renamed BLL.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

ALL -> {TLL, BLL}

Ambiguous direct mappings are also checked for addition of more granular nodes; to see how this may affect the ONCOTREE_CODE_OPTIONS column formatting, please refer to the subsection below "4. More Granular Nodes Introduced".

3. No Direct Mappings

No direct mappings occur when the source OncoTree code is unrelated to any OncoTree code in the target version. One such possibility is mapping a newly introduced OncoTree code backwards in time. In this case, the tool finds the closest set of neighbors (e.g parents and children) which are mappable in the target version. The ONCOTREE_CODE_OPTIONS column returns the set with the keyword Neighbors as follows:

'Source Code' -> Neighbors {'Code 1', 'Code 2', 'Code 3', }   e.g. UPA -> Neighbors {BLADDER}

Example: Schema describing a case where new OncoTree node UPA cannot be directly mapped backwards to a node.

In oncotree_2019_03_01, UPA was added to the OncoTree as a child node of BLADDER. Because UPA did not exist in previous version oncotree_2018_05_01 and did not replace any existing node, the tool uses the surrounding nodes when mapping backwards. In this case, the parent node BLADDER is returned as the closest match.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

UPA -> Neighbors {BLADDER}

4. More Granular Nodes Introduced

In certain cases, the target version can also introduce nodes with more specific descriptions. When this occurs, the tool will add the string more granular choices introduced to the existing text in the ONCOTREE_CODE_OPTIONS column as follows:

'Source Code' -> {'Code 1', }, more granular choices introduced e.g. TALL -> {TLL}, more granular choices introduced

Example: Schema describing a case where OncoTree node TALL is mapped to a node with more granular children

In oncotree_2019_03_01, TALL was a leaf node with no children. In release oncotree_2019_06_01, TLL was introduced as a replacement for TALL with additional children ETPLL and NKCLL.

The ONCOTREE_CODE_OPTIONS column would be shown as follows:

TALL -> {TLL}, more granular choices introduced

5. Invalid Source OncoTree Code

An invalid source OncoTree Code means the provided code cannot be found in the source version. In such a case, mapping cannot be attempted and the ONCOTREE_CODE_OPTIONS column displays the following:

'Source Code' -> ???, OncoTree code not in source OncoTree version

Tutorial

The following tutorial will guide the user through using the oncotree_to_oncotree.py tool. The tutorial will go through the expected output to highlight specific mapping cases. Additionally, the tutorial will cross-reference the output with the generated mapping summary to demonstrate how it can be used to aid in manual selection of unresolved nodes.

Step 1

Download the sample input file (data_clinical_sample.txt) from here .

Step 2

Download oncotree_to_oncotree.py from here .

Step 3

Run the following command from the command line:

python oncotree_to_oncotree.py -i data_clinical_sample.txt -o data_clinical_sample_remapped.txt -s oncotree_2018_03_01 -t oncotree_2019_03_01

The tool will output two files: data_clinical_sample_remapped.txt and data_clinical_sample_remapped_summary.html. For your reference, you can see the expected output files - here and here

Step 4

Examine data_clinical_sample_remapped.txt; the first five columns of the file should look as follows:

PATIENT_IDSAMPLE_IDAGE_AT_SEQ_REPORTONCOTREE_CODEONCOTREE_CODE_OPTIONS
P1S141ALL -> {BLL,TLL}, more granular choices introduced
P2S260BALL -> {BLL}, more granular choices introduced
P3S3<18TALL -> {TLL}, more granular choices introduced
P4S471PTCL
P5S564PTCL
P6S636CHL -> {CHL}, more granular choices introduced
P7S763SpCC -> ???, OncoTree code not in source OncoTree version
P8S863MCL -> {MCL}, more granular choices introduced
P9S973HGNEE -> ???, OncoTree code not in source OncoTree version
P10S1052ONCOTREE_CODE column blank : use a valid OncoTree code or "NA"
P11S1177NA
P12S1287TNKL -> {MTNN}, more granular choices introduced
P13S1379HIST -> {HDCN}, more granular choices introduced
P14S1453CLLSLL
P15S1569CLLSLL
P16S1665LEUK -> {MNM}, more granular choices introduced
P17S1766MYCF
P18S1866RBL

Step 5

Using values in the ONCOTREE_CODE_OPTIONS as a guide, manually select and place an OncoTree Code in the ONCOTREE_CODE column. For additional information, refer to the summary file data_clinical_sample_remapped_summary.html. Repeat for all rows in the output file. Several examples are shown below.

Sample 1
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S1ALL -> {BLL,TLL}, more granular choices introduced

Source OncoTree code ALL maps directly to codes BLL and TLL. Users should place either BLL or TLL in the ONCOTREE_CODE column. The ONCOTREE_CODE_OPTIONS column also notes that more granular choices were introduced; as such, users can use the summary file for additional guidance.

Searching by source code, the following information can be found in the summary file:

The summary file provides a link to the closest shared parent node LNM; users can choose more granular nodes by referencing the provided tree:

Sample 2
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S2BALL -> {BLL}, more granular choices introduced

Source OncoTree code BALL maps directly to BLL. Users should place BLL in the ONCOTREE_CODE column. However, similar to sample 1, the ONCOTREE_CODE_OPTIONS indicates there are more granular choices available. Users can follow the same steps as above and use the summary file to select a more granular node.

Sample 4
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S4PTCL

No additional resolution is needed; the previous OncoTree code was already automatically mapped to PTCL and placed in the ONCOTREE_CODE column. ONCOTREE_CODE_OPTIONS is empty because no manual selections were necessary.

Sample 9
SAMPLE_IDONCOTREE_CODEONCOTREE_CODE_OPTIONS
S4HGNEE -> ???, OncoTree code not in source OncoTree version

Source OncoTree code HGNEE was not found in the source OncoTree version and therefore could not be mapped. Users can either reassign a new source OncoTree code (and rerun the script) or remove the sample.

Step 6

After filling in the ONCOTREE_CODE column with an OncoTree code for each sample, use an editor (e.g. Microsoft Excel, vim, etc.) to trim off the ONCOTREE_CODE_OPTIONS column. The resulting file will be a new data_clinical_sample.txt file with all codes mapped to the target version. The first four columns of the final result is shown below:

PATIENT_IDSAMPLE_IDAGE_AT_SEQ_REPORTONCOTREE_CODE
P1S141BLL
P2S260BLL
P3S3<18TLL
P4S471PTCL
P5S564PTCL
P6S636CHL
P7S763SPCC
P8S863MCL
P10S1052NA
P11S1177NA
P12S1287MTNN
P13S1379HDCN
P14S1453CLLSLL
P15S1569CLLSLL
P16S1665MNM
P17S1766MYCF
P18S1866RBL

Ontology to Ontology Mapping Tool

The Ontology Mapping tool was developed to facilitate the mapping between different cancer classification systems. We currently support mapping between OncoTree, ICD-O, NCIt, UMLS and HemeOnc systems. The tool and the mapping file (the mapping file does not need to be downloaded to run the tool) can be found here

Prerequisites

The Ontology Mapping tool runs on python 3 and requires pandas and requests libraries. These libraries can be installed using

pip3 install pandas
+pip3 install requests

Running the tool

The Ontology Mapping tool can be run with the following command:

python <path/to/scripts/ontology_to_ontology_mapping_tool.py> --source-file <path/to/source/file> --target-file <path/to/target/file> --source-code <source_ontology_code> --target-code <target_ontology_code>

Options

  • i | --source-file: This is the source file path. The source file must contain one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE in the file header and it must contain codes corresponding to the Ontology System.
  • o | --target-file: This is the path to the target file that will be generated. It will contain ontologies mapped from source code in <source-file> to <target-code>.
  • s | --source-code: This is the source ontology code in <source-file>. It must be one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE.
  • t | --target-code: This is the target ontology code that the script will attempt to map the source file ontology code to. It must be one of the ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE.

Note

  • The source file should be tab delimited and should contain one of the ontology: ONCOTREE_CODE, NCIT_CODE, UMLS_CODE, ICDO_TOPOGRAPHY_CODE, ICDO_MORPHOLOGY_CODE or HEMEONC_CODE in the file header.
  • We currently are allowing only one ontology to another ontology mapping. In the future, we plan to extend the tool to support mapping to multiple ontology systems.
+ + + + \ No newline at end of file diff --git a/web/src/main/resources/static/news.html b/web/src/main/resources/static/news.html new file mode 100644 index 00000000..be281a2a --- /dev/null +++ b/web/src/main/resources/static/news.html @@ -0,0 +1,24 @@ + + + + + + News | OncoTree + + + + + + + + + + + + + +
Skip to content

News

November 2, 2021

  • New Stable Release OncoTree version oncotree_2021_11_02 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_10_01.
  • New nodes added:
    • Desmoplastic/Nodular Medulloblastoma, NOS (DMBLNOS)
    • Desmoplastic/Nodular Medulloblastoma, SHH Subtype (DMBLSHH)
    • Anaplastic Medulloblastoma, NOS (AMBLNOS)
    • Anaplastic Medulloblastoma, Non-WNT, Non-SHH (AMBLNWS)
    • Anaplastic Medulloblastoma, Group 3 (AMBLNWSG3)
    • Anaplastic Medulloblastoma, Group 4 (AMBLNWSG4)
    • Anaplastic Medulloblastoma, SHH Subtype (AMBLSHH)
    • Medulloblastoma, NOS (MBLNOS)
    • Medulloblastoma, Non-WNT, Non-SHH (MBLNWS)
    • Medulloblastoma, Group 3 (MBLG3)
    • Medulloblastoma, Group 4 (MBLG4)
    • Medulloblastoma, SHH Subtype (MBLSHH)
    • Medulloblastoma, WNT Subtype (MBLWNT)
    • Medulloblastoma with Extensive Nodularity, NOS (MBENNOS)
    • Medulloblastoma with Extensive Nodularity, SHH Subtype (MBENSHH)
    • Pancreatic Neuroendocrine Carcinoma (PANEC) in the original version of this news release this node was accidentally omitted
  • Nodes reclassified
    • The following list of oncotree codes had the mainType shortened to drop the suffix "NOS": ADRENAL_GLAND, AMPULLA_OF_VATER, BILIARY_TRACT, BLADDER, BONE, BOWEL, BRAIN, BREAST, CERVIX, EYE, HEAD_NECK, KIDNEY, LIVER, LUNG, LYMPH, MYELOID, OTHER, OVARY, PANCREAS, PENIS, PERITONEUM, PLEURA, PNS, PROSTATE, SKIN, SOFT_TISSUE, STOMACH, TESTIS, THYMUS, THYROID, UTERUS, VULVA
    • Cholangiocarcinoma (CHOL) now has direct parent Intraductal Papillary Neoplasm of the Bile Duct (IPN) [previously: Biliary Tract (BILIARY_TRACT)]
    • Gallbladder Cancer (GBC) now has direct parent Intracholecystic Papillary Neoplasm (ICPN) [previously: Biliary Tract (BILIARY_TRACT)]
  • oncotree candidate release version additions:
    • Three new nodes intended only for version oncotree_candidate_release were added (NVRINT, MPNWP, MDSWP). These nodes will not be incorperated into oncotree latest stable.
  • resources added
    • rdf formatted OWL ontology and taxomomy files for recent oncotree versions have been added to our github repository. They can be explored here .

November 4, 2020

  • Ontology to Ontology Mapping tool available
    • The Ontology Mapping tool was developed to facilitate the mapping between different cancer classification systems. We currently support mapping between OncoTree, ICD-O, NCIt, UMLS and HemeOnc systems.
    • A mapping file containing mappings between the different ontologies and OncoTree codes as well as a python script to run the mapping is available on the OncoTree GitHub page . Details are also available on the Mapping Tools page .
    • The mapping file is expected to grow as we curate more ontology mappings for OncoTree codes.

October 1, 2020

  • New Stable Release OncoTree version oncotree_2020_10_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_04_01.
  • New nodes added:
    • Basal Cell Carcinoma of Prostate (BCCP)
  • Node deleted:
    • Porphyria Cutania Tarda (PCT)
  • Node with updated name:
    • Goblet Cell Adenocarcinoma of the Appendix (GCCAP) [previously: Goblet Cell Carcinoid of the Appendix (GCCAP)].

April 1, 2020

  • New Stable Release OncoTree version oncotree_2020_04_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_02_06.
  • New nodes added:
    • AML with Variant RARA translocation (AMLRARA)
  • Nodes reclassified:
    • Mixed Cancer Types (MIXED is now a child of Other (OTHER) [previously under: Cancer of Unknown Primary (CUP)].

February 6, 2020

  • Web Link To Specific Nodes Available:
    • When providing web links to oncotree, you may include a search term as an optional argument and the oncotree you reference will be displayed with the search term located and highlighted. Use of this mechanism can be seen in the example output for the OncoTree-to-OncoTree code mapping tool.
    • As an example, you can provide a direct link to the TumorType node PANET in oncotree version oncotree_2019_12_01 with this link: http://oncotree.mskcc.org/#/home?version=oncotree_2019_12_01&search_term=(PANET)
  • New Stable Release OncoTree version oncotree_2020_02_06 is now the latest stable release. The previous stable version is still accessible as version oncotree_2020_02_01.
  • Nodes reclassified:
    • Gallbladder Cancer (GBC) is now a child of Biliary Tract (BILIARY_TRACT) [previously under: Intracholecystic Papillary Neoplasm (ICPN)].
    • Cholangiocarcinoma (CHOL) is now a child of Biliary Tract (BILIARY_TRACT) [previously under: Intraductal Papillary Neoplasm of the Bile Duct (IPN)].

February 1, 2020

  • New Stable Release OncoTree version oncotree_2020_02_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_12_01.
  • New nodes added:
    • Intraductal Oncocytic Papillary Neoplasm (IOPN)
    • Intraductal Tubulopapillary Neoplasm (ITPN)
    • Intracholecystic Papillary Neoplasm (ICPN)
    • Intraductal Papillary Neoplasm of the Bile Duct (IPN)
  • Nodes reclassified:
    • Gallbladder Cancer (GBC) is now a child of Intracholecystic Papillary Neoplasm (ICPN) [previously under: Biliary Tract (BILIARY_TRACT)].
    • Cholangiocarcinoma (CHOL) is now a child of Intraductal Papillary Neoplasm of the Bile Duct (IPN) [previously under: Biliary Tract (BILIARY_TRACT)].

December 1, 2019

  • New Stable Release OncoTree version oncotree_2019_12_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_08_01.
  • New nodes added:
    • Low-grade Appendiceal Mucinous Neoplasm (LAMN)

August 1, 2019

  • New Stable Release OncoTree version oncotree_2019_08_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_05_01.
  • New nodes added:
    • Lacrimal Gland Tumor (LGT)
    • Adenoid Cystic Carcinoma of the Lacrimal Gland (ACLG)
    • Squamous Cell Carcinoma of the Lacrimal Gland (SCLG)
    • Basal Cell Adenocarcinoma (BCAC)
    • Carcinoma ex Pleomorphic Adenoma (CAEXPA)
    • Pleomorphic Adenoma (PADA)
    • Polymorphous Adenocarcinoma (PAC)
    • Atypical Lipomatous Tumor (ALT)

May 2, 2019

  • OncoTree-to-OncoTree code mapping tool updated
    • The OncoTree-to-OncoTree mapping tool (now version 1.2) has been updated:
      • it no longer requires the installation of the python 'requests' module
      • it now is able to handle input files where lines end in carriage return (such as files saved from Microsoft Excel)

May 1, 2019

  • New Stable Release OncoTree version oncotree_2019_05_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_03_01.
  • Nodes reclassified
    • Intestinal Ampullary Carcinoma (IAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Mixed Ampullary Carcinoma (MAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Pancreatobiliary Ampullary Carcinoma (PAMPCA) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Ependymoma (EPM) MainType is now Glioma [previously: CNS Cancer]
    • Rosai-Dorfman Disease (RDD) MainType is now Histiocytosis [previously: Histiocytic Disorder]

March 26, 2019

  • OncoTree-to-OncoTree code mapping tool updated
    • The OncoTree-to-OncoTree mapping tool (now version 1.1) has been slightly improved, mainly by adding a separate section in the output summary for reporting OncoTree codes which were replaced automatically. Also, additional documentation and description of the tool has been added under the "Mapping Tools" tab.

March 14, 2019

  • OncoTree-to-OncoTree code mapping tool available
    • A python program is now available for download under the webpage tab labeled "Mapping Tools". This tool will rewrite OncoTree codes in a tabular clinical data file, mapping from one version of OncoTree to another. When additional guidance is necessary, the program will insert a column containing options and comments next to the ONCOTREE_CODE column. After selecting an appropriate OncoTree code for cases which require action, this extra column can be deleted to produce a fully re-mapped clinical data file. More details about this tool and how to use it are available under the "Mapping Tools" tab.
    • The OncoTree-to-OncoTree mapping tool relies on an expanded model of OncoTree node history. This is reflected in the Web API schema for Tumor Types, which now has added properties called "precursors" and "revocations". Using these properties, and the existing "history" property, the tool is able to make proper mappings across OncoTree versions, and give suggestions when no clear mapping is available. It is also reflected in the main tree visualization of OncoTree, where a combination of these properties (when set) will be displayed in the pop-up information box with label "Previous Codes".

March 1, 2019

  • New Stable Release OncoTree version oncotree_2019_03_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2019_02_01.
  • New node added:
    • NUT Carcinoma of the Lung (NUTCL)
  • Node with renamed OncoTree code:
    • Monomorphic Epitheliotropic Intestinal T-Cell Lymphoma (MEITL) [previously: MEATL]
  • Node with renamed OncoTree code and updated name:
    • Germ Cell Tumor with Somatic-Type Malignancy (GCTSTM) [previously: Teratoma with Malignant Transformation (TMT)]
  • Cross-version OncoTree code mapping tool coming soon
    • Development of a tool to map OncoTree codes between different versions of OncoTree is nearing completion.
    • Related to this, users of the OncoTree Web API should be aware that we will soon be adding two additional properties to the output schema returned by the api/tumorTypes endpoints. The properties "precursors" and "revocations" will be added alongside the "history" property (having the same type: an array of strings). These will help distinguish the kinds of possible relationships to OncoTree nodes in prior versions of OncoTree. We expect this new schema to be backwards compatible, but if your language or tools requires an exactly matching JSON schema you will need to make adjustments.

February 1, 2019

  • New Stable Release OncoTree version oncotree_2019_02_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_11_01.
  • New node added:
    • Leiomyoma (LM)

November 1, 2018

  • New Stable Release OncoTree version oncotree_2018_11_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_09_01.
  • New nodes added:
    • Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach (GINETES)
    • High-Grade Neuroendocrine Carcinoma of the Esophagus (HGNEE)
    • High-Grade Neuroendocrine Carcinoma of the Stomach (HGNES)
  • Nodes reclassified:
    • Well-Differentiated Neuroendocrine Tumors of the Stomach (SWDNET) is now a child of Gastrointestinal Neuroendocrine Tumors of the Esophagus/Stomach (GINETES) [previously under: Bowel (BOWEL)].

September 1, 2018

  • New Stable Release OncoTree version oncotree_2018_09_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_08_01.
  • Nodes with adjusted History:
    • Myeloid Neoplasm (MNM) previous code: LEUK
    • B-Lymphoblastic Leukemia/Lymphoma (BLL) previous code: BALL
    • T-Lymphoblastic Leukemia/Lymphoma (TLL) previous code: TALL
    • Essential Thrombocythemia (ET) previous code: ETC
    • Polycythemia Vera (PV) previous code: PCV
    • Diffuse Large B-Cell Lymphoma, NOS (DLBCLNOS) previous code: DLBCL
    • Sezary Syndrome (SS) previous code: SEZS

August 1, 2018

  • New Stable Release OncoTree version oncotree_2018_08_01 is now the latest stable release. The previous stable version is still accessible as version oncotree_2018_07_01.
  • New nodes added:
    • Angiomatoid Fibrous Histiocytoma (AFH)
    • Clear Cell Sarcoma of Kidney (CCSK)
    • Ewing Sarcoma of Soft Tissue (ESST)
    • Extra Gonadal Germ Cell Tumor (EGCT)
    • Infantile Fibrosarcoma (IFS)
    • Malignant Glomus Tumor (MGST)
    • Malignant Rhabdoid Tumor of the Liver (MRTL)
    • Myofibromatosis (IMS)
    • Sialoblastoma (SBL)
    • Undifferentiated Embryonal Sarcoma of the Liver (UESL)

July 1, 2018

  • New Stable Release OncoTree version oncotree_2018_07_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_06_15.
  • Node with renamed OncoTree code:
    • Atypical Chronic Myeloid Leukemia, BCR-ABL1- (ACML) [previously: aCML]

June 15, 2018

  • New Stable Release OncoTree version oncotree_2018_06_15 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_06_01.
  • Nodes reclassified
    • Mature B-Cell Neoplasms (MBN) and Mature T and NK Neoplasms (MTNN) and their subnodes were relocated to be under Non-Hodgkin Lymphoma (NHL).
    • Rosai-Dorfman Disease (RDD) was relocated to be under Histiocytic and Dendritic Cell Neoplasms (HDCN). Previously RDD was under Lymphoid Neoplasm (LNM) in the Lymphoid category.

June 1, 2018

  • New Stable Release OncoTree version oncotree_2018_06_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_05_01.
  • Blood and Lymph subtrees replaced with new Myeloid and Lymphoid subtrees:
    • 23 nodes in the previous Blood subtree have been deleted or relocated/renamed. Affected OncoTree codes from this tree: BLOOD, BPDCN, HIST, LCH, ECD, LEUK, ALL, BALL, TALL, AMOL, AML, CLL, CML, CMML, HCL, LGLL, MM, MDS, MPN, ETC, MYF, PCV, SM
    • 28 nodes in the previous Lymph subtree have been deleted or relocated/renamed. Affected OncoTree codes from this tree: LYMPH, HL, CHL, NLPHL, NHL, BCL, BL, DLBCL, MALTL, FL, MCL, MZL, MBCL, NMZL, PCNSL, PEL, SLL, SMZL, WM, TNKL, CTCL, MYCF, SEZS, PTCL, ALCL, AITL, PTCLNOS, RD
    • 122 nodes in the current Lymphoid subtree have been added or relocated/renamed from previous subtrees. OncoTree codes in this new subtree are: LYMPH, LATL, LBGN, LNM, BLL, BLLRGA, BLLHYPER, BLLHYPO, BLLIAMP21, BLLETV6RUNX1, BLLTCF3PBX1, BLLIL3IGH, BLLBCRABL1, BLLKMT2A, BLLBCRABL1L, BLLNOS, HL, CHL, LDCHL, LRCHL, MCCHL, NSCHL, NLPHL, MBN, ALKLBCL, AHCD, BCLU, BPLL, BL, BLL11Q, CLLSLL, DLBCLCI, DLBCLNOS, ABC, GCB, EBVDLBCLNOS, EBVMCU, EP, FL, DFL, ISFN, GHCD, HHV8DLBCL, HCL, HGBCL, HGBCLMYCBCL2, IVBCL, LBLIRF4, LYG, LPL, WM, MCL, ISMCL, MZL, EMALT, NMZL, SMZL, MCBCL, MGUS, MGUSIGA, MGUSIGG, MGUSIGM, MIDD, MIDDA, MIDDO, MHCD, PTFL, PCM, PLBL, PCLBCLLT, PCFCL, PCNSL, PEL, PMBL, SPB, SBLU, HCL-V, SDRPL, THRLBCL, MTNN, ATLL, ANKL, ALCL, ALCLALKN, ALCLALKP, BIALCL, AITL, CLPDNK, EATL, ENKL, FTCL, HSTCL, HVLL, ITLPDGI, MEATL, MYCF, NPTLTFH, PTCL, PCATCL, PCLPD, LYP, PCALCL, PCSMTPLD, PCAECTCL, PCGDTCL, SS, SPTCL, SEBVTLC, TLGL, TPLL, NHL, PTLD, CHLPTLD, FHPTLD, IMPTLD, MPTLD, PHPTLD, PPTLD, RDD, TLL, ETPLL, NKCLL
    • 101 nodes in the current Myeloid subtree have been added or relocated/renamed from previous subtrees. OncoTree codes in this new subtree are: MYELOID, MATPL, MBGN, MNM, ALAL, AUL, MPALBCRABL1, MPALKMT2A, MPALBNOS, MPALTNOS, AML, AMLMRC, AMLRGA, AMLRBM15MKL1, AMLBCRABL1, AMLCEBPA, AMLNPM1, AMLRUNX1, AMLCBFBMYH11, AMLGATA2MECOM, AMLDEKNUP214, AMLRUNX1RUNX1T1, AMLMLLT3KMT2A, APLPMLRARA, AMLNOS, AM, AMLMD, AWM, ABL, AMKL, AMOL, AMML, APMF, PERL, MPRDS, MLADS, TAM, MS, TMN, TAML, TMDS, BPDCN, HDCN, JXG, ECD, FRCT, FDCS, HS, IDCT, IDCS, LCH, LCS, MCD, CMCD, MCSL, SM, ASM, ISM, SMMCL, SSM, SMAHN, MDS, MDSEB, MDSEB1, MDSEB2, MDSID5Q, MDSMD, MDSRS, MDSRSMD, MDSRSSLD, MDSSLD, MDSU, RCYC, MDS/MPN, aCML, CMML, CMML0, CMML1, CMML2, JMML, MDSMPNRST, MDSMPNU, MNGLP, MLNER, MLNFGFR1, MLNPCM1JAK2, MLNPDGFRA, MLNPDGFRB, MPN, CELNOS, CML, CMLBCRABL1, CNL, ET, ETMF, MPNU, PV, PVMF, PMF, PMFPES, PMFOFS
  • Nodes reclassified
    • Adrenocortical Adenoma (ACA) MainType is now Adrenocortical Adenoma [previously: Adrenocortical Carcinoma]
    • Ampulla of Vater (AMPULLA_OF_VATER) MainType is now Ampullary Cancer [previously: Ampullary Carcinoma]
    • Parathyroid Cancer (PTH) MainType is now Parathyroid Cancer [previously: Head and Neck Cancer]
    • Parathyroid Carcinoma (PTHC) MainType is now Parathyroid Cancer [previously: Head and Neck Cancer]
    • Follicular Dendritic Cell Sarcoma (FDCS) was moved from the Soft Tissue subtree into the Myeloid subtree with direct parent Histiocytic and Dendritic Cell Neoplasms (HDCN)
    • Interdigitating Dendritic Cell Sarcoma (IDCS) was moved from the Soft Tissue subtree into the Myeloid subtree with direct parent Histiocytic and Dendritic Cell Neoplasms (HDCN)
  • New nodes added:
    • Inverted Urothelial Papilloma (IUP)
    • Urothelial Papilloma (UPA)
    • Oncocytic Adenoma of the Thyroid (OAT)
  • Character set simplification
    • Salivary Gland-Type Tumor of the Lung (SGTTL) used to contain a unicode character for a horizontal dash. This punctuation mark is now a hyphen.

May 1, 2018

  • New Stable Release OncoTree version oncotree_2018_05_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_04_01.
  • New nodes added:
    • Primary CNS Melanocytic Tumors (PCNSMT)
    • Melanocytoma (MELC)
  • Node reclassified
    • Primary CNS Melanoma (PCNSM) now is a child of Primary CNS Melanocytic Tumors (PCNSMT) [previously under: CNS/Brain].

April 23, 2018

  • New Web API Version Available
  • Details and Migration Guidance
    • The base URL for accessing all API functionality is being simplified from ~~http://oncotree.mskcc.org/oncotree/~~ to http://oncotree.mskcc.org/
    • The /api/tumor_types.txt endpoint is now deprecated. It is scheduled for deletion as part of the next API version release.
    • Most endpoint paths in the API remain the same and provide the same services. Exceptions are:
      • /api/tumorTypes used to accept a query parameter ("flat") which controlled the output format for receiving a tree representation or a flat representation of the full set of TumorTypes. Now this endpoint always returns a flat list of all TumorTypes and a new endpoint path (/api/tumorTypes/tree) is used to retrieve a tree representation of the OncoTree. Previous requests which included "flat=false" should be adjusted to use the /api/tumorTypes/tree endpoint. Otherwise "flat=true" should be dropped from the request.
      • /api/tumorTypes used to accept a query parameter ("deprecated") which is no longer recognized. This parameter should be dropped from requests. Deprecated OncoTree codes can instead be found in the history attribute of the response.
      • the POST request endpoint (/api/tumorTypes/search) which accepted a list of TumorType queries has been deprecated and is no longer available through the swagger-ui interface. The GET request endpoint /api/tumorTypes/search/{type}/{query} remains available as before. If you previously submitted an array of query requests, you should iterate through the array and call the GET request endpoint to make one query per request.
    • The output format (schema) of many endpoints has been simplified. You will need to adjust your result handling accordingly. Changes include:
      • responses no longer include a "meta" element with associated code and error messages. Instead HTTP status codes are set appropriately and error messages are supplied in message bodies. Responses also no longer contain a "data" element. Objects representing the API output are directly returned instead.
      • MainType values are no longer modeled as objects. Each MainType value is now represented as a simple string. The /api/mainTypes endpoint now returns an array of strings rather than an object mapping MainType names to MainType objects.
      • TumorType values no longer contain elements "id", "deprecated", "links", "NCI", "UMLS". A new element ("externalReferences") has been added which contains a JSON object mapping external authority names to arrays of associated identifiers. Such as "externalReferences":
    • Argument validation has been strengthened for several parameters, such as "type" and "levels" in the /api/tumorTypes/search/{type}/{query} endpoint. Now improper arguments cause an a HTTP status response indicating error, with a description of the problem in the body.
    • Some requests which fail to find matching entities now return NOT_FOUND HTTP status code 404 rather than an empty result. Examples: http://oncotree.mskcc.org/api/tumorTypes/search/code/TEST_UNDEFINED_CODE or http://oncotree.mskcc.org/api/crosswalk?vocabularyId=ICDO&conceptId=C15

April 1, 2018

  • New Stable Release OncoTree version oncotree_2018_04_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_03_01.
  • New nodes added:
    • Adamantinoma (ADMA)
    • Tubular Adenoma of the Colon (TAC)
    • Parathyroid Cancer (PTH)
    • Parathyroid Carcinoma (PTHC)
    • Renal Neuroendocrine Tumor (RNET)

March 1, 2018

  • New Stable Release OncoTree version oncotree_2018_03_01 is now the latest stable release. The previous stable version is still accessible through the OncoTree web API by requesting version oncotree_2018_02_01.
  • New node added:
    • Ganglioneuroma (GN)
  • Node reclassified
    • Rhabdoid Cancer (MRT) now has direct parent Kidney (KIDNEY) [previously: Wilms' Tumor (WT)] Main type is now "Rhabdoid Cancer" [previously: Wilms Tumor]

February 7, 2018

  • OncoTree format expanded to support deeper tree nodes
    • To support upcoming expansion of the OncoTree, the 5 named levels of the OncoTree {Primary, Secondary, Tertiary, Quaternary, Quinternary} have been dropped in favor of level numbers {1, 2, 3, 4, 5, ...}. Web API functions have been adjusted accordingly, and an API function which outputs a table format of the OncoTree has been adjusted to output 7 levels of depth.
  • Additional improvements to the website :
    • tab-style navigation
    • more prominent version selection information
    • a new News page

February 1, 2018

  • New Stable Release OncoTree version oncotree_2018_02_01 is now the latest stable release. The previous stable version is still accessible for use through version name oncotree_2018_01_01.
  • New nodes added:
    • Adenosquamous Carcinoma of the Gallbladder (GBASC)
    • Gallbladder Adenocarcinoma, NOS (GBAD)
    • Small Cell Gallbladder Carcinoma (SCGBC)
    • Juvenile Secretory Carcinoma of the Breast (JSCB)
    • Osteoclastic Giant Cell Tumor (OSGCT)
    • Peritoneal Serous Carcinoma (PSEC)
  • Nodes reclassified [from: Embryonal Tumor, to: Peripheral Nervous System]:
    • Ganglioneuroblastoma (GNBL)
    • Neuroblastoma (NBL)
  • Node with renamed OncoTree code:
    • Spindle Cell Carcinoma of the Lung (SPCC) [previously: SpCC]
+ + + + \ No newline at end of file diff --git a/web/src/main/resources/static/open-iconic/font/css/open-iconic-bootstrap.min.css b/web/src/main/resources/static/open-iconic/font/css/open-iconic-bootstrap.min.css deleted file mode 100755 index 4664f2e8..00000000 --- a/web/src/main/resources/static/open-iconic/font/css/open-iconic-bootstrap.min.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Icons;src:url(../fonts/open-iconic.eot);src:url(../fonts/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic.woff) format('woff'),url(../fonts/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic.otf) format('opentype'),url(../fonts/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'} \ No newline at end of file diff --git a/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.otf b/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.otf deleted file mode 100755 index f6bd6846..00000000 Binary files a/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.otf and /dev/null differ diff --git a/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.ttf b/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.ttf deleted file mode 100755 index fab60486..00000000 Binary files a/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.ttf and /dev/null differ diff --git a/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.woff b/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.woff deleted file mode 100755 index f9309988..00000000 Binary files a/web/src/main/resources/static/open-iconic/font/fonts/open-iconic.woff and /dev/null differ diff --git a/web/src/main/resources/static/texture-noise.png b/web/src/main/resources/static/texture-noise.png deleted file mode 100644 index 684f4469..00000000 Binary files a/web/src/main/resources/static/texture-noise.png and /dev/null differ