├── .nvmrc
├── api
├── requirements.txt
├── .npmignore
├── docker-requirements.txt
├── package.json
├── s3.py
├── README.md
├── Dockerfile
├── app.py
├── serverless.yml
└── cases.py
├── .idea
├── .gitignore
├── encodings.xml
├── vcs.xml
├── jsLibraryMappings.xml
├── misc.xml
├── modules.xml
├── markdown.xml
├── case-ing.iml
└── inspectionProfiles
│ └── Project_Default.xml
├── clear-sheet.js
├── cypress.config.js
├── package.json
├── cypress
├── support
│ ├── e2e.js
│ └── commands.js
├── plugins
│ └── index.js
├── e2e
│ └── spec.cy.js
└── js
│ ├── courts.js
│ └── caseTypes.js
├── create-fixtures.js
├── cypress-partial.js
├── .github
└── workflows
│ ├── update-sheet-manually.yml
│ └── update-sheet-cron.yml
├── .gitignore
├── README.md
└── yarn.lock
/.nvmrc:
--------------------------------------------------------------------------------
1 | v16
2 |
--------------------------------------------------------------------------------
/api/requirements.txt:
--------------------------------------------------------------------------------
1 | gspread==5.1.1
2 | boto3==1.20.29
3 |
--------------------------------------------------------------------------------
/api/.npmignore:
--------------------------------------------------------------------------------
1 | # Serverless directories
2 | .serverless
3 | .venv
--------------------------------------------------------------------------------
/api/docker-requirements.txt:
--------------------------------------------------------------------------------
1 | numpy==1.22.0
2 | requests-toolbelt==0.9.1
3 | scikit-learn==1.0.2
4 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/clear-sheet.js:
--------------------------------------------------------------------------------
1 | const env = require('./cypress.env.json');
2 | const axios = require('axios');
3 |
4 | axios
5 | .delete(`${env.CYPRESS_LAMBDA_API_URL}/cases`)
6 | .catch(e => console.error(e))
7 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/api/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "case-ing-api",
3 | "dependencies": {
4 | "serverless-python-requirements": "^5.4.0"
5 | },
6 | "devDependencies": {
7 | "serverless-offline": "^11.0.3"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/.idea/jsLibraryMappings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/cypress.config.js:
--------------------------------------------------------------------------------
1 | const { defineConfig } = require("cypress");
2 |
3 | module.exports = defineConfig({
4 | fixturesFolder: "cypress/fixtures",
5 | chromeWebSecurity: false,
6 | retries: 20,
7 | responseTimeout: 300000,
8 | e2e: {
9 | supportFile: false,
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/markdown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/case-ing.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "case-ing",
3 | "version": "1.0.0",
4 | "description": "Case-ing",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "cypress run",
8 | "test": "cypress open",
9 | "fixture": "node create-fixtures.js",
10 | "clear": "node clear-sheet.js"
11 | },
12 | "repository": "git@github.com:iicdii/case-ing.git",
13 | "author": "Harim Kim ",
14 | "license": "MIT",
15 | "dependencies": {
16 | "axios": "^1.0.0",
17 | "cypress": "^10.9.0",
18 | "dayjs": "^1.11.5"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/api/s3.py:
--------------------------------------------------------------------------------
1 | import base64
2 | import boto3
3 | import json
4 |
5 | s3 = boto3.client("s3")
6 |
7 |
8 | def upload(event, context):
9 | data = json.loads(event["body"])
10 | name = data["name"]
11 | image = data["file"]
12 | image = image[image.find(",") + 1 :]
13 | dec = base64.b64decode(image + "===")
14 | s3.put_object(
15 | Bucket="case-ing-assets",
16 | Key=name,
17 | Body=dec,
18 | ContentType="image/png",
19 | ContentEncoding="base64",
20 | )
21 |
22 | body = {"messsage": "success"}
23 |
24 | response = {
25 | "statusCode": 200,
26 | "headers": {"Content-Type": "application/json"},
27 | "body": json.dumps(body),
28 | }
29 |
30 | return response
31 |
--------------------------------------------------------------------------------
/cypress/support/e2e.js:
--------------------------------------------------------------------------------
1 | // ***********************************************************
2 | // This example support/e2e.js is processed and
3 | // loaded automatically before your test files.
4 | //
5 | // This is a great place to put global configuration and
6 | // behavior that modifies Cypress.
7 | //
8 | // You can change the location of this file or turn off
9 | // automatically serving support files with the
10 | // 'supportFile' configuration option.
11 | //
12 | // You can read more here:
13 | // https://on.cypress.io/configuration
14 | // ***********************************************************
15 |
16 | // Import commands.js using ES2015 syntax:
17 | import './commands'
18 |
19 | // Alternatively you can use CommonJS syntax:
20 | // require('./commands')
--------------------------------------------------------------------------------
/api/README.md:
--------------------------------------------------------------------------------
1 | # Serverless - AWS Python Docker
2 |
3 | This project has been generated using the `aws-pyhton-docker` template from the [Serverless framework](https://www.serverless.com/).
4 |
5 | For detailed instructions, please refer to the [documentation](https://www.serverless.com/framework/docs/providers/aws/).
6 |
7 | ## Deployment instructions
8 |
9 | > **Requirements**: Docker. In order to build images locally and push them to ECR, you need to have Docker installed on your local machine. Please refer to [official documentation](https://docs.docker.com/get-docker/).
10 |
11 | In order to deploy your service, run the following command
12 |
13 | ```
14 | sls deploy
15 | ```
16 |
17 | ## Test your service
18 |
19 | After successful deployment, you can test your service remotely by using the following command:
20 |
21 | ```
22 | sls invoke --function hello
23 | ```
24 |
--------------------------------------------------------------------------------
/cypress/plugins/index.js:
--------------------------------------------------------------------------------
1 | ///
2 | // ***********************************************************
3 | // This example plugins/index.js can be used to load plugins
4 | //
5 | // You can change the location of this file or turn off loading
6 | // the plugins file with the 'pluginsFile' configuration option.
7 | //
8 | // You can read more here:
9 | // https://on.cypress.io/plugins-guide
10 | // ***********************************************************
11 |
12 | // This function is called when a project is opened or re-opened (e.g. due to
13 | // the project's config changing)
14 |
15 | /**
16 | * @type {Cypress.PluginConfig}
17 | */
18 | // eslint-disable-next-line no-unused-vars
19 | module.exports = (on, config) => {
20 | // `on` is used to hook into various events Cypress emits
21 | // `config` is the resolved Cypress config
22 | return config
23 | }
24 |
--------------------------------------------------------------------------------
/cypress/support/commands.js:
--------------------------------------------------------------------------------
1 | // ***********************************************
2 | // This example commands.js shows you how to
3 | // create various custom commands and overwrite
4 | // existing commands.
5 | //
6 | // For more comprehensive examples of custom
7 | // commands please read more here:
8 | // https://on.cypress.io/custom-commands
9 | // ***********************************************
10 | //
11 | //
12 | // -- This is a parent command --
13 | // Cypress.Commands.add('login', (email, password) => { ... })
14 | //
15 | //
16 | // -- This is a child command --
17 | // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
18 | //
19 | //
20 | // -- This is a dual command --
21 | // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
22 | //
23 | //
24 | // -- This will overwrite an existing command --
25 | // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
--------------------------------------------------------------------------------
/api/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM public.ecr.aws/lambda/python:3.8
2 |
3 | # Install OS packages for Pillow-SIMD
4 | RUN yum -y install tar gzip zlib freetype-devel \
5 | gcc \
6 | ghostscript \
7 | lcms2-devel \
8 | libffi-devel \
9 | libimagequant-devel \
10 | libjpeg-devel \
11 | libraqm-devel \
12 | libtiff-devel \
13 | libwebp-devel \
14 | make \
15 | openjpeg2-devel \
16 | rh-python36 \
17 | rh-python36-python-virtualenv \
18 | sudo \
19 | tcl-devel \
20 | tk-devel \
21 | tkinter \
22 | which \
23 | xorg-x11-server-Xvfb \
24 | zlib-devel \
25 | && yum clean all
26 |
27 | COPY docker-requirements.txt ./requirements.txt
28 | RUN pip3 install -r requirements.txt --target ./
29 | # Replace Pillow with Pillow-SIMD to take advantage of AVX2
30 | RUN pip3 uninstall -y pillow && CC="cc -mavx2" pip3 install -U --force-reinstall pillow-simd
31 |
32 |
33 | COPY app.py ./app.py
34 | COPY model ./model
35 |
36 | # You can overwrite command in `serverless.yml` template
37 | CMD ["app.handler"]
38 |
--------------------------------------------------------------------------------
/api/app.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import pickle
3 | import base64
4 | import io
5 | from PIL import Image
6 | from requests_toolbelt.multipart import decoder
7 |
8 |
9 | def handler(event, context):
10 | # 이벤트에서 이미지 받아오기
11 | content_type = event["headers"]["content-type"]
12 | body_dec = base64.b64decode(event['body'])
13 |
14 | multipart_data = decoder.MultipartDecoder(body_dec, content_type)
15 | binary_content = []
16 |
17 | for part in multipart_data.parts:
18 | binary_content.append(part.content)
19 |
20 | imageStream = io.BytesIO(binary_content[0])
21 | img = Image.open(imageStream)
22 |
23 | # 캡챠 예측하기
24 | model = pickle.load(open('./model/model.pickle', 'rb'))
25 | edges = np.linspace(0, 120, 6+1)
26 | letters = []
27 | for start, end in zip(edges[:-1], edges[1:]):
28 | box = (start, 0, end, 40)
29 | cropped = img.crop(box)
30 | cropped.load()
31 | croppedArray = np.array(cropped)
32 | letters.append(croppedArray.flatten())
33 |
34 | pred = model.predict(letters)
35 | answer = ''.join(pred)
36 |
37 | response = {
38 | "statusCode": 200,
39 | "body": answer
40 | }
41 |
42 | return response
43 |
--------------------------------------------------------------------------------
/api/serverless.yml:
--------------------------------------------------------------------------------
1 | plugins:
2 | - serverless-offline
3 | - serverless-python-requirements
4 |
5 | package:
6 | exclude:
7 | - venv/**
8 |
9 | custom:
10 | pythonRequirements:
11 | dockerizePip: true
12 |
13 | service: case-ing-api
14 | # app and org for use with dashboard.serverless.com
15 | #app: your-app-name
16 | #org: your-org-name
17 |
18 | frameworkVersion: '3'
19 |
20 | provider:
21 | name: aws
22 | runtime: python3.8
23 | lambdaHashingVersion: 20201221
24 | ecr:
25 | images:
26 | predict_captcha:
27 | path: ./
28 | platform: linux/amd64
29 | stage: prod
30 | region: ap-northeast-2
31 | iam:
32 | role: arn:aws:iam::545918303703:role/lambda-and-s3-full-access
33 |
34 | functions:
35 | captcha-cracker:
36 | image:
37 | name: predict_captcha
38 | events:
39 | - httpApi:
40 | path: /predict
41 | method: post
42 | environment:
43 | CUDA_VISIBLE_DEVICES: -1
44 | google-sheet:
45 | handler: cases.read
46 | events:
47 | - httpApi:
48 | path: /cases
49 | method: get
50 | google-sheet-update:
51 | handler: cases.update
52 | events:
53 | - httpApi:
54 | path: /cases
55 | method: post
56 | google-sheet-clear:
57 | handler: cases.clear
58 | events:
59 | - httpApi:
60 | path: /cases
61 | method: delete
62 | upload-s3:
63 | handler: s3.upload
64 | events:
65 | - httpApi:
66 | path: /upload
67 | method: post
68 |
--------------------------------------------------------------------------------
/create-fixtures.js:
--------------------------------------------------------------------------------
1 | const env = require('./cypress.env.json');
2 | const axios = require('axios');
3 | const fs = require('fs');
4 |
5 | const FIXTURE_FOLDER_PATH = './cypress/fixtures';
6 | const SPEC_FOLDER_PATH = './cypress/e2e';
7 |
8 | if (!fs.existsSync(FIXTURE_FOLDER_PATH)){
9 | fs.mkdirSync(FIXTURE_FOLDER_PATH);
10 | }
11 |
12 | const chunkArray = (array, chunk_size) =>
13 | Array(Math.ceil(array.length / chunk_size))
14 | .fill()
15 | .map((_, index) => index * chunk_size)
16 | .map(begin => array.slice(begin, begin + chunk_size))
17 |
18 | axios
19 | .get(`${env.CYPRESS_LAMBDA_API_URL}/cases`)
20 | .then(res => {
21 | // 배열의 자식 배열에 로우 인덱스를 추가함
22 | const indexedArray = res.data.data.slice(1).map((arr, i) => {
23 | arr.unshift(i+2);
24 | return arr;
25 | });
26 | // 5개 단위로 배열을 쪼갬
27 | const items = chunkArray(indexedArray, 5);
28 | const spec = fs.readFileSync(`${SPEC_FOLDER_PATH}/spec.cy.js`, 'utf8');
29 | // 5개 단위로 `spec_chunk_1.cy.js`, `spec_chunk_2.cy.js`, ... 를 생성
30 | items.forEach((cases, i) => {
31 | fs.writeFileSync(`${FIXTURE_FOLDER_PATH}/cases_chunk_${i}.json`, JSON.stringify(cases));
32 | console.info(`${FIXTURE_FOLDER_PATH}/cases_chunk_${i}.json created`);
33 | // 원본 spec인 경우 새 스펙 생성 안함
34 | if (i === 0) return;
35 | const newSpec = spec.replace('cases_chunk_0.json', `cases_chunk_${i}.json`);
36 | fs.writeFileSync(`${SPEC_FOLDER_PATH}/spec_chunk_${i}.cy.js`, newSpec, 'utf8');
37 | console.info(`${SPEC_FOLDER_PATH}/spec_chunk_${i}.cy.js created`);
38 | });
39 | })
40 | .catch(e => console.error(e))
41 |
--------------------------------------------------------------------------------
/api/cases.py:
--------------------------------------------------------------------------------
1 | import gspread
2 | import io
3 | import json
4 |
5 |
6 | SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
7 | SPREADSHEET_ID = '1_CDB4m-BthVbpITxKjwEE82CrKkqu6go98nKCgG1hhw'
8 |
9 | def read(event, context):
10 | gc = gspread.service_account(filename='./certification/service-account.json')
11 | doc = gc.open_by_key(SPREADSHEET_ID)
12 | worksheet = doc.get_worksheet(1)
13 | list_of_lists = worksheet.get_values()
14 |
15 | body = {
16 | "data": list_of_lists
17 | }
18 |
19 | response = {
20 | "statusCode": 200,
21 | "headers": {
22 | "Content-Type": "application/json"
23 | },
24 | "body": json.dumps(body)
25 | }
26 |
27 | return response
28 |
29 | def update(event, context):
30 | input = json.loads(event['body'])
31 | print(input)
32 | cell_range = input['range']
33 | update_values = input['values']
34 |
35 | gc = gspread.service_account(filename='./certification/service-account.json')
36 | doc = gc.open_by_key(SPREADSHEET_ID)
37 | worksheet = doc.get_worksheet(0)
38 | worksheet.update(cell_range, update_values, raw=False)
39 |
40 | body = {
41 | "messsage" : "success"
42 | }
43 |
44 | response = {
45 | "statusCode": 200,
46 | "headers": {
47 | "Content-Type": "application/json"
48 | },
49 | "body": json.dumps(body)
50 | }
51 |
52 | return response
53 |
54 | def clear(event, context):
55 | gc = gspread.service_account(filename='./certification/service-account.json')
56 | doc = gc.open_by_key(SPREADSHEET_ID)
57 | worksheet = doc.get_worksheet(0)
58 | worksheet.batch_clear(["A2:G3000"])
59 |
60 | body = {
61 | "messsage" : "success"
62 | }
63 |
64 | response = {
65 | "statusCode": 200,
66 | "headers": {
67 | "Content-Type": "application/json"
68 | },
69 | "body": json.dumps(body)
70 | }
71 |
72 | return response
73 |
--------------------------------------------------------------------------------
/cypress-partial.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Primitive load-balancer to split Cypress specs across multiple runners. This script assumes that
3 | * all your specs are in the folder '/cypress/e2e'. It uses the number of
4 | * tests per spec file as sole criteria to split specs between runners.
5 | *
6 | * This script accepts two arguments: the total number of runners and the index (starting from 0) of
7 | * the current runner. Example:
8 | * $ node cypress-partial.js 5 2
9 | * This command asks for specs to give to the third runner of five runners.
10 | * The output of the script is a coma-separated list of specs that can be given to Cypress. Example:
11 | * cypress/e2e/some.spec.ts,cypress/e2e/another.spec.ts
12 | *
13 | * Let's assume you have five runners (virtual machines) to run specs in parallel on your CI, and
14 | * each runner knows its number (from 0 to 4). So the third runner must execute its spec as
15 | * following:
16 | * $ cypress run --spec $(node cypress-partial.js 5 2)
17 | *
18 | * Here as example for GitHub actions:
19 | *
20 | * jobs:
21 | * e2e:
22 | * runs-on: ubuntu-latest
23 | * strategy:
24 | * fail-fast: false
25 | * matrix:
26 | * containers: [ 0, 1, 2, 3, 4 ]
27 | * steps:
28 | * - name: E2E
29 | * run: cypress run --spec $(node cypress-partial.js 5 ${{ matrix.containers }})
30 | */
31 |
32 | const fs = require('fs/promises');
33 |
34 | const specDir = 'cypress/e2e';
35 | const testPattern = /(^|\s)(it|test)\(/g;
36 |
37 | const [ totalRunners, thisRunner ] = process.argv.splice(2);
38 |
39 | fs.readdir(specDir).then(async files => {
40 | const nbTests = {};
41 |
42 | for (const file of files) {
43 | nbTests[file] = await testCount(file);
44 | }
45 |
46 | const chunks = [];
47 |
48 | Object
49 | .entries(nbTests)
50 | .sort((a, b) => b[1] - a[1])
51 | .map(entry => entry[0])
52 | .map(file => `${specDir}/${file}`)
53 | .forEach((file, index) => {
54 | const chunk = index % totalRunners;
55 | chunks[chunk] ||= [];
56 | chunks[chunk].push(file);
57 | });
58 |
59 | if (!chunks[thisRunner]) return false;
60 |
61 | const output = chunks[thisRunner].join(',');
62 | return console.log(output);
63 | });
64 |
65 | async function testCount(filename) {
66 | const content = await fs.readFile(`${specDir}/${filename}`, 'utf8');
67 | return content.match(testPattern).length;
68 | }
69 |
--------------------------------------------------------------------------------
/.github/workflows/update-sheet-manually.yml:
--------------------------------------------------------------------------------
1 | name: Update Sheet Manually
2 | on: workflow_dispatch
3 |
4 | env:
5 | CYPRESS_LAMBDA_API_URL: ${{ secrets.CYPRESS_LAMBDA_API_URL }}
6 | CYPRESS_S3_BUCKET_URL: ${{ secrets.CYPRESS_S3_BUCKET_URL }}
7 |
8 | jobs:
9 | create-fixtures:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v3
13 | - uses: actions/setup-node@v3
14 | with:
15 | node-version: '16'
16 | - name: Write the cypress.env.json file 📝
17 | # use quotes around the secret, as its value
18 | # is simply inserted as a string into the command
19 | run: |
20 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json
21 | - name: yarn install
22 | run: |
23 | yarn install --frozen-lockfile
24 | - name: yarn fixture
25 | run: |
26 | yarn fixture
27 | - name: yarn clear
28 | run: |
29 | yarn clear
30 | - uses: actions/upload-artifact@main
31 | with:
32 | name: fixtures
33 | path: cypress/fixtures
34 | - uses: actions/upload-artifact@main
35 | with:
36 | name: specs
37 | path: cypress/e2e
38 |
39 | cypress-run:
40 | runs-on: ubuntu-latest
41 | needs: create-fixtures
42 | strategy:
43 | fail-fast: false
44 | matrix:
45 | containers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
46 | steps:
47 | - uses: actions/checkout@v3
48 | - uses: actions/setup-node@v3
49 | with:
50 | node-version: '16'
51 | - name: Write the cypress.env.json file 📝
52 | # use quotes around the secret, as its value
53 | # is simply inserted as a string into the command
54 | run: |
55 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json
56 | - uses: actions/download-artifact@main
57 | with:
58 | name: fixtures
59 | path: cypress/fixtures
60 | - uses: actions/download-artifact@main
61 | with:
62 | name: specs
63 | path: cypress/e2e
64 | - name: yarn install
65 | run: |
66 | yarn install --frozen-lockfile
67 | - name: Validate test filename
68 | id: validator
69 | shell: bash
70 | run: |
71 | if [ "$(node cypress-partial.js 50 ${{ matrix.containers }})" == "" ]; then
72 | echo ::set-output name=should-run::false
73 | else
74 | echo ::set-output name=should-run::true
75 | fi
76 | - name: Get result
77 | run: echo "${{steps.validator.outputs.should-run}}"
78 | - name: Cypress run
79 | if: ${{ steps.validator.outputs.should-run == 'true' }}
80 | run: |
81 | yarn start --spec $(node cypress-partial.js 50 ${{ matrix.containers }})
82 |
83 | delete-artifacts:
84 | runs-on: ubuntu-latest
85 | needs: cypress-run
86 | if: ${{ always() }}
87 | steps:
88 | - uses: geekyeggo/delete-artifact@v1
89 | with:
90 | name: |
91 | fixtures
92 | specs
93 |
--------------------------------------------------------------------------------
/.github/workflows/update-sheet-cron.yml:
--------------------------------------------------------------------------------
1 | name: Update Sheet Cron
2 | on:
3 | schedule:
4 | - cron: '0 15 * * 0,1,2,3,4'
5 |
6 | env:
7 | CYPRESS_LAMBDA_API_URL: ${{ secrets.CYPRESS_LAMBDA_API_URL }}
8 | CYPRESS_S3_BUCKET_URL: ${{ secrets.CYPRESS_S3_BUCKET_URL }}
9 |
10 | jobs:
11 | create-fixtures:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v3
15 | - uses: actions/setup-node@v3
16 | with:
17 | node-version: '16'
18 | - name: Write the cypress.env.json file 📝
19 | # use quotes around the secret, as its value
20 | # is simply inserted as a string into the command
21 | run: |
22 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json
23 | - name: yarn install
24 | run: |
25 | yarn install --frozen-lockfile
26 | - name: yarn fixture
27 | run: |
28 | yarn fixture
29 | - name: yarn clear
30 | run: |
31 | yarn clear
32 | - uses: actions/upload-artifact@main
33 | with:
34 | name: fixtures
35 | path: cypress/fixtures
36 | - uses: actions/upload-artifact@main
37 | with:
38 | name: specs
39 | path: cypress/e2e
40 |
41 | cypress-run:
42 | runs-on: ubuntu-latest
43 | needs: create-fixtures
44 | strategy:
45 | fail-fast: false
46 | matrix:
47 | containers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
48 | steps:
49 | - uses: actions/checkout@v3
50 | - uses: actions/setup-node@v3
51 | with:
52 | node-version: '16'
53 | - name: Write the cypress.env.json file 📝
54 | # use quotes around the secret, as its value
55 | # is simply inserted as a string into the command
56 | run: |
57 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json
58 | - uses: actions/download-artifact@main
59 | with:
60 | name: fixtures
61 | path: cypress/fixtures
62 | - uses: actions/download-artifact@main
63 | with:
64 | name: specs
65 | path: cypress/e2e
66 | - name: yarn install
67 | run: |
68 | yarn install --frozen-lockfile
69 | - name: Validate test filename
70 | id: validator
71 | shell: bash
72 | run: |
73 | if [ "$(node cypress-partial.js 50 ${{ matrix.containers }})" == "" ]; then
74 | echo ::set-output name=should-run::false
75 | else
76 | echo ::set-output name=should-run::true
77 | fi
78 | - name: Get result
79 | run: echo "${{steps.validator.outputs.should-run}}"
80 | - name: Cypress run
81 | if: ${{ steps.validator.outputs.should-run == 'true' }}
82 | run: |
83 | yarn start --spec $(node cypress-partial.js 50 ${{ matrix.containers }})
84 |
85 | delete-artifacts:
86 | runs-on: ubuntu-latest
87 | needs: cypress-run
88 | if: ${{ always() }}
89 | steps:
90 | - uses: geekyeggo/delete-artifact@v1
91 | with:
92 | name: |
93 | fixtures
94 | specs
95 |
96 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
2 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
3 |
4 | # User-specific stuff
5 | .idea/**/workspace.xml
6 | .idea/**/tasks.xml
7 | .idea/**/usage.statistics.xml
8 | .idea/**/dictionaries
9 | .idea/**/shelf
10 |
11 | # AWS User-specific
12 | .idea/**/aws.xml
13 |
14 | # Generated files
15 | .idea/**/contentModel.xml
16 |
17 | # Sensitive or high-churn files
18 | .idea/**/dataSources/
19 | .idea/**/dataSources.ids
20 | .idea/**/dataSources.local.xml
21 | .idea/**/sqlDataSources.xml
22 | .idea/**/dynamic.xml
23 | .idea/**/uiDesigner.xml
24 | .idea/**/dbnavigator.xml
25 |
26 | # Gradle
27 | .idea/**/gradle.xml
28 | .idea/**/libraries
29 |
30 | # Gradle and Maven with auto-import
31 | # When using Gradle or Maven with auto-import, you should exclude module files,
32 | # since they will be recreated, and may cause churn. Uncomment if using
33 | # auto-import.
34 | # .idea/artifacts
35 | # .idea/compiler.xml
36 | # .idea/jarRepositories.xml
37 | # .idea/modules.xml
38 | # .idea/*.iml
39 | # .idea/modules
40 | # *.iml
41 | # *.ipr
42 |
43 | # CMake
44 | cmake-build-*/
45 |
46 | # Mongo Explorer plugin
47 | .idea/**/mongoSettings.xml
48 |
49 | # File-based project format
50 | *.iws
51 |
52 | # IntelliJ
53 | out/
54 |
55 | # mpeltonen/sbt-idea plugin
56 | .idea_modules/
57 |
58 | # JIRA plugin
59 | atlassian-ide-plugin.xml
60 |
61 | # Cursive Clojure plugin
62 | .idea/replstate.xml
63 |
64 | # SonarLint plugin
65 | .idea/sonarlint/
66 |
67 | # Crashlytics plugin (for Android Studio and IntelliJ)
68 | com_crashlytics_export_strings.xml
69 | crashlytics.properties
70 | crashlytics-build.properties
71 | fabric.properties
72 |
73 | # Editor-based Rest Client
74 | .idea/httpRequests
75 |
76 | # Android studio 3.1+ serialized cache file
77 | .idea/caches/build_file_checksums.ser
78 |
79 | # Logs
80 | logs
81 | *.log
82 | npm-debug.log*
83 | yarn-debug.log*
84 | yarn-error.log*
85 | lerna-debug.log*
86 |
87 | # Diagnostic reports (https://nodejs.org/api/report.html)
88 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
89 |
90 | # Runtime data
91 | pids
92 | *.pid
93 | *.seed
94 | *.pid.lock
95 |
96 | # Directory for instrumented libs generated by jscoverage/JSCover
97 | lib-cov
98 |
99 | # Coverage directory used by tools like istanbul
100 | coverage
101 | *.lcov
102 |
103 | # nyc test coverage
104 | .nyc_output
105 |
106 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
107 | .grunt
108 |
109 | # Bower dependency directory (https://bower.io/)
110 | bower_components
111 |
112 | # node-waf configuration
113 | .lock-wscript
114 |
115 | # Compiled binary addons (https://nodejs.org/api/addons.html)
116 | build/Release
117 |
118 | # Dependency directories
119 | node_modules/
120 | jspm_packages/
121 |
122 | # TypeScript v1 declaration files
123 | typings/
124 |
125 | # TypeScript cache
126 | *.tsbuildinfo
127 |
128 | # Optional npm cache directory
129 | .npm
130 |
131 | # Optional eslint cache
132 | .eslintcache
133 |
134 | # Microbundle cache
135 | .rpt2_cache/
136 | .rts2_cache_cjs/
137 | .rts2_cache_es/
138 | .rts2_cache_umd/
139 |
140 | # Optional REPL history
141 | .node_repl_history
142 |
143 | # Output of 'npm pack'
144 | *.tgz
145 |
146 | # Yarn Integrity file
147 | .yarn-integrity
148 |
149 | # dotenv environment variables file
150 | .env
151 | .env.test
152 |
153 | # parcel-bundler cache (https://parceljs.org/)
154 | .cache
155 |
156 | # Next.js build output
157 | .next
158 |
159 | # Nuxt.js build / generate output
160 | .nuxt
161 | dist
162 |
163 | # Gatsby files
164 | .cache/
165 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
166 | # https://nextjs.org/blog/next-9-1#public-directory-support
167 | # public
168 |
169 | # vuepress build output
170 | .vuepress/dist
171 |
172 | # Serverless directories
173 | .serverless/
174 |
175 | # FuseBox cache
176 | .fusebox/
177 |
178 | # DynamoDB Local files
179 | .dynamodb/
180 |
181 | # TernJS port file
182 | .tern-port
183 |
184 | # Byte-compiled / optimized / DLL files
185 | __pycache__/
186 | *.py[cod]
187 |
188 | # Mac
189 | .DS_Store
190 |
191 | # Cypress
192 | cypress/fixtures/*.json
193 | cypress/screenshots
194 | cypress/e2e/spec_chunk_**.js
195 | cypress.env.json
196 |
197 | # Python
198 | venv
199 |
200 | # Others
201 | *.h5
202 | *.pickle
203 | service-account.json
204 |
--------------------------------------------------------------------------------
/cypress/e2e/spec.cy.js:
--------------------------------------------------------------------------------
1 | const dayjs = require('dayjs');
2 | const minMax = require('dayjs/plugin/minMax')
3 | dayjs.extend(minMax);
4 |
5 | const courts = require('../js/courts');
6 | const caseTypes = require('../js/caseTypes');
7 | const cases = require('../fixtures/cases_chunk_0.json');
8 |
9 | const LAMBDA_API_URL = Cypress.env('CYPRESS_LAMBDA_API_URL');
10 | const S3_BUCKET_URL = Cypress.env('CYPRESS_S3_BUCKET_URL');
11 | const SCREENSHOT_URL = `${S3_BUCKET_URL}/screenshots`;
12 | const caseLookup = {};
13 | const doneCaseLookup = {};
14 |
15 | describe('Search case', function () {
16 | cases.forEach(([rowIndex, court, caseNumber, manager]) => {
17 | it(`[${rowIndex}] Search and Update sheet`, function() {
18 | cy.visit({
19 | url: 'https://safind.scourt.go.kr/sf/mysafind.jsp',
20 | headers: {
21 | 'Accept-Language': 'ko,en;q=0.9,ko-KR;q=0.8,en-US;q=0.7'
22 | },
23 | retryOnStatusCodeFailure: true
24 | });
25 |
26 | cy.get('img').each(($img) => {
27 | cy.wrap($img).scrollIntoView().should('be.visible');
28 |
29 | expect($img[0].naturalWidth).to.be.greaterThan(0);
30 | expect($img[0].naturalHeight).to.be.greaterThan(0);
31 | });
32 |
33 | cy.get('#sch_bub_nm').then(elem => {
34 | elem.get(0).options.length = 0;
35 | expect(elem.get(0).options).length(0);
36 |
37 | for (const {name, value} of courts) {
38 | elem.append(new Option(name, value));
39 | }
40 |
41 | expect(elem.get(0).options).length(courts.length);
42 | });
43 | cy.wait(500);
44 |
45 | // 법원 선택
46 | const courtToSelect = courts.find(n => n.name === court);
47 | cy.get('#sch_bub_nm')
48 | .select(courtToSelect.value)
49 | .should('have.value', courtToSelect.value);
50 |
51 | const [caseYear, caseSerialNumber] = caseNumber.match(/[0-9]+/g);
52 | const [caseType] = caseNumber.match(/([가-힣])+/g);
53 |
54 | cy.get('#sel_sa_year')
55 | .select(caseYear)
56 | .should('have.value', caseYear);
57 |
58 | cy.get('#sa_gubun').then(elem => {
59 | elem.get(0).options.length = 0;
60 | expect(elem.get(0).options).length(0);
61 |
62 | const caseTypeIdxToSelect = caseTypes.findIndex(n => n.name === caseType);
63 | elem.append(
64 | new Option(caseTypes[caseTypeIdxToSelect].name, caseTypes[caseTypeIdxToSelect].value)
65 | );
66 | expect(elem.get(0).options).length(1);
67 | });
68 | cy.wait(500);
69 |
70 | // 사건번호 입력
71 | cy.get('#sa_serial')
72 | .type(caseSerialNumber)
73 | .should('have.value', caseSerialNumber);
74 |
75 | // 당사자명 입력
76 | cy.get('#ds_nm')
77 | .type(manager)
78 | .should('have.value', manager);
79 |
80 | cy.document().then($document => {
81 | cy
82 | .get('#captcha')
83 | .find('img')
84 | .should('have.attr', 'src', '/sf/captchaImg?t=image')
85 | .then(async $img => {
86 | const canvas = $document.createElement("canvas");
87 | const ctx = canvas.getContext("2d");
88 | canvas.width = $img.width();
89 | canvas.height = $img.height();
90 | ctx.drawImage($img.get(0), 0, 0, $img.width(), $img.height());
91 |
92 | let blob;
93 | await new Cypress.Promise((resolve) => {
94 | canvas.toBlob(function (b) {
95 | blob = b;
96 | resolve(b);
97 | }, 'image/wbmp');
98 | });
99 |
100 | const formData = new FormData();
101 | formData.append("image", blob);
102 |
103 | // 자동입력방지 문자 해석하기
104 | cy.request({
105 | method: 'POST',
106 | url: `${LAMBDA_API_URL}/predict`,
107 | body: formData,
108 | headers: {
109 | 'content-type': 'multipart/form-data',
110 | },
111 | })
112 | .then((response) => {
113 | const number = new TextDecoder().decode(response.body);
114 | expect(number).length(6);
115 |
116 | // 자동입력방지 문자 입력
117 | cy.get('#answer')
118 | .type(number)
119 | .should('have.value', number);
120 | });
121 | });
122 | });
123 |
124 |
125 | function finalStep() {
126 | cy.get('li.subTab2').click();
127 | cy.get('#subTab2 .tableHor tbody tr').then(elem => {
128 | expect(elem.length).gt(0);
129 | });
130 | cy.get('#subTab2 .tableHor tbody tr').last().prev().then(function (prevElem) {
131 | const [prevDateElem,,prevResultElem] = prevElem.children();
132 | const prevDate = prevDateElem.innerText.trim();
133 | const prevResultDate = prevResultElem.innerText.trim().substr(0, 10);
134 |
135 | cy.get('#subTab2 .tableHor tbody tr').last().then(function (elem) {
136 | const [dateElem,,resultElem] = elem.children();
137 | const date = dateElem.innerText.trim();
138 | const resultDate = resultElem.innerText.trim().substr(0, 10);
139 | const finalDate = dayjs.max(
140 | [prevDate, prevResultDate, date, resultDate]
141 | .filter(n => n)
142 | .filter(n => dayjs(n).isValid())
143 | .map(n => dayjs(n))
144 | ).format('YYYY. MM. DD');
145 |
146 | // 최종 변경일자에 기입할 날짜
147 | expect(finalDate.length).gt(0);
148 |
149 | const filename = `${caseNumber}`;
150 | cy.get('#subTab2 .tableHor').screenshot(filename, {
151 | onAfterScreenshot($el, {name, path}) {
152 | caseLookup[rowIndex] = [
153 | court, caseNumber, manager, path, name, finalDate
154 | ];
155 | },
156 | });
157 | });
158 | });
159 | }
160 |
161 | const alertStub = cy.stub();
162 | cy.on('window:alert', alertStub);
163 | cy.get('.tableVer .redBtn').click().then(() => {
164 | const alertChain = alertStub.getCall(0);
165 | if ((alertChain || {}).lastArg !== '사건이 존재하지 않습니다.') {
166 | finalStep();
167 | }
168 | });
169 | });
170 | });
171 |
172 | afterEach(() => {
173 | Object.keys(caseLookup).forEach((rowIndex) => {
174 | // 이미 시트에 업데이트 한 사건은 스킵
175 | if (doneCaseLookup[rowIndex]) return;
176 | const today = dayjs().format('YYYY-MM-DD');
177 | const [
178 | court, caseNumber, manager, imgPath, filename, date
179 | ] = caseLookup[rowIndex];
180 |
181 | cy.readFile(imgPath, 'base64').then(img => {
182 | // 스크린샷 s3에 업로드
183 | cy.request({
184 | method: 'POST',
185 | url: `${LAMBDA_API_URL}/upload`,
186 | body: JSON.stringify({
187 | name: `screenshots/${filename}.png`,
188 | file: img,
189 | }),
190 | headers: {
191 | 'content-type': 'application/json',
192 | },
193 | })
194 | .then((response) => {
195 | expect(response.status).eq(200);
196 | });
197 | });
198 |
199 | // 구글 시트 업데이트
200 | cy.request({
201 | method: 'POST',
202 | url: `${LAMBDA_API_URL}/cases`,
203 | body: {
204 | range: `A${rowIndex}:G${rowIndex}`,
205 | values: [[
206 | court,
207 | caseNumber,
208 | manager,
209 | dayjs(date).format('YYYY-MM-DD'),
210 | today,
211 | `=HYPERLINK("${SCREENSHOT_URL}/${filename}.png", "이미지 링크")`,
212 | `='사건 목록'!D${rowIndex}`
213 | ]],
214 | },
215 | headers: {
216 | 'content-type': 'application/json',
217 | },
218 | })
219 | .then((response) => {
220 | expect(response.status).eq(200);
221 | doneCaseLookup[rowIndex] = true;
222 | });
223 | });
224 | });
225 | });
226 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # case-ing
2 | 대법원 나의 사건 조회 자동화 API & 크롤러
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | case-ing는 case + ~ing의 합성어로 여러개의 사건 진행현황을 쉽게 조회하도록 도와주는
15 | 자동화 도구입니다.
16 |
17 | ## 사용된 기술
18 | - [Cypress](https://www.cypress.io/) - 크롤링
19 | - [Scikit-learn](https://scikit-learn.org/) - Captcha 학습, 분석
20 | - [Serverless Framework](https://www.serverless.com/) - Captcha 분석 API, 구글 스프레드시트 조회/수정 API 생성
21 |
22 | ## 요구사항
23 | - Node.js >= 14
24 | - yarn v1.x
25 | - Docker
26 |
27 | ## 폴더 구조
28 | ```
29 | case-ing
30 | └── api
31 | │ └──certification
32 | │ │ └─ service-account.json # 구글 스프레드시트 인증을 위한 파일
33 | │ └──model
34 | │ │ └─ model.pickle # 미리 학습된 scikit-learn 모델
35 | │ ├─ app.py # 캡챠 handler
36 | │ ├─ cases.py # 구글 스프레드시트 Read, Update handler
37 | │ ├─ docker-requirements.txt # 캡챠 handler 도커 배포에 필요한 패키지 정의
38 | │ ├─ Dockerfile # 캡챠 도커파일
39 | │ ├─ requirements.txt # 구글 스프레드시트 handler 배포에 필요한 패키지 정의
40 | │ ├─ s3.py # s3 업로드 handler
41 | │ └─ serverless.yml # 서버리스 설정파일
42 | └── cypress
43 | │ └──fixtures # 사건들이 create-fixtures.js 실행 후 여기에 생성됨
44 | │ └──e2e
45 | │ │ └─ spec.cy.js # 자동화 메인 스크립트
46 | │ └──js
47 | │ │ ├─ caseTypes.js # 대법원 홈페이지에서 추출한 사건 구분 데이터
48 | │ │ └─ courts.js # 대법원 홈페이지에서 추출한 법원 데이터
49 | │ └──plugins
50 | │ └─ index.js
51 | ├─ create-fixtures.js # 구글 스프레드시트를 조회해서 필요한 fixtures를 생성함
52 | ├─ cypress-partial.js # Cypress 병렬 실행용 스크립트
53 | └─ cypress.env.json # 환경변수 저장소
54 | ```
55 |
56 | ## 사전 준비
57 |
58 | ### 1. 구글 스프레드시트 생성
59 |
60 | #### 사건 진행현황 시트 생성
61 | 자동화 입력이 끝난 후 결과가 기록될 시트입니다.
62 |
63 |
64 |
65 | #### 사건 목록 시트 생성
66 | 조회하고 싶은 사건을 입력할 시트입니다.
67 |
68 |
69 |
70 | #### 스프레드시트 id 입력
71 | `api/cases.py`의 `SPREADSHEET_ID`에 생성한 스프레드시트의 id를 입력합니다. 스프레드시트의 id는
72 | 스프레드시트가 열려있는 탭의 URL의 중간에 있는 유니크 아이디를 가져옵니다.
73 |
74 | `https://docs.google.com/spreadsheets/d/여기에 스프레드시트 id가 있습니다/edit#gid=0`
75 |
76 | ### 2. 서비스 계정 생성 및 스프레드시트 편집자 권한 부여
77 | 구글 개발자 콘솔에서 프로젝트를 만들고 [Google Sheets API](https://developers.google.com/sheets/api)를 활성화합니다.
78 |
79 | 그 후 서비스 계정의 API 키를 생성 및 다운로드 받은 후 `api/certification/service-account.json`에 서비스 키를 저장합니다.
80 |
81 | 위 작업이 끝나면 스프레드시트 우측 상단의 공유 버튼을 클릭합니다.
82 |
83 |
84 |
85 | 공유 모달에서 서비스 계정의 이메일을 입력하고 편집자 권한을 부여합니다.
86 |
87 | ### 3. Captcha 우회용 Scikit-learn 학습
88 | 캡챠 예측에 필요한 모델을 학습시킨 후 `api/model/model.pickle`에 모델을 저장합니다.
89 |
90 | 이 레포에서는 학습 모델을 따로 제공하지 않습니다.
91 |
92 | ### 4. S3 버킷 생성
93 | 사건 진행 내용 스크린샷을 저장할 S3 버킷을 생성합니다.
94 |
95 | ### 5. IAM 역할 생성
96 | 정책 예)
97 | - `AWSLambdaBasicExecutionRole`
98 | - `AmazonS3FullAccess`
99 | - `AWSLambda_FullAccess`
100 |
101 | IAM 역할을 생성한 후 `api/serverless.yml`에 ARN을 입력합니다. (키: `provider.iam.role`)
102 |
103 | ## 서버리스 백엔드 준비하기
104 | 서버리스 백엔드는 캡챠 예측, 구글 스프레드 시트 조회 & 업데이트를 위해 필요하며, 서버리스 프레임워크를 통해 배포됩니다.
105 |
106 | ### 시작하기
107 | 서버리스는 `api/serverless.yml`에 기재된 `frameworkVersion`의 메이저 버전과 일치해야 합니다.
108 |
109 | ~~현재는 설정이 2.xx 버전 기준이므로 `@latest-2` 태그를 붙여서 글로벌로 패키지 설치를 진행합니다.~~
110 |
111 | 현재 최신 버전인 3 버전으로 글로벌 설치를 진행합니다.
112 |
113 | ```shell
114 | npm install -g serverless@latest
115 | ```
116 |
117 | 서버리스 배포를 위해 aws-cli를 통한 프로필 설정을 진행해주세요. 이미 설정이 되있다면 넘어가셔도 됩니다.
118 |
119 | ```shell
120 | $ aws configure
121 | AWS Access Key ID: foo
122 | AWS Secret Access Key: bar
123 | Default region name [us-west-2]: ap-northeast-2
124 | Default output format [None]:
125 | ```
126 |
127 | ### 테스트 (local)
128 | 로컬 환경에서 테스트 하는 방법을 설명합니다. 노드, 파이썬 패키지 설치와 도커 빌드 과정이 필요합니다.
129 |
130 | #### 노드 패키지 설치
131 | ```shell
132 | cd api
133 | yarn install
134 | ```
135 |
136 | #### 파이썬 패키지 설치
137 | 파이썬 패키지의 전역 설치를 피하기 위해 가상환경을 구성합니다.
138 |
139 | `venv`, `virtualenv` 등의 선택지가 있는데 여기선 `virtualenv`를 사용하겠습니다. ([`virtualenv` 설치 가이드](https://virtualenv.pypa.io/en/latest/installation.html))
140 |
141 | ```shell
142 | cd api
143 | virtualenv venv
144 | source venv/bin/activate
145 | ```
146 |
147 | * `activate`는 가상 환경에 설치한 파이썬과 패키지를 시스템에 설치된 것보다 먼저 사용하도록 환경 변수를 구성하는 역할을
148 | 하므로 반드시 실행해야 합니다.
149 |
150 | ```shell
151 | pip3 install -r requirements.txt
152 | deactivate
153 | ```
154 |
155 | 캡챠 예측 API의 경우 `serverless-offline`으로 로컬에서 테스트가 불가능하므로 별도 빌드 작업이 필요합니다.
156 |
157 | ```shell
158 | docker buildx build --platform linux/amd64 -t predict-captcha .
159 | ```
160 | * `--platform linux/amd64` 플래그를 붙이면 맥북 M1 환경에서도 빌드가 가능해집니다.
161 |
162 | #### 테스트 실행
163 |
164 | ```shell
165 | cd api
166 | sls offline
167 | ```
168 |
169 | http://localhost:3000/cases 에 `GET` 요청을 보내서 스프레드시트의 데이터를 읽어올 수 있는지 테스트 해봅니다.
170 |
171 | ```shell
172 | cd api
173 | docker run -p 9000:8080 predict-captcha:latest
174 | ```
175 |
176 | http://localhost:9000/2015-03-31/functions/function/invocations 에 `POST` 요청을 보내서 응답이 오는지 테스트 해봅니다.
177 |
178 | 아래 이미지는 POST 요청 예시입니다.
179 |
180 |
181 |
182 | 캡챠 예측 API의 경우 로컬에서 에러가 발생할 수 있습니다. 이런 경우 아래 서술할 beta 환경에 배포 후 테스트를 진행할 수도
183 | 있습니다.
184 |
185 | ### 테스트 (beta)
186 | 베타에서 테스트 하는 방법을 설명합니다. 노드 패키지 설치 후 서버리스에 `beta` 환경으로 배포합니다. 배포를 진행하기 전에
187 | 도커 실행이 필요합니다.
188 |
189 | ```shell
190 | cd api
191 | yarn install
192 | serverless deploy --stage beta
193 | ```
194 |
195 | 서버리스 배포가 완료되면 배포된 URL이 콘솔에 뜰텐데 해당 URL로 요청을 보내봅니다. 아래는 예시입니다.
196 |
197 | - (GET) https://xxxxxxxxx.execute-api.ap-northeast-2.amazonaws.com/cases
198 | - (POST) https://xxxxxxxxx.execute-api.ap-northeast-2.amazonaws.com/predict
199 |
200 | 아래는 캡챠 API에 대한 요청 및 응답 예시입니다.
201 |
202 |
203 |
204 | ### 배포
205 |
206 | 캡챠 예측의 경우 다른 API와 다르게 약 1GB가 넘는 의존성이 필요하므로 도커 이미지로 빌드됩니다.
207 |
208 | 도커 이미지 빌드를 위해 도커를 실행합니다. 도커가 없다면 [공식 홈페이지](https://www.docker.com/products/docker-desktop/)에서 설치해주세요.
209 |
210 | ```
211 | cd api
212 | yarn install
213 | sls deploy
214 | ```
215 |
216 | ## Cypress 자동화 준비하기
217 |
218 | ### 1. 루트 경로에 cypress.env.json 생성
219 | ```json
220 | {
221 | "CYPRESS_LAMBDA_API_URL": "",
222 | "CYPRESS_S3_BUCKET_URL": ""
223 | }
224 | ```
225 |
226 | - URL 마지막에 `/`는 적지 않습니다.
227 | - CYPRESS_LAMBDA_API_URL은 앞에서 배포된 서버리스 백엔드의 URL Endpoint를 기입합니다.
228 |
229 | ### 2. Actions Secrets 입력
230 |
231 | 깃허브 메뉴의 Settings -> Secrets -> Actions 에 들어가서 `CYPRESS_ENV_CI` 키를 아래와 같이 생성합니다.
232 |
233 | ```json
234 | {
235 | "CYPRESS_LAMBDA_API_URL": "",
236 | "CYPRESS_S3_BUCKET_URL": ""
237 | }
238 | ```
239 |
240 | 여기서 입력한 json 데이터는 workflow 실행 중 아래 명령어에 의해 자동으로 생성됩니다.
241 |
242 | ```shell
243 | echo '${{ secrets.CYPRESS_ENV_CI }}' > cypress.env.json
244 | ```
245 |
246 | ## Cypress 자동화 테스트
247 | ```shell
248 | node create-fixtures.js
249 | yarn test
250 | ```
251 |
252 | ## GitHub Actions workflow
253 |
254 | - `.github/workflows/update-sheet-cron.yml`
255 | - 일정 주기에 따라 실행되는 워크플로우입니다.
256 | - `.github/workflows/update-sheet-manually.yml`
257 | - 수동으로 실행하는 워크플로우입니다.
258 |
259 | 더 많은 사건을 빠르게 처리하기 위해 GitHub Actions의 Job Matrix에 여러개의 기기를 두어 병렬 실행을 하도록
260 | 구성되어있습니다. [Cypress에서 제공하는 github-action](https://github.com/cypress-io/github-action)에서도 병렬 실행을
261 | 제공하고 있지만, 유료 플랜을 사용하지 않는 경우 제한이 걸려있기 때문에 별도의 Node.js 스크립트를 사용해서 병렬 실행을
262 | 하도록 구성하였습니다. `create-fixtures.js`와 `cypress-partial.js`에서 관련 코드를 확인할 수 있습니다.
263 |
264 | 실제 워크플로우 실행은 아래와 같은 단계로 구성됩니다.
265 |
266 | ### 1. 픽스쳐 생성 (create-fixtures)
267 | ```shell
268 | node create-fixtures.js
269 | ```
270 |
271 | - Serverless를 통해 배포된 Lambda API에서 스프레드시트 데이터를 받아옴
272 | - `cypress/fixtures` 폴더에 5개 단위로 `cases_chunk_.json`를 생성함. 5개씩 나누는 이유는 Cypress 병렬 실행을 위함임.
273 | - `cypress/e2e` 폴더에 5개 단위로 `spec_chunk_.cy.js`를 생성함.
274 |
275 | 이후 최신 정보를 유지하기위해 구글 스프레드시트의 사건 진행현황 시트 데이터를 초기화합니다.
276 |
277 | ### 2. 자동화 메인 스크립트 실행 (cypress-run)
278 | ```shell
279 | yarn start --spec $(node cypress-partial.js n ${{ matrix.containers }})
280 | ```
281 | - `n`개의 러너 중 해당 러너가 실행해야 할 번호의 spec을 실행
282 |
283 | ### 3. 아티펙트 삭제 (delete-artifacts)
284 | 워크플로우 실행중에 artifact에 보관한 파일들을 삭제합니다. 해당 작업을 진행하지 않으면 실행한 데이터가 남아서
285 | 개인정보가 유출 위험이 존재하며 깃허브에 보관 비용을 낼 수도 있습니다.
286 |
287 | ## spec.cy.js 프로세스 설명
288 |
289 | ### 1. 나의 사건 조회 페이지 접속
290 | ### 2. 페이지 안의 모든 이미지들이 불러와졌는지 검사
291 | 가끔 캡챠 이미지가 깨질때가 있는데 미리 검사해서 실패시 빠른 재시도를 할 수 있음
292 |
293 | ### 3. 사건 번호 / 법원 데이터 강제 입력
294 | EUC-KR 인코딩으로 인해 깨진 데이터들을 아래의 파일에서 직접 넣어줌
295 |
296 | - `cypress/js/caseTypes.js`
297 | - `cypress/js/courts.js`
298 |
299 | ### 4. 자동입력방지 문자 입력
300 | Lambda API에 캡챠 이미지를 전송하여 예측된 숫자를 입력함
301 | 단, 정확도가 100%가 아니므로 실패시 최대 20번까지 재시도함
302 |
303 | ### 5. 사건 진행내역 스크린샷 캡쳐
304 | ### 6. S3에 스크린샷 업로드
305 | ### 7. 구글 시트 업데이트
306 | Lambda API를 통해 사건 별로 S3 이미지 링크를 시트에 업데이트
307 |
--------------------------------------------------------------------------------
/cypress/js/courts.js:
--------------------------------------------------------------------------------
1 | module.exports = [
2 | {
3 | name: "가평군법원",
4 | value: "214803",
5 | },
6 | {
7 | name: "강릉지원",
8 | value: "000261",
9 | },
10 | {
11 | name: "강진군법원",
12 | value: "512951",
13 | },
14 | {
15 | name: "강화군법원",
16 | value: "240811",
17 | },
18 | {
19 | name: "거제시법원",
20 | value: "422931",
21 | },
22 | {
23 | name: "거창지원",
24 | value: "000424",
25 | },
26 | {
27 | name: "경산시법원",
28 | value: "310895",
29 | },
30 | {
31 | name: "고령군법원",
32 | value: "310896",
33 | },
34 | {
35 | name: "고성군법원",
36 | value: "263848",
37 | },
38 | {
39 | name: "고성군법원(경)",
40 | value: "422932",
41 | },
42 | {
43 | name: "고양지원",
44 | value: "214807",
45 | },
46 | {
47 | name: "고창군법원",
48 | value: "522977",
49 | },
50 | {
51 | name: "고흥군법원",
52 | value: "513953",
53 | },
54 | {
55 | name: "곡성군법원",
56 | value: "510941",
57 | },
58 | {
59 | name: "광명시법원",
60 | value: "250825",
61 | },
62 | {
63 | name: "광양시법원",
64 | value: "513956",
65 | },
66 | {
67 | name: "광주고등법원",
68 | value: "000500",
69 | },
70 | {
71 | name: "광주고등법원(전주재판부)",
72 | value: "000502",
73 | },
74 | {
75 | name: "광주고등법원(제주재판부)",
76 | value: "000501",
77 | },
78 | {
79 | name: "광주시법원",
80 | value: "251827",
81 | },
82 | {
83 | name: "광주가정법원",
84 | value: "000515",
85 | },
86 | {
87 | name: "광주가정법원 목포지원",
88 | value: "000599",
89 | },
90 | {
91 | name: "광주가정법원 순천지원",
92 | value: "000591",
93 | },
94 | {
95 | name: "광주가정법원 장흥지원",
96 | value: "000590",
97 | },
98 | {
99 | name: "광주가정법원 해남지원",
100 | value: "000592",
101 | },
102 | {
103 | name: "광주지방법원",
104 | value: "000510",
105 | },
106 | {
107 | name: "광주지방법원 목포지원",
108 | value: "000511",
109 | },
110 | {
111 | name: "광주지방법원 장흥지원",
112 | value: "000512",
113 | },
114 | {
115 | name: "광주지방법원 순천지원",
116 | value: "000513",
117 | },
118 | {
119 | name: "광주지방법원 해남지원",
120 | value: "000514",
121 | },
122 | {
123 | name: "괴산군법원",
124 | value: "270862",
125 | },
126 | {
127 | name: "구례군법원",
128 | value: "513955",
129 | },
130 | {
131 | name: "구미시법원",
132 | value: "313901",
133 | },
134 | {
135 | name: "군산지원",
136 | value: "000521",
137 | },
138 | {
139 | name: "군위군법원",
140 | value: "315905",
141 | },
142 | {
143 | name: "금산군법원",
144 | value: "280872",
145 | },
146 | {
147 | name: "김제시법원",
148 | value: "520972",
149 | },
150 | {
151 | name: "김포시법원",
152 | value: "240812",
153 | },
154 | {
155 | name: "김해시법원",
156 | value: "420923",
157 | },
158 | {
159 | name: "나주시법원",
160 | value: "510943",
161 | },
162 | {
163 | name: "남양주시법원",
164 | value: "214804",
165 | },
166 | {
167 | name: "남원지원",
168 | value: "000523",
169 | },
170 | {
171 | name: "남해군법원",
172 | value: "421928",
173 | },
174 | {
175 | name: "단양군법원",
176 | value: "272865",
177 | },
178 | {
179 | name: "담양군법원",
180 | value: "510946",
181 | },
182 | {
183 | name: "당진시법원",
184 | value: "285881",
185 | },
186 | {
187 | name: "대구가정법원",
188 | value: "000318",
189 | },
190 | {
191 | name: "대구가정법원 경주지원",
192 | value: "000390",
193 | },
194 | {
195 | name: "대구가정법원 김천지원",
196 | value: "000391",
197 | },
198 | {
199 | name: "대구가정법원 상주지원",
200 | value: "000392",
201 | },
202 | {
203 | name: "대구가정법원 안동지원",
204 | value: "000399",
205 | },
206 | {
207 | name: "대구가정법원 의성지원",
208 | value: "000393",
209 | },
210 | {
211 | name: "대구가정법원 영덕지원",
212 | value: "000394",
213 | },
214 | {
215 | name: "대구가정법원 포항지원",
216 | value: "000395",
217 | },
218 | {
219 | name: "대구고등법원",
220 | value: "000300",
221 | },
222 | {
223 | name: "대구지방법원",
224 | value: "000310",
225 | },
226 | {
227 | name: "대구지방법원 안동지원",
228 | value: "000311",
229 | },
230 | {
231 | name: "대구지방법원 경주지원",
232 | value: "000312",
233 | },
234 | {
235 | name: "대구지방법원 포항지원",
236 | value: "000317",
237 | },
238 | {
239 | name: "대구지방법원 김천지원",
240 | value: "000313",
241 | },
242 | {
243 | name: "대구지방법원 상주지원",
244 | value: "000314",
245 | },
246 | {
247 | name: "대구지방법원 의성지원",
248 | value: "000315",
249 | },
250 | {
251 | name: "대구지방법원 영덕지원",
252 | value: "000316",
253 | },
254 | {
255 | name: "대구지방법원 서부지원",
256 | value: "000320",
257 | },
258 | {
259 | name: "대법원",
260 | value: "000100",
261 | },
262 | {
263 | name: "대전가정법원",
264 | value: "000286",
265 | },
266 | {
267 | name: "대전가정법원 공주지원",
268 | value: "000295",
269 | },
270 | {
271 | name: "대전가정법원 논산지원",
272 | value: "000293",
273 | },
274 | {
275 | name: "대전가정법원 서산지원",
276 | value: "000296",
277 | },
278 | {
279 | name: "대전가정법원 천안지원",
280 | value: "000294",
281 | },
282 | {
283 | name: "대전가정법원 홍성지원",
284 | value: "000292",
285 | },
286 | {
287 | name: "대전고등법원",
288 | value: "000600",
289 | },
290 | {
291 | name: "대전고등법원(청주재판부)",
292 | value: "000601",
293 | },
294 | {
295 | name: "대전지방법원",
296 | value: "000280",
297 | },
298 | {
299 | name: "대전지방법원 홍성지원",
300 | value: "000281",
301 | },
302 | {
303 | name: "대전지방법원 공주지원",
304 | value: "000284",
305 | },
306 | {
307 | name: "대전지방법원 논산지원",
308 | value: "000282",
309 | },
310 | {
311 | name: "대전지방법원 서산지원",
312 | value: "000285",
313 | },
314 | {
315 | name: "대전지방법원 천안지원",
316 | value: "000283",
317 | },
318 | {
319 | name: "동두천시법원",
320 | value: "214808",
321 | },
322 | {
323 | name: "동해시법원",
324 | value: "261846",
325 | },
326 | {
327 | name: "마산시법원",
328 | value: "마산시법원",
329 | },
330 | {
331 | name: "마산지원",
332 | value: "000431",
333 | },
334 | {
335 | name: "무안군법원",
336 | value: "511949",
337 | },
338 | {
339 | name: "무주군법원",
340 | value: "520973",
341 | },
342 | {
343 | name: "문경시법원",
344 | value: "314903",
345 | },
346 | {
347 | name: "밀양지원",
348 | value: "000423",
349 | },
350 | {
351 | name: "법원행정처",
352 | value: "000110",
353 | },
354 | {
355 | name: "보령시법원",
356 | value: "281874",
357 | },
358 | {
359 | name: "보성군법원",
360 | value: "513952",
361 | },
362 | {
363 | name: "보은군법원",
364 | value: "270861",
365 | },
366 | {
367 | name: "봉화군법원",
368 | value: "311898",
369 | },
370 | {
371 | name: "부산고등법원",
372 | value: "000400",
373 | },
374 | {
375 | name: "부산고등법원(울산재판부)",
376 | value: "000402",
377 | },
378 | {
379 | name: "부산고등법원(창원재판부)",
380 | value: "000401",
381 | },
382 | {
383 | name: "부산지방법원",
384 | value: "000410",
385 | },
386 | {
387 | name: "부산지방법원 동부지원",
388 | value: "000412",
389 | },
390 | {
391 | name: "부산지방법원 서부지원",
392 | value: "000414",
393 | },
394 | {
395 | name: "부산가정법원",
396 | value: "000413",
397 | },
398 | {
399 | name: "부안군법원",
400 | value: "522976",
401 | },
402 | {
403 | name: "부여군법원",
404 | value: "282876",
405 | },
406 | {
407 | name: "사천시법원",
408 | value: "421927",
409 | },
410 | {
411 | name: "산청군법원",
412 | value: "421929",
413 | },
414 | {
415 | name: "삼척시법원",
416 | value: "261845",
417 | },
418 | {
419 | name: "서귀포시법원",
420 | value: "530991",
421 | },
422 | {
423 | name: "서울가정법원",
424 | value: "000230",
425 | },
426 | {
427 | name: "서울고등법원",
428 | value: "000200",
429 | },
430 | {
431 | name: "서울고등법원(춘천재판부)",
432 | value: "000201",
433 | },
434 | {
435 | name: "서울고등법원(인천재판부)",
436 | value: "000202",
437 | },
438 | {
439 | name: "서울남부지방법원",
440 | value: "000212",
441 | },
442 | {
443 | name: "서울동부지방법원",
444 | value: "000211",
445 | },
446 | {
447 | name: "서울북부지방법원",
448 | value: "000213",
449 | },
450 | {
451 | name: "서울서부지방법원",
452 | value: "000215",
453 | },
454 | {
455 | name: "서울중앙지방법원",
456 | value: "000210",
457 | },
458 | {
459 | name: "서울행정법원",
460 | value: "000220",
461 | },
462 | {
463 | name: "서울회생법원",
464 | value: "000221",
465 | },
466 | {
467 | name: "서천군법원",
468 | value: "281873",
469 | },
470 | {
471 | name: "성남지원",
472 | value: "000251",
473 | },
474 | {
475 | name: "성주군법원",
476 | value: "310894",
477 | },
478 | {
479 | name: "세종특별자치시법원",
480 | value: "280871",
481 | },
482 | {
483 | name: "속초지원",
484 | value: "000263",
485 | },
486 | {
487 | name: "수원가정법원",
488 | value: "000302",
489 | },
490 | {
491 | name: "수원가정법원 성남지원",
492 | value: "000303",
493 | },
494 | {
495 | name: "수원가정법원 안산지원",
496 | value: "000322",
497 | },
498 | {
499 | name: "수원가정법원 안양지원",
500 | value: "000306",
501 | },
502 | {
503 | name: "수원가정법원 여주지원",
504 | value: "000304",
505 | },
506 | {
507 | name: "수원가정법원 평택지원",
508 | value: "000305",
509 | },
510 | {
511 | name: "수원고등법원",
512 | value: "000800",
513 | },
514 | {
515 | name: "수원지방법원",
516 | value: "000250",
517 | },
518 | {
519 | name: "순창군법원",
520 | value: "523979",
521 | },
522 | {
523 | name: "아산시법원",
524 | value: "283877",
525 | },
526 | {
527 | name: "안산지원",
528 | value: "250826",
529 | },
530 | {
531 | name: "안성시법원",
532 | value: "250821",
533 | },
534 | {
535 | name: "안양지원",
536 | value: "000254",
537 | },
538 | {
539 | name: "양구군법원",
540 | value: "260843",
541 | },
542 | {
543 | name: "양산시법원",
544 | value: "411911",
545 | },
546 | {
547 | name: "양양군법원",
548 | value: "263849",
549 | },
550 | {
551 | name: "양평군법원",
552 | value: "252828",
553 | },
554 | {
555 | name: "여수시법원",
556 | value: "513954",
557 | },
558 | {
559 | name: "여주지원",
560 | value: "000252",
561 | },
562 | {
563 | name: "연천군법원",
564 | value: "214805",
565 | },
566 | {
567 | name: "영광군법원",
568 | value: "510942",
569 | },
570 | {
571 | name: "영동지원",
572 | value: "000273",
573 | },
574 | {
575 | name: "영암군법원",
576 | value: "511948",
577 | },
578 | {
579 | name: "영양군법원",
580 | value: "316907",
581 | },
582 | {
583 | name: "영월지원",
584 | value: "000264",
585 | },
586 | {
587 | name: "영주시법원",
588 | value: "311897",
589 | },
590 | {
591 | name: "영천시법원",
592 | value: "310892",
593 | },
594 | {
595 | name: "예산군법원",
596 | value: "281875",
597 | },
598 | {
599 | name: "예천군법원",
600 | value: "314902",
601 | },
602 | {
603 | name: "오산시법원",
604 | value: "250824",
605 | },
606 | {
607 | name: "옥천군법원",
608 | value: "273866",
609 | },
610 | {
611 | name: "완도군법원",
612 | value: "514958",
613 | },
614 | {
615 | name: "용인시법원",
616 | value: "250823",
617 | },
618 | {
619 | name: "울산가정법원",
620 | value: "000477",
621 | },
622 | {
623 | name: "울산지방법원",
624 | value: "000411",
625 | },
626 | {
627 | name: "울진군법원",
628 | value: "316906",
629 | },
630 | {
631 | name: "원주지원",
632 | value: "000262",
633 | },
634 | {
635 | name: "음성군법원",
636 | value: "271864",
637 | },
638 | {
639 | name: "의령군법원",
640 | value: "420924",
641 | },
642 | {
643 | name: "의정부지방법원",
644 | value: "000214",
645 | },
646 | {
647 | name: "이천시법원",
648 | value: "252829",
649 | },
650 | {
651 | name: "익산시법원",
652 | value: "521975",
653 | },
654 | {
655 | name: "인제군법원",
656 | value: "260841",
657 | },
658 | {
659 | name: "인천가정법원",
660 | value: "000228",
661 | },
662 | {
663 | name: "인천가정법원 부천지원",
664 | value: "000229",
665 | },
666 | {
667 | name: "인천지방법원",
668 | value: "000240",
669 | },
670 | {
671 | name: "인천지방법원 부천지원",
672 | value: "000241",
673 | },
674 | {
675 | name: "임실군법원",
676 | value: "520974",
677 | },
678 | {
679 | name: "장성군법원",
680 | value: "510944",
681 | },
682 | {
683 | name: "장수군법원",
684 | value: "523978",
685 | },
686 | {
687 | name: "전주지방법원",
688 | value: "000520",
689 | },
690 | {
691 | name: "정선군법원",
692 | value: "264851",
693 | },
694 | {
695 | name: "정읍지원",
696 | value: "000522",
697 | },
698 | {
699 | name: "제주지방법원",
700 | value: "000530",
701 | },
702 | {
703 | name: "제천지원",
704 | value: "000272",
705 | },
706 | {
707 | name: "진도군법원",
708 | value: "514959",
709 | },
710 | {
711 | name: "진안군법원",
712 | value: "520971",
713 | },
714 | {
715 | name: "진주지원",
716 | value: "000421",
717 | },
718 | {
719 | name: "진천군법원",
720 | value: "270863",
721 | },
722 | {
723 | name: "창녕군법원",
724 | value: "423933",
725 | },
726 | {
727 | name: "창원남부시법원",
728 | value: "420922",
729 | },
730 | {
731 | name: "창원지방법원",
732 | value: "000420",
733 | },
734 | {
735 | name: "철원군법원",
736 | value: "214806",
737 | },
738 | {
739 | name: "청도군법원",
740 | value: "310891",
741 | },
742 | {
743 | name: "청송군법원",
744 | value: "315904",
745 | },
746 | {
747 | name: "청양군법원",
748 | value: "284878",
749 | },
750 | {
751 | name: "청주지방법원",
752 | value: "000270",
753 | },
754 | {
755 | name: "춘천지방법원",
756 | value: "000260",
757 | },
758 | {
759 | name: "충주지원",
760 | value: "000271",
761 | },
762 | {
763 | name: "칠곡군법원",
764 | value: "310893",
765 | },
766 | {
767 | name: "태백시법원",
768 | value: "264852",
769 | },
770 | {
771 | name: "태안군법원",
772 | value: "285879",
773 | },
774 | {
775 | name: "통영지원",
776 | value: "000422",
777 | },
778 | {
779 | name: "특허법원",
780 | value: "000700",
781 | },
782 | {
783 | name: "파주시법원",
784 | value: "214801",
785 | },
786 | {
787 | name: "평창군법원",
788 | value: "264853",
789 | },
790 | {
791 | name: "평택지원",
792 | value: "000253",
793 | },
794 | {
795 | name: "포천시법원",
796 | value: "214802",
797 | },
798 | {
799 | name: "하동군법원",
800 | value: "421926",
801 | },
802 | {
803 | name: "함안군법원",
804 | value: "420921",
805 | },
806 | {
807 | name: "함양군법원",
808 | value: "424935",
809 | },
810 | {
811 | name: "함평군법원",
812 | value: "511947",
813 | },
814 | {
815 | name: "합천군법원",
816 | value: "424934",
817 | },
818 | {
819 | name: "홍천군법원",
820 | value: "260842",
821 | },
822 | {
823 | name: "화순군법원",
824 | value: "510945",
825 | },
826 | {
827 | name: "화천군법원",
828 | value: "260844",
829 | },
830 | {
831 | name: "횡성군법원",
832 | value: "262847",
833 | },
834 | ];
835 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@cypress/request@^2.88.10":
6 | version "2.88.10"
7 | resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce"
8 | integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==
9 | dependencies:
10 | aws-sign2 "~0.7.0"
11 | aws4 "^1.8.0"
12 | caseless "~0.12.0"
13 | combined-stream "~1.0.6"
14 | extend "~3.0.2"
15 | forever-agent "~0.6.1"
16 | form-data "~2.3.2"
17 | http-signature "~1.3.6"
18 | is-typedarray "~1.0.0"
19 | isstream "~0.1.2"
20 | json-stringify-safe "~5.0.1"
21 | mime-types "~2.1.19"
22 | performance-now "^2.1.0"
23 | qs "~6.5.2"
24 | safe-buffer "^5.1.2"
25 | tough-cookie "~2.5.0"
26 | tunnel-agent "^0.6.0"
27 | uuid "^8.3.2"
28 |
29 | "@cypress/xvfb@^1.2.4":
30 | version "1.2.4"
31 | resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a"
32 | integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==
33 | dependencies:
34 | debug "^3.1.0"
35 | lodash.once "^4.1.1"
36 |
37 | "@types/node@*":
38 | version "17.0.8"
39 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b"
40 | integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==
41 |
42 | "@types/node@^14.14.31":
43 | version "14.18.5"
44 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.5.tgz#0dd636fe7b2c6055cbed0d4ca3b7fb540f130a96"
45 | integrity sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A==
46 |
47 | "@types/sinonjs__fake-timers@8.1.1":
48 | version "8.1.1"
49 | resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3"
50 | integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==
51 |
52 | "@types/sizzle@^2.3.2":
53 | version "2.3.3"
54 | resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef"
55 | integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==
56 |
57 | "@types/yauzl@^2.9.1":
58 | version "2.9.2"
59 | resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a"
60 | integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==
61 | dependencies:
62 | "@types/node" "*"
63 |
64 | aggregate-error@^3.0.0:
65 | version "3.1.0"
66 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
67 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
68 | dependencies:
69 | clean-stack "^2.0.0"
70 | indent-string "^4.0.0"
71 |
72 | ansi-colors@^4.1.1:
73 | version "4.1.1"
74 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
75 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
76 |
77 | ansi-escapes@^4.3.0:
78 | version "4.3.2"
79 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
80 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
81 | dependencies:
82 | type-fest "^0.21.3"
83 |
84 | ansi-regex@^5.0.1:
85 | version "5.0.1"
86 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
87 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
88 |
89 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
90 | version "4.3.0"
91 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
92 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
93 | dependencies:
94 | color-convert "^2.0.1"
95 |
96 | arch@^2.2.0:
97 | version "2.2.0"
98 | resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
99 | integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
100 |
101 | asn1@~0.2.3:
102 | version "0.2.6"
103 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
104 | integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
105 | dependencies:
106 | safer-buffer "~2.1.0"
107 |
108 | assert-plus@1.0.0, assert-plus@^1.0.0:
109 | version "1.0.0"
110 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
111 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
112 |
113 | astral-regex@^2.0.0:
114 | version "2.0.0"
115 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
116 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
117 |
118 | async@^3.2.0:
119 | version "3.2.2"
120 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd"
121 | integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==
122 |
123 | asynckit@^0.4.0:
124 | version "0.4.0"
125 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
126 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
127 |
128 | at-least-node@^1.0.0:
129 | version "1.0.0"
130 | resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
131 | integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
132 |
133 | aws-sign2@~0.7.0:
134 | version "0.7.0"
135 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
136 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
137 |
138 | aws4@^1.8.0:
139 | version "1.11.0"
140 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
141 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
142 |
143 | axios@^1.0.0:
144 | version "1.0.0"
145 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.0.0.tgz#16ded6096c1d37650db9f6a8d48a2f7c1bb58622"
146 | integrity sha512-SsHsGFN1qNPFT5QhSoSD37SHDfGyLSW5AESmyLk2JeCMHv5g0I9g0Hz/zQHx2KNe0jGXh2q2hAm7OdkXm360CA==
147 | dependencies:
148 | follow-redirects "^1.15.0"
149 | form-data "^4.0.0"
150 | proxy-from-env "^1.1.0"
151 |
152 | balanced-match@^1.0.0:
153 | version "1.0.2"
154 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
155 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
156 |
157 | base64-js@^1.3.1:
158 | version "1.5.1"
159 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
160 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
161 |
162 | bcrypt-pbkdf@^1.0.0:
163 | version "1.0.2"
164 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
165 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
166 | dependencies:
167 | tweetnacl "^0.14.3"
168 |
169 | blob-util@^2.0.2:
170 | version "2.0.2"
171 | resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb"
172 | integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==
173 |
174 | bluebird@^3.7.2:
175 | version "3.7.2"
176 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
177 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
178 |
179 | brace-expansion@^1.1.7:
180 | version "1.1.11"
181 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
182 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
183 | dependencies:
184 | balanced-match "^1.0.0"
185 | concat-map "0.0.1"
186 |
187 | buffer-crc32@~0.2.3:
188 | version "0.2.13"
189 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
190 | integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
191 |
192 | buffer@^5.6.0:
193 | version "5.7.1"
194 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
195 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
196 | dependencies:
197 | base64-js "^1.3.1"
198 | ieee754 "^1.1.13"
199 |
200 | cachedir@^2.3.0:
201 | version "2.3.0"
202 | resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"
203 | integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==
204 |
205 | caseless@~0.12.0:
206 | version "0.12.0"
207 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
208 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
209 |
210 | chalk@^4.1.0:
211 | version "4.1.2"
212 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
213 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
214 | dependencies:
215 | ansi-styles "^4.1.0"
216 | supports-color "^7.1.0"
217 |
218 | check-more-types@^2.24.0:
219 | version "2.24.0"
220 | resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
221 | integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=
222 |
223 | ci-info@^3.2.0:
224 | version "3.3.0"
225 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2"
226 | integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==
227 |
228 | clean-stack@^2.0.0:
229 | version "2.2.0"
230 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
231 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
232 |
233 | cli-cursor@^3.1.0:
234 | version "3.1.0"
235 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
236 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
237 | dependencies:
238 | restore-cursor "^3.1.0"
239 |
240 | cli-table3@~0.6.1:
241 | version "0.6.1"
242 | resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.1.tgz#36ce9b7af4847f288d3cdd081fbd09bf7bd237b8"
243 | integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==
244 | dependencies:
245 | string-width "^4.2.0"
246 | optionalDependencies:
247 | colors "1.4.0"
248 |
249 | cli-truncate@^2.1.0:
250 | version "2.1.0"
251 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
252 | integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
253 | dependencies:
254 | slice-ansi "^3.0.0"
255 | string-width "^4.2.0"
256 |
257 | color-convert@^2.0.1:
258 | version "2.0.1"
259 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
260 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
261 | dependencies:
262 | color-name "~1.1.4"
263 |
264 | color-name@~1.1.4:
265 | version "1.1.4"
266 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
267 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
268 |
269 | colorette@^2.0.16:
270 | version "2.0.16"
271 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
272 | integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
273 |
274 | colors@1.4.0:
275 | version "1.4.0"
276 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
277 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
278 |
279 | combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
280 | version "1.0.8"
281 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
282 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
283 | dependencies:
284 | delayed-stream "~1.0.0"
285 |
286 | commander@^5.1.0:
287 | version "5.1.0"
288 | resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
289 | integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
290 |
291 | common-tags@^1.8.0:
292 | version "1.8.2"
293 | resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
294 | integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==
295 |
296 | concat-map@0.0.1:
297 | version "0.0.1"
298 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
299 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
300 |
301 | core-util-is@1.0.2:
302 | version "1.0.2"
303 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
304 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
305 |
306 | cross-spawn@^7.0.0:
307 | version "7.0.3"
308 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
309 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
310 | dependencies:
311 | path-key "^3.1.0"
312 | shebang-command "^2.0.0"
313 | which "^2.0.1"
314 |
315 | cypress@^10.9.0:
316 | version "10.9.0"
317 | resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.9.0.tgz#273a61a6304766f9d6423e5ac8d4a9a11ed8b485"
318 | integrity sha512-MjIWrRpc+bQM9U4kSSdATZWZ2hUqHGFEQTF7dfeZRa4MnalMtc88FIE49USWP2ZVtfy5WPBcgfBX+YorFqGElA==
319 | dependencies:
320 | "@cypress/request" "^2.88.10"
321 | "@cypress/xvfb" "^1.2.4"
322 | "@types/node" "^14.14.31"
323 | "@types/sinonjs__fake-timers" "8.1.1"
324 | "@types/sizzle" "^2.3.2"
325 | arch "^2.2.0"
326 | blob-util "^2.0.2"
327 | bluebird "^3.7.2"
328 | buffer "^5.6.0"
329 | cachedir "^2.3.0"
330 | chalk "^4.1.0"
331 | check-more-types "^2.24.0"
332 | cli-cursor "^3.1.0"
333 | cli-table3 "~0.6.1"
334 | commander "^5.1.0"
335 | common-tags "^1.8.0"
336 | dayjs "^1.10.4"
337 | debug "^4.3.2"
338 | enquirer "^2.3.6"
339 | eventemitter2 "6.4.7"
340 | execa "4.1.0"
341 | executable "^4.1.1"
342 | extract-zip "2.0.1"
343 | figures "^3.2.0"
344 | fs-extra "^9.1.0"
345 | getos "^3.2.1"
346 | is-ci "^3.0.0"
347 | is-installed-globally "~0.4.0"
348 | lazy-ass "^1.6.0"
349 | listr2 "^3.8.3"
350 | lodash "^4.17.21"
351 | log-symbols "^4.0.0"
352 | minimist "^1.2.6"
353 | ospath "^1.2.2"
354 | pretty-bytes "^5.6.0"
355 | proxy-from-env "1.0.0"
356 | request-progress "^3.0.0"
357 | semver "^7.3.2"
358 | supports-color "^8.1.1"
359 | tmp "~0.2.1"
360 | untildify "^4.0.0"
361 | yauzl "^2.10.0"
362 |
363 | dashdash@^1.12.0:
364 | version "1.14.1"
365 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
366 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
367 | dependencies:
368 | assert-plus "^1.0.0"
369 |
370 | dayjs@^1.10.4:
371 | version "1.10.7"
372 | resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468"
373 | integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==
374 |
375 | dayjs@^1.11.5:
376 | version "1.11.5"
377 | resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93"
378 | integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==
379 |
380 | debug@^3.1.0:
381 | version "3.2.7"
382 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
383 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
384 | dependencies:
385 | ms "^2.1.1"
386 |
387 | debug@^4.1.1, debug@^4.3.2:
388 | version "4.3.3"
389 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
390 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
391 | dependencies:
392 | ms "2.1.2"
393 |
394 | delayed-stream@~1.0.0:
395 | version "1.0.0"
396 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
397 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
398 |
399 | ecc-jsbn@~0.1.1:
400 | version "0.1.2"
401 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
402 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
403 | dependencies:
404 | jsbn "~0.1.0"
405 | safer-buffer "^2.1.0"
406 |
407 | emoji-regex@^8.0.0:
408 | version "8.0.0"
409 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
410 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
411 |
412 | end-of-stream@^1.1.0:
413 | version "1.4.4"
414 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
415 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
416 | dependencies:
417 | once "^1.4.0"
418 |
419 | enquirer@^2.3.6:
420 | version "2.3.6"
421 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
422 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
423 | dependencies:
424 | ansi-colors "^4.1.1"
425 |
426 | escape-string-regexp@^1.0.5:
427 | version "1.0.5"
428 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
429 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
430 |
431 | eventemitter2@6.4.7:
432 | version "6.4.7"
433 | resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d"
434 | integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==
435 |
436 | execa@4.1.0:
437 | version "4.1.0"
438 | resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
439 | integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
440 | dependencies:
441 | cross-spawn "^7.0.0"
442 | get-stream "^5.0.0"
443 | human-signals "^1.1.1"
444 | is-stream "^2.0.0"
445 | merge-stream "^2.0.0"
446 | npm-run-path "^4.0.0"
447 | onetime "^5.1.0"
448 | signal-exit "^3.0.2"
449 | strip-final-newline "^2.0.0"
450 |
451 | executable@^4.1.1:
452 | version "4.1.1"
453 | resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c"
454 | integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==
455 | dependencies:
456 | pify "^2.2.0"
457 |
458 | extend@~3.0.2:
459 | version "3.0.2"
460 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
461 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
462 |
463 | extract-zip@2.0.1:
464 | version "2.0.1"
465 | resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
466 | integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
467 | dependencies:
468 | debug "^4.1.1"
469 | get-stream "^5.1.0"
470 | yauzl "^2.10.0"
471 | optionalDependencies:
472 | "@types/yauzl" "^2.9.1"
473 |
474 | extsprintf@1.3.0:
475 | version "1.3.0"
476 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
477 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
478 |
479 | extsprintf@^1.2.0:
480 | version "1.4.1"
481 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
482 | integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
483 |
484 | fd-slicer@~1.1.0:
485 | version "1.1.0"
486 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
487 | integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
488 | dependencies:
489 | pend "~1.2.0"
490 |
491 | figures@^3.2.0:
492 | version "3.2.0"
493 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
494 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
495 | dependencies:
496 | escape-string-regexp "^1.0.5"
497 |
498 | follow-redirects@^1.15.0:
499 | version "1.15.2"
500 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
501 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
502 |
503 | forever-agent@~0.6.1:
504 | version "0.6.1"
505 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
506 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
507 |
508 | form-data@^4.0.0:
509 | version "4.0.0"
510 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
511 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
512 | dependencies:
513 | asynckit "^0.4.0"
514 | combined-stream "^1.0.8"
515 | mime-types "^2.1.12"
516 |
517 | form-data@~2.3.2:
518 | version "2.3.3"
519 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
520 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
521 | dependencies:
522 | asynckit "^0.4.0"
523 | combined-stream "^1.0.6"
524 | mime-types "^2.1.12"
525 |
526 | fs-extra@^9.1.0:
527 | version "9.1.0"
528 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
529 | integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
530 | dependencies:
531 | at-least-node "^1.0.0"
532 | graceful-fs "^4.2.0"
533 | jsonfile "^6.0.1"
534 | universalify "^2.0.0"
535 |
536 | fs.realpath@^1.0.0:
537 | version "1.0.0"
538 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
539 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
540 |
541 | get-stream@^5.0.0, get-stream@^5.1.0:
542 | version "5.2.0"
543 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
544 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
545 | dependencies:
546 | pump "^3.0.0"
547 |
548 | getos@^3.2.1:
549 | version "3.2.1"
550 | resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5"
551 | integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==
552 | dependencies:
553 | async "^3.2.0"
554 |
555 | getpass@^0.1.1:
556 | version "0.1.7"
557 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
558 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
559 | dependencies:
560 | assert-plus "^1.0.0"
561 |
562 | glob@^7.1.3:
563 | version "7.2.0"
564 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
565 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
566 | dependencies:
567 | fs.realpath "^1.0.0"
568 | inflight "^1.0.4"
569 | inherits "2"
570 | minimatch "^3.0.4"
571 | once "^1.3.0"
572 | path-is-absolute "^1.0.0"
573 |
574 | global-dirs@^3.0.0:
575 | version "3.0.0"
576 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686"
577 | integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==
578 | dependencies:
579 | ini "2.0.0"
580 |
581 | graceful-fs@^4.1.6, graceful-fs@^4.2.0:
582 | version "4.2.9"
583 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
584 | integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
585 |
586 | has-flag@^4.0.0:
587 | version "4.0.0"
588 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
589 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
590 |
591 | http-signature@~1.3.6:
592 | version "1.3.6"
593 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9"
594 | integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==
595 | dependencies:
596 | assert-plus "^1.0.0"
597 | jsprim "^2.0.2"
598 | sshpk "^1.14.1"
599 |
600 | human-signals@^1.1.1:
601 | version "1.1.1"
602 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
603 | integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
604 |
605 | ieee754@^1.1.13:
606 | version "1.2.1"
607 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
608 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
609 |
610 | indent-string@^4.0.0:
611 | version "4.0.0"
612 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
613 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
614 |
615 | inflight@^1.0.4:
616 | version "1.0.6"
617 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
618 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
619 | dependencies:
620 | once "^1.3.0"
621 | wrappy "1"
622 |
623 | inherits@2:
624 | version "2.0.4"
625 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
626 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
627 |
628 | ini@2.0.0:
629 | version "2.0.0"
630 | resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
631 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
632 |
633 | is-ci@^3.0.0:
634 | version "3.0.1"
635 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
636 | integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
637 | dependencies:
638 | ci-info "^3.2.0"
639 |
640 | is-fullwidth-code-point@^3.0.0:
641 | version "3.0.0"
642 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
643 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
644 |
645 | is-installed-globally@~0.4.0:
646 | version "0.4.0"
647 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
648 | integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
649 | dependencies:
650 | global-dirs "^3.0.0"
651 | is-path-inside "^3.0.2"
652 |
653 | is-path-inside@^3.0.2:
654 | version "3.0.3"
655 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
656 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
657 |
658 | is-stream@^2.0.0:
659 | version "2.0.1"
660 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
661 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
662 |
663 | is-typedarray@~1.0.0:
664 | version "1.0.0"
665 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
666 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
667 |
668 | is-unicode-supported@^0.1.0:
669 | version "0.1.0"
670 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
671 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
672 |
673 | isexe@^2.0.0:
674 | version "2.0.0"
675 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
676 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
677 |
678 | isstream@~0.1.2:
679 | version "0.1.2"
680 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
681 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
682 |
683 | jsbn@~0.1.0:
684 | version "0.1.1"
685 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
686 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
687 |
688 | json-schema@0.4.0:
689 | version "0.4.0"
690 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
691 | integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
692 |
693 | json-stringify-safe@~5.0.1:
694 | version "5.0.1"
695 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
696 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
697 |
698 | jsonfile@^6.0.1:
699 | version "6.1.0"
700 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
701 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
702 | dependencies:
703 | universalify "^2.0.0"
704 | optionalDependencies:
705 | graceful-fs "^4.1.6"
706 |
707 | jsprim@^2.0.2:
708 | version "2.0.2"
709 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d"
710 | integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==
711 | dependencies:
712 | assert-plus "1.0.0"
713 | extsprintf "1.3.0"
714 | json-schema "0.4.0"
715 | verror "1.10.0"
716 |
717 | lazy-ass@^1.6.0:
718 | version "1.6.0"
719 | resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
720 | integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM=
721 |
722 | listr2@^3.8.3:
723 | version "3.14.0"
724 | resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e"
725 | integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==
726 | dependencies:
727 | cli-truncate "^2.1.0"
728 | colorette "^2.0.16"
729 | log-update "^4.0.0"
730 | p-map "^4.0.0"
731 | rfdc "^1.3.0"
732 | rxjs "^7.5.1"
733 | through "^2.3.8"
734 | wrap-ansi "^7.0.0"
735 |
736 | lodash.once@^4.1.1:
737 | version "4.1.1"
738 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
739 | integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
740 |
741 | lodash@^4.17.21:
742 | version "4.17.21"
743 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
744 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
745 |
746 | log-symbols@^4.0.0:
747 | version "4.1.0"
748 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
749 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
750 | dependencies:
751 | chalk "^4.1.0"
752 | is-unicode-supported "^0.1.0"
753 |
754 | log-update@^4.0.0:
755 | version "4.0.0"
756 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
757 | integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
758 | dependencies:
759 | ansi-escapes "^4.3.0"
760 | cli-cursor "^3.1.0"
761 | slice-ansi "^4.0.0"
762 | wrap-ansi "^6.2.0"
763 |
764 | lru-cache@^6.0.0:
765 | version "6.0.0"
766 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
767 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
768 | dependencies:
769 | yallist "^4.0.0"
770 |
771 | merge-stream@^2.0.0:
772 | version "2.0.0"
773 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
774 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
775 |
776 | mime-db@1.51.0:
777 | version "1.51.0"
778 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
779 | integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
780 |
781 | mime-types@^2.1.12, mime-types@~2.1.19:
782 | version "2.1.34"
783 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
784 | integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
785 | dependencies:
786 | mime-db "1.51.0"
787 |
788 | mimic-fn@^2.1.0:
789 | version "2.1.0"
790 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
791 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
792 |
793 | minimatch@^3.0.4:
794 | version "3.0.4"
795 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
796 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
797 | dependencies:
798 | brace-expansion "^1.1.7"
799 |
800 | minimist@^1.2.6:
801 | version "1.2.6"
802 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
803 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
804 |
805 | ms@2.1.2:
806 | version "2.1.2"
807 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
808 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
809 |
810 | ms@^2.1.1:
811 | version "2.1.3"
812 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
813 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
814 |
815 | npm-run-path@^4.0.0:
816 | version "4.0.1"
817 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
818 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
819 | dependencies:
820 | path-key "^3.0.0"
821 |
822 | once@^1.3.0, once@^1.3.1, once@^1.4.0:
823 | version "1.4.0"
824 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
825 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
826 | dependencies:
827 | wrappy "1"
828 |
829 | onetime@^5.1.0:
830 | version "5.1.2"
831 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
832 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
833 | dependencies:
834 | mimic-fn "^2.1.0"
835 |
836 | ospath@^1.2.2:
837 | version "1.2.2"
838 | resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b"
839 | integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=
840 |
841 | p-map@^4.0.0:
842 | version "4.0.0"
843 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
844 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
845 | dependencies:
846 | aggregate-error "^3.0.0"
847 |
848 | path-is-absolute@^1.0.0:
849 | version "1.0.1"
850 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
851 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
852 |
853 | path-key@^3.0.0, path-key@^3.1.0:
854 | version "3.1.1"
855 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
856 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
857 |
858 | pend@~1.2.0:
859 | version "1.2.0"
860 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
861 | integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
862 |
863 | performance-now@^2.1.0:
864 | version "2.1.0"
865 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
866 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
867 |
868 | pify@^2.2.0:
869 | version "2.3.0"
870 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
871 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
872 |
873 | pretty-bytes@^5.6.0:
874 | version "5.6.0"
875 | resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
876 | integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
877 |
878 | proxy-from-env@1.0.0:
879 | version "1.0.0"
880 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
881 | integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=
882 |
883 | proxy-from-env@^1.1.0:
884 | version "1.1.0"
885 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
886 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
887 |
888 | psl@^1.1.28:
889 | version "1.8.0"
890 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
891 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
892 |
893 | pump@^3.0.0:
894 | version "3.0.0"
895 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
896 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
897 | dependencies:
898 | end-of-stream "^1.1.0"
899 | once "^1.3.1"
900 |
901 | punycode@^2.1.1:
902 | version "2.1.1"
903 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
904 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
905 |
906 | qs@~6.5.2:
907 | version "6.5.2"
908 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
909 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
910 |
911 | request-progress@^3.0.0:
912 | version "3.0.0"
913 | resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe"
914 | integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=
915 | dependencies:
916 | throttleit "^1.0.0"
917 |
918 | restore-cursor@^3.1.0:
919 | version "3.1.0"
920 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
921 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
922 | dependencies:
923 | onetime "^5.1.0"
924 | signal-exit "^3.0.2"
925 |
926 | rfdc@^1.3.0:
927 | version "1.3.0"
928 | resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
929 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
930 |
931 | rimraf@^3.0.0:
932 | version "3.0.2"
933 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
934 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
935 | dependencies:
936 | glob "^7.1.3"
937 |
938 | rxjs@^7.5.1:
939 | version "7.5.1"
940 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157"
941 | integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==
942 | dependencies:
943 | tslib "^2.1.0"
944 |
945 | safe-buffer@^5.0.1, safe-buffer@^5.1.2:
946 | version "5.2.1"
947 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
948 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
949 |
950 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
951 | version "2.1.2"
952 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
953 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
954 |
955 | semver@^7.3.2:
956 | version "7.3.5"
957 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
958 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
959 | dependencies:
960 | lru-cache "^6.0.0"
961 |
962 | shebang-command@^2.0.0:
963 | version "2.0.0"
964 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
965 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
966 | dependencies:
967 | shebang-regex "^3.0.0"
968 |
969 | shebang-regex@^3.0.0:
970 | version "3.0.0"
971 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
972 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
973 |
974 | signal-exit@^3.0.2:
975 | version "3.0.6"
976 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
977 | integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
978 |
979 | slice-ansi@^3.0.0:
980 | version "3.0.0"
981 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
982 | integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
983 | dependencies:
984 | ansi-styles "^4.0.0"
985 | astral-regex "^2.0.0"
986 | is-fullwidth-code-point "^3.0.0"
987 |
988 | slice-ansi@^4.0.0:
989 | version "4.0.0"
990 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
991 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
992 | dependencies:
993 | ansi-styles "^4.0.0"
994 | astral-regex "^2.0.0"
995 | is-fullwidth-code-point "^3.0.0"
996 |
997 | sshpk@^1.14.1:
998 | version "1.16.1"
999 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
1000 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
1001 | dependencies:
1002 | asn1 "~0.2.3"
1003 | assert-plus "^1.0.0"
1004 | bcrypt-pbkdf "^1.0.0"
1005 | dashdash "^1.12.0"
1006 | ecc-jsbn "~0.1.1"
1007 | getpass "^0.1.1"
1008 | jsbn "~0.1.0"
1009 | safer-buffer "^2.0.2"
1010 | tweetnacl "~0.14.0"
1011 |
1012 | string-width@^4.1.0, string-width@^4.2.0:
1013 | version "4.2.3"
1014 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1015 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1016 | dependencies:
1017 | emoji-regex "^8.0.0"
1018 | is-fullwidth-code-point "^3.0.0"
1019 | strip-ansi "^6.0.1"
1020 |
1021 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1022 | version "6.0.1"
1023 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1024 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1025 | dependencies:
1026 | ansi-regex "^5.0.1"
1027 |
1028 | strip-final-newline@^2.0.0:
1029 | version "2.0.0"
1030 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
1031 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
1032 |
1033 | supports-color@^7.1.0:
1034 | version "7.2.0"
1035 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1036 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1037 | dependencies:
1038 | has-flag "^4.0.0"
1039 |
1040 | supports-color@^8.1.1:
1041 | version "8.1.1"
1042 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
1043 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
1044 | dependencies:
1045 | has-flag "^4.0.0"
1046 |
1047 | throttleit@^1.0.0:
1048 | version "1.0.0"
1049 | resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
1050 | integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=
1051 |
1052 | through@^2.3.8:
1053 | version "2.3.8"
1054 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1055 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
1056 |
1057 | tmp@~0.2.1:
1058 | version "0.2.1"
1059 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
1060 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
1061 | dependencies:
1062 | rimraf "^3.0.0"
1063 |
1064 | tough-cookie@~2.5.0:
1065 | version "2.5.0"
1066 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
1067 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
1068 | dependencies:
1069 | psl "^1.1.28"
1070 | punycode "^2.1.1"
1071 |
1072 | tslib@^2.1.0:
1073 | version "2.3.1"
1074 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
1075 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
1076 |
1077 | tunnel-agent@^0.6.0:
1078 | version "0.6.0"
1079 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
1080 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
1081 | dependencies:
1082 | safe-buffer "^5.0.1"
1083 |
1084 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
1085 | version "0.14.5"
1086 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
1087 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
1088 |
1089 | type-fest@^0.21.3:
1090 | version "0.21.3"
1091 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
1092 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
1093 |
1094 | universalify@^2.0.0:
1095 | version "2.0.0"
1096 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
1097 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
1098 |
1099 | untildify@^4.0.0:
1100 | version "4.0.0"
1101 | resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
1102 | integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
1103 |
1104 | uuid@^8.3.2:
1105 | version "8.3.2"
1106 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
1107 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
1108 |
1109 | verror@1.10.0:
1110 | version "1.10.0"
1111 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
1112 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
1113 | dependencies:
1114 | assert-plus "^1.0.0"
1115 | core-util-is "1.0.2"
1116 | extsprintf "^1.2.0"
1117 |
1118 | which@^2.0.1:
1119 | version "2.0.2"
1120 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1121 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1122 | dependencies:
1123 | isexe "^2.0.0"
1124 |
1125 | wrap-ansi@^6.2.0:
1126 | version "6.2.0"
1127 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
1128 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
1129 | dependencies:
1130 | ansi-styles "^4.0.0"
1131 | string-width "^4.1.0"
1132 | strip-ansi "^6.0.0"
1133 |
1134 | wrap-ansi@^7.0.0:
1135 | version "7.0.0"
1136 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1137 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1138 | dependencies:
1139 | ansi-styles "^4.0.0"
1140 | string-width "^4.1.0"
1141 | strip-ansi "^6.0.0"
1142 |
1143 | wrappy@1:
1144 | version "1.0.2"
1145 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1146 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1147 |
1148 | yallist@^4.0.0:
1149 | version "4.0.0"
1150 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
1151 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
1152 |
1153 | yauzl@^2.10.0:
1154 | version "2.10.0"
1155 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
1156 | integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
1157 | dependencies:
1158 | buffer-crc32 "~0.2.3"
1159 | fd-slicer "~1.1.0"
1160 |
--------------------------------------------------------------------------------
/cypress/js/caseTypes.js:
--------------------------------------------------------------------------------
1 | module.exports = [
2 | { name: '감도', value: 'cr' },
3 | { name: '감모', value: 'cr' },
4 | { name: '감오', value: 'cr' },
5 | { name: '감초', value: 'cr' },
6 | { name: '그', value: 'hg' },
7 | { name: '누', value: 'hs' },
8 | { name: '다', value: 'cv' },
9 | { name: '도', value: 'cr' },
10 | { name: '동도', value: 'cr' },
11 | { name: '동어', value: 'gb' },
12 | { name: '동오', value: 'cr' },
13 | { name: '동초', value: 'cr' },
14 | { name: '동터', value: 'gb' },
15 | { name: '두', value: 'hs' },
16 | { name: '마', value: 'hg' },
17 | { name: '머', value: 'cv' },
18 | { name: '모', value: 'cr' },
19 | { name: '무', value: 'hg' },
20 | { name: '므', value: 'ks' },
21 | { name: '바', value: 'hg' },
22 | { name: '보도', value: 'cr' },
23 | { name: '보모', value: 'cr' },
24 | { name: '보오', value: 'cr' },
25 | { name: '보초', value: 'cr' },
26 | { name: '부', value: 'hg' },
27 | { name: '비단', value: 'et' },
28 | { name: '비합', value: 'et' },
29 | { name: '사', value: 'hg' },
30 | { name: '성로', value: 'gb' },
31 | { name: '성모', value: 'gb' },
32 | { name: '성초', value: 'gb' },
33 | { name: '수', value: 'hs' },
34 | { name: '수흐', value: 'hg' },
35 | { name: '스', value: 'hg' },
36 | { name: '아', value: 'et' },
37 | { name: '어', value: 'gb' },
38 | { name: '오', value: 'cr' },
39 | { name: '으', value: 'hg' },
40 | { name: '인', value: 'et' },
41 | { name: '인라', value: 'hg' },
42 | { name: '인마', value: 'hg' },
43 | { name: '인카', value: 'et' },
44 | { name: '재감도', value: 'cr' },
45 | { name: '재고약', value: 'cr' },
46 | { name: '재그', value: 'hg' },
47 | { name: '재누', value: 'hs' },
48 | { name: '재다', value: 'cv' },
49 | { name: '재도', value: 'cr' },
50 | { name: '재동어', value: 'gb' },
51 | { name: '재두', value: 'hs' },
52 | { name: '재마', value: 'hg' },
53 | { name: '재무', value: 'hg' },
54 | { name: '재므', value: 'ks' },
55 | { name: '재부', value: 'hg' },
56 | { name: '재수', value: 'hs' },
57 | { name: '재스', value: 'hg' },
58 | { name: '재아', value: 'et' },
59 | { name: '재으', value: 'hg' },
60 | { name: '재카기', value: 'et' },
61 | { name: '재카담', value: 'et' },
62 | { name: '재카경', value: 'ka' },
63 | { name: '재후', value: 'pt' },
64 | { name: '전도', value: 'cr' },
65 | { name: '전모', value: 'cr' },
66 | { name: '전오', value: 'cr' },
67 | { name: '전초', value: 'cr' },
68 | { name: '정스', value: 'hg' },
69 | { name: '주', value: 'et' },
70 | { name: '준재므', value: 'ks' },
71 | { name: '준재스', value: 'hg' },
72 | { name: '즈기', value: 'ka' },
73 | { name: '즈단', value: 'ka' },
74 | { name: '즈합', value: 'ka' },
75 | { name: '책', value: 'et' },
76 | { name: '초', value: 'cr' },
77 | { name: '초기', value: 'cr' },
78 | { name: '초보', value: 'cr' },
79 | { name: '초사', value: 'cr' },
80 | { name: '초적', value: 'cr' },
81 | { name: '초치', value: 'cr' },
82 | { name: '추', value: 'hs' },
83 | { name: '치도', value: 'cr' },
84 | { name: '치모', value: 'cr' },
85 | { name: '치오', value: 'cr' },
86 | { name: '치초', value: 'cr' },
87 | { name: '카경', value: 'ka' },
88 | { name: '카구', value: 'ka' },
89 | { name: '카기', value: 'ka' },
90 | { name: '카기전', value: 'ka' },
91 | { name: '카담', value: 'ka' },
92 | { name: '카명', value: 'ka' },
93 | { name: '카불', value: 'ka' },
94 | { name: '카소', value: 'ka' },
95 | { name: '카열', value: 'et' },
96 | { name: '카임', value: 'ka' },
97 | { name: '카정', value: 'ka' },
98 | { name: '카합', value: 'ka' },
99 | { name: '카확', value: 'ka' },
100 | { name: '코', value: 'cr' },
101 | { name: '터', value: 'gb' },
102 | { name: '트', value: 'sb' },
103 | { name: '후', value: 'pt' },
104 | { name: '흐', value: 'hg' },
105 | { name: '히', value: 'hg' },
106 | { name: '다', value: 'cv' },
107 | { name: '재다', value: 'cv' },
108 | { name: '머', value: 'cv' },
109 | { name: '두', value: 'hs' },
110 | { name: '재두', value: 'hs' },
111 | { name: '누', value: 'hs' },
112 | { name: '재누', value: 'hs' },
113 | { name: '수', value: 'hs' },
114 | { name: '재수', value: 'hs' },
115 | { name: '추', value: 'hs' },
116 | { name: '도', value: 'cr' },
117 | { name: '감도', value: 'cr' },
118 | { name: '동도', value: 'cr' },
119 | { name: '보도', value: 'cr' },
120 | { name: '보모', value: 'cr' },
121 | { name: '보오', value: 'cr' },
122 | { name: '보초', value: 'cr' },
123 | { name: '전도', value: 'cr' },
124 | { name: '전모', value: 'cr' },
125 | { name: '전오', value: 'cr' },
126 | { name: '전초', value: 'cr' },
127 | { name: '재도', value: 'cr' },
128 | { name: '재감도', value: 'cr' },
129 | { name: '재고약', value: 'cr' },
130 | { name: '초적', value: 'cr' },
131 | { name: '초보', value: 'cr' },
132 | { name: '초기', value: 'cr' },
133 | { name: '초사', value: 'cr' },
134 | { name: '감초', value: 'cr' },
135 | { name: '모', value: 'cr' },
136 | { name: '감모', value: 'cr' },
137 | { name: '오', value: 'cr' },
138 | { name: '감오', value: 'cr' },
139 | { name: '동오', value: 'cr' },
140 | { name: '초', value: 'cr' },
141 | { name: '동초', value: 'cr' },
142 | { name: '초치', value: 'cr' },
143 | { name: '치도', value: 'cr' },
144 | { name: '치모', value: 'cr' },
145 | { name: '치오', value: 'cr' },
146 | { name: '치초', value: 'cr' },
147 | { name: '코', value: 'cr' },
148 | { name: '므', value: 'ks' },
149 | { name: '재므', value: 'ks' },
150 | { name: '준재므', value: 'ks' },
151 | { name: '마', value: 'hg' },
152 | { name: '무', value: 'hg' },
153 | { name: '스', value: 'hg' },
154 | { name: '흐', value: 'hg' },
155 | { name: '히', value: 'hg' },
156 | { name: '수흐', value: 'hg' },
157 | { name: '재마', value: 'hg' },
158 | { name: '재무', value: 'hg' },
159 | { name: '재스', value: 'hg' },
160 | { name: '정스', value: 'hg' },
161 | { name: '준재스', value: 'hg' },
162 | { name: '그', value: 'hg' },
163 | { name: '부', value: 'hg' },
164 | { name: '재부', value: 'hg' },
165 | { name: '으', value: 'hg' },
166 | { name: '재으', value: 'hg' },
167 | { name: '재그', value: 'hg' },
168 | { name: '바', value: 'hg' },
169 | { name: '사', value: 'hg' },
170 | { name: '인라', value: 'hg' },
171 | { name: '인마', value: 'hg' },
172 | { name: '후', value: 'pt' },
173 | { name: '재후', value: 'pt' },
174 | { name: '비단', value: 'et' },
175 | { name: '비합', value: 'et' },
176 | { name: '아', value: 'et' },
177 | { name: '인', value: 'et' },
178 | { name: '인카', value: 'et' },
179 | { name: '재아', value: 'et' },
180 | { name: '재카기', value: 'et' },
181 | { name: '재카담', value: 'et' },
182 | { name: '주', value: 'et' },
183 | { name: '책', value: 'et' },
184 | { name: '카열', value: 'et' },
185 | { name: '즈기', value: 'ka' },
186 | { name: '즈단', value: 'ka' },
187 | { name: '즈합', value: 'ka' },
188 | { name: '카경', value: 'ka' },
189 | { name: '재카경', value: 'ka' },
190 | { name: '카구', value: 'ka' },
191 | { name: '카기', value: 'ka' },
192 | { name: '카담', value: 'ka' },
193 | { name: '카명', value: 'ka' },
194 | { name: '카불', value: 'ka' },
195 | { name: '카소', value: 'ka' },
196 | { name: '카임', value: 'ka' },
197 | { name: '카정', value: 'ka' },
198 | { name: '카합', value: 'ka' },
199 | { name: '카기전', value: 'ka' },
200 | { name: '카확', value: 'ka' },
201 | { name: '트', value: 'sb' },
202 | { name: '어', value: 'gb' },
203 | { name: '동어', value: 'gb' },
204 | { name: '재동어', value: 'gb' },
205 | { name: '터', value: 'gb' },
206 | { name: '동터', value: 'gb' },
207 | { name: '성로', value: 'gb' },
208 | { name: '성모', value: 'gb' },
209 | { name: '성초', value: 'gb' },
210 | { name: '감노', value: 'cr' },
211 | { name: '감로', value: 'cr' },
212 | { name: '감초', value: 'cr' },
213 | { name: '구', value: 'hs' },
214 | { name: '구단', value: 'hs' },
215 | { name: '구합', value: 'hs' },
216 | { name: '나', value: 'cv' },
217 | { name: '너', value: 'ks' },
218 | { name: '노', value: 'cr' },
219 | { name: '누', value: 'hs' },
220 | { name: '동노', value: 'cr' },
221 | { name: '동초', value: 'cr' },
222 | { name: '라', value: 'hg' },
223 | { name: '로', value: 'cr' },
224 | { name: '루', value: 'hg' },
225 | { name: '르', value: 'ks' },
226 | { name: '머', value: 'cv' },
227 | { name: '보', value: 'cr' },
228 | { name: '보노', value: 'cr' },
229 | { name: '보로', value: 'cr' },
230 | { name: '보초', value: 'cr' },
231 | { name: '브', value: 'hg' },
232 | { name: '비단', value: 'et' },
233 | { name: '비합', value: 'et' },
234 | { name: '성로', value: 'gb' },
235 | { name: '성모', value: 'gb' },
236 | { name: '성초', value: 'gb' },
237 | { name: '수', value: 'hs' },
238 | { name: '아', value: 'et' },
239 | { name: '인', value: 'et' },
240 | { name: '인라', value: 'hg' },
241 | { name: '인마', value: 'hg' },
242 | { name: '인카', value: 'et' },
243 | { name: '자', value: 'et' },
244 | { name: '재감노', value: 'cr' },
245 | { name: '재고약', value: 'cr' },
246 | { name: '재구', value: 'hs' },
247 | { name: '재구단', value: 'hs' },
248 | { name: '재구합', value: 'hs' },
249 | { name: '재나', value: 'cv' },
250 | { name: '재너', value: 'ks' },
251 | { name: '재노', value: 'cr' },
252 | { name: '재누', value: 'hs' },
253 | { name: '재라', value: 'hg' },
254 | { name: '재루', value: 'hg' },
255 | { name: '재르', value: 'ks' },
256 | { name: '재머', value: 'cv' },
257 | { name: '재브', value: 'hg' },
258 | { name: '재수', value: 'hs' },
259 | { name: '재아', value: 'et' },
260 | { name: '재카기', value: 'et' },
261 | { name: '재카담', value: 'et' },
262 | { name: '재카경', value: 'ka' },
263 | { name: '전노', value: 'cr' },
264 | { name: '전로', value: 'cr' },
265 | { name: '전초', value: 'cr' },
266 | { name: '정드', value: 'et' },
267 | { name: '정명', value: 'et' },
268 | { name: '정브', value: 'hg' },
269 | { name: '주', value: 'et' },
270 | { name: '준재구', value: 'hs' },
271 | { name: '준재나', value: 'cv' },
272 | { name: '준재누', value: 'hs' },
273 | { name: '준재르', value: 'ks' },
274 | { name: '준재머', value: 'cv' },
275 | { name: '즈기', value: 'ka' },
276 | { name: '즈단', value: 'ka' },
277 | { name: '즈합', value: 'ka' },
278 | { name: '책', value: 'et' },
279 | { name: '초', value: 'cr' },
280 | { name: '초기', value: 'cr' },
281 | { name: '초보', value: 'cr' },
282 | { name: '초사', value: 'cr' },
283 | { name: '초재', value: 'cr' },
284 | { name: '초적', value: 'cr' },
285 | { name: '초치', value: 'cr' },
286 | { name: '치노', value: 'cr' },
287 | { name: '치로', value: 'cr' },
288 | { name: '치초', value: 'cr' },
289 | { name: '카', value: 'ka' },
290 | { name: '카경', value: 'ka' },
291 | { name: '카구', value: 'ka' },
292 | { name: '카기', value: 'ka' },
293 | { name: '카기전', value: 'ka' },
294 | { name: '카담', value: 'ka' },
295 | { name: '카명', value: 'ka' },
296 | { name: '카불', value: 'ka' },
297 | { name: '카소', value: 'ka' },
298 | { name: '카열', value: 'et' },
299 | { name: '카임', value: 'ka' },
300 | { name: '카정', value: 'ka' },
301 | { name: '카합', value: 'ka' },
302 | { name: '카확', value: 'ka' },
303 | { name: '코', value: 'cr' },
304 | { name: '토', value: 'cr' },
305 | { name: '나', value: 'cv' },
306 | { name: '머', value: 'cv' },
307 | { name: '재나', value: 'cv' },
308 | { name: '재머', value: 'cv' },
309 | { name: '준재나', value: 'cv' },
310 | { name: '준재머', value: 'cv' },
311 | { name: '누', value: 'hs' },
312 | { name: '재누', value: 'hs' },
313 | { name: '준재누', value: 'hs' },
314 | { name: '구단', value: 'hs' },
315 | { name: '구합', value: 'hs' },
316 | { name: '재구단', value: 'hs' },
317 | { name: '재구합', value: 'hs' },
318 | { name: '준재구', value: 'hs' },
319 | { name: '구', value: 'hs' },
320 | { name: '재구', value: 'hs' },
321 | { name: '수', value: 'hs' },
322 | { name: '재수', value: 'hs' },
323 | { name: '감노', value: 'cr' },
324 | { name: '감로', value: 'cr' },
325 | { name: '감초', value: 'cr' },
326 | { name: '노', value: 'cr' },
327 | { name: '로', value: 'cr' },
328 | { name: '보', value: 'cr' },
329 | { name: '보노', value: 'cr' },
330 | { name: '보로', value: 'cr' },
331 | { name: '보초', value: 'cr' },
332 | { name: '동노', value: 'cr' },
333 | { name: '전노', value: 'cr' },
334 | { name: '전로', value: 'cr' },
335 | { name: '전초', value: 'cr' },
336 | { name: '재노', value: 'cr' },
337 | { name: '재감노', value: 'cr' },
338 | { name: '재고약', value: 'cr' },
339 | { name: '초', value: 'cr' },
340 | { name: '동초', value: 'cr' },
341 | { name: '초기', value: 'cr' },
342 | { name: '초보', value: 'cr' },
343 | { name: '초사', value: 'cr' },
344 | { name: '초재', value: 'cr' },
345 | { name: '초적', value: 'cr' },
346 | { name: '초치', value: 'cr' },
347 | { name: '치노', value: 'cr' },
348 | { name: '치로', value: 'cr' },
349 | { name: '치초', value: 'cr' },
350 | { name: '코', value: 'cr' },
351 | { name: '토', value: 'cr' },
352 | { name: '르', value: 'ks' },
353 | { name: '너', value: 'ks' },
354 | { name: '재르', value: 'ks' },
355 | { name: '재너', value: 'ks' },
356 | { name: '준재르', value: 'ks' },
357 | { name: '라', value: 'hg' },
358 | { name: '루', value: 'hg' },
359 | { name: '브', value: 'hg' },
360 | { name: '인라', value: 'hg' },
361 | { name: '인마', value: 'hg' },
362 | { name: '정브', value: 'hg' },
363 | { name: '재라', value: 'hg' },
364 | { name: '재루', value: 'hg' },
365 | { name: '재브', value: 'hg' },
366 | { name: '비단', value: 'et' },
367 | { name: '비합', value: 'et' },
368 | { name: '아', value: 'et' },
369 | { name: '인', value: 'et' },
370 | { name: '인카', value: 'et' },
371 | { name: '자', value: 'et' },
372 | { name: '재아', value: 'et' },
373 | { name: '재카기', value: 'et' },
374 | { name: '재카담', value: 'et' },
375 | { name: '정드', value: 'et' },
376 | { name: '정명', value: 'et' },
377 | { name: '주', value: 'et' },
378 | { name: '책', value: 'et' },
379 | { name: '카열', value: 'et' },
380 | { name: '즈기', value: 'ka' },
381 | { name: '즈단', value: 'ka' },
382 | { name: '즈합', value: 'ka' },
383 | { name: '카', value: 'ka' },
384 | { name: '카경', value: 'ka' },
385 | { name: '재카경', value: 'ka' },
386 | { name: '카구', value: 'ka' },
387 | { name: '카기', value: 'ka' },
388 | { name: '카담', value: 'ka' },
389 | { name: '카명', value: 'ka' },
390 | { name: '카불', value: 'ka' },
391 | { name: '카소', value: 'ka' },
392 | { name: '카임', value: 'ka' },
393 | { name: '카정', value: 'ka' },
394 | { name: '카합', value: 'ka' },
395 | { name: '카기전', value: 'ka' },
396 | { name: '카확', value: 'ka' },
397 | { name: '성로', value: 'gb' },
398 | { name: '성모', value: 'gb' },
399 | { name: '성초', value: 'gb' },
400 | { name: '구', value: 'hs' },
401 | { name: '구단', value: 'hs' },
402 | { name: '구합', value: 'hs' },
403 | { name: '아', value: 'et' },
404 | { name: '인', value: 'et' },
405 | { name: '인라', value: 'hg' },
406 | { name: '인마', value: 'hg' },
407 | { name: '인카', value: 'et' },
408 | { name: '자', value: 'et' },
409 | { name: '재구', value: 'hs' },
410 | { name: '재구단', value: 'hs' },
411 | { name: '재구합', value: 'hs' },
412 | { name: '재아', value: 'et' },
413 | { name: '준재구', value: 'hs' },
414 | { name: '카열', value: 'et' },
415 | { name: '구단', value: 'hs' },
416 | { name: '구합', value: 'hs' },
417 | { name: '재구단', value: 'hs' },
418 | { name: '재구합', value: 'hs' },
419 | { name: '준재구', value: 'hs' },
420 | { name: '구', value: 'hs' },
421 | { name: '재구', value: 'hs' },
422 | { name: '인라', value: 'hg' },
423 | { name: '인마', value: 'hg' },
424 | { name: '아', value: 'et' },
425 | { name: '자', value: 'et' },
426 | { name: '재아', value: 'et' },
427 | { name: '카열', value: 'et' },
428 | { name: '인', value: 'et' },
429 | { name: '인카', value: 'et' },
430 | { name: '나', value: 'cv' },
431 | { name: '머', value: 'cv' },
432 | { name: '재나', value: 'cv' },
433 | { name: '재머', value: 'cv' },
434 | { name: '재카경', value: 'ka' },
435 | { name: '재허', value: 'pt' },
436 | { name: '준재나', value: 'cv' },
437 | { name: '준재머', value: 'cv' },
438 | { name: '즈기', value: 'ka' },
439 | { name: '즈단', value: 'ka' },
440 | { name: '즈합', value: 'ka' },
441 | { name: '카', value: 'ka' },
442 | { name: '카경', value: 'ka' },
443 | { name: '카구', value: 'ka' },
444 | { name: '카기', value: 'ka' },
445 | { name: '카기전', value: 'ka' },
446 | { name: '카담', value: 'ka' },
447 | { name: '카명', value: 'ka' },
448 | { name: '카불', value: 'ka' },
449 | { name: '카소', value: 'ka' },
450 | { name: '카열', value: 'et' },
451 | { name: '카임', value: 'ka' },
452 | { name: '카정', value: 'ka' },
453 | { name: '카합', value: 'ka' },
454 | { name: '카허', value: 'et' },
455 | { name: '카확', value: 'ka' },
456 | { name: '허', value: 'pt' },
457 | { name: '허', value: 'pt' },
458 | { name: '재허', value: 'pt' },
459 | { name: '나', value: 'cv' },
460 | { name: '머', value: 'cv' },
461 | { name: '재나', value: 'cv' },
462 | { name: '재머', value: 'cv' },
463 | { name: '준재나', value: 'cv' },
464 | { name: '준재머', value: 'cv' },
465 | { name: '재카경', value: 'ka' },
466 | { name: '즈기', value: 'ka' },
467 | { name: '즈단', value: 'ka' },
468 | { name: '즈합', value: 'ka' },
469 | { name: '카', value: 'ka' },
470 | { name: '카경', value: 'ka' },
471 | { name: '카구', value: 'ka' },
472 | { name: '카기', value: 'ka' },
473 | { name: '카기전', value: 'ka' },
474 | { name: '카담', value: 'ka' },
475 | { name: '카명', value: 'ka' },
476 | { name: '카불', value: 'ka' },
477 | { name: '카소', value: 'ka' },
478 | { name: '카임', value: 'ka' },
479 | { name: '카정', value: 'ka' },
480 | { name: '카합', value: 'ka' },
481 | { name: '카확', value: 'ka' },
482 | { name: '카열', value: 'et' },
483 | { name: '카허', value: 'et' },
484 | { name: '가단', value: 'cv' },
485 | { name: '가합', value: 'cv' },
486 | { name: '가소', value: 'cv' },
487 | { name: '간회단', value: 'whp' },
488 | { name: '간회합', value: 'whp' },
489 | { name: '개기', value: 'whp' },
490 | { name: '개보', value: 'whp' },
491 | { name: '개확', value: 'whp' },
492 | { name: '개회', value: 'whp' },
493 | { name: '국승', value: 'whp' },
494 | { name: '국지', value: 'whp' },
495 | { name: '나', value: 'cv' },
496 | { name: '라', value: 'hg' },
497 | { name: '루', value: 'hg' },
498 | { name: '머', value: 'cv' },
499 | { name: '브', value: 'hg' },
500 | { name: '비단', value: 'et' },
501 | { name: '비합', value: 'et' },
502 | { name: '아', value: 'et' },
503 | { name: '인', value: 'et' },
504 | { name: '인라', value: 'hg' },
505 | { name: '인마', value: 'hg' },
506 | { name: '인카', value: 'et' },
507 | { name: '자', value: 'et' },
508 | { name: '재가단', value: 'cv' },
509 | { name: '재가소', value: 'cv' },
510 | { name: '재가합', value: 'cv' },
511 | { name: '재나', value: 'cv' },
512 | { name: '재라', value: 'hg' },
513 | { name: '재루', value: 'hg' },
514 | { name: '재머', value: 'cv' },
515 | { name: '재브', value: 'hg' },
516 | { name: '재아', value: 'et' },
517 | { name: '재카경', value: 'ka' },
518 | { name: '재카기', value: 'et' },
519 | { name: '재카담', value: 'et' },
520 | { name: '정드', value: 'et' },
521 | { name: '정명', value: 'et' },
522 | { name: '정브', value: 'hg' },
523 | { name: '주', value: 'et' },
524 | { name: '준재가단', value: 'cv' },
525 | { name: '준재가소', value: 'cv' },
526 | { name: '준재가합', value: 'cv' },
527 | { name: '준재나', value: 'cv' },
528 | { name: '준재머', value: 'cv' },
529 | { name: '즈기', value: 'ka' },
530 | { name: '즈단', value: 'ka' },
531 | { name: '즈합', value: 'ka' },
532 | { name: '책', value: 'et' },
533 | { name: '카경', value: 'ka' },
534 | { name: '카구', value: 'ka' },
535 | { name: '카기', value: 'ka' },
536 | { name: '카기전', value: 'ka' },
537 | { name: '카단', value: 'ka' },
538 | { name: '카담', value: 'ka' },
539 | { name: '카명', value: 'ka' },
540 | { name: '카불', value: 'ka' },
541 | { name: '카소', value: 'ka' },
542 | { name: '카열', value: 'et' },
543 | { name: '카임', value: 'ka' },
544 | { name: '카정', value: 'ka' },
545 | { name: '카조', value: 'jj' },
546 | { name: '카합', value: 'ka' },
547 | { name: '카확', value: 'ka' },
548 | { name: '하기', value: 'whp' },
549 | { name: '하단', value: 'whp' },
550 | { name: '하면', value: 'whp' },
551 | { name: '하합', value: 'whp' },
552 | { name: '하확', value: 'whp' },
553 | { name: '호', value: 'et' },
554 | { name: '호기', value: 'et' },
555 | { name: '호명', value: 'et' },
556 | { name: '호파', value: 'et' },
557 | { name: '호협', value: 'et' },
558 | { name: '회기', value: 'whp' },
559 | { name: '회단', value: 'whp' },
560 | { name: '회합', value: 'whp' },
561 | { name: '회확', value: 'whp' },
562 | { name: '개회', value: 'whp' },
563 | { name: '개확', value: 'whp' },
564 | { name: '개보', value: 'whp' },
565 | { name: '개기', value: 'whp' },
566 | { name: '간회단', value: 'whp' },
567 | { name: '회단', value: 'whp' },
568 | { name: '간회합', value: 'whp' },
569 | { name: '회합', value: 'whp' },
570 | { name: '회확', value: 'whp' },
571 | { name: '회기', value: 'whp' },
572 | { name: '하확', value: 'whp' },
573 | { name: '하기', value: 'whp' },
574 | { name: '하단', value: 'whp' },
575 | { name: '하합', value: 'whp' },
576 | { name: '하면', value: 'whp' },
577 | { name: '국승', value: 'whp' },
578 | { name: '국지', value: 'whp' },
579 | { name: '가단', value: 'cv' },
580 | { name: '가합', value: 'cv' },
581 | { name: '가소', value: 'cv' },
582 | { name: '나', value: 'cv' },
583 | { name: '머', value: 'cv' },
584 | { name: '재가단', value: 'cv' },
585 | { name: '재가합', value: 'cv' },
586 | { name: '재가소', value: 'cv' },
587 | { name: '재나', value: 'cv' },
588 | { name: '재머', value: 'cv' },
589 | { name: '준재가단', value: 'cv' },
590 | { name: '준재가합', value: 'cv' },
591 | { name: '준재가소', value: 'cv' },
592 | { name: '준재나', value: 'cv' },
593 | { name: '준재머', value: 'cv' },
594 | { name: '라', value: 'hg' },
595 | { name: '루', value: 'hg' },
596 | { name: '브', value: 'hg' },
597 | { name: '인라', value: 'hg' },
598 | { name: '인마', value: 'hg' },
599 | { name: '재라', value: 'hg' },
600 | { name: '재루', value: 'hg' },
601 | { name: '재브', value: 'hg' },
602 | { name: '정브', value: 'hg' },
603 | { name: '비단', value: 'et' },
604 | { name: '비합', value: 'et' },
605 | { name: '아', value: 'et' },
606 | { name: '인', value: 'et' },
607 | { name: '인카', value: 'et' },
608 | { name: '책', value: 'et' },
609 | { name: '호', value: 'et' },
610 | { name: '호기', value: 'et' },
611 | { name: '호명', value: 'et' },
612 | { name: '호파', value: 'et' },
613 | { name: '호협', value: 'et' },
614 | { name: '자', value: 'et' },
615 | { name: '재아', value: 'et' },
616 | { name: '재카기', value: 'et' },
617 | { name: '재카담', value: 'et' },
618 | { name: '정드', value: 'et' },
619 | { name: '정명', value: 'et' },
620 | { name: '주', value: 'et' },
621 | { name: '카열', value: 'et' },
622 | { name: '즈기', value: 'ka' },
623 | { name: '즈단', value: 'ka' },
624 | { name: '즈합', value: 'ka' },
625 | { name: '카경', value: 'ka' },
626 | { name: '재카경', value: 'ka' },
627 | { name: '카구', value: 'ka' },
628 | { name: '카기', value: 'ka' },
629 | { name: '카단', value: 'ka' },
630 | { name: '카담', value: 'ka' },
631 | { name: '카명', value: 'ka' },
632 | { name: '카불', value: 'ka' },
633 | { name: '카소', value: 'ka' },
634 | { name: '카임', value: 'ka' },
635 | { name: '카정', value: 'ka' },
636 | { name: '카합', value: 'ka' },
637 | { name: '카기전', value: 'ka' },
638 | { name: '카확', value: 'ka' },
639 | { name: '카조', value: 'jj' },
640 | { name: '과', value: 'gw' },
641 | { name: '너', value: 'ks' },
642 | { name: '느단', value: 'ks' },
643 | { name: '느합', value: 'ks' },
644 | { name: '동버', value: 'gb' },
645 | { name: '동버집', value: 'gb' },
646 | { name: '동서', value: 'gb' },
647 | { name: '동저', value: 'gb' },
648 | { name: '동처', value: 'gb' },
649 | { name: '동처집', value: 'gb' },
650 | { name: '동커', value: 'gb' },
651 | { name: '드', value: 'ks' },
652 | { name: '드단', value: 'ks' },
653 | { name: '드합', value: 'ks' },
654 | { name: '라', value: 'hg' },
655 | { name: '루', value: 'hg' },
656 | { name: '르', value: 'ks' },
657 | { name: '버', value: 'gb' },
658 | { name: '버집', value: 'gb' },
659 | { name: '브', value: 'hg' },
660 | { name: '서', value: 'gb' },
661 | { name: '성', value: 'gb' },
662 | { name: '성로', value: 'gb' },
663 | { name: '성모', value: 'gb' },
664 | { name: '성초', value: 'gb' },
665 | { name: '인', value: 'et' },
666 | { name: '인라', value: 'hg' },
667 | { name: '인마', value: 'hg' },
668 | { name: '인카', value: 'et' },
669 | { name: '자', value: 'et' },
670 | { name: '재너', value: 'ks' },
671 | { name: '재느단', value: 'ks' },
672 | { name: '재느합', value: 'ks' },
673 | { name: '재동버', value: 'gb' },
674 | { name: '재동서', value: 'gb' },
675 | { name: '재드', value: 'ks' },
676 | { name: '재드단', value: 'ks' },
677 | { name: '재드합', value: 'ks' },
678 | { name: '재라', value: 'hg' },
679 | { name: '재루', value: 'hg' },
680 | { name: '재르', value: 'ks' },
681 | { name: '재버', value: 'gb' },
682 | { name: '재브', value: 'hg' },
683 | { name: '저', value: 'gb' },
684 | { name: '정드', value: 'et' },
685 | { name: '정명', value: 'et' },
686 | { name: '정브', value: 'hg' },
687 | { name: '준재느단', value: 'ks' },
688 | { name: '준재느합', value: 'ks' },
689 | { name: '준재드단', value: 'ks' },
690 | { name: '준재드합', value: 'ks' },
691 | { name: '준재르', value: 'ks' },
692 | { name: '즈기', value: 'ka' },
693 | { name: '즈단', value: 'ka' },
694 | { name: '즈합', value: 'ka' },
695 | { name: '처', value: 'gb' },
696 | { name: '처집', value: 'gb' },
697 | { name: '카구', value: 'ka' },
698 | { name: '카열', value: 'et' },
699 | { name: '커', value: 'gb' },
700 | { name: '크', value: 'sb' },
701 | { name: '푸', value: 'sb' },
702 | { name: '푸집', value: 'sb' },
703 | { name: '푸초', value: 'sb' },
704 | { name: '호', value: 'et' },
705 | { name: '호기', value: 'et' },
706 | { name: '호명', value: 'et' },
707 | { name: '호파', value: 'et' },
708 | { name: '호협', value: 'et' },
709 | { name: '후감', value: 'ks' },
710 | { name: '후개', value: 'ks' },
711 | { name: '후기', value: 'ks' },
712 | { name: '드단', value: 'ks' },
713 | { name: '드합', value: 'ks' },
714 | { name: '너', value: 'ks' },
715 | { name: '느단', value: 'ks' },
716 | { name: '느합', value: 'ks' },
717 | { name: '르', value: 'ks' },
718 | { name: '재드단', value: 'ks' },
719 | { name: '재드합', value: 'ks' },
720 | { name: '재너', value: 'ks' },
721 | { name: '재느단', value: 'ks' },
722 | { name: '재느합', value: 'ks' },
723 | { name: '재르', value: 'ks' },
724 | { name: '준재드단', value: 'ks' },
725 | { name: '준재드합', value: 'ks' },
726 | { name: '준재느단', value: 'ks' },
727 | { name: '준재느합', value: 'ks' },
728 | { name: '준재르', value: 'ks' },
729 | { name: '드', value: 'ks' },
730 | { name: '재드', value: 'ks' },
731 | { name: '후감', value: 'ks' },
732 | { name: '후개', value: 'ks' },
733 | { name: '후기', value: 'ks' },
734 | { name: '라', value: 'hg' },
735 | { name: '루', value: 'hg' },
736 | { name: '브', value: 'hg' },
737 | { name: '인라', value: 'hg' },
738 | { name: '인마', value: 'hg' },
739 | { name: '정브', value: 'hg' },
740 | { name: '재라', value: 'hg' },
741 | { name: '재루', value: 'hg' },
742 | { name: '재브', value: 'hg' },
743 | { name: '과', value: 'gw' },
744 | { name: '인', value: 'et' },
745 | { name: '인카', value: 'et' },
746 | { name: '자', value: 'et' },
747 | { name: '정드', value: 'et' },
748 | { name: '정명', value: 'et' },
749 | { name: '호', value: 'et' },
750 | { name: '호기', value: 'et' },
751 | { name: '호명', value: 'et' },
752 | { name: '호파', value: 'et' },
753 | { name: '호협', value: 'et' },
754 | { name: '카열', value: 'et' },
755 | { name: '크', value: 'sb' },
756 | { name: '푸', value: 'sb' },
757 | { name: '푸집', value: 'sb' },
758 | { name: '푸초', value: 'sb' },
759 | { name: '버', value: 'gb' },
760 | { name: '재버', value: 'gb' },
761 | { name: '버집', value: 'gb' },
762 | { name: '동버집', value: 'gb' },
763 | { name: '동버', value: 'gb' },
764 | { name: '재동버', value: 'gb' },
765 | { name: '서', value: 'gb' },
766 | { name: '동서', value: 'gb' },
767 | { name: '재동서', value: 'gb' },
768 | { name: '저', value: 'gb' },
769 | { name: '동저', value: 'gb' },
770 | { name: '처', value: 'gb' },
771 | { name: '처집', value: 'gb' },
772 | { name: '동처', value: 'gb' },
773 | { name: '동처집', value: 'gb' },
774 | { name: '커', value: 'gb' },
775 | { name: '동커', value: 'gb' },
776 | { name: '성', value: 'gb' },
777 | { name: '성로', value: 'gb' },
778 | { name: '성모', value: 'gb' },
779 | { name: '성초', value: 'gb' },
780 | { name: '즈기', value: 'ka' },
781 | { name: '즈단', value: 'ka' },
782 | { name: '즈합', value: 'ka' },
783 | { name: '카구', value: 'ka' },
784 | { name: '과', value: 'gw' },
785 | { name: '너', value: 'ks' },
786 | { name: '느단', value: 'ks' },
787 | { name: '느합', value: 'ks' },
788 | { name: '동버', value: 'gb' },
789 | { name: '동버집', value: 'gb' },
790 | { name: '동서', value: 'gb' },
791 | { name: '동저', value: 'gb' },
792 | { name: '동처', value: 'gb' },
793 | { name: '동커', value: 'gb' },
794 | { name: '동처집', value: 'gb' },
795 | { name: '드', value: 'ks' },
796 | { name: '드단', value: 'ks' },
797 | { name: '드합', value: 'ks' },
798 | { name: '버', value: 'gb' },
799 | { name: '버집', value: 'gb' },
800 | { name: '서', value: 'gb' },
801 | { name: '성', value: 'gb' },
802 | { name: '성로', value: 'gb' },
803 | { name: '성모', value: 'gb' },
804 | { name: '성초', value: 'gb' },
805 | { name: '인', value: 'et' },
806 | { name: '인라', value: 'hg' },
807 | { name: '인마', value: 'hg' },
808 | { name: '인카', value: 'et' },
809 | { name: '자', value: 'et' },
810 | { name: '재너', value: 'ks' },
811 | { name: '재느단', value: 'ks' },
812 | { name: '재느합', value: 'ks' },
813 | { name: '재동버', value: 'gb' },
814 | { name: '재동서', value: 'gb' },
815 | { name: '재드', value: 'ks' },
816 | { name: '재드단', value: 'ks' },
817 | { name: '재드합', value: 'ks' },
818 | { name: '재버', value: 'gb' },
819 | { name: '저', value: 'gb' },
820 | { name: '정드', value: 'et' },
821 | { name: '정명', value: 'et' },
822 | { name: '정브', value: 'hg' },
823 | { name: '준재느단', value: 'ks' },
824 | { name: '준재느합', value: 'ks' },
825 | { name: '준재드단', value: 'ks' },
826 | { name: '준재드합', value: 'ks' },
827 | { name: '즈기', value: 'ka' },
828 | { name: '즈단', value: 'ka' },
829 | { name: '즈합', value: 'ka' },
830 | { name: '처', value: 'gb' },
831 | { name: '처집', value: 'gb' },
832 | { name: '카구', value: 'ka' },
833 | { name: '카열', value: 'et' },
834 | { name: '커', value: 'gb' },
835 | { name: '푸', value: 'sb' },
836 | { name: '푸집', value: 'sb' },
837 | { name: '푸초', value: 'sb' },
838 | { name: '호', value: 'et' },
839 | { name: '호기', value: 'et' },
840 | { name: '호명', value: 'et' },
841 | { name: '호파', value: 'et' },
842 | { name: '호협', value: 'et' },
843 | { name: '후감', value: 'ks' },
844 | { name: '후개', value: 'ks' },
845 | { name: '후기', value: 'ks' },
846 | { name: '드단', value: 'ks' },
847 | { name: '드합', value: 'ks' },
848 | { name: '너', value: 'ks' },
849 | { name: '느단', value: 'ks' },
850 | { name: '느합', value: 'ks' },
851 | { name: '재드단', value: 'ks' },
852 | { name: '재드합', value: 'ks' },
853 | { name: '재너', value: 'ks' },
854 | { name: '재느단', value: 'ks' },
855 | { name: '재느합', value: 'ks' },
856 | { name: '준재드단', value: 'ks' },
857 | { name: '준재드합', value: 'ks' },
858 | { name: '준재느단', value: 'ks' },
859 | { name: '준재느합', value: 'ks' },
860 | { name: '드', value: 'ks' },
861 | { name: '재드', value: 'ks' },
862 | { name: '후감', value: 'ks' },
863 | { name: '후개', value: 'ks' },
864 | { name: '후기', value: 'ks' },
865 | { name: '인라', value: 'hg' },
866 | { name: '인마', value: 'hg' },
867 | { name: '정브', value: 'hg' },
868 | { name: '과', value: 'gw' },
869 | { name: '인', value: 'et' },
870 | { name: '자', value: 'et' },
871 | { name: '카열', value: 'et' },
872 | { name: '인카', value: 'et' },
873 | { name: '정드', value: 'et' },
874 | { name: '정명', value: 'et' },
875 | { name: '호', value: 'et' },
876 | { name: '호기', value: 'et' },
877 | { name: '호명', value: 'et' },
878 | { name: '호파', value: 'et' },
879 | { name: '호협', value: 'et' },
880 | { name: '푸', value: 'sb' },
881 | { name: '푸집', value: 'sb' },
882 | { name: '푸초', value: 'sb' },
883 | { name: '버', value: 'gb' },
884 | { name: '재버', value: 'gb' },
885 | { name: '버집', value: 'gb' },
886 | { name: '동버집', value: 'gb' },
887 | { name: '동버', value: 'gb' },
888 | { name: '재동버', value: 'gb' },
889 | { name: '서', value: 'gb' },
890 | { name: '동서', value: 'gb' },
891 | { name: '재동서', value: 'gb' },
892 | { name: '저', value: 'gb' },
893 | { name: '동저', value: 'gb' },
894 | { name: '처', value: 'gb' },
895 | { name: '처집', value: 'gb' },
896 | { name: '동처', value: 'gb' },
897 | { name: '동처집', value: 'gb' },
898 | { name: '커', value: 'gb' },
899 | { name: '동커', value: 'gb' },
900 | { name: '성', value: 'gb' },
901 | { name: '성로', value: 'gb' },
902 | { name: '성모', value: 'gb' },
903 | { name: '성초', value: 'gb' },
904 | { name: '즈기', value: 'ka' },
905 | { name: '즈단', value: 'ka' },
906 | { name: '즈합', value: 'ka' },
907 | { name: '카구', value: 'ka' },
908 | { name: '가단', value: 'cv' },
909 | { name: '가소', value: 'cv' },
910 | { name: '가합', value: 'cv' },
911 | { name: '감고', value: 'cr' },
912 | { name: '감노', value: 'cr' },
913 | { name: '감로', value: 'cr' },
914 | { name: '감초', value: 'cr' },
915 | { name: '고단', value: 'cr' },
916 | { name: '고약', value: 'ym' },
917 | { name: '고약전', value: 'wey' },
918 | { name: '고정', value: 'cr' },
919 | { name: '고합', value: 'cr' },
920 | { name: '과', value: 'gw' },
921 | { name: '나', value: 'cv' },
922 | { name: '노', value: 'cr' },
923 | { name: '동고', value: 'cr' },
924 | { name: '동노', value: 'cr' },
925 | { name: '동서', value: 'gb' },
926 | { name: '동초', value: 'cr' },
927 | { name: '동커', value: 'gb' },
928 | { name: '라', value: 'hg' },
929 | { name: '로', value: 'cr' },
930 | { name: '루', value: 'hg' },
931 | { name: '머', value: 'cv' },
932 | { name: '보', value: 'cr' },
933 | { name: '보고', value: 'cr' },
934 | { name: '보노', value: 'cr' },
935 | { name: '보로', value: 'cr' },
936 | { name: '보초', value: 'cr' },
937 | { name: '브', value: 'hg' },
938 | { name: '비단', value: 'et' },
939 | { name: '비합', value: 'et' },
940 | { name: '서', value: 'gb' },
941 | { name: '성', value: 'gb' },
942 | { name: '성로', value: 'gb' },
943 | { name: '성모', value: 'gb' },
944 | { name: '성초', value: 'gb' },
945 | { name: '인', value: 'et' },
946 | { name: '인라', value: 'hg' },
947 | { name: '인마', value: 'hg' },
948 | { name: '인카', value: 'et' },
949 | { name: '자', value: 'et' },
950 | { name: '재가단', value: 'cv' },
951 | { name: '재가소', value: 'cv' },
952 | { name: '재가합', value: 'cv' },
953 | { name: '재감고', value: 'cr' },
954 | { name: '재감노', value: 'cr' },
955 | { name: '재고단', value: 'cr' },
956 | { name: '재고약', value: 'cr' },
957 | { name: '재고정', value: 'cr' },
958 | { name: '재고합', value: 'cr' },
959 | { name: '재나', value: 'cv' },
960 | { name: '재노', value: 'cr' },
961 | { name: '재동서', value: 'gb' },
962 | { name: '재라', value: 'hg' },
963 | { name: '재루', value: 'hg' },
964 | { name: '재머', value: 'cv' },
965 | { name: '재브', value: 'hg' },
966 | { name: '재카기', value: 'et' },
967 | { name: '재카경', value: 'ka' },
968 | { name: '재카담', value: 'et' },
969 | { name: '저', value: 'gb' },
970 | { name: '전고', value: 'cr' },
971 | { name: '전노', value: 'cr' },
972 | { name: '전로', value: 'cr' },
973 | { name: '전초', value: 'cr' },
974 | { name: '정드', value: 'et' },
975 | { name: '정명', value: 'et' },
976 | { name: '정브', value: 'hg' },
977 | { name: '주', value: 'et' },
978 | { name: '준재가단', value: 'cv' },
979 | { name: '준재가소', value: 'cv' },
980 | { name: '준재가합', value: 'cv' },
981 | { name: '준재나', value: 'cv' },
982 | { name: '준재머', value: 'cv' },
983 | { name: '즈기', value: 'ka' },
984 | { name: '즈단', value: 'ka' },
985 | { name: '즈합', value: 'ka' },
986 | { name: '책', value: 'et' },
987 | { name: '차', value: 'dc' },
988 | { name: '차전', value: 'wdc' },
989 | { name: '초', value: 'cr' },
990 | { name: '초기', value: 'cr' },
991 | { name: '초보', value: 'cr' },
992 | { name: '초사', value: 'cr' },
993 | { name: '초적', value: 'cr' },
994 | { name: '초치', value: 'cr' },
995 | { name: '치고', value: 'cr' },
996 | { name: '치노', value: 'cr' },
997 | { name: '치로', value: 'cr' },
998 | { name: '치초', value: 'cr' },
999 | { name: '카', value: 'ka' },
1000 | { name: '카경', value: 'ka' },
1001 | { name: '카구', value: 'ka' },
1002 | { name: '카공', value: 'go' },
1003 | { name: '카기', value: 'ka' },
1004 | { name: '카기전', value: 'ka' },
1005 | { name: '카단', value: 'ka' },
1006 | { name: '카담', value: 'ka' },
1007 | { name: '카명', value: 'ka' },
1008 | { name: '카불', value: 'ka' },
1009 | { name: '카소', value: 'ka' },
1010 | { name: '카열', value: 'et' },
1011 | { name: '카임', value: 'ka' },
1012 | { name: '카정', value: 'ka' },
1013 | { name: '카조', value: 'jj' },
1014 | { name: '카합', value: 'ka' },
1015 | { name: '카확', value: 'ka' },
1016 | { name: '커', value: 'gb' },
1017 | { name: '코', value: 'cr' },
1018 | { name: '크', value: 'sb' },
1019 | { name: '타기', value: 'gj' },
1020 | { name: '타배', value: 'gj' },
1021 | { name: '타인', value: 'gj' },
1022 | { name: '타채', value: 'gj' },
1023 | { name: '호', value: 'et' },
1024 | { name: '호기', value: 'et' },
1025 | { name: '호명', value: 'et' },
1026 | { name: '호파', value: 'et' },
1027 | { name: '호협', value: 'et' },
1028 | { name: '가단', value: 'cv' },
1029 | { name: '가합', value: 'cv' },
1030 | { name: '가소', value: 'cv' },
1031 | { name: '나', value: 'cv' },
1032 | { name: '머', value: 'cv' },
1033 | { name: '재가단', value: 'cv' },
1034 | { name: '재가합', value: 'cv' },
1035 | { name: '재가소', value: 'cv' },
1036 | { name: '재나', value: 'cv' },
1037 | { name: '재머', value: 'cv' },
1038 | { name: '준재가단', value: 'cv' },
1039 | { name: '준재가합', value: 'cv' },
1040 | { name: '준재가소', value: 'cv' },
1041 | { name: '준재나', value: 'cv' },
1042 | { name: '준재머', value: 'cv' },
1043 | { name: '타기', value: 'gj' },
1044 | { name: '타배', value: 'gj' },
1045 | { name: '타인', value: 'gj' },
1046 | { name: '타채', value: 'gj' },
1047 | { name: '고단', value: 'cr' },
1048 | { name: '고합', value: 'cr' },
1049 | { name: '고정', value: 'cr' },
1050 | { name: '감고', value: 'cr' },
1051 | { name: '동고', value: 'cr' },
1052 | { name: '노', value: 'cr' },
1053 | { name: '감노', value: 'cr' },
1054 | { name: '동노', value: 'cr' },
1055 | { name: '보고', value: 'cr' },
1056 | { name: '보노', value: 'cr' },
1057 | { name: '보로', value: 'cr' },
1058 | { name: '보초', value: 'cr' },
1059 | { name: '전고', value: 'cr' },
1060 | { name: '전노', value: 'cr' },
1061 | { name: '전로', value: 'cr' },
1062 | { name: '전초', value: 'cr' },
1063 | { name: '재고단', value: 'cr' },
1064 | { name: '재고정', value: 'cr' },
1065 | { name: '재고합', value: 'cr' },
1066 | { name: '재감고', value: 'cr' },
1067 | { name: '재고약', value: 'cr' },
1068 | { name: '재노', value: 'cr' },
1069 | { name: '재감노', value: 'cr' },
1070 | { name: '초적', value: 'cr' },
1071 | { name: '초보', value: 'cr' },
1072 | { name: '초기', value: 'cr' },
1073 | { name: '초사', value: 'cr' },
1074 | { name: '감초', value: 'cr' },
1075 | { name: '로', value: 'cr' },
1076 | { name: '감로', value: 'cr' },
1077 | { name: '보', value: 'cr' },
1078 | { name: '코', value: 'cr' },
1079 | { name: '초', value: 'cr' },
1080 | { name: '동초', value: 'cr' },
1081 | { name: '초치', value: 'cr' },
1082 | { name: '치고', value: 'cr' },
1083 | { name: '치노', value: 'cr' },
1084 | { name: '치로', value: 'cr' },
1085 | { name: '치초', value: 'cr' },
1086 | { name: '고약', value: 'ym' },
1087 | { name: '고약전', value: 'wey' },
1088 | { name: '차', value: 'dc' },
1089 | { name: '차전', value: 'wdc' },
1090 | { name: '카공', value: 'go' },
1091 | { name: '라', value: 'hg' },
1092 | { name: '루', value: 'hg' },
1093 | { name: '브', value: 'hg' },
1094 | { name: '인라', value: 'hg' },
1095 | { name: '인마', value: 'hg' },
1096 | { name: '재라', value: 'hg' },
1097 | { name: '재루', value: 'hg' },
1098 | { name: '재브', value: 'hg' },
1099 | { name: '정브', value: 'hg' },
1100 | { name: '과', value: 'gw' },
1101 | { name: '비단', value: 'et' },
1102 | { name: '비합', value: 'et' },
1103 | { name: '인', value: 'et' },
1104 | { name: '인카', value: 'et' },
1105 | { name: '책', value: 'et' },
1106 | { name: '호', value: 'et' },
1107 | { name: '호기', value: 'et' },
1108 | { name: '호명', value: 'et' },
1109 | { name: '호파', value: 'et' },
1110 | { name: '호협', value: 'et' },
1111 | { name: '자', value: 'et' },
1112 | { name: '재카기', value: 'et' },
1113 | { name: '재카담', value: 'et' },
1114 | { name: '정드', value: 'et' },
1115 | { name: '정명', value: 'et' },
1116 | { name: '주', value: 'et' },
1117 | { name: '카열', value: 'et' },
1118 | { name: '카조', value: 'jj' },
1119 | { name: '즈기', value: 'ka' },
1120 | { name: '즈단', value: 'ka' },
1121 | { name: '즈합', value: 'ka' },
1122 | { name: '카', value: 'ka' },
1123 | { name: '카경', value: 'ka' },
1124 | { name: '재카경', value: 'ka' },
1125 | { name: '카구', value: 'ka' },
1126 | { name: '카기', value: 'ka' },
1127 | { name: '카단', value: 'ka' },
1128 | { name: '카담', value: 'ka' },
1129 | { name: '카명', value: 'ka' },
1130 | { name: '카불', value: 'ka' },
1131 | { name: '카소', value: 'ka' },
1132 | { name: '카임', value: 'ka' },
1133 | { name: '카정', value: 'ka' },
1134 | { name: '카합', value: 'ka' },
1135 | { name: '카기전', value: 'ka' },
1136 | { name: '카확', value: 'ka' },
1137 | { name: '크', value: 'sb' },
1138 | { name: '서', value: 'gb' },
1139 | { name: '동서', value: 'gb' },
1140 | { name: '재동서', value: 'gb' },
1141 | { name: '커', value: 'gb' },
1142 | { name: '동커', value: 'gb' },
1143 | { name: '성', value: 'gb' },
1144 | { name: '성로', value: 'gb' },
1145 | { name: '성모', value: 'gb' },
1146 | { name: '성초', value: 'gb' },
1147 | { name: '저', value: 'gb' },
1148 | { name: '가단', value: 'cv' },
1149 | { name: '가소', value: 'cv' },
1150 | { name: '가합', value: 'cv' },
1151 | { name: '간회단', value: 'whp' },
1152 | { name: '간회합', value: 'whp' },
1153 | { name: '감고', value: 'cr' },
1154 | { name: '감노', value: 'cr' },
1155 | { name: '감로', value: 'cr' },
1156 | { name: '감초', value: 'cr' },
1157 | { name: '개기', value: 'whp' },
1158 | { name: '개보', value: 'whp' },
1159 | { name: '개확', value: 'whp' },
1160 | { name: '개회', value: 'whp' },
1161 | { name: '고단', value: 'cr' },
1162 | { name: '고약', value: 'ym' },
1163 | { name: '고약전', value: 'wey' },
1164 | { name: '고정', value: 'cr' },
1165 | { name: '고합', value: 'cr' },
1166 | { name: '과', value: 'gw' },
1167 | { name: '구', value: 'hs' },
1168 | { name: '구단', value: 'hs' },
1169 | { name: '구합', value: 'hs' },
1170 | { name: '국승', value: 'whp' },
1171 | { name: '국지', value: 'whp' },
1172 | { name: '나', value: 'cv' },
1173 | { name: '너', value: 'ks' },
1174 | { name: '노', value: 'cr' },
1175 | { name: '느단', value: 'ks' },
1176 | { name: '느합', value: 'ks' },
1177 | { name: '동고', value: 'cr' },
1178 | { name: '동노', value: 'cr' },
1179 | { name: '동버', value: 'gb' },
1180 | { name: '동버집', value: 'gb' },
1181 | { name: '동서', value: 'gb' },
1182 | { name: '동저', value: 'gb' },
1183 | { name: '동처', value: 'gb' },
1184 | { name: '동처집', value: 'gb' },
1185 | { name: '동초', value: 'cr' },
1186 | { name: '동커', value: 'gb' },
1187 | { name: '드', value: 'ks' },
1188 | { name: '드단', value: 'ks' },
1189 | { name: '드합', value: 'ks' },
1190 | { name: '라', value: 'hg' },
1191 | { name: '로', value: 'cr' },
1192 | { name: '루', value: 'hg' },
1193 | { name: '르', value: 'ks' },
1194 | { name: '머', value: 'cv' },
1195 | { name: '버', value: 'gb' },
1196 | { name: '버집', value: 'gb' },
1197 | { name: '보', value: 'cr' },
1198 | { name: '보고', value: 'cr' },
1199 | { name: '보노', value: 'cr' },
1200 | { name: '보로', value: 'cr' },
1201 | { name: '보초', value: 'cr' },
1202 | { name: '브', value: 'hg' },
1203 | { name: '비단', value: 'et' },
1204 | { name: '비합', value: 'et' },
1205 | { name: '서', value: 'gb' },
1206 | { name: '성', value: 'gb' },
1207 | { name: '성로', value: 'gb' },
1208 | { name: '성모', value: 'gb' },
1209 | { name: '성초', value: 'gb' },
1210 | { name: '아', value: 'et' },
1211 | { name: '인', value: 'et' },
1212 | { name: '인라', value: 'hg' },
1213 | { name: '인마', value: 'hg' },
1214 | { name: '인카', value: 'et' },
1215 | { name: '자', value: 'et' },
1216 | { name: '재가단', value: 'cv' },
1217 | { name: '재가소', value: 'cv' },
1218 | { name: '재가합', value: 'cv' },
1219 | { name: '재감고', value: 'cr' },
1220 | { name: '재감노', value: 'cr' },
1221 | { name: '재고단', value: 'cr' },
1222 | { name: '재고약', value: 'cr' },
1223 | { name: '재고정', value: 'cr' },
1224 | { name: '재고합', value: 'cr' },
1225 | { name: '재구', value: 'hs' },
1226 | { name: '재구단', value: 'hs' },
1227 | { name: '재구합', value: 'hs' },
1228 | { name: '재나', value: 'cv' },
1229 | { name: '재너', value: 'ks' },
1230 | { name: '재노', value: 'cr' },
1231 | { name: '재느단', value: 'ks' },
1232 | { name: '재느합', value: 'ks' },
1233 | { name: '재동버', value: 'gb' },
1234 | { name: '재동서', value: 'gb' },
1235 | { name: '재드', value: 'ks' },
1236 | { name: '재드단', value: 'ks' },
1237 | { name: '재드합', value: 'ks' },
1238 | { name: '재라', value: 'hg' },
1239 | { name: '재루', value: 'hg' },
1240 | { name: '재르', value: 'ks' },
1241 | { name: '재머', value: 'cv' },
1242 | { name: '재버', value: 'gb' },
1243 | { name: '재브', value: 'hg' },
1244 | { name: '재아', value: 'et' },
1245 | { name: '재카기', value: 'et' },
1246 | { name: '재카경', value: 'ka' },
1247 | { name: '재카담', value: 'et' },
1248 | { name: '저', value: 'gb' },
1249 | { name: '전고', value: 'cr' },
1250 | { name: '전노', value: 'cr' },
1251 | { name: '전로', value: 'cr' },
1252 | { name: '전초', value: 'cr' },
1253 | { name: '정드', value: 'et' },
1254 | { name: '정명', value: 'et' },
1255 | { name: '정브', value: 'hg' },
1256 | { name: '주', value: 'et' },
1257 | { name: '준재가단', value: 'cv' },
1258 | { name: '준재가소', value: 'cv' },
1259 | { name: '준재가합', value: 'cv' },
1260 | { name: '준재구', value: 'hs' },
1261 | { name: '준재나', value: 'cv' },
1262 | { name: '준재느단', value: 'ks' },
1263 | { name: '준재느합', value: 'ks' },
1264 | { name: '준재드단', value: 'ks' },
1265 | { name: '준재드합', value: 'ks' },
1266 | { name: '준재르', value: 'ks' },
1267 | { name: '준재머', value: 'cv' },
1268 | { name: '즈기', value: 'ka' },
1269 | { name: '즈단', value: 'ka' },
1270 | { name: '즈합', value: 'ka' },
1271 | { name: '차', value: 'dc' },
1272 | { name: '차전', value: 'wdc' },
1273 | { name: '책', value: 'et' },
1274 | { name: '처', value: 'gb' },
1275 | { name: '처집', value: 'gb' },
1276 | { name: '초', value: 'cr' },
1277 | { name: '초기', value: 'cr' },
1278 | { name: '초보', value: 'cr' },
1279 | { name: '초사', value: 'cr' },
1280 | { name: '초적', value: 'cr' },
1281 | { name: '초치', value: 'cr' },
1282 | { name: '치고', value: 'cr' },
1283 | { name: '치노', value: 'cr' },
1284 | { name: '치로', value: 'cr' },
1285 | { name: '치초', value: 'cr' },
1286 | { name: '카', value: 'ka' },
1287 | { name: '카경', value: 'ka' },
1288 | { name: '카구', value: 'ka' },
1289 | { name: '카공', value: 'go' },
1290 | { name: '카기', value: 'ka' },
1291 | { name: '카기전', value: 'ka' },
1292 | { name: '카단', value: 'ka' },
1293 | { name: '카담', value: 'ka' },
1294 | { name: '카명', value: 'ka' },
1295 | { name: '카불', value: 'ka' },
1296 | { name: '카소', value: 'ka' },
1297 | { name: '카열', value: 'et' },
1298 | { name: '카임', value: 'ka' },
1299 | { name: '카정', value: 'ka' },
1300 | { name: '카조', value: 'jj' },
1301 | { name: '카합', value: 'ka' },
1302 | { name: '카확', value: 'ka' },
1303 | { name: '커', value: 'gb' },
1304 | { name: '코', value: 'cr' },
1305 | { name: '크', value: 'sb' },
1306 | { name: '타기', value: 'gj' },
1307 | { name: '타배', value: 'gj' },
1308 | { name: '타인', value: 'gj' },
1309 | { name: '타채', value: 'gj' },
1310 | { name: '푸', value: 'sb' },
1311 | { name: '푸집', value: 'sb' },
1312 | { name: '푸초', value: 'sb' },
1313 | { name: '하기', value: 'whp' },
1314 | { name: '하단', value: 'whp' },
1315 | { name: '하면', value: 'whp' },
1316 | { name: '하합', value: 'whp' },
1317 | { name: '하확', value: 'whp' },
1318 | { name: '호', value: 'et' },
1319 | { name: '호기', value: 'et' },
1320 | { name: '호명', value: 'et' },
1321 | { name: '호파', value: 'et' },
1322 | { name: '호협', value: 'et' },
1323 | { name: '회기', value: 'whp' },
1324 | { name: '회단', value: 'whp' },
1325 | { name: '회합', value: 'whp' },
1326 | { name: '회확', value: 'whp' },
1327 | { name: '후감', value: 'ks' },
1328 | { name: '후개', value: 'ks' },
1329 | { name: '후기', value: 'ks' },
1330 | { name: '가단', value: 'cv' },
1331 | { name: '가합', value: 'cv' },
1332 | { name: '가소', value: 'cv' },
1333 | { name: '나', value: 'cv' },
1334 | { name: '머', value: 'cv' },
1335 | { name: '재가단', value: 'cv' },
1336 | { name: '재가합', value: 'cv' },
1337 | { name: '재가소', value: 'cv' },
1338 | { name: '재나', value: 'cv' },
1339 | { name: '재머', value: 'cv' },
1340 | { name: '준재가단', value: 'cv' },
1341 | { name: '준재가합', value: 'cv' },
1342 | { name: '준재가소', value: 'cv' },
1343 | { name: '준재나', value: 'cv' },
1344 | { name: '준재머', value: 'cv' },
1345 | { name: '구단', value: 'hs' },
1346 | { name: '구합', value: 'hs' },
1347 | { name: '재구단', value: 'hs' },
1348 | { name: '재구합', value: 'hs' },
1349 | { name: '준재구', value: 'hs' },
1350 | { name: '구', value: 'hs' },
1351 | { name: '재구', value: 'hs' },
1352 | { name: '타기', value: 'gj' },
1353 | { name: '타배', value: 'gj' },
1354 | { name: '타인', value: 'gj' },
1355 | { name: '타채', value: 'gj' },
1356 | { name: '고단', value: 'cr' },
1357 | { name: '고합', value: 'cr' },
1358 | { name: '고정', value: 'cr' },
1359 | { name: '감고', value: 'cr' },
1360 | { name: '동고', value: 'cr' },
1361 | { name: '노', value: 'cr' },
1362 | { name: '감노', value: 'cr' },
1363 | { name: '동노', value: 'cr' },
1364 | { name: '보고', value: 'cr' },
1365 | { name: '보노', value: 'cr' },
1366 | { name: '보로', value: 'cr' },
1367 | { name: '보초', value: 'cr' },
1368 | { name: '전고', value: 'cr' },
1369 | { name: '전노', value: 'cr' },
1370 | { name: '전로', value: 'cr' },
1371 | { name: '전초', value: 'cr' },
1372 | { name: '재고단', value: 'cr' },
1373 | { name: '재고약', value: 'cr' },
1374 | { name: '재고정', value: 'cr' },
1375 | { name: '재고합', value: 'cr' },
1376 | { name: '재감고', value: 'cr' },
1377 | { name: '재노', value: 'cr' },
1378 | { name: '재감노', value: 'cr' },
1379 | { name: '초적', value: 'cr' },
1380 | { name: '초보', value: 'cr' },
1381 | { name: '초기', value: 'cr' },
1382 | { name: '초사', value: 'cr' },
1383 | { name: '초치', value: 'cr' },
1384 | { name: '치고', value: 'cr' },
1385 | { name: '치노', value: 'cr' },
1386 | { name: '치로', value: 'cr' },
1387 | { name: '치초', value: 'cr' },
1388 | { name: '감초', value: 'cr' },
1389 | { name: '로', value: 'cr' },
1390 | { name: '감로', value: 'cr' },
1391 | { name: '보', value: 'cr' },
1392 | { name: '코', value: 'cr' },
1393 | { name: '초', value: 'cr' },
1394 | { name: '동초', value: 'cr' },
1395 | { name: '고약', value: 'ym' },
1396 | { name: '고약전', value: 'wey' },
1397 | { name: '드단', value: 'ks' },
1398 | { name: '드합', value: 'ks' },
1399 | { name: '너', value: 'ks' },
1400 | { name: '느단', value: 'ks' },
1401 | { name: '느합', value: 'ks' },
1402 | { name: '르', value: 'ks' },
1403 | { name: '재드단', value: 'ks' },
1404 | { name: '재드합', value: 'ks' },
1405 | { name: '재너', value: 'ks' },
1406 | { name: '재느단', value: 'ks' },
1407 | { name: '재느합', value: 'ks' },
1408 | { name: '재르', value: 'ks' },
1409 | { name: '준재드단', value: 'ks' },
1410 | { name: '준재드합', value: 'ks' },
1411 | { name: '준재느단', value: 'ks' },
1412 | { name: '준재느합', value: 'ks' },
1413 | { name: '준재르', value: 'ks' },
1414 | { name: '드', value: 'ks' },
1415 | { name: '재드', value: 'ks' },
1416 | { name: '후감', value: 'ks' },
1417 | { name: '후개', value: 'ks' },
1418 | { name: '후기', value: 'ks' },
1419 | { name: '차', value: 'dc' },
1420 | { name: '차전', value: 'wdc' },
1421 | { name: '카공', value: 'go' },
1422 | { name: '라', value: 'hg' },
1423 | { name: '루', value: 'hg' },
1424 | { name: '브', value: 'hg' },
1425 | { name: '인라', value: 'hg' },
1426 | { name: '인마', value: 'hg' },
1427 | { name: '재라', value: 'hg' },
1428 | { name: '재루', value: 'hg' },
1429 | { name: '재브', value: 'hg' },
1430 | { name: '정브', value: 'hg' },
1431 | { name: '과', value: 'gw' },
1432 | { name: '카조', value: 'jj' },
1433 | { name: '개회', value: 'whp' },
1434 | { name: '개확', value: 'whp' },
1435 | { name: '개보', value: 'whp' },
1436 | { name: '개기', value: 'whp' },
1437 | { name: '간회단', value: 'whp' },
1438 | { name: '회단', value: 'whp' },
1439 | { name: '간회합', value: 'whp' },
1440 | { name: '회합', value: 'whp' },
1441 | { name: '회확', value: 'whp' },
1442 | { name: '회기', value: 'whp' },
1443 | { name: '하확', value: 'whp' },
1444 | { name: '하기', value: 'whp' },
1445 | { name: '하단', value: 'whp' },
1446 | { name: '하합', value: 'whp' },
1447 | { name: '하면', value: 'whp' },
1448 | { name: '국승', value: 'whp' },
1449 | { name: '국지', value: 'whp' },
1450 | { name: '비단', value: 'et' },
1451 | { name: '비합', value: 'et' },
1452 | { name: '아', value: 'et' },
1453 | { name: '인', value: 'et' },
1454 | { name: '인카', value: 'et' },
1455 | { name: '책', value: 'et' },
1456 | { name: '호', value: 'et' },
1457 | { name: '호기', value: 'et' },
1458 | { name: '호명', value: 'et' },
1459 | { name: '호파', value: 'et' },
1460 | { name: '호협', value: 'et' },
1461 | { name: '자', value: 'et' },
1462 | { name: '재아', value: 'et' },
1463 | { name: '재카기', value: 'et' },
1464 | { name: '재카담', value: 'et' },
1465 | { name: '정드', value: 'et' },
1466 | { name: '정명', value: 'et' },
1467 | { name: '주', value: 'et' },
1468 | { name: '카열', value: 'et' },
1469 | { name: '크', value: 'sb' },
1470 | { name: '푸', value: 'sb' },
1471 | { name: '푸집', value: 'sb' },
1472 | { name: '푸초', value: 'sb' },
1473 | { name: '버', value: 'gb' },
1474 | { name: '재버', value: 'gb' },
1475 | { name: '버집', value: 'gb' },
1476 | { name: '동버집', value: 'gb' },
1477 | { name: '동버', value: 'gb' },
1478 | { name: '재동버', value: 'gb' },
1479 | { name: '서', value: 'gb' },
1480 | { name: '동서', value: 'gb' },
1481 | { name: '재동서', value: 'gb' },
1482 | { name: '저', value: 'gb' },
1483 | { name: '동저', value: 'gb' },
1484 | { name: '처', value: 'gb' },
1485 | { name: '처집', value: 'gb' },
1486 | { name: '동처', value: 'gb' },
1487 | { name: '동처집', value: 'gb' },
1488 | { name: '커', value: 'gb' },
1489 | { name: '동커', value: 'gb' },
1490 | { name: '성', value: 'gb' },
1491 | { name: '성로', value: 'gb' },
1492 | { name: '성모', value: 'gb' },
1493 | { name: '성초', value: 'gb' },
1494 | { name: '즈기', value: 'ka' },
1495 | { name: '즈단', value: 'ka' },
1496 | { name: '즈합', value: 'ka' },
1497 | { name: '카', value: 'ka' },
1498 | { name: '카경', value: 'ka' },
1499 | { name: '재카경', value: 'ka' },
1500 | { name: '카구', value: 'ka' },
1501 | { name: '카기', value: 'ka' },
1502 | { name: '카단', value: 'ka' },
1503 | { name: '카담', value: 'ka' },
1504 | { name: '카명', value: 'ka' },
1505 | { name: '카불', value: 'ka' },
1506 | { name: '카소', value: 'ka' },
1507 | { name: '카임', value: 'ka' },
1508 | { name: '카정', value: 'ka' },
1509 | { name: '카합', value: 'ka' },
1510 | { name: '카기전', value: 'ka' },
1511 | { name: '카확', value: 'ka' },
1512 | { name: '가단', value: 'cv' },
1513 | { name: '가소', value: 'cv' },
1514 | { name: '가합', value: 'cv' },
1515 | { name: '간회단', value: 'whp' },
1516 | { name: '간회합', value: 'whp' },
1517 | { name: '감고', value: 'cr' },
1518 | { name: '감초', value: 'cr' },
1519 | { name: '개기', value: 'whp' },
1520 | { name: '개보', value: 'whp' },
1521 | { name: '개회', value: 'whp' },
1522 | { name: '개확', value: 'whp' },
1523 | { name: '고단', value: 'cr' },
1524 | { name: '고약', value: 'ym' },
1525 | { name: '고약전', value: 'wey' },
1526 | { name: '고정', value: 'cr' },
1527 | { name: '고합', value: 'cr' },
1528 | { name: '과', value: 'gw' },
1529 | { name: '구단', value: 'hs' },
1530 | { name: '구합', value: 'hs' },
1531 | { name: '국승', value: 'whp' },
1532 | { name: '국지', value: 'whp' },
1533 | { name: '나', value: 'cv' },
1534 | { name: '너', value: 'ks' },
1535 | { name: '노', value: 'cr' },
1536 | { name: '느단', value: 'ks' },
1537 | { name: '느합', value: 'ks' },
1538 | { name: '동고', value: 'cr' },
1539 | { name: '동노', value: 'cr' },
1540 | { name: '동버', value: 'gb' },
1541 | { name: '동버집', value: 'gb' },
1542 | { name: '동서', value: 'gb' },
1543 | { name: '동저', value: 'gb' },
1544 | { name: '동처', value: 'gb' },
1545 | { name: '동처집', value: 'gb' },
1546 | { name: '동초', value: 'cr' },
1547 | { name: '동커', value: 'gb' },
1548 | { name: '드', value: 'ks' },
1549 | { name: '드단', value: 'ks' },
1550 | { name: '드합', value: 'ks' },
1551 | { name: '라', value: 'hg' },
1552 | { name: '로', value: 'cr' },
1553 | { name: '루', value: 'hg' },
1554 | { name: '르', value: 'ks' },
1555 | { name: '머', value: 'cv' },
1556 | { name: '버', value: 'gb' },
1557 | { name: '버집', value: 'gb' },
1558 | { name: '보', value: 'cr' },
1559 | { name: '보고', value: 'cr' },
1560 | { name: '보노', value: 'cr' },
1561 | { name: '보로', value: 'cr' },
1562 | { name: '보초', value: 'cr' },
1563 | { name: '브', value: 'hg' },
1564 | { name: '비단', value: 'et' },
1565 | { name: '비합', value: 'et' },
1566 | { name: '서', value: 'gb' },
1567 | { name: '성', value: 'gb' },
1568 | { name: '성로', value: 'gb' },
1569 | { name: '성모', value: 'gb' },
1570 | { name: '성초', value: 'gb' },
1571 | { name: '아', value: 'et' },
1572 | { name: '인', value: 'et' },
1573 | { name: '인라', value: 'hg' },
1574 | { name: '인마', value: 'hg' },
1575 | { name: '인카', value: 'et' },
1576 | { name: '자', value: 'et' },
1577 | { name: '재가단', value: 'cv' },
1578 | { name: '재가소', value: 'cv' },
1579 | { name: '재가합', value: 'cv' },
1580 | { name: '재감고', value: 'cr' },
1581 | { name: '재고단', value: 'cr' },
1582 | { name: '재고약', value: 'cr' },
1583 | { name: '재고정', value: 'cr' },
1584 | { name: '재고합', value: 'cr' },
1585 | { name: '재구', value: 'hs' },
1586 | { name: '재구단', value: 'hs' },
1587 | { name: '재구합', value: 'hs' },
1588 | { name: '재나', value: 'cv' },
1589 | { name: '재너', value: 'ks' },
1590 | { name: '재노', value: 'cr' },
1591 | { name: '재느단', value: 'ks' },
1592 | { name: '재느합', value: 'ks' },
1593 | { name: '재동버', value: 'gb' },
1594 | { name: '재동서', value: 'gb' },
1595 | { name: '재드', value: 'ks' },
1596 | { name: '재드단', value: 'ks' },
1597 | { name: '재드합', value: 'ks' },
1598 | { name: '재라', value: 'hg' },
1599 | { name: '재루', value: 'hg' },
1600 | { name: '재머', value: 'cv' },
1601 | { name: '재버', value: 'gb' },
1602 | { name: '재브', value: 'hg' },
1603 | { name: '재아', value: 'et' },
1604 | { name: '재카기', value: 'et' },
1605 | { name: '재카경', value: 'ka' },
1606 | { name: '재카담', value: 'et' },
1607 | { name: '저', value: 'gb' },
1608 | { name: '전고', value: 'cr' },
1609 | { name: '전노', value: 'cr' },
1610 | { name: '전로', value: 'cr' },
1611 | { name: '전초', value: 'cr' },
1612 | { name: '정드', value: 'et' },
1613 | { name: '정명', value: 'et' },
1614 | { name: '정브', value: 'hg' },
1615 | { name: '주', value: 'et' },
1616 | { name: '준재가단', value: 'cv' },
1617 | { name: '준재가소', value: 'cv' },
1618 | { name: '준재가합', value: 'cv' },
1619 | { name: '준재구', value: 'hs' },
1620 | { name: '준재나', value: 'cv' },
1621 | { name: '준재느단', value: 'ks' },
1622 | { name: '준재느합', value: 'ks' },
1623 | { name: '준재드단', value: 'ks' },
1624 | { name: '준재드합', value: 'ks' },
1625 | { name: '준재머', value: 'cv' },
1626 | { name: '즈기', value: 'ka' },
1627 | { name: '즈단', value: 'ka' },
1628 | { name: '즈합', value: 'ka' },
1629 | { name: '책', value: 'et' },
1630 | { name: '차', value: 'dc' },
1631 | { name: '차전', value: 'wdc' },
1632 | { name: '처', value: 'gb' },
1633 | { name: '처집', value: 'gb' },
1634 | { name: '초', value: 'cr' },
1635 | { name: '초기', value: 'cr' },
1636 | { name: '초보', value: 'cr' },
1637 | { name: '초사', value: 'cr' },
1638 | { name: '초적', value: 'cr' },
1639 | { name: '초치', value: 'cr' },
1640 | { name: '치고', value: 'cr' },
1641 | { name: '치초', value: 'cr' },
1642 | { name: '카', value: 'ka' },
1643 | { name: '카경', value: 'ka' },
1644 | { name: '카구', value: 'ka' },
1645 | { name: '카공', value: 'go' },
1646 | { name: '카기', value: 'ka' },
1647 | { name: '카기전', value: 'ka' },
1648 | { name: '카단', value: 'ka' },
1649 | { name: '카담', value: 'ka' },
1650 | { name: '카명', value: 'ka' },
1651 | { name: '카불', value: 'ka' },
1652 | { name: '카소', value: 'ka' },
1653 | { name: '카열', value: 'et' },
1654 | { name: '카임', value: 'ka' },
1655 | { name: '카정', value: 'ka' },
1656 | { name: '카조', value: 'jj' },
1657 | { name: '카합', value: 'ka' },
1658 | { name: '카확', value: 'ka' },
1659 | { name: '커', value: 'gb' },
1660 | { name: '코', value: 'cr' },
1661 | { name: '크', value: 'sb' },
1662 | { name: '타기', value: 'gj' },
1663 | { name: '타배', value: 'gj' },
1664 | { name: '타인', value: 'gj' },
1665 | { name: '타채', value: 'gj' },
1666 | { name: '푸', value: 'sb' },
1667 | { name: '푸집', value: 'sb' },
1668 | { name: '푸초', value: 'sb' },
1669 | { name: '하기', value: 'whp' },
1670 | { name: '하단', value: 'whp' },
1671 | { name: '하면', value: 'whp' },
1672 | { name: '하합', value: 'whp' },
1673 | { name: '하확', value: 'whp' },
1674 | { name: '호', value: 'et' },
1675 | { name: '호기', value: 'et' },
1676 | { name: '호명', value: 'et' },
1677 | { name: '호파', value: 'et' },
1678 | { name: '호협', value: 'et' },
1679 | { name: '회기', value: 'whp' },
1680 | { name: '회단', value: 'whp' },
1681 | { name: '회합', value: 'whp' },
1682 | { name: '회확', value: 'whp' },
1683 | { name: '후감', value: 'ks' },
1684 | { name: '후개', value: 'ks' },
1685 | { name: '후기', value: 'ks' },
1686 | { name: '가단', value: 'cv' },
1687 | { name: '가합', value: 'cv' },
1688 | { name: '가소', value: 'cv' },
1689 | { name: '나', value: 'cv' },
1690 | { name: '로', value: 'cr' },
1691 | { name: '머', value: 'cv' },
1692 | { name: '재가단', value: 'cv' },
1693 | { name: '재가합', value: 'cv' },
1694 | { name: '재가소', value: 'cv' },
1695 | { name: '재나', value: 'cv' },
1696 | { name: '재머', value: 'cv' },
1697 | { name: '준재가단', value: 'cv' },
1698 | { name: '준재가합', value: 'cv' },
1699 | { name: '준재가소', value: 'cv' },
1700 | { name: '준재나', value: 'cv' },
1701 | { name: '준재머', value: 'cv' },
1702 | { name: '구단', value: 'hs' },
1703 | { name: '구합', value: 'hs' },
1704 | { name: '재구', value: 'hs' },
1705 | { name: '재구단', value: 'hs' },
1706 | { name: '재구합', value: 'hs' },
1707 | { name: '준재구', value: 'hs' },
1708 | { name: '타기', value: 'gj' },
1709 | { name: '타배', value: 'gj' },
1710 | { name: '타인', value: 'gj' },
1711 | { name: '타채', value: 'gj' },
1712 | { name: '고단', value: 'cr' },
1713 | { name: '고합', value: 'cr' },
1714 | { name: '고정', value: 'cr' },
1715 | { name: '감고', value: 'cr' },
1716 | { name: '동고', value: 'cr' },
1717 | { name: '노', value: 'cr' },
1718 | { name: '동노', value: 'cr' },
1719 | { name: '보', value: 'cr' },
1720 | { name: '보고', value: 'cr' },
1721 | { name: '보노', value: 'cr' },
1722 | { name: '보로', value: 'cr' },
1723 | { name: '보초', value: 'cr' },
1724 | { name: '전고', value: 'cr' },
1725 | { name: '전노', value: 'cr' },
1726 | { name: '전로', value: 'cr' },
1727 | { name: '전초', value: 'cr' },
1728 | { name: '재고단', value: 'cr' },
1729 | { name: '재고약', value: 'cr' },
1730 | { name: '재고정', value: 'cr' },
1731 | { name: '재고합', value: 'cr' },
1732 | { name: '재감고', value: 'cr' },
1733 | { name: '재노', value: 'cr' },
1734 | { name: '초적', value: 'cr' },
1735 | { name: '초보', value: 'cr' },
1736 | { name: '초기', value: 'cr' },
1737 | { name: '초사', value: 'cr' },
1738 | { name: '감초', value: 'cr' },
1739 | { name: '코', value: 'cr' },
1740 | { name: '초', value: 'cr' },
1741 | { name: '동초', value: 'cr' },
1742 | { name: '초치', value: 'cr' },
1743 | { name: '치고', value: 'cr' },
1744 | { name: '치초', value: 'cr' },
1745 | { name: '고약', value: 'ym' },
1746 | { name: '고약전', value: 'wey' },
1747 | { name: '드단', value: 'ks' },
1748 | { name: '드합', value: 'ks' },
1749 | { name: '너', value: 'ks' },
1750 | { name: '느단', value: 'ks' },
1751 | { name: '느합', value: 'ks' },
1752 | { name: '드', value: 'ks' },
1753 | { name: '르', value: 'ks' },
1754 | { name: '재드단', value: 'ks' },
1755 | { name: '재드합', value: 'ks' },
1756 | { name: '재너', value: 'ks' },
1757 | { name: '재느단', value: 'ks' },
1758 | { name: '재느합', value: 'ks' },
1759 | { name: '준재드단', value: 'ks' },
1760 | { name: '준재드합', value: 'ks' },
1761 | { name: '준재느단', value: 'ks' },
1762 | { name: '준재느합', value: 'ks' },
1763 | { name: '재드', value: 'ks' },
1764 | { name: '후감', value: 'ks' },
1765 | { name: '후개', value: 'ks' },
1766 | { name: '후기', value: 'ks' },
1767 | { name: '차', value: 'dc' },
1768 | { name: '차전', value: 'wdc' },
1769 | { name: '카공', value: 'go' },
1770 | { name: '라', value: 'hg' },
1771 | { name: '루', value: 'hg' },
1772 | { name: '브', value: 'hg' },
1773 | { name: '인라', value: 'hg' },
1774 | { name: '인마', value: 'hg' },
1775 | { name: '재라', value: 'hg' },
1776 | { name: '재루', value: 'hg' },
1777 | { name: '재브', value: 'hg' },
1778 | { name: '정브', value: 'hg' },
1779 | { name: '과', value: 'gw' },
1780 | { name: '카조', value: 'jj' },
1781 | { name: '개회', value: 'whp' },
1782 | { name: '개확', value: 'whp' },
1783 | { name: '개보', value: 'whp' },
1784 | { name: '개기', value: 'whp' },
1785 | { name: '간회단', value: 'whp' },
1786 | { name: '회단', value: 'whp' },
1787 | { name: '간회합', value: 'whp' },
1788 | { name: '회합', value: 'whp' },
1789 | { name: '회확', value: 'whp' },
1790 | { name: '회기', value: 'whp' },
1791 | { name: '하확', value: 'whp' },
1792 | { name: '하기', value: 'whp' },
1793 | { name: '하단', value: 'whp' },
1794 | { name: '하합', value: 'whp' },
1795 | { name: '하면', value: 'whp' },
1796 | { name: '국승', value: 'whp' },
1797 | { name: '국지', value: 'whp' },
1798 | { name: '비단', value: 'et' },
1799 | { name: '비합', value: 'et' },
1800 | { name: '아', value: 'et' },
1801 | { name: '인', value: 'et' },
1802 | { name: '인카', value: 'et' },
1803 | { name: '책', value: 'et' },
1804 | { name: '호', value: 'et' },
1805 | { name: '호기', value: 'et' },
1806 | { name: '호명', value: 'et' },
1807 | { name: '호파', value: 'et' },
1808 | { name: '호협', value: 'et' },
1809 | { name: '자', value: 'et' },
1810 | { name: '재아', value: 'et' },
1811 | { name: '재카기', value: 'et' },
1812 | { name: '재카담', value: 'et' },
1813 | { name: '정드', value: 'et' },
1814 | { name: '정명', value: 'et' },
1815 | { name: '주', value: 'et' },
1816 | { name: '카열', value: 'et' },
1817 | { name: '크', value: 'sb' },
1818 | { name: '푸', value: 'sb' },
1819 | { name: '푸집', value: 'sb' },
1820 | { name: '푸초', value: 'sb' },
1821 | { name: '버', value: 'gb' },
1822 | { name: '재버', value: 'gb' },
1823 | { name: '버집', value: 'gb' },
1824 | { name: '동버집', value: 'gb' },
1825 | { name: '동버', value: 'gb' },
1826 | { name: '재동버', value: 'gb' },
1827 | { name: '서', value: 'gb' },
1828 | { name: '동서', value: 'gb' },
1829 | { name: '재동서', value: 'gb' },
1830 | { name: '저', value: 'gb' },
1831 | { name: '동저', value: 'gb' },
1832 | { name: '처', value: 'gb' },
1833 | { name: '처집', value: 'gb' },
1834 | { name: '동처', value: 'gb' },
1835 | { name: '동처집', value: 'gb' },
1836 | { name: '커', value: 'gb' },
1837 | { name: '동커', value: 'gb' },
1838 | { name: '성', value: 'gb' },
1839 | { name: '성로', value: 'gb' },
1840 | { name: '성모', value: 'gb' },
1841 | { name: '성초', value: 'gb' },
1842 | { name: '즈기', value: 'ka' },
1843 | { name: '즈단', value: 'ka' },
1844 | { name: '즈합', value: 'ka' },
1845 | { name: '카', value: 'ka' },
1846 | { name: '카경', value: 'ka' },
1847 | { name: '재카경', value: 'ka' },
1848 | { name: '카구', value: 'ka' },
1849 | { name: '카기', value: 'ka' },
1850 | { name: '카단', value: 'ka' },
1851 | { name: '카담', value: 'ka' },
1852 | { name: '카명', value: 'ka' },
1853 | { name: '카불', value: 'ka' },
1854 | { name: '카소', value: 'ka' },
1855 | { name: '카임', value: 'ka' },
1856 | { name: '카정', value: 'ka' },
1857 | { name: '카합', value: 'ka' },
1858 | { name: '카기전', value: 'ka' },
1859 | { name: '카확', value: 'ka' },
1860 | { name: '가단', value: 'cv' },
1861 | { name: '가소', value: 'cv' },
1862 | { name: '가합', value: 'cv' },
1863 | { name: '감고', value: 'cr' },
1864 | { name: '감노', value: 'cr' },
1865 | { name: '감로', value: 'cr' },
1866 | { name: '감초', value: 'cr' },
1867 | { name: '개기', value: 'whp' },
1868 | { name: '개보', value: 'whp' },
1869 | { name: '개확', value: 'whp' },
1870 | { name: '개회', value: 'whp' },
1871 | { name: '고단', value: 'cr' },
1872 | { name: '고약', value: 'ym' },
1873 | { name: '고약전', value: 'wey' },
1874 | { name: '고정', value: 'cr' },
1875 | { name: '고합', value: 'cr' },
1876 | { name: '과', value: 'gw' },
1877 | { name: '구단', value: 'hs' },
1878 | { name: '구합', value: 'hs' },
1879 | { name: '나', value: 'cv' },
1880 | { name: '너', value: 'ks' },
1881 | { name: '노', value: 'cr' },
1882 | { name: '느단', value: 'ks' },
1883 | { name: '느합', value: 'ks' },
1884 | { name: '동고', value: 'cr' },
1885 | { name: '동노', value: 'cr' },
1886 | { name: '동버', value: 'gb' },
1887 | { name: '동버집', value: 'gb' },
1888 | { name: '동서', value: 'gb' },
1889 | { name: '동저', value: 'gb' },
1890 | { name: '동처', value: 'gb' },
1891 | { name: '동처집', value: 'gb' },
1892 | { name: '동초', value: 'cr' },
1893 | { name: '동커', value: 'gb' },
1894 | { name: '드', value: 'ks' },
1895 | { name: '드단', value: 'ks' },
1896 | { name: '드합', value: 'ks' },
1897 | { name: '라', value: 'hg' },
1898 | { name: '로', value: 'cr' },
1899 | { name: '루', value: 'hg' },
1900 | { name: '르', value: 'ks' },
1901 | { name: '머', value: 'cv' },
1902 | { name: '버', value: 'gb' },
1903 | { name: '버집', value: 'gb' },
1904 | { name: '보', value: 'cr' },
1905 | { name: '보고', value: 'cr' },
1906 | { name: '보노', value: 'cr' },
1907 | { name: '보로', value: 'cr' },
1908 | { name: '보초', value: 'cr' },
1909 | { name: '브', value: 'hg' },
1910 | { name: '비단', value: 'et' },
1911 | { name: '비합', value: 'et' },
1912 | { name: '서', value: 'gb' },
1913 | { name: '성', value: 'gb' },
1914 | { name: '성로', value: 'gb' },
1915 | { name: '성모', value: 'gb' },
1916 | { name: '성초', value: 'gb' },
1917 | { name: '아', value: 'et' },
1918 | { name: '인', value: 'et' },
1919 | { name: '인라', value: 'hg' },
1920 | { name: '인마', value: 'hg' },
1921 | { name: '인카', value: 'et' },
1922 | { name: '자', value: 'et' },
1923 | { name: '재가단', value: 'cv' },
1924 | { name: '재가소', value: 'cv' },
1925 | { name: '재가합', value: 'cv' },
1926 | { name: '재감고', value: 'cr' },
1927 | { name: '재감노', value: 'cr' },
1928 | { name: '재고단', value: 'cr' },
1929 | { name: '재고약', value: 'cr' },
1930 | { name: '재고정', value: 'cr' },
1931 | { name: '재고합', value: 'cr' },
1932 | { name: '재구단', value: 'hs' },
1933 | { name: '재구합', value: 'hs' },
1934 | { name: '재나', value: 'cv' },
1935 | { name: '재너', value: 'ks' },
1936 | { name: '재노', value: 'cr' },
1937 | { name: '재느단', value: 'ks' },
1938 | { name: '재느합', value: 'ks' },
1939 | { name: '재동버', value: 'gb' },
1940 | { name: '재동서', value: 'gb' },
1941 | { name: '재드', value: 'ks' },
1942 | { name: '재드단', value: 'ks' },
1943 | { name: '재드합', value: 'ks' },
1944 | { name: '재라', value: 'hg' },
1945 | { name: '재루', value: 'hg' },
1946 | { name: '재르', value: 'ks' },
1947 | { name: '재머', value: 'cv' },
1948 | { name: '재버', value: 'gb' },
1949 | { name: '재브', value: 'hg' },
1950 | { name: '재아', value: 'et' },
1951 | { name: '재카기', value: 'et' },
1952 | { name: '재카경', value: 'ka' },
1953 | { name: '재카담', value: 'et' },
1954 | { name: '저', value: 'gb' },
1955 | { name: '전고', value: 'cr' },
1956 | { name: '전노', value: 'cr' },
1957 | { name: '전로', value: 'cr' },
1958 | { name: '전초', value: 'cr' },
1959 | { name: '정드', value: 'et' },
1960 | { name: '정명', value: 'et' },
1961 | { name: '정브', value: 'hg' },
1962 | { name: '주', value: 'et' },
1963 | { name: '준재가단', value: 'cv' },
1964 | { name: '준재가소', value: 'cv' },
1965 | { name: '준재가합', value: 'cv' },
1966 | { name: '준재나', value: 'cv' },
1967 | { name: '준재느단', value: 'ks' },
1968 | { name: '준재느합', value: 'ks' },
1969 | { name: '준재드단', value: 'ks' },
1970 | { name: '준재드합', value: 'ks' },
1971 | { name: '준재르', value: 'ks' },
1972 | { name: '준재머', value: 'cv' },
1973 | { name: '즈기', value: 'ka' },
1974 | { name: '즈단', value: 'ka' },
1975 | { name: '즈합', value: 'ka' },
1976 | { name: '책', value: 'et' },
1977 | { name: '차', value: 'dc' },
1978 | { name: '차전', value: 'wdc' },
1979 | { name: '처', value: 'gb' },
1980 | { name: '처집', value: 'gb' },
1981 | { name: '초', value: 'cr' },
1982 | { name: '초기', value: 'cr' },
1983 | { name: '초보', value: 'cr' },
1984 | { name: '초사', value: 'cr' },
1985 | { name: '초적', value: 'cr' },
1986 | { name: '초치', value: 'cr' },
1987 | { name: '치고', value: 'cr' },
1988 | { name: '치노', value: 'cr' },
1989 | { name: '치로', value: 'cr' },
1990 | { name: '치초', value: 'cr' },
1991 | { name: '카', value: 'ka' },
1992 | { name: '카경', value: 'ka' },
1993 | { name: '카구', value: 'ka' },
1994 | { name: '카공', value: 'go' },
1995 | { name: '카기', value: 'ka' },
1996 | { name: '카기전', value: 'ka' },
1997 | { name: '카단', value: 'ka' },
1998 | { name: '카담', value: 'ka' },
1999 | { name: '카명', value: 'ka' },
2000 | { name: '카불', value: 'ka' },
2001 | { name: '카소', value: 'ka' },
2002 | { name: '카열', value: 'et' },
2003 | { name: '카임', value: 'ka' },
2004 | { name: '카정', value: 'ka' },
2005 | { name: '카조', value: 'jj' },
2006 | { name: '카합', value: 'ka' },
2007 | { name: '카확', value: 'ka' },
2008 | { name: '커', value: 'gb' },
2009 | { name: '코', value: 'cr' },
2010 | { name: '타기', value: 'gj' },
2011 | { name: '타배', value: 'gj' },
2012 | { name: '타인', value: 'gj' },
2013 | { name: '타채', value: 'gj' },
2014 | { name: '하단', value: 'whp' },
2015 | { name: '하면', value: 'whp' },
2016 | { name: '호', value: 'et' },
2017 | { name: '호기', value: 'et' },
2018 | { name: '호명', value: 'et' },
2019 | { name: '호파', value: 'et' },
2020 | { name: '호협', value: 'et' },
2021 | { name: '후감', value: 'ks' },
2022 | { name: '후개', value: 'ks' },
2023 | { name: '후기', value: 'ks' },
2024 | { name: '가단', value: 'cv' },
2025 | { name: '가합', value: 'cv' },
2026 | { name: '가소', value: 'cv' },
2027 | { name: '나', value: 'cv' },
2028 | { name: '머', value: 'cv' },
2029 | { name: '재가단', value: 'cv' },
2030 | { name: '재가합', value: 'cv' },
2031 | { name: '재가소', value: 'cv' },
2032 | { name: '재나', value: 'cv' },
2033 | { name: '재머', value: 'cv' },
2034 | { name: '준재가단', value: 'cv' },
2035 | { name: '준재가합', value: 'cv' },
2036 | { name: '준재가소', value: 'cv' },
2037 | { name: '준재나', value: 'cv' },
2038 | { name: '준재머', value: 'cv' },
2039 | { name: '구단', value: 'hs' },
2040 | { name: '구합', value: 'hs' },
2041 | { name: '재구단', value: 'hs' },
2042 | { name: '재구합', value: 'hs' },
2043 | { name: '타기', value: 'gj' },
2044 | { name: '타배', value: 'gj' },
2045 | { name: '타인', value: 'gj' },
2046 | { name: '타채', value: 'gj' },
2047 | { name: '고단', value: 'cr' },
2048 | { name: '고합', value: 'cr' },
2049 | { name: '고정', value: 'cr' },
2050 | { name: '감고', value: 'cr' },
2051 | { name: '동고', value: 'cr' },
2052 | { name: '노', value: 'cr' },
2053 | { name: '감노', value: 'cr' },
2054 | { name: '동노', value: 'cr' },
2055 | { name: '보고', value: 'cr' },
2056 | { name: '보노', value: 'cr' },
2057 | { name: '보로', value: 'cr' },
2058 | { name: '보초', value: 'cr' },
2059 | { name: '전고', value: 'cr' },
2060 | { name: '전노', value: 'cr' },
2061 | { name: '전로', value: 'cr' },
2062 | { name: '전초', value: 'cr' },
2063 | { name: '재고단', value: 'cr' },
2064 | { name: '재고약', value: 'cr' },
2065 | { name: '재고정', value: 'cr' },
2066 | { name: '재고합', value: 'cr' },
2067 | { name: '재감고', value: 'cr' },
2068 | { name: '재노', value: 'cr' },
2069 | { name: '재감노', value: 'cr' },
2070 | { name: '초적', value: 'cr' },
2071 | { name: '초보', value: 'cr' },
2072 | { name: '초기', value: 'cr' },
2073 | { name: '초사', value: 'cr' },
2074 | { name: '감초', value: 'cr' },
2075 | { name: '로', value: 'cr' },
2076 | { name: '감로', value: 'cr' },
2077 | { name: '보', value: 'cr' },
2078 | { name: '코', value: 'cr' },
2079 | { name: '초', value: 'cr' },
2080 | { name: '동초', value: 'cr' },
2081 | { name: '초치', value: 'cr' },
2082 | { name: '치고', value: 'cr' },
2083 | { name: '치노', value: 'cr' },
2084 | { name: '치로', value: 'cr' },
2085 | { name: '치초', value: 'cr' },
2086 | { name: '고약', value: 'ym' },
2087 | { name: '고약전', value: 'wey' },
2088 | { name: '드단', value: 'ks' },
2089 | { name: '드합', value: 'ks' },
2090 | { name: '너', value: 'ks' },
2091 | { name: '느단', value: 'ks' },
2092 | { name: '느합', value: 'ks' },
2093 | { name: '르', value: 'ks' },
2094 | { name: '재드단', value: 'ks' },
2095 | { name: '재드합', value: 'ks' },
2096 | { name: '재너', value: 'ks' },
2097 | { name: '재느단', value: 'ks' },
2098 | { name: '재느합', value: 'ks' },
2099 | { name: '재르', value: 'ks' },
2100 | { name: '준재드단', value: 'ks' },
2101 | { name: '준재드합', value: 'ks' },
2102 | { name: '준재느단', value: 'ks' },
2103 | { name: '준재느합', value: 'ks' },
2104 | { name: '준재르', value: 'ks' },
2105 | { name: '드', value: 'ks' },
2106 | { name: '재드', value: 'ks' },
2107 | { name: '후감', value: 'ks' },
2108 | { name: '후개', value: 'ks' },
2109 | { name: '후기', value: 'ks' },
2110 | { name: '차', value: 'dc' },
2111 | { name: '차전', value: 'wdc' },
2112 | { name: '카공', value: 'go' },
2113 | { name: '라', value: 'hg' },
2114 | { name: '루', value: 'hg' },
2115 | { name: '브', value: 'hg' },
2116 | { name: '인라', value: 'hg' },
2117 | { name: '인마', value: 'hg' },
2118 | { name: '재라', value: 'hg' },
2119 | { name: '재루', value: 'hg' },
2120 | { name: '재브', value: 'hg' },
2121 | { name: '정브', value: 'hg' },
2122 | { name: '과', value: 'gw' },
2123 | { name: '카조', value: 'jj' },
2124 | { name: '개기', value: 'whp' },
2125 | { name: '개보', value: 'whp' },
2126 | { name: '개확', value: 'whp' },
2127 | { name: '개회', value: 'whp' },
2128 | { name: '하단', value: 'whp' },
2129 | { name: '하면', value: 'whp' },
2130 | { name: '버', value: 'gb' },
2131 | { name: '재버', value: 'gb' },
2132 | { name: '버집', value: 'gb' },
2133 | { name: '동버집', value: 'gb' },
2134 | { name: '동버', value: 'gb' },
2135 | { name: '재동버', value: 'gb' },
2136 | { name: '서', value: 'gb' },
2137 | { name: '동서', value: 'gb' },
2138 | { name: '재동서', value: 'gb' },
2139 | { name: '저', value: 'gb' },
2140 | { name: '동저', value: 'gb' },
2141 | { name: '처', value: 'gb' },
2142 | { name: '처집', value: 'gb' },
2143 | { name: '동처', value: 'gb' },
2144 | { name: '동처집', value: 'gb' },
2145 | { name: '커', value: 'gb' },
2146 | { name: '동커', value: 'gb' },
2147 | { name: '성', value: 'gb' },
2148 | { name: '성로', value: 'gb' },
2149 | { name: '성모', value: 'gb' },
2150 | { name: '성초', value: 'gb' },
2151 | { name: '비단', value: 'et' },
2152 | { name: '비합', value: 'et' },
2153 | { name: '아', value: 'et' },
2154 | { name: '인', value: 'et' },
2155 | { name: '인카', value: 'et' },
2156 | { name: '책', value: 'et' },
2157 | { name: '호', value: 'et' },
2158 | { name: '호기', value: 'et' },
2159 | { name: '호명', value: 'et' },
2160 | { name: '호파', value: 'et' },
2161 | { name: '호협', value: 'et' },
2162 | { name: '자', value: 'et' },
2163 | { name: '재아', value: 'et' },
2164 | { name: '재카기', value: 'et' },
2165 | { name: '재카담', value: 'et' },
2166 | { name: '정드', value: 'et' },
2167 | { name: '정명', value: 'et' },
2168 | { name: '주', value: 'et' },
2169 | { name: '카열', value: 'et' },
2170 | { name: '즈기', value: 'ka' },
2171 | { name: '즈단', value: 'ka' },
2172 | { name: '즈합', value: 'ka' },
2173 | { name: '카', value: 'ka' },
2174 | { name: '카경', value: 'ka' },
2175 | { name: '재카경', value: 'ka' },
2176 | { name: '카구', value: 'ka' },
2177 | { name: '카기', value: 'ka' },
2178 | { name: '카단', value: 'ka' },
2179 | { name: '카담', value: 'ka' },
2180 | { name: '카명', value: 'ka' },
2181 | { name: '카불', value: 'ka' },
2182 | { name: '카소', value: 'ka' },
2183 | { name: '카임', value: 'ka' },
2184 | { name: '카정', value: 'ka' },
2185 | { name: '카합', value: 'ka' },
2186 | { name: '카기전', value: 'ka' },
2187 | { name: '카확', value: 'ka' },
2188 | { name: '가단', value: 'cv' },
2189 | { name: '가소', value: 'cv' },
2190 | { name: '과', value: 'gw' },
2191 | { name: '머', value: 'cv' },
2192 | { name: '인', value: 'et' },
2193 | { name: '인라', value: 'hg' },
2194 | { name: '인마', value: 'hg' },
2195 | { name: '인카', value: 'et' },
2196 | { name: '자', value: 'et' },
2197 | { name: '재가소', value: 'cv' },
2198 | { name: '재머', value: 'cv' },
2199 | { name: '재카기', value: 'et' },
2200 | { name: '재카경', value: 'ka' },
2201 | { name: '재카담', value: 'et' },
2202 | { name: '준재가소', value: 'cv' },
2203 | { name: '준재머', value: 'cv' },
2204 | { name: '차', value: 'dc' },
2205 | { name: '차전', value: 'wdc' },
2206 | { name: '책', value: 'et' },
2207 | { name: '카경', value: 'ka' },
2208 | { name: '카구', value: 'ka' },
2209 | { name: '카기', value: 'ka' },
2210 | { name: '카기전', value: 'ka' },
2211 | { name: '카단', value: 'ka' },
2212 | { name: '카담', value: 'ka' },
2213 | { name: '카소', value: 'ka' },
2214 | { name: '카열', value: 'et' },
2215 | { name: '카임', value: 'ka' },
2216 | { name: '카정', value: 'ka' },
2217 | { name: '카확', value: 'ka' },
2218 | { name: '호', value: 'et' },
2219 | { name: '호기', value: 'et' },
2220 | { name: '호명', value: 'et' },
2221 | { name: '호파', value: 'et' },
2222 | { name: '호협', value: 'et' },
2223 | { name: '가단', value: 'cv' },
2224 | { name: '가소', value: 'cv' },
2225 | { name: '머', value: 'cv' },
2226 | { name: '재가소', value: 'cv' },
2227 | { name: '재머', value: 'cv' },
2228 | { name: '준재가소', value: 'cv' },
2229 | { name: '준재머', value: 'cv' },
2230 | { name: '차', value: 'dc' },
2231 | { name: '차전', value: 'wdc' },
2232 | { name: '카경', value: 'ka' },
2233 | { name: '재카경', value: 'ka' },
2234 | { name: '카구', value: 'ka' },
2235 | { name: '카기', value: 'ka' },
2236 | { name: '카기전', value: 'ka' },
2237 | { name: '카단', value: 'ka' },
2238 | { name: '카담', value: 'ka' },
2239 | { name: '카소', value: 'ka' },
2240 | { name: '카임', value: 'ka' },
2241 | { name: '카정', value: 'ka' },
2242 | { name: '카확', value: 'ka' },
2243 | { name: '인라', value: 'hg' },
2244 | { name: '인마', value: 'hg' },
2245 | { name: '과', value: 'gw' },
2246 | { name: '책', value: 'et' },
2247 | { name: '호', value: 'et' },
2248 | { name: '호기', value: 'et' },
2249 | { name: '호명', value: 'et' },
2250 | { name: '호파', value: 'et' },
2251 | { name: '호협', value: 'et' },
2252 | { name: '자', value: 'et' },
2253 | { name: '재카기', value: 'et' },
2254 | { name: '재카담', value: 'et' },
2255 | { name: '카열', value: 'et' },
2256 | { name: '인', value: 'et' },
2257 | { name: '인카', value: 'et' },
2258 | { name: '가단', value: 'cv' },
2259 | { name: '가소', value: 'cv' },
2260 | { name: '가합', value: 'cv' },
2261 | { name: '감고', value: 'cr' },
2262 | { name: '감초', value: 'cr' },
2263 | { name: '고단', value: 'cr' },
2264 | { name: '고약', value: 'ym' },
2265 | { name: '고약전', value: 'wey' },
2266 | { name: '고정', value: 'cr' },
2267 | { name: '고합', value: 'cr' },
2268 | { name: '과', value: 'gw' },
2269 | { name: '나', value: 'cv' },
2270 | { name: '너', value: 'ks' },
2271 | { name: '노', value: 'cr' },
2272 | { name: '느단', value: 'ks' },
2273 | { name: '느합', value: 'ks' },
2274 | { name: '동고', value: 'cr' },
2275 | { name: '동노', value: 'cr' },
2276 | { name: '동버', value: 'gb' },
2277 | { name: '동버집', value: 'gb' },
2278 | { name: '동저', value: 'gb' },
2279 | { name: '동처', value: 'gb' },
2280 | { name: '동처집', value: 'gb' },
2281 | { name: '동초', value: 'cr' },
2282 | { name: '드', value: 'ks' },
2283 | { name: '드단', value: 'ks' },
2284 | { name: '드합', value: 'ks' },
2285 | { name: '머', value: 'cv' },
2286 | { name: '버', value: 'gb' },
2287 | { name: '버집', value: 'gb' },
2288 | { name: '보', value: 'cr' },
2289 | { name: '보고', value: 'cr' },
2290 | { name: '보노', value: 'cr' },
2291 | { name: '보로', value: 'cr' },
2292 | { name: '보초', value: 'cr' },
2293 | { name: '비단', value: 'et' },
2294 | { name: '비합', value: 'et' },
2295 | { name: '성', value: 'gb' },
2296 | { name: '성로', value: 'gb' },
2297 | { name: '성모', value: 'gb' },
2298 | { name: '성초', value: 'gb' },
2299 | { name: '인', value: 'et' },
2300 | { name: '인라', value: 'hg' },
2301 | { name: '인마', value: 'hg' },
2302 | { name: '인카', value: 'et' },
2303 | { name: '자', value: 'et' },
2304 | { name: '재가단', value: 'cv' },
2305 | { name: '재가소', value: 'cv' },
2306 | { name: '재가합', value: 'cv' },
2307 | { name: '재감고', value: 'cr' },
2308 | { name: '재고단', value: 'cr' },
2309 | { name: '재고약', value: 'cr' },
2310 | { name: '재고정', value: 'cr' },
2311 | { name: '재고합', value: 'cr' },
2312 | { name: '재너', value: 'ks' },
2313 | { name: '재느단', value: 'ks' },
2314 | { name: '재느합', value: 'ks' },
2315 | { name: '재동버', value: 'gb' },
2316 | { name: '재드', value: 'ks' },
2317 | { name: '재드단', value: 'ks' },
2318 | { name: '재드합', value: 'ks' },
2319 | { name: '재머', value: 'cv' },
2320 | { name: '재버', value: 'gb' },
2321 | { name: '재카기', value: 'et' },
2322 | { name: '재카경', value: 'ka' },
2323 | { name: '재카담', value: 'et' },
2324 | { name: '저', value: 'gb' },
2325 | { name: '전고', value: 'cr' },
2326 | { name: '전노', value: 'cr' },
2327 | { name: '전로', value: 'cr' },
2328 | { name: '전초', value: 'cr' },
2329 | { name: '정드', value: 'et' },
2330 | { name: '정명', value: 'et' },
2331 | { name: '주', value: 'et' },
2332 | { name: '준재가단', value: 'cv' },
2333 | { name: '준재가소', value: 'cv' },
2334 | { name: '준재가합', value: 'cv' },
2335 | { name: '준재느단', value: 'ks' },
2336 | { name: '준재느합', value: 'ks' },
2337 | { name: '준재드단', value: 'ks' },
2338 | { name: '준재드합', value: 'ks' },
2339 | { name: '준재르', value: 'ks' },
2340 | { name: '준재머', value: 'cv' },
2341 | { name: '즈기', value: 'ka' },
2342 | { name: '즈단', value: 'ka' },
2343 | { name: '즈합', value: 'ka' },
2344 | { name: '차', value: 'dc' },
2345 | { name: '차전', value: 'wdc' },
2346 | { name: '책', value: 'et' },
2347 | { name: '처', value: 'gb' },
2348 | { name: '처집', value: 'gb' },
2349 | { name: '초', value: 'cr' },
2350 | { name: '초기', value: 'cr' },
2351 | { name: '초보', value: 'cr' },
2352 | { name: '초사', value: 'cr' },
2353 | { name: '초적', value: 'cr' },
2354 | { name: '초치', value: 'cr' },
2355 | { name: '치고', value: 'cr' },
2356 | { name: '치초', value: 'cr' },
2357 | { name: '카', value: 'ka' },
2358 | { name: '카경', value: 'ka' },
2359 | { name: '카구', value: 'ka' },
2360 | { name: '카공', value: 'go' },
2361 | { name: '카기', value: 'ka' },
2362 | { name: '카기전', value: 'ka' },
2363 | { name: '카단', value: 'ka' },
2364 | { name: '카담', value: 'ka' },
2365 | { name: '카명', value: 'ka' },
2366 | { name: '카불', value: 'ka' },
2367 | { name: '카소', value: 'ka' },
2368 | { name: '카열', value: 'et' },
2369 | { name: '카임', value: 'ka' },
2370 | { name: '카정', value: 'ka' },
2371 | { name: '카조', value: 'jj' },
2372 | { name: '카합', value: 'ka' },
2373 | { name: '카확', value: 'ka' },
2374 | { name: '코', value: 'cr' },
2375 | { name: '타기', value: 'gj' },
2376 | { name: '타배', value: 'gj' },
2377 | { name: '타인', value: 'gj' },
2378 | { name: '타채', value: 'gj' },
2379 | { name: '호', value: 'et' },
2380 | { name: '호기', value: 'et' },
2381 | { name: '호명', value: 'et' },
2382 | { name: '호파', value: 'et' },
2383 | { name: '호협', value: 'et' },
2384 | { name: '후감', value: 'ks' },
2385 | { name: '후개', value: 'ks' },
2386 | { name: '후기', value: 'ks' },
2387 | { name: '가단', value: 'cv' },
2388 | { name: '가합', value: 'cv' },
2389 | { name: '가소', value: 'cv' },
2390 | { name: '나', value: 'cv' },
2391 | { name: '머', value: 'cv' },
2392 | { name: '재가단', value: 'cv' },
2393 | { name: '재가합', value: 'cv' },
2394 | { name: '재가소', value: 'cv' },
2395 | { name: '재머', value: 'cv' },
2396 | { name: '준재가단', value: 'cv' },
2397 | { name: '준재가합', value: 'cv' },
2398 | { name: '준재가소', value: 'cv' },
2399 | { name: '준재머', value: 'cv' },
2400 | { name: '타기', value: 'gj' },
2401 | { name: '타배', value: 'gj' },
2402 | { name: '타인', value: 'gj' },
2403 | { name: '타채', value: 'gj' },
2404 | { name: '고단', value: 'cr' },
2405 | { name: '고합', value: 'cr' },
2406 | { name: '고정', value: 'cr' },
2407 | { name: '감고', value: 'cr' },
2408 | { name: '동고', value: 'cr' },
2409 | { name: '노', value: 'cr' },
2410 | { name: '동노', value: 'cr' },
2411 | { name: '보', value: 'cr' },
2412 | { name: '보고', value: 'cr' },
2413 | { name: '보노', value: 'cr' },
2414 | { name: '보로', value: 'cr' },
2415 | { name: '보초', value: 'cr' },
2416 | { name: '전고', value: 'cr' },
2417 | { name: '전노', value: 'cr' },
2418 | { name: '전로', value: 'cr' },
2419 | { name: '전초', value: 'cr' },
2420 | { name: '재고단', value: 'cr' },
2421 | { name: '재고약', value: 'cr' },
2422 | { name: '재고정', value: 'cr' },
2423 | { name: '재고합', value: 'cr' },
2424 | { name: '재감고', value: 'cr' },
2425 | { name: '초적', value: 'cr' },
2426 | { name: '초보', value: 'cr' },
2427 | { name: '초기', value: 'cr' },
2428 | { name: '초사', value: 'cr' },
2429 | { name: '감초', value: 'cr' },
2430 | { name: '코', value: 'cr' },
2431 | { name: '초', value: 'cr' },
2432 | { name: '동초', value: 'cr' },
2433 | { name: '초치', value: 'cr' },
2434 | { name: '치고', value: 'cr' },
2435 | { name: '치초', value: 'cr' },
2436 | { name: '고약', value: 'ym' },
2437 | { name: '고약전', value: 'wey' },
2438 | { name: '드단', value: 'ks' },
2439 | { name: '드합', value: 'ks' },
2440 | { name: '너', value: 'ks' },
2441 | { name: '느단', value: 'ks' },
2442 | { name: '느합', value: 'ks' },
2443 | { name: '재드단', value: 'ks' },
2444 | { name: '재드합', value: 'ks' },
2445 | { name: '재너', value: 'ks' },
2446 | { name: '재느단', value: 'ks' },
2447 | { name: '재느합', value: 'ks' },
2448 | { name: '준재드단', value: 'ks' },
2449 | { name: '준재드합', value: 'ks' },
2450 | { name: '준재느단', value: 'ks' },
2451 | { name: '준재느합', value: 'ks' },
2452 | { name: '준재르', value: 'ks' },
2453 | { name: '드', value: 'ks' },
2454 | { name: '재드', value: 'ks' },
2455 | { name: '후감', value: 'ks' },
2456 | { name: '후개', value: 'ks' },
2457 | { name: '후기', value: 'ks' },
2458 | { name: '차', value: 'dc' },
2459 | { name: '차전', value: 'wdc' },
2460 | { name: '카공', value: 'go' },
2461 | { name: '인라', value: 'hg' },
2462 | { name: '인마', value: 'hg' },
2463 | { name: '과', value: 'gw' },
2464 | { name: '카조', value: 'jj' },
2465 | { name: '버', value: 'gb' },
2466 | { name: '재버', value: 'gb' },
2467 | { name: '버집', value: 'gb' },
2468 | { name: '동버집', value: 'gb' },
2469 | { name: '동버', value: 'gb' },
2470 | { name: '재동버', value: 'gb' },
2471 | { name: '저', value: 'gb' },
2472 | { name: '동저', value: 'gb' },
2473 | { name: '처', value: 'gb' },
2474 | { name: '처집', value: 'gb' },
2475 | { name: '동처', value: 'gb' },
2476 | { name: '동처집', value: 'gb' },
2477 | { name: '성', value: 'gb' },
2478 | { name: '성로', value: 'gb' },
2479 | { name: '성모', value: 'gb' },
2480 | { name: '성초', value: 'gb' },
2481 | { name: '즈기', value: 'ka' },
2482 | { name: '즈단', value: 'ka' },
2483 | { name: '즈합', value: 'ka' },
2484 | { name: '카', value: 'ka' },
2485 | { name: '카경', value: 'ka' },
2486 | { name: '재카경', value: 'ka' },
2487 | { name: '카구', value: 'ka' },
2488 | { name: '카기', value: 'ka' },
2489 | { name: '카단', value: 'ka' },
2490 | { name: '카담', value: 'ka' },
2491 | { name: '카명', value: 'ka' },
2492 | { name: '카불', value: 'ka' },
2493 | { name: '카소', value: 'ka' },
2494 | { name: '카임', value: 'ka' },
2495 | { name: '카정', value: 'ka' },
2496 | { name: '카합', value: 'ka' },
2497 | { name: '카기전', value: 'ka' },
2498 | { name: '카확', value: 'ka' },
2499 | { name: '비단', value: 'et' },
2500 | { name: '비합', value: 'et' },
2501 | { name: '인', value: 'et' },
2502 | { name: '인카', value: 'et' },
2503 | { name: '책', value: 'et' },
2504 | { name: '자', value: 'et' },
2505 | { name: '재카기', value: 'et' },
2506 | { name: '재카담', value: 'et' },
2507 | { name: '정드', value: 'et' },
2508 | { name: '정명', value: 'et' },
2509 | { name: '주', value: 'et' },
2510 | { name: '카열', value: 'et' },
2511 | { name: '호', value: 'et' },
2512 | { name: '호기', value: 'et' },
2513 | { name: '호명', value: 'et' },
2514 | { name: '호파', value: 'et' },
2515 | { name: '호협', value: 'et' }
2516 | ];
2517 |
--------------------------------------------------------------------------------