diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..8824455 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,44 @@ +{ + "env": { + "commonjs": true, + "es6": true, + "node": true, + "browser": true + }, + "extends": [ + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2017, + "sourceType": "module" + }, + "rules": { + "@typescript-eslint/interface-name-prefix": "off", + "@typescript-eslint/no-empty-interface": "off", + "semi": "off", + "@typescript-eslint/semi": [ + "error", + "never" + ], + "@typescript-eslint/member-delimiter-style": [ + "error", { + "multiline": { + "delimiter": "none", + "requireLast": false + } + } + ], + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-use-before-define": "off", + "indent": [ + "error", + 4 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": "off" + } +} \ No newline at end of file diff --git a/.github/workflows/package-tests.yml b/.github/workflows/package-tests.yml deleted file mode 100644 index c85bf7b..0000000 --- a/.github/workflows/package-tests.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Package Tests - -on: - push: - branches: - - main - paths: - - 'packages/**' - - 'package.json' - - 'pnpm-lock.yaml' - - '.github/workflows/package-tests.yml' - pull_request: - branches: - - main - paths: - - 'packages/**' - - 'package.json' - - 'pnpm-lock.yaml' - - '.github/workflows/package-tests.yml' - -permissions: - contents: read - -jobs: - test: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [20] - package: [biggest, curse-script, edge-crypto, gauss-spiral, mugunghwa, patternly, pseudo-shuffle] - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup pnpm - uses: pnpm/action-setup@v2 - with: - version: 9.0.0 - - - name: Setup Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: 'pnpm' - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Run tests for ${{ matrix.package }} - run: pnpm --filter ${{ matrix.package }} test diff --git a/.gitignore b/.gitignore index 4006871..0a38fe2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,37 +1,66 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* -# Dependencies -node_modules -.pnp -.pnp.js +# User Project Files +dist/ +release/ +src/ -# Local env files -.env -.env.local -.env.development.local -.env.test.local -.env.production.local +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov -# Testing +# Coverage directory used by tools like istanbul coverage -# Turbo -.turbo +# nyc test coverage +.nyc_output -# Vercel -.vercel +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt -# Build Outputs -.next/ -out/ -build -dist +# Bower dependency directory (https://bower.io/) +bower_components -# Debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env -# Misc -.DS_Store -*.pem +# next.js build output +.next diff --git a/.npmrc b/.npmrc deleted file mode 100644 index e69de29..0000000 diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 44a73ec..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "eslint.workingDirectories": [ - { - "mode": "auto" - } - ] -} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e941190 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,110 @@ +## ๐Ÿ“ฎ Guidelines + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> This page describes the things to refer to when you do Contributing... + + + +### ๐Ÿšง Must be Signed on CLA + +> This project follows MIT License. If you want to claim the copyright to the code you contribute to, you must not provide the code to the main project, but you must clone the project to create your own project. + +You must be on the ensure to have signed the [Contributor License Agreement (CLA)](https://cla.developers.google.com/). + +- If you are an individual writing original source code and you're sure you own the intellectual property, then you'll need to sign an [individual CLA](https://code.google.com/legal/individual-cla-v1.0.html). +- If you work for a company that wants to allow you to contribute your work, then you'll need to sign a [corporate CLA](https://code.google.com/legal/corporate-cla-v1.0.html). + +Follow either of the two links above to access the appropriate CLA and instructions for how to sign and return it. Once we receive it, we'll be able to accept your pull requests. + + + +### ๐ŸŒŒ Copyright of Blizzard Resources + +Translation data used in this project file is copyrighted by Blizzard Entertainment. By default, Blizzard Entertainment's resources cannot be used as MIT Licensed. Only source code can be used with MIT Licensed. + + + +### โŒ›๏ธ Contribution process + +> All contributions are made through the Pull Request feature in Github. + +1. Please clone the project. +2. Modify the cloned project with the contents you want to PR. +3. Create a Pull Request after working on the contents you want to modify. +4. When a Pull Request is created, cla-bot validates whether the contributor has signed the CLA. If you have not signed the cla, the full request will not be merged until you sign the cla. +5. A contributors with the Modify privilege in Repo will review PR(Pull Request). The review may take some time. +6. TODO ( *~~Please enter 'npm run domain:pr' after completing the modification. Only generate PR when message that PR is possible is output. (If you receive any message of recommendation for modification, please modify the contents according to the recommendation.)~~* ) + + + +## ๐Ÿ“ญ Contributable Part + +> Lists the contributionable parts of a project. + + + +### ![D.VA ENGINE HAS A MULTILINGUAL SUPPORT SYSTEM IMAGE](https://i.imgur.com/sjaHn8i.png) + +### โœ… Language (bin/core/language) + +> The main project contributor cannot read languages other than English and Korean. It means that no other language can be supported by Engine without the help of other contributors. + +[Go to read the Language/README.md file](https://github.com/hmmhmmhm/dva-engine/tree/master/bin/core/language) + + + +### โœ… Blizzard Patch + +> Project main contributor are referring to the Blizzard Update List at [https://blizztrack.com/patch_notes/overwatch_ptr](https://blizztrack.com/patch_notes/overwatch_ptr). If a new function or event has been added to the workshop from these pages, please use the command below to create a Commit name and PR as shown in `Blizzard Patch `. + +#### ๐Ÿ“” Update & Lab + +> This folder contains the automation scripts that are available when new functions or events are added to the Overwatch Workshop. + +- `npm run maintain:event` + + - Add a new event. + +- `npm run maintain:value` + + - Add a new value. + +- `npm run maintain:action` + + - Add a new action. + +- `npm run language:extract` + + - A command script that runs when the `npm run language:extractor` command is entered. In the folder `bin/release`, all comments written in the interface file of a specific language that has already been created are extracted in JSON format, and all interface comments are extracted from the interface file that has been replaced by the language code. These extracted files are extracted to the folder `/dist/_extracted`. + +- `npm run maintain:run` + + - For developers who modify the ttypescript transpiler code, recreate the release folder and proceed with the workshop file generation. + + + +### โœ… Transpiler (bin/core/transpiler) + +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +#### ๐Ÿ’ฌAbout Typescript Transpiler + +> DVA engine has provides a better user experience through transfile by Ttypescript. + +- The Transform folder contains Transpiler scripts that bind typescript grammar to an overwatch workshop so that it does not differ language grammatically from typescript when writing an overwatch workshop code. +- It includes the redefining of operators by AST parser in Ttypescript, grammatical modification, and automatic reference to scripts. + +[Go to read the Transform/README.md file](https://github.com/hmmhmmhm/dva-engine/tree/master/bin/core/transform) + + + +### โœ… Generator (bin/core/generator) + +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +#### ๐Ÿ’ฌAbout Typescript Generator + +> D.va engine's Typescript Generator is a key system that analyzes the workshop code created by the interface and automatically generates functions, classes, namespaces, and more. (D.va engine can provide a multi-lingual interface environment due to the Generator.) + +[Go to read the Transform/README.md file](https://github.com/hmmhmmhm/dva-engine/tree/master/bin/core/transform) \ No newline at end of file diff --git a/packages/mugunghwa/LICENSE b/LICENSE similarity index 100% rename from packages/mugunghwa/LICENSE rename to LICENSE diff --git a/README.md b/README.md index 4276b94..f71d0e9 100644 --- a/README.md +++ b/README.md @@ -1,56 +1,525 @@ -# Node Packages -[![Wiki](https://img.shields.io/badge/๐Ÿ“–_Wiki-deepwiki-blue)](https://deepwiki.com/hmmhmmhm/node-packages) -Personal research packages by hmmhmmhm - A collection of useful TypeScript/JavaScript libraries exploring various programming concepts. +![FREE HONG KONG](https://i.imgur.com/KLvAahh.png) -## ๐Ÿ“ฆ Packages +## ๐ŸŒ‚ BOYCOTT BLIZZARD -### [biggest](./packages/biggest) -Tiny 2kb, zero deps, infinite precision library for safe and precise arithmetic operations on Big Integer and Big Decimal. +> From Republic of Korea to Hong Kong -[![Biggest](https://hmart.app/en/biggest/og.png)](https://hmart.app/biggest) +The D.Va Engine was developed by Korean. And we're 100% on Hong Kong's side. We are aware of the recent issue. Hong Kong gamers have shown their love for their country in interviews since the end of the tournament. -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/biggest)** +Of course, We can understand Blizzard's position to remain politically neutral on the issue. However, Blizzard not only suspended the player's qualifications, but also reduced the prize money to zero, and then removed all that game match videos from the Internet. Does it make sense that the player will forfeit the prize money for suspension because of the actions he made in the post-game interview? -### [pseudo-shuffle](./packages/pseudo-shuffle) -Make the index look like it is shuffled according to the range without actual shuffling - deterministic pseudo-random shuffling. +Blizzard can of course punish the competition player. However, given the usual level of fines, Blizzard's consistency in action should have been a light fine. Even the one who posted the notice on Blizzard Reddit was a user who had mocked the Hong Kong protests. -[![Pseudo Shuffle](https://hmart.app/en/pseudo-shuffle/og.png)](https://hmart.app/pseudo-shuffle) +Consideration of Chinese people should be as same as that of Hong Kongers. Should have been as careful, and heedful in disciplinary proceedings, Blizzard was afraid of China and chose to keep Hong Kongโ€™s mouth shut. -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/pseudo-shuffle)** +๐Ÿ’ฌ **Democratic** Senator Ron Wyden said: -### [edge-crypto](./packages/edge-crypto) -Unified SubtleCrypto utilities for Node.js, browsers, and Cloudflare Workers without external dependencies. +``` +โ€œBlizzard shows it is willing to humiliate itself to please the Chinese Communist Party,โ€ Sen. Ron Wyden (D-OR) +``` -[![Edge Crypto](https://hmart.app/en/edge-crypto/og.png)](https://hmart.app/edge-crypto) +๐Ÿ’ฌ **Republican** Senator Marco Rubio said: -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/edge-crypto)** +``` +โ€œRecognize whatโ€™s happening here. People who donโ€™t live in China must either self censor or face dismissal & suspensions,โ€ Sen. Marco Rubio (R-FL) +``` -### [gauss-spiral](./packages/gauss-spiral) -Fill a circle with dots from the center out โ€” efficiently compute `(x, y) โ†” n` mapping for spiral enumeration. +Isn't Blizzard a company that values political correctness? Is this right as an American company? Blizzard had the opportunity to defend his players and democracy, but they did not. So it's time for gamers and custom game developers to tell Hong Kong instead of Blizzard. -[![Gauss Spiral](https://hmart.app/en/gauss-spiral/og.png)](https://hmart.app/gauss-spiral) +Hong Kong is a totally different country from China, and it needs to be protected as a democratic country. many people will not be silent and all society's eyes are in Hong Kong. D.Va engine developers pray for Hong Kong's freedom. -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/gauss-spiral)** -### [mugunghwa](./packages/mugunghwa) -ํ•œ๊ธ€ ๊ธฐ๋ฐ˜ 72์ง„๋ฒ• ์ธ์ฝ”๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - Korean Hangul-based base-72 encoding library with profanity filtering. -[![Mugunghwa](https://hmart.app/en/mugunghwa/og.png)](https://hmart.app/mugunghwa) +![D.VA Engine Logo of Pink](https://i.imgur.com/mDreImI.png) -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/mugunghwa)** -### [curse-script](./packages/curse-script) -A JavaScript obfuscator that converts code into cursed spell-like syntax. -[![Curse Script](https://hmart.app/en/curse-script/og.png)](https://hmart.app/curse-script) +# ๐ŸŒˆ D.VA Engine -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/curse-script)** +๐ŸŒบ Advanced Script Engine for Overwatch Workshop -### [patternly](./packages/patternly) -Regular Expression Data Grabber - Simplifies parsing string patterns using regular expressions. +> - Overwatch Workshop Ruleset with Typescript (+JavaScript) -## License -MIT + +![D.VA Engine Logo of Blue](https://i.imgur.com/pjbtlQF.png) + +> **DVA-ENGINE**: Transfiler engine for advanced developers. + + + +## ๐Ÿ’ฌ Why? + +Recently, under the name of Workshop in Overwatch, a custom game mode has been created where users can program game rules. Workshop can be developed by setting up Event and Condition and Action in Rule. + +But the ruleset of an overwatch workshop can be modified by default only within the game. for this reason, IDE with many functions is not available. (This is certainly not good news for modern developers.) + +## ๐Ÿ’ญ How? + +That is why the **D.VA Engine** (Before name: **overwatch-workshop-javascript**) is being developed. Overwatch's workshop code is saved as an extension file called `.ows`, and the editor code can be extracted or inserted through copy and paste from the editor. The goal is to redefine the code of these existing `.ows` files as typescript interface and run them on the web editor. + + + +![Why Do I Use this Image](https://i.imgur.com/bvYaVgw.png) + +> D.Va Engine has been written of 100% Typescript! + + + +## ๐Ÿ’ก What? + +We purposed to make it possible to obtain the overwatch workshop code through typed or javascript coding on the web. This process will be provide automatic completion or exposure to interface descriptions so that even those who do not know javascript can easily use the basic grammar with a little knowledge. + + + +![Play now! In Online Browser! Image](https://i.imgur.com/DAoSu2i.png) + +> D.Va engine can be used directly on the web browser! + + + +## ๐ŸŒ In Browser + +> It's also available on mobile through the latest Chrome app. + +[NOW YOU CAN ENTER HERE](https://codesandbox.io/s/github/hmmhmmhm/dva-engine-codesandbox) + + + +## ๐Ÿ’ป In Local + +### ๐Ÿ“ฅ Prepare + +> To use the D.Va engine on a regular PC (Windows, Mac, Linux), the following SW's must be installed: + +1. [Node.JS](https://nodejs.org/en/) + + > Node.js is a language runtime system that operates JavaScript on a PC (without browser). Please complete the installation on the Node.JS website. (It is recommended that you receive the latest possible version.) + +2. [Git Bash](https://git-scm.com/download/win) + + > Some OS doesn't have Git (version management system) and Bash (standard UNIX command system) by default. Therefore, it is recommended to install Git-SCM. + +3. [Visual Studio Code (VSCode)](https://code.visualstudio.com/) + + > VSCode is an IDE(Integrated Development Environment) development tool that supports Typescripts. It is safe to use various development tools such as Atom and Bracket. (The main project contributor has recommends VSCode.) + +### ๐Ÿ“ฆ Download + +> Run Terminal or Git Bash to enter the following command in the folder where you want to download and install (it also can be done in VSCode): + +```bash +git clone https://github.com/hmmhmmhm/dva-engine +cd ./dva-engine +``` + +### ๐Ÿš€ Run + +> Enter the command below to run the engine. (It has be provide automatic install & initialize) +> +> (You do not need to pre-running commands such as `npm install`.) + +```bash +npm start +``` + +Everything is now done! It may take 1 to 2 minutes for the first run. (Engine is require time to download sub-modules and generate other source codes for the first time.) + + + +## ๐ŸŒŒ Automatic Update + +> When the D.Va Engine is Starting, it'll be automatically check that it available to update. You can choose whether to run the update with Y (Yes) or N (No). + +Many developers thought that they would be burdened with engine updates each time. So I implemented the built-in engine auto-update feature. (This update system uses This Github Repo data. So I don't have any network traffic pressure.) + + + +## ๐Ÿ‘ฉโ€๐Ÿ’ป API Usage + +![D.VA ENGINE PLUG-IN SECTION Image](https://i.imgur.com/dFB36ZM.png) + +### โ” How to Use + +> In this page, We'll describe the process of coding on the development tool (**VSCode**). + +> **The engine must be running before following the instructions below.** (Files that have been converted to a pastable format are saved as **'release/script.ts'**.) + +> If executed via the command 'npm start' the file **'release/script.ts'** is always recreated as soon as the code is saved. (Only at the beginning is slow, after which the conversion will require a speed of less than 1 second.) + + + +#### ๐Ÿ“œ Check `src/script.ts` + +When the engine is fully running, a file 'src/script.ts' is created. If you open the `src/script.ts' file, you can see the following source code: + +![Code Example](https://i.imgur.com/5scnR9C.png) + +#### ๐ŸŒ Choose Language + +If you look at the end of the second line, you can see that the name of the language is written. You can modify this section and choose which language to use. + +![Code Example](https://i.imgur.com/GCSTL6T.png) + + + +#### ๐Ÿ”Ž Check Hint + +> In VSCode, you can check the list of available functions automatically or you can check the description of the variable or function directly through a feature called Intellisense. + + + +##### โ” Mouse Hint + +When there is a function or variable that you don't know, you can find a description of the code by placing the mouse at that location. + +![Code Example](https://i.imgur.com/ycILP1Z.png) + + + +You can also see that the multi-lingual language description is well displayed. + +![Code Example](https://i.imgur.com/ujUGYSQ.png) + + + +##### โ” Dot Hint + +When you type dot(.) after entering any class or namespace, you can see the list of available functions. + +![Code Example](https://i.imgur.com/JxQGf2P.png) + + + +##### โ” Trigger Hint + +While typing a generic word, you can check the list of available variables through `Ctrl+Space` or `Ctrl+Alt+Space`. + +![Code Example](https://i.imgur.com/TAP3GjL.png) + + + +##### โ” Trigger Hint Setup Guide + +If entering `Ctrl+Space` or `Ctrl+Alt+Space` does not provide a hint, enter `Ctrl+K` and `Ctrk+S` and reset the hint shortcut by searching for `triggerSuggest`. + +![Editor Example](https://i.imgur.com/N5WVlv6.png) + + + +#### ๐Ÿ‘ฉโ€๐Ÿ’ป Advanced Parameter Intellisense + +> When using a workshop function, be sure to check which function is available in the parameters hints on the list. + +![Code Example](https://i.imgur.com/WScPfpO.png) + +The parameter classification name that you can enter at that location, such as `Type.*` is displayed as a hint. If you enter it the same way, you can see the list of functions available at that parameter. + +![Code Example](https://i.imgur.com/jqfiM1h.png) + +The sub-parameter is also fully described. + + + +#### ๐Ÿ‘ฉโ€๐Ÿ’ป Rule Coding Guide + +The Rule consists of a class. When you type like a `new Rule ({...})`, the information you need to enter is displayed. + +![Code Example](https://i.imgur.com/1bHHST9.png) + +- **description** + - Here you can enter a string description for the rule. + - We may not have to use the rule descriptions. Because We can remain code comments through `// BlaBla` or `/* BlaBla */` in our scripts. + - But if you write down the rule description here, it will be displayed on the In-Game Rule Editor. +- **event** + - All available events can be checked by entering `RuleEvent.` + - Since there can be multiple conditions for the execution of the rule, it must be entered within the array (like a `condition: [...]`) +- **condition** + - Indicates the conditions for the action of the rule to be executed. + - You can write conditional expression or reference the condition variable. + - Condition operator is must use one of the following: `==`, `!=`, `<`, `<=`, `>`, `>=`, `===` + - To view a list of conditional value functions, Type `Value.` + - It doesn't matter what form the conditional statement is entered, provided the above conditions are observed. (The engine will be converted to the workshop code, no matter how complicated the conditions may be.) + ![Code Example](https://i.imgur.com/OfNtdM6.png) + - The results for the above code are as follows. ![Code Example](https://i.imgur.com/gVt4fjI.png) +- **action** + - All available events can be checked by entering `Action.` + - Since there can be multiple action for the execution of the rule, it must be entered within the array (like a `action: [...]`) + + + +#### ๐Ÿ‘ฉโ€๐Ÿ’ป Categorized functions Guide + +![Code Example](https://i.imgur.com/z8MKM9s.png) + +> This is the most basic set of functions of the typescript workshop interface. + +- **RuleEvent** + - A collection of event functions that are used to create rules. +- **Value** + - A collection of function values that you can write to a conditional statement and some action functions when you create a rule. +- **Action** + - A collection of action functions that you can use to create rules. +- **Level** + - A collection of functions related to an overwatch game map. +- **Server** + - A collection of functions related to an overwatch workshop server. +- **Match** + - A collection of functions related to an overwatch workshop competition. +- **Util** + - A collection of utility functions that can be used to develop an overwatch workshop. +- **Type** + - Classified collection of functions that can be used as parameter values when calling all workshop functions. +- **Classes** + - A collection of functions classified according to the parameters of an overwatch workshop. + + + +#### ๐Ÿ‘ฉโ€๐Ÿ’ป Class Types Guide + +![Code Example](https://i.imgur.com/m6HpeCr.png) + +> A collection of functions classified according to the parameters of an overwatch workshop. + +- **Rule** + - Rule class for overwatch workshop rules. +- **Player** + - ![Code Example](https://i.imgur.com/feyOKRo.png) + - If you give the Player a value when you create a class, it shows the available functions associated with that game player and automatically binds the player at the same time. (You don't have to pass the player as a parameter each time you use a player-related function.) +- **Event** + - ![Code Example](https://i.imgur.com/w3tUkGr.png) + - A class that provides function related to an event in static function. There is currently no function directly related to the event, so there is no function as a class instance that binds parameters. +- **Entity** + - ![Example Code](https://i.imgur.com/7rGd3MM.png) + - Class that binds functions associated with an entity (the current entity-related function is very small and is not practical) +- **Team** + - ![Code Example](https://i.imgur.com/xsKZLzV.png) + - A class that binds functions related to a team. +- **Vector** + - ![Code Example](https://i.imgur.com/m8h8reP.png) + - A class that binds functions related to a vector. + + + +#### ๐Ÿ‘ฉโ€๐Ÿ’ป Data Types Guide + +![Code Example](https://i.imgur.com/i5sr4vE.png) + +> Overwatch Workshop functions classified for use as the default data type. + +- **Bool** + - A collection of functions that return values for an bool type. +- **Number** + - A collection of functions that return values for an number type. +- **Array** + - A collection of functions that return values for an array type. + - **TODO**: Binding support for typescript grammar of array is not yet available. +- **String** + - A collection of functions that return values for an string type. + + + +#### ๐Ÿ‘ฉโ€๐Ÿ’ป Number Coding Guide + +Any function that returns a numeric value or a numeric value can be computed using the operator of an existing typescript. (It fully functional!) + +##### Before Transpile + +![Code Example](https://i.imgur.com/byQN3TA.png) + +##### After Transpile + +![](https://i.imgur.com/PswHbry.png) + + + +#### ๐Ÿ‘ฉโ€๐Ÿ’ป Plug-In Guide + +> **TODO**: D.Va Engine is developing a plug-in system that allows other users to re-use user-generated rules. After downloading scripts like 'myRuleset.ts' through 'npm', we are developing a structure that can be distributed over the Internet to other users. + + + +##### Plug-in Template + +**TODO**: This feature is currently in the process of working. + + + +##### Naming convention + +The targets for which the engine binds typescript to workshop grammar are specific files with the following naming conventions: Files that do not conform to the naming conventions below will not bind to workshop grammar. + +> If you want to write a code that is not relevant to the Overwatch Workshop, it must be written in a separate file that is not included in the naming convention below. + +- script.ts +- script_`*`.ts +- @`*`.ts + + + +### โ” How to Apply + +> Procedure for applying the conversion result of the engine code to the overwatch workshop is as follows. + + + +![](https://i.imgur.com/vpCAw92.png) + +Copy the contents of the 'release/script.ows' file. + + + +![](https://i.imgur.com/01TrS8V.png) + +Enter the `GAME BROWSER` from the game play. + + + +![](https://i.imgur.com/BJ3Yvol.png) + +Click the `CREATE` button. + + + +![](https://i.imgur.com/iRDAVeg.png) + +Click the `WORKSHOP` button. + + + +![](https://i.imgur.com/Omtg6m7.png) + +If you don't have any set rules, create a rule with the `+` button. + + + +![](https://i.imgur.com/xdv2PfM.png) + +Click the `SELECT ALL` button. + + + +![](https://i.imgur.com/lt9Cola.png) + +Click the `PASTE RULE` button. (If the Paste button does not appear, please copy the contents of the 'release/script.ows' file once more.) + + + +### ๐Ÿ“” Command List + +#### ๐Ÿ“” User Commands + +> The following commands are the most basic user commands. + +- `npm start` (or `npm run start`) + - A command that can run the engine. The engine may take about a minute to start, and after it runs, it automatically converts the overwatch workshop files in less than a second whenever the file changes. +- `npm run build` + - A command to convert to a workshop file without running the engine. It takes less than 7 seconds. +- `npm run build:fast` + - A command to perform a workshop file conversion without a module inspection and Github update check. It takes less than 4 seconds + + + +#### ๐Ÿ“” Core Commands + +> The commands below are for developers developing the inside of the engine. + +- `npm run lint` + - A command to modify the indent of project files according to the project creation rules. +- `npm run clean` + - This command deletes the dist folder and the release folder in the project. It is good to use if the core build is incorrect or if there is a problem. +- `npm run generate` + - This command creates the `bin/release` folder for the engine. If the `bin/release` folder already exists, delete it and recreate it from the beginning. + + + +#### ๐Ÿ“” Maintain Commands + +> Script commands for developers who maintain inside the engine. + +##### ๐Ÿ“” Fix & Correction + +> A command that can be modified if the function name of the overwatch workshop has been changed or is incorrectly recorded on the engine. + +- `npm run maintain:rename` + - Replace a function name. + +##### ๐Ÿ“” Update & Lab + +> This folder contains the automation scripts that are available when new functions or events are added to the Overwatch Workshop. + +- `npm run maintain:event` + - Add a new event. +- `npm run maintain:value` + - Add a new value. +- `npm run maintain:action` + - Add a new action. +- `npm run language:extract` + - A command script that runs when the `npm run language:extractor` command is entered. In the folder `bin/release`, all comments written in the interface file of a specific language that has already been created are extracted in JSON format, and all interface comments are extracted from the interface file that has been replaced by the language code. These extracted files are extracted to the folder `/dist/_extracted`. + +- `npm run maintain:run` + - For developers who modify the ttypescript transpiler code, recreate the release folder and proceed with the workshop file generation. + + + +#### ๐Ÿ“” Module Commands + +> The commands below are reused within the command. + +- `npm run install` + - This command generates an effect similar to `npm install`. If there are no modules to install, the command will be completed immediately. +- `npm run update` + - A command that generates an effect similar to `git pull`. If there is no update, the command will be completed immediately. + - If you have files created separately in a folder other than the `src/*` folder and the `node_modules/*` folder, they will all be deleted. +- `npm run generate:silent` + - This command generates an effect similar to `npm run generate`. If there is no update, the command will be completed. +- `npm run ttsc` + - A command that proceeds with the ttypescript conversion of all project files. + + + +## ๐ŸŒ Multilingual Support + +![D.VA ENGINE HAS A MULTILINGUAL Image](https://i.imgur.com/sjaHn8i.png) + +## โœ… Please make a contribution to the translation work. + +> The main project contributor cannot read languages other than English and Korean. It means that no other language can be supported by Engine without the help of other contributors. + +[Go to read the Language/README.md file](https://github.com/hmmhmmhm/dva-engine/tree/master/bin/core/language) + + + +## ๐Ÿ“ฎ Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) + + + +## ๐ŸŽฏ TODO + +- [x] Typescript binding of all overwatch workshop function structures +- [x] Copy all function statements & Multilingual Support System for Interface File Comments (English and Korean) +- [x] Githeub Repo-Based Engine Automatic Update System +- [x] TypeScript Grammar Binding for Event Conditional Statement +- [x] TypeScript Grammar Binding for Numeric Value Operators +- [x] Quickly apply hot module Replacements (HMRs) based on dynamic compilation +- [ ] Support direct use of Rule condition without condition statement of function with return value boolean +- [ ] Support for redefining Typescript sequencing grammar +- [ ] Ruleless System - Implicit rule generation via if statement (default to onGoingGlobal when event designation is not present) +- [ ] Additional documentation of internal structure APIs +- [ ] Method chaining - returns the Reaper class instance by default without the user creating the Reformer class each time + + + +## โœ… License + +> Translation data is owned by Blizzard (Only source code is guaranteed MIT License). + +MIT Licensed. \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 034e848..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,21 +0,0 @@ -# Security Policy - -## Supported Versions - -Use this section to tell people about which versions of your project are -currently being supported with security updates. - -| Version | Supported | -| ------- | ------------------ | -| 5.1.x | :white_check_mark: | -| 5.0.x | :x: | -| 4.0.x | :white_check_mark: | -| < 4.0 | :x: | - -## Reporting a Vulnerability - -Use this section to tell people how to report a vulnerability. - -Tell them where to go, how often they can expect to get an update on a -reported vulnerability, what to expect if the vulnerability is accepted or -declined, etc. diff --git a/bin/README.md b/bin/README.md new file mode 100644 index 0000000..df9a7a0 --- /dev/null +++ b/bin/README.md @@ -0,0 +1,29 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ‡ Structure + +> The Bin folder contains the following folders: + + + +### โœ๏ธ Core [bin/core] + +The Core folder stores all of the engine's sources. + + + +### ๐Ÿ“” Release [bin/release] + +> This folder is not enclosed on Github. Enclosed only to the released compressed file; if this folder is not present, it will be automatically created when the engine is running. + +The Release folder contains translated versions of the Core folder's interfaces translated into each country's language. If the Release folder does not exist when the engine is first run, the engine automatically creates it. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/README.md b/bin/core/README.md new file mode 100644 index 0000000..4f3bcea --- /dev/null +++ b/bin/core/README.md @@ -0,0 +1,45 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ‡ Structure + +> The Core folder contains the following folders: + + + +### ๐Ÿš€ Engine [bin/core/engine] + +- Engine folder contains source codes that contains the grammar of the Overwatch Workshop into a typescript interface. The implementations of the interface are not stored and are automatically generated during engine run by the codes in the generator folder.) + +### ๐Ÿญ Generator [bin/core/generator] + +- Generator folder contains generate scripts that automatically generate the implementations of the interfaces in the Engine folder while the engine is running. It also refers to all interface files in each country to create translations for each language in each country. + + + +![](https://i.imgur.com/sjaHn8i.png) + +### ๐ŸŒ Language [bin/core/language] + +- The Language folder contains translated data and several scripts that can help for create the translation. +- There are automated i18n language management scripts, such as reading comments from type-script interface files, storing comments separately as JSON, and assigning sequence numbers to existing interface annotations like {301} + +### ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Maintain [bin/core/maintain] + +- The Maintain folder contains maintenance scripts for this project. +- For example, when a new update is released in the Overwatch Workshop, and a new action function, a Value function, or an event is introduced, there is a script that automatically creates an interface file with only the input of the command. + +### โœ‚๏ธ Transform [bin/core/transform] + +- The Transform folder contains Transpiler scripts that bind typescript grammar to an overwatch workshop so that it does not differ language grammatically from typescript when writing an overwatch workshop code. + +- It includes the redefining of operators by AST parser in Ttypescript, grammatical modification, and automatic reference to scripts. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/engine/README.md b/bin/core/engine/README.md new file mode 100644 index 0000000..4315938 --- /dev/null +++ b/bin/core/engine/README.md @@ -0,0 +1,35 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ‡ Structure + +> The Engine folder contains the following folders: + + + +### ๐Ÿ“œ Interface [bin/core/engine/interface] + +- The most primitive interface code that describes the function structure of an overwatch workshop as typescript. Action, Event, Value. Code Comments are all contained in a separate language file in the JSON file, which is replaced by an index number. + +### ๐Ÿ“ฆ Reformer [bin/core/engine/reformer] + +- **index.ts** - A script that binds workshop functions into classes. It based on the parameter type of the Overwatch Workshop function, the functions that require the same factors are grouped into classes. Only namespace exists in this index.ts, and the implementations of namespace exist separately in the `child/` folder. An implementer that is placed in the folder `child/` is created by the reformer.ts file on the generator folder. +- **compiler.ts** - This script contains functions to be used by transpiler during grammar change. +- **rule.ts** - A script that defines the Rule, which is the top-level specification of an overwatch workshop. The original code converted into a workshop code is contained within the class within this Rule Script. + +### ๐Ÿ“ Resolver [bin/core/engine/resolver] + +- index.ts - A script that binds workshop functions into namespaces. To be precise, the functions that require the same parameters based on the parameters of the Overwatch Workshop function are grouped into namespaces. Only namespace exists in this index.ts, and the implementations of namespace exist separately in the `child/` folder. An implementer that is placed in the folder `child/` is created by the reformer.ts file on the generator folder. + +### ๐Ÿ“ Type [bin/core/engine/type] + +- A bundle of functions that can be used as a type of parameter value in an overwatch workshop function. depending on the parameter type, the functions are grouped together by the typescript type. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/engine/index.ts b/bin/core/engine/index.ts new file mode 100644 index 0000000..e34b7a5 --- /dev/null +++ b/bin/core/engine/index.ts @@ -0,0 +1,3 @@ +import * as Classes from './reformer' +export { Classes } +export * from './resolver' \ No newline at end of file diff --git a/bin/core/engine/interface/README.md b/bin/core/engine/interface/README.md new file mode 100644 index 0000000..aa1fdcf --- /dev/null +++ b/bin/core/engine/interface/README.md @@ -0,0 +1,49 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## โš ๏ธ Warning + +> These interface files relate to the most primitive overwatch workshop function structure. + +- Modifying the interface directly to add a new function is not recommended. See **CONTRIBUTING.md** for instructions on how to add a function. (There is a maintenance script execution method for adding a function.) + + + +## โœ… Exact timing of modification + +- When a function has been added through a maintenance script, a direct interface modification must be performed if a specific interface file is prompted to be modified. +- If an error message is output stating that a particular interface has a problem while the engine is running, the interface file must be modified. +- For issues that cannot be handled through maintenance scripts, direct interface modifications should be made. + + + +## ๐Ÿ‡ Structure + +> The Generator folder contains the following files: + + + +### ๐Ÿ“ƒ Event [bin/core/engine/interface/event] + +- Includes event interfaces for an overwatch workshop. + + + +### ๐Ÿ“ƒ Action [bin/core/engine/interface/action] + +- Includes action interfaces for an overwatch workshop. + + + +### ๐Ÿ“ƒ Value [bin/core/engine/interface/value] + +- Includes value interfaces for an overwatch workshop. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/engine/interface/action/action.ts b/bin/core/engine/interface/action/action.ts new file mode 100644 index 0000000..3e71b62 --- /dev/null +++ b/bin/core/engine/interface/action/action.ts @@ -0,0 +1,808 @@ +import { + IAbort, + IAbortIf, + IAbortIfConditionsIsFalse, + IAbortIfConditionsIsTrue, + IAllowButton, + IApplyImpluse, + IBigMessage, + IChaseGlobalVariableAtRate, + IChaseGlobalVariableOverTime, + IChasePlayerVariableAtRate, + IChasePlayerVariableOverTime, + IClearStatus, + ICommunicate, + ICreateEffect, + ICreateHudText, + ICreateIcon, + ICreateInWorldText, + IDamage, + IDeclareMatchDraw, + IDeclarePlayerVictory, + IDeclareRoundVictory, + IDeclareTeamVictory, + IDestroyAllEffects, + IDestroyAllHudText, + IDestroyAllIcons, + IDestroyAllInWorldText, + IDestroyEffect, + IDestroyHudText, + IDestroyIcon, + IDestroyInWorldText, + IDisableBuiltInGameModeAnnouncer, + IDisableBuiltInGameModeCompletion, + IDisableBuiltInGameModeMusic, + IDisableBuiltInGameModeRespawning, + IDisableBuiltInGameModeScoring, + IDisableDeathSpectateAllPlayers, + IDisableDeathSpectateTargetHud, + IDisallowButton, + IEnableBuiltInGameModeAnnouncer, + IEnableBuiltInGameModeCompletion, + IEnableBuiltInGameModeMusic, + IEnableBuiltInGameModeRespawning, + IEnableBuiltInGameModeScoring, + IEnableDeathSpectateAllPlayers, + IEnableDeathSpectateTargetHud, + IGoToAssembleHeroes, + IHeal, + IKill, + ILoop, + ILoopIf, + ILoopIfConditionIsFalse, + ILoopIfConditionIsTrue, + IModifyGlobalVariable, + IModifyGlobalVariableAtIndex, + IModifyPlayerScore, + IModifyPlayerVariable, + IModifyPlayerVariableAtIndex, + IModifyTeamScore, + IPauseMatchTime, + IPlayEffect, + IPreloadHero, + IPressButton, + IResetPlayerHeroAvailability, + IRespawn, + IResurrect, + ISetAbility1Enabled, + ISetAbility2Enabled, + ISetAimSpeed, + ISetDamageDealt, + ISetDamageReceived, + ISetFacing, + ISetGlobalVariable, + ISetGlobalVariableAtIndex, + ISetGravity, + ISetHealingDealt, + ISetHealingReceived, + ISetInvisible, + ISetMatchTime, + ISetMaxHealth, + ISetMoveSpeed, + ISetObjectiveDescription, + ISetPlayerAllowedHeroes, + ISetPlayerVariable, + ISetPlayerVariableAtIndex, + ISetPrimaryFireEnabled, + ISetProjectileGravity, + ISetProjectileSpeed, + ISetRespawnMaxTime, + ISetSecondaryFireEnabled, + ISetSlowMotion, + ISetStatus, + ISetTeamScore, + ISetUltimateAbilityEnabled, + ISetUltimateCharge, + ISkip, + ISkipIf, + ISmallMessage, + IStartAccelerating, + IStartCamera, + IStartDamageModification, + IStartDamageOverTime, + IStartFacing, + IStartForcingPlayerToBeHero, + IStartForcingSpawnRoom, + IStartForcingThrottle, + IStartHealOverTime, + IStartHoldingButton, + IStopAccelerating, + IStopAllDamageModifications, + IStopAllDamageOverTime, + IStopAllHealOverTime, + IStopCamera, + IStopChasingGlobalVariable, + IStopChasingPlayerVariable, + IStopDamageModification, + IStopDamageOverTime, + IStopFacing, + IStopForcingPlayerToBeHero, + IStopForcingSpawnRoom, + IStopForcingThrottle, + IStopHealOverTime, + IStopHoldingButton, + ITeleport, + IUnpauseMatchTime, + IWait, + IStartTransformingThrottle, + IStopTransformingThrottle, + ICreateDummyBot, + IDestroyDummyBot, + IDestroyAllDummyBot, + IStartThrottleInDirection, + IStopThrottleInDirection, + ICreateBeamEffect, +} from './child' +import { ISetPlayerScore } from './child/setPlayerScore' + +export interface IAction { + /** + * {0} + */ + abort: IAbort + + /** + * {1} + */ + abortIf: IAbortIf + + /** + * {2} + */ + abortIfConditionsIsFalse: IAbortIfConditionsIsFalse + + /** + * {3} + */ + abortIfConditionsIsTrue: IAbortIfConditionsIsTrue + + /** + * {4} + */ + allowButton: IAllowButton + + /** + * {5} + */ + applyImpluse: IApplyImpluse + + /** + * {6} + */ + bigMessage: IBigMessage + + /** + * {7} + */ + chaseGlobalVariableAtRate: IChaseGlobalVariableAtRate + + /** + * {8} + */ + chaseGlobalVariableOverTime: IChaseGlobalVariableOverTime + + /** + * {9} + */ + chasePlayerVariableAtRate: IChasePlayerVariableAtRate + + /** + * {10} + */ + chasePlayerVariableOverTime: IChasePlayerVariableOverTime + + /** + * {11} + */ + clearStatus: IClearStatus + + /** + * {12} + */ + communicate: ICommunicate + + /** + * {13} + */ + createEffect: ICreateEffect + + /** + * {14} + */ + createHudText: ICreateHudText + + /** + * {15} + */ + createIcon: ICreateIcon + + /** + * {16} + */ + createInWorldText: ICreateInWorldText + + /** + * {17} + */ + damage: IDamage + + /** + * {18} + */ + declareMatchDraw: IDeclareMatchDraw + + /** + * {19} + */ + declarePlayerVictory: IDeclarePlayerVictory + + /** + * {20} + */ + declareRoundVictory: IDeclareRoundVictory + + /** + * {21} + */ + declareTeamVictory: IDeclareTeamVictory + + /** + * {22} + */ + destroyAllEffects: IDestroyAllEffects + + /** + * {23} + */ + destroyAllHudText: IDestroyAllHudText + + /** + * {24} + */ + destroyAllIcons: IDestroyAllIcons + + /** + * {25} + */ + destroyAllInWorldText: IDestroyAllInWorldText + + /** + * {26} + */ + destroyEffect: IDestroyEffect + + /** + * {27} + */ + destroyHudText: IDestroyHudText + + /** + * {28} + */ + destroyIcon: IDestroyIcon + + /** + * {29} + */ + destroyInWorldText: IDestroyInWorldText + + /** + * {30} + */ + disableBuiltInGameModeAnnouncer: IDisableBuiltInGameModeAnnouncer + + /** + * {31} + */ + disableBuiltInGameModeCompletion: IDisableBuiltInGameModeCompletion + + /** + * {32} + */ + disableBuiltInGameModeMusic: IDisableBuiltInGameModeMusic + + /** + * {33} + */ + disableBuiltInGameModeRespawning: IDisableBuiltInGameModeRespawning + + /** + * {34} + */ + disableBuiltInGameModeScoring: IDisableBuiltInGameModeScoring + + /** + * {35} + */ + disableDeathSpectateAllPlayers: IDisableDeathSpectateAllPlayers + + /** + * {36} + */ + disableDeathSpectateTargetHud: IDisableDeathSpectateTargetHud + + /** + * {37} + */ + disallowButton: IDisallowButton + + /** + * {38} + */ + enableBuiltInGameModeAnnouncer: IEnableBuiltInGameModeAnnouncer + + /** + * {39} + */ + enableBuiltInGameModeCompletion: IEnableBuiltInGameModeCompletion + + /** + * {40} + */ + enableBuiltInGameModeMusic: IEnableBuiltInGameModeMusic + + /** + * {41} + */ + enableBuiltInGameModeRespawning: IEnableBuiltInGameModeRespawning + + /** + * {42} + */ + enableBuiltInGameModeScoring: IEnableBuiltInGameModeScoring + + /** + * {43} + */ + enableDeathSpectateAllPlayers: IEnableDeathSpectateAllPlayers + + /** + * {44} + */ + enableDeathSpectateTargetHud: IEnableDeathSpectateTargetHud + + /** + * {45} + */ + goToAssembleHeroes: IGoToAssembleHeroes + + /** + * {46} + */ + heal: IHeal + + /** + * {47} + */ + kill: IKill + + /** + * {48} + */ + loop: ILoop + + /** + * {49} + */ + loopIf: ILoopIf + + /** + * {50} + */ + loopIfConditionIsFalse: ILoopIfConditionIsFalse + + /** + * {51} + */ + loopIfConditionIsTrue: ILoopIfConditionIsTrue + + /** + * {52} + */ + modifyGlobalVariable: IModifyGlobalVariable + + /** + * {53} + */ + modifyGlobalVariableAtIndex: IModifyGlobalVariableAtIndex + + /** + * {54} + */ + modifyPlayerScore: IModifyPlayerScore + + /** + * {55} + */ + modifyPlayerVariable: IModifyPlayerVariable + + /** + * {56} + */ + modifyPlayerVariableAtIndex: IModifyPlayerVariableAtIndex + + /** + * {57} + */ + modifyTeamScore: IModifyTeamScore + + /** + * {58} + */ + pauseMatchTime: IPauseMatchTime + + /** + * {59} + */ + playEffect: IPlayEffect + + /** + * {60} + */ + preloadHero: IPreloadHero + + /** + * {61} + */ + pressButton: IPressButton + + /** + * {62} + */ + resetPlayerHeroAvailability: IResetPlayerHeroAvailability + + /** + * {63} + */ + respawn: IRespawn + + /** + * {64} + */ + resurrect: IResurrect + + /** + * {65} + */ + setAbility1Enabled: ISetAbility1Enabled + + /** + * {66} + */ + setAbility2Enabled: ISetAbility2Enabled + + /** + * {67} + */ + setAimSpeed: ISetAimSpeed + + /** + * {68} + */ + setDamageDealt: ISetDamageDealt + + /** + * {69} + */ + setDamageReceived: ISetDamageReceived + + /** + * {70} + */ + setFacing: ISetFacing + + /** + * {71} + */ + setGlobalVariable: ISetGlobalVariable + + /** + * {72} + */ + setGlobalVariableAtIndex: ISetGlobalVariableAtIndex + + /** + * {73} + */ + setGravity: ISetGravity + + /** + * {74} + */ + setHealingDealt: ISetHealingDealt + + /** + * {75} + */ + setHealingReceived: ISetHealingReceived + + /** + * {76} + */ + setInvisible: ISetInvisible + + /** + * {77} + */ + setMatchTime: ISetMatchTime + + /** + * {78} + */ + setMaxHealth: ISetMaxHealth + + /** + * {79} + */ + setMoveSpeed: ISetMoveSpeed + + /** + * {80} + */ + setObjectiveDescription: ISetObjectiveDescription + + /** + * {81} + */ + setPlayerAllowedHeroes: ISetPlayerAllowedHeroes + + /** + * {82} + */ + setPlayerScore: ISetPlayerScore + + /** + * {83} + */ + setPlayerVariable: ISetPlayerVariable + + /** + * {84} + */ + setPlayerVariableAtIndex: ISetPlayerVariableAtIndex + + /** + * {85} + */ + setPrimaryFireEnabled: ISetPrimaryFireEnabled + + /** + * {86} + */ + setProjectileGravity: ISetProjectileGravity + + /** + * {87} + */ + setProjectileSpeed: ISetProjectileSpeed + + /** + * {88} + */ + setRespawnMaxTime: ISetRespawnMaxTime + + /** + * {89} + */ + setSecondaryFireEnabled: ISetSecondaryFireEnabled + + /** + * {90} + */ + setSlowMotion: ISetSlowMotion + + /** + * {91} + */ + setStatus: ISetStatus + + /** + * {92} + */ + setTeamScore: ISetTeamScore + + /** + * {93} + */ + setUltimateAbilityEnabled: ISetUltimateAbilityEnabled + + /** + * {94} + */ + setUltimateCharge: ISetUltimateCharge + + /** + * {95} + */ + skip: ISkip + + /** + * {96} + */ + skipIf: ISkipIf + + /** + * {97} + */ + smallMessage: ISmallMessage + + /** + * {98} + */ + startAccelerating: IStartAccelerating + + /** + * {99} + */ + startCamera: IStartCamera + + /** + * {100} + */ + startDamageModification: IStartDamageModification + + /** + * {101} + */ + startDamageOverTime: IStartDamageOverTime + + /** + * {102} + */ + startFacing: IStartFacing + + /** + * {103} + */ + startForcingPlayerToBeHero: IStartForcingPlayerToBeHero + + /** + * {104} + */ + startForcingSpawnRoom: IStartForcingSpawnRoom + + /** + * {105} + */ + startForcingThrottle: IStartForcingThrottle + + /** + * {106} + */ + startHealOverTime: IStartHealOverTime + + /** + * {107} + */ + startHoldingButton: IStartHoldingButton + + /** + * {108} + */ + stopAccelerating: IStopAccelerating + + /** + * {109} + */ + stopAllDamageModifications: IStopAllDamageModifications + + /** + * {110} + */ + stopAllDamageOverTime: IStopAllDamageOverTime + + /** + * {111} + */ + stopAllHealOverTime: IStopAllHealOverTime + + /** + * {112} + */ + stopCamera: IStopCamera + + /** + * {113} + */ + stopChasingGlobalVariable: IStopChasingGlobalVariable + + /** + * {114} + */ + stopChasingPlayerVariable: IStopChasingPlayerVariable + + /** + * {115} + */ + stopDamageModification: IStopDamageModification + + /** + * {116} + */ + stopDamageOverTime: IStopDamageOverTime + + /** + * {117} + */ + stopFacing: IStopFacing + + /** + * {118} + */ + stopForcingPlayerToBeHero: IStopForcingPlayerToBeHero + + /** + * {119} + */ + stopForcingSpawnRoom: IStopForcingSpawnRoom + + /** + * {120} + */ + stopForcingThrottle: IStopForcingThrottle + + /** + * {121} + */ + stopHealOverTime: IStopHealOverTime + + /** + * {122} + */ + stopHoldingButton: IStopHoldingButton + + /** + * {123} + */ + teleport: ITeleport + + /** + * {124} + */ + unpauseMatchTime: IUnpauseMatchTime + + /** + * {125} + */ + wait: IWait + + /** + * {717} + */ + startTransformingThrottle: IStartTransformingThrottle + + /** + * {722} + */ + stopTransformingThrottle: IStopTransformingThrottle + + /** + * {728} + */ + createDummyBot: ICreateDummyBot + + /** + * {734} + */ + destroyDummyBot: IDestroyDummyBot + + /** + * {737} + */ + destroyAllDummyBot: IDestroyAllDummyBot + + /** + * {738} + */ + startThrottleInDirection: IStartThrottleInDirection + + /** + * {745} + */ + stopThrottleInDirection: IStopThrottleInDirection + + /** + * {747} + */ + createBeamEffect: ICreateBeamEffect +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/abort.ts b/bin/core/engine/interface/action/child/abort.ts new file mode 100644 index 0000000..0de8d12 --- /dev/null +++ b/bin/core/engine/interface/action/child/abort.ts @@ -0,0 +1,4 @@ +/** + * {0} + */ +export interface IAbort {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/abortIf.ts b/bin/core/engine/interface/action/child/abortIf.ts new file mode 100644 index 0000000..0b41d8b --- /dev/null +++ b/bin/core/engine/interface/action/child/abortIf.ts @@ -0,0 +1,11 @@ +import { ValueBoolType } from '../../../type' + +/** + * {1} + */ +export interface IAbortIf { + /** + * {126} + */ + condition: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/abortIfConditionIsFalse.ts b/bin/core/engine/interface/action/child/abortIfConditionIsFalse.ts new file mode 100644 index 0000000..7ed35ed --- /dev/null +++ b/bin/core/engine/interface/action/child/abortIfConditionIsFalse.ts @@ -0,0 +1,4 @@ +/** + * {2} + */ +export interface IAbortIfConditionsIsFalse {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/abortIfConditionIsTrue.ts b/bin/core/engine/interface/action/child/abortIfConditionIsTrue.ts new file mode 100644 index 0000000..6d86463 --- /dev/null +++ b/bin/core/engine/interface/action/child/abortIfConditionIsTrue.ts @@ -0,0 +1,4 @@ +/** + * {3} + */ +export interface IAbortIfConditionsIsTrue {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/allowButton.ts b/bin/core/engine/interface/action/child/allowButton.ts new file mode 100644 index 0000000..ace4743 --- /dev/null +++ b/bin/core/engine/interface/action/child/allowButton.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + ValueButtonType, +} from '../../../type' + +/** + * {4} + */ +export interface IAllowButton { + /** + * {127} + */ + player: ValuePlayerType + /** + * {128} + */ + button: ValueButtonType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/applyImpluse.ts b/bin/core/engine/interface/action/child/applyImpluse.ts new file mode 100644 index 0000000..3ba2518 --- /dev/null +++ b/bin/core/engine/interface/action/child/applyImpluse.ts @@ -0,0 +1,27 @@ +import { ValuePlayerType, ValueVectorType, ValueNumberType, ValueRelativeType, ValueMotionType } from '../../../type' + +/** + * {5} + */ +export interface IApplyImpluse { + /** + * {129} + */ + player: ValuePlayerType + /** + * {130} + */ + direction: ValueVectorType + /** + * {131} + */ + speed: ValueNumberType + /** + * {132} + */ + relative: ValueRelativeType + /** + * {133} + */ + motion: ValueMotionType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/bigMessage.ts b/bin/core/engine/interface/action/child/bigMessage.ts new file mode 100644 index 0000000..bba1596 --- /dev/null +++ b/bin/core/engine/interface/action/child/bigMessage.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueStringType } from '../../../type' + +/** + * {6} + */ +export interface IBigMessage { + /** + * {134} + */ + visibleTo: ValuePlayerType + /** + * {135} + */ + header: ValueStringType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/chaseGlobalVariableAtRate.ts b/bin/core/engine/interface/action/child/chaseGlobalVariableAtRate.ts new file mode 100644 index 0000000..93e4f2f --- /dev/null +++ b/bin/core/engine/interface/action/child/chaseGlobalVariableAtRate.ts @@ -0,0 +1,28 @@ +import { + VariableType, + ValueDestinationParamType, + ValueNumberType, + ValueReevaluationType, +} from '../../../type' + +/** + * {7} + */ +export interface IChaseGlobalVariableAtRate { + /** + * {136} + */ + variable: VariableType + /** + * {137} + */ + destination: ValueDestinationParamType + /** + * {138} + */ + rate: ValueNumberType + /** + * {139} + */ + reevaluation: ValueReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/chaseGlobalVariableOverTime.ts b/bin/core/engine/interface/action/child/chaseGlobalVariableOverTime.ts new file mode 100644 index 0000000..021c80c --- /dev/null +++ b/bin/core/engine/interface/action/child/chaseGlobalVariableOverTime.ts @@ -0,0 +1,28 @@ +import { + VariableType, + ValueDestinationParamType, + ValueNumberType, + ValueReevaluationType, +} from '../../../type' + +/** + * {8} + */ +export interface IChaseGlobalVariableOverTime { + /** + * {136} + */ + variable: VariableType + /** + * {137} + */ + destination: ValueDestinationParamType + /** + * {140} + */ + duration: ValueNumberType + /** + * {139} + */ + reevaluation: ValueReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/chasePlayerVariableAtRate.ts b/bin/core/engine/interface/action/child/chasePlayerVariableAtRate.ts new file mode 100644 index 0000000..ffbffca --- /dev/null +++ b/bin/core/engine/interface/action/child/chasePlayerVariableAtRate.ts @@ -0,0 +1,33 @@ +import { + ValuePlayerType, + VariableType, + ValueDestinationParamType, + ValueNumberType, + ValueReevaluationType, +} from '../../../type' + +/** + * {9} + */ +export interface IChasePlayerVariableAtRate { + /** + * {141} + */ + player: ValuePlayerType + /** + * {142} + */ + variable: VariableType + /** + * {143} + */ + destination: ValueDestinationParamType + /** + * {138} + */ + rate: ValueNumberType + /** + * {139} + */ + reevaluation: ValueReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/chasePlayerVariableOverTime.ts b/bin/core/engine/interface/action/child/chasePlayerVariableOverTime.ts new file mode 100644 index 0000000..67b01d6 --- /dev/null +++ b/bin/core/engine/interface/action/child/chasePlayerVariableOverTime.ts @@ -0,0 +1,33 @@ +import { + ValuePlayerType, + VariableType, + ValueDestinationParamType, + ValueNumberType, + ValueReevaluationType, +} from '../../../type' + +/** + * {10} + */ +export interface IChasePlayerVariableOverTime { + /** + * {141} + */ + player: ValuePlayerType + /** + * {144} + */ + variable: VariableType + /** + * {143} + */ + destination: ValueDestinationParamType + /** + * {140} + */ + duration: ValueNumberType + /** + * {139} + */ + reevaluation: ValueReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/clearStatus.ts b/bin/core/engine/interface/action/child/clearStatus.ts new file mode 100644 index 0000000..5d66d38 --- /dev/null +++ b/bin/core/engine/interface/action/child/clearStatus.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueStatusType } from '../../../type' + +/** + * {11} + */ +export interface IClearStatus { + /** + * {145} + */ + player: ValuePlayerType + /** + * {146} + */ + status: ValueStatusType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/communicate.ts b/bin/core/engine/interface/action/child/communicate.ts new file mode 100644 index 0000000..c3be9a7 --- /dev/null +++ b/bin/core/engine/interface/action/child/communicate.ts @@ -0,0 +1,17 @@ +import { ValuePlayerType, + ValueCommunicationType, +} from '../../../type' + +/** + * {12} + */ +export interface ICommunicate { + /** + * {147} + */ + player: ValuePlayerType + /** + * {148} + */ + type: ValueCommunicationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/createBeamEffect.ts b/bin/core/engine/interface/action/child/createBeamEffect.ts new file mode 100644 index 0000000..21ecaa1 --- /dev/null +++ b/bin/core/engine/interface/action/child/createBeamEffect.ts @@ -0,0 +1,31 @@ +import { ValuePlayerType, ValueBeamType, ValueVectorType, ValueColorType, ValueBeamReevaluationType } from '../../../type' + +/** + * {747} + */ +export interface ICreateBeamEffect { + /** + * {748} + */ + visibleTo: ValuePlayerType + /** + * {749} + */ + beamType: ValueBeamType + /** + * {750} + */ + startPosition: ValueVectorType + /** + * {751} + */ + endPosition: ValueVectorType + /** + * {752} + */ + color: ValueColorType + /** + * {753} + */ + reevaluation: ValueBeamReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/createDummyBot.ts b/bin/core/engine/interface/action/child/createDummyBot.ts new file mode 100644 index 0000000..081bc82 --- /dev/null +++ b/bin/core/engine/interface/action/child/createDummyBot.ts @@ -0,0 +1,27 @@ +import { ValueHeroType, ValueTeamType, SlotRangeType, ValueVectorType } from '../../../type' + +/** + * {728} + */ +export interface ICreateDummyBot { + /** + * {729} + */ + hero: ValueHeroType + /** + * {730} + */ + team: ValueTeamType + /** + * {731} + */ + slot: SlotRangeType + /** + * {732} + */ + position: ValueVectorType + /** + * {733} + */ + facing: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/createEffect.ts b/bin/core/engine/interface/action/child/createEffect.ts new file mode 100644 index 0000000..36fe6f5 --- /dev/null +++ b/bin/core/engine/interface/action/child/createEffect.ts @@ -0,0 +1,38 @@ +import { + ValuePlayerType, + ValueEffectType, + ValueColorType, + ValueVectorType, + ValueNumberType, + ValueEffectReevaluationType, +} from '../../../type' + +/** + * {13} + */ +export interface ICreateEffect { + /** + * {149} + */ + visibleTo: ValuePlayerType + /** + * {150} + */ + type: ValueEffectType + /** + * {151} + */ + color: ValueColorType + /** + * {152} + */ + position: ValueVectorType + /** + * {153} + */ + radius: ValueNumberType + /** + * {139} + */ + reevaluation: ValueEffectReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/createHudText.ts b/bin/core/engine/interface/action/child/createHudText.ts new file mode 100644 index 0000000..7c886fc --- /dev/null +++ b/bin/core/engine/interface/action/child/createHudText.ts @@ -0,0 +1,60 @@ +import { + ValuePlayerType, + ValueColorType, + ValueNumberType, + ValueStringType, + ValueLocationType, + ValueHudTextReevaluationType, + ValueStringParamType, + ValueSpectatorsType, +} from '../../../type' + +/** + * {14} + */ +export interface ICreateHudText { + /** + * {154} + */ + visibleTo: ValuePlayerType + /** + * {155} + */ + header: ValueStringType + /** + * {156} + */ + subHeader: ValueStringParamType + /** + * {157} + */ + text: ValueStringParamType + /** + * {158} + */ + location: ValueLocationType + /** + * {159} + */ + sortOrder: ValueNumberType + /** + * {160} + */ + headerColor: ValueColorType + /** + * {161} + */ + subHeaderColor: ValueColorType + /** + * {162} + */ + textColor: ValueColorType + /** + * {139} + */ + reevaluation: ValueHudTextReevaluationType + /** + * {756} + */ + spectators: ValueSpectatorsType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/createIcon.ts b/bin/core/engine/interface/action/child/createIcon.ts new file mode 100644 index 0000000..1ba96e9 --- /dev/null +++ b/bin/core/engine/interface/action/child/createIcon.ts @@ -0,0 +1,43 @@ +import { + ValuePlayerType, + ValueVectorType, + ValueIconReevaluationType, + ValueIconType, + ValueColorType, + ValueBoolType, +} from '../../../type' + +/** + * {15} + */ +export interface ICreateIcon { + /** + * {163} + */ + visibleTo: ValuePlayerType + + /** + * {164} + */ + position: ValueVectorType + + /** + * {165} + */ + icon: ValueIconType + + /** + * {139} + */ + reevaluation: ValueIconReevaluationType + + /** + * {166} + */ + iconColor: ValueColorType + + /** + * {167} + */ + showWhenOffscreen: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/createInWorldText.ts b/bin/core/engine/interface/action/child/createInWorldText.ts new file mode 100644 index 0000000..5cdfd75 --- /dev/null +++ b/bin/core/engine/interface/action/child/createInWorldText.ts @@ -0,0 +1,48 @@ +import { + ValuePlayerType, + ValueNumberType, + ValueStringType, + ValueVectorType, + ValueInWorldTextReevaluationType, + ValueClippingType, + ValueSpectatorsType, + ValueColorType, +} from '../../../type' + +/** + * {16} + */ +export interface ICreateInWorldText { + /** + * {168} + */ + visibleTo: ValuePlayerType + /** + * {169} + */ + header: ValueStringType + /** + * {170} + */ + position: ValueVectorType + /** + * {171} + */ + scale: ValueNumberType + /** + * {172} + */ + clipping: ValueClippingType + /** + * {173} + */ + reevaluation: ValueInWorldTextReevaluationType + /** + * {757} + */ + textColor: ValueColorType + /** + * {756} + */ + spectators: ValueSpectatorsType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/damage.ts b/bin/core/engine/interface/action/child/damage.ts new file mode 100644 index 0000000..4be0745 --- /dev/null +++ b/bin/core/engine/interface/action/child/damage.ts @@ -0,0 +1,21 @@ +import { + ValuePlayerType, ValueNumberType, +} from '../../../type' + +/** + * {17} + */ +export interface IDamage { + /** + * {174} + */ + player: ValuePlayerType + /** + * {175} + */ + damager: ValuePlayerType + /** + * {176} + */ + amount: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/declareMatchDraw.ts b/bin/core/engine/interface/action/child/declareMatchDraw.ts new file mode 100644 index 0000000..29fe8e3 --- /dev/null +++ b/bin/core/engine/interface/action/child/declareMatchDraw.ts @@ -0,0 +1,4 @@ +/** + * {18} + */ +export interface IDeclareMatchDraw {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/declarePlayerVictory.ts b/bin/core/engine/interface/action/child/declarePlayerVictory.ts new file mode 100644 index 0000000..a0eadbf --- /dev/null +++ b/bin/core/engine/interface/action/child/declarePlayerVictory.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {19} + */ +export interface IDeclarePlayerVictory { + /** + * {177} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/declareRoundVictory.ts b/bin/core/engine/interface/action/child/declareRoundVictory.ts new file mode 100644 index 0000000..d2439f7 --- /dev/null +++ b/bin/core/engine/interface/action/child/declareRoundVictory.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {20} + */ +export interface IDeclareRoundVictory { + /** + * {178} + */ + roundWinningTeam: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/declareTeamVictory.ts b/bin/core/engine/interface/action/child/declareTeamVictory.ts new file mode 100644 index 0000000..4efea21 --- /dev/null +++ b/bin/core/engine/interface/action/child/declareTeamVictory.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {21} + */ +export interface IDeclareTeamVictory { + /** + * {179} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyAllDummyBot.ts b/bin/core/engine/interface/action/child/destroyAllDummyBot.ts new file mode 100644 index 0000000..67786d8 --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyAllDummyBot.ts @@ -0,0 +1,6 @@ +import { } from '../../../type' + +/** + * {737} + */ +export interface IDestroyAllDummyBot {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyAllEffects.ts b/bin/core/engine/interface/action/child/destroyAllEffects.ts new file mode 100644 index 0000000..3193b60 --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyAllEffects.ts @@ -0,0 +1,4 @@ +/** + * {22} + */ +export interface IDestroyAllEffects {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyAllHudText.ts b/bin/core/engine/interface/action/child/destroyAllHudText.ts new file mode 100644 index 0000000..ca33df2 --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyAllHudText.ts @@ -0,0 +1,4 @@ +/** + * {23} + */ +export interface IDestroyAllHudText {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyAllIcons.ts b/bin/core/engine/interface/action/child/destroyAllIcons.ts new file mode 100644 index 0000000..d463c5e --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyAllIcons.ts @@ -0,0 +1,4 @@ +/** + * {24} + */ +export interface IDestroyAllIcons {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyAllInWorldText.ts b/bin/core/engine/interface/action/child/destroyAllInWorldText.ts new file mode 100644 index 0000000..8088f22 --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyAllInWorldText.ts @@ -0,0 +1,4 @@ +/** + * {25} + */ +export interface IDestroyAllInWorldText {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyDummyBot.ts b/bin/core/engine/interface/action/child/destroyDummyBot.ts new file mode 100644 index 0000000..95be8c6 --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyDummyBot.ts @@ -0,0 +1,15 @@ +import { ValueTeamType, SlotRangeType } from '../../../type' + +/** + * {734} + */ +export interface IDestroyDummyBot { + /** + * {735} + */ + team: ValueTeamType + /** + * {736} + */ + slot: SlotRangeType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyEffect.ts b/bin/core/engine/interface/action/child/destroyEffect.ts new file mode 100644 index 0000000..1568aaa --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyEffect.ts @@ -0,0 +1,11 @@ +import { ValueEntityType } from '../../../type' + +/** + * {26} + */ +export interface IDestroyEffect { + /** + * {180} + */ + entity: ValueEntityType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyHudText.ts b/bin/core/engine/interface/action/child/destroyHudText.ts new file mode 100644 index 0000000..1a13df8 --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyHudText.ts @@ -0,0 +1,11 @@ +import { ValueTextId } from '../../../type' + +/** + * {27} + */ +export interface IDestroyHudText { + /** + * {181} + */ + textId: ValueTextId +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyIcon.ts b/bin/core/engine/interface/action/child/destroyIcon.ts new file mode 100644 index 0000000..fa5fc1f --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyIcon.ts @@ -0,0 +1,11 @@ +import { ValueEntityType } from '../../../type' + +/** + * {28} + */ +export interface IDestroyIcon { + /** + * {182} + */ + entity: ValueEntityType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/destroyInWorldText.ts b/bin/core/engine/interface/action/child/destroyInWorldText.ts new file mode 100644 index 0000000..98f304b --- /dev/null +++ b/bin/core/engine/interface/action/child/destroyInWorldText.ts @@ -0,0 +1,11 @@ +import { ValueTextId } from '../../../type' + +/** + * {29} + */ +export interface IDestroyInWorldText { + /** + * {183} + */ + textId: ValueTextId +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/disableBuiltInGameModeAnnouncer.ts b/bin/core/engine/interface/action/child/disableBuiltInGameModeAnnouncer.ts new file mode 100644 index 0000000..707ab8b --- /dev/null +++ b/bin/core/engine/interface/action/child/disableBuiltInGameModeAnnouncer.ts @@ -0,0 +1,4 @@ +/** + * {30} + */ +export interface IDisableBuiltInGameModeAnnouncer {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/disableBuiltInGameModeCompletion.ts b/bin/core/engine/interface/action/child/disableBuiltInGameModeCompletion.ts new file mode 100644 index 0000000..008f41a --- /dev/null +++ b/bin/core/engine/interface/action/child/disableBuiltInGameModeCompletion.ts @@ -0,0 +1,4 @@ +/** + * {31} + */ +export interface IDisableBuiltInGameModeCompletion {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/disableBuiltInGameModeMusic.ts b/bin/core/engine/interface/action/child/disableBuiltInGameModeMusic.ts new file mode 100644 index 0000000..48bfd4f --- /dev/null +++ b/bin/core/engine/interface/action/child/disableBuiltInGameModeMusic.ts @@ -0,0 +1,4 @@ +/** + * {32} + */ +export interface IDisableBuiltInGameModeMusic {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/disableBuiltInGameModeRespawning.ts b/bin/core/engine/interface/action/child/disableBuiltInGameModeRespawning.ts new file mode 100644 index 0000000..2dea1ec --- /dev/null +++ b/bin/core/engine/interface/action/child/disableBuiltInGameModeRespawning.ts @@ -0,0 +1,11 @@ +import { ValuePlayersParamType } from '../../../type' + +/** + * {33} + */ +export interface IDisableBuiltInGameModeRespawning { + /** + * {184} + */ + players: ValuePlayersParamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/disableBuiltInGameModeScoring.ts b/bin/core/engine/interface/action/child/disableBuiltInGameModeScoring.ts new file mode 100644 index 0000000..560c431 --- /dev/null +++ b/bin/core/engine/interface/action/child/disableBuiltInGameModeScoring.ts @@ -0,0 +1,4 @@ +/** + * {34} + */ +export interface IDisableBuiltInGameModeScoring {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/disableDeathSpectateAllPlayers.ts b/bin/core/engine/interface/action/child/disableDeathSpectateAllPlayers.ts new file mode 100644 index 0000000..1987d12 --- /dev/null +++ b/bin/core/engine/interface/action/child/disableDeathSpectateAllPlayers.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {35} + */ +export interface IDisableDeathSpectateAllPlayers { + /** + * {185} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/disableDeathSpectateTargetHud.ts b/bin/core/engine/interface/action/child/disableDeathSpectateTargetHud.ts new file mode 100644 index 0000000..a82fc75 --- /dev/null +++ b/bin/core/engine/interface/action/child/disableDeathSpectateTargetHud.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {36} + */ +export interface IDisableDeathSpectateTargetHud { + /** + * {186} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/disallowButton.ts b/bin/core/engine/interface/action/child/disallowButton.ts new file mode 100644 index 0000000..dfa1126 --- /dev/null +++ b/bin/core/engine/interface/action/child/disallowButton.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueButtonType } from '../../../type' + +/** + * {37} + */ +export interface IDisallowButton { + /** + * {187} + */ + player: ValuePlayerType + /** + * {188} + */ + button: ValueButtonType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/enableBuiltInGameModeAnnouncer.ts b/bin/core/engine/interface/action/child/enableBuiltInGameModeAnnouncer.ts new file mode 100644 index 0000000..4fdb2c2 --- /dev/null +++ b/bin/core/engine/interface/action/child/enableBuiltInGameModeAnnouncer.ts @@ -0,0 +1,4 @@ +/** + * {38} + */ +export interface IEnableBuiltInGameModeAnnouncer {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/enableBuiltInGameModeCompletion.ts b/bin/core/engine/interface/action/child/enableBuiltInGameModeCompletion.ts new file mode 100644 index 0000000..bcadbe8 --- /dev/null +++ b/bin/core/engine/interface/action/child/enableBuiltInGameModeCompletion.ts @@ -0,0 +1,4 @@ +/** + * {39} + */ +export interface IEnableBuiltInGameModeCompletion {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/enableBuiltInGameModeMusic.ts b/bin/core/engine/interface/action/child/enableBuiltInGameModeMusic.ts new file mode 100644 index 0000000..4d724c7 --- /dev/null +++ b/bin/core/engine/interface/action/child/enableBuiltInGameModeMusic.ts @@ -0,0 +1,4 @@ +/** + * {40} + */ +export interface IEnableBuiltInGameModeMusic {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/enableBuiltInGameModeRespawning.ts b/bin/core/engine/interface/action/child/enableBuiltInGameModeRespawning.ts new file mode 100644 index 0000000..596a59e --- /dev/null +++ b/bin/core/engine/interface/action/child/enableBuiltInGameModeRespawning.ts @@ -0,0 +1,11 @@ +import { ValuePlayersParamType } from '../../../type' + +/** + * {41} + */ +export interface IEnableBuiltInGameModeRespawning { + /** + * {184} + */ + players: ValuePlayersParamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/enableBuiltInGameModeScoring.ts b/bin/core/engine/interface/action/child/enableBuiltInGameModeScoring.ts new file mode 100644 index 0000000..587c9a9 --- /dev/null +++ b/bin/core/engine/interface/action/child/enableBuiltInGameModeScoring.ts @@ -0,0 +1,4 @@ +/** + * {42} + */ +export interface IEnableBuiltInGameModeScoring {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/enableDeathSpectateAllPlayers.ts b/bin/core/engine/interface/action/child/enableDeathSpectateAllPlayers.ts new file mode 100644 index 0000000..214c9f9 --- /dev/null +++ b/bin/core/engine/interface/action/child/enableDeathSpectateAllPlayers.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {43} + */ +export interface IEnableDeathSpectateAllPlayers { + /** + * {189} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/enableDeathSpectateTargetHud.ts b/bin/core/engine/interface/action/child/enableDeathSpectateTargetHud.ts new file mode 100644 index 0000000..fe98006 --- /dev/null +++ b/bin/core/engine/interface/action/child/enableDeathSpectateTargetHud.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {44} + */ +export interface IEnableDeathSpectateTargetHud { + /** + * {190} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/goToAssembleHeroes.ts b/bin/core/engine/interface/action/child/goToAssembleHeroes.ts new file mode 100644 index 0000000..e86cb60 --- /dev/null +++ b/bin/core/engine/interface/action/child/goToAssembleHeroes.ts @@ -0,0 +1,4 @@ +/** + * {45} + */ +export interface IGoToAssembleHeroes {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/heal.ts b/bin/core/engine/interface/action/child/heal.ts new file mode 100644 index 0000000..50ac3a3 --- /dev/null +++ b/bin/core/engine/interface/action/child/heal.ts @@ -0,0 +1,19 @@ +import { ValuePlayerType, ValueNumberType, ValueAssisterParamType } from '../../../type' + +/** + * {46} + */ +export interface IHeal { + /** + * {191} + */ + player: ValuePlayerType + /** + * {192} + */ + healer: ValueAssisterParamType + /** + * {193} + */ + amount: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/index.ts b/bin/core/engine/interface/action/child/index.ts new file mode 100644 index 0000000..ff1b344 --- /dev/null +++ b/bin/core/engine/interface/action/child/index.ts @@ -0,0 +1,134 @@ +export * from './abort' +export * from './abortIf' +export * from './abortIfConditionIsFalse' +export * from './abortIfConditionIsTrue' +export * from './allowButton' +export * from './applyImpluse' +export * from './bigMessage' +export * from './chaseGlobalVariableAtRate' +export * from './chaseGlobalVariableOverTime' +export * from './chasePlayerVariableAtRate' +export * from './chasePlayerVariableOverTime' +export * from './clearStatus' +export * from './communicate' +export * from './createEffect' +export * from './createHudText' +export * from './createIcon' +export * from './createInWorldText' +export * from './damage' +export * from './declareMatchDraw' +export * from './declarePlayerVictory' +export * from './declareRoundVictory' +export * from './declareTeamVictory' +export * from './destroyAllEffects' +export * from './destroyAllHudText' +export * from './destroyAllIcons' +export * from './destroyAllInWorldText' +export * from './destroyEffect' +export * from './destroyHudText' +export * from './destroyIcon' +export * from './destroyInWorldText' +export * from './disableBuiltInGameModeAnnouncer' +export * from './disableBuiltInGameModeCompletion' +export * from './disableBuiltInGameModeMusic' +export * from './disableBuiltInGameModeRespawning' +export * from './disableBuiltInGameModeScoring' +export * from './disableDeathSpectateAllPlayers' +export * from './disableDeathSpectateTargetHud' +export * from './disallowButton' +export * from './enableBuiltInGameModeAnnouncer' +export * from './enableBuiltInGameModeCompletion' +export * from './enableBuiltInGameModeMusic' +export * from './enableBuiltInGameModeRespawning' +export * from './enableBuiltInGameModeScoring' +export * from './enableDeathSpectateAllPlayers' +export * from './enableDeathSpectateTargetHud' +export * from './goToAssembleHeroes' +export * from './heal' +export * from './kill' +export * from './loop' +export * from './loopIf' +export * from './loopIfConditionIsFalse' +export * from './loopIfConditionIsTrue' +export * from './modifyGlobalVariable' +export * from './modifyGlobalVariableAtIndex' +export * from './modifyPlayerScore' +export * from './modifyPlayerVariable' +export * from './modifyPlayerVariableAtIndex' +export * from './modifyTeamScore' +export * from './pauseMatchTime' +export * from './playEffect' +export * from './preloadHero' +export * from './pressButton' +export * from './resetPlayerHeroAvailability' +export * from './respawn' +export * from './resurrect' +export * from './setAbility1Enabled' +export * from './setAbility2Enabled' +export * from './setAimSpeed' +export * from './setDamageDealt' +export * from './setDamageReceived' +export * from './setFacing' +export * from './setGlobalVariable' +export * from './setGlobalVariableAtIndex' +export * from './setGravity' +export * from './setHealingDealt' +export * from './setHealingReceived' +export * from './setInvisible' +export * from './setMatchTime' +export * from './setMaxHealth' +export * from './setMoveSpeed' +export * from './setObjectiveDescription' +export * from './setPlayerAllowedHeroes' +export * from './setPlayerScore' +export * from './setPlayerVariable' +export * from './setPlayerVariableAtIndex' +export * from './setPrimaryFireEnabled' +export * from './setProjectileGravity' +export * from './setProjectileSpeed' +export * from './setRespawnMaxTime' +export * from './setSecondaryFireEnabled' +export * from './setSlowMotion' +export * from './setStatus' +export * from './setTeamScore' +export * from './setUltimateAbilityEnabled' +export * from './setUltimateCharge' +export * from './skip' +export * from './skipIf' +export * from './smallMessage' +export * from './startAccelerating' +export * from './startCamera' +export * from './startDamageModification' +export * from './startDamageOverTime' +export * from './startFacing' +export * from './startForcingPlayerToBeHero' +export * from './startForcingSpawnRoom' +export * from './startForcingThrottle' +export * from './startHealOverTime' +export * from './startHoldingButton' +export * from './stopAccelerating' +export * from './stopAllDamageModifications' +export * from './stopAllDamageOverTime' +export * from './stopAllHealOverTime' +export * from './stopCamera' +export * from './stopChasingGlobalVariable' +export * from './stopChasingPlayerVariable' +export * from './stopDamageModification' +export * from './stopDamageOverTime' +export * from './stopFacing' +export * from './stopForcingPlayerToBeHero' +export * from './stopForcingSpawnRoom' +export * from './stopForcingThrottle' +export * from './stopHealOverTime' +export * from './stopHoldingButton' +export * from './teleport' +export * from './unpauseMatchTime' +export * from './wait' +export * from './startTransformingThrottle' +export * from './stopTransformingThrottle' +export * from './createDummyBot' +export * from './destroyDummyBot' +export * from './destroyAllDummyBot' +export * from './startThrottleInDirection' +export * from './stopThrottleInDirection' +export * from './createBeamEffect' \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/kill.ts b/bin/core/engine/interface/action/child/kill.ts new file mode 100644 index 0000000..a28d166 --- /dev/null +++ b/bin/core/engine/interface/action/child/kill.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueAssisterParamType } from '../../../type' + +/** + * {47} + */ +export interface IKill { + /** + * {194} + */ + player: ValuePlayerType + /** + * {195} + */ + killer: ValueAssisterParamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/loop.ts b/bin/core/engine/interface/action/child/loop.ts new file mode 100644 index 0000000..030dc7f --- /dev/null +++ b/bin/core/engine/interface/action/child/loop.ts @@ -0,0 +1,4 @@ +/** + * {48} + */ +export interface ILoop {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/loopIf.ts b/bin/core/engine/interface/action/child/loopIf.ts new file mode 100644 index 0000000..f9db011 --- /dev/null +++ b/bin/core/engine/interface/action/child/loopIf.ts @@ -0,0 +1,11 @@ +import { ValueBoolType } from '../../../type' + +/** + * {49} + */ +export interface ILoopIf { + /** + * {196} + */ + condition: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/loopIfConditionIsFalse.ts b/bin/core/engine/interface/action/child/loopIfConditionIsFalse.ts new file mode 100644 index 0000000..5aaf81e --- /dev/null +++ b/bin/core/engine/interface/action/child/loopIfConditionIsFalse.ts @@ -0,0 +1,4 @@ +/** + * {50} + */ +export interface ILoopIfConditionIsFalse {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/loopIfConditionIsTrue.ts b/bin/core/engine/interface/action/child/loopIfConditionIsTrue.ts new file mode 100644 index 0000000..f833654 --- /dev/null +++ b/bin/core/engine/interface/action/child/loopIfConditionIsTrue.ts @@ -0,0 +1,4 @@ +/** + * {51} + */ +export interface ILoopIfConditionIsTrue {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/modifyGlobalVariable.ts b/bin/core/engine/interface/action/child/modifyGlobalVariable.ts new file mode 100644 index 0000000..565241d --- /dev/null +++ b/bin/core/engine/interface/action/child/modifyGlobalVariable.ts @@ -0,0 +1,19 @@ +import { ValueType, ValueVariableOperationType, VariableType } from '../../../type' + +/** + * {52} + */ +export interface IModifyGlobalVariable { + /** + * {197} + */ + variable: VariableType + /** + * {198} + */ + operation: ValueVariableOperationType + /** + * {199} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/modifyGlobalVariableAtIndex.ts b/bin/core/engine/interface/action/child/modifyGlobalVariableAtIndex.ts new file mode 100644 index 0000000..09178e1 --- /dev/null +++ b/bin/core/engine/interface/action/child/modifyGlobalVariableAtIndex.ts @@ -0,0 +1,23 @@ +import { ValueType, ValueNumberType, ValueVariableOperationType, VariableType } from '../../../type' + +/** + * {53} + */ +export interface IModifyGlobalVariableAtIndex { + /** + * {197} + */ + variable: VariableType + /** + * {200} + */ + index: ValueNumberType + /** + * {198} + */ + operation: ValueVariableOperationType + /** + * {199} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/modifyPlayerScore.ts b/bin/core/engine/interface/action/child/modifyPlayerScore.ts new file mode 100644 index 0000000..9fb1be8 --- /dev/null +++ b/bin/core/engine/interface/action/child/modifyPlayerScore.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {54} + */ +export interface IModifyPlayerScore { + /** + * {201} + */ + player: ValuePlayerType + /** + * {202} + */ + score: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/modifyPlayerVariable.ts b/bin/core/engine/interface/action/child/modifyPlayerVariable.ts new file mode 100644 index 0000000..786e947 --- /dev/null +++ b/bin/core/engine/interface/action/child/modifyPlayerVariable.ts @@ -0,0 +1,28 @@ +import { + ValueType, + ValuePlayerType, + ValueVariableOperationType, + VariableType +} from '../../../type' + +/** + * {55} + */ +export interface IModifyPlayerVariable { + /** + * {203} + */ + player: ValuePlayerType + /** + * {204} + */ + variable: VariableType + /** + * {198} + */ + operation: ValueVariableOperationType + /** + * {205} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/modifyPlayerVariableAtIndex.ts b/bin/core/engine/interface/action/child/modifyPlayerVariableAtIndex.ts new file mode 100644 index 0000000..cf3b5c4 --- /dev/null +++ b/bin/core/engine/interface/action/child/modifyPlayerVariableAtIndex.ts @@ -0,0 +1,27 @@ +import { ValueType, ValueNumberType, ValueVariableOperationType, ValuePlayerType, VariableType } from '../../../type' + +/** + * {56} + */ +export interface IModifyPlayerVariableAtIndex { + /** + * {206} + */ + player: ValuePlayerType + /** + * {207} + */ + variable: VariableType + /** + * {200} + */ + index: ValueNumberType + /** + * {198} + */ + operation: ValueVariableOperationType + /** + * {199} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/modifyTeamScore.ts b/bin/core/engine/interface/action/child/modifyTeamScore.ts new file mode 100644 index 0000000..8afe684 --- /dev/null +++ b/bin/core/engine/interface/action/child/modifyTeamScore.ts @@ -0,0 +1,15 @@ +import { ValueTeamType, ValueNumberType } from '../../../type' + +/** + * {57} + */ +export interface IModifyTeamScore { + /** + * {208} + */ + team: ValueTeamType + /** + * {202} + */ + score: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/pauseMatchTime.ts b/bin/core/engine/interface/action/child/pauseMatchTime.ts new file mode 100644 index 0000000..29a27c9 --- /dev/null +++ b/bin/core/engine/interface/action/child/pauseMatchTime.ts @@ -0,0 +1,4 @@ +/** + * {58} + */ +export interface IPauseMatchTime {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/playEffect.ts b/bin/core/engine/interface/action/child/playEffect.ts new file mode 100644 index 0000000..eaec36b --- /dev/null +++ b/bin/core/engine/interface/action/child/playEffect.ts @@ -0,0 +1,33 @@ +import { + ValuePlayersParamType, + ValuePlayEffect, + ValueColorType, + ValueVectorType, + ValueNumberType, +} from '../../../type' + +/** + * {59} + */ +export interface IPlayEffect { + /** + * {149} + */ + visibleTo: ValuePlayersParamType + /** + * {209} + */ + type: ValuePlayEffect + /** + * {210} + */ + color: ValueColorType + /** + * {211} + */ + position: ValueVectorType + /** + * {212} + */ + radius: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/preloadHero.ts b/bin/core/engine/interface/action/child/preloadHero.ts new file mode 100644 index 0000000..20e4ec6 --- /dev/null +++ b/bin/core/engine/interface/action/child/preloadHero.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueHeroType } from '../../../type' + +/** + * {60} + */ +export interface IPreloadHero { + /** + * {213} + */ + player: ValuePlayerType + /** + * {214} + */ + hero: ValueHeroType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/pressButton.ts b/bin/core/engine/interface/action/child/pressButton.ts new file mode 100644 index 0000000..611aced --- /dev/null +++ b/bin/core/engine/interface/action/child/pressButton.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueButtonType } from '../../../type' + +/** + * {61} + */ +export interface IPressButton { + /** + * {215} + */ + player: ValuePlayerType + /** + * {216} + */ + button: ValueButtonType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/resetPlayerHeroAvailability.ts b/bin/core/engine/interface/action/child/resetPlayerHeroAvailability.ts new file mode 100644 index 0000000..deda23d --- /dev/null +++ b/bin/core/engine/interface/action/child/resetPlayerHeroAvailability.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {62} + */ +export interface IResetPlayerHeroAvailability { + /** + * {217} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/respawn.ts b/bin/core/engine/interface/action/child/respawn.ts new file mode 100644 index 0000000..e7916e9 --- /dev/null +++ b/bin/core/engine/interface/action/child/respawn.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {63} + */ +export interface IRespawn { + /** + * {218} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/resurrect.ts b/bin/core/engine/interface/action/child/resurrect.ts new file mode 100644 index 0000000..94765af --- /dev/null +++ b/bin/core/engine/interface/action/child/resurrect.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {64} + */ +export interface IResurrect { + /** + * {219} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setAbility1Enabled.ts b/bin/core/engine/interface/action/child/setAbility1Enabled.ts new file mode 100644 index 0000000..982bda1 --- /dev/null +++ b/bin/core/engine/interface/action/child/setAbility1Enabled.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueBoolType } from '../../../type' + +/** + * {65} + */ +export interface ISetAbility1Enabled { + /** + * {220} + */ + player: ValuePlayerType + /** + * {221} + */ + enabled: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setAbility2Enabled.ts b/bin/core/engine/interface/action/child/setAbility2Enabled.ts new file mode 100644 index 0000000..79d8b96 --- /dev/null +++ b/bin/core/engine/interface/action/child/setAbility2Enabled.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueBoolType } from '../../../type' + +/** + * {66} + */ +export interface ISetAbility2Enabled { + /** + * {222} + */ + player: ValuePlayerType + /** + * {223} + */ + enabled: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setAimSpeed.ts b/bin/core/engine/interface/action/child/setAimSpeed.ts new file mode 100644 index 0000000..82e6a3b --- /dev/null +++ b/bin/core/engine/interface/action/child/setAimSpeed.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {67} + */ +export interface ISetAimSpeed { + /** + * {224} + */ + player: ValuePlayerType + /** + * {225} + */ + turnSpeedPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setDamageDealt.ts b/bin/core/engine/interface/action/child/setDamageDealt.ts new file mode 100644 index 0000000..6797558 --- /dev/null +++ b/bin/core/engine/interface/action/child/setDamageDealt.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {68} + */ +export interface ISetDamageDealt { + /** + * {226} + */ + player: ValuePlayerType + /** + * {227} + */ + damageDealtPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setDamageReceived.ts b/bin/core/engine/interface/action/child/setDamageReceived.ts new file mode 100644 index 0000000..ba33fd3 --- /dev/null +++ b/bin/core/engine/interface/action/child/setDamageReceived.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {69} + */ +export interface ISetDamageReceived { + /** + * {228} + */ + player: ValuePlayerType + /** + * {229} + */ + damageReceivedPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setFacing.ts b/bin/core/engine/interface/action/child/setFacing.ts new file mode 100644 index 0000000..06237c5 --- /dev/null +++ b/bin/core/engine/interface/action/child/setFacing.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueVectorType } from '../../../type' + +/** + * {70} + */ +export interface ISetFacing { + /** + * {230} + */ + player: ValuePlayerType + /** + * {231} + */ + direction: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setGlobalVariable.ts b/bin/core/engine/interface/action/child/setGlobalVariable.ts new file mode 100644 index 0000000..4138228 --- /dev/null +++ b/bin/core/engine/interface/action/child/setGlobalVariable.ts @@ -0,0 +1,18 @@ +import { + ValueType, + VariableType +} from '../../../type' + +/** + * {71} + */ +export interface ISetGlobalVariable { + /** + * {232} + */ + variable: VariableType + /** + * {233} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setGlobalVariableAtIndex.ts b/bin/core/engine/interface/action/child/setGlobalVariableAtIndex.ts new file mode 100644 index 0000000..9a532b8 --- /dev/null +++ b/bin/core/engine/interface/action/child/setGlobalVariableAtIndex.ts @@ -0,0 +1,23 @@ +import { + ValueType, + VariableType, + ValueNumberType +} from '../../../type' + +/** + * {72} + */ +export interface ISetGlobalVariableAtIndex { + /** + * {234} + */ + variable: VariableType + /** + * {200} + */ + index: ValueNumberType + /** + * {235} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setGravity.ts b/bin/core/engine/interface/action/child/setGravity.ts new file mode 100644 index 0000000..b36641b --- /dev/null +++ b/bin/core/engine/interface/action/child/setGravity.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {73} + */ +export interface ISetGravity { + /** + * {236} + */ + player: ValuePlayerType + /** + * {237} + */ + gravityPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setHealingDealt.ts b/bin/core/engine/interface/action/child/setHealingDealt.ts new file mode 100644 index 0000000..383d9ab --- /dev/null +++ b/bin/core/engine/interface/action/child/setHealingDealt.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {74} + */ +export interface ISetHealingDealt { + /** + * {236} + */ + player: ValuePlayerType + /** + * {237} + */ + healingDealtPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setHealingReceived.ts b/bin/core/engine/interface/action/child/setHealingReceived.ts new file mode 100644 index 0000000..da93d94 --- /dev/null +++ b/bin/core/engine/interface/action/child/setHealingReceived.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {75} + */ +export interface ISetHealingReceived { + /** + * {238} + */ + player: ValuePlayerType + /** + * {239} + */ + healingReceivedPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setInvisible.ts b/bin/core/engine/interface/action/child/setInvisible.ts new file mode 100644 index 0000000..f26a70e --- /dev/null +++ b/bin/core/engine/interface/action/child/setInvisible.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueInvisibleToType } from '../../../type' + +/** + * {76} + */ +export interface ISetInvisible { + /** + * {240} + */ + player: ValuePlayerType + /** + * {241} + */ + invisibleTo: ValueInvisibleToType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setMatchTime.ts b/bin/core/engine/interface/action/child/setMatchTime.ts new file mode 100644 index 0000000..d31ef04 --- /dev/null +++ b/bin/core/engine/interface/action/child/setMatchTime.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {77} + */ +export interface ISetMatchTime { + /** + * {242} + */ + time: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setMaxHealth.ts b/bin/core/engine/interface/action/child/setMaxHealth.ts new file mode 100644 index 0000000..983a71c --- /dev/null +++ b/bin/core/engine/interface/action/child/setMaxHealth.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {78} + */ +export interface ISetMaxHealth { + /** + * {243} + */ + player: ValuePlayerType + /** + * {244} + */ + healthPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setMoveSpeed.ts b/bin/core/engine/interface/action/child/setMoveSpeed.ts new file mode 100644 index 0000000..9f1a2c5 --- /dev/null +++ b/bin/core/engine/interface/action/child/setMoveSpeed.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {79} + */ +export interface ISetMoveSpeed { + /** + * {245} + */ + player: ValuePlayerType + /** + * {244} + */ + moveSpeedPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setObjectiveDescription.ts b/bin/core/engine/interface/action/child/setObjectiveDescription.ts new file mode 100644 index 0000000..999f2ec --- /dev/null +++ b/bin/core/engine/interface/action/child/setObjectiveDescription.ts @@ -0,0 +1,19 @@ +import { ValuePlayerType, ValueStringType, ValueObjectiveDescriptionReevaluationType } from '../../../type' + +/** + * {80} + */ +export interface ISetObjectiveDescription { + /** + * {246} + */ + visibleTo: ValuePlayerType + /** + * {135} + */ + header: ValueStringType + /** + * {247} + */ + reevaluation: ValueObjectiveDescriptionReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setPlayerAllowedHeroes.ts b/bin/core/engine/interface/action/child/setPlayerAllowedHeroes.ts new file mode 100644 index 0000000..0a09dc3 --- /dev/null +++ b/bin/core/engine/interface/action/child/setPlayerAllowedHeroes.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + ValueHeroType, +} from '../../../type' + +/** + * {81} + */ +export interface ISetPlayerAllowedHeroes { + /** + * {248} + */ + player: ValuePlayerType + /** + * {249} + */ + hero: ValueHeroType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setPlayerScore.ts b/bin/core/engine/interface/action/child/setPlayerScore.ts new file mode 100644 index 0000000..1c93a99 --- /dev/null +++ b/bin/core/engine/interface/action/child/setPlayerScore.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + ValueNumberType, +} from '../../../type' + +/** + * {82} + */ +export interface ISetPlayerScore { + /** + * {250} + */ + player: ValuePlayerType + /** + * {251} + */ + score: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setPlayerVariable.ts b/bin/core/engine/interface/action/child/setPlayerVariable.ts new file mode 100644 index 0000000..fa88846 --- /dev/null +++ b/bin/core/engine/interface/action/child/setPlayerVariable.ts @@ -0,0 +1,23 @@ +import { + ValuePlayerType, + VariableType, + ValueType +} from '../../../type' + +/** + * {83} + */ +export interface ISetPlayerVariable { + /** + * {252} + */ + player: ValuePlayerType + /** + * {253} + */ + variable: VariableType + /** + * {233} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setPlayerVariableAtIndex.ts b/bin/core/engine/interface/action/child/setPlayerVariableAtIndex.ts new file mode 100644 index 0000000..3b936df --- /dev/null +++ b/bin/core/engine/interface/action/child/setPlayerVariableAtIndex.ts @@ -0,0 +1,28 @@ +import { + ValuePlayerType, + VariableType, + ValueNumberType, + ValueType +} from '../../../type' + +/** + * {84} + */ +export interface ISetPlayerVariableAtIndex { + /** + * {254} + */ + player: ValuePlayerType + /** + * {255} + */ + variable: VariableType + /** + * {200} + */ + index: ValueNumberType + /** + * {256} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setPrimaryFireEnabled.ts b/bin/core/engine/interface/action/child/setPrimaryFireEnabled.ts new file mode 100644 index 0000000..9936019 --- /dev/null +++ b/bin/core/engine/interface/action/child/setPrimaryFireEnabled.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueBoolType } from '../../../type' + +/** + * {85} + */ +export interface ISetPrimaryFireEnabled { + /** + * {257} + */ + player: ValuePlayerType + /** + * {258} + */ + enabled: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setProjectileGravity.ts b/bin/core/engine/interface/action/child/setProjectileGravity.ts new file mode 100644 index 0000000..fa3a789 --- /dev/null +++ b/bin/core/engine/interface/action/child/setProjectileGravity.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {86} + */ +export interface ISetProjectileGravity { + /** + * {259} + */ + player: ValuePlayerType + /** + * {260} + */ + projectileGravityPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setProjectileSpeed.ts b/bin/core/engine/interface/action/child/setProjectileSpeed.ts new file mode 100644 index 0000000..48930f8 --- /dev/null +++ b/bin/core/engine/interface/action/child/setProjectileSpeed.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {87} + */ +export interface ISetProjectileSpeed { + /** + * {261} + */ + player: ValuePlayerType + /** + * {262} + */ + projectileSpeedPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setRespawnMaxTime.ts b/bin/core/engine/interface/action/child/setRespawnMaxTime.ts new file mode 100644 index 0000000..0b06c90 --- /dev/null +++ b/bin/core/engine/interface/action/child/setRespawnMaxTime.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {88} + */ +export interface ISetRespawnMaxTime { + /** + * {263} + */ + player: ValuePlayerType + /** + * {264} + */ + time: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setSecondaryFireEnabled.ts b/bin/core/engine/interface/action/child/setSecondaryFireEnabled.ts new file mode 100644 index 0000000..2596ac4 --- /dev/null +++ b/bin/core/engine/interface/action/child/setSecondaryFireEnabled.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueBoolType } from '../../../type' + +/** + * {89} + */ +export interface ISetSecondaryFireEnabled { + /** + * {265} + */ + player: ValuePlayerType + /** + * {266} + */ + enabled: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setSlowMotion.ts b/bin/core/engine/interface/action/child/setSlowMotion.ts new file mode 100644 index 0000000..05c119b --- /dev/null +++ b/bin/core/engine/interface/action/child/setSlowMotion.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {90} + */ +export interface ISetSlowMotion { + /** + * {267} + */ + speedPercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setStatus.ts b/bin/core/engine/interface/action/child/setStatus.ts new file mode 100644 index 0000000..7a272e3 --- /dev/null +++ b/bin/core/engine/interface/action/child/setStatus.ts @@ -0,0 +1,27 @@ +import { + ValuePlayerType, + ValueAssisterParamType, + ValueStatusType, + ValueNumberType, +} from '../../../type' +/** + * {91} + */ +export interface ISetStatus { + /** + * {268} + */ + player: ValuePlayerType + /** + * {269} + */ + assister: ValueAssisterParamType + /** + * {270} + */ + status: ValueStatusType + /** + * {271} + */ + duration: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setTeamScore.ts b/bin/core/engine/interface/action/child/setTeamScore.ts new file mode 100644 index 0000000..425637b --- /dev/null +++ b/bin/core/engine/interface/action/child/setTeamScore.ts @@ -0,0 +1,15 @@ +import { ValueTeamType, ValueNumberType } from '../../../type' + +/** + * {92} + */ +export interface ISetTeamScore { + /** + * {272} + */ + team: ValueTeamType + /** + * {251} + */ + score: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setUltimateAbilityEnabled.ts b/bin/core/engine/interface/action/child/setUltimateAbilityEnabled.ts new file mode 100644 index 0000000..53d7444 --- /dev/null +++ b/bin/core/engine/interface/action/child/setUltimateAbilityEnabled.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueBoolType } from '../../../type' + +/** + * {93} + */ +export interface ISetUltimateAbilityEnabled { + /** + * {273} + */ + player: ValuePlayerType + /** + * {274} + */ + enabled: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/setUltimateCharge.ts b/bin/core/engine/interface/action/child/setUltimateCharge.ts new file mode 100644 index 0000000..d70e38b --- /dev/null +++ b/bin/core/engine/interface/action/child/setUltimateCharge.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {94} + */ +export interface ISetUltimateCharge { + /** + * {273} + */ + player: ValuePlayerType + /** + * {275} + */ + chargePercent: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/skip.ts b/bin/core/engine/interface/action/child/skip.ts new file mode 100644 index 0000000..df78b4e --- /dev/null +++ b/bin/core/engine/interface/action/child/skip.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {95} + */ +export interface ISkip { + /** + * {276} + */ + numberOfActions: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/skipIf.ts b/bin/core/engine/interface/action/child/skipIf.ts new file mode 100644 index 0000000..02e95b0 --- /dev/null +++ b/bin/core/engine/interface/action/child/skipIf.ts @@ -0,0 +1,15 @@ +import { ValueBoolType, ValueNumberType } from '../../../type' + +/** + * {96} + */ +export interface ISkipIf { + /** + * {277} + */ + condition: ValueBoolType + /** + * {276} + */ + numberOfActions: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/smallMessage.ts b/bin/core/engine/interface/action/child/smallMessage.ts new file mode 100644 index 0000000..3293f0f --- /dev/null +++ b/bin/core/engine/interface/action/child/smallMessage.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueStringType } from '../../../type' + +/** + * {97} + */ +export interface ISmallMessage { + /** + * {246} + */ + visibleTo: ValuePlayerType + /** + * {135} + */ + header: ValueStringType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startAccelerating.ts b/bin/core/engine/interface/action/child/startAccelerating.ts new file mode 100644 index 0000000..292968b --- /dev/null +++ b/bin/core/engine/interface/action/child/startAccelerating.ts @@ -0,0 +1,37 @@ +import { + ValuePlayerType, + ValueVectorType, + ValueNumberType, + ValueRelativeType, + ValueStartAcceleratingReevaluationType +} from '../../../type' + +/** + * {98} + */ +export interface IStartAccelerating { + /** + * {278} + */ + player: ValuePlayerType + /** + * {279} + */ + direction: ValueVectorType + /** + * {280} + */ + rate: ValueNumberType + /** + * {281} + */ + maxSpeed: ValueNumberType + /** + * {282} + */ + relative: ValueRelativeType + /** + * {283} + */ + reevaluation: ValueStartAcceleratingReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startCamera.ts b/bin/core/engine/interface/action/child/startCamera.ts new file mode 100644 index 0000000..6e5b297 --- /dev/null +++ b/bin/core/engine/interface/action/child/startCamera.ts @@ -0,0 +1,27 @@ +import { + ValuePlayerType, + ValueVectorType, + ValueNumberType, +} from '../../../type' + +/** + * {99} + */ +export interface IStartCamera { + /** + * {284} + */ + player: ValuePlayerType + /** + * {285} + */ + eyePosition: ValueVectorType + /** + * {286} + */ + lookAtPosition: ValueVectorType + /** + * {287} + */ + blendSpeed: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startDamageModification.ts b/bin/core/engine/interface/action/child/startDamageModification.ts new file mode 100644 index 0000000..3ef2b32 --- /dev/null +++ b/bin/core/engine/interface/action/child/startDamageModification.ts @@ -0,0 +1,29 @@ +import { + ValuePlayersParamType, + ValuePlayerType, + ValueArrayType, + ValueNumberType, + ValueDamageModificationReevaluationType +} from '../../../type' + +/** + * {100} + */ +export interface IStartDamageModification { + /** + * {288} + */ + receivers: ValuePlayersParamType + /** + * {289} + */ + damagers: ValuePlayersParamType + /** + * {290} + */ + damagePercent: ValueNumberType + /** + * {283} + */ + reevaluation: ValueDamageModificationReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startDamageOverTime.ts b/bin/core/engine/interface/action/child/startDamageOverTime.ts new file mode 100644 index 0000000..c7d7a52 --- /dev/null +++ b/bin/core/engine/interface/action/child/startDamageOverTime.ts @@ -0,0 +1,23 @@ +import { ValuePlayerType, ValueNumberType, ValueAssisterParamType } from '../../../type' + +/** + * {101} + */ +export interface IStartDamageOverTime { + /** + * {291} + */ + player: ValuePlayerType + /** + * {292} + */ + damager: ValueAssisterParamType + /** + * {293} + */ + duration: ValueNumberType + /** + * {294} + */ + damagePerSecond: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startFacing.ts b/bin/core/engine/interface/action/child/startFacing.ts new file mode 100644 index 0000000..24825a7 --- /dev/null +++ b/bin/core/engine/interface/action/child/startFacing.ts @@ -0,0 +1,33 @@ +import { + ValuePlayerType, + ValueVectorType, + ValueNumberType, + ValueRelativeType, + ValueFacingReevaluationType +} from '../../../type' + +/** + * {102} + */ +export interface IStartFacing { + /** + * {295} + */ + player: ValuePlayerType + /** + * {296} + */ + direction: ValueVectorType + /** + * {297} + */ + turnRate: ValueNumberType + /** + * {298} + */ + relative: ValueRelativeType + /** + * {283} + */ + reevaluation: ValueFacingReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startForcingPlayerToBeHero.ts b/bin/core/engine/interface/action/child/startForcingPlayerToBeHero.ts new file mode 100644 index 0000000..74b8854 --- /dev/null +++ b/bin/core/engine/interface/action/child/startForcingPlayerToBeHero.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueHeroType } from '../../../type' + +/** + * {103} + */ +export interface IStartForcingPlayerToBeHero { + /** + * {299} + */ + player: ValuePlayerType + /** + * {300} + */ + hero: ValueHeroType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startForcingSpawnRoom.ts b/bin/core/engine/interface/action/child/startForcingSpawnRoom.ts new file mode 100644 index 0000000..9d5cd2a --- /dev/null +++ b/bin/core/engine/interface/action/child/startForcingSpawnRoom.ts @@ -0,0 +1,15 @@ +import { ValueTeamType, ValueNumberType } from '../../../type' + +/** + * {104} + */ +export interface IStartForcingSpawnRoom { + /** + * {301} + */ + team: ValueTeamType + /** + * {302} + */ + room: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startForcingThrottle.ts b/bin/core/engine/interface/action/child/startForcingThrottle.ts new file mode 100644 index 0000000..4153c3c --- /dev/null +++ b/bin/core/engine/interface/action/child/startForcingThrottle.ts @@ -0,0 +1,35 @@ +import { ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {105} + */ +export interface IStartForcingThrottle { + /** + * {303} + */ + player: ValuePlayerType + /** + * {304} + */ + minForward: ValueNumberType + /** + * {305} + */ + maxForward: ValueNumberType + /** + * {306} + */ + minBackward: ValueNumberType + /** + * {307} + */ + maxBackward: ValueNumberType + /** + * {308} + */ + minSideways: ValueNumberType + /** + * {309} + */ + maxSideways: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startHealOverTime.ts b/bin/core/engine/interface/action/child/startHealOverTime.ts new file mode 100644 index 0000000..b35dcb6 --- /dev/null +++ b/bin/core/engine/interface/action/child/startHealOverTime.ts @@ -0,0 +1,23 @@ +import { ValuePlayerType, ValueNumberType, ValueAssisterParamType } from '../../../type' + +/** + * {106} + */ +export interface IStartHealOverTime { + /** + * {310} + */ + player: ValuePlayerType + /** + * {192} + */ + healer: ValueAssisterParamType + /** + * {311} + */ + duration: ValueNumberType + /** + * {312} + */ + healingPerSecond: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startHoldingButton.ts b/bin/core/engine/interface/action/child/startHoldingButton.ts new file mode 100644 index 0000000..0aab7a2 --- /dev/null +++ b/bin/core/engine/interface/action/child/startHoldingButton.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + ValueButtonType +} from '../../../type' + +/** + * {107} + */ +export interface IStartHoldingButton { + /** + * {313} + */ + player: ValuePlayerType + /** + * {314} + */ + button: ValueButtonType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startThrottleInDirection.ts b/bin/core/engine/interface/action/child/startThrottleInDirection.ts new file mode 100644 index 0000000..c016757 --- /dev/null +++ b/bin/core/engine/interface/action/child/startThrottleInDirection.ts @@ -0,0 +1,31 @@ +import { ValuePlayerType, ValueVectorType, ValueNumberType, ValueRelativeType, ValueStartThrottleBehaviorType, ValueStartThrottleReevaluationType } from '../../../type' + +/** + * {738} + */ +export interface IStartThrottleInDirection { + /** + * {739} + */ + player: ValuePlayerType + /** + * {740} + */ + direction: ValueVectorType + /** + * {741} + */ + magnitude: ValueNumberType + /** + * {742} + */ + relative: ValueRelativeType + /** + * {743} + */ + behavior: ValueStartThrottleBehaviorType + /** + * {744} + */ + reevaluation: ValueStartThrottleReevaluationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/startTransformingThrottle.ts b/bin/core/engine/interface/action/child/startTransformingThrottle.ts new file mode 100644 index 0000000..4b7c8b8 --- /dev/null +++ b/bin/core/engine/interface/action/child/startTransformingThrottle.ts @@ -0,0 +1,27 @@ +import { + ValuePlayerType, + ValueNumberType, + ValueVectorType, +} from '../../../type' + +/** + * {717} + */ +export interface IStartTransformingThrottle { + /** + * {718} + */ + player: ValuePlayerType + /** + * {719} + */ + xAxisScalar: ValueNumberType + /** + * {720} + */ + yAxisScalar: ValueNumberType + /** + * {721} + */ + relativeDirection: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopAccelerating.ts b/bin/core/engine/interface/action/child/stopAccelerating.ts new file mode 100644 index 0000000..89a20d5 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopAccelerating.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {108} + */ +export interface IStopAccelerating { + /** + * {315} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopAllDamageModifications.ts b/bin/core/engine/interface/action/child/stopAllDamageModifications.ts new file mode 100644 index 0000000..4464c27 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopAllDamageModifications.ts @@ -0,0 +1,4 @@ +/** + * {109} + */ +export interface IStopAllDamageModifications {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopAllDamageOverTime.ts b/bin/core/engine/interface/action/child/stopAllDamageOverTime.ts new file mode 100644 index 0000000..878ada5 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopAllDamageOverTime.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {110} + */ +export interface IStopAllDamageOverTime { + /** + * {316} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopAllHealOverTime.ts b/bin/core/engine/interface/action/child/stopAllHealOverTime.ts new file mode 100644 index 0000000..30be182 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopAllHealOverTime.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {111} + */ +export interface IStopAllHealOverTime { + /** + * {317} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopCamera.ts b/bin/core/engine/interface/action/child/stopCamera.ts new file mode 100644 index 0000000..1cde1e9 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopCamera.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {112} + */ +export interface IStopCamera { + /** + * {318} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopChasingGlobalVariable.ts b/bin/core/engine/interface/action/child/stopChasingGlobalVariable.ts new file mode 100644 index 0000000..6cb19e5 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopChasingGlobalVariable.ts @@ -0,0 +1,11 @@ +import { VariableType } from '../../../type' + +/** + * {113} + */ +export interface IStopChasingGlobalVariable { + /** + * {319} + */ + variable: VariableType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopChasingPlayerVariable.ts b/bin/core/engine/interface/action/child/stopChasingPlayerVariable.ts new file mode 100644 index 0000000..c01c783 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopChasingPlayerVariable.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + VariableType, +} from '../../../type' + +/** + * {114} + */ +export interface IStopChasingPlayerVariable { + /** + * {320} + */ + player: ValuePlayerType + /** + * {321} + */ + variable: VariableType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopDamageModification.ts b/bin/core/engine/interface/action/child/stopDamageModification.ts new file mode 100644 index 0000000..448ef9e --- /dev/null +++ b/bin/core/engine/interface/action/child/stopDamageModification.ts @@ -0,0 +1,11 @@ +import { ValueDamageModificationId } from '../../../type' + +/** + * {115} + */ +export interface IStopDamageModification { + /** + * {322} + */ + damageModificationId: ValueDamageModificationId +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopDamageOverTime.ts b/bin/core/engine/interface/action/child/stopDamageOverTime.ts new file mode 100644 index 0000000..d4c6a24 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopDamageOverTime.ts @@ -0,0 +1,11 @@ +import { ValueDamageOverTimeId } from '../../../type' + +/** + * {116} + */ +export interface IStopDamageOverTime { + /** + * {323} + */ + damageOverTimeId: ValueDamageOverTimeId +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopFacing.ts b/bin/core/engine/interface/action/child/stopFacing.ts new file mode 100644 index 0000000..9d2d891 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopFacing.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {117} + */ +export interface IStopFacing { + /** + * {324} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopForcingPlayerToBeHero.ts b/bin/core/engine/interface/action/child/stopForcingPlayerToBeHero.ts new file mode 100644 index 0000000..2fe168a --- /dev/null +++ b/bin/core/engine/interface/action/child/stopForcingPlayerToBeHero.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {118} + */ +export interface IStopForcingPlayerToBeHero { + /** + * {325} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopForcingSpawnRoom.ts b/bin/core/engine/interface/action/child/stopForcingSpawnRoom.ts new file mode 100644 index 0000000..4570394 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopForcingSpawnRoom.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {119} + */ +export interface IStopForcingSpawnRoom { + /** + * {326} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopForcingThrottle.ts b/bin/core/engine/interface/action/child/stopForcingThrottle.ts new file mode 100644 index 0000000..ed07271 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopForcingThrottle.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {120} + */ +export interface IStopForcingThrottle { + /** + * {327} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopHealOverTime.ts b/bin/core/engine/interface/action/child/stopHealOverTime.ts new file mode 100644 index 0000000..a0115e4 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopHealOverTime.ts @@ -0,0 +1,11 @@ +import { ValueHealOverTimeIdType } from '../../../type' + +/** + * {121} + */ +export interface IStopHealOverTime { + /** + * {328} + */ + healOverTimeId: ValueHealOverTimeIdType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopHoldingButton.ts b/bin/core/engine/interface/action/child/stopHoldingButton.ts new file mode 100644 index 0000000..3cf9f86 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopHoldingButton.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueButtonType } from '../../../type' + +/** + * {122} + */ +export interface IStopHoldingButton { + /** + * {329} + */ + player: ValuePlayerType + /** + * {330} + */ + button: ValueButtonType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopThrottleInDirection.ts b/bin/core/engine/interface/action/child/stopThrottleInDirection.ts new file mode 100644 index 0000000..df7a97d --- /dev/null +++ b/bin/core/engine/interface/action/child/stopThrottleInDirection.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {745} + */ +export interface IStopThrottleInDirection { + /** + * {746} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/stopTransformingThrottle.ts b/bin/core/engine/interface/action/child/stopTransformingThrottle.ts new file mode 100644 index 0000000..a47fe99 --- /dev/null +++ b/bin/core/engine/interface/action/child/stopTransformingThrottle.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {722} + */ +export interface IStopTransformingThrottle { + /** + * {723} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/teleport.ts b/bin/core/engine/interface/action/child/teleport.ts new file mode 100644 index 0000000..7d609d5 --- /dev/null +++ b/bin/core/engine/interface/action/child/teleport.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueVectorType } from '../../../type' + +/** + * {123} + */ +export interface ITeleport { + /** + * {331} + */ + player: ValuePlayerType + /** + * {332} + */ + position: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/unpauseMatchTime.ts b/bin/core/engine/interface/action/child/unpauseMatchTime.ts new file mode 100644 index 0000000..92e5c63 --- /dev/null +++ b/bin/core/engine/interface/action/child/unpauseMatchTime.ts @@ -0,0 +1,4 @@ +/** + * {124} + */ +export interface IUnpauseMatchTime {} \ No newline at end of file diff --git a/bin/core/engine/interface/action/child/wait.ts b/bin/core/engine/interface/action/child/wait.ts new file mode 100644 index 0000000..bb9a0b4 --- /dev/null +++ b/bin/core/engine/interface/action/child/wait.ts @@ -0,0 +1,15 @@ +import { ValueNumberType, ValueWaitBehaviorType } from '../../../type' + +/** + * {125} + */ +export interface IWait { + /** + * {333} + */ + time: ValueNumberType + /** + * {334} + */ + waitBehavior: ValueWaitBehaviorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/action/index.ts b/bin/core/engine/interface/action/index.ts new file mode 100644 index 0000000..46d22f8 --- /dev/null +++ b/bin/core/engine/interface/action/index.ts @@ -0,0 +1 @@ +export * from './action' \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/index.ts b/bin/core/engine/interface/event/child/index.ts new file mode 100644 index 0000000..0c4c049 --- /dev/null +++ b/bin/core/engine/interface/event/child/index.ts @@ -0,0 +1,11 @@ +export * from './onGoingGlobal' +export * from './onGoingEachPlayer' +export * from './playerEarnedElimination' +export * from './playerDealtFinalBlow' +export * from './playerDealtDamage' +export * from './playerTookDamage' +export * from './playerDied' +export * from './playerDealtHealing' +export * from './playerReceivedHealing' +export * from './playerJoinedMatch' +export * from './playerLeftMatch' \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/onGoingEachPlayer.ts b/bin/core/engine/interface/event/child/onGoingEachPlayer.ts new file mode 100644 index 0000000..db139cf --- /dev/null +++ b/bin/core/engine/interface/event/child/onGoingEachPlayer.ts @@ -0,0 +1,12 @@ +import { + TeamConstantType, + EventPlayerType +} from '../../../type' + +/** + * {336} + */ +export interface IOnGoingEachPlayer { + team: TeamConstantType + player: EventPlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/onGoingGlobal.ts b/bin/core/engine/interface/event/child/onGoingGlobal.ts new file mode 100644 index 0000000..d4d36bd --- /dev/null +++ b/bin/core/engine/interface/event/child/onGoingGlobal.ts @@ -0,0 +1,4 @@ +/** + * {335} + */ +export interface IOnGoingGlobal {} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerDealtDamage.ts b/bin/core/engine/interface/event/child/playerDealtDamage.ts new file mode 100644 index 0000000..d93a508 --- /dev/null +++ b/bin/core/engine/interface/event/child/playerDealtDamage.ts @@ -0,0 +1,12 @@ +import { + TeamConstantType, + EventPlayerType +} from '../../../type' + +/** + * {339} + */ +export interface IPlayerDealtDamage { + team: TeamConstantType + player: EventPlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerDealtFinalBlow.ts b/bin/core/engine/interface/event/child/playerDealtFinalBlow.ts new file mode 100644 index 0000000..ad442ac --- /dev/null +++ b/bin/core/engine/interface/event/child/playerDealtFinalBlow.ts @@ -0,0 +1,12 @@ +import { + TeamConstantType, + EventPlayerType +} from '../../../type' + +/** + * {338} + */ +export interface IPlayerDealtFinalBlow { + team: TeamConstantType + player: EventPlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerDealtHealing.ts b/bin/core/engine/interface/event/child/playerDealtHealing.ts new file mode 100644 index 0000000..95dc6b9 --- /dev/null +++ b/bin/core/engine/interface/event/child/playerDealtHealing.ts @@ -0,0 +1,15 @@ +import { ValueTeamType, ValuePlayerType } from '../../../type' + +/** + * {705} + */ +export interface IPlayerDealtHealing { + /** + * {706} + */ + team: ValueTeamType + /** + * {707} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerDied.ts b/bin/core/engine/interface/event/child/playerDied.ts new file mode 100644 index 0000000..3f16ccd --- /dev/null +++ b/bin/core/engine/interface/event/child/playerDied.ts @@ -0,0 +1,12 @@ +import { + TeamConstantType, + EventPlayerType +} from '../../../type' + +/** + * {341} + */ +export interface IPlayerDied { + team: TeamConstantType + player: EventPlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerEarnedElimination.ts b/bin/core/engine/interface/event/child/playerEarnedElimination.ts new file mode 100644 index 0000000..b495fac --- /dev/null +++ b/bin/core/engine/interface/event/child/playerEarnedElimination.ts @@ -0,0 +1,12 @@ +import { + TeamConstantType, + EventPlayerType +} from '../../../type' + +/** + * {337} + */ +export interface IPlayerEarnedElimination { + team: TeamConstantType + player: EventPlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerJoinedMatch.ts b/bin/core/engine/interface/event/child/playerJoinedMatch.ts new file mode 100644 index 0000000..64b2b78 --- /dev/null +++ b/bin/core/engine/interface/event/child/playerJoinedMatch.ts @@ -0,0 +1,18 @@ +import { + ValueTeamType, + ValuePlayerType, +} from '../../../type' + +/** + * {711} + */ +export interface IPlayerJoinedMatch { + /** + * {712} + */ + team: ValueTeamType + /** + * {713} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerLeftMatch.ts b/bin/core/engine/interface/event/child/playerLeftMatch.ts new file mode 100644 index 0000000..950ba52 --- /dev/null +++ b/bin/core/engine/interface/event/child/playerLeftMatch.ts @@ -0,0 +1,18 @@ +import { + ValueTeamType, + ValuePlayerType, +} from '../../../type' + +/** + * {714} + */ +export interface IPlayerLeftMatch { + /** + * {715} + */ + team: ValueTeamType + /** + * {716} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerReceivedHealing.ts b/bin/core/engine/interface/event/child/playerReceivedHealing.ts new file mode 100644 index 0000000..64a5468 --- /dev/null +++ b/bin/core/engine/interface/event/child/playerReceivedHealing.ts @@ -0,0 +1,18 @@ +import { + ValueTeamType, + ValuePlayerType, +} from '../../../type' + +/** + * {708} + */ +export interface IPlayerReceivedHealing { + /** + * {709} + */ + team: ValueTeamType + /** + * {710} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/child/playerTookDamage.ts b/bin/core/engine/interface/event/child/playerTookDamage.ts new file mode 100644 index 0000000..cb67941 --- /dev/null +++ b/bin/core/engine/interface/event/child/playerTookDamage.ts @@ -0,0 +1,12 @@ +import { + TeamConstantType, + EventPlayerType +} from '../../../type' + +/** + * {340} + */ +export interface IPlayerTookDamage { + team: TeamConstantType + player: EventPlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/event.ts b/bin/core/engine/interface/event/event.ts new file mode 100644 index 0000000..b0d549f --- /dev/null +++ b/bin/core/engine/interface/event/event.ts @@ -0,0 +1,70 @@ +import { + IOnGoingGlobal, + IOnGoingEachPlayer, + IPlayerEarnedElimination, + IPlayerDealtFinalBlow, + IPlayerDealtDamage, + IPlayerTookDamage, + IPlayerDied, + IPlayerDealtHealing, + IPlayerReceivedHealing, + IPlayerJoinedMatch, + IPlayerLeftMatch, +} from './child' + +export interface IEvent { + /** + * {335} + */ + ongoingGlobal: IOnGoingGlobal + + /** + * {336} + */ + ongoingEachPlayer: IOnGoingEachPlayer + + /** + * {337} + */ + playerEarnedElimination: IPlayerEarnedElimination + + /** + * {338} + */ + playerDealtFinalBlow: IPlayerDealtFinalBlow + + /** + * {339} + */ + playerDealtDamage: IPlayerDealtDamage + + /** + * {340} + */ + playerTookDamage: IPlayerTookDamage + + /** + * {341} + */ + playerDied: IPlayerDied + + /** + * {705} + */ + playerDealtHealing: IPlayerDealtHealing + + /** + * {708} + */ + playerReceivedHealing: IPlayerReceivedHealing + + /** + * {711} + */ + playerJoinedMatch: IPlayerJoinedMatch + + /** + * {714} + */ + playerLeftMatch: IPlayerLeftMatch +} \ No newline at end of file diff --git a/bin/core/engine/interface/event/index.ts b/bin/core/engine/interface/event/index.ts new file mode 100644 index 0000000..9f0df31 --- /dev/null +++ b/bin/core/engine/interface/event/index.ts @@ -0,0 +1,2 @@ +export * from './event' +export * from './child' \ No newline at end of file diff --git a/bin/core/engine/interface/index.ts b/bin/core/engine/interface/index.ts new file mode 100644 index 0000000..9fe4e24 --- /dev/null +++ b/bin/core/engine/interface/index.ts @@ -0,0 +1,4 @@ +export * from './action' +export * from './event' +export * from './value' +export * from '../type' \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/absoluteValue.ts b/bin/core/engine/interface/value/child/absoluteValue.ts new file mode 100644 index 0000000..b81b0f3 --- /dev/null +++ b/bin/core/engine/interface/value/child/absoluteValue.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {342} + */ +export interface IAbsoluteValue { + /** + * {536} + */ + value: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/add.ts b/bin/core/engine/interface/value/child/add.ts new file mode 100644 index 0000000..c1058df --- /dev/null +++ b/bin/core/engine/interface/value/child/add.ts @@ -0,0 +1,16 @@ +import { ValueAddType } from '../../../type' + +/** + * {343} + */ +export interface IAdd { + /** + * {537} + */ + value1: ValueAddType + + /** + * {538} + */ + value2: ValueAddType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/allDeadPlayers.ts b/bin/core/engine/interface/value/child/allDeadPlayers.ts new file mode 100644 index 0000000..91f7e2a --- /dev/null +++ b/bin/core/engine/interface/value/child/allDeadPlayers.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {344} + */ +export interface IAllDeadPlayers { + /** + * {539} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/allHeroes.ts b/bin/core/engine/interface/value/child/allHeroes.ts new file mode 100644 index 0000000..c70f166 --- /dev/null +++ b/bin/core/engine/interface/value/child/allHeroes.ts @@ -0,0 +1,4 @@ +/** + * {345} + */ +export interface IAllHeroes {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/allLivingPlayers.ts b/bin/core/engine/interface/value/child/allLivingPlayers.ts new file mode 100644 index 0000000..77ce3da --- /dev/null +++ b/bin/core/engine/interface/value/child/allLivingPlayers.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {346} + */ +export interface IAllLivingPlayers { + /** + * {539} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/allPlayers.ts b/bin/core/engine/interface/value/child/allPlayers.ts new file mode 100644 index 0000000..4fee845 --- /dev/null +++ b/bin/core/engine/interface/value/child/allPlayers.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {347} + */ +export interface IAllPlayers { + /** + * {539} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/allPlayersNotOnObjective.ts b/bin/core/engine/interface/value/child/allPlayersNotOnObjective.ts new file mode 100644 index 0000000..319a846 --- /dev/null +++ b/bin/core/engine/interface/value/child/allPlayersNotOnObjective.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {348} + */ +export interface IAllPlayersNotOnObjective { + /** + * {539} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/allPlayersOnObjective.ts b/bin/core/engine/interface/value/child/allPlayersOnObjective.ts new file mode 100644 index 0000000..2e1ebbc --- /dev/null +++ b/bin/core/engine/interface/value/child/allPlayersOnObjective.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {349} + */ +export interface IAllPlayersOnObjective { + /** + * {539} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/allowedHeroes.ts b/bin/core/engine/interface/value/child/allowedHeroes.ts new file mode 100644 index 0000000..5e8c220 --- /dev/null +++ b/bin/core/engine/interface/value/child/allowedHeroes.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {350} + */ +export interface IAllowedHeroes { + /** + * {540} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/altitudeOf.ts b/bin/core/engine/interface/value/child/altitudeOf.ts new file mode 100644 index 0000000..0894da4 --- /dev/null +++ b/bin/core/engine/interface/value/child/altitudeOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {351} + */ +export interface IAltitudeOf { + /** + * {541} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/and.ts b/bin/core/engine/interface/value/child/and.ts new file mode 100644 index 0000000..807b94c --- /dev/null +++ b/bin/core/engine/interface/value/child/and.ts @@ -0,0 +1,16 @@ +import { ValueType } from '../../../type/value' + +/** + * {352} + */ +export interface IAnd { + /** + * {542} + */ + value1: ValueType + + /** + * {543} + */ + value2: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/angleBetweenVectors.ts b/bin/core/engine/interface/value/child/angleBetweenVectors.ts new file mode 100644 index 0000000..5f1ce95 --- /dev/null +++ b/bin/core/engine/interface/value/child/angleBetweenVectors.ts @@ -0,0 +1,16 @@ +import { ValueVectorType } from '../../../type' + +/** + * {353} + */ +export interface IAngleBetweenVectors { + /** + * {544} + */ + vector1: ValueVectorType + + /** + * {545} + */ + vector2: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/angleDifference.ts b/bin/core/engine/interface/value/child/angleDifference.ts new file mode 100644 index 0000000..72c000d --- /dev/null +++ b/bin/core/engine/interface/value/child/angleDifference.ts @@ -0,0 +1,16 @@ +import { ValueNumberType } from '../../../type' + +/** + * {354} + */ +export interface IAngleDifference { + /** + * {546} + */ + angle1: ValueNumberType + + /** + * {547} + */ + angle2: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/appendToArray.ts b/bin/core/engine/interface/value/child/appendToArray.ts new file mode 100644 index 0000000..0e68670 --- /dev/null +++ b/bin/core/engine/interface/value/child/appendToArray.ts @@ -0,0 +1,19 @@ +import { + ValueArrayType, + ValueType +} from '../../../type' + +/** + * {355} + */ +export interface IAppendToArray { + /** + * {548} + */ + array: ValueArrayType + + /** + * {549} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/arccosineInDegrees.ts b/bin/core/engine/interface/value/child/arccosineInDegrees.ts new file mode 100644 index 0000000..87f6df6 --- /dev/null +++ b/bin/core/engine/interface/value/child/arccosineInDegrees.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {356} + */ +export interface IArccosineInDegrees { + /** + * {550} + */ + value: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/arccosineInRadians.ts b/bin/core/engine/interface/value/child/arccosineInRadians.ts new file mode 100644 index 0000000..ea40fca --- /dev/null +++ b/bin/core/engine/interface/value/child/arccosineInRadians.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {357} + */ +export interface IArccosineInRadians { + /** + * {550} + */ + value: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/arcsineInDegrees.ts b/bin/core/engine/interface/value/child/arcsineInDegrees.ts new file mode 100644 index 0000000..7906672 --- /dev/null +++ b/bin/core/engine/interface/value/child/arcsineInDegrees.ts @@ -0,0 +1,12 @@ +import { ValueNumberType } from '../../../type' + +/** + * {358} + */ +export interface IArcsineInDegrees { + + /** + * {551} + */ + value: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/arcsineInRadians.ts b/bin/core/engine/interface/value/child/arcsineInRadians.ts new file mode 100644 index 0000000..e959e60 --- /dev/null +++ b/bin/core/engine/interface/value/child/arcsineInRadians.ts @@ -0,0 +1,12 @@ +import { ValueNumberType } from '../../../type' + +/** + * {359} + */ +export interface IArcsineInRadians { + + /** + * {551} + */ + value: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/arctangentInDegrees.ts b/bin/core/engine/interface/value/child/arctangentInDegrees.ts new file mode 100644 index 0000000..320877c --- /dev/null +++ b/bin/core/engine/interface/value/child/arctangentInDegrees.ts @@ -0,0 +1,17 @@ +import { ValueNumberType } from '../../../type' + +/** + * {360} + */ +export interface IArctangentInDegrees { + + /** + * {552} + */ + numerator: ValueNumberType + + /** + * {553} + */ + denominator: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/arctangentInRadians.ts b/bin/core/engine/interface/value/child/arctangentInRadians.ts new file mode 100644 index 0000000..5f3df45 --- /dev/null +++ b/bin/core/engine/interface/value/child/arctangentInRadians.ts @@ -0,0 +1,17 @@ +import { ValueNumberType } from '../../../type' + +/** + * {361} + */ +export interface IArctangentInRadians { + + /** + * {552} + */ + numerator: ValueNumberType + + /** + * {553} + */ + denominator: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/arrayContains.ts b/bin/core/engine/interface/value/child/arrayContains.ts new file mode 100644 index 0000000..ddc6bf9 --- /dev/null +++ b/bin/core/engine/interface/value/child/arrayContains.ts @@ -0,0 +1,19 @@ +import { + ValueArrayType, + ValueType +} from '../../../type' + +/** + * {362} + */ +export interface IArrayContains { + /** + * {554} + */ + array: ValueArrayType + + /** + * {555} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/arraySlice.ts b/bin/core/engine/interface/value/child/arraySlice.ts new file mode 100644 index 0000000..adb47fe --- /dev/null +++ b/bin/core/engine/interface/value/child/arraySlice.ts @@ -0,0 +1,24 @@ +import { + ValueArrayType, + ValueNumberType +} from '../../../type' + +/** + * {363} + */ +export interface IArraySlice { + /** + * {556} + */ + array: ValueArrayType + + /** + * {557} + */ + index: ValueNumberType + + /** + * {558} + */ + count: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/attacker.ts b/bin/core/engine/interface/value/child/attacker.ts new file mode 100644 index 0000000..caa1e72 --- /dev/null +++ b/bin/core/engine/interface/value/child/attacker.ts @@ -0,0 +1,4 @@ +/** + * {364} + */ +export interface IAttacker {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/backward.ts b/bin/core/engine/interface/value/child/backward.ts new file mode 100644 index 0000000..3a72408 --- /dev/null +++ b/bin/core/engine/interface/value/child/backward.ts @@ -0,0 +1,4 @@ +/** + * {365} + */ +export interface IBackward {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/closestPlayerTo.ts b/bin/core/engine/interface/value/child/closestPlayerTo.ts new file mode 100644 index 0000000..d272dfc --- /dev/null +++ b/bin/core/engine/interface/value/child/closestPlayerTo.ts @@ -0,0 +1,18 @@ +import { ValueVectorType } from '../../../type' +import { ValueTeamType } from '../../../type' + +/** + * {366} + */ +export interface IClosestPlayerTo { + + /** + * {559} + */ + center: ValueVectorType + + /** + * {560} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/compare.ts b/bin/core/engine/interface/value/child/compare.ts new file mode 100644 index 0000000..618ac0c --- /dev/null +++ b/bin/core/engine/interface/value/child/compare.ts @@ -0,0 +1,18 @@ +import { ValueType, ValueOperatorType } from '../../../type' + +/** + * {367} + */ +export interface ICompare { + /** + * {561} + */ + value1: ValueType + + operator: ValueOperatorType + + /** + * {562} + */ + value2: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/controlModeScoringPercentage.ts b/bin/core/engine/interface/value/child/controlModeScoringPercentage.ts new file mode 100644 index 0000000..6d820d9 --- /dev/null +++ b/bin/core/engine/interface/value/child/controlModeScoringPercentage.ts @@ -0,0 +1,12 @@ +import { ValueTeamType } from '../../../type' + +/** + * {368} + */ +export interface IControlModeScoringPercentage { + + /** + * {563} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/controlModeScoringTeam.ts b/bin/core/engine/interface/value/child/controlModeScoringTeam.ts new file mode 100644 index 0000000..cfb3222 --- /dev/null +++ b/bin/core/engine/interface/value/child/controlModeScoringTeam.ts @@ -0,0 +1,4 @@ +/** + * {369} + */ +export interface IControlModeScoringTeam {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/cosineFromDegrees.ts b/bin/core/engine/interface/value/child/cosineFromDegrees.ts new file mode 100644 index 0000000..2a99cba --- /dev/null +++ b/bin/core/engine/interface/value/child/cosineFromDegrees.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {370} + */ +export interface ICosineFromDegrees { + /** + * {564} + */ + angle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/cosineFromRadians.ts b/bin/core/engine/interface/value/child/cosineFromRadians.ts new file mode 100644 index 0000000..b567dd9 --- /dev/null +++ b/bin/core/engine/interface/value/child/cosineFromRadians.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {371} + */ +export interface ICosineFromRadians { + /** + * {565} + */ + angle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/countOf.ts b/bin/core/engine/interface/value/child/countOf.ts new file mode 100644 index 0000000..a2f59ba --- /dev/null +++ b/bin/core/engine/interface/value/child/countOf.ts @@ -0,0 +1,8 @@ +import { ValueArrayType } from '../../../type' + +/** + * {372} + */ +export interface ICountOf { + array: ValueArrayType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/crossProduct.ts b/bin/core/engine/interface/value/child/crossProduct.ts new file mode 100644 index 0000000..0b81aff --- /dev/null +++ b/bin/core/engine/interface/value/child/crossProduct.ts @@ -0,0 +1,16 @@ +import { ValueVectorType } from '../../../type' + +/** + * {373} + */ +export interface ICrossProduct { + /** + * {566} + */ + value1: ValueVectorType + + /** + * {567} + */ + value2: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/currentArrayElement.ts b/bin/core/engine/interface/value/child/currentArrayElement.ts new file mode 100644 index 0000000..789aaf1 --- /dev/null +++ b/bin/core/engine/interface/value/child/currentArrayElement.ts @@ -0,0 +1,4 @@ +/** + * {374} + */ +export interface ICurrentArrayElement {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/directionFromAngles.ts b/bin/core/engine/interface/value/child/directionFromAngles.ts new file mode 100644 index 0000000..842dc9b --- /dev/null +++ b/bin/core/engine/interface/value/child/directionFromAngles.ts @@ -0,0 +1,16 @@ +import { ValueNumberType } from '../../../type' + +/** + * {375} + */ +export interface IDirectionFromAngles { + /** + * {568} + */ + horizontalAngle: ValueNumberType + + /** + * {569} + */ + verticalAngle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/directionTowards.ts b/bin/core/engine/interface/value/child/directionTowards.ts new file mode 100644 index 0000000..9de0f33 --- /dev/null +++ b/bin/core/engine/interface/value/child/directionTowards.ts @@ -0,0 +1,16 @@ +import { ValueVectorType } from '../../../type' + +/** + * {376} + */ +export interface IDirectionTowards { + /** + * {570} + */ + startPos: ValueVectorType + + /** + * {571} + */ + endPos: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/distanceBetween.ts b/bin/core/engine/interface/value/child/distanceBetween.ts new file mode 100644 index 0000000..6e6348b --- /dev/null +++ b/bin/core/engine/interface/value/child/distanceBetween.ts @@ -0,0 +1,16 @@ +import { ValueVectorType } from '../../../type' + +/** + * {377} + */ +export interface IDistanceBetween { + /** + * {572} + */ + startPos: ValueVectorType + + /** + * {573} + */ + endPos: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/divide.ts b/bin/core/engine/interface/value/child/divide.ts new file mode 100644 index 0000000..7cd5d4c --- /dev/null +++ b/bin/core/engine/interface/value/child/divide.ts @@ -0,0 +1,16 @@ +import { ValueDivideType } from '../../../type' + +/** + * {378} + */ +export interface IDivide { + /** + * {574} + */ + value1: ValueDivideType + + /** + * {575} + */ + value2: ValueDivideType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/dotProduct.ts b/bin/core/engine/interface/value/child/dotProduct.ts new file mode 100644 index 0000000..d93dec2 --- /dev/null +++ b/bin/core/engine/interface/value/child/dotProduct.ts @@ -0,0 +1,16 @@ +import { ValueVectorType } from '../../../type' + +/** + * {379} + */ +export interface IDotProduct { + /** + * {576} + */ + value1: ValueVectorType + + /** + * {577} + */ + value2: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/down.ts b/bin/core/engine/interface/value/child/down.ts new file mode 100644 index 0000000..5cb27fc --- /dev/null +++ b/bin/core/engine/interface/value/child/down.ts @@ -0,0 +1,4 @@ +/** + * {380} + */ +export interface IDown {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/emptyArray.ts b/bin/core/engine/interface/value/child/emptyArray.ts new file mode 100644 index 0000000..9b0abdf --- /dev/null +++ b/bin/core/engine/interface/value/child/emptyArray.ts @@ -0,0 +1,4 @@ +/** + * {381} + */ +export interface IEmptyArray {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/entityExists.ts b/bin/core/engine/interface/value/child/entityExists.ts new file mode 100644 index 0000000..5e09f98 --- /dev/null +++ b/bin/core/engine/interface/value/child/entityExists.ts @@ -0,0 +1,11 @@ +import { ValueEntityType } from '../../../type' + +/** + * {382} + */ +export interface IEntityExists { + /** + * {578} + */ + entity: ValueEntityType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/eventDamage.ts b/bin/core/engine/interface/value/child/eventDamage.ts new file mode 100644 index 0000000..261f052 --- /dev/null +++ b/bin/core/engine/interface/value/child/eventDamage.ts @@ -0,0 +1,4 @@ +/** + * {383} + */ +export interface IEventDamage {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/eventHealing.ts b/bin/core/engine/interface/value/child/eventHealing.ts new file mode 100644 index 0000000..1dd22f8 --- /dev/null +++ b/bin/core/engine/interface/value/child/eventHealing.ts @@ -0,0 +1,6 @@ +import { } from '../../../type' + +/** + * {726} + */ +export interface IEventHealing {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/eventPlayer.ts b/bin/core/engine/interface/value/child/eventPlayer.ts new file mode 100644 index 0000000..1e34b21 --- /dev/null +++ b/bin/core/engine/interface/value/child/eventPlayer.ts @@ -0,0 +1,4 @@ +/** + * {384} + */ +export interface IEventPlayer {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/eventWasCriticalHit.ts b/bin/core/engine/interface/value/child/eventWasCriticalHit.ts new file mode 100644 index 0000000..7cee7f0 --- /dev/null +++ b/bin/core/engine/interface/value/child/eventWasCriticalHit.ts @@ -0,0 +1,4 @@ +/** + * {385} + */ +export interface IEventWasCriticalHit {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/eyePosition.ts b/bin/core/engine/interface/value/child/eyePosition.ts new file mode 100644 index 0000000..8c8c820 --- /dev/null +++ b/bin/core/engine/interface/value/child/eyePosition.ts @@ -0,0 +1,8 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {386} + */ +export interface IEyePosition { + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/facingDirectionOf.ts b/bin/core/engine/interface/value/child/facingDirectionOf.ts new file mode 100644 index 0000000..ebc186d --- /dev/null +++ b/bin/core/engine/interface/value/child/facingDirectionOf.ts @@ -0,0 +1,8 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {387} + */ +export interface IFacingDirectionOf { + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/false.ts b/bin/core/engine/interface/value/child/false.ts new file mode 100644 index 0000000..35399a9 --- /dev/null +++ b/bin/core/engine/interface/value/child/false.ts @@ -0,0 +1,4 @@ +/** + * {388} + */ +export interface IFalse {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/farthestPlayerFrom.ts b/bin/core/engine/interface/value/child/farthestPlayerFrom.ts new file mode 100644 index 0000000..5ee02df --- /dev/null +++ b/bin/core/engine/interface/value/child/farthestPlayerFrom.ts @@ -0,0 +1,19 @@ +import { + ValueVectorType, + ValuePlayerType, +} from '../../../type' + +/** + * {389} + */ +export interface IFarthestPlayerFrom { + /** + * {579} + */ + center: ValueVectorType + + /** + * {580} + */ + team: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/filteredArray.ts b/bin/core/engine/interface/value/child/filteredArray.ts new file mode 100644 index 0000000..0e4deb0 --- /dev/null +++ b/bin/core/engine/interface/value/child/filteredArray.ts @@ -0,0 +1,12 @@ +import { + ValueArrayType, + ValueBoolType, +} from '../../../type' + +/** + * {390} + */ +export interface IFilteredArray { + array: ValueArrayType + condition: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/firstOf.ts b/bin/core/engine/interface/value/child/firstOf.ts new file mode 100644 index 0000000..559f509 --- /dev/null +++ b/bin/core/engine/interface/value/child/firstOf.ts @@ -0,0 +1,13 @@ +import { + ValueArrayType +} from '../../../type' + +/** + * {391} + */ +export interface IFirstOf { + /** + * {581} + */ + array: ValueArrayType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/flagPosition.ts b/bin/core/engine/interface/value/child/flagPosition.ts new file mode 100644 index 0000000..4498340 --- /dev/null +++ b/bin/core/engine/interface/value/child/flagPosition.ts @@ -0,0 +1,13 @@ +import { + ValueTeamType +} from '../../../type' + +/** + * {392} + */ +export interface IFlagPosition { + /** + * {582} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/forward.ts b/bin/core/engine/interface/value/child/forward.ts new file mode 100644 index 0000000..d1d75d9 --- /dev/null +++ b/bin/core/engine/interface/value/child/forward.ts @@ -0,0 +1,4 @@ +/** + * {393} + */ +export interface IForward {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/globalVariable.ts b/bin/core/engine/interface/value/child/globalVariable.ts new file mode 100644 index 0000000..b4e68af --- /dev/null +++ b/bin/core/engine/interface/value/child/globalVariable.ts @@ -0,0 +1,8 @@ +import { VariableType } from '../../../type/variable' + +/** + * {394} + */ +export interface IGlobalVariable { + variable: VariableType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/hasSpawned.ts b/bin/core/engine/interface/value/child/hasSpawned.ts new file mode 100644 index 0000000..cd3d987 --- /dev/null +++ b/bin/core/engine/interface/value/child/hasSpawned.ts @@ -0,0 +1,10 @@ +import { + ValueEntityType +} from '../../../type' + +/** + * {395} + */ +export interface IHasSpawned { + entity: ValueEntityType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/hasStatus.ts b/bin/core/engine/interface/value/child/hasStatus.ts new file mode 100644 index 0000000..0ba1b9c --- /dev/null +++ b/bin/core/engine/interface/value/child/hasStatus.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + ValueStatusType +} from '../../../type' + +/** + * {396} + */ +export interface IHasStatus { + /** + * {583} + */ + player: ValuePlayerType + /** + * {584} + */ + status: ValueStatusType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/healee.ts b/bin/core/engine/interface/value/child/healee.ts new file mode 100644 index 0000000..89fe526 --- /dev/null +++ b/bin/core/engine/interface/value/child/healee.ts @@ -0,0 +1,6 @@ +import { } from '../../../type' + +/** + * {725} + */ +export interface IHealee {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/healer.ts b/bin/core/engine/interface/value/child/healer.ts new file mode 100644 index 0000000..ebb70f5 --- /dev/null +++ b/bin/core/engine/interface/value/child/healer.ts @@ -0,0 +1,6 @@ +import { } from '../../../type' + +/** + * {724} + */ +export interface IHealer {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/health.ts b/bin/core/engine/interface/value/child/health.ts new file mode 100644 index 0000000..490971d --- /dev/null +++ b/bin/core/engine/interface/value/child/health.ts @@ -0,0 +1,10 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {397} + */ +export interface IHealth { + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/hero.ts b/bin/core/engine/interface/value/child/hero.ts new file mode 100644 index 0000000..0419b3b --- /dev/null +++ b/bin/core/engine/interface/value/child/hero.ts @@ -0,0 +1,10 @@ +import { + HeroConstantType +} from '../../../type' + +/** + * {398} + */ +export interface IHero { + hero: HeroConstantType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/heroIconString.ts b/bin/core/engine/interface/value/child/heroIconString.ts new file mode 100644 index 0000000..bb44500 --- /dev/null +++ b/bin/core/engine/interface/value/child/heroIconString.ts @@ -0,0 +1,8 @@ +import { ValueHeroType } from '../../../type' + +/** + * {399} + */ +export interface IHeroIconString { + value: ValueHeroType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/heroOf.ts b/bin/core/engine/interface/value/child/heroOf.ts new file mode 100644 index 0000000..6ef3398 --- /dev/null +++ b/bin/core/engine/interface/value/child/heroOf.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {400} + */ +export interface IHeroOf { + /** + * {585} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/horizontalAngleFromDirection.ts b/bin/core/engine/interface/value/child/horizontalAngleFromDirection.ts new file mode 100644 index 0000000..58e8723 --- /dev/null +++ b/bin/core/engine/interface/value/child/horizontalAngleFromDirection.ts @@ -0,0 +1,13 @@ +import { + ValueVectorType +} from '../../../type' + +/** + * {401} + */ +export interface IHorizontalAngleFromDirection { + /** + * {586} + */ + direction: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/horizontalAngleTowards.ts b/bin/core/engine/interface/value/child/horizontalAngleTowards.ts new file mode 100644 index 0000000..85226b0 --- /dev/null +++ b/bin/core/engine/interface/value/child/horizontalAngleTowards.ts @@ -0,0 +1,18 @@ +import { + ValueVectorType, + ValuePlayerType, +} from '../../../type' + +/** + * {402} + */ +export interface IHorizontalAngleTowards { + /** + * {587} + */ + player: ValuePlayerType + /** + * {588} + */ + position: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/horizontalFacingAngleOf.ts b/bin/core/engine/interface/value/child/horizontalFacingAngleOf.ts new file mode 100644 index 0000000..81b9d8d --- /dev/null +++ b/bin/core/engine/interface/value/child/horizontalFacingAngleOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {403} + */ +export interface IHorizontalFacingAngleOf { + /** + * {589} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/horizontalSpeedOf.ts b/bin/core/engine/interface/value/child/horizontalSpeedOf.ts new file mode 100644 index 0000000..d8baff6 --- /dev/null +++ b/bin/core/engine/interface/value/child/horizontalSpeedOf.ts @@ -0,0 +1,8 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {404} + */ +export interface IHorizontalSpeedOf { + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/hostPlayer.ts b/bin/core/engine/interface/value/child/hostPlayer.ts new file mode 100644 index 0000000..9e468b1 --- /dev/null +++ b/bin/core/engine/interface/value/child/hostPlayer.ts @@ -0,0 +1,6 @@ +import { } from '../../../type' + +/** + * {727} + */ +export interface IHostPlayer {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/index.ts b/bin/core/engine/interface/value/child/index.ts new file mode 100644 index 0000000..e3b522b --- /dev/null +++ b/bin/core/engine/interface/value/child/index.ts @@ -0,0 +1,199 @@ +export * from './absoluteValue' +export * from './allDeadPlayers' +export * from './allLivingPlayers' +export * from './allPlayers' +export * from './allPlayersNotOnObjective' +export * from './allPlayersOnObjective' +export * from './globalVariable' +export * from './playerVariable' +export * from './allowedHeroes' +export * from './altitudeOf' +export * from './and' +export * from './vector' +export * from './localVectorOf' +export * from './worldVectorOf' +export * from './vectorTowards' +export * from './number' +export * from './add' +export * from './angleBetweenVectors' +export * from './angleDifference' +export * from './allHeroes' +export * from './appendToArray' +export * from './arccosineInDegrees' +export * from './arccosineInRadians' +export * from './arcsineInDegrees' +export * from './arcsineInRadians' +export * from './arctangentInDegrees' +export * from './arctangentInRadians' +export * from './arrayContains' +export * from './arraySlice' +export * from './attacker' +export * from './backward' +export * from './team' +export * from './closestPlayerTo' +export * from './compare' +export * from './controlModeScoringPercentage' +export * from './controlModeScoringTeam' +export * from './cosineFromDegrees' +export * from './cosineFromRadians' +export * from './countOf' +export * from './crossProduct' +export * from './currentArrayElement' +export * from './directionFromAngles' +export * from './directionTowards' +export * from './distanceBetween' +export * from './dotProduct' +export * from './down' +export * from './divide' +export * from './emptyArray' +export * from './entityExists' +export * from './eventDamage' +export * from './eventPlayer' +export * from './eventWasCriticalHit' +export * from './eyePosition' +export * from './facingDirectionOf' +export * from './false' +export * from './farthestPlayerFrom' +export * from './filteredArray' +export * from './firstOf' +export * from './flagPosition' +export * from './forward' +export * from './hasSpawned' +export * from './hasStatus' +export * from './health' +export * from './hero' +export * from './heroIconString' +export * from './heroOf' +export * from './horizontalAngleFromDirection' +export * from './horizontalAngleTowards' +export * from './horizontalFacingAngleOf' +export * from './horizontalSpeedOf' +export * from './indexOfArrayValue' +export * from './isAlive' +export * from './isAssemblingHeroes' +export * from './isBetweenRounds' +export * from './isButtonHeld' +export * from './isCommunicating' +export * from './isCommunicatingAny' +export * from './isCommunicatingAnyEmote' +export * from './isCommunicatingAnyVoiceLine' +export * from './isControlModePointLocked' +export * from './isCrouching' +export * from './isCTFModeInSuddenDeath' +export * from './isDead' +export * from './isFiringPrimary' +export * from './isFiringSecondary' +export * from './isFlagAtBase' +export * from './isFlagBeingCarried' +export * from './isGameInProgress' +export * from './isHeroBeingPlayed' +export * from './isInAir' +export * from './isInLineOfSight' +export * from './isInSetup' +export * from './isInSpawnRoom' +export * from './isInViewAngle' +export * from './isMatchComplete' +export * from './isMoving' +export * from './isObjectiveComplete' +export * from './isOnGround' +export * from './isOnObjective' +export * from './isOnWall' +export * from './isPortraitOnFire' +export * from './isStanding' +export * from './isTeamOnDefense' +export * from './isTeamOnOffense' +export * from './isTrueForAll' +export * from './isTrueForAny' +export * from './isUsingAbility1' +export * from './isUsingAbility2' +export * from './isUsingUltimate' +export * from './isWaitingForPlayers' +export * from './lastCreatedEntity' +export * from './lastDamageModificationId' +export * from './lastDamageOverTimeId' +export * from './lastHealOverTimeId' +export * from './lastOf' +export * from './lastTextId' +export * from './left' +export * from './matchRound' +export * from './matchTime' +export * from './max' +export * from './maxHealth' +export * from './min' +export * from './modulo' +export * from './multiply' +export * from './nearestWalkablePosition' +export * from './normalize' +export * from './normalizedHealth' +export * from './not' +export * from './null' +export * from './numberOfDeadPlayers' +export * from './numberOfDeaths' +export * from './numberOfEliminations' +export * from './numberOfFinalBlows' +export * from './numberOfHeroes' +export * from './numberOfLivingPlayers' +export * from './numberOfPlayers' +export * from './numberOfPlayersOnObjective' +export * from './objectiveIndex' +export * from './objectivePosition' +export * from './oppositeTeamOf' +export * from './or' +export * from './payloadPosition' +export * from './payloadProgressPercentage' +export * from './playerCarryingFlag' +export * from './playerClosestToReticle' +export * from './playersInSlot' +export * from './playersInViewAngle' +export * from './playersOnHero' +export * from './playersWithinRadius' +export * from './pointCapturePercentage' +export * from './positionOf' +export * from './raiseToPower' +export * from './randomInteger' +export * from './randomReal' +export * from './randomValueInArray' +export * from './randomizedArray' +export * from './rayCastHitNormal' +export * from './rayCastHitPlayer' +export * from './rayCastHitPosition' +export * from './removeFromArray' +export * from './right' +export * from './roundToInteger' +export * from './scoreOf' +export * from './sineFromDegrees' +export * from './sineFromRadians' +export * from './slotOf' +export * from './sortedArray' +export * from './speedOf' +export * from './speedOfInDirection' +export * from './squareRoot' +export * from './string' +export * from './subtract' +export * from './tangentFromDegrees' +export * from './tangentFromRadians' +export * from './teamOf' +export * from './teamScore' +export * from './throttleOf' +export * from './totalTimeElapsed' +export * from './true' +export * from './ultimateChargePercent' +export * from './up' +export * from './valueInArray' +export * from './velocityOf' +export * from './verticalAngleFromDirection' +export * from './verticalAngleTowards' +export * from './verticalFacingAngleOf' +export * from './verticalSpeedOf' +export * from './victim' +export * from './xComponentOf' +export * from './yComponentOf' +export * from './zComponentOf' +export * from './serverLoad' +export * from './serverLoadAverage' +export * from './serverLoadPeak' +export * from './healer' +export * from './healee' +export * from './eventHealing' +export * from './hostPlayer' +export * from './isDummyBot' \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/indexOfArrayValue.ts b/bin/core/engine/interface/value/child/indexOfArrayValue.ts new file mode 100644 index 0000000..e249c3e --- /dev/null +++ b/bin/core/engine/interface/value/child/indexOfArrayValue.ts @@ -0,0 +1,18 @@ +import { + ValueArrayType, + ValueType +} from '../../../type' + +/** + * {405} + */ +export interface IIndexOfArrayValue { + /** + * {554} + */ + array: ValueArrayType + /** + * {555} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isAlive.ts b/bin/core/engine/interface/value/child/isAlive.ts new file mode 100644 index 0000000..05eb179 --- /dev/null +++ b/bin/core/engine/interface/value/child/isAlive.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {406} + */ +export interface IIsAlive { + /** + * {590} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isAssemblingHeroes.ts b/bin/core/engine/interface/value/child/isAssemblingHeroes.ts new file mode 100644 index 0000000..42b32a9 --- /dev/null +++ b/bin/core/engine/interface/value/child/isAssemblingHeroes.ts @@ -0,0 +1,4 @@ +/** + * {407} + */ +export interface IIsAssemblingHeroes {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isBetweenRounds.ts b/bin/core/engine/interface/value/child/isBetweenRounds.ts new file mode 100644 index 0000000..fa86dd1 --- /dev/null +++ b/bin/core/engine/interface/value/child/isBetweenRounds.ts @@ -0,0 +1,4 @@ +/** + * {408} + */ +export interface IIsBetweenRounds {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isButtonHeld.ts b/bin/core/engine/interface/value/child/isButtonHeld.ts new file mode 100644 index 0000000..ad0d6aa --- /dev/null +++ b/bin/core/engine/interface/value/child/isButtonHeld.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + ValueButtonType +} from '../../../type' + +/** + * {409} + */ +export interface IIsButtonHeld { + /** + * {591} + */ + player: ValuePlayerType + /** + * {592} + */ + button: ValueButtonType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isCTFModeInSuddenDeath.ts b/bin/core/engine/interface/value/child/isCTFModeInSuddenDeath.ts new file mode 100644 index 0000000..7063d85 --- /dev/null +++ b/bin/core/engine/interface/value/child/isCTFModeInSuddenDeath.ts @@ -0,0 +1,4 @@ +/** + * {416} + */ +export interface IIsCTFModeInSuddenDeath {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isCommunicating.ts b/bin/core/engine/interface/value/child/isCommunicating.ts new file mode 100644 index 0000000..e36e00c --- /dev/null +++ b/bin/core/engine/interface/value/child/isCommunicating.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + ValueCommunicationType +} from '../../../type' + +/** + * {410} + */ +export interface IIsCommunicating { + /** + * {593} + */ + player: ValuePlayerType + /** + * {594} + */ + type: ValueCommunicationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isCommunicatingAny.ts b/bin/core/engine/interface/value/child/isCommunicatingAny.ts new file mode 100644 index 0000000..42a0b10 --- /dev/null +++ b/bin/core/engine/interface/value/child/isCommunicatingAny.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {411} + */ +export interface IIsCommunicatingAny { + /** + * {593} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isCommunicatingAnyEmote.ts b/bin/core/engine/interface/value/child/isCommunicatingAnyEmote.ts new file mode 100644 index 0000000..1a61070 --- /dev/null +++ b/bin/core/engine/interface/value/child/isCommunicatingAnyEmote.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {412} + */ +export interface IIsCommunicatingAnyEmote { + /** + * {595} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isCommunicatingAnyVoiceLine.ts b/bin/core/engine/interface/value/child/isCommunicatingAnyVoiceLine.ts new file mode 100644 index 0000000..c9eb352 --- /dev/null +++ b/bin/core/engine/interface/value/child/isCommunicatingAnyVoiceLine.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {413} + */ +export interface IIsCommunicatingAnyVoiceLine { + /** + * {596} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isControlModePointLocked.ts b/bin/core/engine/interface/value/child/isControlModePointLocked.ts new file mode 100644 index 0000000..96115c8 --- /dev/null +++ b/bin/core/engine/interface/value/child/isControlModePointLocked.ts @@ -0,0 +1,4 @@ +/** + * {414} + */ +export interface IIsControlModePointLocked {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isCrouching.ts b/bin/core/engine/interface/value/child/isCrouching.ts new file mode 100644 index 0000000..8d0f185 --- /dev/null +++ b/bin/core/engine/interface/value/child/isCrouching.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {415} + */ +export interface IIsCrouching { + /** + * {597} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isDead.ts b/bin/core/engine/interface/value/child/isDead.ts new file mode 100644 index 0000000..b00c451 --- /dev/null +++ b/bin/core/engine/interface/value/child/isDead.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {417} + */ +export interface IIsDead { + /** + * {598} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isDummyBot.ts b/bin/core/engine/interface/value/child/isDummyBot.ts new file mode 100644 index 0000000..535b99c --- /dev/null +++ b/bin/core/engine/interface/value/child/isDummyBot.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {754} + */ +export interface IIsDummyBot { + /** + * {755} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isFiringPrimary.ts b/bin/core/engine/interface/value/child/isFiringPrimary.ts new file mode 100644 index 0000000..c9db432 --- /dev/null +++ b/bin/core/engine/interface/value/child/isFiringPrimary.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {418} + */ +export interface IIsFiringPrimary { + /** + * {599} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isFiringSecondary.ts b/bin/core/engine/interface/value/child/isFiringSecondary.ts new file mode 100644 index 0000000..4baf8e8 --- /dev/null +++ b/bin/core/engine/interface/value/child/isFiringSecondary.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {419} + */ +export interface IIsFiringSecondary { + /** + * {600} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isFlagAtBase.ts b/bin/core/engine/interface/value/child/isFlagAtBase.ts new file mode 100644 index 0000000..4194866 --- /dev/null +++ b/bin/core/engine/interface/value/child/isFlagAtBase.ts @@ -0,0 +1,13 @@ +import { + ValueTeamType +} from '../../../type' + +/** + * {420} + */ +export interface IIsFlagAtBase { + /** + * {601} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isFlagBeingCarried.ts b/bin/core/engine/interface/value/child/isFlagBeingCarried.ts new file mode 100644 index 0000000..3e9d12a --- /dev/null +++ b/bin/core/engine/interface/value/child/isFlagBeingCarried.ts @@ -0,0 +1,13 @@ +import { + ValueTeamType +} from '../../../type' + +/** + * {421} + */ +export interface IIsFlagBeingCarried { + /** + * {601} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isGameInProgress.ts b/bin/core/engine/interface/value/child/isGameInProgress.ts new file mode 100644 index 0000000..714ca7a --- /dev/null +++ b/bin/core/engine/interface/value/child/isGameInProgress.ts @@ -0,0 +1,4 @@ +/** + * {422} + */ +export interface IIsGameInProgress {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isHeroBeingPlayed.ts b/bin/core/engine/interface/value/child/isHeroBeingPlayed.ts new file mode 100644 index 0000000..435a97e --- /dev/null +++ b/bin/core/engine/interface/value/child/isHeroBeingPlayed.ts @@ -0,0 +1,18 @@ +import { + ValueHeroType, + ValueTeamType, +} from '../../../type' + +/** + * {423} + */ +export interface IIsHeroBeingPlayed { + /** + * {602} + */ + hero: ValueHeroType + /** + * {603} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isInAir.ts b/bin/core/engine/interface/value/child/isInAir.ts new file mode 100644 index 0000000..d0bc725 --- /dev/null +++ b/bin/core/engine/interface/value/child/isInAir.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType +} from '../../../type' + +/** + * {424} + */ +export interface IIsInAir { + /** + * {604} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isInLineOfSight.ts b/bin/core/engine/interface/value/child/isInLineOfSight.ts new file mode 100644 index 0000000..9c4c0d0 --- /dev/null +++ b/bin/core/engine/interface/value/child/isInLineOfSight.ts @@ -0,0 +1,22 @@ +import { + ValueVectorType, + ValueBarrierType, +} from '../../../type' + +/** + * {425} + */ +export interface IIsInLineOfSight { + /** + * {605} + */ + startPos: ValueVectorType + /** + * {606} + */ + endPos: ValueVectorType + /** + * {607} + */ + barriers: ValueBarrierType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isInSetup.ts b/bin/core/engine/interface/value/child/isInSetup.ts new file mode 100644 index 0000000..83a1cc8 --- /dev/null +++ b/bin/core/engine/interface/value/child/isInSetup.ts @@ -0,0 +1,4 @@ +/** + * {426} + */ +export interface IIsInSetup {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isInSpawnRoom.ts b/bin/core/engine/interface/value/child/isInSpawnRoom.ts new file mode 100644 index 0000000..6901d3a --- /dev/null +++ b/bin/core/engine/interface/value/child/isInSpawnRoom.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {427} + */ +export interface IIsInSpawnRoom { + /** + * {608} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isInViewAngle.ts b/bin/core/engine/interface/value/child/isInViewAngle.ts new file mode 100644 index 0000000..78ec985 --- /dev/null +++ b/bin/core/engine/interface/value/child/isInViewAngle.ts @@ -0,0 +1,23 @@ +import { + ValuePlayerType, + ValueVectorType, + ValueNumberType +} from '../../../type' + +/** + * {428} + */ +export interface IIsInViewAngle { + /** + * {609} + */ + player: ValuePlayerType + /** + * {610} + */ + location: ValueVectorType + /** + * {611} + */ + viewAngle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isMatchComplete.ts b/bin/core/engine/interface/value/child/isMatchComplete.ts new file mode 100644 index 0000000..8546f9f --- /dev/null +++ b/bin/core/engine/interface/value/child/isMatchComplete.ts @@ -0,0 +1,4 @@ +/** + * {429} + */ +export interface IIsMatchComplete {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isMoving.ts b/bin/core/engine/interface/value/child/isMoving.ts new file mode 100644 index 0000000..351316a --- /dev/null +++ b/bin/core/engine/interface/value/child/isMoving.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType, +} from '../../../type' + +/** + * {430} + */ +export interface IIsMoving { + /** + * {612} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isObjectiveComplete.ts b/bin/core/engine/interface/value/child/isObjectiveComplete.ts new file mode 100644 index 0000000..ca865d9 --- /dev/null +++ b/bin/core/engine/interface/value/child/isObjectiveComplete.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {431} + */ +export interface IIsObjectiveComplete { + /** + * {613} + */ + number: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isOnGround.ts b/bin/core/engine/interface/value/child/isOnGround.ts new file mode 100644 index 0000000..e8dd6ef --- /dev/null +++ b/bin/core/engine/interface/value/child/isOnGround.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType, +} from '../../../type' + +/** + * {432} + */ +export interface IIsOnGround { + /** + * {614} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isOnObjective.ts b/bin/core/engine/interface/value/child/isOnObjective.ts new file mode 100644 index 0000000..0384ef8 --- /dev/null +++ b/bin/core/engine/interface/value/child/isOnObjective.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType, +} from '../../../type' + +/** + * {433} + */ +export interface IIsOnObjective { + /** + * {615} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isOnWall.ts b/bin/core/engine/interface/value/child/isOnWall.ts new file mode 100644 index 0000000..7771e48 --- /dev/null +++ b/bin/core/engine/interface/value/child/isOnWall.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType, +} from '../../../type' + +/** + * {434} + */ +export interface IIsOnWall { + /** + * {616} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isPortraitOnFire.ts b/bin/core/engine/interface/value/child/isPortraitOnFire.ts new file mode 100644 index 0000000..d57a3dd --- /dev/null +++ b/bin/core/engine/interface/value/child/isPortraitOnFire.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType, +} from '../../../type' + +/** + * {435} + */ +export interface IIsPortraitOnFire { + /** + * {617} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isStanding.ts b/bin/core/engine/interface/value/child/isStanding.ts new file mode 100644 index 0000000..503e372 --- /dev/null +++ b/bin/core/engine/interface/value/child/isStanding.ts @@ -0,0 +1,13 @@ +import { + ValuePlayerType, +} from '../../../type' + +/** + * {436} + */ +export interface IIsStanding { + /** + * {618} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isTeamOnDefense.ts b/bin/core/engine/interface/value/child/isTeamOnDefense.ts new file mode 100644 index 0000000..dd8e5b6 --- /dev/null +++ b/bin/core/engine/interface/value/child/isTeamOnDefense.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {437} + */ +export interface IIsTeamOnDefense { + /** + * {619} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isTeamOnOffense.ts b/bin/core/engine/interface/value/child/isTeamOnOffense.ts new file mode 100644 index 0000000..400c29a --- /dev/null +++ b/bin/core/engine/interface/value/child/isTeamOnOffense.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {438} + */ +export interface IIsTeamOnOffense { + /** + * {619} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isTrueForAll.ts b/bin/core/engine/interface/value/child/isTrueForAll.ts new file mode 100644 index 0000000..43a10ae --- /dev/null +++ b/bin/core/engine/interface/value/child/isTrueForAll.ts @@ -0,0 +1,19 @@ +import { + ValueArrayType, + ValueBoolType, +} from '../../../type' + +/** + * {439} + */ +export interface IIsTrueForAll { + /** + * {620} + */ + array: ValueArrayType + + /** + * {621} + */ + condition: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isTrueForAny.ts b/bin/core/engine/interface/value/child/isTrueForAny.ts new file mode 100644 index 0000000..52a1d9a --- /dev/null +++ b/bin/core/engine/interface/value/child/isTrueForAny.ts @@ -0,0 +1,19 @@ +import { + ValueArrayType, + ValueBoolType, +} from '../../../type' + +/** + * {440} + */ +export interface IIsTrueForAny { + /** + * {620} + */ + array: ValueArrayType + + /** + * {621} + */ + condition: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isUsingAbility1.ts b/bin/core/engine/interface/value/child/isUsingAbility1.ts new file mode 100644 index 0000000..cf517c5 --- /dev/null +++ b/bin/core/engine/interface/value/child/isUsingAbility1.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {441} + */ +export interface IIsUsingAbility1 { + /** + * {622} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isUsingAbility2.ts b/bin/core/engine/interface/value/child/isUsingAbility2.ts new file mode 100644 index 0000000..284f7c2 --- /dev/null +++ b/bin/core/engine/interface/value/child/isUsingAbility2.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {442} + */ +export interface IIsUsingAbility2 { + /** + * {623} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isUsingUltimate.ts b/bin/core/engine/interface/value/child/isUsingUltimate.ts new file mode 100644 index 0000000..aaeab73 --- /dev/null +++ b/bin/core/engine/interface/value/child/isUsingUltimate.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {443} + */ +export interface IIsUsingUltimate { + /** + * {624} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/isWaitingForPlayers.ts b/bin/core/engine/interface/value/child/isWaitingForPlayers.ts new file mode 100644 index 0000000..a94b7c8 --- /dev/null +++ b/bin/core/engine/interface/value/child/isWaitingForPlayers.ts @@ -0,0 +1,4 @@ +/** + * {444} + */ +export interface IIsWaitingForPlayers {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/lastCreatedEntity.ts b/bin/core/engine/interface/value/child/lastCreatedEntity.ts new file mode 100644 index 0000000..d597035 --- /dev/null +++ b/bin/core/engine/interface/value/child/lastCreatedEntity.ts @@ -0,0 +1,4 @@ +/** + * {445} + */ +export interface ILastCreatedEntity {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/lastDamageModificationId.ts b/bin/core/engine/interface/value/child/lastDamageModificationId.ts new file mode 100644 index 0000000..77d4797 --- /dev/null +++ b/bin/core/engine/interface/value/child/lastDamageModificationId.ts @@ -0,0 +1,4 @@ +/** + * {446} + */ +export interface ILastDamageModificationId {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/lastDamageOverTimeId.ts b/bin/core/engine/interface/value/child/lastDamageOverTimeId.ts new file mode 100644 index 0000000..827b864 --- /dev/null +++ b/bin/core/engine/interface/value/child/lastDamageOverTimeId.ts @@ -0,0 +1,4 @@ +/** + * {447} + */ +export interface ILastDamageOverTimeId {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/lastHealOverTimeId.ts b/bin/core/engine/interface/value/child/lastHealOverTimeId.ts new file mode 100644 index 0000000..4309401 --- /dev/null +++ b/bin/core/engine/interface/value/child/lastHealOverTimeId.ts @@ -0,0 +1,4 @@ +/** + * {448} + */ +export interface ILastHealOverTimeId {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/lastOf.ts b/bin/core/engine/interface/value/child/lastOf.ts new file mode 100644 index 0000000..9e6941b --- /dev/null +++ b/bin/core/engine/interface/value/child/lastOf.ts @@ -0,0 +1,11 @@ +import { ValueArrayType } from '../../../type' + +/** + * {449} + */ +export interface ILastOf { + /** + * {581} + */ + array: ValueArrayType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/lastTextId.ts b/bin/core/engine/interface/value/child/lastTextId.ts new file mode 100644 index 0000000..4b30186 --- /dev/null +++ b/bin/core/engine/interface/value/child/lastTextId.ts @@ -0,0 +1,4 @@ +/** + * {450} + */ +export interface ILastTextId {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/left.ts b/bin/core/engine/interface/value/child/left.ts new file mode 100644 index 0000000..689741f --- /dev/null +++ b/bin/core/engine/interface/value/child/left.ts @@ -0,0 +1,4 @@ +/** + * {451} + */ +export interface ILeft {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/localVectorOf.ts b/bin/core/engine/interface/value/child/localVectorOf.ts new file mode 100644 index 0000000..737e1d2 --- /dev/null +++ b/bin/core/engine/interface/value/child/localVectorOf.ts @@ -0,0 +1,25 @@ +import { + ValueVectorType, + ValuePlayerType, + ValueTransformationType +} from '../../../type' + +/** + * {452} + */ +export interface ILocalVectorOf { + /** + * {625} + */ + worldVector: ValueVectorType + + /** + * {626} + */ + relativePlayer: ValuePlayerType + + /** + * {627} + */ + transformation: ValueTransformationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/matchRound.ts b/bin/core/engine/interface/value/child/matchRound.ts new file mode 100644 index 0000000..5ea3fb2 --- /dev/null +++ b/bin/core/engine/interface/value/child/matchRound.ts @@ -0,0 +1,4 @@ +/** + * {453} + */ +export interface IMatchRound {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/matchTime.ts b/bin/core/engine/interface/value/child/matchTime.ts new file mode 100644 index 0000000..07f2873 --- /dev/null +++ b/bin/core/engine/interface/value/child/matchTime.ts @@ -0,0 +1,4 @@ +/** + * {454} + */ +export interface IMatchTime {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/max.ts b/bin/core/engine/interface/value/child/max.ts new file mode 100644 index 0000000..a22a584 --- /dev/null +++ b/bin/core/engine/interface/value/child/max.ts @@ -0,0 +1,9 @@ +import { ValueNumberType } from '../../../type' + +/** + * {455} + */ +export interface IMax { + value1: ValueNumberType + value2: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/maxHealth.ts b/bin/core/engine/interface/value/child/maxHealth.ts new file mode 100644 index 0000000..ca0d76a --- /dev/null +++ b/bin/core/engine/interface/value/child/maxHealth.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {456} + */ +export interface IMaxHealth { + /** + * {628} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/min.ts b/bin/core/engine/interface/value/child/min.ts new file mode 100644 index 0000000..4a2dd35 --- /dev/null +++ b/bin/core/engine/interface/value/child/min.ts @@ -0,0 +1,15 @@ +import { ValueNumberType } from '../../../type' + +/** + * {457} + */ +export interface IMin { + /** + * {629} + */ + value1: ValueNumberType + /** + * {630} + */ + value2: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/modulo.ts b/bin/core/engine/interface/value/child/modulo.ts new file mode 100644 index 0000000..6edd061 --- /dev/null +++ b/bin/core/engine/interface/value/child/modulo.ts @@ -0,0 +1,9 @@ +import { ValueNumberType } from '../../../type' + +/** + * {458} + */ +export interface IModulo { + value1: ValueNumberType + value2: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/multiply.ts b/bin/core/engine/interface/value/child/multiply.ts new file mode 100644 index 0000000..f6d1b6c --- /dev/null +++ b/bin/core/engine/interface/value/child/multiply.ts @@ -0,0 +1,15 @@ +import { ValueMultiplyType } from '../../../type' + +/** + * {459} + */ +export interface IMultiply { + /** + * {629} + */ + value1: ValueMultiplyType + /** + * {630} + */ + value2: ValueMultiplyType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/nearestWalkablePosition.ts b/bin/core/engine/interface/value/child/nearestWalkablePosition.ts new file mode 100644 index 0000000..c492af0 --- /dev/null +++ b/bin/core/engine/interface/value/child/nearestWalkablePosition.ts @@ -0,0 +1,11 @@ +import { ValueVectorType } from '../../../type' + +/** + * {460} + */ +export interface INearestWalkablePosition { + /** + * {631} + */ + position: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/normalize.ts b/bin/core/engine/interface/value/child/normalize.ts new file mode 100644 index 0000000..6ef28b8 --- /dev/null +++ b/bin/core/engine/interface/value/child/normalize.ts @@ -0,0 +1,11 @@ +import { ValueVectorType } from '../../../type' + +/** + * {461} + */ +export interface INormalize { + /** + * {632} + */ + position: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/normalizedHealth.ts b/bin/core/engine/interface/value/child/normalizedHealth.ts new file mode 100644 index 0000000..f8aabf3 --- /dev/null +++ b/bin/core/engine/interface/value/child/normalizedHealth.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {462} + */ +export interface INormalizedHealth { + /** + * {633} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/not.ts b/bin/core/engine/interface/value/child/not.ts new file mode 100644 index 0000000..1fde411 --- /dev/null +++ b/bin/core/engine/interface/value/child/not.ts @@ -0,0 +1,11 @@ +import { ValueBoolType } from '../../../type' + +/** + * {463} + */ +export interface INot { + /** + * {634} + */ + value: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/null.ts b/bin/core/engine/interface/value/child/null.ts new file mode 100644 index 0000000..e6d198c --- /dev/null +++ b/bin/core/engine/interface/value/child/null.ts @@ -0,0 +1,4 @@ +/** + * {464} + */ +export interface INull {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/number.ts b/bin/core/engine/interface/value/child/number.ts new file mode 100644 index 0000000..7126e47 --- /dev/null +++ b/bin/core/engine/interface/value/child/number.ts @@ -0,0 +1,9 @@ +/** + * {465} + */ +export interface INumber { + /** + * {465} + */ + number: number +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/numberOfDeadPlayers.ts b/bin/core/engine/interface/value/child/numberOfDeadPlayers.ts new file mode 100644 index 0000000..f24a0bd --- /dev/null +++ b/bin/core/engine/interface/value/child/numberOfDeadPlayers.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {466} + */ +export interface INumberOfDeadPlayers { + /** + * {635} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/numberOfDeaths.ts b/bin/core/engine/interface/value/child/numberOfDeaths.ts new file mode 100644 index 0000000..4238be3 --- /dev/null +++ b/bin/core/engine/interface/value/child/numberOfDeaths.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {467} + */ +export interface INumberOfDeaths { + /** + * {636} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/numberOfEliminations.ts b/bin/core/engine/interface/value/child/numberOfEliminations.ts new file mode 100644 index 0000000..0f16248 --- /dev/null +++ b/bin/core/engine/interface/value/child/numberOfEliminations.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {468} + */ +export interface INumberOfEliminations { + /** + * {637} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/numberOfFinalBlows.ts b/bin/core/engine/interface/value/child/numberOfFinalBlows.ts new file mode 100644 index 0000000..4b1dd6d --- /dev/null +++ b/bin/core/engine/interface/value/child/numberOfFinalBlows.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {469} + */ +export interface INumberOfFinalBlows { + /** + * {638} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/numberOfHeroes.ts b/bin/core/engine/interface/value/child/numberOfHeroes.ts new file mode 100644 index 0000000..5c95e19 --- /dev/null +++ b/bin/core/engine/interface/value/child/numberOfHeroes.ts @@ -0,0 +1,18 @@ +import { + ValueHeroType, + ValueTeamType +} from '../../../type' + +/** + * {470} + */ +export interface INumberOfHeroes { + /** + * {602} + */ + hero: ValueHeroType + /** + * {603} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/numberOfLivingPlayers.ts b/bin/core/engine/interface/value/child/numberOfLivingPlayers.ts new file mode 100644 index 0000000..b228663 --- /dev/null +++ b/bin/core/engine/interface/value/child/numberOfLivingPlayers.ts @@ -0,0 +1,13 @@ +import { + ValueTeamType +} from '../../../type' + +/** + * {471} + */ +export interface INumberOfLivingPlayers { + /** + * {635} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/numberOfPlayers.ts b/bin/core/engine/interface/value/child/numberOfPlayers.ts new file mode 100644 index 0000000..613706f --- /dev/null +++ b/bin/core/engine/interface/value/child/numberOfPlayers.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {472} + */ +export interface INumberOfPlayers { + /** + * {635} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/numberOfPlayersOnObjective.ts b/bin/core/engine/interface/value/child/numberOfPlayersOnObjective.ts new file mode 100644 index 0000000..73d02e0 --- /dev/null +++ b/bin/core/engine/interface/value/child/numberOfPlayersOnObjective.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {473} + */ +export interface INumberOfPlayersOnObjective { + /** + * {635} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/objectiveIndex.ts b/bin/core/engine/interface/value/child/objectiveIndex.ts new file mode 100644 index 0000000..dfd464d --- /dev/null +++ b/bin/core/engine/interface/value/child/objectiveIndex.ts @@ -0,0 +1,4 @@ +/** + * {474} + */ +export interface IObjectiveIndex {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/objectivePosition.ts b/bin/core/engine/interface/value/child/objectivePosition.ts new file mode 100644 index 0000000..4e47e33 --- /dev/null +++ b/bin/core/engine/interface/value/child/objectivePosition.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {475} + */ +export interface IObjectivePosition { + /** + * {639} + */ + number: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/oppositeTeamOf.ts b/bin/core/engine/interface/value/child/oppositeTeamOf.ts new file mode 100644 index 0000000..e2cd83c --- /dev/null +++ b/bin/core/engine/interface/value/child/oppositeTeamOf.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {476} + */ +export interface IOppositeTeamOf { + /** + * {640} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/or.ts b/bin/core/engine/interface/value/child/or.ts new file mode 100644 index 0000000..18721df --- /dev/null +++ b/bin/core/engine/interface/value/child/or.ts @@ -0,0 +1,15 @@ +import { ValueType } from '../../../type' + +/** + * {477} + */ +export interface IOr { + /** + * {641} + */ + value1: ValueType + /** + * {642} + */ + value2: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/payloadPosition.ts b/bin/core/engine/interface/value/child/payloadPosition.ts new file mode 100644 index 0000000..232fc7d --- /dev/null +++ b/bin/core/engine/interface/value/child/payloadPosition.ts @@ -0,0 +1,4 @@ +/** + * {478} + */ +export interface IPayloadPosition {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/payloadProgressPercentage.ts b/bin/core/engine/interface/value/child/payloadProgressPercentage.ts new file mode 100644 index 0000000..2a17a56 --- /dev/null +++ b/bin/core/engine/interface/value/child/payloadProgressPercentage.ts @@ -0,0 +1,4 @@ +/** + * {479} + */ +export interface IPayloadProgressPercentage {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/playerCarryingFlag.ts b/bin/core/engine/interface/value/child/playerCarryingFlag.ts new file mode 100644 index 0000000..d987d0b --- /dev/null +++ b/bin/core/engine/interface/value/child/playerCarryingFlag.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {480} + */ +export interface IPlayerCarryingFlag { + /** + * {601} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/playerClosestToReticle.ts b/bin/core/engine/interface/value/child/playerClosestToReticle.ts new file mode 100644 index 0000000..479ebd7 --- /dev/null +++ b/bin/core/engine/interface/value/child/playerClosestToReticle.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType, + ValueTeamType, +} from '../../../type' + +/** + * {481} + */ +export interface IPlayerClosestToReticle { + /** + * {643} + */ + player: ValuePlayerType + /** + * {644} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/playerVariable.ts b/bin/core/engine/interface/value/child/playerVariable.ts new file mode 100644 index 0000000..54f5a91 --- /dev/null +++ b/bin/core/engine/interface/value/child/playerVariable.ts @@ -0,0 +1,10 @@ +import { ValuePlayerType } from '../../../type/value/player' +import { VariableType } from '../../../type/variable' + +/** + * {482} + */ +export interface IPlayerVariable { + player: ValuePlayerType + variable: VariableType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/playersInSlot.ts b/bin/core/engine/interface/value/child/playersInSlot.ts new file mode 100644 index 0000000..c89a426 --- /dev/null +++ b/bin/core/engine/interface/value/child/playersInSlot.ts @@ -0,0 +1,15 @@ +import { ValueTeamType, ValueNumberType } from '../../../type' + +/** + * {483} + */ +export interface IPlayersInSlot { + /** + * {645} + */ + slot: ValueNumberType + /** + * {646} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/playersInViewAngle.ts b/bin/core/engine/interface/value/child/playersInViewAngle.ts new file mode 100644 index 0000000..4e0f200 --- /dev/null +++ b/bin/core/engine/interface/value/child/playersInViewAngle.ts @@ -0,0 +1,19 @@ +import { ValueTeamType, ValuePlayerType, ValueNumberType } from '../../../type' + +/** + * {484} + */ +export interface IPlayersInViewAngle { + /** + * {609} + */ + player: ValuePlayerType + /** + * {647} + */ + team: ValueTeamType + /** + * {611} + */ + viewAngle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/playersOnHero.ts b/bin/core/engine/interface/value/child/playersOnHero.ts new file mode 100644 index 0000000..2a67726 --- /dev/null +++ b/bin/core/engine/interface/value/child/playersOnHero.ts @@ -0,0 +1,15 @@ +import { ValueTeamType, ValueHeroType } from '../../../type' + +/** + * {485} + */ +export interface IPlayersOnHero { + /** + * {602} + */ + hero: ValueHeroType + /** + * {603} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/playersWithinRadius.ts b/bin/core/engine/interface/value/child/playersWithinRadius.ts new file mode 100644 index 0000000..375c855 --- /dev/null +++ b/bin/core/engine/interface/value/child/playersWithinRadius.ts @@ -0,0 +1,28 @@ +import { + ValueTeamType, + ValueVectorType, + ValueNumberType, + ValueLosCheckType, +} from '../../../type' + +/** + * {486} + */ +export interface IPlayersWithinRadius { + /** + * {648} + */ + center: ValueVectorType + /** + * {649} + */ + radius: ValueNumberType + /** + * {650} + */ + team: ValueTeamType + /** + * {651} + */ + losCheck: ValueLosCheckType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/pointCapturePercentage.ts b/bin/core/engine/interface/value/child/pointCapturePercentage.ts new file mode 100644 index 0000000..fc9ae9e --- /dev/null +++ b/bin/core/engine/interface/value/child/pointCapturePercentage.ts @@ -0,0 +1,4 @@ +/** + * {487} + */ +export interface IPointCapturePercentage {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/positionOf.ts b/bin/core/engine/interface/value/child/positionOf.ts new file mode 100644 index 0000000..49ee3b4 --- /dev/null +++ b/bin/core/engine/interface/value/child/positionOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {488} + */ +export interface IPositionOf { + /** + * {652} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/raiseToPower.ts b/bin/core/engine/interface/value/child/raiseToPower.ts new file mode 100644 index 0000000..c425465 --- /dev/null +++ b/bin/core/engine/interface/value/child/raiseToPower.ts @@ -0,0 +1,15 @@ +import { ValueNumberType } from '../../../type' + +/** + * {489} + */ +export interface IRaiseToPower { + /** + * {629} + */ + value1: ValueNumberType + /** + * {630} + */ + value2: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/randomInteger.ts b/bin/core/engine/interface/value/child/randomInteger.ts new file mode 100644 index 0000000..5688260 --- /dev/null +++ b/bin/core/engine/interface/value/child/randomInteger.ts @@ -0,0 +1,15 @@ +import { ValueNumberType } from '../../../type' + +/** + * {490} + */ +export interface IRandomInteger { + /** + * {653} + */ + min: ValueNumberType + /** + * {654} + */ + max: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/randomReal.ts b/bin/core/engine/interface/value/child/randomReal.ts new file mode 100644 index 0000000..4b55ff2 --- /dev/null +++ b/bin/core/engine/interface/value/child/randomReal.ts @@ -0,0 +1,15 @@ +import { ValueNumberType } from '../../../type' + +/** + * {491} + */ +export interface IRandomReal { + /** + * {656} + */ + min: ValueNumberType + /** + * {657} + */ + max: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/randomValueInArray.ts b/bin/core/engine/interface/value/child/randomValueInArray.ts new file mode 100644 index 0000000..e5cf67b --- /dev/null +++ b/bin/core/engine/interface/value/child/randomValueInArray.ts @@ -0,0 +1,11 @@ +import { ValueType } from '../../../type' + +/** + * {492} + */ +export interface IRandomValueInArray { + /** + * {658} + */ + array: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/randomizedArray.ts b/bin/core/engine/interface/value/child/randomizedArray.ts new file mode 100644 index 0000000..5cc895e --- /dev/null +++ b/bin/core/engine/interface/value/child/randomizedArray.ts @@ -0,0 +1,11 @@ +import { ValueArrayType } from '../../../type' + +/** + * {493} + */ +export interface IRandomizedArray { + /** + * {655} + */ + array: ValueArrayType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/rayCastHitNormal.ts b/bin/core/engine/interface/value/child/rayCastHitNormal.ts new file mode 100644 index 0000000..7b702c7 --- /dev/null +++ b/bin/core/engine/interface/value/child/rayCastHitNormal.ts @@ -0,0 +1,35 @@ +import { + ValueVectorType, + ValueArrayType, + ValueBoolType, +} from '../../../type' + +/** + * {494} + */ +export interface IRayCastHitNormal { + /** + * {659} + */ + startPos: ValueVectorType + + /** + * {660} + */ + endPos: ValueVectorType + + /** + * {661} + */ + playersToInclude: ValueArrayType + + /** + * {662} + */ + playersToExclude: ValueArrayType + + /** + * {663} + */ + IncludePlayerOwnedObjects: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/rayCastHitPlayer.ts b/bin/core/engine/interface/value/child/rayCastHitPlayer.ts new file mode 100644 index 0000000..6c5b518 --- /dev/null +++ b/bin/core/engine/interface/value/child/rayCastHitPlayer.ts @@ -0,0 +1,35 @@ +import { + ValueVectorType, + ValueArrayType, + ValueBoolType, +} from '../../../type' + +/** + * {495} + */ +export interface IRayCastHitPlayer { + /** + * {659} + */ + startPos: ValueVectorType + + /** + * {660} + */ + endPos: ValueVectorType + + /** + * {661} + */ + playersToInclude: ValueArrayType + + /** + * {662} + */ + playersToExclude: ValueArrayType + + /** + * {663} + */ + IncludePlayerOwnedObjects: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/rayCastHitPosition.ts b/bin/core/engine/interface/value/child/rayCastHitPosition.ts new file mode 100644 index 0000000..5ba83ca --- /dev/null +++ b/bin/core/engine/interface/value/child/rayCastHitPosition.ts @@ -0,0 +1,35 @@ +import { + ValueVectorType, + ValueArrayType, + ValueBoolType, +} from '../../../type' + +/** + * {496} + */ +export interface IRayCastHitPosition { + /** + * {659} + */ + startPos: ValueVectorType + + /** + * {660} + */ + endPos: ValueVectorType + + /** + * {661} + */ + playersToInclude: ValueArrayType + + /** + * {662} + */ + playersToExclude: ValueArrayType + + /** + * {663} + */ + IncludePlayerOwnedObjects: ValueBoolType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/removeFromArray.ts b/bin/core/engine/interface/value/child/removeFromArray.ts new file mode 100644 index 0000000..d0c4592 --- /dev/null +++ b/bin/core/engine/interface/value/child/removeFromArray.ts @@ -0,0 +1,16 @@ +import { ValueArrayType, ValueType } from '../../../type' + +/** + * {497} + */ +export interface IRemoveFromArray { + /** + * {664} + */ + array: ValueArrayType + + /** + * {665} + */ + value: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/right.ts b/bin/core/engine/interface/value/child/right.ts new file mode 100644 index 0000000..d30046f --- /dev/null +++ b/bin/core/engine/interface/value/child/right.ts @@ -0,0 +1,4 @@ +/** + * {498} + */ +export interface IRight {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/roundToInteger.ts b/bin/core/engine/interface/value/child/roundToInteger.ts new file mode 100644 index 0000000..271da7f --- /dev/null +++ b/bin/core/engine/interface/value/child/roundToInteger.ts @@ -0,0 +1,18 @@ +import { + ValueNumberType, + ValueRoundingType, +} from '../../../type' + +/** + * {499} + */ +export interface IRoundToInteger { + /** + * {666} + */ + value: ValueNumberType + /** + * {667} + */ + roundingType: ValueRoundingType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/scoreOf.ts b/bin/core/engine/interface/value/child/scoreOf.ts new file mode 100644 index 0000000..2f9fb7a --- /dev/null +++ b/bin/core/engine/interface/value/child/scoreOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {500} + */ +export interface IScoreOf { + /** + * {668} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/serverLoad.ts b/bin/core/engine/interface/value/child/serverLoad.ts new file mode 100644 index 0000000..f6a1130 --- /dev/null +++ b/bin/core/engine/interface/value/child/serverLoad.ts @@ -0,0 +1,4 @@ +/** + * {501} + */ +export interface IServerLoad {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/serverLoadAverage.ts b/bin/core/engine/interface/value/child/serverLoadAverage.ts new file mode 100644 index 0000000..a2fe722 --- /dev/null +++ b/bin/core/engine/interface/value/child/serverLoadAverage.ts @@ -0,0 +1,4 @@ +/** + * {502} + */ +export interface IServerLoadAverage {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/serverLoadPeak.ts b/bin/core/engine/interface/value/child/serverLoadPeak.ts new file mode 100644 index 0000000..5c491f3 --- /dev/null +++ b/bin/core/engine/interface/value/child/serverLoadPeak.ts @@ -0,0 +1,4 @@ +/** + * {503} + */ +export interface IServerLoadPeak {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/sineFromDegrees.ts b/bin/core/engine/interface/value/child/sineFromDegrees.ts new file mode 100644 index 0000000..37efc98 --- /dev/null +++ b/bin/core/engine/interface/value/child/sineFromDegrees.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {504} + */ +export interface ISineFromDegrees { + /** + * {564} + */ + angle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/sineFromRadians.ts b/bin/core/engine/interface/value/child/sineFromRadians.ts new file mode 100644 index 0000000..b046471 --- /dev/null +++ b/bin/core/engine/interface/value/child/sineFromRadians.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {505} + */ +export interface ISineFromRadians { + /** + * {565} + */ + angle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/slotOf.ts b/bin/core/engine/interface/value/child/slotOf.ts new file mode 100644 index 0000000..4d6d401 --- /dev/null +++ b/bin/core/engine/interface/value/child/slotOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {506} + */ +export interface ISlotOf { + /** + * {669} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/sortedArray.ts b/bin/core/engine/interface/value/child/sortedArray.ts new file mode 100644 index 0000000..a400577 --- /dev/null +++ b/bin/core/engine/interface/value/child/sortedArray.ts @@ -0,0 +1,15 @@ +import { ValueArrayType, ValueType } from '../../../type' + +/** + * {507} + */ +export interface ISortedArray { + /** + * {670} + */ + array: ValueArrayType + /** + * {671} + */ + valueRank: ValueType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/speedOf.ts b/bin/core/engine/interface/value/child/speedOf.ts new file mode 100644 index 0000000..9b11ae3 --- /dev/null +++ b/bin/core/engine/interface/value/child/speedOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {508} + */ +export interface ISpeedOf { + /** + * {672} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/speedOfInDirection.ts b/bin/core/engine/interface/value/child/speedOfInDirection.ts new file mode 100644 index 0000000..dfbbede --- /dev/null +++ b/bin/core/engine/interface/value/child/speedOfInDirection.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueVectorType } from '../../../type' + +/** + * {509} + */ +export interface ISpeedOfInDirection { + /** + * {672} + */ + player: ValuePlayerType + /** + * {673} + */ + direction: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/squareRoot.ts b/bin/core/engine/interface/value/child/squareRoot.ts new file mode 100644 index 0000000..5d069c9 --- /dev/null +++ b/bin/core/engine/interface/value/child/squareRoot.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {510} + */ +export interface ISquareRoot { + /** + * {674} + */ + value: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/string.ts b/bin/core/engine/interface/value/child/string.ts new file mode 100644 index 0000000..cbdfbe7 --- /dev/null +++ b/bin/core/engine/interface/value/child/string.ts @@ -0,0 +1,26 @@ +import { + ValueTextType, + ValueStringParamType +} from '../../../type' + +/** + * {511} + */ +export interface IString { + /** + * {675} + */ + string: ValueTextType + /** + * {676} + */ + _0: ValueStringParamType + /** + * {677} + */ + _1: ValueStringParamType + /** + * {678} + */ + _2: ValueStringParamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/subtract.ts b/bin/core/engine/interface/value/child/subtract.ts new file mode 100644 index 0000000..b1f6e3a --- /dev/null +++ b/bin/core/engine/interface/value/child/subtract.ts @@ -0,0 +1,15 @@ +import { ValueSubtractType } from '../../../type' + +/** + * {512} + */ +export interface ISubtract { + /** + * {679} + */ + value1: ValueSubtractType + /** + * {680} + */ + value2: ValueSubtractType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/tangentFromDegrees.ts b/bin/core/engine/interface/value/child/tangentFromDegrees.ts new file mode 100644 index 0000000..85ade40 --- /dev/null +++ b/bin/core/engine/interface/value/child/tangentFromDegrees.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {513} + */ +export interface ITangentFromDegrees { + /** + * {564} + */ + angle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/tangentFromRadians.ts b/bin/core/engine/interface/value/child/tangentFromRadians.ts new file mode 100644 index 0000000..9a1ab73 --- /dev/null +++ b/bin/core/engine/interface/value/child/tangentFromRadians.ts @@ -0,0 +1,11 @@ +import { ValueNumberType } from '../../../type' + +/** + * {514} + */ +export interface ITangentFromRadians { + /** + * {565} + */ + angle: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/team.ts b/bin/core/engine/interface/value/child/team.ts new file mode 100644 index 0000000..c2d4321 --- /dev/null +++ b/bin/core/engine/interface/value/child/team.ts @@ -0,0 +1,8 @@ +import { TeamConstantType } from '../../../type' + +/** + * {515} + */ +export interface ITeam { + team: TeamConstantType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/teamOf.ts b/bin/core/engine/interface/value/child/teamOf.ts new file mode 100644 index 0000000..81f7753 --- /dev/null +++ b/bin/core/engine/interface/value/child/teamOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {516} + */ +export interface ITeamOf { + /** + * {681} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/teamScore.ts b/bin/core/engine/interface/value/child/teamScore.ts new file mode 100644 index 0000000..2bbb9a8 --- /dev/null +++ b/bin/core/engine/interface/value/child/teamScore.ts @@ -0,0 +1,11 @@ +import { ValueTeamType } from '../../../type' + +/** + * {517} + */ +export interface ITeamScore { + /** + * {682} + */ + team: ValueTeamType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/throttleOf.ts b/bin/core/engine/interface/value/child/throttleOf.ts new file mode 100644 index 0000000..0af4f37 --- /dev/null +++ b/bin/core/engine/interface/value/child/throttleOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {518} + */ +export interface IThrottleOf { + /** + * {683} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/totalTimeElapsed.ts b/bin/core/engine/interface/value/child/totalTimeElapsed.ts new file mode 100644 index 0000000..182e8c9 --- /dev/null +++ b/bin/core/engine/interface/value/child/totalTimeElapsed.ts @@ -0,0 +1,4 @@ +/** + * {519} + */ +export interface ITotalTimeElapsed {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/true.ts b/bin/core/engine/interface/value/child/true.ts new file mode 100644 index 0000000..9c747d8 --- /dev/null +++ b/bin/core/engine/interface/value/child/true.ts @@ -0,0 +1,4 @@ +/** + * {520} + */ +export interface ITrue {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/ultimateChargePercent.ts b/bin/core/engine/interface/value/child/ultimateChargePercent.ts new file mode 100644 index 0000000..928dc6e --- /dev/null +++ b/bin/core/engine/interface/value/child/ultimateChargePercent.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {521} + */ +export interface IUltimateChargePercent { + /** + * {684} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/up.ts b/bin/core/engine/interface/value/child/up.ts new file mode 100644 index 0000000..9b6d6bb --- /dev/null +++ b/bin/core/engine/interface/value/child/up.ts @@ -0,0 +1,4 @@ +/** + * {522} + */ +export interface IUp {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/valueInArray.ts b/bin/core/engine/interface/value/child/valueInArray.ts new file mode 100644 index 0000000..2d259ed --- /dev/null +++ b/bin/core/engine/interface/value/child/valueInArray.ts @@ -0,0 +1,18 @@ +import { + ValueArrayType, + ValueNumberType, +} from '../../../type' + +/** + * {523} + */ +export interface IValueInArray { + /** + * {685} + */ + array: ValueArrayType + /** + * {686} + */ + index: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/vector.ts b/bin/core/engine/interface/value/child/vector.ts new file mode 100644 index 0000000..d4ecb37 --- /dev/null +++ b/bin/core/engine/interface/value/child/vector.ts @@ -0,0 +1,22 @@ +import { ValueNumberType } from '../../../type' + +/** + * {524} + */ +export interface IVector { + + /** + * {687} + */ + x: ValueNumberType + + /** + * {688} + */ + y: ValueNumberType + + /** + * {689} + */ + z: ValueNumberType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/vectorTowards.ts b/bin/core/engine/interface/value/child/vectorTowards.ts new file mode 100644 index 0000000..2eecdf0 --- /dev/null +++ b/bin/core/engine/interface/value/child/vectorTowards.ts @@ -0,0 +1,17 @@ +import { + ValueVectorType +} from '../../../type' + +/** + * {525} + */ +export interface IVectorTowards { + /** + * {690} + */ + startPos: ValueVectorType + /** + * {691} + */ + endPos: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/velocityOf.ts b/bin/core/engine/interface/value/child/velocityOf.ts new file mode 100644 index 0000000..f3379ee --- /dev/null +++ b/bin/core/engine/interface/value/child/velocityOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {526} + */ +export interface IVelocityOf { + /** + * {672} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/verticalAngleFromDirection.ts b/bin/core/engine/interface/value/child/verticalAngleFromDirection.ts new file mode 100644 index 0000000..220773c --- /dev/null +++ b/bin/core/engine/interface/value/child/verticalAngleFromDirection.ts @@ -0,0 +1,11 @@ +import { ValueVectorType } from '../../../type' + +/** + * {527} + */ +export interface IVerticalAngleFromDirection { + /** + * {692} + */ + direction: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/verticalAngleTowards.ts b/bin/core/engine/interface/value/child/verticalAngleTowards.ts new file mode 100644 index 0000000..3b5b59a --- /dev/null +++ b/bin/core/engine/interface/value/child/verticalAngleTowards.ts @@ -0,0 +1,15 @@ +import { ValuePlayerType, ValueVectorType } from '../../../type' + +/** + * {528} + */ +export interface IVerticalAngleTowards { + /** + * {693} + */ + player: ValuePlayerType + /** + * {588} + */ + position: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/verticalFacingAngleOf.ts b/bin/core/engine/interface/value/child/verticalFacingAngleOf.ts new file mode 100644 index 0000000..f7bbcb7 --- /dev/null +++ b/bin/core/engine/interface/value/child/verticalFacingAngleOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {529} + */ +export interface IVerticalFacingAngleOf { + /** + * {694} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/verticalSpeedOf.ts b/bin/core/engine/interface/value/child/verticalSpeedOf.ts new file mode 100644 index 0000000..51048c9 --- /dev/null +++ b/bin/core/engine/interface/value/child/verticalSpeedOf.ts @@ -0,0 +1,11 @@ +import { ValuePlayerType } from '../../../type' + +/** + * {530} + */ +export interface IVerticalSpeedOf { + /** + * {695} + */ + player: ValuePlayerType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/victim.ts b/bin/core/engine/interface/value/child/victim.ts new file mode 100644 index 0000000..df8c311 --- /dev/null +++ b/bin/core/engine/interface/value/child/victim.ts @@ -0,0 +1,4 @@ +/** + * {531} + */ +export interface IVictim {} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/worldVectorOf.ts b/bin/core/engine/interface/value/child/worldVectorOf.ts new file mode 100644 index 0000000..dfece3b --- /dev/null +++ b/bin/core/engine/interface/value/child/worldVectorOf.ts @@ -0,0 +1,25 @@ +import { + ValueVectorType, + ValuePlayerType, + ValueTransformationType +} from '../../../type' + +/** + * {532} + */ +export interface IWorldVectorOf { + /** + * {696} + */ + localVector: ValueVectorType + + /** + * {626} + */ + relativePlayer: ValuePlayerType + + /** + * {627} + */ + transformation: ValueTransformationType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/xComponentOf.ts b/bin/core/engine/interface/value/child/xComponentOf.ts new file mode 100644 index 0000000..75f9647 --- /dev/null +++ b/bin/core/engine/interface/value/child/xComponentOf.ts @@ -0,0 +1,11 @@ +import { ValueVectorType } from '../../../type' + +/** + * {533} + */ +export interface IXComponentOf { + /** + * {697} + */ + vector: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/yComponentOf.ts b/bin/core/engine/interface/value/child/yComponentOf.ts new file mode 100644 index 0000000..32e2f22 --- /dev/null +++ b/bin/core/engine/interface/value/child/yComponentOf.ts @@ -0,0 +1,11 @@ +import { ValueVectorType } from '../../../type' + +/** + * {534} + */ +export interface IYComponentOf { + /** + * {698} + */ + vector: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/child/zComponentOf.ts b/bin/core/engine/interface/value/child/zComponentOf.ts new file mode 100644 index 0000000..84cb383 --- /dev/null +++ b/bin/core/engine/interface/value/child/zComponentOf.ts @@ -0,0 +1,11 @@ +import { ValueVectorType } from '../../../type' + +/** + * {535} + */ +export interface IZComponentOf { + /** + * {699} + */ + vector: ValueVectorType +} \ No newline at end of file diff --git a/bin/core/engine/interface/value/index.ts b/bin/core/engine/interface/value/index.ts new file mode 100644 index 0000000..a15f127 --- /dev/null +++ b/bin/core/engine/interface/value/index.ts @@ -0,0 +1,2 @@ +export * from './value' +export * from './child' \ No newline at end of file diff --git a/bin/core/engine/interface/value/value.ts b/bin/core/engine/interface/value/value.ts new file mode 100644 index 0000000..ba01754 --- /dev/null +++ b/bin/core/engine/interface/value/value.ts @@ -0,0 +1,1212 @@ +import { + // Number Type + IAbsoluteValue, + INumber, + + // Custom Array Type + IAllDeadPlayers, + IAllLivingPlayers, + IAllPlayers, + IAllPlayersNotOnObjective, + IAllPlayersOnObjective, + IAllowedHeroes, + IAllHeroes, + IArccosineInDegrees, + IArccosineInRadians, + IArcsineInDegrees, + IArcsineInRadians, + IArctangentInDegrees, + IArctangentInRadians, + + IAppendToArray, + IArrayContains, + IArraySlice, + + // Method Type + IAltitudeOf, + ILocalVectorOf, + IWorldVectorOf, + IVectorTowards, + IAngleBetweenVectors, + IAngleDifference, + + // Class Type + IVector, + IAttacker, + + // Operator Type + IAnd, + + // Variable Type + IGlobalVariable, + IPlayerVariable, + + // Unclassified + IClosestPlayerTo, + ICompare, + IControlModeScoringPercentage, + IControlModeScoringTeam, + ICosineFromDegrees, + ICosineFromRadians, + ICountOf, + ICrossProduct, + ICurrentArrayElement, + IDirectionFromAngles, + IDirectionTowards, + IDistanceBetween, + IDotProduct, + IEmptyArray, + IEntityExists, + IEventDamage, + IEventPlayer, + IBackward, + ITeam, + IDown, + IEventWasCriticalHit, + IEyePosition, + IFacingDirectionOf, + IFalse, + IFarthestPlayerFrom, + IFilteredArray, + IFirstOf, + IFlagPosition, + IForward, + IHasSpawned, + IHasStatus, + IHealth, + IHero, + IHeroIconString, + IHeroOf, + IHorizontalAngleFromDirection, + IHorizontalAngleTowards, + IHorizontalFacingAngleOf, + IHorizontalSpeedOf, + IIndexOfArrayValue, + IIsAlive, + IIsAssemblingHeroes, + IIsBetweenRounds, + IIsButtonHeld, + IIsCommunicating, + IIsCommunicatingAny, + IIsCommunicatingAnyEmote, + IIsCommunicatingAnyVoiceLine, + IIsControlModePointLocked, + IIsCrouching, + IIsCTFModeInSuddenDeath, + IIsDead, + IIsFiringPrimary, + IIsFlagAtBase, + IIsFlagBeingCarried, + IIsGameInProgress, + IIsHeroBeingPlayed, + IIsInAir, + IIsInLineOfSight, + IIsInSetup, + IIsInSpawnRoom, + IIsInViewAngle, + IIsMatchComplete, + IIsMoving, + IIsObjectiveComplete, + IIsOnGround, + IIsOnObjective, + IIsOnWall, + IIsPortraitOnFire, + IIsStanding, + IIsTeamOnDefense, + IIsFiringSecondary, + IIsTeamOnOffense, + IIsTrueForAll, + IIsTrueForAny, + IIsUsingAbility1, + IIsUsingAbility2, + IIsUsingUltimate, + IIsWaitingForPlayers, + ILastCreatedEntity, + ILastDamageModificationId, + ILastDamageOverTimeId, + ILastHealOverTimeId, + ILastOf, + ILastTextId, + ILeft, + IMatchRound, + IMatchTime, + IMax, + IMaxHealth, + IMin, + IModulo, + INearestWalkablePosition, + INormalize, + INormalizedHealth, + INot, + INull, + INumberOfDeadPlayers, + INumberOfDeaths, + INumberOfEliminations, + INumberOfFinalBlows, + INumberOfHeroes, + INumberOfLivingPlayers, + INumberOfPlayers, + INumberOfPlayersOnObjective, + IObjectiveIndex, + IObjectivePosition, + IOppositeTeamOf, + IOr, + IPayloadPosition, + IPayloadProgressPercentage, + IPlayerCarryingFlag, + IPlayerClosestToReticle, + IPlayersInSlot, + IPlayersInViewAngle, + IPlayersOnHero, + IPlayersWithinRadius, + IPointCapturePercentage, + IPositionOf, + IRaiseToPower, + IRandomInteger, + IRandomReal, + IRandomValueInArray, + IRandomizedArray, + IRayCastHitNormal, + IRayCastHitPlayer, + IRayCastHitPosition, + IRemoveFromArray, + IRight, + IRoundToInteger, + IScoreOf, + ISineFromDegrees, + ISineFromRadians, + ISlotOf, + ISortedArray, + ISpeedOf, + ISpeedOfInDirection, + ISquareRoot, + IString, + ISubtract, + IAdd, + IDivide, + IMultiply, + ITangentFromDegrees, + ITangentFromRadians, + ITeamOf, + ITeamScore, + IThrottleOf, + ITotalTimeElapsed, + ITrue, + IUltimateChargePercent, + IUp, + IValueInArray, + IVelocityOf, + IVerticalAngleFromDirection, + IVerticalAngleTowards, + IVerticalFacingAngleOf, + IVerticalSpeedOf, + IVictim, + IXComponentOf, + IYComponentOf, + IZComponentOf, + IServerLoad, + IServerLoadAverage, + IServerLoadPeak, + IHealer, + IHealee, + IEventHealing, + IHostPlayer, + IIsDummyBot, +} from './child' + +export interface IValue { + /** + * {342} + */ + absoluteValue: IAbsoluteValue + + /** + * {343} + */ + add: IAdd + + /** + * {344} + */ + allDeadPlayers: IAllDeadPlayers + + /** + * {345} + */ + allHeroes: IAllHeroes + + /** + * {346} + */ + allLivingPlayers: IAllLivingPlayers + + /** + * {347} + */ + allPlayers: IAllPlayers + + /** + * {348} + */ + allPlayersNotOnObjective: IAllPlayersNotOnObjective + + /** + * {349} + */ + allPlayersOnObjective: IAllPlayersOnObjective + + /** + * {350} + */ + allowedHeroes: IAllowedHeroes + + /** + * {351} + */ + altitudeOf: IAltitudeOf + + /** + * {352} + */ + and: IAnd + + /** + * {353} + */ + angleBetweenVectors: IAngleBetweenVectors + + /** + * {354} + */ + angleDifference: IAngleDifference + + /** + * {355} + */ + appendToArray: IAppendToArray + + /** + * {356} + */ + arccosineInDegrees: IArccosineInDegrees + + /** + * {357} + */ + arccosineInRadians: IArccosineInRadians + + /** + * {358} + */ + arcsineInDegrees: IArcsineInDegrees + + /** + * {359} + */ + arcsineInRadians: IArcsineInRadians + + /** + * {360} + */ + arctangentInDegrees: IArctangentInDegrees + + /** + * {361} + */ + arctangentInRadians: IArctangentInRadians + + /** + * {362} + */ + arrayContains: IArrayContains + + /** + * {363} + */ + arraySlice: IArraySlice + + /** + * {364} + */ + attacker: IAttacker + + /** + * {365} + */ + backward: IBackward + + /** + * {366} + */ + closestPlayerTo: IClosestPlayerTo + + /** + * {367} + */ + compare: ICompare + + /** + * {368} + */ + controlModeScoringPercentage: IControlModeScoringPercentage + + /** + * {369} + */ + controlModeScoringTeam: IControlModeScoringTeam + + /** + * {370} + */ + cosineFromDegrees: ICosineFromDegrees + + /** + * {371} + */ + cosineFromRadians: ICosineFromRadians + + /** + * {372} + */ + countOf: ICountOf + + /** + * {373} + */ + crossProduct: ICrossProduct + + /** + * {374} + */ + currentArrayElement: ICurrentArrayElement + + /** + * {375} + */ + directionFromAngles: IDirectionFromAngles + + /** + * {376} + */ + directionTowards: IDirectionTowards + + /** + * {377} + */ + distanceBetween: IDistanceBetween + + /** + * {378} + */ + divide: IDivide + + /** + * {379} + */ + dotProduct: IDotProduct + + /** + * {380} + */ + down: IDown + + /** + * {381} + */ + emptyArray: IEmptyArray + + /** + * {382} + */ + entityExists: IEntityExists + + /** + * {383} + */ + eventDamage: IEventDamage + + /** + * {384} + */ + eventPlayer: IEventPlayer + + /** + * {385} + */ + eventWasCriticalHit: IEventWasCriticalHit + + /** + * {386} + */ + eyePosition: IEyePosition + + /** + * {387} + */ + facingDirectionOf: IFacingDirectionOf + + /** + * {388} + */ + false: IFalse + + /** + * {389} + */ + farthestPlayerFrom: IFarthestPlayerFrom + + /** + * {390} + */ + filteredArray: IFilteredArray + + /** + * {391} + */ + firstOf: IFirstOf + + /** + * {392} + */ + flagPosition: IFlagPosition + + /** + * {393} + */ + forward: IForward + + /** + * {394} + */ + globalVariable: IGlobalVariable + + /** + * {395} + */ + hasSpawned: IHasSpawned + + /** + * {396} + */ + hasStatus: IHasStatus + + /** + * {397} + */ + health: IHealth + + /** + * {398} + */ + hero: IHero + + /** + * {399} + */ + heroIconString: IHeroIconString + + /** + * {400} + */ + heroOf: IHeroOf + + /** + * {401} + */ + horizontalAngleFromDirection: IHorizontalAngleFromDirection + + /** + * {402} + */ + horizontalAngleTowards: IHorizontalAngleTowards + + /** + * {403} + */ + horizontalFacingAngleOf: IHorizontalFacingAngleOf + + /** + * {404} + */ + horizontalSpeedOf: IHorizontalSpeedOf + + /** + * {405} + */ + indexOfArrayValue: IIndexOfArrayValue + + /** + * {406} + */ + isAlive: IIsAlive + + /** + * {407} + */ + isAssemblingHeroes: IIsAssemblingHeroes + + /** + * {408} + */ + isBetweenRounds: IIsBetweenRounds + + /** + * {409} + */ + isButtonHeld: IIsButtonHeld + + /** + * {410} + */ + isCommunicating: IIsCommunicating + + /** + * {411} + */ + isCommunicatingAny: IIsCommunicatingAny + + /** + * {412} + */ + isCommunicatingAnyEmote: IIsCommunicatingAnyEmote + + /** + * {413} + */ + isCommunicatingAnyVoiceLine: IIsCommunicatingAnyVoiceLine + + /** + * {414} + */ + isControlModePointLocked: IIsControlModePointLocked + + /** + * {415} + */ + isCrouching: IIsCrouching + + /** + * {416} + */ + isCTFModeInSuddenDeath: IIsCTFModeInSuddenDeath + + /** + * {417} + */ + isDead: IIsDead + + /** + * {418} + */ + isFiringPrimary: IIsFiringPrimary + + /** + * {419} + */ + isFiringSecondary: IIsFiringSecondary + + /** + * {420} + */ + isFlagAtBase: IIsFlagAtBase + + /** + * {421} + */ + isFlagBeingCarried: IIsFlagBeingCarried + + /** + * {422} + */ + isGameInProgress: IIsGameInProgress + + /** + * {423} + */ + isHeroBeingPlayed: IIsHeroBeingPlayed + + /** + * {424} + */ + isInAir: IIsInAir + + /** + * {425} + */ + isInLineOfSight: IIsInLineOfSight + + /** + * {426} + */ + isInSetup: IIsInSetup + + /** + * {427} + */ + isInSpawnRoom: IIsInSpawnRoom + + /** + * {428} + */ + isInViewAngle: IIsInViewAngle + + /** + * {429} + */ + isMatchComplete: IIsMatchComplete + + /** + * {430} + */ + isMoving: IIsMoving + + /** + * {431} + */ + isObjectiveComplete: IIsObjectiveComplete + + /** + * {432} + */ + isOnGround: IIsOnGround + + /** + * {433} + */ + isOnObjective: IIsOnObjective + + /** + * {434} + */ + isOnWall: IIsOnWall + + /** + * {435} + */ + isPortraitOnFire: IIsPortraitOnFire + + /** + * {436} + */ + isStanding: IIsStanding + + /** + * {437} + */ + isTeamOnDefense: IIsTeamOnDefense + + /** + * {438} + */ + isTeamOnOffense: IIsTeamOnOffense + + /** + * {439} + */ + isTrueForAll: IIsTrueForAll + + /** + * {440} + */ + isTrueForAny: IIsTrueForAny + + /** + * {441} + */ + isUsingAbility1: IIsUsingAbility1 + + /** + * {442} + */ + isUsingAbility2: IIsUsingAbility2 + + /** + * {443} + */ + isUsingUltimate: IIsUsingUltimate + + /** + * {444} + */ + isWaitingForPlayers: IIsWaitingForPlayers + + /** + * {445} + */ + lastCreatedEntity: ILastCreatedEntity + + /** + * {446} + */ + lastDamageModificationId: ILastDamageModificationId + + /** + * {447} + */ + lastDamageOverTimeId: ILastDamageOverTimeId + + /** + * {448} + */ + lastHealOverTimeId: ILastHealOverTimeId + + /** + * {449} + */ + lastOf: ILastOf + + /** + * {450} + */ + lastTextId: ILastTextId + + /** + * {451} + */ + left: ILeft + + /** + * {452} + */ + localVectorOf: ILocalVectorOf + + /** + * {453} + */ + matchRound: IMatchRound + + /** + * {454} + */ + matchTime: IMatchTime + + /** + * {455} + */ + max: IMax + + /** + * {456} + */ + maxHealth: IMaxHealth + + /** + * {457} + */ + min: IMin + + /** + * {458} + */ + modulo: IModulo + + /** + * {459} + */ + multiply: IMultiply + + /** + * {460} + */ + nearestWalkablePosition: INearestWalkablePosition + + /** + * {461} + */ + normalize: INormalize + + /** + * {462} + */ + normalizedHealth: INormalizedHealth + + /** + * {463} + */ + not: INot + + /** + * {464} + */ + null: INull + + /** + * {465} + */ + number: INumber + + /** + * {466} + */ + numberOfDeadPlayers: INumberOfDeadPlayers + + /** + * {467} + */ + numberOfDeaths: INumberOfDeaths + + /** + * {468} + */ + numberOfEliminations: INumberOfEliminations + + /** + * {469} + */ + numberOfFinalBlows: INumberOfFinalBlows + + /** + * {470} + */ + numberOfHeroes: INumberOfHeroes + + /** + * {471} + */ + numberOfLivingPlayers: INumberOfLivingPlayers + + /** + * {472} + */ + numberOfPlayers: INumberOfPlayers + + /** + * {473} + */ + numberOfPlayersOnObjective: INumberOfPlayersOnObjective + + /** + * {474} + */ + objectiveIndex: IObjectiveIndex + + /** + * {475} + */ + objectivePosition: IObjectivePosition + + /** + * {476} + */ + oppositeTeamOf: IOppositeTeamOf + + /** + * {477} + */ + or: IOr + + /** + * {478} + */ + payloadPosition: IPayloadPosition + + /** + * {479} + */ + payloadProgressPercentage: IPayloadProgressPercentage + + /** + * {480} + */ + playerCarryingFlag: IPlayerCarryingFlag + + /** + * {481} + */ + playerClosestToReticle: IPlayerClosestToReticle + + /** + * {482} + */ + playerVariable: IPlayerVariable + + /** + * {483} + */ + playersInSlot: IPlayersInSlot + + /** + * {484} + */ + playersInViewAngle: IPlayersInViewAngle + + /** + * {485} + */ + playersOnHero: IPlayersOnHero + + /** + * {486} + */ + playersWithinRadius: IPlayersWithinRadius + + /** + * {487} + */ + pointCapturePercentage: IPointCapturePercentage + + /** + * {488} + */ + positionOf: IPositionOf + + /** + * {489} + */ + raiseToPower: IRaiseToPower + + /** + * {490} + */ + randomInteger: IRandomInteger + + /** + * {491} + */ + randomReal: IRandomReal + + /** + * {492} + */ + randomValueInArray: IRandomValueInArray + + /** + * {493} + */ + randomizedArray: IRandomizedArray + + /** + * {494} + */ + rayCastHitNormal: IRayCastHitNormal + + /** + * {495} + */ + rayCastHitPlayer: IRayCastHitPlayer + + /** + * {496} + */ + rayCastHitPosition: IRayCastHitPosition + + /** + * {497} + */ + removeFromArray: IRemoveFromArray + + /** + * {498} + */ + right: IRight + + /** + * {499} + */ + roundToInteger: IRoundToInteger + + /** + * {500} + */ + scoreOf: IScoreOf + + /** + * {501} + */ + serverLoad: IServerLoad + + /** + * {502} + */ + serverLoadAverage: IServerLoadAverage + + /** + * {503} + */ + serverLoadPeak: IServerLoadPeak + + /** + * {504} + */ + sineFromDegrees: ISineFromDegrees + + /** + * {505} + */ + sineFromRadians: ISineFromRadians + + /** + * {506} + */ + slotOf: ISlotOf + + /** + * {507} + */ + sortedArray: ISortedArray + + /** + * {508} + */ + speedOf: ISpeedOf + + /** + * {509} + */ + speedOfInDirection: ISpeedOfInDirection + + /** + * {510} + */ + squareRoot: ISquareRoot + + /** + * {511} + */ + string: IString + + /** + * {512} + */ + subtract: ISubtract + + /** + * {513} + */ + tangentFromDegrees: ITangentFromDegrees + + /** + * {514} + */ + tangentFromRadians: ITangentFromRadians + + /** + * {515} + */ + team: ITeam + + /** + * {516} + */ + teamOf: ITeamOf + + /** + * {517} + */ + teamScore: ITeamScore + + /** + * {518} + */ + throttleOf: IThrottleOf + + /** + * {519} + */ + totalTimeElapsed: ITotalTimeElapsed + + /** + * {520} + */ + true: ITrue + + /** + * {521} + */ + ultimateChargePercent: IUltimateChargePercent + + /** + * {522} + */ + up: IUp + + /** + * {523} + */ + valueInArray: IValueInArray + + /** + * {524} + */ + vector: IVector + + /** + * {525} + */ + vectorTowards: IVectorTowards + + /** + * {526} + */ + velocityOf: IVelocityOf + + /** + * {527} + */ + verticalAngleFromDirection: IVerticalAngleFromDirection + + /** + * {528} + */ + verticalAngleTowards: IVerticalAngleTowards + + /** + * {529} + */ + verticalFacingAngleOf: IVerticalFacingAngleOf + + /** + * {530} + */ + verticalSpeedOf: IVerticalSpeedOf + + /** + * {531} + */ + victim: IVictim + + /** + * {532} + */ + worldVectorOf: IWorldVectorOf + + /** + * {533} + */ + xComponentOf: IXComponentOf + + /** + * {534} + */ + yComponentOf: IYComponentOf + + /** + * {535} + */ + zComponentOf: IZComponentOf + + /** + * {724} + */ + healer: IHealer + + /** + * {725} + */ + healee: IHealee + + /** + * {726} + */ + eventHealing: IEventHealing + + /** + * {727} + */ + hostPlayer: IHostPlayer + + /** + * {754} + */ + isDummyBot: IIsDummyBot +} \ No newline at end of file diff --git a/bin/core/engine/reformer/compiler.ts b/bin/core/engine/reformer/compiler.ts new file mode 100644 index 0000000..3f207c4 --- /dev/null +++ b/bin/core/engine/reformer/compiler.ts @@ -0,0 +1,7 @@ +export const ruleCompare = ( + left: string, + operatorToken: string, + right: string +) => { + return `${left} ${operatorToken} ${right}` +} \ No newline at end of file diff --git a/bin/core/engine/reformer/index.ts b/bin/core/engine/reformer/index.ts new file mode 100644 index 0000000..0c272c1 --- /dev/null +++ b/bin/core/engine/reformer/index.ts @@ -0,0 +1,23 @@ +// @ts-ignore +import Player from './child/player' +// @ts-ignore +import Vector from './child/vector' +// @ts-ignore +import Team from './child/team' +// @ts-ignore +import Event from './child/event' +// @ts-ignore +import Entity from './child/entity' + +import Rule from './rule' +import * as Compiler from './compiler' + +export { + Player, + Vector, + Team, + Event, + Entity, + Rule, + Compiler +} \ No newline at end of file diff --git a/bin/core/engine/reformer/rule.ts b/bin/core/engine/reformer/rule.ts new file mode 100644 index 0000000..786f405 --- /dev/null +++ b/bin/core/engine/reformer/rule.ts @@ -0,0 +1,62 @@ +export interface IRule { + /** + * @description + * You can annotate this rule. + * Type `''` + */ + description?: string + /** + * @description + * Please set event type. + * - Type `RuleEvent.` + */ + event: string + /** + * @description + * Write conditional expression + * or reference the condition variable + * - Condition operator is must use one of the following: + * `==`, `!=`, `<`, `<=`, `>`, `>=`, `===` + * - To view a list of conditional value functions, Type `Value.` + */ + condition: boolean[] + /** + * @description + * - Type `Action.` + */ + action: string[] +} + +export default class Rule { + public static collectedCodes: string[] = [] + constructor(data: IRule){ + let innerCode = `` + + innerCode += `rule("${data.description}")\n` + innerCode += `{\n` + + innerCode += `\tevent\n` + innerCode += `\t{\n` + innerCode += `\t\t${data.event};\n` + innerCode += `\t}\n\n` + + if(data.condition.length != 0){ + innerCode += `\tconditions\n` + innerCode += `\t{\n` + for(let condition of data.condition) + innerCode += `\t\t${condition};\n` + innerCode += `\t}\n\n` + } + + if(data.action.length != 0){ + innerCode += `\tactions\n` + innerCode += `\t{\n` + for(let action of data.action) + innerCode += `\t\t${action};\n` + innerCode += `\t}\n` + } + + innerCode += `}` + Rule.collectedCodes.push(innerCode) + } +} \ No newline at end of file diff --git a/bin/core/engine/resolver/index.ts b/bin/core/engine/resolver/index.ts new file mode 100644 index 0000000..0925748 --- /dev/null +++ b/bin/core/engine/resolver/index.ts @@ -0,0 +1,24 @@ +// @ts-ignore +import * as Type from './child/type' +// @ts-ignore +import * as Action from './child/action' +// @ts-ignore +import * as RuleEvent from './child/event' +// @ts-ignore +import * as Value from './child/value' + +import * as Match from './match' +import * as Level from './level' +import * as Server from './server' +import * as Util from './util' + +export { + RuleEvent, + Value, + Action, + Type, + Level, + Server, + Match, + Util +} \ No newline at end of file diff --git a/bin/core/engine/resolver/level.ts b/bin/core/engine/resolver/level.ts new file mode 100644 index 0000000..8493652 --- /dev/null +++ b/bin/core/engine/resolver/level.ts @@ -0,0 +1,16 @@ +// @ts-ignore +export * from './child/value/lastCreatedEntity' +// @ts-ignore +export * from './child/value/lastDamageModificationId' +// @ts-ignore +export * from './child/value/lastDamageOverTimeId' +// @ts-ignore +export * from './child/value/lastHealOverTimeId' +// @ts-ignore +export * from './child/value/lastTextId' +// @ts-ignore +export * from './child/value/rayCastHitNormal' +// @ts-ignore +export * from './child/value/rayCastHitPlayer' +// @ts-ignore +export * from './child/value/rayCastHitPosition' \ No newline at end of file diff --git a/bin/core/engine/resolver/match.ts b/bin/core/engine/resolver/match.ts new file mode 100644 index 0000000..4c92b1c --- /dev/null +++ b/bin/core/engine/resolver/match.ts @@ -0,0 +1,42 @@ +// @ts-ignore +export * from './child/value/flagPosition' +// @ts-ignore +export * from './child/value/isAssemblingHeroes' +// @ts-ignore +export * from './child/value/isBetweenRounds' +// @ts-ignore +export * from './child/value/isControlModePointLocked' +// @ts-ignore +export * from './child/value/isCTFModeInSuddenDeath' +// @ts-ignore +export * from './child/value/isFlagAtBase' +// @ts-ignore +export * from './child/value/isFlagBeingCarried' +// @ts-ignore +export * from './child/value/isGameInProgress' +// @ts-ignore +export * from './child/value/isInSetup' +// @ts-ignore +export * from './child/value/isMatchComplete' +// @ts-ignore +export * from './child/value/isObjectiveComplete' +// @ts-ignore +export * from './child/value/isWaitingForPlayers' +// @ts-ignore +export * from './child/value/matchRound' +// @ts-ignore +export * from './child/value/matchTime' +// @ts-ignore +export * from './child/value/objectiveIndex' +// @ts-ignore +export * from './child/value/objectivePosition' +// @ts-ignore +export * from './child/value/payloadProgressPercentage' +// @ts-ignore +export * from './child/value/playerCarryingFlag' +// @ts-ignore +export * from './child/value/payloadPosition' +// @ts-ignore +export * from './child/value/pointCapturePercentage' +// @ts-ignore +export * from './child/value/totalTimeElapsed' \ No newline at end of file diff --git a/bin/core/engine/resolver/server.ts b/bin/core/engine/resolver/server.ts new file mode 100644 index 0000000..83b3090 --- /dev/null +++ b/bin/core/engine/resolver/server.ts @@ -0,0 +1,6 @@ +// @ts-ignore +export * from './child/value/serverLoad' +// @ts-ignore +export * from './child/value/serverLoadAverage' +// @ts-ignore +export * from './child/value/serverLoadPeak' \ No newline at end of file diff --git a/bin/core/engine/resolver/util.ts b/bin/core/engine/resolver/util.ts new file mode 100644 index 0000000..4b8e46f --- /dev/null +++ b/bin/core/engine/resolver/util.ts @@ -0,0 +1,44 @@ +// @ts-ignore +export * from './child/value/max' +// @ts-ignore +export * from './child/value/min' +// @ts-ignore +export * from './child/value/normalizedHealth' +// @ts-ignore +export * from './child/value/randomInteger' +// @ts-ignore +export * from './child/value/randomReal' +// @ts-ignore +export * from './child/value/randomValueInArray' +// @ts-ignore +export * from './child/value/randomizedArray' +// @ts-ignore +export * from './child/value/roundToInteger' +// @ts-ignore +export * from './child/value/squareRoot' + +import { Type } from '../resolver' + +import { + roundToInteger, + squareRoot + +// @ts-ignore +} from './child/value' + +/** + * @param value Type `Type.Number.` + */ +export const ceil = (value: string) => roundToInteger(value, Type.RoundingType.Default('Up')) +/** + * @param value Type `Type.Number.` + */ +export const floor = (value: string) => roundToInteger(value, Type.RoundingType.Default('Down')) +/** + * @param value Type `Type.Number.` + */ +export const round = (value: string) => roundToInteger(value, Type.RoundingType.Default('To Nearest')) +/** + * @param value Type `Type.Number.` + */ +export const sqrt = squareRoot \ No newline at end of file diff --git a/bin/core/engine/type/event/index.ts b/bin/core/engine/type/event/index.ts new file mode 100644 index 0000000..39dd250 --- /dev/null +++ b/bin/core/engine/type/event/index.ts @@ -0,0 +1 @@ +export * from './player' \ No newline at end of file diff --git a/bin/core/engine/type/event/player.ts b/bin/core/engine/type/event/player.ts new file mode 100644 index 0000000..a9fea86 --- /dev/null +++ b/bin/core/engine/type/event/player.ts @@ -0,0 +1,17 @@ +/** + * {701} + */ +export type EventPlayerType + = 'All' + | 'Slot0' + | 'Slot1' + | 'Slot2' + | 'Slot3' + | 'Slot4' + | 'Slot5' + | 'Slot6' + | 'Slot7' + | 'Slot8' + | 'Slot9' + | 'Slot10' + | 'Slot11' \ No newline at end of file diff --git a/bin/core/engine/type/heroConstant.ts b/bin/core/engine/type/heroConstant.ts new file mode 100644 index 0000000..0a6d533 --- /dev/null +++ b/bin/core/engine/type/heroConstant.ts @@ -0,0 +1,32 @@ +export type HeroConstantType + = '๋ฆฌํผ' + | 'ํŠธ๋ ˆ์ด์„œ' + | '๋ฉ”๋ฅด์‹œ' + | 'ํ•œ์กฐ' + | 'ํ† ๋ฅด๋น„์˜จ' + | '๋ผ์ธํ•˜๋ฅดํŠธ' + | 'ํŒŒ๋ผ' + | '์œˆ์Šคํ„ด' + | '์œ„๋„์šฐ๋ฉ”์ด์ปค' + | '๋ฐ”์Šคํ‹ฐ์˜จ' + | '์‹œ๋ฉ”ํŠธ๋ผ' + | '์  ์•ผํƒ€' + | '๋กœ๋“œํ˜ธ๊ทธ' + | '๊ฒ์ง€' + | '๋กœ๋“œํ˜ธ๊ทธ' + | '๋งฅํฌ๋ฆฌ' + | '์ •ํฌ๋žซ' + | '์ž๋ฆฌ์•ผ' + | '์†”์ ธ: 76' + | '๋ฃจ์‹œ์šฐ' + | 'D.VA' + | '๋ฉ”์ด' + | '์†œ๋ธŒ๋ผ' + | '๋‘ ํ”ผ์ŠคํŠธ' + | '์•„๋‚˜' + | '์˜ค๋ฆฌ์‚ฌ' + | '๋ธŒ๋ฆฌ๊ธฐํ…Œ' + | '๋ชจ์ด๋ผ' + | '๋ ˆํ‚น๋ณผ' + | '์• ์‰ฌ' + | '๋ฐ”ํ‹ฐ์ŠคํŠธ' \ No newline at end of file diff --git a/bin/core/engine/type/index.ts b/bin/core/engine/type/index.ts new file mode 100644 index 0000000..e102761 --- /dev/null +++ b/bin/core/engine/type/index.ts @@ -0,0 +1,6 @@ +export * from './event' +export * from './value' +export * from './heroConstant' +export * from './slotRange' +export * from './teamConstant' +export * from './variable' \ No newline at end of file diff --git a/bin/core/engine/type/slotRange.ts b/bin/core/engine/type/slotRange.ts new file mode 100644 index 0000000..5c3a2b4 --- /dev/null +++ b/bin/core/engine/type/slotRange.ts @@ -0,0 +1,15 @@ +export type SlotRangeType + = -1 + | 0 + | 1 + | 2 + | 3 + | 4 + | 5 + | 6 + | 7 + | 8 + | 9 + | 10 + | 11 + | 12 \ No newline at end of file diff --git a/bin/core/engine/type/teamConstant.ts b/bin/core/engine/type/teamConstant.ts new file mode 100644 index 0000000..88d73db --- /dev/null +++ b/bin/core/engine/type/teamConstant.ts @@ -0,0 +1,7 @@ +/** + * {700} + */ +export type TeamConstantType + = 'All' + | 'Team 1' + | 'Team 2' \ No newline at end of file diff --git a/bin/core/engine/type/value/add.ts b/bin/core/engine/type/value/add.ts new file mode 100644 index 0000000..b63a5aa --- /dev/null +++ b/bin/core/engine/type/value/add.ts @@ -0,0 +1,8 @@ +import { + ValueNumberType, + ValueVectorType +} from '.' + +export type ValueAddType + = ValueNumberType + | ValueVectorType \ No newline at end of file diff --git a/bin/core/engine/type/value/array.ts b/bin/core/engine/type/value/array.ts new file mode 100644 index 0000000..748a1b3 --- /dev/null +++ b/bin/core/engine/type/value/array.ts @@ -0,0 +1,43 @@ +import { + IAllDeadPlayers, + IAllHeroes, + IAllLivingPlayers, + IAllPlayers, + IAllPlayersNotOnObjective, + IAllPlayersOnObjective, + IAllowedHeroes, + IArraySlice, + IEmptyArray, + IFilteredArray, + IPlayersInSlot, + IPlayersInViewAngle, + IPlayersOnHero, + IPlayersWithinRadius, + IRandomizedArray, + IRemoveFromArray, + ISortedArray, + IGlobalVariable, + IPlayerVariable, +} from '../../interface/value/child' + +export type ValueArrayType + = IAllDeadPlayers + | IAllHeroes + | IAllLivingPlayers + | IAllPlayers + | IAllPlayersNotOnObjective + | IAllPlayersOnObjective + | IAllowedHeroes + | IArraySlice + | IEmptyArray + | IFilteredArray + | IPlayersInSlot + | IPlayersInViewAngle + | IPlayersOnHero + | IPlayersWithinRadius + | IRandomizedArray + | IRemoveFromArray + | ISortedArray + + | IGlobalVariable + | IPlayerVariable \ No newline at end of file diff --git a/bin/core/engine/type/value/assisterParam.ts b/bin/core/engine/type/value/assisterParam.ts new file mode 100644 index 0000000..69a9987 --- /dev/null +++ b/bin/core/engine/type/value/assisterParam.ts @@ -0,0 +1,8 @@ +import { + INull, + ValuePlayerType +} from '../../interface' + +export type ValueAssisterParamType + = INull + | ValuePlayerType \ No newline at end of file diff --git a/bin/core/engine/type/value/barrier.ts b/bin/core/engine/type/value/barrier.ts new file mode 100644 index 0000000..5dd3784 --- /dev/null +++ b/bin/core/engine/type/value/barrier.ts @@ -0,0 +1,7 @@ +/** + * {702} + */ +export type ValueBarrierType + = 'Barriers Do Not Block Los' + | 'Enemy Barriers Block Los' + | 'All Barriers Block Los' \ No newline at end of file diff --git a/bin/core/engine/type/value/beam.ts b/bin/core/engine/type/value/beam.ts new file mode 100644 index 0000000..5f9d6f6 --- /dev/null +++ b/bin/core/engine/type/value/beam.ts @@ -0,0 +1,4 @@ +export type ValueBeamType + = 'Good Beam' + | 'Bad Beam' + | 'Grapple Beam' \ No newline at end of file diff --git a/bin/core/engine/type/value/beamReevaluation.ts b/bin/core/engine/type/value/beamReevaluation.ts new file mode 100644 index 0000000..03e0dc3 --- /dev/null +++ b/bin/core/engine/type/value/beamReevaluation.ts @@ -0,0 +1,5 @@ +export type ValueBeamReevaluationType + = 'Visible To Position and Radius' + | 'Position and Radius' + | 'Visible To' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/bool.ts b/bin/core/engine/type/value/bool.ts new file mode 100644 index 0000000..86f8dc8 --- /dev/null +++ b/bin/core/engine/type/value/bool.ts @@ -0,0 +1,108 @@ +import { + IArrayContains, + IEntityExists, + IEventWasCriticalHit, + IFalse, + ICompare, + IHasSpawned, + IHasStatus, + IIsAlive, + IIsAssemblingHeroes, + IIsBetweenRounds, + IIsButtonHeld, + IIsCommunicating, + IIsCommunicatingAny, + IIsCommunicatingAnyEmote, + IIsCommunicatingAnyVoiceLine, + IIsControlModePointLocked, + IIsCrouching, + IIsCTFModeInSuddenDeath, + IIsDead, + IIsFiringPrimary, + IIsFiringSecondary, + IIsFlagAtBase, + IIsFlagBeingCarried, + IIsGameInProgress, + IIsHeroBeingPlayed, + IIsInAir, + IIsInLineOfSight, + IIsInSetup, + IIsInSpawnRoom, + IIsInViewAngle, + IIsMatchComplete, + IIsMoving, + IIsObjectiveComplete, + IIsOnGround, + IIsOnObjective, + IIsOnWall, + IIsPortraitOnFire, + IIsStanding, + IIsTeamOnDefense, + IIsTeamOnOffense, + IIsTrueForAll, + IIsTrueForAny, + IIsUsingAbility1, + IIsUsingAbility2, + IIsUsingUltimate, + IIsWaitingForPlayers, + INot, + IOr, + ITrue, + IAnd, +} from '../../interface/value' + +export type ValueBoolType + = IFalse + | ITrue + + | INot + | IOr + | IAnd + + | IArrayContains + | ICompare + | IEntityExists + | IEventWasCriticalHit + | IHasSpawned + | IHasStatus + | IIsAlive + + | IIsAssemblingHeroes + | IIsBetweenRounds + | IIsButtonHeld + | IIsCommunicating + | IIsCommunicatingAny + | IIsCommunicatingAnyEmote + | IIsCommunicatingAnyVoiceLine + | IIsControlModePointLocked + | IIsCrouching + | IIsCTFModeInSuddenDeath + | IIsDead + | IIsFiringPrimary + | IIsFiringSecondary + | IIsFlagAtBase + | IIsFlagBeingCarried + | IIsGameInProgress + | IIsHeroBeingPlayed + | IIsInAir + | IIsInLineOfSight + | IIsInSetup + | IIsInSpawnRoom + | IIsInViewAngle + | IIsMatchComplete + | IIsMoving + | IIsObjectiveComplete + | IIsOnGround + | IIsOnObjective + | IIsOnWall + | IIsPortraitOnFire + | IIsStanding + | IIsFiringSecondary + | IIsTeamOnDefense + | IIsTeamOnOffense + | IIsTrueForAll + | IIsTrueForAny + | IIsUsingAbility1 + | IIsUsingAbility2 + | IIsUsingUltimate + | IIsWaitingForPlayers \ No newline at end of file diff --git a/bin/core/engine/type/value/button.ts b/bin/core/engine/type/value/button.ts new file mode 100644 index 0000000..43eac80 --- /dev/null +++ b/bin/core/engine/type/value/button.ts @@ -0,0 +1,9 @@ +export type ValueButtonType + = 'Primary Fire' + | 'Secondary Fire' + | 'Ability 1' + | 'Ability 2' + | 'Ultimate' + | 'Interact' + | 'Jump' + | 'Crouch' \ No newline at end of file diff --git a/bin/core/engine/type/value/clipping.ts b/bin/core/engine/type/value/clipping.ts new file mode 100644 index 0000000..24dfa46 --- /dev/null +++ b/bin/core/engine/type/value/clipping.ts @@ -0,0 +1,3 @@ +export type ValueClippingType + = 'Clip Against Surfaces' + | 'Do Not Clip' \ No newline at end of file diff --git a/bin/core/engine/type/value/color.ts b/bin/core/engine/type/value/color.ts new file mode 100644 index 0000000..1e8064e --- /dev/null +++ b/bin/core/engine/type/value/color.ts @@ -0,0 +1,14 @@ +export type ValueColorType + = 'White' + | 'Yellow' + | 'Green' + | 'Purple' + | 'Red' + | 'Blue' + | 'Team 1' + | 'Team 2' + | 'Aqua' + | 'Orange' + | 'Sky Blue' + | 'Turqoise' + | 'Lime Green' \ No newline at end of file diff --git a/bin/core/engine/type/value/communication.ts b/bin/core/engine/type/value/communication.ts new file mode 100644 index 0000000..066cbf4 --- /dev/null +++ b/bin/core/engine/type/value/communication.ts @@ -0,0 +1,15 @@ +export type ValueCommunicationType + = 'Voice Line Up' + | 'Voice Line Left' + | 'Voice Line Right' + | 'Voice Line Down' + | 'Emote Up' + | 'Emote Left' + | 'Emote Right' + | 'Emote Down' + | 'Ultimate Status' + | 'Hello' + | 'Need Healing' + | 'Group' + | 'Thanks' + | 'Acknowledge' \ No newline at end of file diff --git a/bin/core/engine/type/value/damageModificationId.ts b/bin/core/engine/type/value/damageModificationId.ts new file mode 100644 index 0000000..88c4a41 --- /dev/null +++ b/bin/core/engine/type/value/damageModificationId.ts @@ -0,0 +1,6 @@ +import { ILastDamageModificationId, IGlobalVariable, IPlayerVariable } from '../../interface/value/child' + +export type ValueDamageModificationId + = ILastDamageModificationId + | IGlobalVariable + | IPlayerVariable \ No newline at end of file diff --git a/bin/core/engine/type/value/damageModificationReevaluation.ts b/bin/core/engine/type/value/damageModificationReevaluation.ts new file mode 100644 index 0000000..df5b080 --- /dev/null +++ b/bin/core/engine/type/value/damageModificationReevaluation.ts @@ -0,0 +1,4 @@ +export type ValueDamageModificationReevaluationType + = 'Receivers Damagers And Damage Percent' + | 'Receivers And Damagers' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/damageOverTimeId.ts b/bin/core/engine/type/value/damageOverTimeId.ts new file mode 100644 index 0000000..ed704b1 --- /dev/null +++ b/bin/core/engine/type/value/damageOverTimeId.ts @@ -0,0 +1,6 @@ +import { ILastDamageOverTimeId, IGlobalVariable, IPlayerVariable } from '../../interface/value/child' + +export type ValueDamageOverTimeId + = ILastDamageOverTimeId + | IGlobalVariable + | IPlayerVariable \ No newline at end of file diff --git a/bin/core/engine/type/value/destinationParam.ts b/bin/core/engine/type/value/destinationParam.ts new file mode 100644 index 0000000..add614e --- /dev/null +++ b/bin/core/engine/type/value/destinationParam.ts @@ -0,0 +1,5 @@ +import { ValueNumberType, ValueVectorType } from '.' + +export type ValueDestinationParamType + = ValueNumberType + | ValueVectorType \ No newline at end of file diff --git a/bin/core/engine/type/value/divide.ts b/bin/core/engine/type/value/divide.ts new file mode 100644 index 0000000..2531cb8 --- /dev/null +++ b/bin/core/engine/type/value/divide.ts @@ -0,0 +1,8 @@ +import { + ValueNumberType, + ValueVectorType +} from '.' + +export type ValueDivideType + = ValueNumberType + | ValueVectorType \ No newline at end of file diff --git a/bin/core/engine/type/value/effect.ts b/bin/core/engine/type/value/effect.ts new file mode 100644 index 0000000..94348da --- /dev/null +++ b/bin/core/engine/type/value/effect.ts @@ -0,0 +1,18 @@ +export type ValueEffectType + = 'Sphere' + | 'Light Shaft' + | 'Orb' + | 'Ring' + | 'Cloud' + | 'Sparkles' + | 'Good Aura' + | 'Bad Aura' + | 'Energy Sound' + | 'Pick-up Sound' + | 'Pick' + | 'Good Aura Sound' + | 'Bad Aura Sound' + | 'Sparkles Sound' + | 'Smoke Sound' + | 'Decal Sound' + | 'Beacon Sound' \ No newline at end of file diff --git a/bin/core/engine/type/value/effectReevaluation.ts b/bin/core/engine/type/value/effectReevaluation.ts new file mode 100644 index 0000000..20c3fc5 --- /dev/null +++ b/bin/core/engine/type/value/effectReevaluation.ts @@ -0,0 +1,5 @@ +export type ValueEffectReevaluationType + = 'Visible To, Position, And Radius' + | 'Position And Radius' + | 'Visible To' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/entity.ts b/bin/core/engine/type/value/entity.ts new file mode 100644 index 0000000..07e53b3 --- /dev/null +++ b/bin/core/engine/type/value/entity.ts @@ -0,0 +1,18 @@ +import { + ValuePlayerType +} from '.' + +import { + IGlobalVariable, + IPlayerVariable, + ILastCreatedEntity +} from '../../interface/value' + +/** + * {703} + */ +export type ValueEntityType + = ValuePlayerType + | ILastCreatedEntity + | IGlobalVariable + | IPlayerVariable \ No newline at end of file diff --git a/bin/core/engine/type/value/facingReevaluation.ts b/bin/core/engine/type/value/facingReevaluation.ts new file mode 100644 index 0000000..fe971e8 --- /dev/null +++ b/bin/core/engine/type/value/facingReevaluation.ts @@ -0,0 +1,3 @@ +export type ValueFacingReevaluationType + = 'Direction And Turn Rate' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/healOverTimeId.ts b/bin/core/engine/type/value/healOverTimeId.ts new file mode 100644 index 0000000..8387277 --- /dev/null +++ b/bin/core/engine/type/value/healOverTimeId.ts @@ -0,0 +1,6 @@ +import { ILastHealOverTimeId, IGlobalVariable, IPlayerVariable } from '../../interface/value/child' + +export type ValueHealOverTimeIdType + = ILastHealOverTimeId + | IGlobalVariable + | IPlayerVariable \ No newline at end of file diff --git a/bin/core/engine/type/value/hero.ts b/bin/core/engine/type/value/hero.ts new file mode 100644 index 0000000..fa33207 --- /dev/null +++ b/bin/core/engine/type/value/hero.ts @@ -0,0 +1,8 @@ +import { + IHero, + IHeroOf, +} from '../../interface/value/child' + +export type ValueHeroType + = IHero + | IHeroOf \ No newline at end of file diff --git a/bin/core/engine/type/value/hudTextReevaluation.ts b/bin/core/engine/type/value/hudTextReevaluation.ts new file mode 100644 index 0000000..8910b5d --- /dev/null +++ b/bin/core/engine/type/value/hudTextReevaluation.ts @@ -0,0 +1,3 @@ +export type ValueHudTextReevaluationType + = 'Visible To And String' + | 'String' \ No newline at end of file diff --git a/bin/core/engine/type/value/icon.ts b/bin/core/engine/type/value/icon.ts new file mode 100644 index 0000000..7e8bcc8 --- /dev/null +++ b/bin/core/engine/type/value/icon.ts @@ -0,0 +1,37 @@ +export type ValueIconType + = 'Arrow: Down' + | 'Arrow: Left' + | 'Arrow: Right' + | 'Arrow: Up' + | 'Asterisk' + | 'Bolt' + | 'Checkmark' + | 'Circle' + | 'Club' + | 'Diamond' + | 'Dizzy' + | 'Exclamation Mark' + | 'Eye' + | 'Fire' + | 'Flag' + | 'Halo' + | 'Happy' + | 'Heart' + | 'Moon' + | 'No' + | 'Plus' + | 'Position' + | 'Position 2' + | 'Question Mark' + | 'Radioactive' + | 'Recycle' + | 'Ring Thick' + | 'Ring Thin' + | 'Sad' + | 'Skull' + | 'Spade' + | 'Spiral' + | 'Stop' + | 'Trashcan' + | 'Warning' + | 'X' \ No newline at end of file diff --git a/bin/core/engine/type/value/iconReevaluation.ts b/bin/core/engine/type/value/iconReevaluation.ts new file mode 100644 index 0000000..6ebd328 --- /dev/null +++ b/bin/core/engine/type/value/iconReevaluation.ts @@ -0,0 +1,5 @@ +export type ValueIconReevaluationType + = 'Visible To And Position' + | 'Position' + | 'Visible To' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/inWorldTextReevaluation.ts b/bin/core/engine/type/value/inWorldTextReevaluation.ts new file mode 100644 index 0000000..268d70c --- /dev/null +++ b/bin/core/engine/type/value/inWorldTextReevaluation.ts @@ -0,0 +1,4 @@ +export type ValueInWorldTextReevaluationType + = 'Visible To, Position, And String' + | 'Visible To And String' + | 'String' \ No newline at end of file diff --git a/bin/core/engine/type/value/index.ts b/bin/core/engine/type/value/index.ts new file mode 100644 index 0000000..e39a171 --- /dev/null +++ b/bin/core/engine/type/value/index.ts @@ -0,0 +1,56 @@ +export * from './number' +export * from './array' +export * from './bool' +export * from './string' +export * from './value' +export * from './player' +export * from './vector' +export * from './transformation' +export * from './team' +export * from './entity' +export * from './status' +export * from './hero' +export * from './button' +export * from './communication' +export * from './barrier' +export * from './losCheck' +export * from './roundingType' +export * from './text' +export * from './operator' +export * from './relative' +export * from './motion' +export * from './reevaluation' +export * from './effect' +export * from './color' +export * from './effectReevaluation' +export * from './location' +export * from './hudTextReevaluation' +export * from './iconReevaluation' +export * from './icon' +export * from './inWorldTextReevaluation' +export * from './clipping' +export * from './textId' +export * from './variableOperation' +export * from './playEffect' +export * from './invisibleTo' +export * from './objectiveDescriptionReevaluation' +export * from './startAcceleratingReevaluation' +export * from './damageModificationReevaluation' +export * from './facingReevaluation' +export * from './damageModificationId' +export * from './damageOverTimeId' +export * from './healOverTimeId' +export * from './waitBehavior' +export * from './add' +export * from './divide' +export * from './multiply' +export * from './stringParam' +export * from './subtract' +export * from './assisterParam' +export * from './playersParam' +export * from './destinationParam' +export * from './startThrottleBehavior' +export * from './startThrottleReevaluation' +export * from './beam' +export * from './beamReevaluation' +export * from './spectators' \ No newline at end of file diff --git a/bin/core/engine/type/value/invisibleTo.ts b/bin/core/engine/type/value/invisibleTo.ts new file mode 100644 index 0000000..4dc509e --- /dev/null +++ b/bin/core/engine/type/value/invisibleTo.ts @@ -0,0 +1,4 @@ +export type ValueInvisibleToType + = 'All' + | 'Enemies' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/location.ts b/bin/core/engine/type/value/location.ts new file mode 100644 index 0000000..756cdda --- /dev/null +++ b/bin/core/engine/type/value/location.ts @@ -0,0 +1,4 @@ +export type ValueLocationType + = 'Left' + | 'Top' + | 'Right' \ No newline at end of file diff --git a/bin/core/engine/type/value/losCheck.ts b/bin/core/engine/type/value/losCheck.ts new file mode 100644 index 0000000..cb27fb3 --- /dev/null +++ b/bin/core/engine/type/value/losCheck.ts @@ -0,0 +1,8 @@ +/** + * {651} + */ +export type ValueLosCheckType + = 'Off' + | 'Surfaces' + | 'Surfaces And Enemy Barriers' + | 'Surfaces And All Barriers' \ No newline at end of file diff --git a/bin/core/engine/type/value/motion.ts b/bin/core/engine/type/value/motion.ts new file mode 100644 index 0000000..7fb0052 --- /dev/null +++ b/bin/core/engine/type/value/motion.ts @@ -0,0 +1,3 @@ +export type ValueMotionType + = 'Cancel Contrary Motion' + | 'Incorporate Contrary Motion' \ No newline at end of file diff --git a/bin/core/engine/type/value/multiply.ts b/bin/core/engine/type/value/multiply.ts new file mode 100644 index 0000000..ad7a29f --- /dev/null +++ b/bin/core/engine/type/value/multiply.ts @@ -0,0 +1,8 @@ +import { + ValueNumberType, + ValueVectorType +} from '.' + +export type ValueMultiplyType + = ValueNumberType + | ValueVectorType \ No newline at end of file diff --git a/bin/core/engine/type/value/number.ts b/bin/core/engine/type/value/number.ts new file mode 100644 index 0000000..9a3626a --- /dev/null +++ b/bin/core/engine/type/value/number.ts @@ -0,0 +1,163 @@ +import { + INumber, + IAdd, + + IAngleDifference, + IAngleBetweenVectors, + + IAltitudeOf, + ICountOf, + + IArccosineInDegrees, + IArccosineInRadians, + IArcsineInDegrees, + IArcsineInRadians, + IArctangentInDegrees, + IArctangentInRadians, + ICosineFromDegrees, + ICosineFromRadians, + + IControlModeScoringPercentage, + IDistanceBetween, + IDivide, + IEventDamage, + IEyePosition, + IHealth, + IHorizontalAngleFromDirection, + IHorizontalAngleTowards, + IHorizontalFacingAngleOf, + IHorizontalSpeedOf, + IIndexOfArrayValue, + ILastDamageModificationId, + ILastDamageOverTimeId, + ILastHealOverTimeId, + ILastTextId, + IMatchRound, + IMax, + IMaxHealth, + IMin, + IModulo, + INormalizedHealth, + INumberOfDeadPlayers, + INumberOfDeaths, + INumberOfEliminations, + INumberOfFinalBlows, + INumberOfHeroes, + INumberOfLivingPlayers, + INumberOfPlayers, + INumberOfPlayersOnObjective, + IObjectiveIndex, + IPayloadProgressPercentage, + IPointCapturePercentage, + IRaiseToPower, + IRandomInteger, + IRandomReal, + IRoundToInteger, + IScoreOf, + ISineFromDegrees, + ISineFromRadians, + ISlotOf, + ISpeedOf, + ISpeedOfInDirection, + ISquareRoot, + ISubtract, + ITangentFromDegrees, + ITangentFromRadians, + ITeamScore, + IUltimateChargePercent, + IVerticalAngleFromDirection, + IVerticalAngleTowards, + IVerticalFacingAngleOf, + IVerticalSpeedOf, + IServerLoad, + IServerLoadAverage, + IServerLoadPeak, + +} from '../../interface/value/child' + +import { + IGlobalVariable, + IPlayerVariable +} from '../../interface/value/child' + +export type ValueNumberType + = INumber + | IAdd + + | IAngleDifference + | IAngleBetweenVectors + + | IAltitudeOf + | ICountOf + + | IArccosineInDegrees + | IArccosineInRadians + | IArcsineInDegrees + | IArcsineInRadians + | IArctangentInDegrees + | IArctangentInRadians + | ICosineFromDegrees + | ICosineFromRadians + + | IControlModeScoringPercentage + + | IGlobalVariable + | IPlayerVariable + | IDistanceBetween + + | IDivide + | IEventDamage + | IEyePosition + | IHealth + + | IHorizontalAngleFromDirection + | IHorizontalAngleTowards + | IHorizontalFacingAngleOf + | IHorizontalSpeedOf + + | IIndexOfArrayValue + | ILastDamageModificationId + | ILastDamageOverTimeId + | ILastHealOverTimeId + | ILastTextId + | IMatchRound + | IMax + | IMaxHealth + | IMin + | IModulo + | INormalizedHealth + + | INumberOfDeadPlayers + | INumberOfDeaths + | INumberOfEliminations + | INumberOfFinalBlows + | INumberOfHeroes + | INumberOfLivingPlayers + | INumberOfPlayers + | INumberOfPlayersOnObjective + | IObjectiveIndex + | IPayloadProgressPercentage + | IPointCapturePercentage + | IRaiseToPower + | IRandomInteger + | IRandomReal + | IRoundToInteger + | IScoreOf + | ISineFromDegrees + | ISineFromRadians + | ISlotOf + | ISpeedOf + | ISpeedOfInDirection + | ISquareRoot + | ISubtract + | ITangentFromDegrees + | ITangentFromRadians + | ITeamScore + | IUltimateChargePercent + | IVerticalAngleFromDirection + | IVerticalAngleTowards + | IVerticalFacingAngleOf + | IVerticalSpeedOf + | IServerLoad + | IServerLoadAverage + | IServerLoadPeak \ No newline at end of file diff --git a/bin/core/engine/type/value/objectiveDescriptionReevaluation.ts b/bin/core/engine/type/value/objectiveDescriptionReevaluation.ts new file mode 100644 index 0000000..fa64ec1 --- /dev/null +++ b/bin/core/engine/type/value/objectiveDescriptionReevaluation.ts @@ -0,0 +1,3 @@ +export type ValueObjectiveDescriptionReevaluationType + = 'Visible To And String' + | 'String' \ No newline at end of file diff --git a/bin/core/engine/type/value/operator.ts b/bin/core/engine/type/value/operator.ts new file mode 100644 index 0000000..b072b3d --- /dev/null +++ b/bin/core/engine/type/value/operator.ts @@ -0,0 +1,7 @@ +export type ValueOperatorType + = '==' + | '!=' + | '<' + | '<=' + | '>' + | '>=' \ No newline at end of file diff --git a/bin/core/engine/type/value/playEffect.ts b/bin/core/engine/type/value/playEffect.ts new file mode 100644 index 0000000..2585b4e --- /dev/null +++ b/bin/core/engine/type/value/playEffect.ts @@ -0,0 +1,11 @@ +export type ValuePlayEffect + = 'Good Explosion' + | 'Bad Explosion' + | 'Ring Explosion' + | 'Good Pickup Effect' + | 'Bad Pickup Effect' + | 'Debuff Impact Sound' + | 'Buff Impact Sound' + | 'Ring Explosion Sound' + | 'Buff Explosion Sound' + | 'Explosion Sound' \ No newline at end of file diff --git a/bin/core/engine/type/value/player.ts b/bin/core/engine/type/value/player.ts new file mode 100644 index 0000000..f6cd3f2 --- /dev/null +++ b/bin/core/engine/type/value/player.ts @@ -0,0 +1,24 @@ +import { + IGlobalVariable, + IPlayerVariable, + IClosestPlayerTo, + IEventPlayer, + IFarthestPlayerFrom, + IPlayerCarryingFlag, + IPlayerClosestToReticle, + IVictim, + IAttacker, +} from '../../interface/value/child' + +export type ValuePlayerType + = IEventPlayer + | IVictim + | IAttacker + + | IClosestPlayerTo + + | IGlobalVariable + | IPlayerVariable + | IFarthestPlayerFrom + | IPlayerCarryingFlag + | IPlayerClosestToReticle \ No newline at end of file diff --git a/bin/core/engine/type/value/playersParam.ts b/bin/core/engine/type/value/playersParam.ts new file mode 100644 index 0000000..7599ae8 --- /dev/null +++ b/bin/core/engine/type/value/playersParam.ts @@ -0,0 +1,8 @@ +import { + ValuePlayerType, + ValueArrayType, +} from '.' + +export type ValuePlayersParamType + = ValuePlayerType + | ValueArrayType \ No newline at end of file diff --git a/bin/core/engine/type/value/reevaluation.ts b/bin/core/engine/type/value/reevaluation.ts new file mode 100644 index 0000000..515bf8c --- /dev/null +++ b/bin/core/engine/type/value/reevaluation.ts @@ -0,0 +1,3 @@ +export type ValueReevaluationType + = 'Destination And Rate' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/relative.ts b/bin/core/engine/type/value/relative.ts new file mode 100644 index 0000000..eadc933 --- /dev/null +++ b/bin/core/engine/type/value/relative.ts @@ -0,0 +1,3 @@ +export type ValueRelativeType + = 'To World' + | 'To Player' \ No newline at end of file diff --git a/bin/core/engine/type/value/roundingType.ts b/bin/core/engine/type/value/roundingType.ts new file mode 100644 index 0000000..ab6ea91 --- /dev/null +++ b/bin/core/engine/type/value/roundingType.ts @@ -0,0 +1,4 @@ +export type ValueRoundingType + = 'Up' + | 'Down' + | 'To Nearest' \ No newline at end of file diff --git a/bin/core/engine/type/value/spectators.ts b/bin/core/engine/type/value/spectators.ts new file mode 100644 index 0000000..be03bef --- /dev/null +++ b/bin/core/engine/type/value/spectators.ts @@ -0,0 +1,4 @@ +export type ValueSpectatorsType + = 'Default Visibility' + | 'Visible Always' + | 'Visible Never' \ No newline at end of file diff --git a/bin/core/engine/type/value/startAcceleratingReevaluation.ts b/bin/core/engine/type/value/startAcceleratingReevaluation.ts new file mode 100644 index 0000000..d261265 --- /dev/null +++ b/bin/core/engine/type/value/startAcceleratingReevaluation.ts @@ -0,0 +1,3 @@ +export type ValueStartAcceleratingReevaluationType + = 'Direction, Rate, And Max Speed' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/startThrottleBehavior.ts b/bin/core/engine/type/value/startThrottleBehavior.ts new file mode 100644 index 0000000..a47fae1 --- /dev/null +++ b/bin/core/engine/type/value/startThrottleBehavior.ts @@ -0,0 +1,3 @@ +export type ValueStartThrottleBehaviorType + = 'Replace Existing Throttle' + | 'Add To Existing Throttle' \ No newline at end of file diff --git a/bin/core/engine/type/value/startThrottleReevaluation.ts b/bin/core/engine/type/value/startThrottleReevaluation.ts new file mode 100644 index 0000000..d288063 --- /dev/null +++ b/bin/core/engine/type/value/startThrottleReevaluation.ts @@ -0,0 +1,3 @@ +export type ValueStartThrottleReevaluationType + = 'Direction And Magnitude' + | 'None' \ No newline at end of file diff --git a/bin/core/engine/type/value/status.ts b/bin/core/engine/type/value/status.ts new file mode 100644 index 0000000..c28ebab --- /dev/null +++ b/bin/core/engine/type/value/status.ts @@ -0,0 +1,11 @@ +export type ValueStatusType + = 'Hacked' + | 'Burning' + | 'Knocked Down' + | 'Asleep' + | 'Frozen' + | 'Unkillable' + | 'Invincible' + | 'Phased Out' + | 'Rooted' + | 'Stunned' \ No newline at end of file diff --git a/bin/core/engine/type/value/string.ts b/bin/core/engine/type/value/string.ts new file mode 100644 index 0000000..b8f58b6 --- /dev/null +++ b/bin/core/engine/type/value/string.ts @@ -0,0 +1,8 @@ +import { + IHeroIconString, + IString, +} from '../../interface/value/child' + +export type ValueStringType + = IHeroIconString + | IString \ No newline at end of file diff --git a/bin/core/engine/type/value/stringParam.ts b/bin/core/engine/type/value/stringParam.ts new file mode 100644 index 0000000..f48c0e1 --- /dev/null +++ b/bin/core/engine/type/value/stringParam.ts @@ -0,0 +1,6 @@ +import { ValueStringType } from './string' +import { INull } from '../../interface' + +export type ValueStringParamType + = ValueStringType + | INull \ No newline at end of file diff --git a/bin/core/engine/type/value/subtract.ts b/bin/core/engine/type/value/subtract.ts new file mode 100644 index 0000000..b310d90 --- /dev/null +++ b/bin/core/engine/type/value/subtract.ts @@ -0,0 +1,8 @@ +import { + ValueNumberType, + ValueVectorType +} from '.' + +export type ValueSubtractType + = ValueNumberType + | ValueVectorType \ No newline at end of file diff --git a/bin/core/engine/type/value/team.ts b/bin/core/engine/type/value/team.ts new file mode 100644 index 0000000..4593487 --- /dev/null +++ b/bin/core/engine/type/value/team.ts @@ -0,0 +1,12 @@ +import { + ITeam, + IControlModeScoringTeam, + IOppositeTeamOf, + ITeamOf +} from '../../interface/value' + +export type ValueTeamType + = ITeam + | IControlModeScoringTeam + | IOppositeTeamOf + | ITeamOf \ No newline at end of file diff --git a/bin/core/engine/type/value/text.ts b/bin/core/engine/type/value/text.ts new file mode 100644 index 0000000..86a2c69 --- /dev/null +++ b/bin/core/engine/type/value/text.ts @@ -0,0 +1,721 @@ +export type ValueTextType + = '' + | '----------' + | '-> {0}' + | '!' + | '!!' + | '!!!' + | '#{0}' + | '({0})' + | '*' + | '...' + | '?' + | '??' + | '???' + | '{0} - {1}' + | '{0} - {1} - {2}' + | '{0} ->' + | '{0} -> {1}' + | '{0} != {1}' + | '{0} * {1}' + | '{0} / {1}' + | '{0} : {1} : {2}' + | '{0} {1}' + | '{0} {1} {2}' + | '{0} + {1}' + | '{0} <-' + | '{0} <- {1}' + | '{0} <->' + | '{0} <-> {1}' + | '{0} < {1}' + | '{0} <= {1}' + | '{0} = {1}' + | '{0} == {1}' + | '{0} > {1}' + | '{0} >= {1}' + | '{0} and {1}' + | '{0} m' + | '{0} m/s' + | '{0} sec' + | '{0} vs {1}' + | '{0}!' + | '{0}!!' + | '{0}!!!' + | '{0}%' + | '{0}, {1}' + | '{0}, {1}, and {2}' + | '{0}:' + | '{0}: {1}' + | '{0}: {1} and {2}' + | '{0}:{1}' + | '{0}?' + | '{0}??' + | '{0}???' + | '<- {0}' + | '<-> {0}' + | 'Abilities' + | 'Ability' + | 'Ability 1' + | 'Ability 2' + | 'Agility' + | 'Alert' + | 'Alive' + | 'Allies' + | 'Ally' + | 'Ammunition' + | 'Angle' + | 'Attack' + | 'Attacked' + | 'Attacking' + | 'Attempt' + | 'Attempts' + | 'Average' + | 'Avoid' + | 'Avoided' + | 'Avoiding' + | 'Backward' + | 'Bad' + | 'Ban' + | 'Banned' + | 'Banning' + | 'Best' + | 'Better' + | 'Bid' + | 'Bids' + | 'Block' + | 'Blocked' + | 'Blocking' + | 'Blue' + | 'Bonus' + | 'Bonuses' + | 'Boss' + | 'Bosses' + | 'Bought' + | 'Build' + | 'Building' + | 'Built' + | 'Burn' + | 'Burning' + | 'Burnt' + | 'Buy' + | 'Buying' + | 'Capture' + | 'Captured' + | 'Capturing' + | 'Caution' + | 'Center' + | 'Cahllenge Accepted' + | 'Charisma' + | 'Chase' + | 'Chased' + | 'Chasing' + | 'Checkpoint' + | 'Checkpoints' + | 'Cloud' + | 'Clouds' + | 'Club' + | 'Clubs' + | 'Combo' + | 'Come Here' + | 'Condiition' + | 'Congratulations' + | 'Connect' + | 'Connected' + | 'Connecting' + | 'Constitution' + | 'Control Point' + | 'Control Points' + | 'Cooldown' + | 'Cooldowns' + | 'Corrupt' + | 'Corrupted' + | 'Corrupting' + | 'Credit' + | 'Credits' + | 'Critical' + | 'Crouch' + | 'Crouched' + | 'Crouching' + | 'Current' + | 'Current Allies' + | 'Current Ally' + | 'Current Attempt' + | 'Current Checkpoint' + | 'Current Enemies' + | 'Current Enemy' + | 'Current Form' + | 'Current Game' + | 'Current Hero' + | 'Current Heroes' + | 'Current Hostage' + | 'Current Hostages' + | 'Current Level' + | 'Current Mission' + | 'Current Object' + | 'Current Objective' + | 'Current Objects' + | 'Current Phase' + | 'Current Player' + | 'Current Players' + | 'Current Round' + | 'Current Target' + | 'Current Targets' + | 'Current Upgrade' + | 'Damage' + | 'Damaged' + | 'Damaging' + | 'Danger' + | 'Dead' + | 'Deal' + | 'Dealing' + | 'Dealt' + | 'Deck' + | 'Decks' + | 'Defeat' + | 'Defend' + | 'Defended' + | 'Defending' + | 'Defense' + | 'Deliver' + | 'Delivered' + | 'Delivering' + | 'Depth' + | 'Destabilize' + | 'Destabilized' + | 'Destabilizing' + | 'Destroy' + | 'Destroyed' + | 'Destroying' + | 'Detect' + | 'Detected' + | 'Detecting' + | 'Dexterity' + | 'Diamond' + | 'Diamonds' + | 'Die' + | 'Discard' + | 'Discarded' + | 'Discarding' + | 'Disconnect' + | 'Disconnected' + | 'Disconnecting' + | 'Distance' + | 'Distances' + | 'Dodge' + | 'Dodged' + | 'Dodging' + | 'Dome' + | 'Domes' + | 'Down' + | 'Download' + | 'Downloaded' + | 'Downloading' + | 'Draw' + | 'Drawing' + | 'Drawn' + | 'Drop' + | 'Dropped' + | 'Dropping' + | 'Dying' + | 'East' + | 'Eliminate' + | 'Eliminated' + | 'Eliminating' + | 'Elimination' + | 'Eliminations' + | 'Enemiies' + | 'Enemy' + | 'Enterance' + | 'Escort' + | 'Escorted' + | 'Escorting' + | 'Excellent' + | 'Exit' + | 'Experience' + | 'Extreme' + | 'Face' + | 'Faces' + | 'Facing' + | 'Failed' + | 'Failing' + | 'Failure' + | 'Fall' + | 'Fallen' + | 'Failling' + | 'Far' + | 'Fast' + | 'Faster' + | 'Fastest' + | 'Fault' + | 'Faults' + | 'Final' + | 'Final Allies' + | 'Final Ally' + | 'Final Attempt' + | 'Final Checkpoint' + | 'Final Enemies' + | 'Final Enemy' + | 'Final Form' + | 'Final Game' + | 'Final Hero' + | 'Final Heroes' + | 'Final Hostage' + | 'Final Hostages' + | 'Final Item' + | 'Final Level' + | 'Final Mission' + | 'Final Object' + | 'Final Objective' + | 'Final Objects' + | 'Final Phase' + | 'Final Player' + | 'Final Players' + | 'Final Round' + | 'Final Target' + | 'Final Targets' + | 'Final Time' + | 'Final Upgrade' + | 'Find' + | 'Finding' + | 'Finish' + | 'Finished' + | 'Finishing' + | 'Flown' + | 'Fly' + | 'Flying' + | 'Fold' + | 'Folded' + | 'Folding' + | 'Form' + | 'Forms' + | 'Forward' + | 'Found' + | 'Freeze' + | 'Freezing' + | 'Frozen' + | 'Game' + | 'Games' + | 'Games Lost' + | 'Games Won' + | 'Gg' + | 'Go' + | 'Goal' + | 'Goals' + | 'Going' + | 'Good' + | 'Good Luck' + | 'Goodbye' + | 'Green' + | 'Guilt' + | 'Hack' + | 'Hacked' + | 'Hacking' + | 'Hand' + | 'Hands' + | 'Heal' + | 'Healed' + | 'Healer' + | 'Healers' + | 'Healing' + | 'Heart' + | 'Hearts' + | 'Height' + | 'Hello' + | 'Help' + | 'Here' + | 'Hero' + | 'Heroes' + | 'Hidden' + | 'Hide' + | 'Hiding' + | 'High Score' + | 'High Scores' + | 'Hit' + | 'Hitting' + | 'Hmmm' + | 'Hostage' + | 'Hostages' + | 'Huh' + | 'Hunt' + | 'Hunted' + | 'Hunter' + | 'Hunters' + | 'Hunting' + | 'I Give Up' + | 'I Tried' + | 'In View' + | 'Income' + | 'Incoming' + | 'Initial' + | 'Initial Allies' + | 'Initial Ally' + | 'Initial Attempt' + | 'Initial Checkpoint' + | 'Initial Enemies' + | 'Initial Enemy' + | 'Initial Form' + | 'Initial Game' + | 'Initial Hero' + | 'Initial Heroes' + | 'Initial Hostage' + | 'Initial Level' + | 'Initial Mission' + | 'Initial Object' + | 'Initial Objective' + | 'Initial Objects' + | 'Initial Phase' + | 'Initial Player' + | 'Initial Players' + | 'Initial Round' + | 'Initial Target' + | 'Initial Targets' + | 'Initial Upgrade' + | 'Innocent' + | 'Inside' + | 'Intelligence' + | 'Interact' + | 'Invisible' + | 'Item' + | 'Items' + | 'Join' + | 'Joined' + | 'Joining' + | 'Jump' + | 'Jumping' + | 'Kill' + | 'Kills' + | 'Killstreak' + | 'Killstreaks' + | 'Leader' + | 'Leaders' + | 'Least' + | 'Left' + | 'Less' + | 'Level' + | 'Level Down' + | 'Levels' + | 'Life' + | 'Limited' + | 'Lives' + | 'Load' + | 'Loaded' + | 'Loading' + | 'Lock' + | 'Locked' + | 'Locking' + | 'Loser' + | 'Losers' + | 'Loss' + | 'Losses' + | 'Max' + | 'Mild' + | 'Min' + | 'Mission' + | 'Mission Aborted' + | 'Mission Accomplished' + | 'Mission Failed' + | 'Missions' + | 'Moderate' + | 'Money' + | 'Monster' + | 'Monsters' + | 'More' + | 'Most' + | 'My Mistake' + | 'Near' + | 'New High Score' + | 'New Record' + | 'Next' + | 'Next Allies' + | 'Next Ally' + | 'Next Attempt' + | 'Next Checkpoint' + | 'Next Enemies' + | 'Next Enemy' + | 'Next Form' + | 'Next Game' + | 'Next Form' + | 'Next Game' + | 'Next Hero' + | 'Next Heroes' + | 'Next Hostage' + | 'Next Hostages' + | 'Next Level' + | 'Next Mission' + | 'Next Object' + | 'Next Objective' + | 'Next Objects' + | 'Next Phase' + | 'Next Player' + | 'Next Players' + | 'Next Round' + | 'Next Target' + | 'Next Targets' + | 'Next Upgrade' + | 'Nice Try' + | 'No' + | 'No Thanks' + | 'None' + | 'Normal' + | 'North' + | 'Northeast' + | 'Northwest' + | 'Not Today' + | 'Object' + | 'Objective' + | 'Objectives' + | 'Objects' + | 'Obtain' + | 'Obtained' + | 'Obtaining' + | 'Off' + | 'On' + | 'Oof' + | 'Oops' + | 'Optimal' + | 'Optimize' + | 'Optimized' + | 'Optimizing' + | 'Out Of View' + | 'Outgoing' + | 'Outside' + | 'Over' + | 'Overtime' + | 'Participant' + | 'Participants' + | 'Payload' + | 'Payloads' + | 'Phase' + | 'Phases' + | 'Pick' + | 'Picked' + | 'Picking' + | 'Pile' + | 'Piles' + | 'Play' + | 'Played' + | 'Player' + | 'Players' + | 'Point' + | 'Points' + | 'Points Earned' + | 'Points Lost' + | 'Position' + | 'Power' + | 'Power-up' + | 'Power-ups' + | 'Price' + | 'Primary Fire' + | 'Projectile' + | 'Projectiles' + | 'Protect' + | 'Protected' + | 'Protecting' + | 'Purified' + | 'Purify' + | 'Purifying' + | 'Purple' + | 'Raise' + | 'Raised' + | 'Rank' + | 'Rank A' + | 'Rank B' + | 'Rank C' + | 'Rank D' + | 'Rank E' + | 'Rank F' + | 'Rank S' + | 'Reach' + | 'Reached' + | 'Reaching' + | 'Ready' + | 'Record' + | 'Records' + | 'Recover' + | 'Recovered' + | 'Recovering' + | 'Red' + | 'Remain' + | 'Remaining' + | 'Rescue' + | 'Rescued' + | 'Rescuing' + | 'Resource' + | 'Resources' + | 'Resurrect' + | 'Resurrected' + | 'Resurrecting' + | 'Reveal' + | 'Revealed' + | 'Revealing' + | 'Reverse' + | 'Reversed' + | 'Reversing' + | 'Right' + | 'Round' + | 'Round {0}' + | 'Rounds' + | 'Rounds Lost' + | 'Rounds Won' + | 'Run' + | 'Running' + | 'Safe' + | 'Save' + | 'Saved' + | 'Saving' + | 'Score' + | 'Scores' + | 'Secondary Fire' + | 'Secure' + | 'Secured' + | 'Securing' + | 'Select' + | 'Selected' + | 'Selecting' + | 'Sell' + | 'Selling' + | 'Server Load' + | 'Server Load Average' + | 'Server Load Peak' + | 'Sever' + | 'Severe' + | 'Severed' + | 'Severing' + | 'Shop' + | 'Shops' + | 'Shuffle' + | 'Shuffled' + | 'Shuffling' + | 'Sink' + | 'Sinking' + | 'Skip' + | 'Skipped' + | 'Skipping' + | 'Sleep' + | 'Sleeping' + | 'Slept' + | 'Slow' + | 'Slower' + | 'Slowest' + | 'Sold' + | 'Sorry' + | 'South' + | 'Southeast' + | 'Southwest' + | 'Spade' + | 'Spades' + | 'Sparklers' + | 'Spawn' + | 'Spawned' + | 'Spaning' + | 'Speed' + | 'Speeds' + | 'Sphere' + | 'Spheres' + | 'Stabilize' + | 'Stabilized' + | 'Stabilizing' + | 'Stable' + | 'Star' + | 'Stars' + | 'Start' + | 'Started' + | 'Starting' + | 'Status' + | 'Stay' + | 'Stay Away' + | 'Stayed' + | 'Staying' + | 'Stop' + | 'Stopped' + | 'Stopping' + | 'Stun' + | 'Stunned' + | 'Stunning' + | 'Suboptimal' + | 'Success' + | 'Sudden Death' + | 'Sunk' + | 'Superb' + | 'Survive' + | 'Survived' + | 'Surviving' + | 'Target' + | 'Targets' + | 'Team' + | 'Teammate' + | 'Teammates' + | 'Teams' + | 'Terrible' + | 'Thank You' + | 'Thanks' + | 'That Was Awesome' + | 'Threat' + | 'Threat Level' + | 'Threat Levels' + | 'Threats' + | 'Tiebreker' + | 'Time' + | 'Times' + | 'Total' + | 'Trade' + | 'Traded' + | 'Trading' + | 'Traitor' + | 'Traitors' + | 'Transfer' + | 'Transferred' + | 'Transferring' + | 'Try Again' + | 'Turret' + | 'Turrets' + | 'Ugh' + | 'Ultimate Ability' + | 'Under' + | 'Unknown' + | 'Unlimited' + | 'Unlock' + | 'Unlocked' + | 'Unlocking' + | 'Unsafe' + | 'Unstable' + | 'Up' + | 'Upgrade' + | 'Upgraders' + | 'Upload' + | 'Uploaded' + | 'Uploading' + | 'Use Ability 1' + | 'Use Ability 2' + | 'Use Ultimate Abiility' + | 'Victory' + | 'Visible' + | 'Vortex' + | 'Vortices' + | 'Wait' + | 'Waiting' + | 'Wall' + | 'Walls' + | 'Warning' + | 'Welcome' + | 'Well Played' + | 'West' + | 'White' + | 'Wild' + | 'Win' + | 'Winner' + | 'Winners' + | 'Wins' + | 'Wisdom' + | 'Worse' + | 'Worst' + | 'Wow' + | 'Yellow' + | 'Yes' + | 'You' + | 'You Lose' + | 'You Win' + | 'Zone' + | 'Zones' + | 'ยก{0}!' + | 'ยฟ{0}?' \ No newline at end of file diff --git a/bin/core/engine/type/value/textId.ts b/bin/core/engine/type/value/textId.ts new file mode 100644 index 0000000..4ab7566 --- /dev/null +++ b/bin/core/engine/type/value/textId.ts @@ -0,0 +1,10 @@ +import { + ILastTextId, + IGlobalVariable, + IPlayerVariable +} from '../../interface/value/child' + +export type ValueTextId + = ILastTextId + | IGlobalVariable + | IPlayerVariable \ No newline at end of file diff --git a/bin/core/engine/type/value/transformation.ts b/bin/core/engine/type/value/transformation.ts new file mode 100644 index 0000000..09e8b02 --- /dev/null +++ b/bin/core/engine/type/value/transformation.ts @@ -0,0 +1,3 @@ +export type ValueTransformationType + = 'Rotation' + | 'Rotation And Translation' \ No newline at end of file diff --git a/bin/core/engine/type/value/value.ts b/bin/core/engine/type/value/value.ts new file mode 100644 index 0000000..50bd099 --- /dev/null +++ b/bin/core/engine/type/value/value.ts @@ -0,0 +1,389 @@ +import { + IAbsoluteValue, + IAdd, + IAllDeadPlayers, + IAllHeroes, + IAllLivingPlayers, + IAllPlayers, + IAllPlayersNotOnObjective, + IAllPlayersOnObjective, + IAllowedHeroes, + IAltitudeOf, + IAnd, + IAngleBetweenVectors, + IAngleDifference, + IAppendToArray, + IArccosineInDegrees, + IArccosineInRadians, + IArcsineInDegrees, + IArcsineInRadians, + IArctangentInDegrees, + IArctangentInRadians, + IArrayContains, + IArraySlice, + IAttacker, + IBackward, + IClosestPlayerTo, + ICompare, + IControlModeScoringPercentage, + IControlModeScoringTeam, + ICosineFromDegrees, + ICosineFromRadians, + ICountOf, + ICrossProduct, + ICurrentArrayElement, + IDirectionFromAngles, + IDirectionTowards, + IDistanceBetween, + IDivide, + IDotProduct, + IDown, + IEmptyArray, + IEntityExists, + IEventDamage, + IEventPlayer, + IEventWasCriticalHit, + IEyePosition, + IFacingDirectionOf, + IFalse, + IFarthestPlayerFrom, + IFilteredArray, + IFirstOf, + IFlagPosition, + IForward, + IGlobalVariable, + IHasSpawned, + IHasStatus, + IHealth, + IHero, + IHeroIconString, + IHeroOf, + IHorizontalAngleFromDirection, + IHorizontalAngleTowards, + IHorizontalFacingAngleOf, + IHorizontalSpeedOf, + IIndexOfArrayValue, + IIsAlive, + IIsAssemblingHeroes, + IIsBetweenRounds, + IIsButtonHeld, + IIsCommunicating, + IIsCommunicatingAny, + IIsCommunicatingAnyEmote, + IIsCommunicatingAnyVoiceLine, + IIsControlModePointLocked, + IIsCrouching, + IIsCTFModeInSuddenDeath, + IIsDead, + IIsFiringPrimary, + IIsFiringSecondary, + IIsFlagAtBase, + IIsFlagBeingCarried, + IIsGameInProgress, + IIsHeroBeingPlayed, + IIsInAir, + IIsInLineOfSight, + IIsInSetup, + IIsInSpawnRoom, + IIsInViewAngle, + IIsMatchComplete, + IIsMoving, + IIsObjectiveComplete, + IIsOnGround, + IIsOnObjective, + IIsOnWall, + IIsPortraitOnFire, + IIsStanding, + IIsTeamOnDefense, + IIsTeamOnOffense, + IIsTrueForAll, + IIsTrueForAny, + IIsUsingAbility1, + IIsUsingAbility2, + IIsUsingUltimate, + IIsWaitingForPlayers, + ILastCreatedEntity, + ILastDamageModificationId, + ILastDamageOverTimeId, + ILastHealOverTimeId, + ILastOf, + ILastTextId, + ILeft, + ILocalVectorOf, + IMatchRound, + IMatchTime, + IMax, + IMaxHealth, + IMin, + IModulo, + IMultiply, + INearestWalkablePosition, + INormalize, + INormalizedHealth, + INot, + INull, + INumber, + INumberOfDeadPlayers, + INumberOfDeaths, + INumberOfEliminations, + INumberOfFinalBlows, + INumberOfHeroes, + INumberOfLivingPlayers, + INumberOfPlayers, + INumberOfPlayersOnObjective, + IObjectiveIndex, + IObjectivePosition, + IOppositeTeamOf, + IPayloadPosition, + IPayloadProgressPercentage, + IOr, + IPlayerCarryingFlag, + IPlayerClosestToReticle, + IPlayerVariable, + IPlayersInSlot, + IPlayersInViewAngle, + IPlayersOnHero, + IPlayersWithinRadius, + IPointCapturePercentage, + IPositionOf, + IRandomInteger, + IRaiseToPower, + IRandomReal, + IRandomValueInArray, + IRandomizedArray, + IRayCastHitNormal, + IRayCastHitPlayer, + IRayCastHitPosition, + IRemoveFromArray, + IRight, + IRoundToInteger, + IScoreOf, + ISineFromDegrees, + ISineFromRadians, + ISlotOf, + ISortedArray, + ISpeedOf, + ISpeedOfInDirection, + ISquareRoot, + IString, + ISubtract, + ITangentFromDegrees, + ITangentFromRadians, + ITeam, + ITeamOf, + ITeamScore, + IThrottleOf, + ITotalTimeElapsed, + ITrue, + IUltimateChargePercent, + IUp, + IValueInArray, + IVector, + IVectorTowards, + IVelocityOf, + IVerticalAngleFromDirection, + IVerticalAngleTowards, + IVerticalFacingAngleOf, + IVerticalSpeedOf, + IVictim, + IWorldVectorOf, + IXComponentOf, + IYComponentOf, + IZComponentOf, +} from '../../interface/value/child' + +/** + * {704} + */ +export type ValueType + = IAbsoluteValue + | IAdd + | IAllDeadPlayers + | IAllHeroes + | IAllLivingPlayers + | IAllPlayers + | IAllPlayersNotOnObjective + | IAllPlayersOnObjective + | IAllowedHeroes + | IAltitudeOf + | IAnd + | IAngleBetweenVectors + | IAngleDifference + | IAppendToArray + | IArccosineInDegrees + | IArccosineInRadians + | IArcsineInDegrees + | IArcsineInRadians + | IArctangentInDegrees + | IArctangentInRadians + | IArrayContains + | IArraySlice + | IAttacker + | IBackward + | IClosestPlayerTo + | ICompare + | IControlModeScoringPercentage + | IControlModeScoringTeam + | ICosineFromDegrees + | ICosineFromRadians + | ICountOf + | ICrossProduct + | ICurrentArrayElement + | IDirectionFromAngles + | IDirectionTowards + | IDistanceBetween + | IDivide + | IDotProduct + | IDown + | IEmptyArray + | IEntityExists + | IEventDamage + | IEventPlayer + | IEventWasCriticalHit + | IEyePosition + | IFacingDirectionOf + | IFalse + | IFarthestPlayerFrom + | IFilteredArray + | IFirstOf + | IFlagPosition + | IForward + | IGlobalVariable + | IHasSpawned + | IHasStatus + | IHealth + | IHero + | IHeroIconString + | IHeroOf + | IHorizontalAngleFromDirection + | IHorizontalAngleTowards + | IHorizontalFacingAngleOf + | IHorizontalSpeedOf + | IIndexOfArrayValue + | IIsAlive + | IIsAssemblingHeroes + | IIsBetweenRounds + | IIsButtonHeld + | IIsCommunicating + | IIsCommunicatingAny + | IIsCommunicatingAnyEmote + | IIsCommunicatingAnyVoiceLine + | IIsControlModePointLocked + | IIsCrouching + | IIsCTFModeInSuddenDeath + | IIsDead + | IIsFiringPrimary + | IIsFiringSecondary + | IIsFlagAtBase + | IIsFlagBeingCarried + | IIsGameInProgress + | IIsHeroBeingPlayed + | IIsInAir + | IIsInLineOfSight + | IIsInSetup + | IIsInSpawnRoom + | IIsInViewAngle + | IIsMatchComplete + | IIsMoving + | IIsObjectiveComplete + | IIsOnGround + | IIsOnObjective + | IIsOnWall + | IIsPortraitOnFire + | IIsStanding + | IIsTeamOnDefense + | IIsTeamOnOffense + | IIsTrueForAll + | IIsTrueForAny + | IIsUsingAbility1 + | IIsUsingAbility2 + | IIsUsingUltimate + | IIsWaitingForPlayers + | ILastCreatedEntity + | ILastDamageModificationId + | ILastDamageOverTimeId + | ILastHealOverTimeId + | ILastOf + | ILastTextId + | ILeft + | ILocalVectorOf + | IMatchRound + | IMatchTime + | IMax + | IMaxHealth + | IMin + | IModulo + | IMultiply + | INearestWalkablePosition + | INormalize + | INormalizedHealth + | INot + | INull + | INumber + | INumberOfDeadPlayers + | INumberOfDeaths + | INumberOfEliminations + | INumberOfFinalBlows + | INumberOfHeroes + | INumberOfLivingPlayers + | INumberOfPlayers + | INumberOfPlayersOnObjective + | IObjectiveIndex + | IObjectivePosition + | IOppositeTeamOf + | IOr + | IPayloadPosition + | IPayloadProgressPercentage + | IPlayerCarryingFlag + | IPlayerClosestToReticle + | IPlayerVariable + | IPlayersInSlot + | IPlayersInViewAngle + | IPlayersOnHero + | IPlayersWithinRadius + | IPointCapturePercentage + | IPositionOf + | IRaiseToPower + | IRandomInteger + | IRandomReal + | IRandomValueInArray + | IRandomizedArray + | IRayCastHitNormal + | IRayCastHitPlayer + | IRayCastHitPosition + | IRemoveFromArray + | IRight + | IRoundToInteger + | IScoreOf + | ISineFromDegrees + | ISineFromRadians + | ISlotOf + | ISortedArray + | ISpeedOf + | ISpeedOfInDirection + | ISquareRoot + | IString + | ISubtract + | ITangentFromDegrees + | ITangentFromRadians + | ITeam + | ITeamOf + | ITeamScore + | IThrottleOf + | ITotalTimeElapsed + | ITrue + | IUltimateChargePercent + | IUp + | IValueInArray + | IVector + | IVectorTowards + | IVelocityOf + | IVerticalAngleFromDirection + | IVerticalAngleTowards + | IVerticalFacingAngleOf + | IVerticalSpeedOf + | IVictim + | IWorldVectorOf + | IXComponentOf + | IYComponentOf + | IZComponentOf \ No newline at end of file diff --git a/bin/core/engine/type/value/variableOperation.ts b/bin/core/engine/type/value/variableOperation.ts new file mode 100644 index 0000000..afd2ada --- /dev/null +++ b/bin/core/engine/type/value/variableOperation.ts @@ -0,0 +1,12 @@ +export type ValueVariableOperationType + = 'Add' + | 'Subtract' + | 'Multiply' + | 'Divide' + | 'Modulo' + | 'Raise To Power' + | 'Min' + | 'Max' + | 'Append To Array' + | 'Remove From Array By Value' + | 'Remove From Array By Index' \ No newline at end of file diff --git a/bin/core/engine/type/value/vector.ts b/bin/core/engine/type/value/vector.ts new file mode 100644 index 0000000..1c834ab --- /dev/null +++ b/bin/core/engine/type/value/vector.ts @@ -0,0 +1,72 @@ +import { + IVector, + ILocalVectorOf, + IWorldVectorOf, + IVectorTowards, + IGlobalVariable, + IPlayerVariable, + IBackward, + ICrossProduct, + IDirectionFromAngles, + IDirectionTowards, + IDotProduct, + IDown, + IDivide, + IFacingDirectionOf, + IFlagPosition, + IForward, + ILeft, + INearestWalkablePosition, + INormalize, + IObjectivePosition, + IPayloadPosition, + IPositionOf, + IRayCastHitNormal, + IRayCastHitPlayer, + IRayCastHitPosition, + IRight, + ISubtract, + IThrottleOf, + ITotalTimeElapsed, + IUp, + IVelocityOf, + IXComponentOf, + IYComponentOf, + IZComponentOf, +} from '../../interface/value/child' + +export type ValueVectorType + = IVector + | ILocalVectorOf + | IWorldVectorOf + | IVectorTowards + | IGlobalVariable + | IPlayerVariable + | IBackward + | ICrossProduct + | IDirectionFromAngles + | IDirectionTowards + | IDivide + | IDotProduct + | IDown + | IFacingDirectionOf + | IFlagPosition + | IForward + | ILeft + | INearestWalkablePosition + | INormalize + | IObjectivePosition + | IPayloadPosition + | IPositionOf + | IRayCastHitNormal + | IRayCastHitPlayer + | IRayCastHitPosition + | IRight + | ISubtract + | IThrottleOf + | ITotalTimeElapsed + | IUp + | IVelocityOf + | IXComponentOf + | IYComponentOf + | IZComponentOf \ No newline at end of file diff --git a/bin/core/engine/type/value/waitBehavior.ts b/bin/core/engine/type/value/waitBehavior.ts new file mode 100644 index 0000000..b6f6102 --- /dev/null +++ b/bin/core/engine/type/value/waitBehavior.ts @@ -0,0 +1,4 @@ +export type ValueWaitBehaviorType + = 'Ignore Condition' + | 'Abort When False' + | 'Restart When True' \ No newline at end of file diff --git a/bin/core/engine/type/variable.ts b/bin/core/engine/type/variable.ts new file mode 100644 index 0000000..1e09827 --- /dev/null +++ b/bin/core/engine/type/variable.ts @@ -0,0 +1,27 @@ +export type VariableType + = 'A' + | 'B' + | 'C' + | 'D' + | 'E' + | 'F' + | 'G' + | 'H' + | 'I' + | 'J' + | 'K' + | 'L' + | 'M' + | 'N' + | 'O' + | 'P' + | 'Q' + | 'R' + | 'S' + | 'T' + | 'U' + | 'V' + | 'W' + | 'X' + | 'Y' + | 'Z' \ No newline at end of file diff --git a/bin/core/generator/README.md b/bin/core/generator/README.md new file mode 100644 index 0000000..1794a5f --- /dev/null +++ b/bin/core/generator/README.md @@ -0,0 +1,84 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ‡ Structure + +> The Generator folder contains the following files: + + + +### โš™๏ธ generatorData.json [bin/core/generator/generatorData.json] + +- A setup file in the form of JSON where the actual name of the overwatch workshop function is recorded. The function names of the type-script implementer on the engine are all made up of `camel-case`, but the actual overwatch workshop function names are all made up of `pascal-case` and need to be converted to the actual function name. + + + +### ๐Ÿ”– reformerData.json [bin/core/generator/reformerData.json] + +- A JSON-type setup file that groups functions (like functions with similar parameters) and contains information about what to classify. (Reformer is classifies functions that are implementations of the workshop interface to make it more convenient for engine users.) +- `independent` refers to static functions, and `dependence` refers to functions that can be used after class instance is created. + + + +### ๐ŸŒ  initializer.ts [bin/core/generator/initializer.ts] + +- A command script that runs when you run the command `npm run generate:silent` The script creates the `release` folder if the user does not have the `release` folder when the engine was first started. +- `npm run generate:silent` is a command that is executed automatically when the engine is started through `npm start` and `npm run build` and so on, so general developers do not have to use it. + + + +### ๐Ÿš€ index.ts [bin/core/generator/resolver.ts] + +- `npm run generate` This is a command script that runs when you run the command. This script automatically creates all practical implementations. The script inserts a translation into the interface comment through the `inject.ts` that exists on the Language folder, and creates a practical implementer file through the `resolver.ts`. +- The `npm run generate` command is used to help core developers modify core data. + + + +### ๐Ÿ‘จ๐Ÿปโ€โœˆ๏ธ resolver.ts [bin/core/generator/resolver.ts] + +- A script containing functions that sequentially execute the functions that create the implementations of the workshop interface. This script runs and controls all creation processes step by step. + + + +### ๐Ÿ“ interface.ts [bin/core/generator/util.ts] + +- When the script `resolver.ts` executes functions sequentially, it contains an interface of data that will be used between each function. + + + +### ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿญ generator.ts [bin/core/generator/generator.ts] + +- This script contains a function that automatically creates the implementations of the workshop interface. `Event`, `Value`, `Action ` interfaces the implementations of the files are generated by the functions contained in this script. + + + +### ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ง sequence/`*`.ts [bin/core/generator/sequence/`*`.ts] + +- This script contains the detailed functions required to create the implementations of the workshop interface. This script contains functions that collect function information, analyze the Typescript grammar, or create Type implementations. + + + +### ๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽจ reformer.ts [bin/core/generator/reformer.ts] + +- A script that classifies functions that are implemented in a workshop interface by type (with similar parameters of function) among functions so that engine users can write them more conveniently + + + +### ๐Ÿ”ง util.ts [bin/core/generator/util.ts] + +- A script that contains the functions required for the generator implementation. + + + +### ๐Ÿ’ฝ logger.ts [bin/core/generator/logger.ts] + +- A logger script that prints messages on the CLI screen and logs messages from the engine in file format in the `temp` folder provided by the OS. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/generator/declarationFix.ts b/bin/core/generator/declarationFix.ts new file mode 100644 index 0000000..20974da --- /dev/null +++ b/bin/core/generator/declarationFix.ts @@ -0,0 +1,83 @@ +import { collectInterfaceFiles } from './util' +import { getLogger } from './logger' +import { writeFileSync, readFileSync } from 'fs' +import replaceAll from 'string-replace-all' +import { resolve } from 'path' + +export interface IFixItem { + context: string + fixedContext: string + indent: number +} + +export const createIndent = (indentCount) => { + let indent = `` + for(let i=0;i { new Promise(async (promiseResolve, promiseReject) => { + + const Logger = getLogger() + + Logger.debug(`All Declaration will be fixing...`) + let dtsPath = resolve(`${process.cwd()}/dist/dva.d.ts`) + let dtsData = String(readFileSync(dtsPath)) + + let exportStatements = dtsData.split(`export {\n`) + exportStatements.shift() + + let fixItems: IFixItem[] = [] + for(let exportStatement of exportStatements){ + let context = exportStatement.split(`}`)[0] + let contextLines = context.split(`\n`) + contextLines.pop() + context = contextLines.join(`\n`) + + let isErrorExist = context.indexOf(`,`) == -1 + if(isErrorExist && contextLines.length < 2) isErrorExist = !isErrorExist + if(!isErrorExist) continue + + let indent = 0 + for(let ch of contextLines[0].split(``)){ + if(ch == ' '){ + indent++ + continue + } + break + } + let fixedContext = `${contextLines.join(`,\n`)}` + + let fixItem: IFixItem = { + context, + fixedContext, + indent + } + fixItems.push(fixItem) + } + + //console.log(fixItems) + Logger.debug(`Founded ${fixItems.length}'s Fixable Error.`) + + // dtsData + let fixedDTSData = String(dtsData) + for(let fixItem of fixItems){ + let indent = createIndent(fixItem.indent) + let endIndent = createIndent(fixItem.indent-2) + fixedDTSData = replaceAll( + fixedDTSData, + `export {\n${fixItem.context}\n${endIndent}}`, + `export {\n${fixItem.fixedContext}\n${endIndent}}` + ) + } + + writeFileSync(dtsPath, fixedDTSData) + Logger.debug(`All Declaration has been fixed.`) + promiseResolve() +})} + +// npm run release +// npm run release:fixxx + +// for CLI Command Run +if(`${process.argv[1]}` == __filename) declarationFix() \ No newline at end of file diff --git a/bin/core/generator/declarationMore.ts b/bin/core/generator/declarationMore.ts new file mode 100644 index 0000000..03b2b03 --- /dev/null +++ b/bin/core/generator/declarationMore.ts @@ -0,0 +1,136 @@ +import { collectInterfaceFiles } from './util' +import { getLogger } from './logger' +import { writeFileSync, readFileSync } from 'fs' +import replaceAll from 'string-replace-all' +import { resolve } from 'path' + +export const declarationMore = () => { new Promise(async (promiseResolve, promiseReject) => { + + const Logger = getLogger() + + // Sequence Logic + let releasePath = `${process.cwd()}/dist/bin/release` + + Logger.debug(`All Declaration will be finishing...`) + await collectInterfaceFiles( + releasePath, + async (collectedDatas)=>{ + + for(let { + fileName, + fileData, + filePath, + subPath, + staticPath + + } of collectedDatas){ + + let fileNameParse = fileName.split('.') + let fileActualName = fileNameParse.shift() + let fileExt = fileNameParse.join('.') + + // Check Path is child + // /eng/resolver/child/type/ + let isTargetPath = false + let subPathParse = subPath.split('/') + let targetType = [ + 'value', + 'action', + 'event' + ] + if(subPathParse[2] == 'resolver' && + subPathParse[3] == 'child' && + (targetType.indexOf(subPathParse[4]) != -1)) + isTargetPath = true + + // Check Declaration Modify Target + if(fileExt == 'js' && isTargetPath){ + + // Logger.debug(`fileName: ${fileName}`) + // Logger.debug(`subPath: ${subPath}`) + // Logger.debug(`actPath: ${releasePath}${subPath}`) + // Logger.debug(`isTargetPath: ${isTargetPath}`) + + let commentContexts = fileData.split(`/**\r\n`) + commentContexts.shift() + + // Collect Comments + let collectedComments: string[][] = [] + for(let commentContext of commentContexts){ + let comment = commentContext.split('\r\n */')[0] + comment = replaceAll(comment, ' * ', '') + let parsedComment: string[] = [] + for(let commentLine of comment.split('\r\n')){ + parsedComment.push(commentLine) + } + collectedComments.push(parsedComment) + } + + // Logger.debug(`collectedComments`) + // Logger.debug(collectedComments) + + let declarationFilePath = resolve(`${releasePath}${subPath}/${fileActualName}.d.ts`) + // Logger.debug(`declarationFilePath`) + // Logger.debug(declarationFilePath) + + let declarationFileData = String(readFileSync(declarationFilePath)) + + // Parse d.ts + let paramsParse1 = declarationFileData.split(`: (`) + if(paramsParse1.length > 2){ + promiseReject() + throw new Error (`Boom! might be changed system?`) + } + + try{ + let before = `${paramsParse1[0]}: (` + + // Parsed Params + let params = paramsParse1[1] + let paramsParse2 = params.split(`) => `) + params = paramsParse2[0] + + let after = `) => ${paramsParse2[1]}` + if(params.indexOf(`/**`) != -1){ + Logger.warn(` ${filePath}`) + continue + } + + let parsedParams = params.split(`, `) + // console.log(`params`) + // console.log(parsedParams) + + // Inject Modified Params + let modifiedParams: string[] = [] + for(let parsedParamIndex in parsedParams){ + + let parsedParamOrderNum = Number(parsedParamIndex) + let parsedParam = parsedParams[parsedParamOrderNum] + + // collectedComments + if(typeof collectedComments[parsedParamOrderNum + 1] != 'undefined'){ + let comment = collectedComments[parsedParamOrderNum + 1] + let commentRendered = `/**\n` + for(let commentLine of comment) + commentRendered += ` * ${commentLine}\n` + commentRendered += ` */` + modifiedParams.push(`${commentRendered}\n${parsedParam}`) + }else{ + modifiedParams.push(`\n${parsedParam}`) + } + } + + let modifiedDeclaration = `${before}\n${modifiedParams.join(`,\n`)}\n${after}` + writeFileSync(declarationFilePath, modifiedDeclaration) + }catch(e){} + } + } + } + ) + + Logger.debug(`All Declaration has been finished.`) + promiseResolve() +})} + +// for CLI Command Run +if(`${process.argv[1]}` == __filename) declarationMore() \ No newline at end of file diff --git a/bin/core/generator/generator.ts b/bin/core/generator/generator.ts new file mode 100644 index 0000000..d5dea9f --- /dev/null +++ b/bin/core/generator/generator.ts @@ -0,0 +1,322 @@ +import { Sequence } from 'async-sequencer' +import { IData } from './interface' +import * as Util from './util' +import generatorData from './generatorData.json' + +import fs from 'fs' + +// Used to identify event functions. +let eventResolverNames = Object.keys(generatorData.event.eventName) +eventResolverNames = eventResolverNames.map(eventName => eventName.split('.')[0]) + +/** + * @description + * Overwatch Workshop + * Common Generator + */ +export default ({ + interfacePath, + interfaceType +}: { + interfacePath: string + interfaceType: string +}) => { + return Sequence(async ({resolve, reject, data: preData})=>{ + + // Generator Data + let data: IData = preData + let { Logger } = data + + // Sequence Logic + Logger.debug(`[${data.lang.toUpperCase()}] Entering ${interfaceType} Generate...`) + Util.collectInterfaceFiles( + `${process.cwd()}/bin/release/${data.lang}/${interfacePath}`, + async (collectedDatas) => { + + // Create child resolvers + for(let { + fileName, + interfaceName + } of collectedDatas){ + + // Check overwatch interfaces data is exist + if(!data.interfaces || data.interfaces == undefined){ + reject() + return + } + + // Create child resolver folder + try{ fs.mkdirSync(`${data.resolverPath}/${interfaceType.toLowerCase()}`) } catch(e) {} + + // Check is interface have properties + let isPropertiesExist = false + try{ + isPropertiesExist = + data.interfaces[interfaceName].properties + && data.interfaces[interfaceName].properties.length != 0 + }catch(e){} + + // Get overwatch method name (pacal case) + let valueName = + data.generatorData + [interfaceType.toLowerCase()] + [`${interfaceType.toLowerCase()}Name`] + [fileName] + + /** + * `resolverCode` + */ + let resolverCode = `` + + // Create External Type Import + // if(isPropertiesExist) resolverCode += `import { ${interfaceName} } from '../../../interface'\n\n` + + /** + * @description + * `propertieTypeMap` is store every properties type names. + */ + let propertieTypeMap = {} + if(isPropertiesExist){ + + /** + * @deprecated + * Collect Import Target + */ + // let interfaceNamesMap = {} + + /** + * @description + * Collect all unique interface name + * (All type will be converted interface) + */ + for(let propertieName of Object.keys(data.interfaces[interfaceName].properties)){ + + /** + * Case 1 (Single Ref) + * @example 'ValueArrayType' + */ + if(typeof data.interfaces[interfaceName].properties[propertieName]['$ref'] != 'undefined'){ + if(typeof propertieTypeMap[propertieName] == 'undefined') propertieTypeMap[propertieName] = [] + let notUniqueInterface = data.interfaces[interfaceName].properties[propertieName] + + let notUniqueInterfaceName = String(notUniqueInterface.$ref).split('#/definitions/')[1] + + /** + * Convert Type Name `ValueArrayType` To `Array` + */ + notUniqueInterfaceName = Util.pureTypeNameExtractor(notUniqueInterfaceName) + + /** + * @deprecated + * Collect Import Target + */ + // interfaceNamesMap[notUniqueInterfaceName] = true + propertieTypeMap[propertieName].push(notUniqueInterfaceName) + } + + /** + * Case 2 (Multiple Ref) + * @example 'ValueArrayType' | 'ValueNumberType' + */ + if(data.interfaces[interfaceName].properties[propertieName].anyOf){ + + Logger.warn(`[${data.lang.toUpperCase()}] Please don't be use multiple type reference in properties (${interfaceType.toLowerCase()}/${fileName})`) + + /** + * @deprecated + * Collect Import Target + */ + + /* + if(typeof propertieTypeMap[propertieName] == 'undefined') propertieTypeMap[propertieName] = [] + for(let notUniqueInterface of interfaces[interfaceName].properties[propertieName].anyOf){ + let notUniqueInterfaceName = String(notUniqueInterface.$ref).split('#/definitions/')[1] + interfaceNamesMap[notUniqueInterfaceName] = true + propertieTypeMap[propertieName].push(notUniqueInterfaceName) + } + */ + } + } + + /** + * @deprecated + * Write External Type Import + */ + + /* + let interfaceNames = `` + for(let propertieTypeName of Object.keys(interfaceNamesMap)){ + try{ + if(interfaceNames.length == 0) interfaceNames += `\n` + interfaceNames += `\t${propertieTypeName},\n` + }catch(e){ console.log(e) } + } + if(interfaceNames.length != 0){ + resolverCode += `import { ${interfaceNames} } from '../../../interface'\n\n` + } + */ + } + + /** + * `resolverCode` [description] + */ + try{ + if(data.interfaces[interfaceName].description){ + + // Create Interface Description + let resolverDescription = '/**\n' + for(let description of data.interfaces[interfaceName].description.split('\n')) + resolverDescription += ` * ${description}\n` + resolverDescription += ' */\n' + resolverCode += resolverDescription + } + }catch(e){} + + /** + * `resolverCode` [export] + */ + let resolverName = fileName.split('.')[0] + try{ + if(typeof data.generatorData[interfaceType.toLowerCase()]['methodNameReplace'][resolverName] != 'undefined') + resolverName = data.generatorData[interfaceType.toLowerCase()]['methodNameReplace'][resolverName] + }catch(e){} + + // Values Collect + let valueProperties = `` + if(isPropertiesExist){ + for(let propertieName of Object.keys(data.interfaces[interfaceName].properties)){ + try{ + //let propertieTypeName = interfaces[interfaceName].properties[propertieName].type + + let propertieTypeName = `` + if(typeof propertieTypeMap[propertieName] != 'undefined'){ + if(propertieTypeMap[propertieName].length > 1) + Logger.critical(`[${data.lang.toUpperCase()}] [TYPE BROKEN ALERT] Multiple Types in Propertie! (${interfaceType.toLowerCase()}/${fileName})`) + propertieTypeName = propertieTypeMap[propertieName].join(' | ') + }else{ + // Allow Default Data Type + try{ + propertieTypeName = data.interfaces[interfaceName].properties[propertieName].type + }catch(e){ + Logger.critical(`[${data.lang.toUpperCase()}] Unexpected Interface Param Type! (${interfaceType.toLowerCase()}/${fileName})`) + console.log(data.interfaces[interfaceName].properties[propertieName]) + } + } + valueProperties += (valueProperties.length == 0) ? `\n` : `,\n` + + /** + * `Insert Propertie Description` + */ + let propertiesDescription = '\t/**\n' + if(data.interfaces[interfaceName].properties[propertieName].description) + for(let description of data.interfaces[interfaceName].properties[propertieName].description.split('\n')) + propertiesDescription += `\t * ${description}\n` + + /** + * `Insert Propertie Type Reference By JSDoc` + */ + let typescriptTypeList = ['number'] + if(typescriptTypeList.indexOf(propertieTypeName) == -1) + propertiesDescription += `\t * - \`Type.${propertieTypeName}.\`\n` + + propertiesDescription += '\t */\n' + valueProperties += propertiesDescription + + if(typescriptTypeList.indexOf(propertieTypeName) == -1){ + valueProperties += `\t${propertieName}: string | number | any[]` + }else{ + valueProperties += `\t${propertieName}: ${propertieTypeName}` + } + }catch(e){ + console.log(`ERROR fileName: ${fileName}`) + console.log(e) + } + } + } + + resolverCode += `export const ${resolverName} = (${valueProperties}\n) => {\n\n` + resolverCode += '\treturn `' + + /** + * [sub] `workshopCode` [init] + */ + let workshopCode = valueName + + /** + * [sub] `workshopCode` [properties] + */ + if(isPropertiesExist){ + if(eventResolverNames.indexOf(resolverName) != -1){ + // Event Functions + let properties = Object.keys(data.interfaces[interfaceName].properties) + workshopCode += `;` + for(let propertieIndex in properties){ + workshopCode += '\n\t\t' + let propertie = properties[propertieIndex] + workshopCode += `\$\{${propertie}\}` + if((properties.length-1) != Number(propertieIndex)) workshopCode += `;` + } + }else{ + // Value & Action Functions + workshopCode += '(' + let properties = Object.keys(data.interfaces[interfaceName].properties) + for(let propertieIndex in properties){ + if(Number(propertieIndex) != 0) workshopCode += ', ' + let propertie = properties[propertieIndex] + workshopCode += `\$\{${propertie}\}` + } + workshopCode += ')' + } + } + + /** + * `resolverCode` [workshopCode] + */ + resolverCode += workshopCode + resolverCode += '`\n}' + + /** + * `Collect Additional Value Resolver` + */ + if(interfaceType == 'Value' && typeof data.preCollectedTypes[resolverName] != 'undefined'){ + + /** + * `Modify Resolver Return Type to Array` + */ + if(data.preCollectedTypes[resolverName].indexOf('array') != -1){ + resolverCode = `${resolverCode.replace(`) => {`, `): any[] => {`)}\n\n` + resolverCode = resolverCode.replace(`\n\treturn `,`\n\t// @ts-ignore\n\treturn `) + + /** + * `Modify Resolver Return Type to Number` + */ + } else if(data.preCollectedTypes[resolverName].indexOf('number') != -1 + || data.preCollectedTypes[resolverName].indexOf('vector') != -1){ + + resolverCode = `${resolverCode.replace(`) => {`, `): number => {`)}\n\n` + resolverCode = resolverCode.replace(`\n\treturn `,`\n\t// @ts-ignore\n\treturn `) + } + } + + // console.log(`${fileName}, ${interfaceName}`) + // console.log(interfaces[interfaceName]) + // console.log(resolverCode) + + Logger.debug(`[${data.lang.toUpperCase()}] Created Resolver <${interfaceType.toLowerCase()}/${fileName}>`) + fs.writeFileSync(`${data.resolverPath}/${interfaceType.toLowerCase()}/${fileName}`, resolverCode) + } + + /** + * `Create child index` + */ + let indexCode = '' + for(let { fileName } of collectedDatas) + indexCode += `export * from './${fileName.split('.')[0]}'\n` + fs.writeFileSync(`${data.resolverPath}/${interfaceType.toLowerCase()}/index.ts`, indexCode) + Logger.debug(`[${data.lang.toUpperCase()}] Created Resolver Index <${interfaceType.toLowerCase()}/index.ts>`) + } + ) + + resolve() + }) +} \ No newline at end of file diff --git a/bin/core/generator/generatorData.json b/bin/core/generator/generatorData.json new file mode 100644 index 0000000..4273069 --- /dev/null +++ b/bin/core/generator/generatorData.json @@ -0,0 +1,363 @@ +{ + "event": { + "eventName": { + "onGoingGlobal.ts": "Ongoing - Global", + "onGoingEachPlayer.ts": "Ongoing - Each Player", + "playerEarnedElimination.ts": "Player earned elimination", + "playerDealtFinalBlow.ts": "Player dealt final blow", + "playerDealtDamage.ts": "Player dealt damage", + "playerTookDamage.ts": "Player took damage", + "playerDied.ts": "Player Died", + "playerDealtHealing.ts": "Player Dealt Healing", + "playerReceivedHealing.ts": "Player Received Healing", + "playerJoinedMatch.ts": "Player Joined Match", + "playerLeftMatch.ts": "Player Left Match" + } + }, + "value": { + "methodNameReplace": { + "false": "False", + "null": "Null", + "true": "True" + }, + "valueName": { + "absoluteValue.ts": "Absolute Value", + "add.ts": "Add", + "allDeadPlayers.ts": "All Dead Players", + "allHeroes.ts": "All Heroes", + "allLivingPlayers.ts": "All Living Players", + "allowedHeroes.ts": "Allowed Heroes", + "allPlayers.ts": "All Players", + "allPlayersNotOnObjective.ts": "All Players Not On Objective", + "allPlayersOnObjective.ts": "All Players On Objective", + "altitudeOf.ts": "Altitude Of", + "and.ts": "And", + "angleBetweenVectors.ts": "Angle Between Vectors", + "angleDifference.ts": "Angle Difference", + "appendToArray.ts": "Append To Array", + "arccosineInRadians.ts": "Arccosine In Radians", + "arcsineInDegrees.ts": "Arcsine In Degrees", + "arcsineInRadians.ts": "Arcsine In Radians", + "arctangentInDegrees.ts": "Arctangent In Degrees", + "arctangentInRadians.ts": "Arctangent In Radians", + "arrayContains.ts": "Array Contains", + "arraySlice.ts": "Array Slice", + "attacker.ts": "Attacker", + "backward.ts": "Backward", + "closestPlayerTo.ts": "Closest Player To", + "compare.ts": "Compare", + "controlModeScoringPercentage.ts": "Control Mode Scoring Percentage", + "controlModeScoringTeam.ts": "Control Mode Scoring Team", + "cosineFromDegrees.ts": "Cosine From Degrees", + "cosineFromRadians.ts": "Cosine From Radians", + "countOf.ts": "Count Of", + "crossProduct.ts": "Cross Product", + "currentArrayElement.ts": "Current Array Element", + "directionFromAngles.ts": "Direction From Angles", + "directionTowards.ts": "Direction Towards", + "distanceBetween.ts": "Distance Between", + "divide.ts": "Divide", + "dotProduct.ts": "Dot Product", + "down.ts": "Down", + "emptyArray.ts": "Empty Array", + "entityExists.ts": "Entity Exists", + "eventDamage.ts": "Event Damage", + "eventPlayer.ts": "Event Player", + "eventWasCriticalHit.ts": "Event Was Critical Hit", + "eyePosition.ts": "Eye Position", + "facingDirectionOf.ts": "Facing Direction Of", + "false.ts": "False", + "farthestPlayerFrom.ts": "Farthest Player From", + "filteredArray.ts": "Filtered Array", + "firstOf.ts": "First Of", + "flagPosition.ts": "Flag Position", + "forward.ts": "Forward", + "globalVariable.ts": "Global Variable", + "hasSpawned.ts": "Has Spawned", + "hasStatus.ts": "Has Status", + "health.ts": "Health", + "hero.ts": "Hero", + "heroIconString.ts": "Hero Icon String", + "heroOf.ts": "Hero Of", + "horizontalAngleFromDirection.ts": "Horizontal Angle From Direction", + "horizontalAngleTowards.ts": "Horizontal Angle Towards", + "horizontalFacingAngleOf.ts": "Horizontal Facing Angle Of", + "horizontalSpeedOf.ts": "Horizontal Speed Of", + "indexOfArrayValue.ts": "Index Of Array Value", + "isAlive.ts": "Is Alive", + "isAssemblingHeroes.ts": "Is Assembling Heroes", + "isButtonHeld.ts": "Is Button Held", + "isCommunicating.ts": "Is Communicating", + "isCommunicatingAny.ts": "Is Communicating Any", + "isCommunicatingAnyEmote.ts": "Is Communicating Any Emote", + "isControlModePointLocked.ts": "Is Control Mode Point Locked", + "isCrouching.ts": "Is Crouching", + "isCTFModeInSuddenDeath.ts": "Is CTF Mode In Sudden Death", + "isDead.ts": "Is Dead", + "isFiringPrimary.ts": "Is Firing Primary", + "isFiringSecondary.ts": "Is Firing Secondary", + "isFlagAtBase.ts": "Is Flag At Base", + "isFlagBeingCarried.ts": "Is Flag Being Carried", + "isGameInProgress.ts": "Is Game In Progress", + "isHeroBeingPlayed.ts": "Is Hero Being Played", + "isInAir.ts": "Is In Air", + "isInLineOfSight.ts": "Is In Line Of Sight", + "isInSetup.ts": "Is In Setup", + "isInSpawnRoom.ts": "Is In Spawn Room", + "isInViewAngle.ts": "Is In View Angle", + "isMatchComplete.ts": "Is Match Complete", + "isMoving.ts": "Is Moving", + "isObjectiveComplete.ts": "Is Objective Complete", + "isOnGround.ts": "Is On Ground", + "isOnObjective.ts": "Is On Objective", + "isOnWall.ts": "Is On Wall", + "isPortraitOnFire.ts": "Is Portrait On Fire", + "isStanding.ts": "Is Standing", + "isTeamOnDefense.ts": "Is Team On Defense", + "isTeamOnOffense.ts": "Is Team On Offense", + "isTrueForAll.ts": "Is True For All", + "isTrueForAny.ts": "Is True For Any", + "isUsingAbility1.ts": "Is Using Ability 1", + "isUsingAbility2.ts": "Is Using Ability 2", + "isUsingUltimate.ts": "Is Using Ultimate", + "isWaitingForPlayers.ts": "Is Waiting For Players", + "lastCreatedEntity.ts": "Last Created Entity", + "lastDamageModificationId.ts": "Last Damage Modification Id", + "lastDamageOverTimeId.ts": "Last Damage Over Time Id", + "lastHealOverTimeId.ts": "Last Heal Over Time Id", + "lastOf.ts": "Last Of", + "lastTextId.ts": "Last Text Id", + "left.ts": "Left", + "localVectorOf.ts": "Local Vector Of", + "matchRound.ts": "Match Round", + "matchTime.ts": "Match Time", + "max.ts": "Max", + "maxHealth.ts": "Max Health", + "min.ts": "Min", + "modulo.ts": "Modulo", + "multiply.ts": "Multiply", + "normalize.ts": "Normalize", + "normalizedHealth.ts": "Normalized Health", + "not.ts": "Not", + "null.ts": "Null", + "number.ts": "Number", + "numberOfDeadPlayers.ts": "Number Of Dead Players", + "numberOfDeaths.ts": "Number Of Deaths", + "numberOfEliminations.ts": "Number Of Eliminations", + "numberOfFinalBlows.ts": "Number Of Final Blows", + "numberOfHeroes.ts": "Number Of Heroes", + "numberOfLivingPlayers.ts": "Number Of Living Players", + "numberOfPlayers.ts": "Number Of Players", + "numberOfPlayersOnObjective.ts": "Number Of Players On Objective", + "objectiveIndex.ts": "Objective Index", + "objectivePosition.ts": "Objective Position", + "oppositeTeamOf.ts": "Opposite Team Of", + "or.ts": "Or", + "payloadPosition.ts": "Payload Position", + "payloadProgressPercentage.ts": "Payload Progress Percentage", + "playerCarryingFlag.ts": "Player Carrying Flag", + "playerClosestToReticle.ts": "Player Closest To Reticle", + "playersInSlot.ts": "Players In Slot", + "playersInViewAngle.ts": "Players In View Angle", + "playersOnHero.ts": "Players On Hero", + "playersWithinRadius.ts": "Players Within Radius", + "playerVariable.ts": "Player Variable", + "pointCapturePercentage.ts": "Point Capture Percentage", + "positionOf.ts": "Position Of", + "raiseToPower.ts": "Raise To Power", + "randomInteger.ts": "Random Integer", + "randomizedArray.ts": "Randomized Array", + "randomReal.ts": "Random Real", + "randomValueInArray.ts": "Random Value In Array", + "rayCastHitNormal.ts": "Ray Cast Hit Normal", + "rayCastHitPlayer.ts": "Ray Cast Hit Player", + "rayCastHitPosition.ts": "Ray Cast Hit Position", + "removeFromArray.ts": "Remove From Array", + "right.ts": "Right", + "roundToInteger.ts": "Round To Integer", + "scoreOf.ts": "Score Of", + "serverLoad.ts": "Server Load", + "serverLoadAverage.ts": "Server Load Average", + "serverLoadPeak.ts": "Server Load Peak", + "sineFromDegrees.ts": "Sine From Degrees", + "sineFromRadians.ts": "Sine From Radians", + "slotOf.ts": "Slot Of", + "sortedArray.ts": "Sorted Array", + "speedOf.ts": "Speed Of", + "speedOfInDirection.ts": "Speed Of In Direction", + "squareRoot.ts": "Square Root", + "string.ts": "String", + "subtract.ts": "Subtract", + "tangentFromDegrees.ts": "Tangent From Degrees", + "tangentFromRadians.ts": "Tangent From Radians", + "team.ts": "Team", + "teamOf.ts": "Team Of", + "teamScore.ts": "Team Score", + "throttleOf.ts": "Throttle Of", + "totalTimeElapsed.ts": "Total Time Elapsed", + "true.ts": "True", + "ultimateChargePercent.ts": "Ultimate Charge Percent", + "up.ts": "Up", + "valueInArray.ts": "Value In Array", + "vector.ts": "Vector", + "vectorTowards.ts": "Vector Towards", + "velocityOf.ts": "Velocity Of", + "verticalAngleFromDirection.ts": "Vertical Angle From Direction", + "verticalAngleTowards.ts": "Vertical Angle Towards", + "verticalFacingAngleOf.ts": "Vertical Facing Angle Of", + "verticalSpeedOf.ts": "Vertical Speed Of", + "victim.ts": "Victim", + "worldVectorOf.ts": "World Vector Of", + "xComponentOf.ts": "X Component Of", + "yComponentOf.ts": "Y Component Of", + "zComponentOf.ts": "Z Component Of", + "arccosineInDegrees.ts": "Arccosine In Degrees", + "isBetweenRounds.ts": "Is Between Rounds", + "isCommunicatingAnyVoiceLine.ts": "Is Communicating Any Voice Line", + "nearestWalkablePosition.ts": "Nearest Walkable Position", + "healer.ts": "Healer", + "healee.ts": "Healee", + "eventHealing.ts": "Event Healing", + "hostPlayer.ts": "Host Player", + "isDummyBot.ts": "Is Dummy Bot" + } + }, + "action": { + "actionName": { + "abort.ts": "Abort", + "abortIf.ts": "Abort If", + "abortIfConditionIsFalse.ts": "Abort If Condition Is False", + "abortIfConditionIsTrue.ts": "Abort If Condition Is True", + "allowButton.ts": "Allow Button", + "bigMessage.ts": "Big Message", + "chaseGlobalVariableAtRate.ts": "Chase Global Variable At Rate", + "chaseGlobalVariableOverTime.ts": "Chase Global Variable Over Time", + "chasePlayerVariableAtRate.ts": "Chase Player Variable At Rate", + "chasePlayerVariableOverTime.ts": "Chase Player Variable Over Time", + "clearStatus.ts": "Clear Status", + "communicate.ts": "Communicate", + "createEffect.ts": "Create Effect", + "createHudText.ts": "Create Hud Text", + "createIcon.ts": "Create Icon", + "createInWorldText.ts": "Create In World Text", + "damage.ts": "Damage", + "declareMatchDraw.ts": "Declare Match Draw", + "declarePlayerVictory.ts": "Declare Player Victory", + "declareRoundVictory.ts": "Declare Round Victory", + "declareTeamVictory.ts": "Declare Team Victory", + "destroyAllIcons.ts": "Destroy All Icons", + "destroyAllInWorldText.ts": "Destroy All In World Text", + "destroyEffect.ts": "Destroy Effect", + "destroyHudText.ts": "Destroy Hud Text", + "destroyIcon.ts": "Destroy Icon", + "destroyInWorldText.ts": "Destroy In World Text", + "disableBuiltInGameModeAnnouncer.ts": "Disable Built In Game Mode Announcer", + "disableBuiltInGameModeCompletion.ts": "Disable Built In Game Mode Completion", + "disableBuiltInGameModeMusic.ts": "Disable Built In Game Mode Music", + "disableBuiltInGameModeRespawning.ts": "Disable Built In Game Mode Respawning", + "disableBuiltInGameModeScoring.ts": "Disable Built In Game Mode Scoring", + "disableDeathSpectateAllPlayers.ts": "Disable Death Spectate All Players", + "disableDeathSpectateTargetHud.ts": "Disable Death Spectate Target Hud", + "disallowButton.ts": "Disallow Button", + "enableBuiltInGameModeAnnouncer.ts": "Enable Built In Game Mode Announcer", + "enableBuiltInGameModeCompletion.ts": "Enable Built In Game Mode Completion", + "enableBuiltInGameModeRespawning.ts": "Enable Built In Game Mode Respawning", + "enableBuiltInGameModeScoring.ts": "Enable Built In Game Mode Scoring", + "enableDeathSpectateAllPlayers.ts": "Enable Death Spectate All Players", + "goToAssembleHeroes.ts": "Go To Assemble Heroes", + "heal.ts": "Heal", + "kill.ts": "Kill", + "loop.ts": "Loop", + "loopIf.ts": "Loop If", + "loopIfConditionIsFalse.ts": "Loop If Condition Is False", + "loopIfConditionIsTrue.ts": "Loop If Condition Is True", + "modifyGlobalVariable.ts": "Modify Global Variable", + "modifyGlobalVariableAtIndex.ts": "Modify Global Variable At Index", + "modifyPlayerScore.ts": "Modify Player Score", + "modifyPlayerVariable.ts": "Modify Player Variable", + "modifyTeamScore.ts": "Modify Team Score", + "pauseMatchTime.ts": "Pause Match Time", + "playEffect.ts": "Play Effect", + "preloadHero.ts": "Preload Hero", + "pressButton.ts": "Press Button", + "respawn.ts": "Respawn", + "resurrect.ts": "Resurrect", + "setAbility1Enabled.ts": "Set Ability 1 Enabled", + "setAbility2Enabled.ts": "Set Ability 2 Enabled", + "setAimSpeed.ts": "Set Aim Speed", + "setDamageDealt.ts": "Set Damage Dealt", + "setDamageReceived.ts": "Set Damage Received", + "setFacing.ts": "Set Facing", + "setGlobalVariable.ts": "Set Global Variable", + "setGlobalVariableAtIndex.ts": "Set Global Variable At Index", + "setGravity.ts": "Set Gravity", + "setHealingDealt.ts": "Set Healing Dealt", + "setHealingReceived.ts": "Set Healing Received", + "setInvisible.ts": "Set Invisible", + "setMatchTime.ts": "Set Match Time", + "setMaxHealth.ts": "Set Max Health", + "setMoveSpeed.ts": "Set Move Speed", + "setObjectiveDescription.ts": "Set Objective Description", + "setPlayerAllowedHeroes.ts": "Set Player Allowed Heroes", + "setPlayerScore.ts": "Set Player Score", + "setPlayerVariable.ts": "Set Player Variable", + "setPrimaryFireEnabled.ts": "Set Primary Fire Enabled", + "setProjectileGravity.ts": "Set Projectile Gravity", + "setProjectileSpeed.ts": "Set Projectile Speed", + "setRespawnMaxTime.ts": "Set Respawn Max Time", + "setSecondaryFireEnabled.ts": "Set Secondary Fire Enabled", + "setSlowMotion.ts": "Set Slow Motion", + "setStatus.ts": "Set Status", + "setTeamScore.ts": "Set Team Score", + "setUltimateAbilityEnabled.ts": "Set Ultimate Ability Enabled", + "setUltimateCharge.ts": "Set Ultimate Charge", + "skip.ts": "Skip", + "skipIf.ts": "Skip If", + "smallMessage.ts": "Small Message", + "startAccelerating.ts": "Start Accelerating", + "startCamera.ts": "Start Camera", + "startDamageModification.ts": "Start Damage Modification", + "startDamageOverTime.ts": "Start Damage Over Time", + "startFacing.ts": "Start Facing", + "startForcingPlayerToBeHero.ts": "Start Forcing Player To Be Hero", + "startForcingSpawnRoom.ts": "Start Forcing Spawn Room", + "startForcingThrottle.ts": "Start Forcing Throttle", + "startHealOverTime.ts": "Start Heal Over Time", + "startHoldingButton.ts": "Start Holding Button", + "stopAccelerating.ts": "Stop Accelerating", + "stopAllDamageModifications.ts": "Stop All Damage Modifications", + "stopAllDamageOverTime.ts": "Stop All Damage Over Time", + "stopAllHealOverTime.ts": "Stop All Heal Over Time", + "stopCamera.ts": "Stop Camera", + "stopChasingGlobalVariable.ts": "Stop Chasing Global Variable", + "stopChasingPlayerVariable.ts": "Stop Chasing Player Variable", + "stopDamageModification.ts": "Stop Damage Modification", + "stopDamageOverTime.ts": "Stop Damage Over Time", + "stopFacing.ts": "Stop Facing", + "stopForcingPlayerToBeHero.ts": "Stop Forcing Player To Be Hero", + "stopForcingSpawnRoom.ts": "Stop Forcing Spawn Room", + "stopForcingThrottle.ts": "Stop Forcing Throttle", + "stopHealOverTime.ts": "Stop Heal Over Time", + "stopHoldingButton.ts": "Stop Holding Button", + "teleport.ts": "Teleport", + "unpauseMatchTime.ts": "Unpause Match Time", + "wait.ts": "Wait", + "applyImpluse.ts": "Apply Impluse", + "modifyPlayerVariableAtIndex.ts": "Modify Player Variable At Index", + "destroyAllEffects.ts": "Destroy All Effects", + "destroyAllHudText.ts": "Destroy All Hud Text", + "resetPlayerHeroAvailability.ts": "Reset Player Hero Availability", + "setPlayerVariableAtIndex.ts": "Set Player Variable At Index", + "enableDeathSpectateTargetHud.ts": "Enable Death Spectate Target Hud", + "enableBuiltInGameModeMusic.ts": "Enable Built In Game Mode Music", + "startTransformingThrottle.ts": "Start Transforming Throttle", + "stopTransformingThrottle.ts": "Stop Transforming Throttle", + "createDummyBot.ts": "Create Dummy Bot", + "destroyDummyBot.ts": "Destroy Dummy Bot", + "destroyAllDummyBot.ts": "Destroy All Dummy Bot", + "startThrottleInDirection.ts": "Start Throttle In Direction", + "stopThrottleInDirection.ts": "Stop Throttle In Direction", + "createBeamEffect.ts": "Create Beam Effect" + } + } +} \ No newline at end of file diff --git a/bin/core/generator/index.ts b/bin/core/generator/index.ts new file mode 100644 index 0000000..104b7a7 --- /dev/null +++ b/bin/core/generator/index.ts @@ -0,0 +1,34 @@ +import { Resolver } from './resolver' +import { Inject } from '../language/injector/index' +import { getLogger } from './logger' +import { Indexer } from './indexer' + +export const Generator = async ( + langs = [ + `kor`, + `eng`, + ] +) => { + /** + * @description + * Generator Logger + */ + const Logger = getLogger() + + await Inject(langs) + await Resolver(langs) + await Indexer(langs) + + Logger.debug(`All generator operations succeeded.`) +} + +// for CLI Command Run +try{ + if(`${process.argv[1]}` == __dirname){ + if(typeof process.argv[2] != 'undefined'){ + Generator(process.argv[2].split(',')) + }else{ + Generator() + } + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/generator/indexer.ts b/bin/core/generator/indexer.ts new file mode 100644 index 0000000..9aa5883 --- /dev/null +++ b/bin/core/generator/indexer.ts @@ -0,0 +1,28 @@ +import { existsSync, writeFileSync } from 'fs' + +/** + * @description + * Generator Indexer + */ +export const Indexer = async (langs: string[] = [ 'kor' ]) => { + + // Generate `release/{lang}/index.ts` + let subLangIndexCode = `` + subLangIndexCode += `import * as Classes from './reformer'\r\n` + subLangIndexCode += `export { Classes }\r\n` + subLangIndexCode += `export * from './resolver'\r\n` + for(let lang of langs){ + if(!existsSync(`${process.cwd()}/bin/release/${lang}/index.ts`)) + writeFileSync(`${process.cwd()}/bin/release/${lang}/index.ts`, subLangIndexCode) + } + + // Generate `release/index.ts` + if(!existsSync(`${process.cwd()}/bin/release/index.ts`)){ + let releaseIndexCode = `` + for(let lang of langs) + releaseIndexCode += `import * as ${lang} from './${lang}'\n` + releaseIndexCode += `export {\n` + releaseIndexCode += ` ${langs.join(`,\n `)}\n}` + writeFileSync(`${process.cwd()}/bin/release/index.ts`, releaseIndexCode) + } +} \ No newline at end of file diff --git a/bin/core/generator/initializer.ts b/bin/core/generator/initializer.ts new file mode 100644 index 0000000..8a47cd3 --- /dev/null +++ b/bin/core/generator/initializer.ts @@ -0,0 +1,73 @@ +import { Resolver } from './resolver' +import { Inject } from '../language/injector/index' +import { getLogger } from './logger' +import { existsSync, copyFileSync, mkdirSync, readFileSync, writeFileSync } from 'fs' +import { exec } from 'child_process' + +import packageData from '../../../package.json' +import { Indexer } from './indexer'; + +export const Generator = async ( + langs = [ + `kor`, + `eng`, + ] +) => { + /** + * @description + * Generator Logger + */ + const Logger = getLogger() + + Logger.debug(`D.VA ENGINE v${packageData.version}`) + Logger.debug(`Starting initialization sequence...`) + + if(!existsSync(`${process.cwd()}/bin/release/index.ts`)){ + await Inject(langs) + await Resolver(langs) + await Indexer(langs) + + Logger.debug(`All generator operations succeeded.`) + + Logger.debug(`Starting core typescript files transpile...`) + await new Promise((resolve)=>{ + exec(`npm run ttsc`, (error, body)=>{ + if(error){ + Logger.debug(`Body:`) + console.log(body) + Logger.debug(`Error:`) + console.log(error) + Logger.debug(`Failed core typescript files transpile.`) + }else{ + Logger.debug(`Finished core typescript files transpile.`) + resolve() + } + }) + }) + } + + try{ + // Create Src Path + try{ mkdirSync(`${process.cwd()}/src/`) } catch(e){} + + // Create Workshop Default File + if(existsSync(`${process.cwd()}/preset/script.ts`) + && !existsSync(`${process.cwd()}/src/script.ts`)){ + + copyFileSync( + `${process.cwd()}/preset/script.ts`, + `${process.cwd()}/src/script.ts`) + } + }catch(e){} +} + +// for CLI Command Run +try{ + if(`${process.argv[1]}` == __filename){ + if(typeof process.argv[2] != 'undefined'){ + Generator(process.argv[2].split(',')) + }else{ + Generator() + } + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/generator/interface.ts b/bin/core/generator/interface.ts new file mode 100644 index 0000000..2b7eca2 --- /dev/null +++ b/bin/core/generator/interface.ts @@ -0,0 +1,55 @@ +import FolderLogger from 'folder-logger' +import { readFileSync } from 'fs' + +import generatorData from './generatorData.json' + +export interface IData { + + /** + * Generator Logger + */ + Logger + + /** + * Here is the grammatical name of + * the actual overwatch workshop + * to be used in each interface implementer. + */ + generatorData: typeof generatorData + + /** + * @description + * Name of the language that the generator will generate. + */ + lang: string + + /** + * @description + * The folder path where resolver will be created. + */ + resolverPath?: string + + /** + * @description + * The folder path where reformer will be created. + */ + reformerPath?: string + + /** + * @description + * Collects the file name that type matches. + * (Doesn't collect file extension) + */ + preCollectedTypeFileNames: {[key: string]: any} + + /** + * @description + * Collected Type Data. + */ + preCollectedTypes: {[key: string]: any} + + /** + * Extracted overlatch interfaces data. + */ + interfaces?: {[key: string]: any} +} \ No newline at end of file diff --git a/bin/core/generator/logger.ts b/bin/core/generator/logger.ts new file mode 100644 index 0000000..e8d4297 --- /dev/null +++ b/bin/core/generator/logger.ts @@ -0,0 +1,11 @@ +/** + * @description + * Generator Logger + */ +import FolderLogger from 'folder-logger' +import tempDir from 'temp-dir' + +let Logger = new FolderLogger(tempDir) + +export const getLogger: () => any = () => Logger +export const setLogger = ( newLoggerInstance ) => Logger = newLoggerInstance \ No newline at end of file diff --git a/bin/core/generator/reformer.ts b/bin/core/generator/reformer.ts new file mode 100644 index 0000000..c9b8bce --- /dev/null +++ b/bin/core/generator/reformer.ts @@ -0,0 +1,201 @@ +import { Sequence } from 'async-sequencer' +import { IData } from './interface' +import * as Util from './util' + +import rimraf from 'rimraf' +import fs from 'fs' + +/** + * @description + * Overwatch Workshop + * Advanced Scripting Engine + * Common Grammar Re-former + */ +export default () => { + return Sequence(async ({resolve, reject, data: preData})=>{ + + // IF USING REQUIRE, IT'LL BE MAKES CONFLICT. + let reformerData = JSON.parse(String(fs.readFileSync(`${__dirname}/reformerData.json`))) + + // Generator Data + let data: IData = preData + let { Logger } = data + + // Sequence Logic + Logger.debug(`[${data.lang.toUpperCase()}] Entering Reform Generator...`) + + // Check overwatch interfaces data is exist + if(!data.interfaces || data.interfaces == undefined){ + reject() + return + } + + // Create child resolver folder + data.reformerPath = `${process.cwd()}/bin/release/${data.lang}/reformer/child/` + try{ rimraf.sync(data.reformerPath) } catch(e){} + try{ fs.mkdirSync(data.reformerPath) } catch(e){ + reject() + return + } + + for(let interfaceType of Object.keys(reformerData)){ + let interfaceTypePascalCase = Util.camelCaseToPascalCase(interfaceType, false, false) + let reformCode = `` + + reformCode += `import { Type, Value } from '../../resolver'\n\n` + + // Write Constructor Type + let constructorType = `string` + if(typeof reformerData[interfaceType]['constructorType'] != 'undefined') + constructorType = reformerData[interfaceType]['constructorType'] + + reformCode += `class ${interfaceTypePascalCase} {\n` + reformCode += `\tpublic ${interfaceType}: ${constructorType}\n\n` + + reformCode += `\t/**\n` + reformCode += `\t * @param ${interfaceType} \`Type.${interfaceTypePascalCase}.\`\n` + reformCode += `\t */\n` + + // Write Constructor Init + let constructorInit = `` + if(typeof reformerData[interfaceType]['constructorInit'] != 'undefined') + constructorInit = ` = ${reformerData[interfaceType]['constructorInit']}` + + reformCode += `\tconstructor(${interfaceType}: ${constructorType}${constructorInit}){\n\t\tthis.${interfaceType} = ${interfaceType}\n\t}\n` + + // ? + if(typeof reformerData[interfaceType]['independent'] != 'undefined') + reformerData[interfaceType]['dependent'] = + reformerData[interfaceType]['dependent'].concat(reformerData[interfaceType]['independent']) + + for(let dependent of reformerData[interfaceType]['dependent']){ + let interfaceName = `I${Util.camelCaseToPascalCase(dependent, false, false)}` + let innerFunctionCode = `` + + // Function Description + try{ + if(data.interfaces[interfaceName].description){ + innerFunctionCode += `\n\t/**\n` + for(let description of data.interfaces[interfaceName].description.split('\n')) + innerFunctionCode += `\t * ${description}\n` + innerFunctionCode += `\t */\n` + } + }catch(e){} + + // Function Properties Check + let isPropertiesExist = false + let isAdditionalPropertiesExist = false + try{ + isPropertiesExist = + data.interfaces[interfaceName].properties + && Object.keys(data.interfaces[interfaceName].properties).length != 0 + + let actualPropertiesCount = Object.keys(data.interfaces[interfaceName].properties).length + for(let propertieName of Object.keys(data.interfaces[interfaceName].properties)) + if(propertieName == interfaceType) actualPropertiesCount-- + + isAdditionalPropertiesExist = + data.interfaces[interfaceName].properties + && actualPropertiesCount > 0 + }catch(e){} + + // Function Define + innerFunctionCode += `\t` + + let isIndependent = false + if(typeof reformerData[interfaceType]['independent'] != 'undefined'){ + if(reformerData[interfaceType]['independent'].indexOf(dependent) != -1){ + isIndependent = true + innerFunctionCode += `$$static$$` + } + } + // reformerData[interfaceType]['independent'] + innerFunctionCode += `$$dependent$$(${isAdditionalPropertiesExist? '\n' : ''}` + + // Collect Function Linking Data + let functionParamLinkingCodes: string[] = [] + + // Function Properties + if(isPropertiesExist){ + let propertiesCodes: string[] = [] + for(let propertieName of Object.keys(data.interfaces[interfaceName].properties)){ + + // Except Default Param + if(propertieName == interfaceType){ + + // Collect Function Linking Data + functionParamLinkingCodes.push(`this.${interfaceType}`) + continue + } + + // Function Properties Description + let propertiesCode = `` + if(data.interfaces[interfaceName].properties[propertieName].description){ + propertiesCode += `\t\t/**\n` + for(let description of data.interfaces[interfaceName].properties[propertieName].description.split('\n')) + propertiesCode += `\t\t * ${description}\n` + + // Function Properties Type Description + if(typeof data.interfaces[interfaceName].properties[propertieName]['$ref'] != 'undefined'){ + let notUniqueInterface = data.interfaces[interfaceName].properties[propertieName] + let propertieTypeName = String(notUniqueInterface.$ref).split('#/definitions/')[1] + + /** + * Convert Type Name `ValueArrayType` To `Array` + */ + propertieTypeName = Util.pureTypeNameExtractor(propertieTypeName) + propertiesCode += `\t\t * - \`Type.${propertieTypeName}.\`\n` + } + propertiesCode += `\t\t */\n` + } + + // Function Properties Define + propertiesCode += `\t\t${propertieName}: string` + propertiesCodes.push(propertiesCode) + + // Collect Function Linking Data + functionParamLinkingCodes.push(propertieName) + } + + innerFunctionCode += propertiesCodes.join(`,\n`) + } + innerFunctionCode += `${isAdditionalPropertiesExist? '\n\t' : ''}){\n` + + // Function Linking + innerFunctionCode += `\t\treturn Value.${dependent}(${functionParamLinkingCodes.join(', ')})\n` + innerFunctionCode += `\t}\n` + + if(isIndependent){ + let dependentPascalCase = dependent.split('') + dependentPascalCase[0] = dependentPascalCase[0].toUpperCase() + dependentPascalCase = dependentPascalCase.join('') + + reformCode += + (innerFunctionCode + .replace('$$static$$', 'static ') + .replace('$$dependent$$', `${dependentPascalCase}`)) + + reformCode += + (innerFunctionCode + .replace('$$static$$', '') + .replace('$$dependent$$', `${dependent}`)) + }else{ + reformCode += innerFunctionCode + .replace('$$dependent$$', `${dependent}`) + } + } + + reformCode += `}\n\nexport default ${interfaceTypePascalCase}` + Logger.debug(`[${data.lang.toUpperCase()}] Created Reformer <${interfaceType.toLowerCase()}.ts>`) + fs.writeFileSync(`${data.reformerPath}/${interfaceType.toLowerCase()}.ts`, reformCode) + } + + let indexCode = `` + for(let interfaceType of Object.keys(reformerData)) + indexCode += `export * from './${interfaceType}'\n` + fs.writeFileSync(`${data.reformerPath}/index.ts`, indexCode) + Logger.debug(`[${data.lang.toUpperCase()}] Created Reformer Index `) + + resolve() + }) +} \ No newline at end of file diff --git a/bin/core/generator/reformerData.json b/bin/core/generator/reformerData.json new file mode 100644 index 0000000..95f13c2 --- /dev/null +++ b/bin/core/generator/reformerData.json @@ -0,0 +1,135 @@ +{ + "player": { + "constructorInit": "Type.Player.eventPlayer()", + "independent": [], + "dependent": [ + "altitudeOf", + "closestPlayerTo", + "eyePosition", + "facingDirectionOf", + "farthestPlayerFrom", + "hasStatus", + "health", + "heroOf", + "horizontalAngleFromDirection", + "horizontalFacingAngleOf", + "horizontalSpeedOf", + "isAlive", + "isButtonHeld", + "isCommunicating", + "isCommunicatingAny", + "isCommunicatingAnyEmote", + "isCommunicatingAnyVoiceLine", + "isCrouching", + "isDead", + "isFiringPrimary", + "isFiringSecondary", + "isInAir", + "isInSpawnRoom", + "isMoving", + "isOnGround", + "isOnObjective", + "isOnWall", + "isPortraitOnFire", + "isStanding", + "isUsingAbility1", + "isUsingAbility2", + "isUsingUltimate", + "maxHealth", + "numberOfDeaths", + "numberOfEliminations", + "numberOfFinalBlows", + "playerClosestToReticle", + "playersInViewAngle", + "positionOf", + "scoreOf", + "speedOf", + "speedOfInDirection", + "teamOf", + "throttleOf", + "ultimateChargePercent", + "velocityOf", + "verticalAngleTowards", + "verticalFacingAngleOf", + "verticalSpeedOf" + ] + }, + "vector": { + "constructorType": "string | number", + "independent": [], + "dependent": [ + "angleBetweenVectors", + "localVectorOf", + "worldVectorOf", + "angleDifference", + "arccosineInDegrees", + "arccosineInRadians", + "arcsineInDegrees", + "arcsineInRadians", + "arctangentInDegrees", + "arctangentInRadians", + "cosineFromDegrees", + "cosineFromRadians", + "crossProduct", + "directionFromAngles", + "directionTowards", + "distanceBetween", + "dotProduct", + "down", + "forward", + "horizontalAngleTowards", + "isInLineOfSight", + "isInViewAngle", + "left", + "nearestWalkablePosition", + "normalize", + "playersWithinRadius", + "right", + "sineFromDegrees", + "sineFromRadians", + "slotOf", + "tangentFromDegrees", + "tangentFromRadians", + "up", + "verticalAngleFromDirection", + "xComponentOf", + "yComponentOf", + "zComponentOf" + ] + }, + "team": { + "independent": [ + "controlModeScoringTeam" + ], + "dependent": [ + "controlModeScoringPercentage", + "isHeroBeingPlayed", + "isTeamOnDefense", + "isTeamOnOffense", + "numberOfDeadPlayers", + "numberOfHeroes", + "numberOfLivingPlayers", + "numberOfPlayers", + "numberOfPlayersOnObjective", + "oppositeTeamOf", + "playersInSlot", + "playersOnHero", + "teamScore" + ] + }, + "event": { + "independent": [ + "eventDamage", + "eventPlayer", + "eventWasCriticalHit" + ], + "dependent": [] + }, + "entity": { + "independent": [], + "dependent": [ + "entityExists", + "hasSpawned" + ] + } +} \ No newline at end of file diff --git a/bin/core/generator/resolver.ts b/bin/core/generator/resolver.ts new file mode 100644 index 0000000..8d6d80b --- /dev/null +++ b/bin/core/generator/resolver.ts @@ -0,0 +1,95 @@ +import { Sequencer } from 'async-sequencer' +import { IData } from './interface' +import { getLogger } from './logger' + +import Reformer from './reformer' +import Generator from './generator' +import { readFileSync, writeFileSync } from 'fs' + + +/** + * @description + * Generator Resolver + */ +export const Resolver = async (langs: string[] = [ 'kor' ]) => { + /** + * @description + * Generator Logger + */ + const Logger = getLogger() + + for(let lang of langs){ + + // IF USING REQUIRE, IT CAN BE MAKES CONFLICT. + let generatorData = JSON.parse(String(readFileSync(`${__dirname}/generatorData.json`))) + + /** + * @description + * Common Generator Data + */ + let sequencerData: IData = { + Logger, + lang, + preCollectedTypeFileNames: {}, + preCollectedTypes: {}, + generatorData + } + + /** + * @description + * Generator Sequencer + */ + await Sequencer( + + // Sequence List + [ + require('./sequence/initialize'), + require('./sequence/interfaceParse'), + + // Debug-Only + // require('./sequence/collectArchivedValue'), + + require('./sequence/collectPreTypeNames'), + require('./sequence/collectType'), + + Generator({ + interfacePath: `interface/event/child`, + interfaceType: 'Event' + }), + + Generator({ + interfacePath: `interface/value/child`, + interfaceType: 'Value' + }), + + Generator({ + interfacePath: `interface/action/child`, + interfaceType: 'Action' + }), + + Reformer(), + ], + + // Sequence Callback + ({ + sequenceNumber, + isSequenceSuccess, + isEndOfSequence + })=>{ + + // Enter the CLI output for each sequence. + console.log('') + + // Callback Logic + if(!isSequenceSuccess){ + Logger.critical(`[${lang.toUpperCase()}] Sequence #${sequenceNumber} has been crashed.`) + return + } + + if(isEndOfSequence) + Logger.debug(`[${lang.toUpperCase()}] Generate succeeded.\n\n`) + } + + , sequencerData) + } +} \ No newline at end of file diff --git a/bin/core/generator/sequence/README.md b/bin/core/generator/sequence/README.md new file mode 100644 index 0000000..1b8c94a --- /dev/null +++ b/bin/core/generator/sequence/README.md @@ -0,0 +1,51 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ‡ Structure + +> The Generator folder contains the following files: + + + +### ๐Ÿ‘‹๐Ÿป initialize.ts [bin/core/generator/sequence/initialize.ts] + +- The script deletes the existing `release/interface/resolver/child` folder and recreates it. + + + +### ๐Ÿ“š interfaceParse.ts [bin/core/generator/sequence/interfaceParse.ts] + +- The script converts the typecript interface structure into a json structure through the `typescript-json-schema` module. + + + +### โ™ป๏ธ collectPreTypeNames.ts [bin/core/generator/sequence/collectPreTypeNames.ts] + +- The script collects what types of workshop parameters are and what the interface file names for each type are. + + + +### ๐Ÿ“ collectType.ts [bin/core/generator/sequence/collectType.ts] + +- The script collects the type information defined in the interface and creates the implementer. + + + +### ๐Ÿ”’ collectArchivedValue.ts [bin/core/generator/sequence/collectArchivedValue.ts] + +- `Deprecated` - This function was used to organize the value interface list in json format when generatorData.json was first created. Not used at this time. + + + +### โœ’๏ธ template [bin/core/generator/sequence/template] + +- A template for a sequence script. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/generator/sequence/collectArchivedValue.ts b/bin/core/generator/sequence/collectArchivedValue.ts new file mode 100644 index 0000000..a8df7d4 --- /dev/null +++ b/bin/core/generator/sequence/collectArchivedValue.ts @@ -0,0 +1,41 @@ +import { Sequence } from 'async-sequencer' +import { IData } from '../interface' +import * as Util from '../util' + +import fs from 'fs' + +const interfaceType + : 'event' | 'action' | 'value' + = `action` + +/** + * @description + * `Archived Value Function Collector` + */ +export default Sequence(async ({resolve, reject, data: preData})=>{ + + // Generator Data + let data: IData = preData + let { Logger } = data + + // Sequence Logic + Util.collectInterfaceFiles( + `${process.cwd()}/bin/release/${data.lang}/interface/${interfaceType}/child`, + async (collectedDatas)=>{ + + // Create child resolvers + let json = {} + for(let { + fileName, + interfaceName + } of collectedDatas){ + + json[fileName] = Util.camelCaseToPascalCase(interfaceName, true, true) + } + fs.writeFileSync(`${data.resolverPath}/test.json`, JSON.stringify(json, null, 2)) + Logger.debug(`[${data.lang.toUpperCase()}] Successfully Collected test.json Data.`) + } + ) + + resolve() +}) \ No newline at end of file diff --git a/bin/core/generator/sequence/collectPreTypeNames.ts b/bin/core/generator/sequence/collectPreTypeNames.ts new file mode 100644 index 0000000..2588377 --- /dev/null +++ b/bin/core/generator/sequence/collectPreTypeNames.ts @@ -0,0 +1,59 @@ +import { Sequence } from 'async-sequencer' +import { IData } from '../interface' +import * as Util from '../util' + +/** + * @description + * `Collect Pre Type Names` + */ +export default Sequence(async ({resolve, reject, data: preData})=>{ + + // Generator Data + let data: IData = preData + let { Logger } = data + + // Sequence Logic + await Util.collectInterfaceFiles( + `${process.cwd()}/bin/release/${data.lang}/type/`, + + async (collectedDatas)=>{ + for(let { + fileName, + subPath, + typeName + } of collectedDatas){ + + // Add folder name before type name. + let subPathArray = subPath.split('/').filter(path => path.length > 0) + for(let subPathIndexStr in subPathArray){ + let subPathIndex = Number(subPathIndexStr) + let subPath = subPathArray[subPathIndex] + + if(subPathIndex == 0 && subPath == 'value'){ + subPath = '' + let fileNames = fileName.split('') + fileNames[0] = fileNames[0].toLowerCase() + fileName = fileNames.join('') + }else{ + let fileNames = fileName.split('') + fileNames[0] = fileNames[0].toUpperCase() + fileName = fileNames.join('') + } + + fileName = `${subPath}${fileName}` + } + + if(typeName.length != 0){ + typeName = typeName.replace('\r', '') + data.preCollectedTypeFileNames[typeName] = `${fileName.split('.')[0]}` + Logger.debug(`[${data.lang.toUpperCase()}] Collected <${typeName}> Type`) + }else{ + Logger.warn(`[${data.lang.toUpperCase()}] Failed to find type of fileName: ${fileName}`) + } + } + } + ) + + Logger.debug(`[${data.lang.toUpperCase()}] Collected Overwatch Type Data.`) + resolve() +}) \ No newline at end of file diff --git a/bin/core/generator/sequence/collectType.ts b/bin/core/generator/sequence/collectType.ts new file mode 100644 index 0000000..49db097 --- /dev/null +++ b/bin/core/generator/sequence/collectType.ts @@ -0,0 +1,149 @@ +import { Sequence } from 'async-sequencer' +import { IData } from '../interface' +import * as Util from '../util' + +import fs from 'fs' + +/** + * @description + * `Collect Type` + */ +export default Sequence(async ({resolve, reject, data: preData})=>{ + + // Generator Data + let data: IData = preData + let { Logger } = data + + // Sequence Logic + Logger.debug(`[${data.lang.toUpperCase()}] Entering Type Generate...`) + Util.collectInterfaceFiles( + `${process.cwd()}/bin/release/${data.lang}/type/`, + async (collectedDatas)=>{ + + let typeIndexCode =`` + + // Create child resolvers + for(let { + fileName, + fileData, + subPath + } of collectedDatas){ + + // Add folder name before type name. + let subPathArray = subPath.split('/').filter(path => path.length > 0) + for(let subPathIndexStr in subPathArray){ + let subPathIndex = Number(subPathIndexStr) + let subPath = subPathArray[subPathIndex] + + // + if(subPathIndex == 0 && subPath == 'value'){ + subPath = '' + let fileNames = fileName.split('') + fileNames[0] = fileNames[0].toLowerCase() + fileName = fileNames.join('') + }else{ + let fileNames = fileName.split('') + fileNames[0] = fileNames[0].toUpperCase() + fileName = fileNames.join('') + } + + fileName = `${subPath}${fileName}` + } + + let lowerCaseFileName = fileName.split('.')[0] + + try{ + // Create child resolver folder + try{ fs.mkdirSync(`${data.resolverPath}/type`) } catch(e) {} + + // let resolverName = Util.camelCaseToPascalCase(fileName.split('.')[0], false, false) + let resolverTypes = Util.typeExtractor(fileData) + + /** + * `resolverCode` [export] + */ + let resolverCode = `` + let typeFilePaths: string[] = [] + let stringTypes: string[] = [] + let numberTypes: string[] = [] + + // Collect Resolver Type Names + for(let resolverType of resolverTypes){ + resolverType = resolverType.replace('\r', '') + if(resolverType[0] == 'I'){ + // Case I* + let typeFilePath = Util.pascalCaseToCamelCase(resolverType, false, true) + typeFilePaths.push(`export * from '../value/${typeFilePath}'\n`) + + // Pre Collect Type + // key: typeFilePath + // value: [lowerCaseFileName] + if(typeof data.preCollectedTypes[typeFilePath] == 'undefined') + data.preCollectedTypes[typeFilePath] = [] + data.preCollectedTypes[typeFilePath].push(lowerCaseFileName) + + }else{ + // Case Value*Type + if(typeof data.preCollectedTypeFileNames[resolverType] != 'undefined'){ + let typeFilePath = data.preCollectedTypeFileNames[resolverType] + typeFilePaths.push(`export * from './${typeFilePath}'\n`) + + }else{ + if(resolverType.length != 0 && resolverType.indexOf(`\'`) != -1){ + stringTypes.push (resolverType) + continue + }else if(resolverType.length != 0 && Number.isInteger(Number(resolverType))){ + numberTypes.push (resolverType) + continue + } + Logger.critical(`[${data.lang.toUpperCase()}] Undetected resolverType: <${resolverType}> (type/${fileName})`) + } + } + } + + if(stringTypes.length != 0){ + typeFilePaths.push(`/**\n * @param str Type \'\n * Then can see list of available string lists.\n */\n`) + typeFilePaths.push(`export const Default = (str: ${stringTypes.join(' | ')}) => str\n`) + }else if(numberTypes.length != 0){ + typeFilePaths.push(`/**\n * @param num Type Any Number.\n * Then can see list of available number lists. */\n`) + typeFilePaths.push(`export const Default = (num: ${numberTypes.join(' | ')}) => num\n`) + } + + // Write Export Codes + for(let typeFilePath of typeFilePaths) + resolverCode += typeFilePath + + // console.log(`${fileName}, ${interfaceName}`) + // console.log(interfaces[interfaceName]) + // console.log(resolverCode) + + if(resolverCode.length != 0){ + fs.writeFileSync(`${data.resolverPath}/type/${fileName}`, resolverCode) + Logger.debug(`[${data.lang.toUpperCase()}] Created Resolver `) + + let upperCaseFileName = lowerCaseFileName + let upperCaseFileNameArr = upperCaseFileName.split('') + upperCaseFileNameArr[0] = upperCaseFileName[0].toUpperCase() + upperCaseFileName = upperCaseFileNameArr.join('') + + //typeIndexData.push(`export * from './${fileName.split('.')[0]}'\n`) + typeIndexCode += `import * as ${upperCaseFileName} from './${lowerCaseFileName}'\n` + typeIndexCode += `export \{ ${upperCaseFileName} \}\n\n` + } + + }catch(e){ + Logger.critical(`[${data.lang.toUpperCase()}] Generator Crashed#1`) + console.log(e) + reject() + return + } + } + + // Create child index + fs.writeFileSync(`${data.resolverPath}/type/index.ts`, typeIndexCode) + Logger.debug(`[${data.lang.toUpperCase()}] Created Type Resolver `) + } + ) + + resolve() +}) \ No newline at end of file diff --git a/bin/core/generator/sequence/initialize.ts b/bin/core/generator/sequence/initialize.ts new file mode 100644 index 0000000..4fa0530 --- /dev/null +++ b/bin/core/generator/sequence/initialize.ts @@ -0,0 +1,28 @@ +import { Sequence } from 'async-sequencer' +import { IData } from '../interface' +import rimraf from 'rimraf' +import fs from 'fs' + +/** + * @description + * `Initialize` + */ +export default Sequence(async ({resolve, reject, data: preData})=>{ + + // Generator Data + let data: IData = preData + let { Logger } = data + + // Sequence Logic + Logger.debug(`[${data.lang.toUpperCase()}] Running on Generator Initialize Sequence...`) + Logger.debug(`[${data.lang.toUpperCase()}] Delete all previously generated Resolver codes...`) + + data.resolverPath = `${process.cwd()}/bin/release/${data.lang}/resolver/child/` + try{ rimraf.sync(data.resolverPath) } catch(e){} + try{ fs.mkdirSync(data.resolverPath) } catch(e){ + reject() + return + } + + resolve() +}) \ No newline at end of file diff --git a/bin/core/generator/sequence/interfaceParse.ts b/bin/core/generator/sequence/interfaceParse.ts new file mode 100644 index 0000000..c983eab --- /dev/null +++ b/bin/core/generator/sequence/interfaceParse.ts @@ -0,0 +1,24 @@ +import { Sequence } from 'async-sequencer' +import { IData } from '../interface' +import * as Util from '../util' + +/** + * @description + * `Interface Parse` + */ +export default Sequence(async ({resolve, reject, data: preData})=>{ + + // Generator Data + let data: IData = preData + let { Logger } = data + + // Sequence Logic + Logger.debug(`[${data.lang.toUpperCase()}] Typescript Interface Initialize...`) + data.interfaces = await Util.parseInterfaces(`${process.cwd()}/bin/release/${data.lang}/interface/index.ts`) + + // Collected Interfaces write + // fs.writeFileSync(`${resolverPath}/test.json`, JSON.stringify(interfaces, null, 2)) + + Logger.debug(`[${data.lang.toUpperCase()}] Typescript Interface Initialized.`) + resolve() +}) \ No newline at end of file diff --git a/bin/core/generator/sequence/template b/bin/core/generator/sequence/template new file mode 100644 index 0000000..8380427 --- /dev/null +++ b/bin/core/generator/sequence/template @@ -0,0 +1,16 @@ +import { Sequence } from 'async-sequencer' +import { IData } from '../interface' +import * as Util from '../util' + +/** + * @description + * `Name` + */ +export default Sequence(async ({resolve, reject, data: preData})=>{ + + // Generator Data + let data: IData = preData + let { Logger } = data + + // Sequence Logic +}) \ No newline at end of file diff --git a/bin/core/generator/util.ts b/bin/core/generator/util.ts new file mode 100644 index 0000000..817cf73 --- /dev/null +++ b/bin/core/generator/util.ts @@ -0,0 +1,283 @@ +import * as TJS from 'typescript-json-schema' +import * as Path from 'path' + +import fs from 'fs' +import path from 'path' +import NestedFolder from 'nested-static' + +/** + * @description + * Built-in Time Typescript Interface Parser + */ +export const parseInterfaces = async ( filePath: string) => { + const settings: TJS.PartialArgs = { + aliasRef: true, + required: true + } + const compilerOptions: TJS.CompilerOptions = { strictNullChecks: true } + + const program = TJS.getProgramFromFiles([Path.resolve(filePath)], compilerOptions) + + const schema = TJS.generateSchema(program, '*', settings) + if(schema == null || schema.definitions == null) throw new Error('Failed Generator Init') + return schema.definitions +} + +/** + * @description + * Collect Typescript Interface Files Code + */ +export const collectInterfaceFiles = async ( + folderPath: string, + callback: (argument: { + fileName: string + filePath: string + subPath: string + staticPath: string + fileData: string + interfaceName: string + typeName: string + }[]) => Promise, + + // No Collect Index File + noIndexFile: Boolean = true +) => { + + // Search all of the child folders + return new Promise((resolve)=>{ + NestedFolder(folderPath, async (folders)=>{ + let data: any = [] + + for(let folder of folders){ + let files = fs.readdirSync(folder.staticPath) + + // Search all of the files + for(let file of files){ + let filePath = folder.staticPath + '/' + file + filePath = path.resolve(filePath) + + let stats = fs.statSync(filePath) + if(stats.isDirectory()) continue + if(noIndexFile && file == 'index.ts') continue + + let fileData = String(fs.readFileSync(filePath)) + let interfaceName = '' + let typeName = `` + + try{ + interfaceName = + fileData.split('export interface ')[1] + .split(' {')[0] + .split(' ').join('') + }catch(e){} + + try{ + typeName = + fileData.split('export type ')[1] + .split('\n')[0] + .split(' ').join('') + }catch(e){} + + data.push({ + fileName: file, + filePath, + subPath: folder.subPath, + staticPath: folder.staticPath, + fileData, + interfaceName, + typeName + }) + } + } + + await callback(data) + resolve() + }) + }) +} + +/** + * @description + * The functions in the overwatch + * workshop are named in the pascal case. + * But the javascript are uses a camelcase, + * so we need to convert it. + * + * It'll be using in archived value function collector + * (`sequence/collectArchivedValue.ts`) + */ +export const camelCaseToPascalCase = ( + name: string, + doSpace = true, + prefixRemove = false +)=>{ + if(prefixRemove && name[0] == 'I'){ + let temp = name.split('') + temp.shift() + name = temp.join('') + } + + let pascalCase = '' + for(let alphabetIndex in name.split('')){ + let alphabet = name[alphabetIndex] + + if(Number(alphabetIndex) == 0){ + pascalCase += alphabet.toUpperCase() + continue + } + + let isUpperCase = alphabet == alphabet.toUpperCase() + if(isUpperCase){ + if(doSpace) pascalCase += ' ' + pascalCase += alphabet.toUpperCase() + }else{ + pascalCase += alphabet.toLowerCase() + } + } + return pascalCase +} + +/** + * @description + * The javascript interface name uses a pascal case. + * Conversion to camera case is required to + * infer variable names etc. through interface name. + * + * It'll be using when the collects resolver type names + * (`sequence/collectType.ts`) + */ +export const pascalCaseToCamelCase = ( + name: string, + doSpace = true, + prefixRemove = false, + prefixInstall = false +)=>{ + let camelCase = '' + + if(prefixRemove && name[0] == 'I'){ + let temp = name.split('') + temp.shift() + name = temp.join('') + } + + for(let alphabetIndex in name.split('')){ + let alphabet = name[alphabetIndex] + + if(Number(alphabetIndex) == 0){ + camelCase += alphabet.toLowerCase() + continue + } + + let isLowerCase = alphabet == alphabet.toLowerCase() + if(isLowerCase){ + camelCase += alphabet.toLowerCase() + }else{ + if(doSpace) camelCase += ' ' + camelCase += alphabet.toUpperCase() + } + } + + if(prefixInstall && name[0] != 'I') + name = `I${name}` + + return camelCase +} + +/** + * @description + * Extracts the custom type name + * defined in the typescript file. + */ +export const typeExtractor = (code): string[] => { + let contexts = code + contexts = contexts.split('\t').join('') + contexts = contexts.split(' ').join('') + contexts = contexts.split('export type ')[1].split('\n') + contexts.shift() + + let list: any = [] + for(let context of contexts){ + //console.log(context) + if(context[0] == '=' || context[0] == '|'){ + if(context[1] == ' '){ + context = context + .split('= ').join('') + .split('| ').join('') + .split('\r').join('') + list.push(context) + } + } + } + return list +} + +/** + * @description + * In some overwatch interfaces, + * typedescript data type is sometimes used as it is. + * This pure data type designation + * must be extracted to form a generator. + */ +export const pureTypeNameExtractor = (name) => { + let typeNames: string[] = [] + + let word = '' + for(let char of name.split('')){ + let isUpperCase = char.toUpperCase() == char + if(word.length != 0 && isUpperCase){ + typeNames.push(word) + word = '' + } + word += char + } + + if(word.length != 0) + typeNames.push(word) + + typeNames.pop() + if(typeNames.length > 1){ + if(typeNames[0] == 'Value') + typeNames.shift() + } + + return typeNames.join('') +} + +export const allUpperCaseToPascalCase = ( + name, + doSpace = true, + prefixRemove = false, + prefixInstall = false +)=>{ + let camelCase = '' + + if(prefixRemove && name[0] == 'I'){ + let temp = name.split('') + temp.shift() + name = temp.join('') + } + + for(let alphabetIndex in name.split('')){ + let alphabet = name[alphabetIndex] + + if(Number(alphabetIndex) == 0){ + camelCase += alphabet.toUpperCase() + continue + } + + try{ + let prevChar = name[Number(alphabetIndex)-1] + if(prevChar == ' '){ + camelCase += alphabet.toUpperCase() + continue + } + }catch(e){} + + camelCase += alphabet.toLowerCase() + } + + if(prefixInstall && name[0] != 'I') + name = `I${name}` + + return camelCase +} \ No newline at end of file diff --git a/bin/core/language/README.md b/bin/core/language/README.md new file mode 100644 index 0000000..1f2400b --- /dev/null +++ b/bin/core/language/README.md @@ -0,0 +1,79 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ’ฌ Translation is difficult to automate. + +> Although we continue to automate the functions associated with translation, there is considerable difficulty in maintaining the translation (we are now forced to type directly) because it is not something we can copy the language resources of the Overwatch. + +- Currently, only English and Korean are supported by Dva-Engine. +- If there is a direct access to an overwatch language resource, it can be automated using that resource. Until then, all translation must be done manually. + + + +![D.Va Engine has a multilingual support system Image](https://i.imgur.com/sjaHn8i.png) + +## โœ… Please make a contribution to the translation work. + +> The main project contributor cannot read languages other than English and Korean. It means that no other language can be supported by Engine without the help of other contributors. + + + +### ๐ŸŒ Translation Rule + +- All translation file names must have 3 characters of language code per country. [(ISO 3166-1 alpha-3)](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) +- All translation files must match the translation file and code number of another language. Unique code number cannot be used. + + + +### โ” How do I make a new translation file? + +- The quickest way to create a new language file is to **crawling the workshop description page data for each language released by Blizzard.** (That's how the English data was written.) + - To learn how to bring the Blizzard Workshop description page, check the `parse/folder`. + - This method can be used if other language-speaking pages also have Blizzard Workshop Description pages with the same format as the English language. + - If it is different, the parse code will need to be modified. +- The slow way to create a new language file is to copy the `data/eng.json` file and translate the contents of the contexts. (That's how the Korean data was written. The main contributor handwritten more than 2,000 lines.) + + + +## ๐Ÿ‡ Structure + +> The Generator folder contains the following folders: + + + +### ๐Ÿ’พ data [bin/core/engine/language/data] + +- Translation data (JSON type) is contained in this folder. + + + +### ๐Ÿ” parse [bin/core/engine/language/parse] + +- A command script that runs when the command `npm run language:parse` is entered. Crawling the Blizzard's Overwatch Workshop Function Description page into JSON format. + + + +### โœ‚๏ธ extractor [bin/core/engine/language/extractor] + +- A command script that runs when the `npm run language:extractor` command is entered. In the folder `bin/release`, all comments written in the interface file of a specific language that has already been created are extracted in JSON format, and all interface comments are extracted from the interface file that has been replaced by the language code. These extracted files are extracted to the folder `/dist/_extracted`. + + + +### ๐Ÿ”— injector [bin/core/engine/language/injector] + +- A command script that runs when the command `npm run language:injector` is entered. This function injects certain language comments into the interface files copied into the `bin/release` folder. (Replace the sequence numbers on the comments with actual language data.) + + + +### โœ‚๏ธ๐Ÿ”— reapply [bin/core/engine/language/reapply] + +- A command script that runs when the command `npm run language:reapply` is entered. All data extracted via the `extractor` will be reflected back on the `bin/core`. If certain translation code contents need to be deleted, if you leave contexts blank and run this command, the translation code will be deleted from the specified linguistic data and all language data will be updated. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/language/data/eng.json b/bin/core/language/data/eng.json new file mode 100644 index 0000000..37a01fa --- /dev/null +++ b/bin/core/language/data/eng.json @@ -0,0 +1,13972 @@ +{ + "0": { + "contexts": [ + "Stops execution of the action list." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 0, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort", + "orderNumber": 0, + "path": "/interface/action/child/abort.ts", + "indent": 0 + } + ] + }, + "1": { + "contexts": [ + "Stops execution of the action list if the", + "actionโ€™s condition evaluates to true, if", + "it does not, the execution continues with", + "the next action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 1, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If", + "orderNumber": 0, + "path": "/interface/action/child/abortIf.ts", + "indent": 0 + } + ] + }, + "2": { + "contexts": [ + "Stops execution of the action list if at", + "least one condition in the condition list", + "is false. If all conditions are true, execution", + "continues with the next action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 2, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If Condition Is False", + "orderNumber": 0, + "path": "/interface/action/child/abortIfConditionIsFalse.ts", + "indent": 0 + } + ] + }, + "3": { + "contexts": [ + "Stops execution of the action list if all", + "conditions in the condition list is true.", + "If any are false, execution continues with", + "the next action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 3, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If Condition Is True", + "orderNumber": 0, + "path": "/interface/action/child/abortIfConditionIsTrue.ts", + "indent": 0 + } + ] + }, + "4": { + "contexts": [ + "Undoes the effect of the disallow button", + "action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 4, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Allow Button", + "orderNumber": 0, + "path": "/interface/action/child/allowButton.ts", + "indent": 0 + } + ] + }, + "5": { + "contexts": [ + "Applies an instantaneous change in velocity", + "to the movement of one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 5, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Apply Impluse", + "orderNumber": 0, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 0 + } + ] + }, + "6": { + "contexts": [ + "Displays a large message above the reticle", + "that is visible to specific players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 6, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Big Message", + "orderNumber": 0, + "path": "/interface/action/child/bigMessage.ts", + "indent": 0 + } + ] + }, + "7": { + "contexts": [ + "Gradually modifies the value of a global", + "variable at a specific rate. (A global variable", + "is a variable that belongs to the game itself.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 7, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 0, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 0 + } + ] + }, + "8": { + "contexts": [ + "Gradually modifies the value of a global", + "variable over time. (A global variable is", + "a variable that belongs to the game itself.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 8, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 0, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 0 + } + ] + }, + "9": { + "contexts": [ + "Gradually modifies the value of a player", + "variable at a specific rate. (A player variable", + "is a variable that belongs to a specific player.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 9, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 0, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 0 + } + ] + }, + "10": { + "contexts": [ + "Gradually modifies the value of a player", + "variable over time. (A player variable is", + "a variable that belongs to a specific player.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 10, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 0, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 0 + } + ] + }, + "11": { + "contexts": [ + "Clears a status that was applied from a", + "set status action from one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 11, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Clear Status", + "orderNumber": 0, + "path": "/interface/action/child/clearStatus.ts", + "indent": 0 + } + ] + }, + "12": { + "contexts": [ + "Causes one or more players to use an emote,", + "voice line, or other equipped communication." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 12, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Communicate", + "orderNumber": 0, + "path": "/interface/action/child/communicate.ts", + "indent": 0 + } + ] + }, + "13": { + "contexts": [ + "Creates an in-world effect entity. This", + "effect entity will persist until destroyed,", + "to obtain a reference to this entity, use", + "the last created entity value. This action", + "will fail if too many entities have been created." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 13, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Effect", + "orderNumber": 0, + "path": "/interface/action/child/createEffect.ts", + "indent": 0 + } + ] + }, + "14": { + "contexts": [ + "Creates HUD text visible to specific players", + "at specific location on the screen. This", + "text will persist until destroyed. To obtain", + "a reference to this text, use the last text", + "ID value. This action will fail if too many", + "text elements have been created." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 14, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/createHudText.ts", + "indent": 0 + } + ] + }, + "15": { + "contexts": [ + "Creates an in-world entity. This icon entity", + "will persist until destroyed. To obtain", + "a reference to this entity, use the last", + "created entity value. This action will fail", + "if too many entities have been created." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 15, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Icon", + "orderNumber": 0, + "path": "/interface/action/child/createIcon.ts", + "indent": 0 + } + ] + }, + "16": { + "contexts": [ + "Creates in-world text visible to specific", + "players at specific position in the world.", + "This text will persist until destroyed.", + "To obtain a reference to this text, use", + "the last text ID value. This action will", + "fail if too many text elements have been created." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 16, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create In World Text", + "orderNumber": 0, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 0 + } + ] + }, + "17": { + "contexts": [ + "Applies instantaneous damage to one or more", + "players, possibly killing the players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 17, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Damage", + "orderNumber": 0, + "path": "/interface/action/child/damage.ts", + "indent": 0 + } + ] + }, + "18": { + "contexts": [ + "Instantly ends the match in a draw. This", + "action has no effect in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 18, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Match Draw", + "orderNumber": 0, + "path": "/interface/action/child/declareMatchDraw.ts", + "indent": 0 + } + ] + }, + "19": { + "contexts": [ + "Instantly ends the match with the specific", + "player as the winner. This action only has", + "an effect in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 19, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Player Victory", + "orderNumber": 0, + "path": "/interface/action/child/declarePlayerVictory.ts", + "indent": 0 + } + ] + }, + "20": { + "contexts": [ + "Declare a team as the current round winner.", + "This only works in the control and elimination game modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 20, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Round Victory", + "orderNumber": 0, + "path": "/interface/action/child/declareRoundVictory.ts", + "indent": 0 + } + ] + }, + "21": { + "contexts": [ + "Instantly ends the match with the specified", + "team as the winner. This action has no effect", + "in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 21, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Team Victory", + "orderNumber": 0, + "path": "/interface/action/child/declareTeamVictory.ts", + "indent": 0 + } + ] + }, + "22": { + "contexts": [ + "Destroys all effect entities created by create effect." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 22, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Effects", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllEffects.ts", + "indent": 0 + } + ] + }, + "23": { + "contexts": [ + "Destroys all hud text that was created by", + "the create hud text action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 23, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllHudText.ts", + "indent": 0 + } + ] + }, + "24": { + "contexts": [ + "Destroys all icon entities created by create icon." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 24, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Icons", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllIcons.ts", + "indent": 0 + } + ] + }, + "25": { + "contexts": [ + "Destroys all in-world text created by the", + "create in-world effect." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 25, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All In World Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllInWorldText.ts", + "indent": 0 + } + ] + }, + "26": { + "contexts": [ + "Destroys an effect entity that was created", + "by create effect." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 26, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Effect", + "orderNumber": 0, + "path": "/interface/action/child/destroyEffect.ts", + "indent": 0 + } + ] + }, + "27": { + "contexts": [ + "Destroys hud text that was created by create hud text." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 27, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyHudText.ts", + "indent": 0 + } + ] + }, + "28": { + "contexts": [ + "Destroys an icon entity that was created by create icon." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 28, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Icon", + "orderNumber": 0, + "path": "/interface/action/child/destroyIcon.ts", + "indent": 0 + } + ] + }, + "29": { + "contexts": [ + "Destroys in-world text that was created", + "by create in-world text." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 29, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy In World Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyInWorldText.ts", + "indent": 0 + } + ] + }, + "30": { + "contexts": [ + "Disables game mode announcements from the", + "announcer until reenabled or the match ends." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 30, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Announcer", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeAnnouncer.ts", + "indent": 0 + } + ] + }, + "31": { + "contexts": [ + "Disables completion of the match from the", + "game mode itself, only allowing the match", + "to be completed by scripting commands." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 31, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Completion", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeCompletion.ts", + "indent": 0 + } + ] + }, + "32": { + "contexts": [ + "Disables all game-mode music until reenabled", + "or the match ends." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 32, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Music", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeMusic.ts", + "indent": 0 + } + ] + }, + "33": { + "contexts": [ + "Disables automatic respawning for one or", + "more players, only allowing respawning by", + "scripting commands." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 33, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Respawning", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeRespawning.ts", + "indent": 0 + } + ] + }, + "34": { + "contexts": [ + "Disables changes to player and team scores", + "from the game mode itself, only allowing", + "scores to be changed by scripting commands." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 34, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Scoring", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeScoring.ts", + "indent": 0 + } + ] + }, + "35": { + "contexts": [ + "Undoes the effect of the enable death spectate", + "all players action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 35, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Death Spectate All Players", + "orderNumber": 0, + "path": "/interface/action/child/disableDeathSpectateAllPlayers.ts", + "indent": 0 + } + ] + }, + "36": { + "contexts": [ + "Undoes the effect of the enable death spectate", + "target hud action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 36, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Death Spectate Target Hud", + "orderNumber": 0, + "path": "/interface/action/child/disableDeathSpectateTargetHud.ts", + "indent": 0 + } + ] + }, + "37": { + "contexts": [ + "Disables a logical button for one or more", + "players such that pressing it has no effect." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 37, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disallow Button", + "orderNumber": 0, + "path": "/interface/action/child/disallowButton.ts", + "indent": 0 + } + ] + }, + "38": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode announcer action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 38, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Announcer", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeAnnouncer.ts", + "indent": 0 + } + ] + }, + "39": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode completion action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 39, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Completion", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeCompletion.ts", + "indent": 0 + } + ] + }, + "40": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode music action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 40, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Music", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeMusic.ts", + "indent": 0 + } + ] + }, + "41": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode respawning for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 41, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Respawning", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeRespawning.ts", + "indent": 0 + } + ] + }, + "42": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode scoring action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 42, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Scoring", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeScoring.ts", + "indent": 0 + } + ] + }, + "43": { + "contexts": [ + "Allows one or more players to spectate all", + "players when dead, as opposed to only allies." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 43, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Death Spectate All Players", + "orderNumber": 0, + "path": "/interface/action/child/enableDeathSpectateAllPlayers.ts", + "indent": 0 + } + ] + }, + "44": { + "contexts": [ + "Allows one or more players to see their", + "targetโ€™s HUD when dead instead of their", + "own while death spectating." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 44, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Death Spectate Target Hud", + "orderNumber": 0, + "path": "/interface/action/child/enableDeathSpectateTargetHud.ts", + "indent": 0 + } + ] + }, + "45": { + "contexts": [ + "Go to the assemble heroes phase of the game", + "mode. Only works if a game is in progress." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 45, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Go To Assemble Heroes", + "orderNumber": 0, + "path": "/interface/action/child/goToAssembleHeroes.ts", + "indent": 0 + } + ] + }, + "46": { + "contexts": [ + "Provides an instantaneous heal to one or", + "more players. This heal will not resurrect dead players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 46, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Heal", + "orderNumber": 0, + "path": "/interface/action/child/heal.ts", + "indent": 0 + } + ] + }, + "47": { + "contexts": [ + "Instantly kills one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 47, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Kill", + "orderNumber": 0, + "path": "/interface/action/child/kill.ts", + "indent": 0 + } + ] + }, + "48": { + "contexts": [ + "Restarts the action list from the beginning.", + "To prevent an infinite loop, a wait action", + "must execute between the start of the action", + "list and this action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 48, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop", + "orderNumber": 0, + "path": "/interface/action/child/loop.ts", + "indent": 0 + } + ] + }, + "49": { + "contexts": [ + "Restarts the action list from the beginning", + "if this actionโ€™s condition evaluates to", + "true. If it does not, execution continues", + "with the next action. To prevent an infinite", + "loop, a wait action must execute between", + "the start of the action list and this action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 49, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If", + "orderNumber": 0, + "path": "/interface/action/child/loopIf.ts", + "indent": 0 + } + ] + }, + "50": { + "contexts": [ + "Restarts the action list from the beginning", + "if at least one condition in the condition", + "list is false. If all conditions are true,", + "execution continues with the next action.", + "To prevent an infinite loop, a wait action", + "must execute between the start of the action", + "list and this action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 50, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If Condition Is False", + "orderNumber": 0, + "path": "/interface/action/child/loopIfConditionIsFalse.ts", + "indent": 0 + } + ] + }, + "51": { + "contexts": [ + "Restarts the action list from the beginning", + "if all conditions in the condition list", + "is true. If any are false, execution continues", + "with the next action. To prevent an infinite", + "loop, a wait action must execute between", + "the start of the action list and this action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 51, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If Condition Is True", + "orderNumber": 0, + "path": "/interface/action/child/loopIfConditionIsTrue.ts", + "indent": 0 + } + ] + }, + "52": { + "contexts": [ + "Modifies the value of a global variable,", + "which is a variable that belongs to the game itself." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 52, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 0 + } + ] + }, + "53": { + "contexts": [ + "Modifies the value of a global variable", + "at an index, which is a variable that belongs", + "to the game itself." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 53, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "54": { + "contexts": [ + "Modifies the score (kill count) of one or", + "more players. This action only has an effect", + "in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 54, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Score", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 0 + } + ] + }, + "55": { + "contexts": [ + "Modifies the value of a player variable,", + "which is a variable that belongs to a specific player." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 55, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 0 + } + ] + }, + "56": { + "contexts": [ + "Modifies the value of a player variable", + "at an index, which is a variable that belongs", + "to a specific player." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 56, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "57": { + "contexts": [ + "Modifies the score of one or both teams.", + "This action has not effect in free-for-all", + "modes or modes without a team score." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 57, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Team Score", + "orderNumber": 0, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 0 + } + ] + }, + "58": { + "contexts": [ + "Pauses the match time, players, objective", + "logic, and game mode advancement criteria", + "are unaffected by the pause." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 58, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Pause Match Time", + "orderNumber": 0, + "path": "/interface/action/child/pauseMatchTime.ts", + "indent": 0 + } + ] + }, + "59": { + "contexts": [ + "Plays an effect at a position in the world.", + "The lifetime of this effect is short, so", + "it does not need to be updated or destroyed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 59, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Play Effect", + "orderNumber": 0, + "path": "/interface/action/child/playEffect.ts", + "indent": 0 + } + ] + }, + "60": { + "contexts": [ + "Preemptively loads the specified hero or", + "heroes into memory using the skins of the", + "specified player or players, available memory", + "permitting. Useful whenever rapid hero changing", + "is possible and the next hero is known." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 60, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Preload Hero", + "orderNumber": 0, + "path": "/interface/action/child/preloadHero.ts", + "indent": 0 + } + ] + }, + "61": { + "contexts": [ + "Forces one or more players to press a button", + "virtually for a single frame." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 61, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Press Button", + "orderNumber": 0, + "path": "/interface/action/child/pressButton.ts", + "indent": 0 + } + ] + }, + "62": { + "contexts": [ + "Restores the list of heroes available to", + "one or more players to the list specified", + "by the game settings. If a playerโ€™s current", + "hero becomes unavailable, the player is", + "forced to choose a different hero and respawn", + "at an appropriate spawn location." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 62, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Reset Player Hero Availability", + "orderNumber": 0, + "path": "/interface/action/child/resetPlayerHeroAvailability.ts", + "indent": 0 + } + ] + }, + "63": { + "contexts": [ + "Respawns one or more players at an appropriate", + "spawn location with full health, even if", + "they were already alive." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 63, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Respawn", + "orderNumber": 0, + "path": "/interface/action/child/respawn.ts", + "indent": 0 + } + ] + }, + "64": { + "contexts": [ + "Instantly resurrects one or more players", + "at the location they died with no transition." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 64, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Resurrect", + "orderNumber": 0, + "path": "/interface/action/child/resurrect.ts", + "indent": 0 + } + ] + }, + "65": { + "contexts": [ + "Enables or disables ability 1 for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 65, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 0 + } + ] + }, + "66": { + "contexts": [ + "Enables or disables ability 2 for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 66, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 0 + } + ] + }, + "67": { + "contexts": [ + "Sets the aim speed of one or more players", + "to a percentage of their normal aim speed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 67, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Aim Speed", + "orderNumber": 0, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 0 + } + ] + }, + "68": { + "contexts": [ + "Sets the damage dealt to one or more players", + "of a percentage of their raw damage dealt.", + "NOTE: Negative values do not heal enemies.", + "Damage values of 0 or lower will not trigger script events." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 68, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Damage Dealt", + "orderNumber": 0, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 0 + } + ] + }, + "69": { + "contexts": [ + "Sets the damage received of one or more", + "players to a percentage of their raw damage", + "received. NOTE: Negative values do not heal", + "enemies. Damage values of 0 or lower will", + "not trigger script events." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 69, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Damage Received", + "orderNumber": 0, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 0 + } + ] + }, + "70": { + "contexts": [ + "Sets the facing of one or more players to", + "the specified direction." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 70, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Facing", + "orderNumber": 0, + "path": "/interface/action/child/setFacing.ts", + "indent": 0 + } + ] + }, + "71": { + "contexts": [ + "Stores a value into a global variable, which", + "a variable that belongs to the game itself." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 71, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 0 + } + ] + }, + "72": { + "contexts": [ + "Finds or creates an array on a global variable,", + "which is a variable that belongs to the", + "game itself, then stores a value in the", + "array at the specified index." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 72, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "73": { + "contexts": [ + "Sets the movement gravity for one or more", + "players to a percentage of regular movement gravity." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 73, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Gravity", + "orderNumber": 0, + "path": "/interface/action/child/setGravity.ts", + "indent": 0 + } + ] + }, + "74": { + "contexts": [ + "Sets the healing dealt to one or more players", + "of a percentage of their raw damage dealt.", + "NOTE: Negative values do not damage enemies.", + "Healing values of 0 or lower will not trigger script events." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 74, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 0, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 0 + } + ] + }, + "75": { + "contexts": [ + "Sets the healing received of one or more", + "players to a percentage of their raw healing", + "received. NOTE: Negative values do not damage", + "enemies. Healing values of 0 or lower will", + "not trigger script events." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 75, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Healing Received", + "orderNumber": 0, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 0 + } + ] + }, + "76": { + "contexts": [ + "Causes one or more players to become invisible", + "to either all other players or just enemies." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 76, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Invisible", + "orderNumber": 0, + "path": "/interface/action/child/setInvisible.ts", + "indent": 0 + } + ] + }, + "77": { + "contexts": [ + "Sets the current match time (which is visible", + "at the top of the screen). This can be used", + "to shorten or extend the duration of a match", + "or to change the duration of assemble heroes or setup." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 77, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Match Time", + "orderNumber": 0, + "path": "/interface/action/child/setMatchTime.ts", + "indent": 0 + } + ] + }, + "78": { + "contexts": [ + "Sets the max health of one or more players", + "as a percentage of their raw max health.", + "This action will ensure that a playerโ€™s", + "current health will not exceed the new max health." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 78, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Max Health", + "orderNumber": 0, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 0 + } + ] + }, + "79": { + "contexts": [ + "Sets the move speed of one or more players", + "to a percentage of their raw move speed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 79, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Move Speed", + "orderNumber": 0, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 0 + } + ] + }, + "80": { + "contexts": [ + "Sets the text at the top center of the screen", + "that normally describes the objective to", + "a message visible to specific players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 80, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Objective Description", + "orderNumber": 0, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 0 + } + ] + }, + "81": { + "contexts": [ + "Sets the list of heroes available to one", + "or more players. If a playerโ€™s current hero", + "becomes unavailable, the player is forced", + "to choose a different hero and respawn at", + "an appropriate spawn location." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 81, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 0 + } + ] + }, + "82": { + "contexts": [ + "Sets the score (kill count) of one or more", + "players. This action only has an effect", + "in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 82, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Score", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 0 + } + ] + }, + "83": { + "contexts": [ + "Stores a value into a player variable, which", + "is a variable that belongs to a specific player." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 83, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 0 + } + ] + }, + "84": { + "contexts": [ + "Finds or creates an array on a player variable,", + "which is a variable that belongs to a specific", + "player, then stores a value in the array", + "at the specified index." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 84, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "85": { + "contexts": [ + "Enables or disables primary fire for one", + "or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 85, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 0 + } + ] + }, + "86": { + "contexts": [ + "Sets the projectile gravity for one or more", + "players to a percentage of regular projectile gravity." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 86, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Projectile Gravity", + "orderNumber": 0, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 0 + } + ] + }, + "87": { + "contexts": [ + "Sets the projectile speed for one or more", + "players to a percentage of regular projectile speed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 87, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Projectile Speed", + "orderNumber": 0, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 0 + } + ] + }, + "88": { + "contexts": [ + "Sets the duration between death and respawn", + "for one or more players that are already", + "dead when this action is executed, the change", + "takes effect on their next death." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 88, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Respawn Max Time", + "orderNumber": 0, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 0 + } + ] + }, + "89": { + "contexts": [ + "Enables or disables secondary fire for one", + "or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 89, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 0 + } + ] + }, + "90": { + "contexts": [ + "Sets the simulation rate for the entire", + "game, including all players, projectiles,", + "effects, and game mode logic." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 90, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Slow Motion", + "orderNumber": 0, + "path": "/interface/action/child/setSlowMotion.ts", + "indent": 0 + } + ] + }, + "91": { + "contexts": [ + "Applies a status to one or more players.", + "This status will remain in effect for the", + "specified duration or until it is cleared", + "by the clear status action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 91, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Status", + "orderNumber": 0, + "path": "/interface/action/child/setStatus.ts", + "indent": 0 + } + ] + }, + "92": { + "contexts": [ + "Sets the score for one or both teams. This", + "action has no effect in free-for-all modes", + "or modes without a team score." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 92, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Team Score", + "orderNumber": 0, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 0 + } + ] + }, + "93": { + "contexts": [ + "Enables or disables the ultimate ability", + "of one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 93, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 0 + } + ] + }, + "94": { + "contexts": [ + "Sets the ultimate charge or one or more", + "players as a percentage of maximum charge." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 94, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Charge", + "orderNumber": 0, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 0 + } + ] + }, + "95": { + "contexts": [ + "Skips execution of a certain number of actions", + "in the action list." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 95, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Skip", + "orderNumber": 0, + "path": "/interface/action/child/skip.ts", + "indent": 0 + } + ] + }, + "96": { + "contexts": [ + "Skips execution of a certain number of actions", + "in the action list if this actionโ€™s condition", + "evaluates to true. If it does not, execution", + "continues with the next action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 96, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Skip If", + "orderNumber": 0, + "path": "/interface/action/child/skipIf.ts", + "indent": 0 + } + ] + }, + "97": { + "contexts": [ + "Displays a small message beneath the reticle", + "that is visible to specific players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 97, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 0, + "path": "/interface/action/child/smallMessage.ts", + "indent": 0 + } + ] + }, + "98": { + "contexts": [ + "Starts accelerating one or more players", + "in a specified location." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 98, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Accelerating", + "orderNumber": 0, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 0 + } + ] + }, + "99": { + "contexts": [ + "Places your camera at a location, facing a direction." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 99, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Camera", + "orderNumber": 0, + "path": "/interface/action/child/startCamera.ts", + "indent": 0 + } + ] + }, + "100": { + "contexts": [ + "Starts modifying how much damage one or", + "more receivers will receive from one or", + "more damagers. A reference to this damage", + "modification can be obtained from the last", + "damage modification ID value. This action", + "will fail if too many damage modifications", + "have been started." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 100, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Damage Modification", + "orderNumber": 0, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 0 + } + ] + }, + "101": { + "contexts": [ + "Starts an instance of damage over time,", + "this DOT will persist for the specified", + "duration or until stopped by script. To", + "obtain a reference to this DOT, use the", + "last damage over time to value." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 101, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 0 + } + ] + }, + "102": { + "contexts": [ + "Starts turning one or more players to face", + "the specified direction." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 102, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Facing", + "orderNumber": 0, + "path": "/interface/action/child/startFacing.ts", + "indent": 0 + } + ] + }, + "103": { + "contexts": [ + "Starts forcing one or more players to be", + "a specified hero and, if necessary, respawns", + "them immediately in their current locaiton.", + "This will be the only hero available to", + "the player or players until, the stop forcing", + "player to be hero action is executed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 103, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 0, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 0 + } + ] + }, + "104": { + "contexts": [ + "Forces a team to spawn in a particular spawn", + "room, regardless of the sapwn room normally", + "used by the game mode. This action only", + "has an effect in Assault, Hybrid, and Payload Maps." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 104, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 0, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 0 + } + ] + }, + "105": { + "contexts": [ + "Defines minimum and maximum movement input", + "values for one or more players. Possibly", + "forcing or preventing movement." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 105, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Throttle", + "orderNumber": 0, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 0 + } + ] + }, + "106": { + "contexts": [ + "Starts an instance of damage over time,", + "this HOT will persist for the specified", + "duration or until stopped by script. To", + "obtain a reference to this HOT, use the", + "last damage over time to value." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 106, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 0 + } + ] + }, + "107": { + "contexts": [ + "Forces one or more players to hold a button", + "virtually until stopped by the stop holding button action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 107, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Holding Button", + "orderNumber": 0, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 0 + } + ] + }, + "108": { + "contexts": [ + "Stops the acceleration started by the start", + "accelerating action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 108, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Accelerating", + "orderNumber": 0, + "path": "/interface/action/child/stopAccelerating.ts", + "indent": 0 + } + ] + }, + "109": { + "contexts": [ + "Stops the all damage modifications that", + "were started using the start damage modification action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 109, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Damage Modifications", + "orderNumber": 0, + "path": "/interface/action/child/stopAllDamageModifications.ts", + "indent": 0 + } + ] + }, + "110": { + "contexts": [ + "Stops all damage over time started by the", + "start damage over time or one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 110, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopAllDamageOverTime.ts", + "indent": 0 + } + ] + }, + "111": { + "contexts": [ + "Stops all heal over time started by the", + "start heal over time or one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 111, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopAllHealOverTime.ts", + "indent": 0 + } + ] + }, + "112": { + "contexts": [ + "Stops all forced camera positions started", + "by the start camera or one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 112, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Camera", + "orderNumber": 0, + "path": "/interface/action/child/stopCamera.ts", + "indent": 0 + } + ] + }, + "113": { + "contexts": [ + "Stops an in-progress chase of a global variable,", + "leaving it at its current value." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 113, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Chasing Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/stopChasingGlobalVariable.ts", + "indent": 0 + } + ] + }, + "114": { + "contexts": [ + "Stops an in-progress chase of a player variable,", + "leaving it at its current value." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 114, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 0 + } + ] + }, + "115": { + "contexts": [ + "Stops a damage modification that was started", + "by the start damage modification action" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 115, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Damage Modification", + "orderNumber": 0, + "path": "/interface/action/child/stopDamageModification.ts", + "indent": 0 + } + ] + }, + "116": { + "contexts": [ + "Stops an instance of damage over time that", + "was started by the start damage over time action" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 116, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopDamageOverTime.ts", + "indent": 0 + } + ] + }, + "117": { + "contexts": [ + "Stops the turning started by the start facing", + "action for or one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 117, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Facing", + "orderNumber": 0, + "path": "/interface/action/child/stopFacing.ts", + "indent": 0 + } + ] + }, + "118": { + "contexts": [ + "Stops forcing one or more players to be", + "a specified hero. This will not respawn", + "the player or players, but it will restore", + "their availablity the next time they go", + "to select a hero." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 118, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Player To Be Hero", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingPlayerToBeHero.ts", + "indent": 0 + } + ] + }, + "119": { + "contexts": [ + "Undoes the effect of start forcing spawn", + "room action for the specified team." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 119, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Spawn Room", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingSpawnRoom.ts", + "indent": 0 + } + ] + }, + "120": { + "contexts": [ + "Undoes the effect of start forcing throttle", + "action for one or more players" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 120, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Throttle", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingThrottle.ts", + "indent": 0 + } + ] + }, + "121": { + "contexts": [ + "Stops an instance of heal over time that", + "was started by the start heal over time action" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 121, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopHealOverTime.ts", + "indent": 0 + } + ] + }, + "122": { + "contexts": [ + "Undoes the effect of the start holding button", + "action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 122, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Holding Button", + "orderNumber": 0, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 0 + } + ] + }, + "123": { + "contexts": [ + "Teleports one or more players to the specified location." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 123, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Teleport", + "orderNumber": 0, + "path": "/interface/action/child/teleport.ts", + "indent": 0 + } + ] + }, + "124": { + "contexts": [ + "Unpauses the match time." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 124, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Unpause Match Time", + "orderNumber": 0, + "path": "/interface/action/child/unpauseMatchTime.ts", + "indent": 0 + } + ] + }, + "125": { + "contexts": [ + "Pauses the execution of the action list,", + "unless the wait is interrupted. The remainder", + "of the actions will execute after the pause." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 125, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Wait", + "orderNumber": 0, + "path": "/interface/action/child/wait.ts", + "indent": 0 + } + ] + }, + "126": { + "contexts": [ + "Condition - Specifies whether the execution", + "is stopped. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Abort If", + "orderNumber": 1, + "path": "/interface/action/child/abortIf.ts", + "indent": 4 + } + ] + }, + "127": { + "contexts": [ + "Player - The player or players whose button", + "is being reenabled. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Allow Button", + "orderNumber": 1, + "path": "/interface/action/child/allowButton.ts", + "indent": 4 + } + ] + }, + "128": { + "contexts": [ + "Button - The logical button that is being reenabled." + ], + "usedFiles": [ + { + "topName": "Allow Button", + "orderNumber": 2, + "path": "/interface/action/child/allowButton.ts", + "indent": 4 + } + ] + }, + "129": { + "contexts": [ + "Player - The player or players whose velocity", + "will be changed. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 1, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "130": { + "contexts": [ + "Direction - The unit direction in which", + "the impulse will be applied. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 2, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "131": { + "contexts": [ + "Speed - The magnitude of the change to the", + "velocities of the player or players. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 3, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "132": { + "contexts": [ + "Relative - Specifies whether the direction", + "is relative to world coordinates or the", + "local coordinates of the player or players." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 4, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "133": { + "contexts": [ + "To World - Relative to the worldโ€™s coordinate system." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 5, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "134": { + "contexts": [ + "Visible to - One or more players who will", + "see the message. Can use most Value Syntax", + "to select multiple players to specify." + ], + "usedFiles": [ + { + "topName": "Big Message", + "orderNumber": 1, + "path": "/interface/action/child/bigMessage.ts", + "indent": 4 + } + ] + }, + "135": { + "contexts": [ + "Header - The message to be displayed. Can", + "use most String based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Big Message", + "orderNumber": 2, + "path": "/interface/action/child/bigMessage.ts", + "indent": 4 + }, + { + "topName": "Set Objective Description", + "orderNumber": 1, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 2, + "path": "/interface/action/child/smallMessage.ts", + "indent": 4 + } + ] + }, + "136": { + "contexts": [ + "Variable - The variable the action will", + "manipulate. Can use most Variable based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 1, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 1, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + } + ] + }, + "137": { + "contexts": [ + "Destination - The value that the global", + "variable will eventually reach. The type", + "of this value may be either a number or", + "a vector, through the variableโ€™s existing", + "value must be of the same type before the", + "chase begins. Can use most Number or Vector", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 2, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 2, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + } + ] + }, + "138": { + "contexts": [ + "Player - The player whose variable will", + "gradually change. If multiple players are", + "provided, each of their variables will change independently." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 3, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 1, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + } + ] + }, + "139": { + "contexts": [ + "Visible to - One or more players who will", + "be able to see the icon. Can use most Value", + "Syntax to select one or multiple players." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 4, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 3, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 2, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 4, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Create Effect", + "orderNumber": 1, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + }, + { + "topName": "Create Hud Text", + "orderNumber": 1, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + }, + { + "topName": "Create Icon", + "orderNumber": 1, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "140": { + "contexts": [ + "Destination - The value that the player", + "variable will eventually reach. The type", + "of this value may be either a number or", + "a vector, through the variableโ€™s existing", + "value must be of the same type before the", + "chase begins. Can use most Number or Vector", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 4, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 3, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "141": { + "contexts": [ + "Player - The player whose variable will", + "gradually change. If multiple players are", + "provided, each of their variables will change independently." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 3, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 1, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "142": { + "contexts": [ + "Rate - The amount of change that will happen", + "to the variableโ€™s value each second. Can", + "use most Number based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 4, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + } + ] + }, + "143": { + "contexts": [ + "Variable - The variable the action will", + "manipulate. Can use most Variable based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 5, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 2, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "144": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can specify a Destination and Duration or nothing." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 5, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "145": { + "contexts": [ + "Player - The player or players from whom", + "the status will be removed. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Clear Status", + "orderNumber": 1, + "path": "/interface/action/child/clearStatus.ts", + "indent": 4 + } + ] + }, + "146": { + "contexts": [ + "Status - The Status to be removed from the", + "player or players. Values include Hacked,", + "Burning, Knocked Down, Asleep, Frozen, Unkillable,", + "Invincible, Phased Out, Rooted, or Stunned." + ], + "usedFiles": [ + { + "topName": "Clear Status", + "orderNumber": 2, + "path": "/interface/action/child/clearStatus.ts", + "indent": 4 + } + ] + }, + "147": { + "contexts": [ + "Player - The player or players to perform", + "the communication. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Communicate", + "orderNumber": 1, + "path": "/interface/action/child/communicate.ts", + "indent": 4 + } + ] + }, + "148": { + "contexts": [ + "Type - The type of communication. Can use", + "any equipped emote, equipped voice line,", + "or any other communication effect." + ], + "usedFiles": [ + { + "topName": "Communicate", + "orderNumber": 2, + "path": "/interface/action/child/communicate.ts", + "indent": 4 + } + ] + }, + "149": { + "contexts": [ + "Visible to - One or more players who will", + "be able to see the effect. Can use most", + "Value Syntax to select one or multiple players." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 2, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + }, + { + "topName": "Play Effect", + "orderNumber": 1, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "150": { + "contexts": [ + "Color - The color of the effect to be created.", + "IF a particular team is chosen, the effect", + "will either be red or blue, depending on", + "whether the team is hostile to the viewer.", + "Does not apply to sound effects. (Sphere,", + "Light Shaft, Orb, Ring, Cloud, Sparkles,", + "Good Aura, Bad Aura, Energy Sound, Pick-Up", + "Sound, Good Aura Sound, Bad Aura Sound,", + "Sparkles Sound, Smoke Sound, Decal Sound, Beacon Sound)" + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 3, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "151": { + "contexts": [ + "Position - The effectโ€™s position. If this", + "value is a player, then the effect will", + "move along with the player, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based", + "Value Syntax. (Sphere, Light Shaft, Orb,", + "Ring, Cloud, Sparkles, Good Aura, Bad Aura,", + "Energy Sound, Pick-Up Sound, Good Aura Sound,", + "Bad Aura Sound, Sparkles Sound, Smoke Sound,", + "Decal Sound, Beacon Sound)" + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 4, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "152": { + "contexts": [ + "Radius - The effectโ€™s radius in meters.", + "Sound effects have their volume affected", + "instead. (Sphere, Light Shaft, Orb, Ring,", + "Cloud, Sparkles, Good Aura, Bad Aura, Energy", + "Sound, Pick-Up Sound, Good Aura Sound, Bad", + "Aura Sound, Sparkles Sound, Smoke Sound,", + "Decal Sound, Beacon Sound)" + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 5, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "153": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated,", + "the effect will keep asking for and using", + "new values from reevaluated inputs." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 6, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "154": { + "contexts": [ + "Header - The header text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 2, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "155": { + "contexts": [ + "Subheader - The subheader text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 3, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "156": { + "contexts": [ + "Text - The body text to be displayed (can", + "be blank). Can use most String based Value", + "Syntax to populate." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 4, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "157": { + "contexts": [ + "Location - The location on the screen where", + "text will appear. You can choose left, top, or right." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 5, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "158": { + "contexts": [ + "Sort Order - The Sort Order of the text", + "relative to other text in the same location.", + "Text with a higher sort order will come", + "after text with a lower sort order. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 6, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "159": { + "contexts": [ + "Header Color - The color of the Header text", + "to be created. If a particular team is chosen,", + "the effect will either be red or blue." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 7, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "160": { + "contexts": [ + "Subheader Color - The color of the Subheader", + "text to be created. If a particular team", + "is chosen, the effect will either be red or blue." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 8, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "161": { + "contexts": [ + "Text Color - The color of the body text", + "to be created. If a particular team is chosen,", + "the effect will either be red or blue." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 9, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "162": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated,", + "the text will keep asking for and using", + "new values from reevaluated inputs." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 10, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "163": { + "contexts": [ + "Position - The iconโ€™s position. If this", + "value is a player, then the icon will appear", + "above the playerโ€™s head, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 2, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "164": { + "contexts": [ + "Icon - The icon to be created. (Arrow: Down,", + "Arrow: Left, Arrow: Right, Arrow: Up, Asterisk,", + "Bolt, Checkmark, Circle, Club, Diamond,", + "Dizzy, Exclamation Mark, Eye, Fire, Flag,", + "Halo, Happy, Heart, Moon, No, Plus, Poison,", + "Poison 2, Question Mark, Radioactive, Recycle,", + "Ring Thick, Ring Thin, Sad, Skull, Spade,", + "Spiral, Stop, Trashcan, Warning, X)" + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 3, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "165": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated,", + "the icon will keep asking for and using", + "new values from reevaluated inputs. (Arrow:", + "Down, Arrow: Left, Arrow: Right, Arrow:", + "Up, Asterisk, Bolt, Checkmark, Circle, Club,", + "Diamond, Dizzy, Exclamation Mark, Eye, Fire,", + "Flag, Halo, Happy, Heart, Moon, No, Plus,", + "Poison, Poison 2, Question Mark, Radioactive,", + "Recycle, Ring Thick, Ring Thin, Sad, Skull,", + "Spade, Spiral, Stop, Trashcan, Warning,", + "X, Visible to and position, Position, Visible to, None)" + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 4, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "166": { + "contexts": [ + "Icon Color - The color of the icon to be", + "created. IF a particular team is chosen,", + "the icon will either be red or blue, depending", + "on whether the team is hostile to the viewer.", + "(Arrow: Down, Arrow: Left, Arrow: Right,", + "Arrow: Up, Asterisk, Bolt, Checkmark, Circle,", + "Club, Diamond, Dizzy, Exclamation Mark,", + "Eye, Fire, Flag, Halo, Happy, Heart, Moon,", + "No, Plus, Poison, Poison 2, Question Mark,", + "Radioactive, Recycle, Ring Thick, Ring Thin,", + "Sad, Skull, Spade, Spiral, Stop, Trashcan,", + "Warning, X, Visible to and position, Position,", + "Visible to, None)" + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 5, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "167": { + "contexts": [ + "Show when offscreen - Should this icon still", + "appear even when it is behind you? Can use", + "most Boolean based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 6, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "168": { + "contexts": [ + "Visible to - One or more players who will", + "see the HUD text. Can use most Value Syntax", + "to select one or multiple players." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 1, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "169": { + "contexts": [ + "Header - The header text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 2, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "170": { + "contexts": [ + "Position - The textโ€™s position. If this", + "value is a player, then the text will appear", + "above the playerโ€™s head. Otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 3, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "171": { + "contexts": [ + "Scale - The textโ€™s scale. Can use most Number", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 4, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "172": { + "contexts": [ + "Clipping - Specifies whether the text can", + "be seen through walls or is instead clipped." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 5, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "173": { + "contexts": [ + "Clip Against Surfaces - The text may be", + "partially or completely obscured by walls,", + "floors, ceilings, players, or other solid objects." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 6, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "174": { + "contexts": [ + "Player - The player or players who will", + "receive damage. Can use most Player based", + "Value Syntax to select one or multiple players." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 1, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "175": { + "contexts": [ + "Damager - The player who will receive credit", + "for the damage. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 2, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "176": { + "contexts": [ + "Amount - The amount of damage to apply.", + "This amount may be modified by buffs, debuffs,", + "or armor. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 3, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "177": { + "contexts": [ + "Player - The winning player. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Declare Player Victory", + "orderNumber": 1, + "path": "/interface/action/child/declarePlayerVictory.ts", + "indent": 4 + } + ] + }, + "178": { + "contexts": [ + "Team - Round winning team. Can use most", + "Team based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Declare Round Victory", + "orderNumber": 1, + "path": "/interface/action/child/declareRoundVictory.ts", + "indent": 4 + } + ] + }, + "179": { + "contexts": [ + "Team - The winning team. Can use most Team", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Declare Team Victory", + "orderNumber": 1, + "path": "/interface/action/child/declareTeamVictory.ts", + "indent": 4 + } + ] + }, + "180": { + "contexts": [ + "Entity - Specifies which effect entity to", + "destroy. This entity may be the last created", + "entity or a variable into which last created", + "entity was earlier stored." + ], + "usedFiles": [ + { + "topName": "Destroy Effect", + "orderNumber": 1, + "path": "/interface/action/child/destroyEffect.ts", + "indent": 4 + } + ] + }, + "181": { + "contexts": [ + "Text ID - Specifies which hud text to destroy.", + "This ID may be last text ID or a variable", + "into which last text ID was earlier stored." + ], + "usedFiles": [ + { + "topName": "Destroy Hud Text", + "orderNumber": 1, + "path": "/interface/action/child/destroyHudText.ts", + "indent": 4 + } + ] + }, + "182": { + "contexts": [ + "Text ID - Specifies which icon to destroy.", + "This ID may be last text ID or a variable", + "into which last create entity was earlier stored." + ], + "usedFiles": [ + { + "topName": "Destroy Icon", + "orderNumber": 1, + "path": "/interface/action/child/destroyIcon.ts", + "indent": 4 + } + ] + }, + "183": { + "contexts": [ + "Text Id - A Reference to the last piece", + "of text created by the event player (or", + "created at the global level) via the create", + "hud text or create in-world text action." + ], + "usedFiles": [ + { + "topName": "Destroy In World Text", + "orderNumber": 1, + "path": "/interface/action/child/destroyInWorldText.ts", + "indent": 4 + } + ] + }, + "184": { + "contexts": [ + "Player - The player or players whose respawning", + "is affected. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Disable Built In Game Mode Respawning", + "orderNumber": 1, + "path": "/interface/action/child/disableBuiltInGameModeRespawning.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Respawning", + "orderNumber": 1, + "path": "/interface/action/child/enableBuiltInGameModeRespawning.ts", + "indent": 4 + } + ] + }, + "185": { + "contexts": [ + "Player - The player or players whose default", + "death spectate behavior is restored. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Disable Death Spectate All Players", + "orderNumber": 1, + "path": "/interface/action/child/disableDeathSpectateAllPlayers.ts", + "indent": 4 + } + ] + }, + "186": { + "contexts": [ + "Player - The player or players who will", + "revert to seeing their own HUD while death", + "spectating. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Disable Death Spectate Target Hud", + "orderNumber": 1, + "path": "/interface/action/child/disableDeathSpectateTargetHud.ts", + "indent": 4 + } + ] + }, + "187": { + "contexts": [ + "Player - The player executing this rule,", + "as specified by the event. May be the same", + "as the attacker or victim. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Disallow Button", + "orderNumber": 1, + "path": "/interface/action/child/disallowButton.ts", + "indent": 4 + } + ] + }, + "188": { + "contexts": [ + "Button - The logical button that is being disabled." + ], + "usedFiles": [ + { + "topName": "Disallow Button", + "orderNumber": 2, + "path": "/interface/action/child/disallowButton.ts", + "indent": 4 + } + ] + }, + "189": { + "contexts": [ + "Player - The player or players who will", + "be allowed to spectate all players. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Enable Death Spectate All Players", + "orderNumber": 1, + "path": "/interface/action/child/enableDeathSpectateAllPlayers.ts", + "indent": 4 + } + ] + }, + "190": { + "contexts": [ + "Player - The player or players who will", + "begin seeing their spectateโ€™s targetโ€™s hud", + "while death spectating. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Enable Death Spectate Target Hud", + "orderNumber": 1, + "path": "/interface/action/child/enableDeathSpectateTargetHud.ts", + "indent": 4 + } + ] + }, + "191": { + "contexts": [ + "Player - The player or players whose health", + "will be restored. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 1, + "path": "/interface/action/child/heal.ts", + "indent": 4 + } + ] + }, + "192": { + "contexts": [ + "Player - One or more players who will receive", + "the heal over time. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 2, + "path": "/interface/action/child/heal.ts", + "indent": 4 + }, + { + "topName": "Start Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "193": { + "contexts": [ + "Amount - The amount of healing to apply.", + "This amount may be modified by buffs or", + "debuffs, healing is capped by each playerโ€™s", + "max health. Can use most Number based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 3, + "path": "/interface/action/child/heal.ts", + "indent": 4 + } + ] + }, + "194": { + "contexts": [ + "Player - The player or players who will", + "be killed. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Kill", + "orderNumber": 1, + "path": "/interface/action/child/kill.ts", + "indent": 4 + } + ] + }, + "195": { + "contexts": [ + "Killer - The player who will receive credit", + "for the kill. A killer of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Kill", + "orderNumber": 2, + "path": "/interface/action/child/kill.ts", + "indent": 4 + } + ] + }, + "196": { + "contexts": [ + "Condition - Specifies whether the loop will", + "occur. Can use most Conditional based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Loop If", + "orderNumber": 1, + "path": "/interface/action/child/loopIf.ts", + "indent": 4 + } + ] + }, + "197": { + "contexts": [ + "Variable - The global variable to modify." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "198": { + "contexts": [ + "Operation - The way in which the variableโ€™s", + "value will be changed. Options include standard", + "arithmetic operations as well as array operations", + "for appending and removing values." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 2, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "199": { + "contexts": [ + "Value - The value used for the modification.", + "For arithmetic operations, This is the second of", + "the two operands, With the othher being the", + "variable's existing value. For array operations,", + " This is the value to append or remove." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 3, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "200": { + "contexts": [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with new elements", + "given a value of 0." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "201": { + "contexts": [ + "Player - The player whose score will change.", + "Can use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Modify Player Score", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 4 + } + ] + }, + "202": { + "contexts": [ + "Team - The team whose score will be changed.", + "Can use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Modify Player Score", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 4 + }, + { + "topName": "Modify Team Score", + "orderNumber": 1, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 4 + } + ] + }, + "203": { + "contexts": [ + "Player - The player or players whose variable", + "will be set. If multiple players are provided,", + "each of their variables will be set. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "204": { + "contexts": [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 3, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "205": { + "contexts": [ + "Value - The value used for the modification.", + "For arithmetic operations, this is the second", + "of two operands, with the other being the", + "variableโ€™s existing value. For array operations,", + "this is the value to append or remove. Various", + "Value Syntax can be used." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 4, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "206": { + "contexts": [ + "Operation - The way in which the variableโ€™s", + "value will be changed. Options include standard", + "arithmetic operations as well as array operations", + "for appending and removing values." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "207": { + "contexts": [ + "Value - The value used for the modification.", + "For arithmetic operations, this is the second", + "of two operands, with the other being the", + "variableโ€™s existing value. For array operations,", + "this is the value to append or remove. Various", + "Value Syntax can be used." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable At Index", + "orderNumber": 5, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "208": { + "contexts": [ + "Score - The amount the score will increase", + "or decrease. If positive, the score will", + "increase. If negative, the score will decrease.", + "Can use most Number based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Modify Team Score", + "orderNumber": 2, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 4 + } + ] + }, + "209": { + "contexts": [ + "Type - The type of the effect to be created.", + "(Good Explosion, Bad Explosion, Ring Explosion,", + "Good Pickup Effect, Bad Pickup Effect, Debuff", + "Impact Sound, Buff Impact Sound, Ring Explosion", + "Sound, Buff Explosion Sound, Explosion Sound)" + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 2, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "210": { + "contexts": [ + "Color - The color of the effect to be created.", + "IF a particular team is chosen, the effect", + "will either be red or blue, depending on", + "whether the team is hostile to the viewer.", + "(Good Explosion, Bad Explosion, Ring Explosion,", + "Good Pickup Effect, Bad Pickup Effect, Debuff", + "Impact Sound, Buff Impact Sound, Ring Explosion", + "Sound, Buff Explosion Sound, Explosion Sound)" + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 3, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "211": { + "contexts": [ + "Position - The effectโ€™s position. If this", + "value is a player, then the effect will", + "move along with the player, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based", + "Value Syntax. (Good Explosion, Bad Explosion,", + "Ring Explosion, Good Pickup Effect, Bad", + "Pickup Effect, Debuff Impact Sound, Buff", + "Impact Sound, Ring Explosion Sound, Buff", + "Explosion Sound, Explosion Sound)" + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 4, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "212": { + "contexts": [ + "Radius - The effectโ€™s radius in meters.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 5, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "213": { + "contexts": [ + "Player - The player or players who will", + "begin preloading a hero or heroes. Only", + "one preload hero action will be active at", + "a time for a given player. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Preload Hero", + "orderNumber": 1, + "path": "/interface/action/child/preloadHero.ts", + "indent": 4 + } + ] + }, + "214": { + "contexts": [ + "Hero - The hero or heroes to begin preloading", + "for the specified player or players. When", + "multiple heroes are specified in an array,", + "the Heroes towards the beginning of the", + "array are prioritized. Can use most Hero", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Preload Hero", + "orderNumber": 2, + "path": "/interface/action/child/preloadHero.ts", + "indent": 4 + } + ] + }, + "215": { + "contexts": [ + "Player - The player or players for whom", + "virtual button input will be forced. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Press Button", + "orderNumber": 1, + "path": "/interface/action/child/pressButton.ts", + "indent": 4 + } + ] + }, + "216": { + "contexts": [ + "Button - The button to be pressed." + ], + "usedFiles": [ + { + "topName": "Press Button", + "orderNumber": 2, + "path": "/interface/action/child/pressButton.ts", + "indent": 4 + } + ] + }, + "217": { + "contexts": [ + "Player - The player or players whose hero", + "list is being reset. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Reset Player Hero Availability", + "orderNumber": 1, + "path": "/interface/action/child/resetPlayerHeroAvailability.ts", + "indent": 4 + } + ] + }, + "218": { + "contexts": [ + "Player - The player or players to respawn.", + "Can use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Respawn", + "orderNumber": 1, + "path": "/interface/action/child/respawn.ts", + "indent": 4 + } + ] + }, + "219": { + "contexts": [ + "Player - The player or players who will", + "be resurrected. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Resurrect", + "orderNumber": 1, + "path": "/interface/action/child/resurrect.ts", + "indent": 4 + } + ] + }, + "220": { + "contexts": [ + "Player - The player or players whose access", + "to ability 1 is affected. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 4 + } + ] + }, + "221": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use ability 1. Expects", + "a Boolean Value such as True, False, or", + "Compare. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 4 + } + ] + }, + "222": { + "contexts": [ + "Player - The player or players whose access", + "to ability 2 is affected. Expects a Boolean", + "Value such as True, False, or Compare. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 4 + } + ] + }, + "223": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use ability 2. Can use", + "most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 4 + } + ] + }, + "224": { + "contexts": [ + "Player - The player or players whose aim", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Aim Speed", + "orderNumber": 1, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 4 + } + ] + }, + "225": { + "contexts": [ + "Turn Speed Percent - The percentage of normal", + "aim speed to which the player or players", + "will set their aim speed. Can use most Number", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Aim Speed", + "orderNumber": 2, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 4 + } + ] + }, + "226": { + "contexts": [ + "Player - The player or players whose damage", + "dealt will be set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Damage Dealt", + "orderNumber": 1, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 4 + } + ] + }, + "227": { + "contexts": [ + "Damage Dealt Percent - The percentage of", + "raw damage dealt to which the player or", + "players will set their damage dealt. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Damage Dealt", + "orderNumber": 2, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 4 + } + ] + }, + "228": { + "contexts": [ + "Player - The player or players whose damage", + "received will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Damage Received", + "orderNumber": 1, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 4 + } + ] + }, + "229": { + "contexts": [ + "Damage Received Percent - The percentage", + "of raw damage received to which the player", + "or players will set their damage received.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Damage Received", + "orderNumber": 2, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 4 + } + ] + }, + "230": { + "contexts": [ + "Player - The player or players whose facing", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Facing", + "orderNumber": 1, + "path": "/interface/action/child/setFacing.ts", + "indent": 4 + } + ] + }, + "231": { + "contexts": [ + "Direction - The unit direction in which", + "the player or players will face. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Facing", + "orderNumber": 2, + "path": "/interface/action/child/setFacing.ts", + "indent": 4 + } + ] + }, + "232": { + "contexts": [ + "Variable - Specifies which Global Variable", + "to store the value into. Specified by a", + "single alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Set Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 4 + } + ] + }, + "233": { + "contexts": [ + "Player - The player or players whose variable", + "will be set. If multiple players are provided,", + "each of their variables will be set. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Global Variable", + "orderNumber": 2, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "234": { + "contexts": [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with the new elements", + "given a value of zero. Can use most Number", + "based Value Syntax with this value." + ], + "usedFiles": [ + { + "topName": "Set Global Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "235": { + "contexts": [ + "Value - The value that will be stored into", + "the array. Nearly any Value syntax can be", + "used, however it is most common with Number based syntax." + ], + "usedFiles": [ + { + "topName": "Set Global Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "236": { + "contexts": [ + "Player - The player or players whose healing", + "dealt will be set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Gravity", + "orderNumber": 1, + "path": "/interface/action/child/setGravity.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 1, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 4 + } + ] + }, + "237": { + "contexts": [ + "Healing Dealt Percent - The percentage of", + "raw healing dealt to which the player or", + "players will set their healing dealt. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Gravity", + "orderNumber": 2, + "path": "/interface/action/child/setGravity.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 2, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 4 + } + ] + }, + "238": { + "contexts": [ + "Player - The player or players whose healing", + "received will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Healing Received", + "orderNumber": 1, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 4 + } + ] + }, + "239": { + "contexts": [ + "Healing Received Percent - The percentage", + "of raw healing received to which the player", + "or players will set their healing received.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Healing Received", + "orderNumber": 2, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 4 + } + ] + }, + "240": { + "contexts": [ + "Player - The player or players who will", + "become invisible. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Invisible", + "orderNumber": 1, + "path": "/interface/action/child/setInvisible.ts", + "indent": 4 + } + ] + }, + "241": { + "contexts": [ + "Invisible to - Specifies for whom the player", + "or players will be invisible. Can be set", + "to All, Enemies, or None." + ], + "usedFiles": [ + { + "topName": "Set Invisible", + "orderNumber": 2, + "path": "/interface/action/child/setInvisible.ts", + "indent": 4 + } + ] + }, + "242": { + "contexts": [ + "Time - The match time in seconds. Can use", + "most Number based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Match Time", + "orderNumber": 1, + "path": "/interface/action/child/setMatchTime.ts", + "indent": 4 + } + ] + }, + "243": { + "contexts": [ + "Player - The player or players whose max", + "health will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Max Health", + "orderNumber": 1, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 4 + } + ] + }, + "244": { + "contexts": [ + "Player - The player or players whose move", + "speed will be set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Max Health", + "orderNumber": 2, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 4 + }, + { + "topName": "Set Move Speed", + "orderNumber": 1, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 4 + } + ] + }, + "245": { + "contexts": [ + "Health Percent - The percentage of raw move", + "speed to which the player or players will", + "set their move speed. Can use most Number", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Move Speed", + "orderNumber": 2, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 4 + } + ] + }, + "246": { + "contexts": [ + "Visible to - One or more players who will", + "see the message. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Objective Description", + "orderNumber": 2, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 1, + "path": "/interface/action/child/smallMessage.ts", + "indent": 4 + } + ] + }, + "247": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated.", + "The message will keep asking for and using", + "new values from reevaluated inputs. Can", + "choose โ€œVisible to and Stringโ€ or โ€œStringโ€" + ], + "usedFiles": [ + { + "topName": "Set Objective Description", + "orderNumber": 3, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + } + ] + }, + "248": { + "contexts": [ + "Player - The player or players whose hero", + "list is being set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 4 + } + ] + }, + "249": { + "contexts": [ + "Hero - The hero or heroes that will be available.", + "If no heroes are provided, the action has", + "no effect. Can use most Hero based Value", + "Syntax for this value including compatible Arrays." + ], + "usedFiles": [ + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 4 + } + ] + }, + "250": { + "contexts": [ + "Player - The player or players whose score", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Player Score", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 4 + } + ] + }, + "251": { + "contexts": [ + "Team - The team or teams whose score will", + "be set. Can use most Team based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Player Score", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 4 + }, + { + "topName": "Set Team Score", + "orderNumber": 1, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 4 + } + ] + }, + "252": { + "contexts": [ + "Variable - Specifies which Player Variable", + "to store the value into. Specified by a", + "single alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Set Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "253": { + "contexts": [ + "Value - The value that will be stored. Nearly", + "any Value syntax can be used, however it", + "is most common with Number based syntax." + ], + "usedFiles": [ + { + "topName": "Set Player Variable", + "orderNumber": 3, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "254": { + "contexts": [ + "Variable - Specifies which player variableโ€™s", + "value is the array to modify, if the variableโ€™s", + "value is not an array, then its value becomes", + "an empty array. Specified by a single alphabetic", + "letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "255": { + "contexts": [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with the new elements", + "given a value of zero. Can use most Number", + "based Value Syntax with this value." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "256": { + "contexts": [ + "Value - The value that will be stored into", + "the array. Nearly any Value syntax can be", + "used, however it is most common with Number based syntax." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "257": { + "contexts": [ + "Player - The player or players whose access", + "to primary fire is affected. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "258": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use primary fire. Expects", + "a Boolean Value such as True, False, or", + "Compare. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "259": { + "contexts": [ + "Player - The player or players whose projectile", + "gravity will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Projectile Gravity", + "orderNumber": 1, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 4 + } + ] + }, + "260": { + "contexts": [ + "Projectile Gravity Percent - The percentage", + "of the regular projectile gravity to which", + "the player or players will set their personal", + "projectile gravity. Can use most Number", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Projectile Gravity", + "orderNumber": 2, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 4 + } + ] + }, + "261": { + "contexts": [ + "Player - The player or players whose projectile", + "speed will be set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Projectile Speed", + "orderNumber": 1, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 4 + } + ] + }, + "262": { + "contexts": [ + "Projectile Speed Percent - The percentage", + "of the regular projectile speed to which", + "the player or players will set their personal", + "projectile speed. Can use most Number based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Projectile Speed", + "orderNumber": 2, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 4 + } + ] + }, + "263": { + "contexts": [ + "Player - The player or players whose respawn", + "max time will is being defined. Can use", + "most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Respawn Max Time", + "orderNumber": 1, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 4 + } + ] + }, + "264": { + "contexts": [ + "Time - The duration between death and respawn", + "in seconds. Can use most Number based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Respawn Max Time", + "orderNumber": 2, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 4 + } + ] + }, + "265": { + "contexts": [ + "Player - The player or players whose access", + "to secondary fire is affected. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "266": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use secondary fire.", + "Expects a Boolean Value such as True, False,", + "or Compare. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "267": { + "contexts": [ + "Speed Percent - The simulation rate as a", + "percentage of normal speed. Only rates up", + "to 100% are allowed. Can use most Number", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Slow Motion", + "orderNumber": 1, + "path": "/interface/action/child/setSlowMotion.ts", + "indent": 4 + } + ] + }, + "268": { + "contexts": [ + "Player - The player or players to whom the", + "status will be applied. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 1, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "269": { + "contexts": [ + "Assister - Specifies a player to be awarded", + "assist credit should the affected player", + "or players be killed while the status is", + "in effect. An assister of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 2, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "270": { + "contexts": [ + "Status - The Status to be applied from the", + "player or players. These behave similarly", + "to statuses applied from hero abilities.", + "Values include Hacked, Burning, Knocked", + "Down, Asleep, Frozen, Unkillable, Invincible,", + "Phased Out, Rooted, or Stunned." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 3, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "271": { + "contexts": [ + "Duration - The duration of the status effect", + "in seconds. To have a status that lasts", + "until a clear status action is executed,", + "proivide an arbitrarily long duration such", + "as 9999. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 4, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "272": { + "contexts": [ + "Score - The score that will be set. Can", + "use most Number based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Team Score", + "orderNumber": 2, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 4 + } + ] + }, + "273": { + "contexts": [ + "Player - The player or players whose ultimate", + "charge will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Charge", + "orderNumber": 1, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 4 + } + ] + }, + "274": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use their ultimate ability.", + "Expects a Boolean Value such as True, False,", + "or Compare. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 4 + } + ] + }, + "275": { + "contexts": [ + "Charge Percent - The percentage of maximum", + "charge. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Charge", + "orderNumber": 2, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 4 + } + ] + }, + "276": { + "contexts": [ + "Condition - Specifies whether the loop will", + "occur. Can use most Conditional based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Skip", + "orderNumber": 1, + "path": "/interface/action/child/skip.ts", + "indent": 4 + }, + { + "topName": "Skip If", + "orderNumber": 1, + "path": "/interface/action/child/skipIf.ts", + "indent": 4 + } + ] + }, + "277": { + "contexts": [ + "Number of actions - The number of action", + "to skip, not including this action. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Skip If", + "orderNumber": 2, + "path": "/interface/action/child/skipIf.ts", + "indent": 4 + } + ] + }, + "278": { + "contexts": [ + "Player - The player or players that will", + "begin accelerating. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 1, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "279": { + "contexts": [ + "Direction - The unit direction in which", + "the acceleration will be applied. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 2, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "280": { + "contexts": [ + "Rate - The rate of acceleration in meters", + "per second squared. This value may need", + "to be quite high in order to overcome gravity", + "and/or surface friction. Can use most Number", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 3, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "281": { + "contexts": [ + "Max Speed - The speed at which acceleration", + "will stop for the player or players. It", + "may not be possible to reach this speed", + "due to gravity and/or surface friction.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 4, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "282": { + "contexts": [ + "Relative - Specifies whether direction is", + "relavtive to the world coordinates or the", + "local coordinates of the player or players." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 5, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "283": { + "contexts": [ + "Player - The player or players who will", + "start turning. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 6, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + }, + { + "topName": "Start Damage Modification", + "orderNumber": 1, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + }, + { + "topName": "Start Facing", + "orderNumber": 1, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "284": { + "contexts": [ + "Player - The player executing this rule.", + "As specified by the event, may be the same", + "as the attacker or the victim. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 1, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "285": { + "contexts": [ + "Eye Position - The position of the camrea,", + "reevaluates continously. Can use most Vector", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 2, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "286": { + "contexts": [ + "Look at position - Where the camera looks", + "at, reevaluates continously. Can use most", + "Vector based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 3, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "287": { + "contexts": [ + "Blend Speed - How fast to blend the camera", + "movement as positions change. 0 means do", + "not blend at all and just change positions", + "instantly. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 4, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "288": { + "contexts": [ + "Damagers - The player or players whose outgoing", + "damage will be modified (when attacking", + "the receivers). Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 2, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "289": { + "contexts": [ + "Damage Percent - The percentage of damage", + "that will apply to receivers when attacked", + "by damagers. Can use most Number based Value", + "Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 3, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "290": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. Can", + "choose from โ€œReceivers, Damagers, and Damage", + "Percentโ€, โ€œReceivers and Damagersโ€, or โ€œNoneโ€." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 4, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "291": { + "contexts": [ + "Receivers - One or more players who will", + "receive the damage over time. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "292": { + "contexts": [ + "Damager - The player who will receive credit", + "for the damage. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 2, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "293": { + "contexts": [ + "Duration - The duration of the damage over", + "time in seconds. To have a DOT that lasts", + "until stopped by script, provide an arbitrarily", + "long duration such as 9999. Can use most", + "Number based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 3, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "294": { + "contexts": [ + "Damage Per Second - The damage per second", + "for the damage over time. Can use most Number", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 4, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "295": { + "contexts": [ + "Direction - The unit direction in which", + "the player or players will eventually face.", + "Can use most Vector based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 2, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "296": { + "contexts": [ + "Turn Rate - The turn rate in degrees per", + "second. Can use most Number based Value", + "Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 3, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "297": { + "contexts": [ + "Relative - Specifies whether direction is", + "relative to the world coordinates or the", + "local coordinates of the player or players." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 4, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "298": { + "contexts": [ + "Reevaluation - Specifies which of this actions", + "inputs will be continously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can choose from โ€œDirection and Turn Rateโ€ or โ€œNoneโ€." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 5, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "299": { + "contexts": [ + "Player - The player or players who will", + "be forced to be a specified hero. Can use", + "most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 1, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "300": { + "contexts": [ + "Hero - The hero that the player or players", + "will be forced to be. Can use most Hero", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 2, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "301": { + "contexts": [ + "Team - The team whose spawn room will be", + "forced. Can use most Team based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 1, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "302": { + "contexts": [ + "Room - The number of the spawn room to be", + "forced. 0 is the first spawn room, 1 is", + "the second, and 2 is the third. If this", + "specified spawn room does not exist. Players", + "will use the normal spawn room. Can use", + "most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 2, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "303": { + "contexts": [ + "Player - The player or players whose movement", + "whill be forced or limited. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 1, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "304": { + "contexts": [ + "Min Forward - Sets the minimum run forward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 2, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "305": { + "contexts": [ + "Max Forward - Sets the maximum run forward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 3, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "306": { + "contexts": [ + "Min Backward - Sets the minimum run backward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 4, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "307": { + "contexts": [ + "Max Backward - Sets the maximum run backward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 5, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "308": { + "contexts": [ + "Min Sideways - Sets the minimum run sideways", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 6, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "309": { + "contexts": [ + "Max Forward - Sets the maximum run sideways", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 7, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "310": { + "contexts": [ + "Healer - The player who will receive credit", + "for the heal. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 2, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "311": { + "contexts": [ + "Duration - The duration of the heal over", + "time in seconds. To have a HOT that lasts", + "until stopped by script, provide an arbitrarily", + "long duration such as 9999. Can use most", + "Number based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 3, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "312": { + "contexts": [ + "Damage Per Second - The heal per second", + "for the heal over time. Can use most Number", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 4, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "313": { + "contexts": [ + "Player - The player or players who are holding", + "a button virtually. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Holding Button", + "orderNumber": 1, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 4 + } + ] + }, + "314": { + "contexts": [ + "Button - The logical button that is being held virtually." + ], + "usedFiles": [ + { + "topName": "Start Holding Button", + "orderNumber": 2, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 4 + } + ] + }, + "315": { + "contexts": [ + "Player - The player or players who will", + "stop accelerating. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Accelerating", + "orderNumber": 1, + "path": "/interface/action/child/stopAccelerating.ts", + "indent": 4 + } + ] + }, + "316": { + "contexts": [ + "Player - The player or players whose scripted", + "damage over time will stop. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop All Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopAllDamageOverTime.ts", + "indent": 4 + } + ] + }, + "317": { + "contexts": [ + "Player - The player or players whose scripted", + "heal over time will stop. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop All Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopAllHealOverTime.ts", + "indent": 4 + } + ] + }, + "318": { + "contexts": [ + "Player - The player or players whose forced", + "camera positions will stop. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Camera", + "orderNumber": 1, + "path": "/interface/action/child/stopCamera.ts", + "indent": 4 + } + ] + }, + "319": { + "contexts": [ + "Variable - Specifies which global variable", + "to stop modifying. Specified by a single", + "alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/stopChasingGlobalVariable.ts", + "indent": 4 + } + ] + }, + "320": { + "contexts": [ + "Player - The player whose variable will", + "stop changing. If multiple players are provided,", + "each of their variables will stop changing.", + "Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 4 + } + ] + }, + "321": { + "contexts": [ + "Variable - Specifies which player variable", + "to stop modifying. Specified by a single", + "alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 4 + } + ] + }, + "322": { + "contexts": [ + "Damage modification ID - Specifies which", + "damage modification instance to stop, this", + "ID may be the last damage modification ID", + "or a variable into which last damage modification", + "ID was earlier stored. Can use most Number", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Damage Modification", + "orderNumber": 1, + "path": "/interface/action/child/stopDamageModification.ts", + "indent": 4 + } + ] + }, + "323": { + "contexts": [ + "Damage Over Time ID - Specifies which damage", + "over time instance to stop, this ID may", + "be the last damage over time ID or a variable", + "into which last damage over time ID was", + "earlier stored. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopDamageOverTime.ts", + "indent": 4 + } + ] + }, + "324": { + "contexts": [ + "Player - The player or players who will", + "stop turning. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Facing", + "orderNumber": 1, + "path": "/interface/action/child/stopFacing.ts", + "indent": 4 + } + ] + }, + "325": { + "contexts": [ + "Player - The player or players who will", + "no longer be forced to be a specific hero.", + "Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Player To Be Hero", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "326": { + "contexts": [ + "Team - The team that will resume using their", + "normal spawn room. Can use most Team based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Spawn Room", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "327": { + "contexts": [ + "Player - The player or players whose movement", + "inout will be restored. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Throttle", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingThrottle.ts", + "indent": 4 + } + ] + }, + "328": { + "contexts": [ + "Heal Over Time ID - Specifies which heal", + "over time instance to stop, this ID may", + "be the last heal over time ID or a variable", + "into which last heal over time ID was earlier", + "stored. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopHealOverTime.ts", + "indent": 4 + } + ] + }, + "329": { + "contexts": [ + "Player - The player or players who are no", + "longer holding a button virtually. Can use", + "most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Holding Button", + "orderNumber": 1, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 4 + } + ] + }, + "330": { + "contexts": [ + "The logical button that is no longer being held virtually." + ], + "usedFiles": [ + { + "topName": "Stop Holding Button", + "orderNumber": 2, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 4 + } + ] + }, + "331": { + "contexts": [ + "Player - The player or players to teleport.", + "Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Teleport", + "orderNumber": 1, + "path": "/interface/action/child/teleport.ts", + "indent": 4 + } + ] + }, + "332": { + "contexts": [ + "Position - The position to which the player", + "or players will teleport. If a player is", + "providedm the position of the player is", + "used. Can use most Vector based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Teleport", + "orderNumber": 2, + "path": "/interface/action/child/teleport.ts", + "indent": 4 + } + ] + }, + "333": { + "contexts": [ + "Time - The duration of the pause. A minimum", + "value of 0.250 seconds is required. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Wait", + "orderNumber": 1, + "path": "/interface/action/child/wait.ts", + "indent": 4 + } + ] + }, + "334": { + "contexts": [ + "Wait Behavior - Specifies if and how the", + "wait can be interrupted. If the condition", + "list is ignored, the wait will not be interrupted,", + "otherwise, the condition list will determine", + "if and when the action list will abort or restart." + ], + "usedFiles": [ + { + "topName": "Wait", + "orderNumber": 2, + "path": "/interface/action/child/wait.ts", + "indent": 4 + } + ] + }, + "335": { + "contexts": [ + "The ONGOING - GLOBAL event attribute will", + "affect all entities in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 0, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Ongoing - Global", + "orderNumber": 0, + "path": "/interface/event/child/onGoingGlobal.ts", + "indent": 0 + } + ] + }, + "336": { + "contexts": [ + "The ONGOING - EACH PLAYER event attribute", + "will affect the specified players in the", + "game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 1, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Ongoing - Each Player", + "orderNumber": 0, + "path": "/interface/event/child/onGoingEachPlayer.ts", + "indent": 0 + } + ] + }, + "337": { + "contexts": [ + "The PLAYER EARNED ELIMINATION event attribute", + "will affect the specified players who successfully", + "score an elimination in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 2, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player earned elimination", + "orderNumber": 0, + "path": "/interface/event/child/playerEarnedElimination.ts", + "indent": 0 + } + ] + }, + "338": { + "contexts": [ + "The PLAYER DEALT FINAL BLOW event attribute", + "will affect the specified players who successfully", + "dealt the lethal damage against another", + "player in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 3, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player dealt final blow", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtFinalBlow.ts", + "indent": 0 + } + ] + }, + "339": { + "contexts": [ + "The PLAYER DEALT DAMAGE event attribute", + "will affect the specified players who successfully", + "dealt damage against another player in the", + "game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 4, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player dealt damage", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtDamage.ts", + "indent": 0 + } + ] + }, + "340": { + "contexts": [ + "The PLAYER TOOK DAMAGE event attribute will", + "affect the specified players who received", + "damage in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 5, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player took damage", + "orderNumber": 0, + "path": "/interface/event/child/playerTookDamage.ts", + "indent": 0 + } + ] + }, + "341": { + "contexts": [ + "The PLAYER DIED event attribute will affect", + "the specified players who died in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 6, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player Died", + "orderNumber": 0, + "path": "/interface/event/child/playerDied.ts", + "indent": 0 + } + ] + }, + "342": { + "contexts": [ + "The absolute value is a measure of how far", + "the number is from zero. If you think of", + "a number line, with zero in the center,", + "all youโ€™re really doing is asking how far", + "away you are from this zero point. For example", + "the Absolute Value of 4 is 4 and the absolute", + "value of -6 is 6." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 0, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Absolute Value", + "orderNumber": 0, + "path": "/interface/value/child/absoluteValue.ts", + "indent": 0 + } + ] + }, + "343": { + "contexts": [ + "The sum of two numbers or vectors. This", + "value will add the two specified values." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 1, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Add", + "orderNumber": 0, + "path": "/interface/value/child/add.ts", + "indent": 0 + } + ] + }, + "344": { + "contexts": [ + "An array containing all dead players on", + "a team in a match. A player is defined as", + "being dead when they are eliminated but", + "have not yet respawned back into the game." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 2, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Dead Players", + "orderNumber": 0, + "path": "/interface/value/child/allDeadPlayers.ts", + "indent": 0 + } + ] + }, + "345": { + "contexts": [ + "An array of all heroes in Overwatch. Not", + "to be confused with the All Players array" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 3, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Heroes", + "orderNumber": 0, + "path": "/interface/value/child/allHeroes.ts", + "indent": 0 + } + ] + }, + "346": { + "contexts": [ + "An array containing all living players on", + "a team in a match. A player is defined as", + "being alive when they are spawned into the", + "game but have not yet been eliminated since spawning." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 4, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Living Players", + "orderNumber": 0, + "path": "/interface/value/child/allLivingPlayers.ts", + "indent": 0 + } + ] + }, + "347": { + "contexts": [ + "An array containing all players on a team in a match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 5, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players", + "orderNumber": 0, + "path": "/interface/value/child/allPlayers.ts", + "indent": 0 + } + ] + }, + "348": { + "contexts": [ + "An array containing all players occupying", + "neither a payload nor a control point (either", + "on a team or in a match)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 6, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players Not On Objective", + "orderNumber": 0, + "path": "/interface/value/child/allPlayersNotOnObjective.ts", + "indent": 0 + } + ] + }, + "349": { + "contexts": [ + "An array containing all players occupying", + "either a payload or a control point (either", + "on a team or in a match)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 7, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players On Objective", + "orderNumber": 0, + "path": "/interface/value/child/allPlayersOnObjective.ts", + "indent": 0 + } + ] + }, + "350": { + "contexts": [ + "The array of heroes from which the specified", + "player is currently allowed to select." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 8, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Allowed Heroes", + "orderNumber": 0, + "path": "/interface/value/child/allowedHeroes.ts", + "indent": 0 + } + ] + }, + "351": { + "contexts": [ + "The playerโ€™s current height in meters above", + "a surface. Results in a 0 whenever the place", + "is on a surface." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 9, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Altitude Of", + "orderNumber": 0, + "path": "/interface/value/child/altitudeOf.ts", + "indent": 0 + } + ] + }, + "352": { + "contexts": [ + "Whether both of the two inputs are true", + "or equivalent to true." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 10, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "And", + "orderNumber": 0, + "path": "/interface/value/child/and.ts", + "indent": 0 + } + ] + }, + "353": { + "contexts": [ + "The angle in degrees between two directional", + "vectors (no normalization required)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 11, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Angle Between Vectors", + "orderNumber": 0, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 0 + } + ] + }, + "354": { + "contexts": [ + "The difference between two angles, after", + "the angles are wrapped within +/- 180 of", + "each other, the result is positive if the", + "second angle is greater than the first angle,", + "otherwise the result is zero or negative." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 12, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Angle Difference", + "orderNumber": 0, + "path": "/interface/value/child/angleDifference.ts", + "indent": 0 + } + ] + }, + "355": { + "contexts": [ + "A copy of an array with one or more values", + "appended to the end." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 13, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Append To Array", + "orderNumber": 0, + "path": "/interface/value/child/appendToArray.ts", + "indent": 0 + } + ] + }, + "356": { + "contexts": [ + "Arccosine in degrees of the specified value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 14, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arccosineInDegrees.ts", + "indent": 0 + } + ] + }, + "357": { + "contexts": [ + "Arccosine in radians of the specified value" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 15, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arccosineInRadians.ts", + "indent": 0 + } + ] + }, + "358": { + "contexts": [ + "Arcsine in degrees of the specified value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 16, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arcsineInDegrees.ts", + "indent": 0 + } + ] + }, + "359": { + "contexts": [ + "Arcsine in radians of the specified value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 17, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arcsineInRadians.ts", + "indent": 0 + } + ] + }, + "360": { + "contexts": [ + "Arctangent in degrees of the specified numerator", + "and denominator(often referred to as atan2)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 18, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 0 + } + ] + }, + "361": { + "contexts": [ + "Arctangent in radians of the specified numerator", + "and denominator(often referred to as atan2)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 19, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 0 + } + ] + }, + "362": { + "contexts": [ + "Whether the specified array contains the", + "specified value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 20, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Array Contains", + "orderNumber": 0, + "path": "/interface/value/child/arrayContains.ts", + "indent": 0 + } + ] + }, + "363": { + "contexts": [ + "A copy of the specified array containing", + "only values from a specified index range." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 21, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Array Slice", + "orderNumber": 0, + "path": "/interface/value/child/arraySlice.ts", + "indent": 0 + } + ] + }, + "364": { + "contexts": [ + "The player that dealt damage for the event", + "currently being processed by this rule.", + "May be the same as the victim or the event player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 22, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Attacker", + "orderNumber": 0, + "path": "/interface/value/child/attacker.ts", + "indent": 0 + } + ] + }, + "365": { + "contexts": [ + "Shorthand for the direction vector(0, 0,", + "-1) which points backwards." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 23, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Backward", + "orderNumber": 0, + "path": "/interface/value/child/backward.ts", + "indent": 0 + } + ] + }, + "366": { + "contexts": [ + "The player closest to a position, optionally", + "restricted by team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 24, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Closest Player To", + "orderNumber": 0, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 0 + } + ] + }, + "367": { + "contexts": [ + "Whether the comparison of the two inputs is true." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 25, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Compare", + "orderNumber": 0, + "path": "/interface/value/child/compare.ts", + "indent": 0 + } + ] + }, + "368": { + "contexts": [ + "The score percentage for the specified team", + "in the control mode." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 26, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Control Mode Scoring Percentage", + "orderNumber": 0, + "path": "/interface/value/child/controlModeScoringPercentage.ts", + "indent": 0 + } + ] + }, + "369": { + "contexts": [ + "The team that is currently accumulating", + "score percentage in control mode Results", + "in all if neither team is accumulating score." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 27, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Control Mode Scoring Team", + "orderNumber": 0, + "path": "/interface/value/child/controlModeScoringTeam.ts", + "indent": 0 + } + ] + }, + "370": { + "contexts": [ + "The cosine of a specified angle in degrees.", + "The cosine of the angle is equal to the", + "length of the adjacent side divided by the", + "length of the hypotenuse." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 28, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cosine From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/cosineFromDegrees.ts", + "indent": 0 + } + ] + }, + "371": { + "contexts": [ + "The cosine of a specified angle in radians.", + "The cosine of the angle is equal to the", + "length of the adjacent side divided by the", + "length of the hypotenuse. A radian is a", + "unit of angle, equal to an angle at the", + "center of a circle whose arc is equal in", + "length to the radius." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 29, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cosine From Radians", + "orderNumber": 0, + "path": "/interface/value/child/cosineFromRadians.ts", + "indent": 0 + } + ] + }, + "372": { + "contexts": [ + "The number of elements in the specified array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 30, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Count Of", + "orderNumber": 0, + "path": "/interface/value/child/countOf.ts", + "indent": 0 + } + ] + }, + "373": { + "contexts": [ + "The cross product of the specified values." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 31, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cross Product", + "orderNumber": 0, + "path": "/interface/value/child/crossProduct.ts", + "indent": 0 + } + ] + }, + "374": { + "contexts": [ + "The current array element being considered.", + "Only meaningful during the evaluation of", + "values such as filtered array and sorted array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 32, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Current Array Element", + "orderNumber": 0, + "path": "/interface/value/child/currentArrayElement.ts", + "indent": 0 + } + ] + }, + "375": { + "contexts": [ + "The unit-length direction vector corresponding", + "to the specified angles." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 33, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Direction From Angles", + "orderNumber": 0, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 0 + } + ] + }, + "376": { + "contexts": [ + "The unit-length direction vector from position to another." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 34, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Direction Towards", + "orderNumber": 0, + "path": "/interface/value/child/directionTowards.ts", + "indent": 0 + } + ] + }, + "377": { + "contexts": [ + "The distance between two positions in meters." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 35, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Distance Between", + "orderNumber": 0, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 0 + } + ] + }, + "378": { + "contexts": [ + "The ratio of two numbers or vectors. A vector", + "divided by a number will yield a scaled", + "vector. Division by zero results in zero." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 36, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Divide", + "orderNumber": 0, + "path": "/interface/value/child/divide.ts", + "indent": 0 + } + ] + }, + "379": { + "contexts": [ + "The dot product of the specified values.", + "The dot product tells you what amount of", + "one vector goes in the direction of another." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 37, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Dot Product", + "orderNumber": 0, + "path": "/interface/value/child/dotProduct.ts", + "indent": 0 + } + ] + }, + "380": { + "contexts": [ + "Shorthand for the direction vector(0, -1,", + "0) which points down." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 38, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Down", + "orderNumber": 0, + "path": "/interface/value/child/down.ts", + "indent": 0 + } + ] + }, + "381": { + "contexts": [ + "An array with no elements." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 39, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Empty Array", + "orderNumber": 0, + "path": "/interface/value/child/emptyArray.ts", + "indent": 0 + } + ] + }, + "382": { + "contexts": [ + "Whether the specified player, icon entity,", + "or effect entity still exists. Useful for", + "determining if a player has left the match", + "or an entity has been destroyed." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 40, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Entity Exists", + "orderNumber": 0, + "path": "/interface/value/child/entityExists.ts", + "indent": 0 + } + ] + }, + "383": { + "contexts": [ + "The amount of damage received by the victim", + "for the event currently being processed by this rule." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 41, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Damage", + "orderNumber": 0, + "path": "/interface/value/child/eventDamage.ts", + "indent": 0 + } + ] + }, + "384": { + "contexts": [ + "The player executing the rule, as specified", + "by the event, may be the same as the attacker or victim." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 42, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Player", + "orderNumber": 0, + "path": "/interface/value/child/eventPlayer.ts", + "indent": 0 + } + ] + }, + "385": { + "contexts": [ + "Whether the damage was a critical hit (such", + "as a headshot) for the event currently being", + "processed by this rule." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 43, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Was Critical Hit", + "orderNumber": 0, + "path": "/interface/value/child/eventWasCriticalHit.ts", + "indent": 0 + } + ] + }, + "386": { + "contexts": [ + "The position of a player's first person", + "view (used for aiming)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 44, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Eye Position", + "orderNumber": 0, + "path": "/interface/value/child/eyePosition.ts", + "indent": 0 + } + ] + }, + "387": { + "contexts": [ + "The unit-length directional vector of a", + "playerโ€™s current facing relative to the", + "world. This value includes both horizontal", + "and vertical facing." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 45, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Facing Direction Of", + "orderNumber": 0, + "path": "/interface/value/child/facingDirectionOf.ts", + "indent": 0 + } + ] + }, + "388": { + "contexts": [ + "The Boolean value of false." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 46, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "False", + "orderNumber": 0, + "path": "/interface/value/child/false.ts", + "indent": 0 + } + ] + }, + "389": { + "contexts": [ + "The player farthest to a position, optionally", + "restricted by team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 47, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Farthest Player From", + "orderNumber": 0, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 0 + } + ] + }, + "390": { + "contexts": [ + "A copy of the specified array with any values", + "that do not match the specified condition removed." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 48, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Filtered Array", + "orderNumber": 0, + "path": "/interface/value/child/filteredArray.ts", + "indent": 0 + } + ] + }, + "391": { + "contexts": [ + "The value at the started of the specified", + "array. Results in a 0 if the specified array is empty." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 49, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "First Of", + "orderNumber": 0, + "path": "/interface/value/child/firstOf.ts", + "indent": 0 + } + ] + }, + "392": { + "contexts": [ + "The position of a specific teamโ€™s flag in", + "Capture the Flag." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 50, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Flag Position", + "orderNumber": 0, + "path": "/interface/value/child/flagPosition.ts", + "indent": 0 + } + ] + }, + "393": { + "contexts": [ + "Shorthand for the direction vector(0, 0,", + "1) which points forward." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 51, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Forward", + "orderNumber": 0, + "path": "/interface/value/child/forward.ts", + "indent": 0 + } + ] + }, + "394": { + "contexts": [ + "The current value of a global variable,", + "which is a variable which belongs to the", + "custom game itself." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 52, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Global Variable", + "orderNumber": 0, + "path": "/interface/value/child/globalVariable.ts", + "indent": 0 + } + ] + }, + "395": { + "contexts": [ + "Whether an entity has spawned in the world.", + "Results in false for players who have not", + "chosen a hero yet." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 53, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Has Spawned", + "orderNumber": 0, + "path": "/interface/value/child/hasSpawned.ts", + "indent": 0 + } + ] + }, + "396": { + "contexts": [ + "Whether the specified player has the specified", + "status, either from the set status action", + "or from a non-scripted game mechanic." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 54, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Has Status", + "orderNumber": 0, + "path": "/interface/value/child/hasStatus.ts", + "indent": 0 + } + ] + }, + "397": { + "contexts": [ + "The current health of a player including", + "armor and shields." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 55, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Health", + "orderNumber": 0, + "path": "/interface/value/child/health.ts", + "indent": 0 + } + ] + }, + "398": { + "contexts": [ + "A hero constant. Specifies one of the available", + "heroes by name in the game." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 56, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero", + "orderNumber": 0, + "path": "/interface/value/child/hero.ts", + "indent": 0 + } + ] + }, + "399": { + "contexts": [ + "Converts a hero parameter into a string", + "that shows up as an icon." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 57, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero Icon String", + "orderNumber": 0, + "path": "/interface/value/child/heroIconString.ts", + "indent": 0 + } + ] + }, + "400": { + "contexts": [ + "The Current Hero of a Player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 58, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero Of", + "orderNumber": 0, + "path": "/interface/value/child/heroOf.ts", + "indent": 0 + } + ] + }, + "401": { + "contexts": [ + "The horizontal angle in degrees corresponding", + "to the specified direction vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 59, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Angle From Direction", + "orderNumber": 0, + "path": "/interface/value/child/horizontalAngleFromDirection.ts", + "indent": 0 + } + ] + }, + "402": { + "contexts": [ + "The horizontal angle in degrees from a playerโ€™s", + "current forward direction to the specified", + "position. The result is positive if the", + "position is on the playerโ€™s left, otherwise", + "the result is zero or negative." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 60, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Angle Towards", + "orderNumber": 0, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 0 + } + ] + }, + "403": { + "contexts": [ + "The directional angle in degrees of a playerโ€™s", + "current facing relative to the world. This", + "value increases as the player rotates to", + "the left (wrapping around at +/- 180)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 61, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Facing Angle Of", + "orderNumber": 0, + "path": "/interface/value/child/horizontalFacingAngleOf.ts", + "indent": 0 + } + ] + }, + "404": { + "contexts": [ + "The current horizontal speed of a player", + "in meters per second. This measurement excludes", + "all vertical motion." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 62, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/horizontalSpeedOf.ts", + "indent": 0 + } + ] + }, + "405": { + "contexts": [ + "The index of a value within an array or", + "-1 if no such value can be found." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 63, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 0, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 0 + } + ] + }, + "406": { + "contexts": [ + "Determines whether a player is alive. Returns", + "a Boolean value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 64, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Alive", + "orderNumber": 0, + "path": "/interface/value/child/isAlive.ts", + "indent": 0 + } + ] + }, + "407": { + "contexts": [ + "Whether the match is currently in its assemble heroes phase." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 65, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Assembling Heroes", + "orderNumber": 0, + "path": "/interface/value/child/isAssemblingHeroes.ts", + "indent": 0 + } + ] + }, + "408": { + "contexts": [ + "Whether the match is between rounds." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 66, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Between Rounds", + "orderNumber": 0, + "path": "/interface/value/child/isBetweenRounds.ts", + "indent": 0 + } + ] + }, + "409": { + "contexts": [ + "Whether a player is holding a specific button." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 67, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Button Held", + "orderNumber": 0, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 0 + } + ] + }, + "410": { + "contexts": [ + "Whether a player is using a specific communication", + "type (such as emote, using a voice line, etc.)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 68, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 0 + } + ] + }, + "411": { + "contexts": [ + "Whether a player is using any communication", + "type (such as emoting, using a voice line, etc.)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 69, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAny.ts", + "indent": 0 + } + ] + }, + "412": { + "contexts": [ + "Whether a player is using a emote." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 70, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any Emote", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAnyEmote.ts", + "indent": 0 + } + ] + }, + "413": { + "contexts": [ + "Whether a player is using a voice line.", + "(The duration of a voice line is assumed", + "to be 4 seconds.)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 71, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any Voice Line", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAnyVoiceLine.ts", + "indent": 0 + } + ] + }, + "414": { + "contexts": [ + "Whether the point is locked in control mode." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 72, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Control Mode Point Locked", + "orderNumber": 0, + "path": "/interface/value/child/isControlModePointLocked.ts", + "indent": 0 + } + ] + }, + "415": { + "contexts": [ + "Whether a player is crouching." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 73, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Crouching", + "orderNumber": 0, + "path": "/interface/value/child/isCrouching.ts", + "indent": 0 + } + ] + }, + "416": { + "contexts": [ + "Whether the current game of capture the", + "flag is in sudden death." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 74, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is CTF Mode In Sudden Death", + "orderNumber": 0, + "path": "/interface/value/child/isCTFModeInSuddenDeath.ts", + "indent": 0 + } + ] + }, + "417": { + "contexts": [ + "Whether a player is dead." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 75, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Dead", + "orderNumber": 0, + "path": "/interface/value/child/isDead.ts", + "indent": 0 + } + ] + }, + "418": { + "contexts": [ + "Whether the specified playerโ€™s primary weapon", + "attack is being used." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 76, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Firing Primary", + "orderNumber": 0, + "path": "/interface/value/child/isFiringPrimary.ts", + "indent": 0 + } + ] + }, + "419": { + "contexts": [ + "Whether the specified playerโ€™s secondary", + "weapon attack is being used." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 77, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Firing Secondary", + "orderNumber": 0, + "path": "/interface/value/child/isFiringSecondary.ts", + "indent": 0 + } + ] + }, + "420": { + "contexts": [ + "Whether a specific teamโ€™s flag is at its", + "base in capture the flag." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 78, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Flag At Base", + "orderNumber": 0, + "path": "/interface/value/child/isFlagAtBase.ts", + "indent": 0 + } + ] + }, + "421": { + "contexts": [ + "Whether a specific team's flag is being", + "is being carried by a member of the opposing", + "team in capture the flag." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 79, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Flag Being Carried", + "orderNumber": 0, + "path": "/interface/value/child/isFlagBeingCarried.ts", + "indent": 0 + } + ] + }, + "422": { + "contexts": [ + "Whether the main phase of the match is in", + "progress (during which time combat and scoring are allowed)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 80, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Game In Progress", + "orderNumber": 0, + "path": "/interface/value/child/isGameInProgress.ts", + "indent": 0 + } + ] + }, + "423": { + "contexts": [ + "Whether a specific hero is being played", + "(either on a team or in the match)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 81, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Hero Being Played", + "orderNumber": 0, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 0 + } + ] + }, + "424": { + "contexts": [ + "Whether a player is airborne." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 82, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Air", + "orderNumber": 0, + "path": "/interface/value/child/isInAir.ts", + "indent": 0 + } + ] + }, + "425": { + "contexts": [ + "Whether two positions have line of sight", + "with each other." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 83, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Line Of Sight", + "orderNumber": 0, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 0 + } + ] + }, + "426": { + "contexts": [ + "Whether the match is currently in its setup phase." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 84, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Setup", + "orderNumber": 0, + "path": "/interface/value/child/isInSetup.ts", + "indent": 0 + } + ] + }, + "427": { + "contexts": [ + "Whether a specific player is in the spawn", + "room (and is thus being healed and able", + "to change heroes)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 85, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Spawn Room", + "orderNumber": 0, + "path": "/interface/value/child/isInSpawnRoom.ts", + "indent": 0 + } + ] + }, + "428": { + "contexts": [ + "Whether a location is within view of a player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 86, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In View Angle", + "orderNumber": 0, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 0 + } + ] + }, + "429": { + "contexts": [ + "Whether the match has finished." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 87, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Match Complete", + "orderNumber": 0, + "path": "/interface/value/child/isMatchComplete.ts", + "indent": 0 + } + ] + }, + "430": { + "contexts": [ + "Whether a specific player is moving (as", + "defined by having a non-zero constant speed)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 88, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Moving", + "orderNumber": 0, + "path": "/interface/value/child/isMoving.ts", + "indent": 0 + } + ] + }, + "431": { + "contexts": [ + "Whether the specified objective has been", + "completed Results in false if the game mode", + "is not assault, escort, or assault/escort (hybrid)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 89, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Objective Complete", + "orderNumber": 0, + "path": "/interface/value/child/isObjectiveComplete.ts", + "indent": 0 + } + ] + }, + "432": { + "contexts": [ + "Whether a player is on the ground (or other", + "walkable surface)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 90, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Ground", + "orderNumber": 0, + "path": "/interface/value/child/isOnGround.ts", + "indent": 0 + } + ] + }, + "433": { + "contexts": [ + "Whether a specific player is currently occupying", + "a payload or capture point." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 91, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Objective", + "orderNumber": 0, + "path": "/interface/value/child/isOnObjective.ts", + "indent": 0 + } + ] + }, + "434": { + "contexts": [ + "Whether a player is on a wall (climbing or riding)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 92, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Wall", + "orderNumber": 0, + "path": "/interface/value/child/isOnWall.ts", + "indent": 0 + } + ] + }, + "435": { + "contexts": [ + "Whether a specific playerโ€™s portrait is on fire." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 93, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Portrait On Fire", + "orderNumber": 0, + "path": "/interface/value/child/isPortraitOnFire.ts", + "indent": 0 + } + ] + }, + "436": { + "contexts": [ + "Whether a player is standing (defined as", + "both not moving and not in the air)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 94, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Standing", + "orderNumber": 0, + "path": "/interface/value/child/isStanding.ts", + "indent": 0 + } + ] + }, + "437": { + "contexts": [ + "Whether the specified team is currently", + "on defense in a standard match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 95, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Team On Defense", + "orderNumber": 0, + "path": "/interface/value/child/isTeamOnDefense.ts", + "indent": 0 + } + ] + }, + "438": { + "contexts": [ + "Whether the specified team is currently", + "on offense in a standard match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 96, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Team On Offense", + "orderNumber": 0, + "path": "/interface/value/child/isTeamOnOffense.ts", + "indent": 0 + } + ] + }, + "439": { + "contexts": [ + "Whether the specified condition evaluates", + "to true for every value in the specified array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 97, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is True For All", + "orderNumber": 0, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 0 + } + ] + }, + "440": { + "contexts": [ + "Whether the specified condition evaluates", + "to true for any value in the specified array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 98, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 0, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 0 + } + ] + }, + "441": { + "contexts": [ + "Whether the specified player is using ability 1." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 99, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ability 1", + "orderNumber": 0, + "path": "/interface/value/child/isUsingAbility1.ts", + "indent": 0 + } + ] + }, + "442": { + "contexts": [ + "Whether the specified player is using ability 2." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 100, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ability 2", + "orderNumber": 0, + "path": "/interface/value/child/isUsingAbility2.ts", + "indent": 0 + } + ] + }, + "443": { + "contexts": [ + "Whether the specified player is using an", + "ultimate ability." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 101, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ultimate", + "orderNumber": 0, + "path": "/interface/value/child/isUsingUltimate.ts", + "indent": 0 + } + ] + }, + "444": { + "contexts": [ + "Whether the match is waiting for players", + "to join before starting." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 102, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Waiting For Players", + "orderNumber": 0, + "path": "/interface/value/child/isWaitingForPlayers.ts", + "indent": 0 + } + ] + }, + "445": { + "contexts": [ + "A reference to the last effect or icon entity", + "created by the event player (or created", + "at the global level)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 103, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Created Entity", + "orderNumber": 0, + "path": "/interface/value/child/lastCreatedEntity.ts", + "indent": 0 + } + ] + }, + "446": { + "contexts": [ + "An id representing the most recent start", + "damage modification action that was executed", + "by the event player (or executed at the global level)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 104, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Damage Modification Id", + "orderNumber": 0, + "path": "/interface/value/child/lastDamageModificationId.ts", + "indent": 0 + } + ] + }, + "447": { + "contexts": [ + "An ID representing the most recent damage", + "over time action that was executed by the", + "event player (or executed at the global level)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 105, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Damage Over Time Id", + "orderNumber": 0, + "path": "/interface/value/child/lastDamageOverTimeId.ts", + "indent": 0 + } + ] + }, + "448": { + "contexts": [ + "An ID representing the most recent heal", + "over time action that was executed by the", + "event player (or executed at the global level)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 106, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Heal Over Time Id", + "orderNumber": 0, + "path": "/interface/value/child/lastHealOverTimeId.ts", + "indent": 0 + } + ] + }, + "449": { + "contexts": [ + "The value at the end of the specified array.", + "Results in a 0 if the specified array is empty." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 107, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Of", + "orderNumber": 0, + "path": "/interface/value/child/lastOf.ts", + "indent": 0 + } + ] + }, + "450": { + "contexts": [ + "A reference to the last piece of text created", + "by the event player (or created at the global", + "level) via the create HUD text or create", + "in-world text action." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 108, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Text Id", + "orderNumber": 0, + "path": "/interface/value/child/lastTextId.ts", + "indent": 0 + } + ] + }, + "451": { + "contexts": [ + "Shorthand for the directional vector(1,", + "0, 0), which points to the left." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 109, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Left", + "orderNumber": 0, + "path": "/interface/value/child/left.ts", + "indent": 0 + } + ] + }, + "452": { + "contexts": [ + "The vector in local coordinates corresponding", + "to the provided vector in world coordinates." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 110, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Local Vector Of", + "orderNumber": 0, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 0 + } + ] + }, + "453": { + "contexts": [ + "The current round of the match, counting", + "up from 1. This will return a numerical value" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 111, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Match Round", + "orderNumber": 0, + "path": "/interface/value/child/matchRound.ts", + "indent": 0 + } + ] + }, + "454": { + "contexts": [ + "The amount of time in seconds remaining", + "in the current game mode phase. This will", + "return a numerical value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 112, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Match Time", + "orderNumber": 0, + "path": "/interface/value/child/matchTime.ts", + "indent": 0 + } + ] + }, + "455": { + "contexts": [ + "The greater of the two numbers. This will", + "return a numerical value of two number values compared." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 113, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Max", + "orderNumber": 0, + "path": "/interface/value/child/max.ts", + "indent": 0 + } + ] + }, + "456": { + "contexts": [ + "The max health of a player, including armor and shields." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 114, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Max Health", + "orderNumber": 0, + "path": "/interface/value/child/maxHealth.ts", + "indent": 0 + } + ] + }, + "457": { + "contexts": [ + "The lesser of the two numbers. This will", + "return a numerical value of two number values compared." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 115, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Min", + "orderNumber": 0, + "path": "/interface/value/child/min.ts", + "indent": 0 + } + ] + }, + "458": { + "contexts": [ + "The remainder of the left-hand operand divided", + "by the right-hand operand. Any number modulo", + "zero will result in zero. This will return", + "a numerical value of two number values compared.", + "For example 7 divided by 2 will result in", + "1 for the Modulo." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 116, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Modulo", + "orderNumber": 0, + "path": "/interface/value/child/modulo.ts", + "indent": 0 + } + ] + }, + "459": { + "contexts": [ + "The product of two numbers or vectors. A", + "vector multiplied by a number will yield", + "a scaled vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 117, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 0, + "path": "/interface/value/child/multiply.ts", + "indent": 0 + } + ] + }, + "460": { + "contexts": [ + "The position closest to the specified position", + "that can be stood on and is accessible from a spawn point." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 118, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Nearest Walkable Position", + "orderNumber": 0, + "path": "/interface/value/child/nearestWalkablePosition.ts", + "indent": 0 + } + ] + }, + "461": { + "contexts": [ + "The unit-length normalization of a vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 119, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Normalize", + "orderNumber": 0, + "path": "/interface/value/child/normalize.ts", + "indent": 0 + } + ] + }, + "462": { + "contexts": [ + "The current health of a player. including", + "armor and shields, normalized between 0", + "and 1. (for example, 0 is no health, 0.5", + "is half health, 1 is full health, etc.)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 120, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Normalized Health", + "orderNumber": 0, + "path": "/interface/value/child/normalizedHealth.ts", + "indent": 0 + } + ] + }, + "463": { + "contexts": [ + "Whether the input is false (or the equivalent to false)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 121, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Not", + "orderNumber": 0, + "path": "/interface/value/child/not.ts", + "indent": 0 + } + ] + }, + "464": { + "contexts": [ + "The absence of a player, used when no player", + "is desired for a particular input, equivalent", + "to the real number 0 for the purposes of", + "comparison and debugging." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 122, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Null", + "orderNumber": 0, + "path": "/interface/value/child/null.ts", + "indent": 0 + } + ] + }, + "465": { + "contexts": [ + "Number - A real number constant. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 123, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number", + "orderNumber": 0, + "path": "/interface/value/child/number.ts", + "indent": 0 + }, + { + "topName": "Number", + "orderNumber": 1, + "path": "/interface/value/child/number.ts", + "indent": 4 + } + ] + }, + "466": { + "contexts": [ + "The number of dead players on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 124, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Dead Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfDeadPlayers.ts", + "indent": 0 + } + ] + }, + "467": { + "contexts": [ + "The number of deaths a specific player has", + "earned. This value only accumulates while", + "a game is in progress." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 125, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Deaths", + "orderNumber": 0, + "path": "/interface/value/child/numberOfDeaths.ts", + "indent": 0 + } + ] + }, + "468": { + "contexts": [ + "The number of eliminations a specific player", + "has earned. This value only accumulates", + "while a game is in progress." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 126, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Eliminations", + "orderNumber": 0, + "path": "/interface/value/child/numberOfEliminations.ts", + "indent": 0 + } + ] + }, + "469": { + "contexts": [ + "The number of final blows a specific player", + "has earned. This value only accumulates", + "while a game is in progress." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 127, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Final Blows", + "orderNumber": 0, + "path": "/interface/value/child/numberOfFinalBlows.ts", + "indent": 0 + } + ] + }, + "470": { + "contexts": [ + "The number of players playing a specific", + "hero on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 128, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 0, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 0 + } + ] + }, + "471": { + "contexts": [ + "The number of living players on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 129, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Living Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfLivingPlayers.ts", + "indent": 0 + } + ] + }, + "472": { + "contexts": [ + "The number of players on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 130, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfPlayers.ts", + "indent": 0 + } + ] + }, + "473": { + "contexts": [ + "The number of players occupying a payload", + "or a control point (either on a team or in the match)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 131, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Players On Objective", + "orderNumber": 0, + "path": "/interface/value/child/numberOfPlayersOnObjective.ts", + "indent": 0 + } + ] + }, + "474": { + "contexts": [ + "The control point, payload checkpoint, or", + "payload destination currently active (either", + "0, 1, or 2). Valid in Assault, Assault/Escort", + "(Hybrid), Escort, and Control." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 132, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Objective Index", + "orderNumber": 0, + "path": "/interface/value/child/objectiveIndex.ts", + "indent": 0 + } + ] + }, + "475": { + "contexts": [ + "The position in the world of the specified", + "objective (either a control point, a payload", + "checkpoint, or a payload destination) Valid", + "in Assault, Assault/Escort (Hybrid), Escort, and Control." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 133, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Objective Position", + "orderNumber": 0, + "path": "/interface/value/child/objectivePosition.ts", + "indent": 0 + } + ] + }, + "476": { + "contexts": [ + "The team opposite the specified team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 134, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Opposite Team Of", + "orderNumber": 0, + "path": "/interface/value/child/oppositeTeamOf.ts", + "indent": 0 + } + ] + }, + "477": { + "contexts": [ + "Whether either of the two inputs are true", + "(or equivalent to true)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 135, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Or", + "orderNumber": 0, + "path": "/interface/value/child/or.ts", + "indent": 0 + } + ] + }, + "478": { + "contexts": [ + "The position in the world of the active payload." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 136, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Payload Position", + "orderNumber": 0, + "path": "/interface/value/child/payloadPosition.ts", + "indent": 0 + } + ] + }, + "479": { + "contexts": [ + "The current progress towards the destination", + "for the active payload (expressed as a percentage)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 137, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Payload Progress Percentage", + "orderNumber": 0, + "path": "/interface/value/child/payloadProgressPercentage.ts", + "indent": 0 + } + ] + }, + "480": { + "contexts": [ + "The player carrying a particular teamโ€™s", + "flag in capture the flag. Results in null", + "if no player is carrying the flag." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 138, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Carrying Flag", + "orderNumber": 0, + "path": "/interface/value/child/playerCarryingFlag.ts", + "indent": 0 + } + ] + }, + "481": { + "contexts": [ + "The player closest to the reticle of the", + "specified player, optionally restricted by team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 139, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Closest To Reticle", + "orderNumber": 0, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 0 + } + ] + }, + "482": { + "contexts": [ + "The current value of a player variable,", + "which is a variable that belongs to a specific player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 140, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Variable", + "orderNumber": 0, + "path": "/interface/value/child/playerVariable.ts", + "indent": 0 + } + ] + }, + "483": { + "contexts": [ + "The player or array of players who occupy", + "a specific slot in the game." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 141, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players In Slot", + "orderNumber": 0, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 0 + } + ] + }, + "484": { + "contexts": [ + "The players who are within a specific view", + "angle of a specific playerโ€™s reticle, optionally", + "restricted by team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 142, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 0, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 0 + } + ] + }, + "485": { + "contexts": [ + "The array of players playing a specific", + "hero on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 143, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 0, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 0 + } + ] + }, + "486": { + "contexts": [ + "An array containing all players within a", + "certain distance of a position, optionally", + "restricted by team and line of sight." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 144, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players Within Radius", + "orderNumber": 0, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 0 + } + ] + }, + "487": { + "contexts": [ + "The current progress towards capture for", + "the active control point (expressed as a percentage)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 145, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Point Capture Percentage", + "orderNumber": 0, + "path": "/interface/value/child/pointCapturePercentage.ts", + "indent": 0 + } + ] + }, + "488": { + "contexts": [ + "The current position of a player as a vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 146, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Position Of", + "orderNumber": 0, + "path": "/interface/value/child/positionOf.ts", + "indent": 0 + } + ] + }, + "489": { + "contexts": [ + "The left-hand operand raised to the power", + "of the right-hand operand. For example 2 ^ 3 = 8" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 147, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 0, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 0 + } + ] + }, + "490": { + "contexts": [ + "A random integer between the specified min", + "and max, inclusive." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 148, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Integer", + "orderNumber": 0, + "path": "/interface/value/child/randomInteger.ts", + "indent": 0 + } + ] + }, + "491": { + "contexts": [ + "A random real number between the specified min and max." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 149, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Real", + "orderNumber": 0, + "path": "/interface/value/child/randomReal.ts", + "indent": 0 + } + ] + }, + "492": { + "contexts": [ + "A random value from the specified array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 150, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Value In Array", + "orderNumber": 0, + "path": "/interface/value/child/randomValueInArray.ts", + "indent": 0 + } + ] + }, + "493": { + "contexts": [ + "A copy of the specified array with the values", + "in a random order" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 151, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Randomized Array", + "orderNumber": 0, + "path": "/interface/value/child/randomizedArray.ts", + "indent": 0 + } + ] + }, + "494": { + "contexts": [ + "The surface normal at the ray cast hit position", + "(or from end pos to start pos if no hit occurs)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 152, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 0 + } + ] + }, + "495": { + "contexts": [ + "The player hit by the ray cast (or null", + "if no player is hit)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 153, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 0 + } + ] + }, + "496": { + "contexts": [ + "The position where the ray cast hits a surface,", + "object, or player (or the end POS if no hit occurs)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 154, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 0 + } + ] + }, + "497": { + "contexts": [ + "A copy of an array with one or more values", + "removed (if found)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 155, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Remove From Array", + "orderNumber": 0, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 0 + } + ] + }, + "498": { + "contexts": [ + "Shorthand for the directional vector (-1,", + "0, 0), which points to the right." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 156, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Right", + "orderNumber": 0, + "path": "/interface/value/child/right.ts", + "indent": 0 + } + ] + }, + "499": { + "contexts": [ + "The integer to which the specified value rounds." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 157, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Round To Integer", + "orderNumber": 0, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 0 + } + ] + }, + "500": { + "contexts": [ + "The current score of a player. Results in", + "0 if the game mode is not free-for-all." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 158, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Score Of", + "orderNumber": 0, + "path": "/interface/value/child/scoreOf.ts", + "indent": 0 + } + ] + }, + "501": { + "contexts": [ + "Provides a percentage representing the cpu", + "load of the current game instance. as this", + "number approaches or exceeds 100, It becomes", + "increasingly likely that the instance will", + "be shut down because it is consuming too many resources." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 159, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load", + "orderNumber": 0, + "path": "/interface/value/child/serverLoad.ts", + "indent": 0 + } + ] + }, + "502": { + "contexts": [ + "Provides a percentage representing the average", + "cpu load of the current game instance over", + "the last two seconds. as this number approaches", + "or exceeds 100, It becomes increasingly", + "likely that the instance will be shut down", + "because it is consuming too many resources." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 160, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load Average", + "orderNumber": 0, + "path": "/interface/value/child/serverLoadAverage.ts", + "indent": 0 + } + ] + }, + "503": { + "contexts": [ + "Provides a percentage representing the highest", + "cpu load of the current game instance over", + "the last two seconds. as this number approaches", + "or exceeds 100, It becomes increasingly", + "likely that the instance will be shut down", + "because it is consuming too many resources." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 161, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load Peak", + "orderNumber": 0, + "path": "/interface/value/child/serverLoadPeak.ts", + "indent": 0 + } + ] + }, + "504": { + "contexts": [ + "Sine of the specified angle in degrees.", + "The sine is the ratio of the length of the", + "side that is opposite that angle to the", + "length of the longest side of the triangle", + "(the hypotenuse)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 162, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sine From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/sineFromDegrees.ts", + "indent": 0 + } + ] + }, + "505": { + "contexts": [ + "Sine of the specified angle in radians.", + "The sine is the ratio of the length of the", + "side that is opposite that angle to the", + "length of the longest side of the triangle", + "(the hypotenuse). A radian is a unit of", + "angle, equal to an angle at the center of", + "a circle whose arc is equal in length to the radius." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 163, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sine From Radians", + "orderNumber": 0, + "path": "/interface/value/child/sineFromRadians.ts", + "indent": 0 + } + ] + }, + "506": { + "contexts": [ + "The slot number of the specified player.", + "In team games, each team has slots 0 through", + "5. In free-for-all games, slots are numbers 0 through 11." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 164, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Slot Of", + "orderNumber": 0, + "path": "/interface/value/child/slotOf.ts", + "indent": 0 + } + ] + }, + "507": { + "contexts": [ + "A copy of the specified array with the values", + "sorted according to the value rank that", + "is evaluated for each element." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 165, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sorted Array", + "orderNumber": 0, + "path": "/interface/value/child/sortedArray.ts", + "indent": 0 + } + ] + }, + "508": { + "contexts": [ + "The current speed of a player in meters per second." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 166, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/speedOf.ts", + "indent": 0 + } + ] + }, + "509": { + "contexts": [ + "The current speed of a player in a specific", + "direction in meters per second." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 167, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Speed Of In Direction", + "orderNumber": 0, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 0 + } + ] + }, + "510": { + "contexts": [ + "The square root of the specified value.", + "For example the square root of 9 is 3." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 168, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Square Root", + "orderNumber": 0, + "path": "/interface/value/child/squareRoot.ts", + "indent": 0 + } + ] + }, + "511": { + "contexts": [ + "Text formed from a selection of strings", + "and specified values." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 169, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "String", + "orderNumber": 0, + "path": "/interface/value/child/string.ts", + "indent": 0 + } + ] + }, + "512": { + "contexts": [ + "The difference between two numbers or vectors." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 170, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Subtract", + "orderNumber": 0, + "path": "/interface/value/child/subtract.ts", + "indent": 0 + } + ] + }, + "513": { + "contexts": [ + "Tangent of the specified angle in degrees." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 171, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Tangent From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/tangentFromDegrees.ts", + "indent": 0 + } + ] + }, + "514": { + "contexts": [ + "Tangent of the specified angle in radians." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 172, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Tangent From Radians", + "orderNumber": 0, + "path": "/interface/value/child/tangentFromRadians.ts", + "indent": 0 + } + ] + }, + "515": { + "contexts": [ + "A team constant. The all option represents", + "both teams in a team or all players in a", + "free-for-all game." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 173, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team", + "orderNumber": 0, + "path": "/interface/value/child/team.ts", + "indent": 0 + } + ] + }, + "516": { + "contexts": [ + "The team of a player. If the game mode is", + "free-for-all, the team is considered to be all." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 174, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team Of", + "orderNumber": 0, + "path": "/interface/value/child/teamOf.ts", + "indent": 0 + } + ] + }, + "517": { + "contexts": [ + "The current score for the specified team.", + "Results in a 0 in free-for-all game modes." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 175, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team Score", + "orderNumber": 0, + "path": "/interface/value/child/teamScore.ts", + "indent": 0 + } + ] + }, + "518": { + "contexts": [ + "The directional input of a player, represented", + "by a vector with a horizontal input on the", + "X component (positive to the left) and vertical", + "input on the Z component (positive upward)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 176, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Throttle Of", + "orderNumber": 0, + "path": "/interface/value/child/throttleOf.ts", + "indent": 0 + } + ] + }, + "519": { + "contexts": [ + "The total time seconds that have elapsed", + "since the game instance was created (including", + "setup time and transitions)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 177, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Total Time Elapsed", + "orderNumber": 0, + "path": "/interface/value/child/totalTimeElapsed.ts", + "indent": 0 + } + ] + }, + "520": { + "contexts": [ + "The Boolean value of true." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 178, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "True", + "orderNumber": 0, + "path": "/interface/value/child/true.ts", + "indent": 0 + } + ] + }, + "521": { + "contexts": [ + "The current ultimate ability charge percentage of a player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 179, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ultimate Charge Percent", + "orderNumber": 0, + "path": "/interface/value/child/ultimateChargePercent.ts", + "indent": 0 + } + ] + }, + "522": { + "contexts": [ + "Shorthand for the directional vector(0,", + "1, 0). Which points upward." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 180, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Up", + "orderNumber": 0, + "path": "/interface/value/child/up.ts", + "indent": 0 + } + ] + }, + "523": { + "contexts": [ + "The value found at a specific element of", + "an array. Results in a 0 if the element does not exist." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 181, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Value In Array", + "orderNumber": 0, + "path": "/interface/value/child/valueInArray.ts", + "indent": 0 + } + ] + }, + "524": { + "contexts": [ + "A vector composed of three real numbers", + "(X, Y, Z) where X is left, Y is Up, and", + "Z is forward. Vectors are used for position,", + "direction, and velocity." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 182, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vector", + "orderNumber": 0, + "path": "/interface/value/child/vector.ts", + "indent": 0 + } + ] + }, + "525": { + "contexts": [ + "The displacement vector from one position to another." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 183, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vector Towards", + "orderNumber": 0, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 0 + } + ] + }, + "526": { + "contexts": [ + "The current velocity of a player as a vector.", + "If the player is on a surface, the Y component", + "of this velocity will be 0m even when traveling", + "up or down a slope." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 184, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Velocity Of", + "orderNumber": 0, + "path": "/interface/value/child/velocityOf.ts", + "indent": 0 + } + ] + }, + "527": { + "contexts": [ + "The vertical angle in degrees corresponding", + "to the specified direction vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 185, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle From Direction", + "orderNumber": 0, + "path": "/interface/value/child/verticalAngleFromDirection.ts", + "indent": 0 + } + ] + }, + "528": { + "contexts": [ + "The vertical angle in degrees from a playerโ€™s", + "current forward direction to the specified", + "position. The result is positive if the", + "position is below the player. Otherwise,", + "the result is zero or negative." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 186, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle Towards", + "orderNumber": 0, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 0 + } + ] + }, + "529": { + "contexts": [ + "The vertical angle in degrees, of a playerโ€™s", + "current facing relative to the world. This", + "value increases as the player looks down." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 187, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Facing Angle Of", + "orderNumber": 0, + "path": "/interface/value/child/verticalFacingAngleOf.ts", + "indent": 0 + } + ] + }, + "530": { + "contexts": [ + "The current vertical speed of a player in", + "meters per second. This measurement excludes", + "all horizontal motion, including motion", + "while traveling up and down slopes." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 188, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/verticalSpeedOf.ts", + "indent": 0 + } + ] + }, + "531": { + "contexts": [ + "The player that received damage for the", + "event currently being processed by this", + "rule. May be the same as the attacker or", + "the event player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 189, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Victim", + "orderNumber": 0, + "path": "/interface/value/child/victim.ts", + "indent": 0 + } + ] + }, + "532": { + "contexts": [ + "The vector in the world coordinates corresponding", + "to the provided vector in local coordinates." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 190, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 0, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 0 + } + ] + }, + "533": { + "contexts": [ + "The X Component of the specified Vector,", + "usually representing a leftward amount." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 191, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "X Component Of", + "orderNumber": 0, + "path": "/interface/value/child/xComponentOf.ts", + "indent": 0 + } + ] + }, + "534": { + "contexts": [ + "The Y Component of the specified Vector,", + "usually representing a upward amount." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 192, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Y Component Of", + "orderNumber": 0, + "path": "/interface/value/child/yComponentOf.ts", + "indent": 0 + } + ] + }, + "535": { + "contexts": [ + "The Z Component of the specified Vector,", + "usually representing a forward amount." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 193, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Z Component Of", + "orderNumber": 0, + "path": "/interface/value/child/zComponentOf.ts", + "indent": 0 + } + ] + }, + "536": { + "contexts": [ + "Value - You can specify any Value Syntax", + "to define the Absolute Value." + ], + "usedFiles": [ + { + "topName": "Absolute Value", + "orderNumber": 1, + "path": "/interface/value/child/absoluteValue.ts", + "indent": 4 + } + ] + }, + "537": { + "contexts": [ + "Value - You can specify any Value Syntax", + "to define either addend." + ], + "usedFiles": [ + { + "topName": "Add", + "orderNumber": 1, + "path": "/interface/value/child/add.ts", + "indent": 4 + } + ] + }, + "538": { + "contexts": [ + "Value - The right-hand operand. may be any", + "value that results in a number or a vector." + ], + "usedFiles": [ + { + "topName": "Add", + "orderNumber": 2, + "path": "/interface/value/child/add.ts", + "indent": 4 + } + ] + }, + "539": { + "contexts": [ + "Team - You can specify any Team Syntax to", + "define the array." + ], + "usedFiles": [ + { + "topName": "All Dead Players", + "orderNumber": 1, + "path": "/interface/value/child/allDeadPlayers.ts", + "indent": 4 + }, + { + "topName": "All Living Players", + "orderNumber": 1, + "path": "/interface/value/child/allLivingPlayers.ts", + "indent": 4 + }, + { + "topName": "All Players", + "orderNumber": 1, + "path": "/interface/value/child/allPlayers.ts", + "indent": 4 + }, + { + "topName": "All Players Not On Objective", + "orderNumber": 1, + "path": "/interface/value/child/allPlayersNotOnObjective.ts", + "indent": 4 + }, + { + "topName": "All Players On Objective", + "orderNumber": 1, + "path": "/interface/value/child/allPlayersOnObjective.ts", + "indent": 4 + } + ] + }, + "540": { + "contexts": [ + "Player - You can specify any Player Syntax", + "to define the array." + ], + "usedFiles": [ + { + "topName": "Allowed Heroes", + "orderNumber": 1, + "path": "/interface/value/child/allowedHeroes.ts", + "indent": 4 + } + ] + }, + "541": { + "contexts": [ + "Player - You can specify any Player Syntax", + "to define the array." + ], + "usedFiles": [ + { + "topName": "Altitude Of", + "orderNumber": 1, + "path": "/interface/value/child/altitudeOf.ts", + "indent": 4 + } + ] + }, + "542": { + "contexts": [ + "Value - You can specify any Value Syntax", + "to define both of the required values." + ], + "usedFiles": [ + { + "topName": "And", + "orderNumber": 1, + "path": "/interface/value/child/and.ts", + "indent": 4 + } + ] + }, + "543": { + "contexts": [ + "Value - One of the two inputs considered.", + "if both are true (or equivalent to true),", + "then the and value is true." + ], + "usedFiles": [ + { + "topName": "And", + "orderNumber": 2, + "path": "/interface/value/child/and.ts", + "indent": 4 + } + ] + }, + "544": { + "contexts": [ + "Vector - One of two directional vectors", + "between which to measure the angle in degrees.", + "this vector does not need to be pre-normalized." + ], + "usedFiles": [ + { + "topName": "Angle Between Vectors", + "orderNumber": 1, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 4 + } + ] + }, + "545": { + "contexts": [ + "Vector - One of two directional vectors", + "between which to measure the angle in degrees.", + "this vector does not need to be pre-normalized." + ], + "usedFiles": [ + { + "topName": "Angle Between Vectors", + "orderNumber": 2, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 4 + } + ] + }, + "546": { + "contexts": [ + "Angle - You can specify any Angle Syntax", + "to define both of the required values." + ], + "usedFiles": [ + { + "topName": "Angle Difference", + "orderNumber": 1, + "path": "/interface/value/child/angleDifference.ts", + "indent": 4 + } + ] + }, + "547": { + "contexts": [ + "Angle - One of the two angles between which", + "to measure the resulting angle." + ], + "usedFiles": [ + { + "topName": "Angle Difference", + "orderNumber": 2, + "path": "/interface/value/child/angleDifference.ts", + "indent": 4 + } + ] + }, + "548": { + "contexts": [ + "Array - You must specify the Array Syntax", + "you are adding the value to." + ], + "usedFiles": [ + { + "topName": "Append To Array", + "orderNumber": 1, + "path": "/interface/value/child/appendToArray.ts", + "indent": 4 + } + ] + }, + "549": { + "contexts": [ + "Value - You must specify the Value Syntax", + "that you are adding to the array." + ], + "usedFiles": [ + { + "topName": "Append To Array", + "orderNumber": 2, + "path": "/interface/value/child/appendToArray.ts", + "indent": 4 + } + ] + }, + "550": { + "contexts": [ + "Value - Input value for the function." + ], + "usedFiles": [ + { + "topName": "Arccosine In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arccosineInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arccosineInRadians.ts", + "indent": 4 + } + ] + }, + "551": { + "contexts": [ + "Value - Input value for the function." + ], + "usedFiles": [ + { + "topName": "Arcsine In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arcsineInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arcsineInRadians.ts", + "indent": 4 + } + ] + }, + "552": { + "contexts": [ + "Numerator - Numerator input for the function." + ], + "usedFiles": [ + { + "topName": "Arctangent In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 4 + } + ] + }, + "553": { + "contexts": [ + "Denominator - Denominator input for the function." + ], + "usedFiles": [ + { + "topName": "Arctangent In Degrees", + "orderNumber": 2, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 2, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 4 + } + ] + }, + "554": { + "contexts": [ + "Array - The array in which to search for", + "the specified value. Can use most Array", + "based Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Array Contains", + "orderNumber": 1, + "path": "/interface/value/child/arrayContains.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 1, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 4 + } + ] + }, + "555": { + "contexts": [ + "Value - The value for which to search. Can", + "use most Number based Value Syntax to retrive this value." + ], + "usedFiles": [ + { + "topName": "Array Contains", + "orderNumber": 2, + "path": "/interface/value/child/arrayContains.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 2, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 4 + } + ] + }, + "556": { + "contexts": [ + "Array - You must specify the Array Syntax", + "you are comparing the value to." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 1, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "557": { + "contexts": [ + "Start Index - The first index of the range.", + "Can use most Value Syntax to specify with." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 2, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "558": { + "contexts": [ + "Count - The number of elements in the resulting", + "array. The resulting array will contain", + "fewer elements if the specified range exceeds", + "the bounds of the array. Can use any Number-based", + "Value Syntax to specify with." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 3, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "559": { + "contexts": [ + "Center - The position to which to measure", + "proximity. Can use most Value Syntax related", + "to reporting a position in the map." + ], + "usedFiles": [ + { + "topName": "Closest Player To", + "orderNumber": 1, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 4 + } + ] + }, + "560": { + "contexts": [ + "Team - You can specify any Team Syntax to", + "restrict which players is reported when", + "defining this value." + ], + "usedFiles": [ + { + "topName": "Closest Player To", + "orderNumber": 2, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 4 + } + ] + }, + "561": { + "contexts": [ + "Value - The left hand side of the comparison.", + "This may be any value type if the operation", + "is == or =!, otherwise real numbers are", + "expected. Can use most Value Syntax for the comparison." + ], + "usedFiles": [ + { + "topName": "Compare", + "orderNumber": 1, + "path": "/interface/value/child/compare.ts", + "indent": 4 + } + ] + }, + "562": { + "contexts": [ + "Condition - One of the standard conditions", + "to use for comparison. See the Condition", + "section for details." + ], + "usedFiles": [ + { + "topName": "Compare", + "orderNumber": 2, + "path": "/interface/value/child/compare.ts", + "indent": 4 + } + ] + }, + "563": { + "contexts": [ + "Team - You can specify any Team Syntax to", + "define which team reported when defining this value." + ], + "usedFiles": [ + { + "topName": "Control Mode Scoring Percentage", + "orderNumber": 1, + "path": "/interface/value/child/controlModeScoringPercentage.ts", + "indent": 4 + } + ] + }, + "564": { + "contexts": [ + "Angle - Angle in degrees. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Cosine From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/cosineFromDegrees.ts", + "indent": 4 + }, + { + "topName": "Sine From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/sineFromDegrees.ts", + "indent": 4 + }, + { + "topName": "Tangent From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/tangentFromDegrees.ts", + "indent": 4 + } + ] + }, + "565": { + "contexts": [ + "Angle - Angle in radians. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Cosine From Radians", + "orderNumber": 1, + "path": "/interface/value/child/cosineFromRadians.ts", + "indent": 4 + }, + { + "topName": "Sine From Radians", + "orderNumber": 1, + "path": "/interface/value/child/sineFromRadians.ts", + "indent": 4 + }, + { + "topName": "Tangent From Radians", + "orderNumber": 1, + "path": "/interface/value/child/tangentFromRadians.ts", + "indent": 4 + } + ] + }, + "566": { + "contexts": [ + "Value - You must specify the first Value", + "Syntax to compare to the second." + ], + "usedFiles": [ + { + "topName": "Cross Product", + "orderNumber": 1, + "path": "/interface/value/child/crossProduct.ts", + "indent": 4 + } + ] + }, + "567": { + "contexts": [ + "Value - You must specify the first Value", + "Syntax to compare to the second." + ], + "usedFiles": [ + { + "topName": "Cross Product", + "orderNumber": 2, + "path": "/interface/value/child/crossProduct.ts", + "indent": 4 + } + ] + }, + "568": { + "contexts": [ + "Horizontal Angle - The horizontal angle", + "in degrees used to construct the resulting", + "vector. Most angle based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Direction From Angles", + "orderNumber": 1, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 4 + } + ] + }, + "569": { + "contexts": [ + "Vertical Angle - The vertical angle in degrees", + "used to construct the resulting vector.", + "Most angle based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Direction From Angles", + "orderNumber": 2, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 4 + } + ] + }, + "570": { + "contexts": [ + "Start Pos - The position from which the", + "resulting direction vector will point. Most", + "positional based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Direction Towards", + "orderNumber": 1, + "path": "/interface/value/child/directionTowards.ts", + "indent": 4 + } + ] + }, + "571": { + "contexts": [ + "End Pos - The position to which the resulting", + "direction vector will point. Most positional", + "based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Direction Towards", + "orderNumber": 2, + "path": "/interface/value/child/directionTowards.ts", + "indent": 4 + } + ] + }, + "572": { + "contexts": [ + "Start Pos - One of the two positions used", + "in the distance measurement. Most positional", + "based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Distance Between", + "orderNumber": 1, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 4 + } + ] + }, + "573": { + "contexts": [ + "End Pos - One of the two positions used", + "in the distance measurement. Most positional", + "based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Distance Between", + "orderNumber": 2, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 4 + } + ] + }, + "574": { + "contexts": [ + "Value - The left-hand operand, may be any", + "value that results in a number or a vector.", + "Any Value Syntax may be used here." + ], + "usedFiles": [ + { + "topName": "Divide", + "orderNumber": 1, + "path": "/interface/value/child/divide.ts", + "indent": 4 + } + ] + }, + "575": { + "contexts": [ + "Value - The right-hand operand, may be any", + "value that results in a number or a vector.", + "Any Value Syntax may be used here." + ], + "usedFiles": [ + { + "topName": "Divide", + "orderNumber": 2, + "path": "/interface/value/child/divide.ts", + "indent": 4 + } + ] + }, + "576": { + "contexts": [ + "Value - One of the two vector operands of", + "the dot product. Any positional based Syntax", + "may be used here." + ], + "usedFiles": [ + { + "topName": "Dot Product", + "orderNumber": 1, + "path": "/interface/value/child/dotProduct.ts", + "indent": 4 + } + ] + }, + "577": { + "contexts": [ + "Value - One of the two vector operands of", + "the dot product. Any positional based Syntax", + "may be used here." + ], + "usedFiles": [ + { + "topName": "Dot Product", + "orderNumber": 2, + "path": "/interface/value/child/dotProduct.ts", + "indent": 4 + } + ] + }, + "578": { + "contexts": [ + "Entity - The player, icon entity, or effect", + "entity whose existance to check." + ], + "usedFiles": [ + { + "topName": "Entity Exists", + "orderNumber": 1, + "path": "/interface/value/child/entityExists.ts", + "indent": 4 + } + ] + }, + "579": { + "contexts": [ + "Center - The position to which to measure", + "proximity. Can use most Value Syntax related", + "to reporting a position in the map." + ], + "usedFiles": [ + { + "topName": "Farthest Player From", + "orderNumber": 1, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 4 + } + ] + }, + "580": { + "contexts": [ + "Team - You can specify any Team Syntax to", + "restrict which players is reported when", + "defining this value." + ], + "usedFiles": [ + { + "topName": "Farthest Player From", + "orderNumber": 2, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 4 + } + ] + }, + "581": { + "contexts": [ + "Array - The array from which the value is", + "created. Can use most Array based Value", + "Syntax to provide this data." + ], + "usedFiles": [ + { + "topName": "First Of", + "orderNumber": 1, + "path": "/interface/value/child/firstOf.ts", + "indent": 4 + }, + { + "topName": "Last Of", + "orderNumber": 1, + "path": "/interface/value/child/lastOf.ts", + "indent": 4 + } + ] + }, + "582": { + "contexts": [ + "Team - The team whose flag position to acquire." + ], + "usedFiles": [ + { + "topName": "Flag Position", + "orderNumber": 1, + "path": "/interface/value/child/flagPosition.ts", + "indent": 4 + } + ] + }, + "583": { + "contexts": [ + "Player - The player whose status to check." + ], + "usedFiles": [ + { + "topName": "Has Status", + "orderNumber": 1, + "path": "/interface/value/child/hasStatus.ts", + "indent": 4 + } + ] + }, + "584": { + "contexts": [ + "Status - The status to check for. Values", + "include Hacked, Burning, Knocked Down, Asleep,", + "Frozen, Unkillable, Invincible, Phased Out,", + "Rooted, or Stunned." + ], + "usedFiles": [ + { + "topName": "Has Status", + "orderNumber": 2, + "path": "/interface/value/child/hasStatus.ts", + "indent": 4 + } + ] + }, + "585": { + "contexts": [ + "Player - The player whose hero to acquire.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Hero Of", + "orderNumber": 1, + "path": "/interface/value/child/heroOf.ts", + "indent": 4 + } + ] + }, + "586": { + "contexts": [ + "Direction - The direction vector from which", + "to acquire a horizontal angle in degrees.", + "The vector is unitized before calculation", + "begins. Can use most Vector based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle From Direction", + "orderNumber": 1, + "path": "/interface/value/child/horizontalAngleFromDirection.ts", + "indent": 4 + } + ] + }, + "587": { + "contexts": [ + "Player - The player whose current facing", + "angle begins. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle Towards", + "orderNumber": 1, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 4 + } + ] + }, + "588": { + "contexts": [ + "Position - The player whose current facing", + "the angle begins. Can use most Player based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle Towards", + "orderNumber": 2, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle Towards", + "orderNumber": 1, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 4 + } + ] + }, + "589": { + "contexts": [ + "Player - The player whose facing direction", + "to acquire. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Horizontal Facing Angle Of", + "orderNumber": 1, + "path": "/interface/value/child/horizontalFacingAngleOf.ts", + "indent": 4 + } + ] + }, + "590": { + "contexts": [ + "Player - The player whose life to check.", + "Can use most player based Value Syntax to", + "retrive this value." + ], + "usedFiles": [ + { + "topName": "Is Alive", + "orderNumber": 1, + "path": "/interface/value/child/isAlive.ts", + "indent": 4 + } + ] + }, + "591": { + "contexts": [ + "Player - The player whose button to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Button Held", + "orderNumber": 1, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 4 + } + ] + }, + "592": { + "contexts": [ + "Button - The button to check. Designed by", + "any action inputs by ability but not directional", + "inputs. (i.e. Primary Fire, Secondary Fire,", + "Ultimate Ability, Jump, Crouch, etc.)" + ], + "usedFiles": [ + { + "topName": "Is Button Held", + "orderNumber": 2, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 4 + } + ] + }, + "593": { + "contexts": [ + "Player - The player whose communication", + "status to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Communicating", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAny.ts", + "indent": 4 + } + ] + }, + "594": { + "contexts": [ + "Type - The type of communication to consider.", + "The duration of emotes is exact, the duration", + "of voice lines is assumed to be 4 seconds,", + "and all other durations are assumed to be", + "2 seconds. Any of the four emote slots,", + "four voice lines slots, or any standard", + "communication (Need healing, Ultimate Status,", + "etc.) can be designated." + ], + "usedFiles": [ + { + "topName": "Is Communicating", + "orderNumber": 2, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 4 + } + ] + }, + "595": { + "contexts": [ + "Player - The player whose emoting status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Communicating Any Emote", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAnyEmote.ts", + "indent": 4 + } + ] + }, + "596": { + "contexts": [ + "Player - The player whose voice line status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Communicating Any Voice Line", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAnyVoiceLine.ts", + "indent": 4 + } + ] + }, + "597": { + "contexts": [ + "Player - The player whose crouching status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Crouching", + "orderNumber": 1, + "path": "/interface/value/child/isCrouching.ts", + "indent": 4 + } + ] + }, + "598": { + "contexts": [ + "Player - The player whose death to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Dead", + "orderNumber": 1, + "path": "/interface/value/child/isDead.ts", + "indent": 4 + } + ] + }, + "599": { + "contexts": [ + "Player - The player whose primary weapon", + "attack to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Firing Primary", + "orderNumber": 1, + "path": "/interface/value/child/isFiringPrimary.ts", + "indent": 4 + } + ] + }, + "600": { + "contexts": [ + "Player - The player whose secondary weapon", + "attack to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Firing Secondary", + "orderNumber": 1, + "path": "/interface/value/child/isFiringSecondary.ts", + "indent": 4 + } + ] + }, + "601": { + "contexts": [ + "Team - The team whose whose flag to check.", + "Can use most Team based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Is Flag At Base", + "orderNumber": 1, + "path": "/interface/value/child/isFlagAtBase.ts", + "indent": 4 + }, + { + "topName": "Is Flag Being Carried", + "orderNumber": 1, + "path": "/interface/value/child/isFlagBeingCarried.ts", + "indent": 4 + }, + { + "topName": "Player Carrying Flag", + "orderNumber": 1, + "path": "/interface/value/child/playerCarryingFlag.ts", + "indent": 4 + } + ] + }, + "602": { + "contexts": [ + "Hero - The hero to check for play. Can use", + "most Hero based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Is Hero Being Played", + "orderNumber": 1, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 1, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 1, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 4 + } + ] + }, + "603": { + "contexts": [ + "Team - The team or teams on which to check", + "for the hero being played. Can use most", + "Team based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Is Hero Being Played", + "orderNumber": 2, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 2, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 2, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 4 + } + ] + }, + "604": { + "contexts": [ + "Player - The player whose airborne status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is In Air", + "orderNumber": 1, + "path": "/interface/value/child/isInAir.ts", + "indent": 4 + } + ] + }, + "605": { + "contexts": [ + "Start Pos - The start position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 1, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "606": { + "contexts": [ + "End Pos - The end position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 2, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "607": { + "contexts": [ + "Barriers - Defines how barriers affect line", + "of sight, when considering whether a barrier", + "belongs to an enemy, the allegiance of the", + "player provided to start pos (if any) is", + "used. Can be set to โ€œBarriers do not block", + "LOSโ€, Enemy barriers block LOS\", and โ€œAll", + "barriers block LOSโ€." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 3, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "608": { + "contexts": [ + "Player - The player whose spawn room status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is In Spawn Room", + "orderNumber": 1, + "path": "/interface/value/child/isInSpawnRoom.ts", + "indent": 4 + } + ] + }, + "609": { + "contexts": [ + "Player - The player whose view to use for", + "the check. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 1, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 1, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "610": { + "contexts": [ + "Location - The location to test if itโ€™s", + "within view. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 2, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + } + ] + }, + "611": { + "contexts": [ + "Team - The team or teams on which to consider", + "players. Can use most Team based Value Syntax", + "to provide this value." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 3, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 2, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "612": { + "contexts": [ + "Player - The player whose moving status", + "status to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Moving", + "orderNumber": 1, + "path": "/interface/value/child/isMoving.ts", + "indent": 4 + } + ] + }, + "613": { + "contexts": [ + "Number - The index of the objective to consider,", + "starting at 0 and counting up. Each control", + "point, payload checkpoint, and payload destination", + "has its own index. Can use most number based", + "Value Syntax to retrieve this value. Value", + "must be in the form of an integer (whole number)." + ], + "usedFiles": [ + { + "topName": "Is Objective Complete", + "orderNumber": 1, + "path": "/interface/value/child/isObjectiveComplete.ts", + "indent": 4 + } + ] + }, + "614": { + "contexts": [ + "Player - The player whose ground status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is On Ground", + "orderNumber": 1, + "path": "/interface/value/child/isOnGround.ts", + "indent": 4 + } + ] + }, + "615": { + "contexts": [ + "Player - The player whose objective status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is On Objective", + "orderNumber": 1, + "path": "/interface/value/child/isOnObjective.ts", + "indent": 4 + } + ] + }, + "616": { + "contexts": [ + "Player - The player whose wall status to", + "check. Can use most player based Value Syntax", + "to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is On Wall", + "orderNumber": 1, + "path": "/interface/value/child/isOnWall.ts", + "indent": 4 + } + ] + }, + "617": { + "contexts": [ + "Player - The player whose portrait to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Portrait On Fire", + "orderNumber": 1, + "path": "/interface/value/child/isPortraitOnFire.ts", + "indent": 4 + } + ] + }, + "618": { + "contexts": [ + "Player - The player whose standing status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Standing", + "orderNumber": 1, + "path": "/interface/value/child/isStanding.ts", + "indent": 4 + } + ] + }, + "619": { + "contexts": [ + "Team - The team whose role to check. Can", + "use most Team Based Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Team On Defense", + "orderNumber": 1, + "path": "/interface/value/child/isTeamOnDefense.ts", + "indent": 4 + }, + { + "topName": "Is Team On Offense", + "orderNumber": 1, + "path": "/interface/value/child/isTeamOnOffense.ts", + "indent": 4 + } + ] + }, + "620": { + "contexts": [ + "Array - The array whose values will be considered.", + "Can use most Array Based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is True For All", + "orderNumber": 1, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 1, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 4 + } + ] + }, + "621": { + "contexts": [ + "Condition - The condition that is evaluated", + "for each element of the specified array,", + "Use the current array element value to reference", + "the element of the array currently being", + "considered. Can use most Comparative based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is True For All", + "orderNumber": 2, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 2, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 4 + } + ] + }, + "622": { + "contexts": [ + "Player - The player whose ability 1 usage", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Using Ability 1", + "orderNumber": 1, + "path": "/interface/value/child/isUsingAbility1.ts", + "indent": 4 + } + ] + }, + "623": { + "contexts": [ + "Player - The player whose ability 2 usage", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Using Ability 2", + "orderNumber": 1, + "path": "/interface/value/child/isUsingAbility2.ts", + "indent": 4 + } + ] + }, + "624": { + "contexts": [ + "Player - The player whose ultimate ability", + "usage to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Using Ultimate", + "orderNumber": 1, + "path": "/interface/value/child/isUsingUltimate.ts", + "indent": 4 + } + ] + }, + "625": { + "contexts": [ + "World Vector - The vector in world coordinates", + "that will be converted to local coordinates.", + "Can use most Vector based Value Syntax to", + "provide this data." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 1, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + } + ] + }, + "626": { + "contexts": [ + "Local vector - The vector in local coordinates", + "that will be converted to world coordinates.", + "Can use most Vector based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 2, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 1, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "627": { + "contexts": [ + "Relative Player - The player to whom the", + "local vector is relative. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 3, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 2, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "628": { + "contexts": [ + "Player - The player whose max health to", + "compare. Can use any Player based Value", + "syntax to provide with." + ], + "usedFiles": [ + { + "topName": "Max Health", + "orderNumber": 1, + "path": "/interface/value/child/maxHealth.ts", + "indent": 4 + } + ] + }, + "629": { + "contexts": [ + "Value - The left-hand operand. May be any", + "value that results in a number. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Min", + "orderNumber": 1, + "path": "/interface/value/child/min.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 1, + "path": "/interface/value/child/multiply.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 1, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 4 + } + ] + }, + "630": { + "contexts": [ + "Value - The right-hand operand. May be any", + "value that results in a number. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Min", + "orderNumber": 2, + "path": "/interface/value/child/min.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 2, + "path": "/interface/value/child/multiply.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 2, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 4 + } + ] + }, + "631": { + "contexts": [ + "Position - The position from which to search", + "for the nearest walkable position. Can use", + "any Vector based Value syntax to divide with." + ], + "usedFiles": [ + { + "topName": "Nearest Walkable Position", + "orderNumber": 1, + "path": "/interface/value/child/nearestWalkablePosition.ts", + "indent": 4 + } + ] + }, + "632": { + "contexts": [ + "Vector - The vector to normalize. Can use", + "any Vector based Value syntax to divide with." + ], + "usedFiles": [ + { + "topName": "Normalize", + "orderNumber": 1, + "path": "/interface/value/child/normalize.ts", + "indent": 4 + } + ] + }, + "633": { + "contexts": [ + "Player - The player whose normalized health to acquire." + ], + "usedFiles": [ + { + "topName": "Normalized Health", + "orderNumber": 1, + "path": "/interface/value/child/normalizedHealth.ts", + "indent": 4 + } + ] + }, + "634": { + "contexts": [ + "Value - When this input is false (or equivalent", + "to false), then the not value is true. Otherwise,", + "the not value is false. Can use most Boolean-based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Not", + "orderNumber": 1, + "path": "/interface/value/child/not.ts", + "indent": 4 + } + ] + }, + "635": { + "contexts": [ + "Team - The team or teams on which to count", + "players. Can use most Team based Value Syntax", + "to provide this value." + ], + "usedFiles": [ + { + "topName": "Number Of Dead Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfDeadPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Living Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfLivingPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Players On Objective", + "orderNumber": 1, + "path": "/interface/value/child/numberOfPlayersOnObjective.ts", + "indent": 4 + } + ] + }, + "636": { + "contexts": [ + "Player - The player whose death count to", + "acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Number Of Deaths", + "orderNumber": 1, + "path": "/interface/value/child/numberOfDeaths.ts", + "indent": 4 + } + ] + }, + "637": { + "contexts": [ + "Player - The player whose elimination count", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Number Of Eliminations", + "orderNumber": 1, + "path": "/interface/value/child/numberOfEliminations.ts", + "indent": 4 + } + ] + }, + "638": { + "contexts": [ + "Player - The player whose final blow count", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Number Of Final Blows", + "orderNumber": 1, + "path": "/interface/value/child/numberOfFinalBlows.ts", + "indent": 4 + } + ] + }, + "639": { + "contexts": [ + "Number - The index of the objective to consider,", + "starting at 0 and counting up. Each control", + "point, payload checkpoint, and payload destination", + "as its own index. Can use most Number based", + "Value Syntax to provide this value, but", + "must output in a integer of 0, 1, or 2." + ], + "usedFiles": [ + { + "topName": "Objective Position", + "orderNumber": 1, + "path": "/interface/value/child/objectivePosition.ts", + "indent": 4 + } + ] + }, + "640": { + "contexts": [ + "Team - The team whose opposite to acquire.", + "If all, the result will be all. Can use", + "most Team based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Opposite Team Of", + "orderNumber": 1, + "path": "/interface/value/child/oppositeTeamOf.ts", + "indent": 4 + } + ] + }, + "641": { + "contexts": [ + "Value - One of the two inputs considered.", + "If either one is true (or equivalent to", + "true), then the OR value is true. Can use", + "most Boolean based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Or", + "orderNumber": 1, + "path": "/interface/value/child/or.ts", + "indent": 4 + } + ] + }, + "642": { + "contexts": [ + "Value - One of the two inputs considered.", + "If either one is true (or equivalent to", + "true), then the OR value is true. Can use", + "most Boolean based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Or", + "orderNumber": 2, + "path": "/interface/value/child/or.ts", + "indent": 4 + } + ] + }, + "643": { + "contexts": [ + "Player - The player from whose reticle to", + "search for the closest player. Can use most", + "Player based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Player Closest To Reticle", + "orderNumber": 1, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 4 + } + ] + }, + "644": { + "contexts": [ + "Team - The team or teams on which to search", + "for the closest player. Can use most Team", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Player Closest To Reticle", + "orderNumber": 2, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 4 + } + ] + }, + "645": { + "contexts": [ + "Slot - The slot number from each to acquire", + "a player or players. In team games, each", + "team has slots 0 through 5. In free-for-all", + "games, slots are numbered 0 through 11.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Players In Slot", + "orderNumber": 1, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 4 + } + ] + }, + "646": { + "contexts": [ + "Team - The team or teams from which to acquire", + "a player or players. Can use most Team based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Players In Slot", + "orderNumber": 2, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 4 + } + ] + }, + "647": { + "contexts": [ + "View Angle - The view angle to compare against", + "in degrees. Can use most Angle based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Players In View Angle", + "orderNumber": 3, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "648": { + "contexts": [ + "Center - The center position from which", + "to measure distance. Can use most Vector", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 1, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "649": { + "contexts": [ + "Radius - The radius in meters inside which", + "players must be in order to be included", + "in the resulting array. Can use most Number", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 2, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "650": { + "contexts": [ + "Team - The team or teams to which a player", + "must belong to be included in the resulting", + "array. Can use most Team based Value Syntax", + "to provide this value." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 3, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "651": { + "contexts": [ + "LOS Check - Specifies whether and how a", + "player must pass a line-of-sight check to", + "be included in the resulting array. You", + "can choose from Off, Surfaces, Surfaces", + "and Enemy Barriers, and Surfaces and All", + "Barriers. Off will result in the line of", + "sight is never blocked, allowing results", + "through walls. Surfaces will result in line", + "of sight is blocked by ceilings, walls,", + "floors, platforms, and any fixed object", + "that blocks projectiles. Surfaces and Enemy", + "Barriers will result in line of sight is", + "blocked by ceilings, walls, floors, platforms,", + "any fixed object that blocks projectiles,", + "and barriers created by the enemy team.", + "Surfaces and All Barriers will result in", + "line of sight is blocked by ceilings, walls,", + "floors, platforms, any fixed object that", + "blocks projectiles, and all barriers." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 4, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + }, + { + "topName": "LosCheck", + "orderNumber": 0, + "path": "/type/value/losCheck.ts", + "indent": 0 + } + ] + }, + "652": { + "contexts": [ + "Player - The player whose position to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Position Of", + "orderNumber": 1, + "path": "/interface/value/child/positionOf.ts", + "indent": 4 + } + ] + }, + "653": { + "contexts": [ + "MIN - The smallest integer allowed. If a", + "real number is provided to this input, it", + "is rounded to the nearest integer. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Random Integer", + "orderNumber": 1, + "path": "/interface/value/child/randomInteger.ts", + "indent": 4 + } + ] + }, + "654": { + "contexts": [ + "MAX - The largest integer allowed. If a", + "real number is provided to this input, it", + "is rounded to the nearest integer. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Random Integer", + "orderNumber": 2, + "path": "/interface/value/child/randomInteger.ts", + "indent": 4 + } + ] + }, + "655": { + "contexts": [ + "Array - The array whose copy will be randomized.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Randomized Array", + "orderNumber": 1, + "path": "/interface/value/child/randomizedArray.ts", + "indent": 4 + } + ] + }, + "656": { + "contexts": [ + "MIN - The smallest real number allowed.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Random Real", + "orderNumber": 1, + "path": "/interface/value/child/randomReal.ts", + "indent": 4 + } + ] + }, + "657": { + "contexts": [ + "MAX - The largest real number allowed. Can", + "use most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Random Real", + "orderNumber": 2, + "path": "/interface/value/child/randomReal.ts", + "indent": 4 + } + ] + }, + "658": { + "contexts": [ + "Array - The array from which to randomly", + "take a value. If a non-array value is provided,", + "the result is simply the provided value.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Random Value In Array", + "orderNumber": 1, + "path": "/interface/value/child/randomValueInArray.ts", + "indent": 4 + } + ] + }, + "659": { + "contexts": [ + "Start POS - The start position for the ray", + "cast. If a player is provided. A position", + "2 meters above the playerโ€™s feet is used.", + "Can use most Vector based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "660": { + "contexts": [ + "End POS - The end position for the ray cast.", + "If a player is provided. A position 2 meters", + "above the playerโ€™s feet is used. Can use", + "most Vector based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "661": { + "contexts": [ + "Players to include - Which players can be", + "hit by this ray cast. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "662": { + "contexts": [ + "Players to exclude - Which players cannot", + "be hit by this ray cast. This list takes", + "precedence over players to include. Can", + "use most Player based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "663": { + "contexts": [ + "Include player owned objects - Whether player", + "owned objects (such as barriers or turrets)", + "should be included in the ray cast. Can", + "use most Boolean based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "664": { + "contexts": [ + "Array - The array from which to remove values.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Remove From Array", + "orderNumber": 1, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 4 + } + ] + }, + "665": { + "contexts": [ + "Value - The value to remove from the array", + "(if found), if this value itself an array,", + "each matching element is removed. Can use", + "most Array based or Number based Value Syntax", + "to provide this value." + ], + "usedFiles": [ + { + "topName": "Remove From Array", + "orderNumber": 2, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 4 + } + ] + }, + "666": { + "contexts": [ + "Value - The real number to round. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Round To Integer", + "orderNumber": 1, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 4 + } + ] + }, + "667": { + "contexts": [ + "Rounding Type - Determines the direction", + "in which the value will be rounded. You", + "can round up, down, or to the nearest integer." + ], + "usedFiles": [ + { + "topName": "Round To Integer", + "orderNumber": 2, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 4 + } + ] + }, + "668": { + "contexts": [ + "Player - The player whose score to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Score Of", + "orderNumber": 1, + "path": "/interface/value/child/scoreOf.ts", + "indent": 4 + } + ] + }, + "669": { + "contexts": [ + "Player - The player whose slot number to", + "acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Slot Of", + "orderNumber": 1, + "path": "/interface/value/child/slotOf.ts", + "indent": 4 + } + ] + }, + "670": { + "contexts": [ + "Array - The array whose copy will be sorted.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Sorted Array", + "orderNumber": 1, + "path": "/interface/value/child/sortedArray.ts", + "indent": 4 + } + ] + }, + "671": { + "contexts": [ + "Value Rank - The value that is evaluated", + "for each element of the copied array. The", + "array is sorted by this rank in ascending", + "order. Use the current array element value", + "to reference the element of the array currently", + "being considered. Can use most Number based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Sorted Array", + "orderNumber": 2, + "path": "/interface/value/child/sortedArray.ts", + "indent": 4 + } + ] + }, + "672": { + "contexts": [ + "Player - The player whose velocity to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Speed Of", + "orderNumber": 1, + "path": "/interface/value/child/speedOf.ts", + "indent": 4 + }, + { + "topName": "Speed Of In Direction", + "orderNumber": 1, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 4 + }, + { + "topName": "Velocity Of", + "orderNumber": 1, + "path": "/interface/value/child/velocityOf.ts", + "indent": 4 + } + ] + }, + "673": { + "contexts": [ + "Direction - The direction of travel in which", + "to measure the playerโ€™s speed. Can use most", + "Vector based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Speed Of In Direction", + "orderNumber": 2, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 4 + } + ] + }, + "674": { + "contexts": [ + "Value - The real number value whose square", + "root will be computed. Negative values result", + "in zero. Can use most Number based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Square Root", + "orderNumber": 1, + "path": "/interface/value/child/squareRoot.ts", + "indent": 4 + } + ] + }, + "675": { + "contexts": [ + "String - How the string will be structured", + "using a series of text and phrases." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 1, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "676": { + "contexts": [ + "{0} - The first value in the string." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 2, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "677": { + "contexts": [ + "{1} - The second value in the string." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 3, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "678": { + "contexts": [ + "{2} - The third value in the string." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 4, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "679": { + "contexts": [ + "Value - The left-hand operand. May be any", + "value that results in a number or a vector.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Subtract", + "orderNumber": 1, + "path": "/interface/value/child/subtract.ts", + "indent": 4 + } + ] + }, + "680": { + "contexts": [ + "Value - The right-hand operand. May be any", + "value that results in a number or a vector.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Subtract", + "orderNumber": 2, + "path": "/interface/value/child/subtract.ts", + "indent": 4 + } + ] + }, + "681": { + "contexts": [ + "Player - The player whose team to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Team Of", + "orderNumber": 1, + "path": "/interface/value/child/teamOf.ts", + "indent": 4 + } + ] + }, + "682": { + "contexts": [ + "Team - The team whose score to acquire.", + "Can use most Team based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Team Score", + "orderNumber": 1, + "path": "/interface/value/child/teamScore.ts", + "indent": 4 + } + ] + }, + "683": { + "contexts": [ + "Player - The player whose directional input", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Throttle Of", + "orderNumber": 1, + "path": "/interface/value/child/throttleOf.ts", + "indent": 4 + } + ] + }, + "684": { + "contexts": [ + "Player - The player whose ultimate charge", + "percentage to acquire. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ultimate Charge Percent", + "orderNumber": 1, + "path": "/interface/value/child/ultimateChargePercent.ts", + "indent": 4 + } + ] + }, + "685": { + "contexts": [ + "Array - The array whose element to acquire.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Value In Array", + "orderNumber": 1, + "path": "/interface/value/child/valueInArray.ts", + "indent": 4 + } + ] + }, + "686": { + "contexts": [ + "Index - The index whose element to acquire.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Value In Array", + "orderNumber": 2, + "path": "/interface/value/child/valueInArray.ts", + "indent": 4 + } + ] + }, + "687": { + "contexts": [ + "X - The X value of the Vector. Can use most", + "Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 1, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "688": { + "contexts": [ + "Y - The Y value of the vector. Can use most", + "Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 2, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "689": { + "contexts": [ + "Z - The Z value of the Vector. Can use most", + "Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 3, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "690": { + "contexts": [ + "Start Pos - The start position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Vector Towards", + "orderNumber": 1, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 4 + } + ] + }, + "691": { + "contexts": [ + "End Pos - The end position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Vector Towards", + "orderNumber": 2, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 4 + } + ] + }, + "692": { + "contexts": [ + "Direction - The direction vector from which", + "to acquire a vertical angle in degrees.", + "The vector is unitized before calculations", + "begins. Can use most Vector based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vertical Angle From Direction", + "orderNumber": 1, + "path": "/interface/value/child/verticalAngleFromDirection.ts", + "indent": 4 + } + ] + }, + "693": { + "contexts": [ + "Position - The direction vector from which", + "to acquire a vertical angle in degrees.", + "The vector is unitized before calculations", + "begins. Can use most Vector based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vertical Angle Towards", + "orderNumber": 2, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 4 + } + ] + }, + "694": { + "contexts": [ + "Player - The player whose vertical facing", + "angle to acquire. Can use most Player based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vertical Facing Angle Of", + "orderNumber": 1, + "path": "/interface/value/child/verticalFacingAngleOf.ts", + "indent": 4 + } + ] + }, + "695": { + "contexts": [ + "Player - The player whose vertical speed", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vertical Speed Of", + "orderNumber": 1, + "path": "/interface/value/child/verticalSpeedOf.ts", + "indent": 4 + } + ] + }, + "696": { + "contexts": [ + "Local vector - Specifies whether the vector", + "should receive a rotation and a translation", + "(usually applied to positions) or only a", + "rotation (usually applied to directions", + "and velocities). Can select rotation or", + "rotation and translation." + ], + "usedFiles": [ + { + "topName": "World Vector Of", + "orderNumber": 3, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "697": { + "contexts": [ + "Value - The vector from which to acquire", + "the X component. Can use most Vector based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "X Component Of", + "orderNumber": 1, + "path": "/interface/value/child/xComponentOf.ts", + "indent": 4 + } + ] + }, + "698": { + "contexts": [ + "Value - The vector from which to acquire", + "the Y component. Can use most Vector based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Y Component Of", + "orderNumber": 1, + "path": "/interface/value/child/yComponentOf.ts", + "indent": 4 + } + ] + }, + "699": { + "contexts": [ + "Value - The vector from which to acquire", + "the Z component. Can use most Vector based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Z Component Of", + "orderNumber": 1, + "path": "/interface/value/child/zComponentOf.ts", + "indent": 4 + } + ] + }, + "700": { + "contexts": [ + "Team constant. The ALL option refers to", + "both teams in a team competition, or to", + "all players in an individual combat game." + ], + "usedFiles": [ + { + "topName": "TeamConstant", + "orderNumber": 0, + "path": "/type/teamConstant.ts", + "indent": 0 + } + ] + }, + "701": { + "contexts": [ + "- `All' Event applies to all players.", + "- `Slot1' ~ `Slot11`", + " Event only applies to players in specific slots.", + " In a team competition, two players can", + "occupy one slot (one for each team)." + ], + "usedFiles": [ + { + "topName": "EventPlayer", + "orderNumber": 0, + "path": "/type/event/player.ts", + "indent": 0 + } + ] + }, + "702": { + "contexts": [ + "`BARRIERS DO NOT BLOCK LOS`", + "No barrier interferes with the view.", + "`ENEMY BARRIERS BLOCK LOS`", + "Syah is covered by the walls of the enemy", + "team.", + "`ALL BARRIERS BLOCK LOS`", + "Syah is covered by all the barriers." + ], + "usedFiles": [ + { + "topName": "Barrier", + "orderNumber": 0, + "path": "/type/value/barrier.ts", + "indent": 0 + } + ] + }, + "703": { + "contexts": [ + "Player, icon object, or effect object." + ], + "usedFiles": [ + { + "topName": "Entity", + "orderNumber": 0, + "path": "/type/value/entity.ts", + "indent": 0 + } + ] + }, + "704": { + "contexts": [ + "Lists the available value interface ." + ], + "usedFiles": [ + { + "topName": "Value", + "orderNumber": 0, + "path": "/type/value/value.ts", + "indent": 0 + } + ] + }, + "705": { + "contexts": [ + "TODO: playerDealtHealing(Player Dealt Healing)(OrderNum:0)" + ], + "usedFiles": [ + { + "topName": "Player Dealt Healing", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtHealing.ts", + "indent": 0 + }, + { + "topName": "IEvent", + "orderNumber": 7, + "path": "/interface/event/event.ts", + "indent": 0 + } + ] + }, + "706": { + "contexts": [ + "TODO: playerDealtHealing(Player Dealt Healing)(OrderNum:1)" + ], + "usedFiles": [ + { + "topName": "Player Dealt Healing", + "orderNumber": 1, + "path": "/interface/event/child/playerDealtHealing.ts", + "indent": 4 + } + ] + }, + "707": { + "contexts": [ + "TODO: playerDealtHealing(Player Dealt Healing)(OrderNum:2)" + ], + "usedFiles": [ + { + "topName": "Player Dealt Healing", + "orderNumber": 2, + "path": "/interface/event/child/playerDealtHealing.ts", + "indent": 4 + } + ] + }, + "708": { + "contexts": [ + "TODO: playerReceivedHealing(Player Received Healing)(OrderNum:0)" + ], + "usedFiles": [ + { + "topName": "Player Received Healing", + "orderNumber": 0, + "path": "/interface/event/child/playerReceivedHealing.ts", + "indent": 0 + }, + { + "topName": "IEvent", + "orderNumber": 8, + "path": "/interface/event/event.ts", + "indent": 0 + } + ] + }, + "709": { + "contexts": [ + "TODO: playerReceivedHealing(Player Received Healing)(OrderNum:1)" + ], + "usedFiles": [ + { + "topName": "Player Received Healing", + "orderNumber": 1, + "path": "/interface/event/child/playerReceivedHealing.ts", + "indent": 4 + } + ] + }, + "710": { + "contexts": [ + "TODO: playerReceivedHealing(Player Received Healing)(OrderNum:2)" + ], + "usedFiles": [ + { + "topName": "Player Received Healing", + "orderNumber": 2, + "path": "/interface/event/child/playerReceivedHealing.ts", + "indent": 4 + } + ] + }, + "711": { + "contexts": [ + "TODO: playerJoinedMatch(Player Joined Match)(OrderNum:0)" + ], + "usedFiles": [ + { + "topName": "Player Joined Match", + "orderNumber": 0, + "path": "/interface/event/child/playerJoinedMatch.ts", + "indent": 0 + }, + { + "topName": "IEvent", + "orderNumber": 9, + "path": "/interface/event/event.ts", + "indent": 0 + } + ] + }, + "712": { + "contexts": [ + "TODO: playerJoinedMatch(Player Joined Match)(OrderNum:1)" + ], + "usedFiles": [ + { + "topName": "Player Joined Match", + "orderNumber": 1, + "path": "/interface/event/child/playerJoinedMatch.ts", + "indent": 4 + } + ] + }, + "713": { + "contexts": [ + "TODO: playerJoinedMatch(Player Joined Match)(OrderNum:2)" + ], + "usedFiles": [ + { + "topName": "Player Joined Match", + "orderNumber": 2, + "path": "/interface/event/child/playerJoinedMatch.ts", + "indent": 4 + } + ] + }, + "714": { + "contexts": [ + "TODO: playerLeftMatch(Player Left Match)(OrderNum:0)" + ], + "usedFiles": [ + { + "topName": "Player Left Match", + "orderNumber": 0, + "path": "/interface/event/child/playerLeftMatch.ts", + "indent": 0 + }, + { + "topName": "IEvent", + "orderNumber": 10, + "path": "/interface/event/event.ts", + "indent": 0 + } + ] + }, + "715": { + "contexts": [ + "TODO: playerLeftMatch(Player Left Match)(OrderNum:1)" + ], + "usedFiles": [ + { + "topName": "Player Left Match", + "orderNumber": 1, + "path": "/interface/event/child/playerLeftMatch.ts", + "indent": 4 + } + ] + }, + "716": { + "contexts": [ + "TODO: playerLeftMatch(Player Left Match)(OrderNum:2)" + ], + "usedFiles": [ + { + "topName": "Player Left Match", + "orderNumber": 2, + "path": "/interface/event/child/playerLeftMatch.ts", + "indent": 4 + } + ] + }, + "717": { + "contexts": [ + "Starts transforming (scaling and rotating)", + "the throttle (directional input control)", + "of a player or players. cancels any existing", + "start transforming throttle behavior." + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 0, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 126, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "718": { + "contexts": [ + "Player - The player or players whose", + "throttle will be transformed." + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 1, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "719": { + "contexts": [ + "X Axis Scalar - The player or players will", + "have their x axis (left to right)", + "multiplied by this value before the throttle", + "is rotated to its new relative direction.", + "This Value is evaluated continuously", + "(meaning it updates every frame)." + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 2, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "720": { + "contexts": [ + "Y Axis Scalar - The player or players will", + "have their y axis (left to right)", + "multiplied by this value before the throttle", + "is rotated to its new relative direction.", + "This Value is evaluated continuously", + "(meaning it updates every frame)." + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 3, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "721": { + "contexts": [ + "Relative Direction - After the axis scalars", + "are applied, the player or players will", + "have their throttle transformed so that it is", + "relative to this unit direction vector.", + "for example, to make the throttle camera relative,", + "provide the direction that the camera is facing.", + "this value is evaluated continuously", + "(meaning it updates every frame)", + "and normalized internally." + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 4, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "722": { + "contexts": [ + "Stops the throttle transform started by start", + "transforming throttle for one or more players." + ], + "usedFiles": [ + { + "topName": "Stop Transforming Throttle", + "orderNumber": 0, + "path": "/interface/action/child/stopTransformingThrottle.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 127, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "723": { + "contexts": [ + "Player - The player or players whose", + "throttle will stop being transformed." + ], + "usedFiles": [ + { + "topName": "Stop Transforming Throttle", + "orderNumber": 1, + "path": "/interface/action/child/stopTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "724": { + "contexts": [ + "The player that dealt the healing for the event", + "currently being processed by this rule. may be the", + "same as the healee or the event player." + ], + "usedFiles": [ + { + "topName": "Healer", + "orderNumber": 0, + "path": "/interface/value/child/healer.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 194, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "725": { + "contexts": [ + "The player that received the healing for the event", + "currently being processed by this rule. may be the", + "same as the healer or the event player." + ], + "usedFiles": [ + { + "topName": "Healee", + "orderNumber": 0, + "path": "/interface/value/child/healee.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 195, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "726": { + "contexts": [ + "The amount of healing received by the healee", + "for the event currently being processed by this rule." + ], + "usedFiles": [ + { + "topName": "Event Healing", + "orderNumber": 0, + "path": "/interface/value/child/eventHealing.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 196, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "727": { + "contexts": [ + "The player that is currently the host of the", + "custom game. this value will change if the", + "current host player leaves the match." + ], + "usedFiles": [ + { + "topName": "Host Player", + "orderNumber": 0, + "path": "/interface/value/child/hostPlayer.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 197, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "728": { + "contexts": [ + "Adds a new bot to the specified slot on the", + "specified team so long as the slot is available.", + "This bot will only move, fire or use", + "abilities if executing workshop actions." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 0, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 128, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "729": { + "contexts": [ + "The hero that the bot will be. If more than", + "one hero is provided, One will be chosen at random." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 1, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "730": { + "contexts": [ + "The team on which to create the bot, The 'All'", + "option only works in free-for-all game modes, will the", + "'Team' options only work in team-based game modes." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 2, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "731": { + "contexts": [ + "The player slot which will receive the bot", + "(-1 for first available slot).", + "Up to 6 bots may be added to each team,", + "or 12 bots to the free-for-all team,", + "regardless of lobby settings." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 3, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "732": { + "contexts": [ + "The initial position where the bot will appear." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 4, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "733": { + "contexts": [ + "The initial direction that the bot will face." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 5, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "734": { + "contexts": [ + "Removes the specified dummy bot from the match." + ], + "usedFiles": [ + { + "topName": "Destroy Dummy Bot", + "orderNumber": 0, + "path": "/interface/action/child/destroyDummyBot.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 129, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "735": { + "contexts": [ + "The team to remove the dummy bot from. The 'All'", + "option only works in free-for-all game modes,", + "while the 'team' options only work in team-based game modes." + ], + "usedFiles": [ + { + "topName": "Destroy Dummy Bot", + "orderNumber": 1, + "path": "/interface/action/child/destroyDummyBot.ts", + "indent": 4 + } + ] + }, + "736": { + "contexts": [ + "The slot to remove the dummy bot from." + ], + "usedFiles": [ + { + "topName": "Destroy Dummy Bot", + "orderNumber": 2, + "path": "/interface/action/child/destroyDummyBot.ts", + "indent": 4 + } + ] + }, + "737": { + "contexts": [ + "Removes all dummy bots from the match." + ], + "usedFiles": [ + { + "topName": "Destroy All Dummy Bot", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllDummyBot.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 130, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "738": { + "contexts": [ + "Sets or adds to the throttle (directional input control)", + "of a player or players such that they begin moving", + "in a particular direction.", + "Any previous throttle in directon is cancelled." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 0, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 131, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "739": { + "contexts": [ + "The player or players whose throttle will be set or added to." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 1, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "740": { + "contexts": [ + "The unit direction in which the throttle will be", + "set or added to. This value is normalized internally." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 2, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "741": { + "contexts": [ + "The amount of throttle (or change to throttle).", + "A value of 1 denotes full throttle." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 3, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "742": { + "contexts": [ + "Specifies whether direction is relative to world", + "coordinates or the local coordinates of the player or players." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 4, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "743": { + "contexts": [ + "Specifies whether preexisting", + "throttle is replaced or added to." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 5, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "744": { + "contexts": [ + "Specifies which of this action's inputs will be", + "continuously reevaluated. This action will keep asking", + "for and using new values from reevaluated inputs." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 6, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "745": { + "contexts": [ + "Cancels the behavior caused by start throttle in direction." + ], + "usedFiles": [ + { + "topName": "Stop Throttle In Direction", + "orderNumber": 0, + "path": "/interface/action/child/stopThrottleInDirection.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 132, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "746": { + "contexts": [ + "The player or players whose", + "default throttle control will be restored." + ], + "usedFiles": [ + { + "topName": "Stop Throttle In Direction", + "orderNumber": 1, + "path": "/interface/action/child/stopThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "747": { + "contexts": [ + "Creates an in-world beam effect entity.", + "This effect entity will persist until destroyed.", + "To obtain a reference to this entity,", + "use the last created entity value.", + "This action will fail if too many entities have been created." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 0, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 133, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "748": { + "contexts": [ + "One or more players who will be able to see the effect." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 1, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "749": { + "contexts": [ + "The type of effect to be created." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 2, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "750": { + "contexts": [ + "The effect's start position. If this value is a player,", + "then the effect will move along with the player.", + "therwise, the value is interpreted as a position in the world." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 3, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "751": { + "contexts": [ + "The effect's end position. If this value is a player,", + "then the effect will move along with the player.", + "Otherwise, the value is interpreted as a position in the world." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 4, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "752": { + "contexts": [ + "The color of the beam effect to be created.", + "If a particular team is chosen, The effect will either", + "be red or blue, depending on whether the team hostile to viewer.", + "Does not apply to sound effects. Only the 'Good'", + "and 'Bad' beam effects can have color applied." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 5, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "753": { + "contexts": [ + "Specifies which of this action's inputs will be", + "continuously reevaluated. The effect will keep asking", + "for and using new values from reevaluated inputs." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 6, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "754": { + "contexts": [ + "Whether a player is a dummy bot." + ], + "usedFiles": [ + { + "topName": "Is Dummy Bot", + "orderNumber": 0, + "path": "/interface/value/child/isDummyBot.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 198, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "755": { + "contexts": [ + "Player to consider." + ], + "usedFiles": [ + { + "topName": "Is Dummy Bot", + "orderNumber": 1, + "path": "/interface/value/child/isDummyBot.ts", + "indent": 4 + } + ] + }, + "756": { + "contexts": [ + "Whether spectators can see the text or not." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 11, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + }, + { + "topName": "Create In World Text", + "orderNumber": 8, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "757": { + "contexts": [ + "Specifies the color of the in-world text to use." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 7, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "_file": { + "/type/heroConstant.ts": [ + "export type HeroConstantType", + " = 'Reaper'", + " | 'Tracer'", + " | 'Mercy'", + " | 'Hanzo'", + " | 'Torbjรถrn'", + " | 'Reinhardt'", + " | 'Pharah'", + " | 'Winston'", + " | 'Widowmaker'", + " | 'Bastion'", + " | 'Symmetra'", + " | 'Zenyatta'", + " | 'Genji'", + " | 'Roadhog'", + " | 'Mccree'", + " | 'Junkrat'", + " | 'Zarya'", + " | 'Soldier: 76'", + " | 'Lรบcio'", + " | 'D.Va'", + " | 'Mei'", + " | 'Sombra'", + " | 'Doomfist'", + " | 'Ana'", + " | 'Orisa'", + " | 'Brigitte'", + " | 'Moira'", + " | 'Wrecking Ball'", + " | 'Ashe'", + " | 'Baptiste'", + " | 'Sigma'" + ] + } +} \ No newline at end of file diff --git a/bin/core/language/data/kor.json b/bin/core/language/data/kor.json new file mode 100644 index 0000000..13361f3 --- /dev/null +++ b/bin/core/language/data/kor.json @@ -0,0 +1,13412 @@ +{ + "0": { + "contexts": [ + "์•ก์…˜ ๋ชฉ๋ก ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 0, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort", + "orderNumber": 0, + "path": "/interface/action/child/abort.ts", + "indent": 0 + } + ] + }, + "1": { + "contexts": [ + "์ด ์•ก์…˜ ์กฐ๊ฑด์ด TRUE์ผ ๋•Œ ์•ก์…˜ ๋ชฉ๋ก ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "๊ทธ ์™ธ์— ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 1, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If", + "orderNumber": 0, + "path": "/interface/action/child/abortIf.ts", + "indent": 0 + } + ] + }, + "2": { + "contexts": [ + "์กฐ๊ฑด ๋ชฉ๋ก์— ์žˆ๋Š” ์กฐ๊ฑด ์ค‘", + "ํ•˜๋‚˜ ์ด์ƒ์ด FALSE์ธ ๊ฒฝ์šฐ ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "๋ชจ๋“  ์กฐ๊ฑด์ด TRUE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 2, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If Condition Is False", + "orderNumber": 0, + "path": "/interface/action/child/abortIfConditionIsFalse.ts", + "indent": 0 + } + ] + }, + "3": { + "contexts": [ + "์กฐ๊ฑด ๋ชฉ๋ก์— ์žˆ๋Š” ์กฐ๊ฑด ์ค‘", + "ํ•˜๋‚˜ ์ด์ƒ์ด TRUE์ธ ๊ฒฝ์šฐ ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "๋ชจ๋“  ์กฐ๊ฑด์ด FALSE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 3, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If Condition Is True", + "orderNumber": 0, + "path": "/interface/action/child/abortIfConditionIsTrue.ts", + "indent": 0 + } + ] + }, + "4": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด DISALLOW BUTTON", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 4, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Allow Button", + "orderNumber": 0, + "path": "/interface/action/child/allowButton.ts", + "indent": 0 + } + ] + }, + "5": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์›€์ง์ž„์— ์ฆ‰๊ฐ์ ์ธ ์†๋„ ๋ณ€ํ™”๋ฅผ ์ค๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 5, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Apply Impluse", + "orderNumber": 0, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 0 + } + ] + }, + "6": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์—‰์—๊ฒŒ ๋ณด์ด๋„๋ก", + "ํฐ ๋ฉ”์‹œ์ง€๋ฅผ ์กฐ์ค€์„  ์œ„์ชฝ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 6, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Big Message", + "orderNumber": 0, + "path": "/interface/action/child/bigMessage.ts", + "indent": 0 + } + ] + }, + "7": { + "contexts": [ + "์ „์—ญ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ง€์ •๋œ ๋น„์œจ๋กœ", + "์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "(์ „์—ญ ๋ณ€์ˆ˜(GLOBAL VARIABLE)๋Š”", + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 7, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 0, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 0 + } + ] + }, + "8": { + "contexts": [ + "์ „์—ญ ๋ณ€์ˆ˜ ๊ฐ’์„ ์‹œ๊ฐ„์ด ์ง€๋‚จ์—", + "๋”ฐ๋ผ ์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "(์ „์—ญ ๋ณ€์ˆ˜(GLOBAL VARIABLE)๋Š”", + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 8, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 0, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 0 + } + ] + }, + "9": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„ ์ง€์ •๋œ", + "๋น„์œจ๋กœ ์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "(ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜(PLAYER VARIABLE)๋Š”", + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 9, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 0, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 0 + } + ] + }, + "10": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„ ์‹œ๊ฐ„์˜", + "๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "(ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜(PLAYER VARIABLE)๋Š”", + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 10, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 0, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 0 + } + ] + }, + "11": { + "contexts": [ + "SET STATUS ์•ก์…˜์„ ํ†ตํ•ด", + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ ์šฉ๋œ", + "์ƒํƒœ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 11, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Clear Status", + "orderNumber": 0, + "path": "/interface/action/child/clearStatus.ts", + "indent": 0 + } + ] + }, + "12": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ์ • ํ‘œํ˜„, ์Œ์„ฑ ๋Œ€์‚ฌ,", + "๋˜๋Š” ๊ธฐํƒ€ ์žฅ์ฐฉํ•œ ์˜์‚ฌ์†Œํ†ต", + "์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 12, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Communicate", + "orderNumber": 0, + "path": "/interface/action/child/communicate.ts", + "indent": 0 + } + ] + }, + "13": { + "contexts": [ + "์›”๋“œ ๋‚ด์— ํšจ๊ณผ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ํšจ๊ณผ ๊ฐœ์ฒด๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ํšจ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST CREATED ENTITY ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "๊ฐœ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋  ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 13, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Effect", + "orderNumber": 0, + "path": "/interface/action/child/createEffect.ts", + "indent": 0 + } + ] + }, + "14": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด ํ™”๋ฉด์˜ ์ง€์ •๋œ ์œ„์น˜์—", + "ํ‘œ์‹œํ•  HUD ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ํ…์ŠคํŠธ๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ํ…์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST TEXT ID ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "ํ…์ŠคํŠธ ์š”์†Œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋  ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 14, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/createHudText.ts", + "indent": 0 + } + ] + }, + "15": { + "contexts": [ + "์›”๋“œ ๋‚ด์— ์•„์ด์ฝ˜ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•„์ด์ฝ˜ ๊ฐœ์ฒด๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST CREATED ENTITY ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "๊ฐœ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋  ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 15, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Icon", + "orderNumber": 0, + "path": "/interface/action/child/createIcon.ts", + "indent": 0 + } + ] + }, + "16": { + "contexts": [ + "์›”๋“œ์˜ ์ง€์ •๋œ ์œ„์น˜์—์„œ ์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ", + "ํ‘œ์‹œํ•  ์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ํ…์ŠคํŠธ๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ํ…์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST TEXT ID ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "ํ…์ŠคํŠธ ์š”์†Œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ์ด ์•ก์…˜์€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 16, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create In World Text", + "orderNumber": 0, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 0 + } + ] + }, + "17": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ฆ‰์‹œ ํ”ผํ•ด๋ฅผ ์ ์šฉํ•˜๋ฉฐ,", + "ํ”ผํ•ด๋ฅผ ๋ฐ›์€ ๋Œ€์ƒ์ด ์ฃฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 17, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Damage", + "orderNumber": 0, + "path": "/interface/action/child/damage.ts", + "indent": 0 + } + ] + }, + "18": { + "contexts": [ + "๊ฒฝ๊ธฐ๋ฅผ ์ฆ‰์‹œ ๋ฌด์Šน๋ถ€๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 18, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Match Draw", + "orderNumber": 0, + "path": "/interface/action/child/declareMatchDraw.ts", + "indent": 0 + } + ] + }, + "19": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์Šน์ž๋กœ ํ•˜์—ฌ ๊ฒฝ๊ธฐ๋ฅผ ์ฆ‰์‹œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 19, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Player Victory", + "orderNumber": 0, + "path": "/interface/action/child/declarePlayerVictory.ts", + "indent": 0 + } + ] + }, + "20": { + "contexts": [ + "ํŒ€ ํ•˜๋‚˜๋ฅผ ํ˜„์žฌ ๋ผ์šด๋“œ์˜ ์Šน์ž๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์Ÿํƒˆ ๋ฐ ์„ฌ๋ฉธ์ „ ๊ฒŒ์ž„ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 20, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Round Victory", + "orderNumber": 0, + "path": "/interface/action/child/declareRoundVictory.ts", + "indent": 0 + } + ] + }, + "21": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์„ ์Šน์ž๋กœ ํ•˜์—ฌ ๊ฒฝ๊ธฐ๋ฅผ ์ฆ‰์‹œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 21, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Team Victory", + "orderNumber": 0, + "path": "/interface/action/child/declareTeamVictory.ts", + "indent": 0 + } + ] + }, + "22": { + "contexts": [ + "CREATE EFFECT์— ์˜ํ•ด ์ƒ์„ฑ๋œ", + "๋ชจ๋“  ํšจ๊ณผ ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 22, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Effects", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllEffects.ts", + "indent": 0 + } + ] + }, + "23": { + "contexts": [ + "CREATE HUD TEXT ์•ก์…˜์— ์˜ํ•ด", + "์ƒ์„ฑ๋œ ๋ชจ๋“  HUD ํ…์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 23, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllHudText.ts", + "indent": 0 + } + ] + }, + "24": { + "contexts": [ + "CREATE ICON์— ์˜ํ•ด ์ƒ์„ฑ๋œ", + "๋ชจ๋“  ์•„์ด์ฝ˜ ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 24, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Icons", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllIcons.ts", + "indent": 0 + } + ] + }, + "25": { + "contexts": [ + "CREATE IN-WORLD TEXT์— ์˜ํ•ด", + "์ƒ์„ฑ๋œ ์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 25, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All In World Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllInWorldText.ts", + "indent": 0 + } + ] + }, + "26": { + "contexts": [ + "CREATE EFFECT์— ์˜ํ•ด ์ƒ์„ฑ๋œ", + "ํšจ๊ณผ ๊ฐœ์ฒด ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 26, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Effect", + "orderNumber": 0, + "path": "/interface/action/child/destroyEffect.ts", + "indent": 0 + } + ] + }, + "27": { + "contexts": [ + "CREATE HUD TEXT ์•ก์…˜์— ์˜ํ•ด", + "์ƒ์„ฑ๋œ HUD ํ…์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 27, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyHudText.ts", + "indent": 0 + } + ] + }, + "28": { + "contexts": [ + "CREATE ICON์— ์˜ํ•ด ์ƒ์„ฑ๋œ", + "์•„์ด์ฝ˜ ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 28, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Icon", + "orderNumber": 0, + "path": "/interface/action/child/destroyIcon.ts", + "indent": 0 + } + ] + }, + "29": { + "contexts": [ + "CREATE IN-WORD TEXT์— ์˜ํ•ด", + "์ƒ์„ฑ๋œ ์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 29, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy In World Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyInWorldText.ts", + "indent": 0 + } + ] + }, + "30": { + "contexts": [ + "๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๊ธฐ๊ฐ€", + "์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์•„๋‚˜์šด์„œ์˜", + "๊ฒŒ์ž„ ๋ชจ๋“œ ์•ˆ๋‚ด ์Œ์„ฑ์„", + "์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 30, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Announcer", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeAnnouncer.ts", + "indent": 0 + } + ] + }, + "31": { + "contexts": [ + "๊ฒŒ์ž„ ๋ชจ๋“œ ์ž์ฒด์—์„œ ๊ฒฝ๊ธฐ", + "์ข…๋ฃŒ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.", + "์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์–ด๋กœ๋งŒ ๊ฒฝ๊ธฐ๋ฅผ", + "๋งˆ์น  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 31, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Completion", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeCompletion.ts", + "indent": 0 + } + ] + }, + "32": { + "contexts": [ + "๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜", + "๊ฒฝ๊ธฐ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€", + "๋ชจ๋“  ๊ฒŒ์ž„ ๋ชจ๋“œ ์Œ์•…์„", + "์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 32, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Music", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeMusic.ts", + "indent": 0 + } + ] + }, + "33": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์ž๋™", + "๋ถ€ํ™œ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ ,", + "์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•œ", + "๋ถ€ํ™œ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 33, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Respawning", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeRespawning.ts", + "indent": 0 + } + ] + }, + "34": { + "contexts": [ + "๊ฒŒ์ž„ ๋ชจ๋“œ ์ž์ฒด์—์„œ", + "ํ”Œ๋ ˆ์ด์–ด ์ ์ˆ˜์™€ ํŒ€ ์ ์ˆ˜๋ฅผ", + "๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋ฉฐ,", + "์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์–ด๋กœ๋งŒ", + "์ ์ˆ˜ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 34, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Scoring", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeScoring.ts", + "indent": 0 + } + ] + }, + "35": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ", + "ENABLE DEATH SPECTATE ALL PLAYERS", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 35, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Death Spectate All Players", + "orderNumber": 0, + "path": "/interface/action/child/disableDeathSpectateAllPlayers.ts", + "indent": 0 + } + ] + }, + "36": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ", + "ENABLE DEATH SPECTATE TARGET HUD", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 36, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Death Spectate Target Hud", + "orderNumber": 0, + "path": "/interface/action/child/disableDeathSpectateTargetHud.ts", + "indent": 0 + } + ] + }, + "37": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์„", + "์‚ฌ์šฉ ๋ชป ํ•˜๊ฒŒ ํ•˜์—ฌ ๋ˆŒ๋Ÿฌ๋„", + "์•„๋ฌด ํšจ๊ณผ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 37, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disallow Button", + "orderNumber": 0, + "path": "/interface/action/child/disallowButton.ts", + "indent": 0 + } + ] + }, + "38": { + "contexts": [ + "DISABLE BUILT-IN GAME MODE ANNOUNCER", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 38, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Announcer", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeAnnouncer.ts", + "indent": 0 + } + ] + }, + "39": { + "contexts": [ + "DISABLE BUILT-IN GAME MODE COMPLETION", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 39, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Completion", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeCompletion.ts", + "indent": 0 + } + ] + }, + "40": { + "contexts": [ + "DISABLE BUILT-IN GAME MODE MUSIC", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 40, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Music", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeMusic.ts", + "indent": 0 + } + ] + }, + "41": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด", + "DISABLE BUILT-IN GAME MODE RESPAWNING", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 41, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Respawning", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeRespawning.ts", + "indent": 0 + } + ] + }, + "42": { + "contexts": [ + "DISABLE BUILT-IN GAME MODE SCORING", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 42, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Scoring", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeScoring.ts", + "indent": 0 + } + ] + }, + "43": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ์‚ฌ๋ง ์‹œ,", + "์•„๊ตฐ๋ฟ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ", + "๊ด€์ „ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 43, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Death Spectate All Players", + "orderNumber": 0, + "path": "/interface/action/child/enableDeathSpectateAllPlayers.ts", + "indent": 0 + } + ] + }, + "44": { + "contexts": [ + "์‚ฌ๋ง ํ›„ ๊ด€์ „ ์‹œ", + "ํ”Œ๋ ˆ์ด์–ด ์ž์‹ ์˜ HUD ๋Œ€์‹ ", + "๊ด€์ „ ๋Œ€์ƒ์˜ HUD๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 44, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Death Spectate Target Hud", + "orderNumber": 0, + "path": "/interface/action/child/enableDeathSpectateTargetHud.ts", + "indent": 0 + } + ] + }, + "45": { + "contexts": [ + "๊ฒฝ๊ธฐ๋ฅผ ํ•ด๋‹น ๊ฒŒ์ž„ ๋ชจ๋“œ์˜", + "์˜์›… ์„ ํƒ ๋‹จ๊ณ„๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 45, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Go To Assemble Heroes", + "orderNumber": 0, + "path": "/interface/action/child/goToAssembleHeroes.ts", + "indent": 0 + } + ] + }, + "46": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ฆ‰์‹œ ์น˜์œ ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ๊ธฐ๋Šฅ์œผ๋กœ ์ฃฝ์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "๋ถ€ํ™œํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 46, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Heal", + "orderNumber": 0, + "path": "/interface/action/child/heal.ts", + "indent": 0 + } + ] + }, + "47": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ฆ‰์‹œ ์ฒ˜์น˜ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 47, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Kill", + "orderNumber": 0, + "path": "/interface/action/child/kill.ts", + "indent": 0 + } + ] + }, + "48": { + "contexts": [ + "์•ก์…˜ ๋ชฉ๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฌดํ•œ ๋ฐ˜๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹œ์ž‘๊ณผ", + "์ด ์•ก์…˜ ์‚ฌ์ด์— WAIT ์•ก์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 48, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop", + "orderNumber": 0, + "path": "/interface/action/child/loop.ts", + "indent": 0 + } + ] + }, + "49": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์กฐ๊ฑด์ด TRUE์ธ ๊ฒฝ์šฐ", + "์•ก์…˜ ๋ชฉ๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "FALSE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฌดํ•œ ๋ฐ˜๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹œ์ž‘๊ณผ", + "์ด ์•ก์…˜ ์‚ฌ์ด์— WAIT ์•ก์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 49, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If", + "orderNumber": 0, + "path": "/interface/action/child/loopIf.ts", + "indent": 0 + } + ] + }, + "50": { + "contexts": [ + "์กฐ๊ฑด ๋ชฉ๋ก์˜ ์กฐ๊ฑด์ด ํ•˜๋‚˜๋ผ๋„ FALSE์ธ ๊ฒฝ์šฐ", + "์•ก์…˜ ๋ชฉ๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "๋ชจ๋‘ TRUE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฌดํ•œ ๋ฐ˜๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹œ์ž‘๊ณผ", + "์ด ์•ก์…˜ ์‚ฌ์ด์— WAIT ์•ก์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 50, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If Condition Is False", + "orderNumber": 0, + "path": "/interface/action/child/loopIfConditionIsFalse.ts", + "indent": 0 + } + ] + }, + "51": { + "contexts": [ + "์กฐ๊ฑด ๋ชฉ๋ก์˜ ์กฐ๊ฑด์ด ํ•˜๋‚˜๋ผ๋„ TRUE์ธ ๊ฒฝ์šฐ", + "์•ก์…˜ ๋ชฉ๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "๋ชจ๋‘ FALSE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฌดํ•œ ๋ฐ˜๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹œ์ž‘๊ณผ", + "์ด ์•ก์…˜ ์‚ฌ์ด์— WAIT ์•ก์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 51, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If Condition Is True", + "orderNumber": 0, + "path": "/interface/action/child/loopIfConditionIsTrue.ts", + "indent": 0 + } + ] + }, + "52": { + "contexts": [ + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ", + "์ „์—ญ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 52, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 0 + } + ] + }, + "53": { + "contexts": [ + "์ธ๋ฑ์Šค์—์„œ ๊ฒŒ์ž„ ์ž์ฒด์—", + "์ข…์†๋œ ์ „์—ญ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 53, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "54": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜(์ฒ˜์น˜์ˆ˜)๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ", + "๋ชจ๋“œ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 54, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Score", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 0 + } + ] + }, + "55": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง„ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 55, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 0 + } + ] + }, + "56": { + "contexts": [ + "์ธ๋ฑ์Šค์—์„œ ์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "๊ฐ€์ง„ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 56, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "57": { + "contexts": [ + "ํ•œ ํŒ€ ๋˜๋Š” ๋‘ ํŒ€ ๋ชจ๋‘์˜ ์ ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ๋‚˜ ํŒ€ ์ ์ˆ˜๊ฐ€", + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“œ์—์„œ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 57, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Team Score", + "orderNumber": 0, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 0 + } + ] + }, + "58": { + "contexts": [ + "๊ฒฝ๊ธฐ ์‹œ๊ฐ„์„ ์ผ์‹œ์ •์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด, ๋ชฉํ‘œ ๋กœ์ง, ๊ฒŒ์ž„ ๋ชจ๋“œ ์ง„ํ–‰ ๊ธฐ์ค€ ๋“ฑ์€", + "์ผ์‹œ์ •์ง€์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 58, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Pause Match Time", + "orderNumber": 0, + "path": "/interface/action/child/pauseMatchTime.ts", + "indent": 0 + } + ] + }, + "59": { + "contexts": [ + "์›”๋“œ์˜ ํ•œ ์œ„์น˜์— ํšจ๊ณผ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.", + "์ด ํšจ๊ณผ๋Š” ๊ฐฑ์‹ ๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ํ•„์š” ์—†๋„๋ก", + "์งง๊ฒŒ ์œ ์ง€๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 59, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Play Effect", + "orderNumber": 0, + "path": "/interface/action/child/playEffect.ts", + "indent": 0 + } + ] + }, + "60": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์Šคํ‚จ์„ ์‚ฌ์šฉํ•˜์—ฌ,", + "์ง€์ •๋œ ์˜์›…์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ", + "ํ—ˆ์šฉํ•˜๋Š” ๋งŒํผ ๋จผ์ € ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.", + "๋น ๋ฅด๊ฒŒ ์˜์›…์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์œผ๋ฉฐ,", + "๋‹ค์Œ ์˜์›…์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 60, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Preload Hero", + "orderNumber": 0, + "path": "/interface/action/child/preloadHero.ts", + "indent": 0 + } + ] + }, + "61": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด", + "ํ•œ ํ”„๋ ˆ์ž„ ๋™์•ˆ", + "๊ฐ€์ƒ์œผ๋กœ ๋ฒ„ํŠผ ํ•˜๋‚˜๋ฅผ", + "๋ˆ„๋ฅด๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 61, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Press Button", + "orderNumber": 0, + "path": "/interface/action/child/pressButton.ts", + "indent": 0 + } + ] + }, + "62": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›… ๋ชฉ๋ก์„", + "๊ฒŒ์ž„ ์„ค์ •์— ์ง€์ •ํ•œ ๋Œ€๋กœ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์˜์›…์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด", + "ํ”Œ๋ ˆ์ด์–ด๋Š” ๊ฐ•์ œ๋กœ ๋‹ค๋ฅธ ์˜์›…์„ ์„ ํƒํ•˜์—ฌ", + "์ ์ ˆํ•œ ์ƒ์„ฑ ์ง€์ ์—์„œ ๋ถ€ํ™œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 62, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Reset Player Hero Availability", + "orderNumber": 0, + "path": "/interface/action/child/resetPlayerHeroAvailability.ts", + "indent": 0 + } + ] + }, + "63": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ƒ์กด ์—ฌ๋ถ€์™€ ๊ด€๊ณ„ ์—†์ด,", + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ ์ ˆํ•œ ์ƒ์„ฑ ์ง€์ ์—์„œ", + "์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ์œผ๋กœ ๋ถ€ํ™œ์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 63, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Respawn", + "orderNumber": 0, + "path": "/interface/action/child/respawn.ts", + "indent": 0 + } + ] + }, + "64": { + "contexts": [ + "์ „ํ™˜ ์—†์ด ํ”Œ๋ ˆ์ด์–ด๋ฅผ", + "์‚ฌ๋งํ•œ ์ž๋ฆฌ์—์„œ ์ฆ‰์‹œ ๋ถ€ํ™œ์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 64, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Resurrect", + "orderNumber": 0, + "path": "/interface/action/child/resurrect.ts", + "indent": 0 + } + ] + }, + "65": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ธฐ์ˆ 1 ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 65, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 0 + } + ] + }, + "66": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ธฐ์ˆ 2 ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 66, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 0 + } + ] + }, + "67": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€ ์†๋„๋ฅผ", + "์ผ๋ฐ˜ ์กฐ์ค€ ์†๋„ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 67, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Aim Speed", + "orderNumber": 0, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 0 + } + ] + }, + "68": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฃผ๋Š” ํ”ผํ•ด๋ฅผ", + "์ˆœ์ˆ˜ ํ”ผํ•ด๋Ÿ‰ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 68, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Damage Dealt", + "orderNumber": 0, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 0 + } + ] + }, + "69": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ›๋Š” ํ”ผํ•ด๋ฅผ", + "์ˆœ์ˆ˜ ํ”ผํ•ด๋Ÿ‰ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 69, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Damage Received", + "orderNumber": 0, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 0 + } + ] + }, + "70": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง€์ •๋œ ๋ฐฉํ–ฅ์„", + "๋ฐ”๋ผ๋ณด๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 70, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Facing", + "orderNumber": 0, + "path": "/interface/action/child/setFacing.ts", + "indent": 0 + } + ] + }, + "71": { + "contexts": [ + "๊ฒŒ์ž„ ์ž์ฒด์— ์†ํ•œ", + "์ „์—ญ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 71, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 0 + } + ] + }, + "72": { + "contexts": [ + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ์ „์—ญ ๋ณ€์ˆ˜์˜", + "๋ฐฐ์—ด์„ ์ฐพ๊ฑฐ๋‚˜ ์ƒ์„ฑํ•œ ํ›„,", + "๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋ฐฐ์—ด์˜", + "ํŠน์ • ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 72, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "73": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ด๋™ ์ค‘๋ ฅ์„", + "์ผ๋ฐ˜ ์ด๋™ ์ค‘๋ ฅ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 73, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Gravity", + "orderNumber": 0, + "path": "/interface/action/child/setGravity.ts", + "indent": 0 + } + ] + }, + "74": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฃผ๋Š” ์น˜์œ ๋Ÿ‰์„", + "์ˆœ์ˆ˜ ์น˜์œ ๋Ÿ‰ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 74, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 0, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 0 + } + ] + }, + "75": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ›๋Š” ์น˜์œ ๋Ÿ‰์„", + "์ˆœ์ˆ˜ ์น˜์œ ๋Ÿ‰ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 75, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Healing Received", + "orderNumber": 0, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 0 + } + ] + }, + "76": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋‹ค๋ฅธ", + "๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด ๋˜๋Š”", + "์ ์—๊ฒŒ๋งŒ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 76, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Invisible", + "orderNumber": 0, + "path": "/interface/action/child/setInvisible.ts", + "indent": 0 + } + ] + }, + "77": { + "contexts": [ + "(ํ™”๋ฉด ์ƒ๋‹จ์— ํ‘œ์‹œ๋˜๋Š”)", + "ํ˜„์žฌ ๊ฒฝ๊ธฐ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด๋ฅผ ํ†ตํ•ด ๊ฒฝ๊ธฐ ์ง€์†์‹œ๊ฐ„์„", + "์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ์˜์›… ์„ ํƒ ๋˜๋Š”", + "์ค€๋น„ ์‹œ๊ฐ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 77, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Match Time", + "orderNumber": 0, + "path": "/interface/action/child/setMatchTime.ts", + "indent": 0 + } + ] + }, + "78": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ตœ๋Œ€", + "์ƒ๋ช…๋ ฅ์„ ์ˆœ์ˆ˜ ์ƒ๋ช…๋ ฅ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉด", + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ƒ๋ช…๋ ฅ์ด", + "์ƒˆ๋กœ์šด ์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ ์ˆ˜์น˜๋ฅผ", + "๋„˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 78, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Max Health", + "orderNumber": 0, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 0 + } + ] + }, + "79": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ด๋™ ์†๋„๋ฅผ", + "์ˆœ์ˆ˜ ์ด๋™ ์†๋„ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 79, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Move Speed", + "orderNumber": 0, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 0 + } + ] + }, + "80": { + "contexts": [ + "์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ", + "๋ชฉํ‘œ๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด,", + "ํ™”๋ฉด ์ค‘์•™ ์ƒ๋‹จ์— ํ…์ŠคํŠธ๊ฐ€", + "ํ‘œ์‹œ๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 80, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Objective Description", + "orderNumber": 0, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 0 + } + ] + }, + "81": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”", + "์˜์›… ๋ชฉ๋ก์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์˜์›…์„", + "๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด", + "ํ”Œ๋ ˆ์ด์–ด๋Š” ๊ฐ•์ œ๋กœ", + "๋‹ค๋ฅธ ์˜์›…์„ ์„ ํƒํ•˜์—ฌ", + "์ ์ ˆํ•œ ์ƒ์„ฑ ์ง€์ ์—์„œ ๋ถ€ํ™œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 81, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 0 + } + ] + }, + "82": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜", + "(์ฒ˜์น˜์ˆ˜)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ", + "๋ชจ๋“œ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 82, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Score", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 0 + } + ] + }, + "83": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์—", + "์†ํ•œ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜์—", + "๊ฐ’ ํ•˜๋‚˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 83, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 0 + } + ] + }, + "84": { + "contexts": [ + "ํ•œ ํ”Œ๋ ˆ์ด์–ด์— ์ข…์†๋œ", + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜์˜ ๋ฐฐ์—ด์„", + "์ฐพ๊ฑฐ๋‚˜ ์ƒ์„ฑํ•œ ํ›„,", + "๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋ฐฐ์—ด์˜", + "ํŠน์ • ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 84, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "85": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ธฐ๋ณธ ๋ฐœ์‚ฌ", + "ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 85, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 0 + } + ] + }, + "86": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ์„", + "์ผ๋ฐ˜ ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ์˜", + "์ง€์ •๋œ ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 86, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Projectile Gravity", + "orderNumber": 0, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 0 + } + ] + }, + "87": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํˆฌ์‚ฌ์ฒด ์†๋„๋ฅผ", + "์ผ๋ฐ˜ ํˆฌ์‚ฌ์ฒด ์†๋„์˜", + "์ง€์ •๋œ ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 87, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Projectile Speed", + "orderNumber": 0, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 0 + } + ] + }, + "88": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์‚ฌ๋ง์—์„œ", + "๋ถ€ํ™œ ์‚ฌ์ด์˜ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜ ์‹คํ–‰ ์‹œ์ ์—์„œ", + "์ด๋ฏธ ์‚ฌ๋งํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฒฝ์šฐ", + "๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋‹ค์Œ", + "์‚ฌ๋ง ์‹œ๋ถ€ํ„ฐ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 88, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Respawn Max Time", + "orderNumber": 0, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 0 + } + ] + }, + "89": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณด์กฐ ๋ฐœ์‚ฌ", + "ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 89, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 0 + } + ] + }, + "90": { + "contexts": [ + "๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด, ํˆฌ์‚ฌ์ฒด,", + "ํšจ๊ณผ, ๊ฒŒ์ž„ ๋ชจ๋“œ ๋กœ์ง ๋“ฑ", + "๊ฒŒ์ž„ ์ „์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜์—ฌ", + "์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋น„์œจ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 90, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Slow Motion", + "orderNumber": 0, + "path": "/interface/action/child/setSlowMotion.ts", + "indent": 0 + } + ] + }, + "91": { + "contexts": [ + "์ง€์ •๋œ ์ƒํƒœ๋ฅผ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์ƒํƒœ๋Š” ์ง€์ •๋œ ์ง€์† ์‹œ๊ฐ„ ๋™์•ˆ,", + "๋˜๋Š” CLEAR STATUS ์•ก์…˜์— ์˜ํ•ด", + "์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 91, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Status", + "orderNumber": 0, + "path": "/interface/action/child/setStatus.ts", + "indent": 0 + } + ] + }, + "92": { + "contexts": [ + "ํ•œ ํŒ€ ๋˜๋Š” ๋‘ ํŒ€", + "๋ชจ๋‘์˜ ์ ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„", + "์ „ํˆฌ ๋ชจ๋“œ๋‚˜ ํŒ€ ์ ์ˆ˜๊ฐ€", + "์กด์žฌํ•˜์ง€ ์•Š๋Š”", + "๋ชจ๋“œ์—์„œ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 92, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Team Score", + "orderNumber": 0, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 0 + } + ] + }, + "93": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ถ๊ทน๊ธฐ", + "ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 93, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 0 + } + ] + }, + "94": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ถ๊ทน๊ธฐ ์ถฉ์ „๋Ÿ‰์„", + "์ตœ๋Œ€ ์ถฉ์ „๋Ÿ‰์˜ ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 94, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Charge", + "orderNumber": 0, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 0 + } + ] + }, + "95": { + "contexts": [ + "์•ก์…˜ ๋ชฉ๋ก์— ์žˆ๋Š”", + "์ง€์ •๋œ ์ˆ˜์˜ ์•ก์…˜์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 95, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Skip", + "orderNumber": 0, + "path": "/interface/action/child/skip.ts", + "indent": 0 + } + ] + }, + "96": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์กฐ๊ฑด์ด TRUE์ผ ๋•Œ,", + "์•ก์…˜ ๋ชฉ๋ก์— ์žˆ๋Š” ์ง€์ •๋œ", + "์ˆ˜๋งŒํผ์˜ ์•ก์…˜์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.", + "์ด ์™ธ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 96, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Skip If", + "orderNumber": 0, + "path": "/interface/action/child/skipIf.ts", + "indent": 0 + } + ] + }, + "97": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ", + "๋ณด์ด๋„๋ก ์ž‘์€ ๋ฉ”์‹œ์ง€๋ฅผ", + "์กฐ์ค€์„  ์•„๋ž˜์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 97, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 0, + "path": "/interface/action/child/smallMessage.ts", + "indent": 0 + } + ] + }, + "98": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •๋œ ๋ฐฉํ–ฅ์œผ๋กœ", + "๊ฐ€์†ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 98, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Accelerating", + "orderNumber": 0, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 0 + } + ] + }, + "99": { + "contexts": [ + "์นด๋ฉ”๋ผ๊ฐ€ ์ง€์ •๋œ ๋ฐฉํ–ฅ์„", + "๋ฐ”๋ผ๋ณด๋„๋ก ํ•˜์—ฌ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 99, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Camera", + "orderNumber": 0, + "path": "/interface/action/child/startCamera.ts", + "indent": 0 + } + ] + }, + "100": { + "contexts": [ + "DAMAGER๊ฐ€ RECEIVER์—๊ฒŒ", + "์ฃผ๋Š” ํ”ผํ•ด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "์ด DAMAGE MODIFICATION์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST DAMAGE MODIFICATION ID ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.", + "DAMAGE MODIFICATION์ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 100, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Damage Modification", + "orderNumber": 0, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 0 + } + ] + }, + "101": { + "contexts": [ + "DAMAGE OVER TIME (DOT)", + "์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "์ด DOT๋Š” ์ง€์ •๋œ ์ง€์† ์‹œ๊ฐ„ ๋™์•ˆ", + "๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด", + "์ค‘์ง€๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.", + "์ด DAMAGE OVER TIME์—", + "๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์–ป์œผ๋ ค๋ฉด", + "LAST DAMAGE OVER TIME ID", + "๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 101, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 0 + } + ] + }, + "102": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •๋œ", + "๋ฐฉํ–ฅ์„ ํ–ฅํ•ด ํšŒ์ „์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 102, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Facing", + "orderNumber": 0, + "path": "/interface/action/child/startFacing.ts", + "indent": 0 + } + ] + }, + "103": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •๋œ ์˜์›…์„ ๊ฐ•์ œ ์„ ํƒํ•˜๋„๋ก ํ•˜๋ฉฐ,", + "ํ•„์š”์‹œ ํ˜„์žฌ ์œ„์น˜์— ์ฆ‰์‹œ ๋ถ€ํ™œ์‹œํ‚ต๋‹ˆ๋‹ค.", + "์ด ์˜์›…์€ STOP FORCING PLAYER TO BE HERO", + "์•ก์…˜์ด ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์œ ์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›…์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 103, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 0, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 0 + } + ] + }, + "104": { + "contexts": [ + "์ง€์ •๋œ ๊ฒŒ์ž„ ๋ชจ๋“œ์—์„œ ์›๋ž˜ ์‚ฌ์šฉ๋˜๋Š”", + "์ „ํˆฌ์ค€๋น„์‹ค์ธ์ง€์™€๋Š” ๊ด€๊ณ„์—†์ด,", + "ํŒ€์„ ์ง€์ •๋œ ์ „ํˆฌ์ค€๋น„์‹ค์— ๊ฐ•์ œ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ์ ๋ น, ์ ๋ น/ํ˜ธ์œ„,", + "ํ˜ธ์œ„ ์ „์žฅ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 104, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 0, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 0 + } + ] + }, + "105": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ตœ๋Œ€ ๋ฐ", + "์ตœ์†Œ ์ด๋™ ์ˆ˜์น˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.", + "๊ฐ•์ œ ์ด๋™๋˜๊ฑฐ๋‚˜ ์ด๋™์ด", + "์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 105, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Throttle", + "orderNumber": 0, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 0 + } + ] + }, + "106": { + "contexts": [ + "HEAL OVER TIME ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "์ด HEAL OVER TIME์€ ์ง€์ •๋œ ์ง€์† ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•˜๊ฑฐ๋‚˜", + "์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์ค‘์ง€๋˜๊ธฐ ์ „๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.", + "์ด HEAL OVER TIME์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST HEAL OVER TIME ID ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 106, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 0 + } + ] + }, + "107": { + "contexts": [ + "STOP HOLDING BUTTON", + "์•ก์…˜์— ์˜ํ•ด ์ค‘์ง€๋˜๊ธฐ ์ „๊นŒ์ง€", + "๊ฐ€์ƒ์œผ๋กœ ๋ฒ„ํŠผํ•˜๋‚˜๋ฅผ ๋ˆ„๋ฅด๋„๋ก", + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 107, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Holding Button", + "orderNumber": 0, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 0 + } + ] + }, + "108": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ", + "START ACCELERATING", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ", + "๊ฐ€์†์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 108, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Accelerating", + "orderNumber": 0, + "path": "/interface/action/child/stopAccelerating.ts", + "indent": 0 + } + ] + }, + "109": { + "contexts": [ + "START DAMAGE MODIFICATION ์•ก์…˜์œผ๋กœ", + "์‹œ์ž‘๋œ ๋ชจ๋“  DAMAGE MODIFCATION์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 109, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Damage Modifications", + "orderNumber": 0, + "path": "/interface/action/child/stopAllDamageModifications.ts", + "indent": 0 + } + ] + }, + "110": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ", + "START DAMAGE OVER TIME", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ ๋ชจ๋“ ", + "DAMAGE OVER TIME์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 110, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopAllDamageOverTime.ts", + "indent": 0 + } + ] + }, + "111": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ", + "START HEAL OVER TIME", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ ๋ชจ๋“ ", + "HEAL OVER TIME์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 111, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopAllHealOverTime.ts", + "indent": 0 + } + ] + }, + "112": { + "contexts": [ + "START CAMERA ๋˜๋Š” ํ•œ๋ช… ์ด์ƒ์˜ ํ”Œ๋ ˆ์ด์–ด๋“ค์˜", + "๋ชจ๋“  ์ด๋™ ์ค‘์ธ ์นด๋ฉ”๋ผ ์œ„์น˜๋ฅผ ์ •์ง€์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 112, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Camera", + "orderNumber": 0, + "path": "/interface/action/child/stopCamera.ts", + "indent": 0 + } + ] + }, + "113": { + "contexts": [ + "์ง„ํ–‰ ์ค‘์ธ ์ „์—ญ ๋ณ€์ˆ˜ ์ถ”์ ์„ ์ค‘์ง€ํ•˜๊ณ ", + "ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 113, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Chasing Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/stopChasingGlobalVariable.ts", + "indent": 0 + } + ] + }, + "114": { + "contexts": [ + "์ง„ํ–‰ ์ค‘์ธ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ์ถ”์ ์„ ์ค‘์ง€ํ•˜๊ณ ", + "ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 114, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 0 + } + ] + }, + "115": { + "contexts": [ + "START DAMAGE MODIFICATION ์•ก์…˜์œผ๋กœ", + "์‹œ์ž‘๋œ DAMAGE MODIFICATION ํ•˜๋‚˜๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 115, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Damage Modification", + "orderNumber": 0, + "path": "/interface/action/child/stopDamageModification.ts", + "indent": 0 + } + ] + }, + "116": { + "contexts": [ + "START DAMAGE OVER TIME ์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ", + "DAMAGE OVER TIME ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 116, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopDamageOverTime.ts", + "indent": 0 + } + ] + }, + "117": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด START FACING", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ ํšŒ์ „์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 117, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Facing", + "orderNumber": 0, + "path": "/interface/action/child/stopFacing.ts", + "indent": 0 + } + ] + }, + "118": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์ง€์ •๋œ ์˜์›…", + "๊ฐ•์ œ ์„ ํƒ ์ง€์ •์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "์ด๋ฅผ ํ†ตํ•ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ถ€ํ™œํ•˜์ง€๋Š” ์•Š์ง€๋งŒ,", + "์ดํ›„๋ถ€ํ„ฐ ์˜์›… ์„ ํƒ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 118, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Player To Be Hero", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingPlayerToBeHero.ts", + "indent": 0 + } + ] + }, + "119": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์— ๋Œ€ํ•œ", + "START FORCING SPAWN ROOM", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 119, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Spawn Room", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingSpawnRoom.ts", + "indent": 0 + } + ] + }, + "120": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด", + "START FORCING THROTTLE", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 120, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Throttle", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingThrottle.ts", + "indent": 0 + } + ] + }, + "121": { + "contexts": [ + "START HEAL OVER TIME", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ", + "HEAL OVER TIME", + "์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 121, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopHealOverTime.ts", + "indent": 0 + } + ] + }, + "122": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ", + "START HOLDING BUTTON", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 122, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Holding Button", + "orderNumber": 0, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 0 + } + ] + }, + "123": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ • ์œ„์น˜๋กœ", + "์ˆœ๊ฐ„์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 123, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Teleport", + "orderNumber": 0, + "path": "/interface/action/child/teleport.ts", + "indent": 0 + } + ] + }, + "124": { + "contexts": [ + "์ผ์‹œ์ •์ง€๋œ ๊ฒฝ๊ธฐ์‹œ๊ฐ„์„ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 124, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Unpause Match Time", + "orderNumber": 0, + "path": "/interface/action/child/unpauseMatchTime.ts", + "indent": 0 + } + ] + }, + "125": { + "contexts": [ + "์•ก์…˜ ๋ชฉ๋ก ์‹คํ–‰์„ ์ผ์‹œ์ •์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "WAIT์ด ์ค‘์ง€๋˜์ง€ ์•Š๋Š” ํ•œ,", + "๋‚˜๋จธ์ง€ ์•ก์…˜์€ ์ผ์‹œ์ •์ง€ ํ•ด์ œ ํ›„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 125, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Wait", + "orderNumber": 0, + "path": "/interface/action/child/wait.ts", + "indent": 0 + } + ] + }, + "126": { + "contexts": [ + "์‹คํ–‰ ์ค‘์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Abort If", + "orderNumber": 1, + "path": "/interface/action/child/abortIf.ts", + "indent": 4 + } + ] + }, + "127": { + "contexts": [ + "๋ฒ„ํŠผ์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Allow Button", + "orderNumber": 1, + "path": "/interface/action/child/allowButton.ts", + "indent": 4 + } + ] + }, + "128": { + "contexts": [ + "๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Allow Button", + "orderNumber": 2, + "path": "/interface/action/child/allowButton.ts", + "indent": 4 + } + ] + }, + "129": { + "contexts": [ + "์†๋„๋ฅผ ๋ณ€๊ฒฝํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 1, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "130": { + "contexts": [ + "์ถฉ๊ฒฉ๋Ÿ‰์„ ์ ์šฉํ•  ๋‹จ์œ„ ๋ฐฉํ•ญ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 2, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "131": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ ์†๋„ ๋ณ€๊ฒฝ์˜ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 3, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "132": { + "contexts": [ + "๋ฐฉํ–ฅ์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์›”๋“œ ์ขŒํ‘œ ๋˜๋Š”", + "๋กœ์ปฌ ์ขŒํ‘œ ์ค‘ ์–ด๋А ์ชฝ์— ๋Œ€ํ•ด", + "์ƒ๋Œ€์ ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 4, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "133": { + "contexts": [ + "์ถฉ๊ฒฉ๋Ÿ‰์„ ์ ์šฉํ•˜๊ธฐ ์ „์— DIRECTION๊ณผ", + "๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์ธ ๊ธฐ์กด์˜ ์†๋„๋ฅผ", + "์ƒ์‡„ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 5, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "134": { + "contexts": [ + "ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Big Message", + "orderNumber": 1, + "path": "/interface/action/child/bigMessage.ts", + "indent": 4 + } + ] + }, + "135": { + "contexts": [ + "ํ‘œ์‹œํ•  ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Big Message", + "orderNumber": 2, + "path": "/interface/action/child/bigMessage.ts", + "indent": 4 + }, + { + "topName": "Set Objective Description", + "orderNumber": 1, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 2, + "path": "/interface/action/child/smallMessage.ts", + "indent": 4 + } + ] + }, + "136": { + "contexts": [ + "์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•  ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 1, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 1, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + } + ] + }, + "137": { + "contexts": [ + "์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ ๋„๋‹ฌํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์˜ ์œ ํ˜•์€ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "์ถ”์  ์‹œ์ž‘ ์ „ ๊ธฐ์กด ๋ณ€์ˆ˜ ๊ฐ’์˜ ์œ ํ˜•์ด ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 2, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 2, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + } + ] + }, + "138": { + "contexts": [ + "๋ณ€์ˆ˜๊ฐ’์˜ ์ดˆ๋‹น ๋ณ€ํ™”๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 3, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 1, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + } + ] + }, + "139": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘ ์–ด๋–ค ํ•ญ๋ชฉ์„", + "์ง€์†์ ์œผ๋กœ ์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ์•ก์…˜์€ ์ž…๋ ฅ ์ •๋ณด์˜ ์ƒˆ๋กœ์šด ๊ฐ’์„", + "๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ, ์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 4, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 3, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 2, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 4, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Create Effect", + "orderNumber": 1, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + }, + { + "topName": "Create Hud Text", + "orderNumber": 1, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + }, + { + "topName": "Create Icon", + "orderNumber": 1, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "140": { + "contexts": [ + "ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ’์ด ๋ชฉํ‘œ์น˜์—", + "๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 4, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 3, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "141": { + "contexts": [ + "์ ์ง„์ ์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 3, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 1, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "142": { + "contexts": [ + "์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 4, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + } + ] + }, + "143": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ ๋„๋‹ฌํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์˜ ์œ ํ˜•์€ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "์ถ”์  ์‹œ์ž‘ ์ „ ๊ธฐ์กด ๋ณ€์ˆ˜ ๊ฐ’์˜ ์œ ํ˜•์ด ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 5, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 2, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "144": { + "contexts": [ + "์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 5, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "145": { + "contexts": [ + "์ƒํƒœ๋ฅผ ์ œ๊ฑฐํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Clear Status", + "orderNumber": 1, + "path": "/interface/action/child/clearStatus.ts", + "indent": 4 + } + ] + }, + "146": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ์„œ ์ œ๊ฑฐํ•  ์ƒํƒœ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Clear Status", + "orderNumber": 2, + "path": "/interface/action/child/clearStatus.ts", + "indent": 4 + } + ] + }, + "147": { + "contexts": [ + "์˜์‚ฌ์†Œํ†ต์„ ์‹คํ–‰ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Communicate", + "orderNumber": 1, + "path": "/interface/action/child/communicate.ts", + "indent": 4 + } + ] + }, + "148": { + "contexts": [ + "์˜์‚ฌ์†Œํ†ต ์œ ํ˜•์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Communicate", + "orderNumber": 2, + "path": "/interface/action/child/communicate.ts", + "indent": 4 + } + ] + }, + "149": { + "contexts": [ + "ํ•ด๋‹น ํšจ๊ณผ๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 2, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + }, + { + "topName": "Play Effect", + "orderNumber": 1, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "150": { + "contexts": [ + "์ƒ์„ฑํ•  ํšจ๊ณผ์˜ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 3, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "151": { + "contexts": [ + "์ƒ์„ฑ๋  ํšจ๊ณผ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.", + "ํšจ๊ณผ์Œ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 4, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "152": { + "contexts": [ + "ํšจ๊ณผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํšจ๊ณผ๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๊ณ ,", + "๊ทธ ์ด์™ธ์— ๊ฒฝ์šฐ ์ด ๊ฐ’์€", + "์›”๋“œ ๋‚ด์˜ ์œ„์น˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 5, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "153": { + "contexts": [ + "ํšจ๊ณผ ๋ฐ˜๊ฒฝ(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "ํšจ๊ณผ์Œ์€ ์Œ๋Ÿ‰์ด ๋Œ€์‹  ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 6, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "154": { + "contexts": [ + "ํ•ด๋‹น HUD ํ…์ŠคํŠธ๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 2, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "155": { + "contexts": [ + "ํ‘œ์‹œํ•  ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. (๋น„์›Œ๋‘๊ธฐ ๊ฐ€๋Šฅ)" + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 3, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "156": { + "contexts": [ + "ํ‘œ์‹œํ•  ๋ถ€์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. (๋น„์›Œ๋‘๊ธฐ ๊ฐ€๋Šฅ)" + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 4, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "157": { + "contexts": [ + "ํ‘œ์‹œํ•  ๋ณธ๋ฌธ์ž…๋‹ˆ๋‹ค. (๋น„์›Œ๋‘๊ธฐ ๊ฐ€๋Šฅ)" + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 5, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "158": { + "contexts": [ + "ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•  ํ™”๋ฉด ์ƒ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 6, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "159": { + "contexts": [ + "๋™์ผํ•œ ์œ„์น˜์— ์žˆ๋Š” ๋‹ค๋ฅธ", + "ํ…์ŠคํŠธ์™€์˜ ์ •๋ ฌ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค.", + "์ •๋ ฌ ์ˆœ์„œ ์ƒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€", + "ํ…์ŠคํŠธ๋Š” ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„์˜", + "ํ…์ŠคํŠธ ๋‹ค์Œ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 7, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "160": { + "contexts": [ + "์ƒ์„ฑ๋  HEADER ํ…์ŠคํŠธ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 8, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "161": { + "contexts": [ + "์ƒ์„ฑ๋  SUBHEADER ํ…์ŠคํŠธ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 9, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "162": { + "contexts": [ + "์ƒ์„ฑ๋  ํ…์ŠคํŠธ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 10, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "163": { + "contexts": [ + "์•„์ด์ฝ˜์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 2, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "164": { + "contexts": [ + "์•„์ด์ฝ˜์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํšจ๊ณผ๋Š” ์ง€์ •๋œ", + "ํ”Œ๋ ˆ์ด์–ด ๋จธ๋ฆฌ ์œ„์— ํ‘œ์‹œ๋˜๊ณ ,", + "๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ ์ด ๊ฐ’์€", + "์›”๋“œ ๋‚ด์˜ ์œ„์น˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 3, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "165": { + "contexts": [ + "์ƒ์„ฑํ•  ์•„์ด์ฝ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 4, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "166": { + "contexts": [ + "์ƒ์„ฑ๋  ์•„์ด์ฝ˜์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 5, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "167": { + "contexts": [ + "์ด ์•„์ด์ฝ˜์ด", + "ํ”Œ๋ ˆ์ด์–ด ๋’ค์— ์žˆ์–ด๋„", + "ํ‘œ์‹œ๋˜๋„๋ก ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?" + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 6, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "168": { + "contexts": [ + "์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 1, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "169": { + "contexts": [ + "ํ‘œ์‹œํ•  ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 2, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "170": { + "contexts": [ + "ํ…์ŠคํŠธ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํ…์ŠคํŠธ๋Š” ์ง€์ •๋œ", + "ํ”Œ๋ ˆ์ด์–ด ๋จธ๋ฆฌ ์œ„์— ํ‘œ์‹œ๋˜๊ณ ,", + "๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ ์ด ๊ฐ’์€", + "์›”๋“œ ๋‚ด์˜ ์œ„์น˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 3, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "171": { + "contexts": [ + "ํ…์ŠคํŠธ์˜ ๋ฐฐ์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 4, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "172": { + "contexts": [ + "ํ•ด๋‹น ํ…์ŠคํŠธ๊ฐ€ ๋ฒฝ์„ ๋šซ๊ณ  ๋ณด์ผ์ง€, ์•„๋‹ˆ๋ฉด ๊ฐ€๋ ค์งˆ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 5, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "173": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘ ์–ด๋–ค ํ•ญ๋ชฉ์„", + "์ง€์†์ ์œผ๋กœ ์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ํ…์ŠคํŠธ๋Š” ์ž…๋ ฅ ์ •๋ณด์˜ ์ƒˆ๋กœ์šด ๊ฐ’์„", + "๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ, ์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 6, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "174": { + "contexts": [ + "ํ”ผํ•ด๋ฅผ ๋ฐ›๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 1, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "175": { + "contexts": [ + "ํ”ผํ•ด๋ฅผ ์ฃผ๋Š” ํ–‰๋™์„ ํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "DAMAGER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 2, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "176": { + "contexts": [ + "์ ์šฉํ•  ํ”ผํ•ด๋Ÿ‰์ž…๋‹ˆ๋‹ค.", + "์ด ํ”ผํ•ด๋Ÿ‰์€ ๊ฐ•ํ™” ํšจ๊ณผ,", + "์•ฝํ™” ํšจ๊ณผ, ๋ฐฉ์–ด๋ ฅ์—", + "์˜ํ•ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 3, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "177": { + "contexts": [ + "์ด๊ธด ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Declare Player Victory", + "orderNumber": 1, + "path": "/interface/action/child/declarePlayerVictory.ts", + "indent": 4 + } + ] + }, + "178": { + "contexts": [ + "๋ผ์šด๋“œ์—์„œ ์Šน๋ฆฌํ•œ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Declare Round Victory", + "orderNumber": 1, + "path": "/interface/action/child/declareRoundVictory.ts", + "indent": 4 + } + ] + }, + "179": { + "contexts": [ + "์ด๊ธด ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Declare Team Victory", + "orderNumber": 1, + "path": "/interface/action/child/declareTeamVictory.ts", + "indent": 4 + } + ] + }, + "180": { + "contexts": [ + "์ œ๊ฑฐํ•  ํšจ๊ณผ ๊ฐœ์ฒด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ์ฒด๋Š”", + "LAST CREATED ENTITY ๋˜๋Š”", + "์˜ˆ์ „์— LAST CREATED ENTITY", + "๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Effect", + "orderNumber": 1, + "path": "/interface/action/child/destroyEffect.ts", + "indent": 4 + } + ] + }, + "181": { + "contexts": [ + "์ œ๊ฑฐํ•  HUD ํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ID๋Š”", + "LAST TEXT ID ๋˜๋Š” ์˜ˆ์ „์—", + "LAST TEXT ID๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Hud Text", + "orderNumber": 1, + "path": "/interface/action/child/destroyHudText.ts", + "indent": 4 + } + ] + }, + "182": { + "contexts": [ + "์ œ๊ฑฐํ•  ์•„์ด์ฝ˜ ๊ฐœ์ฒด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ์ฒด๋Š”", + "LAST CREATED ENTITY ๋˜๋Š”", + "์˜ˆ์ „์— LAST CREATED ENTITY", + "๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Icon", + "orderNumber": 1, + "path": "/interface/action/child/destroyIcon.ts", + "indent": 4 + } + ] + }, + "183": { + "contexts": [ + "์ œ๊ฑฐํ•  ์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ID๋Š”", + "LAST TEXT ID ๋˜๋Š” ์˜ˆ์ „์—", + "LAST TEXT ID๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy In World Text", + "orderNumber": 1, + "path": "/interface/action/child/destroyInWorldText.ts", + "indent": 4 + } + ] + }, + "184": { + "contexts": [ + "๋ถ€ํ™œ ์„ค์ •์˜ ์˜ํ–ฅ์„", + "๋ฐ›๊ฒŒ ๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disable Built In Game Mode Respawning", + "orderNumber": 1, + "path": "/interface/action/child/disableBuiltInGameModeRespawning.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Respawning", + "orderNumber": 1, + "path": "/interface/action/child/enableBuiltInGameModeRespawning.ts", + "indent": 4 + } + ] + }, + "185": { + "contexts": [ + "์‚ฌ๋ง ํ›„ ๊ด€์ „ ์„ค์ • ๊ธฐ๋ณธ๊ฐ’์„", + "๋ณต์›ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disable Death Spectate All Players", + "orderNumber": 1, + "path": "/interface/action/child/disableDeathSpectateAllPlayers.ts", + "indent": 4 + } + ] + }, + "186": { + "contexts": [ + "์‚ฌ๋ง ํ›„ ๊ด€์ „ ์‹œ ์ž์‹ ์˜ HUD๋ฅผ", + "๋‹ค์‹œ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disable Death Spectate Target Hud", + "orderNumber": 1, + "path": "/interface/action/child/disableDeathSpectateTargetHud.ts", + "indent": 4 + } + ] + }, + "187": { + "contexts": [ + "๋ฒ„ํŠผ์„ ์‚ฌ์šฉ ๋ชป ํ•˜๊ฒŒ", + "ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disallow Button", + "orderNumber": 1, + "path": "/interface/action/child/disallowButton.ts", + "indent": 4 + } + ] + }, + "188": { + "contexts": [ + "์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ", + "๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disallow Button", + "orderNumber": 2, + "path": "/interface/action/child/disallowButton.ts", + "indent": 4 + } + ] + }, + "189": { + "contexts": [ + "๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ", + "๊ด€์ „ํ•  ์ˆ˜ ์žˆ๋„๋ก", + "ํ—ˆ์šฉ๋œ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Enable Death Spectate All Players", + "orderNumber": 1, + "path": "/interface/action/child/enableDeathSpectateAllPlayers.ts", + "indent": 4 + } + ] + }, + "190": { + "contexts": [ + "์‚ฌ๋ง ํ›„ ๊ด€์ „ ์‹œ", + "๋Œ€์ƒ์˜ ๊ด€์ „ ๋Œ€์ƒ์˜", + "HUD๋ฅผ ๋ณด๊ฒŒ ๋ ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Enable Death Spectate Target Hud", + "orderNumber": 1, + "path": "/interface/action/child/enableDeathSpectateTargetHud.ts", + "indent": 4 + } + ] + }, + "191": { + "contexts": [ + "์ƒ๋ช…๋ ฅ์„ ํšŒ๋ณตํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 1, + "path": "/interface/action/child/heal.ts", + "indent": 4 + } + ] + }, + "192": { + "contexts": [ + "์น˜์œ  ํ–‰๋™์„ ํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "HEALER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 2, + "path": "/interface/action/child/heal.ts", + "indent": 4 + }, + { + "topName": "Start Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "193": { + "contexts": [ + "์ ์šฉํ•  ์น˜์œ ๋Ÿ‰์ž…๋‹ˆ๋‹ค.", + "์ด ์น˜์œ ๋Ÿ‰์€ ๊ฐ•ํ™” ํšจ๊ณผ,", + "์•ฝํ™” ํšจ๊ณผ ๋“ฑ์— ์˜ํ•ด", + "๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "์น˜์œ ๋Ÿ‰ ์ตœ๋Œ€์น˜๋Š”", + "๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜", + "์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 3, + "path": "/interface/action/child/heal.ts", + "indent": 4 + } + ] + }, + "194": { + "contexts": [ + "์ฒ˜์น˜๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Kill", + "orderNumber": 1, + "path": "/interface/action/child/kill.ts", + "indent": 4 + } + ] + }, + "195": { + "contexts": [ + "์ฒ˜์น˜๋ฅผ ๊ธฐ๋กํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "KILLER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Kill", + "orderNumber": 2, + "path": "/interface/action/child/kill.ts", + "indent": 4 + } + ] + }, + "196": { + "contexts": [ + "๋ฐ˜๋ณต ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Loop If", + "orderNumber": 1, + "path": "/interface/action/child/loopIf.ts", + "indent": 4 + } + ] + }, + "197": { + "contexts": [ + "์ˆ˜์ •ํ•  ์ „์—ญ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "198": { + "contexts": [ + "๋ณ€์ˆ˜๊ฐ’์˜ ๋ณ€๊ฒฝ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.", + "์ผ๋ฐ˜์ ์ธ ์‚ฌ์น™์—ฐ์‚ฐ,", + "๊ทธ๋ฆฌ๊ณ  ๊ฐ’์˜ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ", + "ARRAY ์—ฐ์‚ฐ ๋“ฑ์˜ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 2, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "199": { + "contexts": [ + "์ˆ˜์ •์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์‚ฐ์ˆ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€", + "๋‘ ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ๋‘ ๋ฒˆ์งธ๋กœ,", + "๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ๋ณ€์ˆ˜์˜", + "ํ˜„์žฌ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.", + "๋ฐฐ์—ด ์—ฐ์‚ฐ์—์„œ๋Š”", + "์ด ๊ฐ’์„ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 3, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "200": { + "contexts": [ + "์ˆ˜์ •ํ•  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.", + "์ธ๋ฑ์Šค๊ฐ€ ๋ฐฐ์—ด์˜ ๋์„ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ๋ฐฐ์—ด์ด ํ™•์žฅ๋˜๋ฉฐ", + "์ƒˆ ์š”์†Œ๋Š” 0์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "201": { + "contexts": [ + "์ ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Score", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 4 + } + ] + }, + "202": { + "contexts": [ + "์ ์ˆ˜ ์ฆ๊ฐ๋Ÿ‰์ž…๋‹ˆ๋‹ค.", + "์–‘์ˆ˜์ธ ๊ฒฝ์šฐ ์ ์ˆ˜๊ฐ€ ์˜ค๋ฅด๊ณ ", + "์Œ์ˆ˜์ธ ๊ฒฝ์šฐ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Score", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 4 + }, + { + "topName": "Modify Team Score", + "orderNumber": 1, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 4 + } + ] + }, + "203": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "204": { + "contexts": [ + "์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 3, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "205": { + "contexts": [ + "์ˆ˜์ •์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์‚ฌ์น™์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€", + "๋‘ ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ๋‘ ๋ฒˆ์งธ๋กœ,", + "๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ๋ณ€์ˆ˜์˜", + "ํ˜„์žฌ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.", + "๋ฐฐ์—ด ์—ฐ์‚ฐ์—์„œ๋Š”", + "์ด ๊ฐ’์„ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 4, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "206": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "207": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable At Index", + "orderNumber": 5, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "208": { + "contexts": [ + "์ ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Team Score", + "orderNumber": 2, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 4 + } + ] + }, + "209": { + "contexts": [ + "์ƒ์„ฑํ•  ํšจ๊ณผ์˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 2, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "210": { + "contexts": [ + "์ƒ์„ฑ๋  ํšจ๊ณผ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ", + "์ ์ธ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ", + "๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 3, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "211": { + "contexts": [ + "ํšจ๊ณผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํšจ๊ณผ๋Š” ํ”Œ๋ ˆ์ด์–ด", + "์œ„์น˜์—์„œ ๋ฐœ์ƒํ•˜๊ณ ,", + "๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ ์ด ๊ฐ’์€", + "์›”๋“œ ์ขŒํ‘œ๋กœ์„œ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 4, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "212": { + "contexts": [ + "ํšจ๊ณผ ๋ฐ˜๊ฒฝ(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 5, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "213": { + "contexts": [ + "์˜์›…์„ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด ๋‹น ํ•œ ๋ฒˆ์— ๋‹จ ํ•œ ๊ฐœ์˜", + "PRELOAD HERO ์•ก์…˜๋งŒ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Preload Hero", + "orderNumber": 1, + "path": "/interface/action/child/preloadHero.ts", + "indent": 4 + } + ] + }, + "214": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ฌ ์˜์›…์ž…๋‹ˆ๋‹ค.", + "๋ฐฐ์—ด์— ์—ฌ๋Ÿฌ ์˜์›…์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ,", + "๋ฐฐ์—ด ์ดˆ๋ฐ˜์— ์ง€์ •๋œ ์˜์›…์ผ์ˆ˜๋ก", + "์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Preload Hero", + "orderNumber": 2, + "path": "/interface/action/child/preloadHero.ts", + "indent": 4 + } + ] + }, + "215": { + "contexts": [ + "๊ฐ€์ƒ ๋ฒ„ํŠผ ์ž…๋ ฅ์„", + "๊ฐ•์ œํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Press Button", + "orderNumber": 1, + "path": "/interface/action/child/pressButton.ts", + "indent": 4 + } + ] + }, + "216": { + "contexts": [ + "๋ˆ„๋ฅผ ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Press Button", + "orderNumber": 2, + "path": "/interface/action/child/pressButton.ts", + "indent": 4 + } + ] + }, + "217": { + "contexts": [ + "์˜์›… ๋ชฉ๋ก์„ ์ดˆ๊ธฐํ™”ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Reset Player Hero Availability", + "orderNumber": 1, + "path": "/interface/action/child/resetPlayerHeroAvailability.ts", + "indent": 4 + } + ] + }, + "218": { + "contexts": [ + "๋ถ€ํ™œ์‹œํ‚ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Respawn", + "orderNumber": 1, + "path": "/interface/action/child/respawn.ts", + "indent": 4 + } + ] + }, + "219": { + "contexts": [ + "๋ถ€ํ™œํ•˜๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Resurrect", + "orderNumber": 1, + "path": "/interface/action/child/resurrect.ts", + "indent": 4 + } + ] + }, + "220": { + "contexts": [ + "๊ธฐ์ˆ  1 ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 4 + } + ] + }, + "221": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ์ˆ  1์„", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 4 + } + ] + }, + "222": { + "contexts": [ + "๊ธฐ์ˆ  2 ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 4 + } + ] + }, + "223": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ์ˆ  2์„", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 4 + } + ] + }, + "224": { + "contexts": [ + "์กฐ์ค€ ์†๋„๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Aim Speed", + "orderNumber": 1, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 4 + } + ] + }, + "225": { + "contexts": [ + "์ผ๋ฐ˜ ์กฐ์ค€ ์†๋„์— ๋น„๋ก€ํ•˜๋„๋ก", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€ ์†๋„์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Aim Speed", + "orderNumber": 2, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 4 + } + ] + }, + "226": { + "contexts": [ + "์ฃผ๋Š” ํ”ผํ•ด๋Ÿ‰์„ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Damage Dealt", + "orderNumber": 1, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 4 + } + ] + }, + "227": { + "contexts": [ + "์ˆœ์ˆ˜ ํ”ผํ•ด๋Ÿ‰์— ๋น„๋ก€ํ•˜๋„๋ก", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜", + "์ฃผ๋Š” ํ”ผํ•ด๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Damage Dealt", + "orderNumber": 2, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 4 + } + ] + }, + "228": { + "contexts": [ + "๋ฐ›๋Š” ํ”ผํ•ด๋Ÿ‰์„ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Damage Received", + "orderNumber": 1, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 4 + } + ] + }, + "229": { + "contexts": [ + "์ˆœ์ˆ˜ ํ”ผํ•ด๋Ÿ‰์— ๋น„๋ก€ํ•˜๋„๋ก", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜", + "๋ฐ›๋Š” ํ”ผํ•ด๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Damage Received", + "orderNumber": 2, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 4 + } + ] + }, + "230": { + "contexts": [ + "๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Facing", + "orderNumber": 1, + "path": "/interface/action/child/setFacing.ts", + "indent": 4 + } + ] + }, + "231": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๊ฒŒ", + "๋˜๋Š” ๋‹จ์œ„ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Facing", + "orderNumber": 2, + "path": "/interface/action/child/setFacing.ts", + "indent": 4 + } + ] + }, + "232": { + "contexts": [ + "์–ด๋А ์ „์—ญ ๋ณ€์ˆ˜์—", + "๊ฐ’์„ ์ €์žฅํ• ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 4 + } + ] + }, + "233": { + "contexts": [ + "์ €์žฅํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Global Variable", + "orderNumber": 2, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "234": { + "contexts": [ + "์–ด๋–ค ์ „์—ฐ ๋ณ€์ˆ˜ ๊ฐ’์ด", + "์ˆ˜์ •ํ•  ๋ฐฐ์—ด์ธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "๋ณ€์ˆ˜๊ฐ’์ด ๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ๊ฐ’์€ ๋นˆ ๋ฐฐ์—ด์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Global Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "235": { + "contexts": [ + "ARRAY์— ์ €์žฅํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Global Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "236": { + "contexts": [ + "์ด๋™ ์ค‘๋ ฅ์„ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Gravity", + "orderNumber": 1, + "path": "/interface/action/child/setGravity.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 1, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 4 + } + ] + }, + "237": { + "contexts": [ + "์ผ๋ฐ˜ ์ด๋™ ์ค‘๋ ฅ์— ๋น„๋ก€ํ•˜๋„๋ก", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜", + "๊ฐœ์ธ ์ด๋™ ์ค‘๋ ฅ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Gravity", + "orderNumber": 2, + "path": "/interface/action/child/setGravity.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 2, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 4 + } + ] + }, + "238": { + "contexts": [ + "๋ฐ›๋Š” ์น˜์œ ๋Ÿ‰์„ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Healing Received", + "orderNumber": 1, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 4 + } + ] + }, + "239": { + "contexts": [ + "๋ฐ›๋Š” ์ˆœ์ˆ˜ ์น˜์œ ๋Ÿ‰์—", + "๋น„๋ก€ํ•˜๋„๋ก ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐ›๋Š”", + "์น˜์œ ๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Healing Received", + "orderNumber": 2, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 4 + } + ] + }, + "240": { + "contexts": [ + "๋ณด์ด์ง€ ์•Š๊ฒŒ ๋ ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Invisible", + "orderNumber": 1, + "path": "/interface/action/child/setInvisible.ts", + "indent": 4 + } + ] + }, + "241": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ• ", + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Invisible", + "orderNumber": 2, + "path": "/interface/action/child/setInvisible.ts", + "indent": 4 + } + ] + }, + "242": { + "contexts": [ + "๊ฒฝ๊ธฐ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Match Time", + "orderNumber": 1, + "path": "/interface/action/child/setMatchTime.ts", + "indent": 4 + } + ] + }, + "243": { + "contexts": [ + "์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ์„", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Max Health", + "orderNumber": 1, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 4 + } + ] + }, + "244": { + "contexts": [ + "์ˆœ์ˆ˜ ์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ์—", + "๋น„๋ก€ํ•˜๋„๋ก ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ตœ๋Œ€", + "์ƒ๋ช…๋ ฅ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Max Health", + "orderNumber": 2, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 4 + }, + { + "topName": "Set Move Speed", + "orderNumber": 1, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 4 + } + ] + }, + "245": { + "contexts": [ + "์ด๋™ ์†๋„๋ฅผ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Move Speed", + "orderNumber": 2, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 4 + } + ] + }, + "246": { + "contexts": [ + "ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ", + "๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Objective Description", + "orderNumber": 2, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 1, + "path": "/interface/action/child/smallMessage.ts", + "indent": 4 + } + ] + }, + "247": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘", + "์–ด๋–ค ํ•ญ๋ชฉ์„ ์ง€์†์ ์œผ๋กœ", + "์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋Š” ์ž…๋ ฅ ์ •๋ณด์˜", + "์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ,", + "์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Objective Description", + "orderNumber": 3, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + } + ] + }, + "248": { + "contexts": [ + "์˜์›… ๋ชฉ๋ก์„ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 4 + } + ] + }, + "249": { + "contexts": [ + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›…์ž…๋‹ˆ๋‹ค.", + "์ œ๊ณต๋œ ์˜์›…์ด ์—†๋Š” ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์€ ์•„๋ฌด ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 4 + } + ] + }, + "250": { + "contexts": [ + "์ ์ˆ˜๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Score", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 4 + } + ] + }, + "251": { + "contexts": [ + "์„ค์ •ํ•  ์ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Score", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 4 + }, + { + "topName": "Set Team Score", + "orderNumber": 1, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 4 + } + ] + }, + "252": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค" + ], + "usedFiles": [ + { + "topName": "Set Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "253": { + "contexts": [ + "๊ฐ’์„ ์ €์žฅํ•  ํ”Œ๋ ˆ์ด์–ด์˜", + "๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Variable", + "orderNumber": 3, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "254": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค" + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "255": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„", + "์ˆ˜์ •ํ•  ๋ฐฐ์—ด์— ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "๋ณ€์ˆ˜๊ฐ’์ด ๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ๊ฐ’์€ ๋นˆ ๋ฐฐ์—ด์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "256": { + "contexts": [ + "๋ฐฐ์—ด์— ์ €์žฅํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "257": { + "contexts": [ + "๊ธฐ๋ณธ ๋ฐœ์‚ฌ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "258": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ธฐ๋ณธ ๋ฐœ์‚ฌ ์‚ฌ์šฉ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "259": { + "contexts": [ + "ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ์„", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค" + ], + "usedFiles": [ + { + "topName": "Set Projectile Gravity", + "orderNumber": 1, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 4 + } + ] + }, + "260": { + "contexts": [ + "์ผ๋ฐ˜ ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ์—", + "๋น„๋ก€ํ•˜๋„๋ก ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฐœ์ธ", + "ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Projectile Gravity", + "orderNumber": 2, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 4 + } + ] + }, + "261": { + "contexts": [ + "ํˆฌ์‚ฌ์ฒด ์†๋„๋ฅผ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Projectile Speed", + "orderNumber": 1, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 4 + } + ] + }, + "262": { + "contexts": [ + "์ผ๋ฐ˜ ํˆฌ์‚ฌ์ฒด ์†๋„์—", + "๋น„๋ก€ํ•˜๋„๋ก ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฐœ์ธ", + "ํˆฌ์‚ฌ์ฒด ์†๋„ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Projectile Speed", + "orderNumber": 2, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 4 + } + ] + }, + "263": { + "contexts": [ + "์ตœ๋Œ€ ๋ถ€ํ™œ ์‹œ๊ฐ„์„", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Respawn Max Time", + "orderNumber": 1, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 4 + } + ] + }, + "264": { + "contexts": [ + "์‚ฌ๋ง๊ณผ ๋ถ€ํ™œ ์‚ฌ์ด์˜ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Respawn Max Time", + "orderNumber": 2, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 4 + } + ] + }, + "265": { + "contexts": [ + "๋ณด์กฐ ๋ฐœ์‚ฌ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "266": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณด์กฐ ๋ฐœ์‚ฌ ์‚ฌ์šฉ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "267": { + "contexts": [ + "์ •์ƒ ์†๋„ ๋Œ€๋น„", + "์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋น„์œจ์ž…๋‹ˆ๋‹ค.", + "์ตœ๋Œ€ 100%๊นŒ์ง€ ์„ค์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Slow Motion", + "orderNumber": 1, + "path": "/interface/action/child/setSlowMotion.ts", + "indent": 4 + } + ] + }, + "268": { + "contexts": [ + "์ƒํƒœ๋ฅผ ์ ์šฉํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 1, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "269": { + "contexts": [ + "์ด ์ƒํƒœ๊ฐ€ ์ ์šฉ๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์‚ฌ๋งํ•˜๋Š” ๊ฒฝ์šฐ ๋„์›€์„ ๊ธฐ๋กํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ASSISTER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 2, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "270": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ ์šฉํ•  ์ƒํƒœ์ž…๋‹ˆ๋‹ค.", + "์˜์›… ๋Šฅ๋ ฅ์— ์˜ํ•ด ์ ์šฉ๋˜๋Š”", + "์ƒํƒœ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 3, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "271": { + "contexts": [ + "ํ•ด๋‹น ์ƒํƒœ์˜ ์ง€์† ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.", + "์ƒํƒœ๊ฐ€ CLEAR STATUS ์•ก์…˜ ์‹คํ–‰์— ์˜ํ•ด", + "์ค‘์ง€๋  ๋•Œ ๊นŒ์ง€ ์ง€์†๋˜๊ฒŒ ํ•˜๋ ค๋ฉด", + "9999๋“ฑ ๋งค์šฐ ๊ธด ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 4, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "272": { + "contexts": [ + "์ ์ˆ˜๋ฅผ ์„ค์ •ํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Team Score", + "orderNumber": 2, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 4 + } + ] + }, + "273": { + "contexts": [ + "๊ถ๊ทน๊ธฐ ์‚ฌ์šฉ์— ์žˆ์–ด", + "์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Charge", + "orderNumber": 1, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 4 + } + ] + }, + "274": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ถ๊ทน๊ธฐ๋ฅผ", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 4 + } + ] + }, + "275": { + "contexts": [ + "์ตœ๋Œ€ ์ถฉ์ „๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Charge", + "orderNumber": 2, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 4 + } + ] + }, + "276": { + "contexts": [ + "๊ฑด๋„ˆ๋›ธ ์•ก์…˜์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ์ œ์™ธํ•œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Skip", + "orderNumber": 1, + "path": "/interface/action/child/skip.ts", + "indent": 4 + }, + { + "topName": "Skip If", + "orderNumber": 1, + "path": "/interface/action/child/skipIf.ts", + "indent": 4 + } + ] + }, + "277": { + "contexts": [ + "๊ฑด๋„ˆ๋›ฐ๊ธฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š”์ง€", + "์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Skip If", + "orderNumber": 2, + "path": "/interface/action/child/skipIf.ts", + "indent": 4 + } + ] + }, + "278": { + "contexts": [ + "๊ฐ€์†ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 1, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "279": { + "contexts": [ + "๊ฐ€์†์„ ์ ์šฉํ•  ๋‹จ์œ„ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 2, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "280": { + "contexts": [ + "๊ฐ€์† ๋น„์œจ(์ œ๊ณฑ์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "์ค‘๋ ฅ์ด๋‚˜ ํ‘œ๋ฉด ๋งˆ์ฐฐ๋ ฅ์„ ์ด๊ฒจ๋‚ด๋ ค๋ฉด", + "์ด ๊ฐ’์ด ๋งค์šฐ ๋†’์•„์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 3, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "281": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฐ€์†์ด ์ค‘์ง€๋˜๋Š” ์†๋ ฅ์ž…๋‹ˆ๋‹ค.", + "์ค‘๋ ฅ ๋ฐ ํ‘œ๋ฉด ๋งˆ์ฐฐ๋ ฅ ๋•Œ๋ฌธ์—", + "์ด ์†๋„์— ๋„๋‹ฌํ•˜๊ธฐ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 4, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "282": { + "contexts": [ + "๋ฐฉํ–ฅ์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์›”๋“œ ์ขŒํ‘œ", + "๋˜๋Š” ๋กœ์ปฌ ์ขŒํ‘œ ์ค‘ ์–ด๋А ์ชฝ์— ๋Œ€ํ•ด", + "์ƒ๋Œ€์ ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 5, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "283": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘", + "์–ด๋–ค ํ•ญ๋ชฉ์„ ์ง€์†์ ์œผ๋กœ", + "์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ์•ก์…˜์€ ์ž…๋ ฅ ์ •๋ณด์˜", + "์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ,", + "์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 6, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + }, + { + "topName": "Start Damage Modification", + "orderNumber": 1, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + }, + { + "topName": "Start Facing", + "orderNumber": 1, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "284": { + "contexts": [ + "์นด๋ฉ”๋ผ๋ฅผ ํ•ด๋‹น ์œ„์น˜์—", + "๋ฐฐ์น˜ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 1, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "285": { + "contexts": [ + "์นด๋ฉ”๋ผ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ง€์†์ ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 2, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "286": { + "contexts": [ + "์นด๋ฉ”๋ผ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ง€์†์ ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 3, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "287": { + "contexts": [ + "์œ„์น˜ ๋ณ€๊ฒฝ ์‹œ ์นด๋ฉ”๋ผ ์ด๋™์˜", + "๋ธ”๋ Œ๋”ฉ ์†๋„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ธ ๊ฒฝ์šฐ ๋ธ”๋ Œ๋”ฉํ•˜์ง€ ์•Š๊ณ ", + "์œ„์น˜๋งŒ ์ฆ‰์‹œ ๋ณ€๊ฒฝํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 4, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "288": { + "contexts": [ + "(DAMAGER์˜ ๊ณต๊ฒฉ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ)", + "๋ฐ›๋Š” ํ”ผํ•ด๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 2, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "289": { + "contexts": [ + "(RECEIVER๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒฝ์šฐ)", + "์ฃผ๋Š” ํ”ผํ•ด๋ฅผ ๋ณ€๊ฒฝํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 3, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "290": { + "contexts": [ + "DAMAGER์˜ ๊ณต๊ฒฉ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ", + "RECEIVER์—๊ฒŒ ์ ์šฉํ•  ํ”ผํ•ด ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 4, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "291": { + "contexts": [ + "DAMAGE OVER TIME์„", + "์ ์šฉํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "292": { + "contexts": [ + "ํ”ผํ•ด๋ฅผ ์ฃผ๋Š” ํ–‰๋™์„ ํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "DAMAGER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 2, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "293": { + "contexts": [ + "DAMAGE OVER TIME์˜", + "์ง€์† ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.", + "DAMAGE OVER TIME์ด", + "์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ", + "์ค‘์ง€๋  ๋•Œ๊นŒ์ง€ ์ง€์†๋˜๊ฒŒ ํ•˜๋ ค๋ฉด", + "์ง€์† ์‹œ๊ฐ„์„ ๋งค์šฐ ๊ธธ๊ฒŒ", + "์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. (9999 ๋“ฑ)" + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 3, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "294": { + "contexts": [ + "DAMAGE OVER TIME์˜", + "์ดˆ๋‹น ํ”ผํ•ด๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 4, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "295": { + "contexts": [ + "ํšŒ์ „์‹œํ‚ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 2, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "296": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ", + "๋ฐ”๋ผ๋ณด๊ฒŒ ๋˜๋Š” ๋‹จ์œ„ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 3, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "297": { + "contexts": [ + "์ดˆ๋‹น ํšŒ์ „์œจ(๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 4, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "298": { + "contexts": [ + "๋ฐฉํ–ฅ์ด ํ”Œ๋ ˆ์ด์–ด์˜", + "์›”๋“œ ์ขŒํ‘œ ๋˜๋Š” ๋กœ์ปฌ ์ขŒํ‘œ ์ค‘", + "์–ด๋А ์ชฝ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์ธ์ง€", + "์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 5, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "299": { + "contexts": [ + "์ง€์ •๋œ ์˜์›…์ด ๊ฐ•์ œ", + "์„ ํƒ๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 1, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "300": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๊ฐ•์ œ๋กœ", + "์„ค์ •๋œ ์˜์›…์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 2, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "301": { + "contexts": [ + "์ „ํˆฌ์ค€๋น„์‹ค์„", + "๊ฐ•์ œํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 1, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "302": { + "contexts": [ + "๊ฐ•์ œ๋œ ์ „ํˆฌ์ค€๋น„์‹ค์˜ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.", + "0์ด ์ฒซ ๋ฒˆ์งธ ์ „ํˆฌ์ค€๋น„์‹ค์ด๋ฉฐ,", + "1์ด ๋‘ ๋ฒˆ์งธ, 2๊ฐ€ ์„ธ ๋ฒˆ์งธ์ž…๋‹ˆ๋‹ค.", + "์ง€์ •๋œ ๋ฐฉ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ,", + "๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋Š” ์ผ๋ฐ˜", + "์ „ํˆฌ์ค€๋น„์‹ค์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 2, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "303": { + "contexts": [ + "๊ฐ•์ œ ์ด๋™๋˜๊ฑฐ๋‚˜ ์ด๋™์ด", + "์ œํ•œ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 1, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "304": { + "contexts": [ + "์ „๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ์†Œ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ •์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์ตœ๋Œ€ ์†๋„๋กœ ๊ฐ•์ œ ์ „๋ฐฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 2, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "305": { + "contexts": [ + "์ „๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ๋Œ€๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์—†์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ „๋ฐฉ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 3, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "306": { + "contexts": [ + "ํ›„๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ์†Œ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ •์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์ตœ๋Œ€ ์†๋„๋กœ ๊ฐ•์ œ ํ›„๋ฐฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 4, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "307": { + "contexts": [ + "ํ›„๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ๋Œ€๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์—†์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ›„๋ฐฉ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 5, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "308": { + "contexts": [ + "์ธก๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ์†Œ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ •์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์ตœ๋Œ€ ์†๋„๋กœ ๊ฐ•์ œ ์ขŒ์šฐ ์ธก๋ฐฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 6, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "309": { + "contexts": [ + "์ธก๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ๋Œ€๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์—†์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ขŒ์šฐ ์ธก๋ฐฉ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 7, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "310": { + "contexts": [ + "HEAL OVER TIME์„", + "์ ์šฉํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 2, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "311": { + "contexts": [ + "HEAL OVER TIME์˜ ์ง€์† ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.", + "HEAL OVER TIME์ด ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด", + "์ค‘์ง€๋  ๋•Œ๊นŒ์ง€ ์ง€์†๋˜๊ฒŒ ํ•˜๋ ค๋ฉด", + "9999๋“ฑ ๋งค์šฐ ๊ธด ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 3, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "312": { + "contexts": [ + "HEAL OVER TIME์˜ ์ดˆ๋‹น ์น˜์œ ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 4, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "313": { + "contexts": [ + "๊ฐ€์ƒ์œผ๋กœ ๋ฒ„ํŠผ์„", + "๋ˆ„๋ฅด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Holding Button", + "orderNumber": 1, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 4 + } + ] + }, + "314": { + "contexts": [ + "๊ฐ€์ƒ์œผ๋กœ ๋ˆŒ๋ฆฌ๊ฒŒ ๋˜๋Š”", + "๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Holding Button", + "orderNumber": 2, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 4 + } + ] + }, + "315": { + "contexts": [ + "๊ฐ€์†์„ ์ค‘์ง€ํ•˜๊ฒŒ ๋˜๋Š”", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Accelerating", + "orderNumber": 1, + "path": "/interface/action/child/stopAccelerating.ts", + "indent": 4 + } + ] + }, + "316": { + "contexts": [ + "์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•œ", + "DAMAGE OVER TIME์ด", + "์ค‘์ง€๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop All Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopAllDamageOverTime.ts", + "indent": 4 + } + ] + }, + "317": { + "contexts": [ + "์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•œ", + "HEAL OVER TIME์ด", + "์ค‘์ง€๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop All Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopAllHealOverTime.ts", + "indent": 4 + } + ] + }, + "318": { + "contexts": [ + "์นด๋ฉ”๋ผ๋ฅผ ๊ธฐ๋ณธ ๋ทฐ๋กœ ", + "๋˜๋Œ๋ฆด ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Camera", + "orderNumber": 1, + "path": "/interface/action/child/stopCamera.ts", + "indent": 4 + } + ] + }, + "319": { + "contexts": [ + "์ˆ˜์ •์„ ์ค‘์ง€ํ• ", + "์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/stopChasingGlobalVariable.ts", + "indent": 4 + } + ] + }, + "320": { + "contexts": [ + "๋ณ€์ˆ˜ ๋ฐ˜๊ฒฝ์„ ์ค‘์ง€ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๋Š”", + "๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 4 + } + ] + }, + "321": { + "contexts": [ + "์ˆ˜์ •์„ ์ค‘์ง€ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณ€์ˆ˜๋ฅผ", + "์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 4 + } + ] + }, + "322": { + "contexts": [ + "์ค‘์ง€ํ•  DAMAGE MODIFICATION ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ID๋Š” LAST DAMAGE MODIFICATION ID์ด๊ฑฐ๋‚˜,", + "์ด์ „์— LAST DAMAGE MODIFICATION ID๊ฐ€", + "์ €์žฅ๋˜์—ˆ๋˜ ๋ณ€์ˆ˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Damage Modification", + "orderNumber": 1, + "path": "/interface/action/child/stopDamageModification.ts", + "indent": 4 + } + ] + }, + "323": { + "contexts": [ + "์ค‘์ง€ํ•  DAMAGE OVER TIME ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ID๋Š” LAST DAMAGE MODIFICATION ID์ด๊ฑฐ๋‚˜,", + "์ด์ „์— LAST DAMAGE MODIFICATION ID๊ฐ€", + "์ €์žฅ๋˜์—ˆ๋˜ ๋ณ€์ˆ˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopDamageOverTime.ts", + "indent": 4 + } + ] + }, + "324": { + "contexts": [ + "ํšŒ์ „์„ ๋ฉˆ์ถœ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Facing", + "orderNumber": 1, + "path": "/interface/action/child/stopFacing.ts", + "indent": 4 + } + ] + }, + "325": { + "contexts": [ + "์ง€์ •๋œ ์˜์›… ๊ฐ•์ œ ์„ ํƒ์ด", + "ํ•ด์ œ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Player To Be Hero", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "326": { + "contexts": [ + "์ผ๋ฐ˜ ์ „ํˆฌ์‹ค์„ ์‚ฌ์šฉํ•ด", + "ํ”Œ๋ ˆ์ด๋ฅผ ์žฌ๊ฐœํ•˜๊ฒŒ ๋  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Spawn Room", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "327": { + "contexts": [ + "์ด๋™ ์ž…๋ ฅ ์ •๋ณด๊ฐ€", + "๋ณต์›๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Throttle", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingThrottle.ts", + "indent": 4 + } + ] + }, + "328": { + "contexts": [ + "์ค‘์ง€ํ•  HEAL OVER TIME ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ID๋Š” LAST HEAL OVER TIME ID ๋˜๋Š”", + "์˜ˆ์ „์— LAST HEAL OVER TIME ID๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopHealOverTime.ts", + "indent": 4 + } + ] + }, + "329": { + "contexts": [ + "๋” ์ด์ƒ ๊ฐ€์ƒ์œผ๋กœ ๋ฒ„ํŠผ์„", + "๋ˆ„๋ฅด์ง€ ์•Š์„ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Holding Button", + "orderNumber": 1, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 4 + } + ] + }, + "330": { + "contexts": [ + "๋” ์ด์ƒ ๊ฐ€์ƒ์œผ๋กœ", + "๋ˆŒ๋ฆฌ์ง€ ์•Š์„", + "๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Holding Button", + "orderNumber": 2, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 4 + } + ] + }, + "331": { + "contexts": [ + "์ˆœ๊ฐ„์ด๋™ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Teleport", + "orderNumber": 1, + "path": "/interface/action/child/teleport.ts", + "indent": 4 + } + ] + }, + "332": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ˆœ๊ฐ„์ด๋™ํ•˜๊ฒŒ ๋  ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ์œ„์น˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Teleport", + "orderNumber": 2, + "path": "/interface/action/child/teleport.ts", + "indent": 4 + } + ] + }, + "333": { + "contexts": [ + "์ผ์‹œ์ •์ง€์˜ ์ง€์†์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Wait", + "orderNumber": 1, + "path": "/interface/action/child/wait.ts", + "indent": 4 + } + ] + }, + "334": { + "contexts": [ + "WAIT์ด ์ค‘์ง€๋˜๋Š” ์กฐ๊ฑด ๋ฐ ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์กฐ๊ฑด ๋ชฉ๋ก์ด ๋ฌด์‹œ๋˜๋ฉด WAIT์€ ์ค‘์ง€๋˜์ง€ ์•Š์œผ๋ฉฐ,", + "๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ์กฐ๊ฑด ๋ชฉ๋ก์— ์˜ํ•ด", + "์•ก์…˜ ๋ชฉ๋ก์˜ ์ค‘์ง€ ํ˜น์€ ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Wait", + "orderNumber": 2, + "path": "/interface/action/child/wait.ts", + "indent": 4 + } + ] + }, + "335": { + "contexts": [ + "๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ ์ด Rule์˜ ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์ธ์Šคํ„ด์Šค๋Š” ๊ฒŒ์ž„์ด ์ง€์†๋˜๋Š” ๋™์•ˆ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.", + "", + "- ์ด ์ธ์Šคํ„ด์Šค๋Š” ๊ฒŒ์ž„์ด ์ง€์†๋˜๋Š” ๋™์•ˆ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ", + " Condition ์„ ๋งŒ์กฑํ•˜๊ฑฐ๋‚˜ ๋งŒ์กฑํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + " Condition์„ ์ฒ˜์Œ ๋งŒ์กฑํ•  ๋•Œ Action์„ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- Condition ๋ชฉ๋ก์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๊ฐ€ ๋งŒ์กฑํ•œ๋‹ค๋ฉด,", + " Action์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ ค ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 0, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Ongoing - Global", + "orderNumber": 0, + "path": "/interface/event/child/onGoingGlobal.ts", + "indent": 0 + } + ] + }, + "336": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒŒ์ž„์— ์ฐธ์—ฌํ•˜๋ฉด", + "๊ฐ ํ”Œ๋ ˆ์ด์–ด๋งˆ๋‹ค ์ด Rule์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.", + "์ด ์ธ์Šคํ„ด์Šค๋Š” ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒŒ์ž„์„ ๋– ๋‚˜๊ฑฐ๋‚˜,", + "๊ฒŒ์ž„์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.", + "๊ฐ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ Condition๊ณผ Action์„ ์ถ”์ ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒŒ์ž„์— ๋‚จ์•„์žˆ๋Š” ํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ง€์†๋˜๋ฏ€๋กœ", + " Condition์„ ๋งŒ์กฑํ•  ์ˆ˜๋„, ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.", + " Condition์„ ์ฒ˜์Œ ๋งŒ์กฑํ•˜๋ฉดAction์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- Condition ๋ชฉ๋ก์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๊ฐ€ ๋งŒ์กฑํ•œ๋‹ค๋ฉด,", + " Action์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ ค ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 1, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Ongoing - Each Player", + "orderNumber": 0, + "path": "/interface/event/child/onGoingEachPlayer.ts", + "indent": 0 + } + ] + }, + "337": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ์ฒ˜์น˜๋ฅผ ๋‹ฌ์„ฑํ•  ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ์ฒ˜์น˜ํ•˜๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•˜๋ฉด Action์ด ์‹คํ–‰๋˜์ง€๋งŒ, ", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 2, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player earned elimination", + "orderNumber": 0, + "path": "/interface/event/child/playerEarnedElimination.ts", + "indent": 0 + } + ] + }, + "338": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ๊ฒฐ์ •ํƒ€๋ฅผ ๋‚ ๋ฆด ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒฐ์ •ํƒ€๋กœ ํ”ผํ•ด๋ฅผ ์ž…ํžˆ๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•˜๋ฉด Action์ด ์‹คํ–‰๋˜์ง€๋งŒ,", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 3, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player dealt final blow", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtFinalBlow.ts", + "indent": 0 + } + ] + }, + "339": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ํ”ผํ•ด๋ฅผ ์ž…ํž ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ ์—๊ฒŒ ํ”ผํ•ด๋ฅผ ์ฃผ๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•˜๋ฉดAction์ด ์‹คํ–‰๋˜์ง€๋งŒ,", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 4, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player dealt damage", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtDamage.ts", + "indent": 0 + } + ] + }, + "340": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ํ”ผํ•ด๋ฅผ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ ์—๊ฒŒ์„œ ํ”ผํ•ด๋ฅผ ๋ฐ›์œผ๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•˜๋ฉดAction์ด ์‹คํ–‰๋˜์ง€๋งŒ,", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 5, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player took damage", + "orderNumber": 0, + "path": "/interface/event/child/playerTookDamage.ts", + "indent": 0 + } + ] + }, + "341": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ์‚ฌ๋งํ•  ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‚ฌ๋งํ•˜๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•  ๋•Œ Action์ด ์‹คํ–‰๋˜์ง€๋งŒ,", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด Action์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 6, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player Died", + "orderNumber": 0, + "path": "/interface/event/child/playerDied.ts", + "indent": 0 + } + ] + }, + "342": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์˜ ์ ˆ๋Œ€๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 0, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Absolute Value", + "orderNumber": 0, + "path": "/interface/value/child/absoluteValue.ts", + "indent": 0 + } + ] + }, + "343": { + "contexts": [ + "๋‘ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ์˜ ํ•ฉ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 1, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Add", + "orderNumber": 0, + "path": "/interface/value/child/add.ts", + "indent": 0 + } + ] + }, + "344": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ์‚ฌ๋งํ•œ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 2, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Dead Players", + "orderNumber": 0, + "path": "/interface/value/child/allDeadPlayers.ts", + "indent": 0 + } + ] + }, + "345": { + "contexts": [ + "์˜ค๋ฒ„์›Œ์น˜์˜ ๋ชจ๋“  ์˜์›… ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 3, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Heroes", + "orderNumber": 0, + "path": "/interface/value/child/allHeroes.ts", + "indent": 0 + } + ] + }, + "346": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ์ƒ์กดํ•œ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 4, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Living Players", + "orderNumber": 0, + "path": "/interface/value/child/allLivingPlayers.ts", + "indent": 0 + } + ] + }, + "347": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 5, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players", + "orderNumber": 0, + "path": "/interface/value/child/allPlayers.ts", + "indent": 0 + } + ] + }, + "348": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ํ™”๋ฌผ์„ ํ™•๋ณดํ•˜์ง€๋„,", + "์ ๋ น ์ค‘์ด์ง€๋„ ์•Š์€ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 6, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players Not On Objective", + "orderNumber": 0, + "path": "/interface/value/child/allPlayersNotOnObjective.ts", + "indent": 0 + } + ] + }, + "349": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ํ™”๋ฌผ ํ™•๋ณด ๋˜๋Š”", + "์ ๋ น ์ค‘์ธ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 7, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players On Objective", + "orderNumber": 0, + "path": "/interface/value/child/allPlayersOnObjective.ts", + "indent": 0 + } + ] + }, + "350": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›… ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 8, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Allowed Heroes", + "orderNumber": 0, + "path": "/interface/value/child/allowedHeroes.ts", + "indent": 0 + } + ] + }, + "351": { + "contexts": [ + "ํ‘œ๋ฉด์œผ๋กœ๋ถ€ํ„ฐ ์ธก์ •ํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ๋†’์ด(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ‘œ๋ฉด์— ์žˆ์œผ๋ฉด 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 9, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Altitude Of", + "orderNumber": 0, + "path": "/interface/value/child/altitudeOf.ts", + "indent": 0 + } + ] + }, + "352": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด ๋ชจ๋‘ TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 10, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "And", + "orderNumber": 0, + "path": "/interface/value/child/and.ts", + "indent": 0 + } + ] + }, + "353": { + "contexts": [ + "๋‘ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ (์ •๊ทœํ™” ๋ถˆํ•„์š”) ์‚ฌ์ด์˜ ๊ฐ์ž…๋‹ˆ๋‹ค. (๋‹จ์œ„: ๋„)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 11, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Angle Between Vectors", + "orderNumber": 0, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 0 + } + ] + }, + "354": { + "contexts": [ + "๋‘ ๊ฐ์„ ๋น„๊ตํ•œ ๊ฐ๋„ ์ฐจ์ด(๋‹จ์œ„: ๋„) ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ์„ ์„œ๋กœ +/- 180", + "์ด๋‚ด์—์„œ ํŽผ์ณ์„œ ๋‘ ๋ฒˆ์งธ ๊ฐ์ด ์ฒซ ๋ฒˆ์งธ ๊ฐ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๊ฒฐ๊ณผ๊ฐ์€ ์–‘์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด์™ธ์˜ ๊ฒฝ์šฐ 0์ด๋‚˜ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 12, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Angle Difference", + "orderNumber": 0, + "path": "/interface/value/child/angleDifference.ts", + "indent": 0 + } + ] + }, + "355": { + "contexts": [ + "๋งจ ๋’ค์— ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’์„ ๋ง๋ถ™์ธ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 13, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Append To Array", + "orderNumber": 0, + "path": "/interface/value/child/appendToArray.ts", + "indent": 0 + } + ] + }, + "356": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ์•„ํฌ์ฝ”์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 14, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arccosineInDegrees.ts", + "indent": 0 + } + ] + }, + "357": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ์•„ํฌ์ฝ”์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 15, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arccosineInRadians.ts", + "indent": 0 + } + ] + }, + "358": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ์•„ํฌ์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 16, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arcsineInDegrees.ts", + "indent": 0 + } + ] + }, + "359": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ์•„ํฌ์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 17, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arcsineInRadians.ts", + "indent": 0 + } + ] + }, + "360": { + "contexts": [ + "์ง€์ •๋œ ๋ถ„์ž์™€ ๋ถ„๋ชจ(๋‹จ์œ„: ๋„)์˜ ์•„ํฌํƒ„์  ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "(ํ”ํžˆ ATAN2 ๋กœ ๋ถˆ๋ฆผ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 18, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 0 + } + ] + }, + "361": { + "contexts": [ + "์ง€์ •๋œ ๋ถ„์ž์™€ ๋ถ„๋ชจ(๋‹จ์œ„: RAD)์˜ ์•„ํฌํƒ„์  ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "(ํ”ํžˆ ATAN2 ๋กœ ๋ถˆ๋ฆผ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 19, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 0 + } + ] + }, + "362": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์— ์ง€์ •๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 20, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Array Contains", + "orderNumber": 0, + "path": "/interface/value/child/arrayContains.ts", + "indent": 0 + } + ] + }, + "363": { + "contexts": [ + "์ง€์ •๋œ ๋ฒ”์œ„ ์ธ๋ฑ์Šค์˜ ๊ฐ’๋งŒ์„", + "ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 21, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Array Slice", + "orderNumber": 0, + "path": "/interface/value/child/arraySlice.ts", + "indent": 0 + } + ] + }, + "364": { + "contexts": [ + "์ด ๊ทœ์น™์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ํ”ผํ•ด๋ฅผ ์ค€ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "VICTIM ๋˜๋Š” EVENT PLAYER์™€ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 22, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Attacker", + "orderNumber": 0, + "path": "/interface/value/child/attacker.ts", + "indent": 0 + } + ] + }, + "365": { + "contexts": [ + "ํ›„๋ฐฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(0, 0, -1)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 23, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Backward", + "orderNumber": 0, + "path": "/interface/value/child/backward.ts", + "indent": 0 + } + ] + }, + "366": { + "contexts": [ + "ํ•œ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํŒ€์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 24, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Closest Player To", + "orderNumber": 0, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 0 + } + ] + }, + "367": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด์˜ ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ TRUE์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 25, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Compare", + "orderNumber": 0, + "path": "/interface/value/child/compare.ts", + "indent": 0 + } + ] + }, + "368": { + "contexts": [ + "์Ÿํƒˆ ์ „์žฅ์—์„œ ์ง€์ •๋œ ํŒ€์˜ ์ ์ˆ˜ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 26, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Control Mode Scoring Percentage", + "orderNumber": 0, + "path": "/interface/value/child/controlModeScoringPercentage.ts", + "indent": 0 + } + ] + }, + "369": { + "contexts": [ + "ํ˜„์žฌ ์Ÿํƒˆ ์ „์žฅ์—์„œ ์ ์ˆ˜๋ฅผ ์ถ•์ ํ•˜๊ณ  ์žˆ๋Š” ํŒ€์ž…๋‹ˆ๋‹ค.", + "์•„๋ฌด ํŒ€๋„ ์ ์ˆ˜๋ฅผ ์ถ•์ ํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’์€ ALL์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 27, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Control Mode Scoring Team", + "orderNumber": 0, + "path": "/interface/value/child/controlModeScoringTeam.ts", + "indent": 0 + } + ] + }, + "370": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ์ฝ”์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 28, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cosine From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/cosineFromDegrees.ts", + "indent": 0 + } + ] + }, + "371": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ์ฝ”์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 29, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cosine From Radians", + "orderNumber": 0, + "path": "/interface/value/child/cosineFromRadians.ts", + "indent": 0 + } + ] + }, + "372": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด ๋‚ด ์š”์†Œ์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. " + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 30, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Count Of", + "orderNumber": 0, + "path": "/interface/value/child/countOf.ts", + "indent": 0 + } + ] + }, + "373": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์˜ ๊ฐ€์œ„๊ณฑ์ž…๋‹ˆ๋‹ค.(์™ผ์ชฝ๊ณผ ์œ„์ชฝ์˜ ๋ฒกํ„ฐ ๊ณฑ์€ ์ „๋ฐฉ ๋ฐฉํ–ฅ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 31, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cross Product", + "orderNumber": 0, + "path": "/interface/value/child/crossProduct.ts", + "indent": 0 + } + ] + }, + "374": { + "contexts": [ + "ํ˜„์žฌ ์—ฐ์‚ฐ ๋Œ€์ƒ์ธ ๋ฐฐ์—ด ์š”์†Œ์ž…๋‹ˆ๋‹ค.", + "FILTERED ARRAY ๋‚˜ SORTED ARRAY ๋“ฑ์˜", + "๊ฐ’์„ ํ™•์ธํ•  ๋•Œ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 32, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Current Array Element", + "orderNumber": 0, + "path": "/interface/value/child/currentArrayElement.ts", + "indent": 0 + } + ] + }, + "375": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ์— ๋Œ€์‘ํ•˜๋Š” ๋‹จ์œ„ ๊ธธ์ด ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 33, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Direction From Angles", + "orderNumber": 0, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 0 + } + ] + }, + "376": { + "contexts": [ + "ํ•œ ์œ„์น˜์—์„œ ๋‹ค๋ฅธ ์œ„์น˜๊นŒ์ง€์˜ ๋‹จ์œ„ ๊ธธ์ด ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 34, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Direction Towards", + "orderNumber": 0, + "path": "/interface/value/child/directionTowards.ts", + "indent": 0 + } + ] + }, + "377": { + "contexts": [ + "๋‘ ์œ„์น˜ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 35, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Distance Between", + "orderNumber": 0, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 0 + } + ] + }, + "378": { + "contexts": [ + "๋‘ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ์˜ ๋น„์œจ์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋ฅผ ์ˆซ์ž๋กœ ๋‚˜๋ˆ„๋ฉด", + "๋น„์œจ์ด ์ฆ๊ฐ๋œ ๋ฒกํ„ฐ๊ฐ€ ๋„์ถœ๋ฉ๋‹ˆ๋‹ค. 0์œผ๋กœ ๋‚˜๋ˆ„๋ฉด 0์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 36, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Divide", + "orderNumber": 0, + "path": "/interface/value/child/divide.ts", + "indent": 0 + } + ] + }, + "379": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์˜ ์ ๊ณฑ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 37, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Dot Product", + "orderNumber": 0, + "path": "/interface/value/child/dotProduct.ts", + "indent": 0 + } + ] + }, + "380": { + "contexts": [ + "์•„๋ž˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(0, -1, 0)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 38, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Down", + "orderNumber": 0, + "path": "/interface/value/child/down.ts", + "indent": 0 + } + ] + }, + "381": { + "contexts": [ + "์š”์†Œ๊ฐ€ ์—†๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 39, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Empty Array", + "orderNumber": 0, + "path": "/interface/value/child/emptyArray.ts", + "indent": 0 + } + ] + }, + "382": { + "contexts": [ + "ํŠน์ • ํ”Œ๋ ˆ์ด์–ด, ์•„์ด์ฝ˜ ๊ฐœ์ฒด, ํšจ๊ณผ ๊ฐœ์ฒด๊ฐ€ ์•„์ง ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒฝ๊ธฐ๋ฅผ ๋‚˜๊ฐ”๋Š”์ง€, ๊ฐœ์ฒด๊ฐ€ ์†Œ๋ฉธ๋๋Š”์ง€ ๋“ฑ์„ ํŒ๋ณ„ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 40, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Entity Exists", + "orderNumber": 0, + "path": "/interface/value/child/entityExists.ts", + "indent": 0 + } + ] + }, + "383": { + "contexts": [ + "์ด ๊ทœ์น™์— ์˜ํ•ด ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š”", + "์ด๋ฒคํŠธ์˜ VICTIM์ด ๋ฐ›๋Š” ํ”ผํ•ด๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 41, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Damage", + "orderNumber": 0, + "path": "/interface/value/child/eventDamage.ts", + "indent": 0 + } + ] + }, + "384": { + "contexts": [ + "์ด๋ฒคํŠธ๋กœ ์ง€์ •๋œ ์ด ๊ทœ์น™์„ ์‹คํ–‰ ์ค‘์ธ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ATTACKER ๋˜๋Š” VICTIM๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 42, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Player", + "orderNumber": 0, + "path": "/interface/value/child/eventPlayer.ts", + "indent": 0 + } + ] + }, + "385": { + "contexts": [ + "์ด ๊ทœ์น™์— ์˜ํ•ด ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ", + "ํ”ผํ•ด๊ฐ€ ์น˜๋ช…ํƒ€(ํ—ค๋“œ์ƒท ๋“ฑ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 43, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Was Critical Hit", + "orderNumber": 0, + "path": "/interface/value/child/eventWasCriticalHit.ts", + "indent": 0 + } + ] + }, + "386": { + "contexts": [ + "(์กฐ์ค€์— ์“ฐ์ธ) ํ”Œ๋ ˆ์ด์–ด์˜ 1์ธ์นญ ์‹œ์  ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 44, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Eye Position", + "orderNumber": 0, + "path": "/interface/value/child/eyePosition.ts", + "indent": 0 + } + ] + }, + "387": { + "contexts": [ + "์›”๋“œ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š”", + "๋ฐฉํ–ฅ์˜ ์ƒ๋Œ€์ ์ธ ๋‹จ์œ„ ๊ธธ์ด ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์—๋Š” ์ข… ๋ฐ ํšก ๋ฐฉํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 45, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Facing Direction Of", + "orderNumber": 0, + "path": "/interface/value/child/facingDirectionOf.ts", + "indent": 0 + } + ] + }, + "388": { + "contexts": [ + "false ์˜ ๋ถ€์šธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 46, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "False", + "orderNumber": 0, + "path": "/interface/value/child/false.ts", + "indent": 0 + } + ] + }, + "389": { + "contexts": [ + "์ง€์ •๋œ ์œ„์น˜๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ํ”Œ๋ ˆ์ด์–ด๋กœ,", + "ํŒ€์˜ ์ œํ•œ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 47, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Farthest Player From", + "orderNumber": 0, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 0 + } + ] + }, + "390": { + "contexts": [ + "์ œ๊ฑฐ๋œ ์ง€์ • ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๊ฐ€์ง„", + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 48, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Filtered Array", + "orderNumber": 0, + "path": "/interface/value/child/filteredArray.ts", + "indent": 0 + } + ] + }, + "391": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ์œผ๋ฉด ๊ฒฐ๊ณผ ๊ฐ’์€ 0 ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 49, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "First Of", + "orderNumber": 0, + "path": "/interface/value/child/firstOf.ts", + "indent": 0 + } + ] + }, + "392": { + "contexts": [ + "๊นƒ๋ฐœ ๋บ๊ธฐ์—์„œ ์ง€์ •๋œ ํŒ€์˜ ๊นƒ๋ฐœ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 50, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Flag Position", + "orderNumber": 0, + "path": "/interface/value/child/flagPosition.ts", + "indent": 0 + } + ] + }, + "393": { + "contexts": [ + "์ „๋ฐฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(0, 0, 1)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 51, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Forward", + "orderNumber": 0, + "path": "/interface/value/child/forward.ts", + "indent": 0 + } + ] + }, + "394": { + "contexts": [ + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ์ „์—ญ ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 52, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Global Variable", + "orderNumber": 0, + "path": "/interface/value/child/globalVariable.ts", + "indent": 0 + } + ] + }, + "395": { + "contexts": [ + "์›”๋“œ์— ๊ฐœ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์˜์›…์„ ์„ ํƒํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ FALSE ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 53, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Has Spawned", + "orderNumber": 0, + "path": "/interface/value/child/hasSpawned.ts", + "indent": 0 + } + ] + }, + "396": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ SET STATUS ์•ก์…˜ ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์ด์™ธ์˜", + "๊ฒŒ์ž„ ๋ฉ”์นด๋‹‰์„ ํ†ตํ•ด ์ง€์ •๋œ ์ƒํƒœ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 54, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Has Status", + "orderNumber": 0, + "path": "/interface/value/child/hasStatus.ts", + "indent": 0 + } + ] + }, + "397": { + "contexts": [ + "ํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ƒ๋ช…๋ ฅ(๋ฐฉ์–ด๋ ฅ ๋ฐ ๋ณดํ˜ธ๋ง‰ ํฌํ•จ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 55, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Health", + "orderNumber": 0, + "path": "/interface/value/child/health.ts", + "indent": 0 + } + ] + }, + "398": { + "contexts": [ + "์˜์›… ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 56, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero", + "orderNumber": 0, + "path": "/interface/value/child/hero.ts", + "indent": 0 + } + ] + }, + "399": { + "contexts": [ + "HERO ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์•„์ด์ฝ˜์œผ๋กœ ํ‘œ์‹œํ•  ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 57, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero Icon String", + "orderNumber": 0, + "path": "/interface/value/child/heroIconString.ts", + "indent": 0 + } + ] + }, + "400": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ์˜์›…์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 58, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero Of", + "orderNumber": 0, + "path": "/interface/value/child/heroOf.ts", + "indent": 0 + } + ] + }, + "401": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์— ๋Œ€์‘ํ•˜๋Š” ํšก์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 59, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Angle From Direction", + "orderNumber": 0, + "path": "/interface/value/child/horizontalAngleFromDirection.ts", + "indent": 0 + } + ] + }, + "402": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ „๋ฐฉ์—์„œ ์ง€์ •๋œ ์œ„์น˜๊นŒ์ง€์˜ ํšก์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ•ด๋‹น ์œ„์น˜๊ฐ€ ํ”Œ๋ ˆ์ด์—‰ ์ขŒ์ธก์— ์žˆ๋Š” ๊ฒฝ์šฐ ์–‘์ˆ˜์ด๋ฉฐ,", + "๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ 0์ด๊ฑฐ๋‚˜ ์Œ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 60, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Angle Towards", + "orderNumber": 0, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 0 + } + ] + }, + "403": { + "contexts": [ + "์›”๋“œ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š”", + "๋ฐฉํ–ฅ์˜ ์ƒ๋Œ€์ ์ธ ํšก์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ขŒ์ธก์œผ๋กœ ํšŒ์ „ ์‹œ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "(+/- 180๋„ ๋ฒ”์œ„)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 61, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Facing Angle Of", + "orderNumber": 0, + "path": "/interface/value/child/horizontalFacingAngleOf.ts", + "indent": 0 + } + ] + }, + "404": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ํšก์ถ• ์†๋„(์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์—๋Š” ๋ชจ๋“  ์ข…์ถ• ์›€์ง์ž„์ด ๋ฐฐ์ œ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 62, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/horizontalSpeedOf.ts", + "indent": 0 + } + ] + }, + "405": { + "contexts": [ + "๋ฐฐ์—ด ๋‚ด์— ์žˆ๋Š” ๊ฐ’์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ -1์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 63, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 0, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 0 + } + ] + }, + "406": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ƒ์กด ์—ฌ๋ถ€ ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 64, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Alive", + "orderNumber": 0, + "path": "/interface/value/child/isAlive.ts", + "indent": 0 + } + ] + }, + "407": { + "contexts": [ + "๊ฒฝ๊ธฐ๊ฐ€ ํ˜„์žฌ ์˜์›… ์„ ํƒ ๋‹จ๊ณ„์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 65, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Assembling Heroes", + "orderNumber": 0, + "path": "/interface/value/child/isAssemblingHeroes.ts", + "indent": 0 + } + ] + }, + "408": { + "contexts": [ + "๊ฒฝ๊ธฐ ์ค‘ ๋ผ์šด๋“œ ์ „ํ™˜ ์‹œ๊ธฐ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 66, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Between Rounds", + "orderNumber": 0, + "path": "/interface/value/child/isBetweenRounds.ts", + "indent": 0 + } + ] + }, + "409": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง€์ •๋œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 67, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Button Held", + "orderNumber": 0, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 0 + } + ] + }, + "410": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง€์ •๋œ ์˜์‚ฌ์†Œํ†ต ์œ ํ˜•", + "(๊ฐ์ • ํ‘œํ˜„, ์Œ์„ฑ ๋Œ€์‚ฌ ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 68, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 0 + } + ] + }, + "411": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์•„๋ฌด ๊ฒƒ์ด๋“  ์˜์‚ฌ์†Œํ†ต ์œ ํ˜•", + "(๊ฐ์ • ํ‘œํ˜„, ์Œ์„ฑ ๋Œ€์‚ฌ ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 69, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAny.ts", + "indent": 0 + } + ] + }, + "412": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ์ • ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 70, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any Emote", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAnyEmote.ts", + "indent": 0 + } + ] + }, + "413": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์Œ์„ฑ ๋Œ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "(์Œ์„ฑ ๋Œ€์‚ฌ์˜ ์ง€์† ์‹œ๊ฐ„์€ 4์ดˆ๋กœ ์ถ”์ •)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 71, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any Voice Line", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAnyVoiceLine.ts", + "indent": 0 + } + ] + }, + "414": { + "contexts": [ + "์Ÿํƒˆ ์ „์žฅ์—์„œ ํ•ด๋‹น ๊ฑฐ์ ์ด ์ž ๊ฒจ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 72, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Control Mode Point Locked", + "orderNumber": 0, + "path": "/interface/value/child/isControlModePointLocked.ts", + "indent": 0 + } + ] + }, + "415": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›…ํฌ๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 73, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Crouching", + "orderNumber": 0, + "path": "/interface/value/child/isCrouching.ts", + "indent": 0 + } + ] + }, + "416": { + "contexts": [ + "ํ˜„์žฌ ๊นƒ๋ฐœ ๋บ๊ธฐ ๊ฒŒ์ž„์ด ์Šน์ž ๊ฒฐ์ •์ „์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 74, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is CTF Mode In Sudden Death", + "orderNumber": 0, + "path": "/interface/value/child/isCTFModeInSuddenDeath.ts", + "indent": 0 + } + ] + }, + "417": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์‚ฌ๋ง ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 75, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Dead", + "orderNumber": 0, + "path": "/interface/value/child/isDead.ts", + "indent": 0 + } + ] + }, + "418": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ฃผ๋ฌด๊ธฐ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 76, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Firing Primary", + "orderNumber": 0, + "path": "/interface/value/child/isFiringPrimary.ts", + "indent": 0 + } + ] + }, + "419": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณด์กฐ ๋ฌด๊ธฐ ๊ณต๊ฒฉ์ด ์‚ฌ์šฉ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 77, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Firing Secondary", + "orderNumber": 0, + "path": "/interface/value/child/isFiringSecondary.ts", + "indent": 0 + } + ] + }, + "420": { + "contexts": [ + "๊นƒ๋ฐœ ๋บ๊ธฐ์—์„œ ์ง€์ •๋œ ํŒ€์˜ ๊นƒ๋ฐœ์ด ํ•ด๋‹น ํŒ€์˜ ๊ธฐ์ง€์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 78, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Flag At Base", + "orderNumber": 0, + "path": "/interface/value/child/isFlagAtBase.ts", + "indent": 0 + } + ] + }, + "421": { + "contexts": [ + "๊นƒ๋ฐœ ๋บ๊ธฐ์—์„œ ์ƒ๋Œ€ ํŒ€์ด ์ง€์ •๋œ ํŒ€์˜ ๊นƒ๋ฐœ์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 79, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Flag Being Carried", + "orderNumber": 0, + "path": "/interface/value/child/isFlagBeingCarried.ts", + "indent": 0 + } + ] + }, + "422": { + "contexts": [ + "๊ฒฝ๊ธฐ์˜ ์ฃผ์š” ๋‹จ๊ณ„(์ „ํˆฌ ๋ฐ ์ ์ˆ˜ ์‚ฐ์ •์ด ํ—ˆ์šฉ๋˜๋Š” ์‹œ๊ธฐ)๊ฐ€ ์ง„ํ–‰ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 80, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Game In Progress", + "orderNumber": 0, + "path": "/interface/value/child/isGameInProgress.ts", + "indent": 0 + } + ] + }, + "423": { + "contexts": [ + "(ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ) ์ง€์ •๋œ ์˜์›…์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 81, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Hero Being Played", + "orderNumber": 0, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 0 + } + ] + }, + "424": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ณต์ค‘์— ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 82, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Air", + "orderNumber": 0, + "path": "/interface/value/child/isInAir.ts", + "indent": 0 + } + ] + }, + "425": { + "contexts": [ + "๋‘ ์œ„์น˜๊ฐ€ ์„œ๋กœ ๋ณด์ด๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 83, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Line Of Sight", + "orderNumber": 0, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 0 + } + ] + }, + "426": { + "contexts": [ + "๊ฒฝ๊ธฐ๊ฐ€ ํ˜„์žฌ ์ค€๋น„ ๋‹จ๊ณ„์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 84, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Setup", + "orderNumber": 0, + "path": "/interface/value/child/isInSetup.ts", + "indent": 0 + } + ] + }, + "427": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ „ํˆฌ์ค€๋น„์‹ค์— ์žˆ๋Š”์ง€", + "(๋˜ํ•œ ์น˜์œ ๋˜๊ณ  ์˜์›…์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€) ์—ฌ๋ถ€ ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 85, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Spawn Room", + "orderNumber": 0, + "path": "/interface/value/child/isInSpawnRoom.ts", + "indent": 0 + } + ] + }, + "428": { + "contexts": [ + "LOCATION์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์‹œ์•ผ์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 86, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In View Angle", + "orderNumber": 0, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 0 + } + ] + }, + "429": { + "contexts": [ + "๊ฒฝ๊ธฐ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 87, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Match Complete", + "orderNumber": 0, + "path": "/interface/value/child/isMatchComplete.ts", + "indent": 0 + } + ] + }, + "430": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๋™ํ•˜๊ณ  ์žˆ๋Š”์ง€", + "์—ฌ๋ถ€(ํ˜„์žฌ ์†๋„๊ฐ€ 0์ธ์ง€ ์—ฌ๋ถ€๋กœ ํŒ๋‹จ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 88, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Moving", + "orderNumber": 0, + "path": "/interface/value/child/isMoving.ts", + "indent": 0 + } + ] + }, + "431": { + "contexts": [ + "์ง€์ •๋œ ๋ชฉํ‘œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ์ ๋ น, ํ˜ธ์œ„ ๋˜๋Š”", + "์ ๋ น/ํ˜ธ์œ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ FALSE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 89, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Objective Complete", + "orderNumber": 0, + "path": "/interface/value/child/isObjectiveComplete.ts", + "indent": 0 + } + ] + }, + "432": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฐฉ์ง€(๋˜๋Š” ๊ฑท๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ‘œ๋ฉด์— ์žˆ๋Š”) ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 90, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Ground", + "orderNumber": 0, + "path": "/interface/value/child/isOnGround.ts", + "indent": 0 + } + ] + }, + "433": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ํ™”๋ฌผ ๋˜๋Š” ์ ๋ น ์ง€์ ์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 91, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Objective", + "orderNumber": 0, + "path": "/interface/value/child/isOnObjective.ts", + "indent": 0 + } + ] + }, + "434": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฒฝ์— ์žˆ๋Š” ์ƒํƒœ(์˜ค๋ฅด๊ฑฐ๋‚˜ ํƒ€๋Š” ์ƒํƒœ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 92, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Wall", + "orderNumber": 0, + "path": "/interface/value/child/isOnWall.ts", + "indent": 0 + } + ] + }, + "435": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ดˆ์ƒํ™”๊ฐ€ ํญ์ฃผ ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 93, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Portrait On Fire", + "orderNumber": 0, + "path": "/interface/value/child/isPortraitOnFire.ts", + "indent": 0 + } + ] + }, + "436": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„œ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€", + "(์ด๋™ํ•˜์ง€ ์•Š๊ณ  ๊ณต์ค‘์— ์žˆ๋Š”", + "์ƒํƒœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋กœ ํŒ๋‹จ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 94, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Standing", + "orderNumber": 0, + "path": "/interface/value/child/isStanding.ts", + "indent": 0 + } + ] + }, + "437": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์ด ํ˜„์žฌ ์ˆ˜๋น„ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ์ ๋ น, ํ˜ธ์œ„,", + "๋˜๋Š” ์ ๋ น/ํ˜ธ์œ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ FALSE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 95, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Team On Defense", + "orderNumber": 0, + "path": "/interface/value/child/isTeamOnDefense.ts", + "indent": 0 + } + ] + }, + "438": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์ด ํ˜„์žฌ ๊ณต๊ฒฉ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ์ ๋ น, ํ˜ธ์œ„,", + "๋˜๋Š” ์ ๋ น/ํ˜ธ์œ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ FALSE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 96, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Team On Offense", + "orderNumber": 0, + "path": "/interface/value/child/isTeamOnOffense.ts", + "indent": 0 + } + ] + }, + "439": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์ด ์ง€์ •๋œ ์กฐ๊ฑด์— ๋Œ€ํ•ด TRUE์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 97, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is True For All", + "orderNumber": 0, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 0 + } + ] + }, + "440": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ง€์ •๋œ ์กฐ๊ฑด์— ๋Œ€ํ•ด TRUE์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 98, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 0, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 0 + } + ] + }, + "441": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ์ˆ  1์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 99, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ability 1", + "orderNumber": 0, + "path": "/interface/value/child/isUsingAbility1.ts", + "indent": 0 + } + ] + }, + "442": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ์ˆ  2๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 100, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ability 2", + "orderNumber": 0, + "path": "/interface/value/child/isUsingAbility2.ts", + "indent": 0 + } + ] + }, + "443": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ถ๊ทน๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 101, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ultimate", + "orderNumber": 0, + "path": "/interface/value/child/isUsingUltimate.ts", + "indent": 0 + } + ] + }, + "444": { + "contexts": [ + "๊ฒฝ๊ธฐ ์‹œ์ž‘์— ์•ž์„œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฐธ์—ฌํ•˜๊ธฐ๋ฅผ", + "๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 102, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Waiting For Players", + "orderNumber": 0, + "path": "/interface/value/child/isWaitingForPlayers.ts", + "indent": 0 + } + ] + }, + "445": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์—", + "์ƒ์„ฑ๋œ ํšจ๊ณผ ๋˜๋Š” ์•„์ด์ฝ˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 103, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Created Entity", + "orderNumber": 0, + "path": "/interface/value/child/lastCreatedEntity.ts", + "indent": 0 + } + ] + }, + "446": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ ์‹คํ–‰๋œ ์ตœ๊ทผ์˜", + "START DAMGE MODIFICATION ์•ก์…˜์˜ ID์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 104, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Damage Modification Id", + "orderNumber": 0, + "path": "/interface/value/child/lastDamageModificationId.ts", + "indent": 0 + } + ] + }, + "447": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‹คํ–‰๋œ", + "DAMAGE OVER TIME ์•ก์…˜์˜ ID์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 105, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Damage Over Time Id", + "orderNumber": 0, + "path": "/interface/value/child/lastDamageOverTimeId.ts", + "indent": 0 + } + ] + }, + "448": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‹คํ–‰๋œ", + "HEAL OVER TIME ์•ก์…˜์˜ ID์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 106, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Heal Over Time Id", + "orderNumber": 0, + "path": "/interface/value/child/lastHealOverTimeId.ts", + "indent": 0 + } + ] + }, + "449": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋์— ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 107, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Of", + "orderNumber": 0, + "path": "/interface/value/child/lastOf.ts", + "indent": 0 + } + ] + }, + "450": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ", + "CREATE HUD TEXT ์•ก์…˜ ๋˜๋Š”", + "CREATE IN-WORLD TEXT ์•ก์…˜์œผ๋กœ", + "์ƒ์„ฑํ•œ ํ…์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 108, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Text Id", + "orderNumber": 0, + "path": "/interface/value/child/lastTextId.ts", + "indent": 0 + } + ] + }, + "451": { + "contexts": [ + "์ขŒ์ธก์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(1, 0,0)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 109, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Left", + "orderNumber": 0, + "path": "/interface/value/child/left.ts", + "indent": 0 + } + ] + }, + "452": { + "contexts": [ + "์ œ๊ณต๋œ ์›”๋“œ ์ขŒํ‘œ ๋ฒกํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ๋กœ์ปฌ ์ขŒํ‘œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 110, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Local Vector Of", + "orderNumber": 0, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 0 + } + ] + }, + "453": { + "contexts": [ + "๊ฒฝ๊ธฐ์˜ ํ˜„์žฌ ๋ผ์šด๋“œ์ž…๋‹ˆ๋‹ค. 1๋ถ€ํ„ฐ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 111, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Match Round", + "orderNumber": 0, + "path": "/interface/value/child/matchRound.ts", + "indent": 0 + } + ] + }, + "454": { + "contexts": [ + "ํ˜„์žฌ ๊ฒŒ์ž„ ๋ชจ๋“œ ๋‹จ๊ณ„์˜ ์ž”์—ฌ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 112, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Match Time", + "orderNumber": 0, + "path": "/interface/value/child/matchTime.ts", + "indent": 0 + } + ] + }, + "455": { + "contexts": [ + "๋‘ ์ˆซ์ž ์ค‘ ๋†’์€ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 113, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Max", + "orderNumber": 0, + "path": "/interface/value/child/max.ts", + "indent": 0 + } + ] + }, + "456": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ(๋ฐฉ์–ด๋ ฅ ๋ฐ ๋ณดํ˜ธ๋ง‰ ํฌํ•จ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 114, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Max Health", + "orderNumber": 0, + "path": "/interface/value/child/maxHealth.ts", + "indent": 0 + } + ] + }, + "457": { + "contexts": [ + "๋‘ ์ˆซ์ž ์ค‘ ๋‚ฎ์€ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 115, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Min", + "orderNumber": 0, + "path": "/interface/value/child/min.ts", + "indent": 0 + } + ] + }, + "458": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€์ž…๋‹ˆ๋‹ค.", + "์–ด๋–ค ์ˆซ์ž์ด๋“  MODULO 0์˜ ๊ฒฐ๊ณผ๋Š” 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 116, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Modulo", + "orderNumber": 0, + "path": "/interface/value/child/modulo.ts", + "indent": 0 + } + ] + }, + "459": { + "contexts": [ + "๋‘ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ์˜ ๊ณฑ์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์— ์ˆซ์ž๋ฅผ", + "๊ณฑํ•˜๋ฉด ๋น„์œจ์ด ์ฆ๊ฐ๋œ ๋ฒกํ„ฐ๊ฐ€ ๋„์ถœ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 117, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 0, + "path": "/interface/value/child/multiply.ts", + "indent": 0 + } + ] + }, + "460": { + "contexts": [ + "์„œ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ  ์ƒ์„ฑ ์ง€์ ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ", + "์ง€์ •๋œ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 118, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Nearest Walkable Position", + "orderNumber": 0, + "path": "/interface/value/child/nearestWalkablePosition.ts", + "indent": 0 + } + ] + }, + "461": { + "contexts": [ + "๋ฒกํ„ฐ์˜ ๋‹จ์œ„ ๊ธธ์ด ์ •๊ทœํ™”์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 119, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Normalize", + "orderNumber": 0, + "path": "/interface/value/child/normalize.ts", + "indent": 0 + } + ] + }, + "462": { + "contexts": [ + "๋ฐฉ์–ด๋ ฅ ๋ฐ ๋ณดํ˜ธ๋ง‰์„ ํฌํ•จํ•˜์—ฌ 0๊ณผ 1์‚ฌ์ด๋กœ ", + "์ •๊ทœํ™” ๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ƒ๋ช…๋ ฅ์ž…๋‹ˆ๋‹ค.", + "(์˜ˆ๋ฅผ ๋“ค์–ด, 0์€ ์ƒ๋ช…๋ ฅ ์—†์Œ,", + "0.5๋Š” ์ƒ๋ช…๋ ฅ ์ ˆ๋ฐ˜, 1์€ ์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ ๋“ฑ๋“ฑ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 120, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Normalized Health", + "orderNumber": 0, + "path": "/interface/value/child/normalizedHealth.ts", + "indent": 0 + } + ] + }, + "463": { + "contexts": [ + "์ž…๋ ฅ ์ •๋ณด๊ฐ€ FALSE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 121, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Not", + "orderNumber": 0, + "path": "/interface/value/child/not.ts", + "indent": 0 + } + ] + }, + "464": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ง€์ •๋œ ์ž…๋ ฅ ์ •๋ณด์—", + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "๋น„๊ต ๋˜๋Š” ๋””๋ฒ„๊ทธ์šฉ์œผ๋กœ ์‹ค์ˆ˜ 0์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 122, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Null", + "orderNumber": 0, + "path": "/interface/value/child/null.ts", + "indent": 0 + } + ] + }, + "465": { + "contexts": [ + "์‹ค์ˆ˜ ํ˜•์‹์˜ ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 123, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number", + "orderNumber": 0, + "path": "/interface/value/child/number.ts", + "indent": 0 + }, + { + "topName": "Number", + "orderNumber": 1, + "path": "/interface/value/child/number.ts", + "indent": 4 + } + ] + }, + "466": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด ์‚ฌ๋ง ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 124, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Dead Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfDeadPlayers.ts", + "indent": 0 + } + ] + }, + "467": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ๋กํ•œ ์‚ฌ๋ง ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๊ฒŒ์ž„์ด ์ง„ํ–‰ ์ค‘์ผ๋•Œ๋งŒ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 125, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Deaths", + "orderNumber": 0, + "path": "/interface/value/child/numberOfDeaths.ts", + "indent": 0 + } + ] + }, + "468": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ๋กํ•œ ์ฒ˜์น˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๊ฒŒ์ž„์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 126, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Eliminations", + "orderNumber": 0, + "path": "/interface/value/child/numberOfEliminations.ts", + "indent": 0 + } + ] + }, + "469": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ๋กํ•œ ๊ฒฐ์ •ํƒ€ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๊ฒŒ์ž„์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 127, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Final Blows", + "orderNumber": 0, + "path": "/interface/value/child/numberOfFinalBlows.ts", + "indent": 0 + } + ] + }, + "470": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ์ง€์ •๋œ ์˜์›…์„", + "ํ”Œ๋ ˆ์ดํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 128, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 0, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 0 + } + ] + }, + "471": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ์—์„œ ์ƒ์กดํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 129, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Living Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfLivingPlayers.ts", + "indent": 0 + } + ] + }, + "472": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด ์กด์žฌํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 130, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfPlayers.ts", + "indent": 0 + } + ] + }, + "473": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ํ™”๋ฌผ ๋˜๋Š”", + "๊ฑฐ์ ์„ ํ™•๋ณดํ•˜๋ ค๋Š” ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 131, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Players On Objective", + "orderNumber": 0, + "path": "/interface/value/child/numberOfPlayersOnObjective.ts", + "indent": 0 + } + ] + }, + "474": { + "contexts": [ + "ํ˜„์žฌ ํ™œ์„ฑํ™” ์ค‘์ธ ๊ฑฐ์ , ํ™”๋ฌผ ๊ฒฝ์œ ์ง€, ํ™”๋ฌผ ๋ชฉ์ ์ง€์ž…๋‹ˆ๋‹ค.", + "(0, 1, 2 ์ค‘ ํ•˜๋‚˜) ์ ๋ น, ์ ๋ น/ํ˜ธ์œ„, ํ˜ธ์œ„, ์Ÿํƒˆ ์ „์žฅ์—์„œ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 132, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Objective Index", + "orderNumber": 0, + "path": "/interface/value/child/objectiveIndex.ts", + "indent": 0 + } + ] + }, + "475": { + "contexts": [ + "์ง€์ •๋œ ๋ชฉํ‘œ๊ฐ€ ์žˆ๋Š” ์›”๋“œ ๋‚ด์˜ ์œ„์น˜(๊ฑฐ์ , ํ™”๋ฌผ ๊ฒฝ์œ ์ง€, ํ™”๋ฌผ ๋ชฉ์ ์ง€) ์ž…๋‹ˆ๋‹ค.", + "์ ๋ น, ์ ๋ น/ํ˜ธ์œ„, ํ˜ธ์œ„, ์Ÿํƒˆ ์ „์žฅ์—์„œ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 133, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Objective Position", + "orderNumber": 0, + "path": "/interface/value/child/objectivePosition.ts", + "indent": 0 + } + ] + }, + "476": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์˜ ์ƒ๋Œ€ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 134, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Opposite Team Of", + "orderNumber": 0, + "path": "/interface/value/child/oppositeTeamOf.ts", + "indent": 0 + } + ] + }, + "477": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด ์ค‘ ํ•˜๋‚˜๊ฐ€ TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 135, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Or", + "orderNumber": 0, + "path": "/interface/value/child/or.ts", + "indent": 0 + } + ] + }, + "478": { + "contexts": [ + "์›”๋“œ ๋‚ด์˜ ํ™œ์„ฑํ™” ๋œ ํ™”๋ฌผ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 136, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Payload Position", + "orderNumber": 0, + "path": "/interface/value/child/payloadPosition.ts", + "indent": 0 + } + ] + }, + "479": { + "contexts": [ + "ํ•ด๋‹น ํ™œ์„ฑํ™” ํ™”๋ฌผ์˜ ๋ชฉ์ ์ง€๊นŒ์ง€ ์ง„ํ–‰๋ฅ ์ž…๋‹ˆ๋‹ค.(๋น„์œจ๋กœ ํ‘œ์‹œ๋จ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 137, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Payload Progress Percentage", + "orderNumber": 0, + "path": "/interface/value/child/payloadProgressPercentage.ts", + "indent": 0 + } + ] + }, + "480": { + "contexts": [ + "๊นƒ๋ฐœ ๋บ๊ธฐ์—์„œ ์ง€์ •๋œ ํŒ€์˜ ๊นƒ๋ฐœ์„ ์ง€๋‹Œ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "์•„๋ฌด๋„ ๊นƒ๋ฐœ์„ ๊ฐ€์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’์€ NULL์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 138, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Carrying Flag", + "orderNumber": 0, + "path": "/interface/value/child/playerCarryingFlag.ts", + "indent": 0 + } + ] + }, + "481": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€์„ ์—์„œ", + "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํŒ€์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 139, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Closest To Reticle", + "orderNumber": 0, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 0 + } + ] + }, + "482": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง„ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 140, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Variable", + "orderNumber": 0, + "path": "/interface/value/child/playerVariable.ts", + "indent": 0 + } + ] + }, + "483": { + "contexts": [ + "๊ฒŒ์ž„ ๋‚ด ์ง€์ •๋œ ์Šฌ๋กฏ์„ ์ ์œ ํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 141, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players In Slot", + "orderNumber": 0, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 0 + } + ] + }, + "484": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€์„ ์„ ๊ธฐ์ค€์œผ๋กœ", + "์‹œ์•ผ๊ฐ ์•ˆ์— ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํŒ€ ๋‹จ์œ„๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 142, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 0, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 0 + } + ] + }, + "485": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ์ง€์ •๋œ ์˜์›…์„", + "ํ”Œ๋ ˆ์ดํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 143, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 0, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 0 + } + ] + }, + "486": { + "contexts": [ + "ํ•œ ์œ„์น˜์˜ ์ง€์ •๋œ ๊ฑฐ๋ฆฌ ๋‚ด ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.", + "ํŒ€ ๋˜๋Š” ์‹œ์•ผ ๋ฒ”์œ„๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 144, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players Within Radius", + "orderNumber": 0, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 0 + } + ] + }, + "487": { + "contexts": [ + "ํ™œ์„ฑํ™”๋œ ๊ฑฐ์ ์—์„œ, ์ ๋ น ์ค‘์ธ ๊ฑฐ์ ์˜ ์ ๋ น ์ง„์ฒ™๋„์ž…๋‹ˆ๋‹ค.(๋น„์œจ๋กœ ํ‘œ์‹œ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 145, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Point Capture Percentage", + "orderNumber": 0, + "path": "/interface/value/child/pointCapturePercentage.ts", + "indent": 0 + } + ] + }, + "488": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์œ„์น˜(๋ฒกํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 146, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Position Of", + "orderNumber": 0, + "path": "/interface/value/child/positionOf.ts", + "indent": 0 + } + ] + }, + "489": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋งŒํผ ์ œ๊ณฑํ•ฉ๋‹ˆ๋‹ค.", + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์Œ์ˆ˜์ด๋ฉด ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 147, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 0, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 0 + } + ] + }, + "490": { + "contexts": [ + "์ง€์ •ํ•œ ์ตœ๋Œ€๊ฐ’ ์ดํ•˜, ์ตœ์†Œ๊ฐ’ ์ด์ƒ", + "๋ฒ”์œ„ ๋‚ด์—์„œ ๋ฌด์ž‘์œ„ ์ •์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 148, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Integer", + "orderNumber": 0, + "path": "/interface/value/child/randomInteger.ts", + "indent": 0 + } + ] + }, + "491": { + "contexts": [ + "์ง€์ •๋œ ์ตœ๋Œ€ ๋ฐ ์ตœ์†Œ๊ฐ’ ๋ฒ”์œ„", + "๋‚ด์—์„œ์˜ ๋ฌด์ž‘์œ„ ์‹ค์ˆ˜๊ฐ’ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 149, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Real", + "orderNumber": 0, + "path": "/interface/value/child/randomReal.ts", + "indent": 0 + } + ] + }, + "492": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋ฌด์ž‘์œ„ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 150, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Value In Array", + "orderNumber": 0, + "path": "/interface/value/child/randomValueInArray.ts", + "indent": 0 + } + ] + }, + "493": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๊ฐ’์„", + "๋ฌด์ž‘์œ„ ์ˆœ์„œ๋กœ ๋‚˜์—ดํ•œ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 151, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Randomized Array", + "orderNumber": 0, + "path": "/interface/value/child/randomizedArray.ts", + "indent": 0 + } + ] + }, + "494": { + "contexts": [ + "RAY CAST HIT POSITION์—์„œ์˜ ํ‘œ๋ฉด ๋ฒ•์„ ", + "(์•„๋ฌด๊ฒƒ๋„ ๋งž์ง€ ์•Š์€ ๊ฒฝ์šฐ END POS์—์„œ START POS)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 152, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 0 + } + ] + }, + "495": { + "contexts": [ + "๋ ˆ์ด์บ์ŠคํŠธ๋กœ ๋งžํžŒ ํ”Œ๋ ˆ์ด์–ด", + "(๋งž์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ NULL)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 153, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 0 + } + ] + }, + "496": { + "contexts": [ + "๋ ˆ์ด์บ์ŠคํŠธ๋กœ ๋งžํžŒ ํ‘œ๋ฉด,", + "์˜ค๋ธŒ์ ํŠธ, ๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ์œ„์น˜", + "(์•„๋ฌด๊ฒƒ๋„ ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ END POS)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 154, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 0 + } + ] + }, + "497": { + "contexts": [ + "ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’(์žˆ๋Š” ๊ฒฝ์šฐ)์ด", + "์ œ๊ฑฐ๋œ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 155, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Remove From Array", + "orderNumber": 0, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 0 + } + ] + }, + "498": { + "contexts": [ + "์šฐ์ธก์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(-1, 0, 0)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 156, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Right", + "orderNumber": 0, + "path": "/interface/value/child/right.ts", + "indent": 0 + } + ] + }, + "499": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์„ ๋ฐ˜์˜ฌ๋ฆผํ•  ๋Œ€์ƒ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 157, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Round To Integer", + "orderNumber": 0, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 0 + } + ] + }, + "500": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ๊ฐœ๋ณ„ ์ „ํˆฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ 0์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 158, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Score Of", + "orderNumber": 0, + "path": "/interface/value/child/scoreOf.ts", + "indent": 0 + } + ] + }, + "501": { + "contexts": [ + "ํ˜„์žฌ ๊ฒŒ์ž„ ์ธ์Šคํ„ด์Šค์˜ CPU ์‚ฌ์šฉ๋ฅ (%)์ž…๋‹ˆ๋‹ค.", + "์ด ์ˆ˜์น˜๊ฐ€ 100์— ๊ฐ€๊นŒ์›Œ์ง€๊ฑฐ๋‚˜", + "100์„ ์ดˆ๊ณผํ•˜๋ฉด ๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ", + "์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 159, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load", + "orderNumber": 0, + "path": "/interface/value/child/serverLoad.ts", + "indent": 0 + } + ] + }, + "502": { + "contexts": [ + "์ตœ๊ทผ 2์ดˆ๊ฐ„ ๊ฒŒ์ž„ ์ธ์Šคํ„ด์Šค์˜ ํ‰๊ท  CPU ์‚ฌ์šฉ๋ฅ (%)์ž…๋‹ˆ๋‹ค.", + "์ด ์ˆ˜์น˜๊ฐ€ 100์— ๊ฐ€๊นŒ์›Œ์ง€๊ฑฐ๋‚˜ 100์„ ์ดˆ๊ณผํ•˜๋ฉด", + "๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€", + "์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 160, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load Average", + "orderNumber": 0, + "path": "/interface/value/child/serverLoadAverage.ts", + "indent": 0 + } + ] + }, + "503": { + "contexts": [ + "์ตœ๊ทผ 2์ดˆ๊ฐ„ ๊ฒŒ์ž„ ์ธ์Šคํ„ด์Šค์˜ ์ตœ๋Œ€ CPU ์‚ฌ์šฉ๋ฅ (%)์ž…๋‹ˆ๋‹ค.", + "์ด ์ˆ˜์น˜๊ฐ€ 100์— ๊ฐ€๊นŒ์›Œ์ง€๊ฑฐ๋‚˜ 100์„ ์ดˆ๊ณผํ•˜๋ฉด", + "๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€", + "์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 161, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load Peak", + "orderNumber": 0, + "path": "/interface/value/child/serverLoadPeak.ts", + "indent": 0 + } + ] + }, + "504": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 162, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sine From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/sineFromDegrees.ts", + "indent": 0 + } + ] + }, + "505": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 163, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sine From Radians", + "orderNumber": 0, + "path": "/interface/value/child/sineFromRadians.ts", + "indent": 0 + } + ] + }, + "506": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์Šฌ๋กฏ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.", + "ํŒ€์ „์—์„œ ๊ฐ ํŒ€์€ 0์—์„œ 5๊ฐœ์˜ ์Šฌ๋กฏ์„ ๋ณด์œ ํ•˜๋ฉฐ,", + "๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„์—์„œ ์Šฌ๋กฏ ์ˆ˜๋Š” 0์—์„œ 11๊นŒ์ง€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 164, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Slot Of", + "orderNumber": 0, + "path": "/interface/value/child/slotOf.ts", + "indent": 0 + } + ] + }, + "507": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ", + "VALUE RANK์— ๋”ฐ๋ผ ํ‰๊ฐ€ํ•˜๊ณ ", + "์ •๋ ฌํ•ด์„œ ๋งŒ๋“  ์ƒˆ ๋ฐฐ์—ด ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 165, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sorted Array", + "orderNumber": 0, + "path": "/interface/value/child/sortedArray.ts", + "indent": 0 + } + ] + }, + "508": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์†๋„(์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 166, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/speedOf.ts", + "indent": 0 + } + ] + }, + "509": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฉํ–ฅ์—์„œ ํ”Œ๋ ˆ์ด์–ด์˜", + "ํ˜„์žฌ ์†๋„(์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 167, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Speed Of In Direction", + "orderNumber": 0, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 0 + } + ] + }, + "510": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์˜ ์ œ๊ณฑ๊ทผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 168, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Square Root", + "orderNumber": 0, + "path": "/interface/value/child/squareRoot.ts", + "indent": 0 + } + ] + }, + "511": { + "contexts": [ + "์„ ํƒํ•œ ํ…์ŠคํŠธ์™€ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 169, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "String", + "orderNumber": 0, + "path": "/interface/value/child/string.ts", + "indent": 0 + } + ] + }, + "512": { + "contexts": [ + "๋‘ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 170, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Subtract", + "orderNumber": 0, + "path": "/interface/value/child/subtract.ts", + "indent": 0 + } + ] + }, + "513": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ํƒ„์  ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 171, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Tangent From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/tangentFromDegrees.ts", + "indent": 0 + } + ] + }, + "514": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ํƒ„์  ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 172, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Tangent From Radians", + "orderNumber": 0, + "path": "/interface/value/child/tangentFromRadians.ts", + "indent": 0 + } + ] + }, + "515": { + "contexts": [ + "ํŒ€ ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค. ALL ์˜ต์…˜์€ ํŒ€์ „์˜ ์–‘ํŒ€,", + "๋˜๋Š” ๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„์˜ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 173, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team", + "orderNumber": 0, + "path": "/interface/value/child/team.ts", + "indent": 0 + } + ] + }, + "516": { + "contexts": [ + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ์†Œ์† ํŒ€์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ๊ฐœ๋ณ„ ์ „ํˆฌ์ธ ๊ฒฝ์šฐ ํŒ€์€ ALL๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 174, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team Of", + "orderNumber": 0, + "path": "/interface/value/child/teamOf.ts", + "indent": 0 + } + ] + }, + "517": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์˜ ํ˜„์žฌ ์ ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 175, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team Score", + "orderNumber": 0, + "path": "/interface/value/child/teamScore.ts", + "indent": 0 + } + ] + }, + "518": { + "contexts": [ + "ํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐฉํ–ฅ ์ž…๋ ฅ ์ •๋ณด์ž…๋‹ˆ๋‹ค. ", + "X ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ํšก๋ฐฉํ–ฅ ์ž…๋ ฅ ์ •๋ณด(์™ผ์ชฝ์ด ์–‘),", + "Z ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ข…๋ฐฉํ–ฅ ์ž…๋ ฅ ์ •๋ณด(์œ„์ชฝ์ด ์–‘)์ธ ๋ฒกํ„ฐ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 176, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Throttle Of", + "orderNumber": 0, + "path": "/interface/value/child/throttleOf.ts", + "indent": 0 + } + ] + }, + "519": { + "contexts": [ + "๊ฒŒ์ž„ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ ๊ฒฝ๊ณผ ์‹œ๊ฐ„(๋‹จ์œ„: ์ดˆ)์ž…๋‹ˆ๋‹ค.", + "(์„ค์ • ๋ฐ ์ „ํ™˜ ์‹œ๊ฐ„ ํฌํ•จ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 177, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Total Time Elapsed", + "orderNumber": 0, + "path": "/interface/value/child/totalTimeElapsed.ts", + "indent": 0 + } + ] + }, + "520": { + "contexts": [ + "TRUE์˜ ๋ถ€์šธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 178, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "True", + "orderNumber": 0, + "path": "/interface/value/child/true.ts", + "indent": 0 + } + ] + }, + "521": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ๊ถ๊ทน๊ธฐ ์ถฉ์ „๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 179, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ultimate Charge Percent", + "orderNumber": 0, + "path": "/interface/value/child/ultimateChargePercent.ts", + "indent": 0 + } + ] + }, + "522": { + "contexts": [ + "์œ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(0, 1, 0)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 180, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Up", + "orderNumber": 0, + "path": "/interface/value/child/up.ts", + "indent": 0 + } + ] + }, + "523": { + "contexts": [ + "ํ•œ ๋ฐฐ์—ด์˜ ์ง€์ •๋œ ์š”์†Œ์— ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "๋Œ€์ƒ ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 181, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Value In Array", + "orderNumber": 0, + "path": "/interface/value/child/valueInArray.ts", + "indent": 0 + } + ] + }, + "524": { + "contexts": [ + "3๊ฐœ์˜ ์‹ค์ˆ˜(X, Y, Z)๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.", + "X๋Š” ์ขŒ์ธก, Y๋Š” ์œ„, Z๋Š” ์ „๋ฐฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.", + "๋ฒกํ„ฐ๋Š” ์œ„์น˜, ๋ฐฉํ–ฅ, ์†๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 182, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vector", + "orderNumber": 0, + "path": "/interface/value/child/vector.ts", + "indent": 0 + } + ] + }, + "525": { + "contexts": [ + "ํ•œ ์œ„์น˜์—์„œ ๋‹ค๋ฅธ ์œ„์น˜๊นŒ์ง€์˜ ๋ณ€์œ„ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 183, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vector Towards", + "orderNumber": 0, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 0 + } + ] + }, + "526": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์†๋„(๋ฒกํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ‘œ๋ฉด ์œ„์— ์žˆ๋Š” ๊ฒฝ์šฐ,", + "๊ฒฝ์‚ฌ๋กœ๋ฅผ ์˜ค๋ฅด ๋‚ด๋ฆฐ๋‹ค๊ณ  ํ•ด๋„ Y ๊ตฌ์„ฑ์š”์†Œ ์†๋„๋Š” 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 184, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Velocity Of", + "orderNumber": 0, + "path": "/interface/value/child/velocityOf.ts", + "indent": 0 + } + ] + }, + "527": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์˜ ๋Œ€์‘ํ•˜๋Š” ์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 185, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle From Direction", + "orderNumber": 0, + "path": "/interface/value/child/verticalAngleFromDirection.ts", + "indent": 0 + } + ] + }, + "528": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ „๋ฐฉ์—์„œ ์ง€์ •๋œ", + "์œ„์น˜๊นŒ์ง€์˜ ์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ•ด๋‹น ์œ„์น˜๊ฐ€", + "ํ”Œ๋ ˆ์ด์–ด ์•„๋ž˜์— ์žˆ๋Š” ๊ฒฝ์šฐ ์–‘์ˆ˜์ด๋ฉฐ,", + "๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ 0์ด๊ฑฐ๋‚˜ ์Œ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 186, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle Towards", + "orderNumber": 0, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 0 + } + ] + }, + "529": { + "contexts": [ + "์›”๋“œ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์˜ ์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‚ด๋ ค๋‹ค๋ณด๋Š” ๊ฒฝ์šฐ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 187, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Facing Angle Of", + "orderNumber": 0, + "path": "/interface/value/child/verticalFacingAngleOf.ts", + "indent": 0 + } + ] + }, + "530": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ข…์ถ• ์†๋„(์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์—๋Š” ๊ฒฝ์‚ฌ๋กœ๋ฅผ ์˜ค๋ฅด๋‚ด๋ฆฌ๋Š” ๋“ฑ์˜ ์›€์ง์ž„ ๋“ฑ", + "๋ชจ๋“  ํšก์ถ• ์ด๋™์ด ๋ฐฐ์ œ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 188, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/verticalSpeedOf.ts", + "indent": 0 + } + ] + }, + "531": { + "contexts": [ + "์ด ๊ทœ์น™์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ํ”ผํ•ด๋ฅผ ๋ฐ›์€ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ATTACKER ๋˜๋Š” EVENT PLAYER์™€ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 189, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Victim", + "orderNumber": 0, + "path": "/interface/value/child/victim.ts", + "indent": 0 + } + ] + }, + "532": { + "contexts": [ + "์ œ๊ณต๋œ ๋กœ์ปฌ ์ขŒํ‘œ ๋ฒกํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ์›”๋“œ ์ขŒํ‘œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 190, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 0, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 0 + } + ] + }, + "533": { + "contexts": [ + "์ง€์ •๋œ ๋ฒกํ„ฐ์˜ X ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค.", + "์ผ๋ฐ˜์ ์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์˜ ๋ฒกํ„ฐ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 191, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "X Component Of", + "orderNumber": 0, + "path": "/interface/value/child/xComponentOf.ts", + "indent": 0 + } + ] + }, + "534": { + "contexts": [ + "์ง€์ •๋œ ๋ฒกํ„ฐ์˜ Y ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค.", + "์ผ๋ฐ˜์ ์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์˜ ๋ฒกํ„ฐ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 192, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Y Component Of", + "orderNumber": 0, + "path": "/interface/value/child/yComponentOf.ts", + "indent": 0 + } + ] + }, + "535": { + "contexts": [ + "์ง€์ •๋œ ๋ฒกํ„ฐ์˜ Z ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค.", + "์ผ๋ฐ˜์ ์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์˜ ๋ฒกํ„ฐ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 193, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Z Component Of", + "orderNumber": 0, + "path": "/interface/value/child/zComponentOf.ts", + "indent": 0 + } + ] + }, + "536": { + "contexts": [ + "์ ˆ๋Œ€๊ฐ’์„ ๊ณ„์‚ฐํ•  ์‹ค์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Absolute Value", + "orderNumber": 1, + "path": "/interface/value/child/absoluteValue.ts", + "indent": 4 + } + ] + }, + "537": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๋กœ", + "๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์•„๋ฌด ๊ฐ’์ด๋‚˜", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Add", + "orderNumber": 1, + "path": "/interface/value/child/add.ts", + "indent": 4 + } + ] + }, + "538": { + "contexts": [ + "์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๋กœ", + "๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์•„๋ฌด ๊ฐ’์ด๋‚˜", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Add", + "orderNumber": 2, + "path": "/interface/value/child/add.ts", + "indent": 4 + } + ] + }, + "539": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†ํ•œ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "All Dead Players", + "orderNumber": 1, + "path": "/interface/value/child/allDeadPlayers.ts", + "indent": 4 + }, + { + "topName": "All Living Players", + "orderNumber": 1, + "path": "/interface/value/child/allLivingPlayers.ts", + "indent": 4 + }, + { + "topName": "All Players", + "orderNumber": 1, + "path": "/interface/value/child/allPlayers.ts", + "indent": 4 + }, + { + "topName": "All Players Not On Objective", + "orderNumber": 1, + "path": "/interface/value/child/allPlayersNotOnObjective.ts", + "indent": 4 + }, + { + "topName": "All Players On Objective", + "orderNumber": 1, + "path": "/interface/value/child/allPlayersOnObjective.ts", + "indent": 4 + } + ] + }, + "540": { + "contexts": [ + "์ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›… ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Allowed Heroes", + "orderNumber": 1, + "path": "/interface/value/child/allowedHeroes.ts", + "indent": 4 + } + ] + }, + "541": { + "contexts": [ + "๊ณ ๋„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Altitude Of", + "orderNumber": 1, + "path": "/interface/value/child/altitudeOf.ts", + "indent": 4 + } + ] + }, + "542": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ ๋‘˜ ๋‹ค TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ๊ฒฝ์šฐ, AND ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "And", + "orderNumber": 1, + "path": "/interface/value/child/and.ts", + "indent": 4 + } + ] + }, + "543": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ ๋‘˜ ๋‹ค TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ๊ฒฝ์šฐ, AND ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "And", + "orderNumber": 2, + "path": "/interface/value/child/and.ts", + "indent": 4 + } + ] + }, + "544": { + "contexts": [ + "์‚ฌ์ด์˜ ๊ฐ(๋‹จ์œ„: ๋„)์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.", + "์ด ๋ฒกํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •๊ทœํ™”ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Angle Between Vectors", + "orderNumber": 1, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 4 + } + ] + }, + "545": { + "contexts": [ + "์‚ฌ์ด์˜ ๊ฐ(๋‹จ์œ„: ๋„)์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.", + "์ด ๋ฒกํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •๊ทœํ™”ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Angle Between Vectors", + "orderNumber": 2, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 4 + } + ] + }, + "546": { + "contexts": [ + "๊ฒฐ๊ณผ๊ฐ์„ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Angle Difference", + "orderNumber": 1, + "path": "/interface/value/child/angleDifference.ts", + "indent": 4 + } + ] + }, + "547": { + "contexts": [ + "๊ฒฐ๊ณผ๊ฐ์„ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Angle Difference", + "orderNumber": 2, + "path": "/interface/value/child/angleDifference.ts", + "indent": 4 + } + ] + }, + "548": { + "contexts": [ + "๋ง๋ถ™์ผ ๋Œ€์ƒ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Append To Array", + "orderNumber": 1, + "path": "/interface/value/child/appendToArray.ts", + "indent": 4 + } + ] + }, + "549": { + "contexts": [ + "๋ฐฐ์—ด ํ›„๋ฏธ์— ๋ง๋ถ™์ผ ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ ๊ฐ ์š”์†Œ๋ฅผ ๋ง๋ถ™์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Append To Array", + "orderNumber": 2, + "path": "/interface/value/child/appendToArray.ts", + "indent": 4 + } + ] + }, + "550": { + "contexts": [ + "ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Arccosine In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arccosineInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arccosineInRadians.ts", + "indent": 4 + } + ] + }, + "551": { + "contexts": [ + "ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค. " + ], + "usedFiles": [ + { + "topName": "Arcsine In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arcsineInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arcsineInRadians.ts", + "indent": 4 + } + ] + }, + "552": { + "contexts": [ + "ํ•จ์ˆ˜์˜ ๋ถ„์ž ์ž…๋ ฅ ์ •๋ณด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Arctangent In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 4 + } + ] + }, + "553": { + "contexts": [ + "ํ•จ์ˆ˜์˜ ๋ถ„๋ชจ ์ž…๋ ฅ ์ •๋ณด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Arctangent In Degrees", + "orderNumber": 2, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 2, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 4 + } + ] + }, + "554": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Contains", + "orderNumber": 1, + "path": "/interface/value/child/arrayContains.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 1, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 4 + } + ] + }, + "555": { + "contexts": [ + "๊ฒ€์ƒ‰ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Contains", + "orderNumber": 2, + "path": "/interface/value/child/arrayContains.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 2, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 4 + } + ] + }, + "556": { + "contexts": [ + "๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 1, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "557": { + "contexts": [ + "์ฒซ๋ฒˆ์งธ ๋ฒ”์œ„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 2, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "558": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์˜ ์š”์†Œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์„ค์ • ์˜์—ญ์ด ๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์ด ๊ฐ–๋Š” ์š”์†Œ์˜ ์ˆ˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 3, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "559": { + "contexts": [ + "๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•  ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Closest Player To", + "orderNumber": 1, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 4 + } + ] + }, + "560": { + "contexts": [ + "๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†Œ์†๋œ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Closest Player To", + "orderNumber": 2, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 4 + } + ] + }, + "561": { + "contexts": [ + "๋น„๊ต ์—ฐ์‚ฐ์˜ ์ขŒ์ธก๋‹จ์ž…๋‹ˆ๋‹ค.", + "์—ฐ์‚ฐ์ด == ๋˜๋Š” != ์ธ ๊ฒฝ์šฐ ์–ด๋–ค ๊ฐ’ ์œ ํ˜•์ด๋“  ์ƒ๊ด€์—†์ง€๋งŒ,", + "๊ทธ ์ด์™ธ์—๋Š” ์‹ค์ˆ˜ ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Compare", + "orderNumber": 1, + "path": "/interface/value/child/compare.ts", + "indent": 4 + } + ] + }, + "562": { + "contexts": [ + "๋น„๊ต ์—ฐ์‚ฐ์˜ ์šฐ์ธก๋‹จ์ž…๋‹ˆ๋‹ค.", + "์—ฐ์‚ฐ์ด == ๋˜๋Š” != ์ธ ๊ฒฝ์šฐ ์–ด๋–ค ๊ฐ’ ์œ ํ˜•์ด๋“  ์ƒ๊ด€์—†์ง€๋งŒ,", + "๊ทธ ์ด์™ธ์—๋Š” ์‹ค์ˆ˜ ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Compare", + "orderNumber": 2, + "path": "/interface/value/child/compare.ts", + "indent": 4 + } + ] + }, + "563": { + "contexts": [ + "์ ์ˆ˜ ๋น„์œจ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Control Mode Scoring Percentage", + "orderNumber": 1, + "path": "/interface/value/child/controlModeScoringPercentage.ts", + "indent": 4 + } + ] + }, + "564": { + "contexts": [ + "๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Cosine From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/cosineFromDegrees.ts", + "indent": 4 + }, + { + "topName": "Sine From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/sineFromDegrees.ts", + "indent": 4 + }, + { + "topName": "Tangent From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/tangentFromDegrees.ts", + "indent": 4 + } + ] + }, + "565": { + "contexts": [ + "๊ฐ(๋‹จ์œ„: RAD)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Cosine From Radians", + "orderNumber": 1, + "path": "/interface/value/child/cosineFromRadians.ts", + "indent": 4 + }, + { + "topName": "Sine From Radians", + "orderNumber": 1, + "path": "/interface/value/child/sineFromRadians.ts", + "indent": 4 + }, + { + "topName": "Tangent From Radians", + "orderNumber": 1, + "path": "/interface/value/child/tangentFromRadians.ts", + "indent": 4 + } + ] + }, + "566": { + "contexts": [ + "๊ฐ€์œ„๊ณฑ์˜ ์™ผ์ชฝ ๋ฒกํ„ฐ ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Cross Product", + "orderNumber": 1, + "path": "/interface/value/child/crossProduct.ts", + "indent": 4 + } + ] + }, + "567": { + "contexts": [ + "๊ฐ€์œ„๊ณฑ์˜ ์˜ค๋ฅธ์ชฝ ๋ฒกํ„ฐ ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Cross Product", + "orderNumber": 2, + "path": "/interface/value/child/crossProduct.ts", + "indent": 4 + } + ] + }, + "568": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฒกํ„ฐ๋ฅผ ๋„์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ™ฉ์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Direction From Angles", + "orderNumber": 1, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 4 + } + ] + }, + "569": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฒกํ„ฐ๋ฅผ ๋„์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Direction From Angles", + "orderNumber": 2, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 4 + } + ] + }, + "570": { + "contexts": [ + "๊ฒฐ๊ณผ๋กœ ๋„์ถœ๋˜๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Direction Towards", + "orderNumber": 1, + "path": "/interface/value/child/directionTowards.ts", + "indent": 4 + } + ] + }, + "571": { + "contexts": [ + "๊ฒฐ๊ณผ๋กœ ๋„์ถœ๋˜๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๊ฐ€ ๋๋‚˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Direction Towards", + "orderNumber": 2, + "path": "/interface/value/child/directionTowards.ts", + "indent": 4 + } + ] + }, + "572": { + "contexts": [ + "๊ฑฐ๋ฆฌ ์ธก์ •์— ์‚ฌ์šฉ๋˜๋Š” ๋‘ ์œ„์น˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Distance Between", + "orderNumber": 1, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 4 + } + ] + }, + "573": { + "contexts": [ + "๊ฑฐ๋ฆฌ ์ธก์ •์— ์‚ฌ์šฉ๋˜๋Š” ๋‘ ์œ„์น˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Distance Between", + "orderNumber": 2, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 4 + } + ] + }, + "574": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š”", + "๋ฒกํ„ฐ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Divide", + "orderNumber": 1, + "path": "/interface/value/child/divide.ts", + "indent": 4 + } + ] + }, + "575": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š”", + "๋ฒกํ„ฐ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Divide", + "orderNumber": 2, + "path": "/interface/value/child/divide.ts", + "indent": 4 + } + ] + }, + "576": { + "contexts": [ + "์ ๊ณฑ์˜ ๋ฐฑํ„ฐ ํ”ผ์—ฐ์‚ฐ์ž ๋‘ ๊ฐœ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Dot Product", + "orderNumber": 1, + "path": "/interface/value/child/dotProduct.ts", + "indent": 4 + } + ] + }, + "577": { + "contexts": [ + "์ ๊ณฑ์˜ ๋ฐฑํ„ฐ ํ”ผ์—ฐ์‚ฐ์ž ๋‘ ๊ฐœ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Dot Product", + "orderNumber": 2, + "path": "/interface/value/child/dotProduct.ts", + "indent": 4 + } + ] + }, + "578": { + "contexts": [ + "์กด์žฌ๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด, ์•„์ด์ฝ˜ ๊ฐœ์ฒด ๋˜๋Š” ํšจ๊ณผ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Entity Exists", + "orderNumber": 1, + "path": "/interface/value/child/entityExists.ts", + "indent": 4 + } + ] + }, + "579": { + "contexts": [ + "๊ฑฐ๋ฆฌ ์ธก์ •์„ ์œ„ํ•œ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Farthest Player From", + "orderNumber": 1, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 4 + } + ] + }, + "580": { + "contexts": [ + "๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†Œ์†๋œ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Farthest Player From", + "orderNumber": 2, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 4 + } + ] + }, + "581": { + "contexts": [ + "๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "First Of", + "orderNumber": 1, + "path": "/interface/value/child/firstOf.ts", + "indent": 4 + }, + { + "topName": "Last Of", + "orderNumber": 1, + "path": "/interface/value/child/lastOf.ts", + "indent": 4 + } + ] + }, + "582": { + "contexts": [ + "๊นƒ๋ฐœ ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Flag Position", + "orderNumber": 1, + "path": "/interface/value/child/flagPosition.ts", + "indent": 4 + } + ] + }, + "583": { + "contexts": [ + "์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Has Status", + "orderNumber": 1, + "path": "/interface/value/child/hasStatus.ts", + "indent": 4 + } + ] + }, + "584": { + "contexts": [ + "ํ™•์ธํ•  ์ƒํƒœ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Has Status", + "orderNumber": 2, + "path": "/interface/value/child/hasStatus.ts", + "indent": 4 + } + ] + }, + "585": { + "contexts": [ + "์˜์›… ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Hero Of", + "orderNumber": 1, + "path": "/interface/value/child/heroOf.ts", + "indent": 4 + } + ] + }, + "586": { + "contexts": [ + "ํ™ฉ์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.", + "์ด ๋ฒกํ„ฐ๋Š” ์—ฐ์‚ฐ ์ „์— ๋‹จ์œ„ ๋ฒกํ„ฐ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle From Direction", + "orderNumber": 1, + "path": "/interface/value/child/horizontalAngleFromDirection.ts", + "indent": 4 + } + ] + }, + "587": { + "contexts": [ + "์ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle Towards", + "orderNumber": 1, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 4 + } + ] + }, + "588": { + "contexts": [ + "๊ฐ ๊ฐ์ด ์ข…๋ฃŒ๋˜๋Š” ์›”๋“œ ๋‚ด ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle Towards", + "orderNumber": 2, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle Towards", + "orderNumber": 1, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 4 + } + ] + }, + "589": { + "contexts": [ + "๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์˜ ํ™ฉ์ถ•๊ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Horizontal Facing Angle Of", + "orderNumber": 1, + "path": "/interface/value/child/horizontalFacingAngleOf.ts", + "indent": 4 + } + ] + }, + "590": { + "contexts": [ + "์ƒ์กด ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Alive", + "orderNumber": 1, + "path": "/interface/value/child/isAlive.ts", + "indent": 4 + } + ] + }, + "591": { + "contexts": [ + "๋ฒ„ํŠผ์„ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Button Held", + "orderNumber": 1, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 4 + } + ] + }, + "592": { + "contexts": [ + "ํ™•์ธํ•  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Button Held", + "orderNumber": 2, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 4 + } + ] + }, + "593": { + "contexts": [ + "์˜์‚ฌ์†Œํ†ต ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Communicating", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAny.ts", + "indent": 4 + } + ] + }, + "594": { + "contexts": [ + "๊ณ ๋ คํ•  ์˜์‚ฌ์†Œํ†ต ์œ ํ˜•์ž…๋‹ˆ๋‹ค.", + "", + "๊ฐ์ • ํ‘œํ˜„์˜ ์ง€์† ์‹œ๊ฐ„์€ ์ •ํ™•ํ•˜๊ฒŒ ์ ์šฉ๋˜๋ฉฐ,", + "์Œ์„ฑ ๋Œ€์‚ฌ์˜ ์ง€์† ์‹œ๊ฐ„์€ 4์ดˆ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.", + "", + "๊ทธ ์ด์™ธ์˜ ์ง€์† ์‹œ๊ฐ„์€ 2์ดˆ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Communicating", + "orderNumber": 2, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 4 + } + ] + }, + "595": { + "contexts": [ + "๊ฐ์ •ํ‘œํ˜„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Communicating Any Emote", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAnyEmote.ts", + "indent": 4 + } + ] + }, + "596": { + "contexts": [ + "์Œ์„ฑ ๋Œ€์‚ฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Communicating Any Voice Line", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAnyVoiceLine.ts", + "indent": 4 + } + ] + }, + "597": { + "contexts": [ + "์›…ํฌ๋ฆฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Crouching", + "orderNumber": 1, + "path": "/interface/value/child/isCrouching.ts", + "indent": 4 + } + ] + }, + "598": { + "contexts": [ + "์‚ฌ๋ง ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Dead", + "orderNumber": 1, + "path": "/interface/value/child/isDead.ts", + "indent": 4 + } + ] + }, + "599": { + "contexts": [ + "์ฃผ๋ฌด๊ธฐ ๊ณต๊ฒฉ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Firing Primary", + "orderNumber": 1, + "path": "/interface/value/child/isFiringPrimary.ts", + "indent": 4 + } + ] + }, + "600": { + "contexts": [ + "๋ณด์กฐ ๋ฌด๊ธฐ ๊ณต๊ฒฉ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Firing Secondary", + "orderNumber": 1, + "path": "/interface/value/child/isFiringSecondary.ts", + "indent": 4 + } + ] + }, + "601": { + "contexts": [ + "๊นƒ๋ฐœ์„ ํ™•์ธํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Flag At Base", + "orderNumber": 1, + "path": "/interface/value/child/isFlagAtBase.ts", + "indent": 4 + }, + { + "topName": "Is Flag Being Carried", + "orderNumber": 1, + "path": "/interface/value/child/isFlagBeingCarried.ts", + "indent": 4 + }, + { + "topName": "Player Carrying Flag", + "orderNumber": 1, + "path": "/interface/value/child/playerCarryingFlag.ts", + "indent": 4 + } + ] + }, + "602": { + "contexts": [ + "ํ”Œ๋ ˆ์ด ํ˜„ํ™ฉ์„ ํ™•์ธํ•  ์˜์›…์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Hero Being Played", + "orderNumber": 1, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 1, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 1, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 4 + } + ] + }, + "603": { + "contexts": [ + "์˜์›… ํ”Œ๋ ˆ์ด ํ˜„ํ™ฉ์„ ํ™•์ธํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Hero Being Played", + "orderNumber": 2, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 2, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 2, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 4 + } + ] + }, + "604": { + "contexts": [ + "๊ณต์ค‘์— ์žˆ๋Š” ์ƒํƒœ์ธ์ง€๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Air", + "orderNumber": 1, + "path": "/interface/value/child/isInAir.ts", + "indent": 4 + } + ] + }, + "605": { + "contexts": [ + "์‹œ์•ผ ํ™•์ธ์˜ ์‹œ์ž‘ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐœ ์œ„๋กœ", + "2๋ฏธํ„ฐ ์œ„์น˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 1, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "606": { + "contexts": [ + "์‹œ์•ผ ํ™•์ธ์˜ ์ข…๋ฃŒ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐœ ์œ„๋กœ", + "2๋ฏธํ„ฐ ์œ„์น˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 2, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "607": { + "contexts": [ + "๋ฐฉ๋ฒฝ์ด ์‹œ์•ผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฐฉ๋ฒฝ์ด ์  ์†Œ์œ ์ธ์ง€๋ฅผ ํŒ์ •ํ•  ๋•Œ๋Š”", + "START POS์— ์ œ๊ณต๋œ ํ”Œ๋ ˆ์ด์–ด์˜", + "์†Œ์†(์žˆ๋Š” ๊ฒฝ์šฐ)์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 3, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "608": { + "contexts": [ + "์ „ํˆฌ์ค€๋น„์‹ค ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Spawn Room", + "orderNumber": 1, + "path": "/interface/value/child/isInSpawnRoom.ts", + "indent": 4 + } + ] + }, + "609": { + "contexts": [ + "์‹œ์•ผ๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 1, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 1, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "610": { + "contexts": [ + "์‹œ์•ผ์— ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  LOCATION์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 2, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + } + ] + }, + "611": { + "contexts": [ + "๋น„๊ต ๋Œ€์ƒ์ธ VIEW ANGLE(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 3, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 2, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "612": { + "contexts": [ + "์ด๋™ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Moving", + "orderNumber": 1, + "path": "/interface/value/child/isMoving.ts", + "indent": 4 + } + ] + }, + "613": { + "contexts": [ + "๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๋ชฉํ‘œ์˜ ์ธ๋ฑ์Šค๋กœ์„œ,", + "0์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "๊ฐ ๊ฑฐ์ , ํ™”๋ฌผ ๊ฒฝ์œ ์ง€,", + "ํ™”๋ฌผ ๋ชฉ์ ์ง€์—๋Š”", + "๊ฐ๊ธฐ ๊ณ ์œ ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Objective Complete", + "orderNumber": 1, + "path": "/interface/value/child/isObjectiveComplete.ts", + "indent": 4 + } + ] + }, + "614": { + "contexts": [ + "์ฐฉ์ง€ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is On Ground", + "orderNumber": 1, + "path": "/interface/value/child/isOnGround.ts", + "indent": 4 + } + ] + }, + "615": { + "contexts": [ + "๋ชฉํ‘œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is On Objective", + "orderNumber": 1, + "path": "/interface/value/child/isOnObjective.ts", + "indent": 4 + } + ] + }, + "616": { + "contexts": [ + "๋ฒฝ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is On Wall", + "orderNumber": 1, + "path": "/interface/value/child/isOnWall.ts", + "indent": 4 + } + ] + }, + "617": { + "contexts": [ + "์ดˆ์ƒํ™”๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Portrait On Fire", + "orderNumber": 1, + "path": "/interface/value/child/isPortraitOnFire.ts", + "indent": 4 + } + ] + }, + "618": { + "contexts": [ + "์„œ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Standing", + "orderNumber": 1, + "path": "/interface/value/child/isStanding.ts", + "indent": 4 + } + ] + }, + "619": { + "contexts": [ + "์—ญํ• ์„ ํ™•์ธํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Team On Defense", + "orderNumber": 1, + "path": "/interface/value/child/isTeamOnDefense.ts", + "indent": 4 + }, + { + "topName": "Is Team On Offense", + "orderNumber": 1, + "path": "/interface/value/child/isTeamOnOffense.ts", + "indent": 4 + } + ] + }, + "620": { + "contexts": [ + "๊ฐ’์„ ํ™•์ธํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is True For All", + "orderNumber": 1, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 1, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 4 + } + ] + }, + "621": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ํ™•์ธํ•  ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.", + "ํ˜„์žฌ ํ™•์ธ ๋Œ€์ƒ์ธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋Š”", + "CURRENT ARRAY ELEMENT ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "Is True For All", + "orderNumber": 2, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 2, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 4 + } + ] + }, + "622": { + "contexts": [ + "๊ธฐ์ˆ  1์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Using Ability 1", + "orderNumber": 1, + "path": "/interface/value/child/isUsingAbility1.ts", + "indent": 4 + } + ] + }, + "623": { + "contexts": [ + "๊ธฐ์ˆ  2์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Using Ability 2", + "orderNumber": 1, + "path": "/interface/value/child/isUsingAbility2.ts", + "indent": 4 + } + ] + }, + "624": { + "contexts": [ + "๊ถ๊ทน๊ธฐ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Using Ultimate", + "orderNumber": 1, + "path": "/interface/value/child/isUsingUltimate.ts", + "indent": 4 + } + ] + }, + "625": { + "contexts": [ + "๋กœ์ปฌ ์ขŒํ‘œ๋กœ ์ „ํ™˜๋  ์›”๋“œ ์ขŒํ‘œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 1, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + } + ] + }, + "626": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฒกํ„ฐ์™€ ์—ฐ๊ด€๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 2, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 1, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "627": { + "contexts": [ + "๋ฒกํ„ฐ๊ฐ€ ํšŒ์ „๊ณผ ํ‰ํ–‰ ์ด๋™์„ ๋ฐ›๋Š”์ง€(์ผ๋ฐ˜์ ์œผ๋กœ ์œ„์น˜์— ์ ์šฉ),", + "์•„๋‹ˆ๋ฉด ํšŒ์ „๋งŒ ๋ฐ›๋Š”์ง€(์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฉํ–ฅ ๋ฐ ์†๋„์— ์ ์šฉ) ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 3, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 2, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "628": { + "contexts": [ + "์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Max Health", + "orderNumber": 1, + "path": "/interface/value/child/maxHealth.ts", + "indent": 4 + } + ] + }, + "629": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”", + "์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Min", + "orderNumber": 1, + "path": "/interface/value/child/min.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 1, + "path": "/interface/value/child/multiply.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 1, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 4 + } + ] + }, + "630": { + "contexts": [ + "์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”", + "์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Min", + "orderNumber": 2, + "path": "/interface/value/child/min.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 2, + "path": "/interface/value/child/multiply.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 2, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 4 + } + ] + }, + "631": { + "contexts": [ + "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋„๋ณด ๊ฐ€๋Šฅ ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋Œ€์ƒ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Nearest Walkable Position", + "orderNumber": 1, + "path": "/interface/value/child/nearestWalkablePosition.ts", + "indent": 4 + } + ] + }, + "632": { + "contexts": [ + "์ •๊ทœํ™”ํ•  ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Normalize", + "orderNumber": 1, + "path": "/interface/value/child/normalize.ts", + "indent": 4 + } + ] + }, + "633": { + "contexts": [ + "์ •๊ทœํ™”๋œ ์ƒ๋ช…๋ ฅ์„ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Normalized Health", + "orderNumber": 1, + "path": "/interface/value/child/normalizedHealth.ts", + "indent": 4 + } + ] + }, + "634": { + "contexts": [ + "์ด ์ž…๋ ฅ ์ •๋ณด๊ฐ€ FALSE", + "(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)๋ผ๋ฉด", + "NOT ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค.", + "๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ,", + "NOT ๊ฐ’์€ FALSE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Not", + "orderNumber": 1, + "path": "/interface/value/child/not.ts", + "indent": 4 + } + ] + }, + "635": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ์ˆ˜๋ฅผ ํ™•์ธํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Number Of Dead Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfDeadPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Living Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfLivingPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Players On Objective", + "orderNumber": 1, + "path": "/interface/value/child/numberOfPlayersOnObjective.ts", + "indent": 4 + } + ] + }, + "636": { + "contexts": [ + "์‚ฌ๋ง ํšŸ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Number Of Deaths", + "orderNumber": 1, + "path": "/interface/value/child/numberOfDeaths.ts", + "indent": 4 + } + ] + }, + "637": { + "contexts": [ + "์ฒ˜์น˜ ํšŸ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Number Of Eliminations", + "orderNumber": 1, + "path": "/interface/value/child/numberOfEliminations.ts", + "indent": 4 + } + ] + }, + "638": { + "contexts": [ + "๊ฒฐ์ •ํƒ€ ๊ฐœ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Number Of Final Blows", + "orderNumber": 1, + "path": "/interface/value/child/numberOfFinalBlows.ts", + "indent": 4 + } + ] + }, + "639": { + "contexts": [ + "๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๋ชฉํ‘œ์˜ ์ธ๋ฑ์Šค๋กœ์„œ,", + "0์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "๊ฐ ๊ฑฐ์ , ํ™”๋ฌผ ๊ฒฝ์œ ์ง€, ํ™”๋ฌผ ๋ชฉ์ ์ง€์—๋Š”", + "๊ฐ๊ธฐ ๊ณ ์œ ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Objective Position", + "orderNumber": 1, + "path": "/interface/value/child/objectivePosition.ts", + "indent": 4 + } + ] + }, + "640": { + "contexts": [ + "์ƒ๋Œ€ ํŒ€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค.", + "ALL์ธ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋Š” ALL์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Opposite Team Of", + "orderNumber": 1, + "path": "/interface/value/child/oppositeTeamOf.ts", + "indent": 4 + } + ] + }, + "641": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ", + "ํ•˜๋‚˜๊ฐ€ TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)", + "์ธ ๊ฒฝ์šฐ, OR ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Or", + "orderNumber": 1, + "path": "/interface/value/child/or.ts", + "indent": 4 + } + ] + }, + "642": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ", + "ํ•˜๋‚˜๊ฐ€ TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)", + "์ธ ๊ฒฝ์šฐ, OR ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Or", + "orderNumber": 2, + "path": "/interface/value/child/or.ts", + "indent": 4 + } + ] + }, + "643": { + "contexts": [ + "์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€์„ ์œผ๋กœ๋ถ€ํ„ฐ", + "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Player Closest To Reticle", + "orderNumber": 1, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 4 + } + ] + }, + "644": { + "contexts": [ + "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Player Closest To Reticle", + "orderNumber": 2, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 4 + } + ] + }, + "645": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์Šฌ๋กฏ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.", + "ํŒ€์ „์—์„œ ๊ฐ ํŒ€์€ 0์—์„œ 5๊ฐœ์˜ ์Šฌ๋กฏ์„ ๋ณด์œ ํ•˜๋ฉฐ,", + "๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„์—์„œ ์Šฌ๋กฏ ์ˆ˜๋Š” 0์—์„œ 11๊นŒ์ง€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players In Slot", + "orderNumber": 1, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 4 + } + ] + }, + "646": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players In Slot", + "orderNumber": 2, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 4 + } + ] + }, + "647": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ณ ๋ คํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players In View Angle", + "orderNumber": 3, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "648": { + "contexts": [ + "๊ฑฐ๋ฆฌ ์ธก์ •์ด ์‹œ์ž‘๋˜๋Š” ์ค‘๊ฐ„ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 1, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "649": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•ด", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†ํ•ด ์žˆ์–ด์•ผ ํ•˜๋Š”", + "๋ฐ˜๊ฒฝ(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 2, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "650": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•ด", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†ํ•ด ์žˆ์–ด์•ผ ํ•˜๋Š”", + "ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 3, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "651": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•ด", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‹œ์•ผ ํ™•์ธ์„", + "ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๋ฐ", + "๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 4, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + }, + { + "topName": "LosCheck", + "orderNumber": 0, + "path": "/type/value/losCheck.ts", + "indent": 0 + } + ] + }, + "652": { + "contexts": [ + "์œ„์น˜ ๊ฐ’ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Position Of", + "orderNumber": 1, + "path": "/interface/value/child/positionOf.ts", + "indent": 4 + } + ] + }, + "653": { + "contexts": [ + "ํ—ˆ์šฉ๋œ ์ตœ์†Œ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ์ž…๋ ฅ ์ •๋ณด์— ์‹ค์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ,", + "๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Integer", + "orderNumber": 1, + "path": "/interface/value/child/randomInteger.ts", + "indent": 4 + } + ] + }, + "654": { + "contexts": [ + "ํ—ˆ์šฉ๋œ ์ตœ๋Œ€ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ์ž…๋ ฅ ์ •๋ณด์— ์‹ค์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ,", + "๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Integer", + "orderNumber": 2, + "path": "/interface/value/child/randomInteger.ts", + "indent": 4 + } + ] + }, + "655": { + "contexts": [ + "๋ฌด์ž‘์œ„ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Randomized Array", + "orderNumber": 1, + "path": "/interface/value/child/randomizedArray.ts", + "indent": 4 + } + ] + }, + "656": { + "contexts": [ + "ํ—ˆ์šฉ๋œ ์ตœ์†Œ ์‹ค์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Real", + "orderNumber": 1, + "path": "/interface/value/child/randomReal.ts", + "indent": 4 + } + ] + }, + "657": { + "contexts": [ + "ํ—ˆ์šฉ๋œ ์ตœ์†Œ ์‹ค์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Real", + "orderNumber": 2, + "path": "/interface/value/child/randomReal.ts", + "indent": 4 + } + ] + }, + "658": { + "contexts": [ + "๋ฌด์ž‘์œ„ ๊ฐ’์„ ์ทจํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.", + "๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฐ’์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ,", + "์ฃผ์–ด์ง„ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Value In Array", + "orderNumber": 1, + "path": "/interface/value/child/randomValueInArray.ts", + "indent": 4 + } + ] + }, + "659": { + "contexts": [ + "๋ ˆ์ด์ผ€์ŠคํŠธ์˜ ์‹œ์ž‘ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด,", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐœ ์œ„๋กœ", + "2๋ฏธํ„ฐ ์ง€์ ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "660": { + "contexts": [ + "๋ ˆ์ด์ผ€์ŠคํŠธ์˜ ์ข…๋ฃŒ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด,", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐœ ์œ„๋กœ", + "2๋ฏธํ„ฐ ์ง€์ ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "661": { + "contexts": [ + "์ด ๋ ˆ์ด์บ์ŠคํŠธ๋กœ ๋งžํž ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "662": { + "contexts": [ + "์ด ๋ ˆ์ด์บ์ŠคํŠธ๋กœ ๋งžํž ์ˆ˜ ์—†๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "PLAYERS TO INCLUDE๋ณด๋‹ค ์ด ๋ชฉ๋ก์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "663": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†Œ์œ ํ•œ ์˜ค๋ธŒ์ ํŠธ(๋ฐฉ๋ฒฝ ๋˜๋Š” ํฌํƒ‘ ๋“ฑ)๊ฐ€", + "๋ ˆ์ด์บ์ŠคํŠธ์˜ ๋Œ€์ƒ ๋ฒ”์œ„์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "664": { + "contexts": [ + "๊ฐ’์„ ์ œ๊ฑฐํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Remove From Array", + "orderNumber": 1, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 4 + } + ] + }, + "665": { + "contexts": [ + "๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•  ๊ฐ’(์žˆ๋Š” ๊ฒฝ์šฐ)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ", + "์ผ์น˜ํ•˜๋Š” ๊ฐ ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Remove From Array", + "orderNumber": 2, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 4 + } + ] + }, + "666": { + "contexts": [ + "๋ฐ˜์˜ฌ๋ฆผํ•  ์‹ค์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Round To Integer", + "orderNumber": 1, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 4 + } + ] + }, + "667": { + "contexts": [ + "๊ฐ’์„ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๊ทœ์น™์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Round To Integer", + "orderNumber": 2, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 4 + } + ] + }, + "668": { + "contexts": [ + "์ ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Score Of", + "orderNumber": 1, + "path": "/interface/value/child/scoreOf.ts", + "indent": 4 + } + ] + }, + "669": { + "contexts": [ + "์Šฌ๋กฏ ๋ฒˆํ˜ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Slot Of", + "orderNumber": 1, + "path": "/interface/value/child/slotOf.ts", + "indent": 4 + } + ] + }, + "670": { + "contexts": [ + "๋ณต์‚ฌ๋ณธ์„ ์ •๋ ฌํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Sorted Array", + "orderNumber": 1, + "path": "/interface/value/child/sortedArray.ts", + "indent": 4 + } + ] + }, + "671": { + "contexts": [ + "๋ณต์‚ฌํ•  ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋งˆ๋‹ค ํ‰๊ฐ€ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ณต์‚ฌ๋ณธ์ด ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.", + "ํ˜„์žฌ ํ™•์ธ ๋Œ€์ƒ์ธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋Š”", + "CURRENT ARRAY ELEMENT ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "Sorted Array", + "orderNumber": 2, + "path": "/interface/value/child/sortedArray.ts", + "indent": 4 + } + ] + }, + "672": { + "contexts": [ + "์†๋„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Speed Of", + "orderNumber": 1, + "path": "/interface/value/child/speedOf.ts", + "indent": 4 + }, + { + "topName": "Speed Of In Direction", + "orderNumber": 1, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 4 + }, + { + "topName": "Velocity Of", + "orderNumber": 1, + "path": "/interface/value/child/velocityOf.ts", + "indent": 4 + } + ] + }, + "673": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์†๋„๋ฅผ ์ธก์ •ํ•  ์ด๋™ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Speed Of In Direction", + "orderNumber": 2, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 4 + } + ] + }, + "674": { + "contexts": [ + "์ œ๊ณฑ๊ทผ์„ ๊ณ„์‚ฐํ•  ์‹ค์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์Œ์ˆ˜์˜ ๊ฒฝ์šฐ 0์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Square Root", + "orderNumber": 1, + "path": "/interface/value/child/squareRoot.ts", + "indent": 4 + } + ] + }, + "675": { + "contexts": [ + "๊ฒฐ๊ณผ๋กœ ํ‘œ์‹œ๋˜๋Š” ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.", + "์ค‘๊ด„ํ˜ธ ์•ˆ์˜ ์ˆซ์ž๋Š” ๋Œ€์‘๊ฐ’์œผ๋กœ ๊ต์ฒด๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 1, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "676": { + "contexts": [ + "ํ…์ŠคํŠธ๋กœ ์ „ํ™˜๋˜์–ด {0}์„ ๋Œ€์ฒดํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 2, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "677": { + "contexts": [ + "ํ…์ŠคํŠธ๋กœ ์ „ํ™˜๋˜์–ด {1}์„ ๋Œ€์ฒดํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 3, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "678": { + "contexts": [ + "ํ…์ŠคํŠธ๋กœ ์ „ํ™˜๋˜์–ด {2}๋ฅผ ๋Œ€์ฒดํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 4, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "679": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”", + "์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Subtract", + "orderNumber": 1, + "path": "/interface/value/child/subtract.ts", + "indent": 4 + } + ] + }, + "680": { + "contexts": [ + "์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”", + "์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Subtract", + "orderNumber": 2, + "path": "/interface/value/child/subtract.ts", + "indent": 4 + } + ] + }, + "681": { + "contexts": [ + "ํŒ€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Team Of", + "orderNumber": 1, + "path": "/interface/value/child/teamOf.ts", + "indent": 4 + } + ] + }, + "682": { + "contexts": [ + "์ ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Team Score", + "orderNumber": 1, + "path": "/interface/value/child/teamScore.ts", + "indent": 4 + } + ] + }, + "683": { + "contexts": [ + "๋ฐฉํ–ฅ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Throttle Of", + "orderNumber": 1, + "path": "/interface/value/child/throttleOf.ts", + "indent": 4 + } + ] + }, + "684": { + "contexts": [ + "๊ถ๊ทน๊ธฐ ์ถฉ์ „๋Ÿ‰ ๋น„์œจ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ultimate Charge Percent", + "orderNumber": 1, + "path": "/interface/value/child/ultimateChargePercent.ts", + "indent": 4 + } + ] + }, + "685": { + "contexts": [ + "์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋Œ€์ƒ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Value In Array", + "orderNumber": 1, + "path": "/interface/value/child/valueInArray.ts", + "indent": 4 + } + ] + }, + "686": { + "contexts": [ + "์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Value In Array", + "orderNumber": 2, + "path": "/interface/value/child/valueInArray.ts", + "indent": 4 + } + ] + }, + "687": { + "contexts": [ + "๋ฒกํ„ฐ์˜ X ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 1, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "688": { + "contexts": [ + "๋ฒกํ„ฐ์˜ Y ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 2, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "689": { + "contexts": [ + "๋ฒกํ„ฐ์˜ Z ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 3, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "690": { + "contexts": [ + "๋ณ€์œ„ ๋ฒกํ„ฐ๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector Towards", + "orderNumber": 1, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 4 + } + ] + }, + "691": { + "contexts": [ + "๋ณ€์œ„ ๋ฒกํ„ฐ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector Towards", + "orderNumber": 2, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 4 + } + ] + }, + "692": { + "contexts": [ + "์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„) ์ •๋ณด๋ฅผ", + "๊ฐ€์ ธ์˜ฌ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.", + "๋ฒกํ„ฐ๋Š” ์—ฐ์‚ฐ ์ „์— ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vertical Angle From Direction", + "orderNumber": 1, + "path": "/interface/value/child/verticalAngleFromDirection.ts", + "indent": 4 + } + ] + }, + "693": { + "contexts": [ + "์ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ๋ฐ”๋ผ๋ณด๋Š”", + "๋ฐฉํ–ฅ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vertical Angle Towards", + "orderNumber": 2, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 4 + } + ] + }, + "694": { + "contexts": [ + "๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์˜", + "์ข…์ถ•๊ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vertical Facing Angle Of", + "orderNumber": 1, + "path": "/interface/value/child/verticalFacingAngleOf.ts", + "indent": 4 + } + ] + }, + "695": { + "contexts": [ + "์ข…์ถ• ์†๋„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vertical Speed Of", + "orderNumber": 1, + "path": "/interface/value/child/verticalSpeedOf.ts", + "indent": 4 + } + ] + }, + "696": { + "contexts": [ + "์›”๋“œ ์ขŒํ‘œ๋กœ ์ „ํ™˜๋  ๋กœ์ปฌ ์ขŒํ‘œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "World Vector Of", + "orderNumber": 3, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "697": { + "contexts": [ + "X ๊ตฌ์„ฑ์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "X Component Of", + "orderNumber": 1, + "path": "/interface/value/child/xComponentOf.ts", + "indent": 4 + } + ] + }, + "698": { + "contexts": [ + "Y ๊ตฌ์„ฑ์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Y Component Of", + "orderNumber": 1, + "path": "/interface/value/child/yComponentOf.ts", + "indent": 4 + } + ] + }, + "699": { + "contexts": [ + "Z ๊ตฌ์„ฑ์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Z Component Of", + "orderNumber": 1, + "path": "/interface/value/child/zComponentOf.ts", + "indent": 4 + } + ] + }, + "700": { + "contexts": [ + "ํŒ€ ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค. ALL ์˜ต์…˜์€ ํŒ€์ „์˜ ์–‘ํŒ€, ๋˜๋Š” ๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„์˜ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "TeamConstant", + "orderNumber": 0, + "path": "/type/teamConstant.ts", + "indent": 0 + } + ] + }, + "701": { + "contexts": [ + "- `All` Event๊ฐ€ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.", + "- `Slot1` ~ `Slot11`", + " Event๊ฐ€ ํŠน์ • ์Šฌ๋กฏ์— ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.", + " ํŒ€์ „์—์„œ๋Š” ํ”Œ๋ ˆ์ด์–ด ๋‘ ๋ช…์ด ํ•˜๋‚˜์˜ ์Šฌ๋กฏ (๊ฐ ํŒ€ ๋‹น ํ•˜๋‚˜)์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "EventPlayer", + "orderNumber": 0, + "path": "/type/event/player.ts", + "indent": 0 + } + ] + }, + "702": { + "contexts": [ + "`BARRIERS DO NOT BLOCK LOS`", + "์–ด๋–ค ๋ฐฉ๋ฒฝ๋„ ์‹œ์•ผ๋ฅผ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", + "", + "`ENEMY BARRIERS BLOCK LOS`", + "์‹œ์•ผ๊ฐ€ ์ ํŒ€์˜ ๋ฐฉ๋ฒฝ์œผ๋กœ ์ธํ•ด ๊ฐ€๋ ค์ง‘๋‹ˆ๋‹ค.", + "", + "`ALL BARRIERS BLOCK LOS`", + "์‹œ์•ผ๊ฐ€ ๋ชจ๋“  ๋ฐฉ๋ฒฝ์œผ๋กœ ์ธํ•ด ๊ฐ€๋ ค์ง‘๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Barrier", + "orderNumber": 0, + "path": "/type/value/barrier.ts", + "indent": 0 + } + ] + }, + "703": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด, ์•„์ด์ฝ˜ ๊ฐœ์ฒด ๋˜๋Š” ํšจ๊ณผ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Entity", + "orderNumber": 0, + "path": "/type/value/entity.ts", + "indent": 0 + } + ] + }, + "704": { + "contexts": [ + "์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ value interface ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Value", + "orderNumber": 0, + "path": "/type/value/value.ts", + "indent": 0 + } + ] + }, + "705": { + "contexts": [ + "TODO: playerDealtHealing(Player Dealt Healing)(OrderNum:0)" + ], + "usedFiles": [ + { + "topName": "Player Dealt Healing", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtHealing.ts", + "indent": 0 + }, + { + "topName": "IEvent", + "orderNumber": 7, + "path": "/interface/event/event.ts", + "indent": 0 + } + ] + }, + "706": { + "contexts": [ + "TODO: playerDealtHealing(Player Dealt Healing)(OrderNum:1)" + ], + "usedFiles": [ + { + "topName": "Player Dealt Healing", + "orderNumber": 1, + "path": "/interface/event/child/playerDealtHealing.ts", + "indent": 4 + } + ] + }, + "707": { + "contexts": [ + "TODO: playerDealtHealing(Player Dealt Healing)(OrderNum:2)" + ], + "usedFiles": [ + { + "topName": "Player Dealt Healing", + "orderNumber": 2, + "path": "/interface/event/child/playerDealtHealing.ts", + "indent": 4 + } + ] + }, + "708": { + "contexts": [ + "TODO: playerReceivedHealing(Player Received Healing)(OrderNum:0)" + ], + "usedFiles": [ + { + "topName": "Player Received Healing", + "orderNumber": 0, + "path": "/interface/event/child/playerReceivedHealing.ts", + "indent": 0 + }, + { + "topName": "IEvent", + "orderNumber": 8, + "path": "/interface/event/event.ts", + "indent": 0 + } + ] + }, + "709": { + "contexts": [ + "TODO: playerReceivedHealing(Player Received Healing)(OrderNum:1)" + ], + "usedFiles": [ + { + "topName": "Player Received Healing", + "orderNumber": 1, + "path": "/interface/event/child/playerReceivedHealing.ts", + "indent": 4 + } + ] + }, + "710": { + "contexts": [ + "TODO: playerReceivedHealing(Player Received Healing)(OrderNum:2)" + ], + "usedFiles": [ + { + "topName": "Player Received Healing", + "orderNumber": 2, + "path": "/interface/event/child/playerReceivedHealing.ts", + "indent": 4 + } + ] + }, + "711": { + "contexts": [ + "TODO: playerJoinedMatch(Player Joined Match)(OrderNum:0)" + ], + "usedFiles": [ + { + "topName": "Player Joined Match", + "orderNumber": 0, + "path": "/interface/event/child/playerJoinedMatch.ts", + "indent": 0 + }, + { + "topName": "IEvent", + "orderNumber": 9, + "path": "/interface/event/event.ts", + "indent": 0 + } + ] + }, + "712": { + "contexts": [ + "TODO: playerJoinedMatch(Player Joined Match)(OrderNum:1)" + ], + "usedFiles": [ + { + "topName": "Player Joined Match", + "orderNumber": 1, + "path": "/interface/event/child/playerJoinedMatch.ts", + "indent": 4 + } + ] + }, + "713": { + "contexts": [ + "TODO: playerJoinedMatch(Player Joined Match)(OrderNum:2)" + ], + "usedFiles": [ + { + "topName": "Player Joined Match", + "orderNumber": 2, + "path": "/interface/event/child/playerJoinedMatch.ts", + "indent": 4 + } + ] + }, + "714": { + "contexts": [ + "TODO: playerLeftMatch(Player Left Match)(OrderNum:0)" + ], + "usedFiles": [ + { + "topName": "Player Left Match", + "orderNumber": 0, + "path": "/interface/event/child/playerLeftMatch.ts", + "indent": 0 + }, + { + "topName": "IEvent", + "orderNumber": 10, + "path": "/interface/event/event.ts", + "indent": 0 + } + ] + }, + "715": { + "contexts": [ + "TODO: playerLeftMatch(Player Left Match)(OrderNum:1)" + ], + "usedFiles": [ + { + "topName": "Player Left Match", + "orderNumber": 1, + "path": "/interface/event/child/playerLeftMatch.ts", + "indent": 4 + } + ] + }, + "716": { + "contexts": [ + "TODO: playerLeftMatch(Player Left Match)(OrderNum:2)" + ], + "usedFiles": [ + { + "topName": "Player Left Match", + "orderNumber": 2, + "path": "/interface/event/child/playerLeftMatch.ts", + "indent": 4 + } + ] + }, + "717": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์Šค๋กœํ‹€(๋ฐฉํ–ฅ ์ž…๋ ฅ๊ฐ’ ์กฐ์ •) ๋ณ€ํ™˜(๋น„์œจ ์ฆ๊ฐ ๋ฐ ํšŒ์ „)์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "๊ธฐ์กด์˜ START TRANSFORMING THROTTLE ํ–‰๋™์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 0, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 126, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "718": { + "contexts": [ + "Player - ์Šค๋กœํ‹€์ด ๋ณ€ํ™˜๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 1, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "719": { + "contexts": [ + "X Axis Scalar - ํ”Œ๋ ˆ์ด์–ด์˜ ์Šค๋กœํ‹€ X์ถ•(์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ)์ด ์ƒˆ๋กœ์šด", + "RELATIVE DIRECTION์œผ๋กœ ํšŒ์ „ํ•˜๊ธฐ ์ „์— ์ด ๊ฐ’์œผ๋กœ ๊ณฑํ•ด์ง‘๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ์ง€์†์ ์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค. (ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ)" + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 2, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "720": { + "contexts": [ + "Y Axis Scalar - ํ”Œ๋ ˆ์ด์–ด์˜ ์Šค๋กœํ‹€ Y์ถ•(์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ)์ด ์ƒˆ๋กœ์šด", + "RELATIVE DIRECTION์œผ๋กœ ํšŒ์ „ํ•˜๊ธฐ ์ „์— ์ด ๊ฐ’์œผ๋กœ ๊ณฑํ•ด์ง‘๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ์ง€์†์ ์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค. (ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ)" + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 3, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "721": { + "contexts": [ + "Relative Direction - ์ถ•์˜ ์Šค์นผ๋ผ ๊ฐ’์ด ์ ์šฉ๋œ ์ดํ›„, ํ”Œ๋ ˆ์ด์–ด๋Š”", + "์Šค๋กœํ‹€์„ ๋ณ€ํ™˜์‹œ์ผœ์ด ๋‹จ์œ„ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์— ์ƒ๋Œ€์ ์ด๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,", + "์Šค๋กœํ‹€ ์นด๋ฉ”๋ผ๋ฅผ ์ƒ๋Œ€์ ์ด๊ฒŒ ํ•˜๋ ค๋ฉด, ์นด๋ฉ”๋ผ๊ฐ€ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ์ œ๊ณตํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ์ง€์†์ ์œผ๋กœ ํ‰๊ฐ€๋˜๋ฉฐ(ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ) ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Transforming Throttle", + "orderNumber": 4, + "path": "/interface/action/child/startTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "722": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ START TRANSFORMING THROTTLE", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ ์Šค๋กœํ‹€ ๋ณ€ํ™˜์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Transforming Throttle", + "orderNumber": 0, + "path": "/interface/action/child/stopTransformingThrottle.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 127, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "723": { + "contexts": [ + "Player - ์Šค๋กœํ‹€ ๋ณ€ํ™˜์„ ๋ฉˆ์ถœ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Transforming Throttle", + "orderNumber": 1, + "path": "/interface/action/child/stopTransformingThrottle.ts", + "indent": 4 + } + ] + }, + "724": { + "contexts": [ + "์ด ๊ทœ์น™์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ์น˜์œ ๋ฅผ ํ•œ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "HEALEE ๋˜๋Š” EVENT PLAYER์™€ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Healer", + "orderNumber": 0, + "path": "/interface/value/child/healer.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 194, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "725": { + "contexts": [ + "์ด ๊ทœ์น™์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ์น˜์œ ๋ฅผ ๋ฐ›์€ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "HEALER ๋˜๋Š” EVENT PLAYER์™€ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Healee", + "orderNumber": 0, + "path": "/interface/value/child/healee.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 195, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "726": { + "contexts": [ + "์ด ๊ทœ์น™์— ์˜ํ•ด ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š”", + "์ด๋ฒคํŠธ์˜ HEALEE๊ฐ€ ๋ฐ›๋Š” ์น˜์œ ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Event Healing", + "orderNumber": 0, + "path": "/interface/value/child/eventHealing.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 196, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "727": { + "contexts": [ + "ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ง€์ • ๊ฒŒ์ž„์˜ ๋ฐฉ์žฅ์ธ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ˜„์žฌ ๋ฐฉ์žฅ์ด ๊ฒฝ๊ธฐ๋ฅผ ๋– ๋‚˜๋ฉด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Host Player", + "orderNumber": 0, + "path": "/interface/value/child/hostPlayer.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 197, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "728": { + "contexts": [ + "์Šฌ๋กฏ์ด ํ™œ์„ฑํ™” ๋œ ์ด์ƒ ์ƒˆ๋กœ์šด ๋ด‡์„", + "ํŠน์ • ํŒ€์˜ ํŠน์ • ์Šฌ๋กฏ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "๋ด‡์€ WORKSHOP ACTION์„ ์‹คํ–‰ํ•œ๋‹ค๋ฉด", + "์ด๋™ํ•˜๊ฑฐ๋‚˜ ๋ฐœ์‚ฌํ•˜๊ฑฐ๋‚˜ ๊ธฐ์ˆ  ๋งŒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 0, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 128, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "729": { + "contexts": [ + "๋ด‡์ด ๋  ์˜์›…์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•˜๋‚˜ ์ด์ƒ์˜", + "์˜์›…์—๊ฒŒ ์ ์šฉ๋˜๋ฉด ๋ฌด์ž‘์œ„๋กœ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 1, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "730": { + "contexts": [ + "๋ด‡์„ ์ƒ์„ฑํ•  ํŒ€์ž…๋‹ˆ๋‹ค. 'All' ์„ค์ •์€", + "์„ฌ๋ฉธ์ „ ๊ฒŒ์ž„ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋ฉฐ,", + "'Team' ์„ค์ •์€ ํŒ€ ๊ธฐ๋ฐ˜์˜ ๊ฒŒ์ž„ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 2, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "731": { + "contexts": [ + "๋ด‡์„ ๋ฐ›์„ ํ”Œ๋ ˆ์ด์–ด ์Šฌ๋กฏ(์ฒซ ๋ฒˆ์งธ ๊ฐ€๋Šฅํ•œ ์Šฌ๋กฏ -1)์ž…๋‹ˆ๋‹ค.", + "๋Œ€๊ธฐ์‹ค ์„ค์ •์— ๋”ฐ๋ผ ๊ฐ ํŒ€์—๋Š” ์ตœ๋Œ€ 6๊ฐœ๊นŒ์ง€,", + "๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ ํŒ€์—์„œ๋Š” ์ตœ๋Œ€ 12๊ฐœ ๊นŒ์ง€ ๋ด‡์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 3, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "732": { + "contexts": [ + "๋ด‡์ด ์ƒ์„ฑ๋  ์ตœ์ดˆ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 4, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "733": { + "contexts": [ + "๋ด‡์ด ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์„ ์ตœ์ดˆ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Dummy Bot", + "orderNumber": 5, + "path": "/interface/action/child/createDummyBot.ts", + "indent": 4 + } + ] + }, + "734": { + "contexts": [ + "ํŠน์ • ๋”๋ฏธ ๋ด‡์„ ๊ฒฝ๊ธฐ์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Dummy Bot", + "orderNumber": 0, + "path": "/interface/action/child/destroyDummyBot.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 129, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "735": { + "contexts": [ + "DUMMY ๋ด‡์„ ์ œ๊ฑฐํ•  ํŒ€์ž…๋‹ˆ๋‹ค. 'All' ์„ค์ •์€", + "๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„ ๋ชจ๋“œ์—์„œ๋งŒ, 'Team' ์„ค์ •์€", + "ํŒ€ ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Dummy Bot", + "orderNumber": 1, + "path": "/interface/action/child/destroyDummyBot.ts", + "indent": 4 + } + ] + }, + "736": { + "contexts": [ + "DUMMY ๋ด‡์„ ์ œ๊ฑฐํ•  ์Šฌ๋กฏ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Dummy Bot", + "orderNumber": 2, + "path": "/interface/action/child/destroyDummyBot.ts", + "indent": 4 + } + ] + }, + "737": { + "contexts": [ + "๋ชจ๋“  ๋”๋ฏธ ๋ด‡๋“ค์„ ๊ฒฝ๊ธฐ์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy All Dummy Bot", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllDummyBot.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 130, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "738": { + "contexts": [ + "ํŠน์ • ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ์“ฐ๋กœํ‹€(๋ฐฉํ–ฅ ์ž…๋ ฅ ๊ฐ’ ์กฐ์ •)", + "์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "๊ธฐ์กด ๋ฐฉํ–ฅ์˜ ์“ฐ๋กœํ‹€์€ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 0, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 131, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "739": { + "contexts": [ + "์Šค๋กœํ‹€์ด ์„ค์ •๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 1, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "740": { + "contexts": [ + "์Šค๋กœํ‹€์ด ์„ค์ •๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋  ๋‹จ์œ„ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™” ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 2, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "741": { + "contexts": [ + "์Šค๋กœํ‹€ ์ •๋„(๋˜๋Š” ์Šค๋กœํ‹€์— ๋ณ€ํ™”ํ•  ์ •๋„)์ž…๋‹ˆ๋‹ค.", + "VALUE 1์€ ์™„์ „ํ•œ ์Šค๋กœํ‹€์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 3, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "742": { + "contexts": [ + "๋ฐฉํ–ฅ์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์›”๋“œ ์ขŒํ‘œ ๋˜๋Š” ๋กœ์ปฌ ์ขŒํ‘œ ์ค‘", + "์–ด๋А ์ชฝ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 4, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "743": { + "contexts": [ + "์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์Šค๋กœํ‹€์ด ๊ต์ฒด๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋  ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 5, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "744": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘ ์–ด๋–ค ํ•ญ๋ชฉ์„ ์ง€์†์ ์œผ๋กœ", + "์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์•ก์…˜์€ ์ž…๋ ฅ ์ •๋ณด์˜", + "์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ, ์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Throttle In Direction", + "orderNumber": 6, + "path": "/interface/action/child/startThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "745": { + "contexts": [ + "START THROTTLE IN DIRECTION ์œผ๋กœ", + "์ธํ•ด ๋ฐœ์ƒ๋œ ํ–‰์œ„๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Throttle In Direction", + "orderNumber": 0, + "path": "/interface/action/child/stopThrottleInDirection.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 132, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "746": { + "contexts": [ + "๊ธฐ๋ณธ ์Šค๋กœํ‹€ ์กฐ์ž‘์œผ๋กœ ๋ณต์›๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Throttle In Direction", + "orderNumber": 1, + "path": "/interface/action/child/stopThrottleInDirection.ts", + "indent": 4 + } + ] + }, + "747": { + "contexts": [ + "์›”๋“œ ๋‚ด์— BEAM ํšจ๊ณผ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ํšจ๊ณผ ๊ฐœ์ฒด๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ํšจ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด LAST CREATED ENTITY ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "๊ฐœ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋  ๊ฒฝ์šฐ ์ด ์•ก์…˜์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 0, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 0 + }, + { + "topName": "IAction", + "orderNumber": 133, + "path": "/interface/action/action.ts", + "indent": 0 + } + ] + }, + "748": { + "contexts": [ + "ํ•ด๋‹น ํšจ๊ณผ๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 1, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "749": { + "contexts": [ + "์ƒ์„ฑํ•  ํšจ๊ณผ์˜ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 2, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "750": { + "contexts": [ + "ํšจ๊ณผ์˜ ์‹œ์ž‘ ์œ„์น˜์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํšจ๊ณผ๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๊ณ , ๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ", + "์ด ๊ฐ’์€ ์›”๋“œ ๋‚ด์˜ ์œ„์น˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 3, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "751": { + "contexts": [ + "ํšจ๊ณผ์˜ ์ข…๋ฃŒ ์œ„์น˜์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํšจ๊ณผ๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๊ณ , ๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ", + "์ด ๊ฐ’์€ ์›”๋“œ ๋‚ด์˜ ์œ„์น˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 4, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "752": { + "contexts": [ + "์ƒ์„ฑ๋  BEAM ํšจ๊ณผ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค. ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ•", + "๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ํšจ๊ณผ์Œ์—๋Š”", + "์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค์ง 'GOOD', ๊ทธ๋ฆฌ๊ณ ", + "'BAD' BEAM ํšจ๊ณผ์—๋งŒ ์ƒ‰์ƒ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 5, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "753": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘ ์–ด๋–ค ํ•ญ๋ชฉ์„ ์ง€์†์ ์œผ๋กœ", + "์žฌํ™•์ธ ํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํšจ๊ณผ๋Š” ์ž…๋ ฅ ์ •๋ณด์˜", + "์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ, ์žฌํ™•์ธ ํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Beam Effect", + "orderNumber": 6, + "path": "/interface/action/child/createBeamEffect.ts", + "indent": 4 + } + ] + }, + "754": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ DUMMY ๋ด‡ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Dummy Bot", + "orderNumber": 0, + "path": "/interface/value/child/isDummyBot.ts", + "indent": 0 + }, + { + "topName": "IValue", + "orderNumber": 198, + "path": "/interface/value/value.ts", + "indent": 0 + } + ] + }, + "755": { + "contexts": [ + "๊ณ ๋ คํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Dummy Bot", + "orderNumber": 1, + "path": "/interface/value/child/isDummyBot.ts", + "indent": 4 + } + ] + }, + "756": { + "contexts": [ + "๊ด€์ „์ž๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ๋ณด๊ฑฐ๋‚˜ ๋ณผ ์ˆ˜ ์—†๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 11, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + }, + { + "topName": "Create In World Text", + "orderNumber": 8, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "757": { + "contexts": [ + "์‚ฌ์šฉํ•  IN-WORLD TEXT ์˜ ์ƒ‰์ƒ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 7, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "_file": { + "/type/heroConstant.ts": [ + "export type HeroConstantType", + " = '๋ฆฌํผ'", + " | 'ํŠธ๋ ˆ์ด์„œ'", + " | '๋ฉ”๋ฅด์‹œ'", + " | 'ํ•œ์กฐ'", + " | 'ํ† ๋ฅด๋น„์˜จ'", + " | '๋ผ์ธํ•˜๋ฅดํŠธ'", + " | 'ํŒŒ๋ผ'", + " | '์œˆ์Šคํ„ด'", + " | '์œ„๋„์šฐ๋ฉ”์ด์ปค'", + " | '๋ฐ”์Šคํ‹ฐ์˜จ'", + " | '์‹œ๋ฉ”ํŠธ๋ผ'", + " | '์  ์•ผํƒ€'", + " | '๊ฒ์ง€'", + " | '๋กœ๋“œํ˜ธ๊ทธ'", + " | '๋งฅํฌ๋ฆฌ'", + " | '์ •ํฌ๋žซ'", + " | '์ž๋ฆฌ์•ผ'", + " | '์†”์ ธ: 76'", + " | '๋ฃจ์‹œ์šฐ'", + " | 'D.Va'", + " | '๋ฉ”์ด'", + " | '์†œ๋ธŒ๋ผ'", + " | '๋‘ ํ”ผ์ŠคํŠธ'", + " | '์•„๋‚˜'", + " | '์˜ค๋ฆฌ์‚ฌ'", + " | '๋ธŒ๋ฆฌ๊ธฐํ…Œ'", + " | '๋ชจ์ด๋ผ'", + " | '๋ ˆํ‚น๋ณผ'", + " | '์• ์‰ฌ'", + " | '๋ฐ”ํ‹ฐ์ŠคํŠธ'", + " | '์‹œ๊ทธ๋งˆ'" + ] + } +} \ No newline at end of file diff --git a/bin/core/language/extractor/extractor.ts b/bin/core/language/extractor/extractor.ts new file mode 100644 index 0000000..4ded1c4 --- /dev/null +++ b/bin/core/language/extractor/extractor.ts @@ -0,0 +1,197 @@ +export interface IParsedComment { + id: number + indent: string + contexts: string[] +} + +export interface IRenderedComment { + id: number + indent: string + context: string +} + +export interface IResultItem { + contexts: string[] + usedFiles: { + topName: string + path: string + indent: number + orderNumber: number + }[] +} + +export interface ICommonData { + currentFilePath: string + currentTopName: string + currentOrderNumber: number + + idMap: {[key: string]: any} + resultMap: {[key: string]: IResultItem} +} + +export const collectComment = ( + comment: string, + id: number = 0, + common: ICommonData +) => { + let comments = comment.split(`/**`) + + // First item is always useless. + comments.shift() + + let parsedComments: IParsedComment[] = [] + for(let singleComment of comments){ + + // No Empty Comment + if(singleComment.length == 0) continue + singleComment = `${singleComment}` + + // Loop Every line + let indent = `` + let contexts: string[] = [] + for(let commentLine of singleComment.split('\n')){ + let preIndent = `` + if(commentLine.length == 0) continue + if(commentLine.indexOf(`*/`) != -1) continue + commentLine = commentLine.replace('\r', '') + + let actualCommentLine = commentLine.split('* ') + if(actualCommentLine.length < 2) continue + + // Create Indent String + for(let i=0;i<(actualCommentLine[0].length - 1);i++) preIndent += ` ` + indent = preIndent + + contexts.push(actualCommentLine[1]) + } + + let idMapKey = renderComment(contexts) + if(typeof common.idMap[idMapKey] != 'undefined'){ + parsedComments.push({ + id: common.idMap[idMapKey], + indent, + contexts + }) + common.resultMap[common.idMap[idMapKey]].usedFiles.push({ + topName: common.currentTopName, + orderNumber: common.currentOrderNumber++, + path: common.currentFilePath, + indent: indent.length + }) + }else{ + parsedComments.push({ + id: id++, + indent, + contexts + }) + } + } + return {id, parsedComments} +} + +export const renderComment = (contexts: string[], indent: string = ``)=>{ + let renderedComment = `${indent}/**` + + // Loop Contexts + for(let context of contexts) + renderedComment += `\n${indent} * ${context}` + + // Finish Render Comment + renderedComment += `\n${indent} */` + return renderedComment +} + +export const renderComments = ( + comment: string, + id: number = 0, + common: ICommonData +) => { + + let collectedComments = collectComment(comment, id, common) + let comments: IParsedComment[] = + collectedComments.parsedComments + + let renderedComments: IRenderedComment[] = [] + for(let comment of comments){ + + // Create Indent String + let indent = comment.indent + + // Render Comment + let renderedComment = renderComment(comment.contexts, indent) + + renderedComments.push({ + id: comment.id, + indent, + context: renderedComment + }) + + // Register Common Data + let idMapKey = renderComment(comment.contexts) + common.idMap[idMapKey] = comment.id + + if(typeof common.resultMap[comment.id] == 'undefined'){ + common.resultMap[comment.id] = { + contexts: comment.contexts, + usedFiles: [ + { + topName: common.currentTopName, + orderNumber: common.currentOrderNumber++, + path: common.currentFilePath, + indent: indent.length + } + ] + } + } + } + + return { + id: collectedComments.id, + renderedComments, + collectedComments + } +} + +export const rearrangeCommentTemplate = ( + id: number = 0, + indent: string = `` +) => { + let rearrangeComment = `` + rearrangeComment += `${indent}/**\n` + rearrangeComment += `${indent} * {${id}}\n` + rearrangeComment += `${indent} */` + return rearrangeComment +} + +export const rearrangeComments = ( + sourceCode: string, + id: number = 0, + common: ICommonData +)=>{ + let data = renderComments(sourceCode, id, common) + + let rearrangedCode = sourceCode + for(let renderedComment of data.renderedComments){ + let indent = renderedComment.indent + let rearrangeComment = rearrangeCommentTemplate(renderedComment.id, indent) + + while(true){ + if(rearrangedCode.indexOf(`/** `) != -1){ + rearrangedCode = rearrangedCode.replace(`/** `, `/**`) + }else if(rearrangedCode.indexOf(`*/ `) != -1){ + rearrangedCode = rearrangedCode.replace(`*/ `, `*/`) + }else if(rearrangedCode.indexOf(`\r`) != -1){ + rearrangedCode = rearrangedCode.replace(`\r`, ``) + }else if(renderedComment.context.indexOf(`\r`) != -1){ + renderedComment.context = renderedComment.context.replace(`\r`, ``) + }else if(rearrangeComment.indexOf(`\r`) != -1){ + rearrangeComment = rearrangeComment.replace(`\r`, ``) + }else{ + break + } + } + + rearrangedCode = rearrangedCode.replace(renderedComment.context, rearrangeComment) + } + return {id: data.id, rearrangedCode} +} \ No newline at end of file diff --git a/bin/core/language/extractor/index.ts b/bin/core/language/extractor/index.ts new file mode 100644 index 0000000..8183326 --- /dev/null +++ b/bin/core/language/extractor/index.ts @@ -0,0 +1,133 @@ +import * as Util from '../../generator/util' +import * as Extractor from './extractor' + +import fs, { readFileSync } from 'fs' +import path from 'path' +import rimraf from 'rimraf' + +import generatorData from '../../generator/generatorData.json' + +/** + * @description + * Collects all comments on the interface + * that have already been created, + * and replaces the comments with an ID. + * + * @param lang + */ +export const Extract = async (lang: string = 'kor')=>{ + + // Create Extract Path + let extractPath = `${process.cwd()}/bin/dist/_extracted/` + try{ rimraf.sync(extractPath) } catch(e){} + try{ await fs.promises.mkdir(extractPath, { recursive: true }) } catch(e){} + + // Common Data + let common: Extractor.ICommonData = { + currentFilePath: ``, + currentTopName: ``, + currentOrderNumber: 0, + idMap: {}, + resultMap: {} + } + + // Collect CommentId + let commentId = 0 + + // Collect Paths + let collectPaths = [ + `/interface`, + `/type` + ] + + /// Collect all additional data + try{ + let oldData = require(`${process.cwd()}/bin/core/language/data/${lang}.json`) + if(typeof oldData['_file'] != 'undefined') + common.resultMap['_file'] = oldData['_file'] + }catch(e){} + + // Collect all interface files + for(let collectPath of collectPaths){ + await Util.collectInterfaceFiles( + + // Collect Path + path.resolve(`${process.cwd()}/bin/release/${lang}/${collectPath}`), + + // Collect Process + async (collectedDatas)=>{ + + // Loop interface files + for(let { + fileName, + fileData, + subPath, + typeName, + interfaceName + } of collectedDatas){ + + /** + * `typeName` Convert Type Name `ValueArrayType` To `Array` + */ + // notUniqueInterfaceName = Util.pureTypeNameExtractor(notUniqueInterfaceName) + let currentTopName = `` + let nameMaps = [ + generatorData.action.actionName, + generatorData.event.eventName, + generatorData.value.valueName + ] + for(let nameMap of nameMaps){ + for(let name of Object.keys(nameMap)){ + if(name == fileName){ + currentTopName = nameMap[name] + break + } + } + } + + if(currentTopName.length == 0 && typeName.length != 0) + currentTopName = Util.pureTypeNameExtractor(typeName) + + if(currentTopName.length == 0) + currentTopName = interfaceName + + common.currentTopName = currentTopName + common.currentOrderNumber = 0 + + + // Set Common Data Prop + common.currentFilePath = `${collectPath}${subPath}${fileName}` + + // Rearrange Comments + let data = Extractor.rearrangeComments(fileData, commentId, common) // @TODO COLLECT MAP + + // Refrash Comment Id + commentId = data.id + + // Crreate Path + let rearrangedPath = path.resolve(`${extractPath}/${collectPath}/${subPath}/`) + try{ await fs.promises.mkdir(rearrangedPath, { recursive: true }) } catch(e){} + + // Write File + await fs.writeFileSync(path.resolve(`${rearrangedPath}/${fileName}`), data.rearrangedCode) + } + }, + + // No Collect Index File: false + false + ) + } + + fs.writeFileSync(path.resolve(`${extractPath}/${lang}.json`), JSON.stringify(common.resultMap, null, 2)) +} + +// for CLI Command Run +try{ + if(`${process.argv[1]}` == __dirname){ + let option = process.argv[2] + ;(async ()=>{ + await Extract(option) + console.log('Finished') + })() + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/language/injector/index.ts b/bin/core/language/injector/index.ts new file mode 100644 index 0000000..b053293 --- /dev/null +++ b/bin/core/language/injector/index.ts @@ -0,0 +1,118 @@ +import * as Util from '../../generator/util' +import * as Extractor from '../extractor/extractor' +import * as Injector from './injector' + +import FolderLogger from 'folder-logger' +import tempDir from 'temp-dir' + +import fs from 'fs' +import path from 'path' +import rimraf from 'rimraf' +import replaceAll from 'string-replace-all' + +/** + * @description + * Injects all comments in the engine files + * that will be duplicate to release folder. + * + * @param lang + */ +export const Inject = async (langs: string[] = ['kor'])=>{ + /** + * @description + * Generator Logger + */ + const Logger = new FolderLogger(tempDir) + + for(let lang of langs){ + Logger.debug(`[${lang.toUpperCase()}] Files Initializing...`) + + // Create Inject Path + let injectPath = `${process.cwd()}/bin/release/${lang}` + try{ rimraf.sync(injectPath) } catch(e){} + try{ await fs.promises.mkdir(injectPath, { recursive: true }) } catch(e){} + + // Load Data + let translationData: Injector.ITraslationData = require(`../data/${lang}.json`) + + // Collect Paths + let collectPaths = [ + `/interface`, + `/reformer`, + `/resolver`, + `/type` + ] + + // Collect all interface files + for(let collectPath of collectPaths){ + await Util.collectInterfaceFiles( + + // Collect Path + path.resolve(`${process.cwd()}/bin/core/engine${collectPath}`), + + // Collect Process + async (collectedDatas)=>{ + + // Loop interface files + for(let { + fileName, + fileData, + subPath + } of collectedDatas){ + fileData = replaceAll(fileData, `\r`, ``) + + let collectedCommentData = Injector.collectCommentData(fileData, fileName) + for(let collectedComment of collectedCommentData){ + + let indent = collectedComment.indent + let contexts: string[] = [] + + if(typeof translationData[collectedComment.id] != 'undefined') + contexts = translationData[collectedComment.id].contexts + + let target = Extractor.renderComment([`{${collectedComment.id}}`], indent) + let change = Extractor.renderComment(contexts, indent) + fileData = fileData.replace(target, change) + } + + // Crreate Path + let rearrangedPath = path.resolve(`${injectPath}/${collectPath}/${subPath}/`) + try{ await fs.promises.mkdir(rearrangedPath, { recursive: true }) } catch(e){} + + // Write File + fs.writeFileSync(path.resolve(`${rearrangedPath}/${fileName}`), fileData) + } + }, + + // No Collect Index File: false + false + ) + } + + // + for(let additionalFilePath of Object.keys(translationData['_file'])){ + let fileContexts = translationData['_file'][additionalFilePath] + fs.writeFileSync(`${injectPath}${additionalFilePath}`, fileContexts.join('\n')) + } + + // Copy index.ts + fs.writeFileSync(`${injectPath}/index.ts`, fs.readFileSync(`${process.cwd()}/bin/core/engine/index.ts`)) + Logger.debug(`[${lang.toUpperCase()}] Files Initialized.`) + } + + console.log('') +} + +// for CLI Command Run +try{ + if(`${process.argv[1]}` == __dirname){ + let option = process.argv[2] + ;(async ()=>{ + if(typeof process.argv[2] != 'undefined'){ + await Inject(process.argv[2].split(',')) + }else{ + Inject() + } + })() + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/language/injector/injector.ts b/bin/core/language/injector/injector.ts new file mode 100644 index 0000000..005f179 --- /dev/null +++ b/bin/core/language/injector/injector.ts @@ -0,0 +1,57 @@ + +export interface ICollectCommentItem { + id: number, + indent: string +} + +export const collectCommentData = (comment: string, fileName) => { + let comments = comment.split(`/**`) + + // First item is always useless. + comments.shift() + + let collectedData: ICollectCommentItem[] = [] + for(let singleComment of comments){ + + // No Empty Comment + if(singleComment.length == 0) continue + singleComment = `${singleComment}` + + // Loop Every line + let indent = `` + let contexts: string[] = [] + for(let commentLine of singleComment.split('\n')){ + let preIndent = `` + if(commentLine.length == 0) continue + if(commentLine.indexOf(`*/`) != -1) continue + + let actualCommentLine = commentLine.split('* ') + if(actualCommentLine.length < 2) continue + + // Create Indent String + for(let i=0;i<(actualCommentLine[0].length - 1);i++) preIndent += ` ` + indent = preIndent + + contexts.push(actualCommentLine[1]) + } + let id = Number(contexts.join('').replace('{', '').replace('}', '')) + + if(!Number.isNaN(id)){ + collectedData.push({ + id, + indent + }) + } + } + return collectedData +} + +export interface ITraslationItem { + contexts: string[] + usedFiles: { + path: string + indent: number + }[] +} + +export interface ITraslationData {[key: string]: ITraslationItem | any} diff --git a/bin/core/language/parse/README.md b/bin/core/language/parse/README.md new file mode 100644 index 0000000..b4573db --- /dev/null +++ b/bin/core/language/parse/README.md @@ -0,0 +1,46 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## โš ๏ธ Warning + +> Crawling does not belong to the original legal category and can be a problem if abused. + +- This project main constructor failed to obtain Blizzard approval during this crawling process. This is entirely unofficial work. I don't want anyone to claim the copyright, no matter who succeed in getting through crawling. This project is all MIT Licensed. However, the translation data is certainly not MIT License. In the event of a dispute over translation data, we need to delete all of this data. +- *(The main contributor requested directly, Keith Myron, Dan Reed for translation resources through video conversations at an overwatch workshop developer event at Blizzard headquarters in South Korea on 2019 July 3, but failed to hear a clear answer.)* + + + +## ๐ŸŽฏ Crawling Rule + +- All data needed to reproduce the same crawling process by another developer can be stored in the project (but I hope the capacity is not too large). +- Modules such as Puppeteer are not recommended to be used as much as possible. If really necessary, refer to the npx command as a one-time module. + + + +## โœ… What is Stage Runner? + +- A step-by-step approach was needed to crawl through Blizzard pages in the U.S. +- **Step 1** was to reading all HTML written on the page and JSON. When developing English-speaking data, the first step was a script that ran within the Chrome Inspector on the Chrome browser. +- **Step 2** was to modify the data that had been obtained. +- **Step 3** was to insert a frame through contrast to hand-in-hand input Korean data, and to extract JSON data tailored to the engine by reference to information not explained on Blizzard pages or to correct incorrect words through additional data. + + + +## ๐Ÿ‡ Structure + +> The Parse folder contains the following folders & files: + + + +### ๐Ÿš€ stageRunner [bin/core/language/parse/stageRunner.ts] + +- You can run this script through the command `npm run language:parse`. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/language/parse/eng/README.md b/bin/core/language/parse/eng/README.md new file mode 100644 index 0000000..6139379 --- /dev/null +++ b/bin/core/language/parse/eng/README.md @@ -0,0 +1,86 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + + + +## ๐Ÿ‡ Structure + +> The Parse folder contains the following folders & files: + + + +## ๐ŸŽฏ Stage 1 Code + +**Step1** was on the debugger console of the Chrome browser. + +Target URL: https://us.forums.blizzard.com/en/overwatch/t/wiki-workshop-syntax-script-database/335011 + +### ๐Ÿš€ Code + +```javascript +var values = [] +var summarys = document.querySelectorAll('details') +var isPassed = false +for(let summary of summarys){ + if(!isPassed){ + isPassed = true + continue + } + + summary.click() + values.push(summary.innerHTML) + summary.click() +} +console.log(JSON.stringify(values)) +``` + + + +### ๐Ÿ“ฆ value_stage1 [bin/core/language/parse/eng/value_stage1.json] + +- This is the JSON data obtained through the stage 1 code. + + + +### ๐Ÿš€ make_stage2 [bin/core/language/parse/eng/make_stage2.ts] + +- This script changes the name rule in the step 1 result data and deletes some unnecessary data. + + + +### ๐Ÿ“ฆ value_stage2 [bin/core/language/parse/eng/value_stage2.json] + +- This is the JSON data generated by the stage 2 code. + + + +### ๐Ÿ“œ value_stage3_reference [bin/core/language/parse/eng/value_stage3_reference .json] + +- Step 3 The already completed JSON data for the reference is required for final data generation. A handwritten `kor.json` was used to work on the `eng.json` data. + + + +### ๐Ÿ“œ value_stage3_additional [bin/core/language/parse/eng/value_stage3_additional.json] + +- Content that is missing from the Blizzard description page or data needed to correct the wrong word. + + + +### ๐Ÿš€ make_stage3 [bin/core/language/parse/eng/make_stage3.ts] + +- This script refers to two data. (`value_stage3_reference.json`, `value_stage3_additional.json`) And the use the two step result data to create the final product. + + + +### ๐Ÿ“ฆ value_stage3 [bin/core/language/parse/eng/value_stage3.json] + +- This is the final JSON data generated by the 3rd stage code. You can apply it after changing the name with `eng.json`. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/language/parse/eng/make_stage2.ts b/bin/core/language/parse/eng/make_stage2.ts new file mode 100644 index 0000000..d1969e5 --- /dev/null +++ b/bin/core/language/parse/eng/make_stage2.ts @@ -0,0 +1,132 @@ +import { writeFileSync, readFileSync } from 'fs' +import values from './value_stage1.json' + +export const splitter = (context: string, splitMax = 40, splitMin = 15) => { + let chars = context.split('') + + let splitted: string[] = [] + let splitItem: string = `` + let splitCount = 0 + + for(let char of chars){ + + if(++splitCount >= splitMax && char == ' '){ + splitCount = 0 + splitted.push(splitItem) + splitItem = `` + continue + } + + if(char == '\n'){ + if(splitItem.length != 0){ + splitted.push(splitItem) + splitItem = `` + } + splitCount = 0 + continue + } + + splitItem += char + } + + if(splitItem.length != 0){ + if(splitItem.length > splitMin){ + splitted.push(splitItem) + }else{ + splitted[splitted.length - 1] += ` ${splitItem}` + } + splitItem = `` + } + + return splitted +} + +let stage2: any[] = [] + +for(let value of values){ + value = value.replace(/(<([^>]+)>)/ig, '') + let contexts: string[] = [] + let definitions: any[] = [] + + let detectedDefStart = false + + let isDefFirstNoDash = false + let defFirstNoDashItem: any[] = [] + let defFirstNoDashItemSub: any[] = [] + + let valueLines = value.split('\n') + for(let valueLineIndex in valueLines){ + let valueLine = valueLines[valueLineIndex] + valueLine = valueLine.replace(' ', '') + + if(valueLine.length == 0) continue + if(valueLine.indexOf('Video') != -1) continue + if(valueLine.indexOf('Tutorial') != -1) continue + if(valueLine.indexOf('.jpg') != -1) continue + if(valueLine.indexOf('no definitions') != -1) continue + if(valueLine.indexOf('no specific definitions') != -1) continue + + // Definitions: + if(valueLine == 'Definitions:'){ + detectedDefStart = true + continue + } + + if(detectedDefStart){ + // ๋Œ€์‹œ๊ฐ€ ์žˆ์„๋•Œ + if(valueLine.indexOf(' - ') != -1){ + + if(isDefFirstNoDash){ + // ๋‹ค์ค‘๋ผ์ธ์„ ์ „์ฒด ์ฃผ์„์ด ์“ฐ์—ฌ์ง„ ๊ฒฝ์šฐ + defFirstNoDashItem.push(valueLine) + continue + } + + // ๋‹ค์ค‘๋ผ์ธ์ด ํŠน๋ณ„ ๋ถ€๋ถ„์—๋งŒ ์“ฐ์—ฌ์ง„ ๊ฒฝ์šฐ ์ฒดํฌ + if(defFirstNoDashItemSub.length != 0){ + definitions[definitions.length-1] = + [`${definitions[definitions.length-1]} (${defFirstNoDashItemSub.join(', ')})`] + } + definitions.push([valueLine]) + }else{ + // ๋Œ€์‹œ๊ฐ€ ์—†๊ณ  ์ตœ์ดˆ์ผ๋•Œ + if(definitions.length == 0 && defFirstNoDashItem.length == 0 && !isDefFirstNoDash){ + isDefFirstNoDash = true + continue + } + + if(isDefFirstNoDash){ + // ๋‹ค์ค‘๋ผ์ธ์„ ์ „์ฒด ์ฃผ์„์— ์“ฐ์—ฌ์ง„ ๊ฒฝ์šฐ + definitions.push(defFirstNoDashItem) + defFirstNoDashItem = [] + }else{ + // ๋‹ค์ค‘๋ผ์ธ์ด ํŠน๋ณ„ ๋ถ€๋ถ„์—๋งŒ ์“ฐ์—ฌ์ง„ ๊ฒฝ์šฐ + defFirstNoDashItemSub.push(valueLine) + } + + } + + continue + } + contexts.push(valueLine) + } + + // ๋งˆ์ง€๋ง‰ ๋ผ์ธ์ผ ๊ฒฝ์šฐ + if(defFirstNoDashItem.length != 0){ + definitions.push(defFirstNoDashItem) + defFirstNoDashItem = [] + } + + let name = contexts.shift() + contexts = splitter(contexts.join('\n')) + for(let definitionIndex in definitions){ + if(Array.isArray(definitions[definitionIndex])){ + definitions[definitionIndex] = + splitter(definitions[definitionIndex].join('\n')) + } + } + stage2.push({name, contexts, definitions}) +} + +writeFileSync(`${__dirname}/value_stage2.json`, JSON.stringify(stage2, null, 2)) +console.log(`Finished`) \ No newline at end of file diff --git a/bin/core/language/parse/eng/make_stage3.ts b/bin/core/language/parse/eng/make_stage3.ts new file mode 100644 index 0000000..869610f --- /dev/null +++ b/bin/core/language/parse/eng/make_stage3.ts @@ -0,0 +1,120 @@ + +import { writeFileSync, readFileSync } from 'fs' +import { getLogger } from '../../../generator/logger' +import { splitter } from './make_stage2' + + +import stage2 from './value_stage2.json' +import additional from './value_stage3_additional.json' +import values from './value_stage3_reference.json' + +let Logger = getLogger() + +// CLONE DATA +let stage3 = JSON.parse(JSON.stringify(values)) + +// NO BINDED ITEM CHECK +let bindCheckMap = {} +for(let stage2Item of stage2){ + bindCheckMap[`${stage2Item.name}[0]`] = true + for(let defIndex in stage2Item.definitions){ + let defIndexNum = Number(defIndex)+1 + bindCheckMap[`${stage2Item.name}[${defIndexNum}]`] = true + } +} + +let foundedValuesIndexMap: string[] = [] +for(let stage2Item of stage2){ + + // stage2Item.name + // stage2Item.contexts + // stage2Item.definitions + + // Blizzard Exception + stage2Item.name = stage2Item.name.replace(` - New!`, ``) + if(stage2Item.name.indexOf(` - `) == -1) + stage2Item.name = stage2Item.name.replace(`-`, ` `) + if(stage2Item.name == `SET GLOBAL VARIABLE INDEX`) + stage2Item.name = `SET GLOBAL VARIABLE AT INDEX` + if(stage2Item.name == `LOOP IF CONDITION IF FALSE`) + stage2Item.name = `LOOP IF CONDITION IS FALSE` + if(stage2Item.name == `LOOP IF CONDITION IF TRUE`) + stage2Item.name = `LOOP IF CONDITION IS TRUE` + + let isMatchFounded = false + for(let valuesIndex of Object.keys(values)){ + if(typeof values[valuesIndex]['usedFiles'] == 'undefined') + continue + + for(let usedFile of values[valuesIndex].usedFiles){ + + // MATCH + if(String(usedFile.topName).toLowerCase() == stage2Item.name.toLowerCase()){ + let orderNumber = Number(usedFile.orderNumber) + + // GET TRANSLATED CONTEXT + let translatedContext: any = undefined + try{ + if(orderNumber == 0){ + if(stage2Item.contexts.length != 0) + translatedContext = stage2Item.contexts + }else{ + translatedContext = stage2Item.definitions[orderNumber - 1] + } + }catch(e){} + + // CHANGE STAGE 3 DATA + if(translatedContext != undefined){ + // CHANGE + if(!isMatchFounded) isMatchFounded = true + foundedValuesIndexMap.push(valuesIndex) + stage3[valuesIndex].contexts = translatedContext + } + } + } + } + + if(!isMatchFounded){ + Logger.debug(`NO USED STAGE2 KEY (MIGHT BE DEPRECATED NAME): ${stage2Item.name}`) + } +} + +console.log(``) +for(let valuesIndex of Object.keys(values)){ + + /** + * @TODO + * _file option additional data + */ + if(valuesIndex == '_file'){ + if(typeof additional['_file'] == 'undefined'){ + Logger.warn(`NO DATA FOUNDED _file IN value_stage3_additional.json`) + continue + } + stage3['_file'] = additional['_file'] + continue + } + if(foundedValuesIndexMap.indexOf(valuesIndex) == -1){ + + // ADDITIONAL + let isAdditionalDataExist = false + for(let usedFile of values[valuesIndex].usedFiles){ + // + if(typeof additional[`${usedFile.topName}/${usedFile.orderNumber}`] != `undefined`){ + // Logger.debug(`TRANSLATE REPLACED-> ID:${valuesIndex} (${usedFile.topName}/${usedFile.orderNumber})`) + stage3[valuesIndex].contexts = + splitter(additional[`${usedFile.topName}/${usedFile.orderNumber}`].join(`\n`)) + isAdditionalDataExist = true + } + } + + if(!isAdditionalDataExist){ + Logger.warn(`MISSING REF TRANSLATE-> ID:${valuesIndex}`) + for(let usedFile of values[valuesIndex].usedFiles) + Logger.warn(`\t${String(usedFile.topName)}[${usedFile.orderNumber}]\t${usedFile.path}`) + } + } +} + +writeFileSync(`${__dirname}/value_stage3.json`, JSON.stringify(stage3, null, 2)) +Logger.debug(`Stage 3 Finished`) \ No newline at end of file diff --git a/bin/core/language/parse/eng/value_stage1.json b/bin/core/language/parse/eng/value_stage1.json new file mode 100644 index 0000000..2d5d1a0 --- /dev/null +++ b/bin/core/language/parse/eng/value_stage1.json @@ -0,0 +1 @@ +["\n\nONGOING - GLOBAL\n

The ONGOING - GLOBAL event attribute will affect all entities in the game environment.

\n

This event attribute has no specific definitions.

\n

Tutorials:

\n\n

 

\n","\n\nONGOING - EACH PLAYER\n

The ONGOING - EACH PLAYER event attribute will affect the specified players in the game environment.

\n

Definitions:

\n
    \n
  • \n

    Team

    \n
      \n
    • ALL - This event will affect both teams.
    • \n
    • TEAM 1 - This event will affect team 1 (blue/defense)
    • \n
    • TEAM 2 - This event will affect team 2 (red/attack)
    • \n
    \n
  • \n
  • \n

    Players

    \n
      \n
    • ALL - This event will affect all players regardless of team, slot position, or hero selected.
    • \n
    • SLOT # (0-11) - This event affect the slot assignment of that specific player in the order of the Lobby (see diagram below)
    • \n
    • {HERO NAME} - This event affects any players using the specified hero.
    • \n
    \n
  • \n
\n

\n

 

\n","\n\nPLAYER EARNED ELIMINATION\n

The PLAYER EARNED ELIMINATION event attribute will affect the specified players who successfully score an elimination in the game environment.

\n

Definitions:

\n
    \n
  • \n

    Team

    \n
      \n
    • ALL - This event will affect both teams.
    • \n
    • TEAM 1 - This event will affect team 1 (blue/defense)
    • \n
    • TEAM 2 - This event will affect team 2 (red/attack)
    • \n
    \n
  • \n
  • \n

    Players

    \n
      \n
    • ALL - This event will affect all players regardless of team, slot position, or hero selected.
    • \n
    • SLOT # (0-11) - This event affect the slot assignment of that specific player in the order of the Lobby (see diagram below)
    • \n
    • {HERO NAME} - This event affects any players using the specified hero.
    • \n
    \n
  • \n
\n

\n

 

\n","\n\nPLAYER DEALT FINAL BLOW\n

The PLAYER DEALT FINAL BLOW event attribute will affect the specified players who successfully dealt the lethal damage against another player in the game environment.

\n

Definitions:

\n
    \n
  • \n

    Team

    \n
      \n
    • ALL - This event will affect both teams.
    • \n
    • TEAM 1 - This event will affect team 1 (blue/defense)
    • \n
    • TEAM 2 - This event will affect team 2 (red/attack)
    • \n
    \n
  • \n
  • \n

    Players

    \n
      \n
    • ALL - This event will affect all players regardless of team, slot position, or hero selected.
    • \n
    • SLOT # (0-11) - This event affect the slot assignment of that specific player in the order of the Lobby (see diagram below)
    • \n
    • {HERO NAME} - This event affects any players using the specified hero.
    • \n
    \n
  • \n
\n

\n

 

\n","\n\nPLAYER DEALT DAMAGE\n

The PLAYER DEALT DAMAGE event attribute will affect the specified players who successfully dealt damage against another player in the game environment.

\n

Definitions:

\n
    \n
  • \n

    Team

    \n
      \n
    • ALL - This event will affect both teams.
    • \n
    • TEAM 1 - This event will affect team 1 (blue/defense)
    • \n
    • TEAM 2 - This event will affect team 2 (red/attack)
    • \n
    \n
  • \n
  • \n

    Players

    \n
      \n
    • ALL - This event will affect all players regardless of team, slot position, or hero selected.
    • \n
    • SLOT # (0-11) - This event affect the slot assignment of that specific player in the order of the Lobby (see diagram below)
    • \n
    • {HERO NAME} - This event affects any players using the specified hero.
    • \n
    \n
  • \n
\n

\n

 

\n","\n\nPLAYER TOOK DAMAGE\n

The PLAYER TOOK DAMAGE event attribute will affect the specified players who received damage in the game environment.

\n

Definitions:

\n
    \n
  • \n

    Team

    \n
      \n
    • ALL - This event will affect both teams.
    • \n
    • TEAM 1 - This event will affect team 1 (blue/defense)
    • \n
    • TEAM 2 - This event will affect team 2 (red/attack)
    • \n
    \n
  • \n
  • \n

    Players

    \n
      \n
    • ALL - This event will affect all players regardless of team, slot position, or hero selected.
    • \n
    • SLOT # (0-11) - This event affect the slot assignment of that specific player in the order of the Lobby (see diagram below)
    • \n
    • {HERO NAME} - This event affects any players using the specified hero.
    • \n
    \n
  • \n
\n

\n

 

\n","\n\nPLAYER DIED\n

The PLAYER DIED event attribute will affect the specified players who died in the game environment.

\n

Definitions:

\n
    \n
  • \n

    Team

    \n
      \n
    • ALL - This event will affect both teams.
    • \n
    • TEAM 1 - This event will affect team 1 (blue/defense)
    • \n
    • TEAM 2 - This event will affect team 2 (red/attack)
    • \n
    \n
  • \n
  • \n

    Players

    \n
      \n
    • ALL - This event will affect all players regardless of team, slot position, or hero selected.
    • \n
    • SLOT # (0-11) - This event affect the slot assignment of that specific player in the order of the Lobby (see diagram below)
    • \n
    • {HERO NAME} - This event affects any players using the specified hero.
    • \n
    \n
  • \n
\n

\n

 

\n","\n\nABORT\n

Stops execution of the action list.

\n

There are no definitions to this action.

\n

 

\n","\n\nABORT IF\n

Stops execution of the action list if the actionโ€™s condition evaluates to true, if it does not, the execution continues with the next action.

\n

Definitions:

\n
    \n
  • Condition - Specifies whether the execution is stopped. Can use most Boolean based Value Syntax.
    \n 
  • \n
\n","\n\nABORT IF CONDITION IS FALSE\n

Stops execution of the action list if at least one condition in the condition list is false. If all conditions are true, execution continues with the next action.

\n

There are no definitions to this action.

\n

 

\n","\n\nABORT IF CONDITION IS TRUE\n

Stops execution of the action list if all conditions in the condition list is true. If any are false, execution continues with the next action.

\n

There are no definitions to this action.

\n

 

\n","\n\nALLOW BUTTON\n

Undoes the effect of the disallow button action for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose button is being reenabled. Can use most Player based Value Syntax.
  • \n
  • Button - The logical button that is being reenabled.
  • \n
\n

 

\n","\n\nAPPLY IMPLUSE\n

Applies an instantaneous change in velocity to the movement of one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose velocity will be changed. Can use most Player based Value Syntax.
  • \n
  • Direction - The unit direction in which the impulse will be applied. This value is normalized internally. Can use most Vector based Value Syntax.
  • \n
  • Speed - The magnitude of the change to the velocities of the player or players. Can use most Number based Value Syntax.
  • \n
  • Relative - Specifies whether the direction is relative to world coordinates or the local coordinates of the player or players.\n
      \n
    • To World - Relative to the worldโ€™s coordinate system.
    • \n
    • To Player - Relative to the playerโ€™s local coordinate system (which moves and rotates with the player).
    • \n
    \n
  • \n
  • Motion - Specifies whether existing velocity that is counter to direction should first be canceled out before applying the impulse.\n
      \n
    • Cancel Contrary Motion - If the target is moving against the direction of the impulse, this relative velocity is negated before the impulse is applied.
    • \n
    • Incorporate Contrary Motion - The impulse is added directly to the velocity of the target, so if the target is moving against the direction of the impulse, it might seem like the impulse has less of an effect.
    • \n
    \n
  • \n
\n

 

\n","\n\nBIG MESSAGE\n

Displays a large message above the reticle that is visible to specific players.

\n

Definitions:

\n
    \n
  • Visible to - One or more players who will see the message. Can use most Value Syntax to select multiple players to specify.
  • \n
  • Header - The message to be displayed. Can use most String based Value Syntax to specify.
  • \n
\n

 

\n","\n\nCHASE GLOBAL VARIABLE AT RATE\n

Gradually modifies the value of a global variable at a specific rate. (A global variable is a variable that belongs to the game itself.)

\n

Definitions:

\n
    \n
  • Variable - The variable the action will manipulate. Can use most Variable based Value Syntax.
  • \n
  • Destination - The value that the global variable will eventually reach. The type of this value may be either a number or a vector, through the variableโ€™s existing value must be of the same type before the chase begins. Can use most Number or Vector based Value Syntax to specify.
  • \n
  • Rate - The amount of change that will happen to the variableโ€™s value each second. Can use most Number based Value Syntax to specify.
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continuously reevaluated. This action will keep asking for and using new values from reevaluated inputs. You can specify a Destination and Rate or nothing.
  • \n
\n

 

\n","\n\nCHASE GLOBAL VARIABLE OVER TIME\n

Gradually modifies the value of a global variable over time. (A global variable is a variable that belongs to the game itself.)

\n

Definitions:

\n
    \n
  • Variable - The variable the action will manipulate. Can use most Variable based Value Syntax.
  • \n
  • Destination - The value that the global variable will eventually reach. The type of this value may be either a number or a vector, through the variableโ€™s existing value must be of the same type before the chase begins. Can use most Number or Vector based Value Syntax to specify.
  • \n
  • Duration - The amount of time, in seconds, over which the variableโ€™s value will approach the destination. Can use most Number based Value Syntax to specify.
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continuously reevaluated. This action will keep asking for and using new values from reevaluated inputs. You can specify a Destination and Duration or nothing.
  • \n
\n

 

\n","\n\nCHASE PLAYER VARIABLE AT RATE\n

Gradually modifies the value of a player variable at a specific rate. (A player variable is a variable that belongs to a specific player.)

\n

Definitions:

\n
    \n
  • Player - The player whose variable will gradually change. If multiple players are provided, each of their variables will change independently.
  • \n
  • Variable - The variable the action will manipulate. Can use most Variable based Value Syntax.
  • \n
  • Destination - The value that the player variable will eventually reach. The type of this value may be either a number or a vector, through the variableโ€™s existing value must be of the same type before the chase begins. Can use most Number or Vector based Value Syntax to specify.
  • \n
  • Rate - The amount of change that will happen to the variableโ€™s value each second. Can use most Number based Value Syntax to specify.
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continuously reevaluated. This action will keep asking for and using new values from reevaluated inputs. You can specify a Destination and Rate or nothing.
  • \n
\n

 

\n","\n\nCHASE PLAYER VARIABLE OVER TIME\n

Gradually modifies the value of a player variable over time. (A player variable is a variable that belongs to a specific player.)

\n

Definitions:

\n
    \n
  • Player - The player whose variable will gradually change. If multiple players are provided, each of their variables will change independently.
  • \n
  • Variable - The variable the action will manipulate. Can use most Variable based Value Syntax.
  • \n
  • Destination - The value that the player variable will eventually reach. The type of this value may be either a number or a vector, through the variableโ€™s existing value must be of the same type before the chase begins. Can use most Number or Vector based Value Syntax to specify.
  • \n
  • Duration - The amount of time, in seconds, over which the variableโ€™s value will approach the destination. Can use most Number based Value Syntax to specify.
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continuously reevaluated. This action will keep asking for and using new values from reevaluated inputs. You can specify a Destination and Duration or nothing.
  • \n
\n

 

\n","\n\nCLEAR STATUS\n

Clears a status that was applied from a set status action from one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players from whom the status will be removed. Can use most Player based Value Syntax.
  • \n
  • Status - The Status to be removed from the player or players. Values include Hacked, Burning, Knocked Down, Asleep, Frozen, Unkillable, Invincible, Phased Out, Rooted, or Stunned.
  • \n
\n

 

\n","\n\nCOMMUNICATE\n

Causes one or more players to use an emote, voice line, or other equipped communication.

\n

Definitions:

\n
    \n
  • Player - The player or players to perform the communication. Can use most Player based Value Syntax.
  • \n
  • Type - The type of communication. Can use any equipped emote, equipped voice line, or any other communication effect.
  • \n
\n

 

\n","\n\nCREATE EFFECT\n

Creates an in-world effect entity. This effect entity will persist until destroyed, to obtain a reference to this entity, use the last created entity value. This action will fail if too many entities have been created.

\n

Definitions:

\n
    \n
  • Visible to - One or more players who will be able to see the effect. Can use most Value Syntax to select one or multiple players.
  • \n
  • Type - The type of the effect to be created.\n
      \n
    • Sphere
    • \n
    • Light Shaft
    • \n
    • Orb
    • \n
    • Ring
    • \n
    • Cloud
    • \n
    • Sparkles
    • \n
    • Good Aura
    • \n
    • Bad Aura
    • \n
    • Energy Sound
    • \n
    • Pick-Up Sound
    • \n
    • Good Aura Sound
    • \n
    • Bad Aura Sound
    • \n
    • Sparkles Sound
    • \n
    • Smoke Sound
    • \n
    • Decal Sound
    • \n
    • Beacon Sound
    • \n
    \n
  • \n
  • Color - The color of the effect to be created. IF a particular team is chosen, the effect will either be red or blue, depending on whether the team is hostile to the viewer. Does not apply to sound effects.
  • \n
  • Position - The effectโ€™s position. If this value is a player, then the effect will move along with the player, otherwise, the value is interpreted as a position in the world. Can use most Player or Vector based Value Syntax.
  • \n
  • Radius - The effectโ€™s radius in meters. Sound effects have their volume affected instead.
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continuously reevaluated, the effect will keep asking for and using new values from reevaluated inputs.\n
      \n
    • Visible to, position, and scale
    • \n
    • Position and scale
    • \n
    • Visible to
    • \n
    • None
    • \n
    \n
  • \n
\n

 

\n","\n\nCREATE HUD TEXT\n

Creates HUD text visible to specific players at specific location on the screen. This text will persist until destroyed. To obtain a reference to this text, use the last text ID value. This action will fail if too many text elements have been created.

\n

Definitions:

\n
    \n
  • Visible to - One or more players who will see the HUD text. Can use most Value Syntax to select one or multiple players.
  • \n
  • Header - The header text to be displayed (can be blank). Can use most String based Value Syntax to populate.
  • \n
  • Subheader - The subheader text to be displayed (can be blank). Can use most String based Value Syntax to populate.
  • \n
  • Text - The body text to be displayed (can be blank). Can use most String based Value Syntax to populate.
  • \n
  • Location - The location on the screen where text will appear. You can choose left, top, or right.
  • \n
  • Sort Order - The Sort Order of the text relative to other text in the same location. Text with a higher sort order will come after text with a lower sort order. Can use most Number based Value Syntax.
  • \n
  • Header Color - The color of the Header text to be created. If a particular team is chosen, the effect will either be red or blue.
  • \n
  • Subheader Color - The color of the Subheader text to be created. If a particular team is chosen, the effect will either be red or blue.
  • \n
  • Text Color - The color of the body text to be created. If a particular team is chosen, the effect will either be red or blue.
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continuously reevaluated, the text will keep asking for and using new values from reevaluated inputs.\n
      \n
    • Visible to and String
    • \n
    • String
    • \n
    • None
    • \n
    \n
  • \n
\n

 

\n","\n\nCREATE ICON\n

Creates an in-world entity. This icon entity will persist until destroyed. To obtain a reference to this entity, use the last created entity value. This action will fail if too many entities have been created.

\n

Definitions:

\n
    \n
  • Visible to - One or more players who will be able to see the icon. Can use most Value Syntax to select one or multiple players.
  • \n
  • Position - The iconโ€™s position. If this value is a player, then the icon will appear above the playerโ€™s head, otherwise, the value is interpreted as a position in the world. Can use most Player or Vector based Value Syntax.
  • \n
  • Icon - The icon to be created.\n
      \n
    • Arrow: Down
    • \n
    • Arrow: Left
    • \n
    • Arrow: Right
    • \n
    • Arrow: Up
    • \n
    • Asterisk
    • \n
    • Bolt
    • \n
    • Checkmark
    • \n
    • Circle
    • \n
    • Club
    • \n
    • Diamond
    • \n
    • Dizzy
    • \n
    • Exclamation Mark
    • \n
    • Eye
    • \n
    • Fire
    • \n
    • Flag
    • \n
    • Halo
    • \n
    • Happy
    • \n
    • Heart
    • \n
    • Moon
    • \n
    • No
    • \n
    • Plus
    • \n
    • Poison
    • \n
    • Poison 2
    • \n
    • Question Mark
    • \n
    • Radioactive
    • \n
    • Recycle
    • \n
    • Ring Thick
    • \n
    • Ring Thin
    • \n
    • Sad
    • \n
    • Skull
    • \n
    • Spade
    • \n
    • Spiral
    • \n
    • Stop
    • \n
    • Trashcan
    • \n
    • Warning
    • \n
    • X
    • \n
    \n
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continously reevaluated, the icon will keep asking for and using new values from reevaluated inputs.\n
      \n
    • Visible to and position
    • \n
    • Position
    • \n
    • Visible to
    • \n
    • None
    • \n
    \n
  • \n
  • Icon Color - The color of the icon to be created. IF a particular team is chosen, the icon will either be red or blue, depending on whether the team is hostile to the viewer.
  • \n
  • Show when offscreen - Should this icon still appear even when it is behind you? Can use most Boolean based Value Syntax to specify.
  • \n
\n

 

\n","\n\nCREATE IN-WORLD TEXT\n

Creates in-world text visible to specific players at specific position in the world. This text will persist until destroyed. To obtain a reference to this text, use the last text ID value. This action will fail if too many text elements have been created.

\n

Definitions:

\n
    \n
  • Visible to - One or more players who will see the HUD text. Can use most Value Syntax to select one or multiple players.
  • \n
  • Header - The header text to be displayed (can be blank). Can use most String based Value Syntax to populate.
  • \n
  • Position - The textโ€™s position. If this value is a player, then the text will appear above the playerโ€™s head. Otherwise, the value is interpreted as a position in the world. Can use most Player or Vector based Value Syntax.
  • \n
  • Scale - The textโ€™s scale. Can use most Number based Value Syntax.
  • \n
  • Clipping - Specifies whether the text can be seen through walls or is instead clipped.\n
      \n
    • Clip Against Surfaces - The text may be partially or completely obscured by walls, floors, ceilings, players, or other solid objects.
    • \n
    • Do not clip - The text will always be fully visible. Even if it is behind a wall or solid object.
    • \n
    \n
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continuously reevaluated, the text will keep asking for and using new values from reevaluated inputs.\n
      \n
    • Visible to, Position, and String
    • \n
    • Visible to and String
    • \n
    • None
    • \n
    \n
  • \n
\n

 

\n","\n\nDAMAGE\n

Applies instantaneous damage to one or more players, possibly killing the players.

\n

Definitions:

\n
    \n
  • Player - The player or players who will receive damage. Can use most Player based Value Syntax to select one or multiple players.
  • \n
  • Damager - The player who will receive credit for the damage. A damager of null indicates no player will receive credit. Can use most Player based Value Syntax for this value.
  • \n
  • Amount - The amount of damage to apply. This amount may be modified by buffs, debuffs, or armor. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nDECLARE MATCH DRAW\n

Instantly ends the match in a draw. This action has no effect in free-for-all modes.

\n

There are no definitions to this action.

\n

 

\n","\n\nDECLARE PLAYER VICTORY\n

Instantly ends the match with the specific player as the winner. This action only has an effect in free-for-all modes.

\n

Definitions:

\n
    \n
  • Player - The winning player. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nDECLARE ROUND VICTORY\n

Declare a team as the current round winner. This only works in the control and elimination game modes.

\n

Definitions:

\n
    \n
  • Team - Round winning team. Can use most Team based Value Syntax for this value.
  • \n
\n

 

\n","\n\nDECLARE TEAM VICTORY\n

Instantly ends the match with the specified team as the winner. This action has no effect in free-for-all modes.

\n

Definitions:

\n
    \n
  • Team - The winning team. Can use most Team based Value Syntax for this value.
  • \n
\n

 

\n","\n\nDESTROY ALL EFFECTS\n

Destroys all effect entities created by create effect.

\n

There are no definitions to this action.

\n

 

\n","\n\nDESTROY ALL ICONS\n

Destroys all icon entities created by create icon.

\n

There are no definitions to this action.

\n

 

\n","\n\nDESTROY ALL IN-WORLD TEXT\n

Destroys all in-world text created by the create in-world effect.

\n

There are no definitions to this action.

\n

 

\n","\n\nDESTROY EFFECT\n

Destroys an effect entity that was created by create effect.

\n

Definitions:

\n
    \n
  • Entity - Specifies which effect entity to destroy. This entity may be the last created entity or a variable into which last created entity was earlier stored.
  • \n
\n

 

\n","\n\nDESTROY HUD TEXT\n

Destroys hud text that was created by create hud text.

\n

Definitions:

\n
    \n
  • Text ID - Specifies which hud text to destroy. This ID may be last text ID or a variable into which last text ID was earlier stored.
  • \n
\n

 

\n","\n\nDESTROY ICON\n

Destroys an icon entity that was created by create icon.

\n

Definitions:

\n
    \n
  • Text ID - Specifies which icon to destroy. This ID may be last text ID or a variable into which last create entity was earlier stored.
  • \n
\n

 

\n","\n\nDISABLE BUILT-IN GAME MODE ANNOUNCER\n

Disables game mode announcements from the announcer until reenabled or the match ends.

\n

There are no definitions to this action.

\n

 

\n","\n\nDISABLE BUILT-IN GAME MODE COMPLETION\n

Disables completion of the match from the game mode itself, only allowing the match to be completed by scripting commands.

\n

There are no definitions to this action.

\n

 

\n","\n\nDISABLE BUILT-IN GAME MODE MUSIC\n

Disables all game-mode music until reenabled or the match ends.

\n

There are no definitions to this action.

\n

 

\n","\n\nDISABLE BUILT-IN GAME MODE RESPAWNING\n

Disables automatic respawning for one or more players, only allowing respawning by scripting commands.

\n

Definitions:

\n
    \n
  • Player - The player or players whose respawning is affected. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nDISABLE BUILT-IN GAME MODE SCORING\n

Disables changes to player and team scores from the game mode itself, only allowing scores to be changed by scripting commands.

\n

There are no definitions to this action.

\n

 

\n","\n\nDISABLE DEATH SPECTATE ALL PLAYERS\n

Undoes the effect of the enable death spectate all players action for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose default death spectate behavior is restored. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nDISABLE DEATH SPECTATE TARGET HUD\n

Undoes the effect of the enable death spectate target hud action for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players who will revert to seeing their own HUD while death spectating. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nDISALLOW BUTTON\n

Disables a logical button for one or more players such that pressing it has no effect.

\n

Definitions:

\n
    \n
  • Player - The player executing this rule, as specified by the event. May be the same as the attacker or victim. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nENABLE BUILT-IN GAME MODE ANNOUNCER\n

Undoes the effect of the disable built-in game mode announcer action.

\n

There are no definitions to this action.

\n

 

\n","\n\nENABLE BUILT-IN GAME MODE COMPLETION\n

Undoes the effect of the disable built-in game mode completion action.

\n

There are no definitions to this action.

\n

 

\n","\n\nENABLE BUILT-IN GAME MODE MUSIC\n

Undoes the effect of the disable built-in game mode music action.

\n

There are no definitions to this action.

\n

 

\n","\n\nENABLE BUILT-IN GAME MODE RESPAWNING\n

Undoes the effect of the disable built-in game mode respawning for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose respawning is affected. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nENABLE BUILT-IN GAME MODE SCORING\n

Undoes the effect of the disable built-in game mode scoring action.

\n

There are no definitions to this action.

\n

 

\n","\n\nENABLE DEATH SPECTATE ALL PLAYERS\n

Allows one or more players to spectate all players when dead, as opposed to only allies.

\n

Definitions:

\n
    \n
  • Player - The player or players who will be allowed to spectate all players. Can use most Player based Value Syntax for this value.
    \n 
  • \n
\n","\n\nENABLE DEATH SPECTATE TARGET HUD\n

Allows one or more players to see their targetโ€™s HUD when dead instead of their own while death spectating.

\n

Definitions:

\n
    \n
  • Player - The player or players who will begin seeing their spectateโ€™s targetโ€™s hud while death spectating. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nGO TO ASSEMBLE HEROES\n

Go to the assemble heroes phase of the game mode. Only works if a game is in progress.

\n

There are no definitions to this action.

\n

 

\n","\n\nHEAL\n

Provides an instantaneous heal to one or more players. This heal will not resurrect dead players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose health will be restored. Can use most Player based Value Syntax for this value.
  • \n
  • Healer - The player who will receive credit for the healing. A healer of null indicates no player will receive credit. Can use most Player based Value Syntax for this value.
  • \n
  • Amount - The amount of healing to apply. This amount may be modified by buffs or debuffs, healing is capped by each playerโ€™s max health. Can use most Number based Value Syntax for this value.
  • \n
\n

 

\n","\n\nKILL\n

Instantly kills one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players who will be killed. Can use most Player based Value Syntax for this value.
  • \n
  • Killer - The player who will receive credit for the kill. A killer of null indicates no player will receive credit. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nLOOP\n

Restarts the action list from the beginning. To prevent an infinite loop, a wait action must execute between the start of the action list and this action.

\n

There are no definitions to this action.

\n

 

\n","\n\nLOOP IF\n

Restarts the action list from the beginning if this actionโ€™s condition evaluates to true. If it does not, execution continues with the next action. To prevent an infinite loop, a wait action must execute between the start of the action list and this action.

\n

Definitions:

\n
    \n
  • Condition - Specifies whether the loop will occur. Can use most Conditional based Value Syntax for this value.
  • \n
\n

 

\n","\n\nLOOP IF CONDITION IF FALSE\n

Restarts the action list from the beginning if at least one condition in the condition list is false. If all conditions are true, execution continues with the next action. To prevent an infinite loop, a wait action must execute between the start of the action list and this action.

\n

There are no definitions to this action.

\n

 

\n","\n\nLOOP IF CONDITION IF TRUE\n

Restarts the action list from the beginning if all conditions in the condition list is true. If any are false, execution continues with the next action. To prevent an infinite loop, a wait action must execute between the start of the action list and this action.

\n

There are no definitions to this action.

\n

 

\n","\n\nMODIFY GLOBAL VARIABLE\n

Modifies the value of a global variable, which is a variable that belongs to the game itself.

\n

Definitions:

\n
    \n
  • Variable - Variable specified by a single alphabetic letter (A through Z).
  • \n
  • Operation - The way in which the variableโ€™s value will be changed. Options include standard arithmetic operations as well as array operations for appending and removing values.
  • \n
  • Value - The value used for the modification. For arithmetic operations, this is the second of two operands, with the other being the variableโ€™s existing value. For array operations, this is the value to append or remove. Various Value Syntax can be used.
  • \n
\n

 

\n","\n\nMODIFY GLOBAL VARIABLE AT INDEX\n

Modifies the value of a global variable at an index, which is a variable that belongs to the game itself.

\n

Definitions:

\n
    \n
  • Variable - Variable specified by a single alphabetic letter (A through Z).
  • \n
  • Index - The index of the array to modify. If the index is beyond the end of the array, the array is extended with new elements given a value of 0.
  • \n
  • Operation - The way in which the variableโ€™s value will be changed. Options include standard arithmetic operations as well as array operations for appending and removing values.
  • \n
  • Value - The value used for the modification. For arithmetic operations, this is the second of two operands, with the other being the variableโ€™s existing value. For array operations, this is the value to append or remove. Various Value Syntax can be used.
  • \n
\n

 

\n","\n\nMODIFY PLAYER SCORE\n

Modifies the score (kill count) of one or more players. This action only has an effect in free-for-all modes.

\n

Definitions:

\n
    \n
  • Player - The player whose score will change. Can use most Player based Value Syntax for this value.
  • \n
  • Score - The amount the score will increase or decrease. If positive, the score will increase. If negative, the score will decrease. Can use most Number based Value Syntax for this value.
  • \n
\n

 

\n","\n\nMODIFY PLAYER VARIABLE\n

Modifies the value of a player variable, which is a variable that belongs to a specific player.

\n

Definitions:

\n
    \n
  • Player - The player whose variable will be modified. If multiple players are provided, each of their variables will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Variable - Variable specified by a single alphabetic letter (A through Z).
  • \n
  • Operation - The way in which the variableโ€™s value will be changed. Options include standard arithmetic operations as well as array operations for appending and removing values.
  • \n
  • Value - The value used for the modification. For arithmetic operations, this is the second of two operands, with the other being the variableโ€™s existing value. For array operations, this is the value to append or remove. Various Value Syntax can be used.
  • \n
\n

 

\n","\n\nMODIFY PLAYER VARIABLE AT INDEX\n

Modifies the value of a player variable at an index, which is a variable that belongs to a specific player.

\n

Definitions:

\n
    \n
  • Player - The player whose variable will be modified. If multiple players are provided, each of their variables will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Variable - Variable specified by a single alphabetic letter (A through Z).
  • \n
  • Index - The index of the array to modify. If the index is beyond the end of the array, the array is extended with new elements given a value of 0.
  • \n
  • Operation - The way in which the variableโ€™s value will be changed. Options include standard arithmetic operations as well as array operations for appending and removing values.
  • \n
  • Value - The value used for the modification. For arithmetic operations, this is the second of two operands, with the other being the variableโ€™s existing value. For array operations, this is the value to append or remove. Various Value Syntax can be used.
  • \n
\n

 

\n","\n\nMODIFY TEAM SCORE\n

Modifies the score of one or both teams. This action has not effect in free-for-all modes or modes without a team score.

\n

Definitions:

\n
    \n
  • Team - The team whose score will be changed. Can use most Player based Value Syntax for this value.
  • \n
  • Score - The amount the score will increase or decrease. If positive, the score will increase. If negative, the score will decrease. Can use most Number based Value Syntax for this value.
  • \n
\n

 

\n","\n\nPAUSE MATCH TIME\n

Pauses the match time, players, objective logic, and game mode advancement criteria are unaffected by the pause.

\n

There are no definitions to this action.

\n

 

\n","\n\nPLAY EFFECT\n

Plays an effect at a position in the world. The lifetime of this effect is short, so it does not need to be updated or destroyed.

\n

Definitions:

\n
    \n
  • Visible to - One or more players who will be able to see the effect. Can use most Value Syntax to select one or multiple players.
  • \n
  • Type - The type of the effect to be created.\n
      \n
    • Good Explosion
    • \n
    • Bad Explosion
    • \n
    • Ring Explosion
    • \n
    • Good Pickup Effect
    • \n
    • Bad Pickup Effect
    • \n
    • Debuff Impact Sound
    • \n
    • Buff Impact Sound
    • \n
    • Ring Explosion Sound
    • \n
    • Buff Explosion Sound
    • \n
    • Explosion Sound
    • \n
    \n
  • \n
  • Color - The color of the effect to be created. IF a particular team is chosen, the effect will either be red or blue, depending on whether the team is hostile to the viewer.
  • \n
  • Position - The effectโ€™s position. If this value is a player, then the effect will move along with the player, otherwise, the value is interpreted as a position in the world. Can use most Player or Vector based Value Syntax.
  • \n
  • Radius - The effectโ€™s radius in meters. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nPRELOAD HERO\n

Preemptively loads the specified hero or heroes into memory using the skins of the specified player or players, available memory permitting. Useful whenever rapid hero changing is possible and the next hero is known.

\n

Definitions:

\n
    \n
  • Player - The player or players who will begin preloading a hero or heroes. Only one preload hero action will be active at a time for a given player. Can use most Player based Value Syntax for this value.
  • \n
  • Hero - The hero or heroes to begin preloading for the specified player or players. When multiple heroes are specified in an array, the Heroes towards the beginning of the array are prioritized. Can use most Hero based Value Syntax for this value.
  • \n
\n

 

\n","\n\nPRESS BUTTON\n

Forces one or more players to press a button virtually for a single frame.

\n

Definitions:

\n
    \n
  • Player - The player or players for whom virtual button input will be forced. Can use most Player based Value Syntax for this value.
  • \n
  • Button - The button to be pressed.
  • \n
\n

 

\n","\n\nRESET PLAYER HERO AVAILABILITY\n

Restores the list of heroes available to one or more players to the list specified by the game settings. If a playerโ€™s current hero becomes unavailable, the player is forced to choose a different hero and respawn at an appropriate spawn location.

\n

Definitions:

\n
    \n
  • Player - The player or players whose hero list is being reset. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nRESPAWN\n

Respawns one or more players at an appropriate spawn location with full health, even if they were already alive.

\n

Definitions:

\n
    \n
  • Player - The player or players to respawn. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nRESURRECT\n

Instantly resurrects one or more players at the location they died with no transition.

\n

Definitions:

\n
    \n
  • Player - The player or players who will be resurrected. Can use most Player based Value Syntax for this value.
  • \n
\n

 

\n","\n\nSET ABILITY 1 ENABLED\n

Enables or disables ability 1 for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose access to ability 1 is affected. Can use most Player based Value Syntax for this value.
  • \n
  • Enabled - Specifies whether the player or players are able to use ability 1. Expects a Boolean Value such as True, False, or Compare. Can use most Boolean based Value Syntax.
  • \n
\n

 

\n","\n\nSET ABILITY 2 ENABLED\n

Enables or disables ability 2 for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose access to ability 2 is affected. Expects a Boolean Value such as True, False, or Compare. Can use most Player based Value Syntax for this value.
  • \n
  • Enabled - Specifies whether the player or players are able to use ability 2. Can use most Boolean based Value Syntax.
  • \n
\n

 

\n","\n\nSET AIM SPEED\n

Sets the aim speed of one or more players to a percentage of their normal aim speed.

\n

Definitions:

\n
    \n
  • Player - The player or players whose aim will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Turn Speed Percent - The percentage of normal aim speed to which the player or players will set their aim speed. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSET DAMAGE DEALT\n

Sets the damage dealt to one or more players of a percentage of their raw damage dealt. NOTE: Negative values do not heal enemies. Damage values of 0 or lower will not trigger script events.

\n

Definitions:

\n
    \n
  • Player - The player or players whose damage dealt will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Damage Dealt Percent - The percentage of raw damage dealt to which the player or players will set their damage dealt. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSET DAMAGE RECEIVED\n

Sets the damage received of one or more players to a percentage of their raw damage received. NOTE: Negative values do not heal enemies. Damage values of 0 or lower will not trigger script events.

\n

Definitions:

\n
    \n
  • Player - The player or players whose damage received will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Damage Received Percent - The percentage of raw damage received to which the player or players will set their damage received. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSET FACING\n

Sets the facing of one or more players to the specified direction.

\n

Definitions:

\n
    \n
  • Player - The player or players whose facing will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Direction - The unit direction in which the player or players will face. This value is normalized internally. Can use most Vector based Value Syntax.
    \n*Relative - Specifies direction is relative to world coordinates or the local coordinates of the player or players.
  • \n
\n

 

\n","\n\nSET GLOBAL VARIABLE\n

Stores a value into a global variable, which a variable that belongs to the game itself.

\n

Definitions:

\n
    \n
  • Variable - Specifies which Global Variable to store the value into. Specified by a single alphabetic letter (A through Z).
  • \n
  • Value - The value that will be stored. Nearly any Value syntax can be used, however it is most common with Number based syntax.
  • \n
\n

 

\n","\n\nSET GLOBAL VARIABLE INDEX\n

Finds or creates an array on a global variable, which is a variable that belongs to the game itself, then stores a value in the array at the specified index.

\n

Definitions:

\n
    \n
  • Variable - Specifies which global variableโ€™s value is the array to modify, if the variableโ€™s value is not an array, then its value becomes an empty array. Specified by a single alphabetic letter (A through Z).
  • \n
  • Index - The index of the array to modify. If the index is beyond the end of the array, the array is extended with the new elements given a value of zero. Can use most Number based Value Syntax with this value.
  • \n
  • Value - The value that will be stored into the array. Nearly any Value syntax can be used, however it is most common with Number based syntax.
  • \n
\n

 

\n","\n\nSET GRAVITY\n

Sets the movement gravity for one or more players to a percentage of regular movement gravity.

\n

Definitions:

\n
    \n
  • Player - The player or players whose movement gravity will be set. Can use most Player based Value Syntax with this value.
  • \n
  • Gravity Percent - The percentage of regular movement gravity to which the player or players will set their personal movement gravity. Can use most Number based Value Sytax with this value. 100% is the normal gravity level of the game. Less than that will decrease gravity (allowing higher jumps), higher amounts will result in higher gravity (causing shorter jumps).
  • \n
\n

 

\n","\n\nSET HEALING DEALT\n

Sets the healing dealt to one or more players of a percentage of their raw damage dealt. NOTE: Negative values do not damage enemies. Healing values of 0 or lower will not trigger script events.

\n

Definitions:

\n
    \n
  • Player - The player or players whose healing dealt will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Healing Dealt Percent - The percentage of raw healing dealt to which the player or players will set their healing dealt. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSET HEALING RECEIVED\n

Sets the healing received of one or more players to a percentage of their raw healing received. NOTE: Negative values do not damage enemies. Healing values of 0 or lower will not trigger script events.

\n

Definitions:

\n
    \n
  • Player - The player or players whose healing received will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Healing Received Percent - The percentage of raw healing received to which the player or players will set their healing received. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSET INVISIBLE\n

Causes one or more players to become invisible to either all other players or just enemies.

\n

Definitions:

\n
    \n
  • Player - The player or players who will become invisible. Can use most Player based Value Syntax for this value.
  • \n
  • Invisible to - Specifies for whom the player or players will be invisible. Can be set to All, Enemies, or None.
    \n 
  • \n
\n","\n\nSET MATCH TIME\n

Sets the current match time (which is visible at the top of the screen). This can be used to shorten or extend the duration of a match or to change the duration of assemble heroes or setup.

\n

Definitions:

\n
    \n
  • Time - The match time in seconds. Can use most Number based Value Syntax for this value.
  • \n
\n

 

\n","\n\nSET MAX HEALTH\n

Sets the max health of one or more players as a percentage of their raw max health. This action will ensure that a playerโ€™s current health will not exceed the new max health.

\n

Definitions:

\n
    \n
  • Player - The player or players whose max health will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Health Percent - The percentage of raw max health to which the player or players will set their max health. Can use most Number based Value Syntax for this value.
    \n 
  • \n
\n","\n\nSET MOVE SPEED\n

Sets the move speed of one or more players to a percentage of their raw move speed.

\n

Definitions:

\n
    \n
  • Player - The player or players whose move speed will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Health Percent - The percentage of raw move speed to which the player or players will set their move speed. Can use most Number based Value Syntax for this value.
    \n 
  • \n
\n","\n\nSET OBJECTIVE DESCRIPTION\n

Sets the text at the top center of the screen that normally describes the objective to a message visible to specific players.

\n

Definitions:

\n
    \n
  • Visible to - One or more players who will see the message. Can use most Number based Player Syntax for this value.
  • \n
  • Header - The message to be displayed. Can use most String based Value Syntax for this value.
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continously reevaluated. The message will keep asking for and using new values from reevaluated inputs. Can choose โ€œVisible to and Stringโ€ or โ€œStringโ€
  • \n
\n

 

\n","\n\nSET PLAYER ALLOWED HEROES\n

Sets the list of heroes available to one or more players. If a playerโ€™s current hero becomes unavailable, the player is forced to choose a different hero and respawn at an appropriate spawn location.

\n

Definitions:

\n
    \n
  • Player - The player or players whose hero list is being set. Can use most Player based Value Syntax for this value.
  • \n
  • Hero - The hero or heroes that will be available. If no heroes are provided, the action has no effect. Can use most Hero based Value Syntax for this value including compatible Arrays.
    \n 
  • \n
\n","\n\nSET PLAYER SCORE\n

Sets the score (kill count) of one or more players. This action only has an effect in free-for-all modes.

\n

Definitions:

\n
    \n
  • Player - The player or players whose score will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Score - The score that will be set. Can use most Number based Value Syntax for this value.
    \n 
  • \n
\n","\n\nSET PLAYER VARIABLE\n

Stores a value into a player variable, which is a variable that belongs to a specific player.

\n

Definitions:

\n
    \n
  • Player - The player or players whose variable will be set. If multiple players are provided, each of their variables will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Variable - Specifies which Player Variable to store the value into. Specified by a single alphabetic letter (A through Z).
  • \n
  • Value - The value that will be stored. Nearly any Value syntax can be used, however it is most common with Number based syntax.
  • \n
\n

 

\n","\n\nSET PLAYER VARIABLE AT INDEX\n

Finds or creates an array on a player variable, which is a variable that belongs to a specific player, then stores a value in the array at the specified index.

\n

Definitions:

\n
    \n
  • Player - The player or players whose variable will be set. If multiple players are provided, each of their variables will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Variable - Specifies which player variableโ€™s value is the array to modify, if the variableโ€™s value is not an array, then its value becomes an empty array. Specified by a single alphabetic letter (A through Z).
  • \n
  • Index - The index of the array to modify. If the index is beyond the end of the array, the array is extended with the new elements given a value of zero. Can use most Number based Value Syntax with this value.
  • \n
  • Value - The value that will be stored into the array. Nearly any Value syntax can be used, however it is most common with Number based syntax.
  • \n
\n

 

\n","\n\nSET PRIMARY FIRE ENABLED\n

Enables or disables primary fire for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose access to primary fire is affected. Can use most Player based Value Syntax for this value.
  • \n
  • Enabled - Specifies whether the player or players are able to use primary fire. Expects a Boolean Value such as True, False, or Compare. Can use most Boolean based Value Syntax.
  • \n
\n

 

\n","\n\nSET PROJECTILE GRAVITY\n

Sets the projectile gravity for one or more players to a percentage of regular projectile gravity.

\n

Definitions:

\n
    \n
  • Player - The player or players whose projectile gravity will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Projectile Gravity Percent - The percentage of the regular projectile gravity to which the player or players will set their personal projectile gravity. Can use most Number based Value Syntax for this value.
    \n 
  • \n
\n","\n\nSET PROJECTILE SPEED\n

Sets the projectile speed for one or more players to a percentage of regular projectile speed.

\n

Definitions:

\n
    \n
  • Player - The player or players whose projectile speed will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Projectile Speed Percent - The percentage of the regular projectile speed to which the player or players will set their personal projectile speed. Can use most Number based Value Syntax for this value.
    \n 
  • \n
\n","\n\nSET RESPAWN MAX TIME\n

Sets the duration between death and respawn for one or more players that are already dead when this action is executed, the change takes effect on their next death.

\n

Definitions:

\n
    \n
  • Player - The player or players whose respawn max time will is being defined. Can use most Player based Value Syntax for this value.
  • \n
  • Time - The duration between death and respawn in seconds. Can use most Number based Value Syntax for this value.
    \n 
  • \n
\n","\n\nSET SECONDARY FIRE ENABLED\n

Enables or disables secondary fire for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose access to secondary fire is affected. Can use most Player based Value Syntax for this value.
  • \n
  • Enabled - Specifies whether the player or players are able to use secondary fire. Expects a Boolean Value such as True, False, or Compare. Can use most Boolean based Value Syntax.
  • \n
\n

 

\n","\n\nSET SLOW MOTION\n

Sets the simulation rate for the entire game, including all players, projectiles, effects, and game mode logic.

\n

Definitions:

\n
    \n
  • Speed Percent - The simulation rate as a percentage of normal speed. Only rates up to 100% are allowed. Can use most Number based Value Syntax for this value.
  • \n
\n

 

\n","\n\nSET STATUS\n

Applies a status to one or more players. This status will remain in effect for the specified duration or until it is cleared by the clear status action.

\n

Definitions:

\n
    \n
  • Player - The player or players to whom the status will be applied. Can use most Player based Value Syntax for this value.
  • \n
  • Assister - Specifies a player to be awarded assist credit should the affected player or players be killed while the status is in effect. An assister of null indicates no player will receive credit. Can use most Player based Value Syntax for this value.
  • \n
  • Status - The Status to be applied from the player or players. These behave similarly to statuses applied from hero abilities. Values include Hacked, Burning, Knocked Down, Asleep, Frozen, Unkillable, Invincible, Phased Out, Rooted, or Stunned.
  • \n
  • Duration - The duration of the status effect in seconds. To have a status that lasts until a clear status action is executed, proivide an arbitrarily long duration such as 9999. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSET TEAM SCORE\n

Sets the score for one or both teams. This action has no effect in free-for-all modes or modes without a team score.

\n

Definitions:

\n
    \n
  • Team - The team or teams whose score will be set. Can use most Team based Value Syntax for this value.
  • \n
  • Score - The score that will be set. Can use most Number based Value Syntax for this value.
    \n 
  • \n
\n","\n\nSET ULTIMATE ABILITY ENABLED\n

Enables or disables the ultimate ability of one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose access to their ultimate ability is affected. Can use most Player based Value Syntax for this value.
  • \n
  • Enabled - Specifies whether the player or players are able to use their ultimate ability. Expects a Boolean Value such as True, False, or Compare. Can use most Boolean based Value Syntax.
  • \n
\n

 

\n","\n\nSET ULTIMATE CHARGE\n

Sets the ultimate charge or one or more players as a percentage of maximum charge.

\n

Definitions:

\n
    \n
  • Player - The player or players whose ultimate charge will be set. Can use most Player based Value Syntax for this value.
  • \n
  • Charge Percent - The percentage of maximum charge. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSKIP\n

Skips execution of a certain number of actions in the action list.

\n

Definitions:

\n
    \n
  • Number of actions - The number of action to skip, not including this action. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSKIP IF\n

Skips execution of a certain number of actions in the action list if this actionโ€™s condition evaluates to true. If it does not, execution continues with the next action.

\n

Definitions:

\n
    \n
  • Condition - Specifies whether the loop will occur. Can use most Conditional based Value Syntax for this value.
  • \n
  • Number of actions - The number of action to skip, not including this action. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSMALL MESSAGE\n

Displays a small message beneath the reticle that is visible to specific players.

\n

Definitions:

\n
    \n
  • Visible to - One or more players who will see the message. Can use most Player based Value Syntax.
  • \n
  • Header - The message to be displayed. Can use most String based Value Syntax to specify.
  • \n
\n

 

\n","\n\nSTART ACCELERATING\n

Starts accelerating one or more players in a specified location.

\n

Definitions:

\n
    \n
  • Player - The player or players that will begin accelerating. Can use most Player based Value Syntax.
  • \n
  • Direction - The unit direction in which the acceleration will be applied. This value is normalized internally. Can use most Vector based Value Syntax to specify.
  • \n
  • Rate - The rate of acceleration in meters per second squared. This value may need to be quite high in order to overcome gravity and/or surface friction. Can use most Number based Value Syntax.
  • \n
  • Max Speed - The speed at which acceleration will stop for the player or players. It may not be possible to reach this speed due to gravity and/or surface friction. Can use most Number based Value Syntax.
  • \n
  • Relative - Specifies whether direction is relavtive to the world coordinates or the local coordinates of the player or players.
  • \n
  • Reevaluation - Specifies which of this actions inputs will be continously reevaluated. This action will keep asking for and using new values from reevaluated inputs. You can choose from โ€œDirection, Rate, and Max Speedโ€ or โ€œNoneโ€.
  • \n
\n

 

\n","\n\nSTART CAMERA\n

Places your camera at a location, facing a direction.

\n

Definitions:

\n
    \n
  • Player - The player executing this rule. As specified by the event, may be the same as the attacker or the victim. Can use most Player based Value Syntax.
  • \n
  • Eye Position - The position of the camrea, reevaluates continously. Can use most Vector based Value Syntax to specify.
  • \n
  • Look at position - Where the camera looks at, reevaluates continously. Can use most Vector based Value Syntax to specify.
  • \n
  • Blend Speed - How fast to blend the camera movement as positions change. 0 means do not blend at all and just change positions instantly. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSTART DAMAGE MODIFICATION\n

Starts modifying how much damage one or more receivers will receive from one or more damagers. A reference to this damage modification can be obtained from the last damage modification ID value. This action will fail if too many damage modifications have been started.

\n

Definitions:

\n
    \n
  • Receivers - The player or players whose incoming damage will be modified. Can use most Player based Value Syntax.
  • \n
  • Damagers - The player or players whose outgoing damage will be modified (when attacking the receivers). Can use most Player based Value Syntax.
  • \n
  • Damage Percent - The percentage of damage that will apply to receivers when attacked by damagers. Can use most Number based Value Syntax to specify.
  • \n
  • Reevaluation - Specifies which of this actionโ€™s inputs will be continously reevaluated. This action will keep asking for and using new values from reevaluated inputs. Can choose from โ€œReceivers, Damagers, and Damage Percentโ€, โ€œReceivers and Damagersโ€, or โ€œNoneโ€.
  • \n
\n

 

\n","\n\nSTART DAMAGE OVER TIME\n

Starts an instance of damage over time, this DOT will persist for the specified duration or until stopped by script. To obtain a reference to this DOT, use the last damage over time to value.

\n

Definitions:

\n
    \n
  • Receivers - One or more players who will receive the damage over time. Can use most Player based Value Syntax.
  • \n
  • Damager - The player who will receive credit for the damage. A damager of null indicates no player will receive credit. Can use most Player based Value Syntax.
  • \n
  • Duration - The duration of the damage over time in seconds. To have a DOT that lasts until stopped by script, provide an arbitrarily long duration such as 9999. Can use most Number based Value Syntax to specify.
  • \n
  • Damage Per Second - The damage per second for the damage over time. Can use most Number based Value Syntax to specify.
  • \n
\n

 

\n","\n\nSTART FACING\n

Starts turning one or more players to face the specified direction.

\n

Definitions:

\n
    \n
  • Player - The player or players who will start turning. Can use most Player based Value Syntax.
  • \n
  • Direction - The unit direction in which the player or players will eventually face. Can use most Vector based Value Syntax.
  • \n
  • Turn Rate - The turn rate in degrees per second. Can use most Number based Value Syntax to specify.
  • \n
  • Relative - Specifies whether direction is relative to the world coordinates or the local coordinates of the player or players.
  • \n
  • Reevaluation - Specifies which of this actions inputs will be continously reevaluated. This action will keep asking for and using new values from reevaluated inputs. You can choose from โ€œDirection and Turn Rateโ€ or โ€œNoneโ€.
  • \n
\n

 

\n","\n\nSTART FORCING PLAYER TO BE HERO\n

Starts forcing one or more players to be a specified hero and, if necessary, respawns them immediately in their current locaiton. This will be the only hero available to the player or players until, the stop forcing player to be hero action is executed.

\n

Definitions:

\n
    \n
  • Player - The player or players who will be forced to be a specified hero. Can use most Player based Value Syntax.
  • \n
  • Hero - The hero that the player or players will be forced to be. Can use most Hero based Value Syntax.
  • \n
\n

 

\n","\n\nSTART FORCING SPAWN ROOM\n

Forces a team to spawn in a particular spawn room, regardless of the sapwn room normally used by the game mode. This action only has an effect in Assault, Hybrid, and Payload Maps.

\n

Definitions:

\n
    \n
  • Team - The team whose spawn room will be forced. Can use most Team based Value Syntax.
  • \n
  • Room - The number of the spawn room to be forced. 0 is the first spawn room, 1 is the second, and 2 is the third. If this specified spawn room does not exist. Players will use the normal spawn room. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSTART FORCING THROTTLE\n

Defines minimum and maximum movement input values for one or more players. Possibly forcing or preventing movement.

\n

Definitions:

\n
    \n
  • Player - The player or players whose movement whill be forced or limited. Can use most Player based Value Syntax.
  • \n
  • Min Forward - Sets the minimum run forward amount. 0 allows the player or players to stop while 1 forces full forward movement. Can use most Number based Value Syntax.
  • \n
  • Max Forward - Sets the maximum run forward amount. 0 allows the player or players to stop while 1 forces full forward movement. Can use most Number based Value Syntax.
  • \n
  • Min Backward - Sets the minimum run backward amount. 0 allows the player or players to stop while 1 forces full forward movement. Can use most Number based Value Syntax.
  • \n
  • Max Backward - Sets the maximum run backward amount. 0 allows the player or players to stop while 1 forces full forward movement. Can use most Number based Value Syntax.
  • \n
  • Min Sideways - Sets the minimum run sideways amount. 0 allows the player or players to stop while 1 forces full forward movement. Can use most Number based Value Syntax.
  • \n
  • Max Forward - Sets the maximum run sideways amount. 0 allows the player or players to stop while 1 forces full forward movement. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSTART HEAL OVER TIME\n

Starts an instance of damage over time, this HOT will persist for the specified duration or until stopped by script. To obtain a reference to this HOT, use the last damage over time to value.

\n

Definitions:

\n
    \n
  • Player - One or more players who will receive the heal over time. Can use most Player based Value Syntax.
  • \n
  • Healer - The player who will receive credit for the heal. A damager of null indicates no player will receive credit. Can use most Player based Value Syntax.
  • \n
  • Duration - The duration of the heal over time in seconds. To have a HOT that lasts until stopped by script, provide an arbitrarily long duration such as 9999. Can use most Number based Value Syntax to specify.
  • \n
  • Damage Per Second - The heal per second for the heal over time. Can use most Number based Value Syntax to specify.
  • \n
\n

 

\n","\n\nSTART HOLDING BUTTON\n

Forces one or more players to hold a button virtually until stopped by the stop holding button action.

\n

Definitions:

\n
    \n
  • Player - The player or players who are holding a button virtually. Can use most Player based Value Syntax.
  • \n
  • Button - The logical button that is being held virtually.
  • \n
\n

 

\n","\n\nSTOP ACCELERATING\n

Stops the acceleration started by the start accelerating action for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players who will stop accelerating. Can use most Player based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP ALL DAMAGE MODIFICATIONS\n

Stops the all damage modifications that were started using the start damage modification action.

\n

There are no definitions to this action.

\n

 

\n","\n\nSTOP ALL DAMAGE OVER TIME\n

Stops all damage over time started by the start damage over time or one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose scripted damage over time will stop. Can use most Player based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP ALL HEAL OVER TIME\n

Stops all heal over time started by the start heal over time or one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose scripted heal over time will stop. Can use most Player based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP CAMERA\n

Stops all forced camera positions started by the start camera or one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players whose forced camera positions will stop. Can use most Player based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP CHASING GLOBAL VARIABLE\n

Stops an in-progress chase of a global variable, leaving it at its current value.

\n

Definitions:

\n
    \n
  • Variable - Specifies which global variable to stop modifying. Specified by a single alphabetic letter (A through Z).
  • \n
\n

 

\n","\n\nSTOP CHASING PLAYER VARIABLE\n

Stops an in-progress chase of a player variable, leaving it at its current value.

\n

Definitions:

\n
    \n
  • Player - The player whose variable will stop changing. If multiple players are provided, each of their variables will stop changing. Can use most Player based Value Syntax.
  • \n
  • Variable - Specifies which player variable to stop modifying. Specified by a single alphabetic letter (A through Z).
  • \n
\n

 

\n","\n\nSTOP DAMAGE MODIFICATION\n

Stops a damage modification that was started by the start damage modification action

\n

Definitions:

\n
    \n
  • Damage modification ID - Specifies which damage modification instance to stop, this ID may be the last damage modification ID or a variable into which last damage modification ID was earlier stored. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP DAMAGE OVER TIME\n

Stops an instance of damage over time that was started by the start damage over time action

\n

Definitions:

\n
    \n
  • Damage Over Time ID - Specifies which damage over time instance to stop, this ID may be the last damage over time ID or a variable into which last damage over time ID was earlier stored. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP FACING\n

Stops the turning started by the start facing action for or one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players who will stop turning. Can use most Player based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP FORCING PLAYER TO BE HERO\n

Stops forcing one or more players to be a specified hero. This will not respawn the player or players, but it will restore their availablity the next time they go to select a hero.

\n

Definitions:

\n
    \n
  • Player - The player or players who will no longer be forced to be a specific hero. Can use most Player based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP FORCING SPAWN ROOM\n

Undoes the effect of start forcing spawn room action for the specified team.

\n

Definitions:

\n
    \n
  • Team - The team that will resume using their normal spawn room. Can use most Team based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP FORCING THROTTLE\n

Undoes the effect of start forcing throttle action for one or more players

\n

Definitions:

\n
    \n
  • Player - The player or players whose movement inout will be restored. Can use most Player based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP HEAL OVER TIME\n

Stops an instance of heal over time that was started by the start heal over time action

\n

Definitions:

\n
    \n
  • Heal Over Time ID - Specifies which heal over time instance to stop, this ID may be the last heal over time ID or a variable into which last heal over time ID was earlier stored. Can use most Number based Value Syntax.
  • \n
\n

 

\n","\n\nSTOP HOLDING BUTTON\n

Undoes the effect of the start holding button action for one or more players.

\n

Definitions:

\n
    \n
  • Player - The player or players who are no longer holding a button virtually. Can use most Player based Value Syntax.
  • \n
\n

 

\n","\n\nTELEPORT\n

Teleports one or more players to the specified location.

\n

Definitions:

\n
    \n
  • Player - The player or players to teleport. Can use most Player based Value Syntax.
  • \n
  • Position - The position to which the player or players will teleport. If a player is providedm the position of the player is used. Can use most Vector based Value Syntax.
  • \n
\n

 

\n","\n\nUNPAUSE MATCH TIME\n

Unpauses the match time.

\n

There are no definitions to this action.

\n

 

\n","\n\nWAIT\n

Pauses the execution of the action list, unless the wait is interrupted. The remainder of the actions will execute after the pause.

\n

Definitions:

\n
    \n
  • Time - The duration of the pause. A minimum value of 0.250 seconds is required. Can use most Number based Value Syntax.
  • \n
  • Wait Behavior - Specifies if and how the wait can be interrupted. If the condition list is ignored, the wait will not be interrupted, otherwise, the condition list will determine if and when the action list will abort or restart.
  • \n
\n

 

\n","\n\nABSOLUTE VALUE\n

The absolute value is a measure of how far the number is from zero. If you think of a number line, with zero in the center, all youโ€™re really doing is asking how far away you are from this zero point. For example the Absolute Value of 4 is 4 and the absolute value of -6 is 6.

\n

Definitions:

\n
    \n
  • Value - You can specify any Value Syntax to define the Absolute Value.
  • \n
\n

 

\n","\n\nADD\n

The sum of two numbers or vectors. This value will add the two specified values.

\n

Definitions:

\n
    \n
  • Value - You can specify any Value Syntax to define either addend.
  • \n
\n

 

\n","\n\nALL DEAD PLAYERS\n

An array containing all dead players on a team in a match. A player is defined as being dead when they are eliminated but have not yet respawned back into the game.

\n

Definitions:

\n
    \n
  • Team - You can specify any Team Syntax to define the array.
  • \n
\n

 

\n","\n\nALL HEROES\n

An array of all heroes in Overwatch. Not to be confused with the All Players array

\n

There are no definitions to this value.

\n

 

\n","\n\nALL LIVING PLAYERS\n

An array containing all living players on a team in a match. A player is defined as being alive when they are spawned into the game but have not yet been eliminated since spawning.

\n

Definitions:

\n
    \n
  • Team - You can specify any Team Syntax to define the array.
  • \n
\n

 

\n","\n\nALL PLAYERS\n

An array containing all players on a team in a match.

\n

Definitions:

\n
    \n
  • Team - You can specify any Team Syntax to define the array.
  • \n
\n

 

\n","\n\nALL PLAYERS NOT ON OBJECTIVE\n

An array containing all players occupying neither a payload nor a control point (either on a team or in a match).

\n

Definitions:

\n
    \n
  • Team - You can specify any Team Syntax to define the array.
  • \n
\n

 

\n","\n\nALL PLAYERS ON OBJECTIVE\n

An array containing all players occupying either a payload or a control point (either on a team or in a match).

\n

Definitions:

\n
    \n
  • Team - You can specify any Team Syntax to define the array.
  • \n
\n

 

\n","\n\nALLOWED HEROES\n

The array of heroes from which the specified player is currently allowed to select.

\n

Definitions:

\n
    \n
  • Player - You can specify any Player Syntax to define the array.
  • \n
\n

 

\n","\n\nALTITUDE OF\n

The playerโ€™s current height in meters above a surface. Results in a 0 whenever the place is on a surface.

\n

Definitions:

\n
    \n
  • Player - You can specify any Player Syntax to define the array.
  • \n
\n

 

\n","\n\nAND\n

Whether both of the two inputs are true or equivalent to true.

\n

Definitions:

\n
    \n
  • Value - You can specify any Value Syntax to define both of the required values.
  • \n
\n

 

\n","\n\nANGLE DIFFERENCE\n

The difference between two angles, after the angles are wrapped within +/- 180 of each other, the result is positive if the second angle is greater than the first angle, otherwise the result is zero or negative.

\n

Definitions:

\n
    \n
  • Angle - You can specify any Angle Syntax to define both of the required values.
  • \n
\n

Examples:

\n
    \n
  • (Angle1, Angle2) = result\n
  • \n
  • (5, 100) = 95;
  • \n
  • (5, -100) = -105;
  • \n
  • (5, 190) = -175; Note: 190 converted to -170\n
  • \n
  • (5, -190) = 165; Note: -190 converted to 170\n
  • \n
  • ( 5, 5) = 0;
  • \n
  • (-5, -5) = 0;
    \n 
  • \n
\n","\n\nAPPEND TO ARRAY\n

A copy of an array with one or more values appended to the end.

\n

Definitions:

\n
    \n
  • Array - You must specify the Array Syntax you are adding the value to.
  • \n
  • Value - You must specify the Value Syntax that you are adding to the array.
  • \n
\n

 

\n","\n\nARRAY CONTAINS\n

Whether the specified array contains the specified value.

\n

Definitions:

\n
    \n
  • Array - You must specify the Array Syntax you are comparing the value to.
  • \n
  • Value - You must specify the Value Syntax that you are comparing to the array.
  • \n
\n

 

\n","\n\nARRAY SLICE\n

A copy of the specified array containing only values from a specified index range.

\n

Definitions:

\n
    \n
  • Array - You must specify the Array Syntax you are comparing the value to.
  • \n
  • Start Index - The first index of the range. Can use most Value Syntax to specify with.
  • \n
  • Count - The number of elements in the resulting array. The resulting array will contain fewer elements if the specified range exceeds the bounds of the array. Can use any Number-based Value Syntax to specify with.
  • \n
\n

 

\n","\n\nATTACKER\n

The player that dealt damage for the event currently being processed by this rule. May be the same as the victim or the event player.

\n

There are no definitions to this value.

\n

 

\n","\n\nBACKWARD\n

Shorthand for the direction vector(0, 0, -1) which points backwards.

\n

There are no definitions to this value.

\n

 

\n","\n\nCLOSEST PLAYER TO\n

The player closest to a position, optionally restricted by team.

\n

Definitions:

\n
    \n
  • Center - The position to which to measure proximity. Can use most Value Syntax related to reporting a position in the map.
  • \n
  • Team - You can specify any Team Syntax to restrict which players is reported when defining this value.
  • \n
\n

 

\n","\n\nCOMPARE\n

Whether the comparison of the two inputs is true.

\n

Definitions:

\n
    \n
  • Value - The left hand side of the comparison. This may be any value type if the operation is == or =!, otherwise real numbers are expected. Can use most Value Syntax for the comparison.
  • \n
  • Condition - One of the standard conditions to use for comparison. See the Condition section for details.
  • \n
  • Value - The right hand side of the comparison. This may be any value type if the operation is == or =!, otherwise real numbers are expected. Can use most Value Syntax for the comparison.
  • \n
\n

 

\n","\n\nCONTROL MODE SCORING PERCENTAGE\n

The score percentage for the specified team in the control mode.

\n

Definitions:

\n
    \n
  • Team - You can specify any Team Syntax to define which team reported when defining this value.
  • \n
\n

 

\n","\n\nCONTROL MODE SCORING TEAM\n

The team that is currently accumulating score percentage in control mode Results in all if neither team is accumulating score.

\n

There are no definitions to this value.

\n

 

\n","\n\nCOSINE FROM DEGREES\n

The cosine of a specified angle in degrees. The cosine of the angle is equal to the length of the adjacent side divided by the length of the hypotenuse.

\n

Definitions:

\n
    \n
  • Angle - You can specify any Angle Syntax to define this value.
  • \n
\n

 

\n","\n\nCOSINE FROM RADIANS\n

The cosine of a specified angle in radians. The cosine of the angle is equal to the length of the adjacent side divided by the length of the hypotenuse. A radian is a unit of angle, equal to an angle at the center of a circle whose arc is equal in length to the radius.

\n

Definitions:

\n
    \n
  • Angle - You can specify any Angle Syntax to define this value.
  • \n
\n

 

\n","\n\nCOUNT OF\n

The number of elements in the specified array.

\n

Definitions:

\n
    \n
  • Array - You must specify the Array Syntax you are counting the elements to.
  • \n
\n

 

\n","\n\nCROSS PRODUCT\n

The cross product of the specified values.

\n

Definitions:

\n
    \n
  • Value - You must specify the first Value Syntax to compare to the second.
  • \n
  • Value - You must specify the first Value Syntax to compare to the second.
  • \n
\n

 

\n","\n\nCURRENT ARRAY ELEMENT\n

The current array element being considered. Only meaningful during the evaluation of values such as filtered array and sorted array.

\n

There are no definitions to this value.

\n

 

\n","\n\nDIRECTION FROM ANGLES\n

The unit-length direction vector corresponding to the specified angles.

\n

Definitions:

\n
    \n
  • Horizontal Angle - The horizontal angle in degrees used to construct the resulting vector. Most angle based Value Syntax can be used here.
  • \n
  • Vertical Angle - The vertical angle in degrees used to construct the resulting vector. Most angle based Value Syntax can be used here.
  • \n
\n

 

\n","\n\nDIRECTION TOWARDS\n

The unit-length direction vector from position to another.

\n

Definitions:

\n
    \n
  • Start Pos - The position from which the resulting direction vector will point. Most positional based Value Syntax can be used here.
  • \n
  • End Pos - The position to which the resulting direction vector will point. Most positional based Value Syntax can be used here.
  • \n
\n

 

\n","\n\nDISTANCE BETWEEN\n

The distance between two positions in meters.

\n

Definitions:

\n
    \n
  • Start Pos - One of the two positions used in the distance measurement. Most positional based Value Syntax can be used here.
  • \n
  • End Pos - One of the two positions used in the distance measurement. Most positional based Value Syntax can be used here.
  • \n
\n

 

\n","\n\nDIVIDE\n

The ratio of two numbers or vectors. A vector divided by a number will yield a scaled vector. Division by zero results in zero.

\n

Definitions:

\n
    \n
  • Value - The left-hand operand, may be any value that results in a number or a vector. Any Value Syntax may be used here.
  • \n
  • Value - The right-hand operand, may be any value that results in a number or a vector. Any Value Syntax may be used here.
  • \n
\n

 

\n","\n\nDOT PRODUCT\n

The dot product of the specified values. The dot product tells you what amount of one vector goes in the direction of another.

\n

Definitions:

\n
    \n
  • Value - One of the two vector operands of the dot product. Any positional based Syntax may be used here.
  • \n
  • Value - One of the two vector operands of the dot product. Any positional based Syntax may be used here.
  • \n
\n

 

\n","\n\nDOWN\n

Shorthand for the direction vector(0, -1, 0) which points down.

\n

There are no definitions to this value.

\n

 

\n","\n\nEMPTY ARRAY\n

An array with no elements.

\n

There are no definitions to this value.

\n

 

\n","\n\nENTITY EXISTS\n

Whether the specified player, icon entity, or effect entity still exists. Useful for determining if a player has left the match or an entity has been destroyed.

\n

Definitions:

\n
    \n
  • Entity - The player, icon entity, or effect entity whose existance to check.
  • \n
\n

 

\n","\n\nEVENT PLAYER\n

The player executing the rule, as specified by the event, may be the same as the attacker or victim.

\n

There are no definitions to this value.

\n

 

\n","\n\nFACING DIRECTION OF\n

The unit-length directional vector of a playerโ€™s current facing relative to the world. This value includes both horizontal and vertical facing.

\n

Definitions:

\n
    \n
  • Player - The player whose facing direction to acquire. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nFALSE\n

The Boolean value of false.

\n

There are no definitions to this value.

\n

 

\n","\n\nFARTHEST PLAYER FROM\n

The player farthest to a position, optionally restricted by team.

\n

Definitions:

\n
    \n
  • Center - The position to which to measure proximity. Can use most Value Syntax related to reporting a position in the map.
  • \n
  • Team - You can specify any Team Syntax to restrict which players is reported when defining this value.
  • \n
\n

 

\n","\n\nFILTERED ARRAY\n

A copy of the specified array with any values that do not match the specified condition removed.

\n

Definitions:

\n
    \n
  • Array - The array whose copy will be filtered. Can use most Array Syntax to specify.
  • \n
  • Condition - The condition that is evaluated for each element of the copied array. If the condition is true, the element is kept in the copied array. Use the current array element value to reference the element of the array currently being considered.
  • \n
\n

 

\n","\n\nFIRST OF\n

The value at the started of the specified array. Results in a 0 if the specified array is empty.

\n

Definitions:

\n
    \n
  • Array - The array from which the value is acquired. Can use most Array Syntax to specify.
  • \n
\n

 

\n","\n\nFLAG POSITION\n

The position of a specific teamโ€™s flag in Capture the Flag.

\n

Definitions:

\n
    \n
  • Team - The team whose flag position to acquire.
  • \n
\n

 

\n","\n\nFORWARD\n

Shorthand for the direction vector(0, 0, 1) which points forward.

\n

There are no definitions to this value.

\n

 

\n","\n\nGLOBAL VARIABLE\n

The current value of a global variable, which is a variable which belongs to the custom game itself.

\n

Definitions:

\n
    \n
  • Variable - Variable specified by a single alphabetic letter (A through Z).
  • \n
\n

 

\n","\n\nHAS SPAWNED\n

Whether an entity has spawned in the world. Results in false for players who have not chosen a hero yet.

\n

Definitions:

\n
    \n
  • Entity - The player, icon entity, or effect entity whose presence in world to check.
  • \n
\n

 

\n","\n\nHAS STATUS\n

Whether the specified player has the specified status, either from the set status action or from a non-scripted game mechanic.

\n

Definitions:

\n
    \n
  • Player - The player whose status to check.
  • \n
  • Status - The status to check for. Values include Hacked, Burning, Knocked Down, Asleep, Frozen, Unkillable, Invincible, Phased Out, Rooted, or Stunned.
  • \n
\n

 

\n","\n\nHEALTH\n

The current health of a player including armor and shields.

\n

Definitions:

\n
    \n
  • Player - The player whose health to acquire.
  • \n
\n

 

\n","\n\nHEALTH PERCENT\n

The current health of a player as a percentage including armor and shields.

\n

Definitions:

\n
    \n
  • Player - The player whose health percentage to acquire.
  • \n
\n

 

\n","\n\nHERO\n

A hero constant. Specifies one of the available heroes by name in the game.

\n

Definitions:

\n
    \n
  • Hero - A hero constant. (i.e. Tracer, Reaper, Mercy, Reinhardt. etc.)
  • \n
\n

 

\n","\n\nHERO ICON STRING\n

Converts a hero parameter into a string that shows up as an icon.

\n

Definitions:

\n
    \n
  • Value - The hero that will be converted as an icon.
  • \n
\n

 

\n","\n\nHERO OF\n

The Current Hero of a Player.

\n

Definitions:

\n
    \n
  • Player - The player whose hero to acquire. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nHORIZONTAL ANGLE FROM DIRECTION\n

The horizontal angle in degrees corresponding to the specified direction vector.

\n

Definitions:

\n
    \n
  • Direction - The direction vector from which to acquire a horizontal angle in degrees. The vector is unitized before calculation begins. Can use most Vector based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nHORIZONTAL ANGLE TOWARDS\n

The horizontal angle in degrees from a playerโ€™s current forward direction to the specified position. The result is positive if the position is on the playerโ€™s left, otherwise the result is zero or negative.

\n

Definitions:

\n
    \n
  • Player - The player whose current facing angle begins. Can use most player based Value Syntax to retrieve this value.
  • \n
  • Position - The position in the world in where the angle ends.
  • \n
\n

 

\n","\n\nHORIZONTAL FACING ANGLE OF\n

The directional angle in degrees of a playerโ€™s current facing relative to the world. This value increases as the player rotates to the left (wrapping around at +/- 180).

\n

Definitions:

\n
    \n
  • Player - The player whose facing direction to acquire. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nHORIZONTAL SPEED OF\n

The current horizontal speed of a player in meters per second. This measurement excludes all vertical motion.

\n

Definitions:

\n
    \n
  • Player - The player whose facing direction to acquire. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nINDEX OF ARRAY VALUE\n

The index of a value within an array or -1 if no such value can be found.

\n

Definitions:

\n
    \n
  • Array - The array in which to search for the specified value. Can use most Array based Value Syntax to retrieve this value.
  • \n
  • Value - The value for which to search. Can use most Number based Value Syntax to retrive this value.
  • \n
\n

 

\n","\n\nIS ALIVE\n

Determines whether a player is alive. Returns a Boolean value.

\n

Definitions:

\n
    \n
  • Player - The player whose life to check. Can use most player based Value Syntax to retrive this value.
  • \n
\n

 

\n","\n\nIS ASSEMBLING HEROES\n

Whether the match is currently in its assemble heroes phase.

\n

There are no definitions to this value.

\n

 

\n","\n\nIS BETWEEN ROUNDS\n

Whether the match is between rounds.

\n

There are no definitions to this value.

\n

 

\n","\n\nIS BUTTON HELD\n

Whether a player is holding a specific button.

\n

Definitions:

\n
    \n
  • Player - The player whose button to check. Can use most player based Value Syntax to retrieve this value.
  • \n
  • Button - The button to check. Designed by any action inputs by ability but not directional inputs. (i.e. Primary Fire, Secondary Fire, Ultimate Ability, Jump, Crouch, etc.)
  • \n
\n

 

\n","\n\nIS COMMUNICATING\n

Whether a player is using a specific communication type (such as emote, using a voice line, etc.).

\n

Definitions:

\n
    \n
  • Player - The player whose communication status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
  • Type - The type of communication to consider. The duration of emotes is exact, the duration of voice lines is assumed to be 4 seconds, and all other durations are assumed to be 2 seconds. Any of the four emote slots, four voice lines slots, or any standard communication (Need healing, Ultimate Status, etc.) can be designated.
  • \n
\n

 

\n","\n\nIS COMMUNICATING ANY\n

Whether a player is using any communication type (such as emoting, using a voice line, etc.)

\n

Definitions:

\n
    \n
  • Player - The player whose communication status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS COMMUNICATING ANY EMOTE\n

Whether a player is using a emote.

\n

Definitions:

\n
    \n
  • Player - The player whose emoting status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS COMMUNICATING ANY VOICE LINE\n

Whether a player is using a voice line. (The duration of a voice line is assumed to be 4 seconds.)

\n

Definitions:

\n
    \n
  • Player - The player whose voice line status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS CONTROL MODE POINT LOCKED\n

Whether the point is locked in control mode.

\n

There are no definitions to this value.

\n

 

\n","\n\nIS CROUCHING\n

Whether a player is crouching.

\n

Definitions:

\n
    \n
  • Player - The player whose crouching status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS CTF MODE IN SUDDEN DEATH\n

Whether the current game of capture the flag is in sudden death.

\n

There are no definitions to this value.

\n

 

\n","\n\nIS DEAD\n

Whether a player is dead.

\n

Definitions:

\n
    \n
  • Player - The player whose death to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS FIRING PRIMARY\n

Whether the specified playerโ€™s primary weapon attack is being used.

\n

Definitions:

\n
    \n
  • Player - The player whose primary weapon attack to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS FIRING SECONDARY\n

Whether the specified playerโ€™s secondary weapon attack is being used.

\n

Definitions:

\n
    \n
  • Player - The player whose secondary weapon attack to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS FLAG AT BASE\n

Whether a specific teamโ€™s flag is at its base in capture the flag.

\n

Definitions:

\n
    \n
  • Team - The player whose flag to check. Can use most team based Value Syntax to retrive this value.
  • \n
\n

 

\n","\n\nIS GAME IN PROGRESS\n

Whether the main phase of the match is in progress (during which time combat and scoring are allowed).

\n

There are no definitions to this value.

\n

 

\n","\n\nIS HERO BEING PLAYED\n

Whether a specific hero is being played (either on a team or in the match).

\n

Definitions:

\n
    \n
  • Hero - The hero to check for play. Can use most team based Value Syntax to retrive this value. Any applicable Hero based Value Syntax can be used.
  • \n
  • Team - The team or teams on which to check for the hero being played. Can use most team based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS IN AIR\n

Whether a player is airborne.

\n

Definitions:

\n
    \n
  • Player - The player whose airborne status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS IN LINE OF SIGHT\n

Whether two positions have line of sight with each other.

\n

Definitions:

\n
    \n
  • Start Pos - The start position for the line of sight check. Most positional based Value Syntax can be used here.
  • \n
  • End Pos - The end position for the line of sight check. Most positional based Value Syntax can be used here.
  • \n
  • Barriers - Defines how barriers affect line of sight, when considering whether a barrier belongs to an enemy, the allegiance of the player provided to start pos (if any) is used. Can be set to โ€œBarriers do not block LOSโ€, Enemy barriers block LOS\", and โ€œAll barriers block LOSโ€.
  • \n
\n

 

\n","\n\nIS IN SETUP\n

Whether the match is currently in its setup phase.

\n

There are no definitions to this value.

\n

 

\n","\n\nIS IN SPAWN ROOM\n

Whether a specific player is in the spawn room (and is thus being healed and able to change heroes).

\n

Definitions:

\n
    \n
  • Player - The player whose spawn room status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS IN VIEW ANGLE\n

Whether a location is within view of a player.

\n

Definitions:

\n
    \n
  • Player - The player whose view to use for the check. Can use most player based Value Syntax to retrieve this value.
  • \n
  • Location - The location to test if itโ€™s within view. Most positional based Value Syntax can be used here.
  • \n
  • View Angle - The view angle to compare against in degrees. Can use most angle based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS MATCH COMPLETE\n

Whether the match has finished.

\n

There are no definitions to this value.

\n

 

\n","\n\nIS MOVING\n

Whether a specific player is moving (as defined by having a non-zero constant speed).

\n

Definitions:

\n
    \n
  • Player - The player whose moving status status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS OBJECTIVE COMPLETE\n

Whether the specified objective has been completed Results in false if the game mode is not assault, escort, or assault/escort (hybrid).

\n

Definitions:

\n
    \n
  • Number - The index of the objective to consider, starting at 0 and counting up. Each control point, payload checkpoint, and payload destination has its own index. Can use most number based Value Syntax to retrieve this value. Value must be in the form of an integer (whole number).
  • \n
\n

 

\n","\n\nIS ON GROUND\n

Whether a player is on the ground (or other walkable surface).

\n

Definitions:

\n
    \n
  • Player - The player whose ground status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS ON OBJECTIVE\n

Whether a specific player is currently occupying a payload or capture point.

\n

Definitions:

\n
    \n
  • Player - The player whose objective status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS ON WALL\n

Whether a player is on a wall (climbing or riding).

\n

Definitions:

\n
    \n
  • Player - The player whose wall status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS PORTRAIT ON FIRE\n

Whether a specific playerโ€™s portrait is on fire.

\n

Definitions:

\n
    \n
  • Player - The player whose portrait to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS STANDING\n

Whether a player is standing (defined as both not moving and not in the air).

\n

Definitions:

\n
    \n
  • Player - The player whose standing status to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS TEAM ON DEFENSE\n

Whether the specified team is currently on defense in a standard match.

\n

Definitions:

\n
    \n
  • Team - The team whose role to check. Can use most Team Based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS TEAM ON OFFENSE\n

Whether the specified team is currently on offense in a standard match.

\n

Definitions:

\n
    \n
  • Team - The team whose role to check. Can use most Team Based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS TRUE FOR ALL\n

Whether the specified condition evaluates to true for every value in the specified array.

\n

Definitions:

\n
    \n
  • Array - The array whose values will be considered. Can use most Array Based Value Syntax to retrieve this value.
  • \n
  • Condition - The condition that is evaluated for each element of the specified array, Use the current array element value to reference the element of the array currently being considered. Can use most Comparative based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS TRUE FOR ANY\n

Whether the specified condition evaluates to true for any value in the specified array.

\n

Definitions:

\n
    \n
  • Array - The array whose values will be considered. Can use most Array Based Value Syntax to retrieve this value.
  • \n
  • Condition - The condition that is evaluated for each element of the specified array, Use the current array element value to reference the element of the array currently being considered. Can use most Comparative based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS USING ABILITY 1\n

Whether the specified player is using ability 1.

\n

Definitions:

\n
    \n
  • Player - The player whose ability 1 usage to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS USING ABILITY 2\n

Whether the specified player is using ability 2.

\n

Definitions:

\n
    \n
  • Player - The player whose ability 2 usage to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS USING ULTIMATE\n

Whether the specified player is using an ultimate ability.

\n

Definitions:

\n
    \n
  • Player - The player whose ultimate ability usage to check. Can use most player based Value Syntax to retrieve this value.
  • \n
\n

 

\n","\n\nIS WAITING FOR PLAYERS\n

Whether the match is waiting for players to join before starting.

\n

There are no definitions to this value.

\n

 

\n","\n\nLAST CREATED ENTITY\n

A reference to the last effect or icon entity created by the event player (or created at the global level).

\n

There are no definitions to this value.

\n

 

\n","\n\nLAST DAMAGE OVER TIME ID\n

An ID representing the most recent damage over time action that was executed by the event player (or executed at the global level).

\n

There are no definitions to this value.

\n

 

\n","\n\nLAST HEAL OVER TIME ID\n

An ID representing the most recent heal over time action that was executed by the event player (or executed at the global level).

\n

There are no definitions to this value.

\n

 

\n","\n\nLAST OF\n

The value at the end of the specified array. Results in a 0 if the specified array is empty.

\n

Definitions:

\n
    \n
  • Array - The array from which the value is created. Can use most Array based Value Syntax to provide this data.
  • \n
\n

 

\n","\n\nLAST TEXT ID\n

A reference to the last piece of text created by the event player (or created at the global level) via the create HUD text or create in-world text action.

\n

There are no definitions to this value.

\n

 

\n","\n\nLEFT\n

Shorthand for the directional vector(1, 0, 0), which points to the left.

\n

There are no definitions to this value.

\n

 

\n","\n\nLOCAL VECTOR OF\n

The vector in local coordinates corresponding to the provided vector in world coordinates.

\n

Definitions:

\n
    \n
  • World Vector - The vector in world coordinates that will be converted to local coordinates. Can use most Vector based Value Syntax to provide this data.
  • \n
  • Relative player - The player to whom the resulting vector will be relative. Can use most Player based Value Syntax to provide this data.
  • \n
  • Transformation - Specifies whether the vector should receive a rotation and a translation (usually applied to positions) or only a rotation (usually applied to directions and velocities). You can choose from Rotation or Rotation and Translation. Rotation is that the resulting vector will be rotated to the new frame of reference. Use this option when the provided vector is in a direction or velocity. Rotation and translation is that the resulting vector will be rotated and translated to the new frame of reference. Use this option when the provided vector is a position.
  • \n
\n

 

\n","\n\nMATCH ROUND\n

The current round of the match, counting up from 1. This will return a numerical value

\n

There are no definitions to this value.

\n

 

\n","\n\nMATCH TIME\n

The amount of time in seconds remaining in the current game mode phase. This will return a numerical value.

\n

There are no definitions to this value.

\n

 

\n","\n\nMAX\n

The greater of the two numbers. This will return a numerical value of two number values compared.

\n

Definitions:

\n
    \n
  • Value - The left-hand operand. May be any value that results in a number. Can use any Number based Value syntax to compare with.
  • \n
  • Value - The right-hand operand. May be any value that results in a number. Can use any Number based Value syntax to compare with.
  • \n
\n

 

\n","\n\nMAX HEALTH\n

The max health of a player, including armor and shields.

\n

Definitions:

\n
    \n
  • Player - The player whose max health to compare. Can use any Player based Value syntax to provide with.
  • \n
\n

 

\n","\n\nMIN\n

The lesser of the two numbers. This will return a numerical value of two number values compared.

\n

Definitions:

\n
    \n
  • Value - The left-hand operand. May be any value that results in a number. Can use any Number based Value syntax to compare with.
  • \n
  • Value - The right-hand operand. May be any value that results in a number. Can use any Number based Value syntax to compare with.
  • \n
\n

 

\n","\n\nMODULO\n

The remainder of the left-hand operand divided by the right-hand operand. Any number modulo zero will result in zero. This will return a numerical value of two number values compared. For example 7 divided by 2 will result in 1 for the Modulo.

\n

Definitions:

\n
    \n
  • Value - The left-hand operand. May be any value that results in a number. Can use any Number based Value syntax.
  • \n
  • Value - The right-hand operand. May be any value that results in a number. Can use any Number based Value syntax.
  • \n
\n

 

\n","\n\nMULTIPLY\n

The product of two numbers or vectors. A vector multiplied by a number will yield a scaled vector.

\n

Definitions:

\n
    \n
  • Value - The left-hand operand. May be any value that results in a number or a vector. Can use any Number based or Vector based Value syntax to multiply with.
  • \n
  • Value - The left-hand operand. May be any value that results in a number or a vector. Can use any Number based or Vector based Value syntax to multiply with.
    \n 
  • \n
\n","\n\nNEAREST WALKABLE POSITION\n

The position closest to the specified position that can be stood on and is accessible from a spawn point.

\n

Definitions:

\n
    \n
  • Position - The position from which to search for the nearest walkable position. Can use any Vector based Value syntax to divide with.
  • \n
\n

 

\n","\n\nNORMALIZE\n

The unit-length normalization of a vector.

\n

Definitions:

\n
    \n
  • Vector - The vector to normalize. Can use any Vector based Value syntax to divide with.
  • \n
\n

 

\n","\n\nNOT\n

Whether the input is false (or the equivalent to false)

\n

Definitions:

\n
    \n
  • Value - When this input is false (or equivalent to false), then the not value is true. Otherwise, the not value is false. Can use most Boolean-based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNULL\n

The absence of a player, used when no player is desired for a particular input, equivalent to the real number 0 for the purposes of comparison and debugging.

\n

There are no definitions to this value.

\n

 

\n","\n\nNUMBER\n

A real number constant.

\n

Definitions:

\n
    \n
  • Number - A real number constant. Can use most Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNUMBER OF DEAD PLAYERS\n

The number of dead players on a team or in the match.

\n

Definitions:

\n
    \n
  • Team - The team or teams on which to count players. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNUMBER OF DEATHS\n

The number of deaths a specific player has earned. This value only accumulates while a game is in progress.

\n

Definitions:

\n
    \n
  • Player - The player whose death count to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNUMBER OF ELIMINATIONS\n

The number of eliminations a specific player has earned. This value only accumulates while a game is in progress.

\n

Definitions:

\n
    \n
  • Player - The player whose elimination count to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNUMBER OF FINAL BLOWS\n

The number of final blows a specific player has earned. This value only accumulates while a game is in progress.

\n

Definitions:

\n
    \n
  • Player - The player whose final blow count to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNUMBER OF HEROES\n

The number of players playing a specific hero on a team or in the match.

\n

Definitions:

\n
    \n
  • Hero - The hero to check for play. Can use most Hero based Value Syntax to provide this value.
  • \n
  • Team - The team or teams on which to check for the hero being played. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNUMBER OF LIVING PLAYERS\n

The number of living players on a team or in the match.

\n

Definitions:

\n
    \n
  • Team - The team or teams on which to count players. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNUMBER OF PLAYERS\n

The number of players on a team or in the match.

\n

Definitions:

\n
    \n
  • Team - The team or teams on which to count players. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nNUMBER OF PLAYERS ON OBJECTIVE\n

The number of players occupying a payload or a control point (either on a team or in the match).

\n

Definitions:

\n
    \n
  • Team - The team or teams on which to count players. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nOBJECTIVE INDEX\n

The control point, payload checkpoint, or payload destination currently active (either 0, 1, or 2). Valid in Assault, Assault/Escort (Hybrid), Escort, and Control.

\n

There are no definitions to this value.

\n

 

\n","\n\nOBJECTIVE POSITION\n

The position in the world of the specified objective (either a control point, a payload checkpoint, or a payload destination) Valid in Assault, Assault/Escort (Hybrid), Escort, and Control.

\n

Definitions:

\n
    \n
  • Number - The index of the objective to consider, starting at 0 and counting up. Each control point, payload checkpoint, and payload destination as its own index. Can use most Number based Value Syntax to provide this value, but must output in a integer of 0, 1, or 2.
  • \n
\n

 

\n","\n\nOPPOSITE TEAM OF\n

The team opposite the specified team.

\n

Definitions:

\n
    \n
  • Team - The team whose opposite to acquire. If all, the result will be all. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nOR\n

Whether either of the two inputs are true (or equivalent to true).

\n

Definitions:

\n
    \n
  • Value - One of the two inputs considered. If either one is true (or equivalent to true), then the OR value is true. Can use most Boolean based Value Syntax to provide this value.
  • \n
  • Value - One of the two inputs considered. If either one is true (or equivalent to true), then the OR value is true. Can use most Boolean based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nPAYLOAD POSITION\n

The position in the world of the active payload.

\n

There are no definitions to this value.

\n

 

\n","\n\nPAYLOAD PROGRESS PERCENTAGE\n

The current progress towards the destination for the active payload (expressed as a percentage).

\n

There are no definitions to this value.

\n

 

\n","\n\nPLAYER CARRYING FLAG\n

The player carrying a particular teamโ€™s flag in capture the flag. Results in null if no player is carrying the flag.

\n

Definitions:

\n
    \n
  • Team - The team whose whose flag to check. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nPLAYER CLOSEST TO RETICLE\n

The player closest to the reticle of the specified player, optionally restricted by team.

\n

Definitions:

\n
    \n
  • Player - The player from whose reticle to search for the closest player. Can use most Player based Value Syntax to provide this value.
  • \n
  • Team - The team or teams on which to search for the closest player. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nPLAYER VARIABLE\n

The current value of a player variable, which is a variable that belongs to a specific player.

\n

Definitions:

\n
    \n
  • Player - The player whose variable to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
  • Variable - Variable specified by a single alphabetic letter (A through Z).
  • \n
\n

 

\n","\n\nPLAYERS IN SLOT\n

The player or array of players who occupy a specific slot in the game.

\n

Definitions:

\n
    \n
  • Slot - The slot number from each to acquire a player or players. In team games, each team has slots 0 through 5. In free-for-all games, slots are numbered 0 through 11. Can use most Number based Value Syntax to provide this value.
  • \n
  • Team - The team or teams from which to acquire a player or players. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nPLAYERS IN VIEW ANGLE\n

The players who are within a specific view angle of a specific playerโ€™s reticle, optionally restricted by team.

\n

Definitions:

\n
    \n
  • Player - The player whose view to use for the check. Can use most Player based Value Syntax to provide this value.
  • \n
  • Team - The team or teams on which to consider players. Can use most Team based Value Syntax to provide this value.
  • \n
  • View Angle - The view angle to compare against in degrees. Can use most Angle based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nPLAYERS ON HERO\n

The array of players playing a specific hero on a team or in the match.

\n

Definitions:

\n
    \n
  • Hero - The hero to check for play. Can use most Hero based Value Syntax to provide this value.
  • \n
  • Team - The team or teams on which to check for the hero being played. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nPLAYERS WITHIN RADIUS\n

An array containing all players within a certain distance of a position, optionally restricted by team and line of sight.

\n

Definitions:

\n
    \n
  • Center - The center position from which to measure distance. Can use most Vector based Value Syntax to provide this value.
  • \n
  • Radius - The radius in meters inside which players must be in order to be included in the resulting array. Can use most Number based Value Syntax to provide this value.
  • \n
  • Team - The team or teams to which a player must belong to be included in the resulting array. Can use most Team based Value Syntax to provide this value.
  • \n
  • LOS Check - Specifies whether and how a player must pass a line-of-sight check to be included in the resulting array. You can choose from Off, Surfaces, Surfaces and Enemy Barriers, and Surfaces and All Barriers. Off will result in the line of sight is never blocked, allowing results through walls. Surfaces will result in line of sight is blocked by ceilings, walls, floors, platforms, and any fixed object that blocks projectiles. Surfaces and Enemy Barriers will result in line of sight is blocked by ceilings, walls, floors, platforms, any fixed object that blocks projectiles, and barriers created by the enemy team. Surfaces and All Barriers will result in line of sight is blocked by ceilings, walls, floors, platforms, any fixed object that blocks projectiles, and all barriers.
  • \n
\n

 

\n","\n\nPOINT CAPTURE PERCENTAGE\n

The current progress towards capture for the active control point (expressed as a percentage).

\n

There are no definitions to this value.

\n

 

\n","\n\nPOSITION OF\n

The current position of a player as a vector.

\n

Definitions:

\n
    \n
  • Player - The player whose position to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRAISE TO POWER\n

The left-hand operand raised to the power of the right-hand operand. For example 2 ^ 3 = 8

\n

Definitions:

\n
    \n
  • Value - The left-hand operand. May be any value that results in a number. Can use most Number based Value Syntax to provide this value.
  • \n
  • Value - The right-hand operand. May be any value that results in a number. Can use most Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRANDOM INTEGER\n

A random integer between the specified min and max, inclusive.

\n

Definitions:

\n
    \n
  • MIN - The smallest integer allowed. If a real number is provided to this input, it is rounded to the nearest integer. Can use most Number based Value Syntax to provide this value.
  • \n
  • MAX - The largest integer allowed. If a real number is provided to this input, it is rounded to the nearest integer. Can use most Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRANDOM REAL\n

A random real number between the specified min and max.

\n

Definitions:

\n
    \n
  • MIN - The smallest real number allowed. Can use most Number based Value Syntax to provide this value.
  • \n
  • MAX - The largest real number allowed. Can use most Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRANDOM VALUE IN ARRAY\n

A random value from the specified array.

\n

Definitions:

\n
    \n
  • Array - The array from which to randomly take a value. If a non-array value is provided, the result is simply the provided value. Can use most Array based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRANDOMIZED ARRAY\n

A copy of the specified array with the values in a random order

\n

Definitions:

\n
    \n
  • Array - The array whose copy will be randomized. Can use most Array based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRAY CAST HIT NORMAL - New!\n

The surface normal at the ray cast hit position (or from end pos to start pos if no hit occurs).

\n

Definitions:

\n
    \n
  • Start POS - The start position for the ray cast. If a player is provided. A position 2 meters above the playerโ€™s feet is used. Can use most Vector based Value Syntax to provide this value.
  • \n
  • End POS - The end position for the ray cast. If a player is provided. A position 2 meters above the playerโ€™s feet is used. Can use most Vector based Value Syntax to provide this value.
  • \n
  • Players to include - Which players can be hit by this ray cast. Can use most Player based Value Syntax to provide this value.
  • \n
  • Players to exclude - Which players cannot be hit by this ray cast. This list takes precedence over players to include. Can use most Player based Value Syntax to provide this value.
  • \n
  • Include player owned objects - Whether player owned objects (such as barriers or turrets) should be included in the ray cast. Can use most Boolean based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRAY CAST HIT PLAYER - New!\n

The player hit by the ray cast (or null if no player is hit).

\n

Definitions:

\n
    \n
  • Start POS - The start position for the ray cast. If a player is provided. A position 2 meters above the playerโ€™s feet is used. Can use most Vector based Value Syntax to provide this value.
  • \n
  • End POS - The end position for the ray cast. If a player is provided. A position 2 meters above the playerโ€™s feet is used. Can use most Vector based Value Syntax to provide this value.
  • \n
  • Players to include - Which players can be hit by this ray cast. Can use most Player based Value Syntax to provide this value.
  • \n
  • Players to exclude - Which players cannot be hit by this ray cast. This list takes precedence over players to include. Can use most Player based Value Syntax to provide this value.
  • \n
  • Include player owned objects - Whether player owned objects (such as barriers or turrets) should be included in the ray cast. Can use most Boolean based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRAY CAST HIT POSITION - New!\n

The position where the ray cast hits a surface, object, or player (or the end POS if no hit occurs).

\n

Definitions:

\n
    \n
  • Start POS - The start position for the ray cast. If a player is provided. A position 2 meters above the playerโ€™s feet is used. Can use most Vector based Value Syntax to provide this value.
  • \n
  • End POS - The end position for the ray cast. If a player is provided. A position 2 meters above the playerโ€™s feet is used. Can use most Vector based Value Syntax to provide this value.
  • \n
  • Players to include - Which players can be hit by this ray cast. Can use most Player based Value Syntax to provide this value.
  • \n
  • Players to exclude - Which players cannot be hit by this ray cast. This list takes precedence over players to include. Can use most Player based Value Syntax to provide this value.
  • \n
  • Include player owned objects - Whether player owned objects (such as barriers or turrets) should be included in the ray cast. Can use most Boolean based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nREMOVE FROM ARRAY\n

A copy of an array with one or more values removed (if found).

\n

Definitions:

\n
    \n
  • Array - The array from which to remove values. Can use most Array based Value Syntax to provide this value.
  • \n
  • Value - The value to remove from the array (if found), if this value itself an array, each matching element is removed. Can use most Array based or Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nRIGHT\n

Shorthand for the directional vector (-1, 0, 0), which points to the right.

\n

There are no definitions to this value.

\n

 

\n","\n\nROUND TO INTEGER\n

The integer to which the specified value rounds.

\n

Definitions:

\n
    \n
  • Value - The real number to round. Can use most Number based Value Syntax to provide this value.
  • \n
  • Rounding Type - Determines the direction in which the value will be rounded. You can round up, down, or to the nearest integer.
    \n 
  • \n
\n","\n\nSCORE OF\n

The current score of a player. Results in 0 if the game mode is not free-for-all.

\n

Definitions:

\n
    \n
  • Player - The player whose score to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nSINE FROM DEGREES\n

Sine of the specified angle in degrees. The sine is the ratio of the length of the side that is opposite that angle to the length of the longest side of the triangle (the hypotenuse).

\n

Definitions:

\n
    \n
  • Angle - Angle in degrees. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nSINE FROM RADIANS\n

Sine of the specified angle in radians. The sine is the ratio of the length of the side that is opposite that angle to the length of the longest side of the triangle (the hypotenuse). A radian is a unit of angle, equal to an angle at the center of a circle whose arc is equal in length to the radius.

\n

Definitions:

\n
    \n
  • Angle - Angle in radians. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nSLOT OF\n

The slot number of the specified player. In team games, each team has slots 0 through 5. In free-for-all games, slots are numbers 0 through 11.

\n

Definitions:

\n
    \n
  • Player - The player whose slot number to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nSORTED ARRAY\n

A copy of the specified array with the values sorted according to the value rank that is evaluated for each element.

\n

Definitions:

\n
    \n
  • Array - The array whose copy will be sorted. Can use most Array based Value Syntax to provide this value.
  • \n
  • Value Rank - The value that is evaluated for each element of the copied array. The array is sorted by this rank in ascending order. Use the current array element value to reference the element of the array currently being considered. Can use most Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nSPEED OF\n

The current speed of a player in meters per second.

\n

Definitions:

\n
    \n
  • Player - The player whose speed to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nSPEED OF IN DIRECTION\n

The current speed of a player in a specific direction in meters per second.

\n

Definitions:

\n
    \n
  • Player - The player whose speed to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
  • Direction - The direction of travel in which to measure the playerโ€™s speed. Can use most Vector based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nSQUARE ROOT\n

The square root of the specified value. For example the square root of 9 is 3.

\n

Definitions:

\n
    \n
  • Value - The real number value whose square root will be computed. Negative values result in zero. Can use most Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nSTRING\n

Text formed from a selection of strings and specified values.

\n

Definitions:

\n
    \n
  • String - How the string will be structured using a series of text and phrases.
  • \n
  • {0} - The first value in the string.
  • \n
  • {1} - The second value in the string.
  • \n
  • {2} - The third value in the string.
  • \n
\n

 

\n","\n\nSUBTRACT\n

The difference between two numbers or vectors.

\n

Definitions:

\n
    \n
  • Value - The left-hand operand. May be any value that results in a number or a vector. Can use most Number based Value Syntax to provide this value.
  • \n
  • Value - The right-hand operand. May be any value that results in a number or a vector. Can use most Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nTEAM\n

A team constant. The all option represents both teams in a team or all players in a free-for-all game.

\n

Definitions:

\n
    \n
  • Team - Specifies which team the value outputs to. This can be set to All, Team 1, or Team 2.
  • \n
\n

 

\n","\n\nTEAM OF\n

The team of a player. If the game mode is free-for-all, the team is considered to be all.

\n

Definitions:

\n
    \n
  • Player - The player whose team to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nTEAM SCORE\n

The current score for the specified team. Results in a 0 in free-for-all game modes.

\n

Definitions:

\n
    \n
  • Team - The team whose score to acquire. Can use most Team based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nTHROTTLE OF\n

The directional input of a player, represented by a vector with a horizontal input on the X component (positive to the left) and vertical input on the Z component (positive upward).

\n

Definitions:

\n
    \n
  • Player - The player whose directional input to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nTOTAL TIME PLAYED\n

The total time in seconds that have elapsed since the game instance was created (including setup time and transitions).

\n

There are no definitions to this value.

\n

 

\n","\n\nTRUE\n

The Boolean value of true.

\n

There are no definitions to this value.

\n

 

\n","\n\nULTIMATE CHARGE PERCENT\n

The current ultimate ability charge percentage of a player.

\n

Definitions:

\n
    \n
  • Player - The player whose ultimate charge percentage to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nUP\n

Shorthand for the directional vector(0, 1, 0). Which points upward.

\n

There are no definitions to this value.

\n

 

\n","\n\nVALUE IN ARRAY\n

The value found at a specific element of an array. Results in a 0 if the element does not exist.

\n

Definitions:

\n
    \n
  • Array - The array whose element to acquire. Can use most Array based Value Syntax to provide this value.
  • \n
  • Index - The index whose element to acquire. Can use most Number based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nVECTOR\n

A vector composed of three real numbers (X, Y, Z) where X is left, Y is Up, and Z is forward. Vectors are used for position, direction, and velocity.

\n

Definitions:

\n
    \n
  • X - The X value of the Vector. Can use most Number based Value Syntax to provide this value.
  • \n
  • Y - The Y value of the vector. Can use most Number based Value Syntax to provide this value.
  • \n
  • Z - The Z value of the Vector. Can use most Number based Value Syntax to provide this value.
  • \n
\n

\"Live Live Capture Button:
\nIf you are using this value to populate for another value in a condition or action, you can click the live capture button to collect the current position your hero or spectator ghost in the game environment.

\n

 

\n","\n\nVECTOR TOWARDS\n

The displacement vector from one position to another.

\n

Definitions:

\n
    \n
  • Start Pos - The start position for the line of sight check. Most positional based Value Syntax can be used here.
  • \n
  • End Pos - The end position for the line of sight check. Most positional based Value Syntax can be used here.
  • \n
\n

 

\n","\n\nVELOCITY OF\n

The current velocity of a player as a vector. If the player is on a surface, the Y component of this velocity will be 0m even when traveling up or down a slope.

\n

Definitions:

\n
    \n
  • Player - The player whose velocity to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nVERTICAL ANGLE FROM DIRECTION\n

The vertical angle in degrees corresponding to the specified direction vector.

\n

Definitions:

\n
    \n
  • Direction - The direction vector from which to acquire a vertical angle in degrees. The vector is unitized before calculations begins. Can use most Vector based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nVERTICAL ANGLE TOWARDS\n

The vertical angle in degrees from a playerโ€™s current forward direction to the specified position. The result is positive if the position is below the player. Otherwise, the result is zero or negative.

\n

Definitions:

\n
    \n
  • Position - The player whose current facing the angle begins. Can use most Player based Value Syntax to provide this value.
  • \n
  • Position - The direction vector from which to acquire a vertical angle in degrees. The vector is unitized before calculations begins. Can use most Vector based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nVERTICAL FACING ANGLE OF\n

The vertical angle in degrees, of a playerโ€™s current facing relative to the world. This value increases as the player looks down.

\n

Definitions:

\n
    \n
  • Player - The player whose vertical facing angle to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nVERTICAL SPEED OF\n

The current vertical speed of a player in meters per second. This measurement excludes all horizontal motion, including motion while traveling up and down slopes.

\n

Definitions:

\n
    \n
  • Player - The player whose vertical speed to acquire. Can use most Player based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nVICTIM\n

The player that received damage for the event currently being processed by this rule. May be the same as the attacker or the event player.

\n

There are no definitions to this value.

\n

 

\n","\n\nWORLD VECTOR OF\n

The vector in the world coordinates corresponding to the provided vector in local coordinates.

\n

Definitions:

\n
    \n
  • Local vector - The vector in local coordinates that will be converted to world coordinates. Can use most Vector based Value Syntax to provide this value.
  • \n
  • Relative Player - The player to whom the local vector is relative. Can use most Player based Value Syntax to provide this value.
  • \n
  • Local vector - Specifies whether the vector should receive a rotation and a translation (usually applied to positions) or only a rotation (usually applied to directions and velocities). Can select rotation or rotation and translation.
  • \n
\n

 

\n","\n\nX COMPONENT OF\n

The X Component of the specified Vector, usually representing a leftward amount.

\n

Definitions:

\n
    \n
  • Value - The vector from which to acquire the X component. Can use most Vector based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nY COMPONENT OF\n

The Y Component of the specified Vector, usually representing a upward amount.

\n

Definitions:

\n
    \n
  • Value - The vector from which to acquire the Y component. Can use most Vector based Value Syntax to provide this value.
  • \n
\n

 

\n","\n\nZ COMPONENT OF\n

The Z Component of the specified Vector, usually representing a forward amount.

\n

Definitions:

\n
    \n
  • Value - The vector from which to acquire the Z component. Can use most Vector based Value Syntax to provide this value.
  • \n
\n

 

\n"] \ No newline at end of file diff --git a/bin/core/language/parse/eng/value_stage2.json b/bin/core/language/parse/eng/value_stage2.json new file mode 100644 index 0000000..66878c0 --- /dev/null +++ b/bin/core/language/parse/eng/value_stage2.json @@ -0,0 +1,5512 @@ +[ + { + "name": "ONGOING - GLOBAL", + "contexts": [ + "The ONGOING - GLOBAL event attribute will", + "affect all entities in the game environment." + ], + "definitions": [] + }, + { + "name": "ONGOING - EACH PLAYER", + "contexts": [ + "The ONGOING - EACH PLAYER event attribute", + "will affect the specified players in the", + "game environment." + ], + "definitions": [ + [ + "ALL - This event will affect both teams.", + "TEAM 1 - This event will affect team 1 (blue/defense)", + "TEAM 2 - This event will affect team 2 (red/attack)" + ], + [ + "ALL - This event will affect all players", + "regardless of team, slot position, or hero", + "selected.", + "SLOT # (0-11) - This event affect the slot", + "assignment of that specific player in the", + "order of the Lobby (see diagram below)", + "{HERO NAME} - This event affects any players", + "using the specified hero." + ] + ] + }, + { + "name": "PLAYER EARNED ELIMINATION", + "contexts": [ + "The PLAYER EARNED ELIMINATION event attribute", + "will affect the specified players who successfully", + "score an elimination in the game environment." + ], + "definitions": [ + [ + "ALL - This event will affect both teams.", + "TEAM 1 - This event will affect team 1 (blue/defense)", + "TEAM 2 - This event will affect team 2 (red/attack)" + ], + [ + "ALL - This event will affect all players", + "regardless of team, slot position, or hero", + "selected.", + "SLOT # (0-11) - This event affect the slot", + "assignment of that specific player in the", + "order of the Lobby (see diagram below)", + "{HERO NAME} - This event affects any players", + "using the specified hero." + ] + ] + }, + { + "name": "PLAYER DEALT FINAL BLOW", + "contexts": [ + "The PLAYER DEALT FINAL BLOW event attribute", + "will affect the specified players who successfully", + "dealt the lethal damage against another", + "player in the game environment." + ], + "definitions": [ + [ + "ALL - This event will affect both teams.", + "TEAM 1 - This event will affect team 1 (blue/defense)", + "TEAM 2 - This event will affect team 2 (red/attack)" + ], + [ + "ALL - This event will affect all players", + "regardless of team, slot position, or hero", + "selected.", + "SLOT # (0-11) - This event affect the slot", + "assignment of that specific player in the", + "order of the Lobby (see diagram below)", + "{HERO NAME} - This event affects any players", + "using the specified hero." + ] + ] + }, + { + "name": "PLAYER DEALT DAMAGE", + "contexts": [ + "The PLAYER DEALT DAMAGE event attribute", + "will affect the specified players who successfully", + "dealt damage against another player in the", + "game environment." + ], + "definitions": [ + [ + "ALL - This event will affect both teams.", + "TEAM 1 - This event will affect team 1 (blue/defense)", + "TEAM 2 - This event will affect team 2 (red/attack)" + ], + [ + "ALL - This event will affect all players", + "regardless of team, slot position, or hero", + "selected.", + "SLOT # (0-11) - This event affect the slot", + "assignment of that specific player in the", + "order of the Lobby (see diagram below)", + "{HERO NAME} - This event affects any players", + "using the specified hero." + ] + ] + }, + { + "name": "PLAYER TOOK DAMAGE", + "contexts": [ + "The PLAYER TOOK DAMAGE event attribute will", + "affect the specified players who received", + "damage in the game environment." + ], + "definitions": [ + [ + "ALL - This event will affect both teams.", + "TEAM 1 - This event will affect team 1 (blue/defense)", + "TEAM 2 - This event will affect team 2 (red/attack)" + ], + [ + "ALL - This event will affect all players", + "regardless of team, slot position, or hero", + "selected.", + "SLOT # (0-11) - This event affect the slot", + "assignment of that specific player in the", + "order of the Lobby (see diagram below)", + "{HERO NAME} - This event affects any players", + "using the specified hero." + ] + ] + }, + { + "name": "PLAYER DIED", + "contexts": [ + "The PLAYER DIED event attribute will affect", + "the specified players who died in the game environment." + ], + "definitions": [ + [ + "ALL - This event will affect both teams.", + "TEAM 1 - This event will affect team 1 (blue/defense)", + "TEAM 2 - This event will affect team 2 (red/attack)" + ], + [ + "ALL - This event will affect all players", + "regardless of team, slot position, or hero", + "selected.", + "SLOT # (0-11) - This event affect the slot", + "assignment of that specific player in the", + "order of the Lobby (see diagram below)", + "{HERO NAME} - This event affects any players", + "using the specified hero." + ] + ] + }, + { + "name": "ABORT", + "contexts": [ + "Stops execution of the action list." + ], + "definitions": [] + }, + { + "name": "ABORT IF", + "contexts": [ + "Stops execution of the action list if the", + "actionโ€™s condition evaluates to true, if", + "it does not, the execution continues with", + "the next action." + ], + "definitions": [ + [ + "Condition - Specifies whether the execution", + "is stopped. Can use most Boolean based Value Syntax." + ] + ] + }, + { + "name": "ABORT IF CONDITION IS FALSE", + "contexts": [ + "Stops execution of the action list if at", + "least one condition in the condition list", + "is false. If all conditions are true, execution", + "continues with the next action." + ], + "definitions": [] + }, + { + "name": "ABORT IF CONDITION IS TRUE", + "contexts": [ + "Stops execution of the action list if all", + "conditions in the condition list is true.", + "If any are false, execution continues with", + "the next action." + ], + "definitions": [] + }, + { + "name": "ALLOW BUTTON", + "contexts": [ + "Undoes the effect of the disallow button", + "action for one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose button", + "is being reenabled. Can use most Player", + "based Value Syntax." + ], + [ + "Button - The logical button that is being reenabled." + ] + ] + }, + { + "name": "APPLY IMPLUSE", + "contexts": [ + "Applies an instantaneous change in velocity", + "to the movement of one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose velocity", + "will be changed. Can use most Player based Value Syntax." + ], + [ + "Direction - The unit direction in which", + "the impulse will be applied. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax." + ], + [ + "Speed - The magnitude of the change to the", + "velocities of the player or players. Can", + "use most Number based Value Syntax." + ], + [ + "Relative - Specifies whether the direction", + "is relative to world coordinates or the", + "local coordinates of the player or players." + ], + [ + "To World - Relative to the worldโ€™s coordinate system." + ], + [ + "To Player - Relative to the playerโ€™s local", + "coordinate system (which moves and rotates", + "with the player)." + ], + [ + "Motion - Specifies whether existing velocity", + "that is counter to direction should first", + "be canceled out before applying the impulse." + ], + [ + "Cancel Contrary Motion - If the target is", + "moving against the direction of the impulse,", + "this relative velocity is negated before", + "the impulse is applied." + ], + [ + "Incorporate Contrary Motion - The impulse", + "is added directly to the velocity of the", + "target, so if the target is moving against", + "the direction of the impulse, it might seem", + "like the impulse has less of an effect." + ] + ] + }, + { + "name": "BIG MESSAGE", + "contexts": [ + "Displays a large message above the reticle", + "that is visible to specific players." + ], + "definitions": [ + [ + "Visible to - One or more players who will", + "see the message. Can use most Value Syntax", + "to select multiple players to specify." + ], + [ + "Header - The message to be displayed. Can", + "use most String based Value Syntax to specify." + ] + ] + }, + { + "name": "CHASE GLOBAL VARIABLE AT RATE", + "contexts": [ + "Gradually modifies the value of a global", + "variable at a specific rate. (A global variable", + "is a variable that belongs to the game itself.)" + ], + "definitions": [ + [ + "Variable - The variable the action will", + "manipulate. Can use most Variable based Value Syntax." + ], + [ + "Destination - The value that the global", + "variable will eventually reach. The type", + "of this value may be either a number or", + "a vector, through the variableโ€™s existing", + "value must be of the same type before the", + "chase begins. Can use most Number or Vector", + "based Value Syntax to specify." + ], + [ + "Rate - The amount of change that will happen", + "to the variableโ€™s value each second. Can", + "use most Number based Value Syntax to specify." + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can specify a Destination and Rate or nothing." + ] + ] + }, + { + "name": "CHASE GLOBAL VARIABLE OVER TIME", + "contexts": [ + "Gradually modifies the value of a global", + "variable over time. (A global variable is", + "a variable that belongs to the game itself.)" + ], + "definitions": [ + [ + "Variable - The variable the action will", + "manipulate. Can use most Variable based Value Syntax." + ], + [ + "Destination - The value that the global", + "variable will eventually reach. The type", + "of this value may be either a number or", + "a vector, through the variableโ€™s existing", + "value must be of the same type before the", + "chase begins. Can use most Number or Vector", + "based Value Syntax to specify." + ], + [ + "Duration - The amount of time, in seconds,", + "over which the variableโ€™s value will approach", + "the destination. Can use most Number based", + "Value Syntax to specify." + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can specify a Destination and Duration or nothing." + ] + ] + }, + { + "name": "CHASE PLAYER VARIABLE AT RATE", + "contexts": [ + "Gradually modifies the value of a player", + "variable at a specific rate. (A player variable", + "is a variable that belongs to a specific player.)" + ], + "definitions": [ + [ + "Player - The player whose variable will", + "gradually change. If multiple players are", + "provided, each of their variables will change independently." + ], + [ + "Variable - The variable the action will", + "manipulate. Can use most Variable based Value Syntax." + ], + [ + "Destination - The value that the player", + "variable will eventually reach. The type", + "of this value may be either a number or", + "a vector, through the variableโ€™s existing", + "value must be of the same type before the", + "chase begins. Can use most Number or Vector", + "based Value Syntax to specify." + ], + [ + "Rate - The amount of change that will happen", + "to the variableโ€™s value each second. Can", + "use most Number based Value Syntax to specify." + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can specify a Destination and Rate or nothing." + ] + ] + }, + { + "name": "CHASE PLAYER VARIABLE OVER TIME", + "contexts": [ + "Gradually modifies the value of a player", + "variable over time. (A player variable is", + "a variable that belongs to a specific player.)" + ], + "definitions": [ + [ + "Player - The player whose variable will", + "gradually change. If multiple players are", + "provided, each of their variables will change independently." + ], + [ + "Variable - The variable the action will", + "manipulate. Can use most Variable based Value Syntax." + ], + [ + "Destination - The value that the player", + "variable will eventually reach. The type", + "of this value may be either a number or", + "a vector, through the variableโ€™s existing", + "value must be of the same type before the", + "chase begins. Can use most Number or Vector", + "based Value Syntax to specify." + ], + [ + "Duration - The amount of time, in seconds,", + "over which the variableโ€™s value will approach", + "the destination. Can use most Number based", + "Value Syntax to specify." + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can specify a Destination and Duration or nothing." + ] + ] + }, + { + "name": "CLEAR STATUS", + "contexts": [ + "Clears a status that was applied from a", + "set status action from one or more players." + ], + "definitions": [ + [ + "Player - The player or players from whom", + "the status will be removed. Can use most", + "Player based Value Syntax." + ], + [ + "Status - The Status to be removed from the", + "player or players. Values include Hacked,", + "Burning, Knocked Down, Asleep, Frozen, Unkillable,", + "Invincible, Phased Out, Rooted, or Stunned." + ] + ] + }, + { + "name": "COMMUNICATE", + "contexts": [ + "Causes one or more players to use an emote,", + "voice line, or other equipped communication." + ], + "definitions": [ + [ + "Player - The player or players to perform", + "the communication. Can use most Player based Value Syntax." + ], + [ + "Type - The type of communication. Can use", + "any equipped emote, equipped voice line,", + "or any other communication effect." + ] + ] + }, + { + "name": "CREATE EFFECT", + "contexts": [ + "Creates an in-world effect entity. This", + "effect entity will persist until destroyed,", + "to obtain a reference to this entity, use", + "the last created entity value. This action", + "will fail if too many entities have been created." + ], + "definitions": [ + [ + "Visible to - One or more players who will", + "be able to see the effect. Can use most", + "Value Syntax to select one or multiple players." + ], + [ + "Type - The type of the effect to be created.", + "(Sphere, Light Shaft, Orb, Ring, Cloud,", + "Sparkles, Good Aura, Bad Aura, Energy Sound,", + "Pick-Up Sound, Good Aura Sound, Bad Aura", + "Sound, Sparkles Sound, Smoke Sound, Decal", + "Sound, Beacon Sound)" + ], + [ + "Color - The color of the effect to be created.", + "IF a particular team is chosen, the effect", + "will either be red or blue, depending on", + "whether the team is hostile to the viewer.", + "Does not apply to sound effects. (Sphere,", + "Light Shaft, Orb, Ring, Cloud, Sparkles,", + "Good Aura, Bad Aura, Energy Sound, Pick-Up", + "Sound, Good Aura Sound, Bad Aura Sound,", + "Sparkles Sound, Smoke Sound, Decal Sound, Beacon Sound)" + ], + [ + "Position - The effectโ€™s position. If this", + "value is a player, then the effect will", + "move along with the player, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based", + "Value Syntax. (Sphere, Light Shaft, Orb,", + "Ring, Cloud, Sparkles, Good Aura, Bad Aura,", + "Energy Sound, Pick-Up Sound, Good Aura Sound,", + "Bad Aura Sound, Sparkles Sound, Smoke Sound,", + "Decal Sound, Beacon Sound)" + ], + [ + "Radius - The effectโ€™s radius in meters.", + "Sound effects have their volume affected", + "instead. (Sphere, Light Shaft, Orb, Ring,", + "Cloud, Sparkles, Good Aura, Bad Aura, Energy", + "Sound, Pick-Up Sound, Good Aura Sound, Bad", + "Aura Sound, Sparkles Sound, Smoke Sound,", + "Decal Sound, Beacon Sound)" + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated,", + "the effect will keep asking for and using", + "new values from reevaluated inputs." + ] + ] + }, + { + "name": "CREATE HUD TEXT", + "contexts": [ + "Creates HUD text visible to specific players", + "at specific location on the screen. This", + "text will persist until destroyed. To obtain", + "a reference to this text, use the last text", + "ID value. This action will fail if too many", + "text elements have been created." + ], + "definitions": [ + [ + "Visible to - One or more players who will", + "see the HUD text. Can use most Value Syntax", + "to select one or multiple players." + ], + [ + "Header - The header text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + [ + "Subheader - The subheader text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + [ + "Text - The body text to be displayed (can", + "be blank). Can use most String based Value", + "Syntax to populate." + ], + [ + "Location - The location on the screen where", + "text will appear. You can choose left, top, or right." + ], + [ + "Sort Order - The Sort Order of the text", + "relative to other text in the same location.", + "Text with a higher sort order will come", + "after text with a lower sort order. Can", + "use most Number based Value Syntax." + ], + [ + "Header Color - The color of the Header text", + "to be created. If a particular team is chosen,", + "the effect will either be red or blue." + ], + [ + "Subheader Color - The color of the Subheader", + "text to be created. If a particular team", + "is chosen, the effect will either be red or blue." + ], + [ + "Text Color - The color of the body text", + "to be created. If a particular team is chosen,", + "the effect will either be red or blue." + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated,", + "the text will keep asking for and using", + "new values from reevaluated inputs." + ] + ] + }, + { + "name": "CREATE ICON", + "contexts": [ + "Creates an in-world entity. This icon entity", + "will persist until destroyed. To obtain", + "a reference to this entity, use the last", + "created entity value. This action will fail", + "if too many entities have been created." + ], + "definitions": [ + [ + "Visible to - One or more players who will", + "be able to see the icon. Can use most Value", + "Syntax to select one or multiple players." + ], + [ + "Position - The iconโ€™s position. If this", + "value is a player, then the icon will appear", + "above the playerโ€™s head, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based Value Syntax." + ], + [ + "Icon - The icon to be created. (Arrow: Down,", + "Arrow: Left, Arrow: Right, Arrow: Up, Asterisk,", + "Bolt, Checkmark, Circle, Club, Diamond,", + "Dizzy, Exclamation Mark, Eye, Fire, Flag,", + "Halo, Happy, Heart, Moon, No, Plus, Poison,", + "Poison 2, Question Mark, Radioactive, Recycle,", + "Ring Thick, Ring Thin, Sad, Skull, Spade,", + "Spiral, Stop, Trashcan, Warning, X)" + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated,", + "the icon will keep asking for and using", + "new values from reevaluated inputs. (Arrow:", + "Down, Arrow: Left, Arrow: Right, Arrow:", + "Up, Asterisk, Bolt, Checkmark, Circle, Club,", + "Diamond, Dizzy, Exclamation Mark, Eye, Fire,", + "Flag, Halo, Happy, Heart, Moon, No, Plus,", + "Poison, Poison 2, Question Mark, Radioactive,", + "Recycle, Ring Thick, Ring Thin, Sad, Skull,", + "Spade, Spiral, Stop, Trashcan, Warning,", + "X, Visible to and position, Position, Visible to, None)" + ], + [ + "Icon Color - The color of the icon to be", + "created. IF a particular team is chosen,", + "the icon will either be red or blue, depending", + "on whether the team is hostile to the viewer.", + "(Arrow: Down, Arrow: Left, Arrow: Right,", + "Arrow: Up, Asterisk, Bolt, Checkmark, Circle,", + "Club, Diamond, Dizzy, Exclamation Mark,", + "Eye, Fire, Flag, Halo, Happy, Heart, Moon,", + "No, Plus, Poison, Poison 2, Question Mark,", + "Radioactive, Recycle, Ring Thick, Ring Thin,", + "Sad, Skull, Spade, Spiral, Stop, Trashcan,", + "Warning, X, Visible to and position, Position,", + "Visible to, None)" + ], + [ + "Show when offscreen - Should this icon still", + "appear even when it is behind you? Can use", + "most Boolean based Value Syntax to specify." + ] + ] + }, + { + "name": "CREATE IN-WORLD TEXT", + "contexts": [ + "Creates in-world text visible to specific", + "players at specific position in the world.", + "This text will persist until destroyed.", + "To obtain a reference to this text, use", + "the last text ID value. This action will", + "fail if too many text elements have been created." + ], + "definitions": [ + [ + "Visible to - One or more players who will", + "see the HUD text. Can use most Value Syntax", + "to select one or multiple players." + ], + [ + "Header - The header text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + [ + "Position - The textโ€™s position. If this", + "value is a player, then the text will appear", + "above the playerโ€™s head. Otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based Value Syntax." + ], + [ + "Scale - The textโ€™s scale. Can use most Number", + "based Value Syntax." + ], + [ + "Clipping - Specifies whether the text can", + "be seen through walls or is instead clipped." + ], + [ + "Clip Against Surfaces - The text may be", + "partially or completely obscured by walls,", + "floors, ceilings, players, or other solid objects." + ], + [ + "Do not clip - The text will always be fully", + "visible. Even if it is behind a wall or solid object." + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated,", + "the text will keep asking for and using", + "new values from reevaluated inputs." + ] + ] + }, + { + "name": "DAMAGE", + "contexts": [ + "Applies instantaneous damage to one or more", + "players, possibly killing the players." + ], + "definitions": [ + [ + "Player - The player or players who will", + "receive damage. Can use most Player based", + "Value Syntax to select one or multiple players." + ], + [ + "Damager - The player who will receive credit", + "for the damage. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + [ + "Amount - The amount of damage to apply.", + "This amount may be modified by buffs, debuffs,", + "or armor. Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "DECLARE MATCH DRAW", + "contexts": [ + "Instantly ends the match in a draw. This", + "action has no effect in free-for-all modes." + ], + "definitions": [] + }, + { + "name": "DECLARE PLAYER VICTORY", + "contexts": [ + "Instantly ends the match with the specific", + "player as the winner. This action only has", + "an effect in free-for-all modes." + ], + "definitions": [ + [ + "Player - The winning player. Can use most", + "Player based Value Syntax for this value." + ] + ] + }, + { + "name": "DECLARE ROUND VICTORY", + "contexts": [ + "Declare a team as the current round winner.", + "This only works in the control and elimination game modes." + ], + "definitions": [ + [ + "Team - Round winning team. Can use most", + "Team based Value Syntax for this value." + ] + ] + }, + { + "name": "DECLARE TEAM VICTORY", + "contexts": [ + "Instantly ends the match with the specified", + "team as the winner. This action has no effect", + "in free-for-all modes." + ], + "definitions": [ + [ + "Team - The winning team. Can use most Team", + "based Value Syntax for this value." + ] + ] + }, + { + "name": "DESTROY ALL EFFECTS", + "contexts": [ + "Destroys all effect entities created by create effect." + ], + "definitions": [] + }, + { + "name": "DESTROY ALL ICONS", + "contexts": [ + "Destroys all icon entities created by create icon." + ], + "definitions": [] + }, + { + "name": "DESTROY ALL IN-WORLD TEXT", + "contexts": [ + "Destroys all in-world text created by the", + "create in-world effect." + ], + "definitions": [] + }, + { + "name": "DESTROY EFFECT", + "contexts": [ + "Destroys an effect entity that was created", + "by create effect." + ], + "definitions": [ + [ + "Entity - Specifies which effect entity to", + "destroy. This entity may be the last created", + "entity or a variable into which last created", + "entity was earlier stored." + ] + ] + }, + { + "name": "DESTROY HUD TEXT", + "contexts": [ + "Destroys hud text that was created by create hud text." + ], + "definitions": [ + [ + "Text ID - Specifies which hud text to destroy.", + "This ID may be last text ID or a variable", + "into which last text ID was earlier stored." + ] + ] + }, + { + "name": "DESTROY ICON", + "contexts": [ + "Destroys an icon entity that was created by create icon." + ], + "definitions": [ + [ + "Text ID - Specifies which icon to destroy.", + "This ID may be last text ID or a variable", + "into which last create entity was earlier stored." + ] + ] + }, + { + "name": "DISABLE BUILT-IN GAME MODE ANNOUNCER", + "contexts": [ + "Disables game mode announcements from the", + "announcer until reenabled or the match ends." + ], + "definitions": [] + }, + { + "name": "DISABLE BUILT-IN GAME MODE COMPLETION", + "contexts": [ + "Disables completion of the match from the", + "game mode itself, only allowing the match", + "to be completed by scripting commands." + ], + "definitions": [] + }, + { + "name": "DISABLE BUILT-IN GAME MODE MUSIC", + "contexts": [ + "Disables all game-mode music until reenabled", + "or the match ends." + ], + "definitions": [] + }, + { + "name": "DISABLE BUILT-IN GAME MODE RESPAWNING", + "contexts": [ + "Disables automatic respawning for one or", + "more players, only allowing respawning by", + "scripting commands." + ], + "definitions": [ + [ + "Player - The player or players whose respawning", + "is affected. Can use most Player based Value", + "Syntax for this value." + ] + ] + }, + { + "name": "DISABLE BUILT-IN GAME MODE SCORING", + "contexts": [ + "Disables changes to player and team scores", + "from the game mode itself, only allowing", + "scores to be changed by scripting commands." + ], + "definitions": [] + }, + { + "name": "DISABLE DEATH SPECTATE ALL PLAYERS", + "contexts": [ + "Undoes the effect of the enable death spectate", + "all players action for one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose default", + "death spectate behavior is restored. Can", + "use most Player based Value Syntax for this value." + ] + ] + }, + { + "name": "DISABLE DEATH SPECTATE TARGET HUD", + "contexts": [ + "Undoes the effect of the enable death spectate", + "target hud action for one or more players." + ], + "definitions": [ + [ + "Player - The player or players who will", + "revert to seeing their own HUD while death", + "spectating. Can use most Player based Value", + "Syntax for this value." + ] + ] + }, + { + "name": "DISALLOW BUTTON", + "contexts": [ + "Disables a logical button for one or more", + "players such that pressing it has no effect." + ], + "definitions": [ + [ + "Player - The player executing this rule,", + "as specified by the event. May be the same", + "as the attacker or victim. Can use most", + "Player based Value Syntax for this value." + ] + ] + }, + { + "name": "ENABLE BUILT-IN GAME MODE ANNOUNCER", + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode announcer action." + ], + "definitions": [] + }, + { + "name": "ENABLE BUILT-IN GAME MODE COMPLETION", + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode completion action." + ], + "definitions": [] + }, + { + "name": "ENABLE BUILT-IN GAME MODE MUSIC", + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode music action." + ], + "definitions": [] + }, + { + "name": "ENABLE BUILT-IN GAME MODE RESPAWNING", + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode respawning for one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose respawning", + "is affected. Can use most Player based Value", + "Syntax for this value." + ] + ] + }, + { + "name": "ENABLE BUILT-IN GAME MODE SCORING", + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode scoring action." + ], + "definitions": [] + }, + { + "name": "ENABLE DEATH SPECTATE ALL PLAYERS", + "contexts": [ + "Allows one or more players to spectate all", + "players when dead, as opposed to only allies." + ], + "definitions": [ + [ + "Player - The player or players who will", + "be allowed to spectate all players. Can", + "use most Player based Value Syntax for this value." + ] + ] + }, + { + "name": "ENABLE DEATH SPECTATE TARGET HUD", + "contexts": [ + "Allows one or more players to see their", + "targetโ€™s HUD when dead instead of their", + "own while death spectating." + ], + "definitions": [ + [ + "Player - The player or players who will", + "begin seeing their spectateโ€™s targetโ€™s hud", + "while death spectating. Can use most Player", + "based Value Syntax for this value." + ] + ] + }, + { + "name": "GO TO ASSEMBLE HEROES", + "contexts": [ + "Go to the assemble heroes phase of the game", + "mode. Only works if a game is in progress." + ], + "definitions": [] + }, + { + "name": "HEAL", + "contexts": [ + "Provides an instantaneous heal to one or", + "more players. This heal will not resurrect dead players." + ], + "definitions": [ + [ + "Player - The player or players whose health", + "will be restored. Can use most Player based", + "Value Syntax for this value." + ], + [ + "Healer - The player who will receive credit", + "for the healing. A healer of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + [ + "Amount - The amount of healing to apply.", + "This amount may be modified by buffs or", + "debuffs, healing is capped by each playerโ€™s", + "max health. Can use most Number based Value", + "Syntax for this value." + ] + ] + }, + { + "name": "KILL", + "contexts": [ + "Instantly kills one or more players." + ], + "definitions": [ + [ + "Player - The player or players who will", + "be killed. Can use most Player based Value", + "Syntax for this value." + ], + [ + "Killer - The player who will receive credit", + "for the kill. A killer of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ] + ] + }, + { + "name": "LOOP", + "contexts": [ + "Restarts the action list from the beginning.", + "To prevent an infinite loop, a wait action", + "must execute between the start of the action", + "list and this action." + ], + "definitions": [] + }, + { + "name": "LOOP IF", + "contexts": [ + "Restarts the action list from the beginning", + "if this actionโ€™s condition evaluates to", + "true. If it does not, execution continues", + "with the next action. To prevent an infinite", + "loop, a wait action must execute between", + "the start of the action list and this action." + ], + "definitions": [ + [ + "Condition - Specifies whether the loop will", + "occur. Can use most Conditional based Value", + "Syntax for this value." + ] + ] + }, + { + "name": "LOOP IF CONDITION IF FALSE", + "contexts": [ + "Restarts the action list from the beginning", + "if at least one condition in the condition", + "list is false. If all conditions are true,", + "execution continues with the next action.", + "To prevent an infinite loop, a wait action", + "must execute between the start of the action", + "list and this action." + ], + "definitions": [] + }, + { + "name": "LOOP IF CONDITION IF TRUE", + "contexts": [ + "Restarts the action list from the beginning", + "if all conditions in the condition list", + "is true. If any are false, execution continues", + "with the next action. To prevent an infinite", + "loop, a wait action must execute between", + "the start of the action list and this action." + ], + "definitions": [] + }, + { + "name": "MODIFY GLOBAL VARIABLE", + "contexts": [ + "Modifies the value of a global variable,", + "which is a variable that belongs to the game itself." + ], + "definitions": [ + [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ], + [ + "Operation - The way in which the variableโ€™s", + "value will be changed. Options include standard", + "arithmetic operations as well as array operations", + "for appending and removing values." + ], + [ + "Value - The value used for the modification.", + "For arithmetic operations, this is the second", + "of two operands, with the other being the", + "variableโ€™s existing value. For array operations,", + "this is the value to append or remove. Various", + "Value Syntax can be used." + ] + ] + }, + { + "name": "MODIFY GLOBAL VARIABLE AT INDEX", + "contexts": [ + "Modifies the value of a global variable", + "at an index, which is a variable that belongs", + "to the game itself." + ], + "definitions": [ + [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ], + [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with new elements", + "given a value of 0." + ], + [ + "Operation - The way in which the variableโ€™s", + "value will be changed. Options include standard", + "arithmetic operations as well as array operations", + "for appending and removing values." + ], + [ + "Value - The value used for the modification.", + "For arithmetic operations, this is the second", + "of two operands, with the other being the", + "variableโ€™s existing value. For array operations,", + "this is the value to append or remove. Various", + "Value Syntax can be used." + ] + ] + }, + { + "name": "MODIFY PLAYER SCORE", + "contexts": [ + "Modifies the score (kill count) of one or", + "more players. This action only has an effect", + "in free-for-all modes." + ], + "definitions": [ + [ + "Player - The player whose score will change.", + "Can use most Player based Value Syntax for this value." + ], + [ + "Score - The amount the score will increase", + "or decrease. If positive, the score will", + "increase. If negative, the score will decrease.", + "Can use most Number based Value Syntax for this value." + ] + ] + }, + { + "name": "MODIFY PLAYER VARIABLE", + "contexts": [ + "Modifies the value of a player variable,", + "which is a variable that belongs to a specific player." + ], + "definitions": [ + [ + "Player - The player whose variable will", + "be modified. If multiple players are provided,", + "each of their variables will be set. Can", + "use most Player based Value Syntax for this value." + ], + [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ], + [ + "Operation - The way in which the variableโ€™s", + "value will be changed. Options include standard", + "arithmetic operations as well as array operations", + "for appending and removing values." + ], + [ + "Value - The value used for the modification.", + "For arithmetic operations, this is the second", + "of two operands, with the other being the", + "variableโ€™s existing value. For array operations,", + "this is the value to append or remove. Various", + "Value Syntax can be used." + ] + ] + }, + { + "name": "MODIFY PLAYER VARIABLE AT INDEX", + "contexts": [ + "Modifies the value of a player variable", + "at an index, which is a variable that belongs", + "to a specific player." + ], + "definitions": [ + [ + "Player - The player whose variable will", + "be modified. If multiple players are provided,", + "each of their variables will be set. Can", + "use most Player based Value Syntax for this value." + ], + [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ], + [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with new elements", + "given a value of 0." + ], + [ + "Operation - The way in which the variableโ€™s", + "value will be changed. Options include standard", + "arithmetic operations as well as array operations", + "for appending and removing values." + ], + [ + "Value - The value used for the modification.", + "For arithmetic operations, this is the second", + "of two operands, with the other being the", + "variableโ€™s existing value. For array operations,", + "this is the value to append or remove. Various", + "Value Syntax can be used." + ] + ] + }, + { + "name": "MODIFY TEAM SCORE", + "contexts": [ + "Modifies the score of one or both teams.", + "This action has not effect in free-for-all", + "modes or modes without a team score." + ], + "definitions": [ + [ + "Team - The team whose score will be changed.", + "Can use most Player based Value Syntax for this value." + ], + [ + "Score - The amount the score will increase", + "or decrease. If positive, the score will", + "increase. If negative, the score will decrease.", + "Can use most Number based Value Syntax for this value." + ] + ] + }, + { + "name": "PAUSE MATCH TIME", + "contexts": [ + "Pauses the match time, players, objective", + "logic, and game mode advancement criteria", + "are unaffected by the pause." + ], + "definitions": [] + }, + { + "name": "PLAY EFFECT", + "contexts": [ + "Plays an effect at a position in the world.", + "The lifetime of this effect is short, so", + "it does not need to be updated or destroyed." + ], + "definitions": [ + [ + "Visible to - One or more players who will", + "be able to see the effect. Can use most", + "Value Syntax to select one or multiple players." + ], + [ + "Type - The type of the effect to be created.", + "(Good Explosion, Bad Explosion, Ring Explosion,", + "Good Pickup Effect, Bad Pickup Effect, Debuff", + "Impact Sound, Buff Impact Sound, Ring Explosion", + "Sound, Buff Explosion Sound, Explosion Sound)" + ], + [ + "Color - The color of the effect to be created.", + "IF a particular team is chosen, the effect", + "will either be red or blue, depending on", + "whether the team is hostile to the viewer.", + "(Good Explosion, Bad Explosion, Ring Explosion,", + "Good Pickup Effect, Bad Pickup Effect, Debuff", + "Impact Sound, Buff Impact Sound, Ring Explosion", + "Sound, Buff Explosion Sound, Explosion Sound)" + ], + [ + "Position - The effectโ€™s position. If this", + "value is a player, then the effect will", + "move along with the player, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based", + "Value Syntax. (Good Explosion, Bad Explosion,", + "Ring Explosion, Good Pickup Effect, Bad", + "Pickup Effect, Debuff Impact Sound, Buff", + "Impact Sound, Ring Explosion Sound, Buff", + "Explosion Sound, Explosion Sound)" + ], + [ + "Radius - The effectโ€™s radius in meters.", + "Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "PRELOAD HERO", + "contexts": [ + "Preemptively loads the specified hero or", + "heroes into memory using the skins of the", + "specified player or players, available memory", + "permitting. Useful whenever rapid hero changing", + "is possible and the next hero is known." + ], + "definitions": [ + [ + "Player - The player or players who will", + "begin preloading a hero or heroes. Only", + "one preload hero action will be active at", + "a time for a given player. Can use most", + "Player based Value Syntax for this value." + ], + [ + "Hero - The hero or heroes to begin preloading", + "for the specified player or players. When", + "multiple heroes are specified in an array,", + "the Heroes towards the beginning of the", + "array are prioritized. Can use most Hero", + "based Value Syntax for this value." + ] + ] + }, + { + "name": "PRESS BUTTON", + "contexts": [ + "Forces one or more players to press a button", + "virtually for a single frame." + ], + "definitions": [ + [ + "Player - The player or players for whom", + "virtual button input will be forced. Can", + "use most Player based Value Syntax for this value." + ], + [ + "Button - The button to be pressed." + ] + ] + }, + { + "name": "RESET PLAYER HERO AVAILABILITY", + "contexts": [ + "Restores the list of heroes available to", + "one or more players to the list specified", + "by the game settings. If a playerโ€™s current", + "hero becomes unavailable, the player is", + "forced to choose a different hero and respawn", + "at an appropriate spawn location." + ], + "definitions": [ + [ + "Player - The player or players whose hero", + "list is being reset. Can use most Player", + "based Value Syntax for this value." + ] + ] + }, + { + "name": "RESPAWN", + "contexts": [ + "Respawns one or more players at an appropriate", + "spawn location with full health, even if", + "they were already alive." + ], + "definitions": [ + [ + "Player - The player or players to respawn.", + "Can use most Player based Value Syntax for this value." + ] + ] + }, + { + "name": "RESURRECT", + "contexts": [ + "Instantly resurrects one or more players", + "at the location they died with no transition." + ], + "definitions": [ + [ + "Player - The player or players who will", + "be resurrected. Can use most Player based", + "Value Syntax for this value." + ] + ] + }, + { + "name": "SET ABILITY 1 ENABLED", + "contexts": [ + "Enables or disables ability 1 for one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose access", + "to ability 1 is affected. Can use most Player", + "based Value Syntax for this value." + ], + [ + "Enabled - Specifies whether the player or", + "players are able to use ability 1. Expects", + "a Boolean Value such as True, False, or", + "Compare. Can use most Boolean based Value Syntax." + ] + ] + }, + { + "name": "SET ABILITY 2 ENABLED", + "contexts": [ + "Enables or disables ability 2 for one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose access", + "to ability 2 is affected. Expects a Boolean", + "Value such as True, False, or Compare. Can", + "use most Player based Value Syntax for this value." + ], + [ + "Enabled - Specifies whether the player or", + "players are able to use ability 2. Can use", + "most Boolean based Value Syntax." + ] + ] + }, + { + "name": "SET AIM SPEED", + "contexts": [ + "Sets the aim speed of one or more players", + "to a percentage of their normal aim speed." + ], + "definitions": [ + [ + "Player - The player or players whose aim", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + [ + "Turn Speed Percent - The percentage of normal", + "aim speed to which the player or players", + "will set their aim speed. Can use most Number", + "based Value Syntax." + ] + ] + }, + { + "name": "SET DAMAGE DEALT", + "contexts": [ + "Sets the damage dealt to one or more players", + "of a percentage of their raw damage dealt.", + "NOTE: Negative values do not heal enemies.", + "Damage values of 0 or lower will not trigger script events." + ], + "definitions": [ + [ + "Player - The player or players whose damage", + "dealt will be set. Can use most Player based", + "Value Syntax for this value." + ], + [ + "Damage Dealt Percent - The percentage of", + "raw damage dealt to which the player or", + "players will set their damage dealt. Can", + "use most Number based Value Syntax." + ] + ] + }, + { + "name": "SET DAMAGE RECEIVED", + "contexts": [ + "Sets the damage received of one or more", + "players to a percentage of their raw damage", + "received. NOTE: Negative values do not heal", + "enemies. Damage values of 0 or lower will", + "not trigger script events." + ], + "definitions": [ + [ + "Player - The player or players whose damage", + "received will be set. Can use most Player", + "based Value Syntax for this value." + ], + [ + "Damage Received Percent - The percentage", + "of raw damage received to which the player", + "or players will set their damage received.", + "Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "SET FACING", + "contexts": [ + "Sets the facing of one or more players to", + "the specified direction." + ], + "definitions": [ + [ + "Player - The player or players whose facing", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + [ + "Direction - The unit direction in which", + "the player or players will face. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax." + ], + [ + "*Relative - Specifies direction is relative", + "to world coordinates or the local coordinates", + "of the player or players." + ] + ] + }, + { + "name": "SET GLOBAL VARIABLE", + "contexts": [ + "Stores a value into a global variable, which", + "a variable that belongs to the game itself." + ], + "definitions": [ + [ + "Variable - Specifies which Global Variable", + "to store the value into. Specified by a", + "single alphabetic letter (A through Z)." + ], + [ + "Value - The value that will be stored. Nearly", + "any Value syntax can be used, however it", + "is most common with Number based syntax." + ] + ] + }, + { + "name": "SET GLOBAL VARIABLE INDEX", + "contexts": [ + "Finds or creates an array on a global variable,", + "which is a variable that belongs to the", + "game itself, then stores a value in the", + "array at the specified index." + ], + "definitions": [ + [ + "Variable - Specifies which global variableโ€™s", + "value is the array to modify, if the variableโ€™s", + "value is not an array, then its value becomes", + "an empty array. Specified by a single alphabetic", + "letter (A through Z)." + ], + [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with the new elements", + "given a value of zero. Can use most Number", + "based Value Syntax with this value." + ], + [ + "Value - The value that will be stored into", + "the array. Nearly any Value syntax can be", + "used, however it is most common with Number based syntax." + ] + ] + }, + { + "name": "SET GRAVITY", + "contexts": [ + "Sets the movement gravity for one or more", + "players to a percentage of regular movement gravity." + ], + "definitions": [ + [ + "Player - The player or players whose movement", + "gravity will be set. Can use most Player", + "based Value Syntax with this value." + ], + [ + "Gravity Percent - The percentage of regular", + "movement gravity to which the player or", + "players will set their personal movement", + "gravity. Can use most Number based Value", + "Sytax with this value. 100% is the normal", + "gravity level of the game. Less than that", + "will decrease gravity (allowing higher jumps),", + "higher amounts will result in higher gravity", + "(causing shorter jumps)." + ] + ] + }, + { + "name": "SET HEALING DEALT", + "contexts": [ + "Sets the healing dealt to one or more players", + "of a percentage of their raw damage dealt.", + "NOTE: Negative values do not damage enemies.", + "Healing values of 0 or lower will not trigger script events." + ], + "definitions": [ + [ + "Player - The player or players whose healing", + "dealt will be set. Can use most Player based", + "Value Syntax for this value." + ], + [ + "Healing Dealt Percent - The percentage of", + "raw healing dealt to which the player or", + "players will set their healing dealt. Can", + "use most Number based Value Syntax." + ] + ] + }, + { + "name": "SET HEALING RECEIVED", + "contexts": [ + "Sets the healing received of one or more", + "players to a percentage of their raw healing", + "received. NOTE: Negative values do not damage", + "enemies. Healing values of 0 or lower will", + "not trigger script events." + ], + "definitions": [ + [ + "Player - The player or players whose healing", + "received will be set. Can use most Player", + "based Value Syntax for this value." + ], + [ + "Healing Received Percent - The percentage", + "of raw healing received to which the player", + "or players will set their healing received.", + "Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "SET INVISIBLE", + "contexts": [ + "Causes one or more players to become invisible", + "to either all other players or just enemies." + ], + "definitions": [ + [ + "Player - The player or players who will", + "become invisible. Can use most Player based", + "Value Syntax for this value." + ], + [ + "Invisible to - Specifies for whom the player", + "or players will be invisible. Can be set", + "to All, Enemies, or None." + ] + ] + }, + { + "name": "SET MATCH TIME", + "contexts": [ + "Sets the current match time (which is visible", + "at the top of the screen). This can be used", + "to shorten or extend the duration of a match", + "or to change the duration of assemble heroes or setup." + ], + "definitions": [ + [ + "Time - The match time in seconds. Can use", + "most Number based Value Syntax for this value." + ] + ] + }, + { + "name": "SET MAX HEALTH", + "contexts": [ + "Sets the max health of one or more players", + "as a percentage of their raw max health.", + "This action will ensure that a playerโ€™s", + "current health will not exceed the new max health." + ], + "definitions": [ + [ + "Player - The player or players whose max", + "health will be set. Can use most Player", + "based Value Syntax for this value." + ], + [ + "Health Percent - The percentage of raw max", + "health to which the player or players will", + "set their max health. Can use most Number", + "based Value Syntax for this value." + ] + ] + }, + { + "name": "SET MOVE SPEED", + "contexts": [ + "Sets the move speed of one or more players", + "to a percentage of their raw move speed." + ], + "definitions": [ + [ + "Player - The player or players whose move", + "speed will be set. Can use most Player based", + "Value Syntax for this value." + ], + [ + "Health Percent - The percentage of raw move", + "speed to which the player or players will", + "set their move speed. Can use most Number", + "based Value Syntax for this value." + ] + ] + }, + { + "name": "SET OBJECTIVE DESCRIPTION", + "contexts": [ + "Sets the text at the top center of the screen", + "that normally describes the objective to", + "a message visible to specific players." + ], + "definitions": [ + [ + "Visible to - One or more players who will", + "see the message. Can use most Number based", + "Player Syntax for this value." + ], + [ + "Header - The message to be displayed. Can", + "use most String based Value Syntax for this value." + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated.", + "The message will keep asking for and using", + "new values from reevaluated inputs. Can", + "choose โ€œVisible to and Stringโ€ or โ€œStringโ€" + ] + ] + }, + { + "name": "SET PLAYER ALLOWED HEROES", + "contexts": [ + "Sets the list of heroes available to one", + "or more players. If a playerโ€™s current hero", + "becomes unavailable, the player is forced", + "to choose a different hero and respawn at", + "an appropriate spawn location." + ], + "definitions": [ + [ + "Player - The player or players whose hero", + "list is being set. Can use most Player based", + "Value Syntax for this value." + ], + [ + "Hero - The hero or heroes that will be available.", + "If no heroes are provided, the action has", + "no effect. Can use most Hero based Value", + "Syntax for this value including compatible Arrays." + ] + ] + }, + { + "name": "SET PLAYER SCORE", + "contexts": [ + "Sets the score (kill count) of one or more", + "players. This action only has an effect", + "in free-for-all modes." + ], + "definitions": [ + [ + "Player - The player or players whose score", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + [ + "Score - The score that will be set. Can", + "use most Number based Value Syntax for this value." + ] + ] + }, + { + "name": "SET PLAYER VARIABLE", + "contexts": [ + "Stores a value into a player variable, which", + "is a variable that belongs to a specific player." + ], + "definitions": [ + [ + "Player - The player or players whose variable", + "will be set. If multiple players are provided,", + "each of their variables will be set. Can", + "use most Player based Value Syntax for this value." + ], + [ + "Variable - Specifies which Player Variable", + "to store the value into. Specified by a", + "single alphabetic letter (A through Z)." + ], + [ + "Value - The value that will be stored. Nearly", + "any Value syntax can be used, however it", + "is most common with Number based syntax." + ] + ] + }, + { + "name": "SET PLAYER VARIABLE AT INDEX", + "contexts": [ + "Finds or creates an array on a player variable,", + "which is a variable that belongs to a specific", + "player, then stores a value in the array", + "at the specified index." + ], + "definitions": [ + [ + "Player - The player or players whose variable", + "will be set. If multiple players are provided,", + "each of their variables will be set. Can", + "use most Player based Value Syntax for this value." + ], + [ + "Variable - Specifies which player variableโ€™s", + "value is the array to modify, if the variableโ€™s", + "value is not an array, then its value becomes", + "an empty array. Specified by a single alphabetic", + "letter (A through Z)." + ], + [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with the new elements", + "given a value of zero. Can use most Number", + "based Value Syntax with this value." + ], + [ + "Value - The value that will be stored into", + "the array. Nearly any Value syntax can be", + "used, however it is most common with Number based syntax." + ] + ] + }, + { + "name": "SET PRIMARY FIRE ENABLED", + "contexts": [ + "Enables or disables primary fire for one", + "or more players." + ], + "definitions": [ + [ + "Player - The player or players whose access", + "to primary fire is affected. Can use most", + "Player based Value Syntax for this value." + ], + [ + "Enabled - Specifies whether the player or", + "players are able to use primary fire. Expects", + "a Boolean Value such as True, False, or", + "Compare. Can use most Boolean based Value Syntax." + ] + ] + }, + { + "name": "SET PROJECTILE GRAVITY", + "contexts": [ + "Sets the projectile gravity for one or more", + "players to a percentage of regular projectile gravity." + ], + "definitions": [ + [ + "Player - The player or players whose projectile", + "gravity will be set. Can use most Player", + "based Value Syntax for this value." + ], + [ + "Projectile Gravity Percent - The percentage", + "of the regular projectile gravity to which", + "the player or players will set their personal", + "projectile gravity. Can use most Number", + "based Value Syntax for this value." + ] + ] + }, + { + "name": "SET PROJECTILE SPEED", + "contexts": [ + "Sets the projectile speed for one or more", + "players to a percentage of regular projectile speed." + ], + "definitions": [ + [ + "Player - The player or players whose projectile", + "speed will be set. Can use most Player based", + "Value Syntax for this value." + ], + [ + "Projectile Speed Percent - The percentage", + "of the regular projectile speed to which", + "the player or players will set their personal", + "projectile speed. Can use most Number based", + "Value Syntax for this value." + ] + ] + }, + { + "name": "SET RESPAWN MAX TIME", + "contexts": [ + "Sets the duration between death and respawn", + "for one or more players that are already", + "dead when this action is executed, the change", + "takes effect on their next death." + ], + "definitions": [ + [ + "Player - The player or players whose respawn", + "max time will is being defined. Can use", + "most Player based Value Syntax for this value." + ], + [ + "Time - The duration between death and respawn", + "in seconds. Can use most Number based Value", + "Syntax for this value." + ] + ] + }, + { + "name": "SET SECONDARY FIRE ENABLED", + "contexts": [ + "Enables or disables secondary fire for one", + "or more players." + ], + "definitions": [ + [ + "Player - The player or players whose access", + "to secondary fire is affected. Can use most", + "Player based Value Syntax for this value." + ], + [ + "Enabled - Specifies whether the player or", + "players are able to use secondary fire.", + "Expects a Boolean Value such as True, False,", + "or Compare. Can use most Boolean based Value Syntax." + ] + ] + }, + { + "name": "SET SLOW MOTION", + "contexts": [ + "Sets the simulation rate for the entire", + "game, including all players, projectiles,", + "effects, and game mode logic." + ], + "definitions": [ + [ + "Speed Percent - The simulation rate as a", + "percentage of normal speed. Only rates up", + "to 100% are allowed. Can use most Number", + "based Value Syntax for this value." + ] + ] + }, + { + "name": "SET STATUS", + "contexts": [ + "Applies a status to one or more players.", + "This status will remain in effect for the", + "specified duration or until it is cleared", + "by the clear status action." + ], + "definitions": [ + [ + "Player - The player or players to whom the", + "status will be applied. Can use most Player", + "based Value Syntax for this value." + ], + [ + "Assister - Specifies a player to be awarded", + "assist credit should the affected player", + "or players be killed while the status is", + "in effect. An assister of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + [ + "Status - The Status to be applied from the", + "player or players. These behave similarly", + "to statuses applied from hero abilities.", + "Values include Hacked, Burning, Knocked", + "Down, Asleep, Frozen, Unkillable, Invincible,", + "Phased Out, Rooted, or Stunned." + ], + [ + "Duration - The duration of the status effect", + "in seconds. To have a status that lasts", + "until a clear status action is executed,", + "proivide an arbitrarily long duration such", + "as 9999. Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "SET TEAM SCORE", + "contexts": [ + "Sets the score for one or both teams. This", + "action has no effect in free-for-all modes", + "or modes without a team score." + ], + "definitions": [ + [ + "Team - The team or teams whose score will", + "be set. Can use most Team based Value Syntax for this value." + ], + [ + "Score - The score that will be set. Can", + "use most Number based Value Syntax for this value." + ] + ] + }, + { + "name": "SET ULTIMATE ABILITY ENABLED", + "contexts": [ + "Enables or disables the ultimate ability", + "of one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose access", + "to their ultimate ability is affected. Can", + "use most Player based Value Syntax for this value." + ], + [ + "Enabled - Specifies whether the player or", + "players are able to use their ultimate ability.", + "Expects a Boolean Value such as True, False,", + "or Compare. Can use most Boolean based Value Syntax." + ] + ] + }, + { + "name": "SET ULTIMATE CHARGE", + "contexts": [ + "Sets the ultimate charge or one or more", + "players as a percentage of maximum charge." + ], + "definitions": [ + [ + "Player - The player or players whose ultimate", + "charge will be set. Can use most Player", + "based Value Syntax for this value." + ], + [ + "Charge Percent - The percentage of maximum", + "charge. Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "SKIP", + "contexts": [ + "Skips execution of a certain number of actions", + "in the action list." + ], + "definitions": [ + [ + "Number of actions - The number of action", + "to skip, not including this action. Can", + "use most Number based Value Syntax." + ] + ] + }, + { + "name": "SKIP IF", + "contexts": [ + "Skips execution of a certain number of actions", + "in the action list if this actionโ€™s condition", + "evaluates to true. If it does not, execution", + "continues with the next action." + ], + "definitions": [ + [ + "Condition - Specifies whether the loop will", + "occur. Can use most Conditional based Value", + "Syntax for this value." + ], + [ + "Number of actions - The number of action", + "to skip, not including this action. Can", + "use most Number based Value Syntax." + ] + ] + }, + { + "name": "SMALL MESSAGE", + "contexts": [ + "Displays a small message beneath the reticle", + "that is visible to specific players." + ], + "definitions": [ + [ + "Visible to - One or more players who will", + "see the message. Can use most Player based Value Syntax." + ], + [ + "Header - The message to be displayed. Can", + "use most String based Value Syntax to specify." + ] + ] + }, + { + "name": "START ACCELERATING", + "contexts": [ + "Starts accelerating one or more players", + "in a specified location." + ], + "definitions": [ + [ + "Player - The player or players that will", + "begin accelerating. Can use most Player", + "based Value Syntax." + ], + [ + "Direction - The unit direction in which", + "the acceleration will be applied. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax to specify." + ], + [ + "Rate - The rate of acceleration in meters", + "per second squared. This value may need", + "to be quite high in order to overcome gravity", + "and/or surface friction. Can use most Number", + "based Value Syntax." + ], + [ + "Max Speed - The speed at which acceleration", + "will stop for the player or players. It", + "may not be possible to reach this speed", + "due to gravity and/or surface friction.", + "Can use most Number based Value Syntax." + ], + [ + "Relative - Specifies whether direction is", + "relavtive to the world coordinates or the", + "local coordinates of the player or players." + ], + [ + "Reevaluation - Specifies which of this actions", + "inputs will be continously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can choose from โ€œDirection, Rate, and Max", + "Speedโ€ or โ€œNoneโ€." + ] + ] + }, + { + "name": "START CAMERA", + "contexts": [ + "Places your camera at a location, facing a direction." + ], + "definitions": [ + [ + "Player - The player executing this rule.", + "As specified by the event, may be the same", + "as the attacker or the victim. Can use most", + "Player based Value Syntax." + ], + [ + "Eye Position - The position of the camrea,", + "reevaluates continously. Can use most Vector", + "based Value Syntax to specify." + ], + [ + "Look at position - Where the camera looks", + "at, reevaluates continously. Can use most", + "Vector based Value Syntax to specify." + ], + [ + "Blend Speed - How fast to blend the camera", + "movement as positions change. 0 means do", + "not blend at all and just change positions", + "instantly. Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "START DAMAGE MODIFICATION", + "contexts": [ + "Starts modifying how much damage one or", + "more receivers will receive from one or", + "more damagers. A reference to this damage", + "modification can be obtained from the last", + "damage modification ID value. This action", + "will fail if too many damage modifications", + "have been started." + ], + "definitions": [ + [ + "Receivers - The player or players whose", + "incoming damage will be modified. Can use", + "most Player based Value Syntax." + ], + [ + "Damagers - The player or players whose outgoing", + "damage will be modified (when attacking", + "the receivers). Can use most Player based Value Syntax." + ], + [ + "Damage Percent - The percentage of damage", + "that will apply to receivers when attacked", + "by damagers. Can use most Number based Value", + "Syntax to specify." + ], + [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. Can", + "choose from โ€œReceivers, Damagers, and Damage", + "Percentโ€, โ€œReceivers and Damagersโ€, or โ€œNoneโ€." + ] + ] + }, + { + "name": "START DAMAGE OVER TIME", + "contexts": [ + "Starts an instance of damage over time,", + "this DOT will persist for the specified", + "duration or until stopped by script. To", + "obtain a reference to this DOT, use the", + "last damage over time to value." + ], + "definitions": [ + [ + "Receivers - One or more players who will", + "receive the damage over time. Can use most", + "Player based Value Syntax." + ], + [ + "Damager - The player who will receive credit", + "for the damage. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax." + ], + [ + "Duration - The duration of the damage over", + "time in seconds. To have a DOT that lasts", + "until stopped by script, provide an arbitrarily", + "long duration such as 9999. Can use most", + "Number based Value Syntax to specify." + ], + [ + "Damage Per Second - The damage per second", + "for the damage over time. Can use most Number", + "based Value Syntax to specify." + ] + ] + }, + { + "name": "START FACING", + "contexts": [ + "Starts turning one or more players to face", + "the specified direction." + ], + "definitions": [ + [ + "Player - The player or players who will", + "start turning. Can use most Player based Value Syntax." + ], + [ + "Direction - The unit direction in which", + "the player or players will eventually face.", + "Can use most Vector based Value Syntax." + ], + [ + "Turn Rate - The turn rate in degrees per", + "second. Can use most Number based Value", + "Syntax to specify." + ], + [ + "Relative - Specifies whether direction is", + "relative to the world coordinates or the", + "local coordinates of the player or players." + ], + [ + "Reevaluation - Specifies which of this actions", + "inputs will be continously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can choose from โ€œDirection and Turn Rateโ€ or โ€œNoneโ€." + ] + ] + }, + { + "name": "START FORCING PLAYER TO BE HERO", + "contexts": [ + "Starts forcing one or more players to be", + "a specified hero and, if necessary, respawns", + "them immediately in their current locaiton.", + "This will be the only hero available to", + "the player or players until, the stop forcing", + "player to be hero action is executed." + ], + "definitions": [ + [ + "Player - The player or players who will", + "be forced to be a specified hero. Can use", + "most Player based Value Syntax." + ], + [ + "Hero - The hero that the player or players", + "will be forced to be. Can use most Hero", + "based Value Syntax." + ] + ] + }, + { + "name": "START FORCING SPAWN ROOM", + "contexts": [ + "Forces a team to spawn in a particular spawn", + "room, regardless of the sapwn room normally", + "used by the game mode. This action only", + "has an effect in Assault, Hybrid, and Payload Maps." + ], + "definitions": [ + [ + "Team - The team whose spawn room will be", + "forced. Can use most Team based Value Syntax." + ], + [ + "Room - The number of the spawn room to be", + "forced. 0 is the first spawn room, 1 is", + "the second, and 2 is the third. If this", + "specified spawn room does not exist. Players", + "will use the normal spawn room. Can use", + "most Number based Value Syntax." + ] + ] + }, + { + "name": "START FORCING THROTTLE", + "contexts": [ + "Defines minimum and maximum movement input", + "values for one or more players. Possibly", + "forcing or preventing movement." + ], + "definitions": [ + [ + "Player - The player or players whose movement", + "whill be forced or limited. Can use most", + "Player based Value Syntax." + ], + [ + "Min Forward - Sets the minimum run forward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + [ + "Max Forward - Sets the maximum run forward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + [ + "Min Backward - Sets the minimum run backward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + [ + "Max Backward - Sets the maximum run backward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + [ + "Min Sideways - Sets the minimum run sideways", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + [ + "Max Forward - Sets the maximum run sideways", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "START HEAL OVER TIME", + "contexts": [ + "Starts an instance of damage over time,", + "this HOT will persist for the specified", + "duration or until stopped by script. To", + "obtain a reference to this HOT, use the", + "last damage over time to value." + ], + "definitions": [ + [ + "Player - One or more players who will receive", + "the heal over time. Can use most Player", + "based Value Syntax." + ], + [ + "Healer - The player who will receive credit", + "for the heal. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax." + ], + [ + "Duration - The duration of the heal over", + "time in seconds. To have a HOT that lasts", + "until stopped by script, provide an arbitrarily", + "long duration such as 9999. Can use most", + "Number based Value Syntax to specify." + ], + [ + "Damage Per Second - The heal per second", + "for the heal over time. Can use most Number", + "based Value Syntax to specify." + ] + ] + }, + { + "name": "START HOLDING BUTTON", + "contexts": [ + "Forces one or more players to hold a button", + "virtually until stopped by the stop holding button action." + ], + "definitions": [ + [ + "Player - The player or players who are holding", + "a button virtually. Can use most Player", + "based Value Syntax." + ], + [ + "Button - The logical button that is being held virtually." + ] + ] + }, + { + "name": "STOP ACCELERATING", + "contexts": [ + "Stops the acceleration started by the start", + "accelerating action for one or more players." + ], + "definitions": [ + [ + "Player - The player or players who will", + "stop accelerating. Can use most Player based Value Syntax." + ] + ] + }, + { + "name": "STOP ALL DAMAGE MODIFICATIONS", + "contexts": [ + "Stops the all damage modifications that", + "were started using the start damage modification action." + ], + "definitions": [] + }, + { + "name": "STOP ALL DAMAGE OVER TIME", + "contexts": [ + "Stops all damage over time started by the", + "start damage over time or one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose scripted", + "damage over time will stop. Can use most", + "Player based Value Syntax." + ] + ] + }, + { + "name": "STOP ALL HEAL OVER TIME", + "contexts": [ + "Stops all heal over time started by the", + "start heal over time or one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose scripted", + "heal over time will stop. Can use most Player", + "based Value Syntax." + ] + ] + }, + { + "name": "STOP CAMERA", + "contexts": [ + "Stops all forced camera positions started", + "by the start camera or one or more players." + ], + "definitions": [ + [ + "Player - The player or players whose forced", + "camera positions will stop. Can use most", + "Player based Value Syntax." + ] + ] + }, + { + "name": "STOP CHASING GLOBAL VARIABLE", + "contexts": [ + "Stops an in-progress chase of a global variable,", + "leaving it at its current value." + ], + "definitions": [ + [ + "Variable - Specifies which global variable", + "to stop modifying. Specified by a single", + "alphabetic letter (A through Z)." + ] + ] + }, + { + "name": "STOP CHASING PLAYER VARIABLE", + "contexts": [ + "Stops an in-progress chase of a player variable,", + "leaving it at its current value." + ], + "definitions": [ + [ + "Player - The player whose variable will", + "stop changing. If multiple players are provided,", + "each of their variables will stop changing.", + "Can use most Player based Value Syntax." + ], + [ + "Variable - Specifies which player variable", + "to stop modifying. Specified by a single", + "alphabetic letter (A through Z)." + ] + ] + }, + { + "name": "STOP DAMAGE MODIFICATION", + "contexts": [ + "Stops a damage modification that was started", + "by the start damage modification action" + ], + "definitions": [ + [ + "Damage modification ID - Specifies which", + "damage modification instance to stop, this", + "ID may be the last damage modification ID", + "or a variable into which last damage modification", + "ID was earlier stored. Can use most Number", + "based Value Syntax." + ] + ] + }, + { + "name": "STOP DAMAGE OVER TIME", + "contexts": [ + "Stops an instance of damage over time that", + "was started by the start damage over time action" + ], + "definitions": [ + [ + "Damage Over Time ID - Specifies which damage", + "over time instance to stop, this ID may", + "be the last damage over time ID or a variable", + "into which last damage over time ID was", + "earlier stored. Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "STOP FACING", + "contexts": [ + "Stops the turning started by the start facing", + "action for or one or more players." + ], + "definitions": [ + [ + "Player - The player or players who will", + "stop turning. Can use most Player based Value Syntax." + ] + ] + }, + { + "name": "STOP FORCING PLAYER TO BE HERO", + "contexts": [ + "Stops forcing one or more players to be", + "a specified hero. This will not respawn", + "the player or players, but it will restore", + "their availablity the next time they go", + "to select a hero." + ], + "definitions": [ + [ + "Player - The player or players who will", + "no longer be forced to be a specific hero.", + "Can use most Player based Value Syntax." + ] + ] + }, + { + "name": "STOP FORCING SPAWN ROOM", + "contexts": [ + "Undoes the effect of start forcing spawn", + "room action for the specified team." + ], + "definitions": [ + [ + "Team - The team that will resume using their", + "normal spawn room. Can use most Team based Value Syntax." + ] + ] + }, + { + "name": "STOP FORCING THROTTLE", + "contexts": [ + "Undoes the effect of start forcing throttle", + "action for one or more players" + ], + "definitions": [ + [ + "Player - The player or players whose movement", + "inout will be restored. Can use most Player", + "based Value Syntax." + ] + ] + }, + { + "name": "STOP HEAL OVER TIME", + "contexts": [ + "Stops an instance of heal over time that", + "was started by the start heal over time action" + ], + "definitions": [ + [ + "Heal Over Time ID - Specifies which heal", + "over time instance to stop, this ID may", + "be the last heal over time ID or a variable", + "into which last heal over time ID was earlier", + "stored. Can use most Number based Value Syntax." + ] + ] + }, + { + "name": "STOP HOLDING BUTTON", + "contexts": [ + "Undoes the effect of the start holding button", + "action for one or more players." + ], + "definitions": [ + [ + "Player - The player or players who are no", + "longer holding a button virtually. Can use", + "most Player based Value Syntax." + ] + ] + }, + { + "name": "TELEPORT", + "contexts": [ + "Teleports one or more players to the specified location." + ], + "definitions": [ + [ + "Player - The player or players to teleport.", + "Can use most Player based Value Syntax." + ], + [ + "Position - The position to which the player", + "or players will teleport. If a player is", + "providedm the position of the player is", + "used. Can use most Vector based Value Syntax." + ] + ] + }, + { + "name": "UNPAUSE MATCH TIME", + "contexts": [ + "Unpauses the match time." + ], + "definitions": [] + }, + { + "name": "WAIT", + "contexts": [ + "Pauses the execution of the action list,", + "unless the wait is interrupted. The remainder", + "of the actions will execute after the pause." + ], + "definitions": [ + [ + "Time - The duration of the pause. A minimum", + "value of 0.250 seconds is required. Can", + "use most Number based Value Syntax." + ], + [ + "Wait Behavior - Specifies if and how the", + "wait can be interrupted. If the condition", + "list is ignored, the wait will not be interrupted,", + "otherwise, the condition list will determine", + "if and when the action list will abort or restart." + ] + ] + }, + { + "name": "ABSOLUTE VALUE", + "contexts": [ + "The absolute value is a measure of how far", + "the number is from zero. If you think of", + "a number line, with zero in the center,", + "all youโ€™re really doing is asking how far", + "away you are from this zero point. For example", + "the Absolute Value of 4 is 4 and the absolute", + "value of -6 is 6." + ], + "definitions": [ + [ + "Value - You can specify any Value Syntax", + "to define the Absolute Value." + ] + ] + }, + { + "name": "ADD", + "contexts": [ + "The sum of two numbers or vectors. This", + "value will add the two specified values." + ], + "definitions": [ + [ + "Value - You can specify any Value Syntax", + "to define either addend." + ] + ] + }, + { + "name": "ALL DEAD PLAYERS", + "contexts": [ + "An array containing all dead players on", + "a team in a match. A player is defined as", + "being dead when they are eliminated but", + "have not yet respawned back into the game." + ], + "definitions": [ + [ + "Team - You can specify any Team Syntax to", + "define the array." + ] + ] + }, + { + "name": "ALL HEROES", + "contexts": [ + "An array of all heroes in Overwatch. Not", + "to be confused with the All Players array" + ], + "definitions": [] + }, + { + "name": "ALL LIVING PLAYERS", + "contexts": [ + "An array containing all living players on", + "a team in a match. A player is defined as", + "being alive when they are spawned into the", + "game but have not yet been eliminated since spawning." + ], + "definitions": [ + [ + "Team - You can specify any Team Syntax to", + "define the array." + ] + ] + }, + { + "name": "ALL PLAYERS", + "contexts": [ + "An array containing all players on a team in a match." + ], + "definitions": [ + [ + "Team - You can specify any Team Syntax to", + "define the array." + ] + ] + }, + { + "name": "ALL PLAYERS NOT ON OBJECTIVE", + "contexts": [ + "An array containing all players occupying", + "neither a payload nor a control point (either", + "on a team or in a match)." + ], + "definitions": [ + [ + "Team - You can specify any Team Syntax to", + "define the array." + ] + ] + }, + { + "name": "ALL PLAYERS ON OBJECTIVE", + "contexts": [ + "An array containing all players occupying", + "either a payload or a control point (either", + "on a team or in a match)." + ], + "definitions": [ + [ + "Team - You can specify any Team Syntax to", + "define the array." + ] + ] + }, + { + "name": "ALLOWED HEROES", + "contexts": [ + "The array of heroes from which the specified", + "player is currently allowed to select." + ], + "definitions": [ + [ + "Player - You can specify any Player Syntax", + "to define the array." + ] + ] + }, + { + "name": "ALTITUDE OF", + "contexts": [ + "The playerโ€™s current height in meters above", + "a surface. Results in a 0 whenever the place", + "is on a surface." + ], + "definitions": [ + [ + "Player - You can specify any Player Syntax", + "to define the array." + ] + ] + }, + { + "name": "AND", + "contexts": [ + "Whether both of the two inputs are true", + "or equivalent to true." + ], + "definitions": [ + [ + "Value - You can specify any Value Syntax", + "to define both of the required values." + ] + ] + }, + { + "name": "ANGLE DIFFERENCE", + "contexts": [ + "The difference between two angles, after", + "the angles are wrapped within +/- 180 of", + "each other, the result is positive if the", + "second angle is greater than the first angle,", + "otherwise the result is zero or negative." + ], + "definitions": [ + [ + "Angle - You can specify any Angle Syntax", + "to define both of the required values." + ] + ] + }, + { + "name": "APPEND TO ARRAY", + "contexts": [ + "A copy of an array with one or more values", + "appended to the end." + ], + "definitions": [ + [ + "Array - You must specify the Array Syntax", + "you are adding the value to." + ], + [ + "Value - You must specify the Value Syntax", + "that you are adding to the array." + ] + ] + }, + { + "name": "ARRAY CONTAINS", + "contexts": [ + "Whether the specified array contains the", + "specified value." + ], + "definitions": [ + [ + "Array - You must specify the Array Syntax", + "you are comparing the value to." + ], + [ + "Value - You must specify the Value Syntax", + "that you are comparing to the array." + ] + ] + }, + { + "name": "ARRAY SLICE", + "contexts": [ + "A copy of the specified array containing", + "only values from a specified index range." + ], + "definitions": [ + [ + "Array - You must specify the Array Syntax", + "you are comparing the value to." + ], + [ + "Start Index - The first index of the range.", + "Can use most Value Syntax to specify with." + ], + [ + "Count - The number of elements in the resulting", + "array. The resulting array will contain", + "fewer elements if the specified range exceeds", + "the bounds of the array. Can use any Number-based", + "Value Syntax to specify with." + ] + ] + }, + { + "name": "ATTACKER", + "contexts": [ + "The player that dealt damage for the event", + "currently being processed by this rule.", + "May be the same as the victim or the event player." + ], + "definitions": [] + }, + { + "name": "BACKWARD", + "contexts": [ + "Shorthand for the direction vector(0, 0,", + "-1) which points backwards." + ], + "definitions": [] + }, + { + "name": "CLOSEST PLAYER TO", + "contexts": [ + "The player closest to a position, optionally", + "restricted by team." + ], + "definitions": [ + [ + "Center - The position to which to measure", + "proximity. Can use most Value Syntax related", + "to reporting a position in the map." + ], + [ + "Team - You can specify any Team Syntax to", + "restrict which players is reported when", + "defining this value." + ] + ] + }, + { + "name": "COMPARE", + "contexts": [ + "Whether the comparison of the two inputs is true." + ], + "definitions": [ + [ + "Value - The left hand side of the comparison.", + "This may be any value type if the operation", + "is == or =!, otherwise real numbers are", + "expected. Can use most Value Syntax for the comparison." + ], + [ + "Condition - One of the standard conditions", + "to use for comparison. See the Condition", + "section for details." + ], + [ + "Value - The right hand side of the comparison.", + "This may be any value type if the operation", + "is == or =!, otherwise real numbers are", + "expected. Can use most Value Syntax for the comparison." + ] + ] + }, + { + "name": "CONTROL MODE SCORING PERCENTAGE", + "contexts": [ + "The score percentage for the specified team", + "in the control mode." + ], + "definitions": [ + [ + "Team - You can specify any Team Syntax to", + "define which team reported when defining this value." + ] + ] + }, + { + "name": "CONTROL MODE SCORING TEAM", + "contexts": [ + "The team that is currently accumulating", + "score percentage in control mode Results", + "in all if neither team is accumulating score." + ], + "definitions": [] + }, + { + "name": "COSINE FROM DEGREES", + "contexts": [ + "The cosine of a specified angle in degrees.", + "The cosine of the angle is equal to the", + "length of the adjacent side divided by the", + "length of the hypotenuse." + ], + "definitions": [ + [ + "Angle - You can specify any Angle Syntax", + "to define this value." + ] + ] + }, + { + "name": "COSINE FROM RADIANS", + "contexts": [ + "The cosine of a specified angle in radians.", + "The cosine of the angle is equal to the", + "length of the adjacent side divided by the", + "length of the hypotenuse. A radian is a", + "unit of angle, equal to an angle at the", + "center of a circle whose arc is equal in", + "length to the radius." + ], + "definitions": [ + [ + "Angle - You can specify any Angle Syntax", + "to define this value." + ] + ] + }, + { + "name": "COUNT OF", + "contexts": [ + "The number of elements in the specified array." + ], + "definitions": [ + [ + "Array - You must specify the Array Syntax", + "you are counting the elements to." + ] + ] + }, + { + "name": "CROSS PRODUCT", + "contexts": [ + "The cross product of the specified values." + ], + "definitions": [ + [ + "Value - You must specify the first Value", + "Syntax to compare to the second." + ], + [ + "Value - You must specify the first Value", + "Syntax to compare to the second." + ] + ] + }, + { + "name": "CURRENT ARRAY ELEMENT", + "contexts": [ + "The current array element being considered.", + "Only meaningful during the evaluation of", + "values such as filtered array and sorted array." + ], + "definitions": [] + }, + { + "name": "DIRECTION FROM ANGLES", + "contexts": [ + "The unit-length direction vector corresponding", + "to the specified angles." + ], + "definitions": [ + [ + "Horizontal Angle - The horizontal angle", + "in degrees used to construct the resulting", + "vector. Most angle based Value Syntax can be used here." + ], + [ + "Vertical Angle - The vertical angle in degrees", + "used to construct the resulting vector.", + "Most angle based Value Syntax can be used here." + ] + ] + }, + { + "name": "DIRECTION TOWARDS", + "contexts": [ + "The unit-length direction vector from position to another." + ], + "definitions": [ + [ + "Start Pos - The position from which the", + "resulting direction vector will point. Most", + "positional based Value Syntax can be used here." + ], + [ + "End Pos - The position to which the resulting", + "direction vector will point. Most positional", + "based Value Syntax can be used here." + ] + ] + }, + { + "name": "DISTANCE BETWEEN", + "contexts": [ + "The distance between two positions in meters." + ], + "definitions": [ + [ + "Start Pos - One of the two positions used", + "in the distance measurement. Most positional", + "based Value Syntax can be used here." + ], + [ + "End Pos - One of the two positions used", + "in the distance measurement. Most positional", + "based Value Syntax can be used here." + ] + ] + }, + { + "name": "DIVIDE", + "contexts": [ + "The ratio of two numbers or vectors. A vector", + "divided by a number will yield a scaled", + "vector. Division by zero results in zero." + ], + "definitions": [ + [ + "Value - The left-hand operand, may be any", + "value that results in a number or a vector.", + "Any Value Syntax may be used here." + ], + [ + "Value - The right-hand operand, may be any", + "value that results in a number or a vector.", + "Any Value Syntax may be used here." + ] + ] + }, + { + "name": "DOT PRODUCT", + "contexts": [ + "The dot product of the specified values.", + "The dot product tells you what amount of", + "one vector goes in the direction of another." + ], + "definitions": [ + [ + "Value - One of the two vector operands of", + "the dot product. Any positional based Syntax", + "may be used here." + ], + [ + "Value - One of the two vector operands of", + "the dot product. Any positional based Syntax", + "may be used here." + ] + ] + }, + { + "name": "DOWN", + "contexts": [ + "Shorthand for the direction vector(0, -1,", + "0) which points down." + ], + "definitions": [] + }, + { + "name": "EMPTY ARRAY", + "contexts": [ + "An array with no elements." + ], + "definitions": [] + }, + { + "name": "ENTITY EXISTS", + "contexts": [ + "Whether the specified player, icon entity,", + "or effect entity still exists. Useful for", + "determining if a player has left the match", + "or an entity has been destroyed." + ], + "definitions": [ + [ + "Entity - The player, icon entity, or effect", + "entity whose existance to check." + ] + ] + }, + { + "name": "EVENT PLAYER", + "contexts": [ + "The player executing the rule, as specified", + "by the event, may be the same as the attacker or victim." + ], + "definitions": [] + }, + { + "name": "FACING DIRECTION OF", + "contexts": [ + "The unit-length directional vector of a", + "playerโ€™s current facing relative to the", + "world. This value includes both horizontal", + "and vertical facing." + ], + "definitions": [ + [ + "Player - The player whose facing direction", + "to acquire. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "FALSE", + "contexts": [ + "The Boolean value of false." + ], + "definitions": [] + }, + { + "name": "FARTHEST PLAYER FROM", + "contexts": [ + "The player farthest to a position, optionally", + "restricted by team." + ], + "definitions": [ + [ + "Center - The position to which to measure", + "proximity. Can use most Value Syntax related", + "to reporting a position in the map." + ], + [ + "Team - You can specify any Team Syntax to", + "restrict which players is reported when", + "defining this value." + ] + ] + }, + { + "name": "FILTERED ARRAY", + "contexts": [ + "A copy of the specified array with any values", + "that do not match the specified condition removed." + ], + "definitions": [ + [ + "Array - The array whose copy will be filtered.", + "Can use most Array Syntax to specify." + ], + [ + "Condition - The condition that is evaluated", + "for each element of the copied array. If", + "the condition is true, the element is kept", + "in the copied array. Use the current array", + "element value to reference the element of", + "the array currently being considered." + ] + ] + }, + { + "name": "FIRST OF", + "contexts": [ + "The value at the started of the specified", + "array. Results in a 0 if the specified array is empty." + ], + "definitions": [ + [ + "Array - The array from which the value is", + "acquired. Can use most Array Syntax to specify." + ] + ] + }, + { + "name": "FLAG POSITION", + "contexts": [ + "The position of a specific teamโ€™s flag in", + "Capture the Flag." + ], + "definitions": [ + [ + "Team - The team whose flag position to acquire." + ] + ] + }, + { + "name": "FORWARD", + "contexts": [ + "Shorthand for the direction vector(0, 0,", + "1) which points forward." + ], + "definitions": [] + }, + { + "name": "GLOBAL VARIABLE", + "contexts": [ + "The current value of a global variable,", + "which is a variable which belongs to the", + "custom game itself." + ], + "definitions": [ + [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ] + ] + }, + { + "name": "HAS SPAWNED", + "contexts": [ + "Whether an entity has spawned in the world.", + "Results in false for players who have not", + "chosen a hero yet." + ], + "definitions": [ + [ + "Entity - The player, icon entity, or effect", + "entity whose presence in world to check." + ] + ] + }, + { + "name": "HAS STATUS", + "contexts": [ + "Whether the specified player has the specified", + "status, either from the set status action", + "or from a non-scripted game mechanic." + ], + "definitions": [ + [ + "Player - The player whose status to check." + ], + [ + "Status - The status to check for. Values", + "include Hacked, Burning, Knocked Down, Asleep,", + "Frozen, Unkillable, Invincible, Phased Out,", + "Rooted, or Stunned." + ] + ] + }, + { + "name": "HEALTH", + "contexts": [ + "The current health of a player including", + "armor and shields." + ], + "definitions": [ + [ + "Player - The player whose health to acquire." + ] + ] + }, + { + "name": "HEALTH PERCENT", + "contexts": [ + "The current health of a player as a percentage", + "including armor and shields." + ], + "definitions": [ + [ + "Player - The player whose health percentage to acquire." + ] + ] + }, + { + "name": "HERO", + "contexts": [ + "A hero constant. Specifies one of the available", + "heroes by name in the game." + ], + "definitions": [ + [ + "Hero - A hero constant. (i.e. Tracer, Reaper,", + "Mercy, Reinhardt. etc.)" + ] + ] + }, + { + "name": "HERO ICON STRING", + "contexts": [ + "Converts a hero parameter into a string", + "that shows up as an icon." + ], + "definitions": [ + [ + "Value - The hero that will be converted as an icon." + ] + ] + }, + { + "name": "HERO OF", + "contexts": [ + "The Current Hero of a Player." + ], + "definitions": [ + [ + "Player - The player whose hero to acquire.", + "Can use most player based Value Syntax to", + "retrieve this value." + ] + ] + }, + { + "name": "HORIZONTAL ANGLE FROM DIRECTION", + "contexts": [ + "The horizontal angle in degrees corresponding", + "to the specified direction vector." + ], + "definitions": [ + [ + "Direction - The direction vector from which", + "to acquire a horizontal angle in degrees.", + "The vector is unitized before calculation", + "begins. Can use most Vector based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "HORIZONTAL ANGLE TOWARDS", + "contexts": [ + "The horizontal angle in degrees from a playerโ€™s", + "current forward direction to the specified", + "position. The result is positive if the", + "position is on the playerโ€™s left, otherwise", + "the result is zero or negative." + ], + "definitions": [ + [ + "Player - The player whose current facing", + "angle begins. Can use most player based", + "Value Syntax to retrieve this value." + ], + [ + "Position - The position in the world in", + "where the angle ends." + ] + ] + }, + { + "name": "HORIZONTAL FACING ANGLE OF", + "contexts": [ + "The directional angle in degrees of a playerโ€™s", + "current facing relative to the world. This", + "value increases as the player rotates to", + "the left (wrapping around at +/- 180)." + ], + "definitions": [ + [ + "Player - The player whose facing direction", + "to acquire. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "HORIZONTAL SPEED OF", + "contexts": [ + "The current horizontal speed of a player", + "in meters per second. This measurement excludes", + "all vertical motion." + ], + "definitions": [ + [ + "Player - The player whose facing direction", + "to acquire. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "INDEX OF ARRAY VALUE", + "contexts": [ + "The index of a value within an array or", + "-1 if no such value can be found." + ], + "definitions": [ + [ + "Array - The array in which to search for", + "the specified value. Can use most Array", + "based Value Syntax to retrieve this value." + ], + [ + "Value - The value for which to search. Can", + "use most Number based Value Syntax to retrive this value." + ] + ] + }, + { + "name": "IS ALIVE", + "contexts": [ + "Determines whether a player is alive. Returns", + "a Boolean value." + ], + "definitions": [ + [ + "Player - The player whose life to check.", + "Can use most player based Value Syntax to", + "retrive this value." + ] + ] + }, + { + "name": "IS ASSEMBLING HEROES", + "contexts": [ + "Whether the match is currently in its assemble heroes phase." + ], + "definitions": [] + }, + { + "name": "IS BETWEEN ROUNDS", + "contexts": [ + "Whether the match is between rounds." + ], + "definitions": [] + }, + { + "name": "IS BUTTON HELD", + "contexts": [ + "Whether a player is holding a specific button." + ], + "definitions": [ + [ + "Player - The player whose button to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + [ + "Button - The button to check. Designed by", + "any action inputs by ability but not directional", + "inputs. (i.e. Primary Fire, Secondary Fire,", + "Ultimate Ability, Jump, Crouch, etc.)" + ] + ] + }, + { + "name": "IS COMMUNICATING", + "contexts": [ + "Whether a player is using a specific communication", + "type (such as emote, using a voice line, etc.)." + ], + "definitions": [ + [ + "Player - The player whose communication", + "status to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + [ + "Type - The type of communication to consider.", + "The duration of emotes is exact, the duration", + "of voice lines is assumed to be 4 seconds,", + "and all other durations are assumed to be", + "2 seconds. Any of the four emote slots,", + "four voice lines slots, or any standard", + "communication (Need healing, Ultimate Status,", + "etc.) can be designated." + ] + ] + }, + { + "name": "IS COMMUNICATING ANY", + "contexts": [ + "Whether a player is using any communication", + "type (such as emoting, using a voice line, etc.)" + ], + "definitions": [ + [ + "Player - The player whose communication", + "status to check. Can use most player based", + "Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS COMMUNICATING ANY EMOTE", + "contexts": [ + "Whether a player is using a emote." + ], + "definitions": [ + [ + "Player - The player whose emoting status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS COMMUNICATING ANY VOICE LINE", + "contexts": [ + "Whether a player is using a voice line.", + "(The duration of a voice line is assumed", + "to be 4 seconds.)" + ], + "definitions": [ + [ + "Player - The player whose voice line status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS CONTROL MODE POINT LOCKED", + "contexts": [ + "Whether the point is locked in control mode." + ], + "definitions": [] + }, + { + "name": "IS CROUCHING", + "contexts": [ + "Whether a player is crouching." + ], + "definitions": [ + [ + "Player - The player whose crouching status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS CTF MODE IN SUDDEN DEATH", + "contexts": [ + "Whether the current game of capture the", + "flag is in sudden death." + ], + "definitions": [] + }, + { + "name": "IS DEAD", + "contexts": [ + "Whether a player is dead." + ], + "definitions": [ + [ + "Player - The player whose death to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ] + ] + }, + { + "name": "IS FIRING PRIMARY", + "contexts": [ + "Whether the specified playerโ€™s primary weapon", + "attack is being used." + ], + "definitions": [ + [ + "Player - The player whose primary weapon", + "attack to check. Can use most player based", + "Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS FIRING SECONDARY", + "contexts": [ + "Whether the specified playerโ€™s secondary", + "weapon attack is being used." + ], + "definitions": [ + [ + "Player - The player whose secondary weapon", + "attack to check. Can use most player based", + "Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS FLAG AT BASE", + "contexts": [ + "Whether a specific teamโ€™s flag is at its", + "base in capture the flag." + ], + "definitions": [ + [ + "Team - The player whose flag to check. Can", + "use most team based Value Syntax to retrive this value." + ] + ] + }, + { + "name": "IS GAME IN PROGRESS", + "contexts": [ + "Whether the main phase of the match is in", + "progress (during which time combat and scoring are allowed)." + ], + "definitions": [] + }, + { + "name": "IS HERO BEING PLAYED", + "contexts": [ + "Whether a specific hero is being played", + "(either on a team or in the match)." + ], + "definitions": [ + [ + "Hero - The hero to check for play. Can use", + "most team based Value Syntax to retrive", + "this value. Any applicable Hero based Value", + "Syntax can be used." + ], + [ + "Team - The team or teams on which to check", + "for the hero being played. Can use most", + "team based Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS IN AIR", + "contexts": [ + "Whether a player is airborne." + ], + "definitions": [ + [ + "Player - The player whose airborne status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS IN LINE OF SIGHT", + "contexts": [ + "Whether two positions have line of sight", + "with each other." + ], + "definitions": [ + [ + "Start Pos - The start position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + [ + "End Pos - The end position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + [ + "Barriers - Defines how barriers affect line", + "of sight, when considering whether a barrier", + "belongs to an enemy, the allegiance of the", + "player provided to start pos (if any) is", + "used. Can be set to โ€œBarriers do not block", + "LOSโ€, Enemy barriers block LOS\", and โ€œAll", + "barriers block LOSโ€." + ] + ] + }, + { + "name": "IS IN SETUP", + "contexts": [ + "Whether the match is currently in its setup phase." + ], + "definitions": [] + }, + { + "name": "IS IN SPAWN ROOM", + "contexts": [ + "Whether a specific player is in the spawn", + "room (and is thus being healed and able", + "to change heroes)." + ], + "definitions": [ + [ + "Player - The player whose spawn room status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS IN VIEW ANGLE", + "contexts": [ + "Whether a location is within view of a player." + ], + "definitions": [ + [ + "Player - The player whose view to use for", + "the check. Can use most player based Value", + "Syntax to retrieve this value." + ], + [ + "Location - The location to test if itโ€™s", + "within view. Most positional based Value", + "Syntax can be used here." + ], + [ + "View Angle - The view angle to compare against", + "in degrees. Can use most angle based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS MATCH COMPLETE", + "contexts": [ + "Whether the match has finished." + ], + "definitions": [] + }, + { + "name": "IS MOVING", + "contexts": [ + "Whether a specific player is moving (as", + "defined by having a non-zero constant speed)." + ], + "definitions": [ + [ + "Player - The player whose moving status", + "status to check. Can use most player based", + "Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS OBJECTIVE COMPLETE", + "contexts": [ + "Whether the specified objective has been", + "completed Results in false if the game mode", + "is not assault, escort, or assault/escort (hybrid)." + ], + "definitions": [ + [ + "Number - The index of the objective to consider,", + "starting at 0 and counting up. Each control", + "point, payload checkpoint, and payload destination", + "has its own index. Can use most number based", + "Value Syntax to retrieve this value. Value", + "must be in the form of an integer (whole number)." + ] + ] + }, + { + "name": "IS ON GROUND", + "contexts": [ + "Whether a player is on the ground (or other", + "walkable surface)." + ], + "definitions": [ + [ + "Player - The player whose ground status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS ON OBJECTIVE", + "contexts": [ + "Whether a specific player is currently occupying", + "a payload or capture point." + ], + "definitions": [ + [ + "Player - The player whose objective status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS ON WALL", + "contexts": [ + "Whether a player is on a wall (climbing or riding)." + ], + "definitions": [ + [ + "Player - The player whose wall status to", + "check. Can use most player based Value Syntax", + "to retrieve this value." + ] + ] + }, + { + "name": "IS PORTRAIT ON FIRE", + "contexts": [ + "Whether a specific playerโ€™s portrait is on fire." + ], + "definitions": [ + [ + "Player - The player whose portrait to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ] + ] + }, + { + "name": "IS STANDING", + "contexts": [ + "Whether a player is standing (defined as", + "both not moving and not in the air)." + ], + "definitions": [ + [ + "Player - The player whose standing status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS TEAM ON DEFENSE", + "contexts": [ + "Whether the specified team is currently", + "on defense in a standard match." + ], + "definitions": [ + [ + "Team - The team whose role to check. Can", + "use most Team Based Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS TEAM ON OFFENSE", + "contexts": [ + "Whether the specified team is currently", + "on offense in a standard match." + ], + "definitions": [ + [ + "Team - The team whose role to check. Can", + "use most Team Based Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS TRUE FOR ALL", + "contexts": [ + "Whether the specified condition evaluates", + "to true for every value in the specified array." + ], + "definitions": [ + [ + "Array - The array whose values will be considered.", + "Can use most Array Based Value Syntax to", + "retrieve this value." + ], + [ + "Condition - The condition that is evaluated", + "for each element of the specified array,", + "Use the current array element value to reference", + "the element of the array currently being", + "considered. Can use most Comparative based", + "Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS TRUE FOR ANY", + "contexts": [ + "Whether the specified condition evaluates", + "to true for any value in the specified array." + ], + "definitions": [ + [ + "Array - The array whose values will be considered.", + "Can use most Array Based Value Syntax to", + "retrieve this value." + ], + [ + "Condition - The condition that is evaluated", + "for each element of the specified array,", + "Use the current array element value to reference", + "the element of the array currently being", + "considered. Can use most Comparative based", + "Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS USING ABILITY 1", + "contexts": [ + "Whether the specified player is using ability 1." + ], + "definitions": [ + [ + "Player - The player whose ability 1 usage", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS USING ABILITY 2", + "contexts": [ + "Whether the specified player is using ability 2." + ], + "definitions": [ + [ + "Player - The player whose ability 2 usage", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS USING ULTIMATE", + "contexts": [ + "Whether the specified player is using an", + "ultimate ability." + ], + "definitions": [ + [ + "Player - The player whose ultimate ability", + "usage to check. Can use most player based", + "Value Syntax to retrieve this value." + ] + ] + }, + { + "name": "IS WAITING FOR PLAYERS", + "contexts": [ + "Whether the match is waiting for players", + "to join before starting." + ], + "definitions": [] + }, + { + "name": "LAST CREATED ENTITY", + "contexts": [ + "A reference to the last effect or icon entity", + "created by the event player (or created", + "at the global level)." + ], + "definitions": [] + }, + { + "name": "LAST DAMAGE OVER TIME ID", + "contexts": [ + "An ID representing the most recent damage", + "over time action that was executed by the", + "event player (or executed at the global level)." + ], + "definitions": [] + }, + { + "name": "LAST HEAL OVER TIME ID", + "contexts": [ + "An ID representing the most recent heal", + "over time action that was executed by the", + "event player (or executed at the global level)." + ], + "definitions": [] + }, + { + "name": "LAST OF", + "contexts": [ + "The value at the end of the specified array.", + "Results in a 0 if the specified array is empty." + ], + "definitions": [ + [ + "Array - The array from which the value is", + "created. Can use most Array based Value", + "Syntax to provide this data." + ] + ] + }, + { + "name": "LAST TEXT ID", + "contexts": [ + "A reference to the last piece of text created", + "by the event player (or created at the global", + "level) via the create HUD text or create", + "in-world text action." + ], + "definitions": [] + }, + { + "name": "LEFT", + "contexts": [ + "Shorthand for the directional vector(1,", + "0, 0), which points to the left." + ], + "definitions": [] + }, + { + "name": "LOCAL VECTOR OF", + "contexts": [ + "The vector in local coordinates corresponding", + "to the provided vector in world coordinates." + ], + "definitions": [ + [ + "World Vector - The vector in world coordinates", + "that will be converted to local coordinates.", + "Can use most Vector based Value Syntax to", + "provide this data." + ], + [ + "Relative player - The player to whom the", + "resulting vector will be relative. Can use", + "most Player based Value Syntax to provide this data." + ], + [ + "Transformation - Specifies whether the vector", + "should receive a rotation and a translation", + "(usually applied to positions) or only a", + "rotation (usually applied to directions", + "and velocities). You can choose from Rotation", + "or Rotation and Translation. Rotation is", + "that the resulting vector will be rotated", + "to the new frame of reference. Use this", + "option when the provided vector is in a", + "direction or velocity. Rotation and translation", + "is that the resulting vector will be rotated", + "and translated to the new frame of reference.", + "Use this option when the provided vector is a position." + ] + ] + }, + { + "name": "MATCH ROUND", + "contexts": [ + "The current round of the match, counting", + "up from 1. This will return a numerical value" + ], + "definitions": [] + }, + { + "name": "MATCH TIME", + "contexts": [ + "The amount of time in seconds remaining", + "in the current game mode phase. This will", + "return a numerical value." + ], + "definitions": [] + }, + { + "name": "MAX", + "contexts": [ + "The greater of the two numbers. This will", + "return a numerical value of two number values compared." + ], + "definitions": [ + [ + "Value - The left-hand operand. May be any", + "value that results in a number. Can use", + "any Number based Value syntax to compare with." + ], + [ + "Value - The right-hand operand. May be any", + "value that results in a number. Can use", + "any Number based Value syntax to compare with." + ] + ] + }, + { + "name": "MAX HEALTH", + "contexts": [ + "The max health of a player, including armor and shields." + ], + "definitions": [ + [ + "Player - The player whose max health to", + "compare. Can use any Player based Value", + "syntax to provide with." + ] + ] + }, + { + "name": "MIN", + "contexts": [ + "The lesser of the two numbers. This will", + "return a numerical value of two number values compared." + ], + "definitions": [ + [ + "Value - The left-hand operand. May be any", + "value that results in a number. Can use", + "any Number based Value syntax to compare with." + ], + [ + "Value - The right-hand operand. May be any", + "value that results in a number. Can use", + "any Number based Value syntax to compare with." + ] + ] + }, + { + "name": "MODULO", + "contexts": [ + "The remainder of the left-hand operand divided", + "by the right-hand operand. Any number modulo", + "zero will result in zero. This will return", + "a numerical value of two number values compared.", + "For example 7 divided by 2 will result in", + "1 for the Modulo." + ], + "definitions": [ + [ + "Value - The left-hand operand. May be any", + "value that results in a number. Can use", + "any Number based Value syntax." + ], + [ + "Value - The right-hand operand. May be any", + "value that results in a number. Can use", + "any Number based Value syntax." + ] + ] + }, + { + "name": "MULTIPLY", + "contexts": [ + "The product of two numbers or vectors. A", + "vector multiplied by a number will yield", + "a scaled vector." + ], + "definitions": [ + [ + "Value - The left-hand operand. May be any", + "value that results in a number or a vector.", + "Can use any Number based or Vector based", + "Value syntax to multiply with." + ], + [ + "Value - The left-hand operand. May be any", + "value that results in a number or a vector.", + "Can use any Number based or Vector based", + "Value syntax to multiply with." + ] + ] + }, + { + "name": "NEAREST WALKABLE POSITION", + "contexts": [ + "The position closest to the specified position", + "that can be stood on and is accessible from a spawn point." + ], + "definitions": [ + [ + "Position - The position from which to search", + "for the nearest walkable position. Can use", + "any Vector based Value syntax to divide with." + ] + ] + }, + { + "name": "NORMALIZE", + "contexts": [ + "The unit-length normalization of a vector." + ], + "definitions": [ + [ + "Vector - The vector to normalize. Can use", + "any Vector based Value syntax to divide with." + ] + ] + }, + { + "name": "NOT", + "contexts": [ + "Whether the input is false (or the equivalent to false)" + ], + "definitions": [ + [ + "Value - When this input is false (or equivalent", + "to false), then the not value is true. Otherwise,", + "the not value is false. Can use most Boolean-based", + "Value Syntax to provide this value." + ] + ] + }, + { + "name": "NULL", + "contexts": [ + "The absence of a player, used when no player", + "is desired for a particular input, equivalent", + "to the real number 0 for the purposes of", + "comparison and debugging." + ], + "definitions": [] + }, + { + "name": "NUMBER", + "contexts": [ + "A real number constant." + ], + "definitions": [ + [ + "Number - A real number constant. Can use", + "most Number based Value Syntax to provide this value." + ] + ] + }, + { + "name": "NUMBER OF DEAD PLAYERS", + "contexts": [ + "The number of dead players on a team or in the match." + ], + "definitions": [ + [ + "Team - The team or teams on which to count", + "players. Can use most Team based Value Syntax", + "to provide this value." + ] + ] + }, + { + "name": "NUMBER OF DEATHS", + "contexts": [ + "The number of deaths a specific player has", + "earned. This value only accumulates while", + "a game is in progress." + ], + "definitions": [ + [ + "Player - The player whose death count to", + "acquire. Can use most Player based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "NUMBER OF ELIMINATIONS", + "contexts": [ + "The number of eliminations a specific player", + "has earned. This value only accumulates", + "while a game is in progress." + ], + "definitions": [ + [ + "Player - The player whose elimination count", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "NUMBER OF FINAL BLOWS", + "contexts": [ + "The number of final blows a specific player", + "has earned. This value only accumulates", + "while a game is in progress." + ], + "definitions": [ + [ + "Player - The player whose final blow count", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "NUMBER OF HEROES", + "contexts": [ + "The number of players playing a specific", + "hero on a team or in the match." + ], + "definitions": [ + [ + "Hero - The hero to check for play. Can use", + "most Hero based Value Syntax to provide this value." + ], + [ + "Team - The team or teams on which to check", + "for the hero being played. Can use most", + "Team based Value Syntax to provide this value." + ] + ] + }, + { + "name": "NUMBER OF LIVING PLAYERS", + "contexts": [ + "The number of living players on a team or in the match." + ], + "definitions": [ + [ + "Team - The team or teams on which to count", + "players. Can use most Team based Value Syntax", + "to provide this value." + ] + ] + }, + { + "name": "NUMBER OF PLAYERS", + "contexts": [ + "The number of players on a team or in the match." + ], + "definitions": [ + [ + "Team - The team or teams on which to count", + "players. Can use most Team based Value Syntax", + "to provide this value." + ] + ] + }, + { + "name": "NUMBER OF PLAYERS ON OBJECTIVE", + "contexts": [ + "The number of players occupying a payload", + "or a control point (either on a team or in the match)." + ], + "definitions": [ + [ + "Team - The team or teams on which to count", + "players. Can use most Team based Value Syntax", + "to provide this value." + ] + ] + }, + { + "name": "OBJECTIVE INDEX", + "contexts": [ + "The control point, payload checkpoint, or", + "payload destination currently active (either", + "0, 1, or 2). Valid in Assault, Assault/Escort", + "(Hybrid), Escort, and Control." + ], + "definitions": [] + }, + { + "name": "OBJECTIVE POSITION", + "contexts": [ + "The position in the world of the specified", + "objective (either a control point, a payload", + "checkpoint, or a payload destination) Valid", + "in Assault, Assault/Escort (Hybrid), Escort, and Control." + ], + "definitions": [ + [ + "Number - The index of the objective to consider,", + "starting at 0 and counting up. Each control", + "point, payload checkpoint, and payload destination", + "as its own index. Can use most Number based", + "Value Syntax to provide this value, but", + "must output in a integer of 0, 1, or 2." + ] + ] + }, + { + "name": "OPPOSITE TEAM OF", + "contexts": [ + "The team opposite the specified team." + ], + "definitions": [ + [ + "Team - The team whose opposite to acquire.", + "If all, the result will be all. Can use", + "most Team based Value Syntax to provide this value." + ] + ] + }, + { + "name": "OR", + "contexts": [ + "Whether either of the two inputs are true", + "(or equivalent to true)." + ], + "definitions": [ + [ + "Value - One of the two inputs considered.", + "If either one is true (or equivalent to", + "true), then the OR value is true. Can use", + "most Boolean based Value Syntax to provide this value." + ], + [ + "Value - One of the two inputs considered.", + "If either one is true (or equivalent to", + "true), then the OR value is true. Can use", + "most Boolean based Value Syntax to provide this value." + ] + ] + }, + { + "name": "PAYLOAD POSITION", + "contexts": [ + "The position in the world of the active payload." + ], + "definitions": [] + }, + { + "name": "PAYLOAD PROGRESS PERCENTAGE", + "contexts": [ + "The current progress towards the destination", + "for the active payload (expressed as a percentage)." + ], + "definitions": [] + }, + { + "name": "PLAYER CARRYING FLAG", + "contexts": [ + "The player carrying a particular teamโ€™s", + "flag in capture the flag. Results in null", + "if no player is carrying the flag." + ], + "definitions": [ + [ + "Team - The team whose whose flag to check.", + "Can use most Team based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "PLAYER CLOSEST TO RETICLE", + "contexts": [ + "The player closest to the reticle of the", + "specified player, optionally restricted by team." + ], + "definitions": [ + [ + "Player - The player from whose reticle to", + "search for the closest player. Can use most", + "Player based Value Syntax to provide this value." + ], + [ + "Team - The team or teams on which to search", + "for the closest player. Can use most Team", + "based Value Syntax to provide this value." + ] + ] + }, + { + "name": "PLAYER VARIABLE", + "contexts": [ + "The current value of a player variable,", + "which is a variable that belongs to a specific player." + ], + "definitions": [ + [ + "Player - The player whose variable to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ] + ] + }, + { + "name": "PLAYERS IN SLOT", + "contexts": [ + "The player or array of players who occupy", + "a specific slot in the game." + ], + "definitions": [ + [ + "Slot - The slot number from each to acquire", + "a player or players. In team games, each", + "team has slots 0 through 5. In free-for-all", + "games, slots are numbered 0 through 11.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + [ + "Team - The team or teams from which to acquire", + "a player or players. Can use most Team based", + "Value Syntax to provide this value." + ] + ] + }, + { + "name": "PLAYERS IN VIEW ANGLE", + "contexts": [ + "The players who are within a specific view", + "angle of a specific playerโ€™s reticle, optionally", + "restricted by team." + ], + "definitions": [ + [ + "Player - The player whose view to use for", + "the check. Can use most Player based Value", + "Syntax to provide this value." + ], + [ + "Team - The team or teams on which to consider", + "players. Can use most Team based Value Syntax", + "to provide this value." + ], + [ + "View Angle - The view angle to compare against", + "in degrees. Can use most Angle based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "PLAYERS ON HERO", + "contexts": [ + "The array of players playing a specific", + "hero on a team or in the match." + ], + "definitions": [ + [ + "Hero - The hero to check for play. Can use", + "most Hero based Value Syntax to provide this value." + ], + [ + "Team - The team or teams on which to check", + "for the hero being played. Can use most", + "Team based Value Syntax to provide this value." + ] + ] + }, + { + "name": "PLAYERS WITHIN RADIUS", + "contexts": [ + "An array containing all players within a", + "certain distance of a position, optionally", + "restricted by team and line of sight." + ], + "definitions": [ + [ + "Center - The center position from which", + "to measure distance. Can use most Vector", + "based Value Syntax to provide this value." + ], + [ + "Radius - The radius in meters inside which", + "players must be in order to be included", + "in the resulting array. Can use most Number", + "based Value Syntax to provide this value." + ], + [ + "Team - The team or teams to which a player", + "must belong to be included in the resulting", + "array. Can use most Team based Value Syntax", + "to provide this value." + ], + [ + "LOS Check - Specifies whether and how a", + "player must pass a line-of-sight check to", + "be included in the resulting array. You", + "can choose from Off, Surfaces, Surfaces", + "and Enemy Barriers, and Surfaces and All", + "Barriers. Off will result in the line of", + "sight is never blocked, allowing results", + "through walls. Surfaces will result in line", + "of sight is blocked by ceilings, walls,", + "floors, platforms, and any fixed object", + "that blocks projectiles. Surfaces and Enemy", + "Barriers will result in line of sight is", + "blocked by ceilings, walls, floors, platforms,", + "any fixed object that blocks projectiles,", + "and barriers created by the enemy team.", + "Surfaces and All Barriers will result in", + "line of sight is blocked by ceilings, walls,", + "floors, platforms, any fixed object that", + "blocks projectiles, and all barriers." + ] + ] + }, + { + "name": "POINT CAPTURE PERCENTAGE", + "contexts": [ + "The current progress towards capture for", + "the active control point (expressed as a percentage)." + ], + "definitions": [] + }, + { + "name": "POSITION OF", + "contexts": [ + "The current position of a player as a vector." + ], + "definitions": [ + [ + "Player - The player whose position to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "RAISE TO POWER", + "contexts": [ + "The left-hand operand raised to the power", + "of the right-hand operand. For example 2 ^ 3 = 8" + ], + "definitions": [ + [ + "Value - The left-hand operand. May be any", + "value that results in a number. Can use", + "most Number based Value Syntax to provide this value." + ], + [ + "Value - The right-hand operand. May be any", + "value that results in a number. Can use", + "most Number based Value Syntax to provide this value." + ] + ] + }, + { + "name": "RANDOM INTEGER", + "contexts": [ + "A random integer between the specified min", + "and max, inclusive." + ], + "definitions": [ + [ + "MIN - The smallest integer allowed. If a", + "real number is provided to this input, it", + "is rounded to the nearest integer. Can use", + "most Number based Value Syntax to provide this value." + ], + [ + "MAX - The largest integer allowed. If a", + "real number is provided to this input, it", + "is rounded to the nearest integer. Can use", + "most Number based Value Syntax to provide this value." + ] + ] + }, + { + "name": "RANDOM REAL", + "contexts": [ + "A random real number between the specified min and max." + ], + "definitions": [ + [ + "MIN - The smallest real number allowed.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + [ + "MAX - The largest real number allowed. Can", + "use most Number based Value Syntax to provide this value." + ] + ] + }, + { + "name": "RANDOM VALUE IN ARRAY", + "contexts": [ + "A random value from the specified array." + ], + "definitions": [ + [ + "Array - The array from which to randomly", + "take a value. If a non-array value is provided,", + "the result is simply the provided value.", + "Can use most Array based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "RANDOMIZED ARRAY", + "contexts": [ + "A copy of the specified array with the values", + "in a random order" + ], + "definitions": [ + [ + "Array - The array whose copy will be randomized.", + "Can use most Array based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "RAY CAST HIT NORMAL - New!", + "contexts": [ + "The surface normal at the ray cast hit position", + "(or from end pos to start pos if no hit occurs)." + ], + "definitions": [ + [ + "Start POS - The start position for the ray", + "cast. If a player is provided. A position", + "2 meters above the playerโ€™s feet is used.", + "Can use most Vector based Value Syntax to", + "provide this value." + ], + [ + "End POS - The end position for the ray cast.", + "If a player is provided. A position 2 meters", + "above the playerโ€™s feet is used. Can use", + "most Vector based Value Syntax to provide this value." + ], + [ + "Players to include - Which players can be", + "hit by this ray cast. Can use most Player", + "based Value Syntax to provide this value." + ], + [ + "Players to exclude - Which players cannot", + "be hit by this ray cast. This list takes", + "precedence over players to include. Can", + "use most Player based Value Syntax to provide this value." + ], + [ + "Include player owned objects - Whether player", + "owned objects (such as barriers or turrets)", + "should be included in the ray cast. Can", + "use most Boolean based Value Syntax to provide this value." + ] + ] + }, + { + "name": "RAY CAST HIT PLAYER - New!", + "contexts": [ + "The player hit by the ray cast (or null", + "if no player is hit)." + ], + "definitions": [ + [ + "Start POS - The start position for the ray", + "cast. If a player is provided. A position", + "2 meters above the playerโ€™s feet is used.", + "Can use most Vector based Value Syntax to", + "provide this value." + ], + [ + "End POS - The end position for the ray cast.", + "If a player is provided. A position 2 meters", + "above the playerโ€™s feet is used. Can use", + "most Vector based Value Syntax to provide this value." + ], + [ + "Players to include - Which players can be", + "hit by this ray cast. Can use most Player", + "based Value Syntax to provide this value." + ], + [ + "Players to exclude - Which players cannot", + "be hit by this ray cast. This list takes", + "precedence over players to include. Can", + "use most Player based Value Syntax to provide this value." + ], + [ + "Include player owned objects - Whether player", + "owned objects (such as barriers or turrets)", + "should be included in the ray cast. Can", + "use most Boolean based Value Syntax to provide this value." + ] + ] + }, + { + "name": "RAY CAST HIT POSITION - New!", + "contexts": [ + "The position where the ray cast hits a surface,", + "object, or player (or the end POS if no hit occurs)." + ], + "definitions": [ + [ + "Start POS - The start position for the ray", + "cast. If a player is provided. A position", + "2 meters above the playerโ€™s feet is used.", + "Can use most Vector based Value Syntax to", + "provide this value." + ], + [ + "End POS - The end position for the ray cast.", + "If a player is provided. A position 2 meters", + "above the playerโ€™s feet is used. Can use", + "most Vector based Value Syntax to provide this value." + ], + [ + "Players to include - Which players can be", + "hit by this ray cast. Can use most Player", + "based Value Syntax to provide this value." + ], + [ + "Players to exclude - Which players cannot", + "be hit by this ray cast. This list takes", + "precedence over players to include. Can", + "use most Player based Value Syntax to provide this value." + ], + [ + "Include player owned objects - Whether player", + "owned objects (such as barriers or turrets)", + "should be included in the ray cast. Can", + "use most Boolean based Value Syntax to provide this value." + ] + ] + }, + { + "name": "REMOVE FROM ARRAY", + "contexts": [ + "A copy of an array with one or more values", + "removed (if found)." + ], + "definitions": [ + [ + "Array - The array from which to remove values.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + [ + "Value - The value to remove from the array", + "(if found), if this value itself an array,", + "each matching element is removed. Can use", + "most Array based or Number based Value Syntax", + "to provide this value." + ] + ] + }, + { + "name": "RIGHT", + "contexts": [ + "Shorthand for the directional vector (-1,", + "0, 0), which points to the right." + ], + "definitions": [] + }, + { + "name": "ROUND TO INTEGER", + "contexts": [ + "The integer to which the specified value rounds." + ], + "definitions": [ + [ + "Value - The real number to round. Can use", + "most Number based Value Syntax to provide this value." + ], + [ + "Rounding Type - Determines the direction", + "in which the value will be rounded. You", + "can round up, down, or to the nearest integer." + ] + ] + }, + { + "name": "SCORE OF", + "contexts": [ + "The current score of a player. Results in", + "0 if the game mode is not free-for-all." + ], + "definitions": [ + [ + "Player - The player whose score to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "SINE FROM DEGREES", + "contexts": [ + "Sine of the specified angle in degrees.", + "The sine is the ratio of the length of the", + "side that is opposite that angle to the", + "length of the longest side of the triangle", + "(the hypotenuse)." + ], + "definitions": [ + [ + "Angle - Angle in degrees. Can use most Player", + "based Value Syntax to provide this value." + ] + ] + }, + { + "name": "SINE FROM RADIANS", + "contexts": [ + "Sine of the specified angle in radians.", + "The sine is the ratio of the length of the", + "side that is opposite that angle to the", + "length of the longest side of the triangle", + "(the hypotenuse). A radian is a unit of", + "angle, equal to an angle at the center of", + "a circle whose arc is equal in length to the radius." + ], + "definitions": [ + [ + "Angle - Angle in radians. Can use most Player", + "based Value Syntax to provide this value." + ] + ] + }, + { + "name": "SLOT OF", + "contexts": [ + "The slot number of the specified player.", + "In team games, each team has slots 0 through", + "5. In free-for-all games, slots are numbers 0 through 11." + ], + "definitions": [ + [ + "Player - The player whose slot number to", + "acquire. Can use most Player based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "SORTED ARRAY", + "contexts": [ + "A copy of the specified array with the values", + "sorted according to the value rank that", + "is evaluated for each element." + ], + "definitions": [ + [ + "Array - The array whose copy will be sorted.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + [ + "Value Rank - The value that is evaluated", + "for each element of the copied array. The", + "array is sorted by this rank in ascending", + "order. Use the current array element value", + "to reference the element of the array currently", + "being considered. Can use most Number based", + "Value Syntax to provide this value." + ] + ] + }, + { + "name": "SPEED OF", + "contexts": [ + "The current speed of a player in meters per second." + ], + "definitions": [ + [ + "Player - The player whose speed to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "SPEED OF IN DIRECTION", + "contexts": [ + "The current speed of a player in a specific", + "direction in meters per second." + ], + "definitions": [ + [ + "Player - The player whose speed to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + [ + "Direction - The direction of travel in which", + "to measure the playerโ€™s speed. Can use most", + "Vector based Value Syntax to provide this value." + ] + ] + }, + { + "name": "SQUARE ROOT", + "contexts": [ + "The square root of the specified value.", + "For example the square root of 9 is 3." + ], + "definitions": [ + [ + "Value - The real number value whose square", + "root will be computed. Negative values result", + "in zero. Can use most Number based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "STRING", + "contexts": [ + "Text formed from a selection of strings", + "and specified values." + ], + "definitions": [ + [ + "String - How the string will be structured", + "using a series of text and phrases." + ], + [ + "{0} - The first value in the string." + ], + [ + "{1} - The second value in the string." + ], + [ + "{2} - The third value in the string." + ] + ] + }, + { + "name": "SUBTRACT", + "contexts": [ + "The difference between two numbers or vectors." + ], + "definitions": [ + [ + "Value - The left-hand operand. May be any", + "value that results in a number or a vector.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + [ + "Value - The right-hand operand. May be any", + "value that results in a number or a vector.", + "Can use most Number based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "TEAM", + "contexts": [ + "A team constant. The all option represents", + "both teams in a team or all players in a", + "free-for-all game." + ], + "definitions": [ + [ + "Team - Specifies which team the value outputs", + "to. This can be set to All, Team 1, or Team 2." + ] + ] + }, + { + "name": "TEAM OF", + "contexts": [ + "The team of a player. If the game mode is", + "free-for-all, the team is considered to be all." + ], + "definitions": [ + [ + "Player - The player whose team to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "TEAM SCORE", + "contexts": [ + "The current score for the specified team.", + "Results in a 0 in free-for-all game modes." + ], + "definitions": [ + [ + "Team - The team whose score to acquire.", + "Can use most Team based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "THROTTLE OF", + "contexts": [ + "The directional input of a player, represented", + "by a vector with a horizontal input on the", + "X component (positive to the left) and vertical", + "input on the Z component (positive upward)." + ], + "definitions": [ + [ + "Player - The player whose directional input", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "TOTAL TIME PLAYED", + "contexts": [ + "The total time in seconds that have elapsed", + "since the game instance was created (including", + "setup time and transitions)." + ], + "definitions": [] + }, + { + "name": "TRUE", + "contexts": [ + "The Boolean value of true." + ], + "definitions": [] + }, + { + "name": "ULTIMATE CHARGE PERCENT", + "contexts": [ + "The current ultimate ability charge percentage of a player." + ], + "definitions": [ + [ + "Player - The player whose ultimate charge", + "percentage to acquire. Can use most Player", + "based Value Syntax to provide this value." + ] + ] + }, + { + "name": "UP", + "contexts": [ + "Shorthand for the directional vector(0,", + "1, 0). Which points upward." + ], + "definitions": [] + }, + { + "name": "VALUE IN ARRAY", + "contexts": [ + "The value found at a specific element of", + "an array. Results in a 0 if the element does not exist." + ], + "definitions": [ + [ + "Array - The array whose element to acquire.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + [ + "Index - The index whose element to acquire.", + "Can use most Number based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "VECTOR", + "contexts": [ + "A vector composed of three real numbers", + "(X, Y, Z) where X is left, Y is Up, and", + "Z is forward. Vectors are used for position,", + "direction, and velocity." + ], + "definitions": [ + [ + "X - The X value of the Vector. Can use most", + "Number based Value Syntax to provide this value." + ], + [ + "Y - The Y value of the vector. Can use most", + "Number based Value Syntax to provide this value." + ], + [ + "Z - The Z value of the Vector. Can use most", + "Number based Value Syntax to provide this value." + ] + ] + }, + { + "name": "VECTOR TOWARDS", + "contexts": [ + "The displacement vector from one position to another." + ], + "definitions": [ + [ + "Start Pos - The start position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + [ + "End Pos - The end position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ] + ] + }, + { + "name": "VELOCITY OF", + "contexts": [ + "The current velocity of a player as a vector.", + "If the player is on a surface, the Y component", + "of this velocity will be 0m even when traveling", + "up or down a slope." + ], + "definitions": [ + [ + "Player - The player whose velocity to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ] + ] + }, + { + "name": "VERTICAL ANGLE FROM DIRECTION", + "contexts": [ + "The vertical angle in degrees corresponding", + "to the specified direction vector." + ], + "definitions": [ + [ + "Direction - The direction vector from which", + "to acquire a vertical angle in degrees.", + "The vector is unitized before calculations", + "begins. Can use most Vector based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "VERTICAL ANGLE TOWARDS", + "contexts": [ + "The vertical angle in degrees from a playerโ€™s", + "current forward direction to the specified", + "position. The result is positive if the", + "position is below the player. Otherwise,", + "the result is zero or negative." + ], + "definitions": [ + [ + "Position - The player whose current facing", + "the angle begins. Can use most Player based", + "Value Syntax to provide this value." + ], + [ + "Position - The direction vector from which", + "to acquire a vertical angle in degrees.", + "The vector is unitized before calculations", + "begins. Can use most Vector based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "VERTICAL FACING ANGLE OF", + "contexts": [ + "The vertical angle in degrees, of a playerโ€™s", + "current facing relative to the world. This", + "value increases as the player looks down." + ], + "definitions": [ + [ + "Player - The player whose vertical facing", + "angle to acquire. Can use most Player based", + "Value Syntax to provide this value." + ] + ] + }, + { + "name": "VERTICAL SPEED OF", + "contexts": [ + "The current vertical speed of a player in", + "meters per second. This measurement excludes", + "all horizontal motion, including motion", + "while traveling up and down slopes." + ], + "definitions": [ + [ + "Player - The player whose vertical speed", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ] + ] + }, + { + "name": "VICTIM", + "contexts": [ + "The player that received damage for the", + "event currently being processed by this", + "rule. May be the same as the attacker or", + "the event player." + ], + "definitions": [] + }, + { + "name": "WORLD VECTOR OF", + "contexts": [ + "The vector in the world coordinates corresponding", + "to the provided vector in local coordinates." + ], + "definitions": [ + [ + "Local vector - The vector in local coordinates", + "that will be converted to world coordinates.", + "Can use most Vector based Value Syntax to", + "provide this value." + ], + [ + "Relative Player - The player to whom the", + "local vector is relative. Can use most Player", + "based Value Syntax to provide this value." + ], + [ + "Local vector - Specifies whether the vector", + "should receive a rotation and a translation", + "(usually applied to positions) or only a", + "rotation (usually applied to directions", + "and velocities). Can select rotation or", + "rotation and translation." + ] + ] + }, + { + "name": "X COMPONENT OF", + "contexts": [ + "The X Component of the specified Vector,", + "usually representing a leftward amount." + ], + "definitions": [ + [ + "Value - The vector from which to acquire", + "the X component. Can use most Vector based", + "Value Syntax to provide this value." + ] + ] + }, + { + "name": "Y COMPONENT OF", + "contexts": [ + "The Y Component of the specified Vector,", + "usually representing a upward amount." + ], + "definitions": [ + [ + "Value - The vector from which to acquire", + "the Y component. Can use most Vector based", + "Value Syntax to provide this value." + ] + ] + }, + { + "name": "Z COMPONENT OF", + "contexts": [ + "The Z Component of the specified Vector,", + "usually representing a forward amount." + ], + "definitions": [ + [ + "Value - The vector from which to acquire", + "the Z component. Can use most Vector based", + "Value Syntax to provide this value." + ] + ] + } +] \ No newline at end of file diff --git a/bin/core/language/parse/eng/value_stage3.json b/bin/core/language/parse/eng/value_stage3.json new file mode 100644 index 0000000..74056e4 --- /dev/null +++ b/bin/core/language/parse/eng/value_stage3.json @@ -0,0 +1,13106 @@ +{ + "0": { + "contexts": [ + "Stops execution of the action list." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 0, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort", + "orderNumber": 0, + "path": "/interface/action/child/abort.ts", + "indent": 0 + } + ] + }, + "1": { + "contexts": [ + "Stops execution of the action list if the", + "actionโ€™s condition evaluates to true, if", + "it does not, the execution continues with", + "the next action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 1, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If", + "orderNumber": 0, + "path": "/interface/action/child/abortIf.ts", + "indent": 0 + } + ] + }, + "2": { + "contexts": [ + "Stops execution of the action list if at", + "least one condition in the condition list", + "is false. If all conditions are true, execution", + "continues with the next action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 2, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If Condition Is False", + "orderNumber": 0, + "path": "/interface/action/child/abortIfConditionIsFalse.ts", + "indent": 0 + } + ] + }, + "3": { + "contexts": [ + "Stops execution of the action list if all", + "conditions in the condition list is true.", + "If any are false, execution continues with", + "the next action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 3, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If Condition Is True", + "orderNumber": 0, + "path": "/interface/action/child/abortIfConditionIsTrue.ts", + "indent": 0 + } + ] + }, + "4": { + "contexts": [ + "Undoes the effect of the disallow button", + "action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 4, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Allow Button", + "orderNumber": 0, + "path": "/interface/action/child/allowButton.ts", + "indent": 0 + } + ] + }, + "5": { + "contexts": [ + "Applies an instantaneous change in velocity", + "to the movement of one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 5, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Apply Impluse", + "orderNumber": 0, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 0 + } + ] + }, + "6": { + "contexts": [ + "Displays a large message above the reticle", + "that is visible to specific players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 6, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Big Message", + "orderNumber": 0, + "path": "/interface/action/child/bigMessage.ts", + "indent": 0 + } + ] + }, + "7": { + "contexts": [ + "Gradually modifies the value of a global", + "variable at a specific rate. (A global variable", + "is a variable that belongs to the game itself.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 7, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 0, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 0 + } + ] + }, + "8": { + "contexts": [ + "Gradually modifies the value of a global", + "variable over time. (A global variable is", + "a variable that belongs to the game itself.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 8, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 0, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 0 + } + ] + }, + "9": { + "contexts": [ + "Gradually modifies the value of a player", + "variable at a specific rate. (A player variable", + "is a variable that belongs to a specific player.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 9, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 0, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 0 + } + ] + }, + "10": { + "contexts": [ + "Gradually modifies the value of a player", + "variable over time. (A player variable is", + "a variable that belongs to a specific player.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 10, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 0, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 0 + } + ] + }, + "11": { + "contexts": [ + "Clears a status that was applied from a", + "set status action from one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 11, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Clear Status", + "orderNumber": 0, + "path": "/interface/action/child/clearStatus.ts", + "indent": 0 + } + ] + }, + "12": { + "contexts": [ + "Causes one or more players to use an emote,", + "voice line, or other equipped communication." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 12, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Communicate", + "orderNumber": 0, + "path": "/interface/action/child/communicate.ts", + "indent": 0 + } + ] + }, + "13": { + "contexts": [ + "Creates an in-world effect entity. This", + "effect entity will persist until destroyed,", + "to obtain a reference to this entity, use", + "the last created entity value. This action", + "will fail if too many entities have been created." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 13, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Effect", + "orderNumber": 0, + "path": "/interface/action/child/createEffect.ts", + "indent": 0 + } + ] + }, + "14": { + "contexts": [ + "Creates HUD text visible to specific players", + "at specific location on the screen. This", + "text will persist until destroyed. To obtain", + "a reference to this text, use the last text", + "ID value. This action will fail if too many", + "text elements have been created." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 14, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/createHudText.ts", + "indent": 0 + } + ] + }, + "15": { + "contexts": [ + "Creates an in-world entity. This icon entity", + "will persist until destroyed. To obtain", + "a reference to this entity, use the last", + "created entity value. This action will fail", + "if too many entities have been created." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 15, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Icon", + "orderNumber": 0, + "path": "/interface/action/child/createIcon.ts", + "indent": 0 + } + ] + }, + "16": { + "contexts": [ + "Creates in-world text visible to specific", + "players at specific position in the world.", + "This text will persist until destroyed.", + "To obtain a reference to this text, use", + "the last text ID value. This action will", + "fail if too many text elements have been created." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 16, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create In World Text", + "orderNumber": 0, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 0 + } + ] + }, + "17": { + "contexts": [ + "Applies instantaneous damage to one or more", + "players, possibly killing the players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 17, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Damage", + "orderNumber": 0, + "path": "/interface/action/child/damage.ts", + "indent": 0 + } + ] + }, + "18": { + "contexts": [ + "Instantly ends the match in a draw. This", + "action has no effect in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 18, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Match Draw", + "orderNumber": 0, + "path": "/interface/action/child/declareMatchDraw.ts", + "indent": 0 + } + ] + }, + "19": { + "contexts": [ + "Instantly ends the match with the specific", + "player as the winner. This action only has", + "an effect in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 19, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Player Victory", + "orderNumber": 0, + "path": "/interface/action/child/declarePlayerVictory.ts", + "indent": 0 + } + ] + }, + "20": { + "contexts": [ + "Declare a team as the current round winner.", + "This only works in the control and elimination game modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 20, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Round Victory", + "orderNumber": 0, + "path": "/interface/action/child/declareRoundVictory.ts", + "indent": 0 + } + ] + }, + "21": { + "contexts": [ + "Instantly ends the match with the specified", + "team as the winner. This action has no effect", + "in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 21, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Team Victory", + "orderNumber": 0, + "path": "/interface/action/child/declareTeamVictory.ts", + "indent": 0 + } + ] + }, + "22": { + "contexts": [ + "Destroys all effect entities created by create effect." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 22, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Effects", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllEffects.ts", + "indent": 0 + } + ] + }, + "23": { + "contexts": [ + "Destroys all hud text that was created by", + "the create hud text action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 23, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllHudText.ts", + "indent": 0 + } + ] + }, + "24": { + "contexts": [ + "Destroys all icon entities created by create icon." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 24, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Icons", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllIcons.ts", + "indent": 0 + } + ] + }, + "25": { + "contexts": [ + "Destroys all in-world text created by the", + "create in-world effect." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 25, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All In World Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllInWorldText.ts", + "indent": 0 + } + ] + }, + "26": { + "contexts": [ + "Destroys an effect entity that was created", + "by create effect." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 26, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Effect", + "orderNumber": 0, + "path": "/interface/action/child/destroyEffect.ts", + "indent": 0 + } + ] + }, + "27": { + "contexts": [ + "Destroys hud text that was created by create hud text." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 27, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyHudText.ts", + "indent": 0 + } + ] + }, + "28": { + "contexts": [ + "Destroys an icon entity that was created by create icon." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 28, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Icon", + "orderNumber": 0, + "path": "/interface/action/child/destroyIcon.ts", + "indent": 0 + } + ] + }, + "29": { + "contexts": [ + "Destroys in-world text that was created", + "by create in-world text." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 29, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy In World Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyInWorldText.ts", + "indent": 0 + } + ] + }, + "30": { + "contexts": [ + "Disables game mode announcements from the", + "announcer until reenabled or the match ends." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 30, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Announcer", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeAnnouncer.ts", + "indent": 0 + } + ] + }, + "31": { + "contexts": [ + "Disables completion of the match from the", + "game mode itself, only allowing the match", + "to be completed by scripting commands." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 31, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Completion", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeCompletion.ts", + "indent": 0 + } + ] + }, + "32": { + "contexts": [ + "Disables all game-mode music until reenabled", + "or the match ends." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 32, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Music", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeMusic.ts", + "indent": 0 + } + ] + }, + "33": { + "contexts": [ + "Disables automatic respawning for one or", + "more players, only allowing respawning by", + "scripting commands." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 33, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Respawning", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeRespawning.ts", + "indent": 0 + } + ] + }, + "34": { + "contexts": [ + "Disables changes to player and team scores", + "from the game mode itself, only allowing", + "scores to be changed by scripting commands." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 34, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Scoring", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeScoring.ts", + "indent": 0 + } + ] + }, + "35": { + "contexts": [ + "Undoes the effect of the enable death spectate", + "all players action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 35, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Death Spectate All Players", + "orderNumber": 0, + "path": "/interface/action/child/disableDeathSpectateAllPlayers.ts", + "indent": 0 + } + ] + }, + "36": { + "contexts": [ + "Undoes the effect of the enable death spectate", + "target hud action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 36, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Death Spectate Target Hud", + "orderNumber": 0, + "path": "/interface/action/child/disableDeathSpectateTargetHud.ts", + "indent": 0 + } + ] + }, + "37": { + "contexts": [ + "Disables a logical button for one or more", + "players such that pressing it has no effect." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 37, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disallow Button", + "orderNumber": 0, + "path": "/interface/action/child/disallowButton.ts", + "indent": 0 + } + ] + }, + "38": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode announcer action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 38, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Announcer", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeAnnouncer.ts", + "indent": 0 + } + ] + }, + "39": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode completion action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 39, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Completion", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeCompletion.ts", + "indent": 0 + } + ] + }, + "40": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode music action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 40, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Music", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeMusic.ts", + "indent": 0 + } + ] + }, + "41": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode respawning for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 41, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Respawning", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeRespawning.ts", + "indent": 0 + } + ] + }, + "42": { + "contexts": [ + "Undoes the effect of the disable built-in", + "game mode scoring action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 42, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Scoring", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeScoring.ts", + "indent": 0 + } + ] + }, + "43": { + "contexts": [ + "Allows one or more players to spectate all", + "players when dead, as opposed to only allies." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 43, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Death Spectate All Players", + "orderNumber": 0, + "path": "/interface/action/child/enableDeathSpectateAllPlayers.ts", + "indent": 0 + } + ] + }, + "44": { + "contexts": [ + "Allows one or more players to see their", + "targetโ€™s HUD when dead instead of their", + "own while death spectating." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 44, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Death Spectate Target Hud", + "orderNumber": 0, + "path": "/interface/action/child/enableDeathSpectateTargetHud.ts", + "indent": 0 + } + ] + }, + "45": { + "contexts": [ + "Go to the assemble heroes phase of the game", + "mode. Only works if a game is in progress." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 45, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Go To Assemble Heroes", + "orderNumber": 0, + "path": "/interface/action/child/goToAssembleHeroes.ts", + "indent": 0 + } + ] + }, + "46": { + "contexts": [ + "Provides an instantaneous heal to one or", + "more players. This heal will not resurrect dead players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 46, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Heal", + "orderNumber": 0, + "path": "/interface/action/child/heal.ts", + "indent": 0 + } + ] + }, + "47": { + "contexts": [ + "Instantly kills one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 47, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Kill", + "orderNumber": 0, + "path": "/interface/action/child/kill.ts", + "indent": 0 + } + ] + }, + "48": { + "contexts": [ + "Restarts the action list from the beginning.", + "To prevent an infinite loop, a wait action", + "must execute between the start of the action", + "list and this action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 48, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop", + "orderNumber": 0, + "path": "/interface/action/child/loop.ts", + "indent": 0 + } + ] + }, + "49": { + "contexts": [ + "Restarts the action list from the beginning", + "if this actionโ€™s condition evaluates to", + "true. If it does not, execution continues", + "with the next action. To prevent an infinite", + "loop, a wait action must execute between", + "the start of the action list and this action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 49, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If", + "orderNumber": 0, + "path": "/interface/action/child/loopIf.ts", + "indent": 0 + } + ] + }, + "50": { + "contexts": [ + "Restarts the action list from the beginning", + "if at least one condition in the condition", + "list is false. If all conditions are true,", + "execution continues with the next action.", + "To prevent an infinite loop, a wait action", + "must execute between the start of the action", + "list and this action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 50, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If Condition Is False", + "orderNumber": 0, + "path": "/interface/action/child/loopIfConditionIsFalse.ts", + "indent": 0 + } + ] + }, + "51": { + "contexts": [ + "Restarts the action list from the beginning", + "if all conditions in the condition list", + "is true. If any are false, execution continues", + "with the next action. To prevent an infinite", + "loop, a wait action must execute between", + "the start of the action list and this action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 51, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If Condition Is True", + "orderNumber": 0, + "path": "/interface/action/child/loopIfConditionIsTrue.ts", + "indent": 0 + } + ] + }, + "52": { + "contexts": [ + "Modifies the value of a global variable,", + "which is a variable that belongs to the game itself." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 52, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 0 + } + ] + }, + "53": { + "contexts": [ + "Modifies the value of a global variable", + "at an index, which is a variable that belongs", + "to the game itself." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 53, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "54": { + "contexts": [ + "Modifies the score (kill count) of one or", + "more players. This action only has an effect", + "in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 54, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Score", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 0 + } + ] + }, + "55": { + "contexts": [ + "Modifies the value of a player variable,", + "which is a variable that belongs to a specific player." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 55, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 0 + } + ] + }, + "56": { + "contexts": [ + "Modifies the value of a player variable", + "at an index, which is a variable that belongs", + "to a specific player." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 56, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "57": { + "contexts": [ + "Modifies the score of one or both teams.", + "This action has not effect in free-for-all", + "modes or modes without a team score." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 57, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Team Score", + "orderNumber": 0, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 0 + } + ] + }, + "58": { + "contexts": [ + "Pauses the match time, players, objective", + "logic, and game mode advancement criteria", + "are unaffected by the pause." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 58, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Pause Match Time", + "orderNumber": 0, + "path": "/interface/action/child/pauseMatchTime.ts", + "indent": 0 + } + ] + }, + "59": { + "contexts": [ + "Plays an effect at a position in the world.", + "The lifetime of this effect is short, so", + "it does not need to be updated or destroyed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 59, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Play Effect", + "orderNumber": 0, + "path": "/interface/action/child/playEffect.ts", + "indent": 0 + } + ] + }, + "60": { + "contexts": [ + "Preemptively loads the specified hero or", + "heroes into memory using the skins of the", + "specified player or players, available memory", + "permitting. Useful whenever rapid hero changing", + "is possible and the next hero is known." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 60, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Preload Hero", + "orderNumber": 0, + "path": "/interface/action/child/preloadHero.ts", + "indent": 0 + } + ] + }, + "61": { + "contexts": [ + "Forces one or more players to press a button", + "virtually for a single frame." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 61, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Press Button", + "orderNumber": 0, + "path": "/interface/action/child/pressButton.ts", + "indent": 0 + } + ] + }, + "62": { + "contexts": [ + "Restores the list of heroes available to", + "one or more players to the list specified", + "by the game settings. If a playerโ€™s current", + "hero becomes unavailable, the player is", + "forced to choose a different hero and respawn", + "at an appropriate spawn location." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 62, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Reset Player Hero Availability", + "orderNumber": 0, + "path": "/interface/action/child/resetPlayerHeroAvailability.ts", + "indent": 0 + } + ] + }, + "63": { + "contexts": [ + "Respawns one or more players at an appropriate", + "spawn location with full health, even if", + "they were already alive." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 63, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Respawn", + "orderNumber": 0, + "path": "/interface/action/child/respawn.ts", + "indent": 0 + } + ] + }, + "64": { + "contexts": [ + "Instantly resurrects one or more players", + "at the location they died with no transition." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 64, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Resurrect", + "orderNumber": 0, + "path": "/interface/action/child/resurrect.ts", + "indent": 0 + } + ] + }, + "65": { + "contexts": [ + "Enables or disables ability 1 for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 65, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 0 + } + ] + }, + "66": { + "contexts": [ + "Enables or disables ability 2 for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 66, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 0 + } + ] + }, + "67": { + "contexts": [ + "Sets the aim speed of one or more players", + "to a percentage of their normal aim speed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 67, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Aim Speed", + "orderNumber": 0, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 0 + } + ] + }, + "68": { + "contexts": [ + "Sets the damage dealt to one or more players", + "of a percentage of their raw damage dealt.", + "NOTE: Negative values do not heal enemies.", + "Damage values of 0 or lower will not trigger script events." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 68, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Damage Dealt", + "orderNumber": 0, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 0 + } + ] + }, + "69": { + "contexts": [ + "Sets the damage received of one or more", + "players to a percentage of their raw damage", + "received. NOTE: Negative values do not heal", + "enemies. Damage values of 0 or lower will", + "not trigger script events." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 69, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Damage Received", + "orderNumber": 0, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 0 + } + ] + }, + "70": { + "contexts": [ + "Sets the facing of one or more players to", + "the specified direction." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 70, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Facing", + "orderNumber": 0, + "path": "/interface/action/child/setFacing.ts", + "indent": 0 + } + ] + }, + "71": { + "contexts": [ + "Stores a value into a global variable, which", + "a variable that belongs to the game itself." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 71, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 0 + } + ] + }, + "72": { + "contexts": [ + "Finds or creates an array on a global variable,", + "which is a variable that belongs to the", + "game itself, then stores a value in the", + "array at the specified index." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 72, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "73": { + "contexts": [ + "Sets the movement gravity for one or more", + "players to a percentage of regular movement gravity." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 73, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Gravity", + "orderNumber": 0, + "path": "/interface/action/child/setGravity.ts", + "indent": 0 + } + ] + }, + "74": { + "contexts": [ + "Sets the healing dealt to one or more players", + "of a percentage of their raw damage dealt.", + "NOTE: Negative values do not damage enemies.", + "Healing values of 0 or lower will not trigger script events." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 74, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 0, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 0 + } + ] + }, + "75": { + "contexts": [ + "Sets the healing received of one or more", + "players to a percentage of their raw healing", + "received. NOTE: Negative values do not damage", + "enemies. Healing values of 0 or lower will", + "not trigger script events." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 75, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Healing Received", + "orderNumber": 0, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 0 + } + ] + }, + "76": { + "contexts": [ + "Causes one or more players to become invisible", + "to either all other players or just enemies." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 76, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Invisible", + "orderNumber": 0, + "path": "/interface/action/child/setInvisible.ts", + "indent": 0 + } + ] + }, + "77": { + "contexts": [ + "Sets the current match time (which is visible", + "at the top of the screen). This can be used", + "to shorten or extend the duration of a match", + "or to change the duration of assemble heroes or setup." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 77, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Match Time", + "orderNumber": 0, + "path": "/interface/action/child/setMatchTime.ts", + "indent": 0 + } + ] + }, + "78": { + "contexts": [ + "Sets the max health of one or more players", + "as a percentage of their raw max health.", + "This action will ensure that a playerโ€™s", + "current health will not exceed the new max health." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 78, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Max Health", + "orderNumber": 0, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 0 + } + ] + }, + "79": { + "contexts": [ + "Sets the move speed of one or more players", + "to a percentage of their raw move speed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 79, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Move Speed", + "orderNumber": 0, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 0 + } + ] + }, + "80": { + "contexts": [ + "Sets the text at the top center of the screen", + "that normally describes the objective to", + "a message visible to specific players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 80, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Objective Description", + "orderNumber": 0, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 0 + } + ] + }, + "81": { + "contexts": [ + "Sets the list of heroes available to one", + "or more players. If a playerโ€™s current hero", + "becomes unavailable, the player is forced", + "to choose a different hero and respawn at", + "an appropriate spawn location." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 81, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 0 + } + ] + }, + "82": { + "contexts": [ + "Sets the score (kill count) of one or more", + "players. This action only has an effect", + "in free-for-all modes." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 82, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Score", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 0 + } + ] + }, + "83": { + "contexts": [ + "Stores a value into a player variable, which", + "is a variable that belongs to a specific player." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 83, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 0 + } + ] + }, + "84": { + "contexts": [ + "Finds or creates an array on a player variable,", + "which is a variable that belongs to a specific", + "player, then stores a value in the array", + "at the specified index." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 84, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "85": { + "contexts": [ + "Enables or disables primary fire for one", + "or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 85, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 0 + } + ] + }, + "86": { + "contexts": [ + "Sets the projectile gravity for one or more", + "players to a percentage of regular projectile gravity." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 86, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Projectile Gravity", + "orderNumber": 0, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 0 + } + ] + }, + "87": { + "contexts": [ + "Sets the projectile speed for one or more", + "players to a percentage of regular projectile speed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 87, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Projectile Speed", + "orderNumber": 0, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 0 + } + ] + }, + "88": { + "contexts": [ + "Sets the duration between death and respawn", + "for one or more players that are already", + "dead when this action is executed, the change", + "takes effect on their next death." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 88, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Respawn Max Time", + "orderNumber": 0, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 0 + } + ] + }, + "89": { + "contexts": [ + "Enables or disables secondary fire for one", + "or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 89, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 0 + } + ] + }, + "90": { + "contexts": [ + "Sets the simulation rate for the entire", + "game, including all players, projectiles,", + "effects, and game mode logic." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 90, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Slow Motion", + "orderNumber": 0, + "path": "/interface/action/child/setSlowMotion.ts", + "indent": 0 + } + ] + }, + "91": { + "contexts": [ + "Applies a status to one or more players.", + "This status will remain in effect for the", + "specified duration or until it is cleared", + "by the clear status action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 91, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Status", + "orderNumber": 0, + "path": "/interface/action/child/setStatus.ts", + "indent": 0 + } + ] + }, + "92": { + "contexts": [ + "Sets the score for one or both teams. This", + "action has no effect in free-for-all modes", + "or modes without a team score." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 92, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Team Score", + "orderNumber": 0, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 0 + } + ] + }, + "93": { + "contexts": [ + "Enables or disables the ultimate ability", + "of one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 93, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 0 + } + ] + }, + "94": { + "contexts": [ + "Sets the ultimate charge or one or more", + "players as a percentage of maximum charge." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 94, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Charge", + "orderNumber": 0, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 0 + } + ] + }, + "95": { + "contexts": [ + "Skips execution of a certain number of actions", + "in the action list." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 95, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Skip", + "orderNumber": 0, + "path": "/interface/action/child/skip.ts", + "indent": 0 + } + ] + }, + "96": { + "contexts": [ + "Skips execution of a certain number of actions", + "in the action list if this actionโ€™s condition", + "evaluates to true. If it does not, execution", + "continues with the next action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 96, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Skip If", + "orderNumber": 0, + "path": "/interface/action/child/skipIf.ts", + "indent": 0 + } + ] + }, + "97": { + "contexts": [ + "Displays a small message beneath the reticle", + "that is visible to specific players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 97, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 0, + "path": "/interface/action/child/smallMessage.ts", + "indent": 0 + } + ] + }, + "98": { + "contexts": [ + "Starts accelerating one or more players", + "in a specified location." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 98, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Accelerating", + "orderNumber": 0, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 0 + } + ] + }, + "99": { + "contexts": [ + "Places your camera at a location, facing a direction." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 99, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Camera", + "orderNumber": 0, + "path": "/interface/action/child/startCamera.ts", + "indent": 0 + } + ] + }, + "100": { + "contexts": [ + "Starts modifying how much damage one or", + "more receivers will receive from one or", + "more damagers. A reference to this damage", + "modification can be obtained from the last", + "damage modification ID value. This action", + "will fail if too many damage modifications", + "have been started." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 100, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Damage Modification", + "orderNumber": 0, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 0 + } + ] + }, + "101": { + "contexts": [ + "Starts an instance of damage over time,", + "this DOT will persist for the specified", + "duration or until stopped by script. To", + "obtain a reference to this DOT, use the", + "last damage over time to value." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 101, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 0 + } + ] + }, + "102": { + "contexts": [ + "Starts turning one or more players to face", + "the specified direction." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 102, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Facing", + "orderNumber": 0, + "path": "/interface/action/child/startFacing.ts", + "indent": 0 + } + ] + }, + "103": { + "contexts": [ + "Starts forcing one or more players to be", + "a specified hero and, if necessary, respawns", + "them immediately in their current locaiton.", + "This will be the only hero available to", + "the player or players until, the stop forcing", + "player to be hero action is executed." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 103, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 0, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 0 + } + ] + }, + "104": { + "contexts": [ + "Forces a team to spawn in a particular spawn", + "room, regardless of the sapwn room normally", + "used by the game mode. This action only", + "has an effect in Assault, Hybrid, and Payload Maps." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 104, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 0, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 0 + } + ] + }, + "105": { + "contexts": [ + "Defines minimum and maximum movement input", + "values for one or more players. Possibly", + "forcing or preventing movement." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 105, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Throttle", + "orderNumber": 0, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 0 + } + ] + }, + "106": { + "contexts": [ + "Starts an instance of damage over time,", + "this HOT will persist for the specified", + "duration or until stopped by script. To", + "obtain a reference to this HOT, use the", + "last damage over time to value." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 106, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 0 + } + ] + }, + "107": { + "contexts": [ + "Forces one or more players to hold a button", + "virtually until stopped by the stop holding button action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 107, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Holding Button", + "orderNumber": 0, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 0 + } + ] + }, + "108": { + "contexts": [ + "Stops the acceleration started by the start", + "accelerating action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 108, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Accelerating", + "orderNumber": 0, + "path": "/interface/action/child/stopAccelerating.ts", + "indent": 0 + } + ] + }, + "109": { + "contexts": [ + "Stops the all damage modifications that", + "were started using the start damage modification action." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 109, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Damage Modifications", + "orderNumber": 0, + "path": "/interface/action/child/stopAllDamageModifications.ts", + "indent": 0 + } + ] + }, + "110": { + "contexts": [ + "Stops all damage over time started by the", + "start damage over time or one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 110, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopAllDamageOverTime.ts", + "indent": 0 + } + ] + }, + "111": { + "contexts": [ + "Stops all heal over time started by the", + "start heal over time or one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 111, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopAllHealOverTime.ts", + "indent": 0 + } + ] + }, + "112": { + "contexts": [ + "Stops all forced camera positions started", + "by the start camera or one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 112, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Camera", + "orderNumber": 0, + "path": "/interface/action/child/stopCamera.ts", + "indent": 0 + } + ] + }, + "113": { + "contexts": [ + "Stops an in-progress chase of a global variable,", + "leaving it at its current value." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 113, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Chasing Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/stopChasingGlobalVariable.ts", + "indent": 0 + } + ] + }, + "114": { + "contexts": [ + "Stops an in-progress chase of a player variable,", + "leaving it at its current value." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 114, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 0 + } + ] + }, + "115": { + "contexts": [ + "Stops a damage modification that was started", + "by the start damage modification action" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 115, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Damage Modification", + "orderNumber": 0, + "path": "/interface/action/child/stopDamageModification.ts", + "indent": 0 + } + ] + }, + "116": { + "contexts": [ + "Stops an instance of damage over time that", + "was started by the start damage over time action" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 116, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopDamageOverTime.ts", + "indent": 0 + } + ] + }, + "117": { + "contexts": [ + "Stops the turning started by the start facing", + "action for or one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 117, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Facing", + "orderNumber": 0, + "path": "/interface/action/child/stopFacing.ts", + "indent": 0 + } + ] + }, + "118": { + "contexts": [ + "Stops forcing one or more players to be", + "a specified hero. This will not respawn", + "the player or players, but it will restore", + "their availablity the next time they go", + "to select a hero." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 118, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Player To Be Hero", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingPlayerToBeHero.ts", + "indent": 0 + } + ] + }, + "119": { + "contexts": [ + "Undoes the effect of start forcing spawn", + "room action for the specified team." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 119, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Spawn Room", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingSpawnRoom.ts", + "indent": 0 + } + ] + }, + "120": { + "contexts": [ + "Undoes the effect of start forcing throttle", + "action for one or more players" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 120, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Throttle", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingThrottle.ts", + "indent": 0 + } + ] + }, + "121": { + "contexts": [ + "Stops an instance of heal over time that", + "was started by the start heal over time action" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 121, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopHealOverTime.ts", + "indent": 0 + } + ] + }, + "122": { + "contexts": [ + "Undoes the effect of the start holding button", + "action for one or more players." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 122, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Holding Button", + "orderNumber": 0, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 0 + } + ] + }, + "123": { + "contexts": [ + "Teleports one or more players to the specified location." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 123, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Teleport", + "orderNumber": 0, + "path": "/interface/action/child/teleport.ts", + "indent": 0 + } + ] + }, + "124": { + "contexts": [ + "Unpauses the match time." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 124, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Unpause Match Time", + "orderNumber": 0, + "path": "/interface/action/child/unpauseMatchTime.ts", + "indent": 0 + } + ] + }, + "125": { + "contexts": [ + "Pauses the execution of the action list,", + "unless the wait is interrupted. The remainder", + "of the actions will execute after the pause." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 125, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Wait", + "orderNumber": 0, + "path": "/interface/action/child/wait.ts", + "indent": 0 + } + ] + }, + "126": { + "contexts": [ + "Condition - Specifies whether the execution", + "is stopped. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Abort If", + "orderNumber": 1, + "path": "/interface/action/child/abortIf.ts", + "indent": 4 + } + ] + }, + "127": { + "contexts": [ + "Player - The player or players whose button", + "is being reenabled. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Allow Button", + "orderNumber": 1, + "path": "/interface/action/child/allowButton.ts", + "indent": 4 + } + ] + }, + "128": { + "contexts": [ + "Button - The logical button that is being reenabled." + ], + "usedFiles": [ + { + "topName": "Allow Button", + "orderNumber": 2, + "path": "/interface/action/child/allowButton.ts", + "indent": 4 + } + ] + }, + "129": { + "contexts": [ + "Player - The player or players whose velocity", + "will be changed. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 1, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "130": { + "contexts": [ + "Direction - The unit direction in which", + "the impulse will be applied. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 2, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "131": { + "contexts": [ + "Speed - The magnitude of the change to the", + "velocities of the player or players. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 3, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "132": { + "contexts": [ + "Relative - Specifies whether the direction", + "is relative to world coordinates or the", + "local coordinates of the player or players." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 4, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "133": { + "contexts": [ + "To World - Relative to the worldโ€™s coordinate system." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 5, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "134": { + "contexts": [ + "Visible to - One or more players who will", + "see the message. Can use most Value Syntax", + "to select multiple players to specify." + ], + "usedFiles": [ + { + "topName": "Big Message", + "orderNumber": 1, + "path": "/interface/action/child/bigMessage.ts", + "indent": 4 + } + ] + }, + "135": { + "contexts": [ + "Header - The message to be displayed. Can", + "use most String based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Big Message", + "orderNumber": 2, + "path": "/interface/action/child/bigMessage.ts", + "indent": 4 + }, + { + "topName": "Set Objective Description", + "orderNumber": 1, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 2, + "path": "/interface/action/child/smallMessage.ts", + "indent": 4 + } + ] + }, + "136": { + "contexts": [ + "Variable - The variable the action will", + "manipulate. Can use most Variable based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 1, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 1, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + } + ] + }, + "137": { + "contexts": [ + "Destination - The value that the global", + "variable will eventually reach. The type", + "of this value may be either a number or", + "a vector, through the variableโ€™s existing", + "value must be of the same type before the", + "chase begins. Can use most Number or Vector", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 2, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 2, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + } + ] + }, + "138": { + "contexts": [ + "Player - The player whose variable will", + "gradually change. If multiple players are", + "provided, each of their variables will change independently." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 3, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 1, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + } + ] + }, + "139": { + "contexts": [ + "Visible to - One or more players who will", + "be able to see the icon. Can use most Value", + "Syntax to select one or multiple players." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 4, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 3, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 2, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 4, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Create Effect", + "orderNumber": 1, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + }, + { + "topName": "Create Hud Text", + "orderNumber": 1, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + }, + { + "topName": "Create Icon", + "orderNumber": 1, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "140": { + "contexts": [ + "Destination - The value that the player", + "variable will eventually reach. The type", + "of this value may be either a number or", + "a vector, through the variableโ€™s existing", + "value must be of the same type before the", + "chase begins. Can use most Number or Vector", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 4, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 3, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "141": { + "contexts": [ + "Player - The player whose variable will", + "gradually change. If multiple players are", + "provided, each of their variables will change independently." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 3, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 1, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "142": { + "contexts": [ + "Rate - The amount of change that will happen", + "to the variableโ€™s value each second. Can", + "use most Number based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 4, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + } + ] + }, + "143": { + "contexts": [ + "Variable - The variable the action will", + "manipulate. Can use most Variable based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 5, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 2, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "144": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can specify a Destination and Duration or nothing." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 5, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "145": { + "contexts": [ + "Player - The player or players from whom", + "the status will be removed. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Clear Status", + "orderNumber": 1, + "path": "/interface/action/child/clearStatus.ts", + "indent": 4 + } + ] + }, + "146": { + "contexts": [ + "Status - The Status to be removed from the", + "player or players. Values include Hacked,", + "Burning, Knocked Down, Asleep, Frozen, Unkillable,", + "Invincible, Phased Out, Rooted, or Stunned." + ], + "usedFiles": [ + { + "topName": "Clear Status", + "orderNumber": 2, + "path": "/interface/action/child/clearStatus.ts", + "indent": 4 + } + ] + }, + "147": { + "contexts": [ + "Player - The player or players to perform", + "the communication. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Communicate", + "orderNumber": 1, + "path": "/interface/action/child/communicate.ts", + "indent": 4 + } + ] + }, + "148": { + "contexts": [ + "Type - The type of communication. Can use", + "any equipped emote, equipped voice line,", + "or any other communication effect." + ], + "usedFiles": [ + { + "topName": "Communicate", + "orderNumber": 2, + "path": "/interface/action/child/communicate.ts", + "indent": 4 + } + ] + }, + "149": { + "contexts": [ + "Visible to - One or more players who will", + "be able to see the effect. Can use most", + "Value Syntax to select one or multiple players." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 2, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + }, + { + "topName": "Play Effect", + "orderNumber": 1, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "150": { + "contexts": [ + "Color - The color of the effect to be created.", + "IF a particular team is chosen, the effect", + "will either be red or blue, depending on", + "whether the team is hostile to the viewer.", + "Does not apply to sound effects. (Sphere,", + "Light Shaft, Orb, Ring, Cloud, Sparkles,", + "Good Aura, Bad Aura, Energy Sound, Pick-Up", + "Sound, Good Aura Sound, Bad Aura Sound,", + "Sparkles Sound, Smoke Sound, Decal Sound, Beacon Sound)" + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 3, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "151": { + "contexts": [ + "Position - The effectโ€™s position. If this", + "value is a player, then the effect will", + "move along with the player, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based", + "Value Syntax. (Sphere, Light Shaft, Orb,", + "Ring, Cloud, Sparkles, Good Aura, Bad Aura,", + "Energy Sound, Pick-Up Sound, Good Aura Sound,", + "Bad Aura Sound, Sparkles Sound, Smoke Sound,", + "Decal Sound, Beacon Sound)" + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 4, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "152": { + "contexts": [ + "Radius - The effectโ€™s radius in meters.", + "Sound effects have their volume affected", + "instead. (Sphere, Light Shaft, Orb, Ring,", + "Cloud, Sparkles, Good Aura, Bad Aura, Energy", + "Sound, Pick-Up Sound, Good Aura Sound, Bad", + "Aura Sound, Sparkles Sound, Smoke Sound,", + "Decal Sound, Beacon Sound)" + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 5, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "153": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated,", + "the effect will keep asking for and using", + "new values from reevaluated inputs." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 6, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "154": { + "contexts": [ + "Header - The header text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 2, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "155": { + "contexts": [ + "Subheader - The subheader text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 3, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "156": { + "contexts": [ + "Text - The body text to be displayed (can", + "be blank). Can use most String based Value", + "Syntax to populate." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 4, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "157": { + "contexts": [ + "Location - The location on the screen where", + "text will appear. You can choose left, top, or right." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 5, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "158": { + "contexts": [ + "Sort Order - The Sort Order of the text", + "relative to other text in the same location.", + "Text with a higher sort order will come", + "after text with a lower sort order. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 6, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "159": { + "contexts": [ + "Header Color - The color of the Header text", + "to be created. If a particular team is chosen,", + "the effect will either be red or blue." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 7, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "160": { + "contexts": [ + "Subheader Color - The color of the Subheader", + "text to be created. If a particular team", + "is chosen, the effect will either be red or blue." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 8, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "161": { + "contexts": [ + "Text Color - The color of the body text", + "to be created. If a particular team is chosen,", + "the effect will either be red or blue." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 9, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "162": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continuously reevaluated,", + "the text will keep asking for and using", + "new values from reevaluated inputs." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 10, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "163": { + "contexts": [ + "Position - The iconโ€™s position. If this", + "value is a player, then the icon will appear", + "above the playerโ€™s head, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 2, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "164": { + "contexts": [ + "Icon - The icon to be created. (Arrow: Down,", + "Arrow: Left, Arrow: Right, Arrow: Up, Asterisk,", + "Bolt, Checkmark, Circle, Club, Diamond,", + "Dizzy, Exclamation Mark, Eye, Fire, Flag,", + "Halo, Happy, Heart, Moon, No, Plus, Poison,", + "Poison 2, Question Mark, Radioactive, Recycle,", + "Ring Thick, Ring Thin, Sad, Skull, Spade,", + "Spiral, Stop, Trashcan, Warning, X)" + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 3, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "165": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated,", + "the icon will keep asking for and using", + "new values from reevaluated inputs. (Arrow:", + "Down, Arrow: Left, Arrow: Right, Arrow:", + "Up, Asterisk, Bolt, Checkmark, Circle, Club,", + "Diamond, Dizzy, Exclamation Mark, Eye, Fire,", + "Flag, Halo, Happy, Heart, Moon, No, Plus,", + "Poison, Poison 2, Question Mark, Radioactive,", + "Recycle, Ring Thick, Ring Thin, Sad, Skull,", + "Spade, Spiral, Stop, Trashcan, Warning,", + "X, Visible to and position, Position, Visible to, None)" + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 4, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "166": { + "contexts": [ + "Icon Color - The color of the icon to be", + "created. IF a particular team is chosen,", + "the icon will either be red or blue, depending", + "on whether the team is hostile to the viewer.", + "(Arrow: Down, Arrow: Left, Arrow: Right,", + "Arrow: Up, Asterisk, Bolt, Checkmark, Circle,", + "Club, Diamond, Dizzy, Exclamation Mark,", + "Eye, Fire, Flag, Halo, Happy, Heart, Moon,", + "No, Plus, Poison, Poison 2, Question Mark,", + "Radioactive, Recycle, Ring Thick, Ring Thin,", + "Sad, Skull, Spade, Spiral, Stop, Trashcan,", + "Warning, X, Visible to and position, Position,", + "Visible to, None)" + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 5, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "167": { + "contexts": [ + "Show when offscreen - Should this icon still", + "appear even when it is behind you? Can use", + "most Boolean based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 6, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "168": { + "contexts": [ + "Visible to - One or more players who will", + "see the HUD text. Can use most Value Syntax", + "to select one or multiple players." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 1, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "169": { + "contexts": [ + "Header - The header text to be displayed", + "(can be blank). Can use most String based", + "Value Syntax to populate." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 2, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "170": { + "contexts": [ + "Position - The textโ€™s position. If this", + "value is a player, then the text will appear", + "above the playerโ€™s head. Otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 3, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "171": { + "contexts": [ + "Scale - The textโ€™s scale. Can use most Number", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 4, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "172": { + "contexts": [ + "Clipping - Specifies whether the text can", + "be seen through walls or is instead clipped." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 5, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "173": { + "contexts": [ + "Clip Against Surfaces - The text may be", + "partially or completely obscured by walls,", + "floors, ceilings, players, or other solid objects." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 6, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "174": { + "contexts": [ + "Player - The player or players who will", + "receive damage. Can use most Player based", + "Value Syntax to select one or multiple players." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 1, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "175": { + "contexts": [ + "Damager - The player who will receive credit", + "for the damage. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 2, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "176": { + "contexts": [ + "Amount - The amount of damage to apply.", + "This amount may be modified by buffs, debuffs,", + "or armor. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 3, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "177": { + "contexts": [ + "Player - The winning player. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Declare Player Victory", + "orderNumber": 1, + "path": "/interface/action/child/declarePlayerVictory.ts", + "indent": 4 + } + ] + }, + "178": { + "contexts": [ + "Team - Round winning team. Can use most", + "Team based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Declare Round Victory", + "orderNumber": 1, + "path": "/interface/action/child/declareRoundVictory.ts", + "indent": 4 + } + ] + }, + "179": { + "contexts": [ + "Team - The winning team. Can use most Team", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Declare Team Victory", + "orderNumber": 1, + "path": "/interface/action/child/declareTeamVictory.ts", + "indent": 4 + } + ] + }, + "180": { + "contexts": [ + "Entity - Specifies which effect entity to", + "destroy. This entity may be the last created", + "entity or a variable into which last created", + "entity was earlier stored." + ], + "usedFiles": [ + { + "topName": "Destroy Effect", + "orderNumber": 1, + "path": "/interface/action/child/destroyEffect.ts", + "indent": 4 + } + ] + }, + "181": { + "contexts": [ + "Text ID - Specifies which hud text to destroy.", + "This ID may be last text ID or a variable", + "into which last text ID was earlier stored." + ], + "usedFiles": [ + { + "topName": "Destroy Hud Text", + "orderNumber": 1, + "path": "/interface/action/child/destroyHudText.ts", + "indent": 4 + } + ] + }, + "182": { + "contexts": [ + "Text ID - Specifies which icon to destroy.", + "This ID may be last text ID or a variable", + "into which last create entity was earlier stored." + ], + "usedFiles": [ + { + "topName": "Destroy Icon", + "orderNumber": 1, + "path": "/interface/action/child/destroyIcon.ts", + "indent": 4 + } + ] + }, + "183": { + "contexts": [ + "Text Id - A Reference to the last piece", + "of text created by the event player (or", + "created at the global level) via the create", + "hud text or create in-world text action." + ], + "usedFiles": [ + { + "topName": "Destroy In World Text", + "orderNumber": 1, + "path": "/interface/action/child/destroyInWorldText.ts", + "indent": 4 + } + ] + }, + "184": { + "contexts": [ + "Player - The player or players whose respawning", + "is affected. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Disable Built In Game Mode Respawning", + "orderNumber": 1, + "path": "/interface/action/child/disableBuiltInGameModeRespawning.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Respawning", + "orderNumber": 1, + "path": "/interface/action/child/enableBuiltInGameModeRespawning.ts", + "indent": 4 + } + ] + }, + "185": { + "contexts": [ + "Player - The player or players whose default", + "death spectate behavior is restored. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Disable Death Spectate All Players", + "orderNumber": 1, + "path": "/interface/action/child/disableDeathSpectateAllPlayers.ts", + "indent": 4 + } + ] + }, + "186": { + "contexts": [ + "Player - The player or players who will", + "revert to seeing their own HUD while death", + "spectating. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Disable Death Spectate Target Hud", + "orderNumber": 1, + "path": "/interface/action/child/disableDeathSpectateTargetHud.ts", + "indent": 4 + } + ] + }, + "187": { + "contexts": [ + "Player - The player executing this rule,", + "as specified by the event. May be the same", + "as the attacker or victim. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Disallow Button", + "orderNumber": 1, + "path": "/interface/action/child/disallowButton.ts", + "indent": 4 + } + ] + }, + "188": { + "contexts": [ + "Button - The logical button that is being disabled." + ], + "usedFiles": [ + { + "topName": "Disallow Button", + "orderNumber": 2, + "path": "/interface/action/child/disallowButton.ts", + "indent": 4 + } + ] + }, + "189": { + "contexts": [ + "Player - The player or players who will", + "be allowed to spectate all players. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Enable Death Spectate All Players", + "orderNumber": 1, + "path": "/interface/action/child/enableDeathSpectateAllPlayers.ts", + "indent": 4 + } + ] + }, + "190": { + "contexts": [ + "Player - The player or players who will", + "begin seeing their spectateโ€™s targetโ€™s hud", + "while death spectating. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Enable Death Spectate Target Hud", + "orderNumber": 1, + "path": "/interface/action/child/enableDeathSpectateTargetHud.ts", + "indent": 4 + } + ] + }, + "191": { + "contexts": [ + "Player - The player or players whose health", + "will be restored. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 1, + "path": "/interface/action/child/heal.ts", + "indent": 4 + } + ] + }, + "192": { + "contexts": [ + "Player - One or more players who will receive", + "the heal over time. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 2, + "path": "/interface/action/child/heal.ts", + "indent": 4 + }, + { + "topName": "Start Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "193": { + "contexts": [ + "Amount - The amount of healing to apply.", + "This amount may be modified by buffs or", + "debuffs, healing is capped by each playerโ€™s", + "max health. Can use most Number based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 3, + "path": "/interface/action/child/heal.ts", + "indent": 4 + } + ] + }, + "194": { + "contexts": [ + "Player - The player or players who will", + "be killed. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Kill", + "orderNumber": 1, + "path": "/interface/action/child/kill.ts", + "indent": 4 + } + ] + }, + "195": { + "contexts": [ + "Killer - The player who will receive credit", + "for the kill. A killer of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Kill", + "orderNumber": 2, + "path": "/interface/action/child/kill.ts", + "indent": 4 + } + ] + }, + "196": { + "contexts": [ + "Condition - Specifies whether the loop will", + "occur. Can use most Conditional based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Loop If", + "orderNumber": 1, + "path": "/interface/action/child/loopIf.ts", + "indent": 4 + } + ] + }, + "197": { + "contexts": [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "198": { + "contexts": [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 2, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "199": { + "contexts": [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with new elements", + "given a value of 0." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 3, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "200": { + "contexts": [ + "Player - The player or players whose variable", + "will be set. If multiple players are provided,", + "each of their variables will be set. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "201": { + "contexts": [ + "Player - The player whose score will change.", + "Can use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Modify Player Score", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 4 + } + ] + }, + "202": { + "contexts": [ + "Team - The team whose score will be changed.", + "Can use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Modify Player Score", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 4 + }, + { + "topName": "Modify Team Score", + "orderNumber": 1, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 4 + } + ] + }, + "203": { + "contexts": [ + "Variable - Variable specified by a single", + "alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "204": { + "contexts": [ + "Operation - The way in which the variableโ€™s", + "value will be changed. Options include standard", + "arithmetic operations as well as array operations", + "for appending and removing values." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 3, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "205": { + "contexts": [ + "Value - The value used for the modification.", + "For arithmetic operations, this is the second", + "of two operands, with the other being the", + "variableโ€™s existing value. For array operations,", + "this is the value to append or remove. Various", + "Value Syntax can be used." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 4, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "206": { + "contexts": [ + "Operation - The way in which the variableโ€™s", + "value will be changed. Options include standard", + "arithmetic operations as well as array operations", + "for appending and removing values." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "207": { + "contexts": [ + "Value - The value used for the modification.", + "For arithmetic operations, this is the second", + "of two operands, with the other being the", + "variableโ€™s existing value. For array operations,", + "this is the value to append or remove. Various", + "Value Syntax can be used." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable At Index", + "orderNumber": 5, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "208": { + "contexts": [ + "Score - The amount the score will increase", + "or decrease. If positive, the score will", + "increase. If negative, the score will decrease.", + "Can use most Number based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Modify Team Score", + "orderNumber": 2, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 4 + } + ] + }, + "209": { + "contexts": [ + "Type - The type of the effect to be created.", + "(Good Explosion, Bad Explosion, Ring Explosion,", + "Good Pickup Effect, Bad Pickup Effect, Debuff", + "Impact Sound, Buff Impact Sound, Ring Explosion", + "Sound, Buff Explosion Sound, Explosion Sound)" + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 2, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "210": { + "contexts": [ + "Color - The color of the effect to be created.", + "IF a particular team is chosen, the effect", + "will either be red or blue, depending on", + "whether the team is hostile to the viewer.", + "(Good Explosion, Bad Explosion, Ring Explosion,", + "Good Pickup Effect, Bad Pickup Effect, Debuff", + "Impact Sound, Buff Impact Sound, Ring Explosion", + "Sound, Buff Explosion Sound, Explosion Sound)" + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 3, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "211": { + "contexts": [ + "Position - The effectโ€™s position. If this", + "value is a player, then the effect will", + "move along with the player, otherwise, the", + "value is interpreted as a position in the", + "world. Can use most Player or Vector based", + "Value Syntax. (Good Explosion, Bad Explosion,", + "Ring Explosion, Good Pickup Effect, Bad", + "Pickup Effect, Debuff Impact Sound, Buff", + "Impact Sound, Ring Explosion Sound, Buff", + "Explosion Sound, Explosion Sound)" + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 4, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "212": { + "contexts": [ + "Radius - The effectโ€™s radius in meters.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 5, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "213": { + "contexts": [ + "Player - The player or players who will", + "begin preloading a hero or heroes. Only", + "one preload hero action will be active at", + "a time for a given player. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Preload Hero", + "orderNumber": 1, + "path": "/interface/action/child/preloadHero.ts", + "indent": 4 + } + ] + }, + "214": { + "contexts": [ + "Hero - The hero or heroes to begin preloading", + "for the specified player or players. When", + "multiple heroes are specified in an array,", + "the Heroes towards the beginning of the", + "array are prioritized. Can use most Hero", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Preload Hero", + "orderNumber": 2, + "path": "/interface/action/child/preloadHero.ts", + "indent": 4 + } + ] + }, + "215": { + "contexts": [ + "Player - The player or players for whom", + "virtual button input will be forced. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Press Button", + "orderNumber": 1, + "path": "/interface/action/child/pressButton.ts", + "indent": 4 + } + ] + }, + "216": { + "contexts": [ + "Button - The button to be pressed." + ], + "usedFiles": [ + { + "topName": "Press Button", + "orderNumber": 2, + "path": "/interface/action/child/pressButton.ts", + "indent": 4 + } + ] + }, + "217": { + "contexts": [ + "Player - The player or players whose hero", + "list is being reset. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Reset Player Hero Availability", + "orderNumber": 1, + "path": "/interface/action/child/resetPlayerHeroAvailability.ts", + "indent": 4 + } + ] + }, + "218": { + "contexts": [ + "Player - The player or players to respawn.", + "Can use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Respawn", + "orderNumber": 1, + "path": "/interface/action/child/respawn.ts", + "indent": 4 + } + ] + }, + "219": { + "contexts": [ + "Player - The player or players who will", + "be resurrected. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Resurrect", + "orderNumber": 1, + "path": "/interface/action/child/resurrect.ts", + "indent": 4 + } + ] + }, + "220": { + "contexts": [ + "Player - The player or players whose access", + "to ability 1 is affected. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 4 + } + ] + }, + "221": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use ability 1. Expects", + "a Boolean Value such as True, False, or", + "Compare. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 4 + } + ] + }, + "222": { + "contexts": [ + "Player - The player or players whose access", + "to ability 2 is affected. Expects a Boolean", + "Value such as True, False, or Compare. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 4 + } + ] + }, + "223": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use ability 2. Can use", + "most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 4 + } + ] + }, + "224": { + "contexts": [ + "Player - The player or players whose aim", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Aim Speed", + "orderNumber": 1, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 4 + } + ] + }, + "225": { + "contexts": [ + "Turn Speed Percent - The percentage of normal", + "aim speed to which the player or players", + "will set their aim speed. Can use most Number", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Aim Speed", + "orderNumber": 2, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 4 + } + ] + }, + "226": { + "contexts": [ + "Player - The player or players whose damage", + "dealt will be set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Damage Dealt", + "orderNumber": 1, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 4 + } + ] + }, + "227": { + "contexts": [ + "Damage Dealt Percent - The percentage of", + "raw damage dealt to which the player or", + "players will set their damage dealt. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Damage Dealt", + "orderNumber": 2, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 4 + } + ] + }, + "228": { + "contexts": [ + "Player - The player or players whose damage", + "received will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Damage Received", + "orderNumber": 1, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 4 + } + ] + }, + "229": { + "contexts": [ + "Damage Received Percent - The percentage", + "of raw damage received to which the player", + "or players will set their damage received.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Damage Received", + "orderNumber": 2, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 4 + } + ] + }, + "230": { + "contexts": [ + "Player - The player or players whose facing", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Facing", + "orderNumber": 1, + "path": "/interface/action/child/setFacing.ts", + "indent": 4 + } + ] + }, + "231": { + "contexts": [ + "Direction - The unit direction in which", + "the player or players will face. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Facing", + "orderNumber": 2, + "path": "/interface/action/child/setFacing.ts", + "indent": 4 + } + ] + }, + "232": { + "contexts": [ + "Variable - Specifies which Global Variable", + "to store the value into. Specified by a", + "single alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Set Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 4 + } + ] + }, + "233": { + "contexts": [ + "Player - The player or players whose variable", + "will be set. If multiple players are provided,", + "each of their variables will be set. Can", + "use most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Global Variable", + "orderNumber": 2, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "234": { + "contexts": [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with the new elements", + "given a value of zero. Can use most Number", + "based Value Syntax with this value." + ], + "usedFiles": [ + { + "topName": "Set Global Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "235": { + "contexts": [ + "Value - The value that will be stored into", + "the array. Nearly any Value syntax can be", + "used, however it is most common with Number based syntax." + ], + "usedFiles": [ + { + "topName": "Set Global Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "236": { + "contexts": [ + "Player - The player or players whose healing", + "dealt will be set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Gravity", + "orderNumber": 1, + "path": "/interface/action/child/setGravity.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 1, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 4 + } + ] + }, + "237": { + "contexts": [ + "Healing Dealt Percent - The percentage of", + "raw healing dealt to which the player or", + "players will set their healing dealt. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Gravity", + "orderNumber": 2, + "path": "/interface/action/child/setGravity.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 2, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 4 + } + ] + }, + "238": { + "contexts": [ + "Player - The player or players whose healing", + "received will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Healing Received", + "orderNumber": 1, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 4 + } + ] + }, + "239": { + "contexts": [ + "Healing Received Percent - The percentage", + "of raw healing received to which the player", + "or players will set their healing received.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Healing Received", + "orderNumber": 2, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 4 + } + ] + }, + "240": { + "contexts": [ + "Player - The player or players who will", + "become invisible. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Invisible", + "orderNumber": 1, + "path": "/interface/action/child/setInvisible.ts", + "indent": 4 + } + ] + }, + "241": { + "contexts": [ + "Invisible to - Specifies for whom the player", + "or players will be invisible. Can be set", + "to All, Enemies, or None." + ], + "usedFiles": [ + { + "topName": "Set Invisible", + "orderNumber": 2, + "path": "/interface/action/child/setInvisible.ts", + "indent": 4 + } + ] + }, + "242": { + "contexts": [ + "Time - The match time in seconds. Can use", + "most Number based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Match Time", + "orderNumber": 1, + "path": "/interface/action/child/setMatchTime.ts", + "indent": 4 + } + ] + }, + "243": { + "contexts": [ + "Player - The player or players whose max", + "health will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Max Health", + "orderNumber": 1, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 4 + } + ] + }, + "244": { + "contexts": [ + "Player - The player or players whose move", + "speed will be set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Max Health", + "orderNumber": 2, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 4 + }, + { + "topName": "Set Move Speed", + "orderNumber": 1, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 4 + } + ] + }, + "245": { + "contexts": [ + "Health Percent - The percentage of raw move", + "speed to which the player or players will", + "set their move speed. Can use most Number", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Move Speed", + "orderNumber": 2, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 4 + } + ] + }, + "246": { + "contexts": [ + "Visible to - One or more players who will", + "see the message. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Objective Description", + "orderNumber": 2, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 1, + "path": "/interface/action/child/smallMessage.ts", + "indent": 4 + } + ] + }, + "247": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated.", + "The message will keep asking for and using", + "new values from reevaluated inputs. Can", + "choose โ€œVisible to and Stringโ€ or โ€œStringโ€" + ], + "usedFiles": [ + { + "topName": "Set Objective Description", + "orderNumber": 3, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + } + ] + }, + "248": { + "contexts": [ + "Player - The player or players whose hero", + "list is being set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 4 + } + ] + }, + "249": { + "contexts": [ + "Hero - The hero or heroes that will be available.", + "If no heroes are provided, the action has", + "no effect. Can use most Hero based Value", + "Syntax for this value including compatible Arrays." + ], + "usedFiles": [ + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 4 + } + ] + }, + "250": { + "contexts": [ + "Player - The player or players whose score", + "will be set. Can use most Player based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Player Score", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 4 + } + ] + }, + "251": { + "contexts": [ + "Team - The team or teams whose score will", + "be set. Can use most Team based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Player Score", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 4 + }, + { + "topName": "Set Team Score", + "orderNumber": 1, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 4 + } + ] + }, + "252": { + "contexts": [ + "Variable - Specifies which Player Variable", + "to store the value into. Specified by a", + "single alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Set Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "253": { + "contexts": [ + "Value - The value that will be stored. Nearly", + "any Value syntax can be used, however it", + "is most common with Number based syntax." + ], + "usedFiles": [ + { + "topName": "Set Player Variable", + "orderNumber": 3, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "254": { + "contexts": [ + "Variable - Specifies which player variableโ€™s", + "value is the array to modify, if the variableโ€™s", + "value is not an array, then its value becomes", + "an empty array. Specified by a single alphabetic", + "letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "255": { + "contexts": [ + "Index - The index of the array to modify.", + "If the index is beyond the end of the array,", + "the array is extended with the new elements", + "given a value of zero. Can use most Number", + "based Value Syntax with this value." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "256": { + "contexts": [ + "Value - The value that will be stored into", + "the array. Nearly any Value syntax can be", + "used, however it is most common with Number based syntax." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "257": { + "contexts": [ + "Player - The player or players whose access", + "to primary fire is affected. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "258": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use primary fire. Expects", + "a Boolean Value such as True, False, or", + "Compare. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "259": { + "contexts": [ + "Player - The player or players whose projectile", + "gravity will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Projectile Gravity", + "orderNumber": 1, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 4 + } + ] + }, + "260": { + "contexts": [ + "Projectile Gravity Percent - The percentage", + "of the regular projectile gravity to which", + "the player or players will set their personal", + "projectile gravity. Can use most Number", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Projectile Gravity", + "orderNumber": 2, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 4 + } + ] + }, + "261": { + "contexts": [ + "Player - The player or players whose projectile", + "speed will be set. Can use most Player based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Projectile Speed", + "orderNumber": 1, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 4 + } + ] + }, + "262": { + "contexts": [ + "Projectile Speed Percent - The percentage", + "of the regular projectile speed to which", + "the player or players will set their personal", + "projectile speed. Can use most Number based", + "Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Projectile Speed", + "orderNumber": 2, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 4 + } + ] + }, + "263": { + "contexts": [ + "Player - The player or players whose respawn", + "max time will is being defined. Can use", + "most Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Respawn Max Time", + "orderNumber": 1, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 4 + } + ] + }, + "264": { + "contexts": [ + "Time - The duration between death and respawn", + "in seconds. Can use most Number based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Respawn Max Time", + "orderNumber": 2, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 4 + } + ] + }, + "265": { + "contexts": [ + "Player - The player or players whose access", + "to secondary fire is affected. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "266": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use secondary fire.", + "Expects a Boolean Value such as True, False,", + "or Compare. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "267": { + "contexts": [ + "Speed Percent - The simulation rate as a", + "percentage of normal speed. Only rates up", + "to 100% are allowed. Can use most Number", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Slow Motion", + "orderNumber": 1, + "path": "/interface/action/child/setSlowMotion.ts", + "indent": 4 + } + ] + }, + "268": { + "contexts": [ + "Player - The player or players to whom the", + "status will be applied. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 1, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "269": { + "contexts": [ + "Assister - Specifies a player to be awarded", + "assist credit should the affected player", + "or players be killed while the status is", + "in effect. An assister of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 2, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "270": { + "contexts": [ + "Status - The Status to be applied from the", + "player or players. These behave similarly", + "to statuses applied from hero abilities.", + "Values include Hacked, Burning, Knocked", + "Down, Asleep, Frozen, Unkillable, Invincible,", + "Phased Out, Rooted, or Stunned." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 3, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "271": { + "contexts": [ + "Duration - The duration of the status effect", + "in seconds. To have a status that lasts", + "until a clear status action is executed,", + "proivide an arbitrarily long duration such", + "as 9999. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 4, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "272": { + "contexts": [ + "Score - The score that will be set. Can", + "use most Number based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Team Score", + "orderNumber": 2, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 4 + } + ] + }, + "273": { + "contexts": [ + "Player - The player or players whose ultimate", + "charge will be set. Can use most Player", + "based Value Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Charge", + "orderNumber": 1, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 4 + } + ] + }, + "274": { + "contexts": [ + "Enabled - Specifies whether the player or", + "players are able to use their ultimate ability.", + "Expects a Boolean Value such as True, False,", + "or Compare. Can use most Boolean based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 4 + } + ] + }, + "275": { + "contexts": [ + "Charge Percent - The percentage of maximum", + "charge. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Charge", + "orderNumber": 2, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 4 + } + ] + }, + "276": { + "contexts": [ + "Condition - Specifies whether the loop will", + "occur. Can use most Conditional based Value", + "Syntax for this value." + ], + "usedFiles": [ + { + "topName": "Skip", + "orderNumber": 1, + "path": "/interface/action/child/skip.ts", + "indent": 4 + }, + { + "topName": "Skip If", + "orderNumber": 1, + "path": "/interface/action/child/skipIf.ts", + "indent": 4 + } + ] + }, + "277": { + "contexts": [ + "Number of actions - The number of action", + "to skip, not including this action. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Skip If", + "orderNumber": 2, + "path": "/interface/action/child/skipIf.ts", + "indent": 4 + } + ] + }, + "278": { + "contexts": [ + "Player - The player or players that will", + "begin accelerating. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 1, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "279": { + "contexts": [ + "Direction - The unit direction in which", + "the acceleration will be applied. This value", + "is normalized internally. Can use most Vector", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 2, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "280": { + "contexts": [ + "Rate - The rate of acceleration in meters", + "per second squared. This value may need", + "to be quite high in order to overcome gravity", + "and/or surface friction. Can use most Number", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 3, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "281": { + "contexts": [ + "Max Speed - The speed at which acceleration", + "will stop for the player or players. It", + "may not be possible to reach this speed", + "due to gravity and/or surface friction.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 4, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "282": { + "contexts": [ + "Relative - Specifies whether direction is", + "relavtive to the world coordinates or the", + "local coordinates of the player or players." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 5, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "283": { + "contexts": [ + "Player - The player or players who will", + "start turning. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 6, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + }, + { + "topName": "Start Damage Modification", + "orderNumber": 1, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + }, + { + "topName": "Start Facing", + "orderNumber": 1, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "284": { + "contexts": [ + "Player - The player executing this rule.", + "As specified by the event, may be the same", + "as the attacker or the victim. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 1, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "285": { + "contexts": [ + "Eye Position - The position of the camrea,", + "reevaluates continously. Can use most Vector", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 2, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "286": { + "contexts": [ + "Look at position - Where the camera looks", + "at, reevaluates continously. Can use most", + "Vector based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 3, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "287": { + "contexts": [ + "Blend Speed - How fast to blend the camera", + "movement as positions change. 0 means do", + "not blend at all and just change positions", + "instantly. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 4, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "288": { + "contexts": [ + "Damagers - The player or players whose outgoing", + "damage will be modified (when attacking", + "the receivers). Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 2, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "289": { + "contexts": [ + "Damage Percent - The percentage of damage", + "that will apply to receivers when attacked", + "by damagers. Can use most Number based Value", + "Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 3, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "290": { + "contexts": [ + "Reevaluation - Specifies which of this actionโ€™s", + "inputs will be continously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. Can", + "choose from โ€œReceivers, Damagers, and Damage", + "Percentโ€, โ€œReceivers and Damagersโ€, or โ€œNoneโ€." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 4, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "291": { + "contexts": [ + "Receivers - One or more players who will", + "receive the damage over time. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "292": { + "contexts": [ + "Damager - The player who will receive credit", + "for the damage. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 2, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "293": { + "contexts": [ + "Duration - The duration of the damage over", + "time in seconds. To have a DOT that lasts", + "until stopped by script, provide an arbitrarily", + "long duration such as 9999. Can use most", + "Number based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 3, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "294": { + "contexts": [ + "Damage Per Second - The damage per second", + "for the damage over time. Can use most Number", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 4, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "295": { + "contexts": [ + "Direction - The unit direction in which", + "the player or players will eventually face.", + "Can use most Vector based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 2, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "296": { + "contexts": [ + "Turn Rate - The turn rate in degrees per", + "second. Can use most Number based Value", + "Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 3, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "297": { + "contexts": [ + "Relative - Specifies whether direction is", + "relative to the world coordinates or the", + "local coordinates of the player or players." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 4, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "298": { + "contexts": [ + "Reevaluation - Specifies which of this actions", + "inputs will be continously reevaluated.", + "This action will keep asking for and using", + "new values from reevaluated inputs. You", + "can choose from โ€œDirection and Turn Rateโ€ or โ€œNoneโ€." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 5, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "299": { + "contexts": [ + "Player - The player or players who will", + "be forced to be a specified hero. Can use", + "most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 1, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "300": { + "contexts": [ + "Hero - The hero that the player or players", + "will be forced to be. Can use most Hero", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 2, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "301": { + "contexts": [ + "Team - The team whose spawn room will be", + "forced. Can use most Team based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 1, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "302": { + "contexts": [ + "Room - The number of the spawn room to be", + "forced. 0 is the first spawn room, 1 is", + "the second, and 2 is the third. If this", + "specified spawn room does not exist. Players", + "will use the normal spawn room. Can use", + "most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 2, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "303": { + "contexts": [ + "Player - The player or players whose movement", + "whill be forced or limited. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 1, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "304": { + "contexts": [ + "Min Forward - Sets the minimum run forward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 2, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "305": { + "contexts": [ + "Max Forward - Sets the maximum run forward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 3, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "306": { + "contexts": [ + "Min Backward - Sets the minimum run backward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 4, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "307": { + "contexts": [ + "Max Backward - Sets the maximum run backward", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 5, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "308": { + "contexts": [ + "Min Sideways - Sets the minimum run sideways", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 6, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "309": { + "contexts": [ + "Max Forward - Sets the maximum run sideways", + "amount. 0 allows the player or players to", + "stop while 1 forces full forward movement.", + "Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 7, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "310": { + "contexts": [ + "Healer - The player who will receive credit", + "for the heal. A damager of null indicates", + "no player will receive credit. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 2, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "311": { + "contexts": [ + "Duration - The duration of the heal over", + "time in seconds. To have a HOT that lasts", + "until stopped by script, provide an arbitrarily", + "long duration such as 9999. Can use most", + "Number based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 3, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "312": { + "contexts": [ + "Damage Per Second - The heal per second", + "for the heal over time. Can use most Number", + "based Value Syntax to specify." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 4, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "313": { + "contexts": [ + "Player - The player or players who are holding", + "a button virtually. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Start Holding Button", + "orderNumber": 1, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 4 + } + ] + }, + "314": { + "contexts": [ + "Button - The logical button that is being held virtually." + ], + "usedFiles": [ + { + "topName": "Start Holding Button", + "orderNumber": 2, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 4 + } + ] + }, + "315": { + "contexts": [ + "Player - The player or players who will", + "stop accelerating. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Accelerating", + "orderNumber": 1, + "path": "/interface/action/child/stopAccelerating.ts", + "indent": 4 + } + ] + }, + "316": { + "contexts": [ + "Player - The player or players whose scripted", + "damage over time will stop. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop All Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopAllDamageOverTime.ts", + "indent": 4 + } + ] + }, + "317": { + "contexts": [ + "Player - The player or players whose scripted", + "heal over time will stop. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop All Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopAllHealOverTime.ts", + "indent": 4 + } + ] + }, + "318": { + "contexts": [ + "Player - The player or players whose forced", + "camera positions will stop. Can use most", + "Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Camera", + "orderNumber": 1, + "path": "/interface/action/child/stopCamera.ts", + "indent": 4 + } + ] + }, + "319": { + "contexts": [ + "Variable - Specifies which global variable", + "to stop modifying. Specified by a single", + "alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/stopChasingGlobalVariable.ts", + "indent": 4 + } + ] + }, + "320": { + "contexts": [ + "Player - The player whose variable will", + "stop changing. If multiple players are provided,", + "each of their variables will stop changing.", + "Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 4 + } + ] + }, + "321": { + "contexts": [ + "Variable - Specifies which player variable", + "to stop modifying. Specified by a single", + "alphabetic letter (A through Z)." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 4 + } + ] + }, + "322": { + "contexts": [ + "Damage modification ID - Specifies which", + "damage modification instance to stop, this", + "ID may be the last damage modification ID", + "or a variable into which last damage modification", + "ID was earlier stored. Can use most Number", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Damage Modification", + "orderNumber": 1, + "path": "/interface/action/child/stopDamageModification.ts", + "indent": 4 + } + ] + }, + "323": { + "contexts": [ + "Damage Over Time ID - Specifies which damage", + "over time instance to stop, this ID may", + "be the last damage over time ID or a variable", + "into which last damage over time ID was", + "earlier stored. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopDamageOverTime.ts", + "indent": 4 + } + ] + }, + "324": { + "contexts": [ + "Player - The player or players who will", + "stop turning. Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Facing", + "orderNumber": 1, + "path": "/interface/action/child/stopFacing.ts", + "indent": 4 + } + ] + }, + "325": { + "contexts": [ + "Player - The player or players who will", + "no longer be forced to be a specific hero.", + "Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Player To Be Hero", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "326": { + "contexts": [ + "Team - The team that will resume using their", + "normal spawn room. Can use most Team based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Spawn Room", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "327": { + "contexts": [ + "Player - The player or players whose movement", + "inout will be restored. Can use most Player", + "based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Throttle", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingThrottle.ts", + "indent": 4 + } + ] + }, + "328": { + "contexts": [ + "Heal Over Time ID - Specifies which heal", + "over time instance to stop, this ID may", + "be the last heal over time ID or a variable", + "into which last heal over time ID was earlier", + "stored. Can use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopHealOverTime.ts", + "indent": 4 + } + ] + }, + "329": { + "contexts": [ + "Player - The player or players who are no", + "longer holding a button virtually. Can use", + "most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Stop Holding Button", + "orderNumber": 1, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 4 + } + ] + }, + "330": { + "contexts": [ + "The logical button that is no longer being held virtually." + ], + "usedFiles": [ + { + "topName": "Stop Holding Button", + "orderNumber": 2, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 4 + } + ] + }, + "331": { + "contexts": [ + "Player - The player or players to teleport.", + "Can use most Player based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Teleport", + "orderNumber": 1, + "path": "/interface/action/child/teleport.ts", + "indent": 4 + } + ] + }, + "332": { + "contexts": [ + "Position - The position to which the player", + "or players will teleport. If a player is", + "providedm the position of the player is", + "used. Can use most Vector based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Teleport", + "orderNumber": 2, + "path": "/interface/action/child/teleport.ts", + "indent": 4 + } + ] + }, + "333": { + "contexts": [ + "Time - The duration of the pause. A minimum", + "value of 0.250 seconds is required. Can", + "use most Number based Value Syntax." + ], + "usedFiles": [ + { + "topName": "Wait", + "orderNumber": 1, + "path": "/interface/action/child/wait.ts", + "indent": 4 + } + ] + }, + "334": { + "contexts": [ + "Wait Behavior - Specifies if and how the", + "wait can be interrupted. If the condition", + "list is ignored, the wait will not be interrupted,", + "otherwise, the condition list will determine", + "if and when the action list will abort or restart." + ], + "usedFiles": [ + { + "topName": "Wait", + "orderNumber": 2, + "path": "/interface/action/child/wait.ts", + "indent": 4 + } + ] + }, + "335": { + "contexts": [ + "The ONGOING - GLOBAL event attribute will", + "affect all entities in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 0, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Ongoing - Global", + "orderNumber": 0, + "path": "/interface/event/child/onGoingGlobal.ts", + "indent": 0 + } + ] + }, + "336": { + "contexts": [ + "The ONGOING - EACH PLAYER event attribute", + "will affect the specified players in the", + "game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 1, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Ongoing - Each Player", + "orderNumber": 0, + "path": "/interface/event/child/onGoingEachPlayer.ts", + "indent": 0 + } + ] + }, + "337": { + "contexts": [ + "The PLAYER EARNED ELIMINATION event attribute", + "will affect the specified players who successfully", + "score an elimination in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 2, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player earned elimination", + "orderNumber": 0, + "path": "/interface/event/child/playerEarnedElimination.ts", + "indent": 0 + } + ] + }, + "338": { + "contexts": [ + "The PLAYER DEALT FINAL BLOW event attribute", + "will affect the specified players who successfully", + "dealt the lethal damage against another", + "player in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 3, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player dealt final blow", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtFinalBlow.ts", + "indent": 0 + } + ] + }, + "339": { + "contexts": [ + "The PLAYER DEALT DAMAGE event attribute", + "will affect the specified players who successfully", + "dealt damage against another player in the", + "game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 4, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player dealt damage", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtDamage.ts", + "indent": 0 + } + ] + }, + "340": { + "contexts": [ + "The PLAYER TOOK DAMAGE event attribute will", + "affect the specified players who received", + "damage in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 5, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player took damage", + "orderNumber": 0, + "path": "/interface/event/child/playerTookDamage.ts", + "indent": 0 + } + ] + }, + "341": { + "contexts": [ + "The PLAYER DIED event attribute will affect", + "the specified players who died in the game environment." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 6, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player Died", + "orderNumber": 0, + "path": "/interface/event/child/playerDied.ts", + "indent": 0 + } + ] + }, + "342": { + "contexts": [ + "The absolute value is a measure of how far", + "the number is from zero. If you think of", + "a number line, with zero in the center,", + "all youโ€™re really doing is asking how far", + "away you are from this zero point. For example", + "the Absolute Value of 4 is 4 and the absolute", + "value of -6 is 6." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 0, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Absolute Value", + "orderNumber": 0, + "path": "/interface/value/child/absoluteValue.ts", + "indent": 0 + } + ] + }, + "343": { + "contexts": [ + "The sum of two numbers or vectors. This", + "value will add the two specified values." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 1, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Add", + "orderNumber": 0, + "path": "/interface/value/child/add.ts", + "indent": 0 + } + ] + }, + "344": { + "contexts": [ + "An array containing all dead players on", + "a team in a match. A player is defined as", + "being dead when they are eliminated but", + "have not yet respawned back into the game." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 2, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Dead Players", + "orderNumber": 0, + "path": "/interface/value/child/allDeadPlayers.ts", + "indent": 0 + } + ] + }, + "345": { + "contexts": [ + "An array of all heroes in Overwatch. Not", + "to be confused with the All Players array" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 3, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Heroes", + "orderNumber": 0, + "path": "/interface/value/child/allHeroes.ts", + "indent": 0 + } + ] + }, + "346": { + "contexts": [ + "An array containing all living players on", + "a team in a match. A player is defined as", + "being alive when they are spawned into the", + "game but have not yet been eliminated since spawning." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 4, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Living Players", + "orderNumber": 0, + "path": "/interface/value/child/allLivingPlayers.ts", + "indent": 0 + } + ] + }, + "347": { + "contexts": [ + "An array containing all players on a team in a match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 5, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players", + "orderNumber": 0, + "path": "/interface/value/child/allPlayers.ts", + "indent": 0 + } + ] + }, + "348": { + "contexts": [ + "An array containing all players occupying", + "neither a payload nor a control point (either", + "on a team or in a match)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 6, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players Not On Objective", + "orderNumber": 0, + "path": "/interface/value/child/allPlayersNotOnObjective.ts", + "indent": 0 + } + ] + }, + "349": { + "contexts": [ + "An array containing all players occupying", + "either a payload or a control point (either", + "on a team or in a match)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 7, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players On Objective", + "orderNumber": 0, + "path": "/interface/value/child/allPlayersOnObjective.ts", + "indent": 0 + } + ] + }, + "350": { + "contexts": [ + "The array of heroes from which the specified", + "player is currently allowed to select." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 8, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Allowed Heroes", + "orderNumber": 0, + "path": "/interface/value/child/allowedHeroes.ts", + "indent": 0 + } + ] + }, + "351": { + "contexts": [ + "The playerโ€™s current height in meters above", + "a surface. Results in a 0 whenever the place", + "is on a surface." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 9, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Altitude Of", + "orderNumber": 0, + "path": "/interface/value/child/altitudeOf.ts", + "indent": 0 + } + ] + }, + "352": { + "contexts": [ + "Whether both of the two inputs are true", + "or equivalent to true." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 10, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "And", + "orderNumber": 0, + "path": "/interface/value/child/and.ts", + "indent": 0 + } + ] + }, + "353": { + "contexts": [ + "The angle in degrees between two directional", + "vectors (no normalization required)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 11, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Angle Between Vectors", + "orderNumber": 0, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 0 + } + ] + }, + "354": { + "contexts": [ + "The difference between two angles, after", + "the angles are wrapped within +/- 180 of", + "each other, the result is positive if the", + "second angle is greater than the first angle,", + "otherwise the result is zero or negative." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 12, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Angle Difference", + "orderNumber": 0, + "path": "/interface/value/child/angleDifference.ts", + "indent": 0 + } + ] + }, + "355": { + "contexts": [ + "A copy of an array with one or more values", + "appended to the end." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 13, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Append To Array", + "orderNumber": 0, + "path": "/interface/value/child/appendToArray.ts", + "indent": 0 + } + ] + }, + "356": { + "contexts": [ + "Arccosine in degrees of the specified value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 14, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arccosineInDegrees.ts", + "indent": 0 + } + ] + }, + "357": { + "contexts": [ + "Arccosine in radians of the specified value" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 15, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arccosineInRadians.ts", + "indent": 0 + } + ] + }, + "358": { + "contexts": [ + "Arcsine in degrees of the specified value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 16, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arcsineInDegrees.ts", + "indent": 0 + } + ] + }, + "359": { + "contexts": [ + "Arcsine in radians of the specified value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 17, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arcsineInRadians.ts", + "indent": 0 + } + ] + }, + "360": { + "contexts": [ + "Arctangent in degrees of the specified numerator", + "and denominator(often referred to as atan2)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 18, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 0 + } + ] + }, + "361": { + "contexts": [ + "Arctangent in radians of the specified numerator", + "and denominator(often referred to as atan2)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 19, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 0 + } + ] + }, + "362": { + "contexts": [ + "Whether the specified array contains the", + "specified value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 20, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Array Contains", + "orderNumber": 0, + "path": "/interface/value/child/arrayContains.ts", + "indent": 0 + } + ] + }, + "363": { + "contexts": [ + "A copy of the specified array containing", + "only values from a specified index range." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 21, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Array Slice", + "orderNumber": 0, + "path": "/interface/value/child/arraySlice.ts", + "indent": 0 + } + ] + }, + "364": { + "contexts": [ + "The player that dealt damage for the event", + "currently being processed by this rule.", + "May be the same as the victim or the event player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 22, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Attacker", + "orderNumber": 0, + "path": "/interface/value/child/attacker.ts", + "indent": 0 + } + ] + }, + "365": { + "contexts": [ + "Shorthand for the direction vector(0, 0,", + "-1) which points backwards." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 23, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Backward", + "orderNumber": 0, + "path": "/interface/value/child/backward.ts", + "indent": 0 + } + ] + }, + "366": { + "contexts": [ + "The player closest to a position, optionally", + "restricted by team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 24, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Closest Player To", + "orderNumber": 0, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 0 + } + ] + }, + "367": { + "contexts": [ + "Whether the comparison of the two inputs is true." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 25, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Compare", + "orderNumber": 0, + "path": "/interface/value/child/compare.ts", + "indent": 0 + } + ] + }, + "368": { + "contexts": [ + "The score percentage for the specified team", + "in the control mode." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 26, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Control Mode Scoring Percentage", + "orderNumber": 0, + "path": "/interface/value/child/controlModeScoringPercentage.ts", + "indent": 0 + } + ] + }, + "369": { + "contexts": [ + "The team that is currently accumulating", + "score percentage in control mode Results", + "in all if neither team is accumulating score." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 27, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Control Mode Scoring Team", + "orderNumber": 0, + "path": "/interface/value/child/controlModeScoringTeam.ts", + "indent": 0 + } + ] + }, + "370": { + "contexts": [ + "The cosine of a specified angle in degrees.", + "The cosine of the angle is equal to the", + "length of the adjacent side divided by the", + "length of the hypotenuse." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 28, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cosine From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/cosineFromDegrees.ts", + "indent": 0 + } + ] + }, + "371": { + "contexts": [ + "The cosine of a specified angle in radians.", + "The cosine of the angle is equal to the", + "length of the adjacent side divided by the", + "length of the hypotenuse. A radian is a", + "unit of angle, equal to an angle at the", + "center of a circle whose arc is equal in", + "length to the radius." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 29, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cosine From Radians", + "orderNumber": 0, + "path": "/interface/value/child/cosineFromRadians.ts", + "indent": 0 + } + ] + }, + "372": { + "contexts": [ + "The number of elements in the specified array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 30, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Count Of", + "orderNumber": 0, + "path": "/interface/value/child/countOf.ts", + "indent": 0 + } + ] + }, + "373": { + "contexts": [ + "The cross product of the specified values." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 31, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cross Product", + "orderNumber": 0, + "path": "/interface/value/child/crossProduct.ts", + "indent": 0 + } + ] + }, + "374": { + "contexts": [ + "The current array element being considered.", + "Only meaningful during the evaluation of", + "values such as filtered array and sorted array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 32, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Current Array Element", + "orderNumber": 0, + "path": "/interface/value/child/currentArrayElement.ts", + "indent": 0 + } + ] + }, + "375": { + "contexts": [ + "The unit-length direction vector corresponding", + "to the specified angles." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 33, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Direction From Angles", + "orderNumber": 0, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 0 + } + ] + }, + "376": { + "contexts": [ + "The unit-length direction vector from position to another." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 34, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Direction Towards", + "orderNumber": 0, + "path": "/interface/value/child/directionTowards.ts", + "indent": 0 + } + ] + }, + "377": { + "contexts": [ + "The distance between two positions in meters." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 35, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Distance Between", + "orderNumber": 0, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 0 + } + ] + }, + "378": { + "contexts": [ + "The ratio of two numbers or vectors. A vector", + "divided by a number will yield a scaled", + "vector. Division by zero results in zero." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 36, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Divide", + "orderNumber": 0, + "path": "/interface/value/child/divide.ts", + "indent": 0 + } + ] + }, + "379": { + "contexts": [ + "The dot product of the specified values.", + "The dot product tells you what amount of", + "one vector goes in the direction of another." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 37, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Dot Product", + "orderNumber": 0, + "path": "/interface/value/child/dotProduct.ts", + "indent": 0 + } + ] + }, + "380": { + "contexts": [ + "Shorthand for the direction vector(0, -1,", + "0) which points down." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 38, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Down", + "orderNumber": 0, + "path": "/interface/value/child/down.ts", + "indent": 0 + } + ] + }, + "381": { + "contexts": [ + "An array with no elements." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 39, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Empty Array", + "orderNumber": 0, + "path": "/interface/value/child/emptyArray.ts", + "indent": 0 + } + ] + }, + "382": { + "contexts": [ + "Whether the specified player, icon entity,", + "or effect entity still exists. Useful for", + "determining if a player has left the match", + "or an entity has been destroyed." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 40, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Entity Exists", + "orderNumber": 0, + "path": "/interface/value/child/entityExists.ts", + "indent": 0 + } + ] + }, + "383": { + "contexts": [ + "The amount of damage received by the victim", + "for the event currently being processed by this rule." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 41, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Damage", + "orderNumber": 0, + "path": "/interface/value/child/eventDamage.ts", + "indent": 0 + } + ] + }, + "384": { + "contexts": [ + "The player executing the rule, as specified", + "by the event, may be the same as the attacker or victim." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 42, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Player", + "orderNumber": 0, + "path": "/interface/value/child/eventPlayer.ts", + "indent": 0 + } + ] + }, + "385": { + "contexts": [ + "Whether the damage was a critical hit (such", + "as a headshot) for the event currently being", + "processed by this rule." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 43, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Was Critical Hit", + "orderNumber": 0, + "path": "/interface/value/child/eventWasCriticalHit.ts", + "indent": 0 + } + ] + }, + "386": { + "contexts": [ + "The position of a player's first person", + "view (used for aiming)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 44, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Eye Position", + "orderNumber": 0, + "path": "/interface/value/child/eyePosition.ts", + "indent": 0 + } + ] + }, + "387": { + "contexts": [ + "The unit-length directional vector of a", + "playerโ€™s current facing relative to the", + "world. This value includes both horizontal", + "and vertical facing." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 45, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Facing Direction Of", + "orderNumber": 0, + "path": "/interface/value/child/facingDirectionOf.ts", + "indent": 0 + } + ] + }, + "388": { + "contexts": [ + "The Boolean value of false." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 46, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "False", + "orderNumber": 0, + "path": "/interface/value/child/false.ts", + "indent": 0 + } + ] + }, + "389": { + "contexts": [ + "The player farthest to a position, optionally", + "restricted by team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 47, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Farthest Player From", + "orderNumber": 0, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 0 + } + ] + }, + "390": { + "contexts": [ + "A copy of the specified array with any values", + "that do not match the specified condition removed." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 48, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Filtered Array", + "orderNumber": 0, + "path": "/interface/value/child/filteredArray.ts", + "indent": 0 + } + ] + }, + "391": { + "contexts": [ + "The value at the started of the specified", + "array. Results in a 0 if the specified array is empty." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 49, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "First Of", + "orderNumber": 0, + "path": "/interface/value/child/firstOf.ts", + "indent": 0 + } + ] + }, + "392": { + "contexts": [ + "The position of a specific teamโ€™s flag in", + "Capture the Flag." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 50, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Flag Position", + "orderNumber": 0, + "path": "/interface/value/child/flagPosition.ts", + "indent": 0 + } + ] + }, + "393": { + "contexts": [ + "Shorthand for the direction vector(0, 0,", + "1) which points forward." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 51, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Forward", + "orderNumber": 0, + "path": "/interface/value/child/forward.ts", + "indent": 0 + } + ] + }, + "394": { + "contexts": [ + "The current value of a global variable,", + "which is a variable which belongs to the", + "custom game itself." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 52, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Global Variable", + "orderNumber": 0, + "path": "/interface/value/child/globalVariable.ts", + "indent": 0 + } + ] + }, + "395": { + "contexts": [ + "Whether an entity has spawned in the world.", + "Results in false for players who have not", + "chosen a hero yet." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 53, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Has Spawned", + "orderNumber": 0, + "path": "/interface/value/child/hasSpawned.ts", + "indent": 0 + } + ] + }, + "396": { + "contexts": [ + "Whether the specified player has the specified", + "status, either from the set status action", + "or from a non-scripted game mechanic." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 54, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Has Status", + "orderNumber": 0, + "path": "/interface/value/child/hasStatus.ts", + "indent": 0 + } + ] + }, + "397": { + "contexts": [ + "The current health of a player including", + "armor and shields." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 55, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Health", + "orderNumber": 0, + "path": "/interface/value/child/health.ts", + "indent": 0 + } + ] + }, + "398": { + "contexts": [ + "A hero constant. Specifies one of the available", + "heroes by name in the game." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 56, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero", + "orderNumber": 0, + "path": "/interface/value/child/hero.ts", + "indent": 0 + } + ] + }, + "399": { + "contexts": [ + "Converts a hero parameter into a string", + "that shows up as an icon." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 57, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero Icon String", + "orderNumber": 0, + "path": "/interface/value/child/heroIconString.ts", + "indent": 0 + } + ] + }, + "400": { + "contexts": [ + "The Current Hero of a Player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 58, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero Of", + "orderNumber": 0, + "path": "/interface/value/child/heroOf.ts", + "indent": 0 + } + ] + }, + "401": { + "contexts": [ + "The horizontal angle in degrees corresponding", + "to the specified direction vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 59, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Angle From Direction", + "orderNumber": 0, + "path": "/interface/value/child/horizontalAngleFromDirection.ts", + "indent": 0 + } + ] + }, + "402": { + "contexts": [ + "The horizontal angle in degrees from a playerโ€™s", + "current forward direction to the specified", + "position. The result is positive if the", + "position is on the playerโ€™s left, otherwise", + "the result is zero or negative." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 60, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Angle Towards", + "orderNumber": 0, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 0 + } + ] + }, + "403": { + "contexts": [ + "The directional angle in degrees of a playerโ€™s", + "current facing relative to the world. This", + "value increases as the player rotates to", + "the left (wrapping around at +/- 180)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 61, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Facing Angle Of", + "orderNumber": 0, + "path": "/interface/value/child/horizontalFacingAngleOf.ts", + "indent": 0 + } + ] + }, + "404": { + "contexts": [ + "The current horizontal speed of a player", + "in meters per second. This measurement excludes", + "all vertical motion." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 62, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/horizontalSpeedOf.ts", + "indent": 0 + } + ] + }, + "405": { + "contexts": [ + "The index of a value within an array or", + "-1 if no such value can be found." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 63, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 0, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 0 + } + ] + }, + "406": { + "contexts": [ + "Determines whether a player is alive. Returns", + "a Boolean value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 64, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Alive", + "orderNumber": 0, + "path": "/interface/value/child/isAlive.ts", + "indent": 0 + } + ] + }, + "407": { + "contexts": [ + "Whether the match is currently in its assemble heroes phase." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 65, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Assembling Heroes", + "orderNumber": 0, + "path": "/interface/value/child/isAssemblingHeroes.ts", + "indent": 0 + } + ] + }, + "408": { + "contexts": [ + "Whether the match is between rounds." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 66, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Between Rounds", + "orderNumber": 0, + "path": "/interface/value/child/isBetweenRounds.ts", + "indent": 0 + } + ] + }, + "409": { + "contexts": [ + "Whether a player is holding a specific button." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 67, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Button Held", + "orderNumber": 0, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 0 + } + ] + }, + "410": { + "contexts": [ + "Whether a player is using a specific communication", + "type (such as emote, using a voice line, etc.)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 68, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 0 + } + ] + }, + "411": { + "contexts": [ + "Whether a player is using any communication", + "type (such as emoting, using a voice line, etc.)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 69, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAny.ts", + "indent": 0 + } + ] + }, + "412": { + "contexts": [ + "Whether a player is using a emote." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 70, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any Emote", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAnyEmote.ts", + "indent": 0 + } + ] + }, + "413": { + "contexts": [ + "Whether a player is using a voice line.", + "(The duration of a voice line is assumed", + "to be 4 seconds.)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 71, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any Voice Line", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAnyVoiceLine.ts", + "indent": 0 + } + ] + }, + "414": { + "contexts": [ + "Whether the point is locked in control mode." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 72, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Control Mode Point Locked", + "orderNumber": 0, + "path": "/interface/value/child/isControlModePointLocked.ts", + "indent": 0 + } + ] + }, + "415": { + "contexts": [ + "Whether a player is crouching." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 73, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Crouching", + "orderNumber": 0, + "path": "/interface/value/child/isCrouching.ts", + "indent": 0 + } + ] + }, + "416": { + "contexts": [ + "Whether the current game of capture the", + "flag is in sudden death." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 74, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is CTF Mode In Sudden Death", + "orderNumber": 0, + "path": "/interface/value/child/isCTFModeInSuddenDeath.ts", + "indent": 0 + } + ] + }, + "417": { + "contexts": [ + "Whether a player is dead." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 75, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Dead", + "orderNumber": 0, + "path": "/interface/value/child/isDead.ts", + "indent": 0 + } + ] + }, + "418": { + "contexts": [ + "Whether the specified playerโ€™s primary weapon", + "attack is being used." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 76, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Firing Primary", + "orderNumber": 0, + "path": "/interface/value/child/isFiringPrimary.ts", + "indent": 0 + } + ] + }, + "419": { + "contexts": [ + "Whether the specified playerโ€™s secondary", + "weapon attack is being used." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 77, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Firing Secondary", + "orderNumber": 0, + "path": "/interface/value/child/isFiringSecondary.ts", + "indent": 0 + } + ] + }, + "420": { + "contexts": [ + "Whether a specific teamโ€™s flag is at its", + "base in capture the flag." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 78, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Flag At Base", + "orderNumber": 0, + "path": "/interface/value/child/isFlagAtBase.ts", + "indent": 0 + } + ] + }, + "421": { + "contexts": [ + "Whether a specific team's flag is being", + "is being carried by a member of the opposing", + "team in capture the flag." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 79, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Flag Being Carried", + "orderNumber": 0, + "path": "/interface/value/child/isFlagBeingCarried.ts", + "indent": 0 + } + ] + }, + "422": { + "contexts": [ + "Whether the main phase of the match is in", + "progress (during which time combat and scoring are allowed)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 80, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Game In Progress", + "orderNumber": 0, + "path": "/interface/value/child/isGameInProgress.ts", + "indent": 0 + } + ] + }, + "423": { + "contexts": [ + "Whether a specific hero is being played", + "(either on a team or in the match)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 81, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Hero Being Played", + "orderNumber": 0, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 0 + } + ] + }, + "424": { + "contexts": [ + "Whether a player is airborne." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 82, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Air", + "orderNumber": 0, + "path": "/interface/value/child/isInAir.ts", + "indent": 0 + } + ] + }, + "425": { + "contexts": [ + "Whether two positions have line of sight", + "with each other." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 83, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Line Of Sight", + "orderNumber": 0, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 0 + } + ] + }, + "426": { + "contexts": [ + "Whether the match is currently in its setup phase." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 84, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Setup", + "orderNumber": 0, + "path": "/interface/value/child/isInSetup.ts", + "indent": 0 + } + ] + }, + "427": { + "contexts": [ + "Whether a specific player is in the spawn", + "room (and is thus being healed and able", + "to change heroes)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 85, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Spawn Room", + "orderNumber": 0, + "path": "/interface/value/child/isInSpawnRoom.ts", + "indent": 0 + } + ] + }, + "428": { + "contexts": [ + "Whether a location is within view of a player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 86, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In View Angle", + "orderNumber": 0, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 0 + } + ] + }, + "429": { + "contexts": [ + "Whether the match has finished." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 87, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Match Complete", + "orderNumber": 0, + "path": "/interface/value/child/isMatchComplete.ts", + "indent": 0 + } + ] + }, + "430": { + "contexts": [ + "Whether a specific player is moving (as", + "defined by having a non-zero constant speed)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 88, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Moving", + "orderNumber": 0, + "path": "/interface/value/child/isMoving.ts", + "indent": 0 + } + ] + }, + "431": { + "contexts": [ + "Whether the specified objective has been", + "completed Results in false if the game mode", + "is not assault, escort, or assault/escort (hybrid)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 89, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Objective Complete", + "orderNumber": 0, + "path": "/interface/value/child/isObjectiveComplete.ts", + "indent": 0 + } + ] + }, + "432": { + "contexts": [ + "Whether a player is on the ground (or other", + "walkable surface)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 90, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Ground", + "orderNumber": 0, + "path": "/interface/value/child/isOnGround.ts", + "indent": 0 + } + ] + }, + "433": { + "contexts": [ + "Whether a specific player is currently occupying", + "a payload or capture point." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 91, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Objective", + "orderNumber": 0, + "path": "/interface/value/child/isOnObjective.ts", + "indent": 0 + } + ] + }, + "434": { + "contexts": [ + "Whether a player is on a wall (climbing or riding)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 92, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Wall", + "orderNumber": 0, + "path": "/interface/value/child/isOnWall.ts", + "indent": 0 + } + ] + }, + "435": { + "contexts": [ + "Whether a specific playerโ€™s portrait is on fire." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 93, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Portrait On Fire", + "orderNumber": 0, + "path": "/interface/value/child/isPortraitOnFire.ts", + "indent": 0 + } + ] + }, + "436": { + "contexts": [ + "Whether a player is standing (defined as", + "both not moving and not in the air)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 94, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Standing", + "orderNumber": 0, + "path": "/interface/value/child/isStanding.ts", + "indent": 0 + } + ] + }, + "437": { + "contexts": [ + "Whether the specified team is currently", + "on defense in a standard match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 95, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Team On Defense", + "orderNumber": 0, + "path": "/interface/value/child/isTeamOnDefense.ts", + "indent": 0 + } + ] + }, + "438": { + "contexts": [ + "Whether the specified team is currently", + "on offense in a standard match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 96, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Team On Offense", + "orderNumber": 0, + "path": "/interface/value/child/isTeamOnOffense.ts", + "indent": 0 + } + ] + }, + "439": { + "contexts": [ + "Whether the specified condition evaluates", + "to true for every value in the specified array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 97, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is True For All", + "orderNumber": 0, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 0 + } + ] + }, + "440": { + "contexts": [ + "Whether the specified condition evaluates", + "to true for any value in the specified array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 98, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 0, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 0 + } + ] + }, + "441": { + "contexts": [ + "Whether the specified player is using ability 1." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 99, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ability 1", + "orderNumber": 0, + "path": "/interface/value/child/isUsingAbility1.ts", + "indent": 0 + } + ] + }, + "442": { + "contexts": [ + "Whether the specified player is using ability 2." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 100, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ability 2", + "orderNumber": 0, + "path": "/interface/value/child/isUsingAbility2.ts", + "indent": 0 + } + ] + }, + "443": { + "contexts": [ + "Whether the specified player is using an", + "ultimate ability." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 101, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ultimate", + "orderNumber": 0, + "path": "/interface/value/child/isUsingUltimate.ts", + "indent": 0 + } + ] + }, + "444": { + "contexts": [ + "Whether the match is waiting for players", + "to join before starting." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 102, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Waiting For Players", + "orderNumber": 0, + "path": "/interface/value/child/isWaitingForPlayers.ts", + "indent": 0 + } + ] + }, + "445": { + "contexts": [ + "A reference to the last effect or icon entity", + "created by the event player (or created", + "at the global level)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 103, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Created Entity", + "orderNumber": 0, + "path": "/interface/value/child/lastCreatedEntity.ts", + "indent": 0 + } + ] + }, + "446": { + "contexts": [ + "An id representing the most recent start", + "damage modification action that was executed", + "by the event player (or executed at the global level)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 104, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Damage Modification Id", + "orderNumber": 0, + "path": "/interface/value/child/lastDamageModificationId.ts", + "indent": 0 + } + ] + }, + "447": { + "contexts": [ + "An ID representing the most recent damage", + "over time action that was executed by the", + "event player (or executed at the global level)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 105, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Damage Over Time Id", + "orderNumber": 0, + "path": "/interface/value/child/lastDamageOverTimeId.ts", + "indent": 0 + } + ] + }, + "448": { + "contexts": [ + "An ID representing the most recent heal", + "over time action that was executed by the", + "event player (or executed at the global level)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 106, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Heal Over Time Id", + "orderNumber": 0, + "path": "/interface/value/child/lastHealOverTimeId.ts", + "indent": 0 + } + ] + }, + "449": { + "contexts": [ + "The value at the end of the specified array.", + "Results in a 0 if the specified array is empty." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 107, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Of", + "orderNumber": 0, + "path": "/interface/value/child/lastOf.ts", + "indent": 0 + } + ] + }, + "450": { + "contexts": [ + "A reference to the last piece of text created", + "by the event player (or created at the global", + "level) via the create HUD text or create", + "in-world text action." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 108, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Text Id", + "orderNumber": 0, + "path": "/interface/value/child/lastTextId.ts", + "indent": 0 + } + ] + }, + "451": { + "contexts": [ + "Shorthand for the directional vector(1,", + "0, 0), which points to the left." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 109, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Left", + "orderNumber": 0, + "path": "/interface/value/child/left.ts", + "indent": 0 + } + ] + }, + "452": { + "contexts": [ + "The vector in local coordinates corresponding", + "to the provided vector in world coordinates." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 110, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Local Vector Of", + "orderNumber": 0, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 0 + } + ] + }, + "453": { + "contexts": [ + "The current round of the match, counting", + "up from 1. This will return a numerical value" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 111, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Match Round", + "orderNumber": 0, + "path": "/interface/value/child/matchRound.ts", + "indent": 0 + } + ] + }, + "454": { + "contexts": [ + "The amount of time in seconds remaining", + "in the current game mode phase. This will", + "return a numerical value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 112, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Match Time", + "orderNumber": 0, + "path": "/interface/value/child/matchTime.ts", + "indent": 0 + } + ] + }, + "455": { + "contexts": [ + "The greater of the two numbers. This will", + "return a numerical value of two number values compared." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 113, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Max", + "orderNumber": 0, + "path": "/interface/value/child/max.ts", + "indent": 0 + } + ] + }, + "456": { + "contexts": [ + "The max health of a player, including armor and shields." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 114, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Max Health", + "orderNumber": 0, + "path": "/interface/value/child/maxHealth.ts", + "indent": 0 + } + ] + }, + "457": { + "contexts": [ + "The lesser of the two numbers. This will", + "return a numerical value of two number values compared." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 115, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Min", + "orderNumber": 0, + "path": "/interface/value/child/min.ts", + "indent": 0 + } + ] + }, + "458": { + "contexts": [ + "The remainder of the left-hand operand divided", + "by the right-hand operand. Any number modulo", + "zero will result in zero. This will return", + "a numerical value of two number values compared.", + "For example 7 divided by 2 will result in", + "1 for the Modulo." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 116, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Modulo", + "orderNumber": 0, + "path": "/interface/value/child/modulo.ts", + "indent": 0 + } + ] + }, + "459": { + "contexts": [ + "The product of two numbers or vectors. A", + "vector multiplied by a number will yield", + "a scaled vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 117, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 0, + "path": "/interface/value/child/multiply.ts", + "indent": 0 + } + ] + }, + "460": { + "contexts": [ + "The position closest to the specified position", + "that can be stood on and is accessible from a spawn point." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 118, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Nearest Walkable Position", + "orderNumber": 0, + "path": "/interface/value/child/nearestWalkablePosition.ts", + "indent": 0 + } + ] + }, + "461": { + "contexts": [ + "The unit-length normalization of a vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 119, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Normalize", + "orderNumber": 0, + "path": "/interface/value/child/normalize.ts", + "indent": 0 + } + ] + }, + "462": { + "contexts": [ + "The current health of a player. including", + "armor and shields, normalized between 0", + "and 1. (for example, 0 is no health, 0.5", + "is half health, 1 is full health, etc.)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 120, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Normalized Health", + "orderNumber": 0, + "path": "/interface/value/child/normalizedHealth.ts", + "indent": 0 + } + ] + }, + "463": { + "contexts": [ + "Whether the input is false (or the equivalent to false)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 121, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Not", + "orderNumber": 0, + "path": "/interface/value/child/not.ts", + "indent": 0 + } + ] + }, + "464": { + "contexts": [ + "The absence of a player, used when no player", + "is desired for a particular input, equivalent", + "to the real number 0 for the purposes of", + "comparison and debugging." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 122, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Null", + "orderNumber": 0, + "path": "/interface/value/child/null.ts", + "indent": 0 + } + ] + }, + "465": { + "contexts": [ + "Number - A real number constant. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 123, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number", + "orderNumber": 0, + "path": "/interface/value/child/number.ts", + "indent": 0 + }, + { + "topName": "Number", + "orderNumber": 1, + "path": "/interface/value/child/number.ts", + "indent": 4 + } + ] + }, + "466": { + "contexts": [ + "The number of dead players on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 124, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Dead Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfDeadPlayers.ts", + "indent": 0 + } + ] + }, + "467": { + "contexts": [ + "The number of deaths a specific player has", + "earned. This value only accumulates while", + "a game is in progress." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 125, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Deaths", + "orderNumber": 0, + "path": "/interface/value/child/numberOfDeaths.ts", + "indent": 0 + } + ] + }, + "468": { + "contexts": [ + "The number of eliminations a specific player", + "has earned. This value only accumulates", + "while a game is in progress." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 126, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Eliminations", + "orderNumber": 0, + "path": "/interface/value/child/numberOfEliminations.ts", + "indent": 0 + } + ] + }, + "469": { + "contexts": [ + "The number of final blows a specific player", + "has earned. This value only accumulates", + "while a game is in progress." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 127, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Final Blows", + "orderNumber": 0, + "path": "/interface/value/child/numberOfFinalBlows.ts", + "indent": 0 + } + ] + }, + "470": { + "contexts": [ + "The number of players playing a specific", + "hero on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 128, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 0, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 0 + } + ] + }, + "471": { + "contexts": [ + "The number of living players on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 129, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Living Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfLivingPlayers.ts", + "indent": 0 + } + ] + }, + "472": { + "contexts": [ + "The number of players on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 130, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfPlayers.ts", + "indent": 0 + } + ] + }, + "473": { + "contexts": [ + "The number of players occupying a payload", + "or a control point (either on a team or in the match)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 131, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Players On Objective", + "orderNumber": 0, + "path": "/interface/value/child/numberOfPlayersOnObjective.ts", + "indent": 0 + } + ] + }, + "474": { + "contexts": [ + "The control point, payload checkpoint, or", + "payload destination currently active (either", + "0, 1, or 2). Valid in Assault, Assault/Escort", + "(Hybrid), Escort, and Control." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 132, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Objective Index", + "orderNumber": 0, + "path": "/interface/value/child/objectiveIndex.ts", + "indent": 0 + } + ] + }, + "475": { + "contexts": [ + "The position in the world of the specified", + "objective (either a control point, a payload", + "checkpoint, or a payload destination) Valid", + "in Assault, Assault/Escort (Hybrid), Escort, and Control." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 133, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Objective Position", + "orderNumber": 0, + "path": "/interface/value/child/objectivePosition.ts", + "indent": 0 + } + ] + }, + "476": { + "contexts": [ + "The team opposite the specified team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 134, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Opposite Team Of", + "orderNumber": 0, + "path": "/interface/value/child/oppositeTeamOf.ts", + "indent": 0 + } + ] + }, + "477": { + "contexts": [ + "Whether either of the two inputs are true", + "(or equivalent to true)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 135, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Or", + "orderNumber": 0, + "path": "/interface/value/child/or.ts", + "indent": 0 + } + ] + }, + "478": { + "contexts": [ + "The position in the world of the active payload." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 136, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Payload Position", + "orderNumber": 0, + "path": "/interface/value/child/payloadPosition.ts", + "indent": 0 + } + ] + }, + "479": { + "contexts": [ + "The current progress towards the destination", + "for the active payload (expressed as a percentage)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 137, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Payload Progress Percentage", + "orderNumber": 0, + "path": "/interface/value/child/payloadProgressPercentage.ts", + "indent": 0 + } + ] + }, + "480": { + "contexts": [ + "The player carrying a particular teamโ€™s", + "flag in capture the flag. Results in null", + "if no player is carrying the flag." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 138, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Carrying Flag", + "orderNumber": 0, + "path": "/interface/value/child/playerCarryingFlag.ts", + "indent": 0 + } + ] + }, + "481": { + "contexts": [ + "The player closest to the reticle of the", + "specified player, optionally restricted by team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 139, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Closest To Reticle", + "orderNumber": 0, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 0 + } + ] + }, + "482": { + "contexts": [ + "The current value of a player variable,", + "which is a variable that belongs to a specific player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 140, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Variable", + "orderNumber": 0, + "path": "/interface/value/child/playerVariable.ts", + "indent": 0 + } + ] + }, + "483": { + "contexts": [ + "The player or array of players who occupy", + "a specific slot in the game." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 141, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players In Slot", + "orderNumber": 0, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 0 + } + ] + }, + "484": { + "contexts": [ + "The players who are within a specific view", + "angle of a specific playerโ€™s reticle, optionally", + "restricted by team." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 142, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 0, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 0 + } + ] + }, + "485": { + "contexts": [ + "The array of players playing a specific", + "hero on a team or in the match." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 143, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 0, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 0 + } + ] + }, + "486": { + "contexts": [ + "An array containing all players within a", + "certain distance of a position, optionally", + "restricted by team and line of sight." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 144, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players Within Radius", + "orderNumber": 0, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 0 + } + ] + }, + "487": { + "contexts": [ + "The current progress towards capture for", + "the active control point (expressed as a percentage)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 145, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Point Capture Percentage", + "orderNumber": 0, + "path": "/interface/value/child/pointCapturePercentage.ts", + "indent": 0 + } + ] + }, + "488": { + "contexts": [ + "The current position of a player as a vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 146, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Position Of", + "orderNumber": 0, + "path": "/interface/value/child/positionOf.ts", + "indent": 0 + } + ] + }, + "489": { + "contexts": [ + "The left-hand operand raised to the power", + "of the right-hand operand. For example 2 ^ 3 = 8" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 147, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 0, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 0 + } + ] + }, + "490": { + "contexts": [ + "A random integer between the specified min", + "and max, inclusive." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 148, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Integer", + "orderNumber": 0, + "path": "/interface/value/child/randomInteger.ts", + "indent": 0 + } + ] + }, + "491": { + "contexts": [ + "A random real number between the specified min and max." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 149, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Real", + "orderNumber": 0, + "path": "/interface/value/child/randomReal.ts", + "indent": 0 + } + ] + }, + "492": { + "contexts": [ + "A random value from the specified array." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 150, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Value In Array", + "orderNumber": 0, + "path": "/interface/value/child/randomValueInArray.ts", + "indent": 0 + } + ] + }, + "493": { + "contexts": [ + "A copy of the specified array with the values", + "in a random order" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 151, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Randomized Array", + "orderNumber": 0, + "path": "/interface/value/child/randomizedArray.ts", + "indent": 0 + } + ] + }, + "494": { + "contexts": [ + "The surface normal at the ray cast hit position", + "(or from end pos to start pos if no hit occurs)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 152, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 0 + } + ] + }, + "495": { + "contexts": [ + "The player hit by the ray cast (or null", + "if no player is hit)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 153, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 0 + } + ] + }, + "496": { + "contexts": [ + "The position where the ray cast hits a surface,", + "object, or player (or the end POS if no hit occurs)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 154, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 0 + } + ] + }, + "497": { + "contexts": [ + "A copy of an array with one or more values", + "removed (if found)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 155, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Remove From Array", + "orderNumber": 0, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 0 + } + ] + }, + "498": { + "contexts": [ + "Shorthand for the directional vector (-1,", + "0, 0), which points to the right." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 156, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Right", + "orderNumber": 0, + "path": "/interface/value/child/right.ts", + "indent": 0 + } + ] + }, + "499": { + "contexts": [ + "The integer to which the specified value rounds." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 157, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Round To Integer", + "orderNumber": 0, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 0 + } + ] + }, + "500": { + "contexts": [ + "The current score of a player. Results in", + "0 if the game mode is not free-for-all." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 158, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Score Of", + "orderNumber": 0, + "path": "/interface/value/child/scoreOf.ts", + "indent": 0 + } + ] + }, + "501": { + "contexts": [ + "Provides a percentage representing the cpu", + "load of the current game instance. as this", + "number approaches or exceeds 100, It becomes", + "increasingly likely that the instance will", + "be shut down because it is consuming too many resources." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 159, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load", + "orderNumber": 0, + "path": "/interface/value/child/serverLoad.ts", + "indent": 0 + } + ] + }, + "502": { + "contexts": [ + "Provides a percentage representing the average", + "cpu load of the current game instance over", + "the last two seconds. as this number approaches", + "or exceeds 100, It becomes increasingly", + "likely that the instance will be shut down", + "because it is consuming too many resources." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 160, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load Average", + "orderNumber": 0, + "path": "/interface/value/child/serverLoadAverage.ts", + "indent": 0 + } + ] + }, + "503": { + "contexts": [ + "Provides a percentage representing the highest", + "cpu load of the current game instance over", + "the last two seconds. as this number approaches", + "or exceeds 100, It becomes increasingly", + "likely that the instance will be shut down", + "because it is consuming too many resources." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 161, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load Peak", + "orderNumber": 0, + "path": "/interface/value/child/serverLoadPeak.ts", + "indent": 0 + } + ] + }, + "504": { + "contexts": [ + "Sine of the specified angle in degrees.", + "The sine is the ratio of the length of the", + "side that is opposite that angle to the", + "length of the longest side of the triangle", + "(the hypotenuse)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 162, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sine From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/sineFromDegrees.ts", + "indent": 0 + } + ] + }, + "505": { + "contexts": [ + "Sine of the specified angle in radians.", + "The sine is the ratio of the length of the", + "side that is opposite that angle to the", + "length of the longest side of the triangle", + "(the hypotenuse). A radian is a unit of", + "angle, equal to an angle at the center of", + "a circle whose arc is equal in length to the radius." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 163, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sine From Radians", + "orderNumber": 0, + "path": "/interface/value/child/sineFromRadians.ts", + "indent": 0 + } + ] + }, + "506": { + "contexts": [ + "The slot number of the specified player.", + "In team games, each team has slots 0 through", + "5. In free-for-all games, slots are numbers 0 through 11." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 164, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Slot Of", + "orderNumber": 0, + "path": "/interface/value/child/slotOf.ts", + "indent": 0 + } + ] + }, + "507": { + "contexts": [ + "A copy of the specified array with the values", + "sorted according to the value rank that", + "is evaluated for each element." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 165, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sorted Array", + "orderNumber": 0, + "path": "/interface/value/child/sortedArray.ts", + "indent": 0 + } + ] + }, + "508": { + "contexts": [ + "The current speed of a player in meters per second." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 166, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/speedOf.ts", + "indent": 0 + } + ] + }, + "509": { + "contexts": [ + "The current speed of a player in a specific", + "direction in meters per second." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 167, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Speed Of In Direction", + "orderNumber": 0, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 0 + } + ] + }, + "510": { + "contexts": [ + "The square root of the specified value.", + "For example the square root of 9 is 3." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 168, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Square Root", + "orderNumber": 0, + "path": "/interface/value/child/squareRoot.ts", + "indent": 0 + } + ] + }, + "511": { + "contexts": [ + "Text formed from a selection of strings", + "and specified values." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 169, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "String", + "orderNumber": 0, + "path": "/interface/value/child/string.ts", + "indent": 0 + } + ] + }, + "512": { + "contexts": [ + "The difference between two numbers or vectors." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 170, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Subtract", + "orderNumber": 0, + "path": "/interface/value/child/subtract.ts", + "indent": 0 + } + ] + }, + "513": { + "contexts": [ + "Tangent of the specified angle in degrees." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 171, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Tangent From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/tangentFromDegrees.ts", + "indent": 0 + } + ] + }, + "514": { + "contexts": [ + "Tangent of the specified angle in radians." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 172, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Tangent From Radians", + "orderNumber": 0, + "path": "/interface/value/child/tangentFromRadians.ts", + "indent": 0 + } + ] + }, + "515": { + "contexts": [ + "A team constant. The all option represents", + "both teams in a team or all players in a", + "free-for-all game." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 173, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team", + "orderNumber": 0, + "path": "/interface/value/child/team.ts", + "indent": 0 + } + ] + }, + "516": { + "contexts": [ + "The team of a player. If the game mode is", + "free-for-all, the team is considered to be all." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 174, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team Of", + "orderNumber": 0, + "path": "/interface/value/child/teamOf.ts", + "indent": 0 + } + ] + }, + "517": { + "contexts": [ + "The current score for the specified team.", + "Results in a 0 in free-for-all game modes." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 175, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team Score", + "orderNumber": 0, + "path": "/interface/value/child/teamScore.ts", + "indent": 0 + } + ] + }, + "518": { + "contexts": [ + "The directional input of a player, represented", + "by a vector with a horizontal input on the", + "X component (positive to the left) and vertical", + "input on the Z component (positive upward)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 176, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Throttle Of", + "orderNumber": 0, + "path": "/interface/value/child/throttleOf.ts", + "indent": 0 + } + ] + }, + "519": { + "contexts": [ + "The total time seconds that have elapsed", + "since the game instance was created (including", + "setup time and transitions)." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 177, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Total Time Elapsed", + "orderNumber": 0, + "path": "/interface/value/child/totalTimeElapsed.ts", + "indent": 0 + } + ] + }, + "520": { + "contexts": [ + "The Boolean value of true." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 178, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "True", + "orderNumber": 0, + "path": "/interface/value/child/true.ts", + "indent": 0 + } + ] + }, + "521": { + "contexts": [ + "The current ultimate ability charge percentage of a player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 179, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ultimate Charge Percent", + "orderNumber": 0, + "path": "/interface/value/child/ultimateChargePercent.ts", + "indent": 0 + } + ] + }, + "522": { + "contexts": [ + "Shorthand for the directional vector(0,", + "1, 0). Which points upward." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 180, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Up", + "orderNumber": 0, + "path": "/interface/value/child/up.ts", + "indent": 0 + } + ] + }, + "523": { + "contexts": [ + "The value found at a specific element of", + "an array. Results in a 0 if the element does not exist." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 181, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Value In Array", + "orderNumber": 0, + "path": "/interface/value/child/valueInArray.ts", + "indent": 0 + } + ] + }, + "524": { + "contexts": [ + "A vector composed of three real numbers", + "(X, Y, Z) where X is left, Y is Up, and", + "Z is forward. Vectors are used for position,", + "direction, and velocity." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 182, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vector", + "orderNumber": 0, + "path": "/interface/value/child/vector.ts", + "indent": 0 + } + ] + }, + "525": { + "contexts": [ + "The displacement vector from one position to another." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 183, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vector Towards", + "orderNumber": 0, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 0 + } + ] + }, + "526": { + "contexts": [ + "The current velocity of a player as a vector.", + "If the player is on a surface, the Y component", + "of this velocity will be 0m even when traveling", + "up or down a slope." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 184, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Velocity Of", + "orderNumber": 0, + "path": "/interface/value/child/velocityOf.ts", + "indent": 0 + } + ] + }, + "527": { + "contexts": [ + "The vertical angle in degrees corresponding", + "to the specified direction vector." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 185, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle From Direction", + "orderNumber": 0, + "path": "/interface/value/child/verticalAngleFromDirection.ts", + "indent": 0 + } + ] + }, + "528": { + "contexts": [ + "The vertical angle in degrees from a playerโ€™s", + "current forward direction to the specified", + "position. The result is positive if the", + "position is below the player. Otherwise,", + "the result is zero or negative." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 186, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle Towards", + "orderNumber": 0, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 0 + } + ] + }, + "529": { + "contexts": [ + "The vertical angle in degrees, of a playerโ€™s", + "current facing relative to the world. This", + "value increases as the player looks down." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 187, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Facing Angle Of", + "orderNumber": 0, + "path": "/interface/value/child/verticalFacingAngleOf.ts", + "indent": 0 + } + ] + }, + "530": { + "contexts": [ + "The current vertical speed of a player in", + "meters per second. This measurement excludes", + "all horizontal motion, including motion", + "while traveling up and down slopes." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 188, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/verticalSpeedOf.ts", + "indent": 0 + } + ] + }, + "531": { + "contexts": [ + "The player that received damage for the", + "event currently being processed by this", + "rule. May be the same as the attacker or", + "the event player." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 189, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Victim", + "orderNumber": 0, + "path": "/interface/value/child/victim.ts", + "indent": 0 + } + ] + }, + "532": { + "contexts": [ + "The vector in the world coordinates corresponding", + "to the provided vector in local coordinates." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 190, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 0, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 0 + } + ] + }, + "533": { + "contexts": [ + "The X Component of the specified Vector,", + "usually representing a leftward amount." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 191, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "X Component Of", + "orderNumber": 0, + "path": "/interface/value/child/xComponentOf.ts", + "indent": 0 + } + ] + }, + "534": { + "contexts": [ + "The Y Component of the specified Vector,", + "usually representing a upward amount." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 192, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Y Component Of", + "orderNumber": 0, + "path": "/interface/value/child/yComponentOf.ts", + "indent": 0 + } + ] + }, + "535": { + "contexts": [ + "The Z Component of the specified Vector,", + "usually representing a forward amount." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 193, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Z Component Of", + "orderNumber": 0, + "path": "/interface/value/child/zComponentOf.ts", + "indent": 0 + } + ] + }, + "536": { + "contexts": [ + "Value - You can specify any Value Syntax", + "to define the Absolute Value." + ], + "usedFiles": [ + { + "topName": "Absolute Value", + "orderNumber": 1, + "path": "/interface/value/child/absoluteValue.ts", + "indent": 4 + } + ] + }, + "537": { + "contexts": [ + "Value - You can specify any Value Syntax", + "to define either addend." + ], + "usedFiles": [ + { + "topName": "Add", + "orderNumber": 1, + "path": "/interface/value/child/add.ts", + "indent": 4 + } + ] + }, + "538": { + "contexts": [ + "Value - The right-hand operand. may be any", + "value that results in a number or a vector." + ], + "usedFiles": [ + { + "topName": "Add", + "orderNumber": 2, + "path": "/interface/value/child/add.ts", + "indent": 4 + } + ] + }, + "539": { + "contexts": [ + "Team - You can specify any Team Syntax to", + "define the array." + ], + "usedFiles": [ + { + "topName": "All Dead Players", + "orderNumber": 1, + "path": "/interface/value/child/allDeadPlayers.ts", + "indent": 4 + }, + { + "topName": "All Living Players", + "orderNumber": 1, + "path": "/interface/value/child/allLivingPlayers.ts", + "indent": 4 + }, + { + "topName": "All Players", + "orderNumber": 1, + "path": "/interface/value/child/allPlayers.ts", + "indent": 4 + }, + { + "topName": "All Players Not On Objective", + "orderNumber": 1, + "path": "/interface/value/child/allPlayersNotOnObjective.ts", + "indent": 4 + }, + { + "topName": "All Players On Objective", + "orderNumber": 1, + "path": "/interface/value/child/allPlayersOnObjective.ts", + "indent": 4 + } + ] + }, + "540": { + "contexts": [ + "Player - You can specify any Player Syntax", + "to define the array." + ], + "usedFiles": [ + { + "topName": "Allowed Heroes", + "orderNumber": 1, + "path": "/interface/value/child/allowedHeroes.ts", + "indent": 4 + } + ] + }, + "541": { + "contexts": [ + "Player - You can specify any Player Syntax", + "to define the array." + ], + "usedFiles": [ + { + "topName": "Altitude Of", + "orderNumber": 1, + "path": "/interface/value/child/altitudeOf.ts", + "indent": 4 + } + ] + }, + "542": { + "contexts": [ + "Value - You can specify any Value Syntax", + "to define both of the required values." + ], + "usedFiles": [ + { + "topName": "And", + "orderNumber": 1, + "path": "/interface/value/child/and.ts", + "indent": 4 + } + ] + }, + "543": { + "contexts": [ + "Value - One of the two inputs considered.", + "if both are true (or equivalent to true),", + "then the and value is true." + ], + "usedFiles": [ + { + "topName": "And", + "orderNumber": 2, + "path": "/interface/value/child/and.ts", + "indent": 4 + } + ] + }, + "544": { + "contexts": [ + "Vector - One of two directional vectors", + "between which to measure the angle in degrees.", + "this vector does not need to be pre-normalized." + ], + "usedFiles": [ + { + "topName": "Angle Between Vectors", + "orderNumber": 1, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 4 + } + ] + }, + "545": { + "contexts": [ + "Vector - One of two directional vectors", + "between which to measure the angle in degrees.", + "this vector does not need to be pre-normalized." + ], + "usedFiles": [ + { + "topName": "Angle Between Vectors", + "orderNumber": 2, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 4 + } + ] + }, + "546": { + "contexts": [ + "Angle - You can specify any Angle Syntax", + "to define both of the required values." + ], + "usedFiles": [ + { + "topName": "Angle Difference", + "orderNumber": 1, + "path": "/interface/value/child/angleDifference.ts", + "indent": 4 + } + ] + }, + "547": { + "contexts": [ + "Angle - One of the two angles between which", + "to measure the resulting angle." + ], + "usedFiles": [ + { + "topName": "Angle Difference", + "orderNumber": 2, + "path": "/interface/value/child/angleDifference.ts", + "indent": 4 + } + ] + }, + "548": { + "contexts": [ + "Array - You must specify the Array Syntax", + "you are adding the value to." + ], + "usedFiles": [ + { + "topName": "Append To Array", + "orderNumber": 1, + "path": "/interface/value/child/appendToArray.ts", + "indent": 4 + } + ] + }, + "549": { + "contexts": [ + "Value - You must specify the Value Syntax", + "that you are adding to the array." + ], + "usedFiles": [ + { + "topName": "Append To Array", + "orderNumber": 2, + "path": "/interface/value/child/appendToArray.ts", + "indent": 4 + } + ] + }, + "550": { + "contexts": [ + "Value - Input value for the function." + ], + "usedFiles": [ + { + "topName": "Arccosine In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arccosineInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arccosineInRadians.ts", + "indent": 4 + } + ] + }, + "551": { + "contexts": [ + "Value - Input value for the function." + ], + "usedFiles": [ + { + "topName": "Arcsine In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arcsineInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arcsineInRadians.ts", + "indent": 4 + } + ] + }, + "552": { + "contexts": [ + "Numerator - Numerator input for the function." + ], + "usedFiles": [ + { + "topName": "Arctangent In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 4 + } + ] + }, + "553": { + "contexts": [ + "Denominator - Denominator input for the function." + ], + "usedFiles": [ + { + "topName": "Arctangent In Degrees", + "orderNumber": 2, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 2, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 4 + } + ] + }, + "554": { + "contexts": [ + "Array - The array in which to search for", + "the specified value. Can use most Array", + "based Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Array Contains", + "orderNumber": 1, + "path": "/interface/value/child/arrayContains.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 1, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 4 + } + ] + }, + "555": { + "contexts": [ + "Value - The value for which to search. Can", + "use most Number based Value Syntax to retrive this value." + ], + "usedFiles": [ + { + "topName": "Array Contains", + "orderNumber": 2, + "path": "/interface/value/child/arrayContains.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 2, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 4 + } + ] + }, + "556": { + "contexts": [ + "Array - You must specify the Array Syntax", + "you are comparing the value to." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 1, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "557": { + "contexts": [ + "Start Index - The first index of the range.", + "Can use most Value Syntax to specify with." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 2, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "558": { + "contexts": [ + "Count - The number of elements in the resulting", + "array. The resulting array will contain", + "fewer elements if the specified range exceeds", + "the bounds of the array. Can use any Number-based", + "Value Syntax to specify with." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 3, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "559": { + "contexts": [ + "Center - The position to which to measure", + "proximity. Can use most Value Syntax related", + "to reporting a position in the map." + ], + "usedFiles": [ + { + "topName": "Closest Player To", + "orderNumber": 1, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 4 + } + ] + }, + "560": { + "contexts": [ + "Team - You can specify any Team Syntax to", + "restrict which players is reported when", + "defining this value." + ], + "usedFiles": [ + { + "topName": "Closest Player To", + "orderNumber": 2, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 4 + } + ] + }, + "561": { + "contexts": [ + "Value - The left hand side of the comparison.", + "This may be any value type if the operation", + "is == or =!, otherwise real numbers are", + "expected. Can use most Value Syntax for the comparison." + ], + "usedFiles": [ + { + "topName": "Compare", + "orderNumber": 1, + "path": "/interface/value/child/compare.ts", + "indent": 4 + } + ] + }, + "562": { + "contexts": [ + "Condition - One of the standard conditions", + "to use for comparison. See the Condition", + "section for details." + ], + "usedFiles": [ + { + "topName": "Compare", + "orderNumber": 2, + "path": "/interface/value/child/compare.ts", + "indent": 4 + } + ] + }, + "563": { + "contexts": [ + "Team - You can specify any Team Syntax to", + "define which team reported when defining this value." + ], + "usedFiles": [ + { + "topName": "Control Mode Scoring Percentage", + "orderNumber": 1, + "path": "/interface/value/child/controlModeScoringPercentage.ts", + "indent": 4 + } + ] + }, + "564": { + "contexts": [ + "Angle - Angle in degrees. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Cosine From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/cosineFromDegrees.ts", + "indent": 4 + }, + { + "topName": "Sine From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/sineFromDegrees.ts", + "indent": 4 + }, + { + "topName": "Tangent From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/tangentFromDegrees.ts", + "indent": 4 + } + ] + }, + "565": { + "contexts": [ + "Angle - Angle in radians. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Cosine From Radians", + "orderNumber": 1, + "path": "/interface/value/child/cosineFromRadians.ts", + "indent": 4 + }, + { + "topName": "Sine From Radians", + "orderNumber": 1, + "path": "/interface/value/child/sineFromRadians.ts", + "indent": 4 + }, + { + "topName": "Tangent From Radians", + "orderNumber": 1, + "path": "/interface/value/child/tangentFromRadians.ts", + "indent": 4 + } + ] + }, + "566": { + "contexts": [ + "Value - You must specify the first Value", + "Syntax to compare to the second." + ], + "usedFiles": [ + { + "topName": "Cross Product", + "orderNumber": 1, + "path": "/interface/value/child/crossProduct.ts", + "indent": 4 + } + ] + }, + "567": { + "contexts": [ + "Value - You must specify the first Value", + "Syntax to compare to the second." + ], + "usedFiles": [ + { + "topName": "Cross Product", + "orderNumber": 2, + "path": "/interface/value/child/crossProduct.ts", + "indent": 4 + } + ] + }, + "568": { + "contexts": [ + "Horizontal Angle - The horizontal angle", + "in degrees used to construct the resulting", + "vector. Most angle based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Direction From Angles", + "orderNumber": 1, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 4 + } + ] + }, + "569": { + "contexts": [ + "Vertical Angle - The vertical angle in degrees", + "used to construct the resulting vector.", + "Most angle based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Direction From Angles", + "orderNumber": 2, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 4 + } + ] + }, + "570": { + "contexts": [ + "Start Pos - The position from which the", + "resulting direction vector will point. Most", + "positional based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Direction Towards", + "orderNumber": 1, + "path": "/interface/value/child/directionTowards.ts", + "indent": 4 + } + ] + }, + "571": { + "contexts": [ + "End Pos - The position to which the resulting", + "direction vector will point. Most positional", + "based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Direction Towards", + "orderNumber": 2, + "path": "/interface/value/child/directionTowards.ts", + "indent": 4 + } + ] + }, + "572": { + "contexts": [ + "Start Pos - One of the two positions used", + "in the distance measurement. Most positional", + "based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Distance Between", + "orderNumber": 1, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 4 + } + ] + }, + "573": { + "contexts": [ + "End Pos - One of the two positions used", + "in the distance measurement. Most positional", + "based Value Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Distance Between", + "orderNumber": 2, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 4 + } + ] + }, + "574": { + "contexts": [ + "Value - The left-hand operand, may be any", + "value that results in a number or a vector.", + "Any Value Syntax may be used here." + ], + "usedFiles": [ + { + "topName": "Divide", + "orderNumber": 1, + "path": "/interface/value/child/divide.ts", + "indent": 4 + } + ] + }, + "575": { + "contexts": [ + "Value - The right-hand operand, may be any", + "value that results in a number or a vector.", + "Any Value Syntax may be used here." + ], + "usedFiles": [ + { + "topName": "Divide", + "orderNumber": 2, + "path": "/interface/value/child/divide.ts", + "indent": 4 + } + ] + }, + "576": { + "contexts": [ + "Value - One of the two vector operands of", + "the dot product. Any positional based Syntax", + "may be used here." + ], + "usedFiles": [ + { + "topName": "Dot Product", + "orderNumber": 1, + "path": "/interface/value/child/dotProduct.ts", + "indent": 4 + } + ] + }, + "577": { + "contexts": [ + "Value - One of the two vector operands of", + "the dot product. Any positional based Syntax", + "may be used here." + ], + "usedFiles": [ + { + "topName": "Dot Product", + "orderNumber": 2, + "path": "/interface/value/child/dotProduct.ts", + "indent": 4 + } + ] + }, + "578": { + "contexts": [ + "Entity - The player, icon entity, or effect", + "entity whose existance to check." + ], + "usedFiles": [ + { + "topName": "Entity Exists", + "orderNumber": 1, + "path": "/interface/value/child/entityExists.ts", + "indent": 4 + } + ] + }, + "579": { + "contexts": [ + "Center - The position to which to measure", + "proximity. Can use most Value Syntax related", + "to reporting a position in the map." + ], + "usedFiles": [ + { + "topName": "Farthest Player From", + "orderNumber": 1, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 4 + } + ] + }, + "580": { + "contexts": [ + "Team - You can specify any Team Syntax to", + "restrict which players is reported when", + "defining this value." + ], + "usedFiles": [ + { + "topName": "Farthest Player From", + "orderNumber": 2, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 4 + } + ] + }, + "581": { + "contexts": [ + "Array - The array from which the value is", + "created. Can use most Array based Value", + "Syntax to provide this data." + ], + "usedFiles": [ + { + "topName": "First Of", + "orderNumber": 1, + "path": "/interface/value/child/firstOf.ts", + "indent": 4 + }, + { + "topName": "Last Of", + "orderNumber": 1, + "path": "/interface/value/child/lastOf.ts", + "indent": 4 + } + ] + }, + "582": { + "contexts": [ + "Team - The team whose flag position to acquire." + ], + "usedFiles": [ + { + "topName": "Flag Position", + "orderNumber": 1, + "path": "/interface/value/child/flagPosition.ts", + "indent": 4 + } + ] + }, + "583": { + "contexts": [ + "Player - The player whose status to check." + ], + "usedFiles": [ + { + "topName": "Has Status", + "orderNumber": 1, + "path": "/interface/value/child/hasStatus.ts", + "indent": 4 + } + ] + }, + "584": { + "contexts": [ + "Status - The status to check for. Values", + "include Hacked, Burning, Knocked Down, Asleep,", + "Frozen, Unkillable, Invincible, Phased Out,", + "Rooted, or Stunned." + ], + "usedFiles": [ + { + "topName": "Has Status", + "orderNumber": 2, + "path": "/interface/value/child/hasStatus.ts", + "indent": 4 + } + ] + }, + "585": { + "contexts": [ + "Player - The player whose hero to acquire.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Hero Of", + "orderNumber": 1, + "path": "/interface/value/child/heroOf.ts", + "indent": 4 + } + ] + }, + "586": { + "contexts": [ + "Direction - The direction vector from which", + "to acquire a horizontal angle in degrees.", + "The vector is unitized before calculation", + "begins. Can use most Vector based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle From Direction", + "orderNumber": 1, + "path": "/interface/value/child/horizontalAngleFromDirection.ts", + "indent": 4 + } + ] + }, + "587": { + "contexts": [ + "Player - The player whose current facing", + "angle begins. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle Towards", + "orderNumber": 1, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 4 + } + ] + }, + "588": { + "contexts": [ + "Position - The player whose current facing", + "the angle begins. Can use most Player based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle Towards", + "orderNumber": 2, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle Towards", + "orderNumber": 1, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 4 + } + ] + }, + "589": { + "contexts": [ + "Player - The player whose facing direction", + "to acquire. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Horizontal Facing Angle Of", + "orderNumber": 1, + "path": "/interface/value/child/horizontalFacingAngleOf.ts", + "indent": 4 + } + ] + }, + "590": { + "contexts": [ + "Player - The player whose life to check.", + "Can use most player based Value Syntax to", + "retrive this value." + ], + "usedFiles": [ + { + "topName": "Is Alive", + "orderNumber": 1, + "path": "/interface/value/child/isAlive.ts", + "indent": 4 + } + ] + }, + "591": { + "contexts": [ + "Player - The player whose button to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Button Held", + "orderNumber": 1, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 4 + } + ] + }, + "592": { + "contexts": [ + "Button - The button to check. Designed by", + "any action inputs by ability but not directional", + "inputs. (i.e. Primary Fire, Secondary Fire,", + "Ultimate Ability, Jump, Crouch, etc.)" + ], + "usedFiles": [ + { + "topName": "Is Button Held", + "orderNumber": 2, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 4 + } + ] + }, + "593": { + "contexts": [ + "Player - The player whose communication", + "status to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Communicating", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAny.ts", + "indent": 4 + } + ] + }, + "594": { + "contexts": [ + "Type - The type of communication to consider.", + "The duration of emotes is exact, the duration", + "of voice lines is assumed to be 4 seconds,", + "and all other durations are assumed to be", + "2 seconds. Any of the four emote slots,", + "four voice lines slots, or any standard", + "communication (Need healing, Ultimate Status,", + "etc.) can be designated." + ], + "usedFiles": [ + { + "topName": "Is Communicating", + "orderNumber": 2, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 4 + } + ] + }, + "595": { + "contexts": [ + "Player - The player whose emoting status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Communicating Any Emote", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAnyEmote.ts", + "indent": 4 + } + ] + }, + "596": { + "contexts": [ + "Player - The player whose voice line status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Communicating Any Voice Line", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAnyVoiceLine.ts", + "indent": 4 + } + ] + }, + "597": { + "contexts": [ + "Player - The player whose crouching status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Crouching", + "orderNumber": 1, + "path": "/interface/value/child/isCrouching.ts", + "indent": 4 + } + ] + }, + "598": { + "contexts": [ + "Player - The player whose death to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Dead", + "orderNumber": 1, + "path": "/interface/value/child/isDead.ts", + "indent": 4 + } + ] + }, + "599": { + "contexts": [ + "Player - The player whose primary weapon", + "attack to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Firing Primary", + "orderNumber": 1, + "path": "/interface/value/child/isFiringPrimary.ts", + "indent": 4 + } + ] + }, + "600": { + "contexts": [ + "Player - The player whose secondary weapon", + "attack to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Firing Secondary", + "orderNumber": 1, + "path": "/interface/value/child/isFiringSecondary.ts", + "indent": 4 + } + ] + }, + "601": { + "contexts": [ + "Team - The team whose whose flag to check.", + "Can use most Team based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Is Flag At Base", + "orderNumber": 1, + "path": "/interface/value/child/isFlagAtBase.ts", + "indent": 4 + }, + { + "topName": "Is Flag Being Carried", + "orderNumber": 1, + "path": "/interface/value/child/isFlagBeingCarried.ts", + "indent": 4 + }, + { + "topName": "Player Carrying Flag", + "orderNumber": 1, + "path": "/interface/value/child/playerCarryingFlag.ts", + "indent": 4 + } + ] + }, + "602": { + "contexts": [ + "Hero - The hero to check for play. Can use", + "most Hero based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Is Hero Being Played", + "orderNumber": 1, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 1, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 1, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 4 + } + ] + }, + "603": { + "contexts": [ + "Team - The team or teams on which to check", + "for the hero being played. Can use most", + "Team based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Is Hero Being Played", + "orderNumber": 2, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 2, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 2, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 4 + } + ] + }, + "604": { + "contexts": [ + "Player - The player whose airborne status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is In Air", + "orderNumber": 1, + "path": "/interface/value/child/isInAir.ts", + "indent": 4 + } + ] + }, + "605": { + "contexts": [ + "Start Pos - The start position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 1, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "606": { + "contexts": [ + "End Pos - The end position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 2, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "607": { + "contexts": [ + "Barriers - Defines how barriers affect line", + "of sight, when considering whether a barrier", + "belongs to an enemy, the allegiance of the", + "player provided to start pos (if any) is", + "used. Can be set to โ€œBarriers do not block", + "LOSโ€, Enemy barriers block LOS\", and โ€œAll", + "barriers block LOSโ€." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 3, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "608": { + "contexts": [ + "Player - The player whose spawn room status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is In Spawn Room", + "orderNumber": 1, + "path": "/interface/value/child/isInSpawnRoom.ts", + "indent": 4 + } + ] + }, + "609": { + "contexts": [ + "Player - The player whose view to use for", + "the check. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 1, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 1, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "610": { + "contexts": [ + "Location - The location to test if itโ€™s", + "within view. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 2, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + } + ] + }, + "611": { + "contexts": [ + "Team - The team or teams on which to consider", + "players. Can use most Team based Value Syntax", + "to provide this value." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 3, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 2, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "612": { + "contexts": [ + "Player - The player whose moving status", + "status to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Moving", + "orderNumber": 1, + "path": "/interface/value/child/isMoving.ts", + "indent": 4 + } + ] + }, + "613": { + "contexts": [ + "Number - The index of the objective to consider,", + "starting at 0 and counting up. Each control", + "point, payload checkpoint, and payload destination", + "has its own index. Can use most number based", + "Value Syntax to retrieve this value. Value", + "must be in the form of an integer (whole number)." + ], + "usedFiles": [ + { + "topName": "Is Objective Complete", + "orderNumber": 1, + "path": "/interface/value/child/isObjectiveComplete.ts", + "indent": 4 + } + ] + }, + "614": { + "contexts": [ + "Player - The player whose ground status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is On Ground", + "orderNumber": 1, + "path": "/interface/value/child/isOnGround.ts", + "indent": 4 + } + ] + }, + "615": { + "contexts": [ + "Player - The player whose objective status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is On Objective", + "orderNumber": 1, + "path": "/interface/value/child/isOnObjective.ts", + "indent": 4 + } + ] + }, + "616": { + "contexts": [ + "Player - The player whose wall status to", + "check. Can use most player based Value Syntax", + "to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is On Wall", + "orderNumber": 1, + "path": "/interface/value/child/isOnWall.ts", + "indent": 4 + } + ] + }, + "617": { + "contexts": [ + "Player - The player whose portrait to check.", + "Can use most player based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Portrait On Fire", + "orderNumber": 1, + "path": "/interface/value/child/isPortraitOnFire.ts", + "indent": 4 + } + ] + }, + "618": { + "contexts": [ + "Player - The player whose standing status", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Standing", + "orderNumber": 1, + "path": "/interface/value/child/isStanding.ts", + "indent": 4 + } + ] + }, + "619": { + "contexts": [ + "Team - The team whose role to check. Can", + "use most Team Based Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Team On Defense", + "orderNumber": 1, + "path": "/interface/value/child/isTeamOnDefense.ts", + "indent": 4 + }, + { + "topName": "Is Team On Offense", + "orderNumber": 1, + "path": "/interface/value/child/isTeamOnOffense.ts", + "indent": 4 + } + ] + }, + "620": { + "contexts": [ + "Array - The array whose values will be considered.", + "Can use most Array Based Value Syntax to", + "retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is True For All", + "orderNumber": 1, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 1, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 4 + } + ] + }, + "621": { + "contexts": [ + "Condition - The condition that is evaluated", + "for each element of the specified array,", + "Use the current array element value to reference", + "the element of the array currently being", + "considered. Can use most Comparative based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is True For All", + "orderNumber": 2, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 2, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 4 + } + ] + }, + "622": { + "contexts": [ + "Player - The player whose ability 1 usage", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Using Ability 1", + "orderNumber": 1, + "path": "/interface/value/child/isUsingAbility1.ts", + "indent": 4 + } + ] + }, + "623": { + "contexts": [ + "Player - The player whose ability 2 usage", + "to check. Can use most player based Value", + "Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Using Ability 2", + "orderNumber": 1, + "path": "/interface/value/child/isUsingAbility2.ts", + "indent": 4 + } + ] + }, + "624": { + "contexts": [ + "Player - The player whose ultimate ability", + "usage to check. Can use most player based", + "Value Syntax to retrieve this value." + ], + "usedFiles": [ + { + "topName": "Is Using Ultimate", + "orderNumber": 1, + "path": "/interface/value/child/isUsingUltimate.ts", + "indent": 4 + } + ] + }, + "625": { + "contexts": [ + "World Vector - The vector in world coordinates", + "that will be converted to local coordinates.", + "Can use most Vector based Value Syntax to", + "provide this data." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 1, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + } + ] + }, + "626": { + "contexts": [ + "Local vector - The vector in local coordinates", + "that will be converted to world coordinates.", + "Can use most Vector based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 2, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 1, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "627": { + "contexts": [ + "Relative Player - The player to whom the", + "local vector is relative. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 3, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 2, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "628": { + "contexts": [ + "Player - The player whose max health to", + "compare. Can use any Player based Value", + "syntax to provide with." + ], + "usedFiles": [ + { + "topName": "Max Health", + "orderNumber": 1, + "path": "/interface/value/child/maxHealth.ts", + "indent": 4 + } + ] + }, + "629": { + "contexts": [ + "Value - The left-hand operand. May be any", + "value that results in a number. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Min", + "orderNumber": 1, + "path": "/interface/value/child/min.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 1, + "path": "/interface/value/child/multiply.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 1, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 4 + } + ] + }, + "630": { + "contexts": [ + "Value - The right-hand operand. May be any", + "value that results in a number. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Min", + "orderNumber": 2, + "path": "/interface/value/child/min.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 2, + "path": "/interface/value/child/multiply.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 2, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 4 + } + ] + }, + "631": { + "contexts": [ + "Position - The position from which to search", + "for the nearest walkable position. Can use", + "any Vector based Value syntax to divide with." + ], + "usedFiles": [ + { + "topName": "Nearest Walkable Position", + "orderNumber": 1, + "path": "/interface/value/child/nearestWalkablePosition.ts", + "indent": 4 + } + ] + }, + "632": { + "contexts": [ + "Vector - The vector to normalize. Can use", + "any Vector based Value syntax to divide with." + ], + "usedFiles": [ + { + "topName": "Normalize", + "orderNumber": 1, + "path": "/interface/value/child/normalize.ts", + "indent": 4 + } + ] + }, + "633": { + "contexts": [ + "Player - The player whose normalized health to acquire." + ], + "usedFiles": [ + { + "topName": "Normalized Health", + "orderNumber": 1, + "path": "/interface/value/child/normalizedHealth.ts", + "indent": 4 + } + ] + }, + "634": { + "contexts": [ + "Value - When this input is false (or equivalent", + "to false), then the not value is true. Otherwise,", + "the not value is false. Can use most Boolean-based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Not", + "orderNumber": 1, + "path": "/interface/value/child/not.ts", + "indent": 4 + } + ] + }, + "635": { + "contexts": [ + "Team - The team or teams on which to count", + "players. Can use most Team based Value Syntax", + "to provide this value." + ], + "usedFiles": [ + { + "topName": "Number Of Dead Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfDeadPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Living Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfLivingPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Players On Objective", + "orderNumber": 1, + "path": "/interface/value/child/numberOfPlayersOnObjective.ts", + "indent": 4 + } + ] + }, + "636": { + "contexts": [ + "Player - The player whose death count to", + "acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Number Of Deaths", + "orderNumber": 1, + "path": "/interface/value/child/numberOfDeaths.ts", + "indent": 4 + } + ] + }, + "637": { + "contexts": [ + "Player - The player whose elimination count", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Number Of Eliminations", + "orderNumber": 1, + "path": "/interface/value/child/numberOfEliminations.ts", + "indent": 4 + } + ] + }, + "638": { + "contexts": [ + "Player - The player whose final blow count", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Number Of Final Blows", + "orderNumber": 1, + "path": "/interface/value/child/numberOfFinalBlows.ts", + "indent": 4 + } + ] + }, + "639": { + "contexts": [ + "Number - The index of the objective to consider,", + "starting at 0 and counting up. Each control", + "point, payload checkpoint, and payload destination", + "as its own index. Can use most Number based", + "Value Syntax to provide this value, but", + "must output in a integer of 0, 1, or 2." + ], + "usedFiles": [ + { + "topName": "Objective Position", + "orderNumber": 1, + "path": "/interface/value/child/objectivePosition.ts", + "indent": 4 + } + ] + }, + "640": { + "contexts": [ + "Team - The team whose opposite to acquire.", + "If all, the result will be all. Can use", + "most Team based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Opposite Team Of", + "orderNumber": 1, + "path": "/interface/value/child/oppositeTeamOf.ts", + "indent": 4 + } + ] + }, + "641": { + "contexts": [ + "Value - One of the two inputs considered.", + "If either one is true (or equivalent to", + "true), then the OR value is true. Can use", + "most Boolean based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Or", + "orderNumber": 1, + "path": "/interface/value/child/or.ts", + "indent": 4 + } + ] + }, + "642": { + "contexts": [ + "Value - One of the two inputs considered.", + "If either one is true (or equivalent to", + "true), then the OR value is true. Can use", + "most Boolean based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Or", + "orderNumber": 2, + "path": "/interface/value/child/or.ts", + "indent": 4 + } + ] + }, + "643": { + "contexts": [ + "Player - The player from whose reticle to", + "search for the closest player. Can use most", + "Player based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Player Closest To Reticle", + "orderNumber": 1, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 4 + } + ] + }, + "644": { + "contexts": [ + "Team - The team or teams on which to search", + "for the closest player. Can use most Team", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Player Closest To Reticle", + "orderNumber": 2, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 4 + } + ] + }, + "645": { + "contexts": [ + "Slot - The slot number from each to acquire", + "a player or players. In team games, each", + "team has slots 0 through 5. In free-for-all", + "games, slots are numbered 0 through 11.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Players In Slot", + "orderNumber": 1, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 4 + } + ] + }, + "646": { + "contexts": [ + "Team - The team or teams from which to acquire", + "a player or players. Can use most Team based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Players In Slot", + "orderNumber": 2, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 4 + } + ] + }, + "647": { + "contexts": [ + "View Angle - The view angle to compare against", + "in degrees. Can use most Angle based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Players In View Angle", + "orderNumber": 3, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "648": { + "contexts": [ + "Center - The center position from which", + "to measure distance. Can use most Vector", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 1, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "649": { + "contexts": [ + "Radius - The radius in meters inside which", + "players must be in order to be included", + "in the resulting array. Can use most Number", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 2, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "650": { + "contexts": [ + "Team - The team or teams to which a player", + "must belong to be included in the resulting", + "array. Can use most Team based Value Syntax", + "to provide this value." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 3, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "651": { + "contexts": [ + "LOS Check - Specifies whether and how a", + "player must pass a line-of-sight check to", + "be included in the resulting array. You", + "can choose from Off, Surfaces, Surfaces", + "and Enemy Barriers, and Surfaces and All", + "Barriers. Off will result in the line of", + "sight is never blocked, allowing results", + "through walls. Surfaces will result in line", + "of sight is blocked by ceilings, walls,", + "floors, platforms, and any fixed object", + "that blocks projectiles. Surfaces and Enemy", + "Barriers will result in line of sight is", + "blocked by ceilings, walls, floors, platforms,", + "any fixed object that blocks projectiles,", + "and barriers created by the enemy team.", + "Surfaces and All Barriers will result in", + "line of sight is blocked by ceilings, walls,", + "floors, platforms, any fixed object that", + "blocks projectiles, and all barriers." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 4, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + }, + { + "topName": "LosCheck", + "orderNumber": 0, + "path": "/type/value/losCheck.ts", + "indent": 0 + } + ] + }, + "652": { + "contexts": [ + "Player - The player whose position to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Position Of", + "orderNumber": 1, + "path": "/interface/value/child/positionOf.ts", + "indent": 4 + } + ] + }, + "653": { + "contexts": [ + "MIN - The smallest integer allowed. If a", + "real number is provided to this input, it", + "is rounded to the nearest integer. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Random Integer", + "orderNumber": 1, + "path": "/interface/value/child/randomInteger.ts", + "indent": 4 + } + ] + }, + "654": { + "contexts": [ + "MAX - The largest integer allowed. If a", + "real number is provided to this input, it", + "is rounded to the nearest integer. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Random Integer", + "orderNumber": 2, + "path": "/interface/value/child/randomInteger.ts", + "indent": 4 + } + ] + }, + "655": { + "contexts": [ + "Array - The array whose copy will be randomized.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Randomized Array", + "orderNumber": 1, + "path": "/interface/value/child/randomizedArray.ts", + "indent": 4 + } + ] + }, + "656": { + "contexts": [ + "MIN - The smallest real number allowed.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Random Real", + "orderNumber": 1, + "path": "/interface/value/child/randomReal.ts", + "indent": 4 + } + ] + }, + "657": { + "contexts": [ + "MAX - The largest real number allowed. Can", + "use most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Random Real", + "orderNumber": 2, + "path": "/interface/value/child/randomReal.ts", + "indent": 4 + } + ] + }, + "658": { + "contexts": [ + "Array - The array from which to randomly", + "take a value. If a non-array value is provided,", + "the result is simply the provided value.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Random Value In Array", + "orderNumber": 1, + "path": "/interface/value/child/randomValueInArray.ts", + "indent": 4 + } + ] + }, + "659": { + "contexts": [ + "Start POS - The start position for the ray", + "cast. If a player is provided. A position", + "2 meters above the playerโ€™s feet is used.", + "Can use most Vector based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "660": { + "contexts": [ + "End POS - The end position for the ray cast.", + "If a player is provided. A position 2 meters", + "above the playerโ€™s feet is used. Can use", + "most Vector based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "661": { + "contexts": [ + "Players to include - Which players can be", + "hit by this ray cast. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "662": { + "contexts": [ + "Players to exclude - Which players cannot", + "be hit by this ray cast. This list takes", + "precedence over players to include. Can", + "use most Player based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "663": { + "contexts": [ + "Include player owned objects - Whether player", + "owned objects (such as barriers or turrets)", + "should be included in the ray cast. Can", + "use most Boolean based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "664": { + "contexts": [ + "Array - The array from which to remove values.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Remove From Array", + "orderNumber": 1, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 4 + } + ] + }, + "665": { + "contexts": [ + "Value - The value to remove from the array", + "(if found), if this value itself an array,", + "each matching element is removed. Can use", + "most Array based or Number based Value Syntax", + "to provide this value." + ], + "usedFiles": [ + { + "topName": "Remove From Array", + "orderNumber": 2, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 4 + } + ] + }, + "666": { + "contexts": [ + "Value - The real number to round. Can use", + "most Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Round To Integer", + "orderNumber": 1, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 4 + } + ] + }, + "667": { + "contexts": [ + "Rounding Type - Determines the direction", + "in which the value will be rounded. You", + "can round up, down, or to the nearest integer." + ], + "usedFiles": [ + { + "topName": "Round To Integer", + "orderNumber": 2, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 4 + } + ] + }, + "668": { + "contexts": [ + "Player - The player whose score to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Score Of", + "orderNumber": 1, + "path": "/interface/value/child/scoreOf.ts", + "indent": 4 + } + ] + }, + "669": { + "contexts": [ + "Player - The player whose slot number to", + "acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Slot Of", + "orderNumber": 1, + "path": "/interface/value/child/slotOf.ts", + "indent": 4 + } + ] + }, + "670": { + "contexts": [ + "Array - The array whose copy will be sorted.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Sorted Array", + "orderNumber": 1, + "path": "/interface/value/child/sortedArray.ts", + "indent": 4 + } + ] + }, + "671": { + "contexts": [ + "Value Rank - The value that is evaluated", + "for each element of the copied array. The", + "array is sorted by this rank in ascending", + "order. Use the current array element value", + "to reference the element of the array currently", + "being considered. Can use most Number based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Sorted Array", + "orderNumber": 2, + "path": "/interface/value/child/sortedArray.ts", + "indent": 4 + } + ] + }, + "672": { + "contexts": [ + "Player - The player whose velocity to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Speed Of", + "orderNumber": 1, + "path": "/interface/value/child/speedOf.ts", + "indent": 4 + }, + { + "topName": "Speed Of In Direction", + "orderNumber": 1, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 4 + }, + { + "topName": "Velocity Of", + "orderNumber": 1, + "path": "/interface/value/child/velocityOf.ts", + "indent": 4 + } + ] + }, + "673": { + "contexts": [ + "Direction - The direction of travel in which", + "to measure the playerโ€™s speed. Can use most", + "Vector based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Speed Of In Direction", + "orderNumber": 2, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 4 + } + ] + }, + "674": { + "contexts": [ + "Value - The real number value whose square", + "root will be computed. Negative values result", + "in zero. Can use most Number based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Square Root", + "orderNumber": 1, + "path": "/interface/value/child/squareRoot.ts", + "indent": 4 + } + ] + }, + "675": { + "contexts": [ + "String - How the string will be structured", + "using a series of text and phrases." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 1, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "676": { + "contexts": [ + "{0} - The first value in the string." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 2, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "677": { + "contexts": [ + "{1} - The second value in the string." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 3, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "678": { + "contexts": [ + "{2} - The third value in the string." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 4, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "679": { + "contexts": [ + "Value - The left-hand operand. May be any", + "value that results in a number or a vector.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Subtract", + "orderNumber": 1, + "path": "/interface/value/child/subtract.ts", + "indent": 4 + } + ] + }, + "680": { + "contexts": [ + "Value - The right-hand operand. May be any", + "value that results in a number or a vector.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Subtract", + "orderNumber": 2, + "path": "/interface/value/child/subtract.ts", + "indent": 4 + } + ] + }, + "681": { + "contexts": [ + "Player - The player whose team to acquire.", + "Can use most Player based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Team Of", + "orderNumber": 1, + "path": "/interface/value/child/teamOf.ts", + "indent": 4 + } + ] + }, + "682": { + "contexts": [ + "Team - The team whose score to acquire.", + "Can use most Team based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Team Score", + "orderNumber": 1, + "path": "/interface/value/child/teamScore.ts", + "indent": 4 + } + ] + }, + "683": { + "contexts": [ + "Player - The player whose directional input", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Throttle Of", + "orderNumber": 1, + "path": "/interface/value/child/throttleOf.ts", + "indent": 4 + } + ] + }, + "684": { + "contexts": [ + "Player - The player whose ultimate charge", + "percentage to acquire. Can use most Player", + "based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Ultimate Charge Percent", + "orderNumber": 1, + "path": "/interface/value/child/ultimateChargePercent.ts", + "indent": 4 + } + ] + }, + "685": { + "contexts": [ + "Array - The array whose element to acquire.", + "Can use most Array based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Value In Array", + "orderNumber": 1, + "path": "/interface/value/child/valueInArray.ts", + "indent": 4 + } + ] + }, + "686": { + "contexts": [ + "Index - The index whose element to acquire.", + "Can use most Number based Value Syntax to", + "provide this value." + ], + "usedFiles": [ + { + "topName": "Value In Array", + "orderNumber": 2, + "path": "/interface/value/child/valueInArray.ts", + "indent": 4 + } + ] + }, + "687": { + "contexts": [ + "X - The X value of the Vector. Can use most", + "Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 1, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "688": { + "contexts": [ + "Y - The Y value of the vector. Can use most", + "Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 2, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "689": { + "contexts": [ + "Z - The Z value of the Vector. Can use most", + "Number based Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 3, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "690": { + "contexts": [ + "Start Pos - The start position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Vector Towards", + "orderNumber": 1, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 4 + } + ] + }, + "691": { + "contexts": [ + "End Pos - The end position for the line", + "of sight check. Most positional based Value", + "Syntax can be used here." + ], + "usedFiles": [ + { + "topName": "Vector Towards", + "orderNumber": 2, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 4 + } + ] + }, + "692": { + "contexts": [ + "Direction - The direction vector from which", + "to acquire a vertical angle in degrees.", + "The vector is unitized before calculations", + "begins. Can use most Vector based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vertical Angle From Direction", + "orderNumber": 1, + "path": "/interface/value/child/verticalAngleFromDirection.ts", + "indent": 4 + } + ] + }, + "693": { + "contexts": [ + "Position - The direction vector from which", + "to acquire a vertical angle in degrees.", + "The vector is unitized before calculations", + "begins. Can use most Vector based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vertical Angle Towards", + "orderNumber": 2, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 4 + } + ] + }, + "694": { + "contexts": [ + "Player - The player whose vertical facing", + "angle to acquire. Can use most Player based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vertical Facing Angle Of", + "orderNumber": 1, + "path": "/interface/value/child/verticalFacingAngleOf.ts", + "indent": 4 + } + ] + }, + "695": { + "contexts": [ + "Player - The player whose vertical speed", + "to acquire. Can use most Player based Value", + "Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Vertical Speed Of", + "orderNumber": 1, + "path": "/interface/value/child/verticalSpeedOf.ts", + "indent": 4 + } + ] + }, + "696": { + "contexts": [ + "Local vector - Specifies whether the vector", + "should receive a rotation and a translation", + "(usually applied to positions) or only a", + "rotation (usually applied to directions", + "and velocities). Can select rotation or", + "rotation and translation." + ], + "usedFiles": [ + { + "topName": "World Vector Of", + "orderNumber": 3, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "697": { + "contexts": [ + "Value - The vector from which to acquire", + "the X component. Can use most Vector based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "X Component Of", + "orderNumber": 1, + "path": "/interface/value/child/xComponentOf.ts", + "indent": 4 + } + ] + }, + "698": { + "contexts": [ + "Value - The vector from which to acquire", + "the Y component. Can use most Vector based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Y Component Of", + "orderNumber": 1, + "path": "/interface/value/child/yComponentOf.ts", + "indent": 4 + } + ] + }, + "699": { + "contexts": [ + "Value - The vector from which to acquire", + "the Z component. Can use most Vector based", + "Value Syntax to provide this value." + ], + "usedFiles": [ + { + "topName": "Z Component Of", + "orderNumber": 1, + "path": "/interface/value/child/zComponentOf.ts", + "indent": 4 + } + ] + }, + "700": { + "contexts": [ + "Team constant. The ALL option refers to", + "both teams in a team competition, or to", + "all players in an individual combat game." + ], + "usedFiles": [ + { + "topName": "TeamConstant", + "orderNumber": 0, + "path": "/type/teamConstant.ts", + "indent": 0 + } + ] + }, + "701": { + "contexts": [ + "- `All' Event applies to all players.", + "- `Slot1' ~ `Slot11`", + " Event only applies to players in specific", + "slots.", + " In a team competition, two players can", + "occupy one slot (one for each team)." + ], + "usedFiles": [ + { + "topName": "EventPlayer", + "orderNumber": 0, + "path": "/type/event/player.ts", + "indent": 0 + } + ] + }, + "702": { + "contexts": [ + "`BARRIERS DO NOT BLOCK LOS`", + "No barrier interferes with the view.", + "`ENEMY BARRIERS BLOCK LOS`", + "Syah is covered by the walls of the enemy", + "team.", + "`ALL BARRIERS BLOCK LOS`", + "Syah is covered by all the barriers." + ], + "usedFiles": [ + { + "topName": "Barrier", + "orderNumber": 0, + "path": "/type/value/barrier.ts", + "indent": 0 + } + ] + }, + "703": { + "contexts": [ + "Player, icon object, or effect object." + ], + "usedFiles": [ + { + "topName": "Entity", + "orderNumber": 0, + "path": "/type/value/entity.ts", + "indent": 0 + } + ] + }, + "704": { + "contexts": [ + "Lists the available value interface ." + ], + "usedFiles": [ + { + "topName": "Value", + "orderNumber": 0, + "path": "/type/value/value.ts", + "indent": 0 + } + ] + }, + "_file": { + "/type/heroConstant.ts": [ + "export type HeroConstantType", + " = 'Reaper'", + " | 'Tracer'", + " | 'Mercy'", + " | 'Hanzo'", + " | 'Torbjรถrn'", + " | 'Reinhardt'", + " | 'Pharah'", + " | 'Winston'", + " | 'Widowmaker'", + " | 'Bastion'", + " | 'Symmetra'", + " | 'Zenyatta'", + " | 'Genji'", + " | 'Roadhog'", + " | 'Mccree'", + " | 'Junkrat'", + " | 'Zarya'", + " | 'Soldier: 76'", + " | 'Lรบcio'", + " | 'D.Va'", + " | 'Mei'", + " | 'Sombra'", + " | 'Doomfist'", + " | 'Ana'", + " | 'Orisa'", + " | 'Brigitte'", + " | 'Moira'", + " | 'Wrecking Ball'", + " | 'Ashe'", + " | 'Baptiste'" + ] + } +} \ No newline at end of file diff --git a/bin/core/language/parse/eng/value_stage3_additional.json b/bin/core/language/parse/eng/value_stage3_additional.json new file mode 100644 index 0000000..7e7471e --- /dev/null +++ b/bin/core/language/parse/eng/value_stage3_additional.json @@ -0,0 +1,220 @@ +{ + "Destroy All Hud Text/0": [ + "Destroys all hud text that was created by the create hud text action." + ], + + "Destroy In World Text/0": [ + "Destroys in-world text that was created by create in-world text." + ], + "Destroy In World Text/1": [ + "Text Id - A Reference to the last piece of text created by the event player (or created at the global level) via the create hud text or create in-world text action." + ], + + "Angle Between Vectors/0": [ + "The angle in degrees between two directional vectors (no normalization required)." + ], + "Angle Between Vectors/1": [ + "Vector - One of two directional vectors between which to measure the angle in degrees. this vector does not need to be pre-normalized." + ], + "Angle Between Vectors/2": [ + "Vector - One of two directional vectors between which to measure the angle in degrees. this vector does not need to be pre-normalized." + ], + + "Arccosine In Degrees/0": [ + "Arccosine in degrees of the specified value." + ], + "Arccosine In Degrees/1": [ + "Value - Input value for the function." + ], + + "Arccosine In Radians/0": [ + "Arccosine in radians of the specified value" + ], + "Arccosine In Radians/1": [ + "Value - Input value for the function." + ], + + "Arcsine In Degrees/0": [ + "Arcsine in degrees of the specified value." + ], + "Arcsine In Degrees/1": [ + "Value - Input value for the function." + ], + + "Arcsine In Radians/0": [ + "Arcsine in radians of the specified value." + ], + "Arcsine In Radians/1": [ + "Value - Input value for the function." + ], + + "Arctangent In Degrees/0": [ + "Arctangent in degrees of the specified numerator and denominator(often referred to as atan2)." + ], + "Arctangent In Degrees/1": [ + "Numerator - Numerator input for the function." + ], + "Arctangent In Degrees/2": [ + "Denominator - Denominator input for the function." + ], + + "Arctangent In Radians/0": [ + "Arctangent in radians of the specified numerator and denominator(often referred to as atan2)." + ], + "Arctangent In Radians/1": [ + "Numerator - Numerator input for the function." + ], + "Arctangent In Radians/2": [ + "Denominator - Denominator input for the function." + ], + + "Event Damage/0": [ + "The amount of damage received by the victim for the event currently being processed by this rule." + ], + "Event Was Critical Hit/0": [ + "Whether the damage was a critical hit (such as a headshot) for the event currently being processed by this rule." + ], + + "Eye Position/0": [ + "The position of a player's first person view (used for aiming)" + ], + "Eye Position/1": [ + "Position - The position of a player's first person view (used for aiming)" + ], + + "Is Flag Being Carried/0": [ + "Whether a specific team's flag is being is being carried by a member of the opposing team in capture the flag." + ], + "Is Flag Being Carried/1": [ + "Team - The team whose flag to check." + ], + + "Last Damage Modification Id/0": [ + "An id representing the most recent start damage modification action that was executed by the event player (or executed at the global level)." + ], + + "Normalized Health/0": [ + "The current health of a player. including armor and shields, normalized between 0 and 1. (for example, 0 is no health, 0.5 is half health, 1 is full health, etc.)" + ], + "Normalized Health/1": [ + "Player - The player whose normalized health to acquire." + ], + + "Server Load/0": [ + "Provides a percentage representing the cpu load of the current game instance. as this number approaches or exceeds 100, It becomes increasingly likely that the instance will be shut down because it is consuming too many resources." + ], + "Server Load Average/0": [ + "Provides a percentage representing the average cpu load of the current game instance over the last two seconds. as this number approaches or exceeds 100, It becomes increasingly likely that the instance will be shut down because it is consuming too many resources." + ], + "Server Load Peak/0": [ + "Provides a percentage representing the highest cpu load of the current game instance over the last two seconds. as this number approaches or exceeds 100, It becomes increasingly likely that the instance will be shut down because it is consuming too many resources." + ], + + "Tangent From Degrees/0": [ + "Tangent of the specified angle in degrees." + ], + "Tangent From Degrees/1": [ + "Angle - Angle in degrees." + ], + + "Tangent From Radians/0": [ + "Tangent of the specified angle in radians." + ], + "Tangent From Radians/1": [ + "Angle - Angle in radians." + ], + + "Total Time Elapsed/0": [ + "The total time seconds that have elapsed since the game instance was created (including setup time and transitions)." + ], + + "And/1": [ + "Value - One of the two inputs considered. if both are true (or equivalent to true), then the and value is true." + ], + "And/2": [ + "Value - One of the two inputs considered. if both are true (or equivalent to true), then the and value is true." + ], + + "Add/1": [ + "Value - The left-hand operand. may be any value that results in a number or a vector." + ], + "Add/2": [ + "Value - The right-hand operand. may be any value that results in a number or a vector." + ], + + "Angle Difference/1": [ + "Angle - One of the two angles between which to measure the resulting angle." + ], + "Angle Difference/2": [ + "Angle - One of the two angles between which to measure the resulting angle." + ], + + "Disallow Button/2": [ + "Button - The logical button that is being disabled." + ], + "Stop Holding Button/2": [ + "The logical button that is no longer being held virtually." + ], + + "TeamConstant/0": [ + "Team constant. The ALL option refers to both teams in a team competition, or to all players in an individual combat game." + ], + "EventPlayer/0": [ + "- `All' Event applies to all players.", + "- `Slot1' ~ `Slot11`", + " Event only applies to players in specific slots.", + " In a team competition, two players can occupy one slot (one for each team)." + ], + "Barrier/0": [ + "`BARRIERS DO NOT BLOCK LOS`", + "No barrier interferes with the view.", + "", + "`ENEMY BARRIERS BLOCK LOS`", + "Syah is covered by the walls of the enemy team.", + "", + "`ALL BARRIERS BLOCK LOS`", + "Syah is covered by all the barriers." + ], + "Entity/0": [ + "Player, icon object, or effect object." + ], + "Value/0": [ + "Lists the available value interface ." + ], + + "_file": { + "/type/heroConstant.ts": [ + "export type HeroConstantType", + " = 'Reaper'", + " | 'Tracer'", + " | 'Mercy'", + " | 'Hanzo'", + " | 'Torbjรถrn'", + " | 'Reinhardt'", + " | 'Pharah'", + " | 'Winston'", + " | 'Widowmaker'", + " | 'Bastion'", + " | 'Symmetra'", + " | 'Zenyatta'", + " | 'Genji'", + " | 'Roadhog'", + " | 'Mccree'", + " | 'Junkrat'", + " | 'Zarya'", + " | 'Soldier: 76'", + " | 'Lรบcio'", + " | 'D.Va'", + " | 'Mei'", + " | 'Sombra'", + " | 'Doomfist'", + " | 'Ana'", + " | 'Orisa'", + " | 'Brigitte'", + " | 'Moira'", + " | 'Wrecking Ball'", + " | 'Ashe'", + " | 'Baptiste'" + ] + } +} \ No newline at end of file diff --git a/bin/core/language/parse/eng/value_stage3_reference.json b/bin/core/language/parse/eng/value_stage3_reference.json new file mode 100644 index 0000000..fd9a927 --- /dev/null +++ b/bin/core/language/parse/eng/value_stage3_reference.json @@ -0,0 +1,12569 @@ +{ + "0": { + "contexts": [ + "์•ก์…˜ ๋ชฉ๋ก ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 0, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort", + "orderNumber": 0, + "path": "/interface/action/child/abort.ts", + "indent": 0 + } + ] + }, + "1": { + "contexts": [ + "์ด ์•ก์…˜ ์กฐ๊ฑด์ด TRUE์ผ ๋•Œ ์•ก์…˜ ๋ชฉ๋ก ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "๊ทธ ์™ธ์— ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 1, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If", + "orderNumber": 0, + "path": "/interface/action/child/abortIf.ts", + "indent": 0 + } + ] + }, + "2": { + "contexts": [ + "์กฐ๊ฑด ๋ชฉ๋ก์— ์žˆ๋Š” ์กฐ๊ฑด ์ค‘", + "ํ•˜๋‚˜ ์ด์ƒ์ด FALSE์ธ ๊ฒฝ์šฐ ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "๋ชจ๋“  ์กฐ๊ฑด์ด TRUE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 2, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If Condition Is False", + "orderNumber": 0, + "path": "/interface/action/child/abortIfConditionIsFalse.ts", + "indent": 0 + } + ] + }, + "3": { + "contexts": [ + "์กฐ๊ฑด ๋ชฉ๋ก์— ์žˆ๋Š” ์กฐ๊ฑด ์ค‘", + "ํ•˜๋‚˜ ์ด์ƒ์ด TRUE์ธ ๊ฒฝ์šฐ ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "๋ชจ๋“  ์กฐ๊ฑด์ด FALSE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 3, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Abort If Condition Is True", + "orderNumber": 0, + "path": "/interface/action/child/abortIfConditionIsTrue.ts", + "indent": 0 + } + ] + }, + "4": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด DISALLOW BUTTON", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 4, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Allow Button", + "orderNumber": 0, + "path": "/interface/action/child/allowButton.ts", + "indent": 0 + } + ] + }, + "5": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์›€์ง์ž„์— ์ฆ‰๊ฐ์ ์ธ ์†๋„ ๋ณ€ํ™”๋ฅผ ์ค๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 5, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Apply Impluse", + "orderNumber": 0, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 0 + } + ] + }, + "6": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์—‰์—๊ฒŒ ๋ณด์ด๋„๋ก", + "ํฐ ๋ฉ”์‹œ์ง€๋ฅผ ์กฐ์ค€์„  ์œ„์ชฝ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 6, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Big Message", + "orderNumber": 0, + "path": "/interface/action/child/bigMessage.ts", + "indent": 0 + } + ] + }, + "7": { + "contexts": [ + "์ „์—ญ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ง€์ •๋œ ๋น„์œจ๋กœ", + "์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "(์ „์—ญ ๋ณ€์ˆ˜(GLOBAL VARIABLE)๋Š”", + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 7, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 0, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 0 + } + ] + }, + "8": { + "contexts": [ + "์ „์—ญ ๋ณ€์ˆ˜ ๊ฐ’์„ ์‹œ๊ฐ„์ด ์ง€๋‚จ์—", + "๋”ฐ๋ผ ์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "(์ „์—ญ ๋ณ€์ˆ˜(GLOBAL VARIABLE)๋Š”", + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 8, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 0, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 0 + } + ] + }, + "9": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„ ์ง€์ •๋œ", + "๋น„์œจ๋กœ ์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "(ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜(PLAYER VARIABLE)๋Š”", + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 9, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 0, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 0 + } + ] + }, + "10": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„ ์‹œ๊ฐ„์˜", + "๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "(ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜(PLAYER VARIABLE)๋Š”", + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.)" + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 10, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 0, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 0 + } + ] + }, + "11": { + "contexts": [ + "SET STATUS ์•ก์…˜์„ ํ†ตํ•ด", + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ ์šฉ๋œ", + "์ƒํƒœ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 11, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Clear Status", + "orderNumber": 0, + "path": "/interface/action/child/clearStatus.ts", + "indent": 0 + } + ] + }, + "12": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ์ • ํ‘œํ˜„, ์Œ์„ฑ ๋Œ€์‚ฌ,", + "๋˜๋Š” ๊ธฐํƒ€ ์žฅ์ฐฉํ•œ ์˜์‚ฌ์†Œํ†ต", + "์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 12, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Communicate", + "orderNumber": 0, + "path": "/interface/action/child/communicate.ts", + "indent": 0 + } + ] + }, + "13": { + "contexts": [ + "์›”๋“œ ๋‚ด์— ํšจ๊ณผ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ํšจ๊ณผ ๊ฐœ์ฒด๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ํšจ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST CREATED ENTITY ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "๊ฐœ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋  ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 13, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Effect", + "orderNumber": 0, + "path": "/interface/action/child/createEffect.ts", + "indent": 0 + } + ] + }, + "14": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด ํ™”๋ฉด์˜ ์ง€์ •๋œ ์œ„์น˜์—", + "ํ‘œ์‹œํ•  HUD ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ํ…์ŠคํŠธ๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ํ…์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST TEXT ID ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "ํ…์ŠคํŠธ ์š”์†Œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋  ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 14, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/createHudText.ts", + "indent": 0 + } + ] + }, + "15": { + "contexts": [ + "์›”๋“œ ๋‚ด์— ์•„์ด์ฝ˜ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•„์ด์ฝ˜ ๊ฐœ์ฒด๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST CREATED ENTITY ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "๊ฐœ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋  ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 15, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create Icon", + "orderNumber": 0, + "path": "/interface/action/child/createIcon.ts", + "indent": 0 + } + ] + }, + "16": { + "contexts": [ + "์›”๋“œ์˜ ์ง€์ •๋œ ์œ„์น˜์—์„œ ์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ", + "ํ‘œ์‹œํ•  ์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ํ…์ŠคํŠธ๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.", + "์ด ํ…์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST TEXT ID ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.", + "ํ…์ŠคํŠธ ์š”์†Œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ์ด ์•ก์…˜์€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 16, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Create In World Text", + "orderNumber": 0, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 0 + } + ] + }, + "17": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ฆ‰์‹œ ํ”ผํ•ด๋ฅผ ์ ์šฉํ•˜๋ฉฐ,", + "ํ”ผํ•ด๋ฅผ ๋ฐ›์€ ๋Œ€์ƒ์ด ์ฃฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 17, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Damage", + "orderNumber": 0, + "path": "/interface/action/child/damage.ts", + "indent": 0 + } + ] + }, + "18": { + "contexts": [ + "๊ฒฝ๊ธฐ๋ฅผ ์ฆ‰์‹œ ๋ฌด์Šน๋ถ€๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 18, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Match Draw", + "orderNumber": 0, + "path": "/interface/action/child/declareMatchDraw.ts", + "indent": 0 + } + ] + }, + "19": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์Šน์ž๋กœ ํ•˜์—ฌ ๊ฒฝ๊ธฐ๋ฅผ ์ฆ‰์‹œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 19, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Player Victory", + "orderNumber": 0, + "path": "/interface/action/child/declarePlayerVictory.ts", + "indent": 0 + } + ] + }, + "20": { + "contexts": [ + "ํŒ€ ํ•˜๋‚˜๋ฅผ ํ˜„์žฌ ๋ผ์šด๋“œ์˜ ์Šน์ž๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์Ÿํƒˆ ๋ฐ ์„ฌ๋ฉธ์ „ ๊ฒŒ์ž„ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 20, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Round Victory", + "orderNumber": 0, + "path": "/interface/action/child/declareRoundVictory.ts", + "indent": 0 + } + ] + }, + "21": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์„ ์Šน์ž๋กœ ํ•˜์—ฌ ๊ฒฝ๊ธฐ๋ฅผ ์ฆ‰์‹œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 21, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Declare Team Victory", + "orderNumber": 0, + "path": "/interface/action/child/declareTeamVictory.ts", + "indent": 0 + } + ] + }, + "22": { + "contexts": [ + "CREATE EFFECT์— ์˜ํ•ด ์ƒ์„ฑ๋œ", + "๋ชจ๋“  ํšจ๊ณผ ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 22, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Effects", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllEffects.ts", + "indent": 0 + } + ] + }, + "23": { + "contexts": [ + "CREATE HUD TEXT ์•ก์…˜์— ์˜ํ•ด", + "์ƒ์„ฑ๋œ ๋ชจ๋“  HUD ํ…์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 23, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllHudText.ts", + "indent": 0 + } + ] + }, + "24": { + "contexts": [ + "CREATE ICON์— ์˜ํ•ด ์ƒ์„ฑ๋œ", + "๋ชจ๋“  ์•„์ด์ฝ˜ ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 24, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All Icons", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllIcons.ts", + "indent": 0 + } + ] + }, + "25": { + "contexts": [ + "CREATE IN-WORLD TEXT์— ์˜ํ•ด", + "์ƒ์„ฑ๋œ ์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 25, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy All In World Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyAllInWorldText.ts", + "indent": 0 + } + ] + }, + "26": { + "contexts": [ + "CREATE EFFECT์— ์˜ํ•ด ์ƒ์„ฑ๋œ", + "ํšจ๊ณผ ๊ฐœ์ฒด ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 26, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Effect", + "orderNumber": 0, + "path": "/interface/action/child/destroyEffect.ts", + "indent": 0 + } + ] + }, + "27": { + "contexts": [ + "CREATE HUD TEXT ์•ก์…˜์— ์˜ํ•ด", + "์ƒ์„ฑ๋œ HUD ํ…์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 27, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Hud Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyHudText.ts", + "indent": 0 + } + ] + }, + "28": { + "contexts": [ + "CREATE ICON์— ์˜ํ•ด ์ƒ์„ฑ๋œ", + "์•„์ด์ฝ˜ ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 28, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy Icon", + "orderNumber": 0, + "path": "/interface/action/child/destroyIcon.ts", + "indent": 0 + } + ] + }, + "29": { + "contexts": [ + "CREATE IN-WORD TEXT์— ์˜ํ•ด", + "์ƒ์„ฑ๋œ ์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 29, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Destroy In World Text", + "orderNumber": 0, + "path": "/interface/action/child/destroyInWorldText.ts", + "indent": 0 + } + ] + }, + "30": { + "contexts": [ + "๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๊ธฐ๊ฐ€", + "์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์•„๋‚˜์šด์„œ์˜", + "๊ฒŒ์ž„ ๋ชจ๋“œ ์•ˆ๋‚ด ์Œ์„ฑ์„", + "์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 30, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Announcer", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeAnnouncer.ts", + "indent": 0 + } + ] + }, + "31": { + "contexts": [ + "๊ฒŒ์ž„ ๋ชจ๋“œ ์ž์ฒด์—์„œ ๊ฒฝ๊ธฐ", + "์ข…๋ฃŒ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.", + "์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์–ด๋กœ๋งŒ ๊ฒฝ๊ธฐ๋ฅผ", + "๋งˆ์น  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 31, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Completion", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeCompletion.ts", + "indent": 0 + } + ] + }, + "32": { + "contexts": [ + "๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜", + "๊ฒฝ๊ธฐ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€", + "๋ชจ๋“  ๊ฒŒ์ž„ ๋ชจ๋“œ ์Œ์•…์„", + "์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 32, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Music", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeMusic.ts", + "indent": 0 + } + ] + }, + "33": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์ž๋™", + "๋ถ€ํ™œ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ ,", + "์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•œ", + "๋ถ€ํ™œ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 33, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Respawning", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeRespawning.ts", + "indent": 0 + } + ] + }, + "34": { + "contexts": [ + "๊ฒŒ์ž„ ๋ชจ๋“œ ์ž์ฒด์—์„œ", + "ํ”Œ๋ ˆ์ด์–ด ์ ์ˆ˜์™€ ํŒ€ ์ ์ˆ˜๋ฅผ", + "๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋ฉฐ,", + "์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์–ด๋กœ๋งŒ", + "์ ์ˆ˜ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 34, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Built In Game Mode Scoring", + "orderNumber": 0, + "path": "/interface/action/child/disableBuiltInGameModeScoring.ts", + "indent": 0 + } + ] + }, + "35": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ", + "ENABLE DEATH SPECTATE ALL PLAYERS", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 35, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Death Spectate All Players", + "orderNumber": 0, + "path": "/interface/action/child/disableDeathSpectateAllPlayers.ts", + "indent": 0 + } + ] + }, + "36": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ", + "ENABLE DEATH SPECTATE TARGET HUD", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 36, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disable Death Spectate Target Hud", + "orderNumber": 0, + "path": "/interface/action/child/disableDeathSpectateTargetHud.ts", + "indent": 0 + } + ] + }, + "37": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์„", + "์‚ฌ์šฉ ๋ชป ํ•˜๊ฒŒ ํ•˜์—ฌ ๋ˆŒ๋Ÿฌ๋„", + "์•„๋ฌด ํšจ๊ณผ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 37, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Disallow Button", + "orderNumber": 0, + "path": "/interface/action/child/disallowButton.ts", + "indent": 0 + } + ] + }, + "38": { + "contexts": [ + "DISABLE BUILT-IN GAME MODE ANNOUNCER", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 38, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Announcer", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeAnnouncer.ts", + "indent": 0 + } + ] + }, + "39": { + "contexts": [ + "DISABLE BUILT-IN GAME MODE COMPLETION", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 39, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Completion", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeCompletion.ts", + "indent": 0 + } + ] + }, + "40": { + "contexts": [ + "DISABLE BUILT-IN GAME MODE MUSIC", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 40, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Music", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeMusic.ts", + "indent": 0 + } + ] + }, + "41": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด", + "DISABLE BUILT-IN GAME MODE RESPAWNING", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 41, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Respawning", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeRespawning.ts", + "indent": 0 + } + ] + }, + "42": { + "contexts": [ + "DISABLE BUILT-IN GAME MODE SCORING", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 42, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Scoring", + "orderNumber": 0, + "path": "/interface/action/child/enableBuiltInGameModeScoring.ts", + "indent": 0 + } + ] + }, + "43": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ์‚ฌ๋ง ์‹œ,", + "์•„๊ตฐ๋ฟ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ", + "๊ด€์ „ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 43, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Death Spectate All Players", + "orderNumber": 0, + "path": "/interface/action/child/enableDeathSpectateAllPlayers.ts", + "indent": 0 + } + ] + }, + "44": { + "contexts": [ + "์‚ฌ๋ง ํ›„ ๊ด€์ „ ์‹œ", + "ํ”Œ๋ ˆ์ด์–ด ์ž์‹ ์˜ HUD ๋Œ€์‹ ", + "๊ด€์ „ ๋Œ€์ƒ์˜ HUD๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 44, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Enable Death Spectate Target Hud", + "orderNumber": 0, + "path": "/interface/action/child/enableDeathSpectateTargetHud.ts", + "indent": 0 + } + ] + }, + "45": { + "contexts": [ + "๊ฒฝ๊ธฐ๋ฅผ ํ•ด๋‹น ๊ฒŒ์ž„ ๋ชจ๋“œ์˜", + "์˜์›… ์„ ํƒ ๋‹จ๊ณ„๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 45, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Go To Assemble Heroes", + "orderNumber": 0, + "path": "/interface/action/child/goToAssembleHeroes.ts", + "indent": 0 + } + ] + }, + "46": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ฆ‰์‹œ ์น˜์œ ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ๊ธฐ๋Šฅ์œผ๋กœ ์ฃฝ์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "๋ถ€ํ™œํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 46, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Heal", + "orderNumber": 0, + "path": "/interface/action/child/heal.ts", + "indent": 0 + } + ] + }, + "47": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ฆ‰์‹œ ์ฒ˜์น˜ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 47, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Kill", + "orderNumber": 0, + "path": "/interface/action/child/kill.ts", + "indent": 0 + } + ] + }, + "48": { + "contexts": [ + "์•ก์…˜ ๋ชฉ๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฌดํ•œ ๋ฐ˜๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹œ์ž‘๊ณผ", + "์ด ์•ก์…˜ ์‚ฌ์ด์— WAIT ์•ก์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 48, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop", + "orderNumber": 0, + "path": "/interface/action/child/loop.ts", + "indent": 0 + } + ] + }, + "49": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์กฐ๊ฑด์ด TRUE์ธ ๊ฒฝ์šฐ", + "์•ก์…˜ ๋ชฉ๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "FALSE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฌดํ•œ ๋ฐ˜๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹œ์ž‘๊ณผ", + "์ด ์•ก์…˜ ์‚ฌ์ด์— WAIT ์•ก์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 49, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If", + "orderNumber": 0, + "path": "/interface/action/child/loopIf.ts", + "indent": 0 + } + ] + }, + "50": { + "contexts": [ + "์กฐ๊ฑด ๋ชฉ๋ก์˜ ์กฐ๊ฑด์ด ํ•˜๋‚˜๋ผ๋„ FALSE์ธ ๊ฒฝ์šฐ", + "์•ก์…˜ ๋ชฉ๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "๋ชจ๋‘ TRUE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฌดํ•œ ๋ฐ˜๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹œ์ž‘๊ณผ", + "์ด ์•ก์…˜ ์‚ฌ์ด์— WAIT ์•ก์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 50, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If Condition Is False", + "orderNumber": 0, + "path": "/interface/action/child/loopIfConditionIsFalse.ts", + "indent": 0 + } + ] + }, + "51": { + "contexts": [ + "์กฐ๊ฑด ๋ชฉ๋ก์˜ ์กฐ๊ฑด์ด ํ•˜๋‚˜๋ผ๋„ TRUE์ธ ๊ฒฝ์šฐ", + "์•ก์…˜ ๋ชฉ๋ก์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "๋ชจ๋‘ FALSE์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฌดํ•œ ๋ฐ˜๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์…˜ ๋ชฉ๋ก์˜ ์‹œ์ž‘๊ณผ", + "์ด ์•ก์…˜ ์‚ฌ์ด์— WAIT ์•ก์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 51, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Loop If Condition Is True", + "orderNumber": 0, + "path": "/interface/action/child/loopIfConditionIsTrue.ts", + "indent": 0 + } + ] + }, + "52": { + "contexts": [ + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ", + "์ „์—ญ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 52, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 0 + } + ] + }, + "53": { + "contexts": [ + "์ธ๋ฑ์Šค์—์„œ ๊ฒŒ์ž„ ์ž์ฒด์—", + "์ข…์†๋œ ์ „์—ญ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 53, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "54": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜(์ฒ˜์น˜์ˆ˜)๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ", + "๋ชจ๋“œ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 54, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Score", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 0 + } + ] + }, + "55": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง„ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 55, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 0 + } + ] + }, + "56": { + "contexts": [ + "์ธ๋ฑ์Šค์—์„œ ์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "๊ฐ€์ง„ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 56, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "57": { + "contexts": [ + "ํ•œ ํŒ€ ๋˜๋Š” ๋‘ ํŒ€ ๋ชจ๋‘์˜ ์ ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ๋‚˜ ํŒ€ ์ ์ˆ˜๊ฐ€", + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“œ์—์„œ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 57, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Modify Team Score", + "orderNumber": 0, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 0 + } + ] + }, + "58": { + "contexts": [ + "๊ฒฝ๊ธฐ ์‹œ๊ฐ„์„ ์ผ์‹œ์ •์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด, ๋ชฉํ‘œ ๋กœ์ง, ๊ฒŒ์ž„ ๋ชจ๋“œ ์ง„ํ–‰ ๊ธฐ์ค€ ๋“ฑ์€", + "์ผ์‹œ์ •์ง€์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 58, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Pause Match Time", + "orderNumber": 0, + "path": "/interface/action/child/pauseMatchTime.ts", + "indent": 0 + } + ] + }, + "59": { + "contexts": [ + "์›”๋“œ์˜ ํ•œ ์œ„์น˜์— ํšจ๊ณผ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.", + "์ด ํšจ๊ณผ๋Š” ๊ฐฑ์‹ ๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ํ•„์š” ์—†๋„๋ก", + "์งง๊ฒŒ ์œ ์ง€๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 59, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Play Effect", + "orderNumber": 0, + "path": "/interface/action/child/playEffect.ts", + "indent": 0 + } + ] + }, + "60": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์Šคํ‚จ์„ ์‚ฌ์šฉํ•˜์—ฌ,", + "์ง€์ •๋œ ์˜์›…์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ", + "ํ—ˆ์šฉํ•˜๋Š” ๋งŒํผ ๋จผ์ € ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.", + "๋น ๋ฅด๊ฒŒ ์˜์›…์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์œผ๋ฉฐ,", + "๋‹ค์Œ ์˜์›…์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 60, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Preload Hero", + "orderNumber": 0, + "path": "/interface/action/child/preloadHero.ts", + "indent": 0 + } + ] + }, + "61": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด", + "ํ•œ ํ”„๋ ˆ์ž„ ๋™์•ˆ", + "๊ฐ€์ƒ์œผ๋กœ ๋ฒ„ํŠผ ํ•˜๋‚˜๋ฅผ", + "๋ˆ„๋ฅด๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 61, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Press Button", + "orderNumber": 0, + "path": "/interface/action/child/pressButton.ts", + "indent": 0 + } + ] + }, + "62": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›… ๋ชฉ๋ก์„", + "๊ฒŒ์ž„ ์„ค์ •์— ์ง€์ •ํ•œ ๋Œ€๋กœ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์˜์›…์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด", + "ํ”Œ๋ ˆ์ด์–ด๋Š” ๊ฐ•์ œ๋กœ ๋‹ค๋ฅธ ์˜์›…์„ ์„ ํƒํ•˜์—ฌ", + "์ ์ ˆํ•œ ์ƒ์„ฑ ์ง€์ ์—์„œ ๋ถ€ํ™œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 62, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Reset Player Hero Availability", + "orderNumber": 0, + "path": "/interface/action/child/resetPlayerHeroAvailability.ts", + "indent": 0 + } + ] + }, + "63": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ƒ์กด ์—ฌ๋ถ€์™€ ๊ด€๊ณ„ ์—†์ด,", + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ ์ ˆํ•œ ์ƒ์„ฑ ์ง€์ ์—์„œ", + "์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ์œผ๋กœ ๋ถ€ํ™œ์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 63, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Respawn", + "orderNumber": 0, + "path": "/interface/action/child/respawn.ts", + "indent": 0 + } + ] + }, + "64": { + "contexts": [ + "์ „ํ™˜ ์—†์ด ํ”Œ๋ ˆ์ด์–ด๋ฅผ", + "์‚ฌ๋งํ•œ ์ž๋ฆฌ์—์„œ ์ฆ‰์‹œ ๋ถ€ํ™œ์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 64, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Resurrect", + "orderNumber": 0, + "path": "/interface/action/child/resurrect.ts", + "indent": 0 + } + ] + }, + "65": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ธฐ์ˆ 1 ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 65, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 0 + } + ] + }, + "66": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ธฐ์ˆ 2 ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 66, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 0 + } + ] + }, + "67": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€ ์†๋„๋ฅผ", + "์ผ๋ฐ˜ ์กฐ์ค€ ์†๋„ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 67, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Aim Speed", + "orderNumber": 0, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 0 + } + ] + }, + "68": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฃผ๋Š” ํ”ผํ•ด๋ฅผ", + "์ˆœ์ˆ˜ ํ”ผํ•ด๋Ÿ‰ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 68, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Damage Dealt", + "orderNumber": 0, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 0 + } + ] + }, + "69": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ›๋Š” ํ”ผํ•ด๋ฅผ", + "์ˆœ์ˆ˜ ํ”ผํ•ด๋Ÿ‰ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 69, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Damage Received", + "orderNumber": 0, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 0 + } + ] + }, + "70": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง€์ •๋œ ๋ฐฉํ–ฅ์„", + "๋ฐ”๋ผ๋ณด๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 70, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Facing", + "orderNumber": 0, + "path": "/interface/action/child/setFacing.ts", + "indent": 0 + } + ] + }, + "71": { + "contexts": [ + "๊ฒŒ์ž„ ์ž์ฒด์— ์†ํ•œ", + "์ „์—ญ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 71, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 0 + } + ] + }, + "72": { + "contexts": [ + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ์ „์—ญ ๋ณ€์ˆ˜์˜", + "๋ฐฐ์—ด์„ ์ฐพ๊ฑฐ๋‚˜ ์ƒ์„ฑํ•œ ํ›„,", + "๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋ฐฐ์—ด์˜", + "ํŠน์ • ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 72, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "73": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ด๋™ ์ค‘๋ ฅ์„", + "์ผ๋ฐ˜ ์ด๋™ ์ค‘๋ ฅ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 73, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Gravity", + "orderNumber": 0, + "path": "/interface/action/child/setGravity.ts", + "indent": 0 + } + ] + }, + "74": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฃผ๋Š” ์น˜์œ ๋Ÿ‰์„", + "์ˆœ์ˆ˜ ์น˜์œ ๋Ÿ‰ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 74, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 0, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 0 + } + ] + }, + "75": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ›๋Š” ์น˜์œ ๋Ÿ‰์„", + "์ˆœ์ˆ˜ ์น˜์œ ๋Ÿ‰ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 75, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Healing Received", + "orderNumber": 0, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 0 + } + ] + }, + "76": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋‹ค๋ฅธ", + "๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด ๋˜๋Š”", + "์ ์—๊ฒŒ๋งŒ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 76, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Invisible", + "orderNumber": 0, + "path": "/interface/action/child/setInvisible.ts", + "indent": 0 + } + ] + }, + "77": { + "contexts": [ + "(ํ™”๋ฉด ์ƒ๋‹จ์— ํ‘œ์‹œ๋˜๋Š”)", + "ํ˜„์žฌ ๊ฒฝ๊ธฐ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด๋ฅผ ํ†ตํ•ด ๊ฒฝ๊ธฐ ์ง€์†์‹œ๊ฐ„์„", + "์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ์˜์›… ์„ ํƒ ๋˜๋Š”", + "์ค€๋น„ ์‹œ๊ฐ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 77, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Match Time", + "orderNumber": 0, + "path": "/interface/action/child/setMatchTime.ts", + "indent": 0 + } + ] + }, + "78": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ตœ๋Œ€", + "์ƒ๋ช…๋ ฅ์„ ์ˆœ์ˆ˜ ์ƒ๋ช…๋ ฅ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉด", + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ƒ๋ช…๋ ฅ์ด", + "์ƒˆ๋กœ์šด ์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ ์ˆ˜์น˜๋ฅผ", + "๋„˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 78, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Max Health", + "orderNumber": 0, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 0 + } + ] + }, + "79": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ด๋™ ์†๋„๋ฅผ", + "์ˆœ์ˆ˜ ์ด๋™ ์†๋„ ๋Œ€๋น„", + "% ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 79, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Move Speed", + "orderNumber": 0, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 0 + } + ] + }, + "80": { + "contexts": [ + "์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ", + "๋ชฉํ‘œ๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด,", + "ํ™”๋ฉด ์ค‘์•™ ์ƒ๋‹จ์— ํ…์ŠคํŠธ๊ฐ€", + "ํ‘œ์‹œ๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 80, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Objective Description", + "orderNumber": 0, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 0 + } + ] + }, + "81": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”", + "์˜์›… ๋ชฉ๋ก์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์˜์›…์„", + "๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด", + "ํ”Œ๋ ˆ์ด์–ด๋Š” ๊ฐ•์ œ๋กœ", + "๋‹ค๋ฅธ ์˜์›…์„ ์„ ํƒํ•˜์—ฌ", + "์ ์ ˆํ•œ ์ƒ์„ฑ ์ง€์ ์—์„œ ๋ถ€ํ™œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 81, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 0 + } + ] + }, + "82": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜", + "(์ฒ˜์น˜์ˆ˜)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„ ์ „ํˆฌ", + "๋ชจ๋“œ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 82, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Score", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 0 + } + ] + }, + "83": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์—", + "์†ํ•œ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜์—", + "๊ฐ’ ํ•˜๋‚˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 83, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 0 + } + ] + }, + "84": { + "contexts": [ + "ํ•œ ํ”Œ๋ ˆ์ด์–ด์— ์ข…์†๋œ", + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜์˜ ๋ฐฐ์—ด์„", + "์ฐพ๊ฑฐ๋‚˜ ์ƒ์„ฑํ•œ ํ›„,", + "๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋ฐฐ์—ด์˜", + "ํŠน์ • ์ธ๋ฑ์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 84, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable At Index", + "orderNumber": 0, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 0 + } + ] + }, + "85": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ธฐ๋ณธ ๋ฐœ์‚ฌ", + "ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 85, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 0 + } + ] + }, + "86": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ์„", + "์ผ๋ฐ˜ ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ์˜", + "์ง€์ •๋œ ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 86, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Projectile Gravity", + "orderNumber": 0, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 0 + } + ] + }, + "87": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํˆฌ์‚ฌ์ฒด ์†๋„๋ฅผ", + "์ผ๋ฐ˜ ํˆฌ์‚ฌ์ฒด ์†๋„์˜", + "์ง€์ •๋œ ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 87, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Projectile Speed", + "orderNumber": 0, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 0 + } + ] + }, + "88": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์‚ฌ๋ง์—์„œ", + "๋ถ€ํ™œ ์‚ฌ์ด์˜ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜ ์‹คํ–‰ ์‹œ์ ์—์„œ", + "์ด๋ฏธ ์‚ฌ๋งํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฒฝ์šฐ", + "๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋‹ค์Œ", + "์‚ฌ๋ง ์‹œ๋ถ€ํ„ฐ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 88, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Respawn Max Time", + "orderNumber": 0, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 0 + } + ] + }, + "89": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณด์กฐ ๋ฐœ์‚ฌ", + "ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 89, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 0 + } + ] + }, + "90": { + "contexts": [ + "๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด, ํˆฌ์‚ฌ์ฒด,", + "ํšจ๊ณผ, ๊ฒŒ์ž„ ๋ชจ๋“œ ๋กœ์ง ๋“ฑ", + "๊ฒŒ์ž„ ์ „์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜์—ฌ", + "์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋น„์œจ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 90, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Slow Motion", + "orderNumber": 0, + "path": "/interface/action/child/setSlowMotion.ts", + "indent": 0 + } + ] + }, + "91": { + "contexts": [ + "์ง€์ •๋œ ์ƒํƒœ๋ฅผ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์ƒํƒœ๋Š” ์ง€์ •๋œ ์ง€์† ์‹œ๊ฐ„ ๋™์•ˆ,", + "๋˜๋Š” CLEAR STATUS ์•ก์…˜์— ์˜ํ•ด", + "์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 91, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Status", + "orderNumber": 0, + "path": "/interface/action/child/setStatus.ts", + "indent": 0 + } + ] + }, + "92": { + "contexts": [ + "ํ•œ ํŒ€ ๋˜๋Š” ๋‘ ํŒ€", + "๋ชจ๋‘์˜ ์ ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ๊ฐœ๋ณ„", + "์ „ํˆฌ ๋ชจ๋“œ๋‚˜ ํŒ€ ์ ์ˆ˜๊ฐ€", + "์กด์žฌํ•˜์ง€ ์•Š๋Š”", + "๋ชจ๋“œ์—์„œ๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 92, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Team Score", + "orderNumber": 0, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 0 + } + ] + }, + "93": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ถ๊ทน๊ธฐ", + "ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 93, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 0, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 0 + } + ] + }, + "94": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ถ๊ทน๊ธฐ ์ถฉ์ „๋Ÿ‰์„", + "์ตœ๋Œ€ ์ถฉ์ „๋Ÿ‰์˜ ๋น„์œจ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 94, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Charge", + "orderNumber": 0, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 0 + } + ] + }, + "95": { + "contexts": [ + "์•ก์…˜ ๋ชฉ๋ก์— ์žˆ๋Š”", + "์ง€์ •๋œ ์ˆ˜์˜ ์•ก์…˜์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 95, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Skip", + "orderNumber": 0, + "path": "/interface/action/child/skip.ts", + "indent": 0 + } + ] + }, + "96": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์กฐ๊ฑด์ด TRUE์ผ ๋•Œ,", + "์•ก์…˜ ๋ชฉ๋ก์— ์žˆ๋Š” ์ง€์ •๋œ", + "์ˆ˜๋งŒํผ์˜ ์•ก์…˜์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.", + "์ด ์™ธ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ์•ก์…˜์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 96, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Skip If", + "orderNumber": 0, + "path": "/interface/action/child/skipIf.ts", + "indent": 0 + } + ] + }, + "97": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ", + "๋ณด์ด๋„๋ก ์ž‘์€ ๋ฉ”์‹œ์ง€๋ฅผ", + "์กฐ์ค€์„  ์•„๋ž˜์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 97, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 0, + "path": "/interface/action/child/smallMessage.ts", + "indent": 0 + } + ] + }, + "98": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •๋œ ๋ฐฉํ–ฅ์œผ๋กœ", + "๊ฐ€์†ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 98, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Accelerating", + "orderNumber": 0, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 0 + } + ] + }, + "99": { + "contexts": [ + "์นด๋ฉ”๋ผ๊ฐ€ ์ง€์ •๋œ ๋ฐฉํ–ฅ์„", + "๋ฐ”๋ผ๋ณด๋„๋ก ํ•˜์—ฌ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 99, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Camera", + "orderNumber": 0, + "path": "/interface/action/child/startCamera.ts", + "indent": 0 + } + ] + }, + "100": { + "contexts": [ + "DAMAGER๊ฐ€ RECEIVER์—๊ฒŒ", + "์ฃผ๋Š” ํ”ผํ•ด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "์ด DAMAGE MODIFICATION์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST DAMAGE MODIFICATION ID ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.", + "DAMAGE MODIFICATION์ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 100, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Damage Modification", + "orderNumber": 0, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 0 + } + ] + }, + "101": { + "contexts": [ + "DAMAGE OVER TIME (DOT)", + "์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "์ด DOT๋Š” ์ง€์ •๋œ ์ง€์† ์‹œ๊ฐ„ ๋™์•ˆ", + "๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด", + "์ค‘์ง€๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.", + "์ด DAMAGE OVER TIME์—", + "๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์–ป์œผ๋ ค๋ฉด", + "LAST DAMAGE OVER TIME ID", + "๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 101, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 0 + } + ] + }, + "102": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •๋œ", + "๋ฐฉํ–ฅ์„ ํ–ฅํ•ด ํšŒ์ „์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 102, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Facing", + "orderNumber": 0, + "path": "/interface/action/child/startFacing.ts", + "indent": 0 + } + ] + }, + "103": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •๋œ ์˜์›…์„ ๊ฐ•์ œ ์„ ํƒํ•˜๋„๋ก ํ•˜๋ฉฐ,", + "ํ•„์š”์‹œ ํ˜„์žฌ ์œ„์น˜์— ์ฆ‰์‹œ ๋ถ€ํ™œ์‹œํ‚ต๋‹ˆ๋‹ค.", + "์ด ์˜์›…์€ STOP FORCING PLAYER TO BE HERO", + "์•ก์…˜์ด ์‹คํ–‰๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์œ ์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›…์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 103, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 0, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 0 + } + ] + }, + "104": { + "contexts": [ + "์ง€์ •๋œ ๊ฒŒ์ž„ ๋ชจ๋“œ์—์„œ ์›๋ž˜ ์‚ฌ์šฉ๋˜๋Š”", + "์ „ํˆฌ์ค€๋น„์‹ค์ธ์ง€์™€๋Š” ๊ด€๊ณ„์—†์ด,", + "ํŒ€์„ ์ง€์ •๋œ ์ „ํˆฌ์ค€๋น„์‹ค์— ๊ฐ•์ œ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ์ ๋ น, ์ ๋ น/ํ˜ธ์œ„,", + "ํ˜ธ์œ„ ์ „์žฅ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 104, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 0, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 0 + } + ] + }, + "105": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ตœ๋Œ€ ๋ฐ", + "์ตœ์†Œ ์ด๋™ ์ˆ˜์น˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.", + "๊ฐ•์ œ ์ด๋™๋˜๊ฑฐ๋‚˜ ์ด๋™์ด", + "์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 105, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Forcing Throttle", + "orderNumber": 0, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 0 + } + ] + }, + "106": { + "contexts": [ + "HEAL OVER TIME ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.", + "์ด HEAL OVER TIME์€ ์ง€์ •๋œ ์ง€์† ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•˜๊ฑฐ๋‚˜", + "์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์ค‘์ง€๋˜๊ธฐ ์ „๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.", + "์ด HEAL OVER TIME์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด", + "LAST HEAL OVER TIME ID ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 106, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 0 + } + ] + }, + "107": { + "contexts": [ + "STOP HOLDING BUTTON", + "์•ก์…˜์— ์˜ํ•ด ์ค‘์ง€๋˜๊ธฐ ์ „๊นŒ์ง€", + "๊ฐ€์ƒ์œผ๋กœ ๋ฒ„ํŠผํ•˜๋‚˜๋ฅผ ๋ˆ„๋ฅด๋„๋ก", + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 107, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Start Holding Button", + "orderNumber": 0, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 0 + } + ] + }, + "108": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ", + "START ACCELERATING", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ", + "๊ฐ€์†์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 108, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Accelerating", + "orderNumber": 0, + "path": "/interface/action/child/stopAccelerating.ts", + "indent": 0 + } + ] + }, + "109": { + "contexts": [ + "START DAMAGE MODIFICATION ์•ก์…˜์œผ๋กœ", + "์‹œ์ž‘๋œ ๋ชจ๋“  DAMAGE MODIFCATION์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 109, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Damage Modifications", + "orderNumber": 0, + "path": "/interface/action/child/stopAllDamageModifications.ts", + "indent": 0 + } + ] + }, + "110": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ", + "START DAMAGE OVER TIME", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ ๋ชจ๋“ ", + "DAMAGE OVER TIME์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 110, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopAllDamageOverTime.ts", + "indent": 0 + } + ] + }, + "111": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ", + "START HEAL OVER TIME", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ ๋ชจ๋“ ", + "HEAL OVER TIME์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 111, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop All Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopAllHealOverTime.ts", + "indent": 0 + } + ] + }, + "112": { + "contexts": [ + "START CAMERA ๋˜๋Š” ํ•œ๋ช… ์ด์ƒ์˜ ํ”Œ๋ ˆ์ด์–ด๋“ค์˜", + "๋ชจ๋“  ์ด๋™ ์ค‘์ธ ์นด๋ฉ”๋ผ ์œ„์น˜๋ฅผ ์ •์ง€์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 112, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Camera", + "orderNumber": 0, + "path": "/interface/action/child/stopCamera.ts", + "indent": 0 + } + ] + }, + "113": { + "contexts": [ + "์ง„ํ–‰ ์ค‘์ธ ์ „์—ญ ๋ณ€์ˆ˜ ์ถ”์ ์„ ์ค‘์ง€ํ•˜๊ณ ", + "ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 113, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Chasing Global Variable", + "orderNumber": 0, + "path": "/interface/action/child/stopChasingGlobalVariable.ts", + "indent": 0 + } + ] + }, + "114": { + "contexts": [ + "์ง„ํ–‰ ์ค‘์ธ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ์ถ”์ ์„ ์ค‘์ง€ํ•˜๊ณ ", + "ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 114, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 0, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 0 + } + ] + }, + "115": { + "contexts": [ + "START DAMAGE MODIFICATION ์•ก์…˜์œผ๋กœ", + "์‹œ์ž‘๋œ DAMAGE MODIFICATION ํ•˜๋‚˜๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 115, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Damage Modification", + "orderNumber": 0, + "path": "/interface/action/child/stopDamageModification.ts", + "indent": 0 + } + ] + }, + "116": { + "contexts": [ + "START DAMAGE OVER TIME ์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ", + "DAMAGE OVER TIME ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 116, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Damage Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopDamageOverTime.ts", + "indent": 0 + } + ] + }, + "117": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด START FACING", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ ํšŒ์ „์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 117, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Facing", + "orderNumber": 0, + "path": "/interface/action/child/stopFacing.ts", + "indent": 0 + } + ] + }, + "118": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์ง€์ •๋œ ์˜์›…", + "๊ฐ•์ œ ์„ ํƒ ์ง€์ •์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "์ด๋ฅผ ํ†ตํ•ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ถ€ํ™œํ•˜์ง€๋Š” ์•Š์ง€๋งŒ,", + "์ดํ›„๋ถ€ํ„ฐ ์˜์›… ์„ ํƒ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 118, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Player To Be Hero", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingPlayerToBeHero.ts", + "indent": 0 + } + ] + }, + "119": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์— ๋Œ€ํ•œ", + "START FORCING SPAWN ROOM", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 119, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Spawn Room", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingSpawnRoom.ts", + "indent": 0 + } + ] + }, + "120": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด", + "START FORCING THROTTLE", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 120, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Forcing Throttle", + "orderNumber": 0, + "path": "/interface/action/child/stopForcingThrottle.ts", + "indent": 0 + } + ] + }, + "121": { + "contexts": [ + "START HEAL OVER TIME", + "์•ก์…˜์— ์˜ํ•ด ์‹œ์ž‘๋œ", + "HEAL OVER TIME", + "์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 121, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Heal Over Time", + "orderNumber": 0, + "path": "/interface/action/child/stopHealOverTime.ts", + "indent": 0 + } + ] + }, + "122": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ", + "START HOLDING BUTTON", + "์•ก์…˜์˜ ํšจ๊ณผ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 122, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Stop Holding Button", + "orderNumber": 0, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 0 + } + ] + }, + "123": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ • ์œ„์น˜๋กœ", + "์ˆœ๊ฐ„์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 123, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Teleport", + "orderNumber": 0, + "path": "/interface/action/child/teleport.ts", + "indent": 0 + } + ] + }, + "124": { + "contexts": [ + "์ผ์‹œ์ •์ง€๋œ ๊ฒฝ๊ธฐ์‹œ๊ฐ„์„ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 124, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Unpause Match Time", + "orderNumber": 0, + "path": "/interface/action/child/unpauseMatchTime.ts", + "indent": 0 + } + ] + }, + "125": { + "contexts": [ + "์•ก์…˜ ๋ชฉ๋ก ์‹คํ–‰์„ ์ผ์‹œ์ •์ง€ํ•ฉ๋‹ˆ๋‹ค.", + "WAIT์ด ์ค‘์ง€๋˜์ง€ ์•Š๋Š” ํ•œ,", + "๋‚˜๋จธ์ง€ ์•ก์…˜์€ ์ผ์‹œ์ •์ง€ ํ•ด์ œ ํ›„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IAction", + "orderNumber": 125, + "path": "/interface/action/action.ts", + "indent": 4 + }, + { + "topName": "Wait", + "orderNumber": 0, + "path": "/interface/action/child/wait.ts", + "indent": 0 + } + ] + }, + "126": { + "contexts": [ + "์‹คํ–‰ ์ค‘์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Abort If", + "orderNumber": 1, + "path": "/interface/action/child/abortIf.ts", + "indent": 4 + } + ] + }, + "127": { + "contexts": [ + "๋ฒ„ํŠผ์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Allow Button", + "orderNumber": 1, + "path": "/interface/action/child/allowButton.ts", + "indent": 4 + } + ] + }, + "128": { + "contexts": [ + "๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Allow Button", + "orderNumber": 2, + "path": "/interface/action/child/allowButton.ts", + "indent": 4 + } + ] + }, + "129": { + "contexts": [ + "์†๋„๋ฅผ ๋ณ€๊ฒฝํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 1, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "130": { + "contexts": [ + "์ถฉ๊ฒฉ๋Ÿ‰์„ ์ ์šฉํ•  ๋‹จ์œ„ ๋ฐฉํ•ญ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 2, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "131": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•œ ์†๋„ ๋ณ€๊ฒฝ์˜ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 3, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "132": { + "contexts": [ + "๋ฐฉํ–ฅ์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์›”๋“œ ์ขŒํ‘œ ๋˜๋Š”", + "๋กœ์ปฌ ์ขŒํ‘œ ์ค‘ ์–ด๋А ์ชฝ์— ๋Œ€ํ•ด", + "์ƒ๋Œ€์ ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 4, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "133": { + "contexts": [ + "์ถฉ๊ฒฉ๋Ÿ‰์„ ์ ์šฉํ•˜๊ธฐ ์ „์— DIRECTION๊ณผ", + "๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์ธ ๊ธฐ์กด์˜ ์†๋„๋ฅผ", + "์ƒ์‡„ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Apply Impluse", + "orderNumber": 5, + "path": "/interface/action/child/applyImpluse.ts", + "indent": 4 + } + ] + }, + "134": { + "contexts": [ + "ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Big Message", + "orderNumber": 1, + "path": "/interface/action/child/bigMessage.ts", + "indent": 4 + } + ] + }, + "135": { + "contexts": [ + "ํ‘œ์‹œํ•  ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Big Message", + "orderNumber": 2, + "path": "/interface/action/child/bigMessage.ts", + "indent": 4 + }, + { + "topName": "Set Objective Description", + "orderNumber": 1, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 2, + "path": "/interface/action/child/smallMessage.ts", + "indent": 4 + } + ] + }, + "136": { + "contexts": [ + "์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•  ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 1, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 1, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + } + ] + }, + "137": { + "contexts": [ + "์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ ๋„๋‹ฌํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์˜ ์œ ํ˜•์€ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "์ถ”์  ์‹œ์ž‘ ์ „ ๊ธฐ์กด ๋ณ€์ˆ˜ ๊ฐ’์˜ ์œ ํ˜•์ด ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 2, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 2, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + } + ] + }, + "138": { + "contexts": [ + "๋ณ€์ˆ˜๊ฐ’์˜ ์ดˆ๋‹น ๋ณ€ํ™”๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 3, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 1, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + } + ] + }, + "139": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘ ์–ด๋–ค ํ•ญ๋ชฉ์„", + "์ง€์†์ ์œผ๋กœ ์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ์•ก์…˜์€ ์ž…๋ ฅ ์ •๋ณด์˜ ์ƒˆ๋กœ์šด ๊ฐ’์„", + "๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ, ์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable At Rate", + "orderNumber": 4, + "path": "/interface/action/child/chaseGlobalVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 3, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 2, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 4, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Create Effect", + "orderNumber": 1, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + }, + { + "topName": "Create Hud Text", + "orderNumber": 1, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + }, + { + "topName": "Create Icon", + "orderNumber": 1, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "140": { + "contexts": [ + "ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ’์ด ๋ชฉํ‘œ์น˜์—", + "๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Global Variable Over Time", + "orderNumber": 4, + "path": "/interface/action/child/chaseGlobalVariableOverTime.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 3, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "141": { + "contexts": [ + "์ ์ง„์ ์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 3, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 1, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "142": { + "contexts": [ + "์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 4, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + } + ] + }, + "143": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ ๋„๋‹ฌํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์˜ ์œ ํ˜•์€ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "์ถ”์  ์‹œ์ž‘ ์ „ ๊ธฐ์กด ๋ณ€์ˆ˜ ๊ฐ’์˜ ์œ ํ˜•์ด ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable At Rate", + "orderNumber": 5, + "path": "/interface/action/child/chasePlayerVariableAtRate.ts", + "indent": 4 + }, + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 2, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "144": { + "contexts": [ + "์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Chase Player Variable Over Time", + "orderNumber": 5, + "path": "/interface/action/child/chasePlayerVariableOverTime.ts", + "indent": 4 + } + ] + }, + "145": { + "contexts": [ + "์ƒํƒœ๋ฅผ ์ œ๊ฑฐํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Clear Status", + "orderNumber": 1, + "path": "/interface/action/child/clearStatus.ts", + "indent": 4 + } + ] + }, + "146": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ์„œ ์ œ๊ฑฐํ•  ์ƒํƒœ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Clear Status", + "orderNumber": 2, + "path": "/interface/action/child/clearStatus.ts", + "indent": 4 + } + ] + }, + "147": { + "contexts": [ + "์˜์‚ฌ์†Œํ†ต์„ ์‹คํ–‰ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Communicate", + "orderNumber": 1, + "path": "/interface/action/child/communicate.ts", + "indent": 4 + } + ] + }, + "148": { + "contexts": [ + "์˜์‚ฌ์†Œํ†ต ์œ ํ˜•์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Communicate", + "orderNumber": 2, + "path": "/interface/action/child/communicate.ts", + "indent": 4 + } + ] + }, + "149": { + "contexts": [ + "ํ•ด๋‹น ํšจ๊ณผ๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 2, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + }, + { + "topName": "Play Effect", + "orderNumber": 1, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "150": { + "contexts": [ + "์ƒ์„ฑํ•  ํšจ๊ณผ์˜ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 3, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "151": { + "contexts": [ + "์ƒ์„ฑ๋  ํšจ๊ณผ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.", + "ํšจ๊ณผ์Œ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 4, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "152": { + "contexts": [ + "ํšจ๊ณผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํšจ๊ณผ๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๊ณ ,", + "๊ทธ ์ด์™ธ์— ๊ฒฝ์šฐ ์ด ๊ฐ’์€", + "์›”๋“œ ๋‚ด์˜ ์œ„์น˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 5, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "153": { + "contexts": [ + "ํšจ๊ณผ ๋ฐ˜๊ฒฝ(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "ํšจ๊ณผ์Œ์€ ์Œ๋Ÿ‰์ด ๋Œ€์‹  ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Effect", + "orderNumber": 6, + "path": "/interface/action/child/createEffect.ts", + "indent": 4 + } + ] + }, + "154": { + "contexts": [ + "ํ•ด๋‹น HUD ํ…์ŠคํŠธ๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 2, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "155": { + "contexts": [ + "ํ‘œ์‹œํ•  ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. (๋น„์›Œ๋‘๊ธฐ ๊ฐ€๋Šฅ)" + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 3, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "156": { + "contexts": [ + "ํ‘œ์‹œํ•  ๋ถ€์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. (๋น„์›Œ๋‘๊ธฐ ๊ฐ€๋Šฅ)" + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 4, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "157": { + "contexts": [ + "ํ‘œ์‹œํ•  ๋ณธ๋ฌธ์ž…๋‹ˆ๋‹ค. (๋น„์›Œ๋‘๊ธฐ ๊ฐ€๋Šฅ)" + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 5, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "158": { + "contexts": [ + "ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•  ํ™”๋ฉด ์ƒ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 6, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "159": { + "contexts": [ + "๋™์ผํ•œ ์œ„์น˜์— ์žˆ๋Š” ๋‹ค๋ฅธ", + "ํ…์ŠคํŠธ์™€์˜ ์ •๋ ฌ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค.", + "์ •๋ ฌ ์ˆœ์„œ ์ƒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€", + "ํ…์ŠคํŠธ๋Š” ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„์˜", + "ํ…์ŠคํŠธ ๋‹ค์Œ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 7, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "160": { + "contexts": [ + "์ƒ์„ฑ๋  HEADER ํ…์ŠคํŠธ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 8, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "161": { + "contexts": [ + "์ƒ์„ฑ๋  SUBHEADER ํ…์ŠคํŠธ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 9, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "162": { + "contexts": [ + "์ƒ์„ฑ๋  ํ…์ŠคํŠธ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Hud Text", + "orderNumber": 10, + "path": "/interface/action/child/createHudText.ts", + "indent": 4 + } + ] + }, + "163": { + "contexts": [ + "์•„์ด์ฝ˜์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 2, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "164": { + "contexts": [ + "์•„์ด์ฝ˜์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํšจ๊ณผ๋Š” ์ง€์ •๋œ", + "ํ”Œ๋ ˆ์ด์–ด ๋จธ๋ฆฌ ์œ„์— ํ‘œ์‹œ๋˜๊ณ ,", + "๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ ์ด ๊ฐ’์€", + "์›”๋“œ ๋‚ด์˜ ์œ„์น˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 3, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "165": { + "contexts": [ + "์ƒ์„ฑํ•  ์•„์ด์ฝ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 4, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "166": { + "contexts": [ + "์ƒ์„ฑ๋  ์•„์ด์ฝ˜์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ ์ธ์ง€", + "์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 5, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "167": { + "contexts": [ + "์ด ์•„์ด์ฝ˜์ด", + "ํ”Œ๋ ˆ์ด์–ด ๋’ค์— ์žˆ์–ด๋„", + "ํ‘œ์‹œ๋˜๋„๋ก ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?" + ], + "usedFiles": [ + { + "topName": "Create Icon", + "orderNumber": 6, + "path": "/interface/action/child/createIcon.ts", + "indent": 4 + } + ] + }, + "168": { + "contexts": [ + "์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 1, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "169": { + "contexts": [ + "ํ‘œ์‹œํ•  ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 2, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "170": { + "contexts": [ + "ํ…์ŠคํŠธ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํ…์ŠคํŠธ๋Š” ์ง€์ •๋œ", + "ํ”Œ๋ ˆ์ด์–ด ๋จธ๋ฆฌ ์œ„์— ํ‘œ์‹œ๋˜๊ณ ,", + "๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ ์ด ๊ฐ’์€", + "์›”๋“œ ๋‚ด์˜ ์œ„์น˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 3, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "171": { + "contexts": [ + "ํ…์ŠคํŠธ์˜ ๋ฐฐ์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 4, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "172": { + "contexts": [ + "ํ•ด๋‹น ํ…์ŠคํŠธ๊ฐ€ ๋ฒฝ์„ ๋šซ๊ณ  ๋ณด์ผ์ง€, ์•„๋‹ˆ๋ฉด ๊ฐ€๋ ค์งˆ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 5, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "173": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘ ์–ด๋–ค ํ•ญ๋ชฉ์„", + "์ง€์†์ ์œผ๋กœ ์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ํ…์ŠคํŠธ๋Š” ์ž…๋ ฅ ์ •๋ณด์˜ ์ƒˆ๋กœ์šด ๊ฐ’์„", + "๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ, ์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Create In World Text", + "orderNumber": 6, + "path": "/interface/action/child/createInWorldText.ts", + "indent": 4 + } + ] + }, + "174": { + "contexts": [ + "ํ”ผํ•ด๋ฅผ ๋ฐ›๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 1, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "175": { + "contexts": [ + "ํ”ผํ•ด๋ฅผ ์ฃผ๋Š” ํ–‰๋™์„ ํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "DAMAGER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 2, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "176": { + "contexts": [ + "์ ์šฉํ•  ํ”ผํ•ด๋Ÿ‰์ž…๋‹ˆ๋‹ค.", + "์ด ํ”ผํ•ด๋Ÿ‰์€ ๊ฐ•ํ™” ํšจ๊ณผ,", + "์•ฝํ™” ํšจ๊ณผ, ๋ฐฉ์–ด๋ ฅ์—", + "์˜ํ•ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Damage", + "orderNumber": 3, + "path": "/interface/action/child/damage.ts", + "indent": 4 + } + ] + }, + "177": { + "contexts": [ + "์ด๊ธด ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Declare Player Victory", + "orderNumber": 1, + "path": "/interface/action/child/declarePlayerVictory.ts", + "indent": 4 + } + ] + }, + "178": { + "contexts": [ + "๋ผ์šด๋“œ์—์„œ ์Šน๋ฆฌํ•œ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Declare Round Victory", + "orderNumber": 1, + "path": "/interface/action/child/declareRoundVictory.ts", + "indent": 4 + } + ] + }, + "179": { + "contexts": [ + "์ด๊ธด ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Declare Team Victory", + "orderNumber": 1, + "path": "/interface/action/child/declareTeamVictory.ts", + "indent": 4 + } + ] + }, + "180": { + "contexts": [ + "์ œ๊ฑฐํ•  ํšจ๊ณผ ๊ฐœ์ฒด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ์ฒด๋Š”", + "LAST CREATED ENTITY ๋˜๋Š”", + "์˜ˆ์ „์— LAST CREATED ENTITY", + "๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Effect", + "orderNumber": 1, + "path": "/interface/action/child/destroyEffect.ts", + "indent": 4 + } + ] + }, + "181": { + "contexts": [ + "์ œ๊ฑฐํ•  HUD ํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ID๋Š”", + "LAST TEXT ID ๋˜๋Š” ์˜ˆ์ „์—", + "LAST TEXT ID๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Hud Text", + "orderNumber": 1, + "path": "/interface/action/child/destroyHudText.ts", + "indent": 4 + } + ] + }, + "182": { + "contexts": [ + "์ œ๊ฑฐํ•  ์•„์ด์ฝ˜ ๊ฐœ์ฒด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ์ฒด๋Š”", + "LAST CREATED ENTITY ๋˜๋Š”", + "์˜ˆ์ „์— LAST CREATED ENTITY", + "๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy Icon", + "orderNumber": 1, + "path": "/interface/action/child/destroyIcon.ts", + "indent": 4 + } + ] + }, + "183": { + "contexts": [ + "์ œ๊ฑฐํ•  ์›”๋“œ ๋‚ด ํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ID๋Š”", + "LAST TEXT ID ๋˜๋Š” ์˜ˆ์ „์—", + "LAST TEXT ID๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Destroy In World Text", + "orderNumber": 1, + "path": "/interface/action/child/destroyInWorldText.ts", + "indent": 4 + } + ] + }, + "184": { + "contexts": [ + "๋ถ€ํ™œ ์„ค์ •์˜ ์˜ํ–ฅ์„", + "๋ฐ›๊ฒŒ ๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disable Built In Game Mode Respawning", + "orderNumber": 1, + "path": "/interface/action/child/disableBuiltInGameModeRespawning.ts", + "indent": 4 + }, + { + "topName": "Enable Built In Game Mode Respawning", + "orderNumber": 1, + "path": "/interface/action/child/enableBuiltInGameModeRespawning.ts", + "indent": 4 + } + ] + }, + "185": { + "contexts": [ + "์‚ฌ๋ง ํ›„ ๊ด€์ „ ์„ค์ • ๊ธฐ๋ณธ๊ฐ’์„", + "๋ณต์›ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disable Death Spectate All Players", + "orderNumber": 1, + "path": "/interface/action/child/disableDeathSpectateAllPlayers.ts", + "indent": 4 + } + ] + }, + "186": { + "contexts": [ + "์‚ฌ๋ง ํ›„ ๊ด€์ „ ์‹œ ์ž์‹ ์˜ HUD๋ฅผ", + "๋‹ค์‹œ ๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disable Death Spectate Target Hud", + "orderNumber": 1, + "path": "/interface/action/child/disableDeathSpectateTargetHud.ts", + "indent": 4 + } + ] + }, + "187": { + "contexts": [ + "๋ฒ„ํŠผ์„ ์‚ฌ์šฉ ๋ชป ํ•˜๊ฒŒ", + "ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disallow Button", + "orderNumber": 1, + "path": "/interface/action/child/disallowButton.ts", + "indent": 4 + } + ] + }, + "188": { + "contexts": [ + "์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ", + "๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Disallow Button", + "orderNumber": 2, + "path": "/interface/action/child/disallowButton.ts", + "indent": 4 + } + ] + }, + "189": { + "contexts": [ + "๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ", + "๊ด€์ „ํ•  ์ˆ˜ ์žˆ๋„๋ก", + "ํ—ˆ์šฉ๋œ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Enable Death Spectate All Players", + "orderNumber": 1, + "path": "/interface/action/child/enableDeathSpectateAllPlayers.ts", + "indent": 4 + } + ] + }, + "190": { + "contexts": [ + "์‚ฌ๋ง ํ›„ ๊ด€์ „ ์‹œ", + "๋Œ€์ƒ์˜ ๊ด€์ „ ๋Œ€์ƒ์˜", + "HUD๋ฅผ ๋ณด๊ฒŒ ๋ ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Enable Death Spectate Target Hud", + "orderNumber": 1, + "path": "/interface/action/child/enableDeathSpectateTargetHud.ts", + "indent": 4 + } + ] + }, + "191": { + "contexts": [ + "์ƒ๋ช…๋ ฅ์„ ํšŒ๋ณตํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 1, + "path": "/interface/action/child/heal.ts", + "indent": 4 + } + ] + }, + "192": { + "contexts": [ + "์น˜์œ  ํ–‰๋™์„ ํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "HEALER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 2, + "path": "/interface/action/child/heal.ts", + "indent": 4 + }, + { + "topName": "Start Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "193": { + "contexts": [ + "์ ์šฉํ•  ์น˜์œ ๋Ÿ‰์ž…๋‹ˆ๋‹ค.", + "์ด ์น˜์œ ๋Ÿ‰์€ ๊ฐ•ํ™” ํšจ๊ณผ,", + "์•ฝํ™” ํšจ๊ณผ ๋“ฑ์— ์˜ํ•ด", + "๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "์น˜์œ ๋Ÿ‰ ์ตœ๋Œ€์น˜๋Š”", + "๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜", + "์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Heal", + "orderNumber": 3, + "path": "/interface/action/child/heal.ts", + "indent": 4 + } + ] + }, + "194": { + "contexts": [ + "์ฒ˜์น˜๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Kill", + "orderNumber": 1, + "path": "/interface/action/child/kill.ts", + "indent": 4 + } + ] + }, + "195": { + "contexts": [ + "์ฒ˜์น˜๋ฅผ ๊ธฐ๋กํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "KILLER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Kill", + "orderNumber": 2, + "path": "/interface/action/child/kill.ts", + "indent": 4 + } + ] + }, + "196": { + "contexts": [ + "๋ฐ˜๋ณต ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Loop If", + "orderNumber": 1, + "path": "/interface/action/child/loopIf.ts", + "indent": 4 + } + ] + }, + "197": { + "contexts": [ + "์ˆ˜์ •ํ•  ์ „์—ญ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "198": { + "contexts": [ + "๋ณ€์ˆ˜๊ฐ’์˜ ๋ณ€๊ฒฝ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.", + "์ผ๋ฐ˜์ ์ธ ์‚ฌ์น™์—ฐ์‚ฐ,", + "๊ทธ๋ฆฌ๊ณ  ๊ฐ’์˜ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ", + "ARRAY ์—ฐ์‚ฐ ๋“ฑ์˜ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 2, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "199": { + "contexts": [ + "์ˆ˜์ •์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์‚ฐ์ˆ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€", + "๋‘ ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ๋‘ ๋ฒˆ์งธ๋กœ,", + "๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ๋ณ€์ˆ˜์˜", + "ํ˜„์žฌ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.", + "๋ฐฐ์—ด ์—ฐ์‚ฐ์—์„œ๋Š”", + "์ด ๊ฐ’์„ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable", + "orderNumber": 3, + "path": "/interface/action/child/modifyGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Modify Global Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "200": { + "contexts": [ + "์ˆ˜์ •ํ•  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.", + "์ธ๋ฑ์Šค๊ฐ€ ๋ฐฐ์—ด์˜ ๋์„ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ๋ฐฐ์—ด์ด ํ™•์žฅ๋˜๋ฉฐ", + "์ƒˆ ์š”์†Œ๋Š” 0์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Global Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/modifyGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Modify Player Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Set Global Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable At Index", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "201": { + "contexts": [ + "์ ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Score", + "orderNumber": 1, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 4 + } + ] + }, + "202": { + "contexts": [ + "์ ์ˆ˜ ์ฆ๊ฐ๋Ÿ‰์ž…๋‹ˆ๋‹ค.", + "์–‘์ˆ˜์ธ ๊ฒฝ์šฐ ์ ์ˆ˜๊ฐ€ ์˜ค๋ฅด๊ณ ", + "์Œ์ˆ˜์ธ ๊ฒฝ์šฐ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Score", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerScore.ts", + "indent": 4 + }, + { + "topName": "Modify Team Score", + "orderNumber": 1, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 4 + } + ] + }, + "203": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "204": { + "contexts": [ + "์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 3, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "205": { + "contexts": [ + "์ˆ˜์ •์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์‚ฌ์น™์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€", + "๋‘ ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ๋‘ ๋ฒˆ์งธ๋กœ,", + "๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ๋ณ€์ˆ˜์˜", + "ํ˜„์žฌ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.", + "๋ฐฐ์—ด ์—ฐ์‚ฐ์—์„œ๋Š”", + "์ด ๊ฐ’์„ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable", + "orderNumber": 4, + "path": "/interface/action/child/modifyPlayerVariable.ts", + "indent": 4 + } + ] + }, + "206": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "207": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Player Variable At Index", + "orderNumber": 5, + "path": "/interface/action/child/modifyPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "208": { + "contexts": [ + "์ ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Modify Team Score", + "orderNumber": 2, + "path": "/interface/action/child/modifyTeamScore.ts", + "indent": 4 + } + ] + }, + "209": { + "contexts": [ + "์ƒ์„ฑํ•  ํšจ๊ณผ์˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 2, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "210": { + "contexts": [ + "์ƒ์„ฑ๋  ํšจ๊ณผ์˜ ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค.", + "ํŠน์ • ํŒ€์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ํŒ€์ด ๋ณด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ", + "์ ์ธ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ", + "๋นจ๊ฐ• ๋˜๋Š” ํŒŒ๋ž‘์œผ๋กœ", + "ํšจ๊ณผ ์ƒ‰์ƒ์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 3, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "211": { + "contexts": [ + "ํšจ๊ณผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์ด ํ”Œ๋ ˆ์ด์–ด์ธ ๊ฒฝ์šฐ", + "ํ•ด๋‹น ํšจ๊ณผ๋Š” ํ”Œ๋ ˆ์ด์–ด", + "์œ„์น˜์—์„œ ๋ฐœ์ƒํ•˜๊ณ ,", + "๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ ์ด ๊ฐ’์€", + "์›”๋“œ ์ขŒํ‘œ๋กœ์„œ ํ•ด์„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 4, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "212": { + "contexts": [ + "ํšจ๊ณผ ๋ฐ˜๊ฒฝ(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Play Effect", + "orderNumber": 5, + "path": "/interface/action/child/playEffect.ts", + "indent": 4 + } + ] + }, + "213": { + "contexts": [ + "์˜์›…์„ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด ๋‹น ํ•œ ๋ฒˆ์— ๋‹จ ํ•œ ๊ฐœ์˜", + "PRELOAD HERO ์•ก์…˜๋งŒ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Preload Hero", + "orderNumber": 1, + "path": "/interface/action/child/preloadHero.ts", + "indent": 4 + } + ] + }, + "214": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ฌ ์˜์›…์ž…๋‹ˆ๋‹ค.", + "๋ฐฐ์—ด์— ์—ฌ๋Ÿฌ ์˜์›…์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ,", + "๋ฐฐ์—ด ์ดˆ๋ฐ˜์— ์ง€์ •๋œ ์˜์›…์ผ์ˆ˜๋ก", + "์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Preload Hero", + "orderNumber": 2, + "path": "/interface/action/child/preloadHero.ts", + "indent": 4 + } + ] + }, + "215": { + "contexts": [ + "๊ฐ€์ƒ ๋ฒ„ํŠผ ์ž…๋ ฅ์„", + "๊ฐ•์ œํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Press Button", + "orderNumber": 1, + "path": "/interface/action/child/pressButton.ts", + "indent": 4 + } + ] + }, + "216": { + "contexts": [ + "๋ˆ„๋ฅผ ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Press Button", + "orderNumber": 2, + "path": "/interface/action/child/pressButton.ts", + "indent": 4 + } + ] + }, + "217": { + "contexts": [ + "์˜์›… ๋ชฉ๋ก์„ ์ดˆ๊ธฐํ™”ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Reset Player Hero Availability", + "orderNumber": 1, + "path": "/interface/action/child/resetPlayerHeroAvailability.ts", + "indent": 4 + } + ] + }, + "218": { + "contexts": [ + "๋ถ€ํ™œ์‹œํ‚ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Respawn", + "orderNumber": 1, + "path": "/interface/action/child/respawn.ts", + "indent": 4 + } + ] + }, + "219": { + "contexts": [ + "๋ถ€ํ™œํ•˜๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Resurrect", + "orderNumber": 1, + "path": "/interface/action/child/resurrect.ts", + "indent": 4 + } + ] + }, + "220": { + "contexts": [ + "๊ธฐ์ˆ  1 ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 4 + } + ] + }, + "221": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ์ˆ  1์„", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ability 1 Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setAbility1Enabled.ts", + "indent": 4 + } + ] + }, + "222": { + "contexts": [ + "๊ธฐ์ˆ  2 ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 4 + } + ] + }, + "223": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ์ˆ  2์„", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ability 2 Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setAbility2Enabled.ts", + "indent": 4 + } + ] + }, + "224": { + "contexts": [ + "์กฐ์ค€ ์†๋„๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Aim Speed", + "orderNumber": 1, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 4 + } + ] + }, + "225": { + "contexts": [ + "์ผ๋ฐ˜ ์กฐ์ค€ ์†๋„์— ๋น„๋ก€ํ•˜๋„๋ก", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€ ์†๋„์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Aim Speed", + "orderNumber": 2, + "path": "/interface/action/child/setAimSpeed.ts", + "indent": 4 + } + ] + }, + "226": { + "contexts": [ + "์ฃผ๋Š” ํ”ผํ•ด๋Ÿ‰์„ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Damage Dealt", + "orderNumber": 1, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 4 + } + ] + }, + "227": { + "contexts": [ + "์ˆœ์ˆ˜ ํ”ผํ•ด๋Ÿ‰์— ๋น„๋ก€ํ•˜๋„๋ก", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜", + "์ฃผ๋Š” ํ”ผํ•ด๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Damage Dealt", + "orderNumber": 2, + "path": "/interface/action/child/setDamageDealt.ts", + "indent": 4 + } + ] + }, + "228": { + "contexts": [ + "๋ฐ›๋Š” ํ”ผํ•ด๋Ÿ‰์„ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Damage Received", + "orderNumber": 1, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 4 + } + ] + }, + "229": { + "contexts": [ + "์ˆœ์ˆ˜ ํ”ผํ•ด๋Ÿ‰์— ๋น„๋ก€ํ•˜๋„๋ก", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜", + "๋ฐ›๋Š” ํ”ผํ•ด๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Damage Received", + "orderNumber": 2, + "path": "/interface/action/child/setDamageReceived.ts", + "indent": 4 + } + ] + }, + "230": { + "contexts": [ + "๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Facing", + "orderNumber": 1, + "path": "/interface/action/child/setFacing.ts", + "indent": 4 + } + ] + }, + "231": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๊ฒŒ", + "๋˜๋Š” ๋‹จ์œ„ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Facing", + "orderNumber": 2, + "path": "/interface/action/child/setFacing.ts", + "indent": 4 + } + ] + }, + "232": { + "contexts": [ + "์–ด๋А ์ „์—ญ ๋ณ€์ˆ˜์—", + "๊ฐ’์„ ์ €์žฅํ• ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 4 + } + ] + }, + "233": { + "contexts": [ + "์ €์žฅํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Global Variable", + "orderNumber": 2, + "path": "/interface/action/child/setGlobalVariable.ts", + "indent": 4 + }, + { + "topName": "Set Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "234": { + "contexts": [ + "์–ด๋–ค ์ „์—ฐ ๋ณ€์ˆ˜ ๊ฐ’์ด", + "์ˆ˜์ •ํ•  ๋ฐฐ์—ด์ธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "๋ณ€์ˆ˜๊ฐ’์ด ๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ๊ฐ’์€ ๋นˆ ๋ฐฐ์—ด์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Global Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "235": { + "contexts": [ + "ARRAY์— ์ €์žฅํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Global Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/setGlobalVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "236": { + "contexts": [ + "์ด๋™ ์ค‘๋ ฅ์„ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Gravity", + "orderNumber": 1, + "path": "/interface/action/child/setGravity.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 1, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 4 + } + ] + }, + "237": { + "contexts": [ + "์ผ๋ฐ˜ ์ด๋™ ์ค‘๋ ฅ์— ๋น„๋ก€ํ•˜๋„๋ก", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์˜", + "๊ฐœ์ธ ์ด๋™ ์ค‘๋ ฅ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Gravity", + "orderNumber": 2, + "path": "/interface/action/child/setGravity.ts", + "indent": 4 + }, + { + "topName": "Set Healing Dealt", + "orderNumber": 2, + "path": "/interface/action/child/setHealingDealt.ts", + "indent": 4 + } + ] + }, + "238": { + "contexts": [ + "๋ฐ›๋Š” ์น˜์œ ๋Ÿ‰์„ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Healing Received", + "orderNumber": 1, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 4 + } + ] + }, + "239": { + "contexts": [ + "๋ฐ›๋Š” ์ˆœ์ˆ˜ ์น˜์œ ๋Ÿ‰์—", + "๋น„๋ก€ํ•˜๋„๋ก ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐ›๋Š”", + "์น˜์œ ๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Healing Received", + "orderNumber": 2, + "path": "/interface/action/child/setHealingReceived.ts", + "indent": 4 + } + ] + }, + "240": { + "contexts": [ + "๋ณด์ด์ง€ ์•Š๊ฒŒ ๋ ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Invisible", + "orderNumber": 1, + "path": "/interface/action/child/setInvisible.ts", + "indent": 4 + } + ] + }, + "241": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ• ", + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Invisible", + "orderNumber": 2, + "path": "/interface/action/child/setInvisible.ts", + "indent": 4 + } + ] + }, + "242": { + "contexts": [ + "๊ฒฝ๊ธฐ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Match Time", + "orderNumber": 1, + "path": "/interface/action/child/setMatchTime.ts", + "indent": 4 + } + ] + }, + "243": { + "contexts": [ + "์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ์„", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Max Health", + "orderNumber": 1, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 4 + } + ] + }, + "244": { + "contexts": [ + "์ˆœ์ˆ˜ ์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ์—", + "๋น„๋ก€ํ•˜๋„๋ก ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ตœ๋Œ€", + "์ƒ๋ช…๋ ฅ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Max Health", + "orderNumber": 2, + "path": "/interface/action/child/setMaxHealth.ts", + "indent": 4 + }, + { + "topName": "Set Move Speed", + "orderNumber": 1, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 4 + } + ] + }, + "245": { + "contexts": [ + "์ด๋™ ์†๋„๋ฅผ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Move Speed", + "orderNumber": 2, + "path": "/interface/action/child/setMoveSpeed.ts", + "indent": 4 + } + ] + }, + "246": { + "contexts": [ + "ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ", + "๋ณด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Objective Description", + "orderNumber": 2, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + }, + { + "topName": "Small Message", + "orderNumber": 1, + "path": "/interface/action/child/smallMessage.ts", + "indent": 4 + } + ] + }, + "247": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘", + "์–ด๋–ค ํ•ญ๋ชฉ์„ ์ง€์†์ ์œผ๋กœ", + "์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋Š” ์ž…๋ ฅ ์ •๋ณด์˜", + "์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ,", + "์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Objective Description", + "orderNumber": 3, + "path": "/interface/action/child/setObjectiveDescription.ts", + "indent": 4 + } + ] + }, + "248": { + "contexts": [ + "์˜์›… ๋ชฉ๋ก์„ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 4 + } + ] + }, + "249": { + "contexts": [ + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›…์ž…๋‹ˆ๋‹ค.", + "์ œ๊ณต๋œ ์˜์›…์ด ์—†๋Š” ๊ฒฝ์šฐ", + "์ด ์•ก์…˜์€ ์•„๋ฌด ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Allowed Heroes", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerAllowedHeroes.ts", + "indent": 4 + } + ] + }, + "250": { + "contexts": [ + "์ ์ˆ˜๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Score", + "orderNumber": 1, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 4 + } + ] + }, + "251": { + "contexts": [ + "์„ค์ •ํ•  ์ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Score", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerScore.ts", + "indent": 4 + }, + { + "topName": "Set Team Score", + "orderNumber": 1, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 4 + } + ] + }, + "252": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค" + ], + "usedFiles": [ + { + "topName": "Set Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "253": { + "contexts": [ + "๊ฐ’์„ ์ €์žฅํ•  ํ”Œ๋ ˆ์ด์–ด์˜", + "๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Variable", + "orderNumber": 3, + "path": "/interface/action/child/setPlayerVariable.ts", + "indent": 4 + } + ] + }, + "254": { + "contexts": [ + "๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๊ฐ€ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค" + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 2, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "255": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜ ๊ฐ’์„", + "์ˆ˜์ •ํ•  ๋ฐฐ์—ด์— ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "๋ณ€์ˆ˜๊ฐ’์ด ๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ,", + "ํ•ด๋‹น ๊ฐ’์€ ๋นˆ ๋ฐฐ์—ด์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 3, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "256": { + "contexts": [ + "๋ฐฐ์—ด์— ์ €์žฅํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Player Variable At Index", + "orderNumber": 4, + "path": "/interface/action/child/setPlayerVariableAtIndex.ts", + "indent": 4 + } + ] + }, + "257": { + "contexts": [ + "๊ธฐ๋ณธ ๋ฐœ์‚ฌ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "258": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ธฐ๋ณธ ๋ฐœ์‚ฌ ์‚ฌ์šฉ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Primary Fire Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setPrimaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "259": { + "contexts": [ + "ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ์„", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค" + ], + "usedFiles": [ + { + "topName": "Set Projectile Gravity", + "orderNumber": 1, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 4 + } + ] + }, + "260": { + "contexts": [ + "์ผ๋ฐ˜ ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ์—", + "๋น„๋ก€ํ•˜๋„๋ก ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฐœ์ธ", + "ํˆฌ์‚ฌ์ฒด ์ค‘๋ ฅ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Projectile Gravity", + "orderNumber": 2, + "path": "/interface/action/child/setProjectileGravity.ts", + "indent": 4 + } + ] + }, + "261": { + "contexts": [ + "ํˆฌ์‚ฌ์ฒด ์†๋„๋ฅผ ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Projectile Speed", + "orderNumber": 1, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 4 + } + ] + }, + "262": { + "contexts": [ + "์ผ๋ฐ˜ ํˆฌ์‚ฌ์ฒด ์†๋„์—", + "๋น„๋ก€ํ•˜๋„๋ก ์„ค์ •ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฐœ์ธ", + "ํˆฌ์‚ฌ์ฒด ์†๋„ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Projectile Speed", + "orderNumber": 2, + "path": "/interface/action/child/setProjectileSpeed.ts", + "indent": 4 + } + ] + }, + "263": { + "contexts": [ + "์ตœ๋Œ€ ๋ถ€ํ™œ ์‹œ๊ฐ„์„", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Respawn Max Time", + "orderNumber": 1, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 4 + } + ] + }, + "264": { + "contexts": [ + "์‚ฌ๋ง๊ณผ ๋ถ€ํ™œ ์‚ฌ์ด์˜ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Respawn Max Time", + "orderNumber": 2, + "path": "/interface/action/child/setRespawnMaxTime.ts", + "indent": 4 + } + ] + }, + "265": { + "contexts": [ + "๋ณด์กฐ ๋ฐœ์‚ฌ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ", + "์„ค์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "266": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณด์กฐ ๋ฐœ์‚ฌ ์‚ฌ์šฉ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Secondary Fire Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setSecondaryFireEnabled.ts", + "indent": 4 + } + ] + }, + "267": { + "contexts": [ + "์ •์ƒ ์†๋„ ๋Œ€๋น„", + "์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋น„์œจ์ž…๋‹ˆ๋‹ค.", + "์ตœ๋Œ€ 100%๊นŒ์ง€ ์„ค์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Slow Motion", + "orderNumber": 1, + "path": "/interface/action/child/setSlowMotion.ts", + "indent": 4 + } + ] + }, + "268": { + "contexts": [ + "์ƒํƒœ๋ฅผ ์ ์šฉํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 1, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "269": { + "contexts": [ + "์ด ์ƒํƒœ๊ฐ€ ์ ์šฉ๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์‚ฌ๋งํ•˜๋Š” ๊ฒฝ์šฐ ๋„์›€์„ ๊ธฐ๋กํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ASSISTER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 2, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "270": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ ์šฉํ•  ์ƒํƒœ์ž…๋‹ˆ๋‹ค.", + "์˜์›… ๋Šฅ๋ ฅ์— ์˜ํ•ด ์ ์šฉ๋˜๋Š”", + "์ƒํƒœ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 3, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "271": { + "contexts": [ + "ํ•ด๋‹น ์ƒํƒœ์˜ ์ง€์† ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.", + "์ƒํƒœ๊ฐ€ CLEAR STATUS ์•ก์…˜ ์‹คํ–‰์— ์˜ํ•ด", + "์ค‘์ง€๋  ๋•Œ ๊นŒ์ง€ ์ง€์†๋˜๊ฒŒ ํ•˜๋ ค๋ฉด", + "9999๋“ฑ ๋งค์šฐ ๊ธด ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "Set Status", + "orderNumber": 4, + "path": "/interface/action/child/setStatus.ts", + "indent": 4 + } + ] + }, + "272": { + "contexts": [ + "์ ์ˆ˜๋ฅผ ์„ค์ •ํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Team Score", + "orderNumber": 2, + "path": "/interface/action/child/setTeamScore.ts", + "indent": 4 + } + ] + }, + "273": { + "contexts": [ + "๊ถ๊ทน๊ธฐ ์‚ฌ์šฉ์— ์žˆ์–ด", + "์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 1, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 4 + }, + { + "topName": "Set Ultimate Charge", + "orderNumber": 1, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 4 + } + ] + }, + "274": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ถ๊ทน๊ธฐ๋ฅผ", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "TRUE, FALSE ๋“ฑ์˜ ๋ถ€์šธ ๊ฐ’", + "๋˜๋Š” COMPARE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Ability Enabled", + "orderNumber": 2, + "path": "/interface/action/child/setUltimateAbilityEnabled.ts", + "indent": 4 + } + ] + }, + "275": { + "contexts": [ + "์ตœ๋Œ€ ์ถฉ์ „๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Set Ultimate Charge", + "orderNumber": 2, + "path": "/interface/action/child/setUltimateCharge.ts", + "indent": 4 + } + ] + }, + "276": { + "contexts": [ + "๊ฑด๋„ˆ๋›ธ ์•ก์…˜์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ์•ก์…˜์€ ์ œ์™ธํ•œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Skip", + "orderNumber": 1, + "path": "/interface/action/child/skip.ts", + "indent": 4 + }, + { + "topName": "Skip If", + "orderNumber": 1, + "path": "/interface/action/child/skipIf.ts", + "indent": 4 + } + ] + }, + "277": { + "contexts": [ + "๊ฑด๋„ˆ๋›ฐ๊ธฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š”์ง€", + "์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Skip If", + "orderNumber": 2, + "path": "/interface/action/child/skipIf.ts", + "indent": 4 + } + ] + }, + "278": { + "contexts": [ + "๊ฐ€์†ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 1, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "279": { + "contexts": [ + "๊ฐ€์†์„ ์ ์šฉํ•  ๋‹จ์œ„ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 2, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "280": { + "contexts": [ + "๊ฐ€์† ๋น„์œจ(์ œ๊ณฑ์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "์ค‘๋ ฅ์ด๋‚˜ ํ‘œ๋ฉด ๋งˆ์ฐฐ๋ ฅ์„ ์ด๊ฒจ๋‚ด๋ ค๋ฉด", + "์ด ๊ฐ’์ด ๋งค์šฐ ๋†’์•„์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 3, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "281": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฐ€์†์ด ์ค‘์ง€๋˜๋Š” ์†๋ ฅ์ž…๋‹ˆ๋‹ค.", + "์ค‘๋ ฅ ๋ฐ ํ‘œ๋ฉด ๋งˆ์ฐฐ๋ ฅ ๋•Œ๋ฌธ์—", + "์ด ์†๋„์— ๋„๋‹ฌํ•˜๊ธฐ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 4, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "282": { + "contexts": [ + "๋ฐฉํ–ฅ์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์›”๋“œ ์ขŒํ‘œ", + "๋˜๋Š” ๋กœ์ปฌ ์ขŒํ‘œ ์ค‘ ์–ด๋А ์ชฝ์— ๋Œ€ํ•ด", + "์ƒ๋Œ€์ ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 5, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + } + ] + }, + "283": { + "contexts": [ + "์ด ์•ก์…˜์˜ ์ž…๋ ฅ ์ •๋ณด ์ค‘", + "์–ด๋–ค ํ•ญ๋ชฉ์„ ์ง€์†์ ์œผ๋กœ", + "์žฌํ™•์ธํ•  ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ์•ก์…˜์€ ์ž…๋ ฅ ์ •๋ณด์˜", + "์ƒˆ๋กœ์šด ๊ฐ’์„ ๊ณ„์† ๋ฌป๊ฒŒ ๋˜๋ฉฐ,", + "์žฌํ™•์ธํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Accelerating", + "orderNumber": 6, + "path": "/interface/action/child/startAccelerating.ts", + "indent": 4 + }, + { + "topName": "Start Damage Modification", + "orderNumber": 1, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + }, + { + "topName": "Start Facing", + "orderNumber": 1, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "284": { + "contexts": [ + "์นด๋ฉ”๋ผ๋ฅผ ํ•ด๋‹น ์œ„์น˜์—", + "๋ฐฐ์น˜ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 1, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "285": { + "contexts": [ + "์นด๋ฉ”๋ผ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "์ง€์†์ ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 2, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "286": { + "contexts": [ + "์นด๋ฉ”๋ผ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ง€์†์ ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 3, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "287": { + "contexts": [ + "์œ„์น˜ ๋ณ€๊ฒฝ ์‹œ ์นด๋ฉ”๋ผ ์ด๋™์˜", + "๋ธ”๋ Œ๋”ฉ ์†๋„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ธ ๊ฒฝ์šฐ ๋ธ”๋ Œ๋”ฉํ•˜์ง€ ์•Š๊ณ ", + "์œ„์น˜๋งŒ ์ฆ‰์‹œ ๋ณ€๊ฒฝํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Camera", + "orderNumber": 4, + "path": "/interface/action/child/startCamera.ts", + "indent": 4 + } + ] + }, + "288": { + "contexts": [ + "(DAMAGER์˜ ๊ณต๊ฒฉ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ)", + "๋ฐ›๋Š” ํ”ผํ•ด๋ฅผ ์ˆ˜์ •ํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 2, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "289": { + "contexts": [ + "(RECEIVER๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒฝ์šฐ)", + "์ฃผ๋Š” ํ”ผํ•ด๋ฅผ ๋ณ€๊ฒฝํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 3, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "290": { + "contexts": [ + "DAMAGER์˜ ๊ณต๊ฒฉ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ", + "RECEIVER์—๊ฒŒ ์ ์šฉํ•  ํ”ผํ•ด ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Modification", + "orderNumber": 4, + "path": "/interface/action/child/startDamageModification.ts", + "indent": 4 + } + ] + }, + "291": { + "contexts": [ + "DAMAGE OVER TIME์„", + "์ ์šฉํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "292": { + "contexts": [ + "ํ”ผํ•ด๋ฅผ ์ฃผ๋Š” ํ–‰๋™์„ ํ•œ ๊ฒƒ์œผ๋กœ", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "DAMAGER๊ฐ€ NULL์ด๋ฉด", + "์ง‘๊ณ„๋  ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 2, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "293": { + "contexts": [ + "DAMAGE OVER TIME์˜", + "์ง€์† ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.", + "DAMAGE OVER TIME์ด", + "์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ", + "์ค‘์ง€๋  ๋•Œ๊นŒ์ง€ ์ง€์†๋˜๊ฒŒ ํ•˜๋ ค๋ฉด", + "์ง€์† ์‹œ๊ฐ„์„ ๋งค์šฐ ๊ธธ๊ฒŒ", + "์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. (9999 ๋“ฑ)" + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 3, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "294": { + "contexts": [ + "DAMAGE OVER TIME์˜", + "์ดˆ๋‹น ํ”ผํ•ด๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Damage Over Time", + "orderNumber": 4, + "path": "/interface/action/child/startDamageOverTime.ts", + "indent": 4 + } + ] + }, + "295": { + "contexts": [ + "ํšŒ์ „์‹œํ‚ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 2, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "296": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ", + "๋ฐ”๋ผ๋ณด๊ฒŒ ๋˜๋Š” ๋‹จ์œ„ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 3, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "297": { + "contexts": [ + "์ดˆ๋‹น ํšŒ์ „์œจ(๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 4, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "298": { + "contexts": [ + "๋ฐฉํ–ฅ์ด ํ”Œ๋ ˆ์ด์–ด์˜", + "์›”๋“œ ์ขŒํ‘œ ๋˜๋Š” ๋กœ์ปฌ ์ขŒํ‘œ ์ค‘", + "์–ด๋А ์ชฝ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์ธ์ง€", + "์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Facing", + "orderNumber": 5, + "path": "/interface/action/child/startFacing.ts", + "indent": 4 + } + ] + }, + "299": { + "contexts": [ + "์ง€์ •๋œ ์˜์›…์ด ๊ฐ•์ œ", + "์„ ํƒ๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 1, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "300": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๊ฐ•์ œ๋กœ", + "์„ค์ •๋œ ์˜์›…์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Player To Be Hero", + "orderNumber": 2, + "path": "/interface/action/child/startForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "301": { + "contexts": [ + "์ „ํˆฌ์ค€๋น„์‹ค์„", + "๊ฐ•์ œํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 1, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "302": { + "contexts": [ + "๊ฐ•์ œ๋œ ์ „ํˆฌ์ค€๋น„์‹ค์˜ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.", + "0์ด ์ฒซ ๋ฒˆ์งธ ์ „ํˆฌ์ค€๋น„์‹ค์ด๋ฉฐ,", + "1์ด ๋‘ ๋ฒˆ์งธ, 2๊ฐ€ ์„ธ ๋ฒˆ์งธ์ž…๋‹ˆ๋‹ค.", + "์ง€์ •๋œ ๋ฐฉ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ,", + "๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋Š” ์ผ๋ฐ˜", + "์ „ํˆฌ์ค€๋น„์‹ค์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Spawn Room", + "orderNumber": 2, + "path": "/interface/action/child/startForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "303": { + "contexts": [ + "๊ฐ•์ œ ์ด๋™๋˜๊ฑฐ๋‚˜ ์ด๋™์ด", + "์ œํ•œ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 1, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "304": { + "contexts": [ + "์ „๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ์†Œ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ •์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์ตœ๋Œ€ ์†๋„๋กœ ๊ฐ•์ œ ์ „๋ฐฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 2, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "305": { + "contexts": [ + "์ „๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ๋Œ€๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์—†์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ „๋ฐฉ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 3, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "306": { + "contexts": [ + "ํ›„๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ์†Œ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ •์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์ตœ๋Œ€ ์†๋„๋กœ ๊ฐ•์ œ ํ›„๋ฐฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 4, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "307": { + "contexts": [ + "ํ›„๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ๋Œ€๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์—†์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ›„๋ฐฉ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 5, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "308": { + "contexts": [ + "์ธก๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ์†Œ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ •์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์ตœ๋Œ€ ์†๋„๋กœ ๊ฐ•์ œ ์ขŒ์šฐ ์ธก๋ฐฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 6, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "309": { + "contexts": [ + "์ธก๋ฐฉ ๋‹ฌ๋ฆฌ๊ธฐ์˜ ์ตœ๋Œ€๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "0์ด๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์—†์ง€๋งŒ,", + "1์ผ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ขŒ์šฐ ์ธก๋ฐฉ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Forcing Throttle", + "orderNumber": 7, + "path": "/interface/action/child/startForcingThrottle.ts", + "indent": 4 + } + ] + }, + "310": { + "contexts": [ + "HEAL OVER TIME์„", + "์ ์šฉํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 2, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "311": { + "contexts": [ + "HEAL OVER TIME์˜ ์ง€์† ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.", + "HEAL OVER TIME์ด ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด", + "์ค‘์ง€๋  ๋•Œ๊นŒ์ง€ ์ง€์†๋˜๊ฒŒ ํ•˜๋ ค๋ฉด", + "9999๋“ฑ ๋งค์šฐ ๊ธด ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 3, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "312": { + "contexts": [ + "HEAL OVER TIME์˜ ์ดˆ๋‹น ์น˜์œ ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Heal Over Time", + "orderNumber": 4, + "path": "/interface/action/child/startHealOverTime.ts", + "indent": 4 + } + ] + }, + "313": { + "contexts": [ + "๊ฐ€์ƒ์œผ๋กœ ๋ฒ„ํŠผ์„", + "๋ˆ„๋ฅด๊ฒŒ ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Holding Button", + "orderNumber": 1, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 4 + } + ] + }, + "314": { + "contexts": [ + "๊ฐ€์ƒ์œผ๋กœ ๋ˆŒ๋ฆฌ๊ฒŒ ๋˜๋Š”", + "๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Start Holding Button", + "orderNumber": 2, + "path": "/interface/action/child/startHoldingButton.ts", + "indent": 4 + } + ] + }, + "315": { + "contexts": [ + "๊ฐ€์†์„ ์ค‘์ง€ํ•˜๊ฒŒ ๋˜๋Š”", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Accelerating", + "orderNumber": 1, + "path": "/interface/action/child/stopAccelerating.ts", + "indent": 4 + } + ] + }, + "316": { + "contexts": [ + "์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•œ", + "DAMAGE OVER TIME์ด", + "์ค‘์ง€๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop All Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopAllDamageOverTime.ts", + "indent": 4 + } + ] + }, + "317": { + "contexts": [ + "์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•œ", + "HEAL OVER TIME์ด", + "์ค‘์ง€๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop All Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopAllHealOverTime.ts", + "indent": 4 + } + ] + }, + "318": { + "contexts": [ + "์นด๋ฉ”๋ผ๋ฅผ ๊ธฐ๋ณธ ๋ทฐ๋กœ ", + "๋˜๋Œ๋ฆด ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Camera", + "orderNumber": 1, + "path": "/interface/action/child/stopCamera.ts", + "indent": 4 + } + ] + }, + "319": { + "contexts": [ + "์ˆ˜์ •์„ ์ค‘์ง€ํ• ", + "์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Global Variable", + "orderNumber": 1, + "path": "/interface/action/child/stopChasingGlobalVariable.ts", + "indent": 4 + } + ] + }, + "320": { + "contexts": [ + "๋ณ€์ˆ˜ ๋ฐ˜๊ฒฝ์„ ์ค‘์ง€ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์ˆ˜์ธ ๊ฒฝ์šฐ,", + "๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜๋Š”", + "๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 1, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 4 + } + ] + }, + "321": { + "contexts": [ + "์ˆ˜์ •์„ ์ค‘์ง€ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณ€์ˆ˜๋ฅผ", + "์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Chasing Player Variable", + "orderNumber": 2, + "path": "/interface/action/child/stopChasingPlayerVariable.ts", + "indent": 4 + } + ] + }, + "322": { + "contexts": [ + "์ค‘์ง€ํ•  DAMAGE MODIFICATION ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์ด ID๋Š” LAST DAMAGE MODIFICATION ID์ด๊ฑฐ๋‚˜,", + "์ด์ „์— LAST DAMAGE MODIFICATION ID๊ฐ€", + "์ €์žฅ๋˜์—ˆ๋˜ ๋ณ€์ˆ˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Damage Modification", + "orderNumber": 1, + "path": "/interface/action/child/stopDamageModification.ts", + "indent": 4 + } + ] + }, + "323": { + "contexts": [ + "์ค‘์ง€ํ•  DAMAGE OVER TIME ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ID๋Š” LAST DAMAGE MODIFICATION ID์ด๊ฑฐ๋‚˜,", + "์ด์ „์— LAST DAMAGE MODIFICATION ID๊ฐ€", + "์ €์žฅ๋˜์—ˆ๋˜ ๋ณ€์ˆ˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Damage Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopDamageOverTime.ts", + "indent": 4 + } + ] + }, + "324": { + "contexts": [ + "ํšŒ์ „์„ ๋ฉˆ์ถœ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Facing", + "orderNumber": 1, + "path": "/interface/action/child/stopFacing.ts", + "indent": 4 + } + ] + }, + "325": { + "contexts": [ + "์ง€์ •๋œ ์˜์›… ๊ฐ•์ œ ์„ ํƒ์ด", + "ํ•ด์ œ๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Player To Be Hero", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingPlayerToBeHero.ts", + "indent": 4 + } + ] + }, + "326": { + "contexts": [ + "์ผ๋ฐ˜ ์ „ํˆฌ์‹ค์„ ์‚ฌ์šฉํ•ด", + "ํ”Œ๋ ˆ์ด๋ฅผ ์žฌ๊ฐœํ•˜๊ฒŒ ๋  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Spawn Room", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingSpawnRoom.ts", + "indent": 4 + } + ] + }, + "327": { + "contexts": [ + "์ด๋™ ์ž…๋ ฅ ์ •๋ณด๊ฐ€", + "๋ณต์›๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Forcing Throttle", + "orderNumber": 1, + "path": "/interface/action/child/stopForcingThrottle.ts", + "indent": 4 + } + ] + }, + "328": { + "contexts": [ + "์ค‘์ง€ํ•  HEAL OVER TIME ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ID๋Š” LAST HEAL OVER TIME ID ๋˜๋Š”", + "์˜ˆ์ „์— LAST HEAL OVER TIME ID๊ฐ€ ๋‹ด๊ธด ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Heal Over Time", + "orderNumber": 1, + "path": "/interface/action/child/stopHealOverTime.ts", + "indent": 4 + } + ] + }, + "329": { + "contexts": [ + "๋” ์ด์ƒ ๊ฐ€์ƒ์œผ๋กœ ๋ฒ„ํŠผ์„", + "๋ˆ„๋ฅด์ง€ ์•Š์„ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Holding Button", + "orderNumber": 1, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 4 + } + ] + }, + "330": { + "contexts": [ + "๋” ์ด์ƒ ๊ฐ€์ƒ์œผ๋กœ", + "๋ˆŒ๋ฆฌ์ง€ ์•Š์„", + "๋…ผ๋ฆฌ์  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Stop Holding Button", + "orderNumber": 2, + "path": "/interface/action/child/stopHoldingButton.ts", + "indent": 4 + } + ] + }, + "331": { + "contexts": [ + "์ˆœ๊ฐ„์ด๋™ํ• ", + "ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Teleport", + "orderNumber": 1, + "path": "/interface/action/child/teleport.ts", + "indent": 4 + } + ] + }, + "332": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ˆœ๊ฐ„์ด๋™ํ•˜๊ฒŒ ๋  ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ์œ„์น˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Teleport", + "orderNumber": 2, + "path": "/interface/action/child/teleport.ts", + "indent": 4 + } + ] + }, + "333": { + "contexts": [ + "์ผ์‹œ์ •์ง€์˜ ์ง€์†์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Wait", + "orderNumber": 1, + "path": "/interface/action/child/wait.ts", + "indent": 4 + } + ] + }, + "334": { + "contexts": [ + "WAIT์ด ์ค‘์ง€๋˜๋Š” ์กฐ๊ฑด ๋ฐ ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "์กฐ๊ฑด ๋ชฉ๋ก์ด ๋ฌด์‹œ๋˜๋ฉด WAIT์€ ์ค‘์ง€๋˜์ง€ ์•Š์œผ๋ฉฐ,", + "๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ์กฐ๊ฑด ๋ชฉ๋ก์— ์˜ํ•ด", + "์•ก์…˜ ๋ชฉ๋ก์˜ ์ค‘์ง€ ํ˜น์€ ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Wait", + "orderNumber": 2, + "path": "/interface/action/child/wait.ts", + "indent": 4 + } + ] + }, + "335": { + "contexts": [ + "๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ ์ด Rule์˜ ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.", + "์ด ์ธ์Šคํ„ด์Šค๋Š” ๊ฒŒ์ž„์ด ์ง€์†๋˜๋Š” ๋™์•ˆ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.", + "", + "- ์ด ์ธ์Šคํ„ด์Šค๋Š” ๊ฒŒ์ž„์ด ์ง€์†๋˜๋Š” ๋™์•ˆ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ", + " Condition ์„ ๋งŒ์กฑํ•˜๊ฑฐ๋‚˜ ๋งŒ์กฑํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + " Condition์„ ์ฒ˜์Œ ๋งŒ์กฑํ•  ๋•Œ Action์„ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- Condition ๋ชฉ๋ก์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๊ฐ€ ๋งŒ์กฑํ•œ๋‹ค๋ฉด,", + " Action์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ ค ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 0, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Ongoing - Global", + "orderNumber": 0, + "path": "/interface/event/child/onGoingGlobal.ts", + "indent": 0 + } + ] + }, + "336": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒŒ์ž„์— ์ฐธ์—ฌํ•˜๋ฉด", + "๊ฐ ํ”Œ๋ ˆ์ด์–ด๋งˆ๋‹ค ์ด Rule์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.", + "์ด ์ธ์Šคํ„ด์Šค๋Š” ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒŒ์ž„์„ ๋– ๋‚˜๊ฑฐ๋‚˜,", + "๊ฒŒ์ž„์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.", + "๊ฐ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ Condition๊ณผ Action์„ ์ถ”์ ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒŒ์ž„์— ๋‚จ์•„์žˆ๋Š” ํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ง€์†๋˜๋ฏ€๋กœ", + " Condition์„ ๋งŒ์กฑํ•  ์ˆ˜๋„, ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.", + " Condition์„ ์ฒ˜์Œ ๋งŒ์กฑํ•˜๋ฉดAction์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- Condition ๋ชฉ๋ก์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๊ฐ€ ๋งŒ์กฑํ•œ๋‹ค๋ฉด,", + " Action์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ ค ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 1, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Ongoing - Each Player", + "orderNumber": 0, + "path": "/interface/event/child/onGoingEachPlayer.ts", + "indent": 0 + } + ] + }, + "337": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ์ฒ˜์น˜๋ฅผ ๋‹ฌ์„ฑํ•  ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ์ฒ˜์น˜ํ•˜๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•˜๋ฉด Action์ด ์‹คํ–‰๋˜์ง€๋งŒ, ", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 2, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player earned elimination", + "orderNumber": 0, + "path": "/interface/event/child/playerEarnedElimination.ts", + "indent": 0 + } + ] + }, + "338": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ๊ฒฐ์ •ํƒ€๋ฅผ ๋‚ ๋ฆด ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒฐ์ •ํƒ€๋กœ ํ”ผํ•ด๋ฅผ ์ž…ํžˆ๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•˜๋ฉด Action์ด ์‹คํ–‰๋˜์ง€๋งŒ,", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 3, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player dealt final blow", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtFinalBlow.ts", + "indent": 0 + } + ] + }, + "339": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ํ”ผํ•ด๋ฅผ ์ž…ํž ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ ์—๊ฒŒ ํ”ผํ•ด๋ฅผ ์ฃผ๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•˜๋ฉดAction์ด ์‹คํ–‰๋˜์ง€๋งŒ,", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 4, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player dealt damage", + "orderNumber": 0, + "path": "/interface/event/child/playerDealtDamage.ts", + "indent": 0 + } + ] + }, + "340": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ํ”ผํ•ด๋ฅผ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ ์—๊ฒŒ์„œ ํ”ผํ•ด๋ฅผ ๋ฐ›์œผ๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•˜๋ฉดAction์ด ์‹คํ–‰๋˜์ง€๋งŒ,", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 5, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player took damage", + "orderNumber": 0, + "path": "/interface/event/child/playerTookDamage.ts", + "indent": 0 + } + ] + }, + "341": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ํ•œ ๋ช…์ด ์‚ฌ๋งํ•  ๋•Œ๋งˆ๋‹ค Rule์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.", + "์ด Rule์€ ํŠน์ • ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.", + "", + "- ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‚ฌ๋งํ•˜๋ฉด Condition์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.", + " ๋ชจ๋“  Condition์„ ๋งŒ์กฑํ•  ๋•Œ Action์ด ์‹คํ–‰๋˜์ง€๋งŒ,", + " ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด Action์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IEvent", + "orderNumber": 6, + "path": "/interface/event/event.ts", + "indent": 4 + }, + { + "topName": "Player Died", + "orderNumber": 0, + "path": "/interface/event/child/playerDied.ts", + "indent": 0 + } + ] + }, + "342": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์˜ ์ ˆ๋Œ€๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 0, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Absolute Value", + "orderNumber": 0, + "path": "/interface/value/child/absoluteValue.ts", + "indent": 0 + } + ] + }, + "343": { + "contexts": [ + "๋‘ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ์˜ ํ•ฉ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 1, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Add", + "orderNumber": 0, + "path": "/interface/value/child/add.ts", + "indent": 0 + } + ] + }, + "344": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ์‚ฌ๋งํ•œ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 2, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Dead Players", + "orderNumber": 0, + "path": "/interface/value/child/allDeadPlayers.ts", + "indent": 0 + } + ] + }, + "345": { + "contexts": [ + "์˜ค๋ฒ„์›Œ์น˜์˜ ๋ชจ๋“  ์˜์›… ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 3, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Heroes", + "orderNumber": 0, + "path": "/interface/value/child/allHeroes.ts", + "indent": 0 + } + ] + }, + "346": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ์ƒ์กดํ•œ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 4, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Living Players", + "orderNumber": 0, + "path": "/interface/value/child/allLivingPlayers.ts", + "indent": 0 + } + ] + }, + "347": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 5, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players", + "orderNumber": 0, + "path": "/interface/value/child/allPlayers.ts", + "indent": 0 + } + ] + }, + "348": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ํ™”๋ฌผ์„ ํ™•๋ณดํ•˜์ง€๋„,", + "์ ๋ น ์ค‘์ด์ง€๋„ ์•Š์€ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 6, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players Not On Objective", + "orderNumber": 0, + "path": "/interface/value/child/allPlayersNotOnObjective.ts", + "indent": 0 + } + ] + }, + "349": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ํ™”๋ฌผ ํ™•๋ณด ๋˜๋Š”", + "์ ๋ น ์ค‘์ธ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 7, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "All Players On Objective", + "orderNumber": 0, + "path": "/interface/value/child/allPlayersOnObjective.ts", + "indent": 0 + } + ] + }, + "350": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›… ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 8, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Allowed Heroes", + "orderNumber": 0, + "path": "/interface/value/child/allowedHeroes.ts", + "indent": 0 + } + ] + }, + "351": { + "contexts": [ + "ํ‘œ๋ฉด์œผ๋กœ๋ถ€ํ„ฐ ์ธก์ •ํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ๋†’์ด(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ‘œ๋ฉด์— ์žˆ์œผ๋ฉด 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 9, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Altitude Of", + "orderNumber": 0, + "path": "/interface/value/child/altitudeOf.ts", + "indent": 0 + } + ] + }, + "352": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด ๋ชจ๋‘ TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 10, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "And", + "orderNumber": 0, + "path": "/interface/value/child/and.ts", + "indent": 0 + } + ] + }, + "353": { + "contexts": [ + "๋‘ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ (์ •๊ทœํ™” ๋ถˆํ•„์š”) ์‚ฌ์ด์˜ ๊ฐ์ž…๋‹ˆ๋‹ค. (๋‹จ์œ„: ๋„)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 11, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Angle Between Vectors", + "orderNumber": 0, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 0 + } + ] + }, + "354": { + "contexts": [ + "๋‘ ๊ฐ์„ ๋น„๊ตํ•œ ๊ฐ๋„ ์ฐจ์ด(๋‹จ์œ„: ๋„) ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ์„ ์„œ๋กœ +/- 180", + "์ด๋‚ด์—์„œ ํŽผ์ณ์„œ ๋‘ ๋ฒˆ์งธ ๊ฐ์ด ์ฒซ ๋ฒˆ์งธ ๊ฐ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๊ฒฐ๊ณผ๊ฐ์€ ์–‘์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด์™ธ์˜ ๊ฒฝ์šฐ 0์ด๋‚˜ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 12, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Angle Difference", + "orderNumber": 0, + "path": "/interface/value/child/angleDifference.ts", + "indent": 0 + } + ] + }, + "355": { + "contexts": [ + "๋งจ ๋’ค์— ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’์„ ๋ง๋ถ™์ธ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 13, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Append To Array", + "orderNumber": 0, + "path": "/interface/value/child/appendToArray.ts", + "indent": 0 + } + ] + }, + "356": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ์•„ํฌ์ฝ”์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 14, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arccosineInDegrees.ts", + "indent": 0 + } + ] + }, + "357": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ์•„ํฌ์ฝ”์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 15, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arccosineInRadians.ts", + "indent": 0 + } + ] + }, + "358": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ์•„ํฌ์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 16, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arcsineInDegrees.ts", + "indent": 0 + } + ] + }, + "359": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ์•„ํฌ์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 17, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arcsineInRadians.ts", + "indent": 0 + } + ] + }, + "360": { + "contexts": [ + "์ง€์ •๋œ ๋ถ„์ž์™€ ๋ถ„๋ชจ(๋‹จ์œ„: ๋„)์˜ ์•„ํฌํƒ„์  ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "(ํ”ํžˆ ATAN2 ๋กœ ๋ถˆ๋ฆผ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 18, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Degrees", + "orderNumber": 0, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 0 + } + ] + }, + "361": { + "contexts": [ + "์ง€์ •๋œ ๋ถ„์ž์™€ ๋ถ„๋ชจ(๋‹จ์œ„: RAD)์˜ ์•„ํฌํƒ„์  ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "(ํ”ํžˆ ATAN2 ๋กœ ๋ถˆ๋ฆผ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 19, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 0, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 0 + } + ] + }, + "362": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์— ์ง€์ •๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 20, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Array Contains", + "orderNumber": 0, + "path": "/interface/value/child/arrayContains.ts", + "indent": 0 + } + ] + }, + "363": { + "contexts": [ + "์ง€์ •๋œ ๋ฒ”์œ„ ์ธ๋ฑ์Šค์˜ ๊ฐ’๋งŒ์„", + "ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 21, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Array Slice", + "orderNumber": 0, + "path": "/interface/value/child/arraySlice.ts", + "indent": 0 + } + ] + }, + "364": { + "contexts": [ + "์ด ๊ทœ์น™์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ํ”ผํ•ด๋ฅผ ์ค€ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "VICTIM ๋˜๋Š” EVENT PLAYER์™€ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 22, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Attacker", + "orderNumber": 0, + "path": "/interface/value/child/attacker.ts", + "indent": 0 + } + ] + }, + "365": { + "contexts": [ + "ํ›„๋ฐฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(0, 0, -1)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 23, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Backward", + "orderNumber": 0, + "path": "/interface/value/child/backward.ts", + "indent": 0 + } + ] + }, + "366": { + "contexts": [ + "ํ•œ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํŒ€์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 24, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Closest Player To", + "orderNumber": 0, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 0 + } + ] + }, + "367": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด์˜ ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ TRUE์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 25, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Compare", + "orderNumber": 0, + "path": "/interface/value/child/compare.ts", + "indent": 0 + } + ] + }, + "368": { + "contexts": [ + "์Ÿํƒˆ ์ „์žฅ์—์„œ ์ง€์ •๋œ ํŒ€์˜ ์ ์ˆ˜ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 26, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Control Mode Scoring Percentage", + "orderNumber": 0, + "path": "/interface/value/child/controlModeScoringPercentage.ts", + "indent": 0 + } + ] + }, + "369": { + "contexts": [ + "ํ˜„์žฌ ์Ÿํƒˆ ์ „์žฅ์—์„œ ์ ์ˆ˜๋ฅผ ์ถ•์ ํ•˜๊ณ  ์žˆ๋Š” ํŒ€์ž…๋‹ˆ๋‹ค.", + "์•„๋ฌด ํŒ€๋„ ์ ์ˆ˜๋ฅผ ์ถ•์ ํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’์€ ALL์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 27, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Control Mode Scoring Team", + "orderNumber": 0, + "path": "/interface/value/child/controlModeScoringTeam.ts", + "indent": 0 + } + ] + }, + "370": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ์ฝ”์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 28, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cosine From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/cosineFromDegrees.ts", + "indent": 0 + } + ] + }, + "371": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ์ฝ”์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 29, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cosine From Radians", + "orderNumber": 0, + "path": "/interface/value/child/cosineFromRadians.ts", + "indent": 0 + } + ] + }, + "372": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด ๋‚ด ์š”์†Œ์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. " + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 30, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Count Of", + "orderNumber": 0, + "path": "/interface/value/child/countOf.ts", + "indent": 0 + } + ] + }, + "373": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์˜ ๊ฐ€์œ„๊ณฑ์ž…๋‹ˆ๋‹ค.(์™ผ์ชฝ๊ณผ ์œ„์ชฝ์˜ ๋ฒกํ„ฐ ๊ณฑ์€ ์ „๋ฐฉ ๋ฐฉํ–ฅ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 31, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Cross Product", + "orderNumber": 0, + "path": "/interface/value/child/crossProduct.ts", + "indent": 0 + } + ] + }, + "374": { + "contexts": [ + "ํ˜„์žฌ ์—ฐ์‚ฐ ๋Œ€์ƒ์ธ ๋ฐฐ์—ด ์š”์†Œ์ž…๋‹ˆ๋‹ค.", + "FILTERED ARRAY ๋‚˜ SORTED ARRAY ๋“ฑ์˜", + "๊ฐ’์„ ํ™•์ธํ•  ๋•Œ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 32, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Current Array Element", + "orderNumber": 0, + "path": "/interface/value/child/currentArrayElement.ts", + "indent": 0 + } + ] + }, + "375": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ์— ๋Œ€์‘ํ•˜๋Š” ๋‹จ์œ„ ๊ธธ์ด ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 33, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Direction From Angles", + "orderNumber": 0, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 0 + } + ] + }, + "376": { + "contexts": [ + "ํ•œ ์œ„์น˜์—์„œ ๋‹ค๋ฅธ ์œ„์น˜๊นŒ์ง€์˜ ๋‹จ์œ„ ๊ธธ์ด ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 34, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Direction Towards", + "orderNumber": 0, + "path": "/interface/value/child/directionTowards.ts", + "indent": 0 + } + ] + }, + "377": { + "contexts": [ + "๋‘ ์œ„์น˜ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 35, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Distance Between", + "orderNumber": 0, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 0 + } + ] + }, + "378": { + "contexts": [ + "๋‘ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ์˜ ๋น„์œจ์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋ฅผ ์ˆซ์ž๋กœ ๋‚˜๋ˆ„๋ฉด", + "๋น„์œจ์ด ์ฆ๊ฐ๋œ ๋ฒกํ„ฐ๊ฐ€ ๋„์ถœ๋ฉ๋‹ˆ๋‹ค. 0์œผ๋กœ ๋‚˜๋ˆ„๋ฉด 0์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 36, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Divide", + "orderNumber": 0, + "path": "/interface/value/child/divide.ts", + "indent": 0 + } + ] + }, + "379": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์˜ ์ ๊ณฑ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 37, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Dot Product", + "orderNumber": 0, + "path": "/interface/value/child/dotProduct.ts", + "indent": 0 + } + ] + }, + "380": { + "contexts": [ + "์•„๋ž˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(0, -1, 0)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 38, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Down", + "orderNumber": 0, + "path": "/interface/value/child/down.ts", + "indent": 0 + } + ] + }, + "381": { + "contexts": [ + "์š”์†Œ๊ฐ€ ์—†๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 39, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Empty Array", + "orderNumber": 0, + "path": "/interface/value/child/emptyArray.ts", + "indent": 0 + } + ] + }, + "382": { + "contexts": [ + "ํŠน์ • ํ”Œ๋ ˆ์ด์–ด, ์•„์ด์ฝ˜ ๊ฐœ์ฒด, ํšจ๊ณผ ๊ฐœ์ฒด๊ฐ€ ์•„์ง ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒฝ๊ธฐ๋ฅผ ๋‚˜๊ฐ”๋Š”์ง€, ๊ฐœ์ฒด๊ฐ€ ์†Œ๋ฉธ๋๋Š”์ง€ ๋“ฑ์„ ํŒ๋ณ„ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 40, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Entity Exists", + "orderNumber": 0, + "path": "/interface/value/child/entityExists.ts", + "indent": 0 + } + ] + }, + "383": { + "contexts": [ + "์ด ๊ทœ์น™์— ์˜ํ•ด ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š”", + "์ด๋ฒคํŠธ์˜ VICTIM์ด ๋ฐ›๋Š” ํ”ผํ•ด๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 41, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Damage", + "orderNumber": 0, + "path": "/interface/value/child/eventDamage.ts", + "indent": 0 + } + ] + }, + "384": { + "contexts": [ + "์ด๋ฒคํŠธ๋กœ ์ง€์ •๋œ ์ด ๊ทœ์น™์„ ์‹คํ–‰ ์ค‘์ธ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ATTACKER ๋˜๋Š” VICTIM๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 42, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Player", + "orderNumber": 0, + "path": "/interface/value/child/eventPlayer.ts", + "indent": 0 + } + ] + }, + "385": { + "contexts": [ + "์ด ๊ทœ์น™์— ์˜ํ•ด ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ", + "ํ”ผํ•ด๊ฐ€ ์น˜๋ช…ํƒ€(ํ—ค๋“œ์ƒท ๋“ฑ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 43, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Event Was Critical Hit", + "orderNumber": 0, + "path": "/interface/value/child/eventWasCriticalHit.ts", + "indent": 0 + } + ] + }, + "386": { + "contexts": [ + "(์กฐ์ค€์— ์“ฐ์ธ) ํ”Œ๋ ˆ์ด์–ด์˜ 1์ธ์นญ ์‹œ์  ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 44, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Eye Position", + "orderNumber": 0, + "path": "/interface/value/child/eyePosition.ts", + "indent": 0 + } + ] + }, + "387": { + "contexts": [ + "์›”๋“œ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š”", + "๋ฐฉํ–ฅ์˜ ์ƒ๋Œ€์ ์ธ ๋‹จ์œ„ ๊ธธ์ด ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์—๋Š” ์ข… ๋ฐ ํšก ๋ฐฉํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 45, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Facing Direction Of", + "orderNumber": 0, + "path": "/interface/value/child/facingDirectionOf.ts", + "indent": 0 + } + ] + }, + "388": { + "contexts": [ + "false ์˜ ๋ถ€์šธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 46, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "False", + "orderNumber": 0, + "path": "/interface/value/child/false.ts", + "indent": 0 + } + ] + }, + "389": { + "contexts": [ + "์ง€์ •๋œ ์œ„์น˜๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ํ”Œ๋ ˆ์ด์–ด๋กœ,", + "ํŒ€์˜ ์ œํ•œ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 47, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Farthest Player From", + "orderNumber": 0, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 0 + } + ] + }, + "390": { + "contexts": [ + "์ œ๊ฑฐ๋œ ์ง€์ • ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๊ฐ€์ง„", + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 48, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Filtered Array", + "orderNumber": 0, + "path": "/interface/value/child/filteredArray.ts", + "indent": 0 + } + ] + }, + "391": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ์œผ๋ฉด ๊ฒฐ๊ณผ ๊ฐ’์€ 0 ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 49, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "First Of", + "orderNumber": 0, + "path": "/interface/value/child/firstOf.ts", + "indent": 0 + } + ] + }, + "392": { + "contexts": [ + "๊นƒ๋ฐœ ๋บ๊ธฐ์—์„œ ์ง€์ •๋œ ํŒ€์˜ ๊นƒ๋ฐœ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 50, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Flag Position", + "orderNumber": 0, + "path": "/interface/value/child/flagPosition.ts", + "indent": 0 + } + ] + }, + "393": { + "contexts": [ + "์ „๋ฐฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(0, 0, 1)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 51, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Forward", + "orderNumber": 0, + "path": "/interface/value/child/forward.ts", + "indent": 0 + } + ] + }, + "394": { + "contexts": [ + "๊ฒŒ์ž„ ์ž์ฒด์— ์ข…์†๋œ ์ „์—ญ ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 52, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Global Variable", + "orderNumber": 0, + "path": "/interface/value/child/globalVariable.ts", + "indent": 0 + } + ] + }, + "395": { + "contexts": [ + "์›”๋“œ์— ๊ฐœ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์˜์›…์„ ์„ ํƒํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ FALSE ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 53, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Has Spawned", + "orderNumber": 0, + "path": "/interface/value/child/hasSpawned.ts", + "indent": 0 + } + ] + }, + "396": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ SET STATUS ์•ก์…˜ ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์ด์™ธ์˜", + "๊ฒŒ์ž„ ๋ฉ”์นด๋‹‰์„ ํ†ตํ•ด ์ง€์ •๋œ ์ƒํƒœ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 54, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Has Status", + "orderNumber": 0, + "path": "/interface/value/child/hasStatus.ts", + "indent": 0 + } + ] + }, + "397": { + "contexts": [ + "ํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ƒ๋ช…๋ ฅ(๋ฐฉ์–ด๋ ฅ ๋ฐ ๋ณดํ˜ธ๋ง‰ ํฌํ•จ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 55, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Health", + "orderNumber": 0, + "path": "/interface/value/child/health.ts", + "indent": 0 + } + ] + }, + "398": { + "contexts": [ + "์˜์›… ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 56, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero", + "orderNumber": 0, + "path": "/interface/value/child/hero.ts", + "indent": 0 + } + ] + }, + "399": { + "contexts": [ + "HERO ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์•„์ด์ฝ˜์œผ๋กœ ํ‘œ์‹œํ•  ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 57, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero Icon String", + "orderNumber": 0, + "path": "/interface/value/child/heroIconString.ts", + "indent": 0 + } + ] + }, + "400": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ์˜์›…์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 58, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Hero Of", + "orderNumber": 0, + "path": "/interface/value/child/heroOf.ts", + "indent": 0 + } + ] + }, + "401": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์— ๋Œ€์‘ํ•˜๋Š” ํšก์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 59, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Angle From Direction", + "orderNumber": 0, + "path": "/interface/value/child/horizontalAngleFromDirection.ts", + "indent": 0 + } + ] + }, + "402": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ „๋ฐฉ์—์„œ ์ง€์ •๋œ ์œ„์น˜๊นŒ์ง€์˜ ํšก์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ•ด๋‹น ์œ„์น˜๊ฐ€ ํ”Œ๋ ˆ์ด์—‰ ์ขŒ์ธก์— ์žˆ๋Š” ๊ฒฝ์šฐ ์–‘์ˆ˜์ด๋ฉฐ,", + "๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ 0์ด๊ฑฐ๋‚˜ ์Œ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 60, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Angle Towards", + "orderNumber": 0, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 0 + } + ] + }, + "403": { + "contexts": [ + "์›”๋“œ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š”", + "๋ฐฉํ–ฅ์˜ ์ƒ๋Œ€์ ์ธ ํšก์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ขŒ์ธก์œผ๋กœ ํšŒ์ „ ์‹œ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "(+/- 180๋„ ๋ฒ”์œ„)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 61, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Facing Angle Of", + "orderNumber": 0, + "path": "/interface/value/child/horizontalFacingAngleOf.ts", + "indent": 0 + } + ] + }, + "404": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ํšก์ถ• ์†๋„(์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์—๋Š” ๋ชจ๋“  ์ข…์ถ• ์›€์ง์ž„์ด ๋ฐฐ์ œ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 62, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Horizontal Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/horizontalSpeedOf.ts", + "indent": 0 + } + ] + }, + "405": { + "contexts": [ + "๋ฐฐ์—ด ๋‚ด์— ์žˆ๋Š” ๊ฐ’์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ -1์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 63, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 0, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 0 + } + ] + }, + "406": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ƒ์กด ์—ฌ๋ถ€ ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 64, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Alive", + "orderNumber": 0, + "path": "/interface/value/child/isAlive.ts", + "indent": 0 + } + ] + }, + "407": { + "contexts": [ + "๊ฒฝ๊ธฐ๊ฐ€ ํ˜„์žฌ ์˜์›… ์„ ํƒ ๋‹จ๊ณ„์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 65, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Assembling Heroes", + "orderNumber": 0, + "path": "/interface/value/child/isAssemblingHeroes.ts", + "indent": 0 + } + ] + }, + "408": { + "contexts": [ + "๊ฒฝ๊ธฐ ์ค‘ ๋ผ์šด๋“œ ์ „ํ™˜ ์‹œ๊ธฐ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 66, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Between Rounds", + "orderNumber": 0, + "path": "/interface/value/child/isBetweenRounds.ts", + "indent": 0 + } + ] + }, + "409": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง€์ •๋œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 67, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Button Held", + "orderNumber": 0, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 0 + } + ] + }, + "410": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง€์ •๋œ ์˜์‚ฌ์†Œํ†ต ์œ ํ˜•", + "(๊ฐ์ • ํ‘œํ˜„, ์Œ์„ฑ ๋Œ€์‚ฌ ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 68, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 0 + } + ] + }, + "411": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์•„๋ฌด ๊ฒƒ์ด๋“  ์˜์‚ฌ์†Œํ†ต ์œ ํ˜•", + "(๊ฐ์ • ํ‘œํ˜„, ์Œ์„ฑ ๋Œ€์‚ฌ ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 69, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAny.ts", + "indent": 0 + } + ] + }, + "412": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ์ • ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 70, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any Emote", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAnyEmote.ts", + "indent": 0 + } + ] + }, + "413": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์Œ์„ฑ ๋Œ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "(์Œ์„ฑ ๋Œ€์‚ฌ์˜ ์ง€์† ์‹œ๊ฐ„์€ 4์ดˆ๋กœ ์ถ”์ •)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 71, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any Voice Line", + "orderNumber": 0, + "path": "/interface/value/child/isCommunicatingAnyVoiceLine.ts", + "indent": 0 + } + ] + }, + "414": { + "contexts": [ + "์Ÿํƒˆ ์ „์žฅ์—์„œ ํ•ด๋‹น ๊ฑฐ์ ์ด ์ž ๊ฒจ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 72, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Control Mode Point Locked", + "orderNumber": 0, + "path": "/interface/value/child/isControlModePointLocked.ts", + "indent": 0 + } + ] + }, + "415": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›…ํฌ๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 73, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Crouching", + "orderNumber": 0, + "path": "/interface/value/child/isCrouching.ts", + "indent": 0 + } + ] + }, + "416": { + "contexts": [ + "ํ˜„์žฌ ๊นƒ๋ฐœ ๋บ๊ธฐ ๊ฒŒ์ž„์ด ์Šน์ž ๊ฒฐ์ •์ „์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 74, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is CTF Mode In Sudden Death", + "orderNumber": 0, + "path": "/interface/value/child/isCTFModeInSuddenDeath.ts", + "indent": 0 + } + ] + }, + "417": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์‚ฌ๋ง ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 75, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Dead", + "orderNumber": 0, + "path": "/interface/value/child/isDead.ts", + "indent": 0 + } + ] + }, + "418": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ฃผ๋ฌด๊ธฐ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 76, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Firing Primary", + "orderNumber": 0, + "path": "/interface/value/child/isFiringPrimary.ts", + "indent": 0 + } + ] + }, + "419": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ๋ณด์กฐ ๋ฌด๊ธฐ ๊ณต๊ฒฉ์ด ์‚ฌ์šฉ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 77, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Firing Secondary", + "orderNumber": 0, + "path": "/interface/value/child/isFiringSecondary.ts", + "indent": 0 + } + ] + }, + "420": { + "contexts": [ + "๊นƒ๋ฐœ ๋บ๊ธฐ์—์„œ ์ง€์ •๋œ ํŒ€์˜ ๊นƒ๋ฐœ์ด ํ•ด๋‹น ํŒ€์˜ ๊ธฐ์ง€์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 78, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Flag At Base", + "orderNumber": 0, + "path": "/interface/value/child/isFlagAtBase.ts", + "indent": 0 + } + ] + }, + "421": { + "contexts": [ + "๊นƒ๋ฐœ ๋บ๊ธฐ์—์„œ ์ƒ๋Œ€ ํŒ€์ด ์ง€์ •๋œ ํŒ€์˜ ๊นƒ๋ฐœ์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 79, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Flag Being Carried", + "orderNumber": 0, + "path": "/interface/value/child/isFlagBeingCarried.ts", + "indent": 0 + } + ] + }, + "422": { + "contexts": [ + "๊ฒฝ๊ธฐ์˜ ์ฃผ์š” ๋‹จ๊ณ„(์ „ํˆฌ ๋ฐ ์ ์ˆ˜ ์‚ฐ์ •์ด ํ—ˆ์šฉ๋˜๋Š” ์‹œ๊ธฐ)๊ฐ€ ์ง„ํ–‰ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 80, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Game In Progress", + "orderNumber": 0, + "path": "/interface/value/child/isGameInProgress.ts", + "indent": 0 + } + ] + }, + "423": { + "contexts": [ + "(ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ) ์ง€์ •๋œ ์˜์›…์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 81, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Hero Being Played", + "orderNumber": 0, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 0 + } + ] + }, + "424": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ณต์ค‘์— ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 82, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Air", + "orderNumber": 0, + "path": "/interface/value/child/isInAir.ts", + "indent": 0 + } + ] + }, + "425": { + "contexts": [ + "๋‘ ์œ„์น˜๊ฐ€ ์„œ๋กœ ๋ณด์ด๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 83, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Line Of Sight", + "orderNumber": 0, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 0 + } + ] + }, + "426": { + "contexts": [ + "๊ฒฝ๊ธฐ๊ฐ€ ํ˜„์žฌ ์ค€๋น„ ๋‹จ๊ณ„์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 84, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Setup", + "orderNumber": 0, + "path": "/interface/value/child/isInSetup.ts", + "indent": 0 + } + ] + }, + "427": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ „ํˆฌ์ค€๋น„์‹ค์— ์žˆ๋Š”์ง€", + "(๋˜ํ•œ ์น˜์œ ๋˜๊ณ  ์˜์›…์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€) ์—ฌ๋ถ€ ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 85, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In Spawn Room", + "orderNumber": 0, + "path": "/interface/value/child/isInSpawnRoom.ts", + "indent": 0 + } + ] + }, + "428": { + "contexts": [ + "LOCATION์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์‹œ์•ผ์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 86, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is In View Angle", + "orderNumber": 0, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 0 + } + ] + }, + "429": { + "contexts": [ + "๊ฒฝ๊ธฐ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 87, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Match Complete", + "orderNumber": 0, + "path": "/interface/value/child/isMatchComplete.ts", + "indent": 0 + } + ] + }, + "430": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๋™ํ•˜๊ณ  ์žˆ๋Š”์ง€", + "์—ฌ๋ถ€(ํ˜„์žฌ ์†๋„๊ฐ€ 0์ธ์ง€ ์—ฌ๋ถ€๋กœ ํŒ๋‹จ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 88, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Moving", + "orderNumber": 0, + "path": "/interface/value/child/isMoving.ts", + "indent": 0 + } + ] + }, + "431": { + "contexts": [ + "์ง€์ •๋œ ๋ชฉํ‘œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ์ ๋ น, ํ˜ธ์œ„ ๋˜๋Š”", + "์ ๋ น/ํ˜ธ์œ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ FALSE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 89, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Objective Complete", + "orderNumber": 0, + "path": "/interface/value/child/isObjectiveComplete.ts", + "indent": 0 + } + ] + }, + "432": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฐฉ์ง€(๋˜๋Š” ๊ฑท๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ‘œ๋ฉด์— ์žˆ๋Š”) ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 90, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Ground", + "orderNumber": 0, + "path": "/interface/value/child/isOnGround.ts", + "indent": 0 + } + ] + }, + "433": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ํ™”๋ฌผ ๋˜๋Š” ์ ๋ น ์ง€์ ์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 91, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Objective", + "orderNumber": 0, + "path": "/interface/value/child/isOnObjective.ts", + "indent": 0 + } + ] + }, + "434": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฒฝ์— ์žˆ๋Š” ์ƒํƒœ(์˜ค๋ฅด๊ฑฐ๋‚˜ ํƒ€๋Š” ์ƒํƒœ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 92, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is On Wall", + "orderNumber": 0, + "path": "/interface/value/child/isOnWall.ts", + "indent": 0 + } + ] + }, + "435": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ดˆ์ƒํ™”๊ฐ€ ํญ์ฃผ ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 93, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Portrait On Fire", + "orderNumber": 0, + "path": "/interface/value/child/isPortraitOnFire.ts", + "indent": 0 + } + ] + }, + "436": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„œ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ์—ฌ๋ถ€", + "(์ด๋™ํ•˜์ง€ ์•Š๊ณ  ๊ณต์ค‘์— ์žˆ๋Š”", + "์ƒํƒœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋กœ ํŒ๋‹จ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 94, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Standing", + "orderNumber": 0, + "path": "/interface/value/child/isStanding.ts", + "indent": 0 + } + ] + }, + "437": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์ด ํ˜„์žฌ ์ˆ˜๋น„ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ์ ๋ น, ํ˜ธ์œ„,", + "๋˜๋Š” ์ ๋ น/ํ˜ธ์œ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ FALSE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 95, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Team On Defense", + "orderNumber": 0, + "path": "/interface/value/child/isTeamOnDefense.ts", + "indent": 0 + } + ] + }, + "438": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์ด ํ˜„์žฌ ๊ณต๊ฒฉ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ์ ๋ น, ํ˜ธ์œ„,", + "๋˜๋Š” ์ ๋ น/ํ˜ธ์œ„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ FALSE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 96, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Team On Offense", + "orderNumber": 0, + "path": "/interface/value/child/isTeamOnOffense.ts", + "indent": 0 + } + ] + }, + "439": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์ด ์ง€์ •๋œ ์กฐ๊ฑด์— ๋Œ€ํ•ด TRUE์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 97, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is True For All", + "orderNumber": 0, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 0 + } + ] + }, + "440": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ง€์ •๋œ ์กฐ๊ฑด์— ๋Œ€ํ•ด TRUE์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 98, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 0, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 0 + } + ] + }, + "441": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ์ˆ  1์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 99, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ability 1", + "orderNumber": 0, + "path": "/interface/value/child/isUsingAbility1.ts", + "indent": 0 + } + ] + }, + "442": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ์ˆ  2๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 100, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ability 2", + "orderNumber": 0, + "path": "/interface/value/child/isUsingAbility2.ts", + "indent": 0 + } + ] + }, + "443": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ถ๊ทน๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 101, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Using Ultimate", + "orderNumber": 0, + "path": "/interface/value/child/isUsingUltimate.ts", + "indent": 0 + } + ] + }, + "444": { + "contexts": [ + "๊ฒฝ๊ธฐ ์‹œ์ž‘์— ์•ž์„œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฐธ์—ฌํ•˜๊ธฐ๋ฅผ", + "๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 102, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Is Waiting For Players", + "orderNumber": 0, + "path": "/interface/value/child/isWaitingForPlayers.ts", + "indent": 0 + } + ] + }, + "445": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์—", + "์ƒ์„ฑ๋œ ํšจ๊ณผ ๋˜๋Š” ์•„์ด์ฝ˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 103, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Created Entity", + "orderNumber": 0, + "path": "/interface/value/child/lastCreatedEntity.ts", + "indent": 0 + } + ] + }, + "446": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ ์‹คํ–‰๋œ ์ตœ๊ทผ์˜", + "START DAMGE MODIFICATION ์•ก์…˜์˜ ID์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 104, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Damage Modification Id", + "orderNumber": 0, + "path": "/interface/value/child/lastDamageModificationId.ts", + "indent": 0 + } + ] + }, + "447": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‹คํ–‰๋œ", + "DAMAGE OVER TIME ์•ก์…˜์˜ ID์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 105, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Damage Over Time Id", + "orderNumber": 0, + "path": "/interface/value/child/lastDamageOverTimeId.ts", + "indent": 0 + } + ] + }, + "448": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‹คํ–‰๋œ", + "HEAL OVER TIME ์•ก์…˜์˜ ID์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 106, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Heal Over Time Id", + "orderNumber": 0, + "path": "/interface/value/child/lastHealOverTimeId.ts", + "indent": 0 + } + ] + }, + "449": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋์— ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 107, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Of", + "orderNumber": 0, + "path": "/interface/value/child/lastOf.ts", + "indent": 0 + } + ] + }, + "450": { + "contexts": [ + "EVENT PLAYER ๋˜๋Š” ์ „์—ญ ๋ ˆ๋ฒจ์—์„œ", + "CREATE HUD TEXT ์•ก์…˜ ๋˜๋Š”", + "CREATE IN-WORLD TEXT ์•ก์…˜์œผ๋กœ", + "์ƒ์„ฑํ•œ ํ…์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 108, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Last Text Id", + "orderNumber": 0, + "path": "/interface/value/child/lastTextId.ts", + "indent": 0 + } + ] + }, + "451": { + "contexts": [ + "์ขŒ์ธก์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(1, 0,0)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 109, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Left", + "orderNumber": 0, + "path": "/interface/value/child/left.ts", + "indent": 0 + } + ] + }, + "452": { + "contexts": [ + "์ œ๊ณต๋œ ์›”๋“œ ์ขŒํ‘œ ๋ฒกํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ๋กœ์ปฌ ์ขŒํ‘œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 110, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Local Vector Of", + "orderNumber": 0, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 0 + } + ] + }, + "453": { + "contexts": [ + "๊ฒฝ๊ธฐ์˜ ํ˜„์žฌ ๋ผ์šด๋“œ์ž…๋‹ˆ๋‹ค. 1๋ถ€ํ„ฐ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 111, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Match Round", + "orderNumber": 0, + "path": "/interface/value/child/matchRound.ts", + "indent": 0 + } + ] + }, + "454": { + "contexts": [ + "ํ˜„์žฌ ๊ฒŒ์ž„ ๋ชจ๋“œ ๋‹จ๊ณ„์˜ ์ž”์—ฌ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 112, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Match Time", + "orderNumber": 0, + "path": "/interface/value/child/matchTime.ts", + "indent": 0 + } + ] + }, + "455": { + "contexts": [ + "๋‘ ์ˆซ์ž ์ค‘ ๋†’์€ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 113, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Max", + "orderNumber": 0, + "path": "/interface/value/child/max.ts", + "indent": 0 + } + ] + }, + "456": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ(๋ฐฉ์–ด๋ ฅ ๋ฐ ๋ณดํ˜ธ๋ง‰ ํฌํ•จ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 114, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Max Health", + "orderNumber": 0, + "path": "/interface/value/child/maxHealth.ts", + "indent": 0 + } + ] + }, + "457": { + "contexts": [ + "๋‘ ์ˆซ์ž ์ค‘ ๋‚ฎ์€ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 115, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Min", + "orderNumber": 0, + "path": "/interface/value/child/min.ts", + "indent": 0 + } + ] + }, + "458": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€์ž…๋‹ˆ๋‹ค.", + "์–ด๋–ค ์ˆซ์ž์ด๋“  MODULO 0์˜ ๊ฒฐ๊ณผ๋Š” 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 116, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Modulo", + "orderNumber": 0, + "path": "/interface/value/child/modulo.ts", + "indent": 0 + } + ] + }, + "459": { + "contexts": [ + "๋‘ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ์˜ ๊ณฑ์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์— ์ˆซ์ž๋ฅผ", + "๊ณฑํ•˜๋ฉด ๋น„์œจ์ด ์ฆ๊ฐ๋œ ๋ฒกํ„ฐ๊ฐ€ ๋„์ถœ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 117, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 0, + "path": "/interface/value/child/multiply.ts", + "indent": 0 + } + ] + }, + "460": { + "contexts": [ + "์„œ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ  ์ƒ์„ฑ ์ง€์ ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ", + "์ง€์ •๋œ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 118, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Nearest Walkable Position", + "orderNumber": 0, + "path": "/interface/value/child/nearestWalkablePosition.ts", + "indent": 0 + } + ] + }, + "461": { + "contexts": [ + "๋ฒกํ„ฐ์˜ ๋‹จ์œ„ ๊ธธ์ด ์ •๊ทœํ™”์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 119, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Normalize", + "orderNumber": 0, + "path": "/interface/value/child/normalize.ts", + "indent": 0 + } + ] + }, + "462": { + "contexts": [ + "๋ฐฉ์–ด๋ ฅ ๋ฐ ๋ณดํ˜ธ๋ง‰์„ ํฌํ•จํ•˜์—ฌ 0๊ณผ 1์‚ฌ์ด๋กœ ", + "์ •๊ทœํ™” ๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ƒ๋ช…๋ ฅ์ž…๋‹ˆ๋‹ค.", + "(์˜ˆ๋ฅผ ๋“ค์–ด, 0์€ ์ƒ๋ช…๋ ฅ ์—†์Œ,", + "0.5๋Š” ์ƒ๋ช…๋ ฅ ์ ˆ๋ฐ˜, 1์€ ์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ ๋“ฑ๋“ฑ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 120, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Normalized Health", + "orderNumber": 0, + "path": "/interface/value/child/normalizedHealth.ts", + "indent": 0 + } + ] + }, + "463": { + "contexts": [ + "์ž…๋ ฅ ์ •๋ณด๊ฐ€ FALSE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 121, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Not", + "orderNumber": 0, + "path": "/interface/value/child/not.ts", + "indent": 0 + } + ] + }, + "464": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ง€์ •๋œ ์ž…๋ ฅ ์ •๋ณด์—", + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "๋น„๊ต ๋˜๋Š” ๋””๋ฒ„๊ทธ์šฉ์œผ๋กœ ์‹ค์ˆ˜ 0์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 122, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Null", + "orderNumber": 0, + "path": "/interface/value/child/null.ts", + "indent": 0 + } + ] + }, + "465": { + "contexts": [ + "์‹ค์ˆ˜ ํ˜•์‹์˜ ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 123, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number", + "orderNumber": 0, + "path": "/interface/value/child/number.ts", + "indent": 0 + }, + { + "topName": "Number", + "orderNumber": 1, + "path": "/interface/value/child/number.ts", + "indent": 4 + } + ] + }, + "466": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด ์‚ฌ๋ง ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 124, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Dead Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfDeadPlayers.ts", + "indent": 0 + } + ] + }, + "467": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ๋กํ•œ ์‚ฌ๋ง ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๊ฒŒ์ž„์ด ์ง„ํ–‰ ์ค‘์ผ๋•Œ๋งŒ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 125, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Deaths", + "orderNumber": 0, + "path": "/interface/value/child/numberOfDeaths.ts", + "indent": 0 + } + ] + }, + "468": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ๋กํ•œ ์ฒ˜์น˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๊ฒŒ์ž„์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 126, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Eliminations", + "orderNumber": 0, + "path": "/interface/value/child/numberOfEliminations.ts", + "indent": 0 + } + ] + }, + "469": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ธฐ๋กํ•œ ๊ฒฐ์ •ํƒ€ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ๊ฒŒ์ž„์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ๋งŒ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 127, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Final Blows", + "orderNumber": 0, + "path": "/interface/value/child/numberOfFinalBlows.ts", + "indent": 0 + } + ] + }, + "470": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ์ง€์ •๋œ ์˜์›…์„", + "ํ”Œ๋ ˆ์ดํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 128, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 0, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 0 + } + ] + }, + "471": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ์—์„œ ์ƒ์กดํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 129, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Living Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfLivingPlayers.ts", + "indent": 0 + } + ] + }, + "472": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด ์กด์žฌํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 130, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Players", + "orderNumber": 0, + "path": "/interface/value/child/numberOfPlayers.ts", + "indent": 0 + } + ] + }, + "473": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ํ™”๋ฌผ ๋˜๋Š”", + "๊ฑฐ์ ์„ ํ™•๋ณดํ•˜๋ ค๋Š” ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 131, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Number Of Players On Objective", + "orderNumber": 0, + "path": "/interface/value/child/numberOfPlayersOnObjective.ts", + "indent": 0 + } + ] + }, + "474": { + "contexts": [ + "ํ˜„์žฌ ํ™œ์„ฑํ™” ์ค‘์ธ ๊ฑฐ์ , ํ™”๋ฌผ ๊ฒฝ์œ ์ง€, ํ™”๋ฌผ ๋ชฉ์ ์ง€์ž…๋‹ˆ๋‹ค.", + "(0, 1, 2 ์ค‘ ํ•˜๋‚˜) ์ ๋ น, ์ ๋ น/ํ˜ธ์œ„, ํ˜ธ์œ„, ์Ÿํƒˆ ์ „์žฅ์—์„œ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 132, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Objective Index", + "orderNumber": 0, + "path": "/interface/value/child/objectiveIndex.ts", + "indent": 0 + } + ] + }, + "475": { + "contexts": [ + "์ง€์ •๋œ ๋ชฉํ‘œ๊ฐ€ ์žˆ๋Š” ์›”๋“œ ๋‚ด์˜ ์œ„์น˜(๊ฑฐ์ , ํ™”๋ฌผ ๊ฒฝ์œ ์ง€, ํ™”๋ฌผ ๋ชฉ์ ์ง€) ์ž…๋‹ˆ๋‹ค.", + "์ ๋ น, ์ ๋ น/ํ˜ธ์œ„, ํ˜ธ์œ„, ์Ÿํƒˆ ์ „์žฅ์—์„œ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 133, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Objective Position", + "orderNumber": 0, + "path": "/interface/value/child/objectivePosition.ts", + "indent": 0 + } + ] + }, + "476": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์˜ ์ƒ๋Œ€ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 134, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Opposite Team Of", + "orderNumber": 0, + "path": "/interface/value/child/oppositeTeamOf.ts", + "indent": 0 + } + ] + }, + "477": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด ์ค‘ ํ•˜๋‚˜๊ฐ€ TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 135, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Or", + "orderNumber": 0, + "path": "/interface/value/child/or.ts", + "indent": 0 + } + ] + }, + "478": { + "contexts": [ + "์›”๋“œ ๋‚ด์˜ ํ™œ์„ฑํ™” ๋œ ํ™”๋ฌผ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 136, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Payload Position", + "orderNumber": 0, + "path": "/interface/value/child/payloadPosition.ts", + "indent": 0 + } + ] + }, + "479": { + "contexts": [ + "ํ•ด๋‹น ํ™œ์„ฑํ™” ํ™”๋ฌผ์˜ ๋ชฉ์ ์ง€๊นŒ์ง€ ์ง„ํ–‰๋ฅ ์ž…๋‹ˆ๋‹ค.(๋น„์œจ๋กœ ํ‘œ์‹œ๋จ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 137, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Payload Progress Percentage", + "orderNumber": 0, + "path": "/interface/value/child/payloadProgressPercentage.ts", + "indent": 0 + } + ] + }, + "480": { + "contexts": [ + "๊นƒ๋ฐœ ๋บ๊ธฐ์—์„œ ์ง€์ •๋œ ํŒ€์˜ ๊นƒ๋ฐœ์„ ์ง€๋‹Œ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "์•„๋ฌด๋„ ๊นƒ๋ฐœ์„ ๊ฐ€์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’์€ NULL์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 138, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Carrying Flag", + "orderNumber": 0, + "path": "/interface/value/child/playerCarryingFlag.ts", + "indent": 0 + } + ] + }, + "481": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€์„ ์—์„œ", + "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํŒ€์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 139, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Closest To Reticle", + "orderNumber": 0, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 0 + } + ] + }, + "482": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง„ ํ”Œ๋ ˆ์ด์–ด ๋ณ€์ˆ˜์˜ ํ˜„์žฌ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 140, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Player Variable", + "orderNumber": 0, + "path": "/interface/value/child/playerVariable.ts", + "indent": 0 + } + ] + }, + "483": { + "contexts": [ + "๊ฒŒ์ž„ ๋‚ด ์ง€์ •๋œ ์Šฌ๋กฏ์„ ์ ์œ ํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 141, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players In Slot", + "orderNumber": 0, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 0 + } + ] + }, + "484": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€์„ ์„ ๊ธฐ์ค€์œผ๋กœ", + "์‹œ์•ผ๊ฐ ์•ˆ์— ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ํŒ€ ๋‹จ์œ„๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 142, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 0, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 0 + } + ] + }, + "485": { + "contexts": [ + "ํŒ€ ๋˜๋Š” ๊ฒฝ๊ธฐ ๋‚ด์—์„œ ์ง€์ •๋œ ์˜์›…์„", + "ํ”Œ๋ ˆ์ดํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 143, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 0, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 0 + } + ] + }, + "486": { + "contexts": [ + "ํ•œ ์œ„์น˜์˜ ์ง€์ •๋œ ๊ฑฐ๋ฆฌ ๋‚ด ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.", + "ํŒ€ ๋˜๋Š” ์‹œ์•ผ ๋ฒ”์œ„๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 144, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Players Within Radius", + "orderNumber": 0, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 0 + } + ] + }, + "487": { + "contexts": [ + "ํ™œ์„ฑํ™”๋œ ๊ฑฐ์ ์—์„œ, ์ ๋ น ์ค‘์ธ ๊ฑฐ์ ์˜ ์ ๋ น ์ง„์ฒ™๋„์ž…๋‹ˆ๋‹ค.(๋น„์œจ๋กœ ํ‘œ์‹œ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 145, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Point Capture Percentage", + "orderNumber": 0, + "path": "/interface/value/child/pointCapturePercentage.ts", + "indent": 0 + } + ] + }, + "488": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์œ„์น˜(๋ฒกํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 146, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Position Of", + "orderNumber": 0, + "path": "/interface/value/child/positionOf.ts", + "indent": 0 + } + ] + }, + "489": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋งŒํผ ์ œ๊ณฑํ•ฉ๋‹ˆ๋‹ค.", + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์Œ์ˆ˜์ด๋ฉด ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 147, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 0, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 0 + } + ] + }, + "490": { + "contexts": [ + "์ง€์ •ํ•œ ์ตœ๋Œ€๊ฐ’ ์ดํ•˜, ์ตœ์†Œ๊ฐ’ ์ด์ƒ", + "๋ฒ”์œ„ ๋‚ด์—์„œ ๋ฌด์ž‘์œ„ ์ •์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 148, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Integer", + "orderNumber": 0, + "path": "/interface/value/child/randomInteger.ts", + "indent": 0 + } + ] + }, + "491": { + "contexts": [ + "์ง€์ •๋œ ์ตœ๋Œ€ ๋ฐ ์ตœ์†Œ๊ฐ’ ๋ฒ”์œ„", + "๋‚ด์—์„œ์˜ ๋ฌด์ž‘์œ„ ์‹ค์ˆ˜๊ฐ’ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 149, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Real", + "orderNumber": 0, + "path": "/interface/value/child/randomReal.ts", + "indent": 0 + } + ] + }, + "492": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๋ฌด์ž‘์œ„ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 150, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Random Value In Array", + "orderNumber": 0, + "path": "/interface/value/child/randomValueInArray.ts", + "indent": 0 + } + ] + }, + "493": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๊ฐ’์„", + "๋ฌด์ž‘์œ„ ์ˆœ์„œ๋กœ ๋‚˜์—ดํ•œ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 151, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Randomized Array", + "orderNumber": 0, + "path": "/interface/value/child/randomizedArray.ts", + "indent": 0 + } + ] + }, + "494": { + "contexts": [ + "RAY CAST HIT POSITION์—์„œ์˜ ํ‘œ๋ฉด ๋ฒ•์„ ", + "(์•„๋ฌด๊ฒƒ๋„ ๋งž์ง€ ์•Š์€ ๊ฒฝ์šฐ END POS์—์„œ START POS)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 152, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 0 + } + ] + }, + "495": { + "contexts": [ + "๋ ˆ์ด์บ์ŠคํŠธ๋กœ ๋งžํžŒ ํ”Œ๋ ˆ์ด์–ด", + "(๋งž์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ NULL)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 153, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 0 + } + ] + }, + "496": { + "contexts": [ + "๋ ˆ์ด์บ์ŠคํŠธ๋กœ ๋งžํžŒ ํ‘œ๋ฉด,", + "์˜ค๋ธŒ์ ํŠธ, ๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ์œ„์น˜", + "(์•„๋ฌด๊ฒƒ๋„ ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ END POS)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 154, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 0, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 0 + } + ] + }, + "497": { + "contexts": [ + "ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’(์žˆ๋Š” ๊ฒฝ์šฐ)์ด", + "์ œ๊ฑฐ๋œ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 155, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Remove From Array", + "orderNumber": 0, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 0 + } + ] + }, + "498": { + "contexts": [ + "์šฐ์ธก์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(-1, 0, 0)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 156, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Right", + "orderNumber": 0, + "path": "/interface/value/child/right.ts", + "indent": 0 + } + ] + }, + "499": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์„ ๋ฐ˜์˜ฌ๋ฆผํ•  ๋Œ€์ƒ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 157, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Round To Integer", + "orderNumber": 0, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 0 + } + ] + }, + "500": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ๊ฐœ๋ณ„ ์ „ํˆฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ๊ฐ’์€ 0์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 158, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Score Of", + "orderNumber": 0, + "path": "/interface/value/child/scoreOf.ts", + "indent": 0 + } + ] + }, + "501": { + "contexts": [ + "ํ˜„์žฌ ๊ฒŒ์ž„ ์ธ์Šคํ„ด์Šค์˜ CPU ์‚ฌ์šฉ๋ฅ (%)์ž…๋‹ˆ๋‹ค.", + "์ด ์ˆ˜์น˜๊ฐ€ 100์— ๊ฐ€๊นŒ์›Œ์ง€๊ฑฐ๋‚˜", + "100์„ ์ดˆ๊ณผํ•˜๋ฉด ๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ", + "์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 159, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load", + "orderNumber": 0, + "path": "/interface/value/child/serverLoad.ts", + "indent": 0 + } + ] + }, + "502": { + "contexts": [ + "์ตœ๊ทผ 2์ดˆ๊ฐ„ ๊ฒŒ์ž„ ์ธ์Šคํ„ด์Šค์˜ ํ‰๊ท  CPU ์‚ฌ์šฉ๋ฅ (%)์ž…๋‹ˆ๋‹ค.", + "์ด ์ˆ˜์น˜๊ฐ€ 100์— ๊ฐ€๊นŒ์›Œ์ง€๊ฑฐ๋‚˜ 100์„ ์ดˆ๊ณผํ•˜๋ฉด", + "๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€", + "์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 160, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load Average", + "orderNumber": 0, + "path": "/interface/value/child/serverLoadAverage.ts", + "indent": 0 + } + ] + }, + "503": { + "contexts": [ + "์ตœ๊ทผ 2์ดˆ๊ฐ„ ๊ฒŒ์ž„ ์ธ์Šคํ„ด์Šค์˜ ์ตœ๋Œ€ CPU ์‚ฌ์šฉ๋ฅ (%)์ž…๋‹ˆ๋‹ค.", + "์ด ์ˆ˜์น˜๊ฐ€ 100์— ๊ฐ€๊นŒ์›Œ์ง€๊ฑฐ๋‚˜ 100์„ ์ดˆ๊ณผํ•˜๋ฉด", + "๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€", + "์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 161, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Server Load Peak", + "orderNumber": 0, + "path": "/interface/value/child/serverLoadPeak.ts", + "indent": 0 + } + ] + }, + "504": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 162, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sine From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/sineFromDegrees.ts", + "indent": 0 + } + ] + }, + "505": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ์‚ฌ์ธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 163, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sine From Radians", + "orderNumber": 0, + "path": "/interface/value/child/sineFromRadians.ts", + "indent": 0 + } + ] + }, + "506": { + "contexts": [ + "์ง€์ •๋œ ํ”Œ๋ ˆ์ด์–ด์˜ ์Šฌ๋กฏ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.", + "ํŒ€์ „์—์„œ ๊ฐ ํŒ€์€ 0์—์„œ 5๊ฐœ์˜ ์Šฌ๋กฏ์„ ๋ณด์œ ํ•˜๋ฉฐ,", + "๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„์—์„œ ์Šฌ๋กฏ ์ˆ˜๋Š” 0์—์„œ 11๊นŒ์ง€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 164, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Slot Of", + "orderNumber": 0, + "path": "/interface/value/child/slotOf.ts", + "indent": 0 + } + ] + }, + "507": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ", + "VALUE RANK์— ๋”ฐ๋ผ ํ‰๊ฐ€ํ•˜๊ณ ", + "์ •๋ ฌํ•ด์„œ ๋งŒ๋“  ์ƒˆ ๋ฐฐ์—ด ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 165, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Sorted Array", + "orderNumber": 0, + "path": "/interface/value/child/sortedArray.ts", + "indent": 0 + } + ] + }, + "508": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์†๋„(์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 166, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/speedOf.ts", + "indent": 0 + } + ] + }, + "509": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฉํ–ฅ์—์„œ ํ”Œ๋ ˆ์ด์–ด์˜", + "ํ˜„์žฌ ์†๋„(์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 167, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Speed Of In Direction", + "orderNumber": 0, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 0 + } + ] + }, + "510": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์˜ ์ œ๊ณฑ๊ทผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 168, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Square Root", + "orderNumber": 0, + "path": "/interface/value/child/squareRoot.ts", + "indent": 0 + } + ] + }, + "511": { + "contexts": [ + "์„ ํƒํ•œ ํ…์ŠคํŠธ์™€ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 169, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "String", + "orderNumber": 0, + "path": "/interface/value/child/string.ts", + "indent": 0 + } + ] + }, + "512": { + "contexts": [ + "๋‘ ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 170, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Subtract", + "orderNumber": 0, + "path": "/interface/value/child/subtract.ts", + "indent": 0 + } + ] + }, + "513": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: ๋„)์˜ ํƒ„์  ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 171, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Tangent From Degrees", + "orderNumber": 0, + "path": "/interface/value/child/tangentFromDegrees.ts", + "indent": 0 + } + ] + }, + "514": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ(๋‹จ์œ„: RAD)์˜ ํƒ„์  ํŠธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 172, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Tangent From Radians", + "orderNumber": 0, + "path": "/interface/value/child/tangentFromRadians.ts", + "indent": 0 + } + ] + }, + "515": { + "contexts": [ + "ํŒ€ ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค. ALL ์˜ต์…˜์€ ํŒ€์ „์˜ ์–‘ํŒ€,", + "๋˜๋Š” ๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„์˜ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 173, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team", + "orderNumber": 0, + "path": "/interface/value/child/team.ts", + "indent": 0 + } + ] + }, + "516": { + "contexts": [ + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ์†Œ์† ํŒ€์ž…๋‹ˆ๋‹ค.", + "๊ฒŒ์ž„ ๋ชจ๋“œ๊ฐ€ ๊ฐœ๋ณ„ ์ „ํˆฌ์ธ ๊ฒฝ์šฐ ํŒ€์€ ALL๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 174, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team Of", + "orderNumber": 0, + "path": "/interface/value/child/teamOf.ts", + "indent": 0 + } + ] + }, + "517": { + "contexts": [ + "์ง€์ •๋œ ํŒ€์˜ ํ˜„์žฌ ์ ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "๊ฐœ๋ณ„ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 175, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Team Score", + "orderNumber": 0, + "path": "/interface/value/child/teamScore.ts", + "indent": 0 + } + ] + }, + "518": { + "contexts": [ + "ํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐฉํ–ฅ ์ž…๋ ฅ ์ •๋ณด์ž…๋‹ˆ๋‹ค. ", + "X ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ํšก๋ฐฉํ–ฅ ์ž…๋ ฅ ์ •๋ณด(์™ผ์ชฝ์ด ์–‘),", + "Z ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ข…๋ฐฉํ–ฅ ์ž…๋ ฅ ์ •๋ณด(์œ„์ชฝ์ด ์–‘)์ธ ๋ฒกํ„ฐ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 176, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Throttle Of", + "orderNumber": 0, + "path": "/interface/value/child/throttleOf.ts", + "indent": 0 + } + ] + }, + "519": { + "contexts": [ + "๊ฒŒ์ž„ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ ๊ฒฝ๊ณผ ์‹œ๊ฐ„(๋‹จ์œ„: ์ดˆ)์ž…๋‹ˆ๋‹ค.", + "(์„ค์ • ๋ฐ ์ „ํ™˜ ์‹œ๊ฐ„ ํฌํ•จ)" + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 177, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Total Time Elapsed", + "orderNumber": 0, + "path": "/interface/value/child/totalTimeElapsed.ts", + "indent": 0 + } + ] + }, + "520": { + "contexts": [ + "TRUE์˜ ๋ถ€์šธ ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 178, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "True", + "orderNumber": 0, + "path": "/interface/value/child/true.ts", + "indent": 0 + } + ] + }, + "521": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ๊ถ๊ทน๊ธฐ ์ถฉ์ „๋Ÿ‰ ๋น„์œจ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 179, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Ultimate Charge Percent", + "orderNumber": 0, + "path": "/interface/value/child/ultimateChargePercent.ts", + "indent": 0 + } + ] + }, + "522": { + "contexts": [ + "์œ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ(0, 1, 0)์˜ ์•ฝ์นญ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 180, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Up", + "orderNumber": 0, + "path": "/interface/value/child/up.ts", + "indent": 0 + } + ] + }, + "523": { + "contexts": [ + "ํ•œ ๋ฐฐ์—ด์˜ ์ง€์ •๋œ ์š”์†Œ์— ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "๋Œ€์ƒ ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 181, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Value In Array", + "orderNumber": 0, + "path": "/interface/value/child/valueInArray.ts", + "indent": 0 + } + ] + }, + "524": { + "contexts": [ + "3๊ฐœ์˜ ์‹ค์ˆ˜(X, Y, Z)๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.", + "X๋Š” ์ขŒ์ธก, Y๋Š” ์œ„, Z๋Š” ์ „๋ฐฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.", + "๋ฒกํ„ฐ๋Š” ์œ„์น˜, ๋ฐฉํ–ฅ, ์†๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 182, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vector", + "orderNumber": 0, + "path": "/interface/value/child/vector.ts", + "indent": 0 + } + ] + }, + "525": { + "contexts": [ + "ํ•œ ์œ„์น˜์—์„œ ๋‹ค๋ฅธ ์œ„์น˜๊นŒ์ง€์˜ ๋ณ€์œ„ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 183, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vector Towards", + "orderNumber": 0, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 0 + } + ] + }, + "526": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์†๋„(๋ฒกํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ‘œ๋ฉด ์œ„์— ์žˆ๋Š” ๊ฒฝ์šฐ,", + "๊ฒฝ์‚ฌ๋กœ๋ฅผ ์˜ค๋ฅด ๋‚ด๋ฆฐ๋‹ค๊ณ  ํ•ด๋„ Y ๊ตฌ์„ฑ์š”์†Œ ์†๋„๋Š” 0์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 184, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Velocity Of", + "orderNumber": 0, + "path": "/interface/value/child/velocityOf.ts", + "indent": 0 + } + ] + }, + "527": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์˜ ๋Œ€์‘ํ•˜๋Š” ์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 185, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle From Direction", + "orderNumber": 0, + "path": "/interface/value/child/verticalAngleFromDirection.ts", + "indent": 0 + } + ] + }, + "528": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์ „๋ฐฉ์—์„œ ์ง€์ •๋œ", + "์œ„์น˜๊นŒ์ง€์˜ ์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ•ด๋‹น ์œ„์น˜๊ฐ€", + "ํ”Œ๋ ˆ์ด์–ด ์•„๋ž˜์— ์žˆ๋Š” ๊ฒฝ์šฐ ์–‘์ˆ˜์ด๋ฉฐ,", + "๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ 0์ด๊ฑฐ๋‚˜ ์Œ์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 186, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle Towards", + "orderNumber": 0, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 0 + } + ] + }, + "529": { + "contexts": [ + "์›”๋“œ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด๊ฐ€", + "๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์˜ ์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์€ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‚ด๋ ค๋‹ค๋ณด๋Š” ๊ฒฝ์šฐ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 187, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Facing Angle Of", + "orderNumber": 0, + "path": "/interface/value/child/verticalFacingAngleOf.ts", + "indent": 0 + } + ] + }, + "530": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ์ข…์ถ• ์†๋„(์ดˆ๋‹น ๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค.", + "์—ฌ๊ธฐ์—๋Š” ๊ฒฝ์‚ฌ๋กœ๋ฅผ ์˜ค๋ฅด๋‚ด๋ฆฌ๋Š” ๋“ฑ์˜ ์›€์ง์ž„ ๋“ฑ", + "๋ชจ๋“  ํšก์ถ• ์ด๋™์ด ๋ฐฐ์ œ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 188, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Vertical Speed Of", + "orderNumber": 0, + "path": "/interface/value/child/verticalSpeedOf.ts", + "indent": 0 + } + ] + }, + "531": { + "contexts": [ + "์ด ๊ทœ์น™์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ํ”ผํ•ด๋ฅผ ๋ฐ›์€ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "ATTACKER ๋˜๋Š” EVENT PLAYER์™€ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 189, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Victim", + "orderNumber": 0, + "path": "/interface/value/child/victim.ts", + "indent": 0 + } + ] + }, + "532": { + "contexts": [ + "์ œ๊ณต๋œ ๋กœ์ปฌ ์ขŒํ‘œ ๋ฒกํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ์›”๋“œ ์ขŒํ‘œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 190, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 0, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 0 + } + ] + }, + "533": { + "contexts": [ + "์ง€์ •๋œ ๋ฒกํ„ฐ์˜ X ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค.", + "์ผ๋ฐ˜์ ์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์˜ ๋ฒกํ„ฐ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 191, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "X Component Of", + "orderNumber": 0, + "path": "/interface/value/child/xComponentOf.ts", + "indent": 0 + } + ] + }, + "534": { + "contexts": [ + "์ง€์ •๋œ ๋ฒกํ„ฐ์˜ Y ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค.", + "์ผ๋ฐ˜์ ์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์˜ ๋ฒกํ„ฐ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 192, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Y Component Of", + "orderNumber": 0, + "path": "/interface/value/child/yComponentOf.ts", + "indent": 0 + } + ] + }, + "535": { + "contexts": [ + "์ง€์ •๋œ ๋ฒกํ„ฐ์˜ Z ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค.", + "์ผ๋ฐ˜์ ์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์˜ ๋ฒกํ„ฐ๋Ÿ‰์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "IValue", + "orderNumber": 193, + "path": "/interface/value/value.ts", + "indent": 4 + }, + { + "topName": "Z Component Of", + "orderNumber": 0, + "path": "/interface/value/child/zComponentOf.ts", + "indent": 0 + } + ] + }, + "536": { + "contexts": [ + "์ ˆ๋Œ€๊ฐ’์„ ๊ณ„์‚ฐํ•  ์‹ค์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Absolute Value", + "orderNumber": 1, + "path": "/interface/value/child/absoluteValue.ts", + "indent": 4 + } + ] + }, + "537": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๋กœ", + "๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์•„๋ฌด ๊ฐ’์ด๋‚˜", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Add", + "orderNumber": 1, + "path": "/interface/value/child/add.ts", + "indent": 4 + } + ] + }, + "538": { + "contexts": [ + "์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๋กœ", + "๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์•„๋ฌด ๊ฐ’์ด๋‚˜", + "์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Add", + "orderNumber": 2, + "path": "/interface/value/child/add.ts", + "indent": 4 + } + ] + }, + "539": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†ํ•œ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "All Dead Players", + "orderNumber": 1, + "path": "/interface/value/child/allDeadPlayers.ts", + "indent": 4 + }, + { + "topName": "All Living Players", + "orderNumber": 1, + "path": "/interface/value/child/allLivingPlayers.ts", + "indent": 4 + }, + { + "topName": "All Players", + "orderNumber": 1, + "path": "/interface/value/child/allPlayers.ts", + "indent": 4 + }, + { + "topName": "All Players Not On Objective", + "orderNumber": 1, + "path": "/interface/value/child/allPlayersNotOnObjective.ts", + "indent": 4 + }, + { + "topName": "All Players On Objective", + "orderNumber": 1, + "path": "/interface/value/child/allPlayersOnObjective.ts", + "indent": 4 + } + ] + }, + "540": { + "contexts": [ + "์ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜์›… ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Allowed Heroes", + "orderNumber": 1, + "path": "/interface/value/child/allowedHeroes.ts", + "indent": 4 + } + ] + }, + "541": { + "contexts": [ + "๊ณ ๋„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Altitude Of", + "orderNumber": 1, + "path": "/interface/value/child/altitudeOf.ts", + "indent": 4 + } + ] + }, + "542": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ ๋‘˜ ๋‹ค TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ๊ฒฝ์šฐ, AND ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "And", + "orderNumber": 1, + "path": "/interface/value/child/and.ts", + "indent": 4 + } + ] + }, + "543": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ ๋‘˜ ๋‹ค TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)์ธ๊ฒฝ์šฐ, AND ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "And", + "orderNumber": 2, + "path": "/interface/value/child/and.ts", + "indent": 4 + } + ] + }, + "544": { + "contexts": [ + "์‚ฌ์ด์˜ ๊ฐ(๋‹จ์œ„: ๋„)์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.", + "์ด ๋ฒกํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •๊ทœํ™”ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Angle Between Vectors", + "orderNumber": 1, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 4 + } + ] + }, + "545": { + "contexts": [ + "์‚ฌ์ด์˜ ๊ฐ(๋‹จ์œ„: ๋„)์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.", + "์ด ๋ฒกํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •๊ทœํ™”ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Angle Between Vectors", + "orderNumber": 2, + "path": "/interface/value/child/angleBetweenVectors.ts", + "indent": 4 + } + ] + }, + "546": { + "contexts": [ + "๊ฒฐ๊ณผ๊ฐ์„ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Angle Difference", + "orderNumber": 1, + "path": "/interface/value/child/angleDifference.ts", + "indent": 4 + } + ] + }, + "547": { + "contexts": [ + "๊ฒฐ๊ณผ๊ฐ์„ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Angle Difference", + "orderNumber": 2, + "path": "/interface/value/child/angleDifference.ts", + "indent": 4 + } + ] + }, + "548": { + "contexts": [ + "๋ง๋ถ™์ผ ๋Œ€์ƒ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Append To Array", + "orderNumber": 1, + "path": "/interface/value/child/appendToArray.ts", + "indent": 4 + } + ] + }, + "549": { + "contexts": [ + "๋ฐฐ์—ด ํ›„๋ฏธ์— ๋ง๋ถ™์ผ ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ ๊ฐ ์š”์†Œ๋ฅผ ๋ง๋ถ™์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Append To Array", + "orderNumber": 2, + "path": "/interface/value/child/appendToArray.ts", + "indent": 4 + } + ] + }, + "550": { + "contexts": [ + "ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Arccosine In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arccosineInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arccosine In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arccosineInRadians.ts", + "indent": 4 + } + ] + }, + "551": { + "contexts": [ + "ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค. " + ], + "usedFiles": [ + { + "topName": "Arcsine In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arcsineInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arcsine In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arcsineInRadians.ts", + "indent": 4 + } + ] + }, + "552": { + "contexts": [ + "ํ•จ์ˆ˜์˜ ๋ถ„์ž ์ž…๋ ฅ ์ •๋ณด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Arctangent In Degrees", + "orderNumber": 1, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 1, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 4 + } + ] + }, + "553": { + "contexts": [ + "ํ•จ์ˆ˜์˜ ๋ถ„๋ชจ ์ž…๋ ฅ ์ •๋ณด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Arctangent In Degrees", + "orderNumber": 2, + "path": "/interface/value/child/arctangentInDegrees.ts", + "indent": 4 + }, + { + "topName": "Arctangent In Radians", + "orderNumber": 2, + "path": "/interface/value/child/arctangentInRadians.ts", + "indent": 4 + } + ] + }, + "554": { + "contexts": [ + "์ง€์ •๋œ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Contains", + "orderNumber": 1, + "path": "/interface/value/child/arrayContains.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 1, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 4 + } + ] + }, + "555": { + "contexts": [ + "๊ฒ€์ƒ‰ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Contains", + "orderNumber": 2, + "path": "/interface/value/child/arrayContains.ts", + "indent": 4 + }, + { + "topName": "Index Of Array Value", + "orderNumber": 2, + "path": "/interface/value/child/indexOfArrayValue.ts", + "indent": 4 + } + ] + }, + "556": { + "contexts": [ + "๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 1, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "557": { + "contexts": [ + "์ฒซ๋ฒˆ์งธ ๋ฒ”์œ„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 2, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "558": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์˜ ์š”์†Œ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์„ค์ • ์˜์—ญ์ด ๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ", + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์ด ๊ฐ–๋Š” ์š”์†Œ์˜ ์ˆ˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Array Slice", + "orderNumber": 3, + "path": "/interface/value/child/arraySlice.ts", + "indent": 4 + } + ] + }, + "559": { + "contexts": [ + "๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•  ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Closest Player To", + "orderNumber": 1, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 4 + } + ] + }, + "560": { + "contexts": [ + "๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†Œ์†๋œ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Closest Player To", + "orderNumber": 2, + "path": "/interface/value/child/closestPlayerTo.ts", + "indent": 4 + } + ] + }, + "561": { + "contexts": [ + "๋น„๊ต ์—ฐ์‚ฐ์˜ ์ขŒ์ธก๋‹จ์ž…๋‹ˆ๋‹ค.", + "์—ฐ์‚ฐ์ด == ๋˜๋Š” != ์ธ ๊ฒฝ์šฐ ์–ด๋–ค ๊ฐ’ ์œ ํ˜•์ด๋“  ์ƒ๊ด€์—†์ง€๋งŒ,", + "๊ทธ ์ด์™ธ์—๋Š” ์‹ค์ˆ˜ ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Compare", + "orderNumber": 1, + "path": "/interface/value/child/compare.ts", + "indent": 4 + } + ] + }, + "562": { + "contexts": [ + "๋น„๊ต ์—ฐ์‚ฐ์˜ ์šฐ์ธก๋‹จ์ž…๋‹ˆ๋‹ค.", + "์—ฐ์‚ฐ์ด == ๋˜๋Š” != ์ธ ๊ฒฝ์šฐ ์–ด๋–ค ๊ฐ’ ์œ ํ˜•์ด๋“  ์ƒ๊ด€์—†์ง€๋งŒ,", + "๊ทธ ์ด์™ธ์—๋Š” ์‹ค์ˆ˜ ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Compare", + "orderNumber": 2, + "path": "/interface/value/child/compare.ts", + "indent": 4 + } + ] + }, + "563": { + "contexts": [ + "์ ์ˆ˜ ๋น„์œจ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Control Mode Scoring Percentage", + "orderNumber": 1, + "path": "/interface/value/child/controlModeScoringPercentage.ts", + "indent": 4 + } + ] + }, + "564": { + "contexts": [ + "๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Cosine From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/cosineFromDegrees.ts", + "indent": 4 + }, + { + "topName": "Sine From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/sineFromDegrees.ts", + "indent": 4 + }, + { + "topName": "Tangent From Degrees", + "orderNumber": 1, + "path": "/interface/value/child/tangentFromDegrees.ts", + "indent": 4 + } + ] + }, + "565": { + "contexts": [ + "๊ฐ(๋‹จ์œ„: RAD)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Cosine From Radians", + "orderNumber": 1, + "path": "/interface/value/child/cosineFromRadians.ts", + "indent": 4 + }, + { + "topName": "Sine From Radians", + "orderNumber": 1, + "path": "/interface/value/child/sineFromRadians.ts", + "indent": 4 + }, + { + "topName": "Tangent From Radians", + "orderNumber": 1, + "path": "/interface/value/child/tangentFromRadians.ts", + "indent": 4 + } + ] + }, + "566": { + "contexts": [ + "๊ฐ€์œ„๊ณฑ์˜ ์™ผ์ชฝ ๋ฒกํ„ฐ ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Cross Product", + "orderNumber": 1, + "path": "/interface/value/child/crossProduct.ts", + "indent": 4 + } + ] + }, + "567": { + "contexts": [ + "๊ฐ€์œ„๊ณฑ์˜ ์˜ค๋ฅธ์ชฝ ๋ฒกํ„ฐ ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Cross Product", + "orderNumber": 2, + "path": "/interface/value/child/crossProduct.ts", + "indent": 4 + } + ] + }, + "568": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฒกํ„ฐ๋ฅผ ๋„์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ™ฉ์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Direction From Angles", + "orderNumber": 1, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 4 + } + ] + }, + "569": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฒกํ„ฐ๋ฅผ ๋„์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Direction From Angles", + "orderNumber": 2, + "path": "/interface/value/child/directionFromAngles.ts", + "indent": 4 + } + ] + }, + "570": { + "contexts": [ + "๊ฒฐ๊ณผ๋กœ ๋„์ถœ๋˜๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Direction Towards", + "orderNumber": 1, + "path": "/interface/value/child/directionTowards.ts", + "indent": 4 + } + ] + }, + "571": { + "contexts": [ + "๊ฒฐ๊ณผ๋กœ ๋„์ถœ๋˜๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๊ฐ€ ๋๋‚˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Direction Towards", + "orderNumber": 2, + "path": "/interface/value/child/directionTowards.ts", + "indent": 4 + } + ] + }, + "572": { + "contexts": [ + "๊ฑฐ๋ฆฌ ์ธก์ •์— ์‚ฌ์šฉ๋˜๋Š” ๋‘ ์œ„์น˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Distance Between", + "orderNumber": 1, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 4 + } + ] + }, + "573": { + "contexts": [ + "๊ฑฐ๋ฆฌ ์ธก์ •์— ์‚ฌ์šฉ๋˜๋Š” ๋‘ ์œ„์น˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Distance Between", + "orderNumber": 2, + "path": "/interface/value/child/distanceBetween.ts", + "indent": 4 + } + ] + }, + "574": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š”", + "๋ฒกํ„ฐ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Divide", + "orderNumber": 1, + "path": "/interface/value/child/divide.ts", + "indent": 4 + } + ] + }, + "575": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š”", + "๋ฒกํ„ฐ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Divide", + "orderNumber": 2, + "path": "/interface/value/child/divide.ts", + "indent": 4 + } + ] + }, + "576": { + "contexts": [ + "์ ๊ณฑ์˜ ๋ฐฑํ„ฐ ํ”ผ์—ฐ์‚ฐ์ž ๋‘ ๊ฐœ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Dot Product", + "orderNumber": 1, + "path": "/interface/value/child/dotProduct.ts", + "indent": 4 + } + ] + }, + "577": { + "contexts": [ + "์ ๊ณฑ์˜ ๋ฐฑํ„ฐ ํ”ผ์—ฐ์‚ฐ์ž ๋‘ ๊ฐœ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Dot Product", + "orderNumber": 2, + "path": "/interface/value/child/dotProduct.ts", + "indent": 4 + } + ] + }, + "578": { + "contexts": [ + "์กด์žฌ๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด, ์•„์ด์ฝ˜ ๊ฐœ์ฒด ๋˜๋Š” ํšจ๊ณผ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Entity Exists", + "orderNumber": 1, + "path": "/interface/value/child/entityExists.ts", + "indent": 4 + } + ] + }, + "579": { + "contexts": [ + "๊ฑฐ๋ฆฌ ์ธก์ •์„ ์œ„ํ•œ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Farthest Player From", + "orderNumber": 1, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 4 + } + ] + }, + "580": { + "contexts": [ + "๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†Œ์†๋œ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Farthest Player From", + "orderNumber": 2, + "path": "/interface/value/child/farthestPlayerFrom.ts", + "indent": 4 + } + ] + }, + "581": { + "contexts": [ + "๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "First Of", + "orderNumber": 1, + "path": "/interface/value/child/firstOf.ts", + "indent": 4 + }, + { + "topName": "Last Of", + "orderNumber": 1, + "path": "/interface/value/child/lastOf.ts", + "indent": 4 + } + ] + }, + "582": { + "contexts": [ + "๊นƒ๋ฐœ ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Flag Position", + "orderNumber": 1, + "path": "/interface/value/child/flagPosition.ts", + "indent": 4 + } + ] + }, + "583": { + "contexts": [ + "์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Has Status", + "orderNumber": 1, + "path": "/interface/value/child/hasStatus.ts", + "indent": 4 + } + ] + }, + "584": { + "contexts": [ + "ํ™•์ธํ•  ์ƒํƒœ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Has Status", + "orderNumber": 2, + "path": "/interface/value/child/hasStatus.ts", + "indent": 4 + } + ] + }, + "585": { + "contexts": [ + "์˜์›… ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Hero Of", + "orderNumber": 1, + "path": "/interface/value/child/heroOf.ts", + "indent": 4 + } + ] + }, + "586": { + "contexts": [ + "ํ™ฉ์ถ•๊ฐ(๋‹จ์œ„: ๋„)์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.", + "์ด ๋ฒกํ„ฐ๋Š” ์—ฐ์‚ฐ ์ „์— ๋‹จ์œ„ ๋ฒกํ„ฐ๋กœ ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle From Direction", + "orderNumber": 1, + "path": "/interface/value/child/horizontalAngleFromDirection.ts", + "indent": 4 + } + ] + }, + "587": { + "contexts": [ + "์ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle Towards", + "orderNumber": 1, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 4 + } + ] + }, + "588": { + "contexts": [ + "๊ฐ ๊ฐ์ด ์ข…๋ฃŒ๋˜๋Š” ์›”๋“œ ๋‚ด ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Horizontal Angle Towards", + "orderNumber": 2, + "path": "/interface/value/child/horizontalAngleTowards.ts", + "indent": 4 + }, + { + "topName": "Vertical Angle Towards", + "orderNumber": 1, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 4 + } + ] + }, + "589": { + "contexts": [ + "๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์˜ ํ™ฉ์ถ•๊ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Horizontal Facing Angle Of", + "orderNumber": 1, + "path": "/interface/value/child/horizontalFacingAngleOf.ts", + "indent": 4 + } + ] + }, + "590": { + "contexts": [ + "์ƒ์กด ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Alive", + "orderNumber": 1, + "path": "/interface/value/child/isAlive.ts", + "indent": 4 + } + ] + }, + "591": { + "contexts": [ + "๋ฒ„ํŠผ์„ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Button Held", + "orderNumber": 1, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 4 + } + ] + }, + "592": { + "contexts": [ + "ํ™•์ธํ•  ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Button Held", + "orderNumber": 2, + "path": "/interface/value/child/isButtonHeld.ts", + "indent": 4 + } + ] + }, + "593": { + "contexts": [ + "์˜์‚ฌ์†Œํ†ต ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Communicating", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 4 + }, + { + "topName": "Is Communicating Any", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAny.ts", + "indent": 4 + } + ] + }, + "594": { + "contexts": [ + "๊ณ ๋ คํ•  ์˜์‚ฌ์†Œํ†ต ์œ ํ˜•์ž…๋‹ˆ๋‹ค.", + "", + "๊ฐ์ • ํ‘œํ˜„์˜ ์ง€์† ์‹œ๊ฐ„์€ ์ •ํ™•ํ•˜๊ฒŒ ์ ์šฉ๋˜๋ฉฐ,", + "์Œ์„ฑ ๋Œ€์‚ฌ์˜ ์ง€์† ์‹œ๊ฐ„์€ 4์ดˆ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.", + "", + "๊ทธ ์ด์™ธ์˜ ์ง€์† ์‹œ๊ฐ„์€ 2์ดˆ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Communicating", + "orderNumber": 2, + "path": "/interface/value/child/isCommunicating.ts", + "indent": 4 + } + ] + }, + "595": { + "contexts": [ + "๊ฐ์ •ํ‘œํ˜„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Communicating Any Emote", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAnyEmote.ts", + "indent": 4 + } + ] + }, + "596": { + "contexts": [ + "์Œ์„ฑ ๋Œ€์‚ฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Communicating Any Voice Line", + "orderNumber": 1, + "path": "/interface/value/child/isCommunicatingAnyVoiceLine.ts", + "indent": 4 + } + ] + }, + "597": { + "contexts": [ + "์›…ํฌ๋ฆฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Crouching", + "orderNumber": 1, + "path": "/interface/value/child/isCrouching.ts", + "indent": 4 + } + ] + }, + "598": { + "contexts": [ + "์‚ฌ๋ง ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Dead", + "orderNumber": 1, + "path": "/interface/value/child/isDead.ts", + "indent": 4 + } + ] + }, + "599": { + "contexts": [ + "์ฃผ๋ฌด๊ธฐ ๊ณต๊ฒฉ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Firing Primary", + "orderNumber": 1, + "path": "/interface/value/child/isFiringPrimary.ts", + "indent": 4 + } + ] + }, + "600": { + "contexts": [ + "๋ณด์กฐ ๋ฌด๊ธฐ ๊ณต๊ฒฉ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Firing Secondary", + "orderNumber": 1, + "path": "/interface/value/child/isFiringSecondary.ts", + "indent": 4 + } + ] + }, + "601": { + "contexts": [ + "๊นƒ๋ฐœ์„ ํ™•์ธํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Flag At Base", + "orderNumber": 1, + "path": "/interface/value/child/isFlagAtBase.ts", + "indent": 4 + }, + { + "topName": "Is Flag Being Carried", + "orderNumber": 1, + "path": "/interface/value/child/isFlagBeingCarried.ts", + "indent": 4 + }, + { + "topName": "Player Carrying Flag", + "orderNumber": 1, + "path": "/interface/value/child/playerCarryingFlag.ts", + "indent": 4 + } + ] + }, + "602": { + "contexts": [ + "ํ”Œ๋ ˆ์ด ํ˜„ํ™ฉ์„ ํ™•์ธํ•  ์˜์›…์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Hero Being Played", + "orderNumber": 1, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 1, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 1, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 4 + } + ] + }, + "603": { + "contexts": [ + "์˜์›… ํ”Œ๋ ˆ์ด ํ˜„ํ™ฉ์„ ํ™•์ธํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Hero Being Played", + "orderNumber": 2, + "path": "/interface/value/child/isHeroBeingPlayed.ts", + "indent": 4 + }, + { + "topName": "Number Of Heroes", + "orderNumber": 2, + "path": "/interface/value/child/numberOfHeroes.ts", + "indent": 4 + }, + { + "topName": "Players On Hero", + "orderNumber": 2, + "path": "/interface/value/child/playersOnHero.ts", + "indent": 4 + } + ] + }, + "604": { + "contexts": [ + "๊ณต์ค‘์— ์žˆ๋Š” ์ƒํƒœ์ธ์ง€๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Air", + "orderNumber": 1, + "path": "/interface/value/child/isInAir.ts", + "indent": 4 + } + ] + }, + "605": { + "contexts": [ + "์‹œ์•ผ ํ™•์ธ์˜ ์‹œ์ž‘ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐœ ์œ„๋กœ", + "2๋ฏธํ„ฐ ์œ„์น˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 1, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "606": { + "contexts": [ + "์‹œ์•ผ ํ™•์ธ์˜ ์ข…๋ฃŒ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐœ ์œ„๋กœ", + "2๋ฏธํ„ฐ ์œ„์น˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 2, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "607": { + "contexts": [ + "๋ฐฉ๋ฒฝ์ด ์‹œ์•ผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.", + "๋ฐฉ๋ฒฝ์ด ์  ์†Œ์œ ์ธ์ง€๋ฅผ ํŒ์ •ํ•  ๋•Œ๋Š”", + "START POS์— ์ œ๊ณต๋œ ํ”Œ๋ ˆ์ด์–ด์˜", + "์†Œ์†(์žˆ๋Š” ๊ฒฝ์šฐ)์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Line Of Sight", + "orderNumber": 3, + "path": "/interface/value/child/isInLineOfSight.ts", + "indent": 4 + } + ] + }, + "608": { + "contexts": [ + "์ „ํˆฌ์ค€๋น„์‹ค ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In Spawn Room", + "orderNumber": 1, + "path": "/interface/value/child/isInSpawnRoom.ts", + "indent": 4 + } + ] + }, + "609": { + "contexts": [ + "์‹œ์•ผ๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 1, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 1, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "610": { + "contexts": [ + "์‹œ์•ผ์— ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  LOCATION์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 2, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + } + ] + }, + "611": { + "contexts": [ + "๋น„๊ต ๋Œ€์ƒ์ธ VIEW ANGLE(๋‹จ์œ„: ๋„)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is In View Angle", + "orderNumber": 3, + "path": "/interface/value/child/isInViewAngle.ts", + "indent": 4 + }, + { + "topName": "Players In View Angle", + "orderNumber": 2, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "612": { + "contexts": [ + "์ด๋™ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Moving", + "orderNumber": 1, + "path": "/interface/value/child/isMoving.ts", + "indent": 4 + } + ] + }, + "613": { + "contexts": [ + "๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๋ชฉํ‘œ์˜ ์ธ๋ฑ์Šค๋กœ์„œ,", + "0์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "๊ฐ ๊ฑฐ์ , ํ™”๋ฌผ ๊ฒฝ์œ ์ง€,", + "ํ™”๋ฌผ ๋ชฉ์ ์ง€์—๋Š”", + "๊ฐ๊ธฐ ๊ณ ์œ ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Objective Complete", + "orderNumber": 1, + "path": "/interface/value/child/isObjectiveComplete.ts", + "indent": 4 + } + ] + }, + "614": { + "contexts": [ + "์ฐฉ์ง€ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is On Ground", + "orderNumber": 1, + "path": "/interface/value/child/isOnGround.ts", + "indent": 4 + } + ] + }, + "615": { + "contexts": [ + "๋ชฉํ‘œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is On Objective", + "orderNumber": 1, + "path": "/interface/value/child/isOnObjective.ts", + "indent": 4 + } + ] + }, + "616": { + "contexts": [ + "๋ฒฝ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is On Wall", + "orderNumber": 1, + "path": "/interface/value/child/isOnWall.ts", + "indent": 4 + } + ] + }, + "617": { + "contexts": [ + "์ดˆ์ƒํ™”๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Portrait On Fire", + "orderNumber": 1, + "path": "/interface/value/child/isPortraitOnFire.ts", + "indent": 4 + } + ] + }, + "618": { + "contexts": [ + "์„œ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ๋Œ€์ƒ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Standing", + "orderNumber": 1, + "path": "/interface/value/child/isStanding.ts", + "indent": 4 + } + ] + }, + "619": { + "contexts": [ + "์—ญํ• ์„ ํ™•์ธํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Team On Defense", + "orderNumber": 1, + "path": "/interface/value/child/isTeamOnDefense.ts", + "indent": 4 + }, + { + "topName": "Is Team On Offense", + "orderNumber": 1, + "path": "/interface/value/child/isTeamOnOffense.ts", + "indent": 4 + } + ] + }, + "620": { + "contexts": [ + "๊ฐ’์„ ํ™•์ธํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is True For All", + "orderNumber": 1, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 1, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 4 + } + ] + }, + "621": { + "contexts": [ + "์ง€์ •๋œ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ํ™•์ธํ•  ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.", + "ํ˜„์žฌ ํ™•์ธ ๋Œ€์ƒ์ธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋Š”", + "CURRENT ARRAY ELEMENT ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "Is True For All", + "orderNumber": 2, + "path": "/interface/value/child/isTrueForAll.ts", + "indent": 4 + }, + { + "topName": "Is True For Any", + "orderNumber": 2, + "path": "/interface/value/child/isTrueForAny.ts", + "indent": 4 + } + ] + }, + "622": { + "contexts": [ + "๊ธฐ์ˆ  1์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Using Ability 1", + "orderNumber": 1, + "path": "/interface/value/child/isUsingAbility1.ts", + "indent": 4 + } + ] + }, + "623": { + "contexts": [ + "๊ธฐ์ˆ  2์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Using Ability 2", + "orderNumber": 1, + "path": "/interface/value/child/isUsingAbility2.ts", + "indent": 4 + } + ] + }, + "624": { + "contexts": [ + "๊ถ๊ทน๊ธฐ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Is Using Ultimate", + "orderNumber": 1, + "path": "/interface/value/child/isUsingUltimate.ts", + "indent": 4 + } + ] + }, + "625": { + "contexts": [ + "๋กœ์ปฌ ์ขŒํ‘œ๋กœ ์ „ํ™˜๋  ์›”๋“œ ์ขŒํ‘œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 1, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + } + ] + }, + "626": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฒกํ„ฐ์™€ ์—ฐ๊ด€๋  ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 2, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 1, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "627": { + "contexts": [ + "๋ฒกํ„ฐ๊ฐ€ ํšŒ์ „๊ณผ ํ‰ํ–‰ ์ด๋™์„ ๋ฐ›๋Š”์ง€(์ผ๋ฐ˜์ ์œผ๋กœ ์œ„์น˜์— ์ ์šฉ),", + "์•„๋‹ˆ๋ฉด ํšŒ์ „๋งŒ ๋ฐ›๋Š”์ง€(์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฉํ–ฅ ๋ฐ ์†๋„์— ์ ์šฉ) ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Local Vector Of", + "orderNumber": 3, + "path": "/interface/value/child/localVectorOf.ts", + "indent": 4 + }, + { + "topName": "World Vector Of", + "orderNumber": 2, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "628": { + "contexts": [ + "์ตœ๋Œ€ ์ƒ๋ช…๋ ฅ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Max Health", + "orderNumber": 1, + "path": "/interface/value/child/maxHealth.ts", + "indent": 4 + } + ] + }, + "629": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”", + "์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Min", + "orderNumber": 1, + "path": "/interface/value/child/min.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 1, + "path": "/interface/value/child/multiply.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 1, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 4 + } + ] + }, + "630": { + "contexts": [ + "์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”", + "์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Min", + "orderNumber": 2, + "path": "/interface/value/child/min.ts", + "indent": 4 + }, + { + "topName": "Multiply", + "orderNumber": 2, + "path": "/interface/value/child/multiply.ts", + "indent": 4 + }, + { + "topName": "Raise To Power", + "orderNumber": 2, + "path": "/interface/value/child/raiseToPower.ts", + "indent": 4 + } + ] + }, + "631": { + "contexts": [ + "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋„๋ณด ๊ฐ€๋Šฅ ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋Œ€์ƒ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Nearest Walkable Position", + "orderNumber": 1, + "path": "/interface/value/child/nearestWalkablePosition.ts", + "indent": 4 + } + ] + }, + "632": { + "contexts": [ + "์ •๊ทœํ™”ํ•  ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Normalize", + "orderNumber": 1, + "path": "/interface/value/child/normalize.ts", + "indent": 4 + } + ] + }, + "633": { + "contexts": [ + "์ •๊ทœํ™”๋œ ์ƒ๋ช…๋ ฅ์„ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Normalized Health", + "orderNumber": 1, + "path": "/interface/value/child/normalizedHealth.ts", + "indent": 4 + } + ] + }, + "634": { + "contexts": [ + "์ด ์ž…๋ ฅ ์ •๋ณด๊ฐ€ FALSE", + "(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)๋ผ๋ฉด", + "NOT ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค.", + "๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ,", + "NOT ๊ฐ’์€ FALSE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Not", + "orderNumber": 1, + "path": "/interface/value/child/not.ts", + "indent": 4 + } + ] + }, + "635": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ์ˆ˜๋ฅผ ํ™•์ธํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Number Of Dead Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfDeadPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Living Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfLivingPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Players", + "orderNumber": 1, + "path": "/interface/value/child/numberOfPlayers.ts", + "indent": 4 + }, + { + "topName": "Number Of Players On Objective", + "orderNumber": 1, + "path": "/interface/value/child/numberOfPlayersOnObjective.ts", + "indent": 4 + } + ] + }, + "636": { + "contexts": [ + "์‚ฌ๋ง ํšŸ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Number Of Deaths", + "orderNumber": 1, + "path": "/interface/value/child/numberOfDeaths.ts", + "indent": 4 + } + ] + }, + "637": { + "contexts": [ + "์ฒ˜์น˜ ํšŸ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Number Of Eliminations", + "orderNumber": 1, + "path": "/interface/value/child/numberOfEliminations.ts", + "indent": 4 + } + ] + }, + "638": { + "contexts": [ + "๊ฒฐ์ •ํƒ€ ๊ฐœ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Number Of Final Blows", + "orderNumber": 1, + "path": "/interface/value/child/numberOfFinalBlows.ts", + "indent": 4 + } + ] + }, + "639": { + "contexts": [ + "๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๋ชฉํ‘œ์˜ ์ธ๋ฑ์Šค๋กœ์„œ,", + "0์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.", + "๊ฐ ๊ฑฐ์ , ํ™”๋ฌผ ๊ฒฝ์œ ์ง€, ํ™”๋ฌผ ๋ชฉ์ ์ง€์—๋Š”", + "๊ฐ๊ธฐ ๊ณ ์œ ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Objective Position", + "orderNumber": 1, + "path": "/interface/value/child/objectivePosition.ts", + "indent": 4 + } + ] + }, + "640": { + "contexts": [ + "์ƒ๋Œ€ ํŒ€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค.", + "ALL์ธ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋Š” ALL์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Opposite Team Of", + "orderNumber": 1, + "path": "/interface/value/child/oppositeTeamOf.ts", + "indent": 4 + } + ] + }, + "641": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ", + "ํ•˜๋‚˜๊ฐ€ TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)", + "์ธ ๊ฒฝ์šฐ, OR ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Or", + "orderNumber": 1, + "path": "/interface/value/child/or.ts", + "indent": 4 + } + ] + }, + "642": { + "contexts": [ + "๋‘ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ", + "ํ•˜๋‚˜๊ฐ€ TRUE(๋˜๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฒฝ์šฐ)", + "์ธ ๊ฒฝ์šฐ, OR ๊ฐ’์€ TRUE์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Or", + "orderNumber": 2, + "path": "/interface/value/child/or.ts", + "indent": 4 + } + ] + }, + "643": { + "contexts": [ + "์ด ํ”Œ๋ ˆ์ด์–ด์˜ ์กฐ์ค€์„ ์œผ๋กœ๋ถ€ํ„ฐ", + "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Player Closest To Reticle", + "orderNumber": 1, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 4 + } + ] + }, + "644": { + "contexts": [ + "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Player Closest To Reticle", + "orderNumber": 2, + "path": "/interface/value/child/playerClosestToReticle.ts", + "indent": 4 + } + ] + }, + "645": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์Šฌ๋กฏ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.", + "ํŒ€์ „์—์„œ ๊ฐ ํŒ€์€ 0์—์„œ 5๊ฐœ์˜ ์Šฌ๋กฏ์„ ๋ณด์œ ํ•˜๋ฉฐ,", + "๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„์—์„œ ์Šฌ๋กฏ ์ˆ˜๋Š” 0์—์„œ 11๊นŒ์ง€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players In Slot", + "orderNumber": 1, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 4 + } + ] + }, + "646": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players In Slot", + "orderNumber": 2, + "path": "/interface/value/child/playersInSlot.ts", + "indent": 4 + } + ] + }, + "647": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ณ ๋ คํ•  ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players In View Angle", + "orderNumber": 3, + "path": "/interface/value/child/playersInViewAngle.ts", + "indent": 4 + } + ] + }, + "648": { + "contexts": [ + "๊ฑฐ๋ฆฌ ์ธก์ •์ด ์‹œ์ž‘๋˜๋Š” ์ค‘๊ฐ„ ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 1, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "649": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•ด", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†ํ•ด ์žˆ์–ด์•ผ ํ•˜๋Š”", + "๋ฐ˜๊ฒฝ(๋ฏธํ„ฐ)์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 2, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "650": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•ด", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†ํ•ด ์žˆ์–ด์•ผ ํ•˜๋Š”", + "ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 3, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + } + ] + }, + "651": { + "contexts": [ + "๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•ด", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‹œ์•ผ ํ™•์ธ์„", + "ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๋ฐ", + "๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Players Within Radius", + "orderNumber": 4, + "path": "/interface/value/child/playersWithinRadius.ts", + "indent": 4 + }, + { + "topName": "LosCheck", + "orderNumber": 0, + "path": "/type/value/losCheck.ts", + "indent": 0 + } + ] + }, + "652": { + "contexts": [ + "์œ„์น˜ ๊ฐ’ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Position Of", + "orderNumber": 1, + "path": "/interface/value/child/positionOf.ts", + "indent": 4 + } + ] + }, + "653": { + "contexts": [ + "ํ—ˆ์šฉ๋œ ์ตœ์†Œ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ์ž…๋ ฅ ์ •๋ณด์— ์‹ค์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ,", + "๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Integer", + "orderNumber": 1, + "path": "/interface/value/child/randomInteger.ts", + "indent": 4 + } + ] + }, + "654": { + "contexts": [ + "ํ—ˆ์šฉ๋œ ์ตœ๋Œ€ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.", + "์ด ์ž…๋ ฅ ์ •๋ณด์— ์‹ค์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ,", + "๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Integer", + "orderNumber": 2, + "path": "/interface/value/child/randomInteger.ts", + "indent": 4 + } + ] + }, + "655": { + "contexts": [ + "๋ฌด์ž‘์œ„ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Randomized Array", + "orderNumber": 1, + "path": "/interface/value/child/randomizedArray.ts", + "indent": 4 + } + ] + }, + "656": { + "contexts": [ + "ํ—ˆ์šฉ๋œ ์ตœ์†Œ ์‹ค์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Real", + "orderNumber": 1, + "path": "/interface/value/child/randomReal.ts", + "indent": 4 + } + ] + }, + "657": { + "contexts": [ + "ํ—ˆ์šฉ๋œ ์ตœ์†Œ ์‹ค์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Real", + "orderNumber": 2, + "path": "/interface/value/child/randomReal.ts", + "indent": 4 + } + ] + }, + "658": { + "contexts": [ + "๋ฌด์ž‘์œ„ ๊ฐ’์„ ์ทจํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.", + "๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฐ’์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ,", + "์ฃผ์–ด์ง„ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Random Value In Array", + "orderNumber": 1, + "path": "/interface/value/child/randomValueInArray.ts", + "indent": 4 + } + ] + }, + "659": { + "contexts": [ + "๋ ˆ์ด์ผ€์ŠคํŠธ์˜ ์‹œ์ž‘ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด,", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐœ ์œ„๋กœ", + "2๋ฏธํ„ฐ ์ง€์ ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 1, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "660": { + "contexts": [ + "๋ ˆ์ด์ผ€์ŠคํŠธ์˜ ์ข…๋ฃŒ ์œ„์น˜์ž…๋‹ˆ๋‹ค.", + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด,", + "ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐœ ์œ„๋กœ", + "2๋ฏธํ„ฐ ์ง€์ ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 2, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "661": { + "contexts": [ + "์ด ๋ ˆ์ด์บ์ŠคํŠธ๋กœ ๋งžํž ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 3, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "662": { + "contexts": [ + "์ด ๋ ˆ์ด์บ์ŠคํŠธ๋กœ ๋งžํž ์ˆ˜ ์—†๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.", + "PLAYERS TO INCLUDE๋ณด๋‹ค ์ด ๋ชฉ๋ก์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 4, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "663": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์†Œ์œ ํ•œ ์˜ค๋ธŒ์ ํŠธ(๋ฐฉ๋ฒฝ ๋˜๋Š” ํฌํƒ‘ ๋“ฑ)๊ฐ€", + "๋ ˆ์ด์บ์ŠคํŠธ์˜ ๋Œ€์ƒ ๋ฒ”์œ„์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ray Cast Hit Normal", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitNormal.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Player", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitPlayer.ts", + "indent": 4 + }, + { + "topName": "Ray Cast Hit Position", + "orderNumber": 5, + "path": "/interface/value/child/rayCastHitPosition.ts", + "indent": 4 + } + ] + }, + "664": { + "contexts": [ + "๊ฐ’์„ ์ œ๊ฑฐํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Remove From Array", + "orderNumber": 1, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 4 + } + ] + }, + "665": { + "contexts": [ + "๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•  ๊ฐ’(์žˆ๋Š” ๊ฒฝ์šฐ)์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ", + "์ผ์น˜ํ•˜๋Š” ๊ฐ ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Remove From Array", + "orderNumber": 2, + "path": "/interface/value/child/removeFromArray.ts", + "indent": 4 + } + ] + }, + "666": { + "contexts": [ + "๋ฐ˜์˜ฌ๋ฆผํ•  ์‹ค์ˆ˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Round To Integer", + "orderNumber": 1, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 4 + } + ] + }, + "667": { + "contexts": [ + "๊ฐ’์„ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๊ทœ์น™์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Round To Integer", + "orderNumber": 2, + "path": "/interface/value/child/roundToInteger.ts", + "indent": 4 + } + ] + }, + "668": { + "contexts": [ + "์ ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Score Of", + "orderNumber": 1, + "path": "/interface/value/child/scoreOf.ts", + "indent": 4 + } + ] + }, + "669": { + "contexts": [ + "์Šฌ๋กฏ ๋ฒˆํ˜ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Slot Of", + "orderNumber": 1, + "path": "/interface/value/child/slotOf.ts", + "indent": 4 + } + ] + }, + "670": { + "contexts": [ + "๋ณต์‚ฌ๋ณธ์„ ์ •๋ ฌํ•  ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Sorted Array", + "orderNumber": 1, + "path": "/interface/value/child/sortedArray.ts", + "indent": 4 + } + ] + }, + "671": { + "contexts": [ + "๋ณต์‚ฌํ•  ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋งˆ๋‹ค ํ‰๊ฐ€ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์ด ๊ฐ’์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ณต์‚ฌ๋ณธ์ด ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.", + "ํ˜„์žฌ ํ™•์ธ ๋Œ€์ƒ์ธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋Š”", + "CURRENT ARRAY ELEMENT ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค." + ], + "usedFiles": [ + { + "topName": "Sorted Array", + "orderNumber": 2, + "path": "/interface/value/child/sortedArray.ts", + "indent": 4 + } + ] + }, + "672": { + "contexts": [ + "์†๋„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Speed Of", + "orderNumber": 1, + "path": "/interface/value/child/speedOf.ts", + "indent": 4 + }, + { + "topName": "Speed Of In Direction", + "orderNumber": 1, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 4 + }, + { + "topName": "Velocity Of", + "orderNumber": 1, + "path": "/interface/value/child/velocityOf.ts", + "indent": 4 + } + ] + }, + "673": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด์˜ ์†๋„๋ฅผ ์ธก์ •ํ•  ์ด๋™ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Speed Of In Direction", + "orderNumber": 2, + "path": "/interface/value/child/speedOfInDirection.ts", + "indent": 4 + } + ] + }, + "674": { + "contexts": [ + "์ œ๊ณฑ๊ทผ์„ ๊ณ„์‚ฐํ•  ์‹ค์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค.", + "์Œ์ˆ˜์˜ ๊ฒฝ์šฐ 0์ด ๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Square Root", + "orderNumber": 1, + "path": "/interface/value/child/squareRoot.ts", + "indent": 4 + } + ] + }, + "675": { + "contexts": [ + "๊ฒฐ๊ณผ๋กœ ํ‘œ์‹œ๋˜๋Š” ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.", + "์ค‘๊ด„ํ˜ธ ์•ˆ์˜ ์ˆซ์ž๋Š” ๋Œ€์‘๊ฐ’์œผ๋กœ ๊ต์ฒด๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 1, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "676": { + "contexts": [ + "ํ…์ŠคํŠธ๋กœ ์ „ํ™˜๋˜์–ด {0}์„ ๋Œ€์ฒดํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 2, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "677": { + "contexts": [ + "ํ…์ŠคํŠธ๋กœ ์ „ํ™˜๋˜์–ด {1}์„ ๋Œ€์ฒดํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 3, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "678": { + "contexts": [ + "ํ…์ŠคํŠธ๋กœ ์ „ํ™˜๋˜์–ด {2}๋ฅผ ๋Œ€์ฒดํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "String", + "orderNumber": 4, + "path": "/interface/value/child/string.ts", + "indent": 4 + } + ] + }, + "679": { + "contexts": [ + "์ขŒ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”", + "์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Subtract", + "orderNumber": 1, + "path": "/interface/value/child/subtract.ts", + "indent": 4 + } + ] + }, + "680": { + "contexts": [ + "์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.", + "๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž ๋˜๋Š” ๋ฒกํ„ฐ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š”", + "์•„๋ฌด ๊ฐ’์ด๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Subtract", + "orderNumber": 2, + "path": "/interface/value/child/subtract.ts", + "indent": 4 + } + ] + }, + "681": { + "contexts": [ + "ํŒ€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Team Of", + "orderNumber": 1, + "path": "/interface/value/child/teamOf.ts", + "indent": 4 + } + ] + }, + "682": { + "contexts": [ + "์ ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํŒ€์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Team Score", + "orderNumber": 1, + "path": "/interface/value/child/teamScore.ts", + "indent": 4 + } + ] + }, + "683": { + "contexts": [ + "๋ฐฉํ–ฅ ์ž…๋ ฅ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Throttle Of", + "orderNumber": 1, + "path": "/interface/value/child/throttleOf.ts", + "indent": 4 + } + ] + }, + "684": { + "contexts": [ + "๊ถ๊ทน๊ธฐ ์ถฉ์ „๋Ÿ‰ ๋น„์œจ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Ultimate Charge Percent", + "orderNumber": 1, + "path": "/interface/value/child/ultimateChargePercent.ts", + "indent": 4 + } + ] + }, + "685": { + "contexts": [ + "์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋Œ€์ƒ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Value In Array", + "orderNumber": 1, + "path": "/interface/value/child/valueInArray.ts", + "indent": 4 + } + ] + }, + "686": { + "contexts": [ + "์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Value In Array", + "orderNumber": 2, + "path": "/interface/value/child/valueInArray.ts", + "indent": 4 + } + ] + }, + "687": { + "contexts": [ + "๋ฒกํ„ฐ์˜ X ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 1, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "688": { + "contexts": [ + "๋ฒกํ„ฐ์˜ Y ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 2, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "689": { + "contexts": [ + "๋ฒกํ„ฐ์˜ Z ๊ฐ’์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector", + "orderNumber": 3, + "path": "/interface/value/child/vector.ts", + "indent": 4 + } + ] + }, + "690": { + "contexts": [ + "๋ณ€์œ„ ๋ฒกํ„ฐ๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector Towards", + "orderNumber": 1, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 4 + } + ] + }, + "691": { + "contexts": [ + "๋ณ€์œ„ ๋ฒกํ„ฐ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vector Towards", + "orderNumber": 2, + "path": "/interface/value/child/vectorTowards.ts", + "indent": 4 + } + ] + }, + "692": { + "contexts": [ + "์ข…์ถ•๊ฐ(๋‹จ์œ„: ๋„) ์ •๋ณด๋ฅผ", + "๊ฐ€์ ธ์˜ฌ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.", + "๋ฒกํ„ฐ๋Š” ์—ฐ์‚ฐ ์ „์— ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vertical Angle From Direction", + "orderNumber": 1, + "path": "/interface/value/child/verticalAngleFromDirection.ts", + "indent": 4 + } + ] + }, + "693": { + "contexts": [ + "์ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ˜„์žฌ ๋ฐ”๋ผ๋ณด๋Š”", + "๋ฐฉํ–ฅ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vertical Angle Towards", + "orderNumber": 2, + "path": "/interface/value/child/verticalAngleTowards.ts", + "indent": 4 + } + ] + }, + "694": { + "contexts": [ + "๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์˜", + "์ข…์ถ•๊ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vertical Facing Angle Of", + "orderNumber": 1, + "path": "/interface/value/child/verticalFacingAngleOf.ts", + "indent": 4 + } + ] + }, + "695": { + "contexts": [ + "์ข…์ถ• ์†๋„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Vertical Speed Of", + "orderNumber": 1, + "path": "/interface/value/child/verticalSpeedOf.ts", + "indent": 4 + } + ] + }, + "696": { + "contexts": [ + "์›”๋“œ ์ขŒํ‘œ๋กœ ์ „ํ™˜๋  ๋กœ์ปฌ ์ขŒํ‘œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "World Vector Of", + "orderNumber": 3, + "path": "/interface/value/child/worldVectorOf.ts", + "indent": 4 + } + ] + }, + "697": { + "contexts": [ + "X ๊ตฌ์„ฑ์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "X Component Of", + "orderNumber": 1, + "path": "/interface/value/child/xComponentOf.ts", + "indent": 4 + } + ] + }, + "698": { + "contexts": [ + "Y ๊ตฌ์„ฑ์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Y Component Of", + "orderNumber": 1, + "path": "/interface/value/child/yComponentOf.ts", + "indent": 4 + } + ] + }, + "699": { + "contexts": [ + "Z ๊ตฌ์„ฑ์š”์†Œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Z Component Of", + "orderNumber": 1, + "path": "/interface/value/child/zComponentOf.ts", + "indent": 4 + } + ] + }, + "700": { + "contexts": [ + "ํŒ€ ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค. ALL ์˜ต์…˜์€ ํŒ€์ „์˜ ์–‘ํŒ€, ๋˜๋Š” ๊ฐœ๋ณ„ ์ „ํˆฌ ๊ฒŒ์ž„์˜ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "TeamConstant", + "orderNumber": 0, + "path": "/type/teamConstant.ts", + "indent": 0 + } + ] + }, + "701": { + "contexts": [ + "- `All` Event๊ฐ€ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.", + "- `Slot1` ~ `Slot11`", + " Event๊ฐ€ ํŠน์ • ์Šฌ๋กฏ์— ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.", + " ํŒ€์ „์—์„œ๋Š” ํ”Œ๋ ˆ์ด์–ด ๋‘ ๋ช…์ด ํ•˜๋‚˜์˜ ์Šฌ๋กฏ (๊ฐ ํŒ€ ๋‹น ํ•˜๋‚˜)์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "EventPlayer", + "orderNumber": 0, + "path": "/type/event/player.ts", + "indent": 0 + } + ] + }, + "702": { + "contexts": [ + "`BARRIERS DO NOT BLOCK LOS`", + "์–ด๋–ค ๋ฐฉ๋ฒฝ๋„ ์‹œ์•ผ๋ฅผ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.", + "", + "`ENEMY BARRIERS BLOCK LOS`", + "์‹œ์•ผ๊ฐ€ ์ ํŒ€์˜ ๋ฐฉ๋ฒฝ์œผ๋กœ ์ธํ•ด ๊ฐ€๋ ค์ง‘๋‹ˆ๋‹ค.", + "", + "`ALL BARRIERS BLOCK LOS`", + "์‹œ์•ผ๊ฐ€ ๋ชจ๋“  ๋ฐฉ๋ฒฝ์œผ๋กœ ์ธํ•ด ๊ฐ€๋ ค์ง‘๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Barrier", + "orderNumber": 0, + "path": "/type/value/barrier.ts", + "indent": 0 + } + ] + }, + "703": { + "contexts": [ + "ํ”Œ๋ ˆ์ด์–ด, ์•„์ด์ฝ˜ ๊ฐœ์ฒด ๋˜๋Š” ํšจ๊ณผ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Entity", + "orderNumber": 0, + "path": "/type/value/entity.ts", + "indent": 0 + } + ] + }, + "704": { + "contexts": [ + "์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ value interface ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค." + ], + "usedFiles": [ + { + "topName": "Value", + "orderNumber": 0, + "path": "/type/value/value.ts", + "indent": 0 + } + ] + }, + "_file": { + "/type/heroConstant.ts": [ + "export type HeroConstantType", + " = '๋ฆฌํผ' ", + " | 'ํŠธ๋ ˆ์ด์„œ'", + " | '๋ฉ”๋ฅด์‹œ'", + " | 'ํ•œ์กฐ'", + " | 'ํ† ๋ฅด๋น„์˜จ'", + " | '๋ผ์ธํ•˜๋ฅดํŠธ'", + " | 'ํŒŒ๋ผ'", + " | '์œˆ์Šคํ„ด'", + " | '์œ„๋„์šฐ๋ฉ”์ด์ปค'", + " | '๋ฐ”์Šคํ‹ฐ์˜จ'", + " | '์‹œ๋ฉ”ํŠธ๋ผ'", + " | '์  ์•ผํƒ€'", + " | '๊ฒ์ง€'", + " | '๋กœ๋“œํ˜ธ๊ทธ'", + " | '๋งฅํฌ๋ฆฌ'", + " | '์ •ํฌ๋žซ'", + " | '์ž๋ฆฌ์•ผ'", + " | '์†”์ ธ: 76'", + " | '๋ฃจ์‹œ์šฐ'", + " | 'D.VA'", + " | '๋ฉ”์ด'", + " | '์†œ๋ธŒ๋ผ'", + " | '๋‘ ํ”ผ์ŠคํŠธ'", + " | '์•„๋‚˜'", + " | '์˜ค๋ฆฌ์‚ฌ'", + " | '๋ธŒ๋ฆฌ๊ธฐํ…Œ'", + " | '๋ชจ์ด๋ผ'", + " | '๋ ˆํ‚น๋ณผ'", + " | '์• ์‰ฌ'", + " | '๋ฐ”ํ‹ฐ์ŠคํŠธ'" + ] + } +} \ No newline at end of file diff --git a/bin/core/language/parse/stageRunner.ts b/bin/core/language/parse/stageRunner.ts new file mode 100644 index 0000000..0045bf7 --- /dev/null +++ b/bin/core/language/parse/stageRunner.ts @@ -0,0 +1,9 @@ +export const StageRunner = (stageNumber: number, lang = `eng`) => { + require(`${__dirname}/${lang}/make_stage${stageNumber}`)() +} + +// for CLI Command Run +try{ + if(`${process.argv[1]}` == __filename) + StageRunner(Number(process.argv[2]), process.argv[3]) +}catch(e){} \ No newline at end of file diff --git a/bin/core/language/reapply/index.ts b/bin/core/language/reapply/index.ts new file mode 100644 index 0000000..95fe394 --- /dev/null +++ b/bin/core/language/reapply/index.ts @@ -0,0 +1,50 @@ +import rimraf from 'rimraf' +import fs from 'fs-extra' +import { getLogger } from '../../generator/logger' + +export const Reapply = (langs = [`kor`]) => { + const Logger = getLogger() + + for(let lang of langs){ + let langId = `[${lang.toUpperCase()}]` + + Logger.debug(`${langId} RE-APPLYING...`) + + // Remove Folder + try{ rimraf.sync(`bin/core/engine/interface`) } + catch(e){ Logger.warn(`${langId} NO EXTRACTED INTERFACE DATA`) } + + try{ rimraf.sync(`bin/core/engine/type`) } + catch(e){ Logger.warn(`${langId} NO EXTRACTED TYPE DATA`) } + + // Remove File + try{ rimraf.sync(`bin/core/language/data/kor.json`) } + catch(e){ Logger.warn(`${langId} NO EXTRACTED LANGUAGE DATA`) } + + // Copy Paste + try{ fs.copySync(`bin/dist/_extracted/interface`, `bin/core/engine/interface`) } + catch(e){ Logger.warn(`${langId} FAILED COPYING INTERFACE DATA`); console.log(e) } + + try{ fs.copySync(`bin/dist/_extracted/type`, `bin/core/engine/type`) } + catch(e){ Logger.warn(`${langId} FAILED COPYING TYPE DATA`); console.log(e) } + + try{ fs.copySync(`bin/dist/_extracted/${lang}.json`, `bin/core/language/data/${lang}.json`) } + catch(e){ Logger.warn(`${langId} FAILED COPYING LANGUAGE DATA`); console.log(e) } + + Logger.debug(`${langId} RE-APPLIED!`) + } +} + +// for CLI Command Run +try{ + if(`${process.argv[1]}` == __dirname){ + let option = process.argv[2] + ;(async ()=>{ + await Reapply() + const Logger = getLogger() + + console.log(``) + Logger.debug(`ALL LANGUAGE FILES RE-APPLIED!`) + })() + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/maintain/README.md b/bin/core/maintain/README.md new file mode 100644 index 0000000..36126a6 --- /dev/null +++ b/bin/core/maintain/README.md @@ -0,0 +1,39 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ’ฌAbout maintenance automation + +> This folder contains maintenance automation scripts. + +- Most scripts that automate maintenance are not fully automated. When you run a script, the path to the file that needs to be manually modified is output on the CLI. Files listed on the CLI must be modified. + + + +## ๐Ÿ‡ Structure + +> The Generator folder contains the following folders & files: + + + +### ๐Ÿš€ add/`*` [bin/core/maintain/add/`*`] + +- This folder contains the automation scripts that are available when new functions or events are added to the Overwatch Workshop. + - `npm run maintain:event` - Add a new event. + - `npm run maintain:value` - Add a new value. + - `npm run maintain:action` - Add a new action. + + + +### โœ‚๏ธ rename [bin/core/maintain/rename] + +- A script that can be modified if the function name of the overwatch workshop has been changed or is incorrectly recorded on the engine. + - `npm run maintain:rename` - Rename a function. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/maintain/add/action.ts b/bin/core/maintain/add/action.ts new file mode 100644 index 0000000..f64c864 --- /dev/null +++ b/bin/core/maintain/add/action.ts @@ -0,0 +1,34 @@ +import { createNewInterface } from './add' +import { getLogger } from '../../generator/logger' + +const Logger = getLogger() + +try{ + if(`${process.argv[1]}` == __filename){ + if(process.argv.length >= 4){ + + // Cloning Array + let params = JSON.parse(JSON.stringify(process.argv)) + + // Remove Script Paths + params.shift(); params.shift() + + // onGoingGlobal + let actionName = params.shift() + + // 'Ongoing - Global' + let actionActualName = params.shift() + createNewInterface(`Action`, actionName, actionActualName, params) + }else{ + // INFO MESSAGE + Logger.debug(`This command generates a new event in the DVA-ENGINE .`) + Logger.debug(`The command includes a function name consisting of a camel-case,`) + Logger.debug(`And it should contain the actual workshop`) + Logger.debug(`grammar name and the name of each params.`) + console.log(``) + Logger.debug(`Command Usage:`) + Logger.debug(` npm run maintain:action <'actual-name'> `) + Logger.debug(`Ex. npm run maintain:action allowButton 'Allow Button' player value team`) + } + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/maintain/add/add.ts b/bin/core/maintain/add/add.ts new file mode 100644 index 0000000..e24cfca --- /dev/null +++ b/bin/core/maintain/add/add.ts @@ -0,0 +1,239 @@ +import { getLogger } from '../../generator/logger' +import { NameMapGenerator } from '../rename' +import { collectInterfaceFiles } from '../../generator/util' +import { writeFileSync, readFileSync } from 'fs' +import { resolve } from 'path' + +const Logger = getLogger() + +export type CreateEventType = `Event` | `Action` | `Value` +export const createNewInterface = async ( + type: CreateEventType = `Event`, + eventName: string, + eventActualName: string, + params: string[], + onlyCheck: boolean = false +) => { + + Logger.debug(`${type.toUpperCase()} NAME: ${eventName}`) + Logger.debug(`${type.toUpperCase()} ACTUAL NAME: ${eventActualName}`) + Logger.debug(`${type.toUpperCase()} PARAM: ${JSON.stringify(params, null, 2)}`) + + // Description Count + const descriptionCount = 1 + params.length + + // ์‹ ๊ทœ ์ฝ”๋ฉ˜ํŠธ์— ์‚ฌ์šฉ๋  ์ฝ”๋ฉ˜ํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. + let checkLanguageDataLastId: number | null = null + let checkIndexOrderNum: number = 0 + let checkLanguageDataLastIdArray: number[] = [] + + // CREATE LANGUAGE DATA + // /bin/core/language/data/* + await collectInterfaceFiles( + `${process.cwd()}/bin/core/language/data`, + + async (collectedDatas) => { + // Check Language Files JSON + for(let { + fileName, + filePath, + fileData + } of collectedDatas){ + + try{ + // + let jsonData = JSON.parse(fileData) + let lastCheckedId: number = -1 + + for(let key of Object.keys(jsonData)){ + try{ + let keyId = Number(key) + + if(!Number.isNaN(keyId)) + if(keyId > lastCheckedId) + lastCheckedId = keyId + + }catch(e){} + + // checkIndexOrderNum + if(typeof jsonData[key].usedFiles != 'undefined'){ + for(let usedFile of jsonData[key].usedFiles){ + // + if(typeof usedFile.path != 'undefined' + && usedFile.path == `/interface/${type.toLowerCase()}/${type.toLowerCase()}.ts`){ + + // Parse Order Number + if(typeof usedFile.orderNumber != 'undefined'){ + + try{ + let parsedOrderNumber = parseInt(usedFile.orderNumber) + if(checkIndexOrderNum == null || checkIndexOrderNum < parsedOrderNumber) + checkIndexOrderNum = parsedOrderNumber + }catch(e){} + } + } + } + } + } + + // IF NOTHING EXIST IT'LL BE PASSED + if(lastCheckedId == -1) continue + + if(checkLanguageDataLastId === null){ + checkLanguageDataLastId = lastCheckedId + }else{ + if(checkLanguageDataLastId != lastCheckedId) + Logger.critical(`LANGUAGE DATA LAST ID HAS CONFLICTED!! (${checkLanguageDataLastId}) != ${lastCheckedId}`) + } + + console.log(``) + + for(let i=1; i<=descriptionCount; i++){ + + let usedFiles = [ + // actualInterface.ts + { + "topName": eventActualName, + "orderNumber": (i-1), + "path": `/interface/${type.toLowerCase()}/child/${eventName}.ts`, + "indent": ((i-1)==0) ? 0 : 4 + } + ] + + if((i-1) == 0){ + // event.ts + usedFiles.push({ + "topName": `I${type}`, + "orderNumber": checkIndexOrderNum + i, + "path": `/interface/${type.toLowerCase()}/${type.toLowerCase()}.ts`, + "indent": 0 + }) + } + + jsonData[checkLanguageDataLastId+i] = { + contexts: [`TODO: ${eventName}(${eventActualName})(OrderNum:${i-1})`], + usedFiles + } + + // console.log(jsonData[descriptionCount]) + if(checkLanguageDataLastIdArray.indexOf(checkLanguageDataLastId+i) == -1) + checkLanguageDataLastIdArray.push(checkLanguageDataLastId+i) + } + + // FILE WRITE + if(!onlyCheck){ + writeFileSync(filePath, JSON.stringify(jsonData, null, 2)) + Logger.debug(`LANGUAGE DATA WRITED`) + }else{ + Logger.debug(`LANGUAGE DATA WILL BE WRITE`) + } + Logger.debug(`\t${fileName} (${filePath})`) + Logger.debug(`\t(CREATED IDs: ${checkLanguageDataLastIdArray.join(', ')})`) + Logger.debug(`Please type contexts directly in each translation.`) + + }catch(e){ + Logger.critical(`LANGUAGE DATA UPDATE PROCESS CRASHED`) + Logger.critical(`\t${fileName} (${filePath}) (${fileData.length})`) + } + } + } + ) + + // Write Event Interface File. + // /bin/core/engine/interface/event/child/*.ts + let eventNameMap = NameMapGenerator(eventName) + + let fileCode = `` + fileCode += `import { } from '../../../type'\n\n` + fileCode += `/**\n` + fileCode += ` * {${checkLanguageDataLastIdArray[0]}}\n` + fileCode += ` */\n` + fileCode += `export interface ${eventNameMap.interfaceName} {${params.length == 0 ? '' : '\n'}` + for(let paramIndex in params){ + let param = params[paramIndex] + fileCode += ` /**\n` + fileCode += ` * {${checkLanguageDataLastIdArray[(Number(paramIndex)+1)]}}\n` + fileCode += ` */\n` + fileCode += ` ${param}: TODO\n` + } + fileCode += `}` + + let interfaceFilePath = resolve(`${process.cwd()}/bin/core/engine/interface/${type.toLowerCase()}/child/${eventNameMap.camelCase}.ts`) + + console.log(``) + if(!onlyCheck){ + writeFileSync(interfaceFilePath, fileCode) + console.log(``) + Logger.debug(`INTERFACE FILE HAS BEEN WRITED`) + Logger.debug(`\t(${interfaceFilePath})`) + }else{ + Logger.debug(`INTERFACE FILE WILL BE WRITE`) + Logger.debug(`\t(${interfaceFilePath})`) + } + + // /bin/core/engine/interface/event/event.ts + let eventIndexPath = resolve(`${process.cwd()}/bin/core/engine/interface/${type.toLowerCase()}/${type.toLowerCase()}.ts`) + let eventIndexData = String(readFileSync(eventIndexPath)) + + let eventIndexDataParse = eventIndexData.split('}') + eventIndexDataParse.pop() + + let newEventIndexCode = eventIndexDataParse.join(`}`) + newEventIndexCode += `\n` + newEventIndexCode += ` /**\n` + newEventIndexCode += ` * {${checkLanguageDataLastIdArray[0]}}\n` + newEventIndexCode += ` */\n` + newEventIndexCode += ` ${eventNameMap.camelCase}: ${eventNameMap.interfaceName}\n` + newEventIndexCode += `}` + + // Import Inject + console.log(``) + if(!onlyCheck){ + newEventIndexCode = newEventIndexCode.replace( + `\n} from './child'`, + `\n ${eventNameMap.interfaceName},\n} from './child'`) + + writeFileSync(eventIndexPath, newEventIndexCode) + + Logger.debug(`${type.toUpperCase()} INDEX FILE HAS BEEN WRITED`) + Logger.debug(` (${eventIndexPath})`) + }else{ + Logger.debug(`${type.toUpperCase()} INDEX FILE WILL BE WRITE`) + Logger.debug(` (${eventIndexPath})`) + } + + // Write Event Interface File. + // /bin/core/engine/interface/event/child/index.ts + + let indexFilePath = resolve(`${process.cwd()}/bin/core/engine/interface/${type.toLowerCase()}/child/index.ts`) + let oldIndexCode = readFileSync(indexFilePath) + let newIndexCode = `${oldIndexCode}\nexport * from './${eventName}'` + + console.log(``) + if(onlyCheck){ + Logger.debug(`CHILD INDEX WILL BE WRITE`) + }else{ + writeFileSync(indexFilePath, newIndexCode) + Logger.debug(`CHILD INDEX DATA HAS BEEN REPLACED`) + } + Logger.debug(`\t(${indexFilePath})`) + + // /bin/core/generator/generatorData.json + let generatorDataFilePath = resolve(`${process.cwd()}/bin/core/generator/generatorData.json`) + let generatorData = JSON.parse(String(readFileSync(generatorDataFilePath))) + + generatorData[`${type.toLowerCase()}`][`${type.toLowerCase()}Name`][`${eventNameMap.camelCase}.ts`] = eventActualName + + console.log(``) + if(onlyCheck){ + Logger.debug(`GENERATOR DATA WILL BE WRITE`) + }else{ + writeFileSync(generatorDataFilePath, JSON.stringify(generatorData, null, 2)) + Logger.debug(`GENERATOR DATA HAS BEEN REPLACED`) + } + Logger.debug(`\t(${generatorDataFilePath})`) + Logger.debug(`\t(${type.toLowerCase()}.${type.toLowerCase()}Name['${eventNameMap.camelCase}.ts'] = '${eventActualName}')`) + + console.log(``) + Logger.debug(`${type} '${eventName}' has been successfully created!`) +} \ No newline at end of file diff --git a/bin/core/maintain/add/event.ts b/bin/core/maintain/add/event.ts new file mode 100644 index 0000000..fb835ff --- /dev/null +++ b/bin/core/maintain/add/event.ts @@ -0,0 +1,34 @@ +import { createNewInterface } from './add' +import { getLogger } from '../../generator/logger' + +const Logger = getLogger() + +try{ + if(`${process.argv[1]}` == __filename){ + if(process.argv.length >= 4){ + + // Cloning Array + let params = JSON.parse(JSON.stringify(process.argv)) + + // Remove Script Paths + params.shift(); params.shift() + + // onGoingGlobal + let eventName = params.shift() + + // 'Ongoing - Global' + let eventActualName = params.shift() + createNewInterface(`Event`, eventName, eventActualName, params) + }else{ + // INFO MESSAGE + Logger.debug(`This command generates a new event in the DVA-ENGINE .`) + Logger.debug(`The command includes a function name consisting of a camel-case,`) + Logger.debug(`And it should contain the actual workshop`) + Logger.debug(`grammar name and the name of each params.`) + console.log(``) + Logger.debug(`Command Usage:`) + Logger.debug(` npm run maintain:event <'actual-name'> `) + Logger.debug(`Ex. npm run maintain:event onGoingGlobal 'Ongoing - Global' player value team`) + } + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/maintain/add/value.ts b/bin/core/maintain/add/value.ts new file mode 100644 index 0000000..86cde30 --- /dev/null +++ b/bin/core/maintain/add/value.ts @@ -0,0 +1,34 @@ +import { createNewInterface } from './add' +import { getLogger } from '../../generator/logger' + +const Logger = getLogger() + +try{ + if(`${process.argv[1]}` == __filename){ + if(process.argv.length >= 4){ + + // Cloning Array + let params = JSON.parse(JSON.stringify(process.argv)) + + // Remove Script Paths + params.shift(); params.shift() + + // onGoingGlobal + let valueName = params.shift() + + // 'Ongoing - Global' + let valueActualName = params.shift() + createNewInterface(`Value`, valueName, valueActualName, params) + }else{ + // INFO MESSAGE + Logger.debug(`This command generates a new event in the DVA-ENGINE .`) + Logger.debug(`The command includes a function name consisting of a camel-case,`) + Logger.debug(`And it should contain the actual workshop`) + Logger.debug(`grammar name and the name of each params.`) + console.log(``) + Logger.debug(`Command Usage:`) + Logger.debug(` npm run maintain:value <'actual-name'> `) + Logger.debug(`Ex. npm run maintain:value allHeroes 'All Heroes' player value team`) + } + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/maintain/rename.ts b/bin/core/maintain/rename.ts new file mode 100644 index 0000000..630b5de --- /dev/null +++ b/bin/core/maintain/rename.ts @@ -0,0 +1,291 @@ +import { camelCaseToPascalCase, collectInterfaceFiles } from '../generator/util' +import { renameSync, writeFileSync } from 'fs' +import stringReplaceAll from 'string-replace-all' +import { getLogger } from '../generator/logger' + +export const typescriptsPaths = [ + `bin/core/engine/interface`, + `bin/core/engine/type` +] +export const generatorDataPath = `${process.cwd()}/bin/core/generator/generatorData.json` +export const reformerDataPath = `${process.cwd()}/bin/core/generator/reformerData.json` + +/** + * A function of an automated maintenance script + * that automatically renames an overwatch workshop + * if the function name is changed + * or the interface name is incorrect. + * + * ์˜ค๋ฒ„์›Œ์น˜ ์›Œํฌ์ƒต์˜ ํ•จ์ˆ˜ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ๊ฑฐ๋‚˜, + * ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ์ด๋ฆ„์„ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•œ, + * ์ž๋™ํ™” ์œ ์ง€๋ณด์ˆ˜ ์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. + */ +export const RenameUpdater = async (targetName: string, fixName: string, debugMode: boolean= true) =>{ + const targetMap = NameMapGenerator(targetName) + const fixMap = NameMapGenerator(fixName) + const fixFilter = NameMapFilter(targetMap, fixMap) + + let Logger = getLogger() + + Logger.debug('------------------------LOG START----------------------------') + + // File Name Replace + for(let typescriptsPath of typescriptsPaths){ + await collectInterfaceFiles( + typescriptsPath, + async (collectedDatas) => { + + // Find Replace Target + for(let { + fileName, + staticPath, + subPath, + filePath + } of collectedDatas){ + + let filters = fixFilter(fileName) + + let newFileName = fileName + for(let filter of filters) + newFileName = stringReplaceAll(newFileName, filter.target, filter.fix) + + if(filters.length != 0){ + let newPath = `${staticPath}/${newFileName}` + + Logger.debug(`File Name has been changed\t[${subPath}${fileName}] -> [${subPath}${newFileName}]`) + if(!debugMode) renameSync(filePath, newPath) + } + } + } + ) + } + + // File Data Replace + for(let typescriptsPath of typescriptsPaths){ + collectInterfaceFiles( + typescriptsPath, + async (collectedDatas) => { + + // Find Replace Target + for(let { + fileName, + fileData, + subPath, + filePath + } of collectedDatas){ + + let filters = fixFilter(fileData) + + let newFileData = fileData + for(let filter of filters) + newFileData = stringReplaceAll(newFileData, filter.target, filter.fix) + + // REPORT STATUS & WRITE + if(filters.length != 0){ + console.log('') + Logger.debug(`File [${subPath}${fileName}] has been changed.`) + + let fileLines = fileData.split(`\n`) + let newFileLines = newFileData.split(`\n`) + for(let fileLineIndex in fileLines){ + let fileLine = fileLines[fileLineIndex] + + if(fixFilter(fileLine).length == 0) continue + + console.log('') + Logger.debug(`File [${subPath}${fileName}] Line:${fileLineIndex}`) + Logger.debug(`[Before: ${fileLine}]`) + Logger.debug(`[After : ${newFileLines[fileLineIndex]}]`) + console.log('') + } + + // fs.write + if(!debugMode) writeFileSync(filePath, newFileData) + } + } + }, + + // `false` will be include index.ts + false + ) + } + + // JSON File Data Replace + let generatorData = require(generatorDataPath) + let isJSON1_Changed = false + for(let type1Name of Object.keys(generatorData)){ + for(let type2Name of Object.keys(generatorData[type1Name])){ + for(let type3Name of Object.keys(generatorData[type1Name][type2Name])){ + // console.log(`${type1Name}.${type2Name}.${type3Name}`) + + // Value backup + let value = generatorData[type1Name][type2Name][type3Name] + let newValue = JSON.parse(JSON.stringify(value)) + + // Value has benn changed + let valueFilters = fixFilter(value) + if(valueFilters.length != 0){ + + for(let filter of valueFilters) + newValue = stringReplaceAll(newValue, filter.target, filter.fix) + } + + let keyFilters = fixFilter(type3Name) + if(keyFilters.length == 0){ + if(valueFilters.length != 0){ + + // It must need to rewrite + if(!isJSON1_Changed) isJSON1_Changed = true + + console.log('') + Logger.debug(`GeneratorData Value Changed [${type1Name}.${type2Name}.${type3Name}]`) + Logger.debug(`Before: [${value}]`) + Logger.debug(`After : [${newValue}]`) + console.log('') + + generatorData[type1Name][type2Name][type3Name] = newValue + } + }else{ + // It must need to rewrite + if(!isJSON1_Changed) isJSON1_Changed = true + + let newKey = String(type3Name) + for(let filter of keyFilters) + newKey = stringReplaceAll(newKey, filter.target, filter.fix) + + // REPORT STATUS + if(valueFilters.length != 0){ + + // CHANGED VALUE + console.log('') + Logger.debug(`GeneratorData Key Changed [${type1Name}.${type2Name}.${type3Name}] -> [${type1Name}.${type2Name}.${newKey}]`) + Logger.debug(`GeneratorData Value Changed [${type1Name}.${type2Name}.${newKey}]`) + Logger.debug(`Before: [${value}]`) + Logger.debug(`After : [${newValue}]`) + console.log('') + + }else{ + + // NON CHANGED VALUE + console.log('') + Logger.debug(`GeneratorData Key Changed [${type1Name}.${type2Name}.${type3Name}] -> [${type1Name}.${type2Name}.${newKey}]`) + console.log('') + } + + generatorData[type1Name][type2Name][newKey] = newValue + delete generatorData[type1Name][type2Name][type3Name] + } + } + } + } + if(!debugMode && isJSON1_Changed) writeFileSync(generatorDataPath, JSON.stringify(generatorData, null, 2)) + + // JSON File Data Replace + let reformerData = require(reformerDataPath) + let isJSON2_Changed = false + for(let type1Name of Object.keys(reformerData)){ + for(let type2Name of Object.keys(reformerData[type1Name])){ + + let valueArray: string[] = reformerData[type1Name][type2Name] + let newValueArray: string[] = [] + + if(Array.isArray(valueArray)){ + for(let valueItem of valueArray){ + let filters = fixFilter(valueItem) + + if(filters.length == 0){ + newValueArray.push(valueItem) + }else{ + // It must need to rewrite + if(!isJSON2_Changed) isJSON2_Changed = true + + let newValueItem = valueItem + for(let filter of filters) + newValueItem = stringReplaceAll(newValueItem, filter.target, filter.fix) + + Logger.debug(`* ReformerData Class function has been changed [${type1Name}.${type2Name}] ${valueItem} -> ${newValueItem}`) + newValueArray.push(newValueItem) + } + } + + reformerData[type1Name][type2Name] = newValueArray + } + } + } + if(!debugMode && isJSON2_Changed) writeFileSync(reformerDataPath, JSON.stringify(reformerData, null, 2)) + + Logger.debug('------------------------LOG ENDED----------------------------') + if(!debugMode){ + Logger.debug(`The changes were applied to the file.`) + Logger.debug(`If anything has been changed, Please re-run .`) + }else{ + Logger.debug(`The changes were not applied to the file.`) + Logger.debug(`If you want to save your changes, enter the third parameter as fix`) + console.log('') + Logger.debug(`Ex: npm run update:rename ${targetName} ${fixName} fix`) + } +} + +export interface INameMap { + camelCase: string + pascalCase: string + upperCase: string + interfaceName: string +} + +export const NameMapGenerator = (camelCase: string) => { + + let pascalCase = camelCaseToPascalCase(camelCase) + let upperCase = pascalCase.toUpperCase() + let interfaceName = `I${pascalCase.split(' ').join('')}` + + let namepMap: INameMap = { + camelCase, + pascalCase, + upperCase, + interfaceName + } + return namepMap +} + +export interface NameMapResult { + target: string + fix : string +} + +export const NameMapFilter = (targetMap: INameMap, fixMap: INameMap) => { + + return (source: string): NameMapResult[] => { + let replaceTarget: NameMapResult[] = [] + for(let targetMapIndex of Object.keys(targetMap)){ + + if(source.indexOf(targetMap[targetMapIndex]) != -1){ + replaceTarget.push({ + target: targetMap[targetMapIndex], + fix: fixMap[targetMapIndex] + }) + } + } + return replaceTarget + } +} + +try{ + if(`${process.argv[1]}` == __filename){ + if(typeof process.argv[2] != 'undefined'){ + RenameUpdater( + process.argv[2], + process.argv[3], + process.argv[4] != 'fix' + ) + }else{ + // INFO MESSAGE + let Logger = getLogger() + Logger.debug(`If you enter the function name (in the form of a camel case)`) + Logger.debug(`to find and replace in all project files, it will automatically replace it.`) + console.log('') + Logger.debug(`npm run update:rename `) + Logger.debug(`(Ex: npm run update:rename applyImpulse applyImpluse)`) + } + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/plugin/importer/index.ts b/bin/core/plugin/importer/index.ts new file mode 100644 index 0000000..0ffdd02 --- /dev/null +++ b/bin/core/plugin/importer/index.ts @@ -0,0 +1 @@ +// TODO \ No newline at end of file diff --git a/bin/core/transform/README.md b/bin/core/transform/README.md new file mode 100644 index 0000000..abc6d64 --- /dev/null +++ b/bin/core/transform/README.md @@ -0,0 +1,55 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ’ฌAbout typescript transpiler + +> DVA engine has provides a better user experience through transfile by Ttypescript. + +- The Transform folder contains Transpiler scripts that bind typescript grammar to an overwatch workshop so that it does not differ language grammatically from typescript when writing an overwatch workshop code. +- It includes the redefining of operators by AST parser in Ttypescript, grammatical modification, and automatic reference to scripts. + + + +## ๐Ÿ‡ Structure + +> The Generator folder contains the following files: + + + +## ๐Ÿ‘ฉ๐Ÿปโ€โœˆ๏ธ index.ts [bin/core/transform/index.ts] + +- A script that executes logic sequentially to modify the grammar. + + + +## ๐Ÿ“ hook.ts [bin/core/transform/hook.ts] + +- A frame configured for more intuitive use of the AST parser plugin feature in the Ttypescript. + + + +## ๐Ÿš€ afterSuccess.ts [bin/core/transform/afterSuccess.ts] + +- A script that runs after Ttypescript's grammatical transformation is complete. +- The script converts the typescript to the Overwatch Workshop language by executing `dist/src/script.ts` or `dist/test/script.ts`. + + + +## ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿซ helper.ts [bin/core/transform/helper.ts] + +- This script contains real logic for changing grammar. + + + +## ๐Ÿ‘โ€๐Ÿ—จ watch.ts [bin/core/transform/watch.ts] + +- This script is a command script that is run through the `npm start' command`. Through the `HMR` function, when a user modifies the source code in the project folder, not all of the source codes, but only the modified files are recompiled, which greatly reduces the compilation time. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/bin/core/transform/afterSuccess.ts b/bin/core/transform/afterSuccess.ts new file mode 100644 index 0000000..7535382 --- /dev/null +++ b/bin/core/transform/afterSuccess.ts @@ -0,0 +1,79 @@ +import { getLogger } from '../generator/logger' +import { exec } from 'child_process' +import { mkdirSync, writeFileSync } from 'fs' + +const Logger = getLogger() +export const resultParse = (result) => { + + // Check Rule Data + let Rule = result.default + if(!Rule + || typeof Rule['collectedCodes'] == 'undefined' + || !Array.isArray(Rule['collectedCodes'])){ + + Logger.debug(`No rule declaration detected.`) + return + } + + let collectedCodes: string[] = Rule.collectedCodes + + try{ mkdirSync(`${process.cwd()}/release`) } catch(e) {} + writeFileSync(`${process.cwd()}/release/script.ows`, collectedCodes.join(`\n\n`)) + + console.log(``) + Logger.debug(`Finished initialization sequence.`) +} + +export const clearRequireCache = () => { + Object.keys(require.cache).forEach((key) => { + delete require.cache[key] + }) +} + +/** + * Trying Load Script + */ +export const loadUserScript = () => { + console.log(``) + Logger.debug(`Load User Script... \t[/src/script.ts]`) + + import(`${process.cwd()}/dist/src/script.js`) + .then((result) => { + Logger.debug(`Loaded User Script. \t[/src/script.ts]`) + resultParse(result) + }) + .catch((e) => { + // If failed, Load Example Script + Logger.debug(`Can't find User Script \t[/src/script.ts]`) + console.log(``) + + Logger.debug(`Load Test Script... \t[/test/script.ts]`) + + import(`${process.cwd()}/dist/test/script.js`) + .then((result)=>{ + Logger.debug(`Loaded Test Script. \t[/test/script.ts]`) + resultParse(result) + }) + .catch((e)=>{ console.log(e) }) + .finally(clearRequireCache) + }) + .finally(clearRequireCache) +} + +try{ + if(`${process.argv[1]}` == __filename){ + + Logger.debug(`Pre Built All User Scripts...`) + exec('ttsc', (error, body)=>{ + if(error){ + Logger.debug(`An error occurred while building.`) + console.log(error) + console.log(body) + return + } + loadUserScript() + }) + }else { + loadUserScript() + } +}catch(e){} \ No newline at end of file diff --git a/bin/core/transform/helper.ts b/bin/core/transform/helper.ts new file mode 100644 index 0000000..00feb63 --- /dev/null +++ b/bin/core/transform/helper.ts @@ -0,0 +1,496 @@ +import * as ts from 'typescript' + +const IS_DEBUG_PRINT = false + +export default class Helper{ + static operatorOverload( + node: ts.Node, + program, + data, + overloader, + callback: ( + node: ts.BinaryExpression, + interfaceVaraible: ts.Expression, + forceApplyTop?: boolean + ) => ts.Expression | undefined + + ){ + + /** + * @description + * Operator Overload + * - Compare Function (Binary Expression) + * - Rule Condition + * - Value Condition + */ + let overrideContext = + overloader( + node, + data.interfaceVaraible, + callback + ) + + if(overrideContext){ + // Check interface is used + data.interfaceVaraibleIsHoisted = true + return overrideContext + } + + /** + * @description + * Operator Overload + * - Compare Function (UnaryExpression) + * - Rule Condition + * - Value Condition + */ + if(ts['isUnaryExpression'](node)){ + // To Unary Rule Condition Definition Support + if(Helper.checkNodeIsTopCondition(node)){ + let symbol = program.getTypeChecker().getSymbolAtLocation(node) + + if(symbol != undefined){ + if(ts.isVariableDeclaration(symbol.valueDeclaration)){ + if(symbol.valueDeclaration.initializer != undefined){ + + let overrideContext = + overloader( + symbol.valueDeclaration.initializer, + data.interfaceVaraible, + callback, + true // Fore Apply Top Condition + ) + + if(overrideContext){ + // Check interface is used + data.interfaceVaraibleIsHoisted = true + return overrideContext + } + } + } + } + } + } + + return + } + + static binaryExpressionOverload( + node: ts.Node, + interfaceVaraible: ts.Expression, + callback: ( + node: ts.BinaryExpression, + interfaceVaraible: ts.Expression, + forceApplyTop?: boolean + ) => ts.Expression | void, + forceApplyTop?: boolean, + + ): ts.Expression | undefined { + + // Parse Nested Parenthesize + if(ts.isParenthesizedExpression(node)){ + if(forceApplyTop === undefined) + forceApplyTop = Helper.checkNodeIsTopCondition(node) + + return Helper.binaryExpressionOverload( + node.expression, + interfaceVaraible, + callback, + forceApplyTop + ) + } + + if(ts.isBinaryExpression(node)){ + + // Parse Nested Left Expression + if(ts.isParenthesizedExpression(node.left) + || ts.isBinaryExpression(node.left)){ + + let overridedExpression = + Helper.binaryExpressionOverload( + node.left, + interfaceVaraible, + callback + ) + + if(overridedExpression) + node.left = overridedExpression + } + + // Parse Nested Right Expression + if(ts.isParenthesizedExpression(node.right) + || ts.isBinaryExpression(node.right)){ + + let overridedExpression = + Helper.binaryExpressionOverload( + node.right, + interfaceVaraible, + callback + ) + + if(overridedExpression) + node.right = overridedExpression + } + + let overrideContext = + callback( + node, + interfaceVaraible, + forceApplyTop + ) + + if(overrideContext) + return overrideContext + } + return + } + + /** + * @description + * Check node is top condition + * of overwatch workshop condition + * + * @example + * + * new Rule({ + * condition: [] + * }) + */ + static checkNodeIsTopCondition(node: ts.Node): boolean { + + // Check [...] + if(ts.isArrayLiteralExpression(node.parent)){ + // Check : + if(ts.isPropertyAssignment(node.parent.parent)){ + // Check condition: + if(node.parent.parent.name.getText() == 'condition'){ + // Check {...} + if(ts.isObjectLiteralExpression(node.parent.parent.parent)){ + // Check new + if(ts.isNewExpression(node.parent.parent.parent.parent)){ + // Check Rule + if(node.parent.parent.parent.parent.expression.getText() == 'Rule') + return true + } + } + } + } + } + return false + } + + static compareOverload( + node: ts.BinaryExpression, + interfaceVaraible: ts.Expression, + forceApplyTop?: boolean + ){ + let token = node.operatorToken.getText() + + // No Deep Type Check + if(token == '===') token = '==' + if(token == '!==') token = '!=' + + switch(token){ + case '==': + case '!=': + case '>=': + case '<=': + case '>': + case '<': + + let compareProperty + + /** + * Check Node Is Top of Rule. + * + * Each method of application is + * different when used in values + * and when used in rules. + */ + if(Helper.checkNodeIsTopCondition(node) || (forceApplyTop === true)){ + + // Rule Condition + compareProperty = + + // interface_1.Value.compare + ts.createPropertyAccess( + + // interface_1.Value + ts.createPropertyAccess( + interfaceVaraible, + // Yep Hard coding + ts.createIdentifier('Classes.Compiler') + ), + ts.createIdentifier('ruleCompare') + ) + + }else{ + // Value Condition + compareProperty = + // interface_1.Value.compare + ts.createPropertyAccess( + + // interface_1.Value + ts.createPropertyAccess( + interfaceVaraible, + ts.createIdentifier('Value') + ), + ts.createIdentifier('compare') + ) + } + + // interface_1.Value.compare() + return ts.createCall( + + // FunctionName + compareProperty, + + // Type + undefined, + + // Paramaeter + [ + node.left, + ts.createIdentifier(`'${token}'`), + node.right, + ] + ) + } + + return + } + + static arithmeticOverload(){ + return ( + node: ts.BinaryExpression, + interfaceVaraible: ts.Expression, + forceApplyTop?: boolean + ) => { + + // Check Token List + let tokenMap = { + and: '&&', + or: '||', + + add: '+', + subtract: '-', + divide: '/', + multiply: '*', + + modulo: '%', + raiseToPower: '**' + } + + for(let type of Object.keys(tokenMap)){ + let needToMatchToken = tokenMap[type] + + if(needToMatchToken && + (node.operatorToken.getText() == needToMatchToken) + ){ + // Value Condition + let property = + // interface_1.Value.compare + ts.createPropertyAccess( + + // interface_1.Value + ts.createPropertyAccess( + interfaceVaraible, + ts.createIdentifier('Value') + ), + ts.createIdentifier(type) + ) + + // interface_1.Value.and() + return ts.createCall( + + // FunctionName + property, + + // Type + undefined, + + // Paramaeter + [ + node.left, + node.right, + ] + ) + } + } + + return + } + } + + static statementTypeAnalyze(node){ + let opt: any = [] + let typeList = [ + "isArray","isString","isNumber","isUnicodeIdentifierStart", + "isWhiteSpaceLike","isWhiteSpaceSingleLine","isLineBreak", + "isOctalDigit","isIdentifierStart","isIdentifierPart","isIdentifierText", + "isExternalModuleNameRelative","isStatementWithLocals","isFileLevelUniqueName", + "isRecognizedTripleSlashComment","isPinnedComment","isBlockOrCatchScoped", + "isCatchClauseVariableDeclarationOrBindingElement","isAmbientModule", + "isModuleWithStringLiteralName","isNonGlobalAmbientModule", + "isEffectiveModuleDeclaration","isShorthandAmbientModuleSymbol", + "isBlockScopedContainerTopLevel","isGlobalScopeAugmentation", + "isExternalModuleAugmentation","isModuleAugmentationExternal", + "isEffectiveExternalModule","isBlockScope","isDeclarationWithTypeParameters", + "isDeclarationWithTypeParameterChildren","isAnyImportSyntax", + "isLateVisibilityPaintedStatement","isAnyImportOrReExport", + "isExternalOrCommonJsModule","isJsonSourceFile","isEnumConst", + "isDeclarationReadonly","isVarConst","isLet","isSuperCall", + "isImportCall","isLiteralImportTypeNode","isPrologueDirective", + "isPartOfTypeNode","isChildOfNodeWithKind","isVariableLike", + "isVariableLikeOrAccessor","isVariableDeclarationInVariableStatement", + "isValidESSymbolDeclaration","isFunctionBlock","isObjectLiteralMethod", + "isObjectLiteralOrClassExpressionMethod","isIdentifierTypePredicate", + "isThisTypePredicate","isSuperProperty","isThisProperty","isJSXTagName", + "isExpressionNode","isInExpressionContext", + "isExternalModuleImportEqualsDeclaration", + "isInternalModuleImportEqualsDeclaration", + "isSourceFileJS","isSourceFileNotJS","isInJSFile","isInJsonFile", + "isInJSDoc","isJSDocIndexSignature","isRequireCall", + "isSingleOrDoubleQuote","isStringDoubleQuoted","isAssignmentDeclaration", + "isDefaultedExpandoInitializer","isExportsIdentifier", + "isModuleExportsPropertyAccessExpression","isBindableObjectDefinePropertyCall", + "isPrototypePropertyAssignment","isSpecialPropertyDeclaration", + "isFunctionSymbol","isDefaultImport","isJSDocConstructSignature", + "isJSDocTypeAlias","isTypeAlias","isRestParameter","isAssignmentTarget", + "isNodeWithPossibleHoistedDeclaration","isValueSignatureDeclaration", + "isDeleteTarget","isNodeDescendantOf","isDeclarationName", + "isLiteralComputedPropertyDeclarationName","isIdentifierName", + "isAliasSymbolDeclaration","isKeyword","isContextualKeyword", + "isNonContextualKeyword","isStringANonContextualKeyword", + "isIdentifierANonContextualKeyword","isTrivia","isAsyncFunction", + "isStringOrNumericLiteralLike","isDynamicName","isWellKnownSymbolSyntactically", + "isPropertyNameLiteral","isKnownSymbol","isESSymbolIdentifier", + "isPushOrUnshiftIdentifier","isParameterDeclaration", + "isIntrinsicJsxName","isThisIdentifier","isLogicalOperator", + "isAssignmentOperator","isAssignmentExpression", + "isDestructuringAssignment","isExpressionWithTypeArgumentsInClassExtendsClause", + "isEntityNameExpression","isPropertyAccessEntityNameExpression", + "isPrototypeAccess","isRightSideOfQualifiedNameOrPropertyAccess", + "isEmptyObjectLiteral","isEmptyArrayLiteral","isCollapsedRange", + "isDeclarationNameOfEnumOrNamespace","isWatchSet","isWriteOnlyAccess", + "isWriteAccess","isAbstractConstructorType","isAbstractConstructorSymbol", + "isUMDExportSymbol","isObjectTypeDeclaration","isTypeNodeKind", + "isParameterPropertyDeclaration","isEmptyBindingPattern", + "isEmptyBindingElement","isParseTreeNode","isNamedDeclaration", + "isNumericLiteral","isBigIntLiteral","isStringLiteral","isJsxText", + "isRegularExpressionLiteral","isNoSubstitutionTemplateLiteral", + "isTemplateHead","isTemplateMiddle","isTemplateTail","isIdentifier", + "isQualifiedName","isComputedPropertyName","isTypeParameterDeclaration", + "isParameter","isDecorator","isPropertySignature","isPropertyDeclaration", + "isMethodSignature","isMethodDeclaration","isConstructorDeclaration", + "isGetAccessorDeclaration","isSetAccessorDeclaration", + "isCallSignatureDeclaration","isConstructSignatureDeclaration", + "isIndexSignatureDeclaration","isGetOrSetAccessorDeclaration", + "isTypePredicateNode","isTypeReferenceNode","isFunctionTypeNode", + "isConstructorTypeNode","isTypeQueryNode","isTypeLiteralNode", + "isArrayTypeNode","isTupleTypeNode","isUnionTypeNode", + "isIntersectionTypeNode","isConditionalTypeNode","isInferTypeNode", + "isParenthesizedTypeNode","isThisTypeNode","isTypeOperatorNode", + "isIndexedAccessTypeNode","isMappedTypeNode","isLiteralTypeNode", + "isImportTypeNode","isObjectBindingPattern","isArrayBindingPattern", + "isBindingElement","isArrayLiteralExpression", + "isObjectLiteralExpression","isPropertyAccessExpression", + "isElementAccessExpression","isCallExpression","isNewExpression", + "isTaggedTemplateExpression","isTypeAssertion","isParenthesizedExpression", + "isFunctionExpression","isArrowFunction","isDeleteExpression", + "isTypeOfExpression","isVoidExpression","isAwaitExpression", + "isPrefixUnaryExpression","isPostfixUnaryExpression", + "isBinaryExpression","isConditionalExpression","isTemplateExpression", + "isYieldExpression","isSpreadElement","isClassExpression", + "isOmittedExpression","isExpressionWithTypeArguments","isAsExpression", + "isNonNullExpression","isMetaProperty","isTemplateSpan", + "isSemicolonClassElement","isBlock","isVariableStatement", + "isEmptyStatement","isExpressionStatement","isIfStatement", + "isDoStatement","isWhileStatement","isForStatement","isForInStatement", + "isForOfStatement","isContinueStatement","isBreakStatement", + "isBreakOrContinueStatement","isReturnStatement","isWithStatement", + "isSwitchStatement","isLabeledStatement","isThrowStatement", + "isTryStatement","isDebuggerStatement","isVariableDeclaration", + "isVariableDeclarationList","isFunctionDeclaration","isClassDeclaration", + "isInterfaceDeclaration","isTypeAliasDeclaration","isEnumDeclaration", + "isModuleDeclaration","isModuleBlock","isCaseBlock","isNamespaceExportDeclaration", + "isImportEqualsDeclaration","isImportDeclaration","isImportClause", + "isNamespaceImport","isNamedImports","isImportSpecifier","isExportAssignment", + "isExportDeclaration","isNamedExports","isExportSpecifier","isMissingDeclaration", + "isExternalModuleReference","isJsxElement","isJsxSelfClosingElement", + "isJsxOpeningElement","isJsxClosingElement","isJsxFragment","isJsxOpeningFragment", + "isJsxClosingFragment","isJsxAttribute","isJsxAttributes","isJsxSpreadAttribute", + "isJsxExpression","isCaseClause","isDefaultClause","isHeritageClause", + "isCatchClause","isPropertyAssignment","isShorthandPropertyAssignment", + "isSpreadAssignment","isEnumMember","isSourceFile","isBundle", + "isUnparsedSource","isJSDocTypeExpression","isJSDocAllType", + "isJSDocUnknownType","isJSDocNullableType","isJSDocNonNullableType", + "isJSDocOptionalType","isJSDocFunctionType","isJSDocVariadicType", + "isJSDoc","isJSDocAugmentsTag","isJSDocClassTag","isJSDocEnumTag", + "isJSDocThisTag","isJSDocParameterTag","isJSDocReturnTag","isJSDocTypeTag", + "isJSDocTemplateTag","isJSDocTypedefTag","isJSDocPropertyTag", + "isJSDocPropertyLikeTag","isJSDocTypeLiteral","isJSDocCallbackTag", + "isJSDocSignature","isSyntaxList","isNode","isNodeKind","isToken", + "isNodeArray","isLiteralKind","isLiteralExpression","isTemplateLiteralKind", + "isTemplateLiteralToken","isTemplateMiddleOrTemplateTail", + "isImportOrExportSpecifier","isStringTextContainingNode", + "isGeneratedIdentifier","isModifierKind","isParameterPropertyModifier", + "isClassMemberModifier","isModifier","isEntityName","isPropertyName", + "isBindingName","isFunctionLike","isFunctionLikeDeclaration", + "isFunctionLikeKind","isFunctionOrModuleBlock","isClassElement", + "isClassLike","isAccessor","isMethodOrAccessor","isTypeElement", + "isClassOrTypeElement","isObjectLiteralElementLike","isTypeNode", + "isFunctionOrConstructorTypeNode","isBindingPattern","isAssignmentPattern", + "isArrayBindingElement","isDeclarationBindingElement", + "isBindingOrAssignmentPattern","isObjectBindingOrAssignmentPattern", + "isArrayBindingOrAssignmentPattern", + "isPropertyAccessOrQualifiedNameOrImportTypeNode", + "isPropertyAccessOrQualifiedName","isCallLikeExpression", + "isCallOrNewExpression","isTemplateLiteral","isLeftHandSideExpression", + "isUnaryExpression","isUnaryExpressionWithWrite","isExpression", + "isAssertionExpression","isPartiallyEmittedExpression", + "isNotEmittedStatement","isNotEmittedOrPartiallyEmittedNode", + "isIterationStatement","isForInOrOfStatement","isConciseBody","isFunctionBody", + "isForInitializer","isModuleBody","isNamespaceBody","isJSDocNamespaceBody", + "isNamedImportBindings","isModuleOrEnumDeclaration","isDeclaration", + "isDeclarationStatement","isStatementButNotDeclaration","isStatement", + "isModuleReference","isJsxTagNameExpression","isJsxChild","isJsxAttributeLike", + "isStringLiteralOrJsxExpression","isJsxOpeningLikeElement", + "isCaseOrDefaultClause","isJSDocNode","isJSDocCommentContainingNode", + "isJSDocTag","isSetAccessor","isGetAccessor","isObjectLiteralElement", + "isTypeReferenceType","isStringLiteralLike","isNamedImportsOrExports", + "isUrl","isRootedDiskPath","isDiskPathRoot","isImplicitGlob", + "isSupportedSourceFileName","isAnySupportedFileExtension","isCheckJsEnabledForFile", + "isJsonEqual","isJSDocLikeText","isExternalModule","isDeclarationFileName", + "isTraceEnabled","isExportsOrModuleExportsOrAlias","isInstantiatedModule", + "isInternalName","isLocalName","isExportName","isCommaSequence", + "isOuterExpression","isRawSourceMap","isSourceMapping","isSimpleCopiableExpression", + "isEmittedFileOfProgram","isProgramUptoDate","isPathInNodeModulesStartingWithDot", + "isJsPrivate","isInRightSideOfInternalImportEqualsDeclaration", + "isCallExpressionTarget","isNewExpressionTarget","isCallOrNewExpressionTarget", + "isJumpStatementTarget","isLabelOfLabeledStatement","isLabelName","isTagName", + "isRightSideOfQualifiedName","isRightSideOfPropertyAccess", + "isNameOfModuleDeclaration","isNameOfFunctionDeclaration", + "isLiteralNameOfPropertyDeclarationOrIndexAccess", + "isExpressionOfExternalModuleImportEqualsDeclaration","isThis","isInString", + "isInsideJsxElementOrAttribute","isInTemplateString","isInJSXText", + "isPossiblyTypeArgumentPosition","isInComment","isComment", + "isStringOrRegularExpressionOrTemplateLiteral","isPunctuation", + "isInsideTemplateLiteral","isAccessibilityModifier", + "isArrayLiteralOrObjectLiteralDestructuringPattern", + "isInReferenceComment","isInNonReferenceComment","isTypeKeyword", + "isExternalModuleSymbol","isObjectBindingElementWithoutPropertyName", + "isMemberSymbolInBaseType","isFirstDeclarationOfSymbolParameter", + "isImportOrExportSpecifierName","isEqualityOperatorKind", + "isStringLiteralOrTemplate", + "isReturnStatementWithFixablePromiseHandler","isFixablePromiseHandler" + ] + + for(let typeItem of typeList){ + try{ + if(ts[typeItem](node)) + opt.push(typeItem) + }catch(e){} + } + return opt + } +} \ No newline at end of file diff --git a/bin/core/transform/hook.ts b/bin/core/transform/hook.ts new file mode 100644 index 0000000..3051670 --- /dev/null +++ b/bin/core/transform/hook.ts @@ -0,0 +1,99 @@ +// transformer1-module +import * as ts from 'typescript' + +/** + * @description + * Code Template for override typescript grammar + */ +export const Hook = ({ + initialize, + context, + file +}: { + initialize?: (param: { + program: ts.Program, + pluginOptions + ctx: ts.TransformationContext + sourceFile: ts.SourceFile + }) => void + + context?: (param: { + program: ts.Program + pluginOptions + ctx: ts.TransformationContext + sourceFile: ts.SourceFile + node: ts.Node + }) => void | ts.Node + + file?: ((param: { + program: ts.Program + pluginOptions + ctx: ts.TransformationContext + sourceFile: ts.SourceFile + }) => void | ts.SourceFile) +}) => { + + // Actual Module Code + return function(program: ts.Program, pluginOptions: {}) { + + return (ctx: ts.TransformationContext) => { + return (originSourceFile: ts.SourceFile) => { + let sourceFile = originSourceFile + + // Initialize Sequqence + if(initialize){ + initialize({ + program, + pluginOptions, + ctx, + sourceFile + }) + } + + // Context Override + function contextOverride(node: ts.Node): ts.Node { + + // Context Override Sequence + if(context){ + let overrideRequest = + context({ + program, + pluginOptions, + ctx, + sourceFile, + node + }) + + // If a value of + // type ts.Node is returned, + // override with that context. + if(overrideRequest) return overrideRequest + } + + return ts.visitEachChild(node, contextOverride, ctx) + } + + // SourceFile Override + sourceFile = ts.visitEachChild(sourceFile, contextOverride, ctx) + + // File Override Sequence + if(file){ + let overrideRequest = + file({ + program, + pluginOptions, + ctx, + sourceFile + }) + + // If a value of + // type ts.SourceFile is returned, + // override with that file. + if(overrideRequest) return overrideRequest + } + + return sourceFile + } + } + } +} \ No newline at end of file diff --git a/bin/core/transform/index.ts b/bin/core/transform/index.ts new file mode 100644 index 0000000..d75c952 --- /dev/null +++ b/bin/core/transform/index.ts @@ -0,0 +1,234 @@ +import * as ts from 'typescript' +import * as path from 'path' +import { Hook } from './hook' +import Helper from './helper' + +const data: { + srcPath: string + interfaceVaraible?: ts.Identifier + interfaceVaraibleIsHoisted: boolean + isWorkshopScript: boolean +} = { + srcPath: path.resolve(`${process.cwd()}`), + interfaceVaraibleIsHoisted: false, + isWorkshopScript: false +} + +export default Hook({ + initialize: ({ + program, + sourceFile, + ctx + }) => { + + // Create unique variable name in source file + data.interfaceVaraible = ts.createUniqueName('interface') + data.isWorkshopScript = false + + // Overload only src folder codes + let filePath = path.resolve(sourceFile.fileName) + let isPathMatch = false + for(let pathSuffix of ['/src', '/test']){ + let fixedPath = path.resolve(`${process.cwd()}${pathSuffix}`) + if(filePath.indexOf(fixedPath) != -1){ + isPathMatch = true + data.srcPath = fixedPath + break + } + } + + // If Src Folder Doesn't Match + if(!isPathMatch) return + }, + + context: ({ + program, + sourceFile, + node, + ctx + }) => { + + // Data Check + if(!data.interfaceVaraible) return + + // Overload only src folder codes + let isPathMatch = false + let filePath = path.resolve(sourceFile.fileName) + if(filePath.indexOf(data.srcPath) != -1) + isPathMatch = true + + // If Src Folder Doesn't Match + if(!isPathMatch) return + + /** + * @description + * Override the grammar only when it is a specific file name. + * + * โ€ป File name rules to which + * grammatical overrides apply. + * - `script.ts` + * - `script_*.ts` + * - `@*.ts` + */ + { + let checkFileName = path.basename(filePath).toLowerCase() + let checkFileExt = checkFileName.split('.')[1] + if(checkFileName != 'script.ts' + && !(checkFileName.indexOf(`script_`) == 0 && checkFileExt =='ts') + && !(checkFileName.indexOf(`@`) == 0 && checkFileExt =='ts')) return + } + + data.isWorkshopScript = true + + /** + * @description + * Typescript Operator-Overload + * + * 1. `Compare` Function Context Override + * 2. `And` Function Context Override + */ + let overrideOps = [ + Helper.compareOverload, + Helper.arithmeticOverload() + ] + for(let overrideOp of overrideOps){ + let overrideContext = + Helper.operatorOverload( + node, + program, + data, + + // Only Process Binary Expression Overload + Helper.binaryExpressionOverload, + + // Overrided Context Generator + overrideOp + ) + if(overrideContext) return overrideContext + } + + /** + * @description + * Typescript Operator-Overload + * + * - `Not` Function Context Override + */ + if(ts.isPrefixUnaryExpression(node)){ + if(node.operator == ts.SyntaxKind.ExclamationToken){ + + let property = + // interface_1.Value.compare + ts.createPropertyAccess( + + // interface_1.Value + ts.createPropertyAccess( + data.interfaceVaraible, + ts.createIdentifier('Value') + ), + ts.createIdentifier('not') + ) + + // interface_1.Value.and() + return ts.createCall( + + // FunctionName + property, + + // Type + undefined, + + // Paramaeter + [ + node.operand + ] + ) + } + } + + /* + if(node.getText() == '!Value.attacker()'){ + console.log(Helper.statementTypeAnalyze(node)) + } + */ + + /** + * @TODO + * If Statement Remover + * 1. {} ๋กœ ๋‹ค๋ฌธ์žฅ์ผ๋•Œ + * 2. {} ์—†์ด ๋‹จ๋ฌธ์žฅ ์ผ๋•Œ + */ + + return + }, + + file: ({ + program, + sourceFile, + ctx + }) => { + + // Data Check + if(!data.interfaceVaraible) return + + // Export Assignment + let exportDecl = + ts.createExportAssignment( + sourceFile.decorators, + sourceFile.modifiers, + false, + ts.createIdentifier(`Rule`) + ) + + /** + * @description + * 1. Import Interface File + */ + if(data.interfaceVaraibleIsHoisted){ + let filePath = path.resolve(sourceFile.fileName) + let subCount = filePath.replace(data.srcPath, '').split(path.sep).length - 2 + + // Create Module Path + let modulePath = `` + for(let i= 0; i<= subCount; i++) modulePath += `../` + modulePath = `${modulePath}bin/release/eng` + + // Require Statement + let importInject = + ts.createVariableStatement( + sourceFile.modifiers, + [ts.createVariableDeclaration( + // Left value + data.interfaceVaraible, + + // Type + undefined, + + // Right value + ts.createCall( + ts.createIdentifier('require'), + undefined, + + // Use only one paramaeter + [ts.createLiteral(modulePath)] + ) + )] + ) + + // Inject Statement + sourceFile = ts.updateSourceFileNode(sourceFile, ts.createNodeArray([ + importInject, + ...sourceFile.statements, + exportDecl + ])) + } else if(data.isWorkshopScript){ + + // Inject Statement + sourceFile = ts.updateSourceFileNode(sourceFile, ts.createNodeArray([ + ...sourceFile.statements, + exportDecl + ])) + } + + return sourceFile + } +}) \ No newline at end of file diff --git a/bin/core/transform/watch.ts b/bin/core/transform/watch.ts new file mode 100644 index 0000000..04806b5 --- /dev/null +++ b/bin/core/transform/watch.ts @@ -0,0 +1,97 @@ +import nodeCleanup from 'node-cleanup' +import spawn from 'cross-spawn' +import run from 'tsc-watch/lib/runner' + +import { manipulate, detectState, print } from 'tsc-watch/lib/stdout-manipulator' +import { getLogger } from '../generator/logger' + +import { loadUserScript } from './afterSuccess' +const onSuccessCommand = `ts-node "./bin/core/transform/afterSuccess.ts"` +const Logger = getLogger() + + +import { readFileSync } from 'fs' +import packageData from '../../../package.json' + +let firstTime = true + +let firstSuccessKiller: (()=> any) | null = null +let successKiller: (()=> any) | null = null +let failureKiller: (()=> any) | null = null + +const killProcesses = (killAll) => { + return Promise.all([ + (killAll && firstSuccessKiller !== null) ? firstSuccessKiller() : null, + successKiller ? successKiller() : null, + failureKiller ? failureKiller() : null, + ]) +} + +const bin = require.resolve('ttypescript/bin/tsc') +const tscProcess = spawn(bin, ['--watch']) + +Logger.debug(`Start main engine operating sequence...`) + +tscProcess.stdout.on('data', buffer => { + + const lines = manipulate(buffer) + print(false, false, lines) + + let isInit = lines.some(line => line.indexOf('Starting compilation in watch mode') != -1) + if(isInit){ + Logger.debug(`D.VA ENGINE v${packageData.version}`) + Logger.debug(`Please hold while first transpile.. Processing...`) + Logger.debug(`(First transpile can take a few seconds or minutes...)`) + } + + const state = detectState(lines) + const compilationError = state.compilationError + const compilationComplete = state.compilationComplete + + if (compilationComplete) { + killProcesses(false).then(() => { + if (compilationError) { + Logger.debug(`Failed initialization sequence.`) + Signal.emitFail() + } else { + Signal.emitSuccess() + + if (firstTime) { + firstTime = false + loadUserScript() + + } else { + loadUserScript() + } + } + }) + } +}) + +const Signal = { + send: + typeof process.send === 'function' + // @ts-ignore + ? (...e) => process.send(...e) + : () => {}, + + _successStr: + 'first_success', + + emitSuccess: () => { + Signal.send(Signal._successStr) + Signal._successStr = 'subsequent_success' + }, + + emitFail: () => Signal.send('compile_errors'), +} + +nodeCleanup((_exitCode, signal) => { + tscProcess.kill(signal) + killProcesses(true).then(() => process.exit()) + + // don't call cleanup handler again + nodeCleanup.uninstall() + + return false +}) \ No newline at end of file diff --git a/bin/core/update.ts b/bin/core/update.ts new file mode 100644 index 0000000..e40deb2 --- /dev/null +++ b/bin/core/update.ts @@ -0,0 +1,18 @@ +import * as GithubUpdater from 'easy-github-updater' + +export const Update = () => { + GithubUpdater.automatic({ + sourceFolderPath: process.cwd(), + force: false, + rebase: true, + keep: [ + '/src/*' + ], + branch: 'master', + isNeedDefaultProcess: true, + repoUrl: undefined, + waitTime: 10000 + }) +} + +if(`${process.argv[1]}` == __filename) Update() \ No newline at end of file diff --git a/doc/NOTE.md b/doc/NOTE.md new file mode 100644 index 0000000..e7c9ef1 --- /dev/null +++ b/doc/NOTE.md @@ -0,0 +1,319 @@ +# NOTE.md + +> Organize development information for compilering of projects. + +## How do i distribution it? + +1. Provide a codesandbox link to users. +2. Provide a web app that uses monaco editor and rete.js. + +## Ruleset + +The order in which create Ruleset is as follows: + +1. After selecting an event, +2. Add Condition. +3. You can add Action. + +Adding a Condition is optional and does not need to be added if conditions are not required. + +## AST Work + +For productive coding, some types defined in the existing workshop need to be objectified to data within the existing type script through AST parser. The information required for these operations is organized below. + +## AST Controller + +> Categorized dependent methods that cannot be used unless the instance is referenced + +### Array + +#### Independent + + 1. EmptyArray (`new Array()`, `[]`) + +#### Dependent + +1. appendToArray (`append()`) +2. arrayContains (`includes()`) +3. arraySlice (`slice()`) +4. countOf (`length`) +5. currentArrayElement (`element`) +7. filteredArray (`filter`) +8. firstOf (`[0]`) +9. indexOfArrayValue (`indexOf`) +10. lastOf (`[length]`) +10. removeFromArray (` remove`) +11. sortedArray (`sort`) +12. valueInArray (`[index]`) + +### Util(Number) + +#### Independent + +1. max +2. min +3. normalizedHealth +4. randomInteger (`random`) +5. randomReal +6. randomValueInArray +7. randomizedArray +8. roundToInteger (`Math.round`, `Math.ceil`, `Math.floor`) +9. squareRoot (`Math.sqrt`) + +### Player + +#### Dependent + +1. altitudeOf +2. closestPlayerTo +3. eyePosition +4. facingDirectionOf +5. farthestPlayerFrom +6. hasStatus +7. health +8. heroOf +9. horizontalAngleFromDirection +10. horizontalFacingAngleOf +11. horizontalSpeedOf +12. isAlive +13. isButtonHeld +14. isCommunicating +15. isCommunicatingAny +16. isCommunicatingAnyEmote +17. isCommunicatingVoiceLine +18. isCrouching +19. isDead +20. isFiringPrimary +21. isFiringSecondary +22. isInAir +23. isInSpawnRoom +24. isMoving +25. isOnGround +26. isOnObjective +27. isOnWall +28. isPortraitOnFire +29. isStanding +30. isUsingAbility1 +31. isUsingAbility2 +32. isUsingUltimate +33. maxHealth +34. numberOfDeaths +35. numberOfEliminations +36. numberOfFinalBlows +37. playerClosestToReticle +38. playersInViewAngle +39. positionOf +40. scoreOf +41. speedOf +42. speedOfInDirection +43. teamOf +44. throttleOf +45. ultimateChargePercent +46. velocityOf +47. verticalAngleTowards +48. verticalFacingAngleOf +49. verticalSpeedOf + +### Vector + +#### Independent + +1. Vector (`new Vector(x, y, z)`) + +#### Dependent + +1. angleBetweenVectors +2. localVectorOf +3. worldVectorOf +4. angleDifference +5. acrossineInDegrees +6. arccosineInRadians +7. arcsineInDegrees +8. arcsineInRadians +9. arctangentInDegrees +10. arctangentInRadians +11. cosineFromDegrees +12. cosineFromRadians +13. crossProduct +14. directionFromAngles +15. directionTowards +16. distanceBetween +17. dotProduct +18. down +19. forward +20. horizontalAngleTowards +21. isInLineOfSight +22. isInViewAngle +23. left +24. nearestWalkablePostion +25. normalize +26. playersWithinRadius +27. right +28. sineFromDegrees +29. sineFromRadians +30. slotOf +31. tangentFromDegrees +32. tangentFromRadians +33. up +34. verticalAngleFromDirection +35. xComponentOf (`x()`) +36. yComponentOf (`y()`) +37. zComponentOf (`z()`) + +### Team + +#### Independent + +1. Team (`new Team(type)`) +2. controlModeScoringTeam + +#### Dependent + +1. controlModeScoringPercentage +3. isHeroBeingPlayed +4. isTeamOnDefense +5. isTeamOnOffense +6. numberOfDeadPlayers +7. numberOfHeroes +8. numberOfLivingPlayers +9. numberOfPlayers +10. numberOfPlayersOnObjective +11. oppositeTeamOf +12. playersInSlot +13. playersOnHero +13. teamScore + +### Event + +#### Independent + +1. eventDamage +2. eventPlayer +3. eventWasCriticalHit + +### Entity + +#### Dependent + +1. entityExists +2. hasSpawned + +### String + +#### Independent + +1. String (`new String(type)`) + +#### Dependent + +1. heroIconString + +### Match + +#### Independent + +1. flagPosition +2. isAssemblingHeroes +3. isBetwwenRounds +4. isControlModePointLocked +5. isCTFModeInSuddenDeath +6. isFlagAtBase +7. isFlagBeingCarried +8. isGameInProgress +9. isInSetup +10. isMatchComplete +11. isObjectiveComplete +12. isWaitingForPlayers +13. matchRound +14. matchTime +15. objectiveIndex +16. objectivePosition +17. payloadProgressPercentage +18. playerCarryingFlag +19. payloadPosition +20. pointCapturePercentage +21. totalTimeElapsed + +### Level + +#### Independent + +1. lastCreatedEntity +2. lastDamageModificationId +3. lastDamageOverTimeId +4. lastHealOverTimeId +5. lastTextId +6. rayCastHitNormal +7. rayCastHitPlayer +8. rayCastHitPosition + +### Action + +#### Independent + +> **All of the 126's item** + +## AST Type + +### Number + +1. absoluteValue +2. number + +### Array + +1. allDeadPlayers +2. allHeroes +3. allLivingPlayers +4. allPlayers + 1. allPlayersNotOnObjective + 2. allPlayersOnObjective +5. allowedHeroes + +### Constant + +2. attacker +2. victim +3. hero +4. null + +### Operator + +1. `&&` and (Boolean) +2. `||` or (Boolean) +3. `!` not (Boolean) +4. `==` compare (Boolean) +5. `+` add (Number/Vector) +6. `-` substract (Number/Vector) +7. `/` divide (Number/Vector) +8. `*` multiply (Number/Vector) +9. `%` modulo (Number) +10. `**` raiseToPower (Number) + +### Variable + +1. globalVariable +2. playerVariable + +### Boolean + +1. false +2. true + +### Util + +1. isTrueForAll +2. isTrueForAny + +# Additional NOTE + +Necessity of unofficial launcher + +- Music Resources +- Save Workshop Settings + +Official Resource Support (* Translation Data) + +- EN Corp + - https://us.forums.blizzard.com/en/overwatch/t/wiki-workshop-syntax-script-database/335011 + - https://playoverwatch.com/en-gb/news/22938941/introducing-the-overwatch-workshop#moltenfloor \ No newline at end of file diff --git a/install.ts b/install.ts new file mode 100644 index 0000000..fd46a79 --- /dev/null +++ b/install.ts @@ -0,0 +1,206 @@ +const cp = require(`child_process`) +const fs = require(`fs`) +const path = require(`path`) +const EventEmitter = require(`events`) + +const events = new EventEmitter() +let moduleCount + +/** + * The script installs all the modules listed + * in packages.json and loads the program. + * + * ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” packages.json ์— ๋ช…์‹œ๋œ ๋ชจ๋“ˆ๋“ค์„ + * ๋ชจ๋‘ ์„ค์น˜ํ•œ ํ›„ ํ”„๋กœ๊ทธ๋žจ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. + */ +class ModuleInstaller { + /** + * @param {string} event + * @param {function} listener + */ + static on(event, listener) { + events.on(event, listener) + } + + /** + * @param {function} startCallback + */ + static callback(startCallback) { + ModuleInstaller.on(ModuleInstaller.START_CALLBACK_EVENT, startCallback) + } + + /** + * @description + * Automatically install the node modules. + * @param {boolean} isNeedDefaultProcess + */ + static automatic(isNeedDefaultProcess) { + let sourceFolderPath = path.join(process.argv[1], `../`) + + if (isNeedDefaultProcess == true || isNeedDefaultProcess == undefined) { + ModuleInstaller.on(ModuleInstaller.INSTALL_START_EVENT, + (notInstalledModulesList) => { + tempLogger(`New node module updates has detected! (total ${notInstalledModulesList.length})`) + tempLogger(`Application will be started in few seconds later\r\n`) + }) + ModuleInstaller.on(ModuleInstaller.MODULE_INSTALL_START_EVENT, + (moduleName) => { + tempLogger(`Downloading module '${moduleName}'...`) + }) + ModuleInstaller.on(ModuleInstaller.MODULE_INSTALLED_EVENT, + (body) => { + tempLogger(`Module installed: ${body}`) + }) + ModuleInstaller.on(ModuleInstaller.ALL_INSTALLED_EVENT, + () => { + tempLogger(`All modules prepared. application will be started..`) + }) + ModuleInstaller.on(ModuleInstaller.MODULE_INSTALL_ERROR_EVENT, + (error) => { + tempLogger(`An error occurred while preparing a base module.`) + tempLogger(`Can not execute the program. The base module was not prepared.`) + tempLogger(error) + process.exit() + }) + } + ModuleInstaller.collectPackageList(sourceFolderPath) + } + + /** + * @param {string} body + */ + static modulesInstallChecker(body) { + events.emit(ModuleInstaller.MODULE_INSTALLED_EVENT, body) + if (moduleCount != 0) + if (--moduleCount == 0) { + events.emit(ModuleInstaller.ALL_INSTALLED_EVENT) + events.emit(ModuleInstaller.START_CALLBACK_EVENT) + } + } + + /** + * @param {string} packageName + * @param {string} sourceFolderPath + * @param {boolean} isNeedToPassVersionCheck + * @return {boolean} + */ + static isModuleExist(packageName, sourceFolderPath, isNeedToPassVersionCheck = undefined) { + let packageList, packageVersion + + if (sourceFolderPath === undefined) + sourceFolderPath = path.join(process.argv[1], `../`) + + if ((isNeedToPassVersionCheck == false || isNeedToPassVersionCheck === undefined) && sourceFolderPath !== null) { + packageList = require(path.join(sourceFolderPath, `package.json`)) + } + let baseCache = {} + + for (let key in require.cache) baseCache[key] = true + + if ((isNeedToPassVersionCheck == false || isNeedToPassVersionCheck === undefined) && sourceFolderPath !== null) { + if(packageList.dependencies[packageName]) + packageVersion = packageList.dependencies[packageName] + if(packageList.devDependencies[packageName]) + packageVersion = packageList.devDependencies[packageName] + if(packageVersion != null) + packageVersion = packageVersion.replace(/[&\/\\#,+()$~%;@$^!``:*?<>{}]/g, ``) + } + + let loadTest, loadVersion + try { + loadTest = fs.existsSync(path.join(sourceFolderPath, `node_modules/${packageName}`)) + if(!loadTest) throw new Error() + if ((isNeedToPassVersionCheck == false || isNeedToPassVersionCheck === undefined) && sourceFolderPath !== null) { + loadVersion = require(path.join(sourceFolderPath, `node_modules/${packageName}/package.json`)).version + loadVersion = loadVersion.replace(/[&\/\\#,+()$~%;@$^!``:*?<>{}]/g, ``) + if (packageVersion != null && packageVersion != loadVersion) return false + } + } catch (e) { + try { loadTest = require(packageName) } catch (e) { if (!loadTest) return false } + } + + for (let key in require.cache) + if (!baseCache[key]) delete require.cache[key] + baseCache = null + + return true + } + + /** + * If the node module is not ready then automatically + * download and install the node module and turn on the server. + * + * ๋…ธ๋“œ ๋ชจ๋“ˆ์ด ์ค€๋น„๋˜์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋…ธ๋“œ๋ชจ๋“ˆ์„ + * ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜ํ•œ ํ›„ ์„œ๋ฒ„๋ฅผ ์ผญ๋‹ˆ๋‹ค. + * + * @param {string} moduleName + */ + static moduleInstall(moduleName) { + return new Promise((resolve)=>{ + cp.exec(`npm install ${moduleName}`, (error, body) => { + if (error) { + events.emit(ModuleInstaller.MODULE_INSTALL_ERROR_EVENT, error) + resolve() + return + } + ModuleInstaller.modulesInstallChecker(body) + resolve() + }) + }) + } + + static async collectPackageList(sourceFolderPath) { + let packageList = require(path.join(sourceFolderPath, `package.json`)) + + let notInstalledModules = [] + let baseCache = {} + + for (let key in require.cache) baseCache[key] = true + + for (let packageName in packageList.dependencies) { + if (!ModuleInstaller.isModuleExist(packageName, sourceFolderPath, undefined)) + notInstalledModules.push(packageName) + } + for (let packageName in packageList.devDependencies) { + if (!ModuleInstaller.isModuleExist(packageName, sourceFolderPath, undefined)) + notInstalledModules.push(packageName) + } + moduleCount = notInstalledModules.length; + + for (let key in require.cache) + if (!baseCache[key]) delete require.cache[key] + baseCache = null + + if (notInstalledModules.length > 0) { + events.emit(ModuleInstaller.INSTALL_START_EVENT, notInstalledModules) + for(let moduleName of notInstalledModules){ + await events.emit(ModuleInstaller.MODULE_INSTALL_START_EVENT, moduleName) + await ModuleInstaller.moduleInstall(moduleName) + } + } else { + events.emit(ModuleInstaller.START_CALLBACK_EVENT) + } + } + + static get ALL_INSTALLED_EVENT() { return `all_installed_event` } + static get INSTALL_START_EVENT() { return `install_start_event` } + static get MODULE_INSTALL_START_EVENT() { return `module_install_start` } + static get MODULE_INSTALLED_EVENT() { return `module_installed_event` } + static get MODULE_INSTALL_ERROR_EVENT() { return `module_install_error` } + static get START_CALLBACK_EVENT() { return `start_callback_event` } +} + +const tempLogger = log => { + let now = new Date() + let timeFormat = String() + timeFormat += (String(now.getHours()).length > 1 ? now.getHours() : `0` + now.getHours()) + timeFormat += `:` + (String(now.getMinutes()).length > 1 ? now.getMinutes() : `0` + now.getMinutes()) + timeFormat += `:` + (String(now.getSeconds()).length > 1 ? now.getSeconds() : `0` + now.getSeconds()) + `` + let defaultFormat = String.fromCharCode(0x1b) + `[31;1m` + `[%time%] ` + String.fromCharCode(0x1b) + `[37;1m` + `%log%` + console.log(defaultFormat.replace(`%time%`, timeFormat).replace(`%log%`, log)) +} + +module.exports = ModuleInstaller + +if(`${process.argv[1]}` == __filename) + ModuleInstaller.automatic(undefined) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..010fe05 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1775 @@ +{ + "name": "dva-engine", + "version": "1.0.10", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.137", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.137.tgz", + "integrity": "sha512-g4rNK5SRKloO+sUGbuO7aPtwbwzMgjK+bm9BBhLD7jGUiGR7zhwYEhSln/ihgYQBeIJ5j7xjyaYzrWTcu3UotQ==" + }, + "@types/node": { + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz", + "integrity": "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz", + "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "1.13.0", + "eslint-utils": "^1.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^2.0.1", + "tsutils": "^3.7.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz", + "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "1.13.0", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + } + }, + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==" + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dev": true, + "requires": { + "type-fest": "^0.5.2" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "arg": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", + "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async-sequencer": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-sequencer/-/async-sequencer-1.0.6.tgz", + "integrity": "sha512-il/yuL5KqhrqL82mrs7JcV+EgUxY9HmWF+1GUlzawu27PV0xYZ5W3E4kpRgHrSgppIHlV7wnpuJBj8xYd95k2Q==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "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==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==" + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "easy-github-updater": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/easy-github-updater/-/easy-github-updater-1.0.3.tgz", + "integrity": "sha512-S4g5ZlB9EFnxJZBjJHOSBf0uAcMZtoCdX2rnwFfXt4wCt4xFmuKjiMcfnCC4DVhgctDN+pDOGbuPMn/Rtpq/jA==", + "requires": { + "adm-zip": "^0.4.13", + "folder-logger": "^1.0.0", + "fs-extra": "^8.1.0", + "nested-static": "^1.1.0", + "wildcard": "^2.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.2.0.tgz", + "integrity": "sha512-sS0SZwm5UAoI83F+cgdomz0cBNPs+AnRvEboNYeWvrZ8UcDHCu/5muocwoDL2TkHq9skkP0GvZjmwI8HG7S3sw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.0.tgz", + "integrity": "sha512-boA7CHRLlVWUSg3iL5Kmlt/xT3Q+sXnKoRYYzj1YeM10A76TEJBbotV5pKbnK42hEUIr121zTv+QLRM5LsCPXQ==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + } + } + }, + "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 + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "folder-logger": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/folder-logger/-/folder-logger-1.0.4.tgz", + "integrity": "sha512-8K+MKfdjBjNVOx+sNs9JaVX9Z7cxTMpUTCn8Ie4uGyBiwI5dBvPPenVeuMvpAGxViC1O1gqRT7T/IEbmfgBL3w==", + "requires": { + "chalk": "^2.4.2", + "mkdir-recursive": "^0.4.0", + "moment": "^2.23.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "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==" + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-reference": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.3.tgz", + "integrity": "sha512-W1iHHv/oyBb2pPxkBxtaewxa1BC58Pn5J0hogyCdefwUIvb6R+TGbAcIa4qPNYLqLhb3EnOgUf2MQkkF76BcKw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "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 + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", + "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==" + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "magic-string": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", + "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" + }, + "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 + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdir-recursive": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mkdir-recursive/-/mkdir-recursive-0.4.0.tgz", + "integrity": "sha512-gbTtiEu8P/GSMh1lAa0YYNr8XIfDzFgnWtetw3Hfz9nw6YXySHNYOZF/uUTgyp8GHvFnNw/EG7VhOkD6zfVb6A==" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nested-static": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nested-static/-/nested-static-1.1.0.tgz", + "integrity": "sha512-7tdrVb9k/AOwbJgW8bmJwR72wjbB6kvXIe5dBJ6E+WNG3oMeZB2dii9FhUMPw0mjML592lViSD6aR4gM12mJiw==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-cleanup": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", + "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "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==" + }, + "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==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "requires": { + "through": "~2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "requires": { + "event-stream": "=3.3.4" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "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==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "rollup-plugin-commonjs": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.2.tgz", + "integrity": "sha512-DxeR4QXTgTOFseYls1V7vgKbrSJmPYNdEMOs0OvH+7+89C3GiIonU9gFrE0u39Vv1KWm3wepq8KAvKugtoM2Zw==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-dts": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-1.1.6.tgz", + "integrity": "sha512-CqrI0viXojw3ufqFyfJjoyM/zibcvBTr6Ky3BGK9jfuT79hn32PifLwusulC0z3TG0QW6tPfDCb3JI5EOaSjRg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5" + } + }, + "rollup-plugin-node-resolve": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", + "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", + "dev": true, + "requires": { + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "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==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", + "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "requires": { + "through": "2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "requires": { + "duplexer": "~0.1.1" + } + }, + "string-argv": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.2.tgz", + "integrity": "sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA==" + }, + "string-replace-all": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string-replace-all/-/string-replace-all-1.0.3.tgz", + "integrity": "sha512-i6gJK7SpOOYWVJ2rW8iUjx/aJ5l+dqCPa0/qBewinSZ2/aV0POhMoHWgyf/83+tR/ZT83oO7LNp/gT5b4Cw+tA==", + "requires": { + "@types/lodash": "^4.14.58", + "lodash": "^4.17.4" + } + }, + "string-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "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 + }, + "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 + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + } + }, + "tsc-watch": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-2.4.0.tgz", + "integrity": "sha512-HTNRQm/P2YdP34b7bhaSOjVQ/YdTJGkNYyAD0scEcK7qXX7BWsBG8n3YlYHC9a6mX//gs5ouWQ3DXrBWjVp6rQ==", + "requires": { + "cross-spawn": "^5.1.0", + "node-cleanup": "^2.1.2", + "ps-tree": "^1.2.0", + "string-argv": "^0.1.1", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "ttypescript": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/ttypescript/-/ttypescript-1.5.7.tgz", + "integrity": "sha512-qloW8S60+xWVC2bQWldYQfESNFkIgDL5/M+vAOOsuLJ1pQu0SG2vQx5DNJO2nlwSrHxD8cDuF2sVDXg6v3GG3Q==", + "requires": { + "resolve": "^1.9.0" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "dev": true + }, + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==" + }, + "typescript-json-schema": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.38.3.tgz", + "integrity": "sha512-+13qUoBUQwOXqxUoYQWtLA9PEM7ojfv8r+hYc2ebeqqVwVM4+yI5JSlsYRBlJKKewc9q1FHqrMR6L6d9TNX9Dw==", + "requires": { + "glob": "~7.1.4", + "json-stable-stringify": "^1.0.1", + "typescript": "^3.5.1", + "yargs": "^13.2.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + } + } +} diff --git a/package.json b/package.json index 4f9e797..c4c03bc 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,63 @@ { - "name": "node-packages", - "private": true, - "scripts": { - "build": "turbo run build", - "dev": "turbo run dev", - "lint": "turbo run lint", - "format": "prettier --write \"**/*.{ts,tsx,md}\"", - "check-types": "turbo run check-types" + "name": "dva-engine", + "version": "1.0.10", + "description": "๐ŸŽฎ Overwatch Workshop Ruleset with JavaScript (+Typescript) (WIP)", + "dependencies": { + "async-sequencer": "^1.0.6", + "easy-github-updater": "^1.0.3", + "folder-logger": "^1.0.4", + "fs-extra": "^8.1.0", + "nested-static": "^1.1.0", + "rimraf": "^2.7.1", + "string-replace-all": "^1.0.3", + "temp-dir": "^2.0.0", + "ts-node": "^8.3.0", + "tsc-watch": "^2.4.0", + "ttypescript": "^1.5.7", + "typescript": "^3.5.3", + "typescript-json-schema": "^0.38.3" }, "devDependencies": { - "prettier": "^3.6.2", - "turbo": "^2.6.0", - "typescript": "5.9.2" + "@types/node": "^12.7.2", + "@typescript-eslint/eslint-plugin": "^1.13.0", + "@typescript-eslint/parser": "^1.13.0", + "eslint": "^6.2.0", + "rollup-plugin-commonjs": "^10.0.2", + "rollup-plugin-dts": "^1.1.6", + "rollup-plugin-node-resolve": "^5.2.0" + }, + "scripts": { + "install": "node ./install.ts", + "start": "npm run install && npm run update && npm run generate:silent && ts-node ./bin/core/transform/watch.ts", + "build": "npm run install && npm run update && npm run generate:silent && ts-node ./bin/core/transform/afterSuccess.ts", + "build:fast": "ts-node ./bin/core/transform/afterSuccess.ts", + "update": "ts-node ./bin/core/update.ts && npm run install", + "clean": "rm -rf ./dist && rm -rf ./bin/dist && rm -rf ./bin/release", + "lint": "eslint --fix -c ./.eslintrc.json --ext .ts .", + "generate": "ts-node ./bin/core/generator && npm run ttsc", + "generate:silent": "ts-node ./bin/core/generator/initializer.ts", + "release": "npm run generate:silent && npm run ttsc:decl && rollup -c rollup.config.ts && npm run release:fix", + "release:fix": "ts-node ./bin/core/generator/declarationFix.ts", + "ttsc": "ttsc && echo Typescript Transpile Done! && npm run ttsc:decl", + "ttsc:decl": "ts-node ./bin/core/generator/declarationMore.ts", + "maintain:run": "npm run generate && ts-node ./bin/core/transform/afterSuccess.ts", + "maintain:rename": "ts-node ./bin/core/maintain/rename.ts", + "maintain:event": "ts-node ./bin/core/maintain/add/event.ts", + "maintain:value": "ts-node ./bin/core/maintain/add/value.ts", + "maintain:action": "ts-node ./bin/core/maintain/add/action.ts", + "language:extract": "ts-node ./bin/core/language/extractor", + "language:reapply": "ts-node ./bin/core/language/reapply", + "language:inject": "ts-node ./bin/core/language/injector", + "language:parse": "ts-node ./bin/core/language/parse/stageRunner.ts" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/hmmhmmhm/dva-engine.git" }, - "packageManager": "pnpm@9.0.0", - "engines": { - "node": ">=18" + "author": "hmmhmmhm", + "license": "MIT", + "bugs": { + "url": "https://github.com/hmmhmmhm/dva-engine/issues" }, - "pnpm": { - "overrides": { - "bigint-buffer": "npm:@trufflesuite/bigint-buffer@^1.1.10", - "minimist": "^1.2.6" - } - } + "homepage": "https://github.com/hmmhmmhm/dva-engine#readme" } diff --git a/packages/base2000/.gitignore b/packages/base2000/.gitignore deleted file mode 100644 index e36c624..0000000 --- a/packages/base2000/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -dist/ -*.log -.DS_Store -coverage/ -.env diff --git a/packages/base2000/.npmignore b/packages/base2000/.npmignore deleted file mode 100644 index 3fd0859..0000000 --- a/packages/base2000/.npmignore +++ /dev/null @@ -1,10 +0,0 @@ -src/ -test/ -scripts/ -*.test.ts -tsconfig.json -jest.config.js -.gitignore -.npmignore -coverage/ -node_modules/ diff --git a/packages/base2000/LICENSE b/packages/base2000/LICENSE deleted file mode 100644 index a6e4455..0000000 --- a/packages/base2000/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 hmmhmmhm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/base2000/README.md b/packages/base2000/README.md deleted file mode 100644 index c56151d..0000000 --- a/packages/base2000/README.md +++ /dev/null @@ -1,339 +0,0 @@ -# Base2000 - -A base-N encoding/decoding library using colorful emojis. Convert numbers to memorable emoji sequences. - -**Note**: This package uses 2,000 carefully selected colorful emojis that render properly across all platforms. Only emojis that display in full color (not undefined codepoints) are included. - -## Encoding Capacity - -The number of unique values that can be represented grows exponentially with the number of emojis (Base: 2,000): - -| Emojis | Possible Combinations | Equivalent Bits | -|--------|----------------------|-----------------| -| 1 Emoji | 2,000 | ~10.97 bits | -| 2 Emojis | 4.00 Million | ~21.93 bits | -| 3 Emojis | 8.00 Billion | ~32.90 bits | -| 4 Emojis | 16.0 Trillion | ~43.86 bits | -| 5 Emojis | 32.0 Quadrillion | ~54.83 bits | -| 6 Emojis | 64.0 Quintillion | ~65.79 bits | -| 7 Emojis | 128 Sextillion | ~76.76 bits | -| 8 Emojis | 256 Octillion | ~87.72 bits | -| 9 Emojis | 512 Nonillion | ~98.69 bits | -| 10 Emojis | 1.02 Decillion | ~109.66 bits | -| 11 Emojis | 2.05 Undecillion | ~120.62 bits | -| 12 Emojis | 4.10 Duodecillion | ~131.59 bits | - -### Encoding Examples - -```bash -npx base2000 encode 2000 -# Output: ๐Ÿ˜๐Ÿ˜€ - -npx base2000 encode 38557435 -# Output: ๐Ÿ˜‡๐Ÿคน๐Ÿพ๐Ÿ”ฑ - -npx base2000 encode 89752472641731123 -# Output: ๐Ÿ˜๐Ÿค™๐Ÿฝ๐ŸฅŠ๐Ÿƒ๐Ÿ‡จ๐Ÿ‡ฒ๐Ÿ‘” - -npx base2000 encode 9875895267443635214141 -# Output: ๐ŸŒƒ๐Ÿšด๐Ÿผ๐Ÿ‘ฏโ†™๏ธ๐Ÿชข๐Ÿ“ก - -npx base2000 encode 43785237458756783457242745611 -# Output: ๐Ÿ™‹๐Ÿ„๐Ÿฟ๐Ÿ˜พ๐Ÿƒ๐Ÿ—๐Ÿฅพ๐Ÿฆธ๐Ÿ‘†๐Ÿปโ€ผ๏ธ - -npx base2000 encode 525421411452342311245233457643456 -# Output: ๐Ÿ‘š๐ŸŒฟ๐Ÿ’ชโคต๏ธ๐Ÿฅพ๐Ÿ‡ฆ๐Ÿ‡ฝ๐Ÿ“ฉ๐Ÿ™๐Ÿป๐Ÿซ“๐Ÿ‘ง๐Ÿฟ -``` - -## Features - -- **Encode/Decode Numbers**: Convert numbers to base-2000 emoji representation -- **BigInt Support**: Handle arbitrarily large numbers -- **Fast & Efficient**: Optimized encoding/decoding algorithms -- **TypeScript**: Full TypeScript support with type definitions -- **Visual & Fun**: Use emojis for memorable identifiers - -## Installation - -```bash -npm install base2000 -# or -pnpm add base2000 -# or -yarn add base2000 -``` - -## Quick Start - -### CLI Usage - -```bash -# Using npx (no installation required) -npx base2000 encode 123456 -npx base2000 decode "๐Ÿคฎ๐Ÿ˜Œ" - -# After installation -base2000 encode 123456 -base2000 decode "๐Ÿคฎ๐Ÿ˜Œ" -``` - -### Programmatic Usage - -```typescript -import { encode, decode, getEmoji } from 'base2000'; - -// Basic encoding -encode(123456); // '๐Ÿคฎ๐Ÿ˜Œ' -decode('๐Ÿคฎ๐Ÿ˜Œ'); // 123456n - -// Get emoji at specific index -getEmoji(0); // '๐Ÿ˜€' -getEmoji(20); // '๐Ÿ˜”' -``` - -## API Reference - -### `encode(num: number | bigint | string, separator?: string): string` - -Encode a number to base-2000 emoji representation. - -**Important**: For numbers larger than `Number.MAX_SAFE_INTEGER` (2^53-1), use `BigInt` or `string` to avoid precision loss. - -```typescript -encode(0); // '๐Ÿ˜€' -encode(2000); // '๐Ÿ˜๐Ÿ˜€' -encode(123456); // '๐Ÿ˜ฒ๐Ÿšถ๐Ÿฝ' -encode(123456, ' '); // '๐Ÿ˜ฒ ๐Ÿšถ๐Ÿฝ' (custom separator) - -// Large numbers - use string or BigInt -encode('373493284239852352787678'); // Works correctly -encode(373493284239852352787678n); // Same result - -// Unsafe number will throw error -encode(9007199254740992); // โŒ Error: exceeds safe integer range -encode('9007199254740992'); // โœ… Works correctly -``` - -### `decode(encoded: string, separator?: string): bigint` - -Decode a base-2000 emoji representation back to a number. - -```typescript -decode('๐Ÿ˜€'); // 0n -decode('๐Ÿ˜๐Ÿ˜€'); // 2000n -decode('๐Ÿ˜ฒ๐Ÿšถ๐Ÿฝ'); // 123456n - -// With separator -decode('๐Ÿ˜ฒ ๐Ÿšถ๐Ÿฝ', ' '); // 123456n -decode('๐Ÿ˜ฒ-๐Ÿšถ๐Ÿฝ', '-'); // 123456n -``` - -### `getEmoji(index: number): string` - -Get the emoji at a specific index (0-1999). - -```typescript -getEmoji(0); // '๐Ÿ˜€' -getEmoji(1); // '๐Ÿ˜' -getEmoji(2); // '๐Ÿ˜‚' -``` - -### `getEmojiIndex(emoji: string): number` - -Get the index of a specific emoji. - -```typescript -getEmojiIndex('๐Ÿ˜€'); // 0 -getEmojiIndex('๐Ÿ˜'); // 1 -getEmojiIndex('๐Ÿ˜‚'); // 2 -getEmojiIndex('unknown'); // -1 -``` - -### `getBase(): number` - -Get the total number of emojis in the base. - -```typescript -getBase(); // 2000 -``` - -## CLI Usage - -The package includes a command-line interface for quick encoding/decoding. - -### Installation - -```bash -# Global installation -npm install -g base2000 - -# Or use with npx (no installation required) -npx base2000 --help -``` - -### Commands - -```bash -# Encode a number -base2000 encode [options] - -# Decode a string -base2000 decode [options] -``` - -### Options - -- `--separator ` - Custom separator (default: none) -- `-h, --help` - Show help message - -### Examples - -```bash -# Basic encoding -base2000 encode 123456 -# Output: ๐Ÿคฎ๐Ÿ˜Œ - -# Custom separator -base2000 encode 123456 --separator " " -# Output: ๐Ÿคฎ ๐Ÿ˜Œ - -# Decoding -base2000 decode "๐Ÿคฎ๐Ÿ˜Œ" -# Output: 123456 - -# Decoding with separator -base2000 decode "๐Ÿคฎ ๐Ÿ˜Œ" --separator " " -# Output: 123456 - -# Large numbers -base2000 encode 987654321 -# Output: ๐Ÿฅณ๐Ÿฅณ๐Ÿคช๐Ÿ˜ก -``` - -## Use Cases - -### Memorable Identifiers - -```typescript -import { encode, decode } from 'base2000'; - -// Convert timestamp to memorable emoji identifier -const timestamp = Date.now(); -const memorable = encode(timestamp); -console.log(`Session ID: ${memorable}`); - -// Decode back to timestamp -const decoded = decode(memorable); -``` - -### URL Shortening - -```typescript -import { encode } from 'base2000'; - -// Convert database ID to emoji-based short URL -const dbId = 123456789; -const shortCode = encode(dbId); -console.log(`Short URL: https://example.com/${shortCode}`); -// Output: https://example.com/๐Ÿ˜๐Ÿฅณ๐Ÿคช๐Ÿ˜Œ -``` - -### Large Number Encoding - -```typescript -import { encode, decode } from 'base2000'; - -// Encode very large numbers -const largeNumber = '373493284239852352787678'; -const encoded = encode(largeNumber); -console.log(encoded); // Emoji representation - -const decoded = decode(encoded); -console.log(decoded); // 373493284239852352787678n -``` - -## How It Works - -Base2000 works like any positional numeral system (like binary, decimal, or hexadecimal), but uses 2000 as the base instead of 2, 10, or 16. - -- **Base-10 (Decimal)**: Uses digits 0-9 -- **Base-16 (Hexadecimal)**: Uses digits 0-9 and A-F -- **Base-2000**: Uses 2000 emojis - -### Example - -The number `123456` in base-2000: - -``` -123456 รท 2000 = 61 remainder 1456 -61 รท 2000 = 0 remainder 61 - -Reading remainders from bottom to top: [61, 1456] -Emoji at index 61: (emoji at position 61) -Emoji at index 1456: (emoji at position 1456) - -Result: (corresponding emoji sequence) -``` - -### Advantages - -- **Visual**: Emojis are more visually distinctive than alphanumeric characters -- **Memorable**: Emoji sequences can be easier to remember -- **Fun**: Makes identifiers more engaging and user-friendly -- **Compact**: More efficient than base-64 for large numbers - -## Performance - -The library is optimized for performance: - -- Encoding/decoding operations complete in < 1ms for most numbers -- Supports BigInt for arbitrarily large numbers -- Efficient Map-based lookup for decoding -- Zero dependencies - -## TypeScript Support - -Full TypeScript support with comprehensive type definitions: - -```typescript -import type { encode, decode } from 'base2000'; - -// All functions are fully typed -const encoded: string = encode(123456); -const decoded: bigint = decode(encoded); -``` - -## Error Handling - -The library throws descriptive errors for invalid inputs: - -```typescript -encode(-1); // Error: Only non-negative numbers can be encoded -encode(3.14); // Error: Only integers can be encoded -decode(''); // Error: Encoded string cannot be empty -decode('invalid'); // Error: Invalid emoji in encoded string -getEmoji(3000); // Error: Index must be between 0 and 1999 -``` - -## Browser Support - -Works in all modern browsers and Node.js environments that support: -- ES2020+ -- BigInt -- Unicode/Emoji support - -## License - -MIT - -## Contributing - -Contributions are welcome! Please feel free to submit a Pull Request. - -## Author - -hmmhmmhm - -## Repository - -https://github.com/hmmhmmhm/node-packages/tree/main/packages/base2000 diff --git a/packages/base2000/emoji.json b/packages/base2000/emoji.json deleted file mode 100644 index 1645895..0000000 --- a/packages/base2000/emoji.json +++ /dev/null @@ -1,2002 +0,0 @@ -[ - "๐Ÿ˜€", - "๐Ÿ˜", - "๐Ÿ˜‚", - "๐Ÿ˜ƒ", - "๐Ÿ˜„", - "๐Ÿ˜…", - "๐Ÿ˜†", - "๐Ÿ˜‡", - "๐Ÿ˜ˆ", - "๐Ÿ˜‰", - "๐Ÿ˜Š", - "๐Ÿ˜‹", - "๐Ÿ˜Œ", - "๐Ÿ˜", - "๐Ÿ˜Ž", - "๐Ÿ˜", - "๐Ÿ˜", - "๐Ÿ˜‘", - "๐Ÿ˜’", - "๐Ÿ˜“", - "๐Ÿ˜”", - "๐Ÿ˜•", - "๐Ÿ˜–", - "๐Ÿ˜—", - "๐Ÿ˜˜", - "๐Ÿ˜™", - "๐Ÿ˜š", - "๐Ÿ˜›", - "๐Ÿ˜œ", - "๐Ÿ˜", - "๐Ÿ˜ž", - "๐Ÿ˜Ÿ", - "๐Ÿ˜ ", - "๐Ÿ˜ก", - "๐Ÿ˜ข", - "๐Ÿ˜ฃ", - "๐Ÿ˜ค", - "๐Ÿ˜ฅ", - "๐Ÿ˜ฆ", - "๐Ÿ˜ง", - "๐Ÿ˜จ", - "๐Ÿ˜ฉ", - "๐Ÿ˜ช", - "๐Ÿ˜ซ", - "๐Ÿ˜ฌ", - "๐Ÿ˜ญ", - "๐Ÿ˜ฎ", - "๐Ÿ˜ฏ", - "๐Ÿ˜ฐ", - "๐Ÿ˜ฑ", - "๐Ÿ˜ฒ", - "๐Ÿ˜ณ", - "๐Ÿ˜ด", - "๐Ÿ˜ต", - "๐Ÿ˜ถ", - "๐Ÿ˜ท", - "๐Ÿ˜ธ", - "๐Ÿ˜น", - "๐Ÿ˜บ", - "๐Ÿ˜ป", - "๐Ÿ˜ผ", - "๐Ÿ˜ฝ", - "๐Ÿ˜พ", - "๐Ÿ˜ฟ", - "๐Ÿ™€", - "๐Ÿ™", - "๐Ÿ™‚", - "๐Ÿ™ƒ", - "๐Ÿ™„", - "๐Ÿ™…", - "๐Ÿ™†", - "๐Ÿ™‡", - "๐Ÿ™ˆ", - "๐Ÿ™‰", - "๐Ÿ™Š", - "๐Ÿ™‹", - "๐Ÿ™Œ", - "๐Ÿ™", - "๐Ÿ™Ž", - "๐Ÿ™", - "๐ŸŒ€", - "๐ŸŒ", - "๐ŸŒ‚", - "๐ŸŒƒ", - "๐ŸŒ„", - "๐ŸŒ…", - "๐ŸŒ†", - "๐ŸŒ‡", - "๐ŸŒˆ", - "๐ŸŒ‰", - "๐ŸŒŠ", - "๐ŸŒ‹", - "๐ŸŒŒ", - "๐ŸŒ", - "๐ŸŒŽ", - "๐ŸŒ", - "๐ŸŒ", - "๐ŸŒ‘", - "๐ŸŒ’", - "๐ŸŒ“", - "๐ŸŒ”", - "๐ŸŒ•", - "๐ŸŒ–", - "๐ŸŒ—", - "๐ŸŒ˜", - "๐ŸŒ™", - "๐ŸŒš", - "๐ŸŒ›", - "๐ŸŒœ", - "๐ŸŒ", - "๐ŸŒž", - "๐ŸŒŸ", - "๐ŸŒ ", - "๐ŸŒก", - "๐ŸŒค", - "๐ŸŒฅ", - "๐ŸŒฆ", - "๐ŸŒง", - "๐ŸŒจ", - "๐ŸŒฉ", - "๐ŸŒช", - "๐ŸŒซ", - "๐ŸŒฌ", - "๐ŸŒญ", - "๐ŸŒฎ", - "๐ŸŒฏ", - "๐ŸŒฐ", - "๐ŸŒฑ", - "๐ŸŒฒ", - "๐ŸŒณ", - "๐ŸŒด", - "๐ŸŒต", - "๐ŸŒท", - "๐ŸŒธ", - "๐ŸŒน", - "๐ŸŒบ", - "๐ŸŒป", - "๐ŸŒผ", - "๐ŸŒฝ", - "๐ŸŒพ", - "๐ŸŒฟ", - "๐Ÿ€", - "๐Ÿ", - "๐Ÿ‚", - "๐Ÿƒ", - "๐Ÿ„", - "๐Ÿ…", - "๐Ÿ†", - "๐Ÿ‡", - "๐Ÿˆ", - "๐Ÿ‰", - "๐ŸŠ", - "๐Ÿ‹", - "๐ŸŒ", - "๐Ÿ", - "๐ŸŽ", - "๐Ÿ", - "๐Ÿ", - "๐Ÿ‘", - "๐Ÿ’", - "๐Ÿ“", - "๐Ÿ”", - "๐Ÿ•", - "๐Ÿ–", - "๐Ÿ—", - "๐Ÿ˜", - "๐Ÿ™", - "๐Ÿš", - "๐Ÿ›", - "๐Ÿœ", - "๐Ÿ", - "๐Ÿž", - "๐ŸŸ", - "๐Ÿ ", - "๐Ÿก", - "๐Ÿข", - "๐Ÿฃ", - "๐Ÿค", - "๐Ÿฅ", - "๐Ÿฆ", - "๐Ÿง", - "๐Ÿจ", - "๐Ÿฉ", - "๐Ÿช", - "๐Ÿซ", - "๐Ÿฌ", - "๐Ÿญ", - "๐Ÿฎ", - "๐Ÿฏ", - "๐Ÿฐ", - "๐Ÿฑ", - "๐Ÿฒ", - "๐Ÿณ", - "๐Ÿด", - "๐Ÿต", - "๐Ÿถ", - "๐Ÿท", - "๐Ÿธ", - "๐Ÿน", - "๐Ÿบ", - "๐Ÿป", - "๐Ÿผ", - "๐Ÿฝ", - "๐Ÿพ", - "๐Ÿฟ", - "๐ŸŽ€", - "๐ŸŽ", - "๐ŸŽ‚", - "๐ŸŽƒ", - "๐ŸŽ„", - "๐ŸŽ…", - "๐ŸŽ†", - "๐ŸŽ‡", - "๐ŸŽˆ", - "๐ŸŽ‰", - "๐ŸŽŠ", - "๐ŸŽ‹", - "๐ŸŽŒ", - "๐ŸŽ", - "๐ŸŽŽ", - "๐ŸŽ", - "๐ŸŽ", - "๐ŸŽ‘", - "๐ŸŽ’", - "๐ŸŽ“", - "๐ŸŽ–", - "๐ŸŽ—", - "๐ŸŽ™", - "๐ŸŽš", - "๐ŸŽ›", - "๐ŸŽž", - "๐ŸŽŸ", - "๐ŸŽ ", - "๐ŸŽก", - "๐ŸŽข", - "๐ŸŽฃ", - "๐ŸŽค", - "๐ŸŽฅ", - "๐ŸŽฆ", - "๐ŸŽง", - "๐ŸŽจ", - "๐ŸŽฉ", - "๐ŸŽช", - "๐ŸŽซ", - "๐ŸŽฌ", - "๐ŸŽญ", - "๐ŸŽฎ", - "๐ŸŽฏ", - "๐ŸŽฐ", - "๐ŸŽฑ", - "๐ŸŽฒ", - "๐ŸŽณ", - "๐ŸŽด", - "๐ŸŽต", - "๐ŸŽถ", - "๐ŸŽท", - "๐ŸŽธ", - "๐ŸŽน", - "๐ŸŽบ", - "๐ŸŽป", - "๐ŸŽผ", - "๐ŸŽฝ", - "๐ŸŽพ", - "๐ŸŽฟ", - "๐Ÿ€", - "๐Ÿ", - "๐Ÿ‚", - "๐Ÿƒ", - "๐Ÿ„", - "๐Ÿ…", - "๐Ÿ†", - "๐Ÿ‡", - "๐Ÿˆ", - "๐Ÿ‰", - "๐ŸŠ", - "๐Ÿ‹", - "๐ŸŒ", - "๐Ÿ", - "๐ŸŽ", - "๐Ÿ", - "๐Ÿ", - "๐Ÿ‘", - "๐Ÿ’", - "๐Ÿ“", - "๐Ÿ”", - "๐Ÿ•", - "๐Ÿ–", - "๐Ÿ—", - "๐Ÿ˜", - "๐Ÿ™", - "๐Ÿš", - "๐Ÿ›", - "๐Ÿœ", - "๐Ÿ", - "๐Ÿž", - "๐ŸŸ", - "๐Ÿ ", - "๐Ÿก", - "๐Ÿข", - "๐Ÿฃ", - "๐Ÿค", - "๐Ÿฅ", - "๐Ÿฆ", - "๐Ÿง", - "๐Ÿช", - "๐Ÿซ", - "๐Ÿฌ", - "๐Ÿญ", - "๐Ÿฎ", - "๐Ÿฏ", - "๐Ÿฐ", - "๐Ÿณ", - "๐Ÿด", - "๐Ÿต", - "๐Ÿท", - "๐Ÿธ", - "๐Ÿน", - "๐Ÿบ", - "๐Ÿ€", - "๐Ÿ", - "๐Ÿ‚", - "๐Ÿƒ", - "๐Ÿ„", - "๐Ÿ…", - "๐Ÿ†", - "๐Ÿ‡", - "๐Ÿˆ", - "๐Ÿ‰", - "๐ŸŠ", - "๐Ÿ‹", - "๐ŸŒ", - "๐Ÿ", - "๐ŸŽ", - "๐Ÿ", - "๐Ÿ", - "๐Ÿ‘", - "๐Ÿ’", - "๐Ÿ“", - "๐Ÿ”", - "๐Ÿ•", - "๐Ÿ–", - "๐Ÿ—", - "๐Ÿ˜", - "๐Ÿ™", - "๐Ÿš", - "๐Ÿ›", - "๐Ÿœ", - "๐Ÿ", - "๐Ÿž", - "๐ŸŸ", - "๐Ÿ ", - "๐Ÿก", - "๐Ÿข", - "๐Ÿฃ", - "๐Ÿค", - "๐Ÿฅ", - "๐Ÿฆ", - "๐Ÿง", - "๐Ÿจ", - "๐Ÿฉ", - "๐Ÿช", - "๐Ÿซ", - "๐Ÿฌ", - "๐Ÿญ", - "๐Ÿฎ", - "๐Ÿฏ", - "๐Ÿฐ", - "๐Ÿฑ", - "๐Ÿฒ", - "๐Ÿณ", - "๐Ÿด", - "๐Ÿต", - "๐Ÿถ", - "๐Ÿท", - "๐Ÿธ", - "๐Ÿน", - "๐Ÿบ", - "๐Ÿป", - "๐Ÿผ", - "๐Ÿฝ", - "๐Ÿพ", - "๐Ÿฟ", - "๐Ÿ‘€", - "๐Ÿ‘", - "๐Ÿ‘‚", - "๐Ÿ‘ƒ", - "๐Ÿ‘…", - "๐Ÿ‘ˆ", - "๐Ÿ‘‰", - "๐Ÿ‘Š", - "๐Ÿ‘‹", - "๐Ÿ‘Œ", - "๐Ÿ‘", - "๐Ÿ‘Ž", - "๐Ÿ‘", - "๐Ÿ‘", - "๐Ÿ‘‘", - "๐Ÿ‘’", - "๐Ÿ‘“", - "๐Ÿ‘”", - "๐Ÿ‘•", - "๐Ÿ‘–", - "๐Ÿ‘—", - "๐Ÿ‘˜", - "๐Ÿ‘š", - "๐Ÿ‘›", - "๐Ÿ‘œ", - "๐Ÿ‘", - "๐Ÿ‘ž", - "๐Ÿ‘Ÿ", - "๐Ÿ‘ ", - "๐Ÿ‘ก", - "๐Ÿ‘ข", - "๐Ÿ‘ฃ", - "๐Ÿ‘ค", - "๐Ÿ‘ฅ", - "๐Ÿ‘ฆ", - "๐Ÿ‘ง", - "๐Ÿ‘จ", - "๐Ÿ‘ฉ", - "๐Ÿ‘ช", - "๐Ÿ‘ซ", - "๐Ÿ‘ฌ", - "๐Ÿ‘ญ", - "๐Ÿ‘ฎ", - "๐Ÿ‘ฐ", - "๐Ÿ‘ฑ", - "๐Ÿ‘ฒ", - "๐Ÿ‘ณ", - "๐Ÿ‘ด", - "๐Ÿ‘ต", - "๐Ÿ‘ถ", - "๐Ÿ‘ท", - "๐Ÿ‘ธ", - "๐Ÿ‘น", - "๐Ÿ‘บ", - "๐Ÿ‘ป", - "๐Ÿ‘ผ", - "๐Ÿ‘ฝ", - "๐Ÿ‘พ", - "๐Ÿ‘ฟ", - "๐Ÿ’€", - "๐Ÿ’", - "๐Ÿ’‚", - "๐Ÿ’ƒ", - "๐Ÿ’„", - "๐Ÿ’…", - "๐Ÿ’†", - "๐Ÿ’‡", - "๐Ÿ’ˆ", - "๐Ÿ’‰", - "๐Ÿ’Š", - "๐Ÿ’‹", - "๐Ÿ’Œ", - "๐Ÿ’", - "๐Ÿ’Ž", - "๐Ÿ’", - "๐Ÿ’", - "๐Ÿ’‘", - "๐Ÿ’’", - "๐Ÿ’“", - "๐Ÿ’”", - "๐Ÿ’•", - "๐Ÿ’–", - "๐Ÿ’—", - "๐Ÿ’˜", - "๐Ÿ’™", - "๐Ÿ’š", - "๐Ÿ’›", - "๐Ÿ’œ", - "๐Ÿ’", - "๐Ÿ’ž", - "๐Ÿ’Ÿ", - "๐Ÿ’ ", - "๐Ÿ’ก", - "๐Ÿ’ข", - "๐Ÿ’ฃ", - "๐Ÿ’ค", - "๐Ÿ’ฅ", - "๐Ÿ’ฆ", - "๐Ÿ’ง", - "๐Ÿ’จ", - "๐Ÿ’ช", - "๐Ÿ’ซ", - "๐Ÿ’ฌ", - "๐Ÿ’ญ", - "๐Ÿ’ฎ", - "๐Ÿ’ฏ", - "๐Ÿ’ฐ", - "๐Ÿ’ฑ", - "๐Ÿ’ฒ", - "๐Ÿ’ณ", - "๐Ÿ’ด", - "๐Ÿ’ต", - "๐Ÿ’ถ", - "๐Ÿ’ท", - "๐Ÿ’ธ", - "๐Ÿ’น", - "๐Ÿ’บ", - "๐Ÿ’ป", - "๐Ÿ’ผ", - "๐Ÿ’ฝ", - "๐Ÿ’พ", - "๐Ÿ’ฟ", - "๐Ÿ“€", - "๐Ÿ“", - "๐Ÿ“‚", - "๐Ÿ“ƒ", - "๐Ÿ“„", - "๐Ÿ“…", - "๐Ÿ“†", - "๐Ÿ“‡", - "๐Ÿ“ˆ", - "๐Ÿ“‰", - "๐Ÿ“Š", - "๐Ÿ“‹", - "๐Ÿ“Œ", - "๐Ÿ“", - "๐Ÿ“Ž", - "๐Ÿ“", - "๐Ÿ“", - "๐Ÿ“‘", - "๐Ÿ“’", - "๐Ÿ““", - "๐Ÿ“”", - "๐Ÿ“•", - "๐Ÿ“–", - "๐Ÿ“—", - "๐Ÿ“˜", - "๐Ÿ“™", - "๐Ÿ“š", - "๐Ÿ“›", - "๐Ÿ“œ", - "๐Ÿ“", - "๐Ÿ“ž", - "๐Ÿ“Ÿ", - "๐Ÿ“ ", - "๐Ÿ“ก", - "๐Ÿ“ข", - "๐Ÿ“ฃ", - "๐Ÿ“ค", - "๐Ÿ“ฅ", - "๐Ÿ“ฆ", - "๐Ÿ“ง", - "๐Ÿ“จ", - "๐Ÿ“ฉ", - "๐Ÿ“ช", - "๐Ÿ“ซ", - "๐Ÿ“ฌ", - "๐Ÿ“ญ", - "๐Ÿ“ฎ", - "๐Ÿ“ฏ", - "๐Ÿ“ฐ", - "๐Ÿ“ฑ", - "๐Ÿ“ฒ", - "๐Ÿ“ณ", - "๐Ÿ“ด", - "๐Ÿ“ต", - "๐Ÿ“ถ", - "๐Ÿ“ท", - "๐Ÿ“ธ", - "๐Ÿ“น", - "๐Ÿ“บ", - "๐Ÿ“ป", - "๐Ÿ“ผ", - "๐Ÿ“ฝ", - "๐Ÿ“ฟ", - "๐Ÿ”€", - "๐Ÿ”", - "๐Ÿ”‚", - "๐Ÿ”ƒ", - "๐Ÿ”„", - "๐Ÿ”…", - "๐Ÿ”†", - "๐Ÿ”‡", - "๐Ÿ”ˆ", - "๐Ÿ”‰", - "๐Ÿ”Š", - "๐Ÿ”‹", - "๐Ÿ”Œ", - "๐Ÿ”", - "๐Ÿ”Ž", - "๐Ÿ”", - "๐Ÿ”", - "๐Ÿ”‘", - "๐Ÿ”’", - "๐Ÿ”“", - "๐Ÿ””", - "๐Ÿ”•", - "๐Ÿ”–", - "๐Ÿ”—", - "๐Ÿ”˜", - "๐Ÿ”™", - "๐Ÿ”š", - "๐Ÿ”›", - "๐Ÿ”œ", - "๐Ÿ”", - "๐Ÿ”Ÿ", - "๐Ÿ” ", - "๐Ÿ”ก", - "๐Ÿ”ข", - "๐Ÿ”ฃ", - "๐Ÿ”ค", - "๐Ÿ”ฅ", - "๐Ÿ”ฆ", - "๐Ÿ”ง", - "๐Ÿ”จ", - "๐Ÿ”ฉ", - "๐Ÿ”ช", - "๐Ÿ”ซ", - "๐Ÿ”ฌ", - "๐Ÿ”ญ", - "๐Ÿ”ฎ", - "๐Ÿ”ฏ", - "๐Ÿ”ฐ", - "๐Ÿ”ฑ", - "๐Ÿ”ด", - "๐Ÿ”ต", - "๐Ÿ”ถ", - "๐Ÿ”ท", - "๐Ÿ”ธ", - "๐Ÿ”น", - "๐Ÿ”บ", - "๐Ÿ”ป", - "๐Ÿ”ผ", - "๐Ÿ”ฝ", - "๐Ÿ•‰", - "๐Ÿ•Š", - "๐Ÿ•", - "๐Ÿ•‘", - "๐Ÿ•’", - "๐Ÿ•“", - "๐Ÿ•”", - "๐Ÿ••", - "๐Ÿ•–", - "๐Ÿ•—", - "๐Ÿ•˜", - "๐Ÿ•™", - "๐Ÿ•š", - "๐Ÿ•›", - "๐Ÿ•œ", - "๐Ÿ•", - "๐Ÿ•ž", - "๐Ÿ•Ÿ", - "๐Ÿ• ", - "๐Ÿ•ก", - "๐Ÿ•ข", - "๐Ÿ•ฃ", - "๐Ÿ•ค", - "๐Ÿ•ฅ", - "๐Ÿ•ฆ", - "๐Ÿ•ง", - "๐Ÿ•ฐ", - "๐Ÿ•ณ", - "๐Ÿ•ด", - "๐Ÿ•ต", - "๐Ÿ•ถ", - "๐Ÿ•น", - "๐Ÿ•บ", - "๐Ÿ–‡", - "๐Ÿ–Š", - "๐Ÿ–‹", - "๐Ÿ–Œ", - "๐Ÿ–", - "๐Ÿ–", - "๐Ÿ–•", - "๐Ÿ––", - "๐Ÿ–ค", - "๐Ÿ–ฅ", - "๐Ÿ–ผ", - "๐Ÿ—‚", - "๐Ÿ—ƒ", - "๐Ÿ—„", - "๐Ÿ—‘", - "๐Ÿ—’", - "๐Ÿ—“", - "๐Ÿ—œ", - "๐Ÿ—", - "๐Ÿ—ž", - "๐Ÿ—ก", - "๐Ÿ—ฃ", - "๐Ÿ—จ", - "๐Ÿ—ฏ", - "๐Ÿ—ณ", - "๐Ÿ—บ", - "๐Ÿš€", - "๐Ÿš", - "๐Ÿš‚", - "๐Ÿšƒ", - "๐Ÿš„", - "๐Ÿš…", - "๐Ÿš†", - "๐Ÿš‡", - "๐Ÿšˆ", - "๐Ÿš‰", - "๐ŸšŠ", - "๐Ÿš‹", - "๐ŸšŒ", - "๐Ÿš", - "๐ŸšŽ", - "๐Ÿš", - "๐Ÿš", - "๐Ÿš‘", - "๐Ÿš’", - "๐Ÿš“", - "๐Ÿš”", - "๐Ÿš•", - "๐Ÿš–", - "๐Ÿš—", - "๐Ÿš˜", - "๐Ÿš™", - "๐Ÿšš", - "๐Ÿš›", - "๐Ÿšœ", - "๐Ÿš", - "๐Ÿšž", - "๐ŸšŸ", - "๐Ÿš ", - "๐Ÿšก", - "๐Ÿšข", - "๐Ÿšฃ", - "๐Ÿšค", - "๐Ÿšฅ", - "๐Ÿšฆ", - "๐Ÿšง", - "๐Ÿšจ", - "๐Ÿšฉ", - "๐Ÿšช", - "๐Ÿšฌ", - "๐Ÿšฎ", - "๐Ÿšฐ", - "๐Ÿšฒ", - "๐Ÿšด", - "๐Ÿšต", - "๐Ÿšถ", - "๐Ÿšท", - "๐Ÿšธ", - "๐Ÿšน", - "๐Ÿšบ", - "๐Ÿšป", - "๐Ÿšผ", - "๐Ÿšฝ", - "๐Ÿšพ", - "๐Ÿšฟ", - "๐Ÿ›€", - "๐Ÿ›", - "๐Ÿ›‚", - "๐Ÿ›ƒ", - "๐Ÿ›„", - "๐Ÿ›…", - "๐Ÿ›‹", - "๐Ÿ›Œ", - "๐Ÿ›", - "๐Ÿ›Ž", - "๐Ÿ›", - "๐Ÿ›", - "๐Ÿ›‘", - "๐Ÿ›’", - "๐Ÿ›•", - "๐Ÿ›–", - "๐Ÿ›—", - "๐Ÿ›œ", - "๐Ÿ› ", - "๐Ÿ›ก", - "๐Ÿ›ข", - "๐Ÿ›ฃ", - "๐Ÿ›ค", - "๐Ÿ›ฅ", - "๐Ÿ›ฉ", - "๐Ÿ›ฐ", - "๐Ÿ›ณ", - "๐Ÿ›ด", - "๐Ÿ›ต", - "๐Ÿ›ถ", - "๐Ÿ›ท", - "๐Ÿ›ธ", - "๐Ÿ›น", - "๐Ÿ›บ", - "๐Ÿ›ป", - "๐Ÿ›ผ", - "๐ŸคŒ", - "๐Ÿค", - "๐ŸคŽ", - "๐Ÿค", - "๐Ÿค", - "๐Ÿค‘", - "๐Ÿค’", - "๐Ÿค“", - "๐Ÿค”", - "๐Ÿค•", - "๐Ÿค–", - "๐Ÿค—", - "๐Ÿค˜", - "๐Ÿค™", - "๐Ÿคš", - "๐Ÿค›", - "๐Ÿคœ", - "๐Ÿค", - "๐Ÿคž", - "๐ŸคŸ", - "๐Ÿค ", - "๐Ÿคก", - "๐Ÿคข", - "๐Ÿคฃ", - "๐Ÿคค", - "๐Ÿคฅ", - "๐Ÿคฆ", - "๐Ÿคง", - "๐Ÿคจ", - "๐Ÿคฉ", - "๐Ÿคช", - "๐Ÿคซ", - "๐Ÿคญ", - "๐Ÿคฏ", - "๐Ÿคฑ", - "๐Ÿคฒ", - "๐Ÿคณ", - "๐Ÿคด", - "๐Ÿคต", - "๐Ÿคถ", - "๐Ÿคท", - "๐Ÿคธ", - "๐Ÿคน", - "๐Ÿคบ", - "๐Ÿคผ", - "๐Ÿคฝ", - "๐Ÿคพ", - "๐Ÿคฟ", - "๐Ÿฅ€", - "๐Ÿฅ", - "๐Ÿฅ‚", - "๐Ÿฅƒ", - "๐Ÿฅ„", - "๐Ÿฅ…", - "๐Ÿฅ‡", - "๐Ÿฅˆ", - "๐Ÿฅ‰", - "๐ŸฅŠ", - "๐Ÿฅ‹", - "๐ŸฅŒ", - "๐Ÿฅ", - "๐ŸฅŽ", - "๐Ÿฅ", - "๐Ÿฅ", - "๐Ÿฅ‘", - "๐Ÿฅ’", - "๐Ÿฅ“", - "๐Ÿฅ”", - "๐Ÿฅ•", - "๐Ÿฅ–", - "๐Ÿฅ—", - "๐Ÿฅ˜", - "๐Ÿฅ™", - "๐Ÿฅš", - "๐Ÿฅ›", - "๐Ÿฅœ", - "๐Ÿฅ", - "๐Ÿฅž", - "๐ŸฅŸ", - "๐Ÿฅ ", - "๐Ÿฅก", - "๐Ÿฅข", - "๐Ÿฅฃ", - "๐Ÿฅค", - "๐Ÿฅฅ", - "๐Ÿฅฆ", - "๐Ÿฅง", - "๐Ÿฅจ", - "๐Ÿฅฉ", - "๐Ÿฅช", - "๐Ÿฅซ", - "๐Ÿฅฌ", - "๐Ÿฅญ", - "๐Ÿฅฎ", - "๐Ÿฅฏ", - "๐Ÿฅฐ", - "๐Ÿฅฑ", - "๐Ÿฅฒ", - "๐Ÿฅณ", - "๐Ÿฅด", - "๐Ÿฅถ", - "๐Ÿฅท", - "๐Ÿฅธ", - "๐Ÿฅน", - "๐Ÿฅบ", - "๐Ÿฅป", - "๐Ÿฅผ", - "๐Ÿฅฝ", - "๐Ÿฅพ", - "๐Ÿฅฟ", - "๐Ÿฆ€", - "๐Ÿฆ", - "๐Ÿฆ‚", - "๐Ÿฆƒ", - "๐Ÿฆ„", - "๐Ÿฆ…", - "๐Ÿฆ†", - "๐Ÿฆ‡", - "๐Ÿฆˆ", - "๐Ÿฆ‰", - "๐ŸฆŠ", - "๐Ÿฆ‹", - "๐ŸฆŒ", - "๐Ÿฆ", - "๐ŸฆŽ", - "๐Ÿฆ", - "๐Ÿฆ", - "๐Ÿฆ‘", - "๐Ÿฆ’", - "๐Ÿฆ“", - "๐Ÿฆ”", - "๐Ÿฆ•", - "๐Ÿฆ–", - "๐Ÿฆ—", - "๐Ÿฆ˜", - "๐Ÿฆ™", - "๐Ÿฆš", - "๐Ÿฆ›", - "๐Ÿฆœ", - "๐Ÿฆ", - "๐Ÿฆž", - "๐ŸฆŸ", - "๐Ÿฆ ", - "๐Ÿฆก", - "๐Ÿฆข", - "๐Ÿฆฃ", - "๐Ÿฆค", - "๐Ÿฆฅ", - "๐Ÿฆฆ", - "๐Ÿฆง", - "๐Ÿฆจ", - "๐Ÿฆฉ", - "๐Ÿฆช", - "๐Ÿฆซ", - "๐Ÿฆฌ", - "๐Ÿฆญ", - "๐Ÿฆฎ", - "๐Ÿฆฏ", - "๐Ÿฆฐ", - "๐Ÿฆฑ", - "๐Ÿฆฒ", - "๐Ÿฆณ", - "๐Ÿฆด", - "๐Ÿฆต", - "๐Ÿฆถ", - "๐Ÿฆท", - "๐Ÿฆธ", - "๐Ÿฆน", - "๐Ÿฆบ", - "๐Ÿฆป", - "๐Ÿฆผ", - "๐Ÿง€", - "๐Ÿง", - "๐Ÿง‚", - "๐Ÿงƒ", - "๐Ÿง„", - "๐Ÿง…", - "๐Ÿง†", - "๐Ÿง‡", - "๐Ÿงˆ", - "๐Ÿง‰", - "๐ŸงŠ", - "๐Ÿง‹", - "๐ŸงŒ", - "๐Ÿง", - "๐ŸงŽ", - "๐Ÿง", - "๐Ÿง", - "๐Ÿง‘", - "๐Ÿง’", - "๐Ÿง“", - "๐Ÿง”", - "๐Ÿง•", - "๐Ÿง–", - "๐Ÿง—", - "๐Ÿง˜", - "๐Ÿง™", - "๐Ÿงš", - "๐Ÿง›", - "๐Ÿงœ", - "๐Ÿง", - "๐Ÿงž", - "๐ŸงŸ", - "๐Ÿง ", - "๐Ÿงก", - "๐Ÿงข", - "๐Ÿงฃ", - "๐Ÿงค", - "๐Ÿงฅ", - "๐Ÿงฆ", - "๐Ÿงง", - "๐Ÿงจ", - "๐Ÿงฉ", - "๐Ÿงช", - "๐Ÿงซ", - "๐Ÿงฌ", - "๐Ÿงญ", - "๐Ÿงฎ", - "๐Ÿงฏ", - "๐Ÿงฐ", - "๐Ÿงฑ", - "๐Ÿงฒ", - "๐Ÿงณ", - "๐Ÿงด", - "๐Ÿงต", - "๐Ÿงถ", - "๐Ÿงท", - "๐Ÿงธ", - "๐Ÿงน", - "๐Ÿงบ", - "๐Ÿงป", - "๐Ÿงผ", - "๐Ÿงฝ", - "๐Ÿงพ", - "๐Ÿงฟ", - "๐Ÿฉฐ", - "๐Ÿฉฑ", - "๐Ÿฉณ", - "๐Ÿฉด", - "๐Ÿฉต", - "๐Ÿฉถ", - "๐Ÿฉท", - "๐Ÿฉธ", - "๐Ÿฉน", - "๐Ÿฉบ", - "๐Ÿฉป", - "๐Ÿฉผ", - "๐Ÿช€", - "๐Ÿช", - "๐Ÿช‚", - "๐Ÿชƒ", - "๐Ÿช„", - "๐Ÿช…", - "๐Ÿช†", - "๐Ÿช‡", - "๐Ÿชˆ", - "๐Ÿช‰", - "๐Ÿช", - "๐Ÿช", - "๐Ÿช‘", - "๐Ÿช’", - "๐Ÿช“", - "๐Ÿช”", - "๐Ÿช•", - "๐Ÿช–", - "๐Ÿช—", - "๐Ÿช˜", - "๐Ÿช™", - "๐Ÿชš", - "๐Ÿช›", - "๐Ÿชœ", - "๐Ÿช", - "๐Ÿชž", - "๐ŸชŸ", - "๐Ÿช ", - "๐Ÿชก", - "๐Ÿชข", - "๐Ÿชฃ", - "๐Ÿชค", - "๐Ÿชฅ", - "๐Ÿชฆ", - "๐Ÿชง", - "๐Ÿชจ", - "๐Ÿชฉ", - "๐Ÿชช", - "๐Ÿชซ", - "๐Ÿชฌ", - "๐Ÿชญ", - "๐Ÿชฎ", - "๐Ÿชฏ", - "๐Ÿชฐ", - "๐Ÿชฑ", - "๐Ÿชฒ", - "๐Ÿชณ", - "๐Ÿชด", - "๐Ÿชต", - "๐Ÿชถ", - "๐Ÿชท", - "๐Ÿชธ", - "๐Ÿชน", - "๐Ÿชบ", - "๐Ÿชป", - "๐Ÿชผ", - "๐Ÿชฝ", - "๐Ÿชพ", - "๐Ÿชฟ", - "๐Ÿซ€", - "๐Ÿซ", - "๐Ÿซ‚", - "๐Ÿซƒ", - "๐Ÿซ„", - "๐Ÿซ…", - "๐Ÿซ†", - "๐ŸซŽ", - "๐Ÿซ", - "๐Ÿซ", - "๐Ÿซ‘", - "๐Ÿซ’", - "๐Ÿซ“", - "๐Ÿซ”", - "๐Ÿซ•", - "๐Ÿซ–", - "๐Ÿซ—", - "๐Ÿซ˜", - "๐Ÿซ™", - "๐Ÿซš", - "๐Ÿซ›", - "๐Ÿซœ", - "๐ŸซŸ", - "๐Ÿซ ", - "๐Ÿซก", - "๐Ÿซข", - "๐Ÿซฃ", - "๐Ÿซค", - "๐Ÿซฅ", - "๐Ÿซฆ", - "๐Ÿซง", - "๐Ÿซจ", - "๐Ÿซฉ", - "๐Ÿซฐ", - "๐Ÿซฑ", - "๐Ÿซฒ", - "๐Ÿซณ", - "๐Ÿซด", - "๐Ÿซต", - "๐Ÿซถ", - "๐Ÿซท", - "๐Ÿซธ", - "๐Ÿƒ", - "โŒš", - "โŒ›", - "โฉ", - "โช", - "โซ", - "โฌ", - "โฐ", - "โณ", - "โšช", - "โšซ", - "โšฝ", - "โšพ", - "โ›„", - "โ›…", - "โ›Ž", - "โ›”", - "โ›ช", - "โ›ฒ", - "โ›ณ", - "โ›ต", - "โ›บ", - "โ›ฝ", - "โœ…", - "โœŠ", - "โœ‹", - "โœจ", - "โŒ", - "โŽ", - "โ“", - "โ”", - "โ•", - "โ—", - "โž•", - "โž–", - "โž—", - "โžฐ", - "โžฟ", - "โฌ›", - "โฌœ", - "โญ", - "โญ•", - "โ˜€๏ธ", - "โ˜๏ธ", - "โ˜‚๏ธ", - "โ˜ƒ๏ธ", - "โ˜Ž๏ธ", - "โ˜”๏ธ", - "โ˜•๏ธ", - "โ˜๏ธ", - "โ˜บ๏ธ", - "โ™ˆ๏ธ", - "โ™‰๏ธ", - "โ™Š๏ธ", - "โ™‹๏ธ", - "โ™Œ๏ธ", - "โ™๏ธ", - "โ™Ž๏ธ", - "โ™๏ธ", - "โ™๏ธ", - "โ™‘๏ธ", - "โ™’๏ธ", - "โ™“๏ธ", - "โ™ ๏ธ", - "โ™ฃ๏ธ", - "โ™ฅ๏ธ", - "โ™ฆ๏ธ", - "โ™จ๏ธ", - "โ™ป๏ธ", - "โ™ฟ๏ธ", - "โš“๏ธ", - "โš”๏ธ", - "โš–๏ธ", - "โš—๏ธ", - "โš™๏ธ", - "โš›๏ธ", - "โšœ๏ธ", - "โš ๏ธ", - "โšก๏ธ", - "โšช๏ธ", - "โšซ๏ธ", - "โšฐ๏ธ", - "โšฑ๏ธ", - "โšฝ๏ธ", - "โšพ๏ธ", - "โ›„๏ธ", - "โ›…๏ธ", - "โ›ˆ๏ธ", - "โ›Ž๏ธ", - "โ›๏ธ", - "โ›‘๏ธ", - "โ›“๏ธ", - "โ›”๏ธ", - "โ›ฉ๏ธ", - "โ›ช๏ธ", - "โ›ฐ๏ธ", - "โ›ฑ๏ธ", - "โ›ฒ๏ธ", - "โ›ณ๏ธ", - "โ›ด๏ธ", - "โ›ต๏ธ", - "โ›ท๏ธ", - "โ›ธ๏ธ", - "โ›น๏ธ", - "โ›บ๏ธ", - "โ›ฝ๏ธ", - "โœ‚๏ธ", - "โœ…๏ธ", - "โœˆ๏ธ", - "โœ‰๏ธ", - "โœŠ๏ธ", - "โœ‹๏ธ", - "โœŒ๏ธ", - "โœ๏ธ", - "โœ๏ธ", - "โœ’๏ธ", - "โœ”๏ธ", - "โœ–๏ธ", - "โœ๏ธ", - "โœก๏ธ", - "โœจ๏ธ", - "โœณ๏ธ", - "โœด๏ธ", - "โ„๏ธ", - "โ‡๏ธ", - "โŒ๏ธ", - "โŽ๏ธ", - "โ“๏ธ", - "โ”๏ธ", - "โ•๏ธ", - "โ—๏ธ", - "โฃ๏ธ", - "โค๏ธ", - "โž•๏ธ", - "โž–๏ธ", - "โž—๏ธ", - "โžก๏ธ", - "โžฐ๏ธ", - "โžฟ๏ธ", - "๐Ÿ‘‹๐Ÿป", - "๐Ÿ‘‹๐Ÿผ", - "๐Ÿ‘‹๐Ÿฝ", - "๐Ÿ‘‹๐Ÿพ", - "๐Ÿ‘‹๐Ÿฟ", - "๐Ÿคš๐Ÿป", - "๐Ÿคš๐Ÿผ", - "๐Ÿคš๐Ÿฝ", - "๐Ÿคš๐Ÿพ", - "๐Ÿคš๐Ÿฟ", - "๐Ÿ–๐Ÿป", - "๐Ÿ–๐Ÿผ", - "๐Ÿ–๐Ÿฝ", - "๐Ÿ–๐Ÿพ", - "๐Ÿ–๐Ÿฟ", - "โœ‹๐Ÿป", - "โœ‹๐Ÿผ", - "โœ‹๐Ÿฝ", - "โœ‹๐Ÿพ", - "โœ‹๐Ÿฟ", - "๐Ÿ––๐Ÿป", - "๐Ÿ––๐Ÿผ", - "๐Ÿ––๐Ÿฝ", - "๐Ÿ––๐Ÿพ", - "๐Ÿ––๐Ÿฟ", - "๐Ÿ‘Œ๐Ÿป", - "๐Ÿ‘Œ๐Ÿผ", - "๐Ÿ‘Œ๐Ÿฝ", - "๐Ÿ‘Œ๐Ÿพ", - "๐Ÿ‘Œ๐Ÿฟ", - "๐ŸคŒ๐Ÿป", - "๐ŸคŒ๐Ÿผ", - "๐ŸคŒ๐Ÿฝ", - "๐ŸคŒ๐Ÿพ", - "๐ŸคŒ๐Ÿฟ", - "๐Ÿค๐Ÿป", - "๐Ÿค๐Ÿผ", - "๐Ÿค๐Ÿฝ", - "๐Ÿค๐Ÿพ", - "๐Ÿค๐Ÿฟ", - "โœŒ๐Ÿป", - "โœŒ๐Ÿผ", - "โœŒ๐Ÿฝ", - "โœŒ๐Ÿพ", - "โœŒ๐Ÿฟ", - "๐Ÿคž๐Ÿป", - "๐Ÿคž๐Ÿผ", - "๐Ÿคž๐Ÿฝ", - "๐Ÿคž๐Ÿพ", - "๐Ÿคž๐Ÿฟ", - "๐ŸคŸ๐Ÿป", - "๐ŸคŸ๐Ÿผ", - "๐ŸคŸ๐Ÿฝ", - "๐ŸคŸ๐Ÿพ", - "๐ŸคŸ๐Ÿฟ", - "๐Ÿค˜๐Ÿป", - "๐Ÿค˜๐Ÿผ", - "๐Ÿค˜๐Ÿฝ", - "๐Ÿค˜๐Ÿพ", - "๐Ÿค˜๐Ÿฟ", - "๐Ÿค™๐Ÿป", - "๐Ÿค™๐Ÿผ", - "๐Ÿค™๐Ÿฝ", - "๐Ÿค™๐Ÿพ", - "๐Ÿค™๐Ÿฟ", - "๐Ÿ‘ˆ๐Ÿป", - "๐Ÿ‘ˆ๐Ÿผ", - "๐Ÿ‘ˆ๐Ÿฝ", - "๐Ÿ‘ˆ๐Ÿพ", - "๐Ÿ‘ˆ๐Ÿฟ", - "๐Ÿ‘‰๐Ÿป", - "๐Ÿ‘‰๐Ÿผ", - "๐Ÿ‘‰๐Ÿฝ", - "๐Ÿ‘‰๐Ÿพ", - "๐Ÿ‘‰๐Ÿฟ", - "๐Ÿ‘†๐Ÿป", - "๐Ÿ‘†๐Ÿผ", - "๐Ÿ‘†๐Ÿฝ", - "๐Ÿ‘†๐Ÿพ", - "๐Ÿ‘†๐Ÿฟ", - "๐Ÿ–•๐Ÿป", - "๐Ÿ–•๐Ÿผ", - "๐Ÿ–•๐Ÿฝ", - "๐Ÿ–•๐Ÿพ", - "๐Ÿ–•๐Ÿฟ", - "๐Ÿ‘‡๐Ÿป", - "๐Ÿ‘‡๐Ÿผ", - "๐Ÿ‘‡๐Ÿฝ", - "๐Ÿ‘‡๐Ÿพ", - "๐Ÿ‘‡๐Ÿฟ", - "โ˜๐Ÿป", - "โ˜๐Ÿผ", - "โ˜๐Ÿฝ", - "โ˜๐Ÿพ", - "โ˜๐Ÿฟ", - "๐Ÿ‘๐Ÿป", - "๐Ÿ‘๐Ÿผ", - "๐Ÿ‘๐Ÿฝ", - "๐Ÿ‘๐Ÿพ", - "๐Ÿ‘๐Ÿฟ", - "๐Ÿ‘Ž๐Ÿป", - "๐Ÿ‘Ž๐Ÿผ", - "๐Ÿ‘Ž๐Ÿฝ", - "๐Ÿ‘Ž๐Ÿพ", - "๐Ÿ‘Ž๐Ÿฟ", - "โœŠ๐Ÿป", - "โœŠ๐Ÿผ", - "โœŠ๐Ÿฝ", - "โœŠ๐Ÿพ", - "โœŠ๐Ÿฟ", - "๐Ÿ‘Š๐Ÿป", - "๐Ÿ‘Š๐Ÿผ", - "๐Ÿ‘Š๐Ÿฝ", - "๐Ÿ‘Š๐Ÿพ", - "๐Ÿ‘Š๐Ÿฟ", - "๐Ÿค›๐Ÿป", - "๐Ÿค›๐Ÿผ", - "๐Ÿค›๐Ÿฝ", - "๐Ÿค›๐Ÿพ", - "๐Ÿค›๐Ÿฟ", - "๐Ÿคœ๐Ÿป", - "๐Ÿคœ๐Ÿผ", - "๐Ÿคœ๐Ÿฝ", - "๐Ÿคœ๐Ÿพ", - "๐Ÿคœ๐Ÿฟ", - "๐Ÿ‘๐Ÿป", - "๐Ÿ‘๐Ÿผ", - "๐Ÿ‘๐Ÿฝ", - "๐Ÿ‘๐Ÿพ", - "๐Ÿ‘๐Ÿฟ", - "๐Ÿ™Œ๐Ÿป", - "๐Ÿ™Œ๐Ÿผ", - "๐Ÿ™Œ๐Ÿฝ", - "๐Ÿ™Œ๐Ÿพ", - "๐Ÿ™Œ๐Ÿฟ", - "๐Ÿ‘๐Ÿป", - "๐Ÿ‘๐Ÿผ", - "๐Ÿ‘๐Ÿฝ", - "๐Ÿ‘๐Ÿพ", - "๐Ÿ‘๐Ÿฟ", - "๐Ÿคฒ๐Ÿป", - "๐Ÿคฒ๐Ÿผ", - "๐Ÿคฒ๐Ÿฝ", - "๐Ÿคฒ๐Ÿพ", - "๐Ÿคฒ๐Ÿฟ", - "๐Ÿค๐Ÿป", - "๐Ÿค๐Ÿผ", - "๐Ÿค๐Ÿฝ", - "๐Ÿค๐Ÿพ", - "๐Ÿค๐Ÿฟ", - "๐Ÿ™๐Ÿป", - "๐Ÿ™๐Ÿผ", - "๐Ÿ™๐Ÿฝ", - "๐Ÿ™๐Ÿพ", - "๐Ÿ™๐Ÿฟ", - "โœ๐Ÿป", - "โœ๐Ÿผ", - "โœ๐Ÿฝ", - "โœ๐Ÿพ", - "โœ๐Ÿฟ", - "๐Ÿ’…๐Ÿป", - "๐Ÿ’…๐Ÿผ", - "๐Ÿ’…๐Ÿฝ", - "๐Ÿ’…๐Ÿพ", - "๐Ÿ’…๐Ÿฟ", - "๐Ÿคณ๐Ÿป", - "๐Ÿคณ๐Ÿผ", - "๐Ÿคณ๐Ÿฝ", - "๐Ÿคณ๐Ÿพ", - "๐Ÿคณ๐Ÿฟ", - "๐Ÿ’ช๐Ÿป", - "๐Ÿ’ช๐Ÿผ", - "๐Ÿ’ช๐Ÿฝ", - "๐Ÿ’ช๐Ÿพ", - "๐Ÿ’ช๐Ÿฟ", - "๐Ÿฆต๐Ÿป", - "๐Ÿฆต๐Ÿผ", - "๐Ÿฆต๐Ÿฝ", - "๐Ÿฆต๐Ÿพ", - "๐Ÿฆต๐Ÿฟ", - "๐Ÿฆถ๐Ÿป", - "๐Ÿฆถ๐Ÿผ", - "๐Ÿฆถ๐Ÿฝ", - "๐Ÿฆถ๐Ÿพ", - "๐Ÿฆถ๐Ÿฟ", - "๐Ÿ‘‚๐Ÿป", - "๐Ÿ‘‚๐Ÿผ", - "๐Ÿ‘‚๐Ÿฝ", - "๐Ÿ‘‚๐Ÿพ", - "๐Ÿ‘‚๐Ÿฟ", - "๐Ÿฆป๐Ÿป", - "๐Ÿฆป๐Ÿผ", - "๐Ÿฆป๐Ÿฝ", - "๐Ÿฆป๐Ÿพ", - "๐Ÿฆป๐Ÿฟ", - "๐Ÿ‘ƒ๐Ÿป", - "๐Ÿ‘ƒ๐Ÿผ", - "๐Ÿ‘ƒ๐Ÿฝ", - "๐Ÿ‘ƒ๐Ÿพ", - "๐Ÿ‘ƒ๐Ÿฟ", - "๐Ÿ‘ถ๐Ÿป", - "๐Ÿ‘ถ๐Ÿผ", - "๐Ÿ‘ถ๐Ÿฝ", - "๐Ÿ‘ถ๐Ÿพ", - "๐Ÿ‘ถ๐Ÿฟ", - "๐Ÿง’๐Ÿป", - "๐Ÿง’๐Ÿผ", - "๐Ÿง’๐Ÿฝ", - "๐Ÿง’๐Ÿพ", - "๐Ÿง’๐Ÿฟ", - "๐Ÿ‘ฆ๐Ÿป", - "๐Ÿ‘ฆ๐Ÿผ", - "๐Ÿ‘ฆ๐Ÿฝ", - "๐Ÿ‘ฆ๐Ÿพ", - "๐Ÿ‘ฆ๐Ÿฟ", - "๐Ÿ‘ง๐Ÿป", - "๐Ÿ‘ง๐Ÿผ", - "๐Ÿ‘ง๐Ÿฝ", - "๐Ÿ‘ง๐Ÿพ", - "๐Ÿ‘ง๐Ÿฟ", - "๐Ÿง‘๐Ÿป", - "๐Ÿง‘๐Ÿผ", - "๐Ÿง‘๐Ÿฝ", - "๐Ÿง‘๐Ÿพ", - "๐Ÿง‘๐Ÿฟ", - "๐Ÿ‘ฑ๐Ÿป", - "๐Ÿ‘ฑ๐Ÿผ", - "๐Ÿ‘ฑ๐Ÿฝ", - "๐Ÿ‘ฑ๐Ÿพ", - "๐Ÿ‘ฑ๐Ÿฟ", - "๐Ÿ‘จ๐Ÿป", - "๐Ÿ‘จ๐Ÿผ", - "๐Ÿ‘จ๐Ÿฝ", - "๐Ÿ‘จ๐Ÿพ", - "๐Ÿ‘จ๐Ÿฟ", - "๐Ÿง”๐Ÿป", - "๐Ÿง”๐Ÿผ", - "๐Ÿง”๐Ÿฝ", - "๐Ÿง”๐Ÿพ", - "๐Ÿง”๐Ÿฟ", - "๐Ÿ‘ฉ๐Ÿป", - "๐Ÿ‘ฉ๐Ÿผ", - "๐Ÿ‘ฉ๐Ÿฝ", - "๐Ÿ‘ฉ๐Ÿพ", - "๐Ÿ‘ฉ๐Ÿฟ", - "๐Ÿง“๐Ÿป", - "๐Ÿง“๐Ÿผ", - "๐Ÿง“๐Ÿฝ", - "๐Ÿง“๐Ÿพ", - "๐Ÿง“๐Ÿฟ", - "๐Ÿ‘ด๐Ÿป", - "๐Ÿ‘ด๐Ÿผ", - "๐Ÿ‘ด๐Ÿฝ", - "๐Ÿ‘ด๐Ÿพ", - "๐Ÿ‘ด๐Ÿฟ", - "๐Ÿ‘ต๐Ÿป", - "๐Ÿ‘ต๐Ÿผ", - "๐Ÿ‘ต๐Ÿฝ", - "๐Ÿ‘ต๐Ÿพ", - "๐Ÿ‘ต๐Ÿฟ", - "๐Ÿ™๐Ÿป", - "๐Ÿ™๐Ÿผ", - "๐Ÿ™๐Ÿฝ", - "๐Ÿ™๐Ÿพ", - "๐Ÿ™๐Ÿฟ", - "๐Ÿ™Ž๐Ÿป", - "๐Ÿ™Ž๐Ÿผ", - "๐Ÿ™Ž๐Ÿฝ", - "๐Ÿ™Ž๐Ÿพ", - "๐Ÿ™Ž๐Ÿฟ", - "๐Ÿ™…๐Ÿป", - "๐Ÿ™…๐Ÿผ", - "๐Ÿ™…๐Ÿฝ", - "๐Ÿ™…๐Ÿพ", - "๐Ÿ™…๐Ÿฟ", - "๐Ÿ™†๐Ÿป", - "๐Ÿ™†๐Ÿผ", - "๐Ÿ™†๐Ÿฝ", - "๐Ÿ™†๐Ÿพ", - "๐Ÿ™†๐Ÿฟ", - "๐Ÿ’๐Ÿป", - "๐Ÿ’๐Ÿผ", - "๐Ÿ’๐Ÿฝ", - "๐Ÿ’๐Ÿพ", - "๐Ÿ’๐Ÿฟ", - "๐Ÿ™‹๐Ÿป", - "๐Ÿ™‹๐Ÿผ", - "๐Ÿ™‹๐Ÿฝ", - "๐Ÿ™‹๐Ÿพ", - "๐Ÿ™‹๐Ÿฟ", - "๐Ÿง๐Ÿป", - "๐Ÿง๐Ÿผ", - "๐Ÿง๐Ÿฝ", - "๐Ÿง๐Ÿพ", - "๐Ÿง๐Ÿฟ", - "๐Ÿ™‡๐Ÿป", - "๐Ÿ™‡๐Ÿผ", - "๐Ÿ™‡๐Ÿฝ", - "๐Ÿ™‡๐Ÿพ", - "๐Ÿ™‡๐Ÿฟ", - "๐Ÿคฆ๐Ÿป", - "๐Ÿคฆ๐Ÿผ", - "๐Ÿคฆ๐Ÿฝ", - "๐Ÿคฆ๐Ÿพ", - "๐Ÿคฆ๐Ÿฟ", - "๐Ÿคท๐Ÿป", - "๐Ÿคท๐Ÿผ", - "๐Ÿคท๐Ÿฝ", - "๐Ÿคท๐Ÿพ", - "๐Ÿคท๐Ÿฟ", - "๐Ÿ’†๐Ÿป", - "๐Ÿ’†๐Ÿผ", - "๐Ÿ’†๐Ÿฝ", - "๐Ÿ’†๐Ÿพ", - "๐Ÿ’†๐Ÿฟ", - "๐Ÿ’‡๐Ÿป", - "๐Ÿ’‡๐Ÿผ", - "๐Ÿ’‡๐Ÿฝ", - "๐Ÿ’‡๐Ÿพ", - "๐Ÿ’‡๐Ÿฟ", - "๐Ÿšถ๐Ÿป", - "๐Ÿšถ๐Ÿผ", - "๐Ÿšถ๐Ÿฝ", - "๐Ÿšถ๐Ÿพ", - "๐Ÿšถ๐Ÿฟ", - "๐Ÿง๐Ÿป", - "๐Ÿง๐Ÿผ", - "๐Ÿง๐Ÿฝ", - "๐Ÿง๐Ÿพ", - "๐Ÿง๐Ÿฟ", - "๐ŸงŽ๐Ÿป", - "๐ŸงŽ๐Ÿผ", - "๐ŸงŽ๐Ÿฝ", - "๐ŸงŽ๐Ÿพ", - "๐ŸงŽ๐Ÿฟ", - "๐Ÿƒ๐Ÿป", - "๐Ÿƒ๐Ÿผ", - "๐Ÿƒ๐Ÿฝ", - "๐Ÿƒ๐Ÿพ", - "๐Ÿƒ๐Ÿฟ", - "๐Ÿ’ƒ๐Ÿป", - "๐Ÿ’ƒ๐Ÿผ", - "๐Ÿ’ƒ๐Ÿฝ", - "๐Ÿ’ƒ๐Ÿพ", - "๐Ÿ’ƒ๐Ÿฟ", - "๐Ÿ•บ๐Ÿป", - "๐Ÿ•บ๐Ÿผ", - "๐Ÿ•บ๐Ÿฝ", - "๐Ÿ•บ๐Ÿพ", - "๐Ÿ•บ๐Ÿฟ", - "๐Ÿง—๐Ÿป", - "๐Ÿง—๐Ÿผ", - "๐Ÿง—๐Ÿฝ", - "๐Ÿง—๐Ÿพ", - "๐Ÿง—๐Ÿฟ", - "๐Ÿง˜๐Ÿป", - "๐Ÿง˜๐Ÿผ", - "๐Ÿง˜๐Ÿฝ", - "๐Ÿง˜๐Ÿพ", - "๐Ÿง˜๐Ÿฟ", - "๐Ÿ›€๐Ÿป", - "๐Ÿ›€๐Ÿผ", - "๐Ÿ›€๐Ÿฝ", - "๐Ÿ›€๐Ÿพ", - "๐Ÿ›€๐Ÿฟ", - "๐Ÿ›Œ๐Ÿป", - "๐Ÿ›Œ๐Ÿผ", - "๐Ÿ›Œ๐Ÿฝ", - "๐Ÿ›Œ๐Ÿพ", - "๐Ÿ›Œ๐Ÿฟ", - "๐Ÿ‡๐Ÿป", - "๐Ÿ‡๐Ÿผ", - "๐Ÿ‡๐Ÿฝ", - "๐Ÿ‡๐Ÿพ", - "๐Ÿ‡๐Ÿฟ", - "๐Ÿ‚๐Ÿป", - "๐Ÿ‚๐Ÿผ", - "๐Ÿ‚๐Ÿฝ", - "๐Ÿ‚๐Ÿพ", - "๐Ÿ‚๐Ÿฟ", - "๐ŸŒ๐Ÿป", - "๐ŸŒ๐Ÿผ", - "๐ŸŒ๐Ÿฝ", - "๐ŸŒ๐Ÿพ", - "๐ŸŒ๐Ÿฟ", - "๐Ÿ„๐Ÿป", - "๐Ÿ„๐Ÿผ", - "๐Ÿ„๐Ÿฝ", - "๐Ÿ„๐Ÿพ", - "๐Ÿ„๐Ÿฟ", - "๐Ÿšฃ๐Ÿป", - "๐Ÿšฃ๐Ÿผ", - "๐Ÿšฃ๐Ÿฝ", - "๐Ÿšฃ๐Ÿพ", - "๐Ÿšฃ๐Ÿฟ", - "๐ŸŠ๐Ÿป", - "๐ŸŠ๐Ÿผ", - "๐ŸŠ๐Ÿฝ", - "๐ŸŠ๐Ÿพ", - "๐ŸŠ๐Ÿฟ", - "โ›น๐Ÿป", - "โ›น๐Ÿผ", - "โ›น๐Ÿฝ", - "โ›น๐Ÿพ", - "โ›น๐Ÿฟ", - "๐Ÿ‹๐Ÿป", - "๐Ÿ‹๐Ÿผ", - "๐Ÿ‹๐Ÿฝ", - "๐Ÿ‹๐Ÿพ", - "๐Ÿ‹๐Ÿฟ", - "๐Ÿšด๐Ÿป", - "๐Ÿšด๐Ÿผ", - "๐Ÿšด๐Ÿฝ", - "๐Ÿšด๐Ÿพ", - "๐Ÿšด๐Ÿฟ", - "๐Ÿšต๐Ÿป", - "๐Ÿšต๐Ÿผ", - "๐Ÿšต๐Ÿฝ", - "๐Ÿšต๐Ÿพ", - "๐Ÿšต๐Ÿฟ", - "๐Ÿคธ๐Ÿป", - "๐Ÿคธ๐Ÿผ", - "๐Ÿคธ๐Ÿฝ", - "๐Ÿคธ๐Ÿพ", - "๐Ÿคธ๐Ÿฟ", - "๐Ÿคฝ๐Ÿป", - "๐Ÿคฝ๐Ÿผ", - "๐Ÿคฝ๐Ÿฝ", - "๐Ÿคฝ๐Ÿพ", - "๐Ÿคฝ๐Ÿฟ", - "๐Ÿคพ๐Ÿป", - "๐Ÿคพ๐Ÿผ", - "๐Ÿคพ๐Ÿฝ", - "๐Ÿคพ๐Ÿพ", - "๐Ÿคพ๐Ÿฟ", - "๐Ÿคน๐Ÿป", - "๐Ÿคน๐Ÿผ", - "๐Ÿคน๐Ÿฝ", - "๐Ÿคน๐Ÿพ", - "๐Ÿคน๐Ÿฟ", - "0๏ธโƒฃ", - "1๏ธโƒฃ", - "2๏ธโƒฃ", - "3๏ธโƒฃ", - "4๏ธโƒฃ", - "5๏ธโƒฃ", - "6๏ธโƒฃ", - "7๏ธโƒฃ", - "8๏ธโƒฃ", - "9๏ธโƒฃ", - "#๏ธโƒฃ", - "*๏ธโƒฃ", - "โ€ผ๏ธ", - "โ‰๏ธ", - "โ„ข๏ธ", - "โ„น๏ธ", - "โ†”๏ธ", - "โ†•๏ธ", - "โ†–๏ธ", - "โ†—๏ธ", - "โ†˜๏ธ", - "โ†™๏ธ", - "โ†ฉ๏ธ", - "โ†ช๏ธ", - "โคด๏ธ", - "โคต๏ธ", - "โฌ…๏ธ", - "โฌ†๏ธ", - "โฌ‡๏ธ", - "โญ๏ธ", - "โญ•๏ธ", - "ใ€ฐ๏ธ", - "ใ€ฝ๏ธ", - "ใŠ—๏ธ", - "ใŠ™๏ธ", - "๐Ÿ‡ฆ๐Ÿ‡จ", - "๐Ÿ‡ฆ๐Ÿ‡ฉ", - "๐Ÿ‡ฆ๐Ÿ‡ช", - "๐Ÿ‡ฆ๐Ÿ‡ซ", - "๐Ÿ‡ฆ๐Ÿ‡ฌ", - "๐Ÿ‡ฆ๐Ÿ‡ฎ", - "๐Ÿ‡ฆ๐Ÿ‡ฑ", - "๐Ÿ‡ฆ๐Ÿ‡ฒ", - "๐Ÿ‡ฆ๐Ÿ‡ด", - "๐Ÿ‡ฆ๐Ÿ‡ถ", - "๐Ÿ‡ฆ๐Ÿ‡ท", - "๐Ÿ‡ฆ๐Ÿ‡ธ", - "๐Ÿ‡ฆ๐Ÿ‡น", - "๐Ÿ‡ฆ๐Ÿ‡บ", - "๐Ÿ‡ฆ๐Ÿ‡ผ", - "๐Ÿ‡ฆ๐Ÿ‡ฝ", - "๐Ÿ‡ฆ๐Ÿ‡ฟ", - "๐Ÿ‡ง๐Ÿ‡ฆ", - "๐Ÿ‡ง๐Ÿ‡ง", - "๐Ÿ‡ง๐Ÿ‡ฉ", - "๐Ÿ‡ง๐Ÿ‡ช", - "๐Ÿ‡ง๐Ÿ‡ซ", - "๐Ÿ‡ง๐Ÿ‡ฌ", - "๐Ÿ‡ง๐Ÿ‡ญ", - "๐Ÿ‡ง๐Ÿ‡ฎ", - "๐Ÿ‡ง๐Ÿ‡ฏ", - "๐Ÿ‡ง๐Ÿ‡ฑ", - "๐Ÿ‡ง๐Ÿ‡ฒ", - "๐Ÿ‡ง๐Ÿ‡ณ", - "๐Ÿ‡ง๐Ÿ‡ด", - "๐Ÿ‡ง๐Ÿ‡ถ", - "๐Ÿ‡ง๐Ÿ‡ท", - "๐Ÿ‡ง๐Ÿ‡ธ", - "๐Ÿ‡ง๐Ÿ‡น", - "๐Ÿ‡ง๐Ÿ‡ป", - "๐Ÿ‡ง๐Ÿ‡ผ", - "๐Ÿ‡ง๐Ÿ‡พ", - "๐Ÿ‡ง๐Ÿ‡ฟ", - "๐Ÿ‡จ๐Ÿ‡ฆ", - "๐Ÿ‡จ๐Ÿ‡จ", - "๐Ÿ‡จ๐Ÿ‡ฉ", - "๐Ÿ‡จ๐Ÿ‡ซ", - "๐Ÿ‡จ๐Ÿ‡ฌ", - "๐Ÿ‡จ๐Ÿ‡ญ", - "๐Ÿ‡จ๐Ÿ‡ฎ", - "๐Ÿ‡จ๐Ÿ‡ฐ", - "๐Ÿ‡จ๐Ÿ‡ฑ", - "๐Ÿ‡จ๐Ÿ‡ฒ", - "๐Ÿ‡จ๐Ÿ‡ณ", - "๐Ÿ‡จ๐Ÿ‡ด", - "๐Ÿ‡จ๐Ÿ‡ต", - "๐Ÿ‡จ๐Ÿ‡ท", - "๐Ÿ‡จ๐Ÿ‡บ", - "๐Ÿ‡จ๐Ÿ‡ป", - "๐Ÿ‡จ๐Ÿ‡ผ", - "๐Ÿ‡จ๐Ÿ‡ฝ", - "๐Ÿ‡จ๐Ÿ‡พ", - "๐Ÿ‡จ๐Ÿ‡ฟ", - "๐Ÿ‡ฉ๐Ÿ‡ช", - "๐Ÿ‡ฉ๐Ÿ‡ฌ", - "๐Ÿ‡ฉ๐Ÿ‡ฏ", - "๐Ÿ‡ฉ๐Ÿ‡ฐ", - "๐Ÿ‡ฉ๐Ÿ‡ฒ", - "๐Ÿ‡ฉ๐Ÿ‡ด", - "๐Ÿ‡ฉ๐Ÿ‡ฟ", - "๐Ÿ‡ช๐Ÿ‡ฆ", - "๐Ÿ‡ช๐Ÿ‡จ", - "๐Ÿ‡ช๐Ÿ‡ช", - "๐Ÿ‡ช๐Ÿ‡ฌ", - "๐Ÿ‡ช๐Ÿ‡ญ", - "๐Ÿ‡ช๐Ÿ‡ท", - "๐Ÿ‡ช๐Ÿ‡ธ", - "๐Ÿ‡ช๐Ÿ‡น", - "๐Ÿ‡ช๐Ÿ‡บ", - "๐Ÿ‡ซ๐Ÿ‡ฎ", - "๐Ÿ‡ซ๐Ÿ‡ฏ", - "๐Ÿ‡ซ๐Ÿ‡ฐ", - "๐Ÿ‡ซ๐Ÿ‡ฒ", - "๐Ÿ‡ซ๐Ÿ‡ด", - "๐Ÿ‡ซ๐Ÿ‡ท", - "๐Ÿ‡ฌ๐Ÿ‡ฆ", - "๐Ÿ‡ฌ๐Ÿ‡ง", - "๐Ÿ‡ฌ๐Ÿ‡ฉ", - "๐Ÿ‡ฌ๐Ÿ‡ช", - "๐Ÿ‡ฌ๐Ÿ‡ซ", - "๐Ÿ‡ฌ๐Ÿ‡ฌ", - "๐Ÿ‡ฌ๐Ÿ‡ญ", - "๐Ÿ‡ฌ๐Ÿ‡ฎ", - "๐Ÿ‡ฌ๐Ÿ‡ฑ", - "๐Ÿ‡ฌ๐Ÿ‡ฒ", - "๐Ÿ‡ฌ๐Ÿ‡ณ", - "๐Ÿ‡ฌ๐Ÿ‡ต", - "๐Ÿ‡ฌ๐Ÿ‡ถ", - "๐Ÿ‡ฌ๐Ÿ‡ท", - "๐Ÿ‡ฌ๐Ÿ‡ธ", - "๐Ÿ‡ฌ๐Ÿ‡น", - "๐Ÿ‡ฌ๐Ÿ‡บ", - "๐Ÿ‡ฌ๐Ÿ‡ผ", - "๐Ÿ‡ฌ๐Ÿ‡พ", - "๐Ÿ‡ญ๐Ÿ‡ฐ", - "๐Ÿ‡ญ๐Ÿ‡ฒ", - "๐Ÿ‡ญ๐Ÿ‡ณ", - "๐Ÿ‡ญ๐Ÿ‡ท", - "๐Ÿ‡ญ๐Ÿ‡น", - "๐Ÿ‡ญ๐Ÿ‡บ", - "๐Ÿ‡ฎ๐Ÿ‡จ", - "๐Ÿ‡ฎ๐Ÿ‡ฉ", - "๐Ÿ‡ฎ๐Ÿ‡ช", - "๐Ÿ‡ฎ๐Ÿ‡ฑ", - "๐Ÿ‡ฎ๐Ÿ‡ฒ", - "๐Ÿ‡ฎ๐Ÿ‡ณ", - "๐Ÿ‡ฎ๐Ÿ‡ด", - "๐Ÿ‡ฎ๐Ÿ‡ถ", - "๐Ÿ‡ฎ๐Ÿ‡ท", - "๐Ÿ‡ฎ๐Ÿ‡ธ", - "๐Ÿ‡ฎ๐Ÿ‡น", - "๐Ÿ‡ฏ๐Ÿ‡ช", - "๐Ÿ‡ฏ๐Ÿ‡ฒ", - "๐Ÿ‡ฏ๐Ÿ‡ด", - "๐Ÿ‡ฏ๐Ÿ‡ต", - "๐Ÿ‡ฐ๐Ÿ‡ช", - "๐Ÿ‡ฐ๐Ÿ‡ฌ", - "๐Ÿ‡ฐ๐Ÿ‡ญ", - "๐Ÿ‡ฐ๐Ÿ‡ฎ", - "๐Ÿ‡ฐ๐Ÿ‡ฒ", - "๐Ÿ‡ฐ๐Ÿ‡ณ", - "๐Ÿ‡ฐ๐Ÿ‡ต", - "๐Ÿ‡ฐ๐Ÿ‡ท", - "๐Ÿ‡ฐ๐Ÿ‡ผ", - "๐Ÿ‡ฐ๐Ÿ‡พ", - "๐Ÿ‡ฐ๐Ÿ‡ฟ", - "๐Ÿ‡ฑ๐Ÿ‡ฆ", - "๐Ÿ‡ฑ๐Ÿ‡ง", - "๐Ÿ‡ฑ๐Ÿ‡จ", - "๐Ÿ‡ฑ๐Ÿ‡ฎ", - "๐Ÿ‡ฑ๐Ÿ‡ฐ", - "๐Ÿ‡ฑ๐Ÿ‡ท", - "๐Ÿ‡ฑ๐Ÿ‡ธ", - "๐Ÿ‡ฑ๐Ÿ‡น", - "๐Ÿ‡ฑ๐Ÿ‡บ", - "๐Ÿ‡ฑ๐Ÿ‡ป", - "๐Ÿ‡ฑ๐Ÿ‡พ", - "๐Ÿ‡ฒ๐Ÿ‡ฆ", - "๐Ÿ‡ฒ๐Ÿ‡จ", - "๐Ÿ‡ฒ๐Ÿ‡ฉ", - "๐Ÿ‡ฒ๐Ÿ‡ช", - "๐Ÿ‡ฒ๐Ÿ‡ซ", - "๐Ÿ‡ฒ๐Ÿ‡ฌ", - "๐Ÿ‡ฒ๐Ÿ‡ญ", - "๐Ÿ‡ฒ๐Ÿ‡ฐ", - "๐Ÿ‡ฒ๐Ÿ‡ฑ", - "๐Ÿ‡ฒ๐Ÿ‡ฒ", - "๐Ÿ‡ฒ๐Ÿ‡ณ", - "๐Ÿ‡ฒ๐Ÿ‡ด", - "๐Ÿ‡ฒ๐Ÿ‡ต", - "๐Ÿ‡ฒ๐Ÿ‡ถ", - "๐Ÿ‡ฒ๐Ÿ‡ท", - "๐Ÿ‡ฒ๐Ÿ‡ธ", - "๐Ÿ‡ฒ๐Ÿ‡น", - "๐Ÿ‡ฒ๐Ÿ‡บ", - "๐Ÿ‡ฒ๐Ÿ‡ป", - "๐Ÿ‡ฒ๐Ÿ‡ผ", - "๐Ÿ‡ฒ๐Ÿ‡ฝ", - "๐Ÿ‡ฒ๐Ÿ‡พ", - "๐Ÿ‡ฒ๐Ÿ‡ฟ", - "๐Ÿ‡ณ๐Ÿ‡ฆ", - "๐Ÿ‡ณ๐Ÿ‡จ", - "๐Ÿ‡ณ๐Ÿ‡ช", - "๐Ÿ‡ณ๐Ÿ‡ซ", - "๐Ÿ‡ณ๐Ÿ‡ฌ", - "๐Ÿ‡ณ๐Ÿ‡ฎ", - "๐Ÿ‡ณ๐Ÿ‡ฑ", - "๐Ÿ‡ณ๐Ÿ‡ด", - "๐Ÿ‡ณ๐Ÿ‡ต", - "๐Ÿ‡ณ๐Ÿ‡ท", - "๐Ÿ‡ณ๐Ÿ‡บ", - "๐Ÿ‡ณ๐Ÿ‡ฟ", - "๐Ÿ‡ด๐Ÿ‡ฒ", - "๐Ÿ‡ต๐Ÿ‡ฆ", - "๐Ÿ‡ต๐Ÿ‡ช", - "๐Ÿ‡ต๐Ÿ‡ซ", - "๐Ÿ‡ต๐Ÿ‡ฌ", - "๐Ÿ‡ต๐Ÿ‡ญ", - "๐Ÿ‡ต๐Ÿ‡ฐ", - "๐Ÿ‡ต๐Ÿ‡ฑ", - "๐Ÿ‡ต๐Ÿ‡ฒ", - "๐Ÿ‡ต๐Ÿ‡ณ", - "๐Ÿ‡ต๐Ÿ‡ท", - "๐Ÿ‡ต๐Ÿ‡ธ", - "๐Ÿ‡ต๐Ÿ‡น", - "๐Ÿ‡ต๐Ÿ‡ผ", - "๐Ÿ‡ต๐Ÿ‡พ", - "๐Ÿ‡ถ๐Ÿ‡ฆ", - "๐Ÿ‡ท๐Ÿ‡ช", - "๐Ÿ‡ท๐Ÿ‡ด", - "๐Ÿ‡ท๐Ÿ‡ธ", - "๐Ÿ‡ท๐Ÿ‡บ", - "๐Ÿ‡ท๐Ÿ‡ผ", - "๐Ÿ‡ธ๐Ÿ‡ฆ", - "๐Ÿ‡ธ๐Ÿ‡ง", - "๐Ÿ‡ธ๐Ÿ‡จ", - "๐Ÿ‡ธ๐Ÿ‡ฉ", - "๐Ÿ‡ธ๐Ÿ‡ช", - "๐Ÿ‡ธ๐Ÿ‡ฌ", - "๐Ÿ‡ธ๐Ÿ‡ญ", - "๐Ÿ‡ธ๐Ÿ‡ฎ", - "๐Ÿ‡ธ๐Ÿ‡ฏ", - "๐Ÿ‡ธ๐Ÿ‡ฐ", - "๐Ÿ‡ธ๐Ÿ‡ฑ", - "๐Ÿ‡ธ๐Ÿ‡ฒ", - "๐Ÿ‡ธ๐Ÿ‡ณ", - "๐Ÿ‡ธ๐Ÿ‡ด", - "๐Ÿ‡ธ๐Ÿ‡ท", - "๐Ÿ‡ธ๐Ÿ‡ธ", - "๐Ÿ‡ธ๐Ÿ‡น", - "๐Ÿ‡ธ๐Ÿ‡ป", - "๐Ÿ‡ธ๐Ÿ‡ฝ", - "๐Ÿ‡ธ๐Ÿ‡พ", - "๐Ÿ‡ธ๐Ÿ‡ฟ", - "๐Ÿ‡น๐Ÿ‡ฆ", - "๐Ÿ‡น๐Ÿ‡จ", - "๐Ÿ‡น๐Ÿ‡ฉ", - "๐Ÿ‡น๐Ÿ‡ซ", - "๐Ÿ‡น๐Ÿ‡ฌ", - "๐Ÿ‡น๐Ÿ‡ญ", - "๐Ÿ‡น๐Ÿ‡ฏ", - "๐Ÿ‡น๐Ÿ‡ฐ", - "๐Ÿ‡น๐Ÿ‡ฑ", - "๐Ÿ‡น๐Ÿ‡ฒ", - "๐Ÿ‡น๐Ÿ‡ณ", - "๐Ÿ‡น๐Ÿ‡ด", - "๐Ÿ‡น๐Ÿ‡ท", - "๐Ÿ‡น๐Ÿ‡น", - "๐Ÿ‡น๐Ÿ‡ป", - "๐Ÿ‡น๐Ÿ‡ผ", - "๐Ÿ‡น๐Ÿ‡ฟ", - "๐Ÿ‡บ๐Ÿ‡ฆ", - "๐Ÿ‡บ๐Ÿ‡ฌ", - "๐Ÿ‡บ๐Ÿ‡ฒ", - "๐Ÿ‡บ๐Ÿ‡ณ", - "๐Ÿ‡บ๐Ÿ‡ธ", - "๐Ÿ‡บ๐Ÿ‡พ", - "๐Ÿ‡บ๐Ÿ‡ฟ", - "๐Ÿ‡ป๐Ÿ‡ฆ", - "๐Ÿ‡ป๐Ÿ‡จ", - "๐Ÿ‡ป๐Ÿ‡ช", - "๐Ÿ‡ป๐Ÿ‡ฌ", - "๐Ÿ‡ป๐Ÿ‡ฎ", - "๐Ÿ‡ป๐Ÿ‡ณ", - "๐Ÿ‡ป๐Ÿ‡บ", - "๐Ÿ‡ผ๐Ÿ‡ซ", - "๐Ÿ‡ผ๐Ÿ‡ธ", - "๐Ÿ‡ฝ๐Ÿ‡ฐ", - "๐Ÿ‡พ๐Ÿ‡ช", - "๐Ÿ‡พ๐Ÿ‡น", - "๐Ÿ‡ฟ๐Ÿ‡ฆ", - "๐Ÿ‡ฟ๐Ÿ‡ฒ", - "๐Ÿ‡ฟ๐Ÿ‡ผ" -] \ No newline at end of file diff --git a/packages/base2000/jest.config.js b/packages/base2000/jest.config.js deleted file mode 100644 index b1deae5..0000000 --- a/packages/base2000/jest.config.js +++ /dev/null @@ -1,17 +0,0 @@ -export default { - preset: 'ts-jest', - testEnvironment: 'node', - moduleNameMapper: { - '^@/(.*)$': '/src/$1', - }, - testMatch: ['**/test/**/*.test.ts'], - collectCoverageFrom: ['src/**/*.ts', '!src/**/*.d.ts'], - globals: { - 'ts-jest': { - tsconfig: { - target: 'ES2020', - }, - }, - }, - maxWorkers: 1, // Run tests serially to avoid BigInt serialization issues -}; diff --git a/packages/base2000/package.json b/packages/base2000/package.json deleted file mode 100644 index 51e47b8..0000000 --- a/packages/base2000/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "name": "base2000", - "type": "module", - "version": "0.0.2", - "description": "Base-2000 encoding/decoding using 2000 emojis. Perfect for URL shortening, OTP codes, and memorable identifiers.", - "source": "src/index.ts", - "exports": { - "types": "./dist/src/src/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/src/src/index.d.ts", - "bin": { - "base2000": "dist/cli.cjs" - }, - "files": [ - "dist", - "emoji.json", - "README.md", - "LICENSE" - ], - "scripts": { - "build": "microbundle && microbundle src/cli.ts -o dist/cli.cjs --no-pkg-main -f cjs", - "watch": "microbundle watch", - "test": "jest", - "release": "release-it", - "prepublishOnly": "pnpm run build && pnpm run test" - }, - "keywords": [ - "base2000", - "encoding", - "decoding", - "emoji", - "url-shortening", - "otp", - "base-conversion", - "numeral-system", - "memorable", - "identifier", - "hash", - "bigint", - "emoji-12.0" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/base2000" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/base2000#readme", - "dependencies": { - "biggest": "workspace:*" - }, - "devDependencies": { - "@types/jest": "^29.5.13", - "@types/node": "^20.0.0", - "husky": "^9.1.6", - "jest": "^29.7.0", - "lint-staged": "^15.2.10", - "microbundle": "^0.15.1", - "release-it": "^19.0.5", - "ts-jest": "^29.2.5", - "typescript": "^5.6.2" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "release-it": { - "hooks": { - "before:init": "pnpm run build" - } - }, - "lint-staged": { - "*.ts": [ - "pnpm run lint", - "prettier --write" - ] - } -} diff --git a/packages/base2000/src/cli.ts b/packages/base2000/src/cli.ts deleted file mode 100644 index 7aba88e..0000000 --- a/packages/base2000/src/cli.ts +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env node - -import { - encode, - decode, -} from './index'; - -const args = process.argv.slice(2); - -function showHelp() { - console.log(` -Base2000 - Encode/Decode numbers using 2000 emojis - -Usage: - base2000 encode [options] - base2000 decode [options] - -Commands: - encode Encode a number to base-2000 emojis - decode Decode base-2000 emojis to a number - -Options: - --separator Custom separator for encoding (default: none) - For decoding, specify if emojis are separated - Recommended: Use space separator for reliable copy/paste - -h, --help Show this help message - -Examples: - base2000 encode 123456 - base2000 encode 123456 --separator " " - base2000 decode ๐Ÿคฎ๐Ÿ˜Œ - base2000 decode "๐Ÿ˜€ ๐Ÿ˜ ๐Ÿ˜‚" --separator " " - -Note: - When copy/pasting emojis from terminal, multi-codepoint emojis (with skin - tones, flags, etc.) may get corrupted. For reliable copy/paste, use: - base2000 encode --separator " " - Or redirect output to a file: - base2000 encode > encoded.txt - base2000 decode "$(cat encoded.txt)" -`); -} - -function main() { - if (args.length === 0 || args.includes('-h') || args.includes('--help')) { - showHelp(); - process.exit(0); - } - - const command = args[0]; - - const separatorIndex = args.indexOf('--separator'); - const separator = separatorIndex !== -1 ? args[separatorIndex + 1] : ''; - - // Collect value arguments (everything between command and options) - const valueArgs: string[] = []; - for (let i = 1; i < args.length; i++) { - const arg = args[i]; - // Stop at option flags - if (arg.startsWith('--')) { - // Skip the option and its value if it has one - if (arg === '--separator') { - i++; // Skip the separator value - } - continue; - } - valueArgs.push(arg); - } - - const value = valueArgs.join(' '); - - if (!value) { - console.error('Error: Missing value argument'); - showHelp(); - process.exit(1); - } - - try { - if (command === 'encode') { - // Pass the value as string to the encode function - // The library will handle BigInt conversion safely - const result = encode(value, separator); - console.log(result); - } else if (command === 'decode') { - // Use separator if explicitly specified - const result = separatorIndex !== -1 ? decode(value, separator) : decode(value); - console.log(result.toString()); - } else { - console.error(`Error: Unknown command '${command}'`); - showHelp(); - process.exit(1); - } - } catch (error) { - const errorMsg = error instanceof Error ? error.message : String(error); - console.error(`Error: ${errorMsg}`); - - // Provide helpful hint for common copy/paste issues - if (errorMsg.includes('Invalid emoji')) { - console.error('\nHint: If you copied emojis from terminal output, they may be corrupted.'); - console.error('Try using --separator " " when encoding, or redirect to a file:'); - console.error(' base2000 encode --separator " "'); - console.error(' base2000 encode > encoded.txt'); - } - - process.exit(1); - } -} - -main(); diff --git a/packages/base2000/src/index.ts b/packages/base2000/src/index.ts deleted file mode 100644 index d1a461d..0000000 --- a/packages/base2000/src/index.ts +++ /dev/null @@ -1,238 +0,0 @@ -import emojis from '../emoji.json'; -import { utils, divide as bigDivide, multiply as bigMultiply, add as bigAdd, mod as bigMod, compare as bigCompare, floor as bigFloor } from 'biggest'; - -/** - * Base2000 encoder/decoder using emojis - * Converts numbers to/from base-N representation using colorful emojis. - */ -const EMOJIS: string[] = emojis; -const BASE = EMOJIS.length; // Dynamically set based on emoji count -const BASE_STR = BASE.toString(); - -// Create reverse lookup map for decoding -const EMOJI_TO_INDEX = new Map(); -EMOJIS.forEach((emoji, index) => { - EMOJI_TO_INDEX.set(emoji, index); -}); - -// Threshold for switching to biggest module (around 10^100) -// BigInt can handle much larger numbers, but operations become slow -// We use string length as a proxy for size to avoid BigInt exponentiation issues -const BIGINT_THRESHOLD_LENGTH = 100; - -/** - * Check if a bigint value exceeds the threshold for using biggest - */ -function shouldUseBiggest(n: bigint): boolean { - const str = n.toString(); - const cleaned = str.replace(/^-/, ''); - return cleaned.length > BIGINT_THRESHOLD_LENGTH; -} - -/** - * Check if a string representation of a number is too large - */ -function isStringTooLarge(str: string): boolean { - const cleaned = str.replace(/^-/, ''); - return cleaned.length > BIGINT_THRESHOLD_LENGTH; -} - -/** - * Encode a number or bigint to base-N emoji representation - * @param num - The number to encode (can be number, bigint, or string) - * @param separator - Optional separator between emojis (default: '') - * @returns Encoded string of emojis - * - * @example - * encode(0) // '๐Ÿ˜€' - * encode(2429) // '๐Ÿ˜๐Ÿ˜€' - * encode(123456) // emoji representation - * encode('373493284239852352787678') // handles very large numbers as strings - */ -export function encode(num: number | bigint | string, separator: string = ''): string { - let numStr: string; - let useBiggest = false; - - if (typeof num === 'string') { - // Remove 'n' suffix if present - const cleanValue = num.replace(/n$/i, '').trim(); - - // Validate the string is a valid integer - if (!/^-?\d+$/.test(cleanValue)) { - throw new Error('Invalid number format'); - } - - numStr = cleanValue; - useBiggest = isStringTooLarge(numStr); - } else if (typeof num === 'number') { - if (!Number.isInteger(num)) { - throw new Error('Only integers can be encoded'); - } - if (!Number.isSafeInteger(num)) { - throw new Error(`Number ${num} exceeds safe integer range. Use BigInt or string instead.`); - } - numStr = num.toString(); - } else { - // BigInt - numStr = num.toString(); - useBiggest = shouldUseBiggest(num); - } - - // Check for negative numbers - if (numStr.startsWith('-')) { - throw new Error('Only non-negative numbers can be encoded'); - } - - // Handle zero - if (numStr === '0') { - return EMOJIS[0]; - } - - const result: string[] = []; - - if (useBiggest) { - // Use biggest module for very large numbers - let n = numStr; - - while (bigCompare(n, '0') > 0) { - const remainder = bigMod(n, BASE_STR); - const remainderNum = parseInt(remainder); - result.unshift(EMOJIS[remainderNum]); - // Integer division: divide with sufficient precision then floor - // Use precision of 20 which is enough for accurate integer division - n = bigFloor(bigDivide(n, BASE_STR, 20)); - } - } else { - // Use BigInt for smaller numbers (faster) - let n = BigInt(numStr); - - while (n > 0n) { - const remainder = Number(n % BigInt(BASE)); - result.unshift(EMOJIS[remainder]); - n = n / BigInt(BASE); - } - } - - return result.join(separator); -} - -/** - * Decode a base-N emoji representation back to a number - * @param encoded - The encoded string of emojis - * @param separator - Optional separator between emojis (default: auto-detect) - * @returns Decoded number as bigint - * - * @example - * decode('๐Ÿ˜€') // 0n - * decode('๐Ÿ˜๐Ÿ˜€') // 2429n - * decode(emoji_string) // decoded number - * decode('๐Ÿ˜€-๐Ÿ˜-๐Ÿ˜‚') // with separator - */ -export function decode(encoded: string, separator?: string): bigint { - if (!encoded || encoded.trim() === '') { - throw new Error('Encoded string cannot be empty'); - } - - const normalized = encoded.trim(); - - let emojiList: string[]; - - if (separator !== undefined && separator !== '') { - // Use provided separator - emojiList = normalized.split(separator).map(e => e.trim()).filter(e => e.length > 0); - } else { - // No separator - need to match emojis from our list - // Try to match the longest emoji first (greedy matching) - emojiList = []; - let remaining = normalized; - - while (remaining.length > 0) { - let found = false; - - // Try matching from longest to shortest possible emoji - for (let len = Math.min(remaining.length, 20); len > 0; len--) { - const candidate = remaining.substring(0, len); - if (EMOJI_TO_INDEX.has(candidate)) { - emojiList.push(candidate); - remaining = remaining.substring(len); - found = true; - break; - } - } - - if (!found) { - // Could not match any emoji at current position - const char = remaining[0]; - throw new Error(`Invalid emoji in encoded string: "${char}"`); - } - } - } - - // Determine if we need to use biggest based on emoji count - // More than ~90 emojis in base-2000 exceeds 10^100 - const useBiggest = emojiList.length > 90; - - if (useBiggest) { - // Use biggest module for very large results - let result = '0'; - - for (const emoji of emojiList) { - const index = EMOJI_TO_INDEX.get(emoji); - - if (index === undefined) { - throw new Error(`Invalid emoji in encoded string: "${emoji}"`); - } - - // result = result * BASE + index - result = bigMultiply(result, BASE_STR); - result = bigAdd(result, index.toString()); - } - - return BigInt(result); - } else { - // Use BigInt for smaller results (faster) - let result = 0n; - - for (const emoji of emojiList) { - const index = EMOJI_TO_INDEX.get(emoji); - - if (index === undefined) { - throw new Error(`Invalid emoji in encoded string: "${emoji}"`); - } - - result = result * BigInt(BASE) + BigInt(index); - } - - return result; - } -} - -/** - * Get the emoji at a specific index - * @param index - Index (0 to BASE-1) - * @returns The emoji at that index - */ -export function getEmoji(index: number): string { - if (index < 0 || index >= BASE) { - throw new Error(`Index must be between 0 and ${BASE - 1}`); - } - return EMOJIS[index]; -} - -/** - * Get the base (total number of emojis) - * @returns The base number - */ -export function getBase(): number { - return BASE; -} - -/** - * Get the index of a specific emoji - * @param emoji - The emoji to look up - * @returns The index of the emoji, or -1 if not found - */ -export function getEmojiIndex(emoji: string): number { - const index = EMOJI_TO_INDEX.get(emoji); - return index !== undefined ? index : -1; -} diff --git a/packages/base2000/test/basic.test.ts b/packages/base2000/test/basic.test.ts deleted file mode 100644 index e9d1fe2..0000000 --- a/packages/base2000/test/basic.test.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { encode, decode, getEmoji, getEmojiIndex } from '../src/index'; - -describe('Basic Encoding/Decoding', () => { - test('encode 0 returns first emoji', () => { - expect(encode(0)).toBe('๐Ÿ˜€'); - }); - - test('decode first emoji returns 0', () => { - expect(decode('๐Ÿ˜€')).toBe(0n); - }); - - test('encode/decode round trip for small numbers', () => { - for (let i = 0; i < 100; i++) { - const encoded = encode(i); - const decoded = decode(encoded); - expect(decoded).toBe(BigInt(i)); - } - }); - - test('encode/decode round trip for large numbers', () => { - const testNumbers = [ - 1000, - 2429, - 10000, - 100000, - 1000000, - 123456789, - ]; - - for (const num of testNumbers) { - const encoded = encode(num); - const decoded = decode(encoded); - expect(decoded).toBe(BigInt(num)); - } - }); - - test('encode/decode with bigint', () => { - const bigNum = 123456789012345678901234567890n; - const encoded = encode(bigNum); - const decoded = decode(encoded); - expect(decoded).toBe(bigNum); - }); - - test('encode with custom separator', () => { - const encoded = encode(123456, '-'); - expect(encoded).toContain('-'); - const decoded = decode(encoded, '-'); - expect(decoded).toBe(123456n); - }); - - test('encode with space separator', () => { - const encoded = encode(123456, ' '); - expect(encoded).toContain(' '); - const decoded = decode(encoded, ' '); - expect(decoded).toBe(123456n); - }); - - test('decode handles emojis without separator', () => { - const num = 123456n; - const encoded = encode(num); - expect(decode(encoded)).toBe(num); - }); - - test('encode/decode very large numbers beyond Number.MAX_SAFE_INTEGER', () => { - // Test numbers larger than Number.MAX_SAFE_INTEGER (2^53-1 = 9007199254740991) - const veryLargeNumbers = [ - 373493284239852352787678n, - 9007199254740992n, // Just above MAX_SAFE_INTEGER - 123456789012345678901234567890n, - 999999999999999999999999999999n, - ]; - - for (const num of veryLargeNumbers) { - const encoded = encode(num); - const decoded = decode(encoded); - expect(decoded).toBe(num); - } - }); - - test('encode accepts string input for large numbers', () => { - const numStr = '373493284239852352787678'; - const encoded = encode(numStr); - const decoded = decode(encoded); - expect(decoded).toBe(BigInt(numStr)); - }); - - test('encode throws error for unsafe numbers', () => { - const unsafeNumber = 9007199254740992; // Number.MAX_SAFE_INTEGER + 1 - expect(() => encode(unsafeNumber)).toThrow('exceeds safe integer range'); - }); - - test('encode accepts string with trailing n', () => { - const numStr = '123456789n'; - const encoded = encode(numStr); - const decoded = decode(encoded); - expect(decoded).toBe(123456789n); - }); - - test('getEmoji returns correct emoji at index', () => { - expect(getEmoji(0)).toBe('๐Ÿ˜€'); - expect(getEmoji(1)).toBe('๐Ÿ˜'); - expect(getEmoji(2)).toBe('๐Ÿ˜‚'); - }); - - test('getEmojiIndex returns correct index for emoji', () => { - expect(getEmojiIndex('๐Ÿ˜€')).toBe(0); - expect(getEmojiIndex('๐Ÿ˜')).toBe(1); - expect(getEmojiIndex('๐Ÿ˜‚')).toBe(2); - }); - - test('getEmojiIndex returns -1 for unknown emoji', () => { - expect(getEmojiIndex('๐Ÿฆ„๐Ÿฆ„๐Ÿฆ„')).toBe(-1); - }); - - test('encode/decode with base value', () => { - const encoded = encode(2429); - expect(decode(encoded)).toBe(2429n); - }); - - test('encode/decode with multiple emojis', () => { - const num = 9000000n; // Should require multiple emojis - const encoded = encode(num); - const decoded = decode(encoded); - expect(decoded).toBe(num); - // Verify it uses multiple emojis - expect(Array.from(encoded).length).toBeGreaterThan(1); - }); -}); diff --git a/packages/base2000/test/errors.test.ts b/packages/base2000/test/errors.test.ts deleted file mode 100644 index dd63097..0000000 --- a/packages/base2000/test/errors.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { encode, decode, getEmoji } from '../src/index'; - -describe('Error Handling', () => { - test('encode throws error for negative numbers', () => { - expect(() => encode(-1)).toThrow('Only non-negative numbers can be encoded'); - }); - - test('encode throws error for non-integers', () => { - expect(() => encode(3.14)).toThrow('Only integers can be encoded'); - }); - - test('decode throws error for empty string', () => { - expect(() => decode('')).toThrow('Encoded string cannot be empty'); - }); - - test('decode throws error for invalid emoji', () => { - expect(() => decode('invalid')).toThrow('Invalid emoji in encoded string'); - }); - - test('getEmoji throws error for negative index', () => { - expect(() => getEmoji(-1)).toThrow('Index must be between 0 and'); - }); - - test('getEmoji throws error for index >= BASE', () => { - expect(() => getEmoji(3000)).toThrow('Index must be between 0 and'); - }); - - test('encode throws error for invalid string format', () => { - expect(() => encode('not a number')).toThrow('Invalid number format'); - }); -}); diff --git a/packages/base2000/test/large-numbers.test.ts b/packages/base2000/test/large-numbers.test.ts deleted file mode 100644 index c9e545a..0000000 --- a/packages/base2000/test/large-numbers.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { encode, decode } from '../src/index'; - -describe('Very Large Number Handling with biggest module', () => { - test('encode/decode extremely large numbers (> 10^100)', () => { - // Test a number with 150 digits (way beyond BigInt's practical limits) - const veryLargeNumber = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(veryLargeNumber); - expect(encoded).toBeTruthy(); - expect(encoded.length).toBeGreaterThan(0); - - const decoded = decode(encoded); - expect(decoded.toString()).toBe(veryLargeNumber); - }); - - test('encode/decode number with exactly 100 digits', () => { - const largeNumber = '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(largeNumber); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(largeNumber); - }); - - test('encode/decode number with 200 digits', () => { - const massiveNumber = '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(massiveNumber); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(massiveNumber); - }); - - test('encode/decode with BigInt beyond threshold', () => { - // 10^100 + 1 - const bigNum = 10n ** 100n + 1n; - - const encoded = encode(bigNum); - const decoded = decode(encoded); - expect(decoded).toBe(bigNum); - }); - - test('encode/decode multiple very large numbers', () => { - const testNumbers = [ - '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999', - '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', - '987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098', - ]; - - for (const numStr of testNumbers) { - const encoded = encode(numStr); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(numStr); - } - }); - - test('encode with separator for very large numbers', () => { - const largeNumber = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(largeNumber, '-'); - expect(encoded).toContain('-'); - - const decoded = decode(encoded, '-'); - expect(decoded.toString()).toBe(largeNumber); - }); - - test('handles transition between BigInt and biggest smoothly', () => { - // Test numbers around the threshold - const numbers = [ - '9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999', // 100 digits (at threshold) - '10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', // 101 digits (above threshold) - '99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999', // 99 digits (below threshold) - ]; - - for (const numStr of numbers) { - const encoded = encode(numStr); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(numStr); - } - }); - - test('very large number maintains precision', () => { - // A prime number with 120 digits - const largePrime = '282475249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003'; - - const encoded = encode(largePrime); - const decoded = decode(encoded); - - // Verify exact match - expect(decoded.toString()).toBe(largePrime); - - // Verify it's not rounded or truncated - expect(decoded.toString().length).toBe(largePrime.length); - }); - - test('encode zero with biggest path (edge case)', () => { - // Even though zero is small, test it works with the string path - const encoded = encode('0'); - expect(encoded).toBe('๐Ÿ˜€'); - expect(decode(encoded)).toBe(0n); - }); - - test('encode single digit with biggest path', () => { - const encoded = encode('5'); - const decoded = decode(encoded); - expect(decoded).toBe(5n); - }); -}); diff --git a/packages/base2000/tsconfig.json b/packages/base2000/tsconfig.json deleted file mode 100644 index cbe2134..0000000 --- a/packages/base2000/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - } -} diff --git a/packages/base6000/.gitignore b/packages/base6000/.gitignore deleted file mode 100644 index 7535211..0000000 --- a/packages/base6000/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -dist -*.log -.DS_Store diff --git a/packages/base6000/.npmignore b/packages/base6000/.npmignore deleted file mode 100644 index 1ca1204..0000000 --- a/packages/base6000/.npmignore +++ /dev/null @@ -1,17 +0,0 @@ -# Source files -src/ -test/ -examples/ - -# Config files -tsconfig.json -jest.config.js -.gitignore - -# Development files -*.log -.DS_Store -node_modules/ - -# CI/CD -.github/ diff --git a/packages/base6000/LICENSE b/packages/base6000/LICENSE deleted file mode 100644 index b698d17..0000000 --- a/packages/base6000/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2025 hmmhmmhm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/base6000/README.md b/packages/base6000/README.md deleted file mode 100644 index 8b7fcb6..0000000 --- a/packages/base6000/README.md +++ /dev/null @@ -1,310 +0,0 @@ -# Base6000 - -A base-6000 encoding/decoding library using 6000 English words. Convert numbers to memorable word sequences. - -## Encoding Capacity - -The number of unique values that can be represented grows exponentially with the number of words: - -| Words | Possible Combinations | Equivalent Bits | -|-------|----------------------|-----------------| -| 1 Word | 6 Thousand (6,000) | ~12.55 bits | -| 2 Word | 36 Million (36,000,000) | ~25.10 bits | -| 3 Word | 216 Billion (216,000,000,000) | ~37.65 bits | -| 4 Word | 1.296 Quadrillion (1,296,000,000,000,000) | ~50.20 bits | -| 5 Word | 7.776 Quintillion (7,776,000,000,000,000,000) | ~62.75 bits | -| 6 Word | 46.66 Sextillion (46,660,000,000,000,000,000,000) | ~75.30 bits | -| 7 Word | 280 Septillion (280,000,000,000,000,000,000,000,000) | ~87.85 bits | -| 8 Word | 1.68 Nonillion (1,680,000,000,000,000,000,000,000,000,000) | ~100.40 bits | -| 9 Word | 10.08 Decillion (10,080,000,000,000,000,000,000,000,000,000,000) | ~112.95 bits | -| 10 Word | 60.48 Undecillion (60,480,000,000,000,000,000,000,000,000,000,000,000) | ~125.50 bits | -| 11 Word | 362.9 Tredecillion (362,900,000,000,000,000,000,000,000,000,000,000,000,000) | ~138.05 bits | - -For comparison: -- **UUID (128 bits)**: ~10.2 words in base6000 -- **SHA-256 (256 bits)**: ~20.4 words in base6000 -- **64-bit integer**: ~5.1 words in base6000 - -### Encoding Examples - -```bash -npx base6000 encode 123456 -# Output: u-meeting - -npx base6000 encode 999999 -# Output: hub-calendar - -npx base6000 encode 1234567892 -# Output: go-swift-woods - -npx base6000 encode 9876543210 -# Output: tom-column-element - -npx base6000 encode 373493284239852352787678 -# Output: i-de-figures-divided-bizrate-continues-enforcement -``` - -## Features - -- **Encode/Decode Numbers**: Convert numbers to base-6000 word representation -- **BigInt Support**: Handle arbitrarily large numbers -- **6000 English Words**: Memorable and pronounceable word dictionary -- **Fast & Efficient**: Optimized encoding/decoding algorithms -- **TypeScript**: Full TypeScript support with type definitions - -## Installation - -```bash -npm install base6000 -# or -pnpm add base6000 -# or -yarn add base6000 -``` - -## Quick Start - -### CLI Usage - -```bash -# Using npx (no installation required) -npx base6000 encode 123456 -npx base6000 decode "u-meeting" - -# After installation -base6000 encode 123456 -base6000 decode "u-meeting" -``` - -### Programmatic Usage - -```typescript -import { encode, decode, getWord } from 'base6000'; - -// Basic encoding -encode(123456); // 'u-meeting' -decode('u-meeting'); // 123456n - -// Get word at specific index -getWord(0); // 'a' -getWord(20); // 'u' -``` - -## API Reference - -### `encode(num: number | bigint | string, separator?: string): string` - -Encode a number to base-6000 word representation. - -**Important**: For numbers larger than `Number.MAX_SAFE_INTEGER` (2^53-1), use `BigInt` or `string` to avoid precision loss. - -```typescript -encode(0); // 'a' -encode(6000); // 'b-a' -encode(123456); // 'u-meeting' -encode(123456, '_'); // 'u_meeting' (custom separator) - -// Large numbers - use string or BigInt -encode('373493284239852352787678'); // 'i-de-figures-divided-bizrate-continues-enforcement' -encode(373493284239852352787678n); // Same result - -// Unsafe number will throw error -encode(9007199254740992); // โŒ Error: exceeds safe integer range -encode('9007199254740992'); // โœ… Works correctly -``` - -### `decode(encoded: string, separator?: string): bigint` - -Decode a base-6000 word representation back to a number. - -```typescript -decode('a'); // 0n -decode('b-a'); // 6000n -decode('u-meeting'); // 123456n -decode('U-MEETING'); // 123456n (case-insensitive) - -// Auto-detects separators -decode('high-categories-are-momentum'); // Works with hyphen -decode('high_categories_are_momentum'); // Works with underscore -decode('high categories are momentum'); // Works with space -``` - -### `getWord(index: number): string` - -Get the word at a specific index (0-5999). - -```typescript -getWord(0); // 'a' -getWord(1); // 'b' -getWord(26); // 'ai' -getWord(20); // 'u' -``` - -## CLI Usage - -The package includes a command-line interface for quick encoding/decoding. - -### Installation - -```bash -# Global installation -npm install -g base6000 - -# Or use with npx (no installation required) -npx base6000 --help -``` - -### Commands - -```bash -# Encode a number -base6000 encode [options] - -# Decode a string -base6000 decode [options] -``` - -### Options - -- `--separator ` - Custom separator (default: '-') -- `-h, --help` - Show help message - -### Examples - -```bash -# Basic encoding -base6000 encode 123456 -# Output: u-meeting - -# Custom separator -base6000 encode 123456 --separator _ -# Output: u_meeting - -# Decoding -base6000 decode "u-meeting" -# Output: 123456 - -# Decoding with auto-detected separator -base6000 decode "u meeting" -# Output: 123456 - -# Large numbers -base6000 encode 987654321 -# Output: am-rebate-auto -``` - -## Use Cases - -### Memorable Identifiers - -```typescript -import { encode, decode } from 'base6000'; - -// Convert timestamp to memorable identifier -const timestamp = Date.now(); -const memorable = encode(timestamp); -console.log(`Session ID: ${memorable}`); - -// Decode back to timestamp -const decoded = decode(memorable); -``` - -### Large Number Encoding - -```typescript -import { encode, decode } from 'base6000'; - -// Encode very large numbers -const largeNumber = '373493284239852352787678'; -const encoded = encode(largeNumber); -// 'i-de-figures-divided-bizrate-continues-enforcement' - -const decoded = decode(encoded); -// 373493284239852352787678n -``` - -## How It Works - -Base6000 works like any positional numeral system (like binary, decimal, or hexadecimal), but uses 6000 as the base instead of 2, 10, or 16. - -- **Base-10 (Decimal)**: Uses digits 0-9 -- **Base-16 (Hexadecimal)**: Uses digits 0-9 and A-F -- **Base-6000**: Uses 6000 English words - -### Example - -The number `123456` in base-6000: - -``` -123456 รท 6000 = 20 remainder 3456 -20 รท 6000 = 0 remainder 20 - -Reading remainders from bottom to top: [20, 3456] -Word at index 20: 'U' -Word at index 3456: 'Lvi' - -Result: 'U-Lvi' -``` - -### Advantages - -- **Memorable**: Words are easier to remember than random characters -- **Pronounceable**: Can be spoken and communicated verbally -- **Compact**: More efficient than base-64 for large numbers -- **URL-Safe**: No special characters needed -- **Human-Friendly**: Suitable for OTP codes and user-facing identifiers - -## Performance - -The library is optimized for performance: - -- Encoding/decoding operations complete in < 1ms for most numbers -- Supports BigInt for arbitrarily large numbers -- Efficient Map-based lookup for decoding -- Zero dependencies - -## TypeScript Support - -Full TypeScript support with comprehensive type definitions: - -```typescript -import type { encode, decode } from 'base6000'; - -// All functions are fully typed -const encoded: string = encode(123456); -const decoded: bigint = decode(encoded); -``` - -## Error Handling - -The library throws descriptive errors for invalid inputs: - -```typescript -encode(-1); // Error: Only non-negative numbers can be encoded -encode(3.14); // Error: Only integers can be encoded -decode(''); // Error: Encoded string cannot be empty -decode('InvalidWord'); // Error: Invalid word in encoded string -getWord(6000); // Error: Index must be between 0 and 5999 -``` - -## Browser Support - -Works in all modern browsers and Node.js environments that support: -- ES2020+ -- BigInt - -## License - -MIT - -## Contributing - -Contributions are welcome! Please feel free to submit a Pull Request. - -## Author - -hmmhmmhm - -## Repository - -https://github.com/hmmhmmhm/node-packages/tree/main/packages/base6000 diff --git a/packages/base6000/english.json b/packages/base6000/english.json deleted file mode 100644 index 7793f26..0000000 --- a/packages/base6000/english.json +++ /dev/null @@ -1,6002 +0,0 @@ -[ - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "ai", - "am", - "be", - "cd", - "dc", - "de", - "do", - "fw", - "go", - "he", - "hi", - "id", - "if", - "is", - "it", - "la", - "me", - "my", - "no", - "oh", - "ok", - "pc", - "pm", - "re", - "so", - "st", - "tv", - "uk", - "up", - "us", - "we", - "ace", - "act", - "add", - "age", - "ago", - "aid", - "aim", - "air", - "ali", - "all", - "alt", - "ant", - "any", - "app", - "arc", - "are", - "arm", - "art", - "ash", - "ask", - "aug", - "ave", - "avg", - "bag", - "bar", - "bay", - "bed", - "bee", - "ben", - "bet", - "bid", - "big", - "bin", - "bio", - "bit", - "biz", - "bob", - "bow", - "box", - "boy", - "bug", - "bus", - "but", - "buy", - "cad", - "cal", - "cam", - "can", - "cap", - "car", - "cat", - "com", - "con", - "cow", - "cry", - "cup", - "cut", - "dan", - "day", - "dec", - "der", - "dev", - "did", - "dog", - "dot", - "dry", - "due", - "dvd", - "ear", - "eat", - "eco", - "egg", - "end", - "era", - "eur", - "eve", - "eye", - "fan", - "faq", - "far", - "fax", - "feb", - "fed", - "few", - "fig", - "fit", - "fix", - "fly", - "for", - "fox", - "fun", - "gap", - "gas", - "geo", - "get", - "got", - "guy", - "gym", - "had", - "has", - "hat", - "her", - "hey", - "him", - "his", - "hit", - "hop", - "hot", - "how", - "hub", - "ice", - "ink", - "int", - "ion", - "its", - "jam", - "jan", - "jet", - "jim", - "job", - "joy", - "jun", - "ken", - "key", - "kid", - "kit", - "lab", - "las", - "law", - "lay", - "led", - "leg", - "let", - "log", - "lot", - "low", - "mac", - "man", - "map", - "mar", - "max", - "may", - "men", - "mid", - "min", - "mix", - "mom", - "mon", - "net", - "new", - "non", - "nov", - "now", - "oak", - "oct", - "odd", - "off", - "oil", - "old", - "one", - "our", - "out", - "own", - "pad", - "pay", - "pen", - "per", - "pet", - "pie", - "pin", - "pop", - "pre", - "pro", - "pub", - "put", - "ran", - "rap", - "raw", - "ray", - "red", - "ref", - "reg", - "rom", - "row", - "roy", - "rss", - "run", - "sad", - "sam", - "san", - "sat", - "saw", - "say", - "sea", - "see", - "seo", - "sep", - "set", - "she", - "six", - "ski", - "sky", - "son", - "spa", - "sub", - "sum", - "sun", - "tag", - "tax", - "tea", - "tee", - "tel", - "ten", - "tie", - "tim", - "tin", - "tip", - "tom", - "ton", - "too", - "top", - "toy", - "try", - "tue", - "two", - "url", - "usa", - "use", - "vat", - "via", - "was", - "way", - "web", - "wed", - "wet", - "who", - "why", - "win", - "won", - "wow", - "yes", - "yet", - "you", - "zip", - "able", - "acid", - "acts", - "adam", - "ages", - "aims", - "alan", - "alex", - "also", - "andy", - "anna", - "anne", - "aqua", - "arab", - "arch", - "area", - "arms", - "army", - "arts", - "atom", - "auto", - "away", - "axis", - "baby", - "back", - "bags", - "ball", - "band", - "bank", - "bare", - "bars", - "base", - "bass", - "bath", - "beam", - "bean", - "bear", - "beat", - "beds", - "beef", - "been", - "beer", - "bell", - "belt", - "bend", - "best", - "beta", - "bias", - "bids", - "bike", - "bill", - "bird", - "bits", - "blog", - "blow", - "blue", - "boat", - "body", - "bold", - "bond", - "bone", - "book", - "boot", - "born", - "boss", - "both", - "bowl", - "boys", - "brad", - "bugs", - "bulk", - "bull", - "burn", - "bush", - "busy", - "buzz", - "byte", - "cafe", - "cake", - "call", - "came", - "camp", - "cape", - "caps", - "card", - "care", - "carl", - "cars", - "cart", - "case", - "cash", - "cast", - "cats", - "cell", - "cent", - "char", - "chat", - "chef", - "chip", - "city", - "clay", - "clip", - "club", - "coal", - "coat", - "code", - "coin", - "cold", - "come", - "cook", - "cool", - "copy", - "cord", - "core", - "corn", - "corp", - "cost", - "crew", - "crop", - "cuba", - "cube", - "cups", - "cure", - "cute", - "dark", - "data", - "date", - "dave", - "days", - "deal", - "dean", - "dear", - "debt", - "deck", - "deep", - "deer", - "dell", - "demo", - "desk", - "dial", - "dice", - "diet", - "dirt", - "disc", - "dish", - "disk", - "dive", - "does", - "dogs", - "doll", - "done", - "door", - "dose", - "down", - "drag", - "draw", - "drew", - "drop", - "drum", - "dual", - "duck", - "duke", - "dust", - "duty", - "each", - "earn", - "ease", - "east", - "easy", - "ebay", - "echo", - "eden", - "edge", - "edit", - "else", - "ends", - "eric", - "euro", - "even", - "ever", - "exam", - "exit", - "expo", - "eyes", - "face", - "fact", - "fair", - "fall", - "fame", - "fans", - "farm", - "fast", - "fate", - "fear", - "feed", - "feel", - "feet", - "fell", - "felt", - "file", - "fill", - "film", - "find", - "fine", - "fire", - "firm", - "fish", - "five", - "flag", - "flat", - "flip", - "flow", - "foam", - "fold", - "folk", - "font", - "food", - "foot", - "ford", - "fork", - "form", - "fort", - "four", - "free", - "from", - "fuel", - "full", - "fund", - "gain", - "game", - "gary", - "gate", - "gave", - "gear", - "gene", - "gift", - "girl", - "give", - "glad", - "glen", - "goal", - "goes", - "gold", - "golf", - "gone", - "good", - "grab", - "gray", - "grew", - "grid", - "grip", - "grow", - "gulf", - "guys", - "hair", - "half", - "hall", - "halo", - "hand", - "hard", - "hats", - "have", - "head", - "hear", - "heat", - "held", - "help", - "here", - "hero", - "hide", - "high", - "hill", - "hire", - "hold", - "hole", - "holy", - "home", - "hong", - "hook", - "hope", - "host", - "hour", - "huge", - "hung", - "hunt", - "hurt", - "icon", - "idea", - "inch", - "info", - "into", - "iowa", - "iron", - "item", - "jack", - "jane", - "java", - "jazz", - "jean", - "jeep", - "jeff", - "joan", - "jobs", - "joel", - "john", - "join", - "joke", - "jose", - "josh", - "july", - "jump", - "june", - "just", - "keep", - "kent", - "kept", - "keys", - "kick", - "kind", - "king", - "kiss", - "kits", - "know", - "labs", - "lack", - "lady", - "lake", - "lamp", - "land", - "lane", - "last", - "late", - "lawn", - "laws", - "lead", - "left", - "legs", - "lens", - "less", - "lies", - "life", - "lift", - "like", - "line", - "link", - "lion", - "lisa", - "list", - "lite", - "live", - "loan", - "lock", - "logo", - "long", - "look", - "loop", - "lose", - "loss", - "lost", - "lots", - "loud", - "love", - "luck", - "luke", - "made", - "mail", - "main", - "make", - "male", - "mall", - "many", - "maps", - "mark", - "mars", - "mart", - "mask", - "mass", - "mate", - "math", - "matt", - "meal", - "mean", - "meat", - "meet", - "mega", - "memo", - "menu", - "mesh", - "meta", - "mice", - "mike", - "mile", - "milk", - "mind", - "mine", - "mini", - "mins", - "mint", - "misc", - "miss", - "mode", - "moms", - "mono", - "mood", - "moon", - "more", - "most", - "move", - "much", - "must", - "nail", - "name", - "nano", - "nasa", - "navy", - "near", - "neck", - "need", - "neil", - "news", - "next", - "nice", - "nick", - "nike", - "nine", - "node", - "none", - "noon", - "nose", - "note", - "nova", - "ohio", - "okay", - "once", - "ones", - "only", - "onto", - "open", - "oven", - "over", - "pack", - "page", - "paid", - "pair", - "palm", - "park", - "part", - "pass", - "past", - "path", - "paul", - "pays", - "peak", - "peer", - "perl", - "peru", - "pete", - "pets", - "phil", - "pick", - "pill", - "pine", - "ping", - "pink", - "pipe", - "plan", - "play", - "plot", - "plug", - "plus", - "poem", - "pole", - "poll", - "polo", - "pond", - "pool", - "port", - "post", - "pour", - "pray", - "pull", - "pump", - "punk", - "pure", - "push", - "quad", - "quit", - "quiz", - "race", - "rack", - "raid", - "rail", - "rain", - "rank", - "rare", - "rate", - "read", - "real", - "rent", - "rest", - "rica", - "rice", - "rich", - "rico", - "ride", - "ring", - "rise", - "risk", - "road", - "rock", - "role", - "roll", - "rome", - "roof", - "room", - "root", - "rose", - "ruby", - "rule", - "runs", - "rush", - "ryan", - "safe", - "sage", - "said", - "sale", - "salt", - "same", - "sand", - "save", - "says", - "scan", - "seal", - "seat", - "seed", - "seek", - "seem", - "seen", - "self", - "sell", - "semi", - "send", - "sent", - "ship", - "shoe", - "shop", - "shot", - "show", - "sick", - "side", - "sign", - "silk", - "sing", - "site", - "size", - "skin", - "skip", - "slim", - "slot", - "slow", - "snap", - "snow", - "soap", - "sofa", - "soft", - "soil", - "sold", - "sole", - "solo", - "some", - "song", - "soon", - "sort", - "soul", - "soup", - "spam", - "span", - "spec", - "spin", - "spot", - "star", - "stat", - "stay", - "stem", - "step", - "stop", - "such", - "suit", - "sure", - "surf", - "swap", - "swim", - "sync", - "tags", - "tail", - "take", - "tale", - "talk", - "tall", - "tank", - "tape", - "task", - "team", - "tech", - "tell", - "temp", - "tend", - "term", - "test", - "text", - "than", - "them", - "then", - "they", - "thin", - "this", - "tied", - "ties", - "tile", - "time", - "tiny", - "tips", - "tire", - "told", - "toll", - "tone", - "tons", - "tony", - "took", - "tool", - "tops", - "tour", - "town", - "toys", - "tray", - "tree", - "trek", - "trim", - "trip", - "troy", - "true", - "tube", - "tune", - "turn", - "twin", - "type", - "unit", - "unix", - "unto", - "upon", - "used", - "user", - "uses", - "utah", - "vast", - "very", - "vice", - "view", - "visa", - "void", - "vote", - "wage", - "wait", - "wake", - "walk", - "wall", - "want", - "ward", - "warm", - "wash", - "wave", - "weak", - "wear", - "week", - "well", - "went", - "were", - "west", - "what", - "when", - "whom", - "wide", - "wiki", - "wild", - "will", - "wind", - "wine", - "wing", - "wins", - "wire", - "wise", - "wish", - "with", - "wolf", - "wood", - "word", - "work", - "wrap", - "yard", - "year", - "yoga", - "york", - "your", - "zero", - "zone", - "zoom", - "about", - "above", - "actor", - "acute", - "added", - "admin", - "admit", - "adobe", - "adopt", - "after", - "again", - "agent", - "aging", - "agree", - "ahead", - "aimed", - "alarm", - "album", - "alert", - "alice", - "alive", - "allen", - "allow", - "alone", - "along", - "alpha", - "alter", - "amber", - "amend", - "among", - "angel", - "angle", - "apart", - "apple", - "apply", - "april", - "areas", - "arena", - "arise", - "array", - "arrow", - "aside", - "asked", - "asset", - "atlas", - "audio", - "audit", - "avoid", - "award", - "aware", - "babes", - "badge", - "baker", - "banks", - "based", - "basic", - "basis", - "batch", - "beach", - "beads", - "beans", - "bears", - "beast", - "began", - "begin", - "begun", - "being", - "below", - "bench", - "berry", - "bikes", - "bills", - "billy", - "bingo", - "birds", - "birth", - "black", - "blade", - "blank", - "blast", - "blend", - "blind", - "block", - "blues", - "board", - "boats", - "bonds", - "bonus", - "books", - "boost", - "booth", - "boots", - "booty", - "bound", - "boxes", - "brain", - "brake", - "brand", - "brass", - "bread", - "break", - "brian", - "brick", - "bride", - "brief", - "bring", - "broad", - "brown", - "bruce", - "brush", - "bucks", - "buddy", - "build", - "built", - "bunch", - "burns", - "buyer", - "bytes", - "cable", - "calls", - "camel", - "camps", - "candy", - "canon", - "cards", - "cargo", - "carol", - "carry", - "cases", - "catch", - "cause", - "cells", - "cents", - "chain", - "chair", - "chaos", - "charm", - "chart", - "chase", - "cheap", - "cheat", - "check", - "chess", - "chief", - "chips", - "chose", - "chris", - "cited", - "civil", - "claim", - "clark", - "class", - "clean", - "clear", - "clerk", - "click", - "clips", - "clock", - "clone", - "close", - "cloth", - "cloud", - "clubs", - "coach", - "coast", - "codes", - "coins", - "color", - "combo", - "comic", - "congo", - "const", - "coral", - "corps", - "costa", - "costs", - "could", - "count", - "court", - "cover", - "craft", - "craig", - "crash", - "cream", - "cross", - "crowd", - "crown", - "curve", - "cyber", - "cycle", - "daily", - "dairy", - "dance", - "dated", - "dates", - "david", - "davis", - "deals", - "debug", - "delay", - "delta", - "depth", - "diana", - "diary", - "diego", - "disco", - "discs", - "dodge", - "doing", - "dolls", - "doors", - "dozen", - "draft", - "drama", - "drawn", - "dream", - "dress", - "drink", - "drive", - "drums", - "dutch", - "dying", - "eagle", - "early", - "earth", - "ebony", - "eight", - "elder", - "elite", - "elvis", - "email", - "emily", - "empty", - "ended", - "enjoy", - "enter", - "entry", - "equal", - "error", - "essay", - "evans", - "event", - "every", - "exact", - "excel", - "exist", - "extra", - "faced", - "facts", - "fails", - "fairy", - "faith", - "fancy", - "farms", - "fault", - "favor", - "feels", - "fever", - "fewer", - "fiber", - "field", - "fifth", - "fifty", - "fight", - "filed", - "files", - "films", - "final", - "finds", - "firms", - "first", - "fixed", - "flame", - "flash", - "fleet", - "float", - "flood", - "floor", - "flows", - "fluid", - "focus", - "folks", - "foods", - "force", - "forms", - "forth", - "forum", - "found", - "frame", - "frank", - "fraud", - "fresh", - "front", - "fruit", - "fully", - "funds", - "funny", - "games", - "gamma", - "gates", - "gauge", - "genes", - "giant", - "gifts", - "girls", - "given", - "gives", - "glass", - "globe", - "glory", - "gnome", - "goals", - "going", - "gonna", - "goods", - "grace", - "grade", - "grain", - "grand", - "grant", - "graph", - "grass", - "great", - "green", - "grill", - "gross", - "group", - "grove", - "grown", - "guard", - "guess", - "guest", - "guide", - "guild", - "hairy", - "hands", - "handy", - "happy", - "harry", - "heads", - "heard", - "heart", - "heavy", - "helen", - "hello", - "helps", - "hence", - "henry", - "hills", - "hobby", - "holds", - "holes", - "homes", - "honey", - "honor", - "hopes", - "horse", - "hosts", - "hotel", - "hours", - "house", - "human", - "humor", - "idaho", - "ideal", - "ideas", - "image", - "index", - "india", - "indie", - "inner", - "input", - "intel", - "inter", - "intro", - "irish", - "issue", - "items", - "jacob", - "james", - "jamie", - "janet", - "jason", - "jeans", - "jerry", - "jimmy", - "joint", - "jokes", - "judge", - "juice", - "julia", - "julie", - "kelly", - "kevin", - "kinds", - "knife", - "known", - "knows", - "korea", - "label", - "labor", - "lakes", - "lamps", - "lands", - "large", - "larry", - "laser", - "later", - "latex", - "latin", - "laura", - "layer", - "leads", - "learn", - "lease", - "least", - "leave", - "legal", - "lemon", - "level", - "lewis", - "light", - "liked", - "likes", - "limit", - "linda", - "lines", - "links", - "linux", - "lists", - "lived", - "liver", - "lives", - "loads", - "loans", - "lobby", - "local", - "lodge", - "logic", - "login", - "logos", - "looks", - "loose", - "lotus", - "louis", - "lover", - "lower", - "lucky", - "lunch", - "macro", - "magic", - "major", - "maker", - "makes", - "males", - "malta", - "maple", - "march", - "maria", - "mario", - "mason", - "match", - "maybe", - "mayor", - "meals", - "means", - "meant", - "medal", - "media", - "metal", - "meter", - "metro", - "miami", - "micro", - "might", - "miles", - "mills", - "minds", - "minor", - "mixed", - "model", - "modem", - "modes", - "money", - "month", - "moore", - "moral", - "motor", - "mount", - "mouse", - "mouth", - "moved", - "movie", - "multi", - "music", - "named", - "names", - "needs", - "never", - "night", - "noble", - "nodes", - "noise", - "north", - "noted", - "notes", - "novel", - "nurse", - "nylon", - "oasis", - "ocean", - "offer", - "often", - "older", - "olive", - "omaha", - "omega", - "onion", - "opera", - "order", - "other", - "outer", - "owned", - "owner", - "packs", - "pages", - "paint", - "pairs", - "panel", - "paper", - "paris", - "parts", - "party", - "pasta", - "paste", - "patch", - "peace", - "pearl", - "penny", - "peter", - "phase", - "phone", - "photo", - "piano", - "picks", - "piece", - "pilot", - "pitch", - "pixel", - "pizza", - "place", - "plain", - "plane", - "plans", - "plant", - "plate", - "plays", - "plaza", - "point", - "poker", - "polar", - "ports", - "posts", - "pound", - "power", - "press", - "price", - "pride", - "prime", - "print", - "prior", - "prize", - "probe", - "proof", - "proud", - "prove", - "proxy", - "pulse", - "pumps", - "queen", - "query", - "quest", - "quick", - "quiet", - "quite", - "quote", - "radar", - "radio", - "raise", - "ralph", - "ranch", - "randy", - "range", - "rapid", - "rated", - "rates", - "ratio", - "reach", - "reads", - "ready", - "realm", - "refer", - "relax", - "relay", - "remix", - "reply", - "reset", - "retro", - "rider", - "ridge", - "right", - "rings", - "risks", - "river", - "roads", - "robin", - "robot", - "rocks", - "rocky", - "roles", - "rolls", - "roman", - "rough", - "round", - "route", - "rover", - "royal", - "rugby", - "rules", - "saint", - "salad", - "sales", - "salon", - "sandy", - "santa", - "sarah", - "sauce", - "saved", - "saver", - "scale", - "scene", - "scope", - "score", - "scott", - "scout", - "screw", - "seats", - "seeds", - "seems", - "sells", - "sense", - "serve", - "setup", - "seven", - "shake", - "shall", - "shape", - "share", - "shark", - "sharp", - "sheep", - "sheet", - "shelf", - "shell", - "shift", - "shine", - "ships", - "shirt", - "shock", - "shoes", - "shops", - "shore", - "short", - "shots", - "shown", - "shows", - "sides", - "sigma", - "signs", - "simon", - "since", - "sites", - "sized", - "sizes", - "skill", - "skirt", - "sleep", - "slide", - "slots", - "small", - "smart", - "smile", - "smith", - "smoke", - "snake", - "socks", - "solar", - "solid", - "solve", - "songs", - "sonic", - "sorry", - "sound", - "south", - "space", - "spain", - "spare", - "speak", - "specs", - "speed", - "spell", - "spend", - "spent", - "split", - "spoke", - "sport", - "spots", - "spray", - "squad", - "stack", - "staff", - "stage", - "stamp", - "stand", - "stars", - "start", - "state", - "stats", - "steam", - "steps", - "steve", - "stick", - "still", - "stock", - "stone", - "stood", - "stops", - "store", - "storm", - "story", - "strap", - "strip", - "stuck", - "study", - "stuff", - "style", - "sudan", - "sugar", - "suite", - "suits", - "sunny", - "super", - "susan", - "sweet", - "swift", - "swing", - "swiss", - "sword", - "table", - "taken", - "takes", - "tales", - "talks", - "taste", - "teach", - "teams", - "teeth", - "terms", - "terry", - "tests", - "texas", - "texts", - "thank", - "thats", - "theft", - "their", - "theme", - "there", - "these", - "thick", - "thing", - "think", - "third", - "those", - "three", - "throw", - "tiger", - "tight", - "times", - "tired", - "title", - "today", - "tokyo", - "tommy", - "toner", - "tools", - "topic", - "total", - "touch", - "tours", - "tower", - "towns", - "trace", - "track", - "trade", - "trail", - "train", - "trees", - "trend", - "trial", - "tribe", - "trick", - "tried", - "trips", - "truck", - "truly", - "trunk", - "trust", - "truth", - "turbo", - "turns", - "twice", - "twins", - "twist", - "tyler", - "types", - "ultra", - "uncle", - "under", - "union", - "units", - "unity", - "until", - "upper", - "urban", - "usage", - "users", - "using", - "usual", - "utils", - "valid", - "value", - "valve", - "vegas", - "venue", - "video", - "views", - "villa", - "vinyl", - "visit", - "vista", - "vital", - "vocal", - "voice", - "voted", - "votes", - "wages", - "wales", - "walls", - "wanna", - "wants", - "watch", - "water", - "waves", - "wayne", - "weeks", - "wells", - "wendy", - "whale", - "wheat", - "wheel", - "where", - "which", - "while", - "white", - "whole", - "whose", - "wider", - "width", - "winds", - "wines", - "wings", - "wired", - "woman", - "women", - "woods", - "words", - "works", - "world", - "worst", - "worth", - "would", - "write", - "wrote", - "yahoo", - "years", - "yield", - "young", - "youth", - "absent", - "accent", - "accept", - "access", - "across", - "acting", - "action", - "active", - "actors", - "actual", - "adding", - "adjust", - "adults", - "advice", - "advise", - "affect", - "afford", - "afraid", - "africa", - "agency", - "agenda", - "agents", - "agreed", - "alaska", - "albert", - "albums", - "alerts", - "allows", - "almost", - "always", - "amazon", - "amount", - "analog", - "anchor", - "andrew", - "angels", - "animal", - "annual", - "answer", - "anyone", - "anyway", - "apache", - "appeal", - "appear", - "arabic", - "arcade", - "arnold", - "around", - "arrive", - "artist", - "ashley", - "asking", - "aspect", - "assets", - "assign", - "assist", - "assume", - "athens", - "atomic", - "attach", - "attend", - "august", - "aurora", - "austin", - "author", - "autumn", - "avatar", - "avenue", - "awards", - "backup", - "ballet", - "banner", - "barnes", - "basics", - "basket", - "battle", - "beauty", - "beaver", - "became", - "become", - "before", - "begins", - "behalf", - "behind", - "belief", - "belong", - "berlin", - "better", - "beyond", - "bidder", - "bigger", - "bikini", - "binary", - "bishop", - "blocks", - "blonde", - "boards", - "border", - "boston", - "bottle", - "bottom", - "bought", - "boxing", - "branch", - "brands", - "brazil", - "breaks", - "breast", - "breath", - "bridal", - "bridge", - "bright", - "brings", - "broken", - "broker", - "bronze", - "brooks", - "browse", - "bubble", - "budget", - "buffer", - "bumper", - "bundle", - "butler", - "butter", - "button", - "buyers", - "buying", - "cables", - "called", - "camera", - "campus", - "canada", - "cancel", - "candle", - "canvas", - "canyon", - "carbon", - "career", - "carlos", - "carpet", - "carter", - "castle", - "casual", - "cattle", - "caught", - "caused", - "causes", - "census", - "center", - "centre", - "chains", - "chairs", - "chance", - "change", - "chapel", - "charge", - "charts", - "cheats", - "checks", - "cheers", - "cheese", - "cherry", - "chicks", - "choice", - "choose", - "chosen", - "chrome", - "church", - "cialis", - "cinema", - "circle", - "cities", - "claims", - "client", - "clinic", - "clocks", - "closed", - "closer", - "clouds", - "cloudy", - "coding", - "coffee", - "colors", - "column", - "combat", - "comedy", - "comics", - "coming", - "commit", - "common", - "comply", - "config", - "cookie", - "cooper", - "copies", - "copper", - "corner", - "cotton", - "county", - "couple", - "coupon", - "course", - "courts", - "covers", - "crafts", - "create", - "credit", - "cruise", - "custom", - "cycles", - "dakota", - "dallas", - "damage", - "daniel", - "darwin", - "dating", - "dealer", - "debate", - "debian", - "decade", - "decent", - "decide", - "deeply", - "define", - "degree", - "delete", - "deluxe", - "demand", - "denied", - "dennis", - "dental", - "denver", - "depend", - "desert", - "design", - "desire", - "detail", - "detect", - "device", - "dialog", - "diesel", - "differ", - "digest", - "dining", - "dinner", - "direct", - "divide", - "divine", - "diving", - "doctor", - "dollar", - "domain", - "donald", - "donate", - "double", - "dragon", - "dreams", - "drinks", - "driven", - "driver", - "drives", - "dublin", - "durham", - "during", - "duties", - "eagles", - "earned", - "easier", - "easily", - "easter", - "eating", - "edited", - "editor", - "edward", - "effect", - "effort", - "either", - "eleven", - "eminem", - "empire", - "enable", - "ending", - "energy", - "engage", - "engine", - "enough", - "ensure", - "entire", - "entity", - "equity", - "errors", - "escape", - "estate", - "europe", - "events", - "exceed", - "except", - "excess", - "exists", - "exotic", - "expand", - "expect", - "expert", - "export", - "extend", - "extent", - "extras", - "fabric", - "facial", - "facing", - "factor", - "fairly", - "family", - "famous", - "farmer", - "faster", - "father", - "female", - "fields", - "figure", - "filled", - "filter", - "finder", - "finest", - "finger", - "finish", - "fiscal", - "fisher", - "flight", - "floral", - "flower", - "flying", - "folder", - "follow", - "forced", - "forces", - "forest", - "forget", - "forgot", - "formal", - "format", - "formed", - "former", - "forums", - "fourth", - "framed", - "frames", - "france", - "french", - "friday", - "friend", - "frozen", - "funded", - "fusion", - "future", - "gained", - "galaxy", - "gaming", - "garage", - "garden", - "gender", - "geneva", - "gentle", - "george", - "german", - "giving", - "glance", - "global", - "gloves", - "golden", - "gordon", - "grants", - "gratis", - "greece", - "ground", - "groups", - "growth", - "guests", - "guided", - "guides", - "guinea", - "guitar", - "hammer", - "handed", - "handle", - "happen", - "harbor", - "harder", - "hardly", - "harris", - "having", - "hawaii", - "headed", - "header", - "health", - "hearts", - "heaven", - "height", - "helena", - "helmet", - "herald", - "hereby", - "hidden", - "higher", - "highly", - "hiking", - "hilton", - "hiring", - "hockey", - "holdem", - "holder", - "honest", - "hoping", - "horses", - "hosted", - "hotels", - "hourly", - "houses", - "howard", - "hudson", - "hunter", - "hybrid", - "ignore", - "images", - "impact", - "import", - "income", - "indeed", - "indoor", - "infant", - "inform", - "injury", - "inkjet", - "inline", - "insert", - "inside", - "intent", - "invest", - "invite", - "island", - "issues", - "itself", - "jacket", - "jaguar", - "jersey", - "johnny", - "joined", - "jordan", - "joseph", - "judges", - "junior", - "justin", - "knight", - "labels", - "ladies", - "lambda", - "laptop", - "larger", - "latest", - "latina", - "latvia", - "launch", - "lawyer", - "layers", - "layout", - "leader", - "league", - "leaves", - "legacy", - "legend", - "length", - "lenses", - "lesson", - "letter", - "levels", - "liable", - "lights", - "likely", - "limits", - "linear", - "linked", - "liquid", - "listed", - "listen", - "little", - "living", - "loaded", - "locate", - "locked", - "logged", - "london", - "longer", - "looked", - "lookup", - "losing", - "lounge", - "lovely", - "lovers", - "loving", - "lowest", - "luxury", - "lyrics", - "madrid", - "mainly", - "makers", - "making", - "manage", - "manner", - "manual", - "marble", - "marcus", - "margin", - "marine", - "marked", - "marker", - "market", - "martin", - "master", - "matrix", - "matter", - "mature", - "median", - "medium", - "meetup", - "member", - "memory", - "mental", - "merely", - "meters", - "method", - "middle", - "mighty", - "miller", - "mining", - "minute", - "mirror", - "missed", - "mixing", - "mobile", - "models", - "modern", - "modify", - "module", - "moment", - "monaco", - "monday", - "monica", - "monkey", - "monroe", - "months", - "morgan", - "morris", - "mostly", - "mother", - "motion", - "motors", - "movies", - "moving", - "murphy", - "murray", - "muscle", - "museum", - "mutual", - "myself", - "narrow", - "nascar", - "nation", - "native", - "nature", - "nearby", - "nearly", - "needed", - "nelson", - "nevada", - "newest", - "newton", - "nicole", - "nights", - "nobody", - "normal", - "norman", - "norton", - "notice", - "notify", - "notion", - "number", - "nurses", - "object", - "obtain", - "occurs", - "offers", - "office", - "offset", - "oldest", - "oliver", - "online", - "opened", - "optics", - "option", - "oracle", - "orange", - "orders", - "oregon", - "origin", - "others", - "ottawa", - "outlet", - "output", - "owners", - "oxford", - "oxygen", - "packed", - "packet", - "palace", - "panama", - "panels", - "papers", - "parade", - "parent", - "parish", - "parker", - "partly", - "passes", - "patent", - "payday", - "paying", - "people", - "pepper", - "period", - "permit", - "person", - "phones", - "photos", - "picked", - "pickup", - "pieces", - "pierre", - "pixels", - "placed", - "places", - "planet", - "plants", - "plasma", - "plates", - "played", - "player", - "please", - "plenty", - "plugin", - "pocket", - "poetry", - "points", - "poland", - "police", - "policy", - "polish", - "portal", - "postal", - "posted", - "poster", - "potato", - "potter", - "pounds", - "powder", - "powers", - "prague", - "praise", - "prayer", - "prefer", - "prefix", - "pretty", - "priced", - "prices", - "prince", - "prints", - "profit", - "prompt", - "proper", - "proved", - "public", - "pubmed", - "pulled", - "pupils", - "purple", - "puzzle", - "python", - "quoted", - "quotes", - "rabbit", - "rachel", - "racing", - "radius", - "raised", - "random", - "ranges", - "ranked", - "rarely", - "rather", - "rating", - "reader", - "really", - "reason", - "rebate", - "recall", - "recent", - "recipe", - "record", - "redeem", - "reduce", - "refine", - "reform", - "refund", - "regard", - "regime", - "region", - "relate", - "relief", - "reload", - "remain", - "remote", - "remove", - "rental", - "repair", - "repeat", - "report", - "rescue", - "resort", - "result", - "resume", - "retail", - "retain", - "return", - "reveal", - "review", - "reward", - "rhythm", - "ribbon", - "riding", - "rights", - "rising", - "rivers", - "robert", - "robust", - "rocket", - "rogers", - "roller", - "ronald", - "roster", - "router", - "routes", - "rubber", - "runner", - "safari", - "safety", - "salary", - "salmon", - "sample", - "samuel", - "saving", - "saying", - "scales", - "scenes", - "school", - "scored", - "scores", - "screen", - "script", - "scroll", - "sealed", - "search", - "season", - "second", - "secret", - "sector", - "secure", - "seeing", - "seeker", - "seemed", - "select", - "seller", - "senate", - "sender", - "senior", - "sensor", - "serial", - "series", - "served", - "server", - "serves", - "settle", - "shadow", - "shaped", - "shared", - "shares", - "sharon", - "shaved", - "shield", - "shirts", - "shorts", - "should", - "showed", - "shower", - "sierra", - "signal", - "signed", - "signup", - "silent", - "silver", - "simple", - "simply", - "singer", - "single", - "sister", - "skiing", - "skills", - "sleeve", - "slowly", - "smooth", - "soccer", - "social", - "socket", - "sodium", - "solely", - "sorted", - "sought", - "sounds", - "source", - "spaces", - "speaks", - "spears", - "speech", - "spider", - "spirit", - "spoken", - "sports", - "spouse", - "spread", - "spring", - "sprint", - "square", - "stable", - "stages", - "stamps", - "starts", - "stated", - "states", - "static", - "status", - "stayed", - "stereo", - "steven", - "stocks", - "stones", - "stored", - "stores", - "strain", - "stream", - "street", - "stress", - "strict", - "strike", - "string", - "stroke", - "strong", - "struck", - "struct", - "stuart", - "studio", - "styles", - "stylus", - "submit", - "suites", - "summer", - "summit", - "sunday", - "sunset", - "supply", - "surely", - "survey", - "sweden", - "switch", - "sydney", - "symbol", - "syntax", - "system", - "tables", - "tablet", - "tagged", - "taking", - "talent", - "talked", - "target", - "taught", - "taylor", - "techno", - "temple", - "tender", - "tennis", - "tested", - "thanks", - "themes", - "theory", - "things", - "thinks", - "thirty", - "thomas", - "thongs", - "though", - "thread", - "threat", - "throat", - "thumbs", - "ticket", - "timber", - "timely", - "timing", - "tissue", - "titans", - "tongue", - "topics", - "totals", - "toward", - "tracks", - "trader", - "trails", - "travel", - "treaty", - "trials", - "tribal", - "tricks", - "triple", - "troops", - "trying", - "tuning", - "tunnel", - "turkey", - "turned", - "turner", - "twelve", - "twenty", - "typing", - "uganda", - "unions", - "unique", - "united", - "unless", - "unlike", - "unlock", - "update", - "upload", - "useful", - "valley", - "values", - "vector", - "vendor", - "venice", - "venues", - "verify", - "versus", - "vessel", - "victor", - "videos", - "vienna", - "viewed", - "viewer", - "villas", - "vision", - "visual", - "voices", - "volume", - "voters", - "voting", - "walked", - "walker", - "walter", - "wanted", - "waters", - "watson", - "wealth", - "weapon", - "weblog", - "weekly", - "weight", - "wheels", - "whilst", - "widely", - "wilson", - "window", - "winner", - "winter", - "wiring", - "wisdom", - "wishes", - "within", - "wizard", - "womens", - "wonder", - "wooden", - "worked", - "worker", - "worlds", - "writer", - "writes", - "yellow", - "ability", - "absence", - "academy", - "account", - "achieve", - "acquire", - "acrobat", - "actions", - "adapter", - "address", - "adopted", - "advance", - "adverse", - "advised", - "advisor", - "affairs", - "affects", - "african", - "against", - "airline", - "airport", - "allowed", - "already", - "amateur", - "amazing", - "amended", - "america", - "amounts", - "analyst", - "analyze", - "ancient", - "angeles", - "animals", - "another", - "answers", - "antenna", - "anthony", - "antique", - "antonio", - "anxiety", - "anybody", - "anymore", - "anytime", - "apparel", - "appeals", - "appears", - "applied", - "applies", - "approve", - "archive", - "arising", - "arizona", - "arrange", - "arrival", - "arrived", - "article", - "artists", - "artwork", - "aspects", - "assault", - "assumed", - "assumes", - "atlanta", - "attempt", - "attract", - "auction", - "austria", - "authors", - "average", - "awesome", - "bahamas", - "balance", - "balloon", - "banking", - "barrier", - "baskets", - "battery", - "beaches", - "bearing", - "beatles", - "because", - "becomes", - "bedding", - "bedroom", - "belgium", - "beliefs", - "believe", - "benefit", - "besides", - "betting", - "between", - "bicycle", - "bidding", - "biggest", - "billing", - "billion", - "binding", - "biology", - "bizrate", - "booking", - "boolean", - "borders", - "bottles", - "bowling", - "bristol", - "britain", - "british", - "britney", - "brokers", - "brother", - "brought", - "browser", - "buffalo", - "builder", - "burning", - "cabinet", - "calcium", - "calling", - "cameras", - "camping", - "candles", - "capable", - "capital", - "capitol", - "captain", - "capture", - "careers", - "careful", - "carried", - "carrier", - "cartoon", - "casting", - "catalog", - "causing", - "ceiling", - "centers", - "central", - "century", - "ceramic", - "certain", - "chamber", - "chances", - "changed", - "changes", - "channel", - "chapter", - "charged", - "charger", - "charges", - "charity", - "charles", - "charlie", - "charter", - "cheaper", - "checked", - "chicago", - "chicken", - "choices", - "circuit", - "citizen", - "claimed", - "clarity", - "classes", - "classic", - "cleaner", - "clearly", - "clients", - "climate", - "clinton", - "closely", - "closing", - "closure", - "clothes", - "cluster", - "coastal", - "collect", - "college", - "colored", - "columns", - "combine", - "comfort", - "command", - "comment", - "commons", - "compact", - "company", - "compare", - "compete", - "compile", - "complex", - "concept", - "concern", - "concert", - "conduct", - "confirm", - "connect", - "consent", - "console", - "consult", - "contact", - "contain", - "content", - "contest", - "context", - "control", - "convert", - "cookies", - "cooking", - "cooling", - "correct", - "cottage", - "council", - "counsel", - "counter", - "country", - "couples", - "coupons", - "courage", - "courier", - "courses", - "covered", - "created", - "creator", - "credits", - "cricket", - "critics", - "croatia", - "crystal", - "culture", - "curious", - "current", - "customs", - "cutting", - "cycling", - "dancing", - "dealers", - "dealing", - "decades", - "decided", - "decline", - "default", - "defence", - "defense", - "defined", - "degrees", - "delayed", - "deliver", - "demands", - "denmark", - "density", - "depends", - "deposit", - "derived", - "designs", - "desired", - "desktop", - "despite", - "destroy", - "details", - "detroit", - "develop", - "deviant", - "devices", - "devoted", - "diagram", - "diamond", - "digital", - "diploma", - "discuss", - "disease", - "display", - "dispute", - "diverse", - "divided", - "divorce", - "doctors", - "dollars", - "domains", - "douglas", - "drawing", - "dresses", - "drivers", - "driving", - "dropped", - "dynamic", - "earlier", - "eastern", - "eclipse", - "ecology", - "economy", - "ecuador", - "editing", - "edition", - "edwards", - "effects", - "efforts", - "elected", - "electro", - "elegant", - "element", - "emerald", - "enabled", - "enables", - "engaged", - "engines", - "england", - "english", - "enhance", - "enlarge", - "enquiry", - "entered", - "entries", - "episode", - "equally", - "essence", - "estonia", - "eternal", - "ethical", - "evening", - "exactly", - "examine", - "example", - "excerpt", - "excited", - "exclude", - "execute", - "exhibit", - "expense", - "experts", - "explain", - "explore", - "exposed", - "express", - "extract", - "extreme", - "factors", - "factory", - "faculty", - "falling", - "fantasy", - "farmers", - "farming", - "fashion", - "fastest", - "feature", - "federal", - "feeding", - "feeling", - "females", - "fiction", - "fighter", - "figures", - "filling", - "filters", - "finally", - "finance", - "finding", - "fingers", - "finland", - "firefox", - "fishing", - "fitness", - "flights", - "florida", - "florist", - "flowers", - "focused", - "folders", - "folding", - "follows", - "foreign", - "forever", - "formats", - "formula", - "fortune", - "forward", - "founded", - "founder", - "framing", - "francis", - "freedom", - "friends", - "funding", - "funeral", - "further", - "gallery", - "gardens", - "gateway", - "general", - "generic", - "genesis", - "genetic", - "georgia", - "germany", - "getting", - "glasses", - "grammar", - "granted", - "graphic", - "gravity", - "greater", - "greatly", - "grocery", - "grounds", - "growing", - "habitat", - "hampton", - "hanging", - "happens", - "harmony", - "harvard", - "harvest", - "heading", - "headset", - "healing", - "healthy", - "hearing", - "heather", - "heating", - "heights", - "helpful", - "helping", - "highest", - "highway", - "himself", - "history", - "hobbies", - "holders", - "holding", - "holiday", - "holland", - "horizon", - "hosting", - "housing", - "houston", - "however", - "hundred", - "hungary", - "husband", - "iceland", - "illness", - "imagine", - "imaging", - "implied", - "imports", - "imposed", - "improve", - "include", - "indexed", - "indiana", - "indians", - "initial", - "inquiry", - "insider", - "insight", - "install", - "instant", - "instead", - "integer", - "intense", - "invalid", - "invited", - "invoice", - "involve", - "ireland", - "islands", - "italian", - "jackets", - "jackson", - "jamaica", - "january", - "jelsoft", - "jessica", - "jewelry", - "johnson", - "joining", - "journal", - "journey", - "justice", - "katrina", - "keeping", - "kennedy", - "keyword", - "kingdom", - "kitchen", - "knowing", - "landing", - "laptops", - "largely", - "largest", - "latinas", - "laundry", - "leaders", - "leading", - "learned", - "leasing", - "leather", - "leaving", - "lebanon", - "lecture", - "leisure", - "lending", - "leonard", - "lessons", - "letters", - "letting", - "liberty", - "library", - "licence", - "license", - "limited", - "lincoln", - "linking", - "listing", - "loading", - "locally", - "located", - "locator", - "lodging", - "logging", - "logical", - "looking", - "lottery", - "luggage", - "machine", - "madison", - "madonna", - "mailing", - "managed", - "manager", - "manuals", - "mapping", - "markets", - "married", - "martial", - "massive", - "masters", - "matches", - "matters", - "matthew", - "maximum", - "meaning", - "measure", - "medical", - "medline", - "meeting", - "members", - "memphis", - "mention", - "mercury", - "message", - "methods", - "michael", - "midwest", - "million", - "mineral", - "minimal", - "minimum", - "minutes", - "mirrors", - "missing", - "mission", - "mixture", - "modules", - "monitor", - "monster", - "montana", - "monthly", - "morning", - "morocco", - "mothers", - "mounted", - "museums", - "musical", - "mustang", - "mystery", - "nations", - "natural", - "nearest", - "neither", - "network", - "neutral", - "newport", - "nigeria", - "norfolk", - "nothing", - "noticed", - "notices", - "nuclear", - "numbers", - "nursing", - "oakland", - "objects", - "observe", - "obvious", - "october", - "offered", - "officer", - "offices", - "offline", - "olympic", - "olympus", - "ongoing", - "ontario", - "opening", - "operate", - "opinion", - "opposed", - "optical", - "optimal", - "options", - "ordered", - "organic", - "orlando", - "outcome", - "outdoor", - "outline", - "outlook", - "outside", - "overall", - "pacific", - "package", - "packing", - "painted", - "parents", - "parking", - "partial", - "parties", - "partner", - "passage", - "passing", - "passive", - "patents", - "patient", - "patrick", - "pattern", - "payable", - "payment", - "payroll", - "penalty", - "pendant", - "pending", - "penguin", - "pension", - "peoples", - "percent", - "perfect", - "perform", - "perfume", - "perhaps", - "permits", - "persons", - "phoenix", - "physics", - "picture", - "pioneer", - "placing", - "planned", - "planner", - "plastic", - "players", - "playing", - "podcast", - "pointed", - "pointer", - "popular", - "postage", - "posters", - "posting", - "poverty", - "powered", - "predict", - "premier", - "premium", - "prepaid", - "prepare", - "present", - "prevent", - "preview", - "pricing", - "primary", - "printed", - "printer", - "privacy", - "private", - "problem", - "proceed", - "process", - "produce", - "product", - "profile", - "program", - "project", - "promise", - "promote", - "protect", - "protein", - "protest", - "provide", - "publish", - "purpose", - "puzzles", - "qualify", - "quality", - "quantum", - "quarter", - "quickly", - "railway", - "rainbow", - "raising", - "ranging", - "ranking", - "rapidly", - "ratings", - "raymond", - "reached", - "readers", - "reading", - "reality", - "realize", - "reasons", - "receipt", - "receive", - "recipes", - "records", - "recover", - "reduced", - "reflect", - "regards", - "regions", - "regular", - "related", - "release", - "remains", - "remarks", - "renewal", - "rentals", - "repairs", - "replace", - "replica", - "replied", - "replies", - "reports", - "request", - "require", - "reserve", - "resolve", - "resorts", - "respect", - "respond", - "restore", - "results", - "retired", - "returns", - "reunion", - "revenue", - "reverse", - "reviews", - "revised", - "richard", - "roberts", - "rolling", - "romance", - "romania", - "routine", - "routing", - "royalty", - "running", - "runtime", - "russell", - "sailing", - "samples", - "satisfy", - "savings", - "scanner", - "scholar", - "schools", - "science", - "scoring", - "scratch", - "screens", - "scripts", - "seafood", - "seasons", - "seattle", - "section", - "sectors", - "secured", - "seeking", - "segment", - "sellers", - "selling", - "seminar", - "senator", - "sending", - "seniors", - "serious", - "service", - "serving", - "session", - "setting", - "several", - "shadows", - "sharing", - "shelter", - "shipped", - "shopper", - "shortly", - "showing", - "shuttle", - "siemens", - "signals", - "signing", - "silence", - "silicon", - "similar", - "simpson", - "singing", - "singles", - "sisters", - "smaller", - "smoking", - "society", - "solaris", - "soldier", - "solomon", - "solving", - "somehow", - "someone", - "sources", - "spanish", - "spatial", - "speaker", - "special", - "species", - "specify", - "spirits", - "sponsor", - "springs", - "stadium", - "stanley", - "started", - "starter", - "startup", - "station", - "statute", - "staying", - "stephen", - "sticker", - "stopped", - "storage", - "stories", - "strange", - "streams", - "streets", - "stretch", - "strings", - "student", - "studies", - "stylish", - "subject", - "sublime", - "succeed", - "success", - "suggest", - "summary", - "sunrise", - "support", - "suppose", - "supreme", - "surface", - "surfing", - "surgery", - "surveys", - "suspect", - "symbols", - "systems", - "talking", - "targets", - "teacher", - "telecom", - "telling", - "tension", - "terrace", - "testing", - "theater", - "theatre", - "therapy", - "thereby", - "thermal", - "thomson", - "thought", - "threats", - "through", - "thunder", - "tickets", - "tiffany", - "timothy", - "tonight", - "toolbar", - "toolbox", - "toronto", - "toshiba", - "totally", - "tourism", - "tourist", - "towards", - "tracked", - "tracker", - "trading", - "traffic", - "trailer", - "trained", - "transit", - "treated", - "tribute", - "trigger", - "trinity", - "trouble", - "trusted", - "tuesday", - "tuition", - "turning", - "typical", - "ukraine", - "unified", - "uniform", - "unknown", - "unusual", - "updated", - "updates", - "upgrade", - "usually", - "utility", - "utilize", - "variety", - "various", - "vehicle", - "vendors", - "venture", - "verizon", - "version", - "veteran", - "victory", - "viewing", - "village", - "vincent", - "vintage", - "virtual", - "visible", - "visited", - "visitor", - "vitamin", - "voltage", - "volumes", - "waiting", - "walking", - "warning", - "warrant", - "washing", - "watched", - "watches", - "wearing", - "weather", - "website", - "wedding", - "weekend", - "welcome", - "welfare", - "western", - "whether", - "william", - "willing", - "windows", - "winners", - "winning", - "winston", - "without", - "witness", - "workers", - "working", - "worship", - "writing", - "written", - "wyoming", - "younger", - "zealand", - "absolute", - "abstract", - "academic", - "accepted", - "accident", - "accounts", - "accuracy", - "accurate", - "achieved", - "acoustic", - "acquired", - "actively", - "activity", - "actually", - "adapters", - "addition", - "adjusted", - "admitted", - "adoption", - "advanced", - "advances", - "advisory", - "advocacy", - "advocate", - "affected", - "agencies", - "aircraft", - "airlines", - "alliance", - "allowing", - "although", - "aluminum", - "american", - "analysis", - "analyzes", - "anderson", - "animated", - "announce", - "annually", - "answered", - "antiques", - "anything", - "anywhere", - "apparent", - "appeared", - "appendix", - "applying", - "approach", - "approval", - "approved", - "archived", - "archives", - "argument", - "arkansas", - "arranged", - "articles", - "artistic", - "assembly", - "assessed", - "assigned", - "assisted", - "assuming", - "athletic", - "atlantic", - "attached", - "attended", - "attitude", - "attorney", - "auctions", - "audience", - "bacteria", - "balanced", - "baseball", - "baseline", - "bathroom", - "becoming", - "bedrooms", - "behavior", - "believed", - "believes", - "benefits", - "benjamin", - "berkeley", - "beverage", - "birthday", - "blogging", - "bookmark", - "botswana", - "boundary", - "branches", - "breaking", - "brighton", - "broadway", - "brochure", - "brooklyn", - "browsing", - "builders", - "building", - "bulgaria", - "bulletin", - "business", - "calendar", - "campaign", - "campbell", - "canadian", - "capacity", - "carolina", - "carriers", - "carrying", - "catalyst", - "category", - "catering", - "catholic", - "cellular", - "cemetery", - "ceremony", - "chairman", - "champion", - "changing", - "channels", - "checking", - "checkout", - "chemical", - "choosing", - "circular", - "citizens", - "civilian", - "cleaning", - "clicking", - "climbing", - "clinical", - "clothing", - "coaching", - "collapse", - "colleges", - "colombia", - "colorado", - "columbia", - "columbus", - "combined", - "commands", - "comments", - "commerce", - "commonly", - "compared", - "compiler", - "complete", - "composed", - "composer", - "compound", - "computer", - "concepts", - "concerns", - "concerts", - "concrete", - "conflict", - "congress", - "consider", - "consists", - "constant", - "consumer", - "contacts", - "contains", - "contents", - "contests", - "continue", - "contract", - "contrast", - "controls", - "cookbook", - "cosmetic", - "counties", - "counting", - "courtesy", - "coverage", - "covering", - "creating", - "creation", - "creative", - "critical", - "crossing", - "cultural", - "cultures", - "currency", - "customer", - "database", - "daughter", - "deadline", - "dealtime", - "december", - "decision", - "declared", - "decrease", - "defining", - "delaware", - "delivers", - "delivery", - "describe", - "designed", - "designer", - "desktops", - "detailed", - "detected", - "diabetes", - "dialogue", - "diameter", - "diamonds", - "directed", - "directly", - "director", - "disagree", - "discount", - "discover", - "diseases", - "disorder", - "displays", - "disposal", - "distance", - "district", - "division", - "document", - "domestic", - "donation", - "download", - "downtown", - "dramatic", - "drawings", - "drinking", - "duration", - "dynamics", - "earnings", - "earrings", - "economic", - "editions", - "election", - "electric", - "electron", - "elements", - "elephant", - "eligible", - "embedded", - "emerging", - "emission", - "emphasis", - "employed", - "employee", - "employer", - "enabling", - "encoding", - "engineer", - "enhanced", - "ensuring", - "entering", - "entirely", - "entities", - "entrance", - "epinions", - "equality", - "equation", - "ericsson", - "estimate", - "european", - "evaluate", - "everyday", - "everyone", - "evidence", - "examined", - "examples", - "exchange", - "exciting", - "executed", - "exercise", - "existing", - "expanded", - "expansys", - "expected", - "expenses", - "explains", - "explorer", - "exposure", - "extended", - "exterior", - "external", - "facility", - "familiar", - "families", - "favorite", - "featured", - "features", - "february", - "feedback", - "feelings", - "festival", - "fighting", - "filename", - "findings", - "finished", - "firewall", - "flashing", - "flexible", - "floating", - "florence", - "florists", - "focusing", - "followed", - "football", - "footwear", - "forecast", - "formerly", - "fraction", - "franklin", - "frequent", - "friendly", - "frontier", - "function", - "gambling", - "gamecube", - "gamespot", - "gathered", - "generate", - "genetics", - "geometry", - "glossary", - "gorgeous", - "governor", - "graduate", - "graphics", - "grateful", - "greatest", - "greeting", - "guardian", - "guidance", - "hamilton", - "handbook", - "handheld", - "handling", - "happened", - "hardware", - "harrison", - "headline", - "heritage", - "highland", - "historic", - "holdings", - "holidays", - "homeland", - "homework", - "honolulu", - "hospital", - "humanity", - "humidity", - "hundreds", - "hydrogen", - "identify", - "identity", - "illinois", - "imperial", - "imported", - "improved", - "included", - "includes", - "incoming", - "increase", - "indicate", - "industry", - "infinite", - "informed", - "injuries", - "innocent", - "inspired", - "instance", - "integral", - "intended", - "interact", - "interest", - "interior", - "internal", - "internet", - "interval", - "investor", - "involved", - "involves", - "isolated", - "jennifer", - "jonathan", - "journals", - "judgment", - "judicial", - "kentucky", - "keyboard", - "keywords", - "kingston", - "language", - "launched", - "lawrence", - "learning", - "lectures", - "lesbians", - "licensed", - "lifetime", - "lighting", - "lingerie", - "listings", - "literacy", - "literary", - "location", - "machines", - "magazine", - "magnetic", - "mainland", - "maintain", - "majority", - "managers", - "managing", - "margaret", - "marriage", - "marshall", - "maryland", - "matching", - "material", - "measures", - "medicare", - "medicine", - "memorial", - "memories", - "mercedes", - "merchant", - "messages", - "metallic", - "michelle", - "michigan", - "midnight", - "military", - "millions", - "minerals", - "minimize", - "minister", - "ministry", - "minority", - "missions", - "missouri", - "mitchell", - "mobility", - "modeling", - "moderate", - "modified", - "moisture", - "momentum", - "montreal", - "moreover", - "mortgage", - "mountain", - "mounting", - "movement", - "multiple", - "national", - "navigate", - "necklace", - "negative", - "networks", - "nicholas", - "normally", - "northern", - "notebook", - "notified", - "november", - "numerous", - "observed", - "observer", - "obtained", - "occasion", - "occupied", - "offering", - "officers", - "official", - "offshore", - "oklahoma", - "operated", - "operator", - "opinions", - "opposite", - "optional", - "ordering", - "ordinary", - "organize", - "oriental", - "oriented", - "original", - "outcomes", - "outdoors", - "outreach", - "overcome", - "overhead", - "overseas", - "overview", - "packages", - "painting", - "paradise", - "parallel", - "particle", - "partners", - "passport", - "password", - "patients", - "patterns", - "payments", - "peaceful", - "personal", - "petition", - "pharmacy", - "physical", - "pictures", - "pipeline", - "planning", - "platform", - "platinum", - "playlist", - "pleasant", - "pleasure", - "policies", - "politics", - "portable", - "portland", - "portrait", - "position", - "positive", - "possible", - "possibly", - "postcard", - "powerful", - "practice", - "precious", - "prepared", - "presence", - "preserve", - "pressure", - "previews", - "previous", - "princess", - "printers", - "printing", - "priority", - "probably", - "problems", - "produced", - "producer", - "produces", - "products", - "profiles", - "programs", - "progress", - "projects", - "properly", - "property", - "proposal", - "proposed", - "prospect", - "protocol", - "provided", - "provider", - "provides", - "province", - "purchase", - "purposes", - "quantity", - "question", - "railroad", - "rankings", - "reaching", - "reaction", - "readings", - "realized", - "received", - "receiver", - "receives", - "recently", - "receptor", - "recorded", - "recorder", - "recovery", - "reducing", - "referral", - "referred", - "register", - "registry", - "rejected", - "relating", - "relation", - "relative", - "released", - "releases", - "relevant", - "reliable", - "religion", - "remained", - "remember", - "reminder", - "removing", - "repeated", - "replaced", - "reported", - "reporter", - "republic", - "requests", - "required", - "requires", - "research", - "reseller", - "reserved", - "reserves", - "resident", - "resolved", - "resource", - "response", - "resulted", - "retailer", - "returned", - "revenues", - "reviewed", - "reviewer", - "revision", - "ringtone", - "robinson", - "romantic", - "rotation", - "roulette", - "salvador", - "sampling", - "sandwich", - "saturday", - "scanning", - "scenario", - "schedule", - "sciences", - "scotland", - "scottish", - "searches", - "seasonal", - "sections", - "security", - "selected", - "semester", - "sentence", - "separate", - "sequence", - "services", - "sessions", - "settings", - "shipping", - "shooting", - "shoppers", - "shopping", - "shoulder", - "showcase", - "situated", - "sleeping", - "slightly", - "snapshot", - "softball", - "software", - "soldiers", - "solution", - "somebody", - "somewhat", - "speakers", - "speaking", - "specific", - "spectrum", - "spending", - "sponsors", - "sporting", - "staffing", - "standard", - "standing", - "stanford", - "starring", - "starting", - "stations", - "steering", - "stickers", - "stopping", - "straight", - "strategy", - "strength", - "strictly", - "strongly", - "struggle", - "students", - "studying", - "stunning", - "subjects", - "suddenly", - "suggests", - "suitable", - "sunshine", - "superior", - "supplied", - "supplier", - "supplies", - "supports", - "supposed", - "surgical", - "surprise", - "survival", - "swimming", - "switches", - "symptoms", - "syndrome", - "synopsis", - "tanzania", - "targeted", - "teachers", - "teaching", - "template", - "terminal", - "textbook", - "thailand", - "theaters", - "theories", - "thinking", - "thompson", - "thoughts", - "thousand", - "threaded", - "thursday", - "timeline", - "together", - "tomorrow", - "township", - "tracking", - "trailers", - "training", - "tramadol", - "transfer", - "traveler", - "travesti", - "treasure", - "treasury", - "triangle", - "tropical", - "tutorial", - "ultimate", - "universe", - "unsigned", - "untitled", - "upcoming", - "updating", - "uploaded", - "username", - "vacation", - "valuable", - "variable", - "vehicles", - "velocity", - "verified", - "versions", - "vertical", - "victoria", - "virginia", - "visiting", - "visitors", - "warnings", - "warranty", - "watching", - "websites", - "weddings", - "weekends", - "wellness", - "whatever", - "whenever", - "wherever", - "wildlife", - "williams", - "wireless", - "wishlist", - "workshop", - "accessory", - "accidents", - "according", - "achieving", - "additions", - "addressed", - "addresses", - "admission", - "advantage", - "adventure", - "advertise", - "affecting", - "affiliate", - "afternoon", - "aggregate", - "agreement", - "alexander", - "alignment", - "allocated", - "alternate", - "amendment", - "amenities", - "americans", - "amsterdam", - "announced", - "announces", - "anonymous", - "antivirus", - "apartment", - "appearing", - "applicant", - "appointed", - "architect", - "argentina", - "arguments", - "armstrong", - "assistant", - "associate", - "assurance", - "astronomy", - "athletics", - "attending", - "attention", - "attorneys", - "attribute", - "australia", - "authentic", - "authority", - "automatic", - "available", - "awareness", - "baltimore", - "barcelona", - "basically", - "beautiful", - "beginning", - "benchmark", - "biography", - "blackjack", - "bluetooth", - "bookstore", - "breakfast", - "brilliant", - "broadband", - "broadcast", - "butterfly", - "calculate", - "calendars", - "cambridge", - "camcorder", - "campaigns", - "candidate", - "carefully", - "cartridge", - "celebrate", - "celebrity", - "certainly", - "certified", - "challenge", - "character", - "charlotte", - "checklist", - "chemistry", - "childhood", - "chocolate", - "christina", - "christmas", - "classical", - "classroom", - "clearance", - "cleveland", - "coalition", - "cognitive", - "collected", - "collector", - "commander", - "committed", - "committee", - "community", - "companies", - "companion", - "comparing", - "complaint", - "completed", - "component", - "composite", - "computers", - "computing", - "concerned", - "concluded", - "condition", - "confident", - "configure", - "confirmed", - "confusion", - "connected", - "connector", - "consensus", - "construct", - "consumers", - "contained", - "container", - "continued", - "continues", - "contracts", - "converted", - "converter", - "copyright", - "corporate", - "correctly", - "cosmetics", - "countries", - "criticism", - "currently", - "customers", - "customize", - "dangerous", - "databases", - "decisions", - "dedicated", - "defendant", - "delicious", - "delivered", - "democracy", - "democrats", - "departure", - "dependent", - "depending", - "described", - "describes", - "designing", - "desperate", - "destroyed", - "detection", - "determine", - "developed", - "developer", - "diagnosis", - "different", - "difficult", - "dimension", - "direction", - "directive", - "directors", - "directory", - "discharge", - "discounts", - "discovery", - "discussed", - "disorders", - "displayed", - "diversity", - "divisions", - "documents", - "donations", - "ecommerce", - "economics", - "editorial", - "education", - "effective", - "efficient", - "elections", - "elevation", - "elizabeth", - "elsewhere", - "emergency", - "emissions", - "emotional", - "employees", - "employers", - "encourage", - "engineers", - "equations", - "equipment", - "essential", - "establish", - "estimated", - "estimates", - "evaluated", - "everybody", - "evolution", - "excellent", - "exception", - "exchanges", - "excluding", - "exclusive", - "execution", - "executive", - "exercises", - "existence", - "expanding", - "expansion", - "expensive", - "expertise", - "explained", - "exploring", - "expressed", - "extending", - "extension", - "extensive", - "extremely", - "fantastic", - "favorites", - "featuring", - "filtering", - "financial", - "financing", - "following", - "forecasts", - "forgotten", - "formation", - "framework", - "franchise", - "francisco", - "frequency", - "functions", - "furniture", - "galleries", - "gardening", - "gathering", - "genealogy", - "generally", - "generated", - "generator", - "geography", - "governing", - "guarantee", - "guatemala", - "guestbook", - "halloween", - "hampshire", - "happening", - "happiness", - "hardcover", - "headlines", - "highlight", - "hopefully", - "hospitals", - "household", - "hurricane", - "identical", - "immediate", - "implement", - "important", - "improving", - "including", - "inclusion", - "inclusive", - "increased", - "increases", - "indicated", - "indicates", - "indicator", - "infection", - "inflation", - "influence", - "initially", - "injection", - "inspector", - "installed", - "instantly", - "institute", - "insurance", - "integrate", - "integrity", - "intensity", - "intensive", - "intention", - "interests", - "interface", - "interview", - "introduce", - "invention", - "inventory", - "investing", - "investors", - "invisible", - "involving", - "jefferson", - "jewellery", - "knowledge", - "lancaster", - "landscape", - "languages", - "liability", - "libraries", - "licensing", - "lifestyle", - "lightning", - "listening", - "liverpool", - "locations", - "logistics", - "louisiana", - "magazines", - "mandatory", - "manhattan", - "marketing", - "materials", - "meanwhile", - "measuring", - "mechanism", - "mentioned", - "merchants", - "messaging", - "messenger", - "microwave", - "migration", - "minnesota", - "moderator", - "molecular", - "mortgages", - "movements", - "municipal", - "musicians", - "nashville", - "naturally", - "necessary", - "newcastle", - "newspaper", - "northeast", - "northwest", - "norwegian", - "notebooks", - "nutrition", - "objective", - "obviously", - "officials", - "operating", - "operation", - "operators", - "orchestra", - "organized", - "otherwise", - "overnight", - "ownership", - "packaging", - "paintings", - "panasonic", - "paperback", - "paragraph", - "parameter", - "parenting", - "particles", - "passenger", - "perfectly", - "performed", - "permalink", - "permanent", - "permitted", - "personals", - "personnel", - "petroleum", - "photoshop", - "placement", - "political", - "pollution", - "portfolio", - "positions", - "potential", - "practical", - "practices", - "precision", - "preferred", - "pregnancy", - "preparing", - "presented", - "president", - "primarily", - "principal", - "principle", - "printable", - "procedure", - "processor", - "producers", - "producing", - "professor", - "programme", - "projected", - "projector", - "promoting", - "promotion", - "proposals", - "protected", - "protocols", - "providers", - "providing", - "provision", - "published", - "publisher", - "purchases", - "qualified", - "questions", - "radiation", - "reactions", - "realistic", - "receiving", - "reception", - "recipient", - "recognize", - "recommend", - "recording", - "recycling", - "reduction", - "reference", - "refinance", - "reflected", - "regarding", - "regularly", - "relations", - "religious", - "remaining", - "reporting", - "represent", - "requested", - "requiring", - "residence", - "residents", - "resistant", - "resources", - "responses", - "resulting", - "retailers", - "retention", - "returning", - "ringtones", - "rochester", - "satellite", - "satisfied", - "scheduled", - "schedules", - "scientist", - "screening", - "searching", - "secondary", - "secretary", - "selecting", - "selection", - "separated", - "september", - "sequences", - "seriously", - "shareware", - "showtimes", - "signature", - "similarly", - "singapore", - "situation", - "slideshow", - "societies", - "solutions", - "something", - "sometimes", - "somewhere", - "southeast", - "southwest", - "specialty", - "specified", - "sponsored", - "spotlight", - "squirting", - "stability", - "stainless", - "standards", - "statement", - "statutory", - "strategic", - "streaming", - "structure", - "submitted", - "subscribe", - "substance", - "suggested", - "suppliers", - "supported", - "surprised", - "switching", - "syndicate", - "technical", - "technique", - "telephone", - "templates", - "temporary", - "tennessee", - "territory", - "testimony", - "textbooks", - "therefore", - "thousands", - "threshold", - "thumbnail", - "tolerance", - "trackback", - "trademark", - "tradition", - "transfers", - "transform", - "translate", - "transport", - "traveling", - "treatment", - "tutorials", - "typically", - "universal", - "unlimited", - "utilities", - "vacations", - "valentine", - "valuation", - "vancouver", - "variables", - "variation", - "vegetable", - "venezuela", - "vibrators", - "victorian", - "voluntary", - "volunteer", - "wallpaper", - "warehouse", - "webmaster", - "wednesday", - "wholesale", - "wisconsin", - "wonderful", - "wondering", - "wordpress", - "workforce", - "workplace", - "workshops", - "worldwide", - "wrestling", - "yesterday", - "absolutely", - "acceptable", - "acceptance", - "accessible", - "accordance", - "accounting", - "activation", - "activities", - "additional", - "addressing", - "adjustable", - "adjustment", - "admissions", - "adventures", - "advertiser", - "affiliated", - "affiliates", - "affordable", - "agreements", - "allocation", - "amendments", - "annotation", - "apartments", - "apparently", - "appearance", - "appliances", - "applicable", - "applicants", - "approaches", - "artificial", - "assessment", - "assignment", - "assistance", - "associated", - "associates", - "atmosphere", - "attachment", - "attendance", - "attraction", - "attractive", - "attributes", - "australian", - "authorized", - "automation", - "automobile", - "automotive", - "background", - "basketball", - "biological", - "birmingham", - "boundaries", - "businesses", - "calculated", - "calculator", - "california", - "candidates", - "capability", - "categories", - "challenges", - "characters", - "christians", - "chronicles", - "classified", - "colleagues", - "collecting", - "collection", - "collective", - "commentary", - "commercial", - "commission", - "commitment", - "committees", - "comparison", - "compatible", - "completely", - "completing", - "completion", - "complexity", - "compliance", - "compressed", - "concerning", - "conclusion", - "conditions", - "conducting", - "conference", - "confidence", - "connecting", - "connection", - "considered", - "consistent", - "constantly", - "consultant", - "consulting", - "containing", - "continuing", - "continuous", - "contractor", - "contribute", - "controlled", - "controller", - "convenient", - "convention", - "conversion", - "correction", - "corruption", - "counseling", - "creativity", - "curriculum", - "customized", - "decorating", - "decorative", - "definitely", - "definition", - "delivering", - "democratic", - "department", - "deployment", - "depression", - "describing", - "designated", - "determined", - "developers", - "developing", - "diagnostic", - "dictionary", - "difference", - "difficulty", - "dimensions", - "directions", - "disability", - "discipline", - "disclaimer", - "disclosure", - "discounted", - "discovered", - "discretion", - "discussion", - "dispatched", - "displaying", - "distribute", - "documented", - "downloaded", - "efficiency", - "electrical", - "electronic", - "elementary", - "employment", - "encryption", - "engagement", - "enrollment", - "enterprise", - "equivalent", - "especially", - "essentials", - "evaluating", - "evaluation", - "eventually", - "everything", - "everywhere", - "excellence", - "exceptions", - "executives", - "experience", - "experiment", - "expression", - "extensions", - "extraction", - "facilitate", - "facilities", - "federation", - "foundation", - "frequently", - "friendship", - "functional", - "generating", - "generation", - "geographic", - "governance", - "government", - "graduation", - "guaranteed", - "guidelines", - "healthcare", - "historical", - "horizontal", - "households", - "housewares", - "identified", - "identifier", - "importance", - "impossible", - "impression", - "impressive", - "increasing", - "incredible", - "indicators", - "individual", - "industrial", - "industries", - "initiative", - "innovation", - "innovative", - "inspection", - "installing", - "instructor", - "instrument", - "integrated", - "interested", - "interviews", - "introduced", - "investment", - "invitation", - "javascript", - "journalism", - "journalist", - "laboratory", - "leadership", - "limitation", - "limousines", - "literature", - "litigation", - "louisville", - "luxembourg", - "mainstream", - "maintained", - "management", - "manchester", - "mechanical", - "medication", - "membership", - "millennium", - "monitoring", - "montgomery", - "motivation", - "motorcycle", - "nationwide", - "navigation", - "networking", - "newsletter", - "newspapers", - "objectives", - "obligation", - "occupation", - "officially", - "operations", - "opposition", - "originally", - "parameters", - "particular", - "percentage", - "perception", - "performing", - "permission", - "personally", - "philosophy", - "photograph", - "physicians", - "physiology", - "polyphonic", - "popularity", - "population", - "portuguese", - "possession", - "powerpoint", - "prediction", - "preference", - "prescribed", - "preventing", - "prevention", - "previously", - "principles", - "priorities", - "procedures", - "processing", - "processors", - "production", - "productive", - "profession", - "prohibited", - "projection", - "properties", - "proportion", - "protecting", - "protection", - "protective", - "provincial", - "provisions", - "publishers", - "publishing", - "purchasing", - "queensland", - "reasonable", - "reasonably", - "recognized", - "recordings", - "recreation", - "recruiting", - "references", - "reflection", - "regardless", - "registered", - "regulation", - "regulatory", - "relatively", - "relocation", - "remarkable", - "repository", - "represents", - "reproduced", - "reputation", - "resistance", - "resolution", - "respective", - "respondent", - "restaurant", - "retirement", - "revolution", - "scheduling", - "scientific", - "scientists", - "screenshot", - "securities", - "separately", - "separation", - "simulation", - "situations", - "soundtrack", - "specialist", - "statements", - "statistics", - "strategies", - "structural", - "structured", - "structures", - "submission", - "subscriber", - "subsection", - "subsequent", - "substances", - "substitute", - "successful", - "sufficient", - "suggestion", - "sunglasses", - "supervisor", - "supplement", - "supporting", - "suspension", - "technician", - "techniques", - "technology", - "television", - "themselves", - "throughout", - "thumbnails", - "tournament", - "trademarks", - "transcript", - "transition", - "translated", - "treatments", - "ultimately", - "understand", - "understood", - "university", - "validation", - "vegetables", - "violations", - "visibility", - "volunteers", - "washington", - "widescreen", - "accessories", - "achievement", - "acquisition", - "advertising", - "agriculture", - "alternative", - "anniversary", - "application", - "appointment", - "appropriate", - "arrangement", - "assignments", - "association", - "attachments", - "attractions", - "authorities", - "bestsellers", - "calculation", - "celebration", - "celebrities", - "certificate", - "challenging", - "christopher", - "circulation", - "classifieds", - "collections", - "combination", - "comfortable", - "communicate", - "communities", - "comparative", - "competition", - "competitive", - "compilation", - "complicated", - "composition", - "compression", - "conclusions", - "conferences", - "connecticut", - "connections", - "considering", - "constitutes", - "constraints", - "constructed", - "consultants", - "consumption", - "continental", - "contracting", - "contractors", - "contributed", - "contributor", - "controlling", - "convenience", - "cooperation", - "cooperative", - "coordinator", - "corporation", - "corrections", - "declaration", - "definitions", - "demonstrate", - "departments", - "description", - "destination", - "destruction", - "determining", - "development", - "differences", - "dimensional", - "directories", - "discussions", - "distributed", - "distributor", - "documentary", - "educational", - "effectively", - "electricity", - "electronics", - "enforcement", - "engineering", - "enterprises", - "environment", - "essentially", - "established", - "examination", - "exceptional", - "exclusively", - "expenditure", - "experienced", - "experiences", - "explanation", - "exploration", - "expressions", - "flexibility", - "fundamental", - "furthermore", - "hospitality", - "identifying", - "illustrated", - "imagination", - "immediately", - "immigration", - "implemented", - "improvement", - "independent", - "individuals", - "information", - "initiatives", - "inspiration", - "institution", - "instruction", - "instruments", - "integration", - "interaction", - "interactive", - "interesting", - "interracial", - "introducing", - "investigate", - "investments", - "legislation", - "legislative", - "lightweight", - "limitations", - "maintenance", - "manufacture", - "marketplace", - "mathematics", - "measurement", - "medications", - "memorabilia", - "merchandise", - "minneapolis", - "necessarily", - "netherlands", - "newsletters", - "obligations", - "observation", - "operational", - "opportunity", - "orientation", - "outsourcing", - "outstanding", - "participant", - "participate", - "partnership", - "performance", - "personality", - "perspective", - "philippines", - "photography", - "populations", - "possibility", - "potentially", - "preferences", - "preparation", - "proceedings", - "procurement", - "productions", - "programming", - "progressive", - "proprietary", - "prospective", - "publication", - "recognition", - "recommended", - "recruitment", - "regulations", - "reliability", - "replacement", - "represented", - "requirement", - "researchers", - "reservation", - "residential", - "respondents", - "responsible", - "restaurants", - "restoration", - "scholarship", - "screenshots", - "shakespeare", - "significant", - "specialized", - "spectacular", - "sponsorship", - "statistical", - "subdivision", - "submissions", - "substantial", - "suggestions", - "supervision", - "supplements", - "surrounding", - "sustainable", - "switzerland", - "syndication", - "temperature", - "termination", - "traditional", - "transaction", - "transferred", - "translation", - "transmitted", - "unavailable", - "underground", - "utilization", - "verzeichnis", - "additionally", - "alphabetical", - "alternatives", - "announcement", - "applications", - "architecture", - "arrangements", - "associations", - "availability", - "bibliography", - "broadcasting", - "capabilities", - "certificates", - "championship", - "civilization", - "collectibles", - "commissioner", - "commonwealth", - "compensation", - "competitions", - "conditioning", - "confidential", - "confirmation", - "connectivity", - "consequences", - "conservation", - "conservative", - "considerable", - "consolidated", - "constitution", - "construction", - "consultation", - "contemporary", - "contribution", - "contributors", - "conventional", - "conversation", - "coordination", - "corporations", - "demonstrated", - "descriptions", - "destinations", - "developments", - "differential", - "disabilities", - "distribution", - "environments", - "establishing", - "expenditures", - "experimental", - "headquarters", - "illustration", - "implementing", - "improvements", - "incorporated", - "increasingly", - "independence", - "indianapolis", - "installation", - "institutions", - "instructions", - "intellectual", - "intelligence", - "interactions", - "intervention", - "introduction", - "jacksonville", - "laboratories", - "manufacturer", - "mathematical", - "metropolitan", - "modification", - "negotiations", - "neighborhood", - "notification", - "observations", - "occasionally", - "occupational", - "optimization", - "organisation", - "organization", - "participants", - "particularly", - "partnerships", - "pennsylvania", - "personalized", - "perspectives", - "philadelphia", - "photographer", - "photographic", - "prescription", - "presentation", - "preservation", - "presidential", - "productivity", - "professional", - "publications", - "recreational", - "registration", - "relationship", - "representing", - "reproduction", - "requirements", - "reservations", - "respectively", - "restrictions", - "satisfaction", - "scholarships", - "significance", - "specifically", - "subscription", - "successfully", - "surveillance", - "technologies", - "temperatures", - "testimonials", - "transactions", - "transmission", - "unemployment", - "universities", - "verification", - "accessibility", - "accommodation", - "administrator", - "advertisement", - "announcements", - "architectural", - "authorization", - "automatically", - "biotechnology", - "certification", - "circumstances", - "collaboration", - "collaborative", - "communication", - "compatibility", - "comprehensive", - "concentration", - "configuration", - "congressional", - "consideration", - "contributions", - "corresponding", - "determination", - "documentation", - "entertainment", - "environmental", - "establishment", - "illustrations", - "informational", - "instructional", - "international", - "investigation", - "manufacturers", - "manufacturing", - "massachusetts", - "miscellaneous", - "modifications", - "opportunities", - "organisations", - "organizations", - "participating", - "participation", - "professionals", - "psychological", - "relationships", - "significantly", - "specification", - "subscriptions", - "technological", - "understanding", - "unfortunately", - "accommodations", - "administration", - "administrative", - "classification", - "communications", - "considerations", - "correspondence", - "discrimination", - "identification", - "implementation", - "infrastructure", - "interpretation", - "organizational", - "qualifications", - "recommendation", - "representation", - "representative", - "responsibility", - "transformation", - "transportation" -] \ No newline at end of file diff --git a/packages/base6000/examples/large-numbers.ts b/packages/base6000/examples/large-numbers.ts deleted file mode 100644 index ee2b022..0000000 --- a/packages/base6000/examples/large-numbers.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { encode, decode } from '../src/index'; - -// Example: Using string input for very large numbers -console.log('=== Large Number Encoding Examples ===\n'); - -// Example 1: String input (recommended for large numbers) -const largeNumStr = '373493284239852352787678'; -console.log(`Input (string): ${largeNumStr}`); -const encoded1 = encode(largeNumStr); -console.log(`Encoded: ${encoded1}`); -const decoded1 = decode(encoded1); -console.log(`Decoded: ${decoded1.toString()}`); -console.log(`Match: ${decoded1.toString() === largeNumStr}\n`); - -// Example 2: BigInt input -const largeNumBigInt = 373493284239852352787678n; -console.log(`Input (bigint): ${largeNumBigInt}`); -const encoded2 = encode(largeNumBigInt); -console.log(`Encoded: ${encoded2}`); -const decoded2 = decode(encoded2); -console.log(`Decoded: ${decoded2.toString()}`); -console.log(`Match: ${decoded2 === largeNumBigInt}\n`); - -// Example 3: Safe number (works fine) -const safeNum = 123456; -console.log(`Input (safe number): ${safeNum}`); -const encoded3 = encode(safeNum); -console.log(`Encoded: ${encoded3}`); -const decoded3 = decode(encoded3); -console.log(`Decoded: ${decoded3.toString()}`); -console.log(`Match: ${decoded3 === BigInt(safeNum)}\n`); - -// Example 4: Unsafe number (will throw error) -console.log('=== Unsafe Number Example ==='); -const unsafeNum = 9007199254740992; // Number.MAX_SAFE_INTEGER + 1 -console.log(`Input (unsafe number): ${unsafeNum}`); -try { - const encoded4 = encode(unsafeNum); - console.log(`Encoded: ${encoded4}`); -} catch (error) { - console.log(`Error: ${error instanceof Error ? error.message : String(error)}`); - console.log('Solution: Use string or BigInt instead'); - const encoded4 = encode(unsafeNum.toString()); - console.log(`Encoded (as string): ${encoded4}`); - console.log(`Decoded: ${decode(encoded4).toString()}\n`); -} - -// Example 5: Very large number beyond JavaScript number range -console.log('=== Extremely Large Number ==='); -const extremelyLarge = '999999999999999999999999999999'; -console.log(`Input: ${extremelyLarge}`); -const encoded5 = encode(extremelyLarge); -console.log(`Encoded: ${encoded5}`); -const decoded5 = decode(encoded5); -console.log(`Decoded: ${decoded5.toString()}`); -console.log(`Match: ${decoded5.toString() === extremelyLarge}`); diff --git a/packages/base6000/jest.config.js b/packages/base6000/jest.config.js deleted file mode 100644 index ea3cdc3..0000000 --- a/packages/base6000/jest.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} **/ -export default { - testEnvironment: "node", - transform: { - "^.+.tsx?$": ["ts-jest", {}], - }, - moduleNameMapper: { - "^(\\.{1,2}/.*)\\.js$": "$1", - }, - extensionsToTreatAsEsm: [".ts"], -}; diff --git a/packages/base6000/package.json b/packages/base6000/package.json deleted file mode 100644 index ea06c7b..0000000 --- a/packages/base6000/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "base6000", - "type": "module", - "version": "0.0.2", - "description": "Base-6000 encoding/decoding using 6000 English words. Perfect for URL shortening, OTP codes, and memorable identifiers.", - "source": "src/index.ts", - "exports": { - "types": "./dist/src/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/src/index.d.ts", - "bin": { - "base6000": "./dist/cli.cjs" - }, - "files": [ - "dist", - "english.json", - "README.md", - "LICENSE" - ], - "scripts": { - "build": "microbundle && microbundle src/cli.ts -o dist/cli.cjs --no-pkg-main -f cjs", - "watch": "microbundle watch", - "test": "jest", - "release": "release-it", - "prepublishOnly": "pnpm run build && pnpm run test" - }, - "keywords": [ - "base6000", - "encoding", - "decoding", - "url-shortening", - "otp", - "base-conversion", - "numeral-system", - "words", - "memorable", - "identifier", - "hash", - "bigint" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/base6000" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/base6000#readme", - "devDependencies": { - "@types/jest": "^29.5.13", - "@types/node": "^20.0.0", - "husky": "^9.1.6", - "jest": "^29.7.0", - "lint-staged": "^15.2.10", - "microbundle": "^0.15.1", - "release-it": "^19.0.5", - "ts-jest": "^29.2.5", - "typescript": "^5.6.2" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "release-it": { - "hooks": { - "before:init": "pnpm run build" - } - }, - "lint-staged": { - "*.ts": [ - "pnpm run lint", - "prettier --write" - ] - }, - "dependencies": { - "biggest": "workspace:*" - } -} \ No newline at end of file diff --git a/packages/base6000/src/cli.ts b/packages/base6000/src/cli.ts deleted file mode 100644 index c130b86..0000000 --- a/packages/base6000/src/cli.ts +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env node - -import { - encode, - decode, -} from './index'; - -const args = process.argv.slice(2); - -function showHelp() { - console.log(` -Base6000 - Encode/Decode numbers using 6000 English words - -Usage: - base6000 encode [options] - base6000 decode [options] - -Commands: - encode Encode a number to base-6000 words - decode Decode base-6000 words to a number - -Options: - --separator Custom separator for encoding (default: '-') - For decoding, separators are auto-detected - -h, --help Show this help message - -Examples: - base6000 encode 123456 - base6000 encode 123456 --separator _ - base6000 decode u-meeting - base6000 decode high-categories-are-momentum - base6000 decode high categories are momentum # without quotes - base6000 decode "high categories are momentum" # with quotes - base6000 decode high_categories_are_momentum -`); -} - -function main() { - if (args.length === 0 || args.includes('-h') || args.includes('--help')) { - showHelp(); - process.exit(0); - } - - const command = args[0]; - - const separatorIndex = args.indexOf('--separator'); - const separator = separatorIndex !== -1 ? args[separatorIndex + 1] : '-'; - - // Collect value arguments (everything between command and options) - const valueArgs: string[] = []; - for (let i = 1; i < args.length; i++) { - const arg = args[i]; - // Stop at option flags - if (arg.startsWith('--')) { - // Skip the option and its value if it has one - if (arg === '--separator') { - i++; // Skip the separator value - } - continue; - } - valueArgs.push(arg); - } - - const value = valueArgs.join(' '); - - if (!value) { - console.error('Error: Missing value argument'); - showHelp(); - process.exit(1); - } - - try { - if (command === 'encode') { - // Pass the value as string to the encode function - // The library will handle BigInt conversion safely - const result = encode(value, separator); - console.log(result); - } else if (command === 'decode') { - // Auto-detect separator unless explicitly specified - const result = separatorIndex !== -1 ? decode(value, separator) : decode(value); - console.log(result.toString()); - } else { - console.error(`Error: Unknown command '${command}'`); - showHelp(); - process.exit(1); - } - } catch (error) { - console.error(`Error: ${error instanceof Error ? error.message : String(error)}`); - process.exit(1); - } -} - -main(); diff --git a/packages/base6000/src/index.ts b/packages/base6000/src/index.ts deleted file mode 100644 index b1d722a..0000000 --- a/packages/base6000/src/index.ts +++ /dev/null @@ -1,205 +0,0 @@ -import words from '../english.json'; -import { utils, divide as bigDivide, multiply as bigMultiply, add as bigAdd, mod as bigMod, compare as bigCompare, floor as bigFloor } from 'biggest'; - -/** - * Base6000 encoder/decoder using English words - * Converts numbers to/from base-6000 representation using 6000 English words - */ - -const BASE = 6000; -const BASE_STR = '6000'; -const WORDS: string[] = words; - -// Create reverse lookup map for decoding -const WORD_TO_INDEX = new Map(); -WORDS.forEach((word, index) => { - WORD_TO_INDEX.set(word.toLowerCase(), index); -}); - -// Threshold for switching to biggest module (around 10^100) -// BigInt can handle much larger numbers, but operations become slow -// We use string length as a proxy for size to avoid BigInt exponentiation issues -const BIGINT_THRESHOLD_LENGTH = 100; - -/** - * Check if a bigint is too large for efficient BigInt operations - */ -function shouldUseBiggest(n: bigint): boolean { - const str = n.toString(); - const cleaned = str.replace(/^-/, ''); - return cleaned.length > BIGINT_THRESHOLD_LENGTH; -} - -/** - * Check if a string representation of a number is too large - */ -function isStringTooLarge(str: string): boolean { - const cleaned = str.replace(/^-/, ''); - return cleaned.length > BIGINT_THRESHOLD_LENGTH; -} - -/** - * Encode a number or bigint to base-6000 word representation - * @param num - The number to encode (can be number, bigint, or string) - * @param separator - Optional separator between words (default: '-') - * @returns Encoded string of words - * - * @example - * encode(0) // 'A' - * encode(6000) // 'B-A' - * encode(123456) // 'U-Lvi' - * encode('373493284239852352787678') // handles very large numbers as strings - */ -export function encode(num: number | bigint | string, separator: string = '-'): string { - // Convert to BigInt safely - let n: bigint; - - if (typeof num === 'string') { - // Remove 'n' suffix if present and convert to BigInt - const cleanValue = num.replace(/n$/i, '').trim(); - try { - n = BigInt(cleanValue); - } catch (e) { - throw new Error('Invalid number format'); - } - } else if (typeof num === 'number') { - if (!Number.isInteger(num)) { - throw new Error('Only integers can be encoded'); - } - if (!Number.isSafeInteger(num)) { - throw new Error(`Number ${num} exceeds safe integer range. Use BigInt or string instead.`); - } - n = BigInt(num); - } else { - n = num; - } - - if (n < 0n) { - throw new Error('Only non-negative numbers can be encoded'); - } - - if (n === 0n) { - return WORDS[0]; - } - - // Determine if we should use biggest module - const useBiggest = shouldUseBiggest(n); - const numStr = n.toString(); - - const result: string[] = []; - - if (useBiggest) { - // Use biggest module for very large numbers - let num = numStr; - - while (bigCompare(num, '0') > 0) { - const remainder = bigMod(num, BASE_STR); - const remainderNum = parseInt(remainder); - result.unshift(WORDS[remainderNum]); - // Integer division: divide with sufficient precision then floor - // Use precision of 20 which is enough for accurate integer division - num = bigFloor(bigDivide(num, BASE_STR, 20)); - } - } else { - // Use BigInt for smaller numbers (faster) - let num = n; - - while (num > 0n) { - const remainder = Number(num % BigInt(BASE)); - result.unshift(WORDS[remainder]); - num = num / BigInt(BASE); - } - } - - return result.join(separator); -} - -/** - * Decode a base-6000 word representation back to a number - * @param encoded - The encoded string of words - * @param separator - Optional separator between words (default: auto-detect all special characters) - * @returns Decoded number as bigint - * - * @example - * decode('a') // 0n - * decode('b-a') // 6000n - * decode('u-meeting') // 123456n - * decode('high-categories-are-momentum') // hyphen separator - * decode('high categories are momentum') // space separator - * decode('high_categories_are_momentum') // underscore separator - * decode('high/categories/are/momentum') // slash separator - * decode('high+categories+are+momentum') // plus separator - * decode('high@categories@are@momentum') // any special character works - */ -export function decode(encoded: string, separator?: string): bigint { - if (!encoded || encoded.trim() === '') { - throw new Error('Encoded string cannot be empty'); - } - - // Normalize to lowercase for case-insensitive matching - const normalized = encoded.toLowerCase().trim(); - - let wordList: string[]; - - if (separator !== undefined) { - // Use provided separator - wordList = normalized.split(separator).map(w => w.trim()).filter(w => w.length > 0); - } else { - // Auto-detect separator: split by any non-alphanumeric characters - // This allows -, _, /, +, @, space, and any other special characters as separators - wordList = normalized.split(/[^a-z0-9]+/).filter(w => w.length > 0); - } - - // Estimate if result will be large based on number of words - // Each word represents log(6000) โ‰ˆ 3.78 decimal digits - // So 27 words โ‰ˆ 102 digits (above threshold) - const estimatedDigits = wordList.length * 3.78; - const useBiggest = estimatedDigits > 90; // Use threshold slightly below 100 for safety - - if (useBiggest) { - // Use biggest module for very large results - let result = '0'; - - for (const word of wordList) { - const index = WORD_TO_INDEX.get(word); - - if (index === undefined) { - throw new Error(`Invalid word in encoded string: "${word}"`); - } - - // result = result * BASE + index - result = bigMultiply(result, BASE_STR); - result = bigAdd(result, index.toString()); - } - - // Convert back to BigInt for return - return BigInt(result); - } else { - // Use BigInt for smaller results (faster) - let result = 0n; - - for (const word of wordList) { - const index = WORD_TO_INDEX.get(word); - - if (index === undefined) { - throw new Error(`Invalid word in encoded string: "${word}"`); - } - - result = result * BigInt(BASE) + BigInt(index); - } - - return result; - } -} - -/** - * Get the word at a specific index - * @param index - Index (0-5999) - * @returns The word at that index - */ -export function getWord(index: number): string { - if (index < 0 || index >= BASE) { - throw new Error(`Index must be between 0 and ${BASE - 1}`); - } - return WORDS[index]; -} diff --git a/packages/base6000/test/basic.test.ts b/packages/base6000/test/basic.test.ts deleted file mode 100644 index 6c6554e..0000000 --- a/packages/base6000/test/basic.test.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { encode, decode } from '../src/index'; - -describe('Basic Encoding/Decoding', () => { - test('encode 0 returns first word', () => { - expect(encode(0)).toBe('a'); - }); - - test('decode first word returns 0', () => { - expect(decode('a')).toBe(0n); - expect(decode('A')).toBe(0n); // case-insensitive - }); - - test('encode/decode round trip for small numbers', () => { - for (let i = 0; i < 100; i++) { - const encoded = encode(i); - const decoded = decode(encoded); - expect(decoded).toBe(BigInt(i)); - } - }); - - test('encode/decode round trip for large numbers', () => { - const testNumbers = [ - 1000, - 6000, - 10000, - 100000, - 1000000, - 123456789, - ]; - - for (const num of testNumbers) { - const encoded = encode(num); - const decoded = decode(encoded); - expect(decoded).toBe(BigInt(num)); - } - }); - - test('encode/decode with bigint', () => { - const bigNum = 123456789012345678901234567890n; - const encoded = encode(bigNum); - const decoded = decode(encoded); - expect(decoded).toBe(bigNum); - }); - - test('encode with custom separator', () => { - const encoded = encode(123456, '_'); - expect(encoded).toContain('_'); - const decoded = decode(encoded, '_'); - expect(decoded).toBe(123456n); - }); - - test('decode is case-insensitive', () => { - const encoded = encode(123456); - const lowerDecoded = decode(encoded.toLowerCase()); - const upperDecoded = decode(encoded.toUpperCase()); - expect(lowerDecoded).toBe(123456n); - expect(upperDecoded).toBe(123456n); - }); - - test('decode auto-detects different separators', () => { - const num = 123456789n; - - // Test with hyphen - const withHyphen = encode(num, '-'); - expect(decode(withHyphen)).toBe(num); - - // Test with underscore - const withUnderscore = encode(num, '_'); - expect(decode(withUnderscore)).toBe(num); - - // Test with space - const withSpace = encode(num, ' '); - expect(decode(withSpace)).toBe(num); - - // Test mixed case with different separators (all case-insensitive) - expect(decode('HIGH-CATEGORIES-ARE-MOMENTUM')).toBe(123526224436345n); - expect(decode('high_categories_are_momentum')).toBe(123526224436345n); - expect(decode('High Categories Are Momentum')).toBe(123526224436345n); - expect(decode('high-categories-are-momentum')).toBe(123526224436345n); - }); - - test('decode handles various special character separators', () => { - const num = 12352n; - const encoded = encode(num); // 'c-bird' - - // Test various special characters as separators - expect(decode('c-bird')).toBe(num); // hyphen - expect(decode('c_bird')).toBe(num); // underscore - expect(decode('c bird')).toBe(num); // space - expect(decode('c/bird')).toBe(num); // slash - expect(decode('c+bird')).toBe(num); // plus - expect(decode('c@bird')).toBe(num); // at sign - expect(decode('c|bird')).toBe(num); // pipe - expect(decode('c.bird')).toBe(num); // dot - expect(decode('c,bird')).toBe(num); // comma - expect(decode('c;bird')).toBe(num); // semicolon - expect(decode('c:bird')).toBe(num); // colon - expect(decode('c!bird')).toBe(num); // exclamation - expect(decode('c?bird')).toBe(num); // question mark - expect(decode('c#bird')).toBe(num); // hash - expect(decode('c$bird')).toBe(num); // dollar - expect(decode('c%bird')).toBe(num); // percent - expect(decode('c&bird')).toBe(num); // ampersand - expect(decode('c*bird')).toBe(num); // asterisk - }); - - test('decode handles multiple consecutive separators', () => { - const num = 123456n; - const encoded = encode(num); // 'U-Meeting' - - // Multiple spaces - expect(decode('u meeting')).toBe(num); - - // Multiple hyphens - expect(decode('u--meeting')).toBe(num); - - // Mixed separators - expect(decode('u -_meeting')).toBe(num); - }); - - test('encode/decode very large numbers beyond Number.MAX_SAFE_INTEGER', () => { - // Test numbers larger than Number.MAX_SAFE_INTEGER (2^53-1 = 9007199254740991) - const veryLargeNumbers = [ - 373493284239852352787678n, // The example from the issue - 9007199254740992n, // Just above MAX_SAFE_INTEGER - 123456789012345678901234567890n, - 999999999999999999999999999999n, - ]; - - for (const num of veryLargeNumbers) { - const encoded = encode(num); - const decoded = decode(encoded); - expect(decoded).toBe(num); - } - }); - - test('specific large number from issue: 373493284239852352787678', () => { - const num = 373493284239852352787678n; - const encoded = encode(num); - const decoded = decode(encoded); - expect(decoded).toBe(num); - // Verify the correct encoding (not the old truncated version) - expect(encoded).toBe('i-de-figures-divided-bizrate-continues-enforcement'); - }); - - test('encode accepts string input for large numbers', () => { - const numStr = '373493284239852352787678'; - const encoded = encode(numStr); - const decoded = decode(encoded); - expect(decoded).toBe(BigInt(numStr)); - expect(encoded).toBe('i-de-figures-divided-bizrate-continues-enforcement'); - }); - - test('encode throws error for unsafe numbers', () => { - const unsafeNumber = 9007199254740992; // Number.MAX_SAFE_INTEGER + 1 - expect(() => encode(unsafeNumber)).toThrow('exceeds safe integer range'); - }); - - test('encode accepts string with trailing n', () => { - const numStr = '123456789n'; - const encoded = encode(numStr); - const decoded = decode(encoded); - expect(decoded).toBe(123456789n); - }); - -}); diff --git a/packages/base6000/test/edge-cases.test.ts b/packages/base6000/test/edge-cases.test.ts deleted file mode 100644 index 08a5da9..0000000 --- a/packages/base6000/test/edge-cases.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { encode, decode } from '../src/index'; - -describe('Edge Cases', () => { - test('encode/decode boundary values', () => { - const boundaries = [ - 0, - 5999, // Last single-word value - 6000, // First two-word value - 35999999, // Last two-word value (6000^2 - 1) - 36000000, // First three-word value (6000^2) - ]; - - for (const num of boundaries) { - const encoded = encode(num); - const decoded = decode(encoded); - expect(decoded).toBe(BigInt(num)); - } - }); - - test('whitespace handling in decode', () => { - const encoded = encode(123456); - const withSpaces = ` ${encoded} `; - const decoded = decode(withSpaces); - expect(decoded).toBe(123456n); - }); - - test('mixed case in standard decode', () => { - const testCases = [ - 'A', - 'a', - 'A-B', - 'a-b', - 'A-b', - 'a-B', - ]; - - for (const testCase of testCases) { - expect(() => decode(testCase)).not.toThrow(); - } - }); -}); diff --git a/packages/base6000/test/errors.test.ts b/packages/base6000/test/errors.test.ts deleted file mode 100644 index bfdf011..0000000 --- a/packages/base6000/test/errors.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { encode, decode } from '../src/index'; - -describe('Error Handling', () => { - test('encode throws on negative numbers', () => { - expect(() => encode(-1)).toThrow('Only non-negative numbers can be encoded'); - }); - - test('encode throws on non-integer numbers', () => { - expect(() => encode(3.14)).toThrow('Only integers can be encoded'); - }); - - test('decode throws on empty string', () => { - expect(() => decode('')).toThrow('Encoded string cannot be empty'); - }); - - test('decode throws on invalid word', () => { - expect(() => decode('InvalidWord')).toThrow('Invalid word in encoded string'); - }); -}); diff --git a/packages/base6000/test/large-numbers.test.ts b/packages/base6000/test/large-numbers.test.ts deleted file mode 100644 index 683ae83..0000000 --- a/packages/base6000/test/large-numbers.test.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { encode, decode } from '../src/index'; - -describe('Very Large Number Handling with biggest module', () => { - test('encode/decode extremely large numbers (> 10^100)', () => { - // Test a number with 150 digits (way beyond BigInt's practical limits) - const veryLargeNumber = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(veryLargeNumber); - expect(encoded).toBeTruthy(); - expect(encoded.length).toBeGreaterThan(0); - - const decoded = decode(encoded); - expect(decoded.toString()).toBe(veryLargeNumber); - }); - - test('encode/decode number with exactly 100 digits', () => { - const largeNumber = '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(largeNumber); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(largeNumber); - }); - - test('encode/decode number with 200 digits', () => { - const massiveNumber = '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(massiveNumber); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(massiveNumber); - }); - - test('encode/decode with BigInt beyond threshold', () => { - // 10^100 + 1 - const bigNum = 10n ** 100n + 1n; - - const encoded = encode(bigNum); - const decoded = decode(encoded); - expect(decoded).toBe(bigNum); - }); - - test('encode/decode multiple very large numbers', () => { - const testNumbers = [ - '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999', - '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', - '987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098', - ]; - - for (const numStr of testNumbers) { - const encoded = encode(numStr); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(numStr); - } - }); - - test('encode with custom separator for very large numbers', () => { - const largeNumber = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(largeNumber, ' '); - expect(encoded).toContain(' '); - - const decoded = decode(encoded, ' '); - expect(decoded.toString()).toBe(largeNumber); - }); - - test('handles transition between BigInt and biggest smoothly', () => { - // Test numbers around the threshold - const numbers = [ - '9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999', // 100 digits (at threshold) - '10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', // 101 digits (above threshold) - '99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999', // 99 digits (below threshold) - ]; - - for (const numStr of numbers) { - const encoded = encode(numStr); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(numStr); - } - }); - - test('very large number maintains precision', () => { - // A prime number with 120 digits - const largePrime = '282475249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003'; - - const encoded = encode(largePrime); - const decoded = decode(encoded); - - // Verify exact match - expect(decoded.toString()).toBe(largePrime); - - // Verify it's not rounded or truncated - expect(decoded.toString().length).toBe(largePrime.length); - }); - - test('encode zero with biggest path (edge case)', () => { - // Even though zero is small, test it works with the string path - const encoded = encode('0'); - expect(encoded).toBe('a'); - expect(decode(encoded)).toBe(0n); - }); - - test('encode single digit with biggest path', () => { - const encoded = encode('5'); - expect(encoded).toBe('f'); - expect(decode(encoded)).toBe(5n); - }); - - test('very large number with different separators', () => { - const largeNumber = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const separators = ['-', ' ', '_', '/', '+']; - - for (const sep of separators) { - const encoded = encode(largeNumber, sep); - expect(encoded).toContain(sep); - const decoded = decode(encoded, sep); - expect(decoded.toString()).toBe(largeNumber); - } - }); - - test('encode/decode with auto-detect separator for large numbers', () => { - const largeNumber = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const encoded = encode(largeNumber, '-'); - // Decode without specifying separator (auto-detect) - const decoded = decode(encoded); - expect(decoded.toString()).toBe(largeNumber); - }); - - test('performance: encode/decode very large number completes in reasonable time', () => { - const largeNumber = '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - const startEncode = Date.now(); - const encoded = encode(largeNumber); - const encodeTime = Date.now() - startEncode; - - const startDecode = Date.now(); - const decoded = decode(encoded); - const decodeTime = Date.now() - startDecode; - - expect(decoded.toString()).toBe(largeNumber); - - // Should complete within reasonable time (5 seconds each) - expect(encodeTime).toBeLessThan(5000); - expect(decodeTime).toBeLessThan(5000); - }); - - test('encode/decode number at exact threshold boundary', () => { - // Create a number with exactly 100 digits - const exactThreshold = '1' + '0'.repeat(99); // 10^99 - - const encoded = encode(exactThreshold); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(exactThreshold); - }); - - test('encode/decode number just above threshold', () => { - // Create a number with 101 digits - const justAbove = '1' + '0'.repeat(100); // 10^100 - - const encoded = encode(justAbove); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(justAbove); - }); - - test('encode/decode number just below threshold', () => { - // Create a number with 99 digits - const justBelow = '1' + '0'.repeat(98); // 10^98 - - const encoded = encode(justBelow); - const decoded = decode(encoded); - expect(decoded.toString()).toBe(justBelow); - }); -}); diff --git a/packages/base6000/test/performance.test.ts b/packages/base6000/test/performance.test.ts deleted file mode 100644 index d8f3c97..0000000 --- a/packages/base6000/test/performance.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { encode, decode } from '../src/index'; - -describe('Performance Characteristics', () => { - test('encoding large numbers is efficient', () => { - const largeNum = 999999999999999n; - const start = Date.now(); - const encoded = encode(largeNum); - const encodeTime = Date.now() - start; - - expect(encodeTime).toBeLessThan(100); // Should be fast - expect(encoded).toBeTruthy(); - }); - - test('decoding is efficient', () => { - const encoded = encode(999999999999999n); - const start = Date.now(); - const decoded = decode(encoded); - const decodeTime = Date.now() - start; - - expect(decodeTime).toBeLessThan(100); // Should be fast - expect(decoded).toBe(999999999999999n); - }); -}); diff --git a/packages/base6000/test/use-cases.test.ts b/packages/base6000/test/use-cases.test.ts deleted file mode 100644 index 5dbc07f..0000000 --- a/packages/base6000/test/use-cases.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - encode, - decode, -} from '../src/index'; - -describe('Real-world Use Cases', () => { - test('Large number encoding', () => { - // Test with a very large number (e.g., timestamp in microseconds) - const timestamp = BigInt(Date.now()) * 1000n; - const encoded = encode(timestamp); - const decoded = decode(encoded); - - expect(decoded).toBe(timestamp); - }); - - test('Memorable identifiers', () => { - // Convert timestamp to memorable identifier - const timestamp = Date.now(); - const memorable = encode(timestamp); - const decoded = decode(memorable); - - expect(Number(decoded)).toBe(timestamp); - }); -}); diff --git a/packages/base6000/test/utilities.test.ts b/packages/base6000/test/utilities.test.ts deleted file mode 100644 index b505a07..0000000 --- a/packages/base6000/test/utilities.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { - getWord, -} from '../src/index'; - -describe('Utility Functions', () => { - test('getWord returns correct word', () => { - expect(getWord(0)).toBe('a'); - expect(getWord(1)).toBe('b'); - expect(getWord(26)).toBe('ai'); - }); - - test('getWord throws on invalid index', () => { - expect(() => getWord(-1)).toThrow(); - expect(() => getWord(6000)).toThrow(); - }); -}); diff --git a/packages/base6000/tsconfig.json b/packages/base6000/tsconfig.json deleted file mode 100644 index cbe2134..0000000 --- a/packages/base6000/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - } -} diff --git a/packages/biggest/.gitignore b/packages/biggest/.gitignore deleted file mode 100644 index c6bba59..0000000 --- a/packages/biggest/.gitignore +++ /dev/null @@ -1,130 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* diff --git a/packages/biggest/.npmignore b/packages/biggest/.npmignore deleted file mode 100644 index 57d9462..0000000 --- a/packages/biggest/.npmignore +++ /dev/null @@ -1,129 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* diff --git a/packages/biggest/LICENSE b/packages/biggest/LICENSE deleted file mode 100644 index a6e4455..0000000 --- a/packages/biggest/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 hmmhmmhm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/biggest/README.md b/packages/biggest/README.md deleted file mode 100644 index 065f94a..0000000 --- a/packages/biggest/README.md +++ /dev/null @@ -1,241 +0,0 @@ -# ๐Ÿ”ข biggest - -[![Wiki](https://img.shields.io/badge/๐Ÿ“–_Wiki-deepwiki-blue)](https://deepwiki.com/hmmhmmhm/node-packages) - -[![Biggest](https://hmart.app/en/biggest/og.png)](https://hmart.app/biggest) - -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/biggest)** - -> Tiny 2kb, zero deps, infinite precision: Biggest for all your big integer + big decimal needs. - -Biggest is a `Lightweight`, `Zero Dependency` JavaScript library for safe and precise arithmetic operations on `Big Integer` + `Big Decimal`. It excels at handling both Big Decimal and Big Integer computations with ease. ๐Ÿงฎ - -## Features ๐ŸŒŸ - -- ๐Ÿ”ข **Complete Big Number Suite**: Basic arithmetic (add, subtract, multiply, divide, abs) -- ๐Ÿ“Š **Advanced Comparisons**: compare, min, max, equality checks -- ๐Ÿ”„ **Rounding Operations**: floor, ceil, round, truncate with custom precision -- โšก **Power Operations**: exponentiation, square root, nth root calculations -- ๐Ÿงฎ **Modular Arithmetic**: mod, gcd, lcm with proper mathematical semantics -- ๐ŸŽฒ **Combinatorics**: factorial, combinations, permutations for large numbers -- ๐Ÿ”’ **Zero Dependencies**: Pure string-based implementation, no external libraries -- ๐Ÿชถ **Lightweight**: Only 2kb in size -- ๐Ÿ’ป **Full TypeScript Support**: Complete type definitions included -- ๐ŸŽฏ **Infinite Precision**: Handle arbitrarily large integers and precise decimals -- ๐Ÿ”€ **Seamless Integration**: Works with both Big Decimal and Big Number operations - -## Installation ๐Ÿ“ฅ - -```bash -npm install biggest -``` - -## Usage ๐Ÿš€ - -### Basic Arithmetic - -```javascript -import { add, subtract, multiply, divide } from "biggest"; - -console.log(add("10000000000000000000000", "0.00000000005")); -// '10000000000000000000000.00000000005' - -console.log(subtract("-9999999999999999999999.9", "0.1")); -// '-10000000000000000000000' - -console.log(multiply("123456789123456789", "0.000000001")); -// '123456789.123456789' - -console.log(divide("1000000000000000000000", "0.1")); -// '10000000000000000000000' -``` - -### Advanced Operations - -```javascript -import { - compare, - min, - max, - floor, - ceil, - round, - pow, - sqrt, - nthRoot, - mod, - gcd, - lcm, - factorial, -} from "biggest"; - -// Comparison operations -console.log(compare("123.456", "123.457")); // -1 (less than) -console.log(min("999999999999999999999", "1000000000000000000000")); // '999999999999999999999' -console.log(max("5.67", "5.68", "5.69")); // '5.69' - -// Rounding operations -console.log(floor("5.99")); // '5' -console.log(ceil("5.01")); // '6' -console.log(round("5.5")); // '6' - -// Power operations -console.log(pow("2", "100")); // '1267650600228229401496703205376' -console.log(sqrt("2")); // '1.41421356237309504880' -console.log(nthRoot("27", "3")); // '3' - -// Modular arithmetic -console.log(mod("17", "5")); // '2' -console.log(gcd("48", "18")); // '6' -console.log(lcm("12", "18")); // '36' - -// Factorial and combinatorics -console.log(factorial("10")); // '3628800' -``` - -## API ๐Ÿ“š - -### Basic Arithmetic Operations - -#### `add(left: string, right: string): string` - -Adds two numbers represented as strings. - -#### `subtract(left: string, right: string): string` - -Subtracts the second number from the first, both represented as strings. - -#### `multiply(left: string, right: string): string` - -Multiplies two numbers represented as strings. - -#### `divide(left: string, right: string, precision: number = 20): string` - -Divides the first number by the second, both represented as strings. The `precision` parameter determines the number of decimal places in the result (default is 20). - -#### `abs(num: string): string` - -Returns the absolute value of a number. - -### Comparison Operations - -#### `compare(a: string, b: string): number` - -Compares two numbers. Returns: - -- `1` if a > b -- `-1` if a < b -- `0` if a == b - -#### `isEqual(a: string, b: string): boolean` - -Checks if two numbers are equal. - -#### `isGreaterThan(a: string, b: string): boolean` - -Checks if the first number is greater than the second. - -#### `isLessThan(a: string, b: string): boolean` - -Checks if the first number is less than the second. - -#### `min(a: string, b: string, ...rest: string[]): string` - -Returns the smallest number from the given arguments. - -#### `max(a: string, b: string, ...rest: string[]): string` - -Returns the largest number from the given arguments. - -### Rounding Operations - -#### `floor(num: string): string` - -Rounds down to the nearest integer (towards negative infinity). - -#### `ceil(num: string): string` - -Rounds up to the nearest integer (towards positive infinity). - -#### `round(num: string): string` - -Rounds to the nearest integer using "round half up" strategy. - -#### `truncate(num: string): string` - -Removes the fractional part (rounds towards zero). - -#### `roundToPrecision(num: string, precision: number): string` - -Rounds to the specified number of decimal places. - -### Power Operations - -#### `pow(base: string, exponent: string): string` - -Raises a number to an integer power. Supports negative exponents. - -#### `sqrt(num: string, precision: number = 20): string` - -Calculates the square root of a number using Newton's method. - -#### `nthRoot(radicand: string, n: string, precision: number = 20): string` - -Calculates the nth root of a number. The `n` parameter must be a positive integer. - -### Modular Arithmetic - -#### `mod(dividend: string, divisor: string): string` - -Mathematical modulo operation. The result always has the same sign as the divisor. - -#### `remainder(dividend: string, divisor: string): string` - -Programming remainder operation. The result has the same sign as the dividend. - -#### `gcd(a: string, b: string): string` - -Calculates the Greatest Common Divisor using the Euclidean algorithm. - -#### `lcm(a: string, b: string): string` - -Calculates the Least Common Multiple using the formula: lcm(a,b) = |aร—b| / gcd(a,b). - -### Factorial and Combinatorics - -#### `factorial(n: string): string` - -Calculates the factorial of a non-negative integer (n!). - -#### `combination(n: string, r: string): string` - -Calculates the number of ways to choose r items from n items (nCr). - -#### `permutation(n: string, r: string): string` - -Calculates the number of ways to arrange r items from n items (nPr). - -## Why Biggest? ๐Ÿค” - -JavaScript's native number type has limitations when dealing with very large numbers or high precision decimals. Biggest overcomes these limitations by: - -- ๐Ÿ”ข Representing numbers as strings, allowing for arbitrary-length integers -- ๐ŸŽฏ Providing high-precision decimal arithmetic -- ๐Ÿ› Avoiding floating-point errors common in JavaScript's native math operations - -## Performance ๐Ÿš€ - -Biggest is optimized for performance while maintaining accuracy. It's suitable for applications requiring precise calculations with large numbers, such as financial systems, scientific computing, or cryptography. - -## Contributing ๐Ÿค - -Contributions are welcome! Please feel free to submit a Pull Request. - -## License ๐Ÿ“„ - -This project is licensed under the MIT License - see the LICENSE file for details. - -## Acknowledgments ๐Ÿ‘ - -- Thanks to all contributors who have helped shape Biggest -- Inspired by the need for reliable big number arithmetic in JavaScript diff --git a/packages/biggest/jest.config.js b/packages/biggest/jest.config.js deleted file mode 100644 index c44ef36..0000000 --- a/packages/biggest/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} **/ -export default { - testEnvironment: "node", - transform: { - "^.+.tsx?$": ["ts-jest", {}], - }, -}; diff --git a/packages/biggest/package.json b/packages/biggest/package.json deleted file mode 100644 index d5531a7..0000000 --- a/packages/biggest/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "biggest", - "type": "module", - "version": "1.0.3", - "description": "biggest is helps you safely compute very large numbers.", - "source": "src/index.ts", - "exports": { - "types": "./dist/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/index.d.ts", - "scripts": { - "build": "microbundle", - "watch": "microbundle watch", - "test": "jest", - "release": "release-it" - }, - "keywords": [ - "safe", - "base", - "big", - "number", - "math", - "computation" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/biggest" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/biggest#readme", - "devDependencies": { - "@types/jest": "^29.5.13", - "husky": "^9.1.6", - "jest": "^29.7.0", - "lint-staged": "^15.2.10", - "microbundle": "^0.15.1", - "release-it": "^19.0.5", - "ts-jest": "^29.2.5", - "typescript": "^5.6.2" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "release-it": { - "hooks": { - "before:init": "pnpm run build" - } - }, - "lint-staged": { - "*.ts": [ - "pnpm run lint", - "prettier --write" - ] - } -} diff --git a/packages/biggest/src/abs.ts b/packages/biggest/src/abs.ts deleted file mode 100644 index 7f667c4..0000000 --- a/packages/biggest/src/abs.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Function to get the absolute value of a number - * @param num - number as string - * @returns absolute value of the number - */ -export default function abs(num: string): string { - if (typeof num !== "string") { - throw new Error("Input must be a string"); - } - - // Remove leading/trailing whitespace - num = num.trim(); - - // Remove sign if present - if (num.startsWith("-") || num.startsWith("+")) { - return num.substring(1); - } - - return num; -} \ No newline at end of file diff --git a/packages/biggest/src/add.ts b/packages/biggest/src/add.ts deleted file mode 100644 index a380b90..0000000 --- a/packages/biggest/src/add.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { compareAbsolute, parseNumber } from "./utils"; - -/** - * Adds two numbers represented as strings. - * @param left - * @param right - * @returns - */ -export function add(left: string, right: string): string { - // Parse input numbers - let leftParsed = parseNumber(left); - let rightParsed = parseNumber(right); - - if (leftParsed.sign === rightParsed.sign) { - // If signs are the same, perform addition - let sign = leftParsed.sign; - - // Pad fractional parts to equal length - let maxFracLen = Math.max( - leftParsed.fractionalPart.length, - rightParsed.fractionalPart.length - ); - leftParsed.fractionalPart = leftParsed.fractionalPart.padEnd( - maxFracLen, - "0" - ); - rightParsed.fractionalPart = rightParsed.fractionalPart.padEnd( - maxFracLen, - "0" - ); - - // Pad integer parts to equal length - let maxIntLen = Math.max( - leftParsed.integerPart.length, - rightParsed.integerPart.length - ); - leftParsed.integerPart = leftParsed.integerPart.padStart(maxIntLen, "0"); - rightParsed.integerPart = rightParsed.integerPart.padStart(maxIntLen, "0"); - - // Combine integer and fractional parts - let leftCombined = leftParsed.integerPart + leftParsed.fractionalPart; - let rightCombined = rightParsed.integerPart + rightParsed.fractionalPart; - - // Perform digit-by-digit addition - let result = ""; - let carry = 0; - for (let i = leftCombined.length - 1; i >= 0; i--) { - let sum = parseInt(leftCombined[i]) + parseInt(rightCombined[i]) + carry; - carry = Math.floor(sum / 10); - result = (sum % 10).toString() + result; - } - if (carry > 0) { - result = carry.toString() + result; - } - - // Restore decimal point - if (maxFracLen > 0) { - let integerResult = result.slice(0, -maxFracLen); - let fractionalResult = result.slice(-maxFracLen); - result = integerResult + "." + fractionalResult; - } - - // Remove unnecessary zeros - result = result.replace(/^0+(?!\.|$)/, ""); // Remove leading zeros - result = result.replace(/(\.\d*?)0+$/, "$1"); // Remove trailing zeros in fractional part - result = result.replace(/\.$/, ""); // Remove decimal point if fractional part is empty - - // Apply sign - if (sign === -1 && result !== "0") { - result = "-" + result; - } - - return result; - } else { - // If signs are different, perform subtraction - let compare = compareAbsolute(leftParsed, rightParsed); - let sign = compare >= 0 ? leftParsed.sign : rightParsed.sign; - - // Determine which number is larger in absolute value - let minuend = compare >= 0 ? leftParsed : rightParsed; - let subtrahend = compare >= 0 ? rightParsed : leftParsed; - - // Pad fractional parts to equal length - let maxFracLen = Math.max( - minuend.fractionalPart.length, - subtrahend.fractionalPart.length - ); - minuend.fractionalPart = minuend.fractionalPart.padEnd(maxFracLen, "0"); - subtrahend.fractionalPart = subtrahend.fractionalPart.padEnd( - maxFracLen, - "0" - ); - - // Pad integer parts to equal length - let maxIntLen = Math.max( - minuend.integerPart.length, - subtrahend.integerPart.length - ); - minuend.integerPart = minuend.integerPart.padStart(maxIntLen, "0"); - subtrahend.integerPart = subtrahend.integerPart.padStart(maxIntLen, "0"); - - // Combine integer and fractional parts - let minuendCombined = minuend.integerPart + minuend.fractionalPart; - let subtrahendCombined = subtrahend.integerPart + subtrahend.fractionalPart; - - // Perform digit-by-digit subtraction - let result = ""; - let borrow = 0; - for (let i = minuendCombined.length - 1; i >= 0; i--) { - let diff = - parseInt(minuendCombined[i]) - parseInt(subtrahendCombined[i]) - borrow; - if (diff < 0) { - diff += 10; - borrow = 1; - } else { - borrow = 0; - } - result = diff.toString() + result; - } - - // Restore decimal point - if (maxFracLen > 0) { - let integerResult = result.slice(0, -maxFracLen); - let fractionalResult = result.slice(-maxFracLen); - result = integerResult + "." + fractionalResult; - } - - // Remove unnecessary zeros - result = result.replace(/^0+(?!\.|$)/, ""); // Remove leading zeros - result = result.replace(/(\.\d*?)0+$/, "$1"); // Remove trailing zeros in fractional part - result = result.replace(/\.$/, ""); // Remove decimal point if fractional part is empty - - // Handle case where result is zero - if (result === "") { - result = "0"; - } - - // Apply sign - if (sign === -1 && result !== "0") { - result = "-" + result; - } - - return result; - } -} - -export default add; diff --git a/packages/biggest/src/compare.ts b/packages/biggest/src/compare.ts deleted file mode 100644 index 4a5c8b7..0000000 --- a/packages/biggest/src/compare.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { parseStringNumber } from "./utils"; - -/** - * Compares two numbers represented as strings - * @param a First number as string - * @param b Second number as string - * @returns 1 if a > b, -1 if a < b, 0 if a == b - */ -export default function compare(a: string, b: string): number { - // Handle empty or invalid inputs - if (a === undefined || a === null || b === undefined || b === null) { - throw new Error("Invalid input: both numbers must be provided"); - } - - // Parse both numbers - const numA = parseStringNumber(a); - const numB = parseStringNumber(b); - - // Handle sign comparison first - if (numA.sign !== numB.sign) { - return numA.sign > numB.sign ? 1 : -1; - } - - // Both numbers have the same sign, compare absolute values - const absCompare = compareAbsoluteValues(numA, numB); - - // If both negative, invert the result - const result = numA.sign === -1 ? -absCompare : absCompare; - - // Ensure we return 0 instead of -0 - return result === 0 ? 0 : result; -} - -/** - * Compares absolute values of two parsed numbers - * @param a Parsed number A - * @param b Parsed number B - * @returns 1 if |a| > |b|, -1 if |a| < |b|, 0 if |a| == |b| - */ -function compareAbsoluteValues(a: any, b: any): number { - // Compare integer part lengths first - const intLenA = a.integerPart.length; - const intLenB = b.integerPart.length; - - if (intLenA > intLenB) return 1; - if (intLenA < intLenB) return -1; - - // Integer parts have same length, compare digit by digit - for (let i = 0; i < intLenA; i++) { - const digitA = a.integerPart[i]; - const digitB = b.integerPart[i]; - if (digitA > digitB) return 1; - if (digitA < digitB) return -1; - } - - // Integer parts are equal, compare fractional parts - const maxFracLen = a.fractionalPart.length > b.fractionalPart.length - ? a.fractionalPart.length - : b.fractionalPart.length; - - for (let i = 0; i < maxFracLen; i++) { - const digitA = i < a.fractionalPart.length ? a.fractionalPart[i] : "0"; - const digitB = i < b.fractionalPart.length ? b.fractionalPart[i] : "0"; - if (digitA > digitB) return 1; - if (digitA < digitB) return -1; - } - - // Numbers are equal - return 0; -} - -/** - * Checks if two numbers are equal - * @param a First number as string - * @param b Second number as string - * @returns true if a == b, false otherwise - */ -export function isEqual(a: string, b: string): boolean { - return compare(a, b) === 0; -} - -/** - * Checks if first number is greater than second - * @param a First number as string - * @param b Second number as string - * @returns true if a > b, false otherwise - */ -export function isGreaterThan(a: string, b: string): boolean { - return compare(a, b) === 1; -} - -/** - * Checks if first number is less than second - * @param a First number as string - * @param b Second number as string - * @returns true if a < b, false otherwise - */ -export function isLessThan(a: string, b: string): boolean { - return compare(a, b) === -1; -} - -/** - * Finds the minimum of two or more numbers - * @param a First number as string - * @param b Second number as string - * @param rest Additional numbers - * @returns The smallest number as string - */ -export function min(a: string, b: string, ...rest: string[]): string { - let minimum = compare(a, b) <= 0 ? a : b; - - for (const num of rest) { - if (compare(num, minimum) < 0) { - minimum = num; - } - } - - return minimum; -} - -/** - * Finds the maximum of two or more numbers - * @param a First number as string - * @param b Second number as string - * @param rest Additional numbers - * @returns The largest number as string - */ -export function max(a: string, b: string, ...rest: string[]): string { - let maximum = compare(a, b) >= 0 ? a : b; - - for (const num of rest) { - if (compare(num, maximum) > 0) { - maximum = num; - } - } - - return maximum; -} \ No newline at end of file diff --git a/packages/biggest/src/divide.ts b/packages/biggest/src/divide.ts deleted file mode 100644 index 69fc894..0000000 --- a/packages/biggest/src/divide.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { - compare, - multiplyDigit, - parseNumber, - removeLeadingZeros, - removeLeadingZerosFromResult, - roundResult, - subtractStrings, -} from "./utils"; - -export function divide( - left: string, - right: string, - precision: number = 20 -): string { - // Modified long division algorithm - function longDivision( - dividend: string, - divisor: string, - precision: number - ): string { - let result = ""; - let remainder = ""; - let dividendIndex = 0; - let decimalPointAdded = false; - let decimalPlaces = 0; - - // Calculate one more digit than the desired precision - let maxDecimalPlaces = precision + 1; - - while ( - dividendIndex < dividend.length || - (decimalPlaces <= maxDecimalPlaces && compare(remainder, "0") !== 0) - ) { - if (dividendIndex < dividend.length) { - remainder += dividend[dividendIndex]; - dividendIndex++; - } else { - if (!decimalPointAdded) { - result += "."; - decimalPointAdded = true; - } - remainder += "0"; - } - - remainder = removeLeadingZeros(remainder); - - let quotientDigit = "0"; - if (compare(remainder, divisor) >= 0) { - // Find the quotient digit using binary search - let low = 0; - let high = 10; - while (low < high) { - let mid = Math.floor((low + high) / 2); - let product = multiplyDigit(divisor, mid.toString()); - if (compare(product, remainder) <= 0) { - low = mid + 1; - } else { - high = mid; - } - } - quotientDigit = (low - 1).toString(); - let subtractProduct = multiplyDigit(divisor, quotientDigit); - remainder = subtractStrings(remainder, subtractProduct); - } - - result += quotientDigit; - - // Increase decimalPlaces after the decimal point is added - if (decimalPointAdded) { - decimalPlaces++; - if (decimalPlaces > maxDecimalPlaces) { - break; - } - } - } - - // Round the result - result = roundResult(result, precision); - - return result || "0"; - } - - let num1 = parseNumber(left); - let num2 = parseNumber(right); - - if (num2.integerPart === "0" && num2.fractionalPart === "") { - throw new Error("Division by zero"); - } - - // Convert to whole numbers (integer part + fractional part) - let wholeNum1 = num1.integerPart + num1.fractionalPart; - let wholeNum2 = num2.integerPart + num2.fractionalPart; - - // Adjust decimal places - let decimalPlacesNum1 = num1.fractionalPart.length; - let decimalPlacesNum2 = num2.fractionalPart.length; - let scale = decimalPlacesNum2 - decimalPlacesNum1; - - if (scale > 0) { - wholeNum1 = wholeNum1 + "0".repeat(scale); - } else if (scale < 0) { - wholeNum2 = wholeNum2 + "0".repeat(-scale); - } - - // Remove leading zeros - wholeNum1 = removeLeadingZeros(wholeNum1); - wholeNum2 = removeLeadingZeros(wholeNum2); - - // Determine the sign of the result - let resultSign = num1.sign * num2.sign; - - // Perform division - let quotient = longDivision(wholeNum1, wholeNum2, precision); - - // Remove leading zeros from the integer part of the result - quotient = removeLeadingZerosFromResult(quotient); - - // Apply the sign to the result - if (resultSign === -1 && quotient !== "0") { - quotient = "-" + quotient; - } - - return quotient; -} - -export default divide; diff --git a/packages/biggest/src/factorial.ts b/packages/biggest/src/factorial.ts deleted file mode 100644 index 662fafc..0000000 --- a/packages/biggest/src/factorial.ts +++ /dev/null @@ -1,136 +0,0 @@ -import multiply from "./multiply"; -import compare, { isEqual } from "./compare"; -import { parseStringNumber, isInteger, isZero, addOne } from "./utils"; -import subtract from "./subtract"; -import divide from "./divide"; - -/** - * Calculates factorial of a non-negative integer - * n! = n ร— (n-1) ร— (n-2) ร— ... ร— 2 ร— 1 - * Special cases: 0! = 1, 1! = 1 - * @param n Non-negative integer as string - * @returns Factorial as string - */ -export function factorial(n: string): string { - if (!isInteger(n)) { - throw new Error("Factorial is only defined for integers"); - } - - const parsed = parseStringNumber(n); - - if (parsed.sign === -1) { - throw new Error("Factorial is not defined for negative numbers"); - } - - if (isZero(n) || isEqual(n, "1")) { - return "1"; - } - - // Calculate n! = n ร— (n-1) ร— (n-2) ร— ... ร— 2 ร— 1 - let result = "1"; - let current = "2"; - - while (compare(current, n) <= 0) { - result = multiply(result, current); - current = addOne(current); - } - - return result; -} - -/** - * Calculates the number of ways to choose r items from n items (combinations) - * C(n,r) = n! / (r! ร— (n-r)!) - * @param n Total number of items - * @param r Number of items to choose - * @returns Number of combinations as string - */ -export function combination(n: string, r: string): string { - if (!isInteger(n) || !isInteger(r)) { - throw new Error("Combination requires integer arguments"); - } - - const nParsed = parseStringNumber(n); - const rParsed = parseStringNumber(r); - - if (nParsed.sign === -1 || rParsed.sign === -1) { - throw new Error("Combination is not defined for negative numbers"); - } - - if (compare(r, n) > 0) { - return "0"; // C(n,r) = 0 when r > n - } - - if (isZero(r) || isEqual(r, n)) { - return "1"; // C(n,0) = C(n,n) = 1 - } - - // Optimize: C(n,r) = C(n,n-r), use the smaller value - const nMinusR = subtract(n, r); - if (compare(r, nMinusR) > 0) { - r = nMinusR; - } - - // Calculate C(n,r) = n! / (r! ร— (n-r)!) - // But we can optimize this to avoid calculating large factorials: - // C(n,r) = (n ร— (n-1) ร— ... ร— (n-r+1)) / (r ร— (r-1) ร— ... ร— 1) - - let numerator = "1"; - let denominator = "1"; - let i = "0"; - - while (compare(i, r) < 0) { - // numerator *= (n - i) - const nMinusI = subtract(n, i); - numerator = multiply(numerator, nMinusI); - - // denominator *= (i + 1) - const iPlus1 = addOne(i); - denominator = multiply(denominator, iPlus1); - - i = addOne(i); - } - - return divide(numerator, denominator, 0); -} - -/** - * Calculates the number of ways to arrange r items from n items (permutations) - * P(n,r) = n! / (n-r)! - * @param n Total number of items - * @param r Number of items to arrange - * @returns Number of permutations as string - */ -export function permutation(n: string, r: string): string { - if (!isInteger(n) || !isInteger(r)) { - throw new Error("Permutation requires integer arguments"); - } - - const nParsed = parseStringNumber(n); - const rParsed = parseStringNumber(r); - - if (nParsed.sign === -1 || rParsed.sign === -1) { - throw new Error("Permutation is not defined for negative numbers"); - } - - if (compare(r, n) > 0) { - return "0"; // P(n,r) = 0 when r > n - } - - if (isZero(r)) { - return "1"; // P(n,0) = 1 - } - - // Calculate P(n,r) = n ร— (n-1) ร— ... ร— (n-r+1) - let result = "1"; - let i = "0"; - - while (compare(i, r) < 0) { - // result *= (n - i) - const nMinusI = subtract(n, i); - result = multiply(result, nMinusI); - i = addOne(i); - } - - return result; -} \ No newline at end of file diff --git a/packages/biggest/src/index.ts b/packages/biggest/src/index.ts deleted file mode 100644 index 26df051..0000000 --- a/packages/biggest/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import add from "./add.js"; -import subtract from "./subtract.js"; -import multiply from "./multiply.js"; -import divide from "./divide.js"; -import abs from "./abs.js"; -import sqrt from "./sqrt.js"; -import compare, { isEqual, isGreaterThan, isLessThan, min, max } from "./compare.js"; -import { floor, ceil, truncate, round, roundToPrecision } from "./rounding.js"; -import { pow, nthRoot } from "./power.js"; -import { mod, gcd, lcm, remainder } from "./modular.js"; -import { factorial, combination, permutation } from "./factorial.js"; -import * as utils from "./utils.js"; - -export { add, subtract, multiply, divide, abs, sqrt, compare, isEqual, isGreaterThan, isLessThan, min, max, floor, ceil, truncate, round, roundToPrecision, pow, nthRoot, mod, gcd, lcm, remainder, factorial, combination, permutation, utils }; diff --git a/packages/biggest/src/modular.ts b/packages/biggest/src/modular.ts deleted file mode 100644 index bacfacb..0000000 --- a/packages/biggest/src/modular.ts +++ /dev/null @@ -1,141 +0,0 @@ -import divide from "./divide"; -import multiply from "./multiply"; -import subtract from "./subtract"; -import compare, { isEqual } from "./compare"; -import { floor } from "./rounding"; -import { parseStringNumber, isInteger, isZero } from "./utils"; -import abs from "./abs"; -import add from "./add"; - -/** - * Modulo operation (remainder after division) - * For positive numbers: a mod n = a - n * floor(a/n) - * Result always has the same sign as the divisor n - * @param dividend The number being divided - * @param divisor The number to divide by - * @returns Remainder as string - */ -export function mod(dividend: string, divisor: string): string { - if (isZero(divisor)) { - throw new Error("Division by zero in modulo operation"); - } - - if (!isInteger(dividend) || !isInteger(divisor)) { - throw new Error("Modulo operation requires integer arguments"); - } - - if (isZero(dividend)) { - return "0"; - } - - // Calculate quotient using floor division - const quotient = divide(dividend, divisor, 0); - const flooredQuotient = floor(quotient); - - // Calculate remainder: dividend - divisor * floor(dividend/divisor) - const product = multiply(divisor, flooredQuotient); - const remainder = subtract(dividend, product); - - // Ensure result has same sign as divisor (mathematical modulo) - const divisorParsed = parseStringNumber(divisor); - const remainderParsed = parseStringNumber(remainder); - - if (isZero(remainder)) { - return "0"; - } - - // If remainder and divisor have different signs, adjust - if (divisorParsed.sign !== remainderParsed.sign) { - return add(remainder, divisor); - } - - return remainder; -} - -/** - * Euclidean algorithm for Greatest Common Divisor - * @param a First number as string - * @param b Second number as string - * @returns GCD as string - */ -export function gcd(a: string, b: string): string { - if (!isInteger(a) || !isInteger(b)) { - throw new Error("GCD requires integer arguments"); - } - - // Work with absolute values - let numA = abs(a); - let numB = abs(b); - - if (isZero(numA)) { - return numB; - } - - if (isZero(numB)) { - return numA; - } - - // Euclidean algorithm: gcd(a,b) = gcd(b, a mod b) - while (!isZero(numB)) { - const temp = numB; - numB = mod(numA, numB); - numA = temp; - } - - return numA; -} - -/** - * Least Common Multiple using the formula: lcm(a,b) = |a*b| / gcd(a,b) - * @param a First number as string - * @param b Second number as string - * @returns LCM as string - */ -export function lcm(a: string, b: string): string { - if (!isInteger(a) || !isInteger(b)) { - throw new Error("LCM requires integer arguments"); - } - - if (isZero(a) || isZero(b)) { - return "0"; - } - - // lcm(a,b) = |a*b| / gcd(a,b) - const product = multiply(abs(a), abs(b)); - const gcdResult = gcd(a, b); - - return divide(product, gcdResult, 0); -} - -/** - * Remainder operation (different from modulo for negative numbers) - * Result has the same sign as the dividend - * @param dividend The number being divided - * @param divisor The number to divide by - * @returns Remainder as string - */ -export function remainder(dividend: string, divisor: string): string { - if (isZero(divisor)) { - throw new Error("Division by zero in remainder operation"); - } - - if (!isInteger(dividend) || !isInteger(divisor)) { - throw new Error("Remainder operation requires integer arguments"); - } - - if (isZero(dividend)) { - return "0"; - } - - // For remainder operation, we use truncated division - const quotient = divide(dividend, divisor, 0); - - // Truncate towards zero (different from floor for negative numbers) - const truncatedQuotient = quotient.startsWith("-") ? - "-" + floor(quotient.substring(1)) : - floor(quotient); - - // Calculate remainder: dividend - divisor * truncate(dividend/divisor) - const product = multiply(divisor, truncatedQuotient); - return subtract(dividend, product); -} \ No newline at end of file diff --git a/packages/biggest/src/multiply.ts b/packages/biggest/src/multiply.ts deleted file mode 100644 index fc50aad..0000000 --- a/packages/biggest/src/multiply.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { parseNumber, removeLeadingZeros, removeTrailingZeros } from "./utils"; - -/** - * Multiplies two numbers represented as strings. - * @param left - * @param right - * @returns - */ -export function multiply(left: string, right: string): string { - let num1 = parseNumber(left); - let num2 = parseNumber(right); - - // Calculate total decimal places - let totalDecimalPlaces = - num1.fractionalPart.length + num2.fractionalPart.length; - - // Combine integer and fractional parts to convert to whole numbers - let wholeNum1 = num1.integerPart + num1.fractionalPart; - let wholeNum2 = num2.integerPart + num2.fractionalPart; - - // Remove leading zeros - wholeNum1 = removeLeadingZeros(wholeNum1); - wholeNum2 = removeLeadingZeros(wholeNum2); - - // If either number is 0, the result is 0 - if (wholeNum1 === "0" || wholeNum2 === "0") { - return "0"; - } - - // Initialize array to store the result - let result = Array(wholeNum1.length + wholeNum2.length).fill(0); - - // Perform multiplication (as if calculating by hand) - for (let i = wholeNum1.length - 1; i >= 0; i--) { - for (let j = wholeNum2.length - 1; j >= 0; j--) { - let mul = parseInt(wholeNum1[i]) * parseInt(wholeNum2[j]); - let p1 = i + j; - let p2 = i + j + 1; - let sum = mul + result[p2]; - - result[p2] = sum % 10; - result[p1] += Math.floor(sum / 10); - } - } - - // Convert result array to string - let resultStr = result.join(""); - - // Remove leading zeros - resultStr = removeLeadingZeros(resultStr); - - // Adjust decimal point position - if (totalDecimalPlaces > 0) { - // Add leading '0' if result string is shorter than total decimal places - if (resultStr.length <= totalDecimalPlaces) { - resultStr = resultStr.padStart(totalDecimalPlaces + 1, "0"); - } - - let integerPart = resultStr.slice(0, -totalDecimalPlaces); - let fractionalPart = resultStr.slice(-totalDecimalPlaces); - - // Remove trailing zeros - fractionalPart = removeTrailingZeros(fractionalPart); - - if (fractionalPart !== "0") { - resultStr = integerPart + "." + fractionalPart; - } else { - resultStr = integerPart; - } - } - - // Determine the sign of the result - let resultSign = num1.sign * num2.sign; - - if (resultSign === -1 && resultStr !== "0") { - resultStr = "-" + resultStr; - } - - return resultStr; -} - -export default multiply; diff --git a/packages/biggest/src/power.ts b/packages/biggest/src/power.ts deleted file mode 100644 index bee4012..0000000 --- a/packages/biggest/src/power.ts +++ /dev/null @@ -1,179 +0,0 @@ -import multiply from "./multiply"; -import divide from "./divide"; -import compare, { isEqual } from "./compare"; -import { parseStringNumber, isInteger, isZero } from "./utils"; -import sqrt from "./sqrt"; - -/** - * Raises a number to an integer power (simple repeated multiplication) - * @param base Base number as string - * @param exponent Integer exponent as string - * @returns Result as string - */ -function powerInteger(base: string, exponent: string): string { - if (isZero(exponent)) { - return "1"; - } - - if (isZero(base)) { - return "0"; - } - - if (isEqual(exponent, "1")) { - return base; - } - - const expParsed = parseStringNumber(exponent); - let isNegativeExp = expParsed.sign === -1; - let absExp = expParsed.integerPart; - - // Simple repeated multiplication for now (can optimize later) - let result = "1"; - let counter = "0"; - - while (compare(counter, absExp) < 0) { - result = multiply(result, base); - counter = add(counter, "1"); - } - - // If exponent was negative, return 1/result - if (isNegativeExp) { - return divide("1", result, 20); - } - - return result; -} - -/** - * Divides a number by 2 (integer division) - * @param num Number as string - * @returns Result as string - */ -function divideByTwo(num: string): string { - if (isZero(num)) return "0"; - if (isEqual(num, "1")) return "0"; - - // Use existing divide function - return divide(num, "2", 0); -} - -/** - * Raises a number to a power - * @param base Base number as string - * @param exponent Exponent as string - * @returns Result as string - */ -export function pow(base: string, exponent: string): string { - if (!isInteger(exponent)) { - throw new Error("Non-integer exponents are not supported yet"); - } - - if (isZero(base) && compare(exponent, "0") < 0) { - throw new Error("Cannot raise zero to a negative power"); - } - - return powerInteger(base, exponent); -} - -/** - * Calculates the nth root of a number using Newton's method - * @param radicand The number to find the root of - * @param n The root degree (must be positive integer) - * @param precision Number of decimal places (default 20) - * @returns Result as string - */ -export function nthRoot(radicand: string, n: string, precision: number = 20): string { - if (!isInteger(n)) { - throw new Error("Root degree must be an integer"); - } - - if (compare(n, "0") <= 0) { - throw new Error("Root degree must be positive"); - } - - if (isZero(radicand)) { - return "0"; - } - - if (isEqual(n, "1")) { - return radicand; - } - - const radicandParsed = parseStringNumber(radicand); - - if (isEqual(n, "2")) { - // For even root of negative number, handle before calling sqrt - if (radicandParsed.sign === -1) { - throw new Error("Cannot take even root of negative number"); - } - // Use existing sqrt function with precision parameter - return sqrt(radicand, precision); - } - - // For negative radicand and even root, throw error - if (radicandParsed.sign === -1) { - const nParsed = parseStringNumber(n); - const nLastDigit = nParsed.integerPart[nParsed.integerPart.length - 1]; - const nLastDigitValue = nLastDigit.charCodeAt(0) - "0".charCodeAt(0); - - if (nLastDigitValue % 2 === 0) { - throw new Error("Cannot take even root of negative number"); - } - } - - const absRadicand = radicandParsed.sign === -1 ? radicandParsed.integerPart + (radicandParsed.fractionalPart ? "." + radicandParsed.fractionalPart : "") : radicand; - - // Newton's method: x_{n+1} = (1/n) * ((n-1)*x_n + radicand/x_n^(n-1)) - let x = absRadicand; // Initial guess - - // Better initial guess - if (compare(absRadicand, "1") > 0) { - x = divide(absRadicand, n, precision + 5); - } else { - x = absRadicand; - } - - const tolerance = "0." + "0".repeat(precision) + "1"; - const maxIterations = 100; - - for (let i = 0; i < maxIterations; i++) { - // x_n^(n-1) - const xPowerNMinus1 = powerInteger(x, subtract(n, "1")); - - // radicand / x_n^(n-1) - const quotient = divide(absRadicand, xPowerNMinus1, precision + 5); - - // (n-1) * x_n - const nMinus1TimesX = multiply(subtract(n, "1"), x); - - // (n-1) * x_n + radicand / x_n^(n-1) - const sum = add(nMinus1TimesX, quotient); - - // x_{n+1} = sum / n - const newX = divide(sum, n, precision + 5); - - // Check convergence - const diff = abs(subtract(newX, x)); - if (compare(diff, tolerance) < 0) { - x = newX; - break; - } - - x = newX; - } - - // Round to specified precision - const result = divide(x, "1", precision); - - // Apply original sign for odd roots - if (radicandParsed.sign === -1) { - return "-" + result; - } - - return result; -} - -// Import helper functions directly -import add from "./add"; -import subtract from "./subtract"; -import abs from "./abs"; \ No newline at end of file diff --git a/packages/biggest/src/rounding.ts b/packages/biggest/src/rounding.ts deleted file mode 100644 index 5fecaab..0000000 --- a/packages/biggest/src/rounding.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { add } from "./add.js"; -import compare from "./compare.js"; -import { parseStringNumber, addOne, subtractOne } from "./utils"; - - -/** - * Rounds down to the nearest integer (towards negative infinity) - * @param num Number as string - * @returns Floor value as string - */ -export function floor(num: string): string { - const parsed = parseStringNumber(num); - - // If no fractional part, return the number as is - if (!parsed.fractionalPart || parsed.fractionalPart === "") { - return parsed.sign === -1 && parsed.integerPart !== "0" ? "-" + parsed.integerPart : parsed.integerPart; - } - - // If positive, just return integer part - if (parsed.sign === 1) { - return parsed.integerPart; - } - - // If negative, subtract 1 from integer part - const decremented = addOne(parsed.integerPart); - return "-" + decremented; -} - -/** - * Rounds up to the nearest integer (towards positive infinity) - * @param num Number as string - * @returns Ceiling value as string - */ -export function ceil(num: string): string { - const parsed = parseStringNumber(num); - - // If no fractional part, return the number as is - if (!parsed.fractionalPart || parsed.fractionalPart === "") { - return parsed.sign === -1 && parsed.integerPart !== "0" ? "-" + parsed.integerPart : parsed.integerPart; - } - - // If negative, just return integer part (with sign) - if (parsed.sign === -1) { - return "-" + parsed.integerPart; - } - - // If positive, add 1 to integer part - const incremented = addOne(parsed.integerPart); - return incremented; -} - -/** - * Removes the fractional part (rounds towards zero) - * @param num Number as string - * @returns Truncated value as string - */ -export function truncate(num: string): string { - const parsed = parseStringNumber(num); - - // Return just the integer part with appropriate sign - if (parsed.sign === -1 && parsed.integerPart !== "0") { - return "-" + parsed.integerPart; - } - - return parsed.integerPart; -} - -/** - * Rounds to the nearest integer using "round half up" strategy - * @param num Number as string - * @returns Rounded value as string - */ -export function round(num: string): string { - const parsed = parseStringNumber(num); - - // If no fractional part, return the number as is - if (!parsed.fractionalPart || parsed.fractionalPart === "") { - return parsed.sign === -1 && parsed.integerPart !== "0" ? "-" + parsed.integerPart : parsed.integerPart; - } - - // Check first digit of fractional part for rounding decision - const firstFracDigit = parsed.fractionalPart[0]; - let firstFracValue = 0; - - if (firstFracDigit >= "0" && firstFracDigit <= "9") { - firstFracValue = firstFracDigit.charCodeAt(0) - "0".charCodeAt(0); - } - - // If first fractional digit is < 5, truncate - if (firstFracValue < 5) { - return truncate(num); - } - - // If first fractional digit is >= 5, round up - if (parsed.sign === 1) { - // Positive number: add 1 to integer part - const incremented = addOne(parsed.integerPart); - return incremented; - } else { - // Negative number: subtract 1 from absolute value (making it more negative) - const incremented = addOne(parsed.integerPart); - return "-" + incremented; - } -} - -/** - * Rounds to specified number of decimal places - * @param num Number as string - * @param precision Number of decimal places - * @returns Rounded value as string - */ -export function roundToPrecision(num: string, precision: number): string { - if (precision < 0) { - throw new Error("Precision must be non-negative"); - } - - const parsed = parseStringNumber(num); - - // If no fractional part and precision > 0, add zeros - if (!parsed.fractionalPart || parsed.fractionalPart === "") { - if (precision === 0) { - return parsed.sign === -1 && parsed.integerPart !== "0" ? "-" + parsed.integerPart : parsed.integerPart; - } - - const zeros = "0".repeat(precision); - const result = parsed.integerPart + "." + zeros; - return parsed.sign === -1 && parsed.integerPart !== "0" ? "-" + result : result; - } - - // If precision is 0, use regular round function - if (precision === 0) { - return round(num); - } - - // If fractional part is shorter than precision, pad with zeros - if (parsed.fractionalPart.length <= precision) { - const paddedFrac = parsed.fractionalPart.padEnd(precision, "0"); - const result = parsed.integerPart + "." + paddedFrac; - return parsed.sign === -1 && parsed.integerPart !== "0" ? "-" + result : result; - } - - // Get the digit at precision position for rounding decision - const roundingDigit = parsed.fractionalPart[precision]; - let roundingValue = 0; - - if (roundingDigit >= "0" && roundingDigit <= "9") { - roundingValue = roundingDigit.charCodeAt(0) - "0".charCodeAt(0); - } - - // Take the required precision digits - let resultFrac = parsed.fractionalPart.substring(0, precision); - let resultInt = parsed.integerPart; - - // Round if needed - if (roundingValue >= 5) { - // Create a number from integer + fractional parts for rounding - const combinedNumber = resultInt + resultFrac; - const incrementedNumber = addOne(combinedNumber); - - // Split back into integer and fractional parts - if (incrementedNumber.length > combinedNumber.length) { - // Carry occurred, integer part grew - resultInt = incrementedNumber.substring(0, incrementedNumber.length - precision); - resultFrac = incrementedNumber.substring(incrementedNumber.length - precision); - } else { - resultInt = incrementedNumber.substring(0, incrementedNumber.length - precision); - resultFrac = incrementedNumber.substring(incrementedNumber.length - precision); - } - } - - // Remove trailing zeros from fractional part - resultFrac = resultFrac.replace(/0+$/, ""); - - // Construct result - let result = resultInt; - if (resultFrac !== "") { - result += "." + resultFrac; - } - - return parsed.sign === -1 && result !== "0" ? "-" + result : result; -} \ No newline at end of file diff --git a/packages/biggest/src/sqrt.ts b/packages/biggest/src/sqrt.ts deleted file mode 100644 index 9cd3044..0000000 --- a/packages/biggest/src/sqrt.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { divide } from "./divide"; -import add from "./add"; -import multiply from "./multiply"; - -/** - * Function to compute square root using Newton's method - * @param num - number as string - * @param precision - precision for the result (default 20) - * @returns square root of the number - */ -export default function sqrt(num: string, precision: number = 20): string { - if (typeof num !== "string") { - throw new Error("Input must be a string"); - } - - // Remove leading/trailing whitespace - num = num.trim(); - - // Check for negative numbers - if (num.startsWith("-")) { - throw new Error("Cannot compute square root of negative number"); - } - - // Handle zero - if (num === "0" || num === "0.0" || num === "+0") { - return "0"; - } - - // Handle one - if (num === "1" || num === "1.0" || num === "+1") { - return "1"; - } - - // Newton's method: x_{n+1} = (x_n + num/x_n) / 2 - let x = num; // Initial guess - let prevX = "0"; - - // Iterate until convergence - for (let i = 0; i < precision * 2; i++) { - prevX = x; - // x = (x + num/x) / 2 - const quotient = divide(num, x, precision + 10); - const sum = add(x, quotient); - x = divide(sum, "2", precision + 10); - - // Check for convergence (simplified) - if (x === prevX) { - break; - } - } - - // Round to desired precision - const dotIndex = x.indexOf("."); - if (dotIndex !== -1 && x.length > dotIndex + precision + 1) { - x = x.substring(0, dotIndex + precision + 1); - } - - return x; -} \ No newline at end of file diff --git a/packages/biggest/src/subtract.ts b/packages/biggest/src/subtract.ts deleted file mode 100644 index 22341c0..0000000 --- a/packages/biggest/src/subtract.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - addAbsolute, - compareAbsolute, - parseNumber, - subtractAbsolute, -} from "./utils"; - -export function subtract(left: string, right: string): string { - const num1 = parseNumber(left); - const num2 = parseNumber(right); - - let resultSign = 1; - let result = ""; - - // If the signs are different, add them - if (num1.sign !== num2.sign) { - num2.sign = num1.sign; - result = addAbsolute(num1, num2); - resultSign = num1.sign; - } else { - // If the signs are the same, subtract them - let cmp = compareAbsolute(num1, num2); - if (cmp === 0) { - return "0"; - } else if (cmp > 0) { - result = subtractAbsolute(num1, num2); - resultSign = num1.sign; - } else { - result = subtractAbsolute(num2, num1); - resultSign = -num1.sign; - } - } - - if (result === "0") { - return "0"; - } else { - return (resultSign === -1 ? "-" : "") + result; - } -} - -export default subtract; diff --git a/packages/biggest/src/utils.ts b/packages/biggest/src/utils.ts deleted file mode 100644 index 6c74637..0000000 --- a/packages/biggest/src/utils.ts +++ /dev/null @@ -1,466 +0,0 @@ -/** - * Function to parse a number into sign, integer part, and fractional part - * @param num - * @returns - */ -export function parseNumber(num: string) { - if (typeof num !== "number") num = num.toString(); - - let sign = 1; - if (num.startsWith("-")) { - sign = -1; - num = num.substring(1); - } - let [integerPart, fractionalPart] = num.split("."); - if (!fractionalPart) fractionalPart = ""; - return { - sign, - integerPart, - fractionalPart, - }; -} - -/** - * Enhanced number parsing that handles edge cases and normalizes zero - * @param num Number as string - * @returns Object with sign, integer part, and fractional part - */ -export function parseStringNumber(num: string) { - if (typeof num !== "string") { - num = String(num); - } - - let sign = 1; - if (num.startsWith("-")) { - sign = -1; - num = num.substring(1); - } else if (num.startsWith("+")) { - num = num.substring(1); - } - - if (!num || num === "") { - return { sign: 1, integerPart: "0", fractionalPart: "" }; - } - - let [integerPart, fractionalPart] = num.split("."); - if (!integerPart) integerPart = "0"; - if (!fractionalPart) fractionalPart = ""; - - integerPart = integerPart.replace(/^0+/, "") || "0"; - - if (integerPart === "0" && (!fractionalPart || fractionalPart.replace(/0/g, "") === "")) { - sign = 1; - } - - return { - sign, - integerPart, - fractionalPart, - }; -} - -/** - * Checks if a number is an integer - * @param num Number as string - * @returns true if integer, false otherwise - */ -export function isInteger(num: string): boolean { - const parsed = parseStringNumber(num); - return !parsed.fractionalPart || parsed.fractionalPart === ""; -} - -/** - * Checks if a number is zero - * @param num Number as string - * @returns true if zero, false otherwise - */ -export function isZero(num: string): boolean { - const parsed = parseStringNumber(num); - return parsed.integerPart === "0" && (!parsed.fractionalPart || parsed.fractionalPart.replace(/0/g, "") === ""); -} - -/** - * Adds 1 to a positive integer string - * @param num Positive integer as string - * @returns Result as string - */ -export function addOne(num: string): string { - let result = ""; - let carry = 1; - - for (let i = num.length - 1; i >= 0; i--) { - let digit = num[i]; - let digitValue = 0; - - if (digit >= "0" && digit <= "9") { - digitValue = digit.charCodeAt(0) - "0".charCodeAt(0); - } - - let sum = digitValue + carry; - result = String(sum % 10) + result; - carry = sum >= 10 ? 1 : 0; - } - - if (carry > 0) { - result = "1" + result; - } - - return result; -} - -/** - * Subtracts 1 from a positive integer string (assuming num > 0) - * @param num Positive integer as string - * @returns Result as string - */ -export function subtractOne(num: string): string { - if (num === "0") return "0"; - - let result = ""; - let borrow = 1; - - for (let i = num.length - 1; i >= 0; i--) { - let digit = num[i]; - let digitValue = 0; - - if (digit >= "0" && digit <= "9") { - digitValue = digit.charCodeAt(0) - "0".charCodeAt(0); - } - - let diff = digitValue - borrow; - if (diff < 0) { - diff += 10; - borrow = 1; - } else { - borrow = 0; - } - - result = String(diff) + result; - } - - result = result.replace(/^0+/, "") || "0"; - - return result; -} - -/** - * Function to compare absolute values of two parsed numbers - * @param a - * @param b - * @returns - */ -export function compareAbsolute(a: any, b: any): number { - // Pad integer parts to equal length - const maxIntLen = Math.max(a.integerPart.length, b.integerPart.length); - const intA = a.integerPart.padStart(maxIntLen, "0"); - const intB = b.integerPart.padStart(maxIntLen, "0"); - - // Compare integer parts - if (intA > intB) return 1; - if (intA < intB) return -1; - - // If integer parts are equal, compare fractional parts - const maxFracLen = Math.max(a.fractionalPart.length, b.fractionalPart.length); - const fracA = a.fractionalPart.padEnd(maxFracLen, "0"); - const fracB = b.fractionalPart.padEnd(maxFracLen, "0"); - - if (fracA > fracB) return 1; - if (fracA < fracB) return -1; - - // Numbers are equal - return 0; -} - -/** - * Function to add two numbers based on absolute values - * @param num1 - * @param num2 - * @returns - */ -export function addAbsolute(num1: any, num2: any): string { - const maxFractionLength = Math.max( - num1.fractionalPart.length, - num2.fractionalPart.length - ); - const frac1 = num1.fractionalPart.padEnd(maxFractionLength, "0"); - const frac2 = num2.fractionalPart.padEnd(maxFractionLength, "0"); - - let fractionalSum = ""; - let carry = 0; - for (let i = maxFractionLength - 1; i >= 0; i--) { - let sum = parseInt(frac1[i] || "0") + parseInt(frac2[i] || "0") + carry; - fractionalSum = (sum % 10) + fractionalSum; - carry = Math.floor(sum / 10); - } - - const int1 = num1.integerPart; - const int2 = num2.integerPart; - - let integerSum = ""; - let i = int1.length - 1; - let j = int2.length - 1; - while (i >= 0 || j >= 0 || carry > 0) { - const digit1 = i >= 0 ? parseInt(int1[i]) : 0; - const digit2 = j >= 0 ? parseInt(int2[j]) : 0; - const sum = digit1 + digit2 + carry; - integerSum = (sum % 10) + integerSum; - carry = Math.floor(sum / 10); - i--; - j--; - } - - let result = integerSum; - fractionalSum = fractionalSum.replace(/0+$/, ""); - if (fractionalSum) { - result += "." + fractionalSum; - } - - return result; -} - -/** - * Function to subtract two numbers based on absolute values (assuming num1 >= num2) - * @param num1 - * @param num2 - * @returns - */ -export function subtractAbsolute(num1: any, num2: any): string { - let maxFractionLength = Math.max( - num1.fractionalPart.length, - num2.fractionalPart.length - ); - const frac1 = num1.fractionalPart.padEnd(maxFractionLength, "0"); - const frac2 = num2.fractionalPart.padEnd(maxFractionLength, "0"); - - let fractionalDiff = ""; - let borrow = 0; - for (let i = maxFractionLength - 1; i >= 0; i--) { - let digit1 = parseInt(frac1[i]) - borrow; - let digit2 = parseInt(frac2[i]); - if (digit1 < digit2) { - digit1 += 10; - borrow = 1; - } else { - borrow = 0; - } - let diff = digit1 - digit2; - fractionalDiff = diff + fractionalDiff; - } - - let int1 = num1.integerPart; - let int2 = num2.integerPart.padStart(int1.length, "0"); - - let integerDiff = ""; - for (let i = int1.length - 1; i >= 0; i--) { - let digit1 = parseInt(int1[i]) - borrow; - let digit2 = parseInt(int2[i]); - if (digit1 < digit2) { - digit1 += 10; - borrow = 1; - } else { - borrow = 0; - } - let diff = digit1 - digit2; - integerDiff = diff + integerDiff; - } - - integerDiff = integerDiff.replace(/^0+/, "") || "0"; - fractionalDiff = fractionalDiff.replace(/0+$/, ""); - - let result = integerDiff; - if (fractionalDiff) { - result += "." + fractionalDiff; - } - - return result; -} - -/** - * Function to remove leading zeros - * @param str - * @returns - */ -export function removeLeadingZeros(str: string): string { - return str.replace(/^0+/, "") || "0"; -} - -/** - * Function to remove trailing zeros - * @param str - * @returns - */ -export function removeTrailingZeros(str: string): string { - return str.replace(/0+$/, "") || "0"; -} - -/** - * Function to subtract two numbers (num1 - num2, assuming num1 >= num2) - * @param num1 - * @param num2 - * @returns - */ -export function subtractStrings(num1: string, num2: string): string { - let result = ""; - let borrow = 0; - num1 = num1.split("").reverse().join(""); - num2 = num2.split("").reverse().join(""); - - for (let i = 0; i < num1.length; i++) { - let digit1 = parseInt(num1[i]) - borrow; - let digit2 = parseInt(num2[i] || "0"); - if (digit1 < digit2) { - digit1 += 10; - borrow = 1; - } else { - borrow = 0; - } - result = digit1 - digit2 + result; - } - - return removeLeadingZeros(result); -} - -/** - * Function to multiply a number by a single digit - * @param num - * @param digit - * @returns - */ -export function multiplyDigit(num: string, digit: string): string { - let result = ""; - let carry = 0; - let digitNum = parseInt(digit); - let numArray = num.split("").reverse(); - - for (let i = 0; i < numArray.length; i++) { - let product = parseInt(numArray[i]) * digitNum + carry; - result = (product % 10) + result; - carry = Math.floor(product / 10); - } - - if (carry > 0) { - result = carry + result; - } - - return result; -} - -/** - * Function to compare two numbers - * @param num1 - * @param num2 - * @returns 1 if num1 > num2, -1 if num1 < num2, 0 if num1 == num2 - */ -export function compare(num1: string, num2: string): number { - num1 = removeLeadingZeros(num1); - num2 = removeLeadingZeros(num2); - if (num1.length > num2.length) return 1; - if (num1.length < num2.length) return -1; - for (let i = 0; i < num1.length; i++) { - if (num1[i] > num2[i]) return 1; - if (num1[i] < num2[i]) return -1; - } - return 0; -} - -/** - * Function to add two numbers - * @param num1 - * @param num2 - * @returns sum of num1 and num2 - */ -export function addStrings(num1: string, num2: string): string { - let result = ""; - let carry = 0; - let num1Arr = num1.split("").reverse(); - let num2Arr = num2.split("").reverse(); - - let maxLength = Math.max(num1Arr.length, num2Arr.length); - for (let i = 0; i < maxLength; i++) { - let digit1 = parseInt(num1Arr[i] || "0"); - let digit2 = parseInt(num2Arr[i] || "0"); - let sum = digit1 + digit2 + carry; - result = (sum % 10) + result; - carry = Math.floor(sum / 10); - } - if (carry > 0) { - result = carry + result; - } - return result; -} - -/** - * Function to remove leading zeros from the result - * @param str - * @returns - */ -export function removeLeadingZerosFromResult(str: string): string { - if (str[0] === "-") { - return "-" + removeLeadingZerosFromResult(str.slice(1)); - } - let [integerPart, fractionalPart] = str.split("."); - integerPart = integerPart.replace(/^0+/, "") || "0"; - if (fractionalPart !== undefined) { - return integerPart + "." + fractionalPart; - } else { - return integerPart; - } -} - -/** - * Rounds the result to the specified precision - * @param result - * @param precision - * @returns - */ -export function roundResult(result: string, precision: number): string { - let [integerPart, fractionalPart] = result.split("."); - if (!fractionalPart) { - return result; - } - - // Check if there are additional digits - if (fractionalPart.length <= precision) { - fractionalPart = fractionalPart.padEnd(precision + 1, "0"); - } - - // Get the digit to be rounded - let roundingDigit = parseInt(fractionalPart[precision]); - - let fractionToRound = fractionalPart.slice(0, precision); - - if (roundingDigit >= 5) { - // Combine integer and fractional parts to create a large number - let combinedNumber = integerPart + fractionToRound; - - // Add 1 - let incrementedNumber = addStrings(combinedNumber, "1"); - - // Separate into new integer and fractional parts - let combinedLength = integerPart.length + fractionToRound.length; - let incrementedLength = incrementedNumber.length; - let lengthDifference = incrementedLength - combinedLength; - let newIntegerPartLength = integerPart.length + lengthDifference; - - let newIntegerPart = incrementedNumber.slice(0, newIntegerPartLength); - let newFractionalPart = incrementedNumber.slice(newIntegerPartLength); - - result = newIntegerPart; - if (newFractionalPart) { - result += "." + newFractionalPart; - } - } else { - // No rounding needed - result = integerPart; - if (fractionToRound) { - result += "." + fractionToRound; - } - } - - // Remove unnecessary trailing zeros in the fractional part - result = result.replace(/(\.\d*?[1-9])0+$/g, "$1"); - result = result.replace(/\.0+$/, ""); - result = result.replace(/\.$/, ""); - - return result; -} diff --git a/packages/biggest/test/abs.test.ts b/packages/biggest/test/abs.test.ts deleted file mode 100644 index ae2b7a5..0000000 --- a/packages/biggest/test/abs.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import abs from "../src/abs"; - -describe("abs function", () => { - test("should return absolute value of positive number", () => { - expect(abs("123.456")).toBe("123.456"); - }); - - test("should return absolute value of negative number", () => { - expect(abs("-123.456")).toBe("123.456"); - }); - - test("should handle positive sign", () => { - expect(abs("+123.456")).toBe("123.456"); - }); - - test("should handle zero", () => { - expect(abs("0")).toBe("0"); - expect(abs("-0")).toBe("0"); - expect(abs("+0")).toBe("0"); - }); - - test("should handle very large numbers", () => { - expect(abs("-999999999999999999999999.123456789")).toBe("999999999999999999999999.123456789"); - }); - - test("should handle whitespace", () => { - expect(abs(" -123.456 ")).toBe("123.456"); - }); - - test("should throw error for non-string input", () => { - expect(() => abs(123 as any)).toThrow("Input must be a string"); - }); -}); \ No newline at end of file diff --git a/packages/biggest/test/add.test.ts b/packages/biggest/test/add.test.ts deleted file mode 100644 index efbe1b5..0000000 --- a/packages/biggest/test/add.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import add from "../src/add"; - -describe("add function test", () => { - test("Adding positive numbers", () => { - expect(add("123", "456")).toBe("579"); - expect(add("999999", "1")).toBe("1000000"); - expect(add("0.1", "0.2")).toBe("0.3"); - }); - - test("Adding negative numbers", () => { - expect(add("-5", "-3")).toBe("-8"); - expect(add("-10", "5")).toBe("-5"); - expect(add("10", "-5")).toBe("5"); - }); - - test("Adding zero", () => { - expect(add("0", "0")).toBe("0"); - expect(add("0", "10")).toBe("10"); - expect(add("-5", "0")).toBe("-5"); - }); - - test("Adding decimal numbers", () => { - expect(add("3.14", "2.86")).toBe("6"); - expect(add("-1.5", "0.5")).toBe("-1"); - expect(add("0.1", "0.2")).toBe("0.3"); - expect(add("0.1", "0.7")).toBe("0.8"); - }); - - test("Adding large numbers", () => { - expect(add("9999999999999999", "1")).toBe("10000000000000000"); - expect(add("1234567890123456789", "9876543210987654321")).toBe( - "11111111101111111110" - ); - }); - - test("Adding numbers with different digits", () => { - expect(add("1000", "0.1")).toBe("1000.1"); - expect(add("0.001", "999.999")).toBe("1000"); - }); -}); diff --git a/packages/biggest/test/compare.test.ts b/packages/biggest/test/compare.test.ts deleted file mode 100644 index c61b235..0000000 --- a/packages/biggest/test/compare.test.ts +++ /dev/null @@ -1,96 +0,0 @@ -import compare, { isEqual, isGreaterThan, isLessThan, min, max } from "../src/compare"; - -describe("compare", () => { - test("should compare positive integers correctly", () => { - expect(compare("123", "456")).toBe(-1); - expect(compare("456", "123")).toBe(1); - expect(compare("123", "123")).toBe(0); - }); - - test("should compare negative integers correctly", () => { - expect(compare("-123", "-456")).toBe(1); - expect(compare("-456", "-123")).toBe(-1); - expect(compare("-123", "-123")).toBe(0); - }); - - test("should compare positive and negative numbers correctly", () => { - expect(compare("123", "-456")).toBe(1); - expect(compare("-123", "456")).toBe(-1); - expect(compare("0", "-0")).toBe(0); - }); - - test("should compare decimal numbers correctly", () => { - expect(compare("123.456", "123.789")).toBe(-1); - expect(compare("123.789", "123.456")).toBe(1); - expect(compare("123.456", "123.456")).toBe(0); - }); - - test("should compare very large numbers correctly", () => { - expect(compare("999999999999999999999999", "1000000000000000000000000")).toBe(-1); - expect(compare("1000000000000000000000000", "999999999999999999999999")).toBe(1); - }); - - test("should compare very small decimal numbers correctly", () => { - expect(compare("0.000000000000000001", "0.000000000000000002")).toBe(-1); - expect(compare("0.000000000000000002", "0.000000000000000001")).toBe(1); - }); - - test("should handle zero correctly", () => { - expect(compare("0", "0")).toBe(0); - expect(compare("0", "-0")).toBe(0); - expect(compare("0.0", "0")).toBe(0); - expect(compare("0", "1")).toBe(-1); - expect(compare("1", "0")).toBe(1); - }); -}); - -describe("isEqual", () => { - test("should check equality correctly", () => { - expect(isEqual("123", "123")).toBe(true); - expect(isEqual("123", "456")).toBe(false); - expect(isEqual("123.456", "123.456")).toBe(true); - expect(isEqual("0", "-0")).toBe(true); - }); -}); - -describe("isGreaterThan", () => { - test("should check greater than correctly", () => { - expect(isGreaterThan("456", "123")).toBe(true); - expect(isGreaterThan("123", "456")).toBe(false); - expect(isGreaterThan("123", "123")).toBe(false); - }); -}); - -describe("isLessThan", () => { - test("should check less than correctly", () => { - expect(isLessThan("123", "456")).toBe(true); - expect(isLessThan("456", "123")).toBe(false); - expect(isLessThan("123", "123")).toBe(false); - }); -}); - -describe("min", () => { - test("should find minimum of two numbers", () => { - expect(min("123", "456")).toBe("123"); - expect(min("456", "123")).toBe("123"); - expect(min("-123", "-456")).toBe("-456"); - }); - - test("should find minimum of multiple numbers", () => { - expect(min("123", "456", "789", "12")).toBe("12"); - expect(min("-10", "-20", "-5", "-30")).toBe("-30"); - }); -}); - -describe("max", () => { - test("should find maximum of two numbers", () => { - expect(max("123", "456")).toBe("456"); - expect(max("456", "123")).toBe("456"); - expect(max("-123", "-456")).toBe("-123"); - }); - - test("should find maximum of multiple numbers", () => { - expect(max("123", "456", "789", "12")).toBe("789"); - expect(max("-10", "-20", "-5", "-30")).toBe("-5"); - }); -}); \ No newline at end of file diff --git a/packages/biggest/test/divide.test.ts b/packages/biggest/test/divide.test.ts deleted file mode 100644 index 5a8f416..0000000 --- a/packages/biggest/test/divide.test.ts +++ /dev/null @@ -1,93 +0,0 @@ -import divide from "../src/divide"; - -const TIME_OUT = 10; - -describe("divide function test", () => { - test( - "Dividing positive numbers", - async () => { - expect(divide("10", "2")).toBe("5"); - expect(divide("100", "25")).toBe("4"); - expect(divide("7", "2")).toBe("3.5"); - }, - TIME_OUT - ); - - test( - "Dividing negative numbers", - async () => { - expect(divide("-10", "2")).toBe("-5"); - expect(divide("10", "-2")).toBe("-5"); - expect(divide("-10", "-2")).toBe("5"); - }, - TIME_OUT - ); - - test( - "Dividing decimals", - async () => { - expect(divide("3.14", "2")).toBe("1.57"); - expect(divide("1", "3")).toBe("0.33333333333333333333"); - expect(divide("0.1", "0.3")).toBe("0.33333333333333333333"); - }, - TIME_OUT - ); - - test( - "Dividing by zero", - async () => { - expect(() => divide("10", "0")).toThrow(); - expect(() => divide("-5", "0")).toThrow(); - expect(() => divide("0", "0")).toThrow(); - }, - TIME_OUT - ); - - test( - "Dividing zero", - async () => { - expect(divide("0", "5")).toBe("0"); - expect(divide("0", "-3")).toBe("0"); - expect(divide("0", "0.1")).toBe("0"); - }, - TIME_OUT - ); - - test( - "Dividing large numbers", - async () => { - expect(divide("1000000000000000", "1000000")).toBe("1000000000"); - expect(divide("9999999999", "3")).toBe("3333333333"); - }, - TIME_OUT - ); - - test( - "Dividing small numbers", - async () => { - expect(divide("0.0000001", "0.0001")).toBe("0.001"); - expect(divide("0.000000001", "0.000000003")).toBe( - "0.33333333333333333333" - ); - }, - TIME_OUT - ); - - test( - "Precision test", - async () => { - expect(divide("1", "3", 5)).toBe("0.33333"); - expect(divide("2", "3", 10)).toBe("0.6666666667"); - }, - TIME_OUT - ); - - test( - "Rounding test", - async () => { - expect(divide("10", "3", 2)).toBe("3.33"); - expect(divide("1", "6", 3)).toBe("0.167"); - }, - TIME_OUT - ); -}); diff --git a/packages/biggest/test/factorial.test.ts b/packages/biggest/test/factorial.test.ts deleted file mode 100644 index 8bfc0c2..0000000 --- a/packages/biggest/test/factorial.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { factorial, combination, permutation } from "../src/factorial"; - -describe("factorial", () => { - test("should calculate basic factorials", () => { - expect(factorial("0")).toBe("1"); - expect(factorial("1")).toBe("1"); - expect(factorial("2")).toBe("2"); - expect(factorial("3")).toBe("6"); - expect(factorial("4")).toBe("24"); - expect(factorial("5")).toBe("120"); - }); - - test("should calculate larger factorials", () => { - expect(factorial("6")).toBe("720"); - expect(factorial("7")).toBe("5040"); - expect(factorial("10")).toBe("3628800"); - }); - - test("should handle very large factorials", () => { - // 20! = 2432902008176640000 - expect(factorial("20")).toBe("2432902008176640000"); - }); - - test("should throw error for negative numbers", () => { - expect(() => factorial("-1")).toThrow("Factorial is not defined for negative numbers"); - expect(() => factorial("-5")).toThrow("Factorial is not defined for negative numbers"); - }); - - test("should throw error for non-integers", () => { - expect(() => factorial("5.5")).toThrow("Factorial is only defined for integers"); - expect(() => factorial("3.14")).toThrow("Factorial is only defined for integers"); - }); -}); - -describe("combination", () => { - test("should calculate basic combinations", () => { - expect(combination("5", "2")).toBe("10"); // C(5,2) = 10 - expect(combination("5", "3")).toBe("10"); // C(5,3) = 10 - expect(combination("4", "2")).toBe("6"); // C(4,2) = 6 - expect(combination("6", "3")).toBe("20"); // C(6,3) = 20 - }); - - test("should handle edge cases", () => { - expect(combination("5", "0")).toBe("1"); // C(n,0) = 1 - expect(combination("5", "5")).toBe("1"); // C(n,n) = 1 - expect(combination("5", "6")).toBe("0"); // C(n,r) = 0 when r > n - }); - - test("should handle large combinations", () => { - expect(combination("10", "3")).toBe("120"); // C(10,3) = 120 - expect(combination("15", "5")).toBe("3003"); // C(15,5) = 3003 - }); - - test("should use symmetry optimization", () => { - // C(10,8) should equal C(10,2) = 45 - expect(combination("10", "8")).toBe("45"); - expect(combination("10", "2")).toBe("45"); - }); - - test("should throw error for negative numbers", () => { - expect(() => combination("-5", "2")).toThrow("Combination is not defined for negative numbers"); - expect(() => combination("5", "-2")).toThrow("Combination is not defined for negative numbers"); - }); - - test("should throw error for non-integers", () => { - expect(() => combination("5.5", "2")).toThrow("Combination requires integer arguments"); - expect(() => combination("5", "2.5")).toThrow("Combination requires integer arguments"); - }); -}); - -describe("permutation", () => { - test("should calculate basic permutations", () => { - expect(permutation("5", "2")).toBe("20"); // P(5,2) = 20 - expect(permutation("5", "3")).toBe("60"); // P(5,3) = 60 - expect(permutation("4", "2")).toBe("12"); // P(4,2) = 12 - expect(permutation("6", "3")).toBe("120"); // P(6,3) = 120 - }); - - test("should handle edge cases", () => { - expect(permutation("5", "0")).toBe("1"); // P(n,0) = 1 - expect(permutation("5", "5")).toBe("120"); // P(5,5) = 5! = 120 - expect(permutation("5", "6")).toBe("0"); // P(n,r) = 0 when r > n - }); - - test("should handle large permutations", () => { - expect(permutation("10", "3")).toBe("720"); // P(10,3) = 720 - expect(permutation("8", "4")).toBe("1680"); // P(8,4) = 1680 - }); - - test("should throw error for negative numbers", () => { - expect(() => permutation("-5", "2")).toThrow("Permutation is not defined for negative numbers"); - expect(() => permutation("5", "-2")).toThrow("Permutation is not defined for negative numbers"); - }); - - test("should throw error for non-integers", () => { - expect(() => permutation("5.5", "2")).toThrow("Permutation requires integer arguments"); - expect(() => permutation("5", "2.5")).toThrow("Permutation requires integer arguments"); - }); - - test("should relate to combinations correctly", () => { - // P(n,r) = C(n,r) ร— r! - // P(5,3) = C(5,3) ร— 3! = 10 ร— 6 = 60 - expect(permutation("5", "3")).toBe("60"); - expect(combination("5", "3")).toBe("10"); - }); -}); \ No newline at end of file diff --git a/packages/biggest/test/modular.test.ts b/packages/biggest/test/modular.test.ts deleted file mode 100644 index face2c1..0000000 --- a/packages/biggest/test/modular.test.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { mod, gcd, lcm, remainder } from "../src/modular"; - -describe("mod", () => { - test("should calculate basic modulo operations", () => { - expect(mod("10", "3")).toBe("1"); - expect(mod("17", "5")).toBe("2"); - expect(mod("20", "4")).toBe("0"); - }); - - test("should handle zero dividend", () => { - expect(mod("0", "5")).toBe("0"); - expect(mod("0", "-3")).toBe("0"); - }); - - test("should handle negative numbers correctly", () => { - // Mathematical modulo: result has same sign as divisor - expect(mod("-10", "3")).toBe("2"); // -10 + 4*3 = 2 - expect(mod("10", "-3")).toBe("-2"); // 10 - 4*3 = -2 (adjusted to match divisor sign) - expect(mod("-10", "-3")).toBe("-1"); // -10 + 3*(-3) = -1 - }); - - test("should handle large numbers", () => { - expect(mod("999999999999999999999", "7")).toBe("5"); - expect(mod("123456789123456789", "1000")).toBe("789"); - }); - - test("should throw error for zero divisor", () => { - expect(() => mod("10", "0")).toThrow("Division by zero in modulo operation"); - }); - - test("should throw error for non-integer arguments", () => { - expect(() => mod("10.5", "3")).toThrow("Modulo operation requires integer arguments"); - expect(() => mod("10", "3.5")).toThrow("Modulo operation requires integer arguments"); - }); -}); - -describe("gcd", () => { - test("should calculate basic GCD", () => { - expect(gcd("12", "18")).toBe("6"); - expect(gcd("48", "18")).toBe("6"); - expect(gcd("17", "13")).toBe("1"); // Coprime numbers - }); - - test("should handle zero arguments", () => { - expect(gcd("0", "5")).toBe("5"); - expect(gcd("10", "0")).toBe("10"); - expect(gcd("0", "0")).toBe("0"); - }); - - test("should handle negative numbers", () => { - expect(gcd("-12", "18")).toBe("6"); - expect(gcd("12", "-18")).toBe("6"); - expect(gcd("-12", "-18")).toBe("6"); - }); - - test("should handle identical numbers", () => { - expect(gcd("15", "15")).toBe("15"); - expect(gcd("-7", "-7")).toBe("7"); - }); - - test("should handle large numbers", () => { - expect(gcd("123456789", "987654321")).toBe("9"); - expect(gcd("999999999999", "111111111111")).toBe("111111111111"); - }); - - test("should throw error for non-integer arguments", () => { - expect(() => gcd("12.5", "18")).toThrow("GCD requires integer arguments"); - expect(() => gcd("12", "18.5")).toThrow("GCD requires integer arguments"); - }); -}); - -describe("lcm", () => { - test("should calculate basic LCM", () => { - expect(lcm("12", "18")).toBe("36"); - expect(lcm("4", "6")).toBe("12"); - expect(lcm("7", "3")).toBe("21"); // Coprime numbers - }); - - test("should handle zero arguments", () => { - expect(lcm("0", "5")).toBe("0"); - expect(lcm("10", "0")).toBe("0"); - }); - - test("should handle negative numbers", () => { - expect(lcm("-12", "18")).toBe("36"); - expect(lcm("12", "-18")).toBe("36"); - expect(lcm("-12", "-18")).toBe("36"); - }); - - test("should handle identical numbers", () => { - expect(lcm("15", "15")).toBe("15"); - expect(lcm("-7", "-7")).toBe("7"); - }); - - test("should handle large numbers", () => { - expect(lcm("123", "456")).toBe("18696"); - }); - - test("should throw error for non-integer arguments", () => { - expect(() => lcm("12.5", "18")).toThrow("LCM requires integer arguments"); - expect(() => lcm("12", "18.5")).toThrow("LCM requires integer arguments"); - }); -}); - -describe("remainder", () => { - test("should calculate basic remainder operations", () => { - expect(remainder("10", "3")).toBe("1"); - expect(remainder("17", "5")).toBe("2"); - expect(remainder("20", "4")).toBe("0"); - }); - - test("should handle zero dividend", () => { - expect(remainder("0", "5")).toBe("0"); - expect(remainder("0", "-3")).toBe("0"); - }); - - test("should handle negative numbers correctly", () => { - // Remainder: result has same sign as dividend - expect(remainder("-10", "3")).toBe("-1"); // -10 - (-3)*3 = -1 - expect(remainder("10", "-3")).toBe("1"); // 10 - (-3)*3 = 1 - expect(remainder("-10", "-3")).toBe("-1"); // -10 - 3*(-3) = -1 - }); - - test("should throw error for zero divisor", () => { - expect(() => remainder("10", "0")).toThrow("Division by zero in remainder operation"); - }); - - test("should throw error for non-integer arguments", () => { - expect(() => remainder("10.5", "3")).toThrow("Remainder operation requires integer arguments"); - expect(() => remainder("10", "3.5")).toThrow("Remainder operation requires integer arguments"); - }); - - test("should differ from modulo for negative numbers", () => { - // Show the difference between mod and remainder for negative numbers - expect(mod("-10", "3")).toBe("2"); // Mathematical modulo - expect(remainder("-10", "3")).toBe("-1"); // Programming remainder - - expect(mod("10", "-3")).toBe("-2"); // Mathematical modulo - expect(remainder("10", "-3")).toBe("1"); // Programming remainder - }); -}); \ No newline at end of file diff --git a/packages/biggest/test/multiply.test.ts b/packages/biggest/test/multiply.test.ts deleted file mode 100644 index f3e6613..0000000 --- a/packages/biggest/test/multiply.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -import multiply from "../src/multiply"; - -describe("multiply function test", () => { - test("Multiplying positive numbers", () => { - expect(multiply("2", "3")).toBe("6"); - expect(multiply("10", "5")).toBe("50"); - expect(multiply("123", "456")).toBe("56088"); - }); - - test("Multiplying negative numbers", () => { - expect(multiply("-2", "3")).toBe("-6"); - expect(multiply("2", "-3")).toBe("-6"); - expect(multiply("-2", "-3")).toBe("6"); - }); - - test("Multiplying with zero", () => { - expect(multiply("0", "5")).toBe("0"); - expect(multiply("10", "0")).toBe("0"); - expect(multiply("0", "0")).toBe("0"); - }); - - test("Multiplying decimal numbers", () => { - expect(multiply("0.5", "2")).toBe("1"); - expect(multiply("1.5", "2.5")).toBe("3.75"); - expect(multiply("0.1", "0.1")).toBe("0.01"); - }); - - test("Multiplying large numbers", () => { - expect(multiply("999999999", "999999999")).toBe("999999998000000001"); - expect(multiply("1234567890", "9876543210")).toBe("12193263111263526900"); - expect( - multiply( - "123456789012345678901234567890", - "987654321098765432109876543210" - ) - ).toBe("121932631137021795226185032733622923332237463801111263526900"); - }); - - test("Multiplying with one", () => { - expect(multiply("1", "5")).toBe("5"); - expect(multiply("10", "1")).toBe("10"); - expect(multiply("-1", "5")).toBe("-5"); - }); - - test("Multiplying numbers with many decimal places", () => { - expect(multiply("0.1234567890", "0.9876543210")).toBe( - "0.121932631112635269" - ); - expect(multiply("1.23456789", "9.87654321")).toBe("12.1932631112635269"); - }); - - test("Various combinations", () => { - expect(multiply("-0.5", "2.5")).toBe("-1.25"); - expect(multiply("100", "0.01")).toBe("1"); - expect(multiply("-0.1", "-10")).toBe("1"); - }); -}); diff --git a/packages/biggest/test/power.test.ts b/packages/biggest/test/power.test.ts deleted file mode 100644 index ed2b16d..0000000 --- a/packages/biggest/test/power.test.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { pow, nthRoot } from "../src/power"; - -describe("pow", () => { - test("should handle basic integer powers", () => { - expect(pow("2", "3")).toBe("8"); - expect(pow("3", "2")).toBe("9"); - expect(pow("10", "3")).toBe("1000"); - }); - - test("should handle zero exponent", () => { - expect(pow("5", "0")).toBe("1"); - expect(pow("999", "0")).toBe("1"); - expect(pow("-5", "0")).toBe("1"); - }); - - test("should handle exponent of one", () => { - expect(pow("5", "1")).toBe("5"); - expect(pow("-7", "1")).toBe("-7"); - expect(pow("123.456", "1")).toBe("123.456"); - }); - - test("should handle negative exponents", () => { - expect(pow("2", "-1")).toBe("0.5"); - expect(pow("10", "-2")).toBe("0.01"); - expect(pow("5", "-1")).toBe("0.2"); - }); - - test("should handle negative bases", () => { - expect(pow("-2", "3")).toBe("-8"); - expect(pow("-2", "4")).toBe("16"); - expect(pow("-3", "2")).toBe("9"); - }); - - test("should handle zero base", () => { - expect(pow("0", "5")).toBe("0"); - expect(pow("0", "100")).toBe("0"); - }); - - test("should throw error for zero base with negative exponent", () => { - expect(() => pow("0", "-1")).toThrow("Cannot raise zero to a negative power"); - }); - - test("should handle large numbers", () => { - expect(pow("2", "10")).toBe("1024"); - expect(pow("3", "5")).toBe("243"); - }); - - test("should handle decimal bases", () => { - expect(pow("1.5", "2")).toBe("2.25"); - expect(pow("0.5", "3")).toBe("0.125"); - }); - - test("should throw error for non-integer exponents", () => { - expect(() => pow("2", "2.5")).toThrow("Non-integer exponents are not supported yet"); - expect(() => pow("3", "1.1")).toThrow("Non-integer exponents are not supported yet"); - }); -}); - -describe("nthRoot", () => { - test("should calculate square roots", () => { - expect(nthRoot("4", "2").charAt(0)).toBe("2"); - expect(nthRoot("9", "2").charAt(0)).toBe("3"); - expect(nthRoot("16", "2").charAt(0)).toBe("4"); - }); - - test("should calculate cube roots", () => { - expect(nthRoot("8", "3").charAt(0)).toBe("2"); - expect(nthRoot("27", "3").charAt(0)).toBe("3"); - expect(nthRoot("64", "3").charAt(0)).toBe("4"); - }); - - test("should handle n = 1", () => { - expect(nthRoot("5", "1")).toBe("5"); - expect(nthRoot("123.456", "1")).toBe("123.456"); - }); - - test("should handle zero radicand", () => { - expect(nthRoot("0", "3")).toBe("0"); - expect(nthRoot("0", "5")).toBe("0"); - }); - - test("should handle negative radicand with odd root", () => { - const result = nthRoot("-8", "3"); - expect(result.startsWith("-2")).toBe(true); - }); - - test("should throw error for negative radicand with even root", () => { - expect(() => nthRoot("-4", "2")).toThrow("Cannot take even root of negative number"); - expect(() => nthRoot("-16", "4")).toThrow("Cannot take even root of negative number"); - }); - - test("should throw error for non-positive root degree", () => { - expect(() => nthRoot("8", "0")).toThrow("Root degree must be positive"); - expect(() => nthRoot("8", "-1")).toThrow("Root degree must be positive"); - }); - - test("should throw error for non-integer root degree", () => { - expect(() => nthRoot("8", "2.5")).toThrow("Root degree must be an integer"); - }); - - test("should handle precision parameter", () => { - const result1 = nthRoot("2", "2", 5); - const result2 = nthRoot("2", "2", 15); - // Results should be different when precision is different - expect(result1).not.toBe(result2); - expect(result1.length).toBeLessThan(result2.length); - }); - - test("should handle large numbers", () => { - const result = nthRoot("1000000", "3"); - expect(result.substring(0, 3)).toBe("100"); - }); -}); \ No newline at end of file diff --git a/packages/biggest/test/rounding.test.ts b/packages/biggest/test/rounding.test.ts deleted file mode 100644 index f65a7cf..0000000 --- a/packages/biggest/test/rounding.test.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { floor, ceil, truncate, round, roundToPrecision } from "../src/rounding"; - -describe("floor", () => { - test("should floor positive integers", () => { - expect(floor("5")).toBe("5"); - expect(floor("0")).toBe("0"); - }); - - test("should floor positive decimals", () => { - expect(floor("5.1")).toBe("5"); - expect(floor("5.9")).toBe("5"); - expect(floor("0.1")).toBe("0"); - expect(floor("0.9")).toBe("0"); - }); - - test("should floor negative integers", () => { - expect(floor("-5")).toBe("-5"); - expect(floor("-0")).toBe("0"); - }); - - test("should floor negative decimals", () => { - expect(floor("-5.1")).toBe("-6"); - expect(floor("-5.9")).toBe("-6"); - expect(floor("-0.1")).toBe("-1"); - expect(floor("-0.9")).toBe("-1"); - }); - - test("should handle large numbers", () => { - expect(floor("999999999999999999999.1")).toBe("999999999999999999999"); - expect(floor("-999999999999999999999.1")).toBe("-1000000000000000000000"); - }); -}); - -describe("ceil", () => { - test("should ceil positive integers", () => { - expect(ceil("5")).toBe("5"); - expect(ceil("0")).toBe("0"); - }); - - test("should ceil positive decimals", () => { - expect(ceil("5.1")).toBe("6"); - expect(ceil("5.9")).toBe("6"); - expect(ceil("0.1")).toBe("1"); - expect(ceil("0.9")).toBe("1"); - }); - - test("should ceil negative integers", () => { - expect(ceil("-5")).toBe("-5"); - expect(ceil("-0")).toBe("0"); - }); - - test("should ceil negative decimals", () => { - expect(ceil("-5.1")).toBe("-5"); - expect(ceil("-5.9")).toBe("-5"); - expect(ceil("-0.1")).toBe("-0"); - expect(ceil("-0.9")).toBe("-0"); - }); - - test("should handle large numbers", () => { - expect(ceil("999999999999999999999.1")).toBe("1000000000000000000000"); - expect(ceil("-999999999999999999999.1")).toBe("-999999999999999999999"); - }); -}); - -describe("truncate", () => { - test("should truncate positive numbers", () => { - expect(truncate("5")).toBe("5"); - expect(truncate("5.1")).toBe("5"); - expect(truncate("5.9")).toBe("5"); - expect(truncate("0.9")).toBe("0"); - }); - - test("should truncate negative numbers", () => { - expect(truncate("-5")).toBe("-5"); - expect(truncate("-5.1")).toBe("-5"); - expect(truncate("-5.9")).toBe("-5"); - expect(truncate("-0.9")).toBe("0"); - }); - - test("should handle large numbers", () => { - expect(truncate("999999999999999999999.123456789")).toBe("999999999999999999999"); - expect(truncate("-999999999999999999999.123456789")).toBe("-999999999999999999999"); - }); -}); - -describe("round", () => { - test("should round positive numbers", () => { - expect(round("5")).toBe("5"); - expect(round("5.4")).toBe("5"); - expect(round("5.5")).toBe("6"); - expect(round("5.6")).toBe("6"); - expect(round("0.4")).toBe("0"); - expect(round("0.5")).toBe("1"); - }); - - test("should round negative numbers", () => { - expect(round("-5")).toBe("-5"); - expect(round("-5.4")).toBe("-5"); - expect(round("-5.5")).toBe("-6"); - expect(round("-5.6")).toBe("-6"); - expect(round("-0.4")).toBe("0"); - expect(round("-0.5")).toBe("-1"); - }); - - test("should handle large numbers", () => { - expect(round("999999999999999999999.4")).toBe("999999999999999999999"); - expect(round("999999999999999999999.5")).toBe("1000000000000000000000"); - }); -}); - -describe("roundToPrecision", () => { - test("should round to specified precision", () => { - expect(roundToPrecision("5.123", 2)).toBe("5.12"); - expect(roundToPrecision("5.126", 2)).toBe("5.13"); - expect(roundToPrecision("5.125", 2)).toBe("5.13"); - }); - - test("should handle precision of 0", () => { - expect(roundToPrecision("5.4", 0)).toBe("5"); - expect(roundToPrecision("5.5", 0)).toBe("6"); - }); - - test("should pad with zeros when needed", () => { - expect(roundToPrecision("5", 2)).toBe("5.00"); - expect(roundToPrecision("5.1", 3)).toBe("5.100"); - }); - - test("should handle negative numbers", () => { - expect(roundToPrecision("-5.123", 2)).toBe("-5.12"); - expect(roundToPrecision("-5.126", 2)).toBe("-5.13"); - }); - - test("should remove trailing zeros", () => { - expect(roundToPrecision("5.100", 2)).toBe("5.1"); - expect(roundToPrecision("5.000", 2)).toBe("5"); - }); -}); \ No newline at end of file diff --git a/packages/biggest/test/sqrt.test.ts b/packages/biggest/test/sqrt.test.ts deleted file mode 100644 index 524402f..0000000 --- a/packages/biggest/test/sqrt.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import sqrt from "../src/sqrt"; - -describe("sqrt function", () => { - test("should compute square root of perfect squares", () => { - expect(sqrt("4")).toBe("2"); - expect(sqrt("9")).toBe("3"); - expect(sqrt("16")).toBe("4"); - }); - - test("should handle zero", () => { - expect(sqrt("0")).toBe("0"); - expect(sqrt("0.0")).toBe("0"); - }); - - test("should handle one", () => { - expect(sqrt("1")).toBe("1"); - expect(sqrt("1.0")).toBe("1"); - }); - - test("should compute square root with precision", () => { - const result = sqrt("2", 10); - expect(result.substring(0, 12)).toBe("1.4142135623"); - }); - - test("should handle large numbers", () => { - const result = sqrt("100"); - expect(result).toBe("10"); - }); - - test("should handle decimal numbers", () => { - const result = sqrt("0.25"); - expect(result).toBe("0.5"); - }); - - test("should throw error for negative numbers", () => { - expect(() => sqrt("-4")).toThrow("Cannot compute square root of negative number"); - }); - - test("should throw error for non-string input", () => { - expect(() => sqrt(4 as any)).toThrow("Input must be a string"); - }); -}); \ No newline at end of file diff --git a/packages/biggest/test/subtract.test.ts b/packages/biggest/test/subtract.test.ts deleted file mode 100644 index 39ecbd6..0000000 --- a/packages/biggest/test/subtract.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -import subtract from "../src/subtract"; - -describe("subtract function test", () => { - test("Subtracting positive numbers", () => { - expect(subtract("123", "456")).toBe("-333"); - expect(subtract("1000", "1")).toBe("999"); - expect(subtract("9999", "9998")).toBe("1"); - }); - - test("Subtracting negative numbers", () => { - expect(subtract("-5", "-3")).toBe("-2"); - expect(subtract("-10", "5")).toBe("-15"); - expect(subtract("10", "-5")).toBe("15"); - }); - - test("Subtracting zero", () => { - expect(subtract("0", "0")).toBe("0"); - expect(subtract("10", "0")).toBe("10"); - expect(subtract("0", "10")).toBe("-10"); - expect(subtract("-5", "0")).toBe("-5"); - }); - - test("Subtracting decimal numbers", () => { - expect(subtract("3.14", "2.14")).toBe("1"); - expect(subtract("-1.5", "0.5")).toBe("-2"); - expect(subtract("0.3", "0.1")).toBe("0.2"); - expect(subtract("0.8", "0.7")).toBe("0.1"); - }); - - test("Subtracting large numbers", () => { - expect(subtract("10000000000000000", "1")).toBe("9999999999999999"); - expect(subtract("9876543210987654321", "1234567890123456789")).toBe( - "8641975320864197532" - ); - }); - - test("Subtracting numbers with different digits", () => { - expect(subtract("1000", "0.1")).toBe("999.9"); - expect(subtract("1000", "999.999")).toBe("0.001"); - }); - - test("Subtracting resulting in negative numbers", () => { - expect(subtract("100", "200")).toBe("-100"); - expect(subtract("0.1", "0.2")).toBe("-0.1"); - }); -}); diff --git a/packages/biggest/tsconfig.json b/packages/biggest/tsconfig.json deleted file mode 100644 index 54cff6b..0000000 --- a/packages/biggest/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - } -} diff --git a/packages/curse-script/.gitignore b/packages/curse-script/.gitignore deleted file mode 100644 index c6bba59..0000000 --- a/packages/curse-script/.gitignore +++ /dev/null @@ -1,130 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* diff --git a/packages/curse-script/.npmignore b/packages/curse-script/.npmignore deleted file mode 100644 index 0c4620c..0000000 --- a/packages/curse-script/.npmignore +++ /dev/null @@ -1,138 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# Development files (keep dist/ and bin/ for npm package) -src/ -test/ -*.test.ts -*.test.js -jest.config.js -tsconfig.json -.turbo/ diff --git a/packages/curse-script/README.md b/packages/curse-script/README.md deleted file mode 100644 index 564dc56..0000000 --- a/packages/curse-script/README.md +++ /dev/null @@ -1,147 +0,0 @@ -# Curse Script - -[![Wiki](https://img.shields.io/badge/๐Ÿ“–_Wiki-deepwiki-blue)](https://deepwiki.com/hmmhmmhm/node-packages) - -[![Curse Script](https://hmart.app/en/curse-script/og.png)](https://hmart.app/curse-script) - -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/curse-script)** - -A JavaScript obfuscator that converts code into cursed spell-like syntax. - -## Installation - -```bash -npm install curse-script -# or -pnpm add curse-script -``` - -## Usage - -### As a Library - -```typescript -import { curse } from 'curse-script'; - -// Default: uses Runic characters -const cursed = curse('console.log("Hello World")'); -console.log(cursed); - -// Use Old Persian characters -const cursedPersian = curse('console.log("Hello World")', { characterSet: 'oldPersian' }); -console.log(cursedPersian); - -// Use emoji characters -const cursedEmoji = curse('console.log("Hello World")', { characterSet: 'emoji' }); -console.log(cursedEmoji); - -// Use custom character set (Greek alphabet) -const customChars = ['ฮฑ', 'ฮฒ', 'ฮณ', 'ฮด', 'ฮต', 'ฮถ', 'ฮท', 'ฮธ', 'ฮน', 'ฮบ', 'ฮป', 'ฮผ', 'ฮฝ', 'ฮพ', 'ฮฟ', 'ฯ€', 'ฯ', 'ฯƒ', 'ฯ„', 'ฯ…', 'ฯ†', 'ฯ‡', 'ฯˆ', 'ฯ‰']; -const cursedGreek = curse('console.log("Hello World")', { characterSet: customChars }); -console.log(cursedGreek); - -// No character replacement (Latin A-X) -const cursedLatin = curse('console.log("Hello World")', { characterSet: 'none' }); -console.log(cursedLatin); -``` - -### Interactive Dev Mode - -Run the interactive converter to test your scripts: - -```bash -pnpm run dev -``` - -This will start an interactive prompt where you can enter any JavaScript code and see it converted to curse-script format in real-time. - -Example session: -``` -Enter script to convert (or "exit" to quit): console.log("hi?") - -Original: -console.log("hi?") - -Cursed Output: -แš ='',แšก=!แš +แš ,แšข=!แšก+แš ,แšฃ=แš +{},แšค=แšก[แš ++],แšฅ=แšก[แšฆ=แš ],แšง=++แšฆ+แš ,แšจ=แšฃ[แšฆ+แšง],แšฉ=แšก[(แšจ+=แšฃ[แš ]+(แšก.แšข+แšฃ)[แš ]+แšข[แšง]+แšค+แšฅ+แšก[แšฆ]+แšจ+แšค+แšฃ[แš ]+แšฅ)][แšจ],แšช=แšฃ[แšฆ+แšฆ+แšง],แšซ=แš +/\\/,แšฌ=แšซ[แšฆ],แšญ='"',แšฎ=((แšฆ-แšฆ)+แšช)[แšฆ-แšฆ],แšฏ=(แš +แšช)[แšฆ-แšฆ],แšฐ=(แšฆ+แšช)[แšฆ-แšฆ],แšฑ=(แšง+แšช)[แšฆ-แšฆ],แ›ฆ=((แšง+แšฆ-แš )+แšช)[แšฆ-แšฆ],แšณ=((แšง+แšฆ)+แšช)[แšฆ-แšฆ],แšด=((แšง*แšฆ)+แšช)[แšฆ-แšฆ],แšต=((แšง*แšฆ+แš )+แšช)[แšฆ-แšฆ],แšถ=((แšง*แšง-แš )+แšช)[แšฆ-แšฆ],แ›Š=((แšง*แšง)+แšช)[แšฆ-แšฆ],Y=แšฅ+แšก[แšง]+แšค+แšก[แšฆ]+แšฅ+(แšก.แšข+แšฃ)[แš ]+แšช,แšฉ(แšฃ[แšฆ+แšง]+แšฃ[แš ]+(แšก.แšข+แšฃ)[แš ]+แšข[แšง]+แšฃ[แš ]+แšข[แšฆ]+แšก[แšง]+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšฐ+แšก[แšง]+แšญ)()+แšข[แšฆ]+แšฃ[แš ]+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšด+แšต+แšญ)()+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšฐ+แšถ+แšญ)()+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšฐ+แšต+แšญ)()+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšด+แšถ+แšญ)()+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšด+แ›Š+แšญ)()+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšฑ+แšข[แšฆ-แšฆ]+แšญ)()+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšฐ+แšต+แšญ)()+แšฉ(Y+แšญ+แšฌ+แšก[แš +แš ]+แšฎ+แšฎ+แšฐ+แ›Š+แšญ)())(); -``` - -Type `exit` or `quit` to close the interactive session. - -## API - -### `curse(source: string, options?: CurseOptions): string` - -Converts JavaScript code into curse-script format. - -**Parameters:** -- `source`: The JavaScript code to convert -- `options.includePrelude`: Whether to include the prelude (default: `true`) -- `options.characterSet`: Character set to use for obfuscation (default: `'runic'`) - - `'runic'`: Use Runic characters (แš -แšท) - - `'oldPersian'`: Use Old Persian cuneiform (๐Ž -๐Žท) - - `'emoji'`: Use emoji characters (๐Ÿ˜€-๐Ÿ˜—) - - `'none'`: No character replacement (use Latin A-X) - - `string[]`: Custom array of at least 24 characters - -**Returns:** The cursed script as a string - -**Examples:** - -```typescript -// With Runic characters (default) -curse('alert(1)'); // แš ='',แšก=!แš +แš ,... - -// With Old Persian characters -curse('alert(1)', { characterSet: 'oldPersian' }); // ๐Ž ='',๐Žก=!๐Ž +๐Ž ,... - -// With emoji characters -curse('alert(1)', { characterSet: 'emoji' }); // ๐Ÿ˜€='',๐Ÿ˜=!๐Ÿ˜€+๐Ÿ˜€,... - -// With custom characters -const customChars = ['ฮฑ', 'ฮฒ', 'ฮณ', 'ฮด', 'ฮต', 'ฮถ', 'ฮท', 'ฮธ', 'ฮน', 'ฮบ', 'ฮป', 'ฮผ', 'ฮฝ', 'ฮพ', 'ฮฟ', 'ฯ€', 'ฯ', 'ฯƒ', 'ฯ„', 'ฯ…', 'ฯ†', 'ฯ‡', 'ฯˆ', 'ฯ‰']; -curse('alert(1)', { characterSet: customChars }); // ฮฑ='',ฮฒ=!ฮฑ+ฮฑ,... - -// With no character replacement -curse('alert(1)', { characterSet: 'none' }); // A='',B=!A+A,... -``` - -### Character Set Requirements - -When providing a custom character set: -- Must contain **at least 24 unique characters** -- Characters will map to variables A-X in order -- Can use any Unicode characters including emoji, symbols, or letters from any script - -### Exported Constants - -The package exports the built-in character sets for reference: - -```typescript -import { RUNIC_CHARS, OLD_PERSIAN_CHARS, EMOJI_CHARS } from 'curse-script'; - -console.log(RUNIC_CHARS); // ["แš ", "แšก", "แšข", ...] -console.log(OLD_PERSIAN_CHARS); // ["๐Ž ", "๐Žก", "๐Žข", ...] -console.log(EMOJI_CHARS); // ["๐Ÿ˜€", "๐Ÿ˜", "๐Ÿ˜‚", ...] - -// You can also use them as a base for custom modifications -const customSet = [...RUNIC_CHARS]; -customSet[0] = '๐Ÿ”ฅ'; // Replace first character -``` - -## Development - -```bash -# Build the package -pnpm run build - -# Run tests -pnpm run test - -# Watch mode -pnpm run watch -``` - -## License - -MIT diff --git a/packages/curse-script/bin/cli.js b/packages/curse-script/bin/cli.js deleted file mode 100755 index 177a7e5..0000000 --- a/packages/curse-script/bin/cli.js +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env node -import * as readline from 'readline'; -import { curse } from '../dist/index.modern.js'; - -// ANSI color codes -const colors = { - reset: '\x1b[0m', - bright: '\x1b[1m', - dim: '\x1b[2m', - - // Foreground colors - cyan: '\x1b[36m', - green: '\x1b[32m', - yellow: '\x1b[33m', - red: '\x1b[31m', - magenta: '\x1b[35m', - blue: '\x1b[34m', - gray: '\x1b[90m', - - // Background colors - bgCyan: '\x1b[46m', - bgGreen: '\x1b[42m', -}; - -const colorize = (text, color) => { - return `${colors[color]}${text}${colors.reset}`; -}; - -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - prompt: 'Enter script to convert: \n' -}); - -console.log(colorize('โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—', 'red')); -console.log(colorize('โ•‘ Curse Script Interactive Converter โ•‘', 'red')); -console.log(colorize('โ•‘ Enter any JavaScript code to convert to curse-script โ•‘', 'red')); -console.log(colorize('โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•', 'red')); -console.log(''); - -rl.prompt(); - -rl.on('line', (input) => { - const trimmed = input.trim(); - - if (!trimmed) { - rl.prompt(); - return; - } - - try { - const cursed = curse(trimmed); - console.log(''); - console.log(colorize('[Cursed Output]', 'red')); - console.log(colorize(cursed, 'red')); - console.log(''); - } catch (error) { - console.log(''); - console.log(colorize('โŒ Error:', 'red')); - console.log(colorize(error instanceof Error ? error.message : String(error), 'red')); - console.log(''); - } - - rl.close(); -}); - -rl.on('close', () => { - console.log(colorize('\n๐Ÿ‘‹ Goodbye!', 'red')); - process.exit(0); -}); diff --git a/packages/curse-script/jest.config.js b/packages/curse-script/jest.config.js deleted file mode 100644 index c44ef36..0000000 --- a/packages/curse-script/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} **/ -export default { - testEnvironment: "node", - transform: { - "^.+.tsx?$": ["ts-jest", {}], - }, -}; diff --git a/packages/curse-script/package.json b/packages/curse-script/package.json deleted file mode 100644 index f20b975..0000000 --- a/packages/curse-script/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "curse-script", - "type": "module", - "version": "1.0.5", - "description": "A JavaScript obfuscator that converts code into cursed spell-like syntax", - "source": "src/index.ts", - "exports": { - "types": "./dist/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/index.d.ts", - "bin": { - "curse-script": "./bin/cli.js" - }, - "scripts": { - "build": "microbundle", - "watch": "microbundle watch", - "dev": "node bin/cli.js", - "test": "jest", - "release": "release-it" - }, - "keywords": [ - "obfuscator", - "javascript", - "curse", - "jsfuck", - "esoteric" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/curse-script" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/curse-script#readme", - "devDependencies": { - "@types/jest": "^29.5.13", - "@types/node": "^22.0.0", - "husky": "^9.1.6", - "jest": "^29.7.0", - "lint-staged": "^15.2.10", - "microbundle": "^0.15.1", - "release-it": "^19.0.5", - "ts-jest": "^29.2.5", - "tsx": "^4.19.0", - "typescript": "^5.6.2" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "release-it": { - "hooks": { - "before:init": "pnpm run build" - } - }, - "lint-staged": { - "*.ts": [ - "pnpm run lint", - "prettier --write" - ] - } -} diff --git a/packages/curse-script/src/index.ts b/packages/curse-script/src/index.ts deleted file mode 100644 index 326182c..0000000 --- a/packages/curse-script/src/index.ts +++ /dev/null @@ -1,146 +0,0 @@ -export const runicChars = ["แš ", "แšก", "แšข", "แšฃ", "แšค", "แšฅ", "แšฆ", "แšง", "แšจ", "แšฉ", "แšช", "แšซ", "แšฌ", "แšญ", "แšฎ", "แšฏ", "แšฐ", "แšฑ", "แ›ฆ", "แšณ", "แšด", "แšต", "แšถ", "แ›Š", "แ›Ÿ"]; -export const oldPersianChars = ['๐Ž ', '๐Žก', '๐Žข', '๐Žฃ', '๐Žค', '๐Žฅ', '๐Žฆ', '๐Žง', '๐Žจ', '๐Žฉ', '๐Žช', '๐Žซ', '๐Žฌ', '๐Žญ', '๐Žฎ', '๐Žฏ', '๐Žฐ', '๐Žฑ', '๐Žฒ', '๐Žณ', '๐Žด', '๐Žต', '๐Žถ', '๐Žท', '๐Žฝ']; -export const emojiChars = ["๐Ÿ˜€", "๐Ÿ˜‚", "๐Ÿฅณ", "๐Ÿค–", "๐Ÿง ", "๐Ÿถ", "๐Ÿฑ", "๐Ÿธ", "๐Ÿผ", "๐ŸฆŠ", "๐Ÿฏ", "๐Ÿต", "๐Ÿง", "๐Ÿ™", "๐Ÿณ", "๐ŸŒˆ", "โšก๏ธ", "๐Ÿ”ฅ", "โ˜ƒ๏ธ", "๐ŸŒ™", "โญ๏ธ", "๐Ÿ•", "๐ŸŽง", "๐Ÿš€", "๐ŸŽฑ"]; -export const latinVars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y']; -export type CharacterSet = 'runic' | 'oldPersian' | 'emoji' | 'none' | string[]; -export interface CurseOptions { - includePrelude?: boolean; - characterSet?: CharacterSet; -} - -const preludes = [ - `A='',`, // '' - `B=!A+A,`, // 'true' - `C=!B+A,`, // 'false' - `D=A+{},`, // '[object Object]' - `E=B[A++],`, // t - `F=B[G=A],`, // r - `H=++G+A,`, // 3 - `I=D[G+H],`, // constructor - `J=B[(I+=D[A]+(B.C+D)[A]+C[H]+E+F+B[G]+I+E+D[A]+F)][I],`, // Function - `K=D[G+G+H],`, // ' ' - `L=A+/\\\\/,`, // '1/\\/' - `M=L[G],`, // '\' - `N='"',`, // '"' - `O=((G-G)+K)[G-G],`, // '0' - `P=(A+K)[G-G],`, // '1' - `Q=(G+K)[G-G],`, // '2' - `R=(H+K)[G-G],`, // '3' - `S=((H+G-A)+K)[G-G],`, // '4' - `T=((H+G)+K)[G-G],`, // '5' - `U=((H*G)+K)[G-G],`, // '6' - `V=((H*G+A)+K)[G-G],`, // '7' - `W=((H*H-A)+K)[G-G],`, // '8' - `X=((H*H)+K)[G-G],`, // '9' - `Y=F+B[H]+E+B[G]+F+(B.C+D)[A]+K,`, // 'return ' -] - -const charMap = { - a: 'C[A]', - b: 'D[G]', - c: 'D[G+H]', - e: 'B[H]', - f: 'C[G-G]', - j: 'D[H]', - l: 'C[G]', - n: '(B.C+D)[A]', - o: 'D[A]', - r: 'F', - s: 'C[H]', - t: 'E', - u: 'B[A+A]', - '0': 'O', - '1': 'P', - '2': 'Q', - '3': 'R', - '4': 'S', - '5': 'T', - '6': 'U', - '7': 'V', - '8': 'W', - '9': 'X', - ' ': 'K', - '"': 'N', - '\\': 'M', -}; - -const hexMap = ['O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'C[A]', 'D[G]', 'D[G+H]', 'J(Y+N+M+P+S+S+N)()', 'B[H]', 'C[G-G]']; - -const buildUnicodeEscape = (hexString: string) => { - const hexDigits = [ - hexMap[parseInt(hexString[0], 16)], - hexMap[parseInt(hexString[1], 16)], - hexMap[parseInt(hexString[2], 16)], - hexMap[parseInt(hexString[3], 16)] - ]; - return `J(Y+N+M+${charMap.u}+${hexDigits.join('+')}+N)()`; -}; - -const charToExpression = (character: string) => { - if (charMap[character as keyof typeof charMap]) - return charMap[character as keyof typeof charMap]; - const codePoint = character.codePointAt(0); - if (codePoint === undefined) return ''; - if (codePoint <= 0xFFFF) { - const hexString = codePoint.toString(16).padStart(4, '0'); - return buildUnicodeEscape(hexString); - } else { - const highSurrogate = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800; - const lowSurrogate = ((codePoint - 0x10000) % 0x400) + 0xDC00; - const highSurrogateHex = highSurrogate.toString(16).padStart(4, '0'); - const lowSurrogateHex = lowSurrogate.toString(16).padStart(4, '0'); - const highExpression = buildUnicodeEscape(highSurrogateHex); - const lowExpression = buildUnicodeEscape(lowSurrogateHex); - return `${highExpression}+${lowExpression}`; - } -}; - -function replaceWithCharacterSet(script: string, chars: string[]): string { - if (chars.length < latinVars.length) { - throw new Error(`Character set must contain at least ${latinVars.length} characters, but only ${chars.length} were provided.`); - } - - let result = script; - for (let i = 0; i < latinVars.length; i++) { - const latinVar = latinVars[i]; - const replacementChar = chars[i]; - // Replace variable names with custom characters - // Use word boundaries to avoid replacing parts of other identifiers - const regex = new RegExp(`\\b${latinVar}\\b`, 'g'); - result = result.replace(regex, replacementChar); - } - return result; -} - -export function curse(source: string, options: CurseOptions = {}) { - const { - includePrelude = true, - characterSet = 'oldPersian' - } = options; - - const expressionParts = []; - for (let index = 0; index < source.length;) { - const codePoint = source.codePointAt(index); - if (codePoint === undefined) break; - const character = String.fromCodePoint(codePoint); - expressionParts.push(charToExpression(character)); - index += character.length; - } - const script = `J(${expressionParts.join('+')})();`; - const fullScript = includePrelude ? `${preludes.join('')}${script}\n` : script; - - // Handle characterSet option - if (characterSet === 'none') { - return fullScript; - } else if (characterSet === 'runic') { - return replaceWithCharacterSet(fullScript, runicChars); - } else if (characterSet === 'oldPersian') { - return replaceWithCharacterSet(fullScript, oldPersianChars); - } else if (characterSet === 'emoji') { - return replaceWithCharacterSet(fullScript, emojiChars); - } else if (Array.isArray(characterSet)) { - return replaceWithCharacterSet(fullScript, characterSet); - } else { - return fullScript; - } -} diff --git a/packages/curse-script/test/index.test.ts b/packages/curse-script/test/index.test.ts deleted file mode 100644 index 5501447..0000000 --- a/packages/curse-script/test/index.test.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { curse, type CurseOptions } from '../src/index'; - -describe('curse function', () => { - it('should generate curse script with prelude', () => { - const source = 'alert("test")'; - const result = curse(source, { characterSet: 'none' }); - expect(result).toContain('A='); - expect(result).toContain('J('); - }); - - it('should generate curse script without prelude', () => { - const source = 'alert("test")'; - const result = curse(source, { includePrelude: false, characterSet: 'none' }); - expect(result).not.toContain('A='); - expect(result).toContain('J('); - }); - - it('should handle empty string', () => { - const source = ''; - const result = curse(source); - expect(result).toBeDefined(); - }); - - it('should handle special characters', () => { - const source = 'a b c'; - const result = curse(source); - expect(result).toBeDefined(); - expect(result.length).toBeGreaterThan(0); - }); - - it('should use Old Persian characters by default', () => { - const source = 'alert("test")'; - const result = curse(source); - // Should contain Old Persian characters instead of Latin A-X - expect(result).toContain('๐Ž '); - expect(result).not.toContain('A='); - }); - - it('should support Old Persian character set', () => { - const source = 'alert("test")'; - const result = curse(source, { characterSet: 'oldPersian' }); - // Should contain Old Persian characters - expect(result).toContain('๐Ž '); - expect(result).not.toContain('A='); - expect(result).not.toContain('แš '); - }); - - it('should support custom character array', () => { - const source = 'alert("test")'; - const customChars = ['ฮฑ', 'ฮฒ', 'ฮณ', 'ฮด', 'ฮต', 'ฮถ', 'ฮท', 'ฮธ', 'ฮน', 'ฮบ', 'ฮป', 'ฮผ', 'ฮฝ', 'ฮพ', 'ฮฟ', 'ฯ€', 'ฯ', 'ฯƒ', 'ฯ„', 'ฯ…', 'ฯ†', 'ฯ‡', 'ฯˆ', 'ฯ‰', 'ฯŠ']; - const result = curse(source, { characterSet: customChars }); - // Should contain Greek characters - expect(result).toContain('ฮฑ'); - expect(result).not.toContain('A='); - expect(result).not.toContain('แš '); - }); - - it('should throw error if custom character set is too short', () => { - const source = 'alert("test")'; - const shortChars = ['ฮฑ', 'ฮฒ', 'ฮณ']; - expect(() => curse(source, { characterSet: shortChars })).toThrow('Character set must contain at least 25 characters'); - }); - - it('should support emoji character set', () => { - const source = 'alert("test")'; - const result = curse(source, { characterSet: 'emoji' }); - // Should contain emoji characters - expect(result).toContain('๐Ÿ˜€'); - expect(result).not.toContain('A='); - expect(result).not.toContain('แš '); - }); - - it('should support none character set (no replacement)', () => { - const source = 'alert("test")'; - const result = curse(source, { characterSet: 'none' }); - // Should contain Latin A-X - expect(result).toContain('A='); - expect(result).not.toContain('๐Ž '); - expect(result).not.toContain('แš '); - }); - - it('should work with Old Persian and no prelude', () => { - const source = 'alert("test")'; - const result = curse(source, { includePrelude: false }); - expect(result).not.toContain('A='); - expect(result).toContain('๐Žฉ('); // J maps to oldPersianChars[9] which is ๐Žฉ - expect(result).toContain('๐Ž '); - }); - - it('should work with emoji and no prelude', () => { - const source = 'alert("test")'; - const result = curse(source, { includePrelude: false, characterSet: 'emoji' }); - expect(result).not.toContain('A='); - expect(result).toContain('๐ŸฆŠ('); // J maps to emojiChars[9] which is ๐ŸฆŠ - expect(result).toContain('๐Ÿ˜€'); - }); -}); diff --git a/packages/curse-script/tsconfig.json b/packages/curse-script/tsconfig.json deleted file mode 100644 index 9a96818..0000000 --- a/packages/curse-script/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "lib": ["ESNext"], - "moduleResolution": "bundler", - "types": ["node", "jest"], - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - } -} diff --git a/packages/edge-crypto/.gitignore b/packages/edge-crypto/.gitignore deleted file mode 100644 index 1065d3f..0000000 --- a/packages/edge-crypto/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules -dist -.turbo -.DS_Store -*.log -coverage diff --git a/packages/edge-crypto/.npmignore b/packages/edge-crypto/.npmignore deleted file mode 100644 index b6e6edf..0000000 --- a/packages/edge-crypto/.npmignore +++ /dev/null @@ -1,10 +0,0 @@ -src -test -node_modules -.turbo -.DS_Store -*.log -coverage -tsconfig.json -jest.config.js -.gitignore diff --git a/packages/edge-crypto/LICENSE b/packages/edge-crypto/LICENSE deleted file mode 100644 index a6e4455..0000000 --- a/packages/edge-crypto/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 hmmhmmhm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/edge-crypto/README.md b/packages/edge-crypto/README.md deleted file mode 100644 index ccbdb0a..0000000 --- a/packages/edge-crypto/README.md +++ /dev/null @@ -1,334 +0,0 @@ -# edge-crypto - -[![Wiki](https://img.shields.io/badge/๐Ÿ“–_Wiki-deepwiki-blue)](https://deepwiki.com/hmmhmmhm/node-packages) - -[![Edge Crypto](https://hmart.app/en/edge-crypto/og.png)](https://hmart.app/edge-crypto) - -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/edge-crypto)** - -Unified SubtleCrypto utilities for Node.js, browsers, and Cloudflare Workers without external dependencies. - -## Features - -- ๐Ÿ” **Universal**: Works seamlessly in Node.js, browsers, and Cloudflare Workers -- ๐Ÿš€ **Zero Dependencies**: Uses native SubtleCrypto API - no external crypto libraries needed -- ๐Ÿ“˜ **TypeScript**: Full type safety with comprehensive JSDoc documentation -- ๐Ÿ”ง **Simple API**: Easy-to-use encryption, decryption, signing, and verification -- โœ… **Well Tested**: Comprehensive test coverage with 55+ tests -- ๐Ÿ”‘ **RSA Support**: RSA-OAEP encryption and RSA-PSS/RSASSA-PKCS1-v1_5 signing - -## Installation - -```bash -npm install edge-crypto -# or -pnpm add edge-crypto -# or -yarn add edge-crypto -``` - -## Usage - -### Check Environment Support - -```typescript -import { isSupported } from 'edge-crypto'; - -// Check if crypto operations are supported -if (isSupported()) { - console.log('SubtleCrypto is available!'); - // Proceed with crypto operations -} else { - console.error('SubtleCrypto is not supported in this environment'); - // Fallback or error handling -} -``` - -### Encryption & Decryption - -```typescript -import { encrypt, decrypt, encryptToString, decryptFromString } from 'edge-crypto'; - -// Basic encryption/decryption -const encrypted = await encrypt('my-secret-data', 'my-password'); -const decrypted = await decrypt(encrypted, 'my-password'); - -// Encrypt to a single base64 string (easier to store/transmit) -const encryptedString = await encryptToString('my-secret-data', 'my-password'); -const decryptedString = await decryptFromString(encryptedString, 'my-password'); - -// With options -const encrypted = await encrypt('my-secret-data', 'my-password', { - algorithm: 'AES-GCM', // or 'AES-CBC' - keyLength: 256, // 128, 192, or 256 -}); -``` - -### Signing & Verification - -```typescript -import { sign, verify, generateKey } from 'edge-crypto'; - -// Generate a secure random key -const secretKey = generateKey(); - -// Sign data -const signature = await sign('my-message', secretKey); - -// Verify signature -const isValid = await verify('my-message', signature, secretKey); - -// With different hash algorithms -const signature = await sign('my-message', secretKey, { hash: 'SHA-512' }); -const isValid = await verify('my-message', signature, secretKey, { hash: 'SHA-512' }); -``` - -### Hashing - -```typescript -import { hash } from 'edge-crypto'; - -// Generate SHA-256 hash -const hash256 = await hash('my-data'); - -// Use different algorithms -const hash384 = await hash('my-data', 'SHA-384'); -const hash512 = await hash('my-data', 'SHA-512'); -``` - -### RSA Encryption & Decryption - -```typescript -import { - generateRSAKeyPair, - encryptRSA, - decryptRSA, - exportPublicKey, - exportPrivateKey, - importPublicKey, - importPrivateKey, -} from 'edge-crypto'; - -// Generate RSA key pair -const keyPair = await generateRSAKeyPair({ modulusLength: 2048 }); - -// Encrypt with public key -const encrypted = await encryptRSA('secret data', keyPair.publicKey); - -// Decrypt with private key -const decrypted = await decryptRSA(encrypted, keyPair.privateKey); - -// Export keys for storage -const publicKeyPEM = await exportPublicKey(keyPair.publicKey); -const privateKeyPEM = await exportPrivateKey(keyPair.privateKey); - -// Import keys -const importedPublic = await importPublicKey(publicKeyPEM, 'RSA-OAEP', 'SHA-256', ['encrypt']); -const importedPrivate = await importPrivateKey(privateKeyPEM, 'RSA-OAEP', 'SHA-256', ['decrypt']); -``` - -### RSA Signing & Verification - -```typescript -import { - generateRSASigningKeyPair, - signRSA, - verifyRSA, -} from 'edge-crypto'; - -// Generate RSA key pair for signing -const keyPair = await generateRSASigningKeyPair({ modulusLength: 2048 }); - -// Sign with private key (RSA-PSS by default) -const signature = await signRSA('my message', keyPair.privateKey); - -// Verify with public key -const isValid = await verifyRSA('my message', signature, keyPair.publicKey); - -// Use RSASSA-PKCS1-v1_5 (legacy) -const signature = await signRSA('my message', keyPair.privateKey, { - algorithm: 'RSASSA-PKCS1-v1_5', - hash: 'SHA-256', -}); -const isValid = await verifyRSA('my message', signature, keyPair.publicKey, { - algorithm: 'RSASSA-PKCS1-v1_5', - hash: 'SHA-256', -}); -``` - -### Utility Functions - -```typescript -import { - stringToUint8Array, - uint8ArrayToString, - arrayBufferToBase64, - base64ToArrayBuffer, - generateSalt, - generateIV, -} from 'edge-crypto'; - -// Convert between string and Uint8Array -const buffer = stringToUint8Array('hello'); -const text = uint8ArrayToString(buffer); - -// Convert between ArrayBuffer and base64 -const base64 = arrayBufferToBase64(buffer.buffer); -const arrayBuffer = base64ToArrayBuffer(base64); - -// Generate random values -const salt = generateSalt(16); // 16 bytes -const iv = generateIV(12); // 12 bytes for AES-GCM -``` - -## API Reference - -### Encryption - -#### `encrypt(data, password, options?)` -Encrypts data using AES-GCM or AES-CBC. - -- **data**: `string | Uint8Array` - Data to encrypt -- **password**: `string` - Password for encryption -- **options**: `EncryptOptions` - Optional encryption settings - - `algorithm`: `'AES-GCM' | 'AES-CBC'` (default: `'AES-GCM'`) - - `keyLength`: `128 | 192 | 256` (default: `256`) - - `iv`: `Uint8Array` - Custom initialization vector -- **Returns**: `Promise` - -#### `decrypt(encryptedData, password, options?)` -Decrypts data encrypted with `encrypt()`. - -- **encryptedData**: `EncryptedData` - Encrypted data object -- **password**: `string` - Password used for encryption -- **options**: `DecryptOptions` - Optional decryption settings -- **Returns**: `Promise` - -### Signing - -#### `sign(data, secret, options?)` -Signs data using HMAC. - -- **data**: `string | Uint8Array` - Data to sign -- **secret**: `string` - Secret key for signing -- **options**: `SignOptions` - Optional signing settings - - `algorithm`: `'HMAC'` (default) - - `hash`: `'SHA-256' | 'SHA-384' | 'SHA-512'` (default: `'SHA-256'`) -- **Returns**: `Promise` - Base64 encoded signature - -#### `verify(data, signature, secret, options?)` -Verifies a signature. - -- **data**: `string | Uint8Array` - Original data -- **signature**: `string` - Base64 encoded signature -- **secret**: `string` - Secret key used for signing -- **options**: `VerifyOptions` - Optional verification settings -- **Returns**: `Promise` - -#### `hash(data, algorithm?)` -Generates a hash of data. - -- **data**: `string | Uint8Array` - Data to hash -- **algorithm**: `'SHA-256' | 'SHA-384' | 'SHA-512'` (default: `'SHA-256'`) -- **Returns**: `Promise` - Base64 encoded hash - -### RSA Functions - -#### `generateRSAKeyPair(options?)` -Generates an RSA key pair for encryption/decryption. - -- **options**: `RSAKeyOptions` - Optional key generation settings - - `modulusLength`: `2048 | 4096` (default: `2048`) - - `hash`: `'SHA-256' | 'SHA-384' | 'SHA-512'` (default: `'SHA-256'`) -- **Returns**: `Promise` - -#### `generateRSASigningKeyPair(options?)` -Generates an RSA key pair for signing/verification. - -- **options**: `RSAKeyOptions` - Optional key generation settings -- **Returns**: `Promise` - -#### `encryptRSA(data, publicKey, options?)` -Encrypts data using RSA-OAEP. - -- **data**: `string | Uint8Array` - Data to encrypt -- **publicKey**: `CryptoKey` - Public key for encryption -- **options**: `RSAEncryptOptions` - Optional encryption settings -- **Returns**: `Promise` - Base64 encoded encrypted data - -#### `decryptRSA(encryptedData, privateKey, options?)` -Decrypts data using RSA-OAEP. - -- **encryptedData**: `string` - Base64 encoded encrypted data -- **privateKey**: `CryptoKey` - Private key for decryption -- **options**: `RSADecryptOptions` - Optional decryption settings -- **Returns**: `Promise` - Decrypted data - -#### `signRSA(data, privateKey, options?)` -Signs data using RSA-PSS or RSASSA-PKCS1-v1_5. - -- **data**: `string | Uint8Array` - Data to sign -- **privateKey**: `CryptoKey` - Private key for signing -- **options**: `RSASignOptions` - Optional signing settings - - `algorithm`: `'RSA-PSS' | 'RSASSA-PKCS1-v1_5'` (default: `'RSA-PSS'`) - - `hash`: `'SHA-256' | 'SHA-384' | 'SHA-512'` (default: `'SHA-256'`) - - `saltLength`: `number` (default: `32`, RSA-PSS only) -- **Returns**: `Promise` - Base64 encoded signature - -#### `verifyRSA(data, signature, publicKey, options?)` -Verifies an RSA signature. - -- **data**: `string | Uint8Array` - Original data -- **signature**: `string` - Base64 encoded signature -- **publicKey**: `CryptoKey` - Public key for verification -- **options**: `RSAVerifyOptions` - Optional verification settings -- **Returns**: `Promise` - -#### `exportPublicKey(key)` / `exportPrivateKey(key)` -Exports a key to base64 format (SPKI for public, PKCS8 for private). - -- **key**: `CryptoKey` - Key to export -- **Returns**: `Promise` - Base64 encoded key - -#### `importPublicKey(keyData, algorithm, hash, keyUsages)` / `importPrivateKey(...)` -Imports a key from base64 format. - -- **keyData**: `string` - Base64 encoded key -- **algorithm**: `'RSA-OAEP' | 'RSA-PSS' | 'RSASSA-PKCS1-v1_5'` -- **hash**: `'SHA-256' | 'SHA-384' | 'SHA-512'` -- **keyUsages**: `KeyUsage[]` - Key usage array -- **Returns**: `Promise` - -### Utility Functions - -#### `isSupported()` -Checks if SubtleCrypto is supported in the current environment. - -- **Returns**: `boolean` - True if SubtleCrypto is available, false otherwise -- **Example**: - ```typescript - if (isSupported()) { - // Safe to use crypto operations - } - ``` - -## Platform Support - -- โœ… Node.js 20+ -- โœ… Modern browsers (Chrome, Firefox, Safari, Edge) -- โœ… Cloudflare Workers -- โœ… Deno -- โœ… Bun - -> **Note**: Node.js 18 and earlier versions may have limited or no SubtleCrypto support in certain environments. We recommend using Node.js 20 or later for full compatibility. - -## Security Notes - -- Uses PBKDF2 with 100,000 iterations for key derivation -- Generates cryptographically secure random IVs and salts -- AES-GCM provides authenticated encryption (recommended) -- All cryptographic operations use the native SubtleCrypto API - -## License - -MIT ยฉ hmmhmmhm diff --git a/packages/edge-crypto/jest.config.js b/packages/edge-crypto/jest.config.js deleted file mode 100644 index c44ef36..0000000 --- a/packages/edge-crypto/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} **/ -export default { - testEnvironment: "node", - transform: { - "^.+.tsx?$": ["ts-jest", {}], - }, -}; diff --git a/packages/edge-crypto/package.json b/packages/edge-crypto/package.json deleted file mode 100644 index ad1f81a..0000000 --- a/packages/edge-crypto/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "edge-crypto", - "type": "module", - "version": "0.1.1", - "description": "Unified SubtleCrypto utilities for Node.js, browsers, and Cloudflare Workers without external dependencies.", - "source": "src/index.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "./package.json": "./package.json" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/index.d.ts", - "files": [ - "dist" - ], - "scripts": { - "build": "microbundle", - "watch": "microbundle watch", - "test": "jest", - "release": "release-it" - }, - "keywords": [ - "crypto", - "subtlecrypto", - "webcrypto", - "workers", - "browser", - "node" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/edge-crypto" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/edge-crypto#readme", - "engines": { - "node": ">=20.0.0" - }, - "devDependencies": { - "@types/jest": "^29.5.13", - "@types/node": "^24.9.2", - "jest": "^29.7.0", - "microbundle": "^0.15.1", - "release-it": "^19.0.5", - "ts-jest": "^29.2.5", - "typescript": "^5.6.2" - } -} diff --git a/packages/edge-crypto/src/encrypt.ts b/packages/edge-crypto/src/encrypt.ts deleted file mode 100644 index e917eed..0000000 --- a/packages/edge-crypto/src/encrypt.ts +++ /dev/null @@ -1,136 +0,0 @@ -import type { EncryptOptions, DecryptOptions, EncryptedData } from './types'; -import { - getCrypto, - stringToUint8Array, - uint8ArrayToString, - arrayBufferToBase64, - base64ToArrayBuffer, - generateSalt, - generateIV, - deriveKey, -} from './utils'; - -/** - * Encrypt data using a password - * @param data - Data to encrypt (string or Uint8Array) - * @param password - Password to use for encryption - * @param options - Encryption options - * @returns Encrypted data object containing ciphertext, IV, and salt - * @example - * ```typescript - * const encrypted = await encrypt('my secret data', 'my-password'); - * console.log(encrypted.data); // base64 encoded ciphertext - * ``` - */ -export async function encrypt( - data: string | Uint8Array, - password: string, - options: EncryptOptions = {} -): Promise { - const { - algorithm = 'AES-GCM', - iv = generateIV(algorithm === 'AES-GCM' ? 12 : 16), - keyLength = 256, - } = options; - - const subtle = getCrypto(); - const salt = generateSalt(); - const key = await deriveKey(password, salt, keyLength, algorithm); - - const dataBuffer = typeof data === 'string' ? stringToUint8Array(data) : data; - - const encryptedBuffer = await subtle.encrypt( - { - name: algorithm, - iv: iv as BufferSource, - }, - key, - dataBuffer as BufferSource - ); - - return { - data: arrayBufferToBase64(encryptedBuffer), - iv: arrayBufferToBase64(iv.buffer as ArrayBuffer), - salt: arrayBufferToBase64(salt.buffer as ArrayBuffer), - algorithm, - }; -} - -/** - * Decrypt data using a password - * @param encryptedData - Encrypted data object from encrypt() - * @param password - Password used for encryption - * @param options - Decryption options - * @returns Decrypted data as string - * @example - * ```typescript - * const encrypted = await encrypt('my secret data', 'my-password'); - * const decrypted = await decrypt(encrypted, 'my-password'); - * console.log(decrypted); // 'my secret data' - * ``` - */ -export async function decrypt( - encryptedData: EncryptedData, - password: string, - options: DecryptOptions = {} -): Promise { - const { - algorithm = encryptedData.algorithm, - keyLength = 256, - } = options; - - const subtle = getCrypto(); - const salt = new Uint8Array(base64ToArrayBuffer(encryptedData.salt)); - const iv = new Uint8Array(base64ToArrayBuffer(encryptedData.iv)); - const data = base64ToArrayBuffer(encryptedData.data); - - const key = await deriveKey(password, salt, keyLength, algorithm); - - const decryptedBuffer = await subtle.decrypt( - { - name: algorithm, - iv: iv as BufferSource, - }, - key, - data - ); - - return uint8ArrayToString(new Uint8Array(decryptedBuffer)); -} - -/** - * Encrypt data and return as a single base64 string - * @param data - Data to encrypt - * @param password - Password to use for encryption - * @param options - Encryption options - * @returns Base64 encoded string containing all encrypted data - * @example - * ```typescript - * const encrypted = await encryptToString('my secret', 'password'); - * const decrypted = await decryptFromString(encrypted, 'password'); - * ``` - */ -export async function encryptToString( - data: string | Uint8Array, - password: string, - options: EncryptOptions = {} -): Promise { - const encrypted = await encrypt(data, password, options); - return btoa(JSON.stringify(encrypted)); -} - -/** - * Decrypt data from a base64 string - * @param encryptedString - Base64 encoded encrypted data from encryptToString() - * @param password - Password used for encryption - * @param options - Decryption options - * @returns Decrypted data as string - */ -export async function decryptFromString( - encryptedString: string, - password: string, - options: DecryptOptions = {} -): Promise { - const encrypted: EncryptedData = JSON.parse(atob(encryptedString)); - return decrypt(encrypted, password, options); -} diff --git a/packages/edge-crypto/src/index.ts b/packages/edge-crypto/src/index.ts deleted file mode 100644 index fc7c478..0000000 --- a/packages/edge-crypto/src/index.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * edge-crypto - * - * Unified SubtleCrypto utilities for Node.js, browsers, and Cloudflare Workers - * without external dependencies. - * - * @packageDocumentation - */ - -// Export types -export type { - EncryptionAlgorithm, - SigningAlgorithm, - HashAlgorithm, - EncryptOptions, - DecryptOptions, - SignOptions, - VerifyOptions, - EncryptedData, - CryptoKeyPair, - RSAKeyOptions, - RSAEncryptOptions, - RSADecryptOptions, - RSASignOptions, - RSAVerifyOptions, -} from './types'; - -// Export encryption functions -export { - encrypt, - decrypt, - encryptToString, - decryptFromString, -} from './encrypt'; - -// Export signing functions -export { - sign, - verify, - hash, - generateKey, -} from './sign'; - -// Export RSA functions -export { - generateRSAKeyPair, - generateRSASigningKeyPair, - exportPublicKey, - exportPrivateKey, - importPublicKey, - importPrivateKey, - encryptRSA, - decryptRSA, - signRSA, - verifyRSA, -} from './rsa'; - -// Export utility functions -export { - isSupported, - getCrypto, - stringToUint8Array, - uint8ArrayToString, - arrayBufferToBase64, - base64ToArrayBuffer, - generateSalt, - generateIV, - deriveKey, -} from './utils'; diff --git a/packages/edge-crypto/src/rsa.ts b/packages/edge-crypto/src/rsa.ts deleted file mode 100644 index 2388a66..0000000 --- a/packages/edge-crypto/src/rsa.ts +++ /dev/null @@ -1,327 +0,0 @@ -import type { - CryptoKeyPair, - RSAKeyOptions, - RSAEncryptOptions, - RSADecryptOptions, - RSASignOptions, - RSAVerifyOptions, -} from './types'; -import { - getCrypto, - stringToUint8Array, - uint8ArrayToString, - arrayBufferToBase64, - base64ToArrayBuffer, -} from './utils'; - -/** - * Generate an RSA key pair - * @param options - Key generation options - * @returns Promise resolving to a CryptoKeyPair - * @example - * ```typescript - * const keyPair = await generateRSAKeyPair({ modulusLength: 2048 }); - * ``` - */ -export async function generateRSAKeyPair( - options: RSAKeyOptions = {} -): Promise { - const { - modulusLength = 2048, - hash = 'SHA-256', - } = options; - - const subtle = getCrypto(); - - const keyPair = await subtle.generateKey( - { - name: 'RSA-OAEP', - modulusLength, - publicExponent: new Uint8Array([1, 0, 1]), // 65537 - hash: { name: hash }, - }, - true, - ['encrypt', 'decrypt'] - ); - - return keyPair as CryptoKeyPair; -} - -/** - * Generate an RSA key pair for signing - * @param options - Key generation options - * @returns Promise resolving to a CryptoKeyPair - * @example - * ```typescript - * const keyPair = await generateRSASigningKeyPair({ modulusLength: 2048 }); - * ``` - */ -export async function generateRSASigningKeyPair( - options: RSAKeyOptions = {} -): Promise { - const { - modulusLength = 2048, - hash = 'SHA-256', - } = options; - - const subtle = getCrypto(); - - const keyPair = await subtle.generateKey( - { - name: 'RSA-PSS', - modulusLength, - publicExponent: new Uint8Array([1, 0, 1]), // 65537 - hash: { name: hash }, - }, - true, - ['sign', 'verify'] - ); - - return keyPair as CryptoKeyPair; -} - -/** - * Export a public key to PEM format - * @param key - CryptoKey to export - * @returns Base64 encoded public key in SPKI format - * @example - * ```typescript - * const keyPair = await generateRSAKeyPair(); - * const publicKeyPEM = await exportPublicKey(keyPair.publicKey); - * ``` - */ -export async function exportPublicKey(key: CryptoKey): Promise { - const subtle = getCrypto(); - const exported = await subtle.exportKey('spki', key); - return arrayBufferToBase64(exported); -} - -/** - * Export a private key to PEM format - * @param key - CryptoKey to export - * @returns Base64 encoded private key in PKCS8 format - * @example - * ```typescript - * const keyPair = await generateRSAKeyPair(); - * const privateKeyPEM = await exportPrivateKey(keyPair.privateKey); - * ``` - */ -export async function exportPrivateKey(key: CryptoKey): Promise { - const subtle = getCrypto(); - const exported = await subtle.exportKey('pkcs8', key); - return arrayBufferToBase64(exported); -} - -/** - * Import a public key from base64 format - * @param keyData - Base64 encoded public key in SPKI format - * @param algorithm - Algorithm name ('RSA-OAEP', 'RSA-PSS', or 'RSASSA-PKCS1-v1_5') - * @param hash - Hash algorithm - * @param keyUsages - Key usages - * @returns Promise resolving to a CryptoKey - * @example - * ```typescript - * const publicKey = await importPublicKey(publicKeyPEM, 'RSA-OAEP', 'SHA-256', ['encrypt']); - * ``` - */ -export async function importPublicKey( - keyData: string, - algorithm: 'RSA-OAEP' | 'RSA-PSS' | 'RSASSA-PKCS1-v1_5' = 'RSA-OAEP', - hash: 'SHA-256' | 'SHA-384' | 'SHA-512' = 'SHA-256', - keyUsages: KeyUsage[] = ['encrypt'] -): Promise { - const subtle = getCrypto(); - const keyBuffer = base64ToArrayBuffer(keyData); - - return subtle.importKey( - 'spki', - keyBuffer, - { - name: algorithm, - hash: { name: hash }, - }, - true, - keyUsages - ); -} - -/** - * Import a private key from base64 format - * @param keyData - Base64 encoded private key in PKCS8 format - * @param algorithm - Algorithm name ('RSA-OAEP', 'RSA-PSS', or 'RSASSA-PKCS1-v1_5') - * @param hash - Hash algorithm - * @param keyUsages - Key usages - * @returns Promise resolving to a CryptoKey - * @example - * ```typescript - * const privateKey = await importPrivateKey(privateKeyPEM, 'RSA-OAEP', 'SHA-256', ['decrypt']); - * ``` - */ -export async function importPrivateKey( - keyData: string, - algorithm: 'RSA-OAEP' | 'RSA-PSS' | 'RSASSA-PKCS1-v1_5' = 'RSA-OAEP', - hash: 'SHA-256' | 'SHA-384' | 'SHA-512' = 'SHA-256', - keyUsages: KeyUsage[] = ['decrypt'] -): Promise { - const subtle = getCrypto(); - const keyBuffer = base64ToArrayBuffer(keyData); - - return subtle.importKey( - 'pkcs8', - keyBuffer, - { - name: algorithm, - hash: { name: hash }, - }, - true, - keyUsages - ); -} - -/** - * Encrypt data using RSA-OAEP - * @param data - Data to encrypt (string or Uint8Array) - * @param publicKey - Public key for encryption - * @param options - Encryption options - * @returns Base64 encoded encrypted data - * @example - * ```typescript - * const keyPair = await generateRSAKeyPair(); - * const encrypted = await encryptRSA('secret data', keyPair.publicKey); - * ``` - */ -export async function encryptRSA( - data: string | Uint8Array, - publicKey: CryptoKey, - options: RSAEncryptOptions = {} -): Promise { - const { hash = 'SHA-256' } = options; - - const subtle = getCrypto(); - const dataBuffer = typeof data === 'string' ? stringToUint8Array(data) : data; - - const encrypted = await subtle.encrypt( - { - name: 'RSA-OAEP', - }, - publicKey, - dataBuffer as BufferSource - ); - - return arrayBufferToBase64(encrypted); -} - -/** - * Decrypt data using RSA-OAEP - * @param encryptedData - Base64 encoded encrypted data - * @param privateKey - Private key for decryption - * @param options - Decryption options - * @returns Decrypted data as string - * @example - * ```typescript - * const keyPair = await generateRSAKeyPair(); - * const encrypted = await encryptRSA('secret data', keyPair.publicKey); - * const decrypted = await decryptRSA(encrypted, keyPair.privateKey); - * ``` - */ -export async function decryptRSA( - encryptedData: string, - privateKey: CryptoKey, - options: RSADecryptOptions = {} -): Promise { - const { hash = 'SHA-256' } = options; - - const subtle = getCrypto(); - const dataBuffer = base64ToArrayBuffer(encryptedData); - - const decrypted = await subtle.decrypt( - { - name: 'RSA-OAEP', - }, - privateKey, - dataBuffer - ); - - return uint8ArrayToString(new Uint8Array(decrypted)); -} - -/** - * Sign data using RSA-PSS or RSASSA-PKCS1-v1_5 - * @param data - Data to sign (string or Uint8Array) - * @param privateKey - Private key for signing - * @param options - Signing options - * @returns Base64 encoded signature - * @example - * ```typescript - * const keyPair = await generateRSASigningKeyPair(); - * const signature = await signRSA('my message', keyPair.privateKey); - * ``` - */ -export async function signRSA( - data: string | Uint8Array, - privateKey: CryptoKey, - options: RSASignOptions = {} -): Promise { - const { - algorithm = 'RSA-PSS', - hash = 'SHA-256', - saltLength = 32, - } = options; - - const subtle = getCrypto(); - const dataBuffer = typeof data === 'string' ? stringToUint8Array(data) : data; - - const algorithmParams = algorithm === 'RSA-PSS' - ? { name: algorithm, saltLength } - : { name: algorithm }; - - const signature = await subtle.sign( - algorithmParams, - privateKey, - dataBuffer as BufferSource - ); - - return arrayBufferToBase64(signature); -} - -/** - * Verify a signature using RSA-PSS or RSASSA-PKCS1-v1_5 - * @param data - Original data that was signed - * @param signature - Base64 encoded signature - * @param publicKey - Public key for verification - * @param options - Verification options - * @returns True if signature is valid, false otherwise - * @example - * ```typescript - * const keyPair = await generateRSASigningKeyPair(); - * const signature = await signRSA('my message', keyPair.privateKey); - * const isValid = await verifyRSA('my message', signature, keyPair.publicKey); - * ``` - */ -export async function verifyRSA( - data: string | Uint8Array, - signature: string, - publicKey: CryptoKey, - options: RSAVerifyOptions = {} -): Promise { - const { - algorithm = 'RSA-PSS', - hash = 'SHA-256', - saltLength = 32, - } = options; - - const subtle = getCrypto(); - const dataBuffer = typeof data === 'string' ? stringToUint8Array(data) : data; - const signatureBuffer = base64ToArrayBuffer(signature); - - const algorithmParams = algorithm === 'RSA-PSS' - ? { name: algorithm, saltLength } - : { name: algorithm }; - - return subtle.verify( - algorithmParams, - publicKey, - signatureBuffer, - dataBuffer as BufferSource - ); -} diff --git a/packages/edge-crypto/src/sign.ts b/packages/edge-crypto/src/sign.ts deleted file mode 100644 index bd55669..0000000 --- a/packages/edge-crypto/src/sign.ts +++ /dev/null @@ -1,143 +0,0 @@ -import type { SignOptions, VerifyOptions, HashAlgorithm } from './types'; -import { - getCrypto, - stringToUint8Array, - arrayBufferToBase64, - base64ToArrayBuffer, -} from './utils'; - -/** - * Sign data using HMAC - * @param data - Data to sign (string or Uint8Array) - * @param secret - Secret key for signing - * @param options - Signing options - * @returns Base64 encoded signature - * @example - * ```typescript - * const signature = await sign('my message', 'my-secret-key'); - * const isValid = await verify('my message', signature, 'my-secret-key'); - * ``` - */ -export async function sign( - data: string | Uint8Array, - secret: string, - options: SignOptions = {} -): Promise { - const { - algorithm = 'HMAC', - hash = 'SHA-256', - } = options; - - const subtle = getCrypto(); - const dataBuffer = typeof data === 'string' ? stringToUint8Array(data) : data; - const secretBuffer = stringToUint8Array(secret); - - const key = await subtle.importKey( - 'raw', - secretBuffer as BufferSource, - { - name: algorithm, - hash: { name: hash }, - }, - false, - ['sign'] - ); - - const signature = await subtle.sign( - algorithm, - key, - dataBuffer as BufferSource - ); - - return arrayBufferToBase64(signature); -} - -/** - * Verify a signature using HMAC - * @param data - Original data that was signed - * @param signature - Base64 encoded signature from sign() - * @param secret - Secret key used for signing - * @param options - Verification options - * @returns True if signature is valid, false otherwise - * @example - * ```typescript - * const signature = await sign('my message', 'my-secret-key'); - * const isValid = await verify('my message', signature, 'my-secret-key'); - * console.log(isValid); // true - * ``` - */ -export async function verify( - data: string | Uint8Array, - signature: string, - secret: string, - options: VerifyOptions = {} -): Promise { - const { - algorithm = 'HMAC', - hash = 'SHA-256', - } = options; - - const subtle = getCrypto(); - const dataBuffer = typeof data === 'string' ? stringToUint8Array(data) : data; - const secretBuffer = stringToUint8Array(secret); - const signatureBuffer = base64ToArrayBuffer(signature); - - const key = await subtle.importKey( - 'raw', - secretBuffer as BufferSource, - { - name: algorithm, - hash: { name: hash }, - }, - false, - ['verify'] - ); - - return subtle.verify( - algorithm, - key, - signatureBuffer, - dataBuffer as BufferSource - ); -} - -/** - * Generate a hash of data - * @param data - Data to hash - * @param algorithm - Hash algorithm to use - * @returns Base64 encoded hash - * @example - * ```typescript - * const hash = await hash('my data', 'SHA-256'); - * console.log(hash); // base64 encoded hash - * ``` - */ -export async function hash( - data: string | Uint8Array, - algorithm: HashAlgorithm = 'SHA-256' -): Promise { - const subtle = getCrypto(); - const dataBuffer = typeof data === 'string' ? stringToUint8Array(data) : data; - - const hashBuffer = await subtle.digest( - algorithm, - dataBuffer as BufferSource - ); - - return arrayBufferToBase64(hashBuffer); -} - -/** - * Generate a random key for HMAC signing - * @param length - Length of the key in bytes (default: 32) - * @returns Base64 encoded random key - * @example - * ```typescript - * const key = generateKey(); - * const signature = await sign('my message', key); - * ``` - */ -export function generateKey(length: number = 32): string { - const key = crypto.getRandomValues(new Uint8Array(length)); - return arrayBufferToBase64(key.buffer as ArrayBuffer); -} diff --git a/packages/edge-crypto/src/types.ts b/packages/edge-crypto/src/types.ts deleted file mode 100644 index 5396e6e..0000000 --- a/packages/edge-crypto/src/types.ts +++ /dev/null @@ -1,213 +0,0 @@ -/** - * Supported encryption algorithms - */ -export type EncryptionAlgorithm = 'AES-GCM' | 'AES-CBC' | 'RSA-OAEP'; - -/** - * Supported signing algorithms - */ -export type SigningAlgorithm = 'HMAC' | 'RSASSA-PKCS1-v1_5' | 'RSA-PSS' | 'ECDSA'; - -/** - * Supported hash algorithms - */ -export type HashAlgorithm = 'SHA-256' | 'SHA-384' | 'SHA-512'; - -/** - * Options for encryption operations - */ -export interface EncryptOptions { - /** - * Algorithm to use for encryption - * @default 'AES-GCM' - */ - algorithm?: EncryptionAlgorithm; - - /** - * Initialization vector (IV) for encryption - * If not provided, a random IV will be generated - */ - iv?: Uint8Array; - - /** - * Key length in bits - * @default 256 - */ - keyLength?: 128 | 192 | 256; -} - -/** - * Options for decryption operations - */ -export interface DecryptOptions { - /** - * Algorithm used for encryption - * @default 'AES-GCM' - */ - algorithm?: EncryptionAlgorithm; - - /** - * Key length in bits - * @default 256 - */ - keyLength?: 128 | 192 | 256; -} - -/** - * Options for signing operations - */ -export interface SignOptions { - /** - * Algorithm to use for signing - * @default 'HMAC' - */ - algorithm?: SigningAlgorithm; - - /** - * Hash algorithm to use - * @default 'SHA-256' - */ - hash?: HashAlgorithm; -} - -/** - * Options for verification operations - */ -export interface VerifyOptions { - /** - * Algorithm used for signing - * @default 'HMAC' - */ - algorithm?: SigningAlgorithm; - - /** - * Hash algorithm used - * @default 'SHA-256' - */ - hash?: HashAlgorithm; -} - -/** - * Encrypted data structure - */ -export interface EncryptedData { - /** - * Encrypted data as base64 string - */ - data: string; - - /** - * Initialization vector as base64 string - */ - iv: string; - - /** - * Salt used for key derivation as base64 string - */ - salt: string; - - /** - * Algorithm used for encryption - */ - algorithm: EncryptionAlgorithm; -} - -/** - * Key pair for asymmetric cryptography - */ -export interface CryptoKeyPair { - /** - * Public key - */ - publicKey: CryptoKey; - - /** - * Private key - */ - privateKey: CryptoKey; -} - -/** - * RSA key generation options - */ -export interface RSAKeyOptions { - /** - * Modulus length in bits - * @default 2048 - */ - modulusLength?: 2048 | 4096; - - /** - * Hash algorithm for RSA operations - * @default 'SHA-256' - */ - hash?: HashAlgorithm; -} - -/** - * RSA encryption options - */ -export interface RSAEncryptOptions { - /** - * Hash algorithm for RSA-OAEP - * @default 'SHA-256' - */ - hash?: HashAlgorithm; -} - -/** - * RSA decryption options - */ -export interface RSADecryptOptions { - /** - * Hash algorithm for RSA-OAEP - * @default 'SHA-256' - */ - hash?: HashAlgorithm; -} - -/** - * RSA signing options - */ -export interface RSASignOptions { - /** - * Algorithm to use for signing - * @default 'RSA-PSS' - */ - algorithm?: 'RSA-PSS' | 'RSASSA-PKCS1-v1_5'; - - /** - * Hash algorithm to use - * @default 'SHA-256' - */ - hash?: HashAlgorithm; - - /** - * Salt length for RSA-PSS (in bytes) - * @default 32 - */ - saltLength?: number; -} - -/** - * RSA verification options - */ -export interface RSAVerifyOptions { - /** - * Algorithm used for signing - * @default 'RSA-PSS' - */ - algorithm?: 'RSA-PSS' | 'RSASSA-PKCS1-v1_5'; - - /** - * Hash algorithm used - * @default 'SHA-256' - */ - hash?: HashAlgorithm; - - /** - * Salt length for RSA-PSS (in bytes) - * @default 32 - */ - saltLength?: number; -} diff --git a/packages/edge-crypto/src/utils.ts b/packages/edge-crypto/src/utils.ts deleted file mode 100644 index 43ba8d3..0000000 --- a/packages/edge-crypto/src/utils.ts +++ /dev/null @@ -1,150 +0,0 @@ -/** - * Check if SubtleCrypto is supported in the current environment - * @returns True if SubtleCrypto is available, false otherwise - * @example - * ```typescript - * if (isSupported()) { - * const encrypted = await encrypt('data', 'password'); - * } else { - * console.error('Crypto operations are not supported in this environment'); - * } - * ``` - */ -export function isSupported(): boolean { - try { - // Browser and Cloudflare Workers - if (typeof crypto !== 'undefined' && crypto.subtle) { - return true; - } - - // Node.js - if (typeof globalThis !== 'undefined' && globalThis.crypto?.subtle) { - return true; - } - - return false; - } catch { - return false; - } -} - -/** - * Get the global crypto object (works in Node.js, browsers, and Cloudflare Workers) - * @returns The SubtleCrypto instance - * @throws {Error} If crypto is not available - */ -export function getCrypto(): SubtleCrypto { - // Browser and Cloudflare Workers - if (typeof crypto !== 'undefined' && crypto.subtle) { - return crypto.subtle; - } - - // Node.js - if (typeof globalThis !== 'undefined' && globalThis.crypto?.subtle) { - return globalThis.crypto.subtle; - } - - throw new Error('SubtleCrypto is not available in this environment'); -} - -/** - * Convert a string to Uint8Array - * @param str - String to convert - * @returns Uint8Array representation - */ -export function stringToUint8Array(str: string): Uint8Array { - return new TextEncoder().encode(str); -} - -/** - * Convert Uint8Array to string - * @param arr - Uint8Array to convert - * @returns String representation - */ -export function uint8ArrayToString(arr: Uint8Array): string { - return new TextDecoder().decode(arr); -} - -/** - * Convert ArrayBuffer to base64 string - * @param buffer - ArrayBuffer to convert - * @returns Base64 encoded string - */ -export function arrayBufferToBase64(buffer: ArrayBuffer): string { - const bytes = new Uint8Array(buffer); - let binary = ''; - for (let i = 0; i < bytes.length; i++) { - binary += String.fromCharCode(bytes[i]); - } - return btoa(binary); -} - -/** - * Convert base64 string to ArrayBuffer - * @param base64 - Base64 encoded string - * @returns ArrayBuffer - */ -export function base64ToArrayBuffer(base64: string): ArrayBuffer { - const binary = atob(base64); - const bytes = new Uint8Array(binary.length); - for (let i = 0; i < binary.length; i++) { - bytes[i] = binary.charCodeAt(i); - } - return bytes.buffer; -} - -/** - * Generate a random salt - * @param length - Length of the salt in bytes - * @returns Random salt as Uint8Array - */ -export function generateSalt(length: number = 16): Uint8Array { - return crypto.getRandomValues(new Uint8Array(length)); -} - -/** - * Generate a random initialization vector (IV) - * @param length - Length of the IV in bytes - * @returns Random IV as Uint8Array - */ -export function generateIV(length: number = 12): Uint8Array { - return crypto.getRandomValues(new Uint8Array(length)); -} - -/** - * Derive a cryptographic key from a password - * @param password - Password to derive key from - * @param salt - Salt for key derivation - * @param keyLength - Length of the key in bits - * @param algorithm - Algorithm to use the key with - * @returns Derived CryptoKey - */ -export async function deriveKey( - password: string, - salt: Uint8Array, - keyLength: number = 256, - algorithm: string = 'AES-GCM' -): Promise { - const subtle = getCrypto(); - const passwordBuffer = stringToUint8Array(password); - const passwordKey = await subtle.importKey( - 'raw', - passwordBuffer as BufferSource, - 'PBKDF2', - false, - ['deriveBits', 'deriveKey'] - ); - - return subtle.deriveKey( - { - name: 'PBKDF2', - salt: salt as BufferSource, - iterations: 100000, - hash: 'SHA-256', - }, - passwordKey, - { name: algorithm, length: keyLength }, - false, - ['encrypt', 'decrypt'] - ); -} diff --git a/packages/edge-crypto/test/encrypt.test.ts b/packages/edge-crypto/test/encrypt.test.ts deleted file mode 100644 index bdfa5ad..0000000 --- a/packages/edge-crypto/test/encrypt.test.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { encrypt, decrypt, encryptToString, decryptFromString } from '../src/encrypt'; - -describe('Encryption', () => { - const testData = 'Hello, World! This is a test message.'; - const password = 'my-secure-password-123'; - - describe('encrypt/decrypt', () => { - it('should encrypt and decrypt data successfully', async () => { - const encrypted = await encrypt(testData, password); - - expect(encrypted).toHaveProperty('data'); - expect(encrypted).toHaveProperty('iv'); - expect(encrypted).toHaveProperty('salt'); - expect(encrypted).toHaveProperty('algorithm'); - expect(encrypted.algorithm).toBe('AES-GCM'); - - const decrypted = await decrypt(encrypted, password); - expect(decrypted).toBe(testData); - }); - - it('should encrypt Uint8Array data', async () => { - const encoder = new TextEncoder(); - const dataBuffer = encoder.encode(testData); - - const encrypted = await encrypt(dataBuffer, password); - const decrypted = await decrypt(encrypted, password); - - expect(decrypted).toBe(testData); - }); - - it('should fail to decrypt with wrong password', async () => { - const encrypted = await encrypt(testData, password); - - await expect( - decrypt(encrypted, 'wrong-password') - ).rejects.toThrow(); - }); - - it('should support different key lengths', async () => { - const encrypted128 = await encrypt(testData, password, { keyLength: 128 }); - const decrypted128 = await decrypt(encrypted128, password, { keyLength: 128 }); - expect(decrypted128).toBe(testData); - - const encrypted256 = await encrypt(testData, password, { keyLength: 256 }); - const decrypted256 = await decrypt(encrypted256, password, { keyLength: 256 }); - expect(decrypted256).toBe(testData); - }); - - it('should use custom IV when provided', async () => { - const customIV = crypto.getRandomValues(new Uint8Array(12)); - const encrypted = await encrypt(testData, password, { iv: customIV }); - const decrypted = await decrypt(encrypted, password); - - expect(decrypted).toBe(testData); - }); - }); - - describe('encryptToString/decryptFromString', () => { - it('should encrypt to string and decrypt successfully', async () => { - const encrypted = await encryptToString(testData, password); - - expect(typeof encrypted).toBe('string'); - expect(encrypted.length).toBeGreaterThan(0); - - const decrypted = await decryptFromString(encrypted, password); - expect(decrypted).toBe(testData); - }); - - it('should fail to decrypt string with wrong password', async () => { - const encrypted = await encryptToString(testData, password); - - await expect( - decryptFromString(encrypted, 'wrong-password') - ).rejects.toThrow(); - }); - }); - - describe('AES-CBC algorithm', () => { - it('should encrypt and decrypt with AES-CBC', async () => { - const encrypted = await encrypt(testData, password, { algorithm: 'AES-CBC' }); - - expect(encrypted.algorithm).toBe('AES-CBC'); - - const decrypted = await decrypt(encrypted, password); - expect(decrypted).toBe(testData); - }); - }); -}); diff --git a/packages/edge-crypto/test/rsa.test.ts b/packages/edge-crypto/test/rsa.test.ts deleted file mode 100644 index 276e53f..0000000 --- a/packages/edge-crypto/test/rsa.test.ts +++ /dev/null @@ -1,291 +0,0 @@ -import { - generateRSAKeyPair, - generateRSASigningKeyPair, - exportPublicKey, - exportPrivateKey, - importPublicKey, - importPrivateKey, - encryptRSA, - decryptRSA, - signRSA, - verifyRSA, -} from '../src/rsa'; - -describe('RSA', () => { - const testData = 'Hello, World! This is a test message.'; - - describe('Key Generation', () => { - it('should generate RSA key pair for encryption', async () => { - const keyPair = await generateRSAKeyPair(); - - expect(keyPair).toHaveProperty('publicKey'); - expect(keyPair).toHaveProperty('privateKey'); - expect(keyPair.publicKey.type).toBe('public'); - expect(keyPair.privateKey.type).toBe('private'); - }); - - it('should generate RSA key pair with custom modulus length', async () => { - const keyPair = await generateRSAKeyPair({ modulusLength: 4096 }); - - expect(keyPair.publicKey).toBeDefined(); - expect(keyPair.privateKey).toBeDefined(); - }); - - it('should generate RSA key pair for signing', async () => { - const keyPair = await generateRSASigningKeyPair(); - - expect(keyPair).toHaveProperty('publicKey'); - expect(keyPair).toHaveProperty('privateKey'); - expect(keyPair.publicKey.type).toBe('public'); - expect(keyPair.privateKey.type).toBe('private'); - }); - }); - - describe('Key Import/Export', () => { - it('should export and import public key', async () => { - const keyPair = await generateRSAKeyPair(); - const exported = await exportPublicKey(keyPair.publicKey); - - expect(typeof exported).toBe('string'); - expect(exported.length).toBeGreaterThan(0); - - const imported = await importPublicKey(exported, 'RSA-OAEP', 'SHA-256', ['encrypt']); - expect(imported.type).toBe('public'); - }); - - it('should export and import private key', async () => { - const keyPair = await generateRSAKeyPair(); - const exported = await exportPrivateKey(keyPair.privateKey); - - expect(typeof exported).toBe('string'); - expect(exported.length).toBeGreaterThan(0); - - const imported = await importPrivateKey(exported, 'RSA-OAEP', 'SHA-256', ['decrypt']); - expect(imported.type).toBe('private'); - }); - - it('should export and import signing keys', async () => { - const keyPair = await generateRSASigningKeyPair(); - - const exportedPublic = await exportPublicKey(keyPair.publicKey); - const exportedPrivate = await exportPrivateKey(keyPair.privateKey); - - const importedPublic = await importPublicKey(exportedPublic, 'RSA-PSS', 'SHA-256', ['verify']); - const importedPrivate = await importPrivateKey(exportedPrivate, 'RSA-PSS', 'SHA-256', ['sign']); - - expect(importedPublic.type).toBe('public'); - expect(importedPrivate.type).toBe('private'); - }); - }); - - describe('RSA-OAEP Encryption/Decryption', () => { - it('should encrypt and decrypt data', async () => { - const keyPair = await generateRSAKeyPair(); - - const encrypted = await encryptRSA(testData, keyPair.publicKey); - expect(typeof encrypted).toBe('string'); - expect(encrypted.length).toBeGreaterThan(0); - - const decrypted = await decryptRSA(encrypted, keyPair.privateKey); - expect(decrypted).toBe(testData); - }); - - it('should encrypt Uint8Array data', async () => { - const keyPair = await generateRSAKeyPair(); - const encoder = new TextEncoder(); - const dataBuffer = encoder.encode(testData); - - const encrypted = await encryptRSA(dataBuffer, keyPair.publicKey); - const decrypted = await decryptRSA(encrypted, keyPair.privateKey); - - expect(decrypted).toBe(testData); - }); - - it('should fail to decrypt with wrong private key', async () => { - const keyPair1 = await generateRSAKeyPair(); - const keyPair2 = await generateRSAKeyPair(); - - const encrypted = await encryptRSA(testData, keyPair1.publicKey); - - await expect( - decryptRSA(encrypted, keyPair2.privateKey) - ).rejects.toThrow(); - }); - - it('should work with different hash algorithms', async () => { - const keyPair = await generateRSAKeyPair({ hash: 'SHA-512' }); - - const encrypted = await encryptRSA(testData, keyPair.publicKey, { hash: 'SHA-512' }); - const decrypted = await decryptRSA(encrypted, keyPair.privateKey, { hash: 'SHA-512' }); - - expect(decrypted).toBe(testData); - }); - - it('should work with exported/imported keys', async () => { - const keyPair = await generateRSAKeyPair(); - - const exportedPublic = await exportPublicKey(keyPair.publicKey); - const exportedPrivate = await exportPrivateKey(keyPair.privateKey); - - const importedPublic = await importPublicKey(exportedPublic, 'RSA-OAEP', 'SHA-256', ['encrypt']); - const importedPrivate = await importPrivateKey(exportedPrivate, 'RSA-OAEP', 'SHA-256', ['decrypt']); - - const encrypted = await encryptRSA(testData, importedPublic); - const decrypted = await decryptRSA(encrypted, importedPrivate); - - expect(decrypted).toBe(testData); - }); - }); - - describe('RSA-PSS Signing/Verification', () => { - it('should sign and verify data with RSA-PSS', async () => { - const keyPair = await generateRSASigningKeyPair(); - - const signature = await signRSA(testData, keyPair.privateKey); - expect(typeof signature).toBe('string'); - expect(signature.length).toBeGreaterThan(0); - - const isValid = await verifyRSA(testData, signature, keyPair.publicKey); - expect(isValid).toBe(true); - }); - - it('should sign Uint8Array data', async () => { - const keyPair = await generateRSASigningKeyPair(); - const encoder = new TextEncoder(); - const dataBuffer = encoder.encode(testData); - - const signature = await signRSA(dataBuffer, keyPair.privateKey); - const isValid = await verifyRSA(dataBuffer, signature, keyPair.publicKey); - - expect(isValid).toBe(true); - }); - - it('should fail verification with wrong public key', async () => { - const keyPair1 = await generateRSASigningKeyPair(); - const keyPair2 = await generateRSASigningKeyPair(); - - const signature = await signRSA(testData, keyPair1.privateKey); - const isValid = await verifyRSA(testData, signature, keyPair2.publicKey); - - expect(isValid).toBe(false); - }); - - it('should fail verification with modified data', async () => { - const keyPair = await generateRSASigningKeyPair(); - - const signature = await signRSA(testData, keyPair.privateKey); - const isValid = await verifyRSA(testData + ' modified', signature, keyPair.publicKey); - - expect(isValid).toBe(false); - }); - - it('should support different hash algorithms', async () => { - const keyPair256 = await generateRSASigningKeyPair({ hash: 'SHA-256' }); - const signature256 = await signRSA(testData, keyPair256.privateKey, { hash: 'SHA-256' }); - const isValid256 = await verifyRSA(testData, signature256, keyPair256.publicKey, { hash: 'SHA-256' }); - expect(isValid256).toBe(true); - - const keyPair384 = await generateRSASigningKeyPair({ hash: 'SHA-384' }); - const signature384 = await signRSA(testData, keyPair384.privateKey, { hash: 'SHA-384' }); - const isValid384 = await verifyRSA(testData, signature384, keyPair384.publicKey, { hash: 'SHA-384' }); - expect(isValid384).toBe(true); - - const keyPair512 = await generateRSASigningKeyPair({ hash: 'SHA-512' }); - const signature512 = await signRSA(testData, keyPair512.privateKey, { hash: 'SHA-512' }); - const isValid512 = await verifyRSA(testData, signature512, keyPair512.publicKey, { hash: 'SHA-512' }); - expect(isValid512).toBe(true); - }); - - it('should support custom salt length', async () => { - const keyPair = await generateRSASigningKeyPair(); - - const signature = await signRSA(testData, keyPair.privateKey, { saltLength: 64 }); - const isValid = await verifyRSA(testData, signature, keyPair.publicKey, { saltLength: 64 }); - - expect(isValid).toBe(true); - }); - - it('should work with exported/imported keys', async () => { - const keyPair = await generateRSASigningKeyPair(); - - const exportedPublic = await exportPublicKey(keyPair.publicKey); - const exportedPrivate = await exportPrivateKey(keyPair.privateKey); - - const importedPublic = await importPublicKey(exportedPublic, 'RSA-PSS', 'SHA-256', ['verify']); - const importedPrivate = await importPrivateKey(exportedPrivate, 'RSA-PSS', 'SHA-256', ['sign']); - - const signature = await signRSA(testData, importedPrivate); - const isValid = await verifyRSA(testData, signature, importedPublic); - - expect(isValid).toBe(true); - }); - }); - - describe('RSASSA-PKCS1-v1_5 Signing/Verification', () => { - it('should sign and verify data with RSASSA-PKCS1-v1_5', async () => { - // Generate key pair with RSASSA-PKCS1-v1_5 - const subtle = crypto.subtle; - const keyPair = await subtle.generateKey( - { - name: 'RSASSA-PKCS1-v1_5', - modulusLength: 2048, - publicExponent: new Uint8Array([1, 0, 1]), - hash: { name: 'SHA-256' }, - }, - true, - ['sign', 'verify'] - ); - - const signature = await signRSA(testData, keyPair.privateKey, { algorithm: 'RSASSA-PKCS1-v1_5' }); - expect(typeof signature).toBe('string'); - - const isValid = await verifyRSA(testData, signature, keyPair.publicKey, { algorithm: 'RSASSA-PKCS1-v1_5' }); - expect(isValid).toBe(true); - }); - - it('should fail verification with modified data', async () => { - const subtle = crypto.subtle; - const keyPair = await subtle.generateKey( - { - name: 'RSASSA-PKCS1-v1_5', - modulusLength: 2048, - publicExponent: new Uint8Array([1, 0, 1]), - hash: { name: 'SHA-256' }, - }, - true, - ['sign', 'verify'] - ); - - const signature = await signRSA(testData, keyPair.privateKey, { algorithm: 'RSASSA-PKCS1-v1_5' }); - const isValid = await verifyRSA(testData + ' modified', signature, keyPair.publicKey, { algorithm: 'RSASSA-PKCS1-v1_5' }); - - expect(isValid).toBe(false); - }); - - it('should support different hash algorithms', async () => { - const subtle = crypto.subtle; - - const keyPair512 = await subtle.generateKey( - { - name: 'RSASSA-PKCS1-v1_5', - modulusLength: 2048, - publicExponent: new Uint8Array([1, 0, 1]), - hash: { name: 'SHA-512' }, - }, - true, - ['sign', 'verify'] - ); - - const signature = await signRSA(testData, keyPair512.privateKey, { - algorithm: 'RSASSA-PKCS1-v1_5', - hash: 'SHA-512' - }); - const isValid = await verifyRSA(testData, signature, keyPair512.publicKey, { - algorithm: 'RSASSA-PKCS1-v1_5', - hash: 'SHA-512' - }); - - expect(isValid).toBe(true); - }); - }); -}); diff --git a/packages/edge-crypto/test/sign.test.ts b/packages/edge-crypto/test/sign.test.ts deleted file mode 100644 index 815c361..0000000 --- a/packages/edge-crypto/test/sign.test.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { sign, verify, hash, generateKey } from '../src/sign'; - -describe('Signing', () => { - const testData = 'Hello, World! This is a test message.'; - const secret = 'my-secret-key-123'; - - describe('sign/verify', () => { - it('should sign and verify data successfully', async () => { - const signature = await sign(testData, secret); - - expect(typeof signature).toBe('string'); - expect(signature.length).toBeGreaterThan(0); - - const isValid = await verify(testData, signature, secret); - expect(isValid).toBe(true); - }); - - it('should sign Uint8Array data', async () => { - const encoder = new TextEncoder(); - const dataBuffer = encoder.encode(testData); - - const signature = await sign(dataBuffer, secret); - const isValid = await verify(dataBuffer, signature, secret); - - expect(isValid).toBe(true); - }); - - it('should fail verification with wrong secret', async () => { - const signature = await sign(testData, secret); - const isValid = await verify(testData, signature, 'wrong-secret'); - - expect(isValid).toBe(false); - }); - - it('should fail verification with modified data', async () => { - const signature = await sign(testData, secret); - const isValid = await verify(testData + ' modified', signature, secret); - - expect(isValid).toBe(false); - }); - - it('should support different hash algorithms', async () => { - const signature256 = await sign(testData, secret, { hash: 'SHA-256' }); - const isValid256 = await verify(testData, signature256, secret, { hash: 'SHA-256' }); - expect(isValid256).toBe(true); - - const signature384 = await sign(testData, secret, { hash: 'SHA-384' }); - const isValid384 = await verify(testData, signature384, secret, { hash: 'SHA-384' }); - expect(isValid384).toBe(true); - - const signature512 = await sign(testData, secret, { hash: 'SHA-512' }); - const isValid512 = await verify(testData, signature512, secret, { hash: 'SHA-512' }); - expect(isValid512).toBe(true); - }); - }); - - describe('hash', () => { - it('should generate SHA-256 hash', async () => { - const hash256 = await hash(testData); - - expect(typeof hash256).toBe('string'); - expect(hash256.length).toBeGreaterThan(0); - - // Same data should produce same hash - const hash256Again = await hash(testData); - expect(hash256).toBe(hash256Again); - }); - - it('should generate different hashes for different data', async () => { - const hash1 = await hash('data1'); - const hash2 = await hash('data2'); - - expect(hash1).not.toBe(hash2); - }); - - it('should support different hash algorithms', async () => { - const hash256 = await hash(testData, 'SHA-256'); - const hash384 = await hash(testData, 'SHA-384'); - const hash512 = await hash(testData, 'SHA-512'); - - expect(hash256).not.toBe(hash384); - expect(hash384).not.toBe(hash512); - expect(hash256).not.toBe(hash512); - }); - - it('should hash Uint8Array data', async () => { - const encoder = new TextEncoder(); - const dataBuffer = encoder.encode(testData); - - const hashFromBuffer = await hash(dataBuffer); - const hashFromString = await hash(testData); - - expect(hashFromBuffer).toBe(hashFromString); - }); - }); - - describe('generateKey', () => { - it('should generate random key', () => { - const key1 = generateKey(); - const key2 = generateKey(); - - expect(typeof key1).toBe('string'); - expect(typeof key2).toBe('string'); - expect(key1).not.toBe(key2); - }); - - it('should generate key with custom length', () => { - const key16 = generateKey(16); - const key32 = generateKey(32); - const key64 = generateKey(64); - - expect(key16.length).toBeLessThan(key32.length); - expect(key32.length).toBeLessThan(key64.length); - }); - - it('should work with sign/verify', async () => { - const key = generateKey(); - const signature = await sign(testData, key); - const isValid = await verify(testData, signature, key); - - expect(isValid).toBe(true); - }); - }); -}); diff --git a/packages/edge-crypto/test/utils.test.ts b/packages/edge-crypto/test/utils.test.ts deleted file mode 100644 index 0cf8241..0000000 --- a/packages/edge-crypto/test/utils.test.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { - isSupported, - getCrypto, - stringToUint8Array, - uint8ArrayToString, - arrayBufferToBase64, - base64ToArrayBuffer, - generateSalt, - generateIV, - deriveKey, -} from '../src/utils'; - -describe('Utils', () => { - describe('isSupported', () => { - it('should return true in Node.js environment', () => { - const supported = isSupported(); - expect(supported).toBe(true); - }); - - it('should be callable without throwing', () => { - expect(() => isSupported()).not.toThrow(); - }); - }); - - describe('getCrypto', () => { - it('should return SubtleCrypto instance', () => { - const crypto = getCrypto(); - expect(crypto).toBeDefined(); - expect(typeof crypto.encrypt).toBe('function'); - expect(typeof crypto.decrypt).toBe('function'); - }); - }); - - describe('stringToUint8Array/uint8ArrayToString', () => { - it('should convert string to Uint8Array and back', () => { - const original = 'Hello, World! ์•ˆ๋…•ํ•˜์„ธ์š” ๐ŸŒ'; - const buffer = stringToUint8Array(original); - - expect(buffer).toBeInstanceOf(Uint8Array); - expect(buffer.length).toBeGreaterThan(0); - - const converted = uint8ArrayToString(buffer); - expect(converted).toBe(original); - }); - - it('should handle empty string', () => { - const buffer = stringToUint8Array(''); - expect(buffer.length).toBe(0); - - const converted = uint8ArrayToString(buffer); - expect(converted).toBe(''); - }); - - it('should handle unicode characters', () => { - const original = '๐Ÿš€ Unicode test: ํ•œ๊ธ€, ๆ—ฅๆœฌ่ชž, ไธญๆ–‡'; - const buffer = stringToUint8Array(original); - const converted = uint8ArrayToString(buffer); - - expect(converted).toBe(original); - }); - }); - - describe('arrayBufferToBase64/base64ToArrayBuffer', () => { - it('should convert ArrayBuffer to base64 and back', () => { - const original = new Uint8Array([1, 2, 3, 4, 5, 255, 128, 0]); - const base64 = arrayBufferToBase64(original.buffer as ArrayBuffer); - - expect(typeof base64).toBe('string'); - expect(base64.length).toBeGreaterThan(0); - - const converted = new Uint8Array(base64ToArrayBuffer(base64)); - expect(converted).toEqual(original); - }); - - it('should handle empty buffer', () => { - const original = new Uint8Array([]); - const base64 = arrayBufferToBase64(original.buffer as ArrayBuffer); - - expect(base64).toBe(''); - - const converted = new Uint8Array(base64ToArrayBuffer(base64)); - expect(converted.length).toBe(0); - }); - }); - - describe('generateSalt', () => { - it('should generate random salt with default length', () => { - const salt1 = generateSalt(); - const salt2 = generateSalt(); - - expect(salt1).toBeInstanceOf(Uint8Array); - expect(salt1.length).toBe(16); - expect(salt2.length).toBe(16); - expect(salt1).not.toEqual(salt2); - }); - - it('should generate salt with custom length', () => { - const salt = generateSalt(32); - - expect(salt.length).toBe(32); - }); - }); - - describe('generateIV', () => { - it('should generate random IV with default length', () => { - const iv1 = generateIV(); - const iv2 = generateIV(); - - expect(iv1).toBeInstanceOf(Uint8Array); - expect(iv1.length).toBe(12); - expect(iv2.length).toBe(12); - expect(iv1).not.toEqual(iv2); - }); - - it('should generate IV with custom length', () => { - const iv = generateIV(16); - - expect(iv.length).toBe(16); - }); - }); - - describe('deriveKey', () => { - it('should derive key from password', async () => { - const password = 'my-password'; - const salt = generateSalt(); - - const key = await deriveKey(password, salt); - - expect(key).toBeDefined(); - expect(key.type).toBe('secret'); - }); - - it('should derive same key for same password and salt', async () => { - const password = 'my-password'; - const salt = generateSalt(); - - const key1 = await deriveKey(password, salt); - const key2 = await deriveKey(password, salt); - - // Keys should be the same (we can't directly compare CryptoKey objects, - // but we can verify they work the same way) - expect(key1.type).toBe(key2.type); - expect(key1.algorithm).toEqual(key2.algorithm); - }); - - it('should derive different keys for different salts', async () => { - const password = 'my-password'; - const salt1 = generateSalt(); - const salt2 = generateSalt(); - - const key1 = await deriveKey(password, salt1); - const key2 = await deriveKey(password, salt2); - - // We can't directly compare keys, but they should be different - // This is verified by the encryption tests - expect(key1).toBeDefined(); - expect(key2).toBeDefined(); - }); - - it('should support different key lengths', async () => { - const password = 'my-password'; - const salt = generateSalt(); - - const key128 = await deriveKey(password, salt, 128); - const key256 = await deriveKey(password, salt, 256); - - expect(key128).toBeDefined(); - expect(key256).toBeDefined(); - }); - }); -}); diff --git a/packages/edge-crypto/tsconfig.json b/packages/edge-crypto/tsconfig.json deleted file mode 100644 index 0f747a7..0000000 --- a/packages/edge-crypto/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "lib": ["ESNext", "DOM"], - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - } -} diff --git a/packages/gauss-spiral/.gitignore b/packages/gauss-spiral/.gitignore deleted file mode 100644 index c6bba59..0000000 --- a/packages/gauss-spiral/.gitignore +++ /dev/null @@ -1,130 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* diff --git a/packages/gauss-spiral/.npmignore b/packages/gauss-spiral/.npmignore deleted file mode 100644 index 57d9462..0000000 --- a/packages/gauss-spiral/.npmignore +++ /dev/null @@ -1,129 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* diff --git a/packages/gauss-spiral/README.md b/packages/gauss-spiral/README.md deleted file mode 100644 index 61d04e9..0000000 --- a/packages/gauss-spiral/README.md +++ /dev/null @@ -1,264 +0,0 @@ -# gauss-spiral - -[![Wiki](https://img.shields.io/badge/๐Ÿ“–_Wiki-deepwiki-blue)](https://deepwiki.com/hmmhmmhm/node-packages) - -[![Gauss Spiral](https://hmart.app/en/gauss-spiral/og.png)](https://hmart.app/gauss-spiral) - -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/gauss-spiral)** - -Fill a circle with dots from the center out โ€” efficiently. Compute `(x, y) โ†” n` for very large cases fast (binary search + `O(โˆšm)` counting, `O(log m)` search) with a simple, plug-and-play API โ€” no math background needed. - -Utilities to map between an integer spiral's visit order `n` and lattice coordinates `(x, y)` on Z^2. - -This is NOT Gauss' circle problem nor a number-theory result. The name is only inspirational: we enumerate integer lattice points by expanding rings and ordering points on each ring by angle. - -## Analogy - -Imagine painting dots starting at the center pixel `(0, 0)` and expanding outward so that the circle fills up without gaps. This library tells you: - -- Given a dot's coordinate `(x, y)`, exactly which turn `n` it was placed. -- Given a step `n`, exactly which coordinate `(x, y)` to paint next. - -This is handy for pixel plotting, particle systems, procedural art, or any visualization that needs a deterministic โ€œfrom center outwardsโ€ spiral fill. - -## Benefits - -- **Deterministic mapping**: Stable, reproducible order for every lattice point. -- **Bidirectional**: Convert both `(x, y) โ†’ n` and `n โ†’ (x, y)`. -- **Geometry-first**: Simple arithmetic and `atan2` ordering; no heavy number theory. -- **Incremental-friendly**: Great for progressive rendering or streaming updates. -- **Ring sampling**: Easy to iterate points by radius ring for effects and batching. -- **Zero dependencies**: Plain TypeScript/JavaScript, small bundle. - -## Practical examples - -- **Visual effects / rendering** - - Progressive radial reveal, spiral particle emission, halo expansion. - - Iterate `n = 1..N` and plot `getCoordinates(n)`; stop when `x^2 + y^2` exceeds a radius. - - ```typescript - const maxRadius = 64; // pixels - for (let n = 1; ; n++) { - const { x, y } = getCoordinates(n); - if (x * x + y * y > maxRadius * maxRadius) break; - plotPixel(centerX + x, centerY + y); - } - ``` - -- **GIS / map tiling** - - Prioritize fetching tiles around the center tile `(cx, cy)` in spiral order to maximize perceived responsiveness. - - Use `getCoordinates(n)` as offsets from `(cx, cy)`. - - ```typescript - // 1) Circular tile prefetch around a focal tile (e.g., user location) - async function fetchTilesSpiral(cx: number, cy: number, count: number) { - const tasks: Promise[] = []; - for (let n = 1; n <= count; n++) { - const { x, y } = getCoordinates(n); // (dx, dy) - tasks.push(fetchTile(cx + x, cy + y)); - } - await Promise.allSettled(tasks); - } - - // 2) Drone/robot next-search waypoints (expand search radius while staying coverage-optimal) - function* droneWaypoints(cx: number, cy: number) { - for (let n = 1; ; n++) { - const { x, y } = getCoordinates(n); - yield { latIndex: cy + y, lonIndex: cx + x }; - } - } - - // 3) Military/operations coordinate prioritization (rank tasks by circular proximity) - // Known target deltas (dx, dy) can be ranked by getNFromCoordinates(dx, dy). - targets.sort((a, b) => getNFromCoordinates(a.dx, a.dy) - getNFromCoordinates(b.dx, b.dy)); - ``` - -- **Games / chunk visibility & loading** - - Load chunks around the player in a circle-first fashion to avoid diamond- or square-shaped artifacts. - - Either compute loading order with `getCoordinates(n)` or assign priority to known chunks via `getNFromCoordinates(dx, dy)`. - - ```typescript - const maxChunks = 256; - for (let n = 1; n <= maxChunks; n++) { - const { x, y } = getCoordinates(n); - queueLoadChunk(player.cx + x, player.cy + y); - } - - // Or rank existing chunk deltas by priority index: - chunks.sort((a, b) => getNFromCoordinates(a.dx, a.dy) - getNFromCoordinates(b.dx, b.dy)); - ``` - -## Installation - -```bash -npm install gauss-spiral -``` - -## Usage - -### Gauss Spiral Coordinates - -```typescript -import { getNFromCoordinates, getCoordinates } from 'gauss-spiral'; - -// n from (x, y): how many-th visit is this point in the spiral? -const n = getNFromCoordinates(2, 3); -console.log(n); // e.g. 47 (depends on the spiral's ordering) - -// (x, y) from n: which coordinate is visited at step n? -const coords = getCoordinates(10); -console.log(coords); // { x: number, y: number } -``` - -### Spherical Coordinate Grid System - -The library also provides utilities for converting geographic coordinates (latitude/longitude) into a grid-based diff system, useful for spatial indexing and proximity calculations. - -```typescript -import { - calculateCoordinateDiff, - reconstructCoordinateDiff, - DEG_PER_METER, -} from 'gauss-spiral'; - -// Define a center point (e.g., Seoul, South Korea) -const center = { lat: 37.5665, lng: 126.978 }; - -// Define a target location -const target = { lat: 37.5695, lng: 126.981 }; - -// Convert to grid diff with 3-meter precision -const diff = calculateCoordinateDiff({ - center, - target, - precisionMeters: 3, -}); -console.log(diff); // { lat: 111, lng: 237 } (approximate grid indices) - -// Reconstruct the original coordinates from the diff -const reconstructed = reconstructCoordinateDiff({ - center, - diff, - precisionMeters: 3, -}); -console.log(reconstructed); // Close to original target coordinates - -// Use with Gauss spiral for radial proximity search -const spiralN = getNFromCoordinates(diff.lat, diff.lng); -console.log(spiralN); // Priority index for this location -``` - -**Use cases for spherical coordinate utilities:** - -- **Geospatial indexing**: Convert lat/lng to integer grid indices for efficient spatial queries -- **Proximity search**: Combine with Gauss spiral to prioritize locations by distance from center -- **Map tile systems**: Create custom grid systems with configurable precision -- **Location-based services**: Implement radius-based searches and nearest-neighbor queries -- **Geohashing alternative**: Simple grid-based spatial indexing without external dependencies - -## What this is - -- **Problem**: When plotting integer points outward from the origin in an ever-growing spiral, determine - - `n` for a given `(x, y)` (index of visit), and - - `(x, y)` for a given `n` (coordinate visited at step n). -- **Approach**: We group points by their squared radius `m = x^2 + y^2` (concentric โ€œringsโ€). Within each ring, points are ordered by the polar angle `atan2(y, x)` in clockwise order. The global index `n` is the cumulative count of all points with smaller `m` plus the position within the current ring. - -## Algorithm overview - -- **Rings**: For each integer `m โ‰ฅ 0`, the ring contains all integer solutions of `x^2 + y^2 = m`. -- **Order within a ring**: Sort solutions by `atan2(y, x)` descending (clockwise). Ties are stable and deterministic. -- **Global index**: - - Let `S(m)` be the number of integer points with `x^2 + y^2 โ‰ค m`. - - Then for `(x, y)` with `x^2 + y^2 = m`, `n = S(m-1) + k`, where `k` is the 1-based position in the ring. -- **Inverse (n โ†’ (x, y))**: - - Binary-search the smallest `m` with `S(m) โ‰ฅ n`. - - Set `k = n - S(m-1)` and return the `k`-th point of the ring ordered as above. - -## API - -### Gauss Spiral Functions - -#### `getNFromCoordinates(x: number, y: number): number` - -Returns the 1-based visit index `n` of `(x, y)` in the spiral enumeration. - -**Parameters:** -- `x` - The x-coordinate -- `y` - The y-coordinate - -**Returns:** The index `n (โ‰ฅ 1)` - -#### `getCoordinates(n: number): { x: number; y: number }` - -Returns the lattice coordinate visited at step `n`. - -**Parameters:** -- `n` - The N value (must be > 0) - -**Returns:** `{ x, y }` - -**Throws:** Error if n <= 0 - -### Spherical Coordinate Functions - -#### `calculateCoordinateDiff(options): { lat: number; lng: number }` - -Converts a target coordinate to a grid diff based on a reference center coordinate. Useful for creating a grid-based spatial indexing system. - -**Parameters:** -- `options.center` - The reference coordinate `{ lat: number, lng: number }` -- `options.target` - The target coordinate to convert `{ lat: number, lng: number }` -- `options.precisionMeters` - (Optional) The precision in meters for the conversion. Default: `3` -- `options.degreePerMeter` - (Optional) Conversion factor from meters to degrees. Default: `111000` - -**Returns:** `{ lat: number, lng: number }` - The calculated grid diff for latitude and longitude - -**Example:** -```typescript -const diff = calculateCoordinateDiff({ - center: { lat: 37.5665, lng: 126.978 }, - target: { lat: 37.5695, lng: 126.981 }, - precisionMeters: 3, -}); -``` - -#### `reconstructCoordinateDiff(options): { lat: number; lng: number }` - -Converts a grid diff back into a coordinate based on a reference center coordinate. This reverses the operation done by `calculateCoordinateDiff`. - -**Parameters:** -- `options.center` - The reference coordinate `{ lat: number, lng: number }` -- `options.diff` - The grid diff representing the position `{ lat: number, lng: number }` -- `options.precisionMeters` - (Optional) The precision in meters used in the conversion. Default: `3` -- `options.degreePerMeter` - (Optional) Conversion factor from meters to degrees. Default: `111000` - -**Returns:** `{ lat: number, lng: number }` - The calculated target coordinate - -**Example:** -```typescript -const reconstructed = reconstructCoordinateDiff({ - center: { lat: 37.5665, lng: 126.978 }, - diff: { lat: 111, lng: 237 }, - precisionMeters: 3, -}); -``` - -#### `DEG_PER_METER` - -Constant representing the approximate conversion factor from degrees to meters. Approximately 111,000 meters corresponds to 1 degree of latitude. - -**Value:** `111000` - -## Performance notes - -- Counting `S(m)` is implemented in `O(โˆšm)` using symmetry to aggregate lattice points per `x`. -- `n โ†’ (x, y)` uses a binary search on `m` around an initial guess and then sorts only the ring points for that `m`. - -## Caveats - -- The ordering within each ring is purely geometric (by angle), not arithmetic. It does not encode primes, quadratic residues, or Gaussโ€™ circle estimates. -- The origin `(0, 0)` is defined as `n = 1`. - -## License - -MIT diff --git a/packages/gauss-spiral/jest.config.js b/packages/gauss-spiral/jest.config.js deleted file mode 100644 index c44ef36..0000000 --- a/packages/gauss-spiral/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} **/ -export default { - testEnvironment: "node", - transform: { - "^.+.tsx?$": ["ts-jest", {}], - }, -}; diff --git a/packages/gauss-spiral/package.json b/packages/gauss-spiral/package.json deleted file mode 100644 index 2c12076..0000000 --- a/packages/gauss-spiral/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "gauss-spiral", - "type": "module", - "version": "1.0.1", - "description": "A library for converting between coordinates and indices using the Gauss spiral algorithm", - "source": "src/index.ts", - "exports": { - "types": "./dist/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/index.d.ts", - "scripts": { - "build": "microbundle", - "watch": "microbundle watch", - "test": "jest" - }, - "keywords": [ - "gauss", - "spiral", - "coordinates", - "lattice", - "algorithm", - "math" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/gauss-spiral" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/gauss-spiral#readme", - "devDependencies": { - "@types/jest": "^29.5.13", - "jest": "^29.7.0", - "microbundle": "^0.15.1", - "ts-jest": "^29.2.5", - "typescript": "^5.6.2" - } -} \ No newline at end of file diff --git a/packages/gauss-spiral/src/index.ts b/packages/gauss-spiral/src/index.ts deleted file mode 100644 index 62ce22a..0000000 --- a/packages/gauss-spiral/src/index.ts +++ /dev/null @@ -1,144 +0,0 @@ -/** - * Calculates the N value from the given x and y coordinates. - * - * @param {number} x - The x-coordinate. - * @param {number} y - The y-coordinate. - * @returns {number} The N value. - */ -export const getNFromCoordinates = (x: number, y: number): number => { - // Direct return for origin (0, 0) - if (x === 0 && y === 0) return 1; - - // Calculate the squared sum of coordinates - const m = x * x + y * y; - - // Calculate countLatticePoints(m-1) to find offset - const s_m_minus_1 = m > 0 ? countLatticePoints(m - 1) : 0; - - // Retrieve all lattice points on the circle x^2 + y^2 = m - const points = getPoints(m); - let count = 0; - - // Count how many points have a greater angle - for (const [px, py] of points) if (isAngleGreater(px, py, x, y)) count++; - - const k = count + 1; - - // Return the computed index n - return s_m_minus_1 + k; -}; - -/** - * Calculates the coordinates from the given N value. - * - * @param {number} n - The N value. - * @returns {{ x: number; y: number }} The coordinates {x, y}. - */ -export const getCoordinates = (n: number): { x: number; y: number } => { - if (n <= 0) throw new Error("Invalid value for n."); - if (n === 1) return { x: 0, y: 0 }; - - // Approximate m by using n - const approx_m = Math.floor(n / Math.PI); - // Define delta to narrow down the search range - const delta = Math.ceil(Math.sqrt(n)); - - // Binary search to find the smallest m where s(m) >= n - let low = Math.max(0, approx_m - delta); - let high = approx_m + delta; - - while (low < high) { - const mid = Math.floor((low + high) / 2); - if (countLatticePoints(mid) < n) { - low = mid + 1; - } else { - high = mid; - } - } - const m = low; - - // Calculate s(m-1) to determine the offset - const s_m_minus_1 = m > 0 ? countLatticePoints(m - 1) : 0; - const k = n - s_m_minus_1; - - // Get list of points where x^2 + y^2 = m - const points = getPoints(m); - - // Sort the points in descending order of angles (clockwise) - points.sort((a, b) => { - const angleA = Math.atan2(a[1], a[0]); - const angleB = Math.atan2(b[1], b[0]); - return angleB - angleA; // Sort clockwise - }); - - // Return the k-th point - const [x, y] = points[k - 1]!; - return { x, y }; -}; - -/** - * Calculates the number of lattice points where x^2 + y^2 <= m (optimized version) - * - * @param {number} m - The value m. - * @returns {number} The number of lattice points. - */ -function countLatticePoints(m: number): number { - if (m < 0) return 0; - const r = Math.floor(Math.sqrt(m)); - let count = 0; - for (let x = 0; x <= r; x++) { - const temp = m - x * x; - if (temp < 0) continue; - const k = Math.floor(Math.sqrt(temp)); - count += (x === 0 ? 1 : 2) * (2 * k + 1); // Twice for symmetry around the x-axis, once at x = 0 - } - return count; -} - -/** - * Generates a list of points where x^2 + y^2 = m - * - * @param {number} m - The value m. - * @returns {[number, number][]} The list of points. - */ -function getPoints(m: number): [number, number][] { - const points: [number, number][] = []; - const r = Math.floor(Math.sqrt(m)); - for (let x = -r; x <= r; x++) { - const temp = m - x * x; - if (temp < 0) continue; - const k = Math.floor(Math.sqrt(temp)); - if (k * k === temp) { - if (k > 0) { - points.push([x, k]); - points.push([x, -k]); - } else { - points.push([x, 0]); - } - } - } - return points; -} - -/** - * Compares two points using their cross product for deterministic ordering. - * - * @param {number} px - The x-coordinate of the first point. - * @param {number} py - The y-coordinate of the first point. - * @param {number} x - The x-coordinate of the second point. - * @param {number} y - The y-coordinate of the second point. - * @returns {boolean} True if the angle of the first point is greater than the second point, false otherwise. - */ -function isAngleGreater(px: number, py: number, x: number, y: number): boolean { - const atan2A = Math.atan2(py, px); - const atan2B = Math.atan2(y, x); - if (atan2A === atan2B) return false; - return atan2A > atan2B; -} - -// Export spherical coordinate utilities -export { - calculateCoordinateDiff, - reconstructCoordinateDiff, - DEG_PER_METER, -} from "./spherical"; diff --git a/packages/gauss-spiral/src/spherical.ts b/packages/gauss-spiral/src/spherical.ts deleted file mode 100644 index 3928ba6..0000000 --- a/packages/gauss-spiral/src/spherical.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Approximately 111 km corresponds to 1 degree, thus 1 meter corresponds to approximately 1/111000 degrees. - */ -export const DEG_PER_METER = 111000; - -/** - * Converts a target coordinate to an diff based on a reference center coordinate. - * Useful for creating a grid diff system for spatial data. - * - * @param {Object} center - The reference coordinate with latitude and longitude. - * @param {Object} target - The target coordinate to convert into diff form. - * @param {number} precisionMeters - The precision, in meters, for the conversion. - * @param {number} degreePerMeter - Conversion factor from meters to degrees. Default is 111000. - * @returns {Object} The calculated diff for latitude and longitude. - */ -export function calculateCoordinateDiff({ - center, - target, - precisionMeters = 3, - degreePerMeter = DEG_PER_METER, -}: { - center: { lat: number; lng: number }; - target: { lat: number; lng: number }; - precisionMeters?: number; - degreePerMeter?: number; -}): { lat: number; lng: number } { - // Convert latitude difference from degrees to meters. - const latDiff = (target.lat - center.lat) * degreePerMeter; - - // Convert longitude difference from degrees to meters, adjusting for latitude. - const lngDiff = - (target.lng - center.lng) * - degreePerMeter * - Math.cos((center.lat * Math.PI) / 180); - - // Calculate index by dividing the meter difference by the specified precision. - return { - lat: Math.round(latDiff / precisionMeters), - lng: Math.round(lngDiff / precisionMeters), - }; -} - -/** - * Converts a grid diff back into a coordinate based on a reference center coordinate. - * This reverses the operation done by `calculateCoordinateDiff`. - * - * @param {Object} center - The reference coordinate with latitude and longitude. - * @param {Object} diff - The grid diff representing the position related to the center. - * @param {number} precisionMeters - The precision, in meters, used in the conversion process. - * @param {number} degreePerMeter - Conversion factor from meters to degrees. Default is 111000. - * @returns {Object} The calculated target coordinate. - */ -export function reconstructCoordinateDiff({ - center, - diff, - precisionMeters = 3, - degreePerMeter = DEG_PER_METER, -}: { - center: { lat: number; lng: number }; - diff: { lat: number; lng: number }; - precisionMeters?: number; - degreePerMeter?: number; -}): { lat: number; lng: number } { - // Convert the latitude index back to degrees difference. - const latDiff = (diff.lat * precisionMeters) / degreePerMeter; - - // Convert the longitude index back to degrees difference, adjusting for latitude. - const lngDiff = - (diff.lng * precisionMeters) / - (degreePerMeter * Math.cos((center.lat * Math.PI) / 180)); - - // Add the differences to the center coordinates to get the target coordinates. - const targetLat = center.lat + latDiff; - const targetLng = center.lng + lngDiff; - - return { lat: targetLat, lng: targetLng }; -} diff --git a/packages/gauss-spiral/test/get-coordinates.test.ts b/packages/gauss-spiral/test/get-coordinates.test.ts deleted file mode 100644 index d2e151d..0000000 --- a/packages/gauss-spiral/test/get-coordinates.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { getCoordinates } from "../src/index"; - -describe("getCoordinates function test", () => { - test("N=1 should return origin (0, 0)", () => { - const result = getCoordinates(1); - expect(result.x).toBe(0); - expect(result.y).toBe(0); - }); - - test("N=2 should return a valid point on circle m=1", () => { - const result = getCoordinates(2); - const m = result.x * result.x + result.y * result.y; - expect(m).toBe(1); - }); - - test("N=3 should return a valid point on circle m=1", () => { - const result = getCoordinates(3); - const m = result.x * result.x + result.y * result.y; - expect(m).toBe(1); - }); - - test("N=4 should return a valid point on circle m=1", () => { - const result = getCoordinates(4); - const m = result.x * result.x + result.y * result.y; - expect(m).toBe(1); - }); - - test("N=5 should return a valid point on circle m=1", () => { - const result = getCoordinates(5); - const m = result.x * result.x + result.y * result.y; - expect(m).toBe(1); - }); - - test("Points for N=6 to N=9 should be on circle m=2", () => { - for (let n = 6; n <= 9; n++) { - const result = getCoordinates(n); - const m = result.x * result.x + result.y * result.y; - expect(m).toBe(2); - } - }); - - test("Should return integer coordinates", () => { - const testValues = [1, 2, 5, 10, 15, 20]; - testValues.forEach((n) => { - const result = getCoordinates(n); - expect(Number.isInteger(result.x)).toBe(true); - expect(Number.isInteger(result.y)).toBe(true); - }); - }); - - test("Should throw error for invalid N values", () => { - expect(() => getCoordinates(0)).toThrow("Invalid value for n."); - expect(() => getCoordinates(-1)).toThrow("Invalid value for n."); - expect(() => getCoordinates(-10)).toThrow("Invalid value for n."); - }); - - test("Large N values should work correctly", () => { - const result = getCoordinates(100); - expect(result).toHaveProperty("x"); - expect(result).toHaveProperty("y"); - expect(Number.isInteger(result.x)).toBe(true); - expect(Number.isInteger(result.y)).toBe(true); - }); - - test("Coordinates should satisfy the lattice point condition", () => { - const testValues = [1, 5, 10, 20, 30, 50]; - testValues.forEach((n) => { - const result = getCoordinates(n); - const m = result.x * result.x + result.y * result.y; - // m should be a non-negative integer - expect(m).toBeGreaterThanOrEqual(0); - expect(Number.isInteger(m)).toBe(true); - }); - }); -}); diff --git a/packages/gauss-spiral/test/get-n-from-coordinates.test.ts b/packages/gauss-spiral/test/get-n-from-coordinates.test.ts deleted file mode 100644 index 2cfc0c4..0000000 --- a/packages/gauss-spiral/test/get-n-from-coordinates.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { getNFromCoordinates } from "../src/index"; - -describe("getNFromCoordinates function test", () => { - test("Origin point (0, 0) should return 1", () => { - expect(getNFromCoordinates(0, 0)).toBe(1); - }); - - test("Points on the first circle (m=1)", () => { - // Points where x^2 + y^2 = 1 - expect(getNFromCoordinates(1, 0)).toBeGreaterThan(1); - expect(getNFromCoordinates(0, 1)).toBeGreaterThan(1); - expect(getNFromCoordinates(-1, 0)).toBeGreaterThan(1); - expect(getNFromCoordinates(0, -1)).toBeGreaterThan(1); - }); - - test("Points on the second circle (m=2)", () => { - // Points where x^2 + y^2 = 2 - expect(getNFromCoordinates(1, 1)).toBeGreaterThan(1); - expect(getNFromCoordinates(1, -1)).toBeGreaterThan(1); - expect(getNFromCoordinates(-1, 1)).toBeGreaterThan(1); - expect(getNFromCoordinates(-1, -1)).toBeGreaterThan(1); - }); - - test("Points on larger circles", () => { - // Points where x^2 + y^2 = 4 - expect(getNFromCoordinates(2, 0)).toBeGreaterThan(1); - expect(getNFromCoordinates(0, 2)).toBeGreaterThan(1); - expect(getNFromCoordinates(-2, 0)).toBeGreaterThan(1); - expect(getNFromCoordinates(0, -2)).toBeGreaterThan(1); - }); - - test("Points on circle m=5", () => { - // Points where x^2 + y^2 = 5 - expect(getNFromCoordinates(2, 1)).toBeGreaterThan(1); - expect(getNFromCoordinates(1, 2)).toBeGreaterThan(1); - expect(getNFromCoordinates(-1, 2)).toBeGreaterThan(1); - expect(getNFromCoordinates(-2, 1)).toBeGreaterThan(1); - }); - - test("Different points should have different N values", () => { - const n1 = getNFromCoordinates(1, 0); - const n2 = getNFromCoordinates(0, 1); - const n3 = getNFromCoordinates(-1, 0); - const n4 = getNFromCoordinates(0, -1); - - // All should be unique - const values = [n1, n2, n3, n4]; - const uniqueValues = new Set(values); - expect(uniqueValues.size).toBe(values.length); - }); - - test("N values should be positive integers", () => { - const testPoints = [ - [1, 0], - [0, 1], - [1, 1], - [2, 1], - [3, 0], - ]; - - testPoints.forEach(([x, y]) => { - const n = getNFromCoordinates(x, y); - expect(n).toBeGreaterThan(0); - expect(Number.isInteger(n)).toBe(true); - }); - }); -}); diff --git a/packages/gauss-spiral/test/roundtrip.test.ts b/packages/gauss-spiral/test/roundtrip.test.ts deleted file mode 100644 index 8c8fff2..0000000 --- a/packages/gauss-spiral/test/roundtrip.test.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { getNFromCoordinates, getCoordinates } from "../src/index"; - -describe("Round-trip conversion test", () => { - test("Converting coordinates to N and back should return original coordinates", () => { - const testPoints: [number, number][] = [ - [0, 0], - [1, 0], - [0, 1], - [-1, 0], - [0, -1], - [1, 1], - [1, -1], - [-1, 1], - [-1, -1], - [2, 0], - [0, 2], - [2, 1], - [1, 2], - ]; - - testPoints.forEach(([x, y]) => { - const n = getNFromCoordinates(x, y); - const result = getCoordinates(n); - expect(result.x).toBe(x); - expect(result.y).toBe(y); - }); - }); - - test("Converting N to coordinates and back should return original N", () => { - const testNValues = [1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50]; - - testNValues.forEach((n) => { - const coords = getCoordinates(n); - const resultN = getNFromCoordinates(coords.x, coords.y); - expect(resultN).toBe(n); - }); - }); - - test("Sequential N values should produce unique coordinates", () => { - const coordinates = new Set(); - for (let n = 1; n <= 50; n++) { - const { x, y } = getCoordinates(n); - const key = `${x},${y}`; - expect(coordinates.has(key)).toBe(false); - coordinates.add(key); - } - }); - - test("All coordinates on same circle should have different N values", () => { - // Test points on circle m=1 - const pointsM1: [number, number][] = [ - [1, 0], - [0, 1], - [-1, 0], - [0, -1], - ]; - - const nValues = pointsM1.map(([x, y]) => getNFromCoordinates(x, y)); - const uniqueNValues = new Set(nValues); - expect(uniqueNValues.size).toBe(pointsM1.length); - }); - - test("Round-trip conversion for large N values", () => { - const largeNValues = [100, 200, 500, 1000]; - - largeNValues.forEach((n) => { - const coords = getCoordinates(n); - const resultN = getNFromCoordinates(coords.x, coords.y); - expect(resultN).toBe(n); - }); - }); - - test("Round-trip conversion for points far from origin", () => { - const farPoints: [number, number][] = [ - [10, 0], - [0, 10], - [7, 7], - [-8, 6], - [5, -12], - ]; - - farPoints.forEach(([x, y]) => { - const n = getNFromCoordinates(x, y); - const result = getCoordinates(n); - expect(result.x).toBe(x); - expect(result.y).toBe(y); - }); - }); -}); diff --git a/packages/gauss-spiral/test/specification.test.ts b/packages/gauss-spiral/test/specification.test.ts deleted file mode 100644 index 79102f3..0000000 --- a/packages/gauss-spiral/test/specification.test.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { getCoordinates, getNFromCoordinates } from "../src/index"; - -type Point = [number, number]; - -const computeRingPoints = (m: number): Point[] => { - if (m < 0) return []; - const limit = Math.ceil(Math.sqrt(m)); - const points: Point[] = []; - - for (let x = -limit; x <= limit; x++) { - for (let y = -limit; y <= limit; y++) { - if (x * x + y * y === m) points.push([x, y]); - } - } - - return points; -}; - -const normalizeZero = (value: number): number => (Object.is(value, -0) ? 0 : value); - -const countPointsWithinRadius = (m: number): number => { - if (m < 0) return 0; - const limit = Math.ceil(Math.sqrt(m)); - let count = 0; - - for (let x = -limit; x <= limit; x++) { - for (let y = -limit; y <= limit; y++) { - if (x * x + y * y <= m) count++; - } - } - - return count; -}; - -describe("Gauss spiral specification compliance", () => { - test("enumerates rings in clockwise angle order up to radius 50", () => { - const maxM = 50; - let cumulativeCount = 0; - const seen = new Set(); - - for (let m = 0; m <= maxM; m++) { - const ringPoints = computeRingPoints(m); - ringPoints.sort((a, b) => { - const angleA = Math.atan2(a[1], a[0]); - const angleB = Math.atan2(b[1], b[0]); - if (angleA === angleB) { - if (a[0] !== b[0]) return b[0] - a[0]; - return b[1] - a[1]; - } - return angleB - angleA; - }); - - ringPoints.forEach(([x, y], index) => { - const expectedN = cumulativeCount + index + 1; - const normalizedX = normalizeZero(x); - const normalizedY = normalizeZero(y); - - const n = getNFromCoordinates(normalizedX, normalizedY); - expect(n).toBe(expectedN); - - const coords = getCoordinates(expectedN); - expect(normalizeZero(coords.x)).toBe(normalizedX); - expect(normalizeZero(coords.y)).toBe(normalizedY); - - const key = `${normalizedX},${normalizedY}`; - expect(seen.has(key)).toBe(false); - seen.add(key); - }); - - cumulativeCount += ringPoints.length; - const expectedTotal = countPointsWithinRadius(m); - expect(cumulativeCount).toBe(expectedTotal); - } - - expect(seen.size).toBe(cumulativeCount); - }); - - test("radius is non-decreasing with n for first 500 points", () => { - let previousRadiusSquared = -1; - const maxN = 500; - const seen = new Set(); - - for (let n = 1; n <= maxN; n++) { - const { x, y } = getCoordinates(n); - const normalizedX = normalizeZero(x); - const normalizedY = normalizeZero(y); - const radiusSquared = normalizedX * normalizedX + normalizedY * normalizedY; - - expect(radiusSquared).toBeGreaterThanOrEqual(previousRadiusSquared); - previousRadiusSquared = radiusSquared; - - const key = `${normalizedX},${normalizedY}`; - expect(seen.has(key)).toBe(false); - seen.add(key); - - const roundTrip = getNFromCoordinates(normalizedX, normalizedY); - expect(roundTrip).toBe(n); - } - }); -}); diff --git a/packages/gauss-spiral/test/spherical.test.ts b/packages/gauss-spiral/test/spherical.test.ts deleted file mode 100644 index 587ca2c..0000000 --- a/packages/gauss-spiral/test/spherical.test.ts +++ /dev/null @@ -1,292 +0,0 @@ -import { - calculateCoordinateDiff, - reconstructCoordinateDiff, - DEG_PER_METER, -} from "../src/spherical"; - -describe("Spherical coordinate utilities", () => { - describe("calculateCoordinateDiff", () => { - test("should calculate diff for same coordinates", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 37.5665, lng: 126.978 }; - const diff = calculateCoordinateDiff({ center, target }); - - expect(diff.lat).toBe(0); - expect(diff.lng).toBe(0); - }); - - test("should calculate diff for coordinates 1 degree north", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 38.5665, lng: 126.978 }; - const diff = calculateCoordinateDiff({ - center, - target, - precisionMeters: 1, - }); - - // 1 degree latitude โ‰ˆ 111000 meters - expect(diff.lat).toBeCloseTo(111000, -2); - expect(diff.lng).toBe(0); - }); - - test("should calculate diff for coordinates 1 degree east", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 37.5665, lng: 127.978 }; - const diff = calculateCoordinateDiff({ - center, - target, - precisionMeters: 1, - }); - - expect(diff.lat).toBe(0); - // Longitude distance varies with latitude - expect(diff.lng).toBeGreaterThan(0); - }); - - test("should handle custom precision", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 37.5695, lng: 126.981 }; // ~333m north, ~237m east - - const diff3m = calculateCoordinateDiff({ - center, - target, - precisionMeters: 3, - }); - const diff10m = calculateCoordinateDiff({ - center, - target, - precisionMeters: 10, - }); - - // With 3m precision, indices should be larger - expect(Math.abs(diff3m.lat)).toBeGreaterThan(Math.abs(diff10m.lat)); - expect(Math.abs(diff3m.lng)).toBeGreaterThan(Math.abs(diff10m.lng)); - }); - - test("should handle negative differences (south and west)", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 37.5635, lng: 126.975 }; // south and west - const diff = calculateCoordinateDiff({ center, target }); - - expect(diff.lat).toBeLessThan(0); - expect(diff.lng).toBeLessThan(0); - }); - - test("should handle custom degreePerMeter", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 37.6, lng: 127.0 }; // Larger difference for clearer test - - const diff1 = calculateCoordinateDiff({ - center, - target, - degreePerMeter: 111000, - precisionMeters: 1, - }); - const diff2 = calculateCoordinateDiff({ - center, - target, - degreePerMeter: 100000, // More significant difference - precisionMeters: 1, - }); - - // Different conversion factors should yield different results - expect(diff1.lat).not.toBe(diff2.lat); - expect(diff1.lng).not.toBe(diff2.lng); - }); - - test("should work with equator coordinates", () => { - const center = { lat: 0, lng: 0 }; - const target = { lat: 0.001, lng: 0.001 }; - const diff = calculateCoordinateDiff({ center, target }); - - expect(diff.lat).toBeGreaterThan(0); - expect(diff.lng).toBeGreaterThan(0); - }); - - test("should work with high latitude coordinates", () => { - const center = { lat: 80, lng: 0 }; - const target = { lat: 80, lng: 1 }; - const diff = calculateCoordinateDiff({ center, target }); - - expect(diff.lat).toBe(0); - // At high latitudes, longitude distance is much smaller - expect(diff.lng).toBeGreaterThan(0); - }); - }); - - describe("reconstructCoordinateDiff", () => { - test("should reconstruct original coordinates from diff", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 37.5695, lng: 126.981 }; - - const diff = calculateCoordinateDiff({ center, target }); - const reconstructed = reconstructCoordinateDiff({ center, diff }); - - expect(reconstructed.lat).toBeCloseTo(target.lat, 4); - expect(reconstructed.lng).toBeCloseTo(target.lng, 4); - }); - - test("should handle zero diff", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const diff = { lat: 0, lng: 0 }; - const reconstructed = reconstructCoordinateDiff({ center, diff }); - - expect(reconstructed.lat).toBeCloseTo(center.lat, 6); - expect(reconstructed.lng).toBeCloseTo(center.lng, 6); - }); - - test("should handle negative diff", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const diff = { lat: -100, lng: -100 }; - const reconstructed = reconstructCoordinateDiff({ - center, - diff, - precisionMeters: 3, - }); - - expect(reconstructed.lat).toBeLessThan(center.lat); - expect(reconstructed.lng).toBeLessThan(center.lng); - }); - - test("should work with custom precision", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const diff = { lat: 100, lng: 100 }; - - const reconstructed3m = reconstructCoordinateDiff({ - center, - diff, - precisionMeters: 3, - }); - const reconstructed10m = reconstructCoordinateDiff({ - center, - diff, - precisionMeters: 10, - }); - - // Larger precision should result in larger coordinate differences - expect(reconstructed10m.lat - center.lat).toBeGreaterThan( - reconstructed3m.lat - center.lat - ); - }); - - test("should work with custom degreePerMeter", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const diff = { lat: 100, lng: 100 }; - - const reconstructed1 = reconstructCoordinateDiff({ - center, - diff, - degreePerMeter: 111000, - }); - const reconstructed2 = reconstructCoordinateDiff({ - center, - diff, - degreePerMeter: 110000, - }); - - expect(reconstructed1.lat).not.toBe(reconstructed2.lat); - }); - }); - - describe("Roundtrip conversion", () => { - test("should maintain accuracy through calculate -> reconstruct cycle", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const targets = [ - { lat: 37.5695, lng: 126.981 }, - { lat: 37.5635, lng: 126.975 }, - { lat: 37.5665, lng: 126.978 }, - { lat: 37.6, lng: 127.0 }, - { lat: 37.5, lng: 126.9 }, - ]; - - targets.forEach((target) => { - const diff = calculateCoordinateDiff({ - center, - target, - precisionMeters: 3, - }); - const reconstructed = reconstructCoordinateDiff({ - center, - diff, - precisionMeters: 3, - }); - - // Should be close to original (within precision tolerance) - expect(reconstructed.lat).toBeCloseTo(target.lat, 4); - expect(reconstructed.lng).toBeCloseTo(target.lng, 4); - }); - }); - - test("should handle multiple precision levels", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 37.5695, lng: 126.981 }; - const precisions = [1, 3, 5, 10, 50, 100]; - - precisions.forEach((precision) => { - const diff = calculateCoordinateDiff({ - center, - target, - precisionMeters: precision, - }); - const reconstructed = reconstructCoordinateDiff({ - center, - diff, - precisionMeters: precision, - }); - - // Accuracy depends on precision - const latError = Math.abs(reconstructed.lat - target.lat); - const lngError = Math.abs(reconstructed.lng - target.lng); - - // Error should be within reasonable bounds based on precision - expect(latError).toBeLessThan(precision / DEG_PER_METER * 2); - expect(lngError).toBeLessThan(precision / DEG_PER_METER * 2); - }); - }); - - test("should work at different latitudes", () => { - const testCases = [ - { lat: 0, lng: 0 }, // Equator - { lat: 45, lng: 90 }, // Mid latitude - { lat: 60, lng: -120 }, // High latitude - { lat: -33.8688, lng: 151.2093 }, // Sydney - { lat: 51.5074, lng: -0.1278 }, // London - ]; - - testCases.forEach((center) => { - const target = { lat: center.lat + 0.01, lng: center.lng + 0.01 }; - const diff = calculateCoordinateDiff({ center, target }); - const reconstructed = reconstructCoordinateDiff({ center, diff }); - - expect(reconstructed.lat).toBeCloseTo(target.lat, 4); - expect(reconstructed.lng).toBeCloseTo(target.lng, 4); - }); - }); - }); - - describe("DEG_PER_METER constant", () => { - test("should be defined and have correct value", () => { - expect(DEG_PER_METER).toBe(111000); - }); - - test("should be used as default parameter", () => { - const center = { lat: 37.5665, lng: 126.978 }; - const target = { lat: 38.5665, lng: 126.978 }; - - const diffDefault = calculateCoordinateDiff({ - center, - target, - precisionMeters: 1, - }); - const diffExplicit = calculateCoordinateDiff({ - center, - target, - precisionMeters: 1, - degreePerMeter: DEG_PER_METER, - }); - - expect(diffDefault.lat).toBe(diffExplicit.lat); - expect(diffDefault.lng).toBe(diffExplicit.lng); - }); - }); -}); diff --git a/packages/gauss-spiral/tsconfig.json b/packages/gauss-spiral/tsconfig.json deleted file mode 100644 index 54cff6b..0000000 --- a/packages/gauss-spiral/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - } -} diff --git a/packages/mugunghwa/.gitignore b/packages/mugunghwa/.gitignore deleted file mode 100644 index 83cf5d0..0000000 --- a/packages/mugunghwa/.gitignore +++ /dev/null @@ -1,71 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release -build/ - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -# next.js build output -.next - -# microbundle output -dist/ - -# TypeScript cache -*.tsbuildinfo - -# Turbo cache -.turbo/ diff --git a/packages/mugunghwa/.npmignore b/packages/mugunghwa/.npmignore deleted file mode 100644 index 82d8a3d..0000000 --- a/packages/mugunghwa/.npmignore +++ /dev/null @@ -1,141 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# Source files (only publish dist) -src/ -test/ -scripts/ -sources/ - -# Config files -tsconfig.json -jest.config.js -.gitignore -.DS_Store diff --git a/packages/mugunghwa/README.md b/packages/mugunghwa/README.md deleted file mode 100644 index a4f41d7..0000000 --- a/packages/mugunghwa/README.md +++ /dev/null @@ -1,233 +0,0 @@ -# ๐ŸŒบ ๋ฌด๊ถํ™” (Mugunghwa) - -[![Wiki](https://img.shields.io/badge/๐Ÿ“–_Wiki-deepwiki-blue)](https://deepwiki.com/hmmhmmhm/node-packages) - -[![Mugunghwa](https://hmart.app/en/mugunghwa/og.png)](https://hmart.app/mugunghwa) - -**[๐Ÿ”— ์‡ผ์ผ€์ด์Šค ๋ฐ ์†Œ๊ฐœ ํŽ˜์ด์ง€ ๋ณด๊ธฐ](https://hmart.app/mugunghwa)** - -> ํ•œ๊ธ€ ๊ธฐ๋ฐ˜ 72์ง„๋ฒ• ์ธ์ฝ”๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - -๋ฌด๊ถํ™”๋Š” 10์ง„์ˆ˜ ์ˆซ์ž๋ฅผ ํ•œ๊ธ€๋กœ ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉํ•˜๋Š” TypeScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ•œ๊ธ€์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ˆซ์ž๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ํ•œ๊ธ€ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. - -## โœจ ํŠน์ง• - -- **72์ง„๋ฒ• ๊ธฐ๋ฐ˜**: ํ•œ๊ธ€ ์กฐํ•ฉ์„ ํ™œ์šฉํ•œ ํšจ์œจ์ ์ธ ์ˆซ์ž ์ธ์ฝ”๋”ฉ -- **๋น„์†์–ด ํ•„ํ„ฐ๋ง**: ๋ถ€์ ์ ˆํ•œ ๋‹จ์–ด ์กฐํ•ฉ์„ ์ž๋™์œผ๋กœ ๋ฐฐ์ œ -- **์–‘๋ฐฉํ–ฅ ๋ณ€ํ™˜**: ์ˆซ์ž โ†” ํ•œ๊ธ€ ๋ฌธ์ž์—ด ์ƒํ˜ธ ๋ณ€ํ™˜ ์ง€์› -- **์˜คํƒ€ ๋ณด์ •**: ์œ ์‚ฌํ•œ ๊ธ€์ž์˜ ์˜คํƒ€๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ • -- **TypeScript ์ง€์›**: ์™„์ „ํ•œ ํƒ€์ž… ์ •์˜ ์ œ๊ณต - -## ๐Ÿ“ฆ ์„ค์น˜ - -```bash -npm install mugunghwa -``` - -๋˜๋Š” - -```bash -pnpm add mugunghwa -``` - -## ๐Ÿš€ ์‚ฌ์šฉ๋ฒ• - -### ๊ธฐ๋ณธ ์‚ฌ์šฉ - -```typescript -import { encode, decode } from 'mugunghwa'; - -// ์ˆซ์ž๋ฅผ ํ•œ๊ธ€๋กœ ์ธ์ฝ”๋”ฉ -const encoded = encode(31252352334); -console.log(encoded); // ์˜ˆ: "๊ฐ€๋‚˜-๋‹ค๋ผ-๋งˆ๋ฐ”" - -// ํ•œ๊ธ€์„ ์ˆซ์ž๋กœ ๋””์ฝ”๋”ฉ -const decoded = decode(encoded); -console.log(decoded); // 31252352334 -``` - -### ์ปค์Šคํ…€ ๊ตฌ๋ถ„์ž ์‚ฌ์šฉ - -```typescript -import { encode, decode } from 'mugunghwa'; - -// ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉ -const encoded = encode(12345, '_'); -console.log(encoded); // ์˜ˆ: "๊ฐ€๋‚˜_๋‹ค๋ผ" - -const decoded = decode(encoded, '_'); -console.log(decoded); // 12345 -``` - -### ๋””๋ฒ„๊ทธ ๋ชจ๋“œ - -```typescript -import { decode, setDebug } from 'mugunghwa'; - -// ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ํ™œ์„ฑํ™” (์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ƒ์„ธ ์ •๋ณด ์ถœ๋ ฅ) -setDebug(true); - -try { - const result = decode('์ž˜๋ชป๋œ์ฝ”๋“œ'); - console.log(result); -} catch (error) { - console.error(error); // ์ƒ์„ธํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ -} - -// ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ๋น„ํ™œ์„ฑํ™” (๊ธฐ๋ณธ๊ฐ’: false) -setDebug(false); -const result = decode('์ž˜๋ชป๋œ์ฝ”๋“œ'); // null ๋ฐ˜ํ™˜ -``` - -### CLI ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ - -```bash -# ์ˆซ์ž ์ธ์ฝ”๋”ฉ -pnpm run encode 12345 - -# ๋ฌธ์ž์—ด ๋””์ฝ”๋”ฉ -pnpm run decode "๊ฐ€๋‚˜-๋‹ค๋ผ" - -# ๋žœ๋ค ํ…Œ์ŠคํŠธ -pnpm run random - -# ์œ ํšจ์„ฑ ๊ฒ€์ฆ -pnpm run validate -``` - -## ๐Ÿ”ง API - -### `encode(index: number, separator?: string): string | null` - -10์ง„์ˆ˜ ์ˆซ์ž๋ฅผ ํ•œ๊ธ€ ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. - -**๋งค๊ฐœ๋ณ€์ˆ˜:** -- `index`: ์ธ์ฝ”๋”ฉํ•  ์–‘์˜ ์ •์ˆ˜ (0 ์ด์ƒ) -- `separator`: ๊ตฌ๋ถ„์ž ๋ฌธ์ž์—ด (๊ธฐ๋ณธ๊ฐ’: `"-"`) - -**๋ฐ˜ํ™˜๊ฐ’:** -- ์„ฑ๊ณต ์‹œ: ์ธ์ฝ”๋”ฉ๋œ ํ•œ๊ธ€ ๋ฌธ์ž์—ด -- ์‹คํŒจ ์‹œ: `null` (์Œ์ˆ˜, ์†Œ์ˆ˜, NaN ๋“ฑ) - -### `decode(code: string, separator?: string): number | null` - -ํ•œ๊ธ€ ๋ฌธ์ž์—ด์„ 10์ง„์ˆ˜ ์ˆซ์ž๋กœ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. - -**๋งค๊ฐœ๋ณ€์ˆ˜:** -- `code`: ๋””์ฝ”๋”ฉํ•  ํ•œ๊ธ€ ๋ฌธ์ž์—ด -- `separator`: ๊ตฌ๋ถ„์ž ๋ฌธ์ž์—ด (๊ธฐ๋ณธ๊ฐ’: `"-"`) - -**๋ฐ˜ํ™˜๊ฐ’:** -- ์„ฑ๊ณต ์‹œ: ๋””์ฝ”๋”ฉ๋œ ์ˆซ์ž -- ์‹คํŒจ ์‹œ: `null` (์ž˜๋ชป๋œ ํ˜•์‹) - -### ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ - -```typescript -// ๋ณตํ•ฉ ๋‹ค์ง„์ˆ˜๋ฅผ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ -decimalBase(maxMatrix: number[], indexMatrix: number[]): number - -// 10์ง„์ˆ˜๋ฅผ ๋ณตํ•ฉ ๋‹ค์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ -multipleBase(maxMatrix: number[], indexDecimal: number): number[] - -// ์˜ˆ์ƒ ์ธ์ฝ”๋”ฉ ๊ธธ์ด ๊ณ„์‚ฐ -expectLength(index: number): number - -// ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ์„ค์ • (์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ƒ์„ธ ์ •๋ณด ์ถœ๋ ฅ) -setDebug(value: boolean): void -``` - -## ๐Ÿงฎ ๋ฌด๊ถํ™”72 ๊ตฌํ˜„ ์›๋ฆฌ - -### ์™œ 72์ง„๋ฒ•์ธ๊ฐ€? - -๋ฌด๊ถํ™”๋Š” ํ•œ๊ธ€์˜ ์ž์Œ๊ณผ ๋ชจ์Œ ์กฐํ•ฉ์„ ํ™œ์šฉํ•˜์—ฌ 72์ง„๋ฒ•์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ 72์ง„๋ฒ•๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌด์ž‘์œ„ ๊ธ€์ž ์กฐํ•ฉ์—์„œ ๋น„์†์–ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### ๋น„์†์–ด ํ•„ํ„ฐ๋ง ์ „๋žต - -#### ์ง์ˆ˜ ๋‹จ์œ„: 84์ง„๋ฒ• ํ™œ์šฉ - -์ง์ˆ˜ ์œ„์น˜์˜ ๊ธ€์ž๋“ค์€ 84์ง„๋ฒ•์œผ๋กœ ํ‘œ๊ธฐํ•œ ํ›„, ๋ถ€์ ์ ˆํ•œ ์กฐํ•ฉ์„ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. - -``` -72ยฒ = 5,184 -84ยฒ = 7,056 -7,056 - 5,184 = 1,872 - -โ†’ 5,184๊ฐœ์˜ ์กฐํ•ฉ ์ค‘ 1,872๊ฐœ(36.1%)์˜ ๋ถ€์ • ์กฐํ•ฉ์„ ๋ฐฐ์ œ -``` - -#### ํ™€์ˆ˜ ๋‹จ์œ„: 98์ง„๋ฒ• ํ™œ์šฉ - -ํ™€์ˆ˜ ์œ„์น˜์˜ ๊ธ€์ž๋“ค์€ 98์ง„๋ฒ•์œผ๋กœ ํ‘œ๊ธฐํ•˜์—ฌ ๋” ๋งŽ์€ ๋ถ€์ • ์กฐํ•ฉ์„ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. - -``` -84ยฒ = 7,056 -98ยฒ = 9,604 -9,604 - 7,056 = 2,548 - -๊ธฐ์กด 1,872๊ฐœ ๋ถ€์ • ์กฐํ•ฉ ์ œ์™ธ: -2,548 - 1,872 = 676 - -โ†’ 2,548๊ฐœ์˜ ์กฐํ•ฉ ์ค‘ 676๊ฐœ(26.5%)์˜ ๋ถ€์ • ์กฐํ•ฉ์„ ๋ฐฐ์ œ -``` - -### ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ - -- **์ง์ˆ˜ ๋‹จ์œ„**: 72์ง„๋ฒ• + 12๊ฐœ ์ถ”๊ฐ€ ๊ธ€์ž = 84์ง„๋ฒ• -- **ํ™€์ˆ˜ ๋‹จ์œ„**: 84์ง„๋ฒ• + 14๊ฐœ ์ถ”๊ฐ€ ๊ธ€์ž = 98์ง„๋ฒ• -- **์˜คํƒ€ ๋ณด์ •**: ์œ ์‚ฌํ•œ ๊ธ€์ž ์ž๋™ ์ˆ˜์ • ๊ธฐ๋Šฅ ๋‚ด์žฅ -- **๊ตฌ๋ถ„์ž ์ฒ˜๋ฆฌ**: ๊ฐ€๋…์„ฑ์„ ์œ„ํ•œ ๊ตฌ๋ถ„์ž ์ž๋™ ์‚ฝ์ž… -- **๋ฐ์ดํ„ฐ ์••์ถ•**: lz-string์„ ํ™œ์šฉํ•œ ์ธ์ฝ”๋”ฉ ํ…Œ์ด๋ธ” ์••์ถ• ์ €์žฅ - -## ๐Ÿ“Š ์˜ˆ์ œ - -```typescript -import { encode, decode } from 'mugunghwa'; - -// ๋‹ค์–‘ํ•œ ์ˆซ์ž ํ…Œ์ŠคํŠธ -const numbers = [0, 1, 100, 1000, 1000000]; - -numbers.forEach(num => { - const encoded = encode(num); - const decoded = decode(encoded!); - console.log(`${num} โ†’ ${encoded} โ†’ ${decoded}`); -}); - -// ๊ฒฐ๊ณผ ์˜ˆ์‹œ: -// 0 โ†’ ๊ฐ€ โ†’ 0 -// 1 โ†’ ๋‚˜ โ†’ 1 -// 100 โ†’ ๋‹ค๋ผ โ†’ 100 -// 1000 โ†’ ๋งˆ๋ฐ”-์‚ฌ โ†’ 1000 -// 1000000 โ†’ ์•„์ž-์ฐจ์นด-ํƒ€ โ†’ 1000000 -``` - -## ๐Ÿงช ํ…Œ์ŠคํŠธ - -```bash -# ํ…Œ์ŠคํŠธ ์‹คํ–‰ -pnpm test - -# ๋นŒ๋“œ -pnpm build - -# ๊ฐœ๋ฐœ ๋ชจ๋“œ (watch) -pnpm watch -``` - -## ๐Ÿ“ ๋ผ์ด์„ ์Šค - -MIT License - -Copyright (c) hmmhmmhm - -## ๐Ÿ”— ๋งํฌ - -- [GitHub Repository](https://github.com/hmmhmmhm/node-packages) -- [Issues](https://github.com/hmmhmmhm/node-packages/issues) - -## ๐Ÿ“œ ํžˆ์Šคํ† ๋ฆฌ - -- TypeScript๋กœ ์™„์ „ํžˆ ์žฌ์ž‘์„ฑ -- ๋ชจ๋˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ ์šฉ (microbundle) -- ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ์ถ”๊ฐ€ \ No newline at end of file diff --git a/packages/mugunghwa/jest.config.js b/packages/mugunghwa/jest.config.js deleted file mode 100644 index 85d3a7b..0000000 --- a/packages/mugunghwa/jest.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} **/ -export default { - testEnvironment: "node", - transform: { - "^.+.tsx?$": ["ts-jest", {}], - }, - moduleNameMapper: { - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - extensionsToTreatAsEsm: ['.ts'], -}; diff --git a/packages/mugunghwa/package.json b/packages/mugunghwa/package.json deleted file mode 100644 index d6c7e16..0000000 --- a/packages/mugunghwa/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "mugunghwa", - "type": "module", - "version": "1.0.1", - "description": "Korean text encoding/decoding library using base-72 numeral system", - "source": "src/index.ts", - "exports": { - "types": "./dist/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/index.d.ts", - "scripts": { - "build": "microbundle", - "watch": "microbundle watch", - "test": "jest", - "encode": "node scripts/encode.cjs", - "decode": "node scripts/decode.cjs", - "random": "node scripts/random.cjs", - "validate": "node scripts/validate.cjs", - "generate-constants": "node scripts/generate-constants.cjs" - }, - "keywords": [ - "korean", - "encoding", - "base72", - "text", - "compression" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/mugunghwa" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/mugunghwa#readme", - "dependencies": { - "lz-string": "^1.5.0" - }, - "devDependencies": { - "@types/jest": "^29.5.13", - "@types/node": "^20.14.0", - "jest": "^29.7.0", - "microbundle": "^0.15.1", - "ts-jest": "^29.2.5", - "tsx": "^4.7.0", - "typescript": "^5.6.2" - } -} diff --git a/packages/mugunghwa/scripts/decode.cjs b/packages/mugunghwa/scripts/decode.cjs deleted file mode 100644 index 3d33e73..0000000 --- a/packages/mugunghwa/scripts/decode.cjs +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env node -const { decode } = require('../dist/index.cjs'); - -const input = process.argv[2]; - -if (!input) { - console.error('Usage: pnpm run decode '); - console.error('Example: pnpm run decode "๋‚œ-์„ "'); - process.exit(1); -} - -const decoded = decode(input); - -if (decoded === null) { - console.error('Error: Invalid code format'); - process.exit(1); -} - -console.log(decoded); diff --git a/packages/mugunghwa/scripts/encode.cjs b/packages/mugunghwa/scripts/encode.cjs deleted file mode 100644 index 95680f9..0000000 --- a/packages/mugunghwa/scripts/encode.cjs +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node -const { encode } = require('../dist/index.cjs'); - -const input = process.argv[2]; - -if (!input) { - console.error('Usage: pnpm run encode '); - console.error('Example: pnpm run encode 12345'); - process.exit(1); -} - -const number = parseInt(input, 10); - -if (isNaN(number)) { - console.error('Error: Input must be a valid number'); - process.exit(1); -} - -const encoded = encode(number); -console.log(encoded); diff --git a/packages/mugunghwa/scripts/generate-constants.cjs b/packages/mugunghwa/scripts/generate-constants.cjs deleted file mode 100644 index 415ff71..0000000 --- a/packages/mugunghwa/scripts/generate-constants.cjs +++ /dev/null @@ -1,62 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -/** - * ์••์ถ•๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋“ค๋กœ๋ถ€ํ„ฐ constants.ts ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. - */ -function generateConstants() { - const sourcesDir = path.join(__dirname, '../sources'); - const srcDir = path.join(__dirname, '../src'); - - // ์••์ถ•๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋“ค ์ฝ๊ธฐ - const charMap = fs.readFileSync(path.join(sourcesDir, 'compress_charmap.txt'), 'utf8').trim(); - const separatorWord = fs.readFileSync(path.join(sourcesDir, 'compress_seperatormap.txt'), 'utf8').trim(); - const table = fs.readFileSync(path.join(sourcesDir, 'compress_table.txt'), 'utf8').trim(); - const fixMap = fs.readFileSync(path.join(sourcesDir, 'compress_fixmap.txt'), 'utf8').trim(); - - // constants.ts ํŒŒ์ผ ๋‚ด์šฉ ์ƒ์„ฑ - const content = `/** - * ์••์ถ•๋œ ๊ธ€์ž๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. - */ -export const COMPRESSED_CHAR_MAP = '${charMap}'; - -/** - * ์••์ถ•๋œ ์ค‘๊ฐ„์ž๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. - */ -export const COMPRESSED_SEPARATOR_WORD = '${separatorWord}'; - -/** - * ์••์ถ•๋œ ์ธ์ฝ”๋”ฉ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. - */ -export const COMPRESSED_TABLE = '${table}'; - -/** - * ์••์ถ•๋œ ๋ฌธ์ž๋ณด์ˆ˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. - */ -export const COMPRESSED_FIX_MAP = '${fixMap}'; - -/** - * ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ํ”Œ๋ž˜๊ทธ - */ -export let isDebug = false; - -/** - * ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ์„ค์ • - */ -export function setDebug(value: boolean): void { - isDebug = value; -} -`; - - // constants.ts ํŒŒ์ผ ์“ฐ๊ธฐ - fs.writeFileSync(path.join(srcDir, 'constants.ts'), content); - console.log('โœ“ constants.ts ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); -} - -// ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ -try { - generateConstants(); -} catch (error) { - console.error('โœ— constants.ts ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error.message); - process.exit(1); -} diff --git a/packages/mugunghwa/scripts/random.cjs b/packages/mugunghwa/scripts/random.cjs deleted file mode 100644 index 8e5697e..0000000 --- a/packages/mugunghwa/scripts/random.cjs +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env node -const { encode } = require('../dist/index.cjs'); - -/** - * ์ˆซ์ž์— ๋‹จ์œ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜ - */ -function formatNumber(num) { - const str = String(num); - let result = str; - - if (str.length > 4) { - const manIndex = str.length - 4; - result = str.slice(0, manIndex) + '๋งŒ' + str.slice(manIndex); - } - - if (str.length > 8) { - const eokIndex = result.indexOf('๋งŒ') - 4; - if (eokIndex > 0) { - result = result.slice(0, eokIndex) + '์–ต' + result.slice(eokIndex); - } - } - - if (str.length > 12) { - const joIndex = result.indexOf('์–ต') - 4; - if (joIndex > 0) { - result = result.slice(0, joIndex) + '์กฐ' + result.slice(joIndex); - } - } - - return result; -} - -/** - * ๋žœ๋ค ์ธ์ฝ”๋”ฉ ์ƒ์„ฑ - */ -function randomEncode(min = 1, max = 100000000) { - const index = Math.floor(Math.random() * (max - min)) + min; - const code = encode(index); - - console.log(`${code} (${formatNumber(index)})`); -} - -// ๊ธฐ๋ณธ๊ฐ’: 10๊ฐœ์˜ ๋žœ๋ค ์ฝ”๋“œ ์ƒ์„ฑ -const count = parseInt(process.argv[2], 10) || 10; -const min = parseInt(process.argv[3], 10) || 26873855; -const max = parseInt(process.argv[4], 10) || 1934917631; - -console.log(`Generating ${count} random codes between ${formatNumber(min)} and ${formatNumber(max)}:\n`); - -for (let i = 1; i <= count; i++) { - randomEncode(min, max); -} diff --git a/packages/mugunghwa/scripts/validate.cjs b/packages/mugunghwa/scripts/validate.cjs deleted file mode 100644 index 098794d..0000000 --- a/packages/mugunghwa/scripts/validate.cjs +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env node -const { encode, decode } = require('../dist/index.cjs'); - -const startPoint = parseInt(process.argv[2], 10); -const endPoint = parseInt(process.argv[3], 10); - -// ์ž…๋ ฅ ๊ฒ€์ฆ -if (process.argv.length < 4) { - console.error('Usage: pnpm run validate '); - console.error('Example: pnpm run validate 0 100000'); - process.exit(1); -} - -if (isNaN(startPoint)) { - console.error('Error: First argument must be a number'); - process.exit(1); -} - -if (isNaN(endPoint)) { - console.error('Error: Second argument must be a number'); - process.exit(1); -} - -if (startPoint > endPoint) { - console.error('Error: Start point must be less than or equal to end point'); - process.exit(1); -} - -let stoppedPoint = null; - -console.log(`Starting integrity check from ${startPoint} to ${endPoint}...\n`); -console.time('Validation time'); - -for (let i = startPoint; i <= endPoint; i++) { - const encoded = encode(i); - const decoded = decode(encoded); - - if (i % 10000 === 0) { - console.log(`โœ“ Validated up to ${i}/${endPoint}`); - } - - if (i !== decoded) { - stoppedPoint = i; - break; - } -} - -console.log(); - -if (stoppedPoint === null) { - console.log(`โœ… Integrity check successful for range ${startPoint}~${endPoint}`); -} else { - console.error(`โŒ Integrity check failed at index ${stoppedPoint}`); - process.exit(1); -} - -console.timeEnd('Validation time'); diff --git a/packages/mugunghwa/sources/84.js b/packages/mugunghwa/sources/84.js deleted file mode 100644 index 4583c10..0000000 --- a/packages/mugunghwa/sources/84.js +++ /dev/null @@ -1,192 +0,0 @@ -/** - * 84์ง„๋ฒ•->72์ง„๋ฒ•์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ - * ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ์œ„ํ•ด ์ž„์‹œ๋กœ ๊ตฌ์„ฑํ•œ ์ฝ”๋“œ๋“ค ์ž…๋‹ˆ๋‹ค. - */ - -const fs = require("fs") - -/** - * ๊ตฌ์„ฑ ์ค‘์ธ ๋ฌด๊ถํ™”72์šฉ ๊ณต์šฉ ํ•จ์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - */ -const mugunghwa = require("../mugunghwa.js") - -/** - * ํ•„ํ„ฐ๋ง ๋˜์ง€ ์•Š์€ 84๊ฐ€์ง€ ๊ธ€์ž ๋ชฉ๋ก - */ -const nonFiltered84CharMap = [ - "๋‚˜", "๋‚œ", "๋‚ด", "๋‹ค", "๋‹จ", "๋‹ด", "๋„", "๋ผ", "๋ž˜", "๋ฅ˜", "๋ฆฌ", "๋ชจ", - "๋ฌด", "๋ฏธ", "๋ฏผ", "์‚ฌ", "์‚ฐ", "์ƒ", "์ƒˆ", "์ƒ", "์„œ", "์„ ", "์„ค", "์„ฌ", - "์„ฑ", "์†Œ", "์†”", "์†œ", "์†ก", "์ˆ˜", "์‹œ", "์‹ ", "์‹ค", "์‹ฌ", "์•„", "์•ˆ", - "์• ", "์–‘", "์—ฌ", "์—ฐ", "์˜ˆ", "์˜ค", "์˜จ", "์š”", "์šฐ", "์›”", "์œ ", "์œค", - "์œจ", "์€", "์ด", "์ผ", "์ž„", "์ •", "์ฐจ", "์ฐฝ", "์ฑ„", "์ฒœ", "์ฒจ", "์ฒญ", - "์ดˆ", "์ด", "ํ‘œ", "ํ•˜", "ํ•œ", "ํ•ด", "ํ–ฅ", "ํ˜„", "ํ˜ผ", "ํ™", "ํ™”", "ํšจ", // ์—ฌ๊ธฐ๊นŒ์ง€ 72์ง„ - "๋‚จ", "๋ˆˆ", "๋‹ฌ", "๋‹น", "๋ด„", "๋น„", "์Šฌ", "์—ด", "์˜", "์ž", "ํƒœ", "ํ˜œ" // 12๋ณด์™„ -] - -/** - * ํ•ด๋‹น ๊ธ€์ž๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ๊ธ€์ž์ธ์ง€๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. - */ -let getCharIndexMatrix = (word, nonFilteredMap) => { - let firstWordIndex = nonFilteredMap.indexOf(word[0]) - let secondWordIndex = nonFilteredMap.indexOf(word[1]) - - if (firstWordIndex === -1 || secondWordIndex === -1) - throw new Error("[" + word + "] " + word.length) - return [firstWordIndex, secondWordIndex] -} - -/** - * ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ๋‹จ์–ด์ธ์ง€๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. - */ -let getWordIndex = (word, nonFilteredMap, baseNumber) => { - let wordIndex = mugunghwa.decimalBase([baseNumber, baseNumber], getCharIndexMatrix(word, nonFilteredMap)) - return wordIndex -} - -/** - * ํ•„ํ„ฐ๋ง ๋˜์ง€ ์•Š์€ ๋‹จ์–ด๋ชฉ๋ก์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. - */ -let getNonFilteredWordsTxt = (base, nonFilteredCharMap) => { - let txt = "" - for (let i1 = 0; i1 <= (base - 1); i1++){ - for (let i2 = 0; i2 <= (base - 1); i2++){ - txt += `${nonFilteredCharMap[i1]}${nonFilteredCharMap[i2]} ` - } - } - return txt -} - -/** - * ํŠน์ • ๋‹จ์–ด๊ฐ€ ๋ช‡๊ฐœ ์กด์žฌํ•˜๋Š”์ง€ ํŒŒ์•…์šฉ - */ -let getAbsoluteFilterCountText = (base, nonFilteredCharMap, negativeWords) => { - //ํ›„์œ„ํ˜• - //ํ™-๋‚˜ํ™ ๋‚œํ™ ๋‚ดํ™ - let full = [] - for (let i1 = 0; i1 <= (base - 1); i1++){ - for (let i2 = 0; i2 <= (base - 1); i2++){ - full.push(`${nonFilteredCharMap[i1]}${nonFilteredCharMap[i2]}`) - } - } - - var abFilterMap = {} - var index = 0 - for(var filterWord of full){ - var listCode = index%base - var listKey = nonFilteredCharMap[listCode] - - if(typeof(abFilterMap[listKey]) == "undefined") - abFilterMap[listKey] = [] - - index++ - - let wordIndex = mugunghwa.getWordIndex(filterWord, nonFilteredCharMap, base) - - if(negativeWords.indexOf(wordIndex) != -1) - continue - abFilterMap[listKey].push(filterWord) - } -} - -// ํ•„ํ„ฐ๋ง ๋˜์ง€ ์•Š์€ ๊ธ€์ž ๋ชฉ๋ก ์ •๋ ฌ๋ฒ• -// console.log(JSON.stringify(nonFiltered84CharMap.sort())) - -// ํ•„ํ„ฐ๋ง ๋˜์ง€ ์•Š์€ 84์ง„๋ฒ• ๊ธ€์ž๋“ค์„ txt๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. -fs.writeFileSync(__dirname + "/84_non_filtered.txt", getNonFilteredWordsTxt(84, nonFiltered84CharMap)) - -/** - * ํ•„ํ„ฐ๋ง ๋œ 72์ง„๋ฒ• ๋‹จ์–ด ๋ชฉ๋ก - * (์ตœ์ข…์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค!) - */ -var filtered72BaseWordsMap = [] - -/** - * 84์ง„๋ฒ• ๋‹จ์–ด ์ค‘ ์ง€์–‘ํ•ด์•ผํ•  ๋‹จ์–ด ๋ชฉ๋ก - */ -var negativeWords = [] - -/** - * ์ง€์–‘ํ•ด์•ผํ•  ๋‹จ์–ด ๋ชฉ๋ก์„ ํŒŒ์ผ์—์„œ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. - */ -var loadNegativeWordsFile = () => { - var filterData = fs.readFileSync(__dirname + "/84_negative_words.txt", "utf8").split(" ") - - for (let filterWord of filterData) { - let wordIndex = getWordIndex(filterWord, nonFiltered84CharMap, 84) - if(negativeWords.indexOf(wordIndex) != -1) continue - negativeWords.push(wordIndex) - } -} - -loadNegativeWordsFile() - -// ์„ค๊ณ„์ƒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” 84์ง„๋ฒ• ์ƒ ์ตœ๋Œ€ ์ˆซ์ž๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -var available84BaseCount = mugunghwa.decimalBase([84, 84], [83, 83]) + 1 - -// ์„ค๊ณ„ ์ƒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” 72์ง„๋ฒ• ์ƒ ์ตœ๋Œ€ ์ˆซ์ž๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -var available72BaseCount = mugunghwa.decimalBase([72, 72], [71, 71]) + 1 - -// ์„ค๊ณ„ ์ƒ ํ•„ํ„ฐ๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ง„๋ฒ• ์ฐจ๋กœ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -var availableFilterCount = available84BaseCount - available72BaseCount - -// ์„ค๊ณ„ ์ƒ ํ•„ํ„ฐ๊ฐ€ ์ ์šฉ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ํผ์„ผํŠธ๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -var availableFilterPercentage = (availableFilterCount / available72BaseCount) * 100 - -/** - * ํ•„ํ„ฐ๋ง ๋œ 72์ง„๋ฒ•์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. - */ -var filterize = () => { - let filteredMap = [] - for (let i = 0; i < available84BaseCount; i++) { - let isNegativeWord = negativeWords.indexOf(i) !== -1 - if (isNegativeWord) continue - let charIndexMatrix = mugunghwa.multipleBase([84, 84], i) - - let encodedWord = nonFiltered84CharMap[charIndexMatrix[0]] + nonFiltered84CharMap[charIndexMatrix[1]] - filteredMap.push(encodedWord) - } - filtered72BaseWordsMap = filteredMap -} - -filterize() - -/** - * ํ•„ํ„ฐ๋ง ๊ตฌ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ๋“ค์„ txt๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. - */ -var outputResult = () => { - let filteredWordsTxt = "" - let notUsedWordsTxt = "" - - for (let i = 0; i < (available72BaseCount); i++) - filteredWordsTxt += `${filtered72BaseWordsMap[i]} ` - - for (let i = (available72BaseCount); i < filtered72BaseWordsMap.length; i++) - notUsedWordsTxt += `${filtered72BaseWordsMap[i]} ` - - fs.writeFileSync(__dirname + "/84_filtered.txt", filteredWordsTxt) - - if(notUsedWordsTxt.length != 0) - fs.writeFileSync(__dirname + "/84_filter_not_used_words.txt", notUsedWordsTxt) -} - -outputResult() - -/** - * 84->72์ง„๋ฒ•์˜ ๋ชฉํ‘œ ๋‹ฌ์„ฑ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. - */ -var printStatus = () => { - console.log("------------------๊ธฐ๋ณธ์ •๋ณด------------------") - console.log(`84์ง„๋ฒ• ์ตœ๋Œ€ ๊ฒฝ์šฐ์ˆ˜: ${available84BaseCount}`) - console.log(`72์ง„๋ฒ• ์ตœ๋Œ€ ๊ฒฝ์šฐ์ˆ˜: ${available72BaseCount}`) - console.log(`12๋ณด์ˆ˜ ์ตœ๋Œ€ ๊ฒฝ์šฐ์ˆ˜: ${availableFilterCount}`) - console.log(`12๋ณด์ˆ˜ ๋ณด์™„ ํผ์„ผํŠธ: ${availableFilterPercentage}%`) - console.log("------------------๊ตฌ์„ฑ์ƒํƒœ------------------") - console.log(`ํ˜„์žฌ ๊ตฌ์„ฑ๋œ ๋งต๊ฐœ์ˆ˜: ${filtered72BaseWordsMap.length}`) - console.log(`ํ˜„์žฌ ๊ตฌ์„ฑ๋œ ๋ฐฐ์ œ์ˆ˜: ${negativeWords.length}`) - console.log("------------------๋‹ฌ์„ฑ์ƒํƒœ------------------") - console.log(`12๋ณด์ˆ˜ ์ด์šฉ ํผ์„ผํŠธ: ${negativeWords.length/availableFilterCount*100}%`) - console.log(`12๋ณด์ˆ˜ ํ˜„์žฌ ์ด์šฉ๋ฅ : ${negativeWords.length}/${availableFilterCount}`) - console.log(`์ œ๊ฑฐ ๊ฐ€๋Šฅํ•œ ๋‹จ์–ด์ˆ˜: ${availableFilterCount-(negativeWords.length)}`) -} - -printStatus() \ No newline at end of file diff --git a/packages/mugunghwa/sources/84_filtered.txt b/packages/mugunghwa/sources/84_filtered.txt deleted file mode 100644 index c0068f4..0000000 --- a/packages/mugunghwa/sources/84_filtered.txt +++ /dev/null @@ -1 +0,0 @@ -๋‚˜๋‹จ ๋‚˜๋‹ด ๋‚˜๋ผ ๋‚˜๋ž˜ ๋‚˜๋ฅ˜ ๋‚˜๋ฆฌ ๋‚˜๋ชจ ๋‚˜๋ฏผ ๋‚˜์‚ฌ ๋‚˜์‚ฐ ๋‚˜์ƒ ๋‚˜์ƒˆ ๋‚˜์ƒ ๋‚˜์„  ๋‚˜์„ฑ ๋‚˜์†Œ ๋‚˜์†” ๋‚˜์†œ ๋‚˜์†ก ๋‚˜์ˆ˜ ๋‚˜์‹  ๋‚˜์‹ค ๋‚˜์‹ฌ ๋‚˜์•ˆ ๋‚˜์•  ๋‚˜์–‘ ๋‚˜์—ฐ ๋‚˜์˜ˆ ๋‚˜์˜จ ๋‚˜์š” ๋‚˜์šฐ ๋‚˜์›” ๋‚˜์œค ๋‚˜์œจ ๋‚˜์€ ๋‚˜์ผ ๋‚˜์ • ๋‚˜์ฐจ ๋‚˜์ฒœ ๋‚˜์ฒจ ๋‚˜์ฒญ ๋‚˜ํ‘œ ๋‚˜ํ•˜ ๋‚˜ํ•œ ๋‚˜ํ•ด ๋‚˜ํ–ฅ ๋‚˜ํ˜„ ๋‚˜ํ˜ผ ๋‚˜ํ™ ๋‚˜ํ™” ๋‚˜ํšจ ๋‚˜๋‚จ ๋‚˜๋ˆˆ ๋‚˜๋‹ฌ ๋‚˜๋‹น ๋‚˜๋ด„ ๋‚˜๋น„ ๋‚˜์Šฌ ๋‚˜์—ด ๋‚˜์˜ ๋‚˜์ž ๋‚˜ํ˜œ ๋‚œ๋‚˜ ๋‚œ๋‹ด ๋‚œ๋„ ๋‚œ๋ผ ๋‚œ๋ž˜ ๋‚œ๋ชจ ๋‚œ๋ฏธ ๋‚œ์‚ฐ ๋‚œ์ƒˆ ๋‚œ์„œ ๋‚œ์„  ๋‚œ์„ค ๋‚œ์„ฌ ๋‚œ์„ฑ ๋‚œ์†” ๋‚œ์†œ ๋‚œ์†ก ๋‚œ์ˆ˜ ๋‚œ์‹  ๋‚œ์‹ค ๋‚œ์‹ฌ ๋‚œ์•„ ๋‚œ์•  ๋‚œ์–‘ ๋‚œ์—ฌ ๋‚œ์—ฐ ๋‚œ์˜ˆ ๋‚œ์˜ค ๋‚œ์˜จ ๋‚œ์šฐ ๋‚œ์›” ๋‚œ์œค ๋‚œ์œจ ๋‚œ์€ ๋‚œ์ผ ๋‚œ์ • ๋‚œ์ฐจ ๋‚œ์ฐฝ ๋‚œ์ฑ„ ๋‚œ์ฒœ ๋‚œ์ฒจ ๋‚œ์ดˆ ๋‚œ์ด ๋‚œํ‘œ ๋‚œํ•˜ ๋‚œํ•œ ๋‚œํ–ฅ ๋‚œํ˜„ ๋‚œํ˜ผ ๋‚œํ™ ๋‚œํ™” ๋‚œํšจ ๋‚œ๋ˆˆ ๋‚œ๋‹ฌ ๋‚œ๋ด„ ๋‚œ๋น„ ๋‚œ์Šฌ ๋‚œ์—ด ๋‚œ์˜ ๋‚œํ˜œ ๋‚ด๋‹จ ๋‚ด๋‹ด ๋‚ด๋ฅ˜ ๋‚ด๋ชจ ๋‚ด๋ฌด ๋‚ด์‚ฌ ๋‚ด์‚ฐ ๋‚ด์ƒˆ ๋‚ด์ƒ ๋‚ด์„œ ๋‚ด์„  ๋‚ด์„ค ๋‚ด์„ฌ ๋‚ด์„ฑ ๋‚ด์†Œ ๋‚ด์†” ๋‚ด์†œ ๋‚ด์†ก ๋‚ด์ˆ˜ ๋‚ด์‹ค ๋‚ด์•„ ๋‚ด์•ˆ ๋‚ด์–‘ ๋‚ด์—ฌ ๋‚ด์˜ค ๋‚ด์˜จ ๋‚ด์›” ๋‚ด์œค ๋‚ด์œจ ๋‚ด์€ ๋‚ด์ด ๋‚ด์ผ ๋‚ด์ž„ ๋‚ด์ฐจ ๋‚ด์ฐฝ ๋‚ด์ฑ„ ๋‚ด์ฒœ ๋‚ด์ฒจ ๋‚ด์ฒญ ๋‚ด์ดˆ ๋‚ด์ด ๋‚ดํ‘œ ๋‚ดํ•˜ ๋‚ดํ•ด ๋‚ดํ–ฅ ๋‚ดํ˜„ ๋‚ดํ˜ผ ๋‚ดํ™ ๋‚ดํ™” ๋‚ดํšจ ๋‚ด๋‚จ ๋‚ด๋ˆˆ ๋‚ด๋‹ฌ ๋‚ด๋‹น ๋‚ด๋ด„ ๋‚ด์Šฌ ๋‚ด์—ด ๋‚ด์˜ ๋‚ด์ž ๋‚ดํƒœ ๋‚ดํ˜œ ๋‹ค๋‚˜ ๋‹ค๋‚œ ๋‹ค๋‹จ ๋‹ค๋‹ด ๋‹ค๋„ ๋‹ค๋ผ ๋‹ค๋ž˜ ๋‹ค๋ฅ˜ ๋‹ค๋ชจ ๋‹ค๋ฌด ๋‹ค๋ฏธ ๋‹ค๋ฏผ ๋‹ค์‚ฌ ๋‹ค์‚ฐ ๋‹ค์ƒ ๋‹ค์ƒˆ ๋‹ค์ƒ ๋‹ค์„œ ๋‹ค์„  ๋‹ค์„ค ๋‹ค์„ฌ ๋‹ค์„ฑ ๋‹ค์†Œ ๋‹ค์†” ๋‹ค์†œ ๋‹ค์†ก ๋‹ค์ˆ˜ ๋‹ค์‹ค ๋‹ค์‹ฌ ๋‹ค์•ˆ ๋‹ค์•  ๋‹ค์–‘ ๋‹ค์—ฌ ๋‹ค์—ฐ ๋‹ค์˜ˆ ๋‹ค์˜จ ๋‹ค์š” ๋‹ค์šฐ ๋‹ค์›” ๋‹ค์œ  ๋‹ค์œค ๋‹ค์œจ ๋‹ค์€ ๋‹ค์ผ ๋‹ค์ž„ ๋‹ค์ • ๋‹ค์ฐจ ๋‹ค์ฐฝ ๋‹ค์ฑ„ ๋‹ค์ฒœ ๋‹ค์ฒจ ๋‹ค์ฒญ ๋‹ค์ดˆ ๋‹ค์ด ๋‹คํ‘œ ๋‹คํ•˜ ๋‹คํ–ฅ ๋‹คํ˜„ ๋‹คํ˜ผ ๋‹คํ™ ๋‹คํ™” ๋‹คํšจ ๋‹ค๋‚จ ๋‹ค๋ˆˆ ๋‹ค๋‹ฌ ๋‹ค๋‹น ๋‹ค๋ด„ ๋‹ค๋น„ ๋‹ค์Šฌ ๋‹ค์—ด ๋‹ค์˜ ๋‹ค์ž ๋‹คํƒœ ๋‹คํ˜œ ๋‹จ๋‚˜ ๋‹จ๋‚œ ๋‹จ๋‚ด ๋‹จ๋‹ค ๋‹จ๋‹ด ๋‹จ๋„ ๋‹จ๋ผ ๋‹จ๋ž˜ ๋‹จ๋ฅ˜ ๋‹จ๋ฆฌ ๋‹จ๋ชจ ๋‹จ๋ฌด ๋‹จ๋ฏธ ๋‹จ๋ฏผ ๋‹จ์‚ฌ ๋‹จ์‚ฐ ๋‹จ์ƒ ๋‹จ์ƒˆ ๋‹จ์ƒ ๋‹จ์„  ๋‹จ์„ค ๋‹จ์„ฌ ๋‹จ์„ฑ ๋‹จ์†Œ ๋‹จ์†” ๋‹จ์†œ ๋‹จ์†ก ๋‹จ์‹œ ๋‹จ์‹ค ๋‹จ์•„ ๋‹จ์•ˆ ๋‹จ์•  ๋‹จ์–‘ ๋‹จ์—ฌ ๋‹จ์˜ˆ ๋‹จ์˜ค ๋‹จ์˜จ ๋‹จ์š” ๋‹จ์šฐ ๋‹จ์›” ๋‹จ์œ  ๋‹จ์œค ๋‹จ์œจ ๋‹จ์€ ๋‹จ์ด ๋‹จ์ž„ ๋‹จ์ • ๋‹จ์ฐจ ๋‹จ์ฐฝ ๋‹จ์ฑ„ ๋‹จ์ฒœ ๋‹จ์ฒจ ๋‹จ์ฒญ ๋‹จ์ดˆ ๋‹จ์ด ๋‹จํ‘œ ๋‹จํ•˜ ๋‹จํ•œ ๋‹จํ•ด ๋‹จํ–ฅ ๋‹จํ˜„ ๋‹จํ˜ผ ๋‹จํ™ ๋‹จํ™” ๋‹จํšจ ๋‹จ๋‚จ ๋‹จ๋ˆˆ ๋‹จ๋‹ฌ ๋‹จ๋ด„ ๋‹จ๋น„ ๋‹จ์Šฌ ๋‹จ์˜ ๋‹จ์ž ๋‹จํƒœ ๋‹จํ˜œ ๋‹ด๋‚˜ ๋‹ด๋‚œ ๋‹ด๋‹จ ๋‹ด๋„ ๋‹ด๋ผ ๋‹ด๋ž˜ ๋‹ด๋ฅ˜ ๋‹ด๋ฆฌ ๋‹ด๋ชจ ๋‹ด๋ฌด ๋‹ด๋ฏธ ๋‹ด๋ฏผ ๋‹ด์‚ฌ ๋‹ด์‚ฐ ๋‹ด์ƒ ๋‹ด์ƒˆ ๋‹ด์ƒ ๋‹ด์„œ ๋‹ด์„  ๋‹ด์„ค ๋‹ด์„ฌ ๋‹ด์„ฑ ๋‹ด์†Œ ๋‹ด์†” ๋‹ด์†œ ๋‹ด์†ก ๋‹ด์ˆ˜ ๋‹ด์‹œ ๋‹ด์‹  ๋‹ด์‹ค ๋‹ด์‹ฌ ๋‹ด์•ˆ ๋‹ด์•  ๋‹ด์–‘ ๋‹ด์—ฌ ๋‹ด์—ฐ ๋‹ด์˜ˆ ๋‹ด์˜ค ๋‹ด์˜จ ๋‹ด์š” ๋‹ด์šฐ ๋‹ด์›” ๋‹ด์œ  ๋‹ด์œค ๋‹ด์œจ ๋‹ด์€ ๋‹ด์ด ๋‹ด์ผ ๋‹ด์ • ๋‹ด์ฐจ ๋‹ด์ฐฝ ๋‹ด์ฑ„ ๋‹ด์ฒœ ๋‹ด์ฒจ ๋‹ด์ฒญ ๋‹ด์ดˆ ๋‹ด์ด ๋‹ดํ‘œ ๋‹ดํ•˜ ๋‹ดํ•œ ๋‹ดํ•ด ๋‹ดํ–ฅ ๋‹ดํ˜„ ๋‹ดํ˜ผ ๋‹ดํ™ ๋‹ดํ™” ๋‹ดํšจ ๋‹ด๋‚จ ๋‹ด๋ˆˆ ๋‹ด๋‹ฌ ๋‹ด๋‹น ๋‹ด๋ด„ ๋‹ด๋น„ ๋‹ด์Šฌ ๋‹ด์—ด ๋‹ด์˜ ๋‹ด์ž ๋‹ดํ˜œ ๋„๋‚˜ ๋„๋‚ด ๋„๋‹ค ๋„๋‹จ ๋„๋‹ด ๋„๋ฅ˜ ๋„๋ฆฌ ๋„๋ฌด ๋„์‚ฌ ๋„์ƒ ๋„์ƒˆ ๋„์ƒ ๋„์„œ ๋„์„  ๋„์„ค ๋„์„ฌ ๋„์†Œ ๋„์†” ๋„์†œ ๋„์†ก ๋„์ˆ˜ ๋„์‹  ๋„์‹ค ๋„์•„ ๋„์•ˆ ๋„์•  ๋„์–‘ ๋„์—ฌ ๋„์—ฐ ๋„์˜ˆ ๋„์˜จ ๋„์š” ๋„์šฐ ๋„์›” ๋„์œ  ๋„์œค ๋„์œจ ๋„์€ ๋„์ด ๋„์ผ ๋„์ž„ ๋„์ • ๋„์ฐจ ๋„์ฐฝ ๋„์ฑ„ ๋„์ฒœ ๋„์ฒจ ๋„์ดˆ ๋„์ด ๋„ํ•˜ ๋„ํ•œ ๋„ํ•ด ๋„ํ–ฅ ๋„ํ˜„ ๋„ํ˜ผ ๋„ํ™ ๋„ํ™” ๋„ํšจ ๋„๋‚จ ๋„๋ˆˆ ๋„๋‹ฌ ๋„๋‹น ๋„๋ด„ ๋„๋น„ ๋„์Šฌ ๋„์—ด ๋„์˜ ๋„์ž ๋„ํ˜œ ๋ผ์œค ๋ผ์œจ ๋ผ์€ ๋ผ์ • ๋ผํ˜„ ๋ž˜๋‹ด ๋ž˜์„  ๋ž˜์†œ ๋ž˜์—ฐ ๋ฅ˜์„  ๋ฆฌ์„  ๋ฆฌ์„ค ๋ฆฌ์†” ๋ฆฌ์†œ ๋ฆฌ์†ก ๋ฆฌ์—ฐ ๋ชจ๋‚˜ ๋ชจ๋‚ด ๋ชจ๋‹ค ๋ชจ๋‹จ ๋ชจ๋‹ด ๋ชจ๋„ ๋ชจ๋ž˜ ๋ชจ๋ฅ˜ ๋ชจ๋ฆฌ ๋ชจ๋ฏธ ๋ชจ์‚ฐ ๋ชจ์ƒ ๋ชจ์ƒˆ ๋ชจ์ƒ ๋ชจ์„œ ๋ชจ์„  ๋ชจ์„ค ๋ชจ์„ฌ ๋ชจ์„ฑ ๋ชจ์†Œ ๋ชจ์†” ๋ชจ์†œ ๋ชจ์†ก ๋ชจ์ˆ˜ ๋ชจ์•ˆ ๋ชจ์—ฐ ๋ชจ์›” ๋ชจ์œค ๋ชจ์œจ ๋ชจ์€ ๋ชจ์ผ ๋ชจ์ฐจ ๋ชจ์ฐฝ ๋ชจ์ฑ„ ๋ชจ์ฒœ ๋ชจ์ฒจ ๋ชจ์ฒญ ๋ชจ์ดˆ ๋ชจ์ด ๋ชจํ‘œ ๋ชจํ•˜ ๋ชจํ•œ ๋ชจํ–ฅ ๋ชจํ˜„ ๋ชจํ˜ผ ๋ชจํ™ ๋ชจํ™” ๋ชจํšจ ๋ชจ๋ˆˆ ๋ชจ๋‹ฌ ๋ชจ์Šฌ ๋ชจ์—ด ๋ชจ์˜ ๋ชจํƒœ ๋ชจํ˜œ ๋ฌด์ƒ ๋ฌด์„ค ๋ฌด์„ฌ ๋ฌด์†” ๋ฌด์†œ ๋ฌด์†ก ๋ฌด์ˆ˜ ๋ฌด์•„ ๋ฌด์›” ๋ฌด์œค ๋ฌด์œจ ๋ฌด์€ ๋ฌด์ฑ„ ๋ฌด์ฒญ ๋ฌดํ–ฅ ๋ฌดํ™” ๋ฏธ๋‚˜ ๋ฏธ๋‚œ ๋ฏธ๋‹ค ๋ฏธ๋‹จ ๋ฏธ๋„ ๋ฏธ๋ž˜ ๋ฏธ๋ฅ˜ ๋ฏธ๋ฌด ๋ฏธ๋ฏผ ๋ฏธ์‚ฌ ๋ฏธ์‚ฐ ๋ฏธ์ƒˆ ๋ฏธ์ƒ ๋ฏธ์„œ ๋ฏธ์„  ๋ฏธ์„ค ๋ฏธ์„ฌ ๋ฏธ์„ฑ ๋ฏธ์†Œ ๋ฏธ์†” ๋ฏธ์†œ ๋ฏธ์†ก ๋ฏธ์‹ค ๋ฏธ์•  ๋ฏธ์–‘ ๋ฏธ์—ฌ ๋ฏธ์—ฐ ๋ฏธ์˜ˆ ๋ฏธ์˜ค ๋ฏธ์˜จ ๋ฏธ์š” ๋ฏธ์šฐ ๋ฏธ์›” ๋ฏธ์œ  ๋ฏธ์œค ๋ฏธ์œจ ๋ฏธ์€ ๋ฏธ์ผ ๋ฏธ์ž„ ๋ฏธ์ • ๋ฏธ์ฐฝ ๋ฏธ์ฑ„ ๋ฏธ์ฒจ ๋ฏธ์ฒญ ๋ฏธ์ดˆ ๋ฏธ์ด ๋ฏธํ‘œ ๋ฏธํ•˜ ๋ฏธํ•œ ๋ฏธํ•ด ๋ฏธํ–ฅ ๋ฏธํ˜„ ๋ฏธํ™ ๋ฏธํšจ ๋ฏธ๋ˆˆ ๋ฏธ๋‹น ๋ฏธ๋ด„ ๋ฏธ์Šฌ ๋ฏธ์—ด ๋ฏธ์˜ ๋ฏธ์ž ๋ฏธํƒœ ๋ฏธํ˜œ ๋ฏผ๋‚œ ๋ฏผ๋‹จ ๋ฏผ๋„ ๋ฏผ๋ผ ๋ฏผ๋ž˜ ๋ฏผ๋ฅ˜ ๋ฏผ๋ฆฌ ๋ฏผ๋ฌด ๋ฏผ๋ฏธ ๋ฏผ์‚ฐ ๋ฏผ์ƒ ๋ฏผ์ƒˆ ๋ฏผ์„œ ๋ฏผ์„  ๋ฏผ์„ค ๋ฏผ์„ฌ ๋ฏผ์„ฑ ๋ฏผ์†Œ ๋ฏผ์†” ๋ฏผ์†œ ๋ฏผ์†ก ๋ฏผ์ˆ˜ ๋ฏผ์‹œ ๋ฏผ์‹  ๋ฏผ์‹ค ๋ฏผ์•„ ๋ฏผ์•ˆ ๋ฏผ์•  ๋ฏผ์–‘ ๋ฏผ์—ฌ ๋ฏผ์—ฐ ๋ฏผ์˜ˆ ๋ฏผ์˜ค ๋ฏผ์šฐ ๋ฏผ์›” ๋ฏผ์œค ๋ฏผ์œจ ๋ฏผ์€ ๋ฏผ์ด ๋ฏผ์ผ ๋ฏผ์ž„ ๋ฏผ์ • ๋ฏผ์ฐจ ๋ฏผ์ฐฝ ๋ฏผ์ฑ„ ๋ฏผ์ฒœ ๋ฏผ์ฒจ ๋ฏผ์ฒญ ๋ฏผ์ดˆ ๋ฏผ์ด ๋ฏผํ‘œ ๋ฏผํ•˜ ๋ฏผํ•œ ๋ฏผํ•ด ๋ฏผํ–ฅ ๋ฏผํ˜„ ๋ฏผํ˜ผ ๋ฏผํ™ ๋ฏผํšจ ๋ฏผ๋ˆˆ ๋ฏผ๋‹ฌ ๋ฏผ๋‹น ๋ฏผ๋ด„ ๋ฏผ์Šฌ ๋ฏผ์—ด ๋ฏผ์˜ ๋ฏผ์ž ๋ฏผํƒœ ๋ฏผํ˜œ ์‚ฌ๋‚œ ์‚ฌ๋‹ด ์‚ฌ๋ฅ˜ ์‚ฌ๋ฌด ์‚ฌ๋ฏธ ์‚ฌ๋ฏผ ์‚ฌ์‚ฐ ์‚ฌ์ƒ ์‚ฌ์„ฌ ์‚ฌ์„ฑ ์‚ฌ์†” ์‚ฌ์†œ ์‚ฌ์†ก ์‚ฌ์ˆ˜ ์‚ฌ์‹ค ์‚ฌ์‹ฌ ์‚ฌ์•ˆ ์‚ฌ์•  ์‚ฌ์—ฐ ์‚ฌ์˜ˆ ์‚ฌ์›” ์‚ฌ์œ  ์‚ฌ์œค ์‚ฌ์œจ ์‚ฌ์€ ์‚ฌ์ด ์‚ฌ์ผ ์‚ฌ์ฐจ ์‚ฌ์ฒœ ์‚ฌ์ฒจ ์‚ฌ์ฒญ ์‚ฌ์ดˆ ์‚ฌ์ด ์‚ฌํ•˜ ์‚ฌํ•œ ์‚ฌํ–ฅ ์‚ฌํ˜„ ์‚ฌํ˜ผ ์‚ฌํ™ ์‚ฌํ™” ์‚ฌํšจ ์‚ฌ๋‚จ ์‚ฌ๋ˆˆ ์‚ฌ๋‹ฌ ์‚ฌ๋‹น ์‚ฌ์—ด ์‚ฌ์˜ ์‚ฌํ˜œ ์‚ฐ๋‚˜ ์‚ฐ๋‚œ ์‚ฐ๋‚ด ์‚ฐ๋‹จ ์‚ฐ๋‹ด ์‚ฐ๋„ ์‚ฐ๋ผ ์‚ฐ๋ž˜ ์‚ฐ๋ฅ˜ ์‚ฐ๋ฆฌ ์‚ฐ๋ฌด ์‚ฐ๋ฏธ ์‚ฐ๋ฏผ ์‚ฐ์‚ฌ ์‚ฐ์ƒ ์‚ฐ์ƒˆ ์‚ฐ์ƒ ์‚ฐ์„œ ์‚ฐ์„  ์‚ฐ์„ค ์‚ฐ์„ฌ ์‚ฐ์†Œ ์‚ฐ์†” ์‚ฐ์†œ ์‚ฐ์†ก ์‚ฐ์ˆ˜ ์‚ฐ์‹œ ์‚ฐ์‹  ์‚ฐ์‹ค ์‚ฐ์‹ฌ ์‚ฐ์•„ ์‚ฐ์•ˆ ์‚ฐ์•  ์‚ฐ์–‘ ์‚ฐ์—ฌ ์‚ฐ์—ฐ ์‚ฐ์˜ˆ ์‚ฐ์˜ค ์‚ฐ์˜จ ์‚ฐ์š” ์‚ฐ์šฐ ์‚ฐ์›” ์‚ฐ์œ  ์‚ฐ์œค ์‚ฐ์œจ ์‚ฐ์€ ์‚ฐ์ผ ์‚ฐ์ž„ ์‚ฐ์ • ์‚ฐ์ฐจ ์‚ฐ์ฐฝ ์‚ฐ์ฑ„ ์‚ฐ์ฒœ ์‚ฐ์ฒจ ์‚ฐ์ฒญ ์‚ฐ์ดˆ ์‚ฐ์ด ์‚ฐํ‘œ ์‚ฐํ•˜ ์‚ฐํ•œ ์‚ฐํ•ด ์‚ฐํ–ฅ ์‚ฐํ˜„ ์‚ฐํ˜ผ ์‚ฐํ™ ์‚ฐํ™” ์‚ฐํšจ ์‚ฐ๋‚จ ์‚ฐ๋ˆˆ ์‚ฐ๋‹ฌ ์‚ฐ๋ด„ ์‚ฐ๋น„ ์‚ฐ์Šฌ ์‚ฐ์—ด ์‚ฐ์˜ ์‚ฐ์ž ์‚ฐํƒœ ์‚ฐํ˜œ ์ƒ๋‚˜ ์ƒ๋‚ด ์ƒ๋‹ค ์ƒ๋‹จ ์ƒ๋„ ์ƒ๋ผ ์ƒ๋ž˜ ์ƒ๋ฅ˜ ์ƒ๋ฆฌ ์ƒ๋ชจ ์ƒ๋ฌด ์ƒ๋ฏธ ์ƒ๋ฏผ ์ƒ์‚ฐ ์ƒ์ƒˆ ์ƒ์ƒ ์ƒ์„œ ์ƒ์„ค ์ƒ์„ฌ ์ƒ์„ฑ ์ƒ์†” ์ƒ์†œ ์ƒ์†ก ์ƒ์‹  ์ƒ์•„ ์ƒ์•ˆ ์ƒ์•  ์ƒ์–‘ ์ƒ์—ฌ ์ƒ์—ฐ ์ƒ์˜ˆ ์ƒ์˜ค ์ƒ์˜จ ์ƒ์šฐ ์ƒ์›” ์ƒ์œ  ์ƒ์œค ์ƒ์œจ ์ƒ์€ ์ƒ์ด ์ƒ์ผ ์ƒ์ž„ ์ƒ์ฐจ ์ƒ์ฐฝ ์ƒ์ฑ„ ์ƒ์ฒœ ์ƒ์ฒจ ์ƒ์ฒญ ์ƒ์ดˆ ์ƒ์ด ์ƒํ•˜ ์ƒํ–ฅ ์ƒํ˜„ ์ƒํ˜ผ ์ƒํ™ ์ƒํ™” ์ƒํšจ ์ƒ๋‚จ ์ƒ๋ˆˆ ์ƒ๋‹ฌ ์ƒ๋‹น ์ƒ๋ด„ ์ƒ๋น„ ์ƒ์Šฌ ์ƒ์—ด ์ƒ์˜ ์ƒ์ž ์ƒํƒœ ์ƒํ˜œ ์ƒˆ๋‚œ ์ƒˆ๋‹จ ์ƒˆ๋‹ด ์ƒˆ๋„ ์ƒˆ๋ฅ˜ ์ƒˆ๋ฌด ์ƒˆ๋ฏธ ์ƒˆ๋ฏผ ์ƒˆ์‚ฌ ์ƒˆ์‚ฐ ์ƒˆ์ƒ ์ƒˆ์ƒ ์ƒˆ์„œ ์ƒˆ์„  ์ƒˆ์„ค ์ƒˆ์„ฌ ์ƒˆ์„ฑ ์ƒˆ์†Œ ์ƒˆ์†” ์ƒˆ์†œ ์ƒˆ์†ก ์ƒˆ์ˆ˜ ์ƒˆ์‹œ ์ƒˆ์‹  ์ƒˆ์‹ค ์ƒˆ์‹ฌ ์ƒˆ์•„ ์ƒˆ์•ˆ ์ƒˆ์–‘ ์ƒˆ์—ฌ ์ƒˆ์—ฐ ์ƒˆ์˜ˆ ์ƒˆ์˜ค ์ƒˆ์˜จ ์ƒˆ์š” ์ƒˆ์›” ์ƒˆ์œ  ์ƒˆ์œค ์ƒˆ์œจ ์ƒˆ์€ ์ƒˆ์ด ์ƒˆ์ผ ์ƒˆ์ž„ ์ƒˆ์ • ์ƒˆ์ฐจ ์ƒˆ์ฐฝ ์ƒˆ์ฑ„ ์ƒˆ์ฒœ ์ƒˆ์ฒจ ์ƒˆ์ฒญ ์ƒˆ์ดˆ ์ƒˆ์ด ์ƒˆํ‘œ ์ƒˆํ•˜ ์ƒˆํ•œ ์ƒˆํ•ด ์ƒˆํ–ฅ ์ƒˆํ˜„ ์ƒˆํ˜ผ ์ƒˆํ™ ์ƒˆํ™” ์ƒˆํšจ ์ƒˆ๋‚จ ์ƒˆ๋ˆˆ ์ƒˆ๋‹ฌ ์ƒˆ๋‹น ์ƒˆ๋ด„ ์ƒˆ๋น„ ์ƒˆ์Šฌ ์ƒˆ์—ด ์ƒˆ์˜ ์ƒˆ์ž ์ƒˆํƒœ ์ƒˆํ˜œ ์ƒ๋‚˜ ์ƒ๋‚œ ์ƒ๋‚ด ์ƒ๋‹ค ์ƒ๋‹จ ์ƒ๋‹ด ์ƒ๋„ ์ƒ๋ผ ์ƒ๋ž˜ ์ƒ๋ฅ˜ ์ƒ๋ฌด ์ƒ๋ฏธ ์ƒ๋ฏผ ์ƒ์ƒ ์ƒ์„œ ์ƒ์„ค ์ƒ์„ฌ ์ƒ์†” ์ƒ์†œ ์ƒ์†ก ์ƒ์‹œ ์ƒ์‹ค ์ƒ์‹ฌ ์ƒ์•„ ์ƒ์•ˆ ์ƒ์–‘ ์ƒ์—ฌ ์ƒ์—ฐ ์ƒ์˜ˆ ์ƒ์˜ค ์ƒ์˜จ ์ƒ์š” ์ƒ์šฐ ์ƒ์›” ์ƒ์œ  ์ƒ์œค ์ƒ์œจ ์ƒ์€ ์ƒ์ด ์ƒ์ž„ ์ƒ์ • ์ƒ์ฐจ ์ƒ์ฐฝ ์ƒ์ฑ„ ์ƒ์ฒœ ์ƒ์ฒจ ์ƒ์ฒญ ์ƒ์ดˆ ์ƒ์ด ์ƒํ‘œ ์ƒํ•˜ ์ƒํ•œ ์ƒํ•ด ์ƒํ–ฅ ์ƒํ˜„ ์ƒํ˜ผ ์ƒํ™ ์ƒํ™” ์ƒํšจ ์ƒ๋‚จ ์ƒ๋ˆˆ ์ƒ๋‹ฌ ์ƒ๋‹น ์ƒ๋ด„ ์ƒ๋น„ ์ƒ์Šฌ ์ƒ์—ด ์ƒ์˜ ์ƒ์ž ์ƒํƒœ ์ƒํ˜œ ์„œ๋‚œ ์„œ๋‹จ ์„œ๋‹ด ์„œ๋ฅ˜ ์„œ๋ฆฌ ์„œ๋ชจ ์„œ๋ฌด ์„œ๋ฏธ ์„œ์‚ฌ ์„œ์‚ฐ ์„œ์ƒ ์„œ์ƒˆ ์„œ์ƒ ์„œ์„  ์„œ์„ค ์„œ์„ฌ ์„œ์„ฑ ์„œ์†Œ ์„œ์†” ์„œ์†œ ์„œ์†ก ์„œ์ˆ˜ ์„œ์‹œ ์„œ์‹  ์„œ์‹ค ์„œ์‹ฌ ์„œ์•„ ์„œ์•ˆ ์„œ์•  ์„œ์—ฌ ์„œ์—ฐ ์„œ์˜ค ์„œ์˜จ ์„œ์šฐ ์„œ์›” ์„œ์œค ์„œ์œจ ์„œ์€ ์„œ์ด ์„œ์ผ ์„œ์ž„ ์„œ์ • ์„œ์ฐจ ์„œ์ฐฝ ์„œ์ฑ„ ์„œ์ฒœ ์„œ์ฒจ ์„œ์ฒญ ์„œ์ดˆ ์„œ์ด ์„œํ‘œ ์„œํ•˜ ์„œํ•œ ์„œํ•ด ์„œํ–ฅ ์„œํ˜„ ์„œํ˜ผ ์„œํ™ ์„œํ™” ์„œํšจ ์„œ๋‚จ ์„œ๋ˆˆ ์„œ๋‹ฌ ์„œ๋‹น ์„œ๋ด„ ์„œ๋น„ ์„œ์Šฌ ์„œ์—ด ์„œ์˜ ์„œ์ž ์„œํƒœ ์„œํ˜œ ์„ ๋‚œ ์„ ๋‹จ ์„ ๋‹ด ์„ ๋„ ์„ ๋ผ ์„ ๋ž˜ ์„ ๋ฅ˜ ์„ ๋ฆฌ ์„ ๋ชจ ์„ ๋ฌด ์„ ๋ฏธ ์„ ๋ฏผ ์„ ์‚ฌ ์„ ์‚ฐ ์„ ์ƒ ์„ ์ƒˆ ์„ ์„œ ์„ ์„ค ์„ ์„ฌ ์„ ์„ฑ ์„ ์†Œ ์„ ์†” ์„ ์†œ ์„ ์†ก ์„ ์ˆ˜ ์„ ์‹œ ์„ ์‹  ์„ ์‹ค ์„ ์‹ฌ ์„ ์•„ ์„ ์•ˆ ์„ ์•  ์„ ์–‘ ์„ ์—ฌ ์„ ์—ฐ ์„ ์˜ˆ ์„ ์˜ค ์„ ์˜จ ์„ ์š” ์„ ์šฐ ์„ ์›” ์„ ์œ  ์„ ์œค ์„ ์œจ ์„ ์€ ์„ ์ด ์„ ์ผ ์„ ์ž„ ์„ ์ฐจ ์„ ์ฐฝ ์„ ์ฑ„ ์„ ์ฒœ ์„ ์ฒจ ์„ ์ฒญ ์„ ์ดˆ ์„ ์ด ์„ ํ‘œ ์„ ํ•˜ ์„ ํ•œ ์„ ํ•ด ์„ ํ–ฅ ์„ ํ˜„ ์„ ํ˜ผ ์„ ํ™ ์„ ํ™” ์„ ํšจ ์„ ๋‚จ ์„ ๋ˆˆ ์„ ๋‹ฌ ์„ ๋ด„ ์„ ์Šฌ ์„ ์—ด ์„ ์˜ ์„ ์ž ์„ ํƒœ ์„ ํ˜œ ์„ค๋‚˜ ์„ค๋‚œ ์„ค๋‚ด ์„ค๋‹ค ์„ค๋‹จ ์„ค๋‹ด ์„ค๋„ ์„ค๋ผ ์„ค๋ฅ˜ ์„ค๋ชจ ์„ค๋ฌด ์„ค๋ฏธ ์„ค๋ฏผ ์„ค์‚ฐ ์„ค์ƒˆ ์„ค์ƒ ์„ค์„œ ์„ค์„  ์„ค์„ฌ ์„ค์„ฑ ์„ค์†Œ ์„ค์†” ์„ค์†œ ์„ค์†ก ์„ค์ˆ˜ ์„ค์‹œ ์„ค์‹  ์„ค์‹ค ์„ค์‹ฌ ์„ค์•„ ์„ค์•ˆ ์„ค์•  ์„ค์–‘ ์„ค์—ฌ ์„ค์—ฐ ์„ค์˜ˆ ์„ค์˜ค ์„ค์˜จ ์„ค์š” ์„ค์šฐ ์„ค์›” ์„ค์œ  ์„ค์œค ์„ค์œจ ์„ค์€ ์„ค์ด ์„ค์ผ ์„ค์ž„ ์„ค์ฐจ ์„ค์ฐฝ ์„ค์ฑ„ ์„ค์ฒœ ์„ค์ฒจ ์„ค์ฒญ ์„ค์ดˆ ์„ค์ด ์„คํ‘œ ์„คํ•˜ ์„คํ•œ ์„คํ•ด ์„คํ–ฅ ์„คํ˜„ ์„คํ˜ผ ์„คํ™ ์„คํ™” ์„คํšจ ์„ค๋‚จ ์„ค๋ˆˆ ์„ค๋‹ฌ ์„ค๋‹น ์„ค๋ด„ ์„ค๋น„ ์„ค์Šฌ ์„ค์—ด ์„ค์˜ ์„ค์ž ์„คํƒœ ์„คํ˜œ ์„ฌ๋‚˜ ์„ฌ๋‚œ ์„ฌ๋‚ด ์„ฌ๋‹ค ์„ฌ๋‹จ ์„ฌ๋‹ด ์„ฌ๋„ ์„ฌ๋ผ ์„ฌ๋ž˜ ์„ฌ๋ฅ˜ ์„ฌ๋ฆฌ ์„ฌ๋ชจ ์„ฌ๋ฌด ์„ฌ๋ฏธ ์„ฌ๋ฏผ ์„ฌ์‚ฌ ์„ฌ์‚ฐ ์„ฌ์ƒ ์„ฌ์ƒˆ ์„ฌ์ƒ ์„ฌ์„œ ์„ฌ์„  ์„ฌ์„ค ์„ฌ์„ฑ ์„ฌ์†Œ ์„ฌ์†” ์„ฌ์†œ ์„ฌ์†ก ์„ฌ์ˆ˜ ์„ฌ์‹œ ์„ฌ์‹  ์„ฌ์‹ค ์„ฌ์•„ ์„ฌ์•ˆ ์„ฌ์•  ์„ฌ์–‘ ์„ฌ์—ฌ ์„ฌ์—ฐ ์„ฌ์˜ˆ ์„ฌ์˜ค ์„ฌ์˜จ ์„ฌ์š” ์„ฌ์šฐ ์„ฌ์›” ์„ฌ์œ  ์„ฌ์œค ์„ฌ์œจ ์„ฌ์€ ์„ฌ์ผ ์„ฌ์ • ์„ฌ์ฐจ ์„ฌ์ฐฝ ์„ฌ์ฑ„ ์„ฌ์ฒœ ์„ฌ์ฒจ ์„ฌ์ฒญ ์„ฌ์ดˆ ์„ฌ์ด ์„ฌํ‘œ ์„ฌํ•˜ ์„ฌํ•œ ์„ฌํ•ด ์„ฌํ–ฅ ์„ฌํ˜„ ์„ฌํ˜ผ ์„ฌํ™ ์„ฌํ™” ์„ฌํšจ ์„ฌ๋ˆˆ ์„ฌ๋‹ฌ ์„ฌ๋‹น ์„ฌ๋ด„ ์„ฌ๋น„ ์„ฌ์Šฌ ์„ฌ์—ด ์„ฌ์˜ ์„ฌ์ž ์„ฌํƒœ ์„ฌํ˜œ ์„ฑ๋‚˜ ์„ฑ๋‚ด ์„ฑ๋‹ค ์„ฑ๋‹จ ์„ฑ๋‹ด ์„ฑ๋„ ์„ฑ๋ผ ์„ฑ๋ž˜ ์„ฑ๋ฅ˜ ์„ฑ๋ฆฌ ์„ฑ๋ฌด ์„ฑ๋ฏธ ์„ฑ๋ฏผ ์„ฑ์‚ฌ ์„ฑ์‚ฐ ์„ฑ์ƒ ์„ฑ์ƒˆ ์„ฑ์„  ์„ฑ์„ค ์„ฑ์„ฌ ์„ฑ์†” ์„ฑ์†œ ์„ฑ์†ก ์„ฑ์ˆ˜ ์„ฑ์‹œ ์„ฑ์‹  ์„ฑ์‹ค ์„ฑ์‹ฌ ์„ฑ์•„ ์„ฑ์•ˆ ์„ฑ์–‘ ์„ฑ์—ฌ ์„ฑ์—ฐ ์„ฑ์˜ˆ ์„ฑ์˜ค ์„ฑ์˜จ ์„ฑ์š” ์„ฑ์›” ์„ฑ์œ  ์„ฑ์œค ์„ฑ์œจ ์„ฑ์€ ์„ฑ์ด ์„ฑ์ผ ์„ฑ์ž„ ์„ฑ์ • ์„ฑ์ฐจ ์„ฑ์ฐฝ ์„ฑ์ฑ„ ์„ฑ์ฒœ ์„ฑ์ฒจ ์„ฑ์ฒญ ์„ฑ์ดˆ ์„ฑ์ด ์„ฑํ‘œ ์„ฑํ•˜ ์„ฑํ•ด ์„ฑํ˜„ ์„ฑํ˜ผ ์„ฑํ™ ์„ฑํ™” ์„ฑํšจ ์„ฑ๋‚จ ์„ฑ๋ˆˆ ์„ฑ๋‹ฌ ์„ฑ๋‹น ์„ฑ๋ด„ ์„ฑ๋น„ ์„ฑ์Šฌ ์„ฑ์—ด ์„ฑ์˜ ์„ฑ์ž ์„ฑํƒœ ์„ฑํ˜œ ์†Œ๋‚˜ ์†Œ๋‚œ ์†Œ๋‹ค ์†Œ๋‹จ ์†Œ๋‹ด ์†Œ๋„ ์†Œ๋ผ ์†Œ๋ž˜ ์†Œ๋ฅ˜ ์†Œ๋ฌด ์†Œ๋ฏธ ์†Œ๋ฏผ ์†Œ์‚ฌ ์†Œ์‚ฐ ์†Œ์ƒ ์†Œ์ƒˆ ์†Œ์ƒ ์†Œ์„œ ์†Œ์„  ์†Œ์„ฌ ์†Œ์„ฑ ์†Œ์†” ์†Œ์†œ ์†Œ์ˆ˜ ์†Œ์‹œ ์†Œ์‹  ์†Œ์•ˆ ์†Œ์–‘ ์†Œ์—ฌ ์†Œ์—ฐ ์†Œ์˜ˆ ์†Œ์šฐ ์†Œ์›” ์†Œ์œค ์†Œ์œจ ์†Œ์€ ์†Œ์ด ์†Œ์ผ ์†Œ์ž„ ์†Œ์ • ์†Œ์ฐจ ์†Œ์ฐฝ ์†Œ์ฑ„ ์†Œ์ฒœ ์†Œ์ฒจ ์†Œ์ฒญ ์†Œ์ดˆ ์†Œํ‘œ ์†Œํ•˜ ์†Œํ•œ ์†Œํ•ด ์†Œํ–ฅ ์†Œํ˜„ ์†Œํ˜ผ ์†Œํ™ ์†Œํ™” ์†Œํšจ ์†Œ๋‚จ ์†Œ๋‹ฌ ์†Œ๋‹น ์†Œ๋ด„ ์†Œ์Šฌ ์†Œ์—ด ์†Œ์˜ ์†Œ์ž ์†Œํƒœ ์†Œํ˜œ ์†”๋‚˜ ์†”๋‚œ ์†”๋‚ด ์†”๋‹ค ์†”๋‹จ ์†”๋‹ด ์†”๋„ ์†”๋ž˜ ์†”๋ฅ˜ ์†”๋ชจ ์†”๋ฌด ์†”๋ฏธ ์†”๋ฏผ ์†”์‚ฌ ์†”์‚ฐ ์†”์ƒ ์†”์ƒˆ ์†”์ƒ ์†”์„œ ์†”์„  ์†”์„ค ์†”์„ฌ ์†”์„ฑ ์†”์†Œ ์†”์†œ ์†”์†ก ์†”์ˆ˜ ์†”์‹œ ์†”์‹  ์†”์‹ค ์†”์‹ฌ ์†”์•„ ์†”์•ˆ ์†”์•  ์†”์–‘ ์†”์—ฌ ์†”์—ฐ ์†”์˜ˆ ์†”์˜ค ์†”์˜จ ์†”์š” ์†”์šฐ ์†”์›” ์†”์œ  ์†”์œค ์†”์œจ ์†”์€ ์†”์ด ์†”์ผ ์†”์ž„ ์†”์ • ์†”์ฐจ ์†”์ฐฝ ์†”์ฑ„ ์†”์ฒœ ์†”์ฒจ ์†”์ฒญ ์†”์ดˆ ์†”์ด ์†”ํ‘œ ์†”ํ•˜ ์†”ํ•œ ์†”ํ•ด ์†”ํ–ฅ ์†”ํ˜„ ์†”ํ˜ผ ์†”ํ™ ์†”ํ™” ์†”ํšจ ์†”๋‚จ ์†”๋ˆˆ ์†”๋‹ฌ ์†”๋‹น ์†”๋ด„ ์†”๋น„ ์†”์Šฌ ์†”์—ด ์†”์˜ ์†”์ž ์†”ํƒœ ์†”ํ˜œ ์†œ๋‚˜ ์†œ๋‚œ ์†œ๋‚ด ์†œ๋‹ค ์†œ๋‹จ ์†œ๋‹ด ์†œ๋„ ์†œ๋ผ ์†œ๋ž˜ ์†œ๋ฅ˜ ์†œ๋ฆฌ ์†œ๋ชจ ์†œ๋ฌด ์†œ๋ฏธ ์†œ๋ฏผ ์†œ์‚ฌ ์†œ์‚ฐ ์†œ์ƒ ์†œ์ƒˆ ์†œ์ƒ ์†œ์„œ ์†œ์„  ์†œ์„ค ์†œ์„ฌ ์†œ์„ฑ ์†œ์†Œ ์†œ์†” ์†œ์†ก ์†œ์ˆ˜ ์†œ์‹œ ์†œ์‹  ์†œ์‹ค ์†œ์‹ฌ ์†œ์•„ ์†œ์•ˆ ์†œ์•  ์†œ์–‘ ์†œ์—ฌ ์†œ์—ฐ ์†œ์˜ˆ ์†œ์˜ค ์†œ์˜จ ์†œ์š” ์†œ์šฐ ์†œ์›” ์†œ์œ  ์†œ์œค ์†œ์œจ ์†œ์€ ์†œ์ด ์†œ์ผ ์†œ์ • ์†œ์ฐจ ์†œ์ฐฝ ์†œ์ฑ„ ์†œ์ฒœ ์†œ์ฒจ ์†œ์ฒญ ์†œ์ดˆ ์†œ์ด ์†œํ‘œ ์†œํ•˜ ์†œํ•œ ์†œํ•ด ์†œํ–ฅ ์†œํ˜„ ์†œํ˜ผ ์†œํ™ ์†œํ™” ์†œํšจ ์†œ๋‚จ ์†œ๋ˆˆ ์†œ๋‹ฌ ์†œ๋‹น ์†œ๋ด„ ์†œ๋น„ ์†œ์Šฌ ์†œ์—ด ์†œ์˜ ์†œ์ž ์†œํƒœ ์†œํ˜œ ์†ก๋‚˜ ์†ก๋‚œ ์†ก๋‚ด ์†ก๋‹ค ์†ก๋‹จ ์†ก๋‹ด ์†ก๋„ ์†ก๋ผ ์†ก๋ž˜ ์†ก๋ฅ˜ ์†ก๋ฆฌ ์†ก๋ชจ ์†ก๋ฌด ์†ก๋ฏธ ์†ก๋ฏผ ์†ก์‚ฌ ์†ก์‚ฐ ์†ก์ƒ ์†ก์ƒˆ ์†ก์ƒ ์†ก์„œ ์†ก์„  ์†ก์„ค ์†ก์„ฌ ์†ก์„ฑ ์†ก์†Œ ์†ก์†” ์†ก์†œ ์†ก์ˆ˜ ์†ก์‹œ ์†ก์‹  ์†ก์‹ค ์†ก์‹ฌ ์†ก์•„ ์†ก์•ˆ ์†ก์•  ์†ก์–‘ ์†ก์—ฌ ์†ก์—ฐ ์†ก์˜ˆ ์†ก์˜ค ์†ก์˜จ ์†ก์š” ์†ก์šฐ ์†ก์›” ์†ก์œ  ์†ก์œค ์†ก์œจ ์†ก์€ ์†ก์ด ์†ก์ผ ์†ก์ž„ ์†ก์ • ์†ก์ฐจ ์†ก์ฐฝ ์†ก์ฑ„ ์†ก์ฒœ ์†ก์ฒจ ์†ก์ฒญ ์†ก์ดˆ ์†ก์ด ์†กํ‘œ ์†กํ•˜ ์†กํ•œ ์†กํ•ด ์†กํ–ฅ ์†กํ˜„ ์†กํ˜ผ ์†กํ™ ์†กํ™” ์†กํšจ ์†ก๋‚จ ์†ก๋ˆˆ ์†ก๋‹ฌ ์†ก๋‹น ์†ก๋ด„ ์†ก๋น„ ์†ก์Šฌ ์†ก์—ด ์†ก์˜ ์†ก์ž ์†กํƒœ ์†กํ˜œ ์ˆ˜๋‚˜ ์ˆ˜๋‚ด ์ˆ˜๋‹ด ์ˆ˜๋„ ์ˆ˜๋ฅ˜ ์ˆ˜๋ฌด ์ˆ˜๋ฏธ ์ˆ˜๋ฏผ ์ˆ˜์ƒˆ ์ˆ˜์„œ ์ˆ˜์„  ์ˆ˜์„ค ์ˆ˜์„ฌ ์ˆ˜์„ฑ ์ˆ˜์†” ์ˆ˜์†œ ์ˆ˜์‹  ์ˆ˜์‹ค ์ˆ˜์‹ฌ ์ˆ˜์•„ ์ˆ˜์•ˆ ์ˆ˜์•  ์ˆ˜์—ฌ ์ˆ˜์—ฐ ์ˆ˜์˜ˆ ์ˆ˜์˜ค ์ˆ˜์š” ์ˆ˜์œค ์ˆ˜์œจ ์ˆ˜์ด ์ˆ˜์ผ ์ˆ˜์ž„ ์ˆ˜์ • ์ˆ˜์ฐจ ์ˆ˜์ฐฝ ์ˆ˜์ฑ„ ์ˆ˜์ฒœ ์ˆ˜์ฒจ ์ˆ˜์ดˆ ์ˆ˜์ด ์ˆ˜ํ•œ ์ˆ˜ํ–ฅ ์ˆ˜ํ˜„ ์ˆ˜ํ˜ผ ์ˆ˜ํ™ ์ˆ˜ํ™” ์ˆ˜ํšจ ์ˆ˜๋‚จ ์ˆ˜๋ˆˆ ์ˆ˜๋‹ฌ ์ˆ˜๋‹น ์ˆ˜๋ด„ ์ˆ˜์—ด ์ˆ˜์˜ ์ˆ˜์ž ์ˆ˜ํƒœ ์ˆ˜ํ˜œ ์‹œ๋‚˜ ์‹œ๋‚œ ์‹œ๋‚ด ์‹œ๋‹จ ์‹œ๋‹ด ์‹œ๋„ ์‹œ๋ผ ์‹œ๋ž˜ ์‹œ๋ฅ˜ ์‹œ๋ฆฌ ์‹œ๋ชจ ์‹œ๋ฌด ์‹œ์‚ฌ ์‹œ์‚ฐ ์‹œ์ƒ ์‹œ์ƒˆ ์‹œ์ƒ ์‹œ์„œ ์‹œ์„ฌ ์‹œ์„ฑ ์‹œ์†Œ ์‹œ์†” ์‹œ์†œ ์‹œ์†ก ์‹œ์ˆ˜ ์‹œ์‹ค ์‹œ์•„ ์‹œ์•ˆ ์‹œ์•  ์‹œ์–‘ ์‹œ์—ฌ ์‹œ์—ฐ ์‹œ์˜ˆ ์‹œ์˜ค ์‹œ์˜จ ์‹œ์š” ์‹œ์šฐ ์‹œ์›” ์‹œ์œ  ์‹œ์œค ์‹œ์œจ ์‹œ์€ ์‹œ์ • ์‹œ์ฐจ ์‹œ์ฒœ ์‹œ์ฒจ ์‹œ์ฒญ ์‹œ์ดˆ ์‹œ์ด ์‹œํ‘œ ์‹œํ•˜ ์‹œํ•œ ์‹œํ–ฅ ์‹œํ˜„ ์‹œํ˜ผ ์‹œํ™ ์‹œํ™” ์‹œํšจ ์‹œ๋‚จ ์‹œ๋ˆˆ ์‹œ๋‹ฌ ์‹œ์Šฌ ์‹œ์—ด ์‹œ์˜ ์‹œ์ž ์‹œํƒœ ์‹œํ˜œ ์‹ ๋‹ค ์‹ ๋‹จ ์‹ ๋‹ด ์‹ ๋„ ์‹ ๋ผ ์‹ ๋ž˜ ์‹ ๋ฅ˜ ์‹ ๋ฆฌ ์‹ ๋ชจ ์‹ ๋ฌด ์‹ ๋ฏธ ์‹ ์‚ฌ ์‹ ์‚ฐ ์‹ ์ƒˆ ์‹ ์„œ ์‹ ์„ค ์‹ ์„ฌ ์‹ ์†Œ ์‹ ์†” ์‹ ์†œ ์‹ ์†ก ์‹ ์ˆ˜ ์‹ ์‹œ ์‹ ์‹ค ์‹ ์‹ฌ ์‹ ์•„ ์‹ ์•ˆ ์‹ ์•  ์‹ ์–‘ ์‹ ์—ฌ ์‹ ์—ฐ ์‹ ์˜ˆ ์‹ ์˜ค ์‹ ์˜จ ์‹ ์š” ์‹ ์šฐ ์‹ ์›” ์‹ ์œ  ์‹ ์œค ์‹ ์œจ ์‹ ์€ ์‹ ์ด ์‹ ์ผ ์‹ ์ž„ ์‹ ์ • ์‹ ์ฐจ ์‹ ์ฐฝ ์‹ ์ฑ„ ์‹ ์ฒœ ์‹ ์ฒจ ์‹ ์ฒญ ์‹ ์ดˆ ์‹ ์ด ์‹ ํ‘œ ์‹ ํ•œ ์‹ ํ•ด ์‹ ํ–ฅ ์‹ ํ˜„ ์‹ ํ˜ผ ์‹ ํ™ ์‹ ํšจ ์‹ ๋‚จ ์‹ ๋ˆˆ ์‹ ๋‹ฌ ์‹ ๋‹น ์‹ ๋ด„ ์‹ ๋น„ ์‹ ์Šฌ ์‹ ์—ด ์‹ ์˜ ์‹ ์ž ์‹ ํƒœ ์‹ ํ˜œ ์‹ค๋‚˜ ์‹ค๋‚œ ์‹ค๋‹ค ์‹ค๋‹จ ์‹ค๋‹ด ์‹ค๋„ ์‹ค๋ฅ˜ ์‹ค๋ฆฌ ์‹ค๋ชจ ์‹ค๋ฌด ์‹ค๋ฏธ ์‹ค๋ฏผ ์‹ค์‚ฐ ์‹ค์ƒˆ ์‹ค์ƒ ์‹ค์„œ ์‹ค์„  ์‹ค์„ค ์‹ค์„ฌ ์‹ค์†” ์‹ค์†œ ์‹ค์†ก ์‹ค์‹œ ์‹ค์‹ฌ ์‹ค์•ˆ ์‹ค์•  ์‹ค์–‘ ์‹ค์—ฌ ์‹ค์˜ˆ ์‹ค์˜ค ์‹ค์˜จ ์‹ค์š” ์‹ค์šฐ ์‹ค์›” ์‹ค์œ  ์‹ค์œค ์‹ค์œจ ์‹ค์ผ ์‹ค์ž„ ์‹ค์ • ์‹ค์ฐจ ์‹ค์ฐฝ ์‹ค์ฑ„ ์‹ค์ฒœ ์‹ค์ฒจ ์‹ค์ฒญ ์‹ค์ดˆ ์‹ค์ด ์‹คํ‘œ ์‹คํ•˜ ์‹คํ•œ ์‹คํ•ด ์‹คํ–ฅ ์‹คํ˜„ ์‹คํ˜ผ ์‹คํ™ ์‹คํ™” ์‹คํšจ ์‹ค๋‚จ ์‹ค๋ˆˆ ์‹ค๋‹ฌ ์‹ค๋‹น ์‹ค๋ด„ ์‹ค๋น„ ์‹ค์Šฌ ์‹ค์—ด ์‹ค์˜ ์‹ค์ž ์‹คํƒœ ์‹คํ˜œ ์‹ฌ๋‚˜ ์‹ฌ๋‚ด ์‹ฌ๋‹จ ์‹ฌ๋‹ด ์‹ฌ๋„ ์‹ฌ๋ผ ์‹ฌ๋ž˜ ์‹ฌ๋ฅ˜ ์‹ฌ๋ชจ ์‹ฌ๋ฌด ์‹ฌ๋ฏธ ์‹ฌ๋ฏผ ์‹ฌ์‚ฌ ์‹ฌ์ƒ ์‹ฌ์„œ ์‹ฌ์„  ์‹ฌ์„ค ์‹ฌ์„ฌ ์‹ฌ์„ฑ ์‹ฌ์†Œ ์‹ฌ์†” ์‹ฌ์†œ ์‹ฌ์†ก ์‹ฌ์ˆ˜ ์‹ฌ์‹œ ์‹ฌ์‹ค ์‹ฌ์–‘ ์‹ฌ์—ฌ ์‹ฌ์˜ˆ ์‹ฌ์˜ค ์‹ฌ์š” ์‹ฌ์šฐ ์‹ฌ์›” ์‹ฌ์œ  ์‹ฌ์œค ์‹ฌ์œจ ์‹ฌ์€ ์‹ฌ์ด ์‹ฌ์ผ ์‹ฌ์ • ์‹ฌ์ฐจ ์‹ฌ์ฐฝ ์‹ฌ์ฑ„ ์‹ฌ์ฒœ ์‹ฌ์ฒจ ์‹ฌ์ฒญ ์‹ฌ์ดˆ ์‹ฌ์ด ์‹ฌํ‘œ ์‹ฌํ•˜ ์‹ฌํ–ฅ ์‹ฌํ˜„ ์‹ฌํ˜ผ ์‹ฌํ™ ์‹ฌํšจ ์‹ฌ๋ˆˆ ์‹ฌ๋‹ฌ ์‹ฌ๋‹น ์‹ฌ๋ด„ ์‹ฌ์—ด ์‹ฌ์˜ ์‹ฌํƒœ ์‹ฌํ˜œ ์•„๋‚œ ์•„๋‹จ ์•„๋„ ์•„๋ผ ์•„๋ž˜ ์•„๋ฅ˜ ์•„๋ฆฌ ์•„๋ชจ ์•„๋ฌด ์•„๋ฏธ ์•„๋ฏผ ์•„์‚ฐ ์•„์ƒ ์•„์ƒˆ ์•„์ƒ ์•„์„œ ์•„์„  ์•„์„ค ์•„์„ฌ ์•„์„ฑ ์•„์†Œ ์•„์†” ์•„์†œ ์•„์†ก ์•„์ˆ˜ ์•„์‹œ ์•„์‹  ์•„์‹ค ์•„์‹ฌ ์•„์•ˆ ์•„์—ฌ ์•„์˜จ ์•„์š” ์•„์›” ์•„์œค ์•„์œจ ์•„์€ ์•„์ผ ์•„์ž„ ์•„์ • ์•„์ฐฝ ์•„์ฑ„ ์•„์ฒœ ์•„์ฒจ ์•„์ดˆ ์•„์ด ์•„ํ‘œ ์•„ํ•œ ์•„ํ–ฅ ์•„ํ˜„ ์•„ํ˜ผ ์•„ํ™” ์•„๋‚จ ์•„๋ˆˆ ์•„๋‹ฌ ์•„๋ด„ ์•„์Šฌ ์•„์—ด ์•„์˜ ์•„์ž ์•„ํƒœ ์•„ํ˜œ ์•ˆ๋‚˜ ์•ˆ๋‚œ ์•ˆ๋‚ด ์•ˆ๋‹จ ์•ˆ๋‹ด ์•ˆ๋„ ์•ˆ๋ผ ์•ˆ๋ž˜ ์•ˆ๋ฅ˜ ์•ˆ๋ฆฌ ์•ˆ๋ชจ ์•ˆ๋ฏผ ์•ˆ์ƒˆ ์•ˆ์ƒ ์•ˆ์„  ์•ˆ์†Œ ์•ˆ์†” ์•ˆ์†œ ์•ˆ์†ก ์•ˆ์ˆ˜ ์•ˆ์‹œ ์•ˆ์‹  ์•ˆ์‹ค ์•ˆ์–‘ ์•ˆ์—ฌ ์•ˆ์—ฐ ์•ˆ์˜ˆ ์•ˆ์˜ค ์•ˆ์˜จ ์•ˆ์š” ์•ˆ์šฐ ์•ˆ์›” ์•ˆ์œค ์•ˆ์œจ ์•ˆ์ผ ์•ˆ์ž„ ์•ˆ์ • ์•ˆ์ฐจ ์•ˆ์ฐฝ ์•ˆ์ฑ„ ์•ˆ์ฒœ ์•ˆ์ฒจ ์•ˆ์ฒญ ์•ˆ์ดˆ ์•ˆ์ด ์•ˆํ‘œ ์•ˆํ•˜ ์•ˆํ•œ ์•ˆํ–ฅ ์•ˆํ˜„ ์•ˆํ˜ผ ์•ˆํ™ ์•ˆํ™” ์•ˆํšจ ์•ˆ๋ˆˆ ์•ˆ๋ด„ ์•ˆ๋น„ ์•ˆ์Šฌ ์•ˆ์—ด ์•ˆ์˜ ์•ˆํƒœ ์• ๋‚œ ์• ๋‚ด ์• ๋‹จ ์• ๋‹ด ์• ๋ฅ˜ ์• ๋ฆฌ ์• ๋ฏผ ์• ์‚ฌ ์• ์‚ฐ ์• ์ƒ ์• ์ƒ ์• ์„œ ์• ์„  ์• ์„ค ์• ์„ฌ ์• ์„ฑ ์• ์†” ์• ์†œ ์• ์ˆ˜ ์• ์‹  ์• ์‹ค ์• ์‹ฌ ์• ์•ˆ ์• ์–‘ ์• ์—ฐ ์• ์šฐ ์• ์›” ์• ์œ  ์• ์œค ์• ์œจ ์• ์€ ์• ์ผ ์• ์ฐจ ์• ์ฒœ ์• ์ฒจ ์• ์ฒญ ์• ์ด ์• ํ‘œ ์• ํ•˜ ์• ํ•œ ์• ํ–ฅ ์• ํ˜„ ์• ํ˜ผ ์• ํ™” ์• ํšจ ์• ๋‚จ ์• ๋ˆˆ ์• ๋‹ฌ ์• ์—ด ์–‘๋‚˜ ์–‘๋‚œ ์–‘๋‚ด ์–‘๋‹ค ์–‘๋‹จ ์–‘๋‹ด ์–‘๋„ ์–‘๋ผ ์–‘๋ž˜ ์–‘๋ฅ˜ ์–‘๋ฆฌ ์–‘๋ชจ ์–‘๋ฌด ์–‘๋ฏธ ์–‘์‚ฌ ์–‘์‚ฐ ์–‘์ƒ ์–‘์ƒˆ ์–‘์ƒ ์–‘์„œ ์–‘์„  ์–‘์„ค ์–‘์„ฌ ์–‘์„ฑ ์–‘์†Œ ์–‘์†” ์–‘์†œ ์–‘์†ก ์–‘์ˆ˜ ์–‘์‹œ ์–‘์‹  ์–‘์‹ค ์–‘์•„ ์–‘์•ˆ ์–‘์•  ์–‘์—ฌ ์–‘์—ฐ ์–‘์˜ˆ ์–‘์˜ค ์–‘์˜จ ์–‘์š” ์–‘์šฐ ์–‘์›” ์–‘์œ  ์–‘์œค ์–‘์œจ ์–‘์€ ์–‘์ด ์–‘์ผ ์–‘์ž„ ์–‘์ • ์–‘์ฐจ ์–‘์ฐฝ ์–‘์ฑ„ ์–‘์ฒœ ์–‘์ฒจ ์–‘์ฒญ ์–‘์ดˆ ์–‘์ด ์–‘ํ‘œ ์–‘ํ•˜ ์–‘ํ•œ ์–‘ํ•ด ์–‘ํ–ฅ ์–‘ํ˜„ ์–‘ํ˜ผ ์–‘ํ™ ์–‘ํ™” ์–‘ํšจ ์–‘๋‚จ ์–‘๋ˆˆ ์–‘๋‹ฌ ์–‘๋‹น ์–‘๋ด„ ์–‘๋น„ ์–‘์Šฌ ์–‘์—ด ์–‘์˜ ์–‘์ž ์–‘ํƒœ ์–‘ํ˜œ ์—ฌ๋‚˜ ์—ฌ๋‹ค ์—ฌ๋„ ์—ฌ๋ผ ์—ฌ๋ž˜ ์—ฌ๋ฅ˜ ์—ฌ๋ฆฌ ์—ฌ๋ชจ ์—ฌ๋ฌด ์—ฌ๋ฏผ ์—ฌ์‚ฐ ์—ฌ์ƒ ์—ฌ์ƒˆ ์—ฌ์ƒ ์—ฌ์„œ ์—ฌ์„  ์—ฌ์„ค ์—ฌ์„ฌ ์—ฌ์†Œ ์—ฌ์†” ์—ฌ์†œ ์—ฌ์†ก ์—ฌ์ˆ˜ ์—ฌ์‹ค ์—ฌ์•ˆ ์—ฌ์–‘ ์—ฌ์—ฐ ์—ฌ์˜ค ์—ฌ์˜จ ์—ฌ์š” ์—ฌ์›” ์—ฌ์œค ์—ฌ์œจ ์—ฌ์€ ์—ฌ์ด ์—ฌ์ผ ์—ฌ์ž„ ์—ฌ์ • ์—ฌ์ฐจ ์—ฌ์ฑ„ ์—ฌ์ฒœ ์—ฌ์ฒจ ์—ฌ์ฒญ ์—ฌ์ดˆ ์—ฌ์ด ์—ฌํ•˜ ์—ฌํ•ด ์—ฌํ–ฅ ์—ฌํ˜„ ์—ฌํ˜ผ ์—ฌํ™ ์—ฌํ™” ์—ฌํšจ ์—ฌ๋‚จ ์—ฌ๋ˆˆ ์—ฌ๋‹ฌ ์—ฌ๋‹น ์—ฌ๋ด„ ์—ฌ๋น„ ์—ฌ์Šฌ ์—ฌ์—ด ์—ฌ์˜ ์—ฌํƒœ ์—ฌํ˜œ ์—ฐ๋‚˜ ์—ฐ๋‚œ ์—ฐ๋‚ด ์—ฐ๋‹จ ์—ฐ๋‹ด ์—ฐ๋„ ์—ฐ๋ผ ์—ฐ๋ž˜ ์—ฐ๋ฅ˜ ์—ฐ๋ฆฌ ์—ฐ๋ชจ ์—ฐ๋ฌด ์—ฐ๋ฏธ ์—ฐ์‚ฐ ์—ฐ์ƒˆ ์—ฐ์ƒ ์—ฐ์„œ ์—ฐ์„  ์—ฐ์„ค ์—ฐ์„ฌ ์—ฐ์„ฑ ์—ฐ์†Œ ์—ฐ์†” ์—ฐ์†œ ์—ฐ์†ก ์—ฐ์ˆ˜ ์—ฐ์‹œ ์—ฐ์‹  ์—ฐ์‹ค ์—ฐ์‹ฌ ์—ฐ์•„ ์—ฐ์•ˆ ์—ฐ์–‘ ์—ฐ์—ฌ ์—ฐ์˜ค ์—ฐ์˜จ ์—ฐ์š” ์—ฐ์šฐ ์—ฐ์›” ์—ฐ์œ  ์—ฐ์œค ์—ฐ์œจ ์—ฐ์€ ์—ฐ์ด ์—ฐ์ผ ์—ฐ์ • ์—ฐ์ฐจ ์—ฐ์ฐฝ ์—ฐ์ฑ„ ์—ฐ์ฒœ ์—ฐ์ฒจ ์—ฐ์ฒญ ์—ฐ์ดˆ ์—ฐ์ด ์—ฐํ‘œ ์—ฐํ•ด ์—ฐํ–ฅ ์—ฐํ˜„ ์—ฐํ˜ผ ์—ฐํ™ ์—ฐํ™” ์—ฐํšจ ์—ฐ๋‚จ ์—ฐ๋ˆˆ ์—ฐ๋‹ฌ ์—ฐ๋ด„ ์—ฐ์Šฌ ์—ฐ์—ด ์—ฐ์˜ ์—ฐ์ž ์—ฐํƒœ ์—ฐํ˜œ ์˜ˆ๋‚˜ ์˜ˆ๋‚œ ์˜ˆ๋‚ด ์˜ˆ๋‹จ ์˜ˆ๋‹ด ์˜ˆ๋„ ์˜ˆ๋ฅ˜ ์˜ˆ๋ฆฌ ์˜ˆ๋ชจ ์˜ˆ๋ฏธ ์˜ˆ๋ฏผ ์˜ˆ์‚ฌ ์˜ˆ์‚ฐ ์˜ˆ์ƒ ์˜ˆ์ƒˆ ์˜ˆ์ƒ ์˜ˆ์„œ ์˜ˆ์„  ์˜ˆ์„ค ์˜ˆ์„ฌ ์˜ˆ์„ฑ ์˜ˆ์†Œ ์˜ˆ์†” ์˜ˆ์†œ ์˜ˆ์†ก ์˜ˆ์‹œ ์˜ˆ์‹  ์˜ˆ์‹ค ์˜ˆ์‹ฌ ์˜ˆ์•ˆ ์˜ˆ์–‘ ์˜ˆ์—ฐ ์˜ˆ์˜ค ์˜ˆ์˜จ ์˜ˆ์š” ์˜ˆ์šฐ ์˜ˆ์›” ์˜ˆ์œ  ์˜ˆ์œค ์˜ˆ์œจ ์˜ˆ์€ ์˜ˆ์ผ ์˜ˆ์ž„ ์˜ˆ์ • ์˜ˆ์ฐจ ์˜ˆ์ฐฝ ์˜ˆ์ฑ„ ์˜ˆ์ฒœ ์˜ˆ์ฒจ ์˜ˆ์ฒญ ์˜ˆ์ดˆ ์˜ˆ์ด ์˜ˆํ‘œ ์˜ˆํ•˜ ์˜ˆํ•œ ์˜ˆํ–ฅ ์˜ˆํ˜„ ์˜ˆํ˜ผ ์˜ˆํ™” ์˜ˆํšจ ์˜ˆ๋‚จ ์˜ˆ๋ˆˆ ์˜ˆ๋‹ฌ ์˜ˆ๋‹น ์˜ˆ๋ด„ ์˜ˆ๋น„ ์˜ˆ์Šฌ ์˜ˆ์—ด ์˜ˆ์˜ ์˜ˆํƒœ ์˜ˆํ˜œ ์˜ค๋‚˜ ์˜ค๋‹จ ์˜ค๋‹ด ์˜ค๋„ ์˜ค๋ชจ ์˜ค๋ฌด ์˜ค๋ฏธ ์˜ค๋ฏผ ์˜ค์‚ฌ ์˜ค์ƒ ์˜ค์ƒˆ ์˜ค์ƒ ์˜ค์„œ ์˜ค์„  ์˜ค์„ค ์˜ค์„ฌ ์˜ค์„ฑ ์˜ค์†Œ ์˜ค์†” ์˜ค์†œ ์˜ค์†ก ์˜ค์‹œ ์˜ค์•ˆ ์˜ค์–‘ ์˜ค์—ฌ ์˜ค์—ฐ ์˜ค์š” ์˜ค์›” ์˜ค์œค ์˜ค์œจ ์˜ค์€ ์˜ค์ž„ ์˜ค์ฐฝ ์˜ค์ฑ„ ์˜ค์ฒœ ์˜ค์ฒจ ์˜ค์ฒญ ์˜ค์ดˆ ์˜ค์ด ์˜คํ‘œ ์˜คํ•˜ ์˜คํ–ฅ ์˜คํ˜„ ์˜คํ˜ผ ์˜คํ™” ์˜คํšจ ์˜ค๋‚จ ์˜ค๋ˆˆ ์˜ค๋‹ฌ ์˜ค๋ด„ ์˜ค๋น„ ์˜ค์Šฌ ์˜ค์˜ ์˜ค์ž ์˜คํƒœ ์˜คํ˜œ ์˜จ๋‚œ ์˜จ๋‹จ ์˜จ๋‹ด ์˜จ๋„ ์˜จ๋ผ ์˜จ๋ž˜ ์˜จ๋ฅ˜ ์˜จ๋ฆฌ ์˜จ๋ชจ ์˜จ๋ฌด ์˜จ๋ฏธ ์˜จ๋ฏผ ์˜จ์‚ฌ ์˜จ์‚ฐ ์˜จ์ƒ ์˜จ์ƒˆ ์˜จ์ƒ ์˜จ์„œ ์˜จ์„  ์˜จ์„ค ์˜จ์„ฌ ์˜จ์„ฑ ์˜จ์†Œ ์˜จ์†” ์˜จ์†œ ์˜จ์†ก ์˜จ์ˆ˜ ์˜จ์‹œ ์˜จ์‹  ์˜จ์‹ค ์˜จ์‹ฌ ์˜จ์•„ ์˜จ์•ˆ ์˜จ์•  ์˜จ์–‘ ์˜จ์—ฌ ์˜จ์—ฐ ์˜จ์˜ˆ ์˜จ์š” ์˜จ์šฐ ์˜จ์›” ์˜จ์œ  ์˜จ์œค ์˜จ์œจ ์˜จ์€ ์˜จ์ด ์˜จ์ผ ์˜จ์ • ์˜จ์ฐจ ์˜จ์ฐฝ ์˜จ์ฑ„ ์˜จ์ฒœ ์˜จ์ฒจ ์˜จ์ฒญ ์˜จ์ดˆ ์˜จ์ด ์˜จํ‘œ ์˜จํ•˜ ์˜จํ•œ ์˜จํ•ด ์˜จํ–ฅ ์˜จํ˜„ ์˜จํ˜ผ ์˜จํ™ ์˜จํ™” ์˜จํšจ ์˜จ๋‚จ ์˜จ๋ˆˆ ์˜จ๋‹ฌ ์˜จ๋ด„ ์˜จ๋น„ ์˜จ์Šฌ ์˜จ์—ด ์˜จ์˜ ์˜จ์ž ์˜จํƒœ ์˜จํ˜œ ์š”๋‚˜ ์š”๋‚œ ์š”๋‚ด ์š”๋‹จ ์š”๋‹ด ์š”๋ผ ์š”๋ฅ˜ ์š”์‚ฌ ์š”์‚ฐ ์š”์ƒ ์š”์„œ ์š”์„  ์š”์„ฌ ์š”์„ฑ ์š”์†” ์š”์†œ ์š”์†ก ์š”์ˆ˜ ์š”์‹  ์š”์‹ฌ ์š”์•„ ์š”์•ˆ ์š”์•  ์š”์—ฌ ์š”์—ฐ ์š”์šฐ ์š”์›” ์š”์œ  ์š”์œค ์š”์œจ ์š”์€ ์š”์ด ์š”์ผ ์š”์ž„ ์š”์ฐจ ์š”์ฐฝ ์š”์ฑ„ ์š”์ฒœ ์š”์ฒจ ์š”์ฒญ ์š”์ดˆ ์š”์ด ์š”ํ‘œ ์š”ํ•˜ ์š”ํ•ด ์š”ํ–ฅ ์š”ํ˜„ ์š”ํ˜ผ ์š”ํ™” ์š”๋‚จ ์š”๋ˆˆ ์š”๋‹ฌ ์š”๋‹น ์š”๋ด„ ์š”๋น„ ์š”์Šฌ ์š”์—ด ์š”์˜ ์š”ํ˜œ ์šฐ๋‚œ ์šฐ๋‹จ ์šฐ๋‹ด ์šฐ๋„ ์šฐ๋ž˜ ์šฐ๋ฅ˜ ์šฐ๋ชจ ์šฐ๋ฌด ์šฐ๋ฏธ ์šฐ์‚ฌ ์šฐ์‚ฐ ์šฐ์ƒˆ ์šฐ์ƒ ์šฐ์„œ ์šฐ์„  ์šฐ์„ค ์šฐ์„ฌ ์šฐ์„ฑ ์šฐ์†Œ ์šฐ์†” ์šฐ์†œ ์šฐ์†ก ์šฐ์ˆ˜ ์šฐ์‹ค ์šฐ์•ˆ ์šฐ์–‘ ์šฐ์—ฌ ์šฐ์˜ˆ ์šฐ์˜จ ์šฐ์š” ์šฐ์œค ์šฐ์œจ ์šฐ์€ ์šฐ์ด ์šฐ์ผ ์šฐ์ž„ ์šฐ์ • ์šฐ์ฐจ ์šฐ์ฐฝ ์šฐ์ฑ„ ์šฐ์ฒœ ์šฐ์ฒจ ์šฐ์ฒญ ์šฐ์ดˆ ์šฐ์ด ์šฐํ•˜ ์šฐํ•œ ์šฐํ•ด ์šฐํ–ฅ ์šฐํ˜„ ์šฐํ˜ผ ์šฐํšจ ์šฐ๋‚จ ์šฐ๋ˆˆ ์šฐ๋‹ฌ ์šฐ๋‹น ์šฐ๋ด„ ์šฐ๋น„ ์šฐ์Šฌ ์šฐ์—ด ์šฐ์˜ ์šฐ์ž ์šฐํƒœ ์šฐํ˜œ ์›”๋‚˜ ์›”๋‚œ ์›”๋‚ด ์›”๋‹ค ์›”๋‹จ ์›”๋‹ด ์›”๋„ ์›”๋ž˜ ์›”๋ฅ˜ ์›”๋ฆฌ ์›”๋ชจ ์›”๋ฌด ์›”๋ฏธ ์›”๋ฏผ ์›”์‚ฌ ์›”์‚ฐ ์›”์ƒ ์›”์ƒˆ ์›”์ƒ ์›”์„œ ์›”์„  ์›”์„ค ์›”์„ฌ ์›”์„ฑ ์›”์†Œ ์›”์†” ์›”์†œ ์›”์†ก ์›”์ˆ˜ ์›”์‹œ ์›”์‹  ์›”์‹ค ์›”์‹ฌ ์›”์•„ ์›”์•ˆ ์›”์•  ์›”์–‘ ์›”์—ฌ ์›”์—ฐ ์›”์˜ˆ ์›”์˜ค ์›”์˜จ ์›”์š” ์›”์šฐ ์›”์œ  ์›”์œค ์›”์œจ ์›”์€ ์›”์ด ์›”์ผ ์›”์ž„ ์›”์ • ์›”์ฐจ ์›”์ฐฝ ์›”์ฑ„ ์›”์ฒœ ์›”์ฒจ ์›”์ฒญ ์›”์ดˆ ์›”์ด ์›”ํ‘œ ์›”ํ•˜ ์›”ํ•œ ์›”ํ•ด ์›”ํ–ฅ ์›”ํ˜„ ์›”ํ˜ผ ์›”ํ™ ์›”ํ™” ์›”ํšจ ์›”๋ˆˆ ์›”๋‹ฌ ์›”๋‹น ์›”๋ด„ ์›”๋น„ ์›”์Šฌ ์›”์—ด ์›”์˜ ์›”์ž ์›”ํƒœ ์›”ํ˜œ ์œ ๋‚˜ ์œ ๋‚ด ์œ ๋‹จ ์œ ๋‹ด ์œ ๋„ ์œ ๋ผ ์œ ๋ž˜ ์œ ๋ฆฌ ์œ ๋ฏธ ์œ ๋ฏผ ์œ ์ƒ ์œ ์ƒˆ ์œ ์ƒ ์œ ์„  ์œ ์„ค ์œ ์„ฌ ์œ ์„ฑ ์œ ์†Œ ์œ ์†” ์œ ์†œ ์œ ์†ก ์œ ์ˆ˜ ์œ ์‹œ ์œ ์‹ฌ ์œ ์•ˆ ์œ ์–‘ ์œ ์—ฌ ์œ ์˜ค ์œ ์˜จ ์œ ์š” ์œ ์›” ์œ ์œค ์œ ์œจ ์œ ์€ ์œ ์ด ์œ ์ผ ์œ ์ž„ ์œ ์ • ์œ ์ฐจ ์œ ์ฑ„ ์œ ์ฒœ ์œ ์ฒจ ์œ ์ฒญ ์œ ์ดˆ ์œ ์ด ์œ ํ‘œ ์œ ํ•˜ ์œ ํ•œ ์œ ํ–ฅ ์œ ํ˜„ ์œ ํ˜ผ ์œ ํ™” ์œ ํšจ ์œ ๋‚จ ์œ ๋ˆˆ ์œ ๋‹ฌ ์œ ๋‹น ์œ ๋ด„ ์œ ์Šฌ ์œ ์—ด ์œ ์˜ ์œ ์ž ์œ ํƒœ ์œ ํ˜œ ์œค๋‚˜ ์œค๋‚œ ์œค๋‚ด ์œค๋‹ค ์œค๋‹จ ์œค๋‹ด ์œค๋„ ์œค๋ผ ์œค๋ž˜ ์œค๋ฅ˜ ์œค๋ฆฌ ์œค๋ชจ ์œค๋ฌด ์œค๋ฏธ ์œค๋ฏผ ์œค์‚ฌ ์œค์‚ฐ ์œค์ƒ ์œค์ƒˆ ์œค์ƒ ์œค์„œ ์œค์„  ์œค์„ค ์œค์„ฌ ์œค์„ฑ ์œค์†Œ ์œค์†” ์œค์†œ ์œค์†ก ์œค์ˆ˜ ์œค์‹œ ์œค์‹  ์œค์‹ค ์œค์‹ฌ ์œค์•„ ์œค์•ˆ ์œค์•  ์œค์–‘ ์œค์—ฌ ์œค์—ฐ ์œค์˜ˆ ์œค์˜ค ์œค์˜จ ์œค์š” ์œค์šฐ ์œค์›” ์œค์œ  ์œค์œจ ์œค์€ ์œค์ด ์œค์ผ ์œค์ž„ ์œค์ • ์œค์ฐจ ์œค์ฐฝ ์œค์ฑ„ ์œค์ฒœ ์œค์ฒจ ์œค์ฒญ ์œค์ดˆ ์œค์ด ์œคํ‘œ ์œคํ•˜ ์œคํ•œ ์œคํ•ด ์œคํ–ฅ ์œคํ˜„ ์œคํ˜ผ ์œคํ™ ์œคํ™” ์œคํšจ ์œค๋‚จ ์œค๋ˆˆ ์œค๋‹ฌ ์œค๋‹น ์œค๋ด„ ์œค๋น„ ์œค์Šฌ ์œค์—ด ์œค์˜ ์œค์ž ์œคํƒœ ์œคํ˜œ ์œจ๋‚œ ์œจ๋‹จ ์œจ๋‹ด ์œจ๋„ ์œจ๋ผ ์œจ๋ž˜ ์œจ๋ฅ˜ ์œจ๋ชจ ์œจ๋ฌด ์œจ๋ฏธ ์œจ๋ฏผ ์œจ์‚ฐ ์œจ์ƒ ์œจ์ƒˆ ์œจ์ƒ ์œจ์„œ ์œจ์„  ์œจ์„ค ์œจ์„ฌ ์œจ์„ฑ ์œจ์†Œ ์œจ์†” ์œจ์†œ ์œจ์†ก ์œจ์ˆ˜ ์œจ์‹œ ์œจ์‹  ์œจ์‹ค ์œจ์‹ฌ ์œจ์•„ ์œจ์•ˆ ์œจ์•  ์œจ์–‘ ์œจ์—ฌ ์œจ์—ฐ ์œจ์˜ˆ ์œจ์˜ค ์œจ์˜จ ์œจ์š” ์œจ์šฐ ์œจ์›” ์œจ์œ  ์œจ์œค ์œจ์ด ์œจ์ผ ์œจ์ž„ ์œจ์ • ์œจ์ฐจ ์œจ์ฐฝ ์œจ์ฑ„ ์œจ์ฒœ ์œจ์ฒจ ์œจ์ฒญ ์œจ์ดˆ ์œจ์ด ์œจํ‘œ ์œจํ•˜ ์œจํ•œ ์œจํ•ด ์œจํ–ฅ ์œจํ˜„ ์œจํ˜ผ ์œจํ™ ์œจํ™” ์œจํšจ ์œจ๋‚จ ์œจ๋ˆˆ ์œจ๋‹ฌ ์œจ๋‹น ์œจ๋ด„ ์œจ๋น„ ์œจ์Šฌ ์œจ์—ด ์œจ์˜ ์œจ์ž ์œจํƒœ ์œจํ˜œ ์€๋‹จ ์€๋‹ด ์€๋„ ์€๋ผ ์€๋ž˜ ์€๋ฅ˜ ์€๋ฆฌ ์€๋ฌด ์€๋ฏธ ์€๋ฏผ ์€์‚ฌ ์€์‚ฐ ์€์ƒ ์€์ƒˆ ์€์ƒ ์€์„œ ์€์„  ์€์„ค ์€์„ฌ ์€์„ฑ ์€์†Œ ์€์†” ์€์†œ ์€์†ก ์€์ˆ˜ ์€์‹œ ์€์‹ค ์€์‹ฌ ์€์•„ ์€์•ˆ ์€์•  ์€์–‘ ์€์—ฌ ์€์˜ˆ ์€์˜ค ์€์˜จ ์€์š” ์€์šฐ ์€์›” ์€์œ  ์€์œค ์€์œจ ์€์ด ์€์ผ ์€์ž„ ์€์ • ์€์ฐจ ์€์ฐฝ ์€์ฑ„ ์€์ฒœ ์€์ฒจ ์€์ฒญ ์€์ดˆ ์€์ด ์€ํ‘œ ์€ํ•˜ ์€ํ•œ ์€ํ•ด ์€ํ–ฅ ์€ํ˜„ ์€ํ˜ผ ์€ํ™ ์€ํ™” ์€ํšจ ์€๋‚จ ์€๋ˆˆ ์€๋‹ฌ ์€๋‹น ์€๋ด„ ์€๋น„ ์€์Šฌ ์€์—ด ์€์˜ ์€์ž ์€ํƒœ ์€ํ˜œ ์ด๋„ ์ด๋ผ ์ด๋ฌด ์ด์‚ฌ ์ด์‚ฐ ์ด์ƒ ์ด์„œ ์ด์„  ์ด์„ค ์ด์„ฌ ์ด์†Œ ์ด์†” ์ด์†œ ์ด์†ก ์ด์ˆ˜ ์ด์‹œ ์ด์‹  ์ด์‹ค ์ด์‹ฌ ์ด์•„ ์ด์•ˆ ์ด์—ฐ ์ด์˜ˆ ์ด์˜ค ์ด์šฐ ์ด์›” ์ด์œจ ์ด์€ ์ด์ผ ์ด์ • ์ด์ฐจ ์ด์ฐฝ ์ด์ฑ„ ์ด์ฒœ ์ด์ฒจ ์ด์ฒญ ์ด์ดˆ ์ด์ด ์ดํ‘œ ์ดํ•œ ์ดํ•ด ์ดํ–ฅ ์ดํ˜„ ์ดํ™” ์ดํšจ ์ด๋‚จ ์ด๋ˆˆ ์ด๋‹ฌ ์ด๋‹น ์ด๋ด„ ์ด๋น„ ์ด์Šฌ ์ด์ž ์ดํƒœ ์ผ๋‚˜ ์ผ๋‚œ ์ผ๋‚ด ์ผ๋‹ค ์ผ๋‹จ ์ผ๋‹ด ์ผ๋„ ์ผ๋ผ ์ผ๋ž˜ ์ผ๋ชจ ์ผ๋ฌด ์ผ๋ฏธ ์ผ๋ฏผ ์ผ์‚ฌ ์ผ์‚ฐ ์ผ์ƒ ์ผ์ƒˆ ์ผ์„œ ์ผ์„  ์ผ์„ค ์ผ์„ฌ ์ผ์„ฑ ์ผ์†Œ ์ผ์†” ์ผ์†œ ์ผ์†ก ์ผ์ˆ˜ ์ผ์‹œ ์ผ์‹  ์ผ์‹ค ์ผ์‹ฌ ์ผ์•„ ์ผ์•ˆ ์ผ์•  ์ผ์–‘ ์ผ์—ฌ ์ผ์—ฐ ์ผ์˜ˆ ์ผ์˜ค ์ผ์˜จ ์ผ์š” ์ผ์šฐ ์ผ์›” ์ผ์œ  ์ผ์œค ์ผ์œจ ์ผ์€ ์ผ์ด ์ผ์ • ์ผ์ฐจ ์ผ์ฐฝ ์ผ์ฑ„ ์ผ์ฒœ ์ผ์ฒจ ์ผ์ฒญ ์ผ์ดˆ ์ผ์ด ์ผํ‘œ ์ผํ•˜ ์ผํ•œ ์ผํ–ฅ ์ผํ˜„ ์ผํ˜ผ ์ผํ™ ์ผํ™” ์ผํšจ ์ผ๋‚จ ์ผ๋ˆˆ ์ผ๋‹ฌ ์ผ๋‹น ์ผ๋ด„ ์ผ๋น„ ์ผ์Šฌ ์ผ์—ด ์ผ์˜ ์ผ์ž ์ผํƒœ ์ž„์„  ์ž„์„ค ์ž„์†” ์ž„์‹ค ์ž„์ • ์ž„์ฑ„ ์ž„์ฒญ ์ž„ํ•ด ์ž„ํ™ ์ž„ํ™” ์ž„ํšจ ์ •๋‚˜ ์ •๋‚œ ์ •๋‚ด ์ •๋‹ค ์ •๋‹จ ์ •๋‹ด ์ •๋„ ์ •๋ผ ์ •๋ž˜ ์ •๋ฅ˜ ์ •๋ฌด ์ •๋ฏธ ์ •๋ฏผ ์ •์‚ฐ ์ •์ƒ ์ •์ƒˆ ์ •์ƒ ์ •์„  ์ •์„ค ์ •์„ฌ ์ •์„ฑ ์ •์†Œ ์ •์†” ์ •์†œ ์ •์†ก ์ •์ˆ˜ ์ •์‹ค ์ •์•„ ์ •์•ˆ ์ •์–‘ ์ •์—ฌ ์ •์—ฐ ์ •์˜ˆ ์ •์˜ค ์ •์˜จ ์ •์š” ์ •์šฐ ์ •์›” ์ •์œ  ์ •์œค ์ •์œจ ์ •์ด ์ •์ž„ ์ •์ฐจ ์ •์ฐฝ ์ •์ฑ„ ์ •์ฒœ ์ •์ฒจ ์ •์ฒญ ์ •์ดˆ ์ •์ด ์ •ํ‘œ ์ •ํ•˜ ์ •ํ•œ ์ •ํ•ด ์ •ํ–ฅ ์ •ํ˜„ ์ •ํ˜ผ ์ •ํ™ ์ •ํ™” ์ •ํšจ ์ •๋ˆˆ ์ •๋‹ฌ ์ •๋‹น ์ •๋ด„ ์ •๋น„ ์ •์Šฌ ์ •์—ด ์ •์˜ ์ •ํƒœ ์ •ํ˜œ ์ฐจ๋‚˜ ์ฐจ๋‚œ ์ฐจ๋‹ด ์ฐจ๋„ ์ฐจ๋ฅ˜ ์ฐจ๋ฆฌ ์ฐจ๋ชจ ์ฐจ๋ฌด ์ฐจ๋ฏธ ์ฐจ๋ฏผ ์ฐจ์‚ฌ ์ฐจ์‚ฐ ์ฐจ์ƒ ์ฐจ์ƒˆ ์ฐจ์ƒ ์ฐจ์„œ ์ฐจ์„  ์ฐจ์„ค ์ฐจ์„ฌ ์ฐจ์„ฑ ์ฐจ์†Œ ์ฐจ์†” ์ฐจ์†œ ์ฐจ์†ก ์ฐจ์ˆ˜ ์ฐจ์‹œ ์ฐจ์‹  ์ฐจ์‹ค ์ฐจ์‹ฌ ์ฐจ์•  ์ฐจ์–‘ ์ฐจ์—ฐ ์ฐจ์˜ˆ ์ฐจ์˜ค ์ฐจ์˜จ ์ฐจ์šฐ ์ฐจ์›” ์ฐจ์œค ์ฐจ์œจ ์ฐจ์€ ์ฐจ์ผ ์ฐจ์ • ์ฐจ์ฐฝ ์ฐจ์ฑ„ ์ฐจ์ฒœ ์ฐจ์ฒจ ์ฐจ์ฒญ ์ฐจ์ดˆ ์ฐจ์ด ์ฐจํ‘œ ์ฐจํ•˜ ์ฐจํ•œ ์ฐจํ•ด ์ฐจํ–ฅ ์ฐจํ˜„ ์ฐจํ˜ผ ์ฐจํ™ ์ฐจํ™” ์ฐจํšจ ์ฐจ๋‚จ ์ฐจ๋ˆˆ ์ฐจ๋‹ฌ ์ฐจ๋‹น ์ฐจ๋ด„ ์ฐจ์Šฌ ์ฐจ์—ด ์ฐจ์˜ ์ฐจ์ž ์ฐจํƒœ ์ฐจํ˜œ ์ฐฝ๋‚˜ ์ฐฝ๋‚œ ์ฐฝ๋‚ด ์ฐฝ๋‹ค ์ฐฝ๋‹จ ์ฐฝ๋‹ด ์ฐฝ๋„ ์ฐฝ๋ผ ์ฐฝ๋ž˜ ์ฐฝ๋ฅ˜ ์ฐฝ๋ฆฌ ์ฐฝ๋ชจ ์ฐฝ๋ฌด ์ฐฝ๋ฏธ ์ฐฝ๋ฏผ ์ฐฝ์‚ฌ ์ฐฝ์‚ฐ ์ฐฝ์ƒ ์ฐฝ์ƒˆ ์ฐฝ์ƒ ์ฐฝ์„œ ์ฐฝ์„  ์ฐฝ์„ค ์ฐฝ์„ฌ ์ฐฝ์„ฑ ์ฐฝ์†Œ ์ฐฝ์†” ์ฐฝ์†œ ์ฐฝ์†ก ์ฐฝ์ˆ˜ ์ฐฝ์‹œ ์ฐฝ์‹  ์ฐฝ์‹ค ์ฐฝ์‹ฌ ์ฐฝ์•„ ์ฐฝ์•ˆ ์ฐฝ์•  ์ฐฝ์–‘ ์ฐฝ์—ฌ ์ฐฝ์—ฐ ์ฐฝ์˜ˆ ์ฐฝ์˜ค ์ฐฝ์˜จ ์ฐฝ์š” ์ฐฝ์šฐ ์ฐฝ์›” ์ฐฝ์œ  ์ฐฝ์œค ์ฐฝ์œจ ์ฐฝ์€ ์ฐฝ์ด ์ฐฝ์ผ ์ฐฝ์ž„ ์ฐฝ์ • ์ฐฝ์ฐจ ์ฐฝ์ฑ„ ์ฐฝ์ฒœ ์ฐฝ์ฒจ ์ฐฝ์ฒญ ์ฐฝ์ดˆ ์ฐฝ์ด ์ฐฝํ‘œ ์ฐฝํ•˜ ์ฐฝํ•œ ์ฐฝํ•ด ์ฐฝํ–ฅ ์ฐฝํ˜„ ์ฐฝํ˜ผ ์ฐฝํ™ ์ฐฝํ™” ์ฐฝํšจ ์ฐฝ๋‚จ ์ฐฝ๋ˆˆ ์ฐฝ๋‹ฌ ์ฐฝ๋‹น ์ฐฝ๋ด„ ์ฐฝ๋น„ ์ฐฝ์Šฌ ์ฐฝ์—ด ์ฐฝ์˜ ์ฐฝ์ž ์ฐฝํƒœ ์ฐฝํ˜œ ์ฑ„๋‚˜ ์ฑ„๋‚œ ์ฑ„๋‹จ ์ฑ„๋‹ด ์ฑ„๋„ ์ฑ„๋ผ ์ฑ„๋ž˜ ์ฑ„๋ฆฌ ์ฑ„๋ชจ ์ฑ„๋ฏธ ์ฑ„๋ฏผ ์ฑ„์‚ฌ ์ฑ„์‚ฐ ์ฑ„์ƒ ์ฑ„์ƒˆ ์ฑ„์ƒ ์ฑ„์„œ ์ฑ„์„  ์ฑ„์„ค ์ฑ„์„ฌ ์ฑ„์„ฑ ์ฑ„์†Œ ์ฑ„์†” ์ฑ„์†œ ์ฑ„์†ก ์ฑ„์ˆ˜ ์ฑ„์‹œ ์ฑ„์‹  ์ฑ„์‹ค ์ฑ„์‹ฌ ์ฑ„์•„ ์ฑ„์•ˆ ์ฑ„์–‘ ์ฑ„์—ฌ ์ฑ„์—ฐ ์ฑ„์˜ˆ ์ฑ„์˜ค ์ฑ„์˜จ ์ฑ„์š” ์ฑ„์šฐ ์ฑ„์›” ์ฑ„์œ  ์ฑ„์œค ์ฑ„์œจ ์ฑ„์€ ์ฑ„์ด ์ฑ„์ผ ์ฑ„์ž„ ์ฑ„์ • ์ฑ„์ฐจ ์ฑ„์ฐฝ ์ฑ„์ฒœ ์ฑ„์ฒจ ์ฑ„์ฒญ ์ฑ„์ดˆ ์ฑ„์ด ์ฑ„ํ‘œ ์ฑ„ํ•˜ ์ฑ„ํ•œ ์ฑ„ํ•ด ์ฑ„ํ–ฅ ์ฑ„ํ˜„ ์ฑ„ํ˜ผ ์ฑ„ํ™ ์ฑ„ํ™” ์ฑ„ํšจ ์ฑ„๋‚จ ์ฑ„๋ˆˆ ์ฑ„๋‹ฌ ์ฑ„๋‹น ์ฑ„๋ด„ ์ฑ„๋น„ ์ฑ„์Šฌ ์ฑ„์—ด ์ฑ„์˜ ์ฑ„์ž ์ฑ„ํ˜œ ์ฒœ๋‚œ ์ฒœ๋‹ค ์ฒœ๋‹จ ์ฒœ๋‹ด ์ฒœ๋„ ์ฒœ๋ผ ์ฒœ๋ž˜ ์ฒœ๋ฅ˜ ์ฒœ๋ฆฌ ์ฒœ๋ชจ ์ฒœ๋ฌด ์ฒœ๋ฏธ ์ฒœ์‚ฐ ์ฒœ์ƒ ์ฒœ์ƒˆ ์ฒœ์ƒ ์ฒœ์„œ ์ฒœ์„  ์ฒœ์„ค ์ฒœ์„ฌ ์ฒœ์„ฑ ์ฒœ์†Œ ์ฒœ์†” ์ฒœ์†œ ์ฒœ์†ก ์ฒœ์ˆ˜ ์ฒœ์‹  ์ฒœ์‹ค ์ฒœ์‹ฌ ์ฒœ์•„ ์ฒœ์•ˆ ์ฒœ์•  ์ฒœ์–‘ ์ฒœ์—ฌ ์ฒœ์—ฐ ์ฒœ์˜ˆ ์ฒœ์˜ค ์ฒœ์˜จ ์ฒœ์š” ์ฒœ์šฐ ์ฒœ์›” ์ฒœ์œ  ์ฒœ์œค ์ฒœ์œจ ์ฒœ์€ ์ฒœ์ด ์ฒœ์ผ ์ฒœ์ž„ ์ฒœ์ • ์ฒœ์ฐจ ์ฒœ์ฐฝ ์ฒœ์ฑ„ ์ฒœ์ฒจ ์ฒœ์ฒญ ์ฒœ์ดˆ ์ฒœ์ด ์ฒœํ‘œ ์ฒœํ–ฅ ์ฒœํ˜„ ์ฒœํ˜ผ ์ฒœํ™ ์ฒœํ™” ์ฒœํšจ ์ฒœ๋‚จ ์ฒœ๋ˆˆ ์ฒœ๋‹ฌ ์ฒœ๋‹น ์ฒœ๋ด„ ์ฒœ๋น„ ์ฒœ์Šฌ ์ฒœ์—ด ์ฒœ์˜ ์ฒœ์ž ์ฒœํƒœ ์ฒœํ˜œ ์ฒจ๋‚˜ ์ฒจ๋‚œ ์ฒจ๋‚ด ์ฒจ๋‹ค ์ฒจ๋‹ด ์ฒจ๋„ ์ฒจ๋ผ ์ฒจ๋ž˜ ์ฒจ๋ฅ˜ ์ฒจ๋ฆฌ ์ฒจ๋ชจ ์ฒจ๋ฌด ์ฒจ๋ฏธ ์ฒจ๋ฏผ ์ฒจ์‚ฐ ์ฒจ์ƒ ์ฒจ์ƒˆ ์ฒจ์ƒ ์ฒจ์„œ ์ฒจ์„  ์ฒจ์„ค ์ฒจ์„ฌ ์ฒจ์„ฑ ์ฒจ์†Œ ์ฒจ์†” ์ฒจ์†œ ์ฒจ์†ก ์ฒจ์ˆ˜ ์ฒจ์‹œ ์ฒจ์‹  ์ฒจ์‹ค ์ฒจ์‹ฌ ์ฒจ์•„ ์ฒจ์•ˆ ์ฒจ์•  ์ฒจ์–‘ ์ฒจ์—ฌ ์ฒจ์—ฐ ์ฒจ์˜ˆ ์ฒจ์˜ค ์ฒจ์˜จ ์ฒจ์š” ์ฒจ์šฐ ์ฒจ์›” ์ฒจ์œ  ์ฒจ์œค ์ฒจ์œจ ์ฒจ์€ ์ฒจ์ผ ์ฒจ์ž„ ์ฒจ์ • ์ฒจ์ฐจ ์ฒจ์ฐฝ ์ฒจ์ฑ„ ์ฒจ์ฒœ ์ฒจ์ฒญ ์ฒจ์ดˆ ์ฒจ์ด ์ฒจํ‘œ ์ฒจํ•˜ ์ฒจํ•œ ์ฒจํ•ด ์ฒจํ–ฅ ์ฒจํ˜„ ์ฒจํ˜ผ ์ฒจํ™ ์ฒจํ™” ์ฒจํšจ ์ฒจ๋‚จ ์ฒจ๋ˆˆ ์ฒจ๋‹ฌ ์ฒจ๋‹น ์ฒจ๋น„ ์ฒจ์Šฌ ์ฒจ์—ด ์ฒจ์˜ ์ฒจ์ž ์ฒจํƒœ ์ฒจํ˜œ ์ฒญ๋‚˜ ์ฒญ๋‚œ ์ฒญ๋‚ด ์ฒญ๋‹ค ์ฒญ๋‹จ ์ฒญ๋‹ด ์ฒญ๋„ ์ฒญ๋ผ ์ฒญ๋ž˜ ์ฒญ๋ฅ˜ ์ฒญ๋ฆฌ ์ฒญ๋ชจ ์ฒญ๋ฌด ์ฒญ๋ฏธ ์ฒญ๋ฏผ ์ฒญ์‚ฌ ์ฒญ์‚ฐ ์ฒญ์ƒ ์ฒญ์ƒˆ ์ฒญ์ƒ ์ฒญ์„œ ์ฒญ์„  ์ฒญ์„ค ์ฒญ์„ฌ ์ฒญ์„ฑ ์ฒญ์†” ์ฒญ์†œ ์ฒญ์†ก ์ฒญ์ˆ˜ ์ฒญ์‹œ ์ฒญ์‹  ์ฒญ์‹ค ์ฒญ์‹ฌ ์ฒญ์•„ ์ฒญ์•ˆ ์ฒญ์•  ์ฒญ์–‘ ์ฒญ์—ฌ ์ฒญ์—ฐ ์ฒญ์˜ˆ ์ฒญ์˜ค ์ฒญ์˜จ ์ฒญ์š” ์ฒญ์šฐ ์ฒญ์›” ์ฒญ์œ  ์ฒญ์œค ์ฒญ์œจ ์ฒญ์€ ์ฒญ์ด ์ฒญ์ผ ์ฒญ์ž„ ์ฒญ์ • ์ฒญ์ฐจ ์ฒญ์ฐฝ ์ฒญ์ฑ„ ์ฒญ์ฒœ ์ฒญ์ฒจ ์ฒญ์ดˆ ์ฒญ์ด ์ฒญํ‘œ ์ฒญํ•˜ ์ฒญํ•œ ์ฒญํ•ด ์ฒญํ–ฅ ์ฒญํ˜„ ์ฒญํ˜ผ ์ฒญํ™ ์ฒญํ™” ์ฒญํšจ ์ฒญ๋‚จ ์ฒญ๋ˆˆ ์ฒญ๋‹ฌ ์ฒญ๋‹น ์ฒญ๋ด„ ์ฒญ๋น„ ์ฒญ์Šฌ ์ฒญ์—ด ์ฒญ์˜ ์ฒญ์ž ์ฒญํƒœ ์ฒญํ˜œ ์ดˆ๋‚˜ ์ดˆ๋‚œ ์ดˆ๋‚ด ์ดˆ๋‹ค ์ดˆ๋‹จ ์ดˆ๋‹ด ์ดˆ๋„ ์ดˆ๋ฅ˜ ์ดˆ๋ฆฌ ์ดˆ๋ชจ ์ดˆ๋ฌด ์ดˆ๋ฏธ ์ดˆ๋ฏผ ์ดˆ์‚ฌ ์ดˆ์‚ฐ ์ดˆ์ƒˆ ์ดˆ์ƒ ์ดˆ์„œ ์ดˆ์„  ์ดˆ์„ค ์ดˆ์„ฌ ์ดˆ์„ฑ ์ดˆ์†Œ ์ดˆ์†” ์ดˆ์†œ ์ดˆ์†ก ์ดˆ์ˆ˜ ์ดˆ์‹œ ์ดˆ์‹  ์ดˆ์‹ค ์ดˆ์‹ฌ ์ดˆ์•„ ์ดˆ์•ˆ ์ดˆ์•  ์ดˆ์–‘ ์ดˆ์—ฌ ์ดˆ์—ฐ ์ดˆ์˜ˆ ์ดˆ์˜ค ์ดˆ์˜จ ์ดˆ์š” ์ดˆ์šฐ ์ดˆ์›” ์ดˆ์œ  ์ดˆ์œค ์ดˆ์œจ ์ดˆ์€ ์ดˆ์ด ์ดˆ์ผ ์ดˆ์ž„ ์ดˆ์ • ์ดˆ์ฐจ ์ดˆ์ฐฝ ์ดˆ์ฑ„ ์ดˆ์ฒœ ์ดˆ์ฒจ ์ดˆ์ฒญ ์ดˆ์ด ์ดˆํ‘œ ์ดˆํ•˜ ์ดˆํ•œ ์ดˆํ•ด ์ดˆํ–ฅ ์ดˆํ˜„ ์ดˆํ˜ผ ์ดˆํ™ ์ดˆํ™” ์ดˆํšจ ์ดˆ๋‚จ ์ดˆ๋ˆˆ ์ดˆ๋‹ฌ ์ดˆ๋‹น ์ดˆ๋ด„ ์ดˆ๋น„ ์ดˆ์Šฌ ์ดˆ์—ด ์ดˆ์˜ ์ดˆ์ž ์ดˆํƒœ ์ดˆํ˜œ ์ด๋‚˜ ์ด๋‚œ ์ด๋‚ด ์ด๋‹จ ์ด๋‹ด ์ด๋„ ์ด๋ผ ์ด๋ž˜ ์ด๋ฅ˜ ์ด๋ฆฌ ์ด๋ชจ ์ด๋ฌด ์ด๋ฏธ ์ด๋ฏผ ์ด์‚ฌ ์ด์‚ฐ ์ด์ƒˆ ์ด์ƒ ์ด์„œ ์ด์„  ์ด์„ค ์ด์„ฌ ์ด์†Œ ์ด์†” ์ด์†œ ์ด์†ก ์ด์ˆ˜ ์ด์‹œ ์ด์‹  ์ด์‹ค ์ด์‹ฌ ์ด์•„ ์ด์•ˆ ์ด์•  ์ด์–‘ ์ด์—ฌ ์ด์—ฐ ์ด์˜ˆ ์ด์˜ค ์ด์˜จ ์ด์š” ์ด์šฐ ์ด์›” ์ด์œ  ์ด์œค ์ด์œจ ์ด์€ ์ด์ด ์ด์ผ ์ด์ž„ ์ด์ • ์ด์ฐจ ์ด์ฐฝ ์ด์ฑ„ ์ด์ฒœ ์ด์ฒจ ์ด์ฒญ ์ด์ดˆ ์ดํ‘œ ์ดํ•˜ ์ดํ•œ ์ดํ•ด ์ดํ–ฅ ์ดํ˜„ ์ดํ˜ผ ์ดํ™ ์ดํ™” ์ดํšจ ์ด๋‚จ ์ด๋ˆˆ ์ด๋‹ฌ ์ด๋‹น ์ด๋น„ ์ด์Šฌ ์ด์—ด ์ด์˜ ์ด์ž ์ดํƒœ ์ดํ˜œ ํ‘œ๋‚˜ ํ‘œ๋‚œ ํ‘œ๋‚ด ํ‘œ๋‹ค ํ‘œ๋‹จ ํ‘œ๋‹ด ํ‘œ๋„ ํ‘œ๋ผ ํ‘œ๋ž˜ ํ‘œ๋ฆฌ ํ‘œ๋ชจ ํ‘œ๋ฌด ํ‘œ๋ฏธ ํ‘œ๋ฏผ ํ‘œ์‚ฌ ํ‘œ์‚ฐ ํ‘œ์ƒˆ ํ‘œ์ƒ ํ‘œ์„œ ํ‘œ์„  ํ‘œ์„ค ํ‘œ์„ฌ ํ‘œ์„ฑ ํ‘œ์†Œ ํ‘œ์†” ํ‘œ์†œ ํ‘œ์†ก ํ‘œ์ˆ˜ ํ‘œ์‹  ํ‘œ์‹ค ํ‘œ์‹ฌ ํ‘œ์•„ ํ‘œ์•ˆ ํ‘œ์•  ํ‘œ์–‘ ํ‘œ์—ฌ ํ‘œ์—ฐ ํ‘œ์˜ˆ ํ‘œ์˜ค ํ‘œ์˜จ ํ‘œ์š” ํ‘œ์šฐ ํ‘œ์›” ํ‘œ์œ  ํ‘œ์œค ํ‘œ์œจ ํ‘œ์€ ํ‘œ์ด ํ‘œ์ผ ํ‘œ์ž„ ํ‘œ์ฐจ ํ‘œ์ฑ„ ํ‘œ์ฒœ ํ‘œ์ฒจ ํ‘œ์ฒญ ํ‘œ์ดˆ ํ‘œ์ด ํ‘œํ•˜ ํ‘œํ•œ ํ‘œํ•ด ํ‘œํ–ฅ ํ‘œํ˜ผ ํ‘œํ™ ํ‘œํ™” ํ‘œ๋‚จ ํ‘œ๋ˆˆ ํ‘œ๋‹ฌ ํ‘œ๋‹น ํ‘œ๋ด„ ํ‘œ๋น„ ํ‘œ์Šฌ ํ‘œ์—ด ํ‘œ์˜ ํ‘œ์ž ํ‘œํƒœ ํ‘œํ˜œ ํ•˜๋‚˜ ํ•˜๋‚œ ํ•˜๋‹จ ํ•˜๋‹ด ํ•˜๋„ ํ•˜๋ชจ ํ•˜๋ฏธ ํ•˜๋ฏผ ํ•˜์‚ฐ ํ•˜์ƒ ํ•˜์ƒˆ ํ•˜์ƒ ํ•˜์„œ ํ•˜์„  ํ•˜์„ค ํ•˜์„ฌ ํ•˜์„ฑ ํ•˜์†Œ ํ•˜์†” ํ•˜์†œ ํ•˜์†ก ํ•˜์‹œ ํ•˜์•ˆ ํ•˜์•  ํ•˜์—ฐ ํ•˜์˜ˆ ํ•˜์˜จ ํ•˜์š” ํ•˜์›” ํ•˜์œ  ํ•˜์œค ํ•˜์œจ ํ•˜์€ ํ•˜์ž„ ํ•˜์ • ํ•˜์ฐฝ ํ•˜์ฒœ ํ•˜์ฒจ ํ•˜์ดˆ ํ•˜์ด ํ•˜ํ‘œ ํ•˜ํ•œ ํ•˜ํ•ด ํ•˜ํ˜„ ํ•˜ํ˜ผ ํ•˜ํ™ ํ•˜ํ™” ํ•˜ํšจ ํ•˜๋‚จ ํ•˜๋ˆˆ ํ•˜๋‹ฌ ํ•˜๋‹น ํ•˜๋ด„ ํ•˜๋น„ ํ•˜์Šฌ ํ•˜์—ด ํ•˜์˜ ํ•˜ํƒœ ํ•˜ํ˜œ ํ•œ๋‚˜ ํ•œ๋‚œ ํ•œ๋‚ด ํ•œ๋‹จ ํ•œ๋‹ด ํ•œ๋„ ํ•œ๋ผ ํ•œ๋ž˜ ํ•œ๋ฆฌ ํ•œ๋ชจ ํ•œ๋ฌด ํ•œ๋ฏธ ํ•œ๋ฏผ ํ•œ์‚ฌ ํ•œ์‚ฐ ํ•œ์ƒ ํ•œ์ƒˆ ํ•œ์ƒ ํ•œ์„œ ํ•œ์„  ํ•œ์„ค ํ•œ์„ฌ ํ•œ์„ฑ ํ•œ์†Œ ํ•œ์†” ํ•œ์†œ ํ•œ์†ก ํ•œ์ˆ˜ ํ•œ์‹œ ํ•œ์‹  ํ•œ์‹ค ํ•œ์•„ ํ•œ์•  ํ•œ์–‘ ํ•œ์—ฐ ํ•œ์˜ˆ ํ•œ์˜จ ํ•œ์š” ํ•œ์›” ํ•œ์œ  ํ•œ์œค ํ•œ์œจ ํ•œ์€ ํ•œ์ผ ํ•œ์ž„ ํ•œ์ฐจ ํ•œ์ฑ„ ํ•œ์ฒœ ํ•œ์ฒจ ํ•œ์ฒญ ํ•œ์ดˆ ํ•œ์ด ํ•œํ‘œ ํ•œํ•˜ ํ•œํ•ด ํ•œํ–ฅ ํ•œํ˜„ ํ•œํ˜ผ ํ•œํ™” ํ•œํšจ ํ•œ๋ˆˆ ํ•œ๋‹ฌ ํ•œ๋ด„ ํ•œ๋น„ ํ•œ์Šฌ ํ•œ์—ด ํ•œ์˜ ํ•œ์ž ํ•œํƒœ ํ•œํ˜œ ํ•ด๋‚˜ ํ•ด๋‚œ ํ•ด๋‹ค ํ•ด๋‹จ ํ•ด๋‹ด ํ•ด๋ž˜ ํ•ด๋ฅ˜ ํ•ด๋ฆฌ ํ•ด๋ชจ ํ•ด๋ฌด ํ•ด๋ฏธ ํ•ด๋ฏผ ํ•ด์ƒ ํ•ด์ƒ ํ•ด์„ฌ ํ•ด์„ฑ ํ•ด์†” ํ•ด์†œ ํ•ด์†ก ํ•ด์ˆ˜ ํ•ด์‹œ ํ•ด์‹ค ํ•ด์‹ฌ ํ•ด์•ˆ ํ•ด์–‘ ํ•ด์—ฐ ํ•ด์˜จ ํ•ด์šฐ ํ•ด์›” ํ•ด์œค ํ•ด์œจ ํ•ด์€ ํ•ด์ผ ํ•ด์ • ํ•ด์ฐจ ํ•ด์ฐฝ ํ•ด์ฒœ ํ•ด์ฒจ ํ•ด์ฒญ ํ•ด์ดˆ ํ•ด์ด ํ•ดํ‘œ ํ•ดํ•œ ํ•ดํ–ฅ ํ•ดํ˜„ ํ•ดํ˜ผ ํ•ดํ™ ํ•ดํ™” ํ•ดํšจ ํ•ด๋‚จ ํ•ด๋ˆˆ ํ•ด๋‹ฌ ํ•ด๋‹น ํ•ด์Šฌ ํ•ด์—ด ํ•ด์ž ํ–ฅ๋‚˜ ํ–ฅ๋‚œ ํ–ฅ๋‹ค ํ–ฅ๋‹จ ํ–ฅ๋‹ด ํ–ฅ๋„ ํ–ฅ๋ผ ํ–ฅ๋ž˜ ํ–ฅ๋ฅ˜ ํ–ฅ๋ฆฌ ํ–ฅ๋ชจ ํ–ฅ๋ฌด ํ–ฅ๋ฏธ ํ–ฅ๋ฏผ ํ–ฅ์‚ฌ ํ–ฅ์‚ฐ ํ–ฅ์ƒ ํ–ฅ์ƒˆ ํ–ฅ์ƒ ํ–ฅ์„œ ํ–ฅ์„  ํ–ฅ์„ค ํ–ฅ์„ฌ ํ–ฅ์„ฑ ํ–ฅ์†Œ ํ–ฅ์†” ํ–ฅ์†œ ํ–ฅ์†ก ํ–ฅ์ˆ˜ ํ–ฅ์‹œ ํ–ฅ์‹  ํ–ฅ์‹ค ํ–ฅ์‹ฌ ํ–ฅ์•„ ํ–ฅ์•ˆ ํ–ฅ์•  ํ–ฅ์–‘ ํ–ฅ์—ฌ ํ–ฅ์—ฐ ํ–ฅ์˜ˆ ํ–ฅ์˜ค ํ–ฅ์˜จ ํ–ฅ์š” ํ–ฅ์šฐ ํ–ฅ์›” ํ–ฅ์œ  ํ–ฅ์œค ํ–ฅ์œจ ํ–ฅ์€ ํ–ฅ์ด ํ–ฅ์ผ ํ–ฅ์ž„ ํ–ฅ์ • ํ–ฅ์ฐจ ํ–ฅ์ฐฝ ํ–ฅ์ฑ„ ํ–ฅ์ฒœ ํ–ฅ์ฒจ ํ–ฅ์ฒญ ํ–ฅ์ดˆ ํ–ฅ์ด ํ–ฅํ‘œ ํ–ฅํ•˜ ํ–ฅํ•œ ํ–ฅํ•ด ํ–ฅํ˜„ ํ–ฅํ˜ผ ํ–ฅํ™ ํ–ฅํ™” ํ–ฅํšจ ํ–ฅ๋‚จ ํ–ฅ๋ˆˆ ํ–ฅ๋‹ฌ ํ–ฅ๋‹น ํ–ฅ๋ด„ ํ–ฅ๋น„ ํ–ฅ์Šฌ ํ–ฅ์—ด ํ–ฅ์˜ ํ–ฅ์ž ํ–ฅํƒœ ํ–ฅํ˜œ ํ˜„๋‚˜ ํ˜„๋‹ค ํ˜„๋‹จ ํ˜„๋‹ด ํ˜„๋„ ํ˜„๋ผ ํ˜„๋ž˜ ํ˜„๋ฅ˜ ํ˜„๋ฆฌ ํ˜„๋ชจ ํ˜„๋ฌด ํ˜„๋ฏธ ํ˜„๋ฏผ ํ˜„์‚ฌ ํ˜„์‚ฐ ํ˜„์„œ ํ˜„์„  ํ˜„์„ค ํ˜„์„ฌ ํ˜„์„ฑ ํ˜„์†Œ ํ˜„์†” ํ˜„์†œ ํ˜„์†ก ํ˜„์ˆ˜ ํ˜„์‹œ ํ˜„์‹  ํ˜„์‹ค ํ˜„์‹ฌ ํ˜„์•„ ํ˜„์•ˆ ํ˜„์•  ํ˜„์–‘ ํ˜„์—ฌ ํ˜„์—ฐ ํ˜„์˜ˆ ํ˜„์˜ค ํ˜„์˜จ ํ˜„์š” ํ˜„์šฐ ํ˜„์›” ํ˜„์œ  ํ˜„์œค ํ˜„์œจ ํ˜„์€ ํ˜„์ด ํ˜„์ผ ํ˜„์ž„ ํ˜„์ • ํ˜„์ฐจ ํ˜„์ฐฝ ํ˜„์ฑ„ ํ˜„์ฒœ ํ˜„์ฒจ ํ˜„์ฒญ ํ˜„์ดˆ ํ˜„์ด ํ˜„ํ‘œ ํ˜„ํ•˜ ํ˜„ํ•œ ํ˜„ํ•ด ํ˜„ํ–ฅ ํ˜„ํ˜ผ ํ˜„ํ™” ํ˜„ํšจ ํ˜„๋‚จ ํ˜„๋ˆˆ ํ˜„๋‹ฌ ํ˜„๋ด„ ํ˜„๋น„ ํ˜„์Šฌ ํ˜„์—ด ํ˜„์˜ ํ˜„์ž ํ˜„ํƒœ ํ˜„ํ˜œ ํ˜ผ๋‹ค ํ˜ผ๋‹จ ํ˜ผ๋„ ํ˜ผ๋ผ ํ˜ผ๋ž˜ ํ˜ผ๋ฅ˜ ํ˜ผ๋ฆฌ ํ˜ผ๋ชจ ํ˜ผ๋ฌด ํ˜ผ๋ฏผ ํ˜ผ์‚ฌ ํ˜ผ์‚ฐ ํ˜ผ์ƒ ํ˜ผ์ƒˆ ํ˜ผ์ƒ ํ˜ผ์„œ ํ˜ผ์„  ํ˜ผ์„ค ํ˜ผ์„ฌ ํ˜ผ์†Œ ํ˜ผ์†” ํ˜ผ์†œ ํ˜ผ์†ก ํ˜ผ์ˆ˜ ํ˜ผ์‹œ ํ˜ผ์‹ค ํ˜ผ์•„ ํ˜ผ์•ˆ ํ˜ผ์•  ํ˜ผ์–‘ ํ˜ผ์—ฐ ํ˜ผ์˜ˆ ํ˜ผ์˜ค ํ˜ผ์˜จ ํ˜ผ์š” ํ˜ผ์šฐ ํ˜ผ์›” ํ˜ผ์œ  ํ˜ผ์œค ํ˜ผ์œจ ํ˜ผ์€ ํ˜ผ์ผ ํ˜ผ์ž„ ํ˜ผ์ • ํ˜ผ์ฐจ ํ˜ผ์ฐฝ ํ˜ผ์ฑ„ ํ˜ผ์ฒœ ํ˜ผ์ฒจ ํ˜ผ์ฒญ ํ˜ผ์ดˆ ํ˜ผ์ด ํ˜ผํ‘œ ํ˜ผํ•˜ ํ˜ผํ•œ ํ˜ผํ•ด ํ˜ผํ–ฅ ํ˜ผํ˜„ ํ˜ผํ™ ํ˜ผํ™” ํ˜ผํšจ ํ˜ผ๋ˆˆ ํ˜ผ๋‹ฌ ํ˜ผ๋‹น ํ˜ผ๋ด„ ํ˜ผ๋น„ ํ˜ผ์Šฌ ํ˜ผ์—ด ํ˜ผ์˜ ํ˜ผํƒœ ํ˜ผํ˜œ ํ™๋‚œ ํ™๋‚ด ํ™๋‹ค ํ™๋‹จ ํ™๋‹ด ํ™๋„ ํ™๋ผ ํ™๋ž˜ ํ™๋ฅ˜ ํ™๋ฆฌ ํ™๋ชจ ํ™๋ฌด ํ™๋ฏธ ํ™๋ฏผ ํ™์‚ฌ ํ™์‚ฐ ํ™์ƒ ํ™์ƒˆ ํ™์ƒ ํ™์„œ ํ™์„  ํ™์„ค ํ™์„ฌ ํ™์„ฑ ํ™์†Œ ํ™์†” ํ™์†œ ํ™์†ก ํ™์‹œ ํ™์‹  ํ™์‹ค ํ™์‹ฌ ํ™์•ˆ ํ™์•  ํ™์–‘ ํ™์—ฌ ํ™์—ฐ ํ™์˜ˆ ํ™์˜จ ํ™์š” ํ™์›” ํ™์œ  ํ™์œค ํ™์œจ ํ™์€ ํ™์ผ ํ™์ž„ ํ™์ • ํ™์ฐจ ํ™์ฐฝ ํ™์ฑ„ ํ™์ฒœ ํ™์ฒจ ํ™์ฒญ ํ™์ดˆ ํ™์ด ํ™ํ‘œ ํ™ํ•˜ ํ™ํ•œ ํ™ํ•ด ํ™ํ–ฅ ํ™ํ˜„ ํ™ํ˜ผ ํ™ํ™” ํ™ํšจ ํ™๋‚จ ํ™๋ˆˆ ํ™๋‹ฌ ํ™๋ด„ ํ™๋น„ ํ™์Šฌ ํ™์—ด ํ™์˜ ํ™์ž ํ™ํƒœ ํ™ํ˜œ ํ™”๋‹จ ํ™”๋‹ด ํ™”๋„ ํ™”๋ž˜ ํ™”๋ฆฌ ํ™”๋ชจ ํ™”๋ฌด ํ™”๋ฏธ ํ™”๋ฏผ ํ™”์‚ฌ ํ™”์ƒˆ ํ™”์ƒ ํ™”์„œ ํ™”์„  ํ™”์„ค ํ™”์„ฌ ํ™”์„ฑ ํ™”์†” ํ™”์†œ ํ™”์†ก ํ™”์ˆ˜ ํ™”์‹œ ํ™”์‹ค ํ™”์•ˆ ํ™”์•  ํ™”์–‘ ํ™”์—ฌ ํ™”์—ฐ ํ™”์˜ˆ ํ™”์˜ค ํ™”์˜จ ํ™”์š” ํ™”์šฐ ํ™”์›” ํ™”์œ  ํ™”์œค ํ™”์œจ ํ™”์€ ํ™”์ด ํ™”์ผ ํ™”์ž„ ํ™”์ • ํ™”์ฐจ ํ™”์ฐฝ ํ™”์ฑ„ ํ™”์ฒœ ํ™”์ฒจ ํ™”์ฒญ ํ™”์ดˆ ํ™”์ด ํ™”ํ‘œ ํ™”ํ•ด ํ™”ํ–ฅ ํ™”ํ˜„ ํ™”ํ˜ผ ํ™”ํ™ ํ™”ํšจ ํ™”๋ˆˆ ํ™”๋‹ฌ ํ™”๋‹น ํ™”๋ด„ ํ™”๋น„ ํ™”์Šฌ ํ™”์—ด ํ™”์˜ ํ™”์ž ํ™”ํƒœ ํšจ๋‹จ ํšจ๋‹ด ํšจ๋ผ ํšจ๋ž˜ ํšจ๋ฅ˜ ํšจ๋ฆฌ ํšจ๋ฌด ํšจ๋ฏธ ํšจ๋ฏผ ํšจ์‚ฌ ํšจ์‚ฐ ํšจ์ƒ ํšจ์ƒˆ ํšจ์ƒ ํšจ์„œ ํšจ์„  ํšจ์„ค ํšจ์„ฌ ํšจ์„ฑ ํšจ์†Œ ํšจ์†” ํšจ์†œ ํšจ์†ก ํšจ์ˆ˜ ํšจ์‹œ ํšจ์‹  ํšจ์‹ค ํšจ์•„ ํšจ์•ˆ ํšจ์•  ํšจ์–‘ ํšจ์—ฌ ํšจ์—ฐ ํšจ์˜ˆ ํšจ์˜จ ํšจ์›” ํšจ์œ  ํšจ์œค ํšจ์œจ ํšจ์€ ํšจ์ผ ํšจ์ž„ ํšจ์ • ํšจ์ฐจ ํšจ์ฐฝ ํšจ์ฑ„ ํšจ์ฒœ ํšจ์ฒจ ํšจ์ฒญ ํšจ์ดˆ ํšจ์ด ํšจํ‘œ ํšจํ•˜ ํšจํ•œ ํšจํ•ด ํšจํ–ฅ ํšจํ˜„ ํšจํ˜ผ ํšจํ™ ํšจํ™” ํšจ๋‚จ ํšจ๋ˆˆ ํšจ๋‹ฌ ํšจ๋ด„ ํšจ๋น„ ํšจ์Šฌ ํšจ์—ด ํšจ์˜ ํšจ์ž ํšจํƒœ ํšจํ˜œ ๋‚จ๋‹จ ๋‚จ๋‹ด ๋‚จ๋„ ๋‚จ๋ž˜ ๋‚จ๋ฅ˜ ๋‚จ๋ฆฌ ๋‚จ๋ชจ ๋‚จ๋ฌด ๋‚จ๋ฏธ ๋‚จ๋ฏผ ๋‚จ์‚ฌ ๋‚จ์‚ฐ ๋‚จ์ƒ ๋‚จ์ƒˆ ๋‚จ์ƒ ๋‚จ์„œ ๋‚จ์„  ๋‚จ์„ค ๋‚จ์„ฌ ๋‚จ์†Œ ๋‚จ์†” ๋‚จ์†œ ๋‚จ์†ก ๋‚จ์ˆ˜ ๋‚จ์‹ค ๋‚จ์•ˆ ๋‚จ์•  ๋‚จ์–‘ ๋‚จ์—ฐ ๋‚จ์˜ˆ ๋‚จ์š” ๋‚จ์›” ๋‚จ์œค ๋‚จ์œจ ๋‚จ์ • ๋‚จ์ฐจ ๋‚จ์ฑ„ ๋‚จ์ฒœ ๋‚จ์ฒญ ๋‚จ์ด ๋‚จํ‘œ ๋‚จํ•œ ๋‚จํ•ด ๋‚จํ–ฅ ๋‚จํ˜„ ๋‚จํ˜ผ ๋‚จํ™ ๋‚จํ™” ๋‚จํšจ ๋‚จ๋‹น ๋‚จ๋ด„ ๋‚จ๋น„ ๋‚จ์Šฌ ๋‚จ์—ด ๋‚จ์˜ ๋‚จํƒœ ๋‚จํ˜œ ๋ˆˆ๋‹ด ๋ˆˆ๋„ ๋ˆˆ๋ผ ๋ˆˆ๋ž˜ ๋ˆˆ๋ฅ˜ ๋ˆˆ๋ฆฌ ๋ˆˆ๋ชจ ๋ˆˆ๋ฌด ๋ˆˆ๋ฏธ ๋ˆˆ์‚ฌ ๋ˆˆ์‚ฐ ๋ˆˆ์ƒ ๋ˆˆ์ƒˆ ๋ˆˆ์ƒ ๋ˆˆ์„œ ๋ˆˆ์„  ๋ˆˆ์„ค ๋ˆˆ์„ฌ ๋ˆˆ์„ฑ ๋ˆˆ์†Œ ๋ˆˆ์†” ๋ˆˆ์†œ ๋ˆˆ์†ก ๋ˆˆ์ˆ˜ ๋ˆˆ์‹œ ๋ˆˆ์‹  ๋ˆˆ์‹ค ๋ˆˆ์‹ฌ ๋ˆˆ์•ˆ ๋ˆˆ์•  ๋ˆˆ์–‘ ๋ˆˆ์—ฌ ๋ˆˆ์—ฐ ๋ˆˆ์˜ˆ ๋ˆˆ์˜ค ๋ˆˆ์š” ๋ˆˆ์šฐ ๋ˆˆ์›” ๋ˆˆ์œ  ๋ˆˆ์œค ๋ˆˆ์œจ ๋ˆˆ์ด ๋ˆˆ์ผ ๋ˆˆ์ • ๋ˆˆ์ฐจ ๋ˆˆ์ฑ„ ๋ˆˆ์ฒœ ๋ˆˆ์ฒจ ๋ˆˆ์ฒญ ๋ˆˆ์ดˆ ๋ˆˆํ‘œ ๋ˆˆํ•˜ ๋ˆˆํ•œ ๋ˆˆํ•ด ๋ˆˆํ–ฅ ๋ˆˆํ˜„ ๋ˆˆํ˜ผ ๋ˆˆํ™ ๋ˆˆํ™” ๋ˆˆํšจ ๋ˆˆ๋‹ฌ ๋ˆˆ๋ด„ ๋ˆˆ๋น„ ๋ˆˆ์Šฌ ๋ˆˆ์—ด ๋ˆˆ์˜ ๋ˆˆํƒœ ๋ˆˆํ˜œ ๋‹ฌ์‚ฐ ๋‹ฌ์ƒ ๋‹ฌ์ƒˆ ๋‹ฌ์ƒ ๋‹ฌ์„œ ๋‹ฌ์„  ๋‹ฌ์„ค ๋‹ฌ์„ฌ ๋‹ฌ์„ฑ ๋‹ฌ์†Œ ๋‹ฌ์†” ๋‹ฌ์†œ ๋‹ฌ์•„ ๋‹ฌ์–‘ ๋‹ฌ์—ฐ ๋‹ฌ์šฐ ๋‹ฌ์›” ๋‹ฌ์œ  ๋‹ฌ์œค ๋‹ฌ์œจ ๋‹ฌ์€ ๋‹ฌ์ด ๋‹ฌ์ผ ๋‹ฌ์ • ๋‹ฌ์ฐจ ๋‹ฌ์ฑ„ ๋‹ฌ์ฒœ ๋‹ฌ์ฒจ ๋‹ฌ์ฒญ ๋‹ฌ์ดˆ ๋‹ฌ์ด ๋‹ฌํ‘œ ๋‹ฌํ•˜ ๋‹ฌํ–ฅ ๋‹ฌํ˜„ ๋‹ฌํ™ ๋‹ฌํ™” ๋‹ฌํšจ ๋‹ฌ๋‚จ ๋‹ฌ๋ˆˆ ๋‹ฌ๋ด„ ๋‹ฌ๋น„ ๋‹ฌ์—ด ๋‹ฌ์˜ ๋‹ฌ์ž ๋‹ฌํƒœ ๋‹ฌํ˜œ ๋‹น๋‚œ ๋‹น๋‹ด ๋‹น๋ผ ๋‹น๋ž˜ ๋‹น๋ฅ˜ ๋‹น๋ฆฌ ๋‹น๋ชจ ๋‹น๋ฏธ ๋‹น๋ฏผ ๋‹น์‚ฌ ๋‹น์‚ฐ ๋‹น์ƒ ๋‹น์ƒˆ ๋‹น์ƒ ๋‹น์„œ ๋‹น์„  ๋‹น์„ค ๋‹น์„ฌ ๋‹น์„ฑ ๋‹น์†Œ ๋‹น์†” ๋‹น์†œ ๋‹น์†ก ๋‹น์‹ค ๋‹น์‹ฌ ๋‹น์•„ ๋‹น์•ˆ ๋‹น์•  ๋‹น์–‘ ๋‹น์—ฌ ๋‹น์˜ˆ ๋‹น์˜ค ๋‹น์˜จ ๋‹น์š” ๋‹น์šฐ ๋‹น์›” ๋‹น์œค ๋‹น์œจ ๋‹น์€ ๋‹น์ด ๋‹น์ผ ๋‹น์ž„ ๋‹น์ • ๋‹น์ฐฝ ๋‹น์ฑ„ ๋‹น์ฒœ ๋‹น์ฒญ ๋‹น์ดˆ ๋‹น์ด ๋‹นํ‘œ ๋‹นํ–ฅ ๋‹นํ˜„ ๋‹นํ˜ผ ๋‹นํ™ ๋‹นํ™” ๋‹นํšจ ๋‹น๋ˆˆ ๋‹น๋‹ฌ ๋‹น๋ด„ ๋‹น๋น„ ๋‹น์—ด ๋‹น์˜ ๋ด„๋‚˜ ๋ด„๋‚œ ๋ด„๋‚ด ๋ด„๋‹ค ๋ด„๋‹จ ๋ด„๋‹ด ๋ด„๋„ ๋ด„๋ผ ๋ด„๋ž˜ ๋ด„๋ฅ˜ ๋ด„๋ฆฌ ๋ด„๋ฌด ๋ด„๋ฏธ ๋ด„๋ฏผ ๋ด„์‚ฌ ๋ด„์‚ฐ ๋ด„์ƒ ๋ด„์ƒˆ ๋ด„์ƒ ๋ด„์„œ ๋ด„์„  ๋ด„์„ค ๋ด„์„ฌ ๋ด„์„ฑ ๋ด„์†Œ ๋ด„์†” ๋ด„์†œ ๋ด„์†ก ๋ด„์ˆ˜ ๋ด„์‹œ ๋ด„์‹  ๋ด„์‹ค ๋ด„์‹ฌ ๋ด„์•„ ๋ด„์•ˆ ๋ด„์•  ๋ด„์–‘ ๋ด„์—ฌ ๋ด„์—ฐ ๋ด„์˜ˆ ๋ด„์˜จ ๋ด„์š” ๋ด„์šฐ ๋ด„์›” ๋ด„์œ  ๋ด„์œค ๋ด„์œจ ๋ด„์€ ๋ด„์ด ๋ด„์ผ ๋ด„์ž„ ๋ด„์ • ๋ด„์ฐจ ๋ด„์ฐฝ ๋ด„์ฑ„ ๋ด„์ฒœ ๋ด„์ฒญ ๋ด„์ดˆ ๋ด„์ด ๋ด„ํ‘œ ๋ด„ํ•˜ ๋ด„ํ•œ ๋ด„ํ•ด ๋ด„ํ–ฅ ๋ด„ํ˜„ ๋ด„ํ˜ผ ๋ด„ํ™ ๋ด„ํ™” ๋ด„ํšจ ๋ด„๋‚จ ๋ด„๋ˆˆ ๋ด„๋‹ฌ ๋ด„๋น„ ๋ด„์Šฌ ๋ด„์—ด ๋ด„์˜ ๋ด„์ž ๋ด„ํƒœ ๋ด„ํ˜œ ๋น„๋‚˜ ๋น„๋‹จ ๋น„๋‹ด ๋น„๋ชจ ๋น„์„  ๋น„์„ค ๋น„์„ฑ ๋น„์†Œ ๋น„์†” ๋น„์†œ ๋น„์–‘ ๋น„์—ฐ ๋น„์›” ๋น„์œค ๋น„์€ ๋น„ํ–ฅ ๋น„ํ˜„ ๋น„ํ™” ๋น„๋ˆˆ ๋น„๋ด„ ์Šฌ์œค ์Šฌ์œจ ์Šฌํ–ฅ ์Šฌํ˜„ ์Šฌํ™” ์Šฌํšจ ์Šฌ๋น„ ์—ด์ƒ ์—ด์„  ์—ด์„ค ์—ด์„ฑ ์—ด์†” ์—ด์†œ ์—ด์ • ์—ด์ฒญ ์—ด์ดˆ ์—ด์ด ์—ดํ–ฅ ์—ด๋ˆˆ ์—ด๋‹ฌ ์—ด๋ด„ ์˜๋‹จ ์˜๋‹ด ์˜๋„ ์˜๋ž˜ ์˜๋ฅ˜ ์˜๋ชจ ์˜๋ฏธ ์˜์‚ฌ ์˜์‚ฐ ์˜์„œ ์˜์„  ์˜์„ค ์˜์†Œ ์˜์†” ์˜์†œ ์˜์†ก ์˜์‹  ์˜์‹ค ์˜์‹ฌ ์˜์•ˆ ์˜์•  ์˜์–‘ ์˜์—ฐ ์˜์˜ˆ ์˜์˜ค ์˜์š” ์˜์šฐ ์˜์›” ์˜์œ  ์˜์œค ์˜์œจ ์˜์€ ์˜์ด ์˜์ผ ์˜์ž„ ์˜์ฑ„ ์˜์ฒœ ์˜์ฒจ ์˜์ฒญ ์˜์ดˆ ์˜์ด ์˜ํ‘œ ์˜ํ•˜ ์˜ํ•œ ์˜ํ•ด ์˜ํ˜„ ์˜ํ™ ์˜ํšจ ์˜๋ด„ ์˜๋น„ ์˜ํ˜œ ์ž์ƒ ์ž์„  ์ž์†” ์ž์—ฐ ์ž์›” ์ž์œ  ์ž์œค ์ž์œจ ์ž์€ ์ž์ด ์ž์ผ ์ž์ • ์žํ˜„ ์žํ™ ์ž์˜ ํƒœ์„  ํƒœ์„ค ํƒœ์—ฐ ํƒœ์œค ํƒœ์œจ ํƒœ์€ ํƒœ์ • ํƒœํ˜„ ํƒœํ™” ํ˜œ๋‹ด ํ˜œ๋„ ํ˜œ๋ฅ˜ ํ˜œ๋ฆฌ ํ˜œ๋ชจ ํ˜œ๋ฌด ํ˜œ๋ฏธ ํ˜œ๋ฏผ ํ˜œ์‚ฌ ํ˜œ์‚ฐ ํ˜œ์ƒ ํ˜œ์ƒˆ ํ˜œ์ƒ ํ˜œ์„œ ํ˜œ์„  ํ˜œ์„ค ํ˜œ์„ฌ ํ˜œ์„ฑ ํ˜œ์†Œ ํ˜œ์†” ํ˜œ์†œ ํ˜œ์†ก ํ˜œ์ˆ˜ ํ˜œ์‹œ ํ˜œ์‹  ํ˜œ์‹ค ํ˜œ์‹ฌ ํ˜œ์•„ ํ˜œ์–‘ ํ˜œ์—ฐ ํ˜œ์šฐ ํ˜œ์›” ํ˜œ์œค ํ˜œ์œจ ํ˜œ์€ ํ˜œ์ผ ํ˜œ์ž„ ํ˜œ์ • ํ˜œ์ฐจ ํ˜œ์ฐฝ ํ˜œ์ฒœ ํ˜œ์ฒจ ํ˜œ์ฒญ ํ˜œ์ดˆ ํ˜œ์ด ํ˜œํ‘œ ํ˜œํ•œ ํ˜œํ–ฅ ํ˜œํ˜„ ํ˜œํ˜ผ ํ˜œํ™” ํ˜œ๋‚จ ํ˜œ๋ˆˆ ํ˜œ๋‹ฌ ํ˜œ์Šฌ ํ˜œ์—ด \ No newline at end of file diff --git a/packages/mugunghwa/sources/84_negative_words.txt b/packages/mugunghwa/sources/84_negative_words.txt deleted file mode 100644 index 985d40d..0000000 --- a/packages/mugunghwa/sources/84_negative_words.txt +++ /dev/null @@ -1 +0,0 @@ -๋‚˜๋‚˜ ๋‚˜๋‚œ ๋‚˜๋‚ด ๋‚˜๋‹ค ๋‚˜๋„ ๋‚œ์ž„ ๋‚˜๋ฌด ๋‚˜์„œ ๋‚˜์„ค ๋‚˜์„ฌ ๋‚˜์‹œ ๋‚˜์—ฌ ๋‚˜์œ  ๋‚˜์ด ๋‚˜์ž„ ๋‚˜์ฑ„ ๋‚˜์ดˆ ๋‚˜์ด ๋‚œ๋‚œ ๋‚œ๋‚ด ๋‚œ๋‹ค ๋‚œ๋ฅ˜ ๋‚œ๋ฆฌ ๋‚œ๋ฌด ๋‚œ๋ฏผ ๋‚œ์ƒ ๋‚œ์ƒ ๋‚œ์†Œ ๋‚œ์ฒญ ๋‚œํ•ด ๋‚ด๋‚˜ ๋‚ด๋‚œ ๋‚ด๋‹ค ๋‚ด๋„ ๋‚ด๋ผ ๋‚ด๋ž˜ ๋‚ด๋ฆฌ ๋‚ด๋ฏธ ๋‚ด๋ฏผ ๋‚ด์ƒ ๋‚ด์‹œ ๋‚ด์‹  ๋‚ด์‹ฌ ๋‚ด์—ฐ ๋‚ด์š” ๋‚ด์šฐ ๋‚ด์œ  ๋‚ด์ • ๋‚ดํ•œ ๋‹ค๋‹ค ๋‹ค๋ฆฌ ๋‹ค์‹  ๋‹ค์˜ค ๋‹ค์ด ๋‹คํ•œ ๋‹คํ•ด ๋‹จ์„œ ๋‹จ์ˆ˜ ๋‹จ์‹  ๋‹จ์‹ฌ ๋‹จ์—ฐ ๋‹จ์ผ ๋‹ด๋‹ค ๋‹ด์•„ ๋‹ด์ž„ ๋„๋‚œ ๋„๋„ ๋„๋ผ ๋„๋ž˜ ๋„๋ชจ ๋„๋ฏธ ๋„๋ฏผ ๋„์‚ฐ ๋„์„ฑ ๋„์‹œ ๋„์‹ฌ ๋„์ฒญ ๋„ํ‘œ ๋ผ๋‚ด ๋ผ๋„ ๋ผ๋ผ ๋ผ์˜จ ๋ผ์š” ๋ผ์œ  ๋ž˜๋ž˜ ๋ฅ˜๋ฅ˜ ๋ฆฌ๋‚ด ๋ฆฌ๋ž˜ ๋ฆฌ๋ฆฌ ๋ฆฌ์‹  ๋ชจ๋‚œ ๋ชจ๋ผ ๋ชจ์‚ฌ ๋ชจ์‹œ ๋ชจ์‹  ๋ชจ์‹ค ๋ชจ์‹ฌ ๋ชจ์•„ ๋ชจ์—ฌ ๋ชจ์œ  ๋ชจ์ด ๋ชจ์ž„ ๋ชจ์ • ๋ฌด๋‚˜ ๋ฌด๋‚ด ๋ฌด๋„ ๋ฌด๋ฆฌ ๋ฌด๋ชจ ๋ฌด์‚ฌ ๋ฌด์„  ๋ฌด์‹œ ๋ฌด์‹  ๋ฌด์‹ฌ ๋ฌด์•ˆ ๋ฌด์—ฐ ๋ฌด์˜ˆ ๋ฌด์šฐ ๋ฌด์ž„ ๋ฌด์ • ๋ฌดํ•œ ๋ฌดํ•ด ๋ฌดํ˜„ ๋ฌดํšจ ๋ฏธ๋‹ด ๋ฏธ๋ผ ๋ฏธ๋ฆฌ ๋ฏธ๋ชจ ๋ฏธ์ƒ ๋ฏธ์‹œ ๋ฏธ์‹  ๋ฏธ์‹ฌ ๋ฏธ์•„ ๋ฏธ์•ˆ ๋ฏธ์ฒœ ๋ฏธํ˜ผ ๋ฏธํ™” ๋ฏผ๋‚ด ๋ฏผ๋‹ค ๋ฏผ๋‹ด ๋ฏผ์‚ฌ ๋ฏผ์ƒ ๋ฏผ์‹ฌ ๋ฏผ์š” ๋ฏผํ™” ์‚ฌ๋‚˜ ์‚ฌ๋‚ด ์‚ฌ๋‹ค ์‚ฌ๋‹จ ์‚ฌ๋„ ์‚ฌ๋ผ ์‚ฌ๋ž˜ ์‚ฌ๋ฆฌ ์‚ฌ๋ชจ ์‚ฌ์ƒ ์‚ฌ์„  ์‚ฌ์„ค ์‚ฌ์†Œ ์‚ฌ์‹œ ์‚ฌ์‹  ์‚ฌ์—ฌ ์ƒ์š” ์‚ฌ์ž„ ์‚ฌ์ • ์‚ฌ์ฐฝ ์‚ฌ์ฑ„ ์‚ฌํ‘œ ์‚ฌํ•ด ์‚ฐ๋‹ค ์‚ฐ๋ชจ ์‚ฐ์„ฑ ์ƒ๋‚œ ์ƒ๋‹ด ์ƒ์‚ฌ ์ƒ์„  ์ƒ์†Œ ์ƒ์ˆ˜ ์ƒ์‹œ ์ƒ์‹ค ์ƒ์‹ฌ ์ƒ์ • ์ƒํ‘œ ์ƒํ•œ ์ƒˆ๋‚˜ ์ƒˆ๋‚ด ์ƒˆ๋‹ค ์ƒˆ๋ผ ์ƒˆ๋ž˜ ์ƒˆ๋ฆฌ ์ƒˆ์šฐ ์ƒ๋ฆฌ ์ƒ๋ชจ ์ƒ์‚ฌ ์ƒ์‚ฐ ์ƒ์„  ์ƒ์„ฑ ์ƒ์†Œ ์ƒ์ˆ˜ ์ƒ์‹  ์ƒ์•  ์ƒ์ผ ์„œ๋‚˜ ์„œ๋‚ด ์„œ๋‹ค ์„œ๋„ ์„œ๋ผ ์„œ๋ž˜ ์„œ์–‘ ์„œ์˜ˆ ์„œ์š” ์„œ์œ  ์„ ๋‚˜ ์„ ๋‚ด ์„ ๋‹ค ์„ ์ƒ ์„ ์ • ์„ค๋ž˜ ์„ค๋ฆฌ ์„ค์‚ฌ ์„ค์ƒ ์„ค์ • ์„ฑ๋‚œ ์„ฑ๋ชจ ์„ฑ์„œ ์„ฑ์†Œ ์„ฑ์•  ์„ฑ์šฐ ์„ฑํ•œ ์„ฑํ–ฅ ์†Œ๋ฆฌ ์†Œ๋ชจ ์†Œ์„ค ์†Œ์†ก ์†Œ์‹ค ์†Œ์‹ฌ ์†Œ์•„ ์†Œ์˜ค ์†Œ์˜จ ์†Œ์š” ์†Œ์œ  ์†Œ์ด ์†”๋ผ ์ˆ˜๋‚œ ์ˆ˜๋‹ค ์ˆ˜๋‹จ ์ˆ˜๋ผ ์ˆ˜๋ž˜ ์ˆ˜๋ฆฌ ์ˆ˜๋ชจ ์ˆ˜์‚ฌ ์ˆ˜์‚ฐ ์ˆ˜์ƒ ์ˆ˜์ƒ ์ˆ˜์†Œ ์ˆ˜์†ก ์ˆ˜์ˆ˜ ์ˆ˜์‹œ ์ˆ˜์–‘ ์ˆ˜์˜จ ์ˆ˜์›” ์ˆ˜์œ  ์ˆ˜์€ ์ˆ˜์ฒญ ์ˆ˜ํ‘œ ์ˆ˜ํ•˜ ์ˆ˜ํ•ด ์‹œ๋‹ค ์‹œ๋ฏผ ์‹œ์„  ์‹œ์„ค ์‹œ์‹  ์‹œ์ฐฝ ์‹œ์ฑ„ ์‹œํ•ด ์‹ ๋‚˜ ์‹ ๋ฏผ ์‹ ์ƒ ์‹ ์ƒ ์‹ ์„  ์‹ ์„ฑ ์‹ ํ•˜ ์‹ ํ™” ์‹ค๋‚ด ์‹ค๋ž˜ ์‹ค์‚ฌ ์‹ค์ƒ ์‹ค์„ฑ ์‹ค์†Œ ์‹ค์ˆ˜ ์‹ค์‹  ์‹ค์—ฐ ์‹ค์€ ์‹ฌ๋‚œ ์‹ฌ๋‹ค ์‹ฌ๋ฆฌ ์‹ฌ์‚ฐ ์‹ฌ์ƒ ์‹ฌ์‹  ์‹ฌ์•ˆ ์‹ฌ์—ฐ ์‹ฌํ•œ ์‹ฌํ•ด ์‹ฌํ™” ์•„๋‚˜ ์•„๋‚ด ์•„๋‹ค ์•„๋‹ด ์•„์–‘ ์•„์—ฐ ์•„์˜ˆ ์•„์˜ค ์•„์šฐ ์•„์œ  ์•„์ด ์•„์ฐจ ์•„์ฒญ ์•„ํ•˜ ์•„ํ•ด ์•„ํ™ ์•„ํšจ ์•ˆ๋‹ค ์•ˆ๋ฌด ์•ˆ๋ฏธ ์•ˆ์‚ฌ ์•ˆ์‚ฐ ์•ˆ์ƒ ์•ˆ์‹ฌ ์•ˆ์•„ ์•ˆ์ด ์• ๋„ ์• ๋ฌด ์• ๋ฏธ ์• ์†ก ์• ์ด ์• ์ • ์• ์ฐฝ ์• ์ดˆ ์–‘๋ฏผ ์–‘์‹ฌ ์—ฌ๋‚œ ์—ฌ๋‚ด ์—ฌ๋‹จ ์—ฌ๋‹ด ์—ฌ๋ฏธ ์—ฌ์‚ฌ ์—ฌ์‹œ ์—ฌ์‹  ์—ฌ์‹ฌ ์—ฌ์•„ ์—ฌ์šฐ ์—ฌ์œ  ์—ฌ์ฐฝ ์—ฌํ‘œ ์—ฌํ•œ ์—ฐ๋‹ค ์—ฐ๋ฏผ ์—ฐ์‚ฌ ์—ฐ์ƒ ์—ฐ์•  ์—ฐ์˜ˆ ์—ฐ์ž„ ์—ฐํ•˜ ์—ฐํ•œ ์˜ˆ๋‹ค ์˜ˆ๋ผ ์˜ˆ๋ž˜ ์˜ˆ์—ฌ ์˜ˆ์ด ์˜ค๋‚œ ์˜ค๋‚ด ์˜ค๋‹ค ์˜ค๋ผ ์˜ค๋ž˜ ์˜ค๋ฅ˜ ์˜ค๋ฆฌ ์˜ค์‚ฐ ์˜ค์ˆ˜ ์˜ค์‹ฌ ์˜ค์˜ˆ ์˜ค์˜ค ์˜ค์šฐ ์˜ค์œ  ์˜ค์ด ์˜ค์ผ ์˜ค์ • ์˜ค์ฐจ ์˜คํ•œ ์˜คํ•ด ์˜จ๋‚˜ ์˜จ๋‚ด ์˜จ๋‹ค ์š”๋ฆฌ ์š”๋ฌด ์š”๋ฏธ ์š”๋ฏผ ์š”์ƒˆ ์š”์„ค ์š”์†Œ ์š”์‹œ ์š”์‹ค ์š”์–‘ ์š”ํ•œ ์š”ํšจ ์šฐ๋‚˜ ์šฐ๋‚ด ์šฐ๋‹ค ์šฐ๋ผ ์šฐ๋ฆฌ ์šฐ๋ฏผ ์šฐ์ƒ ์šฐ์‹œ ์šฐ์•„ ์šฐ์•  ์šฐ์—ฐ ์šฐ์˜ค ์šฐ์›” ์šฐ์œ  ์šฐํ‘œ ์šฐํ™ ์šฐํ™” ์œ ๋‚œ ์œ ๋‹ค ์œ ๋ฅ˜ ์œ ๋ชจ ์œ ๋ฌด ์œ ์‚ฌ ์œ ์‚ฐ ์œ ์„œ ์œ ์‹  ์œ ์‹ค ์œ ์•„ ์œ ์—ฐ ์œ ์˜ˆ ์œ ์ฐฝ ์œ ํ•ด ์œ ํ™ ์œจ๋‚˜ ์œจ๋‚ด ์œจ๋‹ค ์œจ์‚ฌ ์œจ์€ ์€๋‚˜ ์€๋‚œ ์€๋‚ด ์€๋‹ค ์€๋ชจ ์€์‹  ์€์—ฐ ์ด๋‚˜ ์ด๋‚œ ์ด๋‚ด ์ด๋‹ค ์ด๋‹จ ์ด๋ž˜ ์ด๋ฆฌ ์ด๋ฏธ ์ด๋ฏผ ์ด์ƒˆ ์ด์ƒ ์ด์„ฑ ์ด์•  ์ด์–‘ ์ด์—ฌ ์ด์˜จ ์ด์š” ์ด์œ  ์ด์œค ์ดํ•˜ ์ดํ˜ผ ์ผ๋ฅ˜ ์ผ๋ฆฌ ์ผ์ƒ ์ž„์ƒ ์ž„์‹œ ์ž„์‹  ์ •๋ฆฌ ์ •๋ชจ ์ •์‚ฌ ์ •์„œ ์ •์‹œ ์ •์‹  ์ •์•  ์ฐจ๋‚ด ์ฐจ๋‹ค ์ฐจ๋‹จ ์ฐจ๋ผ ์ฐจ๋ž˜ ์ฐจ์•ˆ ์ฐจ์—ฌ ์ฐจ์š” ์ฐจ์œ  ์ฐจ์ด ์ฐจ์ž„ ์ฑ„๋‚ด ์ฑ„๋ฅ˜ ์ฑ„๋ฌด ์ฒœ๋‚ด ์ฒœ๋ฏผ ์ฒœ์‚ฌ ์ฒœ์‹œ ์ฒœํ•˜ ์ฒœํ•œ ์ฒœํ•ด ์ฒจ๋‹จ ์ฒญ์†Œ ์ดˆ๋ผ ์ดˆ๋ž˜ ์ดˆ์ƒ ์ด์ƒ ์ด์„ฑ ํ‘œ๋ฅ˜ ํ‘œ์ƒ ํ‘œ์‹œ ํ‘œ์ • ํ‘œ์ฐฝ ํ‘œํ˜„ ํ‘œํšจ ํ•˜๋‹ค ํ•˜๋ผ ํ•˜๋ž˜ ํ•˜๋ฅ˜ ํ•˜๋ฌด ํ•˜์‚ฌ ํ•˜์ˆ˜ ํ•˜์‹ฌ ํ•˜์•„ ํ•˜์–‘ ํ•˜์—ฌ ํ•˜์˜ค ํ•˜์ด ํ•˜์ผ ํ•˜์ฐจ ํ•˜์ฒญ ํ•˜ํ–ฅ ํ•œ๋‹ค ํ•œ๋ฅ˜ ํ•œ์‹ฌ ํ•œ์•ˆ ํ•œ์ • ํ•œ์ฐฝ ํ•ด๋‚ด ํ•ด๋„ ํ•ด๋ผ ํ•ด์‚ฐ ํ•ด์„œ ํ•ด์„  ํ•ด์„ค ํ•ด์†Œ ํ•ด์—ฌ ํ•ด์˜ˆ ํ•ด์š” ํ•ด์œ  ํ•ด์ด ํ•ด์ž„ ํ•ด์ฑ„ ํ˜„์ƒ ํ˜„์ƒˆ ํ˜„์ƒ ํ˜ผ๋‚œ ํ˜ผ๋‚ด ํ˜ผ๋‹ด ํ˜ผ๋ฏธ ํ˜ผ์„ฑ ํ˜ผ์‹  ํ˜ผ์‹ฌ ํ˜ผํ˜ผ ํ™์ˆ˜ ํ™์ด ํ™”๋‚˜ ํ™”๋‚œ ํ™”๋‚ด ํ™”๋‹ค ํ™”๋ผ ํ™”๋ฅ˜ ํ™”์ƒ ํ™”์†Œ ํ™”์‹  ํ™”์‹ฌ ํ™”ํ•˜ ํ™”ํ•œ ํšจ๋„ ํšจ๋ชจ ํšจ์‹ฌ ํšจํšจ ๋‚จ๋‹ค ๋‚จ์„ฑ ๋‚จ์‹  ๋‚จ์‹ฌ ๋‚จ์•„ ๋‚จ์ฐฝ ๋ˆˆ๋‚˜ ๋ˆˆ๋‚œ ๋ˆˆ๋‚ด ๋ˆˆ๋‹ค ๋ˆˆ๋ฏผ ๋ˆˆ์ด ๋‹ฌ๋‹ค ๋‹ฌ๋„ ๋‹ฌ๋ผ ๋‹ฌ๋ž˜ ๋‹น๋„ ๋‹น์ˆ˜ ๋‹น์‹œ ๋‹น์‹  ๋‹น์—ฐ ๋‹นํ•˜ ๋‹นํ•œ ๋‹นํ•ด ๋น„๋‚œ ๋น„๋‚ด ๋น„๋ฆฌ ๋น„์ƒ ๋น„์„œ ๋น„์„ฌ ๋น„์ˆ˜ ๋น„์‹ค ๋น„์œ  ๋น„์œจ ๋น„์ด ๋น„์ผ ๋น„์ • ๋น„์ฒœ ๋น„ํ•˜ ์Šฌ์ฐฝ ์—ด๋‚˜ ์—ด๋‚œ ์—ด๋‹ค ์—ด๋„ ์—ด๋ผ ์—ด๋ž˜ ์—ด๋ฌด ์—ด์‚ฌ ์—ด์„ฌ ์—ด์‹ฌ ์—ด์•  ์˜๋ฆฌ ์˜์ƒ ์˜์ƒ ์˜์„ฑ ์˜์•„ ์˜์˜จ ์˜์ • ์˜์ฐจ ์˜์ฐฝ ์˜ํ–ฅ ์˜ํ˜ผ ์˜ํ™” ์ž๋‚˜ ์ž๋‚ด ์ž๋‹ค ์ž๋„ ์ž๋ผ ์ž๋ž˜ ์ž๋ฆฌ ์ž๋ฏธ ์ž๋ฏผ ์ž์‚ฐ ์ž์ƒ ์ž์„ฑ ์ž์ˆ˜ ์ž์‹  ์ž์•„ ์ž์•  ์ž์š” ์žํ•ด ํƒœ๋‚ด ํƒœ๋‹ค ํƒœ๋„ ํƒœ๋ผ ํƒœ๋ž˜ ํƒœ๋ฆฌ ํƒœ๋ฌด ํƒœ๋ฏผ ํƒœ์ƒ ํƒœ์„œ ํƒœ์‹œ ํƒœ์•„ ํƒœ์•  ํƒœ์–‘ ํƒœ์ž„ ํƒœ์ดˆ ํƒœํ•ด ํ˜œ์•ˆ ์ฐจ๋น„ ์‚ฌ์ž ๋ฅ˜๋‚˜ ๋ฅ˜๋‚œ ๋ฅ˜๋‚ด ๋ฅ˜๋‹ค ๋ฅ˜๋‹จ ๋ฅ˜๋‹ด ๋ฅ˜๋„ ๋ฅ˜๋ผ ๋ฅ˜๋ž˜ ๋ฅ˜๋ฆฌ ๋ฅ˜๋ชจ ๋ฅ˜๋ฌด ๋ฅ˜๋ฏธ ๋ฅ˜๋ฏผ ๋ฅ˜์‚ฌ ๋ฅ˜์‚ฐ ๋ฅ˜์ƒ ๋ฅ˜์ƒˆ ๋ฅ˜์ƒ ๋ฅ˜์„œ ๋ฅ˜์„ค ๋ฅ˜์„ฌ ๋ฅ˜์„ฑ ๋ฅ˜์†Œ ๋ฅ˜์†” ๋ฅ˜์†œ ๋ฅ˜์†ก ๋ฅ˜์ˆ˜ ๋ฅ˜์‹œ ๋ฅ˜์‹  ๋ฅ˜์‹ค ๋ฅ˜์‹ฌ ๋ฅ˜์•„ ๋ฅ˜์•ˆ ๋ฅ˜์•  ๋ฅ˜์–‘ ๋ฅ˜์—ฌ ๋ฅ˜์—ฐ ๋ฅ˜์˜ˆ ๋ฅ˜์˜ค ๋ฅ˜์˜จ ๋ฅ˜์š” ๋ฅ˜์šฐ ๋ฅ˜์›” ๋ฅ˜์œ  ๋ฅ˜์œค ๋ฅ˜์œจ ๋ฅ˜์€ ๋ฅ˜์ด ๋ฅ˜์ผ ๋ฅ˜์ž„ ๋ฅ˜์ • ๋ฅ˜์ฐจ ๋ฅ˜์ฐฝ ๋ฅ˜์ฑ„ ๋ฅ˜์ฒœ ๋ฅ˜์ฒจ ๋ฅ˜์ฒญ ๋ฅ˜์ดˆ ๋ฅ˜์ด ๋ฅ˜ํ‘œ ๋ฅ˜ํ•˜ ๋ฅ˜ํ•œ ๋ฅ˜ํ•ด ๋ฅ˜ํ–ฅ ๋ฅ˜ํ˜„ ๋ฅ˜ํ˜ผ ๋ฅ˜ํ™ ๋ฅ˜ํ™” ๋ฅ˜ํšจ ๋ฅ˜๋‚จ ๋ฅ˜๋ˆˆ ๋ฅ˜๋‹ฌ ๋ฅ˜๋‹น ๋ฅ˜๋ด„ ๋ฅ˜๋น„ ๋ฅ˜์Šฌ ๋ฅ˜์—ด ๋ฅ˜์˜ ๋ฅ˜์ž ๋ฅ˜ํƒœ ๋ฅ˜ํ˜œ ์ˆ˜์Šฌ ์ˆ˜๋น„ ํ™”๋‚จ ํ™”์‚ฐ ๋ผ์†” ๋ผ์†œ ๋ผ์†ก ๋ผ์ˆ˜ ๋ผ์‹œ ๋ผ์‹  ๋ผ์‹ค ๋ผ์‹ฌ ๋ผ์•„ ๋ผ์•ˆ ๋ผ์•  ๋ผ์—ฌ ๋ผ์˜ˆ ๋ผ์˜ค ๋ผ์šฐ ๋ผ์ด ๋ผ์ผ ๋ผ์ž„ ๋ผ์ฐจ ๋ผ์ฐฝ ๋ผ์ฑ„ ๋ผ์ฒœ ๋ผ์ฒจ ๋ผ์ฒญ ๋ผ์ดˆ ๋ผ์ด ๋ผํ‘œ ๋ผํ•˜ ๋ผํ•ด ๋ผํ–ฅ ๋ผํ˜ผ ๋ผํ™ ๋ผํšจ ๋ผ๋‚จ ๋ผ๋ˆˆ ๋ผ๋‹ฌ ๋ผ๋‹น ๋ผ๋ด„ ๋ผ๋น„ ๋ผ์Šฌ ๋ผ์—ด ๋ผ์˜ ๋ผ์ž ๋ผํƒœ ๋ผํ˜œ ์ดํ™ ๋‚จ์ผ ๋‚จ์ดˆ ํ˜œํ˜œ ํ•ด์‚ฌ ํ•ด์ƒˆ ํ•ด์‹  ํ•ด์•„ ํ•ด์•  ํ•ดํ•˜ ํ•ดํ•ด ํ•ดํ˜œ ํ˜„๋‚œ ํ˜„๋‚ด ๋ฏธ๋ฏธ ์‚ฌ์‚ฌ ๋‚ด๋‚ด ๋‹จ๋‹จ ๋‹ด๋‹ด ๋„๋„ ๋ผ๋ผ ๋ž˜๋ž˜ ๋ฅ˜๋ฅ˜ ๋ฆฌ๋ฆฌ ๋ชจ๋ชจ ๋ฌด๋ฌด ๋ฏธ๋ฏธ ๋ฏผ๋ฏผ ์‚ฐ์‚ฐ ์ƒ์ƒ ์ƒˆ์ƒˆ ์ƒ์ƒ ์„œ์„œ ์„ ์„  ์„ค์„ค ์„ฌ์„ฌ ์„ฑ์„ฑ ์†Œ์†Œ ์†”์†” ์†œ์†œ ์†ก์†ก ์ˆ˜์ˆ˜ ์‹œ์‹œ ์‹ ์‹  ์‹ค์‹ค ์‹ฌ์‹ฌ ์•„์•„ ์•ˆ์•ˆ ์• ์•  ์–‘์–‘ ์—ฌ์—ฌ ์—ฐ์—ฐ ์˜ˆ์˜ˆ ์˜ค์˜ค ์˜จ์˜จ ์š”์š” ์šฐ์šฐ ์›”์›” ์œ ์œ  ์œค์œค ์œจ์œจ ์€์€ ์ด์ด ์ผ์ผ ์ž„์ž„ ์ •์ • ์ฐจ์ฐจ ์ฐฝ์ฐฝ ์ฑ„์ฑ„ ์ฒœ์ฒœ ์ฒจ์ฒจ ์ฒญ์ฒญ ์ดˆ์ดˆ ์ด์ด ํ‘œํ‘œ ํ•˜ํ•˜ ํ•œํ•œ ํ•ดํ•ด ํ–ฅํ–ฅ ํ˜„ํ˜„ ํ˜ผํ˜ผ ํ™ํ™ ํ™”ํ™” ํšจํšจ ๋‚จ๋‚จ ๋ˆˆ๋ˆˆ ๋‹ฌ๋‹ฌ ๋‹น๋‹น ๋ด„๋ด„ ๋น„๋น„ ์Šฌ์Šฌ ์—ด์—ด ์˜์˜ ์ž์ž ํƒœํƒœ ํ˜œํ˜œ ์ฑ„๋‹ค ๋ฏผ๋ชจ ์‚ฌ์ƒˆ ์‚ฌ์„œ ์‚ฌ์–‘ ์‚ฌ์˜ค ์‚ฌ์˜จ ์‚ฌ์š” ์‚ฌ์šฐ ์‚ฌ๋น„ ์‚ฌ์Šฌ ๋ฌด๋ฏธ ๋ฌด์„ฑ ๋ฏธ๋‚ด ํ˜ผ์ž ํ˜ผ๋‚˜ ํšจ๋‚˜ ํšจ๋‚œ ํšจ๋‚ด ํšจ๋‹ค ํšจ์š” ํšจ์šฐ ๋‹จ์—ด ๋ชจ์–‘ ๋ชจ์š” ๋ชจ์ž ๋ชจํ•ด ๋ชจ๋‚จ ๋ฌด๋ž˜ ๋ฌด์‚ฐ ๋ฌด์ƒ ๋ฌด๋‹น ์ƒํ•ด ๋‹ฌ์ˆ˜ ๋‹ฌ์˜ˆ ๋‹ฌํ•œ ๋‹ฌํ•ด ๋‹ฌ์Šฌ ๋‹น๋‚˜ ๋‹น๋‚ด ๋‹น๋‹จ ๋‹น์ฐจ ํ•œ๋‹น ํ•ด์˜ค ํ•ด๋น„ ํ•ด๋ด„ ํ•ด์˜ ํ•˜์‹  ํ•˜์‹ค ์ผ์ž„ ์š”๋ž˜ ๋‚˜์ฐฝ ๋‚œ๋‹จ ๋‚œ์‚ฌ ๋‚œ์‹œ ๋ž˜๋‚˜ ๋ž˜๋‚œ ๋ž˜๋‚ด ๋ž˜๋‹ค ๋ž˜๋‹จ ๋ž˜๋„ ๋ž˜๋ผ ๋ž˜๋ฅ˜ ๋ž˜๋ฆฌ ๋ž˜๋ชจ ๋ž˜๋ฌด ๋ž˜๋ฏธ ๋ž˜๋ฏผ ๋ž˜์‚ฌ ๋ž˜์‚ฐ ๋ž˜์ƒ ๋ž˜์ƒˆ ๋ž˜์ƒ ๋ž˜์„œ ๋ž˜์„ค ๋ž˜์„ฌ ๋ž˜์„ฑ ๋ž˜์†Œ ๋ž˜์†” ๋ž˜์†ก ๋ž˜์ˆ˜ ๋ž˜์‹œ ๋ž˜์‹  ๋ž˜์‹ค ๋ž˜์‹ฌ ๋ž˜์•„ ๋ž˜์•ˆ ๋ž˜์•  ๋ž˜์–‘ ๋ž˜์—ฌ ๋ž˜์˜ˆ ๋ž˜์˜ค ๋ž˜์˜จ ๋ž˜์š” ๋ž˜์šฐ ๋ž˜์›” ๋ž˜์œ  ๋ž˜์œค ๋ž˜์œจ ๋ž˜์€ ๋ž˜์ด ๋ž˜์ผ ๋ž˜์ž„ ๋ž˜์ • ๋ž˜์ฐจ ๋ž˜์ฐฝ ๋ž˜์ฑ„ ๋ž˜์ฒœ ๋ž˜์ฒจ ๋ž˜์ฒญ ๋ž˜์ดˆ ๋ž˜์ด ๋ž˜ํ‘œ ๋ž˜ํ•˜ ๋ž˜ํ•œ ๋ž˜ํ•ด ๋ž˜ํ–ฅ ๋ž˜ํ˜„ ๋ž˜ํ˜ผ ๋ž˜ํ™ ๋ž˜ํ™” ๋ž˜ํšจ ๋ž˜๋‚จ ๋ž˜๋ˆˆ ๋ž˜๋‹ฌ ๋ž˜๋‹น ๋ž˜๋ด„ ๋ž˜๋น„ ๋ž˜์Šฌ ๋ž˜์—ด ๋ž˜์˜ ๋ž˜์ž ๋ž˜ํƒœ ๋ž˜ํ˜œ ๋ฆฌ๋‚˜ ๋ฆฌ๋‚œ ๋ฆฌ๋‹ค ๋ฆฌ๋‹จ ๋ฆฌ๋‹ด ๋ฆฌ๋„ ๋ฆฌ๋ผ ๋ฆฌ๋ฅ˜ ๋ฆฌ๋ชจ ๋ฆฌ๋ฌด ๋ฆฌ๋ฏธ ๋ฆฌ๋ฏผ ๋ฆฌ์‚ฌ ๋ฆฌ์‚ฐ ๋ฆฌ์ƒ ๋ฆฌ์ƒˆ ๋ฆฌ์ƒ ๋ฆฌ์„œ ๋ฆฌ์„ฌ ๋ฆฌ์„ฑ ๋ฆฌ์†Œ ๋ฆฌ์ˆ˜ ๋ฆฌ์‹œ ๋ฆฌ์‹ค ๋ฆฌ์‹ฌ ๋ฆฌ์•„ ๋ฆฌ์•ˆ ๋ฆฌ์•  ๋ฆฌ์–‘ ๋ฆฌ์—ฌ ๋ฆฌ์˜ˆ ๋ฆฌ์˜ค ๋ฆฌ์˜จ ๋ฆฌ์š” ๋ฆฌ์šฐ ๋ฆฌ์›” ๋ฆฌ์œ  ๋ฆฌ์œค ๋ฆฌ์œจ ๋ฆฌ์€ ๋ฆฌ์ด ๋ฆฌ์ผ ๋ฆฌ์ž„ ๋ฆฌ์ • ๋ฆฌ์ฐจ ๋ฆฌ์ฐฝ ๋ฆฌ์ฑ„ ๋ฆฌ์ฒœ ๋ฆฌ์ฒจ ๋ฆฌ์ฒญ ๋ฆฌ์ดˆ ๋ฆฌ์ด ๋ฆฌํ‘œ ๋ฆฌํ•˜ ๋ฆฌํ•œ ๋ฆฌํ•ด ๋ฆฌํ–ฅ ๋ฆฌํ˜„ ๋ฆฌํ˜ผ ๋ฆฌํ™ ๋ฆฌํ™” ๋ฆฌํšจ ๋ฆฌ๋‚จ ๋ฆฌ๋ˆˆ ๋ฆฌ๋‹ฌ ๋ฆฌ๋‹น ๋ฆฌ๋ด„ ๋ฆฌ๋น„ ๋ฆฌ์Šฌ ๋ฆฌ์—ด ๋ฆฌ์˜ ๋ฆฌ์ž ๋ฆฌํƒœ ๋ฆฌํ˜œ ์„ฌ๋‚จ ์„ฑ์ƒ ์†Œ๋น„ ์‹ ๋‚œ ์• ์ž ์•„๋‹น ์• ๋น„ ์—ฌ์„ฑ ์• ์ƒˆ ๋ด„์ฒจ ๋ˆˆ์˜จ ์• ๋‹ค ์• ๋ž˜ ์• ๋ชจ ์• ์†Œ ์• ํ•ด ์—ฌ์˜ˆ ์—ฐ๋น„ ์š”์ • ์šฐ์‹  ์ด์—ด ์ด์˜ ์ž„๋‚˜ ์ž„๋‚œ ์ž„๋‚ด ์ž„๋‹ค ์ž„๋‹จ ์ž„๋‹ด ์ž„๋„ ์ž„๋ผ ์ž„๋ž˜ ์ž„๋ฅ˜ ์ž„๋ฆฌ ์ž„๋ชจ ์ž„๋ฌด ์ž„๋ฏธ ์ž„๋ฏผ ์ž„์‚ฌ ์ž„์‚ฐ ์ž„์ƒˆ ์ž„์ƒ ์ž„์„œ ์ž„์„ฌ ์ž„์„ฑ ์ž„์†Œ ์ž„์†œ ์ž„์†ก ์ž„์ˆ˜ ์ž„์‹ฌ ์ž„์•„ ์ž„์•ˆ ์ž„์•  ์ž„์–‘ ์ž„์—ฌ ์ž„์—ฐ ์ž„์˜ˆ ์ž„์˜ค ์ž„์˜จ ์ž„์š” ์ž„์šฐ ์ž„์›” ์ž„์œ  ์ž„์œค ์ž„์œจ ์ž„์€ ์ž„์ด ์ž„์ฐจ ์ž„์ฐฝ ์ž„์ฒœ ์ž„์ฒจ ์ž„์ดˆ ์ž„์ด ์ž„ํ‘œ ์ž„ํ•˜ ์ž„ํ•œ ์ž„ํ–ฅ ์ž„ํ˜„ ์ž„ํ˜ผ ์ž„๋‚จ ์ž„๋ˆˆ ์ž„๋‹ฌ ์ž„๋‹น ์ž„๋ด„ ์ž„๋น„ ์ž„์Šฌ ์ž„์—ด ์ž„์˜ ์ž„์ž ์ž„ํƒœ ์ž„ํ˜œ ์Šฌ๋‚˜ ์Šฌ๋‚œ ์Šฌ๋‚ด ์Šฌ๋‚˜ ์Šฌ๋‚œ ์Šฌ๋‚ด ์Šฌ๋‹ค ์Šฌ๋‹จ ์Šฌ๋‹ด ์Šฌ๋„ ์Šฌ๋ผ ์Šฌ๋ž˜ ์Šฌ๋ฅ˜ ์Šฌ๋ฆฌ ์Šฌ๋ชจ ์Šฌ๋ฌด ์Šฌ๋ฏธ ์Šฌ๋ฏผ ์Šฌ์‚ฌ ์Šฌ์‚ฐ ์Šฌ์ƒ ์Šฌ์ƒˆ ์Šฌ์ƒ ์Šฌ์„œ ์Šฌ์„  ์Šฌ์„ค ์Šฌ์„ฌ ์Šฌ์„ฑ ์Šฌ์†Œ ์Šฌ์†” ์Šฌ์†œ ์Šฌ์†ก ์Šฌ์ˆ˜ ์Šฌ์‹œ ์Šฌ์‹  ์Šฌ์‹ค ์Šฌ์‹ฌ ์Šฌ์•„ ์Šฌ์•ˆ ์Šฌ์•  ์Šฌ์–‘ ์Šฌ์—ฌ ์Šฌ์—ฐ ์Šฌ์˜ˆ ์Šฌ์˜ค ์Šฌ์˜จ ์Šฌ์š” ์Šฌ์šฐ ์Šฌ์›” ์Šฌ์œ  ์Šฌ์€ ์Šฌ์ด ์Šฌ์ผ ์Šฌ์ž„ ์Šฌ์ • ์Šฌ์ฐจ ์Šฌ์ฑ„ ์Šฌ์ฒœ ์Šฌ์ฒจ ์Šฌ์ฒญ ์Šฌ์ดˆ ์Šฌ์ด ์Šฌํ‘œ ์Šฌํ•˜ ์Šฌํ•œ ์Šฌํ•ด ์Šฌํ˜ผ ์Šฌํ™ ์Šฌ๋‚จ ์Šฌ๋ˆˆ ์Šฌ๋‹ฌ ์Šฌ๋‹น ์Šฌ๋ด„ ์Šฌ์—ด ์Šฌ์˜ ์Šฌ์ž ์Šฌํƒœ ์Šฌํ˜œ ์—ด๋‚ด ์—ด๋‹จ ์—ด๋‹ด ์—ด๋ฅ˜ ์—ด๋ฆฌ ์—ด๋ชจ ์—ด๋ฏธ ์—ด๋ฏผ ์—ด์‚ฐ ์—ด์ƒ ์—ด์ƒˆ ์—ด์„œ ์—ด์†Œ ์—ด์†ก ์—ด์ˆ˜ ์—ด์‹œ ์—ด์‹  ์—ด์‹ค ์—ด์•„ ์—ด์•ˆ ์—ด์–‘ ์—ด์—ฌ ์—ด์—ฐ ์—ด์˜ˆ ์—ด์˜ค ์—ด์˜จ ์—ด์š” ์—ด์šฐ ์—ด์›” ์—ด์œ  ์—ด์œค ์—ด์œจ ์—ด์€ ์—ด์ด ์—ด์ผ ์—ด์ž„ ์—ด์ฐจ ์—ด์ฐฝ ์—ด์ฑ„ ์—ด์ฒœ ์—ด์ฒจ ์—ดํ‘œ ์—ดํ•˜ ์—ดํ•œ ์—ดํ•ด ์—ดํ˜„ ์—ดํ˜ผ ์—ดํ™ ์—ดํšจ ์—ด๋‚จ ์—ด๋‹น ์—ด๋น„ ์—ด์Šฌ ์—ด์˜ ์—ด์ž ์—ดํƒœ ์—ดํ˜œ ์˜๋‚˜ ์˜๋‚œ ์˜๋‚ด ์˜๋‹ค ์˜๋ผ ์˜๋ฌด ์˜๋ฏผ ์˜์ƒˆ ์˜์„ฌ ๋ชจ์˜ˆ ์• ๋ผ ์•ˆ์ž ์•ˆํ˜œ ์• ๋‚˜ ์˜์ˆ˜ ์˜์‹œ ๋น„๋‹ค ๋น„๋„ ๋น„๋ผ ๋น„๋ž˜ ๋น„๋ฅ˜ ๋น„๋ฌด ๋น„๋ฏธ ๋น„๋ฏผ ๋น„์‚ฌ ๋น„์‚ฐ ๋น„์ƒˆ ๋น„์ƒ ๋น„์†ก ๋น„์‹œ ๋น„์‹  ๋น„์‹ฌ ๋น„์•„ ๋น„์•ˆ ๋น„์•  ๋น„์—ฌ ๋น„์˜ˆ ๋น„์˜ค ๋น„์˜จ ๋น„์š” ๋น„์šฐ ๋น„์ž„ ๋น„์ฐจ ๋น„์ฐฝ ๋น„์ฑ„ ๋น„์ฒจ ๋น„์ฒญ ๋น„์ดˆ ๋น„์ด ๋น„ํ‘œ ๋น„ํ•œ ๋น„ํ•ด ๋น„ํ˜ผ ๋น„ํ™ ๋น„ํšจ ๋น„๋‚จ ๋น„๋‹ฌ ๋น„๋‹น ๋น„์Šฌ ๋น„์—ด ๋น„์˜ ๋น„์ž ๋น„ํƒœ ๋น„ํ˜œ ์˜๋‚จ ์˜๋ˆˆ ์˜๋‹ฌ ์˜๋‹น ์˜์Šฌ ์˜์—ด ์˜์ž ์˜ํƒœ ์ž๋‚œ ์ž๋‹จ ์ž๋‹ด ์ž๋ฅ˜ ์ž๋ชจ ์ž๋ฌด ์ž์‚ฌ ์ž์ƒˆ ์ž์„œ ์ž์„ค ์ž์„ฌ ์ž์†Œ ์ž์†œ ์ž์†ก ์ž์‹œ ์ž์‹ค ์ž์‹ฌ ์ž์•ˆ ์ž์–‘ ์ž์—ฌ ์ž์˜ˆ ์ž์˜ค ์ž์˜จ ์ž์šฐ ์ž์ž„ ์ž์ฐจ ์ž์ฐฝ ์ž์ฑ„ ์ž์ฒœ ์ž์ฒจ ์ž์ฒญ ์ž์ดˆ ์ž์ด ์žํ‘œ ์žํ•˜ ์žํ•œ ์žํ–ฅ ์žํ˜ผ ์žํ™” ์žํšจ ์ž๋‚จ ์ž๋ˆˆ ์ž๋‹ฌ ์ž๋‹น ์ž๋ด„ ์ž๋น„ ์ž์Šฌ ์ž์—ด ์žํƒœ ์žํ˜œ ํƒœ๋‚˜ ํƒœ๋‚œ ํƒœ๋‹จ ํƒœ๋‹ด ํƒœ๋ฅ˜ ํƒœ๋ชจ ํƒœ๋ฏธ ํƒœ์‚ฌ ํƒœ์‚ฐ ํƒœ์ƒ ํƒœ์ƒˆ ํƒœ์„ฌ ํƒœ์„ฑ ํƒœ์†Œ ํƒœ์†” ํƒœ์†œ ํƒœ์†ก ํƒœ์ˆ˜ ํƒœ์‹  ํƒœ์‹ค ํƒœ์‹ฌ ํƒœ์•ˆ ํƒœ์—ฌ ํƒœ์˜ˆ ํƒœ์˜ค ํƒœ์˜จ ํƒœ์š” ํƒœ์šฐ ํƒœ์›” ํƒœ์œ  ํƒœ์ด ํƒœ์ผ ํƒœ์ฐจ ํƒœ์ฐฝ ํƒœ์ฑ„ ํƒœ์ฒœ ํƒœ์ฒจ ํƒœ์ฒญ ํƒœ์ด ํƒœํ‘œ ํƒœํ•˜ ํƒœํ•œ ํƒœํ–ฅ ํƒœํ˜ผ ํƒœํ™ ํƒœํšจ ํƒœ๋‚จ ํƒœ๋ˆˆ ํƒœ๋‹ฌ ํƒœ๋‹น ํƒœ๋ด„ ํƒœ๋น„ ํƒœ์Šฌ ํƒœ์—ด ํƒœ์˜ ํƒœ์ž ํƒœํ˜œ ํ˜œ๋‚˜ ํ˜œ๋‚œ ํ˜œ๋‚ด ํ˜œ๋‹ค ํ˜œ๋‹จ ํ˜œ์—ฌ ํ˜œ์˜ˆ ํ˜œ๋‹น ํ˜œ๋ด„ ํ˜œ๋น„ ํ˜œ์ด ํ˜œํ•ด ํ˜œํƒœ ๋‚˜์˜ค ๋‚˜๋ฏธ ๋‚œ๋‹น ๋‚œ์ž ๋‹ค๋‚ด ๋‹ดํƒœ ๋„ํƒœ ๋ฌด๋‹ค ๋‹ด๋‚ด ๋ฌด๋น„ ๋ฏธ์ˆ˜ ๋ฏธ์ด ๋ฏธ๋‹ฌ ๋ฏธ๋น„ ๋ฏผ์˜จ ๋ฏผ์œ  ๋ฏผ๋‚จ ๋ฏผ๋น„ ์‚ฐ๋‹น ์ƒˆ๋ชจ ์ƒ์ƒˆ ์„œ๋ฏผ ์„ ๋น„ ์‹œ๋น„ ์‹ฌ์ƒˆ ์‹ฌ์ž ์• ์˜ˆ ์• ์˜ค ์˜ค์‹  ์˜ค์‹ค ์˜ค์•„ ๋ˆˆ์ฐฝ ๋ˆˆ์ž ๋‹ฌ๋‹จ ๋‹ฌ๋ฆฌ ๋‹ฌ๋ชจ ๋‹ฌ๋ฌด ๋‹ฌ๋ฏธ ๋‹ฌ๋ฏผ ๋‹ฌ์‹  ๋‹ฌ์—ฌ ๋‹ฌ์š” ๋‹ฌ์ž„ ๋‹ฌ์ฐฝ ๋‹ฌ๋‹น ๋‹น๋‹ค ๋‹น๋ฌด ๋‹น์œ  ๋‹น์ฒจ ๋‹น๋‚จ ๋‹น์Šฌ ๋‹น์ž ๋‹นํƒœ ๋‹นํ˜œ ๋ด„๋ชจ ์—ดํ™” ์˜์—ฌ ํ˜œ๋ผ ํ˜œ๋ž˜ ํ˜œ์•  ํ˜œ์˜ค ํ˜œ์˜จ ํ˜œ์š” ํ˜œ์œ  ํ˜œํ•˜ ํ˜œํšจ ํ˜œ์˜ ํ˜œ์ž ์ด๋ฅ˜ ์ด๋ชจ ์ผํ•ด ์ฑ„ํƒœ ํ•˜์šฐ ํ•˜์ฑ„ ํ•˜์ž ํ•œ์˜ค ํ•œ์šฐ ํ•œ๋‚จ ํ•ดํƒœ ํ–ฅ๋‚ด ๋‚˜์•„ ๋‚˜ํƒœ ๋‚ด์˜ˆ ๋ชจ์•  ๋ชจ์˜ค ๋ชจ์˜จ ๋ชจ์šฐ ๋ชจ๋ด„ ๋ฏธ๋‚จ ์ƒˆ์•  ์„ ๋‹น ์†Œ์•  ์†Œ๋ˆˆ ์†”๋ฆฌ ์ˆ˜์šฐ ์‹œ๋‹น ์‹ ๋‚ด ์•„์‚ฌ ์•„๋น„ ์•ˆ์„œ ์•ˆ์„ค ์•ˆ์„ฌ ์•ˆ๋‹ฌ ์•ˆ๋‹น ์• ํ™ ์• ๋‹น ์• ๋ด„ ์—ฐ๋‹น ์˜ˆ๋ฌด ์˜ˆ์ˆ˜ ์˜ˆ์•„ ์˜ˆ์•  ์˜ˆํ™ ์˜ˆ์ž ์˜คํ™ ์˜ค๋‹น ์˜ค์—ด ์˜จ๋‹น ์š”๋‹ค ์š”๋„ ์š”๋ชจ ์š”์ƒ ์š”์˜ˆ ์š”์˜ค ์š”์˜จ ์š”ํ™ ์š”์ž ์š”ํƒœ ์œ ๋น„ ์ •์€ ์ •์ผ ์ •๋‚จ ์ •์ž ์ฒœ๋‚˜ ์ฒจ๋ด„ ์ด๋ด„ ํ•˜๋‚ด ํ•˜๋ฆฌ ํ•œํ™ ํ˜„ํ™ ํ˜„๋‹น ํ™์•„ ํ™์˜ค ํ™์šฐ ํ™๋‹น ํšจ์ด ํšจ๋‹น ๋‚จ๋‚˜ ๋‚จ๋‚œ ๋‚จ๋‚ด ๋‚จ๋ผ ๋‚จ์‹œ ๋‚จ์˜ค ๋‚จ์˜จ ๋‚จ์œ  ๋‚จ์€ ๋‚จ์ž„ ๋‚จ์ฒจ ๋‚จํ•˜ ๋‚จ๋ˆˆ ๋‚จ๋‹ฌ ๋‚จ์ž ๋ˆˆ๋‹จ ๋ˆˆ๋‚จ ๋ˆˆ๋‹น ํ˜œํ™ ๋‚œํƒœ ๋‚œ๋ฌด ๋ฌด์ดˆ ๋ฌด์—ฌ ๋ฌด๋‚œ ๋ฌด๋‹จ ๋ฌด๋‹ด ๋ฌด๋ผ ๋ฌด๋ฅ˜ ๋ฌด๋ฏผ ๋ฌด์ƒˆ ๋ฌด์„œ ๋ฌด์†Œ ๋ฌด์‹ค ๋ฌด์•  ๋ฌด์–‘ ๋ฌด์—ฌ ๋ฌด์˜ค ๋ฌด์˜จ ๋ฌด์š” ๋ฌด์œ  ๋ฌด์ด ๋ฌด์ผ ๋ฌด์ฐจ ๋ฌด์ฐฝ ๋ฌด์ฒœ ๋ฌด์ฒจ ๋ฌด์ดˆ ๋ฌด์ด ๋ฌดํ‘œ ๋ฌดํ•˜ ๋ฌดํ˜ผ ๋ฌดํ™ ๋ฌด๋‚จ ๋ฌด๋ˆˆ ๋ฌด๋‹ฌ ๋ฌด๋ด„ ๋ฌด์Šฌ ๋ฌด์—ด ๋ฌด์˜ ๋ฌด์ž ๋ฌดํƒœ ๋ฌดํ˜œ ๋ชจ๋‹น ๋ชจ๋น„ ๋ชจ๋ฏผ ๋ชจ๋ฌด ๋‹ฌ๋‚˜ ๋‹ฌ๋‚œ ๋‹ฌ๋‚ด ๋‹ฌ๋‹ด ๋‹ฌ๋ฅ˜ ๋‹ฌ์‚ฌ ๋‹ฌ์†ก ๋‹ฌ์‹œ ๋‹ฌ์‹ค ๋‹ฌ์‹ฌ ๋‹ฌ์•ˆ ๋‹ฌ์•  ๋‹ฌ์˜ค ๋‹ฌ์˜จ ์‚ฌํƒœ ๋ผ๋‚˜ ๋ผ๋‚œ ๋ผ๋‹ค ๋ผ๋‹จ ๋ผ๋‹ด ๋ผ๋ž˜ ๋ผ๋ฅ˜ ๋ผ๋ฆฌ ๋ผ๋ชจ ๋ผ๋ฌด ๋ผ๋ฏธ ๋ผ๋ฏผ ๋ผ์‚ฌ ๋ผ์‚ฐ ๋ผ์ƒ ๋ผ์ƒˆ ๋ผ์ƒ ๋ผ์„œ ๋ผ์„  ๋ผ์„ค ๋ผ์„ฌ ๋ผ์„ฑ ๋ผ์†Œ ๋ผ์–‘ ๋ผ์—ฐ ๋ผ์›” ๋ผํ•œ ๋ผํ™” ํ˜ผ๋‚จ ๋‚ด๋น„ ๋‚œ๋‚จ ์›”๋‚จ ์•ˆ์„ฑ ๋‚ด์•  ์„ฌ์ž„ ์†œ์ž„ ์‚ฌ์•„ ์œ ์šฐ ํ•œ์ด ์ฒจ์ด ๋‹ค์‹œ ์—ฌ์•  ์‹ฌ๋น„ ํ•œ์—ฌ ์‹œ๋ฏธ ์‹œ์ž„ ์‚ฌ๋ด„ ์‹œ์ผ ์ฐจ์•„ ๋„์˜ค ๋‹จ๋‹น ์†Œ๋‚ด ๋ˆˆ์ž„ ๋‚œ์•ˆ ๋‚จ์—ฌ ์• ํ˜œ ์• ํƒœ ์• ์•„ ์• ์˜จ ์• ์š” ์• ์—ฌ ์• ์˜ ์ผํ˜œ ์ •์‹ฌ ๋‚œ์š” ์‹œ์‹ฌ ์‹œ์ด ํšจ์˜ค ์˜ˆํ•ด ์‹ฌ๋‚จ ๋‚จ์ด ๋ˆˆ์•„ ์‹œ๋ด„ ๋‚จ์šฐ ํ˜ผ์ด ๋‚œ์œ  ์•ˆ์œ  ์ฑ„์•  ํ™”์•„ ์•„์•  ์ด์ž„ ์• ์ž„ ์‹ฌ์ž„ ํ™”ํ˜œ ์ดํ˜œ ์˜จ์˜ค ์•ˆ์•  ์‹ฌ์Šฌ ์•ˆ๋‚จ ๋ฏธ์ฐจ ์• ์ฑ„ ์• ์Šฌ ํ˜œ์ฑ„ ์•ˆํ•ด ์œจ๋ฆฌ ๋ฏผ๋‚˜ ์ด๋‹ด ๋‹ค์•„ ์• ์‹œ ์šฐ์‹ฌ ์‚ฐ์ด ์‹ค์ด ์•ˆ์€ ์ด๋‹ค ๋ด„๋‹น ์œ ์•  ๋ˆˆ์€ ๋‹ฌํ˜ผ ์‹ฌ์˜จ ์ฒจ์‚ฌ ์˜จ์ž„ ์„ฌ์ด ํ˜ผ์—ฌ ์„ฌ์‹ฌ ์ž„์ผ ์‹ฌ์•„ ํ™๋‚˜ ์˜ค์•  ๋ด„์˜ค ๋‚œ์ด ์›”๋ผ ์‹ค๋ผ ์‹ค์•„ ์˜ค์˜จ ์—ฌ์ž ์‹ฌ์•  \ No newline at end of file diff --git a/packages/mugunghwa/sources/84_non_filtered.txt b/packages/mugunghwa/sources/84_non_filtered.txt deleted file mode 100644 index 71e020b..0000000 --- a/packages/mugunghwa/sources/84_non_filtered.txt +++ /dev/null @@ -1 +0,0 @@ -๋‚˜๋‚˜ ๋‚˜๋‚œ ๋‚˜๋‚ด ๋‚˜๋‹ค ๋‚˜๋‹จ ๋‚˜๋‹ด ๋‚˜๋„ ๋‚˜๋ผ ๋‚˜๋ž˜ ๋‚˜๋ฅ˜ ๋‚˜๋ฆฌ ๋‚˜๋ชจ ๋‚˜๋ฌด ๋‚˜๋ฏธ ๋‚˜๋ฏผ ๋‚˜์‚ฌ ๋‚˜์‚ฐ ๋‚˜์ƒ ๋‚˜์ƒˆ ๋‚˜์ƒ ๋‚˜์„œ ๋‚˜์„  ๋‚˜์„ค ๋‚˜์„ฌ ๋‚˜์„ฑ ๋‚˜์†Œ ๋‚˜์†” ๋‚˜์†œ ๋‚˜์†ก ๋‚˜์ˆ˜ ๋‚˜์‹œ ๋‚˜์‹  ๋‚˜์‹ค ๋‚˜์‹ฌ ๋‚˜์•„ ๋‚˜์•ˆ ๋‚˜์•  ๋‚˜์–‘ ๋‚˜์—ฌ ๋‚˜์—ฐ ๋‚˜์˜ˆ ๋‚˜์˜ค ๋‚˜์˜จ ๋‚˜์š” ๋‚˜์šฐ ๋‚˜์›” ๋‚˜์œ  ๋‚˜์œค ๋‚˜์œจ ๋‚˜์€ ๋‚˜์ด ๋‚˜์ผ ๋‚˜์ž„ ๋‚˜์ • ๋‚˜์ฐจ ๋‚˜์ฐฝ ๋‚˜์ฑ„ ๋‚˜์ฒœ ๋‚˜์ฒจ ๋‚˜์ฒญ ๋‚˜์ดˆ ๋‚˜์ด ๋‚˜ํ‘œ ๋‚˜ํ•˜ ๋‚˜ํ•œ ๋‚˜ํ•ด ๋‚˜ํ–ฅ ๋‚˜ํ˜„ ๋‚˜ํ˜ผ ๋‚˜ํ™ ๋‚˜ํ™” ๋‚˜ํšจ ๋‚˜๋‚จ ๋‚˜๋ˆˆ ๋‚˜๋‹ฌ ๋‚˜๋‹น ๋‚˜๋ด„ ๋‚˜๋น„ ๋‚˜์Šฌ ๋‚˜์—ด ๋‚˜์˜ ๋‚˜์ž ๋‚˜ํƒœ ๋‚˜ํ˜œ ๋‚œ๋‚˜ ๋‚œ๋‚œ ๋‚œ๋‚ด ๋‚œ๋‹ค ๋‚œ๋‹จ ๋‚œ๋‹ด ๋‚œ๋„ ๋‚œ๋ผ ๋‚œ๋ž˜ ๋‚œ๋ฅ˜ ๋‚œ๋ฆฌ ๋‚œ๋ชจ ๋‚œ๋ฌด ๋‚œ๋ฏธ ๋‚œ๋ฏผ ๋‚œ์‚ฌ ๋‚œ์‚ฐ ๋‚œ์ƒ ๋‚œ์ƒˆ ๋‚œ์ƒ ๋‚œ์„œ ๋‚œ์„  ๋‚œ์„ค ๋‚œ์„ฌ ๋‚œ์„ฑ ๋‚œ์†Œ ๋‚œ์†” ๋‚œ์†œ ๋‚œ์†ก ๋‚œ์ˆ˜ ๋‚œ์‹œ ๋‚œ์‹  ๋‚œ์‹ค ๋‚œ์‹ฌ ๋‚œ์•„ ๋‚œ์•ˆ ๋‚œ์•  ๋‚œ์–‘ ๋‚œ์—ฌ ๋‚œ์—ฐ ๋‚œ์˜ˆ ๋‚œ์˜ค ๋‚œ์˜จ ๋‚œ์š” ๋‚œ์šฐ ๋‚œ์›” ๋‚œ์œ  ๋‚œ์œค ๋‚œ์œจ ๋‚œ์€ ๋‚œ์ด ๋‚œ์ผ ๋‚œ์ž„ ๋‚œ์ • ๋‚œ์ฐจ ๋‚œ์ฐฝ ๋‚œ์ฑ„ ๋‚œ์ฒœ ๋‚œ์ฒจ ๋‚œ์ฒญ ๋‚œ์ดˆ ๋‚œ์ด ๋‚œํ‘œ ๋‚œํ•˜ ๋‚œํ•œ ๋‚œํ•ด ๋‚œํ–ฅ ๋‚œํ˜„ ๋‚œํ˜ผ ๋‚œํ™ ๋‚œํ™” ๋‚œํšจ ๋‚œ๋‚จ ๋‚œ๋ˆˆ ๋‚œ๋‹ฌ ๋‚œ๋‹น ๋‚œ๋ด„ ๋‚œ๋น„ ๋‚œ์Šฌ ๋‚œ์—ด ๋‚œ์˜ ๋‚œ์ž ๋‚œํƒœ ๋‚œํ˜œ ๋‚ด๋‚˜ ๋‚ด๋‚œ ๋‚ด๋‚ด ๋‚ด๋‹ค ๋‚ด๋‹จ ๋‚ด๋‹ด ๋‚ด๋„ ๋‚ด๋ผ ๋‚ด๋ž˜ ๋‚ด๋ฅ˜ ๋‚ด๋ฆฌ ๋‚ด๋ชจ ๋‚ด๋ฌด ๋‚ด๋ฏธ ๋‚ด๋ฏผ ๋‚ด์‚ฌ ๋‚ด์‚ฐ ๋‚ด์ƒ ๋‚ด์ƒˆ ๋‚ด์ƒ ๋‚ด์„œ ๋‚ด์„  ๋‚ด์„ค ๋‚ด์„ฌ ๋‚ด์„ฑ ๋‚ด์†Œ ๋‚ด์†” ๋‚ด์†œ ๋‚ด์†ก ๋‚ด์ˆ˜ ๋‚ด์‹œ ๋‚ด์‹  ๋‚ด์‹ค ๋‚ด์‹ฌ ๋‚ด์•„ ๋‚ด์•ˆ ๋‚ด์•  ๋‚ด์–‘ ๋‚ด์—ฌ ๋‚ด์—ฐ ๋‚ด์˜ˆ ๋‚ด์˜ค ๋‚ด์˜จ ๋‚ด์š” ๋‚ด์šฐ ๋‚ด์›” ๋‚ด์œ  ๋‚ด์œค ๋‚ด์œจ ๋‚ด์€ ๋‚ด์ด ๋‚ด์ผ ๋‚ด์ž„ ๋‚ด์ • ๋‚ด์ฐจ ๋‚ด์ฐฝ ๋‚ด์ฑ„ ๋‚ด์ฒœ ๋‚ด์ฒจ ๋‚ด์ฒญ ๋‚ด์ดˆ ๋‚ด์ด ๋‚ดํ‘œ ๋‚ดํ•˜ ๋‚ดํ•œ ๋‚ดํ•ด ๋‚ดํ–ฅ ๋‚ดํ˜„ ๋‚ดํ˜ผ ๋‚ดํ™ ๋‚ดํ™” ๋‚ดํšจ ๋‚ด๋‚จ ๋‚ด๋ˆˆ ๋‚ด๋‹ฌ ๋‚ด๋‹น ๋‚ด๋ด„ ๋‚ด๋น„ ๋‚ด์Šฌ ๋‚ด์—ด ๋‚ด์˜ ๋‚ด์ž ๋‚ดํƒœ ๋‚ดํ˜œ ๋‹ค๋‚˜ ๋‹ค๋‚œ ๋‹ค๋‚ด ๋‹ค๋‹ค ๋‹ค๋‹จ ๋‹ค๋‹ด ๋‹ค๋„ ๋‹ค๋ผ ๋‹ค๋ž˜ ๋‹ค๋ฅ˜ ๋‹ค๋ฆฌ ๋‹ค๋ชจ ๋‹ค๋ฌด ๋‹ค๋ฏธ ๋‹ค๋ฏผ ๋‹ค์‚ฌ ๋‹ค์‚ฐ ๋‹ค์ƒ ๋‹ค์ƒˆ ๋‹ค์ƒ ๋‹ค์„œ ๋‹ค์„  ๋‹ค์„ค ๋‹ค์„ฌ ๋‹ค์„ฑ ๋‹ค์†Œ ๋‹ค์†” ๋‹ค์†œ ๋‹ค์†ก ๋‹ค์ˆ˜ ๋‹ค์‹œ ๋‹ค์‹  ๋‹ค์‹ค ๋‹ค์‹ฌ ๋‹ค์•„ ๋‹ค์•ˆ ๋‹ค์•  ๋‹ค์–‘ ๋‹ค์—ฌ ๋‹ค์—ฐ ๋‹ค์˜ˆ ๋‹ค์˜ค ๋‹ค์˜จ ๋‹ค์š” ๋‹ค์šฐ ๋‹ค์›” ๋‹ค์œ  ๋‹ค์œค ๋‹ค์œจ ๋‹ค์€ ๋‹ค์ด ๋‹ค์ผ ๋‹ค์ž„ ๋‹ค์ • ๋‹ค์ฐจ ๋‹ค์ฐฝ ๋‹ค์ฑ„ ๋‹ค์ฒœ ๋‹ค์ฒจ ๋‹ค์ฒญ ๋‹ค์ดˆ ๋‹ค์ด ๋‹คํ‘œ ๋‹คํ•˜ ๋‹คํ•œ ๋‹คํ•ด ๋‹คํ–ฅ ๋‹คํ˜„ ๋‹คํ˜ผ ๋‹คํ™ ๋‹คํ™” ๋‹คํšจ ๋‹ค๋‚จ ๋‹ค๋ˆˆ ๋‹ค๋‹ฌ ๋‹ค๋‹น ๋‹ค๋ด„ ๋‹ค๋น„ ๋‹ค์Šฌ ๋‹ค์—ด ๋‹ค์˜ ๋‹ค์ž ๋‹คํƒœ ๋‹คํ˜œ ๋‹จ๋‚˜ ๋‹จ๋‚œ ๋‹จ๋‚ด ๋‹จ๋‹ค ๋‹จ๋‹จ ๋‹จ๋‹ด ๋‹จ๋„ ๋‹จ๋ผ ๋‹จ๋ž˜ ๋‹จ๋ฅ˜ ๋‹จ๋ฆฌ ๋‹จ๋ชจ ๋‹จ๋ฌด ๋‹จ๋ฏธ ๋‹จ๋ฏผ ๋‹จ์‚ฌ ๋‹จ์‚ฐ ๋‹จ์ƒ ๋‹จ์ƒˆ ๋‹จ์ƒ ๋‹จ์„œ ๋‹จ์„  ๋‹จ์„ค ๋‹จ์„ฌ ๋‹จ์„ฑ ๋‹จ์†Œ ๋‹จ์†” ๋‹จ์†œ ๋‹จ์†ก ๋‹จ์ˆ˜ ๋‹จ์‹œ ๋‹จ์‹  ๋‹จ์‹ค ๋‹จ์‹ฌ ๋‹จ์•„ ๋‹จ์•ˆ ๋‹จ์•  ๋‹จ์–‘ ๋‹จ์—ฌ ๋‹จ์—ฐ ๋‹จ์˜ˆ ๋‹จ์˜ค ๋‹จ์˜จ ๋‹จ์š” ๋‹จ์šฐ ๋‹จ์›” ๋‹จ์œ  ๋‹จ์œค ๋‹จ์œจ ๋‹จ์€ ๋‹จ์ด ๋‹จ์ผ ๋‹จ์ž„ ๋‹จ์ • ๋‹จ์ฐจ ๋‹จ์ฐฝ ๋‹จ์ฑ„ ๋‹จ์ฒœ ๋‹จ์ฒจ ๋‹จ์ฒญ ๋‹จ์ดˆ ๋‹จ์ด ๋‹จํ‘œ ๋‹จํ•˜ ๋‹จํ•œ ๋‹จํ•ด ๋‹จํ–ฅ ๋‹จํ˜„ ๋‹จํ˜ผ ๋‹จํ™ ๋‹จํ™” ๋‹จํšจ ๋‹จ๋‚จ ๋‹จ๋ˆˆ ๋‹จ๋‹ฌ ๋‹จ๋‹น ๋‹จ๋ด„ ๋‹จ๋น„ ๋‹จ์Šฌ ๋‹จ์—ด ๋‹จ์˜ ๋‹จ์ž ๋‹จํƒœ ๋‹จํ˜œ ๋‹ด๋‚˜ ๋‹ด๋‚œ ๋‹ด๋‚ด ๋‹ด๋‹ค ๋‹ด๋‹จ ๋‹ด๋‹ด ๋‹ด๋„ ๋‹ด๋ผ ๋‹ด๋ž˜ ๋‹ด๋ฅ˜ ๋‹ด๋ฆฌ ๋‹ด๋ชจ ๋‹ด๋ฌด ๋‹ด๋ฏธ ๋‹ด๋ฏผ ๋‹ด์‚ฌ ๋‹ด์‚ฐ ๋‹ด์ƒ ๋‹ด์ƒˆ ๋‹ด์ƒ ๋‹ด์„œ ๋‹ด์„  ๋‹ด์„ค ๋‹ด์„ฌ ๋‹ด์„ฑ ๋‹ด์†Œ ๋‹ด์†” ๋‹ด์†œ ๋‹ด์†ก ๋‹ด์ˆ˜ ๋‹ด์‹œ ๋‹ด์‹  ๋‹ด์‹ค ๋‹ด์‹ฌ ๋‹ด์•„ ๋‹ด์•ˆ ๋‹ด์•  ๋‹ด์–‘ ๋‹ด์—ฌ ๋‹ด์—ฐ ๋‹ด์˜ˆ ๋‹ด์˜ค ๋‹ด์˜จ ๋‹ด์š” ๋‹ด์šฐ ๋‹ด์›” ๋‹ด์œ  ๋‹ด์œค ๋‹ด์œจ ๋‹ด์€ ๋‹ด์ด ๋‹ด์ผ ๋‹ด์ž„ ๋‹ด์ • ๋‹ด์ฐจ ๋‹ด์ฐฝ ๋‹ด์ฑ„ ๋‹ด์ฒœ ๋‹ด์ฒจ ๋‹ด์ฒญ ๋‹ด์ดˆ ๋‹ด์ด ๋‹ดํ‘œ ๋‹ดํ•˜ ๋‹ดํ•œ ๋‹ดํ•ด ๋‹ดํ–ฅ ๋‹ดํ˜„ ๋‹ดํ˜ผ ๋‹ดํ™ ๋‹ดํ™” ๋‹ดํšจ ๋‹ด๋‚จ ๋‹ด๋ˆˆ ๋‹ด๋‹ฌ ๋‹ด๋‹น ๋‹ด๋ด„ ๋‹ด๋น„ ๋‹ด์Šฌ ๋‹ด์—ด ๋‹ด์˜ ๋‹ด์ž ๋‹ดํƒœ ๋‹ดํ˜œ ๋„๋‚˜ ๋„๋‚œ ๋„๋‚ด ๋„๋‹ค ๋„๋‹จ ๋„๋‹ด ๋„๋„ ๋„๋ผ ๋„๋ž˜ ๋„๋ฅ˜ ๋„๋ฆฌ ๋„๋ชจ ๋„๋ฌด ๋„๋ฏธ ๋„๋ฏผ ๋„์‚ฌ ๋„์‚ฐ ๋„์ƒ ๋„์ƒˆ ๋„์ƒ ๋„์„œ ๋„์„  ๋„์„ค ๋„์„ฌ ๋„์„ฑ ๋„์†Œ ๋„์†” ๋„์†œ ๋„์†ก ๋„์ˆ˜ ๋„์‹œ ๋„์‹  ๋„์‹ค ๋„์‹ฌ ๋„์•„ ๋„์•ˆ ๋„์•  ๋„์–‘ ๋„์—ฌ ๋„์—ฐ ๋„์˜ˆ ๋„์˜ค ๋„์˜จ ๋„์š” ๋„์šฐ ๋„์›” ๋„์œ  ๋„์œค ๋„์œจ ๋„์€ ๋„์ด ๋„์ผ ๋„์ž„ ๋„์ • ๋„์ฐจ ๋„์ฐฝ ๋„์ฑ„ ๋„์ฒœ ๋„์ฒจ ๋„์ฒญ ๋„์ดˆ ๋„์ด ๋„ํ‘œ ๋„ํ•˜ ๋„ํ•œ ๋„ํ•ด ๋„ํ–ฅ ๋„ํ˜„ ๋„ํ˜ผ ๋„ํ™ ๋„ํ™” ๋„ํšจ ๋„๋‚จ ๋„๋ˆˆ ๋„๋‹ฌ ๋„๋‹น ๋„๋ด„ ๋„๋น„ ๋„์Šฌ ๋„์—ด ๋„์˜ ๋„์ž ๋„ํƒœ ๋„ํ˜œ ๋ผ๋‚˜ ๋ผ๋‚œ ๋ผ๋‚ด ๋ผ๋‹ค ๋ผ๋‹จ ๋ผ๋‹ด ๋ผ๋„ ๋ผ๋ผ ๋ผ๋ž˜ ๋ผ๋ฅ˜ ๋ผ๋ฆฌ ๋ผ๋ชจ ๋ผ๋ฌด ๋ผ๋ฏธ ๋ผ๋ฏผ ๋ผ์‚ฌ ๋ผ์‚ฐ ๋ผ์ƒ ๋ผ์ƒˆ ๋ผ์ƒ ๋ผ์„œ ๋ผ์„  ๋ผ์„ค ๋ผ์„ฌ ๋ผ์„ฑ ๋ผ์†Œ ๋ผ์†” ๋ผ์†œ ๋ผ์†ก ๋ผ์ˆ˜ ๋ผ์‹œ ๋ผ์‹  ๋ผ์‹ค ๋ผ์‹ฌ ๋ผ์•„ ๋ผ์•ˆ ๋ผ์•  ๋ผ์–‘ ๋ผ์—ฌ ๋ผ์—ฐ ๋ผ์˜ˆ ๋ผ์˜ค ๋ผ์˜จ ๋ผ์š” ๋ผ์šฐ ๋ผ์›” ๋ผ์œ  ๋ผ์œค ๋ผ์œจ ๋ผ์€ ๋ผ์ด ๋ผ์ผ ๋ผ์ž„ ๋ผ์ • ๋ผ์ฐจ ๋ผ์ฐฝ ๋ผ์ฑ„ ๋ผ์ฒœ ๋ผ์ฒจ ๋ผ์ฒญ ๋ผ์ดˆ ๋ผ์ด ๋ผํ‘œ ๋ผํ•˜ ๋ผํ•œ ๋ผํ•ด ๋ผํ–ฅ ๋ผํ˜„ ๋ผํ˜ผ ๋ผํ™ ๋ผํ™” ๋ผํšจ ๋ผ๋‚จ ๋ผ๋ˆˆ ๋ผ๋‹ฌ ๋ผ๋‹น ๋ผ๋ด„ ๋ผ๋น„ ๋ผ์Šฌ ๋ผ์—ด ๋ผ์˜ ๋ผ์ž ๋ผํƒœ ๋ผํ˜œ ๋ž˜๋‚˜ ๋ž˜๋‚œ ๋ž˜๋‚ด ๋ž˜๋‹ค ๋ž˜๋‹จ ๋ž˜๋‹ด ๋ž˜๋„ ๋ž˜๋ผ ๋ž˜๋ž˜ ๋ž˜๋ฅ˜ ๋ž˜๋ฆฌ ๋ž˜๋ชจ ๋ž˜๋ฌด ๋ž˜๋ฏธ ๋ž˜๋ฏผ ๋ž˜์‚ฌ ๋ž˜์‚ฐ ๋ž˜์ƒ ๋ž˜์ƒˆ ๋ž˜์ƒ ๋ž˜์„œ ๋ž˜์„  ๋ž˜์„ค ๋ž˜์„ฌ ๋ž˜์„ฑ ๋ž˜์†Œ ๋ž˜์†” ๋ž˜์†œ ๋ž˜์†ก ๋ž˜์ˆ˜ ๋ž˜์‹œ ๋ž˜์‹  ๋ž˜์‹ค ๋ž˜์‹ฌ ๋ž˜์•„ ๋ž˜์•ˆ ๋ž˜์•  ๋ž˜์–‘ ๋ž˜์—ฌ ๋ž˜์—ฐ ๋ž˜์˜ˆ ๋ž˜์˜ค ๋ž˜์˜จ ๋ž˜์š” ๋ž˜์šฐ ๋ž˜์›” ๋ž˜์œ  ๋ž˜์œค ๋ž˜์œจ ๋ž˜์€ ๋ž˜์ด ๋ž˜์ผ ๋ž˜์ž„ ๋ž˜์ • ๋ž˜์ฐจ ๋ž˜์ฐฝ ๋ž˜์ฑ„ ๋ž˜์ฒœ ๋ž˜์ฒจ ๋ž˜์ฒญ ๋ž˜์ดˆ ๋ž˜์ด ๋ž˜ํ‘œ ๋ž˜ํ•˜ ๋ž˜ํ•œ ๋ž˜ํ•ด ๋ž˜ํ–ฅ ๋ž˜ํ˜„ ๋ž˜ํ˜ผ ๋ž˜ํ™ ๋ž˜ํ™” ๋ž˜ํšจ ๋ž˜๋‚จ ๋ž˜๋ˆˆ ๋ž˜๋‹ฌ ๋ž˜๋‹น ๋ž˜๋ด„ ๋ž˜๋น„ ๋ž˜์Šฌ ๋ž˜์—ด ๋ž˜์˜ ๋ž˜์ž ๋ž˜ํƒœ ๋ž˜ํ˜œ ๋ฅ˜๋‚˜ ๋ฅ˜๋‚œ ๋ฅ˜๋‚ด ๋ฅ˜๋‹ค ๋ฅ˜๋‹จ ๋ฅ˜๋‹ด ๋ฅ˜๋„ ๋ฅ˜๋ผ ๋ฅ˜๋ž˜ ๋ฅ˜๋ฅ˜ ๋ฅ˜๋ฆฌ ๋ฅ˜๋ชจ ๋ฅ˜๋ฌด ๋ฅ˜๋ฏธ ๋ฅ˜๋ฏผ ๋ฅ˜์‚ฌ ๋ฅ˜์‚ฐ ๋ฅ˜์ƒ ๋ฅ˜์ƒˆ ๋ฅ˜์ƒ ๋ฅ˜์„œ ๋ฅ˜์„  ๋ฅ˜์„ค ๋ฅ˜์„ฌ ๋ฅ˜์„ฑ ๋ฅ˜์†Œ ๋ฅ˜์†” ๋ฅ˜์†œ ๋ฅ˜์†ก ๋ฅ˜์ˆ˜ ๋ฅ˜์‹œ ๋ฅ˜์‹  ๋ฅ˜์‹ค ๋ฅ˜์‹ฌ ๋ฅ˜์•„ ๋ฅ˜์•ˆ ๋ฅ˜์•  ๋ฅ˜์–‘ ๋ฅ˜์—ฌ ๋ฅ˜์—ฐ ๋ฅ˜์˜ˆ ๋ฅ˜์˜ค ๋ฅ˜์˜จ ๋ฅ˜์š” ๋ฅ˜์šฐ ๋ฅ˜์›” ๋ฅ˜์œ  ๋ฅ˜์œค ๋ฅ˜์œจ ๋ฅ˜์€ ๋ฅ˜์ด ๋ฅ˜์ผ ๋ฅ˜์ž„ ๋ฅ˜์ • ๋ฅ˜์ฐจ ๋ฅ˜์ฐฝ ๋ฅ˜์ฑ„ ๋ฅ˜์ฒœ ๋ฅ˜์ฒจ ๋ฅ˜์ฒญ ๋ฅ˜์ดˆ ๋ฅ˜์ด ๋ฅ˜ํ‘œ ๋ฅ˜ํ•˜ ๋ฅ˜ํ•œ ๋ฅ˜ํ•ด ๋ฅ˜ํ–ฅ ๋ฅ˜ํ˜„ ๋ฅ˜ํ˜ผ ๋ฅ˜ํ™ ๋ฅ˜ํ™” ๋ฅ˜ํšจ ๋ฅ˜๋‚จ ๋ฅ˜๋ˆˆ ๋ฅ˜๋‹ฌ ๋ฅ˜๋‹น ๋ฅ˜๋ด„ ๋ฅ˜๋น„ ๋ฅ˜์Šฌ ๋ฅ˜์—ด ๋ฅ˜์˜ ๋ฅ˜์ž ๋ฅ˜ํƒœ ๋ฅ˜ํ˜œ ๋ฆฌ๋‚˜ ๋ฆฌ๋‚œ ๋ฆฌ๋‚ด ๋ฆฌ๋‹ค ๋ฆฌ๋‹จ ๋ฆฌ๋‹ด ๋ฆฌ๋„ ๋ฆฌ๋ผ ๋ฆฌ๋ž˜ ๋ฆฌ๋ฅ˜ ๋ฆฌ๋ฆฌ ๋ฆฌ๋ชจ ๋ฆฌ๋ฌด ๋ฆฌ๋ฏธ ๋ฆฌ๋ฏผ ๋ฆฌ์‚ฌ ๋ฆฌ์‚ฐ ๋ฆฌ์ƒ ๋ฆฌ์ƒˆ ๋ฆฌ์ƒ ๋ฆฌ์„œ ๋ฆฌ์„  ๋ฆฌ์„ค ๋ฆฌ์„ฌ ๋ฆฌ์„ฑ ๋ฆฌ์†Œ ๋ฆฌ์†” ๋ฆฌ์†œ ๋ฆฌ์†ก ๋ฆฌ์ˆ˜ ๋ฆฌ์‹œ ๋ฆฌ์‹  ๋ฆฌ์‹ค ๋ฆฌ์‹ฌ ๋ฆฌ์•„ ๋ฆฌ์•ˆ ๋ฆฌ์•  ๋ฆฌ์–‘ ๋ฆฌ์—ฌ ๋ฆฌ์—ฐ ๋ฆฌ์˜ˆ ๋ฆฌ์˜ค ๋ฆฌ์˜จ ๋ฆฌ์š” ๋ฆฌ์šฐ ๋ฆฌ์›” ๋ฆฌ์œ  ๋ฆฌ์œค ๋ฆฌ์œจ ๋ฆฌ์€ ๋ฆฌ์ด ๋ฆฌ์ผ ๋ฆฌ์ž„ ๋ฆฌ์ • ๋ฆฌ์ฐจ ๋ฆฌ์ฐฝ ๋ฆฌ์ฑ„ ๋ฆฌ์ฒœ ๋ฆฌ์ฒจ ๋ฆฌ์ฒญ ๋ฆฌ์ดˆ ๋ฆฌ์ด ๋ฆฌํ‘œ ๋ฆฌํ•˜ ๋ฆฌํ•œ ๋ฆฌํ•ด ๋ฆฌํ–ฅ ๋ฆฌํ˜„ ๋ฆฌํ˜ผ ๋ฆฌํ™ ๋ฆฌํ™” ๋ฆฌํšจ ๋ฆฌ๋‚จ ๋ฆฌ๋ˆˆ ๋ฆฌ๋‹ฌ ๋ฆฌ๋‹น ๋ฆฌ๋ด„ ๋ฆฌ๋น„ ๋ฆฌ์Šฌ ๋ฆฌ์—ด ๋ฆฌ์˜ ๋ฆฌ์ž ๋ฆฌํƒœ ๋ฆฌํ˜œ ๋ชจ๋‚˜ ๋ชจ๋‚œ ๋ชจ๋‚ด ๋ชจ๋‹ค ๋ชจ๋‹จ ๋ชจ๋‹ด ๋ชจ๋„ ๋ชจ๋ผ ๋ชจ๋ž˜ ๋ชจ๋ฅ˜ ๋ชจ๋ฆฌ ๋ชจ๋ชจ ๋ชจ๋ฌด ๋ชจ๋ฏธ ๋ชจ๋ฏผ ๋ชจ์‚ฌ ๋ชจ์‚ฐ ๋ชจ์ƒ ๋ชจ์ƒˆ ๋ชจ์ƒ ๋ชจ์„œ ๋ชจ์„  ๋ชจ์„ค ๋ชจ์„ฌ ๋ชจ์„ฑ ๋ชจ์†Œ ๋ชจ์†” ๋ชจ์†œ ๋ชจ์†ก ๋ชจ์ˆ˜ ๋ชจ์‹œ ๋ชจ์‹  ๋ชจ์‹ค ๋ชจ์‹ฌ ๋ชจ์•„ ๋ชจ์•ˆ ๋ชจ์•  ๋ชจ์–‘ ๋ชจ์—ฌ ๋ชจ์—ฐ ๋ชจ์˜ˆ ๋ชจ์˜ค ๋ชจ์˜จ ๋ชจ์š” ๋ชจ์šฐ ๋ชจ์›” ๋ชจ์œ  ๋ชจ์œค ๋ชจ์œจ ๋ชจ์€ ๋ชจ์ด ๋ชจ์ผ ๋ชจ์ž„ ๋ชจ์ • ๋ชจ์ฐจ ๋ชจ์ฐฝ ๋ชจ์ฑ„ ๋ชจ์ฒœ ๋ชจ์ฒจ ๋ชจ์ฒญ ๋ชจ์ดˆ ๋ชจ์ด ๋ชจํ‘œ ๋ชจํ•˜ ๋ชจํ•œ ๋ชจํ•ด ๋ชจํ–ฅ ๋ชจํ˜„ ๋ชจํ˜ผ ๋ชจํ™ ๋ชจํ™” ๋ชจํšจ ๋ชจ๋‚จ ๋ชจ๋ˆˆ ๋ชจ๋‹ฌ ๋ชจ๋‹น ๋ชจ๋ด„ ๋ชจ๋น„ ๋ชจ์Šฌ ๋ชจ์—ด ๋ชจ์˜ ๋ชจ์ž ๋ชจํƒœ ๋ชจํ˜œ ๋ฌด๋‚˜ ๋ฌด๋‚œ ๋ฌด๋‚ด ๋ฌด๋‹ค ๋ฌด๋‹จ ๋ฌด๋‹ด ๋ฌด๋„ ๋ฌด๋ผ ๋ฌด๋ž˜ ๋ฌด๋ฅ˜ ๋ฌด๋ฆฌ ๋ฌด๋ชจ ๋ฌด๋ฌด ๋ฌด๋ฏธ ๋ฌด๋ฏผ ๋ฌด์‚ฌ ๋ฌด์‚ฐ ๋ฌด์ƒ ๋ฌด์ƒˆ ๋ฌด์ƒ ๋ฌด์„œ ๋ฌด์„  ๋ฌด์„ค ๋ฌด์„ฌ ๋ฌด์„ฑ ๋ฌด์†Œ ๋ฌด์†” ๋ฌด์†œ ๋ฌด์†ก ๋ฌด์ˆ˜ ๋ฌด์‹œ ๋ฌด์‹  ๋ฌด์‹ค ๋ฌด์‹ฌ ๋ฌด์•„ ๋ฌด์•ˆ ๋ฌด์•  ๋ฌด์–‘ ๋ฌด์—ฌ ๋ฌด์—ฐ ๋ฌด์˜ˆ ๋ฌด์˜ค ๋ฌด์˜จ ๋ฌด์š” ๋ฌด์šฐ ๋ฌด์›” ๋ฌด์œ  ๋ฌด์œค ๋ฌด์œจ ๋ฌด์€ ๋ฌด์ด ๋ฌด์ผ ๋ฌด์ž„ ๋ฌด์ • ๋ฌด์ฐจ ๋ฌด์ฐฝ ๋ฌด์ฑ„ ๋ฌด์ฒœ ๋ฌด์ฒจ ๋ฌด์ฒญ ๋ฌด์ดˆ ๋ฌด์ด ๋ฌดํ‘œ ๋ฌดํ•˜ ๋ฌดํ•œ ๋ฌดํ•ด ๋ฌดํ–ฅ ๋ฌดํ˜„ ๋ฌดํ˜ผ ๋ฌดํ™ ๋ฌดํ™” ๋ฌดํšจ ๋ฌด๋‚จ ๋ฌด๋ˆˆ ๋ฌด๋‹ฌ ๋ฌด๋‹น ๋ฌด๋ด„ ๋ฌด๋น„ ๋ฌด์Šฌ ๋ฌด์—ด ๋ฌด์˜ ๋ฌด์ž ๋ฌดํƒœ ๋ฌดํ˜œ ๋ฏธ๋‚˜ ๋ฏธ๋‚œ ๋ฏธ๋‚ด ๋ฏธ๋‹ค ๋ฏธ๋‹จ ๋ฏธ๋‹ด ๋ฏธ๋„ ๋ฏธ๋ผ ๋ฏธ๋ž˜ ๋ฏธ๋ฅ˜ ๋ฏธ๋ฆฌ ๋ฏธ๋ชจ ๋ฏธ๋ฌด ๋ฏธ๋ฏธ ๋ฏธ๋ฏผ ๋ฏธ์‚ฌ ๋ฏธ์‚ฐ ๋ฏธ์ƒ ๋ฏธ์ƒˆ ๋ฏธ์ƒ ๋ฏธ์„œ ๋ฏธ์„  ๋ฏธ์„ค ๋ฏธ์„ฌ ๋ฏธ์„ฑ ๋ฏธ์†Œ ๋ฏธ์†” ๋ฏธ์†œ ๋ฏธ์†ก ๋ฏธ์ˆ˜ ๋ฏธ์‹œ ๋ฏธ์‹  ๋ฏธ์‹ค ๋ฏธ์‹ฌ ๋ฏธ์•„ ๋ฏธ์•ˆ ๋ฏธ์•  ๋ฏธ์–‘ ๋ฏธ์—ฌ ๋ฏธ์—ฐ ๋ฏธ์˜ˆ ๋ฏธ์˜ค ๋ฏธ์˜จ ๋ฏธ์š” ๋ฏธ์šฐ ๋ฏธ์›” ๋ฏธ์œ  ๋ฏธ์œค ๋ฏธ์œจ ๋ฏธ์€ ๋ฏธ์ด ๋ฏธ์ผ ๋ฏธ์ž„ ๋ฏธ์ • ๋ฏธ์ฐจ ๋ฏธ์ฐฝ ๋ฏธ์ฑ„ ๋ฏธ์ฒœ ๋ฏธ์ฒจ ๋ฏธ์ฒญ ๋ฏธ์ดˆ ๋ฏธ์ด ๋ฏธํ‘œ ๋ฏธํ•˜ ๋ฏธํ•œ ๋ฏธํ•ด ๋ฏธํ–ฅ ๋ฏธํ˜„ ๋ฏธํ˜ผ ๋ฏธํ™ ๋ฏธํ™” ๋ฏธํšจ ๋ฏธ๋‚จ ๋ฏธ๋ˆˆ ๋ฏธ๋‹ฌ ๋ฏธ๋‹น ๋ฏธ๋ด„ ๋ฏธ๋น„ ๋ฏธ์Šฌ ๋ฏธ์—ด ๋ฏธ์˜ ๋ฏธ์ž ๋ฏธํƒœ ๋ฏธํ˜œ ๋ฏผ๋‚˜ ๋ฏผ๋‚œ ๋ฏผ๋‚ด ๋ฏผ๋‹ค ๋ฏผ๋‹จ ๋ฏผ๋‹ด ๋ฏผ๋„ ๋ฏผ๋ผ ๋ฏผ๋ž˜ ๋ฏผ๋ฅ˜ ๋ฏผ๋ฆฌ ๋ฏผ๋ชจ ๋ฏผ๋ฌด ๋ฏผ๋ฏธ ๋ฏผ๋ฏผ ๋ฏผ์‚ฌ ๋ฏผ์‚ฐ ๋ฏผ์ƒ ๋ฏผ์ƒˆ ๋ฏผ์ƒ ๋ฏผ์„œ ๋ฏผ์„  ๋ฏผ์„ค ๋ฏผ์„ฌ ๋ฏผ์„ฑ ๋ฏผ์†Œ ๋ฏผ์†” ๋ฏผ์†œ ๋ฏผ์†ก ๋ฏผ์ˆ˜ ๋ฏผ์‹œ ๋ฏผ์‹  ๋ฏผ์‹ค ๋ฏผ์‹ฌ ๋ฏผ์•„ ๋ฏผ์•ˆ ๋ฏผ์•  ๋ฏผ์–‘ ๋ฏผ์—ฌ ๋ฏผ์—ฐ ๋ฏผ์˜ˆ ๋ฏผ์˜ค ๋ฏผ์˜จ ๋ฏผ์š” ๋ฏผ์šฐ ๋ฏผ์›” ๋ฏผ์œ  ๋ฏผ์œค ๋ฏผ์œจ ๋ฏผ์€ ๋ฏผ์ด ๋ฏผ์ผ ๋ฏผ์ž„ ๋ฏผ์ • ๋ฏผ์ฐจ ๋ฏผ์ฐฝ ๋ฏผ์ฑ„ ๋ฏผ์ฒœ ๋ฏผ์ฒจ ๋ฏผ์ฒญ ๋ฏผ์ดˆ ๋ฏผ์ด ๋ฏผํ‘œ ๋ฏผํ•˜ ๋ฏผํ•œ ๋ฏผํ•ด ๋ฏผํ–ฅ ๋ฏผํ˜„ ๋ฏผํ˜ผ ๋ฏผํ™ ๋ฏผํ™” ๋ฏผํšจ ๋ฏผ๋‚จ ๋ฏผ๋ˆˆ ๋ฏผ๋‹ฌ ๋ฏผ๋‹น ๋ฏผ๋ด„ ๋ฏผ๋น„ ๋ฏผ์Šฌ ๋ฏผ์—ด ๋ฏผ์˜ ๋ฏผ์ž ๋ฏผํƒœ ๋ฏผํ˜œ ์‚ฌ๋‚˜ ์‚ฌ๋‚œ ์‚ฌ๋‚ด ์‚ฌ๋‹ค ์‚ฌ๋‹จ ์‚ฌ๋‹ด ์‚ฌ๋„ ์‚ฌ๋ผ ์‚ฌ๋ž˜ ์‚ฌ๋ฅ˜ ์‚ฌ๋ฆฌ ์‚ฌ๋ชจ ์‚ฌ๋ฌด ์‚ฌ๋ฏธ ์‚ฌ๋ฏผ ์‚ฌ์‚ฌ ์‚ฌ์‚ฐ ์‚ฌ์ƒ ์‚ฌ์ƒˆ ์‚ฌ์ƒ ์‚ฌ์„œ ์‚ฌ์„  ์‚ฌ์„ค ์‚ฌ์„ฌ ์‚ฌ์„ฑ ์‚ฌ์†Œ ์‚ฌ์†” ์‚ฌ์†œ ์‚ฌ์†ก ์‚ฌ์ˆ˜ ์‚ฌ์‹œ ์‚ฌ์‹  ์‚ฌ์‹ค ์‚ฌ์‹ฌ ์‚ฌ์•„ ์‚ฌ์•ˆ ์‚ฌ์•  ์‚ฌ์–‘ ์‚ฌ์—ฌ ์‚ฌ์—ฐ ์‚ฌ์˜ˆ ์‚ฌ์˜ค ์‚ฌ์˜จ ์‚ฌ์š” ์‚ฌ์šฐ ์‚ฌ์›” ์‚ฌ์œ  ์‚ฌ์œค ์‚ฌ์œจ ์‚ฌ์€ ์‚ฌ์ด ์‚ฌ์ผ ์‚ฌ์ž„ ์‚ฌ์ • ์‚ฌ์ฐจ ์‚ฌ์ฐฝ ์‚ฌ์ฑ„ ์‚ฌ์ฒœ ์‚ฌ์ฒจ ์‚ฌ์ฒญ ์‚ฌ์ดˆ ์‚ฌ์ด ์‚ฌํ‘œ ์‚ฌํ•˜ ์‚ฌํ•œ ์‚ฌํ•ด ์‚ฌํ–ฅ ์‚ฌํ˜„ ์‚ฌํ˜ผ ์‚ฌํ™ ์‚ฌํ™” ์‚ฌํšจ ์‚ฌ๋‚จ ์‚ฌ๋ˆˆ ์‚ฌ๋‹ฌ ์‚ฌ๋‹น ์‚ฌ๋ด„ ์‚ฌ๋น„ ์‚ฌ์Šฌ ์‚ฌ์—ด ์‚ฌ์˜ ์‚ฌ์ž ์‚ฌํƒœ ์‚ฌํ˜œ ์‚ฐ๋‚˜ ์‚ฐ๋‚œ ์‚ฐ๋‚ด ์‚ฐ๋‹ค ์‚ฐ๋‹จ ์‚ฐ๋‹ด ์‚ฐ๋„ ์‚ฐ๋ผ ์‚ฐ๋ž˜ ์‚ฐ๋ฅ˜ ์‚ฐ๋ฆฌ ์‚ฐ๋ชจ ์‚ฐ๋ฌด ์‚ฐ๋ฏธ ์‚ฐ๋ฏผ ์‚ฐ์‚ฌ ์‚ฐ์‚ฐ ์‚ฐ์ƒ ์‚ฐ์ƒˆ ์‚ฐ์ƒ ์‚ฐ์„œ ์‚ฐ์„  ์‚ฐ์„ค ์‚ฐ์„ฌ ์‚ฐ์„ฑ ์‚ฐ์†Œ ์‚ฐ์†” ์‚ฐ์†œ ์‚ฐ์†ก ์‚ฐ์ˆ˜ ์‚ฐ์‹œ ์‚ฐ์‹  ์‚ฐ์‹ค ์‚ฐ์‹ฌ ์‚ฐ์•„ ์‚ฐ์•ˆ ์‚ฐ์•  ์‚ฐ์–‘ ์‚ฐ์—ฌ ์‚ฐ์—ฐ ์‚ฐ์˜ˆ ์‚ฐ์˜ค ์‚ฐ์˜จ ์‚ฐ์š” ์‚ฐ์šฐ ์‚ฐ์›” ์‚ฐ์œ  ์‚ฐ์œค ์‚ฐ์œจ ์‚ฐ์€ ์‚ฐ์ด ์‚ฐ์ผ ์‚ฐ์ž„ ์‚ฐ์ • ์‚ฐ์ฐจ ์‚ฐ์ฐฝ ์‚ฐ์ฑ„ ์‚ฐ์ฒœ ์‚ฐ์ฒจ ์‚ฐ์ฒญ ์‚ฐ์ดˆ ์‚ฐ์ด ์‚ฐํ‘œ ์‚ฐํ•˜ ์‚ฐํ•œ ์‚ฐํ•ด ์‚ฐํ–ฅ ์‚ฐํ˜„ ์‚ฐํ˜ผ ์‚ฐํ™ ์‚ฐํ™” ์‚ฐํšจ ์‚ฐ๋‚จ ์‚ฐ๋ˆˆ ์‚ฐ๋‹ฌ ์‚ฐ๋‹น ์‚ฐ๋ด„ ์‚ฐ๋น„ ์‚ฐ์Šฌ ์‚ฐ์—ด ์‚ฐ์˜ ์‚ฐ์ž ์‚ฐํƒœ ์‚ฐํ˜œ ์ƒ๋‚˜ ์ƒ๋‚œ ์ƒ๋‚ด ์ƒ๋‹ค ์ƒ๋‹จ ์ƒ๋‹ด ์ƒ๋„ ์ƒ๋ผ ์ƒ๋ž˜ ์ƒ๋ฅ˜ ์ƒ๋ฆฌ ์ƒ๋ชจ ์ƒ๋ฌด ์ƒ๋ฏธ ์ƒ๋ฏผ ์ƒ์‚ฌ ์ƒ์‚ฐ ์ƒ์ƒ ์ƒ์ƒˆ ์ƒ์ƒ ์ƒ์„œ ์ƒ์„  ์ƒ์„ค ์ƒ์„ฌ ์ƒ์„ฑ ์ƒ์†Œ ์ƒ์†” ์ƒ์†œ ์ƒ์†ก ์ƒ์ˆ˜ ์ƒ์‹œ ์ƒ์‹  ์ƒ์‹ค ์ƒ์‹ฌ ์ƒ์•„ ์ƒ์•ˆ ์ƒ์•  ์ƒ์–‘ ์ƒ์—ฌ ์ƒ์—ฐ ์ƒ์˜ˆ ์ƒ์˜ค ์ƒ์˜จ ์ƒ์š” ์ƒ์šฐ ์ƒ์›” ์ƒ์œ  ์ƒ์œค ์ƒ์œจ ์ƒ์€ ์ƒ์ด ์ƒ์ผ ์ƒ์ž„ ์ƒ์ • ์ƒ์ฐจ ์ƒ์ฐฝ ์ƒ์ฑ„ ์ƒ์ฒœ ์ƒ์ฒจ ์ƒ์ฒญ ์ƒ์ดˆ ์ƒ์ด ์ƒํ‘œ ์ƒํ•˜ ์ƒํ•œ ์ƒํ•ด ์ƒํ–ฅ ์ƒํ˜„ ์ƒํ˜ผ ์ƒํ™ ์ƒํ™” ์ƒํšจ ์ƒ๋‚จ ์ƒ๋ˆˆ ์ƒ๋‹ฌ ์ƒ๋‹น ์ƒ๋ด„ ์ƒ๋น„ ์ƒ์Šฌ ์ƒ์—ด ์ƒ์˜ ์ƒ์ž ์ƒํƒœ ์ƒํ˜œ ์ƒˆ๋‚˜ ์ƒˆ๋‚œ ์ƒˆ๋‚ด ์ƒˆ๋‹ค ์ƒˆ๋‹จ ์ƒˆ๋‹ด ์ƒˆ๋„ ์ƒˆ๋ผ ์ƒˆ๋ž˜ ์ƒˆ๋ฅ˜ ์ƒˆ๋ฆฌ ์ƒˆ๋ชจ ์ƒˆ๋ฌด ์ƒˆ๋ฏธ ์ƒˆ๋ฏผ ์ƒˆ์‚ฌ ์ƒˆ์‚ฐ ์ƒˆ์ƒ ์ƒˆ์ƒˆ ์ƒˆ์ƒ ์ƒˆ์„œ ์ƒˆ์„  ์ƒˆ์„ค ์ƒˆ์„ฌ ์ƒˆ์„ฑ ์ƒˆ์†Œ ์ƒˆ์†” ์ƒˆ์†œ ์ƒˆ์†ก ์ƒˆ์ˆ˜ ์ƒˆ์‹œ ์ƒˆ์‹  ์ƒˆ์‹ค ์ƒˆ์‹ฌ ์ƒˆ์•„ ์ƒˆ์•ˆ ์ƒˆ์•  ์ƒˆ์–‘ ์ƒˆ์—ฌ ์ƒˆ์—ฐ ์ƒˆ์˜ˆ ์ƒˆ์˜ค ์ƒˆ์˜จ ์ƒˆ์š” ์ƒˆ์šฐ ์ƒˆ์›” ์ƒˆ์œ  ์ƒˆ์œค ์ƒˆ์œจ ์ƒˆ์€ ์ƒˆ์ด ์ƒˆ์ผ ์ƒˆ์ž„ ์ƒˆ์ • ์ƒˆ์ฐจ ์ƒˆ์ฐฝ ์ƒˆ์ฑ„ ์ƒˆ์ฒœ ์ƒˆ์ฒจ ์ƒˆ์ฒญ ์ƒˆ์ดˆ ์ƒˆ์ด ์ƒˆํ‘œ ์ƒˆํ•˜ ์ƒˆํ•œ ์ƒˆํ•ด ์ƒˆํ–ฅ ์ƒˆํ˜„ ์ƒˆํ˜ผ ์ƒˆํ™ ์ƒˆํ™” ์ƒˆํšจ ์ƒˆ๋‚จ ์ƒˆ๋ˆˆ ์ƒˆ๋‹ฌ ์ƒˆ๋‹น ์ƒˆ๋ด„ ์ƒˆ๋น„ ์ƒˆ์Šฌ ์ƒˆ์—ด ์ƒˆ์˜ ์ƒˆ์ž ์ƒˆํƒœ ์ƒˆํ˜œ ์ƒ๋‚˜ ์ƒ๋‚œ ์ƒ๋‚ด ์ƒ๋‹ค ์ƒ๋‹จ ์ƒ๋‹ด ์ƒ๋„ ์ƒ๋ผ ์ƒ๋ž˜ ์ƒ๋ฅ˜ ์ƒ๋ฆฌ ์ƒ๋ชจ ์ƒ๋ฌด ์ƒ๋ฏธ ์ƒ๋ฏผ ์ƒ์‚ฌ ์ƒ์‚ฐ ์ƒ์ƒ ์ƒ์ƒˆ ์ƒ์ƒ ์ƒ์„œ ์ƒ์„  ์ƒ์„ค ์ƒ์„ฌ ์ƒ์„ฑ ์ƒ์†Œ ์ƒ์†” ์ƒ์†œ ์ƒ์†ก ์ƒ์ˆ˜ ์ƒ์‹œ ์ƒ์‹  ์ƒ์‹ค ์ƒ์‹ฌ ์ƒ์•„ ์ƒ์•ˆ ์ƒ์•  ์ƒ์–‘ ์ƒ์—ฌ ์ƒ์—ฐ ์ƒ์˜ˆ ์ƒ์˜ค ์ƒ์˜จ ์ƒ์š” ์ƒ์šฐ ์ƒ์›” ์ƒ์œ  ์ƒ์œค ์ƒ์œจ ์ƒ์€ ์ƒ์ด ์ƒ์ผ ์ƒ์ž„ ์ƒ์ • ์ƒ์ฐจ ์ƒ์ฐฝ ์ƒ์ฑ„ ์ƒ์ฒœ ์ƒ์ฒจ ์ƒ์ฒญ ์ƒ์ดˆ ์ƒ์ด ์ƒํ‘œ ์ƒํ•˜ ์ƒํ•œ ์ƒํ•ด ์ƒํ–ฅ ์ƒํ˜„ ์ƒํ˜ผ ์ƒํ™ ์ƒํ™” ์ƒํšจ ์ƒ๋‚จ ์ƒ๋ˆˆ ์ƒ๋‹ฌ ์ƒ๋‹น ์ƒ๋ด„ ์ƒ๋น„ ์ƒ์Šฌ ์ƒ์—ด ์ƒ์˜ ์ƒ์ž ์ƒํƒœ ์ƒํ˜œ ์„œ๋‚˜ ์„œ๋‚œ ์„œ๋‚ด ์„œ๋‹ค ์„œ๋‹จ ์„œ๋‹ด ์„œ๋„ ์„œ๋ผ ์„œ๋ž˜ ์„œ๋ฅ˜ ์„œ๋ฆฌ ์„œ๋ชจ ์„œ๋ฌด ์„œ๋ฏธ ์„œ๋ฏผ ์„œ์‚ฌ ์„œ์‚ฐ ์„œ์ƒ ์„œ์ƒˆ ์„œ์ƒ ์„œ์„œ ์„œ์„  ์„œ์„ค ์„œ์„ฌ ์„œ์„ฑ ์„œ์†Œ ์„œ์†” ์„œ์†œ ์„œ์†ก ์„œ์ˆ˜ ์„œ์‹œ ์„œ์‹  ์„œ์‹ค ์„œ์‹ฌ ์„œ์•„ ์„œ์•ˆ ์„œ์•  ์„œ์–‘ ์„œ์—ฌ ์„œ์—ฐ ์„œ์˜ˆ ์„œ์˜ค ์„œ์˜จ ์„œ์š” ์„œ์šฐ ์„œ์›” ์„œ์œ  ์„œ์œค ์„œ์œจ ์„œ์€ ์„œ์ด ์„œ์ผ ์„œ์ž„ ์„œ์ • ์„œ์ฐจ ์„œ์ฐฝ ์„œ์ฑ„ ์„œ์ฒœ ์„œ์ฒจ ์„œ์ฒญ ์„œ์ดˆ ์„œ์ด ์„œํ‘œ ์„œํ•˜ ์„œํ•œ ์„œํ•ด ์„œํ–ฅ ์„œํ˜„ ์„œํ˜ผ ์„œํ™ ์„œํ™” ์„œํšจ ์„œ๋‚จ ์„œ๋ˆˆ ์„œ๋‹ฌ ์„œ๋‹น ์„œ๋ด„ ์„œ๋น„ ์„œ์Šฌ ์„œ์—ด ์„œ์˜ ์„œ์ž ์„œํƒœ ์„œํ˜œ ์„ ๋‚˜ ์„ ๋‚œ ์„ ๋‚ด ์„ ๋‹ค ์„ ๋‹จ ์„ ๋‹ด ์„ ๋„ ์„ ๋ผ ์„ ๋ž˜ ์„ ๋ฅ˜ ์„ ๋ฆฌ ์„ ๋ชจ ์„ ๋ฌด ์„ ๋ฏธ ์„ ๋ฏผ ์„ ์‚ฌ ์„ ์‚ฐ ์„ ์ƒ ์„ ์ƒˆ ์„ ์ƒ ์„ ์„œ ์„ ์„  ์„ ์„ค ์„ ์„ฌ ์„ ์„ฑ ์„ ์†Œ ์„ ์†” ์„ ์†œ ์„ ์†ก ์„ ์ˆ˜ ์„ ์‹œ ์„ ์‹  ์„ ์‹ค ์„ ์‹ฌ ์„ ์•„ ์„ ์•ˆ ์„ ์•  ์„ ์–‘ ์„ ์—ฌ ์„ ์—ฐ ์„ ์˜ˆ ์„ ์˜ค ์„ ์˜จ ์„ ์š” ์„ ์šฐ ์„ ์›” ์„ ์œ  ์„ ์œค ์„ ์œจ ์„ ์€ ์„ ์ด ์„ ์ผ ์„ ์ž„ ์„ ์ • ์„ ์ฐจ ์„ ์ฐฝ ์„ ์ฑ„ ์„ ์ฒœ ์„ ์ฒจ ์„ ์ฒญ ์„ ์ดˆ ์„ ์ด ์„ ํ‘œ ์„ ํ•˜ ์„ ํ•œ ์„ ํ•ด ์„ ํ–ฅ ์„ ํ˜„ ์„ ํ˜ผ ์„ ํ™ ์„ ํ™” ์„ ํšจ ์„ ๋‚จ ์„ ๋ˆˆ ์„ ๋‹ฌ ์„ ๋‹น ์„ ๋ด„ ์„ ๋น„ ์„ ์Šฌ ์„ ์—ด ์„ ์˜ ์„ ์ž ์„ ํƒœ ์„ ํ˜œ ์„ค๋‚˜ ์„ค๋‚œ ์„ค๋‚ด ์„ค๋‹ค ์„ค๋‹จ ์„ค๋‹ด ์„ค๋„ ์„ค๋ผ ์„ค๋ž˜ ์„ค๋ฅ˜ ์„ค๋ฆฌ ์„ค๋ชจ ์„ค๋ฌด ์„ค๋ฏธ ์„ค๋ฏผ ์„ค์‚ฌ ์„ค์‚ฐ ์„ค์ƒ ์„ค์ƒˆ ์„ค์ƒ ์„ค์„œ ์„ค์„  ์„ค์„ค ์„ค์„ฌ ์„ค์„ฑ ์„ค์†Œ ์„ค์†” ์„ค์†œ ์„ค์†ก ์„ค์ˆ˜ ์„ค์‹œ ์„ค์‹  ์„ค์‹ค ์„ค์‹ฌ ์„ค์•„ ์„ค์•ˆ ์„ค์•  ์„ค์–‘ ์„ค์—ฌ ์„ค์—ฐ ์„ค์˜ˆ ์„ค์˜ค ์„ค์˜จ ์„ค์š” ์„ค์šฐ ์„ค์›” ์„ค์œ  ์„ค์œค ์„ค์œจ ์„ค์€ ์„ค์ด ์„ค์ผ ์„ค์ž„ ์„ค์ • ์„ค์ฐจ ์„ค์ฐฝ ์„ค์ฑ„ ์„ค์ฒœ ์„ค์ฒจ ์„ค์ฒญ ์„ค์ดˆ ์„ค์ด ์„คํ‘œ ์„คํ•˜ ์„คํ•œ ์„คํ•ด ์„คํ–ฅ ์„คํ˜„ ์„คํ˜ผ ์„คํ™ ์„คํ™” ์„คํšจ ์„ค๋‚จ ์„ค๋ˆˆ ์„ค๋‹ฌ ์„ค๋‹น ์„ค๋ด„ ์„ค๋น„ ์„ค์Šฌ ์„ค์—ด ์„ค์˜ ์„ค์ž ์„คํƒœ ์„คํ˜œ ์„ฌ๋‚˜ ์„ฌ๋‚œ ์„ฌ๋‚ด ์„ฌ๋‹ค ์„ฌ๋‹จ ์„ฌ๋‹ด ์„ฌ๋„ ์„ฌ๋ผ ์„ฌ๋ž˜ ์„ฌ๋ฅ˜ ์„ฌ๋ฆฌ ์„ฌ๋ชจ ์„ฌ๋ฌด ์„ฌ๋ฏธ ์„ฌ๋ฏผ ์„ฌ์‚ฌ ์„ฌ์‚ฐ ์„ฌ์ƒ ์„ฌ์ƒˆ ์„ฌ์ƒ ์„ฌ์„œ ์„ฌ์„  ์„ฌ์„ค ์„ฌ์„ฌ ์„ฌ์„ฑ ์„ฌ์†Œ ์„ฌ์†” ์„ฌ์†œ ์„ฌ์†ก ์„ฌ์ˆ˜ ์„ฌ์‹œ ์„ฌ์‹  ์„ฌ์‹ค ์„ฌ์‹ฌ ์„ฌ์•„ ์„ฌ์•ˆ ์„ฌ์•  ์„ฌ์–‘ ์„ฌ์—ฌ ์„ฌ์—ฐ ์„ฌ์˜ˆ ์„ฌ์˜ค ์„ฌ์˜จ ์„ฌ์š” ์„ฌ์šฐ ์„ฌ์›” ์„ฌ์œ  ์„ฌ์œค ์„ฌ์œจ ์„ฌ์€ ์„ฌ์ด ์„ฌ์ผ ์„ฌ์ž„ ์„ฌ์ • ์„ฌ์ฐจ ์„ฌ์ฐฝ ์„ฌ์ฑ„ ์„ฌ์ฒœ ์„ฌ์ฒจ ์„ฌ์ฒญ ์„ฌ์ดˆ ์„ฌ์ด ์„ฌํ‘œ ์„ฌํ•˜ ์„ฌํ•œ ์„ฌํ•ด ์„ฌํ–ฅ ์„ฌํ˜„ ์„ฌํ˜ผ ์„ฌํ™ ์„ฌํ™” ์„ฌํšจ ์„ฌ๋‚จ ์„ฌ๋ˆˆ ์„ฌ๋‹ฌ ์„ฌ๋‹น ์„ฌ๋ด„ ์„ฌ๋น„ ์„ฌ์Šฌ ์„ฌ์—ด ์„ฌ์˜ ์„ฌ์ž ์„ฌํƒœ ์„ฌํ˜œ ์„ฑ๋‚˜ ์„ฑ๋‚œ ์„ฑ๋‚ด ์„ฑ๋‹ค ์„ฑ๋‹จ ์„ฑ๋‹ด ์„ฑ๋„ ์„ฑ๋ผ ์„ฑ๋ž˜ ์„ฑ๋ฅ˜ ์„ฑ๋ฆฌ ์„ฑ๋ชจ ์„ฑ๋ฌด ์„ฑ๋ฏธ ์„ฑ๋ฏผ ์„ฑ์‚ฌ ์„ฑ์‚ฐ ์„ฑ์ƒ ์„ฑ์ƒˆ ์„ฑ์ƒ ์„ฑ์„œ ์„ฑ์„  ์„ฑ์„ค ์„ฑ์„ฌ ์„ฑ์„ฑ ์„ฑ์†Œ ์„ฑ์†” ์„ฑ์†œ ์„ฑ์†ก ์„ฑ์ˆ˜ ์„ฑ์‹œ ์„ฑ์‹  ์„ฑ์‹ค ์„ฑ์‹ฌ ์„ฑ์•„ ์„ฑ์•ˆ ์„ฑ์•  ์„ฑ์–‘ ์„ฑ์—ฌ ์„ฑ์—ฐ ์„ฑ์˜ˆ ์„ฑ์˜ค ์„ฑ์˜จ ์„ฑ์š” ์„ฑ์šฐ ์„ฑ์›” ์„ฑ์œ  ์„ฑ์œค ์„ฑ์œจ ์„ฑ์€ ์„ฑ์ด ์„ฑ์ผ ์„ฑ์ž„ ์„ฑ์ • ์„ฑ์ฐจ ์„ฑ์ฐฝ ์„ฑ์ฑ„ ์„ฑ์ฒœ ์„ฑ์ฒจ ์„ฑ์ฒญ ์„ฑ์ดˆ ์„ฑ์ด ์„ฑํ‘œ ์„ฑํ•˜ ์„ฑํ•œ ์„ฑํ•ด ์„ฑํ–ฅ ์„ฑํ˜„ ์„ฑํ˜ผ ์„ฑํ™ ์„ฑํ™” ์„ฑํšจ ์„ฑ๋‚จ ์„ฑ๋ˆˆ ์„ฑ๋‹ฌ ์„ฑ๋‹น ์„ฑ๋ด„ ์„ฑ๋น„ ์„ฑ์Šฌ ์„ฑ์—ด ์„ฑ์˜ ์„ฑ์ž ์„ฑํƒœ ์„ฑํ˜œ ์†Œ๋‚˜ ์†Œ๋‚œ ์†Œ๋‚ด ์†Œ๋‹ค ์†Œ๋‹จ ์†Œ๋‹ด ์†Œ๋„ ์†Œ๋ผ ์†Œ๋ž˜ ์†Œ๋ฅ˜ ์†Œ๋ฆฌ ์†Œ๋ชจ ์†Œ๋ฌด ์†Œ๋ฏธ ์†Œ๋ฏผ ์†Œ์‚ฌ ์†Œ์‚ฐ ์†Œ์ƒ ์†Œ์ƒˆ ์†Œ์ƒ ์†Œ์„œ ์†Œ์„  ์†Œ์„ค ์†Œ์„ฌ ์†Œ์„ฑ ์†Œ์†Œ ์†Œ์†” ์†Œ์†œ ์†Œ์†ก ์†Œ์ˆ˜ ์†Œ์‹œ ์†Œ์‹  ์†Œ์‹ค ์†Œ์‹ฌ ์†Œ์•„ ์†Œ์•ˆ ์†Œ์•  ์†Œ์–‘ ์†Œ์—ฌ ์†Œ์—ฐ ์†Œ์˜ˆ ์†Œ์˜ค ์†Œ์˜จ ์†Œ์š” ์†Œ์šฐ ์†Œ์›” ์†Œ์œ  ์†Œ์œค ์†Œ์œจ ์†Œ์€ ์†Œ์ด ์†Œ์ผ ์†Œ์ž„ ์†Œ์ • ์†Œ์ฐจ ์†Œ์ฐฝ ์†Œ์ฑ„ ์†Œ์ฒœ ์†Œ์ฒจ ์†Œ์ฒญ ์†Œ์ดˆ ์†Œ์ด ์†Œํ‘œ ์†Œํ•˜ ์†Œํ•œ ์†Œํ•ด ์†Œํ–ฅ ์†Œํ˜„ ์†Œํ˜ผ ์†Œํ™ ์†Œํ™” ์†Œํšจ ์†Œ๋‚จ ์†Œ๋ˆˆ ์†Œ๋‹ฌ ์†Œ๋‹น ์†Œ๋ด„ ์†Œ๋น„ ์†Œ์Šฌ ์†Œ์—ด ์†Œ์˜ ์†Œ์ž ์†Œํƒœ ์†Œํ˜œ ์†”๋‚˜ ์†”๋‚œ ์†”๋‚ด ์†”๋‹ค ์†”๋‹จ ์†”๋‹ด ์†”๋„ ์†”๋ผ ์†”๋ž˜ ์†”๋ฅ˜ ์†”๋ฆฌ ์†”๋ชจ ์†”๋ฌด ์†”๋ฏธ ์†”๋ฏผ ์†”์‚ฌ ์†”์‚ฐ ์†”์ƒ ์†”์ƒˆ ์†”์ƒ ์†”์„œ ์†”์„  ์†”์„ค ์†”์„ฌ ์†”์„ฑ ์†”์†Œ ์†”์†” ์†”์†œ ์†”์†ก ์†”์ˆ˜ ์†”์‹œ ์†”์‹  ์†”์‹ค ์†”์‹ฌ ์†”์•„ ์†”์•ˆ ์†”์•  ์†”์–‘ ์†”์—ฌ ์†”์—ฐ ์†”์˜ˆ ์†”์˜ค ์†”์˜จ ์†”์š” ์†”์šฐ ์†”์›” ์†”์œ  ์†”์œค ์†”์œจ ์†”์€ ์†”์ด ์†”์ผ ์†”์ž„ ์†”์ • ์†”์ฐจ ์†”์ฐฝ ์†”์ฑ„ ์†”์ฒœ ์†”์ฒจ ์†”์ฒญ ์†”์ดˆ ์†”์ด ์†”ํ‘œ ์†”ํ•˜ ์†”ํ•œ ์†”ํ•ด ์†”ํ–ฅ ์†”ํ˜„ ์†”ํ˜ผ ์†”ํ™ ์†”ํ™” ์†”ํšจ ์†”๋‚จ ์†”๋ˆˆ ์†”๋‹ฌ ์†”๋‹น ์†”๋ด„ ์†”๋น„ ์†”์Šฌ ์†”์—ด ์†”์˜ ์†”์ž ์†”ํƒœ ์†”ํ˜œ ์†œ๋‚˜ ์†œ๋‚œ ์†œ๋‚ด ์†œ๋‹ค ์†œ๋‹จ ์†œ๋‹ด ์†œ๋„ ์†œ๋ผ ์†œ๋ž˜ ์†œ๋ฅ˜ ์†œ๋ฆฌ ์†œ๋ชจ ์†œ๋ฌด ์†œ๋ฏธ ์†œ๋ฏผ ์†œ์‚ฌ ์†œ์‚ฐ ์†œ์ƒ ์†œ์ƒˆ ์†œ์ƒ ์†œ์„œ ์†œ์„  ์†œ์„ค ์†œ์„ฌ ์†œ์„ฑ ์†œ์†Œ ์†œ์†” ์†œ์†œ ์†œ์†ก ์†œ์ˆ˜ ์†œ์‹œ ์†œ์‹  ์†œ์‹ค ์†œ์‹ฌ ์†œ์•„ ์†œ์•ˆ ์†œ์•  ์†œ์–‘ ์†œ์—ฌ ์†œ์—ฐ ์†œ์˜ˆ ์†œ์˜ค ์†œ์˜จ ์†œ์š” ์†œ์šฐ ์†œ์›” ์†œ์œ  ์†œ์œค ์†œ์œจ ์†œ์€ ์†œ์ด ์†œ์ผ ์†œ์ž„ ์†œ์ • ์†œ์ฐจ ์†œ์ฐฝ ์†œ์ฑ„ ์†œ์ฒœ ์†œ์ฒจ ์†œ์ฒญ ์†œ์ดˆ ์†œ์ด ์†œํ‘œ ์†œํ•˜ ์†œํ•œ ์†œํ•ด ์†œํ–ฅ ์†œํ˜„ ์†œํ˜ผ ์†œํ™ ์†œํ™” ์†œํšจ ์†œ๋‚จ ์†œ๋ˆˆ ์†œ๋‹ฌ ์†œ๋‹น ์†œ๋ด„ ์†œ๋น„ ์†œ์Šฌ ์†œ์—ด ์†œ์˜ ์†œ์ž ์†œํƒœ ์†œํ˜œ ์†ก๋‚˜ ์†ก๋‚œ ์†ก๋‚ด ์†ก๋‹ค ์†ก๋‹จ ์†ก๋‹ด ์†ก๋„ ์†ก๋ผ ์†ก๋ž˜ ์†ก๋ฅ˜ ์†ก๋ฆฌ ์†ก๋ชจ ์†ก๋ฌด ์†ก๋ฏธ ์†ก๋ฏผ ์†ก์‚ฌ ์†ก์‚ฐ ์†ก์ƒ ์†ก์ƒˆ ์†ก์ƒ ์†ก์„œ ์†ก์„  ์†ก์„ค ์†ก์„ฌ ์†ก์„ฑ ์†ก์†Œ ์†ก์†” ์†ก์†œ ์†ก์†ก ์†ก์ˆ˜ ์†ก์‹œ ์†ก์‹  ์†ก์‹ค ์†ก์‹ฌ ์†ก์•„ ์†ก์•ˆ ์†ก์•  ์†ก์–‘ ์†ก์—ฌ ์†ก์—ฐ ์†ก์˜ˆ ์†ก์˜ค ์†ก์˜จ ์†ก์š” ์†ก์šฐ ์†ก์›” ์†ก์œ  ์†ก์œค ์†ก์œจ ์†ก์€ ์†ก์ด ์†ก์ผ ์†ก์ž„ ์†ก์ • ์†ก์ฐจ ์†ก์ฐฝ ์†ก์ฑ„ ์†ก์ฒœ ์†ก์ฒจ ์†ก์ฒญ ์†ก์ดˆ ์†ก์ด ์†กํ‘œ ์†กํ•˜ ์†กํ•œ ์†กํ•ด ์†กํ–ฅ ์†กํ˜„ ์†กํ˜ผ ์†กํ™ ์†กํ™” ์†กํšจ ์†ก๋‚จ ์†ก๋ˆˆ ์†ก๋‹ฌ ์†ก๋‹น ์†ก๋ด„ ์†ก๋น„ ์†ก์Šฌ ์†ก์—ด ์†ก์˜ ์†ก์ž ์†กํƒœ ์†กํ˜œ ์ˆ˜๋‚˜ ์ˆ˜๋‚œ ์ˆ˜๋‚ด ์ˆ˜๋‹ค ์ˆ˜๋‹จ ์ˆ˜๋‹ด ์ˆ˜๋„ ์ˆ˜๋ผ ์ˆ˜๋ž˜ ์ˆ˜๋ฅ˜ ์ˆ˜๋ฆฌ ์ˆ˜๋ชจ ์ˆ˜๋ฌด ์ˆ˜๋ฏธ ์ˆ˜๋ฏผ ์ˆ˜์‚ฌ ์ˆ˜์‚ฐ ์ˆ˜์ƒ ์ˆ˜์ƒˆ ์ˆ˜์ƒ ์ˆ˜์„œ ์ˆ˜์„  ์ˆ˜์„ค ์ˆ˜์„ฌ ์ˆ˜์„ฑ ์ˆ˜์†Œ ์ˆ˜์†” ์ˆ˜์†œ ์ˆ˜์†ก ์ˆ˜์ˆ˜ ์ˆ˜์‹œ ์ˆ˜์‹  ์ˆ˜์‹ค ์ˆ˜์‹ฌ ์ˆ˜์•„ ์ˆ˜์•ˆ ์ˆ˜์•  ์ˆ˜์–‘ ์ˆ˜์—ฌ ์ˆ˜์—ฐ ์ˆ˜์˜ˆ ์ˆ˜์˜ค ์ˆ˜์˜จ ์ˆ˜์š” ์ˆ˜์šฐ ์ˆ˜์›” ์ˆ˜์œ  ์ˆ˜์œค ์ˆ˜์œจ ์ˆ˜์€ ์ˆ˜์ด ์ˆ˜์ผ ์ˆ˜์ž„ ์ˆ˜์ • ์ˆ˜์ฐจ ์ˆ˜์ฐฝ ์ˆ˜์ฑ„ ์ˆ˜์ฒœ ์ˆ˜์ฒจ ์ˆ˜์ฒญ ์ˆ˜์ดˆ ์ˆ˜์ด ์ˆ˜ํ‘œ ์ˆ˜ํ•˜ ์ˆ˜ํ•œ ์ˆ˜ํ•ด ์ˆ˜ํ–ฅ ์ˆ˜ํ˜„ ์ˆ˜ํ˜ผ ์ˆ˜ํ™ ์ˆ˜ํ™” ์ˆ˜ํšจ ์ˆ˜๋‚จ ์ˆ˜๋ˆˆ ์ˆ˜๋‹ฌ ์ˆ˜๋‹น ์ˆ˜๋ด„ ์ˆ˜๋น„ ์ˆ˜์Šฌ ์ˆ˜์—ด ์ˆ˜์˜ ์ˆ˜์ž ์ˆ˜ํƒœ ์ˆ˜ํ˜œ ์‹œ๋‚˜ ์‹œ๋‚œ ์‹œ๋‚ด ์‹œ๋‹ค ์‹œ๋‹จ ์‹œ๋‹ด ์‹œ๋„ ์‹œ๋ผ ์‹œ๋ž˜ ์‹œ๋ฅ˜ ์‹œ๋ฆฌ ์‹œ๋ชจ ์‹œ๋ฌด ์‹œ๋ฏธ ์‹œ๋ฏผ ์‹œ์‚ฌ ์‹œ์‚ฐ ์‹œ์ƒ ์‹œ์ƒˆ ์‹œ์ƒ ์‹œ์„œ ์‹œ์„  ์‹œ์„ค ์‹œ์„ฌ ์‹œ์„ฑ ์‹œ์†Œ ์‹œ์†” ์‹œ์†œ ์‹œ์†ก ์‹œ์ˆ˜ ์‹œ์‹œ ์‹œ์‹  ์‹œ์‹ค ์‹œ์‹ฌ ์‹œ์•„ ์‹œ์•ˆ ์‹œ์•  ์‹œ์–‘ ์‹œ์—ฌ ์‹œ์—ฐ ์‹œ์˜ˆ ์‹œ์˜ค ์‹œ์˜จ ์‹œ์š” ์‹œ์šฐ ์‹œ์›” ์‹œ์œ  ์‹œ์œค ์‹œ์œจ ์‹œ์€ ์‹œ์ด ์‹œ์ผ ์‹œ์ž„ ์‹œ์ • ์‹œ์ฐจ ์‹œ์ฐฝ ์‹œ์ฑ„ ์‹œ์ฒœ ์‹œ์ฒจ ์‹œ์ฒญ ์‹œ์ดˆ ์‹œ์ด ์‹œํ‘œ ์‹œํ•˜ ์‹œํ•œ ์‹œํ•ด ์‹œํ–ฅ ์‹œํ˜„ ์‹œํ˜ผ ์‹œํ™ ์‹œํ™” ์‹œํšจ ์‹œ๋‚จ ์‹œ๋ˆˆ ์‹œ๋‹ฌ ์‹œ๋‹น ์‹œ๋ด„ ์‹œ๋น„ ์‹œ์Šฌ ์‹œ์—ด ์‹œ์˜ ์‹œ์ž ์‹œํƒœ ์‹œํ˜œ ์‹ ๋‚˜ ์‹ ๋‚œ ์‹ ๋‚ด ์‹ ๋‹ค ์‹ ๋‹จ ์‹ ๋‹ด ์‹ ๋„ ์‹ ๋ผ ์‹ ๋ž˜ ์‹ ๋ฅ˜ ์‹ ๋ฆฌ ์‹ ๋ชจ ์‹ ๋ฌด ์‹ ๋ฏธ ์‹ ๋ฏผ ์‹ ์‚ฌ ์‹ ์‚ฐ ์‹ ์ƒ ์‹ ์ƒˆ ์‹ ์ƒ ์‹ ์„œ ์‹ ์„  ์‹ ์„ค ์‹ ์„ฌ ์‹ ์„ฑ ์‹ ์†Œ ์‹ ์†” ์‹ ์†œ ์‹ ์†ก ์‹ ์ˆ˜ ์‹ ์‹œ ์‹ ์‹  ์‹ ์‹ค ์‹ ์‹ฌ ์‹ ์•„ ์‹ ์•ˆ ์‹ ์•  ์‹ ์–‘ ์‹ ์—ฌ ์‹ ์—ฐ ์‹ ์˜ˆ ์‹ ์˜ค ์‹ ์˜จ ์‹ ์š” ์‹ ์šฐ ์‹ ์›” ์‹ ์œ  ์‹ ์œค ์‹ ์œจ ์‹ ์€ ์‹ ์ด ์‹ ์ผ ์‹ ์ž„ ์‹ ์ • ์‹ ์ฐจ ์‹ ์ฐฝ ์‹ ์ฑ„ ์‹ ์ฒœ ์‹ ์ฒจ ์‹ ์ฒญ ์‹ ์ดˆ ์‹ ์ด ์‹ ํ‘œ ์‹ ํ•˜ ์‹ ํ•œ ์‹ ํ•ด ์‹ ํ–ฅ ์‹ ํ˜„ ์‹ ํ˜ผ ์‹ ํ™ ์‹ ํ™” ์‹ ํšจ ์‹ ๋‚จ ์‹ ๋ˆˆ ์‹ ๋‹ฌ ์‹ ๋‹น ์‹ ๋ด„ ์‹ ๋น„ ์‹ ์Šฌ ์‹ ์—ด ์‹ ์˜ ์‹ ์ž ์‹ ํƒœ ์‹ ํ˜œ ์‹ค๋‚˜ ์‹ค๋‚œ ์‹ค๋‚ด ์‹ค๋‹ค ์‹ค๋‹จ ์‹ค๋‹ด ์‹ค๋„ ์‹ค๋ผ ์‹ค๋ž˜ ์‹ค๋ฅ˜ ์‹ค๋ฆฌ ์‹ค๋ชจ ์‹ค๋ฌด ์‹ค๋ฏธ ์‹ค๋ฏผ ์‹ค์‚ฌ ์‹ค์‚ฐ ์‹ค์ƒ ์‹ค์ƒˆ ์‹ค์ƒ ์‹ค์„œ ์‹ค์„  ์‹ค์„ค ์‹ค์„ฌ ์‹ค์„ฑ ์‹ค์†Œ ์‹ค์†” ์‹ค์†œ ์‹ค์†ก ์‹ค์ˆ˜ ์‹ค์‹œ ์‹ค์‹  ์‹ค์‹ค ์‹ค์‹ฌ ์‹ค์•„ ์‹ค์•ˆ ์‹ค์•  ์‹ค์–‘ ์‹ค์—ฌ ์‹ค์—ฐ ์‹ค์˜ˆ ์‹ค์˜ค ์‹ค์˜จ ์‹ค์š” ์‹ค์šฐ ์‹ค์›” ์‹ค์œ  ์‹ค์œค ์‹ค์œจ ์‹ค์€ ์‹ค์ด ์‹ค์ผ ์‹ค์ž„ ์‹ค์ • ์‹ค์ฐจ ์‹ค์ฐฝ ์‹ค์ฑ„ ์‹ค์ฒœ ์‹ค์ฒจ ์‹ค์ฒญ ์‹ค์ดˆ ์‹ค์ด ์‹คํ‘œ ์‹คํ•˜ ์‹คํ•œ ์‹คํ•ด ์‹คํ–ฅ ์‹คํ˜„ ์‹คํ˜ผ ์‹คํ™ ์‹คํ™” ์‹คํšจ ์‹ค๋‚จ ์‹ค๋ˆˆ ์‹ค๋‹ฌ ์‹ค๋‹น ์‹ค๋ด„ ์‹ค๋น„ ์‹ค์Šฌ ์‹ค์—ด ์‹ค์˜ ์‹ค์ž ์‹คํƒœ ์‹คํ˜œ ์‹ฌ๋‚˜ ์‹ฌ๋‚œ ์‹ฌ๋‚ด ์‹ฌ๋‹ค ์‹ฌ๋‹จ ์‹ฌ๋‹ด ์‹ฌ๋„ ์‹ฌ๋ผ ์‹ฌ๋ž˜ ์‹ฌ๋ฅ˜ ์‹ฌ๋ฆฌ ์‹ฌ๋ชจ ์‹ฌ๋ฌด ์‹ฌ๋ฏธ ์‹ฌ๋ฏผ ์‹ฌ์‚ฌ ์‹ฌ์‚ฐ ์‹ฌ์ƒ ์‹ฌ์ƒˆ ์‹ฌ์ƒ ์‹ฌ์„œ ์‹ฌ์„  ์‹ฌ์„ค ์‹ฌ์„ฌ ์‹ฌ์„ฑ ์‹ฌ์†Œ ์‹ฌ์†” ์‹ฌ์†œ ์‹ฌ์†ก ์‹ฌ์ˆ˜ ์‹ฌ์‹œ ์‹ฌ์‹  ์‹ฌ์‹ค ์‹ฌ์‹ฌ ์‹ฌ์•„ ์‹ฌ์•ˆ ์‹ฌ์•  ์‹ฌ์–‘ ์‹ฌ์—ฌ ์‹ฌ์—ฐ ์‹ฌ์˜ˆ ์‹ฌ์˜ค ์‹ฌ์˜จ ์‹ฌ์š” ์‹ฌ์šฐ ์‹ฌ์›” ์‹ฌ์œ  ์‹ฌ์œค ์‹ฌ์œจ ์‹ฌ์€ ์‹ฌ์ด ์‹ฌ์ผ ์‹ฌ์ž„ ์‹ฌ์ • ์‹ฌ์ฐจ ์‹ฌ์ฐฝ ์‹ฌ์ฑ„ ์‹ฌ์ฒœ ์‹ฌ์ฒจ ์‹ฌ์ฒญ ์‹ฌ์ดˆ ์‹ฌ์ด ์‹ฌํ‘œ ์‹ฌํ•˜ ์‹ฌํ•œ ์‹ฌํ•ด ์‹ฌํ–ฅ ์‹ฌํ˜„ ์‹ฌํ˜ผ ์‹ฌํ™ ์‹ฌํ™” ์‹ฌํšจ ์‹ฌ๋‚จ ์‹ฌ๋ˆˆ ์‹ฌ๋‹ฌ ์‹ฌ๋‹น ์‹ฌ๋ด„ ์‹ฌ๋น„ ์‹ฌ์Šฌ ์‹ฌ์—ด ์‹ฌ์˜ ์‹ฌ์ž ์‹ฌํƒœ ์‹ฌํ˜œ ์•„๋‚˜ ์•„๋‚œ ์•„๋‚ด ์•„๋‹ค ์•„๋‹จ ์•„๋‹ด ์•„๋„ ์•„๋ผ ์•„๋ž˜ ์•„๋ฅ˜ ์•„๋ฆฌ ์•„๋ชจ ์•„๋ฌด ์•„๋ฏธ ์•„๋ฏผ ์•„์‚ฌ ์•„์‚ฐ ์•„์ƒ ์•„์ƒˆ ์•„์ƒ ์•„์„œ ์•„์„  ์•„์„ค ์•„์„ฌ ์•„์„ฑ ์•„์†Œ ์•„์†” ์•„์†œ ์•„์†ก ์•„์ˆ˜ ์•„์‹œ ์•„์‹  ์•„์‹ค ์•„์‹ฌ ์•„์•„ ์•„์•ˆ ์•„์•  ์•„์–‘ ์•„์—ฌ ์•„์—ฐ ์•„์˜ˆ ์•„์˜ค ์•„์˜จ ์•„์š” ์•„์šฐ ์•„์›” ์•„์œ  ์•„์œค ์•„์œจ ์•„์€ ์•„์ด ์•„์ผ ์•„์ž„ ์•„์ • ์•„์ฐจ ์•„์ฐฝ ์•„์ฑ„ ์•„์ฒœ ์•„์ฒจ ์•„์ฒญ ์•„์ดˆ ์•„์ด ์•„ํ‘œ ์•„ํ•˜ ์•„ํ•œ ์•„ํ•ด ์•„ํ–ฅ ์•„ํ˜„ ์•„ํ˜ผ ์•„ํ™ ์•„ํ™” ์•„ํšจ ์•„๋‚จ ์•„๋ˆˆ ์•„๋‹ฌ ์•„๋‹น ์•„๋ด„ ์•„๋น„ ์•„์Šฌ ์•„์—ด ์•„์˜ ์•„์ž ์•„ํƒœ ์•„ํ˜œ ์•ˆ๋‚˜ ์•ˆ๋‚œ ์•ˆ๋‚ด ์•ˆ๋‹ค ์•ˆ๋‹จ ์•ˆ๋‹ด ์•ˆ๋„ ์•ˆ๋ผ ์•ˆ๋ž˜ ์•ˆ๋ฅ˜ ์•ˆ๋ฆฌ ์•ˆ๋ชจ ์•ˆ๋ฌด ์•ˆ๋ฏธ ์•ˆ๋ฏผ ์•ˆ์‚ฌ ์•ˆ์‚ฐ ์•ˆ์ƒ ์•ˆ์ƒˆ ์•ˆ์ƒ ์•ˆ์„œ ์•ˆ์„  ์•ˆ์„ค ์•ˆ์„ฌ ์•ˆ์„ฑ ์•ˆ์†Œ ์•ˆ์†” ์•ˆ์†œ ์•ˆ์†ก ์•ˆ์ˆ˜ ์•ˆ์‹œ ์•ˆ์‹  ์•ˆ์‹ค ์•ˆ์‹ฌ ์•ˆ์•„ ์•ˆ์•ˆ ์•ˆ์•  ์•ˆ์–‘ ์•ˆ์—ฌ ์•ˆ์—ฐ ์•ˆ์˜ˆ ์•ˆ์˜ค ์•ˆ์˜จ ์•ˆ์š” ์•ˆ์šฐ ์•ˆ์›” ์•ˆ์œ  ์•ˆ์œค ์•ˆ์œจ ์•ˆ์€ ์•ˆ์ด ์•ˆ์ผ ์•ˆ์ž„ ์•ˆ์ • ์•ˆ์ฐจ ์•ˆ์ฐฝ ์•ˆ์ฑ„ ์•ˆ์ฒœ ์•ˆ์ฒจ ์•ˆ์ฒญ ์•ˆ์ดˆ ์•ˆ์ด ์•ˆํ‘œ ์•ˆํ•˜ ์•ˆํ•œ ์•ˆํ•ด ์•ˆํ–ฅ ์•ˆํ˜„ ์•ˆํ˜ผ ์•ˆํ™ ์•ˆํ™” ์•ˆํšจ ์•ˆ๋‚จ ์•ˆ๋ˆˆ ์•ˆ๋‹ฌ ์•ˆ๋‹น ์•ˆ๋ด„ ์•ˆ๋น„ ์•ˆ์Šฌ ์•ˆ์—ด ์•ˆ์˜ ์•ˆ์ž ์•ˆํƒœ ์•ˆํ˜œ ์• ๋‚˜ ์• ๋‚œ ์• ๋‚ด ์• ๋‹ค ์• ๋‹จ ์• ๋‹ด ์• ๋„ ์• ๋ผ ์• ๋ž˜ ์• ๋ฅ˜ ์• ๋ฆฌ ์• ๋ชจ ์• ๋ฌด ์• ๋ฏธ ์• ๋ฏผ ์• ์‚ฌ ์• ์‚ฐ ์• ์ƒ ์• ์ƒˆ ์• ์ƒ ์• ์„œ ์• ์„  ์• ์„ค ์• ์„ฌ ์• ์„ฑ ์• ์†Œ ์• ์†” ์• ์†œ ์• ์†ก ์• ์ˆ˜ ์• ์‹œ ์• ์‹  ์• ์‹ค ์• ์‹ฌ ์• ์•„ ์• ์•ˆ ์• ์•  ์• ์–‘ ์• ์—ฌ ์• ์—ฐ ์• ์˜ˆ ์• ์˜ค ์• ์˜จ ์• ์š” ์• ์šฐ ์• ์›” ์• ์œ  ์• ์œค ์• ์œจ ์• ์€ ์• ์ด ์• ์ผ ์• ์ž„ ์• ์ • ์• ์ฐจ ์• ์ฐฝ ์• ์ฑ„ ์• ์ฒœ ์• ์ฒจ ์• ์ฒญ ์• ์ดˆ ์• ์ด ์• ํ‘œ ์• ํ•˜ ์• ํ•œ ์• ํ•ด ์• ํ–ฅ ์• ํ˜„ ์• ํ˜ผ ์• ํ™ ์• ํ™” ์• ํšจ ์• ๋‚จ ์• ๋ˆˆ ์• ๋‹ฌ ์• ๋‹น ์• ๋ด„ ์• ๋น„ ์• ์Šฌ ์• ์—ด ์• ์˜ ์• ์ž ์• ํƒœ ์• ํ˜œ ์–‘๋‚˜ ์–‘๋‚œ ์–‘๋‚ด ์–‘๋‹ค ์–‘๋‹จ ์–‘๋‹ด ์–‘๋„ ์–‘๋ผ ์–‘๋ž˜ ์–‘๋ฅ˜ ์–‘๋ฆฌ ์–‘๋ชจ ์–‘๋ฌด ์–‘๋ฏธ ์–‘๋ฏผ ์–‘์‚ฌ ์–‘์‚ฐ ์–‘์ƒ ์–‘์ƒˆ ์–‘์ƒ ์–‘์„œ ์–‘์„  ์–‘์„ค ์–‘์„ฌ ์–‘์„ฑ ์–‘์†Œ ์–‘์†” ์–‘์†œ ์–‘์†ก ์–‘์ˆ˜ ์–‘์‹œ ์–‘์‹  ์–‘์‹ค ์–‘์‹ฌ ์–‘์•„ ์–‘์•ˆ ์–‘์•  ์–‘์–‘ ์–‘์—ฌ ์–‘์—ฐ ์–‘์˜ˆ ์–‘์˜ค ์–‘์˜จ ์–‘์š” ์–‘์šฐ ์–‘์›” ์–‘์œ  ์–‘์œค ์–‘์œจ ์–‘์€ ์–‘์ด ์–‘์ผ ์–‘์ž„ ์–‘์ • ์–‘์ฐจ ์–‘์ฐฝ ์–‘์ฑ„ ์–‘์ฒœ ์–‘์ฒจ ์–‘์ฒญ ์–‘์ดˆ ์–‘์ด ์–‘ํ‘œ ์–‘ํ•˜ ์–‘ํ•œ ์–‘ํ•ด ์–‘ํ–ฅ ์–‘ํ˜„ ์–‘ํ˜ผ ์–‘ํ™ ์–‘ํ™” ์–‘ํšจ ์–‘๋‚จ ์–‘๋ˆˆ ์–‘๋‹ฌ ์–‘๋‹น ์–‘๋ด„ ์–‘๋น„ ์–‘์Šฌ ์–‘์—ด ์–‘์˜ ์–‘์ž ์–‘ํƒœ ์–‘ํ˜œ ์—ฌ๋‚˜ ์—ฌ๋‚œ ์—ฌ๋‚ด ์—ฌ๋‹ค ์—ฌ๋‹จ ์—ฌ๋‹ด ์—ฌ๋„ ์—ฌ๋ผ ์—ฌ๋ž˜ ์—ฌ๋ฅ˜ ์—ฌ๋ฆฌ ์—ฌ๋ชจ ์—ฌ๋ฌด ์—ฌ๋ฏธ ์—ฌ๋ฏผ ์—ฌ์‚ฌ ์—ฌ์‚ฐ ์—ฌ์ƒ ์—ฌ์ƒˆ ์—ฌ์ƒ ์—ฌ์„œ ์—ฌ์„  ์—ฌ์„ค ์—ฌ์„ฌ ์—ฌ์„ฑ ์—ฌ์†Œ ์—ฌ์†” ์—ฌ์†œ ์—ฌ์†ก ์—ฌ์ˆ˜ ์—ฌ์‹œ ์—ฌ์‹  ์—ฌ์‹ค ์—ฌ์‹ฌ ์—ฌ์•„ ์—ฌ์•ˆ ์—ฌ์•  ์—ฌ์–‘ ์—ฌ์—ฌ ์—ฌ์—ฐ ์—ฌ์˜ˆ ์—ฌ์˜ค ์—ฌ์˜จ ์—ฌ์š” ์—ฌ์šฐ ์—ฌ์›” ์—ฌ์œ  ์—ฌ์œค ์—ฌ์œจ ์—ฌ์€ ์—ฌ์ด ์—ฌ์ผ ์—ฌ์ž„ ์—ฌ์ • ์—ฌ์ฐจ ์—ฌ์ฐฝ ์—ฌ์ฑ„ ์—ฌ์ฒœ ์—ฌ์ฒจ ์—ฌ์ฒญ ์—ฌ์ดˆ ์—ฌ์ด ์—ฌํ‘œ ์—ฌํ•˜ ์—ฌํ•œ ์—ฌํ•ด ์—ฌํ–ฅ ์—ฌํ˜„ ์—ฌํ˜ผ ์—ฌํ™ ์—ฌํ™” ์—ฌํšจ ์—ฌ๋‚จ ์—ฌ๋ˆˆ ์—ฌ๋‹ฌ ์—ฌ๋‹น ์—ฌ๋ด„ ์—ฌ๋น„ ์—ฌ์Šฌ ์—ฌ์—ด ์—ฌ์˜ ์—ฌ์ž ์—ฌํƒœ ์—ฌํ˜œ ์—ฐ๋‚˜ ์—ฐ๋‚œ ์—ฐ๋‚ด ์—ฐ๋‹ค ์—ฐ๋‹จ ์—ฐ๋‹ด ์—ฐ๋„ ์—ฐ๋ผ ์—ฐ๋ž˜ ์—ฐ๋ฅ˜ ์—ฐ๋ฆฌ ์—ฐ๋ชจ ์—ฐ๋ฌด ์—ฐ๋ฏธ ์—ฐ๋ฏผ ์—ฐ์‚ฌ ์—ฐ์‚ฐ ์—ฐ์ƒ ์—ฐ์ƒˆ ์—ฐ์ƒ ์—ฐ์„œ ์—ฐ์„  ์—ฐ์„ค ์—ฐ์„ฌ ์—ฐ์„ฑ ์—ฐ์†Œ ์—ฐ์†” ์—ฐ์†œ ์—ฐ์†ก ์—ฐ์ˆ˜ ์—ฐ์‹œ ์—ฐ์‹  ์—ฐ์‹ค ์—ฐ์‹ฌ ์—ฐ์•„ ์—ฐ์•ˆ ์—ฐ์•  ์—ฐ์–‘ ์—ฐ์—ฌ ์—ฐ์—ฐ ์—ฐ์˜ˆ ์—ฐ์˜ค ์—ฐ์˜จ ์—ฐ์š” ์—ฐ์šฐ ์—ฐ์›” ์—ฐ์œ  ์—ฐ์œค ์—ฐ์œจ ์—ฐ์€ ์—ฐ์ด ์—ฐ์ผ ์—ฐ์ž„ ์—ฐ์ • ์—ฐ์ฐจ ์—ฐ์ฐฝ ์—ฐ์ฑ„ ์—ฐ์ฒœ ์—ฐ์ฒจ ์—ฐ์ฒญ ์—ฐ์ดˆ ์—ฐ์ด ์—ฐํ‘œ ์—ฐํ•˜ ์—ฐํ•œ ์—ฐํ•ด ์—ฐํ–ฅ ์—ฐํ˜„ ์—ฐํ˜ผ ์—ฐํ™ ์—ฐํ™” ์—ฐํšจ ์—ฐ๋‚จ ์—ฐ๋ˆˆ ์—ฐ๋‹ฌ ์—ฐ๋‹น ์—ฐ๋ด„ ์—ฐ๋น„ ์—ฐ์Šฌ ์—ฐ์—ด ์—ฐ์˜ ์—ฐ์ž ์—ฐํƒœ ์—ฐํ˜œ ์˜ˆ๋‚˜ ์˜ˆ๋‚œ ์˜ˆ๋‚ด ์˜ˆ๋‹ค ์˜ˆ๋‹จ ์˜ˆ๋‹ด ์˜ˆ๋„ ์˜ˆ๋ผ ์˜ˆ๋ž˜ ์˜ˆ๋ฅ˜ ์˜ˆ๋ฆฌ ์˜ˆ๋ชจ ์˜ˆ๋ฌด ์˜ˆ๋ฏธ ์˜ˆ๋ฏผ ์˜ˆ์‚ฌ ์˜ˆ์‚ฐ ์˜ˆ์ƒ ์˜ˆ์ƒˆ ์˜ˆ์ƒ ์˜ˆ์„œ ์˜ˆ์„  ์˜ˆ์„ค ์˜ˆ์„ฌ ์˜ˆ์„ฑ ์˜ˆ์†Œ ์˜ˆ์†” ์˜ˆ์†œ ์˜ˆ์†ก ์˜ˆ์ˆ˜ ์˜ˆ์‹œ ์˜ˆ์‹  ์˜ˆ์‹ค ์˜ˆ์‹ฌ ์˜ˆ์•„ ์˜ˆ์•ˆ ์˜ˆ์•  ์˜ˆ์–‘ ์˜ˆ์—ฌ ์˜ˆ์—ฐ ์˜ˆ์˜ˆ ์˜ˆ์˜ค ์˜ˆ์˜จ ์˜ˆ์š” ์˜ˆ์šฐ ์˜ˆ์›” ์˜ˆ์œ  ์˜ˆ์œค ์˜ˆ์œจ ์˜ˆ์€ ์˜ˆ์ด ์˜ˆ์ผ ์˜ˆ์ž„ ์˜ˆ์ • ์˜ˆ์ฐจ ์˜ˆ์ฐฝ ์˜ˆ์ฑ„ ์˜ˆ์ฒœ ์˜ˆ์ฒจ ์˜ˆ์ฒญ ์˜ˆ์ดˆ ์˜ˆ์ด ์˜ˆํ‘œ ์˜ˆํ•˜ ์˜ˆํ•œ ์˜ˆํ•ด ์˜ˆํ–ฅ ์˜ˆํ˜„ ์˜ˆํ˜ผ ์˜ˆํ™ ์˜ˆํ™” ์˜ˆํšจ ์˜ˆ๋‚จ ์˜ˆ๋ˆˆ ์˜ˆ๋‹ฌ ์˜ˆ๋‹น ์˜ˆ๋ด„ ์˜ˆ๋น„ ์˜ˆ์Šฌ ์˜ˆ์—ด ์˜ˆ์˜ ์˜ˆ์ž ์˜ˆํƒœ ์˜ˆํ˜œ ์˜ค๋‚˜ ์˜ค๋‚œ ์˜ค๋‚ด ์˜ค๋‹ค ์˜ค๋‹จ ์˜ค๋‹ด ์˜ค๋„ ์˜ค๋ผ ์˜ค๋ž˜ ์˜ค๋ฅ˜ ์˜ค๋ฆฌ ์˜ค๋ชจ ์˜ค๋ฌด ์˜ค๋ฏธ ์˜ค๋ฏผ ์˜ค์‚ฌ ์˜ค์‚ฐ ์˜ค์ƒ ์˜ค์ƒˆ ์˜ค์ƒ ์˜ค์„œ ์˜ค์„  ์˜ค์„ค ์˜ค์„ฌ ์˜ค์„ฑ ์˜ค์†Œ ์˜ค์†” ์˜ค์†œ ์˜ค์†ก ์˜ค์ˆ˜ ์˜ค์‹œ ์˜ค์‹  ์˜ค์‹ค ์˜ค์‹ฌ ์˜ค์•„ ์˜ค์•ˆ ์˜ค์•  ์˜ค์–‘ ์˜ค์—ฌ ์˜ค์—ฐ ์˜ค์˜ˆ ์˜ค์˜ค ์˜ค์˜จ ์˜ค์š” ์˜ค์šฐ ์˜ค์›” ์˜ค์œ  ์˜ค์œค ์˜ค์œจ ์˜ค์€ ์˜ค์ด ์˜ค์ผ ์˜ค์ž„ ์˜ค์ • ์˜ค์ฐจ ์˜ค์ฐฝ ์˜ค์ฑ„ ์˜ค์ฒœ ์˜ค์ฒจ ์˜ค์ฒญ ์˜ค์ดˆ ์˜ค์ด ์˜คํ‘œ ์˜คํ•˜ ์˜คํ•œ ์˜คํ•ด ์˜คํ–ฅ ์˜คํ˜„ ์˜คํ˜ผ ์˜คํ™ ์˜คํ™” ์˜คํšจ ์˜ค๋‚จ ์˜ค๋ˆˆ ์˜ค๋‹ฌ ์˜ค๋‹น ์˜ค๋ด„ ์˜ค๋น„ ์˜ค์Šฌ ์˜ค์—ด ์˜ค์˜ ์˜ค์ž ์˜คํƒœ ์˜คํ˜œ ์˜จ๋‚˜ ์˜จ๋‚œ ์˜จ๋‚ด ์˜จ๋‹ค ์˜จ๋‹จ ์˜จ๋‹ด ์˜จ๋„ ์˜จ๋ผ ์˜จ๋ž˜ ์˜จ๋ฅ˜ ์˜จ๋ฆฌ ์˜จ๋ชจ ์˜จ๋ฌด ์˜จ๋ฏธ ์˜จ๋ฏผ ์˜จ์‚ฌ ์˜จ์‚ฐ ์˜จ์ƒ ์˜จ์ƒˆ ์˜จ์ƒ ์˜จ์„œ ์˜จ์„  ์˜จ์„ค ์˜จ์„ฌ ์˜จ์„ฑ ์˜จ์†Œ ์˜จ์†” ์˜จ์†œ ์˜จ์†ก ์˜จ์ˆ˜ ์˜จ์‹œ ์˜จ์‹  ์˜จ์‹ค ์˜จ์‹ฌ ์˜จ์•„ ์˜จ์•ˆ ์˜จ์•  ์˜จ์–‘ ์˜จ์—ฌ ์˜จ์—ฐ ์˜จ์˜ˆ ์˜จ์˜ค ์˜จ์˜จ ์˜จ์š” ์˜จ์šฐ ์˜จ์›” ์˜จ์œ  ์˜จ์œค ์˜จ์œจ ์˜จ์€ ์˜จ์ด ์˜จ์ผ ์˜จ์ž„ ์˜จ์ • ์˜จ์ฐจ ์˜จ์ฐฝ ์˜จ์ฑ„ ์˜จ์ฒœ ์˜จ์ฒจ ์˜จ์ฒญ ์˜จ์ดˆ ์˜จ์ด ์˜จํ‘œ ์˜จํ•˜ ์˜จํ•œ ์˜จํ•ด ์˜จํ–ฅ ์˜จํ˜„ ์˜จํ˜ผ ์˜จํ™ ์˜จํ™” ์˜จํšจ ์˜จ๋‚จ ์˜จ๋ˆˆ ์˜จ๋‹ฌ ์˜จ๋‹น ์˜จ๋ด„ ์˜จ๋น„ ์˜จ์Šฌ ์˜จ์—ด ์˜จ์˜ ์˜จ์ž ์˜จํƒœ ์˜จํ˜œ ์š”๋‚˜ ์š”๋‚œ ์š”๋‚ด ์š”๋‹ค ์š”๋‹จ ์š”๋‹ด ์š”๋„ ์š”๋ผ ์š”๋ž˜ ์š”๋ฅ˜ ์š”๋ฆฌ ์š”๋ชจ ์š”๋ฌด ์š”๋ฏธ ์š”๋ฏผ ์š”์‚ฌ ์š”์‚ฐ ์š”์ƒ ์š”์ƒˆ ์š”์ƒ ์š”์„œ ์š”์„  ์š”์„ค ์š”์„ฌ ์š”์„ฑ ์š”์†Œ ์š”์†” ์š”์†œ ์š”์†ก ์š”์ˆ˜ ์š”์‹œ ์š”์‹  ์š”์‹ค ์š”์‹ฌ ์š”์•„ ์š”์•ˆ ์š”์•  ์š”์–‘ ์š”์—ฌ ์š”์—ฐ ์š”์˜ˆ ์š”์˜ค ์š”์˜จ ์š”์š” ์š”์šฐ ์š”์›” ์š”์œ  ์š”์œค ์š”์œจ ์š”์€ ์š”์ด ์š”์ผ ์š”์ž„ ์š”์ • ์š”์ฐจ ์š”์ฐฝ ์š”์ฑ„ ์š”์ฒœ ์š”์ฒจ ์š”์ฒญ ์š”์ดˆ ์š”์ด ์š”ํ‘œ ์š”ํ•˜ ์š”ํ•œ ์š”ํ•ด ์š”ํ–ฅ ์š”ํ˜„ ์š”ํ˜ผ ์š”ํ™ ์š”ํ™” ์š”ํšจ ์š”๋‚จ ์š”๋ˆˆ ์š”๋‹ฌ ์š”๋‹น ์š”๋ด„ ์š”๋น„ ์š”์Šฌ ์š”์—ด ์š”์˜ ์š”์ž ์š”ํƒœ ์š”ํ˜œ ์šฐ๋‚˜ ์šฐ๋‚œ ์šฐ๋‚ด ์šฐ๋‹ค ์šฐ๋‹จ ์šฐ๋‹ด ์šฐ๋„ ์šฐ๋ผ ์šฐ๋ž˜ ์šฐ๋ฅ˜ ์šฐ๋ฆฌ ์šฐ๋ชจ ์šฐ๋ฌด ์šฐ๋ฏธ ์šฐ๋ฏผ ์šฐ์‚ฌ ์šฐ์‚ฐ ์šฐ์ƒ ์šฐ์ƒˆ ์šฐ์ƒ ์šฐ์„œ ์šฐ์„  ์šฐ์„ค ์šฐ์„ฌ ์šฐ์„ฑ ์šฐ์†Œ ์šฐ์†” ์šฐ์†œ ์šฐ์†ก ์šฐ์ˆ˜ ์šฐ์‹œ ์šฐ์‹  ์šฐ์‹ค ์šฐ์‹ฌ ์šฐ์•„ ์šฐ์•ˆ ์šฐ์•  ์šฐ์–‘ ์šฐ์—ฌ ์šฐ์—ฐ ์šฐ์˜ˆ ์šฐ์˜ค ์šฐ์˜จ ์šฐ์š” ์šฐ์šฐ ์šฐ์›” ์šฐ์œ  ์šฐ์œค ์šฐ์œจ ์šฐ์€ ์šฐ์ด ์šฐ์ผ ์šฐ์ž„ ์šฐ์ • ์šฐ์ฐจ ์šฐ์ฐฝ ์šฐ์ฑ„ ์šฐ์ฒœ ์šฐ์ฒจ ์šฐ์ฒญ ์šฐ์ดˆ ์šฐ์ด ์šฐํ‘œ ์šฐํ•˜ ์šฐํ•œ ์šฐํ•ด ์šฐํ–ฅ ์šฐํ˜„ ์šฐํ˜ผ ์šฐํ™ ์šฐํ™” ์šฐํšจ ์šฐ๋‚จ ์šฐ๋ˆˆ ์šฐ๋‹ฌ ์šฐ๋‹น ์šฐ๋ด„ ์šฐ๋น„ ์šฐ์Šฌ ์šฐ์—ด ์šฐ์˜ ์šฐ์ž ์šฐํƒœ ์šฐํ˜œ ์›”๋‚˜ ์›”๋‚œ ์›”๋‚ด ์›”๋‹ค ์›”๋‹จ ์›”๋‹ด ์›”๋„ ์›”๋ผ ์›”๋ž˜ ์›”๋ฅ˜ ์›”๋ฆฌ ์›”๋ชจ ์›”๋ฌด ์›”๋ฏธ ์›”๋ฏผ ์›”์‚ฌ ์›”์‚ฐ ์›”์ƒ ์›”์ƒˆ ์›”์ƒ ์›”์„œ ์›”์„  ์›”์„ค ์›”์„ฌ ์›”์„ฑ ์›”์†Œ ์›”์†” ์›”์†œ ์›”์†ก ์›”์ˆ˜ ์›”์‹œ ์›”์‹  ์›”์‹ค ์›”์‹ฌ ์›”์•„ ์›”์•ˆ ์›”์•  ์›”์–‘ ์›”์—ฌ ์›”์—ฐ ์›”์˜ˆ ์›”์˜ค ์›”์˜จ ์›”์š” ์›”์šฐ ์›”์›” ์›”์œ  ์›”์œค ์›”์œจ ์›”์€ ์›”์ด ์›”์ผ ์›”์ž„ ์›”์ • ์›”์ฐจ ์›”์ฐฝ ์›”์ฑ„ ์›”์ฒœ ์›”์ฒจ ์›”์ฒญ ์›”์ดˆ ์›”์ด ์›”ํ‘œ ์›”ํ•˜ ์›”ํ•œ ์›”ํ•ด ์›”ํ–ฅ ์›”ํ˜„ ์›”ํ˜ผ ์›”ํ™ ์›”ํ™” ์›”ํšจ ์›”๋‚จ ์›”๋ˆˆ ์›”๋‹ฌ ์›”๋‹น ์›”๋ด„ ์›”๋น„ ์›”์Šฌ ์›”์—ด ์›”์˜ ์›”์ž ์›”ํƒœ ์›”ํ˜œ ์œ ๋‚˜ ์œ ๋‚œ ์œ ๋‚ด ์œ ๋‹ค ์œ ๋‹จ ์œ ๋‹ด ์œ ๋„ ์œ ๋ผ ์œ ๋ž˜ ์œ ๋ฅ˜ ์œ ๋ฆฌ ์œ ๋ชจ ์œ ๋ฌด ์œ ๋ฏธ ์œ ๋ฏผ ์œ ์‚ฌ ์œ ์‚ฐ ์œ ์ƒ ์œ ์ƒˆ ์œ ์ƒ ์œ ์„œ ์œ ์„  ์œ ์„ค ์œ ์„ฌ ์œ ์„ฑ ์œ ์†Œ ์œ ์†” ์œ ์†œ ์œ ์†ก ์œ ์ˆ˜ ์œ ์‹œ ์œ ์‹  ์œ ์‹ค ์œ ์‹ฌ ์œ ์•„ ์œ ์•ˆ ์œ ์•  ์œ ์–‘ ์œ ์—ฌ ์œ ์—ฐ ์œ ์˜ˆ ์œ ์˜ค ์œ ์˜จ ์œ ์š” ์œ ์šฐ ์œ ์›” ์œ ์œ  ์œ ์œค ์œ ์œจ ์œ ์€ ์œ ์ด ์œ ์ผ ์œ ์ž„ ์œ ์ • ์œ ์ฐจ ์œ ์ฐฝ ์œ ์ฑ„ ์œ ์ฒœ ์œ ์ฒจ ์œ ์ฒญ ์œ ์ดˆ ์œ ์ด ์œ ํ‘œ ์œ ํ•˜ ์œ ํ•œ ์œ ํ•ด ์œ ํ–ฅ ์œ ํ˜„ ์œ ํ˜ผ ์œ ํ™ ์œ ํ™” ์œ ํšจ ์œ ๋‚จ ์œ ๋ˆˆ ์œ ๋‹ฌ ์œ ๋‹น ์œ ๋ด„ ์œ ๋น„ ์œ ์Šฌ ์œ ์—ด ์œ ์˜ ์œ ์ž ์œ ํƒœ ์œ ํ˜œ ์œค๋‚˜ ์œค๋‚œ ์œค๋‚ด ์œค๋‹ค ์œค๋‹จ ์œค๋‹ด ์œค๋„ ์œค๋ผ ์œค๋ž˜ ์œค๋ฅ˜ ์œค๋ฆฌ ์œค๋ชจ ์œค๋ฌด ์œค๋ฏธ ์œค๋ฏผ ์œค์‚ฌ ์œค์‚ฐ ์œค์ƒ ์œค์ƒˆ ์œค์ƒ ์œค์„œ ์œค์„  ์œค์„ค ์œค์„ฌ ์œค์„ฑ ์œค์†Œ ์œค์†” ์œค์†œ ์œค์†ก ์œค์ˆ˜ ์œค์‹œ ์œค์‹  ์œค์‹ค ์œค์‹ฌ ์œค์•„ ์œค์•ˆ ์œค์•  ์œค์–‘ ์œค์—ฌ ์œค์—ฐ ์œค์˜ˆ ์œค์˜ค ์œค์˜จ ์œค์š” ์œค์šฐ ์œค์›” ์œค์œ  ์œค์œค ์œค์œจ ์œค์€ ์œค์ด ์œค์ผ ์œค์ž„ ์œค์ • ์œค์ฐจ ์œค์ฐฝ ์œค์ฑ„ ์œค์ฒœ ์œค์ฒจ ์œค์ฒญ ์œค์ดˆ ์œค์ด ์œคํ‘œ ์œคํ•˜ ์œคํ•œ ์œคํ•ด ์œคํ–ฅ ์œคํ˜„ ์œคํ˜ผ ์œคํ™ ์œคํ™” ์œคํšจ ์œค๋‚จ ์œค๋ˆˆ ์œค๋‹ฌ ์œค๋‹น ์œค๋ด„ ์œค๋น„ ์œค์Šฌ ์œค์—ด ์œค์˜ ์œค์ž ์œคํƒœ ์œคํ˜œ ์œจ๋‚˜ ์œจ๋‚œ ์œจ๋‚ด ์œจ๋‹ค ์œจ๋‹จ ์œจ๋‹ด ์œจ๋„ ์œจ๋ผ ์œจ๋ž˜ ์œจ๋ฅ˜ ์œจ๋ฆฌ ์œจ๋ชจ ์œจ๋ฌด ์œจ๋ฏธ ์œจ๋ฏผ ์œจ์‚ฌ ์œจ์‚ฐ ์œจ์ƒ ์œจ์ƒˆ ์œจ์ƒ ์œจ์„œ ์œจ์„  ์œจ์„ค ์œจ์„ฌ ์œจ์„ฑ ์œจ์†Œ ์œจ์†” ์œจ์†œ ์œจ์†ก ์œจ์ˆ˜ ์œจ์‹œ ์œจ์‹  ์œจ์‹ค ์œจ์‹ฌ ์œจ์•„ ์œจ์•ˆ ์œจ์•  ์œจ์–‘ ์œจ์—ฌ ์œจ์—ฐ ์œจ์˜ˆ ์œจ์˜ค ์œจ์˜จ ์œจ์š” ์œจ์šฐ ์œจ์›” ์œจ์œ  ์œจ์œค ์œจ์œจ ์œจ์€ ์œจ์ด ์œจ์ผ ์œจ์ž„ ์œจ์ • ์œจ์ฐจ ์œจ์ฐฝ ์œจ์ฑ„ ์œจ์ฒœ ์œจ์ฒจ ์œจ์ฒญ ์œจ์ดˆ ์œจ์ด ์œจํ‘œ ์œจํ•˜ ์œจํ•œ ์œจํ•ด ์œจํ–ฅ ์œจํ˜„ ์œจํ˜ผ ์œจํ™ ์œจํ™” ์œจํšจ ์œจ๋‚จ ์œจ๋ˆˆ ์œจ๋‹ฌ ์œจ๋‹น ์œจ๋ด„ ์œจ๋น„ ์œจ์Šฌ ์œจ์—ด ์œจ์˜ ์œจ์ž ์œจํƒœ ์œจํ˜œ ์€๋‚˜ ์€๋‚œ ์€๋‚ด ์€๋‹ค ์€๋‹จ ์€๋‹ด ์€๋„ ์€๋ผ ์€๋ž˜ ์€๋ฅ˜ ์€๋ฆฌ ์€๋ชจ ์€๋ฌด ์€๋ฏธ ์€๋ฏผ ์€์‚ฌ ์€์‚ฐ ์€์ƒ ์€์ƒˆ ์€์ƒ ์€์„œ ์€์„  ์€์„ค ์€์„ฌ ์€์„ฑ ์€์†Œ ์€์†” ์€์†œ ์€์†ก ์€์ˆ˜ ์€์‹œ ์€์‹  ์€์‹ค ์€์‹ฌ ์€์•„ ์€์•ˆ ์€์•  ์€์–‘ ์€์—ฌ ์€์—ฐ ์€์˜ˆ ์€์˜ค ์€์˜จ ์€์š” ์€์šฐ ์€์›” ์€์œ  ์€์œค ์€์œจ ์€์€ ์€์ด ์€์ผ ์€์ž„ ์€์ • ์€์ฐจ ์€์ฐฝ ์€์ฑ„ ์€์ฒœ ์€์ฒจ ์€์ฒญ ์€์ดˆ ์€์ด ์€ํ‘œ ์€ํ•˜ ์€ํ•œ ์€ํ•ด ์€ํ–ฅ ์€ํ˜„ ์€ํ˜ผ ์€ํ™ ์€ํ™” ์€ํšจ ์€๋‚จ ์€๋ˆˆ ์€๋‹ฌ ์€๋‹น ์€๋ด„ ์€๋น„ ์€์Šฌ ์€์—ด ์€์˜ ์€์ž ์€ํƒœ ์€ํ˜œ ์ด๋‚˜ ์ด๋‚œ ์ด๋‚ด ์ด๋‹ค ์ด๋‹จ ์ด๋‹ด ์ด๋„ ์ด๋ผ ์ด๋ž˜ ์ด๋ฅ˜ ์ด๋ฆฌ ์ด๋ชจ ์ด๋ฌด ์ด๋ฏธ ์ด๋ฏผ ์ด์‚ฌ ์ด์‚ฐ ์ด์ƒ ์ด์ƒˆ ์ด์ƒ ์ด์„œ ์ด์„  ์ด์„ค ์ด์„ฌ ์ด์„ฑ ์ด์†Œ ์ด์†” ์ด์†œ ์ด์†ก ์ด์ˆ˜ ์ด์‹œ ์ด์‹  ์ด์‹ค ์ด์‹ฌ ์ด์•„ ์ด์•ˆ ์ด์•  ์ด์–‘ ์ด์—ฌ ์ด์—ฐ ์ด์˜ˆ ์ด์˜ค ์ด์˜จ ์ด์š” ์ด์šฐ ์ด์›” ์ด์œ  ์ด์œค ์ด์œจ ์ด์€ ์ด์ด ์ด์ผ ์ด์ž„ ์ด์ • ์ด์ฐจ ์ด์ฐฝ ์ด์ฑ„ ์ด์ฒœ ์ด์ฒจ ์ด์ฒญ ์ด์ดˆ ์ด์ด ์ดํ‘œ ์ดํ•˜ ์ดํ•œ ์ดํ•ด ์ดํ–ฅ ์ดํ˜„ ์ดํ˜ผ ์ดํ™ ์ดํ™” ์ดํšจ ์ด๋‚จ ์ด๋ˆˆ ์ด๋‹ฌ ์ด๋‹น ์ด๋ด„ ์ด๋น„ ์ด์Šฌ ์ด์—ด ์ด์˜ ์ด์ž ์ดํƒœ ์ดํ˜œ ์ผ๋‚˜ ์ผ๋‚œ ์ผ๋‚ด ์ผ๋‹ค ์ผ๋‹จ ์ผ๋‹ด ์ผ๋„ ์ผ๋ผ ์ผ๋ž˜ ์ผ๋ฅ˜ ์ผ๋ฆฌ ์ผ๋ชจ ์ผ๋ฌด ์ผ๋ฏธ ์ผ๋ฏผ ์ผ์‚ฌ ์ผ์‚ฐ ์ผ์ƒ ์ผ์ƒˆ ์ผ์ƒ ์ผ์„œ ์ผ์„  ์ผ์„ค ์ผ์„ฌ ์ผ์„ฑ ์ผ์†Œ ์ผ์†” ์ผ์†œ ์ผ์†ก ์ผ์ˆ˜ ์ผ์‹œ ์ผ์‹  ์ผ์‹ค ์ผ์‹ฌ ์ผ์•„ ์ผ์•ˆ ์ผ์•  ์ผ์–‘ ์ผ์—ฌ ์ผ์—ฐ ์ผ์˜ˆ ์ผ์˜ค ์ผ์˜จ ์ผ์š” ์ผ์šฐ ์ผ์›” ์ผ์œ  ์ผ์œค ์ผ์œจ ์ผ์€ ์ผ์ด ์ผ์ผ ์ผ์ž„ ์ผ์ • ์ผ์ฐจ ์ผ์ฐฝ ์ผ์ฑ„ ์ผ์ฒœ ์ผ์ฒจ ์ผ์ฒญ ์ผ์ดˆ ์ผ์ด ์ผํ‘œ ์ผํ•˜ ์ผํ•œ ์ผํ•ด ์ผํ–ฅ ์ผํ˜„ ์ผํ˜ผ ์ผํ™ ์ผํ™” ์ผํšจ ์ผ๋‚จ ์ผ๋ˆˆ ์ผ๋‹ฌ ์ผ๋‹น ์ผ๋ด„ ์ผ๋น„ ์ผ์Šฌ ์ผ์—ด ์ผ์˜ ์ผ์ž ์ผํƒœ ์ผํ˜œ ์ž„๋‚˜ ์ž„๋‚œ ์ž„๋‚ด ์ž„๋‹ค ์ž„๋‹จ ์ž„๋‹ด ์ž„๋„ ์ž„๋ผ ์ž„๋ž˜ ์ž„๋ฅ˜ ์ž„๋ฆฌ ์ž„๋ชจ ์ž„๋ฌด ์ž„๋ฏธ ์ž„๋ฏผ ์ž„์‚ฌ ์ž„์‚ฐ ์ž„์ƒ ์ž„์ƒˆ ์ž„์ƒ ์ž„์„œ ์ž„์„  ์ž„์„ค ์ž„์„ฌ ์ž„์„ฑ ์ž„์†Œ ์ž„์†” ์ž„์†œ ์ž„์†ก ์ž„์ˆ˜ ์ž„์‹œ ์ž„์‹  ์ž„์‹ค ์ž„์‹ฌ ์ž„์•„ ์ž„์•ˆ ์ž„์•  ์ž„์–‘ ์ž„์—ฌ ์ž„์—ฐ ์ž„์˜ˆ ์ž„์˜ค ์ž„์˜จ ์ž„์š” ์ž„์šฐ ์ž„์›” ์ž„์œ  ์ž„์œค ์ž„์œจ ์ž„์€ ์ž„์ด ์ž„์ผ ์ž„์ž„ ์ž„์ • ์ž„์ฐจ ์ž„์ฐฝ ์ž„์ฑ„ ์ž„์ฒœ ์ž„์ฒจ ์ž„์ฒญ ์ž„์ดˆ ์ž„์ด ์ž„ํ‘œ ์ž„ํ•˜ ์ž„ํ•œ ์ž„ํ•ด ์ž„ํ–ฅ ์ž„ํ˜„ ์ž„ํ˜ผ ์ž„ํ™ ์ž„ํ™” ์ž„ํšจ ์ž„๋‚จ ์ž„๋ˆˆ ์ž„๋‹ฌ ์ž„๋‹น ์ž„๋ด„ ์ž„๋น„ ์ž„์Šฌ ์ž„์—ด ์ž„์˜ ์ž„์ž ์ž„ํƒœ ์ž„ํ˜œ ์ •๋‚˜ ์ •๋‚œ ์ •๋‚ด ์ •๋‹ค ์ •๋‹จ ์ •๋‹ด ์ •๋„ ์ •๋ผ ์ •๋ž˜ ์ •๋ฅ˜ ์ •๋ฆฌ ์ •๋ชจ ์ •๋ฌด ์ •๋ฏธ ์ •๋ฏผ ์ •์‚ฌ ์ •์‚ฐ ์ •์ƒ ์ •์ƒˆ ์ •์ƒ ์ •์„œ ์ •์„  ์ •์„ค ์ •์„ฌ ์ •์„ฑ ์ •์†Œ ์ •์†” ์ •์†œ ์ •์†ก ์ •์ˆ˜ ์ •์‹œ ์ •์‹  ์ •์‹ค ์ •์‹ฌ ์ •์•„ ์ •์•ˆ ์ •์•  ์ •์–‘ ์ •์—ฌ ์ •์—ฐ ์ •์˜ˆ ์ •์˜ค ์ •์˜จ ์ •์š” ์ •์šฐ ์ •์›” ์ •์œ  ์ •์œค ์ •์œจ ์ •์€ ์ •์ด ์ •์ผ ์ •์ž„ ์ •์ • ์ •์ฐจ ์ •์ฐฝ ์ •์ฑ„ ์ •์ฒœ ์ •์ฒจ ์ •์ฒญ ์ •์ดˆ ์ •์ด ์ •ํ‘œ ์ •ํ•˜ ์ •ํ•œ ์ •ํ•ด ์ •ํ–ฅ ์ •ํ˜„ ์ •ํ˜ผ ์ •ํ™ ์ •ํ™” ์ •ํšจ ์ •๋‚จ ์ •๋ˆˆ ์ •๋‹ฌ ์ •๋‹น ์ •๋ด„ ์ •๋น„ ์ •์Šฌ ์ •์—ด ์ •์˜ ์ •์ž ์ •ํƒœ ์ •ํ˜œ ์ฐจ๋‚˜ ์ฐจ๋‚œ ์ฐจ๋‚ด ์ฐจ๋‹ค ์ฐจ๋‹จ ์ฐจ๋‹ด ์ฐจ๋„ ์ฐจ๋ผ ์ฐจ๋ž˜ ์ฐจ๋ฅ˜ ์ฐจ๋ฆฌ ์ฐจ๋ชจ ์ฐจ๋ฌด ์ฐจ๋ฏธ ์ฐจ๋ฏผ ์ฐจ์‚ฌ ์ฐจ์‚ฐ ์ฐจ์ƒ ์ฐจ์ƒˆ ์ฐจ์ƒ ์ฐจ์„œ ์ฐจ์„  ์ฐจ์„ค ์ฐจ์„ฌ ์ฐจ์„ฑ ์ฐจ์†Œ ์ฐจ์†” ์ฐจ์†œ ์ฐจ์†ก ์ฐจ์ˆ˜ ์ฐจ์‹œ ์ฐจ์‹  ์ฐจ์‹ค ์ฐจ์‹ฌ ์ฐจ์•„ ์ฐจ์•ˆ ์ฐจ์•  ์ฐจ์–‘ ์ฐจ์—ฌ ์ฐจ์—ฐ ์ฐจ์˜ˆ ์ฐจ์˜ค ์ฐจ์˜จ ์ฐจ์š” ์ฐจ์šฐ ์ฐจ์›” ์ฐจ์œ  ์ฐจ์œค ์ฐจ์œจ ์ฐจ์€ ์ฐจ์ด ์ฐจ์ผ ์ฐจ์ž„ ์ฐจ์ • ์ฐจ์ฐจ ์ฐจ์ฐฝ ์ฐจ์ฑ„ ์ฐจ์ฒœ ์ฐจ์ฒจ ์ฐจ์ฒญ ์ฐจ์ดˆ ์ฐจ์ด ์ฐจํ‘œ ์ฐจํ•˜ ์ฐจํ•œ ์ฐจํ•ด ์ฐจํ–ฅ ์ฐจํ˜„ ์ฐจํ˜ผ ์ฐจํ™ ์ฐจํ™” ์ฐจํšจ ์ฐจ๋‚จ ์ฐจ๋ˆˆ ์ฐจ๋‹ฌ ์ฐจ๋‹น ์ฐจ๋ด„ ์ฐจ๋น„ ์ฐจ์Šฌ ์ฐจ์—ด ์ฐจ์˜ ์ฐจ์ž ์ฐจํƒœ ์ฐจํ˜œ ์ฐฝ๋‚˜ ์ฐฝ๋‚œ ์ฐฝ๋‚ด ์ฐฝ๋‹ค ์ฐฝ๋‹จ ์ฐฝ๋‹ด ์ฐฝ๋„ ์ฐฝ๋ผ ์ฐฝ๋ž˜ ์ฐฝ๋ฅ˜ ์ฐฝ๋ฆฌ ์ฐฝ๋ชจ ์ฐฝ๋ฌด ์ฐฝ๋ฏธ ์ฐฝ๋ฏผ ์ฐฝ์‚ฌ ์ฐฝ์‚ฐ ์ฐฝ์ƒ ์ฐฝ์ƒˆ ์ฐฝ์ƒ ์ฐฝ์„œ ์ฐฝ์„  ์ฐฝ์„ค ์ฐฝ์„ฌ ์ฐฝ์„ฑ ์ฐฝ์†Œ ์ฐฝ์†” ์ฐฝ์†œ ์ฐฝ์†ก ์ฐฝ์ˆ˜ ์ฐฝ์‹œ ์ฐฝ์‹  ์ฐฝ์‹ค ์ฐฝ์‹ฌ ์ฐฝ์•„ ์ฐฝ์•ˆ ์ฐฝ์•  ์ฐฝ์–‘ ์ฐฝ์—ฌ ์ฐฝ์—ฐ ์ฐฝ์˜ˆ ์ฐฝ์˜ค ์ฐฝ์˜จ ์ฐฝ์š” ์ฐฝ์šฐ ์ฐฝ์›” ์ฐฝ์œ  ์ฐฝ์œค ์ฐฝ์œจ ์ฐฝ์€ ์ฐฝ์ด ์ฐฝ์ผ ์ฐฝ์ž„ ์ฐฝ์ • ์ฐฝ์ฐจ ์ฐฝ์ฐฝ ์ฐฝ์ฑ„ ์ฐฝ์ฒœ ์ฐฝ์ฒจ ์ฐฝ์ฒญ ์ฐฝ์ดˆ ์ฐฝ์ด ์ฐฝํ‘œ ์ฐฝํ•˜ ์ฐฝํ•œ ์ฐฝํ•ด ์ฐฝํ–ฅ ์ฐฝํ˜„ ์ฐฝํ˜ผ ์ฐฝํ™ ์ฐฝํ™” ์ฐฝํšจ ์ฐฝ๋‚จ ์ฐฝ๋ˆˆ ์ฐฝ๋‹ฌ ์ฐฝ๋‹น ์ฐฝ๋ด„ ์ฐฝ๋น„ ์ฐฝ์Šฌ ์ฐฝ์—ด ์ฐฝ์˜ ์ฐฝ์ž ์ฐฝํƒœ ์ฐฝํ˜œ ์ฑ„๋‚˜ ์ฑ„๋‚œ ์ฑ„๋‚ด ์ฑ„๋‹ค ์ฑ„๋‹จ ์ฑ„๋‹ด ์ฑ„๋„ ์ฑ„๋ผ ์ฑ„๋ž˜ ์ฑ„๋ฅ˜ ์ฑ„๋ฆฌ ์ฑ„๋ชจ ์ฑ„๋ฌด ์ฑ„๋ฏธ ์ฑ„๋ฏผ ์ฑ„์‚ฌ ์ฑ„์‚ฐ ์ฑ„์ƒ ์ฑ„์ƒˆ ์ฑ„์ƒ ์ฑ„์„œ ์ฑ„์„  ์ฑ„์„ค ์ฑ„์„ฌ ์ฑ„์„ฑ ์ฑ„์†Œ ์ฑ„์†” ์ฑ„์†œ ์ฑ„์†ก ์ฑ„์ˆ˜ ์ฑ„์‹œ ์ฑ„์‹  ์ฑ„์‹ค ์ฑ„์‹ฌ ์ฑ„์•„ ์ฑ„์•ˆ ์ฑ„์•  ์ฑ„์–‘ ์ฑ„์—ฌ ์ฑ„์—ฐ ์ฑ„์˜ˆ ์ฑ„์˜ค ์ฑ„์˜จ ์ฑ„์š” ์ฑ„์šฐ ์ฑ„์›” ์ฑ„์œ  ์ฑ„์œค ์ฑ„์œจ ์ฑ„์€ ์ฑ„์ด ์ฑ„์ผ ์ฑ„์ž„ ์ฑ„์ • ์ฑ„์ฐจ ์ฑ„์ฐฝ ์ฑ„์ฑ„ ์ฑ„์ฒœ ์ฑ„์ฒจ ์ฑ„์ฒญ ์ฑ„์ดˆ ์ฑ„์ด ์ฑ„ํ‘œ ์ฑ„ํ•˜ ์ฑ„ํ•œ ์ฑ„ํ•ด ์ฑ„ํ–ฅ ์ฑ„ํ˜„ ์ฑ„ํ˜ผ ์ฑ„ํ™ ์ฑ„ํ™” ์ฑ„ํšจ ์ฑ„๋‚จ ์ฑ„๋ˆˆ ์ฑ„๋‹ฌ ์ฑ„๋‹น ์ฑ„๋ด„ ์ฑ„๋น„ ์ฑ„์Šฌ ์ฑ„์—ด ์ฑ„์˜ ์ฑ„์ž ์ฑ„ํƒœ ์ฑ„ํ˜œ ์ฒœ๋‚˜ ์ฒœ๋‚œ ์ฒœ๋‚ด ์ฒœ๋‹ค ์ฒœ๋‹จ ์ฒœ๋‹ด ์ฒœ๋„ ์ฒœ๋ผ ์ฒœ๋ž˜ ์ฒœ๋ฅ˜ ์ฒœ๋ฆฌ ์ฒœ๋ชจ ์ฒœ๋ฌด ์ฒœ๋ฏธ ์ฒœ๋ฏผ ์ฒœ์‚ฌ ์ฒœ์‚ฐ ์ฒœ์ƒ ์ฒœ์ƒˆ ์ฒœ์ƒ ์ฒœ์„œ ์ฒœ์„  ์ฒœ์„ค ์ฒœ์„ฌ ์ฒœ์„ฑ ์ฒœ์†Œ ์ฒœ์†” ์ฒœ์†œ ์ฒœ์†ก ์ฒœ์ˆ˜ ์ฒœ์‹œ ์ฒœ์‹  ์ฒœ์‹ค ์ฒœ์‹ฌ ์ฒœ์•„ ์ฒœ์•ˆ ์ฒœ์•  ์ฒœ์–‘ ์ฒœ์—ฌ ์ฒœ์—ฐ ์ฒœ์˜ˆ ์ฒœ์˜ค ์ฒœ์˜จ ์ฒœ์š” ์ฒœ์šฐ ์ฒœ์›” ์ฒœ์œ  ์ฒœ์œค ์ฒœ์œจ ์ฒœ์€ ์ฒœ์ด ์ฒœ์ผ ์ฒœ์ž„ ์ฒœ์ • ์ฒœ์ฐจ ์ฒœ์ฐฝ ์ฒœ์ฑ„ ์ฒœ์ฒœ ์ฒœ์ฒจ ์ฒœ์ฒญ ์ฒœ์ดˆ ์ฒœ์ด ์ฒœํ‘œ ์ฒœํ•˜ ์ฒœํ•œ ์ฒœํ•ด ์ฒœํ–ฅ ์ฒœํ˜„ ์ฒœํ˜ผ ์ฒœํ™ ์ฒœํ™” ์ฒœํšจ ์ฒœ๋‚จ ์ฒœ๋ˆˆ ์ฒœ๋‹ฌ ์ฒœ๋‹น ์ฒœ๋ด„ ์ฒœ๋น„ ์ฒœ์Šฌ ์ฒœ์—ด ์ฒœ์˜ ์ฒœ์ž ์ฒœํƒœ ์ฒœํ˜œ ์ฒจ๋‚˜ ์ฒจ๋‚œ ์ฒจ๋‚ด ์ฒจ๋‹ค ์ฒจ๋‹จ ์ฒจ๋‹ด ์ฒจ๋„ ์ฒจ๋ผ ์ฒจ๋ž˜ ์ฒจ๋ฅ˜ ์ฒจ๋ฆฌ ์ฒจ๋ชจ ์ฒจ๋ฌด ์ฒจ๋ฏธ ์ฒจ๋ฏผ ์ฒจ์‚ฌ ์ฒจ์‚ฐ ์ฒจ์ƒ ์ฒจ์ƒˆ ์ฒจ์ƒ ์ฒจ์„œ ์ฒจ์„  ์ฒจ์„ค ์ฒจ์„ฌ ์ฒจ์„ฑ ์ฒจ์†Œ ์ฒจ์†” ์ฒจ์†œ ์ฒจ์†ก ์ฒจ์ˆ˜ ์ฒจ์‹œ ์ฒจ์‹  ์ฒจ์‹ค ์ฒจ์‹ฌ ์ฒจ์•„ ์ฒจ์•ˆ ์ฒจ์•  ์ฒจ์–‘ ์ฒจ์—ฌ ์ฒจ์—ฐ ์ฒจ์˜ˆ ์ฒจ์˜ค ์ฒจ์˜จ ์ฒจ์š” ์ฒจ์šฐ ์ฒจ์›” ์ฒจ์œ  ์ฒจ์œค ์ฒจ์œจ ์ฒจ์€ ์ฒจ์ด ์ฒจ์ผ ์ฒจ์ž„ ์ฒจ์ • ์ฒจ์ฐจ ์ฒจ์ฐฝ ์ฒจ์ฑ„ ์ฒจ์ฒœ ์ฒจ์ฒจ ์ฒจ์ฒญ ์ฒจ์ดˆ ์ฒจ์ด ์ฒจํ‘œ ์ฒจํ•˜ ์ฒจํ•œ ์ฒจํ•ด ์ฒจํ–ฅ ์ฒจํ˜„ ์ฒจํ˜ผ ์ฒจํ™ ์ฒจํ™” ์ฒจํšจ ์ฒจ๋‚จ ์ฒจ๋ˆˆ ์ฒจ๋‹ฌ ์ฒจ๋‹น ์ฒจ๋ด„ ์ฒจ๋น„ ์ฒจ์Šฌ ์ฒจ์—ด ์ฒจ์˜ ์ฒจ์ž ์ฒจํƒœ ์ฒจํ˜œ ์ฒญ๋‚˜ ์ฒญ๋‚œ ์ฒญ๋‚ด ์ฒญ๋‹ค ์ฒญ๋‹จ ์ฒญ๋‹ด ์ฒญ๋„ ์ฒญ๋ผ ์ฒญ๋ž˜ ์ฒญ๋ฅ˜ ์ฒญ๋ฆฌ ์ฒญ๋ชจ ์ฒญ๋ฌด ์ฒญ๋ฏธ ์ฒญ๋ฏผ ์ฒญ์‚ฌ ์ฒญ์‚ฐ ์ฒญ์ƒ ์ฒญ์ƒˆ ์ฒญ์ƒ ์ฒญ์„œ ์ฒญ์„  ์ฒญ์„ค ์ฒญ์„ฌ ์ฒญ์„ฑ ์ฒญ์†Œ ์ฒญ์†” ์ฒญ์†œ ์ฒญ์†ก ์ฒญ์ˆ˜ ์ฒญ์‹œ ์ฒญ์‹  ์ฒญ์‹ค ์ฒญ์‹ฌ ์ฒญ์•„ ์ฒญ์•ˆ ์ฒญ์•  ์ฒญ์–‘ ์ฒญ์—ฌ ์ฒญ์—ฐ ์ฒญ์˜ˆ ์ฒญ์˜ค ์ฒญ์˜จ ์ฒญ์š” ์ฒญ์šฐ ์ฒญ์›” ์ฒญ์œ  ์ฒญ์œค ์ฒญ์œจ ์ฒญ์€ ์ฒญ์ด ์ฒญ์ผ ์ฒญ์ž„ ์ฒญ์ • ์ฒญ์ฐจ ์ฒญ์ฐฝ ์ฒญ์ฑ„ ์ฒญ์ฒœ ์ฒญ์ฒจ ์ฒญ์ฒญ ์ฒญ์ดˆ ์ฒญ์ด ์ฒญํ‘œ ์ฒญํ•˜ ์ฒญํ•œ ์ฒญํ•ด ์ฒญํ–ฅ ์ฒญํ˜„ ์ฒญํ˜ผ ์ฒญํ™ ์ฒญํ™” ์ฒญํšจ ์ฒญ๋‚จ ์ฒญ๋ˆˆ ์ฒญ๋‹ฌ ์ฒญ๋‹น ์ฒญ๋ด„ ์ฒญ๋น„ ์ฒญ์Šฌ ์ฒญ์—ด ์ฒญ์˜ ์ฒญ์ž ์ฒญํƒœ ์ฒญํ˜œ ์ดˆ๋‚˜ ์ดˆ๋‚œ ์ดˆ๋‚ด ์ดˆ๋‹ค ์ดˆ๋‹จ ์ดˆ๋‹ด ์ดˆ๋„ ์ดˆ๋ผ ์ดˆ๋ž˜ ์ดˆ๋ฅ˜ ์ดˆ๋ฆฌ ์ดˆ๋ชจ ์ดˆ๋ฌด ์ดˆ๋ฏธ ์ดˆ๋ฏผ ์ดˆ์‚ฌ ์ดˆ์‚ฐ ์ดˆ์ƒ ์ดˆ์ƒˆ ์ดˆ์ƒ ์ดˆ์„œ ์ดˆ์„  ์ดˆ์„ค ์ดˆ์„ฌ ์ดˆ์„ฑ ์ดˆ์†Œ ์ดˆ์†” ์ดˆ์†œ ์ดˆ์†ก ์ดˆ์ˆ˜ ์ดˆ์‹œ ์ดˆ์‹  ์ดˆ์‹ค ์ดˆ์‹ฌ ์ดˆ์•„ ์ดˆ์•ˆ ์ดˆ์•  ์ดˆ์–‘ ์ดˆ์—ฌ ์ดˆ์—ฐ ์ดˆ์˜ˆ ์ดˆ์˜ค ์ดˆ์˜จ ์ดˆ์š” ์ดˆ์šฐ ์ดˆ์›” ์ดˆ์œ  ์ดˆ์œค ์ดˆ์œจ ์ดˆ์€ ์ดˆ์ด ์ดˆ์ผ ์ดˆ์ž„ ์ดˆ์ • ์ดˆ์ฐจ ์ดˆ์ฐฝ ์ดˆ์ฑ„ ์ดˆ์ฒœ ์ดˆ์ฒจ ์ดˆ์ฒญ ์ดˆ์ดˆ ์ดˆ์ด ์ดˆํ‘œ ์ดˆํ•˜ ์ดˆํ•œ ์ดˆํ•ด ์ดˆํ–ฅ ์ดˆํ˜„ ์ดˆํ˜ผ ์ดˆํ™ ์ดˆํ™” ์ดˆํšจ ์ดˆ๋‚จ ์ดˆ๋ˆˆ ์ดˆ๋‹ฌ ์ดˆ๋‹น ์ดˆ๋ด„ ์ดˆ๋น„ ์ดˆ์Šฌ ์ดˆ์—ด ์ดˆ์˜ ์ดˆ์ž ์ดˆํƒœ ์ดˆํ˜œ ์ด๋‚˜ ์ด๋‚œ ์ด๋‚ด ์ด๋‹ค ์ด๋‹จ ์ด๋‹ด ์ด๋„ ์ด๋ผ ์ด๋ž˜ ์ด๋ฅ˜ ์ด๋ฆฌ ์ด๋ชจ ์ด๋ฌด ์ด๋ฏธ ์ด๋ฏผ ์ด์‚ฌ ์ด์‚ฐ ์ด์ƒ ์ด์ƒˆ ์ด์ƒ ์ด์„œ ์ด์„  ์ด์„ค ์ด์„ฌ ์ด์„ฑ ์ด์†Œ ์ด์†” ์ด์†œ ์ด์†ก ์ด์ˆ˜ ์ด์‹œ ์ด์‹  ์ด์‹ค ์ด์‹ฌ ์ด์•„ ์ด์•ˆ ์ด์•  ์ด์–‘ ์ด์—ฌ ์ด์—ฐ ์ด์˜ˆ ์ด์˜ค ์ด์˜จ ์ด์š” ์ด์šฐ ์ด์›” ์ด์œ  ์ด์œค ์ด์œจ ์ด์€ ์ด์ด ์ด์ผ ์ด์ž„ ์ด์ • ์ด์ฐจ ์ด์ฐฝ ์ด์ฑ„ ์ด์ฒœ ์ด์ฒจ ์ด์ฒญ ์ด์ดˆ ์ด์ด ์ดํ‘œ ์ดํ•˜ ์ดํ•œ ์ดํ•ด ์ดํ–ฅ ์ดํ˜„ ์ดํ˜ผ ์ดํ™ ์ดํ™” ์ดํšจ ์ด๋‚จ ์ด๋ˆˆ ์ด๋‹ฌ ์ด๋‹น ์ด๋ด„ ์ด๋น„ ์ด์Šฌ ์ด์—ด ์ด์˜ ์ด์ž ์ดํƒœ ์ดํ˜œ ํ‘œ๋‚˜ ํ‘œ๋‚œ ํ‘œ๋‚ด ํ‘œ๋‹ค ํ‘œ๋‹จ ํ‘œ๋‹ด ํ‘œ๋„ ํ‘œ๋ผ ํ‘œ๋ž˜ ํ‘œ๋ฅ˜ ํ‘œ๋ฆฌ ํ‘œ๋ชจ ํ‘œ๋ฌด ํ‘œ๋ฏธ ํ‘œ๋ฏผ ํ‘œ์‚ฌ ํ‘œ์‚ฐ ํ‘œ์ƒ ํ‘œ์ƒˆ ํ‘œ์ƒ ํ‘œ์„œ ํ‘œ์„  ํ‘œ์„ค ํ‘œ์„ฌ ํ‘œ์„ฑ ํ‘œ์†Œ ํ‘œ์†” ํ‘œ์†œ ํ‘œ์†ก ํ‘œ์ˆ˜ ํ‘œ์‹œ ํ‘œ์‹  ํ‘œ์‹ค ํ‘œ์‹ฌ ํ‘œ์•„ ํ‘œ์•ˆ ํ‘œ์•  ํ‘œ์–‘ ํ‘œ์—ฌ ํ‘œ์—ฐ ํ‘œ์˜ˆ ํ‘œ์˜ค ํ‘œ์˜จ ํ‘œ์š” ํ‘œ์šฐ ํ‘œ์›” ํ‘œ์œ  ํ‘œ์œค ํ‘œ์œจ ํ‘œ์€ ํ‘œ์ด ํ‘œ์ผ ํ‘œ์ž„ ํ‘œ์ • ํ‘œ์ฐจ ํ‘œ์ฐฝ ํ‘œ์ฑ„ ํ‘œ์ฒœ ํ‘œ์ฒจ ํ‘œ์ฒญ ํ‘œ์ดˆ ํ‘œ์ด ํ‘œํ‘œ ํ‘œํ•˜ ํ‘œํ•œ ํ‘œํ•ด ํ‘œํ–ฅ ํ‘œํ˜„ ํ‘œํ˜ผ ํ‘œํ™ ํ‘œํ™” ํ‘œํšจ ํ‘œ๋‚จ ํ‘œ๋ˆˆ ํ‘œ๋‹ฌ ํ‘œ๋‹น ํ‘œ๋ด„ ํ‘œ๋น„ ํ‘œ์Šฌ ํ‘œ์—ด ํ‘œ์˜ ํ‘œ์ž ํ‘œํƒœ ํ‘œํ˜œ ํ•˜๋‚˜ ํ•˜๋‚œ ํ•˜๋‚ด ํ•˜๋‹ค ํ•˜๋‹จ ํ•˜๋‹ด ํ•˜๋„ ํ•˜๋ผ ํ•˜๋ž˜ ํ•˜๋ฅ˜ ํ•˜๋ฆฌ ํ•˜๋ชจ ํ•˜๋ฌด ํ•˜๋ฏธ ํ•˜๋ฏผ ํ•˜์‚ฌ ํ•˜์‚ฐ ํ•˜์ƒ ํ•˜์ƒˆ ํ•˜์ƒ ํ•˜์„œ ํ•˜์„  ํ•˜์„ค ํ•˜์„ฌ ํ•˜์„ฑ ํ•˜์†Œ ํ•˜์†” ํ•˜์†œ ํ•˜์†ก ํ•˜์ˆ˜ ํ•˜์‹œ ํ•˜์‹  ํ•˜์‹ค ํ•˜์‹ฌ ํ•˜์•„ ํ•˜์•ˆ ํ•˜์•  ํ•˜์–‘ ํ•˜์—ฌ ํ•˜์—ฐ ํ•˜์˜ˆ ํ•˜์˜ค ํ•˜์˜จ ํ•˜์š” ํ•˜์šฐ ํ•˜์›” ํ•˜์œ  ํ•˜์œค ํ•˜์œจ ํ•˜์€ ํ•˜์ด ํ•˜์ผ ํ•˜์ž„ ํ•˜์ • ํ•˜์ฐจ ํ•˜์ฐฝ ํ•˜์ฑ„ ํ•˜์ฒœ ํ•˜์ฒจ ํ•˜์ฒญ ํ•˜์ดˆ ํ•˜์ด ํ•˜ํ‘œ ํ•˜ํ•˜ ํ•˜ํ•œ ํ•˜ํ•ด ํ•˜ํ–ฅ ํ•˜ํ˜„ ํ•˜ํ˜ผ ํ•˜ํ™ ํ•˜ํ™” ํ•˜ํšจ ํ•˜๋‚จ ํ•˜๋ˆˆ ํ•˜๋‹ฌ ํ•˜๋‹น ํ•˜๋ด„ ํ•˜๋น„ ํ•˜์Šฌ ํ•˜์—ด ํ•˜์˜ ํ•˜์ž ํ•˜ํƒœ ํ•˜ํ˜œ ํ•œ๋‚˜ ํ•œ๋‚œ ํ•œ๋‚ด ํ•œ๋‹ค ํ•œ๋‹จ ํ•œ๋‹ด ํ•œ๋„ ํ•œ๋ผ ํ•œ๋ž˜ ํ•œ๋ฅ˜ ํ•œ๋ฆฌ ํ•œ๋ชจ ํ•œ๋ฌด ํ•œ๋ฏธ ํ•œ๋ฏผ ํ•œ์‚ฌ ํ•œ์‚ฐ ํ•œ์ƒ ํ•œ์ƒˆ ํ•œ์ƒ ํ•œ์„œ ํ•œ์„  ํ•œ์„ค ํ•œ์„ฌ ํ•œ์„ฑ ํ•œ์†Œ ํ•œ์†” ํ•œ์†œ ํ•œ์†ก ํ•œ์ˆ˜ ํ•œ์‹œ ํ•œ์‹  ํ•œ์‹ค ํ•œ์‹ฌ ํ•œ์•„ ํ•œ์•ˆ ํ•œ์•  ํ•œ์–‘ ํ•œ์—ฌ ํ•œ์—ฐ ํ•œ์˜ˆ ํ•œ์˜ค ํ•œ์˜จ ํ•œ์š” ํ•œ์šฐ ํ•œ์›” ํ•œ์œ  ํ•œ์œค ํ•œ์œจ ํ•œ์€ ํ•œ์ด ํ•œ์ผ ํ•œ์ž„ ํ•œ์ • ํ•œ์ฐจ ํ•œ์ฐฝ ํ•œ์ฑ„ ํ•œ์ฒœ ํ•œ์ฒจ ํ•œ์ฒญ ํ•œ์ดˆ ํ•œ์ด ํ•œํ‘œ ํ•œํ•˜ ํ•œํ•œ ํ•œํ•ด ํ•œํ–ฅ ํ•œํ˜„ ํ•œํ˜ผ ํ•œํ™ ํ•œํ™” ํ•œํšจ ํ•œ๋‚จ ํ•œ๋ˆˆ ํ•œ๋‹ฌ ํ•œ๋‹น ํ•œ๋ด„ ํ•œ๋น„ ํ•œ์Šฌ ํ•œ์—ด ํ•œ์˜ ํ•œ์ž ํ•œํƒœ ํ•œํ˜œ ํ•ด๋‚˜ ํ•ด๋‚œ ํ•ด๋‚ด ํ•ด๋‹ค ํ•ด๋‹จ ํ•ด๋‹ด ํ•ด๋„ ํ•ด๋ผ ํ•ด๋ž˜ ํ•ด๋ฅ˜ ํ•ด๋ฆฌ ํ•ด๋ชจ ํ•ด๋ฌด ํ•ด๋ฏธ ํ•ด๋ฏผ ํ•ด์‚ฌ ํ•ด์‚ฐ ํ•ด์ƒ ํ•ด์ƒˆ ํ•ด์ƒ ํ•ด์„œ ํ•ด์„  ํ•ด์„ค ํ•ด์„ฌ ํ•ด์„ฑ ํ•ด์†Œ ํ•ด์†” ํ•ด์†œ ํ•ด์†ก ํ•ด์ˆ˜ ํ•ด์‹œ ํ•ด์‹  ํ•ด์‹ค ํ•ด์‹ฌ ํ•ด์•„ ํ•ด์•ˆ ํ•ด์•  ํ•ด์–‘ ํ•ด์—ฌ ํ•ด์—ฐ ํ•ด์˜ˆ ํ•ด์˜ค ํ•ด์˜จ ํ•ด์š” ํ•ด์šฐ ํ•ด์›” ํ•ด์œ  ํ•ด์œค ํ•ด์œจ ํ•ด์€ ํ•ด์ด ํ•ด์ผ ํ•ด์ž„ ํ•ด์ • ํ•ด์ฐจ ํ•ด์ฐฝ ํ•ด์ฑ„ ํ•ด์ฒœ ํ•ด์ฒจ ํ•ด์ฒญ ํ•ด์ดˆ ํ•ด์ด ํ•ดํ‘œ ํ•ดํ•˜ ํ•ดํ•œ ํ•ดํ•ด ํ•ดํ–ฅ ํ•ดํ˜„ ํ•ดํ˜ผ ํ•ดํ™ ํ•ดํ™” ํ•ดํšจ ํ•ด๋‚จ ํ•ด๋ˆˆ ํ•ด๋‹ฌ ํ•ด๋‹น ํ•ด๋ด„ ํ•ด๋น„ ํ•ด์Šฌ ํ•ด์—ด ํ•ด์˜ ํ•ด์ž ํ•ดํƒœ ํ•ดํ˜œ ํ–ฅ๋‚˜ ํ–ฅ๋‚œ ํ–ฅ๋‚ด ํ–ฅ๋‹ค ํ–ฅ๋‹จ ํ–ฅ๋‹ด ํ–ฅ๋„ ํ–ฅ๋ผ ํ–ฅ๋ž˜ ํ–ฅ๋ฅ˜ ํ–ฅ๋ฆฌ ํ–ฅ๋ชจ ํ–ฅ๋ฌด ํ–ฅ๋ฏธ ํ–ฅ๋ฏผ ํ–ฅ์‚ฌ ํ–ฅ์‚ฐ ํ–ฅ์ƒ ํ–ฅ์ƒˆ ํ–ฅ์ƒ ํ–ฅ์„œ ํ–ฅ์„  ํ–ฅ์„ค ํ–ฅ์„ฌ ํ–ฅ์„ฑ ํ–ฅ์†Œ ํ–ฅ์†” ํ–ฅ์†œ ํ–ฅ์†ก ํ–ฅ์ˆ˜ ํ–ฅ์‹œ ํ–ฅ์‹  ํ–ฅ์‹ค ํ–ฅ์‹ฌ ํ–ฅ์•„ ํ–ฅ์•ˆ ํ–ฅ์•  ํ–ฅ์–‘ ํ–ฅ์—ฌ ํ–ฅ์—ฐ ํ–ฅ์˜ˆ ํ–ฅ์˜ค ํ–ฅ์˜จ ํ–ฅ์š” ํ–ฅ์šฐ ํ–ฅ์›” ํ–ฅ์œ  ํ–ฅ์œค ํ–ฅ์œจ ํ–ฅ์€ ํ–ฅ์ด ํ–ฅ์ผ ํ–ฅ์ž„ ํ–ฅ์ • ํ–ฅ์ฐจ ํ–ฅ์ฐฝ ํ–ฅ์ฑ„ ํ–ฅ์ฒœ ํ–ฅ์ฒจ ํ–ฅ์ฒญ ํ–ฅ์ดˆ ํ–ฅ์ด ํ–ฅํ‘œ ํ–ฅํ•˜ ํ–ฅํ•œ ํ–ฅํ•ด ํ–ฅํ–ฅ ํ–ฅํ˜„ ํ–ฅํ˜ผ ํ–ฅํ™ ํ–ฅํ™” ํ–ฅํšจ ํ–ฅ๋‚จ ํ–ฅ๋ˆˆ ํ–ฅ๋‹ฌ ํ–ฅ๋‹น ํ–ฅ๋ด„ ํ–ฅ๋น„ ํ–ฅ์Šฌ ํ–ฅ์—ด ํ–ฅ์˜ ํ–ฅ์ž ํ–ฅํƒœ ํ–ฅํ˜œ ํ˜„๋‚˜ ํ˜„๋‚œ ํ˜„๋‚ด ํ˜„๋‹ค ํ˜„๋‹จ ํ˜„๋‹ด ํ˜„๋„ ํ˜„๋ผ ํ˜„๋ž˜ ํ˜„๋ฅ˜ ํ˜„๋ฆฌ ํ˜„๋ชจ ํ˜„๋ฌด ํ˜„๋ฏธ ํ˜„๋ฏผ ํ˜„์‚ฌ ํ˜„์‚ฐ ํ˜„์ƒ ํ˜„์ƒˆ ํ˜„์ƒ ํ˜„์„œ ํ˜„์„  ํ˜„์„ค ํ˜„์„ฌ ํ˜„์„ฑ ํ˜„์†Œ ํ˜„์†” ํ˜„์†œ ํ˜„์†ก ํ˜„์ˆ˜ ํ˜„์‹œ ํ˜„์‹  ํ˜„์‹ค ํ˜„์‹ฌ ํ˜„์•„ ํ˜„์•ˆ ํ˜„์•  ํ˜„์–‘ ํ˜„์—ฌ ํ˜„์—ฐ ํ˜„์˜ˆ ํ˜„์˜ค ํ˜„์˜จ ํ˜„์š” ํ˜„์šฐ ํ˜„์›” ํ˜„์œ  ํ˜„์œค ํ˜„์œจ ํ˜„์€ ํ˜„์ด ํ˜„์ผ ํ˜„์ž„ ํ˜„์ • ํ˜„์ฐจ ํ˜„์ฐฝ ํ˜„์ฑ„ ํ˜„์ฒœ ํ˜„์ฒจ ํ˜„์ฒญ ํ˜„์ดˆ ํ˜„์ด ํ˜„ํ‘œ ํ˜„ํ•˜ ํ˜„ํ•œ ํ˜„ํ•ด ํ˜„ํ–ฅ ํ˜„ํ˜„ ํ˜„ํ˜ผ ํ˜„ํ™ ํ˜„ํ™” ํ˜„ํšจ ํ˜„๋‚จ ํ˜„๋ˆˆ ํ˜„๋‹ฌ ํ˜„๋‹น ํ˜„๋ด„ ํ˜„๋น„ ํ˜„์Šฌ ํ˜„์—ด ํ˜„์˜ ํ˜„์ž ํ˜„ํƒœ ํ˜„ํ˜œ ํ˜ผ๋‚˜ ํ˜ผ๋‚œ ํ˜ผ๋‚ด ํ˜ผ๋‹ค ํ˜ผ๋‹จ ํ˜ผ๋‹ด ํ˜ผ๋„ ํ˜ผ๋ผ ํ˜ผ๋ž˜ ํ˜ผ๋ฅ˜ ํ˜ผ๋ฆฌ ํ˜ผ๋ชจ ํ˜ผ๋ฌด ํ˜ผ๋ฏธ ํ˜ผ๋ฏผ ํ˜ผ์‚ฌ ํ˜ผ์‚ฐ ํ˜ผ์ƒ ํ˜ผ์ƒˆ ํ˜ผ์ƒ ํ˜ผ์„œ ํ˜ผ์„  ํ˜ผ์„ค ํ˜ผ์„ฌ ํ˜ผ์„ฑ ํ˜ผ์†Œ ํ˜ผ์†” ํ˜ผ์†œ ํ˜ผ์†ก ํ˜ผ์ˆ˜ ํ˜ผ์‹œ ํ˜ผ์‹  ํ˜ผ์‹ค ํ˜ผ์‹ฌ ํ˜ผ์•„ ํ˜ผ์•ˆ ํ˜ผ์•  ํ˜ผ์–‘ ํ˜ผ์—ฌ ํ˜ผ์—ฐ ํ˜ผ์˜ˆ ํ˜ผ์˜ค ํ˜ผ์˜จ ํ˜ผ์š” ํ˜ผ์šฐ ํ˜ผ์›” ํ˜ผ์œ  ํ˜ผ์œค ํ˜ผ์œจ ํ˜ผ์€ ํ˜ผ์ด ํ˜ผ์ผ ํ˜ผ์ž„ ํ˜ผ์ • ํ˜ผ์ฐจ ํ˜ผ์ฐฝ ํ˜ผ์ฑ„ ํ˜ผ์ฒœ ํ˜ผ์ฒจ ํ˜ผ์ฒญ ํ˜ผ์ดˆ ํ˜ผ์ด ํ˜ผํ‘œ ํ˜ผํ•˜ ํ˜ผํ•œ ํ˜ผํ•ด ํ˜ผํ–ฅ ํ˜ผํ˜„ ํ˜ผํ˜ผ ํ˜ผํ™ ํ˜ผํ™” ํ˜ผํšจ ํ˜ผ๋‚จ ํ˜ผ๋ˆˆ ํ˜ผ๋‹ฌ ํ˜ผ๋‹น ํ˜ผ๋ด„ ํ˜ผ๋น„ ํ˜ผ์Šฌ ํ˜ผ์—ด ํ˜ผ์˜ ํ˜ผ์ž ํ˜ผํƒœ ํ˜ผํ˜œ ํ™๋‚˜ ํ™๋‚œ ํ™๋‚ด ํ™๋‹ค ํ™๋‹จ ํ™๋‹ด ํ™๋„ ํ™๋ผ ํ™๋ž˜ ํ™๋ฅ˜ ํ™๋ฆฌ ํ™๋ชจ ํ™๋ฌด ํ™๋ฏธ ํ™๋ฏผ ํ™์‚ฌ ํ™์‚ฐ ํ™์ƒ ํ™์ƒˆ ํ™์ƒ ํ™์„œ ํ™์„  ํ™์„ค ํ™์„ฌ ํ™์„ฑ ํ™์†Œ ํ™์†” ํ™์†œ ํ™์†ก ํ™์ˆ˜ ํ™์‹œ ํ™์‹  ํ™์‹ค ํ™์‹ฌ ํ™์•„ ํ™์•ˆ ํ™์•  ํ™์–‘ ํ™์—ฌ ํ™์—ฐ ํ™์˜ˆ ํ™์˜ค ํ™์˜จ ํ™์š” ํ™์šฐ ํ™์›” ํ™์œ  ํ™์œค ํ™์œจ ํ™์€ ํ™์ด ํ™์ผ ํ™์ž„ ํ™์ • ํ™์ฐจ ํ™์ฐฝ ํ™์ฑ„ ํ™์ฒœ ํ™์ฒจ ํ™์ฒญ ํ™์ดˆ ํ™์ด ํ™ํ‘œ ํ™ํ•˜ ํ™ํ•œ ํ™ํ•ด ํ™ํ–ฅ ํ™ํ˜„ ํ™ํ˜ผ ํ™ํ™ ํ™ํ™” ํ™ํšจ ํ™๋‚จ ํ™๋ˆˆ ํ™๋‹ฌ ํ™๋‹น ํ™๋ด„ ํ™๋น„ ํ™์Šฌ ํ™์—ด ํ™์˜ ํ™์ž ํ™ํƒœ ํ™ํ˜œ ํ™”๋‚˜ ํ™”๋‚œ ํ™”๋‚ด ํ™”๋‹ค ํ™”๋‹จ ํ™”๋‹ด ํ™”๋„ ํ™”๋ผ ํ™”๋ž˜ ํ™”๋ฅ˜ ํ™”๋ฆฌ ํ™”๋ชจ ํ™”๋ฌด ํ™”๋ฏธ ํ™”๋ฏผ ํ™”์‚ฌ ํ™”์‚ฐ ํ™”์ƒ ํ™”์ƒˆ ํ™”์ƒ ํ™”์„œ ํ™”์„  ํ™”์„ค ํ™”์„ฌ ํ™”์„ฑ ํ™”์†Œ ํ™”์†” ํ™”์†œ ํ™”์†ก ํ™”์ˆ˜ ํ™”์‹œ ํ™”์‹  ํ™”์‹ค ํ™”์‹ฌ ํ™”์•„ ํ™”์•ˆ ํ™”์•  ํ™”์–‘ ํ™”์—ฌ ํ™”์—ฐ ํ™”์˜ˆ ํ™”์˜ค ํ™”์˜จ ํ™”์š” ํ™”์šฐ ํ™”์›” ํ™”์œ  ํ™”์œค ํ™”์œจ ํ™”์€ ํ™”์ด ํ™”์ผ ํ™”์ž„ ํ™”์ • ํ™”์ฐจ ํ™”์ฐฝ ํ™”์ฑ„ ํ™”์ฒœ ํ™”์ฒจ ํ™”์ฒญ ํ™”์ดˆ ํ™”์ด ํ™”ํ‘œ ํ™”ํ•˜ ํ™”ํ•œ ํ™”ํ•ด ํ™”ํ–ฅ ํ™”ํ˜„ ํ™”ํ˜ผ ํ™”ํ™ ํ™”ํ™” ํ™”ํšจ ํ™”๋‚จ ํ™”๋ˆˆ ํ™”๋‹ฌ ํ™”๋‹น ํ™”๋ด„ ํ™”๋น„ ํ™”์Šฌ ํ™”์—ด ํ™”์˜ ํ™”์ž ํ™”ํƒœ ํ™”ํ˜œ ํšจ๋‚˜ ํšจ๋‚œ ํšจ๋‚ด ํšจ๋‹ค ํšจ๋‹จ ํšจ๋‹ด ํšจ๋„ ํšจ๋ผ ํšจ๋ž˜ ํšจ๋ฅ˜ ํšจ๋ฆฌ ํšจ๋ชจ ํšจ๋ฌด ํšจ๋ฏธ ํšจ๋ฏผ ํšจ์‚ฌ ํšจ์‚ฐ ํšจ์ƒ ํšจ์ƒˆ ํšจ์ƒ ํšจ์„œ ํšจ์„  ํšจ์„ค ํšจ์„ฌ ํšจ์„ฑ ํšจ์†Œ ํšจ์†” ํšจ์†œ ํšจ์†ก ํšจ์ˆ˜ ํšจ์‹œ ํšจ์‹  ํšจ์‹ค ํšจ์‹ฌ ํšจ์•„ ํšจ์•ˆ ํšจ์•  ํšจ์–‘ ํšจ์—ฌ ํšจ์—ฐ ํšจ์˜ˆ ํšจ์˜ค ํšจ์˜จ ํšจ์š” ํšจ์šฐ ํšจ์›” ํšจ์œ  ํšจ์œค ํšจ์œจ ํšจ์€ ํšจ์ด ํšจ์ผ ํšจ์ž„ ํšจ์ • ํšจ์ฐจ ํšจ์ฐฝ ํšจ์ฑ„ ํšจ์ฒœ ํšจ์ฒจ ํšจ์ฒญ ํšจ์ดˆ ํšจ์ด ํšจํ‘œ ํšจํ•˜ ํšจํ•œ ํšจํ•ด ํšจํ–ฅ ํšจํ˜„ ํšจํ˜ผ ํšจํ™ ํšจํ™” ํšจํšจ ํšจ๋‚จ ํšจ๋ˆˆ ํšจ๋‹ฌ ํšจ๋‹น ํšจ๋ด„ ํšจ๋น„ ํšจ์Šฌ ํšจ์—ด ํšจ์˜ ํšจ์ž ํšจํƒœ ํšจํ˜œ ๋‚จ๋‚˜ ๋‚จ๋‚œ ๋‚จ๋‚ด ๋‚จ๋‹ค ๋‚จ๋‹จ ๋‚จ๋‹ด ๋‚จ๋„ ๋‚จ๋ผ ๋‚จ๋ž˜ ๋‚จ๋ฅ˜ ๋‚จ๋ฆฌ ๋‚จ๋ชจ ๋‚จ๋ฌด ๋‚จ๋ฏธ ๋‚จ๋ฏผ ๋‚จ์‚ฌ ๋‚จ์‚ฐ ๋‚จ์ƒ ๋‚จ์ƒˆ ๋‚จ์ƒ ๋‚จ์„œ ๋‚จ์„  ๋‚จ์„ค ๋‚จ์„ฌ ๋‚จ์„ฑ ๋‚จ์†Œ ๋‚จ์†” ๋‚จ์†œ ๋‚จ์†ก ๋‚จ์ˆ˜ ๋‚จ์‹œ ๋‚จ์‹  ๋‚จ์‹ค ๋‚จ์‹ฌ ๋‚จ์•„ ๋‚จ์•ˆ ๋‚จ์•  ๋‚จ์–‘ ๋‚จ์—ฌ ๋‚จ์—ฐ ๋‚จ์˜ˆ ๋‚จ์˜ค ๋‚จ์˜จ ๋‚จ์š” ๋‚จ์šฐ ๋‚จ์›” ๋‚จ์œ  ๋‚จ์œค ๋‚จ์œจ ๋‚จ์€ ๋‚จ์ด ๋‚จ์ผ ๋‚จ์ž„ ๋‚จ์ • ๋‚จ์ฐจ ๋‚จ์ฐฝ ๋‚จ์ฑ„ ๋‚จ์ฒœ ๋‚จ์ฒจ ๋‚จ์ฒญ ๋‚จ์ดˆ ๋‚จ์ด ๋‚จํ‘œ ๋‚จํ•˜ ๋‚จํ•œ ๋‚จํ•ด ๋‚จํ–ฅ ๋‚จํ˜„ ๋‚จํ˜ผ ๋‚จํ™ ๋‚จํ™” ๋‚จํšจ ๋‚จ๋‚จ ๋‚จ๋ˆˆ ๋‚จ๋‹ฌ ๋‚จ๋‹น ๋‚จ๋ด„ ๋‚จ๋น„ ๋‚จ์Šฌ ๋‚จ์—ด ๋‚จ์˜ ๋‚จ์ž ๋‚จํƒœ ๋‚จํ˜œ ๋ˆˆ๋‚˜ ๋ˆˆ๋‚œ ๋ˆˆ๋‚ด ๋ˆˆ๋‹ค ๋ˆˆ๋‹จ ๋ˆˆ๋‹ด ๋ˆˆ๋„ ๋ˆˆ๋ผ ๋ˆˆ๋ž˜ ๋ˆˆ๋ฅ˜ ๋ˆˆ๋ฆฌ ๋ˆˆ๋ชจ ๋ˆˆ๋ฌด ๋ˆˆ๋ฏธ ๋ˆˆ๋ฏผ ๋ˆˆ์‚ฌ ๋ˆˆ์‚ฐ ๋ˆˆ์ƒ ๋ˆˆ์ƒˆ ๋ˆˆ์ƒ ๋ˆˆ์„œ ๋ˆˆ์„  ๋ˆˆ์„ค ๋ˆˆ์„ฌ ๋ˆˆ์„ฑ ๋ˆˆ์†Œ ๋ˆˆ์†” ๋ˆˆ์†œ ๋ˆˆ์†ก ๋ˆˆ์ˆ˜ ๋ˆˆ์‹œ ๋ˆˆ์‹  ๋ˆˆ์‹ค ๋ˆˆ์‹ฌ ๋ˆˆ์•„ ๋ˆˆ์•ˆ ๋ˆˆ์•  ๋ˆˆ์–‘ ๋ˆˆ์—ฌ ๋ˆˆ์—ฐ ๋ˆˆ์˜ˆ ๋ˆˆ์˜ค ๋ˆˆ์˜จ ๋ˆˆ์š” ๋ˆˆ์šฐ ๋ˆˆ์›” ๋ˆˆ์œ  ๋ˆˆ์œค ๋ˆˆ์œจ ๋ˆˆ์€ ๋ˆˆ์ด ๋ˆˆ์ผ ๋ˆˆ์ž„ ๋ˆˆ์ • ๋ˆˆ์ฐจ ๋ˆˆ์ฐฝ ๋ˆˆ์ฑ„ ๋ˆˆ์ฒœ ๋ˆˆ์ฒจ ๋ˆˆ์ฒญ ๋ˆˆ์ดˆ ๋ˆˆ์ด ๋ˆˆํ‘œ ๋ˆˆํ•˜ ๋ˆˆํ•œ ๋ˆˆํ•ด ๋ˆˆํ–ฅ ๋ˆˆํ˜„ ๋ˆˆํ˜ผ ๋ˆˆํ™ ๋ˆˆํ™” ๋ˆˆํšจ ๋ˆˆ๋‚จ ๋ˆˆ๋ˆˆ ๋ˆˆ๋‹ฌ ๋ˆˆ๋‹น ๋ˆˆ๋ด„ ๋ˆˆ๋น„ ๋ˆˆ์Šฌ ๋ˆˆ์—ด ๋ˆˆ์˜ ๋ˆˆ์ž ๋ˆˆํƒœ ๋ˆˆํ˜œ ๋‹ฌ๋‚˜ ๋‹ฌ๋‚œ ๋‹ฌ๋‚ด ๋‹ฌ๋‹ค ๋‹ฌ๋‹จ ๋‹ฌ๋‹ด ๋‹ฌ๋„ ๋‹ฌ๋ผ ๋‹ฌ๋ž˜ ๋‹ฌ๋ฅ˜ ๋‹ฌ๋ฆฌ ๋‹ฌ๋ชจ ๋‹ฌ๋ฌด ๋‹ฌ๋ฏธ ๋‹ฌ๋ฏผ ๋‹ฌ์‚ฌ ๋‹ฌ์‚ฐ ๋‹ฌ์ƒ ๋‹ฌ์ƒˆ ๋‹ฌ์ƒ ๋‹ฌ์„œ ๋‹ฌ์„  ๋‹ฌ์„ค ๋‹ฌ์„ฌ ๋‹ฌ์„ฑ ๋‹ฌ์†Œ ๋‹ฌ์†” ๋‹ฌ์†œ ๋‹ฌ์†ก ๋‹ฌ์ˆ˜ ๋‹ฌ์‹œ ๋‹ฌ์‹  ๋‹ฌ์‹ค ๋‹ฌ์‹ฌ ๋‹ฌ์•„ ๋‹ฌ์•ˆ ๋‹ฌ์•  ๋‹ฌ์–‘ ๋‹ฌ์—ฌ ๋‹ฌ์—ฐ ๋‹ฌ์˜ˆ ๋‹ฌ์˜ค ๋‹ฌ์˜จ ๋‹ฌ์š” ๋‹ฌ์šฐ ๋‹ฌ์›” ๋‹ฌ์œ  ๋‹ฌ์œค ๋‹ฌ์œจ ๋‹ฌ์€ ๋‹ฌ์ด ๋‹ฌ์ผ ๋‹ฌ์ž„ ๋‹ฌ์ • ๋‹ฌ์ฐจ ๋‹ฌ์ฐฝ ๋‹ฌ์ฑ„ ๋‹ฌ์ฒœ ๋‹ฌ์ฒจ ๋‹ฌ์ฒญ ๋‹ฌ์ดˆ ๋‹ฌ์ด ๋‹ฌํ‘œ ๋‹ฌํ•˜ ๋‹ฌํ•œ ๋‹ฌํ•ด ๋‹ฌํ–ฅ ๋‹ฌํ˜„ ๋‹ฌํ˜ผ ๋‹ฌํ™ ๋‹ฌํ™” ๋‹ฌํšจ ๋‹ฌ๋‚จ ๋‹ฌ๋ˆˆ ๋‹ฌ๋‹ฌ ๋‹ฌ๋‹น ๋‹ฌ๋ด„ ๋‹ฌ๋น„ ๋‹ฌ์Šฌ ๋‹ฌ์—ด ๋‹ฌ์˜ ๋‹ฌ์ž ๋‹ฌํƒœ ๋‹ฌํ˜œ ๋‹น๋‚˜ ๋‹น๋‚œ ๋‹น๋‚ด ๋‹น๋‹ค ๋‹น๋‹จ ๋‹น๋‹ด ๋‹น๋„ ๋‹น๋ผ ๋‹น๋ž˜ ๋‹น๋ฅ˜ ๋‹น๋ฆฌ ๋‹น๋ชจ ๋‹น๋ฌด ๋‹น๋ฏธ ๋‹น๋ฏผ ๋‹น์‚ฌ ๋‹น์‚ฐ ๋‹น์ƒ ๋‹น์ƒˆ ๋‹น์ƒ ๋‹น์„œ ๋‹น์„  ๋‹น์„ค ๋‹น์„ฌ ๋‹น์„ฑ ๋‹น์†Œ ๋‹น์†” ๋‹น์†œ ๋‹น์†ก ๋‹น์ˆ˜ ๋‹น์‹œ ๋‹น์‹  ๋‹น์‹ค ๋‹น์‹ฌ ๋‹น์•„ ๋‹น์•ˆ ๋‹น์•  ๋‹น์–‘ ๋‹น์—ฌ ๋‹น์—ฐ ๋‹น์˜ˆ ๋‹น์˜ค ๋‹น์˜จ ๋‹น์š” ๋‹น์šฐ ๋‹น์›” ๋‹น์œ  ๋‹น์œค ๋‹น์œจ ๋‹น์€ ๋‹น์ด ๋‹น์ผ ๋‹น์ž„ ๋‹น์ • ๋‹น์ฐจ ๋‹น์ฐฝ ๋‹น์ฑ„ ๋‹น์ฒœ ๋‹น์ฒจ ๋‹น์ฒญ ๋‹น์ดˆ ๋‹น์ด ๋‹นํ‘œ ๋‹นํ•˜ ๋‹นํ•œ ๋‹นํ•ด ๋‹นํ–ฅ ๋‹นํ˜„ ๋‹นํ˜ผ ๋‹นํ™ ๋‹นํ™” ๋‹นํšจ ๋‹น๋‚จ ๋‹น๋ˆˆ ๋‹น๋‹ฌ ๋‹น๋‹น ๋‹น๋ด„ ๋‹น๋น„ ๋‹น์Šฌ ๋‹น์—ด ๋‹น์˜ ๋‹น์ž ๋‹นํƒœ ๋‹นํ˜œ ๋ด„๋‚˜ ๋ด„๋‚œ ๋ด„๋‚ด ๋ด„๋‹ค ๋ด„๋‹จ ๋ด„๋‹ด ๋ด„๋„ ๋ด„๋ผ ๋ด„๋ž˜ ๋ด„๋ฅ˜ ๋ด„๋ฆฌ ๋ด„๋ชจ ๋ด„๋ฌด ๋ด„๋ฏธ ๋ด„๋ฏผ ๋ด„์‚ฌ ๋ด„์‚ฐ ๋ด„์ƒ ๋ด„์ƒˆ ๋ด„์ƒ ๋ด„์„œ ๋ด„์„  ๋ด„์„ค ๋ด„์„ฌ ๋ด„์„ฑ ๋ด„์†Œ ๋ด„์†” ๋ด„์†œ ๋ด„์†ก ๋ด„์ˆ˜ ๋ด„์‹œ ๋ด„์‹  ๋ด„์‹ค ๋ด„์‹ฌ ๋ด„์•„ ๋ด„์•ˆ ๋ด„์•  ๋ด„์–‘ ๋ด„์—ฌ ๋ด„์—ฐ ๋ด„์˜ˆ ๋ด„์˜ค ๋ด„์˜จ ๋ด„์š” ๋ด„์šฐ ๋ด„์›” ๋ด„์œ  ๋ด„์œค ๋ด„์œจ ๋ด„์€ ๋ด„์ด ๋ด„์ผ ๋ด„์ž„ ๋ด„์ • ๋ด„์ฐจ ๋ด„์ฐฝ ๋ด„์ฑ„ ๋ด„์ฒœ ๋ด„์ฒจ ๋ด„์ฒญ ๋ด„์ดˆ ๋ด„์ด ๋ด„ํ‘œ ๋ด„ํ•˜ ๋ด„ํ•œ ๋ด„ํ•ด ๋ด„ํ–ฅ ๋ด„ํ˜„ ๋ด„ํ˜ผ ๋ด„ํ™ ๋ด„ํ™” ๋ด„ํšจ ๋ด„๋‚จ ๋ด„๋ˆˆ ๋ด„๋‹ฌ ๋ด„๋‹น ๋ด„๋ด„ ๋ด„๋น„ ๋ด„์Šฌ ๋ด„์—ด ๋ด„์˜ ๋ด„์ž ๋ด„ํƒœ ๋ด„ํ˜œ ๋น„๋‚˜ ๋น„๋‚œ ๋น„๋‚ด ๋น„๋‹ค ๋น„๋‹จ ๋น„๋‹ด ๋น„๋„ ๋น„๋ผ ๋น„๋ž˜ ๋น„๋ฅ˜ ๋น„๋ฆฌ ๋น„๋ชจ ๋น„๋ฌด ๋น„๋ฏธ ๋น„๋ฏผ ๋น„์‚ฌ ๋น„์‚ฐ ๋น„์ƒ ๋น„์ƒˆ ๋น„์ƒ ๋น„์„œ ๋น„์„  ๋น„์„ค ๋น„์„ฌ ๋น„์„ฑ ๋น„์†Œ ๋น„์†” ๋น„์†œ ๋น„์†ก ๋น„์ˆ˜ ๋น„์‹œ ๋น„์‹  ๋น„์‹ค ๋น„์‹ฌ ๋น„์•„ ๋น„์•ˆ ๋น„์•  ๋น„์–‘ ๋น„์—ฌ ๋น„์—ฐ ๋น„์˜ˆ ๋น„์˜ค ๋น„์˜จ ๋น„์š” ๋น„์šฐ ๋น„์›” ๋น„์œ  ๋น„์œค ๋น„์œจ ๋น„์€ ๋น„์ด ๋น„์ผ ๋น„์ž„ ๋น„์ • ๋น„์ฐจ ๋น„์ฐฝ ๋น„์ฑ„ ๋น„์ฒœ ๋น„์ฒจ ๋น„์ฒญ ๋น„์ดˆ ๋น„์ด ๋น„ํ‘œ ๋น„ํ•˜ ๋น„ํ•œ ๋น„ํ•ด ๋น„ํ–ฅ ๋น„ํ˜„ ๋น„ํ˜ผ ๋น„ํ™ ๋น„ํ™” ๋น„ํšจ ๋น„๋‚จ ๋น„๋ˆˆ ๋น„๋‹ฌ ๋น„๋‹น ๋น„๋ด„ ๋น„๋น„ ๋น„์Šฌ ๋น„์—ด ๋น„์˜ ๋น„์ž ๋น„ํƒœ ๋น„ํ˜œ ์Šฌ๋‚˜ ์Šฌ๋‚œ ์Šฌ๋‚ด ์Šฌ๋‹ค ์Šฌ๋‹จ ์Šฌ๋‹ด ์Šฌ๋„ ์Šฌ๋ผ ์Šฌ๋ž˜ ์Šฌ๋ฅ˜ ์Šฌ๋ฆฌ ์Šฌ๋ชจ ์Šฌ๋ฌด ์Šฌ๋ฏธ ์Šฌ๋ฏผ ์Šฌ์‚ฌ ์Šฌ์‚ฐ ์Šฌ์ƒ ์Šฌ์ƒˆ ์Šฌ์ƒ ์Šฌ์„œ ์Šฌ์„  ์Šฌ์„ค ์Šฌ์„ฌ ์Šฌ์„ฑ ์Šฌ์†Œ ์Šฌ์†” ์Šฌ์†œ ์Šฌ์†ก ์Šฌ์ˆ˜ ์Šฌ์‹œ ์Šฌ์‹  ์Šฌ์‹ค ์Šฌ์‹ฌ ์Šฌ์•„ ์Šฌ์•ˆ ์Šฌ์•  ์Šฌ์–‘ ์Šฌ์—ฌ ์Šฌ์—ฐ ์Šฌ์˜ˆ ์Šฌ์˜ค ์Šฌ์˜จ ์Šฌ์š” ์Šฌ์šฐ ์Šฌ์›” ์Šฌ์œ  ์Šฌ์œค ์Šฌ์œจ ์Šฌ์€ ์Šฌ์ด ์Šฌ์ผ ์Šฌ์ž„ ์Šฌ์ • ์Šฌ์ฐจ ์Šฌ์ฐฝ ์Šฌ์ฑ„ ์Šฌ์ฒœ ์Šฌ์ฒจ ์Šฌ์ฒญ ์Šฌ์ดˆ ์Šฌ์ด ์Šฌํ‘œ ์Šฌํ•˜ ์Šฌํ•œ ์Šฌํ•ด ์Šฌํ–ฅ ์Šฌํ˜„ ์Šฌํ˜ผ ์Šฌํ™ ์Šฌํ™” ์Šฌํšจ ์Šฌ๋‚จ ์Šฌ๋ˆˆ ์Šฌ๋‹ฌ ์Šฌ๋‹น ์Šฌ๋ด„ ์Šฌ๋น„ ์Šฌ์Šฌ ์Šฌ์—ด ์Šฌ์˜ ์Šฌ์ž ์Šฌํƒœ ์Šฌํ˜œ ์—ด๋‚˜ ์—ด๋‚œ ์—ด๋‚ด ์—ด๋‹ค ์—ด๋‹จ ์—ด๋‹ด ์—ด๋„ ์—ด๋ผ ์—ด๋ž˜ ์—ด๋ฅ˜ ์—ด๋ฆฌ ์—ด๋ชจ ์—ด๋ฌด ์—ด๋ฏธ ์—ด๋ฏผ ์—ด์‚ฌ ์—ด์‚ฐ ์—ด์ƒ ์—ด์ƒˆ ์—ด์ƒ ์—ด์„œ ์—ด์„  ์—ด์„ค ์—ด์„ฌ ์—ด์„ฑ ์—ด์†Œ ์—ด์†” ์—ด์†œ ์—ด์†ก ์—ด์ˆ˜ ์—ด์‹œ ์—ด์‹  ์—ด์‹ค ์—ด์‹ฌ ์—ด์•„ ์—ด์•ˆ ์—ด์•  ์—ด์–‘ ์—ด์—ฌ ์—ด์—ฐ ์—ด์˜ˆ ์—ด์˜ค ์—ด์˜จ ์—ด์š” ์—ด์šฐ ์—ด์›” ์—ด์œ  ์—ด์œค ์—ด์œจ ์—ด์€ ์—ด์ด ์—ด์ผ ์—ด์ž„ ์—ด์ • ์—ด์ฐจ ์—ด์ฐฝ ์—ด์ฑ„ ์—ด์ฒœ ์—ด์ฒจ ์—ด์ฒญ ์—ด์ดˆ ์—ด์ด ์—ดํ‘œ ์—ดํ•˜ ์—ดํ•œ ์—ดํ•ด ์—ดํ–ฅ ์—ดํ˜„ ์—ดํ˜ผ ์—ดํ™ ์—ดํ™” ์—ดํšจ ์—ด๋‚จ ์—ด๋ˆˆ ์—ด๋‹ฌ ์—ด๋‹น ์—ด๋ด„ ์—ด๋น„ ์—ด์Šฌ ์—ด์—ด ์—ด์˜ ์—ด์ž ์—ดํƒœ ์—ดํ˜œ ์˜๋‚˜ ์˜๋‚œ ์˜๋‚ด ์˜๋‹ค ์˜๋‹จ ์˜๋‹ด ์˜๋„ ์˜๋ผ ์˜๋ž˜ ์˜๋ฅ˜ ์˜๋ฆฌ ์˜๋ชจ ์˜๋ฌด ์˜๋ฏธ ์˜๋ฏผ ์˜์‚ฌ ์˜์‚ฐ ์˜์ƒ ์˜์ƒˆ ์˜์ƒ ์˜์„œ ์˜์„  ์˜์„ค ์˜์„ฌ ์˜์„ฑ ์˜์†Œ ์˜์†” ์˜์†œ ์˜์†ก ์˜์ˆ˜ ์˜์‹œ ์˜์‹  ์˜์‹ค ์˜์‹ฌ ์˜์•„ ์˜์•ˆ ์˜์•  ์˜์–‘ ์˜์—ฌ ์˜์—ฐ ์˜์˜ˆ ์˜์˜ค ์˜์˜จ ์˜์š” ์˜์šฐ ์˜์›” ์˜์œ  ์˜์œค ์˜์œจ ์˜์€ ์˜์ด ์˜์ผ ์˜์ž„ ์˜์ • ์˜์ฐจ ์˜์ฐฝ ์˜์ฑ„ ์˜์ฒœ ์˜์ฒจ ์˜์ฒญ ์˜์ดˆ ์˜์ด ์˜ํ‘œ ์˜ํ•˜ ์˜ํ•œ ์˜ํ•ด ์˜ํ–ฅ ์˜ํ˜„ ์˜ํ˜ผ ์˜ํ™ ์˜ํ™” ์˜ํšจ ์˜๋‚จ ์˜๋ˆˆ ์˜๋‹ฌ ์˜๋‹น ์˜๋ด„ ์˜๋น„ ์˜์Šฌ ์˜์—ด ์˜์˜ ์˜์ž ์˜ํƒœ ์˜ํ˜œ ์ž๋‚˜ ์ž๋‚œ ์ž๋‚ด ์ž๋‹ค ์ž๋‹จ ์ž๋‹ด ์ž๋„ ์ž๋ผ ์ž๋ž˜ ์ž๋ฅ˜ ์ž๋ฆฌ ์ž๋ชจ ์ž๋ฌด ์ž๋ฏธ ์ž๋ฏผ ์ž์‚ฌ ์ž์‚ฐ ์ž์ƒ ์ž์ƒˆ ์ž์ƒ ์ž์„œ ์ž์„  ์ž์„ค ์ž์„ฌ ์ž์„ฑ ์ž์†Œ ์ž์†” ์ž์†œ ์ž์†ก ์ž์ˆ˜ ์ž์‹œ ์ž์‹  ์ž์‹ค ์ž์‹ฌ ์ž์•„ ์ž์•ˆ ์ž์•  ์ž์–‘ ์ž์—ฌ ์ž์—ฐ ์ž์˜ˆ ์ž์˜ค ์ž์˜จ ์ž์š” ์ž์šฐ ์ž์›” ์ž์œ  ์ž์œค ์ž์œจ ์ž์€ ์ž์ด ์ž์ผ ์ž์ž„ ์ž์ • ์ž์ฐจ ์ž์ฐฝ ์ž์ฑ„ ์ž์ฒœ ์ž์ฒจ ์ž์ฒญ ์ž์ดˆ ์ž์ด ์žํ‘œ ์žํ•˜ ์žํ•œ ์žํ•ด ์žํ–ฅ ์žํ˜„ ์žํ˜ผ ์žํ™ ์žํ™” ์žํšจ ์ž๋‚จ ์ž๋ˆˆ ์ž๋‹ฌ ์ž๋‹น ์ž๋ด„ ์ž๋น„ ์ž์Šฌ ์ž์—ด ์ž์˜ ์ž์ž ์žํƒœ ์žํ˜œ ํƒœ๋‚˜ ํƒœ๋‚œ ํƒœ๋‚ด ํƒœ๋‹ค ํƒœ๋‹จ ํƒœ๋‹ด ํƒœ๋„ ํƒœ๋ผ ํƒœ๋ž˜ ํƒœ๋ฅ˜ ํƒœ๋ฆฌ ํƒœ๋ชจ ํƒœ๋ฌด ํƒœ๋ฏธ ํƒœ๋ฏผ ํƒœ์‚ฌ ํƒœ์‚ฐ ํƒœ์ƒ ํƒœ์ƒˆ ํƒœ์ƒ ํƒœ์„œ ํƒœ์„  ํƒœ์„ค ํƒœ์„ฌ ํƒœ์„ฑ ํƒœ์†Œ ํƒœ์†” ํƒœ์†œ ํƒœ์†ก ํƒœ์ˆ˜ ํƒœ์‹œ ํƒœ์‹  ํƒœ์‹ค ํƒœ์‹ฌ ํƒœ์•„ ํƒœ์•ˆ ํƒœ์•  ํƒœ์–‘ ํƒœ์—ฌ ํƒœ์—ฐ ํƒœ์˜ˆ ํƒœ์˜ค ํƒœ์˜จ ํƒœ์š” ํƒœ์šฐ ํƒœ์›” ํƒœ์œ  ํƒœ์œค ํƒœ์œจ ํƒœ์€ ํƒœ์ด ํƒœ์ผ ํƒœ์ž„ ํƒœ์ • ํƒœ์ฐจ ํƒœ์ฐฝ ํƒœ์ฑ„ ํƒœ์ฒœ ํƒœ์ฒจ ํƒœ์ฒญ ํƒœ์ดˆ ํƒœ์ด ํƒœํ‘œ ํƒœํ•˜ ํƒœํ•œ ํƒœํ•ด ํƒœํ–ฅ ํƒœํ˜„ ํƒœํ˜ผ ํƒœํ™ ํƒœํ™” ํƒœํšจ ํƒœ๋‚จ ํƒœ๋ˆˆ ํƒœ๋‹ฌ ํƒœ๋‹น ํƒœ๋ด„ ํƒœ๋น„ ํƒœ์Šฌ ํƒœ์—ด ํƒœ์˜ ํƒœ์ž ํƒœํƒœ ํƒœํ˜œ ํ˜œ๋‚˜ ํ˜œ๋‚œ ํ˜œ๋‚ด ํ˜œ๋‹ค ํ˜œ๋‹จ ํ˜œ๋‹ด ํ˜œ๋„ ํ˜œ๋ผ ํ˜œ๋ž˜ ํ˜œ๋ฅ˜ ํ˜œ๋ฆฌ ํ˜œ๋ชจ ํ˜œ๋ฌด ํ˜œ๋ฏธ ํ˜œ๋ฏผ ํ˜œ์‚ฌ ํ˜œ์‚ฐ ํ˜œ์ƒ ํ˜œ์ƒˆ ํ˜œ์ƒ ํ˜œ์„œ ํ˜œ์„  ํ˜œ์„ค ํ˜œ์„ฌ ํ˜œ์„ฑ ํ˜œ์†Œ ํ˜œ์†” ํ˜œ์†œ ํ˜œ์†ก ํ˜œ์ˆ˜ ํ˜œ์‹œ ํ˜œ์‹  ํ˜œ์‹ค ํ˜œ์‹ฌ ํ˜œ์•„ ํ˜œ์•ˆ ํ˜œ์•  ํ˜œ์–‘ ํ˜œ์—ฌ ํ˜œ์—ฐ ํ˜œ์˜ˆ ํ˜œ์˜ค ํ˜œ์˜จ ํ˜œ์š” ํ˜œ์šฐ ํ˜œ์›” ํ˜œ์œ  ํ˜œ์œค ํ˜œ์œจ ํ˜œ์€ ํ˜œ์ด ํ˜œ์ผ ํ˜œ์ž„ ํ˜œ์ • ํ˜œ์ฐจ ํ˜œ์ฐฝ ํ˜œ์ฑ„ ํ˜œ์ฒœ ํ˜œ์ฒจ ํ˜œ์ฒญ ํ˜œ์ดˆ ํ˜œ์ด ํ˜œํ‘œ ํ˜œํ•˜ ํ˜œํ•œ ํ˜œํ•ด ํ˜œํ–ฅ ํ˜œํ˜„ ํ˜œํ˜ผ ํ˜œํ™ ํ˜œํ™” ํ˜œํšจ ํ˜œ๋‚จ ํ˜œ๋ˆˆ ํ˜œ๋‹ฌ ํ˜œ๋‹น ํ˜œ๋ด„ ํ˜œ๋น„ ํ˜œ์Šฌ ํ˜œ์—ด ํ˜œ์˜ ํ˜œ์ž ํ˜œํƒœ ํ˜œํ˜œ \ No newline at end of file diff --git a/packages/mugunghwa/sources/98.js b/packages/mugunghwa/sources/98.js deleted file mode 100644 index bedcd2e..0000000 --- a/packages/mugunghwa/sources/98.js +++ /dev/null @@ -1,179 +0,0 @@ -/** - * 98์ง„๋ฒ•->84์ง„๋ฒ•์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ - * ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ์œ„ํ•ด ์ž„์‹œ๋กœ ๊ตฌ์„ฑํ•œ ์ฝ”๋“œ๋“ค ์ž…๋‹ˆ๋‹ค. - */ - -const fs = require("fs") -//const Hangul = require('hangul-js') - -/** - * ๊ตฌ์„ฑ ์ค‘์ธ ๋ฌด๊ถํ™”72์šฉ ๊ณต์šฉ ํ•จ์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - */ -const mugunghwa = require("../mugunghwa.js") - -/** - * ํ•„ํ„ฐ๋ง ๋˜์ง€ ์•Š์€ 98๊ฐ€์ง€ ๊ธ€์ž ๋ชฉ๋ก - */ -const nonFiltered98CharMap = [ - "๋‚˜", "๋‚œ", "๋‚ด", "๋‹ค", "๋‹จ", "๋‹ด", "๋„", "๋ผ", "๋ž˜", "๋ฅ˜", "๋ฆฌ", "๋ชจ", - "๋ฌด", "๋ฏธ", "๋ฏผ", "์‚ฌ", "์‚ฐ", "์ƒ", "์ƒˆ", "์ƒ", "์„œ", "์„ ", "์„ค", "์„ฌ", - "์„ฑ", "์†Œ", "์†”", "์†œ", "์†ก", "์ˆ˜", "์‹œ", "์‹ ", "์‹ค", "์‹ฌ", "์•„", "์•ˆ", - "์• ", "์–‘", "์—ฌ", "์—ฐ", "์˜ˆ", "์˜ค", "์˜จ", "์š”", "์šฐ", "์›”", "์œ ", "์œค", - "์œจ", "์€", "์ด", "์ผ", "์ž„", "์ •", "์ฐจ", "์ฐฝ", "์ฑ„", "์ฒœ", "์ฒจ", "์ฒญ", - "์ดˆ", "์ด", "ํ‘œ", "ํ•˜", "ํ•œ", "ํ•ด", "ํ–ฅ", "ํ˜„", "ํ˜ผ", "ํ™", "ํ™”", "ํšจ", // ์—ฌ๊ธฐ๊นŒ์ง€ 72์ง„ - "๋‚จ", "๋ˆˆ", "๋‹ฌ", "๋‹น", "๋ด„", "๋น„", "์Šฌ", "์—ด", "์˜", "์ž", "ํƒœ", "ํ˜œ", // 12๋ณด์ˆ˜ - "๋‚ ", "๋Š˜", "๋ถ„", "์ƒ˜", "์ˆœ", "์ธ", "์žฅ", "์ „", "์ข…", "์ฃผ", "์ง€", "์ง„", - "์ฐฌ", "์ฒ˜" // 14๋ณด์ˆ˜ -] - -// ํ•„ํ„ฐ๋ง ๋˜์ง€ ์•Š์€ ๊ธ€์ž ๋ชฉ๋ก ์ •๋ ฌ๋ฒ• -// console.log(JSON.stringify(nonFiltered98CharMap.sort())) - -// ํ•„ํ„ฐ๋ง ๋˜์ง€ ์•Š์€ 84์ง„๋ฒ• ๊ธ€์ž๋“ค์„ txt๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. -fs.writeFileSync(__dirname + "/98_non_filtered.txt", mugunghwa.getNonFilteredWordsTxt(98, nonFiltered98CharMap)) - -/** - * ํ•„ํ„ฐ๋ง ๋œ 84์ง„๋ฒ• ๋‹จ์–ด ๋ชฉ๋ก - * (์ตœ์ข…์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค!) - */ -var filtered84BaseWordsMap = [] - -/** - * 98์ง„๋ฒ• ๋‹จ์–ด ์ค‘ ์ง€์–‘ํ•ด์•ผํ•  ๋‹จ์–ด ๋ชฉ๋ก - */ -var negativeWords = [] - -/** - * ์ง€์–‘ํ•ด์•ผํ•  ๋‹จ์–ด ๋ชฉ๋ก์„ ํŒŒ์ผ์—์„œ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. - */ -var loadNegativeWordsFile = (filleName, charMap) => { - var filterData = fs.readFileSync(filleName, "utf8").split(" ") - for (let filterWord of filterData) { - if(filterWord.length == 0) continue // ๋ฉ”๋ชจ์žฅ์— ์ ํžŒ๊ฒŒ ์—†์œผ๋ฉด ๋„˜์–ด๊ฐ€๊ธฐ - - let wordIndex = mugunghwa.getWordIndex(filterWord, charMap, 98) - if(negativeWords.indexOf(wordIndex) != -1) continue - negativeWords.push(wordIndex) - } -} - -loadNegativeWordsFile(__dirname + "/84_negative_words.txt", nonFiltered98CharMap) -loadNegativeWordsFile(__dirname + "/98_negative_words.txt", nonFiltered98CharMap) - -// ์„ค๊ณ„์ƒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” 98์ง„๋ฒ• ์ƒ ์ตœ๋Œ€ ์ˆซ์ž๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -var available98BaseCount = mugunghwa.decimalBase([98, 98], [97, 97]) + 1 - -// ์„ค๊ณ„ ์ƒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” 84์ง„๋ฒ• ์ƒ ์ตœ๋Œ€ ์ˆซ์ž๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -var available84BaseCount = mugunghwa.decimalBase([84, 84], [83, 83]) + 1 - -// ์„ค๊ณ„ ์ƒ ํ•„ํ„ฐ๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ง„๋ฒ• ์ฐจ๋กœ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -var availableFilterCount = available98BaseCount - available84BaseCount - 1872 - -// ์„ค๊ณ„ ์ƒ ํ•„ํ„ฐ๊ฐ€ ์ ์šฉ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ํผ์„ผํŠธ๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -var availableFilterPercentage = (availableFilterCount / (available98BaseCount-available84BaseCount)) * 100 - -/** - * ํ•„ํ„ฐ๋ง ๋œ 84์ง„๋ฒ•์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. - */ -var filterize = () => { - let filteredMap = [] - for (let i = 0; i < available98BaseCount; i++) { - let isNegativeWord = negativeWords.indexOf(i) !== -1 - if (isNegativeWord) continue - let charIndexMatrix = mugunghwa.multipleBase([98, 98], i) - - let encodedWord = nonFiltered98CharMap[charIndexMatrix[0]] + nonFiltered98CharMap[charIndexMatrix[1]] - filteredMap.push(encodedWord) - } - filtered84BaseWordsMap = filteredMap -} - -filterize() - -// ์ด์ „์— ๊ตฌ์„ฑํ•œ ์ง€ํ–ฅ ๋‹จ์–ด ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. -var previousCompletedWords = [] - -/** - * ์ด์ „ ์ง„๋ฒ•์—์„œ ๊ตฌ์„ฑํ•œ ์™„์„ฑ๋œ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. - */ -var load84FilteredFile = () => { - var filterData = fs.readFileSync(__dirname + "/84_filtered.txt", "utf8").split(" ") - - for (let filterWord of filterData) { - if(filterWord.length == 0) continue - let wordIndex = mugunghwa.getWordIndex(filterWord, nonFiltered98CharMap, 84) - if(previousCompletedWords.indexOf(wordIndex) != -1) continue - previousCompletedWords.push(wordIndex) - } -} - -load84FilteredFile() - -/** - * ํ•„ํ„ฐ๋ง ๊ตฌ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ๋“ค์„ txt๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. - */ -var outputResult = () => { - let filteredWordsTxt = "" - let targetWordsTxt = "" - let targetWordsTxtCount = 0 - let notUsedWordsTxt = "" - - let successfullyLoopCount = 0 - for (let i = 0; i < (available98BaseCount); i++) { - - // ๋ถ„๋ฅ˜๋œ(ํ˜น์€ ๋ถ„๋ฅ˜์ค‘์ธ) ๊ธ€์ž ์กฐํ•ฉ ์ˆ˜ ๋งŒํผ๋งŒ ์ƒ์‚ฐ (84์ง„๋ฒ•์œผ๋กœ ๋งŒ๋“ค์–ด์•ผํ•จ) - if(typeof(filtered84BaseWordsMap[i]) == "undefined"){ - console.log(`${i}๋ฒˆ์งธ์—์„œ ์ƒ์‚ฐ์ค‘๋‹จ`) - break - } - - let wordIndex = mugunghwa.getWordIndex(filtered84BaseWordsMap[i], nonFiltered98CharMap, 84) - - // ๋ถ€์ •๋‹จ์–ด ์กฐํ•ฉ์ผ ๊ฒฝ์šฐ ๋„˜์–ด๊ฐ€๊ธฐ - //if(negativeWords.indexOf(wordIndex) != -1) continue - - filteredWordsTxt += `${filtered84BaseWordsMap[i]} ` - successfullyLoopCount ++ - - if(previousCompletedWords.indexOf(wordIndex) == -1){ - targetWordsTxt += `${filtered84BaseWordsMap[i]} ` - if(++targetWordsTxtCount == 26){ - targetWordsTxt += "\r\n" - targetWordsTxtCount = 0 - } - } - } - console.log(`์ •์ƒ์ž‘์„ฑ ์ˆ˜ : ${successfullyLoopCount}`) - - fs.writeFileSync(__dirname + "/98_filtered.txt", filteredWordsTxt) - fs.writeFileSync(__dirname + "/98_target.txt", targetWordsTxt) - - if(notUsedWordsTxt.length != 0) - fs.writeFileSync(__dirname + "/98_filter_not_used_words.txt", notUsedWordsTxt) -} - -outputResult() - -var remainBase14UniqueCount = filtered84BaseWordsMap.length-available84BaseCount - -/** - * 84->72์ง„๋ฒ•์˜ ๋ชฉํ‘œ ๋‹ฌ์„ฑ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. - */ -var printStatus = () => { - var negativeWordsLength = negativeWords.length - 1872 - - console.log("------------------๊ธฐ๋ณธ์ •๋ณด------------------") - console.log(`98์ง„๋ฒ• ์ตœ๋Œ€ ๊ฒฝ์šฐ์ˆ˜: ${available98BaseCount}`) - console.log(`84์ง„๋ฒ• ์ตœ๋Œ€ ๊ฒฝ์šฐ์ˆ˜: ${available84BaseCount}`) - console.log(`๋ณด์™„๊ฐ€๋Šฅํ•œ ๋‹จ์–ด์ˆ˜: ${availableFilterCount}`) - console.log(`์ตœ์ข…์ ์œผ๋กœ ๋ณด์™„๋˜๋Š” ๋‹จ์–ด์ˆ˜: ${availableFilterPercentage}%`) - console.log("------------------๊ตฌ์„ฑ์ƒํƒœ------------------") - console.log(`ํ˜„์žฌ ๊ตฌ์„ฑ๋œ ๋งต๊ฐœ์ˆ˜: ${filtered84BaseWordsMap.length}(${remainBase14UniqueCount}๊ฐœ ์—ฌ๋ถ„)`) - console.log(`ํ˜„์žฌ ๊ตฌ์„ฑ๋œ ๋ฐฐ์ œ์ˆ˜: ${negativeWordsLength}๊ฐœ`) - console.log("------------------๋‹ฌ์„ฑ์ƒํƒœ------------------") - console.log(`14๋ณด์ˆ˜ ์ด์šฉ ํผ์„ผํŠธ: ${negativeWordsLength/availableFilterCount*100}%`) - console.log(`14๋ณด์ˆ˜ ํ˜„์žฌ ์ด์šฉ๋ฅ : ${negativeWordsLength}/${availableFilterCount}`) - console.log(`์ œ๊ฑฐ ๊ฐ€๋Šฅํ•œ ๋‹จ์–ด์ˆ˜: ${availableFilterCount-negativeWordsLength}๊ฐœ`) -} - -printStatus() \ No newline at end of file diff --git a/packages/mugunghwa/sources/98_filtered.txt b/packages/mugunghwa/sources/98_filtered.txt deleted file mode 100644 index fcc153d..0000000 --- a/packages/mugunghwa/sources/98_filtered.txt +++ /dev/null @@ -1 +0,0 @@ -๋‚˜๋‹จ ๋‚˜๋‹ด ๋‚˜๋ผ ๋‚˜๋ž˜ ๋‚˜๋ฅ˜ ๋‚˜๋ฆฌ ๋‚˜๋ชจ ๋‚˜๋ฏผ ๋‚˜์‚ฌ ๋‚˜์‚ฐ ๋‚˜์ƒ ๋‚˜์ƒˆ ๋‚˜์ƒ ๋‚˜์„  ๋‚˜์„ฑ ๋‚˜์†Œ ๋‚˜์†” ๋‚˜์†œ ๋‚˜์†ก ๋‚˜์ˆ˜ ๋‚˜์‹  ๋‚˜์‹ค ๋‚˜์‹ฌ ๋‚˜์•ˆ ๋‚˜์•  ๋‚˜์–‘ ๋‚˜์—ฐ ๋‚˜์˜ˆ ๋‚˜์˜จ ๋‚˜์š” ๋‚˜์šฐ ๋‚˜์›” ๋‚˜์œค ๋‚˜์œจ ๋‚˜์€ ๋‚˜์ผ ๋‚˜์ • ๋‚˜์ฐจ ๋‚˜์ฒœ ๋‚˜์ฒจ ๋‚˜์ฒญ ๋‚˜ํ‘œ ๋‚˜ํ•˜ ๋‚˜ํ•œ ๋‚˜ํ•ด ๋‚˜ํ–ฅ ๋‚˜ํ˜„ ๋‚˜ํ˜ผ ๋‚˜ํ™ ๋‚˜ํ™” ๋‚˜ํšจ ๋‚˜๋‚จ ๋‚˜๋ˆˆ ๋‚˜๋‹ฌ ๋‚˜๋‹น ๋‚˜๋ด„ ๋‚˜๋น„ ๋‚˜์Šฌ ๋‚˜์—ด ๋‚˜์˜ ๋‚˜์ž ๋‚˜ํ˜œ ๋‚˜๋‚  ๋‚˜๋Š˜ ๋‚˜๋ถ„ ๋‚˜์ƒ˜ ๋‚˜์ˆœ ๋‚˜์ธ ๋‚˜์žฅ ๋‚˜์ „ ๋‚˜์ข… ๋‚˜์ฃผ ๋‚˜์ง€ ๋‚˜์ง„ ๋‚˜์ฐฌ ๋‚˜์ฒ˜ ๋‚œ๋‚˜ ๋‚œ๋‹ด ๋‚œ๋„ ๋‚œ๋ผ ๋‚œ๋ž˜ ๋‚œ๋ชจ ๋‚œ๋ฏธ ๋‚œ์‚ฐ ๋‚œ์ƒˆ ๋‚œ์„œ ๋‚œ์„  ๋‚œ์„ค ๋‚œ์„ฌ ๋‚œ์„ฑ ๋‚œ์†” ๋‚œ์†œ ๋‚œ์†ก ๋‚œ์ˆ˜ ๋‚œ์‹  ๋‚œ์‹ค ๋‚œ์‹ฌ ๋‚œ์•„ ๋‚œ์•  ๋‚œ์–‘ ๋‚œ์—ฌ ๋‚œ์—ฐ ๋‚œ์˜ˆ ๋‚œ์˜ค ๋‚œ์˜จ ๋‚œ์šฐ ๋‚œ์›” ๋‚œ์œค ๋‚œ์œจ ๋‚œ์€ ๋‚œ์ผ ๋‚œ์ • ๋‚œ์ฐจ ๋‚œ์ฐฝ ๋‚œ์ฑ„ ๋‚œ์ฒœ ๋‚œ์ฒจ ๋‚œ์ดˆ ๋‚œ์ด ๋‚œํ‘œ ๋‚œํ•˜ ๋‚œํ•œ ๋‚œํ–ฅ ๋‚œํ˜„ ๋‚œํ˜ผ ๋‚œํ™ ๋‚œํ™” ๋‚œํšจ ๋‚œ๋ˆˆ ๋‚œ๋‹ฌ ๋‚œ๋ด„ ๋‚œ๋น„ ๋‚œ์Šฌ ๋‚œ์—ด ๋‚œ์˜ ๋‚œํ˜œ ๋‚œ๋‚  ๋‚œ๋Š˜ ๋‚œ๋ถ„ ๋‚œ์ƒ˜ ๋‚œ์ˆœ ๋‚œ์ธ ๋‚œ์žฅ ๋‚œ์ „ ๋‚œ์ข… ๋‚œ์ฃผ ๋‚œ์ง€ ๋‚œ์ง„ ๋‚œ์ฐฌ ๋‚œ์ฒ˜ ๋‚ด๋‹จ ๋‚ด๋‹ด ๋‚ด๋ฅ˜ ๋‚ด๋ชจ ๋‚ด๋ฌด ๋‚ด์‚ฌ ๋‚ด์‚ฐ ๋‚ด์ƒˆ ๋‚ด์ƒ ๋‚ด์„œ ๋‚ด์„  ๋‚ด์„ค ๋‚ด์„ฌ ๋‚ด์„ฑ ๋‚ด์†Œ ๋‚ด์†” ๋‚ด์†œ ๋‚ด์†ก ๋‚ด์ˆ˜ ๋‚ด์‹ค ๋‚ด์•„ ๋‚ด์•ˆ ๋‚ด์–‘ ๋‚ด์—ฌ ๋‚ด์˜ค ๋‚ด์˜จ ๋‚ด์›” ๋‚ด์œค ๋‚ด์œจ ๋‚ด์€ ๋‚ด์ด ๋‚ด์ผ ๋‚ด์ž„ ๋‚ด์ฐจ ๋‚ด์ฐฝ ๋‚ด์ฑ„ ๋‚ด์ฒœ ๋‚ด์ฒจ ๋‚ด์ฒญ ๋‚ด์ดˆ ๋‚ด์ด ๋‚ดํ‘œ ๋‚ดํ•˜ ๋‚ดํ•ด ๋‚ดํ–ฅ ๋‚ดํ˜„ ๋‚ดํ˜ผ ๋‚ดํ™ ๋‚ดํ™” ๋‚ดํšจ ๋‚ด๋‚จ ๋‚ด๋ˆˆ ๋‚ด๋‹ฌ ๋‚ด๋‹น ๋‚ด๋ด„ ๋‚ด์Šฌ ๋‚ด์—ด ๋‚ด์˜ ๋‚ด์ž ๋‚ดํƒœ ๋‚ดํ˜œ ๋‚ด๋‚  ๋‚ด๋Š˜ ๋‚ด๋ถ„ ๋‚ด์ƒ˜ ๋‚ด์ˆœ ๋‚ด์ธ ๋‚ด์žฅ ๋‚ด์ „ ๋‚ด์ข… ๋‚ด์ฃผ ๋‚ด์ง€ ๋‚ด์ง„ ๋‚ด์ฐฌ ๋‚ด์ฒ˜ ๋‹ค๋‚˜ ๋‹ค๋‚œ ๋‹ค๋‹จ ๋‹ค๋‹ด ๋‹ค๋„ ๋‹ค๋ผ ๋‹ค๋ž˜ ๋‹ค๋ฅ˜ ๋‹ค๋ชจ ๋‹ค๋ฌด ๋‹ค๋ฏธ ๋‹ค๋ฏผ ๋‹ค์‚ฌ ๋‹ค์‚ฐ ๋‹ค์ƒ ๋‹ค์ƒˆ ๋‹ค์ƒ ๋‹ค์„œ ๋‹ค์„  ๋‹ค์„ค ๋‹ค์„ฌ ๋‹ค์„ฑ ๋‹ค์†Œ ๋‹ค์†” ๋‹ค์†œ ๋‹ค์†ก ๋‹ค์ˆ˜ ๋‹ค์‹ค ๋‹ค์‹ฌ ๋‹ค์•ˆ ๋‹ค์•  ๋‹ค์–‘ ๋‹ค์—ฌ ๋‹ค์—ฐ ๋‹ค์˜ˆ ๋‹ค์˜จ ๋‹ค์šฐ ๋‹ค์›” ๋‹ค์œ  ๋‹ค์œค ๋‹ค์œจ ๋‹ค์€ ๋‹ค์ผ ๋‹ค์ž„ ๋‹ค์ • ๋‹ค์ฐจ ๋‹ค์ฐฝ ๋‹ค์ฑ„ ๋‹ค์ฒœ ๋‹ค์ฒจ ๋‹ค์ฒญ ๋‹ค์ดˆ ๋‹ค์ด ๋‹คํ‘œ ๋‹คํ•˜ ๋‹คํ–ฅ ๋‹คํ˜„ ๋‹คํ˜ผ ๋‹คํ™ ๋‹คํ™” ๋‹คํšจ ๋‹ค๋‚จ ๋‹ค๋ˆˆ ๋‹ค๋‹ฌ ๋‹ค๋‹น ๋‹ค๋ด„ ๋‹ค๋น„ ๋‹ค์Šฌ ๋‹ค์—ด ๋‹ค์˜ ๋‹ค์ž ๋‹คํƒœ ๋‹คํ˜œ ๋‹ค๋‚  ๋‹ค๋Š˜ ๋‹ค๋ถ„ ๋‹ค์ƒ˜ ๋‹ค์ˆœ ๋‹ค์ธ ๋‹ค์žฅ ๋‹ค์ „ ๋‹ค์ข… ๋‹ค์ฃผ ๋‹ค์ง€ ๋‹ค์ฐฌ ๋‹ค์ฒ˜ ๋‹จ๋‚˜ ๋‹จ๋‚œ ๋‹จ๋‚ด ๋‹จ๋‹ค ๋‹จ๋‹ด ๋‹จ๋„ ๋‹จ๋ผ ๋‹จ๋ž˜ ๋‹จ๋ฅ˜ ๋‹จ๋ฆฌ ๋‹จ๋ชจ ๋‹จ๋ฌด ๋‹จ๋ฏธ ๋‹จ๋ฏผ ๋‹จ์‚ฌ ๋‹จ์‚ฐ ๋‹จ์ƒ ๋‹จ์ƒˆ ๋‹จ์ƒ ๋‹จ์„  ๋‹จ์„ค ๋‹จ์„ฌ ๋‹จ์„ฑ ๋‹จ์†Œ ๋‹จ์†” ๋‹จ์†œ ๋‹จ์†ก ๋‹จ์‹œ ๋‹จ์‹ค ๋‹จ์•„ ๋‹จ์•ˆ ๋‹จ์•  ๋‹จ์–‘ ๋‹จ์—ฌ ๋‹จ์˜ˆ ๋‹จ์˜ค ๋‹จ์˜จ ๋‹จ์š” ๋‹จ์šฐ ๋‹จ์›” ๋‹จ์œ  ๋‹จ์œค ๋‹จ์œจ ๋‹จ์€ ๋‹จ์ด ๋‹จ์ž„ ๋‹จ์ • ๋‹จ์ฐจ ๋‹จ์ฐฝ ๋‹จ์ฑ„ ๋‹จ์ฒœ ๋‹จ์ฒจ ๋‹จ์ฒญ ๋‹จ์ดˆ ๋‹จ์ด ๋‹จํ‘œ ๋‹จํ•˜ ๋‹จํ•œ ๋‹จํ•ด ๋‹จํ–ฅ ๋‹จํ˜„ ๋‹จํ˜ผ ๋‹จํ™ ๋‹จํ™” ๋‹จํšจ ๋‹จ๋‚จ ๋‹จ๋ˆˆ ๋‹จ๋‹ฌ ๋‹จ๋ด„ ๋‹จ๋น„ ๋‹จ์Šฌ ๋‹จ์˜ ๋‹จ์ž ๋‹จํƒœ ๋‹จํ˜œ ๋‹จ๋‚  ๋‹จ๋Š˜ ๋‹จ๋ถ„ ๋‹จ์ƒ˜ ๋‹จ์ˆœ ๋‹จ์ธ ๋‹จ์žฅ ๋‹จ์ „ ๋‹จ์ข… ๋‹จ์ฃผ ๋‹จ์ง€ ๋‹จ์ง„ ๋‹จ์ฐฌ ๋‹จ์ฒ˜ ๋‹ด๋‚˜ ๋‹ด๋‚œ ๋‹ด๋‹จ ๋‹ด๋„ ๋‹ด๋ผ ๋‹ด๋ž˜ ๋‹ด๋ฅ˜ ๋‹ด๋ฆฌ ๋‹ด๋ชจ ๋‹ด๋ฌด ๋‹ด๋ฏธ ๋‹ด๋ฏผ ๋‹ด์‚ฌ ๋‹ด์‚ฐ ๋‹ด์ƒ ๋‹ด์ƒˆ ๋‹ด์ƒ ๋‹ด์„œ ๋‹ด์„  ๋‹ด์„ค ๋‹ด์„ฌ ๋‹ด์„ฑ ๋‹ด์†Œ ๋‹ด์†” ๋‹ด์†œ ๋‹ด์†ก ๋‹ด์ˆ˜ ๋‹ด์‹œ ๋‹ด์‹  ๋‹ด์‹ค ๋‹ด์‹ฌ ๋‹ด์•ˆ ๋‹ด์•  ๋‹ด์–‘ ๋‹ด์—ฌ ๋‹ด์—ฐ ๋‹ด์˜ˆ ๋‹ด์˜ค ๋‹ด์˜จ ๋‹ด์š” ๋‹ด์šฐ ๋‹ด์›” ๋‹ด์œ  ๋‹ด์œค ๋‹ด์œจ ๋‹ด์€ ๋‹ด์ด ๋‹ด์ผ ๋‹ด์ • ๋‹ด์ฐจ ๋‹ด์ฐฝ ๋‹ด์ฑ„ ๋‹ด์ฒœ ๋‹ด์ฒจ ๋‹ด์ฒญ ๋‹ด์ดˆ ๋‹ด์ด ๋‹ดํ‘œ ๋‹ดํ•˜ ๋‹ดํ•œ ๋‹ดํ•ด ๋‹ดํ–ฅ ๋‹ดํ˜„ ๋‹ดํ˜ผ ๋‹ดํ™ ๋‹ดํ™” ๋‹ดํšจ ๋‹ด๋‚จ ๋‹ด๋ˆˆ ๋‹ด๋‹ฌ ๋‹ด๋‹น ๋‹ด๋ด„ ๋‹ด๋น„ ๋‹ด์Šฌ ๋‹ด์—ด ๋‹ด์˜ ๋‹ด์ž ๋‹ดํ˜œ ๋‹ด๋‚  ๋‹ด๋Š˜ ๋‹ด๋ถ„ ๋‹ด์ƒ˜ ๋‹ด์ˆœ ๋‹ด์ธ ๋‹ด์žฅ ๋‹ด์ „ ๋‹ด์ข… ๋‹ด์ฃผ ๋‹ด์ง€ ๋‹ด์ง„ ๋‹ด์ฐฌ ๋‹ด์ฒ˜ ๋„๋‚˜ ๋„๋‚ด ๋„๋‹ค ๋„๋‹จ ๋„๋‹ด ๋„๋ฅ˜ ๋„๋ฆฌ ๋„๋ฌด ๋„์‚ฌ ๋„์ƒ ๋„์ƒˆ ๋„์ƒ ๋„์„œ ๋„์„  ๋„์„ค ๋„์„ฌ ๋„์†Œ ๋„์†” ๋„์†œ ๋„์†ก ๋„์ˆ˜ ๋„์‹  ๋„์‹ค ๋„์•„ ๋„์•ˆ ๋„์•  ๋„์–‘ ๋„์—ฌ ๋„์—ฐ ๋„์˜ˆ ๋„์˜จ ๋„์š” ๋„์šฐ ๋„์›” ๋„์œ  ๋„์œค ๋„์œจ ๋„์€ ๋„์ด ๋„์ผ ๋„์ž„ ๋„์ • ๋„์ฐจ ๋„์ฐฝ ๋„์ฑ„ ๋„์ฒœ ๋„์ฒจ ๋„์ดˆ ๋„์ด ๋„ํ•˜ ๋„ํ•œ ๋„ํ•ด ๋„ํ–ฅ ๋„ํ˜„ ๋„ํ˜ผ ๋„ํ™ ๋„ํ™” ๋„ํšจ ๋„๋‚จ ๋„๋ˆˆ ๋„๋‹ฌ ๋„๋‹น ๋„๋ด„ ๋„๋น„ ๋„์Šฌ ๋„์—ด ๋„์˜ ๋„์ž ๋„ํ˜œ ๋„๋‚  ๋„๋Š˜ ๋„๋ถ„ ๋„์ƒ˜ ๋„์ˆœ ๋„์ธ ๋„์žฅ ๋„์ „ ๋„์ข… ๋„์ฃผ ๋„์ง€ ๋„์ง„ ๋„์ฐฌ ๋„์ฒ˜ ๋ผ์œค ๋ผ์œจ ๋ผ์€ ๋ผ์ • ๋ผํ˜„ ๋ผ๋‚  ๋ผ๋Š˜ ๋ผ๋ถ„ ๋ผ์ƒ˜ ๋ผ์ˆœ ๋ผ์ธ ๋ผ์žฅ ๋ผ์ „ ๋ผ์ข… ๋ผ์ฃผ ๋ผ์ง€ ๋ผ์ง„ ๋ผ์ฐฌ ๋ผ์ฒ˜ ๋ž˜๋‹ด ๋ž˜์„  ๋ž˜์†œ ๋ž˜์—ฐ ๋ž˜๋‚  ๋ž˜๋Š˜ ๋ž˜๋ถ„ ๋ž˜์ƒ˜ ๋ž˜์ˆœ ๋ž˜์ธ ๋ž˜์žฅ ๋ž˜์ „ ๋ž˜์ข… ๋ž˜์ฃผ ๋ž˜์ง€ ๋ž˜์ง„ ๋ž˜์ฐฌ ๋ž˜์ฒ˜ ๋ฅ˜์„  ๋ฅ˜๋‚  ๋ฅ˜๋Š˜ ๋ฅ˜๋ถ„ ๋ฅ˜์ƒ˜ ๋ฅ˜์ˆœ ๋ฅ˜์ธ ๋ฅ˜์žฅ ๋ฅ˜์ „ ๋ฅ˜์ข… ๋ฅ˜์ฃผ ๋ฅ˜์ง€ ๋ฅ˜์ง„ ๋ฅ˜์ฐฌ ๋ฅ˜์ฒ˜ ๋ฆฌ์„  ๋ฆฌ์„ค ๋ฆฌ์†” ๋ฆฌ์†œ ๋ฆฌ์†ก ๋ฆฌ์—ฐ ๋ฆฌ๋‚  ๋ฆฌ๋Š˜ ๋ฆฌ๋ถ„ ๋ฆฌ์ƒ˜ ๋ฆฌ์ˆœ ๋ฆฌ์ธ ๋ฆฌ์žฅ ๋ฆฌ์ „ ๋ฆฌ์ข… ๋ฆฌ์ฃผ ๋ฆฌ์ง€ ๋ฆฌ์ง„ ๋ฆฌ์ฐฌ ๋ฆฌ์ฒ˜ ๋ชจ๋‚˜ ๋ชจ๋‚ด ๋ชจ๋‹ค ๋ชจ๋‹จ ๋ชจ๋‹ด ๋ชจ๋„ ๋ชจ๋ž˜ ๋ชจ๋ฅ˜ ๋ชจ๋ฆฌ ๋ชจ๋ฏธ ๋ชจ์‚ฐ ๋ชจ์ƒ ๋ชจ์ƒˆ ๋ชจ์ƒ ๋ชจ์„œ ๋ชจ์„  ๋ชจ์„ค ๋ชจ์„ฌ ๋ชจ์„ฑ ๋ชจ์†Œ ๋ชจ์†” ๋ชจ์†œ ๋ชจ์†ก ๋ชจ์ˆ˜ ๋ชจ์•ˆ ๋ชจ์—ฐ ๋ชจ์›” ๋ชจ์œค ๋ชจ์œจ ๋ชจ์€ ๋ชจ์ผ ๋ชจ์ฐจ ๋ชจ์ฐฝ ๋ชจ์ฑ„ ๋ชจ์ฒœ ๋ชจ์ฒจ ๋ชจ์ฒญ ๋ชจ์ดˆ ๋ชจ์ด ๋ชจํ‘œ ๋ชจํ•˜ ๋ชจํ•œ ๋ชจํ–ฅ ๋ชจํ˜„ ๋ชจํ˜ผ ๋ชจํ™ ๋ชจํ™” ๋ชจํšจ ๋ชจ๋ˆˆ ๋ชจ๋‹ฌ ๋ชจ์Šฌ ๋ชจ์—ด ๋ชจ์˜ ๋ชจํƒœ ๋ชจํ˜œ ๋ชจ๋‚  ๋ชจ๋Š˜ ๋ชจ๋ถ„ ๋ชจ์ƒ˜ ๋ชจ์ˆœ ๋ชจ์ธ ๋ชจ์žฅ ๋ชจ์ „ ๋ชจ์ข… ๋ชจ์ฃผ ๋ชจ์ง€ ๋ชจ์ง„ ๋ชจ์ฐฌ ๋ชจ์ฒ˜ ๋ฌด์ƒ ๋ฌด์„ค ๋ฌด์„ฌ ๋ฌด์†” ๋ฌด์†œ ๋ฌด์†ก ๋ฌด์ˆ˜ ๋ฌด์•„ ๋ฌด์›” ๋ฌด์œค ๋ฌด์œจ ๋ฌด์€ ๋ฌด์ฑ„ ๋ฌด์ฒญ ๋ฌดํ–ฅ ๋ฌดํ™” ๋ฌด๋‚  ๋ฌด๋Š˜ ๋ฌด๋ถ„ ๋ฌด์ƒ˜ ๋ฌด์ˆœ ๋ฌด์ธ ๋ฌด์žฅ ๋ฌด์ „ ๋ฌด์ข… ๋ฌด์ฃผ ๋ฌด์ง€ ๋ฌด์ง„ ๋ฌด์ฐฌ ๋ฌด์ฒ˜ ๋ฏธ๋‚˜ ๋ฏธ๋‚œ ๋ฏธ๋‹ค ๋ฏธ๋‹จ ๋ฏธ๋„ ๋ฏธ๋ž˜ ๋ฏธ๋ฅ˜ ๋ฏธ๋ฌด ๋ฏธ๋ฏผ ๋ฏธ์‚ฌ ๋ฏธ์‚ฐ ๋ฏธ์ƒˆ ๋ฏธ์ƒ ๋ฏธ์„œ ๋ฏธ์„  ๋ฏธ์„ค ๋ฏธ์„ฌ ๋ฏธ์„ฑ ๋ฏธ์†Œ ๋ฏธ์†” ๋ฏธ์†œ ๋ฏธ์†ก ๋ฏธ์‹ค ๋ฏธ์•  ๋ฏธ์–‘ ๋ฏธ์—ฌ ๋ฏธ์—ฐ ๋ฏธ์˜ˆ ๋ฏธ์˜ค ๋ฏธ์˜จ ๋ฏธ์š” ๋ฏธ์šฐ ๋ฏธ์›” ๋ฏธ์œ  ๋ฏธ์œค ๋ฏธ์œจ ๋ฏธ์€ ๋ฏธ์ผ ๋ฏธ์ž„ ๋ฏธ์ • ๋ฏธ์ฐฝ ๋ฏธ์ฑ„ ๋ฏธ์ฒจ ๋ฏธ์ฒญ ๋ฏธ์ดˆ ๋ฏธ์ด ๋ฏธํ‘œ ๋ฏธํ•˜ ๋ฏธํ•œ ๋ฏธํ•ด ๋ฏธํ–ฅ ๋ฏธํ˜„ ๋ฏธํ™ ๋ฏธํšจ ๋ฏธ๋ˆˆ ๋ฏธ๋‹น ๋ฏธ๋ด„ ๋ฏธ์Šฌ ๋ฏธ์—ด ๋ฏธ์˜ ๋ฏธ์ž ๋ฏธํƒœ ๋ฏธํ˜œ ๋ฏธ๋‚  ๋ฏธ๋Š˜ ๋ฏธ๋ถ„ ๋ฏธ์ƒ˜ ๋ฏธ์ˆœ ๋ฏธ์ธ ๋ฏธ์žฅ ๋ฏธ์ „ ๋ฏธ์ข… ๋ฏธ์ฃผ ๋ฏธ์ง€ ๋ฏธ์ง„ ๋ฏธ์ฐฌ ๋ฏธ์ฒ˜ ๋ฏผ๋‚œ ๋ฏผ๋‹จ ๋ฏผ๋„ ๋ฏผ๋ผ ๋ฏผ๋ž˜ ๋ฏผ๋ฅ˜ ๋ฏผ๋ฆฌ ๋ฏผ๋ฌด ๋ฏผ๋ฏธ ๋ฏผ์‚ฐ ๋ฏผ์ƒ ๋ฏผ์ƒˆ ๋ฏผ์„œ ๋ฏผ์„  ๋ฏผ์„ค ๋ฏผ์„ฌ ๋ฏผ์„ฑ ๋ฏผ์†Œ ๋ฏผ์†” ๋ฏผ์†œ ๋ฏผ์†ก ๋ฏผ์ˆ˜ ๋ฏผ์‹œ ๋ฏผ์‹  ๋ฏผ์‹ค ๋ฏผ์•„ ๋ฏผ์•ˆ ๋ฏผ์•  ๋ฏผ์–‘ ๋ฏผ์—ฌ ๋ฏผ์—ฐ ๋ฏผ์˜ˆ ๋ฏผ์˜ค ๋ฏผ์šฐ ๋ฏผ์›” ๋ฏผ์œค ๋ฏผ์œจ ๋ฏผ์€ ๋ฏผ์ด ๋ฏผ์ผ ๋ฏผ์ž„ ๋ฏผ์ • ๋ฏผ์ฐจ ๋ฏผ์ฐฝ ๋ฏผ์ฑ„ ๋ฏผ์ฒœ ๋ฏผ์ฒจ ๋ฏผ์ฒญ ๋ฏผ์ดˆ ๋ฏผ์ด ๋ฏผํ‘œ ๋ฏผํ•˜ ๋ฏผํ•œ ๋ฏผํ•ด ๋ฏผํ–ฅ ๋ฏผํ˜„ ๋ฏผํ˜ผ ๋ฏผํ™ ๋ฏผํšจ ๋ฏผ๋ˆˆ ๋ฏผ๋‹ฌ ๋ฏผ๋‹น ๋ฏผ๋ด„ ๋ฏผ์Šฌ ๋ฏผ์—ด ๋ฏผ์˜ ๋ฏผ์ž ๋ฏผํƒœ ๋ฏผํ˜œ ๋ฏผ๋‚  ๋ฏผ๋Š˜ ๋ฏผ๋ถ„ ๋ฏผ์ƒ˜ ๋ฏผ์ˆœ ๋ฏผ์ธ ๋ฏผ์žฅ ๋ฏผ์ „ ๋ฏผ์ข… ๋ฏผ์ฃผ ๋ฏผ์ง€ ๋ฏผ์ง„ ๋ฏผ์ฐฌ ๋ฏผ์ฒ˜ ์‚ฌ๋‚œ ์‚ฌ๋‹ด ์‚ฌ๋ฅ˜ ์‚ฌ๋ฌด ์‚ฌ๋ฏธ ์‚ฌ๋ฏผ ์‚ฌ์‚ฐ ์‚ฌ์ƒ ์‚ฌ์„ฌ ์‚ฌ์„ฑ ์‚ฌ์†” ์‚ฌ์†œ ์‚ฌ์†ก ์‚ฌ์ˆ˜ ์‚ฌ์‹ค ์‚ฌ์‹ฌ ์‚ฌ์•ˆ ์‚ฌ์•  ์‚ฌ์—ฐ ์‚ฌ์˜ˆ ์‚ฌ์›” ์‚ฌ์œ  ์‚ฌ์œค ์‚ฌ์œจ ์‚ฌ์€ ์‚ฌ์ด ์‚ฌ์ผ ์‚ฌ์ฐจ ์‚ฌ์ฒœ ์‚ฌ์ฒจ ์‚ฌ์ฒญ ์‚ฌ์ดˆ ์‚ฌ์ด ์‚ฌํ•˜ ์‚ฌํ•œ ์‚ฌํ–ฅ ์‚ฌํ˜„ ์‚ฌํ˜ผ ์‚ฌํ™ ์‚ฌํ™” ์‚ฌํšจ ์‚ฌ๋‚จ ์‚ฌ๋ˆˆ ์‚ฌ๋‹ฌ ์‚ฌ๋‹น ์‚ฌ์—ด ์‚ฌ์˜ ์‚ฌํ˜œ ์‚ฌ๋‚  ์‚ฌ๋Š˜ ์‚ฌ๋ถ„ ์‚ฌ์ƒ˜ ์‚ฌ์ˆœ ์‚ฌ์ธ ์‚ฌ์žฅ ์‚ฌ์ „ ์‚ฌ์ข… ์‚ฌ์ฃผ ์‚ฌ์ง€ ์‚ฌ์ง„ ์‚ฌ์ฐฌ ์‚ฌ์ฒ˜ ์‚ฐ๋‚˜ ์‚ฐ๋‚œ ์‚ฐ๋‚ด ์‚ฐ๋‹จ ์‚ฐ๋‹ด ์‚ฐ๋„ ์‚ฐ๋ผ ์‚ฐ๋ž˜ ์‚ฐ๋ฅ˜ ์‚ฐ๋ฆฌ ์‚ฐ๋ฌด ์‚ฐ๋ฏธ ์‚ฐ๋ฏผ ์‚ฐ์‚ฌ ์‚ฐ์ƒ ์‚ฐ์ƒˆ ์‚ฐ์ƒ ์‚ฐ์„œ ์‚ฐ์„  ์‚ฐ์„ค ์‚ฐ์„ฌ ์‚ฐ์†Œ ์‚ฐ์†” ์‚ฐ์†œ ์‚ฐ์†ก ์‚ฐ์ˆ˜ ์‚ฐ์‹œ ์‚ฐ์‹  ์‚ฐ์‹ค ์‚ฐ์‹ฌ ์‚ฐ์•„ ์‚ฐ์•ˆ ์‚ฐ์•  ์‚ฐ์–‘ ์‚ฐ์—ฌ ์‚ฐ์—ฐ ์‚ฐ์˜ˆ ์‚ฐ์˜ค ์‚ฐ์˜จ ์‚ฐ์š” ์‚ฐ์šฐ ์‚ฐ์›” ์‚ฐ์œ  ์‚ฐ์œค ์‚ฐ์œจ ์‚ฐ์€ ์‚ฐ์ผ ์‚ฐ์ž„ ์‚ฐ์ • ์‚ฐ์ฐจ ์‚ฐ์ฐฝ ์‚ฐ์ฑ„ ์‚ฐ์ฒœ ์‚ฐ์ฒจ ์‚ฐ์ฒญ ์‚ฐ์ดˆ ์‚ฐ์ด ์‚ฐํ‘œ ์‚ฐํ•˜ ์‚ฐํ•œ ์‚ฐํ•ด ์‚ฐํ–ฅ ์‚ฐํ˜„ ์‚ฐํ˜ผ ์‚ฐํ™ ์‚ฐํ™” ์‚ฐํšจ ์‚ฐ๋‚จ ์‚ฐ๋ˆˆ ์‚ฐ๋‹ฌ ์‚ฐ๋ด„ ์‚ฐ๋น„ ์‚ฐ์Šฌ ์‚ฐ์—ด ์‚ฐ์˜ ์‚ฐ์ž ์‚ฐํƒœ ์‚ฐํ˜œ ์‚ฐ๋‚  ์‚ฐ๋Š˜ ์‚ฐ๋ถ„ ์‚ฐ์ƒ˜ ์‚ฐ์ˆœ ์‚ฐ์ธ ์‚ฐ์žฅ ์‚ฐ์ „ ์‚ฐ์ข… ์‚ฐ์ฃผ ์‚ฐ์ง€ ์‚ฐ์ง„ ์‚ฐ์ฐฌ ์‚ฐ์ฒ˜ ์ƒ๋‚˜ ์ƒ๋‚ด ์ƒ๋‹ค ์ƒ๋‹จ ์ƒ๋„ ์ƒ๋ผ ์ƒ๋ž˜ ์ƒ๋ฅ˜ ์ƒ๋ฆฌ ์ƒ๋ชจ ์ƒ๋ฌด ์ƒ๋ฏธ ์ƒ๋ฏผ ์ƒ์‚ฐ ์ƒ์ƒˆ ์ƒ์ƒ ์ƒ์„œ ์ƒ์„ค ์ƒ์„ฌ ์ƒ์„ฑ ์ƒ์†” ์ƒ์†œ ์ƒ์†ก ์ƒ์‹  ์ƒ์•„ ์ƒ์•ˆ ์ƒ์•  ์ƒ์–‘ ์ƒ์—ฌ ์ƒ์—ฐ ์ƒ์˜ˆ ์ƒ์˜ค ์ƒ์˜จ ์ƒ์šฐ ์ƒ์›” ์ƒ์œ  ์ƒ์œค ์ƒ์œจ ์ƒ์€ ์ƒ์ด ์ƒ์ผ ์ƒ์ž„ ์ƒ์ฐจ ์ƒ์ฐฝ ์ƒ์ฑ„ ์ƒ์ฒœ ์ƒ์ฒจ ์ƒ์ฒญ ์ƒ์ดˆ ์ƒ์ด ์ƒํ•˜ ์ƒํ–ฅ ์ƒํ˜„ ์ƒํ˜ผ ์ƒํ™ ์ƒํ™” ์ƒํšจ ์ƒ๋‚จ ์ƒ๋ˆˆ ์ƒ๋‹ฌ ์ƒ๋‹น ์ƒ๋ด„ ์ƒ๋น„ ์ƒ์Šฌ ์ƒ์—ด ์ƒ์˜ ์ƒ์ž ์ƒํƒœ ์ƒํ˜œ ์ƒ๋‚  ์ƒ๋Š˜ ์ƒ๋ถ„ ์ƒ์ƒ˜ ์ƒ์ˆœ ์ƒ์ธ ์ƒ์žฅ ์ƒ์ „ ์ƒ์ข… ์ƒ์ฃผ ์ƒ์ง€ ์ƒ์ง„ ์ƒ์ฐฌ ์ƒ์ฒ˜ ์ƒˆ๋‚œ ์ƒˆ๋‹จ ์ƒˆ๋‹ด ์ƒˆ๋„ ์ƒˆ๋ฅ˜ ์ƒˆ๋ฌด ์ƒˆ๋ฏธ ์ƒˆ๋ฏผ ์ƒˆ์‚ฌ ์ƒˆ์‚ฐ ์ƒˆ์ƒ ์ƒˆ์ƒ ์ƒˆ์„œ ์ƒˆ์„  ์ƒˆ์„ค ์ƒˆ์„ฌ ์ƒˆ์„ฑ ์ƒˆ์†Œ ์ƒˆ์†” ์ƒˆ์†œ ์ƒˆ์†ก ์ƒˆ์ˆ˜ ์ƒˆ์‹œ ์ƒˆ์‹  ์ƒˆ์‹ค ์ƒˆ์‹ฌ ์ƒˆ์•„ ์ƒˆ์•ˆ ์ƒˆ์–‘ ์ƒˆ์—ฌ ์ƒˆ์—ฐ ์ƒˆ์˜ˆ ์ƒˆ์˜ค ์ƒˆ์˜จ ์ƒˆ์š” ์ƒˆ์›” ์ƒˆ์œ  ์ƒˆ์œค ์ƒˆ์œจ ์ƒˆ์€ ์ƒˆ์ด ์ƒˆ์ผ ์ƒˆ์ž„ ์ƒˆ์ • ์ƒˆ์ฐจ ์ƒˆ์ฐฝ ์ƒˆ์ฑ„ ์ƒˆ์ฒœ ์ƒˆ์ฒจ ์ƒˆ์ฒญ ์ƒˆ์ดˆ ์ƒˆ์ด ์ƒˆํ‘œ ์ƒˆํ•˜ ์ƒˆํ•œ ์ƒˆํ•ด ์ƒˆํ–ฅ ์ƒˆํ˜„ ์ƒˆํ˜ผ ์ƒˆํ™ ์ƒˆํ™” ์ƒˆํšจ ์ƒˆ๋‚จ ์ƒˆ๋ˆˆ ์ƒˆ๋‹ฌ ์ƒˆ๋‹น ์ƒˆ๋ด„ ์ƒˆ๋น„ ์ƒˆ์Šฌ ์ƒˆ์—ด ์ƒˆ์˜ ์ƒˆ์ž ์ƒˆํƒœ ์ƒˆํ˜œ ์ƒˆ๋‚  ์ƒˆ๋Š˜ ์ƒˆ๋ถ„ ์ƒˆ์ƒ˜ ์ƒˆ์ˆœ ์ƒˆ์ธ ์ƒˆ์žฅ ์ƒˆ์ „ ์ƒˆ์ข… ์ƒˆ์ฃผ ์ƒˆ์ง€ ์ƒˆ์ง„ ์ƒˆ์ฐฌ ์ƒˆ์ฒ˜ ์ƒ๋‚˜ ์ƒ๋‚œ ์ƒ๋‚ด ์ƒ๋‹ค ์ƒ๋‹จ ์ƒ๋‹ด ์ƒ๋„ ์ƒ๋ผ ์ƒ๋ž˜ ์ƒ๋ฅ˜ ์ƒ๋ฌด ์ƒ๋ฏธ ์ƒ๋ฏผ ์ƒ์ƒ ์ƒ์„œ ์ƒ์„ค ์ƒ์„ฌ ์ƒ์†” ์ƒ์†œ ์ƒ์†ก ์ƒ์‹œ ์ƒ์‹ค ์ƒ์‹ฌ ์ƒ์•„ ์ƒ์•ˆ ์ƒ์–‘ ์ƒ์—ฌ ์ƒ์—ฐ ์ƒ์˜ˆ ์ƒ์˜ค ์ƒ์˜จ ์ƒ์š” ์ƒ์šฐ ์ƒ์›” ์ƒ์œ  ์ƒ์œค ์ƒ์œจ ์ƒ์€ ์ƒ์ด ์ƒ์ž„ ์ƒ์ • ์ƒ์ฐจ ์ƒ์ฐฝ ์ƒ์ฑ„ ์ƒ์ฒœ ์ƒ์ฒจ ์ƒ์ฒญ ์ƒ์ดˆ ์ƒ์ด ์ƒํ‘œ ์ƒํ•˜ ์ƒํ•œ ์ƒํ•ด ์ƒํ–ฅ ์ƒํ˜„ ์ƒํ˜ผ ์ƒํ™ ์ƒํ™” ์ƒํšจ ์ƒ๋‚จ ์ƒ๋ˆˆ ์ƒ๋‹ฌ ์ƒ๋‹น ์ƒ๋ด„ ์ƒ๋น„ ์ƒ์Šฌ ์ƒ์—ด ์ƒ์˜ ์ƒ์ž ์ƒํƒœ ์ƒํ˜œ ์ƒ๋‚  ์ƒ๋Š˜ ์ƒ๋ถ„ ์ƒ์ƒ˜ ์ƒ์ˆœ ์ƒ์ธ ์ƒ์žฅ ์ƒ์ „ ์ƒ์ข… ์ƒ์ฃผ ์ƒ์ง€ ์ƒ์ง„ ์ƒ์ฐฌ ์ƒ์ฒ˜ ์„œ๋‚œ ์„œ๋‹จ ์„œ๋‹ด ์„œ๋ฅ˜ ์„œ๋ฆฌ ์„œ๋ชจ ์„œ๋ฌด ์„œ๋ฏธ ์„œ์‚ฌ ์„œ์‚ฐ ์„œ์ƒ ์„œ์ƒˆ ์„œ์ƒ ์„œ์„  ์„œ์„ค ์„œ์„ฌ ์„œ์„ฑ ์„œ์†Œ ์„œ์†” ์„œ์†œ ์„œ์†ก ์„œ์ˆ˜ ์„œ์‹œ ์„œ์‹  ์„œ์‹ค ์„œ์‹ฌ ์„œ์•„ ์„œ์•ˆ ์„œ์•  ์„œ์—ฌ ์„œ์—ฐ ์„œ์˜ค ์„œ์˜จ ์„œ์šฐ ์„œ์›” ์„œ์œค ์„œ์œจ ์„œ์€ ์„œ์ด ์„œ์ผ ์„œ์ž„ ์„œ์ • ์„œ์ฐจ ์„œ์ฐฝ ์„œ์ฑ„ ์„œ์ฒœ ์„œ์ฒจ ์„œ์ฒญ ์„œ์ดˆ ์„œ์ด ์„œํ‘œ ์„œํ•˜ ์„œํ•œ ์„œํ•ด ์„œํ–ฅ ์„œํ˜„ ์„œํ˜ผ ์„œํ™ ์„œํ™” ์„œํšจ ์„œ๋‚จ ์„œ๋ˆˆ ์„œ๋‹ฌ ์„œ๋‹น ์„œ๋ด„ ์„œ๋น„ ์„œ์Šฌ ์„œ์—ด ์„œ์˜ ์„œ์ž ์„œํƒœ ์„œํ˜œ ์„œ๋‚  ์„œ๋Š˜ ์„œ๋ถ„ ์„œ์ƒ˜ ์„œ์ˆœ ์„œ์ธ ์„œ์žฅ ์„œ์ „ ์„œ์ข… ์„œ์ฃผ ์„œ์ง€ ์„œ์ง„ ์„œ์ฐฌ ์„œ์ฒ˜ ์„ ๋‚œ ์„ ๋‹จ ์„ ๋‹ด ์„ ๋„ ์„ ๋ผ ์„ ๋ž˜ ์„ ๋ฅ˜ ์„ ๋ฆฌ ์„ ๋ชจ ์„ ๋ฌด ์„ ๋ฏธ ์„ ๋ฏผ ์„ ์‚ฌ ์„ ์‚ฐ ์„ ์ƒ ์„ ์ƒˆ ์„ ์„œ ์„ ์„ค ์„ ์„ฌ ์„ ์„ฑ ์„ ์†Œ ์„ ์†” ์„ ์†œ ์„ ์†ก ์„ ์ˆ˜ ์„ ์‹œ ์„ ์‹  ์„ ์‹ค ์„ ์‹ฌ ์„ ์•„ ์„ ์•ˆ ์„ ์•  ์„ ์–‘ ์„ ์—ฌ ์„ ์—ฐ ์„ ์˜ˆ ์„ ์˜ค ์„ ์˜จ ์„ ์š” ์„ ์šฐ ์„ ์›” ์„ ์œ  ์„ ์œค ์„ ์œจ ์„ ์€ ์„ ์ด ์„ ์ผ ์„ ์ž„ ์„ ์ฐจ ์„ ์ฐฝ ์„ ์ฑ„ ์„ ์ฒœ ์„ ์ฒจ ์„ ์ฒญ ์„ ์ดˆ ์„ ์ด ์„ ํ‘œ ์„ ํ•˜ ์„ ํ•œ ์„ ํ•ด ์„ ํ–ฅ ์„ ํ˜„ ์„ ํ˜ผ ์„ ํ™ ์„ ํ™” ์„ ํšจ ์„ ๋‚จ ์„ ๋ˆˆ ์„ ๋‹ฌ ์„ ๋ด„ ์„ ์Šฌ ์„ ์—ด ์„ ์˜ ์„ ์ž ์„ ํƒœ ์„ ํ˜œ ์„ ๋‚  ์„ ๋Š˜ ์„ ๋ถ„ ์„ ์ƒ˜ ์„ ์ˆœ ์„ ์ธ ์„ ์žฅ ์„ ์ „ ์„ ์ข… ์„ ์ฃผ ์„ ์ง€ ์„ ์ง„ ์„ ์ฐฌ ์„ ์ฒ˜ ์„ค๋‚˜ ์„ค๋‚œ ์„ค๋‚ด ์„ค๋‹ค ์„ค๋‹จ ์„ค๋‹ด ์„ค๋„ ์„ค๋ผ ์„ค๋ฅ˜ ์„ค๋ชจ ์„ค๋ฌด ์„ค๋ฏธ ์„ค๋ฏผ ์„ค์‚ฐ ์„ค์ƒˆ ์„ค์ƒ ์„ค์„œ ์„ค์„  ์„ค์„ฌ ์„ค์„ฑ ์„ค์†Œ ์„ค์†” ์„ค์†œ ์„ค์†ก ์„ค์ˆ˜ ์„ค์‹œ ์„ค์‹  ์„ค์‹ค ์„ค์‹ฌ ์„ค์•„ ์„ค์•ˆ ์„ค์•  ์„ค์–‘ ์„ค์—ฌ ์„ค์—ฐ ์„ค์˜ˆ ์„ค์˜ค ์„ค์˜จ ์„ค์š” ์„ค์šฐ ์„ค์›” ์„ค์œ  ์„ค์œค ์„ค์œจ ์„ค์€ ์„ค์ด ์„ค์ผ ์„ค์ž„ ์„ค์ฐจ ์„ค์ฐฝ ์„ค์ฑ„ ์„ค์ฒœ ์„ค์ฒจ ์„ค์ฒญ ์„ค์ดˆ ์„ค์ด ์„คํ‘œ ์„คํ•˜ ์„คํ•œ ์„คํ•ด ์„คํ–ฅ ์„คํ˜„ ์„คํ˜ผ ์„คํ™ ์„คํ™” ์„คํšจ ์„ค๋‚จ ์„ค๋ˆˆ ์„ค๋‹ฌ ์„ค๋‹น ์„ค๋ด„ ์„ค๋น„ ์„ค์Šฌ ์„ค์—ด ์„ค์˜ ์„ค์ž ์„คํƒœ ์„คํ˜œ ์„ค๋‚  ์„ค๋Š˜ ์„ค๋ถ„ ์„ค์ƒ˜ ์„ค์ˆœ ์„ค์ธ ์„ค์žฅ ์„ค์ „ ์„ค์ข… ์„ค์ฃผ ์„ค์ง€ ์„ค์ง„ ์„ค์ฐฌ ์„ค์ฒ˜ ์„ฌ๋‚˜ ์„ฌ๋‚œ ์„ฌ๋‚ด ์„ฌ๋‹ค ์„ฌ๋‹จ ์„ฌ๋‹ด ์„ฌ๋„ ์„ฌ๋ผ ์„ฌ๋ž˜ ์„ฌ๋ฅ˜ ์„ฌ๋ฆฌ ์„ฌ๋ชจ ์„ฌ๋ฌด ์„ฌ๋ฏธ ์„ฌ๋ฏผ ์„ฌ์‚ฌ ์„ฌ์‚ฐ ์„ฌ์ƒ ์„ฌ์ƒˆ ์„ฌ์ƒ ์„ฌ์„œ ์„ฌ์„  ์„ฌ์„ค ์„ฌ์„ฑ ์„ฌ์†Œ ์„ฌ์†” ์„ฌ์†œ ์„ฌ์†ก ์„ฌ์ˆ˜ ์„ฌ์‹œ ์„ฌ์‹  ์„ฌ์‹ค ์„ฌ์•„ ์„ฌ์•ˆ ์„ฌ์•  ์„ฌ์–‘ ์„ฌ์—ฌ ์„ฌ์—ฐ ์„ฌ์˜ˆ ์„ฌ์˜ค ์„ฌ์˜จ ์„ฌ์š” ์„ฌ์šฐ ์„ฌ์›” ์„ฌ์œ  ์„ฌ์œค ์„ฌ์œจ ์„ฌ์€ ์„ฌ์ผ ์„ฌ์ • ์„ฌ์ฐจ ์„ฌ์ฐฝ ์„ฌ์ฑ„ ์„ฌ์ฒœ ์„ฌ์ฒจ ์„ฌ์ฒญ ์„ฌ์ดˆ ์„ฌ์ด ์„ฌํ‘œ ์„ฌํ•˜ ์„ฌํ•œ ์„ฌํ•ด ์„ฌํ–ฅ ์„ฌํ˜„ ์„ฌํ˜ผ ์„ฌํ™ ์„ฌํ™” ์„ฌํšจ ์„ฌ๋ˆˆ ์„ฌ๋‹ฌ ์„ฌ๋‹น ์„ฌ๋ด„ ์„ฌ๋น„ ์„ฌ์Šฌ ์„ฌ์—ด ์„ฌ์˜ ์„ฌ์ž ์„ฌํƒœ ์„ฌํ˜œ ์„ฌ๋‚  ์„ฌ๋Š˜ ์„ฌ๋ถ„ ์„ฌ์ƒ˜ ์„ฌ์ˆœ ์„ฌ์ธ ์„ฌ์žฅ ์„ฌ์ „ ์„ฌ์ข… ์„ฌ์ฃผ ์„ฌ์ง€ ์„ฌ์ง„ ์„ฌ์ฐฌ ์„ฌ์ฒ˜ ์„ฑ๋‚˜ ์„ฑ๋‚ด ์„ฑ๋‹ค ์„ฑ๋‹จ ์„ฑ๋‹ด ์„ฑ๋„ ์„ฑ๋ผ ์„ฑ๋ž˜ ์„ฑ๋ฅ˜ ์„ฑ๋ฆฌ ์„ฑ๋ฌด ์„ฑ๋ฏธ ์„ฑ๋ฏผ ์„ฑ์‚ฌ ์„ฑ์‚ฐ ์„ฑ์ƒ ์„ฑ์ƒˆ ์„ฑ์„  ์„ฑ์„ค ์„ฑ์„ฌ ์„ฑ์†” ์„ฑ์†œ ์„ฑ์†ก ์„ฑ์ˆ˜ ์„ฑ์‹œ ์„ฑ์‹  ์„ฑ์‹ค ์„ฑ์‹ฌ ์„ฑ์•„ ์„ฑ์•ˆ ์„ฑ์–‘ ์„ฑ์—ฌ ์„ฑ์—ฐ ์„ฑ์˜ˆ ์„ฑ์˜ค ์„ฑ์˜จ ์„ฑ์š” ์„ฑ์›” ์„ฑ์œ  ์„ฑ์œค ์„ฑ์œจ ์„ฑ์€ ์„ฑ์ด ์„ฑ์ผ ์„ฑ์ž„ ์„ฑ์ • ์„ฑ์ฐจ ์„ฑ์ฐฝ ์„ฑ์ฑ„ ์„ฑ์ฒœ ์„ฑ์ฒจ ์„ฑ์ฒญ ์„ฑ์ดˆ ์„ฑ์ด ์„ฑํ‘œ ์„ฑํ•˜ ์„ฑํ•ด ์„ฑํ˜„ ์„ฑํ˜ผ ์„ฑํ™ ์„ฑํ™” ์„ฑํšจ ์„ฑ๋‚จ ์„ฑ๋ˆˆ ์„ฑ๋‹ฌ ์„ฑ๋‹น ์„ฑ๋ด„ ์„ฑ๋น„ ์„ฑ์Šฌ ์„ฑ์—ด ์„ฑ์˜ ์„ฑ์ž ์„ฑํƒœ ์„ฑํ˜œ ์„ฑ๋‚  ์„ฑ๋Š˜ ์„ฑ๋ถ„ ์„ฑ์ƒ˜ ์„ฑ์ˆœ ์„ฑ์ธ ์„ฑ์žฅ ์„ฑ์ „ ์„ฑ์ข… ์„ฑ์ฃผ ์„ฑ์ง€ ์„ฑ์ง„ ์„ฑ์ฐฌ ์„ฑ์ฒ˜ ์†Œ๋‚˜ ์†Œ๋‚œ ์†Œ๋‹ค ์†Œ๋‹จ ์†Œ๋‹ด ์†Œ๋„ ์†Œ๋ผ ์†Œ๋ž˜ ์†Œ๋ฅ˜ ์†Œ๋ฌด ์†Œ๋ฏธ ์†Œ๋ฏผ ์†Œ์‚ฌ ์†Œ์‚ฐ ์†Œ์ƒ ์†Œ์ƒˆ ์†Œ์ƒ ์†Œ์„œ ์†Œ์„  ์†Œ์„ฌ ์†Œ์„ฑ ์†Œ์†” ์†Œ์†œ ์†Œ์ˆ˜ ์†Œ์‹œ ์†Œ์‹  ์†Œ์•ˆ ์†Œ์–‘ ์†Œ์—ฌ ์†Œ์—ฐ ์†Œ์˜ˆ ์†Œ์šฐ ์†Œ์›” ์†Œ์œค ์†Œ์œจ ์†Œ์€ ์†Œ์ด ์†Œ์ผ ์†Œ์ž„ ์†Œ์ • ์†Œ์ฐจ ์†Œ์ฐฝ ์†Œ์ฑ„ ์†Œ์ฒœ ์†Œ์ฒจ ์†Œ์ฒญ ์†Œ์ดˆ ์†Œํ‘œ ์†Œํ•˜ ์†Œํ•œ ์†Œํ•ด ์†Œํ–ฅ ์†Œํ˜„ ์†Œํ˜ผ ์†Œํ™ ์†Œํ™” ์†Œํšจ ์†Œ๋‚จ ์†Œ๋‹ฌ ์†Œ๋‹น ์†Œ๋ด„ ์†Œ์Šฌ ์†Œ์—ด ์†Œ์˜ ์†Œ์ž ์†Œํƒœ ์†Œํ˜œ ์†Œ๋‚  ์†Œ๋Š˜ ์†Œ๋ถ„ ์†Œ์ƒ˜ ์†Œ์ˆœ ์†Œ์ธ ์†Œ์žฅ ์†Œ์ „ ์†Œ์ข… ์†Œ์ฃผ ์†Œ์ง€ ์†Œ์ง„ ์†Œ์ฐฌ ์†Œ์ฒ˜ ์†”๋‚˜ ์†”๋‚œ ์†”๋‚ด ์†”๋‹ค ์†”๋‹จ ์†”๋‹ด ์†”๋„ ์†”๋ž˜ ์†”๋ฅ˜ ์†”๋ชจ ์†”๋ฌด ์†”๋ฏธ ์†”๋ฏผ ์†”์‚ฌ ์†”์‚ฐ ์†”์ƒ ์†”์ƒˆ ์†”์ƒ ์†”์„œ ์†”์„  ์†”์„ค ์†”์„ฌ ์†”์„ฑ ์†”์†Œ ์†”์†œ ์†”์†ก ์†”์ˆ˜ ์†”์‹œ ์†”์‹  ์†”์‹ค ์†”์‹ฌ ์†”์•„ ์†”์•ˆ ์†”์•  ์†”์–‘ ์†”์—ฌ ์†”์—ฐ ์†”์˜ˆ ์†”์˜ค ์†”์˜จ ์†”์š” ์†”์šฐ ์†”์›” ์†”์œ  ์†”์œค ์†”์œจ ์†”์€ ์†”์ด ์†”์ผ ์†”์ž„ ์†”์ • ์†”์ฐจ ์†”์ฐฝ ์†”์ฑ„ ์†”์ฒœ ์†”์ฒจ ์†”์ฒญ ์†”์ดˆ ์†”์ด ์†”ํ‘œ ์†”ํ•˜ ์†”ํ•œ ์†”ํ•ด ์†”ํ–ฅ ์†”ํ˜„ ์†”ํ˜ผ ์†”ํ™ ์†”ํ™” ์†”ํšจ ์†”๋‚จ ์†”๋ˆˆ ์†”๋‹ฌ ์†”๋‹น ์†”๋ด„ ์†”๋น„ ์†”์Šฌ ์†”์—ด ์†”์˜ ์†”์ž ์†”ํƒœ ์†”ํ˜œ ์†”๋‚  ์†”๋Š˜ ์†”๋ถ„ ์†”์ƒ˜ ์†”์ˆœ ์†”์ธ ์†”์žฅ ์†”์ „ ์†”์ข… ์†”์ฃผ ์†”์ง€ ์†”์ง„ ์†”์ฐฌ ์†”์ฒ˜ ์†œ๋‚˜ ์†œ๋‚œ ์†œ๋‚ด ์†œ๋‹ค ์†œ๋‹จ ์†œ๋‹ด ์†œ๋„ ์†œ๋ผ ์†œ๋ž˜ ์†œ๋ฅ˜ ์†œ๋ฆฌ ์†œ๋ชจ ์†œ๋ฌด ์†œ๋ฏธ ์†œ๋ฏผ ์†œ์‚ฌ ์†œ์‚ฐ ์†œ์ƒ ์†œ์ƒˆ ์†œ์ƒ ์†œ์„œ ์†œ์„  ์†œ์„ค ์†œ์„ฌ ์†œ์„ฑ ์†œ์†Œ ์†œ์†” ์†œ์†ก ์†œ์ˆ˜ ์†œ์‹œ ์†œ์‹  ์†œ์‹ค ์†œ์‹ฌ ์†œ์•„ ์†œ์•ˆ ์†œ์•  ์†œ์–‘ ์†œ์—ฌ ์†œ์—ฐ ์†œ์˜ˆ ์†œ์˜ค ์†œ์˜จ ์†œ์š” ์†œ์šฐ ์†œ์›” ์†œ์œ  ์†œ์œค ์†œ์œจ ์†œ์€ ์†œ์ด ์†œ์ผ ์†œ์ • ์†œ์ฐจ ์†œ์ฐฝ ์†œ์ฑ„ ์†œ์ฒœ ์†œ์ฒจ ์†œ์ฒญ ์†œ์ดˆ ์†œ์ด ์†œํ‘œ ์†œํ•˜ ์†œํ•œ ์†œํ•ด ์†œํ–ฅ ์†œํ˜„ ์†œํ˜ผ ์†œํ™ ์†œํ™” ์†œํšจ ์†œ๋‚จ ์†œ๋ˆˆ ์†œ๋‹ฌ ์†œ๋‹น ์†œ๋ด„ ์†œ๋น„ ์†œ์Šฌ ์†œ์—ด ์†œ์˜ ์†œ์ž ์†œํƒœ ์†œํ˜œ ์†œ๋‚  ์†œ๋Š˜ ์†œ๋ถ„ ์†œ์ƒ˜ ์†œ์ˆœ ์†œ์ธ ์†œ์žฅ ์†œ์ „ ์†œ์ข… ์†œ์ฃผ ์†œ์ง€ ์†œ์ง„ ์†œ์ฐฌ ์†œ์ฒ˜ ์†ก๋‚˜ ์†ก๋‚œ ์†ก๋‚ด ์†ก๋‹ค ์†ก๋‹จ ์†ก๋‹ด ์†ก๋„ ์†ก๋ผ ์†ก๋ž˜ ์†ก๋ฅ˜ ์†ก๋ฆฌ ์†ก๋ชจ ์†ก๋ฌด ์†ก๋ฏธ ์†ก๋ฏผ ์†ก์‚ฌ ์†ก์‚ฐ ์†ก์ƒ ์†ก์ƒˆ ์†ก์ƒ ์†ก์„œ ์†ก์„  ์†ก์„ค ์†ก์„ฌ ์†ก์„ฑ ์†ก์†Œ ์†ก์†” ์†ก์†œ ์†ก์ˆ˜ ์†ก์‹œ ์†ก์‹  ์†ก์‹ค ์†ก์‹ฌ ์†ก์•„ ์†ก์•ˆ ์†ก์•  ์†ก์–‘ ์†ก์—ฌ ์†ก์—ฐ ์†ก์˜ˆ ์†ก์˜ค ์†ก์˜จ ์†ก์š” ์†ก์šฐ ์†ก์›” ์†ก์œ  ์†ก์œค ์†ก์œจ ์†ก์€ ์†ก์ด ์†ก์ผ ์†ก์ž„ ์†ก์ • ์†ก์ฐจ ์†ก์ฐฝ ์†ก์ฑ„ ์†ก์ฒœ ์†ก์ฒจ ์†ก์ฒญ ์†ก์ดˆ ์†ก์ด ์†กํ‘œ ์†กํ•˜ ์†กํ•œ ์†กํ•ด ์†กํ–ฅ ์†กํ˜„ ์†กํ˜ผ ์†กํ™ ์†กํ™” ์†กํšจ ์†ก๋‚จ ์†ก๋ˆˆ ์†ก๋‹ฌ ์†ก๋‹น ์†ก๋ด„ ์†ก๋น„ ์†ก์Šฌ ์†ก์—ด ์†ก์˜ ์†ก์ž ์†กํƒœ ์†กํ˜œ ์†ก๋‚  ์†ก๋Š˜ ์†ก๋ถ„ ์†ก์ƒ˜ ์†ก์ˆœ ์†ก์ธ ์†ก์žฅ ์†ก์ „ ์†ก์ข… ์†ก์ฃผ ์†ก์ง€ ์†ก์ง„ ์†ก์ฐฌ ์†ก์ฒ˜ ์ˆ˜๋‚˜ ์ˆ˜๋‚ด ์ˆ˜๋‹ด ์ˆ˜๋„ ์ˆ˜๋ฅ˜ ์ˆ˜๋ฌด ์ˆ˜๋ฏธ ์ˆ˜๋ฏผ ์ˆ˜์ƒˆ ์ˆ˜์„œ ์ˆ˜์„  ์ˆ˜์„ค ์ˆ˜์„ฌ ์ˆ˜์„ฑ ์ˆ˜์†” ์ˆ˜์†œ ์ˆ˜์‹  ์ˆ˜์‹ค ์ˆ˜์‹ฌ ์ˆ˜์•„ ์ˆ˜์•ˆ ์ˆ˜์•  ์ˆ˜์—ฌ ์ˆ˜์—ฐ ์ˆ˜์˜ˆ ์ˆ˜์˜ค ์ˆ˜์š” ์ˆ˜์œค ์ˆ˜์œจ ์ˆ˜์ด ์ˆ˜์ผ ์ˆ˜์ž„ ์ˆ˜์ • ์ˆ˜์ฐจ ์ˆ˜์ฐฝ ์ˆ˜์ฑ„ ์ˆ˜์ฒœ ์ˆ˜์ฒจ ์ˆ˜์ดˆ ์ˆ˜์ด ์ˆ˜ํ•œ ์ˆ˜ํ–ฅ ์ˆ˜ํ˜„ ์ˆ˜ํ˜ผ ์ˆ˜ํ™ ์ˆ˜ํ™” ์ˆ˜ํšจ ์ˆ˜๋‚จ ์ˆ˜๋ˆˆ ์ˆ˜๋‹ฌ ์ˆ˜๋‹น ์ˆ˜๋ด„ ์ˆ˜์—ด ์ˆ˜์˜ ์ˆ˜์ž ์ˆ˜ํƒœ ์ˆ˜ํ˜œ ์ˆ˜๋‚  ์ˆ˜๋Š˜ ์ˆ˜๋ถ„ ์ˆ˜์ƒ˜ ์ˆ˜์ˆœ ์ˆ˜์ธ ์ˆ˜์žฅ ์ˆ˜์ „ ์ˆ˜์ข… ์ˆ˜์ฃผ ์ˆ˜์ง€ ์ˆ˜์ง„ ์ˆ˜์ฐฌ ์ˆ˜์ฒ˜ ์‹œ๋‚˜ ์‹œ๋‚œ ์‹œ๋‚ด ์‹œ๋‹จ ์‹œ๋‹ด ์‹œ๋„ ์‹œ๋ผ ์‹œ๋ž˜ ์‹œ๋ฅ˜ ์‹œ๋ฆฌ ์‹œ๋ชจ ์‹œ๋ฌด ์‹œ์‚ฌ ์‹œ์‚ฐ ์‹œ์ƒ ์‹œ์ƒˆ ์‹œ์ƒ ์‹œ์„œ ์‹œ์„ฌ ์‹œ์„ฑ ์‹œ์†Œ ์‹œ์†” ์‹œ์†œ ์‹œ์†ก ์‹œ์ˆ˜ ์‹œ์‹ค ์‹œ์•„ ์‹œ์•ˆ ์‹œ์•  ์‹œ์–‘ ์‹œ์—ฌ ์‹œ์—ฐ ์‹œ์˜ˆ ์‹œ์˜ค ์‹œ์˜จ ์‹œ์š” ์‹œ์šฐ ์‹œ์›” ์‹œ์œ  ์‹œ์œค ์‹œ์œจ ์‹œ์€ ์‹œ์ • ์‹œ์ฐจ ์‹œ์ฒœ ์‹œ์ฒจ ์‹œ์ฒญ ์‹œ์ดˆ ์‹œ์ด ์‹œํ‘œ ์‹œํ•˜ ์‹œํ•œ ์‹œํ–ฅ ์‹œํ˜„ ์‹œํ˜ผ ์‹œํ™ ์‹œํ™” ์‹œํšจ ์‹œ๋‚จ ์‹œ๋ˆˆ ์‹œ๋‹ฌ ์‹œ์Šฌ ์‹œ์—ด ์‹œ์˜ ์‹œ์ž ์‹œํƒœ ์‹œํ˜œ ์‹œ๋‚  ์‹œ๋Š˜ ์‹œ๋ถ„ ์‹œ์ƒ˜ ์‹œ์ˆœ ์‹œ์ธ ์‹œ์žฅ ์‹œ์ „ ์‹œ์ข… ์‹œ์ฃผ ์‹œ์ง€ ์‹œ์ง„ ์‹œ์ฐฌ ์‹œ์ฒ˜ ์‹ ๋‹ค ์‹ ๋‹จ ์‹ ๋‹ด ์‹ ๋„ ์‹ ๋ผ ์‹ ๋ž˜ ์‹ ๋ฅ˜ ์‹ ๋ฆฌ ์‹ ๋ชจ ์‹ ๋ฌด ์‹ ๋ฏธ ์‹ ์‚ฌ ์‹ ์‚ฐ ์‹ ์ƒˆ ์‹ ์„œ ์‹ ์„ค ์‹ ์„ฌ ์‹ ์†Œ ์‹ ์†” ์‹ ์†œ ์‹ ์†ก ์‹ ์ˆ˜ ์‹ ์‹œ ์‹ ์‹ค ์‹ ์‹ฌ ์‹ ์•„ ์‹ ์•ˆ ์‹ ์•  ์‹ ์–‘ ์‹ ์—ฌ ์‹ ์—ฐ ์‹ ์˜ˆ ์‹ ์˜ค ์‹ ์˜จ ์‹ ์š” ์‹ ์šฐ ์‹ ์›” ์‹ ์œ  ์‹ ์œค ์‹ ์œจ ์‹ ์€ ์‹ ์ด ์‹ ์ผ ์‹ ์ž„ ์‹ ์ • ์‹ ์ฐจ ์‹ ์ฐฝ ์‹ ์ฑ„ ์‹ ์ฒœ ์‹ ์ฒจ ์‹ ์ฒญ ์‹ ์ดˆ ์‹ ์ด ์‹ ํ‘œ ์‹ ํ•œ ์‹ ํ•ด ์‹ ํ–ฅ ์‹ ํ˜„ ์‹ ํ˜ผ ์‹ ํ™ ์‹ ํšจ ์‹ ๋‚จ ์‹ ๋ˆˆ ์‹ ๋‹ฌ ์‹ ๋‹น ์‹ ๋ด„ ์‹ ๋น„ ์‹ ์Šฌ ์‹ ์—ด ์‹ ์˜ ์‹ ์ž ์‹ ํƒœ ์‹ ํ˜œ ์‹ ๋‚  ์‹ ๋Š˜ ์‹ ๋ถ„ ์‹ ์ƒ˜ ์‹ ์ˆœ ์‹ ์ธ ์‹ ์žฅ ์‹ ์ „ ์‹ ์ข… ์‹ ์ฃผ ์‹ ์ง€ ์‹ ์ง„ ์‹ ์ฐฌ ์‹ ์ฒ˜ ์‹ค๋‚˜ ์‹ค๋‚œ ์‹ค๋‹ค ์‹ค๋‹จ ์‹ค๋‹ด ์‹ค๋„ ์‹ค๋ฅ˜ ์‹ค๋ฆฌ ์‹ค๋ชจ ์‹ค๋ฌด ์‹ค๋ฏธ ์‹ค๋ฏผ ์‹ค์‚ฐ ์‹ค์ƒˆ ์‹ค์ƒ ์‹ค์„œ ์‹ค์„  ์‹ค์„ค ์‹ค์„ฌ ์‹ค์†” ์‹ค์†œ ์‹ค์†ก ์‹ค์‹œ ์‹ค์‹ฌ ์‹ค์•ˆ ์‹ค์•  ์‹ค์–‘ ์‹ค์—ฌ ์‹ค์˜ˆ ์‹ค์˜ค ์‹ค์˜จ ์‹ค์š” ์‹ค์šฐ ์‹ค์›” ์‹ค์œ  ์‹ค์œค ์‹ค์œจ ์‹ค์ผ ์‹ค์ž„ ์‹ค์ • ์‹ค์ฐจ ์‹ค์ฐฝ ์‹ค์ฑ„ ์‹ค์ฒœ ์‹ค์ฒจ ์‹ค์ฒญ ์‹ค์ดˆ ์‹ค์ด ์‹คํ‘œ ์‹คํ•˜ ์‹คํ•œ ์‹คํ•ด ์‹คํ–ฅ ์‹คํ˜„ ์‹คํ˜ผ ์‹คํ™ ์‹คํ™” ์‹คํšจ ์‹ค๋‚จ ์‹ค๋ˆˆ ์‹ค๋‹ฌ ์‹ค๋‹น ์‹ค๋ด„ ์‹ค๋น„ ์‹ค์Šฌ ์‹ค์—ด ์‹ค์˜ ์‹ค์ž ์‹คํƒœ ์‹คํ˜œ ์‹ค๋‚  ์‹ค๋Š˜ ์‹ค๋ถ„ ์‹ค์ƒ˜ ์‹ค์ˆœ ์‹ค์ธ ์‹ค์žฅ ์‹ค์ „ ์‹ค์ข… ์‹ค์ฃผ ์‹ค์ง€ ์‹ค์ง„ ์‹ค์ฐฌ ์‹ค์ฒ˜ ์‹ฌ๋‚˜ ์‹ฌ๋‚ด ์‹ฌ๋‹จ ์‹ฌ๋‹ด ์‹ฌ๋„ ์‹ฌ๋ผ ์‹ฌ๋ž˜ ์‹ฌ๋ฅ˜ ์‹ฌ๋ชจ ์‹ฌ๋ฌด ์‹ฌ๋ฏธ ์‹ฌ๋ฏผ ์‹ฌ์‚ฌ ์‹ฌ์ƒ ์‹ฌ์„œ ์‹ฌ์„  ์‹ฌ์„ค ์‹ฌ์„ฌ ์‹ฌ์„ฑ ์‹ฌ์†Œ ์‹ฌ์†” ์‹ฌ์†œ ์‹ฌ์†ก ์‹ฌ์ˆ˜ ์‹ฌ์‹œ ์‹ฌ์‹ค ์‹ฌ์•  ์‹ฌ์–‘ ์‹ฌ์—ฌ ์‹ฌ์˜ˆ ์‹ฌ์˜ค ์‹ฌ์š” ์‹ฌ์šฐ ์‹ฌ์›” ์‹ฌ์œ  ์‹ฌ์œค ์‹ฌ์œจ ์‹ฌ์€ ์‹ฌ์ด ์‹ฌ์ผ ์‹ฌ์ • ์‹ฌ์ฐจ ์‹ฌ์ฐฝ ์‹ฌ์ฑ„ ์‹ฌ์ฒœ ์‹ฌ์ฒจ ์‹ฌ์ฒญ ์‹ฌ์ดˆ ์‹ฌ์ด ์‹ฌํ‘œ ์‹ฌํ•˜ ์‹ฌํ–ฅ ์‹ฌํ˜„ ์‹ฌํ˜ผ ์‹ฌํ™ ์‹ฌํšจ ์‹ฌ๋ˆˆ ์‹ฌ๋‹ฌ ์‹ฌ๋‹น ์‹ฌ๋ด„ ์‹ฌ์—ด ์‹ฌ์˜ ์‹ฌํƒœ ์‹ฌํ˜œ ์‹ฌ๋‚  ์‹ฌ๋Š˜ ์‹ฌ๋ถ„ ์‹ฌ์ƒ˜ ์‹ฌ์ˆœ ์‹ฌ์ธ ์‹ฌ์žฅ ์‹ฌ์ „ ์‹ฌ์ข… ์‹ฌ์ฃผ ์‹ฌ์ง€ ์‹ฌ์ง„ ์‹ฌ์ฐฌ ์‹ฌ์ฒ˜ ์•„๋‚œ ์•„๋‹จ ์•„๋„ ์•„๋ผ ์•„๋ž˜ ์•„๋ฅ˜ ์•„๋ฆฌ ์•„๋ชจ ์•„๋ฌด ์•„๋ฏธ ์•„๋ฏผ ์•„์‚ฐ ์•„์ƒ ์•„์ƒˆ ์•„์ƒ ์•„์„œ ์•„์„  ์•„์„ค ์•„์„ฌ ์•„์„ฑ ์•„์†Œ ์•„์†” ์•„์†œ ์•„์†ก ์•„์ˆ˜ ์•„์‹œ ์•„์‹  ์•„์‹ค ์•„์‹ฌ ์•„์•ˆ ์•„์—ฌ ์•„์˜จ ์•„์š” ์•„์›” ์•„์œค ์•„์œจ ์•„์€ ์•„์ผ ์•„์ž„ ์•„์ • ์•„์ฐฝ ์•„์ฑ„ ์•„์ฒœ ์•„์ฒจ ์•„์ดˆ ์•„์ด ์•„ํ‘œ ์•„ํ•œ ์•„ํ–ฅ ์•„ํ˜„ ์•„ํ˜ผ ์•„ํ™” ์•„๋‚จ ์•„๋ˆˆ ์•„๋‹ฌ ์•„๋ด„ ์•„์Šฌ ์•„์—ด ์•„์˜ ์•„์ž ์•„ํƒœ ์•„ํ˜œ ์•„๋‚  ์•„๋Š˜ ์•„๋ถ„ ์•„์ƒ˜ ์•„์ˆœ ์•„์ธ ์•„์žฅ ์•„์ „ ์•„์ข… ์•„์ฃผ ์•„์ง€ ์•„์ง„ ์•„์ฐฌ ์•„์ฒ˜ ์•ˆ๋‚˜ ์•ˆ๋‚œ ์•ˆ๋‚ด ์•ˆ๋‹จ ์•ˆ๋‹ด ์•ˆ๋„ ์•ˆ๋ผ ์•ˆ๋ž˜ ์•ˆ๋ฅ˜ ์•ˆ๋ฆฌ ์•ˆ๋ชจ ์•ˆ๋ฏผ ์•ˆ์ƒˆ ์•ˆ์ƒ ์•ˆ์„  ์•ˆ์†Œ ์•ˆ์†” ์•ˆ์†œ ์•ˆ์†ก ์•ˆ์ˆ˜ ์•ˆ์‹œ ์•ˆ์‹  ์•ˆ์‹ค ์•ˆ์–‘ ์•ˆ์—ฌ ์•ˆ์—ฐ ์•ˆ์˜ˆ ์•ˆ์˜ค ์•ˆ์˜จ ์•ˆ์š” ์•ˆ์šฐ ์•ˆ์›” ์•ˆ์œค ์•ˆ์œจ ์•ˆ์ผ ์•ˆ์ž„ ์•ˆ์ • ์•ˆ์ฐจ ์•ˆ์ฐฝ ์•ˆ์ฑ„ ์•ˆ์ฒœ ์•ˆ์ฒจ ์•ˆ์ฒญ ์•ˆ์ดˆ ์•ˆ์ด ์•ˆํ‘œ ์•ˆํ•˜ ์•ˆํ•œ ์•ˆํ–ฅ ์•ˆํ˜„ ์•ˆํ˜ผ ์•ˆํ™ ์•ˆํ™” ์•ˆํšจ ์•ˆ๋ˆˆ ์•ˆ๋ด„ ์•ˆ๋น„ ์•ˆ์Šฌ ์•ˆ์—ด ์•ˆ์˜ ์•ˆํƒœ ์•ˆ๋‚  ์•ˆ๋Š˜ ์•ˆ๋ถ„ ์•ˆ์ƒ˜ ์•ˆ์ˆœ ์•ˆ์ธ ์•ˆ์žฅ ์•ˆ์ „ ์•ˆ์ข… ์•ˆ์ฃผ ์•ˆ์ง€ ์•ˆ์ง„ ์•ˆ์ฐฌ ์•ˆ์ฒ˜ ์• ๋‚œ ์• ๋‚ด ์• ๋‹จ ์• ๋‹ด ์• ๋ฅ˜ ์• ๋ฆฌ ์• ๋ฏผ ์• ์‚ฌ ์• ์‚ฐ ์• ์ƒ ์• ์ƒ ์• ์„œ ์• ์„  ์• ์„ค ์• ์„ฌ ์• ์„ฑ ์• ์†” ์• ์†œ ์• ์ˆ˜ ์• ์‹  ์• ์‹ค ์• ์‹ฌ ์• ์•ˆ ์• ์–‘ ์• ์—ฐ ์• ์šฐ ์• ์›” ์• ์œ  ์• ์œค ์• ์œจ ์• ์€ ์• ์ผ ์• ์ฐจ ์• ์ฒœ ์• ์ฒจ ์• ์ฒญ ์• ์ด ์• ํ‘œ ์• ํ•˜ ์• ํ•œ ์• ํ–ฅ ์• ํ˜„ ์• ํ˜ผ ์• ํ™” ์• ํšจ ์• ๋‚จ ์• ๋ˆˆ ์• ๋‹ฌ ์• ์—ด ์• ๋‚  ์• ๋Š˜ ์• ๋ถ„ ์• ์ƒ˜ ์• ์ˆœ ์• ์ธ ์• ์žฅ ์• ์ „ ์• ์ข… ์• ์ฃผ ์• ์ง€ ์• ์ง„ ์• ์ฐฌ ์• ์ฒ˜ ์–‘๋‚˜ ์–‘๋‚œ ์–‘๋‚ด ์–‘๋‹ค ์–‘๋‹จ ์–‘๋‹ด ์–‘๋„ ์–‘๋ผ ์–‘๋ž˜ ์–‘๋ฅ˜ ์–‘๋ฆฌ ์–‘๋ชจ ์–‘๋ฌด ์–‘๋ฏธ ์–‘์‚ฌ ์–‘์‚ฐ ์–‘์ƒ ์–‘์ƒˆ ์–‘์ƒ ์–‘์„œ ์–‘์„  ์–‘์„ค ์–‘์„ฌ ์–‘์„ฑ ์–‘์†Œ ์–‘์†” ์–‘์†œ ์–‘์†ก ์–‘์ˆ˜ ์–‘์‹œ ์–‘์‹  ์–‘์‹ค ์–‘์•„ ์–‘์•ˆ ์–‘์•  ์–‘์—ฌ ์–‘์—ฐ ์–‘์˜ˆ ์–‘์˜ค ์–‘์˜จ ์–‘์š” ์–‘์šฐ ์–‘์›” ์–‘์œ  ์–‘์œค ์–‘์œจ ์–‘์€ ์–‘์ด ์–‘์ผ ์–‘์ž„ ์–‘์ • ์–‘์ฐจ ์–‘์ฐฝ ์–‘์ฑ„ ์–‘์ฒœ ์–‘์ฒจ ์–‘์ฒญ ์–‘์ดˆ ์–‘์ด ์–‘ํ‘œ ์–‘ํ•˜ ์–‘ํ•œ ์–‘ํ•ด ์–‘ํ–ฅ ์–‘ํ˜„ ์–‘ํ˜ผ ์–‘ํ™ ์–‘ํ™” ์–‘ํšจ ์–‘๋‚จ ์–‘๋ˆˆ ์–‘๋‹ฌ ์–‘๋‹น ์–‘๋ด„ ์–‘๋น„ ์–‘์Šฌ ์–‘์—ด ์–‘์˜ ์–‘์ž ์–‘ํƒœ ์–‘ํ˜œ ์–‘๋‚  ์–‘๋Š˜ ์–‘๋ถ„ ์–‘์ƒ˜ ์–‘์ˆœ ์–‘์ธ ์–‘์žฅ ์–‘์ „ ์–‘์ข… ์–‘์ฃผ ์–‘์ง€ ์–‘์ง„ ์–‘์ฐฌ ์–‘์ฒ˜ ์—ฌ๋‚˜ ์—ฌ๋‹ค ์—ฌ๋„ ์—ฌ๋ผ ์—ฌ๋ž˜ ์—ฌ๋ฅ˜ ์—ฌ๋ฆฌ ์—ฌ๋ชจ ์—ฌ๋ฌด ์—ฌ๋ฏผ ์—ฌ์‚ฐ ์—ฌ์ƒ ์—ฌ์ƒˆ ์—ฌ์ƒ ์—ฌ์„œ ์—ฌ์„  ์—ฌ์„ค ์—ฌ์„ฌ ์—ฌ์†Œ ์—ฌ์†” ์—ฌ์†œ ์—ฌ์†ก ์—ฌ์ˆ˜ ์—ฌ์‹ค ์—ฌ์•ˆ ์—ฌ์–‘ ์—ฌ์—ฐ ์—ฌ์˜ค ์—ฌ์˜จ ์—ฌ์š” ์—ฌ์›” ์—ฌ์œค ์—ฌ์œจ ์—ฌ์€ ์—ฌ์ด ์—ฌ์ผ ์—ฌ์ž„ ์—ฌ์ • ์—ฌ์ฐจ ์—ฌ์ฑ„ ์—ฌ์ฒœ ์—ฌ์ฒจ ์—ฌ์ฒญ ์—ฌ์ดˆ ์—ฌ์ด ์—ฌํ•˜ ์—ฌํ•ด ์—ฌํ–ฅ ์—ฌํ˜„ ์—ฌํ˜ผ ์—ฌํ™ ์—ฌํ™” ์—ฌํšจ ์—ฌ๋‚จ ์—ฌ๋ˆˆ ์—ฌ๋‹ฌ ์—ฌ๋‹น ์—ฌ๋ด„ ์—ฌ๋น„ ์—ฌ์Šฌ ์—ฌ์—ด ์—ฌ์˜ ์—ฌ์ž ์—ฌํƒœ ์—ฌํ˜œ ์—ฌ๋‚  ์—ฌ๋Š˜ ์—ฌ๋ถ„ ์—ฌ์ƒ˜ ์—ฌ์ˆœ ์—ฌ์ธ ์—ฌ์žฅ ์—ฌ์ „ ์—ฌ์ข… ์—ฌ์ฃผ ์—ฌ์ง€ ์—ฌ์ง„ ์—ฌ์ฐฌ ์—ฌ์ฒ˜ ์—ฐ๋‚˜ ์—ฐ๋‚œ ์—ฐ๋‚ด ์—ฐ๋‹จ ์—ฐ๋‹ด ์—ฐ๋„ ์—ฐ๋ผ ์—ฐ๋ž˜ ์—ฐ๋ฅ˜ ์—ฐ๋ฆฌ ์—ฐ๋ชจ ์—ฐ๋ฌด ์—ฐ๋ฏธ ์—ฐ์‚ฐ ์—ฐ์ƒˆ ์—ฐ์ƒ ์—ฐ์„œ ์—ฐ์„  ์—ฐ์„ค ์—ฐ์„ฌ ์—ฐ์„ฑ ์—ฐ์†Œ ์—ฐ์†” ์—ฐ์†œ ์—ฐ์†ก ์—ฐ์ˆ˜ ์—ฐ์‹œ ์—ฐ์‹  ์—ฐ์‹ค ์—ฐ์‹ฌ ์—ฐ์•„ ์—ฐ์•ˆ ์—ฐ์–‘ ์—ฐ์—ฌ ์—ฐ์˜ค ์—ฐ์˜จ ์—ฐ์š” ์—ฐ์šฐ ์—ฐ์›” ์—ฐ์œ  ์—ฐ์œค ์—ฐ์œจ ์—ฐ์€ ์—ฐ์ด ์—ฐ์ผ ์—ฐ์ • ์—ฐ์ฐจ ์—ฐ์ฐฝ ์—ฐ์ฑ„ ์—ฐ์ฒœ ์—ฐ์ฒจ ์—ฐ์ฒญ ์—ฐ์ดˆ ์—ฐ์ด ์—ฐํ‘œ ์—ฐํ•ด ์—ฐํ–ฅ ์—ฐํ˜„ ์—ฐํ˜ผ ์—ฐํ™ ์—ฐํ™” ์—ฐํšจ ์—ฐ๋‚จ ์—ฐ๋ˆˆ ์—ฐ๋‹ฌ ์—ฐ๋ด„ ์—ฐ์Šฌ ์—ฐ์—ด ์—ฐ์˜ ์—ฐ์ž ์—ฐํƒœ ์—ฐํ˜œ ์—ฐ๋‚  ์—ฐ๋Š˜ ์—ฐ๋ถ„ ์—ฐ์ƒ˜ ์—ฐ์ˆœ ์—ฐ์ธ ์—ฐ์žฅ ์—ฐ์ „ ์—ฐ์ข… ์—ฐ์ฃผ ์—ฐ์ง€ ์—ฐ์ง„ ์—ฐ์ฐฌ ์—ฐ์ฒ˜ ์˜ˆ๋‚˜ ์˜ˆ๋‚œ ์˜ˆ๋‚ด ์˜ˆ๋‹จ ์˜ˆ๋‹ด ์˜ˆ๋„ ์˜ˆ๋ฅ˜ ์˜ˆ๋ฆฌ ์˜ˆ๋ชจ ์˜ˆ๋ฏธ ์˜ˆ๋ฏผ ์˜ˆ์‚ฌ ์˜ˆ์‚ฐ ์˜ˆ์ƒ ์˜ˆ์ƒˆ ์˜ˆ์ƒ ์˜ˆ์„œ ์˜ˆ์„  ์˜ˆ์„ค ์˜ˆ์„ฌ ์˜ˆ์„ฑ ์˜ˆ์†Œ ์˜ˆ์†” ์˜ˆ์†œ ์˜ˆ์†ก ์˜ˆ์‹œ ์˜ˆ์‹  ์˜ˆ์‹ค ์˜ˆ์‹ฌ ์˜ˆ์•ˆ ์˜ˆ์–‘ ์˜ˆ์—ฐ ์˜ˆ์˜ค ์˜ˆ์˜จ ์˜ˆ์š” ์˜ˆ์šฐ ์˜ˆ์›” ์˜ˆ์œ  ์˜ˆ์œค ์˜ˆ์œจ ์˜ˆ์€ ์˜ˆ์ผ ์˜ˆ์ž„ ์˜ˆ์ • ์˜ˆ์ฐจ ์˜ˆ์ฐฝ ์˜ˆ์ฑ„ ์˜ˆ์ฒœ ์˜ˆ์ฒจ ์˜ˆ์ฒญ ์˜ˆ์ดˆ ์˜ˆ์ด ์˜ˆํ‘œ ์˜ˆํ•˜ ์˜ˆํ•œ ์˜ˆํ–ฅ ์˜ˆํ˜„ ์˜ˆํ˜ผ ์˜ˆํ™” ์˜ˆํšจ ์˜ˆ๋‚จ ์˜ˆ๋ˆˆ ์˜ˆ๋‹ฌ ์˜ˆ๋‹น ์˜ˆ๋ด„ ์˜ˆ๋น„ ์˜ˆ์Šฌ ์˜ˆ์—ด ์˜ˆ์˜ ์˜ˆํƒœ ์˜ˆํ˜œ ์˜ˆ๋‚  ์˜ˆ๋Š˜ ์˜ˆ๋ถ„ ์˜ˆ์ƒ˜ ์˜ˆ์ˆœ ์˜ˆ์ธ ์˜ˆ์žฅ ์˜ˆ์ „ ์˜ˆ์ข… ์˜ˆ์ฃผ ์˜ˆ์ง€ ์˜ˆ์ง„ ์˜ˆ์ฐฌ ์˜ˆ์ฒ˜ ์˜ค๋‚˜ ์˜ค๋‹จ ์˜ค๋‹ด ์˜ค๋„ ์˜ค๋ชจ ์˜ค๋ฌด ์˜ค๋ฏธ ์˜ค๋ฏผ ์˜ค์‚ฌ ์˜ค์ƒ ์˜ค์ƒˆ ์˜ค์ƒ ์˜ค์„œ ์˜ค์„  ์˜ค์„ค ์˜ค์„ฌ ์˜ค์„ฑ ์˜ค์†Œ ์˜ค์†” ์˜ค์†œ ์˜ค์†ก ์˜ค์‹œ ์˜ค์•ˆ ์˜ค์–‘ ์˜ค์—ฌ ์˜ค์—ฐ ์˜ค์š” ์˜ค์›” ์˜ค์œค ์˜ค์œจ ์˜ค์€ ์˜ค์ž„ ์˜ค์ฐฝ ์˜ค์ฑ„ ์˜ค์ฒœ ์˜ค์ฒจ ์˜ค์ฒญ ์˜ค์ดˆ ์˜ค์ด ์˜คํ‘œ ์˜คํ•˜ ์˜คํ–ฅ ์˜คํ˜„ ์˜คํ˜ผ ์˜คํ™” ์˜คํšจ ์˜ค๋‚จ ์˜ค๋ˆˆ ์˜ค๋‹ฌ ์˜ค๋ด„ ์˜ค๋น„ ์˜ค์Šฌ ์˜ค์˜ ์˜ค์ž ์˜คํƒœ ์˜คํ˜œ ์˜ค๋‚  ์˜ค๋Š˜ ์˜ค๋ถ„ ์˜ค์ƒ˜ ์˜ค์ˆœ ์˜ค์ธ ์˜ค์žฅ ์˜ค์ „ ์˜ค์ข… ์˜ค์ฃผ ์˜ค์ง€ ์˜ค์ง„ ์˜ค์ฐฌ ์˜ค์ฒ˜ ์˜จ๋‚œ ์˜จ๋‹จ ์˜จ๋‹ด ์˜จ๋„ ์˜จ๋ผ ์˜จ๋ž˜ ์˜จ๋ฅ˜ ์˜จ๋ฆฌ ์˜จ๋ชจ ์˜จ๋ฌด ์˜จ๋ฏธ ์˜จ๋ฏผ ์˜จ์‚ฌ ์˜จ์‚ฐ ์˜จ์ƒ ์˜จ์ƒˆ ์˜จ์ƒ ์˜จ์„œ ์˜จ์„  ์˜จ์„ค ์˜จ์„ฌ ์˜จ์„ฑ ์˜จ์†Œ ์˜จ์†” ์˜จ์†œ ์˜จ์†ก ์˜จ์ˆ˜ ์˜จ์‹œ ์˜จ์‹  ์˜จ์‹ค ์˜จ์‹ฌ ์˜จ์•„ ์˜จ์•ˆ ์˜จ์•  ์˜จ์–‘ ์˜จ์—ฌ ์˜จ์—ฐ ์˜จ์˜ˆ ์˜จ์š” ์˜จ์šฐ ์˜จ์›” ์˜จ์œ  ์˜จ์œค ์˜จ์œจ ์˜จ์€ ์˜จ์ด ์˜จ์ผ ์˜จ์ • ์˜จ์ฐจ ์˜จ์ฐฝ ์˜จ์ฑ„ ์˜จ์ฒœ ์˜จ์ฒจ ์˜จ์ฒญ ์˜จ์ดˆ ์˜จ์ด ์˜จํ‘œ ์˜จํ•˜ ์˜จํ•œ ์˜จํ•ด ์˜จํ–ฅ ์˜จํ˜„ ์˜จํ˜ผ ์˜จํ™ ์˜จํ™” ์˜จํšจ ์˜จ๋‚จ ์˜จ๋ˆˆ ์˜จ๋‹ฌ ์˜จ๋ด„ ์˜จ๋น„ ์˜จ์Šฌ ์˜จ์—ด ์˜จ์˜ ์˜จ์ž ์˜จํƒœ ์˜จํ˜œ ์˜จ๋‚  ์˜จ๋Š˜ ์˜จ๋ถ„ ์˜จ์ƒ˜ ์˜จ์ˆœ ์˜จ์ธ ์˜จ์žฅ ์˜จ์ „ ์˜จ์ข… ์˜จ์ฃผ ์˜จ์ง€ ์˜จ์ง„ ์˜จ์ฐฌ ์˜จ์ฒ˜ ์š”๋‚˜ ์š”๋‚œ ์š”๋‚ด ์š”๋‹จ ์š”๋‹ด ์š”๋ผ ์š”๋ฅ˜ ์š”์‚ฌ ์š”์‚ฐ ์š”์ƒ ์š”์„œ ์š”์„  ์š”์„ฌ ์š”์„ฑ ์š”์†” ์š”์†œ ์š”์†ก ์š”์ˆ˜ ์š”์‹  ์š”์‹ฌ ์š”์•„ ์š”์•ˆ ์š”์•  ์š”์—ฌ ์š”์—ฐ ์š”์šฐ ์š”์›” ์š”์œ  ์š”์œค ์š”์œจ ์š”์€ ์š”์ด ์š”์ผ ์š”์ž„ ์š”์ฐจ ์š”์ฐฝ ์š”์ฑ„ ์š”์ฒœ ์š”์ฒจ ์š”์ฒญ ์š”์ดˆ ์š”์ด ์š”ํ‘œ ์š”ํ•˜ ์š”ํ•ด ์š”ํ–ฅ ์š”ํ˜„ ์š”ํ˜ผ ์š”ํ™” ์š”๋‚จ ์š”๋ˆˆ ์š”๋‹ฌ ์š”๋‹น ์š”๋ด„ ์š”๋น„ ์š”์Šฌ ์š”์—ด ์š”์˜ ์š”ํ˜œ ์š”๋‚  ์š”๋Š˜ ์š”๋ถ„ ์š”์ƒ˜ ์š”์ˆœ ์š”์ธ ์š”์žฅ ์š”์ „ ์š”์ข… ์š”์ฃผ ์š”์ง€ ์š”์ง„ ์š”์ฐฌ ์š”์ฒ˜ ์šฐ๋‚œ ์šฐ๋‹จ ์šฐ๋‹ด ์šฐ๋„ ์šฐ๋ž˜ ์šฐ๋ฅ˜ ์šฐ๋ชจ ์šฐ๋ฌด ์šฐ๋ฏธ ์šฐ์‚ฌ ์šฐ์‚ฐ ์šฐ์ƒˆ ์šฐ์ƒ ์šฐ์„œ ์šฐ์„ค ์šฐ์„ฌ ์šฐ์„ฑ ์šฐ์†Œ ์šฐ์†” ์šฐ์†œ ์šฐ์†ก ์šฐ์ˆ˜ ์šฐ์‹ค ์šฐ์•ˆ ์šฐ์–‘ ์šฐ์—ฌ ์šฐ์˜ˆ ์šฐ์˜จ ์šฐ์š” ์šฐ์œค ์šฐ์œจ ์šฐ์€ ์šฐ์ด ์šฐ์ผ ์šฐ์ž„ ์šฐ์ • ์šฐ์ฐจ ์šฐ์ฐฝ ์šฐ์ฑ„ ์šฐ์ฒœ ์šฐ์ฒจ ์šฐ์ฒญ ์šฐ์ดˆ ์šฐ์ด ์šฐํ•˜ ์šฐํ•œ ์šฐํ•ด ์šฐํ–ฅ ์šฐํ˜„ ์šฐํ˜ผ ์šฐํšจ ์šฐ๋‚จ ์šฐ๋ˆˆ ์šฐ๋‹ฌ ์šฐ๋‹น ์šฐ๋ด„ ์šฐ๋น„ ์šฐ์Šฌ ์šฐ์—ด ์šฐ์˜ ์šฐ์ž ์šฐํƒœ ์šฐํ˜œ ์šฐ๋‚  ์šฐ๋Š˜ ์šฐ๋ถ„ ์šฐ์ƒ˜ ์šฐ์ˆœ ์šฐ์ธ ์šฐ์žฅ ์šฐ์ „ ์šฐ์ข… ์šฐ์ฃผ ์šฐ์ง€ ์šฐ์ง„ ์šฐ์ฐฌ ์šฐ์ฒ˜ ์›”๋‚˜ ์›”๋‚œ ์›”๋‚ด ์›”๋‹ค ์›”๋‹จ ์›”๋‹ด ์›”๋„ ์›”๋ž˜ ์›”๋ฅ˜ ์›”๋ฆฌ ์›”๋ชจ ์›”๋ฌด ์›”๋ฏธ ์›”๋ฏผ ์›”์‚ฌ ์›”์‚ฐ ์›”์ƒ ์›”์ƒˆ ์›”์ƒ ์›”์„œ ์›”์„  ์›”์„ค ์›”์„ฌ ์›”์„ฑ ์›”์†Œ ์›”์†” ์›”์†œ ์›”์†ก ์›”์ˆ˜ ์›”์‹œ ์›”์‹  ์›”์‹ค ์›”์‹ฌ ์›”์•„ ์›”์•ˆ ์›”์•  ์›”์–‘ ์›”์—ฌ ์›”์—ฐ ์›”์˜ˆ ์›”์˜ค ์›”์˜จ ์›”์š” ์›”์šฐ ์›”์œ  ์›”์œค ์›”์œจ ์›”์€ ์›”์ด ์›”์ผ ์›”์ž„ ์›”์ • ์›”์ฐจ ์›”์ฐฝ ์›”์ฑ„ ์›”์ฒœ ์›”์ฒจ ์›”์ฒญ ์›”์ดˆ ์›”์ด ์›”ํ‘œ ์›”ํ•˜ ์›”ํ•œ ์›”ํ•ด ์›”ํ–ฅ ์›”ํ˜„ ์›”ํ˜ผ ์›”ํ™ ์›”ํ™” ์›”ํšจ ์›”๋ˆˆ ์›”๋‹ฌ ์›”๋‹น ์›”๋ด„ ์›”๋น„ ์›”์Šฌ ์›”์—ด ์›”์˜ ์›”์ž ์›”ํƒœ ์›”ํ˜œ ์›”๋‚  ์›”๋Š˜ ์›”๋ถ„ ์›”์ƒ˜ ์›”์ˆœ ์›”์ธ ์›”์žฅ ์›”์ „ ์›”์ข… ์›”์ฃผ ์›”์ง€ ์›”์ง„ ์›”์ฐฌ ์›”์ฒ˜ ์œ ๋‚˜ ์œ ๋‚ด ์œ ๋‹จ ์œ ๋‹ด ์œ ๋„ ์œ ๋ผ ์œ ๋ž˜ ์œ ๋ฆฌ ์œ ๋ฏธ ์œ ๋ฏผ ์œ ์ƒ ์œ ์ƒˆ ์œ ์ƒ ์œ ์„  ์œ ์„ค ์œ ์„ฌ ์œ ์„ฑ ์œ ์†Œ ์œ ์†” ์œ ์†œ ์œ ์†ก ์œ ์ˆ˜ ์œ ์‹œ ์œ ์‹ฌ ์œ ์•ˆ ์œ ์–‘ ์œ ์—ฌ ์œ ์˜ค ์œ ์˜จ ์œ ์š” ์œ ์›” ์œ ์œค ์œ ์œจ ์œ ์€ ์œ ์ด ์œ ์ž„ ์œ ์ • ์œ ์ฐจ ์œ ์ฑ„ ์œ ์ฒœ ์œ ์ฒจ ์œ ์ฒญ ์œ ์ดˆ ์œ ์ด ์œ ํ‘œ ์œ ํ•˜ ์œ ํ•œ ์œ ํ–ฅ ์œ ํ˜„ ์œ ํ˜ผ ์œ ํ™” ์œ ํšจ ์œ ๋‚จ ์œ ๋ˆˆ ์œ ๋‹ฌ ์œ ๋‹น ์œ ๋ด„ ์œ ์Šฌ ์œ ์—ด ์œ ์˜ ์œ ์ž ์œ ํƒœ ์œ ํ˜œ ์œ ๋‚  ์œ ๋Š˜ ์œ ๋ถ„ ์œ ์ƒ˜ ์œ ์ˆœ ์œ ์ธ ์œ ์žฅ ์œ ์ „ ์œ ์ข… ์œ ์ฃผ ์œ ์ง€ ์œ ์ง„ ์œ ์ฐฌ ์œ ์ฒ˜ ์œค๋‚˜ ์œค๋‚œ ์œค๋‚ด ์œค๋‹ค ์œค๋‹จ ์œค๋‹ด ์œค๋„ ์œค๋ผ ์œค๋ž˜ ์œค๋ฅ˜ ์œค๋ฆฌ ์œค๋ชจ ์œค๋ฌด ์œค๋ฏธ ์œค๋ฏผ ์œค์‚ฌ ์œค์‚ฐ ์œค์ƒ ์œค์ƒˆ ์œค์ƒ ์œค์„œ ์œค์„  ์œค์„ค ์œค์„ฌ ์œค์„ฑ ์œค์†Œ ์œค์†” ์œค์†œ ์œค์†ก ์œค์ˆ˜ ์œค์‹œ ์œค์‹  ์œค์‹ค ์œค์‹ฌ ์œค์•„ ์œค์•ˆ ์œค์•  ์œค์–‘ ์œค์—ฌ ์œค์—ฐ ์œค์˜ˆ ์œค์˜ค ์œค์˜จ ์œค์š” ์œค์šฐ ์œค์›” ์œค์œ  ์œค์œจ ์œค์€ ์œค์ด ์œค์ผ ์œค์ž„ ์œค์ • ์œค์ฐจ ์œค์ฐฝ ์œค์ฑ„ ์œค์ฒœ ์œค์ฒจ ์œค์ฒญ ์œค์ดˆ ์œค์ด ์œคํ‘œ ์œคํ•˜ ์œคํ•œ ์œคํ•ด ์œคํ–ฅ ์œคํ˜„ ์œคํ˜ผ ์œคํ™ ์œคํ™” ์œคํšจ ์œค๋‚จ ์œค๋ˆˆ ์œค๋‹ฌ ์œค๋‹น ์œค๋ด„ ์œค๋น„ ์œค์Šฌ ์œค์—ด ์œค์˜ ์œค์ž ์œคํƒœ ์œคํ˜œ ์œค๋‚  ์œค๋Š˜ ์œค๋ถ„ ์œค์ƒ˜ ์œค์ˆœ ์œค์ธ ์œค์žฅ ์œค์ „ ์œค์ข… ์œค์ฃผ ์œค์ง€ ์œค์ง„ ์œค์ฐฌ ์œค์ฒ˜ ์œจ๋‚œ ์œจ๋‹จ ์œจ๋‹ด ์œจ๋„ ์œจ๋ผ ์œจ๋ž˜ ์œจ๋ฅ˜ ์œจ๋ชจ ์œจ๋ฌด ์œจ๋ฏธ ์œจ๋ฏผ ์œจ์‚ฐ ์œจ์ƒ ์œจ์ƒˆ ์œจ์ƒ ์œจ์„œ ์œจ์„  ์œจ์„ค ์œจ์„ฌ ์œจ์„ฑ ์œจ์†Œ ์œจ์†” ์œจ์†œ ์œจ์†ก ์œจ์ˆ˜ ์œจ์‹œ ์œจ์‹  ์œจ์‹ค ์œจ์‹ฌ ์œจ์•„ ์œจ์•ˆ ์œจ์•  ์œจ์–‘ ์œจ์—ฌ ์œจ์—ฐ ์œจ์˜ˆ ์œจ์˜ค ์œจ์˜จ ์œจ์š” ์œจ์šฐ ์œจ์›” ์œจ์œ  ์œจ์œค ์œจ์ด ์œจ์ผ ์œจ์ž„ ์œจ์ • ์œจ์ฐจ ์œจ์ฐฝ ์œจ์ฑ„ ์œจ์ฒœ ์œจ์ฒจ ์œจ์ฒญ ์œจ์ดˆ ์œจ์ด ์œจํ‘œ ์œจํ•˜ ์œจํ•œ ์œจํ•ด ์œจํ–ฅ ์œจํ˜„ ์œจํ˜ผ ์œจํ™ ์œจํ™” ์œจํšจ ์œจ๋‚จ ์œจ๋ˆˆ ์œจ๋‹ฌ ์œจ๋‹น ์œจ๋ด„ ์œจ๋น„ ์œจ์Šฌ ์œจ์—ด ์œจ์˜ ์œจ์ž ์œจํƒœ ์œจํ˜œ ์œจ๋‚  ์œจ๋Š˜ ์œจ๋ถ„ ์œจ์ƒ˜ ์œจ์ˆœ ์œจ์ธ ์œจ์žฅ ์œจ์ „ ์œจ์ข… ์œจ์ฃผ ์œจ์ง€ ์œจ์ง„ ์œจ์ฐฌ ์œจ์ฒ˜ ์€๋‹จ ์€๋‹ด ์€๋„ ์€๋ผ ์€๋ž˜ ์€๋ฅ˜ ์€๋ฆฌ ์€๋ฌด ์€๋ฏธ ์€๋ฏผ ์€์‚ฌ ์€์‚ฐ ์€์ƒ ์€์ƒˆ ์€์ƒ ์€์„œ ์€์„  ์€์„ค ์€์„ฌ ์€์„ฑ ์€์†Œ ์€์†” ์€์†œ ์€์†ก ์€์ˆ˜ ์€์‹œ ์€์‹ค ์€์‹ฌ ์€์•„ ์€์•ˆ ์€์•  ์€์–‘ ์€์—ฌ ์€์˜ˆ ์€์˜ค ์€์˜จ ์€์š” ์€์šฐ ์€์›” ์€์œ  ์€์œค ์€์œจ ์€์ด ์€์ผ ์€์ž„ ์€์ • ์€์ฐจ ์€์ฐฝ ์€์ฑ„ ์€์ฒœ ์€์ฒจ ์€์ฒญ ์€์ดˆ ์€์ด ์€ํ‘œ ์€ํ•˜ ์€ํ•œ ์€ํ•ด ์€ํ–ฅ ์€ํ˜„ ์€ํ˜ผ ์€ํ™ ์€ํ™” ์€ํšจ ์€๋‚จ ์€๋ˆˆ ์€๋‹ฌ ์€๋‹น ์€๋ด„ ์€๋น„ ์€์Šฌ ์€์—ด ์€์˜ ์€์ž ์€ํƒœ ์€ํ˜œ ์€๋‚  ์€๋Š˜ ์€๋ถ„ ์€์ƒ˜ ์€์ˆœ ์€์ธ ์€์žฅ ์€์ „ ์€์ข… ์€์ฃผ ์€์ง€ ์€์ง„ ์€์ฐฌ ์€์ฒ˜ ์ด๋„ ์ด๋ผ ์ด๋ฌด ์ด์‚ฌ ์ด์‚ฐ ์ด์ƒ ์ด์„œ ์ด์„  ์ด์„ค ์ด์„ฌ ์ด์†Œ ์ด์†” ์ด์†œ ์ด์†ก ์ด์ˆ˜ ์ด์‹œ ์ด์‹  ์ด์‹ค ์ด์‹ฌ ์ด์•„ ์ด์•ˆ ์ด์—ฐ ์ด์˜ˆ ์ด์˜ค ์ด์šฐ ์ด์›” ์ด์œจ ์ด์€ ์ด์ผ ์ด์ • ์ด์ฐจ ์ด์ฐฝ ์ด์ฑ„ ์ด์ฒœ ์ด์ฒจ ์ด์ฒญ ์ด์ดˆ ์ด์ด ์ดํ‘œ ์ดํ•œ ์ดํ•ด ์ดํ–ฅ ์ดํ˜„ ์ดํ™” ์ดํšจ ์ด๋‚จ ์ด๋ˆˆ ์ด๋‹ฌ ์ด๋‹น ์ด๋ด„ ์ด๋น„ ์ด์Šฌ ์ด์ž ์ดํƒœ ์ด๋‚  ์ด๋Š˜ ์ด๋ถ„ ์ด์ƒ˜ ์ด์ˆœ ์ด์ธ ์ด์žฅ ์ด์ „ ์ด์ข… ์ด์ฃผ ์ด์ง€ ์ด์ง„ ์ด์ฐฌ ์ด์ฒ˜ ์ผ๋‚˜ ์ผ๋‚œ ์ผ๋‚ด ์ผ๋‹ค ์ผ๋‹จ ์ผ๋‹ด ์ผ๋„ ์ผ๋ผ ์ผ๋ž˜ ์ผ๋ชจ ์ผ๋ฌด ์ผ๋ฏธ ์ผ๋ฏผ ์ผ์‚ฌ ์ผ์‚ฐ ์ผ์ƒ ์ผ์ƒˆ ์ผ์„œ ์ผ์„  ์ผ์„ค ์ผ์„ฌ ์ผ์„ฑ ์ผ์†Œ ์ผ์†” ์ผ์†œ ์ผ์†ก ์ผ์ˆ˜ ์ผ์‹œ ์ผ์‹  ์ผ์‹ค ์ผ์‹ฌ ์ผ์•„ ์ผ์•ˆ ์ผ์•  ์ผ์–‘ ์ผ์—ฌ ์ผ์—ฐ ์ผ์˜ˆ ์ผ์˜ค ์ผ์˜จ ์ผ์š” ์ผ์šฐ ์ผ์›” ์ผ์œ  ์ผ์œค ์ผ์œจ ์ผ์€ ์ผ์ด ์ผ์ • ์ผ์ฐจ ์ผ์ฐฝ ์ผ์ฑ„ ์ผ์ฒœ ์ผ์ฒจ ์ผ์ฒญ ์ผ์ดˆ ์ผ์ด ์ผํ‘œ ์ผํ•˜ ์ผํ•œ ์ผํ–ฅ ์ผํ˜„ ์ผํ˜ผ ์ผํ™ ์ผํ™” ์ผํšจ ์ผ๋‚จ ์ผ๋ˆˆ ์ผ๋‹ฌ ์ผ๋‹น ์ผ๋ด„ ์ผ๋น„ ์ผ์Šฌ ์ผ์—ด ์ผ์˜ ์ผ์ž ์ผํƒœ ์ผ๋‚  ์ผ๋Š˜ ์ผ๋ถ„ ์ผ์ƒ˜ ์ผ์ˆœ ์ผ์ธ ์ผ์žฅ ์ผ์ „ ์ผ์ข… ์ผ์ฃผ ์ผ์ง€ ์ผ์ง„ ์ผ์ฐฌ ์ผ์ฒ˜ ์ž„์„  ์ž„์„ค ์ž„์†” ์ž„์‹ค ์ž„์ • ์ž„์ฑ„ ์ž„์ฒญ ์ž„ํ•ด ์ž„ํ™ ์ž„ํ™” ์ž„ํšจ ์ž„๋‚  ์ž„๋Š˜ ์ž„๋ถ„ ์ž„์ƒ˜ ์ž„์ˆœ ์ž„์ธ ์ž„์žฅ ์ž„์ „ ์ž„์ข… ์ž„์ฃผ ์ž„์ง€ ์ž„์ง„ ์ž„์ฐฌ ์ž„์ฒ˜ ์ •๋‚˜ ์ •๋‚œ ์ •๋‚ด ์ •๋‹ค ์ •๋‹จ ์ •๋‹ด ์ •๋„ ์ •๋ผ ์ •๋ž˜ ์ •๋ฅ˜ ์ •๋ฌด ์ •๋ฏธ ์ •๋ฏผ ์ •์‚ฐ ์ •์ƒ ์ •์ƒˆ ์ •์ƒ ์ •์„  ์ •์„ค ์ •์„ฌ ์ •์„ฑ ์ •์†Œ ์ •์†” ์ •์†œ ์ •์†ก ์ •์ˆ˜ ์ •์‹ค ์ •์•„ ์ •์•ˆ ์ •์–‘ ์ •์—ฌ ์ •์—ฐ ์ •์˜ˆ ์ •์˜ค ์ •์˜จ ์ •์š” ์ •์šฐ ์ •์›” ์ •์œ  ์ •์œค ์ •์œจ ์ •์ด ์ •์ž„ ์ •์ฐจ ์ •์ฐฝ ์ •์ฑ„ ์ •์ฒœ ์ •์ฒจ ์ •์ฒญ ์ •์ดˆ ์ •์ด ์ •ํ‘œ ์ •ํ•˜ ์ •ํ•œ ์ •ํ•ด ์ •ํ–ฅ ์ •ํ˜„ ์ •ํ˜ผ ์ •ํ™ ์ •ํ™” ์ •ํšจ ์ •๋ˆˆ ์ •๋‹ฌ ์ •๋‹น ์ •๋ด„ ์ •๋น„ ์ •์Šฌ ์ •์—ด ์ •์˜ ์ •ํƒœ ์ •ํ˜œ ์ •๋‚  ์ •๋Š˜ ์ •๋ถ„ ์ •์ƒ˜ ์ •์ˆœ ์ •์ธ ์ •์žฅ ์ •์ „ ์ •์ข… ์ •์ฃผ ์ •์ง€ ์ •์ง„ ์ •์ฐฌ ์ •์ฒ˜ ์ฐจ๋‚˜ ์ฐจ๋‚œ ์ฐจ๋‹ด ์ฐจ๋„ ์ฐจ๋ฅ˜ ์ฐจ๋ฆฌ ์ฐจ๋ชจ ์ฐจ๋ฌด ์ฐจ๋ฏธ ์ฐจ๋ฏผ ์ฐจ์‚ฌ ์ฐจ์‚ฐ ์ฐจ์ƒ ์ฐจ์ƒˆ ์ฐจ์ƒ ์ฐจ์„œ ์ฐจ์„  ์ฐจ์„ค ์ฐจ์„ฌ ์ฐจ์„ฑ ์ฐจ์†Œ ์ฐจ์†” ์ฐจ์†œ ์ฐจ์†ก ์ฐจ์ˆ˜ ์ฐจ์‹œ ์ฐจ์‹  ์ฐจ์‹ค ์ฐจ์‹ฌ ์ฐจ์•  ์ฐจ์–‘ ์ฐจ์—ฐ ์ฐจ์˜ˆ ์ฐจ์˜ค ์ฐจ์˜จ ์ฐจ์šฐ ์ฐจ์›” ์ฐจ์œค ์ฐจ์œจ ์ฐจ์€ ์ฐจ์ผ ์ฐจ์ • ์ฐจ์ฐฝ ์ฐจ์ฑ„ ์ฐจ์ฒœ ์ฐจ์ฒจ ์ฐจ์ฒญ ์ฐจ์ดˆ ์ฐจ์ด ์ฐจํ‘œ ์ฐจํ•˜ ์ฐจํ•œ ์ฐจํ•ด ์ฐจํ–ฅ ์ฐจํ˜„ ์ฐจํ˜ผ ์ฐจํ™ ์ฐจํ™” ์ฐจํšจ ์ฐจ๋‚จ ์ฐจ๋ˆˆ ์ฐจ๋‹ฌ ์ฐจ๋‹น ์ฐจ๋ด„ ์ฐจ์Šฌ ์ฐจ์—ด ์ฐจ์˜ ์ฐจ์ž ์ฐจํƒœ ์ฐจํ˜œ ์ฐจ๋‚  ์ฐจ๋Š˜ ์ฐจ๋ถ„ ์ฐจ์ƒ˜ ์ฐจ์ˆœ ์ฐจ์ธ ์ฐจ์žฅ ์ฐจ์ „ ์ฐจ์ข… ์ฐจ์ฃผ ์ฐจ์ง€ ์ฐจ์ง„ ์ฐจ์ฐฌ ์ฐจ์ฒ˜ ์ฐฝ๋‚˜ ์ฐฝ๋‚œ ์ฐฝ๋‚ด ์ฐฝ๋‹ค ์ฐฝ๋‹จ ์ฐฝ๋‹ด ์ฐฝ๋„ ์ฐฝ๋ผ ์ฐฝ๋ž˜ ์ฐฝ๋ฅ˜ ์ฐฝ๋ฆฌ ์ฐฝ๋ชจ ์ฐฝ๋ฌด ์ฐฝ๋ฏธ ์ฐฝ๋ฏผ ์ฐฝ์‚ฌ ์ฐฝ์‚ฐ ์ฐฝ์ƒ ์ฐฝ์ƒˆ ์ฐฝ์ƒ ์ฐฝ์„œ ์ฐฝ์„  ์ฐฝ์„ค ์ฐฝ์„ฌ ์ฐฝ์„ฑ ์ฐฝ์†Œ ์ฐฝ์†” ์ฐฝ์†œ ์ฐฝ์†ก ์ฐฝ์ˆ˜ ์ฐฝ์‹œ ์ฐฝ์‹  ์ฐฝ์‹ค ์ฐฝ์‹ฌ ์ฐฝ์•„ ์ฐฝ์•ˆ ์ฐฝ์•  ์ฐฝ์–‘ ์ฐฝ์—ฌ ์ฐฝ์—ฐ ์ฐฝ์˜ˆ ์ฐฝ์˜ค ์ฐฝ์˜จ ์ฐฝ์š” ์ฐฝ์šฐ ์ฐฝ์›” ์ฐฝ์œ  ์ฐฝ์œค ์ฐฝ์œจ ์ฐฝ์€ ์ฐฝ์ด ์ฐฝ์ผ ์ฐฝ์ž„ ์ฐฝ์ • ์ฐฝ์ฐจ ์ฐฝ์ฑ„ ์ฐฝ์ฒœ ์ฐฝ์ฒจ ์ฐฝ์ฒญ ์ฐฝ์ดˆ ์ฐฝ์ด ์ฐฝํ‘œ ์ฐฝํ•˜ ์ฐฝํ•œ ์ฐฝํ•ด ์ฐฝํ–ฅ ์ฐฝํ˜„ ์ฐฝํ˜ผ ์ฐฝํ™ ์ฐฝํ™” ์ฐฝํšจ ์ฐฝ๋‚จ ์ฐฝ๋ˆˆ ์ฐฝ๋‹ฌ ์ฐฝ๋‹น ์ฐฝ๋ด„ ์ฐฝ๋น„ ์ฐฝ์Šฌ ์ฐฝ์—ด ์ฐฝ์˜ ์ฐฝ์ž ์ฐฝํƒœ ์ฐฝํ˜œ ์ฐฝ๋‚  ์ฐฝ๋Š˜ ์ฐฝ๋ถ„ ์ฐฝ์ƒ˜ ์ฐฝ์ˆœ ์ฐฝ์ธ ์ฐฝ์žฅ ์ฐฝ์ „ ์ฐฝ์ข… ์ฐฝ์ฃผ ์ฐฝ์ง€ ์ฐฝ์ง„ ์ฐฝ์ฐฌ ์ฐฝ์ฒ˜ ์ฑ„๋‚˜ ์ฑ„๋‚œ ์ฑ„๋‹จ ์ฑ„๋‹ด ์ฑ„๋„ ์ฑ„๋ผ ์ฑ„๋ž˜ ์ฑ„๋ฆฌ ์ฑ„๋ชจ ์ฑ„๋ฏธ ์ฑ„๋ฏผ ์ฑ„์‚ฌ ์ฑ„์‚ฐ ์ฑ„์ƒ ์ฑ„์ƒˆ ์ฑ„์ƒ ์ฑ„์„œ ์ฑ„์„  ์ฑ„์„ค ์ฑ„์„ฌ ์ฑ„์„ฑ ์ฑ„์†Œ ์ฑ„์†” ์ฑ„์†œ ์ฑ„์†ก ์ฑ„์ˆ˜ ์ฑ„์‹œ ์ฑ„์‹  ์ฑ„์‹ค ์ฑ„์‹ฌ ์ฑ„์•„ ์ฑ„์•ˆ ์ฑ„์–‘ ์ฑ„์—ฌ ์ฑ„์—ฐ ์ฑ„์˜ˆ ์ฑ„์˜ค ์ฑ„์˜จ ์ฑ„์š” ์ฑ„์šฐ ์ฑ„์›” ์ฑ„์œ  ์ฑ„์œค ์ฑ„์œจ ์ฑ„์€ ์ฑ„์ด ์ฑ„์ผ ์ฑ„์ž„ ์ฑ„์ • ์ฑ„์ฐจ ์ฑ„์ฐฝ ์ฑ„์ฒœ ์ฑ„์ฒจ ์ฑ„์ฒญ ์ฑ„์ดˆ ์ฑ„์ด ์ฑ„ํ‘œ ์ฑ„ํ•˜ ์ฑ„ํ•œ ์ฑ„ํ•ด ์ฑ„ํ–ฅ ์ฑ„ํ˜„ ์ฑ„ํ˜ผ ์ฑ„ํ™ ์ฑ„ํ™” ์ฑ„ํšจ ์ฑ„๋‚จ ์ฑ„๋ˆˆ ์ฑ„๋‹ฌ ์ฑ„๋‹น ์ฑ„๋ด„ ์ฑ„๋น„ ์ฑ„์Šฌ ์ฑ„์—ด ์ฑ„์˜ ์ฑ„์ž ์ฑ„ํ˜œ ์ฑ„๋‚  ์ฑ„๋Š˜ ์ฑ„๋ถ„ ์ฑ„์ƒ˜ ์ฑ„์ˆœ ์ฑ„์ธ ์ฑ„์žฅ ์ฑ„์ „ ์ฑ„์ข… ์ฑ„์ฃผ ์ฑ„์ง€ ์ฑ„์ง„ ์ฑ„์ฐฌ ์ฑ„์ฒ˜ ์ฒœ๋‚œ ์ฒœ๋‹ค ์ฒœ๋‹จ ์ฒœ๋‹ด ์ฒœ๋„ ์ฒœ๋ผ ์ฒœ๋ž˜ ์ฒœ๋ฅ˜ ์ฒœ๋ฆฌ ์ฒœ๋ชจ ์ฒœ๋ฌด ์ฒœ๋ฏธ ์ฒœ์‚ฐ ์ฒœ์ƒ ์ฒœ์ƒˆ ์ฒœ์ƒ ์ฒœ์„œ ์ฒœ์„  ์ฒœ์„ค ์ฒœ์„ฌ ์ฒœ์„ฑ ์ฒœ์†Œ ์ฒœ์†” ์ฒœ์†œ ์ฒœ์†ก ์ฒœ์ˆ˜ ์ฒœ์‹  ์ฒœ์‹ค ์ฒœ์‹ฌ ์ฒœ์•„ ์ฒœ์•ˆ ์ฒœ์•  ์ฒœ์–‘ ์ฒœ์—ฌ ์ฒœ์—ฐ ์ฒœ์˜ˆ ์ฒœ์˜ค ์ฒœ์˜จ ์ฒœ์š” ์ฒœ์šฐ ์ฒœ์›” ์ฒœ์œ  ์ฒœ์œค ์ฒœ์œจ ์ฒœ์€ ์ฒœ์ด ์ฒœ์ผ ์ฒœ์ž„ ์ฒœ์ • ์ฒœ์ฐจ ์ฒœ์ฐฝ ์ฒœ์ฑ„ ์ฒœ์ฒจ ์ฒœ์ฒญ ์ฒœ์ดˆ ์ฒœ์ด ์ฒœํ‘œ ์ฒœํ–ฅ ์ฒœํ˜„ ์ฒœํ˜ผ ์ฒœํ™ ์ฒœํ™” ์ฒœํšจ ์ฒœ๋‚จ ์ฒœ๋ˆˆ ์ฒœ๋‹ฌ ์ฒœ๋‹น ์ฒœ๋ด„ ์ฒœ๋น„ ์ฒœ์Šฌ ์ฒœ์—ด ์ฒœ์˜ ์ฒœ์ž ์ฒœํƒœ ์ฒœํ˜œ ์ฒœ๋‚  ์ฒœ๋Š˜ ์ฒœ๋ถ„ ์ฒœ์ƒ˜ ์ฒœ์ˆœ ์ฒœ์ธ ์ฒœ์žฅ ์ฒœ์ „ ์ฒœ์ข… ์ฒœ์ฃผ ์ฒœ์ง€ ์ฒœ์ง„ ์ฒœ์ฐฌ ์ฒœ์ฒ˜ ์ฒจ๋‚˜ ์ฒจ๋‚œ ์ฒจ๋‚ด ์ฒจ๋‹ค ์ฒจ๋‹ด ์ฒจ๋„ ์ฒจ๋ผ ์ฒจ๋ž˜ ์ฒจ๋ฅ˜ ์ฒจ๋ฆฌ ์ฒจ๋ชจ ์ฒจ๋ฌด ์ฒจ๋ฏธ ์ฒจ๋ฏผ ์ฒจ์‚ฐ ์ฒจ์ƒ ์ฒจ์ƒˆ ์ฒจ์ƒ ์ฒจ์„œ ์ฒจ์„  ์ฒจ์„ค ์ฒจ์„ฌ ์ฒจ์„ฑ ์ฒจ์†Œ ์ฒจ์†” ์ฒจ์†œ ์ฒจ์†ก ์ฒจ์ˆ˜ ์ฒจ์‹œ ์ฒจ์‹  ์ฒจ์‹ค ์ฒจ์‹ฌ ์ฒจ์•„ ์ฒจ์•ˆ ์ฒจ์•  ์ฒจ์–‘ ์ฒจ์—ฌ ์ฒจ์—ฐ ์ฒจ์˜ˆ ์ฒจ์˜ค ์ฒจ์˜จ ์ฒจ์š” ์ฒจ์šฐ ์ฒจ์›” ์ฒจ์œ  ์ฒจ์œค ์ฒจ์œจ ์ฒจ์€ ์ฒจ์ผ ์ฒจ์ž„ ์ฒจ์ • ์ฒจ์ฐจ ์ฒจ์ฐฝ ์ฒจ์ฑ„ ์ฒจ์ฒœ ์ฒจ์ฒญ ์ฒจ์ดˆ ์ฒจ์ด ์ฒจํ‘œ ์ฒจํ•˜ ์ฒจํ•œ ์ฒจํ•ด ์ฒจํ–ฅ ์ฒจํ˜„ ์ฒจํ˜ผ ์ฒจํ™ ์ฒจํ™” ์ฒจํšจ ์ฒจ๋‚จ ์ฒจ๋ˆˆ ์ฒจ๋‹ฌ ์ฒจ๋‹น ์ฒจ๋น„ ์ฒจ์Šฌ ์ฒจ์—ด ์ฒจ์˜ ์ฒจ์ž ์ฒจํƒœ ์ฒจํ˜œ ์ฒจ๋‚  ์ฒจ๋Š˜ ์ฒจ๋ถ„ ์ฒจ์ƒ˜ ์ฒจ์ˆœ ์ฒจ์ธ ์ฒจ์žฅ ์ฒจ์ „ ์ฒจ์ข… ์ฒจ์ฃผ ์ฒจ์ง€ ์ฒจ์ง„ ์ฒจ์ฐฌ ์ฒจ์ฒ˜ ์ฒญ๋‚˜ ์ฒญ๋‚œ ์ฒญ๋‚ด ์ฒญ๋‹ค ์ฒญ๋‹จ ์ฒญ๋‹ด ์ฒญ๋„ ์ฒญ๋ผ ์ฒญ๋ž˜ ์ฒญ๋ฅ˜ ์ฒญ๋ฆฌ ์ฒญ๋ชจ ์ฒญ๋ฌด ์ฒญ๋ฏธ ์ฒญ๋ฏผ ์ฒญ์‚ฌ ์ฒญ์‚ฐ ์ฒญ์ƒ ์ฒญ์ƒˆ ์ฒญ์ƒ ์ฒญ์„œ ์ฒญ์„  ์ฒญ์„ค ์ฒญ์„ฌ ์ฒญ์„ฑ ์ฒญ์†” ์ฒญ์†œ ์ฒญ์†ก ์ฒญ์ˆ˜ ์ฒญ์‹œ ์ฒญ์‹  ์ฒญ์‹ค ์ฒญ์‹ฌ ์ฒญ์•„ ์ฒญ์•ˆ ์ฒญ์•  ์ฒญ์–‘ ์ฒญ์—ฌ ์ฒญ์—ฐ ์ฒญ์˜ˆ ์ฒญ์˜ค ์ฒญ์˜จ ์ฒญ์š” ์ฒญ์šฐ ์ฒญ์›” ์ฒญ์œ  ์ฒญ์œค ์ฒญ์œจ ์ฒญ์€ ์ฒญ์ด ์ฒญ์ผ ์ฒญ์ž„ ์ฒญ์ • ์ฒญ์ฐจ ์ฒญ์ฐฝ ์ฒญ์ฑ„ ์ฒญ์ฒœ ์ฒญ์ฒจ ์ฒญ์ดˆ ์ฒญ์ด ์ฒญํ‘œ ์ฒญํ•˜ ์ฒญํ•œ ์ฒญํ•ด ์ฒญํ–ฅ ์ฒญํ˜„ ์ฒญํ˜ผ ์ฒญํ™ ์ฒญํ™” ์ฒญํšจ ์ฒญ๋‚จ ์ฒญ๋ˆˆ ์ฒญ๋‹ฌ ์ฒญ๋‹น ์ฒญ๋ด„ ์ฒญ๋น„ ์ฒญ์Šฌ ์ฒญ์—ด ์ฒญ์˜ ์ฒญ์ž ์ฒญํƒœ ์ฒญํ˜œ ์ฒญ๋‚  ์ฒญ๋Š˜ ์ฒญ๋ถ„ ์ฒญ์ƒ˜ ์ฒญ์ˆœ ์ฒญ์ธ ์ฒญ์žฅ ์ฒญ์ „ ์ฒญ์ข… ์ฒญ์ฃผ ์ฒญ์ง€ ์ฒญ์ง„ ์ฒญ์ฐฌ ์ฒญ์ฒ˜ ์ดˆ๋‚˜ ์ดˆ๋‚œ ์ดˆ๋‚ด ์ดˆ๋‹ค ์ดˆ๋‹จ ์ดˆ๋‹ด ์ดˆ๋„ ์ดˆ๋ฅ˜ ์ดˆ๋ฆฌ ์ดˆ๋ชจ ์ดˆ๋ฌด ์ดˆ๋ฏธ ์ดˆ๋ฏผ ์ดˆ์‚ฌ ์ดˆ์‚ฐ ์ดˆ์ƒˆ ์ดˆ์ƒ ์ดˆ์„œ ์ดˆ์„  ์ดˆ์„ค ์ดˆ์„ฌ ์ดˆ์„ฑ ์ดˆ์†Œ ์ดˆ์†” ์ดˆ์†œ ์ดˆ์†ก ์ดˆ์ˆ˜ ์ดˆ์‹œ ์ดˆ์‹  ์ดˆ์‹ค ์ดˆ์‹ฌ ์ดˆ์•„ ์ดˆ์•ˆ ์ดˆ์•  ์ดˆ์–‘ ์ดˆ์—ฌ ์ดˆ์—ฐ ์ดˆ์˜ˆ ์ดˆ์˜ค ์ดˆ์˜จ ์ดˆ์š” ์ดˆ์šฐ ์ดˆ์›” ์ดˆ์œ  ์ดˆ์œค ์ดˆ์œจ ์ดˆ์€ ์ดˆ์ด ์ดˆ์ผ ์ดˆ์ž„ ์ดˆ์ • ์ดˆ์ฐจ ์ดˆ์ฐฝ ์ดˆ์ฑ„ ์ดˆ์ฒœ ์ดˆ์ฒจ ์ดˆ์ฒญ ์ดˆ์ด ์ดˆํ‘œ ์ดˆํ•˜ ์ดˆํ•œ ์ดˆํ•ด ์ดˆํ–ฅ ์ดˆํ˜„ ์ดˆํ˜ผ ์ดˆํ™ ์ดˆํ™” ์ดˆํšจ ์ดˆ๋‚จ ์ดˆ๋ˆˆ ์ดˆ๋‹ฌ ์ดˆ๋‹น ์ดˆ๋ด„ ์ดˆ๋น„ ์ดˆ์Šฌ ์ดˆ์—ด ์ดˆ์˜ ์ดˆ์ž ์ดˆํƒœ ์ดˆํ˜œ ์ดˆ๋‚  ์ดˆ๋Š˜ ์ดˆ๋ถ„ ์ดˆ์ƒ˜ ์ดˆ์ˆœ ์ดˆ์ธ ์ดˆ์žฅ ์ดˆ์ „ ์ดˆ์ข… ์ดˆ์ฃผ ์ดˆ์ง€ ์ดˆ์ง„ ์ดˆ์ฐฌ ์ดˆ์ฒ˜ ์ด๋‚˜ ์ด๋‚œ ์ด๋‚ด ์ด๋‹จ ์ด๋‹ด ์ด๋„ ์ด๋ผ ์ด๋ž˜ ์ด๋ฅ˜ ์ด๋ฆฌ ์ด๋ชจ ์ด๋ฌด ์ด๋ฏธ ์ด๋ฏผ ์ด์‚ฌ ์ด์‚ฐ ์ด์ƒˆ ์ด์ƒ ์ด์„œ ์ด์„  ์ด์„ค ์ด์„ฌ ์ด์†Œ ์ด์†” ์ด์†œ ์ด์†ก ์ด์ˆ˜ ์ด์‹œ ์ด์‹  ์ด์‹ค ์ด์‹ฌ ์ด์•„ ์ด์•ˆ ์ด์•  ์ด์–‘ ์ด์—ฌ ์ด์—ฐ ์ด์˜ˆ ์ด์˜ค ์ด์˜จ ์ด์š” ์ด์šฐ ์ด์›” ์ด์œ  ์ด์œค ์ด์œจ ์ด์€ ์ด์ด ์ด์ผ ์ด์ž„ ์ด์ • ์ด์ฐจ ์ด์ฐฝ ์ด์ฑ„ ์ด์ฒœ ์ด์ฒจ ์ด์ฒญ ์ด์ดˆ ์ดํ‘œ ์ดํ•˜ ์ดํ•œ ์ดํ•ด ์ดํ–ฅ ์ดํ˜„ ์ดํ˜ผ ์ดํ™ ์ดํ™” ์ดํšจ ์ด๋‚จ ์ด๋ˆˆ ์ด๋‹ฌ ์ด๋‹น ์ด๋น„ ์ด์Šฌ ์ด์—ด ์ด์˜ ์ด์ž ์ดํƒœ ์ดํ˜œ ์ด๋‚  ์ด๋Š˜ ์ด๋ถ„ ์ด์ƒ˜ ์ด์ˆœ ์ด์ธ ์ด์žฅ ์ด์ „ ์ด์ข… ์ด์ฃผ ์ด์ง€ ์ด์ง„ ์ด์ฐฌ ์ด์ฒ˜ ํ‘œ๋‚˜ ํ‘œ๋‚œ ํ‘œ๋‚ด ํ‘œ๋‹ค ํ‘œ๋‹จ ํ‘œ๋‹ด ํ‘œ๋„ ํ‘œ๋ผ ํ‘œ๋ž˜ ํ‘œ๋ฆฌ ํ‘œ๋ชจ ํ‘œ๋ฌด ํ‘œ๋ฏธ ํ‘œ๋ฏผ ํ‘œ์‚ฌ ํ‘œ์‚ฐ ํ‘œ์ƒˆ ํ‘œ์ƒ ํ‘œ์„œ ํ‘œ์„  ํ‘œ์„ค ํ‘œ์„ฌ ํ‘œ์„ฑ ํ‘œ์†Œ ํ‘œ์†” ํ‘œ์†œ ํ‘œ์†ก ํ‘œ์ˆ˜ ํ‘œ์‹  ํ‘œ์‹ค ํ‘œ์‹ฌ ํ‘œ์•„ ํ‘œ์•ˆ ํ‘œ์•  ํ‘œ์–‘ ํ‘œ์—ฌ ํ‘œ์—ฐ ํ‘œ์˜ˆ ํ‘œ์˜ค ํ‘œ์˜จ ํ‘œ์š” ํ‘œ์šฐ ํ‘œ์›” ํ‘œ์œ  ํ‘œ์œค ํ‘œ์œจ ํ‘œ์€ ํ‘œ์ด ํ‘œ์ผ ํ‘œ์ž„ ํ‘œ์ฐจ ํ‘œ์ฑ„ ํ‘œ์ฒœ ํ‘œ์ฒจ ํ‘œ์ฒญ ํ‘œ์ดˆ ํ‘œ์ด ํ‘œํ•˜ ํ‘œํ•œ ํ‘œํ•ด ํ‘œํ–ฅ ํ‘œํ˜ผ ํ‘œํ™ ํ‘œํ™” ํ‘œ๋‚จ ํ‘œ๋ˆˆ ํ‘œ๋‹ฌ ํ‘œ๋‹น ํ‘œ๋ด„ ํ‘œ๋น„ ํ‘œ์Šฌ ํ‘œ์—ด ํ‘œ์˜ ํ‘œ์ž ํ‘œํƒœ ํ‘œํ˜œ ํ‘œ๋‚  ํ‘œ๋Š˜ ํ‘œ๋ถ„ ํ‘œ์ƒ˜ ํ‘œ์ˆœ ํ‘œ์ธ ํ‘œ์žฅ ํ‘œ์ „ ํ‘œ์ข… ํ‘œ์ฃผ ํ‘œ์ง€ ํ‘œ์ง„ ํ‘œ์ฐฌ ํ‘œ์ฒ˜ ํ•˜๋‚˜ ํ•˜๋‚œ ํ•˜๋‹จ ํ•˜๋‹ด ํ•˜๋„ ํ•˜๋ชจ ํ•˜๋ฏธ ํ•˜๋ฏผ ํ•˜์‚ฐ ํ•˜์ƒ ํ•˜์ƒˆ ํ•˜์ƒ ํ•˜์„œ ํ•˜์„  ํ•˜์„ค ํ•˜์„ฌ ํ•˜์„ฑ ํ•˜์†Œ ํ•˜์†” ํ•˜์†œ ํ•˜์†ก ํ•˜์‹œ ํ•˜์•ˆ ํ•˜์•  ํ•˜์—ฐ ํ•˜์˜ˆ ํ•˜์˜จ ํ•˜์š” ํ•˜์›” ํ•˜์œ  ํ•˜์œค ํ•˜์œจ ํ•˜์€ ํ•˜์ž„ ํ•˜์ • ํ•˜์ฐฝ ํ•˜์ฒœ ํ•˜์ฒจ ํ•˜์ดˆ ํ•˜์ด ํ•˜ํ‘œ ํ•˜ํ•œ ํ•˜ํ•ด ํ•˜ํ˜„ ํ•˜ํ˜ผ ํ•˜ํ™ ํ•˜ํ™” ํ•˜ํšจ ํ•˜๋‚จ ํ•˜๋ˆˆ ํ•˜๋‹ฌ ํ•˜๋‹น ํ•˜๋ด„ ํ•˜๋น„ ํ•˜์Šฌ ํ•˜์—ด ํ•˜์˜ ํ•˜ํƒœ ํ•˜ํ˜œ ํ•˜๋‚  ํ•˜๋Š˜ ํ•˜๋ถ„ ํ•˜์ƒ˜ ํ•˜์ˆœ ํ•˜์ธ ํ•˜์žฅ ํ•˜์ „ ํ•˜์ข… ํ•˜์ฃผ ํ•˜์ง€ ํ•˜์ง„ ํ•˜์ฐฌ ํ•˜์ฒ˜ ํ•œ๋‚˜ ํ•œ๋‚œ ํ•œ๋‚ด ํ•œ๋‹จ ํ•œ๋‹ด ํ•œ๋„ ํ•œ๋ผ ํ•œ๋ž˜ ํ•œ๋ฆฌ ํ•œ๋ชจ ํ•œ๋ฌด ํ•œ๋ฏธ ํ•œ๋ฏผ ํ•œ์‚ฌ ํ•œ์‚ฐ ํ•œ์ƒ ํ•œ์ƒˆ ํ•œ์ƒ ํ•œ์„œ ํ•œ์„  ํ•œ์„ค ํ•œ์„ฌ ํ•œ์„ฑ ํ•œ์†Œ ํ•œ์†” ํ•œ์†œ ํ•œ์†ก ํ•œ์ˆ˜ ํ•œ์‹œ ํ•œ์‹  ํ•œ์‹ค ํ•œ์•„ ํ•œ์•  ํ•œ์–‘ ํ•œ์—ฐ ํ•œ์˜ˆ ํ•œ์˜จ ํ•œ์š” ํ•œ์›” ํ•œ์œ  ํ•œ์œค ํ•œ์œจ ํ•œ์€ ํ•œ์ผ ํ•œ์ž„ ํ•œ์ฐจ ํ•œ์ฑ„ ํ•œ์ฒœ ํ•œ์ฒจ ํ•œ์ฒญ ํ•œ์ดˆ ํ•œ์ด ํ•œํ‘œ ํ•œํ•˜ ํ•œํ•ด ํ•œํ–ฅ ํ•œํ˜„ ํ•œํ˜ผ ํ•œํ™” ํ•œํšจ ํ•œ๋ˆˆ ํ•œ๋‹ฌ ํ•œ๋ด„ ํ•œ๋น„ ํ•œ์Šฌ ํ•œ์—ด ํ•œ์˜ ํ•œ์ž ํ•œํƒœ ํ•œํ˜œ ํ•œ๋‚  ํ•œ๋Š˜ ํ•œ๋ถ„ ํ•œ์ƒ˜ ํ•œ์ˆœ ํ•œ์ธ ํ•œ์žฅ ํ•œ์ „ ํ•œ์ข… ํ•œ์ฃผ ํ•œ์ง€ ํ•œ์ง„ ํ•œ์ฐฌ ํ•œ์ฒ˜ ํ•ด๋‚˜ ํ•ด๋‚œ ํ•ด๋‹ค ํ•ด๋‹จ ํ•ด๋‹ด ํ•ด๋ž˜ ํ•ด๋ฅ˜ ํ•ด๋ฆฌ ํ•ด๋ชจ ํ•ด๋ฌด ํ•ด๋ฏธ ํ•ด๋ฏผ ํ•ด์ƒ ํ•ด์ƒ ํ•ด์„ฌ ํ•ด์„ฑ ํ•ด์†” ํ•ด์†œ ํ•ด์†ก ํ•ด์ˆ˜ ํ•ด์‹œ ํ•ด์‹ค ํ•ด์‹ฌ ํ•ด์•ˆ ํ•ด์–‘ ํ•ด์—ฐ ํ•ด์˜จ ํ•ด์šฐ ํ•ด์›” ํ•ด์œค ํ•ด์œจ ํ•ด์€ ํ•ด์ผ ํ•ด์ • ํ•ด์ฐจ ํ•ด์ฐฝ ํ•ด์ฒœ ํ•ด์ฒจ ํ•ด์ฒญ ํ•ด์ดˆ ํ•ด์ด ํ•ดํ‘œ ํ•ดํ•œ ํ•ดํ–ฅ ํ•ดํ˜„ ํ•ดํ˜ผ ํ•ดํ™ ํ•ดํ™” ํ•ดํšจ ํ•ด๋‚จ ํ•ด๋ˆˆ ํ•ด๋‹ฌ ํ•ด๋‹น ํ•ด์Šฌ ํ•ด์—ด ํ•ด์ž ํ•ด๋‚  ํ•ด๋Š˜ ํ•ด๋ถ„ ํ•ด์ƒ˜ ํ•ด์ˆœ ํ•ด์ธ ํ•ด์žฅ ํ•ด์ „ ํ•ด์ข… ํ•ด์ฃผ ํ•ด์ง€ ํ•ด์ง„ ํ•ด์ฐฌ ํ•ด์ฒ˜ ํ–ฅ๋‚˜ ํ–ฅ๋‚œ ํ–ฅ๋‹ค ํ–ฅ๋‹จ ํ–ฅ๋‹ด ํ–ฅ๋„ ํ–ฅ๋ผ ํ–ฅ๋ž˜ ํ–ฅ๋ฅ˜ ํ–ฅ๋ฆฌ ํ–ฅ๋ชจ ํ–ฅ๋ฌด ํ–ฅ๋ฏธ ํ–ฅ๋ฏผ ํ–ฅ์‚ฌ ํ–ฅ์‚ฐ ํ–ฅ์ƒ ํ–ฅ์ƒˆ ํ–ฅ์ƒ ํ–ฅ์„œ ํ–ฅ์„  ํ–ฅ์„ค ํ–ฅ์„ฌ ํ–ฅ์„ฑ ํ–ฅ์†Œ ํ–ฅ์†” ํ–ฅ์†œ ํ–ฅ์†ก ํ–ฅ์ˆ˜ ํ–ฅ์‹œ ํ–ฅ์‹  ํ–ฅ์‹ค ํ–ฅ์‹ฌ ํ–ฅ์•„ ํ–ฅ์•ˆ ํ–ฅ์•  ํ–ฅ์–‘ ํ–ฅ์—ฌ ํ–ฅ์—ฐ ํ–ฅ์˜ˆ ํ–ฅ์˜ค ํ–ฅ์˜จ ํ–ฅ์š” ํ–ฅ์šฐ ํ–ฅ์›” ํ–ฅ์œ  ํ–ฅ์œค ํ–ฅ์œจ ํ–ฅ์€ ํ–ฅ์ด ํ–ฅ์ผ ํ–ฅ์ž„ ํ–ฅ์ • ํ–ฅ์ฐจ ํ–ฅ์ฐฝ ํ–ฅ์ฑ„ ํ–ฅ์ฒœ ํ–ฅ์ฒจ ํ–ฅ์ฒญ ํ–ฅ์ดˆ ํ–ฅ์ด ํ–ฅํ‘œ ํ–ฅํ•˜ ํ–ฅํ•œ ํ–ฅํ•ด ํ–ฅํ˜„ ํ–ฅํ˜ผ ํ–ฅํ™ ํ–ฅํ™” ํ–ฅํšจ ํ–ฅ๋‚จ ํ–ฅ๋ˆˆ ํ–ฅ๋‹ฌ ํ–ฅ๋‹น ํ–ฅ๋ด„ ํ–ฅ๋น„ ํ–ฅ์Šฌ ํ–ฅ์—ด ํ–ฅ์˜ ํ–ฅ์ž ํ–ฅํƒœ ํ–ฅํ˜œ ํ–ฅ๋‚  ํ–ฅ๋Š˜ ํ–ฅ๋ถ„ ํ–ฅ์ƒ˜ ํ–ฅ์ˆœ ํ–ฅ์ธ ํ–ฅ์žฅ ํ–ฅ์ „ ํ–ฅ์ข… ํ–ฅ์ฃผ ํ–ฅ์ง€ ํ–ฅ์ง„ ํ–ฅ์ฐฌ ํ–ฅ์ฒ˜ ํ˜„๋‚˜ ํ˜„๋‹ค ํ˜„๋‹จ ํ˜„๋‹ด ํ˜„๋„ ํ˜„๋ผ ํ˜„๋ž˜ ํ˜„๋ฅ˜ ํ˜„๋ฆฌ ํ˜„๋ชจ ํ˜„๋ฌด ํ˜„๋ฏธ ํ˜„๋ฏผ ํ˜„์‚ฌ ํ˜„์‚ฐ ํ˜„์„œ ํ˜„์„  ํ˜„์„ค ํ˜„์„ฌ ํ˜„์„ฑ ํ˜„์†Œ ํ˜„์†” ํ˜„์†œ ํ˜„์†ก ํ˜„์ˆ˜ ํ˜„์‹œ ํ˜„์‹  ํ˜„์‹ค ํ˜„์‹ฌ ํ˜„์•„ ํ˜„์•ˆ ํ˜„์•  ํ˜„์–‘ ํ˜„์—ฌ ํ˜„์—ฐ ํ˜„์˜ˆ ํ˜„์˜ค ํ˜„์˜จ ํ˜„์š” ํ˜„์šฐ ํ˜„์›” ํ˜„์œ  ํ˜„์œค ํ˜„์œจ ํ˜„์€ ํ˜„์ด ํ˜„์ผ ํ˜„์ž„ ํ˜„์ • ํ˜„์ฐจ ํ˜„์ฐฝ ํ˜„์ฑ„ ํ˜„์ฒœ ํ˜„์ฒจ ํ˜„์ฒญ ํ˜„์ดˆ ํ˜„์ด ํ˜„ํ‘œ ํ˜„ํ•˜ ํ˜„ํ•œ ํ˜„ํ•ด ํ˜„ํ–ฅ ํ˜„ํ˜ผ ํ˜„ํ™” ํ˜„ํšจ ํ˜„๋‚จ ํ˜„๋ˆˆ ํ˜„๋‹ฌ ํ˜„๋ด„ ํ˜„๋น„ ํ˜„์Šฌ ํ˜„์—ด ํ˜„์˜ ํ˜„์ž ํ˜„ํƒœ ํ˜„ํ˜œ ํ˜„๋‚  ํ˜„๋Š˜ ํ˜„๋ถ„ ํ˜„์ƒ˜ ํ˜„์ˆœ ํ˜„์ธ ํ˜„์žฅ ํ˜„์ „ ํ˜„์ข… ํ˜„์ฃผ ํ˜„์ง€ ํ˜„์ง„ ํ˜„์ฐฌ ํ˜„์ฒ˜ ํ˜ผ๋‹ค ํ˜ผ๋‹จ ํ˜ผ๋„ ํ˜ผ๋ผ ํ˜ผ๋ž˜ ํ˜ผ๋ฅ˜ ํ˜ผ๋ฆฌ ํ˜ผ๋ชจ ํ˜ผ๋ฌด ํ˜ผ๋ฏผ ํ˜ผ์‚ฌ ํ˜ผ์‚ฐ ํ˜ผ์ƒ ํ˜ผ์ƒˆ ํ˜ผ์ƒ ํ˜ผ์„œ ํ˜ผ์„  ํ˜ผ์„ค ํ˜ผ์„ฌ ํ˜ผ์†Œ ํ˜ผ์†” ํ˜ผ์†œ ํ˜ผ์†ก ํ˜ผ์ˆ˜ ํ˜ผ์‹œ ํ˜ผ์‹ค ํ˜ผ์•„ ํ˜ผ์•ˆ ํ˜ผ์•  ํ˜ผ์–‘ ํ˜ผ์—ฐ ํ˜ผ์˜ˆ ํ˜ผ์˜ค ํ˜ผ์˜จ ํ˜ผ์š” ํ˜ผ์šฐ ํ˜ผ์›” ํ˜ผ์œ  ํ˜ผ์œค ํ˜ผ์œจ ํ˜ผ์€ ํ˜ผ์ผ ํ˜ผ์ž„ ํ˜ผ์ • ํ˜ผ์ฐจ ํ˜ผ์ฐฝ ํ˜ผ์ฑ„ ํ˜ผ์ฒœ ํ˜ผ์ฒจ ํ˜ผ์ฒญ ํ˜ผ์ดˆ ํ˜ผ์ด ํ˜ผํ‘œ ํ˜ผํ•˜ ํ˜ผํ•œ ํ˜ผํ•ด ํ˜ผํ–ฅ ํ˜ผํ˜„ ํ˜ผํ™ ํ˜ผํ™” ํ˜ผํšจ ํ˜ผ๋ˆˆ ํ˜ผ๋‹ฌ ํ˜ผ๋‹น ํ˜ผ๋ด„ ํ˜ผ๋น„ ํ˜ผ์Šฌ ํ˜ผ์—ด ํ˜ผ์˜ ํ˜ผํƒœ ํ˜ผํ˜œ ํ˜ผ๋‚  ํ˜ผ๋Š˜ ํ˜ผ๋ถ„ ํ˜ผ์ƒ˜ ํ˜ผ์ˆœ ํ˜ผ์ธ ํ˜ผ์žฅ ํ˜ผ์ „ ํ˜ผ์ข… ํ˜ผ์ฃผ ํ˜ผ์ง€ ํ˜ผ์ง„ ํ˜ผ์ฐฌ ํ˜ผ์ฒ˜ ํ™๋‚œ ํ™๋‚ด ํ™๋‹ค ํ™๋‹จ ํ™๋‹ด ํ™๋„ ํ™๋ผ ํ™๋ž˜ ํ™๋ฅ˜ ํ™๋ฆฌ ํ™๋ชจ ํ™๋ฌด ํ™๋ฏธ ํ™๋ฏผ ํ™์‚ฌ ํ™์‚ฐ ํ™์ƒ ํ™์ƒˆ ํ™์ƒ ํ™์„œ ํ™์„  ํ™์„ค ํ™์„ฌ ํ™์„ฑ ํ™์†Œ ํ™์†” ํ™์†œ ํ™์†ก ํ™์‹œ ํ™์‹  ํ™์‹ค ํ™์‹ฌ ํ™์•ˆ ํ™์•  ํ™์–‘ ํ™์—ฌ ํ™์—ฐ ํ™์˜ˆ ํ™์˜จ ํ™์š” ํ™์›” ํ™์œ  ํ™์œค ํ™์œจ ํ™์€ ํ™์ผ ํ™์ž„ ํ™์ • ํ™์ฐจ ํ™์ฐฝ ํ™์ฑ„ ํ™์ฒœ ํ™์ฒจ ํ™์ฒญ ํ™์ดˆ ํ™์ด ํ™ํ‘œ ํ™ํ•˜ ํ™ํ•œ ํ™ํ•ด ํ™ํ–ฅ ํ™ํ˜„ ํ™ํ˜ผ ํ™ํ™” ํ™ํšจ ํ™๋‚จ ํ™๋ˆˆ ํ™๋‹ฌ ํ™๋ด„ ํ™๋น„ ํ™์Šฌ ํ™์—ด ํ™์˜ ํ™์ž ํ™ํƒœ ํ™ํ˜œ ํ™๋‚  ํ™๋Š˜ ํ™๋ถ„ ํ™์ƒ˜ ํ™์ˆœ ํ™์ธ ํ™์žฅ ํ™์ „ ํ™์ข… ํ™์ฃผ ํ™์ง€ ํ™์ง„ ํ™์ฐฌ ํ™์ฒ˜ ํ™”๋‹จ ํ™”๋‹ด ํ™”๋„ ํ™”๋ž˜ ํ™”๋ฆฌ ํ™”๋ชจ ํ™”๋ฌด ํ™”๋ฏธ ํ™”๋ฏผ ํ™”์‚ฌ ํ™”์ƒˆ ํ™”์ƒ ํ™”์„œ ํ™”์„  ํ™”์„ค ํ™”์„ฌ ํ™”์„ฑ ํ™”์†” ํ™”์†œ ํ™”์†ก ํ™”์ˆ˜ ํ™”์‹œ ํ™”์‹ค ํ™”์•ˆ ํ™”์•  ํ™”์–‘ ํ™”์—ฌ ํ™”์—ฐ ํ™”์˜ˆ ํ™”์˜ค ํ™”์˜จ ํ™”์š” ํ™”์šฐ ํ™”์›” ํ™”์œ  ํ™”์œค ํ™”์œจ ํ™”์€ ํ™”์ด ํ™”์ผ ํ™”์ž„ ํ™”์ • ํ™”์ฐจ ํ™”์ฐฝ ํ™”์ฑ„ ํ™”์ฒœ ํ™”์ฒจ ํ™”์ฒญ ํ™”์ดˆ ํ™”์ด ํ™”ํ‘œ ํ™”ํ•ด ํ™”ํ–ฅ ํ™”ํ˜„ ํ™”ํ˜ผ ํ™”ํ™ ํ™”ํšจ ํ™”๋ˆˆ ํ™”๋‹ฌ ํ™”๋‹น ํ™”๋ด„ ํ™”๋น„ ํ™”์Šฌ ํ™”์—ด ํ™”์˜ ํ™”์ž ํ™”ํƒœ ํ™”๋‚  ํ™”๋Š˜ ํ™”๋ถ„ ํ™”์ƒ˜ ํ™”์ˆœ ํ™”์ธ ํ™”์žฅ ํ™”์ „ ํ™”์ข… ํ™”์ฃผ ํ™”์ง€ ํ™”์ง„ ํ™”์ฐฌ ํ™”์ฒ˜ ํšจ๋‹จ ํšจ๋‹ด ํšจ๋ผ ํšจ๋ž˜ ํšจ๋ฅ˜ ํšจ๋ฆฌ ํšจ๋ฌด ํšจ๋ฏธ ํšจ๋ฏผ ํšจ์‚ฌ ํšจ์‚ฐ ํšจ์ƒ ํšจ์ƒˆ ํšจ์ƒ ํšจ์„œ ํšจ์„  ํšจ์„ค ํšจ์„ฌ ํšจ์„ฑ ํšจ์†Œ ํšจ์†” ํšจ์†œ ํšจ์†ก ํšจ์ˆ˜ ํšจ์‹œ ํšจ์‹  ํšจ์‹ค ํšจ์•„ ํšจ์•ˆ ํšจ์•  ํšจ์–‘ ํšจ์—ฌ ํšจ์—ฐ ํšจ์˜ˆ ํšจ์˜จ ํšจ์›” ํšจ์œ  ํšจ์œค ํšจ์œจ ํšจ์€ ํšจ์ผ ํšจ์ž„ ํšจ์ • ํšจ์ฐจ ํšจ์ฐฝ ํšจ์ฑ„ ํšจ์ฒœ ํšจ์ฒจ ํšจ์ฒญ ํšจ์ดˆ ํšจ์ด ํšจํ‘œ ํšจํ•˜ ํšจํ•œ ํšจํ•ด ํšจํ–ฅ ํšจํ˜„ ํšจํ˜ผ ํšจํ™ ํšจํ™” ํšจ๋‚จ ํšจ๋ˆˆ ํšจ๋‹ฌ ํšจ๋ด„ ํšจ๋น„ ํšจ์Šฌ ํšจ์—ด ํšจ์˜ ํšจ์ž ํšจํƒœ ํšจํ˜œ ํšจ๋‚  ํšจ๋Š˜ ํšจ๋ถ„ ํšจ์ƒ˜ ํšจ์ˆœ ํšจ์ธ ํšจ์žฅ ํšจ์ „ ํšจ์ข… ํšจ์ฃผ ํšจ์ง€ ํšจ์ง„ ํšจ์ฐฌ ํšจ์ฒ˜ ๋‚จ๋‹จ ๋‚จ๋‹ด ๋‚จ๋„ ๋‚จ๋ž˜ ๋‚จ๋ฅ˜ ๋‚จ๋ฆฌ ๋‚จ๋ชจ ๋‚จ๋ฌด ๋‚จ๋ฏธ ๋‚จ๋ฏผ ๋‚จ์‚ฌ ๋‚จ์‚ฐ ๋‚จ์ƒ ๋‚จ์ƒˆ ๋‚จ์ƒ ๋‚จ์„œ ๋‚จ์„  ๋‚จ์„ค ๋‚จ์„ฌ ๋‚จ์†Œ ๋‚จ์†” ๋‚จ์†œ ๋‚จ์†ก ๋‚จ์ˆ˜ ๋‚จ์‹ค ๋‚จ์•ˆ ๋‚จ์•  ๋‚จ์–‘ ๋‚จ์—ฐ ๋‚จ์˜ˆ ๋‚จ์š” ๋‚จ์›” ๋‚จ์œค ๋‚จ์œจ ๋‚จ์ • ๋‚จ์ฐจ ๋‚จ์ฑ„ ๋‚จ์ฒœ ๋‚จ์ฒญ ๋‚จ์ด ๋‚จํ‘œ ๋‚จํ•œ ๋‚จํ•ด ๋‚จํ–ฅ ๋‚จํ˜„ ๋‚จํ˜ผ ๋‚จํ™ ๋‚จํ™” ๋‚จํšจ ๋‚จ๋‹น ๋‚จ๋ด„ ๋‚จ๋น„ ๋‚จ์Šฌ ๋‚จ์—ด ๋‚จ์˜ ๋‚จํƒœ ๋‚จํ˜œ ๋‚จ๋‚  ๋‚จ๋Š˜ ๋‚จ๋ถ„ ๋‚จ์ƒ˜ ๋‚จ์ˆœ ๋‚จ์ธ ๋‚จ์žฅ ๋‚จ์ „ ๋‚จ์ข… ๋‚จ์ฃผ ๋‚จ์ง€ ๋‚จ์ง„ ๋‚จ์ฐฌ ๋‚จ์ฒ˜ ๋ˆˆ๋‹ด ๋ˆˆ๋„ ๋ˆˆ๋ผ ๋ˆˆ๋ž˜ ๋ˆˆ๋ฅ˜ ๋ˆˆ๋ฆฌ ๋ˆˆ๋ชจ ๋ˆˆ๋ฌด ๋ˆˆ๋ฏธ ๋ˆˆ์‚ฌ ๋ˆˆ์‚ฐ ๋ˆˆ์ƒ ๋ˆˆ์ƒˆ ๋ˆˆ์ƒ ๋ˆˆ์„œ ๋ˆˆ์„  ๋ˆˆ์„ค ๋ˆˆ์„ฌ ๋ˆˆ์„ฑ ๋ˆˆ์†Œ ๋ˆˆ์†” ๋ˆˆ์†œ ๋ˆˆ์†ก ๋ˆˆ์ˆ˜ ๋ˆˆ์‹œ ๋ˆˆ์‹  ๋ˆˆ์‹ค ๋ˆˆ์‹ฌ ๋ˆˆ์•ˆ ๋ˆˆ์•  ๋ˆˆ์–‘ ๋ˆˆ์—ฌ ๋ˆˆ์—ฐ ๋ˆˆ์˜ˆ ๋ˆˆ์˜ค ๋ˆˆ์š” ๋ˆˆ์šฐ ๋ˆˆ์›” ๋ˆˆ์œ  ๋ˆˆ์œค ๋ˆˆ์œจ ๋ˆˆ์ด ๋ˆˆ์ผ ๋ˆˆ์ • ๋ˆˆ์ฐจ ๋ˆˆ์ฑ„ ๋ˆˆ์ฒœ ๋ˆˆ์ฒจ ๋ˆˆ์ฒญ ๋ˆˆ์ดˆ ๋ˆˆํ‘œ ๋ˆˆํ•˜ ๋ˆˆํ•œ ๋ˆˆํ•ด ๋ˆˆํ–ฅ ๋ˆˆํ˜„ ๋ˆˆํ˜ผ ๋ˆˆํ™ ๋ˆˆํ™” ๋ˆˆํšจ ๋ˆˆ๋‹ฌ ๋ˆˆ๋ด„ ๋ˆˆ๋น„ ๋ˆˆ์Šฌ ๋ˆˆ์—ด ๋ˆˆ์˜ ๋ˆˆํƒœ ๋ˆˆํ˜œ ๋ˆˆ๋‚  ๋ˆˆ๋Š˜ ๋ˆˆ๋ถ„ ๋ˆˆ์ƒ˜ ๋ˆˆ์ˆœ ๋ˆˆ์ธ ๋ˆˆ์žฅ ๋ˆˆ์ „ ๋ˆˆ์ข… ๋ˆˆ์ฃผ ๋ˆˆ์ง€ ๋ˆˆ์ง„ ๋ˆˆ์ฐฌ ๋ˆˆ์ฒ˜ ๋‹ฌ์‚ฐ ๋‹ฌ์ƒ ๋‹ฌ์ƒˆ ๋‹ฌ์ƒ ๋‹ฌ์„œ ๋‹ฌ์„  ๋‹ฌ์„ค ๋‹ฌ์„ฌ ๋‹ฌ์„ฑ ๋‹ฌ์†Œ ๋‹ฌ์†” ๋‹ฌ์†œ ๋‹ฌ์•„ ๋‹ฌ์–‘ ๋‹ฌ์—ฐ ๋‹ฌ์šฐ ๋‹ฌ์›” ๋‹ฌ์œ  ๋‹ฌ์œค ๋‹ฌ์œจ ๋‹ฌ์€ ๋‹ฌ์ด ๋‹ฌ์ผ ๋‹ฌ์ • ๋‹ฌ์ฐจ ๋‹ฌ์ฑ„ ๋‹ฌ์ฒœ ๋‹ฌ์ฒจ ๋‹ฌ์ฒญ ๋‹ฌ์ดˆ ๋‹ฌ์ด ๋‹ฌํ‘œ ๋‹ฌํ•˜ ๋‹ฌํ–ฅ ๋‹ฌํ˜„ ๋‹ฌํ™ ๋‹ฌํ™” ๋‹ฌํšจ ๋‹ฌ๋‚จ ๋‹ฌ๋ˆˆ ๋‹ฌ๋ด„ ๋‹ฌ๋น„ ๋‹ฌ์—ด ๋‹ฌ์˜ ๋‹ฌ์ž ๋‹ฌํƒœ ๋‹ฌํ˜œ ๋‹ฌ๋‚  ๋‹ฌ๋Š˜ ๋‹ฌ๋ถ„ ๋‹ฌ์ƒ˜ ๋‹ฌ์ˆœ ๋‹ฌ์ธ ๋‹ฌ์žฅ ๋‹ฌ์ „ ๋‹ฌ์ข… ๋‹ฌ์ฃผ ๋‹ฌ์ง€ ๋‹ฌ์ง„ ๋‹ฌ์ฐฌ ๋‹ฌ์ฒ˜ ๋‹น๋‚œ ๋‹น๋‹ด ๋‹น๋ผ ๋‹น๋ž˜ ๋‹น๋ฅ˜ ๋‹น๋ฆฌ ๋‹น๋ชจ ๋‹น๋ฏธ ๋‹น๋ฏผ ๋‹น์‚ฌ ๋‹น์‚ฐ ๋‹น์ƒ ๋‹น์ƒˆ ๋‹น์ƒ ๋‹น์„œ ๋‹น์„  ๋‹น์„ค ๋‹น์„ฌ ๋‹น์„ฑ ๋‹น์†Œ ๋‹น์†” ๋‹น์†œ ๋‹น์†ก ๋‹น์‹ค ๋‹น์‹ฌ ๋‹น์•„ ๋‹น์•ˆ ๋‹น์•  ๋‹น์–‘ ๋‹น์—ฌ ๋‹น์˜ˆ ๋‹น์˜ค ๋‹น์˜จ ๋‹น์š” ๋‹น์šฐ ๋‹น์›” ๋‹น์œค ๋‹น์œจ ๋‹น์€ ๋‹น์ด ๋‹น์ผ ๋‹น์ž„ ๋‹น์ • ๋‹น์ฐฝ ๋‹น์ฑ„ ๋‹น์ฒœ ๋‹น์ฒญ ๋‹น์ดˆ ๋‹น์ด ๋‹นํ‘œ ๋‹นํ–ฅ ๋‹นํ˜„ ๋‹นํ˜ผ ๋‹นํ™ ๋‹นํ™” ๋‹นํšจ ๋‹น๋ˆˆ ๋‹น๋‹ฌ ๋‹น๋ด„ ๋‹น๋น„ ๋‹น์—ด ๋‹น์˜ ๋‹น๋‚  ๋‹น๋Š˜ ๋‹น๋ถ„ ๋‹น์ƒ˜ ๋‹น์ˆœ ๋‹น์ธ ๋‹น์žฅ ๋‹น์ „ ๋‹น์ข… ๋‹น์ฃผ ๋‹น์ง€ ๋‹น์ง„ ๋‹น์ฐฌ ๋‹น์ฒ˜ ๋ด„๋‚˜ ๋ด„๋‚œ ๋ด„๋‚ด ๋ด„๋‹ค ๋ด„๋‹จ ๋ด„๋‹ด ๋ด„๋„ ๋ด„๋ผ ๋ด„๋ž˜ ๋ด„๋ฅ˜ ๋ด„๋ฆฌ ๋ด„๋ฌด ๋ด„๋ฏธ ๋ด„๋ฏผ ๋ด„์‚ฌ ๋ด„์‚ฐ ๋ด„์ƒ ๋ด„์ƒˆ ๋ด„์ƒ ๋ด„์„œ ๋ด„์„  ๋ด„์„ค ๋ด„์„ฌ ๋ด„์„ฑ ๋ด„์†Œ ๋ด„์†” ๋ด„์†œ ๋ด„์†ก ๋ด„์ˆ˜ ๋ด„์‹œ ๋ด„์‹  ๋ด„์‹ค ๋ด„์‹ฌ ๋ด„์•„ ๋ด„์•ˆ ๋ด„์•  ๋ด„์–‘ ๋ด„์—ฌ ๋ด„์—ฐ ๋ด„์˜ˆ ๋ด„์˜จ ๋ด„์š” ๋ด„์šฐ ๋ด„์›” ๋ด„์œ  ๋ด„์œค ๋ด„์œจ ๋ด„์€ ๋ด„์ด ๋ด„์ผ ๋ด„์ž„ ๋ด„์ • ๋ด„์ฐจ ๋ด„์ฐฝ ๋ด„์ฑ„ ๋ด„์ฒœ ๋ด„์ฒญ ๋ด„์ดˆ ๋ด„์ด ๋ด„ํ‘œ ๋ด„ํ•˜ ๋ด„ํ•œ ๋ด„ํ•ด ๋ด„ํ–ฅ ๋ด„ํ˜„ ๋ด„ํ˜ผ ๋ด„ํ™ ๋ด„ํ™” ๋ด„ํšจ ๋ด„๋‚จ ๋ด„๋ˆˆ ๋ด„๋‹ฌ ๋ด„๋น„ ๋ด„์Šฌ ๋ด„์—ด ๋ด„์˜ ๋ด„์ž ๋ด„ํƒœ ๋ด„ํ˜œ ๋ด„๋‚  ๋ด„๋Š˜ ๋ด„๋ถ„ ๋ด„์ƒ˜ ๋ด„์ˆœ ๋ด„์ธ ๋ด„์žฅ ๋ด„์ „ ๋ด„์ข… ๋ด„์ฃผ ๋ด„์ง€ ๋ด„์ง„ ๋ด„์ฐฌ ๋ด„์ฒ˜ ๋น„๋‚˜ ๋น„๋‹จ ๋น„๋‹ด ๋น„๋ชจ ๋น„์„  ๋น„์„ค ๋น„์„ฑ ๋น„์†Œ ๋น„์†” ๋น„์†œ ๋น„์–‘ ๋น„์—ฐ ๋น„์›” ๋น„์œค ๋น„์€ ๋น„ํ–ฅ ๋น„ํ˜„ ๋น„ํ™” ๋น„๋ˆˆ ๋น„๋ด„ ๋น„๋‚  ๋น„๋Š˜ ๋น„๋ถ„ ๋น„์ƒ˜ ๋น„์ˆœ ๋น„์ธ ๋น„์žฅ ๋น„์ „ ๋น„์ข… ๋น„์ฃผ ๋น„์ง€ ๋น„์ง„ ๋น„์ฐฌ ๋น„์ฒ˜ ์Šฌ์œค ์Šฌ์œจ ์Šฌํ–ฅ ์Šฌํ˜„ ์Šฌํ™” ์Šฌํšจ ์Šฌ๋น„ ์Šฌ๋‚  ์Šฌ๋Š˜ ์Šฌ๋ถ„ ์Šฌ์ƒ˜ ์Šฌ์ˆœ ์Šฌ์ธ ์Šฌ์žฅ ์Šฌ์ „ ์Šฌ์ข… ์Šฌ์ฃผ ์Šฌ์ง€ ์Šฌ์ง„ ์Šฌ์ฐฌ ์Šฌ์ฒ˜ ์—ด์ƒ ์—ด์„  ์—ด์„ค ์—ด์„ฑ ์—ด์†” ์—ด์†œ ์—ด์ • ์—ด์ฒญ ์—ด์ดˆ ์—ด์ด ์—ดํ–ฅ ์—ด๋ˆˆ ์—ด๋‹ฌ ์—ด๋ด„ ์—ด๋‚  ์—ด๋Š˜ ์—ด๋ถ„ ์—ด์ƒ˜ ์—ด์ˆœ ์—ด์ธ ์—ด์žฅ ์—ด์ „ ์—ด์ข… ์—ด์ฃผ ์—ด์ง€ ์—ด์ง„ ์—ด์ฐฌ ์—ด์ฒ˜ ์˜๋‹จ ์˜๋‹ด ์˜๋„ ์˜๋ž˜ ์˜๋ฅ˜ ์˜๋ชจ ์˜๋ฏธ ์˜์‚ฌ ์˜์‚ฐ ์˜์„œ ์˜์„  ์˜์„ค ์˜์†Œ ์˜์†” ์˜์†œ ์˜์†ก ์˜์‹  ์˜์‹ค ์˜์‹ฌ ์˜์•ˆ ์˜์•  ์˜์–‘ ์˜์—ฐ ์˜์˜ˆ ์˜์˜ค ์˜์š” ์˜์šฐ ์˜์›” ์˜์œ  ์˜์œค ์˜์œจ ์˜์€ ์˜์ด ์˜์ผ ์˜์ž„ ์˜์ฑ„ ์˜์ฒœ ์˜์ฒจ ์˜์ฒญ ์˜์ดˆ ์˜์ด ์˜ํ‘œ ์˜ํ•˜ ์˜ํ•œ ์˜ํ•ด ์˜ํ˜„ ์˜ํ™ ์˜ํšจ ์˜๋ด„ ์˜๋น„ ์˜ํ˜œ ์˜๋‚  ์˜๋Š˜ ์˜๋ถ„ ์˜์ƒ˜ ์˜์ˆœ ์˜์ธ ์˜์žฅ ์˜์ „ ์˜์ข… ์˜์ฃผ ์˜์ง€ ์˜์ง„ ์˜์ฐฌ ์˜์ฒ˜ ์ž์ƒ ์ž์„  ์ž์†” ์ž์—ฐ ์ž์›” ์ž์œ  ์ž์œค ์ž์œจ ์ž์€ ์ž์ด ์ž์ผ ์ž์ • ์žํ˜„ ์žํ™ ์ž์˜ ์ž๋‚  ์ž๋Š˜ ์ž๋ถ„ ์ž์ƒ˜ ์ž์ˆœ ์ž์ธ ์ž์žฅ ์ž์ „ ์ž์ข… ์ž์ฃผ ์ž์ง€ ์ž์ง„ ์ž์ฐฌ ์ž์ฒ˜ ํƒœ์„  ํƒœ์„ค ํƒœ์—ฐ ํƒœ์œค ํƒœ์œจ ํƒœ์€ ํƒœ์ • ํƒœํ˜„ ํƒœํ™” ํƒœ๋‚  ํƒœ๋Š˜ ํƒœ๋ถ„ ํƒœ์ƒ˜ ํƒœ์ˆœ ํƒœ์ธ ํƒœ์žฅ ํƒœ์ „ ํƒœ์ข… ํƒœ์ฃผ ํƒœ์ง€ ํƒœ์ง„ ํƒœ์ฐฌ ํƒœ์ฒ˜ ํ˜œ๋‹ด ํ˜œ๋„ ํ˜œ๋ฅ˜ ํ˜œ๋ฆฌ ํ˜œ๋ชจ ํ˜œ๋ฌด ํ˜œ๋ฏธ ํ˜œ๋ฏผ ํ˜œ์‚ฌ ํ˜œ์‚ฐ ํ˜œ์ƒ ํ˜œ์ƒˆ ํ˜œ์ƒ ํ˜œ์„œ ํ˜œ์„  ํ˜œ์„ค ํ˜œ์„ฌ ํ˜œ์„ฑ ํ˜œ์†Œ ํ˜œ์†” ํ˜œ์†œ ํ˜œ์†ก ํ˜œ์ˆ˜ ํ˜œ์‹œ ํ˜œ์‹  ํ˜œ์‹ค ํ˜œ์‹ฌ ํ˜œ์•„ ํ˜œ์–‘ ํ˜œ์—ฐ ํ˜œ์šฐ ํ˜œ์›” ํ˜œ์œค ํ˜œ์œจ ํ˜œ์€ ํ˜œ์ผ ํ˜œ์ž„ ํ˜œ์ • ํ˜œ์ฐจ ํ˜œ์ฐฝ ํ˜œ์ฒœ ํ˜œ์ฒจ ํ˜œ์ฒญ ํ˜œ์ดˆ ํ˜œ์ด ํ˜œํ‘œ ํ˜œํ•œ ํ˜œํ–ฅ ํ˜œํ˜„ ํ˜œํ˜ผ ํ˜œํ™” ํ˜œ๋‚จ ํ˜œ๋ˆˆ ํ˜œ๋‹ฌ ํ˜œ์Šฌ ํ˜œ์—ด ํ˜œ๋‚  ํ˜œ๋Š˜ ํ˜œ๋ถ„ ํ˜œ์ƒ˜ ํ˜œ์ˆœ ํ˜œ์ธ ํ˜œ์ „ ํ˜œ์ข… ํ˜œ์ฃผ ํ˜œ์ง€ ํ˜œ์ง„ ํ˜œ์ฐฌ ํ˜œ์ฒ˜ ๋‚ ๋‚œ ๋‚ ๋‚ด ๋‚ ๋‹จ ๋‚ ๋‹ด ๋‚ ๋ž˜ ๋‚ ๋ฅ˜ ๋‚ ๋ฆฌ ๋‚ ๋ชจ ๋‚ ๋ฌด ๋‚ ๋ฏธ ๋‚ ๋ฏผ ๋‚ ์‚ฌ ๋‚ ์‚ฐ ๋‚ ์ƒ ๋‚ ์ƒˆ ๋‚ ์ƒ ๋‚ ์„œ ๋‚ ์„ค ๋‚ ์„ฌ ๋‚ ์„ฑ ๋‚ ์†Œ ๋‚ ์†” ๋‚ ์†œ ๋‚ ์†ก ๋‚ ์ˆ˜ ๋‚ ์‹ค ๋‚ ์‹ฌ ๋‚ ์•  ๋‚ ์–‘ ๋‚ ์—ฌ ๋‚ ์—ฐ ๋‚ ์˜ˆ ๋‚ ์˜ค ๋‚ ์˜จ ๋‚ ์šฐ ๋‚ ์›” ๋‚ ์œค ๋‚ ์œจ ๋‚ ์€ ๋‚ ์ผ ๋‚ ์ • ๋‚ ์ฐจ ๋‚ ์ฐฝ ๋‚ ์ฑ„ ๋‚ ์ฒœ ๋‚ ์ฒจ ๋‚ ์ฒญ ๋‚ ์ดˆ ๋‚ ์ด ๋‚ ํ‘œ ๋‚ ํ•˜ ๋‚ ํ•œ ๋‚ ํ–ฅ ๋‚ ํ˜„ ๋‚ ํ˜ผ ๋‚ ํ™ ๋‚ ํ™” ๋‚ ํšจ ๋‚ ๋ˆˆ ๋‚ ๋‹ฌ ๋‚ ๋ด„ ๋‚ ๋น„ ๋‚ ์Šฌ ๋‚ ์—ด ๋‚ ์˜ ๋‚ ํ˜œ ๋‚ ๋ถ„ ๋‚ ์ƒ˜ ๋‚ ์ˆœ ๋‚ ์ธ ๋‚ ์žฅ ๋‚ ์ „ ๋‚ ์ข… ๋‚ ์ฃผ ๋‚ ์ง€ ๋‚ ์ง„ ๋‚ ์ฐฌ ๋Š˜๋‚˜ ๋Š˜๋‚œ ๋Š˜๋‹จ ๋Š˜๋‹ด ๋Š˜๋„ ๋Š˜๋ฅ˜ ๋Š˜๋ชจ ๋Š˜๋ฌด ๋Š˜๋ฏธ ๋Š˜๋ฏผ ๋Š˜์‚ฌ ๋Š˜์‚ฐ ๋Š˜์ƒˆ ๋Š˜์ƒ ๋Š˜์„œ ๋Š˜์„  ๋Š˜์„ค ๋Š˜์„ฌ ๋Š˜์„ฑ ๋Š˜์†Œ ๋Š˜์†” ๋Š˜์†œ ๋Š˜์†ก ๋Š˜์ˆ˜ ๋Š˜์‹œ ๋Š˜์‹ค ๋Š˜์‹ฌ ๋Š˜์•  ๋Š˜์—ฐ ๋Š˜์˜ˆ ๋Š˜์˜ค ๋Š˜์šฐ ๋Š˜์›” ๋Š˜์œค ๋Š˜์€ ๋Š˜์ผ ๋Š˜์ • ๋Š˜์ฐจ ๋Š˜์ฐฝ ๋Š˜์ฑ„ ๋Š˜์ฒœ ๋Š˜์ฒจ ๋Š˜์ฒญ ๋Š˜์ดˆ ๋Š˜์ด ๋Š˜ํ‘œ ๋Š˜ํ•˜ ๋Š˜ํ•œ ๋Š˜ํ–ฅ ๋Š˜ํ˜„ ๋Š˜ํ˜ผ ๋Š˜ํ™ ๋Š˜ํšจ ๋Š˜๋ˆˆ ๋Š˜๋‹ฌ ๋Š˜๋‹น ๋Š˜๋ด„ ๋Š˜๋น„ ๋Š˜์Šฌ ๋Š˜์—ด ๋Š˜์˜ ๋Š˜์ž ๋Š˜ํƒœ ๋Š˜ํ˜œ ๋Š˜๋‚  ๋Š˜๋ถ„ ๋Š˜์ƒ˜ ๋Š˜์ˆœ ๋Š˜์ธ ๋Š˜์žฅ ๋Š˜์ „ ๋Š˜์ข… ๋Š˜์ฃผ ๋Š˜์ง€ ๋Š˜์ง„ ๋Š˜์ฐฌ ๋ถ„๋‚œ ๋ถ„๋ฏธ ๋ถ„๋‚  ๋ถ„๋Š˜ ์ƒ˜๋‚ด ์ƒ˜๋‹ค ์ƒ˜๋‹จ ์ƒ˜๋‹ด ์ƒ˜๋„ ์ƒ˜๋ผ ์ƒ˜๋ž˜ ์ƒ˜๋ฅ˜ ์ƒ˜๋ฆฌ ์ƒ˜๋ชจ ์ƒ˜๋ฌด ์ƒ˜๋ฏธ ์ƒ˜์†Œ ์ƒ˜์†” ์ƒ˜์†œ ์ƒ˜์‹œ ์ƒ˜์‹  ์ƒ˜์‹ค ์ƒ˜์•„ ์ƒ˜์•ˆ ์ƒ˜์•  ์ƒ˜์–‘ ์ƒ˜์—ฌ ์ƒ˜์—ฐ ์ƒ˜์˜ˆ ์ƒ˜์˜ค ์ƒ˜์˜จ ์ƒ˜์š” ์ƒ˜์šฐ ์ƒ˜์›” ์ƒ˜์œ  ์ƒ˜์œค ์ƒ˜์œจ ์ƒ˜์€ ์ƒ˜์ž„ ์ƒ˜์ • ์ƒ˜์ฐจ ์ƒ˜์ฐฝ ์ƒ˜์ฑ„ ์ƒ˜์ฒœ ์ƒ˜์ฒจ ์ƒ˜์ฒญ ์ƒ˜์ดˆ ์ƒ˜์ด ์ƒ˜ํ‘œ ์ƒ˜ํ•˜ ์ƒ˜ํ•œ ์ƒ˜ํ–ฅ ์ƒ˜ํ˜„ ์ƒ˜ํ˜ผ ์ƒ˜ํ™ ์ƒ˜ํ™” ์ƒ˜ํšจ ์ƒ˜๋ˆˆ ์ƒ˜๋‹ฌ ์ƒ˜๋‹น ์ƒ˜๋ด„ ์ƒ˜๋น„ ์ƒ˜์Šฌ ์ƒ˜์—ด ์ƒ˜์˜ ์ƒ˜์ž ์ƒ˜ํƒœ ์ƒ˜ํ˜œ ์ƒ˜๋Š˜ ์ƒ˜๋ถ„ ์ƒ˜์ˆœ ์ƒ˜์ธ ์ƒ˜์ „ ์ƒ˜์ข… ์ƒ˜์ฃผ ์ƒ˜์ง€ ์ƒ˜์ง„ ์ƒ˜์ฐฌ ์ƒ˜์ฒ˜ ์ˆœ๋‚˜ ์ˆœ๋‹ค ์ˆœ๋‹จ ์ˆœ๋‹ด ์ˆœ๋„ ์ˆœ๋ฅ˜ ์ˆœ๋ฆฌ ์ˆœ๋ชจ ์ˆœ๋ฌด ์ˆœ๋ฏธ ์ˆœ๋ฏผ ์ˆœ์‚ฌ ์ˆœ์ƒˆ ์ˆœ์ƒ ์ˆœ์„œ ์ˆœ์„  ์ˆœ์„ค ์ˆœ์„ฌ ์ˆœ์„ฑ ์ˆœ์†Œ ์ˆœ์†” ์ˆœ์†œ ์ˆœ์†ก ์ˆœ์ˆ˜ ์ˆœ์‹œ ์ˆœ์‹  ์ˆœ์‹ฌ ์ˆœ์•„ ์ˆœ์•ˆ ์ˆœ์•  ์ˆœ์–‘ ์ˆœ์—ฌ ์ˆœ์—ฐ ์ˆœ์˜ˆ ์ˆœ์˜ค ์ˆœ์˜จ ์ˆœ์š” ์ˆœ์šฐ ์ˆœ์›” ์ˆœ์œ  ์ˆœ์œค ์ˆœ์œจ ์ˆœ์€ ์ˆœ์ด ์ˆœ์ผ ์ˆœ์ž„ ์ˆœ์ฐจ ์ˆœ์ฐฝ ์ˆœ์ฑ„ ์ˆœ์ฒœ ์ˆœ์ฒจ ์ˆœ์ฒญ ์ˆœ์ดˆ ์ˆœ์ด ์ˆœํ‘œ ์ˆœํ•˜ ์ˆœํ•œ ์ˆœํ–ฅ ์ˆœํ˜„ ์ˆœํ˜ผ ์ˆœํ™ ์ˆœํ™” ์ˆœํšจ ์ˆœ๋‚จ ์ˆœ๋ˆˆ ์ˆœ๋‹ฌ ์ˆœ๋‹น ์ˆœ๋ด„ ์ˆœ๋น„ ์ˆœ์Šฌ ์ˆœ์—ด ์ˆœ์˜ ์ˆœ์ž ์ˆœํ˜œ ์ˆœ๋‚  ์ˆœ๋Š˜ ์ˆœ์ƒ˜ ์ˆœ์ธ ์ˆœ์ „ ์ˆœ์ฃผ ์ˆœ์ง€ ์ˆœ์ฐฌ ์ˆœ์ฒ˜ ์ธ๋‚ด ์ธ๋‹ค ์ธ๋‹จ ์ธ๋‹ด ์ธ๋„ ์ธ๋ผ ์ธ๋ž˜ ์ธ๋ฆฌ ์ธ๋ชจ ์ธ๋ฌด ์ธ๋ฏธ ์ธ์‚ฌ ์ธ์‚ฐ ์ธ์ƒˆ ์ธ์„œ ์ธ์„  ์ธ์„ค ์ธ์„ฌ ์ธ์†Œ ์ธ์†” ์ธ์†œ ์ธ์†ก ์ธ์ˆ˜ ์ธ์‹œ ์ธ์‹ค ์ธ์‹ฌ ์ธ์•  ์ธ์–‘ ์ธ์—ฌ ์ธ์—ฐ ์ธ์˜ˆ ์ธ์˜จ ์ธ์š” ์ธ์›” ์ธ์œ  ์ธ์œค ์ธ์œจ ์ธ์€ ์ธ์ผ ์ธ์ž„ ์ธ์ฐจ ์ธ์ฐฝ ์ธ์ฑ„ ์ธ์ฒจ ์ธ์ฒญ ์ธ์ดˆ ์ธ์ด ์ธํ‘œ ์ธํ•˜ ์ธํ–ฅ ์ธํ˜„ ์ธํ˜ผ ์ธํ™ ์ธํšจ ์ธ๋‚จ ์ธ๋ˆˆ ์ธ๋‹ฌ ์ธ๋‹น ์ธ๋ด„ ์ธ๋น„ ์ธ์Šฌ ์ธ์—ด ์ธ์˜ ์ธ์ž ์ธํƒœ ์ธํ˜œ ์ธ๋‚  ์ธ๋Š˜ ์ธ์ˆœ ์ธ์žฅ ์ธ์ „ ์ธ์ฃผ ์ธ์ง€ ์ธ์ง„ ์ธ์ฐฌ ์ธ์ฒ˜ ์žฅ๋‚˜ ์žฅ๋‚ด ์žฅ๋‹ค ์žฅ๋‹จ ์žฅ๋‹ด ์žฅ๋„ ์žฅ๋ผ ์žฅ๋ž˜ ์žฅ๋ฅ˜ ์žฅ๋ฆฌ ์žฅ๋ฌด ์žฅ๋ฏธ ์žฅ๋ฏผ ์žฅ์‚ฐ ์žฅ์ƒ ์žฅ์ƒˆ ์žฅ์„œ ์žฅ์„  ์žฅ์„ค ์žฅ์„ฌ ์žฅ์„ฑ ์žฅ์†” ์žฅ์†œ ์žฅ์†ก ์žฅ์‹œ ์žฅ์‹  ์žฅ์‹ฌ ์žฅ์•„ ์žฅ์•ˆ ์žฅ์–‘ ์žฅ์—ฌ ์žฅ์—ฐ ์žฅ์˜ค ์žฅ์˜จ ์žฅ์š” ์žฅ์šฐ ์žฅ์›” ์žฅ์œ  ์žฅ์œค ์žฅ์œจ ์žฅ์€ ์žฅ์ด ์žฅ์ผ ์žฅ์ž„ ์žฅ์ฐจ ์žฅ์ฐฝ ์žฅ์ฑ„ ์žฅ์ฒœ ์žฅ์ฒจ ์žฅ์ฒญ ์žฅ์ดˆ ์žฅ์ด ์žฅํ‘œ ์žฅํ•˜ ์žฅํ•œ ์žฅํ–ฅ ์žฅํ˜„ ์žฅํ˜ผ ์žฅํ™ ์žฅํ™” ์žฅํšจ ์žฅ๋ˆˆ ์žฅ๋‹ฌ ์žฅ๋‹น ์žฅ๋ด„ ์žฅ์Šฌ ์žฅ์—ด ์žฅ์˜ ์žฅํƒœ ์žฅํ˜œ ์žฅ๋‚  ์žฅ๋Š˜ ์žฅ๋ถ„ ์žฅ์ƒ˜ ์žฅ์ˆœ ์žฅ์ธ ์žฅ์ „ ์žฅ์ข… ์žฅ์ฃผ ์žฅ์ง€ ์žฅ์ง„ ์žฅ์ฐฌ ์žฅ์ฒ˜ ์ „๋‚œ ์ „๋‹ค ์ „๋„ ์ „๋ž˜ ์ „๋ฆฌ ์ „๋ฌด ์ „๋ฏธ ์ „๋ฏผ ์ „์ƒ ์ „์ƒˆ ์ „์„œ ์ „์„ฌ ์ „์„ฑ ์ „์†” ์ „์†œ ์ „์ˆ˜ ์ „์‹ค ์ „์‹ฌ ์ „์•ˆ ์ „์•  ์ „์–‘ ์ „์—ฌ ์ „์—ฐ ์ „์˜ˆ ์ „์˜ค ์ „์˜จ ์ „์›” ์ „์œค ์ „์€ ์ „์ด ์ „์ผ ์ „์ž„ ์ „์ • ์ „์ฐฝ ์ „์ฑ„ ์ „์ฒœ ์ „์ฒจ ์ „์ฒญ ์ „์ดˆ ์ „์ด ์ „ํ‘œ ์ „ํ–ฅ ์ „ํ˜„ ์ „ํ˜ผ ์ „ํ™ ์ „ํšจ ์ „๋ˆˆ ์ „๋ด„ ์ „๋น„ ์ „์Šฌ ์ „์—ด ์ „์ž ์ „ํ˜œ ์ „๋‚  ์ „๋Š˜ ์ „์ƒ˜ ์ „์ˆœ ์ „์ธ ์ „์ฐฌ ์ข…๋‚ด ์ข…๋‹ด ์ข…๋„ ์ข…๋ผ ์ข…๋ฅ˜ ์ข…๋ฆฌ ์ข…๋ชจ ์ข…๋ฏธ ์ข…์„ค ์ข…์„ฌ ์ข…์„ฑ ์ข…์†Œ ์ข…์†” ์ข…์†œ ์ข…์†ก ์ข…์ˆ˜ ์ข…์‹œ ์ข…์‹  ์ข…์‹ค ์ข…์‹ฌ ์ข…์•„ ์ข…์•ˆ ์ข…์•  ์ข…์—ฌ ์ข…์—ฐ ์ข…์˜ˆ ์ข…์˜ค ์ข…์˜จ ์ข…์š” ์ข…์šฐ ์ข…์›” ์ข…์œ  ์ข…์œค ์ข…์œจ ์ข…์€ ์ข…์ž„ ์ข…์ • ์ข…์ฐจ ์ข…์ฐฝ ์ข…์ฑ„ ์ข…์ฒœ ์ข…์ฒจ ์ข…์ฒญ ์ข…์ดˆ ์ข…์ด ์ข…ํ‘œ ์ข…ํ•˜ ์ข…ํ•œ ์ข…ํ–ฅ ์ข…ํ˜„ ์ข…ํ˜ผ ์ข…ํ™ ์ข…ํ™” ์ข…ํšจ ์ข…๋ˆˆ ์ข…๋‹ฌ ์ข…๋‹น ์ข…๋ด„ ์ข…๋น„ ์ข…์Šฌ ์ข…์—ด ์ข…์˜ ์ข…ํƒœ ์ข…ํ˜œ ์ข…๋‚  ์ข…๋Š˜ ์ข…๋ถ„ ์ข…์ƒ˜ ์ข…์ˆœ ์ข…์ธ ์ข…์žฅ ์ข…์ „ ์ข…์ฃผ ์ข…์ง€ ์ข…์ง„ ์ข…์ฐฌ ์ข…์ฒ˜ ์ฃผ๋‚œ ์ฃผ๋‹จ ์ฃผ๋‹ด ์ฃผ๋„ ์ฃผ๋ž˜ ์ฃผ๋ฅ˜ ์ฃผ๋ฌด ์ฃผ๋ฏธ ์ฃผ๋ฏผ ์ฃผ์‚ฐ ์ฃผ์ƒ ์ฃผ์ƒˆ ์ฃผ์ƒ ์ฃผ์„œ ์ฃผ์„  ์ฃผ์„ค ์ฃผ์„ฌ ์ฃผ์„ฑ ์ฃผ์†” ์ฃผ์†œ ์ฃผ์†ก ์ฃผ์ˆ˜ ์ฃผ์‹œ ์ฃผ์‹ฌ ์ฃผ์•„ ์ฃผ์•ˆ ์ฃผ์•  ์ฃผ์–‘ ์ฃผ์—ฐ ์ฃผ์˜ˆ ์ฃผ์˜ค ์ฃผ์š” ์ฃผ์›” ์ฃผ์œค ์ฃผ์œจ ์ฃผ์€ ์ฃผ์ด ์ฃผ์ผ ์ฃผ์ž„ ์ฃผ์ฐฝ ์ฃผ์ฑ„ ์ฃผ์ฒœ ์ฃผ์ฒจ ์ฃผ์ฒญ ์ฃผ์ดˆ ์ฃผ์ด ์ฃผํ‘œ ์ฃผํ•˜ ์ฃผํ•œ ์ฃผํ•ด ์ฃผํ–ฅ ์ฃผํ˜„ ์ฃผํ˜ผ ์ฃผํ™ ์ฃผํ™” ์ฃผํšจ ์ฃผ๋‚จ ์ฃผ๋ˆˆ ์ฃผ๋‹ฌ ์ฃผ๋ด„ ์ฃผ์—ด ์ฃผ์˜ ์ฃผํ˜œ ์ฃผ๋‚  ์ฃผ๋ถ„ ์ฃผ์ƒ˜ ์ฃผ์ˆœ ์ฃผ์ง€ ์ฃผ์ฐฌ ์ง€๋‚œ ์ง€๋‹ด ์ง€๋„ ์ง€๋ž˜ ์ง€๋ฅ˜ ์ง€๋ฏผ ์ง€์‚ฌ ์ง€์‚ฐ ์ง€์ƒˆ ์ง€์ƒ ์ง€์„œ ์ง€์„  ์ง€์„ค ์ง€์„ฌ ์ง€์†Œ ์ง€์†” ์ง€์†œ ์ง€์ˆ˜ ์ง€์‹  ์ง€์‹ค ์ง€์‹ฌ ์ง€์•„ ์ง€์•ˆ ์ง€์•  ์ง€์—ฌ ์ง€์˜ค ์ง€์˜จ ์ง€์šฐ ์ง€์›” ์ง€์œค ์ง€์œจ ์ง€์€ ์ง€์ผ ์ง€์ฐจ ์ง€์ฐฝ ์ง€์ฑ„ ์ง€์ฒœ ์ง€์ฒจ ์ง€์ฒญ ์ง€์ดˆ ์ง€์ด ์ง€ํ‘œ ์ง€ํ•œ ์ง€ํ˜„ ์ง€ํ˜ผ ์ง€ํ™ ์ง€ํ™” ์ง€ํšจ ์ง€๋ˆˆ ์ง€๋‹ฌ ์ง€๋ด„ ์ง€๋น„ ์ง€์Šฌ ์ง€์—ด ์ง€์˜ ์ง€ํƒœ ์ง€ํ˜œ ์ง€๋‚  ์ง€๋Š˜ ์ง€์ƒ˜ ์ง€์ˆœ ์ง€์ข… ์ง€์ฃผ ์ง€์ฐฌ ์ง„๋‚˜ ์ง„๋‚œ ์ง„๋‚ด ์ง„๋‹ด ์ง„๋„ ์ง„๋ผ ์ง„๋ž˜ ์ง„๋ฅ˜ ์ง„๋ฆฌ ์ง„๋ชจ ์ง„๋ฌด ์ง„๋ฏธ ์ง„๋ฏผ ์ง„์‚ฌ ์ง„์‚ฐ ์ง„์ƒˆ ์ง„์ƒ ์ง„์„œ ์ง„์„  ์ง„์„ค ์ง„์„ฌ ์ง„์„ฑ ์ง„์†Œ ์ง„์†” ์ง„์†œ ์ง„์†ก ์ง„์ˆ˜ ์ง„์‹œ ์ง„์‹  ์ง„์‹ค ์ง„์‹ฌ ์ง„์•„ ์ง„์•ˆ ์ง„์•  ์ง„์–‘ ์ง„์—ฌ ์ง„์—ฐ ์ง„์˜ˆ ์ง„์˜ค ์ง„์˜จ ์ง„์š” ์ง„์šฐ ์ง„์›” ์ง„์œ  ์ง„์œค ์ง„์œจ ์ง„์€ ์ง„์ผ ์ง„์ž„ ์ง„์ • ์ง„์ฐจ ์ง„์ฑ„ ์ง„์ฒœ ์ง„์ฒจ ์ง„์ฒญ ์ง„์ดˆ ์ง„์ด ์ง„ํ‘œ ์ง„ํ•˜ ์ง„ํ–ฅ ์ง„ํ˜„ ์ง„ํ˜ผ ์ง„ํ™ ์ง„ํ™” ์ง„ํšจ ์ง„๋‚จ ์ง„๋ˆˆ ์ง„๋‹ฌ ์ง„๋ด„ ์ง„๋น„ ์ง„์Šฌ ์ง„์—ด ์ง„์˜ ์ง„์ž ์ง„ํƒœ ์ง„ํ˜œ ์ง„๋‚  ์ง„๋Š˜ ์ง„๋ถ„ ์ง„์ƒ˜ ์ง„์ˆœ ์ง„์ธ ์ง„์žฅ ์ง„์ „ ์ง„์ข… ์ง„์ฃผ ์ง„์ฐฌ ์ง„์ฒ˜ ์ฐฌ๋‚˜ ์ฐฌ๋‹ด ์ฐฌ๋„ ์ฐฌ๋ž˜ ์ฐฌ๋ฅ˜ ์ฐฌ๋ฆฌ ์ฐฌ๋ชจ ์ฐฌ๋ฌด ์ฐฌ๋ฏธ ์ฐฌ๋ฏผ ์ฐฌ์‚ฌ ์ฐฌ์‚ฐ ์ฐฌ์ƒ ์ฐฌ์ƒˆ ์ฐฌ์ƒ ์ฐฌ์„œ ์ฐฌ์„  ์ฐฌ์„ค ์ฐฌ์„ฌ ์ฐฌ์„ฑ ์ฐฌ์†Œ ์ฐฌ์†” ์ฐฌ์†œ ์ฐฌ์†ก ์ฐฌ์ˆ˜ ์ฐฌ์‹œ ์ฐฌ์‹  ์ฐฌ์‹ค ์ฐฌ์‹ฌ ์ฐฌ์•„ ์ฐฌ์•ˆ ์ฐฌ์•  ์ฐฌ์–‘ ์ฐฌ์—ฌ ์ฐฌ์—ฐ ์ฐฌ์˜ˆ ์ฐฌ์˜จ ์ฐฌ์š” ์ฐฌ์›” ์ฐฌ์œ  ์ฐฌ์œค ์ฐฌ์œจ ์ฐฌ์€ ์ฐฌ์ • ์ฐฌ์ฐจ ์ฐฌ์ฐฝ ์ฐฌ์ฑ„ ์ฐฌ์ฒœ ์ฐฌ์ฒจ ์ฐฌ์ฒญ ์ฐฌ์ดˆ ์ฐฌ์ด ์ฐฌํ‘œ ์ฐฌํ•˜ ์ฐฌํ•œ ์ฐฌํ–ฅ ์ฐฌํ˜„ ์ฐฌํ˜ผ ์ฐฌํ™” ์ฐฌํšจ ์ฐฌ๋‚จ ์ฐฌ๋ˆˆ ์ฐฌ๋‹ฌ ์ฐฌ๋ด„ ์ฐฌ๋น„ ์ฐฌ์Šฌ ์ฐฌ์—ด ์ฐฌ์˜ ์ฐฌ์ž ์ฐฌํƒœ ์ฐฌํ˜œ ์ฐฌ๋‚  ์ฐฌ๋Š˜ ์ฐฌ๋ถ„ ์ฐฌ์ƒ˜ ์ฐฌ์ˆœ ์ฐฌ์ธ ์ฐฌ์žฅ ์ฐฌ์ „ ์ฐฌ์ข… ์ฐฌ์ฃผ ์ฐฌ์ง€ ์ฐฌ์ง„ ์ฐฌ์ฒ˜ ์ฒ˜๋‹ด ์ฒ˜๋ž˜ ์ฒ˜๋ฅ˜ ์ฒ˜๋ชจ ์ฒ˜๋ฌด ์ฒ˜๋ฏผ ์ฒ˜์‚ฌ ์ฒ˜์‚ฐ ์ฒ˜์ƒ ์ฒ˜์ƒˆ ์ฒ˜์ƒ ์ฒ˜์„  ์ฒ˜์„ค ์ฒ˜์„ฌ ์ฒ˜์†Œ ์ฒ˜์†” ์ฒ˜์†œ ์ฒ˜์†ก ์ฒ˜์ˆ˜ ์ฒ˜์‹œ ์ฒ˜์‹ค ์ฒ˜์‹ฌ ์ฒ˜์•„ ์ฒ˜์•ˆ ์ฒ˜์•  ์ฒ˜์–‘ ์ฒ˜์—ฐ ์ฒ˜์˜ค ์ฒ˜์šฐ ์ฒ˜์›” ์ฒ˜์œค ์ฒ˜์œจ ์ฒ˜์€ ์ฒ˜์ด ์ฒ˜์ผ ์ฒ˜์ž„ ์ฒ˜์ • ์ฒ˜์ฐฝ ์ฒ˜์ฑ„ ์ฒ˜์ฒœ ์ฒ˜์ฒจ ์ฒ˜์ฒญ ์ฒ˜์ดˆ ์ฒ˜์ด ์ฒ˜ํ‘œ ์ฒ˜ํ•˜ ์ฒ˜ํ–ฅ ์ฒ˜ํ˜„ ์ฒ˜ํ˜ผ ์ฒ˜ํ™ ์ฒ˜ํ™” ์ฒ˜ํšจ ์ฒ˜๋ˆˆ ์ฒ˜๋‹ฌ ์ฒ˜๋‹น ์ฒ˜๋ด„ ์ฒ˜๋น„ ์ฒ˜์Šฌ ์ฒ˜์—ด ์ฒ˜ํƒœ ์ฒ˜๋‚  ์ฒ˜์ƒ˜ ์ฒ˜์ˆœ ์ฒ˜์ธ ์ฒ˜์žฅ ์ฒ˜์ „ ์ฒ˜์ฃผ \ No newline at end of file diff --git a/packages/mugunghwa/sources/98_negative_words.txt b/packages/mugunghwa/sources/98_negative_words.txt deleted file mode 100644 index 5753c94..0000000 --- a/packages/mugunghwa/sources/98_negative_words.txt +++ /dev/null @@ -1 +0,0 @@ -๋‚ ๋‚  ๋Š˜๋Š˜ ๋ถ„๋ถ„ ์ƒ˜์ƒ˜ ์ˆœ์ˆœ ์ธ์ธ ์žฅ์žฅ ์ „์ „ ์ข…์ข… ์ฃผ์ฃผ ์ง€์ง€ ์ง„์ง„ ์ฐฌ์ฐฌ ์ฒ˜์ฒ˜ ์ƒ˜๋‚˜ ์ง„์ฐฝ ์ฒ˜๋‚จ ์ฒ˜๋ถ„ ์ฒ˜ํ•ด ์ฒ˜์š” ์ฒ˜์‹  ์ฒ˜๋ผ ์ฒ˜๋‹จ ์ฒ˜๋„ ์ฐฌ๋‚ด ์ฐฌ๋‹ค ์ฃผ์ • ์ฃผ์ฐจ ์žฅ์•  ์žฅ์˜ˆ ๋Š˜์ฒ˜ ์ „์ฒ˜ ์ฒ˜๋‚ด ์ฒ˜๋‹ค ์ฒ˜ํ•œ ์ง€์ธ ์ฃผ์ข… ์ธ์„ฑ ์ˆœ๋ž˜ ๋ถ„์œ  ๋ถ„์‹  ๋ถ„ํ•œ ๋ถ„ํ•ด ์ˆœ์‚ฐ ์ธ๋ฅ˜ ์ธํ™” ์ธ๋ฏผ ์ „๋‹ด ์ „๋ผ ์ง„ํ•œ ์ง„ํ•ด ์ฒ˜์ž ์ฒ˜๋Š˜ ์ง„๋‹ค ์ฒ˜์ง€ ์ฒ˜์ฐฌ ์ฒ˜์ง„ ์ฒ˜์ข… ์ฒ˜ํ˜œ ์ธ์‹  ์ธ๋ถ„ ์žฅ๋น„ ์ „๋ฅ˜ ์ „๋‹จ ์ „์‚ฌ ์ „์‹œ ์ „ํ•ด ์ „ํ•œ ์ฃผ๋ผ ์ฃผ๋Š˜ ๋ถ„๋‹จ ๋ถ„๋‹ค ๋ถ„์–‘ ๋ถ„์ง„ ์ƒ˜๋‚œ ์žฅ๋‚œ ์ „์žฅ ์ „์œจ ์ „๋ถ„ ์ฃผ์—ฌ ์ฃผ์‹  ์ฃผ์‹ค ์ฃผ์˜จ ์ฃผ์œ  ์ฃผ์žฅ ์ฃผ์Šฌ ์ง€์–‘ ์ง€์—ฐ ์ง€ํ•ด ๋‚ ํ•ด ๋Š˜ํ•ด ์ƒ˜ํ•ด ์ˆœํ•ด ์ธํ•ด ์žฅํ•ด ์ข…ํ•ด ์ฐฌํ•ด ์ง„๋‹น ์ˆœ์‹ค ์ˆœ์ข… ์ˆœ์žฅ ์ˆœ์ง„ ์ธ์ด ์žฅ์‹ค ์ „์ƒ ์ข…๋‚˜ ์ข…๋‚œ ์ข…์‚ฌ ์ข…์ด ์ข…๋‚จ ์ฃผ๋‚ด ์ฃผ๋‹ค ์ฃผ๋ฆฌ ์ฃผ์‚ฌ ์ฃผ์†Œ ์ฃผ๋‹น ์ฃผ์ž ์ฃผ๋ชจ ์ฃผ์šฐ ์ง€๋‚ด ์ง€๋‹ค ์ง€๋‚˜ ์ง€๋ฆฌ ์ง€ํ•˜ ์ง€๋‹น ์ง€์ž ์ง€์žฅ ์ง€์ „ ์ง€์ง„ ์ง„์ƒ ๋ถ„๋น„ ๋ถ„๋ฌด ๋ถ„์‹ค ๋ถ„์ˆ˜ ๋ถ„๋‚ด ๋ถ„๋‹ด ๋ถ„๋„ ๋ถ„๋ผ ๋ถ„๋ž˜ ๋ถ„๋ฅ˜ ๋ถ„๋ฆฌ ๋ถ„๋ชจ ๋ถ„๋ฏผ ๋ถ„์‚ฌ ๋ถ„์‚ฐ ๋ถ„์ƒ ๋ถ„์ƒˆ ๋ถ„์ƒ ๋ถ„์„œ ๋ถ„์„  ๋ถ„์„ค ๋ถ„์„ฌ ๋ถ„์„ฑ ๋ถ„์†Œ ๋ถ„์†” ๋ถ„์†œ ๋ถ„์†ก ๋ถ„์‹œ ๋ถ„์‹ฌ ๋ถ„์•„ ๋ถ„์•ˆ ๋ถ„์•  ๋ถ„์—ฌ ๋ถ„์—ฐ ๋ถ„์˜ˆ ๋ถ„์˜ค ๋ถ„์˜จ ๋ถ„์š” ๋ถ„์šฐ ๋ถ„์›” ๋ถ„์œค ๋ถ„์œจ ๋ถ„์€ ๋ถ„์ด ๋ถ„์ผ ๋ถ„์ž„ ๋ถ„์ • ๋ถ„์ฐจ ๋ถ„์ฐฝ ๋ถ„์ฑ„ ๋ถ„์ฒœ ๋ถ„์ฒจ ๋ถ„์ฒญ ๋ถ„์ดˆ ๋ถ„์ด ๋ถ„ํ‘œ ๋ถ„ํ•˜ ๋ถ„ํ–ฅ ๋ถ„ํ˜„ ๋ถ„ํ˜ผ ๋ถ„ํ™ ๋ถ„ํ™” ๋ถ„ํšจ ๋ถ„๋‚จ ๋ถ„๋ˆˆ ๋ถ„๋‹ฌ ๋ถ„๋‹น ๋ถ„๋ด„ ๋ถ„์Šฌ ๋ถ„์—ด ๋ถ„์˜ ๋ถ„์ž ๋ถ„ํƒœ ๋ถ„ํ˜œ ๋ถ„์ƒ˜ ๋ถ„์ˆœ ๋ถ„์ธ ๋ถ„์žฅ ๋ถ„์ „ ๋ถ„์ข… ๋ถ„์ฃผ ๋ถ„์ง€ ๋ถ„์ฐฌ ๋ถ„์ฒ˜ ์ฃผ์ธ ๋‚ ๋‚˜ ๋‚ ๋‹ค ๋‚ ๋ผ ํ˜œ์žฅ ๋‚ ๋„ ์ „์†Œ ์ „์ฐจ ์ „ํ™” ์ „์‚ฐ ์ „์„ค ์ „์„  ์ „๋ชจ ์ „๋‚ด ์ „์•„ ์ „ํ•˜ ์ „์‹  ์ „์š” ์ „์šฐ ์ „๋‹ฌ ์ „๋‹น ์ „์†ก ์ „์œ  ์ง€์š” ์ง€์ด ์ง€์ • ๋‚ ์„  ๋‚ ์‹œ ๋‚ ์‹  ๋‚ ์•„ ๋‚ ์ž ๋‚ ๋‹น ๋‚ ๋Š˜ ๋Š˜์‹  ๋Š˜์ด ์ƒ˜๋‚  ์ˆœ๋‚œ ์ˆœ๋‚ด ๋‚ ์š” ๋‚ ๋‚จ ๋Š˜๋‚ด ๋Š˜๋‹ค ์ฃผ๋‚˜ ์ฃผ์ „ ์ฃผ์ง„ ์ฃผ์ฒ˜ ์ง€๋‹จ ์ง€๋ผ ์ง€๋ชจ ์ง€๋ฌด ์ง€๋ฏธ ์ง€์œ  ์ง€๋ถ„ ๋ถ„๋‚˜ ์ƒ˜๋ฏผ ์ƒ˜์‚ฌ ์ƒ˜์‚ฐ ์ƒ˜์ƒ ์ƒ˜์ƒˆ ์ƒ˜์ƒ ์ƒ˜์„œ ์ƒ˜์„  ์ƒ˜์„ค ์ƒ˜์„ฌ ์ƒ˜์„ฑ ๋‹ค์ง„ ๋‹ค์š” ๋‚ ํƒœ ์ข…์ž ์ฒ˜์„œ ์ฒ˜์˜ ์žฅ์ • ์žฅ์ž ๋‚ ์ž„ ๋‚ ์œ  ๋Š˜๋ผ ๋Š˜๋ž˜ ์žฅ์‚ฌ ์ธ์ • ์ธ์˜ค ์ง„์ด ์ฒ˜๋ฆฌ ์ง„์ง€ ๋Š˜์œ  ๋Š˜์ƒ ๋Š˜์•ˆ ๋Š˜์š” ๋Š˜์˜จ ๋Š˜์ž„ ์ƒ˜์‹ฌ ์ƒ˜์žฅ ์ƒ˜๋‚จ ์ธ์ƒ ์ธ์ƒ ์ „์˜ ์ฒ˜๋ฏธ ์ˆœ๋ผ ์ธํ•œ ์ธ์ข… ์žฅ์†Œ ์ˆœํƒœ ๋Š˜์œจ ์ „๋‚˜ ์ „์ฃผ ์ „์ง€ ์ „์ง„ ์ข…๋‹จ ์ง€์ž„ ์ง€์˜ˆ ์ง€์‹œ ์ง€์†ก ์ง€์„ฑ ์ง€ํ–ฅ ์ง€๋‚จ ์ฐฌ๋‚œ ์ฐฌ๋‹จ ์ฐฌ์šฐ ์ฐฌ์˜ค ์ฐฌ์ด ์ฐฌ์ผ ์ฐฌ์ž„ ์ฐฌํ™ ์ฐฌ๋‹น ์ฒ˜๋‚˜ ์ฒ˜๋‚œ ์ฒ˜์œ  ์ฒ˜์˜จ ์ฒ˜์˜ˆ ์ฒ˜์—ฌ ์ฒ˜์„ฑ ์ฒ˜์ฐจ ์ธ์•ˆ ์ธ์•„ ์ธ๋‚˜ ์ธ๋‚œ ์ธ์ฒœ ์ธ์šฐ ์žฅ์ˆ˜ ์žฅ์ƒ ์žฅ๋‚จ ์ „๋‚จ ์ „ํƒœ ์ „์ข… ์ข…๋‹ค ์ข…๋ž˜ ์ข…๋ฌด ์ข…๋ฏผ ์ข…์‚ฐ ์ข…์ƒ ์ข…์ƒˆ ์ข…์ƒ ์ข…์„œ ์ข…์„  ์ˆœ๋ถ„ ๋Š˜์•„ ๋Š˜์—ฌ ๋Š˜์–‘ ๋‚ ์•ˆ ๋‚ ์ด ๋Š˜๋ฆฌ ์žฅ๋ชจ ์ฐฌ๋ผ ์ง€์ƒ ์ข…์–‘ ์ง€์ฒ˜ ์ฃผํƒœ ์ฃผ๋น„ ์ˆœ์ • ์ˆœ์ƒ ์ธ์ƒ˜ ๋Š˜ํ™” ๋Š˜๋‚จ ์ƒ˜์†ก ์ƒ˜์ˆ˜ ์ง„๋‹จ ์ข…์ผ ์ƒ˜์ด ์ƒ˜์ผ ๋‚ ์ฒ˜ \ No newline at end of file diff --git a/packages/mugunghwa/sources/98_non_filtered.txt b/packages/mugunghwa/sources/98_non_filtered.txt deleted file mode 100644 index 09a65e3..0000000 --- a/packages/mugunghwa/sources/98_non_filtered.txt +++ /dev/null @@ -1 +0,0 @@ -๋‚˜๋‚˜ ๋‚˜๋‚œ ๋‚˜๋‚ด ๋‚˜๋‹ค ๋‚˜๋‹จ ๋‚˜๋‹ด ๋‚˜๋„ ๋‚˜๋ผ ๋‚˜๋ž˜ ๋‚˜๋ฅ˜ ๋‚˜๋ฆฌ ๋‚˜๋ชจ ๋‚˜๋ฌด ๋‚˜๋ฏธ ๋‚˜๋ฏผ ๋‚˜์‚ฌ ๋‚˜์‚ฐ ๋‚˜์ƒ ๋‚˜์ƒˆ ๋‚˜์ƒ ๋‚˜์„œ ๋‚˜์„  ๋‚˜์„ค ๋‚˜์„ฌ ๋‚˜์„ฑ ๋‚˜์†Œ ๋‚˜์†” ๋‚˜์†œ ๋‚˜์†ก ๋‚˜์ˆ˜ ๋‚˜์‹œ ๋‚˜์‹  ๋‚˜์‹ค ๋‚˜์‹ฌ ๋‚˜์•„ ๋‚˜์•ˆ ๋‚˜์•  ๋‚˜์–‘ ๋‚˜์—ฌ ๋‚˜์—ฐ ๋‚˜์˜ˆ ๋‚˜์˜ค ๋‚˜์˜จ ๋‚˜์š” ๋‚˜์šฐ ๋‚˜์›” ๋‚˜์œ  ๋‚˜์œค ๋‚˜์œจ ๋‚˜์€ ๋‚˜์ด ๋‚˜์ผ ๋‚˜์ž„ ๋‚˜์ • ๋‚˜์ฐจ ๋‚˜์ฐฝ ๋‚˜์ฑ„ ๋‚˜์ฒœ ๋‚˜์ฒจ ๋‚˜์ฒญ ๋‚˜์ดˆ ๋‚˜์ด ๋‚˜ํ‘œ ๋‚˜ํ•˜ ๋‚˜ํ•œ ๋‚˜ํ•ด ๋‚˜ํ–ฅ ๋‚˜ํ˜„ ๋‚˜ํ˜ผ ๋‚˜ํ™ ๋‚˜ํ™” ๋‚˜ํšจ ๋‚˜๋‚จ ๋‚˜๋ˆˆ ๋‚˜๋‹ฌ ๋‚˜๋‹น ๋‚˜๋ด„ ๋‚˜๋น„ ๋‚˜์Šฌ ๋‚˜์—ด ๋‚˜์˜ ๋‚˜์ž ๋‚˜ํƒœ ๋‚˜ํ˜œ ๋‚˜๋‚  ๋‚˜๋Š˜ ๋‚˜๋ถ„ ๋‚˜์ƒ˜ ๋‚˜์ˆœ ๋‚˜์ธ ๋‚˜์žฅ ๋‚˜์ „ ๋‚˜์ข… ๋‚˜์ฃผ ๋‚˜์ง€ ๋‚˜์ง„ ๋‚˜์ฐฌ ๋‚˜์ฒ˜ ๋‚œ๋‚˜ ๋‚œ๋‚œ ๋‚œ๋‚ด ๋‚œ๋‹ค ๋‚œ๋‹จ ๋‚œ๋‹ด ๋‚œ๋„ ๋‚œ๋ผ ๋‚œ๋ž˜ ๋‚œ๋ฅ˜ ๋‚œ๋ฆฌ ๋‚œ๋ชจ ๋‚œ๋ฌด ๋‚œ๋ฏธ ๋‚œ๋ฏผ ๋‚œ์‚ฌ ๋‚œ์‚ฐ ๋‚œ์ƒ ๋‚œ์ƒˆ ๋‚œ์ƒ ๋‚œ์„œ ๋‚œ์„  ๋‚œ์„ค ๋‚œ์„ฌ ๋‚œ์„ฑ ๋‚œ์†Œ ๋‚œ์†” ๋‚œ์†œ ๋‚œ์†ก ๋‚œ์ˆ˜ ๋‚œ์‹œ ๋‚œ์‹  ๋‚œ์‹ค ๋‚œ์‹ฌ ๋‚œ์•„ ๋‚œ์•ˆ ๋‚œ์•  ๋‚œ์–‘ ๋‚œ์—ฌ ๋‚œ์—ฐ ๋‚œ์˜ˆ ๋‚œ์˜ค ๋‚œ์˜จ ๋‚œ์š” ๋‚œ์šฐ ๋‚œ์›” ๋‚œ์œ  ๋‚œ์œค ๋‚œ์œจ ๋‚œ์€ ๋‚œ์ด ๋‚œ์ผ ๋‚œ์ž„ ๋‚œ์ • ๋‚œ์ฐจ ๋‚œ์ฐฝ ๋‚œ์ฑ„ ๋‚œ์ฒœ ๋‚œ์ฒจ ๋‚œ์ฒญ ๋‚œ์ดˆ ๋‚œ์ด ๋‚œํ‘œ ๋‚œํ•˜ ๋‚œํ•œ ๋‚œํ•ด ๋‚œํ–ฅ ๋‚œํ˜„ ๋‚œํ˜ผ ๋‚œํ™ ๋‚œํ™” ๋‚œํšจ ๋‚œ๋‚จ ๋‚œ๋ˆˆ ๋‚œ๋‹ฌ ๋‚œ๋‹น ๋‚œ๋ด„ ๋‚œ๋น„ ๋‚œ์Šฌ ๋‚œ์—ด ๋‚œ์˜ ๋‚œ์ž ๋‚œํƒœ ๋‚œํ˜œ ๋‚œ๋‚  ๋‚œ๋Š˜ ๋‚œ๋ถ„ ๋‚œ์ƒ˜ ๋‚œ์ˆœ ๋‚œ์ธ ๋‚œ์žฅ ๋‚œ์ „ ๋‚œ์ข… ๋‚œ์ฃผ ๋‚œ์ง€ ๋‚œ์ง„ ๋‚œ์ฐฌ ๋‚œ์ฒ˜ ๋‚ด๋‚˜ ๋‚ด๋‚œ ๋‚ด๋‚ด ๋‚ด๋‹ค ๋‚ด๋‹จ ๋‚ด๋‹ด ๋‚ด๋„ ๋‚ด๋ผ ๋‚ด๋ž˜ ๋‚ด๋ฅ˜ ๋‚ด๋ฆฌ ๋‚ด๋ชจ ๋‚ด๋ฌด ๋‚ด๋ฏธ ๋‚ด๋ฏผ ๋‚ด์‚ฌ ๋‚ด์‚ฐ ๋‚ด์ƒ ๋‚ด์ƒˆ ๋‚ด์ƒ ๋‚ด์„œ ๋‚ด์„  ๋‚ด์„ค ๋‚ด์„ฌ ๋‚ด์„ฑ ๋‚ด์†Œ ๋‚ด์†” ๋‚ด์†œ ๋‚ด์†ก ๋‚ด์ˆ˜ ๋‚ด์‹œ ๋‚ด์‹  ๋‚ด์‹ค ๋‚ด์‹ฌ ๋‚ด์•„ ๋‚ด์•ˆ ๋‚ด์•  ๋‚ด์–‘ ๋‚ด์—ฌ ๋‚ด์—ฐ ๋‚ด์˜ˆ ๋‚ด์˜ค ๋‚ด์˜จ ๋‚ด์š” ๋‚ด์šฐ ๋‚ด์›” ๋‚ด์œ  ๋‚ด์œค ๋‚ด์œจ ๋‚ด์€ ๋‚ด์ด ๋‚ด์ผ ๋‚ด์ž„ ๋‚ด์ • ๋‚ด์ฐจ ๋‚ด์ฐฝ ๋‚ด์ฑ„ ๋‚ด์ฒœ ๋‚ด์ฒจ ๋‚ด์ฒญ ๋‚ด์ดˆ ๋‚ด์ด ๋‚ดํ‘œ ๋‚ดํ•˜ ๋‚ดํ•œ ๋‚ดํ•ด ๋‚ดํ–ฅ ๋‚ดํ˜„ ๋‚ดํ˜ผ ๋‚ดํ™ ๋‚ดํ™” ๋‚ดํšจ ๋‚ด๋‚จ ๋‚ด๋ˆˆ ๋‚ด๋‹ฌ ๋‚ด๋‹น ๋‚ด๋ด„ ๋‚ด๋น„ ๋‚ด์Šฌ ๋‚ด์—ด ๋‚ด์˜ ๋‚ด์ž ๋‚ดํƒœ ๋‚ดํ˜œ ๋‚ด๋‚  ๋‚ด๋Š˜ ๋‚ด๋ถ„ ๋‚ด์ƒ˜ ๋‚ด์ˆœ ๋‚ด์ธ ๋‚ด์žฅ ๋‚ด์ „ ๋‚ด์ข… ๋‚ด์ฃผ ๋‚ด์ง€ ๋‚ด์ง„ ๋‚ด์ฐฌ ๋‚ด์ฒ˜ ๋‹ค๋‚˜ ๋‹ค๋‚œ ๋‹ค๋‚ด ๋‹ค๋‹ค ๋‹ค๋‹จ ๋‹ค๋‹ด ๋‹ค๋„ ๋‹ค๋ผ ๋‹ค๋ž˜ ๋‹ค๋ฅ˜ ๋‹ค๋ฆฌ ๋‹ค๋ชจ ๋‹ค๋ฌด ๋‹ค๋ฏธ ๋‹ค๋ฏผ ๋‹ค์‚ฌ ๋‹ค์‚ฐ ๋‹ค์ƒ ๋‹ค์ƒˆ ๋‹ค์ƒ ๋‹ค์„œ ๋‹ค์„  ๋‹ค์„ค ๋‹ค์„ฌ ๋‹ค์„ฑ ๋‹ค์†Œ ๋‹ค์†” ๋‹ค์†œ ๋‹ค์†ก ๋‹ค์ˆ˜ ๋‹ค์‹œ ๋‹ค์‹  ๋‹ค์‹ค ๋‹ค์‹ฌ ๋‹ค์•„ ๋‹ค์•ˆ ๋‹ค์•  ๋‹ค์–‘ ๋‹ค์—ฌ ๋‹ค์—ฐ ๋‹ค์˜ˆ ๋‹ค์˜ค ๋‹ค์˜จ ๋‹ค์š” ๋‹ค์šฐ ๋‹ค์›” ๋‹ค์œ  ๋‹ค์œค ๋‹ค์œจ ๋‹ค์€ ๋‹ค์ด ๋‹ค์ผ ๋‹ค์ž„ ๋‹ค์ • ๋‹ค์ฐจ ๋‹ค์ฐฝ ๋‹ค์ฑ„ ๋‹ค์ฒœ ๋‹ค์ฒจ ๋‹ค์ฒญ ๋‹ค์ดˆ ๋‹ค์ด ๋‹คํ‘œ ๋‹คํ•˜ ๋‹คํ•œ ๋‹คํ•ด ๋‹คํ–ฅ ๋‹คํ˜„ ๋‹คํ˜ผ ๋‹คํ™ ๋‹คํ™” ๋‹คํšจ ๋‹ค๋‚จ ๋‹ค๋ˆˆ ๋‹ค๋‹ฌ ๋‹ค๋‹น ๋‹ค๋ด„ ๋‹ค๋น„ ๋‹ค์Šฌ ๋‹ค์—ด ๋‹ค์˜ ๋‹ค์ž ๋‹คํƒœ ๋‹คํ˜œ ๋‹ค๋‚  ๋‹ค๋Š˜ ๋‹ค๋ถ„ ๋‹ค์ƒ˜ ๋‹ค์ˆœ ๋‹ค์ธ ๋‹ค์žฅ ๋‹ค์ „ ๋‹ค์ข… ๋‹ค์ฃผ ๋‹ค์ง€ ๋‹ค์ง„ ๋‹ค์ฐฌ ๋‹ค์ฒ˜ ๋‹จ๋‚˜ ๋‹จ๋‚œ ๋‹จ๋‚ด ๋‹จ๋‹ค ๋‹จ๋‹จ ๋‹จ๋‹ด ๋‹จ๋„ ๋‹จ๋ผ ๋‹จ๋ž˜ ๋‹จ๋ฅ˜ ๋‹จ๋ฆฌ ๋‹จ๋ชจ ๋‹จ๋ฌด ๋‹จ๋ฏธ ๋‹จ๋ฏผ ๋‹จ์‚ฌ ๋‹จ์‚ฐ ๋‹จ์ƒ ๋‹จ์ƒˆ ๋‹จ์ƒ ๋‹จ์„œ ๋‹จ์„  ๋‹จ์„ค ๋‹จ์„ฌ ๋‹จ์„ฑ ๋‹จ์†Œ ๋‹จ์†” ๋‹จ์†œ ๋‹จ์†ก ๋‹จ์ˆ˜ ๋‹จ์‹œ ๋‹จ์‹  ๋‹จ์‹ค ๋‹จ์‹ฌ ๋‹จ์•„ ๋‹จ์•ˆ ๋‹จ์•  ๋‹จ์–‘ ๋‹จ์—ฌ ๋‹จ์—ฐ ๋‹จ์˜ˆ ๋‹จ์˜ค ๋‹จ์˜จ ๋‹จ์š” ๋‹จ์šฐ ๋‹จ์›” ๋‹จ์œ  ๋‹จ์œค ๋‹จ์œจ ๋‹จ์€ ๋‹จ์ด ๋‹จ์ผ ๋‹จ์ž„ ๋‹จ์ • ๋‹จ์ฐจ ๋‹จ์ฐฝ ๋‹จ์ฑ„ ๋‹จ์ฒœ ๋‹จ์ฒจ ๋‹จ์ฒญ ๋‹จ์ดˆ ๋‹จ์ด ๋‹จํ‘œ ๋‹จํ•˜ ๋‹จํ•œ ๋‹จํ•ด ๋‹จํ–ฅ ๋‹จํ˜„ ๋‹จํ˜ผ ๋‹จํ™ ๋‹จํ™” ๋‹จํšจ ๋‹จ๋‚จ ๋‹จ๋ˆˆ ๋‹จ๋‹ฌ ๋‹จ๋‹น ๋‹จ๋ด„ ๋‹จ๋น„ ๋‹จ์Šฌ ๋‹จ์—ด ๋‹จ์˜ ๋‹จ์ž ๋‹จํƒœ ๋‹จํ˜œ ๋‹จ๋‚  ๋‹จ๋Š˜ ๋‹จ๋ถ„ ๋‹จ์ƒ˜ ๋‹จ์ˆœ ๋‹จ์ธ ๋‹จ์žฅ ๋‹จ์ „ ๋‹จ์ข… ๋‹จ์ฃผ ๋‹จ์ง€ ๋‹จ์ง„ ๋‹จ์ฐฌ ๋‹จ์ฒ˜ ๋‹ด๋‚˜ ๋‹ด๋‚œ ๋‹ด๋‚ด ๋‹ด๋‹ค ๋‹ด๋‹จ ๋‹ด๋‹ด ๋‹ด๋„ ๋‹ด๋ผ ๋‹ด๋ž˜ ๋‹ด๋ฅ˜ ๋‹ด๋ฆฌ ๋‹ด๋ชจ ๋‹ด๋ฌด ๋‹ด๋ฏธ ๋‹ด๋ฏผ ๋‹ด์‚ฌ ๋‹ด์‚ฐ ๋‹ด์ƒ ๋‹ด์ƒˆ ๋‹ด์ƒ ๋‹ด์„œ ๋‹ด์„  ๋‹ด์„ค ๋‹ด์„ฌ ๋‹ด์„ฑ ๋‹ด์†Œ ๋‹ด์†” ๋‹ด์†œ ๋‹ด์†ก ๋‹ด์ˆ˜ ๋‹ด์‹œ ๋‹ด์‹  ๋‹ด์‹ค ๋‹ด์‹ฌ ๋‹ด์•„ ๋‹ด์•ˆ ๋‹ด์•  ๋‹ด์–‘ ๋‹ด์—ฌ ๋‹ด์—ฐ ๋‹ด์˜ˆ ๋‹ด์˜ค ๋‹ด์˜จ ๋‹ด์š” ๋‹ด์šฐ ๋‹ด์›” ๋‹ด์œ  ๋‹ด์œค ๋‹ด์œจ ๋‹ด์€ ๋‹ด์ด ๋‹ด์ผ ๋‹ด์ž„ ๋‹ด์ • ๋‹ด์ฐจ ๋‹ด์ฐฝ ๋‹ด์ฑ„ ๋‹ด์ฒœ ๋‹ด์ฒจ ๋‹ด์ฒญ ๋‹ด์ดˆ ๋‹ด์ด ๋‹ดํ‘œ ๋‹ดํ•˜ ๋‹ดํ•œ ๋‹ดํ•ด ๋‹ดํ–ฅ ๋‹ดํ˜„ ๋‹ดํ˜ผ ๋‹ดํ™ ๋‹ดํ™” ๋‹ดํšจ ๋‹ด๋‚จ ๋‹ด๋ˆˆ ๋‹ด๋‹ฌ ๋‹ด๋‹น ๋‹ด๋ด„ ๋‹ด๋น„ ๋‹ด์Šฌ ๋‹ด์—ด ๋‹ด์˜ ๋‹ด์ž ๋‹ดํƒœ ๋‹ดํ˜œ ๋‹ด๋‚  ๋‹ด๋Š˜ ๋‹ด๋ถ„ ๋‹ด์ƒ˜ ๋‹ด์ˆœ ๋‹ด์ธ ๋‹ด์žฅ ๋‹ด์ „ ๋‹ด์ข… ๋‹ด์ฃผ ๋‹ด์ง€ ๋‹ด์ง„ ๋‹ด์ฐฌ ๋‹ด์ฒ˜ ๋„๋‚˜ ๋„๋‚œ ๋„๋‚ด ๋„๋‹ค ๋„๋‹จ ๋„๋‹ด ๋„๋„ ๋„๋ผ ๋„๋ž˜ ๋„๋ฅ˜ ๋„๋ฆฌ ๋„๋ชจ ๋„๋ฌด ๋„๋ฏธ ๋„๋ฏผ ๋„์‚ฌ ๋„์‚ฐ ๋„์ƒ ๋„์ƒˆ ๋„์ƒ ๋„์„œ ๋„์„  ๋„์„ค ๋„์„ฌ ๋„์„ฑ ๋„์†Œ ๋„์†” ๋„์†œ ๋„์†ก ๋„์ˆ˜ ๋„์‹œ ๋„์‹  ๋„์‹ค ๋„์‹ฌ ๋„์•„ ๋„์•ˆ ๋„์•  ๋„์–‘ ๋„์—ฌ ๋„์—ฐ ๋„์˜ˆ ๋„์˜ค ๋„์˜จ ๋„์š” ๋„์šฐ ๋„์›” ๋„์œ  ๋„์œค ๋„์œจ ๋„์€ ๋„์ด ๋„์ผ ๋„์ž„ ๋„์ • ๋„์ฐจ ๋„์ฐฝ ๋„์ฑ„ ๋„์ฒœ ๋„์ฒจ ๋„์ฒญ ๋„์ดˆ ๋„์ด ๋„ํ‘œ ๋„ํ•˜ ๋„ํ•œ ๋„ํ•ด ๋„ํ–ฅ ๋„ํ˜„ ๋„ํ˜ผ ๋„ํ™ ๋„ํ™” ๋„ํšจ ๋„๋‚จ ๋„๋ˆˆ ๋„๋‹ฌ ๋„๋‹น ๋„๋ด„ ๋„๋น„ ๋„์Šฌ ๋„์—ด ๋„์˜ ๋„์ž ๋„ํƒœ ๋„ํ˜œ ๋„๋‚  ๋„๋Š˜ ๋„๋ถ„ ๋„์ƒ˜ ๋„์ˆœ ๋„์ธ ๋„์žฅ ๋„์ „ ๋„์ข… ๋„์ฃผ ๋„์ง€ ๋„์ง„ ๋„์ฐฌ ๋„์ฒ˜ ๋ผ๋‚˜ ๋ผ๋‚œ ๋ผ๋‚ด ๋ผ๋‹ค ๋ผ๋‹จ ๋ผ๋‹ด ๋ผ๋„ ๋ผ๋ผ ๋ผ๋ž˜ ๋ผ๋ฅ˜ ๋ผ๋ฆฌ ๋ผ๋ชจ ๋ผ๋ฌด ๋ผ๋ฏธ ๋ผ๋ฏผ ๋ผ์‚ฌ ๋ผ์‚ฐ ๋ผ์ƒ ๋ผ์ƒˆ ๋ผ์ƒ ๋ผ์„œ ๋ผ์„  ๋ผ์„ค ๋ผ์„ฌ ๋ผ์„ฑ ๋ผ์†Œ ๋ผ์†” ๋ผ์†œ ๋ผ์†ก ๋ผ์ˆ˜ ๋ผ์‹œ ๋ผ์‹  ๋ผ์‹ค ๋ผ์‹ฌ ๋ผ์•„ ๋ผ์•ˆ ๋ผ์•  ๋ผ์–‘ ๋ผ์—ฌ ๋ผ์—ฐ ๋ผ์˜ˆ ๋ผ์˜ค ๋ผ์˜จ ๋ผ์š” ๋ผ์šฐ ๋ผ์›” ๋ผ์œ  ๋ผ์œค ๋ผ์œจ ๋ผ์€ ๋ผ์ด ๋ผ์ผ ๋ผ์ž„ ๋ผ์ • ๋ผ์ฐจ ๋ผ์ฐฝ ๋ผ์ฑ„ ๋ผ์ฒœ ๋ผ์ฒจ ๋ผ์ฒญ ๋ผ์ดˆ ๋ผ์ด ๋ผํ‘œ ๋ผํ•˜ ๋ผํ•œ ๋ผํ•ด ๋ผํ–ฅ ๋ผํ˜„ ๋ผํ˜ผ ๋ผํ™ ๋ผํ™” ๋ผํšจ ๋ผ๋‚จ ๋ผ๋ˆˆ ๋ผ๋‹ฌ ๋ผ๋‹น ๋ผ๋ด„ ๋ผ๋น„ ๋ผ์Šฌ ๋ผ์—ด ๋ผ์˜ ๋ผ์ž ๋ผํƒœ ๋ผํ˜œ ๋ผ๋‚  ๋ผ๋Š˜ ๋ผ๋ถ„ ๋ผ์ƒ˜ ๋ผ์ˆœ ๋ผ์ธ ๋ผ์žฅ ๋ผ์ „ ๋ผ์ข… ๋ผ์ฃผ ๋ผ์ง€ ๋ผ์ง„ ๋ผ์ฐฌ ๋ผ์ฒ˜ ๋ž˜๋‚˜ ๋ž˜๋‚œ ๋ž˜๋‚ด ๋ž˜๋‹ค ๋ž˜๋‹จ ๋ž˜๋‹ด ๋ž˜๋„ ๋ž˜๋ผ ๋ž˜๋ž˜ ๋ž˜๋ฅ˜ ๋ž˜๋ฆฌ ๋ž˜๋ชจ ๋ž˜๋ฌด ๋ž˜๋ฏธ ๋ž˜๋ฏผ ๋ž˜์‚ฌ ๋ž˜์‚ฐ ๋ž˜์ƒ ๋ž˜์ƒˆ ๋ž˜์ƒ ๋ž˜์„œ ๋ž˜์„  ๋ž˜์„ค ๋ž˜์„ฌ ๋ž˜์„ฑ ๋ž˜์†Œ ๋ž˜์†” ๋ž˜์†œ ๋ž˜์†ก ๋ž˜์ˆ˜ ๋ž˜์‹œ ๋ž˜์‹  ๋ž˜์‹ค ๋ž˜์‹ฌ ๋ž˜์•„ ๋ž˜์•ˆ ๋ž˜์•  ๋ž˜์–‘ ๋ž˜์—ฌ ๋ž˜์—ฐ ๋ž˜์˜ˆ ๋ž˜์˜ค ๋ž˜์˜จ ๋ž˜์š” ๋ž˜์šฐ ๋ž˜์›” ๋ž˜์œ  ๋ž˜์œค ๋ž˜์œจ ๋ž˜์€ ๋ž˜์ด ๋ž˜์ผ ๋ž˜์ž„ ๋ž˜์ • ๋ž˜์ฐจ ๋ž˜์ฐฝ ๋ž˜์ฑ„ ๋ž˜์ฒœ ๋ž˜์ฒจ ๋ž˜์ฒญ ๋ž˜์ดˆ ๋ž˜์ด ๋ž˜ํ‘œ ๋ž˜ํ•˜ ๋ž˜ํ•œ ๋ž˜ํ•ด ๋ž˜ํ–ฅ ๋ž˜ํ˜„ ๋ž˜ํ˜ผ ๋ž˜ํ™ ๋ž˜ํ™” ๋ž˜ํšจ ๋ž˜๋‚จ ๋ž˜๋ˆˆ ๋ž˜๋‹ฌ ๋ž˜๋‹น ๋ž˜๋ด„ ๋ž˜๋น„ ๋ž˜์Šฌ ๋ž˜์—ด ๋ž˜์˜ ๋ž˜์ž ๋ž˜ํƒœ ๋ž˜ํ˜œ ๋ž˜๋‚  ๋ž˜๋Š˜ ๋ž˜๋ถ„ ๋ž˜์ƒ˜ ๋ž˜์ˆœ ๋ž˜์ธ ๋ž˜์žฅ ๋ž˜์ „ ๋ž˜์ข… ๋ž˜์ฃผ ๋ž˜์ง€ ๋ž˜์ง„ ๋ž˜์ฐฌ ๋ž˜์ฒ˜ ๋ฅ˜๋‚˜ ๋ฅ˜๋‚œ ๋ฅ˜๋‚ด ๋ฅ˜๋‹ค ๋ฅ˜๋‹จ ๋ฅ˜๋‹ด ๋ฅ˜๋„ ๋ฅ˜๋ผ ๋ฅ˜๋ž˜ ๋ฅ˜๋ฅ˜ ๋ฅ˜๋ฆฌ ๋ฅ˜๋ชจ ๋ฅ˜๋ฌด ๋ฅ˜๋ฏธ ๋ฅ˜๋ฏผ ๋ฅ˜์‚ฌ ๋ฅ˜์‚ฐ ๋ฅ˜์ƒ ๋ฅ˜์ƒˆ ๋ฅ˜์ƒ ๋ฅ˜์„œ ๋ฅ˜์„  ๋ฅ˜์„ค ๋ฅ˜์„ฌ ๋ฅ˜์„ฑ ๋ฅ˜์†Œ ๋ฅ˜์†” ๋ฅ˜์†œ ๋ฅ˜์†ก ๋ฅ˜์ˆ˜ ๋ฅ˜์‹œ ๋ฅ˜์‹  ๋ฅ˜์‹ค ๋ฅ˜์‹ฌ ๋ฅ˜์•„ ๋ฅ˜์•ˆ ๋ฅ˜์•  ๋ฅ˜์–‘ ๋ฅ˜์—ฌ ๋ฅ˜์—ฐ ๋ฅ˜์˜ˆ ๋ฅ˜์˜ค ๋ฅ˜์˜จ ๋ฅ˜์š” ๋ฅ˜์šฐ ๋ฅ˜์›” ๋ฅ˜์œ  ๋ฅ˜์œค ๋ฅ˜์œจ ๋ฅ˜์€ ๋ฅ˜์ด ๋ฅ˜์ผ ๋ฅ˜์ž„ ๋ฅ˜์ • ๋ฅ˜์ฐจ ๋ฅ˜์ฐฝ ๋ฅ˜์ฑ„ ๋ฅ˜์ฒœ ๋ฅ˜์ฒจ ๋ฅ˜์ฒญ ๋ฅ˜์ดˆ ๋ฅ˜์ด ๋ฅ˜ํ‘œ ๋ฅ˜ํ•˜ ๋ฅ˜ํ•œ ๋ฅ˜ํ•ด ๋ฅ˜ํ–ฅ ๋ฅ˜ํ˜„ ๋ฅ˜ํ˜ผ ๋ฅ˜ํ™ ๋ฅ˜ํ™” ๋ฅ˜ํšจ ๋ฅ˜๋‚จ ๋ฅ˜๋ˆˆ ๋ฅ˜๋‹ฌ ๋ฅ˜๋‹น ๋ฅ˜๋ด„ ๋ฅ˜๋น„ ๋ฅ˜์Šฌ ๋ฅ˜์—ด ๋ฅ˜์˜ ๋ฅ˜์ž ๋ฅ˜ํƒœ ๋ฅ˜ํ˜œ ๋ฅ˜๋‚  ๋ฅ˜๋Š˜ ๋ฅ˜๋ถ„ ๋ฅ˜์ƒ˜ ๋ฅ˜์ˆœ ๋ฅ˜์ธ ๋ฅ˜์žฅ ๋ฅ˜์ „ ๋ฅ˜์ข… ๋ฅ˜์ฃผ ๋ฅ˜์ง€ ๋ฅ˜์ง„ ๋ฅ˜์ฐฌ ๋ฅ˜์ฒ˜ ๋ฆฌ๋‚˜ ๋ฆฌ๋‚œ ๋ฆฌ๋‚ด ๋ฆฌ๋‹ค ๋ฆฌ๋‹จ ๋ฆฌ๋‹ด ๋ฆฌ๋„ ๋ฆฌ๋ผ ๋ฆฌ๋ž˜ ๋ฆฌ๋ฅ˜ ๋ฆฌ๋ฆฌ ๋ฆฌ๋ชจ ๋ฆฌ๋ฌด ๋ฆฌ๋ฏธ ๋ฆฌ๋ฏผ ๋ฆฌ์‚ฌ ๋ฆฌ์‚ฐ ๋ฆฌ์ƒ ๋ฆฌ์ƒˆ ๋ฆฌ์ƒ ๋ฆฌ์„œ ๋ฆฌ์„  ๋ฆฌ์„ค ๋ฆฌ์„ฌ ๋ฆฌ์„ฑ ๋ฆฌ์†Œ ๋ฆฌ์†” ๋ฆฌ์†œ ๋ฆฌ์†ก ๋ฆฌ์ˆ˜ ๋ฆฌ์‹œ ๋ฆฌ์‹  ๋ฆฌ์‹ค ๋ฆฌ์‹ฌ ๋ฆฌ์•„ ๋ฆฌ์•ˆ ๋ฆฌ์•  ๋ฆฌ์–‘ ๋ฆฌ์—ฌ ๋ฆฌ์—ฐ ๋ฆฌ์˜ˆ ๋ฆฌ์˜ค ๋ฆฌ์˜จ ๋ฆฌ์š” ๋ฆฌ์šฐ ๋ฆฌ์›” ๋ฆฌ์œ  ๋ฆฌ์œค ๋ฆฌ์œจ ๋ฆฌ์€ ๋ฆฌ์ด ๋ฆฌ์ผ ๋ฆฌ์ž„ ๋ฆฌ์ • ๋ฆฌ์ฐจ ๋ฆฌ์ฐฝ ๋ฆฌ์ฑ„ ๋ฆฌ์ฒœ ๋ฆฌ์ฒจ ๋ฆฌ์ฒญ ๋ฆฌ์ดˆ ๋ฆฌ์ด ๋ฆฌํ‘œ ๋ฆฌํ•˜ ๋ฆฌํ•œ ๋ฆฌํ•ด ๋ฆฌํ–ฅ ๋ฆฌํ˜„ ๋ฆฌํ˜ผ ๋ฆฌํ™ ๋ฆฌํ™” ๋ฆฌํšจ ๋ฆฌ๋‚จ ๋ฆฌ๋ˆˆ ๋ฆฌ๋‹ฌ ๋ฆฌ๋‹น ๋ฆฌ๋ด„ ๋ฆฌ๋น„ ๋ฆฌ์Šฌ ๋ฆฌ์—ด ๋ฆฌ์˜ ๋ฆฌ์ž ๋ฆฌํƒœ ๋ฆฌํ˜œ ๋ฆฌ๋‚  ๋ฆฌ๋Š˜ ๋ฆฌ๋ถ„ ๋ฆฌ์ƒ˜ ๋ฆฌ์ˆœ ๋ฆฌ์ธ ๋ฆฌ์žฅ ๋ฆฌ์ „ ๋ฆฌ์ข… ๋ฆฌ์ฃผ ๋ฆฌ์ง€ ๋ฆฌ์ง„ ๋ฆฌ์ฐฌ ๋ฆฌ์ฒ˜ ๋ชจ๋‚˜ ๋ชจ๋‚œ ๋ชจ๋‚ด ๋ชจ๋‹ค ๋ชจ๋‹จ ๋ชจ๋‹ด ๋ชจ๋„ ๋ชจ๋ผ ๋ชจ๋ž˜ ๋ชจ๋ฅ˜ ๋ชจ๋ฆฌ ๋ชจ๋ชจ ๋ชจ๋ฌด ๋ชจ๋ฏธ ๋ชจ๋ฏผ ๋ชจ์‚ฌ ๋ชจ์‚ฐ ๋ชจ์ƒ ๋ชจ์ƒˆ ๋ชจ์ƒ ๋ชจ์„œ ๋ชจ์„  ๋ชจ์„ค ๋ชจ์„ฌ ๋ชจ์„ฑ ๋ชจ์†Œ ๋ชจ์†” ๋ชจ์†œ ๋ชจ์†ก ๋ชจ์ˆ˜ ๋ชจ์‹œ ๋ชจ์‹  ๋ชจ์‹ค ๋ชจ์‹ฌ ๋ชจ์•„ ๋ชจ์•ˆ ๋ชจ์•  ๋ชจ์–‘ ๋ชจ์—ฌ ๋ชจ์—ฐ ๋ชจ์˜ˆ ๋ชจ์˜ค ๋ชจ์˜จ ๋ชจ์š” ๋ชจ์šฐ ๋ชจ์›” ๋ชจ์œ  ๋ชจ์œค ๋ชจ์œจ ๋ชจ์€ ๋ชจ์ด ๋ชจ์ผ ๋ชจ์ž„ ๋ชจ์ • ๋ชจ์ฐจ ๋ชจ์ฐฝ ๋ชจ์ฑ„ ๋ชจ์ฒœ ๋ชจ์ฒจ ๋ชจ์ฒญ ๋ชจ์ดˆ ๋ชจ์ด ๋ชจํ‘œ ๋ชจํ•˜ ๋ชจํ•œ ๋ชจํ•ด ๋ชจํ–ฅ ๋ชจํ˜„ ๋ชจํ˜ผ ๋ชจํ™ ๋ชจํ™” ๋ชจํšจ ๋ชจ๋‚จ ๋ชจ๋ˆˆ ๋ชจ๋‹ฌ ๋ชจ๋‹น ๋ชจ๋ด„ ๋ชจ๋น„ ๋ชจ์Šฌ ๋ชจ์—ด ๋ชจ์˜ ๋ชจ์ž ๋ชจํƒœ ๋ชจํ˜œ ๋ชจ๋‚  ๋ชจ๋Š˜ ๋ชจ๋ถ„ ๋ชจ์ƒ˜ ๋ชจ์ˆœ ๋ชจ์ธ ๋ชจ์žฅ ๋ชจ์ „ ๋ชจ์ข… ๋ชจ์ฃผ ๋ชจ์ง€ ๋ชจ์ง„ ๋ชจ์ฐฌ ๋ชจ์ฒ˜ ๋ฌด๋‚˜ ๋ฌด๋‚œ ๋ฌด๋‚ด ๋ฌด๋‹ค ๋ฌด๋‹จ ๋ฌด๋‹ด ๋ฌด๋„ ๋ฌด๋ผ ๋ฌด๋ž˜ ๋ฌด๋ฅ˜ ๋ฌด๋ฆฌ ๋ฌด๋ชจ ๋ฌด๋ฌด ๋ฌด๋ฏธ ๋ฌด๋ฏผ ๋ฌด์‚ฌ ๋ฌด์‚ฐ ๋ฌด์ƒ ๋ฌด์ƒˆ ๋ฌด์ƒ ๋ฌด์„œ ๋ฌด์„  ๋ฌด์„ค ๋ฌด์„ฌ ๋ฌด์„ฑ ๋ฌด์†Œ ๋ฌด์†” ๋ฌด์†œ ๋ฌด์†ก ๋ฌด์ˆ˜ ๋ฌด์‹œ ๋ฌด์‹  ๋ฌด์‹ค ๋ฌด์‹ฌ ๋ฌด์•„ ๋ฌด์•ˆ ๋ฌด์•  ๋ฌด์–‘ ๋ฌด์—ฌ ๋ฌด์—ฐ ๋ฌด์˜ˆ ๋ฌด์˜ค ๋ฌด์˜จ ๋ฌด์š” ๋ฌด์šฐ ๋ฌด์›” ๋ฌด์œ  ๋ฌด์œค ๋ฌด์œจ ๋ฌด์€ ๋ฌด์ด ๋ฌด์ผ ๋ฌด์ž„ ๋ฌด์ • ๋ฌด์ฐจ ๋ฌด์ฐฝ ๋ฌด์ฑ„ ๋ฌด์ฒœ ๋ฌด์ฒจ ๋ฌด์ฒญ ๋ฌด์ดˆ ๋ฌด์ด ๋ฌดํ‘œ ๋ฌดํ•˜ ๋ฌดํ•œ ๋ฌดํ•ด ๋ฌดํ–ฅ ๋ฌดํ˜„ ๋ฌดํ˜ผ ๋ฌดํ™ ๋ฌดํ™” ๋ฌดํšจ ๋ฌด๋‚จ ๋ฌด๋ˆˆ ๋ฌด๋‹ฌ ๋ฌด๋‹น ๋ฌด๋ด„ ๋ฌด๋น„ ๋ฌด์Šฌ ๋ฌด์—ด ๋ฌด์˜ ๋ฌด์ž ๋ฌดํƒœ ๋ฌดํ˜œ ๋ฌด๋‚  ๋ฌด๋Š˜ ๋ฌด๋ถ„ ๋ฌด์ƒ˜ ๋ฌด์ˆœ ๋ฌด์ธ ๋ฌด์žฅ ๋ฌด์ „ ๋ฌด์ข… ๋ฌด์ฃผ ๋ฌด์ง€ ๋ฌด์ง„ ๋ฌด์ฐฌ ๋ฌด์ฒ˜ ๋ฏธ๋‚˜ ๋ฏธ๋‚œ ๋ฏธ๋‚ด ๋ฏธ๋‹ค ๋ฏธ๋‹จ ๋ฏธ๋‹ด ๋ฏธ๋„ ๋ฏธ๋ผ ๋ฏธ๋ž˜ ๋ฏธ๋ฅ˜ ๋ฏธ๋ฆฌ ๋ฏธ๋ชจ ๋ฏธ๋ฌด ๋ฏธ๋ฏธ ๋ฏธ๋ฏผ ๋ฏธ์‚ฌ ๋ฏธ์‚ฐ ๋ฏธ์ƒ ๋ฏธ์ƒˆ ๋ฏธ์ƒ ๋ฏธ์„œ ๋ฏธ์„  ๋ฏธ์„ค ๋ฏธ์„ฌ ๋ฏธ์„ฑ ๋ฏธ์†Œ ๋ฏธ์†” ๋ฏธ์†œ ๋ฏธ์†ก ๋ฏธ์ˆ˜ ๋ฏธ์‹œ ๋ฏธ์‹  ๋ฏธ์‹ค ๋ฏธ์‹ฌ ๋ฏธ์•„ ๋ฏธ์•ˆ ๋ฏธ์•  ๋ฏธ์–‘ ๋ฏธ์—ฌ ๋ฏธ์—ฐ ๋ฏธ์˜ˆ ๋ฏธ์˜ค ๋ฏธ์˜จ ๋ฏธ์š” ๋ฏธ์šฐ ๋ฏธ์›” ๋ฏธ์œ  ๋ฏธ์œค ๋ฏธ์œจ ๋ฏธ์€ ๋ฏธ์ด ๋ฏธ์ผ ๋ฏธ์ž„ ๋ฏธ์ • ๋ฏธ์ฐจ ๋ฏธ์ฐฝ ๋ฏธ์ฑ„ ๋ฏธ์ฒœ ๋ฏธ์ฒจ ๋ฏธ์ฒญ ๋ฏธ์ดˆ ๋ฏธ์ด ๋ฏธํ‘œ ๋ฏธํ•˜ ๋ฏธํ•œ ๋ฏธํ•ด ๋ฏธํ–ฅ ๋ฏธํ˜„ ๋ฏธํ˜ผ ๋ฏธํ™ ๋ฏธํ™” ๋ฏธํšจ ๋ฏธ๋‚จ ๋ฏธ๋ˆˆ ๋ฏธ๋‹ฌ ๋ฏธ๋‹น ๋ฏธ๋ด„ ๋ฏธ๋น„ ๋ฏธ์Šฌ ๋ฏธ์—ด ๋ฏธ์˜ ๋ฏธ์ž ๋ฏธํƒœ ๋ฏธํ˜œ ๋ฏธ๋‚  ๋ฏธ๋Š˜ ๋ฏธ๋ถ„ ๋ฏธ์ƒ˜ ๋ฏธ์ˆœ ๋ฏธ์ธ ๋ฏธ์žฅ ๋ฏธ์ „ ๋ฏธ์ข… ๋ฏธ์ฃผ ๋ฏธ์ง€ ๋ฏธ์ง„ ๋ฏธ์ฐฌ ๋ฏธ์ฒ˜ ๋ฏผ๋‚˜ ๋ฏผ๋‚œ ๋ฏผ๋‚ด ๋ฏผ๋‹ค ๋ฏผ๋‹จ ๋ฏผ๋‹ด ๋ฏผ๋„ ๋ฏผ๋ผ ๋ฏผ๋ž˜ ๋ฏผ๋ฅ˜ ๋ฏผ๋ฆฌ ๋ฏผ๋ชจ ๋ฏผ๋ฌด ๋ฏผ๋ฏธ ๋ฏผ๋ฏผ ๋ฏผ์‚ฌ ๋ฏผ์‚ฐ ๋ฏผ์ƒ ๋ฏผ์ƒˆ ๋ฏผ์ƒ ๋ฏผ์„œ ๋ฏผ์„  ๋ฏผ์„ค ๋ฏผ์„ฌ ๋ฏผ์„ฑ ๋ฏผ์†Œ ๋ฏผ์†” ๋ฏผ์†œ ๋ฏผ์†ก ๋ฏผ์ˆ˜ ๋ฏผ์‹œ ๋ฏผ์‹  ๋ฏผ์‹ค ๋ฏผ์‹ฌ ๋ฏผ์•„ ๋ฏผ์•ˆ ๋ฏผ์•  ๋ฏผ์–‘ ๋ฏผ์—ฌ ๋ฏผ์—ฐ ๋ฏผ์˜ˆ ๋ฏผ์˜ค ๋ฏผ์˜จ ๋ฏผ์š” ๋ฏผ์šฐ ๋ฏผ์›” ๋ฏผ์œ  ๋ฏผ์œค ๋ฏผ์œจ ๋ฏผ์€ ๋ฏผ์ด ๋ฏผ์ผ ๋ฏผ์ž„ ๋ฏผ์ • ๋ฏผ์ฐจ ๋ฏผ์ฐฝ ๋ฏผ์ฑ„ ๋ฏผ์ฒœ ๋ฏผ์ฒจ ๋ฏผ์ฒญ ๋ฏผ์ดˆ ๋ฏผ์ด ๋ฏผํ‘œ ๋ฏผํ•˜ ๋ฏผํ•œ ๋ฏผํ•ด ๋ฏผํ–ฅ ๋ฏผํ˜„ ๋ฏผํ˜ผ ๋ฏผํ™ ๋ฏผํ™” ๋ฏผํšจ ๋ฏผ๋‚จ ๋ฏผ๋ˆˆ ๋ฏผ๋‹ฌ ๋ฏผ๋‹น ๋ฏผ๋ด„ ๋ฏผ๋น„ ๋ฏผ์Šฌ ๋ฏผ์—ด ๋ฏผ์˜ ๋ฏผ์ž ๋ฏผํƒœ ๋ฏผํ˜œ ๋ฏผ๋‚  ๋ฏผ๋Š˜ ๋ฏผ๋ถ„ ๋ฏผ์ƒ˜ ๋ฏผ์ˆœ ๋ฏผ์ธ ๋ฏผ์žฅ ๋ฏผ์ „ ๋ฏผ์ข… ๋ฏผ์ฃผ ๋ฏผ์ง€ ๋ฏผ์ง„ ๋ฏผ์ฐฌ ๋ฏผ์ฒ˜ ์‚ฌ๋‚˜ ์‚ฌ๋‚œ ์‚ฌ๋‚ด ์‚ฌ๋‹ค ์‚ฌ๋‹จ ์‚ฌ๋‹ด ์‚ฌ๋„ ์‚ฌ๋ผ ์‚ฌ๋ž˜ ์‚ฌ๋ฅ˜ ์‚ฌ๋ฆฌ ์‚ฌ๋ชจ ์‚ฌ๋ฌด ์‚ฌ๋ฏธ ์‚ฌ๋ฏผ ์‚ฌ์‚ฌ ์‚ฌ์‚ฐ ์‚ฌ์ƒ ์‚ฌ์ƒˆ ์‚ฌ์ƒ ์‚ฌ์„œ ์‚ฌ์„  ์‚ฌ์„ค ์‚ฌ์„ฌ ์‚ฌ์„ฑ ์‚ฌ์†Œ ์‚ฌ์†” ์‚ฌ์†œ ์‚ฌ์†ก ์‚ฌ์ˆ˜ ์‚ฌ์‹œ ์‚ฌ์‹  ์‚ฌ์‹ค ์‚ฌ์‹ฌ ์‚ฌ์•„ ์‚ฌ์•ˆ ์‚ฌ์•  ์‚ฌ์–‘ ์‚ฌ์—ฌ ์‚ฌ์—ฐ ์‚ฌ์˜ˆ ์‚ฌ์˜ค ์‚ฌ์˜จ ์‚ฌ์š” ์‚ฌ์šฐ ์‚ฌ์›” ์‚ฌ์œ  ์‚ฌ์œค ์‚ฌ์œจ ์‚ฌ์€ ์‚ฌ์ด ์‚ฌ์ผ ์‚ฌ์ž„ ์‚ฌ์ • ์‚ฌ์ฐจ ์‚ฌ์ฐฝ ์‚ฌ์ฑ„ ์‚ฌ์ฒœ ์‚ฌ์ฒจ ์‚ฌ์ฒญ ์‚ฌ์ดˆ ์‚ฌ์ด ์‚ฌํ‘œ ์‚ฌํ•˜ ์‚ฌํ•œ ์‚ฌํ•ด ์‚ฌํ–ฅ ์‚ฌํ˜„ ์‚ฌํ˜ผ ์‚ฌํ™ ์‚ฌํ™” ์‚ฌํšจ ์‚ฌ๋‚จ ์‚ฌ๋ˆˆ ์‚ฌ๋‹ฌ ์‚ฌ๋‹น ์‚ฌ๋ด„ ์‚ฌ๋น„ ์‚ฌ์Šฌ ์‚ฌ์—ด ์‚ฌ์˜ ์‚ฌ์ž ์‚ฌํƒœ ์‚ฌํ˜œ ์‚ฌ๋‚  ์‚ฌ๋Š˜ ์‚ฌ๋ถ„ ์‚ฌ์ƒ˜ ์‚ฌ์ˆœ ์‚ฌ์ธ ์‚ฌ์žฅ ์‚ฌ์ „ ์‚ฌ์ข… ์‚ฌ์ฃผ ์‚ฌ์ง€ ์‚ฌ์ง„ ์‚ฌ์ฐฌ ์‚ฌ์ฒ˜ ์‚ฐ๋‚˜ ์‚ฐ๋‚œ ์‚ฐ๋‚ด ์‚ฐ๋‹ค ์‚ฐ๋‹จ ์‚ฐ๋‹ด ์‚ฐ๋„ ์‚ฐ๋ผ ์‚ฐ๋ž˜ ์‚ฐ๋ฅ˜ ์‚ฐ๋ฆฌ ์‚ฐ๋ชจ ์‚ฐ๋ฌด ์‚ฐ๋ฏธ ์‚ฐ๋ฏผ ์‚ฐ์‚ฌ ์‚ฐ์‚ฐ ์‚ฐ์ƒ ์‚ฐ์ƒˆ ์‚ฐ์ƒ ์‚ฐ์„œ ์‚ฐ์„  ์‚ฐ์„ค ์‚ฐ์„ฌ ์‚ฐ์„ฑ ์‚ฐ์†Œ ์‚ฐ์†” ์‚ฐ์†œ ์‚ฐ์†ก ์‚ฐ์ˆ˜ ์‚ฐ์‹œ ์‚ฐ์‹  ์‚ฐ์‹ค ์‚ฐ์‹ฌ ์‚ฐ์•„ ์‚ฐ์•ˆ ์‚ฐ์•  ์‚ฐ์–‘ ์‚ฐ์—ฌ ์‚ฐ์—ฐ ์‚ฐ์˜ˆ ์‚ฐ์˜ค ์‚ฐ์˜จ ์‚ฐ์š” ์‚ฐ์šฐ ์‚ฐ์›” ์‚ฐ์œ  ์‚ฐ์œค ์‚ฐ์œจ ์‚ฐ์€ ์‚ฐ์ด ์‚ฐ์ผ ์‚ฐ์ž„ ์‚ฐ์ • ์‚ฐ์ฐจ ์‚ฐ์ฐฝ ์‚ฐ์ฑ„ ์‚ฐ์ฒœ ์‚ฐ์ฒจ ์‚ฐ์ฒญ ์‚ฐ์ดˆ ์‚ฐ์ด ์‚ฐํ‘œ ์‚ฐํ•˜ ์‚ฐํ•œ ์‚ฐํ•ด ์‚ฐํ–ฅ ์‚ฐํ˜„ ์‚ฐํ˜ผ ์‚ฐํ™ ์‚ฐํ™” ์‚ฐํšจ ์‚ฐ๋‚จ ์‚ฐ๋ˆˆ ์‚ฐ๋‹ฌ ์‚ฐ๋‹น ์‚ฐ๋ด„ ์‚ฐ๋น„ ์‚ฐ์Šฌ ์‚ฐ์—ด ์‚ฐ์˜ ์‚ฐ์ž ์‚ฐํƒœ ์‚ฐํ˜œ ์‚ฐ๋‚  ์‚ฐ๋Š˜ ์‚ฐ๋ถ„ ์‚ฐ์ƒ˜ ์‚ฐ์ˆœ ์‚ฐ์ธ ์‚ฐ์žฅ ์‚ฐ์ „ ์‚ฐ์ข… ์‚ฐ์ฃผ ์‚ฐ์ง€ ์‚ฐ์ง„ ์‚ฐ์ฐฌ ์‚ฐ์ฒ˜ ์ƒ๋‚˜ ์ƒ๋‚œ ์ƒ๋‚ด ์ƒ๋‹ค ์ƒ๋‹จ ์ƒ๋‹ด ์ƒ๋„ ์ƒ๋ผ ์ƒ๋ž˜ ์ƒ๋ฅ˜ ์ƒ๋ฆฌ ์ƒ๋ชจ ์ƒ๋ฌด ์ƒ๋ฏธ ์ƒ๋ฏผ ์ƒ์‚ฌ ์ƒ์‚ฐ ์ƒ์ƒ ์ƒ์ƒˆ ์ƒ์ƒ ์ƒ์„œ ์ƒ์„  ์ƒ์„ค ์ƒ์„ฌ ์ƒ์„ฑ ์ƒ์†Œ ์ƒ์†” ์ƒ์†œ ์ƒ์†ก ์ƒ์ˆ˜ ์ƒ์‹œ ์ƒ์‹  ์ƒ์‹ค ์ƒ์‹ฌ ์ƒ์•„ ์ƒ์•ˆ ์ƒ์•  ์ƒ์–‘ ์ƒ์—ฌ ์ƒ์—ฐ ์ƒ์˜ˆ ์ƒ์˜ค ์ƒ์˜จ ์ƒ์š” ์ƒ์šฐ ์ƒ์›” ์ƒ์œ  ์ƒ์œค ์ƒ์œจ ์ƒ์€ ์ƒ์ด ์ƒ์ผ ์ƒ์ž„ ์ƒ์ • ์ƒ์ฐจ ์ƒ์ฐฝ ์ƒ์ฑ„ ์ƒ์ฒœ ์ƒ์ฒจ ์ƒ์ฒญ ์ƒ์ดˆ ์ƒ์ด ์ƒํ‘œ ์ƒํ•˜ ์ƒํ•œ ์ƒํ•ด ์ƒํ–ฅ ์ƒํ˜„ ์ƒํ˜ผ ์ƒํ™ ์ƒํ™” ์ƒํšจ ์ƒ๋‚จ ์ƒ๋ˆˆ ์ƒ๋‹ฌ ์ƒ๋‹น ์ƒ๋ด„ ์ƒ๋น„ ์ƒ์Šฌ ์ƒ์—ด ์ƒ์˜ ์ƒ์ž ์ƒํƒœ ์ƒํ˜œ ์ƒ๋‚  ์ƒ๋Š˜ ์ƒ๋ถ„ ์ƒ์ƒ˜ ์ƒ์ˆœ ์ƒ์ธ ์ƒ์žฅ ์ƒ์ „ ์ƒ์ข… ์ƒ์ฃผ ์ƒ์ง€ ์ƒ์ง„ ์ƒ์ฐฌ ์ƒ์ฒ˜ ์ƒˆ๋‚˜ ์ƒˆ๋‚œ ์ƒˆ๋‚ด ์ƒˆ๋‹ค ์ƒˆ๋‹จ ์ƒˆ๋‹ด ์ƒˆ๋„ ์ƒˆ๋ผ ์ƒˆ๋ž˜ ์ƒˆ๋ฅ˜ ์ƒˆ๋ฆฌ ์ƒˆ๋ชจ ์ƒˆ๋ฌด ์ƒˆ๋ฏธ ์ƒˆ๋ฏผ ์ƒˆ์‚ฌ ์ƒˆ์‚ฐ ์ƒˆ์ƒ ์ƒˆ์ƒˆ ์ƒˆ์ƒ ์ƒˆ์„œ ์ƒˆ์„  ์ƒˆ์„ค ์ƒˆ์„ฌ ์ƒˆ์„ฑ ์ƒˆ์†Œ ์ƒˆ์†” ์ƒˆ์†œ ์ƒˆ์†ก ์ƒˆ์ˆ˜ ์ƒˆ์‹œ ์ƒˆ์‹  ์ƒˆ์‹ค ์ƒˆ์‹ฌ ์ƒˆ์•„ ์ƒˆ์•ˆ ์ƒˆ์•  ์ƒˆ์–‘ ์ƒˆ์—ฌ ์ƒˆ์—ฐ ์ƒˆ์˜ˆ ์ƒˆ์˜ค ์ƒˆ์˜จ ์ƒˆ์š” ์ƒˆ์šฐ ์ƒˆ์›” ์ƒˆ์œ  ์ƒˆ์œค ์ƒˆ์œจ ์ƒˆ์€ ์ƒˆ์ด ์ƒˆ์ผ ์ƒˆ์ž„ ์ƒˆ์ • ์ƒˆ์ฐจ ์ƒˆ์ฐฝ ์ƒˆ์ฑ„ ์ƒˆ์ฒœ ์ƒˆ์ฒจ ์ƒˆ์ฒญ ์ƒˆ์ดˆ ์ƒˆ์ด ์ƒˆํ‘œ ์ƒˆํ•˜ ์ƒˆํ•œ ์ƒˆํ•ด ์ƒˆํ–ฅ ์ƒˆํ˜„ ์ƒˆํ˜ผ ์ƒˆํ™ ์ƒˆํ™” ์ƒˆํšจ ์ƒˆ๋‚จ ์ƒˆ๋ˆˆ ์ƒˆ๋‹ฌ ์ƒˆ๋‹น ์ƒˆ๋ด„ ์ƒˆ๋น„ ์ƒˆ์Šฌ ์ƒˆ์—ด ์ƒˆ์˜ ์ƒˆ์ž ์ƒˆํƒœ ์ƒˆํ˜œ ์ƒˆ๋‚  ์ƒˆ๋Š˜ ์ƒˆ๋ถ„ ์ƒˆ์ƒ˜ ์ƒˆ์ˆœ ์ƒˆ์ธ ์ƒˆ์žฅ ์ƒˆ์ „ ์ƒˆ์ข… ์ƒˆ์ฃผ ์ƒˆ์ง€ ์ƒˆ์ง„ ์ƒˆ์ฐฌ ์ƒˆ์ฒ˜ ์ƒ๋‚˜ ์ƒ๋‚œ ์ƒ๋‚ด ์ƒ๋‹ค ์ƒ๋‹จ ์ƒ๋‹ด ์ƒ๋„ ์ƒ๋ผ ์ƒ๋ž˜ ์ƒ๋ฅ˜ ์ƒ๋ฆฌ ์ƒ๋ชจ ์ƒ๋ฌด ์ƒ๋ฏธ ์ƒ๋ฏผ ์ƒ์‚ฌ ์ƒ์‚ฐ ์ƒ์ƒ ์ƒ์ƒˆ ์ƒ์ƒ ์ƒ์„œ ์ƒ์„  ์ƒ์„ค ์ƒ์„ฌ ์ƒ์„ฑ ์ƒ์†Œ ์ƒ์†” ์ƒ์†œ ์ƒ์†ก ์ƒ์ˆ˜ ์ƒ์‹œ ์ƒ์‹  ์ƒ์‹ค ์ƒ์‹ฌ ์ƒ์•„ ์ƒ์•ˆ ์ƒ์•  ์ƒ์–‘ ์ƒ์—ฌ ์ƒ์—ฐ ์ƒ์˜ˆ ์ƒ์˜ค ์ƒ์˜จ ์ƒ์š” ์ƒ์šฐ ์ƒ์›” ์ƒ์œ  ์ƒ์œค ์ƒ์œจ ์ƒ์€ ์ƒ์ด ์ƒ์ผ ์ƒ์ž„ ์ƒ์ • ์ƒ์ฐจ ์ƒ์ฐฝ ์ƒ์ฑ„ ์ƒ์ฒœ ์ƒ์ฒจ ์ƒ์ฒญ ์ƒ์ดˆ ์ƒ์ด ์ƒํ‘œ ์ƒํ•˜ ์ƒํ•œ ์ƒํ•ด ์ƒํ–ฅ ์ƒํ˜„ ์ƒํ˜ผ ์ƒํ™ ์ƒํ™” ์ƒํšจ ์ƒ๋‚จ ์ƒ๋ˆˆ ์ƒ๋‹ฌ ์ƒ๋‹น ์ƒ๋ด„ ์ƒ๋น„ ์ƒ์Šฌ ์ƒ์—ด ์ƒ์˜ ์ƒ์ž ์ƒํƒœ ์ƒํ˜œ ์ƒ๋‚  ์ƒ๋Š˜ ์ƒ๋ถ„ ์ƒ์ƒ˜ ์ƒ์ˆœ ์ƒ์ธ ์ƒ์žฅ ์ƒ์ „ ์ƒ์ข… ์ƒ์ฃผ ์ƒ์ง€ ์ƒ์ง„ ์ƒ์ฐฌ ์ƒ์ฒ˜ ์„œ๋‚˜ ์„œ๋‚œ ์„œ๋‚ด ์„œ๋‹ค ์„œ๋‹จ ์„œ๋‹ด ์„œ๋„ ์„œ๋ผ ์„œ๋ž˜ ์„œ๋ฅ˜ ์„œ๋ฆฌ ์„œ๋ชจ ์„œ๋ฌด ์„œ๋ฏธ ์„œ๋ฏผ ์„œ์‚ฌ ์„œ์‚ฐ ์„œ์ƒ ์„œ์ƒˆ ์„œ์ƒ ์„œ์„œ ์„œ์„  ์„œ์„ค ์„œ์„ฌ ์„œ์„ฑ ์„œ์†Œ ์„œ์†” ์„œ์†œ ์„œ์†ก ์„œ์ˆ˜ ์„œ์‹œ ์„œ์‹  ์„œ์‹ค ์„œ์‹ฌ ์„œ์•„ ์„œ์•ˆ ์„œ์•  ์„œ์–‘ ์„œ์—ฌ ์„œ์—ฐ ์„œ์˜ˆ ์„œ์˜ค ์„œ์˜จ ์„œ์š” ์„œ์šฐ ์„œ์›” ์„œ์œ  ์„œ์œค ์„œ์œจ ์„œ์€ ์„œ์ด ์„œ์ผ ์„œ์ž„ ์„œ์ • ์„œ์ฐจ ์„œ์ฐฝ ์„œ์ฑ„ ์„œ์ฒœ ์„œ์ฒจ ์„œ์ฒญ ์„œ์ดˆ ์„œ์ด ์„œํ‘œ ์„œํ•˜ ์„œํ•œ ์„œํ•ด ์„œํ–ฅ ์„œํ˜„ ์„œํ˜ผ ์„œํ™ ์„œํ™” ์„œํšจ ์„œ๋‚จ ์„œ๋ˆˆ ์„œ๋‹ฌ ์„œ๋‹น ์„œ๋ด„ ์„œ๋น„ ์„œ์Šฌ ์„œ์—ด ์„œ์˜ ์„œ์ž ์„œํƒœ ์„œํ˜œ ์„œ๋‚  ์„œ๋Š˜ ์„œ๋ถ„ ์„œ์ƒ˜ ์„œ์ˆœ ์„œ์ธ ์„œ์žฅ ์„œ์ „ ์„œ์ข… ์„œ์ฃผ ์„œ์ง€ ์„œ์ง„ ์„œ์ฐฌ ์„œ์ฒ˜ ์„ ๋‚˜ ์„ ๋‚œ ์„ ๋‚ด ์„ ๋‹ค ์„ ๋‹จ ์„ ๋‹ด ์„ ๋„ ์„ ๋ผ ์„ ๋ž˜ ์„ ๋ฅ˜ ์„ ๋ฆฌ ์„ ๋ชจ ์„ ๋ฌด ์„ ๋ฏธ ์„ ๋ฏผ ์„ ์‚ฌ ์„ ์‚ฐ ์„ ์ƒ ์„ ์ƒˆ ์„ ์ƒ ์„ ์„œ ์„ ์„  ์„ ์„ค ์„ ์„ฌ ์„ ์„ฑ ์„ ์†Œ ์„ ์†” ์„ ์†œ ์„ ์†ก ์„ ์ˆ˜ ์„ ์‹œ ์„ ์‹  ์„ ์‹ค ์„ ์‹ฌ ์„ ์•„ ์„ ์•ˆ ์„ ์•  ์„ ์–‘ ์„ ์—ฌ ์„ ์—ฐ ์„ ์˜ˆ ์„ ์˜ค ์„ ์˜จ ์„ ์š” ์„ ์šฐ ์„ ์›” ์„ ์œ  ์„ ์œค ์„ ์œจ ์„ ์€ ์„ ์ด ์„ ์ผ ์„ ์ž„ ์„ ์ • ์„ ์ฐจ ์„ ์ฐฝ ์„ ์ฑ„ ์„ ์ฒœ ์„ ์ฒจ ์„ ์ฒญ ์„ ์ดˆ ์„ ์ด ์„ ํ‘œ ์„ ํ•˜ ์„ ํ•œ ์„ ํ•ด ์„ ํ–ฅ ์„ ํ˜„ ์„ ํ˜ผ ์„ ํ™ ์„ ํ™” ์„ ํšจ ์„ ๋‚จ ์„ ๋ˆˆ ์„ ๋‹ฌ ์„ ๋‹น ์„ ๋ด„ ์„ ๋น„ ์„ ์Šฌ ์„ ์—ด ์„ ์˜ ์„ ์ž ์„ ํƒœ ์„ ํ˜œ ์„ ๋‚  ์„ ๋Š˜ ์„ ๋ถ„ ์„ ์ƒ˜ ์„ ์ˆœ ์„ ์ธ ์„ ์žฅ ์„ ์ „ ์„ ์ข… ์„ ์ฃผ ์„ ์ง€ ์„ ์ง„ ์„ ์ฐฌ ์„ ์ฒ˜ ์„ค๋‚˜ ์„ค๋‚œ ์„ค๋‚ด ์„ค๋‹ค ์„ค๋‹จ ์„ค๋‹ด ์„ค๋„ ์„ค๋ผ ์„ค๋ž˜ ์„ค๋ฅ˜ ์„ค๋ฆฌ ์„ค๋ชจ ์„ค๋ฌด ์„ค๋ฏธ ์„ค๋ฏผ ์„ค์‚ฌ ์„ค์‚ฐ ์„ค์ƒ ์„ค์ƒˆ ์„ค์ƒ ์„ค์„œ ์„ค์„  ์„ค์„ค ์„ค์„ฌ ์„ค์„ฑ ์„ค์†Œ ์„ค์†” ์„ค์†œ ์„ค์†ก ์„ค์ˆ˜ ์„ค์‹œ ์„ค์‹  ์„ค์‹ค ์„ค์‹ฌ ์„ค์•„ ์„ค์•ˆ ์„ค์•  ์„ค์–‘ ์„ค์—ฌ ์„ค์—ฐ ์„ค์˜ˆ ์„ค์˜ค ์„ค์˜จ ์„ค์š” ์„ค์šฐ ์„ค์›” ์„ค์œ  ์„ค์œค ์„ค์œจ ์„ค์€ ์„ค์ด ์„ค์ผ ์„ค์ž„ ์„ค์ • ์„ค์ฐจ ์„ค์ฐฝ ์„ค์ฑ„ ์„ค์ฒœ ์„ค์ฒจ ์„ค์ฒญ ์„ค์ดˆ ์„ค์ด ์„คํ‘œ ์„คํ•˜ ์„คํ•œ ์„คํ•ด ์„คํ–ฅ ์„คํ˜„ ์„คํ˜ผ ์„คํ™ ์„คํ™” ์„คํšจ ์„ค๋‚จ ์„ค๋ˆˆ ์„ค๋‹ฌ ์„ค๋‹น ์„ค๋ด„ ์„ค๋น„ ์„ค์Šฌ ์„ค์—ด ์„ค์˜ ์„ค์ž ์„คํƒœ ์„คํ˜œ ์„ค๋‚  ์„ค๋Š˜ ์„ค๋ถ„ ์„ค์ƒ˜ ์„ค์ˆœ ์„ค์ธ ์„ค์žฅ ์„ค์ „ ์„ค์ข… ์„ค์ฃผ ์„ค์ง€ ์„ค์ง„ ์„ค์ฐฌ ์„ค์ฒ˜ ์„ฌ๋‚˜ ์„ฌ๋‚œ ์„ฌ๋‚ด ์„ฌ๋‹ค ์„ฌ๋‹จ ์„ฌ๋‹ด ์„ฌ๋„ ์„ฌ๋ผ ์„ฌ๋ž˜ ์„ฌ๋ฅ˜ ์„ฌ๋ฆฌ ์„ฌ๋ชจ ์„ฌ๋ฌด ์„ฌ๋ฏธ ์„ฌ๋ฏผ ์„ฌ์‚ฌ ์„ฌ์‚ฐ ์„ฌ์ƒ ์„ฌ์ƒˆ ์„ฌ์ƒ ์„ฌ์„œ ์„ฌ์„  ์„ฌ์„ค ์„ฌ์„ฌ ์„ฌ์„ฑ ์„ฌ์†Œ ์„ฌ์†” ์„ฌ์†œ ์„ฌ์†ก ์„ฌ์ˆ˜ ์„ฌ์‹œ ์„ฌ์‹  ์„ฌ์‹ค ์„ฌ์‹ฌ ์„ฌ์•„ ์„ฌ์•ˆ ์„ฌ์•  ์„ฌ์–‘ ์„ฌ์—ฌ ์„ฌ์—ฐ ์„ฌ์˜ˆ ์„ฌ์˜ค ์„ฌ์˜จ ์„ฌ์š” ์„ฌ์šฐ ์„ฌ์›” ์„ฌ์œ  ์„ฌ์œค ์„ฌ์œจ ์„ฌ์€ ์„ฌ์ด ์„ฌ์ผ ์„ฌ์ž„ ์„ฌ์ • ์„ฌ์ฐจ ์„ฌ์ฐฝ ์„ฌ์ฑ„ ์„ฌ์ฒœ ์„ฌ์ฒจ ์„ฌ์ฒญ ์„ฌ์ดˆ ์„ฌ์ด ์„ฌํ‘œ ์„ฌํ•˜ ์„ฌํ•œ ์„ฌํ•ด ์„ฌํ–ฅ ์„ฌํ˜„ ์„ฌํ˜ผ ์„ฌํ™ ์„ฌํ™” ์„ฌํšจ ์„ฌ๋‚จ ์„ฌ๋ˆˆ ์„ฌ๋‹ฌ ์„ฌ๋‹น ์„ฌ๋ด„ ์„ฌ๋น„ ์„ฌ์Šฌ ์„ฌ์—ด ์„ฌ์˜ ์„ฌ์ž ์„ฌํƒœ ์„ฌํ˜œ ์„ฌ๋‚  ์„ฌ๋Š˜ ์„ฌ๋ถ„ ์„ฌ์ƒ˜ ์„ฌ์ˆœ ์„ฌ์ธ ์„ฌ์žฅ ์„ฌ์ „ ์„ฌ์ข… ์„ฌ์ฃผ ์„ฌ์ง€ ์„ฌ์ง„ ์„ฌ์ฐฌ ์„ฌ์ฒ˜ ์„ฑ๋‚˜ ์„ฑ๋‚œ ์„ฑ๋‚ด ์„ฑ๋‹ค ์„ฑ๋‹จ ์„ฑ๋‹ด ์„ฑ๋„ ์„ฑ๋ผ ์„ฑ๋ž˜ ์„ฑ๋ฅ˜ ์„ฑ๋ฆฌ ์„ฑ๋ชจ ์„ฑ๋ฌด ์„ฑ๋ฏธ ์„ฑ๋ฏผ ์„ฑ์‚ฌ ์„ฑ์‚ฐ ์„ฑ์ƒ ์„ฑ์ƒˆ ์„ฑ์ƒ ์„ฑ์„œ ์„ฑ์„  ์„ฑ์„ค ์„ฑ์„ฌ ์„ฑ์„ฑ ์„ฑ์†Œ ์„ฑ์†” ์„ฑ์†œ ์„ฑ์†ก ์„ฑ์ˆ˜ ์„ฑ์‹œ ์„ฑ์‹  ์„ฑ์‹ค ์„ฑ์‹ฌ ์„ฑ์•„ ์„ฑ์•ˆ ์„ฑ์•  ์„ฑ์–‘ ์„ฑ์—ฌ ์„ฑ์—ฐ ์„ฑ์˜ˆ ์„ฑ์˜ค ์„ฑ์˜จ ์„ฑ์š” ์„ฑ์šฐ ์„ฑ์›” ์„ฑ์œ  ์„ฑ์œค ์„ฑ์œจ ์„ฑ์€ ์„ฑ์ด ์„ฑ์ผ ์„ฑ์ž„ ์„ฑ์ • ์„ฑ์ฐจ ์„ฑ์ฐฝ ์„ฑ์ฑ„ ์„ฑ์ฒœ ์„ฑ์ฒจ ์„ฑ์ฒญ ์„ฑ์ดˆ ์„ฑ์ด ์„ฑํ‘œ ์„ฑํ•˜ ์„ฑํ•œ ์„ฑํ•ด ์„ฑํ–ฅ ์„ฑํ˜„ ์„ฑํ˜ผ ์„ฑํ™ ์„ฑํ™” ์„ฑํšจ ์„ฑ๋‚จ ์„ฑ๋ˆˆ ์„ฑ๋‹ฌ ์„ฑ๋‹น ์„ฑ๋ด„ ์„ฑ๋น„ ์„ฑ์Šฌ ์„ฑ์—ด ์„ฑ์˜ ์„ฑ์ž ์„ฑํƒœ ์„ฑํ˜œ ์„ฑ๋‚  ์„ฑ๋Š˜ ์„ฑ๋ถ„ ์„ฑ์ƒ˜ ์„ฑ์ˆœ ์„ฑ์ธ ์„ฑ์žฅ ์„ฑ์ „ ์„ฑ์ข… ์„ฑ์ฃผ ์„ฑ์ง€ ์„ฑ์ง„ ์„ฑ์ฐฌ ์„ฑ์ฒ˜ ์†Œ๋‚˜ ์†Œ๋‚œ ์†Œ๋‚ด ์†Œ๋‹ค ์†Œ๋‹จ ์†Œ๋‹ด ์†Œ๋„ ์†Œ๋ผ ์†Œ๋ž˜ ์†Œ๋ฅ˜ ์†Œ๋ฆฌ ์†Œ๋ชจ ์†Œ๋ฌด ์†Œ๋ฏธ ์†Œ๋ฏผ ์†Œ์‚ฌ ์†Œ์‚ฐ ์†Œ์ƒ ์†Œ์ƒˆ ์†Œ์ƒ ์†Œ์„œ ์†Œ์„  ์†Œ์„ค ์†Œ์„ฌ ์†Œ์„ฑ ์†Œ์†Œ ์†Œ์†” ์†Œ์†œ ์†Œ์†ก ์†Œ์ˆ˜ ์†Œ์‹œ ์†Œ์‹  ์†Œ์‹ค ์†Œ์‹ฌ ์†Œ์•„ ์†Œ์•ˆ ์†Œ์•  ์†Œ์–‘ ์†Œ์—ฌ ์†Œ์—ฐ ์†Œ์˜ˆ ์†Œ์˜ค ์†Œ์˜จ ์†Œ์š” ์†Œ์šฐ ์†Œ์›” ์†Œ์œ  ์†Œ์œค ์†Œ์œจ ์†Œ์€ ์†Œ์ด ์†Œ์ผ ์†Œ์ž„ ์†Œ์ • ์†Œ์ฐจ ์†Œ์ฐฝ ์†Œ์ฑ„ ์†Œ์ฒœ ์†Œ์ฒจ ์†Œ์ฒญ ์†Œ์ดˆ ์†Œ์ด ์†Œํ‘œ ์†Œํ•˜ ์†Œํ•œ ์†Œํ•ด ์†Œํ–ฅ ์†Œํ˜„ ์†Œํ˜ผ ์†Œํ™ ์†Œํ™” ์†Œํšจ ์†Œ๋‚จ ์†Œ๋ˆˆ ์†Œ๋‹ฌ ์†Œ๋‹น ์†Œ๋ด„ ์†Œ๋น„ ์†Œ์Šฌ ์†Œ์—ด ์†Œ์˜ ์†Œ์ž ์†Œํƒœ ์†Œํ˜œ ์†Œ๋‚  ์†Œ๋Š˜ ์†Œ๋ถ„ ์†Œ์ƒ˜ ์†Œ์ˆœ ์†Œ์ธ ์†Œ์žฅ ์†Œ์ „ ์†Œ์ข… ์†Œ์ฃผ ์†Œ์ง€ ์†Œ์ง„ ์†Œ์ฐฌ ์†Œ์ฒ˜ ์†”๋‚˜ ์†”๋‚œ ์†”๋‚ด ์†”๋‹ค ์†”๋‹จ ์†”๋‹ด ์†”๋„ ์†”๋ผ ์†”๋ž˜ ์†”๋ฅ˜ ์†”๋ฆฌ ์†”๋ชจ ์†”๋ฌด ์†”๋ฏธ ์†”๋ฏผ ์†”์‚ฌ ์†”์‚ฐ ์†”์ƒ ์†”์ƒˆ ์†”์ƒ ์†”์„œ ์†”์„  ์†”์„ค ์†”์„ฌ ์†”์„ฑ ์†”์†Œ ์†”์†” ์†”์†œ ์†”์†ก ์†”์ˆ˜ ์†”์‹œ ์†”์‹  ์†”์‹ค ์†”์‹ฌ ์†”์•„ ์†”์•ˆ ์†”์•  ์†”์–‘ ์†”์—ฌ ์†”์—ฐ ์†”์˜ˆ ์†”์˜ค ์†”์˜จ ์†”์š” ์†”์šฐ ์†”์›” ์†”์œ  ์†”์œค ์†”์œจ ์†”์€ ์†”์ด ์†”์ผ ์†”์ž„ ์†”์ • ์†”์ฐจ ์†”์ฐฝ ์†”์ฑ„ ์†”์ฒœ ์†”์ฒจ ์†”์ฒญ ์†”์ดˆ ์†”์ด ์†”ํ‘œ ์†”ํ•˜ ์†”ํ•œ ์†”ํ•ด ์†”ํ–ฅ ์†”ํ˜„ ์†”ํ˜ผ ์†”ํ™ ์†”ํ™” ์†”ํšจ ์†”๋‚จ ์†”๋ˆˆ ์†”๋‹ฌ ์†”๋‹น ์†”๋ด„ ์†”๋น„ ์†”์Šฌ ์†”์—ด ์†”์˜ ์†”์ž ์†”ํƒœ ์†”ํ˜œ ์†”๋‚  ์†”๋Š˜ ์†”๋ถ„ ์†”์ƒ˜ ์†”์ˆœ ์†”์ธ ์†”์žฅ ์†”์ „ ์†”์ข… ์†”์ฃผ ์†”์ง€ ์†”์ง„ ์†”์ฐฌ ์†”์ฒ˜ ์†œ๋‚˜ ์†œ๋‚œ ์†œ๋‚ด ์†œ๋‹ค ์†œ๋‹จ ์†œ๋‹ด ์†œ๋„ ์†œ๋ผ ์†œ๋ž˜ ์†œ๋ฅ˜ ์†œ๋ฆฌ ์†œ๋ชจ ์†œ๋ฌด ์†œ๋ฏธ ์†œ๋ฏผ ์†œ์‚ฌ ์†œ์‚ฐ ์†œ์ƒ ์†œ์ƒˆ ์†œ์ƒ ์†œ์„œ ์†œ์„  ์†œ์„ค ์†œ์„ฌ ์†œ์„ฑ ์†œ์†Œ ์†œ์†” ์†œ์†œ ์†œ์†ก ์†œ์ˆ˜ ์†œ์‹œ ์†œ์‹  ์†œ์‹ค ์†œ์‹ฌ ์†œ์•„ ์†œ์•ˆ ์†œ์•  ์†œ์–‘ ์†œ์—ฌ ์†œ์—ฐ ์†œ์˜ˆ ์†œ์˜ค ์†œ์˜จ ์†œ์š” ์†œ์šฐ ์†œ์›” ์†œ์œ  ์†œ์œค ์†œ์œจ ์†œ์€ ์†œ์ด ์†œ์ผ ์†œ์ž„ ์†œ์ • ์†œ์ฐจ ์†œ์ฐฝ ์†œ์ฑ„ ์†œ์ฒœ ์†œ์ฒจ ์†œ์ฒญ ์†œ์ดˆ ์†œ์ด ์†œํ‘œ ์†œํ•˜ ์†œํ•œ ์†œํ•ด ์†œํ–ฅ ์†œํ˜„ ์†œํ˜ผ ์†œํ™ ์†œํ™” ์†œํšจ ์†œ๋‚จ ์†œ๋ˆˆ ์†œ๋‹ฌ ์†œ๋‹น ์†œ๋ด„ ์†œ๋น„ ์†œ์Šฌ ์†œ์—ด ์†œ์˜ ์†œ์ž ์†œํƒœ ์†œํ˜œ ์†œ๋‚  ์†œ๋Š˜ ์†œ๋ถ„ ์†œ์ƒ˜ ์†œ์ˆœ ์†œ์ธ ์†œ์žฅ ์†œ์ „ ์†œ์ข… ์†œ์ฃผ ์†œ์ง€ ์†œ์ง„ ์†œ์ฐฌ ์†œ์ฒ˜ ์†ก๋‚˜ ์†ก๋‚œ ์†ก๋‚ด ์†ก๋‹ค ์†ก๋‹จ ์†ก๋‹ด ์†ก๋„ ์†ก๋ผ ์†ก๋ž˜ ์†ก๋ฅ˜ ์†ก๋ฆฌ ์†ก๋ชจ ์†ก๋ฌด ์†ก๋ฏธ ์†ก๋ฏผ ์†ก์‚ฌ ์†ก์‚ฐ ์†ก์ƒ ์†ก์ƒˆ ์†ก์ƒ ์†ก์„œ ์†ก์„  ์†ก์„ค ์†ก์„ฌ ์†ก์„ฑ ์†ก์†Œ ์†ก์†” ์†ก์†œ ์†ก์†ก ์†ก์ˆ˜ ์†ก์‹œ ์†ก์‹  ์†ก์‹ค ์†ก์‹ฌ ์†ก์•„ ์†ก์•ˆ ์†ก์•  ์†ก์–‘ ์†ก์—ฌ ์†ก์—ฐ ์†ก์˜ˆ ์†ก์˜ค ์†ก์˜จ ์†ก์š” ์†ก์šฐ ์†ก์›” ์†ก์œ  ์†ก์œค ์†ก์œจ ์†ก์€ ์†ก์ด ์†ก์ผ ์†ก์ž„ ์†ก์ • ์†ก์ฐจ ์†ก์ฐฝ ์†ก์ฑ„ ์†ก์ฒœ ์†ก์ฒจ ์†ก์ฒญ ์†ก์ดˆ ์†ก์ด ์†กํ‘œ ์†กํ•˜ ์†กํ•œ ์†กํ•ด ์†กํ–ฅ ์†กํ˜„ ์†กํ˜ผ ์†กํ™ ์†กํ™” ์†กํšจ ์†ก๋‚จ ์†ก๋ˆˆ ์†ก๋‹ฌ ์†ก๋‹น ์†ก๋ด„ ์†ก๋น„ ์†ก์Šฌ ์†ก์—ด ์†ก์˜ ์†ก์ž ์†กํƒœ ์†กํ˜œ ์†ก๋‚  ์†ก๋Š˜ ์†ก๋ถ„ ์†ก์ƒ˜ ์†ก์ˆœ ์†ก์ธ ์†ก์žฅ ์†ก์ „ ์†ก์ข… ์†ก์ฃผ ์†ก์ง€ ์†ก์ง„ ์†ก์ฐฌ ์†ก์ฒ˜ ์ˆ˜๋‚˜ ์ˆ˜๋‚œ ์ˆ˜๋‚ด ์ˆ˜๋‹ค ์ˆ˜๋‹จ ์ˆ˜๋‹ด ์ˆ˜๋„ ์ˆ˜๋ผ ์ˆ˜๋ž˜ ์ˆ˜๋ฅ˜ ์ˆ˜๋ฆฌ ์ˆ˜๋ชจ ์ˆ˜๋ฌด ์ˆ˜๋ฏธ ์ˆ˜๋ฏผ ์ˆ˜์‚ฌ ์ˆ˜์‚ฐ ์ˆ˜์ƒ ์ˆ˜์ƒˆ ์ˆ˜์ƒ ์ˆ˜์„œ ์ˆ˜์„  ์ˆ˜์„ค ์ˆ˜์„ฌ ์ˆ˜์„ฑ ์ˆ˜์†Œ ์ˆ˜์†” ์ˆ˜์†œ ์ˆ˜์†ก ์ˆ˜์ˆ˜ ์ˆ˜์‹œ ์ˆ˜์‹  ์ˆ˜์‹ค ์ˆ˜์‹ฌ ์ˆ˜์•„ ์ˆ˜์•ˆ ์ˆ˜์•  ์ˆ˜์–‘ ์ˆ˜์—ฌ ์ˆ˜์—ฐ ์ˆ˜์˜ˆ ์ˆ˜์˜ค ์ˆ˜์˜จ ์ˆ˜์š” ์ˆ˜์šฐ ์ˆ˜์›” ์ˆ˜์œ  ์ˆ˜์œค ์ˆ˜์œจ ์ˆ˜์€ ์ˆ˜์ด ์ˆ˜์ผ ์ˆ˜์ž„ ์ˆ˜์ • ์ˆ˜์ฐจ ์ˆ˜์ฐฝ ์ˆ˜์ฑ„ ์ˆ˜์ฒœ ์ˆ˜์ฒจ ์ˆ˜์ฒญ ์ˆ˜์ดˆ ์ˆ˜์ด ์ˆ˜ํ‘œ ์ˆ˜ํ•˜ ์ˆ˜ํ•œ ์ˆ˜ํ•ด ์ˆ˜ํ–ฅ ์ˆ˜ํ˜„ ์ˆ˜ํ˜ผ ์ˆ˜ํ™ ์ˆ˜ํ™” ์ˆ˜ํšจ ์ˆ˜๋‚จ ์ˆ˜๋ˆˆ ์ˆ˜๋‹ฌ ์ˆ˜๋‹น ์ˆ˜๋ด„ ์ˆ˜๋น„ ์ˆ˜์Šฌ ์ˆ˜์—ด ์ˆ˜์˜ ์ˆ˜์ž ์ˆ˜ํƒœ ์ˆ˜ํ˜œ ์ˆ˜๋‚  ์ˆ˜๋Š˜ ์ˆ˜๋ถ„ ์ˆ˜์ƒ˜ ์ˆ˜์ˆœ ์ˆ˜์ธ ์ˆ˜์žฅ ์ˆ˜์ „ ์ˆ˜์ข… ์ˆ˜์ฃผ ์ˆ˜์ง€ ์ˆ˜์ง„ ์ˆ˜์ฐฌ ์ˆ˜์ฒ˜ ์‹œ๋‚˜ ์‹œ๋‚œ ์‹œ๋‚ด ์‹œ๋‹ค ์‹œ๋‹จ ์‹œ๋‹ด ์‹œ๋„ ์‹œ๋ผ ์‹œ๋ž˜ ์‹œ๋ฅ˜ ์‹œ๋ฆฌ ์‹œ๋ชจ ์‹œ๋ฌด ์‹œ๋ฏธ ์‹œ๋ฏผ ์‹œ์‚ฌ ์‹œ์‚ฐ ์‹œ์ƒ ์‹œ์ƒˆ ์‹œ์ƒ ์‹œ์„œ ์‹œ์„  ์‹œ์„ค ์‹œ์„ฌ ์‹œ์„ฑ ์‹œ์†Œ ์‹œ์†” ์‹œ์†œ ์‹œ์†ก ์‹œ์ˆ˜ ์‹œ์‹œ ์‹œ์‹  ์‹œ์‹ค ์‹œ์‹ฌ ์‹œ์•„ ์‹œ์•ˆ ์‹œ์•  ์‹œ์–‘ ์‹œ์—ฌ ์‹œ์—ฐ ์‹œ์˜ˆ ์‹œ์˜ค ์‹œ์˜จ ์‹œ์š” ์‹œ์šฐ ์‹œ์›” ์‹œ์œ  ์‹œ์œค ์‹œ์œจ ์‹œ์€ ์‹œ์ด ์‹œ์ผ ์‹œ์ž„ ์‹œ์ • ์‹œ์ฐจ ์‹œ์ฐฝ ์‹œ์ฑ„ ์‹œ์ฒœ ์‹œ์ฒจ ์‹œ์ฒญ ์‹œ์ดˆ ์‹œ์ด ์‹œํ‘œ ์‹œํ•˜ ์‹œํ•œ ์‹œํ•ด ์‹œํ–ฅ ์‹œํ˜„ ์‹œํ˜ผ ์‹œํ™ ์‹œํ™” ์‹œํšจ ์‹œ๋‚จ ์‹œ๋ˆˆ ์‹œ๋‹ฌ ์‹œ๋‹น ์‹œ๋ด„ ์‹œ๋น„ ์‹œ์Šฌ ์‹œ์—ด ์‹œ์˜ ์‹œ์ž ์‹œํƒœ ์‹œํ˜œ ์‹œ๋‚  ์‹œ๋Š˜ ์‹œ๋ถ„ ์‹œ์ƒ˜ ์‹œ์ˆœ ์‹œ์ธ ์‹œ์žฅ ์‹œ์ „ ์‹œ์ข… ์‹œ์ฃผ ์‹œ์ง€ ์‹œ์ง„ ์‹œ์ฐฌ ์‹œ์ฒ˜ ์‹ ๋‚˜ ์‹ ๋‚œ ์‹ ๋‚ด ์‹ ๋‹ค ์‹ ๋‹จ ์‹ ๋‹ด ์‹ ๋„ ์‹ ๋ผ ์‹ ๋ž˜ ์‹ ๋ฅ˜ ์‹ ๋ฆฌ ์‹ ๋ชจ ์‹ ๋ฌด ์‹ ๋ฏธ ์‹ ๋ฏผ ์‹ ์‚ฌ ์‹ ์‚ฐ ์‹ ์ƒ ์‹ ์ƒˆ ์‹ ์ƒ ์‹ ์„œ ์‹ ์„  ์‹ ์„ค ์‹ ์„ฌ ์‹ ์„ฑ ์‹ ์†Œ ์‹ ์†” ์‹ ์†œ ์‹ ์†ก ์‹ ์ˆ˜ ์‹ ์‹œ ์‹ ์‹  ์‹ ์‹ค ์‹ ์‹ฌ ์‹ ์•„ ์‹ ์•ˆ ์‹ ์•  ์‹ ์–‘ ์‹ ์—ฌ ์‹ ์—ฐ ์‹ ์˜ˆ ์‹ ์˜ค ์‹ ์˜จ ์‹ ์š” ์‹ ์šฐ ์‹ ์›” ์‹ ์œ  ์‹ ์œค ์‹ ์œจ ์‹ ์€ ์‹ ์ด ์‹ ์ผ ์‹ ์ž„ ์‹ ์ • ์‹ ์ฐจ ์‹ ์ฐฝ ์‹ ์ฑ„ ์‹ ์ฒœ ์‹ ์ฒจ ์‹ ์ฒญ ์‹ ์ดˆ ์‹ ์ด ์‹ ํ‘œ ์‹ ํ•˜ ์‹ ํ•œ ์‹ ํ•ด ์‹ ํ–ฅ ์‹ ํ˜„ ์‹ ํ˜ผ ์‹ ํ™ ์‹ ํ™” ์‹ ํšจ ์‹ ๋‚จ ์‹ ๋ˆˆ ์‹ ๋‹ฌ ์‹ ๋‹น ์‹ ๋ด„ ์‹ ๋น„ ์‹ ์Šฌ ์‹ ์—ด ์‹ ์˜ ์‹ ์ž ์‹ ํƒœ ์‹ ํ˜œ ์‹ ๋‚  ์‹ ๋Š˜ ์‹ ๋ถ„ ์‹ ์ƒ˜ ์‹ ์ˆœ ์‹ ์ธ ์‹ ์žฅ ์‹ ์ „ ์‹ ์ข… ์‹ ์ฃผ ์‹ ์ง€ ์‹ ์ง„ ์‹ ์ฐฌ ์‹ ์ฒ˜ ์‹ค๋‚˜ ์‹ค๋‚œ ์‹ค๋‚ด ์‹ค๋‹ค ์‹ค๋‹จ ์‹ค๋‹ด ์‹ค๋„ ์‹ค๋ผ ์‹ค๋ž˜ ์‹ค๋ฅ˜ ์‹ค๋ฆฌ ์‹ค๋ชจ ์‹ค๋ฌด ์‹ค๋ฏธ ์‹ค๋ฏผ ์‹ค์‚ฌ ์‹ค์‚ฐ ์‹ค์ƒ ์‹ค์ƒˆ ์‹ค์ƒ ์‹ค์„œ ์‹ค์„  ์‹ค์„ค ์‹ค์„ฌ ์‹ค์„ฑ ์‹ค์†Œ ์‹ค์†” ์‹ค์†œ ์‹ค์†ก ์‹ค์ˆ˜ ์‹ค์‹œ ์‹ค์‹  ์‹ค์‹ค ์‹ค์‹ฌ ์‹ค์•„ ์‹ค์•ˆ ์‹ค์•  ์‹ค์–‘ ์‹ค์—ฌ ์‹ค์—ฐ ์‹ค์˜ˆ ์‹ค์˜ค ์‹ค์˜จ ์‹ค์š” ์‹ค์šฐ ์‹ค์›” ์‹ค์œ  ์‹ค์œค ์‹ค์œจ ์‹ค์€ ์‹ค์ด ์‹ค์ผ ์‹ค์ž„ ์‹ค์ • ์‹ค์ฐจ ์‹ค์ฐฝ ์‹ค์ฑ„ ์‹ค์ฒœ ์‹ค์ฒจ ์‹ค์ฒญ ์‹ค์ดˆ ์‹ค์ด ์‹คํ‘œ ์‹คํ•˜ ์‹คํ•œ ์‹คํ•ด ์‹คํ–ฅ ์‹คํ˜„ ์‹คํ˜ผ ์‹คํ™ ์‹คํ™” ์‹คํšจ ์‹ค๋‚จ ์‹ค๋ˆˆ ์‹ค๋‹ฌ ์‹ค๋‹น ์‹ค๋ด„ ์‹ค๋น„ ์‹ค์Šฌ ์‹ค์—ด ์‹ค์˜ ์‹ค์ž ์‹คํƒœ ์‹คํ˜œ ์‹ค๋‚  ์‹ค๋Š˜ ์‹ค๋ถ„ ์‹ค์ƒ˜ ์‹ค์ˆœ ์‹ค์ธ ์‹ค์žฅ ์‹ค์ „ ์‹ค์ข… ์‹ค์ฃผ ์‹ค์ง€ ์‹ค์ง„ ์‹ค์ฐฌ ์‹ค์ฒ˜ ์‹ฌ๋‚˜ ์‹ฌ๋‚œ ์‹ฌ๋‚ด ์‹ฌ๋‹ค ์‹ฌ๋‹จ ์‹ฌ๋‹ด ์‹ฌ๋„ ์‹ฌ๋ผ ์‹ฌ๋ž˜ ์‹ฌ๋ฅ˜ ์‹ฌ๋ฆฌ ์‹ฌ๋ชจ ์‹ฌ๋ฌด ์‹ฌ๋ฏธ ์‹ฌ๋ฏผ ์‹ฌ์‚ฌ ์‹ฌ์‚ฐ ์‹ฌ์ƒ ์‹ฌ์ƒˆ ์‹ฌ์ƒ ์‹ฌ์„œ ์‹ฌ์„  ์‹ฌ์„ค ์‹ฌ์„ฌ ์‹ฌ์„ฑ ์‹ฌ์†Œ ์‹ฌ์†” ์‹ฌ์†œ ์‹ฌ์†ก ์‹ฌ์ˆ˜ ์‹ฌ์‹œ ์‹ฌ์‹  ์‹ฌ์‹ค ์‹ฌ์‹ฌ ์‹ฌ์•„ ์‹ฌ์•ˆ ์‹ฌ์•  ์‹ฌ์–‘ ์‹ฌ์—ฌ ์‹ฌ์—ฐ ์‹ฌ์˜ˆ ์‹ฌ์˜ค ์‹ฌ์˜จ ์‹ฌ์š” ์‹ฌ์šฐ ์‹ฌ์›” ์‹ฌ์œ  ์‹ฌ์œค ์‹ฌ์œจ ์‹ฌ์€ ์‹ฌ์ด ์‹ฌ์ผ ์‹ฌ์ž„ ์‹ฌ์ • ์‹ฌ์ฐจ ์‹ฌ์ฐฝ ์‹ฌ์ฑ„ ์‹ฌ์ฒœ ์‹ฌ์ฒจ ์‹ฌ์ฒญ ์‹ฌ์ดˆ ์‹ฌ์ด ์‹ฌํ‘œ ์‹ฌํ•˜ ์‹ฌํ•œ ์‹ฌํ•ด ์‹ฌํ–ฅ ์‹ฌํ˜„ ์‹ฌํ˜ผ ์‹ฌํ™ ์‹ฌํ™” ์‹ฌํšจ ์‹ฌ๋‚จ ์‹ฌ๋ˆˆ ์‹ฌ๋‹ฌ ์‹ฌ๋‹น ์‹ฌ๋ด„ ์‹ฌ๋น„ ์‹ฌ์Šฌ ์‹ฌ์—ด ์‹ฌ์˜ ์‹ฌ์ž ์‹ฌํƒœ ์‹ฌํ˜œ ์‹ฌ๋‚  ์‹ฌ๋Š˜ ์‹ฌ๋ถ„ ์‹ฌ์ƒ˜ ์‹ฌ์ˆœ ์‹ฌ์ธ ์‹ฌ์žฅ ์‹ฌ์ „ ์‹ฌ์ข… ์‹ฌ์ฃผ ์‹ฌ์ง€ ์‹ฌ์ง„ ์‹ฌ์ฐฌ ์‹ฌ์ฒ˜ ์•„๋‚˜ ์•„๋‚œ ์•„๋‚ด ์•„๋‹ค ์•„๋‹จ ์•„๋‹ด ์•„๋„ ์•„๋ผ ์•„๋ž˜ ์•„๋ฅ˜ ์•„๋ฆฌ ์•„๋ชจ ์•„๋ฌด ์•„๋ฏธ ์•„๋ฏผ ์•„์‚ฌ ์•„์‚ฐ ์•„์ƒ ์•„์ƒˆ ์•„์ƒ ์•„์„œ ์•„์„  ์•„์„ค ์•„์„ฌ ์•„์„ฑ ์•„์†Œ ์•„์†” ์•„์†œ ์•„์†ก ์•„์ˆ˜ ์•„์‹œ ์•„์‹  ์•„์‹ค ์•„์‹ฌ ์•„์•„ ์•„์•ˆ ์•„์•  ์•„์–‘ ์•„์—ฌ ์•„์—ฐ ์•„์˜ˆ ์•„์˜ค ์•„์˜จ ์•„์š” ์•„์šฐ ์•„์›” ์•„์œ  ์•„์œค ์•„์œจ ์•„์€ ์•„์ด ์•„์ผ ์•„์ž„ ์•„์ • ์•„์ฐจ ์•„์ฐฝ ์•„์ฑ„ ์•„์ฒœ ์•„์ฒจ ์•„์ฒญ ์•„์ดˆ ์•„์ด ์•„ํ‘œ ์•„ํ•˜ ์•„ํ•œ ์•„ํ•ด ์•„ํ–ฅ ์•„ํ˜„ ์•„ํ˜ผ ์•„ํ™ ์•„ํ™” ์•„ํšจ ์•„๋‚จ ์•„๋ˆˆ ์•„๋‹ฌ ์•„๋‹น ์•„๋ด„ ์•„๋น„ ์•„์Šฌ ์•„์—ด ์•„์˜ ์•„์ž ์•„ํƒœ ์•„ํ˜œ ์•„๋‚  ์•„๋Š˜ ์•„๋ถ„ ์•„์ƒ˜ ์•„์ˆœ ์•„์ธ ์•„์žฅ ์•„์ „ ์•„์ข… ์•„์ฃผ ์•„์ง€ ์•„์ง„ ์•„์ฐฌ ์•„์ฒ˜ ์•ˆ๋‚˜ ์•ˆ๋‚œ ์•ˆ๋‚ด ์•ˆ๋‹ค ์•ˆ๋‹จ ์•ˆ๋‹ด ์•ˆ๋„ ์•ˆ๋ผ ์•ˆ๋ž˜ ์•ˆ๋ฅ˜ ์•ˆ๋ฆฌ ์•ˆ๋ชจ ์•ˆ๋ฌด ์•ˆ๋ฏธ ์•ˆ๋ฏผ ์•ˆ์‚ฌ ์•ˆ์‚ฐ ์•ˆ์ƒ ์•ˆ์ƒˆ ์•ˆ์ƒ ์•ˆ์„œ ์•ˆ์„  ์•ˆ์„ค ์•ˆ์„ฌ ์•ˆ์„ฑ ์•ˆ์†Œ ์•ˆ์†” ์•ˆ์†œ ์•ˆ์†ก ์•ˆ์ˆ˜ ์•ˆ์‹œ ์•ˆ์‹  ์•ˆ์‹ค ์•ˆ์‹ฌ ์•ˆ์•„ ์•ˆ์•ˆ ์•ˆ์•  ์•ˆ์–‘ ์•ˆ์—ฌ ์•ˆ์—ฐ ์•ˆ์˜ˆ ์•ˆ์˜ค ์•ˆ์˜จ ์•ˆ์š” ์•ˆ์šฐ ์•ˆ์›” ์•ˆ์œ  ์•ˆ์œค ์•ˆ์œจ ์•ˆ์€ ์•ˆ์ด ์•ˆ์ผ ์•ˆ์ž„ ์•ˆ์ • ์•ˆ์ฐจ ์•ˆ์ฐฝ ์•ˆ์ฑ„ ์•ˆ์ฒœ ์•ˆ์ฒจ ์•ˆ์ฒญ ์•ˆ์ดˆ ์•ˆ์ด ์•ˆํ‘œ ์•ˆํ•˜ ์•ˆํ•œ ์•ˆํ•ด ์•ˆํ–ฅ ์•ˆํ˜„ ์•ˆํ˜ผ ์•ˆํ™ ์•ˆํ™” ์•ˆํšจ ์•ˆ๋‚จ ์•ˆ๋ˆˆ ์•ˆ๋‹ฌ ์•ˆ๋‹น ์•ˆ๋ด„ ์•ˆ๋น„ ์•ˆ์Šฌ ์•ˆ์—ด ์•ˆ์˜ ์•ˆ์ž ์•ˆํƒœ ์•ˆํ˜œ ์•ˆ๋‚  ์•ˆ๋Š˜ ์•ˆ๋ถ„ ์•ˆ์ƒ˜ ์•ˆ์ˆœ ์•ˆ์ธ ์•ˆ์žฅ ์•ˆ์ „ ์•ˆ์ข… ์•ˆ์ฃผ ์•ˆ์ง€ ์•ˆ์ง„ ์•ˆ์ฐฌ ์•ˆ์ฒ˜ ์• ๋‚˜ ์• ๋‚œ ์• ๋‚ด ์• ๋‹ค ์• ๋‹จ ์• ๋‹ด ์• ๋„ ์• ๋ผ ์• ๋ž˜ ์• ๋ฅ˜ ์• ๋ฆฌ ์• ๋ชจ ์• ๋ฌด ์• ๋ฏธ ์• ๋ฏผ ์• ์‚ฌ ์• ์‚ฐ ์• ์ƒ ์• ์ƒˆ ์• ์ƒ ์• ์„œ ์• ์„  ์• ์„ค ์• ์„ฌ ์• ์„ฑ ์• ์†Œ ์• ์†” ์• ์†œ ์• ์†ก ์• ์ˆ˜ ์• ์‹œ ์• ์‹  ์• ์‹ค ์• ์‹ฌ ์• ์•„ ์• ์•ˆ ์• ์•  ์• ์–‘ ์• ์—ฌ ์• ์—ฐ ์• ์˜ˆ ์• ์˜ค ์• ์˜จ ์• ์š” ์• ์šฐ ์• ์›” ์• ์œ  ์• ์œค ์• ์œจ ์• ์€ ์• ์ด ์• ์ผ ์• ์ž„ ์• ์ • ์• ์ฐจ ์• ์ฐฝ ์• ์ฑ„ ์• ์ฒœ ์• ์ฒจ ์• ์ฒญ ์• ์ดˆ ์• ์ด ์• ํ‘œ ์• ํ•˜ ์• ํ•œ ์• ํ•ด ์• ํ–ฅ ์• ํ˜„ ์• ํ˜ผ ์• ํ™ ์• ํ™” ์• ํšจ ์• ๋‚จ ์• ๋ˆˆ ์• ๋‹ฌ ์• ๋‹น ์• ๋ด„ ์• ๋น„ ์• ์Šฌ ์• ์—ด ์• ์˜ ์• ์ž ์• ํƒœ ์• ํ˜œ ์• ๋‚  ์• ๋Š˜ ์• ๋ถ„ ์• ์ƒ˜ ์• ์ˆœ ์• ์ธ ์• ์žฅ ์• ์ „ ์• ์ข… ์• ์ฃผ ์• ์ง€ ์• ์ง„ ์• ์ฐฌ ์• ์ฒ˜ ์–‘๋‚˜ ์–‘๋‚œ ์–‘๋‚ด ์–‘๋‹ค ์–‘๋‹จ ์–‘๋‹ด ์–‘๋„ ์–‘๋ผ ์–‘๋ž˜ ์–‘๋ฅ˜ ์–‘๋ฆฌ ์–‘๋ชจ ์–‘๋ฌด ์–‘๋ฏธ ์–‘๋ฏผ ์–‘์‚ฌ ์–‘์‚ฐ ์–‘์ƒ ์–‘์ƒˆ ์–‘์ƒ ์–‘์„œ ์–‘์„  ์–‘์„ค ์–‘์„ฌ ์–‘์„ฑ ์–‘์†Œ ์–‘์†” ์–‘์†œ ์–‘์†ก ์–‘์ˆ˜ ์–‘์‹œ ์–‘์‹  ์–‘์‹ค ์–‘์‹ฌ ์–‘์•„ ์–‘์•ˆ ์–‘์•  ์–‘์–‘ ์–‘์—ฌ ์–‘์—ฐ ์–‘์˜ˆ ์–‘์˜ค ์–‘์˜จ ์–‘์š” ์–‘์šฐ ์–‘์›” ์–‘์œ  ์–‘์œค ์–‘์œจ ์–‘์€ ์–‘์ด ์–‘์ผ ์–‘์ž„ ์–‘์ • ์–‘์ฐจ ์–‘์ฐฝ ์–‘์ฑ„ ์–‘์ฒœ ์–‘์ฒจ ์–‘์ฒญ ์–‘์ดˆ ์–‘์ด ์–‘ํ‘œ ์–‘ํ•˜ ์–‘ํ•œ ์–‘ํ•ด ์–‘ํ–ฅ ์–‘ํ˜„ ์–‘ํ˜ผ ์–‘ํ™ ์–‘ํ™” ์–‘ํšจ ์–‘๋‚จ ์–‘๋ˆˆ ์–‘๋‹ฌ ์–‘๋‹น ์–‘๋ด„ ์–‘๋น„ ์–‘์Šฌ ์–‘์—ด ์–‘์˜ ์–‘์ž ์–‘ํƒœ ์–‘ํ˜œ ์–‘๋‚  ์–‘๋Š˜ ์–‘๋ถ„ ์–‘์ƒ˜ ์–‘์ˆœ ์–‘์ธ ์–‘์žฅ ์–‘์ „ ์–‘์ข… ์–‘์ฃผ ์–‘์ง€ ์–‘์ง„ ์–‘์ฐฌ ์–‘์ฒ˜ ์—ฌ๋‚˜ ์—ฌ๋‚œ ์—ฌ๋‚ด ์—ฌ๋‹ค ์—ฌ๋‹จ ์—ฌ๋‹ด ์—ฌ๋„ ์—ฌ๋ผ ์—ฌ๋ž˜ ์—ฌ๋ฅ˜ ์—ฌ๋ฆฌ ์—ฌ๋ชจ ์—ฌ๋ฌด ์—ฌ๋ฏธ ์—ฌ๋ฏผ ์—ฌ์‚ฌ ์—ฌ์‚ฐ ์—ฌ์ƒ ์—ฌ์ƒˆ ์—ฌ์ƒ ์—ฌ์„œ ์—ฌ์„  ์—ฌ์„ค ์—ฌ์„ฌ ์—ฌ์„ฑ ์—ฌ์†Œ ์—ฌ์†” ์—ฌ์†œ ์—ฌ์†ก ์—ฌ์ˆ˜ ์—ฌ์‹œ ์—ฌ์‹  ์—ฌ์‹ค ์—ฌ์‹ฌ ์—ฌ์•„ ์—ฌ์•ˆ ์—ฌ์•  ์—ฌ์–‘ ์—ฌ์—ฌ ์—ฌ์—ฐ ์—ฌ์˜ˆ ์—ฌ์˜ค ์—ฌ์˜จ ์—ฌ์š” ์—ฌ์šฐ ์—ฌ์›” ์—ฌ์œ  ์—ฌ์œค ์—ฌ์œจ ์—ฌ์€ ์—ฌ์ด ์—ฌ์ผ ์—ฌ์ž„ ์—ฌ์ • ์—ฌ์ฐจ ์—ฌ์ฐฝ ์—ฌ์ฑ„ ์—ฌ์ฒœ ์—ฌ์ฒจ ์—ฌ์ฒญ ์—ฌ์ดˆ ์—ฌ์ด ์—ฌํ‘œ ์—ฌํ•˜ ์—ฌํ•œ ์—ฌํ•ด ์—ฌํ–ฅ ์—ฌํ˜„ ์—ฌํ˜ผ ์—ฌํ™ ์—ฌํ™” ์—ฌํšจ ์—ฌ๋‚จ ์—ฌ๋ˆˆ ์—ฌ๋‹ฌ ์—ฌ๋‹น ์—ฌ๋ด„ ์—ฌ๋น„ ์—ฌ์Šฌ ์—ฌ์—ด ์—ฌ์˜ ์—ฌ์ž ์—ฌํƒœ ์—ฌํ˜œ ์—ฌ๋‚  ์—ฌ๋Š˜ ์—ฌ๋ถ„ ์—ฌ์ƒ˜ ์—ฌ์ˆœ ์—ฌ์ธ ์—ฌ์žฅ ์—ฌ์ „ ์—ฌ์ข… ์—ฌ์ฃผ ์—ฌ์ง€ ์—ฌ์ง„ ์—ฌ์ฐฌ ์—ฌ์ฒ˜ ์—ฐ๋‚˜ ์—ฐ๋‚œ ์—ฐ๋‚ด ์—ฐ๋‹ค ์—ฐ๋‹จ ์—ฐ๋‹ด ์—ฐ๋„ ์—ฐ๋ผ ์—ฐ๋ž˜ ์—ฐ๋ฅ˜ ์—ฐ๋ฆฌ ์—ฐ๋ชจ ์—ฐ๋ฌด ์—ฐ๋ฏธ ์—ฐ๋ฏผ ์—ฐ์‚ฌ ์—ฐ์‚ฐ ์—ฐ์ƒ ์—ฐ์ƒˆ ์—ฐ์ƒ ์—ฐ์„œ ์—ฐ์„  ์—ฐ์„ค ์—ฐ์„ฌ ์—ฐ์„ฑ ์—ฐ์†Œ ์—ฐ์†” ์—ฐ์†œ ์—ฐ์†ก ์—ฐ์ˆ˜ ์—ฐ์‹œ ์—ฐ์‹  ์—ฐ์‹ค ์—ฐ์‹ฌ ์—ฐ์•„ ์—ฐ์•ˆ ์—ฐ์•  ์—ฐ์–‘ ์—ฐ์—ฌ ์—ฐ์—ฐ ์—ฐ์˜ˆ ์—ฐ์˜ค ์—ฐ์˜จ ์—ฐ์š” ์—ฐ์šฐ ์—ฐ์›” ์—ฐ์œ  ์—ฐ์œค ์—ฐ์œจ ์—ฐ์€ ์—ฐ์ด ์—ฐ์ผ ์—ฐ์ž„ ์—ฐ์ • ์—ฐ์ฐจ ์—ฐ์ฐฝ ์—ฐ์ฑ„ ์—ฐ์ฒœ ์—ฐ์ฒจ ์—ฐ์ฒญ ์—ฐ์ดˆ ์—ฐ์ด ์—ฐํ‘œ ์—ฐํ•˜ ์—ฐํ•œ ์—ฐํ•ด ์—ฐํ–ฅ ์—ฐํ˜„ ์—ฐํ˜ผ ์—ฐํ™ ์—ฐํ™” ์—ฐํšจ ์—ฐ๋‚จ ์—ฐ๋ˆˆ ์—ฐ๋‹ฌ ์—ฐ๋‹น ์—ฐ๋ด„ ์—ฐ๋น„ ์—ฐ์Šฌ ์—ฐ์—ด ์—ฐ์˜ ์—ฐ์ž ์—ฐํƒœ ์—ฐํ˜œ ์—ฐ๋‚  ์—ฐ๋Š˜ ์—ฐ๋ถ„ ์—ฐ์ƒ˜ ์—ฐ์ˆœ ์—ฐ์ธ ์—ฐ์žฅ ์—ฐ์ „ ์—ฐ์ข… ์—ฐ์ฃผ ์—ฐ์ง€ ์—ฐ์ง„ ์—ฐ์ฐฌ ์—ฐ์ฒ˜ ์˜ˆ๋‚˜ ์˜ˆ๋‚œ ์˜ˆ๋‚ด ์˜ˆ๋‹ค ์˜ˆ๋‹จ ์˜ˆ๋‹ด ์˜ˆ๋„ ์˜ˆ๋ผ ์˜ˆ๋ž˜ ์˜ˆ๋ฅ˜ ์˜ˆ๋ฆฌ ์˜ˆ๋ชจ ์˜ˆ๋ฌด ์˜ˆ๋ฏธ ์˜ˆ๋ฏผ ์˜ˆ์‚ฌ ์˜ˆ์‚ฐ ์˜ˆ์ƒ ์˜ˆ์ƒˆ ์˜ˆ์ƒ ์˜ˆ์„œ ์˜ˆ์„  ์˜ˆ์„ค ์˜ˆ์„ฌ ์˜ˆ์„ฑ ์˜ˆ์†Œ ์˜ˆ์†” ์˜ˆ์†œ ์˜ˆ์†ก ์˜ˆ์ˆ˜ ์˜ˆ์‹œ ์˜ˆ์‹  ์˜ˆ์‹ค ์˜ˆ์‹ฌ ์˜ˆ์•„ ์˜ˆ์•ˆ ์˜ˆ์•  ์˜ˆ์–‘ ์˜ˆ์—ฌ ์˜ˆ์—ฐ ์˜ˆ์˜ˆ ์˜ˆ์˜ค ์˜ˆ์˜จ ์˜ˆ์š” ์˜ˆ์šฐ ์˜ˆ์›” ์˜ˆ์œ  ์˜ˆ์œค ์˜ˆ์œจ ์˜ˆ์€ ์˜ˆ์ด ์˜ˆ์ผ ์˜ˆ์ž„ ์˜ˆ์ • ์˜ˆ์ฐจ ์˜ˆ์ฐฝ ์˜ˆ์ฑ„ ์˜ˆ์ฒœ ์˜ˆ์ฒจ ์˜ˆ์ฒญ ์˜ˆ์ดˆ ์˜ˆ์ด ์˜ˆํ‘œ ์˜ˆํ•˜ ์˜ˆํ•œ ์˜ˆํ•ด ์˜ˆํ–ฅ ์˜ˆํ˜„ ์˜ˆํ˜ผ ์˜ˆํ™ ์˜ˆํ™” ์˜ˆํšจ ์˜ˆ๋‚จ ์˜ˆ๋ˆˆ ์˜ˆ๋‹ฌ ์˜ˆ๋‹น ์˜ˆ๋ด„ ์˜ˆ๋น„ ์˜ˆ์Šฌ ์˜ˆ์—ด ์˜ˆ์˜ ์˜ˆ์ž ์˜ˆํƒœ ์˜ˆํ˜œ ์˜ˆ๋‚  ์˜ˆ๋Š˜ ์˜ˆ๋ถ„ ์˜ˆ์ƒ˜ ์˜ˆ์ˆœ ์˜ˆ์ธ ์˜ˆ์žฅ ์˜ˆ์ „ ์˜ˆ์ข… ์˜ˆ์ฃผ ์˜ˆ์ง€ ์˜ˆ์ง„ ์˜ˆ์ฐฌ ์˜ˆ์ฒ˜ ์˜ค๋‚˜ ์˜ค๋‚œ ์˜ค๋‚ด ์˜ค๋‹ค ์˜ค๋‹จ ์˜ค๋‹ด ์˜ค๋„ ์˜ค๋ผ ์˜ค๋ž˜ ์˜ค๋ฅ˜ ์˜ค๋ฆฌ ์˜ค๋ชจ ์˜ค๋ฌด ์˜ค๋ฏธ ์˜ค๋ฏผ ์˜ค์‚ฌ ์˜ค์‚ฐ ์˜ค์ƒ ์˜ค์ƒˆ ์˜ค์ƒ ์˜ค์„œ ์˜ค์„  ์˜ค์„ค ์˜ค์„ฌ ์˜ค์„ฑ ์˜ค์†Œ ์˜ค์†” ์˜ค์†œ ์˜ค์†ก ์˜ค์ˆ˜ ์˜ค์‹œ ์˜ค์‹  ์˜ค์‹ค ์˜ค์‹ฌ ์˜ค์•„ ์˜ค์•ˆ ์˜ค์•  ์˜ค์–‘ ์˜ค์—ฌ ์˜ค์—ฐ ์˜ค์˜ˆ ์˜ค์˜ค ์˜ค์˜จ ์˜ค์š” ์˜ค์šฐ ์˜ค์›” ์˜ค์œ  ์˜ค์œค ์˜ค์œจ ์˜ค์€ ์˜ค์ด ์˜ค์ผ ์˜ค์ž„ ์˜ค์ • ์˜ค์ฐจ ์˜ค์ฐฝ ์˜ค์ฑ„ ์˜ค์ฒœ ์˜ค์ฒจ ์˜ค์ฒญ ์˜ค์ดˆ ์˜ค์ด ์˜คํ‘œ ์˜คํ•˜ ์˜คํ•œ ์˜คํ•ด ์˜คํ–ฅ ์˜คํ˜„ ์˜คํ˜ผ ์˜คํ™ ์˜คํ™” ์˜คํšจ ์˜ค๋‚จ ์˜ค๋ˆˆ ์˜ค๋‹ฌ ์˜ค๋‹น ์˜ค๋ด„ ์˜ค๋น„ ์˜ค์Šฌ ์˜ค์—ด ์˜ค์˜ ์˜ค์ž ์˜คํƒœ ์˜คํ˜œ ์˜ค๋‚  ์˜ค๋Š˜ ์˜ค๋ถ„ ์˜ค์ƒ˜ ์˜ค์ˆœ ์˜ค์ธ ์˜ค์žฅ ์˜ค์ „ ์˜ค์ข… ์˜ค์ฃผ ์˜ค์ง€ ์˜ค์ง„ ์˜ค์ฐฌ ์˜ค์ฒ˜ ์˜จ๋‚˜ ์˜จ๋‚œ ์˜จ๋‚ด ์˜จ๋‹ค ์˜จ๋‹จ ์˜จ๋‹ด ์˜จ๋„ ์˜จ๋ผ ์˜จ๋ž˜ ์˜จ๋ฅ˜ ์˜จ๋ฆฌ ์˜จ๋ชจ ์˜จ๋ฌด ์˜จ๋ฏธ ์˜จ๋ฏผ ์˜จ์‚ฌ ์˜จ์‚ฐ ์˜จ์ƒ ์˜จ์ƒˆ ์˜จ์ƒ ์˜จ์„œ ์˜จ์„  ์˜จ์„ค ์˜จ์„ฌ ์˜จ์„ฑ ์˜จ์†Œ ์˜จ์†” ์˜จ์†œ ์˜จ์†ก ์˜จ์ˆ˜ ์˜จ์‹œ ์˜จ์‹  ์˜จ์‹ค ์˜จ์‹ฌ ์˜จ์•„ ์˜จ์•ˆ ์˜จ์•  ์˜จ์–‘ ์˜จ์—ฌ ์˜จ์—ฐ ์˜จ์˜ˆ ์˜จ์˜ค ์˜จ์˜จ ์˜จ์š” ์˜จ์šฐ ์˜จ์›” ์˜จ์œ  ์˜จ์œค ์˜จ์œจ ์˜จ์€ ์˜จ์ด ์˜จ์ผ ์˜จ์ž„ ์˜จ์ • ์˜จ์ฐจ ์˜จ์ฐฝ ์˜จ์ฑ„ ์˜จ์ฒœ ์˜จ์ฒจ ์˜จ์ฒญ ์˜จ์ดˆ ์˜จ์ด ์˜จํ‘œ ์˜จํ•˜ ์˜จํ•œ ์˜จํ•ด ์˜จํ–ฅ ์˜จํ˜„ ์˜จํ˜ผ ์˜จํ™ ์˜จํ™” ์˜จํšจ ์˜จ๋‚จ ์˜จ๋ˆˆ ์˜จ๋‹ฌ ์˜จ๋‹น ์˜จ๋ด„ ์˜จ๋น„ ์˜จ์Šฌ ์˜จ์—ด ์˜จ์˜ ์˜จ์ž ์˜จํƒœ ์˜จํ˜œ ์˜จ๋‚  ์˜จ๋Š˜ ์˜จ๋ถ„ ์˜จ์ƒ˜ ์˜จ์ˆœ ์˜จ์ธ ์˜จ์žฅ ์˜จ์ „ ์˜จ์ข… ์˜จ์ฃผ ์˜จ์ง€ ์˜จ์ง„ ์˜จ์ฐฌ ์˜จ์ฒ˜ ์š”๋‚˜ ์š”๋‚œ ์š”๋‚ด ์š”๋‹ค ์š”๋‹จ ์š”๋‹ด ์š”๋„ ์š”๋ผ ์š”๋ž˜ ์š”๋ฅ˜ ์š”๋ฆฌ ์š”๋ชจ ์š”๋ฌด ์š”๋ฏธ ์š”๋ฏผ ์š”์‚ฌ ์š”์‚ฐ ์š”์ƒ ์š”์ƒˆ ์š”์ƒ ์š”์„œ ์š”์„  ์š”์„ค ์š”์„ฌ ์š”์„ฑ ์š”์†Œ ์š”์†” ์š”์†œ ์š”์†ก ์š”์ˆ˜ ์š”์‹œ ์š”์‹  ์š”์‹ค ์š”์‹ฌ ์š”์•„ ์š”์•ˆ ์š”์•  ์š”์–‘ ์š”์—ฌ ์š”์—ฐ ์š”์˜ˆ ์š”์˜ค ์š”์˜จ ์š”์š” ์š”์šฐ ์š”์›” ์š”์œ  ์š”์œค ์š”์œจ ์š”์€ ์š”์ด ์š”์ผ ์š”์ž„ ์š”์ • ์š”์ฐจ ์š”์ฐฝ ์š”์ฑ„ ์š”์ฒœ ์š”์ฒจ ์š”์ฒญ ์š”์ดˆ ์š”์ด ์š”ํ‘œ ์š”ํ•˜ ์š”ํ•œ ์š”ํ•ด ์š”ํ–ฅ ์š”ํ˜„ ์š”ํ˜ผ ์š”ํ™ ์š”ํ™” ์š”ํšจ ์š”๋‚จ ์š”๋ˆˆ ์š”๋‹ฌ ์š”๋‹น ์š”๋ด„ ์š”๋น„ ์š”์Šฌ ์š”์—ด ์š”์˜ ์š”์ž ์š”ํƒœ ์š”ํ˜œ ์š”๋‚  ์š”๋Š˜ ์š”๋ถ„ ์š”์ƒ˜ ์š”์ˆœ ์š”์ธ ์š”์žฅ ์š”์ „ ์š”์ข… ์š”์ฃผ ์š”์ง€ ์š”์ง„ ์š”์ฐฌ ์š”์ฒ˜ ์šฐ๋‚˜ ์šฐ๋‚œ ์šฐ๋‚ด ์šฐ๋‹ค ์šฐ๋‹จ ์šฐ๋‹ด ์šฐ๋„ ์šฐ๋ผ ์šฐ๋ž˜ ์šฐ๋ฅ˜ ์šฐ๋ฆฌ ์šฐ๋ชจ ์šฐ๋ฌด ์šฐ๋ฏธ ์šฐ๋ฏผ ์šฐ์‚ฌ ์šฐ์‚ฐ ์šฐ์ƒ ์šฐ์ƒˆ ์šฐ์ƒ ์šฐ์„œ ์šฐ์„  ์šฐ์„ค ์šฐ์„ฌ ์šฐ์„ฑ ์šฐ์†Œ ์šฐ์†” ์šฐ์†œ ์šฐ์†ก ์šฐ์ˆ˜ ์šฐ์‹œ ์šฐ์‹  ์šฐ์‹ค ์šฐ์‹ฌ ์šฐ์•„ ์šฐ์•ˆ ์šฐ์•  ์šฐ์–‘ ์šฐ์—ฌ ์šฐ์—ฐ ์šฐ์˜ˆ ์šฐ์˜ค ์šฐ์˜จ ์šฐ์š” ์šฐ์šฐ ์šฐ์›” ์šฐ์œ  ์šฐ์œค ์šฐ์œจ ์šฐ์€ ์šฐ์ด ์šฐ์ผ ์šฐ์ž„ ์šฐ์ • ์šฐ์ฐจ ์šฐ์ฐฝ ์šฐ์ฑ„ ์šฐ์ฒœ ์šฐ์ฒจ ์šฐ์ฒญ ์šฐ์ดˆ ์šฐ์ด ์šฐํ‘œ ์šฐํ•˜ ์šฐํ•œ ์šฐํ•ด ์šฐํ–ฅ ์šฐํ˜„ ์šฐํ˜ผ ์šฐํ™ ์šฐํ™” ์šฐํšจ ์šฐ๋‚จ ์šฐ๋ˆˆ ์šฐ๋‹ฌ ์šฐ๋‹น ์šฐ๋ด„ ์šฐ๋น„ ์šฐ์Šฌ ์šฐ์—ด ์šฐ์˜ ์šฐ์ž ์šฐํƒœ ์šฐํ˜œ ์šฐ๋‚  ์šฐ๋Š˜ ์šฐ๋ถ„ ์šฐ์ƒ˜ ์šฐ์ˆœ ์šฐ์ธ ์šฐ์žฅ ์šฐ์ „ ์šฐ์ข… ์šฐ์ฃผ ์šฐ์ง€ ์šฐ์ง„ ์šฐ์ฐฌ ์šฐ์ฒ˜ ์›”๋‚˜ ์›”๋‚œ ์›”๋‚ด ์›”๋‹ค ์›”๋‹จ ์›”๋‹ด ์›”๋„ ์›”๋ผ ์›”๋ž˜ ์›”๋ฅ˜ ์›”๋ฆฌ ์›”๋ชจ ์›”๋ฌด ์›”๋ฏธ ์›”๋ฏผ ์›”์‚ฌ ์›”์‚ฐ ์›”์ƒ ์›”์ƒˆ ์›”์ƒ ์›”์„œ ์›”์„  ์›”์„ค ์›”์„ฌ ์›”์„ฑ ์›”์†Œ ์›”์†” ์›”์†œ ์›”์†ก ์›”์ˆ˜ ์›”์‹œ ์›”์‹  ์›”์‹ค ์›”์‹ฌ ์›”์•„ ์›”์•ˆ ์›”์•  ์›”์–‘ ์›”์—ฌ ์›”์—ฐ ์›”์˜ˆ ์›”์˜ค ์›”์˜จ ์›”์š” ์›”์šฐ ์›”์›” ์›”์œ  ์›”์œค ์›”์œจ ์›”์€ ์›”์ด ์›”์ผ ์›”์ž„ ์›”์ • ์›”์ฐจ ์›”์ฐฝ ์›”์ฑ„ ์›”์ฒœ ์›”์ฒจ ์›”์ฒญ ์›”์ดˆ ์›”์ด ์›”ํ‘œ ์›”ํ•˜ ์›”ํ•œ ์›”ํ•ด ์›”ํ–ฅ ์›”ํ˜„ ์›”ํ˜ผ ์›”ํ™ ์›”ํ™” ์›”ํšจ ์›”๋‚จ ์›”๋ˆˆ ์›”๋‹ฌ ์›”๋‹น ์›”๋ด„ ์›”๋น„ ์›”์Šฌ ์›”์—ด ์›”์˜ ์›”์ž ์›”ํƒœ ์›”ํ˜œ ์›”๋‚  ์›”๋Š˜ ์›”๋ถ„ ์›”์ƒ˜ ์›”์ˆœ ์›”์ธ ์›”์žฅ ์›”์ „ ์›”์ข… ์›”์ฃผ ์›”์ง€ ์›”์ง„ ์›”์ฐฌ ์›”์ฒ˜ ์œ ๋‚˜ ์œ ๋‚œ ์œ ๋‚ด ์œ ๋‹ค ์œ ๋‹จ ์œ ๋‹ด ์œ ๋„ ์œ ๋ผ ์œ ๋ž˜ ์œ ๋ฅ˜ ์œ ๋ฆฌ ์œ ๋ชจ ์œ ๋ฌด ์œ ๋ฏธ ์œ ๋ฏผ ์œ ์‚ฌ ์œ ์‚ฐ ์œ ์ƒ ์œ ์ƒˆ ์œ ์ƒ ์œ ์„œ ์œ ์„  ์œ ์„ค ์œ ์„ฌ ์œ ์„ฑ ์œ ์†Œ ์œ ์†” ์œ ์†œ ์œ ์†ก ์œ ์ˆ˜ ์œ ์‹œ ์œ ์‹  ์œ ์‹ค ์œ ์‹ฌ ์œ ์•„ ์œ ์•ˆ ์œ ์•  ์œ ์–‘ ์œ ์—ฌ ์œ ์—ฐ ์œ ์˜ˆ ์œ ์˜ค ์œ ์˜จ ์œ ์š” ์œ ์šฐ ์œ ์›” ์œ ์œ  ์œ ์œค ์œ ์œจ ์œ ์€ ์œ ์ด ์œ ์ผ ์œ ์ž„ ์œ ์ • ์œ ์ฐจ ์œ ์ฐฝ ์œ ์ฑ„ ์œ ์ฒœ ์œ ์ฒจ ์œ ์ฒญ ์œ ์ดˆ ์œ ์ด ์œ ํ‘œ ์œ ํ•˜ ์œ ํ•œ ์œ ํ•ด ์œ ํ–ฅ ์œ ํ˜„ ์œ ํ˜ผ ์œ ํ™ ์œ ํ™” ์œ ํšจ ์œ ๋‚จ ์œ ๋ˆˆ ์œ ๋‹ฌ ์œ ๋‹น ์œ ๋ด„ ์œ ๋น„ ์œ ์Šฌ ์œ ์—ด ์œ ์˜ ์œ ์ž ์œ ํƒœ ์œ ํ˜œ ์œ ๋‚  ์œ ๋Š˜ ์œ ๋ถ„ ์œ ์ƒ˜ ์œ ์ˆœ ์œ ์ธ ์œ ์žฅ ์œ ์ „ ์œ ์ข… ์œ ์ฃผ ์œ ์ง€ ์œ ์ง„ ์œ ์ฐฌ ์œ ์ฒ˜ ์œค๋‚˜ ์œค๋‚œ ์œค๋‚ด ์œค๋‹ค ์œค๋‹จ ์œค๋‹ด ์œค๋„ ์œค๋ผ ์œค๋ž˜ ์œค๋ฅ˜ ์œค๋ฆฌ ์œค๋ชจ ์œค๋ฌด ์œค๋ฏธ ์œค๋ฏผ ์œค์‚ฌ ์œค์‚ฐ ์œค์ƒ ์œค์ƒˆ ์œค์ƒ ์œค์„œ ์œค์„  ์œค์„ค ์œค์„ฌ ์œค์„ฑ ์œค์†Œ ์œค์†” ์œค์†œ ์œค์†ก ์œค์ˆ˜ ์œค์‹œ ์œค์‹  ์œค์‹ค ์œค์‹ฌ ์œค์•„ ์œค์•ˆ ์œค์•  ์œค์–‘ ์œค์—ฌ ์œค์—ฐ ์œค์˜ˆ ์œค์˜ค ์œค์˜จ ์œค์š” ์œค์šฐ ์œค์›” ์œค์œ  ์œค์œค ์œค์œจ ์œค์€ ์œค์ด ์œค์ผ ์œค์ž„ ์œค์ • ์œค์ฐจ ์œค์ฐฝ ์œค์ฑ„ ์œค์ฒœ ์œค์ฒจ ์œค์ฒญ ์œค์ดˆ ์œค์ด ์œคํ‘œ ์œคํ•˜ ์œคํ•œ ์œคํ•ด ์œคํ–ฅ ์œคํ˜„ ์œคํ˜ผ ์œคํ™ ์œคํ™” ์œคํšจ ์œค๋‚จ ์œค๋ˆˆ ์œค๋‹ฌ ์œค๋‹น ์œค๋ด„ ์œค๋น„ ์œค์Šฌ ์œค์—ด ์œค์˜ ์œค์ž ์œคํƒœ ์œคํ˜œ ์œค๋‚  ์œค๋Š˜ ์œค๋ถ„ ์œค์ƒ˜ ์œค์ˆœ ์œค์ธ ์œค์žฅ ์œค์ „ ์œค์ข… ์œค์ฃผ ์œค์ง€ ์œค์ง„ ์œค์ฐฌ ์œค์ฒ˜ ์œจ๋‚˜ ์œจ๋‚œ ์œจ๋‚ด ์œจ๋‹ค ์œจ๋‹จ ์œจ๋‹ด ์œจ๋„ ์œจ๋ผ ์œจ๋ž˜ ์œจ๋ฅ˜ ์œจ๋ฆฌ ์œจ๋ชจ ์œจ๋ฌด ์œจ๋ฏธ ์œจ๋ฏผ ์œจ์‚ฌ ์œจ์‚ฐ ์œจ์ƒ ์œจ์ƒˆ ์œจ์ƒ ์œจ์„œ ์œจ์„  ์œจ์„ค ์œจ์„ฌ ์œจ์„ฑ ์œจ์†Œ ์œจ์†” ์œจ์†œ ์œจ์†ก ์œจ์ˆ˜ ์œจ์‹œ ์œจ์‹  ์œจ์‹ค ์œจ์‹ฌ ์œจ์•„ ์œจ์•ˆ ์œจ์•  ์œจ์–‘ ์œจ์—ฌ ์œจ์—ฐ ์œจ์˜ˆ ์œจ์˜ค ์œจ์˜จ ์œจ์š” ์œจ์šฐ ์œจ์›” ์œจ์œ  ์œจ์œค ์œจ์œจ ์œจ์€ ์œจ์ด ์œจ์ผ ์œจ์ž„ ์œจ์ • ์œจ์ฐจ ์œจ์ฐฝ ์œจ์ฑ„ ์œจ์ฒœ ์œจ์ฒจ ์œจ์ฒญ ์œจ์ดˆ ์œจ์ด ์œจํ‘œ ์œจํ•˜ ์œจํ•œ ์œจํ•ด ์œจํ–ฅ ์œจํ˜„ ์œจํ˜ผ ์œจํ™ ์œจํ™” ์œจํšจ ์œจ๋‚จ ์œจ๋ˆˆ ์œจ๋‹ฌ ์œจ๋‹น ์œจ๋ด„ ์œจ๋น„ ์œจ์Šฌ ์œจ์—ด ์œจ์˜ ์œจ์ž ์œจํƒœ ์œจํ˜œ ์œจ๋‚  ์œจ๋Š˜ ์œจ๋ถ„ ์œจ์ƒ˜ ์œจ์ˆœ ์œจ์ธ ์œจ์žฅ ์œจ์ „ ์œจ์ข… ์œจ์ฃผ ์œจ์ง€ ์œจ์ง„ ์œจ์ฐฌ ์œจ์ฒ˜ ์€๋‚˜ ์€๋‚œ ์€๋‚ด ์€๋‹ค ์€๋‹จ ์€๋‹ด ์€๋„ ์€๋ผ ์€๋ž˜ ์€๋ฅ˜ ์€๋ฆฌ ์€๋ชจ ์€๋ฌด ์€๋ฏธ ์€๋ฏผ ์€์‚ฌ ์€์‚ฐ ์€์ƒ ์€์ƒˆ ์€์ƒ ์€์„œ ์€์„  ์€์„ค ์€์„ฌ ์€์„ฑ ์€์†Œ ์€์†” ์€์†œ ์€์†ก ์€์ˆ˜ ์€์‹œ ์€์‹  ์€์‹ค ์€์‹ฌ ์€์•„ ์€์•ˆ ์€์•  ์€์–‘ ์€์—ฌ ์€์—ฐ ์€์˜ˆ ์€์˜ค ์€์˜จ ์€์š” ์€์šฐ ์€์›” ์€์œ  ์€์œค ์€์œจ ์€์€ ์€์ด ์€์ผ ์€์ž„ ์€์ • ์€์ฐจ ์€์ฐฝ ์€์ฑ„ ์€์ฒœ ์€์ฒจ ์€์ฒญ ์€์ดˆ ์€์ด ์€ํ‘œ ์€ํ•˜ ์€ํ•œ ์€ํ•ด ์€ํ–ฅ ์€ํ˜„ ์€ํ˜ผ ์€ํ™ ์€ํ™” ์€ํšจ ์€๋‚จ ์€๋ˆˆ ์€๋‹ฌ ์€๋‹น ์€๋ด„ ์€๋น„ ์€์Šฌ ์€์—ด ์€์˜ ์€์ž ์€ํƒœ ์€ํ˜œ ์€๋‚  ์€๋Š˜ ์€๋ถ„ ์€์ƒ˜ ์€์ˆœ ์€์ธ ์€์žฅ ์€์ „ ์€์ข… ์€์ฃผ ์€์ง€ ์€์ง„ ์€์ฐฌ ์€์ฒ˜ ์ด๋‚˜ ์ด๋‚œ ์ด๋‚ด ์ด๋‹ค ์ด๋‹จ ์ด๋‹ด ์ด๋„ ์ด๋ผ ์ด๋ž˜ ์ด๋ฅ˜ ์ด๋ฆฌ ์ด๋ชจ ์ด๋ฌด ์ด๋ฏธ ์ด๋ฏผ ์ด์‚ฌ ์ด์‚ฐ ์ด์ƒ ์ด์ƒˆ ์ด์ƒ ์ด์„œ ์ด์„  ์ด์„ค ์ด์„ฌ ์ด์„ฑ ์ด์†Œ ์ด์†” ์ด์†œ ์ด์†ก ์ด์ˆ˜ ์ด์‹œ ์ด์‹  ์ด์‹ค ์ด์‹ฌ ์ด์•„ ์ด์•ˆ ์ด์•  ์ด์–‘ ์ด์—ฌ ์ด์—ฐ ์ด์˜ˆ ์ด์˜ค ์ด์˜จ ์ด์š” ์ด์šฐ ์ด์›” ์ด์œ  ์ด์œค ์ด์œจ ์ด์€ ์ด์ด ์ด์ผ ์ด์ž„ ์ด์ • ์ด์ฐจ ์ด์ฐฝ ์ด์ฑ„ ์ด์ฒœ ์ด์ฒจ ์ด์ฒญ ์ด์ดˆ ์ด์ด ์ดํ‘œ ์ดํ•˜ ์ดํ•œ ์ดํ•ด ์ดํ–ฅ ์ดํ˜„ ์ดํ˜ผ ์ดํ™ ์ดํ™” ์ดํšจ ์ด๋‚จ ์ด๋ˆˆ ์ด๋‹ฌ ์ด๋‹น ์ด๋ด„ ์ด๋น„ ์ด์Šฌ ์ด์—ด ์ด์˜ ์ด์ž ์ดํƒœ ์ดํ˜œ ์ด๋‚  ์ด๋Š˜ ์ด๋ถ„ ์ด์ƒ˜ ์ด์ˆœ ์ด์ธ ์ด์žฅ ์ด์ „ ์ด์ข… ์ด์ฃผ ์ด์ง€ ์ด์ง„ ์ด์ฐฌ ์ด์ฒ˜ ์ผ๋‚˜ ์ผ๋‚œ ์ผ๋‚ด ์ผ๋‹ค ์ผ๋‹จ ์ผ๋‹ด ์ผ๋„ ์ผ๋ผ ์ผ๋ž˜ ์ผ๋ฅ˜ ์ผ๋ฆฌ ์ผ๋ชจ ์ผ๋ฌด ์ผ๋ฏธ ์ผ๋ฏผ ์ผ์‚ฌ ์ผ์‚ฐ ์ผ์ƒ ์ผ์ƒˆ ์ผ์ƒ ์ผ์„œ ์ผ์„  ์ผ์„ค ์ผ์„ฌ ์ผ์„ฑ ์ผ์†Œ ์ผ์†” ์ผ์†œ ์ผ์†ก ์ผ์ˆ˜ ์ผ์‹œ ์ผ์‹  ์ผ์‹ค ์ผ์‹ฌ ์ผ์•„ ์ผ์•ˆ ์ผ์•  ์ผ์–‘ ์ผ์—ฌ ์ผ์—ฐ ์ผ์˜ˆ ์ผ์˜ค ์ผ์˜จ ์ผ์š” ์ผ์šฐ ์ผ์›” ์ผ์œ  ์ผ์œค ์ผ์œจ ์ผ์€ ์ผ์ด ์ผ์ผ ์ผ์ž„ ์ผ์ • ์ผ์ฐจ ์ผ์ฐฝ ์ผ์ฑ„ ์ผ์ฒœ ์ผ์ฒจ ์ผ์ฒญ ์ผ์ดˆ ์ผ์ด ์ผํ‘œ ์ผํ•˜ ์ผํ•œ ์ผํ•ด ์ผํ–ฅ ์ผํ˜„ ์ผํ˜ผ ์ผํ™ ์ผํ™” ์ผํšจ ์ผ๋‚จ ์ผ๋ˆˆ ์ผ๋‹ฌ ์ผ๋‹น ์ผ๋ด„ ์ผ๋น„ ์ผ์Šฌ ์ผ์—ด ์ผ์˜ ์ผ์ž ์ผํƒœ ์ผํ˜œ ์ผ๋‚  ์ผ๋Š˜ ์ผ๋ถ„ ์ผ์ƒ˜ ์ผ์ˆœ ์ผ์ธ ์ผ์žฅ ์ผ์ „ ์ผ์ข… ์ผ์ฃผ ์ผ์ง€ ์ผ์ง„ ์ผ์ฐฌ ์ผ์ฒ˜ ์ž„๋‚˜ ์ž„๋‚œ ์ž„๋‚ด ์ž„๋‹ค ์ž„๋‹จ ์ž„๋‹ด ์ž„๋„ ์ž„๋ผ ์ž„๋ž˜ ์ž„๋ฅ˜ ์ž„๋ฆฌ ์ž„๋ชจ ์ž„๋ฌด ์ž„๋ฏธ ์ž„๋ฏผ ์ž„์‚ฌ ์ž„์‚ฐ ์ž„์ƒ ์ž„์ƒˆ ์ž„์ƒ ์ž„์„œ ์ž„์„  ์ž„์„ค ์ž„์„ฌ ์ž„์„ฑ ์ž„์†Œ ์ž„์†” ์ž„์†œ ์ž„์†ก ์ž„์ˆ˜ ์ž„์‹œ ์ž„์‹  ์ž„์‹ค ์ž„์‹ฌ ์ž„์•„ ์ž„์•ˆ ์ž„์•  ์ž„์–‘ ์ž„์—ฌ ์ž„์—ฐ ์ž„์˜ˆ ์ž„์˜ค ์ž„์˜จ ์ž„์š” ์ž„์šฐ ์ž„์›” ์ž„์œ  ์ž„์œค ์ž„์œจ ์ž„์€ ์ž„์ด ์ž„์ผ ์ž„์ž„ ์ž„์ • ์ž„์ฐจ ์ž„์ฐฝ ์ž„์ฑ„ ์ž„์ฒœ ์ž„์ฒจ ์ž„์ฒญ ์ž„์ดˆ ์ž„์ด ์ž„ํ‘œ ์ž„ํ•˜ ์ž„ํ•œ ์ž„ํ•ด ์ž„ํ–ฅ ์ž„ํ˜„ ์ž„ํ˜ผ ์ž„ํ™ ์ž„ํ™” ์ž„ํšจ ์ž„๋‚จ ์ž„๋ˆˆ ์ž„๋‹ฌ ์ž„๋‹น ์ž„๋ด„ ์ž„๋น„ ์ž„์Šฌ ์ž„์—ด ์ž„์˜ ์ž„์ž ์ž„ํƒœ ์ž„ํ˜œ ์ž„๋‚  ์ž„๋Š˜ ์ž„๋ถ„ ์ž„์ƒ˜ ์ž„์ˆœ ์ž„์ธ ์ž„์žฅ ์ž„์ „ ์ž„์ข… ์ž„์ฃผ ์ž„์ง€ ์ž„์ง„ ์ž„์ฐฌ ์ž„์ฒ˜ ์ •๋‚˜ ์ •๋‚œ ์ •๋‚ด ์ •๋‹ค ์ •๋‹จ ์ •๋‹ด ์ •๋„ ์ •๋ผ ์ •๋ž˜ ์ •๋ฅ˜ ์ •๋ฆฌ ์ •๋ชจ ์ •๋ฌด ์ •๋ฏธ ์ •๋ฏผ ์ •์‚ฌ ์ •์‚ฐ ์ •์ƒ ์ •์ƒˆ ์ •์ƒ ์ •์„œ ์ •์„  ์ •์„ค ์ •์„ฌ ์ •์„ฑ ์ •์†Œ ์ •์†” ์ •์†œ ์ •์†ก ์ •์ˆ˜ ์ •์‹œ ์ •์‹  ์ •์‹ค ์ •์‹ฌ ์ •์•„ ์ •์•ˆ ์ •์•  ์ •์–‘ ์ •์—ฌ ์ •์—ฐ ์ •์˜ˆ ์ •์˜ค ์ •์˜จ ์ •์š” ์ •์šฐ ์ •์›” ์ •์œ  ์ •์œค ์ •์œจ ์ •์€ ์ •์ด ์ •์ผ ์ •์ž„ ์ •์ • ์ •์ฐจ ์ •์ฐฝ ์ •์ฑ„ ์ •์ฒœ ์ •์ฒจ ์ •์ฒญ ์ •์ดˆ ์ •์ด ์ •ํ‘œ ์ •ํ•˜ ์ •ํ•œ ์ •ํ•ด ์ •ํ–ฅ ์ •ํ˜„ ์ •ํ˜ผ ์ •ํ™ ์ •ํ™” ์ •ํšจ ์ •๋‚จ ์ •๋ˆˆ ์ •๋‹ฌ ์ •๋‹น ์ •๋ด„ ์ •๋น„ ์ •์Šฌ ์ •์—ด ์ •์˜ ์ •์ž ์ •ํƒœ ์ •ํ˜œ ์ •๋‚  ์ •๋Š˜ ์ •๋ถ„ ์ •์ƒ˜ ์ •์ˆœ ์ •์ธ ์ •์žฅ ์ •์ „ ์ •์ข… ์ •์ฃผ ์ •์ง€ ์ •์ง„ ์ •์ฐฌ ์ •์ฒ˜ ์ฐจ๋‚˜ ์ฐจ๋‚œ ์ฐจ๋‚ด ์ฐจ๋‹ค ์ฐจ๋‹จ ์ฐจ๋‹ด ์ฐจ๋„ ์ฐจ๋ผ ์ฐจ๋ž˜ ์ฐจ๋ฅ˜ ์ฐจ๋ฆฌ ์ฐจ๋ชจ ์ฐจ๋ฌด ์ฐจ๋ฏธ ์ฐจ๋ฏผ ์ฐจ์‚ฌ ์ฐจ์‚ฐ ์ฐจ์ƒ ์ฐจ์ƒˆ ์ฐจ์ƒ ์ฐจ์„œ ์ฐจ์„  ์ฐจ์„ค ์ฐจ์„ฌ ์ฐจ์„ฑ ์ฐจ์†Œ ์ฐจ์†” ์ฐจ์†œ ์ฐจ์†ก ์ฐจ์ˆ˜ ์ฐจ์‹œ ์ฐจ์‹  ์ฐจ์‹ค ์ฐจ์‹ฌ ์ฐจ์•„ ์ฐจ์•ˆ ์ฐจ์•  ์ฐจ์–‘ ์ฐจ์—ฌ ์ฐจ์—ฐ ์ฐจ์˜ˆ ์ฐจ์˜ค ์ฐจ์˜จ ์ฐจ์š” ์ฐจ์šฐ ์ฐจ์›” ์ฐจ์œ  ์ฐจ์œค ์ฐจ์œจ ์ฐจ์€ ์ฐจ์ด ์ฐจ์ผ ์ฐจ์ž„ ์ฐจ์ • ์ฐจ์ฐจ ์ฐจ์ฐฝ ์ฐจ์ฑ„ ์ฐจ์ฒœ ์ฐจ์ฒจ ์ฐจ์ฒญ ์ฐจ์ดˆ ์ฐจ์ด ์ฐจํ‘œ ์ฐจํ•˜ ์ฐจํ•œ ์ฐจํ•ด ์ฐจํ–ฅ ์ฐจํ˜„ ์ฐจํ˜ผ ์ฐจํ™ ์ฐจํ™” ์ฐจํšจ ์ฐจ๋‚จ ์ฐจ๋ˆˆ ์ฐจ๋‹ฌ ์ฐจ๋‹น ์ฐจ๋ด„ ์ฐจ๋น„ ์ฐจ์Šฌ ์ฐจ์—ด ์ฐจ์˜ ์ฐจ์ž ์ฐจํƒœ ์ฐจํ˜œ ์ฐจ๋‚  ์ฐจ๋Š˜ ์ฐจ๋ถ„ ์ฐจ์ƒ˜ ์ฐจ์ˆœ ์ฐจ์ธ ์ฐจ์žฅ ์ฐจ์ „ ์ฐจ์ข… ์ฐจ์ฃผ ์ฐจ์ง€ ์ฐจ์ง„ ์ฐจ์ฐฌ ์ฐจ์ฒ˜ ์ฐฝ๋‚˜ ์ฐฝ๋‚œ ์ฐฝ๋‚ด ์ฐฝ๋‹ค ์ฐฝ๋‹จ ์ฐฝ๋‹ด ์ฐฝ๋„ ์ฐฝ๋ผ ์ฐฝ๋ž˜ ์ฐฝ๋ฅ˜ ์ฐฝ๋ฆฌ ์ฐฝ๋ชจ ์ฐฝ๋ฌด ์ฐฝ๋ฏธ ์ฐฝ๋ฏผ ์ฐฝ์‚ฌ ์ฐฝ์‚ฐ ์ฐฝ์ƒ ์ฐฝ์ƒˆ ์ฐฝ์ƒ ์ฐฝ์„œ ์ฐฝ์„  ์ฐฝ์„ค ์ฐฝ์„ฌ ์ฐฝ์„ฑ ์ฐฝ์†Œ ์ฐฝ์†” ์ฐฝ์†œ ์ฐฝ์†ก ์ฐฝ์ˆ˜ ์ฐฝ์‹œ ์ฐฝ์‹  ์ฐฝ์‹ค ์ฐฝ์‹ฌ ์ฐฝ์•„ ์ฐฝ์•ˆ ์ฐฝ์•  ์ฐฝ์–‘ ์ฐฝ์—ฌ ์ฐฝ์—ฐ ์ฐฝ์˜ˆ ์ฐฝ์˜ค ์ฐฝ์˜จ ์ฐฝ์š” ์ฐฝ์šฐ ์ฐฝ์›” ์ฐฝ์œ  ์ฐฝ์œค ์ฐฝ์œจ ์ฐฝ์€ ์ฐฝ์ด ์ฐฝ์ผ ์ฐฝ์ž„ ์ฐฝ์ • ์ฐฝ์ฐจ ์ฐฝ์ฐฝ ์ฐฝ์ฑ„ ์ฐฝ์ฒœ ์ฐฝ์ฒจ ์ฐฝ์ฒญ ์ฐฝ์ดˆ ์ฐฝ์ด ์ฐฝํ‘œ ์ฐฝํ•˜ ์ฐฝํ•œ ์ฐฝํ•ด ์ฐฝํ–ฅ ์ฐฝํ˜„ ์ฐฝํ˜ผ ์ฐฝํ™ ์ฐฝํ™” ์ฐฝํšจ ์ฐฝ๋‚จ ์ฐฝ๋ˆˆ ์ฐฝ๋‹ฌ ์ฐฝ๋‹น ์ฐฝ๋ด„ ์ฐฝ๋น„ ์ฐฝ์Šฌ ์ฐฝ์—ด ์ฐฝ์˜ ์ฐฝ์ž ์ฐฝํƒœ ์ฐฝํ˜œ ์ฐฝ๋‚  ์ฐฝ๋Š˜ ์ฐฝ๋ถ„ ์ฐฝ์ƒ˜ ์ฐฝ์ˆœ ์ฐฝ์ธ ์ฐฝ์žฅ ์ฐฝ์ „ ์ฐฝ์ข… ์ฐฝ์ฃผ ์ฐฝ์ง€ ์ฐฝ์ง„ ์ฐฝ์ฐฌ ์ฐฝ์ฒ˜ ์ฑ„๋‚˜ ์ฑ„๋‚œ ์ฑ„๋‚ด ์ฑ„๋‹ค ์ฑ„๋‹จ ์ฑ„๋‹ด ์ฑ„๋„ ์ฑ„๋ผ ์ฑ„๋ž˜ ์ฑ„๋ฅ˜ ์ฑ„๋ฆฌ ์ฑ„๋ชจ ์ฑ„๋ฌด ์ฑ„๋ฏธ ์ฑ„๋ฏผ ์ฑ„์‚ฌ ์ฑ„์‚ฐ ์ฑ„์ƒ ์ฑ„์ƒˆ ์ฑ„์ƒ ์ฑ„์„œ ์ฑ„์„  ์ฑ„์„ค ์ฑ„์„ฌ ์ฑ„์„ฑ ์ฑ„์†Œ ์ฑ„์†” ์ฑ„์†œ ์ฑ„์†ก ์ฑ„์ˆ˜ ์ฑ„์‹œ ์ฑ„์‹  ์ฑ„์‹ค ์ฑ„์‹ฌ ์ฑ„์•„ ์ฑ„์•ˆ ์ฑ„์•  ์ฑ„์–‘ ์ฑ„์—ฌ ์ฑ„์—ฐ ์ฑ„์˜ˆ ์ฑ„์˜ค ์ฑ„์˜จ ์ฑ„์š” ์ฑ„์šฐ ์ฑ„์›” ์ฑ„์œ  ์ฑ„์œค ์ฑ„์œจ ์ฑ„์€ ์ฑ„์ด ์ฑ„์ผ ์ฑ„์ž„ ์ฑ„์ • ์ฑ„์ฐจ ์ฑ„์ฐฝ ์ฑ„์ฑ„ ์ฑ„์ฒœ ์ฑ„์ฒจ ์ฑ„์ฒญ ์ฑ„์ดˆ ์ฑ„์ด ์ฑ„ํ‘œ ์ฑ„ํ•˜ ์ฑ„ํ•œ ์ฑ„ํ•ด ์ฑ„ํ–ฅ ์ฑ„ํ˜„ ์ฑ„ํ˜ผ ์ฑ„ํ™ ์ฑ„ํ™” ์ฑ„ํšจ ์ฑ„๋‚จ ์ฑ„๋ˆˆ ์ฑ„๋‹ฌ ์ฑ„๋‹น ์ฑ„๋ด„ ์ฑ„๋น„ ์ฑ„์Šฌ ์ฑ„์—ด ์ฑ„์˜ ์ฑ„์ž ์ฑ„ํƒœ ์ฑ„ํ˜œ ์ฑ„๋‚  ์ฑ„๋Š˜ ์ฑ„๋ถ„ ์ฑ„์ƒ˜ ์ฑ„์ˆœ ์ฑ„์ธ ์ฑ„์žฅ ์ฑ„์ „ ์ฑ„์ข… ์ฑ„์ฃผ ์ฑ„์ง€ ์ฑ„์ง„ ์ฑ„์ฐฌ ์ฑ„์ฒ˜ ์ฒœ๋‚˜ ์ฒœ๋‚œ ์ฒœ๋‚ด ์ฒœ๋‹ค ์ฒœ๋‹จ ์ฒœ๋‹ด ์ฒœ๋„ ์ฒœ๋ผ ์ฒœ๋ž˜ ์ฒœ๋ฅ˜ ์ฒœ๋ฆฌ ์ฒœ๋ชจ ์ฒœ๋ฌด ์ฒœ๋ฏธ ์ฒœ๋ฏผ ์ฒœ์‚ฌ ์ฒœ์‚ฐ ์ฒœ์ƒ ์ฒœ์ƒˆ ์ฒœ์ƒ ์ฒœ์„œ ์ฒœ์„  ์ฒœ์„ค ์ฒœ์„ฌ ์ฒœ์„ฑ ์ฒœ์†Œ ์ฒœ์†” ์ฒœ์†œ ์ฒœ์†ก ์ฒœ์ˆ˜ ์ฒœ์‹œ ์ฒœ์‹  ์ฒœ์‹ค ์ฒœ์‹ฌ ์ฒœ์•„ ์ฒœ์•ˆ ์ฒœ์•  ์ฒœ์–‘ ์ฒœ์—ฌ ์ฒœ์—ฐ ์ฒœ์˜ˆ ์ฒœ์˜ค ์ฒœ์˜จ ์ฒœ์š” ์ฒœ์šฐ ์ฒœ์›” ์ฒœ์œ  ์ฒœ์œค ์ฒœ์œจ ์ฒœ์€ ์ฒœ์ด ์ฒœ์ผ ์ฒœ์ž„ ์ฒœ์ • ์ฒœ์ฐจ ์ฒœ์ฐฝ ์ฒœ์ฑ„ ์ฒœ์ฒœ ์ฒœ์ฒจ ์ฒœ์ฒญ ์ฒœ์ดˆ ์ฒœ์ด ์ฒœํ‘œ ์ฒœํ•˜ ์ฒœํ•œ ์ฒœํ•ด ์ฒœํ–ฅ ์ฒœํ˜„ ์ฒœํ˜ผ ์ฒœํ™ ์ฒœํ™” ์ฒœํšจ ์ฒœ๋‚จ ์ฒœ๋ˆˆ ์ฒœ๋‹ฌ ์ฒœ๋‹น ์ฒœ๋ด„ ์ฒœ๋น„ ์ฒœ์Šฌ ์ฒœ์—ด ์ฒœ์˜ ์ฒœ์ž ์ฒœํƒœ ์ฒœํ˜œ ์ฒœ๋‚  ์ฒœ๋Š˜ ์ฒœ๋ถ„ ์ฒœ์ƒ˜ ์ฒœ์ˆœ ์ฒœ์ธ ์ฒœ์žฅ ์ฒœ์ „ ์ฒœ์ข… ์ฒœ์ฃผ ์ฒœ์ง€ ์ฒœ์ง„ ์ฒœ์ฐฌ ์ฒœ์ฒ˜ ์ฒจ๋‚˜ ์ฒจ๋‚œ ์ฒจ๋‚ด ์ฒจ๋‹ค ์ฒจ๋‹จ ์ฒจ๋‹ด ์ฒจ๋„ ์ฒจ๋ผ ์ฒจ๋ž˜ ์ฒจ๋ฅ˜ ์ฒจ๋ฆฌ ์ฒจ๋ชจ ์ฒจ๋ฌด ์ฒจ๋ฏธ ์ฒจ๋ฏผ ์ฒจ์‚ฌ ์ฒจ์‚ฐ ์ฒจ์ƒ ์ฒจ์ƒˆ ์ฒจ์ƒ ์ฒจ์„œ ์ฒจ์„  ์ฒจ์„ค ์ฒจ์„ฌ ์ฒจ์„ฑ ์ฒจ์†Œ ์ฒจ์†” ์ฒจ์†œ ์ฒจ์†ก ์ฒจ์ˆ˜ ์ฒจ์‹œ ์ฒจ์‹  ์ฒจ์‹ค ์ฒจ์‹ฌ ์ฒจ์•„ ์ฒจ์•ˆ ์ฒจ์•  ์ฒจ์–‘ ์ฒจ์—ฌ ์ฒจ์—ฐ ์ฒจ์˜ˆ ์ฒจ์˜ค ์ฒจ์˜จ ์ฒจ์š” ์ฒจ์šฐ ์ฒจ์›” ์ฒจ์œ  ์ฒจ์œค ์ฒจ์œจ ์ฒจ์€ ์ฒจ์ด ์ฒจ์ผ ์ฒจ์ž„ ์ฒจ์ • ์ฒจ์ฐจ ์ฒจ์ฐฝ ์ฒจ์ฑ„ ์ฒจ์ฒœ ์ฒจ์ฒจ ์ฒจ์ฒญ ์ฒจ์ดˆ ์ฒจ์ด ์ฒจํ‘œ ์ฒจํ•˜ ์ฒจํ•œ ์ฒจํ•ด ์ฒจํ–ฅ ์ฒจํ˜„ ์ฒจํ˜ผ ์ฒจํ™ ์ฒจํ™” ์ฒจํšจ ์ฒจ๋‚จ ์ฒจ๋ˆˆ ์ฒจ๋‹ฌ ์ฒจ๋‹น ์ฒจ๋ด„ ์ฒจ๋น„ ์ฒจ์Šฌ ์ฒจ์—ด ์ฒจ์˜ ์ฒจ์ž ์ฒจํƒœ ์ฒจํ˜œ ์ฒจ๋‚  ์ฒจ๋Š˜ ์ฒจ๋ถ„ ์ฒจ์ƒ˜ ์ฒจ์ˆœ ์ฒจ์ธ ์ฒจ์žฅ ์ฒจ์ „ ์ฒจ์ข… ์ฒจ์ฃผ ์ฒจ์ง€ ์ฒจ์ง„ ์ฒจ์ฐฌ ์ฒจ์ฒ˜ ์ฒญ๋‚˜ ์ฒญ๋‚œ ์ฒญ๋‚ด ์ฒญ๋‹ค ์ฒญ๋‹จ ์ฒญ๋‹ด ์ฒญ๋„ ์ฒญ๋ผ ์ฒญ๋ž˜ ์ฒญ๋ฅ˜ ์ฒญ๋ฆฌ ์ฒญ๋ชจ ์ฒญ๋ฌด ์ฒญ๋ฏธ ์ฒญ๋ฏผ ์ฒญ์‚ฌ ์ฒญ์‚ฐ ์ฒญ์ƒ ์ฒญ์ƒˆ ์ฒญ์ƒ ์ฒญ์„œ ์ฒญ์„  ์ฒญ์„ค ์ฒญ์„ฌ ์ฒญ์„ฑ ์ฒญ์†Œ ์ฒญ์†” ์ฒญ์†œ ์ฒญ์†ก ์ฒญ์ˆ˜ ์ฒญ์‹œ ์ฒญ์‹  ์ฒญ์‹ค ์ฒญ์‹ฌ ์ฒญ์•„ ์ฒญ์•ˆ ์ฒญ์•  ์ฒญ์–‘ ์ฒญ์—ฌ ์ฒญ์—ฐ ์ฒญ์˜ˆ ์ฒญ์˜ค ์ฒญ์˜จ ์ฒญ์š” ์ฒญ์šฐ ์ฒญ์›” ์ฒญ์œ  ์ฒญ์œค ์ฒญ์œจ ์ฒญ์€ ์ฒญ์ด ์ฒญ์ผ ์ฒญ์ž„ ์ฒญ์ • ์ฒญ์ฐจ ์ฒญ์ฐฝ ์ฒญ์ฑ„ ์ฒญ์ฒœ ์ฒญ์ฒจ ์ฒญ์ฒญ ์ฒญ์ดˆ ์ฒญ์ด ์ฒญํ‘œ ์ฒญํ•˜ ์ฒญํ•œ ์ฒญํ•ด ์ฒญํ–ฅ ์ฒญํ˜„ ์ฒญํ˜ผ ์ฒญํ™ ์ฒญํ™” ์ฒญํšจ ์ฒญ๋‚จ ์ฒญ๋ˆˆ ์ฒญ๋‹ฌ ์ฒญ๋‹น ์ฒญ๋ด„ ์ฒญ๋น„ ์ฒญ์Šฌ ์ฒญ์—ด ์ฒญ์˜ ์ฒญ์ž ์ฒญํƒœ ์ฒญํ˜œ ์ฒญ๋‚  ์ฒญ๋Š˜ ์ฒญ๋ถ„ ์ฒญ์ƒ˜ ์ฒญ์ˆœ ์ฒญ์ธ ์ฒญ์žฅ ์ฒญ์ „ ์ฒญ์ข… ์ฒญ์ฃผ ์ฒญ์ง€ ์ฒญ์ง„ ์ฒญ์ฐฌ ์ฒญ์ฒ˜ ์ดˆ๋‚˜ ์ดˆ๋‚œ ์ดˆ๋‚ด ์ดˆ๋‹ค ์ดˆ๋‹จ ์ดˆ๋‹ด ์ดˆ๋„ ์ดˆ๋ผ ์ดˆ๋ž˜ ์ดˆ๋ฅ˜ ์ดˆ๋ฆฌ ์ดˆ๋ชจ ์ดˆ๋ฌด ์ดˆ๋ฏธ ์ดˆ๋ฏผ ์ดˆ์‚ฌ ์ดˆ์‚ฐ ์ดˆ์ƒ ์ดˆ์ƒˆ ์ดˆ์ƒ ์ดˆ์„œ ์ดˆ์„  ์ดˆ์„ค ์ดˆ์„ฌ ์ดˆ์„ฑ ์ดˆ์†Œ ์ดˆ์†” ์ดˆ์†œ ์ดˆ์†ก ์ดˆ์ˆ˜ ์ดˆ์‹œ ์ดˆ์‹  ์ดˆ์‹ค ์ดˆ์‹ฌ ์ดˆ์•„ ์ดˆ์•ˆ ์ดˆ์•  ์ดˆ์–‘ ์ดˆ์—ฌ ์ดˆ์—ฐ ์ดˆ์˜ˆ ์ดˆ์˜ค ์ดˆ์˜จ ์ดˆ์š” ์ดˆ์šฐ ์ดˆ์›” ์ดˆ์œ  ์ดˆ์œค ์ดˆ์œจ ์ดˆ์€ ์ดˆ์ด ์ดˆ์ผ ์ดˆ์ž„ ์ดˆ์ • ์ดˆ์ฐจ ์ดˆ์ฐฝ ์ดˆ์ฑ„ ์ดˆ์ฒœ ์ดˆ์ฒจ ์ดˆ์ฒญ ์ดˆ์ดˆ ์ดˆ์ด ์ดˆํ‘œ ์ดˆํ•˜ ์ดˆํ•œ ์ดˆํ•ด ์ดˆํ–ฅ ์ดˆํ˜„ ์ดˆํ˜ผ ์ดˆํ™ ์ดˆํ™” ์ดˆํšจ ์ดˆ๋‚จ ์ดˆ๋ˆˆ ์ดˆ๋‹ฌ ์ดˆ๋‹น ์ดˆ๋ด„ ์ดˆ๋น„ ์ดˆ์Šฌ ์ดˆ์—ด ์ดˆ์˜ ์ดˆ์ž ์ดˆํƒœ ์ดˆํ˜œ ์ดˆ๋‚  ์ดˆ๋Š˜ ์ดˆ๋ถ„ ์ดˆ์ƒ˜ ์ดˆ์ˆœ ์ดˆ์ธ ์ดˆ์žฅ ์ดˆ์ „ ์ดˆ์ข… ์ดˆ์ฃผ ์ดˆ์ง€ ์ดˆ์ง„ ์ดˆ์ฐฌ ์ดˆ์ฒ˜ ์ด๋‚˜ ์ด๋‚œ ์ด๋‚ด ์ด๋‹ค ์ด๋‹จ ์ด๋‹ด ์ด๋„ ์ด๋ผ ์ด๋ž˜ ์ด๋ฅ˜ ์ด๋ฆฌ ์ด๋ชจ ์ด๋ฌด ์ด๋ฏธ ์ด๋ฏผ ์ด์‚ฌ ์ด์‚ฐ ์ด์ƒ ์ด์ƒˆ ์ด์ƒ ์ด์„œ ์ด์„  ์ด์„ค ์ด์„ฌ ์ด์„ฑ ์ด์†Œ ์ด์†” ์ด์†œ ์ด์†ก ์ด์ˆ˜ ์ด์‹œ ์ด์‹  ์ด์‹ค ์ด์‹ฌ ์ด์•„ ์ด์•ˆ ์ด์•  ์ด์–‘ ์ด์—ฌ ์ด์—ฐ ์ด์˜ˆ ์ด์˜ค ์ด์˜จ ์ด์š” ์ด์šฐ ์ด์›” ์ด์œ  ์ด์œค ์ด์œจ ์ด์€ ์ด์ด ์ด์ผ ์ด์ž„ ์ด์ • ์ด์ฐจ ์ด์ฐฝ ์ด์ฑ„ ์ด์ฒœ ์ด์ฒจ ์ด์ฒญ ์ด์ดˆ ์ด์ด ์ดํ‘œ ์ดํ•˜ ์ดํ•œ ์ดํ•ด ์ดํ–ฅ ์ดํ˜„ ์ดํ˜ผ ์ดํ™ ์ดํ™” ์ดํšจ ์ด๋‚จ ์ด๋ˆˆ ์ด๋‹ฌ ์ด๋‹น ์ด๋ด„ ์ด๋น„ ์ด์Šฌ ์ด์—ด ์ด์˜ ์ด์ž ์ดํƒœ ์ดํ˜œ ์ด๋‚  ์ด๋Š˜ ์ด๋ถ„ ์ด์ƒ˜ ์ด์ˆœ ์ด์ธ ์ด์žฅ ์ด์ „ ์ด์ข… ์ด์ฃผ ์ด์ง€ ์ด์ง„ ์ด์ฐฌ ์ด์ฒ˜ ํ‘œ๋‚˜ ํ‘œ๋‚œ ํ‘œ๋‚ด ํ‘œ๋‹ค ํ‘œ๋‹จ ํ‘œ๋‹ด ํ‘œ๋„ ํ‘œ๋ผ ํ‘œ๋ž˜ ํ‘œ๋ฅ˜ ํ‘œ๋ฆฌ ํ‘œ๋ชจ ํ‘œ๋ฌด ํ‘œ๋ฏธ ํ‘œ๋ฏผ ํ‘œ์‚ฌ ํ‘œ์‚ฐ ํ‘œ์ƒ ํ‘œ์ƒˆ ํ‘œ์ƒ ํ‘œ์„œ ํ‘œ์„  ํ‘œ์„ค ํ‘œ์„ฌ ํ‘œ์„ฑ ํ‘œ์†Œ ํ‘œ์†” ํ‘œ์†œ ํ‘œ์†ก ํ‘œ์ˆ˜ ํ‘œ์‹œ ํ‘œ์‹  ํ‘œ์‹ค ํ‘œ์‹ฌ ํ‘œ์•„ ํ‘œ์•ˆ ํ‘œ์•  ํ‘œ์–‘ ํ‘œ์—ฌ ํ‘œ์—ฐ ํ‘œ์˜ˆ ํ‘œ์˜ค ํ‘œ์˜จ ํ‘œ์š” ํ‘œ์šฐ ํ‘œ์›” ํ‘œ์œ  ํ‘œ์œค ํ‘œ์œจ ํ‘œ์€ ํ‘œ์ด ํ‘œ์ผ ํ‘œ์ž„ ํ‘œ์ • ํ‘œ์ฐจ ํ‘œ์ฐฝ ํ‘œ์ฑ„ ํ‘œ์ฒœ ํ‘œ์ฒจ ํ‘œ์ฒญ ํ‘œ์ดˆ ํ‘œ์ด ํ‘œํ‘œ ํ‘œํ•˜ ํ‘œํ•œ ํ‘œํ•ด ํ‘œํ–ฅ ํ‘œํ˜„ ํ‘œํ˜ผ ํ‘œํ™ ํ‘œํ™” ํ‘œํšจ ํ‘œ๋‚จ ํ‘œ๋ˆˆ ํ‘œ๋‹ฌ ํ‘œ๋‹น ํ‘œ๋ด„ ํ‘œ๋น„ ํ‘œ์Šฌ ํ‘œ์—ด ํ‘œ์˜ ํ‘œ์ž ํ‘œํƒœ ํ‘œํ˜œ ํ‘œ๋‚  ํ‘œ๋Š˜ ํ‘œ๋ถ„ ํ‘œ์ƒ˜ ํ‘œ์ˆœ ํ‘œ์ธ ํ‘œ์žฅ ํ‘œ์ „ ํ‘œ์ข… ํ‘œ์ฃผ ํ‘œ์ง€ ํ‘œ์ง„ ํ‘œ์ฐฌ ํ‘œ์ฒ˜ ํ•˜๋‚˜ ํ•˜๋‚œ ํ•˜๋‚ด ํ•˜๋‹ค ํ•˜๋‹จ ํ•˜๋‹ด ํ•˜๋„ ํ•˜๋ผ ํ•˜๋ž˜ ํ•˜๋ฅ˜ ํ•˜๋ฆฌ ํ•˜๋ชจ ํ•˜๋ฌด ํ•˜๋ฏธ ํ•˜๋ฏผ ํ•˜์‚ฌ ํ•˜์‚ฐ ํ•˜์ƒ ํ•˜์ƒˆ ํ•˜์ƒ ํ•˜์„œ ํ•˜์„  ํ•˜์„ค ํ•˜์„ฌ ํ•˜์„ฑ ํ•˜์†Œ ํ•˜์†” ํ•˜์†œ ํ•˜์†ก ํ•˜์ˆ˜ ํ•˜์‹œ ํ•˜์‹  ํ•˜์‹ค ํ•˜์‹ฌ ํ•˜์•„ ํ•˜์•ˆ ํ•˜์•  ํ•˜์–‘ ํ•˜์—ฌ ํ•˜์—ฐ ํ•˜์˜ˆ ํ•˜์˜ค ํ•˜์˜จ ํ•˜์š” ํ•˜์šฐ ํ•˜์›” ํ•˜์œ  ํ•˜์œค ํ•˜์œจ ํ•˜์€ ํ•˜์ด ํ•˜์ผ ํ•˜์ž„ ํ•˜์ • ํ•˜์ฐจ ํ•˜์ฐฝ ํ•˜์ฑ„ ํ•˜์ฒœ ํ•˜์ฒจ ํ•˜์ฒญ ํ•˜์ดˆ ํ•˜์ด ํ•˜ํ‘œ ํ•˜ํ•˜ ํ•˜ํ•œ ํ•˜ํ•ด ํ•˜ํ–ฅ ํ•˜ํ˜„ ํ•˜ํ˜ผ ํ•˜ํ™ ํ•˜ํ™” ํ•˜ํšจ ํ•˜๋‚จ ํ•˜๋ˆˆ ํ•˜๋‹ฌ ํ•˜๋‹น ํ•˜๋ด„ ํ•˜๋น„ ํ•˜์Šฌ ํ•˜์—ด ํ•˜์˜ ํ•˜์ž ํ•˜ํƒœ ํ•˜ํ˜œ ํ•˜๋‚  ํ•˜๋Š˜ ํ•˜๋ถ„ ํ•˜์ƒ˜ ํ•˜์ˆœ ํ•˜์ธ ํ•˜์žฅ ํ•˜์ „ ํ•˜์ข… ํ•˜์ฃผ ํ•˜์ง€ ํ•˜์ง„ ํ•˜์ฐฌ ํ•˜์ฒ˜ ํ•œ๋‚˜ ํ•œ๋‚œ ํ•œ๋‚ด ํ•œ๋‹ค ํ•œ๋‹จ ํ•œ๋‹ด ํ•œ๋„ ํ•œ๋ผ ํ•œ๋ž˜ ํ•œ๋ฅ˜ ํ•œ๋ฆฌ ํ•œ๋ชจ ํ•œ๋ฌด ํ•œ๋ฏธ ํ•œ๋ฏผ ํ•œ์‚ฌ ํ•œ์‚ฐ ํ•œ์ƒ ํ•œ์ƒˆ ํ•œ์ƒ ํ•œ์„œ ํ•œ์„  ํ•œ์„ค ํ•œ์„ฌ ํ•œ์„ฑ ํ•œ์†Œ ํ•œ์†” ํ•œ์†œ ํ•œ์†ก ํ•œ์ˆ˜ ํ•œ์‹œ ํ•œ์‹  ํ•œ์‹ค ํ•œ์‹ฌ ํ•œ์•„ ํ•œ์•ˆ ํ•œ์•  ํ•œ์–‘ ํ•œ์—ฌ ํ•œ์—ฐ ํ•œ์˜ˆ ํ•œ์˜ค ํ•œ์˜จ ํ•œ์š” ํ•œ์šฐ ํ•œ์›” ํ•œ์œ  ํ•œ์œค ํ•œ์œจ ํ•œ์€ ํ•œ์ด ํ•œ์ผ ํ•œ์ž„ ํ•œ์ • ํ•œ์ฐจ ํ•œ์ฐฝ ํ•œ์ฑ„ ํ•œ์ฒœ ํ•œ์ฒจ ํ•œ์ฒญ ํ•œ์ดˆ ํ•œ์ด ํ•œํ‘œ ํ•œํ•˜ ํ•œํ•œ ํ•œํ•ด ํ•œํ–ฅ ํ•œํ˜„ ํ•œํ˜ผ ํ•œํ™ ํ•œํ™” ํ•œํšจ ํ•œ๋‚จ ํ•œ๋ˆˆ ํ•œ๋‹ฌ ํ•œ๋‹น ํ•œ๋ด„ ํ•œ๋น„ ํ•œ์Šฌ ํ•œ์—ด ํ•œ์˜ ํ•œ์ž ํ•œํƒœ ํ•œํ˜œ ํ•œ๋‚  ํ•œ๋Š˜ ํ•œ๋ถ„ ํ•œ์ƒ˜ ํ•œ์ˆœ ํ•œ์ธ ํ•œ์žฅ ํ•œ์ „ ํ•œ์ข… ํ•œ์ฃผ ํ•œ์ง€ ํ•œ์ง„ ํ•œ์ฐฌ ํ•œ์ฒ˜ ํ•ด๋‚˜ ํ•ด๋‚œ ํ•ด๋‚ด ํ•ด๋‹ค ํ•ด๋‹จ ํ•ด๋‹ด ํ•ด๋„ ํ•ด๋ผ ํ•ด๋ž˜ ํ•ด๋ฅ˜ ํ•ด๋ฆฌ ํ•ด๋ชจ ํ•ด๋ฌด ํ•ด๋ฏธ ํ•ด๋ฏผ ํ•ด์‚ฌ ํ•ด์‚ฐ ํ•ด์ƒ ํ•ด์ƒˆ ํ•ด์ƒ ํ•ด์„œ ํ•ด์„  ํ•ด์„ค ํ•ด์„ฌ ํ•ด์„ฑ ํ•ด์†Œ ํ•ด์†” ํ•ด์†œ ํ•ด์†ก ํ•ด์ˆ˜ ํ•ด์‹œ ํ•ด์‹  ํ•ด์‹ค ํ•ด์‹ฌ ํ•ด์•„ ํ•ด์•ˆ ํ•ด์•  ํ•ด์–‘ ํ•ด์—ฌ ํ•ด์—ฐ ํ•ด์˜ˆ ํ•ด์˜ค ํ•ด์˜จ ํ•ด์š” ํ•ด์šฐ ํ•ด์›” ํ•ด์œ  ํ•ด์œค ํ•ด์œจ ํ•ด์€ ํ•ด์ด ํ•ด์ผ ํ•ด์ž„ ํ•ด์ • ํ•ด์ฐจ ํ•ด์ฐฝ ํ•ด์ฑ„ ํ•ด์ฒœ ํ•ด์ฒจ ํ•ด์ฒญ ํ•ด์ดˆ ํ•ด์ด ํ•ดํ‘œ ํ•ดํ•˜ ํ•ดํ•œ ํ•ดํ•ด ํ•ดํ–ฅ ํ•ดํ˜„ ํ•ดํ˜ผ ํ•ดํ™ ํ•ดํ™” ํ•ดํšจ ํ•ด๋‚จ ํ•ด๋ˆˆ ํ•ด๋‹ฌ ํ•ด๋‹น ํ•ด๋ด„ ํ•ด๋น„ ํ•ด์Šฌ ํ•ด์—ด ํ•ด์˜ ํ•ด์ž ํ•ดํƒœ ํ•ดํ˜œ ํ•ด๋‚  ํ•ด๋Š˜ ํ•ด๋ถ„ ํ•ด์ƒ˜ ํ•ด์ˆœ ํ•ด์ธ ํ•ด์žฅ ํ•ด์ „ ํ•ด์ข… ํ•ด์ฃผ ํ•ด์ง€ ํ•ด์ง„ ํ•ด์ฐฌ ํ•ด์ฒ˜ ํ–ฅ๋‚˜ ํ–ฅ๋‚œ ํ–ฅ๋‚ด ํ–ฅ๋‹ค ํ–ฅ๋‹จ ํ–ฅ๋‹ด ํ–ฅ๋„ ํ–ฅ๋ผ ํ–ฅ๋ž˜ ํ–ฅ๋ฅ˜ ํ–ฅ๋ฆฌ ํ–ฅ๋ชจ ํ–ฅ๋ฌด ํ–ฅ๋ฏธ ํ–ฅ๋ฏผ ํ–ฅ์‚ฌ ํ–ฅ์‚ฐ ํ–ฅ์ƒ ํ–ฅ์ƒˆ ํ–ฅ์ƒ ํ–ฅ์„œ ํ–ฅ์„  ํ–ฅ์„ค ํ–ฅ์„ฌ ํ–ฅ์„ฑ ํ–ฅ์†Œ ํ–ฅ์†” ํ–ฅ์†œ ํ–ฅ์†ก ํ–ฅ์ˆ˜ ํ–ฅ์‹œ ํ–ฅ์‹  ํ–ฅ์‹ค ํ–ฅ์‹ฌ ํ–ฅ์•„ ํ–ฅ์•ˆ ํ–ฅ์•  ํ–ฅ์–‘ ํ–ฅ์—ฌ ํ–ฅ์—ฐ ํ–ฅ์˜ˆ ํ–ฅ์˜ค ํ–ฅ์˜จ ํ–ฅ์š” ํ–ฅ์šฐ ํ–ฅ์›” ํ–ฅ์œ  ํ–ฅ์œค ํ–ฅ์œจ ํ–ฅ์€ ํ–ฅ์ด ํ–ฅ์ผ ํ–ฅ์ž„ ํ–ฅ์ • ํ–ฅ์ฐจ ํ–ฅ์ฐฝ ํ–ฅ์ฑ„ ํ–ฅ์ฒœ ํ–ฅ์ฒจ ํ–ฅ์ฒญ ํ–ฅ์ดˆ ํ–ฅ์ด ํ–ฅํ‘œ ํ–ฅํ•˜ ํ–ฅํ•œ ํ–ฅํ•ด ํ–ฅํ–ฅ ํ–ฅํ˜„ ํ–ฅํ˜ผ ํ–ฅํ™ ํ–ฅํ™” ํ–ฅํšจ ํ–ฅ๋‚จ ํ–ฅ๋ˆˆ ํ–ฅ๋‹ฌ ํ–ฅ๋‹น ํ–ฅ๋ด„ ํ–ฅ๋น„ ํ–ฅ์Šฌ ํ–ฅ์—ด ํ–ฅ์˜ ํ–ฅ์ž ํ–ฅํƒœ ํ–ฅํ˜œ ํ–ฅ๋‚  ํ–ฅ๋Š˜ ํ–ฅ๋ถ„ ํ–ฅ์ƒ˜ ํ–ฅ์ˆœ ํ–ฅ์ธ ํ–ฅ์žฅ ํ–ฅ์ „ ํ–ฅ์ข… ํ–ฅ์ฃผ ํ–ฅ์ง€ ํ–ฅ์ง„ ํ–ฅ์ฐฌ ํ–ฅ์ฒ˜ ํ˜„๋‚˜ ํ˜„๋‚œ ํ˜„๋‚ด ํ˜„๋‹ค ํ˜„๋‹จ ํ˜„๋‹ด ํ˜„๋„ ํ˜„๋ผ ํ˜„๋ž˜ ํ˜„๋ฅ˜ ํ˜„๋ฆฌ ํ˜„๋ชจ ํ˜„๋ฌด ํ˜„๋ฏธ ํ˜„๋ฏผ ํ˜„์‚ฌ ํ˜„์‚ฐ ํ˜„์ƒ ํ˜„์ƒˆ ํ˜„์ƒ ํ˜„์„œ ํ˜„์„  ํ˜„์„ค ํ˜„์„ฌ ํ˜„์„ฑ ํ˜„์†Œ ํ˜„์†” ํ˜„์†œ ํ˜„์†ก ํ˜„์ˆ˜ ํ˜„์‹œ ํ˜„์‹  ํ˜„์‹ค ํ˜„์‹ฌ ํ˜„์•„ ํ˜„์•ˆ ํ˜„์•  ํ˜„์–‘ ํ˜„์—ฌ ํ˜„์—ฐ ํ˜„์˜ˆ ํ˜„์˜ค ํ˜„์˜จ ํ˜„์š” ํ˜„์šฐ ํ˜„์›” ํ˜„์œ  ํ˜„์œค ํ˜„์œจ ํ˜„์€ ํ˜„์ด ํ˜„์ผ ํ˜„์ž„ ํ˜„์ • ํ˜„์ฐจ ํ˜„์ฐฝ ํ˜„์ฑ„ ํ˜„์ฒœ ํ˜„์ฒจ ํ˜„์ฒญ ํ˜„์ดˆ ํ˜„์ด ํ˜„ํ‘œ ํ˜„ํ•˜ ํ˜„ํ•œ ํ˜„ํ•ด ํ˜„ํ–ฅ ํ˜„ํ˜„ ํ˜„ํ˜ผ ํ˜„ํ™ ํ˜„ํ™” ํ˜„ํšจ ํ˜„๋‚จ ํ˜„๋ˆˆ ํ˜„๋‹ฌ ํ˜„๋‹น ํ˜„๋ด„ ํ˜„๋น„ ํ˜„์Šฌ ํ˜„์—ด ํ˜„์˜ ํ˜„์ž ํ˜„ํƒœ ํ˜„ํ˜œ ํ˜„๋‚  ํ˜„๋Š˜ ํ˜„๋ถ„ ํ˜„์ƒ˜ ํ˜„์ˆœ ํ˜„์ธ ํ˜„์žฅ ํ˜„์ „ ํ˜„์ข… ํ˜„์ฃผ ํ˜„์ง€ ํ˜„์ง„ ํ˜„์ฐฌ ํ˜„์ฒ˜ ํ˜ผ๋‚˜ ํ˜ผ๋‚œ ํ˜ผ๋‚ด ํ˜ผ๋‹ค ํ˜ผ๋‹จ ํ˜ผ๋‹ด ํ˜ผ๋„ ํ˜ผ๋ผ ํ˜ผ๋ž˜ ํ˜ผ๋ฅ˜ ํ˜ผ๋ฆฌ ํ˜ผ๋ชจ ํ˜ผ๋ฌด ํ˜ผ๋ฏธ ํ˜ผ๋ฏผ ํ˜ผ์‚ฌ ํ˜ผ์‚ฐ ํ˜ผ์ƒ ํ˜ผ์ƒˆ ํ˜ผ์ƒ ํ˜ผ์„œ ํ˜ผ์„  ํ˜ผ์„ค ํ˜ผ์„ฌ ํ˜ผ์„ฑ ํ˜ผ์†Œ ํ˜ผ์†” ํ˜ผ์†œ ํ˜ผ์†ก ํ˜ผ์ˆ˜ ํ˜ผ์‹œ ํ˜ผ์‹  ํ˜ผ์‹ค ํ˜ผ์‹ฌ ํ˜ผ์•„ ํ˜ผ์•ˆ ํ˜ผ์•  ํ˜ผ์–‘ ํ˜ผ์—ฌ ํ˜ผ์—ฐ ํ˜ผ์˜ˆ ํ˜ผ์˜ค ํ˜ผ์˜จ ํ˜ผ์š” ํ˜ผ์šฐ ํ˜ผ์›” ํ˜ผ์œ  ํ˜ผ์œค ํ˜ผ์œจ ํ˜ผ์€ ํ˜ผ์ด ํ˜ผ์ผ ํ˜ผ์ž„ ํ˜ผ์ • ํ˜ผ์ฐจ ํ˜ผ์ฐฝ ํ˜ผ์ฑ„ ํ˜ผ์ฒœ ํ˜ผ์ฒจ ํ˜ผ์ฒญ ํ˜ผ์ดˆ ํ˜ผ์ด ํ˜ผํ‘œ ํ˜ผํ•˜ ํ˜ผํ•œ ํ˜ผํ•ด ํ˜ผํ–ฅ ํ˜ผํ˜„ ํ˜ผํ˜ผ ํ˜ผํ™ ํ˜ผํ™” ํ˜ผํšจ ํ˜ผ๋‚จ ํ˜ผ๋ˆˆ ํ˜ผ๋‹ฌ ํ˜ผ๋‹น ํ˜ผ๋ด„ ํ˜ผ๋น„ ํ˜ผ์Šฌ ํ˜ผ์—ด ํ˜ผ์˜ ํ˜ผ์ž ํ˜ผํƒœ ํ˜ผํ˜œ ํ˜ผ๋‚  ํ˜ผ๋Š˜ ํ˜ผ๋ถ„ ํ˜ผ์ƒ˜ ํ˜ผ์ˆœ ํ˜ผ์ธ ํ˜ผ์žฅ ํ˜ผ์ „ ํ˜ผ์ข… ํ˜ผ์ฃผ ํ˜ผ์ง€ ํ˜ผ์ง„ ํ˜ผ์ฐฌ ํ˜ผ์ฒ˜ ํ™๋‚˜ ํ™๋‚œ ํ™๋‚ด ํ™๋‹ค ํ™๋‹จ ํ™๋‹ด ํ™๋„ ํ™๋ผ ํ™๋ž˜ ํ™๋ฅ˜ ํ™๋ฆฌ ํ™๋ชจ ํ™๋ฌด ํ™๋ฏธ ํ™๋ฏผ ํ™์‚ฌ ํ™์‚ฐ ํ™์ƒ ํ™์ƒˆ ํ™์ƒ ํ™์„œ ํ™์„  ํ™์„ค ํ™์„ฌ ํ™์„ฑ ํ™์†Œ ํ™์†” ํ™์†œ ํ™์†ก ํ™์ˆ˜ ํ™์‹œ ํ™์‹  ํ™์‹ค ํ™์‹ฌ ํ™์•„ ํ™์•ˆ ํ™์•  ํ™์–‘ ํ™์—ฌ ํ™์—ฐ ํ™์˜ˆ ํ™์˜ค ํ™์˜จ ํ™์š” ํ™์šฐ ํ™์›” ํ™์œ  ํ™์œค ํ™์œจ ํ™์€ ํ™์ด ํ™์ผ ํ™์ž„ ํ™์ • ํ™์ฐจ ํ™์ฐฝ ํ™์ฑ„ ํ™์ฒœ ํ™์ฒจ ํ™์ฒญ ํ™์ดˆ ํ™์ด ํ™ํ‘œ ํ™ํ•˜ ํ™ํ•œ ํ™ํ•ด ํ™ํ–ฅ ํ™ํ˜„ ํ™ํ˜ผ ํ™ํ™ ํ™ํ™” ํ™ํšจ ํ™๋‚จ ํ™๋ˆˆ ํ™๋‹ฌ ํ™๋‹น ํ™๋ด„ ํ™๋น„ ํ™์Šฌ ํ™์—ด ํ™์˜ ํ™์ž ํ™ํƒœ ํ™ํ˜œ ํ™๋‚  ํ™๋Š˜ ํ™๋ถ„ ํ™์ƒ˜ ํ™์ˆœ ํ™์ธ ํ™์žฅ ํ™์ „ ํ™์ข… ํ™์ฃผ ํ™์ง€ ํ™์ง„ ํ™์ฐฌ ํ™์ฒ˜ ํ™”๋‚˜ ํ™”๋‚œ ํ™”๋‚ด ํ™”๋‹ค ํ™”๋‹จ ํ™”๋‹ด ํ™”๋„ ํ™”๋ผ ํ™”๋ž˜ ํ™”๋ฅ˜ ํ™”๋ฆฌ ํ™”๋ชจ ํ™”๋ฌด ํ™”๋ฏธ ํ™”๋ฏผ ํ™”์‚ฌ ํ™”์‚ฐ ํ™”์ƒ ํ™”์ƒˆ ํ™”์ƒ ํ™”์„œ ํ™”์„  ํ™”์„ค ํ™”์„ฌ ํ™”์„ฑ ํ™”์†Œ ํ™”์†” ํ™”์†œ ํ™”์†ก ํ™”์ˆ˜ ํ™”์‹œ ํ™”์‹  ํ™”์‹ค ํ™”์‹ฌ ํ™”์•„ ํ™”์•ˆ ํ™”์•  ํ™”์–‘ ํ™”์—ฌ ํ™”์—ฐ ํ™”์˜ˆ ํ™”์˜ค ํ™”์˜จ ํ™”์š” ํ™”์šฐ ํ™”์›” ํ™”์œ  ํ™”์œค ํ™”์œจ ํ™”์€ ํ™”์ด ํ™”์ผ ํ™”์ž„ ํ™”์ • ํ™”์ฐจ ํ™”์ฐฝ ํ™”์ฑ„ ํ™”์ฒœ ํ™”์ฒจ ํ™”์ฒญ ํ™”์ดˆ ํ™”์ด ํ™”ํ‘œ ํ™”ํ•˜ ํ™”ํ•œ ํ™”ํ•ด ํ™”ํ–ฅ ํ™”ํ˜„ ํ™”ํ˜ผ ํ™”ํ™ ํ™”ํ™” ํ™”ํšจ ํ™”๋‚จ ํ™”๋ˆˆ ํ™”๋‹ฌ ํ™”๋‹น ํ™”๋ด„ ํ™”๋น„ ํ™”์Šฌ ํ™”์—ด ํ™”์˜ ํ™”์ž ํ™”ํƒœ ํ™”ํ˜œ ํ™”๋‚  ํ™”๋Š˜ ํ™”๋ถ„ ํ™”์ƒ˜ ํ™”์ˆœ ํ™”์ธ ํ™”์žฅ ํ™”์ „ ํ™”์ข… ํ™”์ฃผ ํ™”์ง€ ํ™”์ง„ ํ™”์ฐฌ ํ™”์ฒ˜ ํšจ๋‚˜ ํšจ๋‚œ ํšจ๋‚ด ํšจ๋‹ค ํšจ๋‹จ ํšจ๋‹ด ํšจ๋„ ํšจ๋ผ ํšจ๋ž˜ ํšจ๋ฅ˜ ํšจ๋ฆฌ ํšจ๋ชจ ํšจ๋ฌด ํšจ๋ฏธ ํšจ๋ฏผ ํšจ์‚ฌ ํšจ์‚ฐ ํšจ์ƒ ํšจ์ƒˆ ํšจ์ƒ ํšจ์„œ ํšจ์„  ํšจ์„ค ํšจ์„ฌ ํšจ์„ฑ ํšจ์†Œ ํšจ์†” ํšจ์†œ ํšจ์†ก ํšจ์ˆ˜ ํšจ์‹œ ํšจ์‹  ํšจ์‹ค ํšจ์‹ฌ ํšจ์•„ ํšจ์•ˆ ํšจ์•  ํšจ์–‘ ํšจ์—ฌ ํšจ์—ฐ ํšจ์˜ˆ ํšจ์˜ค ํšจ์˜จ ํšจ์š” ํšจ์šฐ ํšจ์›” ํšจ์œ  ํšจ์œค ํšจ์œจ ํšจ์€ ํšจ์ด ํšจ์ผ ํšจ์ž„ ํšจ์ • ํšจ์ฐจ ํšจ์ฐฝ ํšจ์ฑ„ ํšจ์ฒœ ํšจ์ฒจ ํšจ์ฒญ ํšจ์ดˆ ํšจ์ด ํšจํ‘œ ํšจํ•˜ ํšจํ•œ ํšจํ•ด ํšจํ–ฅ ํšจํ˜„ ํšจํ˜ผ ํšจํ™ ํšจํ™” ํšจํšจ ํšจ๋‚จ ํšจ๋ˆˆ ํšจ๋‹ฌ ํšจ๋‹น ํšจ๋ด„ ํšจ๋น„ ํšจ์Šฌ ํšจ์—ด ํšจ์˜ ํšจ์ž ํšจํƒœ ํšจํ˜œ ํšจ๋‚  ํšจ๋Š˜ ํšจ๋ถ„ ํšจ์ƒ˜ ํšจ์ˆœ ํšจ์ธ ํšจ์žฅ ํšจ์ „ ํšจ์ข… ํšจ์ฃผ ํšจ์ง€ ํšจ์ง„ ํšจ์ฐฌ ํšจ์ฒ˜ ๋‚จ๋‚˜ ๋‚จ๋‚œ ๋‚จ๋‚ด ๋‚จ๋‹ค ๋‚จ๋‹จ ๋‚จ๋‹ด ๋‚จ๋„ ๋‚จ๋ผ ๋‚จ๋ž˜ ๋‚จ๋ฅ˜ ๋‚จ๋ฆฌ ๋‚จ๋ชจ ๋‚จ๋ฌด ๋‚จ๋ฏธ ๋‚จ๋ฏผ ๋‚จ์‚ฌ ๋‚จ์‚ฐ ๋‚จ์ƒ ๋‚จ์ƒˆ ๋‚จ์ƒ ๋‚จ์„œ ๋‚จ์„  ๋‚จ์„ค ๋‚จ์„ฌ ๋‚จ์„ฑ ๋‚จ์†Œ ๋‚จ์†” ๋‚จ์†œ ๋‚จ์†ก ๋‚จ์ˆ˜ ๋‚จ์‹œ ๋‚จ์‹  ๋‚จ์‹ค ๋‚จ์‹ฌ ๋‚จ์•„ ๋‚จ์•ˆ ๋‚จ์•  ๋‚จ์–‘ ๋‚จ์—ฌ ๋‚จ์—ฐ ๋‚จ์˜ˆ ๋‚จ์˜ค ๋‚จ์˜จ ๋‚จ์š” ๋‚จ์šฐ ๋‚จ์›” ๋‚จ์œ  ๋‚จ์œค ๋‚จ์œจ ๋‚จ์€ ๋‚จ์ด ๋‚จ์ผ ๋‚จ์ž„ ๋‚จ์ • ๋‚จ์ฐจ ๋‚จ์ฐฝ ๋‚จ์ฑ„ ๋‚จ์ฒœ ๋‚จ์ฒจ ๋‚จ์ฒญ ๋‚จ์ดˆ ๋‚จ์ด ๋‚จํ‘œ ๋‚จํ•˜ ๋‚จํ•œ ๋‚จํ•ด ๋‚จํ–ฅ ๋‚จํ˜„ ๋‚จํ˜ผ ๋‚จํ™ ๋‚จํ™” ๋‚จํšจ ๋‚จ๋‚จ ๋‚จ๋ˆˆ ๋‚จ๋‹ฌ ๋‚จ๋‹น ๋‚จ๋ด„ ๋‚จ๋น„ ๋‚จ์Šฌ ๋‚จ์—ด ๋‚จ์˜ ๋‚จ์ž ๋‚จํƒœ ๋‚จํ˜œ ๋‚จ๋‚  ๋‚จ๋Š˜ ๋‚จ๋ถ„ ๋‚จ์ƒ˜ ๋‚จ์ˆœ ๋‚จ์ธ ๋‚จ์žฅ ๋‚จ์ „ ๋‚จ์ข… ๋‚จ์ฃผ ๋‚จ์ง€ ๋‚จ์ง„ ๋‚จ์ฐฌ ๋‚จ์ฒ˜ ๋ˆˆ๋‚˜ ๋ˆˆ๋‚œ ๋ˆˆ๋‚ด ๋ˆˆ๋‹ค ๋ˆˆ๋‹จ ๋ˆˆ๋‹ด ๋ˆˆ๋„ ๋ˆˆ๋ผ ๋ˆˆ๋ž˜ ๋ˆˆ๋ฅ˜ ๋ˆˆ๋ฆฌ ๋ˆˆ๋ชจ ๋ˆˆ๋ฌด ๋ˆˆ๋ฏธ ๋ˆˆ๋ฏผ ๋ˆˆ์‚ฌ ๋ˆˆ์‚ฐ ๋ˆˆ์ƒ ๋ˆˆ์ƒˆ ๋ˆˆ์ƒ ๋ˆˆ์„œ ๋ˆˆ์„  ๋ˆˆ์„ค ๋ˆˆ์„ฌ ๋ˆˆ์„ฑ ๋ˆˆ์†Œ ๋ˆˆ์†” ๋ˆˆ์†œ ๋ˆˆ์†ก ๋ˆˆ์ˆ˜ ๋ˆˆ์‹œ ๋ˆˆ์‹  ๋ˆˆ์‹ค ๋ˆˆ์‹ฌ ๋ˆˆ์•„ ๋ˆˆ์•ˆ ๋ˆˆ์•  ๋ˆˆ์–‘ ๋ˆˆ์—ฌ ๋ˆˆ์—ฐ ๋ˆˆ์˜ˆ ๋ˆˆ์˜ค ๋ˆˆ์˜จ ๋ˆˆ์š” ๋ˆˆ์šฐ ๋ˆˆ์›” ๋ˆˆ์œ  ๋ˆˆ์œค ๋ˆˆ์œจ ๋ˆˆ์€ ๋ˆˆ์ด ๋ˆˆ์ผ ๋ˆˆ์ž„ ๋ˆˆ์ • ๋ˆˆ์ฐจ ๋ˆˆ์ฐฝ ๋ˆˆ์ฑ„ ๋ˆˆ์ฒœ ๋ˆˆ์ฒจ ๋ˆˆ์ฒญ ๋ˆˆ์ดˆ ๋ˆˆ์ด ๋ˆˆํ‘œ ๋ˆˆํ•˜ ๋ˆˆํ•œ ๋ˆˆํ•ด ๋ˆˆํ–ฅ ๋ˆˆํ˜„ ๋ˆˆํ˜ผ ๋ˆˆํ™ ๋ˆˆํ™” ๋ˆˆํšจ ๋ˆˆ๋‚จ ๋ˆˆ๋ˆˆ ๋ˆˆ๋‹ฌ ๋ˆˆ๋‹น ๋ˆˆ๋ด„ ๋ˆˆ๋น„ ๋ˆˆ์Šฌ ๋ˆˆ์—ด ๋ˆˆ์˜ ๋ˆˆ์ž ๋ˆˆํƒœ ๋ˆˆํ˜œ ๋ˆˆ๋‚  ๋ˆˆ๋Š˜ ๋ˆˆ๋ถ„ ๋ˆˆ์ƒ˜ ๋ˆˆ์ˆœ ๋ˆˆ์ธ ๋ˆˆ์žฅ ๋ˆˆ์ „ ๋ˆˆ์ข… ๋ˆˆ์ฃผ ๋ˆˆ์ง€ ๋ˆˆ์ง„ ๋ˆˆ์ฐฌ ๋ˆˆ์ฒ˜ ๋‹ฌ๋‚˜ ๋‹ฌ๋‚œ ๋‹ฌ๋‚ด ๋‹ฌ๋‹ค ๋‹ฌ๋‹จ ๋‹ฌ๋‹ด ๋‹ฌ๋„ ๋‹ฌ๋ผ ๋‹ฌ๋ž˜ ๋‹ฌ๋ฅ˜ ๋‹ฌ๋ฆฌ ๋‹ฌ๋ชจ ๋‹ฌ๋ฌด ๋‹ฌ๋ฏธ ๋‹ฌ๋ฏผ ๋‹ฌ์‚ฌ ๋‹ฌ์‚ฐ ๋‹ฌ์ƒ ๋‹ฌ์ƒˆ ๋‹ฌ์ƒ ๋‹ฌ์„œ ๋‹ฌ์„  ๋‹ฌ์„ค ๋‹ฌ์„ฌ ๋‹ฌ์„ฑ ๋‹ฌ์†Œ ๋‹ฌ์†” ๋‹ฌ์†œ ๋‹ฌ์†ก ๋‹ฌ์ˆ˜ ๋‹ฌ์‹œ ๋‹ฌ์‹  ๋‹ฌ์‹ค ๋‹ฌ์‹ฌ ๋‹ฌ์•„ ๋‹ฌ์•ˆ ๋‹ฌ์•  ๋‹ฌ์–‘ ๋‹ฌ์—ฌ ๋‹ฌ์—ฐ ๋‹ฌ์˜ˆ ๋‹ฌ์˜ค ๋‹ฌ์˜จ ๋‹ฌ์š” ๋‹ฌ์šฐ ๋‹ฌ์›” ๋‹ฌ์œ  ๋‹ฌ์œค ๋‹ฌ์œจ ๋‹ฌ์€ ๋‹ฌ์ด ๋‹ฌ์ผ ๋‹ฌ์ž„ ๋‹ฌ์ • ๋‹ฌ์ฐจ ๋‹ฌ์ฐฝ ๋‹ฌ์ฑ„ ๋‹ฌ์ฒœ ๋‹ฌ์ฒจ ๋‹ฌ์ฒญ ๋‹ฌ์ดˆ ๋‹ฌ์ด ๋‹ฌํ‘œ ๋‹ฌํ•˜ ๋‹ฌํ•œ ๋‹ฌํ•ด ๋‹ฌํ–ฅ ๋‹ฌํ˜„ ๋‹ฌํ˜ผ ๋‹ฌํ™ ๋‹ฌํ™” ๋‹ฌํšจ ๋‹ฌ๋‚จ ๋‹ฌ๋ˆˆ ๋‹ฌ๋‹ฌ ๋‹ฌ๋‹น ๋‹ฌ๋ด„ ๋‹ฌ๋น„ ๋‹ฌ์Šฌ ๋‹ฌ์—ด ๋‹ฌ์˜ ๋‹ฌ์ž ๋‹ฌํƒœ ๋‹ฌํ˜œ ๋‹ฌ๋‚  ๋‹ฌ๋Š˜ ๋‹ฌ๋ถ„ ๋‹ฌ์ƒ˜ ๋‹ฌ์ˆœ ๋‹ฌ์ธ ๋‹ฌ์žฅ ๋‹ฌ์ „ ๋‹ฌ์ข… ๋‹ฌ์ฃผ ๋‹ฌ์ง€ ๋‹ฌ์ง„ ๋‹ฌ์ฐฌ ๋‹ฌ์ฒ˜ ๋‹น๋‚˜ ๋‹น๋‚œ ๋‹น๋‚ด ๋‹น๋‹ค ๋‹น๋‹จ ๋‹น๋‹ด ๋‹น๋„ ๋‹น๋ผ ๋‹น๋ž˜ ๋‹น๋ฅ˜ ๋‹น๋ฆฌ ๋‹น๋ชจ ๋‹น๋ฌด ๋‹น๋ฏธ ๋‹น๋ฏผ ๋‹น์‚ฌ ๋‹น์‚ฐ ๋‹น์ƒ ๋‹น์ƒˆ ๋‹น์ƒ ๋‹น์„œ ๋‹น์„  ๋‹น์„ค ๋‹น์„ฌ ๋‹น์„ฑ ๋‹น์†Œ ๋‹น์†” ๋‹น์†œ ๋‹น์†ก ๋‹น์ˆ˜ ๋‹น์‹œ ๋‹น์‹  ๋‹น์‹ค ๋‹น์‹ฌ ๋‹น์•„ ๋‹น์•ˆ ๋‹น์•  ๋‹น์–‘ ๋‹น์—ฌ ๋‹น์—ฐ ๋‹น์˜ˆ ๋‹น์˜ค ๋‹น์˜จ ๋‹น์š” ๋‹น์šฐ ๋‹น์›” ๋‹น์œ  ๋‹น์œค ๋‹น์œจ ๋‹น์€ ๋‹น์ด ๋‹น์ผ ๋‹น์ž„ ๋‹น์ • ๋‹น์ฐจ ๋‹น์ฐฝ ๋‹น์ฑ„ ๋‹น์ฒœ ๋‹น์ฒจ ๋‹น์ฒญ ๋‹น์ดˆ ๋‹น์ด ๋‹นํ‘œ ๋‹นํ•˜ ๋‹นํ•œ ๋‹นํ•ด ๋‹นํ–ฅ ๋‹นํ˜„ ๋‹นํ˜ผ ๋‹นํ™ ๋‹นํ™” ๋‹นํšจ ๋‹น๋‚จ ๋‹น๋ˆˆ ๋‹น๋‹ฌ ๋‹น๋‹น ๋‹น๋ด„ ๋‹น๋น„ ๋‹น์Šฌ ๋‹น์—ด ๋‹น์˜ ๋‹น์ž ๋‹นํƒœ ๋‹นํ˜œ ๋‹น๋‚  ๋‹น๋Š˜ ๋‹น๋ถ„ ๋‹น์ƒ˜ ๋‹น์ˆœ ๋‹น์ธ ๋‹น์žฅ ๋‹น์ „ ๋‹น์ข… ๋‹น์ฃผ ๋‹น์ง€ ๋‹น์ง„ ๋‹น์ฐฌ ๋‹น์ฒ˜ ๋ด„๋‚˜ ๋ด„๋‚œ ๋ด„๋‚ด ๋ด„๋‹ค ๋ด„๋‹จ ๋ด„๋‹ด ๋ด„๋„ ๋ด„๋ผ ๋ด„๋ž˜ ๋ด„๋ฅ˜ ๋ด„๋ฆฌ ๋ด„๋ชจ ๋ด„๋ฌด ๋ด„๋ฏธ ๋ด„๋ฏผ ๋ด„์‚ฌ ๋ด„์‚ฐ ๋ด„์ƒ ๋ด„์ƒˆ ๋ด„์ƒ ๋ด„์„œ ๋ด„์„  ๋ด„์„ค ๋ด„์„ฌ ๋ด„์„ฑ ๋ด„์†Œ ๋ด„์†” ๋ด„์†œ ๋ด„์†ก ๋ด„์ˆ˜ ๋ด„์‹œ ๋ด„์‹  ๋ด„์‹ค ๋ด„์‹ฌ ๋ด„์•„ ๋ด„์•ˆ ๋ด„์•  ๋ด„์–‘ ๋ด„์—ฌ ๋ด„์—ฐ ๋ด„์˜ˆ ๋ด„์˜ค ๋ด„์˜จ ๋ด„์š” ๋ด„์šฐ ๋ด„์›” ๋ด„์œ  ๋ด„์œค ๋ด„์œจ ๋ด„์€ ๋ด„์ด ๋ด„์ผ ๋ด„์ž„ ๋ด„์ • ๋ด„์ฐจ ๋ด„์ฐฝ ๋ด„์ฑ„ ๋ด„์ฒœ ๋ด„์ฒจ ๋ด„์ฒญ ๋ด„์ดˆ ๋ด„์ด ๋ด„ํ‘œ ๋ด„ํ•˜ ๋ด„ํ•œ ๋ด„ํ•ด ๋ด„ํ–ฅ ๋ด„ํ˜„ ๋ด„ํ˜ผ ๋ด„ํ™ ๋ด„ํ™” ๋ด„ํšจ ๋ด„๋‚จ ๋ด„๋ˆˆ ๋ด„๋‹ฌ ๋ด„๋‹น ๋ด„๋ด„ ๋ด„๋น„ ๋ด„์Šฌ ๋ด„์—ด ๋ด„์˜ ๋ด„์ž ๋ด„ํƒœ ๋ด„ํ˜œ ๋ด„๋‚  ๋ด„๋Š˜ ๋ด„๋ถ„ ๋ด„์ƒ˜ ๋ด„์ˆœ ๋ด„์ธ ๋ด„์žฅ ๋ด„์ „ ๋ด„์ข… ๋ด„์ฃผ ๋ด„์ง€ ๋ด„์ง„ ๋ด„์ฐฌ ๋ด„์ฒ˜ ๋น„๋‚˜ ๋น„๋‚œ ๋น„๋‚ด ๋น„๋‹ค ๋น„๋‹จ ๋น„๋‹ด ๋น„๋„ ๋น„๋ผ ๋น„๋ž˜ ๋น„๋ฅ˜ ๋น„๋ฆฌ ๋น„๋ชจ ๋น„๋ฌด ๋น„๋ฏธ ๋น„๋ฏผ ๋น„์‚ฌ ๋น„์‚ฐ ๋น„์ƒ ๋น„์ƒˆ ๋น„์ƒ ๋น„์„œ ๋น„์„  ๋น„์„ค ๋น„์„ฌ ๋น„์„ฑ ๋น„์†Œ ๋น„์†” ๋น„์†œ ๋น„์†ก ๋น„์ˆ˜ ๋น„์‹œ ๋น„์‹  ๋น„์‹ค ๋น„์‹ฌ ๋น„์•„ ๋น„์•ˆ ๋น„์•  ๋น„์–‘ ๋น„์—ฌ ๋น„์—ฐ ๋น„์˜ˆ ๋น„์˜ค ๋น„์˜จ ๋น„์š” ๋น„์šฐ ๋น„์›” ๋น„์œ  ๋น„์œค ๋น„์œจ ๋น„์€ ๋น„์ด ๋น„์ผ ๋น„์ž„ ๋น„์ • ๋น„์ฐจ ๋น„์ฐฝ ๋น„์ฑ„ ๋น„์ฒœ ๋น„์ฒจ ๋น„์ฒญ ๋น„์ดˆ ๋น„์ด ๋น„ํ‘œ ๋น„ํ•˜ ๋น„ํ•œ ๋น„ํ•ด ๋น„ํ–ฅ ๋น„ํ˜„ ๋น„ํ˜ผ ๋น„ํ™ ๋น„ํ™” ๋น„ํšจ ๋น„๋‚จ ๋น„๋ˆˆ ๋น„๋‹ฌ ๋น„๋‹น ๋น„๋ด„ ๋น„๋น„ ๋น„์Šฌ ๋น„์—ด ๋น„์˜ ๋น„์ž ๋น„ํƒœ ๋น„ํ˜œ ๋น„๋‚  ๋น„๋Š˜ ๋น„๋ถ„ ๋น„์ƒ˜ ๋น„์ˆœ ๋น„์ธ ๋น„์žฅ ๋น„์ „ ๋น„์ข… ๋น„์ฃผ ๋น„์ง€ ๋น„์ง„ ๋น„์ฐฌ ๋น„์ฒ˜ ์Šฌ๋‚˜ ์Šฌ๋‚œ ์Šฌ๋‚ด ์Šฌ๋‹ค ์Šฌ๋‹จ ์Šฌ๋‹ด ์Šฌ๋„ ์Šฌ๋ผ ์Šฌ๋ž˜ ์Šฌ๋ฅ˜ ์Šฌ๋ฆฌ ์Šฌ๋ชจ ์Šฌ๋ฌด ์Šฌ๋ฏธ ์Šฌ๋ฏผ ์Šฌ์‚ฌ ์Šฌ์‚ฐ ์Šฌ์ƒ ์Šฌ์ƒˆ ์Šฌ์ƒ ์Šฌ์„œ ์Šฌ์„  ์Šฌ์„ค ์Šฌ์„ฌ ์Šฌ์„ฑ ์Šฌ์†Œ ์Šฌ์†” ์Šฌ์†œ ์Šฌ์†ก ์Šฌ์ˆ˜ ์Šฌ์‹œ ์Šฌ์‹  ์Šฌ์‹ค ์Šฌ์‹ฌ ์Šฌ์•„ ์Šฌ์•ˆ ์Šฌ์•  ์Šฌ์–‘ ์Šฌ์—ฌ ์Šฌ์—ฐ ์Šฌ์˜ˆ ์Šฌ์˜ค ์Šฌ์˜จ ์Šฌ์š” ์Šฌ์šฐ ์Šฌ์›” ์Šฌ์œ  ์Šฌ์œค ์Šฌ์œจ ์Šฌ์€ ์Šฌ์ด ์Šฌ์ผ ์Šฌ์ž„ ์Šฌ์ • ์Šฌ์ฐจ ์Šฌ์ฐฝ ์Šฌ์ฑ„ ์Šฌ์ฒœ ์Šฌ์ฒจ ์Šฌ์ฒญ ์Šฌ์ดˆ ์Šฌ์ด ์Šฌํ‘œ ์Šฌํ•˜ ์Šฌํ•œ ์Šฌํ•ด ์Šฌํ–ฅ ์Šฌํ˜„ ์Šฌํ˜ผ ์Šฌํ™ ์Šฌํ™” ์Šฌํšจ ์Šฌ๋‚จ ์Šฌ๋ˆˆ ์Šฌ๋‹ฌ ์Šฌ๋‹น ์Šฌ๋ด„ ์Šฌ๋น„ ์Šฌ์Šฌ ์Šฌ์—ด ์Šฌ์˜ ์Šฌ์ž ์Šฌํƒœ ์Šฌํ˜œ ์Šฌ๋‚  ์Šฌ๋Š˜ ์Šฌ๋ถ„ ์Šฌ์ƒ˜ ์Šฌ์ˆœ ์Šฌ์ธ ์Šฌ์žฅ ์Šฌ์ „ ์Šฌ์ข… ์Šฌ์ฃผ ์Šฌ์ง€ ์Šฌ์ง„ ์Šฌ์ฐฌ ์Šฌ์ฒ˜ ์—ด๋‚˜ ์—ด๋‚œ ์—ด๋‚ด ์—ด๋‹ค ์—ด๋‹จ ์—ด๋‹ด ์—ด๋„ ์—ด๋ผ ์—ด๋ž˜ ์—ด๋ฅ˜ ์—ด๋ฆฌ ์—ด๋ชจ ์—ด๋ฌด ์—ด๋ฏธ ์—ด๋ฏผ ์—ด์‚ฌ ์—ด์‚ฐ ์—ด์ƒ ์—ด์ƒˆ ์—ด์ƒ ์—ด์„œ ์—ด์„  ์—ด์„ค ์—ด์„ฌ ์—ด์„ฑ ์—ด์†Œ ์—ด์†” ์—ด์†œ ์—ด์†ก ์—ด์ˆ˜ ์—ด์‹œ ์—ด์‹  ์—ด์‹ค ์—ด์‹ฌ ์—ด์•„ ์—ด์•ˆ ์—ด์•  ์—ด์–‘ ์—ด์—ฌ ์—ด์—ฐ ์—ด์˜ˆ ์—ด์˜ค ์—ด์˜จ ์—ด์š” ์—ด์šฐ ์—ด์›” ์—ด์œ  ์—ด์œค ์—ด์œจ ์—ด์€ ์—ด์ด ์—ด์ผ ์—ด์ž„ ์—ด์ • ์—ด์ฐจ ์—ด์ฐฝ ์—ด์ฑ„ ์—ด์ฒœ ์—ด์ฒจ ์—ด์ฒญ ์—ด์ดˆ ์—ด์ด ์—ดํ‘œ ์—ดํ•˜ ์—ดํ•œ ์—ดํ•ด ์—ดํ–ฅ ์—ดํ˜„ ์—ดํ˜ผ ์—ดํ™ ์—ดํ™” ์—ดํšจ ์—ด๋‚จ ์—ด๋ˆˆ ์—ด๋‹ฌ ์—ด๋‹น ์—ด๋ด„ ์—ด๋น„ ์—ด์Šฌ ์—ด์—ด ์—ด์˜ ์—ด์ž ์—ดํƒœ ์—ดํ˜œ ์—ด๋‚  ์—ด๋Š˜ ์—ด๋ถ„ ์—ด์ƒ˜ ์—ด์ˆœ ์—ด์ธ ์—ด์žฅ ์—ด์ „ ์—ด์ข… ์—ด์ฃผ ์—ด์ง€ ์—ด์ง„ ์—ด์ฐฌ ์—ด์ฒ˜ ์˜๋‚˜ ์˜๋‚œ ์˜๋‚ด ์˜๋‹ค ์˜๋‹จ ์˜๋‹ด ์˜๋„ ์˜๋ผ ์˜๋ž˜ ์˜๋ฅ˜ ์˜๋ฆฌ ์˜๋ชจ ์˜๋ฌด ์˜๋ฏธ ์˜๋ฏผ ์˜์‚ฌ ์˜์‚ฐ ์˜์ƒ ์˜์ƒˆ ์˜์ƒ ์˜์„œ ์˜์„  ์˜์„ค ์˜์„ฌ ์˜์„ฑ ์˜์†Œ ์˜์†” ์˜์†œ ์˜์†ก ์˜์ˆ˜ ์˜์‹œ ์˜์‹  ์˜์‹ค ์˜์‹ฌ ์˜์•„ ์˜์•ˆ ์˜์•  ์˜์–‘ ์˜์—ฌ ์˜์—ฐ ์˜์˜ˆ ์˜์˜ค ์˜์˜จ ์˜์š” ์˜์šฐ ์˜์›” ์˜์œ  ์˜์œค ์˜์œจ ์˜์€ ์˜์ด ์˜์ผ ์˜์ž„ ์˜์ • ์˜์ฐจ ์˜์ฐฝ ์˜์ฑ„ ์˜์ฒœ ์˜์ฒจ ์˜์ฒญ ์˜์ดˆ ์˜์ด ์˜ํ‘œ ์˜ํ•˜ ์˜ํ•œ ์˜ํ•ด ์˜ํ–ฅ ์˜ํ˜„ ์˜ํ˜ผ ์˜ํ™ ์˜ํ™” ์˜ํšจ ์˜๋‚จ ์˜๋ˆˆ ์˜๋‹ฌ ์˜๋‹น ์˜๋ด„ ์˜๋น„ ์˜์Šฌ ์˜์—ด ์˜์˜ ์˜์ž ์˜ํƒœ ์˜ํ˜œ ์˜๋‚  ์˜๋Š˜ ์˜๋ถ„ ์˜์ƒ˜ ์˜์ˆœ ์˜์ธ ์˜์žฅ ์˜์ „ ์˜์ข… ์˜์ฃผ ์˜์ง€ ์˜์ง„ ์˜์ฐฌ ์˜์ฒ˜ ์ž๋‚˜ ์ž๋‚œ ์ž๋‚ด ์ž๋‹ค ์ž๋‹จ ์ž๋‹ด ์ž๋„ ์ž๋ผ ์ž๋ž˜ ์ž๋ฅ˜ ์ž๋ฆฌ ์ž๋ชจ ์ž๋ฌด ์ž๋ฏธ ์ž๋ฏผ ์ž์‚ฌ ์ž์‚ฐ ์ž์ƒ ์ž์ƒˆ ์ž์ƒ ์ž์„œ ์ž์„  ์ž์„ค ์ž์„ฌ ์ž์„ฑ ์ž์†Œ ์ž์†” ์ž์†œ ์ž์†ก ์ž์ˆ˜ ์ž์‹œ ์ž์‹  ์ž์‹ค ์ž์‹ฌ ์ž์•„ ์ž์•ˆ ์ž์•  ์ž์–‘ ์ž์—ฌ ์ž์—ฐ ์ž์˜ˆ ์ž์˜ค ์ž์˜จ ์ž์š” ์ž์šฐ ์ž์›” ์ž์œ  ์ž์œค ์ž์œจ ์ž์€ ์ž์ด ์ž์ผ ์ž์ž„ ์ž์ • ์ž์ฐจ ์ž์ฐฝ ์ž์ฑ„ ์ž์ฒœ ์ž์ฒจ ์ž์ฒญ ์ž์ดˆ ์ž์ด ์žํ‘œ ์žํ•˜ ์žํ•œ ์žํ•ด ์žํ–ฅ ์žํ˜„ ์žํ˜ผ ์žํ™ ์žํ™” ์žํšจ ์ž๋‚จ ์ž๋ˆˆ ์ž๋‹ฌ ์ž๋‹น ์ž๋ด„ ์ž๋น„ ์ž์Šฌ ์ž์—ด ์ž์˜ ์ž์ž ์žํƒœ ์žํ˜œ ์ž๋‚  ์ž๋Š˜ ์ž๋ถ„ ์ž์ƒ˜ ์ž์ˆœ ์ž์ธ ์ž์žฅ ์ž์ „ ์ž์ข… ์ž์ฃผ ์ž์ง€ ์ž์ง„ ์ž์ฐฌ ์ž์ฒ˜ ํƒœ๋‚˜ ํƒœ๋‚œ ํƒœ๋‚ด ํƒœ๋‹ค ํƒœ๋‹จ ํƒœ๋‹ด ํƒœ๋„ ํƒœ๋ผ ํƒœ๋ž˜ ํƒœ๋ฅ˜ ํƒœ๋ฆฌ ํƒœ๋ชจ ํƒœ๋ฌด ํƒœ๋ฏธ ํƒœ๋ฏผ ํƒœ์‚ฌ ํƒœ์‚ฐ ํƒœ์ƒ ํƒœ์ƒˆ ํƒœ์ƒ ํƒœ์„œ ํƒœ์„  ํƒœ์„ค ํƒœ์„ฌ ํƒœ์„ฑ ํƒœ์†Œ ํƒœ์†” ํƒœ์†œ ํƒœ์†ก ํƒœ์ˆ˜ ํƒœ์‹œ ํƒœ์‹  ํƒœ์‹ค ํƒœ์‹ฌ ํƒœ์•„ ํƒœ์•ˆ ํƒœ์•  ํƒœ์–‘ ํƒœ์—ฌ ํƒœ์—ฐ ํƒœ์˜ˆ ํƒœ์˜ค ํƒœ์˜จ ํƒœ์š” ํƒœ์šฐ ํƒœ์›” ํƒœ์œ  ํƒœ์œค ํƒœ์œจ ํƒœ์€ ํƒœ์ด ํƒœ์ผ ํƒœ์ž„ ํƒœ์ • ํƒœ์ฐจ ํƒœ์ฐฝ ํƒœ์ฑ„ ํƒœ์ฒœ ํƒœ์ฒจ ํƒœ์ฒญ ํƒœ์ดˆ ํƒœ์ด ํƒœํ‘œ ํƒœํ•˜ ํƒœํ•œ ํƒœํ•ด ํƒœํ–ฅ ํƒœํ˜„ ํƒœํ˜ผ ํƒœํ™ ํƒœํ™” ํƒœํšจ ํƒœ๋‚จ ํƒœ๋ˆˆ ํƒœ๋‹ฌ ํƒœ๋‹น ํƒœ๋ด„ ํƒœ๋น„ ํƒœ์Šฌ ํƒœ์—ด ํƒœ์˜ ํƒœ์ž ํƒœํƒœ ํƒœํ˜œ ํƒœ๋‚  ํƒœ๋Š˜ ํƒœ๋ถ„ ํƒœ์ƒ˜ ํƒœ์ˆœ ํƒœ์ธ ํƒœ์žฅ ํƒœ์ „ ํƒœ์ข… ํƒœ์ฃผ ํƒœ์ง€ ํƒœ์ง„ ํƒœ์ฐฌ ํƒœ์ฒ˜ ํ˜œ๋‚˜ ํ˜œ๋‚œ ํ˜œ๋‚ด ํ˜œ๋‹ค ํ˜œ๋‹จ ํ˜œ๋‹ด ํ˜œ๋„ ํ˜œ๋ผ ํ˜œ๋ž˜ ํ˜œ๋ฅ˜ ํ˜œ๋ฆฌ ํ˜œ๋ชจ ํ˜œ๋ฌด ํ˜œ๋ฏธ ํ˜œ๋ฏผ ํ˜œ์‚ฌ ํ˜œ์‚ฐ ํ˜œ์ƒ ํ˜œ์ƒˆ ํ˜œ์ƒ ํ˜œ์„œ ํ˜œ์„  ํ˜œ์„ค ํ˜œ์„ฌ ํ˜œ์„ฑ ํ˜œ์†Œ ํ˜œ์†” ํ˜œ์†œ ํ˜œ์†ก ํ˜œ์ˆ˜ ํ˜œ์‹œ ํ˜œ์‹  ํ˜œ์‹ค ํ˜œ์‹ฌ ํ˜œ์•„ ํ˜œ์•ˆ ํ˜œ์•  ํ˜œ์–‘ ํ˜œ์—ฌ ํ˜œ์—ฐ ํ˜œ์˜ˆ ํ˜œ์˜ค ํ˜œ์˜จ ํ˜œ์š” ํ˜œ์šฐ ํ˜œ์›” ํ˜œ์œ  ํ˜œ์œค ํ˜œ์œจ ํ˜œ์€ ํ˜œ์ด ํ˜œ์ผ ํ˜œ์ž„ ํ˜œ์ • ํ˜œ์ฐจ ํ˜œ์ฐฝ ํ˜œ์ฑ„ ํ˜œ์ฒœ ํ˜œ์ฒจ ํ˜œ์ฒญ ํ˜œ์ดˆ ํ˜œ์ด ํ˜œํ‘œ ํ˜œํ•˜ ํ˜œํ•œ ํ˜œํ•ด ํ˜œํ–ฅ ํ˜œํ˜„ ํ˜œํ˜ผ ํ˜œํ™ ํ˜œํ™” ํ˜œํšจ ํ˜œ๋‚จ ํ˜œ๋ˆˆ ํ˜œ๋‹ฌ ํ˜œ๋‹น ํ˜œ๋ด„ ํ˜œ๋น„ ํ˜œ์Šฌ ํ˜œ์—ด ํ˜œ์˜ ํ˜œ์ž ํ˜œํƒœ ํ˜œํ˜œ ํ˜œ๋‚  ํ˜œ๋Š˜ ํ˜œ๋ถ„ ํ˜œ์ƒ˜ ํ˜œ์ˆœ ํ˜œ์ธ ํ˜œ์žฅ ํ˜œ์ „ ํ˜œ์ข… ํ˜œ์ฃผ ํ˜œ์ง€ ํ˜œ์ง„ ํ˜œ์ฐฌ ํ˜œ์ฒ˜ ๋‚ ๋‚˜ ๋‚ ๋‚œ ๋‚ ๋‚ด ๋‚ ๋‹ค ๋‚ ๋‹จ ๋‚ ๋‹ด ๋‚ ๋„ ๋‚ ๋ผ ๋‚ ๋ž˜ ๋‚ ๋ฅ˜ ๋‚ ๋ฆฌ ๋‚ ๋ชจ ๋‚ ๋ฌด ๋‚ ๋ฏธ ๋‚ ๋ฏผ ๋‚ ์‚ฌ ๋‚ ์‚ฐ ๋‚ ์ƒ ๋‚ ์ƒˆ ๋‚ ์ƒ ๋‚ ์„œ ๋‚ ์„  ๋‚ ์„ค ๋‚ ์„ฌ ๋‚ ์„ฑ ๋‚ ์†Œ ๋‚ ์†” ๋‚ ์†œ ๋‚ ์†ก ๋‚ ์ˆ˜ ๋‚ ์‹œ ๋‚ ์‹  ๋‚ ์‹ค ๋‚ ์‹ฌ ๋‚ ์•„ ๋‚ ์•ˆ ๋‚ ์•  ๋‚ ์–‘ ๋‚ ์—ฌ ๋‚ ์—ฐ ๋‚ ์˜ˆ ๋‚ ์˜ค ๋‚ ์˜จ ๋‚ ์š” ๋‚ ์šฐ ๋‚ ์›” ๋‚ ์œ  ๋‚ ์œค ๋‚ ์œจ ๋‚ ์€ ๋‚ ์ด ๋‚ ์ผ ๋‚ ์ž„ ๋‚ ์ • ๋‚ ์ฐจ ๋‚ ์ฐฝ ๋‚ ์ฑ„ ๋‚ ์ฒœ ๋‚ ์ฒจ ๋‚ ์ฒญ ๋‚ ์ดˆ ๋‚ ์ด ๋‚ ํ‘œ ๋‚ ํ•˜ ๋‚ ํ•œ ๋‚ ํ•ด ๋‚ ํ–ฅ ๋‚ ํ˜„ ๋‚ ํ˜ผ ๋‚ ํ™ ๋‚ ํ™” ๋‚ ํšจ ๋‚ ๋‚จ ๋‚ ๋ˆˆ ๋‚ ๋‹ฌ ๋‚ ๋‹น ๋‚ ๋ด„ ๋‚ ๋น„ ๋‚ ์Šฌ ๋‚ ์—ด ๋‚ ์˜ ๋‚ ์ž ๋‚ ํƒœ ๋‚ ํ˜œ ๋‚ ๋‚  ๋‚ ๋Š˜ ๋‚ ๋ถ„ ๋‚ ์ƒ˜ ๋‚ ์ˆœ ๋‚ ์ธ ๋‚ ์žฅ ๋‚ ์ „ ๋‚ ์ข… ๋‚ ์ฃผ ๋‚ ์ง€ ๋‚ ์ง„ ๋‚ ์ฐฌ ๋‚ ์ฒ˜ ๋Š˜๋‚˜ ๋Š˜๋‚œ ๋Š˜๋‚ด ๋Š˜๋‹ค ๋Š˜๋‹จ ๋Š˜๋‹ด ๋Š˜๋„ ๋Š˜๋ผ ๋Š˜๋ž˜ ๋Š˜๋ฅ˜ ๋Š˜๋ฆฌ ๋Š˜๋ชจ ๋Š˜๋ฌด ๋Š˜๋ฏธ ๋Š˜๋ฏผ ๋Š˜์‚ฌ ๋Š˜์‚ฐ ๋Š˜์ƒ ๋Š˜์ƒˆ ๋Š˜์ƒ ๋Š˜์„œ ๋Š˜์„  ๋Š˜์„ค ๋Š˜์„ฌ ๋Š˜์„ฑ ๋Š˜์†Œ ๋Š˜์†” ๋Š˜์†œ ๋Š˜์†ก ๋Š˜์ˆ˜ ๋Š˜์‹œ ๋Š˜์‹  ๋Š˜์‹ค ๋Š˜์‹ฌ ๋Š˜์•„ ๋Š˜์•ˆ ๋Š˜์•  ๋Š˜์–‘ ๋Š˜์—ฌ ๋Š˜์—ฐ ๋Š˜์˜ˆ ๋Š˜์˜ค ๋Š˜์˜จ ๋Š˜์š” ๋Š˜์šฐ ๋Š˜์›” ๋Š˜์œ  ๋Š˜์œค ๋Š˜์œจ ๋Š˜์€ ๋Š˜์ด ๋Š˜์ผ ๋Š˜์ž„ ๋Š˜์ • ๋Š˜์ฐจ ๋Š˜์ฐฝ ๋Š˜์ฑ„ ๋Š˜์ฒœ ๋Š˜์ฒจ ๋Š˜์ฒญ ๋Š˜์ดˆ ๋Š˜์ด ๋Š˜ํ‘œ ๋Š˜ํ•˜ ๋Š˜ํ•œ ๋Š˜ํ•ด ๋Š˜ํ–ฅ ๋Š˜ํ˜„ ๋Š˜ํ˜ผ ๋Š˜ํ™ ๋Š˜ํ™” ๋Š˜ํšจ ๋Š˜๋‚จ ๋Š˜๋ˆˆ ๋Š˜๋‹ฌ ๋Š˜๋‹น ๋Š˜๋ด„ ๋Š˜๋น„ ๋Š˜์Šฌ ๋Š˜์—ด ๋Š˜์˜ ๋Š˜์ž ๋Š˜ํƒœ ๋Š˜ํ˜œ ๋Š˜๋‚  ๋Š˜๋Š˜ ๋Š˜๋ถ„ ๋Š˜์ƒ˜ ๋Š˜์ˆœ ๋Š˜์ธ ๋Š˜์žฅ ๋Š˜์ „ ๋Š˜์ข… ๋Š˜์ฃผ ๋Š˜์ง€ ๋Š˜์ง„ ๋Š˜์ฐฌ ๋Š˜์ฒ˜ ๋ถ„๋‚˜ ๋ถ„๋‚œ ๋ถ„๋‚ด ๋ถ„๋‹ค ๋ถ„๋‹จ ๋ถ„๋‹ด ๋ถ„๋„ ๋ถ„๋ผ ๋ถ„๋ž˜ ๋ถ„๋ฅ˜ ๋ถ„๋ฆฌ ๋ถ„๋ชจ ๋ถ„๋ฌด ๋ถ„๋ฏธ ๋ถ„๋ฏผ ๋ถ„์‚ฌ ๋ถ„์‚ฐ ๋ถ„์ƒ ๋ถ„์ƒˆ ๋ถ„์ƒ ๋ถ„์„œ ๋ถ„์„  ๋ถ„์„ค ๋ถ„์„ฌ ๋ถ„์„ฑ ๋ถ„์†Œ ๋ถ„์†” ๋ถ„์†œ ๋ถ„์†ก ๋ถ„์ˆ˜ ๋ถ„์‹œ ๋ถ„์‹  ๋ถ„์‹ค ๋ถ„์‹ฌ ๋ถ„์•„ ๋ถ„์•ˆ ๋ถ„์•  ๋ถ„์–‘ ๋ถ„์—ฌ ๋ถ„์—ฐ ๋ถ„์˜ˆ ๋ถ„์˜ค ๋ถ„์˜จ ๋ถ„์š” ๋ถ„์šฐ ๋ถ„์›” ๋ถ„์œ  ๋ถ„์œค ๋ถ„์œจ ๋ถ„์€ ๋ถ„์ด ๋ถ„์ผ ๋ถ„์ž„ ๋ถ„์ • ๋ถ„์ฐจ ๋ถ„์ฐฝ ๋ถ„์ฑ„ ๋ถ„์ฒœ ๋ถ„์ฒจ ๋ถ„์ฒญ ๋ถ„์ดˆ ๋ถ„์ด ๋ถ„ํ‘œ ๋ถ„ํ•˜ ๋ถ„ํ•œ ๋ถ„ํ•ด ๋ถ„ํ–ฅ ๋ถ„ํ˜„ ๋ถ„ํ˜ผ ๋ถ„ํ™ ๋ถ„ํ™” ๋ถ„ํšจ ๋ถ„๋‚จ ๋ถ„๋ˆˆ ๋ถ„๋‹ฌ ๋ถ„๋‹น ๋ถ„๋ด„ ๋ถ„๋น„ ๋ถ„์Šฌ ๋ถ„์—ด ๋ถ„์˜ ๋ถ„์ž ๋ถ„ํƒœ ๋ถ„ํ˜œ ๋ถ„๋‚  ๋ถ„๋Š˜ ๋ถ„๋ถ„ ๋ถ„์ƒ˜ ๋ถ„์ˆœ ๋ถ„์ธ ๋ถ„์žฅ ๋ถ„์ „ ๋ถ„์ข… ๋ถ„์ฃผ ๋ถ„์ง€ ๋ถ„์ง„ ๋ถ„์ฐฌ ๋ถ„์ฒ˜ ์ƒ˜๋‚˜ ์ƒ˜๋‚œ ์ƒ˜๋‚ด ์ƒ˜๋‹ค ์ƒ˜๋‹จ ์ƒ˜๋‹ด ์ƒ˜๋„ ์ƒ˜๋ผ ์ƒ˜๋ž˜ ์ƒ˜๋ฅ˜ ์ƒ˜๋ฆฌ ์ƒ˜๋ชจ ์ƒ˜๋ฌด ์ƒ˜๋ฏธ ์ƒ˜๋ฏผ ์ƒ˜์‚ฌ ์ƒ˜์‚ฐ ์ƒ˜์ƒ ์ƒ˜์ƒˆ ์ƒ˜์ƒ ์ƒ˜์„œ ์ƒ˜์„  ์ƒ˜์„ค ์ƒ˜์„ฌ ์ƒ˜์„ฑ ์ƒ˜์†Œ ์ƒ˜์†” ์ƒ˜์†œ ์ƒ˜์†ก ์ƒ˜์ˆ˜ ์ƒ˜์‹œ ์ƒ˜์‹  ์ƒ˜์‹ค ์ƒ˜์‹ฌ ์ƒ˜์•„ ์ƒ˜์•ˆ ์ƒ˜์•  ์ƒ˜์–‘ ์ƒ˜์—ฌ ์ƒ˜์—ฐ ์ƒ˜์˜ˆ ์ƒ˜์˜ค ์ƒ˜์˜จ ์ƒ˜์š” ์ƒ˜์šฐ ์ƒ˜์›” ์ƒ˜์œ  ์ƒ˜์œค ์ƒ˜์œจ ์ƒ˜์€ ์ƒ˜์ด ์ƒ˜์ผ ์ƒ˜์ž„ ์ƒ˜์ • ์ƒ˜์ฐจ ์ƒ˜์ฐฝ ์ƒ˜์ฑ„ ์ƒ˜์ฒœ ์ƒ˜์ฒจ ์ƒ˜์ฒญ ์ƒ˜์ดˆ ์ƒ˜์ด ์ƒ˜ํ‘œ ์ƒ˜ํ•˜ ์ƒ˜ํ•œ ์ƒ˜ํ•ด ์ƒ˜ํ–ฅ ์ƒ˜ํ˜„ ์ƒ˜ํ˜ผ ์ƒ˜ํ™ ์ƒ˜ํ™” ์ƒ˜ํšจ ์ƒ˜๋‚จ ์ƒ˜๋ˆˆ ์ƒ˜๋‹ฌ ์ƒ˜๋‹น ์ƒ˜๋ด„ ์ƒ˜๋น„ ์ƒ˜์Šฌ ์ƒ˜์—ด ์ƒ˜์˜ ์ƒ˜์ž ์ƒ˜ํƒœ ์ƒ˜ํ˜œ ์ƒ˜๋‚  ์ƒ˜๋Š˜ ์ƒ˜๋ถ„ ์ƒ˜์ƒ˜ ์ƒ˜์ˆœ ์ƒ˜์ธ ์ƒ˜์žฅ ์ƒ˜์ „ ์ƒ˜์ข… ์ƒ˜์ฃผ ์ƒ˜์ง€ ์ƒ˜์ง„ ์ƒ˜์ฐฌ ์ƒ˜์ฒ˜ ์ˆœ๋‚˜ ์ˆœ๋‚œ ์ˆœ๋‚ด ์ˆœ๋‹ค ์ˆœ๋‹จ ์ˆœ๋‹ด ์ˆœ๋„ ์ˆœ๋ผ ์ˆœ๋ž˜ ์ˆœ๋ฅ˜ ์ˆœ๋ฆฌ ์ˆœ๋ชจ ์ˆœ๋ฌด ์ˆœ๋ฏธ ์ˆœ๋ฏผ ์ˆœ์‚ฌ ์ˆœ์‚ฐ ์ˆœ์ƒ ์ˆœ์ƒˆ ์ˆœ์ƒ ์ˆœ์„œ ์ˆœ์„  ์ˆœ์„ค ์ˆœ์„ฌ ์ˆœ์„ฑ ์ˆœ์†Œ ์ˆœ์†” ์ˆœ์†œ ์ˆœ์†ก ์ˆœ์ˆ˜ ์ˆœ์‹œ ์ˆœ์‹  ์ˆœ์‹ค ์ˆœ์‹ฌ ์ˆœ์•„ ์ˆœ์•ˆ ์ˆœ์•  ์ˆœ์–‘ ์ˆœ์—ฌ ์ˆœ์—ฐ ์ˆœ์˜ˆ ์ˆœ์˜ค ์ˆœ์˜จ ์ˆœ์š” ์ˆœ์šฐ ์ˆœ์›” ์ˆœ์œ  ์ˆœ์œค ์ˆœ์œจ ์ˆœ์€ ์ˆœ์ด ์ˆœ์ผ ์ˆœ์ž„ ์ˆœ์ • ์ˆœ์ฐจ ์ˆœ์ฐฝ ์ˆœ์ฑ„ ์ˆœ์ฒœ ์ˆœ์ฒจ ์ˆœ์ฒญ ์ˆœ์ดˆ ์ˆœ์ด ์ˆœํ‘œ ์ˆœํ•˜ ์ˆœํ•œ ์ˆœํ•ด ์ˆœํ–ฅ ์ˆœํ˜„ ์ˆœํ˜ผ ์ˆœํ™ ์ˆœํ™” ์ˆœํšจ ์ˆœ๋‚จ ์ˆœ๋ˆˆ ์ˆœ๋‹ฌ ์ˆœ๋‹น ์ˆœ๋ด„ ์ˆœ๋น„ ์ˆœ์Šฌ ์ˆœ์—ด ์ˆœ์˜ ์ˆœ์ž ์ˆœํƒœ ์ˆœํ˜œ ์ˆœ๋‚  ์ˆœ๋Š˜ ์ˆœ๋ถ„ ์ˆœ์ƒ˜ ์ˆœ์ˆœ ์ˆœ์ธ ์ˆœ์žฅ ์ˆœ์ „ ์ˆœ์ข… ์ˆœ์ฃผ ์ˆœ์ง€ ์ˆœ์ง„ ์ˆœ์ฐฌ ์ˆœ์ฒ˜ ์ธ๋‚˜ ์ธ๋‚œ ์ธ๋‚ด ์ธ๋‹ค ์ธ๋‹จ ์ธ๋‹ด ์ธ๋„ ์ธ๋ผ ์ธ๋ž˜ ์ธ๋ฅ˜ ์ธ๋ฆฌ ์ธ๋ชจ ์ธ๋ฌด ์ธ๋ฏธ ์ธ๋ฏผ ์ธ์‚ฌ ์ธ์‚ฐ ์ธ์ƒ ์ธ์ƒˆ ์ธ์ƒ ์ธ์„œ ์ธ์„  ์ธ์„ค ์ธ์„ฌ ์ธ์„ฑ ์ธ์†Œ ์ธ์†” ์ธ์†œ ์ธ์†ก ์ธ์ˆ˜ ์ธ์‹œ ์ธ์‹  ์ธ์‹ค ์ธ์‹ฌ ์ธ์•„ ์ธ์•ˆ ์ธ์•  ์ธ์–‘ ์ธ์—ฌ ์ธ์—ฐ ์ธ์˜ˆ ์ธ์˜ค ์ธ์˜จ ์ธ์š” ์ธ์šฐ ์ธ์›” ์ธ์œ  ์ธ์œค ์ธ์œจ ์ธ์€ ์ธ์ด ์ธ์ผ ์ธ์ž„ ์ธ์ • ์ธ์ฐจ ์ธ์ฐฝ ์ธ์ฑ„ ์ธ์ฒœ ์ธ์ฒจ ์ธ์ฒญ ์ธ์ดˆ ์ธ์ด ์ธํ‘œ ์ธํ•˜ ์ธํ•œ ์ธํ•ด ์ธํ–ฅ ์ธํ˜„ ์ธํ˜ผ ์ธํ™ ์ธํ™” ์ธํšจ ์ธ๋‚จ ์ธ๋ˆˆ ์ธ๋‹ฌ ์ธ๋‹น ์ธ๋ด„ ์ธ๋น„ ์ธ์Šฌ ์ธ์—ด ์ธ์˜ ์ธ์ž ์ธํƒœ ์ธํ˜œ ์ธ๋‚  ์ธ๋Š˜ ์ธ๋ถ„ ์ธ์ƒ˜ ์ธ์ˆœ ์ธ์ธ ์ธ์žฅ ์ธ์ „ ์ธ์ข… ์ธ์ฃผ ์ธ์ง€ ์ธ์ง„ ์ธ์ฐฌ ์ธ์ฒ˜ ์žฅ๋‚˜ ์žฅ๋‚œ ์žฅ๋‚ด ์žฅ๋‹ค ์žฅ๋‹จ ์žฅ๋‹ด ์žฅ๋„ ์žฅ๋ผ ์žฅ๋ž˜ ์žฅ๋ฅ˜ ์žฅ๋ฆฌ ์žฅ๋ชจ ์žฅ๋ฌด ์žฅ๋ฏธ ์žฅ๋ฏผ ์žฅ์‚ฌ ์žฅ์‚ฐ ์žฅ์ƒ ์žฅ์ƒˆ ์žฅ์ƒ ์žฅ์„œ ์žฅ์„  ์žฅ์„ค ์žฅ์„ฌ ์žฅ์„ฑ ์žฅ์†Œ ์žฅ์†” ์žฅ์†œ ์žฅ์†ก ์žฅ์ˆ˜ ์žฅ์‹œ ์žฅ์‹  ์žฅ์‹ค ์žฅ์‹ฌ ์žฅ์•„ ์žฅ์•ˆ ์žฅ์•  ์žฅ์–‘ ์žฅ์—ฌ ์žฅ์—ฐ ์žฅ์˜ˆ ์žฅ์˜ค ์žฅ์˜จ ์žฅ์š” ์žฅ์šฐ ์žฅ์›” ์žฅ์œ  ์žฅ์œค ์žฅ์œจ ์žฅ์€ ์žฅ์ด ์žฅ์ผ ์žฅ์ž„ ์žฅ์ • ์žฅ์ฐจ ์žฅ์ฐฝ ์žฅ์ฑ„ ์žฅ์ฒœ ์žฅ์ฒจ ์žฅ์ฒญ ์žฅ์ดˆ ์žฅ์ด ์žฅํ‘œ ์žฅํ•˜ ์žฅํ•œ ์žฅํ•ด ์žฅํ–ฅ ์žฅํ˜„ ์žฅํ˜ผ ์žฅํ™ ์žฅํ™” ์žฅํšจ ์žฅ๋‚จ ์žฅ๋ˆˆ ์žฅ๋‹ฌ ์žฅ๋‹น ์žฅ๋ด„ ์žฅ๋น„ ์žฅ์Šฌ ์žฅ์—ด ์žฅ์˜ ์žฅ์ž ์žฅํƒœ ์žฅํ˜œ ์žฅ๋‚  ์žฅ๋Š˜ ์žฅ๋ถ„ ์žฅ์ƒ˜ ์žฅ์ˆœ ์žฅ์ธ ์žฅ์žฅ ์žฅ์ „ ์žฅ์ข… ์žฅ์ฃผ ์žฅ์ง€ ์žฅ์ง„ ์žฅ์ฐฌ ์žฅ์ฒ˜ ์ „๋‚˜ ์ „๋‚œ ์ „๋‚ด ์ „๋‹ค ์ „๋‹จ ์ „๋‹ด ์ „๋„ ์ „๋ผ ์ „๋ž˜ ์ „๋ฅ˜ ์ „๋ฆฌ ์ „๋ชจ ์ „๋ฌด ์ „๋ฏธ ์ „๋ฏผ ์ „์‚ฌ ์ „์‚ฐ ์ „์ƒ ์ „์ƒˆ ์ „์ƒ ์ „์„œ ์ „์„  ์ „์„ค ์ „์„ฌ ์ „์„ฑ ์ „์†Œ ์ „์†” ์ „์†œ ์ „์†ก ์ „์ˆ˜ ์ „์‹œ ์ „์‹  ์ „์‹ค ์ „์‹ฌ ์ „์•„ ์ „์•ˆ ์ „์•  ์ „์–‘ ์ „์—ฌ ์ „์—ฐ ์ „์˜ˆ ์ „์˜ค ์ „์˜จ ์ „์š” ์ „์šฐ ์ „์›” ์ „์œ  ์ „์œค ์ „์œจ ์ „์€ ์ „์ด ์ „์ผ ์ „์ž„ ์ „์ • ์ „์ฐจ ์ „์ฐฝ ์ „์ฑ„ ์ „์ฒœ ์ „์ฒจ ์ „์ฒญ ์ „์ดˆ ์ „์ด ์ „ํ‘œ ์ „ํ•˜ ์ „ํ•œ ์ „ํ•ด ์ „ํ–ฅ ์ „ํ˜„ ์ „ํ˜ผ ์ „ํ™ ์ „ํ™” ์ „ํšจ ์ „๋‚จ ์ „๋ˆˆ ์ „๋‹ฌ ์ „๋‹น ์ „๋ด„ ์ „๋น„ ์ „์Šฌ ์ „์—ด ์ „์˜ ์ „์ž ์ „ํƒœ ์ „ํ˜œ ์ „๋‚  ์ „๋Š˜ ์ „๋ถ„ ์ „์ƒ˜ ์ „์ˆœ ์ „์ธ ์ „์žฅ ์ „์ „ ์ „์ข… ์ „์ฃผ ์ „์ง€ ์ „์ง„ ์ „์ฐฌ ์ „์ฒ˜ ์ข…๋‚˜ ์ข…๋‚œ ์ข…๋‚ด ์ข…๋‹ค ์ข…๋‹จ ์ข…๋‹ด ์ข…๋„ ์ข…๋ผ ์ข…๋ž˜ ์ข…๋ฅ˜ ์ข…๋ฆฌ ์ข…๋ชจ ์ข…๋ฌด ์ข…๋ฏธ ์ข…๋ฏผ ์ข…์‚ฌ ์ข…์‚ฐ ์ข…์ƒ ์ข…์ƒˆ ์ข…์ƒ ์ข…์„œ ์ข…์„  ์ข…์„ค ์ข…์„ฌ ์ข…์„ฑ ์ข…์†Œ ์ข…์†” ์ข…์†œ ์ข…์†ก ์ข…์ˆ˜ ์ข…์‹œ ์ข…์‹  ์ข…์‹ค ์ข…์‹ฌ ์ข…์•„ ์ข…์•ˆ ์ข…์•  ์ข…์–‘ ์ข…์—ฌ ์ข…์—ฐ ์ข…์˜ˆ ์ข…์˜ค ์ข…์˜จ ์ข…์š” ์ข…์šฐ ์ข…์›” ์ข…์œ  ์ข…์œค ์ข…์œจ ์ข…์€ ์ข…์ด ์ข…์ผ ์ข…์ž„ ์ข…์ • ์ข…์ฐจ ์ข…์ฐฝ ์ข…์ฑ„ ์ข…์ฒœ ์ข…์ฒจ ์ข…์ฒญ ์ข…์ดˆ ์ข…์ด ์ข…ํ‘œ ์ข…ํ•˜ ์ข…ํ•œ ์ข…ํ•ด ์ข…ํ–ฅ ์ข…ํ˜„ ์ข…ํ˜ผ ์ข…ํ™ ์ข…ํ™” ์ข…ํšจ ์ข…๋‚จ ์ข…๋ˆˆ ์ข…๋‹ฌ ์ข…๋‹น ์ข…๋ด„ ์ข…๋น„ ์ข…์Šฌ ์ข…์—ด ์ข…์˜ ์ข…์ž ์ข…ํƒœ ์ข…ํ˜œ ์ข…๋‚  ์ข…๋Š˜ ์ข…๋ถ„ ์ข…์ƒ˜ ์ข…์ˆœ ์ข…์ธ ์ข…์žฅ ์ข…์ „ ์ข…์ข… ์ข…์ฃผ ์ข…์ง€ ์ข…์ง„ ์ข…์ฐฌ ์ข…์ฒ˜ ์ฃผ๋‚˜ ์ฃผ๋‚œ ์ฃผ๋‚ด ์ฃผ๋‹ค ์ฃผ๋‹จ ์ฃผ๋‹ด ์ฃผ๋„ ์ฃผ๋ผ ์ฃผ๋ž˜ ์ฃผ๋ฅ˜ ์ฃผ๋ฆฌ ์ฃผ๋ชจ ์ฃผ๋ฌด ์ฃผ๋ฏธ ์ฃผ๋ฏผ ์ฃผ์‚ฌ ์ฃผ์‚ฐ ์ฃผ์ƒ ์ฃผ์ƒˆ ์ฃผ์ƒ ์ฃผ์„œ ์ฃผ์„  ์ฃผ์„ค ์ฃผ์„ฌ ์ฃผ์„ฑ ์ฃผ์†Œ ์ฃผ์†” ์ฃผ์†œ ์ฃผ์†ก ์ฃผ์ˆ˜ ์ฃผ์‹œ ์ฃผ์‹  ์ฃผ์‹ค ์ฃผ์‹ฌ ์ฃผ์•„ ์ฃผ์•ˆ ์ฃผ์•  ์ฃผ์–‘ ์ฃผ์—ฌ ์ฃผ์—ฐ ์ฃผ์˜ˆ ์ฃผ์˜ค ์ฃผ์˜จ ์ฃผ์š” ์ฃผ์šฐ ์ฃผ์›” ์ฃผ์œ  ์ฃผ์œค ์ฃผ์œจ ์ฃผ์€ ์ฃผ์ด ์ฃผ์ผ ์ฃผ์ž„ ์ฃผ์ • ์ฃผ์ฐจ ์ฃผ์ฐฝ ์ฃผ์ฑ„ ์ฃผ์ฒœ ์ฃผ์ฒจ ์ฃผ์ฒญ ์ฃผ์ดˆ ์ฃผ์ด ์ฃผํ‘œ ์ฃผํ•˜ ์ฃผํ•œ ์ฃผํ•ด ์ฃผํ–ฅ ์ฃผํ˜„ ์ฃผํ˜ผ ์ฃผํ™ ์ฃผํ™” ์ฃผํšจ ์ฃผ๋‚จ ์ฃผ๋ˆˆ ์ฃผ๋‹ฌ ์ฃผ๋‹น ์ฃผ๋ด„ ์ฃผ๋น„ ์ฃผ์Šฌ ์ฃผ์—ด ์ฃผ์˜ ์ฃผ์ž ์ฃผํƒœ ์ฃผํ˜œ ์ฃผ๋‚  ์ฃผ๋Š˜ ์ฃผ๋ถ„ ์ฃผ์ƒ˜ ์ฃผ์ˆœ ์ฃผ์ธ ์ฃผ์žฅ ์ฃผ์ „ ์ฃผ์ข… ์ฃผ์ฃผ ์ฃผ์ง€ ์ฃผ์ง„ ์ฃผ์ฐฌ ์ฃผ์ฒ˜ ์ง€๋‚˜ ์ง€๋‚œ ์ง€๋‚ด ์ง€๋‹ค ์ง€๋‹จ ์ง€๋‹ด ์ง€๋„ ์ง€๋ผ ์ง€๋ž˜ ์ง€๋ฅ˜ ์ง€๋ฆฌ ์ง€๋ชจ ์ง€๋ฌด ์ง€๋ฏธ ์ง€๋ฏผ ์ง€์‚ฌ ์ง€์‚ฐ ์ง€์ƒ ์ง€์ƒˆ ์ง€์ƒ ์ง€์„œ ์ง€์„  ์ง€์„ค ์ง€์„ฌ ์ง€์„ฑ ์ง€์†Œ ์ง€์†” ์ง€์†œ ์ง€์†ก ์ง€์ˆ˜ ์ง€์‹œ ์ง€์‹  ์ง€์‹ค ์ง€์‹ฌ ์ง€์•„ ์ง€์•ˆ ์ง€์•  ์ง€์–‘ ์ง€์—ฌ ์ง€์—ฐ ์ง€์˜ˆ ์ง€์˜ค ์ง€์˜จ ์ง€์š” ์ง€์šฐ ์ง€์›” ์ง€์œ  ์ง€์œค ์ง€์œจ ์ง€์€ ์ง€์ด ์ง€์ผ ์ง€์ž„ ์ง€์ • ์ง€์ฐจ ์ง€์ฐฝ ์ง€์ฑ„ ์ง€์ฒœ ์ง€์ฒจ ์ง€์ฒญ ์ง€์ดˆ ์ง€์ด ์ง€ํ‘œ ์ง€ํ•˜ ์ง€ํ•œ ์ง€ํ•ด ์ง€ํ–ฅ ์ง€ํ˜„ ์ง€ํ˜ผ ์ง€ํ™ ์ง€ํ™” ์ง€ํšจ ์ง€๋‚จ ์ง€๋ˆˆ ์ง€๋‹ฌ ์ง€๋‹น ์ง€๋ด„ ์ง€๋น„ ์ง€์Šฌ ์ง€์—ด ์ง€์˜ ์ง€์ž ์ง€ํƒœ ์ง€ํ˜œ ์ง€๋‚  ์ง€๋Š˜ ์ง€๋ถ„ ์ง€์ƒ˜ ์ง€์ˆœ ์ง€์ธ ์ง€์žฅ ์ง€์ „ ์ง€์ข… ์ง€์ฃผ ์ง€์ง€ ์ง€์ง„ ์ง€์ฐฌ ์ง€์ฒ˜ ์ง„๋‚˜ ์ง„๋‚œ ์ง„๋‚ด ์ง„๋‹ค ์ง„๋‹จ ์ง„๋‹ด ์ง„๋„ ์ง„๋ผ ์ง„๋ž˜ ์ง„๋ฅ˜ ์ง„๋ฆฌ ์ง„๋ชจ ์ง„๋ฌด ์ง„๋ฏธ ์ง„๋ฏผ ์ง„์‚ฌ ์ง„์‚ฐ ์ง„์ƒ ์ง„์ƒˆ ์ง„์ƒ ์ง„์„œ ์ง„์„  ์ง„์„ค ์ง„์„ฌ ์ง„์„ฑ ์ง„์†Œ ์ง„์†” ์ง„์†œ ์ง„์†ก ์ง„์ˆ˜ ์ง„์‹œ ์ง„์‹  ์ง„์‹ค ์ง„์‹ฌ ์ง„์•„ ์ง„์•ˆ ์ง„์•  ์ง„์–‘ ์ง„์—ฌ ์ง„์—ฐ ์ง„์˜ˆ ์ง„์˜ค ์ง„์˜จ ์ง„์š” ์ง„์šฐ ์ง„์›” ์ง„์œ  ์ง„์œค ์ง„์œจ ์ง„์€ ์ง„์ด ์ง„์ผ ์ง„์ž„ ์ง„์ • ์ง„์ฐจ ์ง„์ฐฝ ์ง„์ฑ„ ์ง„์ฒœ ์ง„์ฒจ ์ง„์ฒญ ์ง„์ดˆ ์ง„์ด ์ง„ํ‘œ ์ง„ํ•˜ ์ง„ํ•œ ์ง„ํ•ด ์ง„ํ–ฅ ์ง„ํ˜„ ์ง„ํ˜ผ ์ง„ํ™ ์ง„ํ™” ์ง„ํšจ ์ง„๋‚จ ์ง„๋ˆˆ ์ง„๋‹ฌ ์ง„๋‹น ์ง„๋ด„ ์ง„๋น„ ์ง„์Šฌ ์ง„์—ด ์ง„์˜ ์ง„์ž ์ง„ํƒœ ์ง„ํ˜œ ์ง„๋‚  ์ง„๋Š˜ ์ง„๋ถ„ ์ง„์ƒ˜ ์ง„์ˆœ ์ง„์ธ ์ง„์žฅ ์ง„์ „ ์ง„์ข… ์ง„์ฃผ ์ง„์ง€ ์ง„์ง„ ์ง„์ฐฌ ์ง„์ฒ˜ ์ฐฌ๋‚˜ ์ฐฌ๋‚œ ์ฐฌ๋‚ด ์ฐฌ๋‹ค ์ฐฌ๋‹จ ์ฐฌ๋‹ด ์ฐฌ๋„ ์ฐฌ๋ผ ์ฐฌ๋ž˜ ์ฐฌ๋ฅ˜ ์ฐฌ๋ฆฌ ์ฐฌ๋ชจ ์ฐฌ๋ฌด ์ฐฌ๋ฏธ ์ฐฌ๋ฏผ ์ฐฌ์‚ฌ ์ฐฌ์‚ฐ ์ฐฌ์ƒ ์ฐฌ์ƒˆ ์ฐฌ์ƒ ์ฐฌ์„œ ์ฐฌ์„  ์ฐฌ์„ค ์ฐฌ์„ฌ ์ฐฌ์„ฑ ์ฐฌ์†Œ ์ฐฌ์†” ์ฐฌ์†œ ์ฐฌ์†ก ์ฐฌ์ˆ˜ ์ฐฌ์‹œ ์ฐฌ์‹  ์ฐฌ์‹ค ์ฐฌ์‹ฌ ์ฐฌ์•„ ์ฐฌ์•ˆ ์ฐฌ์•  ์ฐฌ์–‘ ์ฐฌ์—ฌ ์ฐฌ์—ฐ ์ฐฌ์˜ˆ ์ฐฌ์˜ค ์ฐฌ์˜จ ์ฐฌ์š” ์ฐฌ์šฐ ์ฐฌ์›” ์ฐฌ์œ  ์ฐฌ์œค ์ฐฌ์œจ ์ฐฌ์€ ์ฐฌ์ด ์ฐฌ์ผ ์ฐฌ์ž„ ์ฐฌ์ • ์ฐฌ์ฐจ ์ฐฌ์ฐฝ ์ฐฌ์ฑ„ ์ฐฌ์ฒœ ์ฐฌ์ฒจ ์ฐฌ์ฒญ ์ฐฌ์ดˆ ์ฐฌ์ด ์ฐฌํ‘œ ์ฐฌํ•˜ ์ฐฌํ•œ ์ฐฌํ•ด ์ฐฌํ–ฅ ์ฐฌํ˜„ ์ฐฌํ˜ผ ์ฐฌํ™ ์ฐฌํ™” ์ฐฌํšจ ์ฐฌ๋‚จ ์ฐฌ๋ˆˆ ์ฐฌ๋‹ฌ ์ฐฌ๋‹น ์ฐฌ๋ด„ ์ฐฌ๋น„ ์ฐฌ์Šฌ ์ฐฌ์—ด ์ฐฌ์˜ ์ฐฌ์ž ์ฐฌํƒœ ์ฐฌํ˜œ ์ฐฌ๋‚  ์ฐฌ๋Š˜ ์ฐฌ๋ถ„ ์ฐฌ์ƒ˜ ์ฐฌ์ˆœ ์ฐฌ์ธ ์ฐฌ์žฅ ์ฐฌ์ „ ์ฐฌ์ข… ์ฐฌ์ฃผ ์ฐฌ์ง€ ์ฐฌ์ง„ ์ฐฌ์ฐฌ ์ฐฌ์ฒ˜ ์ฒ˜๋‚˜ ์ฒ˜๋‚œ ์ฒ˜๋‚ด ์ฒ˜๋‹ค ์ฒ˜๋‹จ ์ฒ˜๋‹ด ์ฒ˜๋„ ์ฒ˜๋ผ ์ฒ˜๋ž˜ ์ฒ˜๋ฅ˜ ์ฒ˜๋ฆฌ ์ฒ˜๋ชจ ์ฒ˜๋ฌด ์ฒ˜๋ฏธ ์ฒ˜๋ฏผ ์ฒ˜์‚ฌ ์ฒ˜์‚ฐ ์ฒ˜์ƒ ์ฒ˜์ƒˆ ์ฒ˜์ƒ ์ฒ˜์„œ ์ฒ˜์„  ์ฒ˜์„ค ์ฒ˜์„ฌ ์ฒ˜์„ฑ ์ฒ˜์†Œ ์ฒ˜์†” ์ฒ˜์†œ ์ฒ˜์†ก ์ฒ˜์ˆ˜ ์ฒ˜์‹œ ์ฒ˜์‹  ์ฒ˜์‹ค ์ฒ˜์‹ฌ ์ฒ˜์•„ ์ฒ˜์•ˆ ์ฒ˜์•  ์ฒ˜์–‘ ์ฒ˜์—ฌ ์ฒ˜์—ฐ ์ฒ˜์˜ˆ ์ฒ˜์˜ค ์ฒ˜์˜จ ์ฒ˜์š” ์ฒ˜์šฐ ์ฒ˜์›” ์ฒ˜์œ  ์ฒ˜์œค ์ฒ˜์œจ ์ฒ˜์€ ์ฒ˜์ด ์ฒ˜์ผ ์ฒ˜์ž„ ์ฒ˜์ • ์ฒ˜์ฐจ ์ฒ˜์ฐฝ ์ฒ˜์ฑ„ ์ฒ˜์ฒœ ์ฒ˜์ฒจ ์ฒ˜์ฒญ ์ฒ˜์ดˆ ์ฒ˜์ด ์ฒ˜ํ‘œ ์ฒ˜ํ•˜ ์ฒ˜ํ•œ ์ฒ˜ํ•ด ์ฒ˜ํ–ฅ ์ฒ˜ํ˜„ ์ฒ˜ํ˜ผ ์ฒ˜ํ™ ์ฒ˜ํ™” ์ฒ˜ํšจ ์ฒ˜๋‚จ ์ฒ˜๋ˆˆ ์ฒ˜๋‹ฌ ์ฒ˜๋‹น ์ฒ˜๋ด„ ์ฒ˜๋น„ ์ฒ˜์Šฌ ์ฒ˜์—ด ์ฒ˜์˜ ์ฒ˜์ž ์ฒ˜ํƒœ ์ฒ˜ํ˜œ ์ฒ˜๋‚  ์ฒ˜๋Š˜ ์ฒ˜๋ถ„ ์ฒ˜์ƒ˜ ์ฒ˜์ˆœ ์ฒ˜์ธ ์ฒ˜์žฅ ์ฒ˜์ „ ์ฒ˜์ข… ์ฒ˜์ฃผ ์ฒ˜์ง€ ์ฒ˜์ง„ ์ฒ˜์ฐฌ ์ฒ˜์ฒ˜ \ No newline at end of file diff --git a/packages/mugunghwa/sources/98_target.txt b/packages/mugunghwa/sources/98_target.txt deleted file mode 100644 index 9c23f9c..0000000 --- a/packages/mugunghwa/sources/98_target.txt +++ /dev/null @@ -1,55 +0,0 @@ -๋‚˜๋Š˜ ๋‚˜๋ถ„ ๋‚˜์ƒ˜ ๋‚˜์ˆœ ๋‚˜์ฃผ ๋‚˜์ง€ ๋‚˜์ฐฌ ๋‚œ๋‚  ๋‚œ๋Š˜ ๋‚œ๋ถ„ ๋‚œ์ƒ˜ ๋‚œ์žฅ ๋‚œ์ „ ๋‚œ์ข… ๋‚œ์ง€ ๋‚œ์ฒ˜ ๋‚ด๋ถ„ ๋‚ด์ƒ˜ ๋‚ด์ง€ ๋‹ค์ˆœ ๋‹จ๋ถ„ ๋‹จ์ƒ˜ ๋‹จ์ธ ๋‹ด๋Š˜ ๋‹ด์žฅ ๋‹ด์ „ -๋‹ด์ข… ๋‹ด์ง„ ๋‹ด์ฒ˜ ๋„๋‚  ๋„๋Š˜ ๋„๋ถ„ ๋„์ƒ˜ ๋„์ˆœ ๋„์ธ ๋„์žฅ ๋„์ „ ๋„์ข… ๋„์ฃผ ๋„์ง€ ๋„์ง„ ๋„์ฐฌ ๋„์ฒ˜ ๋ผ๋‚  ๋ผ๋Š˜ ๋ผ๋ถ„ ๋ผ์ƒ˜ ๋ผ์ˆœ ๋ผ์žฅ ๋ผ์ „ ๋ผ์ข… ๋ผ์ฃผ -๋ผ์ง€ ๋ผ์ง„ ๋ผ์ฐฌ ๋ผ์ฒ˜ ๋ž˜๋‚  ๋ž˜๋Š˜ ๋ž˜๋ถ„ ๋ž˜์ƒ˜ ๋ž˜์ˆœ ๋ž˜์ธ ๋ž˜์žฅ ๋ž˜์ „ ๋ž˜์ข… ๋ž˜์ฃผ ๋ž˜์ง€ ๋ž˜์ง„ ๋ž˜์ฐฌ ๋ž˜์ฒ˜ ๋ฅ˜๋‚  ๋ฅ˜๋Š˜ ๋ฅ˜๋ถ„ ๋ฅ˜์ƒ˜ ๋ฅ˜์ˆœ ๋ฅ˜์ธ ๋ฅ˜์žฅ ๋ฅ˜์ „ -๋ฅ˜์ข… ๋ฅ˜์ฃผ ๋ฅ˜์ง€ ๋ฅ˜์ง„ ๋ฅ˜์ฐฌ ๋ฅ˜์ฒ˜ ๋ฆฌ๋Š˜ ๋ฆฌ์ „ ๋ฆฌ์ง„ ๋ฆฌ์ฐฌ ๋ชจ๋‚  ๋ชจ๋Š˜ ๋ชจ๋ถ„ ๋ชจ์ƒ˜ ๋ชจ์ˆœ ๋ชจ์ธ ๋ชจ์žฅ ๋ชจ์ „ ๋ชจ์ข… ๋ชจ์ฃผ ๋ชจ์ง€ ๋ชจ์ง„ ๋ชจ์ฐฌ ๋ชจ์ฒ˜ ๋ฌด๋ถ„ ๋ฌด์ธ -๋ฌด์ „ ๋ฌด์ง€ ๋ฌด์ง„ ๋ฌด์ฒ˜ ๋ฏธ๋‚  ๋ฏธ๋ถ„ ๋ฏธ์ƒ˜ ๋ฏธ์ธ ๋ฏธ์ง„ ๋ฏผ๋‚  ๋ฏผ๋ถ„ ๋ฏผ์ƒ˜ ๋ฏผ์ˆœ ๋ฏผ์žฅ ๋ฏผ์ „ ๋ฏผ์ข… ๋ฏผ์ง€ ๋ฏผ์ง„ ์‚ฌ์ƒ˜ ์‚ฌ์ง„ ์‚ฐ๋Š˜ ์‚ฐ์ธ ์ƒ๋‚  ์ƒ๋ถ„ ์ƒ์ƒ˜ ์ƒ์ „ -์ƒ์ข… ์ƒ์ง€ ์ƒ์ง„ ์ƒˆ์ง€ ์ƒˆ์ง„ ์ƒ๋‚  ์ƒ๋ถ„ ์ƒ์ƒ˜ ์ƒ์žฅ ์ƒ์ „ ์ƒ์ข… ์„œ๋‚  ์„œ๋ถ„ ์„œ์ƒ˜ ์„ ์ข… ์„ ์ง€ ์„ฌ๋Š˜ ์„ฌ์ง„ ์„ฑ๋ถ„ ์„ฑ์ง€ ์„ฑ์ง„ ์†Œ์ „ ์†Œ์ง€ ์†ก๋Š˜ ์†ก์ƒ˜ ์†ก์ˆœ -์†ก์ „ ์†ก์ข… ์†ก์ง€ ์†ก์ง„ ์ˆ˜์ƒ˜ ์ˆ˜์ฒ˜ ์‹œ๋‚  ์‹œ๋Š˜ ์‹œ๋ถ„ ์‹ ๋ถ„ ์‹ ์ „ ์‹ ์ข… ์‹ค๋Š˜ ์‹ค์ƒ˜ ์‹ค์ง€ ์‹ฌ๋‚  ์‹ฌ๋ถ„ ์‹ฌ์ƒ˜ ์‹ฌ์ธ ์•„์ƒ˜ ์•„์ฐฌ ์•„์ฒ˜ ์•ˆ๋‚  ์•ˆ์ƒ˜ ์•ˆ์žฅ ์•ˆ์ „ -์•ˆ์ข… ์•ˆ์ง„ ์•ˆ์ฐฌ ์•ˆ์ฒ˜ ์–‘๋Š˜ ์–‘๋ถ„ ์–‘์ˆœ ์–‘์ธ ์–‘์ฒ˜ ์—ฌ์ƒ˜ ์—ฐ์ƒ˜ ์—ฐ์ „ ์—ฐ์ข… ์—ฐ์ฐฌ ์˜ˆ๋Š˜ ์˜ˆ๋ถ„ ์˜ˆ์ƒ˜ ์˜ˆ์ „ ์˜ˆ์ข… ์˜ˆ์ฃผ ์˜ˆ์ง€ ์˜ค๋‚  ์˜ค๋ถ„ ์˜ค์ƒ˜ ์˜จ์ƒ˜ ์˜จ์žฅ -์˜จ์ข… ์˜จ์ง€ ์˜จ์ง„ ์˜จ์ฐฌ ์˜จ์ฒ˜ ์š”๋‚  ์š”๋ถ„ ์š”์ƒ˜ ์š”์ „ ์š”์ง€ ์šฐ์ „ ์›”๋Š˜ ์›”์ƒ˜ ์›”์ฃผ ์›”์ง„ ์›”์ฐฌ ์œค๋‚  ์œค๋ถ„ ์œค์ƒ˜ ์œค์ง€ ์œจ๋‚  ์œจ๋Š˜ ์œจ๋ถ„ ์œจ์ƒ˜ ์œจ์ง„ ์€๋‚  -์€๋Š˜ ์€๋ถ„ ์€์ƒ˜ ์€์ˆœ ์€์ธ ์€์ข… ์€์ฃผ ์€์ง€ ์€์ง„ ์€์ฒ˜ ์ด์ฃผ ์ด์ง€ ์ผ๋‚  ์ผ๋Š˜ ์ผ๋ถ„ ์ผ์ƒ˜ ์ผ์ˆœ ์ผ์ธ ์ผ์žฅ ์ผ์ „ ์ผ์ข… ์ผ์ฃผ ์ผ์ง€ ์ผ์ง„ ์ผ์ฐฌ ์ผ์ฒ˜ -์ž„์ง€ ์ž„์ง„ ์ •๋ถ„ ์ •์ƒ˜ ์ •์ˆœ ์ •์ „ ์ •์ข… ์ฐฝ๋ถ„ ์ฐฝ์ƒ˜ ์ฐฝ์ฃผ ์ฐฝ์ฐฌ ์ฑ„๋‚  ์ฑ„๋ถ„ ์ฒœ์ˆœ ์ฒญ์ „ ์ฒญ์ข… ์ดˆ์ƒ˜ ์ด์ฃผ ํ‘œ๋ถ„ ํ‘œ์ƒ˜ ํ‘œ์ „ ํ‘œ์ข… ํ‘œ์ฃผ ํ‘œ์ง€ ํ‘œ์ฐฌ ํ•˜์ƒ˜ -ํ•˜์ฃผ ํ•œ๋ถ„ ํ•œ์žฅ ํ•œ์ „ ํ•ด๋ถ„ ํ–ฅ๋Š˜ ํ–ฅ๋ถ„ ํ˜„๋‚  ํ˜„๋Š˜ ํ˜„๋ถ„ ํ˜„์ธ ํ˜„์ฒ˜ ํ˜ผ๋‚  ํ™๋‚  ํ™๋Š˜ ํ™๋ถ„ ํ™์ƒ˜ ํ™์ „ ํ™์ฃผ ํ™”๋‚  ํ™”๋Š˜ ํ™”๋ถ„ ํ™”์ƒ˜ ํ™”์žฅ ํ™”์ง„ ํšจ๋‚  -ํšจ๋Š˜ ํšจ๋ถ„ ํšจ์ƒ˜ ํšจ์ „ ๋‚จ๋‚  ๋‚จ๋Š˜ ๋‚จ๋ถ„ ๋‚จ์ƒ˜ ๋‚จ์ˆœ ๋ˆˆ๋‚  ๋ˆˆ๋Š˜ ๋ˆˆ๋ถ„ ๋ˆˆ์ƒ˜ ๋ˆˆ์ˆœ ๋ˆˆ์ธ ๋ˆˆ์žฅ ๋ˆˆ์ „ ๋ˆˆ์ข… ๋ˆˆ์ฃผ ๋ˆˆ์ง€ ๋ˆˆ์ง„ ๋ˆˆ์ฐฌ ๋ˆˆ์ฒ˜ ๋‹ฌ๋‚  ๋‹ฌ๋ถ„ ๋‹ฌ์ƒ˜ -๋‹ฌ์ˆœ ๋‹ฌ์žฅ ๋‹ฌ์ฐฌ ๋‹น์ง„ ๋ด„๋Š˜ ๋ด„๋ถ„ ๋ด„์ƒ˜ ๋ด„์žฅ ๋ด„์ „ ๋ด„์ข… ๋ด„์ฃผ ๋ด„์ง€ ๋ด„์ฐฌ ๋ด„์ฒ˜ ๋น„๋‚  ๋น„๋Š˜ ๋น„๋ถ„ ๋น„์ƒ˜ ๋น„์ˆœ ๋น„์ธ ๋น„์žฅ ๋น„์ „ ๋น„์ข… ๋น„์ฃผ ๋น„์ง€ ๋น„์ง„ -๋น„์ฐฌ ๋น„์ฒ˜ ์Šฌ๋‚  ์Šฌ๋Š˜ ์Šฌ๋ถ„ ์Šฌ์ƒ˜ ์Šฌ์ˆœ ์Šฌ์ธ ์Šฌ์žฅ ์Šฌ์ „ ์Šฌ์ข… ์Šฌ์ฃผ ์Šฌ์ง€ ์Šฌ์ง„ ์Šฌ์ฐฌ ์Šฌ์ฒ˜ ์—ด๋‚  ์—ด๋Š˜ ์—ด๋ถ„ ์—ด์ƒ˜ ์—ด์ „ ์—ด์ง€ ์—ด์ฐฌ ์˜๋‚  ์˜๋Š˜ ์˜๋ถ„ -์˜์ƒ˜ ์˜์ˆœ ์˜์ธ ์˜์žฅ ์˜์ „ ์˜์ข… ์˜์ฃผ ์˜์ง€ ์˜์ง„ ์˜์ฐฌ ์˜์ฒ˜ ์ž๋‚  ์ž๋Š˜ ์ž๋ถ„ ์ž์ƒ˜ ์ž์ˆœ ์ž์ธ ์ž์žฅ ์ž์ „ ์ž์ข… ์ž์ฃผ ์ž์ง€ ์ž์ง„ ์ž์ฐฌ ์ž์ฒ˜ ํƒœ๋‚  -ํƒœ๋Š˜ ํƒœ๋ถ„ ํƒœ์ƒ˜ ํƒœ์ˆœ ํƒœ์ „ ํƒœ์ข… ํ˜œ๋‚  ํ˜œ๋Š˜ ํ˜œ๋ถ„ ํ˜œ์ƒ˜ ํ˜œ์ˆœ ํ˜œ์ธ ํ˜œ์ „ ํ˜œ์ข… ํ˜œ์ฃผ ํ˜œ์ง€ ํ˜œ์ง„ ํ˜œ์ฐฌ ํ˜œ์ฒ˜ ๋‚ ๋‚œ ๋‚ ๋‚ด ๋‚ ๋‹จ ๋‚ ๋‹ด ๋‚ ๋ž˜ ๋‚ ๋ฅ˜ ๋‚ ๋ฆฌ -๋‚ ๋ชจ ๋‚ ๋ฌด ๋‚ ๋ฏธ ๋‚ ๋ฏผ ๋‚ ์‚ฌ ๋‚ ์‚ฐ ๋‚ ์ƒ ๋‚ ์ƒˆ ๋‚ ์ƒ ๋‚ ์„œ ๋‚ ์„ค ๋‚ ์„ฌ ๋‚ ์„ฑ ๋‚ ์†Œ ๋‚ ์†” ๋‚ ์†œ ๋‚ ์†ก ๋‚ ์ˆ˜ ๋‚ ์‹ค ๋‚ ์‹ฌ ๋‚ ์•  ๋‚ ์–‘ ๋‚ ์—ฌ ๋‚ ์—ฐ ๋‚ ์˜ˆ ๋‚ ์˜ค -๋‚ ์˜จ ๋‚ ์šฐ ๋‚ ์›” ๋‚ ์œค ๋‚ ์œจ ๋‚ ์€ ๋‚ ์ผ ๋‚ ์ • ๋‚ ์ฐจ ๋‚ ์ฐฝ ๋‚ ์ฑ„ ๋‚ ์ฒœ ๋‚ ์ฒจ ๋‚ ์ฒญ ๋‚ ์ดˆ ๋‚ ์ด ๋‚ ํ‘œ ๋‚ ํ•˜ ๋‚ ํ•œ ๋‚ ํ–ฅ ๋‚ ํ˜„ ๋‚ ํ˜ผ ๋‚ ํ™ ๋‚ ํ™” ๋‚ ํšจ ๋‚ ๋ˆˆ -๋‚ ๋‹ฌ ๋‚ ๋ด„ ๋‚ ๋น„ ๋‚ ์Šฌ ๋‚ ์—ด ๋‚ ์˜ ๋‚ ํ˜œ ๋‚ ๋ถ„ ๋‚ ์ƒ˜ ๋‚ ์ˆœ ๋‚ ์ธ ๋‚ ์žฅ ๋‚ ์ „ ๋‚ ์ข… ๋‚ ์ฃผ ๋‚ ์ง€ ๋‚ ์ง„ ๋‚ ์ฐฌ ๋Š˜๋‚˜ ๋Š˜๋‚œ ๋Š˜๋‹จ ๋Š˜๋‹ด ๋Š˜๋„ ๋Š˜๋ฅ˜ ๋Š˜๋ชจ ๋Š˜๋ฌด -๋Š˜๋ฏธ ๋Š˜๋ฏผ ๋Š˜์‚ฌ ๋Š˜์‚ฐ ๋Š˜์ƒˆ ๋Š˜์ƒ ๋Š˜์„œ ๋Š˜์„  ๋Š˜์„ค ๋Š˜์„ฌ ๋Š˜์„ฑ ๋Š˜์†Œ ๋Š˜์†” ๋Š˜์†œ ๋Š˜์†ก ๋Š˜์ˆ˜ ๋Š˜์‹œ ๋Š˜์‹ค ๋Š˜์‹ฌ ๋Š˜์•  ๋Š˜์—ฐ ๋Š˜์˜ˆ ๋Š˜์˜ค ๋Š˜์šฐ ๋Š˜์›” ๋Š˜์œค -๋Š˜์€ ๋Š˜์ผ ๋Š˜์ • ๋Š˜์ฐจ ๋Š˜์ฐฝ ๋Š˜์ฑ„ ๋Š˜์ฒœ ๋Š˜์ฒจ ๋Š˜์ฒญ ๋Š˜์ดˆ ๋Š˜์ด ๋Š˜ํ‘œ ๋Š˜ํ•˜ ๋Š˜ํ•œ ๋Š˜ํ–ฅ ๋Š˜ํ˜„ ๋Š˜ํ˜ผ ๋Š˜ํ™ ๋Š˜ํšจ ๋Š˜๋ˆˆ ๋Š˜๋‹ฌ ๋Š˜๋‹น ๋Š˜๋ด„ ๋Š˜๋น„ ๋Š˜์Šฌ ๋Š˜์—ด -๋Š˜์˜ ๋Š˜์ž ๋Š˜ํƒœ ๋Š˜ํ˜œ ๋Š˜๋‚  ๋Š˜๋ถ„ ๋Š˜์ƒ˜ ๋Š˜์ˆœ ๋Š˜์ธ ๋Š˜์žฅ ๋Š˜์ „ ๋Š˜์ข… ๋Š˜์ฃผ ๋Š˜์ง€ ๋Š˜์ง„ ๋Š˜์ฐฌ ๋ถ„๋‚œ ๋ถ„๋ฏธ ๋ถ„๋‚  ๋ถ„๋Š˜ ์ƒ˜๋‚ด ์ƒ˜๋‹ค ์ƒ˜๋‹จ ์ƒ˜๋‹ด ์ƒ˜๋„ ์ƒ˜๋ผ -์ƒ˜๋ž˜ ์ƒ˜๋ฅ˜ ์ƒ˜๋ฆฌ ์ƒ˜๋ชจ ์ƒ˜๋ฌด ์ƒ˜๋ฏธ ์ƒ˜์†Œ ์ƒ˜์†” ์ƒ˜์†œ ์ƒ˜์‹œ ์ƒ˜์‹  ์ƒ˜์‹ค ์ƒ˜์•„ ์ƒ˜์•ˆ ์ƒ˜์•  ์ƒ˜์–‘ ์ƒ˜์—ฌ ์ƒ˜์—ฐ ์ƒ˜์˜ˆ ์ƒ˜์˜ค ์ƒ˜์˜จ ์ƒ˜์š” ์ƒ˜์šฐ ์ƒ˜์›” ์ƒ˜์œ  ์ƒ˜์œค -์ƒ˜์œจ ์ƒ˜์€ ์ƒ˜์ž„ ์ƒ˜์ • ์ƒ˜์ฐจ ์ƒ˜์ฐฝ ์ƒ˜์ฑ„ ์ƒ˜์ฒœ ์ƒ˜์ฒจ ์ƒ˜์ฒญ ์ƒ˜์ดˆ ์ƒ˜์ด ์ƒ˜ํ‘œ ์ƒ˜ํ•˜ ์ƒ˜ํ•œ ์ƒ˜ํ–ฅ ์ƒ˜ํ˜„ ์ƒ˜ํ˜ผ ์ƒ˜ํ™ ์ƒ˜ํ™” ์ƒ˜ํšจ ์ƒ˜๋ˆˆ ์ƒ˜๋‹ฌ ์ƒ˜๋‹น ์ƒ˜๋ด„ ์ƒ˜๋น„ -์ƒ˜์Šฌ ์ƒ˜์—ด ์ƒ˜์˜ ์ƒ˜์ž ์ƒ˜ํƒœ ์ƒ˜ํ˜œ ์ƒ˜๋Š˜ ์ƒ˜๋ถ„ ์ƒ˜์ˆœ ์ƒ˜์ธ ์ƒ˜์ „ ์ƒ˜์ข… ์ƒ˜์ฃผ ์ƒ˜์ง€ ์ƒ˜์ง„ ์ƒ˜์ฐฌ ์ƒ˜์ฒ˜ ์ˆœ๋‚˜ ์ˆœ๋‹ค ์ˆœ๋‹จ ์ˆœ๋‹ด ์ˆœ๋„ ์ˆœ๋ฅ˜ ์ˆœ๋ฆฌ ์ˆœ๋ชจ ์ˆœ๋ฌด -์ˆœ๋ฏธ ์ˆœ๋ฏผ ์ˆœ์‚ฌ ์ˆœ์ƒˆ ์ˆœ์ƒ ์ˆœ์„œ ์ˆœ์„  ์ˆœ์„ค ์ˆœ์„ฌ ์ˆœ์„ฑ ์ˆœ์†Œ ์ˆœ์†” ์ˆœ์†œ ์ˆœ์†ก ์ˆœ์ˆ˜ ์ˆœ์‹œ ์ˆœ์‹  ์ˆœ์‹ฌ ์ˆœ์•„ ์ˆœ์•ˆ ์ˆœ์•  ์ˆœ์–‘ ์ˆœ์—ฌ ์ˆœ์—ฐ ์ˆœ์˜ˆ ์ˆœ์˜ค -์ˆœ์˜จ ์ˆœ์š” ์ˆœ์šฐ ์ˆœ์›” ์ˆœ์œ  ์ˆœ์œค ์ˆœ์œจ ์ˆœ์€ ์ˆœ์ด ์ˆœ์ผ ์ˆœ์ž„ ์ˆœ์ฐจ ์ˆœ์ฐฝ ์ˆœ์ฑ„ ์ˆœ์ฒœ ์ˆœ์ฒจ ์ˆœ์ฒญ ์ˆœ์ดˆ ์ˆœ์ด ์ˆœํ‘œ ์ˆœํ•˜ ์ˆœํ•œ ์ˆœํ–ฅ ์ˆœํ˜„ ์ˆœํ˜ผ ์ˆœํ™ -์ˆœํ™” ์ˆœํšจ ์ˆœ๋‚จ ์ˆœ๋ˆˆ ์ˆœ๋‹ฌ ์ˆœ๋‹น ์ˆœ๋ด„ ์ˆœ๋น„ ์ˆœ์Šฌ ์ˆœ์—ด ์ˆœ์˜ ์ˆœ์ž ์ˆœํ˜œ ์ˆœ๋‚  ์ˆœ๋Š˜ ์ˆœ์ƒ˜ ์ˆœ์ธ ์ˆœ์ „ ์ˆœ์ฃผ ์ˆœ์ง€ ์ˆœ์ฐฌ ์ˆœ์ฒ˜ ์ธ๋‚ด ์ธ๋‹ค ์ธ๋‹จ ์ธ๋‹ด -์ธ๋„ ์ธ๋ผ ์ธ๋ž˜ ์ธ๋ฆฌ ์ธ๋ชจ ์ธ๋ฌด ์ธ๋ฏธ ์ธ์‚ฌ ์ธ์‚ฐ ์ธ์ƒˆ ์ธ์„œ ์ธ์„  ์ธ์„ค ์ธ์„ฌ ์ธ์†Œ ์ธ์†” ์ธ์†œ ์ธ์†ก ์ธ์ˆ˜ ์ธ์‹œ ์ธ์‹ค ์ธ์‹ฌ ์ธ์•  ์ธ์–‘ ์ธ์—ฌ ์ธ์—ฐ -์ธ์˜ˆ ์ธ์˜จ ์ธ์š” ์ธ์›” ์ธ์œ  ์ธ์œค ์ธ์œจ ์ธ์€ ์ธ์ผ ์ธ์ž„ ์ธ์ฐจ ์ธ์ฐฝ ์ธ์ฑ„ ์ธ์ฒจ ์ธ์ฒญ ์ธ์ดˆ ์ธ์ด ์ธํ‘œ ์ธํ•˜ ์ธํ–ฅ ์ธํ˜„ ์ธํ˜ผ ์ธํ™ ์ธํšจ ์ธ๋‚จ ์ธ๋ˆˆ -์ธ๋‹ฌ ์ธ๋‹น ์ธ๋ด„ ์ธ๋น„ ์ธ์Šฌ ์ธ์—ด ์ธ์˜ ์ธ์ž ์ธํƒœ ์ธํ˜œ ์ธ๋‚  ์ธ๋Š˜ ์ธ์ˆœ ์ธ์žฅ ์ธ์ „ ์ธ์ฃผ ์ธ์ง€ ์ธ์ง„ ์ธ์ฐฌ ์ธ์ฒ˜ ์žฅ๋‚˜ ์žฅ๋‚ด ์žฅ๋‹ค ์žฅ๋‹จ ์žฅ๋‹ด ์žฅ๋„ -์žฅ๋ผ ์žฅ๋ž˜ ์žฅ๋ฅ˜ ์žฅ๋ฆฌ ์žฅ๋ฌด ์žฅ๋ฏธ ์žฅ๋ฏผ ์žฅ์‚ฐ ์žฅ์ƒ ์žฅ์ƒˆ ์žฅ์„œ ์žฅ์„  ์žฅ์„ค ์žฅ์„ฌ ์žฅ์„ฑ ์žฅ์†” ์žฅ์†œ ์žฅ์†ก ์žฅ์‹œ ์žฅ์‹  ์žฅ์‹ฌ ์žฅ์•„ ์žฅ์•ˆ ์žฅ์–‘ ์žฅ์—ฌ ์žฅ์—ฐ -์žฅ์˜ค ์žฅ์˜จ ์žฅ์š” ์žฅ์šฐ ์žฅ์›” ์žฅ์œ  ์žฅ์œค ์žฅ์œจ ์žฅ์€ ์žฅ์ด ์žฅ์ผ ์žฅ์ž„ ์žฅ์ฐจ ์žฅ์ฐฝ ์žฅ์ฑ„ ์žฅ์ฒœ ์žฅ์ฒจ ์žฅ์ฒญ ์žฅ์ดˆ ์žฅ์ด ์žฅํ‘œ ์žฅํ•˜ ์žฅํ•œ ์žฅํ–ฅ ์žฅํ˜„ ์žฅํ˜ผ -์žฅํ™ ์žฅํ™” ์žฅํšจ ์žฅ๋ˆˆ ์žฅ๋‹ฌ ์žฅ๋‹น ์žฅ๋ด„ ์žฅ์Šฌ ์žฅ์—ด ์žฅ์˜ ์žฅํƒœ ์žฅํ˜œ ์žฅ๋‚  ์žฅ๋Š˜ ์žฅ๋ถ„ ์žฅ์ƒ˜ ์žฅ์ˆœ ์žฅ์ธ ์žฅ์ „ ์žฅ์ข… ์žฅ์ฃผ ์žฅ์ง€ ์žฅ์ง„ ์žฅ์ฐฌ ์žฅ์ฒ˜ ์ „๋‚œ -์ „๋‹ค ์ „๋„ ์ „๋ž˜ ์ „๋ฆฌ ์ „๋ฌด ์ „๋ฏธ ์ „๋ฏผ ์ „์ƒ ์ „์ƒˆ ์ „์„œ ์ „์„ฌ ์ „์„ฑ ์ „์†” ์ „์†œ ์ „์ˆ˜ ์ „์‹ค ์ „์‹ฌ ์ „์•ˆ ์ „์•  ์ „์–‘ ์ „์—ฌ ์ „์—ฐ ์ „์˜ˆ ์ „์˜ค ์ „์˜จ ์ „์›” -์ „์œค ์ „์€ ์ „์ด ์ „์ผ ์ „์ž„ ์ „์ • ์ „์ฐฝ ์ „์ฑ„ ์ „์ฒœ ์ „์ฒจ ์ „์ฒญ ์ „์ดˆ ์ „์ด ์ „ํ‘œ ์ „ํ–ฅ ์ „ํ˜„ ์ „ํ˜ผ ์ „ํ™ ์ „ํšจ ์ „๋ˆˆ ์ „๋ด„ ์ „๋น„ ์ „์Šฌ ์ „์—ด ์ „์ž ์ „ํ˜œ -์ „๋‚  ์ „๋Š˜ ์ „์ƒ˜ ์ „์ˆœ ์ „์ธ ์ „์ฐฌ ์ข…๋‚ด ์ข…๋‹ด ์ข…๋„ ์ข…๋ผ ์ข…๋ฅ˜ ์ข…๋ฆฌ ์ข…๋ชจ ์ข…๋ฏธ ์ข…์„ค ์ข…์„ฌ ์ข…์„ฑ ์ข…์†Œ ์ข…์†” ์ข…์†œ ์ข…์†ก ์ข…์ˆ˜ ์ข…์‹œ ์ข…์‹  ์ข…์‹ค ์ข…์‹ฌ -์ข…์•„ ์ข…์•ˆ ์ข…์•  ์ข…์—ฌ ์ข…์—ฐ ์ข…์˜ˆ ์ข…์˜ค ์ข…์˜จ ์ข…์š” ์ข…์šฐ ์ข…์›” ์ข…์œ  ์ข…์œค ์ข…์œจ ์ข…์€ ์ข…์ž„ ์ข…์ • ์ข…์ฐจ ์ข…์ฐฝ ์ข…์ฑ„ ์ข…์ฒœ ์ข…์ฒจ ์ข…์ฒญ ์ข…์ดˆ ์ข…์ด ์ข…ํ‘œ -์ข…ํ•˜ ์ข…ํ•œ ์ข…ํ–ฅ ์ข…ํ˜„ ์ข…ํ˜ผ ์ข…ํ™ ์ข…ํ™” ์ข…ํšจ ์ข…๋ˆˆ ์ข…๋‹ฌ ์ข…๋‹น ์ข…๋ด„ ์ข…๋น„ ์ข…์Šฌ ์ข…์—ด ์ข…์˜ ์ข…ํƒœ ์ข…ํ˜œ ์ข…๋‚  ์ข…๋Š˜ ์ข…๋ถ„ ์ข…์ƒ˜ ์ข…์ˆœ ์ข…์ธ ์ข…์žฅ ์ข…์ „ -์ข…์ฃผ ์ข…์ง€ ์ข…์ง„ ์ข…์ฐฌ ์ข…์ฒ˜ ์ฃผ๋‚œ ์ฃผ๋‹จ ์ฃผ๋‹ด ์ฃผ๋„ ์ฃผ๋ž˜ ์ฃผ๋ฅ˜ ์ฃผ๋ฌด ์ฃผ๋ฏธ ์ฃผ๋ฏผ ์ฃผ์‚ฐ ์ฃผ์ƒ ์ฃผ์ƒˆ ์ฃผ์ƒ ์ฃผ์„œ ์ฃผ์„  ์ฃผ์„ค ์ฃผ์„ฌ ์ฃผ์„ฑ ์ฃผ์†” ์ฃผ์†œ ์ฃผ์†ก -์ฃผ์ˆ˜ ์ฃผ์‹œ ์ฃผ์‹ฌ ์ฃผ์•„ ์ฃผ์•ˆ ์ฃผ์•  ์ฃผ์–‘ ์ฃผ์—ฐ ์ฃผ์˜ˆ ์ฃผ์˜ค ์ฃผ์š” ์ฃผ์›” ์ฃผ์œค ์ฃผ์œจ ์ฃผ์€ ์ฃผ์ด ์ฃผ์ผ ์ฃผ์ž„ ์ฃผ์ฐฝ ์ฃผ์ฑ„ ์ฃผ์ฒœ ์ฃผ์ฒจ ์ฃผ์ฒญ ์ฃผ์ดˆ ์ฃผ์ด ์ฃผํ‘œ -์ฃผํ•˜ ์ฃผํ•œ ์ฃผํ•ด ์ฃผํ–ฅ ์ฃผํ˜„ ์ฃผํ˜ผ ์ฃผํ™ ์ฃผํ™” ์ฃผํšจ ์ฃผ๋‚จ ์ฃผ๋ˆˆ ์ฃผ๋‹ฌ ์ฃผ๋ด„ ์ฃผ์—ด ์ฃผ์˜ ์ฃผํ˜œ ์ฃผ๋‚  ์ฃผ๋ถ„ ์ฃผ์ƒ˜ ์ฃผ์ˆœ ์ฃผ์ง€ ์ฃผ์ฐฌ ์ง€๋‚œ ์ง€๋‹ด ์ง€๋„ ์ง€๋ž˜ -์ง€๋ฅ˜ ์ง€๋ฏผ ์ง€์‚ฌ ์ง€์‚ฐ ์ง€์ƒˆ ์ง€์ƒ ์ง€์„œ ์ง€์„  ์ง€์„ค ์ง€์„ฌ ์ง€์†Œ ์ง€์†” ์ง€์†œ ์ง€์ˆ˜ ์ง€์‹  ์ง€์‹ค ์ง€์‹ฌ ์ง€์•„ ์ง€์•ˆ ์ง€์•  ์ง€์—ฌ ์ง€์˜ค ์ง€์˜จ ์ง€์šฐ ์ง€์›” ์ง€์œค -์ง€์œจ ์ง€์€ ์ง€์ผ ์ง€์ฐจ ์ง€์ฐฝ ์ง€์ฑ„ ์ง€์ฒœ ์ง€์ฒจ ์ง€์ฒญ ์ง€์ดˆ ์ง€์ด ์ง€ํ‘œ ์ง€ํ•œ ์ง€ํ˜„ ์ง€ํ˜ผ ์ง€ํ™ ์ง€ํ™” ์ง€ํšจ ์ง€๋ˆˆ ์ง€๋‹ฌ ์ง€๋ด„ ์ง€๋น„ ์ง€์Šฌ ์ง€์—ด ์ง€์˜ ์ง€ํƒœ -์ง€ํ˜œ ์ง€๋‚  ์ง€๋Š˜ ์ง€์ƒ˜ ์ง€์ˆœ ์ง€์ข… ์ง€์ฃผ ์ง€์ฐฌ ์ง„๋‚˜ ์ง„๋‚œ ์ง„๋‚ด ์ง„๋‹ด ์ง„๋„ ์ง„๋ผ ์ง„๋ž˜ ์ง„๋ฅ˜ ์ง„๋ฆฌ ์ง„๋ชจ ์ง„๋ฌด ์ง„๋ฏธ ์ง„๋ฏผ ์ง„์‚ฌ ์ง„์‚ฐ ์ง„์ƒˆ ์ง„์ƒ ์ง„์„œ -์ง„์„  ์ง„์„ค ์ง„์„ฌ ์ง„์„ฑ ์ง„์†Œ ์ง„์†” ์ง„์†œ ์ง„์†ก ์ง„์ˆ˜ ์ง„์‹œ ์ง„์‹  ์ง„์‹ค ์ง„์‹ฌ ์ง„์•„ ์ง„์•ˆ ์ง„์•  ์ง„์–‘ ์ง„์—ฌ ์ง„์—ฐ ์ง„์˜ˆ ์ง„์˜ค ์ง„์˜จ ์ง„์š” ์ง„์šฐ ์ง„์›” ์ง„์œ  -์ง„์œค ์ง„์œจ ์ง„์€ ์ง„์ผ ์ง„์ž„ ์ง„์ • ์ง„์ฐจ ์ง„์ฑ„ ์ง„์ฒœ ์ง„์ฒจ ์ง„์ฒญ ์ง„์ดˆ ์ง„์ด ์ง„ํ‘œ ์ง„ํ•˜ ์ง„ํ–ฅ ์ง„ํ˜„ ์ง„ํ˜ผ ์ง„ํ™ ์ง„ํ™” ์ง„ํšจ ์ง„๋‚จ ์ง„๋ˆˆ ์ง„๋‹ฌ ์ง„๋ด„ ์ง„๋น„ -์ง„์Šฌ ์ง„์—ด ์ง„์˜ ์ง„์ž ์ง„ํƒœ ์ง„ํ˜œ ์ง„๋‚  ์ง„๋Š˜ ์ง„๋ถ„ ์ง„์ƒ˜ ์ง„์ˆœ ์ง„์ธ ์ง„์žฅ ์ง„์ „ ์ง„์ข… ์ง„์ฃผ ์ง„์ฐฌ ์ง„์ฒ˜ ์ฐฌ๋‚˜ ์ฐฌ๋‹ด ์ฐฌ๋„ ์ฐฌ๋ž˜ ์ฐฌ๋ฅ˜ ์ฐฌ๋ฆฌ ์ฐฌ๋ชจ ์ฐฌ๋ฌด -์ฐฌ๋ฏธ ์ฐฌ๋ฏผ ์ฐฌ์‚ฌ ์ฐฌ์‚ฐ ์ฐฌ์ƒ ์ฐฌ์ƒˆ ์ฐฌ์ƒ ์ฐฌ์„œ ์ฐฌ์„  ์ฐฌ์„ค ์ฐฌ์„ฌ ์ฐฌ์„ฑ ์ฐฌ์†Œ ์ฐฌ์†” ์ฐฌ์†œ ์ฐฌ์†ก ์ฐฌ์ˆ˜ ์ฐฌ์‹œ ์ฐฌ์‹  ์ฐฌ์‹ค ์ฐฌ์‹ฌ ์ฐฌ์•„ ์ฐฌ์•ˆ ์ฐฌ์•  ์ฐฌ์–‘ ์ฐฌ์—ฌ -์ฐฌ์—ฐ ์ฐฌ์˜ˆ ์ฐฌ์˜จ ์ฐฌ์š” ์ฐฌ์›” ์ฐฌ์œ  ์ฐฌ์œค ์ฐฌ์œจ ์ฐฌ์€ ์ฐฌ์ • ์ฐฌ์ฐจ ์ฐฌ์ฐฝ ์ฐฌ์ฑ„ ์ฐฌ์ฒœ ์ฐฌ์ฒจ ์ฐฌ์ฒญ ์ฐฌ์ดˆ ์ฐฌ์ด ์ฐฌํ‘œ ์ฐฌํ•˜ ์ฐฌํ•œ ์ฐฌํ–ฅ ์ฐฌํ˜„ ์ฐฌํ˜ผ ์ฐฌํ™” ์ฐฌํšจ -์ฐฌ๋‚จ ์ฐฌ๋ˆˆ ์ฐฌ๋‹ฌ ์ฐฌ๋ด„ ์ฐฌ๋น„ ์ฐฌ์Šฌ ์ฐฌ์—ด ์ฐฌ์˜ ์ฐฌ์ž ์ฐฌํƒœ ์ฐฌํ˜œ ์ฐฌ๋‚  ์ฐฌ๋Š˜ ์ฐฌ๋ถ„ ์ฐฌ์ƒ˜ ์ฐฌ์ˆœ ์ฐฌ์ธ ์ฐฌ์žฅ ์ฐฌ์ „ ์ฐฌ์ข… ์ฐฌ์ฃผ ์ฐฌ์ง€ ์ฐฌ์ง„ ์ฐฌ์ฒ˜ ์ฒ˜๋‹ด ์ฒ˜๋ž˜ -์ฒ˜๋ฅ˜ ์ฒ˜๋ชจ ์ฒ˜๋ฌด ์ฒ˜๋ฏผ ์ฒ˜์‚ฌ ์ฒ˜์‚ฐ ์ฒ˜์ƒ ์ฒ˜์ƒˆ ์ฒ˜์ƒ ์ฒ˜์„  ์ฒ˜์„ค ์ฒ˜์„ฌ ์ฒ˜์†Œ ์ฒ˜์†” ์ฒ˜์†œ ์ฒ˜์†ก ์ฒ˜์ˆ˜ ์ฒ˜์‹œ ์ฒ˜์‹ค ์ฒ˜์‹ฌ ์ฒ˜์•„ ์ฒ˜์•ˆ ์ฒ˜์•  ์ฒ˜์–‘ ์ฒ˜์—ฐ ์ฒ˜์˜ค -์ฒ˜์šฐ ์ฒ˜์›” ์ฒ˜์œค ์ฒ˜์œจ ์ฒ˜์€ ์ฒ˜์ด ์ฒ˜์ผ ์ฒ˜์ž„ ์ฒ˜์ • ์ฒ˜์ฐฝ ์ฒ˜์ฑ„ ์ฒ˜์ฒœ ์ฒ˜์ฒจ ์ฒ˜์ฒญ ์ฒ˜์ดˆ ์ฒ˜์ด ์ฒ˜ํ‘œ ์ฒ˜ํ•˜ ์ฒ˜ํ–ฅ ์ฒ˜ํ˜„ ์ฒ˜ํ˜ผ ์ฒ˜ํ™ ์ฒ˜ํ™” ์ฒ˜ํšจ ์ฒ˜๋ˆˆ ์ฒ˜๋‹ฌ -์ฒ˜๋‹น ์ฒ˜๋ด„ ์ฒ˜๋น„ ์ฒ˜์Šฌ ์ฒ˜์—ด ์ฒ˜ํƒœ ์ฒ˜๋‚  ์ฒ˜์ƒ˜ ์ฒ˜์ˆœ ์ฒ˜์ธ ์ฒ˜์žฅ ์ฒ˜์ „ ์ฒ˜์ฃผ \ No newline at end of file diff --git a/packages/mugunghwa/sources/charmap.json b/packages/mugunghwa/sources/charmap.json deleted file mode 100644 index b66471d..0000000 --- a/packages/mugunghwa/sources/charmap.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - "๋‚˜", "๋‚œ", "๋‚ด", "๋‹ค", "๋‹จ", "๋‹ด", "๋„", "๋ผ", "๋ž˜", "๋ฅ˜", "๋ฆฌ", "๋ชจ", - "๋ฌด", "๋ฏธ", "๋ฏผ", "์‚ฌ", "์‚ฐ", "์ƒ", "์ƒˆ", "์ƒ", "์„œ", "์„ ", "์„ค", "์„ฌ", - "์„ฑ", "์†Œ", "์†”", "์†œ", "์†ก", "์ˆ˜", "์‹œ", "์‹ ", "์‹ค", "์‹ฌ", "์•„", "์•ˆ", - "์• ", "์–‘", "์—ฌ", "์—ฐ", "์˜ˆ", "์˜ค", "์˜จ", "์š”", "์šฐ", "์›”", "์œ ", "์œค", - "์œจ", "์€", "์ด", "์ผ", "์ž„", "์ •", "์ฐจ", "์ฐฝ", "์ฑ„", "์ฒœ", "์ฒจ", "์ฒญ", - "์ดˆ", "์ด", "ํ‘œ", "ํ•˜", "ํ•œ", "ํ•ด", "ํ–ฅ", "ํ˜„", "ํ˜ผ", "ํ™", "ํ™”", "ํšจ", - "๋‚จ", "๋ˆˆ", "๋‹ฌ", "๋‹น", "๋ด„", "๋น„", "์Šฌ", "์—ด", "์˜", "์ž", "ํƒœ", "ํ˜œ" -] \ No newline at end of file diff --git a/packages/mugunghwa/sources/compress.js b/packages/mugunghwa/sources/compress.js deleted file mode 100644 index 7065cd5..0000000 --- a/packages/mugunghwa/sources/compress.js +++ /dev/null @@ -1,19 +0,0 @@ -const fs = require('fs') -const LZString = require('../lz-string.min.js') - -var encodeTable = fs.readFileSync('./sources/84_filtered.txt', 'utf8').split(' ').join('') -var fixMap = JSON.stringify(require('./fixmap.json')) -var charMap = (require('./charmap.json').join('')) -var seperatorMap = (require('./seperatormap.json').join('')) - -var compressedTable = LZString.compressToEncodedURIComponent(encodeTable) -var compressedFixMap = LZString.compressToEncodedURIComponent(fixMap) -var compressedCharMap = LZString.compressToEncodedURIComponent(charMap) -var compressedSeperatorMap = LZString.compressToEncodedURIComponent(seperatorMap) - -fs.writeFileSync("./sources/compress_table.txt", compressedTable) -fs.writeFileSync("./sources/compress_fixmap.txt", compressedFixMap) -fs.writeFileSync("./sources/compress_charmap.txt", compressedCharMap) -fs.writeFileSync("./sources/compress_seperatormap.txt", compressedSeperatorMap) - -console.log('๋ฐ์ดํ„ฐ ์••์ถ•์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.') \ No newline at end of file diff --git a/packages/mugunghwa/sources/compress_charmap.txt b/packages/mugunghwa/sources/compress_charmap.txt deleted file mode 100644 index 50ae8cb..0000000 --- a/packages/mugunghwa/sources/compress_charmap.txt +++ /dev/null @@ -1 +0,0 @@ -hkNhyGwtDYJ02BdNgvTYI82B92wGe2A1OwNZ2AquwLN2A-uwP92A1A4A0DggwOATA4LsDgOIOAEg4CSDgNIOCMg4DGDgKYOA5g4IWDgGEOA7Q4AOhwCdDgG6HAIqOAJUcAGo4ETRwDejgB9HAEGOASMcAUY4BSxwA1jgFbHABOOASccAU44AFxwC7jgH3HAIeOBUCcAUM4F4ZwCIzgHJnAFTOBamcAQs4FxZwDorgBqrgDqrgC6rgKWrgCBrgDxrgLJrgCprgBVrgBUNgBBNgDdNgJ9NgCC9gCJ9gDVDgC+jgIBjgAnjgDsLgDhrQA \ No newline at end of file diff --git a/packages/mugunghwa/sources/compress_fixmap.txt b/packages/mugunghwa/sources/compress_fixmap.txt deleted file mode 100644 index 477c3ee..0000000 --- a/packages/mugunghwa/sources/compress_fixmap.txt +++ /dev/null @@ -1 +0,0 @@ -N4IkGQ0gXA2igLDSANCQmQ1JIaob2EqG9gUxvUFOGkAXWUByGqWQWob1AKhvUAKG9QDMb1BKxtOUBaGqkQEkb0gGcb0gHiauIQCdNfQKdN6QO9N6QDjN6QAyt6QBat6QK9N6QIKtEwBdNfQCyt6QCfN6QATNEwC9NfQDTN6QAsL6QAKtEwCPNfQAWL6QJvN6IDrzRKAPu18gB4d6IAt7RKAGe18gBAd6IANHRKAGp18gJqdEoA1nXyAg53ogAmdEoAVXXyAGN3ogArdEoAs3XyAJd3ogAPdEoAf3XyAO93ogBHd6IA-XRKAP918gLA96IAH3eiAMd3ogLnd6ICP3RKANQN8ACzogB9D6IAMw+iAL8PogBWDEoANA3yAP0PogBcD6IA1g+iAH8MSgIMDfICww+iAnwPogFFh9CAXsH0IBIEfQgB6B9AAZgkgAmBviADkH0IAUYfQgBDh9AAAkAOSPoQAIIxJALsDfEAsoPoQCUw+hAKiD6EApkMSQA4g3xABbD6EABcPoQAqg+hACxDEkABIN8QA2w+hACXD6EAGoPoQAcQxJACSDfEADsPoQA8Q+hABEjEkANIN8QAew+hACJD6EACSMSQCMg3xAL7D6EAkkPoQCpIxJADGDfEAG8P89CAAJGJIAUwb4gBAh9CAA+H0IAFEYkgBzBviAGCH0IAL4fQgA0RiSAQsG+IBEIfQgFvh9CAXRGJIAMIb4gAih9CAExH0IAVkYkgB2hviAAaH0IAbIfQgApR9CAGFH0IAOkYkgAOhviAEaH0IBHofQgBpR9CABFH0IBeUYkgBOhviACaH0IAXIfQgAZR9CAFFH0IABkYkgBuhviABaH0IAfIfQgA5R9CAHFH0IAJkYkgBFRviAPVH0IBVUfQgHVR9BAAEx9BAAnO9BABGu9BAAAuiRAAlRvhABEx9BAFUx9BAE1R9BAAD29BAB8O9BABnO9BAAmu9BABAuiRAANRvhAAXR9BAB0x9BAA8x9BAAux9BAENR9BAGdR9BAGPRiRAETRvhAEn29BAFQuiRABvRvhABbR9BABIO9BABmx9BABv29BABBO9BAAFGiRAAfRvhAAoOiRAAgxvhAAzR9BAAEO9BAAX2iRABIxvgAFYJEACjG+EATjH0EAFjGJEAFLG+EAGY6JEABrG+EAUbGJEAFbG+EAGE6JEAAnG+EAQnH0AANnQQAXJokQAScb4QAdTvQQBWcYkQAKcb4QADTokQABcb4QBFcfQQAZcYkQAXcb4QAJpvQAAmdBAFdx9BAA1x9BABBx9BAHDxiRAB9xvgAEZ0EABab0EAGHH0EAA3H0EAAB70EAE+6JEAEPG+EASPGJEAVAm+EAWQn0EAWkmJEAChm+EAHcmJEAXhm+EAR8mJEAERm+EAFpmJEAHJm+EABSmJEACpm+EAHSmJEAWpm+EAQymJEACFm+EAHqmJEAXFm+EARamJEAHRW+EAG+WJEADVW+EABNX0EAa1X0EAYtWJEAHVW+EAW1X0EAC1X0EAA1WJEAF1W+EAE9X0EASNX0EAT9WJEAUtW+EAAtX0EAFNWJEAEDW+EAVDX0EABDWJEAHjW+EAGrWJEAWTW+EAXrWJEAFTW+EAVTX0EAczX0EAUzX0EASzWJEACrW+EASrX0EAbrWJAYGAQEAEsb0EAA4aJEACCa+EATCb0EAFCb0EAECaJEAG6a+EAC+b0EACYX0EADlaJEAT6a+EAUVb0EAVYX0EAV+aJEAEF6+EAD570EASF70EAF56JEAET6+EAHlX0EABIGJEAGqG+EAD5H0EAAiGJEAF9G+EAGg6JEAQDG+AABnQQBODvQQBADokQAE8b4QBE8fQQBi8fQQBC8YkQAdhb4QAZRfQQATJfQQAXxYkQAcNb4QAa1dIABfIA \ No newline at end of file diff --git a/packages/mugunghwa/sources/compress_seperatormap.txt b/packages/mugunghwa/sources/compress_seperatormap.txt deleted file mode 100644 index 090a8a3..0000000 --- a/packages/mugunghwa/sources/compress_seperatormap.txt +++ /dev/null @@ -1 +0,0 @@ -idNh2hwAzeg2Q2gDQ0A \ No newline at end of file diff --git a/packages/mugunghwa/sources/compress_table.txt b/packages/mugunghwa/sources/compress_table.txt deleted file mode 100644 index 3ee800b..0000000 --- a/packages/mugunghwa/sources/compress_table.txt +++ /dev/null @@ -1 +0,0 @@ -hkNgum6F6bkH3bkDPbkBqdxA1ncQFV3ED-dxA1A8QDQPCCDA8IBMDwguwPCAEg8IIyDwgMYPCApg8IDmDwghYPCAYQ8IAOh4IBOh4IBuh4IAlR4IANR4IETR4IAfR4IAgx4IAox4IBSx4IAax4IBWx4IBJx4IApx4IAFx4IB9x4IFQJ4IAoZ4IByZ4IAqZ4IFqZ4IB0V4EANVeBAHVXgQBdV4EBS1eBAEDXgQB414EBZNeBAFTXgQAq14EAKhuBACCbgQBum4EBPpuBAEF7gQBE+4EAaoeBAF9HgQEAx4EAE8eBAHDXAHIbgXvBewBHm3qhe2F60XsAP7t78XtJewBxB3upewBJB3sAaQd66XpZe9l6uXt5egV7hXrFewBFR3ple+V7AG9HepV7VXsASMd6NXp6XqGXomXrmXpWXq2XoOXrOXqAXhneoARGd6bl6nl6gAhZ3qAXFnev5ekFeqFetFenFeoleileulellegVesVepVejVevVek1eq1et1AC0NICF4CFCCFaCFgBZuoU4IX4IWkIUUIXLIXUIUbIXbIV0IWMIUsIXsIVcIW8IXCIV3IWSIXyIWvIU-IUaIWGIUmIXmIVWIWAF3GhbYhYAQ8aFziFiKFKKFbiFniFPiF2KFeKF-iFQSFESF0SFcSFiSFKSF6SFWSFuSFBSFxSFZSFlSF9SFTSFrSFHSFgB2FoXdQAnTcBB71ByBB+BB8NB1BB7BBwhB2hBzLBzNB5hBzhB-hB0RB6RBxRB8tB9RBxtB9tB3RB4xByxB+xB1xB7xB8JB2JB5JBzJB3kQdXkHJRB1UQcNEHbRBz0QdDEHQACccHExB3MQcrEHWxBzDQcHEHZxB0RQcUUHNxB08QcfEHbFBzxQd-EHIJB2iQc4kHRJBxSQd0kHLJB1yQcCkHYpBzKQdKkHGpB3qQcmkHVpBw6Qde0HbowBAXpRQnEBwBAYYQCgEBYBABAQGQEA0BAGUQBmEBMBAHAQHwEAiBAUgQAoEBqBADYQG2EA6BARgQBYEB2BALgQEAHaGQGEEA7hASQQBkEB5BAV4QFUEAfhADQQG0EA9BAQwQEQkATBAcwQCsEBAxAMMQAcEBnBAREQBREA3BATwQB8EBsRAPEQH8EAghAUIQAiEBohAOIQESEAUhAdIQCyEBchAAoQGKEBKhAGoQHqEBWhADoQF7EBukgIY9PAYZwCgcBYHABBwGQcA0HAGVwBmcBMHAHBwHwcAiHAUhwAocBlnAahwA2cBtnAOhwEYcAWHAdhwC4cBeHAaLwAEcBhHAMRwEkcAZHAeRwFecAlHAVRwB+cANHAbRwD0cBDHARDwBMcBzHAKxwEDcBbHABxwGccBEXAFFwDccBPHAHxwGxcA8XAfxwCCcBQnACJwGicA4nARJwBScB0nALJwFycACnAYpwDKcBKnAGpwHqcAmnAVpwA6cBumGYBhiFGcDIe4YEGGZBhhlYYcGGIhhlIYYKGGZZhmoYYNmGbZhkYYYWGGdhhi4YZeGGARhmEYY7mGSRhhkYZ5GGV5hiUYZVGGDRhm0YY9GGQxhkQ4YTGGcxhisYZA2GWxhjDYYHGGZxhkRYYUWGNxhk8YZsWGPFhiCYZQmGCJhmiYY4mGRJhhSYZ0mGLJhlyYYCmGYphjKYZKmGGowx6jDCaMMVowwOjDG6FAEwUBzBQCsFABwUA4gvVgNQWA7BYBKAQNQZAeCNjIBYMgdgyAuDICUBgaUK4rJfTQMMNAsA0AIDQMgNAMw0D4DQEQNApA0AUDQMsNA1A0AbDQNsNAdA0CMDQCwNA7A0BcDQLwNAkg0CUMMGgEwaBzBoCsGgWwaBnBoERGgFEaA3BoE8GgHwaBsRoDxGgfwaAghoFCGgaIaA4hoESGgFIaB0hoCyGgAoaBihoHqGgJoaBWhoF7GgboMoKAyg2DKbYMoWAynYDKLgMpeAyjuDKQwMoTAynMDKKwMoUQyh8DKaIMp0gzGAHMDcdkZjDBmLAGYCAZgyhmJgGYOAZj4BmKQGYFAZjLBmNQGYGwZjbBmHQGYjAZgsBmOwGYXAZjCBmDIGY8gZivBmEoGYqgZg-BmBoGY2gZh6BmIYGYiEZgmBmOYGYVgZi2BmGGGYDgZiIhmCiGYngZg+BmNiGYeIZj+BmEEGYoQZgRBmNEGYcQZgpBmFkGYBQZhlBmJUGY9QZhNBmK0GYHQZi9hmN0TAvQHKYGGJgKAmBYCYAQJgZAmAZQDMwPgTARBMCkEwMsTA1BMAbEwNsTAdBMCMEwCwTA7BMBcEwLwTA0VMACEwMITAdxMCSEwDITA8hMCvEwEoTAqhMA-EwHoTAhhMAmEwOYTAVhMCBkwLYTAYZMAOEwM4TAiJMAokwG4TAnhMA+EwNiTAeJMD+EwEETAoRMAREwNETAcRMCJEwCkTAWRMAFEwMUTAZRMCVEwPUTATRMCtEwB0TAvZMDdBwL0IGOAEA4BlEMnAmAcD4BwEQHA2wcB0BwCwHA7AcBcBwLwHAwgcBiBwJIHAMgcBKBwKoHAhgcCIRwCYHA5gcBWBwIGHAtgcDOBwG4HAngcA+BwNiHAeIcBBBwKEHA0QcBxBwIkHAKQcDpBwFkHAuQcAFBwMUHAZQcBNBwK0HA3RCALCVC5EG+Bhj4CgPgWA+AED4GQPgGUIy+UDvwEQfApB8AUHwMsfA1B8AbHwNsfAjB8AsHwOwfAXB8C8HwNFfAAh8DCHwGIfAdx8CSHwDIfA8h8CvHwEofAqh8A-HwBofA2h8B6HwIYfAiF8AmHwOYfAVh8C2HwGGfADh8DOHwIifAKJ8BuHwJ4fAPh8DYnwHifA-h8BBHwKEfAER8DRHwHEfAiR8ApHwOkfAWR8C5HwAUfAxR8CVHwDUfA9R8BNHwK0fAHR8C9nwN0EgRAhQHjcqnIgUAiCwCIAgIgyAeFEBlEQGYAqKNEFIEQCgRBlhEA2EQbYRA6BEBYEQdgRAuBEAEEQO4RBJBEBkEQeQRBXhECUEQVQRAfhEA0EQPQRBDBEEQkQEwRBzBECsEQQMRBbBEDDEQZwRBEREBREQNwRBPBEB8EQbERA8RECCEQaIRA4hEESEQFIRB0hECyEQXIRAChEGKEQMoRBKhEBqEQeoRAmhEFaEQDoRBexEG6EsDyEN06kAQKQGUYyhWkBwFR3rpAKCkGWKQagpANikG2KQOgpBGCkBYKQdgpAuCkF4KQaKpABCkGEKQMQpA7ikEkKQeQpBXikCUKQVQpAfikA0KQbQpBDCkEQqQEwpBzCkCsKQQMpBbCkDDKQBwpBnCkERKQFEpA3CkE8KQHwpBsSkDxKQfwpAgikFCKQCIpBoikDiKQRIpAUikHSKQLIpBcikAKKQYopAyikEqKQGopB6ikCaKQVopAOikF7KQboVAKC9DVCeLyUNM4UCgBQWAFAEDJImRQTA-WKDLAoBsCg2wKAsAoOwCgXAKDRQoMICgYgKB3AoJICg8gKCvAoEoCgqgKA-AoBoCg2gKB6AoIYCgiEKAmAoOYCgVgKCBgoGGCgDgKDOAoERAoBRAoDcAoE8AoB8AoGxAoDxAoH8AoCCAoFCAoAiAoGiAoDiAoESAoBSAoHSAoCyAoFyAoAKAoGKAoDKAoEqAoBqAoHqAoCaAoFaAoA6AoF7AoG6FWGWBABhmWAQGWGQCEWWBlCmWWBwDo0G25yn2WGoGWA2GWG2GWDoGWEYGWBYGWHYGWC4GWF4GWGimWAEGWGEGWDEGWDuGWEkGWBkGWFeGWCUGWB+GWA0GWD0GWEMGWBMGWHMGWCsGWEDGWFsGWDDGWAcGWGcGWERGWBRGWDcGWE8GWB8GWGxGWDxGWH8GWCCGWFCGWAiGWGiGWDiGWESGWBSGWHSGWCyGWFyGWAKGWGKGWDKGWEqGWBqGWHqGWCaGWFaGWA6GWF7GWG6HWB8jhlzmoCgAwWoFwXwWERlBmTFWoBwAY2oCIF5zkOoA2GoG2GoDoGoEYGoBYGoHYGoC4GoF4GoGimoAEGoGEGoDEGoDuGoEkGoBkGoHkGoFeGoCUGoFUGoB+GoA0GoG0GoD0GoEMGoEQmoBMGoHMGoCsGoEDGoFsGoDDGoGcGoERGoBRGoDcGoE8GoB8GoGxGoDxGoH8GoCCGoFCGoAiGoGiGoDiGoESGoBSGoHSGoCyGoFyGoAKGoGKGoEqGoHqGoCaGoFaGoA6GoF7GoG6A2GAC2B1CvD8gRnzg2CgA2AQDEVSTmQlSY35xnwUM2I2G2A2DoA2EYA2BYA2HYA2C4A2F4A2Gig2AEA2GEA2DEA2DuA2EkA2BkA2HkA2FeA2CUA2FUA2B+A2A0A2G0A2D0A2EMA2EQg2BMA2HMA2CsA2EDA2FsA2DDA2GcA2ERA2BRA2DcA2E8A2B8A2GxA2DxA2H8A2CCA2FCA2AiA2GiA2DiA2ESA2BSA2HSA2CyA2FyA2AKA2GKA2DKA2EqA2BqA2HqA2CaA2FaA2A6A2F7A2G6G2GAF2D1BvACiRkLm2CgG2FgG2AQG2GQAkXSQWSlRHRY1G0FznyUO2JNO2DoG2EYG2BYG2HYG2C4G2F4G2Gim2AEG2GEG2DuG2EkG2BkG2HkG2FeG2CUG2FUG2B+G2A0G2G0G2D0G2EMG2EQm2BMG2HMG2CsG2FsG2AcG2GcG2ERG2BRG2DcG2E8G2B8G2GxG2DxG2H8G2CCG2FCG2AiG2GiG2DiG2ESG2BSG2HSG2CyG2AKG2GKG2DKG2EqG2BqG2HqG2CaG2FaG2A6G2F7G2G6AYANDvCChRjoGGDoCgDoFgDoAQDoGQDoBlCWRlTHToHwHG2F12LNI-LoBYDoHYDoC4DoF4DoGijoAEDoGEDoDEDoDuDoEkDoHkDoFeDoCUDoFUDoB+DoA0DoG0DoEMDoEQjoBMDoHMDoCsDoEDDoFsDoDDDoAcDoGcDoERDoBRDoDcDoE8DoB8DoGxDoDxDoH8DoCCDoAiDoDiDoESDoBSDoHSDoCyDoFyDoAKDoGKDoDKDoEqDoBqDoHqDoCaDoFaDoA6DoF7DoG6GYEYF6AfBCjRmLkYCgEYFgEYAQEYBlBWTlUYBwDY0YCIFF0YAoDUP2K-MYDoEYBYEYHYEYF4EYGikYAEEYEkEYHkEYFeEYCUEYFUEYD0EYEMEYBMEYHMEYCsEYEDEYFsEYDDEYAcEYGcEYEREYBREYDcEYE8EYB8EYGxEYH8EYCCEYFCEYAiEYGiEYDiEYESEYBSEYHSEYCyEYFyEYGKEYDKEYEqEYHqEYCaEYFaEYA6EYF7EYG6DYEOBNCfDCgxlLhYFgBYAQDkUyTWQVQnQ40m3FwXw0MOKtJ-OCthpYHYBYC4BYF4BYGihYAEBYGEBYDEBYDuBYEkBYBkBYHkBYFeBYCUBYFUBYB+BYA0BYG0BYD0BYEMBYEQhYBMBYHMBYCsBYEDBYFsBYDDBYAcBYGcBYERBYBRBYDcBYE8BYB8BYGxBYDxBYH8BYCCBYFCBYAiBYGiBYDiBYESBYBSBYHSBYCyBYFyBYAKBYGKBYDKBYEqBYBqBYHqBYCaBYFaBYA6BYF7BYG6E4GODNBfAiixnLnYCgCwXYAQFIQUWyQ2SVSnS42m0lyXy0OOJtL-NCvhuDvYC4HYF4HYGinYAEHYGEHYDEHYDuHYEkHYBkHYHkHYFeHYCUHYFUHYB+HYA0HYG0HYD0HYEMHYEQnYBMHYHMHYCsHYEDHYFsHYAcHYGcHYERHYBRHYDcHYE8HYB8HYGxHYDxHYH8HYCCHYFCHYAiHYGiHYDiHYESHYBSHYHSHYCyHYFyHYAKHYGKHYDKHYEqHYBqHYHqHYCaHYFaHYA6HYF7HYG6B4FOAtDfCihxkri4CgC4FgC4AQHISUVyS2RVRnR41m2lxXx0NOLtIAvCq4EYFDqQa4F4C4Gii4AEC4GEC4DEC4DuC4EkC4BkC4HkC4FeC4CUC4FUC4B+C4A0C4G0C4D0C4EMC4EQi4BMC4HMC4CsC4EDC4FsC4DDC4AcC4GcC4ERC4BRC4DcC4E8C4B8C4GxC4DxC4H8C4CCC4FCC4AiC4GiC4DiC4ESC4BSC4HSC4CyC4FyC4AKC4GKC4DKC4EqC4BqC4HqC4CaC4FaC4A6C4F7C4G6H4CtDxmrl4AQHyV4BmDVVlz0POIdKAsivDpQd4AEF4GEF4DEF4DuF4EkF4BkF4FeF4CUF4FUF4B+F4G0F4BMF4HMF4EDF4FsF4DDF4AcF4GcF4ERF4BRF4DcF4E8F4GxF4DxF4FCF4GiF4DiF4ESF4BSF4HSF4CyF4FyF4AKF4GKF4DKF4EqF4CaF4FaF4A6F4F7F4G6GimAGil6GiiFFigJmimGGiigGilgGigQGimQGijQGihlGihwAE2iiIHlzXwMJAuiuRsjrQaKeil4GimEGijuGikkGihkGinkGileGiiUGilUGih+Gig0Gim0Gij0GikMGikQmihMGinMGiisGigcGimcGijcGik8Gih8GimxGijxGin8GiiCGilCGimiGijiGikSGihSGinSGiiyGilyGigKGimKGinqGiiaGilaGig6Gil7Gim6AEEHAEBACJlrgECgAEFgAEAQAEGQAEDQAEBlAEBmAEBwCE0VyMJdLAtRujowZKYJYEGigEGEAEDEAEDuAEEkAEBkAEHkAEFeAECUAEFUAEB+AEA0AEG0AED0AEEMAEEQgEBMAEHMAECsAEEDAEFsAEDDAEAcAEGcAEERAEBRAEDcAEE8AEB8AEGxAEDxAEH8AEFCAEAiAEGiAEDiAEESAEBSAECyAEFyAEAKAEGKAEDKAEEqAEBqAEHqAECaAEFaAEA6AEF7AEG6FEGuC-HihJnrmEAQGEGQGEDQGEBlB2R1RE2Vw3xMNuLdIgtjqwbKYzeEDEGEEkGEBkGEHkGEFeGEFUGEB+GEA0GEG0GED0GEEMGEEQmEBMGEHMGEFsGEDDGEAcGEGcGEERGEBRGEDcGEE8GEB8GEGxGEDxGEH8GECCGEFCGEAiGEGiGEDiGEESGEBSGEHSGECyGEFyGEAKGEGKGEDKGEEqGEBqGEHqGECaGEFaGEA6GEF7GEG6AkDECFDEBADJjEGGDECgDEFgDEAQDEDQDEBlDEBmDEEwCXS3zMPuI9LEG2ESrEEYHjpwYqZJbEGili7EHkDEFeDEFUDEB+DEG0DED0DEEMDEEQjEBMDEHMDECsDEEDDEFsDEAcDEGcDEERDEBRDEDcDEE8DEB8DEGxDEDxDEH8DECCDEGiDEDiDEESDEBSDECyDEAKDEGKDEDKDEEqDECaDEFaDEF7DEG6AeESkbjuCgDuFgDuAQDuGQDuDQEKTuBmD1Qk0W3Vx3wsMeK9KguSruEYETrwaqbJazaQ7uGEDuDEDuEkDuFeDuA0DuG0DuEMDuBMDuHMDuCsDuFsDuDDDuAcDuERDuBRDuDcDuE8DuGxDuDxDuH8DuFCDuGiDuDiDuESDuHSDuFyDuAKDuGKDuEqDuHqDuCaDuFaDuA6DuF7DuG6GkEkF6AdGSgpmbkkCgEkFgEkAQEkGQDUQNU1z32ePRuToIZqYpZzZQ-i8kHkEkFeEkCUEkFUEkB+EkA0EkG0EkD0EkEMEkBMEkHMEkFsEkDDEkAcEkGcEkEREkBREkBuBJAngSQD4EkDYhJAeISQP4EkBBBJAoQSQNEEkBxBJAiQSQCkEkDpBJAWQSQAUEkCVBJANQSQPUEkBNBJArQSQL2CeAyAhQqUKmDIAQAyBkARqNdDJlWwyAKANhV4n6TgoyA6AqdIhlSzQ6JcZAYgGQJIBkDyAZASgGQHoBkCGAZAiEGQCYBkDmAZAVgGQLYBkDOAZAbgGQJ4BkA+AZAeIGQP4BkBBAZAoQGQNEBkBxAZAiQGQOkBkBZAZAuQGQAUBkDFAZATQRQC8CdBAR0oNMduPICgDyBYA8gBAPIGQDyA0A8gGUAcnkA4A5M62bXAfnkDLB3iAZBCulUxrp0SGDTeQLwALYYdku8gO4AfykHyBXg8gJQPIFUDyAfg8gDQPIG0DyA9A8gQwPIEQjyATA8gcwPICsDyBAw8gWwPIDDDyAHA8gZwPIERDyAUQ8gNwPIE8DyAfA8gbEPIDxDyB-A8gIIPIFCDyAIg8gaIPIDiDyBEg8gFIPIHSDyAsg8gXIPIAKDyBig8gMoPIEqDyAag8geoPIB8GtB5AHQeQL2HkDdBXgwAECJ3FeBQBXgsAV4AgFeDIBXgaAV4DKDNQKZNsuuI-HYU+JBkkK2NTOmQyaY0tUuR-aoa8CUCvAfgrwDQK8G0CvBDArwEwK8HMCvArArwQMK8FsCvAwwrwBwK8GcCvAUQrwNwK8E8CvAfArwbEK8DxCvAggrwCIK8GiCvA4grwRIK8BSCvB0grwLIK8FyCvACgrwYoK8DKCvBKgrwGoK8HqCvAmgrwVoK8F7CvBugKgT4EoCFBKAQADMbuEoCgBKBsECAJQBQnUQygTkSmfXCfgcLfEQyKFbKrjWzoUMWmdLEtjhyUDCAlAYgJQHcBP61DyRSgH4EoA0BKBtASgPQEoEMBKBEISgEwEoHMBKArASgQMEoFsBKAHASgZwEoERBKAUQSgNwEoE8BKAfASgbEEoDxBKB-ASgCIEoGiBKA4gSgRIEoBSBKB0gSgLIEoFyBKACgSgYoEoEqBKB6gSgJoEoFaBKAOgSgXsEoG6DqBvgqgIUNlCZi9xVACAVQMgFUBoAzkVqLdCpl2yG4z8qgZYL8TDJoVcq+NXOlQzaZls8O6XNHmf3qGqAlAqgH4KoA0CqBtAqgPQKoEMCqBEIqgEwKoHMCqArAqgWwKoDDCqAHAqgZwKoERCqAUQqgNwKoE8CqAfAqgbEKoDxCqB-AqgIIKoFCCqBogqgOIKoESCqB0gqgLIKoFyCqACgqgYoKoDKCqBKgqgGoKoHqCqAmgqgVoKoF7CqBugPwYALlBZg-BhgPwNAD8BlAXIbUPwHAPtmNwX4nC-xCMhhXyo-BGA+dGhh0wrYX9GhlI3MT8G0A-BDAPwEwD8HMA-ArAPwMMD8ERA-AUQPwNwD8E8A-AfAPwbED8DxA-B-APwIID8GiA-A4gPwRID8HSA-AsgPwXID8AKA-BigPwSoD8BqA-B6gPwVoD8A6A-BewPwboACHyhsx+4GgKABoFgAaAEAGgZABoDQAaAZQVyDQJgA0A4ANMh2U3FfhcKAkoyWFQqhoEYCF06GXTDQLwCrZEdsuGgMQGHyv4aAZAzQ6kfmMQkaBtAGgPQBoEMAaBEIGgEwBoHMAaArAGgQMBoFsAaAHAGgZwBoERAaAUQGgNwBoE8AaAfAGgbEBoDxAaB-AGgIIBoFCAaAIgGgaIBoDiAaBEgGgFIBoHSAaAsgGgXIBoAKAaBigGgSoBoBqAaB6gGgJoBoFaAaAOgGgXsBoG6C6BtAvQbQEKEKgcxtAUAbQAgG0A4AtMN+bQMsGBI4ViqxdBhj0xZYkcseEfG-toBkC0jCx2gPQNoEMDaBEI2gEwNoHMDaArA2gQMNoFsDaAww2gZwNoERDaAUQ2gNwNoE8DaAfA2gbENoDxDaB-A2gIINoAiDaBog2gOINoESDaB0g2gXINoAKDaBig2gMoNoEqDaAag2geoNoCaDaBWg2gboECGKhcxh4egWAHoAQB6A0AegGUHcj0A4AdMegUgHfjcKgk4yeFPQHQEJql0mGfTPQLwHy5392hegV4KhNumay9AJgPQOYD0BWA9AgYPQLYD0Bhg9ADgPQM4D0CIg9AKIPQG4D0CeA9APgPQNiD0B4g9AQQPQKED0ARA9A0QPQHED0CJA9AWQPQLkD0AFA9AxQPQGUD0CVA9ANQPQPUD0BNA9ArQPQB0D0C9g9A3QYwCCC9AIRSoPMUeIYFgCGAEAhgZAJomKQPIHUO6PTKdktwP4PC4JBMgRVKrE1y6LDAZoYF4ANsKOhXPHlHwf4KDOh9I0sehP8n3TtZhgPQIYEQiGATAhgcwIYCsCGBAwhgWwIYDDCGAHAhgZwIYERCGAUQhgNwIYE8CGAfAhgbEIYDxCGB-AhgIIIYFCCGAIghgaIIYDiCGBEghgFIIYHSCGAsghgAoIYGKCGAyghgSoIYBqCGB6ghgJoIYFaCGAOghgXsIYG6CIRgAiEIUOVD5jjxEIUARCLAEQjIAnkiETAOdmtxP5ISSZIiuVUQiMBK6bDIZohF4BNsCeiESQN0MQivBEIPwR6brM4WIQTAiEcwIhCsCIRAwiEWwIhDDCIQHAiEZwIhBRCIQ3AiETwIhB8CIRsQiEPEIhH8CIQggiEUIIhGiCIQ4giERIIhHSCIQsgiEXIIhAKCIRigiEMoIhEqCIR6giEJoIhFaCIQOgiEXsIhG6BmAwQPoVCJVAFiTxYEJgWACYAQAmBkA2iUpC8idQHojMl2W3C-i8LQkUyJFSqqTWrocMRmbLFtjR1K5E8Y+T-FQb0MZGVjsJgU56frJHncLalJgcwCYCsAmBAwJgWwCYDDAmAHAJgZwCYERAmAUQJgNwCYE8AmAfAJgbECYDxAmB-AJgIICYFCAmAIgJgaICYDiAmBEgJgFICYHSAmAsgJgXICYAKAmBigJgMoCYEqAmAagJgeoCYCaAmBWgJgDoCYF7AmBugEIaqELGnjwJzAsAcwAgF0TlI3kLqEzNdntxv4fCsJNMmRWqrk1a6XDMZhyzbZ0dyuJPOPi-zUH9DmR1Y3CcFNemGyx5vC+pYSvMCBhzAtgcwGGHMAOBzAzgcwIiHMAohzAbgcwJ4HMA+BzA2IcwHiHMD+BzAQQcwKEHMARBzA0QcwHEHMCJBzAKQcwOkHMBZBzAuQcwAUHMDFBzAZQcwJUHMA1BzA9QcwE0HMCtBzAHQcwL2HMDdBaoIsWeIgisCwArACAKwMgEqQfI3UJ6MzLdkdwf4-C8JDMhRVqqU166PDCZlYF4AdsrAwgMngnysCSANBgw1kfhNCnvTjZE8-hY0uJVWBzAVgQMFYFsBWAwwVgBwFYGcBWBEQVgFEFYDcBWBPAVgHwFYGxBWA8QVgfwFYCCBWBQgVgCIFYGiBWA4gVgRIFYBSBWB0gVgLIFYFyBWACgVgYoFYDKBWBKgVgGoFYHqBWAmgVgVoFYA6BWBewVgboPPEDBQBAwMoM9IGHwD3YAiiJLMoGG2DU1G6fDKZly0DDRQmOgYYQBT0DB3BAwkgesYGFUCBgfgU8wRWmug2BhbAgYBwIGGcCBhEQgYFEIGDcCBhPAgYHwIGGxCBg8QgYfwIGFCCBgIggYaIIGDiCBh0ggYLIIGFyCBgCggYYoIGDKCBhKggYGoIGHqCBgOggYXsPYBhChhsItgEABLEXi2AoAtgWAIYlsAygvkXqC9BZkeyu4giyJHMlRUaq01m6AjGZjy1sDRQWOlXKnknzf5aDRhnIxsYRNsA-Bvp5smecItaXkqM1sG1zbYAcC2BnAtgRELYBRC2A3AtgTwLYB8C2BsQtgPELYH8C2AggtgUILYGiC2A4gtgRILYBSC2B0gtgLILYFyC2ACgtgYoLYDKC2BKgtgGoLYHqC2AmgtgVoLYA6C2BewqJPMq3Wq5hgHAYYFEGGB8BhgIgYYFIGGHSBhgsgTgOEA4CFD4RmoUsVeMggcCwAHACABwDKD+R+obMDgIgJ7j-wOBqADgDYDRVaqM126QjBZgK1q5p8v+kw3kc2NIkOAfgv0hwNoAXniLOl1KnNe5tx0OBnADgREA4BRAOA3ADgTwA4B8AOBsQDgPEA4H8AOAggDgUIA4AiAOBogDgOIA4ESAOAUgDgdIA4Ep0FAHAxQBwGUAcCVAHANQBwPUAcBNAHArQBwL2AcDdBXACIGWOvGcAIBnAyAYxM4BlDOAZgAaK9HZleze4ACERdEgWTortVmandERksyFY9suO9XOnjoOmGtjyJzgH4P9KXmSLaVea5DYdv13OBEQzgFEM4DcDOBPAzgHwM4GxDOA8QzgfwM4CCDOBQgzgCIM4GiDOA4gzgRIM4BSDOB0gzgLIM4FyDOACgzgYoM4DKDOBKgzgeoM4CaDOBWgzgDoM4F7DOBugiIYAMiBjDER2ocsTeIiCgCIhYAiIBAIiGQCmJEQMoAFEGkRA4AHM72X3EASiKYkiyDFTqqzW7piMVmIrRENFB46NcGeGfP-oiBkCzDEQrwdsZRMimAzbZK86RYiEQj0qC1qG7zcdsRBhhDdo+xECiERBuBEQngRED4ERDYhEQeIREP4ERBBBEQoQREBEERDRBEQcQREIkERApBEQ6QREFkERC5BEQBQREMUERBlBEQlQREDUERD1BEQTQREK0ERAdBEQvYREN0BRDAA0QnUBWNvBRBQAUQsAFEMgHMRAoQ0KIHAE5k+z+4QCMRbEiWSYrdV2avdCRmszFYohoofHZrkzyz4AD5hgozsdROinAz7Za82Rb0sZVFr0Nvm07fjuN3j6BDKINwCiE8AogfAKIbECiDxAoh-AKIIICiFCAogIgKIaICiDiAohEgKIFICiHSAogsgKIXICiAKAohigKIMoCiEqAogagKIeoCiCaAohWgKIDoCiG6AYhyI3UJWLvDcBQA3AsANwAgDcDIBLEbgGUG4BmAuZvsgeMAnEVxJlkWKvVTmv3SkYbMJWAnVrizxz5AC9Biw4Ud2NomxTQZjsjefIv6XMqS1mG-zedrcBhhTdk+oQ40bcCeA3APgNwNiDcB4g3A-gNwNEDcBxA3AiQNwCkDcDpA3AWQNwLkDcAFA3AxQNwGUDcCVA3ANQNwPUDcBNA3ArQNwB0DcC9g3A3QbwFiCTCUQVY+8TwFAE8CwBPACATwMgGsSeAZQIKCNG5l+zB4ICCRfEhWTYr9Vuag9GRlsylYDshO7XNnnnxAEGDlhoo3sfRPingznZW8xRYMtZVlrsNl2zwGGHN3T6RDzRgk54B8CeBsQngPEJ4H8CeAggngUIJ4AiCeBogngOIJ4ESCeAUgngdIJ4CyCeBcgngAoJ4GKCeAygngGoJ4HqCeAmgngVoJ4A6CeBewngboH4B8C9AUw1EfqGrB8DDAfAUAHwLAB8AIAfAyAWxLUjBRRoH0Hmf7KHigJJFCSVZDioNWHpyMdmPgXgEOxE6dcOePgO4GAKMGrDxR-YxiYlMhmuyd5yi4ZeyorW4bgt12wnZbtn1iHWjRJ6Mz4GxA+A8QPgfwD4CCA+BQgPgCID4GiA+A4gPgRID4BSA+B0gPgLID4FyA+ACgPgYoD4DKA+BKgPgGoD4HqA+AmgPgVoD4A6A+BewPgboNiGAC4g0wtEQaBrEPjYgEA2IZAPYmxAygIUMaJ9F5nDwwEUixJGslxWGr81R6CjPZjKxHZiduuXPAvhAOxAyB1hkowccxOSnQz3Ze81RaMs5VVr8NoW27diDDDW759Eh9oySdjO-nsQeIbEP4GxBBBsQoQbEBEGxDRBsQcQbEIkGxApBsQ6QbEFkGxC5BsQBQbEMUGxBlBsQlQbEDUGxD1BsQTQbEK0GxAdBsQvYbEN0DxDAACQGYYaFrGPh4goAeIWAHiAQB4hkAjiPEDKChRxoX0PmSPHATSKkk6yPFPEIwHHpKMDmcrMdhJ16488i+UAkwZsOlHDjWJqU2GZ7IPnqLxl3KmtYRvC33a8QYYW3YvqkOdGyT8Z-8zZbxD+A8QQQPEKEDxARA8Q0QPEHEDxCJA8QKQPEOkDxBZA8QuQPEAUDxDFA8QZQPEDUDxD1A8QTQPEK0DxAdA8QvYPEN0ECBEgswjEUaDrH8DDB-AUAfwLAH8DIBnE-gGUDCgTT+AcAfmaPAgQyLkkGyfFcaoLUnoqMjm-gXgFJ36588S+MAswdsP8CvBRx7E9KfDO9n+A9AmiyZbyrrXEbItj2-wGGGX3dGKTiZwC3ZZ2v+Agg-gUIP4AiD+Bog-gRIP4BSD+B0g-gXIP4AKD+Big-gMoP4EqD+Aag-geoP4CaD+BWg-gDoP4F7D+BugIQEkOND1inxXEcKJNAFlByx4kCWRSkk2QEqTVha09NRicynZwCLBQQJQJxMRm+ztF0y-lQ2tI1BAwwjuuQ0EDcDJmHLe1yW0EFCBBAIgQQOIEEESBBAUgQQdIEECyBBBcgQQAoEEGKBBAygQQSoEEBqBBB6gQQJoEEFaBBBewQQboOEDJChAhQk0A2OfFCBQBQgsAUIMgHcShAZQCKFNB+iCyhAiA8eFAjkWpItkhKoQOgKLVnoaMzmCrGdjJ2G5l8rB+w0IEoG4nIzQg2gXRbMsFVNryNr20IGGHX39HQgbgVM6BacsHXpb2d0IBEFCDRBQgcQUIIkFCDpBQgWQUIAUFCDFBQglQUIDUFCD1BQgTQUIK0FCAdBQgvYUIN0CiARBegEQQcNNCNgRBYAEQBABEGQARA0AEQGUEijTQRAiAaBEStNXnpaMLmEQXgBEGiijcIgYgCIJIEOHjjUZZ8-RcKpbWUaIgtgV3ZvqUMRA3A6Z8Cy5aOuy2AHEQaIBEDiARBEgEQFIBEHSARAsgEQXIBEAKARBigEQMoBEHqARAmgEQDoLEApCsRZoJsa+NECgDRBYA0QBANEGQCeJ6kKKDNF+jCzg5k8GBAovSQ7JiVogdASWovR0ZXMlWc7BTuNyF4V8kBNg44YqMnG8Tsp6MwORfMMXzLRVba6jfFve3RAww7u7fSoeGNUnMzkFtyydflvRAggQDzR9EDiDRBEg0QFINEHSDRAsg0QXINEAKDRBig0QMoNEEqDRAag0QeoNECaDRBWg0QRx72GiDdAEg7EeaGbFvhxAUEsAOIAgDiDIBvEcQGUGiizQ-oIsRRRkl2QkqzVpay9PRjcxVYLslOk3EXlXxQF2DThyo6cfxNymYzg5V84xYsvFUdraNiWz7XEDDCe7d9ah0YzSezPQWPLZ1uIP4HzsgPtH3TuIIkDiDpA4gWQOILkDiAFA4gxQOIJUDiA1A4g9QOIE0DiCtA4gHQOIL2DiDdBOIi0e+IkCgCJBYAiQBAIkGQC+JEgMoHNH+iizQ508OBEosyR7JSVZaq9AxnczVZLtpuNfNAQ4POGzjBJ+U7GaHJvmmLllkqrtfRu+2JAww3u-fRofGN0nczsFryxdcVuF2wHuj3pwS8SApBEg6QRIFkESAFBEgxQRIGUESCVBEgNQRIPUESBNBEgrQRIL2ESDdA6QZYbiMtCtiPwUgUAFILABSAIAUgyAfxCkBlAYo80AGGLLDkzx4EyirJPsjJUWry116RjB5iuzU6zcJeGAlIDIEuHqj5xKQVQLjJSDaBzFKQRCNKp7WMbftpO33Yfq0OTGGT+Z+Cz5auvK3i7KQUIPo-6cpA4gPrlIOkBSBZAUguQFIAUBSDFAUglQFIDUBSD1AUgTQFIK0BSAdAUgvYFIN0FWg2xn46QWAOkGQCBJ0gDSGYOkEwBAZs8BBCouyQHJyVlqm9Exk8y1Zrt5uWApwdcM1GLjhJhU-GeHPSB6BLFqy2VX2uY3Jb-t5O-3cfp0PTGmThZxC35Zuuq3DHgzol364PfpAsg6QAoOkGKDpAyg6QSoOkBqDpB6g6QJoOkFaDpAOg6QXsOtDthZAoAWQWAFkAQBZBkAWQGUFigLQgYEsiOXPEQSqKckhyClVasrW3pmMXmOrDdhp0W5ZA7gOAlwbcO1HLjRJhM6xesvlUDrWNgOrIBToD0n7dDMx5k0WaQv+Xbr-gcu1A+MfDOSXAbo9+x6yC5AsgBQLIMUCyCVAsgNQLIPUCyBNAsgrQLIB0CyDSfugm0B2O-FyCwBcgCAXIMgFyBoBcgMoXIDMFyCYAwMSWZHPnhII1FuSI5XINsFVq70LGbzPVst1yCSA3B9w1ceJMjm5BDAiqodbkAcDn75jbJ1Cw9fVu5BQgpj0Z2S9yCJAT3uQdIAl9yBlBcglQXIDUFyD1BcgTQXIK0FyC9hcg3QJ2J-AKBQACgsAAoAgAKDIBQkBQGUDiggwpZUcheMgnUV5JjklKm1AoIwH3pWMPmBrHdjp1W4y88BHgx4fqPXGSTyp0cp+bYu2XKqR1mW0HUHsv2LGOT5Z9CyFc1vV2YH5j8ZxS6DdnvOPSXgoMUAKCVACgNQAoPUAKBNACgrQAoL2AKDdA0s6OYvBQQaL8kJyKlbaurUPo2MW+zwzcS-PsW7LVVY67jdlvB0h7r9yxrk5WcwthWXr2t2u5M6pcXvuPKX4oLkDZ-FBKgxQGoMUCaDFBWgxQDoMUF7DFBugZQXoG7DKBQAygsAMoAgDKDIAygaAPFGWhgxlB8AmOUvFQSaJlBqAU5NSrtU1rH07GPzTbgrzKB3AygkgMoDIFeHGjZJZQH4GUA0Dxy35ji9VROt425bIdZQMMGHrMOrGeT2FiK29d1vTOygcQMN2UBSC8eygWQMoAUDKDFAyglQMoDUDKBNAygrQaoByBbCSR9oHsf+JUCgCVBYAlQBAJUGQCVAZQBKCtJUBwAZZsc5eGgi0UFIzkNK+1bWqfQcZ-MzWlQaKEZ225K82+BAyoDIHeGmjtx8kymUTkP5ZxUOVNVKdX418taHUqAwwCPXv0LDdYz5NcLKK0qA8QfW0bsEHSoAiBZnGlwjcr3fjzS8zvDn3t9KgGoEqB6gSoCaBKgBfw6BKgXsEqBugOoEOgvYGoDQAagagDnJDqGoEYBz6Jxk+EagJQFcVtVQTXmc6XQTy59SA3VTnVFnBl2E8sveoBqAmCUUiXJTqa+jcY49YiwSsfrZZz59nfSgNOgA4cBFaBYAVoAQBYkMlAQwCsHonFIVyQ2lvoPGMFis5juNXgoFWgGQD+FDxdSUalM5ABW8VzlQ1SXVxNVoEDBkdVoDDB9jMU2bNSLJKz+tzbTuwwdWgCIBZcn3PLwX9WgGoFaBugUnElJ76Y8V8VLlY1RXVJNUrVR0OgBwDZcX3DoFaBpSDclPFTVNdWk0k9Dl17B0ga6BDhugBAG6BkAboASQZQboGpRm0RDFKwKcFvE4JBiGUk3JTKG6jNon6XxmhZ7WS9ns4LuTXkH5gRM8VAUAlM1XXUZNWwG6AwwboGT0v9Vw2lMOzKi3StgbG21wdNnTl2TcWgx72F8vfeoG6AmgIAA \ No newline at end of file diff --git a/packages/mugunghwa/sources/fixmap.json b/packages/mugunghwa/sources/fixmap.json deleted file mode 100644 index 516915e..0000000 --- a/packages/mugunghwa/sources/fixmap.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "๋‚˜": ["๋ƒ", "๋‚™", "๋‚ซ", "๋‚ฉ", "๋†”", "๋ƒฅ"], - "๋‚œ": ["๋‚ญ", "๋‚จ", "๋‚ ", "๋†˜", "๋†ฉ"], - "๋‚ด": ["๋„ค", "๋‡Œ", "๋ˆผ"], - "๋‹ค": ["๋‹ฅ", "๋‹ท", "๋Œœ", "๋”ฐ", "๋•จ", "๋‹ต", "๋•"], - "๋‹จ": ["๋”ด", "๋ค", "๋Œ "], - "๋‹ด": ["๋Œฌ", "ํƒ", "๋•€"], - "๋„": ["ํ† ", "๋™", "๋—"], - "๋ผ": ["๋กธ", "๋žด"], - "๋ž˜": ["๋ ˆ", "๋ขฐ"], - "๋ฅ˜": ["๋ฅ™"], - "๋ฆฌ": ["๋ง", "๋ฆ"], - "๋ชจ": ["๋ฌ˜", "๋ญ"], - "๋ฌด": ["๋ฎค", "๋ฏ€"], - "๋ฏธ": ["๋ฏœ", "๋ฎˆ", "๋ซผ"], - "๋ฏผ": ["๋ฐ", "๋ฏ ", "๋ฎŒ", "๋ฎ", "๋ฏฑ"], - "์‚ฌ": ["4", "์‹ธ", "์Œฐ", "์ด", "์†จ"], - "์‚ฐ": ["์‹ผ", "์ƒจ", "์†ฌ", "์ธ"], - "์ƒ": ["์Œ", "์ƒน", "์…", "์†ฝ", "์‰", "์‚ผ", "3"], - "์ƒˆ": ["์„ธ", "์Œ”", "์Ž„"," ์’œ", "์"], - "์ƒ": ["์…", "์Œฉ", "์„•", "์‰ฅ"], - "์„œ": ["์จ", "์Ž ", "์…”", "์ˆด"], - "์„ ": ["์ฌ", "์Žค", "์…˜" ,"์ˆธ"], - "์„ค": ["์ฐ", "์ˆผ", "์’ˆ"], - "์„ฌ": ["์ธ", "์‰„", "์’"], - "์„ฑ": ["์ฝ", "์‰‰", "์’•"], - "์†Œ": ["์˜", "์ˆด", "์’€"], - "์†”": ["์ˆ„", "์ ", "์‘"], - "์†œ": ["์ˆŒ", "์จ", "์‘˜"], - "์†ก": ["์ˆ‘", "์ญ", "์‘"], - "์ˆ˜": ["์Šˆ", "์‘ค", "์“”"], - "์‹œ": ["์‹€", "์‰ฌ", "์”จ", "์”Œ", "์’ธ"], - "์‹ ": ["์‹„", "์‹ฑ", "์”ฌ", "์”", "์”ฝ"], - "์‹ค": ["์‹ˆ", "์‰ด", "์”ฐ", "์””", "์“€"], - "์‹ฌ": ["์‹", "์‰ผ", "์”ธ", "์”œ", "์“ˆ"], - "์•„": ["์•ž", "์••", "์•—", "์™€", "๋งˆ", "๋ซ„", "๋จ€"], - "์•ˆ": ["์™„", "์™•", "์•™", "๋ž€", "๋กผ", "๋งŒ", "๋ซˆ", "๋จ„"], - "์• ": ["์—", "์™œ", "์™ธ", "์›จ", "์•ก", "์•ณ", "์—ฃ"], - "์–‘": ["๋Ÿ‰", "๋จ•"], - "์—ฌ": ["์–ด", "๋ ค", "์›Œ", "๋Ÿฌ", "๋ค„", "๋…€"], - "์—ฐ": ["๋ จ"], - "์˜ˆ": ["์–˜", "๋ก€", "๋Ÿ"], - "์˜ค": ["5"], - "์˜จ": ["์˜น", "์˜ด"], - "์š”": ["๋ฃŒ"], - "์šฐ": ["์›…"], - "์›”": ["๋คŒ"], - "์œ ": ["์œก", "6", "๋‰ด"], - "์œค": ["๋ฅœ", "์œต"], - "์œจ": ["๋ฅ "], - "์€": ["์‘", "์Œ"], - "์ด": ["๋‹ˆ", "2", "์ต", "์˜", "์œ„", "์ž‡"], - "์ผ": ["1", "๋‹", "์œŒ", "์ ", "๋ฐ€", "๋ฏค"], - "์ž„": ["์ž‰"], - "์ •": ["์ก", "์คญ"], - "์ฐจ": ["์งœ"], - "์ฐฝ": ["์งฑ"], - "์ฑ„": ["์ฒด"], - "์ฒœ": ["์ฉ"], - "์ฒจ": ["์ฉœ"], - "์ฒญ": ["์ฉก"], - "์ดˆ": ["์ชผ"], - "์ด": ["์ซ‘"], - "ํ‘œ": ["ํฌ"], - "ํ•˜": ["ํ–", "ํ•ซ", "ํ–ฃ"], - "ํ•œ": ["ํ•ญ", "ํ•จ", "ํ• "], - "ํ•ด": ["ํ—ค", "ํ–‰", "ํ—น"], - "ํ–ฅ": ["ํ– ", "ํ–”"], - "ํ˜„": ["ํ˜•", "ํ˜"], - "ํ˜ผ": ["ํšฌ"], - "ํ™": ["ํšฝ"], - "ํ™”": ["ํ™•", "ํ™ง", "ํ™ฅ", "ํ™ฉ"], - "ํšจ": ["ํšฉ", "ํšป"], - "๋‚จ": ["๋†ค", "๋ƒ "], - "๋ˆˆ": ["๋ˆ™", "๋ˆ”", "๋ˆ„"], - "๋‹ฌ": ["๋จ", "ํƒˆ", "๋”ธ"], - "๋‹น": ["๋•…", "ํƒ•", "๋ต"], - "๋ด„": ["๋ณธ", "๋ด‰", "๋ณด"], - "๋น„": ["ํ”ผ", "์‚"], - "์Šฌ": ["์“ธ", "์ˆ "], - "์—ด": ["๋ ฌ"], - "์˜": ["0", "๋ น", "๋ "], - "์ž": ["์ž‘", "์žฃ", "์žก"], - "ํƒœ": ["ํ…Œ", "ํ‰ค", "ํ‡ด"], - "ํ˜œ": ["ํ–ฌ"] -} \ No newline at end of file diff --git a/packages/mugunghwa/sources/seperatormap.json b/packages/mugunghwa/sources/seperatormap.json deleted file mode 100644 index f18f40b..0000000 --- a/packages/mugunghwa/sources/seperatormap.json +++ /dev/null @@ -1 +0,0 @@ -["๋‹ค์‹œ", "๋Œ€์‹œ", "๋Œ€์‰ฌ", "๋Œ€์‹€"] \ No newline at end of file diff --git a/packages/mugunghwa/src/base-converter.ts b/packages/mugunghwa/src/base-converter.ts deleted file mode 100644 index 38dca6b..0000000 --- a/packages/mugunghwa/src/base-converter.ts +++ /dev/null @@ -1,44 +0,0 @@ -/** - * ๋ณตํ•ฉ ๋‹ค์ง„์ˆ˜๋ฅผ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. - */ -export function decimalBase(maxMatrix: number[], indexMatrix: number[]): number { - let indexDecimal = 0; - for (let i = indexMatrix.length - 1; i >= 0; i--) { - let tempIndex = Number(indexMatrix[i]); - for (let m = i + 1; m < indexMatrix.length; m++) { - tempIndex *= Number(maxMatrix[m]); - } - indexDecimal += tempIndex; - } - return indexDecimal; -} - -/** - * 10์ง„์ˆ˜๋ฅผ ๋ณตํ•ฉ ๋‹ค์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. - */ -export function multipleBase(maxMatrix: number[], indexDecimal: number): number[] { - let temp = Number(indexDecimal); - const result: number[] = []; - for (let i = maxMatrix.length - 1; i >= 0; i--) { - const up = Math.floor(temp / maxMatrix[i]); - const down = temp - maxMatrix[i] * up; - temp = up; - result.push(down); - } - if (temp !== 0) result.push(temp); - result.reverse(); - return result; -} - -/** - * ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ์˜ˆ์ƒ๋˜๋Š” ์ธ์ฝ”๋”ฉ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. - */ -export function expectLength(index: number): number { - let maxLength = 1; - for (;;) { - const fullCase = Math.pow(72, maxLength); - if (index + 1 <= fullCase) break; - maxLength++; - } - return maxLength; -} diff --git a/packages/mugunghwa/src/constants.ts b/packages/mugunghwa/src/constants.ts deleted file mode 100644 index 8ce1e10..0000000 --- a/packages/mugunghwa/src/constants.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * ์••์ถ•๋œ ๊ธ€์ž๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. - */ -export const COMPRESSED_CHAR_MAP = 'hkNhyGwtDYJ02BdNgvTYI82B92wGe2A1OwNZ2AquwLN2A-uwP92A1A4A0DggwOATA4LsDgOIOAEg4CSDgNIOCMg4DGDgKYOA5g4IWDgGEOA7Q4AOhwCdDgG6HAIqOAJUcAGo4ETRwDejgB9HAEGOASMcAUY4BSxwA1jgFbHABOOASccAU44AFxwC7jgH3HAIeOBUCcAUM4F4ZwCIzgHJnAFTOBamcAQs4FxZwDorgBqrgDqrgC6rgKWrgCBrgDxrgLJrgCprgBVrgBUNgBBNgDdNgJ9NgCC9gCJ9gDVDgC+jgIBjgAnjgDsLgDhrQA'; - -/** - * ์••์ถ•๋œ ์ค‘๊ฐ„์ž๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. - */ -export const COMPRESSED_SEPARATOR_WORD = 'idNh2hwAzeg2Q2gDQ0A'; - -/** - * ์••์ถ•๋œ ์ธ์ฝ”๋”ฉ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. - */ -export const COMPRESSED_TABLE = 'hkNgum6F6bkH3bkDPbkBqdxA1ncQFV3ED-dxA1A8QDQPCCDA8IBMDwguwPCAEg8IIyDwgMYPCApg8IDmDwghYPCAYQ8IAOh4IBOh4IBuh4IAlR4IANR4IETR4IAfR4IAgx4IAox4IBSx4IAax4IBWx4IBJx4IApx4IAFx4IB9x4IFQJ4IAoZ4IByZ4IAqZ4IFqZ4IB0V4EANVeBAHVXgQBdV4EBS1eBAEDXgQB414EBZNeBAFTXgQAq14EAKhuBACCbgQBum4EBPpuBAEF7gQBE+4EAaoeBAF9HgQEAx4EAE8eBAHDXAHIbgXvBewBHm3qhe2F60XsAP7t78XtJewBxB3upewBJB3sAaQd66XpZe9l6uXt5egV7hXrFewBFR3ple+V7AG9HepV7VXsASMd6NXp6XqGXomXrmXpWXq2XoOXrOXqAXhneoARGd6bl6nl6gAhZ3qAXFnev5ekFeqFetFenFeoleileulellegVesVepVejVevVek1eq1et1AC0NICF4CFCCFaCFgBZuoU4IX4IWkIUUIXLIXUIUbIXbIV0IWMIUsIXsIVcIW8IXCIV3IWSIXyIWvIU-IUaIWGIUmIXmIVWIWAF3GhbYhYAQ8aFziFiKFKKFbiFniFPiF2KFeKF-iFQSFESF0SFcSFiSFKSF6SFWSFuSFBSFxSFZSFlSF9SFTSFrSFHSFgB2FoXdQAnTcBB71ByBB+BB8NB1BB7BBwhB2hBzLBzNB5hBzhB-hB0RB6RBxRB8tB9RBxtB9tB3RB4xByxB+xB1xB7xB8JB2JB5JBzJB3kQdXkHJRB1UQcNEHbRBz0QdDEHQACccHExB3MQcrEHWxBzDQcHEHZxB0RQcUUHNxB08QcfEHbFBzxQd-EHIJB2iQc4kHRJBxSQd0kHLJB1yQcCkHYpBzKQdKkHGpB3qQcmkHVpBw6Qde0HbowBAXpRQnEBwBAYYQCgEBYBABAQGQEA0BAGUQBmEBMBAHAQHwEAiBAUgQAoEBqBADYQG2EA6BARgQBYEB2BALgQEAHaGQGEEA7hASQQBkEB5BAV4QFUEAfhADQQG0EA9BAQwQEQkATBAcwQCsEBAxAMMQAcEBnBAREQBREA3BATwQB8EBsRAPEQH8EAghAUIQAiEBohAOIQESEAUhAdIQCyEBchAAoQGKEBKhAGoQHqEBWhADoQF7EBukgIY9PAYZwCgcBYHABBwGQcA0HAGVwBmcBMHAHBwHwcAiHAUhwAocBlnAahwA2cBtnAOhwEYcAWHAdhwC4cBeHAaLwAEcBhHAMRwEkcAZHAeRwFecAlHAVRwB+cANHAbRwD0cBDHARDwBMcBzHAKxwEDcBbHABxwGccBEXAFFwDccBPHAHxwGxcA8XAfxwCCcBQnACJwGicA4nARJwBScB0nALJwFycACnAYpwDKcBKnAGpwHqcAmnAVpwA6cBumGYBhiFGcDIe4YEGGZBhhlYYcGGIhhlIYYKGGZZhmoYYNmGbZhkYYYWGGdhhi4YZeGGARhmEYY7mGSRhhkYZ5GGV5hiUYZVGGDRhm0YY9GGQxhkQ4YTGGcxhisYZA2GWxhjDYYHGGZxhkRYYUWGNxhk8YZsWGPFhiCYZQmGCJhmiYY4mGRJhhSYZ0mGLJhlyYYCmGYphjKYZKmGGowx6jDCaMMVowwOjDG6FAEwUBzBQCsFABwUA4gvVgNQWA7BYBKAQNQZAeCNjIBYMgdgyAuDICUBgaUK4rJfTQMMNAsA0AIDQMgNAMw0D4DQEQNApA0AUDQMsNA1A0AbDQNsNAdA0CMDQCwNA7A0BcDQLwNAkg0CUMMGgEwaBzBoCsGgWwaBnBoERGgFEaA3BoE8GgHwaBsRoDxGgfwaAghoFCGgaIaA4hoESGgFIaB0hoCyGgAoaBihoHqGgJoaBWhoF7GgboMoKAyg2DKbYMoWAynYDKLgMpeAyjuDKQwMoTAynMDKKwMoUQyh8DKaIMp0gzGAHMDcdkZjDBmLAGYCAZgyhmJgGYOAZj4BmKQGYFAZjLBmNQGYGwZjbBmHQGYjAZgsBmOwGYXAZjCBmDIGY8gZivBmEoGYqgZg-BmBoGY2gZh6BmIYGYiEZgmBmOYGYVgZi2BmGGGYDgZiIhmCiGYngZg+BmNiGYeIZj+BmEEGYoQZgRBmNEGYcQZgpBmFkGYBQZhlBmJUGY9QZhNBmK0GYHQZi9hmN0TAvQHKYGGJgKAmBYCYAQJgZAmAZQDMwPgTARBMCkEwMsTA1BMAbEwNsTAdBMCMEwCwTA7BMBcEwLwTA0VMACEwMITAdxMCSEwDITA8hMCvEwEoTAqhMA-EwHoTAhhMAmEwOYTAVhMCBkwLYTAYZMAOEwM4TAiJMAokwG4TAnhMA+EwNiTAeJMD+EwEETAoRMAREwNETAcRMCJEwCkTAWRMAFEwMUTAZRMCVEwPUTATRMCtEwB0TAvZMDdBwL0IGOAEA4BlEMnAmAcD4BwEQHA2wcB0BwCwHA7AcBcBwLwHAwgcBiBwJIHAMgcBKBwKoHAhgcCIRwCYHA5gcBWBwIGHAtgcDOBwG4HAngcA+BwNiHAeIcBBBwKEHA0QcBxBwIkHAKQcDpBwFkHAuQcAFBwMUHAZQcBNBwK0HA3RCALCVC5EG+Bhj4CgPgWA+AED4GQPgGUIy+UDvwEQfApB8AUHwMsfA1B8AbHwNsfAjB8AsHwOwfAXB8C8HwNFfAAh8DCHwGIfAdx8CSHwDIfA8h8CvHwEofAqh8A-HwBofA2h8B6HwIYfAiF8AmHwOYfAVh8C2HwGGfADh8DOHwIifAKJ8BuHwJ4fAPh8DYnwHifA-h8BBHwKEfAER8DRHwHEfAiR8ApHwOkfAWR8C5HwAUfAxR8CVHwDUfA9R8BNHwK0fAHR8C9nwN0EgRAhQHjcqnIgUAiCwCIAgIgyAeFEBlEQGYAqKNEFIEQCgRBlhEA2EQbYRA6BEBYEQdgRAuBEAEEQO4RBJBEBkEQeQRBXhECUEQVQRAfhEA0EQPQRBDBEEQkQEwRBzBECsEQQMRBbBEDDEQZwRBEREBREQNwRBPBEB8EQbERA8RECCEQaIRA4hEESEQFIRB0hECyEQXIRAChEGKEQMoRBKhEBqEQeoRAmhEFaEQDoRBexEG6EsDyEN06kAQKQGUYyhWkBwFR3rpAKCkGWKQagpANikG2KQOgpBGCkBYKQdgpAuCkF4KQaKpABCkGEKQMQpA7ikEkKQeQpBXikCUKQVQpAfikA0KQbQpBDCkEQqQEwpBzCkCsKQQMpBbCkDDKQBwpBnCkERKQFEpA3CkE8KQHwpBsSkDxKQfwpAgikFCKQCIpBoikDiKQRIpAUikHSKQLIpBcikAKKQYopAyikEqKQGopB6ikCaKQVopAOikF7KQboVAKC9DVCeLyUNM4UCgBQWAFAEDJImRQTA-WKDLAoBsCg2wKAsAoOwCgXAKDRQoMICgYgKB3AoJICg8gKCvAoEoCgqgKA-AoBoCg2gKB6AoIYCgiEKAmAoOYCgVgKCBgoGGCgDgKDOAoERAoBRAoDcAoE8AoB8AoGxAoDxAoH8AoCCAoFCAoAiAoGiAoDiAoESAoBSAoHSAoCyAoFyAoAKAoGKAoDKAoEqAoBqAoHqAoCaAoFaAoA6AoF7AoG6FWGWBABhmWAQGWGQCEWWBlCmWWBwDo0G25yn2WGoGWA2GWG2GWDoGWEYGWBYGWHYGWC4GWF4GWGimWAEGWGEGWDEGWDuGWEkGWBkGWFeGWCUGWB+GWA0GWD0GWEMGWBMGWHMGWCsGWEDGWFsGWDDGWAcGWGcGWERGWBRGWDcGWE8GWB8GWGxGWDxGWH8GWCCGWFCGWAiGWGiGWDiGWESGWBSGWHSGWCyGWFyGWAKGWGKGWDKGWEqGWBqGWHqGWCaGWFaGWA6GWF7GWG6HWB8jhlzmoCgAwWoFwXwWERlBmTFWoBwAY2oCIF5zkOoA2GoG2GoDoGoEYGoBYGoHYGoC4GoF4GoGimoAEGoGEGoDEGoDuGoEkGoBkGoHkGoFeGoCUGoFUGoB+GoA0GoG0GoD0GoEMGoEQmoBMGoHMGoCsGoEDGoFsGoDDGoGcGoERGoBRGoDcGoE8GoB8GoGxGoDxGoH8GoCCGoFCGoAiGoGiGoDiGoESGoBSGoHSGoCyGoFyGoAKGoGKGoEqGoHqGoCaGoFaGoA6GoF7GoG6A2GAC2B1CvD8gRnzg2CgA2AQDEVSTmQlSY35xnwUM2I2G2A2DoA2EYA2BYA2HYA2C4A2F4A2Gig2AEA2GEA2DEA2DuA2EkA2BkA2HkA2FeA2CUA2FUA2B+A2A0A2G0A2D0A2EMA2EQg2BMA2HMA2CsA2EDA2FsA2DDA2GcA2ERA2BRA2DcA2E8A2B8A2GxA2DxA2H8A2CCA2FCA2AiA2GiA2DiA2ESA2BSA2HSA2CyA2FyA2AKA2GKA2DKA2EqA2BqA2HqA2CaA2FaA2A6A2F7A2G6G2GAF2D1BvACiRkLm2CgG2FgG2AQG2GQAkXSQWSlRHRY1G0FznyUO2JNO2DoG2EYG2BYG2HYG2C4G2F4G2Gim2AEG2GEG2DuG2EkG2BkG2HkG2FeG2CUG2FUG2B+G2A0G2G0G2D0G2EMG2EQm2BMG2HMG2CsG2FsG2AcG2GcG2ERG2BRG2DcG2E8G2B8G2GxG2DxG2H8G2CCG2FCG2AiG2GiG2DiG2ESG2BSG2HSG2CyG2AKG2GKG2DKG2EqG2BqG2HqG2CaG2FaG2A6G2F7G2G6AYANDvCChRjoGGDoCgDoFgDoAQDoGQDoBlCWRlTHToHwHG2F12LNI-LoBYDoHYDoC4DoF4DoGijoAEDoGEDoDEDoDuDoEkDoHkDoFeDoCUDoFUDoB+DoA0DoG0DoEMDoEQjoBMDoHMDoCsDoEDDoFsDoDDDoAcDoGcDoERDoBRDoDcDoE8DoB8DoGxDoDxDoH8DoCCDoAiDoDiDoESDoBSDoHSDoCyDoFyDoAKDoGKDoDKDoEqDoBqDoHqDoCaDoFaDoA6DoF7DoG6GYEYF6AfBCjRmLkYCgEYFgEYAQEYBlBWTlUYBwDY0YCIFF0YAoDUP2K-MYDoEYBYEYHYEYF4EYGikYAEEYEkEYHkEYFeEYCUEYFUEYD0EYEMEYBMEYHMEYCsEYEDEYFsEYDDEYAcEYGcEYEREYBREYDcEYE8EYB8EYGxEYH8EYCCEYFCEYAiEYGiEYDiEYESEYBSEYHSEYCyEYFyEYGKEYDKEYEqEYHqEYCaEYFaEYA6EYF7EYG6DYEOBNCfDCgxlLhYFgBYAQDkUyTWQVQnQ40m3FwXw0MOKtJ-OCthpYHYBYC4BYF4BYGihYAEBYGEBYDEBYDuBYEkBYBkBYHkBYFeBYCUBYFUBYB+BYA0BYG0BYD0BYEMBYEQhYBMBYHMBYCsBYEDBYFsBYDDBYAcBYGcBYERBYBRBYDcBYE8BYB8BYGxBYDxBYH8BYCCBYFCBYAiBYGiBYDiBYESBYBSBYHSBYCyBYFyBYAKBYGKBYDKBYEqBYBqBYHqBYCaBYFaBYA6BYF7BYG6E4GODNBfAiixnLnYCgCwXYAQFIQUWyQ2SVSnS42m0lyXy0OOJtL-NCvhuDvYC4HYF4HYGinYAEHYGEHYDEHYDuHYEkHYBkHYHkHYFeHYCUHYFUHYB+HYA0HYG0HYD0HYEMHYEQnYBMHYHMHYCsHYEDHYFsHYAcHYGcHYERHYBRHYDcHYE8HYB8HYGxHYDxHYH8HYCCHYFCHYAiHYGiHYDiHYESHYBSHYHSHYCyHYFyHYAKHYGKHYDKHYEqHYBqHYHqHYCaHYFaHYA6HYF7HYG6B4FOAtDfCihxkri4CgC4FgC4AQHISUVyS2RVRnR41m2lxXx0NOLtIAvCq4EYFDqQa4F4C4Gii4AEC4GEC4DEC4DuC4EkC4BkC4HkC4FeC4CUC4FUC4B+C4A0C4G0C4D0C4EMC4EQi4BMC4HMC4CsC4EDC4FsC4DDC4AcC4GcC4ERC4BRC4DcC4E8C4B8C4GxC4DxC4H8C4CCC4FCC4AiC4GiC4DiC4ESC4BSC4HSC4CyC4FyC4AKC4GKC4DKC4EqC4BqC4HqC4CaC4FaC4A6C4F7C4G6H4CtDxmrl4AQHyV4BmDVVlz0POIdKAsivDpQd4AEF4GEF4DEF4DuF4EkF4BkF4FeF4CUF4FUF4B+F4G0F4BMF4HMF4EDF4FsF4DDF4AcF4GcF4ERF4BRF4DcF4E8F4GxF4DxF4FCF4GiF4DiF4ESF4BSF4HSF4CyF4FyF4AKF4GKF4DKF4EqF4CaF4FaF4A6F4F7F4G6GimAGil6GiiFFigJmimGGiigGilgGigQGimQGijQGihlGihwAE2iiIHlzXwMJAuiuRsjrQaKeil4GimEGijuGikkGihkGinkGileGiiUGilUGih+Gig0Gim0Gij0GikMGikQmihMGinMGiisGigcGimcGijcGik8Gih8GimxGijxGin8GiiCGilCGimiGijiGikSGihSGinSGiiyGilyGigKGimKGinqGiiaGilaGig6Gil7Gim6AEEHAEBACJlrgECgAEFgAEAQAEGQAEDQAEBlAEBmAEBwCE0VyMJdLAtRujowZKYJYEGigEGEAEDEAEDuAEEkAEBkAEHkAEFeAECUAEFUAEB+AEA0AEG0AED0AEEMAEEQgEBMAEHMAECsAEEDAEFsAEDDAEAcAEGcAEERAEBRAEDcAEE8AEB8AEGxAEDxAEH8AEFCAEAiAEGiAEDiAEESAEBSAECyAEFyAEAKAEGKAEDKAEEqAEBqAEHqAECaAEFaAEA6AEF7AEG6FEGuC-HihJnrmEAQGEGQGEDQGEBlB2R1RE2Vw3xMNuLdIgtjqwbKYzeEDEGEEkGEBkGEHkGEFeGEFUGEB+GEA0GEG0GED0GEEMGEEQmEBMGEHMGEFsGEDDGEAcGEGcGEERGEBRGEDcGEE8GEB8GEGxGEDxGEH8GECCGEFCGEAiGEGiGEDiGEESGEBSGEHSGECyGEFyGEAKGEGKGEDKGEEqGEBqGEHqGECaGEFaGEA6GEF7GEG6AkDECFDEBADJjEGGDECgDEFgDEAQDEDQDEBlDEBmDEEwCXS3zMPuI9LEG2ESrEEYHjpwYqZJbEGili7EHkDEFeDEFUDEB+DEG0DED0DEEMDEEQjEBMDEHMDECsDEEDDEFsDEAcDEGcDEERDEBRDEDcDEE8DEB8DEGxDEDxDEH8DECCDEGiDEDiDEESDEBSDECyDEAKDEGKDEDKDEEqDECaDEFaDEF7DEG6AeESkbjuCgDuFgDuAQDuGQDuDQEKTuBmD1Qk0W3Vx3wsMeK9KguSruEYETrwaqbJazaQ7uGEDuDEDuEkDuFeDuA0DuG0DuEMDuBMDuHMDuCsDuFsDuDDDuAcDuERDuBRDuDcDuE8DuGxDuDxDuH8DuFCDuGiDuDiDuESDuHSDuFyDuAKDuGKDuEqDuHqDuCaDuFaDuA6DuF7DuG6GkEkF6AdGSgpmbkkCgEkFgEkAQEkGQDUQNU1z32ePRuToIZqYpZzZQ-i8kHkEkFeEkCUEkFUEkB+EkA0EkG0EkD0EkEMEkBMEkHMEkFsEkDDEkAcEkGcEkEREkBREkBuBJAngSQD4EkDYhJAeISQP4EkBBBJAoQSQNEEkBxBJAiQSQCkEkDpBJAWQSQAUEkCVBJANQSQPUEkBNBJArQSQL2CeAyAhQqUKmDIAQAyBkARqNdDJlWwyAKANhV4n6TgoyA6AqdIhlSzQ6JcZAYgGQJIBkDyAZASgGQHoBkCGAZAiEGQCYBkDmAZAVgGQLYBkDOAZAbgGQJ4BkA+AZAeIGQP4BkBBAZAoQGQNEBkBxAZAiQGQOkBkBZAZAuQGQAUBkDFAZATQRQC8CdBAR0oNMduPICgDyBYA8gBAPIGQDyA0A8gGUAcnkA4A5M62bXAfnkDLB3iAZBCulUxrp0SGDTeQLwALYYdku8gO4AfykHyBXg8gJQPIFUDyAfg8gDQPIG0DyA9A8gQwPIEQjyATA8gcwPICsDyBAw8gWwPIDDDyAHA8gZwPIERDyAUQ8gNwPIE8DyAfA8gbEPIDxDyB-A8gIIPIFCDyAIg8gaIPIDiDyBEg8gFIPIHSDyAsg8gXIPIAKDyBig8gMoPIEqDyAag8geoPIB8GtB5AHQeQL2HkDdBXgwAECJ3FeBQBXgsAV4AgFeDIBXgaAV4DKDNQKZNsuuI-HYU+JBkkK2NTOmQyaY0tUuR-aoa8CUCvAfgrwDQK8G0CvBDArwEwK8HMCvArArwQMK8FsCvAwwrwBwK8GcCvAUQrwNwK8E8CvAfArwbEK8DxCvAggrwCIK8GiCvA4grwRIK8BSCvB0grwLIK8FyCvACgrwYoK8DKCvBKgrwGoK8HqCvAmgrwVoK8F7CvBugKgT4EoCFBKAQADMbuEoCgBKBsECAJQBQnUQygTkSmfXCfgcLfEQyKFbKrjWzoUMWmdLEtjhyUDCAlAYgJQHcBP61DyRSgH4EoA0BKBtASgPQEoEMBKBEISgEwEoHMBKArASgQMEoFsBKAHASgZwEoERBKAUQSgNwEoE8BKAfASgbEEoDxBKB-ASgCIEoGiBKA4gSgRIEoBSBKB0gSgLIEoFyBKACgSgYoEoEqBKB6gSgJoEoFaBKAOgSgXsEoG6DqBvgqgIUNlCZi9xVACAVQMgFUBoAzkVqLdCpl2yG4z8qgZYL8TDJoVcq+NXOlQzaZls8O6XNHmf3qGqAlAqgH4KoA0CqBtAqgPQKoEMCqBEIqgEwKoHMCqArAqgWwKoDDCqAHAqgZwKoERCqAUQqgNwKoE8CqAfAqgbEKoDxCqB-AqgIIKoFCCqBogqgOIKoESCqB0gqgLIKoFyCqACgqgYoKoDKCqBKgqgGoKoHqCqAmgqgVoKoF7CqBugPwYALlBZg-BhgPwNAD8BlAXIbUPwHAPtmNwX4nC-xCMhhXyo-BGA+dGhh0wrYX9GhlI3MT8G0A-BDAPwEwD8HMA-ArAPwMMD8ERA-AUQPwNwD8E8A-AfAPwbED8DxA-B-APwIID8GiA-A4gPwRID8HSA-AsgPwXID8AKA-BigPwSoD8BqA-B6gPwVoD8A6A-BewPwboACHyhsx+4GgKABoFgAaAEAGgZABoDQAaAZQVyDQJgA0A4ANMh2U3FfhcKAkoyWFQqhoEYCF06GXTDQLwCrZEdsuGgMQGHyv4aAZAzQ6kfmMQkaBtAGgPQBoEMAaBEIGgEwBoHMAaArAGgQMBoFsAaAHAGgZwBoERAaAUQGgNwBoE8AaAfAGgbEBoDxAaB-AGgIIBoFCAaAIgGgaIBoDiAaBEgGgFIBoHSAaAsgGgXIBoAKAaBigGgSoBoBqAaB6gGgJoBoFaAaAOgGgXsBoG6C6BtAvQbQEKEKgcxtAUAbQAgG0A4AtMN+bQMsGBI4ViqxdBhj0xZYkcseEfG-toBkC0jCx2gPQNoEMDaBEI2gEwNoHMDaArA2gQMNoFsDaAww2gZwNoERDaAUQ2gNwNoE8DaAfA2gbENoDxDaB-A2gIINoAiDaBog2gOINoESDaB0g2gXINoAKDaBig2gMoNoEqDaAag2geoNoCaDaBWg2gboECGKhcxh4egWAHoAQB6A0AegGUHcj0A4AdMegUgHfjcKgk4yeFPQHQEJql0mGfTPQLwHy5392hegV4KhNumay9AJgPQOYD0BWA9AgYPQLYD0Bhg9ADgPQM4D0CIg9AKIPQG4D0CeA9APgPQNiD0B4g9AQQPQKED0ARA9A0QPQHED0CJA9AWQPQLkD0AFA9AxQPQGUD0CVA9ANQPQPUD0BNA9ArQPQB0D0C9g9A3QYwCCC9AIRSoPMUeIYFgCGAEAhgZAJomKQPIHUO6PTKdktwP4PC4JBMgRVKrE1y6LDAZoYF4ANsKOhXPHlHwf4KDOh9I0sehP8n3TtZhgPQIYEQiGATAhgcwIYCsCGBAwhgWwIYDDCGAHAhgZwIYERCGAUQhgNwIYE8CGAfAhgbEIYDxCGB-AhgIIIYFCCGAIghgaIIYDiCGBEghgFIIYHSCGAsghgAoIYGKCGAyghgSoIYBqCGB6ghgJoIYFaCGAOghgXsIYG6CIRgAiEIUOVD5jjxEIUARCLAEQjIAnkiETAOdmtxP5ISSZIiuVUQiMBK6bDIZohF4BNsCeiESQN0MQivBEIPwR6brM4WIQTAiEcwIhCsCIRAwiEWwIhDDCIQHAiEZwIhBRCIQ3AiETwIhB8CIRsQiEPEIhH8CIQggiEUIIhGiCIQ4giERIIhHSCIQsgiEXIIhAKCIRigiEMoIhEqCIR6giEJoIhFaCIQOgiEXsIhG6BmAwQPoVCJVAFiTxYEJgWACYAQAmBkA2iUpC8idQHojMl2W3C-i8LQkUyJFSqqTWrocMRmbLFtjR1K5E8Y+T-FQb0MZGVjsJgU56frJHncLalJgcwCYCsAmBAwJgWwCYDDAmAHAJgZwCYERAmAUQJgNwCYE8AmAfAJgbECYDxAmB-AJgIICYFCAmAIgJgaICYDiAmBEgJgFICYHSAmAsgJgXICYAKAmBigJgMoCYEqAmAagJgeoCYCaAmBWgJgDoCYF7AmBugEIaqELGnjwJzAsAcwAgF0TlI3kLqEzNdntxv4fCsJNMmRWqrk1a6XDMZhyzbZ0dyuJPOPi-zUH9DmR1Y3CcFNemGyx5vC+pYSvMCBhzAtgcwGGHMAOBzAzgcwIiHMAohzAbgcwJ4HMA+BzA2IcwHiHMD+BzAQQcwKEHMARBzA0QcwHEHMCJBzAKQcwOkHMBZBzAuQcwAUHMDFBzAZQcwJUHMA1BzA9QcwE0HMCtBzAHQcwL2HMDdBaoIsWeIgisCwArACAKwMgEqQfI3UJ6MzLdkdwf4-C8JDMhRVqqU166PDCZlYF4AdsrAwgMngnysCSANBgw1kfhNCnvTjZE8-hY0uJVWBzAVgQMFYFsBWAwwVgBwFYGcBWBEQVgFEFYDcBWBPAVgHwFYGxBWA8QVgfwFYCCBWBQgVgCIFYGiBWA4gVgRIFYBSBWB0gVgLIFYFyBWACgVgYoFYDKBWBKgVgGoFYHqBWAmgVgVoFYA6BWBewVgboPPEDBQBAwMoM9IGHwD3YAiiJLMoGG2DU1G6fDKZly0DDRQmOgYYQBT0DB3BAwkgesYGFUCBgfgU8wRWmug2BhbAgYBwIGGcCBhEQgYFEIGDcCBhPAgYHwIGGxCBg8QgYfwIGFCCBgIggYaIIGDiCBh0ggYLIIGFyCBgCggYYoIGDKCBhKggYGoIGHqCBgOggYXsPYBhChhsItgEABLEXi2AoAtgWAIYlsAygvkXqC9BZkeyu4giyJHMlRUaq01m6AjGZjy1sDRQWOlXKnknzf5aDRhnIxsYRNsA-Bvp5smecItaXkqM1sG1zbYAcC2BnAtgRELYBRC2A3AtgTwLYB8C2BsQtgPELYH8C2AggtgUILYGiC2A4gtgRILYBSC2B0gtgLILYFyC2ACgtgYoLYDKC2BKgtgGoLYHqC2AmgtgVoLYA6C2BewqJPMq3Wq5hgHAYYFEGGB8BhgIgYYFIGGHSBhgsgTgOEA4CFD4RmoUsVeMggcCwAHACABwDKD+R+obMDgIgJ7j-wOBqADgDYDRVaqM126QjBZgK1q5p8v+kw3kc2NIkOAfgv0hwNoAXniLOl1KnNe5tx0OBnADgREA4BRAOA3ADgTwA4B8AOBsQDgPEA4H8AOAggDgUIA4AiAOBogDgOIA4ESAOAUgDgdIA4Ep0FAHAxQBwGUAcCVAHANQBwPUAcBNAHArQBwL2AcDdBXACIGWOvGcAIBnAyAYxM4BlDOAZgAaK9HZleze4ACERdEgWTortVmandERksyFY9suO9XOnjoOmGtjyJzgH4P9KXmSLaVea5DYdv13OBEQzgFEM4DcDOBPAzgHwM4GxDOA8QzgfwM4CCDOBQgzgCIM4GiDOA4gzgRIM4BSDOB0gzgLIM4FyDOACgzgYoM4DKDOBKgzgeoM4CaDOBWgzgDoM4F7DOBugiIYAMiBjDER2ocsTeIiCgCIhYAiIBAIiGQCmJEQMoAFEGkRA4AHM72X3EASiKYkiyDFTqqzW7piMVmIrRENFB46NcGeGfP-oiBkCzDEQrwdsZRMimAzbZK86RYiEQj0qC1qG7zcdsRBhhDdo+xECiERBuBEQngRED4ERDYhEQeIREP4ERBBBEQoQREBEERDRBEQcQREIkERApBEQ6QREFkERC5BEQBQREMUERBlBEQlQREDUERD1BEQTQREK0ERAdBEQvYREN0BRDAA0QnUBWNvBRBQAUQsAFEMgHMRAoQ0KIHAE5k+z+4QCMRbEiWSYrdV2avdCRmszFYohoofHZrkzyz4AD5hgozsdROinAz7Za82Rb0sZVFr0Nvm07fjuN3j6BDKINwCiE8AogfAKIbECiDxAoh-AKIIICiFCAogIgKIaICiDiAohEgKIFICiHSAogsgKIXICiAKAohigKIMoCiEqAogagKIeoCiCaAohWgKIDoCiG6AYhyI3UJWLvDcBQA3AsANwAgDcDIBLEbgGUG4BmAuZvsgeMAnEVxJlkWKvVTmv3SkYbMJWAnVrizxz5AC9Biw4Ud2NomxTQZjsjefIv6XMqS1mG-zedrcBhhTdk+oQ40bcCeA3APgNwNiDcB4g3A-gNwNEDcBxA3AiQNwCkDcDpA3AWQNwLkDcAFA3AxQNwGUDcCVA3ANQNwPUDcBNA3ArQNwB0DcC9g3A3QbwFiCTCUQVY+8TwFAE8CwBPACATwMgGsSeAZQIKCNG5l+zB4ICCRfEhWTYr9Vuag9GRlsylYDshO7XNnnnxAEGDlhoo3sfRPingznZW8xRYMtZVlrsNl2zwGGHN3T6RDzRgk54B8CeBsQngPEJ4H8CeAggngUIJ4AiCeBogngOIJ4ESCeAUgngdIJ4CyCeBcgngAoJ4GKCeAygngGoJ4HqCeAmgngVoJ4A6CeBewngboH4B8C9AUw1EfqGrB8DDAfAUAHwLAB8AIAfAyAWxLUjBRRoH0Hmf7KHigJJFCSVZDioNWHpyMdmPgXgEOxE6dcOePgO4GAKMGrDxR-YxiYlMhmuyd5yi4ZeyorW4bgt12wnZbtn1iHWjRJ6Mz4GxA+A8QPgfwD4CCA+BQgPgCID4GiA+A4gPgRID4BSA+B0gPgLID4FyA+ACgPgYoD4DKA+BKgPgGoD4HqA+AmgPgVoD4A6A+BewPgboNiGAC4g0wtEQaBrEPjYgEA2IZAPYmxAygIUMaJ9F5nDwwEUixJGslxWGr81R6CjPZjKxHZiduuXPAvhAOxAyB1hkowccxOSnQz3Ze81RaMs5VVr8NoW27diDDDW759Eh9oySdjO-nsQeIbEP4GxBBBsQoQbEBEGxDRBsQcQbEIkGxApBsQ6QbEFkGxC5BsQBQbEMUGxBlBsQlQbEDUGxD1BsQTQbEK0GxAdBsQvYbEN0DxDAACQGYYaFrGPh4goAeIWAHiAQB4hkAjiPEDKChRxoX0PmSPHATSKkk6yPFPEIwHHpKMDmcrMdhJ16488i+UAkwZsOlHDjWJqU2GZ7IPnqLxl3KmtYRvC33a8QYYW3YvqkOdGyT8Z-8zZbxD+A8QQQPEKEDxARA8Q0QPEHEDxCJA8QKQPEOkDxBZA8QuQPEAUDxDFA8QZQPEDUDxD1A8QTQPEK0DxAdA8QvYPEN0ECBEgswjEUaDrH8DDB-AUAfwLAH8DIBnE-gGUDCgTT+AcAfmaPAgQyLkkGyfFcaoLUnoqMjm-gXgFJ36588S+MAswdsP8CvBRx7E9KfDO9n+A9AmiyZbyrrXEbItj2-wGGGX3dGKTiZwC3ZZ2v+Agg-gUIP4AiD+Bog-gRIP4BSD+B0g-gXIP4AKD+Big-gMoP4EqD+Aag-geoP4CaD+BWg-gDoP4F7D+BugIQEkOND1inxXEcKJNAFlByx4kCWRSkk2QEqTVha09NRicynZwCLBQQJQJxMRm+ztF0y-lQ2tI1BAwwjuuQ0EDcDJmHLe1yW0EFCBBAIgQQOIEEESBBAUgQQdIEECyBBBcgQQAoEEGKBBAygQQSoEEBqBBB6gQQJoEEFaBBBewQQboOEDJChAhQk0A2OfFCBQBQgsAUIMgHcShAZQCKFNB+iCyhAiA8eFAjkWpItkhKoQOgKLVnoaMzmCrGdjJ2G5l8rB+w0IEoG4nIzQg2gXRbMsFVNryNr20IGGHX39HQgbgVM6BacsHXpb2d0IBEFCDRBQgcQUIIkFCDpBQgWQUIAUFCDFBQglQUIDUFCD1BQgTQUIK0FCAdBQgvYUIN0CiARBegEQQcNNCNgRBYAEQBABEGQARA0AEQGUEijTQRAiAaBEStNXnpaMLmEQXgBEGiijcIgYgCIJIEOHjjUZZ8-RcKpbWUaIgtgV3ZvqUMRA3A6Z8Cy5aOuy2AHEQaIBEDiARBEgEQFIBEHSARAsgEQXIBEAKARBigEQMoBEHqARAmgEQDoLEApCsRZoJsa+NECgDRBYA0QBANEGQCeJ6kKKDNF+jCzg5k8GBAovSQ7JiVogdASWovR0ZXMlWc7BTuNyF4V8kBNg44YqMnG8Tsp6MwORfMMXzLRVba6jfFve3RAww7u7fSoeGNUnMzkFtyydflvRAggQDzR9EDiDRBEg0QFINEHSDRAsg0QXINEAKDRBig0QMoNEEqDRAag0QeoNECaDRBWg0QRx72GiDdAEg7EeaGbFvhxAUEsAOIAgDiDIBvEcQGUGiizQ-oIsRRRkl2QkqzVpay9PRjcxVYLslOk3EXlXxQF2DThyo6cfxNymYzg5V84xYsvFUdraNiWz7XEDDCe7d9ah0YzSezPQWPLZ1uIP4HzsgPtH3TuIIkDiDpA4gWQOILkDiAFA4gxQOIJUDiA1A4g9QOIE0DiCtA4gHQOIL2DiDdBOIi0e+IkCgCJBYAiQBAIkGQC+JEgMoHNH+iizQ508OBEosyR7JSVZaq9AxnczVZLtpuNfNAQ4POGzjBJ+U7GaHJvmmLllkqrtfRu+2JAww3u-fRofGN0nczsFryxdcVuF2wHuj3pwS8SApBEg6QRIFkESAFBEgxQRIGUESCVBEgNQRIPUESBNBEgrQRIL2ESDdA6QZYbiMtCtiPwUgUAFILABSAIAUgyAfxCkBlAYo80AGGLLDkzx4EyirJPsjJUWry116RjB5iuzU6zcJeGAlIDIEuHqj5xKQVQLjJSDaBzFKQRCNKp7WMbftpO33Yfq0OTGGT+Z+Cz5auvK3i7KQUIPo-6cpA4gPrlIOkBSBZAUguQFIAUBSDFAUglQFIDUBSD1AUgTQFIK0BSAdAUgvYFIN0FWg2xn46QWAOkGQCBJ0gDSGYOkEwBAZs8BBCouyQHJyVlqm9Exk8y1Zrt5uWApwdcM1GLjhJhU-GeHPSB6BLFqy2VX2uY3Jb-t5O-3cfp0PTGmThZxC35Zuuq3DHgzol364PfpAsg6QAoOkGKDpAyg6QSoOkBqDpB6g6QJoOkFaDpAOg6QXsOtDthZAoAWQWAFkAQBZBkAWQGUFigLQgYEsiOXPEQSqKckhyClVasrW3pmMXmOrDdhp0W5ZA7gOAlwbcO1HLjRJhM6xesvlUDrWNgOrIBToD0n7dDMx5k0WaQv+Xbr-gcu1A+MfDOSXAbo9+x6yC5AsgBQLIMUCyCVAsgNQLIPUCyBNAsgrQLIB0CyDSfugm0B2O-FyCwBcgCAXIMgFyBoBcgMoXIDMFyCYAwMSWZHPnhII1FuSI5XINsFVq70LGbzPVst1yCSA3B9w1ceJMjm5BDAiqodbkAcDn75jbJ1Cw9fVu5BQgpj0Z2S9yCJAT3uQdIAl9yBlBcglQXIDUFyD1BcgTQXIK0FyC9hcg3QJ2J-AKBQACgsAAoAgAKDIBQkBQGUDiggwpZUcheMgnUV5JjklKm1AoIwH3pWMPmBrHdjp1W4y88BHgx4fqPXGSTyp0cp+bYu2XKqR1mW0HUHsv2LGOT5Z9CyFc1vV2YH5j8ZxS6DdnvOPSXgoMUAKCVACgNQAoPUAKBNACgrQAoL2AKDdA0s6OYvBQQaL8kJyKlbaurUPo2MW+zwzcS-PsW7LVVY67jdlvB0h7r9yxrk5WcwthWXr2t2u5M6pcXvuPKX4oLkDZ-FBKgxQGoMUCaDFBWgxQDoMUF7DFBugZQXoG7DKBQAygsAMoAgDKDIAygaAPFGWhgxlB8AmOUvFQSaJlBqAU5NSrtU1rH07GPzTbgrzKB3AygkgMoDIFeHGjZJZQH4GUA0Dxy35ji9VROt425bIdZQMMGHrMOrGeT2FiK29d1vTOygcQMN2UBSC8eygWQMoAUDKDFAyglQMoDUDKBNAygrQaoByBbCSR9oHsf+JUCgCVBYAlQBAJUGQCVAZQBKCtJUBwAZZsc5eGgi0UFIzkNK+1bWqfQcZ-MzWlQaKEZ225K82+BAyoDIHeGmjtx8kymUTkP5ZxUOVNVKdX418taHUqAwwCPXv0LDdYz5NcLKK0qA8QfW0bsEHSoAiBZnGlwjcr3fjzS8zvDn3t9KgGoEqB6gSoCaBKgBfw6BKgXsEqBugOoEOgvYGoDQAagagDnJDqGoEYBz6Jxk+EagJQFcVtVQTXmc6XQTy59SA3VTnVFnBl2E8sveoBqAmCUUiXJTqa+jcY49YiwSsfrZZz59nfSgNOgA4cBFaBYAVoAQBYkMlAQwCsHonFIVyQ2lvoPGMFis5juNXgoFWgGQD+FDxdSUalM5ABW8VzlQ1SXVxNVoEDBkdVoDDB9jMU2bNSLJKz+tzbTuwwdWgCIBZcn3PLwX9WgGoFaBugUnElJ76Y8V8VLlY1RXVJNUrVR0OgBwDZcX3DoFaBpSDclPFTVNdWk0k9Dl17B0ga6BDhugBAG6BkAboASQZQboGpRm0RDFKwKcFvE4JBiGUk3JTKG6jNon6XxmhZ7WS9ns4LuTXkH5gRM8VAUAlM1XXUZNWwG6AwwboGT0v9Vw2lMOzKi3StgbG21wdNnTl2TcWgx72F8vfeoG6AmgIAA'; - -/** - * ์••์ถ•๋œ ๋ฌธ์ž๋ณด์ˆ˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. - */ -export const COMPRESSED_FIX_MAP = 'N4IkGQ0gXA2igLDSANCQmQ1JIaob2EqG9gUxvUFOGkAXWUByGqWQWob1AKhvUAKG9QDMb1BKxtOUBaGqkQEkb0gGcb0gHiauIQCdNfQKdN6QO9N6QDjN6QAyt6QBat6QK9N6QIKtEwBdNfQCyt6QCfN6QATNEwC9NfQDTN6QAsL6QAKtEwCPNfQAWL6QJvN6IDrzRKAPu18gB4d6IAt7RKAGe18gBAd6IANHRKAGp18gJqdEoA1nXyAg53ogAmdEoAVXXyAGN3ogArdEoAs3XyAJd3ogAPdEoAf3XyAO93ogBHd6IA-XRKAP918gLA96IAH3eiAMd3ogLnd6ICP3RKANQN8ACzogB9D6IAMw+iAL8PogBWDEoANA3yAP0PogBcD6IA1g+iAH8MSgIMDfICww+iAnwPogFFh9CAXsH0IBIEfQgB6B9AAZgkgAmBviADkH0IAUYfQgBDh9AAAkAOSPoQAIIxJALsDfEAsoPoQCUw+hAKiD6EApkMSQA4g3xABbD6EABcPoQAqg+hACxDEkABIN8QA2w+hACXD6EAGoPoQAcQxJACSDfEADsPoQA8Q+hABEjEkANIN8QAew+hACJD6EACSMSQCMg3xAL7D6EAkkPoQCpIxJADGDfEAG8P89CAAJGJIAUwb4gBAh9CAA+H0IAFEYkgBzBviAGCH0IAL4fQgA0RiSAQsG+IBEIfQgFvh9CAXRGJIAMIb4gAih9CAExH0IAVkYkgB2hviAAaH0IAbIfQgApR9CAGFH0IAOkYkgAOhviAEaH0IBHofQgBpR9CABFH0IBeUYkgBOhviACaH0IAXIfQgAZR9CAFFH0IABkYkgBuhviABaH0IAfIfQgA5R9CAHFH0IAJkYkgBFRviAPVH0IBVUfQgHVR9BAAEx9BAAnO9BABGu9BAAAuiRAAlRvhABEx9BAFUx9BAE1R9BAAD29BAB8O9BABnO9BAAmu9BABAuiRAANRvhAAXR9BAB0x9BAA8x9BAAux9BAENR9BAGdR9BAGPRiRAETRvhAEn29BAFQuiRABvRvhABbR9BABIO9BABmx9BABv29BABBO9BAAFGiRAAfRvhAAoOiRAAgxvhAAzR9BAAEO9BAAX2iRABIxvgAFYJEACjG+EATjH0EAFjGJEAFLG+EAGY6JEABrG+EAUbGJEAFbG+EAGE6JEAAnG+EAQnH0AANnQQAXJokQAScb4QAdTvQQBWcYkQAKcb4QADTokQABcb4QBFcfQQAZcYkQAXcb4QAJpvQAAmdBAFdx9BAA1x9BABBx9BAHDxiRAB9xvgAEZ0EABab0EAGHH0EAA3H0EAAB70EAE+6JEAEPG+EASPGJEAVAm+EAWQn0EAWkmJEAChm+EAHcmJEAXhm+EAR8mJEAERm+EAFpmJEAHJm+EABSmJEACpm+EAHSmJEAWpm+EAQymJEACFm+EAHqmJEAXFm+EARamJEAHRW+EAG+WJEADVW+EABNX0EAa1X0EAYtWJEAHVW+EAW1X0EAC1X0EAA1WJEAF1W+EAE9X0EASNX0EAT9WJEAUtW+EAAtX0EAFNWJEAEDW+EAVDX0EABDWJEAHjW+EAGrWJEAWTW+EAXrWJEAFTW+EAVTX0EAczX0EAUzX0EASzWJEACrW+EASrX0EAbrWJAYGAQEAEsb0EAA4aJEACCa+EATCb0EAFCb0EAECaJEAG6a+EAC+b0EACYX0EADlaJEAT6a+EAUVb0EAVYX0EAV+aJEAEF6+EAD570EASF70EAF56JEAET6+EAHlX0EABIGJEAGqG+EAD5H0EAAiGJEAF9G+EAGg6JEAQDG+AABnQQBODvQQBADokQAE8b4QBE8fQQBi8fQQBC8YkQAdhb4QAZRfQQATJfQQAXxYkQAcNb4QAa1dIABfIA'; - -/** - * ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ํ”Œ๋ž˜๊ทธ - */ -export let isDebug = false; - -/** - * ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ์„ค์ • - */ -export function setDebug(value: boolean): void { - isDebug = value; -} diff --git a/packages/mugunghwa/src/data-loader.ts b/packages/mugunghwa/src/data-loader.ts deleted file mode 100644 index 7232d60..0000000 --- a/packages/mugunghwa/src/data-loader.ts +++ /dev/null @@ -1,94 +0,0 @@ -import * as LZString from 'lz-string'; -import { - COMPRESSED_CHAR_MAP, - COMPRESSED_SEPARATOR_WORD, - COMPRESSED_TABLE, - COMPRESSED_FIX_MAP, -} from './constants.js'; - -/** - * ํ•„ํ„ฐ๋ง ๋˜์ง€ ์•Š์€ 98๊ฐ€์ง€ ๊ธ€์ž ๋ชฉ๋ก์ด ์—ฌ๊ธฐ์— ๋‹ด๊น๋‹ˆ๋‹ค. - */ -export let nonFilteredCharMap: string[] = []; - -/** - * ์ธ์ฝ”๋”ฉ ํ…Œ์ด๋ธ”์ด ์—ฌ๊ธฐ์— ๋‹ด๊น๋‹ˆ๋‹ค. - */ -export let encodeTable: string[] = []; - -/** - * ์˜คํƒ€ ์ •์ •์„ ์œ„ํ•œ ๋ฌธ์ž๋ณด์ˆ˜ ํ…Œ์ด๋ธ”์ด ์—ฌ๊ธฐ์— ๋‹ด๊น๋‹ˆ๋‹ค. - */ -export let charFixMap: Record = {}; - -/** - * ๋‹จ์–ด๋กœ ๊ตฌ์„ฑ๋œ ์ค‘๊ฐ„์ž๊ฐ€ ์—ฌ๊ธฐ์— ๋‹ด๊น๋‹ˆ๋‹ค. - */ -export let separatorWord: string[] = []; - -/** - * ์••์ถ•๋œ ๊ธ€์ž๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. - */ -function loadCharMap(): void { - const parsedCharMap = LZString.decompressFromEncodedURIComponent(COMPRESSED_CHAR_MAP); - if (parsedCharMap) { - nonFilteredCharMap = parsedCharMap.split(''); - } -} - -/** - * ์••์ถ•๋œ ์ค‘๊ฐ„์ž๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. - */ -function loadSeparatorWord(): void { - const parsedSeparatorWord = LZString.decompressFromEncodedURIComponent(COMPRESSED_SEPARATOR_WORD); - if (parsedSeparatorWord) { - let pairSeparatorGroup = ''; - for (let i = 0; i < parsedSeparatorWord.length; i++) { - pairSeparatorGroup += parsedSeparatorWord[i]; - if (pairSeparatorGroup.length === 2) { - separatorWord.push(pairSeparatorGroup); - pairSeparatorGroup = ''; - } - } - } -} - -/** - * ์••์ถ•๋œ ์ธ์ฝ”๋”ฉํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. - */ -function loadEncodeTable(): void { - const parsedTable = LZString.decompressFromEncodedURIComponent(COMPRESSED_TABLE); - if (parsedTable) { - let pairGroup = ''; - for (let i = 0; i < parsedTable.length; i++) { - pairGroup += parsedTable[i]; - if (pairGroup.length === 2) { - encodeTable.push(pairGroup); - pairGroup = ''; - } - } - } -} - -/** - * ์••์ถ•๋œ ๋ฌธ์ž๋ณด์ˆ˜ ํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. - */ -function loadCharFixMap(): void { - const parsedFixMap = LZString.decompressFromEncodedURIComponent(COMPRESSED_FIX_MAP); - if (parsedFixMap) { - charFixMap = JSON.parse(parsedFixMap); - } -} - -/** - * ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. - */ -export function initializeData(): void { - loadCharMap(); - loadSeparatorWord(); - loadEncodeTable(); - loadCharFixMap(); -} - -// ๋ชจ๋“ˆ ๋กœ๋“œ ์‹œ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. -initializeData(); diff --git a/packages/mugunghwa/src/decoder.ts b/packages/mugunghwa/src/decoder.ts deleted file mode 100644 index 0701345..0000000 --- a/packages/mugunghwa/src/decoder.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { isDebug } from './constants.js'; -import { - nonFilteredCharMap, - encodeTable, - charFixMap, - separatorWord, -} from './data-loader.js'; -import { multipleBase, decimalBase } from './base-converter.js'; - -/** - * ๊ธ€์ž๋ฅผ ์ˆœ์„œ ๊ฐ’์œผ๋กœ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. - */ -export function decode(code: string, separator: string = '-'): number | null { - if (code === undefined || code === null || String(code).length === 0) { - return null; - } - - // ๊ตฌ๋ถ„์ž์™€ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•œ ํ›„ ๋ฐฐ์—ดํ™” ํ•ฉ๋‹ˆ๋‹ค. - let decodedCode = String(code) - .split(separator) - .join('') - .split(' ') - .join('') - .split(''); - - let isWrongTypeExist: string | null = null; - - // ๋‘๊ธ€์ž ๋‹จ์œ„๋กœ ๋‹จ์œ„/๋Œ€์‹œ๋ผ๋Š” ๊ตฌ๋ถ„์ž ํ‘œํ˜„์ด - // ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ์žˆ๋‹ค๋ฉด ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. - let separatorDecodedCode = ''; - let pairGroup = ''; - const pairLength = decodedCode.length - (decodedCode.length % 2 === 1 ? 1 : 0); - for (let i = 0; i <= pairLength - 1; i++) { - pairGroup += decodedCode[i]; - if (pairGroup.length === 2) { - const pairGroupStr = String(pairGroup); - if (separatorWord.indexOf(pairGroupStr) !== -1) { - pairGroup = ''; - continue; - } - separatorDecodedCode += pairGroup; - pairGroup = ''; - } - } - // ๋งˆ์ง€๋ง‰ ๋‚จ์€ ์ˆ˜์˜ 72์ง„๋ฒ•์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. - if (decodedCode.length % 2 === 1) { - const lastOne = decodedCode[decodedCode.length - 1]; - separatorDecodedCode += lastOne; - } - - // ๊ตฌ๋ถ„์ž๋ฅผ ์‚ญ์ œํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. - decodedCode = separatorDecodedCode.split(''); - - // ์ž˜๋ชป ์ž…๋ ฅ๋œ ์˜คํƒˆ์ž๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. - for (let n = 0; n <= decodedCode.length - 1; n++) { - // ์ž˜๋ชป๋œ ์˜คํƒˆ์ž๊ฐ€ ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ๊ธ€์ž์˜ ์ˆ˜์ •์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. - if (nonFilteredCharMap.indexOf(decodedCode[n]) === -1) { - isWrongTypeExist = decodedCode[n]; - - // ์˜คํƒˆ์ž ์ˆ˜์ • ๋ชฉ๋ก์„ ์„ ํšŒํ•ฉ๋‹ˆ๋‹ค. - for (const charFixMapIndex of Object.keys(charFixMap)) { - // ์ˆ˜์ •๊ฐ€๋Šฅํ•œ ๊ธ€์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. - let fixableType: string | null = null; - for (const charFixMapValue of charFixMap[charFixMapIndex]) { - if (charFixMapValue === decodedCode[n]) { - fixableType = charFixMapIndex; - break; - } - } - - // ์ˆ˜์ •๊ฐ€๋Šฅํ•œ ๊ธ€์ž๊ฐ€ ์žˆ๋‹ค๋ฉด - // ์ˆ˜์ •ํ•œ ํ›„ ๋‹ค์Œ ๊ธ€์ž๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. - if (fixableType !== null) { - isWrongTypeExist = null; - decodedCode[n] = fixableType; - break; - } - } - } - } - - if (isWrongTypeExist !== null) { - // ๋””๋ฒ„๊น… ๋ชจ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ๋ƒฅ null์„ ๋ฐ˜ํ™˜์‹œํ‚ต๋‹ˆ๋‹ค. - if (!isDebug) return null; - - // ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜คํƒˆ์ž๊ฐ€ ์กด์žฌํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. - throw new Error( - `Unrecognized code: ${code}\nWrong Typo: ${isWrongTypeExist}` - ); - } - - // ํ•ด์„๋œ 72์ง„๋ฒ• ๋ฐฐ์—ด์ด ์—ฌ๊ธฐ์— ๋‹ด๊น๋‹ˆ๋‹ค. - let decodedMatrix: number[] = []; - - // ์ง์ˆ˜๋‹จ์œ„ ์ธ์ฝ”๋”ฉ์„ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค. - pairGroup = ''; - const pairLength2 = decodedCode.length - (decodedCode.length % 2 === 1 ? 1 : 0); - for (let i = 0; i <= pairLength2 - 1; i++) { - pairGroup += decodedCode[i]; - if (pairGroup.length === 2) { - const pairIndex = encodeTable.indexOf(pairGroup); - - // 84์ง„๋ฒ• ์‚ฌ์ „์—์„œ ํ™•์ธ๋˜์ง€ ์•Š๋Š” ๋‹จ์–ด๊ฐ€ ๋ฐœ๊ฒฌ๋  ์‹œ - // ์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋กœ ๊ฐ„์ฃผํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. - if (pairIndex === -1) { - // ๋””๋ฒ„๊น… ๋ชจ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ๋ƒฅ null์„ ๋ฐ˜ํ™˜์‹œํ‚ต๋‹ˆ๋‹ค. - if (!isDebug) return null; - - throw new Error( - `Unrecognized code: ${code}\nWrong Format: ${pairGroup}` - ); - } - - const pairMatrix = multipleBase([72, 72], pairIndex); - - decodedMatrix = decodedMatrix.concat(pairMatrix); - pairGroup = ''; - } - } - - // ๋งˆ์ง€๋ง‰ ๋‚จ์€ ์ˆ˜์˜ 72์ง„๋ฒ•์„ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค. - if (decodedCode.length % 2 === 1) { - const lastOne = [ - nonFilteredCharMap.indexOf(decodedCode[decodedCode.length - 1]), - ]; - decodedMatrix = decodedMatrix.concat(lastOne); - } - - // ์ตœ๋Œ€ ๊ฐ’ ๋ฒ”์œ„ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. - const max: number[] = []; - for (let i = 0; i <= decodedMatrix.length - 1; i++) { - max.push(72); - } - - // 10์ง„์ˆ˜ ์ƒ‰์ธ๋ฒˆํ˜ธ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. - const decodedIndex = decimalBase(max, decodedMatrix); - - return decodedIndex; -} diff --git a/packages/mugunghwa/src/encoder.ts b/packages/mugunghwa/src/encoder.ts deleted file mode 100644 index df21572..0000000 --- a/packages/mugunghwa/src/encoder.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { nonFilteredCharMap, encodeTable } from './data-loader.js'; -import { multipleBase, decimalBase, expectLength } from './base-converter.js'; - -/** - * ์ˆœ์„œ ๊ฐ’์„ ๊ธ€์ž๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. - */ -export function encode(index: number, separator: string = '-'): string | null { - // ์ˆซ์ž๊ฐ€ ์•„๋‹Œ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. - // (์Œ์ˆ˜์™€ ์†Œ์ˆ˜์  ์ˆซ์ž ๋˜ํ•œ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.) - if ( - index === null || - index === undefined || - isNaN(index) || - index < 0 || - index % 1 !== 0 - ) { - return null; - } - - // ์ธ์ฝ”๋”ฉ ๋˜๋Š” ๊ธ€์ž๊ธธ์ด ํ™•์ธ - const maxLength = expectLength(index); - - // ๊ณ ์ •๋ฒ”์œ„ ๋ฐฐ์—ด ์ƒ์„ฑ - const max: number[] = []; - for (let i = 0; i < maxLength; i++) { - max.push(72); - } - - // 10์ง„์ˆ˜๋ฅผ ๋‹ค์ง„์ˆ˜ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ - const matrix = multipleBase(max, index); - - let pairEncodedWord = ''; - - // ์ธ์ฝ”๋”ฉ ์‹œ์ž‘ - if (max.length === 1) { - // ์ธ์ฝ”๋”ฉ ๋˜๋Š” ์ž๋ฆฟ์ˆ˜๊ฐ€ 1๊ฐœ์ผ๋• 72์ง„๋ฒ• ๊ทธ๋Œ€๋กœ ์ ์šฉ - pairEncodedWord += nonFilteredCharMap[matrix[0]]; - } else { - // 2๊ฐœ์”ฉ ๋ชจ์•„์„œ 10์ง„ํ™” ํ•œ ํ›„ ์ธ์ฝ”๋”ฉ ์ ์šฉ - const pairGroupLength = maxLength - (maxLength % 2); - let pairGroup: number[] = []; - for (let i = 0; i < pairGroupLength; i++) { - pairGroup.push(matrix[i]); - if (pairGroup.length === 2) { - const pairIndex = decimalBase([72, 72], pairGroup); - - // ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด null ์ฒ˜๋ฆฌ - if (typeof encodeTable[pairIndex] === 'undefined') { - return null; - } - pairEncodedWord += encodeTable[pairIndex]; - pairGroup = []; - } - } - - // ๋งˆ์ง€๋ง‰ ํ•˜๋‚˜๊ฐ€ ๋‚จ์œผ๋ฉด ๋‚จ์€ ์ˆ˜๋Š” 72์ง„๋ฒ• ๊ทธ๋Œ€๋กœ ์ ์šฉ - if (maxLength % 2 === 1) { - const lastOne = matrix[matrix.length - 1]; - if (typeof nonFilteredCharMap[lastOne] === 'undefined') { - return null; - } - pairEncodedWord += nonFilteredCharMap[lastOne]; - } - } - - // ์ฝ”๋“œ๋ฅผ ์ชผ๊ฐ  ํ›„ ๊ตฌ๋ถ„์ž๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. - const code: string[] = []; - for (let i = 0; i <= pairEncodedWord.length - 1; i++) { - code.push(pairEncodedWord[i]); - if (pairEncodedWord.length - 1 !== i && (i + 1) % 2 === 0) { - code.push(separator); - } - } - return code.join(''); -} diff --git a/packages/mugunghwa/src/index.ts b/packages/mugunghwa/src/index.ts deleted file mode 100644 index 34eb117..0000000 --- a/packages/mugunghwa/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Initialize data on module load -import './data-loader.js'; - -// Public API exports -export { encode } from './encoder.js'; -export { decode } from './decoder.js'; -export { decimalBase, multipleBase, expectLength } from './base-converter.js'; -export { setDebug } from './constants.js'; diff --git a/packages/mugunghwa/test/mugunghwa.test.ts b/packages/mugunghwa/test/mugunghwa.test.ts deleted file mode 100644 index bd61a62..0000000 --- a/packages/mugunghwa/test/mugunghwa.test.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { encode, decode, decimalBase, multipleBase, expectLength } from '../src/index'; - -describe('mugunghwa', () => { - describe('encode', () => { - it('should encode a number to a string', () => { - const result = encode(0); - expect(result).toBeTruthy(); - expect(typeof result).toBe('string'); - }); - - it('should encode small numbers correctly', () => { - const result = encode(1); - expect(result).toBeTruthy(); - }); - - it('should return null for negative numbers', () => { - const result = encode(-1); - expect(result).toBeNull(); - }); - - it('should return null for decimal numbers', () => { - const result = encode(1.5); - expect(result).toBeNull(); - }); - - it('should return null for NaN', () => { - const result = encode(NaN); - expect(result).toBeNull(); - }); - - it('should encode large numbers', () => { - const result = encode(1000000); - expect(result).toBeTruthy(); - expect(typeof result).toBe('string'); - }); - - it('should use custom separator', () => { - const result = encode(100, '_'); - expect(result).toBeTruthy(); - if (result && result.length > 2) { - expect(result.includes('_')).toBe(true); - } - }); - }); - - describe('decode', () => { - it('should decode an encoded string back to the original number', () => { - const original = 12345; - const encoded = encode(original); - expect(encoded).toBeTruthy(); - if (encoded) { - const decoded = decode(encoded); - expect(decoded).toBe(original); - } - }); - - it('should handle encode-decode cycle for various numbers', () => { - const testNumbers = [0, 1, 10, 100, 1000, 10000, 100000]; - testNumbers.forEach(num => { - const encoded = encode(num); - expect(encoded).toBeTruthy(); - if (encoded) { - const decoded = decode(encoded); - expect(decoded).toBe(num); - } - }); - }); - - it('should return null for empty string', () => { - const result = decode(''); - expect(result).toBeNull(); - }); - - it('should return null for null input', () => { - const result = decode(null as any); - expect(result).toBeNull(); - }); - - it('should decode with custom separator', () => { - const original = 100; - const encoded = encode(original, '_'); - expect(encoded).toBeTruthy(); - if (encoded) { - const decoded = decode(encoded, '_'); - expect(decoded).toBe(original); - } - }); - }); - - describe('decimalBase', () => { - it('should convert multiple base to decimal', () => { - const result = decimalBase([10, 10], [1, 5]); - expect(result).toBe(15); - }); - - it('should handle single digit', () => { - const result = decimalBase([10], [5]); - expect(result).toBe(5); - }); - }); - - describe('multipleBase', () => { - it('should convert decimal to multiple base', () => { - const result = multipleBase([10, 10], 15); - expect(result).toEqual([1, 5]); - }); - - it('should handle single digit', () => { - const result = multipleBase([10], 5); - expect(result).toEqual([5]); - }); - }); - - describe('expectLength', () => { - it('should calculate expected length for small numbers', () => { - const result = expectLength(0); - expect(result).toBe(1); - }); - - it('should calculate expected length for larger numbers', () => { - const result = expectLength(100); - expect(result).toBeGreaterThan(1); - }); - }); -}); diff --git a/packages/mugunghwa/tsconfig.json b/packages/mugunghwa/tsconfig.json deleted file mode 100644 index c046f52..0000000 --- a/packages/mugunghwa/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - } -} diff --git a/packages/patternly/.eslintignore b/packages/patternly/.eslintignore deleted file mode 100644 index 4eb56dc..0000000 --- a/packages/patternly/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -lib/* \ No newline at end of file diff --git a/packages/patternly/.eslintrc.js b/packages/patternly/.eslintrc.js deleted file mode 100644 index aac9485..0000000 --- a/packages/patternly/.eslintrc.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', - extends: [ - 'plugin:react/recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier/@typescript-eslint', - 'plugin:prettier/recommended' - ], - plugins: ['@typescript-eslint', 'react', 'react-hooks', 'prettier'], - ignorePatterns: ['build/*'], - rules: { - 'no-console': 'warn', - 'react/react-in-jsx-scope': 'off', - 'react/prop-types': 'off', - '@typescript-eslint/no-empty-function': 'warn', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/ban-ts-comment': 'off' - }, - settings: { - react: { - version: 'latest' - } - } -} diff --git a/packages/patternly/.github/workflows/test.yml b/packages/patternly/.github/workflows/test.yml deleted file mode 100644 index f85cac9..0000000 --- a/packages/patternly/.github/workflows/test.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Test Suite - -on: [push] - -jobs: - test: - name: Test on node ${{ matrix.node_version }} and ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - node_version: ['12', '14'] - os: [ubuntu-latest, windows-latest, macOS-latest] - - steps: - - uses: actions/checkout@v1 - - name: Use Node.js ${{ matrix.node_version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node_version }} - - - name: npm install, build and test - run: | - npm install - npm test - env: - CI: true \ No newline at end of file diff --git a/packages/patternly/.gitignore b/packages/patternly/.gitignore deleted file mode 100644 index ad46b30..0000000 --- a/packages/patternly/.gitignore +++ /dev/null @@ -1,61 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -# next.js build output -.next diff --git a/packages/patternly/.prettierrc.js b/packages/patternly/.prettierrc.js deleted file mode 100644 index c879283..0000000 --- a/packages/patternly/.prettierrc.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - trailingComma: 'none', - tabWidth: 2, - semi: false, - singleQuote: true, - useTabs: false, - printWidth: 80, - bracketSpacing: true, - arrowParens: 'always', - endOfLine: 'auto', - vueIndentScriptAndStyle: false -} diff --git a/packages/patternly/LICENSE b/packages/patternly/LICENSE deleted file mode 100644 index 9df657e..0000000 --- a/packages/patternly/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 hmmhmmhm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/patternly/README.md b/packages/patternly/README.md deleted file mode 100644 index 94a2862..0000000 --- a/packages/patternly/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# patternly - -[![Wiki](https://img.shields.io/badge/๐Ÿ“–_Wiki-deepwiki-blue)](https://deepwiki.com/hmmhmmhm/node-packages) - -> ๐Ÿค›๐Ÿป Regular Expression Data Grabber - -![Github Workflow](https://github.com/hmmhmmhm/node-packages/actions/workflows/test.yml/badge.svg) -![GitHub License](https://img.shields.io/github/license/hmmhmmhm/node-packages) -![Jest Coverage](https://raw.githubusercontent.com/hmmhmmhm/node-packages/main/badges/badge-lines.svg) -![Gzip Size](https://img.badgesize.io//hmmhmmhm/node-packages/main/packages/patternly/export/patternly.js.svg?compression=gzip) -[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) -![NPM Version](https://img.shields.io/npm/v/patternly.svg?label=version) -![jsDelivr](https://badgen.net/jsdelivr/v/npm/patternly) -[![AMA](https://img.shields.io/badge/Ask%20me-anything-1abc9c.svg)](https://twitter.com/hmartapp) - -Patternly simplifies the process of parsing string patterns using regular expressions. - -
- -## ๐Ÿ“ฆ Usage (ES5+) - -```bash -npm i patternly -``` - -```ts -import patternGrab from 'patternly' - -// Data -const regex = /<[^>]*>/gm -const string = `Yup This is a Test Yea Its Ok?` - -// Pattern Grab -const { data, positions } = patternGrab({ regex, string }) - - -// The HTML tag strings are grabbed. -data === [ - "", - "Yup This is a ", - "", - "Test", - "", - " Yea ", - '', - " Its Ok?", - "", -]; - -// Actually matched elements position are grabbed. -positions === [0, 2, 4, 6, 8] - -// It is easy to handle because it is placed with other strings. -data.forEach((element, index) => { - if(positions.includes(index)){ - // HTML Tag - } else { - // Plain text - } -}) -``` - -
- -## ๐Ÿ“ฆ Usage (CDN) - -```html - -``` - -```js -var patternGrab = window.patternGrab - -// Pattern Grab -var grab = patternGrab({ - regex: /<[^>]*>/gm, - string: `Yup This is a Test Yea Its Ok?` -}) - -// The HTML tag strings are grabbed. -grab.data == [ - "", - "Yup This is a ", - "", - "Test", - "", - " Yea ", - '', - " Its Ok?", - "", -]; - -// Actually matched elements position are grabbed. -grab.positions == [0, 2, 4, 6, 8] - -// It is easy to handle because it is placed with other strings. -for(index in grab.data){ - var element = grab.data[index] - if(grab.positions.indexOf(index) != -1){ - // HTML Tag - } else { - // Plain text - } -} -``` - -
- -## ๐Ÿ’ก License - -MIT Licensed. - diff --git a/packages/patternly/badges/badge-branches.svg b/packages/patternly/badges/badge-branches.svg deleted file mode 100644 index d557f47..0000000 --- a/packages/patternly/badges/badge-branches.svg +++ /dev/null @@ -1 +0,0 @@ -Coverage:branches: 92.85%Coverage:branches92.85% \ No newline at end of file diff --git a/packages/patternly/badges/badge-functions.svg b/packages/patternly/badges/badge-functions.svg deleted file mode 100644 index 2e2ab86..0000000 --- a/packages/patternly/badges/badge-functions.svg +++ /dev/null @@ -1 +0,0 @@ -Coverage:functions: 100%Coverage:functions100% \ No newline at end of file diff --git a/packages/patternly/badges/badge-lines.svg b/packages/patternly/badges/badge-lines.svg deleted file mode 100644 index 5014fb5..0000000 --- a/packages/patternly/badges/badge-lines.svg +++ /dev/null @@ -1 +0,0 @@ -Coverage:lines: 100%Coverage:lines100% \ No newline at end of file diff --git a/packages/patternly/badges/badge-statements.svg b/packages/patternly/badges/badge-statements.svg deleted file mode 100644 index 00172de..0000000 --- a/packages/patternly/badges/badge-statements.svg +++ /dev/null @@ -1 +0,0 @@ -Coverage:statements: 100%Coverage:statements100% \ No newline at end of file diff --git a/packages/patternly/export/patternly.js b/packages/patternly/export/patternly.js deleted file mode 100644 index b7526fc..0000000 --- a/packages/patternly/export/patternly.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.patternGrab=t():e.patternGrab=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="./dist",n(n.s=0)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.patternGrab=t.getPositions=void 0;t.getPositions=function(e,t){for(var n=null,r=[],o=new RegExp(e);null!==(n=o.exec(t));)r.push([n.index,n.index+n[0].length]);return r};t.patternGrab=function(e){var n=e.regex,r=e.string,o=t.getPositions(n,r),u=[],i=[];if(0===o.length)return{data:u,positions:i};if(0!==o[0][0]){var s=o.shift();u.push(r.substr(0,s[0])),i.push(u.length),u.push(r.substr(s[0],s[1]-s[0]))}for(var f in o){var a=o[f],l=o[Number(f)+1];i.push(u.length),u.push(r.substr(a[0],a[1]-a[0])),l&&a[1]!=l[0]&&u.push(r.substr(a[1],l[0]-a[1]))}if(o[o.length-1]){var p=o[o.length-1][1];p!==r.length&&u.push(r.substr(p,r.length-p))}return{data:u,positions:i}},t.default=t.patternGrab}]).default})); \ No newline at end of file diff --git a/packages/patternly/jest.config.js b/packages/patternly/jest.config.js deleted file mode 100644 index 3b1932f..0000000 --- a/packages/patternly/jest.config.js +++ /dev/null @@ -1,29 +0,0 @@ -export default { - preset: 'ts-jest/presets/default-esm', - extensionsToTreatAsEsm: ['.ts'], - moduleNameMapper: { - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - transform: { - '^.+\\.ts$': [ - 'ts-jest', - { - useESM: true, - }, - ], - }, - testRegex: '(/test/.*|(\\.|/)(test|spec))\\.(ts?)$', - testPathIgnorePatterns: ['/lib/', '/node_modules/'], - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - collectCoverage: true, - coverageReporters: ['json-summary'], - coveragePathIgnorePatterns: ['/node_modules/'], - coverageThreshold: { - global: { - branches: 92.85, - functions: 100, - lines: 100, - statements: 100 - } - } -} diff --git a/packages/patternly/package.json b/packages/patternly/package.json deleted file mode 100644 index c3ccc8c..0000000 --- a/packages/patternly/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "patternly", - "type": "module", - "version": "1.0.0", - "description": "๐Ÿค›๐Ÿป Regular Expression Data Grabber", - "source": "src/index.ts", - "exports": { - "types": "./dist/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/index.d.ts", - "scripts": { - "test": "jest --env=node --colors && jest-coverage-badges --output './badges'", - "build": "microbundle", - "watch": "microbundle watch" - }, - "keywords": [ - "typescript", - "pattern", - "pattern-matching", - "regex", - "regexp", - "regexp-match", - "regular-expression", - "string", - "crawling", - "parse", - "parser", - "scraping", - "grab", - "grabber" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/patternly" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/patternly#readme", - "devDependencies": { - "@types/jest": "^30.0.0", - "@types/node": "^24.9.2", - "jest": "^30.2.0", - "jest-coverage-badges": "^1.1.2", - "microbundle": "^0.15.1", - "ts-jest": "^29.4.5", - "typescript": "^5.9.3" - } -} diff --git a/packages/patternly/src/index.ts b/packages/patternly/src/index.ts deleted file mode 100644 index e8d259e..0000000 --- a/packages/patternly/src/index.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Returns position values with strings - * matching the regular expression. - */ -export const getPositions = (regex: RegExp, string: string) => { - let m: RegExpExecArray | null = null - const positions: [number, number][] = [] - const pattern = new RegExp(regex.source, regex.flags) - while ((m = pattern.exec(string)) !== null) { - positions.push([m.index, m.index + m[0].length]) - // Prevent infinite loop on zero-width matches - if (m[0].length === 0) { - pattern.lastIndex++ - } - } - return positions -} - -/** - * It returns array that includes string of match - * the regular expression with not matched string. - * - * @returns - * - data - Well-bundled array of strings. - * - position - It is index array of elements matching regular expressions during string arrays. - */ -export const patternGrab = ({ - regex, - string -}: { - regex: RegExp - string: string -}) => { - const matches = getPositions(regex, string) - - const data: string[] = [] - const positions: number[] = [] - - if (matches.length > 0) { - if (matches[0][0] !== 0) { - data.push(string.substring(0, matches[0][0])) - } - - for (let matchIndex = 0; matchIndex < matches.length; matchIndex++) { - const current = matches[matchIndex] - positions.push(data.length) - const matchedText = string.substring(current[0], current[1]) - data.push(matchedText) - - if (matchIndex + 1 < matches.length) { - const nextMatch = matches[matchIndex + 1] - if (current[1] !== nextMatch[0]) { - data.push(string.substring(current[1], nextMatch[0])) - } - } - } - - if (matches[matches.length - 1]) { - const lastMatchIndex = matches[matches.length - 1][1] - if (lastMatchIndex !== string.length) { - data.push(string.substring(lastMatchIndex, string.length)) - } - } - } - - return { data, positions } -} - -export default patternGrab diff --git a/packages/patternly/temp-build/index.d.ts b/packages/patternly/temp-build/index.d.ts deleted file mode 100644 index 9e2fb6e..0000000 --- a/packages/patternly/temp-build/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Returns position values with strings - * matching the regular expression. - */ -export declare const getPositions: (regex: RegExp, string: string) => [number, number][]; -/** - * It returns array that includes string of match - * the regular expression with not matched string. - * - * @returns - * - data - Well-bundled array of strings. - * - position - It is index array of elements matching regular expressions during string arrays. - */ -export declare const patternGrab: ({ regex, string }: { - regex: RegExp; - string: string; -}) => { - data: string[]; - positions: number[]; -}; -export default patternGrab; diff --git a/packages/patternly/temp-build/index.js b/packages/patternly/temp-build/index.js deleted file mode 100644 index d985aec..0000000 --- a/packages/patternly/temp-build/index.js +++ /dev/null @@ -1,58 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.patternGrab = exports.getPositions = void 0; -/** - * Returns position values with strings - * matching the regular expression. - */ -var getPositions = function (regex, string) { - var m = null; - var positions = []; - var pattern = new RegExp(regex.source, regex.flags); - while ((m = pattern.exec(string)) !== null) { - positions.push([m.index, m.index + m[0].length]); - // Prevent infinite loop on zero-width matches - if (m[0].length === 0) { - pattern.lastIndex++; - } - } - return positions; -}; -exports.getPositions = getPositions; -/** - * It returns array that includes string of match - * the regular expression with not matched string. - * - * @returns - * - data - Well-bundled array of strings. - * - position - It is index array of elements matching regular expressions during string arrays. - */ -var patternGrab = function (_a) { - var regex = _a.regex, string = _a.string; - var matches = (0, exports.getPositions)(regex, string); - var data = []; - var positions = []; - if (matches.length === 0) { - return { data: data, positions: positions }; - } - if (matches[0][0] !== 0) { - data.push(string.substring(0, matches[0][0])); - } - for (var matchIndex = 0; matchIndex < matches.length; matchIndex++) { - var current = matches[matchIndex]; - var next = matches[matchIndex + 1]; - positions.push(data.length); - data.push(string.substring(current[0], current[1])); - if (next && current[1] != next[0]) { - data.push(string.substring(current[1], next[0])); - } - } - if (matches[matches.length - 1]) { - var lastMatchIndex = matches[matches.length - 1][1]; - if (lastMatchIndex !== string.length) - data.push(string.substring(lastMatchIndex, string.length)); - } - return { data: data, positions: positions }; -}; -exports.patternGrab = patternGrab; -exports.default = exports.patternGrab; diff --git a/packages/patternly/test/edge-cases.test.ts b/packages/patternly/test/edge-cases.test.ts deleted file mode 100644 index 37a0523..0000000 --- a/packages/patternly/test/edge-cases.test.ts +++ /dev/null @@ -1,404 +0,0 @@ -import patternGrab, { getPositions } from '../src/index' - -describe('Edge Cases and Boundary Conditions', () => { - describe('Empty and Null-like Inputs', () => { - it('should handle empty string input', () => { - const result = patternGrab({ regex: /test/g, string: '' }) - expect(result.data).toEqual([]) - expect(result.positions).toEqual([]) - }) - - it('should handle pattern that matches empty string', () => { - const result = patternGrab({ regex: /a*/g, string: 'bbb' }) - // This will match empty strings between characters - expect(result.data.length).toBeGreaterThan(0) - }) - - it('should handle whitespace-only string', () => { - const result = patternGrab({ regex: /\s+/g, string: ' ' }) - expect(result.data).toEqual([' ']) - expect(result.positions).toEqual([0]) - }) - - it('should handle newline-only string', () => { - const result = patternGrab({ regex: /\n/g, string: '\n\n\n' }) - expect(result.data).toEqual(['\n', '\n', '\n']) - expect(result.positions).toEqual([0, 1, 2]) - }) - }) - - describe('Single Character Scenarios', () => { - it('should handle single character string that matches', () => { - const result = patternGrab({ regex: /a/g, string: 'a' }) - expect(result.data).toEqual(['a']) - expect(result.positions).toEqual([0]) - }) - - it('should handle single character string that does not match', () => { - const result = patternGrab({ regex: /b/g, string: 'a' }) - expect(result.data).toEqual([]) - expect(result.positions).toEqual([]) - }) - - it('should handle single character pattern in long string', () => { - const result = patternGrab({ regex: /x/g, string: 'axbxcxd' }) - expect(result.data).toEqual(['a', 'x', 'b', 'x', 'c', 'x', 'd']) - expect(result.positions).toEqual([1, 3, 5]) - }) - }) - - describe('Boundary Matches', () => { - it('should handle match at very start', () => { - const result = patternGrab({ regex: /^START/g, string: 'START of text' }) - expect(result.data).toEqual(['START', ' of text']) - expect(result.positions).toEqual([0]) - }) - - it('should handle match at very end', () => { - const result = patternGrab({ regex: /END$/g, string: 'text END' }) - expect(result.data).toEqual(['text ', 'END']) - expect(result.positions).toEqual([1]) - }) - - it('should handle word boundary matches', () => { - const result = patternGrab({ regex: /\bword\b/g, string: 'word sword words' }) - expect(result.data).toContain('word') - expect(result.positions).toEqual([0]) - }) - - it('should handle entire string match', () => { - const result = patternGrab({ regex: /^.*$/g, string: 'entire string' }) - expect(result.data).toEqual(['entire string']) - expect(result.positions).toEqual([0]) - }) - }) - - describe('Special Characters and Escaping', () => { - it('should handle special regex characters in text', () => { - const text = 'Price: $100 (sale)' - const result = patternGrab({ regex: /\$\d+/g, string: text }) - expect(result.data).toContain('$100') - }) - - it('should handle backslashes in text', () => { - const text = 'Path: C:\\Users\\Test' - const result = patternGrab({ regex: /\\/g, string: text }) - expect(result.positions).toHaveLength(2) - }) - - it('should handle quotes in text', () => { - const text = 'Say "hello" and \'world\'' - const result = patternGrab({ regex: /["']/g, string: text }) - expect(result.positions).toHaveLength(4) - }) - - it('should handle parentheses in text', () => { - const text = 'Math: (a + b) * (c + d)' - const result = patternGrab({ regex: /\([^)]+\)/g, string: text }) - expect(result.data).toContain('(a + b)') - expect(result.data).toContain('(c + d)') - }) - - it('should handle brackets in text', () => { - const text = 'Array: [1, 2, 3]' - const result = patternGrab({ regex: /\[[^\]]+\]/g, string: text }) - expect(result.data).toContain('[1, 2, 3]') - }) - - it('should handle dots in text', () => { - const text = 'File: test.txt and data.json' - const result = patternGrab({ regex: /\.\w+/g, string: text }) - expect(result.data).toContain('.txt') - expect(result.data).toContain('.json') - }) - }) - - describe('Unicode and International Characters', () => { - it('should handle emoji characters', () => { - const text = 'Hello ๐Ÿ‘‹ World ๐ŸŒ Test ๐Ÿš€' - const result = patternGrab({ regex: /๐Ÿ‘‹|๐ŸŒ|๐Ÿš€/g, string: text }) - expect(result.positions).toHaveLength(3) - }) - - it('should handle Chinese characters', () => { - const text = 'ไฝ ๅฅฝ world ไธ–็•Œ' - const result = patternGrab({ regex: /[\u4e00-\u9fa5]+/g, string: text }) - expect(result.data).toContain('ไฝ ๅฅฝ') - expect(result.data).toContain('ไธ–็•Œ') - }) - - it('should handle Japanese characters', () => { - const text = 'ใ“ใ‚“ใซใกใฏ world' - const result = patternGrab({ regex: /[\u3040-\u309f]+/g, string: text }) - expect(result.data).toContain('ใ“ใ‚“ใซใกใฏ') - }) - - it('should handle Korean characters', () => { - const text = '์•ˆ๋…•ํ•˜์„ธ์š” world' - const result = patternGrab({ regex: /[\uac00-\ud7af]+/g, string: text }) - expect(result.data).toContain('์•ˆ๋…•ํ•˜์„ธ์š”') - }) - - it('should handle accented characters', () => { - const text = 'cafรฉ rรฉsumรฉ naรฏve' - const result = patternGrab({ regex: /[a-zA-Zร รกรขรฃรครฅรงรจรฉรชรซรฌรญรฎรฏรฑรฒรณรดรตรถรนรบรปรผรฝ]+/g, string: text }) - expect(result.data).toContain('cafรฉ') - expect(result.data).toContain('rรฉsumรฉ') - expect(result.data).toContain('naรฏve') - }) - - it('should handle mixed unicode and ASCII', () => { - const text = 'Hello ไธ–็•Œ ๐Ÿ‘‹ Test' - const result = patternGrab({ regex: /[\u4e00-\u9fa5]+/g, string: text }) - expect(result.data).toContain('ไธ–็•Œ') - expect(result.data).toContain('Hello ') - expect(result.data).toContain(' ๐Ÿ‘‹ Test') - }) - }) - - describe('Consecutive and Overlapping Patterns', () => { - it('should handle consecutive identical matches', () => { - const result = patternGrab({ regex: /a/g, string: 'aaa' }) - expect(result.data).toEqual(['a', 'a', 'a']) - expect(result.positions).toEqual([0, 1, 2]) - }) - - it('should handle consecutive different matches', () => { - const result = patternGrab({ regex: /[ab]/g, string: 'abab' }) - expect(result.data).toEqual(['a', 'b', 'a', 'b']) - expect(result.positions).toEqual([0, 1, 2, 3]) - }) - - it('should handle patterns with no gap between matches', () => { - const result = patternGrab({ regex: /<[^>]+>/g, string: '' }) - expect(result.data).toEqual(['', '', '']) - expect(result.positions).toEqual([0, 1, 2]) - }) - - it('should handle alternating match and non-match', () => { - const result = patternGrab({ regex: /\d/g, string: '1a2b3c' }) - expect(result.data).toEqual(['1', 'a', '2', 'b', '3', 'c']) - expect(result.positions).toEqual([0, 2, 4]) - }) - }) - - describe('Variable Length Matches', () => { - it('should handle matches of different lengths', () => { - const result = patternGrab({ regex: /\d+/g, string: 'a1bb22ccc333' }) - expect(result.data).toEqual(['a', '1', 'bb', '22', 'ccc', '333']) - expect(result.positions).toEqual([1, 3, 5]) - }) - - it('should handle greedy quantifiers', () => { - const result = patternGrab({ regex: /a+/g, string: 'a aa aaa' }) - expect(result.data).toContain('a') - expect(result.data).toContain('aa') - expect(result.data).toContain('aaa') - }) - - it('should handle lazy quantifiers', () => { - const result = patternGrab({ regex: /<.+?>/g, string: '' }) - expect(result.data).toEqual(['', '']) - expect(result.positions).toEqual([0, 1]) - }) - - it('should handle optional patterns', () => { - const result = patternGrab({ regex: /colou?r/g, string: 'color colour' }) - expect(result.data).toContain('color') - expect(result.data).toContain('colour') - }) - }) - - describe('Multiline and Dotall Scenarios', () => { - it('should handle multiline strings', () => { - const text = 'line1\nline2\nline3' - const result = patternGrab({ regex: /^line/gm, string: text }) - expect(result.positions).toHaveLength(3) - }) - - it('should handle line endings', () => { - const text = 'line1\nline2\r\nline3' - const result = patternGrab({ regex: /\r?\n/g, string: text }) - expect(result.positions).toHaveLength(2) - }) - - it('should handle patterns across lines with dotall-like pattern', () => { - const text = 'start\nmiddle\nend' - const result = patternGrab({ regex: /start[\s\S]+end/g, string: text }) - expect(result.data).toEqual(['start\nmiddle\nend']) - }) - - it('should handle multiple paragraphs', () => { - const text = 'Para1\n\nPara2\n\nPara3' - const result = patternGrab({ regex: /\n\n/g, string: text }) - expect(result.positions).toHaveLength(2) - }) - }) - - describe('Performance Edge Cases', () => { - it('should handle moderately long strings', () => { - const longString = 'a'.repeat(100) - const result = patternGrab({ regex: /a/g, string: longString }) - expect(result.positions).toHaveLength(100) - }) - - it('should handle many matches in string', () => { - const text = ('x' + 'y'.repeat(10)).repeat(10) - const result = patternGrab({ regex: /x/g, string: text }) - expect(result.positions).toHaveLength(10) - }) - - it('should handle large unmatched sections', () => { - const text = 'a'.repeat(100) + 'MATCH' + 'b'.repeat(100) - const result = patternGrab({ regex: /MATCH/g, string: text }) - expect(result.data).toHaveLength(3) - expect(result.data[1]).toBe('MATCH') - }) - - it('should handle string with no matches', () => { - const longString = 'a'.repeat(100) - const result = patternGrab({ regex: /z/g, string: longString }) - expect(result.data).toEqual([]) - expect(result.positions).toEqual([]) - }) - }) - - describe('Complex Real-world Patterns', () => { - it('should handle nested structures', () => { - const text = '((a)(b))((c)(d))' - const result = patternGrab({ regex: /\([^()]+\)/g, string: text }) - expect(result.data).toContain('(a)') - expect(result.data).toContain('(b)') - expect(result.data).toContain('(c)') - expect(result.data).toContain('(d)') - }) - - it('should handle mixed content types', () => { - const text = 'Text bold 123 test@email.com http://url.com' - const result = patternGrab({ - regex: /<[^>]+>|[\w.-]+@[\w.-]+\.\w+|https?:\/\/[\w.-]+\.\w+/g, - string: text - }) - expect(result.data).toContain('') - expect(result.data).toContain('') - expect(result.data).toContain('test@email.com') - expect(result.data).toContain('http://url.com') - }) - - it('should handle code with strings and comments', () => { - const code = 'const x = "test"; // comment' - const result = patternGrab({ regex: /"[^"]*"|\/\/.*$/g, string: code }) - expect(result.data).toContain('"test"') - expect(result.data).toContain('// comment') - }) - - it('should handle CSV with quoted fields', () => { - const csv = 'name,"value,with,comma",123' - const result = patternGrab({ regex: /"[^"]*"|[^,]+/g, string: csv }) - expect(result.data).toContain('name') - expect(result.data).toContain('"value,with,comma"') - expect(result.data).toContain('123') - }) - }) - - describe('Regex Flag Combinations', () => { - it('should handle case-insensitive flag', () => { - const result = patternGrab({ regex: /test/gi, string: 'Test TEST test' }) - expect(result.positions).toHaveLength(3) - }) - - it('should handle multiline flag', () => { - const text = 'start\nmiddle\nend' - const result = patternGrab({ regex: /^/gm, string: text }) - expect(result.positions.length).toBeGreaterThan(1) - }) - - it('should handle accented word matching', () => { - const text = 'cafรฉ' - const result = patternGrab({ regex: /[a-zA-Zร รกรขรฃรครฅรงรจรฉรชรซรฌรญรฎรฏรฑรฒรณรดรตรถรนรบรปรผรฝ]+/g, string: text }) - expect(result.data).toContain('cafรฉ') - }) - - it('should handle sticky flag behavior', () => { - // Note: sticky flag might not work as expected with getPositions - const result = patternGrab({ regex: /test/g, string: 'test test' }) - expect(result.positions).toHaveLength(2) - }) - }) - - describe('getPositions Edge Cases', () => { - it('should return empty array for no matches', () => { - const positions = getPositions(/xyz/g, 'abc') - expect(positions).toEqual([]) - }) - - it('should handle single match correctly', () => { - const positions = getPositions(/test/g, 'this is test') - expect(positions).toEqual([[8, 12]]) - }) - - it('should handle overlapping pattern positions', () => { - const positions = getPositions(/aa/g, 'aaaa') - // Should match at 0-2 and 2-4 (non-overlapping) - expect(positions).toHaveLength(2) - }) - - it('should handle zero-width matches', () => { - const positions = getPositions(/\b/g, 'hello world') - // Word boundaries - expect(positions.length).toBeGreaterThan(0) - }) - - it('should handle very long match', () => { - const text = 'a'.repeat(10000) - const positions = getPositions(/a+/g, text) - expect(positions).toHaveLength(1) - expect(positions[0]).toEqual([0, 10000]) - }) - }) - - describe('Data Integrity', () => { - it('should preserve exact match content', () => { - const text = 'Test with multiple spaces' - const result = patternGrab({ regex: /\s+/g, string: text }) - expect(result.data).toContain(' ') - expect(result.data).toContain(' ') - expect(result.data).toContain(' ') - }) - - it('should preserve special characters in matches', () => { - const text = 'Price: $100.50' - const result = patternGrab({ regex: /\$\d+\.\d+/g, string: text }) - expect(result.data).toContain('$100.50') - }) - - it('should maintain string order', () => { - const text = 'a1b2c3' - const result = patternGrab({ regex: /\d/g, string: text }) - expect(result.data).toEqual(['a', '1', 'b', '2', 'c', '3']) - }) - - it('should not lose any characters', () => { - const text = 'test string with matches' - const result = patternGrab({ regex: /\s+/g, string: text }) - const reconstructed = result.data.join('') - expect(reconstructed).toBe(text) - }) - }) - - describe('Branch Coverage Edge Cases', () => { - it('should handle last match without next element', () => { - // This test ensures the branch where next is undefined is covered - const result = patternGrab({ regex: /x/g, string: 'axb' }) - expect(result.data).toEqual(['a', 'x', 'b']) - expect(result.positions).toEqual([1]) - }) - - it('should handle adjacent matches at end of string', () => { - // Ensures we cover the case where current[1] == next[0] and also the last match - const result = patternGrab({ regex: /\d/g, string: 'ab12' }) - expect(result.data).toEqual(['ab', '1', '2']) - expect(result.positions).toEqual([1, 2]) - }) - }) -}) diff --git a/packages/patternly/test/get-positions.test.ts b/packages/patternly/test/get-positions.test.ts deleted file mode 100644 index 2da45c8..0000000 --- a/packages/patternly/test/get-positions.test.ts +++ /dev/null @@ -1,249 +0,0 @@ -import { getPositions } from '../src/index' - -describe('getPositions Function Tests', () => { - describe('Basic Pattern Matching', () => { - it('should find single word matches', () => { - const text = 'Hello World Hello' - const positions = getPositions(/Hello/g, text) - - expect(positions).toHaveLength(2) - expect(positions[0]).toEqual([0, 5]) - expect(positions[1]).toEqual([12, 17]) - }) - - it('should find case-sensitive matches', () => { - const text = 'Hello hello HELLO' - const positions = getPositions(/hello/g, text) - - expect(positions).toHaveLength(1) - expect(positions[0]).toEqual([6, 11]) - }) - - it('should find case-insensitive matches', () => { - const text = 'Hello hello HELLO' - const positions = getPositions(/hello/gi, text) - - expect(positions).toHaveLength(3) - expect(positions[0]).toEqual([0, 5]) - expect(positions[1]).toEqual([6, 11]) - expect(positions[2]).toEqual([12, 17]) - }) - }) - - describe('Special Character Patterns', () => { - it('should find whitespace characters', () => { - const text = 'Hello World Test' - const positions = getPositions(/ /g, text) - - expect(positions).toHaveLength(2) - expect(positions[0]).toEqual([5, 6]) - expect(positions[1]).toEqual([11, 12]) - }) - - it('should find newline characters', () => { - const text = 'Line1\nLine2\nLine3' - const positions = getPositions(/\n/g, text) - - expect(positions).toHaveLength(2) - expect(positions[0]).toEqual([5, 6]) - expect(positions[1]).toEqual([11, 12]) - }) - - it('should find tab characters', () => { - const text = 'Col1\tCol2\tCol3' - const positions = getPositions(/\t/g, text) - - expect(positions).toHaveLength(2) - }) - - it('should find punctuation marks', () => { - const text = 'Hello, World! How are you?' - const positions = getPositions(/[,!?]/g, text) - - expect(positions).toHaveLength(3) - expect(positions[0]).toEqual([5, 6]) // comma - expect(positions[1]).toEqual([12, 13]) // exclamation - expect(positions[2]).toEqual([25, 26]) // question mark - }) - }) - - describe('Complex Regex Patterns', () => { - it('should find HTML tags', () => { - const html = '
Content
Text' - const positions = getPositions(/<[^>]*>/g, html) - - expect(positions).toHaveLength(4) - expect(positions[0]).toEqual([0, 5]) //
- expect(positions[1]).toEqual([12, 18]) //
- expect(positions[2]).toEqual([18, 24]) // - expect(positions[3]).toEqual([28, 35]) // - }) - - it('should find email addresses', () => { - const text = 'Contact: user@example.com or admin@test.org' - const positions = getPositions(/[\w.-]+@[\w.-]+\.\w+/g, text) - - expect(positions).toHaveLength(2) - expect(positions[0]).toEqual([9, 25]) // user@example.com - expect(positions[1]).toEqual([29, 43]) // admin@test.org - }) - - it('should find URLs', () => { - const text = 'Visit https://example.com or http://test.org' - const positions = getPositions(/https?:\/\/[\w.-]+\.\w+/g, text) - - expect(positions).toHaveLength(2) - expect(positions[0]).toEqual([6, 25]) - expect(positions[1]).toEqual([29, 44]) - }) - - it('should find numbers', () => { - const text = 'Numbers: 123, 45.67, -89, 0.5' - const positions = getPositions(/-?\d+\.?\d*/g, text) - - expect(positions).toHaveLength(4) - }) - - it('should find word boundaries', () => { - const text = 'test testing tested' - const positions = getPositions(/\btest\b/g, text) - - expect(positions).toHaveLength(1) - expect(positions[0]).toEqual([0, 4]) - }) - }) - - describe('Edge Cases', () => { - it('should return empty array when no matches found', () => { - const text = 'Hello World' - const positions = getPositions(/xyz/g, text) - - expect(positions).toHaveLength(0) - expect(positions).toEqual([]) - }) - - it('should handle empty string', () => { - const text = '' - const positions = getPositions(/test/g, text) - - expect(positions).toHaveLength(0) - }) - - it('should handle pattern matching entire string', () => { - const text = 'Hello' - const positions = getPositions(/Hello/g, text) - - expect(positions).toHaveLength(1) - expect(positions[0]).toEqual([0, 5]) - }) - - it('should handle overlapping patterns (non-capturing)', () => { - const text = 'aaaa' - const positions = getPositions(/aa/g, text) - - // Non-overlapping matches: 'aa' at 0-2 and 'aa' at 2-4 - expect(positions).toHaveLength(2) - }) - - it('should handle single character matches', () => { - const text = 'abcabc' - const positions = getPositions(/a/g, text) - - expect(positions).toHaveLength(2) - expect(positions[0]).toEqual([0, 1]) - expect(positions[1]).toEqual([3, 4]) - }) - - it('should handle unicode characters', () => { - const text = 'Hello ๐Ÿ‘‹ World ๐ŸŒ' - const positions = getPositions(/๐Ÿ‘‹|๐ŸŒ/g, text) - - expect(positions).toHaveLength(2) - }) - - it('should handle moderately long strings', () => { - const text = 'a'.repeat(100) + 'b' + 'a'.repeat(100) - const positions = getPositions(/b/g, text) - - expect(positions).toHaveLength(1) - expect(positions[0]).toEqual([100, 101]) - }) - }) - - describe('Multiple Consecutive Matches', () => { - it('should find consecutive identical patterns', () => { - const text = '111222333' - const positions = getPositions(/1/g, text) - - expect(positions).toHaveLength(3) - expect(positions[0]).toEqual([0, 1]) - expect(positions[1]).toEqual([1, 2]) - expect(positions[2]).toEqual([2, 3]) - }) - - it('should find consecutive different patterns', () => { - const text = '
' - const positions = getPositions(/<[^>]*>/g, text) - - expect(positions).toHaveLength(3) - expect(positions[0]).toEqual([0, 3]) - expect(positions[1]).toEqual([3, 6]) - expect(positions[2]).toEqual([6, 9]) - }) - }) - - describe('Regex Flags', () => { - it('should respect global flag', () => { - const text = 'test test test' - const positionsWithG = getPositions(/test/g, text) - - expect(positionsWithG).toHaveLength(3) - }) - - it('should work with multiline flag', () => { - const text = 'start\nmiddle\nend' - const positions = getPositions(/^/gm, text) - - // Matches start of each line - expect(positions.length).toBeGreaterThan(0) - }) - - it('should work with dotall-like pattern', () => { - const text = 'Hello\nWorld' - const positions = getPositions(/Hello[\s\S]World/g, text) - - expect(positions).toHaveLength(1) - expect(positions[0]).toEqual([0, 11]) - }) - }) - - describe('Real-world Patterns', () => { - it('should extract markdown links', () => { - const text = 'Check [link1](url1) and [link2](url2)' - const positions = getPositions(/\[([^\]]+)\]\(([^)]+)\)/g, text) - - expect(positions).toHaveLength(2) - }) - - it('should find CSS class names', () => { - const css = '.class1 { } .class2 { } #id1 { }' - const positions = getPositions(/\.[a-zA-Z][\w-]*/g, css) - - expect(positions).toHaveLength(2) - }) - - it('should find JavaScript variable declarations', () => { - const code = 'const x = 1; let y = 2; var z = 3;' - const positions = getPositions(/\b(const|let|var)\b/g, code) - - expect(positions).toHaveLength(3) - }) - - it('should find quoted strings', () => { - const text = 'Say "hello" and \'world\'' - const positions = getPositions(/["']([^"']*)["']/g, text) - - expect(positions).toHaveLength(2) - }) - }) -}) diff --git a/packages/patternly/test/index.test.ts b/packages/patternly/test/index.test.ts deleted file mode 100644 index e2c074f..0000000 --- a/packages/patternly/test/index.test.ts +++ /dev/null @@ -1,60 +0,0 @@ -import patternGrab, { getPositions } from '../src/index' - -const text = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris quam mauris, tempor sit amet porta sed, fermentum eu tellus. Cras ac quam felis. Ut ac fringilla arcu, et dignissim neque. Cras imperdiet sed diam sagittis vehicula. Duis eu efficitur est. Cras accumsan nulla non risus sodales accumsan. Donec magna magna, hendrerit vel neque a, volutpat molestie risus. Donec posuere sagittis mauris. Curabitur tempus tempor finibus. Aenean auctor mollis magna ut cursus. Vivamus ac velit turpis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam a gravida urna, a facilisis neque. Donec aliquet feugiat interdum. Ut risus eros, sodales et interdum vel, cursus sed lacus. Pellentesque suscipit arcu et sollicitudin convallis. -Phasellus porttitor nisi vitae nisi tempor, quis placerat est egestas. Integer mattis dapibus eros. Aenean a nisi auctor, ullamcorper felis quis, varius lacus. Cras quis blandit lorem. Integer malesuada arcu id sapien ultricies, ut volutpat ipsum pretium. Fusce et ornare dui. Fusce eu accumsan nisi, quis sollicitudin urna. Duis pretium, sapien non sagittis interdum, arcu eros maximus dui, sed condimentum lectus dolor scelerisque eros. Phasellus et risus in urna interdum facilisis. Fusce rhoncus dui vel sodales rutrum. Fusce vitae ultrices velit. In volutpat varius diam ac accumsan. -Cras vehicula lacus ac tellus semper, eget volutpat lorem blandit. Nunc congue risus vulputate, rhoncus risus sit amet, malesuada dolor. Curabitur iaculis iaculis nisl, eget condimentum lectus sagittis posuere. Integer ultrices sollicitudin est, et elementum erat ultrices a. Donec quis augue at magna rutrum rhoncus. Ut vehicula et felis nec rutrum. Curabitur eget ullamcorper sapien. Integer sagittis lorem et velit auctor ultricies. Maecenas vestibulum in ipsum eu vestibulum. Morbi in lectus a eros sodales imperdiet vel vitae mi. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam et sem non metus interdum maximus. Quisque pellentesque arcu vitae luctus tristique. Duis malesuada felis vitae elit facilisis pretium. -Sed sed odio convallis, elementum elit ac, imperdiet nulla. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nullam ut purus diam. Cras congue suscipit tincidunt. Maecenas ornare auctor tortor, at viverra dui placerat eget. Ut vitae elementum justo. Donec cursus enim id arcu tincidunt, ac suscipit mi congue. Nullam ut libero vel turpis vestibulum vehicula quis consectetur felis. Sed sed erat elit. Phasellus lacinia mauris molestie massa fermentum mattis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla vel diam faucibus, sollicitudin quam a, lobortis ligula. Cras augue erat, tempor sed nibh vitae, lobortis suscipit leo. Ut pellentesque lectus eu urna elementum, ac convallis neque hendrerit. -Nullam rutrum enim eu sodales eleifend. Aenean id erat sagittis, condimentum lorem tincidunt, finibus nisi. Donec fringilla placerat viverra. Nunc dignissim, dui id finibus consectetur, turpis dolor placerat metus, eget molestie nibh velit sit amet nunc. Aliquam vel leo libero. Cras rhoncus, tellus quis fringilla rutrum, lectus eros finibus leo, in mollis felis libero egestas dui. Donec blandit imperdiet diam, et facilisis neque molestie eleifend. Mauris accumsan lacus vitae ex mollis dictum. In sagittis massa massa, in ornare turpis malesuada eget. Ut malesuada nisi aliquam posuere semper. Curabitur metus nunc, pulvinar non sem id, dapibus pretium quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; In hac habitasse platea dictumst.` - -const html = `Yup This is a Test Yea Its Ok?` - -describe('Pattern Grab Test', () => { - it('getPositions Test', () => { - const cases: [RegExp, string][] = [ - [/Cras/g, 'Cras'], - [/Lorem/g, 'Lorem'], - [/ /g, ' '] - ] - - for (const caseItem of cases) { - const [regex, result] = caseItem - const positions = getPositions(regex, text) - for (const position of positions) { - const founded = text.substr(position[0], position[1] - position[0]) - expect(founded).toBe(result) - } - } - }) - - it('patternGrab Test', () => { - const grabHTML = patternGrab({ regex: /<[^>]*>/gm, string: html }) - const expectedData = [ - '', - 'Yup This is a ', - '', - 'Test', - '', - ' Yea ', - '', - ' Its Ok?', - '' - ] - expect(grabHTML.data).toMatchObject(expectedData) - expect(grabHTML.positions).toMatchObject([0, 2, 4, 6, 8]) - - const grabPlain = patternGrab({ regex: /<[^>]*>/gm, string: text }) - expect(grabPlain.data).toMatchObject([]) - - const grabNotFirst = patternGrab({ regex: /Yup/gm, string: html }) - expect(grabNotFirst.data).toMatchObject(['', 'Yup', ' This is a Test Yea Its Ok?']) - - const grabEndPlainRemainHTML = patternGrab({ - regex: /<[^>]*>/gm, - string: `${html} Remain?` - }) - expect(grabEndPlainRemainHTML.data).toMatchObject([ - ...expectedData, - ' Remain?' - ]) - }) -}) diff --git a/packages/patternly/test/integration.test.ts b/packages/patternly/test/integration.test.ts deleted file mode 100644 index a10ee18..0000000 --- a/packages/patternly/test/integration.test.ts +++ /dev/null @@ -1,456 +0,0 @@ -import patternGrab from '../src/index' - -describe('Integration Tests - Real-world Use Cases', () => { - describe('HTML/XML Parsing', () => { - it('should parse complex HTML document', () => { - const html = ` - - - - Test Page - - - -

Welcome

-

This is a test paragraph.

- Test Image - - - ` - const result = patternGrab({ regex: /<[^>]+>/g, string: html }) - - expect(result.data).toContain('') - expect(result.data).toContain('') - expect(result.data).toContain('') - expect(result.data).toContain('') - expect(result.data).toContain('') - expect(result.data).toContain('Test Image') - expect(result.positions.length).toBeGreaterThan(10) - }) - - it('should separate HTML tags from content for syntax highlighting', () => { - const html = '

Hello World

' - const result = patternGrab({ regex: /<[^>]+>/g, string: html }) - - // Can iterate through data and apply different styling - result.data.forEach((item, index) => { - if (result.positions.includes(index)) { - // This would be styled as HTML tag - expect(item).toMatch(/^<.*>$/) - } else { - // This would be styled as plain text - expect(item).not.toMatch(/^<.*>$/) - } - }) - }) - - it('should parse XML with attributes', () => { - const xml = 'Content' - const result = patternGrab({ regex: /<[^>]+>/g, string: xml }) - - expect(result.data).toContain('') - expect(result.data).toContain('') - expect(result.data).toContain('Content') - expect(result.data).toContain('') - expect(result.data).toContain('') - }) - - it('should handle HTML with inline styles', () => { - const html = '
Styled Text
' - const result = patternGrab({ regex: /<[^>]+>/g, string: html }) - - expect(result.data).toContain('
') - expect(result.data).toContain('Styled Text') - expect(result.data).toContain('
') - }) - }) - - describe('Markdown Parsing', () => { - it('should parse markdown document with mixed syntax', () => { - const markdown = ` -# Heading 1 -## Heading 2 - -This is **bold** and this is *italic*. - -- List item 1 -- List item 2 - -[Link Text](https://example.com) - -\`\`\`javascript -const code = "example"; -\`\`\` - ` - - // Extract bold text - const boldResult = patternGrab({ regex: /\*\*[^*]+\*\*/g, string: markdown }) - expect(boldResult.data).toContain('**bold**') - - // Extract italic text - const italicResult = patternGrab({ regex: /\*[^*]+\*/g, string: markdown }) - expect(italicResult.data.some(item => item.includes('italic'))).toBe(true) - - // Extract links - const linkResult = patternGrab({ regex: /\[[^\]]+\]\([^)]+\)/g, string: markdown }) - expect(linkResult.data).toContain('[Link Text](https://example.com)') - }) - - it('should extract markdown headings', () => { - const markdown = '# H1\n## H2\n### H3\nRegular text' - const result = patternGrab({ regex: /^#{1,6}\s+.+$/gm, string: markdown }) - - expect(result.data).toContain('# H1') - expect(result.data).toContain('## H2') - expect(result.data).toContain('### H3') - }) - - it('should parse markdown code blocks', () => { - const markdown = 'Text before\n```js\ncode here\n```\nText after' - const result = patternGrab({ regex: /```[\s\S]*?```/g, string: markdown }) - - expect(result.data).toContain('```js\ncode here\n```') - expect(result.data).toContain('Text before\n') - // The remaining text after the code block - expect(result.data.length).toBeGreaterThan(0) - }) - }) - - describe('Code Syntax Highlighting', () => { - it('should identify JavaScript keywords', () => { - const code = 'const x = 10; let y = 20; var z = 30; function test() { return true; }' - const result = patternGrab({ - regex: /\b(const|let|var|function|return|if|else|for|while|class|import|export)\b/g, - string: code - }) - - expect(result.data).toContain('const') - expect(result.data).toContain('let') - expect(result.data).toContain('var') - expect(result.data).toContain('function') - expect(result.data).toContain('return') - }) - - it('should extract string literals from code', () => { - const code = `const msg = "hello"; const msg2 = 'world'; const template = \`test\`;` - const result = patternGrab({ regex: /["'`][^"'`]*["'`]/g, string: code }) - - expect(result.data).toContain('"hello"') - expect(result.data).toContain("'world'") - expect(result.data).toContain('`test`') - }) - - it('should identify comments in code', () => { - const code = ` - // Single line comment - const x = 1; /* Multi - line comment */ const y = 2; - ` - const result = patternGrab({ regex: /\/\/.*$|\/\*[\s\S]*?\*\//gm, string: code }) - - expect(result.data.some(item => item.includes('Single line comment'))).toBe(true) - expect(result.data.some(item => item.includes('Multi'))).toBe(true) - }) - - it('should parse Python code structure', () => { - const code = 'def function_name(param):\n return param * 2\n\nclass MyClass:\n pass' - const result = patternGrab({ regex: /\b(def|class|return|import|from|if|else)\b/g, string: code }) - - expect(result.data).toContain('def') - expect(result.data).toContain('class') - expect(result.data).toContain('return') - }) - }) - - describe('Data Extraction from Text', () => { - it('should extract contact information from text', () => { - const text = ` - Contact us: - Email: support@example.com - Phone: +1-555-123-4567 - Website: https://www.example.com - Alternative: info@test.org or call 555-987-6543 - ` - - // Extract emails - const emailResult = patternGrab({ - regex: /[\w.-]+@[\w.-]+\.\w+/g, - string: text - }) - expect(emailResult.data).toContain('support@example.com') - expect(emailResult.data).toContain('info@test.org') - - // Extract URLs - const urlResult = patternGrab({ - regex: /https?:\/\/[\w.-]+\.\w+/g, - string: text - }) - expect(urlResult.data).toContain('https://www.example.com') - - // Extract phone numbers - const phoneResult = patternGrab({ - regex: /\+?\d{1,3}[-.\s]?\d{3}[-.\s]?\d{3}[-.\s]?\d{4}/g, - string: text - }) - expect(phoneResult.positions.length).toBeGreaterThan(0) - }) - - it('should extract dates from text', () => { - const text = 'Meeting on 2024-01-15, deadline 01/20/2024, and review on Jan 25, 2024' - const result = patternGrab({ - regex: /\d{4}-\d{2}-\d{2}|\d{2}\/\d{2}\/\d{4}|[A-Z][a-z]{2}\s+\d{1,2},\s+\d{4}/g, - string: text - }) - - expect(result.data).toContain('2024-01-15') - expect(result.data).toContain('01/20/2024') - expect(result.data).toContain('Jan 25, 2024') - }) - - it('should extract prices and currency', () => { - const text = 'Items: $19.99, โ‚ฌ25.50, ยฃ30.00, ยฅ1000' - const result = patternGrab({ - regex: /[$โ‚ฌยฃยฅ]\d+\.?\d*/g, - string: text - }) - - expect(result.data).toContain('$19.99') - expect(result.data).toContain('โ‚ฌ25.50') - expect(result.data).toContain('ยฃ30.00') - expect(result.data).toContain('ยฅ1000') - }) - - it('should extract social media handles', () => { - const text = 'Follow @user1 and @user2 on Twitter, check #hashtag1 and #hashtag2' - - const mentionResult = patternGrab({ regex: /@\w+/g, string: text }) - expect(mentionResult.data).toContain('@user1') - expect(mentionResult.data).toContain('@user2') - - const hashtagResult = patternGrab({ regex: /#\w+/g, string: text }) - expect(hashtagResult.data).toContain('#hashtag1') - expect(hashtagResult.data).toContain('#hashtag2') - }) - }) - - describe('Log File Parsing', () => { - it('should parse structured log entries', () => { - const log = ` -[2024-01-01 10:30:45] INFO: Application started -[2024-01-01 10:30:46] DEBUG: Loading configuration -[2024-01-01 10:30:47] ERROR: Failed to connect to database -[2024-01-01 10:30:48] WARN: Retrying connection - ` - - const result = patternGrab({ - regex: /\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] (INFO|DEBUG|ERROR|WARN):/g, - string: log - }) - - expect(result.data).toContain('[2024-01-01 10:30:45] INFO:') - expect(result.data).toContain('[2024-01-01 10:30:47] ERROR:') - expect(result.data).toContain('[2024-01-01 10:30:48] WARN:') - }) - - it('should extract error messages from logs', () => { - const log = 'ERROR: Connection failed\nINFO: Retry attempt\nERROR: Timeout occurred' - const result = patternGrab({ regex: /ERROR:.*$/gm, string: log }) - - expect(result.data).toContain('ERROR: Connection failed') - expect(result.data).toContain('ERROR: Timeout occurred') - }) - - it('should parse Apache-style access logs', () => { - const log = '192.168.1.1 - - [01/Jan/2024:10:30:45 +0000] "GET /index.html HTTP/1.1" 200 1234' - const result = patternGrab({ - regex: /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/g, - string: log - }) - - expect(result.data).toContain('192.168.1.1') - }) - }) - - describe('CSV and Structured Data', () => { - it('should parse CSV data', () => { - const csv = 'name,age,city\nJohn,30,NYC\nJane,25,LA' - const result = patternGrab({ regex: /,/g, string: csv }) - - // Should split by commas - expect(result.positions.length).toBe(6) // 2 commas per line * 3 lines - }) - - it('should parse CSV with quoted fields', () => { - const csv = 'name,"description, with comma",value' - const result = patternGrab({ regex: /"[^"]*"/g, string: csv }) - - expect(result.data).toContain('"description, with comma"') - }) - - it('should parse JSON-like structures', () => { - const json = '{"name":"John","age":30,"city":"NYC"}' - const result = patternGrab({ regex: /"[^"]*"/g, string: json }) - - expect(result.data).toContain('"name"') - expect(result.data).toContain('"John"') - expect(result.data).toContain('"age"') - }) - - it('should parse key-value pairs', () => { - const config = 'key1=value1\nkey2=value2\nkey3=value3' - const result = patternGrab({ regex: /=/g, string: config }) - - expect(result.positions).toHaveLength(3) - }) - }) - - describe('URL and Path Parsing', () => { - it('should parse URL components', () => { - const url = 'https://user:pass@example.com:8080/path/to/resource?query=value&foo=bar#section' - - const protocolResult = patternGrab({ regex: /^https?:\/\//g, string: url }) - expect(protocolResult.data).toContain('https://') - - const domainResult = patternGrab({ regex: /@[\w.-]+/g, string: url }) - expect(domainResult.data).toContain('@example.com') - - const queryResult = patternGrab({ regex: /\?[^#]+/g, string: url }) - expect(queryResult.data.some(item => item.includes('query=value'))).toBe(true) - }) - - it('should parse file paths', () => { - const paths = '/home/user/file.txt C:\\Users\\Test\\doc.pdf ./relative/path.js' - const result = patternGrab({ - regex: /[A-Z]:\\[\w\\.-]+|\/[\w\/.-]+|\.\/.+/g, - string: paths - }) - - expect(result.data.some(item => item.includes('/home/user/file.txt'))).toBe(true) - expect(result.data.some(item => item.includes('C:\\Users\\Test\\doc.pdf'))).toBe(true) - }) - }) - - describe('Template and Variable Substitution', () => { - it('should identify template variables', () => { - const template = 'Hello {{name}}, your balance is {{balance}}' - const result = patternGrab({ regex: /\{\{[^}]+\}\}/g, string: template }) - - expect(result.data).toContain('{{name}}') - expect(result.data).toContain('{{balance}}') - expect(result.data).toContain('Hello ') - expect(result.data).toEqual(['Hello ', '{{name}}', ', your balance is ', '{{balance}}']) - expect(result.positions).toEqual([1, 3]) - }) - - it('should identify environment variables', () => { - const text = 'Path: $HOME/bin and $USER/docs or ${CUSTOM_VAR}' - const result = patternGrab({ regex: /\$\{?\w+\}?/g, string: text }) - - expect(result.data).toContain('$HOME') - expect(result.data).toContain('$USER') - expect(result.data).toContain('${CUSTOM_VAR}') - }) - - it('should parse template literals in JavaScript', () => { - const code = 'const msg = `Hello ${name}, you have ${count} items`;' - const result = patternGrab({ regex: /\$\{[^}]+\}/g, string: code }) - - expect(result.data).toContain('${name}') - expect(result.data).toContain('${count}') - }) - }) - - describe('Rich Text Processing', () => { - it('should process mixed content for rich text editor', () => { - const richText = 'Normal text **bold text** more normal *italic* and `code` end' - - // Process bold - const boldResult = patternGrab({ regex: /\*\*[^*]+\*\*/g, string: richText }) - expect(boldResult.data).toContain('**bold text**') - - // Process italic - const italicResult = patternGrab({ regex: /\*[^*]+\*/g, string: richText }) - expect(italicResult.data.some(item => item.includes('italic'))).toBe(true) - - // Process code - const codeResult = patternGrab({ regex: /`[^`]+`/g, string: richText }) - expect(codeResult.data).toContain('`code`') - }) - - it('should handle nested formatting', () => { - const text = 'Text with **bold and *italic* inside** more text' - // This pattern won't match because [^*]+ stops at the first * - // Use a better pattern for nested content - const result = patternGrab({ regex: /\*\*[\s\S]*?\*\*/g, string: text }) - - expect(result.data).toContain('**bold and *italic* inside**') - }) - }) - - describe('Search and Replace Preparation', () => { - it('should prepare data for selective replacement', () => { - const text = 'Replace this and this but not that' - const result = patternGrab({ regex: /this/g, string: text }) - - // Can use positions to replace only matched items - expect(result.positions).toEqual([1, 3]) - expect(result.data[result.positions[0]]).toBe('this') - expect(result.data[result.positions[1]]).toBe('this') - - // Reconstruct with replacements - const replaced = result.data.map((item, index) => - result.positions.includes(index) ? 'THAT' : item - ).join('') - - expect(replaced).toBe('Replace THAT and THAT but not that') - }) - - it('should enable conditional text transformation', () => { - const html = '

Text

Content

More

' - const result = patternGrab({ regex: /<[^>]+>/g, string: html }) - - // Can transform only specific tags - const transformed = result.data.map((item, index) => { - if (result.positions.includes(index) && item.includes('

')) { - return '' - } else if (result.positions.includes(index) && item.includes('

')) { - return '' - } - return item - }).join('') - - expect(transformed).toBe('Text
Content
More') - }) - }) - - describe('Performance with Real-world Data', () => { - it('should handle HTML documents', () => { - const largeHtml = '
' + '

Content

'.repeat(20) + '
' - const result = patternGrab({ regex: /<[^>]+>/g, string: largeHtml }) - - expect(result.positions.length).toBe(42) // 1 div open + 20 p open + 20 p close + 1 div close - }) - - it('should handle log files', () => { - const logEntry = '[2024-01-01 10:30:45] INFO: Message\n' - const largeLogs = logEntry.repeat(20) - const result = patternGrab({ - regex: /\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\]/g, - string: largeLogs - }) - - expect(result.positions).toHaveLength(20) - }) - - it('should handle code files', () => { - const codeLine = 'const variable = "value"; // comment\n' - const largeCode = codeLine.repeat(20) - const result = patternGrab({ - regex: /"[^"]*"/g, - string: largeCode - }) - - expect(result.positions).toHaveLength(20) - }) - }) -}) diff --git a/packages/patternly/test/patternly.test.ts b/packages/patternly/test/patternly.test.ts deleted file mode 100644 index 674b4e0..0000000 --- a/packages/patternly/test/patternly.test.ts +++ /dev/null @@ -1,462 +0,0 @@ -import patternGrab from '../src/index' - -describe('patternGrab Function Tests', () => { - describe('Basic Functionality', () => { - it('should split string by matched patterns', () => { - const result = patternGrab({ - regex: /\d+/g, - string: 'abc123def456ghi' - }) - - expect(result.data).toEqual(['abc', '123', 'def', '456', 'ghi']) - expect(result.positions).toEqual([1, 3]) - }) - - it('should handle pattern at start of string', () => { - const result = patternGrab({ - regex: /\d+/g, - string: '123abc456' - }) - - expect(result.data).toEqual(['123', 'abc', '456']) - expect(result.positions).toEqual([0, 2]) - }) - - it('should handle pattern at end of string', () => { - const result = patternGrab({ - regex: /\d+/g, - string: 'abc123def456' - }) - - expect(result.data).toEqual(['abc', '123', 'def', '456']) - expect(result.positions).toEqual([1, 3]) - }) - - it('should handle single match', () => { - const result = patternGrab({ - regex: /test/g, - string: 'before test after' - }) - - expect(result.data).toEqual(['before ', 'test', ' after']) - expect(result.positions).toEqual([1]) - }) - - it('should handle consecutive matches', () => { - const result = patternGrab({ - regex: /<[^>]*>/g, - string: '
' - }) - - expect(result.data).toEqual(['', '', '']) - expect(result.positions).toEqual([0, 1, 2]) - }) - }) - - describe('HTML Parsing', () => { - it('should parse simple HTML', () => { - const html = 'Text' - const result = patternGrab({ regex: /<[^>]*>/g, string: html }) - - expect(result.data).toEqual(['', 'Text', '']) - expect(result.positions).toEqual([0, 2]) - }) - - it('should parse nested HTML tags', () => { - const html = '
Text
' - const result = patternGrab({ regex: /<[^>]*>/g, string: html }) - - expect(result.data).toEqual([ - '
', - '', - 'Text', - '', - '
' - ]) - expect(result.positions).toEqual([0, 1, 3, 4]) - }) - - it('should parse HTML with attributes', () => { - const html = 'Test' - const result = patternGrab({ regex: /<[^>]*>/g, string: html }) - - expect(result.data).toEqual(['Test']) - expect(result.positions).toEqual([0]) - }) - - it('should parse mixed HTML and text', () => { - const html = 'Yup This is a Test Yea Its Ok?' - const result = patternGrab({ regex: /<[^>]*>/g, string: html }) - - expect(result.data).toEqual([ - '', - 'Yup This is a ', - '', - 'Test', - '', - ' Yea ', - '', - ' Its Ok?', - '' - ]) - expect(result.positions).toEqual([0, 2, 4, 6, 8]) - }) - - it('should handle self-closing tags', () => { - const html = '

' - const result = patternGrab({ regex: /<[^>]*>/g, string: html }) - - expect(result.data).toEqual(['
', '
', '']) - expect(result.positions).toEqual([0, 1, 2]) - }) - }) - - describe('Markdown Parsing', () => { - it('should extract markdown bold syntax', () => { - const text = 'This is **bold** text' - const result = patternGrab({ regex: /\*\*[^*]+\*\*/g, string: text }) - - expect(result.data).toEqual(['This is ', '**bold**', ' text']) - expect(result.positions).toEqual([1]) - }) - - it('should extract markdown links', () => { - const text = 'Check [link](url) here' - const result = patternGrab({ regex: /\[[^\]]+\]\([^)]+\)/g, string: text }) - - expect(result.data).toEqual(['Check ', '[link](url)', ' here']) - expect(result.positions).toEqual([1]) - }) - - it('should extract markdown code blocks', () => { - const text = 'Code: `console.log()` here' - const result = patternGrab({ regex: /`[^`]+`/g, string: text }) - - expect(result.data).toEqual(['Code: ', '`console.log()`', ' here']) - expect(result.positions).toEqual([1]) - }) - }) - - describe('Data Extraction', () => { - it('should extract email addresses', () => { - const text = 'Contact user@example.com or admin@test.org for help' - const result = patternGrab({ - regex: /[\w.-]+@[\w.-]+\.\w+/g, - string: text - }) - - expect(result.data).toEqual([ - 'Contact ', - 'user@example.com', - ' or ', - 'admin@test.org', - ' for help' - ]) - expect(result.positions).toEqual([1, 3]) - }) - - it('should extract URLs', () => { - const text = 'Visit https://example.com and http://test.org' - const result = patternGrab({ - regex: /https?:\/\/[\w.-]+\.\w+/g, - string: text - }) - - expect(result.data).toEqual([ - 'Visit ', - 'https://example.com', - ' and ', - 'http://test.org' - ]) - expect(result.positions).toEqual([1, 3]) - }) - - it('should extract phone numbers', () => { - const text = 'Call 123-456-7890 or 098-765-4321' - const result = patternGrab({ - regex: /\d{3}-\d{3}-\d{4}/g, - string: text - }) - - expect(result.data).toEqual([ - 'Call ', - '123-456-7890', - ' or ', - '098-765-4321' - ]) - expect(result.positions).toEqual([1, 3]) - }) - - it('should extract hashtags', () => { - const text = 'Check #javascript and #typescript tags' - const result = patternGrab({ - regex: /#\w+/g, - string: text - }) - - expect(result.data).toEqual([ - 'Check ', - '#javascript', - ' and ', - '#typescript', - ' tags' - ]) - expect(result.positions).toEqual([1, 3]) - }) - - it('should extract mentions', () => { - const text = 'Hello @user1 and @user2' - const result = patternGrab({ - regex: /@\w+/g, - string: text - }) - - expect(result.data).toEqual(['Hello ', '@user1', ' and ', '@user2']) - expect(result.positions).toEqual([1, 3]) - }) - }) - - describe('Edge Cases', () => { - it('should return empty arrays when no matches', () => { - const result = patternGrab({ - regex: /xyz/g, - string: 'abc def ghi' - }) - - expect(result.data).toEqual([]) - expect(result.positions).toEqual([]) - }) - - it('should handle empty string', () => { - const result = patternGrab({ - regex: /test/g, - string: '' - }) - - expect(result.data).toEqual([]) - expect(result.positions).toEqual([]) - }) - - it('should handle string with only matched content', () => { - const result = patternGrab({ - regex: /test/g, - string: 'test' - }) - - expect(result.data).toEqual(['test']) - expect(result.positions).toEqual([0]) - }) - - it('should handle multiple consecutive matches', () => { - const result = patternGrab({ - regex: /\d/g, - string: '123' - }) - - expect(result.data).toEqual(['1', '2', '3']) - expect(result.positions).toEqual([0, 1, 2]) - }) - - it('should handle whitespace-only separators', () => { - const result = patternGrab({ - regex: /\w+/g, - string: 'a b c' - }) - - expect(result.data).toEqual(['a', ' ', 'b', ' ', 'c']) - expect(result.positions).toEqual([0, 2, 4]) - }) - - it('should handle very long strings', () => { - const longString = 'a'.repeat(10000) + 'MATCH' + 'b'.repeat(10000) - const result = patternGrab({ - regex: /MATCH/g, - string: longString - }) - - expect(result.data).toHaveLength(3) - expect(result.positions).toEqual([1]) - expect(result.data[1]).toBe('MATCH') - }) - - it('should handle unicode characters', () => { - const text = 'Hello ๐Ÿ‘‹ World ๐ŸŒ' - const result = patternGrab({ - regex: /๐Ÿ‘‹|๐ŸŒ/g, - string: text - }) - - expect(result.data).toContain('๐Ÿ‘‹') - expect(result.data).toContain('๐ŸŒ') - expect(result.positions).toHaveLength(2) - }) - }) - - describe('Position Tracking', () => { - it('should correctly track positions with single match', () => { - const result = patternGrab({ - regex: /X/g, - string: 'aXb' - }) - - expect(result.data).toEqual(['a', 'X', 'b']) - expect(result.positions).toEqual([1]) - }) - - it('should correctly track positions with multiple matches', () => { - const result = patternGrab({ - regex: /X/g, - string: 'aXbXcXd' - }) - - expect(result.data).toEqual(['a', 'X', 'b', 'X', 'c', 'X', 'd']) - expect(result.positions).toEqual([1, 3, 5]) - }) - - it('should correctly track positions when match is at start', () => { - const result = patternGrab({ - regex: /X/g, - string: 'XaXb' - }) - - expect(result.data).toEqual(['X', 'a', 'X', 'b']) - expect(result.positions).toEqual([0, 2]) - }) - - it('should correctly track positions when match is at end', () => { - const result = patternGrab({ - regex: /X/g, - string: 'aXbX' - }) - - expect(result.data).toEqual(['a', 'X', 'b', 'X']) - expect(result.positions).toEqual([1, 3]) - }) - - it('should track positions for variable-length matches', () => { - const result = patternGrab({ - regex: /\d+/g, - string: 'a1b22c333d' - }) - - expect(result.data).toEqual(['a', '1', 'b', '22', 'c', '333', 'd']) - expect(result.positions).toEqual([1, 3, 5]) - }) - }) - - describe('Complex Patterns', () => { - it('should handle lookahead assertions', () => { - const text = 'test1 test2 test3' - const result = patternGrab({ - regex: /test(?=\d)/g, - string: text - }) - - expect(result.positions).toHaveLength(3) - }) - - it('should handle capturing groups', () => { - const text = 'rgb(255, 0, 0) and rgb(0, 255, 0)' - const result = patternGrab({ - regex: /rgb\(\d+,\s*\d+,\s*\d+\)/g, - string: text - }) - - expect(result.data).toContain('rgb(255, 0, 0)') - expect(result.data).toContain('rgb(0, 255, 0)') - expect(result.positions).toEqual([0, 2]) - }) - - it('should handle alternation patterns', () => { - const text = 'cat dog bird cat' - const result = patternGrab({ - regex: /cat|dog/g, - string: text - }) - - expect(result.data).toEqual(['cat', ' ', 'dog', ' bird ', 'cat']) - expect(result.positions).toEqual([0, 2, 4]) - }) - - it('should handle character classes', () => { - const text = 'a1b2c3' - const result = patternGrab({ - regex: /[a-z]/g, - string: text - }) - - expect(result.data).toEqual(['a', '1', 'b', '2', 'c', '3']) - expect(result.positions).toEqual([0, 2, 4]) - }) - }) - - describe('Real-world Use Cases', () => { - it('should parse CSV-like data', () => { - const csv = 'name,age,city' - const result = patternGrab({ - regex: /,/g, - string: csv - }) - - expect(result.data).toEqual(['name', ',', 'age', ',', 'city']) - expect(result.positions).toEqual([1, 3]) - }) - - it('should parse JSON-like strings', () => { - const json = '{"key":"value"}' - const result = patternGrab({ - regex: /"[^"]*"/g, - string: json - }) - - expect(result.data).toContain('"key"') - expect(result.data).toContain('"value"') - }) - - it('should parse code syntax highlighting', () => { - const code = 'const x = 123;' - const result = patternGrab({ - regex: /\b(const|let|var)\b/g, - string: code - }) - - expect(result.data).toContain('const') - expect(result.positions).toEqual([0]) - }) - - it('should parse log timestamps', () => { - const log = '[2024-01-01 10:30:45] Error occurred' - const result = patternGrab({ - regex: /\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\]/g, - string: log - }) - - expect(result.data).toContain('[2024-01-01 10:30:45]') - expect(result.positions).toEqual([0]) - }) - }) - - describe('Performance and Stress Tests', () => { - it('should handle many matches', () => { - const text = 'a '.repeat(50).trim() - const result = patternGrab({ - regex: /a/g, - string: text - }) - - expect(result.positions).toHaveLength(50) - }) - - it('should handle large unmatched sections', () => { - const text = 'a'.repeat(100) + 'MATCH' + 'b'.repeat(100) - const result = patternGrab({ - regex: /MATCH/g, - string: text - }) - - expect(result.data).toHaveLength(3) - expect(result.data[0]).toHaveLength(100) - expect(result.data[2]).toHaveLength(100) - }) - }) -}) diff --git a/packages/patternly/tsconfig.json b/packages/patternly/tsconfig.json deleted file mode 100644 index e074457..0000000 --- a/packages/patternly/tsconfig.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist", - "baseUrl": ".", - "paths": { - "*": [ - "types/*", - "bin" - ], - "dist/*": [ - "../../dist/*" - ] - }, - "importHelpers": false, - "sourceMap": false, - "declaration": true, - "inlineSourceMap": false, - "noImplicitAny": false, - "module": "commonjs", - "target": "ES5", - "types": [ - "node", - "jest" - ], - "lib": [ - "es5", - "es6", - "dom" - ], - "moduleResolution": "node", - "forceConsistentCasingInFileNames": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "strictNullChecks": true, - "resolveJsonModule": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "skipLibCheck": true - }, - "exclude": [ - "./test" - ] -} \ No newline at end of file diff --git a/packages/pseudo-shuffle/.gitignore b/packages/pseudo-shuffle/.gitignore deleted file mode 100644 index 0f30931..0000000 --- a/packages/pseudo-shuffle/.gitignore +++ /dev/null @@ -1,133 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# Projects -.DS_Store \ No newline at end of file diff --git a/packages/pseudo-shuffle/.npmignore b/packages/pseudo-shuffle/.npmignore deleted file mode 100644 index 8e60f28..0000000 --- a/packages/pseudo-shuffle/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -node_modules -.DS_Store -test -src -tsconfig.json -jest.config.cjs -*.log \ No newline at end of file diff --git a/packages/pseudo-shuffle/LICENSE b/packages/pseudo-shuffle/LICENSE deleted file mode 100644 index 685f227..0000000 --- a/packages/pseudo-shuffle/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License Copyright (c) 2023 hmmhmmhm - -Permission is hereby granted, free of -charge, to any person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice -(including the next paragraph) shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/packages/pseudo-shuffle/README.md b/packages/pseudo-shuffle/README.md deleted file mode 100644 index 9d36503..0000000 --- a/packages/pseudo-shuffle/README.md +++ /dev/null @@ -1,143 +0,0 @@ -# ๐Ÿ”€ pseudo-shuffle - -[![Wiki](https://img.shields.io/badge/๐Ÿ“–_Wiki-deepwiki-blue)](https://deepwiki.com/hmmhmmhm/node-packages) - -[![Pseudo Shuffle](https://hmart.app/en/pseudo-shuffle/og.png)](https://hmart.app/pseudo-shuffle) - -**[๐Ÿ”— Showcase and Introduction Page](https://hmart.app/pseudo-shuffle)** - -> ๐Ÿ“œ Make the index look like it is shuffled according to the range so that it is not conflicted without the actual shuffle. - -
- -## ๐Ÿš€ Usage - -### 1. Install - -```bash -npm install pseudo-shuffle -``` - -### 2. **Browser and Node.js Support** - -This package works in both Node.js and browser environments! - -**Node.js:** -```ts -import { encode, decode } from "pseudo-shuffle"; -``` - -**Browser (ESM):** -```html - -``` - -**Note:** In the browser, `encode` and `decode` are **async functions** that return Promises. Make sure to use `await` or `.then()` when calling them. - -### 3. **Basic Encode - Decode Example** - -**Node.js (synchronous):** -```ts -import { encode, decode } from "pseudo-shuffle"; - -const encoded = encode({ - min: 0, - max: 100, - index: 3, -}); -console.log(`encoded:`, encoded); -// encoded: 29 - -const decoded = decode({ - min: 0, - max: 100, - index: encoded, -}); -console.log(`decoded:`, decoded); -// decoded: 3 -``` - -**Browser (asynchronous):** -```ts -import { encode, decode } from "pseudo-shuffle"; - -const encoded = await encode({ - min: 0, - max: 100, - index: 3, -}); -console.log(`encoded:`, encoded); -// encoded: 29 - -const decoded = await decode({ - min: 0, - max: 100, - index: encoded, -}); -console.log(`decoded:`, decoded); -// decoded: 3 -``` - -### 4. **7 Length Base 36 Shuffle Example** - -```ts -import { encode, decode } from "pseudo-shuffle"; - -const privateKey = "something-secret-any-string-like-this!"; - -const encoded = encode({ - min: 0, - max: 36 ** 7 - 1, - index: 3, - privateKey, -}); -console.log(`encoded:`, encoded.toString(36)); -// encoded: ltne180 - -const decoded = decode({ - min: 0, - max: 36 ** 7 - 1, - index: encoded, - privateKey, -}); -console.log(`decoded:`, decoded); -// decoded: 3 -``` - -## โš ๏ธ Caution - -1. `pseudo-shuffle` is pseudo random, not truly random. As a result, the library can encode or decode the shuffled sequence on the fly without having to remember all the shuffled values. -2. Algorithm can be applied only when the difference between the min and max values is at least 4. In this case, it doesn't throw an error, it just doesn't apply the shuffle. -3. The private and public keys are set to their defaults. If you want more security, set the privateKey. -4. **Browser compatibility:** In browser environments, `encode` and `decode` are async functions (return Promises) because they use the Web Crypto API. In Node.js, they remain synchronous. -5. **Browser requirements:** The browser version requires support for Web Crypto API (available in all modern browsers). -6. This library was developed to make it easier to use the [node-fe1-fpe](https://github.com/eCollect/node-fe1-fpe) library without a lot of exception handling, and the real genius is the person who wrote it. - -
- -## ๐Ÿงช Testing - -The package includes comprehensive test suites for both Node.js and browser environments: - -```bash -# Run all tests -pnpm test - -# Tests include: -# - Node.js tests: Synchronous version tests -# - Browser tests: Async version tests with Web Crypto API -``` - -All 41 tests cover: -- Basic encode/decode functionality -- Edge cases and boundary values -- Custom key handling -- Large range support -- Browser-specific async operations - -## โœ… License - -> MIT Licensed. diff --git a/packages/pseudo-shuffle/jest.config.cjs b/packages/pseudo-shuffle/jest.config.cjs deleted file mode 100644 index 544b7c8..0000000 --- a/packages/pseudo-shuffle/jest.config.cjs +++ /dev/null @@ -1,68 +0,0 @@ -module.exports = { - testMatch: ["**/test/**/*.+(ts|tsx|js)", "**/?(*.)+(spec|test).+(ts|tsx|js)"], - testPathIgnorePatterns: ["/node_modules/", "/dist/", "/test/setup.ts", "/test/setup-browser.ts"], - setupFilesAfterEnv: ["/test/setup.ts"], - watchman: false, - moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json"], - moduleNameMapper: { - "^pseudo-shuffle$": "/dist/pseudo-shuffle.cjs", - }, - transform: { - "^.+\\.(ts|tsx)$": ["ts-jest", { - tsconfig: { - outDir: null, - rootDir: null, - moduleResolution: "node", - esModuleInterop: true, - }, - diagnostics: { - ignoreCodes: [151002], - }, - }], - }, - injectGlobals: true, - projects: [ - { - displayName: "node", - testMatch: ["**/test/**/!(*.browser).test.ts"], - testPathIgnorePatterns: ["/node_modules/", "/dist/", "/test/setup.ts", "/test/setup-browser.ts"], - setupFilesAfterEnv: ["/test/setup.ts"], - moduleNameMapper: { - "^pseudo-shuffle$": "/dist/pseudo-shuffle.cjs", - }, - transform: { - "^.+\\.(ts|tsx)$": ["ts-jest", { - tsconfig: { - outDir: null, - rootDir: null, - moduleResolution: "node", - esModuleInterop: true, - }, - diagnostics: { - ignoreCodes: [151002], - }, - }], - }, - }, - { - displayName: "browser", - testMatch: ["**/test/**/*.browser.test.ts"], - testPathIgnorePatterns: ["/node_modules/", "/dist/", "/test/setup.ts", "/test/setup-browser.ts"], - setupFilesAfterEnv: ["/test/setup-browser.ts"], - testEnvironment: "node", - transform: { - "^.+\\.(ts|tsx)$": ["ts-jest", { - tsconfig: { - outDir: null, - rootDir: null, - moduleResolution: "node", - esModuleInterop: true, - }, - diagnostics: { - ignoreCodes: [151002], - }, - }], - }, - }, - ], -}; diff --git a/packages/pseudo-shuffle/package.json b/packages/pseudo-shuffle/package.json deleted file mode 100644 index bbbf17c..0000000 --- a/packages/pseudo-shuffle/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "pseudo-shuffle", - "version": "1.1.2", - "description": "Make the index look like it is shuffled according to the range so that it is not conflicted without the actual shuffle. Works in both Node.js and browser environments.", - "type": "module", - "source": "src/pseudo-shuffle.ts", - "exports": { - "node": { - "types": "./dist/pseudo-shuffle.d.ts", - "require": "./dist/pseudo-shuffle.cjs", - "default": "./dist/pseudo-shuffle.modern.js" - }, - "browser": { - "types": "./dist/pseudo-shuffle.d.ts", - "default": "./dist/pseudo-shuffle-browser.modern.js" - }, - "default": { - "types": "./dist/pseudo-shuffle.d.ts", - "default": "./dist/pseudo-shuffle-browser.modern.js" - } - }, - "main": "./dist/pseudo-shuffle.cjs", - "module": "./dist/pseudo-shuffle.module.js", - "browser": "./dist/pseudo-shuffle-browser.modern.js", - "unpkg": "./dist/pseudo-shuffle-browser.umd.js", - "types": "./dist/pseudo-shuffle.d.ts", - "scripts": { - "build": "npm run build:node && npm run build:browser", - "build:node": "microbundle --tsconfig tsconfig.json", - "build:browser": "microbundle src/pseudo-shuffle-browser.ts -o dist/pseudo-shuffle-browser.js --tsconfig tsconfig.json", - "test": "npm run build && jest" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/pseudo-shuffle" - }, - "keywords": [ - "shuffle", - "shuffle-algorithms", - "fpe", - "format-preserving-encryption", - "browser", - "browser-compatible", - "web-crypto", - "ems", - "cjs", - "umd", - "esm", - "es", - "module", - "typescript", - "ts", - "javascript", - "js" - ], - "author": "hmmhmmhm", - "license": "MIT", - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/pseudo-shuffle#readme", - "dependencies": { - "node-fe1-fpe": "^1.0.0-beta.2" - }, - "devDependencies": { - "@sindresorhus/tsconfig": "^3.0.1", - "@types/jest": "^29.5.1", - "@types/node": "^20.2.5", - "jest": "^29.5.0", - "microbundle": "^0.15.1", - "ts-jest": "^29.1.0" - } -} diff --git a/packages/pseudo-shuffle/src/fe1-browser.ts b/packages/pseudo-shuffle/src/fe1-browser.ts deleted file mode 100644 index f86981e..0000000 --- a/packages/pseudo-shuffle/src/fe1-browser.ts +++ /dev/null @@ -1,260 +0,0 @@ -/** - * Browser-compatible FE1 Format Preserving Encryption implementation - * Based on node-fe1-fpe but using Web Crypto API instead of Node.js crypto - */ - -// BigInt buffer conversion utilities -function toBigIntBE(buffer: Uint8Array): bigint { - let result = 0n; - for (let i = 0; i < buffer.length; i++) { - result = (result << 8n) | BigInt(buffer[i]); - } - return result; -} - -function toBufferBE(value: bigint, length: number): Uint8Array { - const buffer = new Uint8Array(length); - let num = value; - for (let i = length - 1; i >= 0; i--) { - buffer[i] = Number(num & 0xFFn); - num = num >> 8n; - } - return buffer; -} - -function encode(long: bigint): Uint8Array { - return toBufferBE(long, 8); -} - -function toBeBytes(num: number | bigint): Uint8Array { - // Ensure num is a valid integer before converting to BigInt - if (typeof num === 'number') { - if (!Number.isFinite(num) || !Number.isInteger(num)) { - throw new Error(`Invalid number for BigInt conversion: ${num}`); - } - } - return toBufferBE(BigInt(num), 8); -} - -function assureBigInt(n: number | bigint): bigint { - if (typeof n === 'bigint') return n; - if (typeof n === 'number') { - if (!Number.isFinite(n) || !Number.isInteger(n)) { - throw new Error(`Invalid number for BigInt conversion: ${n}`); - } - } - return BigInt(n); -} - -// String to UTF-16LE buffer conversion -function stringToUtf16LE(str: string): Uint8Array { - const buffer = new Uint8Array(str.length * 2); - for (let i = 0; i < str.length; i++) { - const charCode = str.charCodeAt(i); - buffer[i * 2] = charCode & 0xFF; - buffer[i * 2 + 1] = (charCode >> 8) & 0xFF; - } - return buffer; -} - -// Prime factorization -const factorCache: { [key: string]: [bigint, bigint] } = {}; - -class PrimeGenerator { - private markedNotPrimeMap: { [key: number]: number[] } = {}; - private seq = 1; - - next(): number { - while (true) { - this.seq += 1; - if (!this.markedNotPrimeMap[this.seq]) { - this.markedNotPrimeMap[this.seq ** 2] = [this.seq]; - return this.seq; - } - const primes = this.markedNotPrimeMap[this.seq]; - primes.forEach((prime) => { - const nextMultipleOfPrime = prime + this.seq; - if (this.markedNotPrimeMap[nextMultipleOfPrime]) { - this.markedNotPrimeMap[nextMultipleOfPrime].push(prime); - } else { - this.markedNotPrimeMap[nextMultipleOfPrime] = [prime]; - } - }); - delete this.markedNotPrimeMap[this.seq]; - } - } -} - -function factor(n: bigint): [bigint, bigint] { - const primes = new PrimeGenerator(); - let a = 1n; - let b = 1n; - let p: bigint; - - for (let k = 0n; n > 1n; k++) { - p = BigInt(primes.next()); - if (n % p === 0n) { - while (n % p === 0n) { - b *= p; - if (a < b) { - [a, b] = [b, a]; - } - n /= p; - } - } - } - - if (a <= 1 || b <= 1) { - throw new Error('Could not factor n for use in FPE, prime numbers cannot be used as modulus'); - } - - return [a, b]; -} - -function getCachedFactor(num: number | bigint): [bigint, bigint] { - const key = String(num); - if (factorCache[key] === undefined) { - factorCache[key] = factor(assureBigInt(num)); - } - return factorCache[key]; -} - -// HMAC-SHA256 implementation using Web Crypto API -async function hmacSha256(key: Uint8Array, data: Uint8Array): Promise { - // Ensure proper ArrayBuffer type for Web Crypto API - const keyBuffer = new Uint8Array(key); - const dataBuffer = new Uint8Array(data); - - const cryptoKey = await crypto.subtle.importKey( - 'raw', - keyBuffer, - { name: 'HMAC', hash: 'SHA-256' }, - false, - ['sign'] - ); - const signature = await crypto.subtle.sign('HMAC', cryptoKey, dataBuffer); - return new Uint8Array(signature); -} - -// Concatenate multiple Uint8Arrays -function concatBuffers(...buffers: Uint8Array[]): Uint8Array { - const totalLength = buffers.reduce((sum, buf) => sum + buf.length, 0); - const result = new Uint8Array(totalLength); - let offset = 0; - for (const buf of buffers) { - result.set(buf, offset); - offset += buf.length; - } - return result; -} - -class FPEEncryptor { - private keyByte: Uint8Array; - private macNT: Uint8Array | null = null; - - constructor(key: string | Uint8Array) { - this.keyByte = typeof key === 'string' ? stringToUtf16LE(key) : key; - // macNT will be initialized asynchronously - } - - async initialize(modulus: bigint, tweak: string | Uint8Array): Promise { - const nBin = encode(modulus); - const tweakByte = typeof tweak === 'string' ? stringToUtf16LE(tweak) : tweak; - - const data = concatBuffers( - toBeBytes(nBin.length), - nBin, - toBeBytes(tweakByte.length), - tweakByte - ); - - this.macNT = await hmacSha256(this.keyByte, data); - } - - async format(roundNumber: number, r: bigint): Promise { - if (!this.macNT) { - throw new Error('FPEEncryptor not initialized'); - } - - const rBin = encode(r); - const data = concatBuffers( - this.macNT, - toBeBytes(roundNumber), - toBeBytes(rBin.length), - rBin - ); - - const mac = await hmacSha256(this.keyByte, data); - return toBigIntBE(mac); - } -} - -/** - * Generic Z_n FPE encryption, FE1 scheme. - */ -export async function encrypt( - modulus: number, - subject: number, - key: string | Uint8Array, - tweak: string | Uint8Array, - rounds: number = 3 -): Promise { - if (!Number.isInteger(rounds) || rounds < 1) { - throw Error('Parameter must be a positive integer.'); - } - - const modulusBigInt = assureBigInt(modulus); - const cipher = new FPEEncryptor(key); - await cipher.initialize(modulusBigInt, tweak); - - const [firstFactor, secondFactor] = getCachedFactor(modulus); - - let right: bigint; - let x = BigInt(subject); - - for (let i = 0; i < rounds; i++) { - right = x % secondFactor; - const formatResult = await cipher.format(i, right); - x = (firstFactor * right) + ((formatResult + x / secondFactor) % firstFactor); - } - - return Number(x); -} - -/** - * Generic Z_n FPE decryption, FE1 scheme. - */ -export async function decrypt( - modulus: number, - cryptedSubject: number, - key: string | Uint8Array, - tweak: string | Uint8Array, - rounds: number = 3 -): Promise { - if (!Number.isInteger(rounds) || rounds < 1) { - throw Error('Parameter must be a positive integer.'); - } - - const modulusBigInt = assureBigInt(modulus); - const cipher = new FPEEncryptor(key); - await cipher.initialize(modulusBigInt, tweak); - - const [firstFactor, secondFactor] = getCachedFactor(modulus); - - let modulu: bigint; - let right: bigint; - let left: bigint; - let x = BigInt(cryptedSubject); - - for (let i = rounds - 1; i >= 0; i--) { - right = x / firstFactor; - const formatResult = await cipher.format(i, right); - modulu = (formatResult - (x % firstFactor)) % firstFactor; - left = modulu > 0n ? firstFactor - modulu : -modulu; - x = (secondFactor * left) + right; - } - - return Number(x); -} - -export default { encrypt, decrypt }; diff --git a/packages/pseudo-shuffle/src/pseudo-shuffle-browser.ts b/packages/pseudo-shuffle/src/pseudo-shuffle-browser.ts deleted file mode 100644 index 081f7b1..0000000 --- a/packages/pseudo-shuffle/src/pseudo-shuffle-browser.ts +++ /dev/null @@ -1,150 +0,0 @@ -import * as fe1 from "./fe1-browser"; - -export interface IPsuedoShuffleOption { - /** - * The starting value of the shuffleable range. - */ - min: number; - /** - * The ending value of the shuffleable range. - * - * Algorithm can be applied only when the difference - * between the min and max values is at least 4. - */ - max: number; - /** - * The index value to be shuffled. - */ - index: number; - /** - * The private key used to encrypt the index value. - * - * If not specified, the default value is used. - * (**Default value:** `psuedo-shuffle`) - */ - privateKey?: string; - /** - * The public key used to encrypt the index value. - * - * If not specified, the default value is used. - * (**Default value:** `psuedo-shuffle`) - */ - publicKey?: string; -} - -const defaultKey = "psuedo-shuffle"; - -export const encode = async ({ - index, - min, - max, - privateKey = defaultKey, - publicKey = defaultKey, -}: IPsuedoShuffleOption): Promise => { - // Validate inputs - if (!Number.isFinite(index) || !Number.isInteger(index)) { - throw new Error(`Invalid index: ${index}. Must be a finite integer.`); - } - if (!Number.isFinite(min) || !Number.isInteger(min)) { - throw new Error(`Invalid min: ${min}. Must be a finite integer.`); - } - if (!Number.isFinite(max) || !Number.isInteger(max)) { - throw new Error(`Invalid max: ${max}. Must be a finite integer.`); - } - if (min >= max) { - throw new Error(`Invalid range: min (${min}) must be less than max (${max}).`); - } - - // Algorithm can be applied only when the difference - // between the min and max values is at least 4. - if (max - min < 3) return index; - - // Algorithms can only be applied when the - // range difference between min and max is prime number. - // Therefore, when the range difference is not prime number, - // the algorithm is applied while leaving the last index intact. - if ((max - min) % 2 === 0) { - const middle = Math.ceil(min + (max - min) / 2); - if (index === middle) return max; - if (index === max) index = middle; - --max; - } - - // Algorithm does not apply to index - // values that are not in the range. - if (index < min || index > max) return index; - - return ( - (await fe1.encrypt( - max - min + 1, - index - min, - privateKey, - publicKey - )) + min - ); -}; - -export const decode = async ({ - index, - min, - max, - privateKey = defaultKey, - publicKey = defaultKey, -}: IPsuedoShuffleOption): Promise => { - // Validate inputs - if (!Number.isFinite(index) || !Number.isInteger(index)) { - throw new Error(`Invalid index: ${index}. Must be a finite integer.`); - } - if (!Number.isFinite(min) || !Number.isInteger(min)) { - throw new Error(`Invalid min: ${min}. Must be a finite integer.`); - } - if (!Number.isFinite(max) || !Number.isInteger(max)) { - throw new Error(`Invalid max: ${max}. Must be a finite integer.`); - } - if (min >= max) { - throw new Error(`Invalid range: min (${min}) must be less than max (${max}).`); - } - - // Algorithm can be applied only when the difference - // between the min and max values is at least 4. - if (max - min < 3) return index; - - // Algorithms can only be applied when the - // range difference between min and max is prime number. - // Therefore, when the range difference is not prime number, - // the algorithm is applied while leaving the last index intact. - - const isNonPrime = (max - min) % 2 === 0; - if (isNonPrime) { - if (index > max - 1) { - return Math.ceil(min + (max - min) / 2); - } - --max; - } - - // Algorithm does not apply to index - // values that are not in the range. - if (index < min || index > max) return index; - - if (isNonPrime) { - if ( - index === - (await encode({ - index: Math.ceil(min + (max - min) / 2), - max, - min, - privateKey, - publicKey, - })) - ) - return max + 1; - } - return ( - (await fe1.decrypt( - max - min + 1, - index - min, - privateKey, - publicKey - )) + min - ); -}; diff --git a/packages/pseudo-shuffle/src/pseudo-shuffle.ts b/packages/pseudo-shuffle/src/pseudo-shuffle.ts deleted file mode 100644 index a84a5dd..0000000 --- a/packages/pseudo-shuffle/src/pseudo-shuffle.ts +++ /dev/null @@ -1,126 +0,0 @@ -import fe1 from "node-fe1-fpe"; - -export interface IPsuedoShuffleOption { - /** - * The starting value of the shuffleable range. - */ - min: number; - /** - * The ending value of the shuffleable range. - * - * Algorithm can be applied only when the difference - * between the min and max values is at least 4. - */ - max: number; - /** - * The index value to be shuffled. - */ - index: number; - /** - * The private key used to encrypt the index value. - * - * If not specified, the default value is used. - * (**Default value:** `psuedo-shuffle`) - */ - privateKey?: string; - /** - * The public key used to encrypt the index value. - * - * If not specified, the default value is used. - * (**Default value:** `psuedo-shuffle`) - */ - publicKey?: string; -} - -const defaultKey = "psuedo-shuffle"; - -export const encode = ({ - index, - min, - max, - privateKey = defaultKey, - publicKey = defaultKey, -}: IPsuedoShuffleOption): number => { - // Algorithm can be applied only when the difference - // between the min and max values is at least 4. - if (max - min < 3) return index; - - // Algorithms can only be applied when the - // range difference between min and max is prime number. - // Therefore, when the range difference is not prime number, - // the algorithm is applied while leaving the last index intact. - // if ((max - min) % 2 === 0) { - // if (index === max) return index - // --max - // } - if ((max - min) % 2 === 0) { - const middle = Math.ceil(min + (max - min) / 2); - if (index === middle) return max; - if (index === max) index = middle; - --max; - } - - // Algorithm does not apply to index - // values that are not in the range. - if (index < min || index > max) return index; - - return ( - fe1.encrypt( - max - min + 1, - index - min, - privateKey, - publicKey - ) + min - ); -}; - -export const decode = ({ - index, - min, - max, - privateKey = defaultKey, - publicKey = defaultKey, -}: IPsuedoShuffleOption): number => { - // Algorithm can be applied only when the difference - // between the min and max values is at least 4. - if (max - min < 3) return index; - - // Algorithms can only be applied when the - // range difference between min and max is prime number. - // Therefore, when the range difference is not prime number, - // the algorithm is applied while leaving the last index intact. - - const isNonPrime = (max - min) % 2 === 0; - if (isNonPrime) { - if (index > max - 1) { - return Math.ceil(min + (max - min) / 2); - } - --max; - } - - // Algorithm does not apply to index - // values that are not in the range. - if (index < min || index > max) return index; - - if (isNonPrime) { - if ( - index === - encode({ - index: Math.ceil(min + (max - min) / 2), - max, - min, - privateKey, - publicKey, - }) - ) - return max + 1; - } - return ( - fe1.decrypt( - max - min + 1, - index - min, - privateKey, - publicKey - ) + min - ); -}; diff --git a/packages/pseudo-shuffle/test/comprehensive-test.ts b/packages/pseudo-shuffle/test/comprehensive-test.ts deleted file mode 100644 index a3d8681..0000000 --- a/packages/pseudo-shuffle/test/comprehensive-test.ts +++ /dev/null @@ -1,360 +0,0 @@ -import { encode, decode } from "pseudo-shuffle"; - -describe("pseudo-shuffle - Comprehensive Tests", () => { - describe("Basic Encode/Decode", () => { - it("Should encode and decode correctly for positive range", () => { - for (let index = 0; index <= 100; index++) { - const encoded = encode({ min: 0, max: 100, index }); - const decoded = decode({ min: 0, max: 100, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("Should encode and decode correctly for negative range", () => { - for (let index = -50; index <= -10; index++) { - const encoded = encode({ min: -50, max: -10, index }); - const decoded = decode({ min: -50, max: -10, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("Should encode and decode correctly for mixed range", () => { - for (let index = -20; index <= 20; index++) { - const encoded = encode({ min: -20, max: 20, index }); - const decoded = decode({ min: -20, max: 20, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Edge Cases - Minimum Range", () => { - it("Should handle range with difference of 3 (minimum for algorithm)", () => { - for (let index = 0; index <= 3; index++) { - const encoded = encode({ min: 0, max: 3, index }); - const decoded = decode({ min: 0, max: 3, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("Should return same value when range difference is less than 3", () => { - // Range difference = 2 - const encoded1 = encode({ min: 0, max: 2, index: 1 }); - expect(encoded1).toBe(1); - - // Range difference = 1 - const encoded2 = encode({ min: 5, max: 6, index: 5 }); - expect(encoded2).toBe(5); - - // Range difference = 0 - const encoded3 = encode({ min: 10, max: 10, index: 10 }); - expect(encoded3).toBe(10); - }); - }); - - describe("Edge Cases - Out of Range", () => { - it("Should return same value when index is below min", () => { - const encoded = encode({ min: 10, max: 20, index: 5 }); - expect(encoded).toBe(5); - - const decoded = decode({ min: 10, max: 20, index: 5 }); - expect(decoded).toBe(5); - }); - - it("Should return same value when index is above max (odd range)", () => { - // Use odd range (difference = 9) to test out-of-range behavior - const encoded = encode({ min: 10, max: 19, index: 25 }); - expect(encoded).toBe(25); - - const decoded = decode({ min: 10, max: 19, index: 25 }); - expect(decoded).toBe(25); - }); - - it("Should handle out of range for even range correctly", () => { - // For even ranges, decode has special handling for values > max-1 - const min = 10; - const max = 20; // even range (difference = 10) - - // Encode returns the value as-is when out of range - const encoded = encode({ min, max, index: 25 }); - expect(encoded).toBe(25); - - // Decode has special logic for even ranges when index > max-1 - // It returns the middle value - const decoded = decode({ min, max, index: 25 }); - const expectedMiddle = Math.ceil(min + (max - min) / 2); - expect(decoded).toBe(expectedMiddle); - }); - }); - - describe("Even Range Handling (Non-Prime)", () => { - it("Should handle even range correctly", () => { - // Range 0-10 has difference of 10 (even) - for (let index = 0; index <= 10; index++) { - const encoded = encode({ min: 0, max: 10, index }); - const decoded = decode({ min: 0, max: 10, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("Should handle middle value in even range", () => { - const min = 0; - const max = 10; - const middle = Math.ceil(min + (max - min) / 2); // 5 - - const encoded = encode({ min, max, index: middle }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(middle); - }); - - it("Should handle max value in even range", () => { - const min = 0; - const max = 10; - - const encoded = encode({ min, max, index: max }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(max); - }); - }); - - describe("Custom Keys", () => { - it("Should encode/decode with custom private key", () => { - const privateKey = "my-secret-key"; - - for (let index = 0; index <= 20; index++) { - const encoded = encode({ min: 0, max: 20, index, privateKey }); - const decoded = decode({ min: 0, max: 20, index: encoded, privateKey }); - expect(decoded).toBe(index); - } - }); - - it("Should encode/decode with custom public key", () => { - const publicKey = "my-public-key"; - - for (let index = 0; index <= 20; index++) { - const encoded = encode({ min: 0, max: 20, index, publicKey }); - const decoded = decode({ min: 0, max: 20, index: encoded, publicKey }); - expect(decoded).toBe(index); - } - }); - - it("Should encode/decode with both custom keys", () => { - const privateKey = "my-secret-key"; - const publicKey = "my-public-key"; - - for (let index = 0; index <= 20; index++) { - const encoded = encode({ min: 0, max: 20, index, privateKey, publicKey }); - const decoded = decode({ min: 0, max: 20, index: encoded, privateKey, publicKey }); - expect(decoded).toBe(index); - } - }); - - it("Should produce different results with different keys", () => { - const index = 10; - const min = 0; - const max = 100; - - const encoded1 = encode({ min, max, index, privateKey: "key1" }); - const encoded2 = encode({ min, max, index, privateKey: "key2" }); - - expect(encoded1).not.toBe(encoded2); - }); - - it("Should fail to decode with wrong key", () => { - const index = 10; - const min = 0; - const max = 100; - - const encoded = encode({ min, max, index, privateKey: "key1" }); - const decoded = decode({ min, max, index: encoded, privateKey: "key2" }); - - expect(decoded).not.toBe(index); - }); - }); - - describe("Large Range", () => { - it("Should handle large positive range", () => { - const min = 0; - const max = 10000; - const testIndices = [0, 100, 500, 1000, 5000, 9999, 10000]; - - testIndices.forEach(index => { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - }); - }); - - it("Should handle very large range (Base36 example)", () => { - const min = 0; - const max = 36 ** 7 - 1; - const privateKey = "something-secret-any-string-like-this!"; - const testIndices = [0, 3, 100, 1000, 10000, 100000]; - - testIndices.forEach(index => { - const encoded = encode({ min, max, index, privateKey }); - const decoded = decode({ min, max, index: encoded, privateKey }); - expect(decoded).toBe(index); - }); - }); - }); - - describe("Uniqueness", () => { - it("Should produce unique encoded values for different indices", () => { - const min = 0; - const max = 100; - const encodedValues = new Set(); - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - expect(encodedValues.has(encoded)).toBe(false); - encodedValues.add(encoded); - } - - expect(encodedValues.size).toBe(max - min + 1); - }); - - it("Should produce different encoded values for same index with different ranges", () => { - const index = 10; - - const encoded1 = encode({ min: 0, max: 50, index }); - const encoded2 = encode({ min: 0, max: 100, index }); - const encoded3 = encode({ min: 5, max: 50, index }); - - // They should be different (or at least not all the same) - const uniqueValues = new Set([encoded1, encoded2, encoded3]); - expect(uniqueValues.size).toBeGreaterThan(1); - }); - }); - - describe("Deterministic Behavior", () => { - it("Should produce same encoded value for same input", () => { - const params = { min: 0, max: 100, index: 42 }; - - const encoded1 = encode(params); - const encoded2 = encode(params); - const encoded3 = encode(params); - - expect(encoded1).toBe(encoded2); - expect(encoded2).toBe(encoded3); - }); - - it("Should produce same decoded value for same input", () => { - const params = { min: 0, max: 100, index: 42 }; - - const decoded1 = decode(params); - const decoded2 = decode(params); - const decoded3 = decode(params); - - expect(decoded1).toBe(decoded2); - expect(decoded2).toBe(decoded3); - }); - }); - - describe("Boundary Values", () => { - it("Should handle min boundary correctly", () => { - const min = 10; - const max = 50; - - const encoded = encode({ min, max, index: min }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(min); - }); - - it("Should handle max boundary correctly", () => { - const min = 10; - const max = 50; - - const encoded = encode({ min, max, index: max }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(max); - }); - - it("Should handle zero as min", () => { - const encoded = encode({ min: 0, max: 20, index: 0 }); - const decoded = decode({ min: 0, max: 20, index: encoded }); - expect(decoded).toBe(0); - }); - - it("Should handle negative boundaries", () => { - const min = -100; - const max = -50; - - const encoded = encode({ min, max, index: min }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(min); - }); - }); - - describe("Range Coverage", () => { - it("Should cover all values in range when encoding", () => { - const min = 0; - const max = 50; - const encodedValues = new Set(); - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - encodedValues.add(encoded); - } - - // All encoded values should be within the range - encodedValues.forEach(value => { - expect(value).toBeGreaterThanOrEqual(min); - expect(value).toBeLessThanOrEqual(max); - }); - }); - }); - - describe("Odd Range Handling (Prime)", () => { - it("Should handle odd range correctly", () => { - // Range 0-9 has difference of 9 (odd) - for (let index = 0; index <= 9; index++) { - const encoded = encode({ min: 0, max: 9, index }); - const decoded = decode({ min: 0, max: 9, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("Should handle large odd range", () => { - const min = 0; - const max = 999; // difference of 999 (odd) - const testIndices = [0, 100, 500, 999]; - - testIndices.forEach(index => { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - }); - }); - }); - - describe("Real-world Use Cases", () => { - it("Should work for pagination shuffling", () => { - // Shuffle page numbers 1-100 - const min = 1; - const max = 100; - const pageNumbers = [1, 25, 50, 75, 100]; - - pageNumbers.forEach(page => { - const shuffled = encode({ min, max, index: page }); - const original = decode({ min, max, index: shuffled }); - expect(original).toBe(page); - }); - }); - - it("Should work for ID obfuscation", () => { - // Obfuscate sequential IDs - const min = 1000; - const max = 9999; - const privateKey = "secret-api-key"; - - const ids = [1000, 2500, 5000, 7500, 9999]; - - ids.forEach(id => { - const obfuscated = encode({ min, max, index: id, privateKey }); - const revealed = decode({ min, max, index: obfuscated, privateKey }); - expect(revealed).toBe(id); - expect(obfuscated).not.toBe(id); // Should be different - }); - }); - }); -}); diff --git a/packages/pseudo-shuffle/test/edge-cases-test.ts b/packages/pseudo-shuffle/test/edge-cases-test.ts deleted file mode 100644 index 8d4d1d9..0000000 --- a/packages/pseudo-shuffle/test/edge-cases-test.ts +++ /dev/null @@ -1,306 +0,0 @@ -import { encode, decode } from "pseudo-shuffle"; - -describe("pseudo-shuffle - Edge Cases & Special Scenarios", () => { - describe("Floating Point Numbers", () => { - it("Should handle integer values only (floats get truncated by FPE)", () => { - // The underlying FPE library works with integers - const min = 0; - const max = 100; - - // Test with integer - const encoded = encode({ min, max, index: 50 }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(50); - }); - }); - - describe("Zero and Negative Ranges", () => { - it("Should handle range starting at zero", () => { - const testCases = [ - { min: 0, max: 10 }, - { min: 0, max: 100 }, - { min: 0, max: 1000 }, - ]; - - testCases.forEach(({ min, max }) => { - const encoded = encode({ min, max, index: 0 }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(0); - }); - }); - - it("Should handle entirely negative ranges", () => { - const testCases = [ - { min: -100, max: -10 }, - { min: -50, max: -5 }, - { min: -1000, max: -100 }, - ]; - - testCases.forEach(({ min, max }) => { - for (let index = min; index <= max; index += 10) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - - it("Should handle range crossing zero", () => { - const min = -50; - const max = 50; - const testIndices = [-50, -25, 0, 25, 50]; - - testIndices.forEach(index => { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - }); - }); - }); - - describe("Single Value Range", () => { - it("Should handle range with single value (min === max)", () => { - const value = 42; - const encoded = encode({ min: value, max: value, index: value }); - const decoded = decode({ min: value, max: value, index: encoded }); - - expect(encoded).toBe(value); - expect(decoded).toBe(value); - }); - }); - - describe("Consecutive Ranges", () => { - it("Should handle consecutive small ranges", () => { - for (let start = 0; start < 100; start += 10) { - const min = start; - const max = start + 10; - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - } - }); - }); - - describe("Key Sensitivity", () => { - it("Should produce consistent results with same key", () => { - const min = 0; - const max = 100; - const index = 50; - const key = "my-consistent-key"; - - const encoded1 = encode({ min, max, index, privateKey: key }); - const encoded2 = encode({ min, max, index, privateKey: key }); - const encoded3 = encode({ min, max, index, privateKey: key }); - - // Same key should always produce same result - expect(encoded1).toBe(encoded2); - expect(encoded2).toBe(encoded3); - }); - - it("Should require exact key match for decoding", () => { - const min = 0; - const max = 100; - const index = 50; - const correctKey = "correct-key-that-is-very-unique"; - const wrongKey = "wrong-key-that-is-also-very-unique"; - - const encoded = encode({ min, max, index, privateKey: correctKey }); - - // Correct key should decode properly - const correctDecode = decode({ min, max, index: encoded, privateKey: correctKey }); - expect(correctDecode).toBe(index); - - // Wrong key should produce different result - const wrongDecode = decode({ min, max, index: encoded, privateKey: wrongKey }); - // The decoded value should be in range but different from original - expect(wrongDecode).toBeGreaterThanOrEqual(min); - expect(wrongDecode).toBeLessThanOrEqual(max); - }); - }); - - describe("Symmetry Tests", () => { - it("Should maintain encode-decode symmetry for all values in range", () => { - const ranges = [ - { min: 0, max: 20 }, - { min: -10, max: 10 }, - { min: 100, max: 120 }, - ]; - - ranges.forEach(({ min, max }) => { - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - }); - - describe("Range Validation", () => { - it("Should handle inverted range gracefully (min > max)", () => { - // This is technically invalid input, but let's see how it behaves - const min = 100; - const max = 10; - const index = 50; - - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - - // Should return index as-is since range is invalid (difference < 3) - expect(encoded).toBe(index); - expect(decoded).toBe(index); - }); - }); - - describe("Collision Testing", () => { - it("Should not have collisions within range", () => { - const min = 0; - const max = 100; - const encodedMap = new Map(); - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - - // Check no collision - expect(encodedMap.has(encoded)).toBe(false); - encodedMap.set(encoded, index); - } - - // Verify all values were encoded - expect(encodedMap.size).toBe(max - min + 1); - }); - - it("Should produce bijective mapping (one-to-one)", () => { - const min = 0; - const max = 50; - const originalToEncoded = new Map(); - const encodedToOriginal = new Map(); - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - originalToEncoded.set(index, encoded); - encodedToOriginal.set(encoded, index); - } - - // Both maps should have same size (bijective) - expect(originalToEncoded.size).toBe(max - min + 1); - expect(encodedToOriginal.size).toBe(max - min + 1); - }); - }); - - describe("Performance Characteristics", () => { - it("Should handle rapid successive calls", () => { - const min = 0; - const max = 100; - const iterations = 1000; - - for (let i = 0; i < iterations; i++) { - const index = Math.floor(Math.random() * (max - min + 1)) + min; - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Empty String Keys", () => { - it("Should handle empty string as key", () => { - const min = 0; - const max = 50; - const index = 25; - - const encoded = encode({ min, max, index, privateKey: "" }); - const decoded = decode({ min, max, index: encoded, privateKey: "" }); - - expect(decoded).toBe(index); - }); - - it("Should handle empty string consistently", () => { - const min = 0; - const max = 50; - const index = 25; - - const encoded1 = encode({ min, max, index, privateKey: "" }); - const encoded2 = encode({ min, max, index, privateKey: "" }); - - // Same key should produce same result - expect(encoded1).toBe(encoded2); - }); - }); - - describe("Special Key Characters", () => { - it("Should handle special characters in keys", () => { - const specialKeys = [ - "key!@#$%^&*()", - "key with spaces", - "key\twith\ttabs", - "key-with-dashes", - "key_with_underscores", - "key.with.dots", - "๐Ÿ”‘emoji-key", - ]; - - const min = 0; - const max = 50; - const index = 25; - - specialKeys.forEach(key => { - const encoded = encode({ min, max, index, privateKey: key }); - const decoded = decode({ min, max, index: encoded, privateKey: key }); - expect(decoded).toBe(index); - }); - }); - }); - - describe("Range Boundary Combinations", () => { - it("Should handle various range sizes correctly", () => { - const rangeSizes = [4, 5, 10, 11, 50, 51, 100, 101, 500, 501]; - - rangeSizes.forEach(size => { - const min = 0; - const max = size - 1; - const testIndices = [min, Math.floor(size / 2), max]; - - testIndices.forEach(index => { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - }); - }); - }); - }); - - describe("Consistency Across Multiple Calls", () => { - it("Should produce consistent results across multiple encode calls", () => { - const min = 0; - const max = 100; - const index = 42; - const iterations = 100; - - const firstEncoded = encode({ min, max, index }); - - for (let i = 0; i < iterations; i++) { - const encoded = encode({ min, max, index }); - expect(encoded).toBe(firstEncoded); - } - }); - - it("Should produce consistent results across multiple decode calls", () => { - const min = 0; - const max = 100; - const index = 42; - const iterations = 100; - - const encoded = encode({ min, max, index }); - const firstDecoded = decode({ min, max, index: encoded }); - - for (let i = 0; i < iterations; i++) { - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(firstDecoded); - } - }); - }); -}); diff --git a/packages/pseudo-shuffle/test/pseudo-shuffle.browser.test.ts b/packages/pseudo-shuffle/test/pseudo-shuffle.browser.test.ts deleted file mode 100644 index f77d866..0000000 --- a/packages/pseudo-shuffle/test/pseudo-shuffle.browser.test.ts +++ /dev/null @@ -1,299 +0,0 @@ -// @ts-ignore - Jest requires import without .js extension -import { encode, decode } from "../src/pseudo-shuffle-browser"; - -describe("pseudo-shuffle-browser", () => { - describe("Basic encode/decode functionality", () => { - it("should correctly encode and decode values in range", async () => { - const min = -5; - const max = 100; - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle positive range (0-50)", async () => { - const min = 0; - const max = 50; - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle negative range (-100 to -50)", async () => { - const min = -100; - const max = -50; - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Edge cases", () => { - it("should return original value for ranges smaller than 4", async () => { - // Range difference < 3 should return original value - expect(await encode({ min: 0, max: 2, index: 1 })).toBe(1); - expect(await encode({ min: 5, max: 7, index: 6 })).toBe(6); - expect(await decode({ min: 0, max: 2, index: 1 })).toBe(1); - }); - - it("should handle minimum valid range (difference of 4)", async () => { - const min = 0; - const max = 4; - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle boundary values", async () => { - const min = -5; - const max = 100; - - // Test min boundary - const encodedMin = await encode({ min, max, index: min }); - expect(await decode({ min, max, index: encodedMin })).toBe(min); - - // Test max boundary - const encodedMax = await encode({ min, max, index: max }); - expect(await decode({ min, max, index: encodedMax })).toBe(max); - }); - }); - - describe("Out of range values", () => { - it("should return original value for indices below min", async () => { - const min = 0; - const max = 100; - const belowMin = -10; - - expect(await encode({ min, max, index: belowMin })).toBe(belowMin); - expect(await decode({ min, max, index: belowMin })).toBe(belowMin); - }); - - it("should return original value for indices above max (encode)", async () => { - const min = 0; - const max = 100; - const aboveMax = 150; - - expect(await encode({ min, max, index: aboveMax })).toBe(aboveMax); - }); - }); - - describe("Custom keys", () => { - it("should produce different results with different private keys", async () => { - const min = 0; - const max = 99; // Use odd range to avoid middle value special case - const index = 50; - - const encoded1 = await encode({ min, max, index, privateKey: "key1" }); - const encoded2 = await encode({ min, max, index, privateKey: "key2" }); - - expect(encoded1).not.toBe(encoded2); - }); - - it("should produce different results with different public keys", async () => { - const min = 0; - const max = 99; // Use odd range to avoid middle value special case - const index = 50; - - const encoded1 = await encode({ min, max, index, publicKey: "key1" }); - const encoded2 = await encode({ min, max, index, publicKey: "key2" }); - - expect(encoded1).not.toBe(encoded2); - }); - - it("should correctly decode with matching custom keys", async () => { - const min = 0; - const max = 99; // Use odd range for consistent behavior - const privateKey = "my-private-key"; - const publicKey = "my-public-key"; - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index, privateKey, publicKey }); - const decoded = await decode({ - min, - max, - index: encoded, - privateKey, - publicKey, - }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Even vs Odd range handling", () => { - it("should handle even range differences", async () => { - const min = 0; - const max = 10; // difference is 10 (even) - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle odd range differences", async () => { - const min = 0; - const max = 11; // difference is 11 (odd) - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Shuffle properties", () => { - it("should produce unique encoded values for all indices in range", async () => { - const min = 0; - const max = 50; - const encodedValues = new Set(); - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index }); - expect(encodedValues.has(encoded)).toBe(false); - encodedValues.add(encoded); - } - - expect(encodedValues.size).toBe(max - min + 1); - }); - - it("should keep encoded values within the same range", async () => { - const min = 10; - const max = 100; - - for (let index = min; index <= max; index++) { - const encoded = await encode({ min, max, index }); - expect(encoded).toBeGreaterThanOrEqual(min); - expect(encoded).toBeLessThanOrEqual(max); - } - }); - - it("should produce different encoded values for consecutive indices", async () => { - const min = 0; - const max = 100; - - for (let index = min; index < max; index++) { - const encoded1 = await encode({ min, max, index }); - const encoded2 = await encode({ min, max, index: index + 1 }); - expect(encoded1).not.toBe(encoded2); - } - }); - }); - - describe("Large range handling", () => { - it("should handle large positive ranges", async () => { - const min = 0; - const max = 1000; - const testIndices = [0, 250, 500, 750, 1000]; - - for (const index of testIndices) { - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle large negative ranges", async () => { - const min = -1000; - const max = -500; - const testIndices = [-1000, -875, -750, -625, -500]; - - for (const index of testIndices) { - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Browser-specific tests", () => { - it("should return Promises", () => { - const result = encode({ min: 0, max: 100, index: 50 }); - expect(result).toBeInstanceOf(Promise); - }); - - it("should work with Promise.all for parallel operations", async () => { - const min = 0; - const max = 100; - const indices = [10, 20, 30, 40, 50]; - - const encodedResults = await Promise.all( - indices.map((index) => encode({ min, max, index })) - ); - - const decodedResults = await Promise.all( - encodedResults.map((encoded) => decode({ min, max, index: encoded })) - ); - - expect(decodedResults).toEqual(indices); - }); - - it("should handle concurrent encode/decode operations", async () => { - const min = 0; - const max = 50; - const operations = []; - - for (let i = min; i <= max; i++) { - operations.push( - encode({ min, max, index: i }).then((encoded) => - decode({ min, max, index: encoded }) - ) - ); - } - - const results = await Promise.all(operations); - const expected = Array.from({ length: max - min + 1 }, (_, i) => i + min); - expect(results).toEqual(expected); - }); - }); - - describe("Compatibility with Node.js version", () => { - it("should produce same results as Node.js version for basic case", async () => { - // These expected values should match the Node.js version output - const min = 0; - const max = 100; - const index = 42; - - const encoded = await encode({ min, max, index }); - const decoded = await decode({ min, max, index: encoded }); - - // The encoded value should be deterministic - expect(decoded).toBe(index); - expect(encoded).toBeGreaterThanOrEqual(min); - expect(encoded).toBeLessThanOrEqual(max); - }); - - it("should produce same results with custom keys", async () => { - const min = 0; - const max = 99; - const index = 50; - const privateKey = "test-private-key"; - const publicKey = "test-public-key"; - - const encoded = await encode({ min, max, index, privateKey, publicKey }); - const decoded = await decode({ - min, - max, - index: encoded, - privateKey, - publicKey, - }); - - expect(decoded).toBe(index); - }); - }); -}); diff --git a/packages/pseudo-shuffle/test/pseudo-shuffle.test.ts b/packages/pseudo-shuffle/test/pseudo-shuffle.test.ts deleted file mode 100644 index a188152..0000000 --- a/packages/pseudo-shuffle/test/pseudo-shuffle.test.ts +++ /dev/null @@ -1,221 +0,0 @@ -import { encode, decode } from "pseudo-shuffle"; - -describe("pseudo-shuffle", () => { - describe("Basic encode/decode functionality", () => { - it("should correctly encode and decode values in range", () => { - const min = -5; - const max = 100; - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle positive range (0-50)", () => { - const min = 0; - const max = 50; - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle negative range (-100 to -50)", () => { - const min = -100; - const max = -50; - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Edge cases", () => { - it("should return original value for ranges smaller than 4", () => { - // Range difference < 3 should return original value - expect(encode({ min: 0, max: 2, index: 1 })).toBe(1); - expect(encode({ min: 5, max: 7, index: 6 })).toBe(6); - expect(decode({ min: 0, max: 2, index: 1 })).toBe(1); - }); - - it("should handle minimum valid range (difference of 4)", () => { - const min = 0; - const max = 4; - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle boundary values", () => { - const min = -5; - const max = 100; - - // Test min boundary - const encodedMin = encode({ min, max, index: min }); - expect(decode({ min, max, index: encodedMin })).toBe(min); - - // Test max boundary - const encodedMax = encode({ min, max, index: max }); - expect(decode({ min, max, index: encodedMax })).toBe(max); - }); - }); - - describe("Out of range values", () => { - it("should return original value for indices below min", () => { - const min = 0; - const max = 100; - const belowMin = -10; - - expect(encode({ min, max, index: belowMin })).toBe(belowMin); - expect(decode({ min, max, index: belowMin })).toBe(belowMin); - }); - - it("should return original value for indices above max (encode)", () => { - const min = 0; - const max = 100; - const aboveMax = 150; - - expect(encode({ min, max, index: aboveMax })).toBe(aboveMax); - }); - }); - - describe("Custom keys", () => { - it("should produce different results with different private keys", () => { - const min = 0; - const max = 99; // Use odd range to avoid middle value special case - const index = 50; - - const encoded1 = encode({ min, max, index, privateKey: "key1" }); - const encoded2 = encode({ min, max, index, privateKey: "key2" }); - - expect(encoded1).not.toBe(encoded2); - }); - - it("should produce different results with different public keys", () => { - const min = 0; - const max = 99; // Use odd range to avoid middle value special case - const index = 50; - - const encoded1 = encode({ min, max, index, publicKey: "key1" }); - const encoded2 = encode({ min, max, index, publicKey: "key2" }); - - expect(encoded1).not.toBe(encoded2); - }); - - it("should correctly decode with matching custom keys", () => { - const min = 0; - const max = 99; // Use odd range for consistent behavior - const privateKey = "my-private-key"; - const publicKey = "my-public-key"; - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index, privateKey, publicKey }); - const decoded = decode({ - min, - max, - index: encoded, - privateKey, - publicKey, - }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Even vs Odd range handling", () => { - it("should handle even range differences", () => { - const min = 0; - const max = 10; // difference is 10 (even) - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - - it("should handle odd range differences", () => { - const min = 0; - const max = 11; // difference is 11 (odd) - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - } - }); - }); - - describe("Shuffle properties", () => { - it("should produce unique encoded values for all indices in range", () => { - const min = 0; - const max = 50; - const encodedValues = new Set(); - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - expect(encodedValues.has(encoded)).toBe(false); - encodedValues.add(encoded); - } - - expect(encodedValues.size).toBe(max - min + 1); - }); - - it("should keep encoded values within the same range", () => { - const min = 10; - const max = 100; - - for (let index = min; index <= max; index++) { - const encoded = encode({ min, max, index }); - expect(encoded).toBeGreaterThanOrEqual(min); - expect(encoded).toBeLessThanOrEqual(max); - } - }); - - it("should produce different encoded values for consecutive indices", () => { - const min = 0; - const max = 100; - - for (let index = min; index < max; index++) { - const encoded1 = encode({ min, max, index }); - const encoded2 = encode({ min, max, index: index + 1 }); - expect(encoded1).not.toBe(encoded2); - } - }); - }); - - describe("Large range handling", () => { - it("should handle large positive ranges", () => { - const min = 0; - const max = 1000; - const testIndices = [0, 250, 500, 750, 1000]; - - testIndices.forEach((index) => { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - }); - }); - - it("should handle large negative ranges", () => { - const min = -1000; - const max = -500; - const testIndices = [-1000, -875, -750, -625, -500]; - - testIndices.forEach((index) => { - const encoded = encode({ min, max, index }); - const decoded = decode({ min, max, index: encoded }); - expect(decoded).toBe(index); - }); - }); - }); -}); diff --git a/packages/pseudo-shuffle/test/setup-browser.ts b/packages/pseudo-shuffle/test/setup-browser.ts deleted file mode 100644 index 2f4938a..0000000 --- a/packages/pseudo-shuffle/test/setup-browser.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Setup file for browser-specific tests - * Polyfills Web Crypto API for Node.js test environment - */ - -import { webcrypto } from "crypto"; - -// Polyfill Web Crypto API for Node.js environment -if (typeof global !== "undefined" && !global.crypto) { - (global as any).crypto = webcrypto; -} diff --git a/packages/pseudo-shuffle/test/setup.ts b/packages/pseudo-shuffle/test/setup.ts deleted file mode 100644 index 635bc10..0000000 --- a/packages/pseudo-shuffle/test/setup.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Suppress the bigint-buffer warning from @trufflesuite/bigint-buffer -const originalWarn = console.warn; - -console.warn = (...args: any[]) => { - const message = args[0]?.toString() || ''; - - // Filter out the bigint-buffer warning - if (message.includes('bigint: Failed to load bindings')) { - return; - } - - // Allow all other warnings - originalWarn.apply(console, args); -}; diff --git a/packages/pseudo-shuffle/tsconfig.json b/packages/pseudo-shuffle/tsconfig.json deleted file mode 100644 index 131faf6..0000000 --- a/packages/pseudo-shuffle/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "@sindresorhus/tsconfig", - "compilerOptions": { - "outDir": "dist", - "rootDir": ".", - "baseUrl": ".", - "strict": false, - "types": [ - "node", - "jest" - ], - "paths": { - "pseudo-shuffle": ["./dist/pseudo-shuffle.cjs"] - } - }, - "include": [ - "src/**/*", - "test/**/*" - ] -} \ No newline at end of file diff --git a/packages/usernamer/.gitignore b/packages/usernamer/.gitignore deleted file mode 100644 index e36c624..0000000 --- a/packages/usernamer/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -dist/ -*.log -.DS_Store -coverage/ -.env diff --git a/packages/usernamer/.npmignore b/packages/usernamer/.npmignore deleted file mode 100644 index 91bfea9..0000000 --- a/packages/usernamer/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -src/ -test/ -tsconfig.json -jest.config.js -*.test.ts -.gitignore -.DS_Store -coverage/ diff --git a/packages/usernamer/LICENSE b/packages/usernamer/LICENSE deleted file mode 100644 index b698d17..0000000 --- a/packages/usernamer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2025 hmmhmmhm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/usernamer/README.md b/packages/usernamer/README.md deleted file mode 100644 index 375c1aa..0000000 --- a/packages/usernamer/README.md +++ /dev/null @@ -1,251 +0,0 @@ -# Usernamer - -Generate memorable usernames from numbers using multi-level word combinations in Korean and English. - -## Features - -- **Deterministic**: Same number always generates the same username -- **Multi-language**: Supports Korean and English -- **Tree-shakable**: Only loads the language data you need -- **Universal**: Works in both Node.js and browsers -- **Type-safe**: Written in TypeScript with full type definitions -- **Large range**: Supports 0 to 100,000,000+ (1์–ต+) - -## Installation - -```bash -npm install usernamer -# or -pnpm add usernamer -# or -yarn add usernamer -``` - -## Usage - -### CLI - -You can use the CLI to quickly test encoding and decoding (default language: English): - -```bash -# Encode a number to username (default: English) -npx usernamer encode -l en 0 -# Output: alpaca - -npx usernamer encode -l en 100 -# Output: adorable alpaca - -npx usernamer encode -l en 10000 -# Output: wearing hat alpaca - -npx usernamer encode -l en 1000000 -# Output: sunny day alpaca - -npx usernamer encode -l en 10000000 -# Output: winter day alpaca - -# Encode with Korean -npx usernamer encode -l ko 0 -# Output: ์•ŒํŒŒ์นด - -npx usernamer encode -l ko 100 -# Output: ๊ท€์—ฌ์šด ์•ŒํŒŒ์นด - -npx usernamer encode -l ko 10000 -# Output: ๋ชจ์ž๋ฅผ ์“ด ์•ŒํŒŒ์นด - -npx usernamer encode -l ko 1000000 -# Output: ๋ง‘์€ ๋‚  ์•ŒํŒŒ์นด - -npx usernamer encode -l ko 10000000 -# Output: ๊ฒจ์šธ๋‚ ์˜ ์•ŒํŒŒ์นด - -# Decode a username back to number -npx usernamer decode "adorable alpaca" -# Output: 100 - -# Decode Korean username -npx usernamer decode "๊ท€์—ฌ์šด ์•ŒํŒŒ์นด" --language korean -npx usernamer decode "๊ท€์—ฌ์šด ์•ŒํŒŒ์นด" -l ko -# Output: 100 - -# Show encoding information -npx usernamer info - -# Show help -npx usernamer --help -``` - -**Language Options:** -- `--language korean` or `-l ko` for Korean -- `--language english` or `-l en` for English (default) - -### Basic Example - -```typescript -// English (default) -import { encode, decode } from 'usernamer'; - -encode(0); // "alpaca" -encode(100); // "adorable alpaca" -encode(10000); // "wearing hat alpaca" -encode(1000000); // "sunny day alpaca" -encode(10000000); // "winter day alpaca" - -// Decode usernames back to numbers -decode("alpaca"); // 0 -decode("adorable alpaca"); // 100 -decode("sunny day alpaca"); // 1000000 -decode("winter day alpaca"); // 10000000 -``` - -### Korean Support - -```typescript -// Korean -import { encode, decode } from 'usernamer/ko'; - -encode(0); // "์•ŒํŒŒ์นด" -encode(100); // "๊ท€์—ฌ์šด ์•ŒํŒŒ์นด" -encode(10000); // "๋ชจ์ž๋ฅผ ์“ด ์•ŒํŒŒ์นด" -encode(1000000); // "๋ง‘์€ ๋‚  ์•ŒํŒŒ์นด" -encode(10000000); // "๊ฒจ์šธ๋‚ ์˜ ์•ŒํŒŒ์นด" - -// Decode -decode("์•ŒํŒŒ์นด"); // 0 -decode("๊ท€์—ฌ์šด ์•ŒํŒŒ์นด"); // 100 -decode("๋ง‘์€ ๋‚  ์•ŒํŒŒ์นด"); // 1000000 -decode("๊ฒจ์šธ๋‚ ์˜ ์•ŒํŒŒ์นด"); // 10000000 -``` - -**Bundle Size:** -- `usernamer` (English): ~3.4 KB gzipped -- `usernamer/ko` (Korean): ~4.1 KB gzipped - -### Overflow Handling - -For numbers >= 100,000,000 (1์–ต), a numeric suffix is automatically added: - -```typescript -// English -import { encode, decode } from 'usernamer'; -encode(100000000); // "winter day alpaca 0" -encode(123456789); // "snowy day holding letter clever seahorse 9" - -// Korean -import { encode as encodeKo, decode as decodeKo } from 'usernamer/ko'; -encodeKo(100000000); // "๊ฒจ์šธ๋‚ ์˜ ์•ŒํŒŒ์นด 0" -encodeKo(123456789); // "๋ˆˆ ์˜ค๋Š” ๋‚ ์˜ ํŽธ์ง€๋ฅผ ๋“  ์ด๋ช…ํ•œ ํ•ด๋งˆ 9" -``` - -### Utility Functions - -```typescript -import { getMaxCombinableIndex, requiresSuffix } from 'usernamer'; - -// Get maximum index without numeric suffix -getMaxCombinableIndex(); // 100000000 - -// Check if an index requires a suffix -requiresSuffix(99999999); // false -requiresSuffix(100000000); // true -``` - -## How It Works - -The generator uses 4 levels of words, each containing 100 items: - -- **Level 1**: Base nouns (animals, objects) -- **Level 2**: Adjectives (cute, lovely, etc.) -- **Level 3**: Actions or accessories (wearing a hat, holding a flower, etc.) -- **Level 4**: Contexts or themes (sunny day, spring season, etc.) - -Numbers are encoded in base-100 using these levels: - -``` -index = level4 ร— 100ยณ + level3 ร— 100ยฒ + level2 ร— 100 + level1 -``` - -### Korean Format -``` -"level4 level3 level2 level1" -"๋ง‘์€ ๋‚  ๋ชจ์ž๋ฅผ ์“ด ๊ท€์—ฌ์šด ์•ŒํŒŒ์นด" -``` - -### English Format -``` -"level4 level3 level2 level1" -"sunny day hat-wearing adorable alpaca" -``` - -## API - -### `encode(index: number, language?: Language): string` - -Encodes a number into a memorable username. - -- **index**: Number to encode (0 to any positive integer) -- **language**: `'korean'` or `'english'` (default: `'korean'`) -- **Returns**: Generated username - -### `decode(username: string, language?: Language): number` - -Decodes a username back to its original number. - -- **username**: Username to decode -- **language**: `'korean'` or `'english'` (default: `'korean'`) -- **Returns**: Original index number - -### `getMaxCombinableIndex(): number` - -Returns the maximum index that can be encoded without a numeric suffix (100,000,000). - -### `requiresSuffix(index: number): boolean` - -Checks if an index will require a numeric suffix. - -## Browser Support - -The package works in all modern browsers that support ES modules. - -```html - - - -``` - -## Development - -```bash -# Install dependencies -pnpm install - -# Build -pnpm run build - -# Test -pnpm run test - -# Watch mode -pnpm run watch -``` - -## License - -MIT - -## Author - -hmmhmmhm diff --git a/packages/usernamer/data/english/level1.json b/packages/usernamer/data/english/level1.json deleted file mode 100644 index cb87593..0000000 --- a/packages/usernamer/data/english/level1.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - "alpaca", - "kitten", - "bunny", - "puppy", - "squirrel", - "panda", - "teddy bear", - "hamster", - "otter", - "hedgehog", - "penguin", - "owl", - "fox", - "raccoon", - "guinea pig", - "kangaroo", - "koala", - "seal", - "dolphin", - "goldfish", - "meerkat", - "parrot", - "sparrow", - "chick", - "duckling", - "gosling", - "arctic fox", - "giraffe", - "elephant", - "hippo", - "mole", - "crane", - "swan", - "deer", - "fawn", - "reindeer", - "kingfisher", - "sea otter", - "sea lion", - "corgi", - "capybara", - "tree frog", - "snail", - "lamb", - "butterfly", - "bumblebee", - "polar bear", - "whale", - "beaver", - "arctic hare", - "chinchilla", - "woodpecker", - "bluebird", - "magpie", - "whale shark", - "mouse", - "lizard", - "turtle", - "tortoise", - "sea turtle", - "chameleon", - "flamingo", - "canary", - "chipmunk", - "weasel", - "badger", - "octopus", - "seahorse", - "jellyfish", - "seagull", - "mandarin duck", - "monkey", - "chimpanzee", - "red panda", - "cottontail", - "swallow", - "dove", - "poodle", - "llama", - "donkey", - "foal", - "calf", - "stingray", - "catfish", - "tiger cub", - "lion cub", - "bear cub", - "piglet", - "tadpole", - "froglet", - "starfish", - "clownfish", - "angelfish", - "peacock", - "hummingbird", - "robin", - "chickadee", - "finch", - "ladybug", - "dragonfly" -] diff --git a/packages/usernamer/data/english/level2.json b/packages/usernamer/data/english/level2.json deleted file mode 100644 index 541a776..0000000 --- a/packages/usernamer/data/english/level2.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - "adorable", - "lovely", - "cozy", - "fluffy", - "chubby", - "tiny", - "smiling", - "gentle", - "sweet", - "kind", - "cheerful", - "playful", - "brave", - "mischievous", - "quirky", - "shy", - "sparkling", - "bright-eyed", - "fresh", - "lively", - "warm", - "peaceful", - "calm", - "relaxed", - "energetic", - "jolly", - "merry", - "happy", - "radiant", - "beloved", - "colorful", - "pastel", - "sweet-scented", - "sugary", - "crisp", - "soft", - "charming", - "witty", - "clever", - "innocent", - "pure", - "breezy", - "elegant", - "delicate", - "whimsical", - "dreamy", - "curious", - "smart", - "bashful", - "tender", - "sentimental", - "romantic", - "serene", - "leisurely", - "welcoming", - "joyful", - "friendly", - "rosy-cheeked", - "blissful", - "subtle", - "glittering", - "dazzling", - "pretty", - "cuddly", - "bouncy", - "giggly", - "dewy", - "affectionate", - "petite", - "crescent-eyed", - "grinning", - "sleepy", - "drowsy", - "clumsy", - "bubbly", - "spirited", - "sunny", - "starry", - "cloudy", - "spring-scented", - "gleeful", - "twinkly", - "perky", - "docile", - "toasty", - "beaming", - "bouncing", - "following", - "hopeful", - "optimistic", - "grateful", - "blessed", - "lucky", - "magical", - "enchanting", - "delightful", - "heartwarming", - "precious", - "treasured", - "cherished" -] diff --git a/packages/usernamer/data/english/level3.json b/packages/usernamer/data/english/level3.json deleted file mode 100644 index e4c55ac..0000000 --- a/packages/usernamer/data/english/level3.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - "wearing hat", - "wearing ribbon", - "wearing glasses", - "wearing scarf", - "wearing gloves", - "wearing earmuffs", - "wearing cape", - "carrying backpack", - "wearing badge", - "wearing bow tie", - "holding flower", - "wearing crown", - "wearing clip", - "wearing hoodie", - "wearing beret", - "wearing sunglasses", - "wearing earrings", - "wearing bracelet", - "wearing necklace", - "wearing watch", - "holding umbrella", - "holding balloon", - "holding candy", - "holding ice cream", - "holding donut", - "holding cookie", - "holding coffee", - "holding milk", - "holding book", - "holding pencil", - "holding flowers", - "holding flag", - "holding gift", - "holding letter", - "holding camera", - "holding map", - "hugging doll", - "wrapped in blanket", - "hugging pillow", - "hugging star", - "hugging heart", - "wearing bunny ears", - "wearing party hat", - "wearing birthday hat", - "winking", - "making heart", - "waving", - "hands together", - "sleeping", - "yawning", - "stretching", - "dancing", - "singing", - "running", - "hopping", - "walking", - "picnicking", - "stargazing", - "daydreaming", - "writing", - "drawing", - "taking selfie", - "taking photo", - "fishing", - "skating", - "roller skating", - "biking", - "scootering", - "cloud gazing", - "rainbow gazing", - "blowing bubbles", - "flying kite", - "making snowman", - "catching snow", - "blossom viewing", - "leaf walking", - "sunflower gazing", - "feeling breeze", - "wave listening", - "castle building", - "shell collecting", - "meteor watching", - "growing sprouts", - "with plant pot", - "growing cactus", - "leaf shaking", - "rain sheltering", - "cooking", - "baking bread", - "baking cake", - "blowing candles", - "gift wrapping", - "sketching", - "star finding", - "puzzle solving", - "block building", - "story reading", - "tea sipping", - "cloud watching", - "bird watching" -] diff --git a/packages/usernamer/data/english/level4.json b/packages/usernamer/data/english/level4.json deleted file mode 100644 index c8c39d0..0000000 --- a/packages/usernamer/data/english/level4.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - "sunny day", - "weekend", - "morning", - "lunchtime", - "evening", - "dawn", - "spring day", - "summer night", - "autumn day", - "winter day", - "rainy day", - "snowy day", - "first snow", - "clear sky", - "windy day", - "rainbow day", - "holiday", - "vacation", - "festival", - "birthday party", - "Christmas", - "Halloween", - "New Year", - "year end", - "cherry blossom", - "fall foliage", - "snowflake time", - "flower path", - "forest", - "beach", - "seaside", - "lakeside", - "riverside", - "trail", - "park", - "playground", - "garden", - "city", - "alley", - "campsite", - "picnic", - "field trip", - "journey", - "train ride", - "bike trip", - "sky blue", - "mint", - "lilac", - "pink", - "yellow", - "watercolor", - "retro", - "vintage", - "classic", - "adventure", - "fairy", - "wizard", - "pirate", - "space", - "ocean", - "woodland", - "fairy tale", - "dreamland", - "space trip", - "theme park", - "aquarium", - "zoo", - "museum", - "library", - "cafe", - "bakery", - "market", - "toy store", - "stationery", - "bookstore", - "concert", - "cinema", - "music fest", - "sketchbook", - "photo diary", - "birthday eve", - "surprise party", - "first meet", - "welcome party", - "graduation", - "entrance day", - "hideout", - "with friends", - "with family", - "selfie time", - "rest time", - "nap time", - "tea time", - "snack time", - "campfire", - "fireworks", - "night market", - "new year", - "celebration", - "carnival" -] diff --git a/packages/usernamer/data/korean/level1.json b/packages/usernamer/data/korean/level1.json deleted file mode 100644 index 0fe0652..0000000 --- a/packages/usernamer/data/korean/level1.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - "์•ŒํŒŒ์นด", - "๊ณ ์–‘์ด", - "ํ† ๋ผ", - "๊ฐ•์•„์ง€", - "๋‹ค๋žŒ์ฅ", - "ํŒ๋‹ค", - "๊ณฐ๋Œ์ด", - "ํ–„์Šคํ„ฐ", - "์ˆ˜๋‹ฌ", - "๊ณ ์Šด๋„์น˜", - "ํŽญ๊ท„", - "๋ถ€์—‰์ด", - "์˜ฌ๋นผ๋ฏธ", - "์—ฌ์šฐ", - "๋„ˆ๊ตฌ๋ฆฌ", - "๋ผ์ฟค", - "์‚ฌ๋ง‰์—ฌ์šฐ", - "๊ธฐ๋‹ˆํ”ผ๊ทธ", - "์บฅ๊ฑฐ๋ฃจ", - "์ฝ”์•Œ๋ผ", - "๋ฐ”๋‹คํ‘œ๋ฒ”", - "๋ฌผ๋ฒ”", - "๋ฌผ๊ฐœ", - "๋Œ๊ณ ๋ž˜", - "๊ธˆ๋ถ•์–ด", - "๋ฏธ์–ด์บฃ", - "์•ต๋ฌด์ƒˆ", - "์ฐธ์ƒˆ", - "๋ณ‘์•„๋ฆฌ", - "์˜ค๋ฆฌ", - "๊ฑฐ์œ„", - "๋ถ๊ทน์—ฌ์šฐ", - "๊ธฐ๋ฆฐ", - "์ฝ”๋ผ๋ฆฌ", - "ํ•˜๋งˆ", - "๋‘๋”์ง€", - "๋‘๋ฃจ๋ฏธ", - "๋ฐฑ์กฐ", - "๊ณ ๋ผ๋‹ˆ", - "์‚ฌ์Šด", - "๋…ธ๋ฃจ", - "์ˆœ๋ก", - "๋ฌผ์ด์ƒˆ", - "ํ•ด๋‹ฌ", - "๋ฐ”๋‹ค์‚ฌ์ž", - "์›ฐ์‹œ์ฝ”๊ธฐ", - "์นดํ”ผ๋ฐ”๋ผ", - "์ฒญ๊ฐœ๊ตฌ๋ฆฌ", - "๋‹ฌํŒฝ์ด", - "์–‘", - "๋‚˜๋น„", - "๊ฟ€๋ฒŒ", - "๋ถ๊ทน๊ณฐ", - "๊ณ ๋ž˜", - "๋น„๋ฒ„", - "๋งํ‹ฐ์ฆˆ", - "๋ถ๊ทนํ† ๋ผ", - "์นœ์น ๋ผ", - "๋”ฑ๋”ฐ๊ตฌ๋ฆฌ", - "ํŒŒ๋ž‘์ƒˆ", - "๊นŒ์น˜", - "๊นŒ๋งˆ๊ท€", - "๊ณ ๋ž˜์ƒ์–ด", - "์ฅ", - "๋„๋งˆ๋ฑ€", - "๊ฑฐ๋ถ์ด", - "์œก์ง€๊ฑฐ๋ถ", - "๋ฐ”๋‹ค๊ฑฐ๋ถ", - "์นด๋ฉœ๋ ˆ์˜จ", - "ํ™ํ•™", - "์นด๋‚˜๋ฆฌ์•„", - "์ˆ˜๋ฆฌ๋ถ€์—‰์ด", - "์ฒญ์„ค๋ชจ", - "์กฑ์ œ๋น„", - "๋‹ด๋น„", - "์˜ค์†Œ๋ฆฌ", - "๋ฌธ์–ด", - "์˜ค์ง•์–ด", - "ํ•ด๋งˆ", - "ํ•ดํŒŒ๋ฆฌ", - "๊ฐˆ๋งค๊ธฐ", - "์›์•™", - "์›์ˆญ์ด", - "์นจํŒฌ์ง€", - "๊ณ ๋ฆด๋ผ", - "๋ ˆ์„œํŒ๋‹ค", - "๋ถ‰์€์—ฌ์šฐ", - "์‚ฐํ† ๋ผ", - "์ œ๋น„", - "๋น„๋‘˜๊ธฐ", - "ํ‘ธ๋“ค", - "๊ณ ๋‹ˆ", - "๋ผ๋งˆ", - "๋‹น๋‚˜๊ท€", - "๋ง์•„์ง€", - "์†ก์•„์ง€", - "๊ฐ€์˜ค๋ฆฌ", - "๋ฉ”๊ธฐ", - "ํ˜ธ๋ž‘์ด", - "์‚ฌ์ž" -] \ No newline at end of file diff --git a/packages/usernamer/data/korean/level2.json b/packages/usernamer/data/korean/level2.json deleted file mode 100644 index 9e79751..0000000 --- a/packages/usernamer/data/korean/level2.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - "๊ท€์—ฌ์šด", - "์‚ฌ๋ž‘์Šค๋Ÿฌ์šด", - "ํฌ๊ทผํ•œ", - "๋ง๋ž‘ํ•œ", - "ํ†ตํ†ตํ•œ", - "์ž‘์€", - "๋ฐฉ๊ธ‹์›ƒ๋Š”", - "์ƒ๋ƒฅํ•œ", - "์ˆœํ•œ", - "๋‹ค์ •ํ•œ", - "์ฐฉํ•œ", - "์• ๊ต ๋งŽ์€", - "์”ฉ์”ฉํ•œ", - "์šฉ๊ฐํ•œ", - "์žฅ๋‚œ๊พธ๋Ÿฌ๊ธฐ", - "์—‰๋šฑํ•œ", - "์ˆ˜์ค์€", - "๋ฐ˜์ง์ด๋Š”", - "์ดˆ๋กฑ์ดˆ๋กฑํ•œ", - "์ƒํผํ•œ", - "๋ฐœ๋ž„ํ•œ", - "๋”ฐ๋œปํ•œ", - "ํ‰์˜จํ•œ", - "์˜จ์ˆœํ•œ", - "๋А๊ธ‹ํ•œ", - "ํ™œ๊ธฐ์ฐฌ", - "์œ ์พŒํ•œ", - "๋ช…๋ž‘ํ•œ", - "ํ–‰๋ณตํ•œ", - "ํ™˜ํ•œ", - "์‚ฌ๋ž‘๋‘ฅ์ด", - "๋‹ค์ฑ„๋กœ์šด", - "ํŒŒ์Šคํ…”ํ†ค์˜", - "๊ฐ๋ฏธ๋กœ์šด", - "๋‹ฌ์ฝคํ•œ", - "์‚ฐ๋œปํ•œ", - "๋ณด์†ก๋ณด์†กํ•œ", - "๋ฝ€์†กํ•œ", - "๋ถ€๋“œ๋Ÿฌ์šด", - "๊นœ์ฐํ•œ", - "์ฝ”๋ฏนํ•œ", - "์žฌ์น˜์žˆ๋Š”", - "๊ธฐ๋ฐœํ•œ", - "ํ•ด๋ง‘์€", - "๋ง‘์€", - "์‹ฑ๊ทธ๋Ÿฌ์šด", - "์ฒญ์ดˆํ•œ", - "์šฐ์•„ํ•œ", - "์•„๊ธฐ์ž๊ธฐํ•œ", - "์ƒํผ๋ฐœ๋ž„ํ•œ", - "์‚ฌ๋ž‘๊ฐ€๋“ํ•œ", - "๊ฟˆ๊พธ๋Š”", - "ํ˜ธ๊ธฐ์‹ฌ ๋งŽ์€", - "์˜๋ฆฌํ•œ", - "๋˜‘๋˜‘ํ•œ", - "์ด๋ช…ํ•œ", - "๋ถ€๋„๋Ÿผํƒ€๋Š”", - "๋‹ค๊ฐํ•œ", - "๊ฐ์„ฑ์ ์ธ", - "๋กœ๋งจํ‹ฑํ•œ", - "ํ‰ํ™”๋กœ์šด", - "์—ฌ์œ ๋กœ์šด", - "๋ฐ˜๊ฐ€์šด", - "์ฆ๊ฑฐ์šด", - "์‚ฌ๊ทผ์‚ฌ๊ทผํ•œ", - "๋ฐœ๊ทธ๋ ˆํ•œ", - "๋ณผ์ด ๋ฐœ๊ทธ๋ ˆํ•œ", - "ํ–‰๋ณต๊ฐ ๊ฐ€๋“ํ•œ", - "์€์€ํ•œ", - "๋ฐ˜์ง๋ฐ˜์งํ•œ", - "๋ˆˆ๋ถ€์‹ ", - "๊ณ ์šด", - "๊ท€์—ผ๋ฝ€์งํ•œ", - "ํฌ๊ทผํฌ๊ทผํ•œ", - "๋ง๋ž‘๋ง๋ž‘ํ•œ", - "์‹ฑ๊ธ€๋ฒ™๊ธ€ํ•œ", - "์ด‰์ด‰ํ•œ", - "์ƒ๋ƒฅ๋ฏธ ๋„˜์น˜๋Š”", - "์•™์ฆ๋งž์€", - "๋ฐ˜๋‹ฌ๋ˆˆ์˜", - "์›ƒ์Œ๊ฐ€๋“ํ•œ", - "๋ฏธ์†Œ์ง“๋Š”", - "์กธ๋ฆฐ", - "์ž ๊พธ๋Ÿฌ๊ธฐ", - "์šฐ๋‹นํƒ•ํ•œ", - "๊ท€์—ผํญ๋ฐœ", - "ํ•ดํ”ผํ•œ", - "ํ˜ธ๊ธฐ๋กœ์šด", - "ํ–‡์‚ด๊ฐ™์€", - "๋ณ„๋น›๊ฐ™์€", - "๊ตฌ๋ฆ„๊ฐ™์€", - "๋ด„ํ–ฅ๊ธฐ๋‚˜๋Š”", - "๋ฐ์€", - "๋ฐ˜์ง๋ˆˆ์˜", - "์ซ‘๊ธ‹๊ท€์˜", - "์ˆœ๋‘ฅ์ˆœ๋‘ฅํ•œ", - "๋”ฐ์Šคํ•œ", - "ํ™˜ํ•˜๊ฒŒ ์›ƒ๋Š”", - "๊นก์ถฉ๊ฑฐ๋ฆฌ๋Š”", - "์กธ์กธ๋”ฐ๋ฅด๋Š”" -] \ No newline at end of file diff --git a/packages/usernamer/data/korean/level3.json b/packages/usernamer/data/korean/level3.json deleted file mode 100644 index e94cb3f..0000000 --- a/packages/usernamer/data/korean/level3.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - "๋ชจ์ž๋ฅผ ์“ด", - "๋ฆฌ๋ณธ์„ ๋งจ", - "์•ˆ๊ฒฝ์„ ๋‚€", - "๋ชฉ๋„๋ฆฌ๋ฅผ ๋‘๋ฅธ", - "์žฅ๊ฐ‘์„ ๋‚€", - "๊ท€๋งˆ๊ฐœ๋ฅผ ํ•œ", - "๋งํ† ๋ฅผ ๋‘๋ฅธ", - "๋ฐฐ๋‚ญ์„ ๋ฉ˜", - "๋ฐฐ์ง€๋ฅผ ๋‹จ", - "๋‚˜๋น„๋„ฅํƒ€์ด๋ฅผ ๋งจ", - "๊ฝƒ์„ ๊ฝ‚์€", - "์™•๊ด€์„ ์“ด", - "๋จธ๋ฆฌํ•€์„ ๊ฝ‚์€", - "ํ›„๋“œ๋ฅผ ์“ด", - "๋ฒ ๋ ˆ๋ชจ๋ฅผ ์“ด", - "์„ ๊ธ€๋ผ์Šค๋ฅผ ๋‚€", - "๊ท€๊ฑธ์ด๋ฅผ ํ•œ", - "ํŒ”์ฐŒ๋ฅผ ์ฐฌ", - "๋ชฉ๊ฑธ์ด๋ฅผ ํ•œ", - "์‹œ๊ณ„๋ฅผ ์ฐฌ", - "์šฐ์‚ฐ์„ ๋“ ", - "ํ’์„ ์„ ๋“ ", - "์‚ฌํƒ•์„ ๋“ ", - "์•„์ด์Šคํฌ๋ฆผ์„ ๋“ ", - "๋„๋„›์„ ๋“ ", - "์ฟ ํ‚ค๋ฅผ ๋“ ", - "์ปคํ”ผ๋ฅผ ๋“ ", - "์šฐ์œ ๋ฅผ ๋“ ", - "์ฑ…์„ ๋“ ", - "์—ฐํ•„์„ ๋“ ", - "๊ฝƒ๋‹ค๋ฐœ์„ ๋“ ", - "๊นƒ๋ฐœ์„ ๋“ ", - "์„ ๋ฌผ์„ ๋“ ", - "ํŽธ์ง€๋ฅผ ๋“ ", - "์นด๋ฉ”๋ผ๋ฅผ ๋“ ", - "์ง€๋„๋ฅผ ๋“ ", - "์ธํ˜•์„ ์•ˆ์€", - "๋‹ด์š”๋ฅผ ๋‘๋ฅธ", - "๋ฒ ๊ฐœ๋ฅผ ์•ˆ์€", - "๋ณ„์„ ์•ˆ์€", - "ํ•˜ํŠธ๋ฅผ ์•ˆ์€", - "ํ† ๋ผ๊ท€๋ฅผ ์“ด", - "ํŒŒํ‹ฐ๋ชจ์ž๋ฅผ ์“ด", - "์ƒ์ผ๋ชจ์ž๋ฅผ ์“ด", - "๋นต๋ชจ์ž๋ฅผ ์“ด", - "๋ฐ๊ฒŒ ์›ƒ๋Š”", - "์œ™ํฌํ•˜๋Š”", - "ํ•˜ํŠธ์†์„ ๋งŒ๋“œ๋Š”", - "์†์„ ํ”๋“œ๋Š”", - "๋‘ ์† ๋ชจ์€", - "์ž ๋“ ", - "ํ•˜ํ’ˆํ•˜๋Š”", - "๊ธฐ์ง€๊ฐœ ์ผœ๋Š”", - "์ถค์ถ”๋Š”", - "๋…ธ๋ž˜ํ•˜๋Š”", - "๋‹ฌ๋ฆฌ๋Š”", - "ํด์ง ๋›ฐ๋Š”", - "์‚ฐ์ฑ…ํ•˜๋Š”", - "ํ”ผํฌ๋‹‰ ๊ฐ€๋Š”", - "๋ณ„์„ ์„ธ๋Š”", - "์ƒ์ƒํ•˜๋Š”", - "ํŽธ์ง€๋ฅผ ์“ฐ๋Š”", - "๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š”", - "์…€์นด ์ฐ๋Š”", - "์‚ฌ์ง„ ์ฐ๋Š”", - "๋‚š์‹œํ•˜๋Š”", - "์Šค์ผ€์ดํŠธ ํƒ€๋Š”", - "๋กค๋Ÿฌ๋ฅผ ํƒ€๋Š”", - "์ž์ „๊ฑฐ ํƒ€๋Š”", - "์Šค์ฟ ํ„ฐ ํƒ€๋Š”", - "๊ตฌ๋ฆ„์„ ํƒ€๋Š”", - "๋ฌด์ง€๊ฐœ๋ฅผ ๋ณด๋Š”", - "๋น„๋ˆ„๋ฐฉ์šธ์„ ๋ถ€๋Š”", - "์—ฐ์„ ๋‚ ๋ฆฌ๋Š”", - "๋ˆˆ์‚ฌ๋žŒ์„ ๋งŒ๋“œ๋Š”", - "๋ˆˆ์†ก์ด๋ฅผ ๋ฐ›๋Š”", - "๋ˆˆ๊ฝƒ์„ ๋ณด๋Š”", - "๋ฒš๊ฝƒ๊ธธ์„ ๊ฑท๋Š”", - "๋‹จํ’๊ธธ์„ ๊ฑท๋Š”", - "ํ•ด๋ฐ”๋ผ๊ธฐ๋ฅผ ๋ณด๋Š”", - "๋ฐ”๋žŒ์„ ํƒ€๋Š”", - "ํŒŒ๋„ ์†Œ๋ฆฌ๋ฅผ ๋“ฃ๋Š”", - "๋ชจ๋ž˜์„ฑ์„ ์Œ“๋Š”", - "์กฐ๊ฐœ๋ฅผ ์ค๋Š”", - "๋ณ„๋˜ฅ๋ณ„์„ ๋ณด๋Š”", - "์ƒˆ์‹น์„ ํ‚ค์šฐ๋Š”", - "ํ™”๋ถ„์„ ๋“ค๊ณ  ์žˆ๋Š”", - "์„ ์ธ์žฅ์„ ํ‚ค์šฐ๋Š”", - "๋‚˜๋ญ‡์žŽ์„ ํ”๋“œ๋Š”", - "๋น„๋ฅผ ํ”ผํ•˜๋Š”", - "๋ฌด๋ฆŽ๋‹ด์š”๋ฅผ ๋‘๋ฅธ", - "์š”๋ฆฌ๋ฅผ ํ•˜๋Š”", - "๋นต์„ ๊ตฝ๋Š”", - "์ผ€์ดํฌ๋ฅผ ๊ตฝ๋Š”", - "์ดˆ๋ฅผ ๋ถ€๋Š”", - "์„ ๋ฌผ์„ ํฌ์žฅํ•˜๋Š”", - "ํ’๊ฒฝ์„ ์Šค์ผ€์น˜ํ•˜๋Š”", - "๋ณ„์ž๋ฆฌ ์ฐพ๋Š”", - "ํผ์ฆ ๋งž์ถ”๋Š”", - "๋ธ”๋ก์„ ์Œ“๋Š”" -] \ No newline at end of file diff --git a/packages/usernamer/data/korean/level4.json b/packages/usernamer/data/korean/level4.json deleted file mode 100644 index 31c0a70..0000000 --- a/packages/usernamer/data/korean/level4.json +++ /dev/null @@ -1,102 +0,0 @@ -[ - "๋ง‘์€ ๋‚ ", - "์ฃผ๋ง์˜", - "์•„์นจ์˜", - "์ ์‹ฌ์‹œ๊ฐ„์˜", - "์ €๋…์˜", - "์ƒˆ๋ฒฝ์˜", - "๋ด„๋‚ ์˜", - "์—ฌ๋ฆ„๋ฐค์˜", - "๊ฐ€์„๋‚ ์˜", - "๊ฒจ์šธ๋‚ ์˜", - "๋น„ ์˜ค๋Š” ๋‚ ์˜", - "๋ˆˆ ์˜ค๋Š” ๋‚ ์˜", - "์ฒซ๋ˆˆ ์˜ค๋Š” ๋‚ ์˜", - "๋ง‘์€ ํ•˜๋Š˜์˜", - "๋ฐ”๋žŒ ๋ถ€๋Š” ๋‚ ์˜", - "๋ฌด์ง€๊ฐœ ๋œฌ ๋‚ ์˜", - "ํœด์ผ์˜", - "๋ฐฉํ•™์˜", - "์ถ•์ œ์˜", - "์ƒ์ผํŒŒํ‹ฐ์˜", - "ํฌ๋ฆฌ์Šค๋งˆ์Šค์˜", - "ํ• ๋กœ์œˆ์˜", - "์‹ ๋…„์˜", - "์—ฐ๋ง์˜", - "์„ค๋‚ ์˜", - "์ถ”์„์˜", - "๋ฒš๊ฝƒ ์‹œ์ฆŒ์˜", - "๋‹จํ’ ์‹œ์ฆŒ์˜", - "๋ˆˆ๊ฝƒ ์‹œ์ฆŒ์˜", - "๊ฝƒ๊ธธ์˜", - "์ˆฒ์†์˜", - "๋ฐ”๋‹ท๊ฐ€์˜", - "ํ•ด๋ณ€์˜", - "ํ˜ธ์ˆซ๊ฐ€์˜", - "๊ฐ•๊ฐ€์˜", - "์‚ฐ์ฑ…๊ธธ์˜", - "๊ณต์›์˜", - "๋†€์ดํ„ฐ์˜", - "์ •์›์˜", - "๋„์‹œ์˜", - "๊ณจ๋ชฉ๊ธธ์˜", - "์บ ํ•‘์žฅ์˜", - "ํ”ผํฌ๋‹‰์˜", - "์†Œํ’๋‚ ์˜", - "์—ฌํ–‰๊ธธ์˜", - "๊ธฐ์ฐจ์—ฌํ–‰์˜", - "์ž์ „๊ฑฐ์—ฌํ–‰์˜", - "ํ•˜๋Š˜์ƒ‰ ํ…Œ๋งˆ์˜", - "๋ฏผํŠธ์ƒ‰ ํ…Œ๋งˆ์˜", - "๋ผ์ผ๋ฝ์ƒ‰ ํ…Œ๋งˆ์˜", - "๋ถ„ํ™์ƒ‰ ํ…Œ๋งˆ์˜", - "๋…ธ๋ž‘์ƒ‰ ํ…Œ๋งˆ์˜", - "ํŒŒ์Šคํ…” ํ†ค์˜", - "๋ ˆํŠธ๋กœ ํ’์˜", - "๋นˆํ‹ฐ์ง€ ํ’์˜", - "ํด๋ž˜์‹ ๋ฌด๋“œ์˜", - "๋ชจํ—˜ ํ…Œ๋งˆ์˜", - "์š”์ • ํ…Œ๋งˆ์˜", - "๋งˆ๋ฒ•์‚ฌ ํ…Œ๋งˆ์˜", - "ํ•ด์  ํ…Œ๋งˆ์˜", - "์šฐ์ฃผ ํ…Œ๋งˆ์˜", - "๋ฐ”๋‹ค ํ…Œ๋งˆ์˜", - "์ˆฒ์† ํ…Œ๋งˆ์˜", - "๋™ํ™” ์†์˜", - "๊ฟˆ๋‚˜๋ผ์˜", - "์šฐ์ฃผ์—ฌํ–‰์˜", - "๋†€์ด๊ณต์›์˜", - "์ˆ˜์กฑ๊ด€์˜", - "๋™๋ฌผ์›์˜", - "๋ฐ•๋ฌผ๊ด€์˜", - "๋„์„œ๊ด€์˜", - "์นดํŽ˜์˜", - "๋ฒ ์ด์ปค๋ฆฌ์˜", - "๋งˆ์ผ“์˜", - "์žฅ๋‚œ๊ฐ ๊ฐ€๊ฒŒ์˜", - "๋ฌธ๊ตฌ์ ์˜", - "์„œ์ ์˜", - "๊ณต์—ฐ์žฅ์˜", - "์˜ํ™”๊ด€์˜", - "์Œ์•…์ถ•์ œ์˜", - "์Šค์ผ€์น˜ ๋ถ์˜", - "์‚ฌ์ง„์ผ๊ธฐ์˜", - "์ƒ์ผ ์ „๋‚ ์˜", - "๊นœ์งํŒŒํ‹ฐ์˜", - "์ฒซ ๋งŒ๋‚จ์˜", - "ํ™˜์˜ ํŒŒํ‹ฐ์˜", - "์กธ์—…์‹์˜", - "์ž…ํ•™์‹์˜", - "๋น„๋ฐ€๊ธฐ์ง€์˜", - "์นœ๊ตฌ๋“ค๊ณผ ํ•จ๊ป˜ํ•˜๋Š”", - "๊ฐ€์กฑ๊ณผ ํ•จ๊ป˜ํ•˜๋Š”", - "์…€์นด ํƒ€์ž„์˜", - "ํœด์‹ ํƒ€์ž„์˜", - "๋‚ฎ์ž  ํƒ€์ž„์˜", - "ํ‹ฐํƒ€์ž„์˜", - "๊ฐ„์‹์‹œ๊ฐ„์˜", - "์บ ํ”„ํŒŒ์ด์–ด์˜", - "๋ถˆ๊ฝƒ๋†€์ด์˜", - "์•ผ์‹œ์žฅ์˜", - "์ƒˆํ•ด๋งž์ด์˜" -] \ No newline at end of file diff --git a/packages/usernamer/jest.config.js b/packages/usernamer/jest.config.js deleted file mode 100644 index a9ee14f..0000000 --- a/packages/usernamer/jest.config.js +++ /dev/null @@ -1,16 +0,0 @@ -export default { - preset: 'ts-jest', - testEnvironment: 'node', - moduleNameMapper: { - '^@/(.*)$': '/src/$1', - }, - testMatch: ['**/test/**/*.test.ts'], - collectCoverageFrom: ['src/**/*.ts', '!src/**/*.d.ts'], - globals: { - 'ts-jest': { - tsconfig: { - target: 'ES2020', - }, - }, - }, -}; diff --git a/packages/usernamer/package.json b/packages/usernamer/package.json deleted file mode 100644 index 142bb74..0000000 --- a/packages/usernamer/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "usernamer", - "type": "module", - "version": "1.0.0", - "description": "Generate memorable usernames from numbers using multi-level word combinations in Korean and English", - "source": "src/index.ts", - "exports": { - ".": { - "types": "./dist/src/src/index.d.ts", - "require": "./dist/index.cjs", - "default": "./dist/index.modern.js" - }, - "./ko": { - "types": "./dist/src/src/ko.d.ts", - "default": "./dist/ko/usernamer.js" - } - }, - "main": "./dist/index.cjs", - "module": "./dist/index.modern.js", - "types": "./dist/src/src/index.d.ts", - "bin": { - "usernamer": "dist/cli.cjs" - }, - "files": [ - "dist", - "data", - "README.md", - "LICENSE" - ], - "scripts": { - "build": "microbundle && microbundle src/ko.ts -o dist/ko --no-pkg-main && microbundle src/cli.ts -o dist/cli.cjs --no-pkg-main -f cjs", - "watch": "microbundle watch", - "test": "jest", - "prepublishOnly": "pnpm run build && pnpm run test" - }, - "keywords": [ - "username", - "generator", - "nickname", - "encoding", - "decoding", - "korean", - "english", - "memorable", - "identifier" - ], - "author": "hmmhmmhm", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/hmmhmmhm/node-packages.git", - "directory": "packages/usernamer" - }, - "bugs": { - "url": "https://github.com/hmmhmmhm/node-packages/issues" - }, - "homepage": "https://github.com/hmmhmmhm/node-packages/tree/main/packages/usernamer#readme", - "devDependencies": { - "@types/jest": "^29.5.13", - "@types/node": "^20.0.0", - "jest": "^29.7.0", - "microbundle": "^0.15.1", - "ts-jest": "^29.2.5", - "typescript": "^5.6.2" - } -} \ No newline at end of file diff --git a/packages/usernamer/src/cli.ts b/packages/usernamer/src/cli.ts deleted file mode 100644 index e1a824b..0000000 --- a/packages/usernamer/src/cli.ts +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env node - -import { encode as encodeEn, decode as decodeEn, getMaxCombinableIndex } from './index'; -import { encode as encodeKo, decode as decodeKo } from './ko'; - -type Language = 'korean' | 'english'; - -const args = process.argv.slice(2); - -function showHelp() { - console.log(` -Usernamer - Generate memorable usernames from numbers - -Usage: - usernamer encode [options] - usernamer decode [options] - usernamer info - -Commands: - encode Encode a number to a memorable username - decode Decode a username back to a number - info Show encoding information - -Options: - --language Language to use: 'korean' or 'english' (default: english) - -l Short form of --language - -h, --help Show this help message - -Examples: - usernamer encode 12345 - usernamer encode 12345 --language korean - usernamer encode 12345 -l korean - usernamer decode "adorable alpaca" - usernamer decode "๊ท€์—ฌ์šด ์•ŒํŒŒ์นด" --language korean - usernamer info - -Note: - - Maximum combinable index without suffix: ${getMaxCombinableIndex().toLocaleString()} - - Indices >= ${getMaxCombinableIndex().toLocaleString()} will have a numeric suffix - - Use quotes around usernames with spaces when decoding -`); -} - -function showInfo() { - const maxIndex = getMaxCombinableIndex(); - console.log(` -Usernamer Information -===================== - -Encoding System: - - Base-100 system with 4 levels - - Each level has 100 words - - Total combinations: ${maxIndex.toLocaleString()} - -Levels: - Level 1: Base nouns (animals, objects) - always included - Level 2: Adjectives (cute, lovely, etc.) - Level 3: Actions/accessories (wearing a hat, holding flowers, etc.) - Level 4: Contexts/themes (sunny day, spring season, etc.) - -Format: - Korean: "level4 level3 level2 level1" - English: "level4 level3 level2 level1" - -Examples: - 0 โ†’ "์•ŒํŒŒ์นด" (alpaca) - 100 โ†’ "๊ท€์—ฌ์šด ์•ŒํŒŒ์นด" (adorable alpaca) - 10000 โ†’ "๋ชจ์ž๋ฅผ ์“ด ์•ŒํŒŒ์นด" (hat-wearing alpaca) - 1000000 โ†’ "๋ง‘์€ ๋‚  ์•ŒํŒŒ์นด" (sunny day alpaca) - -Overflow: - - Indices >= ${maxIndex.toLocaleString()} get a numeric suffix - - Example: ${maxIndex.toLocaleString()} โ†’ "์•ผ์‹œ์žฅ์˜ ํผ์ฆ ๋งž์ถ”๋Š” ๊นก์ถฉ๊ฑฐ๋ฆฌ๋Š” ์‚ฌ์ž 1" -`); -} - -function main() { - if (args.length === 0 || args.includes('-h') || args.includes('--help')) { - showHelp(); - process.exit(0); - } - - const command = args[0]; - - if (command === 'info') { - showInfo(); - process.exit(0); - } - - // Parse language option - const languageIndex = Math.max(args.indexOf('--language'), args.indexOf('-l')); - let language: Language = 'english'; // Default to English - - if (languageIndex !== -1 && languageIndex + 1 < args.length) { - const langArg = args[languageIndex + 1].toLowerCase(); - if (langArg === 'korean' || langArg === 'english' || langArg === 'ko' || langArg === 'en') { - // Support both full names and short codes - language = (langArg === 'korean' || langArg === 'ko') ? 'korean' : 'english'; - } else { - console.error(`Error: Invalid language '${langArg}'. Use 'korean', 'english', 'ko', or 'en'.`); - process.exit(1); - } - } - - // Collect value arguments (everything between command and options) - const valueArgs: string[] = []; - for (let i = 1; i < args.length; i++) { - const arg = args[i]; - // Stop at option flags - if (arg.startsWith('--') || arg === '-l') { - // Skip the option and its value if it has one - if (arg === '--language' || arg === '-l') { - i++; // Skip the language value - } - continue; - } - valueArgs.push(arg); - } - - const value = valueArgs.join(' '); - - if (!value) { - console.error('Error: Missing value argument'); - showHelp(); - process.exit(1); - } - - try { - if (command === 'encode') { - const num = parseInt(value, 10); - if (isNaN(num) || num < 0) { - console.error('Error: Please provide a valid non-negative integer'); - process.exit(1); - } - - const result = language === 'korean' ? encodeKo(num) : encodeEn(num); - console.log(result); - } else if (command === 'decode') { - const result = language === 'korean' ? decodeKo(value) : decodeEn(value); - console.log(result); - } else { - console.error(`Error: Unknown command '${command}'`); - showHelp(); - process.exit(1); - } - } catch (error) { - const errorMsg = error instanceof Error ? error.message : String(error); - console.error(`Error: ${errorMsg}`); - process.exit(1); - } -} - -main(); diff --git a/packages/usernamer/src/core.ts b/packages/usernamer/src/core.ts deleted file mode 100644 index 3ba1c40..0000000 --- a/packages/usernamer/src/core.ts +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Core encoding/decoding logic without language data - */ - -export type Language = 'korean' | 'english'; - -export interface LevelData { - level1: string[]; - level2: string[]; - level3: string[]; - level4: string[]; -} - -// Constants -const ITEMS_PER_LEVEL = 100; -const MAX_COMBINABLE_INDEX = ITEMS_PER_LEVEL ** 4; // 100,000,000 (1์–ต) - -/** - * Validate language data structure - */ -function validateData(data: LevelData): void { - const levels = [data.level1, data.level2, data.level3, data.level4]; - - for (let i = 0; i < levels.length; i++) { - if (!Array.isArray(levels[i]) || levels[i].length !== ITEMS_PER_LEVEL) { - throw new Error(`Invalid data: level${i + 1} must have exactly ${ITEMS_PER_LEVEL} items`); - } - } -} - -/** - * Create encode function for specific language data - */ -export function createEncoder(data: LevelData, separator: string = ' ') { - validateData(data); - - return function encode(index: number): string { - // Validate input - if (!Number.isInteger(index) || index < 0) { - throw new Error('Index must be a non-negative integer'); - } - - // Handle overflow (index >= 100,000,000) - // Use mixed base system: base-100 for first 4 levels, then base-10 for 5th level - // Example: 123,456,789 = encode(12,345,678) + " 9" - let suffix = ''; - if (index >= MAX_COMBINABLE_INDEX) { - const lastDigit = index % 10; - suffix = ` ${lastDigit}`; - index = Math.floor(index / 10); - } - - // Decompose index into base-100 digits - // index = d4 * 100^3 + d3 * 100^2 + d2 * 100 + d1 - const d1 = index % ITEMS_PER_LEVEL; - const d2 = Math.floor(index / ITEMS_PER_LEVEL) % ITEMS_PER_LEVEL; - const d3 = Math.floor(index / (ITEMS_PER_LEVEL ** 2)) % ITEMS_PER_LEVEL; - const d4 = Math.floor(index / (ITEMS_PER_LEVEL ** 3)) % ITEMS_PER_LEVEL; - - const parts: string[] = []; - - // Build username from level4 to level1 - // Format: "level4 level3 level2 level1" - // Only include levels that have non-zero values - if (d4 > 0) { - parts.push(data.level4[d4 - 1]); - } - if (d3 > 0) { - parts.push(data.level3[d3 - 1]); - } - if (d2 > 0) { - parts.push(data.level2[d2 - 1]); - } - - parts.push(data.level1[d1]); - - return parts.join(separator) + suffix; - }; -} - -/** - * Create decode function for specific language data - */ -export function createDecoder(data: LevelData) { - validateData(data); - - return function decode(username: string): number { - if (!username || username.trim() === '') { - throw new Error('Username cannot be empty'); - } - - const normalized = username.trim(); - - // Check for numeric suffix (overflow handling) - const suffixMatch = normalized.match(/\s+(\d+)$/); - let overflowNumber = 0; - let usernameWithoutSuffix = normalized; - - if (suffixMatch) { - overflowNumber = parseInt(suffixMatch[1], 10); - usernameWithoutSuffix = normalized.substring(0, normalized.length - suffixMatch[0].length); - } - - // Create reverse lookup maps - // level1: stores array index (0-99) - // level2/3/4: stores digit value (1-100), since we only include them when d > 0 - const level1Map = new Map(data.level1.map((word: string, idx: number) => [word, idx])); - const level2Map = new Map(data.level2.map((word: string, idx: number) => [word, idx + 1])); - const level3Map = new Map(data.level3.map((word: string, idx: number) => [word, idx + 1])); - const level4Map = new Map(data.level4.map((word: string, idx: number) => [word, idx + 1])); - - // Parse username by trying to match words from each level - // We need to handle the fact that words can contain spaces - let remaining = usernameWithoutSuffix; - let d1 = 0, d2 = 0, d3 = 0, d4 = 0; - - // Try to match level4 first (longest prefix) - let matched = false; - for (const [word, value] of level4Map.entries()) { - if (remaining.startsWith(word)) { - d4 = value; - remaining = remaining.substring(word.length).trim(); - matched = true; - break; - } - } - - // Try to match level3 - matched = false; - for (const [word, value] of level3Map.entries()) { - if (remaining.startsWith(word)) { - d3 = value; - remaining = remaining.substring(word.length).trim(); - matched = true; - break; - } - } - - // Try to match level2 - matched = false; - for (const [word, value] of level2Map.entries()) { - if (remaining.startsWith(word)) { - d2 = value; - remaining = remaining.substring(word.length).trim(); - matched = true; - break; - } - } - - // Match level1 (required) - matched = false; - for (const [word, value] of level1Map.entries()) { - if (remaining === word) { - d1 = value; - matched = true; - break; - } - } - - if (!matched) { - throw new Error(`Invalid username: could not parse "${username}"`); - } - - // Reconstruct index - const baseIndex = d4 * (ITEMS_PER_LEVEL ** 3) + d3 * (ITEMS_PER_LEVEL ** 2) + d2 * ITEMS_PER_LEVEL + d1; - - // Handle overflow with mixed base system - // If suffix exists, the original index was: (baseIndex * 10) + suffix - if (suffixMatch) { - return baseIndex * 10 + overflowNumber; - } - - return baseIndex; - }; -} - -/** - * Get the maximum index that can be encoded without numeric suffix - */ -export function getMaxCombinableIndex(): number { - return MAX_COMBINABLE_INDEX; -} - -/** - * Check if an index requires a numeric suffix - */ -export function requiresSuffix(index: number): boolean { - return index >= MAX_COMBINABLE_INDEX; -} diff --git a/packages/usernamer/src/index.ts b/packages/usernamer/src/index.ts deleted file mode 100644 index 545a819..0000000 --- a/packages/usernamer/src/index.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Usernamer - Generate memorable usernames from numbers (English) - * - * For Korean, use: - * - import { encode, decode } from 'usernamer/ko' - */ - -import englishLevel1 from '../data/english/level1.json'; -import englishLevel2 from '../data/english/level2.json'; -import englishLevel3 from '../data/english/level3.json'; -import englishLevel4 from '../data/english/level4.json'; -import { createEncoder, createDecoder } from './core'; - -export { getMaxCombinableIndex, requiresSuffix } from './core'; - -const englishData = { - level1: englishLevel1, - level2: englishLevel2, - level3: englishLevel3, - level4: englishLevel4, -}; - -const encoder = createEncoder(englishData, ' '); -const decoder = createDecoder(englishData); - -/** - * Encode a number (0 to 100,000,000+) into a memorable username - * - * @param index - Number to encode (0 to any positive integer) - * @returns Generated username in English - * - * @example - * encode(0) // "alpaca" - * encode(100) // "adorable alpaca" - * encode(10000) // "wearing hat alpaca" - * encode(1000000) // "sunny day alpaca" - */ -export function encode(index: number): string { - return encoder(index); -} - -/** - * Decode a username back to its original index - * - * @param username - Username to decode (English) - * @returns Original index number - * - * @example - * decode("alpaca") // 0 - * decode("adorable alpaca") // 100 - * decode("wearing hat alpaca") // 10000 - * decode("sunny day alpaca") // 1000000 - */ -export function decode(username: string): number { - return decoder(username); -} - diff --git a/packages/usernamer/src/ko.ts b/packages/usernamer/src/ko.ts deleted file mode 100644 index bed0273..0000000 --- a/packages/usernamer/src/ko.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Korean-only entry point for better tree-shaking - */ - -import koreanLevel1 from '../data/korean/level1.json'; -import koreanLevel2 from '../data/korean/level2.json'; -import koreanLevel3 from '../data/korean/level3.json'; -import koreanLevel4 from '../data/korean/level4.json'; -import { createEncoder, createDecoder, getMaxCombinableIndex, requiresSuffix } from './core'; - -const koreanData = { - level1: koreanLevel1, - level2: koreanLevel2, - level3: koreanLevel3, - level4: koreanLevel4, -}; - -/** - * Encode a number to a Korean username - */ -export const encode = createEncoder(koreanData, ' '); - -/** - * Decode a Korean username back to a number - */ -export const decode = createDecoder(koreanData); - -export { getMaxCombinableIndex, requiresSuffix }; diff --git a/packages/usernamer/test/index.test.ts b/packages/usernamer/test/index.test.ts deleted file mode 100644 index 6c87425..0000000 --- a/packages/usernamer/test/index.test.ts +++ /dev/null @@ -1,274 +0,0 @@ -import { encode as encodeEn, decode as decodeEn, getMaxCombinableIndex, requiresSuffix } from '../src/index'; -import { encode as encodeKo, decode as decodeKo } from '../src/ko'; - -describe('Usernamer', () => { - describe('Korean Language', () => { - - describe('encode', () => { - it('should encode index 0 as level1 only', () => { - const result = encodeKo(0); - expect(result).toBe('์•ŒํŒŒ์นด'); - }); - - it('should encode index 1 as second level1 item', () => { - const result = encodeKo(1); - expect(result).toBe('๊ณ ์–‘์ด'); - }); - - it('should encode index 99 as last level1 item', () => { - const result = encodeKo(99); - expect(result).toBe('์‚ฌ์ž'); - }); - - it('should encode index 100 as level2 + level1', () => { - const result = encodeKo(100); - expect(result).toBe('๊ท€์—ฌ์šด ์•ŒํŒŒ์นด'); - }); - - it('should encode index 199 as level2 + last level1', () => { - const result = encodeKo(199); - expect(result).toBe('๊ท€์—ฌ์šด ์‚ฌ์ž'); - }); - - it('should encode index 10000 as level3 + level1', () => { - const result = encodeKo(10000); - expect(result).toBe('๋ชจ์ž๋ฅผ ์“ด ์•ŒํŒŒ์นด'); - }); - - it('should encode index 1000000 as level4 + level1', () => { - const result = encodeKo(1000000); - expect(result).toBe('๋ง‘์€ ๋‚  ์•ŒํŒŒ์นด'); - }); - - it('should encode max combinable index (99,999,999)', () => { - const result = encodeKo(99999999); - expect(result).toBe('์•ผ์‹œ์žฅ์˜ ํผ์ฆ ๋งž์ถ”๋Š” ๊นก์ถฉ๊ฑฐ๋ฆฌ๋Š” ์‚ฌ์ž'); - }); - - it('should encode overflow index with numeric suffix', () => { - const result = encodeKo(100000000); - expect(result).toBe('๊ฒจ์šธ๋‚ ์˜ ์•ŒํŒŒ์นด 0'); - }); - - it('should encode large overflow index', () => { - const result = encodeKo(100000089); - expect(result).toBe('๊ฒจ์šธ๋‚ ์˜ ์ˆ˜๋‹ฌ 9'); - }); - - it('should throw error for negative index', () => { - expect(() => encodeKo(-1)).toThrow('non-negative integer'); - }); - - it('should throw error for non-integer index', () => { - expect(() => encodeKo(1.5)).toThrow('non-negative integer'); - }); - }); - - describe('decode', () => { - it('should decode level1 only username', () => { - const result = decodeKo('์•ŒํŒŒ์นด'); - expect(result).toBe(0); - }); - - it('should decode level2 + level1 username', () => { - const result = decodeKo('๊ท€์—ฌ์šด ์•ŒํŒŒ์นด'); - expect(result).toBe(100); - }); - - it('should decode level3 + level1 username', () => { - const result = decodeKo('๋ชจ์ž๋ฅผ ์“ด ์•ŒํŒŒ์นด'); - expect(result).toBe(10000); - }); - - it('should decode level4 + level1 username', () => { - const result = decodeKo('๋ง‘์€ ๋‚  ์•ŒํŒŒ์นด'); - expect(result).toBe(1000000); - }); - - it('should decode username with numeric suffix', () => { - const result = decodeKo('๊ฒจ์šธ๋‚ ์˜ ์•ŒํŒŒ์นด 0'); - expect(result).toBe(100000000); - }); - - it('should decode username with large numeric suffix', () => { - const result = decodeKo('๊ฒจ์šธ๋‚ ์˜ ์ˆ˜๋‹ฌ 9'); - expect(result).toBe(100000089); - }); - - it('should throw error for empty username', () => { - expect(() => decodeKo('')).toThrow('cannot be empty'); - }); - - it('should throw error for invalid username', () => { - expect(() => decodeKo('์กด์žฌํ•˜์ง€์•Š๋Š”๋‹จ์–ด')).toThrow('Invalid username'); - }); - }); - - describe('encode/decode round-trip', () => { - const testCases = [0, 1, 50, 99, 100, 500, 9999, 10000, 50000, 99999, 100000, - 999999, 1000000, 5000000, 99999999, 100000000, 100000050]; - - testCases.forEach(index => { - it(`should round-trip index ${index}`, () => { - const encoded = encodeKo(index); - const decoded = decodeKo(encoded); - expect(decoded).toBe(index); - }); - }); - }); - }); - - describe('English Language', () => { - - describe('encode', () => { - it('should encode index 0 as level1 only', () => { - const result = encodeEn(0); - expect(result).toBe('alpaca'); - }); - - it('should encode index 100 as level2 + level1', () => { - const result = encodeEn(100); - expect(result).toBe('adorable alpaca'); - }); - - it('should encode with numeric suffix for overflow', () => { - const result = encodeEn(100000000); - expect(result).toContain(' 0'); - }); - }); - - describe('decode', () => { - it('should decode level1 only username', () => { - const result = decodeEn('alpaca'); - expect(result).toBe(0); - }); - - it('should decode level2 + level1 username', () => { - const result = decodeEn('adorable alpaca'); - expect(result).toBe(100); - }); - }); - - describe('encode/decode round-trip', () => { - const testCases = [0, 1, 99, 100, 10000, 1000000, 99999999, 100000000]; - - testCases.forEach(index => { - it(`should round-trip index ${index}`, () => { - const encoded = encodeEn(index); - const decoded = decodeEn(encoded); - expect(decoded).toBe(index); - }); - }); - }); - }); - - describe('Utility Functions', () => { - it('getMaxCombinableIndex should return 100,000,000', () => { - expect(getMaxCombinableIndex()).toBe(100000000); - }); - - it('requiresSuffix should return false for indices below max', () => { - expect(requiresSuffix(0)).toBe(false); - expect(requiresSuffix(99999999)).toBe(false); - }); - - it('requiresSuffix should return true for indices at or above max', () => { - expect(requiresSuffix(100000000)).toBe(true); - expect(requiresSuffix(100000001)).toBe(true); - }); - }); - - describe('Data Integrity', () => { - describe('Korean Data', () => { - it('should have no duplicate words across all levels', () => { - const koreanLevel1 = require('../data/korean/level1.json'); - const koreanLevel2 = require('../data/korean/level2.json'); - const koreanLevel3 = require('../data/korean/level3.json'); - const koreanLevel4 = require('../data/korean/level4.json'); - - const allWords = [ - ...koreanLevel1, - ...koreanLevel2, - ...koreanLevel3, - ...koreanLevel4, - ]; - - const wordSet = new Set(allWords); - const duplicates: string[] = []; - - allWords.forEach((word, index) => { - if (allWords.indexOf(word) !== index) { - if (!duplicates.includes(word)) { - duplicates.push(word); - } - } - }); - - if (duplicates.length > 0) { - console.error('Korean duplicate words found:', duplicates); - } - - expect(wordSet.size).toBe(allWords.length); - expect(duplicates).toEqual([]); - }); - - it('should have exactly 100 items in each level', () => { - const koreanLevel1 = require('../data/korean/level1.json'); - const koreanLevel2 = require('../data/korean/level2.json'); - const koreanLevel3 = require('../data/korean/level3.json'); - const koreanLevel4 = require('../data/korean/level4.json'); - - expect(koreanLevel1.length).toBe(100); - expect(koreanLevel2.length).toBe(100); - expect(koreanLevel3.length).toBe(100); - expect(koreanLevel4.length).toBe(100); - }); - }); - - describe('English Data', () => { - it('should have no duplicate words across all levels', () => { - const englishLevel1 = require('../data/english/level1.json'); - const englishLevel2 = require('../data/english/level2.json'); - const englishLevel3 = require('../data/english/level3.json'); - const englishLevel4 = require('../data/english/level4.json'); - - const allWords = [ - ...englishLevel1, - ...englishLevel2, - ...englishLevel3, - ...englishLevel4, - ]; - - const wordSet = new Set(allWords); - const duplicates: string[] = []; - - allWords.forEach((word, index) => { - if (allWords.indexOf(word) !== index) { - if (!duplicates.includes(word)) { - duplicates.push(word); - } - } - }); - - if (duplicates.length > 0) { - console.error('English duplicate words found:', duplicates); - } - - expect(wordSet.size).toBe(allWords.length); - expect(duplicates).toEqual([]); - }); - - it('should have exactly 100 items in each level', () => { - const englishLevel1 = require('../data/english/level1.json'); - const englishLevel2 = require('../data/english/level2.json'); - const englishLevel3 = require('../data/english/level3.json'); - const englishLevel4 = require('../data/english/level4.json'); - - expect(englishLevel1.length).toBe(100); - expect(englishLevel2.length).toBe(100); - expect(englishLevel3.length).toBe(100); - expect(englishLevel4.length).toBe(100); - }); - }); - }); -}); diff --git a/packages/usernamer/tsconfig.json b/packages/usernamer/tsconfig.json deleted file mode 100644 index cbe2134..0000000 --- a/packages/usernamer/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "bundler", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 7e60545..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,10374 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -overrides: - bigint-buffer: npm:@trufflesuite/bigint-buffer@^1.1.10 - minimist: ^1.2.6 - -importers: - - .: - devDependencies: - prettier: - specifier: ^3.6.2 - version: 3.6.2 - turbo: - specifier: ^2.6.0 - version: 2.6.0 - typescript: - specifier: 5.9.2 - version: 5.9.2 - - packages/base2000: - dependencies: - biggest: - specifier: workspace:* - version: link:../biggest - devDependencies: - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - '@types/node': - specifier: ^20.0.0 - version: 20.19.24 - husky: - specifier: ^9.1.6 - version: 9.1.7 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - lint-staged: - specifier: ^15.2.10 - version: 15.5.2 - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - release-it: - specifier: ^19.0.5 - version: 19.0.5(@types/node@20.19.24) - ts-jest: - specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@5.9.3) - typescript: - specifier: ^5.6.2 - version: 5.9.3 - - packages/base6000: - dependencies: - biggest: - specifier: workspace:* - version: link:../biggest - devDependencies: - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - '@types/node': - specifier: ^20.0.0 - version: 20.19.24 - husky: - specifier: ^9.1.6 - version: 9.1.7 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - lint-staged: - specifier: ^15.2.10 - version: 15.5.2 - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - release-it: - specifier: ^19.0.5 - version: 19.0.5(@types/node@20.19.24) - ts-jest: - specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@5.9.3) - typescript: - specifier: ^5.6.2 - version: 5.9.3 - - packages/biggest: - devDependencies: - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - husky: - specifier: ^9.1.6 - version: 9.1.7 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - lint-staged: - specifier: ^15.2.10 - version: 15.5.2 - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - release-it: - specifier: ^19.0.5 - version: 19.0.5(@types/node@20.19.24) - ts-jest: - specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@5.9.2) - typescript: - specifier: ^5.6.2 - version: 5.9.2 - - packages/curse-script: - devDependencies: - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - '@types/node': - specifier: ^22.0.0 - version: 22.18.13 - husky: - specifier: ^9.1.6 - version: 9.1.7 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0) - lint-staged: - specifier: ^15.2.10 - version: 15.5.2 - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - release-it: - specifier: ^19.0.5 - version: 19.0.5(@types/node@22.18.13) - ts-jest: - specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0))(typescript@5.9.3) - tsx: - specifier: ^4.19.0 - version: 4.20.6 - typescript: - specifier: ^5.6.2 - version: 5.9.3 - - packages/edge-crypto: - devDependencies: - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - '@types/node': - specifier: ^24.9.2 - version: 24.9.2 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - release-it: - specifier: ^19.0.5 - version: 19.0.5(@types/node@24.9.2) - ts-jest: - specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0))(typescript@5.9.3) - typescript: - specifier: ^5.6.2 - version: 5.9.3 - - packages/gauss-spiral: - devDependencies: - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - ts-jest: - specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@5.9.3) - typescript: - specifier: ^5.6.2 - version: 5.9.3 - - packages/mugunghwa: - dependencies: - lz-string: - specifier: ^1.5.0 - version: 1.5.0 - devDependencies: - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - '@types/node': - specifier: ^20.14.0 - version: 20.19.24 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - ts-jest: - specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@5.9.3) - tsx: - specifier: ^4.7.0 - version: 4.20.6 - typescript: - specifier: ^5.6.2 - version: 5.9.3 - - packages/patternly: - devDependencies: - '@types/jest': - specifier: ^30.0.0 - version: 30.0.0 - '@types/node': - specifier: ^24.9.2 - version: 24.9.2 - jest: - specifier: ^30.2.0 - version: 30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - jest-coverage-badges: - specifier: ^1.1.2 - version: 1.1.2 - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - ts-jest: - specifier: ^29.4.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0))(typescript@5.9.3) - typescript: - specifier: ^5.9.3 - version: 5.9.3 - - packages/pseudo-shuffle: - dependencies: - node-fe1-fpe: - specifier: ^1.0.0-beta.2 - version: 1.0.0-beta.2 - devDependencies: - '@sindresorhus/tsconfig': - specifier: ^3.0.1 - version: 3.0.1 - '@types/jest': - specifier: ^29.5.1 - version: 29.5.14 - '@types/node': - specifier: ^20.2.5 - version: 20.19.24 - jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - ts-jest: - specifier: ^29.1.0 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@4.9.5) - - packages/usernamer: - devDependencies: - '@types/jest': - specifier: ^29.5.13 - version: 29.5.14 - '@types/node': - specifier: ^20.0.0 - version: 20.19.24 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - microbundle: - specifier: ^0.15.1 - version: 0.15.1(@types/babel__core@7.20.5) - ts-jest: - specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@5.9.3) - typescript: - specifier: ^5.6.2 - version: 5.9.3 - -packages: - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.28.5': - resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.28.5': - resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.5': - resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.27.1': - resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.27.1': - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.28.3': - resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': - resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': - resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': - resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': - resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': - resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-proposal-class-properties@7.12.1': - resolution: {integrity: sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-flow@7.27.1': - resolution: {integrity: sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.27.1': - resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.27.1': - resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-arrow-functions@7.27.1': - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-generator-functions@7.28.0': - resolution: {integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-to-generator@7.27.1': - resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoped-functions@7.27.1': - resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoping@7.28.5': - resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-properties@7.27.1': - resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-static-block@7.28.3': - resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - - '@babel/plugin-transform-classes@7.28.4': - resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-computed-properties@7.27.1': - resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-destructuring@7.28.5': - resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dotall-regex@7.27.1': - resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-keys@7.27.1': - resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-dynamic-import@7.27.1': - resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-explicit-resource-management@7.28.0': - resolution: {integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-exponentiation-operator@7.28.5': - resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-export-namespace-from@7.27.1': - resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-flow-strip-types@7.27.1': - resolution: {integrity: sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-for-of@7.27.1': - resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-function-name@7.27.1': - resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-json-strings@7.27.1': - resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-literals@7.27.1': - resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-logical-assignment-operators@7.28.5': - resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-member-expression-literals@7.27.1': - resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-amd@7.27.1': - resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.27.1': - resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-systemjs@7.28.5': - resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-umd@7.27.1': - resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-new-target@7.27.1': - resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': - resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.27.1': - resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-rest-spread@7.28.4': - resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-super@7.27.1': - resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-catch-binding@7.27.1': - resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-chaining@7.28.5': - resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-parameters@7.27.7': - resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-methods@7.27.1': - resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.27.1': - resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-property-literals@7.27.1': - resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-display-name@7.28.0': - resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-development@7.27.1': - resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.27.1': - resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-pure-annotations@7.27.1': - resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regenerator@7.28.4': - resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regexp-modifiers@7.27.1': - resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-reserved-words@7.27.1': - resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.27.1': - resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.27.1': - resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.27.1': - resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.27.1': - resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.27.1': - resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.27.1': - resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.27.1': - resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.27.1': - resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.27.1': - resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/preset-env@7.28.5': - resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-flow@7.27.1': - resolution: {integrity: sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - - '@babel/preset-react@7.28.5': - resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@emnapi/core@1.6.0': - resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - - '@emnapi/runtime@1.6.0': - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - - '@esbuild/aix-ppc64@0.25.11': - resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.11': - resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.11': - resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.11': - resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.11': - resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.11': - resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.11': - resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.11': - resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.11': - resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.11': - resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.11': - resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.11': - resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.11': - resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.11': - resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.11': - resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.11': - resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.11': - resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.11': - resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.11': - resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.11': - resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.11': - resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.11': - resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.11': - resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.11': - resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.11': - resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.11': - resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@inquirer/ansi@1.0.1': - resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} - engines: {node: '>=18'} - - '@inquirer/checkbox@4.3.0': - resolution: {integrity: sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/confirm@5.1.19': - resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@10.3.0': - resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/editor@4.2.21': - resolution: {integrity: sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/expand@4.0.21': - resolution: {integrity: sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/external-editor@1.0.2': - resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.14': - resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} - engines: {node: '>=18'} - - '@inquirer/input@4.2.5': - resolution: {integrity: sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/number@3.0.21': - resolution: {integrity: sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/password@4.0.21': - resolution: {integrity: sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/prompts@7.9.0': - resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/rawlist@4.1.9': - resolution: {integrity: sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/search@3.2.0': - resolution: {integrity: sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/select@4.4.0': - resolution: {integrity: sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/type@3.0.9': - resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/console@30.2.0': - resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - 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 - - '@jest/core@30.2.0': - resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/diff-sequences@30.0.1': - resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/environment@30.2.0': - resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@30.2.0': - resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@30.2.0': - resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@30.2.0': - resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/get-type@30.1.0': - resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@30.2.0': - resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/pattern@30.0.1': - resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - 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 - - '@jest/reporters@30.2.0': - resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/schemas@30.0.5': - resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/snapshot-utils@30.2.0': - resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@30.0.1': - resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@30.2.0': - resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@30.2.0': - resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@30.2.0': - resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@30.2.0': - resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.11': - resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - - '@nodeutils/defaults-deep@1.1.0': - resolution: {integrity: sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg==} - - '@octokit/auth-token@6.0.0': - resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} - engines: {node: '>= 20'} - - '@octokit/core@7.0.6': - resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} - engines: {node: '>= 20'} - - '@octokit/endpoint@11.0.2': - resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} - engines: {node: '>= 20'} - - '@octokit/graphql@9.0.3': - resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==} - engines: {node: '>= 20'} - - '@octokit/openapi-types@26.0.0': - resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} - - '@octokit/openapi-types@27.0.0': - resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} - - '@octokit/plugin-paginate-rest@13.2.1': - resolution: {integrity: sha512-Tj4PkZyIL6eBMYcG/76QGsedF0+dWVeLhYprTmuFVVxzDW7PQh23tM0TP0z+1MvSkxB29YFZwnUX+cXfTiSdyw==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-request-log@6.0.0': - resolution: {integrity: sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-rest-endpoint-methods@16.1.1': - resolution: {integrity: sha512-VztDkhM0ketQYSh5Im3IcKWFZl7VIrrsCaHbDINkdYeiiAsJzjhS2xRFCSJgfN6VOcsoW4laMtsmf3HcNqIimg==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/request-error@7.0.2': - resolution: {integrity: sha512-U8piOROoQQUyExw5c6dTkU3GKxts5/ERRThIauNL7yaRoeXW0q/5bgHWT7JfWBw1UyrbK8ERId2wVkcB32n0uQ==} - engines: {node: '>= 20'} - - '@octokit/request@10.0.6': - resolution: {integrity: sha512-FO+UgZCUu+pPnZAR+iKdUt64kPE7QW7ciqpldaMXaNzixz5Jld8dJ31LAUewk0cfSRkNSRKyqG438ba9c/qDlQ==} - engines: {node: '>= 20'} - - '@octokit/rest@22.0.0': - resolution: {integrity: sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==} - engines: {node: '>= 20'} - - '@octokit/types@15.0.2': - resolution: {integrity: sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q==} - - '@octokit/types@16.0.0': - resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - - '@phun-ky/typeof@2.0.3': - resolution: {integrity: sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==} - engines: {node: ^20.9.0 || >=22.0.0, npm: '>=10.8.2'} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@rollup/plugin-alias@3.1.9': - resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} - engines: {node: '>=8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - - '@rollup/plugin-babel@5.3.1': - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - - '@rollup/plugin-commonjs@17.1.0': - resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^2.30.0 - - '@rollup/plugin-json@4.1.0': - resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - - '@rollup/plugin-node-resolve@11.2.1': - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - - '@rollup/pluginutils@3.1.0': - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - - '@rollup/pluginutils@4.2.1': - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sinclair/typebox@0.34.41': - resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} - - '@sindresorhus/tsconfig@3.0.1': - resolution: {integrity: sha512-0/gtPNTY3++0J2BZM5nHHULg0BIMw886gqdn8vWN+Av6bgF5ZU2qIcHubAn+Z9KNvJhO8WFE+9kDOU3n6OcKtA==} - engines: {node: '>=14'} - - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - - '@sinonjs/fake-timers@13.0.5': - resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} - - '@surma/rollup-plugin-off-main-thread@2.2.3': - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - - '@trufflesuite/bigint-buffer@1.1.10': - resolution: {integrity: sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==} - engines: {node: '>= 14.0.0'} - - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - - '@types/estree@0.0.39': - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest@29.5.14': - resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - - '@types/jest@30.0.0': - resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} - - '@types/node@20.19.24': - resolution: {integrity: sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==} - - '@types/node@22.18.13': - resolution: {integrity: sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==} - - '@types/node@24.9.2': - resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/parse-path@7.1.0': - resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} - deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. - - '@types/resolve@1.17.1': - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.34': - resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==} - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} - cpu: [arm] - os: [android] - - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} - cpu: [arm64] - os: [android] - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} - cpu: [x64] - os: [win32] - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-escapes@7.1.1: - resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} - engines: {node: '>=18'} - - ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asyncro@3.0.0: - resolution: {integrity: sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==} - - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-jest@30.2.0: - resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@babel/core': ^7.11.0 || ^8.0.0-0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-istanbul@7.0.1: - resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} - engines: {node: '>=12'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-plugin-jest-hoist@30.2.0: - resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - - babel-plugin-polyfill-corejs2@0.4.14: - resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.13.0: - resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.5: - resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-transform-async-to-promises@0.8.18: - resolution: {integrity: sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==} - - babel-plugin-transform-replace-expressions@0.2.0: - resolution: {integrity: sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} - peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@30.2.0: - resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@babel/core': ^7.11.0 || ^8.0.0-beta.1 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - baseline-browser-mapping@2.8.22: - resolution: {integrity: sha512-/tk9kky/d8T8CTXIQYASLyhAxR5VwL3zct1oAoVTaOUHwrmsGnfbRwNdEq+vOl2BN8i3PcDdP0o4Q+jjKQoFbQ==} - hasBin: true - - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - - before-after-hook@4.0.0: - resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - brotli-size@4.0.0: - resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} - engines: {node: '>= 10.16.0'} - - browserslist@4.27.0: - resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} - - c12@3.3.0: - resolution: {integrity: sha512-K9ZkuyeJQeqLEyqldbYLG3wjqwpw4BVaAqvmxq3GYKK0b1A/yYQdIcJxkzAOWcNVWhJpRXAPfZFueekiY/L8Dw==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - - caniuse-lite@1.0.30001752: - resolution: {integrity: sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g==} - - chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - chardet@2.1.1: - resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} - engines: {node: '>=8'} - - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - - cjs-module-lexer@2.1.0: - resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} - - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} - - cli-spinners@3.3.0: - resolution: {integrity: sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==} - engines: {node: '>=18.20'} - - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collect-v8-coverage@1.0.3: - resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concat-with-sourcemaps@1.1.0: - resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} - - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - core-js-compat@3.46.0: - resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - css-declaration-sorter@6.4.1: - resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} - engines: {node: ^10 || ^12 || >=14} - peerDependencies: - postcss: ^8.0.9 - - css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - - css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - cssnano-preset-default@5.2.14: - resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - cssnano-utils@3.1.0: - resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - cssnano@5.1.15: - resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - dedent@1.7.0: - resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} - engines: {node: '>=18'} - - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} - engines: {node: '>=18'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - dotenv@17.2.3: - resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} - engines: {node: '>=12'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - duplexer@0.1.1: - resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-to-chromium@1.5.244: - resolution: {integrity: sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==} - - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - esbuild@0.25.11: - resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-walker@0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - - estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - eta@4.0.1: - resolution: {integrity: sha512-0h0oBEsF6qAJU7eu9ztvJoTo8D2PAq/4FvXVIQA1fek3WOTe6KPsVJycekG1+g1N6mfpblkheoGwaUhMtnlH4A==} - engines: {node: '>=20'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - - exit-x@0.2.2: - resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} - engines: {node: '>= 0.8.0'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - expect@30.2.0: - resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} - - fast-content-type-parse@3.0.0: - resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - figures@1.7.0: - resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} - engines: {node: '>=0.10.0'} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - filesize@6.4.0: - resolution: {integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==} - engines: {node: '>= 0.4.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - - generic-names@4.0.0: - resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - - get-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} - - giget@2.0.0: - resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} - hasBin: true - - git-up@8.1.1: - resolution: {integrity: sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==} - - git-url-parse@16.1.0: - resolution: {integrity: sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - gzip-size@3.0.0: - resolution: {integrity: sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==} - engines: {node: '>=0.12.0'} - - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} - engines: {node: '>=0.10.0'} - - icss-replace-symbols@1.1.0: - resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} - - icss-utils@5.1.0: - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - import-cwd@3.0.0: - resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} - engines: {node: '>=8'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - import-from@3.0.0: - resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} - engines: {node: '>=8'} - - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {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. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inquirer@12.9.6: - resolution: {integrity: sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} - engines: {node: '>= 12'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - - is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-ssh@1.4.1: - resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - issue-parser@7.0.1: - resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} - engines: {node: ^18.17 || >=20.6.1} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - - istanbul-reports@3.2.0: - resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} - engines: {node: '>=8'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-changed-files@30.2.0: - resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@30.2.0: - resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-cli@30.2.0: - resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - 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 - - jest-config@30.2.0: - resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@types/node': '*' - esbuild-register: '>=3.4.0' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - esbuild-register: - optional: true - ts-node: - optional: true - - jest-coverage-badges@1.1.2: - resolution: {integrity: sha512-44A7i2xR6os8+fWk8ZRM6W4fKiD2jwKOLU9eB3iTIIWACd9RbdvmiCNpQZTOsUBhKvz7aQ/ASFhu5JOEhWUOlg==} - engines: {node: '>=6.11', npm: '>=5.3'} - hasBin: true - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-diff@30.2.0: - resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@30.2.0: - resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@30.2.0: - resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-node@30.2.0: - resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@30.2.0: - resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@30.2.0: - resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@30.2.0: - resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@30.2.0: - resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@30.2.0: - resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-regex-util@30.0.1: - resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@30.2.0: - resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@30.2.0: - resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@30.2.0: - resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@30.2.0: - resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@30.2.0: - resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@30.2.0: - resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@30.2.0: - resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@30.2.0: - resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-worker@26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@30.2.0: - resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest@30.2.0: - resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - lint-staged@15.5.2: - resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} - engines: {node: '>=18.12.0'} - hasBin: true - - listr2@8.3.3: - resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} - engines: {node: '>=18.0.0'} - - loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} - engines: {node: '>= 12.13.0'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.capitalize@4.2.1: - resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.escaperegexp@4.1.2: - resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash.uniqby@4.7.0: - resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@7.0.1: - resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} - engines: {node: '>=18'} - - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - - macos-release@3.4.0: - resolution: {integrity: sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - maxmin@2.1.0: - resolution: {integrity: sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw==} - engines: {node: '>=0.12'} - - mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - microbundle@0.15.1: - resolution: {integrity: sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==} - hasBin: true - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - mkdirp@0.5.1: - resolution: {integrity: sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==} - deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) - hasBin: true - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - napi-postinstall@0.3.4: - resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - - new-github-release-url@2.0.0: - resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - node-fe1-fpe@1.0.0-beta.2: - resolution: {integrity: sha512-7SAVq94y//+D7N6BY5RFJtgYi5qIHyPFXvPAQtKsh6u5nPjftyzE07W1qaUMQndXWP8+ykall5Ua8l8ZdM1NSw==} - engines: {node: '>=10.8.0'} - - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - - node-gyp-build@4.4.0: - resolution: {integrity: sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==} - hasBin: true - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - - number-is-nan@1.0.1: - resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} - engines: {node: '>=0.10.0'} - - nypm@0.6.2: - resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} - - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} - engines: {node: '>=18'} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - ora@9.0.0: - resolution: {integrity: sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==} - engines: {node: '>=20'} - - os-name@6.1.0: - resolution: {integrity: sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==} - engines: {node: '>=18'} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-path@7.1.0: - resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} - - parse-url@9.2.0: - resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} - engines: {node: '>=14.13.0'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - perfect-debounce@2.0.0: - resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - - pify@5.0.0: - resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} - engines: {node: '>=10'} - - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss-calc@8.2.4: - resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} - peerDependencies: - postcss: ^8.2.2 - - postcss-colormin@5.3.1: - resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-convert-values@5.1.3: - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-comments@5.1.2: - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-duplicates@5.1.0: - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-empty@5.1.1: - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-overridden@5.1.0: - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-load-config@3.1.4: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-merge-longhand@5.1.7: - resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-merge-rules@5.1.4: - resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-minify-font-values@5.1.0: - resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-minify-gradients@5.1.1: - resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-minify-params@5.1.4: - resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-minify-selectors@5.2.1: - resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-modules-extract-imports@3.1.0: - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-local-by-default@4.2.0: - resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-scope@3.2.1: - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-values@4.0.0: - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules@4.3.1: - resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} - peerDependencies: - postcss: ^8.0.0 - - postcss-normalize-charset@5.1.0: - resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-display-values@5.1.0: - resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-positions@5.1.1: - resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-repeat-style@5.1.1: - resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-string@5.1.0: - resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-timing-functions@5.1.0: - resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-unicode@5.1.1: - resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-url@5.1.0: - resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-whitespace@5.1.1: - resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-ordered-values@5.1.3: - resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-reduce-initial@5.1.2: - resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-reduce-transforms@5.1.0: - resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} - engines: {node: '>=4'} - - postcss-svgo@5.1.0: - resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-unique-selectors@5.1.1: - resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} - hasBin: true - - pretty-bytes@3.0.1: - resolution: {integrity: sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==} - engines: {node: '>=0.10.0'} - - pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - pretty-format@30.2.0: - resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - promise.series@0.2.0: - resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} - engines: {node: '>=0.12'} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - protocols@2.0.2: - resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} - - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - pure-rand@7.0.1: - resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - rc9@2.1.2: - resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regenerate-unicode-properties@10.2.2: - resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - regexpu-core@6.4.0: - resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} - engines: {node: '>=4'} - - regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - - regjsparser@0.13.0: - resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} - hasBin: true - - release-it@19.0.5: - resolution: {integrity: sha512-bYlUKC0TQroBKi8jQUeoxLHql4d9Fx/2EQLHPKUobXTNSiTS2WY8vlgdHZRhRjVEMyAWwyadJVKfFZnRJuRn4Q==} - engines: {node: ^20.12.0 || >=22.0.0} - hasBin: true - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve.exports@2.0.3: - resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} - engines: {node: '>=10'} - - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - - rollup-plugin-bundle-size@1.0.3: - resolution: {integrity: sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==} - - rollup-plugin-postcss@4.0.2: - resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} - engines: {node: '>=10'} - peerDependencies: - postcss: 8.x - - rollup-plugin-terser@7.0.2: - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^2.0.0 - - rollup-plugin-typescript2@0.32.1: - resolution: {integrity: sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==} - peerDependencies: - rollup: '>=1.26.3' - typescript: '>=2.4.0' - - rollup-plugin-visualizer@5.14.0: - resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - rolldown: 1.x - rollup: 2.x || 3.x || 4.x - peerDependenciesMeta: - rolldown: - optional: true - rollup: - optional: true - - rollup-pluginutils@2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - - rollup@2.79.2: - resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} - engines: {node: '>=10.0.0'} - hasBin: true - - run-applescript@7.1.0: - resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} - engines: {node: '>=18'} - - run-async@4.0.6: - resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} - engines: {node: '>=0.12.0'} - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-identifier@0.4.2: - resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - serialize-javascript@4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} - - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - - string-hash@1.1.3: - resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - - string-width@8.1.0: - resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} - engines: {node: '>=20'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - style-inject@0.3.0: - resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} - - stylehacks@5.1.1: - resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} - engines: {node: '>=10.13.0'} - hasBin: true - - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} - engines: {node: ^14.18.0 || >=16.0.0} - - terser@5.44.0: - resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} - engines: {node: '>=10'} - hasBin: true - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - - tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - ts-jest@29.4.5: - resolution: {integrity: sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 || ^30.0.0 - '@jest/types': ^29.0.0 || ^30.0.0 - babel-jest: ^29.0.0 || ^30.0.0 - esbuild: '*' - jest: ^29.0.0 || ^30.0.0 - jest-util: ^29.0.0 || ^30.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 - jest-util: - optional: true - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsx@4.20.6: - resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} - engines: {node: '>=18.0.0'} - hasBin: true - - turbo-darwin-64@2.6.0: - resolution: {integrity: sha512-6vHnLAubHj8Ib45Knu+oY0ZVCLO7WcibzAvt5b1E72YHqAs4y8meMAGMZM0jLqWPh/9maHDc16/qBCMxtW4pXg==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.6.0: - resolution: {integrity: sha512-IU+gWMEXNBw8H0pxvE7nPEa5p6yahxbN8g/Q4Bf0AHymsAFqsScgV0peeNbWybdmY9jk1LPbALOsF2kY1I7ZiQ==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.6.0: - resolution: {integrity: sha512-CKoiJ2ZFJLCDsWdRlZg+ew1BkGn8iCEGdePhISVpjsGwkJwSVhVu49z2zKdBeL1IhcSKS2YALwp9ellNZANJxw==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.6.0: - resolution: {integrity: sha512-WroVCdCvJbrhNxNdw7XB7wHAfPPJPV+IXY+ZKNed+9VdfBu/2mQNfKnvqTuFTH7n+Pdpv8to9qwhXRTJe26upg==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.6.0: - resolution: {integrity: sha512-7pZo5aGQPR+A7RMtWCZHusarJ6y15LQ+o3jOmpMxTic/W6Bad+jSeqo07TWNIseIWjCVzrSv27+0odiYRYtQdA==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.6.0: - resolution: {integrity: sha512-1Ty+NwIksQY7AtFUCPrTpcKQE7zmd/f7aRjdT+qkqGFQjIjFYctEtN7qo4vpQPBgCfS1U3ka83A2u/9CfJQ3wQ==} - cpu: [arm64] - os: [win32] - - turbo@2.6.0: - resolution: {integrity: sha512-kC5VJqOXo50k0/0jnJDDjibLAXalqT9j7PQ56so0pN+81VR4Fwb2QgIE9dTzT3phqOTQuEXkPh3sCpnv5Isz2g==} - hasBin: true - - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} - engines: {node: '>=14.17'} - hasBin: true - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - - undici@6.21.3: - resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} - engines: {node: '>=18.17'} - - unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.2.1: - resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.2.0: - resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} - engines: {node: '>=4'} - - universal-user-agent@7.0.3: - resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - - update-browserslist-db@1.1.4: - resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - url-join@5.0.0: - resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wildcard-match@5.1.4: - resolution: {integrity: sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==} - - windows-release@6.1.0: - resolution: {integrity: sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==} - engines: {node: '>=18'} - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - wsl-utils@0.1.0: - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} - engines: {node: '>=18'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - - yoctocolors@2.1.2: - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} - engines: {node: '>=18'} - -snapshots: - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.28.5': {} - - '@babel/core@7.28.5': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.28.5': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.27.3': - dependencies: - '@babel/types': 7.28.5 - - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.28.5 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.27.0 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.5 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.4.0 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.3 - lodash.debounce: 4.0.8 - resolve: 1.22.11 - transitivePeerDependencies: - - supports-color - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-member-expression-to-functions@7.28.5': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.27.1': - dependencies: - '@babel/types': 7.28.5 - - '@babel/helper-plugin-utils@7.27.1': {} - - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helper-wrap-function@7.28.3': - dependencies: - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.28.4': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - - '@babel/parser@7.28.5': - dependencies: - '@babel/types': 7.28.5 - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-class-properties@7.12.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-globals': 7.28.0 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/template': 7.27.2 - - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.5) - - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) - '@babel/traverse': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/types': 7.28.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5) - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/preset-env@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/compat-data': 7.28.5 - '@babel/core': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5) - '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.5) - '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.46.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/preset-flow@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.5) - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.5 - esutils: 2.0.3 - - '@babel/preset-react@7.28.5(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color - - '@babel/runtime@7.28.4': {} - - '@babel/template@7.27.2': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - - '@babel/traverse@7.28.5': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.5': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@bcoe/v8-coverage@0.2.3': {} - - '@emnapi/core@1.6.0': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.6.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@esbuild/aix-ppc64@0.25.11': - optional: true - - '@esbuild/android-arm64@0.25.11': - optional: true - - '@esbuild/android-arm@0.25.11': - optional: true - - '@esbuild/android-x64@0.25.11': - optional: true - - '@esbuild/darwin-arm64@0.25.11': - optional: true - - '@esbuild/darwin-x64@0.25.11': - optional: true - - '@esbuild/freebsd-arm64@0.25.11': - optional: true - - '@esbuild/freebsd-x64@0.25.11': - optional: true - - '@esbuild/linux-arm64@0.25.11': - optional: true - - '@esbuild/linux-arm@0.25.11': - optional: true - - '@esbuild/linux-ia32@0.25.11': - optional: true - - '@esbuild/linux-loong64@0.25.11': - optional: true - - '@esbuild/linux-mips64el@0.25.11': - optional: true - - '@esbuild/linux-ppc64@0.25.11': - optional: true - - '@esbuild/linux-riscv64@0.25.11': - optional: true - - '@esbuild/linux-s390x@0.25.11': - optional: true - - '@esbuild/linux-x64@0.25.11': - optional: true - - '@esbuild/netbsd-arm64@0.25.11': - optional: true - - '@esbuild/netbsd-x64@0.25.11': - optional: true - - '@esbuild/openbsd-arm64@0.25.11': - optional: true - - '@esbuild/openbsd-x64@0.25.11': - optional: true - - '@esbuild/openharmony-arm64@0.25.11': - optional: true - - '@esbuild/sunos-x64@0.25.11': - optional: true - - '@esbuild/win32-arm64@0.25.11': - optional: true - - '@esbuild/win32-ia32@0.25.11': - optional: true - - '@esbuild/win32-x64@0.25.11': - optional: true - - '@inquirer/ansi@1.0.1': {} - - '@inquirer/checkbox@4.3.0(@types/node@20.19.24)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@20.19.24) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/checkbox@4.3.0(@types/node@22.18.13)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.13) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/checkbox@4.3.0(@types/node@24.9.2)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.9.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/confirm@5.1.19(@types/node@20.19.24)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/type': 3.0.9(@types/node@20.19.24) - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/confirm@5.1.19(@types/node@22.18.13)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/type': 3.0.9(@types/node@22.18.13) - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/confirm@5.1.19(@types/node@24.9.2)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/type': 3.0.9(@types/node@24.9.2) - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/core@10.3.0(@types/node@20.19.24)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@20.19.24) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/core@10.3.0(@types/node@22.18.13)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.13) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/core@10.3.0(@types/node@24.9.2)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.9.2) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/editor@4.2.21(@types/node@20.19.24)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/external-editor': 1.0.2(@types/node@20.19.24) - '@inquirer/type': 3.0.9(@types/node@20.19.24) - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/editor@4.2.21(@types/node@22.18.13)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/external-editor': 1.0.2(@types/node@22.18.13) - '@inquirer/type': 3.0.9(@types/node@22.18.13) - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/editor@4.2.21(@types/node@24.9.2)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/external-editor': 1.0.2(@types/node@24.9.2) - '@inquirer/type': 3.0.9(@types/node@24.9.2) - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/expand@4.0.21(@types/node@20.19.24)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/type': 3.0.9(@types/node@20.19.24) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/expand@4.0.21(@types/node@22.18.13)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/type': 3.0.9(@types/node@22.18.13) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/expand@4.0.21(@types/node@24.9.2)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/type': 3.0.9(@types/node@24.9.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/external-editor@1.0.2(@types/node@20.19.24)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.0 - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/external-editor@1.0.2(@types/node@22.18.13)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.0 - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/external-editor@1.0.2(@types/node@24.9.2)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.0 - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/figures@1.0.14': {} - - '@inquirer/input@4.2.5(@types/node@20.19.24)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/type': 3.0.9(@types/node@20.19.24) - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/input@4.2.5(@types/node@22.18.13)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/type': 3.0.9(@types/node@22.18.13) - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/input@4.2.5(@types/node@24.9.2)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/type': 3.0.9(@types/node@24.9.2) - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/number@3.0.21(@types/node@20.19.24)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/type': 3.0.9(@types/node@20.19.24) - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/number@3.0.21(@types/node@22.18.13)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/type': 3.0.9(@types/node@22.18.13) - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/number@3.0.21(@types/node@24.9.2)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/type': 3.0.9(@types/node@24.9.2) - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/password@4.0.21(@types/node@20.19.24)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/type': 3.0.9(@types/node@20.19.24) - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/password@4.0.21(@types/node@22.18.13)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/type': 3.0.9(@types/node@22.18.13) - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/password@4.0.21(@types/node@24.9.2)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/type': 3.0.9(@types/node@24.9.2) - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/prompts@7.9.0(@types/node@20.19.24)': - dependencies: - '@inquirer/checkbox': 4.3.0(@types/node@20.19.24) - '@inquirer/confirm': 5.1.19(@types/node@20.19.24) - '@inquirer/editor': 4.2.21(@types/node@20.19.24) - '@inquirer/expand': 4.0.21(@types/node@20.19.24) - '@inquirer/input': 4.2.5(@types/node@20.19.24) - '@inquirer/number': 3.0.21(@types/node@20.19.24) - '@inquirer/password': 4.0.21(@types/node@20.19.24) - '@inquirer/rawlist': 4.1.9(@types/node@20.19.24) - '@inquirer/search': 3.2.0(@types/node@20.19.24) - '@inquirer/select': 4.4.0(@types/node@20.19.24) - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/prompts@7.9.0(@types/node@22.18.13)': - dependencies: - '@inquirer/checkbox': 4.3.0(@types/node@22.18.13) - '@inquirer/confirm': 5.1.19(@types/node@22.18.13) - '@inquirer/editor': 4.2.21(@types/node@22.18.13) - '@inquirer/expand': 4.0.21(@types/node@22.18.13) - '@inquirer/input': 4.2.5(@types/node@22.18.13) - '@inquirer/number': 3.0.21(@types/node@22.18.13) - '@inquirer/password': 4.0.21(@types/node@22.18.13) - '@inquirer/rawlist': 4.1.9(@types/node@22.18.13) - '@inquirer/search': 3.2.0(@types/node@22.18.13) - '@inquirer/select': 4.4.0(@types/node@22.18.13) - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/prompts@7.9.0(@types/node@24.9.2)': - dependencies: - '@inquirer/checkbox': 4.3.0(@types/node@24.9.2) - '@inquirer/confirm': 5.1.19(@types/node@24.9.2) - '@inquirer/editor': 4.2.21(@types/node@24.9.2) - '@inquirer/expand': 4.0.21(@types/node@24.9.2) - '@inquirer/input': 4.2.5(@types/node@24.9.2) - '@inquirer/number': 3.0.21(@types/node@24.9.2) - '@inquirer/password': 4.0.21(@types/node@24.9.2) - '@inquirer/rawlist': 4.1.9(@types/node@24.9.2) - '@inquirer/search': 3.2.0(@types/node@24.9.2) - '@inquirer/select': 4.4.0(@types/node@24.9.2) - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/rawlist@4.1.9(@types/node@20.19.24)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/type': 3.0.9(@types/node@20.19.24) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/rawlist@4.1.9(@types/node@22.18.13)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/type': 3.0.9(@types/node@22.18.13) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/rawlist@4.1.9(@types/node@24.9.2)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/type': 3.0.9(@types/node@24.9.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/search@3.2.0(@types/node@20.19.24)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@20.19.24) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/search@3.2.0(@types/node@22.18.13)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.13) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/search@3.2.0(@types/node@24.9.2)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.9.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/select@4.4.0(@types/node@20.19.24)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@20.19.24) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/select@4.4.0(@types/node@22.18.13)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.13) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/select@4.4.0(@types/node@24.9.2)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.9.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.9.2 - - '@inquirer/type@3.0.9(@types/node@20.19.24)': - optionalDependencies: - '@types/node': 20.19.24 - - '@inquirer/type@3.0.9(@types/node@22.18.13)': - optionalDependencies: - '@types/node': 22.18.13 - - '@inquirer/type@3.0.9(@types/node@24.9.2)': - optionalDependencies: - '@types/node': 24.9.2 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.19.24 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/console@30.2.0': - dependencies: - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - chalk: 4.1.2 - jest-message-util: 30.2.0 - jest-util: 30.2.0 - slash: 3.0.0 - - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)': - 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': 20.19.24 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.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.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - - '@jest/core@30.2.0(babel-plugin-macros@3.1.0)': - dependencies: - '@jest/console': 30.2.0 - '@jest/pattern': 30.0.1 - '@jest/reporters': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 4.3.1 - exit-x: 0.2.2 - graceful-fs: 4.2.11 - jest-changed-files: 30.2.0 - jest-config: 30.2.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - jest-haste-map: 30.2.0 - jest-message-util: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-resolve-dependencies: 30.2.0 - jest-runner: 30.2.0 - jest-runtime: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - jest-watcher: 30.2.0 - micromatch: 4.0.8 - pretty-format: 30.2.0 - slash: 3.0.0 - transitivePeerDependencies: - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - - '@jest/diff-sequences@30.0.1': {} - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.24 - jest-mock: 29.7.0 - - '@jest/environment@30.2.0': - dependencies: - '@jest/fake-timers': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - jest-mock: 30.2.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect-utils@30.2.0': - dependencies: - '@jest/get-type': 30.1.0 - - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/expect@30.2.0': - dependencies: - expect: 30.2.0 - jest-snapshot: 30.2.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.19.24 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/fake-timers@30.2.0': - dependencies: - '@jest/types': 30.2.0 - '@sinonjs/fake-timers': 13.0.5 - '@types/node': 20.19.24 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 - jest-util: 30.2.0 - - '@jest/get-type@30.1.0': {} - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/globals@30.2.0': - dependencies: - '@jest/environment': 30.2.0 - '@jest/expect': 30.2.0 - '@jest/types': 30.2.0 - jest-mock: 30.2.0 - transitivePeerDependencies: - - supports-color - - '@jest/pattern@30.0.1': - dependencies: - '@types/node': 20.19.24 - jest-regex-util: 30.0.1 - - '@jest/reporters@29.7.0': - 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.31 - '@types/node': 20.19.24 - chalk: 4.1.2 - collect-v8-coverage: 1.0.3 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.2.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@30.2.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 20.19.24 - chalk: 4.1.2 - collect-v8-coverage: 1.0.3 - exit-x: 0.2.2 - glob: 10.4.5 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.2.0 - jest-message-util: 30.2.0 - jest-util: 30.2.0 - jest-worker: 30.2.0 - slash: 3.0.0 - string-length: 4.0.2 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/schemas@30.0.5': - dependencies: - '@sinclair/typebox': 0.34.41 - - '@jest/snapshot-utils@30.2.0': - dependencies: - '@jest/types': 30.2.0 - chalk: 4.1.2 - graceful-fs: 4.2.11 - natural-compare: 1.4.0 - - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/source-map@30.0.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.3 - - '@jest/test-result@30.2.0': - dependencies: - '@jest/console': 30.2.0 - '@jest/types': 30.2.0 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.3 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/test-sequencer@30.2.0': - dependencies: - '@jest/test-result': 30.2.0 - graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.28.5 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/transform@30.2.0': - dependencies: - '@babel/core': 7.28.5 - '@jest/types': 30.2.0 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 7.0.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - jest-regex-util: 30.0.1 - jest-util: 30.2.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 5.0.1 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.24 - '@types/yargs': 17.0.34 - chalk: 4.1.2 - - '@jest/types@30.2.0': - dependencies: - '@jest/pattern': 30.0.1 - '@jest/schemas': 30.0.5 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.24 - '@types/yargs': 17.0.34 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/source-map@0.3.11': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.6.0 - '@emnapi/runtime': 1.6.0 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@nodeutils/defaults-deep@1.1.0': - dependencies: - lodash: 4.17.21 - - '@octokit/auth-token@6.0.0': {} - - '@octokit/core@7.0.6': - dependencies: - '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.6 - '@octokit/request-error': 7.0.2 - '@octokit/types': 16.0.0 - before-after-hook: 4.0.0 - universal-user-agent: 7.0.3 - - '@octokit/endpoint@11.0.2': - dependencies: - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 - - '@octokit/graphql@9.0.3': - dependencies: - '@octokit/request': 10.0.6 - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 - - '@octokit/openapi-types@26.0.0': {} - - '@octokit/openapi-types@27.0.0': {} - - '@octokit/plugin-paginate-rest@13.2.1(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 15.0.2 - - '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - - '@octokit/plugin-rest-endpoint-methods@16.1.1(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 15.0.2 - - '@octokit/request-error@7.0.2': - dependencies: - '@octokit/types': 16.0.0 - - '@octokit/request@10.0.6': - dependencies: - '@octokit/endpoint': 11.0.2 - '@octokit/request-error': 7.0.2 - '@octokit/types': 16.0.0 - fast-content-type-parse: 3.0.0 - universal-user-agent: 7.0.3 - - '@octokit/rest@22.0.0': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/plugin-paginate-rest': 13.2.1(@octokit/core@7.0.6) - '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6) - '@octokit/plugin-rest-endpoint-methods': 16.1.1(@octokit/core@7.0.6) - - '@octokit/types@15.0.2': - dependencies: - '@octokit/openapi-types': 26.0.0 - - '@octokit/types@16.0.0': - dependencies: - '@octokit/openapi-types': 27.0.0 - - '@phun-ky/typeof@2.0.3': {} - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@pkgr/core@0.2.9': {} - - '@rollup/plugin-alias@3.1.9(rollup@2.79.2)': - dependencies: - rollup: 2.79.2 - slash: 3.0.0 - - '@rollup/plugin-babel@5.3.1(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@2.79.2)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 - '@rollup/pluginutils': 3.1.0(rollup@2.79.2) - rollup: 2.79.2 - optionalDependencies: - '@types/babel__core': 7.20.5 - transitivePeerDependencies: - - supports-color - - '@rollup/plugin-commonjs@17.1.0(rollup@2.79.2)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.2) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 7.2.3 - is-reference: 1.2.1 - magic-string: 0.25.9 - resolve: 1.22.11 - rollup: 2.79.2 - - '@rollup/plugin-json@4.1.0(rollup@2.79.2)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.2) - rollup: 2.79.2 - - '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)': - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.2) - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.11 - rollup: 2.79.2 - - '@rollup/pluginutils@3.1.0(rollup@2.79.2)': - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.2 - - '@rollup/pluginutils@4.2.1': - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.1 - - '@sinclair/typebox@0.27.8': {} - - '@sinclair/typebox@0.34.41': {} - - '@sindresorhus/tsconfig@3.0.1': {} - - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@sinonjs/fake-timers@13.0.5': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@surma/rollup-plugin-off-main-thread@2.2.3': - dependencies: - ejs: 3.1.10 - json5: 2.2.3 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.12 - - '@tootallnate/quickjs-emscripten@0.23.0': {} - - '@trufflesuite/bigint-buffer@1.1.10': - dependencies: - node-gyp-build: 4.4.0 - - '@trysound/sax@0.2.0': {} - - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.28.5 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - - '@types/babel__traverse@7.28.0': - dependencies: - '@babel/types': 7.28.5 - - '@types/estree@0.0.39': {} - - '@types/estree@1.0.8': {} - - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 20.19.24 - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@29.5.14': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - - '@types/jest@30.0.0': - dependencies: - expect: 30.2.0 - pretty-format: 30.2.0 - - '@types/node@20.19.24': - dependencies: - undici-types: 6.21.0 - - '@types/node@22.18.13': - dependencies: - undici-types: 6.21.0 - - '@types/node@24.9.2': - dependencies: - undici-types: 7.16.0 - - '@types/parse-json@4.0.2': {} - - '@types/parse-path@7.1.0': - dependencies: - parse-path: 7.1.0 - - '@types/resolve@1.17.1': - dependencies: - '@types/node': 20.19.24 - - '@types/stack-utils@2.0.3': {} - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.34': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@ungap/structured-clone@1.3.0': {} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true - - acorn@8.15.0: {} - - agent-base@7.1.4: {} - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-escapes@7.1.1: - dependencies: - environment: 1.1.0 - - ansi-regex@2.1.1: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@2.2.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - ansi-styles@6.2.3: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - - async-function@1.0.0: {} - - async-retry@1.3.3: - dependencies: - retry: 0.13.1 - - async@3.2.6: {} - - asyncro@3.0.0: {} - - autoprefixer@10.4.21(postcss@8.5.6): - dependencies: - browserslist: 4.27.0 - caniuse-lite: 1.0.30001752 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - babel-jest@29.7.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.28.5) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-jest@30.2.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 7.0.1 - babel-preset-jest: 30.2.0(@babel/core@7.28.5) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.27.1 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@7.0.1: - dependencies: - '@babel/helper-plugin-utils': 7.27.1 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 6.0.3 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.28.0 - - babel-plugin-jest-hoist@30.2.0: - dependencies: - '@types/babel__core': 7.20.5 - - babel-plugin-macros@3.1.0: - dependencies: - '@babel/runtime': 7.28.4 - cosmiconfig: 7.1.0 - resolve: 1.22.11 - - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): - dependencies: - '@babel/compat-data': 7.28.5 - '@babel/core': 7.28.5 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.46.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) - transitivePeerDependencies: - - supports-color - - babel-plugin-transform-async-to-promises@0.8.18: {} - - babel-plugin-transform-replace-expressions@0.2.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 - - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) - - babel-preset-jest@29.6.3(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) - - babel-preset-jest@30.2.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - babel-plugin-jest-hoist: 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) - - balanced-match@1.0.2: {} - - baseline-browser-mapping@2.8.22: {} - - basic-ftp@5.0.5: {} - - before-after-hook@4.0.0: {} - - boolbase@1.0.0: {} - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - brotli-size@4.0.0: - dependencies: - duplexer: 0.1.1 - - browserslist@4.27.0: - dependencies: - baseline-browser-mapping: 2.8.22 - caniuse-lite: 1.0.30001752 - electron-to-chromium: 1.5.244 - node-releases: 2.0.27 - update-browserslist-db: 1.1.4(browserslist@4.27.0) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - - buffer-from@1.1.2: {} - - builtin-modules@3.3.0: {} - - bundle-name@4.1.0: - dependencies: - run-applescript: 7.1.0 - - c12@3.3.0: - dependencies: - chokidar: 4.0.3 - confbox: 0.2.2 - defu: 6.1.4 - dotenv: 17.2.3 - exsolve: 1.0.7 - giget: 2.0.0 - jiti: 2.6.1 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 2.0.0 - pkg-types: 2.3.0 - rc9: 2.1.2 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - caniuse-api@3.0.0: - dependencies: - browserslist: 4.27.0 - caniuse-lite: 1.0.30001752 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - - caniuse-lite@1.0.30001752: {} - - chalk@1.1.3: - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.6.2: {} - - char-regex@1.0.2: {} - - chardet@2.1.1: {} - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - ci-info@3.9.0: {} - - ci-info@4.3.1: {} - - citty@0.1.6: - dependencies: - consola: 3.4.2 - - cjs-module-lexer@1.4.3: {} - - cjs-module-lexer@2.1.0: {} - - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-spinners@3.3.0: {} - - cli-truncate@4.0.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 - - cli-width@4.1.0: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - co@4.6.0: {} - - collect-v8-coverage@1.0.3: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - colord@2.9.3: {} - - colorette@2.0.20: {} - - commander@13.1.0: {} - - commander@2.20.3: {} - - commander@7.2.0: {} - - commondir@1.0.1: {} - - concat-map@0.0.1: {} - - concat-with-sourcemaps@1.1.0: - dependencies: - source-map: 0.6.1 - - confbox@0.2.2: {} - - consola@3.4.2: {} - - convert-source-map@2.0.0: {} - - core-js-compat@3.46.0: - dependencies: - browserslist: 4.27.0 - - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - - create-jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-jest@29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-jest@29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - css-declaration-sorter@6.4.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - css-select@4.3.0: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - - css-tree@1.1.3: - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - - css-what@6.2.2: {} - - cssesc@3.0.0: {} - - cssnano-preset-default@5.2.14(postcss@8.5.6): - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.5.6) - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-calc: 8.2.4(postcss@8.5.6) - postcss-colormin: 5.3.1(postcss@8.5.6) - postcss-convert-values: 5.1.3(postcss@8.5.6) - postcss-discard-comments: 5.1.2(postcss@8.5.6) - postcss-discard-duplicates: 5.1.0(postcss@8.5.6) - postcss-discard-empty: 5.1.1(postcss@8.5.6) - postcss-discard-overridden: 5.1.0(postcss@8.5.6) - postcss-merge-longhand: 5.1.7(postcss@8.5.6) - postcss-merge-rules: 5.1.4(postcss@8.5.6) - postcss-minify-font-values: 5.1.0(postcss@8.5.6) - postcss-minify-gradients: 5.1.1(postcss@8.5.6) - postcss-minify-params: 5.1.4(postcss@8.5.6) - postcss-minify-selectors: 5.2.1(postcss@8.5.6) - postcss-normalize-charset: 5.1.0(postcss@8.5.6) - postcss-normalize-display-values: 5.1.0(postcss@8.5.6) - postcss-normalize-positions: 5.1.1(postcss@8.5.6) - postcss-normalize-repeat-style: 5.1.1(postcss@8.5.6) - postcss-normalize-string: 5.1.0(postcss@8.5.6) - postcss-normalize-timing-functions: 5.1.0(postcss@8.5.6) - postcss-normalize-unicode: 5.1.1(postcss@8.5.6) - postcss-normalize-url: 5.1.0(postcss@8.5.6) - postcss-normalize-whitespace: 5.1.1(postcss@8.5.6) - postcss-ordered-values: 5.1.3(postcss@8.5.6) - postcss-reduce-initial: 5.1.2(postcss@8.5.6) - postcss-reduce-transforms: 5.1.0(postcss@8.5.6) - postcss-svgo: 5.1.0(postcss@8.5.6) - postcss-unique-selectors: 5.1.1(postcss@8.5.6) - - cssnano-utils@3.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - cssnano@5.1.15(postcss@8.5.6): - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.5.6) - lilconfig: 2.1.0 - postcss: 8.5.6 - yaml: 1.10.2 - - csso@4.2.0: - dependencies: - css-tree: 1.1.3 - - data-uri-to-buffer@6.0.2: {} - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - dedent@1.7.0(babel-plugin-macros@3.1.0): - optionalDependencies: - babel-plugin-macros: 3.1.0 - - deepmerge@4.3.1: {} - - default-browser-id@5.0.0: {} - - default-browser@5.2.1: - dependencies: - bundle-name: 4.1.0 - default-browser-id: 5.0.0 - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-lazy-prop@2.0.0: {} - - define-lazy-prop@3.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - defu@6.1.4: {} - - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - - destr@2.0.5: {} - - detect-newline@3.1.0: {} - - diff-sequences@29.6.3: {} - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - domelementtype@2.3.0: {} - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - dotenv@17.2.3: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - duplexer@0.1.1: {} - - duplexer@0.1.2: {} - - eastasianwidth@0.2.0: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.4 - - electron-to-chromium@1.5.244: {} - - emittery@0.13.1: {} - - emoji-regex@10.6.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - entities@2.2.0: {} - - environment@1.1.0: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - esbuild@0.25.11: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.11 - '@esbuild/android-arm': 0.25.11 - '@esbuild/android-arm64': 0.25.11 - '@esbuild/android-x64': 0.25.11 - '@esbuild/darwin-arm64': 0.25.11 - '@esbuild/darwin-x64': 0.25.11 - '@esbuild/freebsd-arm64': 0.25.11 - '@esbuild/freebsd-x64': 0.25.11 - '@esbuild/linux-arm': 0.25.11 - '@esbuild/linux-arm64': 0.25.11 - '@esbuild/linux-ia32': 0.25.11 - '@esbuild/linux-loong64': 0.25.11 - '@esbuild/linux-mips64el': 0.25.11 - '@esbuild/linux-ppc64': 0.25.11 - '@esbuild/linux-riscv64': 0.25.11 - '@esbuild/linux-s390x': 0.25.11 - '@esbuild/linux-x64': 0.25.11 - '@esbuild/netbsd-arm64': 0.25.11 - '@esbuild/netbsd-x64': 0.25.11 - '@esbuild/openbsd-arm64': 0.25.11 - '@esbuild/openbsd-x64': 0.25.11 - '@esbuild/openharmony-arm64': 0.25.11 - '@esbuild/sunos-x64': 0.25.11 - '@esbuild/win32-arm64': 0.25.11 - '@esbuild/win32-ia32': 0.25.11 - '@esbuild/win32-x64': 0.25.11 - - escalade@3.2.0: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - esprima@4.0.1: {} - - estraverse@5.3.0: {} - - estree-walker@0.6.1: {} - - estree-walker@1.0.1: {} - - estree-walker@2.0.2: {} - - esutils@2.0.3: {} - - eta@4.0.1: {} - - eventemitter3@4.0.7: {} - - eventemitter3@5.0.1: {} - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - - exit-x@0.2.2: {} - - exit@0.1.2: {} - - expect@29.7.0: - 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 - - expect@30.2.0: - dependencies: - '@jest/expect-utils': 30.2.0 - '@jest/get-type': 30.1.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 - jest-util: 30.2.0 - - exsolve@1.0.7: {} - - fast-content-type-parse@3.0.0: {} - - fast-json-stable-stringify@2.1.0: {} - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - figures@1.7.0: - dependencies: - escape-string-regexp: 1.0.5 - object-assign: 4.1.1 - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - filesize@6.4.0: {} - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-cache-dir@3.3.2: - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - fraction.js@4.3.7: {} - - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - generator-function@2.0.1: {} - - generic-names@4.0.0: - dependencies: - loader-utils: 3.3.1 - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-east-asian-width@1.4.0: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-package-type@0.1.0: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@6.0.1: {} - - get-stream@8.0.1: {} - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.13.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - get-uri@6.0.5: - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - giget@2.0.0: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - defu: 6.1.4 - node-fetch-native: 1.6.7 - nypm: 0.6.2 - pathe: 2.0.3 - - git-up@8.1.1: - dependencies: - is-ssh: 1.4.1 - parse-url: 9.2.0 - - git-url-parse@16.1.0: - dependencies: - git-up: 8.1.1 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - globalyzer@0.1.0: {} - - globrex@0.1.2: {} - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - gzip-size@3.0.0: - dependencies: - duplexer: 0.1.2 - - gzip-size@6.0.0: - dependencies: - duplexer: 0.1.2 - - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - has-ansi@2.0.0: - dependencies: - ansi-regex: 2.1.1 - - has-bigints@1.1.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - html-escaper@2.0.2: {} - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - human-signals@2.1.0: {} - - human-signals@5.0.0: {} - - husky@9.1.7: {} - - iconv-lite@0.7.0: - dependencies: - safer-buffer: 2.1.2 - - icss-replace-symbols@1.1.0: {} - - icss-utils@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - import-cwd@3.0.0: - dependencies: - import-from: 3.0.0 - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-from@3.0.0: - dependencies: - resolve-from: 5.0.0 - - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - inquirer@12.9.6(@types/node@20.19.24): - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@20.19.24) - '@inquirer/prompts': 7.9.0(@types/node@20.19.24) - '@inquirer/type': 3.0.9(@types/node@20.19.24) - mute-stream: 2.0.0 - run-async: 4.0.6 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 20.19.24 - - inquirer@12.9.6(@types/node@22.18.13): - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@22.18.13) - '@inquirer/prompts': 7.9.0(@types/node@22.18.13) - '@inquirer/type': 3.0.9(@types/node@22.18.13) - mute-stream: 2.0.0 - run-async: 4.0.6 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 22.18.13 - - inquirer@12.9.6(@types/node@24.9.2): - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.9.2) - '@inquirer/prompts': 7.9.0(@types/node@24.9.2) - '@inquirer/type': 3.0.9(@types/node@24.9.2) - mute-stream: 2.0.0 - run-async: 4.0.6 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 24.9.2 - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - ip-address@10.0.1: {} - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-docker@2.2.1: {} - - is-docker@3.0.0: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.4.0 - - is-generator-fn@2.1.0: {} - - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-interactive@2.0.0: {} - - is-map@2.0.3: {} - - is-module@1.0.0: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.8 - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-ssh@1.4.1: - dependencies: - protocols: 2.0.2 - - is-stream@2.0.1: {} - - is-stream@3.0.0: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-unicode-supported@2.1.0: {} - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - - is-wsl@3.1.0: - dependencies: - is-inside-container: 1.0.0 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - issue-parser@7.0.1: - dependencies: - lodash.capitalize: 4.2.1 - lodash.escaperegexp: 4.1.2 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.uniqby: 4.7.0 - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.3: - dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.7.3 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.2.0: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.4 - picocolors: 1.1.1 - - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-changed-files@30.2.0: - dependencies: - execa: 5.1.1 - jest-util: 30.2.0 - p-limit: 3.1.0 - - jest-circus@29.7.0(babel-plugin-macros@3.1.0): - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.24 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.7.0(babel-plugin-macros@3.1.0) - is-generator-fn: 2.1.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.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-circus@30.2.0(babel-plugin-macros@3.1.0): - dependencies: - '@jest/environment': 30.2.0 - '@jest/expect': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.7.0(babel-plugin-macros@3.1.0) - is-generator-fn: 2.1.0 - jest-each: 30.2.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-runtime: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 - p-limit: 3.1.0 - pretty-format: 30.2.0 - pure-rand: 7.0.1 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-cli@29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-cli@29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-cli@30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/core': 30.2.0(babel-plugin-macros@3.1.0) - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 - chalk: 4.1.2 - exit-x: 0.2.2 - import-local: 3.2.0 - jest-config: 30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - jest-util: 30.2.0 - jest-validate: 30.2.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0): - dependencies: - '@babel/core': 7.28.5 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.5) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0(babel-plugin-macros@3.1.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.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.24 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0): - dependencies: - '@babel/core': 7.28.5 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.5) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0(babel-plugin-macros@3.1.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.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.18.13 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0): - dependencies: - '@babel/core': 7.28.5 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.5) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0(babel-plugin-macros@3.1.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.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 24.9.2 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@30.2.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0): - dependencies: - '@babel/core': 7.28.5 - '@jest/get-type': 30.1.0 - '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - chalk: 4.1.2 - ci-info: 4.3.1 - deepmerge: 4.3.1 - glob: 10.4.5 - graceful-fs: 4.2.11 - jest-circus: 30.2.0(babel-plugin-macros@3.1.0) - jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-runner: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 30.2.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.24 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0): - dependencies: - '@babel/core': 7.28.5 - '@jest/get-type': 30.1.0 - '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - chalk: 4.1.2 - ci-info: 4.3.1 - deepmerge: 4.3.1 - glob: 10.4.5 - graceful-fs: 4.2.11 - jest-circus: 30.2.0(babel-plugin-macros@3.1.0) - jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-runner: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 30.2.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 24.9.2 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-coverage-badges@1.1.2: - dependencies: - mkdirp: 0.5.1 - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-diff@30.2.0: - dependencies: - '@jest/diff-sequences': 30.0.1 - '@jest/get-type': 30.1.0 - chalk: 4.1.2 - pretty-format: 30.2.0 - - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-docblock@30.2.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-each@30.2.0: - dependencies: - '@jest/get-type': 30.1.0 - '@jest/types': 30.2.0 - chalk: 4.1.2 - jest-util: 30.2.0 - pretty-format: 30.2.0 - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.24 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-environment-node@30.2.0: - dependencies: - '@jest/environment': 30.2.0 - '@jest/fake-timers': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - jest-mock: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.19.24 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-haste-map@30.2.0: - dependencies: - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 30.0.1 - jest-util: 30.2.0 - jest-worker: 30.2.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-leak-detector@30.2.0: - dependencies: - '@jest/get-type': 30.1.0 - pretty-format: 30.2.0 - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-matcher-utils@30.2.0: - dependencies: - '@jest/get-type': 30.1.0 - chalk: 4.1.2 - jest-diff: 30.2.0 - pretty-format: 30.2.0 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.27.1 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-message-util@30.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - '@jest/types': 30.2.0 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 30.2.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.19.24 - jest-util: 29.7.0 - - jest-mock@30.2.0: - dependencies: - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - jest-util: 30.2.0 - - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 - - jest-pnp-resolver@1.2.3(jest-resolve@30.2.0): - optionalDependencies: - jest-resolve: 30.2.0 - - jest-regex-util@29.6.3: {} - - jest-regex-util@30.0.1: {} - - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - jest-resolve-dependencies@30.2.0: - dependencies: - jest-regex-util: 30.0.1 - jest-snapshot: 30.2.0 - transitivePeerDependencies: - - supports-color - - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.11 - resolve.exports: 2.0.3 - slash: 3.0.0 - - jest-resolve@30.2.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0) - jest-util: 30.2.0 - jest-validate: 30.2.0 - slash: 3.0.0 - unrs-resolver: 1.11.1 - - jest-runner@29.7.0: - 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': 20.19.24 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - 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 - transitivePeerDependencies: - - supports-color - - jest-runner@30.2.0: - dependencies: - '@jest/console': 30.2.0 - '@jest/environment': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - chalk: 4.1.2 - emittery: 0.13.1 - exit-x: 0.2.2 - graceful-fs: 4.2.11 - jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 - jest-haste-map: 30.2.0 - jest-leak-detector: 30.2.0 - jest-message-util: 30.2.0 - jest-resolve: 30.2.0 - jest-runtime: 30.2.0 - jest-util: 30.2.0 - jest-watcher: 30.2.0 - jest-worker: 30.2.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@29.7.0: - 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': 20.19.24 - chalk: 4.1.2 - cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.3 - glob: 7.2.3 - graceful-fs: 4.2.11 - 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 - transitivePeerDependencies: - - supports-color - - jest-runtime@30.2.0: - dependencies: - '@jest/environment': 30.2.0 - '@jest/fake-timers': 30.2.0 - '@jest/globals': 30.2.0 - '@jest/source-map': 30.0.1 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - chalk: 4.1.2 - cjs-module-lexer: 2.1.0 - collect-v8-coverage: 1.0.3 - glob: 10.4.5 - graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - - jest-snapshot@29.7.0: - dependencies: - '@babel/core': 7.28.5 - '@babel/generator': 7.28.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) - '@babel/types': 7.28.5 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - 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.7.3 - transitivePeerDependencies: - - supports-color - - jest-snapshot@30.2.0: - dependencies: - '@babel/core': 7.28.5 - '@babel/generator': 7.28.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) - '@babel/types': 7.28.5 - '@jest/expect-utils': 30.2.0 - '@jest/get-type': 30.1.0 - '@jest/snapshot-utils': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) - chalk: 4.1.2 - expect: 30.2.0 - graceful-fs: 4.2.11 - jest-diff: 30.2.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-util: 30.2.0 - pretty-format: 30.2.0 - semver: 7.7.3 - synckit: 0.11.11 - transitivePeerDependencies: - - supports-color - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.19.24 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - - jest-util@30.2.0: - dependencies: - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - chalk: 4.1.2 - ci-info: 4.3.1 - graceful-fs: 4.2.11 - picomatch: 4.0.3 - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-validate@30.2.0: - dependencies: - '@jest/get-type': 30.1.0 - '@jest/types': 30.2.0 - camelcase: 6.3.0 - chalk: 4.1.2 - leven: 3.1.0 - pretty-format: 30.2.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.24 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - - jest-watcher@30.2.0: - dependencies: - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 20.19.24 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 30.2.0 - string-length: 4.0.2 - - jest-worker@26.6.2: - dependencies: - '@types/node': 20.19.24 - merge-stream: 2.0.0 - supports-color: 7.2.0 - - jest-worker@29.7.0: - dependencies: - '@types/node': 20.19.24 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest-worker@30.2.0: - dependencies: - '@types/node': 20.19.24 - '@ungap/structured-clone': 1.3.0 - jest-util: 30.2.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest@29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest@29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest@30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0): - dependencies: - '@jest/core': 30.2.0(babel-plugin-macros@3.1.0) - '@jest/types': 30.2.0 - import-local: 3.2.0 - jest-cli: 30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - - jiti@2.6.1: {} - - js-tokens@4.0.0: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - jsesc@3.1.0: {} - - json-parse-even-better-errors@2.3.1: {} - - json5@2.2.3: {} - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - kleur@3.0.3: {} - - kleur@4.1.5: {} - - leven@3.1.0: {} - - lilconfig@2.1.0: {} - - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - lint-staged@15.5.2: - dependencies: - chalk: 5.6.2 - commander: 13.1.0 - debug: 4.4.3 - execa: 8.0.1 - lilconfig: 3.1.3 - listr2: 8.3.3 - micromatch: 4.0.8 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.8.1 - transitivePeerDependencies: - - supports-color - - listr2@8.3.3: - 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.2 - - loader-utils@3.3.1: {} - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - lodash.camelcase@4.3.0: {} - - lodash.capitalize@4.2.1: {} - - lodash.debounce@4.0.8: {} - - lodash.escaperegexp@4.1.2: {} - - lodash.isplainobject@4.0.6: {} - - lodash.isstring@4.0.1: {} - - lodash.memoize@4.1.2: {} - - lodash.merge@4.6.2: {} - - lodash.uniq@4.5.0: {} - - lodash.uniqby@4.7.0: {} - - lodash@4.17.21: {} - - log-symbols@7.0.1: - dependencies: - is-unicode-supported: 2.1.0 - yoctocolors: 2.1.2 - - log-update@6.1.0: - dependencies: - ansi-escapes: 7.1.1 - cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.1.2 - wrap-ansi: 9.0.2 - - lru-cache@10.4.3: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@7.18.3: {} - - lz-string@1.5.0: {} - - macos-release@3.4.0: {} - - magic-string@0.25.9: - dependencies: - sourcemap-codec: 1.4.8 - - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - - make-dir@4.0.0: - dependencies: - semver: 7.7.3 - - make-error@1.3.6: {} - - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - - math-intrinsics@1.1.0: {} - - maxmin@2.1.0: - dependencies: - chalk: 1.1.3 - figures: 1.7.0 - gzip-size: 3.0.0 - pretty-bytes: 3.0.1 - - mdn-data@2.0.14: {} - - merge-stream@2.0.0: {} - - microbundle@0.15.1(@types/babel__core@7.20.5): - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-proposal-class-properties': 7.12.1(@babel/core@7.28.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5) - '@babel/preset-env': 7.28.5(@babel/core@7.28.5) - '@babel/preset-flow': 7.27.1(@babel/core@7.28.5) - '@babel/preset-react': 7.28.5(@babel/core@7.28.5) - '@rollup/plugin-alias': 3.1.9(rollup@2.79.2) - '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@2.79.2) - '@rollup/plugin-commonjs': 17.1.0(rollup@2.79.2) - '@rollup/plugin-json': 4.1.0(rollup@2.79.2) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) - '@surma/rollup-plugin-off-main-thread': 2.2.3 - asyncro: 3.0.0 - autoprefixer: 10.4.21(postcss@8.5.6) - babel-plugin-macros: 3.1.0 - babel-plugin-transform-async-to-promises: 0.8.18 - babel-plugin-transform-replace-expressions: 0.2.0(@babel/core@7.28.5) - brotli-size: 4.0.0 - builtin-modules: 3.3.0 - camelcase: 6.3.0 - escape-string-regexp: 4.0.0 - filesize: 6.4.0 - gzip-size: 6.0.0 - kleur: 4.1.5 - lodash.merge: 4.6.2 - postcss: 8.5.6 - pretty-bytes: 5.6.0 - rollup: 2.79.2 - rollup-plugin-bundle-size: 1.0.3 - rollup-plugin-postcss: 4.0.2(postcss@8.5.6) - rollup-plugin-terser: 7.0.2(rollup@2.79.2) - rollup-plugin-typescript2: 0.32.1(rollup@2.79.2)(typescript@4.9.5) - rollup-plugin-visualizer: 5.14.0(rollup@2.79.2) - sade: 1.8.1 - terser: 5.44.0 - tiny-glob: 0.2.9 - tslib: 2.8.1 - typescript: 4.9.5 - transitivePeerDependencies: - - '@types/babel__core' - - rolldown - - supports-color - - ts-node - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.54.0: {} - - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 - - mimic-fn@2.1.0: {} - - mimic-fn@4.0.0: {} - - mimic-function@5.0.1: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - minipass@7.1.2: {} - - mkdirp@0.5.1: - dependencies: - minimist: 1.2.8 - - mri@1.2.0: {} - - ms@2.1.3: {} - - mute-stream@2.0.0: {} - - nanoid@3.3.11: {} - - napi-postinstall@0.3.4: {} - - natural-compare@1.4.0: {} - - neo-async@2.6.2: {} - - netmask@2.0.2: {} - - new-github-release-url@2.0.0: - dependencies: - type-fest: 2.19.0 - - node-fe1-fpe@1.0.0-beta.2: - dependencies: - bigint-buffer: '@trufflesuite/bigint-buffer@1.1.10' - - node-fetch-native@1.6.7: {} - - node-gyp-build@4.4.0: {} - - node-int64@0.4.0: {} - - node-releases@2.0.27: {} - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - normalize-url@6.1.0: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - - number-is-nan@1.0.1: {} - - nypm@0.6.2: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - pathe: 2.0.3 - pkg-types: 2.3.0 - tinyexec: 1.0.1 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - ohash@2.0.11: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 - - open@10.2.0: - dependencies: - default-browser: 5.2.1 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - wsl-utils: 0.1.0 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - ora@9.0.0: - dependencies: - chalk: 5.6.2 - cli-cursor: 5.0.0 - cli-spinners: 3.3.0 - is-interactive: 2.0.0 - is-unicode-supported: 2.1.0 - log-symbols: 7.0.1 - stdin-discarder: 0.2.2 - string-width: 8.1.0 - strip-ansi: 7.1.2 - - os-name@6.1.0: - dependencies: - macos-release: 3.4.0 - windows-release: 6.1.0 - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-finally@1.0.0: {} - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-queue@6.6.2: - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - - p-timeout@3.2.0: - dependencies: - p-finally: 1.0.0 - - p-try@2.2.0: {} - - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.3 - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-path@7.1.0: - dependencies: - protocols: 2.0.2 - - parse-url@9.2.0: - dependencies: - '@types/parse-path': 7.1.0 - parse-path: 7.1.0 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-key@4.0.0: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-type@4.0.0: {} - - pathe@2.0.3: {} - - perfect-debounce@2.0.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.3: {} - - pidtree@0.6.0: {} - - pify@5.0.0: {} - - pirates@4.0.7: {} - - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - - pkg-types@2.3.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 - - possible-typed-array-names@1.1.0: {} - - postcss-calc@8.2.4(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - postcss-value-parser: 4.2.0 - - postcss-colormin@5.3.1(postcss@8.5.6): - dependencies: - browserslist: 4.27.0 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-convert-values@5.1.3(postcss@8.5.6): - dependencies: - browserslist: 4.27.0 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-discard-comments@5.1.2(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-discard-duplicates@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-discard-empty@5.1.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-discard-overridden@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-load-config@3.1.4(postcss@8.5.6): - dependencies: - lilconfig: 2.1.0 - yaml: 1.10.2 - optionalDependencies: - postcss: 8.5.6 - - postcss-merge-longhand@5.1.7(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.5.6) - - postcss-merge-rules@5.1.4(postcss@8.5.6): - dependencies: - browserslist: 4.27.0 - caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - postcss-minify-font-values@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-minify-gradients@5.1.1(postcss@8.5.6): - dependencies: - colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-minify-params@5.1.4(postcss@8.5.6): - dependencies: - browserslist: 4.27.0 - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-minify-selectors@5.2.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - postcss-modules-extract-imports@3.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-modules-local-by-default@4.2.0(postcss@8.5.6): - dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-selector-parser: 7.1.0 - postcss-value-parser: 4.2.0 - - postcss-modules-scope@3.2.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.0 - - postcss-modules-values@4.0.0(postcss@8.5.6): - dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - - postcss-modules@4.3.1(postcss@8.5.6): - dependencies: - generic-names: 4.0.0 - icss-replace-symbols: 1.1.0 - lodash.camelcase: 4.3.0 - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) - string-hash: 1.1.3 - - postcss-normalize-charset@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-normalize-display-values@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-positions@5.1.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-repeat-style@5.1.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-string@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-timing-functions@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-unicode@5.1.1(postcss@8.5.6): - dependencies: - browserslist: 4.27.0 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-url@5.1.0(postcss@8.5.6): - dependencies: - normalize-url: 6.1.0 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-whitespace@5.1.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-ordered-values@5.1.3(postcss@8.5.6): - dependencies: - cssnano-utils: 3.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-reduce-initial@5.1.2(postcss@8.5.6): - dependencies: - browserslist: 4.27.0 - caniuse-api: 3.0.0 - postcss: 8.5.6 - - postcss-reduce-transforms@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-selector-parser@7.1.0: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-svgo@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - svgo: 2.8.0 - - postcss-unique-selectors@5.1.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prettier@3.6.2: {} - - pretty-bytes@3.0.1: - dependencies: - number-is-nan: 1.0.1 - - pretty-bytes@5.6.0: {} - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - pretty-format@30.2.0: - dependencies: - '@jest/schemas': 30.0.5 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - promise.series@0.2.0: {} - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - protocols@2.0.2: {} - - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - - pure-rand@6.1.0: {} - - pure-rand@7.0.1: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - - rc9@2.1.2: - dependencies: - defu: 6.1.4 - destr: 2.0.5 - - react-is@18.3.1: {} - - readdirp@4.1.2: {} - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regenerate-unicode-properties@10.2.2: - dependencies: - regenerate: 1.4.2 - - regenerate@1.4.2: {} - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - regexpu-core@6.4.0: - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.2 - regjsgen: 0.8.0 - regjsparser: 0.13.0 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.1 - - regjsgen@0.8.0: {} - - regjsparser@0.13.0: - dependencies: - jsesc: 3.1.0 - - release-it@19.0.5(@types/node@20.19.24): - dependencies: - '@nodeutils/defaults-deep': 1.1.0 - '@octokit/rest': 22.0.0 - '@phun-ky/typeof': 2.0.3 - async-retry: 1.3.3 - c12: 3.3.0 - ci-info: 4.3.1 - eta: 4.0.1 - git-url-parse: 16.1.0 - inquirer: 12.9.6(@types/node@20.19.24) - issue-parser: 7.0.1 - lodash.merge: 4.6.2 - mime-types: 3.0.1 - new-github-release-url: 2.0.0 - open: 10.2.0 - ora: 9.0.0 - os-name: 6.1.0 - proxy-agent: 6.5.0 - semver: 7.7.2 - tinyglobby: 0.2.15 - undici: 6.21.3 - url-join: 5.0.0 - wildcard-match: 5.1.4 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - '@types/node' - - magicast - - supports-color - - release-it@19.0.5(@types/node@22.18.13): - dependencies: - '@nodeutils/defaults-deep': 1.1.0 - '@octokit/rest': 22.0.0 - '@phun-ky/typeof': 2.0.3 - async-retry: 1.3.3 - c12: 3.3.0 - ci-info: 4.3.1 - eta: 4.0.1 - git-url-parse: 16.1.0 - inquirer: 12.9.6(@types/node@22.18.13) - issue-parser: 7.0.1 - lodash.merge: 4.6.2 - mime-types: 3.0.1 - new-github-release-url: 2.0.0 - open: 10.2.0 - ora: 9.0.0 - os-name: 6.1.0 - proxy-agent: 6.5.0 - semver: 7.7.2 - tinyglobby: 0.2.15 - undici: 6.21.3 - url-join: 5.0.0 - wildcard-match: 5.1.4 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - '@types/node' - - magicast - - supports-color - - release-it@19.0.5(@types/node@24.9.2): - dependencies: - '@nodeutils/defaults-deep': 1.1.0 - '@octokit/rest': 22.0.0 - '@phun-ky/typeof': 2.0.3 - async-retry: 1.3.3 - c12: 3.3.0 - ci-info: 4.3.1 - eta: 4.0.1 - git-url-parse: 16.1.0 - inquirer: 12.9.6(@types/node@24.9.2) - issue-parser: 7.0.1 - lodash.merge: 4.6.2 - mime-types: 3.0.1 - new-github-release-url: 2.0.0 - open: 10.2.0 - ora: 9.0.0 - os-name: 6.1.0 - proxy-agent: 6.5.0 - semver: 7.7.2 - tinyglobby: 0.2.15 - undici: 6.21.3 - url-join: 5.0.0 - wildcard-match: 5.1.4 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - '@types/node' - - magicast - - supports-color - - require-directory@2.1.1: {} - - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve.exports@2.0.3: {} - - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - - retry@0.13.1: {} - - rfdc@1.4.1: {} - - rollup-plugin-bundle-size@1.0.3: - dependencies: - chalk: 1.1.3 - maxmin: 2.1.0 - - rollup-plugin-postcss@4.0.2(postcss@8.5.6): - dependencies: - chalk: 4.1.2 - concat-with-sourcemaps: 1.1.0 - cssnano: 5.1.15(postcss@8.5.6) - import-cwd: 3.0.0 - p-queue: 6.6.2 - pify: 5.0.0 - postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6) - postcss-modules: 4.3.1(postcss@8.5.6) - promise.series: 0.2.0 - resolve: 1.22.11 - rollup-pluginutils: 2.8.2 - safe-identifier: 0.4.2 - style-inject: 0.3.0 - transitivePeerDependencies: - - ts-node - - rollup-plugin-terser@7.0.2(rollup@2.79.2): - dependencies: - '@babel/code-frame': 7.27.1 - jest-worker: 26.6.2 - rollup: 2.79.2 - serialize-javascript: 4.0.0 - terser: 5.44.0 - - rollup-plugin-typescript2@0.32.1(rollup@2.79.2)(typescript@4.9.5): - dependencies: - '@rollup/pluginutils': 4.2.1 - find-cache-dir: 3.3.2 - fs-extra: 10.1.0 - resolve: 1.22.11 - rollup: 2.79.2 - tslib: 2.8.1 - typescript: 4.9.5 - - rollup-plugin-visualizer@5.14.0(rollup@2.79.2): - dependencies: - open: 8.4.2 - picomatch: 4.0.3 - source-map: 0.7.6 - yargs: 17.7.2 - optionalDependencies: - rollup: 2.79.2 - - rollup-pluginutils@2.8.2: - dependencies: - estree-walker: 0.6.1 - - rollup@2.79.2: - optionalDependencies: - fsevents: 2.3.3 - - run-applescript@7.1.0: {} - - run-async@4.0.6: {} - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - sade@1.8.1: - dependencies: - mri: 1.2.0 - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-identifier@0.4.2: {} - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safer-buffer@2.1.2: {} - - semver@6.3.1: {} - - semver@7.7.2: {} - - semver@7.7.3: {} - - serialize-javascript@4.0.0: - dependencies: - randombytes: 2.1.0 - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - sisteransi@1.0.5: {} - - slash@3.0.0: {} - - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.0.1 - smart-buffer: 4.2.0 - - source-map-js@1.2.1: {} - - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.7.6: {} - - sourcemap-codec@1.4.8: {} - - sprintf-js@1.0.3: {} - - stable@0.1.8: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - stdin-discarder@0.2.2: {} - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - string-argv@0.3.2: {} - - string-hash@1.1.3: {} - - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string-width@7.2.0: - dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 - - string-width@8.1.0: - dependencies: - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - strip-ansi@3.0.1: - dependencies: - ansi-regex: 2.1.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-final-newline@3.0.0: {} - - strip-json-comments@3.1.1: {} - - style-inject@0.3.0: {} - - stylehacks@5.1.1(postcss@8.5.6): - dependencies: - browserslist: 4.27.0 - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - supports-color@2.0.0: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - svgo@2.8.0: - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 4.3.0 - css-tree: 1.1.3 - csso: 4.2.0 - picocolors: 1.1.1 - stable: 0.1.8 - - synckit@0.11.11: - dependencies: - '@pkgr/core': 0.2.9 - - terser@5.44.0: - dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 - commander: 2.20.3 - source-map-support: 0.5.21 - - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - - tinyexec@1.0.1: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tmpl@1.0.5: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@4.9.5): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 4.9.5 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - jest-util: 30.2.0 - - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@5.9.2): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.2 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - jest-util: 30.2.0 - - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0))(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@20.19.24)(babel-plugin-macros@3.1.0) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - jest-util: 30.2.0 - - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0))(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@22.18.13)(babel-plugin-macros@3.1.0) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - jest-util: 30.2.0 - - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0))(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - jest-util: 30.2.0 - - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0))(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 30.2.0(@types/node@24.9.2)(babel-plugin-macros@3.1.0) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.5) - jest-util: 30.2.0 - - tslib@2.8.1: {} - - tsx@4.20.6: - dependencies: - esbuild: 0.25.11 - get-tsconfig: 4.13.0 - optionalDependencies: - fsevents: 2.3.3 - - turbo-darwin-64@2.6.0: - optional: true - - turbo-darwin-arm64@2.6.0: - optional: true - - turbo-linux-64@2.6.0: - optional: true - - turbo-linux-arm64@2.6.0: - optional: true - - turbo-windows-64@2.6.0: - optional: true - - turbo-windows-arm64@2.6.0: - optional: true - - turbo@2.6.0: - optionalDependencies: - turbo-darwin-64: 2.6.0 - turbo-darwin-arm64: 2.6.0 - turbo-linux-64: 2.6.0 - turbo-linux-arm64: 2.6.0 - turbo-windows-64: 2.6.0 - turbo-windows-arm64: 2.6.0 - - type-detect@4.0.8: {} - - type-fest@0.21.3: {} - - type-fest@2.19.0: {} - - type-fest@4.41.0: {} - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript@4.9.5: {} - - typescript@5.9.2: {} - - typescript@5.9.3: {} - - uglify-js@3.19.3: - optional: true - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - undici-types@6.21.0: {} - - undici-types@7.16.0: {} - - undici@6.21.3: {} - - unicode-canonical-property-names-ecmascript@2.0.1: {} - - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.2.0 - - unicode-match-property-value-ecmascript@2.2.1: {} - - unicode-property-aliases-ecmascript@2.2.0: {} - - universal-user-agent@7.0.3: {} - - universalify@2.0.1: {} - - unrs-resolver@1.11.1: - dependencies: - napi-postinstall: 0.3.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - - update-browserslist-db@1.1.4(browserslist@4.27.0): - dependencies: - browserslist: 4.27.0 - escalade: 3.2.0 - picocolors: 1.1.1 - - url-join@5.0.0: {} - - util-deprecate@1.0.2: {} - - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wildcard-match@5.1.4: {} - - windows-release@6.1.0: - dependencies: - execa: 8.0.1 - - wordwrap@1.0.0: {} - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrap-ansi@9.0.2: - dependencies: - ansi-styles: 6.2.3 - string-width: 7.2.0 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - write-file-atomic@5.0.1: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - - wsl-utils@0.1.0: - dependencies: - is-wsl: 3.1.0 - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yaml@1.10.2: {} - - yaml@2.8.1: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yocto-queue@0.1.0: {} - - yoctocolors-cjs@2.1.3: {} - - yoctocolors@2.1.2: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 3ff5faa..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,3 +0,0 @@ -packages: - - "apps/*" - - "packages/*" diff --git a/preset/README.md b/preset/README.md new file mode 100644 index 0000000..d454b13 --- /dev/null +++ b/preset/README.md @@ -0,0 +1,21 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ‡ Structure + +> The Preset folder contains the following files: + + + +### โœ๏ธ script.ts [preset/script.ts] + +This script is template data for `src/script.ts`. If the file `src/script.ts` does not exist, this template data will be copied to that path. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/preset/script.ts b/preset/script.ts new file mode 100644 index 0000000..dbcfa1a --- /dev/null +++ b/preset/script.ts @@ -0,0 +1,31 @@ +// Categorized function collection. +import { RuleEvent, Value, Action, Level, Server, Match, Util, Type, Classes } from '../bin/release/eng' + +// Classified data type. +const { Array, Bool, Number, String } = Type + +// Reprocessed function class. +const { Rule, Player, Event, Entity, Team, Vector } = Classes + +/** + * @description + * Write the workshop code from below. + */ + + +// Rule Template +new Rule({ + + // Write the rule description. + description: '', + + // Set the event type + event: RuleEvent.onGoingGlobal(), + + condition: [ + // Write the rule condition. + ], + action: [ + // Write the rule action. + ] +}) \ No newline at end of file diff --git a/rollup.config.ts b/rollup.config.ts new file mode 100644 index 0000000..4c37808 --- /dev/null +++ b/rollup.config.ts @@ -0,0 +1,23 @@ +import resolve from 'rollup-plugin-node-resolve' +import commonjs from 'rollup-plugin-commonjs' +import dts from "rollup-plugin-dts" + +export default [ + { + input: "./dist/bin/release/index.js", + output: { + name: "dva", + exports: "named", + file: "./dist/dva.js", + format: "umd" + }, + plugins: [ + resolve(), + commonjs() + ] + }, { + input: "./dist/bin/release/index.d.ts", + output: [{ file: "dist/dva.d.ts", format: "es" }], + plugins: [dts()] + } +] \ No newline at end of file diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..26f48d0 --- /dev/null +++ b/test/README.md @@ -0,0 +1,21 @@ +![THIS IS CRITICAL SECTION, PLEASE BE A CAREFUL IMAGE](https://i.imgur.com/gZK4gwI.png) + +## ๐Ÿ‡ Structure + +> The Test folder contains the following files: + + + +### โœ๏ธ script.ts [test/script.ts] + +A test script to verify that the grammar changes in the Overwatch Workshop are successful or that there are no unexpected exceptions. + + + +## Contribute + +![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png) + +> If you want to contribute to the development of this project, please read the CONTRIBUTING.md file. + +[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md) \ No newline at end of file diff --git a/test/script.ts b/test/script.ts new file mode 100644 index 0000000..822f83d --- /dev/null +++ b/test/script.ts @@ -0,0 +1,179 @@ +// Categorized function collection. +import { RuleEvent, Value, Action, Level, Server, Match, Util, Type, Classes } from '../bin/release/kor' + +// Classified data type. +const { Array, Bool, Number, String } = Type + +// Reprocessed function class. +const { Rule, Player, Event, Entity, Team, Vector } = Classes +/** + * @description + * Write the workshop code from below. + */ + +// Check condition +let checkCompareValue1 = Value.attacker() == Value.attacker() +let checkCompareValue2 = ((checkCompareValue1 >= (checkCompareValue1 < checkCompareValue1))) + +// Check and +let checkAndValue1 = Value.attacker() && Value.attacker() + +// Check or +let checkOrValue1 = Value.attacker() || Value.attacker() + +// Check not +let checkNotValue1 = !Value.attacker() +let checkNotValue2 = (!Value.attacker()) +let checkNotValue3 = ((!Value.attacker())) +let checkNotValue4 = !(checkNotValue1 && checkAndValue1) + +// Check operator overload +let a = Value.number(1) +let b = Value.number(2) +let c = Value.number(3) +let d = Value.number(4) +let e = Value.number(4) +let f = Value.number(4) +let g = Value.number(4) +let h = Value.number(4) +let i = Value.number(4) +let j = Value.number(4) +let k = Value.number(4) +let l = Value.number(4) +let m = Value.number(4) +let n = Value.number(4) +let o = Value.number(4) + +let checkOperator1 = ((a*b)/c+d) % e + (f+g+h+i) - (j-(k*l/m) - n * o) + +// Check array +/* +let checkArray1 = Type.Array.allDeadPlayers(Type.Team.team(Type.TeamConstant.Default('All'))) + +checkArray1.length +checkArray1.pop() +checkArray1.shift() +checkArray1.slice(0, 1) +checkArray1.reverse() +checkArray1.push(Value.number(1)) +checkArray1.sort((a, b)=> a * b) +checkArray1.reduce((previousValue, currentValue, currentIndex)=>{ + // +}) +checkArray1.reduceRight((previousValue, currentValue, currentIndex)=>{ + // +}) +checkArray1.some((value, index, array)=>{ + // +}) +checkArray1.splice(1, 1, []) +checkArray1.map((value, index, array)=> { + // +}) +checkArray1.unshift() +checkArray1.values() +checkArray1.concat() +checkArray1.copyWithin(1, 1, 1) +checkArray1.entries() +checkArray1.every((value, index, array)=>{ + // +}) +checkArray1.fill(1, 2, 3) +checkArray1.find((value, index,obj)=>{ + // +}, 1) +checkArray1.findIndex((value, index,obj)=>{ + // +}, 1) +checkArray1.forEach((value, index, array)=>{ + // +}) +*/ + +// Check empty array overload +let checkEmptyArray = [] + +new Rule({ + description: '1', + event: + RuleEvent.onGoingGlobal(), + + condition: [ + + // Check condition + Value.attacker() == Event.EventPlayer(), + Value.attacker() === Event.EventPlayer(), + Value.attacker() != Event.EventPlayer(), + Value.attacker() !== Event.EventPlayer(), + Value.attacker() >= Event.EventPlayer(), + Value.attacker() <= Event.EventPlayer(), + Value.attacker() > Event.EventPlayer(), + Value.attacker() < Event.EventPlayer(), + + // Check nested condition + checkCompareValue1 != checkCompareValue1, + + // Check complex condition + (checkCompareValue1 >= (checkCompareValue1 < checkCompareValue1)) != checkCompareValue1, + + // Check complex condition (multiple parenthesized) + ((checkCompareValue1 >= (checkCompareValue1 < checkCompareValue1)) != checkCompareValue1 ), + (((checkCompareValue1 >= (checkCompareValue1 < checkCompareValue1)) != checkCompareValue1 )), + ( + ( + ( + checkCompareValue1 + >= + ( + checkCompareValue1 + < + checkCompareValue1 + ) + ) + != + checkCompareValue1 + ) + ), + + // Check complex nested condition + checkCompareValue2 === checkCompareValue2, + + // Check unary condition + checkCompareValue1, + + // Check complex nested usnary compare + checkCompareValue2, + ], + + action: [ + Action.kill( + Type.Player.attacker(), + Type.AssisterParam.Null() + ) + ] +}) + +new Rule({ + description: '2', + + // Set the event type + event: RuleEvent.onGoingGlobal(), + condition: [ + // Write the rule condition. + ], + action: [ + // Write the rule action. + ] +}) +new Rule({ + description: '3', + + // Set the event type + event: RuleEvent.onGoingGlobal(), + condition: [ + // Write the rule condition. + ], + action: [ + // Write the rule action. + ] +}) \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..eb29ed1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,56 @@ +{ + "compilerOptions": { + "outDir": "./dist", + "plugins": [ + { "transform": "./bin/core/transform/index.ts" }, + ], + "baseUrl": ".", + "paths": { + "*": [ + "types/*", + "bin" + ], + "dist/*": ["../../dist/*"] + }, + "importHelpers": true, + "sourceMap": false, + "declaration": true, + "inlineSourceMap": false, + "noImplicitAny": false, + "module": "commonjs", + "target": "ES5", + "types": ["node"], + "lib": ["es5", "es6", "dom"], + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "strictNullChecks": true, + "suppressImplicitAnyIndexErrors": true, + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "skipLibCheck": true + }, + "include": [ + "./bin/**/*", + "./src/**/*", + "./test/**/*" + ], + "exclude": [ + "./dist/**/*", + "./bin/dist/**/*" + ], + "awesomeTypescriptLoaderOptions": { + "reportFiles": [ + "./src/**/*", + "./bin/**/*", + "./test/**/*", + ] + }, + "typeRoots": [ + "./node_modules/@types" + ] +} \ No newline at end of file diff --git a/turbo.json b/turbo.json deleted file mode 100644 index d508947..0000000 --- a/turbo.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://turborepo.com/schema.json", - "ui": "tui", - "tasks": { - "build": { - "dependsOn": ["^build"], - "inputs": ["$TURBO_DEFAULT$", ".env*"], - "outputs": [".next/**", "!.next/cache/**"] - }, - "lint": { - "dependsOn": ["^lint"] - }, - "check-types": { - "dependsOn": ["^check-types"] - }, - "dev": { - "cache": false, - "persistent": true - } - } -}